{
  "hash": "1507b768f7a181f20f819e36344f52c6",
  "source": "/*\n * Generated by PEG.js 0.10.0.\n *\n * http://pegjs.org/\n */\n(function() {\n  \"use strict\";\n\n  function peg$subclass(child, parent) {\n    function ctor() { this.constructor = child; }\n    ctor.prototype = parent.prototype;\n    child.prototype = new ctor();\n  }\n\n  function peg$SyntaxError(message, expected, found, location) {\n    this.message  = message;\n    this.expected = expected;\n    this.found    = found;\n    this.location = location;\n    this.name     = \"SyntaxError\";\n\n    if (typeof Error.captureStackTrace === \"function\") {\n      Error.captureStackTrace(this, peg$SyntaxError);\n    }\n  }\n\n  peg$subclass(peg$SyntaxError, Error);\n\n  peg$SyntaxError.buildMessage = function(expected, found) {\n    var DESCRIBE_EXPECTATION_FNS = {\n          literal: function(expectation) {\n            return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n          },\n\n          \"class\": function(expectation) {\n            var escapedParts = \"\",\n                i;\n\n            for (i = 0; i < expectation.parts.length; i++) {\n              escapedParts += expectation.parts[i] instanceof Array\n                ? classEscape(expectation.parts[i][0]) + \"-\" + classEscape(expectation.parts[i][1])\n                : classEscape(expectation.parts[i]);\n            }\n\n            return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts + \"]\";\n          },\n\n          any: function(expectation) {\n            return \"any character\";\n          },\n\n          end: function(expectation) {\n            return \"end of input\";\n          },\n\n          other: function(expectation) {\n            return expectation.description;\n          }\n        };\n\n    function hex(ch) {\n      return ch.charCodeAt(0).toString(16).toUpperCase();\n    }\n\n    function literalEscape(s) {\n      return s\n        .replace(/\\\\/g, '\\\\\\\\')\n        .replace(/\"/g,  '\\\\\"')\n        .replace(/\\0/g, '\\\\0')\n        .replace(/\\t/g, '\\\\t')\n        .replace(/\\n/g, '\\\\n')\n        .replace(/\\r/g, '\\\\r')\n        .replace(/[\\x00-\\x0F]/g,          function(ch) { return '\\\\x0' + hex(ch); })\n        .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return '\\\\x'  + hex(ch); });\n    }\n\n    function classEscape(s) {\n      return s\n        .replace(/\\\\/g, '\\\\\\\\')\n        .replace(/\\]/g, '\\\\]')\n        .replace(/\\^/g, '\\\\^')\n        .replace(/-/g,  '\\\\-')\n        .replace(/\\0/g, '\\\\0')\n        .replace(/\\t/g, '\\\\t')\n        .replace(/\\n/g, '\\\\n')\n        .replace(/\\r/g, '\\\\r')\n        .replace(/[\\x00-\\x0F]/g,          function(ch) { return '\\\\x0' + hex(ch); })\n        .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return '\\\\x'  + hex(ch); });\n    }\n\n    function describeExpectation(expectation) {\n      return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n    }\n\n    function describeExpected(expected) {\n      var descriptions = new Array(expected.length),\n          i, j;\n\n      for (i = 0; i < expected.length; i++) {\n        descriptions[i] = describeExpectation(expected[i]);\n      }\n\n      descriptions.sort();\n\n      if (descriptions.length > 0) {\n        for (i = 1, j = 1; i < descriptions.length; i++) {\n          if (descriptions[i - 1] !== descriptions[i]) {\n            descriptions[j] = descriptions[i];\n            j++;\n          }\n        }\n        descriptions.length = j;\n      }\n\n      switch (descriptions.length) {\n        case 1:\n          return descriptions[0];\n\n        case 2:\n          return descriptions[0] + \" or \" + descriptions[1];\n\n        default:\n          return descriptions.slice(0, -1).join(\", \")\n            + \", or \"\n            + descriptions[descriptions.length - 1];\n      }\n    }\n\n    function describeFound(found) {\n      return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n    }\n\n    return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n  };\n\n  function peg$parse(input, options) {\n    options = options !== void 0 ? options : {};\n\n    var peg$FAILED = {},\n\n        peg$startRuleFunctions = { start: peg$parsestart, TestStatements: peg$parseTestStatements },\n        peg$startRuleFunction  = peg$parsestart,\n\n        peg$c0 = function() {\n            return skill;\n          },\n        peg$c1 = peg$otherExpectation(\"End of File\"),\n        peg$c2 = \"\\x1A\",\n        peg$c3 = peg$literalExpectation(\"\\x1A\", false),\n        peg$c4 = function() {\n            testLead(location(), text());\n          },\n        peg$c5 = function() {return isTopTarget('isState');},\n        peg$c6 = function() {return isTopTarget('isTest');},\n        peg$c7 = function() {return isTopTarget('isDataTable');},\n        peg$c8 = function() {\n            testLead(location(), \"\");\n            pushState(text());\n          },\n        peg$c9 = peg$otherExpectation(\"database type definition\"),\n        peg$c10 = \"define\",\n        peg$c11 = peg$literalExpectation(\"define\", false),\n        peg$c12 = \"@\",\n        peg$c13 = peg$literalExpectation(\"@\", false),\n        peg$c14 = \"as\",\n        peg$c15 = peg$literalExpectation(\"as\", false),\n        peg$c16 = function(name, type) {\n            skill.pushDBTypeDefinition( new lib.DBTypeDefinition(location(), name, type) );\n          },\n        peg$c17 = function(results) {\n            if ( !results ) {\n              return true;\n            }\n            let shouldInclude = true;\n            for ( let i=0; i<results.length; ++i ) {\n              if ( !results[i] ) {\n                shouldInclude = false;\n              }\n            }\n            return shouldInclude;\n          },\n        peg$c18 = function() { return true; },\n        peg$c19 = function(r) { return r; },\n        peg$c20 = peg$anyExpectation(),\n        peg$c21 = peg$otherExpectation(\"file exclusion statement\"),\n        peg$c22 = \"exclude file\",\n        peg$c23 = peg$literalExpectation(\"exclude file\", false),\n        peg$c24 = \"if\",\n        peg$c25 = peg$literalExpectation(\"if\", false),\n        peg$c26 = \"unless\",\n        peg$c27 = peg$literalExpectation(\"unless\", false),\n        peg$c28 = function(type, expr) {\n            if (options.context) {\n              let result = expr.evaluateStatic(options.context);\n              if (type === \"unless\") {\n                return result == true;\n              } else {\n                return result == false;\n              }\n\n            }\n            return null;\n          },\n        peg$c29 = peg$otherExpectation(\"conditional statement\"),\n        peg$c30 = function(expression) {\n              pushIf(location(), new lib.IfCondition(expression));\n            },\n        peg$c31 = function(expression) {\n              pushIf(location(), new lib.IfCondition(expression, true));\n            },\n        peg$c32 = \"else\",\n        peg$c33 = peg$literalExpectation(\"else\", false),\n        peg$c34 = function(expression) {\n              pushIf(location(), new lib.ElseCondition(expression));\n            },\n        peg$c35 = function(expression) {\n              pushIf(location(), new lib.ElseCondition(expression, true));\n            },\n        peg$c36 = function() {\n              const target = getTarget();\n              if (target && target.pushCode) {\n                pushIf(location(), new lib.ElseCondition());\n              } else if (target && target.pushCase) {\n                pushSwitchCase(location(), new lib.SwitchCase(location(), \"else\"));\n              } else {\n                throw new ParserError(location(), \"there isn't anything to `else` here\");\n              }\n            },\n        peg$c37 = peg$otherExpectation(\"for statement\"),\n        peg$c38 = \"for\",\n        peg$c39 = peg$literalExpectation(\"for\", false),\n        peg$c40 = \",\",\n        peg$c41 = peg$literalExpectation(\",\", false),\n        peg$c42 = \"in\",\n        peg$c43 = peg$literalExpectation(\"in\", false),\n        peg$c44 = function(key, value, source) {\n            pushFor(location(), new lib.ForStatement(key, value, source));\n          },\n        peg$c45 = function(value, source) {\n            pushFor(location(), new lib.ForStatement(null, value, source));\n          },\n        peg$c46 = \"switch\",\n        peg$c47 = peg$literalExpectation(\"switch\", false),\n        peg$c48 = function(assigns) {\n            pushSwitch(location(),  new lib.SwitchStatement(assigns));\n          },\n        peg$c49 = function() {\n            pushSwitch(location(),  new lib.SwitchStatement([]));\n          },\n        peg$c50 = function(head, tail) {\n            tail = tail || [];\n            tail.unshift(head);\n            return tail;\n          },\n        peg$c51 = function(assign) { return assign; },\n        peg$c52 = \"=\",\n        peg$c53 = peg$literalExpectation(\"=\", false),\n        peg$c54 = function(name, value) {\n              return new lib.SwitchAssignment(location(), name, value);\n            },\n        peg$c55 = function(value) {\n              return new lib.SwitchAssignment(location(), null, value);\n            },\n        peg$c56 = function(name) {\n              return new lib.SwitchAssignment(location(), name, null);\n            },\n        peg$c57 = function(name) {\n              name = new lib.DatabaseReferencePart(name);\n              return new lib.SwitchAssignment(location(), name, null);\n            },\n        peg$c58 = \"DEPLOY.\",\n        peg$c59 = peg$literalExpectation(\"DEPLOY.\", false),\n        peg$c60 = function(name) {\n              name = new lib.StaticVariableReferencePart(name);\n              return new lib.SwitchAssignment(location(), name, null);\n            },\n        peg$c61 = function(name) {\n              name = new lib.SlotReferencePart(name);\n              return new lib.SwitchAssignment(location(), name, null);\n            },\n        peg$c62 = \"match\",\n        peg$c63 = peg$literalExpectation(\"match\", false),\n        peg$c64 = \"then\",\n        peg$c65 = peg$literalExpectation(\"then\", false),\n        peg$c66 = function(regex) {\n            pushSwitchCase(location(), new lib.SwitchCase(location(), 'regex', regex));\n          },\n        peg$c67 = function(op, expr) {\n            pushSwitchCase(location(), new lib.SwitchCase(location(), op, expr));\n          },\n        peg$c68 = function(expr) {\n              pushSwitchCase(location(), new lib.SwitchCase(location(), 'expr', expr));\n            },\n        peg$c69 = peg$otherExpectation(\"Switch Comparison Operator\"),\n        peg$c70 = \"==\",\n        peg$c71 = peg$literalExpectation(\"==\", false),\n        peg$c72 = \"!=\",\n        peg$c73 = peg$literalExpectation(\"!=\", false),\n        peg$c74 = \"<=\",\n        peg$c75 = peg$literalExpectation(\"<=\", false),\n        peg$c76 = \">=\",\n        peg$c77 = peg$literalExpectation(\">=\", false),\n        peg$c78 = \"<\",\n        peg$c79 = peg$literalExpectation(\"<\", false),\n        peg$c80 = \">\",\n        peg$c81 = peg$literalExpectation(\">\", false),\n        peg$c82 = \"/\",\n        peg$c83 = peg$literalExpectation(\"/\", false),\n        peg$c84 = /^[gi]/,\n        peg$c85 = peg$classExpectation([\"g\", \"i\"], false, false),\n        peg$c86 = function() {\n            const splitIndex = text().lastIndexOf('/');\n            return { expression: text().substring(1,splitIndex), flags: text().substring(splitIndex+1) };\n          },\n        peg$c87 = /^[a-zA-Z0-9|*+()=\\-_'<>!:?;,.\\^${}[\\] ]/,\n        peg$c88 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], [\"0\", \"9\"], \"|\", \"*\", \"+\", \"(\", \")\", \"=\", \"-\", \"_\", \"'\", \"<\", \">\", \"!\", \":\", \"?\", \";\", \",\", \".\", \"^\", \"$\", \"{\", \"}\", \"[\", \"]\", \" \"], false, false),\n        peg$c89 = \"\\\\\",\n        peg$c90 = peg$literalExpectation(\"\\\\\", false),\n        peg$c91 = /^[wWdDsSbBtnr.+*?$\\^\\\\\\/[\\](){}=!<>|:\\-]/,\n        peg$c92 = peg$classExpectation([\"w\", \"W\", \"d\", \"D\", \"s\", \"S\", \"b\", \"B\", \"t\", \"n\", \"r\", \".\", \"+\", \"*\", \"?\", \"$\", \"^\", \"\\\\\", \"/\", \"[\", \"]\", \"(\", \")\", \"{\", \"}\", \"=\", \"!\", \"<\", \">\", \"|\", \":\", \"-\"], false, false),\n        peg$c93 = \"say\",\n        peg$c94 = peg$literalExpectation(\"say\", false),\n        peg$c95 = function(say) {\n            pushSay(location(), say);\n          },\n        peg$c96 = \"reprompt\",\n        peg$c97 = peg$literalExpectation(\"reprompt\", false),\n        peg$c98 = function(say) {\n            say.isReprompt = true;\n            pushSay(location(), say);\n          },\n        peg$c99 = \"say reprompt\",\n        peg$c100 = peg$literalExpectation(\"say reprompt\", false),\n        peg$c101 = function(say) {\n            say.isAlsoReprompt = true\n            pushSay(location(), say);\n          },\n        peg$c102 = \"soundEffect\",\n        peg$c103 = peg$literalExpectation(\"soundEffect\", false),\n        peg$c104 = function(asset) {\n            pushSay(location(), new lib.SoundEffect(location, asset));\n          },\n        peg$c105 = \"playMusic\",\n        peg$c106 = peg$literalExpectation(\"playMusic\", false),\n        peg$c107 = function(asset) {\n            pushCode(location(), new lib.PlayMusic(location, asset));\n          },\n        peg$c108 = function(asset) {\n            pushSay(location(), new lib.PlayMusic(location, asset));\n          },\n        peg$c109 = \"stopMusic\",\n        peg$c110 = peg$literalExpectation(\"stopMusic\", false),\n        peg$c111 = function() {\n            pushCode(location(), new lib.StopMusic(location));\n          },\n        peg$c112 = \"pronounce\",\n        peg$c113 = peg$literalExpectation(\"pronounce\", false),\n        peg$c114 = function(source, target) {\n            skill.pushSayMapping(location(), source, target);\n          },\n        peg$c115 = \"card\",\n        peg$c116 = peg$literalExpectation(\"card\", false),\n        peg$c117 = function(title, image, content) {\n              pushSay(location(), new lib.Card(location(), title, content, image));\n            },\n        peg$c118 = function(title, image) {\n              pushSay(location(), new lib.Card(location(), title, null, image));\n            },\n        peg$c119 = function(title, content) {\n              pushSay(location(), new lib.Card(location(), title, content, null));\n            },\n        peg$c120 = function(title) {\n              pushSay(location(), new lib.Card(location(), title, null, null));\n            },\n        peg$c121 = function(image) {\n              pushSay(location(), new lib.Card(location(), null, null, image));\n            },\n        peg$c122 = \"directive\",\n        peg$c123 = peg$literalExpectation(\"directive\", false),\n        peg$c124 = function(expression) {\n            pushCode(location(), new lib.Directive(expression));\n          },\n        peg$c125 = \"metric\",\n        peg$c126 = peg$literalExpectation(\"metric\", false),\n        peg$c127 = function(name) {\n            pushCode(location(), new lib.RecordMetric(name));\n          },\n        peg$c128 = /^[a-z]/,\n        peg$c129 = peg$classExpectation([[\"a\", \"z\"]], false, false),\n        peg$c130 = /^[A-Z]/,\n        peg$c131 = peg$classExpectation([[\"A\", \"Z\"]], false, false),\n        peg$c132 = /^[0-9]/,\n        peg$c133 = peg$classExpectation([[\"0\", \"9\"]], false, false),\n        peg$c134 = \"-\",\n        peg$c135 = peg$literalExpectation(\"-\", false),\n        peg$c136 = function() {\n            return text();\n          },\n        peg$c137 = \"setResponseSpacing\",\n        peg$c138 = peg$literalExpectation(\"setResponseSpacing\", false),\n        peg$c139 = function(amount) {\n            pushCode(location(), new lib.SetResponseSpacing(amount));\n          },\n        peg$c140 = \"message\",\n        peg$c141 = peg$literalExpectation(\"message\", false),\n        peg$c142 = \":\",\n        peg$c143 = peg$literalExpectation(\":\", false),\n        peg$c144 = function(key, value) {\n            // @TODO: This is an edge case for the upsellInSkillProduct statement, so that the <upsell> tag\n            // won't be treated as a \"ScreenString\" tag. Ultimately, we should handle this more cleanly.\n            const target = getTarget();\n            if (target && target.pushAttribute) {\n              target.pushAttribute(location(), key, value);\n            } else {\n              throw new ParserError(location(), \"Couldn't find anything to add an attribute to here\");\n            }\n          },\n        peg$c145 = function(key, value) {\n            const target = getTarget();\n            if (target && target.pushAttribute) {\n              target.pushAttribute(location(), key, value);\n            } else {\n              throw new ParserError(location(), \"Couldn't find anything to add an attribute to here\");\n            }\n          },\n        peg$c146 = \"(\",\n        peg$c147 = peg$literalExpectation(\"(\", false),\n        peg$c148 = \".\",\n        peg$c149 = peg$literalExpectation(\".\", false),\n        peg$c150 = function(key, value) {\n            // this branch needs to carefully avoid shadowing the next one\n            // at some point we have to backtrack here and remove this branch \n            // in favor of somehow evaluating an expression at compile time for\n            // attributes that expect a single string value.\n            const target = getTarget();\n            if (target && target.pushAttribute) {\n              target.pushAttribute(location(), key, value);\n            } else {\n              throw new ParserError(location(), \"Couldn't find anything to add an attribute to here\");\n            }\n          },\n        peg$c151 = \"when\",\n        peg$c152 = peg$literalExpectation(\"when\", false),\n        peg$c153 = /^[a-zA-Z\"]/,\n        peg$c154 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], \"\\\"\"], false, false),\n        peg$c155 = function() {\n            throw new ParserError(location(), \"intent identifiers must begin with a letter, upper or lower case\");\n          },\n        peg$c156 = \"Connections.Response\",\n        peg$c157 = peg$literalExpectation(\"Connections.Response\", false),\n        peg$c158 = function(name) {\n            const intent = pushIntent(location(), 'Connections.Response', {class:lib.FilteredIntent});\n\n            intent.setCurrentIntentFilter({\n              name,\n              data: { name }, // Persist \"name\" for the filter to have access to it at runtime.\n              filter: function(request, data) {\n                return (request.name === data.name);\n              },\n              callback: async function() {\n                // If this Connections.Response is filtered by monetization events, let's add two\n                // shorthand accessors for $purchaseResult and $newProduct.\n                const monetizationResponses = [ 'Buy', 'Cancel', 'Upsell' ];\n                if (monetizationResponses.includes(context.event.request.name)) {\n                  const __payload = context.event.request.payload;\n\n                  if (__payload && __payload.purchaseResult && __payload.productId) {\n                    context.slots.purchaseResult = __payload.purchaseResult;\n                    context.slots.newProduct = await getProductByProductId(context, __payload.productId);\n                  }\n                }\n              }\n            });\n            return intent;\n          },\n        peg$c159 = function() {\n            const intent = pushIntent(location(), 'Connections.Response', {class:lib.FilteredIntent});\n            intent.setCurrentIntentFilter({ name: '__' });\n            return intent;\n          },\n        peg$c160 = function(utterance, type, qualifier) {\n            const intent = pushIntent(location(), utterance, false);\n            intent.qualifier = qualifier;\n            if (type === \"unless\") {\n              intent.qualifierIsInverted = true;\n            }\n            return intent;\n          },\n        peg$c161 = function(utterance) {\n            const intent = pushIntent(location(), utterance, false);\n            return intent;\n          },\n        peg$c162 = \"or\",\n        peg$c163 = peg$literalExpectation(\"or\", false),\n        peg$c164 = \"\\\"\",\n        peg$c165 = peg$literalExpectation(\"\\\"\", false),\n        peg$c166 = function(parts) {\n            const target = getTarget();\n            if (target && target.pushAlternate) {\n              if (target instanceof lib.Intent) {\n                let group = new lib.PartListPart(location(), parts);\n                let utterance = new lib.Utterance(location(), group);\n                target.pushAlternate(location(), utterance, skill);\n              } else {\n                target.pushAlternate(location(), parts, skill);\n              }\n            } else {\n              throw new ParserError(location(), \"Couldn't find anything to add an alternative to here\");\n            }\n          },\n        peg$c167 = function(utterance) {\n            const target = getTarget();\n            if (target && target.pushAlternate) {\n              target.pushAlternate(location(), utterance, skill);\n            } else {\n              throw new ParserError(location(), \"Couldn't find anything to add an alternative to here\");\n            }\n          },\n        peg$c168 = function(parts) {\n            const target = getTarget();\n            if (target instanceof lib.Intent) {\n              if (parts.isAssetName) {\n                // parts was mistakenly parsed into an AssetName type,\n                // reconstruct the original text and treat it as an alternative intent name instead\n                parts = parts.toString();\n              }\n              const intent = pushIntent(location(), parts, false, true);\n              target.pushChildIntent(intent);\n            } else if (target && target.pushAlternate) {\n              target.pushAlternate(location(), parts, skill);\n            } else {\n              throw new ParserError(location(), \"Couldn't find anything to add an alternative to here\");\n            }\n          },\n        peg$c169 = \"with\",\n        peg$c170 = peg$literalExpectation(\"with\", false),\n        peg$c171 = function(name, type) {\n            const target = getTarget();\n            if (target && target.pushSlotType) {\n              target.pushSlotType(location(), name, type);\n            } else {\n              throw new ParserError(location(), \"Cannot define a slot type here\");\n            }\n          },\n        peg$c172 = \"otherwise\",\n        peg$c173 = peg$literalExpectation(\"otherwise\", false),\n        peg$c174 = function() {\n            const target = getTarget();\n            if (target && target.pushOrGetIntent) {\n              pushIntent(location(), '--default--', false);\n            } else {\n              throw new ParserError(location(), \"there isn't anything to `otherwise` here\");\n            }\n          },\n        peg$c175 = function(name, expression) {\n            pushCode(location(), new lib.DBAssignment(name, expression));\n          },\n        peg$c176 = \"local\",\n        peg$c177 = peg$literalExpectation(\"local\", false),\n        peg$c178 = function(name, source, className) {\n              pushCode(location(), new lib.WrapClass(className, name, source));\n            },\n        peg$c179 = function(name, expression) {\n              pushCode(location(), new lib.LocalDeclaration(name, expression));\n            },\n        peg$c180 = function(name) {\n            throw new ParserError(location(), \"You cannot create local variable without giving it a value. Please add one!\");\n          },\n        peg$c181 = function(name, expression) {\n            pushCode(location(), new lib.LocalVariableAssignment(name, expression));\n          },\n        peg$c182 = \"$\",\n        peg$c183 = peg$literalExpectation(\"$\", false),\n        peg$c184 = function(name, expression) {\n            pushCode(location(), new lib.SlotVariableAssignment(location(), name, expression));\n          },\n        peg$c185 = \"buyInSkillProduct\",\n        peg$c186 = peg$literalExpectation(\"buyInSkillProduct\", false),\n        peg$c187 = function(referenceName) {\n            pushCode(location(), new lib.BuyInSkillProductStatement(referenceName));\n          },\n        peg$c188 = \"cancelInSkillProduct\",\n        peg$c189 = peg$literalExpectation(\"cancelInSkillProduct\", false),\n        peg$c190 = function(referenceName) {\n            pushCode(location(), new lib.CancelInSkillProductStatement(referenceName));\n          },\n        peg$c191 = \"upsellInSkillProduct\",\n        peg$c192 = peg$literalExpectation(\"upsellInSkillProduct\", false),\n        peg$c193 = function(referenceName) {\n            // @TODO: pushSay is currently required for attributes: Why?!\n            pushSay(location(), new lib.UpsellInSkillProductStatement(referenceName));\n          },\n        peg$c194 = \"#\",\n        peg$c195 = peg$literalExpectation(\"#\", false),\n        peg$c196 = \"log\",\n        peg$c197 = peg$literalExpectation(\"log\", false),\n        peg$c198 = function(expression) {\n            pushCode(location(), new lib.LogMessage(expression));\n          },\n        peg$c199 = \"END\",\n        peg$c200 = peg$literalExpectation(\"END\", false),\n        peg$c201 = function() {\n            pushCode( location(), new lib.SetSkillEnd() );\n          },\n        peg$c202 = \"LISTEN\",\n        peg$c203 = peg$literalExpectation(\"LISTEN\", false),\n        peg$c204 = function(head, tail) {\n            tail = tail || [];\n            tail.unshift(head);\n            pushCode( location(), new lib.SetSkillListen(tail) );\n          },\n        peg$c205 = function() {\n            pushCode( location(), new lib.SetSkillListen([]) );\n          },\n        peg$c206 = function(kind) { return kind; },\n        peg$c207 = \"events\",\n        peg$c208 = peg$literalExpectation(\"events\", false),\n        peg$c209 = \"microphone\",\n        peg$c210 = peg$literalExpectation(\"microphone\", false),\n        peg$c211 = \"->\",\n        peg$c212 = peg$literalExpectation(\"->\", false),\n        peg$c213 = function(name) {\n            pushCode(location(), new lib.Transition(name, false));\n          },\n        peg$c214 = \"|->\",\n        peg$c215 = peg$literalExpectation(\"|->\", false),\n        peg$c216 = function(name) {\n            pushCode(location(), new lib.Transition(name, true));\n          },\n        peg$c217 = \"...\",\n        peg$c218 = peg$literalExpectation(\"...\", false),\n        peg$c219 = function(name) {\n            pushCode(location(), new lib.HandoffIntent(name));\n          },\n        peg$c220 = \"set\",\n        peg$c221 = peg$literalExpectation(\"set\", false),\n        peg$c222 = \"true\",\n        peg$c223 = peg$literalExpectation(\"true\", false),\n        peg$c224 = \"false\",\n        peg$c225 = peg$literalExpectation(\"false\", false),\n        peg$c226 = function(variable, condition) {\n            pushCode(location(), new lib.SetSetting(variable, condition));\n          },\n        peg$c227 = \"TEST\",\n        peg$c228 = peg$literalExpectation(\"TEST\", false),\n        peg$c229 = function(name) {\n            testLead(location(), \"\");\n            pushTest(name);\n          },\n        peg$c230 = \"wait\",\n        peg$c231 = peg$literalExpectation(\"wait\", false),\n        peg$c232 = function(size, unit) {\n            if ( unit == \"day\" ) { size *= 24 * 60 * 60 * 1000; }\n            else if ( unit == \"hour\" ) { size *= 60 * 60 * 1000; }\n            else if ( unit == \"second\" ) { size *= 1000; }\n            else { size *= 60 * 1000; } // minutes by default\n            currentTest().pushWait( size );\n          },\n        peg$c233 = \"second\",\n        peg$c234 = peg$literalExpectation(\"second\", false),\n        peg$c235 = \"minute\",\n        peg$c236 = peg$literalExpectation(\"minute\", false),\n        peg$c237 = \"hour\",\n        peg$c238 = peg$literalExpectation(\"hour\", false),\n        peg$c239 = \"day\",\n        peg$c240 = peg$literalExpectation(\"day\", false),\n        peg$c241 = \"s\",\n        peg$c242 = peg$literalExpectation(\"s\", false),\n        peg$c243 = function(unit) {\n              return unit\n            },\n        peg$c244 = function() {\n              return unit\n            },\n        peg$c245 = \"launch\",\n        peg$c246 = peg$literalExpectation(\"launch\", false),\n        peg$c247 = function() {\n            currentTest().pushUser(location());\n          },\n        peg$c248 = \"quit\",\n        peg$c249 = peg$literalExpectation(\"quit\", false),\n        peg$c250 = function() {\n            currentTest().pushStop('quit');\n          },\n        peg$c251 = function(head, tail) {\n            tail = tail || [];\n            tail.unshift(head);\n            currentTest().pushExpectation(new lib.ExpectedContinueSession(location(), tail));\n          },\n        peg$c252 = function() {\n            currentTest().pushExpectation(new lib.ExpectedContinueSession(location(), []));\n          },\n        peg$c253 = function() {\n            currentTest().pushExpectation(new lib.ExpectedEndSession(location()));\n          },\n        peg$c254 = \"user:\",\n        peg$c255 = peg$literalExpectation(\"user:\", false),\n        peg$c256 = function(line, vars) {\n              currentTest().pushUser(location(), line, null, vars);\n            },\n        peg$c257 = function(line) {\n              currentTest().pushUser(location(), line, null);\n            },\n        peg$c258 = function(intent, vars) {\n              currentTest().pushUser(location(), null, intent, vars);\n            },\n        peg$c259 = function(intent) {\n              currentTest().pushUser(location(), null, intent);\n            },\n        peg$c260 = \"request:\",\n        peg$c261 = peg$literalExpectation(\"request:\", false),\n        peg$c262 = function(source) {\n            currentTest().pushRequest(location(), null, source);\n          },\n        peg$c263 = function(variable) {\n            return variable;\n          },\n        peg$c264 = function(name, val) {\n            return [name, val];\n          },\n        peg$c265 = \"directive:\",\n        peg$c266 = peg$literalExpectation(\"directive:\", false),\n        peg$c267 = function(name) {\n            currentTest().pushExpectation(new lib.ExpectedDirective(location(), name));\n          },\n        peg$c268 = \"alexa:\",\n        peg$c269 = peg$literalExpectation(\"alexa:\", false),\n        peg$c270 = \"e\",\n        peg$c271 = peg$literalExpectation(\"e\", false),\n        peg$c272 = function(stateName, line) {\n            currentTest().pushExpectation(new lib.ExpectedState(location(), stateName));\n            currentTest().pushExpectation(new lib.ExpectedExactSay(location(), line));\n          },\n        peg$c273 = function(stateName, line) {\n            currentTest().pushExpectation(new lib.ExpectedState(location(), stateName));\n            currentTest().pushExpectation(new lib.ExpectedSay(location(), line));\n          },\n        peg$c274 = function(stateName, regex) {\n            currentTest().pushExpectation(new lib.ExpectedState(location(), stateName));\n            currentTest().pushExpectation(new lib.ExpectedRegexSay(location(), regex));\n          },\n        peg$c275 = function(stateName) {\n            currentTest().pushExpectation(new lib.ExpectedState(location(), stateName));\n          },\n        peg$c276 = function(line) {\n            //currentTest().pushAlexa(line);\n            throw new ParserError(location(), \"alternates not supported here yet\")\n          },\n        peg$c277 = function(name, op, tail) {\n              currentTest().pushExpectation(new lib.ExpectedDB(location(), name, op, tail));\n            },\n        peg$c278 = function(name, tail) {\n              currentTest().pushDatabaseFix(name, tail);\n            },\n        peg$c279 = peg$otherExpectation(\"Comparison Operator\"),\n        peg$c280 = \"setRegion\",\n        peg$c281 = peg$literalExpectation(\"setRegion\", false),\n        peg$c282 = function(region) {\n            currentTest().pushSetRegion(region);\n          },\n        peg$c283 = \"capture\",\n        peg$c284 = peg$literalExpectation(\"capture\", false),\n        peg$c285 = function(name) {\n            currentTest().pushCaptureNamedState(location(), name);\n          },\n        peg$c286 = \"resume\",\n        peg$c287 = peg$literalExpectation(\"resume\", false),\n        peg$c288 = function(name) {\n            currentTest().pushResumeNamedState(location(), name);\n          },\n        peg$c289 = \"logStateTraces\",\n        peg$c290 = peg$literalExpectation(\"logStateTraces\", false),\n        peg$c291 = function(flag) {\n            currentTest().pushSetLogStateTraces(location(), flag);\n          },\n        peg$c292 = function(parts) {\n            return new lib.Utterance(location(), parts);\n          },\n        peg$c293 = function(a, tail) {\n            tail.unshift(a);\n            return new lib.AlternatingPart(location(), tail);\n          },\n        peg$c294 = \"|\",\n        peg$c295 = peg$literalExpectation(\"|\", false),\n        peg$c296 = function(a) { return a; },\n        peg$c297 = function() { return new lib.StringPart(''); },\n        peg$c298 = function(parts) {\n            if (parts.length == 1) {\n              return parts[0];\n            }\n            return new lib.PartListPart(location(), parts);\n          },\n        peg$c299 = \")\",\n        peg$c300 = peg$literalExpectation(\")\", false),\n        peg$c301 = function() { return new lib.StringPart(text()); },\n        peg$c302 = function(name) { return new lib.SlotReferencePart(name); },\n        peg$c303 = function(contents) { return contents; },\n        peg$c304 = function(parts) {\n            return new lib.Say(parts);\n          },\n        peg$c305 = function(parts) {\n            return parts;\n          },\n        peg$c306 = function(parts) {\n            return new lib.Say(parts, skill);\n          },\n        peg$c307 = function(part) { return [part]; },\n        peg$c308 = function(a, tail) {\n            tail.unshift(a);\n            return new lib.AlternatingPart(location(),tail);\n          },\n        peg$c309 = function() { return new lib.StringPart('') },\n        peg$c310 = function(parts) {\n            if (parts.length <= 1 ) {\n              return parts[0];\n            }\n            return new lib.PartListPart(location(), parts);\n          },\n        peg$c311 = \"{\",\n        peg$c312 = peg$literalExpectation(\"{\", false),\n        peg$c313 = \"DEPLOY\",\n        peg$c314 = peg$literalExpectation(\"DEPLOY\", false),\n        peg$c315 = \"\\\\$\",\n        peg$c316 = peg$literalExpectation(\"\\\\$\", false),\n        peg$c317 = function() { return new lib.StringPart('$'); },\n        peg$c318 = \"\\\\@\",\n        peg$c319 = peg$literalExpectation(\"\\\\@\", false),\n        peg$c320 = function() { return new lib.StringPart('@'); },\n        peg$c321 = \"\\\\<\",\n        peg$c322 = peg$literalExpectation(\"\\\\<\", false),\n        peg$c323 = function() { return new lib.StringPart('<'); },\n        peg$c324 = \"\\\\>\",\n        peg$c325 = peg$literalExpectation(\"\\\\>\", false),\n        peg$c326 = function() { return new lib.StringPart('>'); },\n        peg$c327 = \"\\\\\\\"\",\n        peg$c328 = peg$literalExpectation(\"\\\\\\\"\", false),\n        peg$c329 = function() { return new lib.StringPart('\\\\\"'); },\n        peg$c330 = \"\\\\(\",\n        peg$c331 = peg$literalExpectation(\"\\\\(\", false),\n        peg$c332 = function() { return new lib.StringPart('('); },\n        peg$c333 = \"\\\\)\",\n        peg$c334 = peg$literalExpectation(\"\\\\)\", false),\n        peg$c335 = function() { return new lib.StringPart(')'); },\n        peg$c336 = \"\\\\\\\\\",\n        peg$c337 = peg$literalExpectation(\"\\\\\\\\\", false),\n        peg$c338 = function() { return new lib.StringPart('\\\\'); },\n        peg$c339 = function(symbol) {\n            // note: pegjs parser had trouble with using the symbol character in the action\n            return new lib.StringPart(symbol);\n          },\n        peg$c340 = \"}\",\n        peg$c341 = peg$literalExpectation(\"}\", false),\n        peg$c342 = function(func) { return new lib.JavaScriptPart(func); },\n        peg$c343 = function(name) {\n            return new lib.DatabaseReferencePart(name);\n          },\n        peg$c344 = function(name) {\n            return new lib.StaticVariableReferencePart(name);\n          },\n        peg$c345 = function(name, args) {\n            return new lib.DatabaseReferenceCallPart(name, args);\n          },\n        peg$c346 = \"<...\",\n        peg$c347 = peg$literalExpectation(\"<...\", false),\n        peg$c348 = \"ms\",\n        peg$c349 = peg$literalExpectation(\"ms\", false),\n        peg$c350 = function(time, unit) {\n            return new lib.TagPart(skill, location(), '...', null, time + unit);\n          },\n        peg$c351 = \"<f\",\n        peg$c352 = peg$literalExpectation(\"<f\", false),\n        peg$c353 = function(size, text) {\n            return new lib.TagPart(skill, location(), 'fontsize', text, size );\n          },\n        peg$c354 = \"<!\",\n        peg$c355 = peg$literalExpectation(\"<!\", false),\n        peg$c356 = function(text, punctuation) {\n            if (text.includes('&')) {\n              throw new ParserError(location(), `Interjection <!${text}> contains an invalid ampersand character.`);\n            }\n            return new lib.TagPart(skill, location(), '!', text + punctuation );\n          },\n        peg$c357 = function(text) {\n            if (text.includes('&')) {\n              throw new ParserError(location(), `Interjection <!${text}> contains an invalid ampersand character.`);\n            }\n            return new lib.TagPart(skill, location(), '!', text );\n          },\n        peg$c358 = \"<sfx\",\n        peg$c359 = peg$literalExpectation(\"<sfx\", false),\n        peg$c360 = function(name) {\n            return new lib.TagPart(skill, location(), 'sfx', name );\n          },\n        peg$c361 = function(code, text) {\n            return new lib.TagPart(skill, location(), code, text);\n          },\n        peg$c362 = \"!\",\n        peg$c363 = peg$literalExpectation(\"!\", false),\n        peg$c364 = \"?\",\n        peg$c365 = peg$literalExpectation(\"?\", false),\n        peg$c366 = function() { return text(); },\n        peg$c367 = \" \",\n        peg$c368 = peg$literalExpectation(\" \", false),\n        peg$c369 = \"\\t\",\n        peg$c370 = peg$literalExpectation(\"\\t\", false),\n        peg$c371 = function(name) { return new lib.DatabaseReferencePart(name); },\n        peg$c372 = function(name) { return new lib.AssetNamePart(name); },\n        peg$c373 = function(name, children) {\n            return new lib.VariableReference(name, children);\n          },\n        peg$c374 = \"[\",\n        peg$c375 = peg$literalExpectation(\"[\", false),\n        peg$c376 = \"]\",\n        peg$c377 = peg$literalExpectation(\"]\", false),\n        peg$c378 = function(number) { return new lib.VariableArrayAccess(number); },\n        peg$c379 = function(index) { return new lib.VariableArrayAccess(index); },\n        peg$c380 = function(name) { return new lib.VariableMemberAccess(name); },\n        peg$c381 = function(name, badnumber) {\n            throw new ParserError(location(), \"`$\" + name + badnumber + \"` is not a valid slot name. You may only use letters and the `-` character\");\n          },\n        peg$c382 = function(name, children) {\n            throw new ParserError(location(), \"`$\" + name.join('') + \"` is not a valid slot name. You may only use letters and the `-` character\");\n          },\n        peg$c383 = peg$otherExpectation(\"Slot Identifier\"),\n        peg$c384 = function(call) {\n            pushCode( location(), new lib.EvaluateExpression(call) );\n          },\n        peg$c385 = peg$otherExpectation(\"Expression\"),\n        peg$c386 = function(root) {\n            return new lib.Expression(location(), root);\n          },\n        peg$c387 = function(left, tail) {\n              return tail.reduce(function(res, right){\n                return new lib.BinaryExpression(location(), res, right.op, right.val);\n              }, left);\n            },\n        peg$c388 = function(op, val) {\n            return {op:op, val:val}; },\n        peg$c389 = peg$otherExpectation(\"Expression and/or operator\"),\n        peg$c390 = \"and\",\n        peg$c391 = peg$literalExpectation(\"and\", false),\n        peg$c392 = peg$otherExpectation(\"Expression Comparison Operator\"),\n        peg$c393 = function(op, val) {\n              return {op:op, val:val};\n            },\n        peg$c394 = peg$otherExpectation(\"Expression Operator\"),\n        peg$c395 = \"+\",\n        peg$c396 = peg$literalExpectation(\"+\", false),\n        peg$c397 = \"not\",\n        peg$c398 = peg$literalExpectation(\"not\", false),\n        peg$c399 = function(op, val) {\n              return new lib.UnaryExpression(location(), op, val);\n            },\n        peg$c400 = \"*\",\n        peg$c401 = peg$literalExpectation(\"*\", false),\n        peg$c402 = function(val) { return val; },\n        peg$c403 = function(name) {\n            return new lib.SlotReferencePart(name);\n          },\n        peg$c404 = function(name) {\n            return new lib.LocalVariableReference(location(), name);\n          },\n        peg$c405 = function(name, args) {\n              return new lib.LocalExpressionCall(location(), name, args );\n            },\n        peg$c406 = function(name, args) {\n              return new lib.DBExpressionCall(location(), name, args );\n            },\n        peg$c407 = function(head, tail) {\n              tail.unshift(head);\n              return tail;\n            },\n        peg$c408 = function(arg) { return [arg]; },\n        peg$c409 = \"()\",\n        peg$c410 = peg$literalExpectation(\"()\", false),\n        peg$c411 = function() { return []; },\n        peg$c412 = function(arg) {\n            return arg;\n          },\n        peg$c413 = function(str) { return text(); },\n        peg$c414 = \"'\",\n        peg$c415 = peg$literalExpectation(\"'\", false),\n        peg$c416 = function(str) { return str; },\n        peg$c417 = /^['\"]/,\n        peg$c418 = peg$classExpectation([\"'\", \"\\\"\"], false, false),\n        peg$c419 = function(name, type) {\n            return new lib.AssetName(location(), name.join('.'), type, skill, true);\n          },\n        peg$c420 = function(name) {\n            return name;\n          },\n        peg$c421 = \"_\",\n        peg$c422 = peg$literalExpectation(\"_\", false),\n        peg$c423 = function(soundBankPath) {\n            return new lib.AssetName(location(), soundBankPath, 'mp3', skill, false);\n          },\n        peg$c424 = \"soundbank://\",\n        peg$c425 = peg$literalExpectation(\"soundbank://\", false),\n        peg$c426 = function(prefix, soundBankStr) {\n            return text().replace(/['\"]+/g, '');\n          },\n        peg$c427 = function(urlPath) {\n            const index = urlPath.lastIndexOf(\"/\");\n            const fileName = urlPath.substr(index + 1);\n\n            const typeIndex = fileName.lastIndexOf(\".\");\n            let fileType;\n\n            if (typeIndex != -1) {\n              fileType = fileName.substr(typeIndex + 1).toLowerCase();\n            } else {\n              throw new ParserError(location(), \"could not detect the file type from the asset url \" + text());\n            }\n\n            return new lib.AssetName(location(), urlPath, fileType, skill, false);\n          },\n        peg$c428 = \"http://\",\n        peg$c429 = peg$literalExpectation(\"http://\", false),\n        peg$c430 = \"https://\",\n        peg$c431 = peg$literalExpectation(\"https://\", false),\n        peg$c432 = /^[a-zA-Z0-9:%.\\/+$~#=()\\-_&?!~]/,\n        peg$c433 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], [\"0\", \"9\"], \":\", \"%\", \".\", \"/\", \"+\", \"$\", \"~\", \"#\", \"=\", \"(\", \")\", \"-\", \"_\", \"&\", \"?\", \"!\", \"~\"], false, false),\n        peg$c434 = function(prefix, rest) {\n            return text().replace(/['\"]+/g, '');\n          },\n        peg$c435 = \"json\",\n        peg$c436 = peg$literalExpectation(\"json\", false),\n        peg$c437 = function(name, type) {\n            return lib.parseJsonFile(location(), `${name}.${type}`, skill);\n          },\n        peg$c438 = function(parts, extension, func) {\n            var p = []\n            for (var i=0; i<parts.length; ++i) {\n              p.push(parts[i][0]);\n            }\n            var filename = p.join('.') + '.' + extension;\n            return new lib.FileFunctionReference(location(), filename, func);\n          },\n        peg$c439 = \"coffee\",\n        peg$c440 = peg$literalExpectation(\"coffee\", false),\n        peg$c441 = \"js\",\n        peg$c442 = peg$literalExpectation(\"js\", false),\n        peg$c443 = \"TABLE\",\n        peg$c444 = peg$literalExpectation(\"TABLE\", false),\n        peg$c445 = function(name, header, tail) {\n            testLead(location(), \"\");\n            tail = tail || [];\n            tail.unshift(header);\n            pushDataTable(name, tail);\n          },\n        peg$c446 = function(name) { return name; },\n        peg$c447 = function(item, tail) {\n            tail = tail || [];\n            tail.unshift(item);\n            stack[1].target.pushRow(tail);\n          },\n        peg$c448 = function(item) { return item; },\n        peg$c449 = peg$otherExpectation(\"End of Line\"),\n        peg$c450 = \"\\n\",\n        peg$c451 = peg$literalExpectation(\"\\n\", false),\n        peg$c452 = \"\\r\\n\",\n        peg$c453 = peg$literalExpectation(\"\\r\\n\", false),\n        peg$c454 = \"\\r\",\n        peg$c455 = peg$literalExpectation(\"\\r\", false),\n        peg$c456 = \"\\u2028\",\n        peg$c457 = peg$literalExpectation(\"\\u2028\", false),\n        peg$c458 = \"\\u2029\",\n        peg$c459 = peg$literalExpectation(\"\\u2029\", false),\n        peg$c460 = peg$otherExpectation(\"whitespace\"),\n        peg$c461 = \"\\x0B\",\n        peg$c462 = peg$literalExpectation(\"\\x0B\", false),\n        peg$c463 = \"\\f\",\n        peg$c464 = peg$literalExpectation(\"\\f\", false),\n        peg$c465 = \"\\uFEFF\",\n        peg$c466 = peg$literalExpectation(\"\\uFEFF\", false),\n        peg$c467 = peg$otherExpectation(\"white space\"),\n        peg$c468 = peg$otherExpectation(\"required white space\"),\n        peg$c469 = peg$otherExpectation(\"white space including line breaks\"),\n        peg$c470 = function(inner) {\n            return inner.join('');\n          },\n        peg$c471 = function() { return '\"'; },\n        peg$c472 = function(language, country) {\n              return text();\n            },\n        peg$c473 = function() {\n              return text();\n            },\n        peg$c474 = function() {\n            return parseInt(text());\n          },\n        peg$c475 = function() {\n            return parseFloat(text());\n          },\n        peg$c476 = function() { return false; },\n        peg$c477 = peg$otherExpectation(\"Identifier\"),\n        peg$c478 = function(word) {\n            return word;\n          },\n        peg$c479 = function() {\n            console.log((new Error).stack);\n            throw new ParserError(location(), \"the word \" + text() + \" is reserved and cannot be used as an identifier\");\n          },\n        peg$c480 = function(tail) {\n            return text();\n          },\n        peg$c481 = function() {\n            if (text() == \"launch\" || text() == \"global\") {\n              return text();\n            }\n            throw new ParserError(location(), \"the word `\" + text() + \"` is reserved and cannot be used as a state name\");\n          },\n        peg$c482 = peg$otherExpectation(\"hex digit\"),\n        peg$c483 = /^[A-F]/,\n        peg$c484 = peg$classExpectation([[\"A\", \"F\"]], false, false),\n        peg$c485 = peg$otherExpectation(\"reserved keyword\"),\n        peg$c486 = \"global\",\n        peg$c487 = peg$literalExpectation(\"global\", false),\n        peg$c488 = peg$otherExpectation(\"Most any character\"),\n        peg$c489 = peg$otherExpectation(\"Non ascii letter character\"),\n        peg$c490 = peg$otherExpectation(\"lower case letter\"),\n        peg$c491 = peg$otherExpectation(\"non ascii letter\"),\n        peg$c492 = /^[a-z\\xB5\\xDF-\\xF6\\xF8-\\xFF\\u0101\\u0103\\u0105\\u0107\\u0109\\u010B\\u010D\\u010F\\u0111\\u0113\\u0115\\u0117\\u0119\\u011B\\u011D\\u011F\\u0121\\u0123\\u0125\\u0127\\u0129\\u012B\\u012D\\u012F\\u0131\\u0133\\u0135\\u0137-\\u0138\\u013A\\u013C\\u013E\\u0140\\u0142\\u0144\\u0146\\u0148-\\u0149\\u014B\\u014D\\u014F\\u0151\\u0153\\u0155\\u0157\\u0159\\u015B\\u015D\\u015F\\u0161\\u0163\\u0165\\u0167\\u0169\\u016B\\u016D\\u016F\\u0171\\u0173\\u0175\\u0177\\u017A\\u017C\\u017E-\\u0180\\u0183\\u0185\\u0188\\u018C-\\u018D\\u0192\\u0195\\u0199-\\u019B\\u019E\\u01A1\\u01A3\\u01A5\\u01A8\\u01AA-\\u01AB\\u01AD\\u01B0\\u01B4\\u01B6\\u01B9-\\u01BA\\u01BD-\\u01BF\\u01C6\\u01C9\\u01CC\\u01CE\\u01D0\\u01D2\\u01D4\\u01D6\\u01D8\\u01DA\\u01DC-\\u01DD\\u01DF\\u01E1\\u01E3\\u01E5\\u01E7\\u01E9\\u01EB\\u01ED\\u01EF-\\u01F0\\u01F3\\u01F5\\u01F9\\u01FB\\u01FD\\u01FF\\u0201\\u0203\\u0205\\u0207\\u0209\\u020B\\u020D\\u020F\\u0211\\u0213\\u0215\\u0217\\u0219\\u021B\\u021D\\u021F\\u0221\\u0223\\u0225\\u0227\\u0229\\u022B\\u022D\\u022F\\u0231\\u0233-\\u0239\\u023C\\u023F-\\u0240\\u0242\\u0247\\u0249\\u024B\\u024D\\u024F-\\u0293\\u0295-\\u02AF\\u0371\\u0373\\u0377\\u037B-\\u037D\\u0390\\u03AC-\\u03CE\\u03D0-\\u03D1\\u03D5-\\u03D7\\u03D9\\u03DB\\u03DD\\u03DF\\u03E1\\u03E3\\u03E5\\u03E7\\u03E9\\u03EB\\u03ED\\u03EF-\\u03F3\\u03F5\\u03F8\\u03FB-\\u03FC\\u0430-\\u045F\\u0461\\u0463\\u0465\\u0467\\u0469\\u046B\\u046D\\u046F\\u0471\\u0473\\u0475\\u0477\\u0479\\u047B\\u047D\\u047F\\u0481\\u048B\\u048D\\u048F\\u0491\\u0493\\u0495\\u0497\\u0499\\u049B\\u049D\\u049F\\u04A1\\u04A3\\u04A5\\u04A7\\u04A9\\u04AB\\u04AD\\u04AF\\u04B1\\u04B3\\u04B5\\u04B7\\u04B9\\u04BB\\u04BD\\u04BF\\u04C2\\u04C4\\u04C6\\u04C8\\u04CA\\u04CC\\u04CE-\\u04CF\\u04D1\\u04D3\\u04D5\\u04D7\\u04D9\\u04DB\\u04DD\\u04DF\\u04E1\\u04E3\\u04E5\\u04E7\\u04E9\\u04EB\\u04ED\\u04EF\\u04F1\\u04F3\\u04F5\\u04F7\\u04F9\\u04FB\\u04FD\\u04FF\\u0501\\u0503\\u0505\\u0507\\u0509\\u050B\\u050D\\u050F\\u0511\\u0513\\u0515\\u0517\\u0519\\u051B\\u051D\\u051F\\u0521\\u0523\\u0525\\u0527\\u0529\\u052B\\u052D\\u052F\\u0561-\\u0587\\u13F8-\\u13FD\\u1D00-\\u1D2B\\u1D6B-\\u1D77\\u1D79-\\u1D9A\\u1E01\\u1E03\\u1E05\\u1E07\\u1E09\\u1E0B\\u1E0D\\u1E0F\\u1E11\\u1E13\\u1E15\\u1E17\\u1E19\\u1E1B\\u1E1D\\u1E1F\\u1E21\\u1E23\\u1E25\\u1E27\\u1E29\\u1E2B\\u1E2D\\u1E2F\\u1E31\\u1E33\\u1E35\\u1E37\\u1E39\\u1E3B\\u1E3D\\u1E3F\\u1E41\\u1E43\\u1E45\\u1E47\\u1E49\\u1E4B\\u1E4D\\u1E4F\\u1E51\\u1E53\\u1E55\\u1E57\\u1E59\\u1E5B\\u1E5D\\u1E5F\\u1E61\\u1E63\\u1E65\\u1E67\\u1E69\\u1E6B\\u1E6D\\u1E6F\\u1E71\\u1E73\\u1E75\\u1E77\\u1E79\\u1E7B\\u1E7D\\u1E7F\\u1E81\\u1E83\\u1E85\\u1E87\\u1E89\\u1E8B\\u1E8D\\u1E8F\\u1E91\\u1E93\\u1E95-\\u1E9D\\u1E9F\\u1EA1\\u1EA3\\u1EA5\\u1EA7\\u1EA9\\u1EAB\\u1EAD\\u1EAF\\u1EB1\\u1EB3\\u1EB5\\u1EB7\\u1EB9\\u1EBB\\u1EBD\\u1EBF\\u1EC1\\u1EC3\\u1EC5\\u1EC7\\u1EC9\\u1ECB\\u1ECD\\u1ECF\\u1ED1\\u1ED3\\u1ED5\\u1ED7\\u1ED9\\u1EDB\\u1EDD\\u1EDF\\u1EE1\\u1EE3\\u1EE5\\u1EE7\\u1EE9\\u1EEB\\u1EED\\u1EEF\\u1EF1\\u1EF3\\u1EF5\\u1EF7\\u1EF9\\u1EFB\\u1EFD\\u1EFF-\\u1F07\\u1F10-\\u1F15\\u1F20-\\u1F27\\u1F30-\\u1F37\\u1F40-\\u1F45\\u1F50-\\u1F57\\u1F60-\\u1F67\\u1F70-\\u1F7D\\u1F80-\\u1F87\\u1F90-\\u1F97\\u1FA0-\\u1FA7\\u1FB0-\\u1FB4\\u1FB6-\\u1FB7\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FC7\\u1FD0-\\u1FD3\\u1FD6-\\u1FD7\\u1FE0-\\u1FE7\\u1FF2-\\u1FF4\\u1FF6-\\u1FF7\\u210A\\u210E-\\u210F\\u2113\\u212F\\u2134\\u2139\\u213C-\\u213D\\u2146-\\u2149\\u214E\\u2184\\u2C30-\\u2C5E\\u2C61\\u2C65-\\u2C66\\u2C68\\u2C6A\\u2C6C\\u2C71\\u2C73-\\u2C74\\u2C76-\\u2C7B\\u2C81\\u2C83\\u2C85\\u2C87\\u2C89\\u2C8B\\u2C8D\\u2C8F\\u2C91\\u2C93\\u2C95\\u2C97\\u2C99\\u2C9B\\u2C9D\\u2C9F\\u2CA1\\u2CA3\\u2CA5\\u2CA7\\u2CA9\\u2CAB\\u2CAD\\u2CAF\\u2CB1\\u2CB3\\u2CB5\\u2CB7\\u2CB9\\u2CBB\\u2CBD\\u2CBF\\u2CC1\\u2CC3\\u2CC5\\u2CC7\\u2CC9\\u2CCB\\u2CCD\\u2CCF\\u2CD1\\u2CD3\\u2CD5\\u2CD7\\u2CD9\\u2CDB\\u2CDD\\u2CDF\\u2CE1\\u2CE3-\\u2CE4\\u2CEC\\u2CEE\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\uA641\\uA643\\uA645\\uA647\\uA649\\uA64B\\uA64D\\uA64F\\uA651\\uA653\\uA655\\uA657\\uA659\\uA65B\\uA65D\\uA65F\\uA661\\uA663\\uA665\\uA667\\uA669\\uA66B\\uA66D\\uA681\\uA683\\uA685\\uA687\\uA689\\uA68B\\uA68D\\uA68F\\uA691\\uA693\\uA695\\uA697\\uA699\\uA69B\\uA723\\uA725\\uA727\\uA729\\uA72B\\uA72D\\uA72F-\\uA731\\uA733\\uA735\\uA737\\uA739\\uA73B\\uA73D\\uA73F\\uA741\\uA743\\uA745\\uA747\\uA749\\uA74B\\uA74D\\uA74F\\uA751\\uA753\\uA755\\uA757\\uA759\\uA75B\\uA75D\\uA75F\\uA761\\uA763\\uA765\\uA767\\uA769\\uA76B\\uA76D\\uA76F\\uA771-\\uA778\\uA77A\\uA77C\\uA77F\\uA781\\uA783\\uA785\\uA787\\uA78C\\uA78E\\uA791\\uA793-\\uA795\\uA797\\uA799\\uA79B\\uA79D\\uA79F\\uA7A1\\uA7A3\\uA7A5\\uA7A7\\uA7A9\\uA7B5\\uA7B7\\uA7FA\\uAB30-\\uAB5A\\uAB60-\\uAB65\\uAB70-\\uABBF\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFF41-\\uFF5A]/,\n        peg$c493 = peg$classExpectation([[\"a\", \"z\"], \"\\xB5\", [\"\\xDF\", \"\\xF6\"], [\"\\xF8\", \"\\xFF\"], \"\\u0101\", \"\\u0103\", \"\\u0105\", \"\\u0107\", \"\\u0109\", \"\\u010B\", \"\\u010D\", \"\\u010F\", \"\\u0111\", \"\\u0113\", \"\\u0115\", \"\\u0117\", \"\\u0119\", \"\\u011B\", \"\\u011D\", \"\\u011F\", \"\\u0121\", \"\\u0123\", \"\\u0125\", \"\\u0127\", \"\\u0129\", \"\\u012B\", \"\\u012D\", \"\\u012F\", \"\\u0131\", \"\\u0133\", \"\\u0135\", [\"\\u0137\", \"\\u0138\"], \"\\u013A\", \"\\u013C\", \"\\u013E\", \"\\u0140\", \"\\u0142\", \"\\u0144\", \"\\u0146\", [\"\\u0148\", \"\\u0149\"], \"\\u014B\", \"\\u014D\", \"\\u014F\", \"\\u0151\", \"\\u0153\", \"\\u0155\", \"\\u0157\", \"\\u0159\", \"\\u015B\", \"\\u015D\", \"\\u015F\", \"\\u0161\", \"\\u0163\", \"\\u0165\", \"\\u0167\", \"\\u0169\", \"\\u016B\", \"\\u016D\", \"\\u016F\", \"\\u0171\", \"\\u0173\", \"\\u0175\", \"\\u0177\", \"\\u017A\", \"\\u017C\", [\"\\u017E\", \"\\u0180\"], \"\\u0183\", \"\\u0185\", \"\\u0188\", [\"\\u018C\", \"\\u018D\"], \"\\u0192\", \"\\u0195\", [\"\\u0199\", \"\\u019B\"], \"\\u019E\", \"\\u01A1\", \"\\u01A3\", \"\\u01A5\", \"\\u01A8\", [\"\\u01AA\", \"\\u01AB\"], \"\\u01AD\", \"\\u01B0\", \"\\u01B4\", \"\\u01B6\", [\"\\u01B9\", \"\\u01BA\"], [\"\\u01BD\", \"\\u01BF\"], \"\\u01C6\", \"\\u01C9\", \"\\u01CC\", \"\\u01CE\", \"\\u01D0\", \"\\u01D2\", \"\\u01D4\", \"\\u01D6\", \"\\u01D8\", \"\\u01DA\", [\"\\u01DC\", \"\\u01DD\"], \"\\u01DF\", \"\\u01E1\", \"\\u01E3\", \"\\u01E5\", \"\\u01E7\", \"\\u01E9\", \"\\u01EB\", \"\\u01ED\", [\"\\u01EF\", \"\\u01F0\"], \"\\u01F3\", \"\\u01F5\", \"\\u01F9\", \"\\u01FB\", \"\\u01FD\", \"\\u01FF\", \"\\u0201\", \"\\u0203\", \"\\u0205\", \"\\u0207\", \"\\u0209\", \"\\u020B\", \"\\u020D\", \"\\u020F\", \"\\u0211\", \"\\u0213\", \"\\u0215\", \"\\u0217\", \"\\u0219\", \"\\u021B\", \"\\u021D\", \"\\u021F\", \"\\u0221\", \"\\u0223\", \"\\u0225\", \"\\u0227\", \"\\u0229\", \"\\u022B\", \"\\u022D\", \"\\u022F\", \"\\u0231\", [\"\\u0233\", \"\\u0239\"], \"\\u023C\", [\"\\u023F\", \"\\u0240\"], \"\\u0242\", \"\\u0247\", \"\\u0249\", \"\\u024B\", \"\\u024D\", [\"\\u024F\", \"\\u0293\"], [\"\\u0295\", \"\\u02AF\"], \"\\u0371\", \"\\u0373\", \"\\u0377\", [\"\\u037B\", \"\\u037D\"], \"\\u0390\", [\"\\u03AC\", \"\\u03CE\"], [\"\\u03D0\", \"\\u03D1\"], [\"\\u03D5\", \"\\u03D7\"], \"\\u03D9\", \"\\u03DB\", \"\\u03DD\", \"\\u03DF\", \"\\u03E1\", \"\\u03E3\", \"\\u03E5\", \"\\u03E7\", \"\\u03E9\", \"\\u03EB\", \"\\u03ED\", [\"\\u03EF\", \"\\u03F3\"], \"\\u03F5\", \"\\u03F8\", [\"\\u03FB\", \"\\u03FC\"], [\"\\u0430\", \"\\u045F\"], \"\\u0461\", \"\\u0463\", \"\\u0465\", \"\\u0467\", \"\\u0469\", \"\\u046B\", \"\\u046D\", \"\\u046F\", \"\\u0471\", \"\\u0473\", \"\\u0475\", \"\\u0477\", \"\\u0479\", \"\\u047B\", \"\\u047D\", \"\\u047F\", \"\\u0481\", \"\\u048B\", \"\\u048D\", \"\\u048F\", \"\\u0491\", \"\\u0493\", \"\\u0495\", \"\\u0497\", \"\\u0499\", \"\\u049B\", \"\\u049D\", \"\\u049F\", \"\\u04A1\", \"\\u04A3\", \"\\u04A5\", \"\\u04A7\", \"\\u04A9\", \"\\u04AB\", \"\\u04AD\", \"\\u04AF\", \"\\u04B1\", \"\\u04B3\", \"\\u04B5\", \"\\u04B7\", \"\\u04B9\", \"\\u04BB\", \"\\u04BD\", \"\\u04BF\", \"\\u04C2\", \"\\u04C4\", \"\\u04C6\", \"\\u04C8\", \"\\u04CA\", \"\\u04CC\", [\"\\u04CE\", \"\\u04CF\"], \"\\u04D1\", \"\\u04D3\", \"\\u04D5\", \"\\u04D7\", \"\\u04D9\", \"\\u04DB\", \"\\u04DD\", \"\\u04DF\", \"\\u04E1\", \"\\u04E3\", \"\\u04E5\", \"\\u04E7\", \"\\u04E9\", \"\\u04EB\", \"\\u04ED\", \"\\u04EF\", \"\\u04F1\", \"\\u04F3\", \"\\u04F5\", \"\\u04F7\", \"\\u04F9\", \"\\u04FB\", \"\\u04FD\", \"\\u04FF\", \"\\u0501\", \"\\u0503\", \"\\u0505\", \"\\u0507\", \"\\u0509\", \"\\u050B\", \"\\u050D\", \"\\u050F\", \"\\u0511\", \"\\u0513\", \"\\u0515\", \"\\u0517\", \"\\u0519\", \"\\u051B\", \"\\u051D\", \"\\u051F\", \"\\u0521\", \"\\u0523\", \"\\u0525\", \"\\u0527\", \"\\u0529\", \"\\u052B\", \"\\u052D\", \"\\u052F\", [\"\\u0561\", \"\\u0587\"], [\"\\u13F8\", \"\\u13FD\"], [\"\\u1D00\", \"\\u1D2B\"], [\"\\u1D6B\", \"\\u1D77\"], [\"\\u1D79\", \"\\u1D9A\"], \"\\u1E01\", \"\\u1E03\", \"\\u1E05\", \"\\u1E07\", \"\\u1E09\", \"\\u1E0B\", \"\\u1E0D\", \"\\u1E0F\", \"\\u1E11\", \"\\u1E13\", \"\\u1E15\", \"\\u1E17\", \"\\u1E19\", \"\\u1E1B\", \"\\u1E1D\", \"\\u1E1F\", \"\\u1E21\", \"\\u1E23\", \"\\u1E25\", \"\\u1E27\", \"\\u1E29\", \"\\u1E2B\", \"\\u1E2D\", \"\\u1E2F\", \"\\u1E31\", \"\\u1E33\", \"\\u1E35\", \"\\u1E37\", \"\\u1E39\", \"\\u1E3B\", \"\\u1E3D\", \"\\u1E3F\", \"\\u1E41\", \"\\u1E43\", \"\\u1E45\", \"\\u1E47\", \"\\u1E49\", \"\\u1E4B\", \"\\u1E4D\", \"\\u1E4F\", \"\\u1E51\", \"\\u1E53\", \"\\u1E55\", \"\\u1E57\", \"\\u1E59\", \"\\u1E5B\", \"\\u1E5D\", \"\\u1E5F\", \"\\u1E61\", \"\\u1E63\", \"\\u1E65\", \"\\u1E67\", \"\\u1E69\", \"\\u1E6B\", \"\\u1E6D\", \"\\u1E6F\", \"\\u1E71\", \"\\u1E73\", \"\\u1E75\", \"\\u1E77\", \"\\u1E79\", \"\\u1E7B\", \"\\u1E7D\", \"\\u1E7F\", \"\\u1E81\", \"\\u1E83\", \"\\u1E85\", \"\\u1E87\", \"\\u1E89\", \"\\u1E8B\", \"\\u1E8D\", \"\\u1E8F\", \"\\u1E91\", \"\\u1E93\", [\"\\u1E95\", \"\\u1E9D\"], \"\\u1E9F\", \"\\u1EA1\", \"\\u1EA3\", \"\\u1EA5\", \"\\u1EA7\", \"\\u1EA9\", \"\\u1EAB\", \"\\u1EAD\", \"\\u1EAF\", \"\\u1EB1\", \"\\u1EB3\", \"\\u1EB5\", \"\\u1EB7\", \"\\u1EB9\", \"\\u1EBB\", \"\\u1EBD\", \"\\u1EBF\", \"\\u1EC1\", \"\\u1EC3\", \"\\u1EC5\", \"\\u1EC7\", \"\\u1EC9\", \"\\u1ECB\", \"\\u1ECD\", \"\\u1ECF\", \"\\u1ED1\", \"\\u1ED3\", \"\\u1ED5\", \"\\u1ED7\", \"\\u1ED9\", \"\\u1EDB\", \"\\u1EDD\", \"\\u1EDF\", \"\\u1EE1\", \"\\u1EE3\", \"\\u1EE5\", \"\\u1EE7\", \"\\u1EE9\", \"\\u1EEB\", \"\\u1EED\", \"\\u1EEF\", \"\\u1EF1\", \"\\u1EF3\", \"\\u1EF5\", \"\\u1EF7\", \"\\u1EF9\", \"\\u1EFB\", \"\\u1EFD\", [\"\\u1EFF\", \"\\u1F07\"], [\"\\u1F10\", \"\\u1F15\"], [\"\\u1F20\", \"\\u1F27\"], [\"\\u1F30\", \"\\u1F37\"], [\"\\u1F40\", \"\\u1F45\"], [\"\\u1F50\", \"\\u1F57\"], [\"\\u1F60\", \"\\u1F67\"], [\"\\u1F70\", \"\\u1F7D\"], [\"\\u1F80\", \"\\u1F87\"], [\"\\u1F90\", \"\\u1F97\"], [\"\\u1FA0\", \"\\u1FA7\"], [\"\\u1FB0\", \"\\u1FB4\"], [\"\\u1FB6\", \"\\u1FB7\"], \"\\u1FBE\", [\"\\u1FC2\", \"\\u1FC4\"], [\"\\u1FC6\", \"\\u1FC7\"], [\"\\u1FD0\", \"\\u1FD3\"], [\"\\u1FD6\", \"\\u1FD7\"], [\"\\u1FE0\", \"\\u1FE7\"], [\"\\u1FF2\", \"\\u1FF4\"], [\"\\u1FF6\", \"\\u1FF7\"], \"\\u210A\", [\"\\u210E\", \"\\u210F\"], \"\\u2113\", \"\\u212F\", \"\\u2134\", \"\\u2139\", [\"\\u213C\", \"\\u213D\"], [\"\\u2146\", \"\\u2149\"], \"\\u214E\", \"\\u2184\", [\"\\u2C30\", \"\\u2C5E\"], \"\\u2C61\", [\"\\u2C65\", \"\\u2C66\"], \"\\u2C68\", \"\\u2C6A\", \"\\u2C6C\", \"\\u2C71\", [\"\\u2C73\", \"\\u2C74\"], [\"\\u2C76\", \"\\u2C7B\"], \"\\u2C81\", \"\\u2C83\", \"\\u2C85\", \"\\u2C87\", \"\\u2C89\", \"\\u2C8B\", \"\\u2C8D\", \"\\u2C8F\", \"\\u2C91\", \"\\u2C93\", \"\\u2C95\", \"\\u2C97\", \"\\u2C99\", \"\\u2C9B\", \"\\u2C9D\", \"\\u2C9F\", \"\\u2CA1\", \"\\u2CA3\", \"\\u2CA5\", \"\\u2CA7\", \"\\u2CA9\", \"\\u2CAB\", \"\\u2CAD\", \"\\u2CAF\", \"\\u2CB1\", \"\\u2CB3\", \"\\u2CB5\", \"\\u2CB7\", \"\\u2CB9\", \"\\u2CBB\", \"\\u2CBD\", \"\\u2CBF\", \"\\u2CC1\", \"\\u2CC3\", \"\\u2CC5\", \"\\u2CC7\", \"\\u2CC9\", \"\\u2CCB\", \"\\u2CCD\", \"\\u2CCF\", \"\\u2CD1\", \"\\u2CD3\", \"\\u2CD5\", \"\\u2CD7\", \"\\u2CD9\", \"\\u2CDB\", \"\\u2CDD\", \"\\u2CDF\", \"\\u2CE1\", [\"\\u2CE3\", \"\\u2CE4\"], \"\\u2CEC\", \"\\u2CEE\", \"\\u2CF3\", [\"\\u2D00\", \"\\u2D25\"], \"\\u2D27\", \"\\u2D2D\", \"\\uA641\", \"\\uA643\", \"\\uA645\", \"\\uA647\", \"\\uA649\", \"\\uA64B\", \"\\uA64D\", \"\\uA64F\", \"\\uA651\", \"\\uA653\", \"\\uA655\", \"\\uA657\", \"\\uA659\", \"\\uA65B\", \"\\uA65D\", \"\\uA65F\", \"\\uA661\", \"\\uA663\", \"\\uA665\", \"\\uA667\", \"\\uA669\", \"\\uA66B\", \"\\uA66D\", \"\\uA681\", \"\\uA683\", \"\\uA685\", \"\\uA687\", \"\\uA689\", \"\\uA68B\", \"\\uA68D\", \"\\uA68F\", \"\\uA691\", \"\\uA693\", \"\\uA695\", \"\\uA697\", \"\\uA699\", \"\\uA69B\", \"\\uA723\", \"\\uA725\", \"\\uA727\", \"\\uA729\", \"\\uA72B\", \"\\uA72D\", [\"\\uA72F\", \"\\uA731\"], \"\\uA733\", \"\\uA735\", \"\\uA737\", \"\\uA739\", \"\\uA73B\", \"\\uA73D\", \"\\uA73F\", \"\\uA741\", \"\\uA743\", \"\\uA745\", \"\\uA747\", \"\\uA749\", \"\\uA74B\", \"\\uA74D\", \"\\uA74F\", \"\\uA751\", \"\\uA753\", \"\\uA755\", \"\\uA757\", \"\\uA759\", \"\\uA75B\", \"\\uA75D\", \"\\uA75F\", \"\\uA761\", \"\\uA763\", \"\\uA765\", \"\\uA767\", \"\\uA769\", \"\\uA76B\", \"\\uA76D\", \"\\uA76F\", [\"\\uA771\", \"\\uA778\"], \"\\uA77A\", \"\\uA77C\", \"\\uA77F\", \"\\uA781\", \"\\uA783\", \"\\uA785\", \"\\uA787\", \"\\uA78C\", \"\\uA78E\", \"\\uA791\", [\"\\uA793\", \"\\uA795\"], \"\\uA797\", \"\\uA799\", \"\\uA79B\", \"\\uA79D\", \"\\uA79F\", \"\\uA7A1\", \"\\uA7A3\", \"\\uA7A5\", \"\\uA7A7\", \"\\uA7A9\", \"\\uA7B5\", \"\\uA7B7\", \"\\uA7FA\", [\"\\uAB30\", \"\\uAB5A\"], [\"\\uAB60\", \"\\uAB65\"], [\"\\uAB70\", \"\\uABBF\"], [\"\\uFB00\", \"\\uFB06\"], [\"\\uFB13\", \"\\uFB17\"], [\"\\uFF41\", \"\\uFF5A\"]], false, false),\n        peg$c494 = /^[\\u02B0-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0374\\u037A\\u0559\\u0640\\u06E5-\\u06E6\\u07F4-\\u07F5\\u07FA\\u081A\\u0824\\u0828\\u0971\\u0E46\\u0EC6\\u10FC\\u17D7\\u1843\\u1AA7\\u1C78-\\u1C7D\\u1D2C-\\u1D6A\\u1D78\\u1D9B-\\u1DBF\\u2071\\u207F\\u2090-\\u209C\\u2C7C-\\u2C7D\\u2D6F\\u2E2F\\u3005\\u3031-\\u3035\\u303B\\u309D-\\u309E\\u30FC-\\u30FE\\uA015\\uA4F8-\\uA4FD\\uA60C\\uA67F\\uA69C-\\uA69D\\uA717-\\uA71F\\uA770\\uA788\\uA7F8-\\uA7F9\\uA9CF\\uA9E6\\uAA70\\uAADD\\uAAF3-\\uAAF4\\uAB5C-\\uAB5F\\uFF70\\uFF9E-\\uFF9F]/,\n        peg$c495 = peg$classExpectation([[\"\\u02B0\", \"\\u02C1\"], [\"\\u02C6\", \"\\u02D1\"], [\"\\u02E0\", \"\\u02E4\"], \"\\u02EC\", \"\\u02EE\", \"\\u0374\", \"\\u037A\", \"\\u0559\", \"\\u0640\", [\"\\u06E5\", \"\\u06E6\"], [\"\\u07F4\", \"\\u07F5\"], \"\\u07FA\", \"\\u081A\", \"\\u0824\", \"\\u0828\", \"\\u0971\", \"\\u0E46\", \"\\u0EC6\", \"\\u10FC\", \"\\u17D7\", \"\\u1843\", \"\\u1AA7\", [\"\\u1C78\", \"\\u1C7D\"], [\"\\u1D2C\", \"\\u1D6A\"], \"\\u1D78\", [\"\\u1D9B\", \"\\u1DBF\"], \"\\u2071\", \"\\u207F\", [\"\\u2090\", \"\\u209C\"], [\"\\u2C7C\", \"\\u2C7D\"], \"\\u2D6F\", \"\\u2E2F\", \"\\u3005\", [\"\\u3031\", \"\\u3035\"], \"\\u303B\", [\"\\u309D\", \"\\u309E\"], [\"\\u30FC\", \"\\u30FE\"], \"\\uA015\", [\"\\uA4F8\", \"\\uA4FD\"], \"\\uA60C\", \"\\uA67F\", [\"\\uA69C\", \"\\uA69D\"], [\"\\uA717\", \"\\uA71F\"], \"\\uA770\", \"\\uA788\", [\"\\uA7F8\", \"\\uA7F9\"], \"\\uA9CF\", \"\\uA9E6\", \"\\uAA70\", \"\\uAADD\", [\"\\uAAF3\", \"\\uAAF4\"], [\"\\uAB5C\", \"\\uAB5F\"], \"\\uFF70\", [\"\\uFF9E\", \"\\uFF9F\"]], false, false),\n        peg$c496 = peg$otherExpectation(\"other letters\"),\n        peg$c497 = /^[\\xAA\\xBA\\u01BB\\u01C0-\\u01C3\\u0294\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u063F\\u0641-\\u064A\\u066E-\\u066F\\u0671-\\u06D3\\u06D5\\u06EE-\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u0800-\\u0815\\u0840-\\u0858\\u08A0-\\u08B4\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0972-\\u0980\\u0985-\\u098C\\u098F-\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC-\\u09DD\\u09DF-\\u09E1\\u09F0-\\u09F1\\u0A05-\\u0A0A\\u0A0F-\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32-\\u0A33\\u0A35-\\u0A36\\u0A38-\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2-\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0-\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F-\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32-\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C-\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99-\\u0B9A\\u0B9C\\u0B9E-\\u0B9F\\u0BA3-\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60-\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0-\\u0CE1\\u0CF1-\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32-\\u0E33\\u0E40-\\u0E45\\u0E81-\\u0E82\\u0E84\\u0E87-\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA-\\u0EAB\\u0EAD-\\u0EB0\\u0EB2-\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065-\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10D0-\\u10FA\\u10FD-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17DC\\u1820-\\u1842\\u1844-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE-\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C77\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5-\\u1CF6\\u2135-\\u2138\\u2D30-\\u2D67\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3006\\u303C\\u3041-\\u3096\\u309F\\u30A1-\\u30FA\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA014\\uA016-\\uA48C\\uA4D0-\\uA4F7\\uA500-\\uA60B\\uA610-\\uA61F\\uA62A-\\uA62B\\uA66E\\uA6A0-\\uA6E5\\uA78F\\uA7F7\\uA7FB-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9E0-\\uA9E4\\uA9E7-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA6F\\uAA71-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5-\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADC\\uAAE0-\\uAAEA\\uAAF2\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40-\\uFB41\\uFB43-\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF66-\\uFF6F\\uFF71-\\uFF9D\\uFFA0-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/,\n        peg$c498 = peg$classExpectation([\"\\xAA\", \"\\xBA\", \"\\u01BB\", [\"\\u01C0\", \"\\u01C3\"], \"\\u0294\", [\"\\u05D0\", \"\\u05EA\"], [\"\\u05F0\", \"\\u05F2\"], [\"\\u0620\", \"\\u063F\"], [\"\\u0641\", \"\\u064A\"], [\"\\u066E\", \"\\u066F\"], [\"\\u0671\", \"\\u06D3\"], \"\\u06D5\", [\"\\u06EE\", \"\\u06EF\"], [\"\\u06FA\", \"\\u06FC\"], \"\\u06FF\", \"\\u0710\", [\"\\u0712\", \"\\u072F\"], [\"\\u074D\", \"\\u07A5\"], \"\\u07B1\", [\"\\u07CA\", \"\\u07EA\"], [\"\\u0800\", \"\\u0815\"], [\"\\u0840\", \"\\u0858\"], [\"\\u08A0\", \"\\u08B4\"], [\"\\u0904\", \"\\u0939\"], \"\\u093D\", \"\\u0950\", [\"\\u0958\", \"\\u0961\"], [\"\\u0972\", \"\\u0980\"], [\"\\u0985\", \"\\u098C\"], [\"\\u098F\", \"\\u0990\"], [\"\\u0993\", \"\\u09A8\"], [\"\\u09AA\", \"\\u09B0\"], \"\\u09B2\", [\"\\u09B6\", \"\\u09B9\"], \"\\u09BD\", \"\\u09CE\", [\"\\u09DC\", \"\\u09DD\"], [\"\\u09DF\", \"\\u09E1\"], [\"\\u09F0\", \"\\u09F1\"], [\"\\u0A05\", \"\\u0A0A\"], [\"\\u0A0F\", \"\\u0A10\"], [\"\\u0A13\", \"\\u0A28\"], [\"\\u0A2A\", \"\\u0A30\"], [\"\\u0A32\", \"\\u0A33\"], [\"\\u0A35\", \"\\u0A36\"], [\"\\u0A38\", \"\\u0A39\"], [\"\\u0A59\", \"\\u0A5C\"], \"\\u0A5E\", [\"\\u0A72\", \"\\u0A74\"], [\"\\u0A85\", \"\\u0A8D\"], [\"\\u0A8F\", \"\\u0A91\"], [\"\\u0A93\", \"\\u0AA8\"], [\"\\u0AAA\", \"\\u0AB0\"], [\"\\u0AB2\", \"\\u0AB3\"], [\"\\u0AB5\", \"\\u0AB9\"], \"\\u0ABD\", \"\\u0AD0\", [\"\\u0AE0\", \"\\u0AE1\"], \"\\u0AF9\", [\"\\u0B05\", \"\\u0B0C\"], [\"\\u0B0F\", \"\\u0B10\"], [\"\\u0B13\", \"\\u0B28\"], [\"\\u0B2A\", \"\\u0B30\"], [\"\\u0B32\", \"\\u0B33\"], [\"\\u0B35\", \"\\u0B39\"], \"\\u0B3D\", [\"\\u0B5C\", \"\\u0B5D\"], [\"\\u0B5F\", \"\\u0B61\"], \"\\u0B71\", \"\\u0B83\", [\"\\u0B85\", \"\\u0B8A\"], [\"\\u0B8E\", \"\\u0B90\"], [\"\\u0B92\", \"\\u0B95\"], [\"\\u0B99\", \"\\u0B9A\"], \"\\u0B9C\", [\"\\u0B9E\", \"\\u0B9F\"], [\"\\u0BA3\", \"\\u0BA4\"], [\"\\u0BA8\", \"\\u0BAA\"], [\"\\u0BAE\", \"\\u0BB9\"], \"\\u0BD0\", [\"\\u0C05\", \"\\u0C0C\"], [\"\\u0C0E\", \"\\u0C10\"], [\"\\u0C12\", \"\\u0C28\"], [\"\\u0C2A\", \"\\u0C39\"], \"\\u0C3D\", [\"\\u0C58\", \"\\u0C5A\"], [\"\\u0C60\", \"\\u0C61\"], [\"\\u0C85\", \"\\u0C8C\"], [\"\\u0C8E\", \"\\u0C90\"], [\"\\u0C92\", \"\\u0CA8\"], [\"\\u0CAA\", \"\\u0CB3\"], [\"\\u0CB5\", \"\\u0CB9\"], \"\\u0CBD\", \"\\u0CDE\", [\"\\u0CE0\", \"\\u0CE1\"], [\"\\u0CF1\", \"\\u0CF2\"], [\"\\u0D05\", \"\\u0D0C\"], [\"\\u0D0E\", \"\\u0D10\"], [\"\\u0D12\", \"\\u0D3A\"], \"\\u0D3D\", \"\\u0D4E\", [\"\\u0D5F\", \"\\u0D61\"], [\"\\u0D7A\", \"\\u0D7F\"], [\"\\u0D85\", \"\\u0D96\"], [\"\\u0D9A\", \"\\u0DB1\"], [\"\\u0DB3\", \"\\u0DBB\"], \"\\u0DBD\", [\"\\u0DC0\", \"\\u0DC6\"], [\"\\u0E01\", \"\\u0E30\"], [\"\\u0E32\", \"\\u0E33\"], [\"\\u0E40\", \"\\u0E45\"], [\"\\u0E81\", \"\\u0E82\"], \"\\u0E84\", [\"\\u0E87\", \"\\u0E88\"], \"\\u0E8A\", \"\\u0E8D\", [\"\\u0E94\", \"\\u0E97\"], [\"\\u0E99\", \"\\u0E9F\"], [\"\\u0EA1\", \"\\u0EA3\"], \"\\u0EA5\", \"\\u0EA7\", [\"\\u0EAA\", \"\\u0EAB\"], [\"\\u0EAD\", \"\\u0EB0\"], [\"\\u0EB2\", \"\\u0EB3\"], \"\\u0EBD\", [\"\\u0EC0\", \"\\u0EC4\"], [\"\\u0EDC\", \"\\u0EDF\"], \"\\u0F00\", [\"\\u0F40\", \"\\u0F47\"], [\"\\u0F49\", \"\\u0F6C\"], [\"\\u0F88\", \"\\u0F8C\"], [\"\\u1000\", \"\\u102A\"], \"\\u103F\", [\"\\u1050\", \"\\u1055\"], [\"\\u105A\", \"\\u105D\"], \"\\u1061\", [\"\\u1065\", \"\\u1066\"], [\"\\u106E\", \"\\u1070\"], [\"\\u1075\", \"\\u1081\"], \"\\u108E\", [\"\\u10D0\", \"\\u10FA\"], [\"\\u10FD\", \"\\u1248\"], [\"\\u124A\", \"\\u124D\"], [\"\\u1250\", \"\\u1256\"], \"\\u1258\", [\"\\u125A\", \"\\u125D\"], [\"\\u1260\", \"\\u1288\"], [\"\\u128A\", \"\\u128D\"], [\"\\u1290\", \"\\u12B0\"], [\"\\u12B2\", \"\\u12B5\"], [\"\\u12B8\", \"\\u12BE\"], \"\\u12C0\", [\"\\u12C2\", \"\\u12C5\"], [\"\\u12C8\", \"\\u12D6\"], [\"\\u12D8\", \"\\u1310\"], [\"\\u1312\", \"\\u1315\"], [\"\\u1318\", \"\\u135A\"], [\"\\u1380\", \"\\u138F\"], [\"\\u1401\", \"\\u166C\"], [\"\\u166F\", \"\\u167F\"], [\"\\u1681\", \"\\u169A\"], [\"\\u16A0\", \"\\u16EA\"], [\"\\u16F1\", \"\\u16F8\"], [\"\\u1700\", \"\\u170C\"], [\"\\u170E\", \"\\u1711\"], [\"\\u1720\", \"\\u1731\"], [\"\\u1740\", \"\\u1751\"], [\"\\u1760\", \"\\u176C\"], [\"\\u176E\", \"\\u1770\"], [\"\\u1780\", \"\\u17B3\"], \"\\u17DC\", [\"\\u1820\", \"\\u1842\"], [\"\\u1844\", \"\\u1877\"], [\"\\u1880\", \"\\u18A8\"], \"\\u18AA\", [\"\\u18B0\", \"\\u18F5\"], [\"\\u1900\", \"\\u191E\"], [\"\\u1950\", \"\\u196D\"], [\"\\u1970\", \"\\u1974\"], [\"\\u1980\", \"\\u19AB\"], [\"\\u19B0\", \"\\u19C9\"], [\"\\u1A00\", \"\\u1A16\"], [\"\\u1A20\", \"\\u1A54\"], [\"\\u1B05\", \"\\u1B33\"], [\"\\u1B45\", \"\\u1B4B\"], [\"\\u1B83\", \"\\u1BA0\"], [\"\\u1BAE\", \"\\u1BAF\"], [\"\\u1BBA\", \"\\u1BE5\"], [\"\\u1C00\", \"\\u1C23\"], [\"\\u1C4D\", \"\\u1C4F\"], [\"\\u1C5A\", \"\\u1C77\"], [\"\\u1CE9\", \"\\u1CEC\"], [\"\\u1CEE\", \"\\u1CF1\"], [\"\\u1CF5\", \"\\u1CF6\"], [\"\\u2135\", \"\\u2138\"], [\"\\u2D30\", \"\\u2D67\"], [\"\\u2D80\", \"\\u2D96\"], [\"\\u2DA0\", \"\\u2DA6\"], [\"\\u2DA8\", \"\\u2DAE\"], [\"\\u2DB0\", \"\\u2DB6\"], [\"\\u2DB8\", \"\\u2DBE\"], [\"\\u2DC0\", \"\\u2DC6\"], [\"\\u2DC8\", \"\\u2DCE\"], [\"\\u2DD0\", \"\\u2DD6\"], [\"\\u2DD8\", \"\\u2DDE\"], \"\\u3006\", \"\\u303C\", [\"\\u3041\", \"\\u3096\"], \"\\u309F\", [\"\\u30A1\", \"\\u30FA\"], \"\\u30FF\", [\"\\u3105\", \"\\u312D\"], [\"\\u3131\", \"\\u318E\"], [\"\\u31A0\", \"\\u31BA\"], [\"\\u31F0\", \"\\u31FF\"], [\"\\u3400\", \"\\u4DB5\"], [\"\\u4E00\", \"\\u9FD5\"], [\"\\uA000\", \"\\uA014\"], [\"\\uA016\", \"\\uA48C\"], [\"\\uA4D0\", \"\\uA4F7\"], [\"\\uA500\", \"\\uA60B\"], [\"\\uA610\", \"\\uA61F\"], [\"\\uA62A\", \"\\uA62B\"], \"\\uA66E\", [\"\\uA6A0\", \"\\uA6E5\"], \"\\uA78F\", \"\\uA7F7\", [\"\\uA7FB\", \"\\uA801\"], [\"\\uA803\", \"\\uA805\"], [\"\\uA807\", \"\\uA80A\"], [\"\\uA80C\", \"\\uA822\"], [\"\\uA840\", \"\\uA873\"], [\"\\uA882\", \"\\uA8B3\"], [\"\\uA8F2\", \"\\uA8F7\"], \"\\uA8FB\", \"\\uA8FD\", [\"\\uA90A\", \"\\uA925\"], [\"\\uA930\", \"\\uA946\"], [\"\\uA960\", \"\\uA97C\"], [\"\\uA984\", \"\\uA9B2\"], [\"\\uA9E0\", \"\\uA9E4\"], [\"\\uA9E7\", \"\\uA9EF\"], [\"\\uA9FA\", \"\\uA9FE\"], [\"\\uAA00\", \"\\uAA28\"], [\"\\uAA40\", \"\\uAA42\"], [\"\\uAA44\", \"\\uAA4B\"], [\"\\uAA60\", \"\\uAA6F\"], [\"\\uAA71\", \"\\uAA76\"], \"\\uAA7A\", [\"\\uAA7E\", \"\\uAAAF\"], \"\\uAAB1\", [\"\\uAAB5\", \"\\uAAB6\"], [\"\\uAAB9\", \"\\uAABD\"], \"\\uAAC0\", \"\\uAAC2\", [\"\\uAADB\", \"\\uAADC\"], [\"\\uAAE0\", \"\\uAAEA\"], \"\\uAAF2\", [\"\\uAB01\", \"\\uAB06\"], [\"\\uAB09\", \"\\uAB0E\"], [\"\\uAB11\", \"\\uAB16\"], [\"\\uAB20\", \"\\uAB26\"], [\"\\uAB28\", \"\\uAB2E\"], [\"\\uABC0\", \"\\uABE2\"], [\"\\uAC00\", \"\\uD7A3\"], [\"\\uD7B0\", \"\\uD7C6\"], [\"\\uD7CB\", \"\\uD7FB\"], [\"\\uF900\", \"\\uFA6D\"], [\"\\uFA70\", \"\\uFAD9\"], \"\\uFB1D\", [\"\\uFB1F\", \"\\uFB28\"], [\"\\uFB2A\", \"\\uFB36\"], [\"\\uFB38\", \"\\uFB3C\"], \"\\uFB3E\", [\"\\uFB40\", \"\\uFB41\"], [\"\\uFB43\", \"\\uFB44\"], [\"\\uFB46\", \"\\uFBB1\"], [\"\\uFBD3\", \"\\uFD3D\"], [\"\\uFD50\", \"\\uFD8F\"], [\"\\uFD92\", \"\\uFDC7\"], [\"\\uFDF0\", \"\\uFDFB\"], [\"\\uFE70\", \"\\uFE74\"], [\"\\uFE76\", \"\\uFEFC\"], [\"\\uFF66\", \"\\uFF6F\"], [\"\\uFF71\", \"\\uFF9D\"], [\"\\uFFA0\", \"\\uFFBE\"], [\"\\uFFC2\", \"\\uFFC7\"], [\"\\uFFCA\", \"\\uFFCF\"], [\"\\uFFD2\", \"\\uFFD7\"], [\"\\uFFDA\", \"\\uFFDC\"]], false, false),\n        peg$c499 = /^[\\u01C5\\u01C8\\u01CB\\u01F2\\u1F88-\\u1F8F\\u1F98-\\u1F9F\\u1FA8-\\u1FAF\\u1FBC\\u1FCC\\u1FFC]/,\n        peg$c500 = peg$classExpectation([\"\\u01C5\", \"\\u01C8\", \"\\u01CB\", \"\\u01F2\", [\"\\u1F88\", \"\\u1F8F\"], [\"\\u1F98\", \"\\u1F9F\"], [\"\\u1FA8\", \"\\u1FAF\"], \"\\u1FBC\", \"\\u1FCC\", \"\\u1FFC\"], false, false),\n        peg$c501 = peg$otherExpectation(\"upper case letter\"),\n        peg$c502 = peg$otherExpectation(\"extended letters\"),\n        peg$c503 = /^[A-Z\\xC0-\\xD6\\xD8-\\xDE\\u0100\\u0102\\u0104\\u0106\\u0108\\u010A\\u010C\\u010E\\u0110\\u0112\\u0114\\u0116\\u0118\\u011A\\u011C\\u011E\\u0120\\u0122\\u0124\\u0126\\u0128\\u012A\\u012C\\u012E\\u0130\\u0132\\u0134\\u0136\\u0139\\u013B\\u013D\\u013F\\u0141\\u0143\\u0145\\u0147\\u014A\\u014C\\u014E\\u0150\\u0152\\u0154\\u0156\\u0158\\u015A\\u015C\\u015E\\u0160\\u0162\\u0164\\u0166\\u0168\\u016A\\u016C\\u016E\\u0170\\u0172\\u0174\\u0176\\u0178-\\u0179\\u017B\\u017D\\u0181-\\u0182\\u0184\\u0186-\\u0187\\u0189-\\u018B\\u018E-\\u0191\\u0193-\\u0194\\u0196-\\u0198\\u019C-\\u019D\\u019F-\\u01A0\\u01A2\\u01A4\\u01A6-\\u01A7\\u01A9\\u01AC\\u01AE-\\u01AF\\u01B1-\\u01B3\\u01B5\\u01B7-\\u01B8\\u01BC\\u01C4\\u01C7\\u01CA\\u01CD\\u01CF\\u01D1\\u01D3\\u01D5\\u01D7\\u01D9\\u01DB\\u01DE\\u01E0\\u01E2\\u01E4\\u01E6\\u01E8\\u01EA\\u01EC\\u01EE\\u01F1\\u01F4\\u01F6-\\u01F8\\u01FA\\u01FC\\u01FE\\u0200\\u0202\\u0204\\u0206\\u0208\\u020A\\u020C\\u020E\\u0210\\u0212\\u0214\\u0216\\u0218\\u021A\\u021C\\u021E\\u0220\\u0222\\u0224\\u0226\\u0228\\u022A\\u022C\\u022E\\u0230\\u0232\\u023A-\\u023B\\u023D-\\u023E\\u0241\\u0243-\\u0246\\u0248\\u024A\\u024C\\u024E\\u0370\\u0372\\u0376\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u038F\\u0391-\\u03A1\\u03A3-\\u03AB\\u03CF\\u03D2-\\u03D4\\u03D8\\u03DA\\u03DC\\u03DE\\u03E0\\u03E2\\u03E4\\u03E6\\u03E8\\u03EA\\u03EC\\u03EE\\u03F4\\u03F7\\u03F9-\\u03FA\\u03FD-\\u042F\\u0460\\u0462\\u0464\\u0466\\u0468\\u046A\\u046C\\u046E\\u0470\\u0472\\u0474\\u0476\\u0478\\u047A\\u047C\\u047E\\u0480\\u048A\\u048C\\u048E\\u0490\\u0492\\u0494\\u0496\\u0498\\u049A\\u049C\\u049E\\u04A0\\u04A2\\u04A4\\u04A6\\u04A8\\u04AA\\u04AC\\u04AE\\u04B0\\u04B2\\u04B4\\u04B6\\u04B8\\u04BA\\u04BC\\u04BE\\u04C0-\\u04C1\\u04C3\\u04C5\\u04C7\\u04C9\\u04CB\\u04CD\\u04D0\\u04D2\\u04D4\\u04D6\\u04D8\\u04DA\\u04DC\\u04DE\\u04E0\\u04E2\\u04E4\\u04E6\\u04E8\\u04EA\\u04EC\\u04EE\\u04F0\\u04F2\\u04F4\\u04F6\\u04F8\\u04FA\\u04FC\\u04FE\\u0500\\u0502\\u0504\\u0506\\u0508\\u050A\\u050C\\u050E\\u0510\\u0512\\u0514\\u0516\\u0518\\u051A\\u051C\\u051E\\u0520\\u0522\\u0524\\u0526\\u0528\\u052A\\u052C\\u052E\\u0531-\\u0556\\u10A0-\\u10C5\\u10C7\\u10CD\\u13A0-\\u13F5\\u1E00\\u1E02\\u1E04\\u1E06\\u1E08\\u1E0A\\u1E0C\\u1E0E\\u1E10\\u1E12\\u1E14\\u1E16\\u1E18\\u1E1A\\u1E1C\\u1E1E\\u1E20\\u1E22\\u1E24\\u1E26\\u1E28\\u1E2A\\u1E2C\\u1E2E\\u1E30\\u1E32\\u1E34\\u1E36\\u1E38\\u1E3A\\u1E3C\\u1E3E\\u1E40\\u1E42\\u1E44\\u1E46\\u1E48\\u1E4A\\u1E4C\\u1E4E\\u1E50\\u1E52\\u1E54\\u1E56\\u1E58\\u1E5A\\u1E5C\\u1E5E\\u1E60\\u1E62\\u1E64\\u1E66\\u1E68\\u1E6A\\u1E6C\\u1E6E\\u1E70\\u1E72\\u1E74\\u1E76\\u1E78\\u1E7A\\u1E7C\\u1E7E\\u1E80\\u1E82\\u1E84\\u1E86\\u1E88\\u1E8A\\u1E8C\\u1E8E\\u1E90\\u1E92\\u1E94\\u1E9E\\u1EA0\\u1EA2\\u1EA4\\u1EA6\\u1EA8\\u1EAA\\u1EAC\\u1EAE\\u1EB0\\u1EB2\\u1EB4\\u1EB6\\u1EB8\\u1EBA\\u1EBC\\u1EBE\\u1EC0\\u1EC2\\u1EC4\\u1EC6\\u1EC8\\u1ECA\\u1ECC\\u1ECE\\u1ED0\\u1ED2\\u1ED4\\u1ED6\\u1ED8\\u1EDA\\u1EDC\\u1EDE\\u1EE0\\u1EE2\\u1EE4\\u1EE6\\u1EE8\\u1EEA\\u1EEC\\u1EEE\\u1EF0\\u1EF2\\u1EF4\\u1EF6\\u1EF8\\u1EFA\\u1EFC\\u1EFE\\u1F08-\\u1F0F\\u1F18-\\u1F1D\\u1F28-\\u1F2F\\u1F38-\\u1F3F\\u1F48-\\u1F4D\\u1F59\\u1F5B\\u1F5D\\u1F5F\\u1F68-\\u1F6F\\u1FB8-\\u1FBB\\u1FC8-\\u1FCB\\u1FD8-\\u1FDB\\u1FE8-\\u1FEC\\u1FF8-\\u1FFB\\u2102\\u2107\\u210B-\\u210D\\u2110-\\u2112\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u2130-\\u2133\\u213E-\\u213F\\u2145\\u2183\\u2C00-\\u2C2E\\u2C60\\u2C62-\\u2C64\\u2C67\\u2C69\\u2C6B\\u2C6D-\\u2C70\\u2C72\\u2C75\\u2C7E-\\u2C80\\u2C82\\u2C84\\u2C86\\u2C88\\u2C8A\\u2C8C\\u2C8E\\u2C90\\u2C92\\u2C94\\u2C96\\u2C98\\u2C9A\\u2C9C\\u2C9E\\u2CA0\\u2CA2\\u2CA4\\u2CA6\\u2CA8\\u2CAA\\u2CAC\\u2CAE\\u2CB0\\u2CB2\\u2CB4\\u2CB6\\u2CB8\\u2CBA\\u2CBC\\u2CBE\\u2CC0\\u2CC2\\u2CC4\\u2CC6\\u2CC8\\u2CCA\\u2CCC\\u2CCE\\u2CD0\\u2CD2\\u2CD4\\u2CD6\\u2CD8\\u2CDA\\u2CDC\\u2CDE\\u2CE0\\u2CE2\\u2CEB\\u2CED\\u2CF2\\uA640\\uA642\\uA644\\uA646\\uA648\\uA64A\\uA64C\\uA64E\\uA650\\uA652\\uA654\\uA656\\uA658\\uA65A\\uA65C\\uA65E\\uA660\\uA662\\uA664\\uA666\\uA668\\uA66A\\uA66C\\uA680\\uA682\\uA684\\uA686\\uA688\\uA68A\\uA68C\\uA68E\\uA690\\uA692\\uA694\\uA696\\uA698\\uA69A\\uA722\\uA724\\uA726\\uA728\\uA72A\\uA72C\\uA72E\\uA732\\uA734\\uA736\\uA738\\uA73A\\uA73C\\uA73E\\uA740\\uA742\\uA744\\uA746\\uA748\\uA74A\\uA74C\\uA74E\\uA750\\uA752\\uA754\\uA756\\uA758\\uA75A\\uA75C\\uA75E\\uA760\\uA762\\uA764\\uA766\\uA768\\uA76A\\uA76C\\uA76E\\uA779\\uA77B\\uA77D-\\uA77E\\uA780\\uA782\\uA784\\uA786\\uA78B\\uA78D\\uA790\\uA792\\uA796\\uA798\\uA79A\\uA79C\\uA79E\\uA7A0\\uA7A2\\uA7A4\\uA7A6\\uA7A8\\uA7AA-\\uA7AD\\uA7B0-\\uA7B4\\uA7B6\\uFF21-\\uFF3A]/,\n        peg$c504 = peg$classExpectation([[\"A\", \"Z\"], [\"\\xC0\", \"\\xD6\"], [\"\\xD8\", \"\\xDE\"], \"\\u0100\", \"\\u0102\", \"\\u0104\", \"\\u0106\", \"\\u0108\", \"\\u010A\", \"\\u010C\", \"\\u010E\", \"\\u0110\", \"\\u0112\", \"\\u0114\", \"\\u0116\", \"\\u0118\", \"\\u011A\", \"\\u011C\", \"\\u011E\", \"\\u0120\", \"\\u0122\", \"\\u0124\", \"\\u0126\", \"\\u0128\", \"\\u012A\", \"\\u012C\", \"\\u012E\", \"\\u0130\", \"\\u0132\", \"\\u0134\", \"\\u0136\", \"\\u0139\", \"\\u013B\", \"\\u013D\", \"\\u013F\", \"\\u0141\", \"\\u0143\", \"\\u0145\", \"\\u0147\", \"\\u014A\", \"\\u014C\", \"\\u014E\", \"\\u0150\", \"\\u0152\", \"\\u0154\", \"\\u0156\", \"\\u0158\", \"\\u015A\", \"\\u015C\", \"\\u015E\", \"\\u0160\", \"\\u0162\", \"\\u0164\", \"\\u0166\", \"\\u0168\", \"\\u016A\", \"\\u016C\", \"\\u016E\", \"\\u0170\", \"\\u0172\", \"\\u0174\", \"\\u0176\", [\"\\u0178\", \"\\u0179\"], \"\\u017B\", \"\\u017D\", [\"\\u0181\", \"\\u0182\"], \"\\u0184\", [\"\\u0186\", \"\\u0187\"], [\"\\u0189\", \"\\u018B\"], [\"\\u018E\", \"\\u0191\"], [\"\\u0193\", \"\\u0194\"], [\"\\u0196\", \"\\u0198\"], [\"\\u019C\", \"\\u019D\"], [\"\\u019F\", \"\\u01A0\"], \"\\u01A2\", \"\\u01A4\", [\"\\u01A6\", \"\\u01A7\"], \"\\u01A9\", \"\\u01AC\", [\"\\u01AE\", \"\\u01AF\"], [\"\\u01B1\", \"\\u01B3\"], \"\\u01B5\", [\"\\u01B7\", \"\\u01B8\"], \"\\u01BC\", \"\\u01C4\", \"\\u01C7\", \"\\u01CA\", \"\\u01CD\", \"\\u01CF\", \"\\u01D1\", \"\\u01D3\", \"\\u01D5\", \"\\u01D7\", \"\\u01D9\", \"\\u01DB\", \"\\u01DE\", \"\\u01E0\", \"\\u01E2\", \"\\u01E4\", \"\\u01E6\", \"\\u01E8\", \"\\u01EA\", \"\\u01EC\", \"\\u01EE\", \"\\u01F1\", \"\\u01F4\", [\"\\u01F6\", \"\\u01F8\"], \"\\u01FA\", \"\\u01FC\", \"\\u01FE\", \"\\u0200\", \"\\u0202\", \"\\u0204\", \"\\u0206\", \"\\u0208\", \"\\u020A\", \"\\u020C\", \"\\u020E\", \"\\u0210\", \"\\u0212\", \"\\u0214\", \"\\u0216\", \"\\u0218\", \"\\u021A\", \"\\u021C\", \"\\u021E\", \"\\u0220\", \"\\u0222\", \"\\u0224\", \"\\u0226\", \"\\u0228\", \"\\u022A\", \"\\u022C\", \"\\u022E\", \"\\u0230\", \"\\u0232\", [\"\\u023A\", \"\\u023B\"], [\"\\u023D\", \"\\u023E\"], \"\\u0241\", [\"\\u0243\", \"\\u0246\"], \"\\u0248\", \"\\u024A\", \"\\u024C\", \"\\u024E\", \"\\u0370\", \"\\u0372\", \"\\u0376\", \"\\u037F\", \"\\u0386\", [\"\\u0388\", \"\\u038A\"], \"\\u038C\", [\"\\u038E\", \"\\u038F\"], [\"\\u0391\", \"\\u03A1\"], [\"\\u03A3\", \"\\u03AB\"], \"\\u03CF\", [\"\\u03D2\", \"\\u03D4\"], \"\\u03D8\", \"\\u03DA\", \"\\u03DC\", \"\\u03DE\", \"\\u03E0\", \"\\u03E2\", \"\\u03E4\", \"\\u03E6\", \"\\u03E8\", \"\\u03EA\", \"\\u03EC\", \"\\u03EE\", \"\\u03F4\", \"\\u03F7\", [\"\\u03F9\", \"\\u03FA\"], [\"\\u03FD\", \"\\u042F\"], \"\\u0460\", \"\\u0462\", \"\\u0464\", \"\\u0466\", \"\\u0468\", \"\\u046A\", \"\\u046C\", \"\\u046E\", \"\\u0470\", \"\\u0472\", \"\\u0474\", \"\\u0476\", \"\\u0478\", \"\\u047A\", \"\\u047C\", \"\\u047E\", \"\\u0480\", \"\\u048A\", \"\\u048C\", \"\\u048E\", \"\\u0490\", \"\\u0492\", \"\\u0494\", \"\\u0496\", \"\\u0498\", \"\\u049A\", \"\\u049C\", \"\\u049E\", \"\\u04A0\", \"\\u04A2\", \"\\u04A4\", \"\\u04A6\", \"\\u04A8\", \"\\u04AA\", \"\\u04AC\", \"\\u04AE\", \"\\u04B0\", \"\\u04B2\", \"\\u04B4\", \"\\u04B6\", \"\\u04B8\", \"\\u04BA\", \"\\u04BC\", \"\\u04BE\", [\"\\u04C0\", \"\\u04C1\"], \"\\u04C3\", \"\\u04C5\", \"\\u04C7\", \"\\u04C9\", \"\\u04CB\", \"\\u04CD\", \"\\u04D0\", \"\\u04D2\", \"\\u04D4\", \"\\u04D6\", \"\\u04D8\", \"\\u04DA\", \"\\u04DC\", \"\\u04DE\", \"\\u04E0\", \"\\u04E2\", \"\\u04E4\", \"\\u04E6\", \"\\u04E8\", \"\\u04EA\", \"\\u04EC\", \"\\u04EE\", \"\\u04F0\", \"\\u04F2\", \"\\u04F4\", \"\\u04F6\", \"\\u04F8\", \"\\u04FA\", \"\\u04FC\", \"\\u04FE\", \"\\u0500\", \"\\u0502\", \"\\u0504\", \"\\u0506\", \"\\u0508\", \"\\u050A\", \"\\u050C\", \"\\u050E\", \"\\u0510\", \"\\u0512\", \"\\u0514\", \"\\u0516\", \"\\u0518\", \"\\u051A\", \"\\u051C\", \"\\u051E\", \"\\u0520\", \"\\u0522\", \"\\u0524\", \"\\u0526\", \"\\u0528\", \"\\u052A\", \"\\u052C\", \"\\u052E\", [\"\\u0531\", \"\\u0556\"], [\"\\u10A0\", \"\\u10C5\"], \"\\u10C7\", \"\\u10CD\", [\"\\u13A0\", \"\\u13F5\"], \"\\u1E00\", \"\\u1E02\", \"\\u1E04\", \"\\u1E06\", \"\\u1E08\", \"\\u1E0A\", \"\\u1E0C\", \"\\u1E0E\", \"\\u1E10\", \"\\u1E12\", \"\\u1E14\", \"\\u1E16\", \"\\u1E18\", \"\\u1E1A\", \"\\u1E1C\", \"\\u1E1E\", \"\\u1E20\", \"\\u1E22\", \"\\u1E24\", \"\\u1E26\", \"\\u1E28\", \"\\u1E2A\", \"\\u1E2C\", \"\\u1E2E\", \"\\u1E30\", \"\\u1E32\", \"\\u1E34\", \"\\u1E36\", \"\\u1E38\", \"\\u1E3A\", \"\\u1E3C\", \"\\u1E3E\", \"\\u1E40\", \"\\u1E42\", \"\\u1E44\", \"\\u1E46\", \"\\u1E48\", \"\\u1E4A\", \"\\u1E4C\", \"\\u1E4E\", \"\\u1E50\", \"\\u1E52\", \"\\u1E54\", \"\\u1E56\", \"\\u1E58\", \"\\u1E5A\", \"\\u1E5C\", \"\\u1E5E\", \"\\u1E60\", \"\\u1E62\", \"\\u1E64\", \"\\u1E66\", \"\\u1E68\", \"\\u1E6A\", \"\\u1E6C\", \"\\u1E6E\", \"\\u1E70\", \"\\u1E72\", \"\\u1E74\", \"\\u1E76\", \"\\u1E78\", \"\\u1E7A\", \"\\u1E7C\", \"\\u1E7E\", \"\\u1E80\", \"\\u1E82\", \"\\u1E84\", \"\\u1E86\", \"\\u1E88\", \"\\u1E8A\", \"\\u1E8C\", \"\\u1E8E\", \"\\u1E90\", \"\\u1E92\", \"\\u1E94\", \"\\u1E9E\", \"\\u1EA0\", \"\\u1EA2\", \"\\u1EA4\", \"\\u1EA6\", \"\\u1EA8\", \"\\u1EAA\", \"\\u1EAC\", \"\\u1EAE\", \"\\u1EB0\", \"\\u1EB2\", \"\\u1EB4\", \"\\u1EB6\", \"\\u1EB8\", \"\\u1EBA\", \"\\u1EBC\", \"\\u1EBE\", \"\\u1EC0\", \"\\u1EC2\", \"\\u1EC4\", \"\\u1EC6\", \"\\u1EC8\", \"\\u1ECA\", \"\\u1ECC\", \"\\u1ECE\", \"\\u1ED0\", \"\\u1ED2\", \"\\u1ED4\", \"\\u1ED6\", \"\\u1ED8\", \"\\u1EDA\", \"\\u1EDC\", \"\\u1EDE\", \"\\u1EE0\", \"\\u1EE2\", \"\\u1EE4\", \"\\u1EE6\", \"\\u1EE8\", \"\\u1EEA\", \"\\u1EEC\", \"\\u1EEE\", \"\\u1EF0\", \"\\u1EF2\", \"\\u1EF4\", \"\\u1EF6\", \"\\u1EF8\", \"\\u1EFA\", \"\\u1EFC\", \"\\u1EFE\", [\"\\u1F08\", \"\\u1F0F\"], [\"\\u1F18\", \"\\u1F1D\"], [\"\\u1F28\", \"\\u1F2F\"], [\"\\u1F38\", \"\\u1F3F\"], [\"\\u1F48\", \"\\u1F4D\"], \"\\u1F59\", \"\\u1F5B\", \"\\u1F5D\", \"\\u1F5F\", [\"\\u1F68\", \"\\u1F6F\"], [\"\\u1FB8\", \"\\u1FBB\"], [\"\\u1FC8\", \"\\u1FCB\"], [\"\\u1FD8\", \"\\u1FDB\"], [\"\\u1FE8\", \"\\u1FEC\"], [\"\\u1FF8\", \"\\u1FFB\"], \"\\u2102\", \"\\u2107\", [\"\\u210B\", \"\\u210D\"], [\"\\u2110\", \"\\u2112\"], \"\\u2115\", [\"\\u2119\", \"\\u211D\"], \"\\u2124\", \"\\u2126\", \"\\u2128\", [\"\\u212A\", \"\\u212D\"], [\"\\u2130\", \"\\u2133\"], [\"\\u213E\", \"\\u213F\"], \"\\u2145\", \"\\u2183\", [\"\\u2C00\", \"\\u2C2E\"], \"\\u2C60\", [\"\\u2C62\", \"\\u2C64\"], \"\\u2C67\", \"\\u2C69\", \"\\u2C6B\", [\"\\u2C6D\", \"\\u2C70\"], \"\\u2C72\", \"\\u2C75\", [\"\\u2C7E\", \"\\u2C80\"], \"\\u2C82\", \"\\u2C84\", \"\\u2C86\", \"\\u2C88\", \"\\u2C8A\", \"\\u2C8C\", \"\\u2C8E\", \"\\u2C90\", \"\\u2C92\", \"\\u2C94\", \"\\u2C96\", \"\\u2C98\", \"\\u2C9A\", \"\\u2C9C\", \"\\u2C9E\", \"\\u2CA0\", \"\\u2CA2\", \"\\u2CA4\", \"\\u2CA6\", \"\\u2CA8\", \"\\u2CAA\", \"\\u2CAC\", \"\\u2CAE\", \"\\u2CB0\", \"\\u2CB2\", \"\\u2CB4\", \"\\u2CB6\", \"\\u2CB8\", \"\\u2CBA\", \"\\u2CBC\", \"\\u2CBE\", \"\\u2CC0\", \"\\u2CC2\", \"\\u2CC4\", \"\\u2CC6\", \"\\u2CC8\", \"\\u2CCA\", \"\\u2CCC\", \"\\u2CCE\", \"\\u2CD0\", \"\\u2CD2\", \"\\u2CD4\", \"\\u2CD6\", \"\\u2CD8\", \"\\u2CDA\", \"\\u2CDC\", \"\\u2CDE\", \"\\u2CE0\", \"\\u2CE2\", \"\\u2CEB\", \"\\u2CED\", \"\\u2CF2\", \"\\uA640\", \"\\uA642\", \"\\uA644\", \"\\uA646\", \"\\uA648\", \"\\uA64A\", \"\\uA64C\", \"\\uA64E\", \"\\uA650\", \"\\uA652\", \"\\uA654\", \"\\uA656\", \"\\uA658\", \"\\uA65A\", \"\\uA65C\", \"\\uA65E\", \"\\uA660\", \"\\uA662\", \"\\uA664\", \"\\uA666\", \"\\uA668\", \"\\uA66A\", \"\\uA66C\", \"\\uA680\", \"\\uA682\", \"\\uA684\", \"\\uA686\", \"\\uA688\", \"\\uA68A\", \"\\uA68C\", \"\\uA68E\", \"\\uA690\", \"\\uA692\", \"\\uA694\", \"\\uA696\", \"\\uA698\", \"\\uA69A\", \"\\uA722\", \"\\uA724\", \"\\uA726\", \"\\uA728\", \"\\uA72A\", \"\\uA72C\", \"\\uA72E\", \"\\uA732\", \"\\uA734\", \"\\uA736\", \"\\uA738\", \"\\uA73A\", \"\\uA73C\", \"\\uA73E\", \"\\uA740\", \"\\uA742\", \"\\uA744\", \"\\uA746\", \"\\uA748\", \"\\uA74A\", \"\\uA74C\", \"\\uA74E\", \"\\uA750\", \"\\uA752\", \"\\uA754\", \"\\uA756\", \"\\uA758\", \"\\uA75A\", \"\\uA75C\", \"\\uA75E\", \"\\uA760\", \"\\uA762\", \"\\uA764\", \"\\uA766\", \"\\uA768\", \"\\uA76A\", \"\\uA76C\", \"\\uA76E\", \"\\uA779\", \"\\uA77B\", [\"\\uA77D\", \"\\uA77E\"], \"\\uA780\", \"\\uA782\", \"\\uA784\", \"\\uA786\", \"\\uA78B\", \"\\uA78D\", \"\\uA790\", \"\\uA792\", \"\\uA796\", \"\\uA798\", \"\\uA79A\", \"\\uA79C\", \"\\uA79E\", \"\\uA7A0\", \"\\uA7A2\", \"\\uA7A4\", \"\\uA7A6\", \"\\uA7A8\", [\"\\uA7AA\", \"\\uA7AD\"], [\"\\uA7B0\", \"\\uA7B4\"], \"\\uA7B6\", [\"\\uFF21\", \"\\uFF3A\"]], false, false),\n        peg$c505 = peg$otherExpectation(\"unicode number\"),\n        peg$c506 = /^[0-9\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19]/,\n        peg$c507 = peg$classExpectation([[\"0\", \"9\"], [\"\\u0660\", \"\\u0669\"], [\"\\u06F0\", \"\\u06F9\"], [\"\\u07C0\", \"\\u07C9\"], [\"\\u0966\", \"\\u096F\"], [\"\\u09E6\", \"\\u09EF\"], [\"\\u0A66\", \"\\u0A6F\"], [\"\\u0AE6\", \"\\u0AEF\"], [\"\\u0B66\", \"\\u0B6F\"], [\"\\u0BE6\", \"\\u0BEF\"], [\"\\u0C66\", \"\\u0C6F\"], [\"\\u0CE6\", \"\\u0CEF\"], [\"\\u0D66\", \"\\u0D6F\"], [\"\\u0DE6\", \"\\u0DEF\"], [\"\\u0E50\", \"\\u0E59\"], [\"\\u0ED0\", \"\\u0ED9\"], [\"\\u0F20\", \"\\u0F29\"], [\"\\u1040\", \"\\u1049\"], [\"\\u1090\", \"\\u1099\"], [\"\\u17E0\", \"\\u17E9\"], [\"\\u1810\", \"\\u1819\"], [\"\\u1946\", \"\\u194F\"], [\"\\u19D0\", \"\\u19D9\"], [\"\\u1A80\", \"\\u1A89\"], [\"\\u1A90\", \"\\u1A99\"], [\"\\u1B50\", \"\\u1B59\"], [\"\\u1BB0\", \"\\u1BB9\"], [\"\\u1C40\", \"\\u1C49\"], [\"\\u1C50\", \"\\u1C59\"], [\"\\uA620\", \"\\uA629\"], [\"\\uA8D0\", \"\\uA8D9\"], [\"\\uA900\", \"\\uA909\"], [\"\\uA9D0\", \"\\uA9D9\"], [\"\\uA9F0\", \"\\uA9F9\"], [\"\\uAA50\", \"\\uAA59\"], [\"\\uABF0\", \"\\uABF9\"], [\"\\uFF10\", \"\\uFF19\"]], false, false),\n        peg$c508 = peg$otherExpectation(\"digit\"),\n        peg$c509 = peg$otherExpectation(\"space\"),\n        peg$c510 = /^[ \\xA0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/,\n        peg$c511 = peg$classExpectation([\" \", \"\\xA0\", \"\\u1680\", [\"\\u2000\", \"\\u200A\"], \"\\u202F\", \"\\u205F\", \"\\u3000\"], false, false),\n\n        peg$currPos          = 0,\n        peg$savedPos         = 0,\n        peg$posDetailsCache  = [{ line: 1, column: 1 }],\n        peg$maxFailPos       = 0,\n        peg$maxFailExpected  = [],\n        peg$silentFails      = 0,\n\n        peg$resultsCache = {},\n\n        peg$result;\n\n    if (\"startRule\" in options) {\n      if (!(options.startRule in peg$startRuleFunctions)) {\n        throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n      }\n\n      peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n    }\n\n    function text() {\n      return input.substring(peg$savedPos, peg$currPos);\n    }\n\n    function location() {\n      return peg$computeLocation(peg$savedPos, peg$currPos);\n    }\n\n    function expected(description, location) {\n      location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos)\n\n      throw peg$buildStructuredError(\n        [peg$otherExpectation(description)],\n        input.substring(peg$savedPos, peg$currPos),\n        location\n      );\n    }\n\n    function error(message, location) {\n      location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos)\n\n      throw peg$buildSimpleError(message, location);\n    }\n\n    function peg$literalExpectation(text, ignoreCase) {\n      return { type: \"literal\", text: text, ignoreCase: ignoreCase };\n    }\n\n    function peg$classExpectation(parts, inverted, ignoreCase) {\n      return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n    }\n\n    function peg$anyExpectation() {\n      return { type: \"any\" };\n    }\n\n    function peg$endExpectation() {\n      return { type: \"end\" };\n    }\n\n    function peg$otherExpectation(description) {\n      return { type: \"other\", description: description };\n    }\n\n    function peg$computePosDetails(pos) {\n      var details = peg$posDetailsCache[pos], p;\n\n      if (details) {\n        return details;\n      } else {\n        p = pos - 1;\n        while (!peg$posDetailsCache[p]) {\n          p--;\n        }\n\n        details = peg$posDetailsCache[p];\n        details = {\n          line:   details.line,\n          column: details.column\n        };\n\n        while (p < pos) {\n          if (input.charCodeAt(p) === 10) {\n            details.line++;\n            details.column = 1;\n          } else {\n            details.column++;\n          }\n\n          p++;\n        }\n\n        peg$posDetailsCache[pos] = details;\n        return details;\n      }\n    }\n\n    function peg$computeLocation(startPos, endPos) {\n      var startPosDetails = peg$computePosDetails(startPos),\n          endPosDetails   = peg$computePosDetails(endPos);\n\n      return {\n        start: {\n          offset: startPos,\n          line:   startPosDetails.line,\n          column: startPosDetails.column\n        },\n        end: {\n          offset: endPos,\n          line:   endPosDetails.line,\n          column: endPosDetails.column\n        }\n      };\n    }\n\n    function peg$fail(expected) {\n      if (peg$currPos < peg$maxFailPos) { return; }\n\n      if (peg$currPos > peg$maxFailPos) {\n        peg$maxFailPos = peg$currPos;\n        peg$maxFailExpected = [];\n      }\n\n      peg$maxFailExpected.push(expected);\n    }\n\n    function peg$buildSimpleError(message, location) {\n      return new peg$SyntaxError(message, null, null, location);\n    }\n\n    function peg$buildStructuredError(expected, found, location) {\n      return new peg$SyntaxError(\n        peg$SyntaxError.buildMessage(expected, found),\n        expected,\n        found,\n        location\n      );\n    }\n\n    function peg$parsestart() {\n      var s0, s1, s2;\n\n      var key    = peg$currPos * 197 + 0,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = [];\n      s2 = peg$parseStatementDecorated();\n      while (s2 !== peg$FAILED) {\n        s1.push(s2);\n        s2 = peg$parseStatementDecorated();\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c0();\n      }\n      s0 = s1;\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseStatementDecorated() {\n      var s0, s1, s2, s3, s4;\n\n      var key    = peg$currPos * 197 + 1,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parse__();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseEndOfStatementSequence();\n        if (s2 !== peg$FAILED) {\n          s1 = [s1, s2];\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = peg$parseRootStatements();\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parse__();\n          if (s2 !== peg$FAILED) {\n            s3 = peg$parseEndOfStatementSequence();\n            if (s3 !== peg$FAILED) {\n              s1 = [s1, s2, s3];\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          s1 = peg$parseLead();\n          if (s1 !== peg$FAILED) {\n            s2 = peg$parseStatement();\n            if (s2 !== peg$FAILED) {\n              s3 = peg$parseEndOfStatementSequence();\n              if (s3 !== peg$FAILED) {\n                s1 = [s1, s2, s3];\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n          if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            s1 = peg$parseLead();\n            if (s1 !== peg$FAILED) {\n              s2 = peg$parseStatement();\n              if (s2 !== peg$FAILED) {\n                s3 = peg$parse__();\n                if (s3 !== peg$FAILED) {\n                  s4 = peg$parseEndOfStatementSequence();\n                  if (s4 !== peg$FAILED) {\n                    s1 = [s1, s2, s3, s4];\n                    s0 = s1;\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseEndOfStatementSequence() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 2,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$parseLineTerminatorSequence();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseEndOfFile();\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          s1 = peg$parseCommentStatement();\n          if (s1 !== peg$FAILED) {\n            s2 = peg$parse__();\n            if (s2 !== peg$FAILED) {\n              s3 = peg$parseLineTerminatorSequence();\n              if (s3 !== peg$FAILED) {\n                s1 = [s1, s2, s3];\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n          if (s0 === peg$FAILED) {\n            s0 = peg$parseEndOfFile();\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseEndOfFile() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 3,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      if (input.charCodeAt(peg$currPos) === 26) {\n        s0 = peg$c2;\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c3); }\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c1); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseLead() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 4,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parse___();\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c4();\n      }\n      s0 = s1;\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseStatement() {\n      var s0, s1, s2;\n\n      var key    = peg$currPos * 197 + 5,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      peg$savedPos = peg$currPos;\n      s1 = peg$c5();\n      if (s1) {\n        s1 = void 0;\n      } else {\n        s1 = peg$FAILED;\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseStateStatements();\n        if (s2 !== peg$FAILED) {\n          s1 = [s1, s2];\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        peg$savedPos = peg$currPos;\n        s1 = peg$c6();\n        if (s1) {\n          s1 = void 0;\n        } else {\n          s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parseTestStatements();\n          if (s2 !== peg$FAILED) {\n            s1 = [s1, s2];\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          peg$savedPos = peg$currPos;\n          s1 = peg$c7();\n          if (s1) {\n            s1 = void 0;\n          } else {\n            s1 = peg$FAILED;\n          }\n          if (s1 !== peg$FAILED) {\n            s2 = peg$parseDataTableRowStatement();\n            if (s2 !== peg$FAILED) {\n              s1 = [s1, s2];\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n          if (s0 === peg$FAILED) {\n            s0 = peg$parseCommentStatement();\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseRootStatements() {\n      var s0;\n\n      var key    = peg$currPos * 197 + 6,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$parseDefineStatement();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseExcludeStatement();\n        if (s0 === peg$FAILED) {\n          s0 = peg$parsePronounceStatement();\n          if (s0 === peg$FAILED) {\n            s0 = peg$parseNewTestStatement();\n            if (s0 === peg$FAILED) {\n              s0 = peg$parseNewDataTableStatement();\n              if (s0 === peg$FAILED) {\n                s0 = peg$parseNewStateStatement();\n                if (s0 === peg$FAILED) {\n                  s0 = peg$parseCommentStatement();\n                }\n              }\n            }\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseStateStatements() {\n      var s0;\n\n      var key    = peg$currPos * 197 + 7,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$parseConditionalStatement();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseForStatement();\n        if (s0 === peg$FAILED) {\n          s0 = peg$parseLogStatement();\n          if (s0 === peg$FAILED) {\n            s0 = peg$parseSwitchCaseStatement();\n            if (s0 === peg$FAILED) {\n              s0 = peg$parseFunctionCallStatement();\n              if (s0 === peg$FAILED) {\n                s0 = peg$parseOtherwiseStatement();\n                if (s0 === peg$FAILED) {\n                  s0 = peg$parseEndStatement();\n                  if (s0 === peg$FAILED) {\n                    s0 = peg$parseListenStatement();\n                    if (s0 === peg$FAILED) {\n                      s0 = peg$parseStopAndGotoStatement();\n                      if (s0 === peg$FAILED) {\n                        s0 = peg$parseGotoStatement();\n                        if (s0 === peg$FAILED) {\n                          s0 = peg$parseMetricStatement();\n                          if (s0 === peg$FAILED) {\n                            s0 = peg$parseSwitchStatement();\n                            if (s0 === peg$FAILED) {\n                              s0 = peg$parseResponseSpacingStatement();\n                              if (s0 === peg$FAILED) {\n                                s0 = peg$parseSettingStatement();\n                                if (s0 === peg$FAILED) {\n                                  s0 = peg$parseDatabaseAssignmentStatement();\n                                  if (s0 === peg$FAILED) {\n                                    s0 = peg$parseSoundEffectStatement();\n                                    if (s0 === peg$FAILED) {\n                                      s0 = peg$parsePlayMusicStatement();\n                                      if (s0 === peg$FAILED) {\n                                        s0 = peg$parseStopMusicStatement();\n                                        if (s0 === peg$FAILED) {\n                                          s0 = peg$parseSayStatement();\n                                          if (s0 === peg$FAILED) {\n                                            s0 = peg$parseRepromptStatement();\n                                            if (s0 === peg$FAILED) {\n                                              s0 = peg$parseSayRepromptStatement();\n                                              if (s0 === peg$FAILED) {\n                                                s0 = peg$parseCardStatement();\n                                                if (s0 === peg$FAILED) {\n                                                  s0 = peg$parseDirectiveStatement();\n                                                  if (s0 === peg$FAILED) {\n                                                    s0 = peg$parseHandoffStatement();\n                                                    if (s0 === peg$FAILED) {\n                                                      s0 = peg$parseIntentStatement();\n                                                      if (s0 === peg$FAILED) {\n                                                        s0 = peg$parseAlternativeStatement();\n                                                        if (s0 === peg$FAILED) {\n                                                          s0 = peg$parseSlotTypeStatement();\n                                                          if (s0 === peg$FAILED) {\n                                                            s0 = peg$parseAttributeStatement();\n                                                            if (s0 === peg$FAILED) {\n                                                              s0 = peg$parseCommentStatement();\n                                                              if (s0 === peg$FAILED) {\n                                                                s0 = peg$parseLocalVariableStatement();\n                                                                if (s0 === peg$FAILED) {\n                                                                  s0 = peg$parseLocalVariableAssignmentStatement();\n                                                                  if (s0 === peg$FAILED) {\n                                                                    s0 = peg$parseSlotVariableAssignmentStatement();\n                                                                    if (s0 === peg$FAILED) {\n                                                                      s0 = peg$parseBuyInSkillProductStatement();\n                                                                      if (s0 === peg$FAILED) {\n                                                                        s0 = peg$parseCancelInSkillProductStatement();\n                                                                        if (s0 === peg$FAILED) {\n                                                                          s0 = peg$parseUpsellInSkillProductStatement();\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      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTestStatements() {\n      var s0;\n\n      var key    = peg$currPos * 197 + 8,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$parseTestLaunchStatement();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseTestWaitStatement();\n        if (s0 === peg$FAILED) {\n          s0 = peg$parseTestQuitStatement();\n          if (s0 === peg$FAILED) {\n            s0 = peg$parseTestListenStatement();\n            if (s0 === peg$FAILED) {\n              s0 = peg$parseTestDirectiveStatement();\n              if (s0 === peg$FAILED) {\n                s0 = peg$parseTestLineAlexa();\n                if (s0 === peg$FAILED) {\n                  s0 = peg$parseTestLineUser();\n                  if (s0 === peg$FAILED) {\n                    s0 = peg$parseTestLineAlternate();\n                    if (s0 === peg$FAILED) {\n                      s0 = peg$parseTestEndStatement();\n                      if (s0 === peg$FAILED) {\n                        s0 = peg$parseTestLineExpectedDB();\n                        if (s0 === peg$FAILED) {\n                          s0 = peg$parseTestSetRegion();\n                          if (s0 === peg$FAILED) {\n                            s0 = peg$parseTestCapture();\n                            if (s0 === peg$FAILED) {\n                              s0 = peg$parseTestResume();\n                              if (s0 === peg$FAILED) {\n                                s0 = peg$parseTestLogStateTraces();\n                                if (s0 === peg$FAILED) {\n                                  s0 = peg$parseTestLineRequest();\n                                }\n                              }\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseFragment() {\n      var s0, s1, s2;\n\n      var key    = peg$currPos * 197 + 9,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseFragments();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s1 = [s1, s2];\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseFragments() {\n      var s0;\n\n      var key    = peg$currPos * 197 + 10,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$parseCardStatement();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseSayStatement();\n        if (s0 === peg$FAILED) {\n          s0 = peg$parseIntentStatement();\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseNewStateStatement() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 11,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseStateName();\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c8();\n      }\n      s0 = s1;\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseDefineStatement() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n      var key    = peg$currPos * 197 + 12,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 6) === peg$c10) {\n        s1 = peg$c10;\n        peg$currPos += 6;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c11); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 64) {\n            s3 = peg$c12;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c13); }\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parseIdentifier();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parse___();\n              if (s5 !== peg$FAILED) {\n                if (input.substr(peg$currPos, 2) === peg$c14) {\n                  s6 = peg$c14;\n                  peg$currPos += 2;\n                } else {\n                  s6 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c15); }\n                }\n                if (s6 !== peg$FAILED) {\n                  s7 = peg$parse___();\n                  if (s7 !== peg$FAILED) {\n                    s8 = peg$parseDottedIdentifier();\n                    if (s8 !== peg$FAILED) {\n                      peg$savedPos = s0;\n                      s1 = peg$c16(s4, s8);\n                      s0 = s1;\n                    } else {\n                      peg$currPos = s0;\n                      s0 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c9); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseAllFileExclusions() {\n      var s0, s1, s2;\n\n      var key    = peg$currPos * 197 + 13,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = [];\n      s2 = peg$parseAllFileExclusionsStatment();\n      while (s2 !== peg$FAILED) {\n        s1.push(s2);\n        s2 = peg$parseAllFileExclusionsStatment();\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c17(s1);\n      }\n      s0 = s1;\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseAllFileExclusionsStatment() {\n      var s0, s1, s2, s3, s4, s5;\n\n      var key    = peg$currPos * 197 + 14,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parse__();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseEndOfStatementSequence();\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c18();\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = peg$parseExcludeStatement();\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parse__();\n          if (s2 !== peg$FAILED) {\n            s3 = peg$parseEndOfStatementSequence();\n            if (s3 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c19(s1);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          s1 = peg$currPos;\n          s2 = [];\n          s3 = peg$currPos;\n          s4 = peg$currPos;\n          peg$silentFails++;\n          s5 = peg$parseEndOfStatementSequence();\n          peg$silentFails--;\n          if (s5 === peg$FAILED) {\n            s4 = void 0;\n          } else {\n            peg$currPos = s4;\n            s4 = peg$FAILED;\n          }\n          if (s4 !== peg$FAILED) {\n            if (input.length > peg$currPos) {\n              s5 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s5 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c20); }\n            }\n            if (s5 !== peg$FAILED) {\n              s4 = [s4, s5];\n              s3 = s4;\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n          while (s3 !== peg$FAILED) {\n            s2.push(s3);\n            s3 = peg$currPos;\n            s4 = peg$currPos;\n            peg$silentFails++;\n            s5 = peg$parseEndOfStatementSequence();\n            peg$silentFails--;\n            if (s5 === peg$FAILED) {\n              s4 = void 0;\n            } else {\n              peg$currPos = s4;\n              s4 = peg$FAILED;\n            }\n            if (s4 !== peg$FAILED) {\n              if (input.length > peg$currPos) {\n                s5 = input.charAt(peg$currPos);\n                peg$currPos++;\n              } else {\n                s5 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c20); }\n              }\n              if (s5 !== peg$FAILED) {\n                s4 = [s4, s5];\n                s3 = s4;\n              } else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          }\n          if (s2 !== peg$FAILED) {\n            s1 = input.substring(s1, peg$currPos);\n          } else {\n            s1 = s2;\n          }\n          if (s1 !== peg$FAILED) {\n            s2 = peg$parseEndOfStatementSequence();\n            if (s2 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c18();\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseExcludeStatement() {\n      var s0, s1, s2, s3, s4, s5;\n\n      var key    = peg$currPos * 197 + 15,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 12) === peg$c22) {\n        s1 = peg$c22;\n        peg$currPos += 12;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c23); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          if (input.substr(peg$currPos, 2) === peg$c24) {\n            s3 = peg$c24;\n            peg$currPos += 2;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c25); }\n          }\n          if (s3 === peg$FAILED) {\n            if (input.substr(peg$currPos, 6) === peg$c26) {\n              s3 = peg$c26;\n              peg$currPos += 6;\n            } else {\n              s3 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c27); }\n            }\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse___();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parseExpressionString();\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c28(s3, s5);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c21); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseConditionalStatement() {\n      var s0, s1, s2, s3, s4, s5;\n\n      var key    = peg$currPos * 197 + 16,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 2) === peg$c24) {\n        s1 = peg$c24;\n        peg$currPos += 2;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c25); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseExpressionString();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c30(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 6) === peg$c26) {\n          s1 = peg$c26;\n          peg$currPos += 6;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c27); }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parse___();\n          if (s2 !== peg$FAILED) {\n            s3 = peg$parseExpressionString();\n            if (s3 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c31(s3);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.substr(peg$currPos, 4) === peg$c32) {\n            s1 = peg$c32;\n            peg$currPos += 4;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c33); }\n          }\n          if (s1 !== peg$FAILED) {\n            s2 = peg$parse___();\n            if (s2 !== peg$FAILED) {\n              if (input.substr(peg$currPos, 2) === peg$c24) {\n                s3 = peg$c24;\n                peg$currPos += 2;\n              } else {\n                s3 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c25); }\n              }\n              if (s3 !== peg$FAILED) {\n                s4 = peg$parse___();\n                if (s4 !== peg$FAILED) {\n                  s5 = peg$parseExpressionString();\n                  if (s5 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c34(s5);\n                    s0 = s1;\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n          if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            if (input.substr(peg$currPos, 4) === peg$c32) {\n              s1 = peg$c32;\n              peg$currPos += 4;\n            } else {\n              s1 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c33); }\n            }\n            if (s1 !== peg$FAILED) {\n              s2 = peg$parse___();\n              if (s2 !== peg$FAILED) {\n                if (input.substr(peg$currPos, 6) === peg$c26) {\n                  s3 = peg$c26;\n                  peg$currPos += 6;\n                } else {\n                  s3 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c27); }\n                }\n                if (s3 !== peg$FAILED) {\n                  s4 = peg$parse___();\n                  if (s4 !== peg$FAILED) {\n                    s5 = peg$parseExpressionString();\n                    if (s5 !== peg$FAILED) {\n                      peg$savedPos = s0;\n                      s1 = peg$c35(s5);\n                      s0 = s1;\n                    } else {\n                      peg$currPos = s0;\n                      s0 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n            if (s0 === peg$FAILED) {\n              s0 = peg$currPos;\n              if (input.substr(peg$currPos, 4) === peg$c32) {\n                s1 = peg$c32;\n                peg$currPos += 4;\n              } else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c33); }\n              }\n              if (s1 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c36();\n              }\n              s0 = s1;\n            }\n          }\n        }\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c29); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseForStatement() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11;\n\n      var key    = peg$currPos * 197 + 17,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 3) === peg$c38) {\n        s1 = peg$c38;\n        peg$currPos += 3;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c39); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseIdentifier();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse__();\n            if (s4 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 44) {\n                s5 = peg$c40;\n                peg$currPos++;\n              } else {\n                s5 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c41); }\n              }\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parse__();\n                if (s6 !== peg$FAILED) {\n                  s7 = peg$parseIdentifier();\n                  if (s7 !== peg$FAILED) {\n                    s8 = peg$parse___();\n                    if (s8 !== peg$FAILED) {\n                      if (input.substr(peg$currPos, 2) === peg$c42) {\n                        s9 = peg$c42;\n                        peg$currPos += 2;\n                      } else {\n                        s9 = peg$FAILED;\n                        if (peg$silentFails === 0) { peg$fail(peg$c43); }\n                      }\n                      if (s9 !== peg$FAILED) {\n                        s10 = peg$parse___();\n                        if (s10 !== peg$FAILED) {\n                          s11 = peg$parseExpressionString();\n                          if (s11 !== peg$FAILED) {\n                            peg$savedPos = s0;\n                            s1 = peg$c44(s3, s7, s11);\n                            s0 = s1;\n                          } else {\n                            peg$currPos = s0;\n                            s0 = peg$FAILED;\n                          }\n                        } else {\n                          peg$currPos = s0;\n                          s0 = peg$FAILED;\n                        }\n                      } else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                      }\n                    } else {\n                      peg$currPos = s0;\n                      s0 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 3) === peg$c38) {\n          s1 = peg$c38;\n          peg$currPos += 3;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c39); }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parse___();\n          if (s2 !== peg$FAILED) {\n            s3 = peg$parseIdentifier();\n            if (s3 !== peg$FAILED) {\n              s4 = peg$parse___();\n              if (s4 !== peg$FAILED) {\n                if (input.substr(peg$currPos, 2) === peg$c42) {\n                  s5 = peg$c42;\n                  peg$currPos += 2;\n                } else {\n                  s5 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c43); }\n                }\n                if (s5 !== peg$FAILED) {\n                  s6 = peg$parse___();\n                  if (s6 !== peg$FAILED) {\n                    s7 = peg$parseExpressionString();\n                    if (s7 !== peg$FAILED) {\n                      peg$savedPos = s0;\n                      s1 = peg$c45(s3, s7);\n                      s0 = s1;\n                    } else {\n                      peg$currPos = s0;\n                      s0 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c37); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseSwitchStatement() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 18,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 6) === peg$c46) {\n        s1 = peg$c46;\n        peg$currPos += 6;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c47); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseSwitchAssignments();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c48(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 6) === peg$c46) {\n          s1 = peg$c46;\n          peg$currPos += 6;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c47); }\n        }\n        if (s1 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c49();\n        }\n        s0 = s1;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseSwitchAssignments() {\n      var s0, s1, s2, s3, s4;\n\n      var key    = peg$currPos * 197 + 19,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseSwitchAssignment();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = [];\n          s4 = peg$parseSwitchAssignmentsTail();\n          while (s4 !== peg$FAILED) {\n            s3.push(s4);\n            s4 = peg$parseSwitchAssignmentsTail();\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c50(s1, s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseSwitchAssignmentsTail() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 20,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 44) {\n        s1 = peg$c40;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c41); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseSwitchAssignment();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c51(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseSwitchAssignment() {\n      var s0, s1, s2, s3, s4, s5;\n\n      var key    = peg$currPos * 197 + 21,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseIdentifier();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 61) {\n            s3 = peg$c52;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c53); }\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse__();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parseExpressionString();\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c54(s1, s5);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = peg$parseExpressionString();\n        if (s1 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c55(s1);\n        }\n        s0 = s1;\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          s1 = peg$parseVariableReference();\n          if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c56(s1);\n          }\n          s0 = s1;\n          if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            if (input.charCodeAt(peg$currPos) === 64) {\n              s1 = peg$c12;\n              peg$currPos++;\n            } else {\n              s1 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c13); }\n            }\n            if (s1 !== peg$FAILED) {\n              s2 = peg$parseVariableReference();\n              if (s2 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c57(s2);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n            if (s0 === peg$FAILED) {\n              s0 = peg$currPos;\n              if (input.substr(peg$currPos, 7) === peg$c58) {\n                s1 = peg$c58;\n                peg$currPos += 7;\n              } else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c59); }\n              }\n              if (s1 !== peg$FAILED) {\n                s2 = peg$parseVariableReference();\n                if (s2 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s1 = peg$c60(s2);\n                  s0 = s1;\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n              if (s0 === peg$FAILED) {\n                s0 = peg$currPos;\n                s1 = peg$parseSlotVariableReference();\n                if (s1 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s1 = peg$c61(s1);\n                }\n                s0 = s1;\n              }\n            }\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseSwitchCaseStatement() {\n      var s0;\n\n      var key    = peg$currPos * 197 + 22,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$parseSwitchCaseRegex();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseSwitchCaseComparison();\n        if (s0 === peg$FAILED) {\n          s0 = peg$parseSwitchCaseExpression();\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseSwitchCaseRegex() {\n      var s0, s1, s2, s3, s4, s5;\n\n      var key    = peg$currPos * 197 + 23,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 5) === peg$c62) {\n        s1 = peg$c62;\n        peg$currPos += 5;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c63); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseRegexLiteral();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse___();\n            if (s4 !== peg$FAILED) {\n              if (input.substr(peg$currPos, 4) === peg$c64) {\n                s5 = peg$c64;\n                peg$currPos += 4;\n              } else {\n                s5 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c65); }\n              }\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c66(s3);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseSwitchCaseComparison() {\n      var s0, s1, s2, s3, s4, s5;\n\n      var key    = peg$currPos * 197 + 24,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseSwitchCompareOperator();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseExpressionString();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse___();\n            if (s4 !== peg$FAILED) {\n              if (input.substr(peg$currPos, 4) === peg$c64) {\n                s5 = peg$c64;\n                peg$currPos += 4;\n              } else {\n                s5 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c65); }\n              }\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c67(s1, s3);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseSwitchCaseExpression() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 25,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseExpressionString();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          if (input.substr(peg$currPos, 4) === peg$c64) {\n            s3 = peg$c64;\n            peg$currPos += 4;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c65); }\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c68(s1);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseSwitchCompareOperator() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 26,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      if (input.substr(peg$currPos, 2) === peg$c70) {\n        s0 = peg$c70;\n        peg$currPos += 2;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c71); }\n      }\n      if (s0 === peg$FAILED) {\n        if (input.substr(peg$currPos, 2) === peg$c72) {\n          s0 = peg$c72;\n          peg$currPos += 2;\n        } else {\n          s0 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c73); }\n        }\n        if (s0 === peg$FAILED) {\n          if (input.substr(peg$currPos, 2) === peg$c74) {\n            s0 = peg$c74;\n            peg$currPos += 2;\n          } else {\n            s0 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c75); }\n          }\n          if (s0 === peg$FAILED) {\n            if (input.substr(peg$currPos, 2) === peg$c76) {\n              s0 = peg$c76;\n              peg$currPos += 2;\n            } else {\n              s0 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c77); }\n            }\n            if (s0 === peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 60) {\n                s0 = peg$c78;\n                peg$currPos++;\n              } else {\n                s0 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c79); }\n              }\n              if (s0 === peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 62) {\n                  s0 = peg$c80;\n                  peg$currPos++;\n                } else {\n                  s0 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c81); }\n                }\n              }\n            }\n          }\n        }\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c69); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseRegexLiteral() {\n      var s0, s1, s2, s3, s4, s5, s6;\n\n      var key    = peg$currPos * 197 + 27,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 47) {\n        s1 = peg$c82;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c83); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$currPos;\n        s3 = [];\n        s4 = peg$parseRegexLiteralCharacter();\n        if (s4 !== peg$FAILED) {\n          while (s4 !== peg$FAILED) {\n            s3.push(s4);\n            s4 = peg$parseRegexLiteralCharacter();\n          }\n        } else {\n          s3 = peg$FAILED;\n        }\n        if (s3 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 47) {\n            s4 = peg$c82;\n            peg$currPos++;\n          } else {\n            s4 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c83); }\n          }\n          if (s4 !== peg$FAILED) {\n            s5 = [];\n            if (peg$c84.test(input.charAt(peg$currPos))) {\n              s6 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s6 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c85); }\n            }\n            while (s6 !== peg$FAILED) {\n              s5.push(s6);\n              if (peg$c84.test(input.charAt(peg$currPos))) {\n                s6 = input.charAt(peg$currPos);\n                peg$currPos++;\n              } else {\n                s6 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c85); }\n              }\n            }\n            if (s5 !== peg$FAILED) {\n              s3 = [s3, s4, s5];\n              s2 = s3;\n            } else {\n              peg$currPos = s2;\n              s2 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s2;\n            s2 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s2;\n          s2 = peg$FAILED;\n        }\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c86();\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseRegexLiteralCharacter() {\n      var s0, s1, s2;\n\n      var key    = peg$currPos * 197 + 28,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      if (peg$c87.test(input.charAt(peg$currPos))) {\n        s0 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c88); }\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 92) {\n          s1 = peg$c89;\n          peg$currPos++;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c90); }\n        }\n        if (s1 !== peg$FAILED) {\n          if (peg$c91.test(input.charAt(peg$currPos))) {\n            s2 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c92); }\n          }\n          if (s2 !== peg$FAILED) {\n            s1 = [s1, s2];\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseSayStatement() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 29,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 3) === peg$c93) {\n        s1 = peg$c93;\n        peg$currPos += 3;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c94); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseSayString();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c95(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseRepromptStatement() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 30,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 8) === peg$c96) {\n        s1 = peg$c96;\n        peg$currPos += 8;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c97); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseSayString();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c98(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseSayRepromptStatement() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 31,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 12) === peg$c99) {\n        s1 = peg$c99;\n        peg$currPos += 12;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c100); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseSayString();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c101(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseSoundEffectStatement() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 32,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 11) === peg$c102) {\n        s1 = peg$c102;\n        peg$currPos += 11;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c103); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseAssetName();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c104(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 11) === peg$c102) {\n          s1 = peg$c102;\n          peg$currPos += 11;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c103); }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parse___();\n          if (s2 !== peg$FAILED) {\n            s3 = peg$parseAssetURL();\n            if (s3 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c104(s3);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.substr(peg$currPos, 11) === peg$c102) {\n            s1 = peg$c102;\n            peg$currPos += 11;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c103); }\n          }\n          if (s1 !== peg$FAILED) {\n            s2 = peg$parse___();\n            if (s2 !== peg$FAILED) {\n              s3 = peg$parseAssetSoundBank();\n              if (s3 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c104(s3);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parsePlayMusicStatement() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 33,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 9) === peg$c105) {\n        s1 = peg$c105;\n        peg$currPos += 9;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c106); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseAssetName();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c107(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 9) === peg$c105) {\n          s1 = peg$c105;\n          peg$currPos += 9;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c106); }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parse___();\n          if (s2 !== peg$FAILED) {\n            s3 = peg$parseAssetURL();\n            if (s3 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c108(s3);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseStopMusicStatement() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 34,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 9) === peg$c109) {\n        s1 = peg$c109;\n        peg$currPos += 9;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c110); }\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c111();\n      }\n      s0 = s1;\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parsePronounceStatement() {\n      var s0, s1, s2, s3, s4, s5, s6, s7;\n\n      var key    = peg$currPos * 197 + 35,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 9) === peg$c112) {\n        s1 = peg$c112;\n        peg$currPos += 9;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c113); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseQuotedString();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse___();\n            if (s4 !== peg$FAILED) {\n              if (input.substr(peg$currPos, 2) === peg$c14) {\n                s5 = peg$c14;\n                peg$currPos += 2;\n              } else {\n                s5 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c15); }\n              }\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parse___();\n                if (s6 !== peg$FAILED) {\n                  s7 = peg$parseQuotedString();\n                  if (s7 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c114(s3, s7);\n                    s0 = s1;\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseCardStatement() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11;\n\n      var key    = peg$currPos * 197 + 36,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 4) === peg$c115) {\n        s1 = peg$c115;\n        peg$currPos += 4;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c116); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseScreenString();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse__();\n            if (s4 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 44) {\n                s5 = peg$c40;\n                peg$currPos++;\n              } else {\n                s5 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c41); }\n              }\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parse__();\n                if (s6 !== peg$FAILED) {\n                  s7 = peg$parseCardImageReference();\n                  if (s7 !== peg$FAILED) {\n                    s8 = peg$parse__();\n                    if (s8 !== peg$FAILED) {\n                      if (input.charCodeAt(peg$currPos) === 44) {\n                        s9 = peg$c40;\n                        peg$currPos++;\n                      } else {\n                        s9 = peg$FAILED;\n                        if (peg$silentFails === 0) { peg$fail(peg$c41); }\n                      }\n                      if (s9 !== peg$FAILED) {\n                        s10 = peg$parse__();\n                        if (s10 !== peg$FAILED) {\n                          s11 = peg$parseScreenString();\n                          if (s11 !== peg$FAILED) {\n                            peg$savedPos = s0;\n                            s1 = peg$c117(s3, s7, s11);\n                            s0 = s1;\n                          } else {\n                            peg$currPos = s0;\n                            s0 = peg$FAILED;\n                          }\n                        } else {\n                          peg$currPos = s0;\n                          s0 = peg$FAILED;\n                        }\n                      } else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                      }\n                    } else {\n                      peg$currPos = s0;\n                      s0 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 4) === peg$c115) {\n          s1 = peg$c115;\n          peg$currPos += 4;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c116); }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parse___();\n          if (s2 !== peg$FAILED) {\n            s3 = peg$parseScreenString();\n            if (s3 !== peg$FAILED) {\n              s4 = peg$parse__();\n              if (s4 !== peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 44) {\n                  s5 = peg$c40;\n                  peg$currPos++;\n                } else {\n                  s5 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c41); }\n                }\n                if (s5 !== peg$FAILED) {\n                  s6 = peg$parse__();\n                  if (s6 !== peg$FAILED) {\n                    s7 = peg$parseCardImageReference();\n                    if (s7 !== peg$FAILED) {\n                      peg$savedPos = s0;\n                      s1 = peg$c118(s3, s7);\n                      s0 = s1;\n                    } else {\n                      peg$currPos = s0;\n                      s0 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.substr(peg$currPos, 4) === peg$c115) {\n            s1 = peg$c115;\n            peg$currPos += 4;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c116); }\n          }\n          if (s1 !== peg$FAILED) {\n            s2 = peg$parse___();\n            if (s2 !== peg$FAILED) {\n              s3 = peg$parseScreenString();\n              if (s3 !== peg$FAILED) {\n                s4 = peg$parse__();\n                if (s4 !== peg$FAILED) {\n                  if (input.charCodeAt(peg$currPos) === 44) {\n                    s5 = peg$c40;\n                    peg$currPos++;\n                  } else {\n                    s5 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$c41); }\n                  }\n                  if (s5 !== peg$FAILED) {\n                    s6 = peg$parse__();\n                    if (s6 !== peg$FAILED) {\n                      s7 = peg$parseScreenString();\n                      if (s7 !== peg$FAILED) {\n                        peg$savedPos = s0;\n                        s1 = peg$c119(s3, s7);\n                        s0 = s1;\n                      } else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                      }\n                    } else {\n                      peg$currPos = s0;\n                      s0 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n          if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            if (input.substr(peg$currPos, 4) === peg$c115) {\n              s1 = peg$c115;\n              peg$currPos += 4;\n            } else {\n              s1 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c116); }\n            }\n            if (s1 !== peg$FAILED) {\n              s2 = peg$parse___();\n              if (s2 !== peg$FAILED) {\n                s3 = peg$parseScreenString();\n                if (s3 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s1 = peg$c120(s3);\n                  s0 = s1;\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n            if (s0 === peg$FAILED) {\n              s0 = peg$currPos;\n              if (input.substr(peg$currPos, 4) === peg$c115) {\n                s1 = peg$c115;\n                peg$currPos += 4;\n              } else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c116); }\n              }\n              if (s1 !== peg$FAILED) {\n                s2 = peg$parse___();\n                if (s2 !== peg$FAILED) {\n                  s3 = peg$parseCardImageReference();\n                  if (s3 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c121(s3);\n                    s0 = s1;\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            }\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseCardImageReference() {\n      var s0;\n\n      var key    = peg$currPos * 197 + 37,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$parseAssetURL();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseAssetName();\n        if (s0 === peg$FAILED) {\n          s0 = peg$parseVariableReference();\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseScreenImageReference() {\n      var s0;\n\n      var key    = peg$currPos * 197 + 38,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$parseAssetURL();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseAssetName();\n        if (s0 === peg$FAILED) {\n          s0 = peg$parseVariableReference();\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseDirectiveStatement() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 39,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 9) === peg$c122) {\n        s1 = peg$c122;\n        peg$currPos += 9;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c123); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseExpressionString();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c124(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseMetricStatement() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 40,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 6) === peg$c125) {\n        s1 = peg$c125;\n        peg$currPos += 6;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c126); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseMetricName();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c127(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseMetricName() {\n      var s0, s1, s2;\n\n      var key    = peg$currPos * 197 + 41,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = [];\n      if (peg$c128.test(input.charAt(peg$currPos))) {\n        s2 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s2 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c129); }\n      }\n      if (s2 === peg$FAILED) {\n        if (peg$c130.test(input.charAt(peg$currPos))) {\n          s2 = input.charAt(peg$currPos);\n          peg$currPos++;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c131); }\n        }\n        if (s2 === peg$FAILED) {\n          if (peg$c132.test(input.charAt(peg$currPos))) {\n            s2 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c133); }\n          }\n          if (s2 === peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 45) {\n              s2 = peg$c134;\n              peg$currPos++;\n            } else {\n              s2 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c135); }\n            }\n          }\n        }\n      }\n      if (s2 !== peg$FAILED) {\n        while (s2 !== peg$FAILED) {\n          s1.push(s2);\n          if (peg$c128.test(input.charAt(peg$currPos))) {\n            s2 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c129); }\n          }\n          if (s2 === peg$FAILED) {\n            if (peg$c130.test(input.charAt(peg$currPos))) {\n              s2 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s2 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c131); }\n            }\n            if (s2 === peg$FAILED) {\n              if (peg$c132.test(input.charAt(peg$currPos))) {\n                s2 = input.charAt(peg$currPos);\n                peg$currPos++;\n              } else {\n                s2 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c133); }\n              }\n              if (s2 === peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 45) {\n                  s2 = peg$c134;\n                  peg$currPos++;\n                } else {\n                  s2 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c135); }\n                }\n              }\n            }\n          }\n        }\n      } else {\n        s1 = peg$FAILED;\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c136();\n      }\n      s0 = s1;\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseResponseSpacingStatement() {\n      var s0, s1, s2, s3, s4, s5;\n\n      var key    = peg$currPos * 197 + 42,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 18) === peg$c137) {\n        s1 = peg$c137;\n        peg$currPos += 18;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c138); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 61) {\n            s3 = peg$c52;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c53); }\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse__();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parseInteger();\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c139(s5);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseAttributeStatement() {\n      var s0, s1, s2, s3, s4, s5, s6, s7;\n\n      var key    = peg$currPos * 197 + 43,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 7) === peg$c140) {\n        s1 = peg$c140;\n        peg$currPos += 7;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c141); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 58) {\n            s3 = peg$c142;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c143); }\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse__();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parseQuotedString();\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c144(s1, s5);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = peg$parseExistingIdentifier();\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parse__();\n          if (s2 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 58) {\n              s3 = peg$c142;\n              peg$currPos++;\n            } else {\n              s3 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c143); }\n            }\n            if (s3 !== peg$FAILED) {\n              s4 = peg$parse__();\n              if (s4 !== peg$FAILED) {\n                s5 = peg$parseNumber();\n                if (s5 === peg$FAILED) {\n                  s5 = peg$parseAssetURL();\n                  if (s5 === peg$FAILED) {\n                    s5 = peg$parseJsonFileName();\n                    if (s5 === peg$FAILED) {\n                      s5 = peg$parseAssetName();\n                      if (s5 === peg$FAILED) {\n                        s5 = peg$parseBooleanLiteral();\n                        if (s5 === peg$FAILED) {\n                          s5 = peg$parseScreenString();\n                          if (s5 === peg$FAILED) {\n                            s5 = peg$parseQuotedString();\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n                if (s5 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s1 = peg$c145(s1, s5);\n                  s0 = s1;\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          s1 = peg$parseExistingIdentifier();\n          if (s1 !== peg$FAILED) {\n            s2 = peg$parse__();\n            if (s2 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 58) {\n                s3 = peg$c142;\n                peg$currPos++;\n              } else {\n                s3 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c143); }\n              }\n              if (s3 !== peg$FAILED) {\n                s4 = peg$parse__();\n                if (s4 !== peg$FAILED) {\n                  s5 = peg$parseVariableReference();\n                  if (s5 !== peg$FAILED) {\n                    s6 = peg$currPos;\n                    peg$silentFails++;\n                    if (input.charCodeAt(peg$currPos) === 40) {\n                      s7 = peg$c146;\n                      peg$currPos++;\n                    } else {\n                      s7 = peg$FAILED;\n                      if (peg$silentFails === 0) { peg$fail(peg$c147); }\n                    }\n                    if (s7 === peg$FAILED) {\n                      if (input.charCodeAt(peg$currPos) === 46) {\n                        s7 = peg$c148;\n                        peg$currPos++;\n                      } else {\n                        s7 = peg$FAILED;\n                        if (peg$silentFails === 0) { peg$fail(peg$c149); }\n                      }\n                    }\n                    peg$silentFails--;\n                    if (s7 === peg$FAILED) {\n                      s6 = void 0;\n                    } else {\n                      peg$currPos = s6;\n                      s6 = peg$FAILED;\n                    }\n                    if (s6 !== peg$FAILED) {\n                      peg$savedPos = s0;\n                      s1 = peg$c150(s1, s5);\n                      s0 = s1;\n                    } else {\n                      peg$currPos = s0;\n                      s0 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n          if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            s1 = peg$parseExistingIdentifier();\n            if (s1 !== peg$FAILED) {\n              s2 = peg$parse__();\n              if (s2 !== peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 58) {\n                  s3 = peg$c142;\n                  peg$currPos++;\n                } else {\n                  s3 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c143); }\n                }\n                if (s3 !== peg$FAILED) {\n                  s4 = peg$parse__();\n                  if (s4 !== peg$FAILED) {\n                    s5 = peg$parseExpressionString();\n                    if (s5 !== peg$FAILED) {\n                      peg$savedPos = s0;\n                      s1 = peg$c145(s1, s5);\n                      s0 = s1;\n                    } else {\n                      peg$currPos = s0;\n                      s0 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseIntentStatement() {\n      var s0, s1, s2, s3, s4, s5, s6, s7;\n\n      var key    = peg$currPos * 197 + 44,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 4) === peg$c151) {\n        s1 = peg$c151;\n        peg$currPos += 4;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c152); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$currPos;\n          peg$silentFails++;\n          if (peg$c153.test(input.charAt(peg$currPos))) {\n            s4 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s4 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c154); }\n          }\n          peg$silentFails--;\n          if (s4 === peg$FAILED) {\n            s3 = void 0;\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c155();\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 4) === peg$c151) {\n          s1 = peg$c151;\n          peg$currPos += 4;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c152); }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parse___();\n          if (s2 !== peg$FAILED) {\n            if (input.substr(peg$currPos, 20) === peg$c156) {\n              s3 = peg$c156;\n              peg$currPos += 20;\n            } else {\n              s3 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c157); }\n            }\n            if (s3 !== peg$FAILED) {\n              s4 = peg$parse___();\n              if (s4 !== peg$FAILED) {\n                s5 = peg$parseQuotedString();\n                if (s5 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s1 = peg$c158(s5);\n                  s0 = s1;\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.substr(peg$currPos, 4) === peg$c151) {\n            s1 = peg$c151;\n            peg$currPos += 4;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c152); }\n          }\n          if (s1 !== peg$FAILED) {\n            s2 = peg$parse___();\n            if (s2 !== peg$FAILED) {\n              if (input.substr(peg$currPos, 20) === peg$c156) {\n                s3 = peg$c156;\n                peg$currPos += 20;\n              } else {\n                s3 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c157); }\n              }\n              if (s3 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c159();\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n          if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            if (input.substr(peg$currPos, 4) === peg$c151) {\n              s1 = peg$c151;\n              peg$currPos += 4;\n            } else {\n              s1 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c152); }\n            }\n            if (s1 !== peg$FAILED) {\n              s2 = peg$parse___();\n              if (s2 !== peg$FAILED) {\n                s3 = peg$parseUtteranceString();\n                if (s3 === peg$FAILED) {\n                  s3 = peg$parseDottedIdentifier();\n                }\n                if (s3 !== peg$FAILED) {\n                  s4 = peg$parse___();\n                  if (s4 !== peg$FAILED) {\n                    if (input.substr(peg$currPos, 2) === peg$c24) {\n                      s5 = peg$c24;\n                      peg$currPos += 2;\n                    } else {\n                      s5 = peg$FAILED;\n                      if (peg$silentFails === 0) { peg$fail(peg$c25); }\n                    }\n                    if (s5 === peg$FAILED) {\n                      if (input.substr(peg$currPos, 6) === peg$c26) {\n                        s5 = peg$c26;\n                        peg$currPos += 6;\n                      } else {\n                        s5 = peg$FAILED;\n                        if (peg$silentFails === 0) { peg$fail(peg$c27); }\n                      }\n                    }\n                    if (s5 !== peg$FAILED) {\n                      s6 = peg$parse___();\n                      if (s6 !== peg$FAILED) {\n                        s7 = peg$parseExpressionString();\n                        if (s7 !== peg$FAILED) {\n                          peg$savedPos = s0;\n                          s1 = peg$c160(s3, s5, s7);\n                          s0 = s1;\n                        } else {\n                          peg$currPos = s0;\n                          s0 = peg$FAILED;\n                        }\n                      } else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                      }\n                    } else {\n                      peg$currPos = s0;\n                      s0 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n            if (s0 === peg$FAILED) {\n              s0 = peg$currPos;\n              if (input.substr(peg$currPos, 4) === peg$c151) {\n                s1 = peg$c151;\n                peg$currPos += 4;\n              } else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c152); }\n              }\n              if (s1 !== peg$FAILED) {\n                s2 = peg$parse___();\n                if (s2 !== peg$FAILED) {\n                  s3 = peg$parseUtteranceString();\n                  if (s3 === peg$FAILED) {\n                    s3 = peg$parseDottedIdentifier();\n                  }\n                  if (s3 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c161(s3);\n                    s0 = s1;\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            }\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseAlternativeStatement() {\n      var s0, s1, s2, s3, s4, s5;\n\n      var key    = peg$currPos * 197 + 45,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 2) === peg$c162) {\n        s1 = peg$c162;\n        peg$currPos += 2;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c163); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 34) {\n            s3 = peg$c164;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c165); }\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parseSayStringContents();\n            if (s4 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 34) {\n                s5 = peg$c164;\n                peg$currPos++;\n              } else {\n                s5 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c165); }\n              }\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c166(s4);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 2) === peg$c162) {\n          s1 = peg$c162;\n          peg$currPos += 2;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c163); }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parse___();\n          if (s2 !== peg$FAILED) {\n            s3 = peg$parseUtteranceString();\n            if (s3 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c167(s3);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.substr(peg$currPos, 2) === peg$c162) {\n            s1 = peg$c162;\n            peg$currPos += 2;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c163); }\n          }\n          if (s1 !== peg$FAILED) {\n            s2 = peg$parse___();\n            if (s2 !== peg$FAILED) {\n              s3 = peg$parseAssetName();\n              if (s3 === peg$FAILED) {\n                s3 = peg$parseDottedIdentifier();\n              }\n              if (s3 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c168(s3);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseSlotTypeStatement() {\n      var s0, s1, s2, s3, s4, s5, s6, s7;\n\n      var key    = peg$currPos * 197 + 46,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 4) === peg$c169) {\n        s1 = peg$c169;\n        peg$currPos += 4;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c170); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseSlotVariableReference();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse__();\n            if (s4 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 61) {\n                s5 = peg$c52;\n                peg$currPos++;\n              } else {\n                s5 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c53); }\n              }\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parse__();\n                if (s6 !== peg$FAILED) {\n                  s7 = peg$parseFileFunctionReference();\n                  if (s7 === peg$FAILED) {\n                    s7 = peg$parseDottedIdentifier();\n                    if (s7 === peg$FAILED) {\n                      s7 = peg$parseStringLiteralList();\n                    }\n                  }\n                  if (s7 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c171(s3, s7);\n                    s0 = s1;\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseOtherwiseStatement() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 47,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 9) === peg$c172) {\n        s1 = peg$c172;\n        peg$currPos += 9;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c173); }\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c174();\n      }\n      s0 = s1;\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseDatabaseAssignmentStatement() {\n      var s0, s1, s2, s3, s4, s5, s6;\n\n      var key    = peg$currPos * 197 + 48,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 64) {\n        s1 = peg$c12;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c13); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseVariableReference();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parse__();\n          if (s3 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 61) {\n              s4 = peg$c52;\n              peg$currPos++;\n            } else {\n              s4 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c53); }\n            }\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parse__();\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parseExpressionString();\n                if (s6 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s1 = peg$c175(s2, s6);\n                  s0 = s1;\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseLocalVariableStatement() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;\n\n      var key    = peg$currPos * 197 + 49,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 5) === peg$c176) {\n        s1 = peg$c176;\n        peg$currPos += 5;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c177); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseIdentifier();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse__();\n            if (s4 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 61) {\n                s5 = peg$c52;\n                peg$currPos++;\n              } else {\n                s5 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c53); }\n              }\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parse__();\n                if (s6 !== peg$FAILED) {\n                  if (input.charCodeAt(peg$currPos) === 64) {\n                    s7 = peg$c12;\n                    peg$currPos++;\n                  } else {\n                    s7 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$c13); }\n                  }\n                  if (s7 !== peg$FAILED) {\n                    s8 = peg$parseDottedIdentifier();\n                    if (s8 !== peg$FAILED) {\n                      s9 = peg$parse___();\n                      if (s9 !== peg$FAILED) {\n                        if (input.substr(peg$currPos, 2) === peg$c14) {\n                          s10 = peg$c14;\n                          peg$currPos += 2;\n                        } else {\n                          s10 = peg$FAILED;\n                          if (peg$silentFails === 0) { peg$fail(peg$c15); }\n                        }\n                        if (s10 !== peg$FAILED) {\n                          s11 = peg$parse___();\n                          if (s11 !== peg$FAILED) {\n                            s12 = peg$parseIdentifier();\n                            if (s12 !== peg$FAILED) {\n                              peg$savedPos = s0;\n                              s1 = peg$c178(s3, s8, s12);\n                              s0 = s1;\n                            } else {\n                              peg$currPos = s0;\n                              s0 = peg$FAILED;\n                            }\n                          } else {\n                            peg$currPos = s0;\n                            s0 = peg$FAILED;\n                          }\n                        } else {\n                          peg$currPos = s0;\n                          s0 = peg$FAILED;\n                        }\n                      } else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                      }\n                    } else {\n                      peg$currPos = s0;\n                      s0 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 5) === peg$c176) {\n          s1 = peg$c176;\n          peg$currPos += 5;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c177); }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parse___();\n          if (s2 !== peg$FAILED) {\n            s3 = peg$parseIdentifier();\n            if (s3 !== peg$FAILED) {\n              s4 = peg$parse__();\n              if (s4 !== peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 61) {\n                  s5 = peg$c52;\n                  peg$currPos++;\n                } else {\n                  s5 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c53); }\n                }\n                if (s5 !== peg$FAILED) {\n                  s6 = peg$parse__();\n                  if (s6 !== peg$FAILED) {\n                    s7 = peg$parseExpressionString();\n                    if (s7 !== peg$FAILED) {\n                      peg$savedPos = s0;\n                      s1 = peg$c179(s3, s7);\n                      s0 = s1;\n                    } else {\n                      peg$currPos = s0;\n                      s0 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.substr(peg$currPos, 5) === peg$c176) {\n            s1 = peg$c176;\n            peg$currPos += 5;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c177); }\n          }\n          if (s1 !== peg$FAILED) {\n            s2 = peg$parse___();\n            if (s2 !== peg$FAILED) {\n              s3 = peg$parseIdentifier();\n              if (s3 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c180(s3);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseLocalVariableAssignmentStatement() {\n      var s0, s1, s2, s3, s4, s5;\n\n      var key    = peg$currPos * 197 + 50,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseExistingIdentifier();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 61) {\n            s3 = peg$c52;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c53); }\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse__();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parseExpressionString();\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c181(s1, s5);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseSlotVariableAssignmentStatement() {\n      var s0, s1, s2, s3, s4, s5, s6;\n\n      var key    = peg$currPos * 197 + 51,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 36) {\n        s1 = peg$c182;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c183); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseVariableReference();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parse__();\n          if (s3 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 61) {\n              s4 = peg$c52;\n              peg$currPos++;\n            } else {\n              s4 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c53); }\n            }\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parse__();\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parseExpressionString();\n                if (s6 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s1 = peg$c184(s2, s6);\n                  s0 = s1;\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseBuyInSkillProductStatement() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 52,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 17) === peg$c185) {\n        s1 = peg$c185;\n        peg$currPos += 17;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c186); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseQuotedString();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c187(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseCancelInSkillProductStatement() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 53,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 20) === peg$c188) {\n        s1 = peg$c188;\n        peg$currPos += 20;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c189); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseQuotedString();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c190(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseUpsellInSkillProductStatement() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 54,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 20) === peg$c191) {\n        s1 = peg$c191;\n        peg$currPos += 20;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c192); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseQuotedString();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c193(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseCommentStatement() {\n      var s0, s1, s2, s3, s4, s5, s6;\n\n      var key    = peg$currPos * 197 + 55,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 35) {\n        s1 = peg$c194;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c195); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$currPos;\n        s3 = [];\n        s4 = peg$currPos;\n        s5 = peg$currPos;\n        peg$silentFails++;\n        s6 = peg$parseEndOfStatementSequence();\n        peg$silentFails--;\n        if (s6 === peg$FAILED) {\n          s5 = void 0;\n        } else {\n          peg$currPos = s5;\n          s5 = peg$FAILED;\n        }\n        if (s5 !== peg$FAILED) {\n          if (input.length > peg$currPos) {\n            s6 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s6 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c20); }\n          }\n          if (s6 !== peg$FAILED) {\n            s5 = [s5, s6];\n            s4 = s5;\n          } else {\n            peg$currPos = s4;\n            s4 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s4;\n          s4 = peg$FAILED;\n        }\n        while (s4 !== peg$FAILED) {\n          s3.push(s4);\n          s4 = peg$currPos;\n          s5 = peg$currPos;\n          peg$silentFails++;\n          s6 = peg$parseEndOfStatementSequence();\n          peg$silentFails--;\n          if (s6 === peg$FAILED) {\n            s5 = void 0;\n          } else {\n            peg$currPos = s5;\n            s5 = peg$FAILED;\n          }\n          if (s5 !== peg$FAILED) {\n            if (input.length > peg$currPos) {\n              s6 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s6 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c20); }\n            }\n            if (s6 !== peg$FAILED) {\n              s5 = [s5, s6];\n              s4 = s5;\n            } else {\n              peg$currPos = s4;\n              s4 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s4;\n            s4 = peg$FAILED;\n          }\n        }\n        if (s3 !== peg$FAILED) {\n          s2 = input.substring(s2, peg$currPos);\n        } else {\n          s2 = s3;\n        }\n        if (s2 !== peg$FAILED) {\n          s1 = [s1, s2];\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseLogStatement() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 56,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 3) === peg$c196) {\n        s1 = peg$c196;\n        peg$currPos += 3;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c197); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseExpressionString();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c198(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseEndStatement() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 57,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 3) === peg$c199) {\n        s1 = peg$c199;\n        peg$currPos += 3;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c200); }\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c201();\n      }\n      s0 = s1;\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseListenStatement() {\n      var s0, s1, s2, s3, s4, s5, s6;\n\n      var key    = peg$currPos * 197 + 58,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 6) === peg$c202) {\n        s1 = peg$c202;\n        peg$currPos += 6;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c203); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseListenKind();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse__();\n            if (s4 !== peg$FAILED) {\n              s5 = [];\n              s6 = peg$parseListenStatementTail();\n              while (s6 !== peg$FAILED) {\n                s5.push(s6);\n                s6 = peg$parseListenStatementTail();\n              }\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c204(s3, s5);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 6) === peg$c202) {\n          s1 = peg$c202;\n          peg$currPos += 6;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c203); }\n        }\n        if (s1 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c205();\n        }\n        s0 = s1;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseListenStatementTail() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 59,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 44) {\n        s1 = peg$c40;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c41); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseListenKind();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c206(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseListenKind() {\n      var s0;\n\n      var key    = peg$currPos * 197 + 60,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      if (input.substr(peg$currPos, 6) === peg$c207) {\n        s0 = peg$c207;\n        peg$currPos += 6;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c208); }\n      }\n      if (s0 === peg$FAILED) {\n        if (input.substr(peg$currPos, 10) === peg$c209) {\n          s0 = peg$c209;\n          peg$currPos += 10;\n        } else {\n          s0 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c210); }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseGotoStatement() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 61,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 2) === peg$c211) {\n        s1 = peg$c211;\n        peg$currPos += 2;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c212); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseIdentifier();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c213(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseStopAndGotoStatement() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 62,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 3) === peg$c214) {\n        s1 = peg$c214;\n        peg$currPos += 3;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c215); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseIdentifier();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c216(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseHandoffStatement() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 63,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 3) === peg$c217) {\n        s1 = peg$c217;\n        peg$currPos += 3;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c218); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseIdentifier();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c219(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseSettingStatement() {\n      var s0, s1, s2, s3, s4, s5, s6, s7;\n\n      var key    = peg$currPos * 197 + 64,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 3) === peg$c220) {\n        s1 = peg$c220;\n        peg$currPos += 3;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c221); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseIdentifier();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse__();\n            if (s4 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 61) {\n                s5 = peg$c52;\n                peg$currPos++;\n              } else {\n                s5 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c53); }\n              }\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parse__();\n                if (s6 !== peg$FAILED) {\n                  if (input.substr(peg$currPos, 4) === peg$c222) {\n                    s7 = peg$c222;\n                    peg$currPos += 4;\n                  } else {\n                    s7 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$c223); }\n                  }\n                  if (s7 === peg$FAILED) {\n                    if (input.substr(peg$currPos, 5) === peg$c224) {\n                      s7 = peg$c224;\n                      peg$currPos += 5;\n                    } else {\n                      s7 = peg$FAILED;\n                      if (peg$silentFails === 0) { peg$fail(peg$c225); }\n                    }\n                  }\n                  if (s7 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c226(s3, s7);\n                    s0 = s1;\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseNewTestStatement() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 65,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 4) === peg$c227) {\n        s1 = peg$c227;\n        peg$currPos += 4;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c228); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseQuotedString();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c229(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTestWaitStatement() {\n      var s0, s1, s2, s3, s4, s5;\n\n      var key    = peg$currPos * 197 + 66,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 4) === peg$c230) {\n        s1 = peg$c230;\n        peg$currPos += 4;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c231); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseInteger();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse___();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parseTimeUnit();\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c232(s3, s5);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTimeUnit() {\n      var s0, s1, s2;\n\n      var key    = peg$currPos * 197 + 67,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 6) === peg$c233) {\n        s1 = peg$c233;\n        peg$currPos += 6;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c234); }\n      }\n      if (s1 === peg$FAILED) {\n        if (input.substr(peg$currPos, 6) === peg$c235) {\n          s1 = peg$c235;\n          peg$currPos += 6;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c236); }\n        }\n        if (s1 === peg$FAILED) {\n          if (input.substr(peg$currPos, 4) === peg$c237) {\n            s1 = peg$c237;\n            peg$currPos += 4;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c238); }\n          }\n          if (s1 === peg$FAILED) {\n            if (input.substr(peg$currPos, 3) === peg$c239) {\n              s1 = peg$c239;\n              peg$currPos += 3;\n            } else {\n              s1 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c240); }\n            }\n          }\n        }\n      }\n      if (s1 !== peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 115) {\n          s2 = peg$c241;\n          peg$currPos++;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c242); }\n        }\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c243(s1);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        if (input.substr(peg$currPos, 6) === peg$c233) {\n          s0 = peg$c233;\n          peg$currPos += 6;\n        } else {\n          s0 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c234); }\n        }\n        if (s0 === peg$FAILED) {\n          if (input.substr(peg$currPos, 6) === peg$c235) {\n            s0 = peg$c235;\n            peg$currPos += 6;\n          } else {\n            s0 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c236); }\n          }\n          if (s0 === peg$FAILED) {\n            if (input.substr(peg$currPos, 4) === peg$c237) {\n              s0 = peg$c237;\n              peg$currPos += 4;\n            } else {\n              s0 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c238); }\n            }\n            if (s0 === peg$FAILED) {\n              s0 = peg$currPos;\n              if (input.substr(peg$currPos, 3) === peg$c239) {\n                s1 = peg$c239;\n                peg$currPos += 3;\n              } else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c240); }\n              }\n              if (s1 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c244();\n              }\n              s0 = s1;\n            }\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTestLaunchStatement() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 68,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 6) === peg$c245) {\n        s1 = peg$c245;\n        peg$currPos += 6;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c246); }\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c247();\n      }\n      s0 = s1;\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTestQuitStatement() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 69,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 4) === peg$c248) {\n        s1 = peg$c248;\n        peg$currPos += 4;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c249); }\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c250();\n      }\n      s0 = s1;\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTestListenStatement() {\n      var s0, s1, s2, s3, s4, s5, s6;\n\n      var key    = peg$currPos * 197 + 70,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 6) === peg$c202) {\n        s1 = peg$c202;\n        peg$currPos += 6;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c203); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseListenKind();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse__();\n            if (s4 !== peg$FAILED) {\n              s5 = [];\n              s6 = peg$parseListenStatementTail();\n              while (s6 !== peg$FAILED) {\n                s5.push(s6);\n                s6 = peg$parseListenStatementTail();\n              }\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c251(s3, s5);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 6) === peg$c202) {\n          s1 = peg$c202;\n          peg$currPos += 6;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c203); }\n        }\n        if (s1 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c252();\n        }\n        s0 = s1;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTestEndStatement() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 71,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 3) === peg$c199) {\n        s1 = peg$c199;\n        peg$currPos += 3;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c200); }\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c253();\n      }\n      s0 = s1;\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTestLineUser() {\n      var s0, s1, s2, s3, s4, s5, s6, s7;\n\n      var key    = peg$currPos * 197 + 72,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 5) === peg$c254) {\n        s1 = peg$c254;\n        peg$currPos += 5;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c255); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseSayString();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse__();\n            if (s4 !== peg$FAILED) {\n              if (input.substr(peg$currPos, 4) === peg$c169) {\n                s5 = peg$c169;\n                peg$currPos += 4;\n              } else {\n                s5 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c170); }\n              }\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parse___();\n                if (s6 !== peg$FAILED) {\n                  s7 = peg$parseTestSlotVariables();\n                  if (s7 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c256(s3, s7);\n                    s0 = s1;\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 5) === peg$c254) {\n          s1 = peg$c254;\n          peg$currPos += 5;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c255); }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parse__();\n          if (s2 !== peg$FAILED) {\n            s3 = peg$parseSayString();\n            if (s3 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c257(s3);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.substr(peg$currPos, 5) === peg$c254) {\n            s1 = peg$c254;\n            peg$currPos += 5;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c255); }\n          }\n          if (s1 !== peg$FAILED) {\n            s2 = peg$parse__();\n            if (s2 !== peg$FAILED) {\n              s3 = peg$parseDottedIdentifier();\n              if (s3 !== peg$FAILED) {\n                s4 = peg$parse___();\n                if (s4 !== peg$FAILED) {\n                  if (input.substr(peg$currPos, 4) === peg$c169) {\n                    s5 = peg$c169;\n                    peg$currPos += 4;\n                  } else {\n                    s5 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$c170); }\n                  }\n                  if (s5 !== peg$FAILED) {\n                    s6 = peg$parse___();\n                    if (s6 !== peg$FAILED) {\n                      s7 = peg$parseTestSlotVariables();\n                      if (s7 !== peg$FAILED) {\n                        peg$savedPos = s0;\n                        s1 = peg$c258(s3, s7);\n                        s0 = s1;\n                      } else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                      }\n                    } else {\n                      peg$currPos = s0;\n                      s0 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n          if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            if (input.substr(peg$currPos, 5) === peg$c254) {\n              s1 = peg$c254;\n              peg$currPos += 5;\n            } else {\n              s1 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c255); }\n            }\n            if (s1 !== peg$FAILED) {\n              s2 = peg$parse__();\n              if (s2 !== peg$FAILED) {\n                s3 = peg$parseDottedIdentifier();\n                if (s3 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s1 = peg$c259(s3);\n                  s0 = s1;\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTestLineRequest() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 73,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 8) === peg$c260) {\n        s1 = peg$c260;\n        peg$currPos += 8;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c261); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseAssetName();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c262(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTestSlotVariables() {\n      var s0, s1, s2, s3, s4;\n\n      var key    = peg$currPos * 197 + 74,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseTestSlotVariable();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = [];\n          s4 = peg$parseTestSlotVariableTail();\n          while (s4 !== peg$FAILED) {\n            s3.push(s4);\n            s4 = peg$parseTestSlotVariableTail();\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c50(s1, s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTestSlotVariableTail() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 75,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 44) {\n        s1 = peg$c40;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c41); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseTestSlotVariable();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c263(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTestSlotVariable() {\n      var s0, s1, s2, s3, s4, s5, s6;\n\n      var key    = peg$currPos * 197 + 76,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 36) {\n        s1 = peg$c182;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c183); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseIdentifier();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parse__();\n          if (s3 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 61) {\n              s4 = peg$c52;\n              peg$currPos++;\n            } else {\n              s4 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c53); }\n            }\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parse__();\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parseQuotedString();\n                if (s6 === peg$FAILED) {\n                  s6 = peg$parseInteger();\n                }\n                if (s6 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s1 = peg$c264(s2, s6);\n                  s0 = s1;\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTestDirectiveStatement() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 77,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 10) === peg$c265) {\n        s1 = peg$c265;\n        peg$currPos += 10;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c266); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseDottedIdentifier();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c267(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTestLineAlexa() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n      var key    = peg$currPos * 197 + 78,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 6) === peg$c268) {\n        s1 = peg$c268;\n        peg$currPos += 6;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c269); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseIdentifier();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse__();\n            if (s4 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 44) {\n                s5 = peg$c40;\n                peg$currPos++;\n              } else {\n                s5 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c41); }\n              }\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parse__();\n                if (s6 !== peg$FAILED) {\n                  if (input.charCodeAt(peg$currPos) === 101) {\n                    s7 = peg$c270;\n                    peg$currPos++;\n                  } else {\n                    s7 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$c271); }\n                  }\n                  if (s7 !== peg$FAILED) {\n                    s8 = peg$parseQuotedString();\n                    if (s8 !== peg$FAILED) {\n                      peg$savedPos = s0;\n                      s1 = peg$c272(s3, s8);\n                      s0 = s1;\n                    } else {\n                      peg$currPos = s0;\n                      s0 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 6) === peg$c268) {\n          s1 = peg$c268;\n          peg$currPos += 6;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c269); }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parse__();\n          if (s2 !== peg$FAILED) {\n            s3 = peg$parseIdentifier();\n            if (s3 !== peg$FAILED) {\n              s4 = peg$parse__();\n              if (s4 !== peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 44) {\n                  s5 = peg$c40;\n                  peg$currPos++;\n                } else {\n                  s5 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c41); }\n                }\n                if (s5 !== peg$FAILED) {\n                  s6 = peg$parse__();\n                  if (s6 !== peg$FAILED) {\n                    s7 = peg$parseTestSaidString();\n                    if (s7 !== peg$FAILED) {\n                      peg$savedPos = s0;\n                      s1 = peg$c273(s3, s7);\n                      s0 = s1;\n                    } else {\n                      peg$currPos = s0;\n                      s0 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.substr(peg$currPos, 6) === peg$c268) {\n            s1 = peg$c268;\n            peg$currPos += 6;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c269); }\n          }\n          if (s1 !== peg$FAILED) {\n            s2 = peg$parse__();\n            if (s2 !== peg$FAILED) {\n              s3 = peg$parseIdentifier();\n              if (s3 !== peg$FAILED) {\n                s4 = peg$parse__();\n                if (s4 !== peg$FAILED) {\n                  if (input.charCodeAt(peg$currPos) === 44) {\n                    s5 = peg$c40;\n                    peg$currPos++;\n                  } else {\n                    s5 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$c41); }\n                  }\n                  if (s5 !== peg$FAILED) {\n                    s6 = peg$parse__();\n                    if (s6 !== peg$FAILED) {\n                      s7 = peg$parseRegexLiteral();\n                      if (s7 !== peg$FAILED) {\n                        peg$savedPos = s0;\n                        s1 = peg$c274(s3, s7);\n                        s0 = s1;\n                      } else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                      }\n                    } else {\n                      peg$currPos = s0;\n                      s0 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n          if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            if (input.substr(peg$currPos, 6) === peg$c268) {\n              s1 = peg$c268;\n              peg$currPos += 6;\n            } else {\n              s1 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c269); }\n            }\n            if (s1 !== peg$FAILED) {\n              s2 = peg$parse__();\n              if (s2 !== peg$FAILED) {\n                s3 = peg$parseIdentifier();\n                if (s3 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s1 = peg$c275(s3);\n                  s0 = s1;\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTestLineAlternate() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 79,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 2) === peg$c162) {\n        s1 = peg$c162;\n        peg$currPos += 2;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c163); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseQuotedString();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c276(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTestLineExpectedDB() {\n      var s0, s1, s2, s3, s4, s5, s6;\n\n      var key    = peg$currPos * 197 + 80,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 64) {\n        s1 = peg$c12;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c13); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseVariableReference();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parse__();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parseTestComparisonOp();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parse__();\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parseLineRemainder();\n                if (s6 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s1 = peg$c277(s2, s4, s6);\n                  s0 = s1;\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 64) {\n          s1 = peg$c12;\n          peg$currPos++;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c13); }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parseVariableReference();\n          if (s2 !== peg$FAILED) {\n            s3 = peg$parse__();\n            if (s3 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 61) {\n                s4 = peg$c52;\n                peg$currPos++;\n              } else {\n                s4 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c53); }\n              }\n              if (s4 !== peg$FAILED) {\n                s5 = peg$parse__();\n                if (s5 !== peg$FAILED) {\n                  s6 = peg$parseLineRemainder();\n                  if (s6 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c278(s2, s6);\n                    s0 = s1;\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTestComparisonOp() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 81,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      if (input.substr(peg$currPos, 2) === peg$c70) {\n        s0 = peg$c70;\n        peg$currPos += 2;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c71); }\n      }\n      if (s0 === peg$FAILED) {\n        if (input.substr(peg$currPos, 2) === peg$c72) {\n          s0 = peg$c72;\n          peg$currPos += 2;\n        } else {\n          s0 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c73); }\n        }\n        if (s0 === peg$FAILED) {\n          if (input.substr(peg$currPos, 2) === peg$c76) {\n            s0 = peg$c76;\n            peg$currPos += 2;\n          } else {\n            s0 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c77); }\n          }\n          if (s0 === peg$FAILED) {\n            if (input.substr(peg$currPos, 2) === peg$c74) {\n              s0 = peg$c74;\n              peg$currPos += 2;\n            } else {\n              s0 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c75); }\n            }\n            if (s0 === peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 62) {\n                s0 = peg$c80;\n                peg$currPos++;\n              } else {\n                s0 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c81); }\n              }\n              if (s0 === peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 60) {\n                  s0 = peg$c78;\n                  peg$currPos++;\n                } else {\n                  s0 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c79); }\n                }\n              }\n            }\n          }\n        }\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c279); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTestSetRegion() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 82,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 9) === peg$c280) {\n        s1 = peg$c280;\n        peg$currPos += 9;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c281); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseRegionCode();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c282(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTestCapture() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 83,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 7) === peg$c283) {\n        s1 = peg$c283;\n        peg$currPos += 7;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c284); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseIdentifier();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c285(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTestResume() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 84,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 6) === peg$c286) {\n        s1 = peg$c286;\n        peg$currPos += 6;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c287); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseIdentifier();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c288(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTestLogStateTraces() {\n      var s0, s1, s2, s3, s4, s5;\n\n      var key    = peg$currPos * 197 + 85,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 14) === peg$c289) {\n        s1 = peg$c289;\n        peg$currPos += 14;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c290); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 61) {\n            s3 = peg$c52;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c53); }\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse__();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parseBooleanLiteral();\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c291(s5);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseUtteranceString() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 86,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 34) {\n        s1 = peg$c164;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c165); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseUtteranceStringAlternation();\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 34) {\n            s3 = peg$c164;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c165); }\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c292(s2);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseUtteranceStringAlternation() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 87,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseUtterancePartGroup();\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$parseUtteranceStringAlternationTail();\n        if (s3 !== peg$FAILED) {\n          while (s3 !== peg$FAILED) {\n            s2.push(s3);\n            s3 = peg$parseUtteranceStringAlternationTail();\n          }\n        } else {\n          s2 = peg$FAILED;\n        }\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c293(s1, s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseUtterancePartGroup();\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseUtteranceStringAlternationTail() {\n      var s0, s1, s2;\n\n      var key    = peg$currPos * 197 + 88,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 124) {\n        s1 = peg$c294;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c295); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseUtterancePartGroup();\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c296(s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 124) {\n          s1 = peg$c294;\n          peg$currPos++;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c295); }\n        }\n        if (s1 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c297();\n        }\n        s0 = s1;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseUtterancePartGroup() {\n      var s0, s1, s2;\n\n      var key    = peg$currPos * 197 + 89,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = [];\n      s2 = peg$parseUtteranceStringPrimitive();\n      if (s2 !== peg$FAILED) {\n        while (s2 !== peg$FAILED) {\n          s1.push(s2);\n          s2 = peg$parseUtteranceStringPrimitive();\n        }\n      } else {\n        s1 = peg$FAILED;\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c298(s1);\n      }\n      s0 = s1;\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseUtteranceStringPrimitive() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n\n      var key    = peg$currPos * 197 + 90,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$currPos;\n      s2 = [];\n      s3 = peg$currPos;\n      s4 = peg$currPos;\n      peg$silentFails++;\n      if (input.charCodeAt(peg$currPos) === 34) {\n        s5 = peg$c164;\n        peg$currPos++;\n      } else {\n        s5 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c165); }\n      }\n      peg$silentFails--;\n      if (s5 === peg$FAILED) {\n        s4 = void 0;\n      } else {\n        peg$currPos = s4;\n        s4 = peg$FAILED;\n      }\n      if (s4 !== peg$FAILED) {\n        s5 = peg$currPos;\n        peg$silentFails++;\n        if (input.charCodeAt(peg$currPos) === 36) {\n          s6 = peg$c182;\n          peg$currPos++;\n        } else {\n          s6 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c183); }\n        }\n        peg$silentFails--;\n        if (s6 === peg$FAILED) {\n          s5 = void 0;\n        } else {\n          peg$currPos = s5;\n          s5 = peg$FAILED;\n        }\n        if (s5 !== peg$FAILED) {\n          s6 = peg$currPos;\n          peg$silentFails++;\n          if (input.charCodeAt(peg$currPos) === 40) {\n            s7 = peg$c146;\n            peg$currPos++;\n          } else {\n            s7 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c147); }\n          }\n          peg$silentFails--;\n          if (s7 === peg$FAILED) {\n            s6 = void 0;\n          } else {\n            peg$currPos = s6;\n            s6 = peg$FAILED;\n          }\n          if (s6 !== peg$FAILED) {\n            s7 = peg$currPos;\n            peg$silentFails++;\n            if (input.charCodeAt(peg$currPos) === 41) {\n              s8 = peg$c299;\n              peg$currPos++;\n            } else {\n              s8 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c300); }\n            }\n            peg$silentFails--;\n            if (s8 === peg$FAILED) {\n              s7 = void 0;\n            } else {\n              peg$currPos = s7;\n              s7 = peg$FAILED;\n            }\n            if (s7 !== peg$FAILED) {\n              s8 = peg$currPos;\n              peg$silentFails++;\n              if (input.charCodeAt(peg$currPos) === 124) {\n                s9 = peg$c294;\n                peg$currPos++;\n              } else {\n                s9 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c295); }\n              }\n              peg$silentFails--;\n              if (s9 === peg$FAILED) {\n                s8 = void 0;\n              } else {\n                peg$currPos = s8;\n                s8 = peg$FAILED;\n              }\n              if (s8 !== peg$FAILED) {\n                if (input.length > peg$currPos) {\n                  s9 = input.charAt(peg$currPos);\n                  peg$currPos++;\n                } else {\n                  s9 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c20); }\n                }\n                if (s9 !== peg$FAILED) {\n                  s4 = [s4, s5, s6, s7, s8, s9];\n                  s3 = s4;\n                } else {\n                  peg$currPos = s3;\n                  s3 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s3;\n        s3 = peg$FAILED;\n      }\n      if (s3 !== peg$FAILED) {\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          s3 = peg$currPos;\n          s4 = peg$currPos;\n          peg$silentFails++;\n          if (input.charCodeAt(peg$currPos) === 34) {\n            s5 = peg$c164;\n            peg$currPos++;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c165); }\n          }\n          peg$silentFails--;\n          if (s5 === peg$FAILED) {\n            s4 = void 0;\n          } else {\n            peg$currPos = s4;\n            s4 = peg$FAILED;\n          }\n          if (s4 !== peg$FAILED) {\n            s5 = peg$currPos;\n            peg$silentFails++;\n            if (input.charCodeAt(peg$currPos) === 36) {\n              s6 = peg$c182;\n              peg$currPos++;\n            } else {\n              s6 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c183); }\n            }\n            peg$silentFails--;\n            if (s6 === peg$FAILED) {\n              s5 = void 0;\n            } else {\n              peg$currPos = s5;\n              s5 = peg$FAILED;\n            }\n            if (s5 !== peg$FAILED) {\n              s6 = peg$currPos;\n              peg$silentFails++;\n              if (input.charCodeAt(peg$currPos) === 40) {\n                s7 = peg$c146;\n                peg$currPos++;\n              } else {\n                s7 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c147); }\n              }\n              peg$silentFails--;\n              if (s7 === peg$FAILED) {\n                s6 = void 0;\n              } else {\n                peg$currPos = s6;\n                s6 = peg$FAILED;\n              }\n              if (s6 !== peg$FAILED) {\n                s7 = peg$currPos;\n                peg$silentFails++;\n                if (input.charCodeAt(peg$currPos) === 41) {\n                  s8 = peg$c299;\n                  peg$currPos++;\n                } else {\n                  s8 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c300); }\n                }\n                peg$silentFails--;\n                if (s8 === peg$FAILED) {\n                  s7 = void 0;\n                } else {\n                  peg$currPos = s7;\n                  s7 = peg$FAILED;\n                }\n                if (s7 !== peg$FAILED) {\n                  s8 = peg$currPos;\n                  peg$silentFails++;\n                  if (input.charCodeAt(peg$currPos) === 124) {\n                    s9 = peg$c294;\n                    peg$currPos++;\n                  } else {\n                    s9 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$c295); }\n                  }\n                  peg$silentFails--;\n                  if (s9 === peg$FAILED) {\n                    s8 = void 0;\n                  } else {\n                    peg$currPos = s8;\n                    s8 = peg$FAILED;\n                  }\n                  if (s8 !== peg$FAILED) {\n                    if (input.length > peg$currPos) {\n                      s9 = input.charAt(peg$currPos);\n                      peg$currPos++;\n                    } else {\n                      s9 = peg$FAILED;\n                      if (peg$silentFails === 0) { peg$fail(peg$c20); }\n                    }\n                    if (s9 !== peg$FAILED) {\n                      s4 = [s4, s5, s6, s7, s8, s9];\n                      s3 = s4;\n                    } else {\n                      peg$currPos = s3;\n                      s3 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s3;\n                    s3 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s3;\n                  s3 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        }\n      } else {\n        s2 = peg$FAILED;\n      }\n      if (s2 !== peg$FAILED) {\n        s1 = input.substring(s1, peg$currPos);\n      } else {\n        s1 = s2;\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c301();\n      }\n      s0 = s1;\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = peg$parseSlotVariableReference();\n        if (s1 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c302(s1);\n        }\n        s0 = s1;\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.charCodeAt(peg$currPos) === 40) {\n            s1 = peg$c146;\n            peg$currPos++;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c147); }\n          }\n          if (s1 !== peg$FAILED) {\n            s2 = peg$parseUtteranceStringAlternation();\n            if (s2 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 41) {\n                s3 = peg$c299;\n                peg$currPos++;\n              } else {\n                s3 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c300); }\n              }\n              if (s3 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c303(s2);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseScreenString() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 91,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseScreenStringParts();\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c304(s1);\n      }\n      s0 = s1;\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseScreenStringParts() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 92,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 34) {\n        s1 = peg$c164;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c165); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$parseScreenStringPart();\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          s3 = peg$parseScreenStringPart();\n        }\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 34) {\n            s3 = peg$c164;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c165); }\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c305(s2);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseScreenStringPart() {\n      var s0;\n\n      var key    = peg$currPos * 197 + 93,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$parseTemplateStringClearPart();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseTemplateStringExpressionPart();\n        if (s0 === peg$FAILED) {\n          s0 = peg$parseTemplateStringSlotPart();\n          if (s0 === peg$FAILED) {\n            s0 = peg$parseTemplateStringFontSize();\n            if (s0 === peg$FAILED) {\n              s0 = peg$parseTemplateStringDatabaseCallPart();\n              if (s0 === peg$FAILED) {\n                s0 = peg$parseTemplateStringDatabasePart();\n                if (s0 === peg$FAILED) {\n                  s0 = peg$parseTemplateStringTaggedPart();\n                }\n              }\n            }\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseSayString() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 94,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 34) {\n        s1 = peg$c164;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c165); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseSayStringContents();\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 34) {\n            s3 = peg$c164;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c165); }\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c306(s2);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseSayStringContents() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 95,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseSayStringAlternation();\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c307(s1);\n      }\n      s0 = s1;\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseSayStringAlternation() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 96,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseSayStringGroup();\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$parseSayStringAlternationTail();\n        if (s3 !== peg$FAILED) {\n          while (s3 !== peg$FAILED) {\n            s2.push(s3);\n            s3 = peg$parseSayStringAlternationTail();\n          }\n        } else {\n          s2 = peg$FAILED;\n        }\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c308(s1, s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseSayStringGroup();\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseSayStringAlternationTail() {\n      var s0, s1, s2;\n\n      var key    = peg$currPos * 197 + 97,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 124) {\n        s1 = peg$c294;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c295); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseSayStringGroup();\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c296(s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 124) {\n          s1 = peg$c294;\n          peg$currPos++;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c295); }\n        }\n        if (s1 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c309();\n        }\n        s0 = s1;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseSayStringGroup() {\n      var s0, s1, s2;\n\n      var key    = peg$currPos * 197 + 98,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = [];\n      s2 = peg$parseSayStringPart();\n      if (s2 !== peg$FAILED) {\n        while (s2 !== peg$FAILED) {\n          s1.push(s2);\n          s2 = peg$parseSayStringPart();\n        }\n      } else {\n        s1 = peg$FAILED;\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c310(s1);\n      }\n      s0 = s1;\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseSayStringPart() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 99,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$parseTemplateStringClearPart();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseTemplateStringEscapedCharacterPart();\n        if (s0 === peg$FAILED) {\n          s0 = peg$parseTemplateStringSoundEffectPart();\n          if (s0 === peg$FAILED) {\n            s0 = peg$parseTemplateStringExpressionPart();\n            if (s0 === peg$FAILED) {\n              s0 = peg$parseTemplateStringSlotPart();\n              if (s0 === peg$FAILED) {\n                s0 = peg$parseTemplateStringDatabaseCallPart();\n                if (s0 === peg$FAILED) {\n                  s0 = peg$parseTemplateStringDatabasePart();\n                  if (s0 === peg$FAILED) {\n                    s0 = peg$parseTemplateStringStaticPart();\n                    if (s0 === peg$FAILED) {\n                      s0 = peg$parseTemplateStringPausePart();\n                      if (s0 === peg$FAILED) {\n                        s0 = peg$parseTemplateStringInterjectionPart();\n                        if (s0 === peg$FAILED) {\n                          s0 = peg$parseTemplateStringTaggedPart();\n                          if (s0 === peg$FAILED) {\n                            s0 = peg$currPos;\n                            if (input.charCodeAt(peg$currPos) === 40) {\n                              s1 = peg$c146;\n                              peg$currPos++;\n                            } else {\n                              s1 = peg$FAILED;\n                              if (peg$silentFails === 0) { peg$fail(peg$c147); }\n                            }\n                            if (s1 !== peg$FAILED) {\n                              s2 = peg$parseSayStringAlternation();\n                              if (s2 !== peg$FAILED) {\n                                if (input.charCodeAt(peg$currPos) === 41) {\n                                  s3 = peg$c299;\n                                  peg$currPos++;\n                                } else {\n                                  s3 = peg$FAILED;\n                                  if (peg$silentFails === 0) { peg$fail(peg$c300); }\n                                }\n                                if (s3 !== peg$FAILED) {\n                                  peg$savedPos = s0;\n                                  s1 = peg$c303(s2);\n                                  s0 = s1;\n                                } else {\n                                  peg$currPos = s0;\n                                  s0 = peg$FAILED;\n                                }\n                              } else {\n                                peg$currPos = s0;\n                                s0 = peg$FAILED;\n                              }\n                            } else {\n                              peg$currPos = s0;\n                              s0 = peg$FAILED;\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTemplateStringClearPart() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14;\n\n      var key    = peg$currPos * 197 + 100,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$currPos;\n      s2 = [];\n      s3 = peg$currPos;\n      s4 = peg$currPos;\n      peg$silentFails++;\n      if (input.charCodeAt(peg$currPos) === 34) {\n        s5 = peg$c164;\n        peg$currPos++;\n      } else {\n        s5 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c165); }\n      }\n      peg$silentFails--;\n      if (s5 === peg$FAILED) {\n        s4 = void 0;\n      } else {\n        peg$currPos = s4;\n        s4 = peg$FAILED;\n      }\n      if (s4 !== peg$FAILED) {\n        s5 = peg$currPos;\n        peg$silentFails++;\n        if (input.charCodeAt(peg$currPos) === 36) {\n          s6 = peg$c182;\n          peg$currPos++;\n        } else {\n          s6 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c183); }\n        }\n        peg$silentFails--;\n        if (s6 === peg$FAILED) {\n          s5 = void 0;\n        } else {\n          peg$currPos = s5;\n          s5 = peg$FAILED;\n        }\n        if (s5 !== peg$FAILED) {\n          s6 = peg$currPos;\n          peg$silentFails++;\n          if (input.charCodeAt(peg$currPos) === 64) {\n            s7 = peg$c12;\n            peg$currPos++;\n          } else {\n            s7 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c13); }\n          }\n          peg$silentFails--;\n          if (s7 === peg$FAILED) {\n            s6 = void 0;\n          } else {\n            peg$currPos = s6;\n            s6 = peg$FAILED;\n          }\n          if (s6 !== peg$FAILED) {\n            s7 = peg$currPos;\n            peg$silentFails++;\n            if (input.charCodeAt(peg$currPos) === 123) {\n              s8 = peg$c311;\n              peg$currPos++;\n            } else {\n              s8 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c312); }\n            }\n            peg$silentFails--;\n            if (s8 === peg$FAILED) {\n              s7 = void 0;\n            } else {\n              peg$currPos = s7;\n              s7 = peg$FAILED;\n            }\n            if (s7 !== peg$FAILED) {\n              s8 = peg$currPos;\n              peg$silentFails++;\n              if (input.charCodeAt(peg$currPos) === 60) {\n                s9 = peg$c78;\n                peg$currPos++;\n              } else {\n                s9 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c79); }\n              }\n              peg$silentFails--;\n              if (s9 === peg$FAILED) {\n                s8 = void 0;\n              } else {\n                peg$currPos = s8;\n                s8 = peg$FAILED;\n              }\n              if (s8 !== peg$FAILED) {\n                s9 = peg$currPos;\n                peg$silentFails++;\n                if (input.charCodeAt(peg$currPos) === 92) {\n                  s10 = peg$c89;\n                  peg$currPos++;\n                } else {\n                  s10 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c90); }\n                }\n                peg$silentFails--;\n                if (s10 === peg$FAILED) {\n                  s9 = void 0;\n                } else {\n                  peg$currPos = s9;\n                  s9 = peg$FAILED;\n                }\n                if (s9 !== peg$FAILED) {\n                  s10 = peg$currPos;\n                  peg$silentFails++;\n                  if (input.substr(peg$currPos, 6) === peg$c313) {\n                    s11 = peg$c313;\n                    peg$currPos += 6;\n                  } else {\n                    s11 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$c314); }\n                  }\n                  peg$silentFails--;\n                  if (s11 === peg$FAILED) {\n                    s10 = void 0;\n                  } else {\n                    peg$currPos = s10;\n                    s10 = peg$FAILED;\n                  }\n                  if (s10 !== peg$FAILED) {\n                    s11 = peg$currPos;\n                    peg$silentFails++;\n                    if (input.charCodeAt(peg$currPos) === 124) {\n                      s12 = peg$c294;\n                      peg$currPos++;\n                    } else {\n                      s12 = peg$FAILED;\n                      if (peg$silentFails === 0) { peg$fail(peg$c295); }\n                    }\n                    peg$silentFails--;\n                    if (s12 === peg$FAILED) {\n                      s11 = void 0;\n                    } else {\n                      peg$currPos = s11;\n                      s11 = peg$FAILED;\n                    }\n                    if (s11 !== peg$FAILED) {\n                      s12 = peg$currPos;\n                      peg$silentFails++;\n                      if (input.charCodeAt(peg$currPos) === 40) {\n                        s13 = peg$c146;\n                        peg$currPos++;\n                      } else {\n                        s13 = peg$FAILED;\n                        if (peg$silentFails === 0) { peg$fail(peg$c147); }\n                      }\n                      peg$silentFails--;\n                      if (s13 === peg$FAILED) {\n                        s12 = void 0;\n                      } else {\n                        peg$currPos = s12;\n                        s12 = peg$FAILED;\n                      }\n                      if (s12 !== peg$FAILED) {\n                        s13 = peg$currPos;\n                        peg$silentFails++;\n                        if (input.charCodeAt(peg$currPos) === 41) {\n                          s14 = peg$c299;\n                          peg$currPos++;\n                        } else {\n                          s14 = peg$FAILED;\n                          if (peg$silentFails === 0) { peg$fail(peg$c300); }\n                        }\n                        peg$silentFails--;\n                        if (s14 === peg$FAILED) {\n                          s13 = void 0;\n                        } else {\n                          peg$currPos = s13;\n                          s13 = peg$FAILED;\n                        }\n                        if (s13 !== peg$FAILED) {\n                          if (input.length > peg$currPos) {\n                            s14 = input.charAt(peg$currPos);\n                            peg$currPos++;\n                          } else {\n                            s14 = peg$FAILED;\n                            if (peg$silentFails === 0) { peg$fail(peg$c20); }\n                          }\n                          if (s14 !== peg$FAILED) {\n                            s4 = [s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14];\n                            s3 = s4;\n                          } else {\n                            peg$currPos = s3;\n                            s3 = peg$FAILED;\n                          }\n                        } else {\n                          peg$currPos = s3;\n                          s3 = peg$FAILED;\n                        }\n                      } else {\n                        peg$currPos = s3;\n                        s3 = peg$FAILED;\n                      }\n                    } else {\n                      peg$currPos = s3;\n                      s3 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s3;\n                    s3 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s3;\n                  s3 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s3;\n        s3 = peg$FAILED;\n      }\n      if (s3 !== peg$FAILED) {\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          s3 = peg$currPos;\n          s4 = peg$currPos;\n          peg$silentFails++;\n          if (input.charCodeAt(peg$currPos) === 34) {\n            s5 = peg$c164;\n            peg$currPos++;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c165); }\n          }\n          peg$silentFails--;\n          if (s5 === peg$FAILED) {\n            s4 = void 0;\n          } else {\n            peg$currPos = s4;\n            s4 = peg$FAILED;\n          }\n          if (s4 !== peg$FAILED) {\n            s5 = peg$currPos;\n            peg$silentFails++;\n            if (input.charCodeAt(peg$currPos) === 36) {\n              s6 = peg$c182;\n              peg$currPos++;\n            } else {\n              s6 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c183); }\n            }\n            peg$silentFails--;\n            if (s6 === peg$FAILED) {\n              s5 = void 0;\n            } else {\n              peg$currPos = s5;\n              s5 = peg$FAILED;\n            }\n            if (s5 !== peg$FAILED) {\n              s6 = peg$currPos;\n              peg$silentFails++;\n              if (input.charCodeAt(peg$currPos) === 64) {\n                s7 = peg$c12;\n                peg$currPos++;\n              } else {\n                s7 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c13); }\n              }\n              peg$silentFails--;\n              if (s7 === peg$FAILED) {\n                s6 = void 0;\n              } else {\n                peg$currPos = s6;\n                s6 = peg$FAILED;\n              }\n              if (s6 !== peg$FAILED) {\n                s7 = peg$currPos;\n                peg$silentFails++;\n                if (input.charCodeAt(peg$currPos) === 123) {\n                  s8 = peg$c311;\n                  peg$currPos++;\n                } else {\n                  s8 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c312); }\n                }\n                peg$silentFails--;\n                if (s8 === peg$FAILED) {\n                  s7 = void 0;\n                } else {\n                  peg$currPos = s7;\n                  s7 = peg$FAILED;\n                }\n                if (s7 !== peg$FAILED) {\n                  s8 = peg$currPos;\n                  peg$silentFails++;\n                  if (input.charCodeAt(peg$currPos) === 60) {\n                    s9 = peg$c78;\n                    peg$currPos++;\n                  } else {\n                    s9 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$c79); }\n                  }\n                  peg$silentFails--;\n                  if (s9 === peg$FAILED) {\n                    s8 = void 0;\n                  } else {\n                    peg$currPos = s8;\n                    s8 = peg$FAILED;\n                  }\n                  if (s8 !== peg$FAILED) {\n                    s9 = peg$currPos;\n                    peg$silentFails++;\n                    if (input.charCodeAt(peg$currPos) === 92) {\n                      s10 = peg$c89;\n                      peg$currPos++;\n                    } else {\n                      s10 = peg$FAILED;\n                      if (peg$silentFails === 0) { peg$fail(peg$c90); }\n                    }\n                    peg$silentFails--;\n                    if (s10 === peg$FAILED) {\n                      s9 = void 0;\n                    } else {\n                      peg$currPos = s9;\n                      s9 = peg$FAILED;\n                    }\n                    if (s9 !== peg$FAILED) {\n                      s10 = peg$currPos;\n                      peg$silentFails++;\n                      if (input.substr(peg$currPos, 6) === peg$c313) {\n                        s11 = peg$c313;\n                        peg$currPos += 6;\n                      } else {\n                        s11 = peg$FAILED;\n                        if (peg$silentFails === 0) { peg$fail(peg$c314); }\n                      }\n                      peg$silentFails--;\n                      if (s11 === peg$FAILED) {\n                        s10 = void 0;\n                      } else {\n                        peg$currPos = s10;\n                        s10 = peg$FAILED;\n                      }\n                      if (s10 !== peg$FAILED) {\n                        s11 = peg$currPos;\n                        peg$silentFails++;\n                        if (input.charCodeAt(peg$currPos) === 124) {\n                          s12 = peg$c294;\n                          peg$currPos++;\n                        } else {\n                          s12 = peg$FAILED;\n                          if (peg$silentFails === 0) { peg$fail(peg$c295); }\n                        }\n                        peg$silentFails--;\n                        if (s12 === peg$FAILED) {\n                          s11 = void 0;\n                        } else {\n                          peg$currPos = s11;\n                          s11 = peg$FAILED;\n                        }\n                        if (s11 !== peg$FAILED) {\n                          s12 = peg$currPos;\n                          peg$silentFails++;\n                          if (input.charCodeAt(peg$currPos) === 40) {\n                            s13 = peg$c146;\n                            peg$currPos++;\n                          } else {\n                            s13 = peg$FAILED;\n                            if (peg$silentFails === 0) { peg$fail(peg$c147); }\n                          }\n                          peg$silentFails--;\n                          if (s13 === peg$FAILED) {\n                            s12 = void 0;\n                          } else {\n                            peg$currPos = s12;\n                            s12 = peg$FAILED;\n                          }\n                          if (s12 !== peg$FAILED) {\n                            s13 = peg$currPos;\n                            peg$silentFails++;\n                            if (input.charCodeAt(peg$currPos) === 41) {\n                              s14 = peg$c299;\n                              peg$currPos++;\n                            } else {\n                              s14 = peg$FAILED;\n                              if (peg$silentFails === 0) { peg$fail(peg$c300); }\n                            }\n                            peg$silentFails--;\n                            if (s14 === peg$FAILED) {\n                              s13 = void 0;\n                            } else {\n                              peg$currPos = s13;\n                              s13 = peg$FAILED;\n                            }\n                            if (s13 !== peg$FAILED) {\n                              if (input.length > peg$currPos) {\n                                s14 = input.charAt(peg$currPos);\n                                peg$currPos++;\n                              } else {\n                                s14 = peg$FAILED;\n                                if (peg$silentFails === 0) { peg$fail(peg$c20); }\n                              }\n                              if (s14 !== peg$FAILED) {\n                                s4 = [s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14];\n                                s3 = s4;\n                              } else {\n                                peg$currPos = s3;\n                                s3 = peg$FAILED;\n                              }\n                            } else {\n                              peg$currPos = s3;\n                              s3 = peg$FAILED;\n                            }\n                          } else {\n                            peg$currPos = s3;\n                            s3 = peg$FAILED;\n                          }\n                        } else {\n                          peg$currPos = s3;\n                          s3 = peg$FAILED;\n                        }\n                      } else {\n                        peg$currPos = s3;\n                        s3 = peg$FAILED;\n                      }\n                    } else {\n                      peg$currPos = s3;\n                      s3 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s3;\n                    s3 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s3;\n                  s3 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        }\n      } else {\n        s2 = peg$FAILED;\n      }\n      if (s2 !== peg$FAILED) {\n        s1 = input.substring(s1, peg$currPos);\n      } else {\n        s1 = s2;\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c301();\n      }\n      s0 = s1;\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTemplateStringEscapedCharacterPart() {\n      var s0, s1, s2;\n\n      var key    = peg$currPos * 197 + 101,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 2) === peg$c315) {\n        s1 = peg$c315;\n        peg$currPos += 2;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c316); }\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c317();\n      }\n      s0 = s1;\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 2) === peg$c318) {\n          s1 = peg$c318;\n          peg$currPos += 2;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c319); }\n        }\n        if (s1 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c320();\n        }\n        s0 = s1;\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.substr(peg$currPos, 2) === peg$c321) {\n            s1 = peg$c321;\n            peg$currPos += 2;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c322); }\n          }\n          if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c323();\n          }\n          s0 = s1;\n          if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            if (input.substr(peg$currPos, 2) === peg$c324) {\n              s1 = peg$c324;\n              peg$currPos += 2;\n            } else {\n              s1 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c325); }\n            }\n            if (s1 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c326();\n            }\n            s0 = s1;\n            if (s0 === peg$FAILED) {\n              s0 = peg$currPos;\n              if (input.substr(peg$currPos, 2) === peg$c327) {\n                s1 = peg$c327;\n                peg$currPos += 2;\n              } else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c328); }\n              }\n              if (s1 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c329();\n              }\n              s0 = s1;\n              if (s0 === peg$FAILED) {\n                s0 = peg$currPos;\n                if (input.substr(peg$currPos, 2) === peg$c330) {\n                  s1 = peg$c330;\n                  peg$currPos += 2;\n                } else {\n                  s1 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c331); }\n                }\n                if (s1 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s1 = peg$c332();\n                }\n                s0 = s1;\n                if (s0 === peg$FAILED) {\n                  s0 = peg$currPos;\n                  if (input.substr(peg$currPos, 2) === peg$c333) {\n                    s1 = peg$c333;\n                    peg$currPos += 2;\n                  } else {\n                    s1 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$c334); }\n                  }\n                  if (s1 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c335();\n                  }\n                  s0 = s1;\n                  if (s0 === peg$FAILED) {\n                    s0 = peg$currPos;\n                    if (input.substr(peg$currPos, 2) === peg$c336) {\n                      s1 = peg$c336;\n                      peg$currPos += 2;\n                    } else {\n                      s1 = peg$FAILED;\n                      if (peg$silentFails === 0) { peg$fail(peg$c337); }\n                    }\n                    if (s1 !== peg$FAILED) {\n                      peg$savedPos = s0;\n                      s1 = peg$c338();\n                    }\n                    s0 = s1;\n                    if (s0 === peg$FAILED) {\n                      s0 = peg$currPos;\n                      if (input.charCodeAt(peg$currPos) === 92) {\n                        s1 = peg$c89;\n                        peg$currPos++;\n                      } else {\n                        s1 = peg$FAILED;\n                        if (peg$silentFails === 0) { peg$fail(peg$c90); }\n                      }\n                      if (s1 !== peg$FAILED) {\n                        if (input.charCodeAt(peg$currPos) === 123) {\n                          s2 = peg$c311;\n                          peg$currPos++;\n                        } else {\n                          s2 = peg$FAILED;\n                          if (peg$silentFails === 0) { peg$fail(peg$c312); }\n                        }\n                        if (s2 !== peg$FAILED) {\n                          peg$savedPos = s0;\n                          s1 = peg$c339(s2);\n                          s0 = s1;\n                        } else {\n                          peg$currPos = s0;\n                          s0 = peg$FAILED;\n                        }\n                      } else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTemplateStringExpressionPart() {\n      var s0, s1, s2, s3, s4, s5;\n\n      var key    = peg$currPos * 197 + 102,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 123) {\n        s1 = peg$c311;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c312); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseExpressionString();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse__();\n            if (s4 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 125) {\n                s5 = peg$c340;\n                peg$currPos++;\n              } else {\n                s5 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c341); }\n              }\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c342(s3);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTemplateStringSlotPart() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 103,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseSlotVariableReference();\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c302(s1);\n      }\n      s0 = s1;\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTemplateStringDatabasePart() {\n      var s0, s1, s2;\n\n      var key    = peg$currPos * 197 + 104,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 64) {\n        s1 = peg$c12;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c13); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseVariableReference();\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c343(s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTemplateStringStaticPart() {\n      var s0, s1, s2;\n\n      var key    = peg$currPos * 197 + 105,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 7) === peg$c58) {\n        s1 = peg$c58;\n        peg$currPos += 7;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c59); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseVariableReference();\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c344(s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTemplateStringDatabaseCallPart() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 106,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 64) {\n        s1 = peg$c12;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c13); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseVariableReference();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseFunctionCallArguments();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c345(s2, s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTemplateStringPausePart() {\n      var s0, s1, s2, s3, s4, s5, s6;\n\n      var key    = peg$currPos * 197 + 107,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 4) === peg$c346) {\n        s1 = peg$c346;\n        peg$currPos += 4;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c347); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseInteger();\n          if (s3 !== peg$FAILED) {\n            if (input.substr(peg$currPos, 2) === peg$c348) {\n              s4 = peg$c348;\n              peg$currPos += 2;\n            } else {\n              s4 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c349); }\n            }\n            if (s4 === peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 115) {\n                s4 = peg$c241;\n                peg$currPos++;\n              } else {\n                s4 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c242); }\n              }\n            }\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parse__();\n              if (s5 !== peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 62) {\n                  s6 = peg$c80;\n                  peg$currPos++;\n                } else {\n                  s6 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c81); }\n                }\n                if (s6 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s1 = peg$c350(s3, s4);\n                  s0 = s1;\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTemplateStringFontSize() {\n      var s0, s1, s2, s3, s4, s5, s6;\n\n      var key    = peg$currPos * 197 + 108,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 2) === peg$c351) {\n        s1 = peg$c351;\n        peg$currPos += 2;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c352); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseInteger();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse__();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parseTagText();\n              if (s5 !== peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 62) {\n                  s6 = peg$c80;\n                  peg$currPos++;\n                } else {\n                  s6 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c81); }\n                }\n                if (s6 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s1 = peg$c353(s3, s5);\n                  s0 = s1;\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTemplateStringInterjectionPart() {\n      var s0, s1, s2, s3, s4, s5, s6;\n\n      var key    = peg$currPos * 197 + 109,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 2) === peg$c354) {\n        s1 = peg$c354;\n        peg$currPos += 2;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c355); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseTagText();\n          if (s3 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 62) {\n              s4 = peg$c80;\n              peg$currPos++;\n            } else {\n              s4 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c81); }\n            }\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parse__();\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parseTagPunctuation();\n                if (s6 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s1 = peg$c356(s3, s6);\n                  s0 = s1;\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 2) === peg$c354) {\n          s1 = peg$c354;\n          peg$currPos += 2;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c355); }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parse__();\n          if (s2 !== peg$FAILED) {\n            s3 = peg$parseTagText();\n            if (s3 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 62) {\n                s4 = peg$c80;\n                peg$currPos++;\n              } else {\n                s4 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c81); }\n              }\n              if (s4 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c357(s3);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTemplateStringSoundEffectPart() {\n      var s0, s1, s2, s3, s4, s5;\n\n      var key    = peg$currPos * 197 + 110,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 4) === peg$c358) {\n        s1 = peg$c358;\n        peg$currPos += 4;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c359); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseAssetName();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse__();\n            if (s4 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 62) {\n                s5 = peg$c80;\n                peg$currPos++;\n              } else {\n                s5 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c81); }\n              }\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c360(s3);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 4) === peg$c358) {\n          s1 = peg$c358;\n          peg$currPos += 4;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c359); }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parse__();\n          if (s2 !== peg$FAILED) {\n            s3 = peg$parseAssetURL();\n            if (s3 !== peg$FAILED) {\n              s4 = peg$parse__();\n              if (s4 !== peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 62) {\n                  s5 = peg$c80;\n                  peg$currPos++;\n                } else {\n                  s5 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c81); }\n                }\n                if (s5 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s1 = peg$c360(s3);\n                  s0 = s1;\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.substr(peg$currPos, 4) === peg$c358) {\n            s1 = peg$c358;\n            peg$currPos += 4;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c359); }\n          }\n          if (s1 !== peg$FAILED) {\n            s2 = peg$parse__();\n            if (s2 !== peg$FAILED) {\n              s3 = peg$parseAssetSoundBank();\n              if (s3 !== peg$FAILED) {\n                s4 = peg$parse__();\n                if (s4 !== peg$FAILED) {\n                  if (input.charCodeAt(peg$currPos) === 62) {\n                    s5 = peg$c80;\n                    peg$currPos++;\n                  } else {\n                    s5 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$c81); }\n                  }\n                  if (s5 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c360(s3);\n                    s0 = s1;\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTemplateStringTaggedPart() {\n      var s0, s1, s2, s3, s4, s5;\n\n      var key    = peg$currPos * 197 + 111,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 60) {\n        s1 = peg$c78;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c79); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseTagCode();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parse__();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parseTagText();\n            if (s4 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 62) {\n                s5 = peg$c80;\n                peg$currPos++;\n              } else {\n                s5 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c81); }\n              }\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c361(s2, s4);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTagPunctuation() {\n      var s0, s1, s2;\n\n      var key    = peg$currPos * 197 + 112,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = [];\n      if (input.charCodeAt(peg$currPos) === 44) {\n        s2 = peg$c40;\n        peg$currPos++;\n      } else {\n        s2 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c41); }\n      }\n      if (s2 === peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 46) {\n          s2 = peg$c148;\n          peg$currPos++;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c149); }\n        }\n        if (s2 === peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 33) {\n            s2 = peg$c362;\n            peg$currPos++;\n          } else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c363); }\n          }\n          if (s2 === peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 63) {\n              s2 = peg$c364;\n              peg$currPos++;\n            } else {\n              s2 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c365); }\n            }\n          }\n        }\n      }\n      if (s2 !== peg$FAILED) {\n        while (s2 !== peg$FAILED) {\n          s1.push(s2);\n          if (input.charCodeAt(peg$currPos) === 44) {\n            s2 = peg$c40;\n            peg$currPos++;\n          } else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c41); }\n          }\n          if (s2 === peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 46) {\n              s2 = peg$c148;\n              peg$currPos++;\n            } else {\n              s2 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c149); }\n            }\n            if (s2 === peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 33) {\n                s2 = peg$c362;\n                peg$currPos++;\n              } else {\n                s2 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c363); }\n              }\n              if (s2 === peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 63) {\n                  s2 = peg$c364;\n                  peg$currPos++;\n                } else {\n                  s2 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c365); }\n                }\n              }\n            }\n          }\n        }\n      } else {\n        s1 = peg$FAILED;\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c366();\n      }\n      s0 = s1;\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTagCode() {\n      var s0, s1, s2, s3, s4, s5, s6, s7;\n\n      var key    = peg$currPos * 197 + 113,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$currPos;\n      s2 = [];\n      s3 = peg$currPos;\n      s4 = peg$currPos;\n      peg$silentFails++;\n      if (input.charCodeAt(peg$currPos) === 62) {\n        s5 = peg$c80;\n        peg$currPos++;\n      } else {\n        s5 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c81); }\n      }\n      peg$silentFails--;\n      if (s5 === peg$FAILED) {\n        s4 = void 0;\n      } else {\n        peg$currPos = s4;\n        s4 = peg$FAILED;\n      }\n      if (s4 !== peg$FAILED) {\n        s5 = peg$currPos;\n        peg$silentFails++;\n        if (input.charCodeAt(peg$currPos) === 32) {\n          s6 = peg$c367;\n          peg$currPos++;\n        } else {\n          s6 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c368); }\n        }\n        peg$silentFails--;\n        if (s6 === peg$FAILED) {\n          s5 = void 0;\n        } else {\n          peg$currPos = s5;\n          s5 = peg$FAILED;\n        }\n        if (s5 !== peg$FAILED) {\n          s6 = peg$currPos;\n          peg$silentFails++;\n          if (input.charCodeAt(peg$currPos) === 9) {\n            s7 = peg$c369;\n            peg$currPos++;\n          } else {\n            s7 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c370); }\n          }\n          peg$silentFails--;\n          if (s7 === peg$FAILED) {\n            s6 = void 0;\n          } else {\n            peg$currPos = s6;\n            s6 = peg$FAILED;\n          }\n          if (s6 !== peg$FAILED) {\n            if (input.length > peg$currPos) {\n              s7 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s7 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c20); }\n            }\n            if (s7 !== peg$FAILED) {\n              s4 = [s4, s5, s6, s7];\n              s3 = s4;\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s3;\n        s3 = peg$FAILED;\n      }\n      if (s3 !== peg$FAILED) {\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          s3 = peg$currPos;\n          s4 = peg$currPos;\n          peg$silentFails++;\n          if (input.charCodeAt(peg$currPos) === 62) {\n            s5 = peg$c80;\n            peg$currPos++;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c81); }\n          }\n          peg$silentFails--;\n          if (s5 === peg$FAILED) {\n            s4 = void 0;\n          } else {\n            peg$currPos = s4;\n            s4 = peg$FAILED;\n          }\n          if (s4 !== peg$FAILED) {\n            s5 = peg$currPos;\n            peg$silentFails++;\n            if (input.charCodeAt(peg$currPos) === 32) {\n              s6 = peg$c367;\n              peg$currPos++;\n            } else {\n              s6 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c368); }\n            }\n            peg$silentFails--;\n            if (s6 === peg$FAILED) {\n              s5 = void 0;\n            } else {\n              peg$currPos = s5;\n              s5 = peg$FAILED;\n            }\n            if (s5 !== peg$FAILED) {\n              s6 = peg$currPos;\n              peg$silentFails++;\n              if (input.charCodeAt(peg$currPos) === 9) {\n                s7 = peg$c369;\n                peg$currPos++;\n              } else {\n                s7 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c370); }\n              }\n              peg$silentFails--;\n              if (s7 === peg$FAILED) {\n                s6 = void 0;\n              } else {\n                peg$currPos = s6;\n                s6 = peg$FAILED;\n              }\n              if (s6 !== peg$FAILED) {\n                if (input.length > peg$currPos) {\n                  s7 = input.charAt(peg$currPos);\n                  peg$currPos++;\n                } else {\n                  s7 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c20); }\n                }\n                if (s7 !== peg$FAILED) {\n                  s4 = [s4, s5, s6, s7];\n                  s3 = s4;\n                } else {\n                  peg$currPos = s3;\n                  s3 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        }\n      } else {\n        s2 = peg$FAILED;\n      }\n      if (s2 !== peg$FAILED) {\n        s1 = input.substring(s1, peg$currPos);\n      } else {\n        s1 = s2;\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c366();\n      }\n      s0 = s1;\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTagText() {\n      var s0, s1, s2, s3, s4, s5;\n\n      var key    = peg$currPos * 197 + 114,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$currPos;\n      s2 = [];\n      s3 = peg$currPos;\n      s4 = peg$currPos;\n      peg$silentFails++;\n      if (input.charCodeAt(peg$currPos) === 62) {\n        s5 = peg$c80;\n        peg$currPos++;\n      } else {\n        s5 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c81); }\n      }\n      peg$silentFails--;\n      if (s5 === peg$FAILED) {\n        s4 = void 0;\n      } else {\n        peg$currPos = s4;\n        s4 = peg$FAILED;\n      }\n      if (s4 !== peg$FAILED) {\n        if (input.length > peg$currPos) {\n          s5 = input.charAt(peg$currPos);\n          peg$currPos++;\n        } else {\n          s5 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c20); }\n        }\n        if (s5 !== peg$FAILED) {\n          s4 = [s4, s5];\n          s3 = s4;\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s3;\n        s3 = peg$FAILED;\n      }\n      while (s3 !== peg$FAILED) {\n        s2.push(s3);\n        s3 = peg$currPos;\n        s4 = peg$currPos;\n        peg$silentFails++;\n        if (input.charCodeAt(peg$currPos) === 62) {\n          s5 = peg$c80;\n          peg$currPos++;\n        } else {\n          s5 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c81); }\n        }\n        peg$silentFails--;\n        if (s5 === peg$FAILED) {\n          s4 = void 0;\n        } else {\n          peg$currPos = s4;\n          s4 = peg$FAILED;\n        }\n        if (s4 !== peg$FAILED) {\n          if (input.length > peg$currPos) {\n            s5 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c20); }\n          }\n          if (s5 !== peg$FAILED) {\n            s4 = [s4, s5];\n            s3 = s4;\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n      }\n      if (s2 !== peg$FAILED) {\n        s1 = input.substring(s1, peg$currPos);\n      } else {\n        s1 = s2;\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c366();\n      }\n      s0 = s1;\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTestSaidString() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 115,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 34) {\n        s1 = peg$c164;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c165); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$parseTestSaidStringPart();\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          s3 = peg$parseTestSaidStringPart();\n        }\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 34) {\n            s3 = peg$c164;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c165); }\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c304(s2);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseTestSaidStringPart() {\n      var s0, s1, s2, s3, s4, s5, s6, s7;\n\n      var key    = peg$currPos * 197 + 116,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$currPos;\n      s2 = [];\n      s3 = peg$currPos;\n      s4 = peg$currPos;\n      peg$silentFails++;\n      if (input.charCodeAt(peg$currPos) === 34) {\n        s5 = peg$c164;\n        peg$currPos++;\n      } else {\n        s5 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c165); }\n      }\n      peg$silentFails--;\n      if (s5 === peg$FAILED) {\n        s4 = void 0;\n      } else {\n        peg$currPos = s4;\n        s4 = peg$FAILED;\n      }\n      if (s4 !== peg$FAILED) {\n        s5 = peg$currPos;\n        peg$silentFails++;\n        if (input.charCodeAt(peg$currPos) === 64) {\n          s6 = peg$c12;\n          peg$currPos++;\n        } else {\n          s6 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c13); }\n        }\n        peg$silentFails--;\n        if (s6 === peg$FAILED) {\n          s5 = void 0;\n        } else {\n          peg$currPos = s5;\n          s5 = peg$FAILED;\n        }\n        if (s5 !== peg$FAILED) {\n          s6 = peg$currPos;\n          peg$silentFails++;\n          if (input.charCodeAt(peg$currPos) === 60) {\n            s7 = peg$c78;\n            peg$currPos++;\n          } else {\n            s7 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c79); }\n          }\n          peg$silentFails--;\n          if (s7 === peg$FAILED) {\n            s6 = void 0;\n          } else {\n            peg$currPos = s6;\n            s6 = peg$FAILED;\n          }\n          if (s6 !== peg$FAILED) {\n            if (input.length > peg$currPos) {\n              s7 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s7 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c20); }\n            }\n            if (s7 !== peg$FAILED) {\n              s4 = [s4, s5, s6, s7];\n              s3 = s4;\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s3;\n        s3 = peg$FAILED;\n      }\n      if (s3 !== peg$FAILED) {\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          s3 = peg$currPos;\n          s4 = peg$currPos;\n          peg$silentFails++;\n          if (input.charCodeAt(peg$currPos) === 34) {\n            s5 = peg$c164;\n            peg$currPos++;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c165); }\n          }\n          peg$silentFails--;\n          if (s5 === peg$FAILED) {\n            s4 = void 0;\n          } else {\n            peg$currPos = s4;\n            s4 = peg$FAILED;\n          }\n          if (s4 !== peg$FAILED) {\n            s5 = peg$currPos;\n            peg$silentFails++;\n            if (input.charCodeAt(peg$currPos) === 64) {\n              s6 = peg$c12;\n              peg$currPos++;\n            } else {\n              s6 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c13); }\n            }\n            peg$silentFails--;\n            if (s6 === peg$FAILED) {\n              s5 = void 0;\n            } else {\n              peg$currPos = s5;\n              s5 = peg$FAILED;\n            }\n            if (s5 !== peg$FAILED) {\n              s6 = peg$currPos;\n              peg$silentFails++;\n              if (input.charCodeAt(peg$currPos) === 60) {\n                s7 = peg$c78;\n                peg$currPos++;\n              } else {\n                s7 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c79); }\n              }\n              peg$silentFails--;\n              if (s7 === peg$FAILED) {\n                s6 = void 0;\n              } else {\n                peg$currPos = s6;\n                s6 = peg$FAILED;\n              }\n              if (s6 !== peg$FAILED) {\n                if (input.length > peg$currPos) {\n                  s7 = input.charAt(peg$currPos);\n                  peg$currPos++;\n                } else {\n                  s7 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c20); }\n                }\n                if (s7 !== peg$FAILED) {\n                  s4 = [s4, s5, s6, s7];\n                  s3 = s4;\n                } else {\n                  peg$currPos = s3;\n                  s3 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        }\n      } else {\n        s2 = peg$FAILED;\n      }\n      if (s2 !== peg$FAILED) {\n        s1 = input.substring(s1, peg$currPos);\n      } else {\n        s1 = s2;\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c301();\n      }\n      s0 = s1;\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 64) {\n          s1 = peg$c12;\n          peg$currPos++;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c13); }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parseVariableReference();\n          if (s2 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c371(s2);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.charCodeAt(peg$currPos) === 60) {\n            s1 = peg$c78;\n            peg$currPos++;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c79); }\n          }\n          if (s1 !== peg$FAILED) {\n            s2 = peg$parseAssetName();\n            if (s2 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 62) {\n                s3 = peg$c80;\n                peg$currPos++;\n              } else {\n                s3 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c81); }\n              }\n              if (s3 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c372(s2);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n          if (s0 === peg$FAILED) {\n            s0 = peg$parseTemplateStringEscapedCharacterPart();\n            if (s0 === peg$FAILED) {\n              s0 = peg$parseTemplateStringSoundEffectPart();\n              if (s0 === peg$FAILED) {\n                s0 = peg$parseTemplateStringExpressionPart();\n                if (s0 === peg$FAILED) {\n                  s0 = peg$parseTemplateStringInterjectionPart();\n                  if (s0 === peg$FAILED) {\n                    s0 = peg$parseTemplateStringPausePart();\n                    if (s0 === peg$FAILED) {\n                      s0 = peg$parseTemplateStringTaggedPart();\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseVariableReference() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 117,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseExistingIdentifier();\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$parseVariableReferenceTail();\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          s3 = peg$parseVariableReferenceTail();\n        }\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c373(s1, s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseVariableReferenceTail() {\n      var s0, s1, s2, s3, s4, s5;\n\n      var key    = peg$currPos * 197 + 118,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 91) {\n        s1 = peg$c374;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c375); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = [];\n          s4 = peg$parseDigit();\n          while (s4 !== peg$FAILED) {\n            s3.push(s4);\n            s4 = peg$parseDigit();\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse__();\n            if (s4 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 93) {\n                s5 = peg$c376;\n                peg$currPos++;\n              } else {\n                s5 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c377); }\n              }\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c378(s3);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 91) {\n          s1 = peg$c374;\n          peg$currPos++;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c375); }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parse__();\n          if (s2 !== peg$FAILED) {\n            s3 = peg$parseQuotedString();\n            if (s3 !== peg$FAILED) {\n              s4 = peg$parse__();\n              if (s4 !== peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 93) {\n                  s5 = peg$c376;\n                  peg$currPos++;\n                } else {\n                  s5 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c377); }\n                }\n                if (s5 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s1 = peg$c379(s3);\n                  s0 = s1;\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.charCodeAt(peg$currPos) === 46) {\n            s1 = peg$c148;\n            peg$currPos++;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c149); }\n          }\n          if (s1 !== peg$FAILED) {\n            s2 = peg$parseIdentifier();\n            if (s2 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c380(s2);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseSlotVariableReference() {\n      var s0, s1, s2, s3, s4;\n\n      var key    = peg$currPos * 197 + 119,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 36) {\n        s1 = peg$c182;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c183); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseSlotIdentifier();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseInteger();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c381(s2, s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 36) {\n          s1 = peg$c182;\n          peg$currPos++;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c183); }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parseSlotIdentifier();\n          if (s2 !== peg$FAILED) {\n            s3 = [];\n            s4 = peg$parseVariableReferenceTail();\n            while (s4 !== peg$FAILED) {\n              s3.push(s4);\n              s4 = peg$parseVariableReferenceTail();\n            }\n            if (s3 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c373(s2, s3);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.charCodeAt(peg$currPos) === 36) {\n            s1 = peg$c182;\n            peg$currPos++;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c183); }\n          }\n          if (s1 !== peg$FAILED) {\n            s2 = [];\n            s3 = peg$parseMostCharacters();\n            while (s3 !== peg$FAILED) {\n              s2.push(s3);\n              s3 = peg$parseMostCharacters();\n            }\n            if (s2 !== peg$FAILED) {\n              s3 = [];\n              s4 = peg$parseVariableReferenceTail();\n              while (s4 !== peg$FAILED) {\n                s3.push(s4);\n                s4 = peg$parseVariableReferenceTail();\n              }\n              if (s3 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c382(s2, s3);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseSlotIdentifier() {\n      var s0, s1, s2;\n\n      var key    = peg$currPos * 197 + 120,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      s0 = peg$currPos;\n      s1 = [];\n      if (peg$c128.test(input.charAt(peg$currPos))) {\n        s2 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s2 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c129); }\n      }\n      if (s2 === peg$FAILED) {\n        if (peg$c130.test(input.charAt(peg$currPos))) {\n          s2 = input.charAt(peg$currPos);\n          peg$currPos++;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c131); }\n        }\n        if (s2 === peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 45) {\n            s2 = peg$c134;\n            peg$currPos++;\n          } else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c135); }\n          }\n        }\n      }\n      if (s2 !== peg$FAILED) {\n        while (s2 !== peg$FAILED) {\n          s1.push(s2);\n          if (peg$c128.test(input.charAt(peg$currPos))) {\n            s2 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c129); }\n          }\n          if (s2 === peg$FAILED) {\n            if (peg$c130.test(input.charAt(peg$currPos))) {\n              s2 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s2 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c131); }\n            }\n            if (s2 === peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 45) {\n                s2 = peg$c134;\n                peg$currPos++;\n              } else {\n                s2 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c135); }\n              }\n            }\n          }\n        }\n      } else {\n        s1 = peg$FAILED;\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c366();\n      }\n      s0 = s1;\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c383); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseFunctionCallStatement() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 121,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseFunctionCall();\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c384(s1);\n      }\n      s0 = s1;\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseExpressionString() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 122,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      s0 = peg$currPos;\n      s1 = peg$parseLogicalExpr();\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c386(s1);\n      }\n      s0 = s1;\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c385); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseLogicalExpr() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 123,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseComparisonExpr();\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$parseLogicalExprTail();\n        if (s3 !== peg$FAILED) {\n          while (s3 !== peg$FAILED) {\n            s2.push(s3);\n            s3 = peg$parseLogicalExprTail();\n          }\n        } else {\n          s2 = peg$FAILED;\n        }\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c387(s1, s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseComparisonExpr();\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseLogicalExprTail() {\n      var s0, s1, s2, s3, s4;\n\n      var key    = peg$currPos * 197 + 124,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parse__();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseExpressionBooleanOperator();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parse__();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parseComparisonExpr();\n            if (s4 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c388(s2, s4);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseExpressionBooleanOperator() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 125,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      if (input.substr(peg$currPos, 3) === peg$c390) {\n        s0 = peg$c390;\n        peg$currPos += 3;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c391); }\n      }\n      if (s0 === peg$FAILED) {\n        if (input.substr(peg$currPos, 2) === peg$c162) {\n          s0 = peg$c162;\n          peg$currPos += 2;\n        } else {\n          s0 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c163); }\n        }\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c389); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseComparisonExpr() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 126,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseAdditiveExpr();\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$parseComparisonExprTail();\n        if (s3 !== peg$FAILED) {\n          while (s3 !== peg$FAILED) {\n            s2.push(s3);\n            s3 = peg$parseComparisonExprTail();\n          }\n        } else {\n          s2 = peg$FAILED;\n        }\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c387(s1, s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseAdditiveExpr();\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseComparisonExprTail() {\n      var s0, s1, s2, s3, s4;\n\n      var key    = peg$currPos * 197 + 127,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      s0 = peg$currPos;\n      s1 = peg$parse__();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseExpressionCompareOperator();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parse__();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parseAdditiveExpr();\n            if (s4 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c393(s2, s4);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c392); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseExpressionCompareOperator() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 128,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      if (input.substr(peg$currPos, 2) === peg$c76) {\n        s0 = peg$c76;\n        peg$currPos += 2;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c77); }\n      }\n      if (s0 === peg$FAILED) {\n        if (input.substr(peg$currPos, 2) === peg$c74) {\n          s0 = peg$c74;\n          peg$currPos += 2;\n        } else {\n          s0 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c75); }\n        }\n        if (s0 === peg$FAILED) {\n          if (input.substr(peg$currPos, 2) === peg$c72) {\n            s0 = peg$c72;\n            peg$currPos += 2;\n          } else {\n            s0 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c73); }\n          }\n          if (s0 === peg$FAILED) {\n            if (input.substr(peg$currPos, 2) === peg$c70) {\n              s0 = peg$c70;\n              peg$currPos += 2;\n            } else {\n              s0 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c71); }\n            }\n            if (s0 === peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 62) {\n                s0 = peg$c80;\n                peg$currPos++;\n              } else {\n                s0 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c81); }\n              }\n              if (s0 === peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 60) {\n                  s0 = peg$c78;\n                  peg$currPos++;\n                } else {\n                  s0 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c79); }\n                }\n              }\n            }\n          }\n        }\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c392); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseAdditiveExpr() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 129,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseMultiplicativeExpr();\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$parseAdditiveExprTail();\n        if (s3 !== peg$FAILED) {\n          while (s3 !== peg$FAILED) {\n            s2.push(s3);\n            s3 = peg$parseAdditiveExprTail();\n          }\n        } else {\n          s2 = peg$FAILED;\n        }\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c387(s1, s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseMultiplicativeExpr();\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseAdditiveExprTail() {\n      var s0, s1, s2, s3, s4;\n\n      var key    = peg$currPos * 197 + 130,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      s0 = peg$currPos;\n      s1 = peg$parse__();\n      if (s1 !== peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 43) {\n          s2 = peg$c395;\n          peg$currPos++;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c396); }\n        }\n        if (s2 === peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 45) {\n            s2 = peg$c134;\n            peg$currPos++;\n          } else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c135); }\n          }\n        }\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parse__();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parseMultiplicativeExpr();\n            if (s4 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c393(s2, s4);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c394); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseMultiplicativeExpr() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 131,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 3) === peg$c397) {\n        s1 = peg$c397;\n        peg$currPos += 3;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c398); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseMultiplicativeExpr();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c399(s1, s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = peg$parseExpressionValue();\n        if (s1 !== peg$FAILED) {\n          s2 = [];\n          s3 = peg$parseMultiplicativeExprTail();\n          if (s3 !== peg$FAILED) {\n            while (s3 !== peg$FAILED) {\n              s2.push(s3);\n              s3 = peg$parseMultiplicativeExprTail();\n            }\n          } else {\n            s2 = peg$FAILED;\n          }\n          if (s2 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c387(s1, s2);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n          s0 = peg$parseExpressionValue();\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseMultiplicativeExprTail() {\n      var s0, s1, s2, s3, s4;\n\n      var key    = peg$currPos * 197 + 132,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      s0 = peg$currPos;\n      s1 = peg$parse__();\n      if (s1 !== peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 42) {\n          s2 = peg$c400;\n          peg$currPos++;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c401); }\n        }\n        if (s2 === peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 47) {\n            s2 = peg$c82;\n            peg$currPos++;\n          } else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c83); }\n          }\n        }\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parse__();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parseExpressionValue();\n            if (s4 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c393(s2, s4);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c394); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseExpressionValue() {\n      var s0, s1, s2, s3, s4, s5;\n\n      var key    = peg$currPos * 197 + 133,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 40) {\n        s1 = peg$c146;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c147); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseLogicalExpr();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse__();\n            if (s4 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 41) {\n                s5 = peg$c299;\n                peg$currPos++;\n              } else {\n                s5 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c300); }\n              }\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c402(s3);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseFunctionCall();\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.charCodeAt(peg$currPos) === 64) {\n            s1 = peg$c12;\n            peg$currPos++;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c13); }\n          }\n          if (s1 !== peg$FAILED) {\n            s2 = peg$parseVariableReference();\n            if (s2 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c343(s2);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n          if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            if (input.substr(peg$currPos, 7) === peg$c58) {\n              s1 = peg$c58;\n              peg$currPos += 7;\n            } else {\n              s1 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c59); }\n            }\n            if (s1 !== peg$FAILED) {\n              s2 = peg$parseVariableReference();\n              if (s2 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c344(s2);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n            if (s0 === peg$FAILED) {\n              s0 = peg$currPos;\n              s1 = peg$parseSlotVariableReference();\n              if (s1 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c403(s1);\n              }\n              s0 = s1;\n              if (s0 === peg$FAILED) {\n                s0 = peg$parseStringLiteral();\n                if (s0 === peg$FAILED) {\n                  s0 = peg$parseSingleQuotedStringLiteral();\n                  if (s0 === peg$FAILED) {\n                    s0 = peg$parseBooleanLiteral();\n                    if (s0 === peg$FAILED) {\n                      s0 = peg$parseLocalVariableReference();\n                      if (s0 === peg$FAILED) {\n                        s0 = peg$parseNumber();\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseLocalVariableReference() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 134,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseVariableReference();\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c404(s1);\n      }\n      s0 = s1;\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseFunctionCall() {\n      var s0, s1, s2, s3, s4;\n\n      var key    = peg$currPos * 197 + 135,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseVariableReference();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseFunctionCallArguments();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c405(s1, s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 64) {\n          s1 = peg$c12;\n          peg$currPos++;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c13); }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parseVariableReference();\n          if (s2 !== peg$FAILED) {\n            s3 = peg$parse__();\n            if (s3 !== peg$FAILED) {\n              s4 = peg$parseFunctionCallArguments();\n              if (s4 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c406(s2, s4);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseFunctionCallArguments() {\n      var s0, s1, s2, s3, s4, s5, s6;\n\n      var key    = peg$currPos * 197 + 136,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 40) {\n        s1 = peg$c146;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c147); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseExpressionString();\n          if (s3 !== peg$FAILED) {\n            s4 = [];\n            s5 = peg$parseFunctionCallArgumentsTail();\n            if (s5 !== peg$FAILED) {\n              while (s5 !== peg$FAILED) {\n                s4.push(s5);\n                s5 = peg$parseFunctionCallArgumentsTail();\n              }\n            } else {\n              s4 = peg$FAILED;\n            }\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parse__();\n              if (s5 !== peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 41) {\n                  s6 = peg$c299;\n                  peg$currPos++;\n                } else {\n                  s6 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c300); }\n                }\n                if (s6 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s1 = peg$c407(s3, s4);\n                  s0 = s1;\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 40) {\n          s1 = peg$c146;\n          peg$currPos++;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c147); }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parse__();\n          if (s2 !== peg$FAILED) {\n            s3 = peg$parseExpressionString();\n            if (s3 !== peg$FAILED) {\n              s4 = peg$parse__();\n              if (s4 !== peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 41) {\n                  s5 = peg$c299;\n                  peg$currPos++;\n                } else {\n                  s5 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c300); }\n                }\n                if (s5 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s1 = peg$c408(s3);\n                  s0 = s1;\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.substr(peg$currPos, 2) === peg$c409) {\n            s1 = peg$c409;\n            peg$currPos += 2;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c410); }\n          }\n          if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c411();\n          }\n          s0 = s1;\n          if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            if (input.charCodeAt(peg$currPos) === 40) {\n              s1 = peg$c146;\n              peg$currPos++;\n            } else {\n              s1 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c147); }\n            }\n            if (s1 !== peg$FAILED) {\n              s2 = peg$parse__();\n              if (s2 !== peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 41) {\n                  s3 = peg$c299;\n                  peg$currPos++;\n                } else {\n                  s3 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c300); }\n                }\n                if (s3 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s1 = peg$c411();\n                  s0 = s1;\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseFunctionCallArgumentsTail() {\n      var s0, s1, s2, s3, s4;\n\n      var key    = peg$currPos * 197 + 137,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parse__();\n      if (s1 !== peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 44) {\n          s2 = peg$c40;\n          peg$currPos++;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c41); }\n        }\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parse__();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parseExpressionString();\n            if (s4 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c412(s4);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseStringLiteral() {\n      var s0, s1, s2, s3, s4, s5;\n\n      var key    = peg$currPos * 197 + 138,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 34) {\n        s1 = peg$c164;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c165); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$currPos;\n        s4 = peg$currPos;\n        peg$silentFails++;\n        if (input.charCodeAt(peg$currPos) === 34) {\n          s5 = peg$c164;\n          peg$currPos++;\n        } else {\n          s5 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c165); }\n        }\n        peg$silentFails--;\n        if (s5 === peg$FAILED) {\n          s4 = void 0;\n        } else {\n          peg$currPos = s4;\n          s4 = peg$FAILED;\n        }\n        if (s4 !== peg$FAILED) {\n          if (input.length > peg$currPos) {\n            s5 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c20); }\n          }\n          if (s5 !== peg$FAILED) {\n            s4 = [s4, s5];\n            s3 = s4;\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          s3 = peg$currPos;\n          s4 = peg$currPos;\n          peg$silentFails++;\n          if (input.charCodeAt(peg$currPos) === 34) {\n            s5 = peg$c164;\n            peg$currPos++;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c165); }\n          }\n          peg$silentFails--;\n          if (s5 === peg$FAILED) {\n            s4 = void 0;\n          } else {\n            peg$currPos = s4;\n            s4 = peg$FAILED;\n          }\n          if (s4 !== peg$FAILED) {\n            if (input.length > peg$currPos) {\n              s5 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s5 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c20); }\n            }\n            if (s5 !== peg$FAILED) {\n              s4 = [s4, s5];\n              s3 = s4;\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        }\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 34) {\n            s3 = peg$c164;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c165); }\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c413(s2);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseSingleQuotedStringLiteral() {\n      var s0, s1, s2, s3, s4, s5;\n\n      var key    = peg$currPos * 197 + 139,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 39) {\n        s1 = peg$c414;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c415); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$currPos;\n        s4 = peg$currPos;\n        peg$silentFails++;\n        if (input.charCodeAt(peg$currPos) === 39) {\n          s5 = peg$c414;\n          peg$currPos++;\n        } else {\n          s5 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c415); }\n        }\n        peg$silentFails--;\n        if (s5 === peg$FAILED) {\n          s4 = void 0;\n        } else {\n          peg$currPos = s4;\n          s4 = peg$FAILED;\n        }\n        if (s4 !== peg$FAILED) {\n          if (input.length > peg$currPos) {\n            s5 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c20); }\n          }\n          if (s5 !== peg$FAILED) {\n            s4 = [s4, s5];\n            s3 = s4;\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          s3 = peg$currPos;\n          s4 = peg$currPos;\n          peg$silentFails++;\n          if (input.charCodeAt(peg$currPos) === 39) {\n            s5 = peg$c414;\n            peg$currPos++;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c415); }\n          }\n          peg$silentFails--;\n          if (s5 === peg$FAILED) {\n            s4 = void 0;\n          } else {\n            peg$currPos = s4;\n            s4 = peg$FAILED;\n          }\n          if (s4 !== peg$FAILED) {\n            if (input.length > peg$currPos) {\n              s5 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s5 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c20); }\n            }\n            if (s5 !== peg$FAILED) {\n              s4 = [s4, s5];\n              s3 = s4;\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        }\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 39) {\n            s3 = peg$c414;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c415); }\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c413(s2);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseStringLiteralList() {\n      var s0, s1, s2, s3, s4;\n\n      var key    = peg$currPos * 197 + 140,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseStringLiteral();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = [];\n          s4 = peg$parseStringLiteralListTail();\n          while (s4 !== peg$FAILED) {\n            s3.push(s4);\n            s4 = peg$parseStringLiteralListTail();\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c50(s1, s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseStringLiteralListTail() {\n      var s0, s1, s2, s3, s4;\n\n      var key    = peg$currPos * 197 + 141,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parse__();\n      if (s1 !== peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 44) {\n          s2 = peg$c40;\n          peg$currPos++;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c41); }\n        }\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parse__r();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parseStringLiteral();\n            if (s4 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c416(s4);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseAssetName() {\n      var s0, s1, s2, s3, s4;\n\n      var key    = peg$currPos * 197 + 142,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (peg$c417.test(input.charAt(peg$currPos))) {\n        s1 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c418); }\n      }\n      if (s1 === peg$FAILED) {\n        s1 = null;\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$parseAssetNameDottedSegment();\n        if (s3 !== peg$FAILED) {\n          while (s3 !== peg$FAILED) {\n            s2.push(s3);\n            s3 = peg$parseAssetNameDottedSegment();\n          }\n        } else {\n          s2 = peg$FAILED;\n        }\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseAssetNameWord();\n          if (s3 !== peg$FAILED) {\n            if (peg$c417.test(input.charAt(peg$currPos))) {\n              s4 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s4 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c418); }\n            }\n            if (s4 === peg$FAILED) {\n              s4 = null;\n            }\n            if (s4 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c419(s2, s3);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseAssetNameDottedSegment() {\n      var s0, s1, s2;\n\n      var key    = peg$currPos * 197 + 143,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseAssetNameWord();\n      if (s1 !== peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 46) {\n          s2 = peg$c148;\n          peg$currPos++;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c149); }\n        }\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c420(s1);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseAssetNameWord() {\n      var s0, s1, s2;\n\n      var key    = peg$currPos * 197 + 144,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = [];\n      if (peg$c128.test(input.charAt(peg$currPos))) {\n        s2 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s2 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c129); }\n      }\n      if (s2 === peg$FAILED) {\n        if (peg$c130.test(input.charAt(peg$currPos))) {\n          s2 = input.charAt(peg$currPos);\n          peg$currPos++;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c131); }\n        }\n        if (s2 === peg$FAILED) {\n          if (peg$c132.test(input.charAt(peg$currPos))) {\n            s2 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c133); }\n          }\n          if (s2 === peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 95) {\n              s2 = peg$c421;\n              peg$currPos++;\n            } else {\n              s2 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c422); }\n            }\n            if (s2 === peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 45) {\n                s2 = peg$c134;\n                peg$currPos++;\n              } else {\n                s2 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c135); }\n              }\n              if (s2 === peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 47) {\n                  s2 = peg$c82;\n                  peg$currPos++;\n                } else {\n                  s2 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c83); }\n                }\n              }\n            }\n          }\n        }\n      }\n      if (s2 !== peg$FAILED) {\n        while (s2 !== peg$FAILED) {\n          s1.push(s2);\n          if (peg$c128.test(input.charAt(peg$currPos))) {\n            s2 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c129); }\n          }\n          if (s2 === peg$FAILED) {\n            if (peg$c130.test(input.charAt(peg$currPos))) {\n              s2 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s2 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c131); }\n            }\n            if (s2 === peg$FAILED) {\n              if (peg$c132.test(input.charAt(peg$currPos))) {\n                s2 = input.charAt(peg$currPos);\n                peg$currPos++;\n              } else {\n                s2 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c133); }\n              }\n              if (s2 === peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 95) {\n                  s2 = peg$c421;\n                  peg$currPos++;\n                } else {\n                  s2 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c422); }\n                }\n                if (s2 === peg$FAILED) {\n                  if (input.charCodeAt(peg$currPos) === 45) {\n                    s2 = peg$c134;\n                    peg$currPos++;\n                  } else {\n                    s2 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$c135); }\n                  }\n                  if (s2 === peg$FAILED) {\n                    if (input.charCodeAt(peg$currPos) === 47) {\n                      s2 = peg$c82;\n                      peg$currPos++;\n                    } else {\n                      s2 = peg$FAILED;\n                      if (peg$silentFails === 0) { peg$fail(peg$c83); }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      } else {\n        s1 = peg$FAILED;\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c136();\n      }\n      s0 = s1;\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseAssetSoundBank() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 145,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseAssetSoundBankPath();\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c423(s1);\n      }\n      s0 = s1;\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseAssetSoundBankPath() {\n      var s0, s1, s2, s3, s4;\n\n      var key    = peg$currPos * 197 + 146,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (peg$c417.test(input.charAt(peg$currPos))) {\n        s1 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c418); }\n      }\n      if (s1 === peg$FAILED) {\n        s1 = null;\n      }\n      if (s1 !== peg$FAILED) {\n        if (input.substr(peg$currPos, 12) === peg$c424) {\n          s2 = peg$c424;\n          peg$currPos += 12;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c425); }\n        }\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseAssetNameWord();\n          if (s3 !== peg$FAILED) {\n            if (peg$c417.test(input.charAt(peg$currPos))) {\n              s4 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s4 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c418); }\n            }\n            if (s4 === peg$FAILED) {\n              s4 = null;\n            }\n            if (s4 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c426(s2, s3);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseAssetURL() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 147,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseAssetURLPath();\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c427(s1);\n      }\n      s0 = s1;\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseAssetURLPath() {\n      var s0, s1, s2, s3, s4;\n\n      var key    = peg$currPos * 197 + 148,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (peg$c417.test(input.charAt(peg$currPos))) {\n        s1 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c418); }\n      }\n      if (s1 === peg$FAILED) {\n        s1 = null;\n      }\n      if (s1 !== peg$FAILED) {\n        if (input.substr(peg$currPos, 7) === peg$c428) {\n          s2 = peg$c428;\n          peg$currPos += 7;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c429); }\n        }\n        if (s2 === peg$FAILED) {\n          if (input.substr(peg$currPos, 8) === peg$c430) {\n            s2 = peg$c430;\n            peg$currPos += 8;\n          } else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c431); }\n          }\n        }\n        if (s2 !== peg$FAILED) {\n          s3 = [];\n          if (peg$c432.test(input.charAt(peg$currPos))) {\n            s4 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s4 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c433); }\n          }\n          while (s4 !== peg$FAILED) {\n            s3.push(s4);\n            if (peg$c432.test(input.charAt(peg$currPos))) {\n              s4 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s4 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c433); }\n            }\n          }\n          if (s3 !== peg$FAILED) {\n            if (peg$c417.test(input.charAt(peg$currPos))) {\n              s4 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s4 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c418); }\n            }\n            if (s4 === peg$FAILED) {\n              s4 = null;\n            }\n            if (s4 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c434(s2, s3);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseJsonFileName() {\n      var s0, s1, s2, s3, s4;\n\n      var key    = peg$currPos * 197 + 149,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = [];\n      s2 = peg$parseAssetNameDottedSegment();\n      if (s2 !== peg$FAILED) {\n        while (s2 !== peg$FAILED) {\n          s1.push(s2);\n          s2 = peg$parseAssetNameDottedSegment();\n        }\n      } else {\n        s1 = peg$FAILED;\n      }\n      if (s1 !== peg$FAILED) {\n        if (input.substr(peg$currPos, 4) === peg$c435) {\n          s2 = peg$c435;\n          peg$currPos += 4;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c436); }\n        }\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c437(s1, s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 34) {\n          s1 = peg$c164;\n          peg$currPos++;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c165); }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = [];\n          s3 = peg$parseAssetNameDottedSegment();\n          if (s3 !== peg$FAILED) {\n            while (s3 !== peg$FAILED) {\n              s2.push(s3);\n              s3 = peg$parseAssetNameDottedSegment();\n            }\n          } else {\n            s2 = peg$FAILED;\n          }\n          if (s2 !== peg$FAILED) {\n            if (input.substr(peg$currPos, 4) === peg$c435) {\n              s3 = peg$c435;\n              peg$currPos += 4;\n            } else {\n              s3 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c436); }\n            }\n            if (s3 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 34) {\n                s4 = peg$c164;\n                peg$currPos++;\n              } else {\n                s4 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c165); }\n              }\n              if (s4 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c437(s2, s3);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseFileFunctionReference() {\n      var s0, s1, s2, s3, s4;\n\n      var key    = peg$currPos * 197 + 150,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = [];\n      s2 = peg$currPos;\n      s3 = peg$parseAssetNameWord();\n      if (s3 !== peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 46) {\n          s4 = peg$c148;\n          peg$currPos++;\n        } else {\n          s4 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c149); }\n        }\n        if (s4 !== peg$FAILED) {\n          s3 = [s3, s4];\n          s2 = s3;\n        } else {\n          peg$currPos = s2;\n          s2 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s2;\n        s2 = peg$FAILED;\n      }\n      if (s2 !== peg$FAILED) {\n        while (s2 !== peg$FAILED) {\n          s1.push(s2);\n          s2 = peg$currPos;\n          s3 = peg$parseAssetNameWord();\n          if (s3 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 46) {\n              s4 = peg$c148;\n              peg$currPos++;\n            } else {\n              s4 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c149); }\n            }\n            if (s4 !== peg$FAILED) {\n              s3 = [s3, s4];\n              s2 = s3;\n            } else {\n              peg$currPos = s2;\n              s2 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s2;\n            s2 = peg$FAILED;\n          }\n        }\n      } else {\n        s1 = peg$FAILED;\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseCodeExtension();\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 58) {\n            s3 = peg$c142;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c143); }\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parseAssetNameWord();\n            if (s4 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c438(s1, s2, s4);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseCodeExtension() {\n      var s0;\n\n      var key    = peg$currPos * 197 + 151,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      if (input.substr(peg$currPos, 6) === peg$c439) {\n        s0 = peg$c439;\n        peg$currPos += 6;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c440); }\n      }\n      if (s0 === peg$FAILED) {\n        if (input.substr(peg$currPos, 2) === peg$c441) {\n          s0 = peg$c441;\n          peg$currPos += 2;\n        } else {\n          s0 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c442); }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseNewDataTableStatement() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n\n      var key    = peg$currPos * 197 + 152,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 5) === peg$c443) {\n        s1 = peg$c443;\n        peg$currPos += 5;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c444); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse___();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseIdentifier();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse___();\n            if (s4 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 61) {\n                s5 = peg$c52;\n                peg$currPos++;\n              } else {\n                s5 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c53); }\n              }\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parse___();\n                if (s6 !== peg$FAILED) {\n                  s7 = peg$parseIdentifier();\n                  if (s7 !== peg$FAILED) {\n                    s8 = peg$parse__();\n                    if (s8 !== peg$FAILED) {\n                      s9 = [];\n                      s10 = peg$parseDataTableHeaderTail();\n                      while (s10 !== peg$FAILED) {\n                        s9.push(s10);\n                        s10 = peg$parseDataTableHeaderTail();\n                      }\n                      if (s9 !== peg$FAILED) {\n                        peg$savedPos = s0;\n                        s1 = peg$c445(s3, s7, s9);\n                        s0 = s1;\n                      } else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                      }\n                    } else {\n                      peg$currPos = s0;\n                      s0 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseDataTableHeaderTail() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 153,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 44) {\n        s1 = peg$c40;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c41); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseIdentifier();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c446(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseDataTableRowStatement() {\n      var s0, s1, s2, s3, s4;\n\n      var key    = peg$currPos * 197 + 154,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseDataTableItem();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = [];\n          s4 = peg$parseDataTableItemTail();\n          while (s4 !== peg$FAILED) {\n            s3.push(s4);\n            s4 = peg$parseDataTableItemTail();\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c447(s1, s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseDataTableItem() {\n      var s0, s1, s2, s3, s4, s5;\n\n      var key    = peg$currPos * 197 + 155,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = [];\n      s2 = peg$currPos;\n      s3 = peg$currPos;\n      peg$silentFails++;\n      if (input.charCodeAt(peg$currPos) === 124) {\n        s4 = peg$c294;\n        peg$currPos++;\n      } else {\n        s4 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c295); }\n      }\n      peg$silentFails--;\n      if (s4 === peg$FAILED) {\n        s3 = void 0;\n      } else {\n        peg$currPos = s3;\n        s3 = peg$FAILED;\n      }\n      if (s3 !== peg$FAILED) {\n        s4 = peg$currPos;\n        peg$silentFails++;\n        s5 = peg$parseLineTerminatorSequence();\n        peg$silentFails--;\n        if (s5 === peg$FAILED) {\n          s4 = void 0;\n        } else {\n          peg$currPos = s4;\n          s4 = peg$FAILED;\n        }\n        if (s4 !== peg$FAILED) {\n          if (input.length > peg$currPos) {\n            s5 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c20); }\n          }\n          if (s5 !== peg$FAILED) {\n            s3 = [s3, s4, s5];\n            s2 = s3;\n          } else {\n            peg$currPos = s2;\n            s2 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s2;\n          s2 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s2;\n        s2 = peg$FAILED;\n      }\n      while (s2 !== peg$FAILED) {\n        s1.push(s2);\n        s2 = peg$currPos;\n        s3 = peg$currPos;\n        peg$silentFails++;\n        if (input.charCodeAt(peg$currPos) === 124) {\n          s4 = peg$c294;\n          peg$currPos++;\n        } else {\n          s4 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c295); }\n        }\n        peg$silentFails--;\n        if (s4 === peg$FAILED) {\n          s3 = void 0;\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n        if (s3 !== peg$FAILED) {\n          s4 = peg$currPos;\n          peg$silentFails++;\n          s5 = peg$parseLineTerminatorSequence();\n          peg$silentFails--;\n          if (s5 === peg$FAILED) {\n            s4 = void 0;\n          } else {\n            peg$currPos = s4;\n            s4 = peg$FAILED;\n          }\n          if (s4 !== peg$FAILED) {\n            if (input.length > peg$currPos) {\n              s5 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s5 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c20); }\n            }\n            if (s5 !== peg$FAILED) {\n              s3 = [s3, s4, s5];\n              s2 = s3;\n            } else {\n              peg$currPos = s2;\n              s2 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s2;\n            s2 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s2;\n          s2 = peg$FAILED;\n        }\n      }\n      if (s1 !== peg$FAILED) {\n        s0 = input.substring(s0, peg$currPos);\n      } else {\n        s0 = s1;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseDataTableItemTail() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 156,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 124) {\n        s1 = peg$c294;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c295); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseDataTableItem();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c448(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseLineRemainder() {\n      var s0, s1, s2, s3, s4;\n\n      var key    = peg$currPos * 197 + 157,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = [];\n      s2 = peg$currPos;\n      s3 = peg$currPos;\n      peg$silentFails++;\n      s4 = peg$parseEndOfStatementSequence();\n      peg$silentFails--;\n      if (s4 === peg$FAILED) {\n        s3 = void 0;\n      } else {\n        peg$currPos = s3;\n        s3 = peg$FAILED;\n      }\n      if (s3 !== peg$FAILED) {\n        if (input.length > peg$currPos) {\n          s4 = input.charAt(peg$currPos);\n          peg$currPos++;\n        } else {\n          s4 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c20); }\n        }\n        if (s4 !== peg$FAILED) {\n          s3 = [s3, s4];\n          s2 = s3;\n        } else {\n          peg$currPos = s2;\n          s2 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s2;\n        s2 = peg$FAILED;\n      }\n      while (s2 !== peg$FAILED) {\n        s1.push(s2);\n        s2 = peg$currPos;\n        s3 = peg$currPos;\n        peg$silentFails++;\n        s4 = peg$parseEndOfStatementSequence();\n        peg$silentFails--;\n        if (s4 === peg$FAILED) {\n          s3 = void 0;\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n        if (s3 !== peg$FAILED) {\n          if (input.length > peg$currPos) {\n            s4 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s4 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c20); }\n          }\n          if (s4 !== peg$FAILED) {\n            s3 = [s3, s4];\n            s2 = s3;\n          } else {\n            peg$currPos = s2;\n            s2 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s2;\n          s2 = peg$FAILED;\n        }\n      }\n      if (s1 !== peg$FAILED) {\n        s0 = input.substring(s0, peg$currPos);\n      } else {\n        s0 = s1;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseLineTerminatorSequence() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 158,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      if (input.charCodeAt(peg$currPos) === 10) {\n        s0 = peg$c450;\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c451); }\n      }\n      if (s0 === peg$FAILED) {\n        if (input.substr(peg$currPos, 2) === peg$c452) {\n          s0 = peg$c452;\n          peg$currPos += 2;\n        } else {\n          s0 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c453); }\n        }\n        if (s0 === peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 13) {\n            s0 = peg$c454;\n            peg$currPos++;\n          } else {\n            s0 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c455); }\n          }\n          if (s0 === peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 8232) {\n              s0 = peg$c456;\n              peg$currPos++;\n            } else {\n              s0 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c457); }\n            }\n            if (s0 === peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 8233) {\n                s0 = peg$c458;\n                peg$currPos++;\n              } else {\n                s0 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c459); }\n              }\n            }\n          }\n        }\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c449); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseWhiteSpace() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 159,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      if (input.charCodeAt(peg$currPos) === 9) {\n        s0 = peg$c369;\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c370); }\n      }\n      if (s0 === peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 11) {\n          s0 = peg$c461;\n          peg$currPos++;\n        } else {\n          s0 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c462); }\n        }\n        if (s0 === peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 12) {\n            s0 = peg$c463;\n            peg$currPos++;\n          } else {\n            s0 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c464); }\n          }\n          if (s0 === peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 32) {\n              s0 = peg$c367;\n              peg$currPos++;\n            } else {\n              s0 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c368); }\n            }\n            if (s0 === peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 65279) {\n                s0 = peg$c465;\n                peg$currPos++;\n              } else {\n                s0 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c466); }\n              }\n              if (s0 === peg$FAILED) {\n                s0 = peg$parseZs();\n              }\n            }\n          }\n        }\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c460); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parse__() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 160,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      s0 = [];\n      s1 = peg$parseWhiteSpace();\n      while (s1 !== peg$FAILED) {\n        s0.push(s1);\n        s1 = peg$parseWhiteSpace();\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c467); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parse___() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 161,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      s0 = [];\n      s1 = peg$parseWhiteSpace();\n      if (s1 !== peg$FAILED) {\n        while (s1 !== peg$FAILED) {\n          s0.push(s1);\n          s1 = peg$parseWhiteSpace();\n        }\n      } else {\n        s0 = peg$FAILED;\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c468); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parse__r() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 162,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      s0 = [];\n      s1 = peg$parseWhiteSpace();\n      if (s1 === peg$FAILED) {\n        s1 = peg$parseLineTerminatorSequence();\n      }\n      while (s1 !== peg$FAILED) {\n        s0.push(s1);\n        s1 = peg$parseWhiteSpace();\n        if (s1 === peg$FAILED) {\n          s1 = peg$parseLineTerminatorSequence();\n        }\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c469); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseQuotedString() {\n      var s0, s1, s2, s3, s4;\n\n      var key    = peg$currPos * 197 + 163,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 34) {\n        s1 = peg$c164;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c165); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = [];\n          s4 = peg$parseQuotedStringCharacter();\n          while (s4 !== peg$FAILED) {\n            s3.push(s4);\n            s4 = peg$parseQuotedStringCharacter();\n          }\n          if (s3 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 34) {\n              s4 = peg$c164;\n              peg$currPos++;\n            } else {\n              s4 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c165); }\n            }\n            if (s4 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c470(s3);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseQuotedStringCharacter() {\n      var s0, s1, s2;\n\n      var key    = peg$currPos * 197 + 164,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 2) === peg$c327) {\n        s1 = peg$c327;\n        peg$currPos += 2;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c328); }\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c471();\n      }\n      s0 = s1;\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = peg$currPos;\n        peg$silentFails++;\n        if (input.charCodeAt(peg$currPos) === 34) {\n          s2 = peg$c164;\n          peg$currPos++;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c165); }\n        }\n        peg$silentFails--;\n        if (s2 === peg$FAILED) {\n          s1 = void 0;\n        } else {\n          peg$currPos = s1;\n          s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n          if (input.length > peg$currPos) {\n            s2 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c20); }\n          }\n          if (s2 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c296(s2);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseRegionCode() {\n      var s0, s1, s2, s3, s4, s5;\n\n      var key    = peg$currPos * 197 + 165,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$currPos;\n      s2 = peg$parseASCIICasedCharacter();\n      if (s2 !== peg$FAILED) {\n        s3 = peg$parseASCIICasedCharacter();\n        if (s3 !== peg$FAILED) {\n          s2 = [s2, s3];\n          s1 = s2;\n        } else {\n          peg$currPos = s1;\n          s1 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s1;\n        s1 = peg$FAILED;\n      }\n      if (s1 !== peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 45) {\n          s2 = peg$c134;\n          peg$currPos++;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c135); }\n        }\n        if (s2 !== peg$FAILED) {\n          s3 = peg$currPos;\n          s4 = peg$parseASCIICasedCharacter();\n          if (s4 !== peg$FAILED) {\n            s5 = peg$parseASCIICasedCharacter();\n            if (s5 !== peg$FAILED) {\n              s4 = [s4, s5];\n              s3 = s4;\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c472(s1, s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = peg$currPos;\n        s2 = peg$parseASCIICasedCharacter();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseASCIICasedCharacter();\n          if (s3 !== peg$FAILED) {\n            s2 = [s2, s3];\n            s1 = s2;\n          } else {\n            peg$currPos = s1;\n            s1 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s1;\n          s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c473();\n        }\n        s0 = s1;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseASCIICasedCharacter() {\n      var s0;\n\n      var key    = peg$currPos * 197 + 166,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      if (peg$c128.test(input.charAt(peg$currPos))) {\n        s0 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c129); }\n      }\n      if (s0 === peg$FAILED) {\n        if (peg$c130.test(input.charAt(peg$currPos))) {\n          s0 = input.charAt(peg$currPos);\n          peg$currPos++;\n        } else {\n          s0 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c131); }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseNumber() {\n      var s0;\n\n      var key    = peg$currPos * 197 + 167,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$parseFloat();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseInteger();\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseInteger() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 168,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 45) {\n        s1 = peg$c134;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c135); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$parseDigit();\n        if (s3 !== peg$FAILED) {\n          while (s3 !== peg$FAILED) {\n            s2.push(s3);\n            s3 = peg$parseDigit();\n          }\n        } else {\n          s2 = peg$FAILED;\n        }\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c474();\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = [];\n        s2 = peg$parseDigit();\n        if (s2 !== peg$FAILED) {\n          while (s2 !== peg$FAILED) {\n            s1.push(s2);\n            s2 = peg$parseDigit();\n          }\n        } else {\n          s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c474();\n        }\n        s0 = s1;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseFloat() {\n      var s0, s1, s2, s3, s4, s5;\n\n      var key    = peg$currPos * 197 + 169,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 45) {\n        s1 = peg$c134;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c135); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$parseDigit();\n        if (s3 !== peg$FAILED) {\n          while (s3 !== peg$FAILED) {\n            s2.push(s3);\n            s3 = peg$parseDigit();\n          }\n        } else {\n          s2 = peg$FAILED;\n        }\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 46) {\n            s3 = peg$c148;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c149); }\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = [];\n            s5 = peg$parseDigit();\n            if (s5 !== peg$FAILED) {\n              while (s5 !== peg$FAILED) {\n                s4.push(s5);\n                s5 = peg$parseDigit();\n              }\n            } else {\n              s4 = peg$FAILED;\n            }\n            if (s4 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c475();\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = [];\n        s2 = peg$parseDigit();\n        if (s2 !== peg$FAILED) {\n          while (s2 !== peg$FAILED) {\n            s1.push(s2);\n            s2 = peg$parseDigit();\n          }\n        } else {\n          s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 46) {\n            s2 = peg$c148;\n            peg$currPos++;\n          } else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c149); }\n          }\n          if (s2 !== peg$FAILED) {\n            s3 = [];\n            s4 = peg$parseDigit();\n            if (s4 !== peg$FAILED) {\n              while (s4 !== peg$FAILED) {\n                s3.push(s4);\n                s4 = peg$parseDigit();\n              }\n            } else {\n              s3 = peg$FAILED;\n            }\n            if (s3 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c475();\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseBooleanLiteral() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 170,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 4) === peg$c222) {\n        s1 = peg$c222;\n        peg$currPos += 4;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c223); }\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c18();\n      }\n      s0 = s1;\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 5) === peg$c224) {\n          s1 = peg$c224;\n          peg$currPos += 5;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c225); }\n        }\n        if (s1 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c476();\n        }\n        s0 = s1;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseIdentifier() {\n      var s0, s1, s2, s3, s4;\n\n      var key    = peg$currPos * 197 + 171,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      s0 = peg$currPos;\n      s1 = peg$currPos;\n      peg$silentFails++;\n      s2 = peg$currPos;\n      s3 = peg$parseReservedWord();\n      if (s3 !== peg$FAILED) {\n        s4 = peg$parse___();\n        if (s4 !== peg$FAILED) {\n          s3 = [s3, s4];\n          s2 = s3;\n        } else {\n          peg$currPos = s2;\n          s2 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s2;\n        s2 = peg$FAILED;\n      }\n      peg$silentFails--;\n      if (s2 === peg$FAILED) {\n        s1 = void 0;\n      } else {\n        peg$currPos = s1;\n        s1 = peg$FAILED;\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseIdentifierString();\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c478(s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = peg$parseReservedWord();\n        if (s1 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c479();\n        }\n        s0 = s1;\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c477); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseIdentifierString() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 172,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      s0 = peg$currPos;\n      s1 = peg$parseIdentifierStart();\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$parseIdentifierTail();\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          s3 = peg$parseIdentifierTail();\n        }\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c366();\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c477); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseIdentifierStart() {\n      var s0;\n\n      var key    = peg$currPos * 197 + 173,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$parseLl();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseLu();\n        if (s0 === peg$FAILED) {\n          s0 = peg$parseULl();\n          if (s0 === peg$FAILED) {\n            s0 = peg$parseLo();\n            if (s0 === peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 95) {\n                s0 = peg$c421;\n                peg$currPos++;\n              } else {\n                s0 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c422); }\n              }\n            }\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseIdentifierTail() {\n      var s0;\n\n      var key    = peg$currPos * 197 + 174,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$parseLl();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseLu();\n        if (s0 === peg$FAILED) {\n          s0 = peg$parseNd();\n          if (s0 === peg$FAILED) {\n            s0 = peg$parseULl();\n            if (s0 === peg$FAILED) {\n              s0 = peg$parseLo();\n              if (s0 === peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 95) {\n                  s0 = peg$c421;\n                  peg$currPos++;\n                } else {\n                  s0 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c422); }\n                }\n              }\n            }\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseDottedIdentifier() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 175,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseIdentifier();\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$parseDottedIdentifierTail();\n        if (s3 !== peg$FAILED) {\n          while (s3 !== peg$FAILED) {\n            s2.push(s3);\n            s3 = peg$parseDottedIdentifierTail();\n          }\n        } else {\n          s2 = peg$FAILED;\n        }\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c480(s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = peg$parseIdentifier();\n        if (s1 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c136();\n        }\n        s0 = s1;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseDottedIdentifierTail() {\n      var s0, s1, s2;\n\n      var key    = peg$currPos * 197 + 176,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 46) {\n        s1 = peg$c148;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c149); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseIdentifier();\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c136();\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseExistingIdentifier() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 177,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseIdentifierString();\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c478(s1);\n      }\n      s0 = s1;\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseExistingDottedIdentifier() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 178,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseExistingIdentifier();\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$parseDottedIdentifierTail();\n        if (s3 !== peg$FAILED) {\n          while (s3 !== peg$FAILED) {\n            s2.push(s3);\n            s3 = peg$parseDottedIdentifierTail();\n          }\n        } else {\n          s2 = peg$FAILED;\n        }\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c480(s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = peg$parseExistingIdentifier();\n        if (s1 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c136();\n        }\n        s0 = s1;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseStateName() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 179,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseReservedWord();\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$parseStateNameTailCharacters();\n        if (s3 !== peg$FAILED) {\n          while (s3 !== peg$FAILED) {\n            s2.push(s3);\n            s3 = peg$parseStateNameTailCharacters();\n          }\n        } else {\n          s2 = peg$FAILED;\n        }\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c136();\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = peg$parseReservedWord();\n        if (s1 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c481();\n        }\n        s0 = s1;\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          s1 = peg$parseLl();\n          if (s1 === peg$FAILED) {\n            s1 = peg$parseLu();\n            if (s1 === peg$FAILED) {\n              s1 = peg$parseULl();\n              if (s1 === peg$FAILED) {\n                s1 = peg$parseLo();\n              }\n            }\n          }\n          if (s1 !== peg$FAILED) {\n            s2 = [];\n            s3 = peg$parseStateNameTailCharacters();\n            while (s3 !== peg$FAILED) {\n              s2.push(s3);\n              s3 = peg$parseStateNameTailCharacters();\n            }\n            if (s2 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c136();\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseStateNameTailCharacters() {\n      var s0;\n\n      var key    = peg$currPos * 197 + 180,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$parseLl();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseLu();\n        if (s0 === peg$FAILED) {\n          s0 = peg$parseULl();\n          if (s0 === peg$FAILED) {\n            s0 = peg$parseLo();\n            if (s0 === peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 95) {\n                s0 = peg$c421;\n                peg$currPos++;\n              } else {\n                s0 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c422); }\n              }\n              if (s0 === peg$FAILED) {\n                s0 = peg$parseNd();\n              }\n            }\n          }\n        }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseHexColor() {\n      var s0, s1, s2, s3;\n\n      var key    = peg$currPos * 197 + 181,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseHexPair();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseHexPair();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseHexPair();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c366();\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseHexPair() {\n      var s0, s1, s2;\n\n      var key    = peg$currPos * 197 + 182,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      s0 = peg$currPos;\n      s1 = peg$parseHexDigit();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseHexDigit();\n        if (s2 !== peg$FAILED) {\n          s1 = [s1, s2];\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseHexDigit() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 183,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      if (peg$c132.test(input.charAt(peg$currPos))) {\n        s0 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c133); }\n      }\n      if (s0 === peg$FAILED) {\n        if (peg$c483.test(input.charAt(peg$currPos))) {\n          s0 = input.charAt(peg$currPos);\n          peg$currPos++;\n        } else {\n          s0 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c484); }\n        }\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c482); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseReservedWord() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 184,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      if (input.substr(peg$currPos, 7) === peg$c283) {\n        s0 = peg$c283;\n        peg$currPos += 7;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c284); }\n      }\n      if (s0 === peg$FAILED) {\n        if (input.substr(peg$currPos, 4) === peg$c115) {\n          s0 = peg$c115;\n          peg$currPos += 4;\n        } else {\n          s0 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c116); }\n        }\n        if (s0 === peg$FAILED) {\n          if (input.substr(peg$currPos, 6) === peg$c10) {\n            s0 = peg$c10;\n            peg$currPos += 6;\n          } else {\n            s0 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c11); }\n          }\n          if (s0 === peg$FAILED) {\n            if (input.substr(peg$currPos, 9) === peg$c122) {\n              s0 = peg$c122;\n              peg$currPos += 9;\n            } else {\n              s0 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c123); }\n            }\n            if (s0 === peg$FAILED) {\n              if (input.substr(peg$currPos, 3) === peg$c199) {\n                s0 = peg$c199;\n                peg$currPos += 3;\n              } else {\n                s0 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c200); }\n              }\n              if (s0 === peg$FAILED) {\n                if (input.substr(peg$currPos, 3) === peg$c38) {\n                  s0 = peg$c38;\n                  peg$currPos += 3;\n                } else {\n                  s0 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c39); }\n                }\n                if (s0 === peg$FAILED) {\n                  if (input.substr(peg$currPos, 2) === peg$c42) {\n                    s0 = peg$c42;\n                    peg$currPos += 2;\n                  } else {\n                    s0 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$c43); }\n                  }\n                  if (s0 === peg$FAILED) {\n                    if (input.substr(peg$currPos, 2) === peg$c24) {\n                      s0 = peg$c24;\n                      peg$currPos += 2;\n                    } else {\n                      s0 = peg$FAILED;\n                      if (peg$silentFails === 0) { peg$fail(peg$c25); }\n                    }\n                    if (s0 === peg$FAILED) {\n                      if (input.substr(peg$currPos, 4) === peg$c32) {\n                        s0 = peg$c32;\n                        peg$currPos += 4;\n                      } else {\n                        s0 = peg$FAILED;\n                        if (peg$silentFails === 0) { peg$fail(peg$c33); }\n                      }\n                      if (s0 === peg$FAILED) {\n                        if (input.substr(peg$currPos, 6) === peg$c486) {\n                          s0 = peg$c486;\n                          peg$currPos += 6;\n                        } else {\n                          s0 = peg$FAILED;\n                          if (peg$silentFails === 0) { peg$fail(peg$c487); }\n                        }\n                        if (s0 === peg$FAILED) {\n                          if (input.substr(peg$currPos, 6) === peg$c245) {\n                            s0 = peg$c245;\n                            peg$currPos += 6;\n                          } else {\n                            s0 = peg$FAILED;\n                            if (peg$silentFails === 0) { peg$fail(peg$c246); }\n                          }\n                          if (s0 === peg$FAILED) {\n                            if (input.substr(peg$currPos, 6) === peg$c202) {\n                              s0 = peg$c202;\n                              peg$currPos += 6;\n                            } else {\n                              s0 = peg$FAILED;\n                              if (peg$silentFails === 0) { peg$fail(peg$c203); }\n                            }\n                            if (s0 === peg$FAILED) {\n                              if (input.substr(peg$currPos, 10) === peg$c209) {\n                                s0 = peg$c209;\n                                peg$currPos += 10;\n                              } else {\n                                s0 = peg$FAILED;\n                                if (peg$silentFails === 0) { peg$fail(peg$c210); }\n                              }\n                              if (s0 === peg$FAILED) {\n                                if (input.substr(peg$currPos, 6) === peg$c207) {\n                                  s0 = peg$c207;\n                                  peg$currPos += 6;\n                                } else {\n                                  s0 = peg$FAILED;\n                                  if (peg$silentFails === 0) { peg$fail(peg$c208); }\n                                }\n                                if (s0 === peg$FAILED) {\n                                  if (input.substr(peg$currPos, 5) === peg$c176) {\n                                    s0 = peg$c176;\n                                    peg$currPos += 5;\n                                  } else {\n                                    s0 = peg$FAILED;\n                                    if (peg$silentFails === 0) { peg$fail(peg$c177); }\n                                  }\n                                  if (s0 === peg$FAILED) {\n                                    if (input.substr(peg$currPos, 3) === peg$c196) {\n                                      s0 = peg$c196;\n                                      peg$currPos += 3;\n                                    } else {\n                                      s0 = peg$FAILED;\n                                      if (peg$silentFails === 0) { peg$fail(peg$c197); }\n                                    }\n                                    if (s0 === peg$FAILED) {\n                                      if (input.substr(peg$currPos, 14) === peg$c289) {\n                                        s0 = peg$c289;\n                                        peg$currPos += 14;\n                                      } else {\n                                        s0 = peg$FAILED;\n                                        if (peg$silentFails === 0) { peg$fail(peg$c290); }\n                                      }\n                                      if (s0 === peg$FAILED) {\n                                        if (input.substr(peg$currPos, 6) === peg$c125) {\n                                          s0 = peg$c125;\n                                          peg$currPos += 6;\n                                        } else {\n                                          s0 = peg$FAILED;\n                                          if (peg$silentFails === 0) { peg$fail(peg$c126); }\n                                        }\n                                        if (s0 === peg$FAILED) {\n                                          if (input.substr(peg$currPos, 2) === peg$c162) {\n                                            s0 = peg$c162;\n                                            peg$currPos += 2;\n                                          } else {\n                                            s0 = peg$FAILED;\n                                            if (peg$silentFails === 0) { peg$fail(peg$c163); }\n                                          }\n                                          if (s0 === peg$FAILED) {\n                                            if (input.substr(peg$currPos, 9) === peg$c172) {\n                                              s0 = peg$c172;\n                                              peg$currPos += 9;\n                                            } else {\n                                              s0 = peg$FAILED;\n                                              if (peg$silentFails === 0) { peg$fail(peg$c173); }\n                                            }\n                                            if (s0 === peg$FAILED) {\n                                              if (input.substr(peg$currPos, 9) === peg$c112) {\n                                                s0 = peg$c112;\n                                                peg$currPos += 9;\n                                              } else {\n                                                s0 = peg$FAILED;\n                                                if (peg$silentFails === 0) { peg$fail(peg$c113); }\n                                              }\n                                              if (s0 === peg$FAILED) {\n                                                if (input.substr(peg$currPos, 4) === peg$c248) {\n                                                  s0 = peg$c248;\n                                                  peg$currPos += 4;\n                                                } else {\n                                                  s0 = peg$FAILED;\n                                                  if (peg$silentFails === 0) { peg$fail(peg$c249); }\n                                                }\n                                                if (s0 === peg$FAILED) {\n                                                  if (input.substr(peg$currPos, 8) === peg$c96) {\n                                                    s0 = peg$c96;\n                                                    peg$currPos += 8;\n                                                  } else {\n                                                    s0 = peg$FAILED;\n                                                    if (peg$silentFails === 0) { peg$fail(peg$c97); }\n                                                  }\n                                                  if (s0 === peg$FAILED) {\n                                                    if (input.substr(peg$currPos, 6) === peg$c286) {\n                                                      s0 = peg$c286;\n                                                      peg$currPos += 6;\n                                                    } else {\n                                                      s0 = peg$FAILED;\n                                                      if (peg$silentFails === 0) { peg$fail(peg$c287); }\n                                                    }\n                                                    if (s0 === peg$FAILED) {\n                                                      if (input.substr(peg$currPos, 3) === peg$c93) {\n                                                        s0 = peg$c93;\n                                                        peg$currPos += 3;\n                                                      } else {\n                                                        s0 = peg$FAILED;\n                                                        if (peg$silentFails === 0) { peg$fail(peg$c94); }\n                                                      }\n                                                      if (s0 === peg$FAILED) {\n                                                        if (input.substr(peg$currPos, 3) === peg$c220) {\n                                                          s0 = peg$c220;\n                                                          peg$currPos += 3;\n                                                        } else {\n                                                          s0 = peg$FAILED;\n                                                          if (peg$silentFails === 0) { peg$fail(peg$c221); }\n                                                        }\n                                                        if (s0 === peg$FAILED) {\n                                                          if (input.substr(peg$currPos, 9) === peg$c280) {\n                                                            s0 = peg$c280;\n                                                            peg$currPos += 9;\n                                                          } else {\n                                                            s0 = peg$FAILED;\n                                                            if (peg$silentFails === 0) { peg$fail(peg$c281); }\n                                                          }\n                                                          if (s0 === peg$FAILED) {\n                                                            if (input.substr(peg$currPos, 18) === peg$c137) {\n                                                              s0 = peg$c137;\n                                                              peg$currPos += 18;\n                                                            } else {\n                                                              s0 = peg$FAILED;\n                                                              if (peg$silentFails === 0) { peg$fail(peg$c138); }\n                                                            }\n                                                            if (s0 === peg$FAILED) {\n                                                              if (input.substr(peg$currPos, 6) === peg$c46) {\n                                                                s0 = peg$c46;\n                                                                peg$currPos += 6;\n                                                              } else {\n                                                                s0 = peg$FAILED;\n                                                                if (peg$silentFails === 0) { peg$fail(peg$c47); }\n                                                              }\n                                                              if (s0 === peg$FAILED) {\n                                                                if (input.substr(peg$currPos, 4) === peg$c227) {\n                                                                  s0 = peg$c227;\n                                                                  peg$currPos += 4;\n                                                                } else {\n                                                                  s0 = peg$FAILED;\n                                                                  if (peg$silentFails === 0) { peg$fail(peg$c228); }\n                                                                }\n                                                                if (s0 === peg$FAILED) {\n                                                                  if (input.substr(peg$currPos, 4) === peg$c64) {\n                                                                    s0 = peg$c64;\n                                                                    peg$currPos += 4;\n                                                                  } else {\n                                                                    s0 = peg$FAILED;\n                                                                    if (peg$silentFails === 0) { peg$fail(peg$c65); }\n                                                                  }\n                                                                  if (s0 === peg$FAILED) {\n                                                                    if (input.substr(peg$currPos, 6) === peg$c26) {\n                                                                      s0 = peg$c26;\n                                                                      peg$currPos += 6;\n                                                                    } else {\n                                                                      s0 = peg$FAILED;\n                                                                      if (peg$silentFails === 0) { peg$fail(peg$c27); }\n                                                                    }\n                                                                    if (s0 === peg$FAILED) {\n                                                                      if (input.substr(peg$currPos, 4) === peg$c230) {\n                                                                        s0 = peg$c230;\n                                                                        peg$currPos += 4;\n                                                                      } else {\n                                                                        s0 = peg$FAILED;\n                                                                        if (peg$silentFails === 0) { peg$fail(peg$c231); }\n                                                                      }\n                                                                      if (s0 === peg$FAILED) {\n                                                                        if (input.substr(peg$currPos, 4) === peg$c151) {\n                                                                          s0 = peg$c151;\n                                                                          peg$currPos += 4;\n                                                                        } else {\n                                                                          s0 = peg$FAILED;\n                                                                          if (peg$silentFails === 0) { peg$fail(peg$c152); }\n                                                                        }\n                                                                        if (s0 === peg$FAILED) {\n                                                                          if (input.substr(peg$currPos, 4) === peg$c169) {\n                                                                            s0 = peg$c169;\n                                                                            peg$currPos += 4;\n                                                                          } else {\n                                                                            s0 = peg$FAILED;\n                                                                            if (peg$silentFails === 0) { peg$fail(peg$c170); }\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      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c485); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseMostCharacters() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 185,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      s0 = peg$parseLl();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseLu();\n        if (s0 === peg$FAILED) {\n          s0 = peg$parseNd();\n          if (s0 === peg$FAILED) {\n            s0 = peg$parseULl();\n            if (s0 === peg$FAILED) {\n              s0 = peg$parseLo();\n              if (s0 === peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 95) {\n                  s0 = peg$c421;\n                  peg$currPos++;\n                } else {\n                  s0 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c422); }\n                }\n              }\n            }\n          }\n        }\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c488); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseNonAsciiLetterCharacter() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 186,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      s0 = peg$parseNd();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseULl();\n        if (s0 === peg$FAILED) {\n          s0 = peg$parseLo();\n        }\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c489); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseLl() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 187,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      if (peg$c128.test(input.charAt(peg$currPos))) {\n        s0 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c129); }\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c490); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseULl() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 188,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      if (peg$c492.test(input.charAt(peg$currPos))) {\n        s0 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c493); }\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c491); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseLm() {\n      var s0;\n\n      var key    = peg$currPos * 197 + 189,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      if (peg$c494.test(input.charAt(peg$currPos))) {\n        s0 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c495); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseLo() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 190,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      if (peg$c497.test(input.charAt(peg$currPos))) {\n        s0 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c498); }\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c496); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseLt() {\n      var s0;\n\n      var key    = peg$currPos * 197 + 191,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      if (peg$c499.test(input.charAt(peg$currPos))) {\n        s0 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c500); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseLu() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 192,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      if (peg$c130.test(input.charAt(peg$currPos))) {\n        s0 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c131); }\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c501); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseULu() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 193,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      if (peg$c503.test(input.charAt(peg$currPos))) {\n        s0 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c504); }\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c502); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseNd() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 194,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      if (peg$c506.test(input.charAt(peg$currPos))) {\n        s0 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c507); }\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c505); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseDigit() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 195,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      if (peg$c132.test(input.charAt(peg$currPos))) {\n        s0 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c133); }\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c508); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n    function peg$parseZs() {\n      var s0, s1;\n\n      var key    = peg$currPos * 197 + 196,\n          cached = peg$resultsCache[key];\n\n      if (cached) {\n        peg$currPos = cached.nextPos;\n\n        return cached.result;\n      }\n\n      peg$silentFails++;\n      if (peg$c510.test(input.charAt(peg$currPos))) {\n        s0 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c511); }\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c509); }\n      }\n\n      peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n      return s0;\n    }\n\n\n      /*\n        Note: the grammar below isn't entirely context free because\n        tracking blocks of whitespace is easier this way.\n        We keep track of indentation as a \"current lead\", and\n        take some actions when that state changes.\n\n        Everything UNDER the block level though, should legitimately\n        NOT rely on global state. Keep it that way.\n      */\n\n      var lib = options.lib;\n      var skill = options.skill;\n      if ( !skill ) {\n        skill = new lib.Skill;\n      }\n      var ParserError = lib.ParserError;\n      var lead = \"\";\n\n      var stack = [\n        { lead: \"\", target:skill }, // skill\n        { lead: null, target:null }, // state\n        { lead: null, target:null }, // intent / conditional\n        { lead: null, target:null }, // ?\n        { lead: null, target:null }, // ?\n        { lead: null, target:null }, // ?\n        { lead: null, target:null } // ?\n      ];\n\n      var currentLineOffset = 0;\n      var oldLocation = location;\n      location = function() {\n        var l = oldLocation();\n        l.start.line -= currentLineOffset;\n        l.end.line -= currentLineOffset;\n        l.source = options.source;\n        l.language = options.language;\n        return l;\n      }\n\n      function indent(ws, location) {\n        var indentation = ws.length;\n      }\n\n\n      var popStackTo = function(index) {\n        for ( var i=index+1; i<stack.length; ++i) {\n          stack[i] = { lead:null, target: null };\n        }\n      }\n\n      var getTarget = function() {\n        for ( var i=0; i<stack.length; ++i ) {\n          var s = stack[i];\n          if (lead === s.lead) {\n            return s.target;\n          }\n        }\n        return null;\n      }\n\n      var popToTarget = function() {\n        var after = false;\n        for ( var i=0; i<stack.length; ++i ) {\n          var s = stack[i];\n          if (after) {\n            stack[i] = { lead:null, target: null };\n          } else {\n            if (lead === s.lead) {\n              after = true;\n            }\n          }\n        }\n      }\n\n      var pushToStack = function(thing) {\n        var after = false;\n        for (var i=0; i<stack.length; ++i) {\n          if ((stack[i].target === null || stack[i].lead === null) && !after) {\n            stack[i] = { lead: null, target: thing };\n            after = true;\n          } else {\n            if (after) {\n              stack[i] = { lead: null, target: null };\n            }\n          }\n        }\n        if (!after) {\n          throw new ParserError(location(), \"Failed to push \" + thing.constructor.name + \" onto stack\");\n        }\n      }\n\n      var pushState = function(stateName) {\n        var state = skill.pushOrGetState(stateName, location());\n        popStackTo(0);\n        pushToStack(state);\n      }\n\n      var pushTest = function(testName) {\n        var test = new lib.Test(location(), testName, options.source);\n        popStackTo(0);\n        pushToStack(test);\n        skill.pushTest(test);\n      }\n\n      var pushDataTable = function(tableName, headerNames) {\n        var table = new lib.DataTable(tableName, headerNames);\n        popStackTo(0);\n        pushToStack(table);\n        skill.pushDataTable(table);\n      }\n\n      var pushIntent = function(location, utterance, intentInfo, fromAlternate) {\n        if (stack[2].lead != null) {\n          if (fromAlternate) {\n            if (stack[3].lead == null) {\n              const parentIntent = getTarget();\n              if (parentIntent.hasAlternateUtterance) {\n                throw new ParserError(location, `Can't add intent name \\`${utterance}\\` as an \\`or\\` alternative to \\`${parentIntent.name}\\` `\n                  + `because it already has utterance alternatives. Intent name and utterance alternatives can't be combined in a single handler; `\n                  + `please use one or the other.`);\n              }\n              const intent = stack[0].target.pushIntent(stack[1].target, location, utterance, intentInfo);\n              return intent;\n            }\n            throw new ParserError(location, `Invalid indentation of \\`or ${utterance}\\`: ` +\n              `\\`or\\` statements for \\`when\\` statements must begin at the second level of indentation.`);\n          }\n          throw new ParserError(location, `Invalid indentation of \\`when ${utterance}\\`: ` +\n            `\\`when\\` statements can only be directly subordinate to a state and must begin at the first level of indentation.`);\n        }\n        let intent = null;\n        if (stack[0].target && stack[0].target.pushIntent) {\n          intent = stack[0].target.pushIntent(stack[1].target, location, utterance, intentInfo);\n          popStackTo(1);\n          pushToStack(intent);\n        } else {\n          // during testing there is no skill, just construct the intent\n          intent = new lib.Intent({location: location, utterance: utterance});\n        }\n        return intent;\n      }\n\n      var pushSay = function(location, say) {\n        say.location = location\n        const target = getTarget();\n        if (target && target.pushCode) {\n          target.pushCode(say);\n          pushToStack(say);\n        } else {\n          throw new ParserError(location, \"Couldn't find anything to append a 'say' to here\");\n        }\n      }\n\n\n      var pushBlock = function(type, location, condition) {\n        condition.location = location\n        const target = getTarget();\n        if (target && target.pushCode) {\n          target.pushCode(condition);\n          popToTarget();\n          pushToStack(condition);\n        } else {\n          throw new ParserError(location, \"Couldn't find anything to append `\" + type + \"` to here\");\n        }\n      }\n\n      var pushIf = function(location, condition) {\n        pushBlock('if', location, condition);\n      }\n\n      var pushFor = function(location, condition) {\n        pushBlock('for', location, condition);\n      }\n\n      var pushSwitch = function(location, condition) {\n        pushBlock('switch', location, condition);\n      }\n\n      var pushSwitchCase = function(location, switchCase) {\n        switchCase.location = location\n        const target = getTarget();\n        if (target && target.pushCase) {\n          target.pushCase(switchCase);\n          popToTarget();\n          pushToStack(switchCase);\n        } else {\n          throw new ParserError(location, \"Couldn't push a case statement here, no switch statement found to add it to.\");\n        }\n      }\n\n\n      var testLead = function(location, spacing) {\n        if (spacing.length > lead.length) {\n          var i = 0;\n          for (; i<stack.length; ++i) {\n            var s = stack[i];\n            if ( s.target !== null && s.lead === null ) {\n              s.lead = spacing;\n              break;\n            }\n          }\n          for (++i; i<stack.length; ++i) {\n            stack[i] = { lead:null, target:null };\n          }\n        }\n        else if (spacing.length < lead.length) {\n          var i = 0;\n          for (; i<stack.length; ++i) {\n            var s = stack[i];\n            if ( s.lead && (s.lead.length > spacing.length) ) {\n              s.lead = null;\n              s.target = null;\n            }\n            else if ( s.lead === null ) {\n              s.target = null;\n            }\n          }\n        }\n        lead = spacing;\n      }\n\n      var typeIs = function(type) {\n        return stack[stack.length-1].target.isType(type);\n      }\n\n      var pushStatement = function(statement) {\n        var b = stack[stack.length-1];\n      }\n\n\n      var pushCode = function(location, thing) {\n        const target = getTarget();\n        if (target && target.pushCode) {\n          thing.location = location;\n          target.pushCode(thing);\n        } else {\n          throw new ParserError(location, \"Couldn't find anything to push code into here\");\n        }\n      }\n\n      var currentTest = function() {\n        if (stack[1].target && stack[1].target.isTest) {\n          return stack[1].target;\n        }\n        throw new ParserError(location(), \"pushing a test statement without a current test\");\n      }\n\n      var isTopTarget = function(name) {\n        return stack[1].target && stack[1].target[name];\n      }\n\n      if (options.test) {\n        popStackTo(0);\n        pushToStack(options.test);\n      }\n\n\n    peg$result = peg$startRuleFunction();\n\n    if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n      return peg$result;\n    } else {\n      if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n        peg$fail(peg$endExpectation());\n      }\n\n      throw peg$buildStructuredError(\n        peg$maxFailExpected,\n        peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n        peg$maxFailPos < input.length\n          ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n          : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n      );\n    }\n  }\n\n  return {\n    SyntaxError: peg$SyntaxError,\n    parse:       peg$parse\n  };\n})()"
}