UNPKG

sip.js

Version:

A SIP library for JavaScript

1,085 lines (1,084 loc) 71.9 kB
import { NameAddrHeader } from "../../name-addr-header.js"; import { URI } from "../../uri.js"; function peg$padEnd(str, targetLength, padString) { padString = padString || ' '; if (str.length > targetLength) { return str; } targetLength -= str.length; padString += padString.repeat(targetLength); return str + padString.slice(0, targetLength); } export class SyntaxError extends Error { constructor(message, expected, found, location) { super(); this.message = message; this.expected = expected; this.found = found; this.location = location; this.name = "SyntaxError"; if (typeof Object.setPrototypeOf === "function") { Object.setPrototypeOf(this, SyntaxError.prototype); } else { this.__proto__ = SyntaxError.prototype; } if (typeof Error.captureStackTrace === "function") { Error.captureStackTrace(this, SyntaxError); } } static buildMessage(expected, found) { function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); } function literalEscape(s) { return s .replace(/\\/g, "\\\\") .replace(/"/g, "\\\"") .replace(/\0/g, "\\0") .replace(/\t/g, "\\t") .replace(/\n/g, "\\n") .replace(/\r/g, "\\r") .replace(/[\x00-\x0F]/g, (ch) => "\\x0" + hex(ch)) .replace(/[\x10-\x1F\x7F-\x9F]/g, (ch) => "\\x" + hex(ch)); } function classEscape(s) { return s .replace(/\\/g, "\\\\") .replace(/\]/g, "\\]") .replace(/\^/g, "\\^") .replace(/-/g, "\\-") .replace(/\0/g, "\\0") .replace(/\t/g, "\\t") .replace(/\n/g, "\\n") .replace(/\r/g, "\\r") .replace(/[\x00-\x0F]/g, (ch) => "\\x0" + hex(ch)) .replace(/[\x10-\x1F\x7F-\x9F]/g, (ch) => "\\x" + hex(ch)); } function describeExpectation(expectation) { switch (expectation.type) { case "literal": return "\"" + literalEscape(expectation.text) + "\""; case "class": const escapedParts = expectation.parts.map((part) => { return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); }); return "[" + (expectation.inverted ? "^" : "") + escapedParts + "]"; case "any": return "any character"; case "end": return "end of input"; case "other": return expectation.description; } } function describeExpected(expected1) { const descriptions = expected1.map(describeExpectation); let i; let j; descriptions.sort(); if (descriptions.length > 0) { for (i = 1, j = 1; i < descriptions.length; i++) { if (descriptions[i - 1] !== descriptions[i]) { descriptions[j] = descriptions[i]; j++; } } descriptions.length = j; } switch (descriptions.length) { case 1: return descriptions[0]; case 2: return descriptions[0] + " or " + descriptions[1]; default: return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; } } function describeFound(found1) { return found1 ? "\"" + literalEscape(found1) + "\"" : "end of input"; } return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; } format(sources) { let str = 'Error: ' + this.message; if (this.location) { let src = null; let k; for (k = 0; k < sources.length; k++) { if (sources[k].source === this.location.source) { src = sources[k].text.split(/\r\n|\n|\r/g); break; } } let s = this.location.start; let loc = this.location.source + ':' + s.line + ':' + s.column; if (src) { let e = this.location.end; let filler = peg$padEnd('', s.line.toString().length, ' '); let line = src[s.line - 1]; let last = s.line === e.line ? e.column : line.length + 1; str += '\n --> ' + loc + '\n' + filler + ' |\n' + s.line + ' | ' + line + '\n' + filler + ' | ' + peg$padEnd('', s.column - 1, ' ') + peg$padEnd('', last - s.column, '^'); } else { str += '\n at ' + loc; } } return str; } } function peg$parse(input, options) { options = options !== undefined ? options : {}; const peg$FAILED = {}; const peg$source = options.grammarSource; const peg$startRuleIndices = { Contact: 119, Name_Addr_Header: 156, Record_Route: 176, Request_Response: 81, SIP_URI: 45, Subscription_State: 186, Supported: 191, Require: 182, Via: 194, absoluteURI: 84, Call_ID: 118, Content_Disposition: 130, Content_Length: 135, Content_Type: 136, CSeq: 146, displayName: 122, Event: 149, From: 151, host: 52, Max_Forwards: 154, Min_SE: 213, Proxy_Authenticate: 157, quoted_string: 40, Refer_To: 178, Replaces: 179, Session_Expires: 210, stun_URI: 217, To: 192, turn_URI: 223, uuid: 226, WWW_Authenticate: 209, challenge: 158, sipfrag: 230, Referred_By: 231 }; let peg$startRuleIndex = 119; const peg$consts = [ "\r\n", peg$literalExpectation("\r\n", false), /^[0-9]/, peg$classExpectation([["0", "9"]], false, false), /^[a-zA-Z]/, peg$classExpectation([["a", "z"], ["A", "Z"]], false, false), /^[0-9a-fA-F]/, peg$classExpectation([["0", "9"], ["a", "f"], ["A", "F"]], false, false), /^[\0-\xFF]/, peg$classExpectation([["\0", "\xFF"]], false, false), /^["]/, peg$classExpectation(["\""], false, false), " ", peg$literalExpectation(" ", false), "\t", peg$literalExpectation("\t", false), /^[a-zA-Z0-9]/, peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false), ";", peg$literalExpectation(";", false), "/", peg$literalExpectation("/", false), "?", peg$literalExpectation("?", false), ":", peg$literalExpectation(":", false), "@", peg$literalExpectation("@", false), "&", peg$literalExpectation("&", false), "=", peg$literalExpectation("=", false), "+", peg$literalExpectation("+", false), "$", peg$literalExpectation("$", false), ",", peg$literalExpectation(",", false), "-", peg$literalExpectation("-", false), "_", peg$literalExpectation("_", false), ".", peg$literalExpectation(".", false), "!", peg$literalExpectation("!", false), "~", peg$literalExpectation("~", false), "*", peg$literalExpectation("*", false), "'", peg$literalExpectation("'", false), "(", peg$literalExpectation("(", false), ")", peg$literalExpectation(")", false), "%", peg$literalExpectation("%", false), function () { return " "; }, function () { return ':'; }, /^[!-~]/, peg$classExpectation([["!", "~"]], false, false), /^[\x80-\uFFFF]/, peg$classExpectation([["\x80", "\uFFFF"]], false, false), /^[\x80-\xBF]/, peg$classExpectation([["\x80", "\xBF"]], false, false), /^[a-f]/, peg$classExpectation([["a", "f"]], false, false), "`", peg$literalExpectation("`", false), "<", peg$literalExpectation("<", false), ">", peg$literalExpectation(">", false), "\\", peg$literalExpectation("\\", false), "[", peg$literalExpectation("[", false), "]", peg$literalExpectation("]", false), "{", peg$literalExpectation("{", false), "}", peg$literalExpectation("}", false), function () { return "*"; }, function () { return "/"; }, function () { return "="; }, function () { return "("; }, function () { return ")"; }, function () { return ">"; }, function () { return "<"; }, function () { return ","; }, function () { return ";"; }, function () { return ":"; }, function () { return "\""; }, /^[!-']/, peg$classExpectation([["!", "'"]], false, false), /^[*-[]/, peg$classExpectation([["*", "["]], false, false), /^[\]-~]/, peg$classExpectation([["]", "~"]], false, false), function (contents) { return contents; }, /^[#-[]/, peg$classExpectation([["#", "["]], false, false), /^[\0-\t]/, peg$classExpectation([["\0", "\t"]], false, false), /^[\v-\f]/, peg$classExpectation([["\v", "\f"]], false, false), /^[\x0E-\x7F]/, peg$classExpectation([["\x0E", "\x7F"]], false, false), function () { options = options || { data: {} }; options.data.uri = new URI(options.data.scheme, options.data.user, options.data.host, options.data.port); delete options.data.scheme; delete options.data.user; delete options.data.host; delete options.data.host_type; delete options.data.port; }, function () { options = options || { data: {} }; options.data.uri = new URI(options.data.scheme, options.data.user, options.data.host, options.data.port, options.data.uri_params, options.data.uri_headers); delete options.data.scheme; delete options.data.user; delete options.data.host; delete options.data.host_type; delete options.data.port; delete options.data.uri_params; if (options.startRule === 'SIP_URI') { options.data = options.data.uri; } }, "sips", peg$literalExpectation("sips", true), "sip", peg$literalExpectation("sip", true), function (uri_scheme) { options = options || { data: {} }; options.data.scheme = uri_scheme; }, function () { options = options || { data: {} }; options.data.user = decodeURIComponent(text().slice(0, -1)); }, function () { options = options || { data: {} }; options.data.password = text(); }, function () { options = options || { data: {} }; options.data.host = text(); return options.data.host; }, function () { options = options || { data: {} }; options.data.host_type = 'domain'; return text(); }, /^[a-zA-Z0-9_\-]/, peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"], "_", "-"], false, false), /^[a-zA-Z0-9\-]/, peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"], "-"], false, false), function () { options = options || { data: {} }; options.data.host_type = 'IPv6'; return text(); }, "::", peg$literalExpectation("::", false), function () { options = options || { data: {} }; options.data.host_type = 'IPv6'; return text(); }, function () { options = options || { data: {} }; options.data.host_type = 'IPv4'; return text(); }, "25", peg$literalExpectation("25", false), /^[0-5]/, peg$classExpectation([["0", "5"]], false, false), "2", peg$literalExpectation("2", false), /^[0-4]/, peg$classExpectation([["0", "4"]], false, false), "1", peg$literalExpectation("1", false), /^[1-9]/, peg$classExpectation([["1", "9"]], false, false), function (port) { options = options || { data: {} }; port = parseInt(port.join('')); options.data.port = port; return port; }, "transport=", peg$literalExpectation("transport=", true), "udp", peg$literalExpectation("udp", true), "tcp", peg$literalExpectation("tcp", true), "sctp", peg$literalExpectation("sctp", true), "tls", peg$literalExpectation("tls", true), function (transport) { options = options || { data: {} }; if (!options.data.uri_params) options.data.uri_params = {}; options.data.uri_params['transport'] = transport.toLowerCase(); }, "user=", peg$literalExpectation("user=", true), "phone", peg$literalExpectation("phone", true), "ip", peg$literalExpectation("ip", true), function (user) { options = options || { data: {} }; if (!options.data.uri_params) options.data.uri_params = {}; options.data.uri_params['user'] = user.toLowerCase(); }, "method=", peg$literalExpectation("method=", true), function (method) { options = options || { data: {} }; if (!options.data.uri_params) options.data.uri_params = {}; options.data.uri_params['method'] = method; }, "ttl=", peg$literalExpectation("ttl=", true), function (ttl) { options = options || { data: {} }; if (!options.data.params) options.data.params = {}; options.data.params['ttl'] = ttl; }, "maddr=", peg$literalExpectation("maddr=", true), function (maddr) { options = options || { data: {} }; if (!options.data.uri_params) options.data.uri_params = {}; options.data.uri_params['maddr'] = maddr; }, "lr", peg$literalExpectation("lr", true), function () { options = options || { data: {} }; if (!options.data.uri_params) options.data.uri_params = {}; options.data.uri_params['lr'] = undefined; }, function (param, value) { options = options || { data: {} }; if (!options.data.uri_params) options.data.uri_params = {}; if (value === null) { value = undefined; } else { value = value[1]; } options.data.uri_params[param.toLowerCase()] = value; }, function (hname, hvalue) { hname = hname.join('').toLowerCase(); hvalue = hvalue.join(''); options = options || { data: {} }; if (!options.data.uri_headers) options.data.uri_headers = {}; if (!options.data.uri_headers[hname]) { options.data.uri_headers[hname] = [hvalue]; } else { options.data.uri_headers[hname].push(hvalue); } }, function () { options = options || { data: {} }; // lots of tests fail if this isn't guarded... if (options.startRule === 'Refer_To') { options.data.uri = new URI(options.data.scheme, options.data.user, options.data.host, options.data.port, options.data.uri_params, options.data.uri_headers); delete options.data.scheme; delete options.data.user; delete options.data.host; delete options.data.host_type; delete options.data.port; delete options.data.uri_params; } }, "//", peg$literalExpectation("//", false), function () { options = options || { data: {} }; options.data.scheme = text(); }, peg$literalExpectation("SIP", true), function () { options = options || { data: {} }; options.data.sip_version = text(); }, "INVITE", peg$literalExpectation("INVITE", false), "ACK", peg$literalExpectation("ACK", false), "VXACH", peg$literalExpectation("VXACH", false), "OPTIONS", peg$literalExpectation("OPTIONS", false), "BYE", peg$literalExpectation("BYE", false), "CANCEL", peg$literalExpectation("CANCEL", false), "REGISTER", peg$literalExpectation("REGISTER", false), "SUBSCRIBE", peg$literalExpectation("SUBSCRIBE", false), "NOTIFY", peg$literalExpectation("NOTIFY", false), "REFER", peg$literalExpectation("REFER", false), "PUBLISH", peg$literalExpectation("PUBLISH", false), function () { options = options || { data: {} }; options.data.method = text(); return options.data.method; }, function (status_code) { options = options || { data: {} }; options.data.status_code = parseInt(status_code.join('')); }, function () { options = options || { data: {} }; options.data.reason_phrase = text(); }, function () { options = options || { data: {} }; options.data = text(); }, function () { var idx, length; options = options || { data: {} }; length = options.data.multi_header.length; for (idx = 0; idx < length; idx++) { if (options.data.multi_header[idx].parsed === null) { options.data = null; break; } } if (options.data !== null) { options.data = options.data.multi_header; } else { options.data = -1; } }, function () { var header; options = options || { data: {} }; if (!options.data.multi_header) options.data.multi_header = []; try { header = new NameAddrHeader(options.data.uri, options.data.displayName, options.data.params); delete options.data.uri; delete options.data.displayName; delete options.data.params; } catch (e) { header = null; } options.data.multi_header.push({ 'position': peg$currPos, 'offset': location().start.offset, 'parsed': header }); }, function (displayName) { displayName = text().trim(); if (displayName[0] === '\"') { displayName = displayName.substring(1, displayName.length - 1); } options = options || { data: {} }; options.data.displayName = displayName; }, "q", peg$literalExpectation("q", true), function (q) { options = options || { data: {} }; if (!options.data.params) options.data.params = {}; options.data.params['q'] = q; }, "expires", peg$literalExpectation("expires", true), function (expires) { options = options || { data: {} }; if (!options.data.params) options.data.params = {}; options.data.params['expires'] = expires; }, function (delta_seconds) { return parseInt(delta_seconds.join('')); }, "0", peg$literalExpectation("0", false), function () { return parseFloat(text()); }, function (param, value) { options = options || { data: {} }; if (!options.data.params) options.data.params = {}; if (value === null) { value = undefined; } else { value = value[1]; } options.data.params[param.toLowerCase()] = value; }, "render", peg$literalExpectation("render", true), "session", peg$literalExpectation("session", true), "icon", peg$literalExpectation("icon", true), "alert", peg$literalExpectation("alert", true), function () { options = options || { data: {} }; if (options.startRule === 'Content_Disposition') { options.data.type = text().toLowerCase(); } }, "handling", peg$literalExpectation("handling", true), "optional", peg$literalExpectation("optional", true), "required", peg$literalExpectation("required", true), function (length) { options = options || { data: {} }; options.data = parseInt(length.join('')); }, function () { options = options || { data: {} }; options.data = text(); }, "text", peg$literalExpectation("text", true), "image", peg$literalExpectation("image", true), "audio", peg$literalExpectation("audio", true), "video", peg$literalExpectation("video", true), "application", peg$literalExpectation("application", true), "message", peg$literalExpectation("message", true), "multipart", peg$literalExpectation("multipart", true), "x-", peg$literalExpectation("x-", true), function (cseq_value) { options = options || { data: {} }; options.data.value = parseInt(cseq_value.join('')); }, function (expires) { options = options || { data: {} }; options.data = expires; }, function (event_type) { options = options || { data: {} }; options.data.event = event_type.toLowerCase(); }, function () { options = options || { data: {} }; var tag = options.data.tag; options.data = new NameAddrHeader(options.data.uri, options.data.displayName, options.data.params); if (tag) { options.data.setParam('tag', tag); } }, "tag", peg$literalExpectation("tag", true), function (tag) { options = options || { data: {} }; options.data.tag = tag; }, function (forwards) { options = options || { data: {} }; options.data = parseInt(forwards.join('')); }, function (min_expires) { options = options || { data: {} }; options.data = min_expires; }, function () { options = options || { data: {} }; options.data = new NameAddrHeader(options.data.uri, options.data.displayName, options.data.params); }, "digest", peg$literalExpectation("Digest", true), "realm", peg$literalExpectation("realm", true), function (realm) { options = options || { data: {} }; options.data.realm = realm; }, "domain", peg$literalExpectation("domain", true), "nonce", peg$literalExpectation("nonce", true), function (nonce) { options = options || { data: {} }; options.data.nonce = nonce; }, "opaque", peg$literalExpectation("opaque", true), function (opaque) { options = options || { data: {} }; options.data.opaque = opaque; }, "stale", peg$literalExpectation("stale", true), "true", peg$literalExpectation("true", true), function () { options = options || { data: {} }; options.data.stale = true; }, "false", peg$literalExpectation("false", true), function () { options = options || { data: {} }; options.data.stale = false; }, "algorithm", peg$literalExpectation("algorithm", true), "md5", peg$literalExpectation("MD5", true), "md5-sess", peg$literalExpectation("MD5-sess", true), function (algorithm) { options = options || { data: {} }; options.data.algorithm = algorithm.toUpperCase(); }, "qop", peg$literalExpectation("qop", true), "auth-int", peg$literalExpectation("auth-int", true), "auth", peg$literalExpectation("auth", true), function (qop_value) { options = options || { data: {} }; options.data.qop || (options.data.qop = []); options.data.qop.push(qop_value.toLowerCase()); }, function (rack_value) { options = options || { data: {} }; options.data.value = parseInt(rack_value.join('')); }, function () { var idx, length; options = options || { data: {} }; length = options.data.multi_header.length; for (idx = 0; idx < length; idx++) { if (options.data.multi_header[idx].parsed === null) { options.data = null; break; } } if (options.data !== null) { options.data = options.data.multi_header; } else { options.data = -1; } }, function () { var header; options = options || { data: {} }; if (!options.data.multi_header) options.data.multi_header = []; try { header = new NameAddrHeader(options.data.uri, options.data.displayName, options.data.params); delete options.data.uri; delete options.data.displayName; delete options.data.params; } catch (e) { header = null; } options.data.multi_header.push({ 'position': peg$currPos, 'offset': location().start.offset, 'parsed': header }); }, function () { options = options || { data: {} }; options.data = new NameAddrHeader(options.data.uri, options.data.displayName, options.data.params); }, function () { options = options || { data: {} }; if (!(options.data.replaces_from_tag && options.data.replaces_to_tag)) { options.data = -1; } }, function () { options = options || { data: {} }; options.data = { call_id: options.data }; }, "from-tag", peg$literalExpectation("from-tag", true), function (from_tag) { options = options || { data: {} }; options.data.replaces_from_tag = from_tag; }, "to-tag", peg$literalExpectation("to-tag", true), function (to_tag) { options = options || { data: {} }; options.data.replaces_to_tag = to_tag; }, "early-only", peg$literalExpectation("early-only", true), function () { options = options || { data: {} }; options.data.early_only = true; }, function (head, r) { return r; }, function (head, tail) { return list(head, tail); }, function (value) { options = options || { data: {} }; if (options.startRule === 'Require') { options.data = value || []; } }, function (rseq_value) { options = options || { data: {} }; options.data.value = parseInt(rseq_value.join('')); }, "active", peg$literalExpectation("active", true), "pending", peg$literalExpectation("pending", true), "terminated", peg$literalExpectation("terminated", true), function () { options = options || { data: {} }; options.data.state = text(); }, "reason", peg$literalExpectation("reason", true), function (reason) { options = options || { data: {} }; if (typeof reason !== 'undefined') options.data.reason = reason; }, function (expires) { options = options || { data: {} }; if (typeof expires !== 'undefined') options.data.expires = expires; }, "retry_after", peg$literalExpectation("retry_after", true), function (retry_after) { options = options || { data: {} }; if (typeof retry_after !== 'undefined') options.data.retry_after = retry_after; }, "deactivated", peg$literalExpectation("deactivated", true), "probation", peg$literalExpectation("probation", true), "rejected", peg$literalExpectation("rejected", true), "timeout", peg$literalExpectation("timeout", true), "giveup", peg$literalExpectation("giveup", true), "noresource", peg$literalExpectation("noresource", true), "invariant", peg$literalExpectation("invariant", true), function (value) { options = options || { data: {} }; if (options.startRule === 'Supported') { options.data = value || []; } }, function () { options = options || { data: {} }; var tag = options.data.tag; options.data = new NameAddrHeader(options.data.uri, options.data.displayName, options.data.params); if (tag) { options.data.setParam('tag', tag); } }, "ttl", peg$literalExpectation("ttl", true), function (via_ttl_value) { options = options || { data: {} }; options.data.ttl = via_ttl_value; }, "maddr", peg$literalExpectation("maddr", true), function (via_maddr) { options = options || { data: {} }; options.data.maddr = via_maddr; }, "received", peg$literalExpectation("received", true), function (via_received) { options = options || { data: {} }; options.data.received = via_received; }, "branch", peg$literalExpectation("branch", true), function (via_branch) { options = options || { data: {} }; options.data.branch = via_branch; }, "rport", peg$literalExpectation("rport", true), function (response_port) { options = options || { data: {} }; if (typeof response_port !== 'undefined') options.data.rport = response_port.join(''); }, function (via_protocol) { options = options || { data: {} }; options.data.protocol = via_protocol; }, peg$literalExpectation("UDP", true), peg$literalExpectation("TCP", true), peg$literalExpectation("TLS", true), peg$literalExpectation("SCTP", true), function (via_transport) { options = options || { data: {} }; options.data.transport = via_transport; }, function () { options = options || { data: {} }; options.data.host = text(); }, function (via_sent_by_port) { options = options || { data: {} }; options.data.port = parseInt(via_sent_by_port.join('')); }, function (ttl) { return parseInt(ttl.join('')); }, function (deltaSeconds) { options = options || { data: {} }; if (options.startRule === 'Session_Expires') { options.data.deltaSeconds = deltaSeconds; } }, "refresher", peg$literalExpectation("refresher", false), "uas", peg$literalExpectation("uas", false), "uac", peg$literalExpectation("uac", false), function (endpoint) { options = options || { data: {} }; if (options.startRule === 'Session_Expires') { options.data.refresher = endpoint; } }, function (deltaSeconds) { options = options || { data: {} }; if (options.startRule === 'Min_SE') { options.data = deltaSeconds; } }, "stuns", peg$literalExpectation("stuns", true), "stun", peg$literalExpectation("stun", true), function (scheme) { options = options || { data: {} }; options.data.scheme = scheme; }, function (host) { options = options || { data: {} }; options.data.host = host; }, "?transport=", peg$literalExpectation("?transport=", false), "turns", peg$literalExpectation("turns", true), "turn", peg$literalExpectation("turn", true), function (transport) { options = options || { data: {} }; options.data.transport = transport; }, function () { options = options || { data: {} }; options.data = text(); }, "Referred-By", peg$literalExpectation("Referred-By", false), "b", peg$literalExpectation("b", false), "cid", peg$literalExpectation("cid", false) ]; const peg$bytecode = [ peg$decode("2 \"\"6 7!"), peg$decode("4\"\"\"5!7#"), peg$decode("4$\"\"5!7%"), peg$decode("4&\"\"5!7'"), peg$decode(";'.# &;("), peg$decode("4(\"\"5!7)"), peg$decode("4*\"\"5!7+"), peg$decode("2,\"\"6,7-"), peg$decode("2.\"\"6.7/"), peg$decode("40\"\"5!71"), peg$decode("22\"\"6273.\x89 &24\"\"6475.} &26\"\"6677.q &28\"\"6879.e &2:\"\"6:7;.Y &2<\"\"6<7=.M &2>\"\"6>7?.A &2@\"\"6@7A.5 &2B\"\"6B7C.) &2D\"\"6D7E"), peg$decode(";).# &;,"), peg$decode("2F\"\"6F7G.} &2H\"\"6H7I.q &2J\"\"6J7K.e &2L\"\"6L7M.Y &2N\"\"6N7O.M &2P\"\"6P7Q.A &2R\"\"6R7S.5 &2T\"\"6T7U.) &2V\"\"6V7W"), peg$decode("%%2X\"\"6X7Y/5#;#/,$;#/#$+#)(#'#(\"'#&'#/\"!&,)"), peg$decode("%%$;$0#*;$&/,#; /#$+\")(\"'#&'#.\" &\"/=#$;$/&#0#*;$&&&#/'$8\":Z\" )(\"'#&'#"), peg$decode(";..\" &\""), peg$decode("%$;'.# &;(0)*;'.# &;(&/?#28\"\"6879/0$;//'$8#:[# )(#'#(\"'#&'#"), peg$decode("%%$;2/&#0#*;2&&&#/g#$%$;.0#*;.&/,#;2/#$+\")(\"'#&'#0=*%$;.0#*;.&/,#;2/#$+\")(\"'#&'#&/#$+\")(\"'#&'#/\"!&,)"), peg$decode("4\\\"\"5!7].# &;3"), peg$decode("4^\"\"5!7_"), peg$decode("4`\"\"5!7a"), peg$decode(";!.) &4b\"\"5!7c"), peg$decode("%$;).\x95 &2F\"\"6F7G.\x89 &2J\"\"6J7K.} &2L\"\"6L7M.q &2X\"\"6X7Y.e &2P\"\"6P7Q.Y &2H\"\"6H7I.M &2@\"\"6@7A.A &2d\"\"6d7e.5 &2R\"\"6R7S.) &2N\"\"6N7O/\x9E#0\x9B*;).\x95 &2F\"\"6F7G.\x89 &2J\"\"6J7K.} &2L\"\"6L7M.q &2X\"\"6X7Y.e &2P\"\"6P7Q.Y &2H\"\"6H7I.M &2@\"\"6@7A.A &2d\"\"6d7e.5 &2R\"\"6R7S.) &2N\"\"6N7O&&&#/\"!&,)"), peg$decode("%$;).\x89 &2F\"\"6F7G.} &2L\"\"6L7M.q &2X\"\"6X7Y.e &2P\"\"6P7Q.Y &2H\"\"6H7I.M &2@\"\"6@7A.A &2d\"\"6d7e.5 &2R\"\"6R7S.) &2N\"\"6N7O/\x92#0\x8F*;).\x89 &2F\"\"6F7G.} &2L\"\"6L7M.q &2X\"\"6X7Y.e &2P\"\"6P7Q.Y &2H\"\"6H7I.M &2@\"\"6@7A.A &2d\"\"6d7e.5 &2R\"\"6R7S.) &2N\"\"6N7O&&&#/\"!&,)"), peg$decode("2T\"\"6T7U.\xE3 &2V\"\"6V7W.\xD7 &2f\"\"6f7g.\xCB &2h\"\"6h7i.\xBF &2:\"\"6:7;.\xB3 &2D\"\"6D7E.\xA7 &22\"\"6273.\x9B &28\"\"6879.\x8F &2j\"\"6j7k.\x83 &;&.} &24\"\"6475.q &2l\"\"6l7m.e &2n\"\"6n7o.Y &26\"\"6677.M &2>\"\"6>7?.A &2p\"\"6p7q.5 &2r\"\"6r7s.) &;'.# &;("), peg$decode("%$;).\u012B &2F\"\"6F7G.\u011F &2J\"\"6J7K.\u0113 &2L\"\"6L7M.\u0107 &2X\"\"6X7Y.\xFB &2P\"\"6P7Q.\xEF &2H\"\"6H7I.\xE3 &2@\"\"6@7A.\xD7 &2d\"\"6d7e.\xCB &2R\"\"6R7S.\xBF &2N\"\"6N7O.\xB3 &2T\"\"6T7U.\xA7 &2V\"\"6V7W.\x9B &2f\"\"6f7g.\x8F &2h\"\"6h7i.\x83 &28\"\"6879.w &2j\"\"6j7k.k &;&.e &24\"\"6475.Y &2l\"\"6l7m.M &2n\"\"6n7o.A &26\"\"6677.5 &2p\"\"6p7q.) &2r\"\"6r7s/\u0134#0\u0131*;).\u012B &2F\"\"6F7G.\u011F &2J\"\"6J7K.\u0113 &2L\"\"6L7M.\u0107 &2X\"\"6X7Y.\xFB &2P\"\"6P7Q.\xEF &2H\"\"6H7I.\xE3 &2@\"\"6@7A.\xD7 &2d\"\"6d7e.\xCB &2R\"\"6R7S.\xBF &2N\"\"6N7O.\xB3 &2T\"\"6T7U.\xA7 &2V\"\"6V7W.\x9B &2f\"\"6f7g.\x8F &2h\"\"6h7i.\x83 &28\"\"6879.w &2j\"\"6j7k.k &;&.e &24\"\"6475.Y &2l\"\"6l7m.M &2n\"\"6n7o.A &26\"\"6677.5 &2p\"\"6p7q.) &2r\"\"6r7s&&&#/\"!&,)"), peg$decode("%;//?#2P\"\"6P7Q/0$;//'$8#:t# )(#'#(\"'#&'#"), peg$decode("%;//?#24\"\"6475/0$;//'$8#:u# )(#'#(\"'#&'#"), peg$decode("%;//?#2>\"\"6>7?/0$;//'$8#:v# )(#'#(\"'#&'#"), peg$decode("%;//?#2T\"\"6T7U/0$;//'$8#:w# )(#'#(\"'#&'#"), peg$decode("%;//?#2V\"\"6V7W/0$;//'$8#:x# )(#'#(\"'#&'#"), peg$decode("%2h\"\"6h7i/0#;//'$8\":y\" )(\"'#&'#"), peg$decode("%;//6#2f\"\"6f7g/'$8\":z\" )(\"'#&'#"), peg$decode("%;//?#2D\"\"6D7E/0$;//'$8#:{# )(#'#(\"'#&'#"), peg$decode("%;//?#22\"\"6273/0$;//'$8#:|# )(#'#(\"'#&'#"), peg$decode("%;//?#28\"\"6879/0$;//'$8#:}# )(#'#(\"'#&'#"), peg$decode("%;//0#;&/'$8\":~\" )(\"'#&'#"), peg$decode("%;&/0#;//'$8\":~\" )(\"'#&'#"), peg$decode("%;=/T#$;G.) &;K.# &;F0/*;G.) &;K.# &;F&/,$;>/#$+#)(#'#(\"'#&'#"), peg$decode("4\x7F\"\"5!7\x80.A &4\x81\"\"5!7\x82.5 &4\x83\"\"5!7\x84.) &;3.# &;."), peg$decode("%%;//Q#;&/H$$;J.# &;K0)*;J.# &;K&/,$;&/#$+$)($'#(#'#(\"'#&'#/\"!&,)"), peg$decode("%;//]#;&/T$%$;J.# &;K0)*;J.# &;K&/\"!&,)/1$;&/($8$:\x85$!!)($'#(#'#(\"'#&'#"), peg$decode(";..G &2L\"\"6L7M.; &4\x86\"\"5!7\x87./ &4\x83\"\"5!7\x84.# &;3"), peg$decode("%2j\"\"6j7k/J#4\x88\"\"5!7\x89.5 &4\x8A\"\"5!7\x8B.) &4\x8C\"\"5!7\x8D/#$+\")(\"'#&'#"), peg$decode("%;N/M#28\"\"6879/>$;O.\" &\"/0$;S/'$8$:\x8E$ )($'#(#'#(\"'#&'#"), peg$decode("%;N/d#28\"\"6879/U$;O.\" &\"/G$;S/>$;_/5$;l.\" &\"/'$8&:\x8F& )(&'#(%'#($'#(#'#(\"'#&'#"), peg$decode("%3\x90\"\"5$7\x91.) &3\x92\"\"5#7\x93/' 8!:\x94!! )"), peg$decode("%;P/]#%28\"\"6879/,#;R/#$+\")(\"'#&'#.\" &\"/6$2:\"\"6:7;/'$8#:\x95# )(#'#(\"'#&'#"), peg$decode("$;+.) &;-.# &;Q/2#0/*;+.) &;-.# &;Q&&&#"), peg$decode("2<\"\"6<7=.q &2>\"\"6>7?.e &2@\"\"6@7A.Y &2B\"\"6B7C.M &2D\"\"6D7E.A &22\"\"6273.5 &26\"\"6677.) &24\"\"6475"), peg$decode("%$;+._ &;-.Y &2<\"\"6<7=.M &2>\"\"6>7?.A &2@\"\"6@7A.5 &2B\"\"6B7C.) &2D\"\"6D7E0e*;+._ &;-.Y &2<\"\"6<7=.M &2>\"\"6>7?.A &2@\"\"6@7A.5 &2B\"\"6B7C.) &2D\"\"6D7E&/& 8!:\x96! )"), peg$decode("%;T/J#%28\"\"6879/,#;^/#$+\")(\"'#&'#.\" &\"/#$+\")(\"'#&'#"), peg$decode("%;U.) &;\\.# &;X/& 8!:\x97! )"), peg$decode("%$%;V/2#2J\"\"6J7K/#$+\")(\"'#&'#0<*%;V/2#2J\"\"6J7K/#$+\")(\"'#&'#&/D#;W/;$2J\"\"6J7K.\" &\"/'$8#:\x98# )(#'#(\"'#&'#"), peg$decode("$4\x99\"\"5!7\x9A/,#0)*4\x99\"\"5!7\x9A&&&#"), peg$decode("%4$\"\"5!7%/?#$4\x9B\"\"5!7\x9C0)*4\x9B\"\"5!7\x9C&/#$+\")(\"'#&'#"), peg$decode("%2l\"\"6l7m/?#;Y/6$2n\"\"6n7o/'$8#:\x9D# )(#'#(\"'#&'#"), peg$decode("%%;Z/\xB3#28\"\"6879/\xA4$;Z/\x9B$28\"\"6879/\x8C$;Z/\x83$28\"\"6879/t$;Z/k$28\"\"6879/\\$;Z/S$28\"\"6879/D$;Z/;$28\"\"6879/,$;[/#$+-)(-'#(,'#(+'#(*'#()'#(('#(''#(&'#(%'#($'#(#'#(\"'#&'#.\u0790 &%2\x9E\"\"6\x9E7\x9F/\xA4#;Z/\x9B$28\"\"6879/\x8C$;Z/\x83$28\"\"6879/t$;Z/k$28\"\"6879/\\$;Z/S$28\"\"6879/D$;Z/;$28\"\"6879/,$;[/#$+,)(,'#(+'#(*'#()'#(('#(''#(&'#(%'#($'#(#'#(\"'#&'#.\u06F9 &%2\x9E\"\"6\x9E7\x9F/\x8C#;Z/\x83$28\"\"6879/t$;Z/k$28\"\"6879/\\$;Z/S$28\"\"6879/D$;Z/;$28\"\"6879/,$;[/#$+*)(*'#()'#(('#(''#(&'#(%'#($'#(#'#(\"'#&'#.\u067A &%2\x9E\"\"6\x9E7\x9F/t#;Z/k$28\"\"6879/\\$;Z/S$28\"\"6879/D$;Z/;$28\"\"6879/,$;[/#$+()(('#(''#(&'#(%'#($'#(#'#(\"'#&'#.\u0613 &%2\x9E\"\"6\x9E7\x9F/\\#;Z/S$28\"\"6879/D$;Z/;$28\"\"6879/,$;[/#$+&)(&'#(%'#($'#(#'#(\"'#&'#.\u05C4 &%2\x9E\"\"6\x9E7\x9F/D#;Z/;$28\"\"6879/,$;[/#$+$)($'#(#'#(\"'#&'#.\u058D &%2\x9E\"\"6\x9E7\x9F/,#;[/#$+\")(\"'#&'#.\u056E &%2\x9E\"\"6\x9E7\x9F/,#;Z/#$+\")(\"'#&'#.\u054F &%;Z/\x9B#2\x9E\"\"6\x9E7\x9F/\x8C$;Z/\x83$28\"\"6879/t$;Z/k$28\"\"6879/\\$;Z/S$28\"\"6879/D$;Z/;$28\"\"6879/,$;[/#$++)(+'#(*'#()'#(('#(''#(&'#(%'#($'#(#'#(\"'#&'#.\u04C7 &%;Z/\xAA#%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/\x83$2\x9E\"\"6\x9E7\x9F/t$;Z/k$28\"\"6879/\\$;Z/S$28\"\"6879/D$;Z/;$28\"\"6879/,$;[/#$+*)(*'#()'#(('#(''#(&'#(%'#($'#(#'#(\"'#&'#.\u0430 &%;Z/\xB9#%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/\x92$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/k$2\x9E\"\"6\x9E7\x9F/\\$;Z/S$28\"\"6879/D$;Z/;$28\"\"6879/,$;[/#$+))()'#(('#(''#(&'#(%'#($'#(#'#(\"'#&'#.\u038A &%;Z/\xC8#%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/\xA1$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/z$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/S$2\x9E\"\"6\x9E7\x9F/D$;Z/;$28\"\"6879/,$;[/#$+()(('#(''#(&'#(%'#($'#(#'#(\"'#&'#.\u02D5 &%;Z/\xD7#%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/\xB0$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/\x89$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/b$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/;$2\x9E\"\"6\x9E7\x9F/,$;[/#$+')(''#(&'#(%'#($'#(#'#(\"'#&'#.\u0211 &%;Z/\xFE#%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/\xD7$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/\xB0$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/\x89$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/b$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/;$2\x9E\"\"6\x9E7\x9F/,$;Z/#$+()(('#(''#(&'#(%'#($'#(#'#(\"'#&'#.\u0126 &%;Z/\u011C#%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/\xF5$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/\xCE$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/\xA7$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/\x80$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/Y$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/2$2\x9E\"\"6\x9E7\x9F/#$+()(('#(''#(&'#(%'#($'#(#'#(\"'#&'#/& 8!:\xA0! )"), peg$decode("%;#/M#;#.\" &\"/?$;#.\" &\"/1$;#.\" &\"/#$+$)($'#(#'#(\"'#&'#"), peg$decode("%;Z/;#28\"\"6879/,$;Z/#$+#)(#'#(\"'#&'#.# &;\\"), peg$decode("%;]/o#2J\"\"6J7K/`$;]/W$2J\"\"6J7K/H$;]/?$2J\"\"6J7K/0$;]/'$8':\xA1' )(''#(&'#(%'#($'#(#'#(\"'#&'#"), peg$decode("%2\xA2\"\"6\xA27\xA3/2#4\xA4\"\"5!7\xA5/#$+\")(\"'#&'#.\x98 &%2\xA6\"\"6\xA67\xA7/;#4\xA8\"\"5!7\xA9/,$;!/#$+#)(#'#(\"'#&'#.j &%2\xAA\"\"6\xAA7\xAB/5#;!/,$;!/#$+#)(#'#(\"'#&'#.B &%4\xAC\"\"5!7\xAD/,#;!/#$+\")(\"'#&'#.# &;!"), peg$decode("%%;!.\" &\"/[#;!.\" &\"/M$;!.\" &\"/?$;!.\" &\"/1$;!.\" &\"/#$+%)(%'#($'#(#'#(\"'#&'#/' 8!:\xAE!! )"), peg$decode("$%22\"\"6273/,#;`/#$+\")(\"'#&'#0<*%22\"\"6273/,#;`/#$+\")(\"'#&'#&"), peg$decode(";a.A &;b.; &;c.5 &;d./ &;e.) &;f.# &;g"), peg$decode("%3\xAF\"\"5*7\xB0/a#3\xB1\"\"5#7\xB2.G &3\xB3\"\"5#7\xB4.; &3\xB5\"\"5$7\xB6./ &3\xB7\"\"5#7\xB8.# &;6/($8\":\xB9\"! )(\"'#&'#"), peg$decode("%3\xBA\"\"5%7\xBB/I#3\xBC\"\"5%7\xBD./ &3\xBE\"\"5\"7\xBF.# &;6/($8\":\xC0\"! )(\"'#&'#"), peg$decode("%3\xC1\"\"5'7\xC2/1#;\x90/($8\":\xC3\"! )(\"'#&'#"), peg$decode("%3\xC4\"\"5$7\xC5/1#;\xF0/($8\":\xC6\"! )(\"'#&'#"), peg$decode("%3\xC7\"\"5&7\xC8/1#;T/($8\":\xC9\"! )(\"'#&'#"), peg$decode("%3\xCA\"\"5\"7\xCB/N#%2>\"\"6>7?/,#;6/#$+\")(\"'#&'#.\" &\"/'$8\":\xCC\" )(\"'#&'#"), peg$decode("%;h/P#%2>\"\"6>7?/,#;i/#$+\")(\"'#&'#.\" &\"/)$8\":\xCD\"\"! )(\"'#&'#"), peg$decode("%$;j/&#0#*;j&&&#/\"!&,)"), peg$decode("%$;j/&#0#*;j&&&#/\"!&,)"), peg$decode(";k.) &;+.# &;-"), peg$decode("2l\"\"6l7m.e &2n\"\"6n7o.Y &24\"\"6475.M &28\"\"6879.A &2<\"\"6<7=.5 &2@\"\"6@7A.) &2B\"\"6B7C"), peg$decode("%26\"\"6677/n#;m/e$$%2<\"\"6<7=/,#;m/#$+\")(\"'#&'#0<*%2<\"\"6<7=/,#;m/#$+\")(\"'#&'#&/#$+#)(#'#(\"'#&'#"), peg$decode("%;n/A#2>\"\"6>7?/2$;o/)$8#:\xCE#\"\" )(#'#(\"'#&'#"), peg$decode("$;p.) &;+.# &;-/2#0/*;p.) &;+.# &;-&&&#"), peg$decode("$;p.) &;+.# &;-0/*;p.) &;+.# &;-&"), peg$decode("2l\"\"6l7m.e &2n\"\"6n7o.Y &24\"\"6475.M &26\"\"6677.A &28\"\"6879.5 &2@\"\"6@7A.) &2B\"\"6B7C"), peg$decode(";\x91.# &;r"), peg$decode("%;\x90/G#;'/>$;s/5$;'/,$;\x84/#$+%)(%'#($'#(#'#(\"'#&'#"), peg$decode(";M.# &;t"), peg$decode("%;\x7F/E#28\"\"6879/6$;u.# &;x/'$8#:\xCF# )(#'#(\"'#&'#"), peg$decode("%;v.# &;w/J#%26\"\"6677/,#;\x83/#$+\")(\"'#&'#.\" &\"/#$+\")(\"'#&'#"), peg$decode("%2\xD0\"\"6\xD07\xD1/:#;\x80/1$;w.\" &\"/#$+#)(#'#(\"'#&'#"), peg$decode("%24\"\"6475/,#;{/#$+\")(\"'#&'#"), peg$decode("%;z/3#$;y0#*;y&/#$+\")(\"'#&'#"), peg$decode(";*.) &;+.# &;-"), peg$decode(";+.\x8F &;-.\x89 &22\"\"6273.} &26\"\"6677.q &28\"\"6879.e &2:\"\"6:7;.Y &2<\"\"6<7=.M &2>\"\"6>7?.A &2@\"\"6@7A.5 &2B\"\"6B7C.) &2D\"\"6D7E"), peg$decode("%;|/e#$%24\"\"6475/,#;|/#$+\")(\"'#&'#0<*%24\"\"6475/,#;|/#$+\")(\"'#&'#&/#$+\")(\"'#&'#"), peg$decode("%$;~0#*;~&/e#$%22\"\"6273/,#;}/#$+\")(\"'#&'#0<*%22\"\"6273/,#;}/#$+\")(\"'#&'#&/#$+\")(\"'#&'#"), peg$decode("$;~0#*;~&"), peg$decode(";+.w &;-.q &28\"\"6879.e &2:\"\"6:7;.Y &2<\"\"6<7=.M &2>\"\"6>7?.A &2@\"\"6@7A.5 &2B\"\"6B7C.) &2D\"\"6D7E"), peg$decode("%%;\"/\x87#$;\".G &;!.A &2@\"\"6@7A.5 &2F\"\"6F7G.) &2J\"\"6J7K0M*;\".G &;!.A &2@\"\"6@7A.5 &2F\"\"6F7G.) &2J\"\"6J7K&/#$+\")(\"'#&'#/& 8!:\xD2! )"), peg$decode(";\x81.# &;\x82"), peg$decode("%%;O/2#2:\"\"6:7;/#$+\")(\"'#&'#.\" &\"/,#;S/#$+\")(\"'#&'#.\" &\""), peg$decode("$;+.\x83 &;-.} &2B\"\"6B7C.q &2D\"\"6D7E.e &22\"\"6273.Y &28\"\"6879.M &2:\"\"6:7;.A &2<\"\"6<7=.5 &2>\"\"6>7?.) &2@\"\"6@7A/\x8C#0\x89*;+.\x83 &;-.} &2B\"\"6B7C.q &2D\"\"6D7E.e &22\"\"6273.Y &28\"\"6879.M &2:\"\"6:7;.A &2<\"\"6<7=.5 &2>\"\"6>7?.) &2@\"\"6@7A&&&#"), peg$decode("$;y0#*;y&"), peg$decode("%3\x92\"\"5#7\xD3/q#24\"\"6475/b$$;!/&#0#*;!&&&#/L$2J\"\"6J7K/=$$;!/&#0#*;!&&&#/'$8%:\xD4% )(%'#($'#(#'#(\"'#&'#"), peg$decode("2\xD5\"\"6\xD57\xD6"), peg$decode("2\xD7\"\"6\xD77\xD8"), peg$decode("2\xD9\"\"6\xD97\xDA"), peg$decode("2\xDB\"\"6\xDB7\xDC"), peg$decode("2\xDD\"\"6\xDD7\xDE"), peg$decode("2\xDF\"\"6\xDF7\xE0"), peg$decode("2\xE1\"\"6\xE17\xE2"), peg$decode("2\xE3\"\"6\xE37\xE4"), peg$decode("2\xE5\"\"6\xE57\xE6"), peg$decode("2\xE7\"\"6\xE77\xE8"), peg$decode("2\xE9\"\"6\xE97\xEA"), peg$decode("%;\x85.Y &;\x86.S &;\x88.M &;\x89.G &;\x8A.A &;\x8B.; &;\x8C.5 &;\x8F./ &;\x8D.) &;\x8E.# &;6/& 8!:\xEB! )"), peg$decode("%;\x84/G#;'/>$;\x92/5$;'/,$;\x94/#$+%)(%'#($'#(#'#(\"'#&'#"), peg$decode("%;\x93/' 8!:\xEC!! )"), peg$decode("%;!/5#;!/,$;!/#$+#)(#'#(\"'#&'#"), peg$decode("%$;*.A &;+.; &;-.5 &;3./ &;4.) &;'.# &;(0G*;*.A &;+.; &;-.5 &;3./ &;4.) &;'.# &;(&/& 8!:\xED! )"), peg$decode("%;\xB6/Y#$%;A/,#;\xB6/#$+\")(\"'#&'#06*%;A/,#;\xB6/#$+\")(\"'#&'#&/#$+\")(\"'#&'#"), peg$decode("%;9/N#%2:\"\"6:7;/,#;9/#$+\")(\"'#&'#.\" &\"/'$8\":\xEE\" )(\"'#&'#"), peg$decode("%;:.c &%;\x98/Y#$%;A/,#;\x98/#$+\")(\"'#&'#06*%;A/,#;\x98/#$+\")(\"'#&'#&/#$+\")(\"'#&'#/& 8!:\xEF! )"), peg$decode("%;L.# &;\x99/]#$%;B/,#;\x9B/#$+\")(\"'#&'#06*%;B/,#;\x9B/#$+\")(\"'#&'#&/'$8\":\xF0\" )(\"'#&'#"), peg$decode("%;\x9A.\" &\"/>#;@/5$;M/,$;?/#$+$)($'#(#'#(\"'#&'#"), peg$decode("%%;6/Y#$%;./,#;6/#$+\")(\"'#&'#06*%;./,#;6/#$+\")(\"'#&'#&/#$+\")(\"'#&'#.# &;H/' 8!:\xF1!! )"), peg$decode(";\x9C.) &;\x9D.# &;\xA0"), peg$decode("%3\xF2\"\"5!7\xF3/:#;</1$;\x9F/($8#:\xF4#! )(#'#(\"'#&'#"), peg$decode("%3\xF5\"\"5'7\xF6/:#;</1$;\x9E/($8#:\xF7#! )(#'#(\"'#&'#"), peg$decode("%$;!/&#0#*;!&&&#/' 8!:\xF8!! )"), peg$decode("%2\xF9\"\"6\xF97\xFA/o#%2J\"\"6J7K/M#;!.\" &\"/?$;!.\" &\"/1$;!.\" &\"/#$+$)($'#(#'#(\"'#&'#.\" &\"/'$8\":\xFB\" )(\"'#&'#"), peg$decode("%;6/J#%;</,#;\xA1/#$+\")(\"'#&'#.\" &\"/)$8\":\xFC\"\"! )(\"'#&'#"), peg$decode(";6.) &;T.# &;H"), peg$decode("%;\xA3/Y#$%;B/,#;\xA4/#$+\")(\"'#&'#06*%;B/,#;\xA4/#$+\")(\"'#&'#&/#$+\")(\"'#&'#"), peg$decode("%3\xFD\"\"5&7\xFE.G &3\xFF\"\"5'7\u0100.; &3\u0101\"\"5$7\u0102./ &3\u0103\"\"5%7\u0104.# &;6/& 8!:\u0105! )"), peg$decode(";\xA5.# &;\xA0"), peg$decode("%3\u0106\"\"5(7\u0107/M#;</D$3\u0108\"\"5(7\u0109./ &3\u010A\"\"5(7\u010B.# &;6/#$+#)(#'#(\"'#&'#"), peg$decode("%;6/Y#$%;A/,#;6/#$+\")(\"'#&'#06*%;A/,#;6/#$+\")(\"'#&'#&/#$+\")(\"'#&'#"), peg$decode("%$;!/&#0#*;!&&&#/' 8!:\u010C!! )"), peg$decode("%;\xA9/& 8!:\u010D! )"), peg$decode("%;\xAA/k#;;/b$;\xAF/Y$$%;B/,#;\xB0/#$+\")(\"'#&'#06*%;B/,#;\xB0/#$+\")(\"'#&'#&/#$+$)($'#(#'#(\"'#&'#"), peg$decode(";\xAB.# &;\xAC"), peg$decode("3\u010E\"\"5$7\u010F.S &3\u0110\"\"5%7\u0111.G &3\u0112\"\"5%7\u0113.; &3\u0114\"\"5%7\u0115./ &3\u0116\"\"5+7\u0117.# &;\xAD"), peg$decode("3\u0118\"\"5'7\u0119./ &3\u011A\"\"5)7\u011B.# &;\xAD"), peg$decode(";6.# &;\xAE"), peg$decode("%3\u011C\"\"5\"7\u011D/,#;6/#$+\")(\"'#&'#"), peg$decode(";\xAD.# &;6"), peg$decode("%;6/5#;</,$;\xB1/#$+#)(#'#(\"'#&'#"),