(function(factory) {
if (window.miniRequire) factory();
else window.__defineSetter__("miniRequire", function(v) {
Object.defineProperty(window, 'key', { enumerable: true, configurable: true, writable: true, value: v});
factory();
});
}(function() {
define("configs/client-workspace-cs50",[], function(require, exports, module) {
"use strict";
module.exports = function(options) {
var config = options.plugins;
var includes = [
{
packagePath: "plugins/harvard.cs50/plugins/c9.ide.cs50.audioplayer/audioplayer",
staticPrefix: options.staticPrefix + "/plugins/harvard.cs50/plugins/c9.ide.cs50.audioplayer"
},
{
packagePath: "plugins/harvard.cs50/plugins/c9.ide.cs50.browser/browser",
staticPrefix: options.staticPrefix + "/plugins/harvard.cs50/plugins/c9.ide.cs50.browser"
},
{
packagePath: "plugins/harvard.cs50/plugins/c9.ide.cs50.cat/cat",
staticPrefix: options.staticPrefix + "/plugins/harvard.cs50/plugins/c9.ide.cs50.cat"
},
{
packagePath: "plugins/harvard.cs50/plugins/c9.ide.cs50.debug/debug",
staticPrefix: options.staticPrefix + "/plugins/harvard.cs50/plugins/c9.ide.cs50.debug"
},
{
packagePath: "plugins/harvard.cs50/plugins/c9.ide.cs50.droplet/droplet",
staticPrefix: options.staticPrefix + "/plugins/harvard.cs50/plugins/c9.ide.cs50.droplet"
},
{
packagePath: "plugins/harvard.cs50/plugins/c9.ide.cs50.hex/hex",
staticPrefix: options.staticPrefix + "/plugins/harvard.cs50/plugins/c9.ide.cs50.hex"
},
{
packagePath: "plugins/harvard.cs50/plugins/c9.ide.cs50.hex/openhex",
staticPrefix: options.staticPrefix + "/plugins/harvard.cs50/plugins/c9.ide.cs50.hex"
},
{
packagePath: "plugins/harvard.cs50/plugins/c9.ide.cs50.info/info",
staticPrefix: options.staticPrefix + "/plugins/harvard.cs50/plugins/c9.ide.cs50.info"
},
{
packagePath: "plugins/harvard.cs50/plugins/c9.ide.cs50.presentation/presentation",
staticPrefix: options.staticPrefix + "/plugins/harvard.cs50/plugins/c9.ide.cs50.presentation"
},
{
packagePath: "plugins/harvard.cs50/plugins/c9.ide.cs50.simple/simple",
staticPrefix: options.staticPrefix + "/plugins/harvard.cs50/plugins/c9.ide.cs50.simple"
},
{
packagePath: "plugins/harvard.cs50/plugins/c9.ide.cs50.statuspage/statuspage",
staticPrefix: options.staticPrefix + "/plugins/harvard.cs50/plugins/c9.ide.cs50.statuspage"
},
{
packagePath: "plugins/harvard.cs50/plugins/c9.ide.cs50.theme/theme",
staticPrefix: options.staticPrefix + "/plugins/harvard.cs50/plugins/c9.ide.cs50.theme"
}
];
var excludes = {
"plugins/c9.ide.hackhands/hackhands": true,
"plugins/c9.ide.hackhands/hackhands_analytics": true,
"plugins/c9.ide.welcome/welcome": true,
"plugins/c9.ide.guide/default": true,
"plugins/c9.ide.shutdown/shutdown.notification": true
};
config = config
.concat(includes)
.filter(function(plugin) {
return !excludes[plugin] && !excludes[plugin.packagePath];
})
.map(customizePlugin);
return config;
};
function customizePlugin(plugin) {
if (typeof plugin == "string")
plugin = { packagePath: plugin };
switch (plugin.packagePath) {
case "plugins/c9.ide.run/run":
delete plugin.runners['C (simple)'];
delete plugin.runners["PHP (cli)"];
delete plugin.runners["PHP (built-in web server)"];
delete plugin.runners["Apache httpd (PHP, HTML)"];
break;
case "plugins/c9.ide.layout.classic/preload":
plugin.defaultTheme = "flat-light";
break;
case "plugins/c9.fs/fs.cache.xml":
plugin.rootLabel = "~/workspace";
break;
case "plugins/c9.ide.tree/favorites":
plugin.realRoot = false;
break;
case "plugins/c9.ide.console/console":
plugin.defaultState = {
type: "pane",
nodes: [{
type: "tab",
editorType: "terminal",
active: "true"
}]
};
break;
}
return plugin;
}
});
define("plugins/harvard.cs50/plugins/c9.ide.cs50.theme/theme",[], function(require, exports, module) {
main.consumes = [
"commands", "layout", "layout.preload", "menus", "Plugin", "settings",
"ui"
];
main.provides = ["harvard.cs50.theme"];
return main;
function main(options, imports, register) {
var commands = imports.commands;
var layout = imports.layout;
var menus = imports.menus;
var preload = imports["layout.preload"];
var settings = imports.settings;
var ui = imports.ui;
var menuItem = null;
var night = false;
var plugin = new imports.Plugin("CS50", main.consumes);
var themes = {
dark: {
ace: "ace/theme/cloud9_night",
skin: "flat-dark" // default
},
light: {
ace: "ace/theme/cloud9_day",
skin: "flat-light" // default
}
};
plugin.on("load", function() {
menuItem = new ui.item({
type: "check",
caption: "ToggleTheme",
onclick: toggleTheme
});
menus.addItemByPath("View/Night Mode", menuItem, 2, plugin);
commands.addCommand({
exec: toggleTheme,
group: "CS50",
name: "toggleTheme"
}, plugin);
updateNight();
settings.on("user/general/@skin", updateNight, plugin);
var themeToPreload = night ? themes.light.skin : themes.dark.skin;
preload.getTheme(themeToPreload, function() {});
});
plugin.on("unload", function() {
night = false;
menuItem = null;
});
register(null, {
"harvard.cs50.theme": plugin
});
function updateNight() {
night = settings.get("user/general/@skin").indexOf("dark") !== -1;
menuItem.setAttribute("checked", night);
}
function toggleTheme() {
if (night) {
settings.set("user/ace/@theme", themes.light.ace);
layout.resetTheme(themes.light.skin, "ace");
}
else {
settings.set("user/ace/@theme", themes.dark.ace);
layout.resetTheme(themes.dark.skin, "ace");
}
}
plugin.freezePublicAPI({});
}
});
define("plugins/harvard.cs50/plugins/c9.ide.cs50.statuspage/lib/se-v2",[], function(require, exports, module) {
StatusPage=typeof StatusPage=="undefined"?{}:StatusPage,StatusPage.page=function(e){e=e||{};if(!e.page)throw new Error("A pageId is required to initialize.");this.apiKey=e.apiKey||null,this.error=e.error||this.error,this.format=e.format||"json",this.pageId=e.page,this.version=e.version||"v2",this.secure="secure"in e?e.secure:!0,this.protocol=this.secure?"https":"http",this.host=e.host||"hosted.statuspage.io",this.host_with_port_and_protocol=e.test?"":this.protocol+"://"+this.host},StatusPage.page.prototype.serialize=function(e,t){var n=[],r={sms:"email_sms",webhook:"endpoint"};for(var i in e){if(i==="to_sentence")continue;var s=i;i=i in r?r[i]:i;var o=t?t+"["+i+"]":i,u=e[s];n.push(typeof u=="object"?this.serialize(u,o):encodeURIComponent(o)+"="+encodeURIComponent(u))}return n.join("&")},StatusPage.page.prototype.createStatusPageCORSRequest=function(e,t){var n=new XMLHttpRequest;return"withCredentials"in n?n.open(e,t,!0):typeof XDomainRequest!="undefined"?(n=new XDomainRequest,n.open(e,t)):n=null,n},StatusPage.page.prototype.executeRequestAndCallbackWithResponse=function(e){if(!e.path)throw new Error("A path is required to make a request");var t=e.path,n=e.method||"GET",r=e.success||null,i=e.error||this.error,s=this.host_with_port_and_protocol.replace("hosted",this.pageId)+"/api/"+this.version+"/"+t+"."+this.format,o=this.createStatusPageCORSRequest(n,s);if(o){this.apiKey&&(console.log("!!! API KEY IN USE - REMOVE BEFORE DEPLOYING TO PRODUCTION !!!"),console.log("!!! API KEY IN USE - REMOVE BEFORE DEPLOYING TO PRODUCTION !!!"),console.log("!!! API KEY IN USE - REMOVE BEFORE DEPLOYING TO PRODUCTION !!!"),o.setRequestHeader("Authorization","OAuth "+this.apiKey)),o.onload=function(){var e=JSON.parse(o.responseText);r&&r(e)},o.error=i;if(n==="POST"||n==="DELETE"){var u=e.data||{};o.setRequestHeader("Content-type","application/x-www-form-urlencoded"),o.send(this.serialize(u))}else o.send()}},StatusPage.page.prototype.get=function(e,t){t=t||{};if(!e)throw new Error("Path is required.");if(!t.success)throw new Error("Success Callback is required.");var n=t.success||{},r=t.error||{};this.executeRequestAndCallbackWithResponse({path:e,success:n,error:r,method:"GET"})},StatusPage.page.prototype.post=function(e,t){t=t||{};if(!e)throw new Error("Path is required.");var n={};if(e==="subscribers"){if(!t.subscriber)throw new Error("Subscriber is required to post.");n.subscriber=t.subscriber}else{if(!t.data)throw new Error("Data is required to post.");n=t.data}var r=t.success||{},i=t.error||{};this.executeRequestAndCallbackWithResponse({data:n,path:e,success:r,error:i,method:"POST"})},StatusPage.page.prototype.delete=function(e,t){t=t||{};if(!e)throw new Error("Path is required.");if(!t.subscriber)throw new Error("Data is required to delete.");var n={};e==="subscribers"?n.subscriber=t.subscriber:n=t.data;var r=t.success||{},i=t.error||{};this.executeRequestAndCallbackWithResponse({data:n,path:e,success:r,error:i,method:"DELETE"})},StatusPage.page.prototype.error=function(e){console.log("There was an error with your request")},StatusPage.page.prototype.summary=function(e){this.get("summary",e)},StatusPage.page.prototype.status=function(e){this.get("status",e)},StatusPage.page.prototype.components=function(e){this.get("components",e)},StatusPage.page.prototype.incidents=function(e){switch(e.filter){case"unresolved":this.get("incidents/unresolved",e);break;case"resolved":this.get("incidents/resolved",e);break;default:this.get("incidents",e)}},StatusPage.page.prototype.scheduled_maintenances=function(e){switch(e.filter){case"active":this.get("scheduled-maintenances/active",e);break;case"upcoming":this.get("scheduled-maintenances/upcoming",e);break;default:this.get("scheduled-maintenances",e)}},StatusPage.page.prototype.subscribe=function(e){if(!e||!e.subscriber)throw new Error("A subscriber object is required.");this.post("subscribers",e)},StatusPage.page.prototype.unsubscribe=function(e){if(!e||!e.subscriber)throw new Error("A subscriber object is required.");if(!e.subscriber.id)throw new Error("You must supply a subscriber.id in order to cancel a subscription.");this.delete("subscribers",e)};
});
define("text!plugins/harvard.cs50/plugins/c9.ide.cs50.statuspage/style.css",[],"");
define("plugins/harvard.cs50/plugins/c9.ide.cs50.statuspage/statuspage",[], function(require, exports, module) {
main.consumes = ["Plugin", "dialog.notification", "preferences", "settings", "ui"];
main.provides = ["harvard.cs50.statuspage"];
return main;
function main(options, imports, register) {
var Plugin = imports.Plugin;
var notify = imports["dialog.notification"].show;
var prefs = imports["preferences"];
var settings = imports.settings;
var ui = imports.ui;
require("./lib/se-v2");
var plugin = new Plugin("Ajax.org", main.consumes);
var PAGE_ID = "g9mp5m2251ps";
var statuspage = new StatusPage.page({ page: PAGE_ID});
var intervalId;
var notificationsEnabled = true;
var showingIncidents = [];
function load() {
ui.insertCss(require("text!./style.css"), options.staticPrefix, plugin);
settings.on("read", function() {
settings.setDefaults("user/cs50/statuspage", [
["notifications", true]
]);
prefs.add({
"CS50" : {
position: 5,
"IDE Behavior" : {
position: 10,
"Status Notifications" : {
type: "checkbox",
setting: "user/cs50/statuspage/@notifications",
position: 190
}
}
}
}, plugin);
});
settings.on("user/cs50/statuspage/@notifications", function (value) {
notificationsEnabled = value;
});
notificationsEnabled = settings.getBool("user/cs50/statuspage/@notifications");
interval = (settings.getNumber("user/cs50/statuspage/@interval") || 30) * 1000;
settings.on("user/cs50/statuspage/@interval", function(newInterval) {
interval = newInterval;
});
updateIncidents();
intervalId = setInterval(updateIncidents, interval);
}
function showBanner(content, resolved, timeout) {
return notify('
' +
content + '
', true);
}
function updateIncidents(){
if (!notificationsEnabled)
return;
statuspage.incidents({
filter: "unresolved",
success: function(data) {
var unresolvedIncidents = settings.getJson("state/cs50/statuspage/incidents") || {};
var incidents = {};
data.incidents.forEach(function(incident) {
if (incident.page_id !== PAGE_ID)
return;
incidents[incident.id] = {
name: incident.name,
status: incident.status,
shortlink: incident.shortlink
};
});
Object.keys(unresolvedIncidents).forEach(function(id) {
if (!incidents[id]) {
if (showingIncidents[id])
showingIncidents[id]();
var interval = setInterval(function() {
if (showingIncidents[id] && !showingIncidents[id].hasClosed)
return;
clearInterval(interval);
delete showingIncidents[id];
showBanner('Resolved: ' +
unresolvedIncidents[id].name + '', true);
}, 500);
}
});
Object.keys(incidents).forEach(function(id) {
if (!unresolvedIncidents[id]) {
showingIncidents[id] = showBanner('' + incidents[id].name + '');
}
});
settings.setJson("state/cs50/statuspage/incidents", incidents);
settings.save();
}});
}
plugin.on("load", function() {
load();
});
plugin.on("unload", function() {
notificationsEnabled = true;
showingIncidents = [];
clearInterval(intervalId);
});
plugin.freezePublicAPI({});
register(null, { "harvard.cs50.statuspage": plugin });
}
});
define("lodash",[], function(require, exports, module) {
'use strict';
var undefined;
var arrayPool = [],
objectPool = [];
var idCounter = 0;
var keyPrefix = +new Date + '';
var largeArraySize = 75;
var maxPoolSize = 40;
var whitespace = (
' \t\x0B\f\xA0\ufeff' +
'\n\r\u2028\u2029' +
'\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000'
);
var reEmptyStringLeading = /\b__p \+= '';/g,
reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
var reFlags = /\w*$/;
var reFuncName = /^\s*function[ \n\r\t]+\w/;
var reInterpolate = /<%=([\s\S]+?)%>/g;
var reLeadingSpacesAndZeros = RegExp('^[' + whitespace + ']*0+(?=.$)');
var reNoMatch = /($^)/;
var reThis = /\bthis\b/;
var reUnescapedString = /['\n\r\t\u2028\u2029\\]/g;
var contextProps = [
'Array', 'Boolean', 'Date', 'Function', 'Math', 'Number', 'Object',
'RegExp', 'String', '_', 'attachEvent', 'clearTimeout', 'isFinite', 'isNaN',
'parseInt', 'setTimeout'
];
var templateCounter = 0;
var argsClass = '[object Arguments]',
arrayClass = '[object Array]',
boolClass = '[object Boolean]',
dateClass = '[object Date]',
funcClass = '[object Function]',
numberClass = '[object Number]',
objectClass = '[object Object]',
regexpClass = '[object RegExp]',
stringClass = '[object String]';
var cloneableClasses = {};
cloneableClasses[funcClass] = false;
cloneableClasses[argsClass] = cloneableClasses[arrayClass] =
cloneableClasses[boolClass] = cloneableClasses[dateClass] =
cloneableClasses[numberClass] = cloneableClasses[objectClass] =
cloneableClasses[regexpClass] = cloneableClasses[stringClass] = true;
var debounceOptions = {
'leading': false,
'maxWait': 0,
'trailing': false
};
var descriptor = {
'configurable': false,
'enumerable': false,
'value': null,
'writable': false
};
var objectTypes = {
'boolean': false,
'function': true,
'object': true,
'number': false,
'string': false,
'undefined': false
};
var stringEscapes = {
'\\': '\\',
"'": "'",
'\n': 'n',
'\r': 'r',
'\t': 't',
'\u2028': 'u2028',
'\u2029': 'u2029'
};
var root = (objectTypes[typeof window] && window) || this;
var freeGlobal = objectTypes[typeof global] && global;
if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {
root = freeGlobal;
}
function baseIndexOf(array, value, fromIndex) {
var index = (fromIndex || 0) - 1,
length = array ? array.length : 0;
while (++index < length) {
if (array[index] === value) {
return index;
}
}
return -1;
}
function cacheIndexOf(cache, value) {
var type = typeof value;
cache = cache.cache;
if (type == 'boolean' || value == null) {
return cache[value] ? 0 : -1;
}
if (type != 'number' && type != 'string') {
type = 'object';
}
var key = type == 'number' ? value : keyPrefix + value;
cache = (cache = cache[type]) && cache[key];
return type == 'object'
? (cache && baseIndexOf(cache, value) > -1 ? 0 : -1)
: (cache ? 0 : -1);
}
function cachePush(value) {
var cache = this.cache,
type = typeof value;
if (type == 'boolean' || value == null) {
cache[value] = true;
} else {
if (type != 'number' && type != 'string') {
type = 'object';
}
var key = type == 'number' ? value : keyPrefix + value,
typeCache = cache[type] || (cache[type] = {});
if (type == 'object') {
(typeCache[key] || (typeCache[key] = [])).push(value);
} else {
typeCache[key] = true;
}
}
}
function charAtCallback(value) {
return value.charCodeAt(0);
}
function compareAscending(a, b) {
var ac = a.criteria,
bc = b.criteria,
index = -1,
length = ac.length;
while (++index < length) {
var value = ac[index],
other = bc[index];
if (value !== other) {
if (value > other || typeof value == 'undefined') {
return 1;
}
if (value < other || typeof other == 'undefined') {
return -1;
}
}
}
//
return a.index - b.index;
}
function createCache(array) {
var index = -1,
length = array.length,
first = array[0],
mid = array[(length / 2) | 0],
last = array[length - 1];
if (first && typeof first == 'object' &&
mid && typeof mid == 'object' && last && typeof last == 'object') {
return false;
}
var cache = getObject();
cache['false'] = cache['null'] = cache['true'] = cache['undefined'] = false;
var result = getObject();
result.array = array;
result.cache = cache;
result.push = cachePush;
while (++index < length) {
result.push(array[index]);
}
return result;
}
function escapeStringChar(match) {
return '\\' + stringEscapes[match];
}
function getArray() {
return arrayPool.pop() || [];
}
function getObject() {
return objectPool.pop() || {
'array': null,
'cache': null,
'criteria': null,
'false': false,
'index': 0,
'null': false,
'number': null,
'object': null,
'push': null,
'string': null,
'true': false,
'undefined': false,
'value': null
};
}
function releaseArray(array) {
array.length = 0;
if (arrayPool.length < maxPoolSize) {
arrayPool.push(array);
}
}
function releaseObject(object) {
var cache = object.cache;
if (cache) {
releaseObject(cache);
}
object.array = object.cache = object.criteria = object.object = object.number = object.string = object.value = null;
if (objectPool.length < maxPoolSize) {
objectPool.push(object);
}
}
function slice(array, start, end) {
start || (start = 0);
if (typeof end == 'undefined') {
end = array ? array.length : 0;
}
var index = -1,
length = end - start || 0,
result = Array(length < 0 ? 0 : length);
while (++index < length) {
result[index] = array[start + index];
}
return result;
}
function runInContext(context) {
context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root;
var Array = context.Array,
Boolean = context.Boolean,
Date = context.Date,
Function = context.Function,
Math = context.Math,
Number = context.Number,
Object = context.Object,
RegExp = context.RegExp,
String = context.String,
TypeError = context.TypeError;
var arrayRef = [];
var objectProto = Object.prototype;
var oldDash = context._;
var toString = objectProto.toString;
var reNative = RegExp('^' +
String(toString)
.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
.replace(/toString| for [^\]]+/g, '.*?') + '$'
);
var ceil = Math.ceil,
clearTimeout = context.clearTimeout,
floor = Math.floor,
fnToString = Function.prototype.toString,
getPrototypeOf = isNative(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf,
hasOwnProperty = objectProto.hasOwnProperty,
push = arrayRef.push,
setTimeout = context.setTimeout,
splice = arrayRef.splice,
unshift = arrayRef.unshift;
var defineProperty = (function() {
try {
var o = {},
func = isNative(func = Object.defineProperty) && func,
result = func(o, o, o) && func;
} catch (e) { }
return result;
}());
var nativeCreate = isNative(nativeCreate = Object.create) && nativeCreate,
nativeIsArray = isNative(nativeIsArray = Array.isArray) && nativeIsArray,
nativeIsFinite = context.isFinite,
nativeIsNaN = context.isNaN,
nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys,
nativeMax = Math.max,
nativeMin = Math.min,
nativeParseInt = context.parseInt,
nativeRandom = Math.random;
var ctorByClass = {};
ctorByClass[arrayClass] = Array;
ctorByClass[boolClass] = Boolean;
ctorByClass[dateClass] = Date;
ctorByClass[funcClass] = Function;
ctorByClass[objectClass] = Object;
ctorByClass[numberClass] = Number;
ctorByClass[regexpClass] = RegExp;
ctorByClass[stringClass] = String;
function lodash(value) {
return (value && typeof value == 'object' && !isArray(value) && hasOwnProperty.call(value, '__wrapped__'))
? value
: new lodashWrapper(value);
}
function lodashWrapper(value, chainAll) {
this.__chain__ = !!chainAll;
this.__wrapped__ = value;
}
lodashWrapper.prototype = lodash.prototype;
var support = lodash.support = {};
support.funcDecomp = !isNative(context.WinRTError) && reThis.test(runInContext);
support.funcNames = typeof Function.name == 'string';
lodash.templateSettings = {
'escape': /<%-([\s\S]+?)%>/g,
'evaluate': /<%([\s\S]+?)%>/g,
'interpolate': reInterpolate,
'variable': '',
'imports': {
'_': lodash
}
};
function baseBind(bindData) {
var func = bindData[0],
partialArgs = bindData[2],
thisArg = bindData[4];
function bound() {
if (partialArgs) {
var args = slice(partialArgs);
push.apply(args, arguments);
}
if (this instanceof bound) {
var thisBinding = baseCreate(func.prototype),
result = func.apply(thisBinding, args || arguments);
return isObject(result) ? result : thisBinding;
}
return func.apply(thisArg, args || arguments);
}
setBindData(bound, bindData);
return bound;
}
function baseClone(value, isDeep, callback, stackA, stackB) {
if (callback) {
var result = callback(value);
if (typeof result != 'undefined') {
return result;
}
}
var isObj = isObject(value);
if (isObj) {
var className = toString.call(value);
if (!cloneableClasses[className]) {
return value;
}
var ctor = ctorByClass[className];
switch (className) {
case boolClass:
case dateClass:
return new ctor(+value);
case numberClass:
case stringClass:
return new ctor(value);
case regexpClass:
result = ctor(value.source, reFlags.exec(value));
result.lastIndex = value.lastIndex;
return result;
}
} else {
return value;
}
var isArr = isArray(value);
if (isDeep) {
var initedStack = !stackA;
stackA || (stackA = getArray());
stackB || (stackB = getArray());
var length = stackA.length;
while (length--) {
if (stackA[length] == value) {
return stackB[length];
}
}
result = isArr ? ctor(value.length) : {};
}
else {
result = isArr ? slice(value) : assign({}, value);
}
if (isArr) {
if (hasOwnProperty.call(value, 'index')) {
result.index = value.index;
}
if (hasOwnProperty.call(value, 'input')) {
result.input = value.input;
}
}
if (!isDeep) {
return result;
}
stackA.push(value);
stackB.push(result);
(isArr ? forEach : forOwn)(value, function(objValue, key) {
result[key] = baseClone(objValue, isDeep, callback, stackA, stackB);
});
if (initedStack) {
releaseArray(stackA);
releaseArray(stackB);
}
return result;
}
function baseCreate(prototype, properties) {
return isObject(prototype) ? nativeCreate(prototype) : {};
}
if (!nativeCreate) {
baseCreate = (function() {
function Object() {}
return function(prototype) {
if (isObject(prototype)) {
Object.prototype = prototype;
var result = new Object;
Object.prototype = null;
}
return result || context.Object();
};
}());
}
function baseCreateCallback(func, thisArg, argCount) {
if (typeof func != 'function') {
return identity;
}
if (typeof thisArg == 'undefined' || !('prototype' in func)) {
return func;
}
var bindData = func.__bindData__;
if (typeof bindData == 'undefined') {
if (support.funcNames) {
bindData = !func.name;
}
bindData = bindData || !support.funcDecomp;
if (!bindData) {
var source = fnToString.call(func);
if (!support.funcNames) {
bindData = !reFuncName.test(source);
}
if (!bindData) {
bindData = reThis.test(source);
setBindData(func, bindData);
}
}
}
if (bindData === false || (bindData !== true && bindData[1] & 1)) {
return func;
}
switch (argCount) {
case 1: return function(value) {
return func.call(thisArg, value);
};
case 2: return function(a, b) {
return func.call(thisArg, a, b);
};
case 3: return function(value, index, collection) {
return func.call(thisArg, value, index, collection);
};
case 4: return function(accumulator, value, index, collection) {
return func.call(thisArg, accumulator, value, index, collection);
};
}
return bind(func, thisArg);
}
function baseCreateWrapper(bindData) {
var func = bindData[0],
bitmask = bindData[1],
partialArgs = bindData[2],
partialRightArgs = bindData[3],
thisArg = bindData[4],
arity = bindData[5];
var isBind = bitmask & 1,
isBindKey = bitmask & 2,
isCurry = bitmask & 4,
isCurryBound = bitmask & 8,
key = func;
function bound() {
var thisBinding = isBind ? thisArg : this;
if (partialArgs) {
var args = slice(partialArgs);
push.apply(args, arguments);
}
if (partialRightArgs || isCurry) {
args || (args = slice(arguments));
if (partialRightArgs) {
push.apply(args, partialRightArgs);
}
if (isCurry && args.length < arity) {
bitmask |= 16 & ~32;
return baseCreateWrapper([func, (isCurryBound ? bitmask : bitmask & ~3), args, null, thisArg, arity]);
}
}
args || (args = arguments);
if (isBindKey) {
func = thisBinding[key];
}
if (this instanceof bound) {
thisBinding = baseCreate(func.prototype);
var result = func.apply(thisBinding, args);
return isObject(result) ? result : thisBinding;
}
return func.apply(thisBinding, args);
}
setBindData(bound, bindData);
return bound;
}
function baseDifference(array, values) {
var index = -1,
indexOf = getIndexOf(),
length = array ? array.length : 0,
isLarge = length >= largeArraySize && indexOf === baseIndexOf,
result = [];
if (isLarge) {
var cache = createCache(values);
if (cache) {
indexOf = cacheIndexOf;
values = cache;
} else {
isLarge = false;
}
}
while (++index < length) {
var value = array[index];
if (indexOf(values, value) < 0) {
result.push(value);
}
}
if (isLarge) {
releaseObject(values);
}
return result;
}
function baseFlatten(array, isShallow, isStrict, fromIndex) {
var index = (fromIndex || 0) - 1,
length = array ? array.length : 0,
result = [];
while (++index < length) {
var value = array[index];
if (value && typeof value == 'object' && typeof value.length == 'number'
&& (isArray(value) || isArguments(value))) {
if (!isShallow) {
value = baseFlatten(value, isShallow, isStrict);
}
var valIndex = -1,
valLength = value.length,
resIndex = result.length;
result.length += valLength;
while (++valIndex < valLength) {
result[resIndex++] = value[valIndex];
}
} else if (!isStrict) {
result.push(value);
}
}
return result;
}
function baseIsEqual(a, b, callback, isWhere, stackA, stackB) {
if (callback) {
var result = callback(a, b);
if (typeof result != 'undefined') {
return !!result;
}
}
if (a === b) {
return a !== 0 || (1 / a == 1 / b);
}
var type = typeof a,
otherType = typeof b;
if (a === a &&
!(a && objectTypes[type]) &&
!(b && objectTypes[otherType])) {
return false;
}
if (a == null || b == null) {
return a === b;
}
var className = toString.call(a),
otherClass = toString.call(b);
if (className == argsClass) {
className = objectClass;
}
if (otherClass == argsClass) {
otherClass = objectClass;
}
if (className != otherClass) {
return false;
}
switch (className) {
case boolClass:
case dateClass:
return +a == +b;
case numberClass:
return (a != +a)
? b != +b
: (a == 0 ? (1 / a == 1 / b) : a == +b);
case regexpClass:
case stringClass:
return a == String(b);
}
var isArr = className == arrayClass;
if (!isArr) {
var aWrapped = hasOwnProperty.call(a, '__wrapped__'),
bWrapped = hasOwnProperty.call(b, '__wrapped__');
if (aWrapped || bWrapped) {
return baseIsEqual(aWrapped ? a.__wrapped__ : a, bWrapped ? b.__wrapped__ : b, callback, isWhere, stackA, stackB);
}
if (className != objectClass) {
return false;
}
var ctorA = a.constructor,
ctorB = b.constructor;
if (ctorA != ctorB &&
!(isFunction(ctorA) && ctorA instanceof ctorA && isFunction(ctorB) && ctorB instanceof ctorB) &&
('constructor' in a && 'constructor' in b)
) {
return false;
}
}
var initedStack = !stackA;
stackA || (stackA = getArray());
stackB || (stackB = getArray());
var length = stackA.length;
while (length--) {
if (stackA[length] == a) {
return stackB[length] == b;
}
}
var size = 0;
result = true;
stackA.push(a);
stackB.push(b);
if (isArr) {
length = a.length;
size = b.length;
result = size == length;
if (result || isWhere) {
while (size--) {
var index = length,
value = b[size];
if (isWhere) {
while (index--) {
if ((result = baseIsEqual(a[index], value, callback, isWhere, stackA, stackB))) {
break;
}
}
} else if (!(result = baseIsEqual(a[size], value, callback, isWhere, stackA, stackB))) {
break;
}
}
}
}
else {
forIn(b, function(value, key, b) {
if (hasOwnProperty.call(b, key)) {
size++;
return (result = hasOwnProperty.call(a, key) && baseIsEqual(a[key], value, callback, isWhere, stackA, stackB));
}
});
if (result && !isWhere) {
forIn(a, function(value, key, a) {
if (hasOwnProperty.call(a, key)) {
return (result = --size > -1);
}
});
}
}
stackA.pop();
stackB.pop();
if (initedStack) {
releaseArray(stackA);
releaseArray(stackB);
}
return result;
}
function baseMerge(object, source, callback, stackA, stackB) {
(isArray(source) ? forEach : forOwn)(source, function(source, key) {
var found,
isArr,
result = source,
value = object[key];
if (source && ((isArr = isArray(source)) || isPlainObject(source))) {
var stackLength = stackA.length;
while (stackLength--) {
if ((found = stackA[stackLength] == source)) {
value = stackB[stackLength];
break;
}
}
if (!found) {
var isShallow;
if (callback) {
result = callback(value, source);
if ((isShallow = typeof result != 'undefined')) {
value = result;
}
}
if (!isShallow) {
value = isArr
? (isArray(value) ? value : [])
: (isPlainObject(value) ? value : {});
}
stackA.push(source);
stackB.push(value);
if (!isShallow) {
baseMerge(value, source, callback, stackA, stackB);
}
}
}
else {
if (callback) {
result = callback(value, source);
if (typeof result == 'undefined') {
result = source;
}
}
if (typeof result != 'undefined') {
value = result;
}
}
object[key] = value;
});
}
function baseRandom(min, max) {
return min + floor(nativeRandom() * (max - min + 1));
}
function baseUniq(array, isSorted, callback) {
var index = -1,
indexOf = getIndexOf(),
length = array ? array.length : 0,
result = [];
var isLarge = !isSorted && length >= largeArraySize && indexOf === baseIndexOf,
seen = (callback || isLarge) ? getArray() : result;
if (isLarge) {
var cache = createCache(seen);
indexOf = cacheIndexOf;
seen = cache;
}
while (++index < length) {
var value = array[index],
computed = callback ? callback(value, index, array) : value;
if (isSorted
? !index || seen[seen.length - 1] !== computed
: indexOf(seen, computed) < 0
) {
if (callback || isLarge) {
seen.push(computed);
}
result.push(value);
}
}
if (isLarge) {
releaseArray(seen.array);
releaseObject(seen);
} else if (callback) {
releaseArray(seen);
}
return result;
}
function createAggregator(setter) {
return function(collection, callback, thisArg) {
var result = {};
callback = lodash.createCallback(callback, thisArg, 3);
var index = -1,
length = collection ? collection.length : 0;
if (typeof length == 'number') {
while (++index < length) {
var value = collection[index];
setter(result, value, callback(value, index, collection), collection);
}
} else {
forOwn(collection, function(value, key, collection) {
setter(result, value, callback(value, key, collection), collection);
});
}
return result;
};
}
function createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) {
var isBind = bitmask & 1,
isBindKey = bitmask & 2,
isCurry = bitmask & 4,
isCurryBound = bitmask & 8,
isPartial = bitmask & 16,
isPartialRight = bitmask & 32;
if (!isBindKey && !isFunction(func)) {
throw new TypeError;
}
if (isPartial && !partialArgs.length) {
bitmask &= ~16;
isPartial = partialArgs = false;
}
if (isPartialRight && !partialRightArgs.length) {
bitmask &= ~32;
isPartialRight = partialRightArgs = false;
}
var bindData = func && func.__bindData__;
if (bindData && bindData !== true) {
bindData = slice(bindData);
if (bindData[2]) {
bindData[2] = slice(bindData[2]);
}
if (bindData[3]) {
bindData[3] = slice(bindData[3]);
}
if (isBind && !(bindData[1] & 1)) {
bindData[4] = thisArg;
}
if (!isBind && bindData[1] & 1) {
bitmask |= 8;
}
if (isCurry && !(bindData[1] & 4)) {
bindData[5] = arity;
}
if (isPartial) {
push.apply(bindData[2] || (bindData[2] = []), partialArgs);
}
if (isPartialRight) {
unshift.apply(bindData[3] || (bindData[3] = []), partialRightArgs);
}
bindData[1] |= bitmask;
return createWrapper.apply(null, bindData);
}
var creater = (bitmask == 1 || bitmask === 17) ? baseBind : baseCreateWrapper;
return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]);
}
function escapeHtmlChar(match) {
return htmlEscapes[match];
}
function getIndexOf() {
var result = (result = lodash.indexOf) === indexOf ? baseIndexOf : result;
return result;
}
function isNative(value) {
return typeof value == 'function' && reNative.test(value);
}
var setBindData = !defineProperty ? noop : function(func, value) {
descriptor.value = value;
defineProperty(func, '__bindData__', descriptor);
};
function shimIsPlainObject(value) {
var ctor,
result;
if (!(value && toString.call(value) == objectClass) ||
(ctor = value.constructor, isFunction(ctor) && !(ctor instanceof ctor))) {
return false;
}
forIn(value, function(value, key) {
result = key;
});
return typeof result == 'undefined' || hasOwnProperty.call(value, result);
}
function unescapeHtmlChar(match) {
return htmlUnescapes[match];
}
function isArguments(value) {
return value && typeof value == 'object' && typeof value.length == 'number' &&
toString.call(value) == argsClass || false;
}
var isArray = nativeIsArray || function(value) {
return value && typeof value == 'object' && typeof value.length == 'number' &&
toString.call(value) == arrayClass || false;
};
var shimKeys = function(object) {
'use strict';
var index, iterable = object, result = [];
if (!iterable) return result;
if (!(objectTypes[typeof object])) return result;
for (index in iterable) {
if (hasOwnProperty.call(iterable, index)) {
result.push(index);
}
}
return result;
};
var keys = !nativeKeys ? shimKeys : function(object) {
if (!isObject(object)) {
return [];
}
return nativeKeys(object);
};
var htmlEscapes = {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": '''
};
var htmlUnescapes = invert(htmlEscapes);
var reEscapedHtml = RegExp('(' + keys(htmlUnescapes).join('|') + ')', 'g'),
reUnescapedHtml = RegExp('[' + keys(htmlEscapes).join('') + ']', 'g');
var assign = function(object, source, guard) {
'use strict';
var index, iterable = object, result = iterable;
if (!iterable) return result;
var args = arguments,
argsIndex = 0,
argsLength = typeof guard == 'number' ? 2 : args.length;
if (argsLength > 3 && typeof args[argsLength - 2] == 'function') {
var callback = baseCreateCallback(args[--argsLength - 1], args[argsLength--], 2);
} else if (argsLength > 2 && typeof args[argsLength - 1] == 'function') {
callback = args[--argsLength];
}
while (++argsIndex < argsLength) {
iterable = args[argsIndex];
if (iterable && objectTypes[typeof iterable]) {
var ownIndex = -1,
ownProps = objectTypes[typeof iterable] && keys(iterable),
length = ownProps ? ownProps.length : 0;
while (++ownIndex < length) {
index = ownProps[ownIndex];
result[index] = callback ? callback(result[index], iterable[index]) : iterable[index];
}
}
}
return result;
};
function clone(value, isDeep, callback, thisArg) {
if (typeof isDeep != 'boolean' && isDeep != null) {
thisArg = callback;
callback = isDeep;
isDeep = false;
}
return baseClone(value, isDeep, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1));
}
function cloneDeep(value, callback, thisArg) {
return baseClone(value, true, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1));
}
function create(prototype, properties) {
var result = baseCreate(prototype);
return properties ? assign(result, properties) : result;
}
var defaults = function(object, source, guard) {
'use strict';
var index, iterable = object, result = iterable;
if (!iterable) return result;
var args = arguments,
argsIndex = 0,
argsLength = typeof guard == 'number' ? 2 : args.length;
while (++argsIndex < argsLength) {
iterable = args[argsIndex];
if (iterable && objectTypes[typeof iterable]) {
var ownIndex = -1,
ownProps = objectTypes[typeof iterable] && keys(iterable),
length = ownProps ? ownProps.length : 0;
while (++ownIndex < length) {
index = ownProps[ownIndex];
if (typeof result[index] == 'undefined') result[index] = iterable[index];
}
}
}
return result;
};
function findKey(object, callback, thisArg) {
var result;
callback = lodash.createCallback(callback, thisArg, 3);
forOwn(object, function(value, key, object) {
if (callback(value, key, object)) {
result = key;
return false;
}
});
return result;
}
function findLastKey(object, callback, thisArg) {
var result;
callback = lodash.createCallback(callback, thisArg, 3);
forOwnRight(object, function(value, key, object) {
if (callback(value, key, object)) {
result = key;
return false;
}
});
return result;
}
var forIn = function(collection, callback, thisArg) {
'use strict';
var index, iterable = collection, result = iterable;
if (!iterable) return result;
if (!objectTypes[typeof iterable]) return result;
callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);
for (index in iterable) {
if (callback(iterable[index], index, collection) === false) return result;
}
return result;
};
function forInRight(object, callback, thisArg) {
var pairs = [];
forIn(object, function(value, key) {
pairs.push(key, value);
});
var length = pairs.length;
callback = baseCreateCallback(callback, thisArg, 3);
while (length--) {
if (callback(pairs[length--], pairs[length], object) === false) {
break;
}
}
return object;
}
var forOwn = function(collection, callback, thisArg) {
'use strict';
var index, iterable = collection, result = iterable;
if (!iterable) return result;
if (!objectTypes[typeof iterable]) return result;
callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);
var ownIndex = -1,
ownProps = objectTypes[typeof iterable] && keys(iterable),
length = ownProps ? ownProps.length : 0;
while (++ownIndex < length) {
index = ownProps[ownIndex];
if (callback(iterable[index], index, collection) === false) return result;
}
return result;
};
function forOwnRight(object, callback, thisArg) {
var props = keys(object),
length = props.length;
callback = baseCreateCallback(callback, thisArg, 3);
while (length--) {
var key = props[length];
if (callback(object[key], key, object) === false) {
break;
}
}
return object;
}
function functions(object) {
var result = [];
forIn(object, function(value, key) {
if (isFunction(value)) {
result.push(key);
}
});
return result.sort();
}
function has(object, key) {
return object ? hasOwnProperty.call(object, key) : false;
}
function invert(object) {
var index = -1,
props = keys(object),
length = props.length,
result = {};
while (++index < length) {
var key = props[index];
result[object[key]] = key;
}
return result;
}
function isBoolean(value) {
return value === true || value === false ||
value && typeof value == 'object' && toString.call(value) == boolClass || false;
}
function isDate(value) {
return value && typeof value == 'object' && toString.call(value) == dateClass || false;
}
function isElement(value) {
return value && value.nodeType === 1 || false;
}
function isEmpty(value) {
var result = true;
if (!value) {
return result;
}
var className = toString.call(value),
length = value.length;
if ((className == arrayClass || className == stringClass || className == argsClass) ||
(className == objectClass && typeof length == 'number' && isFunction(value.splice))) {
return !length;
}
forOwn(value, function() {
return (result = false);
});
return result;
}
function isEqual(a, b, callback, thisArg) {
return baseIsEqual(a, b, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 2));
}
function isFinite(value) {
return nativeIsFinite(value) && !nativeIsNaN(parseFloat(value));
}
function isFunction(value) {
return typeof value == 'function';
}
function isObject(value) {
return !!(value && objectTypes[typeof value]);
}
function isNaN(value) {
return isNumber(value) && value != +value;
}
function isNull(value) {
return value === null;
}
function isNumber(value) {
return typeof value == 'number' ||
value && typeof value == 'object' && toString.call(value) == numberClass || false;
}
var isPlainObject = !getPrototypeOf ? shimIsPlainObject : function(value) {
if (!(value && toString.call(value) == objectClass)) {
return false;
}
var valueOf = value.valueOf,
objProto = isNative(valueOf) && (objProto = getPrototypeOf(valueOf)) && getPrototypeOf(objProto);
return objProto
? (value == objProto || getPrototypeOf(value) == objProto)
: shimIsPlainObject(value);
};
function isRegExp(value) {
return value && typeof value == 'object' && toString.call(value) == regexpClass || false;
}
function isString(value) {
return typeof value == 'string' ||
value && typeof value == 'object' && toString.call(value) == stringClass || false;
}
function isUndefined(value) {
return typeof value == 'undefined';
}
function mapValues(object, callback, thisArg) {
var result = {};
callback = lodash.createCallback(callback, thisArg, 3);
forOwn(object, function(value, key, object) {
result[key] = callback(value, key, object);
});
return result;
}
function merge(object) {
var args = arguments,
length = 2;
if (!isObject(object)) {
return object;
}
if (typeof args[2] != 'number') {
length = args.length;
}
if (length > 3 && typeof args[length - 2] == 'function') {
var callback = baseCreateCallback(args[--length - 1], args[length--], 2);
} else if (length > 2 && typeof args[length - 1] == 'function') {
callback = args[--length];
}
var sources = slice(arguments, 1, length),
index = -1,
stackA = getArray(),
stackB = getArray();
while (++index < length) {
baseMerge(object, sources[index], callback, stackA, stackB);
}
releaseArray(stackA);
releaseArray(stackB);
return object;
}
function omit(object, callback, thisArg) {
var result = {};
if (typeof callback != 'function') {
var props = [];
forIn(object, function(value, key) {
props.push(key);
});
props = baseDifference(props, baseFlatten(arguments, true, false, 1));
var index = -1,
length = props.length;
while (++index < length) {
var key = props[index];
result[key] = object[key];
}
} else {
callback = lodash.createCallback(callback, thisArg, 3);
forIn(object, function(value, key, object) {
if (!callback(value, key, object)) {
result[key] = value;
}
});
}
return result;
}
function pairs(object) {
var index = -1,
props = keys(object),
length = props.length,
result = Array(length);
while (++index < length) {
var key = props[index];
result[index] = [key, object[key]];
}
return result;
}
function pick(object, callback, thisArg) {
var result = {};
if (typeof callback != 'function') {
var index = -1,
props = baseFlatten(arguments, true, false, 1),
length = isObject(object) ? props.length : 0;
while (++index < length) {
var key = props[index];
if (key in object) {
result[key] = object[key];
}
}
} else {
callback = lodash.createCallback(callback, thisArg, 3);
forIn(object, function(value, key, object) {
if (callback(value, key, object)) {
result[key] = value;
}
});
}
return result;
}
function transform(object, callback, accumulator, thisArg) {
var isArr = isArray(object);
if (accumulator == null) {
if (isArr) {
accumulator = [];
} else {
var ctor = object && object.constructor,
proto = ctor && ctor.prototype;
accumulator = baseCreate(proto);
}
}
if (callback) {
callback = lodash.createCallback(callback, thisArg, 4);
(isArr ? forEach : forOwn)(object, function(value, index, object) {
return callback(accumulator, value, index, object);
});
}
return accumulator;
}
function values(object) {
var index = -1,
props = keys(object),
length = props.length,
result = Array(length);
while (++index < length) {
result[index] = object[props[index]];
}
return result;
}
function at(collection) {
var args = arguments,
index = -1,
props = baseFlatten(args, true, false, 1),
length = (args[2] && args[2][args[1]] === collection) ? 1 : props.length,
result = Array(length);
while (++index < length) {
result[index] = collection[props[index]];
}
return result;
}
function contains(collection, target, fromIndex) {
var index = -1,
indexOf = getIndexOf(),
length = collection ? collection.length : 0,
result = false;
fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex) || 0;
if (isArray(collection)) {
result = indexOf(collection, target, fromIndex) > -1;
} else if (typeof length == 'number') {
result = (isString(collection) ? collection.indexOf(target, fromIndex) : indexOf(collection, target, fromIndex)) > -1;
} else {
forOwn(collection, function(value) {
if (++index >= fromIndex) {
return !(result = value === target);
}
});
}
return result;
}
var countBy = createAggregator(function(result, value, key) {
(hasOwnProperty.call(result, key) ? result[key]++ : result[key] = 1);
});
function every(collection, callback, thisArg) {
var result = true;
callback = lodash.createCallback(callback, thisArg, 3);
var index = -1,
length = collection ? collection.length : 0;
if (typeof length == 'number') {
while (++index < length) {
if (!(result = !!callback(collection[index], index, collection))) {
break;
}
}
} else {
forOwn(collection, function(value, index, collection) {
return (result = !!callback(value, index, collection));
});
}
return result;
}
function filter(collection, callback, thisArg) {
var result = [];
callback = lodash.createCallback(callback, thisArg, 3);
var index = -1,
length = collection ? collection.length : 0;
if (typeof length == 'number') {
while (++index < length) {
var value = collection[index];
if (callback(value, index, collection)) {
result.push(value);
}
}
} else {
forOwn(collection, function(value, index, collection) {
if (callback(value, index, collection)) {
result.push(value);
}
});
}
return result;
}
function find(collection, callback, thisArg) {
callback = lodash.createCallback(callback, thisArg, 3);
var index = -1,
length = collection ? collection.length : 0;
if (typeof length == 'number') {
while (++index < length) {
var value = collection[index];
if (callback(value, index, collection)) {
return value;
}
}
} else {
var result;
forOwn(collection, function(value, index, collection) {
if (callback(value, index, collection)) {
result = value;
return false;
}
});
return result;
}
}
function findLast(collection, callback, thisArg) {
var result;
callback = lodash.createCallback(callback, thisArg, 3);
forEachRight(collection, function(value, index, collection) {
if (callback(value, index, collection)) {
result = value;
return false;
}
});
return result;
}
function forEach(collection, callback, thisArg) {
var index = -1,
length = collection ? collection.length : 0;
callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);
if (typeof length == 'number') {
while (++index < length) {
if (callback(collection[index], index, collection) === false) {
break;
}
}
} else {
forOwn(collection, callback);
}
return collection;
}
function forEachRight(collection, callback, thisArg) {
var length = collection ? collection.length : 0;
callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);
if (typeof length == 'number') {
while (length--) {
if (callback(collection[length], length, collection) === false) {
break;
}
}
} else {
var props = keys(collection);
length = props.length;
forOwn(collection, function(value, key, collection) {
key = props ? props[--length] : --length;
return callback(collection[key], key, collection);
});
}
return collection;
}
var groupBy = createAggregator(function(result, value, key) {
(hasOwnProperty.call(result, key) ? result[key] : result[key] = []).push(value);
});
var indexBy = createAggregator(function(result, value, key) {
result[key] = value;
});
function invoke(collection, methodName) {
var args = slice(arguments, 2),
index = -1,
isFunc = typeof methodName == 'function',
length = collection ? collection.length : 0,
result = Array(typeof length == 'number' ? length : 0);
forEach(collection, function(value) {
result[++index] = (isFunc ? methodName : value[methodName]).apply(value, args);
});
return result;
}
function map(collection, callback, thisArg) {
var index = -1,
length = collection ? collection.length : 0;
callback = lodash.createCallback(callback, thisArg, 3);
if (typeof length == 'number') {
var result = Array(length);
while (++index < length) {
result[index] = callback(collection[index], index, collection);
}
} else {
result = [];
forOwn(collection, function(value, key, collection) {
result[++index] = callback(value, key, collection);
});
}
return result;
}
function max(collection, callback, thisArg) {
var computed = -Infinity,
result = computed;
if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {
callback = null;
}
if (callback == null && isArray(collection)) {
var index = -1,
length = collection.length;
while (++index < length) {
var value = collection[index];
if (value > result) {
result = value;
}
}
} else {
callback = (callback == null && isString(collection))
? charAtCallback
: lodash.createCallback(callback, thisArg, 3);
forEach(collection, function(value, index, collection) {
var current = callback(value, index, collection);
if (current > computed) {
computed = current;
result = value;
}
});
}
return result;
}
function min(collection, callback, thisArg) {
var computed = Infinity,
result = computed;
if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {
callback = null;
}
if (callback == null && isArray(collection)) {
var index = -1,
length = collection.length;
while (++index < length) {
var value = collection[index];
if (value < result) {
result = value;
}
}
} else {
callback = (callback == null && isString(collection))
? charAtCallback
: lodash.createCallback(callback, thisArg, 3);
forEach(collection, function(value, index, collection) {
var current = callback(value, index, collection);
if (current < computed) {
computed = current;
result = value;
}
});
}
return result;
}
var pluck = map;
function reduce(collection, callback, accumulator, thisArg) {
if (!collection) return accumulator;
var noaccum = arguments.length < 3;
callback = lodash.createCallback(callback, thisArg, 4);
var index = -1,
length = collection.length;
if (typeof length == 'number') {
if (noaccum) {
accumulator = collection[++index];
}
while (++index < length) {
accumulator = callback(accumulator, collection[index], index, collection);
}
} else {
forOwn(collection, function(value, index, collection) {
accumulator = noaccum
? (noaccum = false, value)
: callback(accumulator, value, index, collection);
});
}
return accumulator;
}
function reduceRight(collection, callback, accumulator, thisArg) {
var noaccum = arguments.length < 3;
callback = lodash.createCallback(callback, thisArg, 4);
forEachRight(collection, function(value, index, collection) {
accumulator = noaccum
? (noaccum = false, value)
: callback(accumulator, value, index, collection);
});
return accumulator;
}
function reject(collection, callback, thisArg) {
callback = lodash.createCallback(callback, thisArg, 3);
return filter(collection, function(value, index, collection) {
return !callback(value, index, collection);
});
}
function sample(collection, n, guard) {
if (collection && typeof collection.length != 'number') {
collection = values(collection);
}
if (n == null || guard) {
return collection ? collection[baseRandom(0, collection.length - 1)] : undefined;
}
var result = shuffle(collection);
result.length = nativeMin(nativeMax(0, n), result.length);
return result;
}
function shuffle(collection) {
var index = -1,
length = collection ? collection.length : 0,
result = Array(typeof length == 'number' ? length : 0);
forEach(collection, function(value) {
var rand = baseRandom(0, ++index);
result[index] = result[rand];
result[rand] = value;
});
return result;
}
function size(collection) {
var length = collection ? collection.length : 0;
return typeof length == 'number' ? length : keys(collection).length;
}
function some(collection, callback, thisArg) {
var result;
callback = lodash.createCallback(callback, thisArg, 3);
var index = -1,
length = collection ? collection.length : 0;
if (typeof length == 'number') {
while (++index < length) {
if ((result = callback(collection[index], index, collection))) {
break;
}
}
} else {
forOwn(collection, function(value, index, collection) {
return !(result = callback(value, index, collection));
});
}
return !!result;
}
function sortBy(collection, callback, thisArg) {
var index = -1,
isArr = isArray(callback),
length = collection ? collection.length : 0,
result = Array(typeof length == 'number' ? length : 0);
if (!isArr) {
callback = lodash.createCallback(callback, thisArg, 3);
}
forEach(collection, function(value, key, collection) {
var object = result[++index] = getObject();
if (isArr) {
object.criteria = map(callback, function(key) { return value[key]; });
} else {
(object.criteria = getArray())[0] = callback(value, key, collection);
}
object.index = index;
object.value = value;
});
length = result.length;
result.sort(compareAscending);
while (length--) {
var object = result[length];
result[length] = object.value;
if (!isArr) {
releaseArray(object.criteria);
}
releaseObject(object);
}
return result;
}
function toArray(collection) {
if (collection && typeof collection.length == 'number') {
return slice(collection);
}
return values(collection);
}
var where = filter;
function compact(array) {
var index = -1,
length = array ? array.length : 0,
result = [];
while (++index < length) {
var value = array[index];
if (value) {
result.push(value);
}
}
return result;
}
function difference(array) {
return baseDifference(array, baseFlatten(arguments, true, true, 1));
}
function findIndex(array, callback, thisArg) {
var index = -1,
length = array ? array.length : 0;
callback = lodash.createCallback(callback, thisArg, 3);
while (++index < length) {
if (callback(array[index], index, array)) {
return index;
}
}
return -1;
}
function findLastIndex(array, callback, thisArg) {
var length = array ? array.length : 0;
callback = lodash.createCallback(callback, thisArg, 3);
while (length--) {
if (callback(array[length], length, array)) {
return length;
}
}
return -1;
}
function first(array, callback, thisArg) {
var n = 0,
length = array ? array.length : 0;
if (typeof callback != 'number' && callback != null) {
var index = -1;
callback = lodash.createCallback(callback, thisArg, 3);
while (++index < length && callback(array[index], index, array)) {
n++;
}
} else {
n = callback;
if (n == null || thisArg) {
return array ? array[0] : undefined;
}
}
return slice(array, 0, nativeMin(nativeMax(0, n), length));
}
function flatten(array, isShallow, callback, thisArg) {
if (typeof isShallow != 'boolean' && isShallow != null) {
thisArg = callback;
callback = (typeof isShallow != 'function' && thisArg && thisArg[isShallow] === array) ? null : isShallow;
isShallow = false;
}
if (callback != null) {
array = map(array, callback, thisArg);
}
return baseFlatten(array, isShallow);
}
function indexOf(array, value, fromIndex) {
if (typeof fromIndex == 'number') {
var length = array ? array.length : 0;
fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex || 0);
} else if (fromIndex) {
var index = sortedIndex(array, value);
return array[index] === value ? index : -1;
}
return baseIndexOf(array, value, fromIndex);
}
function initial(array, callback, thisArg) {
var n = 0,
length = array ? array.length : 0;
if (typeof callback != 'number' && callback != null) {
var index = length;
callback = lodash.createCallback(callback, thisArg, 3);
while (index-- && callback(array[index], index, array)) {
n++;
}
} else {
n = (callback == null || thisArg) ? 1 : callback || n;
}
return slice(array, 0, nativeMin(nativeMax(0, length - n), length));
}
function intersection() {
var args = [],
argsIndex = -1,
argsLength = arguments.length,
caches = getArray(),
indexOf = getIndexOf(),
trustIndexOf = indexOf === baseIndexOf,
seen = getArray();
while (++argsIndex < argsLength) {
var value = arguments[argsIndex];
if (isArray(value) || isArguments(value)) {
args.push(value);
caches.push(trustIndexOf && value.length >= largeArraySize &&
createCache(argsIndex ? args[argsIndex] : seen));
}
}
var array = args[0],
index = -1,
length = array ? array.length : 0,
result = [];
outer:
while (++index < length) {
var cache = caches[0];
value = array[index];
if ((cache ? cacheIndexOf(cache, value) : indexOf(seen, value)) < 0) {
argsIndex = argsLength;
(cache || seen).push(value);
while (--argsIndex) {
cache = caches[argsIndex];
if ((cache ? cacheIndexOf(cache, value) : indexOf(args[argsIndex], value)) < 0) {
continue outer;
}
}
result.push(value);
}
}
while (argsLength--) {
cache = caches[argsLength];
if (cache) {
releaseObject(cache);
}
}
releaseArray(caches);
releaseArray(seen);
return result;
}
function last(array, callback, thisArg) {
var n = 0,
length = array ? array.length : 0;
if (typeof callback != 'number' && callback != null) {
var index = length;
callback = lodash.createCallback(callback, thisArg, 3);
while (index-- && callback(array[index], index, array)) {
n++;
}
} else {
n = callback;
if (n == null || thisArg) {
return array ? array[length - 1] : undefined;
}
}
return slice(array, nativeMax(0, length - n));
}
function lastIndexOf(array, value, fromIndex) {
var index = array ? array.length : 0;
if (typeof fromIndex == 'number') {
index = (fromIndex < 0 ? nativeMax(0, index + fromIndex) : nativeMin(fromIndex, index - 1)) + 1;
}
while (index--) {
if (array[index] === value) {
return index;
}
}
return -1;
}
function pull(array) {
var args = arguments,
argsIndex = 0,
argsLength = args.length,
length = array ? array.length : 0;
while (++argsIndex < argsLength) {
var index = -1,
value = args[argsIndex];
while (++index < length) {
if (array[index] === value) {
splice.call(array, index--, 1);
length--;
}
}
}
return array;
}
function range(start, end, step) {
start = +start || 0;
step = typeof step == 'number' ? step : (+step || 1);
if (end == null) {
end = start;
start = 0;
}
var index = -1,
length = nativeMax(0, ceil((end - start) / (step || 1))),
result = Array(length);
while (++index < length) {
result[index] = start;
start += step;
}
return result;
}
function remove(array, callback, thisArg) {
var index = -1,
length = array ? array.length : 0,
result = [];
callback = lodash.createCallback(callback, thisArg, 3);
while (++index < length) {
var value = array[index];
if (callback(value, index, array)) {
result.push(value);
splice.call(array, index--, 1);
length--;
}
}
return result;
}
function rest(array, callback, thisArg) {
if (typeof callback != 'number' && callback != null) {
var n = 0,
index = -1,
length = array ? array.length : 0;
callback = lodash.createCallback(callback, thisArg, 3);
while (++index < length && callback(array[index], index, array)) {
n++;
}
} else {
n = (callback == null || thisArg) ? 1 : nativeMax(0, callback);
}
return slice(array, n);
}
function sortedIndex(array, value, callback, thisArg) {
var low = 0,
high = array ? array.length : low;
callback = callback ? lodash.createCallback(callback, thisArg, 1) : identity;
value = callback(value);
while (low < high) {
var mid = (low + high) >>> 1;
(callback(array[mid]) < value)
? low = mid + 1
: high = mid;
}
return low;
}
function union() {
return baseUniq(baseFlatten(arguments, true, true));
}
function uniq(array, isSorted, callback, thisArg) {
if (typeof isSorted != 'boolean' && isSorted != null) {
thisArg = callback;
callback = (typeof isSorted != 'function' && thisArg && thisArg[isSorted] === array) ? null : isSorted;
isSorted = false;
}
if (callback != null) {
callback = lodash.createCallback(callback, thisArg, 3);
}
return baseUniq(array, isSorted, callback);
}
function without(array) {
return baseDifference(array, slice(arguments, 1));
}
function xor() {
var index = -1,
length = arguments.length;
while (++index < length) {
var array = arguments[index];
if (isArray(array) || isArguments(array)) {
var result = result
? baseUniq(baseDifference(result, array).concat(baseDifference(array, result)))
: array;
}
}
return result || [];
}
function zip() {
var array = arguments.length > 1 ? arguments : arguments[0],
index = -1,
length = array ? max(pluck(array, 'length')) : 0,
result = Array(length < 0 ? 0 : length);
while (++index < length) {
result[index] = pluck(array, index);
}
return result;
}
function zipObject(keys, values) {
var index = -1,
length = keys ? keys.length : 0,
result = {};
if (!values && length && !isArray(keys[0])) {
values = [];
}
while (++index < length) {
var key = keys[index];
if (values) {
result[key] = values[index];
} else if (key) {
result[key[0]] = key[1];
}
}
return result;
}
function after(n, func) {
if (!isFunction(func)) {
throw new TypeError;
}
return function() {
if (--n < 1) {
return func.apply(this, arguments);
}
};
}
function bind(func, thisArg) {
return arguments.length > 2
? createWrapper(func, 17, slice(arguments, 2), null, thisArg)
: createWrapper(func, 1, null, null, thisArg);
}
function bindAll(object) {
var funcs = arguments.length > 1 ? baseFlatten(arguments, true, false, 1) : functions(object),
index = -1,
length = funcs.length;
while (++index < length) {
var key = funcs[index];
object[key] = createWrapper(object[key], 1, null, null, object);
}
return object;
}
function bindKey(object, key) {
return arguments.length > 2
? createWrapper(key, 19, slice(arguments, 2), null, object)
: createWrapper(key, 3, null, null, object);
}
function compose() {
var funcs = arguments,
length = funcs.length;
while (length--) {
if (!isFunction(funcs[length])) {
throw new TypeError;
}
}
return function() {
var args = arguments,
length = funcs.length;
while (length--) {
args = [funcs[length].apply(this, args)];
}
return args[0];
};
}
function curry(func, arity) {
arity = typeof arity == 'number' ? arity : (+arity || func.length);
return createWrapper(func, 4, null, null, null, arity);
}
function debounce(func, wait, options) {
var args,
maxTimeoutId,
result,
stamp,
thisArg,
timeoutId,
trailingCall,
lastCalled = 0,
maxWait = false,
trailing = true;
if (!isFunction(func)) {
throw new TypeError;
}
wait = nativeMax(0, wait) || 0;
if (options === true) {
var leading = true;
trailing = false;
} else if (isObject(options)) {
leading = options.leading;
maxWait = 'maxWait' in options && (nativeMax(wait, options.maxWait) || 0);
trailing = 'trailing' in options ? options.trailing : trailing;
}
var delayed = function() {
var remaining = wait - (now() - stamp);
if (remaining <= 0) {
if (maxTimeoutId) {
clearTimeout(maxTimeoutId);
}
var isCalled = trailingCall;
maxTimeoutId = timeoutId = trailingCall = undefined;
if (isCalled) {
lastCalled = now();
result = func.apply(thisArg, args);
if (!timeoutId && !maxTimeoutId) {
args = thisArg = null;
}
}
} else {
timeoutId = setTimeout(delayed, remaining);
}
};
var maxDelayed = function() {
if (timeoutId) {
clearTimeout(timeoutId);
}
maxTimeoutId = timeoutId = trailingCall = undefined;
if (trailing || (maxWait !== wait)) {
lastCalled = now();
result = func.apply(thisArg, args);
if (!timeoutId && !maxTimeoutId) {
args = thisArg = null;
}
}
};
return function() {
args = arguments;
stamp = now();
thisArg = this;
trailingCall = trailing && (timeoutId || !leading);
if (maxWait === false) {
var leadingCall = leading && !timeoutId;
} else {
if (!maxTimeoutId && !leading) {
lastCalled = stamp;
}
var remaining = maxWait - (stamp - lastCalled),
isCalled = remaining <= 0;
if (isCalled) {
if (maxTimeoutId) {
maxTimeoutId = clearTimeout(maxTimeoutId);
}
lastCalled = stamp;
result = func.apply(thisArg, args);
}
else if (!maxTimeoutId) {
maxTimeoutId = setTimeout(maxDelayed, remaining);
}
}
if (isCalled && timeoutId) {
timeoutId = clearTimeout(timeoutId);
}
else if (!timeoutId && wait !== maxWait) {
timeoutId = setTimeout(delayed, wait);
}
if (leadingCall) {
isCalled = true;
result = func.apply(thisArg, args);
}
if (isCalled && !timeoutId && !maxTimeoutId) {
args = thisArg = null;
}
return result;
};
}
function defer(func) {
if (!isFunction(func)) {
throw new TypeError;
}
var args = slice(arguments, 1);
return setTimeout(function() { func.apply(undefined, args); }, 1);
}
function delay(func, wait) {
if (!isFunction(func)) {
throw new TypeError;
}
var args = slice(arguments, 2);
return setTimeout(function() { func.apply(undefined, args); }, wait);
}
function memoize(func, resolver) {
if (!isFunction(func)) {
throw new TypeError;
}
var memoized = function() {
var cache = memoized.cache,
key = resolver ? resolver.apply(this, arguments) : keyPrefix + arguments[0];
return hasOwnProperty.call(cache, key)
? cache[key]
: (cache[key] = func.apply(this, arguments));
};
memoized.cache = {};
return memoized;
}
function once(func) {
var ran,
result;
if (!isFunction(func)) {
throw new TypeError;
}
return function() {
if (ran) {
return result;
}
ran = true;
result = func.apply(this, arguments);
func = null;
return result;
};
}
function partial(func) {
return createWrapper(func, 16, slice(arguments, 1));
}
function partialRight(func) {
return createWrapper(func, 32, null, slice(arguments, 1));
}
function throttle(func, wait, options) {
var leading = true,
trailing = true;
if (!isFunction(func)) {
throw new TypeError;
}
if (options === false) {
leading = false;
} else if (isObject(options)) {
leading = 'leading' in options ? options.leading : leading;
trailing = 'trailing' in options ? options.trailing : trailing;
}
debounceOptions.leading = leading;
debounceOptions.maxWait = wait;
debounceOptions.trailing = trailing;
return debounce(func, wait, debounceOptions);
}
function wrap(value, wrapper) {
return createWrapper(wrapper, 16, [value]);
}
function constant(value) {
return function() {
return value;
};
}
function createCallback(func, thisArg, argCount) {
var type = typeof func;
if (func == null || type == 'function') {
return baseCreateCallback(func, thisArg, argCount);
}
if (type != 'object') {
return property(func);
}
var props = keys(func),
key = props[0],
a = func[key];
if (props.length == 1 && a === a && !isObject(a)) {
return function(object) {
var b = object[key];
return a === b && (a !== 0 || (1 / a == 1 / b));
};
}
return function(object) {
var length = props.length,
result = false;
while (length--) {
if (!(result = baseIsEqual(object[props[length]], func[props[length]], null, true))) {
break;
}
}
return result;
};
}
function escape(string) {
return string == null ? '' : String(string).replace(reUnescapedHtml, escapeHtmlChar);
}
function identity(value) {
return value;
}
function mixin(object, source, options) {
var chain = true,
methodNames = source && functions(source);
if (!source || (!options && !methodNames.length)) {
if (options == null) {
options = source;
}
ctor = lodashWrapper;
source = object;
object = lodash;
methodNames = functions(source);
}
if (options === false) {
chain = false;
} else if (isObject(options) && 'chain' in options) {
chain = options.chain;
}
var ctor = object,
isFunc = isFunction(ctor);
forEach(methodNames, function(methodName) {
var func = object[methodName] = source[methodName];
if (isFunc) {
ctor.prototype[methodName] = function() {
var chainAll = this.__chain__,
value = this.__wrapped__,
args = [value];
push.apply(args, arguments);
var result = func.apply(object, args);
if (chain || chainAll) {
if (value === result && isObject(result)) {
return this;
}
result = new ctor(result);
result.__chain__ = chainAll;
}
return result;
};
}
});
}
function noConflict() {
context._ = oldDash;
return this;
}
function noop() {
}
var now = isNative(now = Date.now) && now || function() {
return new Date().getTime();
};
var parseInt = nativeParseInt(whitespace + '08') == 8 ? nativeParseInt : function(value, radix) {
return nativeParseInt(isString(value) ? value.replace(reLeadingSpacesAndZeros, '') : value, radix || 0);
};
function property(key) {
return function(object) {
return object[key];
};
}
function random(min, max, floating) {
var noMin = min == null,
noMax = max == null;
if (floating == null) {
if (typeof min == 'boolean' && noMax) {
floating = min;
min = 1;
}
else if (!noMax && typeof max == 'boolean') {
floating = max;
noMax = true;
}
}
if (noMin && noMax) {
max = 1;
}
min = +min || 0;
if (noMax) {
max = min;
min = 0;
} else {
max = +max || 0;
}
if (floating || min % 1 || max % 1) {
var rand = nativeRandom();
return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand + '').length - 1)))), max);
}
return baseRandom(min, max);
}
function result(object, key) {
if (object) {
var value = object[key];
return isFunction(value) ? object[key]() : value;
}
}
function template(text, data, options) {
var settings = lodash.templateSettings;
text = String(text || '');
options = defaults({}, options, settings);
var imports = defaults({}, options.imports, settings.imports),
importsKeys = keys(imports),
importsValues = values(imports);
var isEvaluating,
index = 0,
interpolate = options.interpolate || reNoMatch,
source = "__p += '";
var reDelimiters = RegExp(
(options.escape || reNoMatch).source + '|' +
interpolate.source + '|' +
(interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
(options.evaluate || reNoMatch).source + '|$'
, 'g');
text.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
interpolateValue || (interpolateValue = esTemplateValue);
source += text.slice(index, offset).replace(reUnescapedString, escapeStringChar);
if (escapeValue) {
source += "' +\n__e(" + escapeValue + ") +\n'";
}
if (evaluateValue) {
isEvaluating = true;
source += "';\n" + evaluateValue + ";\n__p += '";
}
if (interpolateValue) {
source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
}
index = offset + match.length;
return match;
});
source += "';\n";
var variable = options.variable,
hasVariable = variable;
if (!hasVariable) {
variable = 'obj';
source = 'with (' + variable + ') {\n' + source + '\n}\n';
}
source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
.replace(reEmptyStringMiddle, '$1')
.replace(reEmptyStringTrailing, '$1;');
source = 'function(' + variable + ') {\n' +
(hasVariable ? '' : variable + ' || (' + variable + ' = {});\n') +
"var __t, __p = '', __e = _.escape" +
(isEvaluating
? ', __j = Array.prototype.join;\n' +
"function print() { __p += __j.call(arguments, '') }\n"
: ';\n'
) +
source +
'return __p\n}';
var sourceURL = '\n/*\n//# sourceURL=' + (options.sourceURL || '/lodash/template/source[' + (templateCounter++) + ']') + '\n*/';
try {
var result = Function(importsKeys, 'return ' + source + sourceURL).apply(undefined, importsValues);
} catch (e) {
e.source = source;
throw e;
}
if (data) {
return result(data);
}
result.source = source;
return result;
}
function times(n, callback, thisArg) {
n = (n = +n) > -1 ? n : 0;
var index = -1,
result = Array(n);
callback = baseCreateCallback(callback, thisArg, 1);
while (++index < n) {
result[index] = callback(index);
}
return result;
}
function unescape(string) {
return string == null ? '' : String(string).replace(reEscapedHtml, unescapeHtmlChar);
}
function uniqueId(prefix) {
var id = ++idCounter;
return String(prefix == null ? '' : prefix) + id;
}
function chain(value) {
value = new lodashWrapper(value);
value.__chain__ = true;
return value;
}
function tap(value, interceptor) {
interceptor(value);
return value;
}
function wrapperChain() {
this.__chain__ = true;
return this;
}
function wrapperToString() {
return String(this.__wrapped__);
}
function wrapperValueOf() {
return this.__wrapped__;
}
lodash.after = after;
lodash.assign = assign;
lodash.at = at;
lodash.bind = bind;
lodash.bindAll = bindAll;
lodash.bindKey = bindKey;
lodash.chain = chain;
lodash.compact = compact;
lodash.compose = compose;
lodash.constant = constant;
lodash.countBy = countBy;
lodash.create = create;
lodash.createCallback = createCallback;
lodash.curry = curry;
lodash.debounce = debounce;
lodash.defaults = defaults;
lodash.defer = defer;
lodash.delay = delay;
lodash.difference = difference;
lodash.filter = filter;
lodash.flatten = flatten;
lodash.forEach = forEach;
lodash.forEachRight = forEachRight;
lodash.forIn = forIn;
lodash.forInRight = forInRight;
lodash.forOwn = forOwn;
lodash.forOwnRight = forOwnRight;
lodash.functions = functions;
lodash.groupBy = groupBy;
lodash.indexBy = indexBy;
lodash.initial = initial;
lodash.intersection = intersection;
lodash.invert = invert;
lodash.invoke = invoke;
lodash.keys = keys;
lodash.map = map;
lodash.mapValues = mapValues;
lodash.max = max;
lodash.memoize = memoize;
lodash.merge = merge;
lodash.min = min;
lodash.omit = omit;
lodash.once = once;
lodash.pairs = pairs;
lodash.partial = partial;
lodash.partialRight = partialRight;
lodash.pick = pick;
lodash.pluck = pluck;
lodash.property = property;
lodash.pull = pull;
lodash.range = range;
lodash.reject = reject;
lodash.remove = remove;
lodash.rest = rest;
lodash.shuffle = shuffle;
lodash.sortBy = sortBy;
lodash.tap = tap;
lodash.throttle = throttle;
lodash.times = times;
lodash.toArray = toArray;
lodash.transform = transform;
lodash.union = union;
lodash.uniq = uniq;
lodash.values = values;
lodash.where = where;
lodash.without = without;
lodash.wrap = wrap;
lodash.xor = xor;
lodash.zip = zip;
lodash.zipObject = zipObject;
lodash.collect = map;
lodash.drop = rest;
lodash.each = forEach;
lodash.eachRight = forEachRight;
lodash.extend = assign;
lodash.methods = functions;
lodash.object = zipObject;
lodash.select = filter;
lodash.tail = rest;
lodash.unique = uniq;
lodash.unzip = zip;
mixin(lodash);
lodash.clone = clone;
lodash.cloneDeep = cloneDeep;
lodash.contains = contains;
lodash.escape = escape;
lodash.every = every;
lodash.find = find;
lodash.findIndex = findIndex;
lodash.findKey = findKey;
lodash.findLast = findLast;
lodash.findLastIndex = findLastIndex;
lodash.findLastKey = findLastKey;
lodash.has = has;
lodash.identity = identity;
lodash.indexOf = indexOf;
lodash.isArguments = isArguments;
lodash.isArray = isArray;
lodash.isBoolean = isBoolean;
lodash.isDate = isDate;
lodash.isElement = isElement;
lodash.isEmpty = isEmpty;
lodash.isEqual = isEqual;
lodash.isFinite = isFinite;
lodash.isFunction = isFunction;
lodash.isNaN = isNaN;
lodash.isNull = isNull;
lodash.isNumber = isNumber;
lodash.isObject = isObject;
lodash.isPlainObject = isPlainObject;
lodash.isRegExp = isRegExp;
lodash.isString = isString;
lodash.isUndefined = isUndefined;
lodash.lastIndexOf = lastIndexOf;
lodash.mixin = mixin;
lodash.noConflict = noConflict;
lodash.noop = noop;
lodash.now = now;
lodash.parseInt = parseInt;
lodash.random = random;
lodash.reduce = reduce;
lodash.reduceRight = reduceRight;
lodash.result = result;
lodash.runInContext = runInContext;
lodash.size = size;
lodash.some = some;
lodash.sortedIndex = sortedIndex;
lodash.template = template;
lodash.unescape = unescape;
lodash.uniqueId = uniqueId;
lodash.all = every;
lodash.any = some;
lodash.detect = find;
lodash.findWhere = find;
lodash.foldl = reduce;
lodash.foldr = reduceRight;
lodash.include = contains;
lodash.inject = reduce;
mixin(function() {
var source = {};
forOwn(lodash, function(func, methodName) {
if (!lodash.prototype[methodName]) {
source[methodName] = func;
}
});
return source;
}(), false);
lodash.first = first;
lodash.last = last;
lodash.sample = sample;
lodash.take = first;
lodash.head = first;
forOwn(lodash, function(func, methodName) {
var callbackable = methodName !== 'sample';
if (!lodash.prototype[methodName]) {
lodash.prototype[methodName] = function(n, guard) {
var chainAll = this.__chain__,
result = func(this.__wrapped__, n, guard);
return !chainAll && (n == null || (guard && !(callbackable && typeof n == 'function')))
? result
: new lodashWrapper(result, chainAll);
};
}
});
lodash.VERSION = '2.4.1';
lodash.prototype.chain = wrapperChain;
lodash.prototype.toString = wrapperToString;
lodash.prototype.value = wrapperValueOf;
lodash.prototype.valueOf = wrapperValueOf;
forEach(['join', 'pop', 'shift'], function(methodName) {
var func = arrayRef[methodName];
lodash.prototype[methodName] = function() {
var chainAll = this.__chain__,
result = func.apply(this.__wrapped__, arguments);
return chainAll
? new lodashWrapper(result, chainAll)
: result;
};
});
forEach(['push', 'reverse', 'sort', 'unshift'], function(methodName) {
var func = arrayRef[methodName];
lodash.prototype[methodName] = function() {
func.apply(this.__wrapped__, arguments);
return this;
};
});
forEach(['concat', 'slice', 'splice'], function(methodName) {
var func = arrayRef[methodName];
lodash.prototype[methodName] = function() {
return new lodashWrapper(func.apply(this.__wrapped__, arguments), this.__chain__);
};
});
return lodash;
}
var _ = runInContext();
return _; });
define("text!plugins/harvard.cs50/plugins/c9.ide.cs50.simple/style.css",[],"");
define("plugins/harvard.cs50/plugins/c9.ide.cs50.simple/simple",[], function(require, exports, module) {
"use strict";
main.consumes = [
"ace", "ace.status", "auth", "c9", "clipboard", "collab",
"collab.workspace", "commands", "console", "dialog.confirm",
"dialog.file", "dialog.notification", "editors", "fs", "fs.cache",
"harvard.cs50.info", "harvard.cs50.presentation", "immediate", "info",
"keymaps", "navigate", "outline", "language", "language.python",
"layout", "login", "Menu", "MenuItem", "menus", "newresource", "panels",
"Plugin", "preferences", "preview", "proc", "run.gui", "save",
"settings", "tabbehavior", "tabManager", "terminal", "tooltip", "tree",
"tree.favorites", "ui", "util"
];
main.provides = ["harvard.cs50.simple"];
return main;
function main(options, imports, register) {
var ace = imports.ace;
var auth = imports.auth;
var c9 = imports.c9;
var collab = imports.collab;
var commands = imports.commands;
var confirm = imports["dialog.confirm"].show;
var editors = imports.editors;
var favorites = imports["tree.favorites"];
var fileDialog = imports["dialog.file"];
var fs = imports.fs;
var fsCache = imports["fs.cache"];
var info = imports.info;
var info50 = imports["harvard.cs50.info"];
var language = imports.language;
var layout = imports.layout;
var Menu = imports.Menu;
var MenuItem = imports.MenuItem;
var menus = imports.menus;
var model = fsCache.model;
var newresource = imports.newresource;
var notify = imports["dialog.notification"].show;
var outline = imports.outline;
var panels = imports.panels;
var Plugin = imports.Plugin;
var prefs = imports.preferences;
const presentation = imports["harvard.cs50.presentation"];
var proc = imports.proc;
var save = imports.save;
var settings = imports.settings;
var statusbar = imports["ace.status"];
var tabs = imports.tabManager;
var tabMenu = imports.tabbehavior.contextMenu;
var tree = imports.tree;
var ui = imports.ui;
var workspace = imports["collab.workspace"];
var plugin = new Plugin("CS50", main.consumes);
var SETTINGS_VER = 14;
var _ = require("lodash");
var basename = require("path").basename;
var libterm = require("plugins/c9.ide.terminal/aceterm/libterm").prototype;
var authorInfoToggled = null;
var avatar = null;
var dark = null;
var languages = {
en: "en_US.UTF-8",
es: "es_ES.UTF-8"
};
var notification = {};
var openingFile = false;
var terminalSound = null;
var trailingLine = null;
var treeToggles = {};
function addFileDialog() {
var openItem = menus.get("File/Open...").item;
if (!openItem)
return;
commands.addCommand({
name: "openFileDialog",
hint: "Opens file dialog for opening files",
bindKey: commands.commands.navigate.bindKey,
exec: function() {
openingFile = true;
fileDialog.show("Open file", null, function(path) {
tabs.openFile(path, true);
fileDialog.hide();
}, null, {
createFolderButton: false,
showFilesCheckbox: false,
chooseCaption: "Open"
});
}
}, plugin);
delete commands.commands.navigate.bindKey;
function disableMultiSelect() {
var selection = fileDialog.tree.selection;
var selectedNodes = selection.getSelectedNodes();
if (selectedNodes.length > 1)
selection.selectNode(selectedNodes[selectedNodes.length - 1], false);
}
fileDialog.on("show", function() {
if (openingFile !== true)
return;
var txtDirectory = fileDialog.getElement("txtDirectory");
hide(txtDirectory.previousSibling);
hide(txtDirectory);
fileDialog.tree.once("afterChoose", function() {
fileDialog.getElement("btnChoose").dispatchEvent("click");
});
fileDialog.tree.on("changeSelection", disableMultiSelect);
}, plugin);
fileDialog.on("hide", function() {
openingFile = false;
fileDialog.tree.off("changeSelection", disableMultiSelect);
}, plugin);
openItem.setAttribute("command", "openFileDialog");
}
function addGravatarToggle(err, user) {
if (!err && user && user.id) {
avatar = menus.get("user_" + user.id).item;
if (!avatar)
return;
else if (!c9.hosted)
return hide(avatar);
prefs.add({
"CS50" : {
position: 5,
"IDE Behavior" : {
position: 10,
"Gravatar" : {
type: "checkbox",
setting: "user/cs50/simple/@gravatar",
min: 1,
max: 200,
position: 190
}
}
}
}, plugin);
toggleGravatar(settings.getBool("user/cs50/simple/@gravatar"));
settings.on("user/cs50/simple/@gravatar", toggleGravatar);
}
}
function addLanguages() {
var languagesItem = new MenuItem({
caption: "Language",
submenu: new Menu({}, plugin)
});
menus.addItemByPath("View/~", new ui.divider(), 3, plugin);
menus.addItemByPath("View/Language", languagesItem, 4, plugin);
var currLanguage = settings.get("project/cs50/simple/@language") || "en";
Object.keys(languages).forEach(function(language) {
var item = new MenuItem({
caption: language,
onclick: function() {
setLanguage(language);
},
type: "radio"
});
item.aml.setAttribute("selected", language === currLanguage);
menus.addItemByPath("View/Language/" + language, item, plugin);
});
}
function addServe() {
tree.getElement("mnuCtxTree", function(mnuCtxTree) {
menus.addItemToMenu(mnuCtxTree, new ui.item({
caption: "Serve",
match: "folder",
isAvailable: function() {
return tree.selectedNodes.filter(function(node) {
return node.isFolder;
}).length === 1;
},
onclick: function() {
var node = tree.selectedNodes.find(function(node) {
return node.isFolder;
});
if (!node)
return;
var path = node.path.replace(/^\//, c9.workspaceDir + "/");
var tab = window.open("", "_blank");
if (!tab)
return;
tab.document.write(
'Starting http-server...
' +
'Please wait! This page will reload automatically.'
);
var PORT = "8081";
proc.spawn("/home/ubuntu/.cs50/bin/http-server", {
args: [ "-p", PORT ],
cwd: path
},
function(err, process) {
if (err) {
tab.document.write("Could not start http-server.");
return console.error(err);
}
process.stderr.on("data", function(chunk) {
console.log(chunk);
});
setTimeout(function() {
tab.location.href = info50.host.replace(/:[0-9]+$/, ":" + PORT);
},
1000);
});
}
}), 102, plugin);
});
}
function addSlashToDirs() {
favorites.on("favoriteRemove", helper);
favorites.on("favoriteAdd", helper);
function helper() {
var getCaptionHTML = model.getCaptionHTML;
model.getCaptionHTML = function(node) {
var caption = getCaptionHTML(node);
if (node.isFolder && !node.isFavorite && !node.path.startsWith("!") && !caption.endsWith("/"))
caption += "/";
return caption;
};
tree.tree && tree.tree.redraw();
}
helper();
}
function addTooltips() {
imports.console.getElement("consoleButtons", function(aml) {
aml.childNodes[0].setAttribute("tooltip", "Maximize Console");
aml.childNodes[2].setAttribute("tooltip", "Close Console");
});
}
function addTrailingLine(e) {
if (trailingLine === null) {
prefs.add({
"Project": {
position: 10,
"Code Editor (Ace)": {
"On Save, Add Trailing Newline": {
type: "checkbox",
position: 300,
path: "project/cs50/ace/@trailingLine"
}
}
}
}, plugin);
settings.on("project/cs50/ace/@trailingLine", function(enabled) {
trailingLine = enabled;
});
trailingLine = settings.getBool("project/cs50/ace/@trailingLine");
save.on("beforeSave", addTrailingLine);
}
else if (trailingLine === true && _.isObject(e) && _.isObject(e.tab)
&& e.tab.editorType === "ace" && _.isString(e.tab.path)
&& _.isObject(e.document)
&& /^makefile$|\.(?:c|css|h|html|php|py|rb|sh)$/i.test(basename(e.tab.path))) {
var doc = e.document.getSession().session.getDocument();
var length = doc.getLength();
if (trailingLine && doc.getLine(length - 1) !== "")
doc.insertFullLines(length, [""]);
}
}
function addTreeToggles() {
dark = settings.get("user/general/@skin").indexOf("dark") > -1;
var resetVisibility = tree.active ? tree.show : tree.hide;
var tabsParent = layout.findParent(tabs);
setMenuVisibility("Window/Workspace", false);
panels.disablePanel("tree");
resetVisibility("tree");
treeToggles.ID = "treeToggle";
treeToggles.menuItem = new ui.item({
type: "check",
caption: "File Browser",
command: "toggletree"
});
tabs.on("paneCreate", function(e) {
var codePanes = tabs.getPanes(tabsParent);
var pane = codePanes.find(function(p) {
return p === e.pane;
});
if (!pane)
return;
var button = ui.button({
id: treeToggles.ID,
"class": "cs50-simple-tree-toggle",
command: "toggletree",
skin: "c9-simple-btn",
height: 16,
width: 16,
visible: false
});
pane.aml.appendChild(button);
pane.addElement(button);
if (codePanes.length === 1)
showTreeToggle(codePanes[0]);
tabs.on("paneDestroy", function(e) {
if (_.isObject(treeToggles.button) && e.pane !== treeToggles.button.pane)
return;
var codePanes = tabs.getPanes(tabsParent);
if (codePanes.length < 1)
return;
var topLeftPane = codePanes[0];
var topLeftRect = topLeftPane.container.getBoundingClientRect();
for (var i = 1; i < codePanes.length; i++) {
var rect = codePanes[i].container.getBoundingClientRect();
if (rect.left <= topLeftRect.left && rect.top <= topLeftRect.top) {
topLeftPane = codePanes[i];
topLeftRect = rect;
}
}
showTreeToggle(topLeftPane);
});
});
menus.addItemByPath("View/File Browser", treeToggles.menuItem, 200, plugin);
tree.once("draw", syncTreeToggles.bind(this, true));
tree.on("show", syncTreeToggles.bind(this, true));
tree.on("hide", syncTreeToggles);
settings.on("user/general/@skin", function(skin) {
dark = skin.indexOf("dark") > -1;
syncTreeToggles(tree.active);
});
settings.on("user/tabs/@show", function(showing) {
showing ? show(treeToggles.button) : hide(treeToggles.button);
});
}
function confirmRestart() {
if (!c9.hosted)
return;
var item = menus.get("Cloud9/Restart Workspace").item;
if (!item)
return;
commands.addCommand({
name: "confirmrestartc9vm",
isAvailable: commands.commands.restartc9vm.isAvailable,
exec: function() {
confirm("Restart Workspace?",
"Are you sure you want to restart CS50 IDE?",
"Any files you have open will stay open.",
function() {
commands.exec("restartc9vm");
},
function() {}
);
}
}, plugin);
item.setAttribute("command", "confirmrestartc9vm");
}
function customizeC9Menu() {
var dashboard = "Cloud9/Go To Your Dashboard";
if (c9.hosted) {
var dashboardItem = menus.get(dashboard).item;
if (dashboardItem) {
setMenuCaption(dashboardItem, "Dashboard");
menus.addItemByPath(dashboard, dashboardItem, 299, plugin);
}
info.getUser(function(err, user) {
if (user && user.id) {
var path = "user_" + user.id + "/";
menus.addItemByPath("Cloud9/Account", menus.get(path + "Account").item, 298, plugin);
["Dashboard", "Home", "Log out"].forEach(function(item) {
menus.remove(path + item);
});
}
});
menus.addItemByPath("Cloud9/~", new ui.divider(), 2000081, plugin);
}
else {
menus.remove(dashboard);
menus.remove("Cloud9/Quit Cloud9");
}
setMenuCaption("Cloud9/Open Your Project Settings", "Project Settings");
setMenuCaption("Cloud9/Open Your User Settings", "User Settings");
setMenuCaption("Cloud9/Open Your Init Script", "Init Script");
var div = new ui.divider();
menus.addItemByPath("Cloud9/~", div, 301, plugin);
menus.addItemByPath("Cloud9/Reset Settings", new ui.item({
caption: "Reset Settings",
onclick: function() {
confirm("Reset Settings",
"",
"Are you sure you want to reset CS50 IDE to factory " +
"defaults? It will then look just as it did when you " +
"created it. Your files and folders will not be deleted.",
function() {
window.location.search += "&reset=user|state|project";
},
function() {}
);
}
}), 2000079, plugin);
setMenuVisibility("Cloud9/Restart Cloud9", false);
}
function disableAreaBarsMenu() {
[panels.areas["left"], panels.areas["right"]].forEach(function(area) {
if (area && area.aml && area.aml.childNodes.length > 0) {
area.aml.childNodes.some(function(bar) {
if (bar.$baseCSSname === "panelsbar") {
bar.oncontextmenu = function() {};
}
});
}
});
}
function hide(aml) {
if (aml) {
aml.setAttribute("visible", false);
return true;
}
return false;
}
function hideElements() {
function hideRunThisFile(e) {
e.currentTarget.childNodes.some(function(item) {
if (item.caption === "Run This File")
return hide(item);
});
}
if (!c9.hosted)
collab.disable();
else
collab.enable();
outline.enable();
var p = layout.findParent({ name: "preview" });
hide(p.childNodes[0]);
hide(p.childNodes[1]);
hide(p.childNodes[2]);
setMenuVisibility("Run", false);
tree.on("menuUpdate", function(e) {
if (!e.menu)
return;
e.menu.childNodes.forEach(function(item) {
if (item.caption === "Run" || item.caption === "Preview")
hide(item);
});
});
tabMenu.once("prop.visible", hideRunThisFile);
ace.getElement("menu", function(menu) {
menu.once("prop.visible", hideRunThisFile);
});
commands.bindKey(null, commands.commands["run"], true);
commands.bindKey(null, commands.commands["runlast"], true);
}
function hideGearIcon() {
var bar = layout.findParent({name: "preferences"});
if (bar.childNodes) {
bar.childNodes.forEach(function(node) {
if (node.class === "preferences")
hide(node);
});
}
}
function moveMenuItems() {
var newTerminal = menus.get("Window/New Terminal").item;
if (newTerminal)
menus.addItemByPath("File/New Terminal", newTerminal, 150, plugin);
}
function setLanguage(language) {
if (!languages[language])
language = "en";
var path = "~/.cs50/language";
fs.writeFile(path, "export LANGUAGE=" + languages[language], function(err) {
if (err) {
console.log(err);
return showError("Failed to set language.");
}
fs.chmod(path, 644, function(err) {
if (err) {
console.log(err);
return showError("Failed to chmod language file.");
}
var count = 0;
tabs.getTabs().some(function(tab) {
return (tab.editorType === "terminal") && (++count === 2);
});
settings.set("project/cs50/simple/@language", language);
confirm("Language Updated",
"Restart terminal window" + (count == 2 ? "s" : "") + "?",
(count === 2)
? "Doing so will kill any programs that are running in open terminal windows."
: "",
function() {
proc.spawn("killall", { args: ["tmux"] }, function(err) {
if (err)
showError("Failed to restart terminals!");
});
},
function() {}
);
});
});
}
function setMenuCaption(item, caption) {
if (_.isString(item))
item = menus.get(item).item;
if (_.isObject(item))
item.setAttribute("caption", caption);
}
function setMenuVisibility(path, visible) {
var menu = menus.get(path).item;
visible ? show(menu) : hide(menu);
}
function setTitleFromTabs() {
updateTitle(tabs.focussedTab);
tabs.on("focusSync", function(e) {
updateTitle(e.tab);
}, plugin);
tabs.on("tabDestroy", function(e) {
if (e.last)
updateTitle();
}, plugin);
settings.on("user/tabs/@title", function() {
updateTitle(tabs.focussedTab);
});
}
function setTmuxTitle(tab) {
if (tab && tab.editorType === "terminal") {
var session = tab.document.getSession();
tab.document.on("setTitle", function(e) {
var title = e.title || tab.document.title;
var re = /\s-\s""\s*$/;
if (title && re.test(title)) {
title = title.replace(re, "");
var docList = [e, tab.document];
if (session && session.hasOwnProperty("doc"))
docList.push(session.doc, session.doc.tooltip);
docList.forEach(function(doc) {
if (doc.hasOwnProperty("title"))
doc.title = title;
if (doc.hasOwnProperty("tooltip"))
doc.tooltip = title;
});
}
}, plugin);
}
}
function show(aml) {
if (aml) {
aml.setAttribute("visible", true);
return true;
}
return false;
}
function showTreeToggle(pane) {
if (!_.isObject(pane))
return;
pane.getElement(treeToggles.ID, function(button) {
pane.aml.$ext.classList.add("cs50-simple-pane0");
pane.aml.$buttons.style.paddingLeft = "54px";
button.setAttribute("visible", settings.getBool("user/tabs/@show"));
treeToggles.button = button;
treeToggles.button.pane = pane;
syncTreeToggles(tree.active);
});
}
function simplifyImgeditor() {
editors.on("create", function(e) {
var editor = e.editor;
if (editor.type !== "imgeditor")
return;
editor.getElement("zoom", function(zoom) {
var parent = zoom.parentNode;
parent.childNodes.forEach(function(n) {
n.hide();
n.show = function() {};
});
parent.setAttribute("class", (parent.getAttribute("class") || "") + " cs50-simple-imgeditor-bar");
var label = new ui.label({ width: 50 });
label.setCaption = function(val) {
label.setAttribute("caption", ((_.isNumber(val) && val) || "100") + "%");
};
editor.on("documentActivate", function() {
label.setCaption(zoom.value);
});
var minus = new ui.button({
caption: "-",
class: "cs50-simple-zoom-button",
skin: "btn-default-css3",
onclick: function() {
!_.isNumber(zoom.value) && (zoom.setValue(100));
zoom.setValue(Math.max(10, zoom.value - (zoom.value >= 200 ? 100 : 10)));
label.setCaption(zoom.value);
zoom.dispatchEvent("afterchange");
},
margin: "2 0 0 5"
});
parent.appendChild(minus);
editor.addElement(minus);
parent.appendChild(label);
editor.addElement(label);
var plus = new ui.button({
caption: "+",
class: "cs50-simple-zoom-button",
skin: "btn-default-css3",
onclick: function() {
!_.isNumber(zoom.value) && (zoom.setValue(100));
zoom.setValue(zoom.value + (zoom.value >= 100 ? 100 : 10));
label.setCaption(zoom.value);
zoom.dispatchEvent("afterchange");
},
margin: "2 0 0 5"
});
parent.appendChild(plus);
editor.addElement(plus);
commands.addCommand({
name: "zoom_in",
hint: "Zooms in on image in image viewer",
group: "imgeditor",
bindKey: { mac: "Command-+", win: "Ctrl-+" },
isAvailable: function(editor) {
return editor && editor.type === "imgeditor";
},
exec: function() {
plus.dispatchEvent("click");
}
}, plugin);
commands.addCommand({
name: "zoom_out",
hint: "Zooms in on image in image viewer",
group: "imgeditor",
bindKey: { mac: "Command--", win: "Ctrl--" },
isAvailable: function(editor) {
return editor && editor.type === "imgeditor";
},
exec: function() {
minus.dispatchEvent("click");
}
}, plugin);
function setTheme(e) {
[plus, minus].forEach(function(button) {
var _class = button.getAttribute("class") || "";
if (e.theme.indexOf("dark") > -1) {
if (_class.search(/\bdark\b/) === -1)
_class += " dark";
}
else {
_class = _class.replace(/\bdark\b/, "");
}
button.setAttribute("class", _class);
});
}
layout.on("themeChange", setTheme);
setTheme({ theme: settings.get("user/general/@skin") });
});
});
}
function syncTreeToggles(active) {
if (treeToggles && treeToggles.button && treeToggles.menuItem) {
var style = "cs50-simple-tree-toggle";
if (dark)
style += " dark";
if (active === true) {
style += " active";
treeToggles.menuItem.setAttribute("checked", true);
}
else {
treeToggles.menuItem.setAttribute("checked", false);
}
treeToggles.button.setAttribute("class", style);
}
}
function disableCodeFolding() {
function getFalse() {
return false;
}
[
"fold", "foldall", "foldOther", "toggleFoldWidget",
"toggleParentFoldWidget"
].forEach(function(name) {
commands.commands[name].isAvailable = getFalse;
});
tabs.getTabs().forEach(function(tab) {
commands.exec("unfoldall", tab.editor);
});
settings.set("user/ace/@showFoldWidgets", false);
}
function toggleGravatar(show) {
if (!_.isBoolean(show))
return;
if (avatar && avatar.$ext) {
if (show)
avatar.$ext.classList.remove("c9-logo");
else
avatar.$ext.classList.add("c9-logo");
}
}
function hideMenus() {
[
"Cloud9/Open Your Keymap",
"Cloud9/Open Your Stylesheet",
"File/Revert to Saved",
"File/Revert All to Saved",
"File/Mount FTP or SFTP server...",
"File/Line Endings",
"File/New Plugin",
"Edit/Line/Move Line Up",
"Edit/Line/Move Line Down",
"Edit/Line/Copy Lines Up",
"Edit/Line/Copy Lines Down",
"Edit/Line/Remove Line",
"Edit/Line/Remove to Line End",
"Edit/Line/Remove to Line Start",
"Edit/Line/Split Line",
"Edit/Keyboard Mode",
"Edit/Selection",
"Edit/Text",
"Edit/Code Folding",
"Edit/Code Formatting",
"Find/Replace Next",
"Find/Replace Previous",
"Find/Replace All",
"View/Editors",
"View/Syntax",
"View/Wrap Lines",
"View/Wrap To Print Margin",
"View/Status Bar",
"View/Menu Bar",
"View/Tab Buttons",
"View/Themes",
"Goto/Goto Anything...",
"Goto/Goto Symbol...",
"Goto/Goto Command...",
"Goto/Next Error",
"Goto/Previous Error",
"Goto/Word Right",
"Goto/Word Left",
"Goto/Scroll to Selection",
"Tools",
"Window",
"Support",
"File/New From Template"
].forEach(function(path) {
setMenuVisibility(path, false);
});
}
function hideMiniButton() {
var bar = layout.findParent(menus);
if (bar && bar.childNodes[0]) {
var minimizeBtn = bar.childNodes[0].childNodes[0];
if (minimizeBtn) {
minimizeBtn.setAttribute("visible", false);
bar.$int.style.paddingLeft = "0";
}
}
}
function simplifyPlus() {
tabs.getElement("mnuEditors", function(menu) {
var menuItems = menu.childNodes;
var test = setInterval(function() {
if (hide(menuItems[2]) &&
hide(menuItems[3]) &&
hide(menuItems[4])) {
clearInterval(test);
}
}, 0);
});
}
function hideSideTabs() {
var panelList = ["navigate", "commands.panel", "scm"];
var resetVisibility = tree.active ? tree.show : tree.hide;
tree.hide();
panelList.forEach(function(p) {panels.disablePanel(p);});
resetVisibility();
}
function enableSimpleMode() {
prefs.add({
"CS50" : {
position: 5,
"IDE Behavior" : {
position: 10,
"Mark Undeclared Variables" : {
type: "checkbox",
setting: "user/cs50/simple/@undeclaredVars",
min: 1,
max: 200,
position: 190
},
"Audible Terminal Bell" : {
type: "checkbox",
setting: "user/cs50/simple/@terminalSound",
min: 1,
max: 200,
position: 190
}
}
}
}, plugin);
hideMenus();
hideMiniButton();
hideSideTabs();
simplifyPlus();
disableCodeFolding();
}
function simplifyStatusbar() {
ace.on("create", function(e) {
var bar = statusbar.getStatusbar(e.editor);
if (!bar)
return;
[
"btnSbPrefs", "itmTabSize", "lblEditorStatus",
"lblSelectionLength", "lblSyntax", "lblTabs"
].forEach(function(element) {
bar.getElement(element, function(e) {
e.hide();
e.show = function() {};
});
});
});
}
function toggleTerminalSound(enable) {
if (!libterm)
return;
if (enable === true)
libterm.bell = () => !presentation.presenting && terminalSound.play();
else
libterm.bell = () => {};
}
function toggleUndeclaredVars(e) {
if (e && e.tab && e.tab.editorType === "ace") {
if (/\.js$/i.test(e.tab.path)) {
return settings.set("project/language/@undeclaredVars", false);
}
else if (e.tab.document) {
e.tab.document.once("setTitle", function(e) {
if (/\.js$/i.test(e.title))
settings.set("project/language/@undeclaredVars", false);
});
}
settings.set("project/language/@undeclaredVars", true);
}
}
function updateAuthorInfo(force) {
if (_.isBoolean(force))
authorInfoToggled = force;
if (authorInfoToggled === true) {
settings.set("user/collab/@show-author-info", workspace.members.length > 1);
}
else if (authorInfoToggled === false) {
settings.set(
"user/collab/@show-author-info",
settings.getBool("user/cs50/simple/collab/@originAuthorInfo")
);
}
}
function updateFontSize() {
function isAvailable() {
var type = _.isObject(tabs.focussedTab)
&& tabs.focussedTab.editorType;
if (_.isString(type))
return _.indexOf(["ace", "hex", "terminal"], type) > -1;
};
var largerfontKeys = commands.commands.largerfont.bindKey;
delete commands.commands.largerfont.bindKey;
var smallerfontKeys = commands.commands.smallerfont.bindKey;
delete commands.commands.smallerfont.bindKey;
commands.addCommand({
name: "largerfonts",
exec: function() {
var size = settings.getNumber("user/ace/@fontSize");
settings.set("user/ace/@fontSize", ++size > 72 ? 72 : size);
size = settings.getNumber("user/terminal/@fontsize");
settings.set("user/terminal/@fontsize", ++size > 72 ? 72 : size);
},
bindKey: largerfontKeys,
isAvailable: isAvailable
}, plugin);
commands.addCommand({
name: "resetfonts",
exec: function() {
var ace = 12;
var terminal = 12;
if (presentation.presenting)
ace = terminal = 20;
settings.set("user/ace/@fontSize", ace);
settings.set("user/terminal/@fontsize", terminal);
},
bindKey: {
mac: "Command-Ctrl-0",
win: "Alt-Ctrl-0"
},
isAvailable: isAvailable,
}, plugin);
commands.addCommand({
name: "smallerfonts",
exec: function() {
var size = settings.getNumber("user/ace/@fontSize");
settings.set("user/ace/@fontSize", --size < 1 ? 1 : size);
size = settings.getNumber("user/terminal/@fontsize");
settings.set("user/terminal/@fontsize", --size < 1 ? 1 : size);
},
bindKey: smallerfontKeys,
isAvailable: isAvailable
}, plugin);
menus.get("View/Font Size/Increase Font Size").item.setAttribute(
"command", "largerfonts"
);
menus.get("View/Font Size/Decrease Font Size").item.setAttribute(
"command", "smallerfonts"
);
menus.addItemByPath("View/Font Size/Reset Font Size", new ui.item({
command: "resetfonts",
}), 150, plugin);
}
function updateMenuCaptions() {
var captions = {
"Cloud9": "CS50 IDE",
"Cloud9/Quit Cloud9": "Log Out",
"Goto": "Go",
"Goto/Goto Anything...": "Anything...",
"Goto/Goto Line...": "Line...",
"Goto/Goto Symbol...": "Symbol...",
"Goto/Goto Command...": "Command...",
"Support/Check Cloud9 Status": "Cloud9 Status",
"Support/Read Documentation": "Cloud9 Documentation",
"View/Gutter": "Line Numbers"
};
for (var path in captions)
setMenuCaption(path, captions[path]);
}
function updateTitle(tab) {
var title = "CS50 IDE";
if (!c9.hosted)
title += " Offline";
document.title = tab && settings.getBool("user/tabs/@title")
&& tab.title
? tab.title + " - " + title
: title
}
function warnUnsaved() {
notification.enabled = settings.getBool("user/cs50/simple/@unsavedWarning");
settings.on("user/cs50/simple/@unsavedWarning", function(enabled) {
notification.enabled = enabled;
if (!enabled && _.isFunction(notification.hide))
notification.hide();
});
prefs.add({
"CS50" : {
position: 5,
"IDE Behavior" : {
position: 10,
"Warn about Unsaved Files" : {
type: "checkbox",
setting: "user/cs50/simple/@unsavedWarning",
min: 1,
max: 200,
position: 190
}
}
}
}, plugin);
function show(title) {
if (notification.timer)
clearTimeout(notification.timer);
if (title === notification.currTitle && _.isFunction(notification.hasClosed) && !notification.hasClosed()) {
notification.timer = setTimeout(notification.hide, 5000);
return;
}
if (_.isFunction(notification.hide)) {
notification.hide();
if (_.isFunction(notification.hasClosed) && !notification.hasClosed()) {
notification.hasClosed.interval = setInterval(function() {
clearInterval(notification.hasClosed.interval);
show(title);
}, 300);
return;
}
}
var div = 'You haven\'t saved your changes to ' + title + '
yet.
';
notification.hide = notify(div, true);
notification.hasClosed = notification.hide.hasClosed;
notification.currTitle = title;
notification.timer = setTimeout(notification.hide, 5000);
}
tabs.on("blur", function(e) {
var blurTab = e.tab;
var doc = blurTab.document;
if (!blurTab || blurTab.editorType !== "ace" || !doc)
return;
tabs.once("focus", function(e) {
if (e.tab.editorType === "terminal" && doc.changed) {
blurTab.on("close", function() {
if (notification.currTitle === blurTab.title && _.isFunction(notification.hide))
notification.hide();
});
if (notification.enabled && tabs.findTab(blurTab.path))
show(blurTab.title);
}
});
});
save.on("afterSave", function(e) {
if (notification.currTitle === e.tab.title && _.isFunction(notification.hide))
notification.hide();
});
}
function updateTooltip(e) {
if (e.tab.path && e.tab.tooltip === e.tab.path && e.tab.tooltip.startsWith("/")) {
e.tab.document.tooltip = e.tab.tooltip =
`${c9.workspaceDir.replace(c9.home, "~")}${e.tab.tooltip}`;
}
}
var loaded = false;
function load() {
if (history.replaceState && /\?*&*$/.test(window.location.href))
history.replaceState({}, window.title, window.location.href.replace(/\?*&*$/, ""));
if (loaded)
return false;
loaded = true;
ui.insertCss(require("text!./style.css"), options.staticPrefix, plugin);
addFileDialog();
addLanguages();
addServe();
addSlashToDirs();
addTreeToggles();
addTooltips();
confirmRestart();
customizeC9Menu();
disableAreaBarsMenu();
hideElements();
hideGearIcon();
moveMenuItems();
setTitleFromTabs();
simplifyImgeditor();
updateFontSize();
updateMenuCaptions();
warnUnsaved();
var ver = settings.getNumber("project/cs50/simple/@ver");
if (isNaN(ver) || ver < SETTINGS_VER) {
settings.set("user/ace/@printMarginColumn", "132");
settings.set("user/ace/statusbar/@show", true);
settings.set("user/general/@autosave", false);
settings.set("user/general/@downloadFilesAs", "zip");
settings.set("user/language/@continuousCompletion", false);
settings.set("user/language/@enterCompletion", false);
settings.set("user/tabs/@asterisk", false);
["class", "exe", "gz", "o", "pyc", "raw", "tar", "zip"].forEach(function(type) {
settings.set("user/tabs/editorTypes/@" + type, "none");
});
settings.set("user/terminal/@scrollback", 2000);
settings.set("project/python/@version", "python3");
settings.set(
"project/python/@path",
"/home/ubuntu/.cs50/py_modules" +
":/opt/pyenv/versions/3.6.0/lib/python3.6/site-packages"
);
settings.set(
"project/python/@pylintFlags",
"-d all -e E -e F --generated-members=app.jinja_env.*,db.session.*,Registrant.* --ignored-classes=SQL,SQLAlchemy --load-plugins pylint50"
);
settings.set("project/general/@stripws", true);
settings.set("project/cs50/simple/@ver", SETTINGS_VER);
}
settings.on("read", function() {
settings.setDefaults("user/cs50/simple", [
["gravatar", false],
["terminalSound", true],
["undeclaredVars", true],
["unsavedWarning", true]
]);
});
enableSimpleMode();
addTrailingLine();
simplifyStatusbar();
tabs.on("tabAfterActivate", (e) => {
toggleUndeclaredVars(e);
updateTooltip(e);
});
tabs.on("tabCreate", function(e) {
setTmuxTitle(e.tab);
updateTooltip(e);
}, plugin);
terminalSound = new Audio(options.staticPrefix + "/sounds/bell.mp3");
toggleTerminalSound(settings.getBool("user/cs50/simple/@terminalSound"));
settings.on("user/cs50/simple/@terminalSound", toggleTerminalSound, plugin);
info.getUser(addGravatarToggle);
if (!settings.getBool("project/cs50/simple/@scm-enabled")) {
settings.set("state/experiments/@git", true);
settings.set("project/cs50/simple/@scm-enabled", true);
}
if (c9.hosted) {
settings.setDefaults("user/cs50/simple/collab", [
["originAuthorInfo", settings.getBool("user/collab/@show-author-info")],
["authorInfoToggled", true]
]);
settings.on("user/cs50/simple/collab/@authorInfoToggled", updateAuthorInfo);
updateAuthorInfo(settings.getBool("user/cs50/simple/collab/@authorInfoToggled"));
settings.on("user/collab/@show-author-info", function(val) {
if (authorInfoToggled === false)
settings.set("user/cs50/simple/collab/@originAuthorInfo", val);
});
prefs.add({
"CS50" : {
position: 5,
"IDE Behavior" : {
position: 10,
"Automatically Toggle Author Info" : {
type: "checkbox",
setting: "user/cs50/simple/collab/@authorInfoToggled",
position: 900
}
}
}
}, plugin);
workspace.loadMembers(updateAuthorInfo);
workspace.on("sync", updateAuthorInfo);
}
language.unregisterLanguageHandler("plugins/c9.ide.language.html/html_completer");
}
plugin.on("load", function() {
load();
});
plugin.on("unload", function() {
authorInfoToggled = null;
avatar = null;
dark = null;
notification = {};
openingFile = false;
terminalSound = null;
trailingLine = null;
treeToggles = {};
loaded = false;
});
plugin.freezePublicAPI({ });
register(null, { "harvard.cs50.simple" : plugin });
}
});
define("text!plugins/harvard.cs50/plugins/c9.ide.cs50.presentation/style.css",[],"");
define("plugins/harvard.cs50/plugins/c9.ide.cs50.presentation/presentation",[], function(require, exports, module) {
main.consumes = [
"ace.status", "layout", "menus", "Plugin", "settings", "tree", "ui"
];
main.provides = ["harvard.cs50.presentation"];
return main;
function main(options, imports, register) {
var layout = imports.layout;
var menus = imports.menus;
var Plugin = imports.Plugin;
var settings = imports.settings;
var status = imports["ace.status"];
var ui = imports.ui;
var plugin = new Plugin("CS50", main.consumes);
var presenting;
var menuItem = null;
var barExtras = null;
const listeners = [];
function addListener(listener) {
if (typeof(listener) !== "function" || listeners.indexOf(listener) > -1)
return;
listeners.push(listener);
if (presenting !== undefined)
listener(presenting);
}
function swapSettings(path1, path2) {
var val = settings.getNumber(path2);
settings.set(path2, settings.getNumber(path1));
settings.set(path1, val);
}
function toggleElements(show) {
if (typeof show !== "boolean")
return;
if (show) {
status.show();
barExtras.$ext.classList.remove("cs50-presentation");
}
else {
status.hide();
barExtras.$ext.classList.add("cs50-presentation");
}
}
function togglePresentationMode(override) {
if (typeof override === "boolean") {
if (!override && presenting) {
updateEditors();
toggleElements(true);
}
if (override === presenting)
return;
presenting = override;
}
else {
presenting = !presenting;
settings.set("user/cs50/presentation/@presenting", presenting);
updateEditors();
}
toggleElements(!presenting);
menuItem.setAttribute("checked", presenting);
listeners.forEach(listener => listener(presenting));
}
function updateEditors() {
swapSettings(
"user/cs50/presentation/@editorFontSize",
"user/ace/@fontSize"
);
swapSettings(
"user/cs50/presentation/@terminalFontSize",
"user/terminal/@fontsize"
);
}
plugin.on("load", function() {
menuItem = new ui.item({
type: "check",
caption: "Presentation Mode",
onclick: togglePresentationMode
});
menus.addItemByPath("View/~", new ui.divider(), 1, plugin);
menus.addItemByPath("View/Presentation Mode", menuItem, 2, plugin);
barExtras = layout.findParent({ name: "preferences" });
settings.on("read", function() {
settings.setDefaults("user/cs50/presentation", [
["presenting", false],
["editorFontSize", 18],
["terminalFontSize", 18]
]);
});
settings.on("write", function() {
if (settings.getBool("user/cs50/presentation/@presenting") !== presenting)
menus.click("View/Presentation Mode");
});
ui.insertCss(require("text!./style.css"), options.staticPrefix, plugin);
togglePresentationMode(
settings.getBool("user/cs50/presentation/@presenting")
);
});
plugin.on("unload", function() {
togglePresentationMode(false);
menuItem = null;
barExtras = null;
presenting = undefined;
});
plugin.freezePublicAPI({
get presenting() { return presenting; },
addListener: addListener
});
register(null, {
"harvard.cs50.presentation": plugin
});
}
});
define("text!plugins/harvard.cs50/plugins/c9.ide.cs50.info/bin/info50",[],"#!/bin/bash\n\nSTATS_DIR=\"/home/ubuntu/.cs50/stats\"\nmkdir -p \"$STATS_DIR\"\n\n# find ide version\nsource /etc/version50 2>/dev/null\nif [ \"$version\" == \"\" ]; then\n declare version=\"n/a\"\nfi\n\n# decide if online or offline IDE\noffline=$([ ${IDE_OFFLINE+x} ] && echo \"true\" || echo \"false\")\n\n# This script compares IDs from various clients (e.g., if multiple users\n# have the same workspace open) to determine which is the \"master\" client,\n# and only store domain changes from that client. When a Master tab is\n# closed, another Master is randomly picked (it will be the first one to\n# request stats). Master status is granted in the following circumstances:\n# - No previous master defined (CFILE doesn't exist)\n# - The new client's request is newer than CFILE's mod time.\n# - If the new client ID matches the existing \"master\" client ID, we extend\n# the modification time into the future, based on when the client expects\n# to contact us again.\nCFILE=\"$STATS_DIR/client\"\nNEW_CFILE=\"$STATS_DIR/client_new\"\n\ncheck_port(){\n # ask lsof if port 8080 is open, will return 0 if so, 1 otherwise\n set -o pipefail\n server=$(lsof -n -i :8080 | awk 'NR==2 {print $1}')\n if [ $? -eq 0 ]; then\n listening=\"true\"\n else\n listening=\"false\"\n server=\"NONE\"\n fi\n}\n\n# request from a stats client to update the domain\nif [ $# -eq 3 ]; then\n # fetch existing client ID, if it exists\n test -f \"$CFILE\" && source \"$CFILE\" &>/dev/null\n\n # store the requesting client ID in a new client file\n echo \"client=\\\"$2\\\"\" >\"$NEW_CFILE\"\n\n # test if requestor becomes master\n if [ ! -f \"$CFILE\" ] || [ \"$NEW_CFILE\" -nt \"$CFILE\" ] || [ \"$2\" == \"$client\" ]\n then\n # make requestor the new master and extend modification time into future\n mv \"$NEW_CFILE\" \"$CFILE\"\n touch -d \"+$3 seconds\" \"$CFILE\"\n\n # set domain based on master\n echo \"domain=\\\"$1\\\"\" >\"$STATS_DIR/domain\"\n else\n # requestor is not master; clean up\n rm -f \"$NEW_CFILE\"\n fi\n check_port\n # give the expect JSON output\n printf '{\"version\":\"%s\",\"host\":\"%s\",\"listening\":%s,\"server\":\"%s\",\"user\":\"%s\",\"passwd\":\"%s\",\"offline\":\"%s\",\"c9user\":\"%s\",\"c9project\":\"%s\"}' \\\n \"$version\" \"$(hostname50 --c9-port --protocol)\" \"$listening\" \"$server\" \"$(username50)\" \"$(password50)\" \"$offline\" \"$C9_USER\" \"$C9_PROJECT\"\nelse\n check_port\n # give a more human friendly output\n printf ' Version:\\t %s\\n Web Server:\\t %s\\n phpMyAdmin:\\t %s\\n User:\\t\\t %s\\n Password:\\t %s\\n Offline:\\t %s\\n Owner:\\t\\t %s\\n Project:\\t %s\\n' \\\n \"$version\" \"$(hostname50 --c9-port --protocol)\" \"$(hostname50 --c9-port --protocol)/phpmyadmin\" \"$(username50)\" \"$(password50)\" \"$offline\" \"$C9_USER\" \"$C9_PROJECT\"\nfi\n");
define("text!plugins/harvard.cs50/plugins/c9.ide.cs50.info/bin/update50",[],"#!/bin/bash\n\nset -o pipefail\n\n# curl latest update50 script, passing in any command-line args\nif ! bash <(curl --fail --header 'Cache-Control: no-cache' --silent --location https://cs50.ly/update50) $@; then\n echo \"Unable to update workspace. Try again in a few minutes!\"\nfi\n");
define("text!plugins/harvard.cs50/plugins/c9.ide.cs50.info/style.css",[],"");
define("plugins/harvard.cs50/plugins/c9.ide.cs50.info/info",[], function(require, exports, module) {
main.consumes = [
"api", "c9", "collab.workspace", "commands", "dialog.alert",
"dialog.confirm", "dialog.error", "dialog.notification", "fs",
"harvard.cs50.presentation", "http", "layout", "menus", "Plugin",
"preferences", "proc", "settings", "tabManager", "terminal", "ui"
];
main.provides = ["harvard.cs50.info"];
return main;
function main(options, imports, register) {
var Plugin = imports.Plugin;
var alert = imports["dialog.alert"].show;
var api = imports.api;
var c9 = imports.c9;
var commands = imports.commands;
var confirm = imports["dialog.confirm"].show;
var fs = imports.fs;
var http = imports.http;
var layout = imports.layout;
var menus = imports.menus;
var notify = imports["dialog.notification"].show;
var prefs = imports.preferences;
const presentation = imports["harvard.cs50.presentation"];
var proc = imports.proc;
var settings = imports.settings;
var showError = imports["dialog.error"].show;
var tabs = imports.tabManager;
var terminal = imports.terminal;
var ui = imports.ui;
var workspace = imports["collab.workspace"];
var _ = require("lodash");
var join = require("path").join;
var plugin = new Plugin("CS50", main.consumes);
var emit = plugin.getEmitter();
var DEFAULT_REFRESH = 30; // default refresh rate
var delay; // current refresh rate
var fetching; // are we fetching data
var stats = null; // last recorded stats
var timer = null; // javascript interval ID
var domain = null; // current domain
var BIN = "~/.cs50/bin/";
var version = {};
var info50 = {
name: ".info50",
content: require("text!./bin/info50"),
revision: 3,
revision_setting: "project/cs50/info/@info_revision"
};
var update50 = {
name: "update50",
content: require("text!./bin/update50"),
revision: 5,
revision_setting: "project/cs50/info/@update_revision"
};
function load() {
ui.insertCss(require("text!./style.css"), options.staticPrefix, plugin);
fetching = false;
domain = window.location.hostname;
domain = domain.replace(/^(ide|legacy)\./, "")
settings.on("read", function() {
settings.setDefaults("user/cs50/info", [
["refreshRate", DEFAULT_REFRESH],
]);
settings.setDefaults("project/cs50/info", [
["public", false]
]);
});
settings.on("user/cs50/info/@refreshRate", function(rate) {
if (delay !== rate) {
if (isNaN(rate) || rate < 1) {
delay = DEFAULT_REFRESH;
settings.set("user/cs50/info/@refreshRate", delay);
}
else {
delay = rate;
}
updateStats();
stopTimer();
startTimer();
}
}, plugin);
delay = settings.getNumber("user/cs50/info/@refreshRate");
version.button = new ui.button({
caption: "n/a",
class: "cs50-version-btn",
enabled: false,
skin: "c9-menu-btn",
width: 50
});
fetchLatestVersion();
ui.insertByIndex(layout.findParent({
name: "preferences"
}), version.button, 500, plugin);
presentation.addListener(presenting => toggleVersion(!presenting));
prefs.add({
"CS50" : {
position: 5,
"IDE Information" : {
position: 10,
"Information refresh rate (in seconds)" : {
type: "spinner",
path: "user/cs50/info/@refreshRate",
min: 1,
max: 200,
position: 200
}
}
}
}, plugin);
var div = new ui.divider();
menus.addItemByPath("Cloud9/div", div, 100, plugin);
var webServer = new ui.item({
id: "websserver",
caption: "Web Server",
onclick: displayWebServer
});
menus.addItemByPath("Cloud9/Web Server", webServer, 102, plugin);
fetching = true;
writeScript(info50, function(err) {
fetching = false;
if (err)
return console.log(err);
updateStats();
startTimer();
});
writeScript(update50);
update50.dir = "~/bin";
writeScript(update50);
commands.addCommand({
name: "complete_update",
hint: "Restarts workspace after confirmation",
exec: function() {
if (c9.hosted) {
confirm(
"Update Almost Complete",
"Restart your workspace to complete update?",
"Any files you have open will stay open.",
function() {
commands.exec("restartc9vm");
window.location.reload();
},
function() {}
);
}
else {
alert(
"Update almost complete",
'Run docker restart ide50
in your ' +
"computer's terminal or Docker QuickStart " +
"Terminal to complete the update!",
"",
function() {},
{ isHTML: true }
);
}
}
}, plugin);
}
function displayWebServer() {
if(!stats || !stats.hasOwnProperty("host")) {
settings.set(info50.revision_setting, 0);
return showError("Error opening workspace domain. Try reloading the IDE!");
}
window.open(stats.host);
}
function fetchLatestVersion() {
if (!version.button) {
return;
}
else if (!_.isNumber(version.current)) {
plugin.off("statsUpdate", fetchLatestVersion);
plugin.once("statsUpdate", fetchLatestVersion);
return;
}
if (version.interval)
clearInterval(version.interval);
version.interval = setInterval(fetchLatestVersion, 86400000);
version.latest = settings.getNumber("project/cs50/info/@latestVersion") || 0;
if (version.latest > version.current)
return showUpdate();
http.request(
"https://mirror.cs50.net/ide50/2015/dists/trusty/main/binary-amd64/Packages",
{ contentType: "text/plain" },
function(err, data) {
if (err)
return console.log(err);
var matches = /Package:\s*ide50\s*\nVersion:\s*(\d+)/m.exec(data);
if (!matches)
return;
var fetchedVersion = _.parseInt(matches[1]);
if (fetchedVersion > version.latest) {
version.latest = fetchedVersion;
settings.set("project/cs50/info/@latestVersion", version.latest);
}
showUpdate(version.latest > version.current);
}
);
}
function showUpdate(show) {
if (show === false && _.isFunction(notify.hide)) {
notify.hide();
notify.hide = null;
return;
}
else if (show !== false && !notify.hide) {
notify.hide = notify(
'An update is available for CS50 IDE. Run update50
in a terminal window.
',
true
);
}
}
function updateVersionButton() {
if (!version.button)
return;
if (!_.isNumber(version.current)) {
version.button.setCaption("n/a");
showUpdate(false);
return;
}
else if (_.isNumber(version.latest)) {
if (version.latest > version.current)
showUpdate();
else
showUpdate(false);
}
version.button.setCaption("v" + version.current);
}
function stopTimer() {
if (timer === null)
return;
window.clearInterval(timer);
timer = null;
}
function startTimer() {
if (timer !== null)
return;
timer = window.setInterval(updateStats, delay * 1000);
}
function fetchSharedStatus() {
api.project.get("", function(err, data) {
if (err || workspace.myUserId != data.owner.id)
return;
settings.set(
"project/cs50/info/@public",
data["visibility"] === "public" || data["appAccess"] === "public"
);
});
}
function updateStats(callback) {
if (fetching)
return;
fetching = true;
if (c9.hosted)
fetchSharedStatus();
var myID = workspace.myUserId;
var myClientID = workspace.myClientId;
var hash = myID + "-" + myClientID;
var buffer = delay + 2;
proc.execFile(".info50", {
args: [domain, hash, buffer],
cwd: BIN
}, parseStats);
}
function parseStats(err, stdout, stderr) {
fetching = false;
if (err) {
if (err.code === "EDISCONNECT")
return;
version.current = null;
updateVersionButton();
return console.log(err);;
}
stats = JSON.parse(stdout);
version.current = _.parseInt(stats.version);
if (_.isNaN(version.current))
version.current = null;
updateVersionButton();
emit("statsUpdate");
}
function toggleVersion(show) {
if (version.button) {
if (show)
version.button.show();
else
version.button.hide();
}
}
function writeScript(options, callback) {
callback = callback || function() {};
var path = join((options.dir || BIN), options.name);
fs.exists(path, function(exists) {
var revision = settings.getNumber(options.revision_setting) || 0;
if (!exists || revision < options.revision) {
fs.writeFile(path, options.content, function(err) {
if (err) {
showError("Failed to write " + options.name);
return callback(err);
}
fs.chmod(path, 755, function(err) {
if (err) {
showError("Failed to chmod " + options.name);
return callback(err)
}
settings.set(options.revision_setting, options.revision);
callback();
});
});
}
else {
callback();
}
});
}
plugin.on("load", function() {
load();
});
plugin.on("unload", function() {
stopTimer();
delay = 30;
timer = null;
fetching = false;
stats = null;
domain = null;
version = {};
});
plugin.freezePublicAPI({
get host() { return (stats && stats.hasOwnProperty("host")) ? stats.host : null; },
get hasLoaded() { return (stats != null); },
});
register(null, {
"harvard.cs50.info": plugin
});
}
});
define("plugins/harvard.cs50/plugins/c9.ide.cs50.hex/openhex",[], function(require, exports, module) {
main.consumes = [
"c9", "dialog.error", "menus", "Plugin", "tabManager", "tree", "ui"
];
main.provides = ["harvard.cs50.openhex"];
return main;
function main(options, imports, register) {
var c9 = imports.c9;
var menus = imports.menus;
var Plugin = imports.Plugin;
var showError = imports["dialog.error"];
var tabManager = imports.tabManager;
var tree = imports.tree;
var ui = imports.ui;
var plugin = new Plugin("CS50", main.consumes);
function openSelection() {
if (!c9.has(c9.STORAGE))
return;
var nodes = tree.selectedNodes;
var last = nodes.length - 1;
var noanim = nodes.length > 1;
nodes.forEach(function(node, i) {
var tab;
var focus = (i === last);
if (!node.isFolder) {
var path = node.path;
tab = tabManager.findTab(path);
if (tab) {
return tabManager.open({
name: "hex-" + path,
document: { path: path },
editorType: "hex",
pane: tab.pane,
focus: false
}, function(err, tab) {
if (err)
return showError(err);
if (tab) {
tab.document.progress({ complete: true });
if (focus)
tabManager.focusTab(tab);
}
});
}
tabManager.open({
name: "hex-" + path,
document: { path: path },
editorType: "hex",
active: focus,
focus: focus,
noanim: noanim
});
}
});
}
plugin.on("load", function() {
tree.getElement("mnuCtxTree", function(mnuCtxTree) {
menus.addItemToMenu(mnuCtxTree, new ui.item({
caption: "Open as hexadecimal",
onclick: openSelection,
match: "file"
}), 101, plugin);
});
});
plugin.on("unload", function() {});
register(null, {
"harvard.cs50.openhex": plugin
});
}
});
define("text!plugins/harvard.cs50/plugins/c9.ide.cs50.hex/style.css",[],"");
define("plugins/harvard.cs50/plugins/c9.ide.cs50.hex/hex",[], function(require, exports, module) {
main.consumes = [
"dialog.error", "Editor", "editors", "layout", "settings", "vfs", "ui"
];
main.provides = ["harvard.cs50.hex"];
return main;
function main(options, imports, register) {
var Editor = imports.Editor;
var editors = imports.editors;
var layout = imports.layout;
var settings = imports.settings;
var showError = imports["dialog.error"].show;
var vfs = imports.vfs;
var ui = imports.ui;
var _ = require("lodash");
var basename = require("path").basename;
var extensions = [];
var handle = editors.register("hex", "Hex", Hex, extensions);
handle.darken = function(elements, dark) {
if (_.isArray(elements) && _.isBoolean(dark)) {
elements.forEach(function(element) {
var c = element.getAttribute("class") || "";
if (!dark)
element.setAttribute("class", c.replace(/\sdark/, ""));
else if (c.indexOf("dark") === -1)
element.setAttribute("class", c.concat(" dark"));
});
}
};
var cssInserted = false;
handle.insertCss = function() {
if (cssInserted)
return;
cssInserted = true;
ui.insertCss(require("text!./style.css"), options.staticPrefix, handle);
};
handle.updateFontSize = function(element, size) {
if (_.isObject(element) && _.isObject(element.style))
element.style.fontSize = size + "px";
};
function Hex() {
var plugin = new Editor("CS50", main.consumes, extensions);
var currSession = null;
var bar = null;
var configElements = {};
var content = null;
plugin.on("draw", function(e) {
handle.insertCss();
configElements.rowBytes = new ui.spinner({
defaultValue: 16,
min: 1,
max: 256,
});
configElements.colBytes = new ui.spinner({
defaultValue: 2,
min: 1,
max: 256,
});
configElements.offset = new ui.spinner({
defaultValue: 0,
min: 0,
});
function handleEnter(e) {
if (_.isObject(e) && e.keyCode === 13)
update();
}
for (var element in configElements)
configElements[element].on("keydown", handleEnter);
bar = new ui.bar({
id: "configs",
class: "cs50-hex-configs fakehbox aligncenter padding3",
height: "40",
childNodes: [
new ui.label({caption : "Start with byte: "}),
configElements.offset,
new ui.divider({
class: "cs50-hex-divider",
skin: "c9-divider"
}),
new ui.label({caption : "Bytes per row: "}),
configElements.rowBytes,
new ui.divider({
class: "cs50-hex-divider",
skin: "c9-divider"
}),
new ui.label({caption : "Bytes per column: "}),
configElements.colBytes,
new ui.divider({
class: "cs50-hex-divider",
skin: "c9-divider"
}),
new ui.button({
caption: "Set",
class: "btn-green",
onclick: update,
skin: "btn-default-css3"
})
]
});
content = new ui.textarea({
id: "content",
border: 0,
class: "cs50-hex-content",
focussable: false,
height: "100%",
width: "100%"
});
content.on("DOMNodeInsertedIntoDocument", function(e) {
handle.updateFontSize(content.$ext, settings.getNumber("user/ace/@fontSize"));
settings.on("user/ace/@fontSize", function(size) {
handle.updateFontSize(content.$ext, size);
});
content.$ext.setAttribute("readonly", "true");
});
var vbox = new ui.vsplitbox({
childNodes: [
bar,
new ui.bar({childNodes: [content]})
]
});
plugin.addElement(vbox);
e.tab.appendChild(vbox);
for (var element in configElements) {
configElements[element].$buttonMinus.addEventListener("mouseup", update);
configElements[element].$buttonPlus.addEventListener("mouseup", update);
}
});
function configChanged(configs) {
if (!_.isObject(configs)) {
showError("Error reading hex configs");
return false;
}
for (var name in configs) {
if (configElements[name]) {
var val = parseInt(configElements[name].oInput.value);
if (_.isNaN(val) || val < configElements[name].min)
configElements[name].oInput.value = configElements[name].min;
else if(val > configElements[name].max)
configElements[name].oInput.value = configElements[name].max;
if (configElements[name].oInput.value !== configs[name])
return true;
}
else {
console.warn("element " + name + " not found");
}
}
return false;
}
function format(session) {
if (!_.isObject(session)) {
showError("Error reading hex configs");
return false;
}
if (_.isObject(session.hex) && _.isObject(session.hex.configs) && _.isString(session.hex.content)) {
if (_.isEmpty(session.hex.content) || configChanged(session.hex.configs)) {
session.hex.configs = getConfigs(_.isEmpty(session.hex.configs));
session.hex.content = "";
var len = session.hex.bytes.length;
for (var i = session.hex.configs["offset"] * 2, j = 1; i < len; i += 2) {
session.hex.content += (session.hex.bytes[i] + session.hex.bytes[i + 1]);
if (j % session.hex.configs["rowBytes"] === 0)
session.hex.content += "\n";
else if (j % session.hex.configs["colBytes"] === 0) {
session.hex.content += " ";
}
j = (j + 1) % session.hex.configs["rowBytes"];
}
}
return true;
}
else {
showError("Error reading hex configs");
return false;
}
}
function getConfigs(defaults) {
var configs = {};
for (var element in configElements) {
configs[element] = (defaults === true)
? configElements[element].defaultValue
: configElements[element].oInput.value;
}
return configs;
}
function render(configs, formattedHex) {
if (!_.isObject(configs) || !_.isString(formattedHex))
return showError("Error rendering hex");
for (var name in configs) {
if (configElements[name])
configElements[name].oInput.value = configs[name];
else
console.warn("config " + name + " not found");
}
if (content) {
content.setAttribute("value", formattedHex);
showLoading(false);
}
}
function showLoading(show) {
if (show === true && content) {
content.setAttribute("visible", false);
var c = content.parentNode.getAttribute("class");
if (c.indexOf("cs50-hex.loading") === -1)
content.parentNode.setAttribute("class", c.concat(" cs50-hex-loading"));
}
else {
var c = content.parentNode.getAttribute("class");
content.parentNode.setAttribute("class", c.replace(/\s*cs50-hex-loading/, ""));
content.setAttribute("visible", true);
}
}
function update() {
if (format(currSession))
render(currSession.hex.configs, currSession.hex.content);
}
plugin.on("documentLoad", function(e) {
var doc = e.doc;
doc.meta.ignoreSave = true;
if (!doc.lastState.path)
return showError("Error retrieving file path");
var session = doc.getSession();
function setTheme(e) {
var tab = doc.tab;
if (e.theme.indexOf("dark") > -1) {
tab.backgroundColor = "#303130";
tab.classList.add("dark");
handle.darken([bar, content, content.parentNode], true);
}
else {
tab.backgroundColor = "#f1f1f1";
tab.classList.remove("dark");
handle.darken([bar, content, content.parentNode], false);
}
}
layout.on("themeChange", setTheme, session);
setTheme({ theme: settings.get("user/general/@skin") });
function setTitle(e) {
var path = doc.lastState.path;
doc.title = basename(path);
doc.tooltip = path;
}
setTitle();
doc.tab.on("setPath", setTitle, session);
showLoading(true);
session.hex = doc.lastState.hex;
if (!session.hex) {
session.hex = {
bytes: "",
configs: {},
content: ""
};
}
doc.on("getState", function(e) {
e.state.hex = session.hex;
e.state.path = doc.lastState.path;
});
var request = new XMLHttpRequest();
request.open("GET", vfs.url(doc.lastState.path), true);
request.responseType = "arraybuffer";
request.onload = function (e) {
if (!_.isObject(session.hex))
return;
if (request.response) {
var bytes = new Uint8Array(request.response);
session.hex.bytes = "";
for (var i = 0, len = bytes.length; i < len; i++) {
if (bytes[i] < 16)
session.hex.bytes += "0";
session.hex.bytes += bytes[i].toString(16);
}
if (format(session) && session === currSession)
render(session.hex.configs, session.hex.content)
}
};
request.send(null);
});
plugin.on("documentActivate", function(e) {
currSession = e.doc.getSession();
if (_.isObject(currSession.hex) && !_.isEmpty(currSession.hex.content))
render(currSession.hex.configs, currSession.hex.content);
});
plugin.on("documentUnload", function(e) {
delete e.doc.getSession().hex;
});
plugin.on("resize", function(){
if (content && content.getAttribute("visible") === true) {
content.setAttribute("visible", false);
content.setAttribute("visible", true);
}
});
plugin.freezePublicAPI({});
plugin.load(null, "harvard.cs50.hex");
return plugin;
}
register(null, {
"harvard.cs50.hex": handle
});
}
});
define("plugins/harvard.cs50/plugins/c9.ide.cs50.droplet/lib/droplet/droplet-full.js",[], function(require, exports, module) {
var $build_deps$ = {require: require, exports: exports, module: module};
exports = undefined; module = undefined;
function define(name, deps, m) {
if (typeof name == "function") {
m = name; deps = ["require", "exports", "module"]; name = $build_deps$.module.id
}
if (typeof name !== "string") {
m = deps; deps = name; name = $build_deps$.module.id
}
if (!m) {
m = deps; deps = [];
}
var ret = typeof m == "function" ?
m.apply($build_deps$.module, deps.map(function(n){return $build_deps$[n] || require(n)})) : m
if (ret != undefined) $build_deps$.module.exports = ret;
if (name != $build_deps$.module.id && $build_deps$.module.define) {
$build_deps$.module.define(name, [], function() { return $build_deps$.module.exports });
}
}
define.amd = true;
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.droplet = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o\t>\u0004",
"?\t?\u0004@\t@\u0004A\tA\u0004B\tB\u0004C\tC\u0004D\tD\u0004E\tE\u0004",
"F\tF\u0004G\tG\u0004H\tH\u0004I\tI\u0004J\tJ\u0004K\tK\u0004L\tL\u0004",
"M\tM\u0004N\tN\u0004O\tO\u0004P\tP\u0004Q\tQ\u0004R\tR\u0004S\tS\u0004",
"T\tT\u0004U\tU\u0004V\tV\u0004W\tW\u0004X\tX\u0004Y\tY\u0004Z\tZ\u0004",
"[\t[\u0004\\\t\\\u0004]\t]\u0004^\t^\u0004_\t_\u0004`\t`\u0004a\ta\u0004",
"b\tb\u0004c\tc\u0004d\td\u0004e\te\u0004f\tf\u0004g\tg\u0004h\th\u0004",
"i\ti\u0004j\tj\u0004k\tk\u0004l\tl\u0004m\tm\u0004n\tn\u0004o\to\u0004",
"p\tp\u0004q\tq\u0004r\tr\u0004s\ts\u0004t\tt\u0004u\tu\u0004v\tv\u0004",
"w\tw\u0004x\tx\u0004y\ty\u0004z\tz\u0004{\t{\u0004|\t|\u0004}\t}\u0004",
"~\t~\u0004\u007f\t\u007f\u0004\u0080\t\u0080\u0004\u0081\t\u0081\u0004",
"\u0082\t\u0082\u0004\u0083\t\u0083\u0004\u0084\t\u0084\u0004\u0085\t",
"\u0085\u0004\u0086\t\u0086\u0004\u0087\t\u0087\u0004\u0088\t\u0088\u0004",
"\u0089\t\u0089\u0004\u008a\t\u008a\u0004\u008b\t\u008b\u0004\u008c\t",
"\u008c\u0004\u008d\t\u008d\u0004\u008e\t\u008e\u0004\u008f\t\u008f\u0004",
"\u0090\t\u0090\u0004\u0091\t\u0091\u0004\u0092\t\u0092\u0004\u0093\t",
"\u0093\u0004\u0094\t\u0094\u0004\u0095\t\u0095\u0004\u0096\t\u0096\u0004",
"\u0097\t\u0097\u0003\u0002\u0003\u0002\u0003\u0002\u0003\u0002\u0003",
"\u0002\u0003\u0002\u0003\u0002\u0003\u0002\u0003\u0002\u0003\u0002\u0003",
"\u0002\u0003\u0002\u0003\u0002\u0003\u0002\u0003\u0003\u0003\u0003\u0003",
"\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003",
"\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003",
"\u0003\u0003\u0003\u0003\u0003\u0003\u0004\u0003\u0004\u0003\u0004\u0003",
"\u0004\u0003\u0004\u0003\u0004\u0003\u0004\u0003\u0004\u0003\u0004\u0003",
"\u0004\u0003\u0004\u0003\u0004\u0003\u0004\u0003\u0004\u0003\u0004\u0003",
"\u0004\u0003\u0004\u0003\u0004\u0003\u0004\u0003\u0005\u0003\u0005\u0003",
"\u0005\u0003\u0005\u0003\u0005\u0003\u0005\u0003\u0005\u0003\u0006\u0003",
"\u0006\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0006\u0003",
"\u0006\u0003\u0007\u0003\u0007\u0003\u0007\u0003\u0007\u0003\u0007\u0003",
"\u0007\u0003\u0007\u0003\u0007\u0003\b\u0003\b\u0003\b\u0003\b\u0003",
"\b\u0003\b\u0003\b\u0003\b\u0003\b\u0003\b\u0003\b\u0003\t\u0003\t\u0003",
"\t\u0003\t\u0003\t\u0003\t\u0003\t\u0003\t\u0003\t\u0003\t\u0003\t\u0003",
"\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003",
"\n\u0003\u000b\u0003\u000b\u0003\u000b\u0003\u000b\u0003\u000b\u0003",
"\u000b\u0003\u000b\u0003\u000b\u0003\u000b\u0003\u000b\u0003\u000b\u0003",
"\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\r\u0003\r\u0003\r\u0003",
"\r\u0003\r\u0003\r\u0003\r\u0003\r\u0003\r\u0003\r\u0003\r\u0003\r\u0003",
"\r\u0003\r\u0003\u000e\u0003\u000e\u0003\u000e\u0003\u000e\u0003\u000e",
"\u0003\u000e\u0003\u000e\u0003\u000e\u0003\u000f\u0003\u000f\u0003\u000f",
"\u0003\u000f\u0003\u000f\u0003\u000f\u0003\u000f\u0003\u000f\u0003\u000f",
"\u0003\u000f\u0003\u000f\u0003\u000f\u0003\u000f\u0003\u0010\u0003\u0010",
"\u0003\u0010\u0003\u0010\u0003\u0010\u0003\u0011\u0003\u0011\u0003\u0011",
"\u0003\u0011\u0003\u0011\u0003\u0011\u0003\u0012\u0003\u0012\u0003\u0012",
"\u0003\u0012\u0003\u0012\u0003\u0013\u0003\u0013\u0003\u0013\u0003\u0013",
"\u0003\u0013\u0003\u0014\u0003\u0014\u0003\u0014\u0003\u0014\u0003\u0014",
"\u0003\u0014\u0003\u0015\u0003\u0015\u0003\u0015\u0003\u0015\u0003\u0015",
"\u0003\u0015\u0003\u0015\u0003\u0015\u0003\u0015\u0003\u0016\u0003\u0016",
"\u0003\u0016\u0003\u0016\u0003\u0016\u0003\u0016\u0003\u0016\u0003\u0016",
"\u0003\u0017\u0003\u0017\u0003\u0017\u0003\u0018\u0003\u0018\u0003\u0018",
"\u0003\u0018\u0003\u0018\u0003\u0018\u0003\u0018\u0003\u0019\u0003\u0019",
"\u0003\u0019\u0003\u0019\u0003\u0019\u0003\u001a\u0003\u001a\u0003\u001a",
"\u0003\u001a\u0003\u001a\u0003\u001b\u0003\u001b\u0003\u001b\u0003\u001b",
"\u0003\u001b\u0003\u001b\u0003\u001b\u0003\u001c\u0003\u001c\u0003\u001c",
"\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001d\u0003\u001d\u0003\u001d",
"\u0003\u001d\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e",
"\u0003\u001f\u0003\u001f\u0003\u001f\u0003 \u0003 \u0003 \u0003 \u0003",
" \u0003 \u0003 \u0003!\u0003!\u0003!\u0003!\u0003\"\u0003\"\u0003\"",
"\u0003\"\u0003\"\u0003#\u0003#\u0003#\u0003#\u0003#\u0003#\u0003#\u0003",
"#\u0003#\u0003$\u0003$\u0003$\u0003$\u0003$\u0003$\u0003$\u0003$\u0003",
"$\u0003%\u0003%\u0003%\u0003%\u0003%\u0003%\u0003%\u0003&\u0003&\u0003",
"&\u0003&\u0003&\u0003&\u0003\'\u0003\'\u0003\'\u0003\'\u0003\'\u0003",
"\'\u0003\'\u0003(\u0003(\u0003(\u0003(\u0003(\u0003(\u0003(\u0003)\u0003",
")\u0003)\u0003)\u0003)\u0003)\u0003)\u0003*\u0003*\u0003*\u0003*\u0003",
"*\u0003*\u0003*\u0003+\u0003+\u0003+\u0003+\u0003+\u0003+\u0003+\u0003",
",\u0003,\u0003,\u0003,\u0003,\u0003,\u0003,\u0003,\u0003-\u0003-\u0003",
"-\u0003-\u0003-\u0003-\u0003.\u0003.\u0003.\u0003.\u0003.\u0003.\u0003",
".\u0003.\u0003.\u0003/\u0003/\u0003/\u0003/\u0003/\u00030\u00030\u0003",
"0\u00030\u00030\u00030\u00030\u00030\u00030\u00031\u00031\u00031\u0003",
"1\u00031\u00031\u00032\u00032\u00032\u00032\u00032\u00032\u00032\u0003",
"2\u00032\u00033\u00033\u00033\u00033\u00033\u00033\u00033\u00033\u0003",
"3\u00034\u00034\u00034\u00034\u00034\u00034\u00034\u00034\u00035\u0003",
"5\u00035\u00035\u00035\u00035\u00036\u00036\u00036\u00036\u00036\u0003",
"6\u00036\u00036\u00036\u00037\u00037\u00037\u00037\u00037\u00037\u0003",
"7\u00037\u00037\u00038\u00038\u00038\u00038\u00038\u00038\u00038\u0003",
"8\u00038\u00038\u00038\u00039\u00039\u00039\u00039\u00039\u00039\u0003",
"9\u00039\u00039\u00039\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003",
":\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003;\u0003",
";\u0003;\u0003;\u0003;\u0003;\u0003;\u0003;\u0003;\u0003;\u0003;\u0003",
";\u0003;\u0003;\u0003<\u0003<\u0003=\u0003=\u0003>\u0003>\u0003?\u0003",
"?\u0003@\u0003@\u0003A\u0003A\u0003B\u0003B\u0003C\u0003C\u0003C\u0003",
"D\u0003D\u0003E\u0003E\u0003E\u0003F\u0003F\u0003F\u0003G\u0003G\u0003",
"G\u0003H\u0003H\u0003I\u0003I\u0003I\u0003J\u0003J\u0003K\u0003K\u0003",
"K\u0003L\u0003L\u0003M\u0003M\u0003N\u0003N\u0003O\u0003O\u0003P\u0003",
"P\u0003Q\u0003Q\u0003Q\u0003R\u0003R\u0003R\u0003S\u0003S\u0003T\u0003",
"T\u0003U\u0003U\u0003V\u0003V\u0003W\u0003W\u0003X\u0003X\u0003Y\u0003",
"Y\u0003Z\u0003Z\u0003[\u0003[\u0003[\u0003\\\u0003\\\u0003\\\u0003]",
"\u0003]\u0003]\u0003^\u0003^\u0003^\u0003_\u0003_\u0003_\u0003`\u0003",
"`\u0003`\u0003`\u0003a\u0003a\u0003a\u0003a\u0003b\u0003b\u0003b\u0003",
"c\u0003c\u0003c\u0003d\u0003d\u0003d\u0003e\u0003e\u0003e\u0003f\u0003",
"f\u0003f\u0003g\u0003g\u0003g\u0003h\u0003h\u0003i\u0003i\u0003i\u0003",
"i\u0003j\u0003j\u0003j\u0007j\u037f\nj\fj\u000ej\u0382\u000bj\u0003",
"k\u0003k\u0005k\u0386\nk\u0003l\u0003l\u0003m\u0003m\u0003n\u0003n\u0003",
"n\u0003n\u0003n\u0003n\u0003n\u0003n\u0003n\u0003n\u0005n\u0396\nn\u0003",
"o\u0003o\u0003o\u0003o\u0003o\u0003p\u0003p\u0003p\u0005p\u03a0\np\u0003",
"q\u0003q\u0005q\u03a4\nq\u0003q\u0003q\u0005q\u03a8\nq\u0003q\u0003",
"q\u0005q\u03ac\nq\u0005q\u03ae\nq\u0003r\u0003r\u0007r\u03b2\nr\fr\u000e",
"r\u03b5\u000br\u0003s\u0003s\u0007s\u03b9\ns\fs\u000es\u03bc\u000bs",
"\u0003t\u0003t\u0006t\u03c0\nt\rt\u000et\u03c1\u0003u\u0003u\u0003u",
"\u0003v\u0003v\u0003w\u0003w\u0003x\u0003x\u0003y\u0003y\u0005y\u03cf",
"\ny\u0003y\u0003y\u0003y\u0003y\u0003y\u0005y\u03d6\ny\u0003y\u0003",
"y\u0005y\u03da\ny\u0005y\u03dc\ny\u0003z\u0003z\u0003{\u0003{\u0003",
"|\u0003|\u0003|\u0003|\u0005|\u03e6\n|\u0003}\u0003}\u0005}\u03ea\n",
"}\u0003~\u0003~\u0005~\u03ee\n~\u0003~\u0005~\u03f1\n~\u0003~\u0003",
"~\u0003~\u0005~\u03f6\n~\u0005~\u03f8\n~\u0003\u007f\u0003\u007f\u0003",
"\u007f\u0003\u007f\u0005\u007f\u03fe\n\u007f\u0003\u007f\u0003\u007f",
"\u0003\u007f\u0003\u007f\u0005\u007f\u0404\n\u007f\u0005\u007f\u0406",
"\n\u007f\u0003\u0080\u0005\u0080\u0409\n\u0080\u0003\u0080\u0003\u0080",
"\u0003\u0080\u0003\u0080\u0003\u0080\u0005\u0080\u0410\n\u0080\u0003",
"\u0081\u0003\u0081\u0005\u0081\u0414\n\u0081\u0003\u0081\u0003\u0081",
"\u0003\u0081\u0005\u0081\u0419\n\u0081\u0003\u0081\u0005\u0081\u041c",
"\n\u0081\u0003\u0082\u0003\u0082\u0003\u0083\u0006\u0083\u0421\n\u0083",
"\r\u0083\u000e\u0083\u0422\u0003\u0084\u0005\u0084\u0426\n\u0084\u0003",
"\u0084\u0003\u0084\u0003\u0084\u0003\u0084\u0003\u0084\u0005\u0084\u042d",
"\n\u0084\u0003\u0085\u0003\u0085\u0005\u0085\u0431\n\u0085\u0003\u0085",
"\u0003\u0085\u0003\u0085\u0005\u0085\u0436\n\u0085\u0003\u0085\u0005",
"\u0085\u0439\n\u0085\u0003\u0086\u0006\u0086\u043c\n\u0086\r\u0086\u000e",
"\u0086\u043d\u0003\u0087\u0003\u0087\u0003\u0088\u0003\u0088\u0003\u0088",
"\u0003\u0088\u0003\u0088\u0003\u0088\u0003\u0088\u0003\u0088\u0003\u0088",
"\u0003\u0088\u0003\u0088\u0003\u0088\u0003\u0088\u0003\u0088\u0003\u0088",
"\u0003\u0088\u0003\u0088\u0003\u0088\u0003\u0088\u0003\u0088\u0003\u0088",
"\u0003\u0088\u0005\u0088\u0458\n\u0088\u0003\u0089\u0006\u0089\u045b",
"\n\u0089\r\u0089\u000e\u0089\u045c\u0003\u008a\u0003\u008a\u0005\u008a",
"\u0461\n\u008a\u0003\u008b\u0003\u008b\u0003\u008b\u0003\u008b\u0005",
"\u008b\u0467\n\u008b\u0003\u008c\u0003\u008c\u0003\u008c\u0003\u008d",
"\u0003\u008d\u0003\u008d\u0003\u008d\u0003\u008d\u0003\u008d\u0003\u008d",
"\u0003\u008d\u0003\u008d\u0003\u008d\u0003\u008d\u0005\u008d\u0477\n",
"\u008d\u0003\u008e\u0003\u008e\u0003\u008e\u0003\u008e\u0006\u008e\u047d",
"\n\u008e\r\u008e\u000e\u008e\u047e\u0003\u008f\u0005\u008f\u0482\n\u008f",
"\u0003\u008f\u0003\u008f\u0005\u008f\u0486\n\u008f\u0003\u008f\u0003",
"\u008f\u0003\u0090\u0003\u0090\u0003\u0090\u0005\u0090\u048d\n\u0090",
"\u0003\u0091\u0006\u0091\u0490\n\u0091\r\u0091\u000e\u0091\u0491\u0003",
"\u0092\u0003\u0092\u0005\u0092\u0496\n\u0092\u0003\u0093\u0003\u0093",
"\u0007\u0093\u049a\n\u0093\f\u0093\u000e\u0093\u049d\u000b\u0093\u0003",
"\u0093\u0007\u0093\u04a0\n\u0093\f\u0093\u000e\u0093\u04a3\u000b\u0093",
"\u0003\u0093\u0003\u0093\u0003\u0094\u0006\u0094\u04a8\n\u0094\r\u0094",
"\u000e\u0094\u04a9\u0003\u0094\u0003\u0094\u0003\u0095\u0003\u0095\u0005",
"\u0095\u04b0\n\u0095\u0003\u0095\u0005\u0095\u04b3\n\u0095\u0003\u0095",
"\u0003\u0095\u0003\u0096\u0003\u0096\u0003\u0096\u0003\u0096\u0007\u0096",
"\u04bb\n\u0096\f\u0096\u000e\u0096\u04be\u000b\u0096\u0003\u0096\u0003",
"\u0096\u0003\u0096\u0003\u0096\u0003\u0096\u0003\u0097\u0003\u0097\u0003",
"\u0097\u0003\u0097\u0007\u0097\u04c9\n\u0097\f\u0097\u000e\u0097\u04cc",
"\u000b\u0097\u0003\u0097\u0003\u0097\u0004\u049b\u04bc\u0002\u0098\u0003",
"\u0003\u0005\u0004\u0007\u0005\t\u0006\u000b\u0007\r\b\u000f\t\u0011",
"\n\u0013\u000b\u0015\f\u0017\r\u0019\u000e\u001b\u000f\u001d\u0010\u001f",
"\u0011!\u0012#\u0013%\u0014\'\u0015)\u0016+\u0017-\u0018/\u00191\u001a",
"3\u001b5\u001c7\u001d9\u001e;\u001f= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.",
"[/]0_1a2c3e4g5i6k7m8o9q:s;u{?}@\u007fA\u0081B\u0083C\u0085D\u0087",
"E\u0089F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009b",
"O\u009dP\u009fQ\u00a1R\u00a3S\u00a5T\u00a7U\u00a9V\u00abW\u00adX\u00af",
"Y\u00b1Z\u00b3[\u00b5\\\u00b7]\u00b9^\u00bb_\u00bd`\u00bfa\u00c1b\u00c3",
"c\u00c5d\u00c7e\u00c9f\u00cbg\u00cdh\u00cfi\u00d1j\u00d3k\u00d5\u0002",
"\u00d7\u0002\u00d9\u0002\u00db\u0002\u00dd\u0002\u00dfl\u00e1\u0002",
"\u00e3\u0002\u00e5\u0002\u00e7\u0002\u00e9\u0002\u00eb\u0002\u00ed\u0002",
"\u00ef\u0002\u00f1\u0002\u00f3\u0002\u00f5\u0002\u00f7\u0002\u00f9\u0002",
"\u00fb\u0002\u00fd\u0002\u00ff\u0002\u0101\u0002\u0103\u0002\u0105\u0002",
"\u0107\u0002\u0109\u0002\u010b\u0002\u010d\u0002\u010f\u0002\u0111\u0002",
"\u0113\u0002\u0115\u0002\u0117\u0002\u0119\u0002\u011b\u0002\u011dm",
"\u011f\u0002\u0121\u0002\u0123\u0002\u0125n\u0127o\u0129p\u012bq\u012d",
"r\u0003\u0002\u0013\u0005\u0002C\\aac|\u0003\u00022;\u0004\u0002ZZz",
"z\u0003\u00023;\u0003\u000229\u0005\u00022;CHch\u0004\u0002WWww\u0004",
"\u0002NNnn\u0004\u0002--//\u0006\u0002HHNNhhnn\u0006\u0002\f\f\u000f",
"\u000f))^^\f\u0002$$))AA^^cdhhppttvvxx\u0005\u0002NNWWww\u0006\u0002",
"\f\f\u000f\u000f$$^^\u0005\u0002\f\f\u000f\u000f``\u0004\u0002\f\f\u000f",
"\u000f\u0004\u0002\u000b\u000b\"\"\u0002\u04e8\u0002\u0003\u0003\u0002",
"\u0002\u0002\u0002\u0005\u0003\u0002\u0002\u0002\u0002\u0007\u0003\u0002",
"\u0002\u0002\u0002\t\u0003\u0002\u0002\u0002\u0002\u000b\u0003\u0002",
"\u0002\u0002\u0002\r\u0003\u0002\u0002\u0002\u0002\u000f\u0003\u0002",
"\u0002\u0002\u0002\u0011\u0003\u0002\u0002\u0002\u0002\u0013\u0003\u0002",
"\u0002\u0002\u0002\u0015\u0003\u0002\u0002\u0002\u0002\u0017\u0003\u0002",
"\u0002\u0002\u0002\u0019\u0003\u0002\u0002\u0002\u0002\u001b\u0003\u0002",
"\u0002\u0002\u0002\u001d\u0003\u0002\u0002\u0002\u0002\u001f\u0003\u0002",
"\u0002\u0002\u0002!\u0003\u0002\u0002\u0002\u0002#\u0003\u0002\u0002",
"\u0002\u0002%\u0003\u0002\u0002\u0002\u0002\'\u0003\u0002\u0002\u0002",
"\u0002)\u0003\u0002\u0002\u0002\u0002+\u0003\u0002\u0002\u0002\u0002",
"-\u0003\u0002\u0002\u0002\u0002/\u0003\u0002\u0002\u0002\u00021\u0003",
"\u0002\u0002\u0002\u00023\u0003\u0002\u0002\u0002\u00025\u0003\u0002",
"\u0002\u0002\u00027\u0003\u0002\u0002\u0002\u00029\u0003\u0002\u0002",
"\u0002\u0002;\u0003\u0002\u0002\u0002\u0002=\u0003\u0002\u0002\u0002",
"\u0002?\u0003\u0002\u0002\u0002\u0002A\u0003\u0002\u0002\u0002\u0002",
"C\u0003\u0002\u0002\u0002\u0002E\u0003\u0002\u0002\u0002\u0002G\u0003",
"\u0002\u0002\u0002\u0002I\u0003\u0002\u0002\u0002\u0002K\u0003\u0002",
"\u0002\u0002\u0002M\u0003\u0002\u0002\u0002\u0002O\u0003\u0002\u0002",
"\u0002\u0002Q\u0003\u0002\u0002\u0002\u0002S\u0003\u0002\u0002\u0002",
"\u0002U\u0003\u0002\u0002\u0002\u0002W\u0003\u0002\u0002\u0002\u0002",
"Y\u0003\u0002\u0002\u0002\u0002[\u0003\u0002\u0002\u0002\u0002]\u0003",
"\u0002\u0002\u0002\u0002_\u0003\u0002\u0002\u0002\u0002a\u0003\u0002",
"\u0002\u0002\u0002c\u0003\u0002\u0002\u0002\u0002e\u0003\u0002\u0002",
"\u0002\u0002g\u0003\u0002\u0002\u0002\u0002i\u0003\u0002\u0002\u0002",
"\u0002k\u0003\u0002\u0002\u0002\u0002m\u0003\u0002\u0002\u0002\u0002",
"o\u0003\u0002\u0002\u0002\u0002q\u0003\u0002\u0002\u0002\u0002s\u0003",
"\u0002\u0002\u0002\u0002u\u0003\u0002\u0002\u0002\u0002w\u0003\u0002",
"\u0002\u0002\u0002y\u0003\u0002\u0002\u0002\u0002{\u0003\u0002\u0002",
"\u0002\u0002}\u0003\u0002\u0002\u0002\u0002\u007f\u0003\u0002\u0002",
"\u0002\u0002\u0081\u0003\u0002\u0002\u0002\u0002\u0083\u0003\u0002\u0002",
"\u0002\u0002\u0085\u0003\u0002\u0002\u0002\u0002\u0087\u0003\u0002\u0002",
"\u0002\u0002\u0089\u0003\u0002\u0002\u0002\u0002\u008b\u0003\u0002\u0002",
"\u0002\u0002\u008d\u0003\u0002\u0002\u0002\u0002\u008f\u0003\u0002\u0002",
"\u0002\u0002\u0091\u0003\u0002\u0002\u0002\u0002\u0093\u0003\u0002\u0002",
"\u0002\u0002\u0095\u0003\u0002\u0002\u0002\u0002\u0097\u0003\u0002\u0002",
"\u0002\u0002\u0099\u0003\u0002\u0002\u0002\u0002\u009b\u0003\u0002\u0002",
"\u0002\u0002\u009d\u0003\u0002\u0002\u0002\u0002\u009f\u0003\u0002\u0002",
"\u0002\u0002\u00a1\u0003\u0002\u0002\u0002\u0002\u00a3\u0003\u0002\u0002",
"\u0002\u0002\u00a5\u0003\u0002\u0002\u0002\u0002\u00a7\u0003\u0002\u0002",
"\u0002\u0002\u00a9\u0003\u0002\u0002\u0002\u0002\u00ab\u0003\u0002\u0002",
"\u0002\u0002\u00ad\u0003\u0002\u0002\u0002\u0002\u00af\u0003\u0002\u0002",
"\u0002\u0002\u00b1\u0003\u0002\u0002\u0002\u0002\u00b3\u0003\u0002\u0002",
"\u0002\u0002\u00b5\u0003\u0002\u0002\u0002\u0002\u00b7\u0003\u0002\u0002",
"\u0002\u0002\u00b9\u0003\u0002\u0002\u0002\u0002\u00bb\u0003\u0002\u0002",
"\u0002\u0002\u00bd\u0003\u0002\u0002\u0002\u0002\u00bf\u0003\u0002\u0002",
"\u0002\u0002\u00c1\u0003\u0002\u0002\u0002\u0002\u00c3\u0003\u0002\u0002",
"\u0002\u0002\u00c5\u0003\u0002\u0002\u0002\u0002\u00c7\u0003\u0002\u0002",
"\u0002\u0002\u00c9\u0003\u0002\u0002\u0002\u0002\u00cb\u0003\u0002\u0002",
"\u0002\u0002\u00cd\u0003\u0002\u0002\u0002\u0002\u00cf\u0003\u0002\u0002",
"\u0002\u0002\u00d1\u0003\u0002\u0002\u0002\u0002\u00d3\u0003\u0002\u0002",
"\u0002\u0002\u00df\u0003\u0002\u0002\u0002\u0002\u011d\u0003\u0002\u0002",
"\u0002\u0002\u0125\u0003\u0002\u0002\u0002\u0002\u0127\u0003\u0002\u0002",
"\u0002\u0002\u0129\u0003\u0002\u0002\u0002\u0002\u012b\u0003\u0002\u0002",
"\u0002\u0002\u012d\u0003\u0002\u0002\u0002\u0003\u012f\u0003\u0002\u0002",
"\u0002\u0005\u013d\u0003\u0002\u0002\u0002\u0007\u014e\u0003\u0002\u0002",
"\u0002\t\u0161\u0003\u0002\u0002\u0002\u000b\u0168\u0003\u0002\u0002",
"\u0002\r\u0170\u0003\u0002\u0002\u0002\u000f\u0178\u0003\u0002\u0002",
"\u0002\u0011\u0183\u0003\u0002\u0002\u0002\u0013\u018e\u0003\u0002\u0002",
"\u0002\u0015\u0198\u0003\u0002\u0002\u0002\u0017\u01a3\u0003\u0002\u0002",
"\u0002\u0019\u01a9\u0003\u0002\u0002\u0002\u001b\u01b7\u0003\u0002\u0002",
"\u0002\u001d\u01bf\u0003\u0002\u0002\u0002\u001f\u01cc\u0003\u0002\u0002",
"\u0002!\u01d1\u0003\u0002\u0002\u0002#\u01d7\u0003\u0002\u0002\u0002",
"%\u01dc\u0003\u0002\u0002\u0002\'\u01e1\u0003\u0002\u0002\u0002)\u01e7",
"\u0003\u0002\u0002\u0002+\u01f0\u0003\u0002\u0002\u0002-\u01f8\u0003",
"\u0002\u0002\u0002/\u01fb\u0003\u0002\u0002\u00021\u0202\u0003\u0002",
"\u0002\u00023\u0207\u0003\u0002\u0002\u00025\u020c\u0003\u0002\u0002",
"\u00027\u0213\u0003\u0002\u0002\u00029\u0219\u0003\u0002\u0002\u0002",
";\u021d\u0003\u0002\u0002\u0002=\u0222\u0003\u0002\u0002\u0002?\u0225",
"\u0003\u0002\u0002\u0002A\u022c\u0003\u0002\u0002\u0002C\u0230\u0003",
"\u0002\u0002\u0002E\u0235\u0003\u0002\u0002\u0002G\u023e\u0003\u0002",
"\u0002\u0002I\u0247\u0003\u0002\u0002\u0002K\u024e\u0003\u0002\u0002",
"\u0002M\u0254\u0003\u0002\u0002\u0002O\u025b\u0003\u0002\u0002\u0002",
"Q\u0262\u0003\u0002\u0002\u0002S\u0269\u0003\u0002\u0002\u0002U\u0270",
"\u0003\u0002\u0002\u0002W\u0277\u0003\u0002\u0002\u0002Y\u027f\u0003",
"\u0002\u0002\u0002[\u0285\u0003\u0002\u0002\u0002]\u028e\u0003\u0002",
"\u0002\u0002_\u0293\u0003\u0002\u0002\u0002a\u029c\u0003\u0002\u0002",
"\u0002c\u02a2\u0003\u0002\u0002\u0002e\u02ab\u0003\u0002\u0002\u0002",
"g\u02b4\u0003\u0002\u0002\u0002i\u02bc\u0003\u0002\u0002\u0002k\u02c2",
"\u0003\u0002\u0002\u0002m\u02cb\u0003\u0002\u0002\u0002o\u02d4\u0003",
"\u0002\u0002\u0002q\u02df\u0003\u0002\u0002\u0002s\u02e9\u0003\u0002",
"\u0002\u0002u\u02f8\u0003\u0002\u0002\u0002w\u0306\u0003\u0002\u0002",
"\u0002y\u0308\u0003\u0002\u0002\u0002{\u030a\u0003\u0002\u0002\u0002",
"}\u030c\u0003\u0002\u0002\u0002\u007f\u030e\u0003\u0002\u0002\u0002",
"\u0081\u0310\u0003\u0002\u0002\u0002\u0083\u0312\u0003\u0002\u0002\u0002",
"\u0085\u0314\u0003\u0002\u0002\u0002\u0087\u0317\u0003\u0002\u0002\u0002",
"\u0089\u0319\u0003\u0002\u0002\u0002\u008b\u031c\u0003\u0002\u0002\u0002",
"\u008d\u031f\u0003\u0002\u0002\u0002\u008f\u0322\u0003\u0002\u0002\u0002",
"\u0091\u0324\u0003\u0002\u0002\u0002\u0093\u0327\u0003\u0002\u0002\u0002",
"\u0095\u0329\u0003\u0002\u0002\u0002\u0097\u032c\u0003\u0002\u0002\u0002",
"\u0099\u032e\u0003\u0002\u0002\u0002\u009b\u0330\u0003\u0002\u0002\u0002",
"\u009d\u0332\u0003\u0002\u0002\u0002\u009f\u0334\u0003\u0002\u0002\u0002",
"\u00a1\u0336\u0003\u0002\u0002\u0002\u00a3\u0339\u0003\u0002\u0002\u0002",
"\u00a5\u033c\u0003\u0002\u0002\u0002\u00a7\u033e\u0003\u0002\u0002\u0002",
"\u00a9\u0340\u0003\u0002\u0002\u0002\u00ab\u0342\u0003\u0002\u0002\u0002",
"\u00ad\u0344\u0003\u0002\u0002\u0002\u00af\u0346\u0003\u0002\u0002\u0002",
"\u00b1\u0348\u0003\u0002\u0002\u0002\u00b3\u034a\u0003\u0002\u0002\u0002",
"\u00b5\u034c\u0003\u0002\u0002\u0002\u00b7\u034f\u0003\u0002\u0002\u0002",
"\u00b9\u0352\u0003\u0002\u0002\u0002\u00bb\u0355\u0003\u0002\u0002\u0002",
"\u00bd\u0358\u0003\u0002\u0002\u0002\u00bf\u035b\u0003\u0002\u0002\u0002",
"\u00c1\u035f\u0003\u0002\u0002\u0002\u00c3\u0363\u0003\u0002\u0002\u0002",
"\u00c5\u0366\u0003\u0002\u0002\u0002\u00c7\u0369\u0003\u0002\u0002\u0002",
"\u00c9\u036c\u0003\u0002\u0002\u0002\u00cb\u036f\u0003\u0002\u0002\u0002",
"\u00cd\u0372\u0003\u0002\u0002\u0002\u00cf\u0375\u0003\u0002\u0002\u0002",
"\u00d1\u0377\u0003\u0002\u0002\u0002\u00d3\u037b\u0003\u0002\u0002\u0002",
"\u00d5\u0385\u0003\u0002\u0002\u0002\u00d7\u0387\u0003\u0002\u0002\u0002",
"\u00d9\u0389\u0003\u0002\u0002\u0002\u00db\u0395\u0003\u0002\u0002\u0002",
"\u00dd\u0397\u0003\u0002\u0002\u0002\u00df\u039f\u0003\u0002\u0002\u0002",
"\u00e1\u03ad\u0003\u0002\u0002\u0002\u00e3\u03af\u0003\u0002\u0002\u0002",
"\u00e5\u03b6\u0003\u0002\u0002\u0002\u00e7\u03bd\u0003\u0002\u0002\u0002",
"\u00e9\u03c3\u0003\u0002\u0002\u0002\u00eb\u03c6\u0003\u0002\u0002\u0002",
"\u00ed\u03c8\u0003\u0002\u0002\u0002\u00ef\u03ca\u0003\u0002\u0002\u0002",
"\u00f1\u03db\u0003\u0002\u0002\u0002\u00f3\u03dd\u0003\u0002\u0002\u0002",
"\u00f5\u03df\u0003\u0002\u0002\u0002\u00f7\u03e5\u0003\u0002\u0002\u0002",
"\u00f9\u03e9\u0003\u0002\u0002\u0002\u00fb\u03f7\u0003\u0002\u0002\u0002",
"\u00fd\u0405\u0003\u0002\u0002\u0002\u00ff\u040f\u0003\u0002\u0002\u0002",
"\u0101\u041b\u0003\u0002\u0002\u0002\u0103\u041d\u0003\u0002\u0002\u0002",
"\u0105\u0420\u0003\u0002\u0002\u0002\u0107\u042c\u0003\u0002\u0002\u0002",
"\u0109\u0438\u0003\u0002\u0002\u0002\u010b\u043b\u0003\u0002\u0002\u0002",
"\u010d\u043f\u0003\u0002\u0002\u0002\u010f\u0457\u0003\u0002\u0002\u0002",
"\u0111\u045a\u0003\u0002\u0002\u0002\u0113\u0460\u0003\u0002\u0002\u0002",
"\u0115\u0466\u0003\u0002\u0002\u0002\u0117\u0468\u0003\u0002\u0002\u0002",
"\u0119\u0476\u0003\u0002\u0002\u0002\u011b\u0478\u0003\u0002\u0002\u0002",
"\u011d\u0481\u0003\u0002\u0002\u0002\u011f\u048c\u0003\u0002\u0002\u0002",
"\u0121\u048f\u0003\u0002\u0002\u0002\u0123\u0495\u0003\u0002\u0002\u0002",
"\u0125\u0497\u0003\u0002\u0002\u0002\u0127\u04a7\u0003\u0002\u0002\u0002",
"\u0129\u04b2\u0003\u0002\u0002\u0002\u012b\u04b6\u0003\u0002\u0002\u0002",
"\u012d\u04c4\u0003\u0002\u0002\u0002\u012f\u0130\u0007a\u0002\u0002",
"\u0130\u0131\u0007a\u0002\u0002\u0131\u0132\u0007g\u0002\u0002\u0132",
"\u0133\u0007z\u0002\u0002\u0133\u0134\u0007v\u0002\u0002\u0134\u0135",
"\u0007g\u0002\u0002\u0135\u0136\u0007p\u0002\u0002\u0136\u0137\u0007",
"u\u0002\u0002\u0137\u0138\u0007k\u0002\u0002\u0138\u0139\u0007q\u0002",
"\u0002\u0139\u013a\u0007p\u0002\u0002\u013a\u013b\u0007a\u0002\u0002",
"\u013b\u013c\u0007a\u0002\u0002\u013c\u0004\u0003\u0002\u0002\u0002",
"\u013d\u013e\u0007a\u0002\u0002\u013e\u013f\u0007a\u0002\u0002\u013f",
"\u0140\u0007d\u0002\u0002\u0140\u0141\u0007w\u0002\u0002\u0141\u0142",
"\u0007k\u0002\u0002\u0142\u0143\u0007n\u0002\u0002\u0143\u0144\u0007",
"v\u0002\u0002\u0144\u0145\u0007k\u0002\u0002\u0145\u0146\u0007p\u0002",
"\u0002\u0146\u0147\u0007a\u0002\u0002\u0147\u0148\u0007x\u0002\u0002",
"\u0148\u0149\u0007c\u0002\u0002\u0149\u014a\u0007a\u0002\u0002\u014a",
"\u014b\u0007c\u0002\u0002\u014b\u014c\u0007t\u0002\u0002\u014c\u014d",
"\u0007i\u0002\u0002\u014d\u0006\u0003\u0002\u0002\u0002\u014e\u014f",
"\u0007a\u0002\u0002\u014f\u0150\u0007a\u0002\u0002\u0150\u0151\u0007",
"d\u0002\u0002\u0151\u0152\u0007w\u0002\u0002\u0152\u0153\u0007k\u0002",
"\u0002\u0153\u0154\u0007n\u0002\u0002\u0154\u0155\u0007v\u0002\u0002",
"\u0155\u0156\u0007k\u0002\u0002\u0156\u0157\u0007p\u0002\u0002\u0157",
"\u0158\u0007a\u0002\u0002\u0158\u0159\u0007q\u0002\u0002\u0159\u015a",
"\u0007h\u0002\u0002\u015a\u015b\u0007h\u0002\u0002\u015b\u015c\u0007",
"u\u0002\u0002\u015c\u015d\u0007g\u0002\u0002\u015d\u015e\u0007v\u0002",
"\u0002\u015e\u015f\u0007q\u0002\u0002\u015f\u0160\u0007h\u0002\u0002",
"\u0160\b\u0003\u0002\u0002\u0002\u0161\u0162\u0007a\u0002\u0002\u0162",
"\u0163\u0007a\u0002\u0002\u0163\u0164\u0007o\u0002\u0002\u0164\u0165",
"\u00073\u0002\u0002\u0165\u0166\u00074\u0002\u0002\u0166\u0167\u0007",
":\u0002\u0002\u0167\n\u0003\u0002\u0002\u0002\u0168\u0169\u0007a\u0002",
"\u0002\u0169\u016a\u0007a\u0002\u0002\u016a\u016b\u0007o\u0002\u0002",
"\u016b\u016c\u00073\u0002\u0002\u016c\u016d\u00074\u0002\u0002\u016d",
"\u016e\u0007:\u0002\u0002\u016e\u016f\u0007f\u0002\u0002\u016f\f\u0003",
"\u0002\u0002\u0002\u0170\u0171\u0007a\u0002\u0002\u0171\u0172\u0007",
"a\u0002\u0002\u0172\u0173\u0007o\u0002\u0002\u0173\u0174\u00073\u0002",
"\u0002\u0174\u0175\u00074\u0002\u0002\u0175\u0176\u0007:\u0002\u0002",
"\u0176\u0177\u0007k\u0002\u0002\u0177\u000e\u0003\u0002\u0002\u0002",
"\u0178\u0179\u0007a\u0002\u0002\u0179\u017a\u0007a\u0002\u0002\u017a",
"\u017b\u0007v\u0002\u0002\u017b\u017c\u0007{\u0002\u0002\u017c\u017d",
"\u0007r\u0002\u0002\u017d\u017e\u0007g\u0002\u0002\u017e\u017f\u0007",
"q\u0002\u0002\u017f\u0180\u0007h\u0002\u0002\u0180\u0181\u0007a\u0002",
"\u0002\u0181\u0182\u0007a\u0002\u0002\u0182\u0010\u0003\u0002\u0002",
"\u0002\u0183\u0184\u0007a\u0002\u0002\u0184\u0185\u0007a\u0002\u0002",
"\u0185\u0186\u0007k\u0002\u0002\u0186\u0187\u0007p\u0002\u0002\u0187",
"\u0188\u0007n\u0002\u0002\u0188\u0189\u0007k\u0002\u0002\u0189\u018a",
"\u0007p\u0002\u0002\u018a\u018b\u0007g\u0002\u0002\u018b\u018c\u0007",
"a\u0002\u0002\u018c\u018d\u0007a\u0002\u0002\u018d\u0012\u0003\u0002",
"\u0002\u0002\u018e\u018f\u0007a\u0002\u0002\u018f\u0190\u0007a\u0002",
"\u0002\u0190\u0191\u0007u\u0002\u0002\u0191\u0192\u0007v\u0002\u0002",
"\u0192\u0193\u0007f\u0002\u0002\u0193\u0194\u0007e\u0002\u0002\u0194",
"\u0195\u0007c\u0002\u0002\u0195\u0196\u0007n\u0002\u0002\u0196\u0197",
"\u0007n\u0002\u0002\u0197\u0014\u0003\u0002\u0002\u0002\u0198\u0199",
"\u0007a\u0002\u0002\u0199\u019a\u0007a\u0002\u0002\u019a\u019b\u0007",
"f\u0002\u0002\u019b\u019c\u0007g\u0002\u0002\u019c\u019d\u0007e\u0002",
"\u0002\u019d\u019e\u0007n\u0002\u0002\u019e\u019f\u0007u\u0002\u0002",
"\u019f\u01a0\u0007r\u0002\u0002\u01a0\u01a1\u0007g\u0002\u0002\u01a1",
"\u01a2\u0007e\u0002\u0002\u01a2\u0016\u0003\u0002\u0002\u0002\u01a3",
"\u01a4\u0007a\u0002\u0002\u01a4\u01a5\u0007a\u0002\u0002\u01a5\u01a6",
"\u0007c\u0002\u0002\u01a6\u01a7\u0007u\u0002\u0002\u01a7\u01a8\u0007",
"o\u0002\u0002\u01a8\u0018\u0003\u0002\u0002\u0002\u01a9\u01aa\u0007",
"a\u0002\u0002\u01aa\u01ab\u0007a\u0002\u0002\u01ab\u01ac\u0007c\u0002",
"\u0002\u01ac\u01ad\u0007v\u0002\u0002\u01ad\u01ae\u0007v\u0002\u0002",
"\u01ae\u01af\u0007t\u0002\u0002\u01af\u01b0\u0007k\u0002\u0002\u01b0",
"\u01b1\u0007d\u0002\u0002\u01b1\u01b2\u0007w\u0002\u0002\u01b2\u01b3",
"\u0007v\u0002\u0002\u01b3\u01b4\u0007g\u0002\u0002\u01b4\u01b5\u0007",
"a\u0002\u0002\u01b5\u01b6\u0007a\u0002\u0002\u01b6\u001a\u0003\u0002",
"\u0002\u0002\u01b7\u01b8\u0007a\u0002\u0002\u01b8\u01b9\u0007a\u0002",
"\u0002\u01b9\u01ba\u0007c\u0002\u0002\u01ba\u01bb\u0007u\u0002\u0002",
"\u01bb\u01bc\u0007o\u0002\u0002\u01bc\u01bd\u0007a\u0002\u0002\u01bd",
"\u01be\u0007a\u0002\u0002\u01be\u001c\u0003\u0002\u0002\u0002\u01bf",
"\u01c0\u0007a\u0002\u0002\u01c0\u01c1\u0007a\u0002\u0002\u01c1\u01c2",
"\u0007x\u0002\u0002\u01c2\u01c3\u0007q\u0002\u0002\u01c3\u01c4\u0007",
"n\u0002\u0002\u01c4\u01c5\u0007c\u0002\u0002\u01c5\u01c6\u0007v\u0002",
"\u0002\u01c6\u01c7\u0007k\u0002\u0002\u01c7\u01c8\u0007n\u0002\u0002",
"\u01c8\u01c9\u0007g\u0002\u0002\u01c9\u01ca\u0007a\u0002\u0002\u01ca",
"\u01cb\u0007a\u0002\u0002\u01cb\u001e\u0003\u0002\u0002\u0002\u01cc",
"\u01cd\u0007c\u0002\u0002\u01cd\u01ce\u0007w\u0002\u0002\u01ce\u01cf",
"\u0007v\u0002\u0002\u01cf\u01d0\u0007q\u0002\u0002\u01d0 \u0003\u0002",
"\u0002\u0002\u01d1\u01d2\u0007d\u0002\u0002\u01d2\u01d3\u0007t\u0002",
"\u0002\u01d3\u01d4\u0007g\u0002\u0002\u01d4\u01d5\u0007c\u0002\u0002",
"\u01d5\u01d6\u0007m\u0002\u0002\u01d6\"\u0003\u0002\u0002\u0002\u01d7",
"\u01d8\u0007e\u0002\u0002\u01d8\u01d9\u0007c\u0002\u0002\u01d9\u01da",
"\u0007u\u0002\u0002\u01da\u01db\u0007g\u0002\u0002\u01db$\u0003\u0002",
"\u0002\u0002\u01dc\u01dd\u0007e\u0002\u0002\u01dd\u01de\u0007j\u0002",
"\u0002\u01de\u01df\u0007c\u0002\u0002\u01df\u01e0\u0007t\u0002\u0002",
"\u01e0&\u0003\u0002\u0002\u0002\u01e1\u01e2\u0007e\u0002\u0002\u01e2",
"\u01e3\u0007q\u0002\u0002\u01e3\u01e4\u0007p\u0002\u0002\u01e4\u01e5",
"\u0007u\u0002\u0002\u01e5\u01e6\u0007v\u0002\u0002\u01e6(\u0003\u0002",
"\u0002\u0002\u01e7\u01e8\u0007e\u0002\u0002\u01e8\u01e9\u0007q\u0002",
"\u0002\u01e9\u01ea\u0007p\u0002\u0002\u01ea\u01eb\u0007v\u0002\u0002",
"\u01eb\u01ec\u0007k\u0002\u0002\u01ec\u01ed\u0007p\u0002\u0002\u01ed",
"\u01ee\u0007w\u0002\u0002\u01ee\u01ef\u0007g\u0002\u0002\u01ef*\u0003",
"\u0002\u0002\u0002\u01f0\u01f1\u0007f\u0002\u0002\u01f1\u01f2\u0007",
"g\u0002\u0002\u01f2\u01f3\u0007h\u0002\u0002\u01f3\u01f4\u0007c\u0002",
"\u0002\u01f4\u01f5\u0007w\u0002\u0002\u01f5\u01f6\u0007n\u0002\u0002",
"\u01f6\u01f7\u0007v\u0002\u0002\u01f7,\u0003\u0002\u0002\u0002\u01f8",
"\u01f9\u0007f\u0002\u0002\u01f9\u01fa\u0007q\u0002\u0002\u01fa.\u0003",
"\u0002\u0002\u0002\u01fb\u01fc\u0007f\u0002\u0002\u01fc\u01fd\u0007",
"q\u0002\u0002\u01fd\u01fe\u0007w\u0002\u0002\u01fe\u01ff\u0007d\u0002",
"\u0002\u01ff\u0200\u0007n\u0002\u0002\u0200\u0201\u0007g\u0002\u0002",
"\u02010\u0003\u0002\u0002\u0002\u0202\u0203\u0007g\u0002\u0002\u0203",
"\u0204\u0007n\u0002\u0002\u0204\u0205\u0007u\u0002\u0002\u0205\u0206",
"\u0007g\u0002\u0002\u02062\u0003\u0002\u0002\u0002\u0207\u0208\u0007",
"g\u0002\u0002\u0208\u0209\u0007p\u0002\u0002\u0209\u020a\u0007w\u0002",
"\u0002\u020a\u020b\u0007o\u0002\u0002\u020b4\u0003\u0002\u0002\u0002",
"\u020c\u020d\u0007g\u0002\u0002\u020d\u020e\u0007z\u0002\u0002\u020e",
"\u020f\u0007v\u0002\u0002\u020f\u0210\u0007g\u0002\u0002\u0210\u0211",
"\u0007t\u0002\u0002\u0211\u0212\u0007p\u0002\u0002\u02126\u0003\u0002",
"\u0002\u0002\u0213\u0214\u0007h\u0002\u0002\u0214\u0215\u0007n\u0002",
"\u0002\u0215\u0216\u0007q\u0002\u0002\u0216\u0217\u0007c\u0002\u0002",
"\u0217\u0218\u0007v\u0002\u0002\u02188\u0003\u0002\u0002\u0002\u0219",
"\u021a\u0007h\u0002\u0002\u021a\u021b\u0007q\u0002\u0002\u021b\u021c",
"\u0007t\u0002\u0002\u021c:\u0003\u0002\u0002\u0002\u021d\u021e\u0007",
"i\u0002\u0002\u021e\u021f\u0007q\u0002\u0002\u021f\u0220\u0007v\u0002",
"\u0002\u0220\u0221\u0007q\u0002\u0002\u0221<\u0003\u0002\u0002\u0002",
"\u0222\u0223\u0007k\u0002\u0002\u0223\u0224\u0007h\u0002\u0002\u0224",
">\u0003\u0002\u0002\u0002\u0225\u0226\u0007k\u0002\u0002\u0226\u0227",
"\u0007p\u0002\u0002\u0227\u0228\u0007n\u0002\u0002\u0228\u0229\u0007",
"k\u0002\u0002\u0229\u022a\u0007p\u0002\u0002\u022a\u022b\u0007g\u0002",
"\u0002\u022b@\u0003\u0002\u0002\u0002\u022c\u022d\u0007k\u0002\u0002",
"\u022d\u022e\u0007p\u0002\u0002\u022e\u022f\u0007v\u0002\u0002\u022f",
"B\u0003\u0002\u0002\u0002\u0230\u0231\u0007n\u0002\u0002\u0231\u0232",
"\u0007q\u0002\u0002\u0232\u0233\u0007p\u0002\u0002\u0233\u0234\u0007",
"i\u0002\u0002\u0234D\u0003\u0002\u0002\u0002\u0235\u0236\u0007t\u0002",
"\u0002\u0236\u0237\u0007g\u0002\u0002\u0237\u0238\u0007i\u0002\u0002",
"\u0238\u0239\u0007k\u0002\u0002\u0239\u023a\u0007u\u0002\u0002\u023a",
"\u023b\u0007v\u0002\u0002\u023b\u023c\u0007g\u0002\u0002\u023c\u023d",
"\u0007t\u0002\u0002\u023dF\u0003\u0002\u0002\u0002\u023e\u023f\u0007",
"t\u0002\u0002\u023f\u0240\u0007g\u0002\u0002\u0240\u0241\u0007u\u0002",
"\u0002\u0241\u0242\u0007v\u0002\u0002\u0242\u0243\u0007t\u0002\u0002",
"\u0243\u0244\u0007k\u0002\u0002\u0244\u0245\u0007e\u0002\u0002\u0245",
"\u0246\u0007v\u0002\u0002\u0246H\u0003\u0002\u0002\u0002\u0247\u0248",
"\u0007t\u0002\u0002\u0248\u0249\u0007g\u0002\u0002\u0249\u024a\u0007",
"v\u0002\u0002\u024a\u024b\u0007w\u0002\u0002\u024b\u024c\u0007t\u0002",
"\u0002\u024c\u024d\u0007p\u0002\u0002\u024dJ\u0003\u0002\u0002\u0002",
"\u024e\u024f\u0007u\u0002\u0002\u024f\u0250\u0007j\u0002\u0002\u0250",
"\u0251\u0007q\u0002\u0002\u0251\u0252\u0007t\u0002\u0002\u0252\u0253",
"\u0007v\u0002\u0002\u0253L\u0003\u0002\u0002\u0002\u0254\u0255\u0007",
"u\u0002\u0002\u0255\u0256\u0007k\u0002\u0002\u0256\u0257\u0007i\u0002",
"\u0002\u0257\u0258\u0007p\u0002\u0002\u0258\u0259\u0007g\u0002\u0002",
"\u0259\u025a\u0007f\u0002\u0002\u025aN\u0003\u0002\u0002\u0002\u025b",
"\u025c\u0007u\u0002\u0002\u025c\u025d\u0007k\u0002\u0002\u025d\u025e",
"\u0007|\u0002\u0002\u025e\u025f\u0007g\u0002\u0002\u025f\u0260\u0007",
"q\u0002\u0002\u0260\u0261\u0007h\u0002\u0002\u0261P\u0003\u0002\u0002",
"\u0002\u0262\u0263\u0007u\u0002\u0002\u0263\u0264\u0007v\u0002\u0002",
"\u0264\u0265\u0007c\u0002\u0002\u0265\u0266\u0007v\u0002\u0002\u0266",
"\u0267\u0007k\u0002\u0002\u0267\u0268\u0007e\u0002\u0002\u0268R\u0003",
"\u0002\u0002\u0002\u0269\u026a\u0007u\u0002\u0002\u026a\u026b\u0007",
"v\u0002\u0002\u026b\u026c\u0007t\u0002\u0002\u026c\u026d\u0007w\u0002",
"\u0002\u026d\u026e\u0007e\u0002\u0002\u026e\u026f\u0007v\u0002\u0002",
"\u026fT\u0003\u0002\u0002\u0002\u0270\u0271\u0007u\u0002\u0002\u0271",
"\u0272\u0007y\u0002\u0002\u0272\u0273\u0007k\u0002\u0002\u0273\u0274",
"\u0007v\u0002\u0002\u0274\u0275\u0007e\u0002\u0002\u0275\u0276\u0007",
"j\u0002\u0002\u0276V\u0003\u0002\u0002\u0002\u0277\u0278\u0007v\u0002",
"\u0002\u0278\u0279\u0007{\u0002\u0002\u0279\u027a\u0007r\u0002\u0002",
"\u027a\u027b\u0007g\u0002\u0002\u027b\u027c\u0007f\u0002\u0002\u027c",
"\u027d\u0007g\u0002\u0002\u027d\u027e\u0007h\u0002\u0002\u027eX\u0003",
"\u0002\u0002\u0002\u027f\u0280\u0007w\u0002\u0002\u0280\u0281\u0007",
"p\u0002\u0002\u0281\u0282\u0007k\u0002\u0002\u0282\u0283\u0007q\u0002",
"\u0002\u0283\u0284\u0007p\u0002\u0002\u0284Z\u0003\u0002\u0002\u0002",
"\u0285\u0286\u0007w\u0002\u0002\u0286\u0287\u0007p\u0002\u0002\u0287",
"\u0288\u0007u\u0002\u0002\u0288\u0289\u0007k\u0002\u0002\u0289\u028a",
"\u0007i\u0002\u0002\u028a\u028b\u0007p\u0002\u0002\u028b\u028c\u0007",
"g\u0002\u0002\u028c\u028d\u0007f\u0002\u0002\u028d\\\u0003\u0002\u0002",
"\u0002\u028e\u028f\u0007x\u0002\u0002\u028f\u0290\u0007q\u0002\u0002",
"\u0290\u0291\u0007k\u0002\u0002\u0291\u0292\u0007f\u0002\u0002\u0292",
"^\u0003\u0002\u0002\u0002\u0293\u0294\u0007x\u0002\u0002\u0294\u0295",
"\u0007q\u0002\u0002\u0295\u0296\u0007n\u0002\u0002\u0296\u0297\u0007",
"c\u0002\u0002\u0297\u0298\u0007v\u0002\u0002\u0298\u0299\u0007k\u0002",
"\u0002\u0299\u029a\u0007n\u0002\u0002\u029a\u029b\u0007g\u0002\u0002",
"\u029b`\u0003\u0002\u0002\u0002\u029c\u029d\u0007y\u0002\u0002\u029d",
"\u029e\u0007j\u0002\u0002\u029e\u029f\u0007k\u0002\u0002\u029f\u02a0",
"\u0007n\u0002\u0002\u02a0\u02a1\u0007g\u0002\u0002\u02a1b\u0003\u0002",
"\u0002\u0002\u02a2\u02a3\u0007a\u0002\u0002\u02a3\u02a4\u0007C\u0002",
"\u0002\u02a4\u02a5\u0007n\u0002\u0002\u02a5\u02a6\u0007k\u0002\u0002",
"\u02a6\u02a7\u0007i\u0002\u0002\u02a7\u02a8\u0007p\u0002\u0002\u02a8",
"\u02a9\u0007c\u0002\u0002\u02a9\u02aa\u0007u\u0002\u0002\u02aad\u0003",
"\u0002\u0002\u0002\u02ab\u02ac\u0007a\u0002\u0002\u02ac\u02ad\u0007",
"C\u0002\u0002\u02ad\u02ae\u0007n\u0002\u0002\u02ae\u02af\u0007k\u0002",
"\u0002\u02af\u02b0\u0007i\u0002\u0002\u02b0\u02b1\u0007p\u0002\u0002",
"\u02b1\u02b2\u0007q\u0002\u0002\u02b2\u02b3\u0007h\u0002\u0002\u02b3",
"f\u0003\u0002\u0002\u0002\u02b4\u02b5\u0007a\u0002\u0002\u02b5\u02b6",
"\u0007C\u0002\u0002\u02b6\u02b7\u0007v\u0002\u0002\u02b7\u02b8\u0007",
"q\u0002\u0002\u02b8\u02b9\u0007o\u0002\u0002\u02b9\u02ba\u0007k\u0002",
"\u0002\u02ba\u02bb\u0007e\u0002\u0002\u02bbh\u0003\u0002\u0002\u0002",
"\u02bc\u02bd\u0007a\u0002\u0002\u02bd\u02be\u0007D\u0002\u0002\u02be",
"\u02bf\u0007q\u0002\u0002\u02bf\u02c0\u0007q\u0002\u0002\u02c0\u02c1",
"\u0007n\u0002\u0002\u02c1j\u0003\u0002\u0002\u0002\u02c2\u02c3\u0007",
"a\u0002\u0002\u02c3\u02c4\u0007E\u0002\u0002\u02c4\u02c5\u0007q\u0002",
"\u0002\u02c5\u02c6\u0007o\u0002\u0002\u02c6\u02c7\u0007r\u0002\u0002",
"\u02c7\u02c8\u0007n\u0002\u0002\u02c8\u02c9\u0007g\u0002\u0002\u02c9",
"\u02ca\u0007z\u0002\u0002\u02cal\u0003\u0002\u0002\u0002\u02cb\u02cc",
"\u0007a\u0002\u0002\u02cc\u02cd\u0007I\u0002\u0002\u02cd\u02ce\u0007",
"g\u0002\u0002\u02ce\u02cf\u0007p\u0002\u0002\u02cf\u02d0\u0007g\u0002",
"\u0002\u02d0\u02d1\u0007t\u0002\u0002\u02d1\u02d2\u0007k\u0002\u0002",
"\u02d2\u02d3\u0007e\u0002\u0002\u02d3n\u0003\u0002\u0002\u0002\u02d4",
"\u02d5\u0007a\u0002\u0002\u02d5\u02d6\u0007K\u0002\u0002\u02d6\u02d7",
"\u0007o\u0002\u0002\u02d7\u02d8\u0007c\u0002\u0002\u02d8\u02d9\u0007",
"i\u0002\u0002\u02d9\u02da\u0007k\u0002\u0002\u02da\u02db\u0007p\u0002",
"\u0002\u02db\u02dc\u0007c\u0002\u0002\u02dc\u02dd\u0007t\u0002\u0002",
"\u02dd\u02de\u0007{\u0002\u0002\u02dep\u0003\u0002\u0002\u0002\u02df",
"\u02e0\u0007a\u0002\u0002\u02e0\u02e1\u0007P\u0002\u0002\u02e1\u02e2",
"\u0007q\u0002\u0002\u02e2\u02e3\u0007t\u0002\u0002\u02e3\u02e4\u0007",
"g\u0002\u0002\u02e4\u02e5\u0007v\u0002\u0002\u02e5\u02e6\u0007w\u0002",
"\u0002\u02e6\u02e7\u0007t\u0002\u0002\u02e7\u02e8\u0007p\u0002\u0002",
"\u02e8r\u0003\u0002\u0002\u0002\u02e9\u02ea\u0007a\u0002\u0002\u02ea",
"\u02eb\u0007U\u0002\u0002\u02eb\u02ec\u0007v\u0002\u0002\u02ec\u02ed",
"\u0007c\u0002\u0002\u02ed\u02ee\u0007v\u0002\u0002\u02ee\u02ef\u0007",
"k\u0002\u0002\u02ef\u02f0\u0007e\u0002\u0002\u02f0\u02f1\u0007a\u0002",
"\u0002\u02f1\u02f2\u0007c\u0002\u0002\u02f2\u02f3\u0007u\u0002\u0002",
"\u02f3\u02f4\u0007u\u0002\u0002\u02f4\u02f5\u0007g\u0002\u0002\u02f5",
"\u02f6\u0007t\u0002\u0002\u02f6\u02f7\u0007v\u0002\u0002\u02f7t\u0003",
"\u0002\u0002\u0002\u02f8\u02f9\u0007a\u0002\u0002\u02f9\u02fa\u0007",
"V\u0002\u0002\u02fa\u02fb\u0007j\u0002\u0002\u02fb\u02fc\u0007t\u0002",
"\u0002\u02fc\u02fd\u0007g\u0002\u0002\u02fd\u02fe\u0007c\u0002\u0002",
"\u02fe\u02ff\u0007f\u0002\u0002\u02ff\u0300\u0007a\u0002\u0002\u0300",
"\u0301\u0007n\u0002\u0002\u0301\u0302\u0007q\u0002\u0002\u0302\u0303",
"\u0007e\u0002\u0002\u0303\u0304\u0007c\u0002\u0002\u0304\u0305\u0007",
"n\u0002\u0002\u0305v\u0003\u0002\u0002\u0002\u0306\u0307\u0007*\u0002",
"\u0002\u0307x\u0003\u0002\u0002\u0002\u0308\u0309\u0007+\u0002\u0002",
"\u0309z\u0003\u0002\u0002\u0002\u030a\u030b\u0007]\u0002\u0002\u030b",
"|\u0003\u0002\u0002\u0002\u030c\u030d\u0007_\u0002\u0002\u030d~\u0003",
"\u0002\u0002\u0002\u030e\u030f\u0007}\u0002\u0002\u030f\u0080\u0003",
"\u0002\u0002\u0002\u0310\u0311\u0007\u007f\u0002\u0002\u0311\u0082\u0003",
"\u0002\u0002\u0002\u0312\u0313\u0007>\u0002\u0002\u0313\u0084\u0003",
"\u0002\u0002\u0002\u0314\u0315\u0007>\u0002\u0002\u0315\u0316\u0007",
"?\u0002\u0002\u0316\u0086\u0003\u0002\u0002\u0002\u0317\u0318\u0007",
"@\u0002\u0002\u0318\u0088\u0003\u0002\u0002\u0002\u0319\u031a\u0007",
"@\u0002\u0002\u031a\u031b\u0007?\u0002\u0002\u031b\u008a\u0003\u0002",
"\u0002\u0002\u031c\u031d\u0007>\u0002\u0002\u031d\u031e\u0007>\u0002",
"\u0002\u031e\u008c\u0003\u0002\u0002\u0002\u031f\u0320\u0007@\u0002",
"\u0002\u0320\u0321\u0007@\u0002\u0002\u0321\u008e\u0003\u0002\u0002",
"\u0002\u0322\u0323\u0007-\u0002\u0002\u0323\u0090\u0003\u0002\u0002",
"\u0002\u0324\u0325\u0007-\u0002\u0002\u0325\u0326\u0007-\u0002\u0002",
"\u0326\u0092\u0003\u0002\u0002\u0002\u0327\u0328\u0007/\u0002\u0002",
"\u0328\u0094\u0003\u0002\u0002\u0002\u0329\u032a\u0007/\u0002\u0002",
"\u032a\u032b\u0007/\u0002\u0002\u032b\u0096\u0003\u0002\u0002\u0002",
"\u032c\u032d\u0007,\u0002\u0002\u032d\u0098\u0003\u0002\u0002\u0002",
"\u032e\u032f\u00071\u0002\u0002\u032f\u009a\u0003\u0002\u0002\u0002",
"\u0330\u0331\u0007\'\u0002\u0002\u0331\u009c\u0003\u0002\u0002\u0002",
"\u0332\u0333\u0007(\u0002\u0002\u0333\u009e\u0003\u0002\u0002\u0002",
"\u0334\u0335\u0007~\u0002\u0002\u0335\u00a0\u0003\u0002\u0002\u0002",
"\u0336\u0337\u0007(\u0002\u0002\u0337\u0338\u0007(\u0002\u0002\u0338",
"\u00a2\u0003\u0002\u0002\u0002\u0339\u033a\u0007~\u0002\u0002\u033a",
"\u033b\u0007~\u0002\u0002\u033b\u00a4\u0003\u0002\u0002\u0002\u033c",
"\u033d\u0007`\u0002\u0002\u033d\u00a6\u0003\u0002\u0002\u0002\u033e",
"\u033f\u0007#\u0002\u0002\u033f\u00a8\u0003\u0002\u0002\u0002\u0340",
"\u0341\u0007\u0080\u0002\u0002\u0341\u00aa\u0003\u0002\u0002\u0002\u0342",
"\u0343\u0007A\u0002\u0002\u0343\u00ac\u0003\u0002\u0002\u0002\u0344",
"\u0345\u0007<\u0002\u0002\u0345\u00ae\u0003\u0002\u0002\u0002\u0346",
"\u0347\u0007=\u0002\u0002\u0347\u00b0\u0003\u0002\u0002\u0002\u0348",
"\u0349\u0007.\u0002\u0002\u0349\u00b2\u0003\u0002\u0002\u0002\u034a",
"\u034b\u0007?\u0002\u0002\u034b\u00b4\u0003\u0002\u0002\u0002\u034c",
"\u034d\u0007,\u0002\u0002\u034d\u034e\u0007?\u0002\u0002\u034e\u00b6",
"\u0003\u0002\u0002\u0002\u034f\u0350\u00071\u0002\u0002\u0350\u0351",
"\u0007?\u0002\u0002\u0351\u00b8\u0003\u0002\u0002\u0002\u0352\u0353",
"\u0007\'\u0002\u0002\u0353\u0354\u0007?\u0002\u0002\u0354\u00ba\u0003",
"\u0002\u0002\u0002\u0355\u0356\u0007-\u0002\u0002\u0356\u0357\u0007",
"?\u0002\u0002\u0357\u00bc\u0003\u0002\u0002\u0002\u0358\u0359\u0007",
"/\u0002\u0002\u0359\u035a\u0007?\u0002\u0002\u035a\u00be\u0003\u0002",
"\u0002\u0002\u035b\u035c\u0007>\u0002\u0002\u035c\u035d\u0007>\u0002",
"\u0002\u035d\u035e\u0007?\u0002\u0002\u035e\u00c0\u0003\u0002\u0002",
"\u0002\u035f\u0360\u0007@\u0002\u0002\u0360\u0361\u0007@\u0002\u0002",
"\u0361\u0362\u0007?\u0002\u0002\u0362\u00c2\u0003\u0002\u0002\u0002",
"\u0363\u0364\u0007(\u0002\u0002\u0364\u0365\u0007?\u0002\u0002\u0365",
"\u00c4\u0003\u0002\u0002\u0002\u0366\u0367\u0007`\u0002\u0002\u0367",
"\u0368\u0007?\u0002\u0002\u0368\u00c6\u0003\u0002\u0002\u0002\u0369",
"\u036a\u0007~\u0002\u0002\u036a\u036b\u0007?\u0002\u0002\u036b\u00c8",
"\u0003\u0002\u0002\u0002\u036c\u036d\u0007?\u0002\u0002\u036d\u036e",
"\u0007?\u0002\u0002\u036e\u00ca\u0003\u0002\u0002\u0002\u036f\u0370",
"\u0007#\u0002\u0002\u0370\u0371\u0007?\u0002\u0002\u0371\u00cc\u0003",
"\u0002\u0002\u0002\u0372\u0373\u0007/\u0002\u0002\u0373\u0374\u0007",
"@\u0002\u0002\u0374\u00ce\u0003\u0002\u0002\u0002\u0375\u0376\u0007",
"0\u0002\u0002\u0376\u00d0\u0003\u0002\u0002\u0002\u0377\u0378\u0007",
"0\u0002\u0002\u0378\u0379\u00070\u0002\u0002\u0379\u037a\u00070\u0002",
"\u0002\u037a\u00d2\u0003\u0002\u0002\u0002\u037b\u0380\u0005\u00d5k",
"\u0002\u037c\u037f\u0005\u00d5k\u0002\u037d\u037f\u0005\u00d9m\u0002",
"\u037e\u037c\u0003\u0002\u0002\u0002\u037e\u037d\u0003\u0002\u0002\u0002",
"\u037f\u0382\u0003\u0002\u0002\u0002\u0380\u037e\u0003\u0002\u0002\u0002",
"\u0380\u0381\u0003\u0002\u0002\u0002\u0381\u00d4\u0003\u0002\u0002\u0002",
"\u0382\u0380\u0003\u0002\u0002\u0002\u0383\u0386\u0005\u00d7l\u0002",
"\u0384\u0386\u0005\u00dbn\u0002\u0385\u0383\u0003\u0002\u0002\u0002",
"\u0385\u0384\u0003\u0002\u0002\u0002\u0386\u00d6\u0003\u0002\u0002\u0002",
"\u0387\u0388\t\u0002\u0002\u0002\u0388\u00d8\u0003\u0002\u0002\u0002",
"\u0389\u038a\t\u0003\u0002\u0002\u038a\u00da\u0003\u0002\u0002\u0002",
"\u038b\u038c\u0007^\u0002\u0002\u038c\u038d\u0007w\u0002\u0002\u038d",
"\u038e\u0003\u0002\u0002\u0002\u038e\u0396\u0005\u00ddo\u0002\u038f",
"\u0390\u0007^\u0002\u0002\u0390\u0391\u0007W\u0002\u0002\u0391\u0392",
"\u0003\u0002\u0002\u0002\u0392\u0393\u0005\u00ddo\u0002\u0393\u0394",
"\u0005\u00ddo\u0002\u0394\u0396\u0003\u0002\u0002\u0002\u0395\u038b",
"\u0003\u0002\u0002\u0002\u0395\u038f\u0003\u0002\u0002\u0002\u0396\u00dc",
"\u0003\u0002\u0002\u0002\u0397\u0398\u0005\u00efx\u0002\u0398\u0399",
"\u0005\u00efx\u0002\u0399\u039a\u0005\u00efx\u0002\u039a\u039b\u0005",
"\u00efx\u0002\u039b\u00de\u0003\u0002\u0002\u0002\u039c\u03a0\u0005",
"\u00e1q\u0002\u039d\u03a0\u0005\u00f9}\u0002\u039e\u03a0\u0005\u010f",
"\u0088\u0002\u039f\u039c\u0003\u0002\u0002\u0002\u039f\u039d\u0003\u0002",
"\u0002\u0002\u039f\u039e\u0003\u0002\u0002\u0002\u03a0\u00e0\u0003\u0002",
"\u0002\u0002\u03a1\u03a3\u0005\u00e3r\u0002\u03a2\u03a4\u0005\u00f1",
"y\u0002\u03a3\u03a2\u0003\u0002\u0002\u0002\u03a3\u03a4\u0003\u0002",
"\u0002\u0002\u03a4\u03ae\u0003\u0002\u0002\u0002\u03a5\u03a7\u0005\u00e5",
"s\u0002\u03a6\u03a8\u0005\u00f1y\u0002\u03a7\u03a6\u0003\u0002\u0002",
"\u0002\u03a7\u03a8\u0003\u0002\u0002\u0002\u03a8\u03ae\u0003\u0002\u0002",
"\u0002\u03a9\u03ab\u0005\u00e7t\u0002\u03aa\u03ac\u0005\u00f1y\u0002",
"\u03ab\u03aa\u0003\u0002\u0002\u0002\u03ab\u03ac\u0003\u0002\u0002\u0002",
"\u03ac\u03ae\u0003\u0002\u0002\u0002\u03ad\u03a1\u0003\u0002\u0002\u0002",
"\u03ad\u03a5\u0003\u0002\u0002\u0002\u03ad\u03a9\u0003\u0002\u0002\u0002",
"\u03ae\u00e2\u0003\u0002\u0002\u0002\u03af\u03b3\u0005\u00ebv\u0002",
"\u03b0\u03b2\u0005\u00d9m\u0002\u03b1\u03b0\u0003\u0002\u0002\u0002",
"\u03b2\u03b5\u0003\u0002\u0002\u0002\u03b3\u03b1\u0003\u0002\u0002\u0002",
"\u03b3\u03b4\u0003\u0002\u0002\u0002\u03b4\u00e4\u0003\u0002\u0002\u0002",
"\u03b5\u03b3\u0003\u0002\u0002\u0002\u03b6\u03ba\u00072\u0002\u0002",
"\u03b7\u03b9\u0005\u00edw\u0002\u03b8\u03b7\u0003\u0002\u0002\u0002",
"\u03b9\u03bc\u0003\u0002\u0002\u0002\u03ba\u03b8\u0003\u0002\u0002\u0002",
"\u03ba\u03bb\u0003\u0002\u0002\u0002\u03bb\u00e6\u0003\u0002\u0002\u0002",
"\u03bc\u03ba\u0003\u0002\u0002\u0002\u03bd\u03bf\u0005\u00e9u\u0002",
"\u03be\u03c0\u0005\u00efx\u0002\u03bf\u03be\u0003\u0002\u0002\u0002",
"\u03c0\u03c1\u0003\u0002\u0002\u0002\u03c1\u03bf\u0003\u0002\u0002\u0002",
"\u03c1\u03c2\u0003\u0002\u0002\u0002\u03c2\u00e8\u0003\u0002\u0002\u0002",
"\u03c3\u03c4\u00072\u0002\u0002\u03c4\u03c5\t\u0004\u0002\u0002\u03c5",
"\u00ea\u0003\u0002\u0002\u0002\u03c6\u03c7\t\u0005\u0002\u0002\u03c7",
"\u00ec\u0003\u0002\u0002\u0002\u03c8\u03c9\t\u0006\u0002\u0002\u03c9",
"\u00ee\u0003\u0002\u0002\u0002\u03ca\u03cb\t\u0007\u0002\u0002\u03cb",
"\u00f0\u0003\u0002\u0002\u0002\u03cc\u03ce\u0005\u00f3z\u0002\u03cd",
"\u03cf\u0005\u00f5{\u0002\u03ce\u03cd\u0003\u0002\u0002\u0002\u03ce",
"\u03cf\u0003\u0002\u0002\u0002\u03cf\u03dc\u0003\u0002\u0002\u0002\u03d0",
"\u03d1\u0005\u00f3z\u0002\u03d1\u03d2\u0005\u00f7|\u0002\u03d2\u03dc",
"\u0003\u0002\u0002\u0002\u03d3\u03d5\u0005\u00f5{\u0002\u03d4\u03d6",
"\u0005\u00f3z\u0002\u03d5\u03d4\u0003\u0002\u0002\u0002\u03d5\u03d6",
"\u0003\u0002\u0002\u0002\u03d6\u03dc\u0003\u0002\u0002\u0002\u03d7\u03d9",
"\u0005\u00f7|\u0002\u03d8\u03da\u0005\u00f3z\u0002\u03d9\u03d8\u0003",
"\u0002\u0002\u0002\u03d9\u03da\u0003\u0002\u0002\u0002\u03da\u03dc\u0003",
"\u0002\u0002\u0002\u03db\u03cc\u0003\u0002\u0002\u0002\u03db\u03d0\u0003",
"\u0002\u0002\u0002\u03db\u03d3\u0003\u0002\u0002\u0002\u03db\u03d7\u0003",
"\u0002\u0002\u0002\u03dc\u00f2\u0003\u0002\u0002\u0002\u03dd\u03de\t",
"\b\u0002\u0002\u03de\u00f4\u0003\u0002\u0002\u0002\u03df\u03e0\t\t\u0002",
"\u0002\u03e0\u00f6\u0003\u0002\u0002\u0002\u03e1\u03e2\u0007n\u0002",
"\u0002\u03e2\u03e6\u0007n\u0002\u0002\u03e3\u03e4\u0007N\u0002\u0002",
"\u03e4\u03e6\u0007N\u0002\u0002\u03e5\u03e1\u0003\u0002\u0002\u0002",
"\u03e5\u03e3\u0003\u0002\u0002\u0002\u03e6\u00f8\u0003\u0002\u0002\u0002",
"\u03e7\u03ea\u0005\u00fb~\u0002\u03e8\u03ea\u0005\u00fd\u007f\u0002",
"\u03e9\u03e7\u0003\u0002\u0002\u0002\u03e9\u03e8\u0003\u0002\u0002\u0002",
"\u03ea\u00fa\u0003\u0002\u0002\u0002\u03eb\u03ed\u0005\u00ff\u0080\u0002",
"\u03ec\u03ee\u0005\u0101\u0081\u0002\u03ed\u03ec\u0003\u0002\u0002\u0002",
"\u03ed\u03ee\u0003\u0002\u0002\u0002\u03ee\u03f0\u0003\u0002\u0002\u0002",
"\u03ef\u03f1\u0005\u010d\u0087\u0002\u03f0\u03ef\u0003\u0002\u0002\u0002",
"\u03f0\u03f1\u0003\u0002\u0002\u0002\u03f1\u03f8\u0003\u0002\u0002\u0002",
"\u03f2\u03f3\u0005\u0105\u0083\u0002\u03f3\u03f5\u0005\u0101\u0081\u0002",
"\u03f4\u03f6\u0005\u010d\u0087\u0002\u03f5\u03f4\u0003\u0002\u0002\u0002",
"\u03f5\u03f6\u0003\u0002\u0002\u0002\u03f6\u03f8\u0003\u0002\u0002\u0002",
"\u03f7\u03eb\u0003\u0002\u0002\u0002\u03f7\u03f2\u0003\u0002\u0002\u0002",
"\u03f8\u00fc\u0003\u0002\u0002\u0002\u03f9\u03fa\u0005\u00e9u\u0002",
"\u03fa\u03fb\u0005\u0107\u0084\u0002\u03fb\u03fd\u0005\u0109\u0085\u0002",
"\u03fc\u03fe\u0005\u010d\u0087\u0002\u03fd\u03fc\u0003\u0002\u0002\u0002",
"\u03fd\u03fe\u0003\u0002\u0002\u0002\u03fe\u0406\u0003\u0002\u0002\u0002",
"\u03ff\u0400\u0005\u00e9u\u0002\u0400\u0401\u0005\u010b\u0086\u0002",
"\u0401\u0403\u0005\u0109\u0085\u0002\u0402\u0404\u0005\u010d\u0087\u0002",
"\u0403\u0402\u0003\u0002\u0002\u0002\u0403\u0404\u0003\u0002\u0002\u0002",
"\u0404\u0406\u0003\u0002\u0002\u0002\u0405\u03f9\u0003\u0002\u0002\u0002",
"\u0405\u03ff\u0003\u0002\u0002\u0002\u0406\u00fe\u0003\u0002\u0002\u0002",
"\u0407\u0409\u0005\u0105\u0083\u0002\u0408\u0407\u0003\u0002\u0002\u0002",
"\u0408\u0409\u0003\u0002\u0002\u0002\u0409\u040a\u0003\u0002\u0002\u0002",
"\u040a\u040b\u00070\u0002\u0002\u040b\u0410\u0005\u0105\u0083\u0002",
"\u040c\u040d\u0005\u0105\u0083\u0002\u040d\u040e\u00070\u0002\u0002",
"\u040e\u0410\u0003\u0002\u0002\u0002\u040f\u0408\u0003\u0002\u0002\u0002",
"\u040f\u040c\u0003\u0002\u0002\u0002\u0410\u0100\u0003\u0002\u0002\u0002",
"\u0411\u0413\u0007g\u0002\u0002\u0412\u0414\u0005\u0103\u0082\u0002",
"\u0413\u0412\u0003\u0002\u0002\u0002\u0413\u0414\u0003\u0002\u0002\u0002",
"\u0414\u0415\u0003\u0002\u0002\u0002\u0415\u041c\u0005\u0105\u0083\u0002",
"\u0416\u0418\u0007G\u0002\u0002\u0417\u0419\u0005\u0103\u0082\u0002",
"\u0418\u0417\u0003\u0002\u0002\u0002\u0418\u0419\u0003\u0002\u0002\u0002",
"\u0419\u041a\u0003\u0002\u0002\u0002\u041a\u041c\u0005\u0105\u0083\u0002",
"\u041b\u0411\u0003\u0002\u0002\u0002\u041b\u0416\u0003\u0002\u0002\u0002",
"\u041c\u0102\u0003\u0002\u0002\u0002\u041d\u041e\t\n\u0002\u0002\u041e",
"\u0104\u0003\u0002\u0002\u0002\u041f\u0421\u0005\u00d9m\u0002\u0420",
"\u041f\u0003\u0002\u0002\u0002\u0421\u0422\u0003\u0002\u0002\u0002\u0422",
"\u0420\u0003\u0002\u0002\u0002\u0422\u0423\u0003\u0002\u0002\u0002\u0423",
"\u0106\u0003\u0002\u0002\u0002\u0424\u0426\u0005\u010b\u0086\u0002\u0425",
"\u0424\u0003\u0002\u0002\u0002\u0425\u0426\u0003\u0002\u0002\u0002\u0426",
"\u0427\u0003\u0002\u0002\u0002\u0427\u0428\u00070\u0002\u0002\u0428",
"\u042d\u0005\u010b\u0086\u0002\u0429\u042a\u0005\u010b\u0086\u0002\u042a",
"\u042b\u00070\u0002\u0002\u042b\u042d\u0003\u0002\u0002\u0002\u042c",
"\u0425\u0003\u0002\u0002\u0002\u042c\u0429\u0003\u0002\u0002\u0002\u042d",
"\u0108\u0003\u0002\u0002\u0002\u042e\u0430\u0007r\u0002\u0002\u042f",
"\u0431\u0005\u0103\u0082\u0002\u0430\u042f\u0003\u0002\u0002\u0002\u0430",
"\u0431\u0003\u0002\u0002\u0002\u0431\u0432\u0003\u0002\u0002\u0002\u0432",
"\u0439\u0005\u0105\u0083\u0002\u0433\u0435\u0007R\u0002\u0002\u0434",
"\u0436\u0005\u0103\u0082\u0002\u0435\u0434\u0003\u0002\u0002\u0002\u0435",
"\u0436\u0003\u0002\u0002\u0002\u0436\u0437\u0003\u0002\u0002\u0002\u0437",
"\u0439\u0005\u0105\u0083\u0002\u0438\u042e\u0003\u0002\u0002\u0002\u0438",
"\u0433\u0003\u0002\u0002\u0002\u0439\u010a\u0003\u0002\u0002\u0002\u043a",
"\u043c\u0005\u00efx\u0002\u043b\u043a\u0003\u0002\u0002\u0002\u043c",
"\u043d\u0003\u0002\u0002\u0002\u043d\u043b\u0003\u0002\u0002\u0002\u043d",
"\u043e\u0003\u0002\u0002\u0002\u043e\u010c\u0003\u0002\u0002\u0002\u043f",
"\u0440\t\u000b\u0002\u0002\u0440\u010e\u0003\u0002\u0002\u0002\u0441",
"\u0442\u0007)\u0002\u0002\u0442\u0443\u0005\u0111\u0089\u0002\u0443",
"\u0444\u0007)\u0002\u0002\u0444\u0458\u0003\u0002\u0002\u0002\u0445",
"\u0446\u0007N\u0002\u0002\u0446\u0447\u0007)\u0002\u0002\u0447\u0448",
"\u0003\u0002\u0002\u0002\u0448\u0449\u0005\u0111\u0089\u0002\u0449\u044a",
"\u0007)\u0002\u0002\u044a\u0458\u0003\u0002\u0002\u0002\u044b\u044c",
"\u0007w\u0002\u0002\u044c\u044d\u0007)\u0002\u0002\u044d\u044e\u0003",
"\u0002\u0002\u0002\u044e\u044f\u0005\u0111\u0089\u0002\u044f\u0450\u0007",
")\u0002\u0002\u0450\u0458\u0003\u0002\u0002\u0002\u0451\u0452\u0007",
"W\u0002\u0002\u0452\u0453\u0007)\u0002\u0002\u0453\u0454\u0003\u0002",
"\u0002\u0002\u0454\u0455\u0005\u0111\u0089\u0002\u0455\u0456\u0007)",
"\u0002\u0002\u0456\u0458\u0003\u0002\u0002\u0002\u0457\u0441\u0003\u0002",
"\u0002\u0002\u0457\u0445\u0003\u0002\u0002\u0002\u0457\u044b\u0003\u0002",
"\u0002\u0002\u0457\u0451\u0003\u0002\u0002\u0002\u0458\u0110\u0003\u0002",
"\u0002\u0002\u0459\u045b\u0005\u0113\u008a\u0002\u045a\u0459\u0003\u0002",
"\u0002\u0002\u045b\u045c\u0003\u0002\u0002\u0002\u045c\u045a\u0003\u0002",
"\u0002\u0002\u045c\u045d\u0003\u0002\u0002\u0002\u045d\u0112\u0003\u0002",
"\u0002\u0002\u045e\u0461\n\f\u0002\u0002\u045f\u0461\u0005\u0115\u008b",
"\u0002\u0460\u045e\u0003\u0002\u0002\u0002\u0460\u045f\u0003\u0002\u0002",
"\u0002\u0461\u0114\u0003\u0002\u0002\u0002\u0462\u0467\u0005\u0117\u008c",
"\u0002\u0463\u0467\u0005\u0119\u008d\u0002\u0464\u0467\u0005\u011b\u008e",
"\u0002\u0465\u0467\u0005\u00dbn\u0002\u0466\u0462\u0003\u0002\u0002",
"\u0002\u0466\u0463\u0003\u0002\u0002\u0002\u0466\u0464\u0003\u0002\u0002",
"\u0002\u0466\u0465\u0003\u0002\u0002\u0002\u0467\u0116\u0003\u0002\u0002",
"\u0002\u0468\u0469\u0007^\u0002\u0002\u0469\u046a\t\r\u0002\u0002\u046a",
"\u0118\u0003\u0002\u0002\u0002\u046b\u046c\u0007^\u0002\u0002\u046c",
"\u0477\u0005\u00edw\u0002\u046d\u046e\u0007^\u0002\u0002\u046e\u046f",
"\u0005\u00edw\u0002\u046f\u0470\u0005\u00edw\u0002\u0470\u0477\u0003",
"\u0002\u0002\u0002\u0471\u0472\u0007^\u0002\u0002\u0472\u0473\u0005",
"\u00edw\u0002\u0473\u0474\u0005\u00edw\u0002\u0474\u0475\u0005\u00ed",
"w\u0002\u0475\u0477\u0003\u0002\u0002\u0002\u0476\u046b\u0003\u0002",
"\u0002\u0002\u0476\u046d\u0003\u0002\u0002\u0002\u0476\u0471\u0003\u0002",
"\u0002\u0002\u0477\u011a\u0003\u0002\u0002\u0002\u0478\u0479\u0007^",
"\u0002\u0002\u0479\u047a\u0007z\u0002\u0002\u047a\u047c\u0003\u0002",
"\u0002\u0002\u047b\u047d\u0005\u00efx\u0002\u047c\u047b\u0003\u0002",
"\u0002\u0002\u047d\u047e\u0003\u0002\u0002\u0002\u047e\u047c\u0003\u0002",
"\u0002\u0002\u047e\u047f\u0003\u0002\u0002\u0002\u047f\u011c\u0003\u0002",
"\u0002\u0002\u0480\u0482\u0005\u011f\u0090\u0002\u0481\u0480\u0003\u0002",
"\u0002\u0002\u0481\u0482\u0003\u0002\u0002\u0002\u0482\u0483\u0003\u0002",
"\u0002\u0002\u0483\u0485\u0007$\u0002\u0002\u0484\u0486\u0005\u0121",
"\u0091\u0002\u0485\u0484\u0003\u0002\u0002\u0002\u0485\u0486\u0003\u0002",
"\u0002\u0002\u0486\u0487\u0003\u0002\u0002\u0002\u0487\u0488\u0007$",
"\u0002\u0002\u0488\u011e\u0003\u0002\u0002\u0002\u0489\u048a\u0007w",
"\u0002\u0002\u048a\u048d\u0007:\u0002\u0002\u048b\u048d\t\u000e\u0002",
"\u0002\u048c\u0489\u0003\u0002\u0002\u0002\u048c\u048b\u0003\u0002\u0002",
"\u0002\u048d\u0120\u0003\u0002\u0002\u0002\u048e\u0490\u0005\u0123\u0092",
"\u0002\u048f\u048e\u0003\u0002\u0002\u0002\u0490\u0491\u0003\u0002\u0002",
"\u0002\u0491\u048f\u0003\u0002\u0002\u0002\u0491\u0492\u0003\u0002\u0002",
"\u0002\u0492\u0122\u0003\u0002\u0002\u0002\u0493\u0496\n\u000f\u0002",
"\u0002\u0494\u0496\u0005\u0115\u008b\u0002\u0495\u0493\u0003\u0002\u0002",
"\u0002\u0495\u0494\u0003\u0002\u0002\u0002\u0496\u0124\u0003\u0002\u0002",
"\u0002\u0497\u049b\u0007%\u0002\u0002\u0498\u049a\t\u0010\u0002\u0002",
"\u0499\u0498\u0003\u0002\u0002\u0002\u049a\u049d\u0003\u0002\u0002\u0002",
"\u049b\u049c\u0003\u0002\u0002\u0002\u049b\u0499\u0003\u0002\u0002\u0002",
"\u049c\u04a1\u0003\u0002\u0002\u0002\u049d\u049b\u0003\u0002\u0002\u0002",
"\u049e\u04a0\n\u0011\u0002\u0002\u049f\u049e\u0003\u0002\u0002\u0002",
"\u04a0\u04a3\u0003\u0002\u0002\u0002\u04a1\u049f\u0003\u0002\u0002\u0002",
"\u04a1\u04a2\u0003\u0002\u0002\u0002\u04a2\u04a4\u0003\u0002\u0002\u0002",
"\u04a3\u04a1\u0003\u0002\u0002\u0002\u04a4\u04a5\b\u0093\u0002\u0002",
"\u04a5\u0126\u0003\u0002\u0002\u0002\u04a6\u04a8\t\u0012\u0002\u0002",
"\u04a7\u04a6\u0003\u0002\u0002\u0002\u04a8\u04a9\u0003\u0002\u0002\u0002",
"\u04a9\u04a7\u0003\u0002\u0002\u0002\u04a9\u04aa\u0003\u0002\u0002\u0002",
"\u04aa\u04ab\u0003\u0002\u0002\u0002\u04ab\u04ac\b\u0094\u0002\u0002",
"\u04ac\u0128\u0003\u0002\u0002\u0002\u04ad\u04af\u0007\u000f\u0002\u0002",
"\u04ae\u04b0\u0007\f\u0002\u0002\u04af\u04ae\u0003\u0002\u0002\u0002",
"\u04af\u04b0\u0003\u0002\u0002\u0002\u04b0\u04b3\u0003\u0002\u0002\u0002",
"\u04b1\u04b3\u0007\f\u0002\u0002\u04b2\u04ad\u0003\u0002\u0002\u0002",
"\u04b2\u04b1\u0003\u0002\u0002\u0002\u04b3\u04b4\u0003\u0002\u0002\u0002",
"\u04b4\u04b5\b\u0095\u0002\u0002\u04b5\u012a\u0003\u0002\u0002\u0002",
"\u04b6\u04b7\u00071\u0002\u0002\u04b7\u04b8\u0007,\u0002\u0002\u04b8",
"\u04bc\u0003\u0002\u0002\u0002\u04b9\u04bb\u000b\u0002\u0002\u0002\u04ba",
"\u04b9\u0003\u0002\u0002\u0002\u04bb\u04be\u0003\u0002\u0002\u0002\u04bc",
"\u04bd\u0003\u0002\u0002\u0002\u04bc\u04ba\u0003\u0002\u0002\u0002\u04bd",
"\u04bf\u0003\u0002\u0002\u0002\u04be\u04bc\u0003\u0002\u0002\u0002\u04bf",
"\u04c0\u0007,\u0002\u0002\u04c0\u04c1\u00071\u0002\u0002\u04c1\u04c2",
"\u0003\u0002\u0002\u0002\u04c2\u04c3\b\u0096\u0002\u0002\u04c3\u012c",
"\u0003\u0002\u0002\u0002\u04c4\u04c5\u00071\u0002\u0002\u04c5\u04c6",
"\u00071\u0002\u0002\u04c6\u04ca\u0003\u0002\u0002\u0002\u04c7\u04c9",
"\n\u0011\u0002\u0002\u04c8\u04c7\u0003\u0002\u0002\u0002\u04c9\u04cc",
"\u0003\u0002\u0002\u0002\u04ca\u04c8\u0003\u0002\u0002\u0002\u04ca\u04cb",
"\u0003\u0002\u0002\u0002\u04cb\u04cd\u0003\u0002\u0002\u0002\u04cc\u04ca",
"\u0003\u0002\u0002\u0002\u04cd\u04ce\b\u0097\u0002\u0002\u04ce\u012e",
"\u0003\u0002\u0002\u0002:\u0002\u037e\u0380\u0385\u0395\u039f\u03a3",
"\u03a7\u03ab\u03ad\u03b3\u03ba\u03c1\u03ce\u03d5\u03d9\u03db\u03e5\u03e9",
"\u03ed\u03f0\u03f5\u03f7\u03fd\u0403\u0405\u0408\u040f\u0413\u0418\u041b",
"\u0422\u0425\u042c\u0430\u0435\u0438\u043d\u0457\u045c\u0460\u0466\u0476",
"\u047e\u0481\u0485\u048c\u0491\u0495\u049b\u04a1\u04a9\u04af\u04b2\u04bc",
"\u04ca\u0003\b\u0002\u0002"].join("");
var atn = new antlr4.atn.ATNDeserializer().deserialize(serializedATN);
var decisionsToDFA = atn.decisionToState.map( function(ds, index) { return new antlr4.dfa.DFA(ds, index); });
function CLexer(input) {
antlr4.Lexer.call(this, input);
this._interp = new antlr4.atn.LexerATNSimulator(this, atn, decisionsToDFA, new antlr4.PredictionContextCache());
return this;
}
CLexer.prototype = Object.create(antlr4.Lexer.prototype);
CLexer.prototype.constructor = CLexer;
Object.defineProperty(CLexer.prototype, "atn", {
get : function() {
return atn;
}
});
CLexer.EOF = antlr4.Token.EOF;
CLexer.T__0 = 1;
CLexer.T__1 = 2;
CLexer.T__2 = 3;
CLexer.T__3 = 4;
CLexer.T__4 = 5;
CLexer.T__5 = 6;
CLexer.T__6 = 7;
CLexer.T__7 = 8;
CLexer.T__8 = 9;
CLexer.T__9 = 10;
CLexer.T__10 = 11;
CLexer.T__11 = 12;
CLexer.T__12 = 13;
CLexer.T__13 = 14;
CLexer.Auto = 15;
CLexer.Break = 16;
CLexer.Case = 17;
CLexer.Char = 18;
CLexer.Const = 19;
CLexer.Continue = 20;
CLexer.Default = 21;
CLexer.Do = 22;
CLexer.Double = 23;
CLexer.Else = 24;
CLexer.Enum = 25;
CLexer.Extern = 26;
CLexer.Float = 27;
CLexer.For = 28;
CLexer.Goto = 29;
CLexer.If = 30;
CLexer.Inline = 31;
CLexer.Int = 32;
CLexer.Long = 33;
CLexer.Register = 34;
CLexer.Restrict = 35;
CLexer.Return = 36;
CLexer.Short = 37;
CLexer.Signed = 38;
CLexer.Sizeof = 39;
CLexer.Static = 40;
CLexer.Struct = 41;
CLexer.Switch = 42;
CLexer.Typedef = 43;
CLexer.Union = 44;
CLexer.Unsigned = 45;
CLexer.Void = 46;
CLexer.Volatile = 47;
CLexer.While = 48;
CLexer.Alignas = 49;
CLexer.Alignof = 50;
CLexer.Atomic = 51;
CLexer.Bool = 52;
CLexer.Complex = 53;
CLexer.Generic = 54;
CLexer.Imaginary = 55;
CLexer.Noreturn = 56;
CLexer.StaticAssert = 57;
CLexer.ThreadLocal = 58;
CLexer.LeftParen = 59;
CLexer.RightParen = 60;
CLexer.LeftBracket = 61;
CLexer.RightBracket = 62;
CLexer.LeftBrace = 63;
CLexer.RightBrace = 64;
CLexer.Less = 65;
CLexer.LessEqual = 66;
CLexer.Greater = 67;
CLexer.GreaterEqual = 68;
CLexer.LeftShift = 69;
CLexer.RightShift = 70;
CLexer.Plus = 71;
CLexer.PlusPlus = 72;
CLexer.Minus = 73;
CLexer.MinusMinus = 74;
CLexer.Star = 75;
CLexer.Div = 76;
CLexer.Mod = 77;
CLexer.And = 78;
CLexer.Or = 79;
CLexer.AndAnd = 80;
CLexer.OrOr = 81;
CLexer.Caret = 82;
CLexer.Not = 83;
CLexer.Tilde = 84;
CLexer.Question = 85;
CLexer.Colon = 86;
CLexer.Semi = 87;
CLexer.Comma = 88;
CLexer.Assign = 89;
CLexer.StarAssign = 90;
CLexer.DivAssign = 91;
CLexer.ModAssign = 92;
CLexer.PlusAssign = 93;
CLexer.MinusAssign = 94;
CLexer.LeftShiftAssign = 95;
CLexer.RightShiftAssign = 96;
CLexer.AndAssign = 97;
CLexer.XorAssign = 98;
CLexer.OrAssign = 99;
CLexer.Equal = 100;
CLexer.NotEqual = 101;
CLexer.Arrow = 102;
CLexer.Dot = 103;
CLexer.Ellipsis = 104;
CLexer.Identifier = 105;
CLexer.Constant = 106;
CLexer.StringLiteral = 107;
CLexer.Directive = 108;
CLexer.Whitespace = 109;
CLexer.Newline = 110;
CLexer.BlockComment = 111;
CLexer.LineComment = 112;
CLexer.prototype.channelNames = [ "DEFAULT_TOKEN_CHANNEL", "HIDDEN" ];
CLexer.prototype.modeNames = [ "DEFAULT_MODE" ];
CLexer.prototype.literalNames = [ null, "'__extension__'", "'__builtin_va_arg'",
"'__builtin_offsetof'", "'__m128'", "'__m128d'",
"'__m128i'", "'__typeof__'", "'__inline__'",
"'__stdcall'", "'__declspec'", "'__asm'",
"'__attribute__'", "'__asm__'", "'__volatile__'",
"'auto'", "'break'", "'case'", "'char'",
"'const'", "'continue'", "'default'",
"'do'", "'double'", "'else'", "'enum'",
"'extern'", "'float'", "'for'", "'goto'",
"'if'", "'inline'", "'int'", "'long'",
"'register'", "'restrict'", "'return'",
"'short'", "'signed'", "'sizeof'", "'static'",
"'struct'", "'switch'", "'typedef'", "'union'",
"'unsigned'", "'void'", "'volatile'",
"'while'", "'_Alignas'", "'_Alignof'",
"'_Atomic'", "'_Bool'", "'_Complex'",
"'_Generic'", "'_Imaginary'", "'_Noreturn'",
"'_Static_assert'", "'_Thread_local'",
"'('", "')'", "'['", "']'", "'{'", "'}'",
"'<'", "'<='", "'>'", "'>='", "'<<'",
"'>>'", "'+'", "'++'", "'-'", "'--'",
"'*'", "'/'", "'%'", "'&'", "'|'", "'&&'",
"'||'", "'^'", "'!'", "'~'", "'?'", "':'",
"';'", "','", "'='", "'*='", "'/='", "'%='",
"'+='", "'-='", "'<<='", "'>>='", "'&='",
"'^='", "'|='", "'=='", "'!='", "'->'",
"'.'", "'...'" ];
CLexer.prototype.symbolicNames = [ null, null, null, null, null, null, null,
null, null, null, null, null, null, null,
null, "Auto", "Break", "Case", "Char",
"Const", "Continue", "Default", "Do",
"Double", "Else", "Enum", "Extern", "Float",
"For", "Goto", "If", "Inline", "Int",
"Long", "Register", "Restrict", "Return",
"Short", "Signed", "Sizeof", "Static",
"Struct", "Switch", "Typedef", "Union",
"Unsigned", "Void", "Volatile", "While",
"Alignas", "Alignof", "Atomic", "Bool",
"Complex", "Generic", "Imaginary", "Noreturn",
"StaticAssert", "ThreadLocal", "LeftParen",
"RightParen", "LeftBracket", "RightBracket",
"LeftBrace", "RightBrace", "Less", "LessEqual",
"Greater", "GreaterEqual", "LeftShift",
"RightShift", "Plus", "PlusPlus", "Minus",
"MinusMinus", "Star", "Div", "Mod", "And",
"Or", "AndAnd", "OrOr", "Caret", "Not",
"Tilde", "Question", "Colon", "Semi",
"Comma", "Assign", "StarAssign", "DivAssign",
"ModAssign", "PlusAssign", "MinusAssign",
"LeftShiftAssign", "RightShiftAssign",
"AndAssign", "XorAssign", "OrAssign",
"Equal", "NotEqual", "Arrow", "Dot",
"Ellipsis", "Identifier", "Constant",
"StringLiteral", "Directive", "Whitespace",
"Newline", "BlockComment", "LineComment" ];
CLexer.prototype.ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5",
"T__6", "T__7", "T__8", "T__9", "T__10",
"T__11", "T__12", "T__13", "Auto", "Break",
"Case", "Char", "Const", "Continue", "Default",
"Do", "Double", "Else", "Enum", "Extern",
"Float", "For", "Goto", "If", "Inline", "Int",
"Long", "Register", "Restrict", "Return",
"Short", "Signed", "Sizeof", "Static", "Struct",
"Switch", "Typedef", "Union", "Unsigned",
"Void", "Volatile", "While", "Alignas", "Alignof",
"Atomic", "Bool", "Complex", "Generic", "Imaginary",
"Noreturn", "StaticAssert", "ThreadLocal",
"LeftParen", "RightParen", "LeftBracket",
"RightBracket", "LeftBrace", "RightBrace",
"Less", "LessEqual", "Greater", "GreaterEqual",
"LeftShift", "RightShift", "Plus", "PlusPlus",
"Minus", "MinusMinus", "Star", "Div", "Mod",
"And", "Or", "AndAnd", "OrOr", "Caret", "Not",
"Tilde", "Question", "Colon", "Semi", "Comma",
"Assign", "StarAssign", "DivAssign", "ModAssign",
"PlusAssign", "MinusAssign", "LeftShiftAssign",
"RightShiftAssign", "AndAssign", "XorAssign",
"OrAssign", "Equal", "NotEqual", "Arrow",
"Dot", "Ellipsis", "Identifier", "IdentifierNondigit",
"Nondigit", "Digit", "UniversalCharacterName",
"HexQuad", "Constant", "IntegerConstant",
"DecimalConstant", "OctalConstant", "HexadecimalConstant",
"HexadecimalPrefix", "NonzeroDigit", "OctalDigit",
"HexadecimalDigit", "IntegerSuffix", "UnsignedSuffix",
"LongSuffix", "LongLongSuffix", "FloatingConstant",
"DecimalFloatingConstant", "HexadecimalFloatingConstant",
"FractionalConstant", "ExponentPart", "Sign",
"DigitSequence", "HexadecimalFractionalConstant",
"BinaryExponentPart", "HexadecimalDigitSequence",
"FloatingSuffix", "CharacterConstant", "CCharSequence",
"CChar", "EscapeSequence", "SimpleEscapeSequence",
"OctalEscapeSequence", "HexadecimalEscapeSequence",
"StringLiteral", "EncodingPrefix", "SCharSequence",
"SChar", "Directive", "Whitespace", "Newline",
"BlockComment", "LineComment" ];
CLexer.prototype.grammarFileName = "C.g4";
exports.CLexer = CLexer;
},{"antlr4/index":47}],3:[function(require,module,exports){
var antlr4 = require('antlr4/index');
function CListener() {
antlr4.tree.ParseTreeListener.call(this);
return this;
}
CListener.prototype = Object.create(antlr4.tree.ParseTreeListener.prototype);
CListener.prototype.constructor = CListener;
CListener.prototype.enterPrimaryExpression = function(ctx) {
};
CListener.prototype.exitPrimaryExpression = function(ctx) {
};
CListener.prototype.enterGenericSelection = function(ctx) {
};
CListener.prototype.exitGenericSelection = function(ctx) {
};
CListener.prototype.enterGenericAssocList = function(ctx) {
};
CListener.prototype.exitGenericAssocList = function(ctx) {
};
CListener.prototype.enterGenericAssociation = function(ctx) {
};
CListener.prototype.exitGenericAssociation = function(ctx) {
};
CListener.prototype.enterPostfixExpression = function(ctx) {
};
CListener.prototype.exitPostfixExpression = function(ctx) {
};
CListener.prototype.enterArgumentExpressionList = function(ctx) {
};
CListener.prototype.exitArgumentExpressionList = function(ctx) {
};
CListener.prototype.enterUnaryExpression = function(ctx) {
};
CListener.prototype.exitUnaryExpression = function(ctx) {
};
CListener.prototype.enterTypeNameOrExpression = function(ctx) {
};
CListener.prototype.exitTypeNameOrExpression = function(ctx) {
};
CListener.prototype.enterUnaryOperator = function(ctx) {
};
CListener.prototype.exitUnaryOperator = function(ctx) {
};
CListener.prototype.enterCastExpression = function(ctx) {
};
CListener.prototype.exitCastExpression = function(ctx) {
};
CListener.prototype.enterMultiplicativeExpression = function(ctx) {
};
CListener.prototype.exitMultiplicativeExpression = function(ctx) {
};
CListener.prototype.enterAdditiveExpression = function(ctx) {
};
CListener.prototype.exitAdditiveExpression = function(ctx) {
};
CListener.prototype.enterShiftExpression = function(ctx) {
};
CListener.prototype.exitShiftExpression = function(ctx) {
};
CListener.prototype.enterRelationalExpression = function(ctx) {
};
CListener.prototype.exitRelationalExpression = function(ctx) {
};
CListener.prototype.enterEqualityExpression = function(ctx) {
};
CListener.prototype.exitEqualityExpression = function(ctx) {
};
CListener.prototype.enterAndExpression = function(ctx) {
};
CListener.prototype.exitAndExpression = function(ctx) {
};
CListener.prototype.enterExclusiveOrExpression = function(ctx) {
};
CListener.prototype.exitExclusiveOrExpression = function(ctx) {
};
CListener.prototype.enterInclusiveOrExpression = function(ctx) {
};
CListener.prototype.exitInclusiveOrExpression = function(ctx) {
};
CListener.prototype.enterLogicalAndExpression = function(ctx) {
};
CListener.prototype.exitLogicalAndExpression = function(ctx) {
};
CListener.prototype.enterLogicalOrExpression = function(ctx) {
};
CListener.prototype.exitLogicalOrExpression = function(ctx) {
};
CListener.prototype.enterConditionalExpression = function(ctx) {
};
CListener.prototype.exitConditionalExpression = function(ctx) {
};
CListener.prototype.enterAssignmentExpression = function(ctx) {
};
CListener.prototype.exitAssignmentExpression = function(ctx) {
};
CListener.prototype.enterAssignmentOperator = function(ctx) {
};
CListener.prototype.exitAssignmentOperator = function(ctx) {
};
CListener.prototype.enterExpression = function(ctx) {
};
CListener.prototype.exitExpression = function(ctx) {
};
CListener.prototype.enterConstantExpression = function(ctx) {
};
CListener.prototype.exitConstantExpression = function(ctx) {
};
CListener.prototype.enterDeclaration = function(ctx) {
};
CListener.prototype.exitDeclaration = function(ctx) {
};
CListener.prototype.enterSpecialFunctionDeclaration = function(ctx) {
};
CListener.prototype.exitSpecialFunctionDeclaration = function(ctx) {
};
CListener.prototype.enterDeclarationSpecifiers = function(ctx) {
};
CListener.prototype.exitDeclarationSpecifiers = function(ctx) {
};
CListener.prototype.enterDeclarationSpecifiers2 = function(ctx) {
};
CListener.prototype.exitDeclarationSpecifiers2 = function(ctx) {
};
CListener.prototype.enterDeclarationSpecifier = function(ctx) {
};
CListener.prototype.exitDeclarationSpecifier = function(ctx) {
};
CListener.prototype.enterInitDeclaratorList = function(ctx) {
};
CListener.prototype.exitInitDeclaratorList = function(ctx) {
};
CListener.prototype.enterInitDeclarator = function(ctx) {
};
CListener.prototype.exitInitDeclarator = function(ctx) {
};
CListener.prototype.enterStorageClassSpecifier = function(ctx) {
};
CListener.prototype.exitStorageClassSpecifier = function(ctx) {
};
CListener.prototype.enterTypeSpecifier = function(ctx) {
};
CListener.prototype.exitTypeSpecifier = function(ctx) {
};
CListener.prototype.enterStructOrUnionSpecifier = function(ctx) {
};
CListener.prototype.exitStructOrUnionSpecifier = function(ctx) {
};
CListener.prototype.enterStructOrUnion = function(ctx) {
};
CListener.prototype.exitStructOrUnion = function(ctx) {
};
CListener.prototype.enterStructDeclarationsBlock = function(ctx) {
};
CListener.prototype.exitStructDeclarationsBlock = function(ctx) {
};
CListener.prototype.enterStructDeclarationList = function(ctx) {
};
CListener.prototype.exitStructDeclarationList = function(ctx) {
};
CListener.prototype.enterStructDeclaration = function(ctx) {
};
CListener.prototype.exitStructDeclaration = function(ctx) {
};
CListener.prototype.enterSpecifierQualifierList = function(ctx) {
};
CListener.prototype.exitSpecifierQualifierList = function(ctx) {
};
CListener.prototype.enterStructDeclaratorList = function(ctx) {
};
CListener.prototype.exitStructDeclaratorList = function(ctx) {
};
CListener.prototype.enterStructDeclarator = function(ctx) {
};
CListener.prototype.exitStructDeclarator = function(ctx) {
};
CListener.prototype.enterEnumSpecifier = function(ctx) {
};
CListener.prototype.exitEnumSpecifier = function(ctx) {
};
CListener.prototype.enterEnumeratorList = function(ctx) {
};
CListener.prototype.exitEnumeratorList = function(ctx) {
};
CListener.prototype.enterEnumerator = function(ctx) {
};
CListener.prototype.exitEnumerator = function(ctx) {
};
CListener.prototype.enterEnumerationConstant = function(ctx) {
};
CListener.prototype.exitEnumerationConstant = function(ctx) {
};
CListener.prototype.enterAtomicTypeSpecifier = function(ctx) {
};
CListener.prototype.exitAtomicTypeSpecifier = function(ctx) {
};
CListener.prototype.enterTypeQualifier = function(ctx) {
};
CListener.prototype.exitTypeQualifier = function(ctx) {
};
CListener.prototype.enterFunctionSpecifier = function(ctx) {
};
CListener.prototype.exitFunctionSpecifier = function(ctx) {
};
CListener.prototype.enterAlignmentSpecifier = function(ctx) {
};
CListener.prototype.exitAlignmentSpecifier = function(ctx) {
};
CListener.prototype.enterDeclarator = function(ctx) {
};
CListener.prototype.exitDeclarator = function(ctx) {
};
CListener.prototype.enterPointerDeclarator = function(ctx) {
};
CListener.prototype.exitPointerDeclarator = function(ctx) {
};
CListener.prototype.enterDirectDeclarator = function(ctx) {
};
CListener.prototype.exitDirectDeclarator = function(ctx) {
};
CListener.prototype.enterGccDeclaratorExtension = function(ctx) {
};
CListener.prototype.exitGccDeclaratorExtension = function(ctx) {
};
CListener.prototype.enterGccAttributeSpecifier = function(ctx) {
};
CListener.prototype.exitGccAttributeSpecifier = function(ctx) {
};
CListener.prototype.enterGccAttributeList = function(ctx) {
};
CListener.prototype.exitGccAttributeList = function(ctx) {
};
CListener.prototype.enterGccAttribute = function(ctx) {
};
CListener.prototype.exitGccAttribute = function(ctx) {
};
CListener.prototype.enterNestedParenthesesBlock = function(ctx) {
};
CListener.prototype.exitNestedParenthesesBlock = function(ctx) {
};
CListener.prototype.enterPointer = function(ctx) {
};
CListener.prototype.exitPointer = function(ctx) {
};
CListener.prototype.enterTypeQualifierList = function(ctx) {
};
CListener.prototype.exitTypeQualifierList = function(ctx) {
};
CListener.prototype.enterParameterTypeList = function(ctx) {
};
CListener.prototype.exitParameterTypeList = function(ctx) {
};
CListener.prototype.enterParameterList = function(ctx) {
};
CListener.prototype.exitParameterList = function(ctx) {
};
CListener.prototype.enterParameterDeclaration = function(ctx) {
};
CListener.prototype.exitParameterDeclaration = function(ctx) {
};
CListener.prototype.enterIdentifierList = function(ctx) {
};
CListener.prototype.exitIdentifierList = function(ctx) {
};
CListener.prototype.enterTypeName = function(ctx) {
};
CListener.prototype.exitTypeName = function(ctx) {
};
CListener.prototype.enterAbstractDeclarator = function(ctx) {
};
CListener.prototype.exitAbstractDeclarator = function(ctx) {
};
CListener.prototype.enterDirectAbstractDeclarator = function(ctx) {
};
CListener.prototype.exitDirectAbstractDeclarator = function(ctx) {
};
CListener.prototype.enterTypedefName = function(ctx) {
};
CListener.prototype.exitTypedefName = function(ctx) {
};
CListener.prototype.enterInitializer = function(ctx) {
};
CListener.prototype.exitInitializer = function(ctx) {
};
CListener.prototype.enterInitializerList = function(ctx) {
};
CListener.prototype.exitInitializerList = function(ctx) {
};
CListener.prototype.enterDesignation = function(ctx) {
};
CListener.prototype.exitDesignation = function(ctx) {
};
CListener.prototype.enterDesignatorList = function(ctx) {
};
CListener.prototype.exitDesignatorList = function(ctx) {
};
CListener.prototype.enterDesignator = function(ctx) {
};
CListener.prototype.exitDesignator = function(ctx) {
};
CListener.prototype.enterStaticAssertDeclaration = function(ctx) {
};
CListener.prototype.exitStaticAssertDeclaration = function(ctx) {
};
CListener.prototype.enterStatement = function(ctx) {
};
CListener.prototype.exitStatement = function(ctx) {
};
CListener.prototype.enterLabeledStatement = function(ctx) {
};
CListener.prototype.exitLabeledStatement = function(ctx) {
};
CListener.prototype.enterSwitchLabel = function(ctx) {
};
CListener.prototype.exitSwitchLabel = function(ctx) {
};
CListener.prototype.enterCompoundStatement = function(ctx) {
};
CListener.prototype.exitCompoundStatement = function(ctx) {
};
CListener.prototype.enterBlockItemList = function(ctx) {
};
CListener.prototype.exitBlockItemList = function(ctx) {
};
CListener.prototype.enterBlockItem = function(ctx) {
};
CListener.prototype.exitBlockItem = function(ctx) {
};
CListener.prototype.enterSpecialMethodCall = function(ctx) {
};
CListener.prototype.exitSpecialMethodCall = function(ctx) {
};
CListener.prototype.enterExpressionStatement = function(ctx) {
};
CListener.prototype.exitExpressionStatement = function(ctx) {
};
CListener.prototype.enterSelectionStatement = function(ctx) {
};
CListener.prototype.exitSelectionStatement = function(ctx) {
};
CListener.prototype.enterSwitchCase = function(ctx) {
};
CListener.prototype.exitSwitchCase = function(ctx) {
};
CListener.prototype.enterSwitchBlockItemList = function(ctx) {
};
CListener.prototype.exitSwitchBlockItemList = function(ctx) {
};
CListener.prototype.enterSwitchCaseList = function(ctx) {
};
CListener.prototype.exitSwitchCaseList = function(ctx) {
};
CListener.prototype.enterSwitchCompoundStatement = function(ctx) {
};
CListener.prototype.exitSwitchCompoundStatement = function(ctx) {
};
CListener.prototype.enterIterationStatement = function(ctx) {
};
CListener.prototype.exitIterationStatement = function(ctx) {
};
CListener.prototype.enterJumpStatement = function(ctx) {
};
CListener.prototype.exitJumpStatement = function(ctx) {
};
CListener.prototype.enterCompilationUnit = function(ctx) {
};
CListener.prototype.exitCompilationUnit = function(ctx) {
};
CListener.prototype.enterTranslationUnit = function(ctx) {
};
CListener.prototype.exitTranslationUnit = function(ctx) {
};
CListener.prototype.enterExternalDeclaration = function(ctx) {
};
CListener.prototype.exitExternalDeclaration = function(ctx) {
};
CListener.prototype.enterFunctionDefinition = function(ctx) {
};
CListener.prototype.exitFunctionDefinition = function(ctx) {
};
CListener.prototype.enterDeclarationList = function(ctx) {
};
CListener.prototype.exitDeclarationList = function(ctx) {
};
CListener.prototype.enterPrimaryExpression_DropletFile = function(ctx) {
};
CListener.prototype.exitPrimaryExpression_DropletFile = function(ctx) {
};
CListener.prototype.enterGenericSelection_DropletFile = function(ctx) {
};
CListener.prototype.exitGenericSelection_DropletFile = function(ctx) {
};
CListener.prototype.enterGenericAssocList_DropletFile = function(ctx) {
};
CListener.prototype.exitGenericAssocList_DropletFile = function(ctx) {
};
CListener.prototype.enterGenericAssociation_DropletFile = function(ctx) {
};
CListener.prototype.exitGenericAssociation_DropletFile = function(ctx) {
};
CListener.prototype.enterPostfixExpression_DropletFile = function(ctx) {
};
CListener.prototype.exitPostfixExpression_DropletFile = function(ctx) {
};
CListener.prototype.enterArgumentExpressionList_DropletFile = function(ctx) {
};
CListener.prototype.exitArgumentExpressionList_DropletFile = function(ctx) {
};
CListener.prototype.enterUnaryExpression_DropletFile = function(ctx) {
};
CListener.prototype.exitUnaryExpression_DropletFile = function(ctx) {
};
CListener.prototype.enterTypeNameOrExpression_DropletFile = function(ctx) {
};
CListener.prototype.exitTypeNameOrExpression_DropletFile = function(ctx) {
};
CListener.prototype.enterUnaryOperator_DropletFile = function(ctx) {
};
CListener.prototype.exitUnaryOperator_DropletFile = function(ctx) {
};
CListener.prototype.enterCastExpression_DropletFile = function(ctx) {
};
CListener.prototype.exitCastExpression_DropletFile = function(ctx) {
};
CListener.prototype.enterMultiplicativeExpression_DropletFile = function(ctx) {
};
CListener.prototype.exitMultiplicativeExpression_DropletFile = function(ctx) {
};
CListener.prototype.enterAdditiveExpression_DropletFile = function(ctx) {
};
CListener.prototype.exitAdditiveExpression_DropletFile = function(ctx) {
};
CListener.prototype.enterShiftExpression_DropletFile = function(ctx) {
};
CListener.prototype.exitShiftExpression_DropletFile = function(ctx) {
};
CListener.prototype.enterRelationalExpression_DropletFile = function(ctx) {
};
CListener.prototype.exitRelationalExpression_DropletFile = function(ctx) {
};
CListener.prototype.enterEqualityExpression_DropletFile = function(ctx) {
};
CListener.prototype.exitEqualityExpression_DropletFile = function(ctx) {
};
CListener.prototype.enterAndExpression_DropletFile = function(ctx) {
};
CListener.prototype.exitAndExpression_DropletFile = function(ctx) {
};
CListener.prototype.enterExclusiveOrExpression_DropletFile = function(ctx) {
};
CListener.prototype.exitExclusiveOrExpression_DropletFile = function(ctx) {
};
CListener.prototype.enterInclusiveOrExpression_DropletFile = function(ctx) {
};
CListener.prototype.exitInclusiveOrExpression_DropletFile = function(ctx) {
};
CListener.prototype.enterLogicalAndExpression_DropletFile = function(ctx) {
};
CListener.prototype.exitLogicalAndExpression_DropletFile = function(ctx) {
};
CListener.prototype.enterLogicalOrExpression_DropletFile = function(ctx) {
};
CListener.prototype.exitLogicalOrExpression_DropletFile = function(ctx) {
};
CListener.prototype.enterConditionalExpression_DropletFile = function(ctx) {
};
CListener.prototype.exitConditionalExpression_DropletFile = function(ctx) {
};
CListener.prototype.enterAssignmentExpression_DropletFile = function(ctx) {
};
CListener.prototype.exitAssignmentExpression_DropletFile = function(ctx) {
};
CListener.prototype.enterAssignmentOperator_DropletFile = function(ctx) {
};
CListener.prototype.exitAssignmentOperator_DropletFile = function(ctx) {
};
CListener.prototype.enterExpression_DropletFile = function(ctx) {
};
CListener.prototype.exitExpression_DropletFile = function(ctx) {
};
CListener.prototype.enterConstantExpression_DropletFile = function(ctx) {
};
CListener.prototype.exitConstantExpression_DropletFile = function(ctx) {
};
CListener.prototype.enterDeclaration_DropletFile = function(ctx) {
};
CListener.prototype.exitDeclaration_DropletFile = function(ctx) {
};
CListener.prototype.enterSpecialFunctionDeclaration_DropletFile = function(ctx) {
};
CListener.prototype.exitSpecialFunctionDeclaration_DropletFile = function(ctx) {
};
CListener.prototype.enterDeclarationSpecifiers_DropletFile = function(ctx) {
};
CListener.prototype.exitDeclarationSpecifiers_DropletFile = function(ctx) {
};
CListener.prototype.enterDeclarationSpecifiers2_DropletFile = function(ctx) {
};
CListener.prototype.exitDeclarationSpecifiers2_DropletFile = function(ctx) {
};
CListener.prototype.enterDeclarationSpecifier_DropletFile = function(ctx) {
};
CListener.prototype.exitDeclarationSpecifier_DropletFile = function(ctx) {
};
CListener.prototype.enterInitDeclaratorList_DropletFile = function(ctx) {
};
CListener.prototype.exitInitDeclaratorList_DropletFile = function(ctx) {
};
CListener.prototype.enterInitDeclarator_DropletFile = function(ctx) {
};
CListener.prototype.exitInitDeclarator_DropletFile = function(ctx) {
};
CListener.prototype.enterStorageClassSpecifier_DropletFile = function(ctx) {
};
CListener.prototype.exitStorageClassSpecifier_DropletFile = function(ctx) {
};
CListener.prototype.enterTypeSpecifier_DropletFile = function(ctx) {
};
CListener.prototype.exitTypeSpecifier_DropletFile = function(ctx) {
};
CListener.prototype.enterStructOrUnionSpecifier_DropletFile = function(ctx) {
};
CListener.prototype.exitStructOrUnionSpecifier_DropletFile = function(ctx) {
};
CListener.prototype.enterStructOrUnion_DropletFile = function(ctx) {
};
CListener.prototype.exitStructOrUnion_DropletFile = function(ctx) {
};
CListener.prototype.enterStructDeclarationsBlock_DropletFile = function(ctx) {
};
CListener.prototype.exitStructDeclarationsBlock_DropletFile = function(ctx) {
};
CListener.prototype.enterStructDeclarationList_DropletFile = function(ctx) {
};
CListener.prototype.exitStructDeclarationList_DropletFile = function(ctx) {
};
CListener.prototype.enterStructDeclaration_DropletFile = function(ctx) {
};
CListener.prototype.exitStructDeclaration_DropletFile = function(ctx) {
};
CListener.prototype.enterSpecifierQualifierList_DropletFile = function(ctx) {
};
CListener.prototype.exitSpecifierQualifierList_DropletFile = function(ctx) {
};
CListener.prototype.enterStructDeclaratorList_DropletFile = function(ctx) {
};
CListener.prototype.exitStructDeclaratorList_DropletFile = function(ctx) {
};
CListener.prototype.enterStructDeclarator_DropletFile = function(ctx) {
};
CListener.prototype.exitStructDeclarator_DropletFile = function(ctx) {
};
CListener.prototype.enterEnumSpecifier_DropletFile = function(ctx) {
};
CListener.prototype.exitEnumSpecifier_DropletFile = function(ctx) {
};
CListener.prototype.enterEnumeratorList_DropletFile = function(ctx) {
};
CListener.prototype.exitEnumeratorList_DropletFile = function(ctx) {
};
CListener.prototype.enterEnumerator_DropletFile = function(ctx) {
};
CListener.prototype.exitEnumerator_DropletFile = function(ctx) {
};
CListener.prototype.enterEnumerationConstant_DropletFile = function(ctx) {
};
CListener.prototype.exitEnumerationConstant_DropletFile = function(ctx) {
};
CListener.prototype.enterAtomicTypeSpecifier_DropletFile = function(ctx) {
};
CListener.prototype.exitAtomicTypeSpecifier_DropletFile = function(ctx) {
};
CListener.prototype.enterTypeQualifier_DropletFile = function(ctx) {
};
CListener.prototype.exitTypeQualifier_DropletFile = function(ctx) {
};
CListener.prototype.enterFunctionSpecifier_DropletFile = function(ctx) {
};
CListener.prototype.exitFunctionSpecifier_DropletFile = function(ctx) {
};
CListener.prototype.enterAlignmentSpecifier_DropletFile = function(ctx) {
};
CListener.prototype.exitAlignmentSpecifier_DropletFile = function(ctx) {
};
CListener.prototype.enterDeclarator_DropletFile = function(ctx) {
};
CListener.prototype.exitDeclarator_DropletFile = function(ctx) {
};
CListener.prototype.enterPointerDeclarator_DropletFile = function(ctx) {
};
CListener.prototype.exitPointerDeclarator_DropletFile = function(ctx) {
};
CListener.prototype.enterDirectDeclarator_DropletFile = function(ctx) {
};
CListener.prototype.exitDirectDeclarator_DropletFile = function(ctx) {
};
CListener.prototype.enterGccDeclaratorExtension_DropletFile = function(ctx) {
};
CListener.prototype.exitGccDeclaratorExtension_DropletFile = function(ctx) {
};
CListener.prototype.enterGccAttributeSpecifier_DropletFile = function(ctx) {
};
CListener.prototype.exitGccAttributeSpecifier_DropletFile = function(ctx) {
};
CListener.prototype.enterGccAttributeList_DropletFile = function(ctx) {
};
CListener.prototype.exitGccAttributeList_DropletFile = function(ctx) {
};
CListener.prototype.enterGccAttribute_DropletFile = function(ctx) {
};
CListener.prototype.exitGccAttribute_DropletFile = function(ctx) {
};
CListener.prototype.enterNestedParenthesesBlock_DropletFile = function(ctx) {
};
CListener.prototype.exitNestedParenthesesBlock_DropletFile = function(ctx) {
};
CListener.prototype.enterPointer_DropletFile = function(ctx) {
};
CListener.prototype.exitPointer_DropletFile = function(ctx) {
};
CListener.prototype.enterTypeQualifierList_DropletFile = function(ctx) {
};
CListener.prototype.exitTypeQualifierList_DropletFile = function(ctx) {
};
CListener.prototype.enterParameterTypeList_DropletFile = function(ctx) {
};
CListener.prototype.exitParameterTypeList_DropletFile = function(ctx) {
};
CListener.prototype.enterParameterList_DropletFile = function(ctx) {
};
CListener.prototype.exitParameterList_DropletFile = function(ctx) {
};
CListener.prototype.enterParameterDeclaration_DropletFile = function(ctx) {
};
CListener.prototype.exitParameterDeclaration_DropletFile = function(ctx) {
};
CListener.prototype.enterIdentifierList_DropletFile = function(ctx) {
};
CListener.prototype.exitIdentifierList_DropletFile = function(ctx) {
};
CListener.prototype.enterTypeName_DropletFile = function(ctx) {
};
CListener.prototype.exitTypeName_DropletFile = function(ctx) {
};
CListener.prototype.enterAbstractDeclarator_DropletFile = function(ctx) {
};
CListener.prototype.exitAbstractDeclarator_DropletFile = function(ctx) {
};
CListener.prototype.enterDirectAbstractDeclarator_DropletFile = function(ctx) {
};
CListener.prototype.exitDirectAbstractDeclarator_DropletFile = function(ctx) {
};
CListener.prototype.enterTypedefName_DropletFile = function(ctx) {
};
CListener.prototype.exitTypedefName_DropletFile = function(ctx) {
};
CListener.prototype.enterInitializer_DropletFile = function(ctx) {
};
CListener.prototype.exitInitializer_DropletFile = function(ctx) {
};
CListener.prototype.enterInitializerList_DropletFile = function(ctx) {
};
CListener.prototype.exitInitializerList_DropletFile = function(ctx) {
};
CListener.prototype.enterDesignation_DropletFile = function(ctx) {
};
CListener.prototype.exitDesignation_DropletFile = function(ctx) {
};
CListener.prototype.enterDesignatorList_DropletFile = function(ctx) {
};
CListener.prototype.exitDesignatorList_DropletFile = function(ctx) {
};
CListener.prototype.enterDesignator_DropletFile = function(ctx) {
};
CListener.prototype.exitDesignator_DropletFile = function(ctx) {
};
CListener.prototype.enterStaticAssertDeclaration_DropletFile = function(ctx) {
};
CListener.prototype.exitStaticAssertDeclaration_DropletFile = function(ctx) {
};
CListener.prototype.enterStatement_DropletFile = function(ctx) {
};
CListener.prototype.exitStatement_DropletFile = function(ctx) {
};
CListener.prototype.enterLabeledStatement_DropletFile = function(ctx) {
};
CListener.prototype.exitLabeledStatement_DropletFile = function(ctx) {
};
CListener.prototype.enterSwitchLabeledStatement_DropletFile = function(ctx) {
};
CListener.prototype.exitSwitchLabeledStatement_DropletFile = function(ctx) {
};
CListener.prototype.enterCompoundStatement_DropletFile = function(ctx) {
};
CListener.prototype.exitCompoundStatement_DropletFile = function(ctx) {
};
CListener.prototype.enterBlockItemList_DropletFile = function(ctx) {
};
CListener.prototype.exitBlockItemList_DropletFile = function(ctx) {
};
CListener.prototype.enterBlockItem_DropletFile = function(ctx) {
};
CListener.prototype.exitBlockItem_DropletFile = function(ctx) {
};
CListener.prototype.enterSpecialMethodCall_DropletFile = function(ctx) {
};
CListener.prototype.exitSpecialMethodCall_DropletFile = function(ctx) {
};
CListener.prototype.enterExpressionStatement_DropletFile = function(ctx) {
};
CListener.prototype.exitExpressionStatement_DropletFile = function(ctx) {
};
CListener.prototype.enterSelectionStatement_DropletFile = function(ctx) {
};
CListener.prototype.exitSelectionStatement_DropletFile = function(ctx) {
};
CListener.prototype.enterSwitchCase_DropletFile = function(ctx) {
};
CListener.prototype.exitSwitchCase_DropletFile = function(ctx) {
};
CListener.prototype.enterSwitchBlockItemList_DropletFile = function(ctx) {
};
CListener.prototype.exitSwitchBlockItemList_DropletFile = function(ctx) {
};
CListener.prototype.enterSwitchCaseList_DropletFile = function(ctx) {
};
CListener.prototype.exitSwitchCaseList_DropletFile = function(ctx) {
};
CListener.prototype.enterSwitchCompoundStatement_DropletFile = function(ctx) {
};
CListener.prototype.exitSwitchCompoundStatement_DropletFile = function(ctx) {
};
CListener.prototype.enterIterationStatement_DropletFile = function(ctx) {
};
CListener.prototype.exitIterationStatement_DropletFile = function(ctx) {
};
CListener.prototype.enterJumpStatement_DropletFile = function(ctx) {
};
CListener.prototype.exitJumpStatement_DropletFile = function(ctx) {
};
CListener.prototype.enterCompilationUnit_DropletFile = function(ctx) {
};
CListener.prototype.exitCompilationUnit_DropletFile = function(ctx) {
};
CListener.prototype.enterTranslationUnit_DropletFile = function(ctx) {
};
CListener.prototype.exitTranslationUnit_DropletFile = function(ctx) {
};
CListener.prototype.enterExternalDeclaration_DropletFile = function(ctx) {
};
CListener.prototype.exitExternalDeclaration_DropletFile = function(ctx) {
};
CListener.prototype.enterFunctionDefinition_DropletFile = function(ctx) {
};
CListener.prototype.exitFunctionDefinition_DropletFile = function(ctx) {
};
CListener.prototype.enterDeclarationList_DropletFile = function(ctx) {
};
CListener.prototype.exitDeclarationList_DropletFile = function(ctx) {
};
exports.CListener = CListener;
},{"antlr4/index":47}],4:[function(require,module,exports){
var antlr4 = require('antlr4/index');
var CListener = require('./CListener').CListener;
var grammarFileName = "C.g4";
var serializedATN = ["\u0003\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964",
"\u0003r\u0b85\u0004\u0002\t\u0002\u0004\u0003\t\u0003\u0004\u0004\t",
"\u0004\u0004\u0005\t\u0005\u0004\u0006\t\u0006\u0004\u0007\t\u0007\u0004",
"\b\t\b\u0004\t\t\t\u0004\n\t\n\u0004\u000b\t\u000b\u0004\f\t\f\u0004",
"\r\t\r\u0004\u000e\t\u000e\u0004\u000f\t\u000f\u0004\u0010\t\u0010\u0004",
"\u0011\t\u0011\u0004\u0012\t\u0012\u0004\u0013\t\u0013\u0004\u0014\t",
"\u0014\u0004\u0015\t\u0015\u0004\u0016\t\u0016\u0004\u0017\t\u0017\u0004",
"\u0018\t\u0018\u0004\u0019\t\u0019\u0004\u001a\t\u001a\u0004\u001b\t",
"\u001b\u0004\u001c\t\u001c\u0004\u001d\t\u001d\u0004\u001e\t\u001e\u0004",
"\u001f\t\u001f\u0004 \t \u0004!\t!\u0004\"\t\"\u0004#\t#\u0004$\t$\u0004",
"%\t%\u0004&\t&\u0004\'\t\'\u0004(\t(\u0004)\t)\u0004*\t*\u0004+\t+\u0004",
",\t,\u0004-\t-\u0004.\t.\u0004/\t/\u00040\t0\u00041\t1\u00042\t2\u0004",
"3\t3\u00044\t4\u00045\t5\u00046\t6\u00047\t7\u00048\t8\u00049\t9\u0004",
":\t:\u0004;\t;\u0004<\t<\u0004=\t=\u0004>\t>\u0004?\t?\u0004@\t@\u0004",
"A\tA\u0004B\tB\u0004C\tC\u0004D\tD\u0004E\tE\u0004F\tF\u0004G\tG\u0004",
"H\tH\u0004I\tI\u0004J\tJ\u0004K\tK\u0004L\tL\u0004M\tM\u0004N\tN\u0004",
"O\tO\u0004P\tP\u0004Q\tQ\u0004R\tR\u0004S\tS\u0004T\tT\u0004U\tU\u0004",
"V\tV\u0004W\tW\u0004X\tX\u0004Y\tY\u0004Z\tZ\u0004[\t[\u0004\\\t\\\u0004",
"]\t]\u0004^\t^\u0004_\t_\u0004`\t`\u0004a\ta\u0004b\tb\u0004c\tc\u0004",
"d\td\u0004e\te\u0004f\tf\u0004g\tg\u0004h\th\u0004i\ti\u0004j\tj\u0004",
"k\tk\u0004l\tl\u0004m\tm\u0004n\tn\u0004o\to\u0004p\tp\u0004q\tq\u0004",
"r\tr\u0004s\ts\u0004t\tt\u0004u\tu\u0004v\tv\u0004w\tw\u0004x\tx\u0004",
"y\ty\u0004z\tz\u0004{\t{\u0004|\t|\u0004}\t}\u0004~\t~\u0004\u007f\t",
"\u007f\u0004\u0080\t\u0080\u0004\u0081\t\u0081\u0004\u0082\t\u0082\u0004",
"\u0083\t\u0083\u0004\u0084\t\u0084\u0004\u0085\t\u0085\u0004\u0086\t",
"\u0086\u0004\u0087\t\u0087\u0004\u0088\t\u0088\u0004\u0089\t\u0089\u0004",
"\u008a\t\u008a\u0004\u008b\t\u008b\u0004\u008c\t\u008c\u0004\u008d\t",
"\u008d\u0004\u008e\t\u008e\u0004\u008f\t\u008f\u0004\u0090\t\u0090\u0004",
"\u0091\t\u0091\u0004\u0092\t\u0092\u0004\u0093\t\u0093\u0004\u0094\t",
"\u0094\u0004\u0095\t\u0095\u0004\u0096\t\u0096\u0004\u0097\t\u0097\u0004",
"\u0098\t\u0098\u0004\u0099\t\u0099\u0004\u009a\t\u009a\u0004\u009b\t",
"\u009b\u0004\u009c\t\u009c\u0004\u009d\t\u009d\u0004\u009e\t\u009e\u0004",
"\u009f\t\u009f\u0004\u00a0\t\u00a0\u0004\u00a1\t\u00a1\u0004\u00a2\t",
"\u00a2\u0004\u00a3\t\u00a3\u0004\u00a4\t\u00a4\u0004\u00a5\t\u00a5\u0004",
"\u00a6\t\u00a6\u0004\u00a7\t\u00a7\u0004\u00a8\t\u00a8\u0004\u00a9\t",
"\u00a9\u0004\u00aa\t\u00aa\u0004\u00ab\t\u00ab\u0004\u00ac\t\u00ac\u0004",
"\u00ad\t\u00ad\u0004\u00ae\t\u00ae\u0004\u00af\t\u00af\u0004\u00b0\t",
"\u00b0\u0004\u00b1\t\u00b1\u0004\u00b2\t\u00b2\u0004\u00b3\t\u00b3\u0004",
"\u00b4\t\u00b4\u0004\u00b5\t\u00b5\u0004\u00b6\t\u00b6\u0004\u00b7\t",
"\u00b7\u0004\u00b8\t\u00b8\u0004\u00b9\t\u00b9\u0004\u00ba\t\u00ba\u0004",
"\u00bb\t\u00bb\u0004\u00bc\t\u00bc\u0004\u00bd\t\u00bd\u0003\u0002\u0003",
"\u0002\u0003\u0002\u0006\u0002\u017e\n\u0002\r\u0002\u000e\u0002\u017f",
"\u0003\u0002\u0003\u0002\u0003\u0002\u0003\u0002\u0003\u0002\u0003\u0002",
"\u0005\u0002\u0188\n\u0002\u0003\u0002\u0003\u0002\u0003\u0002\u0003",
"\u0002\u0003\u0002\u0003\u0002\u0003\u0002\u0003\u0002\u0003\u0002\u0003",
"\u0002\u0003\u0002\u0003\u0002\u0003\u0002\u0003\u0002\u0003\u0002\u0003",
"\u0002\u0003\u0002\u0003\u0002\u0005\u0002\u019c\n\u0002\u0003\u0003",
"\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003",
"\u0003\u0004\u0003\u0004\u0003\u0004\u0003\u0004\u0003\u0004\u0003\u0004",
"\u0007\u0004\u01ab\n\u0004\f\u0004\u000e\u0004\u01ae\u000b\u0004\u0003",
"\u0005\u0003\u0005\u0003\u0005\u0003\u0005\u0003\u0005\u0003\u0005\u0003",
"\u0005\u0005\u0005\u01b7\n\u0005\u0003\u0006\u0003\u0006\u0003\u0006",
"\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0006",
"\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0006",
"\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0006",
"\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0006",
"\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0006",
"\u0003\u0006\u0005\u0006\u01db\n\u0006\u0003\u0006\u0003\u0006\u0003",
"\u0006\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0006\u0005",
"\u0006\u01e5\n\u0006\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0006",
"\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0006",
"\u0003\u0006\u0007\u0006\u01f2\n\u0006\f\u0006\u000e\u0006\u01f5\u000b",
"\u0006\u0003\u0007\u0003\u0007\u0003\u0007\u0003\u0007\u0003\u0007\u0003",
"\u0007\u0007\u0007\u01fd\n\u0007\f\u0007\u000e\u0007\u0200\u000b\u0007",
"\u0003\b\u0003\b\u0003\b\u0003\b\u0003\b\u0003\b\u0003\b\u0003\b\u0003",
"\b\u0003\b\u0003\b\u0003\b\u0003\b\u0003\b\u0003\b\u0003\b\u0003\b\u0003",
"\b\u0003\b\u0003\b\u0003\b\u0003\b\u0005\b\u0218\n\b\u0003\t\u0003\t",
"\u0005\t\u021c\n\t\u0003\n\u0003\n\u0003\u000b\u0003\u000b\u0003\u000b",
"\u0003\u000b\u0003\u000b\u0003\u000b\u0003\u000b\u0003\u000b\u0003\u000b",
"\u0003\u000b\u0003\u000b\u0003\u000b\u0005\u000b\u022c\n\u000b\u0003",
"\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003",
"\f\u0003\f\u0003\f\u0007\f\u023a\n\f\f\f\u000e\f\u023d\u000b\f\u0003",
"\r\u0003\r\u0003\r\u0003\r\u0003\r\u0003\r\u0003\r\u0003\r\u0003\r\u0007",
"\r\u0248\n\r\f\r\u000e\r\u024b\u000b\r\u0003\u000e\u0003\u000e\u0003",
"\u000e\u0003\u000e\u0003\u000e\u0003\u000e\u0003\u000e\u0003\u000e\u0003",
"\u000e\u0007\u000e\u0256\n\u000e\f\u000e\u000e\u000e\u0259\u000b\u000e",
"\u0003\u000f\u0003\u000f\u0003\u000f\u0003\u000f\u0003\u000f\u0003\u000f",
"\u0003\u000f\u0003\u000f\u0003\u000f\u0003\u000f\u0003\u000f\u0003\u000f",
"\u0003\u000f\u0003\u000f\u0003\u000f\u0007\u000f\u026a\n\u000f\f\u000f",
"\u000e\u000f\u026d\u000b\u000f\u0003\u0010\u0003\u0010\u0003\u0010\u0003",
"\u0010\u0003\u0010\u0003\u0010\u0003\u0010\u0003\u0010\u0003\u0010\u0007",
"\u0010\u0278\n\u0010\f\u0010\u000e\u0010\u027b\u000b\u0010\u0003\u0011",
"\u0003\u0011\u0003\u0011\u0003\u0011\u0003\u0011\u0003\u0011\u0007\u0011",
"\u0283\n\u0011\f\u0011\u000e\u0011\u0286\u000b\u0011\u0003\u0012\u0003",
"\u0012\u0003\u0012\u0003\u0012\u0003\u0012\u0003\u0012\u0007\u0012\u028e",
"\n\u0012\f\u0012\u000e\u0012\u0291\u000b\u0012\u0003\u0013\u0003\u0013",
"\u0003\u0013\u0003\u0013\u0003\u0013\u0003\u0013\u0007\u0013\u0299\n",
"\u0013\f\u0013\u000e\u0013\u029c\u000b\u0013\u0003\u0014\u0003\u0014",
"\u0003\u0014\u0003\u0014\u0003\u0014\u0003\u0014\u0007\u0014\u02a4\n",
"\u0014\f\u0014\u000e\u0014\u02a7\u000b\u0014\u0003\u0015\u0003\u0015",
"\u0003\u0015\u0003\u0015\u0003\u0015\u0003\u0015\u0007\u0015\u02af\n",
"\u0015\f\u0015\u000e\u0015\u02b2\u000b\u0015\u0003\u0016\u0003\u0016",
"\u0003\u0016\u0003\u0016\u0003\u0016\u0003\u0016\u0005\u0016\u02ba\n",
"\u0016\u0003\u0017\u0003\u0017\u0003\u0017\u0003\u0017\u0003\u0017\u0005",
"\u0017\u02c1\n\u0017\u0003\u0018\u0003\u0018\u0003\u0019\u0003\u0019",
"\u0003\u0019\u0003\u0019\u0003\u0019\u0003\u0019\u0007\u0019\u02cb\n",
"\u0019\f\u0019\u000e\u0019\u02ce\u000b\u0019\u0003\u001a\u0003\u001a",
"\u0003\u001b\u0003\u001b\u0003\u001b\u0003\u001b\u0003\u001b\u0003\u001b",
"\u0003\u001b\u0003\u001b\u0003\u001b\u0005\u001b\u02db\n\u001b\u0003",
"\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0005\u001c\u02e1\n\u001c",
"\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001d\u0006\u001d\u02e7\n",
"\u001d\r\u001d\u000e\u001d\u02e8\u0003\u001e\u0006\u001e\u02ec\n\u001e",
"\r\u001e\u000e\u001e\u02ed\u0003\u001f\u0003\u001f\u0003\u001f\u0003",
"\u001f\u0003\u001f\u0005\u001f\u02f5\n\u001f\u0003 \u0003 \u0003 \u0003",
" \u0003 \u0003 \u0007 \u02fd\n \f \u000e \u0300\u000b \u0003!\u0003",
"!\u0003!\u0003!\u0003!\u0005!\u0307\n!\u0003\"\u0003\"\u0003#\u0003",
"#\u0003#\u0003#\u0003#\u0003#\u0003#\u0003#\u0003#\u0003#\u0003#\u0003",
"#\u0003#\u0003#\u0005#\u0319\n#\u0003$\u0003$\u0005$\u031d\n$\u0003",
"$\u0003$\u0003$\u0003$\u0003$\u0005$\u0324\n$\u0003%\u0003%\u0003&\u0003",
"&\u0003&\u0003&\u0003\'\u0003\'\u0003\'\u0003\'\u0003\'\u0007\'\u0331",
"\n\'\f\'\u000e\'\u0334\u000b\'\u0003(\u0005(\u0337\n(\u0003(\u0003(",
"\u0003(\u0003(\u0005(\u033d\n(\u0003)\u0003)\u0005)\u0341\n)\u0003)",
"\u0003)\u0005)\u0345\n)\u0005)\u0347\n)\u0003*\u0003*\u0003*\u0003*",
"\u0003*\u0003*\u0007*\u034f\n*\f*\u000e*\u0352\u000b*\u0003+\u0003+",
"\u0005+\u0356\n+\u0003+\u0003+\u0005+\u035a\n+\u0003,\u0003,\u0005,",
"\u035e\n,\u0003,\u0003,\u0003,\u0003,\u0003,\u0003,\u0005,\u0366\n,",
"\u0003,\u0003,\u0003,\u0003,\u0003,\u0003,\u0003,\u0005,\u036f\n,\u0003",
"-\u0003-\u0003-\u0003-\u0003-\u0003-\u0007-\u0377\n-\f-\u000e-\u037a",
"\u000b-\u0003.\u0003.\u0003.\u0003.\u0003.\u0005.\u0381\n.\u0003/\u0003",
"/\u00030\u00030\u00030\u00030\u00030\u00031\u00031\u00032\u00032\u0003",
"2\u00032\u00032\u00032\u00052\u0392\n2\u00033\u00033\u00033\u00033\u0003",
"3\u00033\u00033\u00033\u00033\u00033\u00053\u039e\n3\u00034\u00034\u0007",
"4\u03a2\n4\f4\u000e4\u03a5\u000b4\u00035\u00035\u00035\u00035\u0005",
"5\u03ab\n5\u00036\u00036\u00036\u00036\u00036\u00036\u00056\u03b3\n",
"6\u00036\u00036\u00036\u00056\u03b8\n6\u00036\u00056\u03bb\n6\u0003",
"6\u00036\u00036\u00036\u00036\u00056\u03c2\n6\u00036\u00036\u00036\u0003",
"6\u00036\u00036\u00036\u00036\u00036\u00036\u00036\u00036\u00036\u0005",
"6\u03d1\n6\u00036\u00036\u00036\u00036\u00036\u00036\u00036\u00036\u0003",
"6\u00036\u00056\u03dd\n6\u00036\u00076\u03e0\n6\f6\u000e6\u03e3\u000b",
"6\u00037\u00037\u00037\u00067\u03e8\n7\r7\u000e7\u03e9\u00037\u0003",
"7\u00057\u03ee\n7\u00038\u00038\u00038\u00038\u00038\u00038\u00038\u0003",
"9\u00039\u00039\u00079\u03fa\n9\f9\u000e9\u03fd\u000b9\u00039\u0005",
"9\u0400\n9\u0003:\u0003:\u0003:\u0005:\u0405\n:\u0003:\u0005:\u0408",
"\n:\u0003:\u0005:\u040b\n:\u0003;\u0003;\u0003;\u0003;\u0003;\u0007",
";\u0412\n;\f;\u000e;\u0415\u000b;\u0003<\u0003<\u0005<\u0419\n<\u0003",
"<\u0003<\u0005<\u041d\n<\u0003<\u0003<\u0003<\u0005<\u0422\n<\u0003",
"<\u0003<\u0005<\u0426\n<\u0003<\u0005<\u0429\n<\u0003=\u0003=\u0003",
"=\u0003=\u0003=\u0007=\u0430\n=\f=\u000e=\u0433\u000b=\u0003>\u0003",
">\u0003>\u0003>\u0003>\u0005>\u043a\n>\u0003?\u0003?\u0003?\u0003?\u0003",
"?\u0003?\u0007?\u0442\n?\f?\u000e?\u0445\u000b?\u0003@\u0003@\u0003",
"@\u0003@\u0003@\u0005@\u044c\n@\u0005@\u044e\n@\u0003A\u0003A\u0003",
"A\u0003A\u0003A\u0003A\u0007A\u0456\nA\fA\u000eA\u0459\u000bA\u0003",
"B\u0003B\u0005B\u045d\nB\u0003C\u0003C\u0005C\u0461\nC\u0003C\u0003",
"C\u0007C\u0465\nC\fC\u000eC\u0468\u000bC\u0005C\u046a\nC\u0003D\u0003",
"D\u0003D\u0003D\u0003D\u0007D\u0471\nD\fD\u000eD\u0474\u000bD\u0003",
"D\u0003D\u0005D\u0478\nD\u0003D\u0005D\u047b\nD\u0003D\u0003D\u0003",
"D\u0003D\u0005D\u0481\nD\u0003D\u0003D\u0003D\u0003D\u0003D\u0003D\u0003",
"D\u0003D\u0003D\u0003D\u0003D\u0003D\u0003D\u0003D\u0005D\u0491\nD\u0003",
"D\u0003D\u0007D\u0495\nD\fD\u000eD\u0498\u000bD\u0005D\u049a\nD\u0003",
"D\u0003D\u0003D\u0005D\u049f\nD\u0003D\u0005D\u04a2\nD\u0003D\u0003",
"D\u0003D\u0003D\u0003D\u0005D\u04a9\nD\u0003D\u0003D\u0003D\u0003D\u0003",
"D\u0003D\u0003D\u0003D\u0003D\u0003D\u0003D\u0003D\u0003D\u0003D\u0003",
"D\u0003D\u0003D\u0005D\u04bc\nD\u0003D\u0003D\u0007D\u04c0\nD\fD\u000e",
"D\u04c3\u000bD\u0007D\u04c5\nD\fD\u000eD\u04c8\u000bD\u0003E\u0003E",
"\u0003F\u0003F\u0003F\u0003F\u0003F\u0003F\u0003F\u0003F\u0003F\u0003",
"F\u0005F\u04d6\nF\u0003G\u0003G\u0005G\u04da\nG\u0003G\u0003G\u0003",
"G\u0003G\u0003G\u0005G\u04e1\nG\u0003G\u0007G\u04e4\nG\fG\u000eG\u04e7",
"\u000bG\u0003H\u0003H\u0003H\u0003I\u0003I\u0003I\u0003I\u0003I\u0007",
"I\u04f1\nI\fI\u000eI\u04f4\u000bI\u0003J\u0003J\u0003J\u0003J\u0003",
"J\u0003J\u0005J\u04fc\nJ\u0003K\u0003K\u0003K\u0003K\u0003K\u0006K\u0503",
"\nK\rK\u000eK\u0504\u0003K\u0003K\u0003K\u0003L\u0003L\u0003L\u0003",
"L\u0003L\u0003L\u0003L\u0003L\u0003L\u0003L\u0003L\u0003L\u0007L\u0516",
"\nL\fL\u000eL\u0519\u000bL\u0005L\u051b\nL\u0003L\u0003L\u0003L\u0003",
"L\u0007L\u0521\nL\fL\u000eL\u0524\u000bL\u0005L\u0526\nL\u0007L\u0528",
"\nL\fL\u000eL\u052b\u000bL\u0003L\u0003L\u0005L\u052f\nL\u0003M\u0003",
"M\u0003M\u0003M\u0003N\u0003N\u0003N\u0003N\u0003N\u0003N\u0005N\u053b",
"\nN\u0003O\u0003O\u0005O\u053f\nO\u0003O\u0003O\u0003P\u0003P\u0003",
"P\u0003P\u0003P\u0007P\u0548\nP\fP\u000eP\u054b\u000bP\u0003Q\u0003",
"Q\u0003Q\u0005Q\u0550\nQ\u0003R\u0003R\u0003R\u0003R\u0003R\u0003R\u0003",
"S\u0005S\u0559\nS\u0003S\u0003S\u0003T\u0003T\u0003T\u0003T\u0003T\u0003",
"T\u0003T\u0005T\u0564\nT\u0003T\u0003T\u0003T\u0003T\u0003T\u0003T\u0005",
"T\u056c\nT\u0003U\u0003U\u0003U\u0003V\u0003V\u0003W\u0003W\u0003W\u0003",
"W\u0003W\u0007W\u0578\nW\fW\u000eW\u057b\u000bW\u0003X\u0003X\u0005",
"X\u057f\nX\u0003X\u0003X\u0005X\u0583\nX\u0003Y\u0003Y\u0003Y\u0003",
"Y\u0003Y\u0003Y\u0003Y\u0003Y\u0003Y\u0003Y\u0003Y\u0003Y\u0003Y\u0003",
"Y\u0003Y\u0003Y\u0003Y\u0005Y\u0596\nY\u0003Y\u0003Y\u0005Y\u059a\n",
"Y\u0003Y\u0003Y\u0005Y\u059e\nY\u0003Y\u0003Y\u0003Y\u0003Y\u0003Y\u0003",
"Y\u0005Y\u05a6\nY\u0003Y\u0003Y\u0005Y\u05aa\nY\u0003Y\u0003Y\u0003",
"Y\u0005Y\u05af\nY\u0003Z\u0003Z\u0003Z\u0003Z\u0003Z\u0003Z\u0003Z\u0003",
"Z\u0003Z\u0005Z\u05ba\nZ\u0003Z\u0003Z\u0003Z\u0003Z\u0003Z\u0005Z\u05c1",
"\nZ\u0003[\u0005[\u05c4\n[\u0003[\u0003[\u0005[\u05c8\n[\u0003\\\u0003",
"\\\u0003\\\u0003\\\u0003\\\u0007\\\u05cf\n\\\f\\\u000e\\\u05d2\u000b",
"\\\u0003]\u0003]\u0003]\u0003]\u0003]\u0003]\u0005]\u05da\n]\u0003^",
"\u0005^\u05dd\n^\u0003^\u0003^\u0005^\u05e1\n^\u0003^\u0003^\u0003_",
"\u0003_\u0003_\u0003_\u0003_\u0007_\u05ea\n_\f_\u000e_\u05ed\u000b_",
"\u0003`\u0003`\u0003`\u0003`\u0003`\u0006`\u05f4\n`\r`\u000e`\u05f5",
"\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003",
"`\u0005`\u0602\n`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003",
"`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003",
"`\u0003`\u0003`\u0005`\u0618\n`\u0003a\u0003a\u0003a\u0003a\u0003a\u0003",
"a\u0003a\u0003a\u0003b\u0003b\u0003b\u0003b\u0003b\u0003b\u0003b\u0003",
"b\u0005b\u062a\nb\u0003c\u0003c\u0003c\u0003c\u0003c\u0003c\u0003c\u0003",
"c\u0003c\u0003c\u0005c\u0636\nc\u0003d\u0003d\u0003d\u0003d\u0003d\u0003",
"d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0005d\u0644\nd\u0003d\u0003",
"d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003",
"d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003",
"d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003",
"d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003",
"d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003",
"d\u0003d\u0003d\u0003d\u0003d\u0003d\u0005d\u067f\nd\u0003e\u0003e\u0003",
"e\u0003e\u0003e\u0003e\u0003e\u0003e\u0005e\u0689\ne\u0003f\u0003f\u0003",
"f\u0003f\u0003f\u0003f\u0003f\u0003f\u0003f\u0003f\u0003f\u0003f\u0003",
"f\u0003f\u0003f\u0003f\u0003f\u0003f\u0003f\u0003f\u0003f\u0003f\u0003",
"f\u0003f\u0003f\u0003f\u0003f\u0003f\u0003f\u0003f\u0003f\u0003f\u0003",
"f\u0003f\u0003f\u0003f\u0003f\u0003f\u0003f\u0005f\u06b2\nf\u0003g\u0003",
"g\u0003g\u0003g\u0003g\u0003g\u0005g\u06ba\ng\u0003h\u0003h\u0003h\u0003",
"h\u0003h\u0003h\u0003h\u0005h\u06c3\nh\u0003i\u0003i\u0003i\u0003i\u0003",
"i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003",
"i\u0003i\u0005i\u06d5\ni\u0003j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003",
"j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003",
"j\u0003j\u0005j\u06e9\nj\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003",
"k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0005k\u06f8\nk\u0003l\u0003",
"l\u0003l\u0003l\u0003l\u0003l\u0003l\u0003l\u0003l\u0003l\u0003l\u0003",
"l\u0003l\u0005l\u0707\nl\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003",
"m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003",
"m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0005m\u0720\nm\u0003n\u0003",
"n\u0003n\u0003n\u0003n\u0003n\u0003n\u0003n\u0003n\u0003n\u0003n\u0003",
"n\u0003n\u0005n\u072f\nn\u0003o\u0003o\u0003o\u0003o\u0003o\u0003o\u0003",
"o\u0003o\u0005o\u0739\no\u0003p\u0003p\u0003p\u0003p\u0003p\u0003p\u0003",
"p\u0003p\u0005p\u0743\np\u0003q\u0003q\u0003q\u0003q\u0003q\u0003q\u0003",
"q\u0003q\u0005q\u074d\nq\u0003r\u0003r\u0003r\u0003r\u0003r\u0003r\u0003",
"r\u0003r\u0005r\u0757\nr\u0003s\u0003s\u0003s\u0003s\u0003s\u0003s\u0003",
"s\u0003s\u0005s\u0761\ns\u0003t\u0003t\u0003t\u0003t\u0003t\u0003t\u0005",
"t\u0769\nt\u0003t\u0003t\u0003u\u0003u\u0003u\u0003u\u0003u\u0003u\u0003",
"u\u0003u\u0005u\u0775\nu\u0003v\u0003v\u0003v\u0003v\u0003v\u0003v\u0003",
"v\u0003v\u0003v\u0003v\u0003v\u0003v\u0005v\u0783\nv\u0003w\u0003w\u0003",
"w\u0003w\u0003w\u0003w\u0003w\u0003w\u0005w\u078d\nw\u0003x\u0003x\u0003",
"x\u0003y\u0003y\u0003y\u0003y\u0003y\u0003y\u0003y\u0003y\u0003y\u0003",
"y\u0003y\u0003y\u0003y\u0003y\u0003y\u0005y\u07a1\ny\u0003z\u0003z\u0003",
"z\u0003z\u0005z\u07a7\nz\u0003z\u0003z\u0003z\u0003z\u0003{\u0006{\u07ae",
"\n{\r{\u000e{\u07af\u0003{\u0003{\u0003|\u0006|\u07b5\n|\r|\u000e|\u07b6",
"\u0003|\u0003|\u0003}\u0003}\u0003}\u0003}\u0003}\u0003}\u0003}\u0003",
"}\u0003}\u0003}\u0003}\u0003}\u0003}\u0003}\u0003}\u0005}\u07ca\n}\u0003",
"~\u0003~\u0003~\u0003~\u0003~\u0003~\u0003~\u0003~\u0005~\u07d4\n~\u0003",
"\u007f\u0003\u007f\u0003\u007f\u0003\u007f\u0003\u007f\u0003\u007f\u0003",
"\u007f\u0003\u007f\u0005\u007f\u07de\n\u007f\u0003\u0080\u0003\u0080",
"\u0003\u0080\u0003\u0080\u0003\u0080\u0003\u0080\u0003\u0080\u0003\u0080",
"\u0003\u0080\u0003\u0080\u0003\u0080\u0003\u0080\u0005\u0080\u07ec\n",
"\u0080\u0003\u0081\u0003\u0081\u0003\u0081\u0003\u0081\u0003\u0081\u0003",
"\u0081\u0003\u0081\u0003\u0081\u0003\u0081\u0003\u0081\u0003\u0081\u0003",
"\u0081\u0003\u0081\u0003\u0081\u0003\u0081\u0003\u0081\u0003\u0081\u0003",
"\u0081\u0003\u0081\u0003\u0081\u0003\u0081\u0003\u0081\u0003\u0081\u0003",
"\u0081\u0003\u0081\u0003\u0081\u0003\u0081\u0005\u0081\u0809\n\u0081",
"\u0003\u0081\u0003\u0081\u0003\u0081\u0003\u0081\u0003\u0081\u0003\u0081",
"\u0003\u0081\u0003\u0081\u0003\u0081\u0003\u0081\u0003\u0081\u0003\u0081",
"\u0003\u0081\u0003\u0081\u0003\u0081\u0003\u0081\u0003\u0081\u0003\u0081",
"\u0003\u0081\u0003\u0081\u0003\u0081\u0003\u0081\u0003\u0081\u0005\u0081",
"\u0822\n\u0081\u0003\u0082\u0003\u0082\u0005\u0082\u0826\n\u0082\u0003",
"\u0082\u0003\u0082\u0003\u0082\u0003\u0082\u0003\u0082\u0003\u0082\u0003",
"\u0082\u0005\u0082\u082f\n\u0082\u0003\u0083\u0003\u0083\u0003\u0083",
"\u0003\u0083\u0005\u0083\u0835\n\u0083\u0003\u0084\u0003\u0084\u0003",
"\u0084\u0003\u0084\u0003\u0084\u0003\u0085\u0003\u0085\u0003\u0085\u0003",
"\u0085\u0003\u0085\u0003\u0085\u0003\u0085\u0005\u0085\u0843\n\u0085",
"\u0003\u0086\u0005\u0086\u0846\n\u0086\u0003\u0086\u0003\u0086\u0003",
"\u0086\u0003\u0086\u0003\u0086\u0003\u0086\u0003\u0086\u0005\u0086\u084f",
"\n\u0086\u0003\u0087\u0003\u0087\u0005\u0087\u0853\n\u0087\u0003\u0087",
"\u0003\u0087\u0003\u0087\u0003\u0087\u0005\u0087\u0859\n\u0087\u0003",
"\u0087\u0003\u0087\u0005\u0087\u085d\n\u0087\u0003\u0088\u0003\u0088",
"\u0003\u0088\u0003\u0088\u0003\u0088\u0003\u0088\u0003\u0088\u0003\u0088",
"\u0005\u0088\u0867\n\u0088\u0003\u0089\u0003\u0089\u0003\u0089\u0003",
"\u0089\u0005\u0089\u086d\n\u0089\u0003\u0089\u0003\u0089\u0003\u0089",
"\u0003\u0089\u0005\u0089\u0873\n\u0089\u0003\u008a\u0003\u008a\u0005",
"\u008a\u0877\n\u008a\u0003\u008a\u0003\u008a\u0003\u008a\u0003\u008a",
"\u0003\u008a\u0003\u008a\u0003\u008a\u0005\u008a\u0880\n\u008a\u0003",
"\u008a\u0003\u008a\u0003\u008a\u0003\u008a\u0003\u008a\u0003\u008a\u0003",
"\u008a\u0003\u008a\u0003\u008a\u0005\u008a\u088b\n\u008a\u0003\u008b",
"\u0003\u008b\u0003\u008b\u0003\u008b\u0003\u008b\u0003\u008b\u0003\u008b",
"\u0003\u008b\u0005\u008b\u0895\n\u008b\u0003\u008c\u0003\u008c\u0003",
"\u008c\u0003\u008c\u0003\u008c\u0003\u008c\u0003\u008c\u0003\u008c\u0005",
"\u008c\u089f\n\u008c\u0003\u008d\u0003\u008d\u0003\u008d\u0003\u008e",
"\u0003\u008e\u0003\u008e\u0003\u008e\u0003\u008e\u0003\u008e\u0003\u008f",
"\u0003\u008f\u0003\u008f\u0003\u008f\u0003\u008f\u0003\u008f\u0003\u008f",
"\u0003\u008f\u0005\u008f\u08b2\n\u008f\u0003\u0090\u0003\u0090\u0003",
"\u0090\u0003\u0090\u0003\u0090\u0003\u0090\u0005\u0090\u08ba\n\u0090",
"\u0003\u0090\u0003\u0090\u0003\u0090\u0003\u0090\u0003\u0090\u0003\u0090",
"\u0003\u0090\u0003\u0090\u0003\u0090\u0005\u0090\u08c5\n\u0090\u0003",
"\u0091\u0003\u0091\u0003\u0091\u0003\u0091\u0003\u0091\u0003\u0091\u0003",
"\u0091\u0003\u0091\u0003\u0091\u0003\u0091\u0003\u0091\u0003\u0091\u0005",
"\u0091\u08d3\n\u0091\u0003\u0092\u0005\u0092\u08d6\n\u0092\u0003\u0092",
"\u0003\u0092\u0007\u0092\u08da\n\u0092\f\u0092\u000e\u0092\u08dd\u000b",
"\u0092\u0003\u0092\u0003\u0092\u0003\u0093\u0003\u0093\u0003\u0093\u0003",
"\u0093\u0003\u0093\u0003\u0093\u0005\u0093\u08e7\n\u0093\u0003\u0094",
"\u0003\u0094\u0003\u0094\u0003\u0094\u0003\u0094\u0003\u0094\u0003\u0094",
"\u0003\u0094\u0003\u0094\u0003\u0094\u0005\u0094\u08f3\n\u0094\u0003",
"\u0094\u0005\u0094\u08f6\n\u0094\u0003\u0094\u0003\u0094\u0003\u0094",
"\u0003\u0094\u0003\u0094\u0003\u0094\u0003\u0094\u0005\u0094\u08ff\n",
"\u0094\u0003\u0094\u0003\u0094\u0003\u0094\u0003\u0094\u0003\u0094\u0003",
"\u0094\u0003\u0094\u0003\u0094\u0003\u0094\u0003\u0094\u0003\u0094\u0003",
"\u0094\u0003\u0094\u0003\u0094\u0003\u0094\u0005\u0094\u0910\n\u0094",
"\u0003\u0094\u0003\u0094\u0003\u0094\u0003\u0094\u0003\u0094\u0003\u0094",
"\u0003\u0094\u0003\u0094\u0003\u0094\u0003\u0094\u0003\u0094\u0003\u0094",
"\u0003\u0094\u0005\u0094\u091f\n\u0094\u0003\u0094\u0003\u0094\u0003",
"\u0094\u0005\u0094\u0924\n\u0094\u0003\u0095\u0003\u0095\u0003\u0095",
"\u0006\u0095\u0929\n\u0095\r\u0095\u000e\u0095\u092a\u0003\u0095\u0003",
"\u0095\u0003\u0095\u0003\u0095\u0003\u0095\u0005\u0095\u0932\n\u0095",
"\u0003\u0096\u0003\u0096\u0003\u0096\u0003\u0096\u0003\u0096\u0003\u0096",
"\u0003\u0096\u0003\u0096\u0003\u0097\u0003\u0097\u0003\u0097\u0007\u0097",
"\u093f\n\u0097\f\u0097\u000e\u0097\u0942\u000b\u0097\u0003\u0097\u0003",
"\u0097\u0003\u0097\u0005\u0097\u0947\n\u0097\u0003\u0098\u0003\u0098",
"\u0003\u0098\u0005\u0098\u094c\n\u0098\u0003\u0098\u0005\u0098\u094f",
"\n\u0098\u0003\u0098\u0003\u0098\u0005\u0098\u0953\n\u0098\u0003\u0099",
"\u0003\u0099\u0003\u0099\u0003\u0099\u0003\u0099\u0007\u0099\u095a\n",
"\u0099\f\u0099\u000e\u0099\u095d\u000b\u0099\u0003\u0099\u0003\u0099",
"\u0003\u009a\u0003\u009a\u0005\u009a\u0963\n\u009a\u0003\u009a\u0003",
"\u009a\u0003\u009a\u0005\u009a\u0968\n\u009a\u0003\u009a\u0003\u009a",
"\u0003\u009a\u0003\u009a\u0003\u009a\u0005\u009a\u096f\n\u009a\u0003",
"\u009a\u0003\u009a\u0005\u009a\u0973\n\u009a\u0003\u009a\u0005\u009a",
"\u0976\n\u009a\u0003\u009b\u0003\u009b\u0003\u009b\u0003\u009b\u0003",
"\u009b\u0003\u009b\u0003\u009b\u0005\u009b\u097f\n\u009b\u0003\u009c",
"\u0003\u009c\u0003\u009c\u0003\u009c\u0003\u009c\u0003\u009c\u0003\u009c",
"\u0003\u009c\u0005\u009c\u0989\n\u009c\u0003\u009d\u0003\u009d\u0003",
"\u009d\u0003\u009d\u0003\u009d\u0003\u009d\u0003\u009d\u0003\u009d\u0005",
"\u009d\u0993\n\u009d\u0003\u009e\u0003\u009e\u0003\u009e\u0003\u009e",
"\u0003\u009e\u0003\u009e\u0005\u009e\u099b\n\u009e\u0003\u009e\u0003",
"\u009e\u0005\u009e\u099f\n\u009e\u0003\u009f\u0003\u009f\u0003\u009f",
"\u0003\u009f\u0003\u009f\u0003\u009f\u0003\u009f\u0005\u009f\u09a8\n",
"\u009f\u0003\u00a0\u0003\u00a0\u0005\u00a0\u09ac\n\u00a0\u0003\u00a0",
"\u0003\u00a0\u0003\u00a1\u0003\u00a1\u0003\u00a1\u0003\u00a1\u0005\u00a1",
"\u09b4\n\u00a1\u0003\u00a1\u0003\u00a1\u0007\u00a1\u09b8\n\u00a1\f\u00a1",
"\u000e\u00a1\u09bb\u000b\u00a1\u0003\u00a1\u0003\u00a1\u0005\u00a1\u09bf",
"\n\u00a1\u0003\u00a2\u0003\u00a2\u0003\u00a2\u0003\u00a2\u0007\u00a2",
"\u09c5\n\u00a2\f\u00a2\u000e\u00a2\u09c8\u000b\u00a2\u0003\u00a2\u0003",
"\u00a2\u0003\u00a2\u0003\u00a2\u0005\u00a2\u09ce\n\u00a2\u0003\u00a2",
"\u0005\u00a2\u09d1\n\u00a2\u0003\u00a2\u0003\u00a2\u0003\u00a2\u0003",
"\u00a2\u0003\u00a2\u0005\u00a2\u09d8\n\u00a2\u0003\u00a2\u0003\u00a2",
"\u0003\u00a2\u0003\u00a2\u0003\u00a2\u0003\u00a2\u0003\u00a2\u0003\u00a2",
"\u0003\u00a2\u0003\u00a2\u0003\u00a2\u0003\u00a2\u0003\u00a2\u0003\u00a2",
"\u0003\u00a2\u0003\u00a2\u0003\u00a2\u0005\u00a2\u09eb\n\u00a2\u0003",
"\u00a2\u0003\u00a2\u0007\u00a2\u09ef\n\u00a2\f\u00a2\u000e\u00a2\u09f2",
"\u000b\u00a2\u0003\u00a2\u0003\u00a2\u0003\u00a2\u0003\u00a2\u0005\u00a2",
"\u09f8\n\u00a2\u0003\u00a2\u0005\u00a2\u09fb\n\u00a2\u0003\u00a2\u0003",
"\u00a2\u0003\u00a2\u0003\u00a2\u0003\u00a2\u0003\u00a2\u0003\u00a2\u0005",
"\u00a2\u0a04\n\u00a2\u0003\u00a2\u0003\u00a2\u0003\u00a2\u0003\u00a2",
"\u0003\u00a2\u0003\u00a2\u0003\u00a2\u0003\u00a2\u0003\u00a2\u0003\u00a2",
"\u0003\u00a2\u0003\u00a2\u0003\u00a2\u0003\u00a2\u0003\u00a2\u0003\u00a2",
"\u0003\u00a2\u0003\u00a2\u0003\u00a2\u0003\u00a2\u0003\u00a2\u0005\u00a2",
"\u0a1b\n\u00a2\u0003\u00a2\u0003\u00a2\u0007\u00a2\u0a1f\n\u00a2\f\u00a2",
"\u000e\u00a2\u0a22\u000b\u00a2\u0003\u00a2\u0003\u00a2\u0005\u00a2\u0a26",
"\n\u00a2\u0003\u00a3\u0003\u00a3\u0003\u00a3\u0003\u00a4\u0003\u00a4",
"\u0003\u00a4\u0003\u00a4\u0003\u00a4\u0003\u00a4\u0003\u00a4\u0003\u00a4",
"\u0003\u00a4\u0003\u00a4\u0003\u00a4\u0003\u00a4\u0003\u00a4\u0003\u00a4",
"\u0005\u00a4\u0a39\n\u00a4\u0003\u00a5\u0005\u00a5\u0a3c\n\u00a5\u0003",
"\u00a5\u0003\u00a5\u0003\u00a5\u0003\u00a5\u0003\u00a5\u0003\u00a5\u0005",
"\u00a5\u0a44\n\u00a5\u0003\u00a5\u0003\u00a5\u0003\u00a5\u0005\u00a5",
"\u0a49\n\u00a5\u0003\u00a6\u0003\u00a6\u0003\u00a6\u0003\u00a6\u0003",
"\u00a7\u0003\u00a7\u0003\u00a7\u0003\u00a7\u0003\u00a7\u0003\u00a7\u0003",
"\u00a7\u0005\u00a7\u0a56\n\u00a7\u0003\u00a8\u0003\u00a8\u0003\u00a8",
"\u0003\u00a8\u0003\u00a8\u0003\u00a8\u0003\u00a8\u0003\u00a8\u0005\u00a8",
"\u0a60\n\u00a8\u0003\u00a9\u0003\u00a9\u0003\u00a9\u0003\u00a9\u0003",
"\u00a9\u0006\u00a9\u0a67\n\u00a9\r\u00a9\u000e\u00a9\u0a68\u0003\u00a9",
"\u0003\u00a9\u0003\u00a9\u0003\u00a9\u0003\u00aa\u0003\u00aa\u0003\u00aa",
"\u0003\u00aa\u0003\u00aa\u0003\u00aa\u0003\u00aa\u0003\u00aa\u0003\u00aa",
"\u0003\u00aa\u0003\u00aa\u0003\u00aa\u0003\u00aa\u0003\u00aa\u0003\u00aa",
"\u0003\u00aa\u0003\u00aa\u0003\u00aa\u0003\u00aa\u0003\u00aa\u0003\u00aa",
"\u0003\u00aa\u0003\u00aa\u0003\u00aa\u0007\u00aa\u0a87\n\u00aa\f\u00aa",
"\u000e\u00aa\u0a8a\u000b\u00aa\u0005\u00aa\u0a8c\n\u00aa\u0003\u00aa",
"\u0003\u00aa\u0003\u00aa\u0003\u00aa\u0007\u00aa\u0a92\n\u00aa\f\u00aa",
"\u000e\u00aa\u0a95\u000b\u00aa\u0005\u00aa\u0a97\n\u00aa\u0007\u00aa",
"\u0a99\n\u00aa\f\u00aa\u000e\u00aa\u0a9c\u000b\u00aa\u0003\u00aa\u0003",
"\u00aa\u0003\u00aa\u0005\u00aa\u0aa1\n\u00aa\u0003\u00ab\u0003\u00ab",
"\u0003\u00ab\u0003\u00ab\u0003\u00ab\u0003\u00ac\u0003\u00ac\u0003\u00ac",
"\u0003\u00ac\u0003\u00ac\u0003\u00ac\u0003\u00ac\u0003\u00ac\u0003\u00ac",
"\u0003\u00ac\u0003\u00ac\u0005\u00ac\u0ab3\n\u00ac\u0003\u00ad\u0003",
"\u00ad\u0005\u00ad\u0ab7\n\u00ad\u0003\u00ad\u0003\u00ad\u0003\u00ad",
"\u0003\u00ae\u0003\u00ae\u0003\u00ae\u0003\u00ae\u0003\u00ae\u0003\u00ae",
"\u0003\u00ae\u0005\u00ae\u0ac3\n\u00ae\u0003\u00af\u0003\u00af\u0003",
"\u00af\u0003\u00af\u0003\u00af\u0003\u00af\u0003\u00af\u0003\u00af\u0003",
"\u00af\u0003\u00af\u0003\u00af\u0003\u00af\u0003\u00af\u0005\u00af\u0ad2",
"\n\u00af\u0003\u00b0\u0003\u00b0\u0003\u00b0\u0003\u00b0\u0003\u00b0",
"\u0003\u00b0\u0003\u00b0\u0003\u00b1\u0005\u00b1\u0adc\n\u00b1\u0003",
"\u00b1\u0003\u00b1\u0003\u00b1\u0003\u00b2\u0003\u00b2\u0003\u00b2\u0003",
"\u00b2\u0003\u00b2\u0003\u00b2\u0003\u00b2\u0005\u00b2\u0ae8\n\u00b2",
"\u0003\u00b2\u0003\u00b2\u0003\u00b2\u0003\u00b2\u0003\u00b2\u0003\u00b2",
"\u0003\u00b2\u0003\u00b2\u0003\u00b2\u0005\u00b2\u0af3\n\u00b2\u0003",
"\u00b3\u0003\u00b3\u0003\u00b3\u0003\u00b3\u0003\u00b4\u0003\u00b4\u0003",
"\u00b4\u0003\u00b5\u0003\u00b5\u0003\u00b5\u0003\u00b5\u0003\u00b5\u0003",
"\u00b5\u0003\u00b5\u0005\u00b5\u0b03\n\u00b5\u0003\u00b6\u0003\u00b6",
"\u0005\u00b6\u0b07\n\u00b6\u0003\u00b6\u0003\u00b6\u0003\u00b6\u0003",
"\u00b6\u0003\u00b6\u0005\u00b6\u0b0e\n\u00b6\u0003\u00b7\u0003\u00b7",
"\u0003\u00b7\u0003\u00b7\u0003\u00b7\u0003\u00b7\u0003\u00b7\u0003\u00b7",
"\u0003\u00b7\u0003\u00b7\u0003\u00b7\u0003\u00b7\u0003\u00b7\u0003\u00b7",
"\u0003\u00b7\u0003\u00b7\u0003\u00b7\u0003\u00b7\u0003\u00b7\u0005\u00b7",
"\u0b23\n\u00b7\u0003\u00b7\u0003\u00b7\u0005\u00b7\u0b27\n\u00b7\u0003",
"\u00b7\u0003\u00b7\u0005\u00b7\u0b2b\n\u00b7\u0003\u00b7\u0003\u00b7",
"\u0003\u00b7\u0003\u00b7\u0003\u00b7\u0003\u00b7\u0003\u00b7\u0003\u00b7",
"\u0005\u00b7\u0b35\n\u00b7\u0003\u00b7\u0003\u00b7\u0005\u00b7\u0b39",
"\n\u00b7\u0003\u00b7\u0003\u00b7\u0003\u00b7\u0003\u00b7\u0005\u00b7",
"\u0b3f\n\u00b7\u0003\u00b8\u0003\u00b8\u0003\u00b8\u0003\u00b8\u0003",
"\u00b8\u0003\u00b8\u0003\u00b8\u0003\u00b8\u0003\u00b8\u0003\u00b8\u0003",
"\u00b8\u0003\u00b8\u0005\u00b8\u0b4d\n\u00b8\u0003\u00b8\u0003\u00b8",
"\u0003\u00b8\u0003\u00b8\u0003\u00b8\u0003\u00b8\u0003\u00b8\u0005\u00b8",
"\u0b56\n\u00b8\u0003\u00b9\u0005\u00b9\u0b59\n\u00b9\u0003\u00b9\u0003",
"\u00b9\u0005\u00b9\u0b5d\n\u00b9\u0003\u00ba\u0003\u00ba\u0003\u00ba",
"\u0003\u00ba\u0003\u00ba\u0003\u00ba\u0003\u00ba\u0005\u00ba\u0b66\n",
"\u00ba\u0003\u00bb\u0003\u00bb\u0003\u00bb\u0003\u00bb\u0003\u00bb\u0003",
"\u00bb\u0003\u00bb\u0003\u00bb\u0005\u00bb\u0b70\n\u00bb\u0003\u00bc",
"\u0005\u00bc\u0b73\n\u00bc\u0003\u00bc\u0003\u00bc\u0005\u00bc\u0b77",
"\n\u00bc\u0003\u00bc\u0003\u00bc\u0003\u00bc\u0003\u00bd\u0003\u00bd",
"\u0003\u00bd\u0003\u00bd\u0003\u00bd\u0003\u00bd\u0003\u00bd\u0005\u00bd",
"\u0b83\n\u00bd\u0003\u00bd\u0002\u001f\u0006\n\f\u0016\u0018\u001a\u001c",
"\u001e \"$&(0>LRXjx|\u0080\u0086\u008c\u0090\u009e\u00ac\u00b6\u00bc",
"\u00be\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a",
"\u001c\u001e \"$&(*,.02468:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0080",
"\u0082\u0084\u0086\u0088\u008a\u008c\u008e\u0090\u0092\u0094\u0096\u0098",
"\u009a\u009c\u009e\u00a0\u00a2\u00a4\u00a6\u00a8\u00aa\u00ac\u00ae\u00b0",
"\u00b2\u00b4\u00b6\u00b8\u00ba\u00bc\u00be\u00c0\u00c2\u00c4\u00c6\u00c8",
"\u00ca\u00cc\u00ce\u00d0\u00d2\u00d4\u00d6\u00d8\u00da\u00dc\u00de\u00e0",
"\u00e2\u00e4\u00e6\u00e8\u00ea\u00ec\u00ee\u00f0\u00f2\u00f4\u00f6\u00f8",
"\u00fa\u00fc\u00fe\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\u0138\u013a\u013c\u013e\u0140",
"\u0142\u0144\u0146\u0148\u014a\u014c\u014e\u0150\u0152\u0154\u0156\u0158",
"\u015a\u015c\u015e\u0160\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170",
"\u0172\u0174\u0176\u0178\u0002\u000e\u0007\u0002IIKKMMPPUV\u0003\u0002",
"[e\b\u0002\u0011\u0011\u001c\u001c$$**--<<\n\u0002\u0006\b\u0014\u0014",
"\u0019\u0019\u001d\u001d\"#\'(/067\u0003\u0002\u0006\b\u0004\u0002+",
"+..\u0006\u0002\u0015\u0015%%1155\u0005\u0002\n\u000b!!::\u0004\u0002",
"=>ZZ\u0003\u0002=>\u0004\u0002\r\r\u000f\u000f\u0004\u0002\u0010\u0010",
"11\u0002\u0c8d\u0002\u019b\u0003\u0002\u0002\u0002\u0004\u019d\u0003",
"\u0002\u0002\u0002\u0006\u01a4\u0003\u0002\u0002\u0002\b\u01b6\u0003",
"\u0002\u0002\u0002\n\u01da\u0003\u0002\u0002\u0002\f\u01f6\u0003\u0002",
"\u0002\u0002\u000e\u0217\u0003\u0002\u0002\u0002\u0010\u021b\u0003\u0002",
"\u0002\u0002\u0012\u021d\u0003\u0002\u0002\u0002\u0014\u022b\u0003\u0002",
"\u0002\u0002\u0016\u022d\u0003\u0002\u0002\u0002\u0018\u023e\u0003\u0002",
"\u0002\u0002\u001a\u024c\u0003\u0002\u0002\u0002\u001c\u025a\u0003\u0002",
"\u0002\u0002\u001e\u026e\u0003\u0002\u0002\u0002 \u027c\u0003\u0002",
"\u0002\u0002\"\u0287\u0003\u0002\u0002\u0002$\u0292\u0003\u0002\u0002",
"\u0002&\u029d\u0003\u0002\u0002\u0002(\u02a8\u0003\u0002\u0002\u0002",
"*\u02b3\u0003\u0002\u0002\u0002,\u02c0\u0003\u0002\u0002\u0002.\u02c2",
"\u0003\u0002\u0002\u00020\u02c4\u0003\u0002\u0002\u00022\u02cf\u0003",
"\u0002\u0002\u00024\u02da\u0003\u0002\u0002\u00026\u02dc\u0003\u0002",
"\u0002\u00028\u02e6\u0003\u0002\u0002\u0002:\u02eb\u0003\u0002\u0002",
"\u0002<\u02f4\u0003\u0002\u0002\u0002>\u02f6\u0003\u0002\u0002\u0002",
"@\u0306\u0003\u0002\u0002\u0002B\u0308\u0003\u0002\u0002\u0002D\u0318",
"\u0003\u0002\u0002\u0002F\u0323\u0003\u0002\u0002\u0002H\u0325\u0003",
"\u0002\u0002\u0002J\u0327\u0003\u0002\u0002\u0002L\u032b\u0003\u0002",
"\u0002\u0002N\u033c\u0003\u0002\u0002\u0002P\u0346\u0003\u0002\u0002",
"\u0002R\u0348\u0003\u0002\u0002\u0002T\u0359\u0003\u0002\u0002\u0002",
"V\u036e\u0003\u0002\u0002\u0002X\u0370\u0003\u0002\u0002\u0002Z\u0380",
"\u0003\u0002\u0002\u0002\\\u0382\u0003\u0002\u0002\u0002^\u0384\u0003",
"\u0002\u0002\u0002`\u0389\u0003\u0002\u0002\u0002b\u0391\u0003\u0002",
"\u0002\u0002d\u039d\u0003\u0002\u0002\u0002f\u039f\u0003\u0002\u0002",
"\u0002h\u03aa\u0003\u0002\u0002\u0002j\u03b2\u0003\u0002\u0002\u0002",
"l\u03ed\u0003\u0002\u0002\u0002n\u03ef\u0003\u0002\u0002\u0002p\u03ff",
"\u0003\u0002\u0002\u0002r\u040a\u0003\u0002\u0002\u0002t\u0413\u0003",
"\u0002\u0002\u0002v\u0428\u0003\u0002\u0002\u0002x\u042a\u0003\u0002",
"\u0002\u0002z\u0439\u0003\u0002\u0002\u0002|\u043b\u0003\u0002\u0002",
"\u0002~\u044d\u0003\u0002\u0002\u0002\u0080\u044f\u0003\u0002\u0002",
"\u0002\u0082\u045a\u0003\u0002\u0002\u0002\u0084\u0469\u0003\u0002\u0002",
"\u0002\u0086\u0499\u0003\u0002\u0002\u0002\u0088\u04c9\u0003\u0002\u0002",
"\u0002\u008a\u04d5\u0003\u0002\u0002\u0002\u008c\u04d7\u0003\u0002\u0002",
"\u0002\u008e\u04e8\u0003\u0002\u0002\u0002\u0090\u04eb\u0003\u0002\u0002",
"\u0002\u0092\u04fb\u0003\u0002\u0002\u0002\u0094\u04fd\u0003\u0002\u0002",
"\u0002\u0096\u052e\u0003\u0002\u0002\u0002\u0098\u0530\u0003\u0002\u0002",
"\u0002\u009a\u053a\u0003\u0002\u0002\u0002\u009c\u053c\u0003\u0002\u0002",
"\u0002\u009e\u0542\u0003\u0002\u0002\u0002\u00a0\u054f\u0003\u0002\u0002",
"\u0002\u00a2\u0551\u0003\u0002\u0002\u0002\u00a4\u0558\u0003\u0002\u0002",
"\u0002\u00a6\u056b\u0003\u0002\u0002\u0002\u00a8\u056d\u0003\u0002\u0002",
"\u0002\u00aa\u0570\u0003\u0002\u0002\u0002\u00ac\u0572\u0003\u0002\u0002",
"\u0002\u00ae\u0582\u0003\u0002\u0002\u0002\u00b0\u05ae\u0003\u0002\u0002",
"\u0002\u00b2\u05c0\u0003\u0002\u0002\u0002\u00b4\u05c7\u0003\u0002\u0002",
"\u0002\u00b6\u05c9\u0003\u0002\u0002\u0002\u00b8\u05d9\u0003\u0002\u0002",
"\u0002\u00ba\u05dc\u0003\u0002\u0002\u0002\u00bc\u05e4\u0003\u0002\u0002",
"\u0002\u00be\u0617\u0003\u0002\u0002\u0002\u00c0\u0619\u0003\u0002\u0002",
"\u0002\u00c2\u0629\u0003\u0002\u0002\u0002\u00c4\u0635\u0003\u0002\u0002",
"\u0002\u00c6\u067e\u0003\u0002\u0002\u0002\u00c8\u0688\u0003\u0002\u0002",
"\u0002\u00ca\u06b1\u0003\u0002\u0002\u0002\u00cc\u06b9\u0003\u0002\u0002",
"\u0002\u00ce\u06c2\u0003\u0002\u0002\u0002\u00d0\u06d4\u0003\u0002\u0002",
"\u0002\u00d2\u06e8\u0003\u0002\u0002\u0002\u00d4\u06f7\u0003\u0002\u0002",
"\u0002\u00d6\u0706\u0003\u0002\u0002\u0002\u00d8\u071f\u0003\u0002\u0002",
"\u0002\u00da\u072e\u0003\u0002\u0002\u0002\u00dc\u0738\u0003\u0002\u0002",
"\u0002\u00de\u0742\u0003\u0002\u0002\u0002\u00e0\u074c\u0003\u0002\u0002",
"\u0002\u00e2\u0756\u0003\u0002\u0002\u0002\u00e4\u0760\u0003\u0002\u0002",
"\u0002\u00e6\u0762\u0003\u0002\u0002\u0002\u00e8\u0774\u0003\u0002\u0002",
"\u0002\u00ea\u0782\u0003\u0002\u0002\u0002\u00ec\u078c\u0003\u0002\u0002",
"\u0002\u00ee\u078e\u0003\u0002\u0002\u0002\u00f0\u07a0\u0003\u0002\u0002",
"\u0002\u00f2\u07a2\u0003\u0002\u0002\u0002\u00f4\u07ad\u0003\u0002\u0002",
"\u0002\u00f6\u07b4\u0003\u0002\u0002\u0002\u00f8\u07c9\u0003\u0002\u0002",
"\u0002\u00fa\u07d3\u0003\u0002\u0002\u0002\u00fc\u07dd\u0003\u0002\u0002",
"\u0002\u00fe\u07eb\u0003\u0002\u0002\u0002\u0100\u0821\u0003\u0002\u0002",
"\u0002\u0102\u082e\u0003\u0002\u0002\u0002\u0104\u0834\u0003\u0002\u0002",
"\u0002\u0106\u0836\u0003\u0002\u0002\u0002\u0108\u0842\u0003\u0002\u0002",
"\u0002\u010a\u084e\u0003\u0002\u0002\u0002\u010c\u085c\u0003\u0002\u0002",
"\u0002\u010e\u0866\u0003\u0002\u0002\u0002\u0110\u0872\u0003\u0002\u0002",
"\u0002\u0112\u088a\u0003\u0002\u0002\u0002\u0114\u0894\u0003\u0002\u0002",
"\u0002\u0116\u089e\u0003\u0002\u0002\u0002\u0118\u08a0\u0003\u0002\u0002",
"\u0002\u011a\u08a3\u0003\u0002\u0002\u0002\u011c\u08b1\u0003\u0002\u0002",
"\u0002\u011e\u08c4\u0003\u0002\u0002\u0002\u0120\u08d2\u0003\u0002\u0002",
"\u0002\u0122\u08d5\u0003\u0002\u0002\u0002\u0124\u08e6\u0003\u0002\u0002",
"\u0002\u0126\u0923\u0003\u0002\u0002\u0002\u0128\u0931\u0003\u0002\u0002",
"\u0002\u012a\u0933\u0003\u0002\u0002\u0002\u012c\u0946\u0003\u0002\u0002",
"\u0002\u012e\u0952\u0003\u0002\u0002\u0002\u0130\u095b\u0003\u0002\u0002",
"\u0002\u0132\u0975\u0003\u0002\u0002\u0002\u0134\u097e\u0003\u0002\u0002",
"\u0002\u0136\u0988\u0003\u0002\u0002\u0002\u0138\u0992\u0003\u0002\u0002",
"\u0002\u013a\u099e\u0003\u0002\u0002\u0002\u013c\u09a7\u0003\u0002\u0002",
"\u0002\u013e\u09a9\u0003\u0002\u0002\u0002\u0140\u09be\u0003\u0002\u0002",
"\u0002\u0142\u0a25\u0003\u0002\u0002\u0002\u0144\u0a27\u0003\u0002\u0002",
"\u0002\u0146\u0a38\u0003\u0002\u0002\u0002\u0148\u0a48\u0003\u0002\u0002",
"\u0002\u014a\u0a4a\u0003\u0002\u0002\u0002\u014c\u0a55\u0003\u0002\u0002",
"\u0002\u014e\u0a5f\u0003\u0002\u0002\u0002\u0150\u0a61\u0003\u0002\u0002",
"\u0002\u0152\u0aa0\u0003\u0002\u0002\u0002\u0154\u0aa2\u0003\u0002\u0002",
"\u0002\u0156\u0ab2\u0003\u0002\u0002\u0002\u0158\u0ab4\u0003\u0002\u0002",
"\u0002\u015a\u0ac2\u0003\u0002\u0002\u0002\u015c\u0ad1\u0003\u0002\u0002",
"\u0002\u015e\u0ad3\u0003\u0002\u0002\u0002\u0160\u0adb\u0003\u0002\u0002",
"\u0002\u0162\u0af2\u0003\u0002\u0002\u0002\u0164\u0af4\u0003\u0002\u0002",
"\u0002\u0166\u0af8\u0003\u0002\u0002\u0002\u0168\u0b02\u0003\u0002\u0002",
"\u0002\u016a\u0b0d\u0003\u0002\u0002\u0002\u016c\u0b3e\u0003\u0002\u0002",
"\u0002\u016e\u0b55\u0003\u0002\u0002\u0002\u0170\u0b5c\u0003\u0002\u0002",
"\u0002\u0172\u0b65\u0003\u0002\u0002\u0002\u0174\u0b6f\u0003\u0002\u0002",
"\u0002\u0176\u0b72\u0003\u0002\u0002\u0002\u0178\u0b82\u0003\u0002\u0002",
"\u0002\u017a\u019c\u0007k\u0002\u0002\u017b\u019c\u0007l\u0002\u0002",
"\u017c\u017e\u0007m\u0002\u0002\u017d\u017c\u0003\u0002\u0002\u0002",
"\u017e\u017f\u0003\u0002\u0002\u0002\u017f\u017d\u0003\u0002\u0002\u0002",
"\u017f\u0180\u0003\u0002\u0002\u0002\u0180\u019c\u0003\u0002\u0002\u0002",
"\u0181\u0182\u0007=\u0002\u0002\u0182\u0183\u00050\u0019\u0002\u0183",
"\u0184\u0007>\u0002\u0002\u0184\u019c\u0003\u0002\u0002\u0002\u0185",
"\u019c\u0005\u0004\u0003\u0002\u0186\u0188\u0007\u0003\u0002\u0002\u0187",
"\u0186\u0003\u0002\u0002\u0002\u0187\u0188\u0003\u0002\u0002\u0002\u0188",
"\u0189\u0003\u0002\u0002\u0002\u0189\u018a\u0007=\u0002\u0002\u018a",
"\u018b\u0005\u009cO\u0002\u018b\u018c\u0007>\u0002\u0002\u018c\u019c",
"\u0003\u0002\u0002\u0002\u018d\u018e\u0007\u0004\u0002\u0002\u018e\u018f",
"\u0007=\u0002\u0002\u018f\u0190\u0005\u000e\b\u0002\u0190\u0191\u0007",
"Z\u0002\u0002\u0191\u0192\u0005\u0082B\u0002\u0192\u0193\u0007>\u0002",
"\u0002\u0193\u019c\u0003\u0002\u0002\u0002\u0194\u0195\u0007\u0005\u0002",
"\u0002\u0195\u0196\u0007=\u0002\u0002\u0196\u0197\u0005\u0082B\u0002",
"\u0197\u0198\u0007Z\u0002\u0002\u0198\u0199\u0005\u000e\b\u0002\u0199",
"\u019a\u0007>\u0002\u0002\u019a\u019c\u0003\u0002\u0002\u0002\u019b",
"\u017a\u0003\u0002\u0002\u0002\u019b\u017b\u0003\u0002\u0002\u0002\u019b",
"\u017d\u0003\u0002\u0002\u0002\u019b\u0181\u0003\u0002\u0002\u0002\u019b",
"\u0185\u0003\u0002\u0002\u0002\u019b\u0187\u0003\u0002\u0002\u0002\u019b",
"\u018d\u0003\u0002\u0002\u0002\u019b\u0194\u0003\u0002\u0002\u0002\u019c",
"\u0003\u0003\u0002\u0002\u0002\u019d\u019e\u00078\u0002\u0002\u019e",
"\u019f\u0007=\u0002\u0002\u019f\u01a0\u0005,\u0017\u0002\u01a0\u01a1",
"\u0007Z\u0002\u0002\u01a1\u01a2\u0005\u0006\u0004\u0002\u01a2\u01a3",
"\u0007>\u0002\u0002\u01a3\u0005\u0003\u0002\u0002\u0002\u01a4\u01a5",
"\b\u0004\u0001\u0002\u01a5\u01a6\u0005\b\u0005\u0002\u01a6\u01ac\u0003",
"\u0002\u0002\u0002\u01a7\u01a8\f\u0003\u0002\u0002\u01a8\u01a9\u0007",
"Z\u0002\u0002\u01a9\u01ab\u0005\b\u0005\u0002\u01aa\u01a7\u0003\u0002",
"\u0002\u0002\u01ab\u01ae\u0003\u0002\u0002\u0002\u01ac\u01aa\u0003\u0002",
"\u0002\u0002\u01ac\u01ad\u0003\u0002\u0002\u0002\u01ad\u0007\u0003\u0002",
"\u0002\u0002\u01ae\u01ac\u0003\u0002\u0002\u0002\u01af\u01b0\u0005\u0082",
"B\u0002\u01b0\u01b1\u0007X\u0002\u0002\u01b1\u01b2\u0005,\u0017\u0002",
"\u01b2\u01b7\u0003\u0002\u0002\u0002\u01b3\u01b4\u0007\u0017\u0002\u0002",
"\u01b4\u01b5\u0007X\u0002\u0002\u01b5\u01b7\u0005,\u0017\u0002\u01b6",
"\u01af\u0003\u0002\u0002\u0002\u01b6\u01b3\u0003\u0002\u0002\u0002\u01b7",
"\t\u0003\u0002\u0002\u0002\u01b8\u01b9\b\u0006\u0001\u0002\u01b9\u01db",
"\u0005\u0002\u0002\u0002\u01ba\u01bb\u0007=\u0002\u0002\u01bb\u01bc",
"\u0005\u0082B\u0002\u01bc\u01bd\u0007>\u0002\u0002\u01bd\u01be\u0007",
"A\u0002\u0002\u01be\u01bf\u0005\u008cG\u0002\u01bf\u01c0\u0007B\u0002",
"\u0002\u01c0\u01db\u0003\u0002\u0002\u0002\u01c1\u01c2\u0007=\u0002",
"\u0002\u01c2\u01c3\u0005\u0082B\u0002\u01c3\u01c4\u0007>\u0002\u0002",
"\u01c4\u01c5\u0007A\u0002\u0002\u01c5\u01c6\u0005\u008cG\u0002\u01c6",
"\u01c7\u0007Z\u0002\u0002\u01c7\u01c8\u0007B\u0002\u0002\u01c8\u01db",
"\u0003\u0002\u0002\u0002\u01c9\u01ca\u0007\u0003\u0002\u0002\u01ca\u01cb",
"\u0007=\u0002\u0002\u01cb\u01cc\u0005\u0082B\u0002\u01cc\u01cd\u0007",
">\u0002\u0002\u01cd\u01ce\u0007A\u0002\u0002\u01ce\u01cf\u0005\u008c",
"G\u0002\u01cf\u01d0\u0007B\u0002\u0002\u01d0\u01db\u0003\u0002\u0002",
"\u0002\u01d1\u01d2\u0007\u0003\u0002\u0002\u01d2\u01d3\u0007=\u0002",
"\u0002\u01d3\u01d4\u0005\u0082B\u0002\u01d4\u01d5\u0007>\u0002\u0002",
"\u01d5\u01d6\u0007A\u0002\u0002\u01d6\u01d7\u0005\u008cG\u0002\u01d7",
"\u01d8\u0007Z\u0002\u0002\u01d8\u01d9\u0007B\u0002\u0002\u01d9\u01db",
"\u0003\u0002\u0002\u0002\u01da\u01b8\u0003\u0002\u0002\u0002\u01da\u01ba",
"\u0003\u0002\u0002\u0002\u01da\u01c1\u0003\u0002\u0002\u0002\u01da\u01c9",
"\u0003\u0002\u0002\u0002\u01da\u01d1\u0003\u0002\u0002\u0002\u01db\u01f3",
"\u0003\u0002\u0002\u0002\u01dc\u01dd\f\f\u0002\u0002\u01dd\u01de\u0007",
"?\u0002\u0002\u01de\u01df\u00050\u0019\u0002\u01df\u01e0\u0007@\u0002",
"\u0002\u01e0\u01f2\u0003\u0002\u0002\u0002\u01e1\u01e2\f\u000b\u0002",
"\u0002\u01e2\u01e4\u0007=\u0002\u0002\u01e3\u01e5\u0005\f\u0007\u0002",
"\u01e4\u01e3\u0003\u0002\u0002\u0002\u01e4\u01e5\u0003\u0002\u0002\u0002",
"\u01e5\u01e6\u0003\u0002\u0002\u0002\u01e6\u01f2\u0007>\u0002\u0002",
"\u01e7\u01e8\f\n\u0002\u0002\u01e8\u01e9\u0007i\u0002\u0002\u01e9\u01f2",
"\u0007k\u0002\u0002\u01ea\u01eb\f\t\u0002\u0002\u01eb\u01ec\u0007h\u0002",
"\u0002\u01ec\u01f2\u0007k\u0002\u0002\u01ed\u01ee\f\b\u0002\u0002\u01ee",
"\u01f2\u0007J\u0002\u0002\u01ef\u01f0\f\u0007\u0002\u0002\u01f0\u01f2",
"\u0007L\u0002\u0002\u01f1\u01dc\u0003\u0002\u0002\u0002\u01f1\u01e1",
"\u0003\u0002\u0002\u0002\u01f1\u01e7\u0003\u0002\u0002\u0002\u01f1\u01ea",
"\u0003\u0002\u0002\u0002\u01f1\u01ed\u0003\u0002\u0002\u0002\u01f1\u01ef",
"\u0003\u0002\u0002\u0002\u01f2\u01f5\u0003\u0002\u0002\u0002\u01f3\u01f1",
"\u0003\u0002\u0002\u0002\u01f3\u01f4\u0003\u0002\u0002\u0002\u01f4\u000b",
"\u0003\u0002\u0002\u0002\u01f5\u01f3\u0003\u0002\u0002\u0002\u01f6\u01f7",
"\b\u0007\u0001\u0002\u01f7\u01f8\u0005,\u0017\u0002\u01f8\u01fe\u0003",
"\u0002\u0002\u0002\u01f9\u01fa\f\u0003\u0002\u0002\u01fa\u01fb\u0007",
"Z\u0002\u0002\u01fb\u01fd\u0005,\u0017\u0002\u01fc\u01f9\u0003\u0002",
"\u0002\u0002\u01fd\u0200\u0003\u0002\u0002\u0002\u01fe\u01fc\u0003\u0002",
"\u0002\u0002\u01fe\u01ff\u0003\u0002\u0002\u0002\u01ff\r\u0003\u0002",
"\u0002\u0002\u0200\u01fe\u0003\u0002\u0002\u0002\u0201\u0218\u0005\n",
"\u0006\u0002\u0202\u0203\u0007J\u0002\u0002\u0203\u0218\u0005\u000e",
"\b\u0002\u0204\u0205\u0007L\u0002\u0002\u0205\u0218\u0005\u000e\b\u0002",
"\u0206\u0207\u0005\u0012\n\u0002\u0207\u0208\u0005\u0014\u000b\u0002",
"\u0208\u0218\u0003\u0002\u0002\u0002\u0209\u020a\u0007)\u0002\u0002",
"\u020a\u020b\u0007=\u0002\u0002\u020b\u020c\u0005\u0010\t\u0002\u020c",
"\u020d\u0007>\u0002\u0002\u020d\u0218\u0003\u0002\u0002\u0002\u020e",
"\u020f\u0007)\u0002\u0002\u020f\u0218\u0005\u000e\b\u0002\u0210\u0211",
"\u00074\u0002\u0002\u0211\u0212\u0007=\u0002\u0002\u0212\u0213\u0005",
"\u0082B\u0002\u0213\u0214\u0007>\u0002\u0002\u0214\u0218\u0003\u0002",
"\u0002\u0002\u0215\u0216\u0007R\u0002\u0002\u0216\u0218\u0007k\u0002",
"\u0002\u0217\u0201\u0003\u0002\u0002\u0002\u0217\u0202\u0003\u0002\u0002",
"\u0002\u0217\u0204\u0003\u0002\u0002\u0002\u0217\u0206\u0003\u0002\u0002",
"\u0002\u0217\u0209\u0003\u0002\u0002\u0002\u0217\u020e\u0003\u0002\u0002",
"\u0002\u0217\u0210\u0003\u0002\u0002\u0002\u0217\u0215\u0003\u0002\u0002",
"\u0002\u0218\u000f\u0003\u0002\u0002\u0002\u0219\u021c\u0005\u0082B",
"\u0002\u021a\u021c\u00050\u0019\u0002\u021b\u0219\u0003\u0002\u0002",
"\u0002\u021b\u021a\u0003\u0002\u0002\u0002\u021c\u0011\u0003\u0002\u0002",
"\u0002\u021d\u021e\t\u0002\u0002\u0002\u021e\u0013\u0003\u0002\u0002",
"\u0002\u021f\u022c\u0005\u000e\b\u0002\u0220\u0221\u0007=\u0002\u0002",
"\u0221\u0222\u0005\u0082B\u0002\u0222\u0223\u0007>\u0002\u0002\u0223",
"\u0224\u0005\u0014\u000b\u0002\u0224\u022c\u0003\u0002\u0002\u0002\u0225",
"\u0226\u0007\u0003\u0002\u0002\u0226\u0227\u0007=\u0002\u0002\u0227",
"\u0228\u0005\u0082B\u0002\u0228\u0229\u0007>\u0002\u0002\u0229\u022a",
"\u0005\u0014\u000b\u0002\u022a\u022c\u0003\u0002\u0002\u0002\u022b\u021f",
"\u0003\u0002\u0002\u0002\u022b\u0220\u0003\u0002\u0002\u0002\u022b\u0225",
"\u0003\u0002\u0002\u0002\u022c\u0015\u0003\u0002\u0002\u0002\u022d\u022e",
"\b\f\u0001\u0002\u022e\u022f\u0005\u0014\u000b\u0002\u022f\u023b\u0003",
"\u0002\u0002\u0002\u0230\u0231\f\u0005\u0002\u0002\u0231\u0232\u0007",
"M\u0002\u0002\u0232\u023a\u0005\u0014\u000b\u0002\u0233\u0234\f\u0004",
"\u0002\u0002\u0234\u0235\u0007N\u0002\u0002\u0235\u023a\u0005\u0014",
"\u000b\u0002\u0236\u0237\f\u0003\u0002\u0002\u0237\u0238\u0007O\u0002",
"\u0002\u0238\u023a\u0005\u0014\u000b\u0002\u0239\u0230\u0003\u0002\u0002",
"\u0002\u0239\u0233\u0003\u0002\u0002\u0002\u0239\u0236\u0003\u0002\u0002",
"\u0002\u023a\u023d\u0003\u0002\u0002\u0002\u023b\u0239\u0003\u0002\u0002",
"\u0002\u023b\u023c\u0003\u0002\u0002\u0002\u023c\u0017\u0003\u0002\u0002",
"\u0002\u023d\u023b\u0003\u0002\u0002\u0002\u023e\u023f\b\r\u0001\u0002",
"\u023f\u0240\u0005\u0016\f\u0002\u0240\u0249\u0003\u0002\u0002\u0002",
"\u0241\u0242\f\u0004\u0002\u0002\u0242\u0243\u0007I\u0002\u0002\u0243",
"\u0248\u0005\u0016\f\u0002\u0244\u0245\f\u0003\u0002\u0002\u0245\u0246",
"\u0007K\u0002\u0002\u0246\u0248\u0005\u0016\f\u0002\u0247\u0241\u0003",
"\u0002\u0002\u0002\u0247\u0244\u0003\u0002\u0002\u0002\u0248\u024b\u0003",
"\u0002\u0002\u0002\u0249\u0247\u0003\u0002\u0002\u0002\u0249\u024a\u0003",
"\u0002\u0002\u0002\u024a\u0019\u0003\u0002\u0002\u0002\u024b\u0249\u0003",
"\u0002\u0002\u0002\u024c\u024d\b\u000e\u0001\u0002\u024d\u024e\u0005",
"\u0018\r\u0002\u024e\u0257\u0003\u0002\u0002\u0002\u024f\u0250\f\u0004",
"\u0002\u0002\u0250\u0251\u0007G\u0002\u0002\u0251\u0256\u0005\u0018",
"\r\u0002\u0252\u0253\f\u0003\u0002\u0002\u0253\u0254\u0007H\u0002\u0002",
"\u0254\u0256\u0005\u0018\r\u0002\u0255\u024f\u0003\u0002\u0002\u0002",
"\u0255\u0252\u0003\u0002\u0002\u0002\u0256\u0259\u0003\u0002\u0002\u0002",
"\u0257\u0255\u0003\u0002\u0002\u0002\u0257\u0258\u0003\u0002\u0002\u0002",
"\u0258\u001b\u0003\u0002\u0002\u0002\u0259\u0257\u0003\u0002\u0002\u0002",
"\u025a\u025b\b\u000f\u0001\u0002\u025b\u025c\u0005\u001a\u000e\u0002",
"\u025c\u026b\u0003\u0002\u0002\u0002\u025d\u025e\f\u0006\u0002\u0002",
"\u025e\u025f\u0007C\u0002\u0002\u025f\u026a\u0005\u001a\u000e\u0002",
"\u0260\u0261\f\u0005\u0002\u0002\u0261\u0262\u0007E\u0002\u0002\u0262",
"\u026a\u0005\u001a\u000e\u0002\u0263\u0264\f\u0004\u0002\u0002\u0264",
"\u0265\u0007D\u0002\u0002\u0265\u026a\u0005\u001a\u000e\u0002\u0266",
"\u0267\f\u0003\u0002\u0002\u0267\u0268\u0007F\u0002\u0002\u0268\u026a",
"\u0005\u001a\u000e\u0002\u0269\u025d\u0003\u0002\u0002\u0002\u0269\u0260",
"\u0003\u0002\u0002\u0002\u0269\u0263\u0003\u0002\u0002\u0002\u0269\u0266",
"\u0003\u0002\u0002\u0002\u026a\u026d\u0003\u0002\u0002\u0002\u026b\u0269",
"\u0003\u0002\u0002\u0002\u026b\u026c\u0003\u0002\u0002\u0002\u026c\u001d",
"\u0003\u0002\u0002\u0002\u026d\u026b\u0003\u0002\u0002\u0002\u026e\u026f",
"\b\u0010\u0001\u0002\u026f\u0270\u0005\u001c\u000f\u0002\u0270\u0279",
"\u0003\u0002\u0002\u0002\u0271\u0272\f\u0004\u0002\u0002\u0272\u0273",
"\u0007f\u0002\u0002\u0273\u0278\u0005\u001c\u000f\u0002\u0274\u0275",
"\f\u0003\u0002\u0002\u0275\u0276\u0007g\u0002\u0002\u0276\u0278\u0005",
"\u001c\u000f\u0002\u0277\u0271\u0003\u0002\u0002\u0002\u0277\u0274\u0003",
"\u0002\u0002\u0002\u0278\u027b\u0003\u0002\u0002\u0002\u0279\u0277\u0003",
"\u0002\u0002\u0002\u0279\u027a\u0003\u0002\u0002\u0002\u027a\u001f\u0003",
"\u0002\u0002\u0002\u027b\u0279\u0003\u0002\u0002\u0002\u027c\u027d\b",
"\u0011\u0001\u0002\u027d\u027e\u0005\u001e\u0010\u0002\u027e\u0284\u0003",
"\u0002\u0002\u0002\u027f\u0280\f\u0003\u0002\u0002\u0280\u0281\u0007",
"P\u0002\u0002\u0281\u0283\u0005\u001e\u0010\u0002\u0282\u027f\u0003",
"\u0002\u0002\u0002\u0283\u0286\u0003\u0002\u0002\u0002\u0284\u0282\u0003",
"\u0002\u0002\u0002\u0284\u0285\u0003\u0002\u0002\u0002\u0285!\u0003",
"\u0002\u0002\u0002\u0286\u0284\u0003\u0002\u0002\u0002\u0287\u0288\b",
"\u0012\u0001\u0002\u0288\u0289\u0005 \u0011\u0002\u0289\u028f\u0003",
"\u0002\u0002\u0002\u028a\u028b\f\u0003\u0002\u0002\u028b\u028c\u0007",
"T\u0002\u0002\u028c\u028e\u0005 \u0011\u0002\u028d\u028a\u0003\u0002",
"\u0002\u0002\u028e\u0291\u0003\u0002\u0002\u0002\u028f\u028d\u0003\u0002",
"\u0002\u0002\u028f\u0290\u0003\u0002\u0002\u0002\u0290#\u0003\u0002",
"\u0002\u0002\u0291\u028f\u0003\u0002\u0002\u0002\u0292\u0293\b\u0013",
"\u0001\u0002\u0293\u0294\u0005\"\u0012\u0002\u0294\u029a\u0003\u0002",
"\u0002\u0002\u0295\u0296\f\u0003\u0002\u0002\u0296\u0297\u0007Q\u0002",
"\u0002\u0297\u0299\u0005\"\u0012\u0002\u0298\u0295\u0003\u0002\u0002",
"\u0002\u0299\u029c\u0003\u0002\u0002\u0002\u029a\u0298\u0003\u0002\u0002",
"\u0002\u029a\u029b\u0003\u0002\u0002\u0002\u029b%\u0003\u0002\u0002",
"\u0002\u029c\u029a\u0003\u0002\u0002\u0002\u029d\u029e\b\u0014\u0001",
"\u0002\u029e\u029f\u0005$\u0013\u0002\u029f\u02a5\u0003\u0002\u0002",
"\u0002\u02a0\u02a1\f\u0003\u0002\u0002\u02a1\u02a2\u0007R\u0002\u0002",
"\u02a2\u02a4\u0005$\u0013\u0002\u02a3\u02a0\u0003\u0002\u0002\u0002",
"\u02a4\u02a7\u0003\u0002\u0002\u0002\u02a5\u02a3\u0003\u0002\u0002\u0002",
"\u02a5\u02a6\u0003\u0002\u0002\u0002\u02a6\'\u0003\u0002\u0002\u0002",
"\u02a7\u02a5\u0003\u0002\u0002\u0002\u02a8\u02a9\b\u0015\u0001\u0002",
"\u02a9\u02aa\u0005&\u0014\u0002\u02aa\u02b0\u0003\u0002\u0002\u0002",
"\u02ab\u02ac\f\u0003\u0002\u0002\u02ac\u02ad\u0007S\u0002\u0002\u02ad",
"\u02af\u0005&\u0014\u0002\u02ae\u02ab\u0003\u0002\u0002\u0002\u02af",
"\u02b2\u0003\u0002\u0002\u0002\u02b0\u02ae\u0003\u0002\u0002\u0002\u02b0",
"\u02b1\u0003\u0002\u0002\u0002\u02b1)\u0003\u0002\u0002\u0002\u02b2",
"\u02b0\u0003\u0002\u0002\u0002\u02b3\u02b9\u0005(\u0015\u0002\u02b4",
"\u02b5\u0007W\u0002\u0002\u02b5\u02b6\u00050\u0019\u0002\u02b6\u02b7",
"\u0007X\u0002\u0002\u02b7\u02b8\u0005*\u0016\u0002\u02b8\u02ba\u0003",
"\u0002\u0002\u0002\u02b9\u02b4\u0003\u0002\u0002\u0002\u02b9\u02ba\u0003",
"\u0002\u0002\u0002\u02ba+\u0003\u0002\u0002\u0002\u02bb\u02c1\u0005",
"*\u0016\u0002\u02bc\u02bd\u0005\u000e\b\u0002\u02bd\u02be\u0005.\u0018",
"\u0002\u02be\u02bf\u0005,\u0017\u0002\u02bf\u02c1\u0003\u0002\u0002",
"\u0002\u02c0\u02bb\u0003\u0002\u0002\u0002\u02c0\u02bc\u0003\u0002\u0002",
"\u0002\u02c1-\u0003\u0002\u0002\u0002\u02c2\u02c3\t\u0003\u0002\u0002",
"\u02c3/\u0003\u0002\u0002\u0002\u02c4\u02c5\b\u0019\u0001\u0002\u02c5",
"\u02c6\u0005,\u0017\u0002\u02c6\u02cc\u0003\u0002\u0002\u0002\u02c7",
"\u02c8\f\u0003\u0002\u0002\u02c8\u02c9\u0007Z\u0002\u0002\u02c9\u02cb",
"\u0005,\u0017\u0002\u02ca\u02c7\u0003\u0002\u0002\u0002\u02cb\u02ce",
"\u0003\u0002\u0002\u0002\u02cc\u02ca\u0003\u0002\u0002\u0002\u02cc\u02cd",
"\u0003\u0002\u0002\u0002\u02cd1\u0003\u0002\u0002\u0002\u02ce\u02cc",
"\u0003\u0002\u0002\u0002\u02cf\u02d0\u0005*\u0016\u0002\u02d03\u0003",
"\u0002\u0002\u0002\u02d1\u02db\u00056\u001c\u0002\u02d2\u02d3\u0005",
"8\u001d\u0002\u02d3\u02d4\u0005> \u0002\u02d4\u02d5\u0007Y\u0002\u0002",
"\u02d5\u02db\u0003\u0002\u0002\u0002\u02d6\u02d7\u00058\u001d\u0002",
"\u02d7\u02d8\u0007Y\u0002\u0002\u02d8\u02db\u0003\u0002\u0002\u0002",
"\u02d9\u02db\u0005\u0094K\u0002\u02da\u02d1\u0003\u0002\u0002\u0002",
"\u02da\u02d2\u0003\u0002\u0002\u0002\u02da\u02d6\u0003\u0002\u0002\u0002",
"\u02da\u02d9\u0003\u0002\u0002\u0002\u02db5\u0003\u0002\u0002\u0002",
"\u02dc\u02dd\u00058\u001d\u0002\u02dd\u02de\u0005j6\u0002\u02de\u02e0",
"\u0007=\u0002\u0002\u02df\u02e1\u0005z>\u0002\u02e0\u02df\u0003\u0002",
"\u0002\u0002\u02e0\u02e1\u0003\u0002\u0002\u0002\u02e1\u02e2\u0003\u0002",
"\u0002\u0002\u02e2\u02e3\u0007>\u0002\u0002\u02e3\u02e4\u0007Y\u0002",
"\u0002\u02e47\u0003\u0002\u0002\u0002\u02e5\u02e7\u0005<\u001f\u0002",
"\u02e6\u02e5\u0003\u0002\u0002\u0002\u02e7\u02e8\u0003\u0002\u0002\u0002",
"\u02e8\u02e6\u0003\u0002\u0002\u0002\u02e8\u02e9\u0003\u0002\u0002\u0002",
"\u02e99\u0003\u0002\u0002\u0002\u02ea\u02ec\u0005<\u001f\u0002\u02eb",
"\u02ea\u0003\u0002\u0002\u0002\u02ec\u02ed\u0003\u0002\u0002\u0002\u02ed",
"\u02eb\u0003\u0002\u0002\u0002\u02ed\u02ee\u0003\u0002\u0002\u0002\u02ee",
";\u0003\u0002\u0002\u0002\u02ef\u02f5\u0005B\"\u0002\u02f0\u02f5\u0005",
"D#\u0002\u02f1\u02f5\u0005`1\u0002\u02f2\u02f5\u0005b2\u0002\u02f3\u02f5",
"\u0005d3\u0002\u02f4\u02ef\u0003\u0002\u0002\u0002\u02f4\u02f0\u0003",
"\u0002\u0002\u0002\u02f4\u02f1\u0003\u0002\u0002\u0002\u02f4\u02f2\u0003",
"\u0002\u0002\u0002\u02f4\u02f3\u0003\u0002\u0002\u0002\u02f5=\u0003",
"\u0002\u0002\u0002\u02f6\u02f7\b \u0001\u0002\u02f7\u02f8\u0005@!\u0002",
"\u02f8\u02fe\u0003\u0002\u0002\u0002\u02f9\u02fa\f\u0003\u0002\u0002",
"\u02fa\u02fb\u0007Z\u0002\u0002\u02fb\u02fd\u0005@!\u0002\u02fc\u02f9",
"\u0003\u0002\u0002\u0002\u02fd\u0300\u0003\u0002\u0002\u0002\u02fe\u02fc",
"\u0003\u0002\u0002\u0002\u02fe\u02ff\u0003\u0002\u0002\u0002\u02ff?",
"\u0003\u0002\u0002\u0002\u0300\u02fe\u0003\u0002\u0002\u0002\u0301\u0307",
"\u0005f4\u0002\u0302\u0303\u0005f4\u0002\u0303\u0304\u0007[\u0002\u0002",
"\u0304\u0305\u0005\u008aF\u0002\u0305\u0307\u0003\u0002\u0002\u0002",
"\u0306\u0301\u0003\u0002\u0002\u0002\u0306\u0302\u0003\u0002\u0002\u0002",
"\u0307A\u0003\u0002\u0002\u0002\u0308\u0309\t\u0004\u0002\u0002\u0309",
"C\u0003\u0002\u0002\u0002\u030a\u0319\t\u0005\u0002\u0002\u030b\u030c",
"\u0007\u0003\u0002\u0002\u030c\u030d\u0007=\u0002\u0002\u030d\u030e",
"\t\u0006\u0002\u0002\u030e\u0319\u0007>\u0002\u0002\u030f\u0319\u0005",
"^0\u0002\u0310\u0319\u0005F$\u0002\u0311\u0319\u0005V,\u0002\u0312\u0319",
"\u0005\u0088E\u0002\u0313\u0314\u0007\t\u0002\u0002\u0314\u0315\u0007",
"=\u0002\u0002\u0315\u0316\u00052\u001a\u0002\u0316\u0317\u0007>\u0002",
"\u0002\u0317\u0319\u0003\u0002\u0002\u0002\u0318\u030a\u0003\u0002\u0002",
"\u0002\u0318\u030b\u0003\u0002\u0002\u0002\u0318\u030f\u0003\u0002\u0002",
"\u0002\u0318\u0310\u0003\u0002\u0002\u0002\u0318\u0311\u0003\u0002\u0002",
"\u0002\u0318\u0312\u0003\u0002\u0002\u0002\u0318\u0313\u0003\u0002\u0002",
"\u0002\u0319E\u0003\u0002\u0002\u0002\u031a\u031c\u0005H%\u0002\u031b",
"\u031d\u0007k\u0002\u0002\u031c\u031b\u0003\u0002\u0002\u0002\u031c",
"\u031d\u0003\u0002\u0002\u0002\u031d\u031e\u0003\u0002\u0002\u0002\u031e",
"\u031f\u0005J&\u0002\u031f\u0324\u0003\u0002\u0002\u0002\u0320\u0321",
"\u0005H%\u0002\u0321\u0322\u0007k\u0002\u0002\u0322\u0324\u0003\u0002",
"\u0002\u0002\u0323\u031a\u0003\u0002\u0002\u0002\u0323\u0320\u0003\u0002",
"\u0002\u0002\u0324G\u0003\u0002\u0002\u0002\u0325\u0326\t\u0007\u0002",
"\u0002\u0326I\u0003\u0002\u0002\u0002\u0327\u0328\u0007A\u0002\u0002",
"\u0328\u0329\u0005L\'\u0002\u0329\u032a\u0007B\u0002\u0002\u032aK\u0003",
"\u0002\u0002\u0002\u032b\u032c\b\'\u0001\u0002\u032c\u032d\u0005N(\u0002",
"\u032d\u0332\u0003\u0002\u0002\u0002\u032e\u032f\f\u0003\u0002\u0002",
"\u032f\u0331\u0005N(\u0002\u0330\u032e\u0003\u0002\u0002\u0002\u0331",
"\u0334\u0003\u0002\u0002\u0002\u0332\u0330\u0003\u0002\u0002\u0002\u0332",
"\u0333\u0003\u0002\u0002\u0002\u0333M\u0003\u0002\u0002\u0002\u0334",
"\u0332\u0003\u0002\u0002\u0002\u0335\u0337\u0005P)\u0002\u0336\u0335",
"\u0003\u0002\u0002\u0002\u0336\u0337\u0003\u0002\u0002\u0002\u0337\u0338",
"\u0003\u0002\u0002\u0002\u0338\u0339\u0005R*\u0002\u0339\u033a\u0007",
"Y\u0002\u0002\u033a\u033d\u0003\u0002\u0002\u0002\u033b\u033d\u0005",
"\u0094K\u0002\u033c\u0336\u0003\u0002\u0002\u0002\u033c\u033b\u0003",
"\u0002\u0002\u0002\u033dO\u0003\u0002\u0002\u0002\u033e\u0340\u0005",
"D#\u0002\u033f\u0341\u0005P)\u0002\u0340\u033f\u0003\u0002\u0002\u0002",
"\u0340\u0341\u0003\u0002\u0002\u0002\u0341\u0347\u0003\u0002\u0002\u0002",
"\u0342\u0344\u0005`1\u0002\u0343\u0345\u0005P)\u0002\u0344\u0343\u0003",
"\u0002\u0002\u0002\u0344\u0345\u0003\u0002\u0002\u0002\u0345\u0347\u0003",
"\u0002\u0002\u0002\u0346\u033e\u0003\u0002\u0002\u0002\u0346\u0342\u0003",
"\u0002\u0002\u0002\u0347Q\u0003\u0002\u0002\u0002\u0348\u0349\b*\u0001",
"\u0002\u0349\u034a\u0005T+\u0002\u034a\u0350\u0003\u0002\u0002\u0002",
"\u034b\u034c\f\u0003\u0002\u0002\u034c\u034d\u0007Z\u0002\u0002\u034d",
"\u034f\u0005T+\u0002\u034e\u034b\u0003\u0002\u0002\u0002\u034f\u0352",
"\u0003\u0002\u0002\u0002\u0350\u034e\u0003\u0002\u0002\u0002\u0350\u0351",
"\u0003\u0002\u0002\u0002\u0351S\u0003\u0002\u0002\u0002\u0352\u0350",
"\u0003\u0002\u0002\u0002\u0353\u035a\u0005f4\u0002\u0354\u0356\u0005",
"f4\u0002\u0355\u0354\u0003\u0002\u0002\u0002\u0355\u0356\u0003\u0002",
"\u0002\u0002\u0356\u0357\u0003\u0002\u0002\u0002\u0357\u0358\u0007X",
"\u0002\u0002\u0358\u035a\u00052\u001a\u0002\u0359\u0353\u0003\u0002",
"\u0002\u0002\u0359\u0355\u0003\u0002\u0002\u0002\u035aU\u0003\u0002",
"\u0002\u0002\u035b\u035d\u0007\u001b\u0002\u0002\u035c\u035e\u0007k",
"\u0002\u0002\u035d\u035c\u0003\u0002\u0002\u0002\u035d\u035e\u0003\u0002",
"\u0002\u0002\u035e\u035f\u0003\u0002\u0002\u0002\u035f\u0360\u0007A",
"\u0002\u0002\u0360\u0361\u0005X-\u0002\u0361\u0362\u0007B\u0002\u0002",
"\u0362\u036f\u0003\u0002\u0002\u0002\u0363\u0365\u0007\u001b\u0002\u0002",
"\u0364\u0366\u0007k\u0002\u0002\u0365\u0364\u0003\u0002\u0002\u0002",
"\u0365\u0366\u0003\u0002\u0002\u0002\u0366\u0367\u0003\u0002\u0002\u0002",
"\u0367\u0368\u0007A\u0002\u0002\u0368\u0369\u0005X-\u0002\u0369\u036a",
"\u0007Z\u0002\u0002\u036a\u036b\u0007B\u0002\u0002\u036b\u036f\u0003",
"\u0002\u0002\u0002\u036c\u036d\u0007\u001b\u0002\u0002\u036d\u036f\u0007",
"k\u0002\u0002\u036e\u035b\u0003\u0002\u0002\u0002\u036e\u0363\u0003",
"\u0002\u0002\u0002\u036e\u036c\u0003\u0002\u0002\u0002\u036fW\u0003",
"\u0002\u0002\u0002\u0370\u0371\b-\u0001\u0002\u0371\u0372\u0005Z.\u0002",
"\u0372\u0378\u0003\u0002\u0002\u0002\u0373\u0374\f\u0003\u0002\u0002",
"\u0374\u0375\u0007Z\u0002\u0002\u0375\u0377\u0005Z.\u0002\u0376\u0373",
"\u0003\u0002\u0002\u0002\u0377\u037a\u0003\u0002\u0002\u0002\u0378\u0376",
"\u0003\u0002\u0002\u0002\u0378\u0379\u0003\u0002\u0002\u0002\u0379Y",
"\u0003\u0002\u0002\u0002\u037a\u0378\u0003\u0002\u0002\u0002\u037b\u0381",
"\u0005\\/\u0002\u037c\u037d\u0005\\/\u0002\u037d\u037e\u0007[\u0002",
"\u0002\u037e\u037f\u00052\u001a\u0002\u037f\u0381\u0003\u0002\u0002",
"\u0002\u0380\u037b\u0003\u0002\u0002\u0002\u0380\u037c\u0003\u0002\u0002",
"\u0002\u0381[\u0003\u0002\u0002\u0002\u0382\u0383\u0007k\u0002\u0002",
"\u0383]\u0003\u0002\u0002\u0002\u0384\u0385\u00075\u0002\u0002\u0385",
"\u0386\u0007=\u0002\u0002\u0386\u0387\u0005\u0082B\u0002\u0387\u0388",
"\u0007>\u0002\u0002\u0388_\u0003\u0002\u0002\u0002\u0389\u038a\t\b\u0002",
"\u0002\u038aa\u0003\u0002\u0002\u0002\u038b\u0392\t\t\u0002\u0002\u038c",
"\u0392\u0005n8\u0002\u038d\u038e\u0007\f\u0002\u0002\u038e\u038f\u0007",
"=\u0002\u0002\u038f\u0390\u0007k\u0002\u0002\u0390\u0392\u0007>\u0002",
"\u0002\u0391\u038b\u0003\u0002\u0002\u0002\u0391\u038c\u0003\u0002\u0002",
"\u0002\u0391\u038d\u0003\u0002\u0002\u0002\u0392c\u0003\u0002\u0002",
"\u0002\u0393\u0394\u00073\u0002\u0002\u0394\u0395\u0007=\u0002\u0002",
"\u0395\u0396\u0005\u0082B\u0002\u0396\u0397\u0007>\u0002\u0002\u0397",
"\u039e\u0003\u0002\u0002\u0002\u0398\u0399\u00073\u0002\u0002\u0399",
"\u039a\u0007=\u0002\u0002\u039a\u039b\u00052\u001a\u0002\u039b\u039c",
"\u0007>\u0002\u0002\u039c\u039e\u0003\u0002\u0002\u0002\u039d\u0393",
"\u0003\u0002\u0002\u0002\u039d\u0398\u0003\u0002\u0002\u0002\u039ee",
"\u0003\u0002\u0002\u0002\u039f\u03a3\u0005j6\u0002\u03a0\u03a2\u0005",
"l7\u0002\u03a1\u03a0\u0003\u0002\u0002\u0002\u03a2\u03a5\u0003\u0002",
"\u0002\u0002\u03a3\u03a1\u0003\u0002\u0002\u0002\u03a3\u03a4\u0003\u0002",
"\u0002\u0002\u03a4g\u0003\u0002\u0002\u0002\u03a5\u03a3\u0003\u0002",
"\u0002\u0002\u03a6\u03a7\u0005v<\u0002\u03a7\u03a8\u0005h5\u0002\u03a8",
"\u03ab\u0003\u0002\u0002\u0002\u03a9\u03ab\u0007k\u0002\u0002\u03aa",
"\u03a6\u0003\u0002\u0002\u0002\u03aa\u03a9\u0003\u0002\u0002\u0002\u03ab",
"i\u0003\u0002\u0002\u0002\u03ac\u03ad\b6\u0001\u0002\u03ad\u03b3\u0005",
"h5\u0002\u03ae\u03af\u0007=\u0002\u0002\u03af\u03b0\u0005f4\u0002\u03b0",
"\u03b1\u0007>\u0002\u0002\u03b1\u03b3\u0003\u0002\u0002\u0002\u03b2",
"\u03ac\u0003\u0002\u0002\u0002\u03b2\u03ae\u0003\u0002\u0002\u0002\u03b3",
"\u03e1\u0003\u0002\u0002\u0002\u03b4\u03b5\f\b\u0002\u0002\u03b5\u03b7",
"\u0007?\u0002\u0002\u03b6\u03b8\u0005x=\u0002\u03b7\u03b6\u0003\u0002",
"\u0002\u0002\u03b7\u03b8\u0003\u0002\u0002\u0002\u03b8\u03ba\u0003\u0002",
"\u0002\u0002\u03b9\u03bb\u0005,\u0017\u0002\u03ba\u03b9\u0003\u0002",
"\u0002\u0002\u03ba\u03bb\u0003\u0002\u0002\u0002\u03bb\u03bc\u0003\u0002",
"\u0002\u0002\u03bc\u03e0\u0007@\u0002\u0002\u03bd\u03be\f\u0007\u0002",
"\u0002\u03be\u03bf\u0007?\u0002\u0002\u03bf\u03c1\u0007*\u0002\u0002",
"\u03c0\u03c2\u0005x=\u0002\u03c1\u03c0\u0003\u0002\u0002\u0002\u03c1",
"\u03c2\u0003\u0002\u0002\u0002\u03c2\u03c3\u0003\u0002\u0002\u0002\u03c3",
"\u03c4\u0005,\u0017\u0002\u03c4\u03c5\u0007@\u0002\u0002\u03c5\u03e0",
"\u0003\u0002\u0002\u0002\u03c6\u03c7\f\u0006\u0002\u0002\u03c7\u03c8",
"\u0007?\u0002\u0002\u03c8\u03c9\u0005x=\u0002\u03c9\u03ca\u0007*\u0002",
"\u0002\u03ca\u03cb\u0005,\u0017\u0002\u03cb\u03cc\u0007@\u0002\u0002",
"\u03cc\u03e0\u0003\u0002\u0002\u0002\u03cd\u03ce\f\u0005\u0002\u0002",
"\u03ce\u03d0\u0007?\u0002\u0002\u03cf\u03d1\u0005x=\u0002\u03d0\u03cf",
"\u0003\u0002\u0002\u0002\u03d0\u03d1\u0003\u0002\u0002\u0002\u03d1\u03d2",
"\u0003\u0002\u0002\u0002\u03d2\u03d3\u0007M\u0002\u0002\u03d3\u03e0",
"\u0007@\u0002\u0002\u03d4\u03d5\f\u0004\u0002\u0002\u03d5\u03d6\u0007",
"=\u0002\u0002\u03d6\u03d7\u0005z>\u0002\u03d7\u03d8\u0007>\u0002\u0002",
"\u03d8\u03e0\u0003\u0002\u0002\u0002\u03d9\u03da\f\u0003\u0002\u0002",
"\u03da\u03dc\u0007=\u0002\u0002\u03db\u03dd\u0005\u0080A\u0002\u03dc",
"\u03db\u0003\u0002\u0002\u0002\u03dc\u03dd\u0003\u0002\u0002\u0002\u03dd",
"\u03de\u0003\u0002\u0002\u0002\u03de\u03e0\u0007>\u0002\u0002\u03df",
"\u03b4\u0003\u0002\u0002\u0002\u03df\u03bd\u0003\u0002\u0002\u0002\u03df",
"\u03c6\u0003\u0002\u0002\u0002\u03df\u03cd\u0003\u0002\u0002\u0002\u03df",
"\u03d4\u0003\u0002\u0002\u0002\u03df\u03d9\u0003\u0002\u0002\u0002\u03e0",
"\u03e3\u0003\u0002\u0002\u0002\u03e1\u03df\u0003\u0002\u0002\u0002\u03e1",
"\u03e2\u0003\u0002\u0002\u0002\u03e2k\u0003\u0002\u0002\u0002\u03e3",
"\u03e1\u0003\u0002\u0002\u0002\u03e4\u03e5\u0007\r\u0002\u0002\u03e5",
"\u03e7\u0007=\u0002\u0002\u03e6\u03e8\u0007m\u0002\u0002\u03e7\u03e6",
"\u0003\u0002\u0002\u0002\u03e8\u03e9\u0003\u0002\u0002\u0002\u03e9\u03e7",
"\u0003\u0002\u0002\u0002\u03e9\u03ea\u0003\u0002\u0002\u0002\u03ea\u03eb",
"\u0003\u0002\u0002\u0002\u03eb\u03ee\u0007>\u0002\u0002\u03ec\u03ee",
"\u0005n8\u0002\u03ed\u03e4\u0003\u0002\u0002\u0002\u03ed\u03ec\u0003",
"\u0002\u0002\u0002\u03eem\u0003\u0002\u0002\u0002\u03ef\u03f0\u0007",
"\u000e\u0002\u0002\u03f0\u03f1\u0007=\u0002\u0002\u03f1\u03f2\u0007",
"=\u0002\u0002\u03f2\u03f3\u0005p9\u0002\u03f3\u03f4\u0007>\u0002\u0002",
"\u03f4\u03f5\u0007>\u0002\u0002\u03f5o\u0003\u0002\u0002\u0002\u03f6",
"\u03fb\u0005r:\u0002\u03f7\u03f8\u0007Z\u0002\u0002\u03f8\u03fa\u0005",
"r:\u0002\u03f9\u03f7\u0003\u0002\u0002\u0002\u03fa\u03fd\u0003\u0002",
"\u0002\u0002\u03fb\u03f9\u0003\u0002\u0002\u0002\u03fb\u03fc\u0003\u0002",
"\u0002\u0002\u03fc\u0400\u0003\u0002\u0002\u0002\u03fd\u03fb\u0003\u0002",
"\u0002\u0002\u03fe\u0400\u0003\u0002\u0002\u0002\u03ff\u03f6\u0003\u0002",
"\u0002\u0002\u03ff\u03fe\u0003\u0002\u0002\u0002\u0400q\u0003\u0002",
"\u0002\u0002\u0401\u0407\n\n\u0002\u0002\u0402\u0404\u0007=\u0002\u0002",
"\u0403\u0405\u0005\f\u0007\u0002\u0404\u0403\u0003\u0002\u0002\u0002",
"\u0404\u0405\u0003\u0002\u0002\u0002\u0405\u0406\u0003\u0002\u0002\u0002",
"\u0406\u0408\u0007>\u0002\u0002\u0407\u0402\u0003\u0002\u0002\u0002",
"\u0407\u0408\u0003\u0002\u0002\u0002\u0408\u040b\u0003\u0002\u0002\u0002",
"\u0409\u040b\u0003\u0002\u0002\u0002\u040a\u0401\u0003\u0002\u0002\u0002",
"\u040a\u0409\u0003\u0002\u0002\u0002\u040bs\u0003\u0002\u0002\u0002",
"\u040c\u0412\n\u000b\u0002\u0002\u040d\u040e\u0007=\u0002\u0002\u040e",
"\u040f\u0005t;\u0002\u040f\u0410\u0007>\u0002\u0002\u0410\u0412\u0003",
"\u0002\u0002\u0002\u0411\u040c\u0003\u0002\u0002\u0002\u0411\u040d\u0003",
"\u0002\u0002\u0002\u0412\u0415\u0003\u0002\u0002\u0002\u0413\u0411\u0003",
"\u0002\u0002\u0002\u0413\u0414\u0003\u0002\u0002\u0002\u0414u\u0003",
"\u0002\u0002\u0002\u0415\u0413\u0003\u0002\u0002\u0002\u0416\u0418\u0007",
"M\u0002\u0002\u0417\u0419\u0005x=\u0002\u0418\u0417\u0003\u0002\u0002",
"\u0002\u0418\u0419\u0003\u0002\u0002\u0002\u0419\u0429\u0003\u0002\u0002",
"\u0002\u041a\u041c\u0007M\u0002\u0002\u041b\u041d\u0005x=\u0002\u041c",
"\u041b\u0003\u0002\u0002\u0002\u041c\u041d\u0003\u0002\u0002\u0002\u041d",
"\u041e\u0003\u0002\u0002\u0002\u041e\u0429\u0005v<\u0002\u041f\u0421",
"\u0007T\u0002\u0002\u0420\u0422\u0005x=\u0002\u0421\u0420\u0003\u0002",
"\u0002\u0002\u0421\u0422\u0003\u0002\u0002\u0002\u0422\u0429\u0003\u0002",
"\u0002\u0002\u0423\u0425\u0007T\u0002\u0002\u0424\u0426\u0005x=\u0002",
"\u0425\u0424\u0003\u0002\u0002\u0002\u0425\u0426\u0003\u0002\u0002\u0002",
"\u0426\u0427\u0003\u0002\u0002\u0002\u0427\u0429\u0005v<\u0002\u0428",
"\u0416\u0003\u0002\u0002\u0002\u0428\u041a\u0003\u0002\u0002\u0002\u0428",
"\u041f\u0003\u0002\u0002\u0002\u0428\u0423\u0003\u0002\u0002\u0002\u0429",
"w\u0003\u0002\u0002\u0002\u042a\u042b\b=\u0001\u0002\u042b\u042c\u0005",
"`1\u0002\u042c\u0431\u0003\u0002\u0002\u0002\u042d\u042e\f\u0003\u0002",
"\u0002\u042e\u0430\u0005`1\u0002\u042f\u042d\u0003\u0002\u0002\u0002",
"\u0430\u0433\u0003\u0002\u0002\u0002\u0431\u042f\u0003\u0002\u0002\u0002",
"\u0431\u0432\u0003\u0002\u0002\u0002\u0432y\u0003\u0002\u0002\u0002",
"\u0433\u0431\u0003\u0002\u0002\u0002\u0434\u043a\u0005|?\u0002\u0435",
"\u0436\u0005|?\u0002\u0436\u0437\u0007Z\u0002\u0002\u0437\u0438\u0007",
"j\u0002\u0002\u0438\u043a\u0003\u0002\u0002\u0002\u0439\u0434\u0003",
"\u0002\u0002\u0002\u0439\u0435\u0003\u0002\u0002\u0002\u043a{\u0003",
"\u0002\u0002\u0002\u043b\u043c\b?\u0001\u0002\u043c\u043d\u0005~@\u0002",
"\u043d\u0443\u0003\u0002\u0002\u0002\u043e\u043f\f\u0003\u0002\u0002",
"\u043f\u0440\u0007Z\u0002\u0002\u0440\u0442\u0005~@\u0002\u0441\u043e",
"\u0003\u0002\u0002\u0002\u0442\u0445\u0003\u0002\u0002\u0002\u0443\u0441",
"\u0003\u0002\u0002\u0002\u0443\u0444\u0003\u0002\u0002\u0002\u0444}",
"\u0003\u0002\u0002\u0002\u0445\u0443\u0003\u0002\u0002\u0002\u0446\u0447",
"\u00058\u001d\u0002\u0447\u0448\u0005f4\u0002\u0448\u044e\u0003\u0002",
"\u0002\u0002\u0449\u044b\u0005:\u001e\u0002\u044a\u044c\u0005\u0084",
"C\u0002\u044b\u044a\u0003\u0002\u0002\u0002\u044b\u044c\u0003\u0002",
"\u0002\u0002\u044c\u044e\u0003\u0002\u0002\u0002\u044d\u0446\u0003\u0002",
"\u0002\u0002\u044d\u0449\u0003\u0002\u0002\u0002\u044e\u007f\u0003\u0002",
"\u0002\u0002\u044f\u0450\bA\u0001\u0002\u0450\u0451\u0007k\u0002\u0002",
"\u0451\u0457\u0003\u0002\u0002\u0002\u0452\u0453\f\u0003\u0002\u0002",
"\u0453\u0454\u0007Z\u0002\u0002\u0454\u0456\u0007k\u0002\u0002\u0455",
"\u0452\u0003\u0002\u0002\u0002\u0456\u0459\u0003\u0002\u0002\u0002\u0457",
"\u0455\u0003\u0002\u0002\u0002\u0457\u0458\u0003\u0002\u0002\u0002\u0458",
"\u0081\u0003\u0002\u0002\u0002\u0459\u0457\u0003\u0002\u0002\u0002\u045a",
"\u045c\u0005P)\u0002\u045b\u045d\u0005\u0084C\u0002\u045c\u045b\u0003",
"\u0002\u0002\u0002\u045c\u045d\u0003\u0002\u0002\u0002\u045d\u0083\u0003",
"\u0002\u0002\u0002\u045e\u046a\u0005v<\u0002\u045f\u0461\u0005v<\u0002",
"\u0460\u045f\u0003\u0002\u0002\u0002\u0460\u0461\u0003\u0002\u0002\u0002",
"\u0461\u0462\u0003\u0002\u0002\u0002\u0462\u0466\u0005\u0086D\u0002",
"\u0463\u0465\u0005l7\u0002\u0464\u0463\u0003\u0002\u0002\u0002\u0465",
"\u0468\u0003\u0002\u0002\u0002\u0466\u0464\u0003\u0002\u0002\u0002\u0466",
"\u0467\u0003\u0002\u0002\u0002\u0467\u046a\u0003\u0002\u0002\u0002\u0468",
"\u0466\u0003\u0002\u0002\u0002\u0469\u045e\u0003\u0002\u0002\u0002\u0469",
"\u0460\u0003\u0002\u0002\u0002\u046a\u0085\u0003\u0002\u0002\u0002\u046b",
"\u046c\bD\u0001\u0002\u046c\u046d\u0007=\u0002\u0002\u046d\u046e\u0005",
"\u0084C\u0002\u046e\u0472\u0007>\u0002\u0002\u046f\u0471\u0005l7\u0002",
"\u0470\u046f\u0003\u0002\u0002\u0002\u0471\u0474\u0003\u0002\u0002\u0002",
"\u0472\u0470\u0003\u0002\u0002\u0002\u0472\u0473\u0003\u0002\u0002\u0002",
"\u0473\u049a\u0003\u0002\u0002\u0002\u0474\u0472\u0003\u0002\u0002\u0002",
"\u0475\u0477\u0007?\u0002\u0002\u0476\u0478\u0005x=\u0002\u0477\u0476",
"\u0003\u0002\u0002\u0002\u0477\u0478\u0003\u0002\u0002\u0002\u0478\u047a",
"\u0003\u0002\u0002\u0002\u0479\u047b\u0005,\u0017\u0002\u047a\u0479",
"\u0003\u0002\u0002\u0002\u047a\u047b\u0003\u0002\u0002\u0002\u047b\u047c",
"\u0003\u0002\u0002\u0002\u047c\u049a\u0007@\u0002\u0002\u047d\u047e",
"\u0007?\u0002\u0002\u047e\u0480\u0007*\u0002\u0002\u047f\u0481\u0005",
"x=\u0002\u0480\u047f\u0003\u0002\u0002\u0002\u0480\u0481\u0003\u0002",
"\u0002\u0002\u0481\u0482\u0003\u0002\u0002\u0002\u0482\u0483\u0005,",
"\u0017\u0002\u0483\u0484\u0007@\u0002\u0002\u0484\u049a\u0003\u0002",
"\u0002\u0002\u0485\u0486\u0007?\u0002\u0002\u0486\u0487\u0005x=\u0002",
"\u0487\u0488\u0007*\u0002\u0002\u0488\u0489\u0005,\u0017\u0002\u0489",
"\u048a\u0007@\u0002\u0002\u048a\u049a\u0003\u0002\u0002\u0002\u048b",
"\u048c\u0007?\u0002\u0002\u048c\u048d\u0007M\u0002\u0002\u048d\u049a",
"\u0007@\u0002\u0002\u048e\u0490\u0007=\u0002\u0002\u048f\u0491\u0005",
"z>\u0002\u0490\u048f\u0003\u0002\u0002\u0002\u0490\u0491\u0003\u0002",
"\u0002\u0002\u0491\u0492\u0003\u0002\u0002\u0002\u0492\u0496\u0007>",
"\u0002\u0002\u0493\u0495\u0005l7\u0002\u0494\u0493\u0003\u0002\u0002",
"\u0002\u0495\u0498\u0003\u0002\u0002\u0002\u0496\u0494\u0003\u0002\u0002",
"\u0002\u0496\u0497\u0003\u0002\u0002\u0002\u0497\u049a\u0003\u0002\u0002",
"\u0002\u0498\u0496\u0003\u0002\u0002\u0002\u0499\u046b\u0003\u0002\u0002",
"\u0002\u0499\u0475\u0003\u0002\u0002\u0002\u0499\u047d\u0003\u0002\u0002",
"\u0002\u0499\u0485\u0003\u0002\u0002\u0002\u0499\u048b\u0003\u0002\u0002",
"\u0002\u0499\u048e\u0003\u0002\u0002\u0002\u049a\u04c6\u0003\u0002\u0002",
"\u0002\u049b\u049c\f\u0007\u0002\u0002\u049c\u049e\u0007?\u0002\u0002",
"\u049d\u049f\u0005x=\u0002\u049e\u049d\u0003\u0002\u0002\u0002\u049e",
"\u049f\u0003\u0002\u0002\u0002\u049f\u04a1\u0003\u0002\u0002\u0002\u04a0",
"\u04a2\u0005,\u0017\u0002\u04a1\u04a0\u0003\u0002\u0002\u0002\u04a1",
"\u04a2\u0003\u0002\u0002\u0002\u04a2\u04a3\u0003\u0002\u0002\u0002\u04a3",
"\u04c5\u0007@\u0002\u0002\u04a4\u04a5\f\u0006\u0002\u0002\u04a5\u04a6",
"\u0007?\u0002\u0002\u04a6\u04a8\u0007*\u0002\u0002\u04a7\u04a9\u0005",
"x=\u0002\u04a8\u04a7\u0003\u0002\u0002\u0002\u04a8\u04a9\u0003\u0002",
"\u0002\u0002\u04a9\u04aa\u0003\u0002\u0002\u0002\u04aa\u04ab\u0005,",
"\u0017\u0002\u04ab\u04ac\u0007@\u0002\u0002\u04ac\u04c5\u0003\u0002",
"\u0002\u0002\u04ad\u04ae\f\u0005\u0002\u0002\u04ae\u04af\u0007?\u0002",
"\u0002\u04af\u04b0\u0005x=\u0002\u04b0\u04b1\u0007*\u0002\u0002\u04b1",
"\u04b2\u0005,\u0017\u0002\u04b2\u04b3\u0007@\u0002\u0002\u04b3\u04c5",
"\u0003\u0002\u0002\u0002\u04b4\u04b5\f\u0004\u0002\u0002\u04b5\u04b6",
"\u0007?\u0002\u0002\u04b6\u04b7\u0007M\u0002\u0002\u04b7\u04c5\u0007",
"@\u0002\u0002\u04b8\u04b9\f\u0003\u0002\u0002\u04b9\u04bb\u0007=\u0002",
"\u0002\u04ba\u04bc\u0005z>\u0002\u04bb\u04ba\u0003\u0002\u0002\u0002",
"\u04bb\u04bc\u0003\u0002\u0002\u0002\u04bc\u04bd\u0003\u0002\u0002\u0002",
"\u04bd\u04c1\u0007>\u0002\u0002\u04be\u04c0\u0005l7\u0002\u04bf\u04be",
"\u0003\u0002\u0002\u0002\u04c0\u04c3\u0003\u0002\u0002\u0002\u04c1\u04bf",
"\u0003\u0002\u0002\u0002\u04c1\u04c2\u0003\u0002\u0002\u0002\u04c2\u04c5",
"\u0003\u0002\u0002\u0002\u04c3\u04c1\u0003\u0002\u0002\u0002\u04c4\u049b",
"\u0003\u0002\u0002\u0002\u04c4\u04a4\u0003\u0002\u0002\u0002\u04c4\u04ad",
"\u0003\u0002\u0002\u0002\u04c4\u04b4\u0003\u0002\u0002\u0002\u04c4\u04b8",
"\u0003\u0002\u0002\u0002\u04c5\u04c8\u0003\u0002\u0002\u0002\u04c6\u04c4",
"\u0003\u0002\u0002\u0002\u04c6\u04c7\u0003\u0002\u0002\u0002\u04c7\u0087",
"\u0003\u0002\u0002\u0002\u04c8\u04c6\u0003\u0002\u0002\u0002\u04c9\u04ca",
"\u0007k\u0002\u0002\u04ca\u0089\u0003\u0002\u0002\u0002\u04cb\u04d6",
"\u0005,\u0017\u0002\u04cc\u04cd\u0007A\u0002\u0002\u04cd\u04ce\u0005",
"\u008cG\u0002\u04ce\u04cf\u0007B\u0002\u0002\u04cf\u04d6\u0003\u0002",
"\u0002\u0002\u04d0\u04d1\u0007A\u0002\u0002\u04d1\u04d2\u0005\u008c",
"G\u0002\u04d2\u04d3\u0007Z\u0002\u0002\u04d3\u04d4\u0007B\u0002\u0002",
"\u04d4\u04d6\u0003\u0002\u0002\u0002\u04d5\u04cb\u0003\u0002\u0002\u0002",
"\u04d5\u04cc\u0003\u0002\u0002\u0002\u04d5\u04d0\u0003\u0002\u0002\u0002",
"\u04d6\u008b\u0003\u0002\u0002\u0002\u04d7\u04d9\bG\u0001\u0002\u04d8",
"\u04da\u0005\u008eH\u0002\u04d9\u04d8\u0003\u0002\u0002\u0002\u04d9",
"\u04da\u0003\u0002\u0002\u0002\u04da\u04db\u0003\u0002\u0002\u0002\u04db",
"\u04dc\u0005\u008aF\u0002\u04dc\u04e5\u0003\u0002\u0002\u0002\u04dd",
"\u04de\f\u0003\u0002\u0002\u04de\u04e0\u0007Z\u0002\u0002\u04df\u04e1",
"\u0005\u008eH\u0002\u04e0\u04df\u0003\u0002\u0002\u0002\u04e0\u04e1",
"\u0003\u0002\u0002\u0002\u04e1\u04e2\u0003\u0002\u0002\u0002\u04e2\u04e4",
"\u0005\u008aF\u0002\u04e3\u04dd\u0003\u0002\u0002\u0002\u04e4\u04e7",
"\u0003\u0002\u0002\u0002\u04e5\u04e3\u0003\u0002\u0002\u0002\u04e5\u04e6",
"\u0003\u0002\u0002\u0002\u04e6\u008d\u0003\u0002\u0002\u0002\u04e7\u04e5",
"\u0003\u0002\u0002\u0002\u04e8\u04e9\u0005\u0090I\u0002\u04e9\u04ea",
"\u0007[\u0002\u0002\u04ea\u008f\u0003\u0002\u0002\u0002\u04eb\u04ec",
"\bI\u0001\u0002\u04ec\u04ed\u0005\u0092J\u0002\u04ed\u04f2\u0003\u0002",
"\u0002\u0002\u04ee\u04ef\f\u0003\u0002\u0002\u04ef\u04f1\u0005\u0092",
"J\u0002\u04f0\u04ee\u0003\u0002\u0002\u0002\u04f1\u04f4\u0003\u0002",
"\u0002\u0002\u04f2\u04f0\u0003\u0002\u0002\u0002\u04f2\u04f3\u0003\u0002",
"\u0002\u0002\u04f3\u0091\u0003\u0002\u0002\u0002\u04f4\u04f2\u0003\u0002",
"\u0002\u0002\u04f5\u04f6\u0007?\u0002\u0002\u04f6\u04f7\u00052\u001a",
"\u0002\u04f7\u04f8\u0007@\u0002\u0002\u04f8\u04fc\u0003\u0002\u0002",
"\u0002\u04f9\u04fa\u0007i\u0002\u0002\u04fa\u04fc\u0007k\u0002\u0002",
"\u04fb\u04f5\u0003\u0002\u0002\u0002\u04fb\u04f9\u0003\u0002\u0002\u0002",
"\u04fc\u0093\u0003\u0002\u0002\u0002\u04fd\u04fe\u0007;\u0002\u0002",
"\u04fe\u04ff\u0007=\u0002\u0002\u04ff\u0500\u00052\u001a\u0002\u0500",
"\u0502\u0007Z\u0002\u0002\u0501\u0503\u0007m\u0002\u0002\u0502\u0501",
"\u0003\u0002\u0002\u0002\u0503\u0504\u0003\u0002\u0002\u0002\u0504\u0502",
"\u0003\u0002\u0002\u0002\u0504\u0505\u0003\u0002\u0002\u0002\u0505\u0506",
"\u0003\u0002\u0002\u0002\u0506\u0507\u0007>\u0002\u0002\u0507\u0508",
"\u0007Y\u0002\u0002\u0508\u0095\u0003\u0002\u0002\u0002\u0509\u052f",
"\u0005\u0098M\u0002\u050a\u052f\u0005\u009cO\u0002\u050b\u052f\u0005",
"\u00a4S\u0002\u050c\u052f\u0005\u00a6T\u0002\u050d\u052f\u0005\u00b0",
"Y\u0002\u050e\u052f\u0005\u00b2Z\u0002\u050f\u0510\t\f\u0002\u0002\u0510",
"\u0511\t\r\u0002\u0002\u0511\u051a\u0007=\u0002\u0002\u0512\u0517\u0005",
"(\u0015\u0002\u0513\u0514\u0007Z\u0002\u0002\u0514\u0516\u0005(\u0015",
"\u0002\u0515\u0513\u0003\u0002\u0002\u0002\u0516\u0519\u0003\u0002\u0002",
"\u0002\u0517\u0515\u0003\u0002\u0002\u0002\u0517\u0518\u0003\u0002\u0002",
"\u0002\u0518\u051b\u0003\u0002\u0002\u0002\u0519\u0517\u0003\u0002\u0002",
"\u0002\u051a\u0512\u0003\u0002\u0002\u0002\u051a\u051b\u0003\u0002\u0002",
"\u0002\u051b\u0529\u0003\u0002\u0002\u0002\u051c\u0525\u0007X\u0002",
"\u0002\u051d\u0522\u0005(\u0015\u0002\u051e\u051f\u0007Z\u0002\u0002",
"\u051f\u0521\u0005(\u0015\u0002\u0520\u051e\u0003\u0002\u0002\u0002",
"\u0521\u0524\u0003\u0002\u0002\u0002\u0522\u0520\u0003\u0002\u0002\u0002",
"\u0522\u0523\u0003\u0002\u0002\u0002\u0523\u0526\u0003\u0002\u0002\u0002",
"\u0524\u0522\u0003\u0002\u0002\u0002\u0525\u051d\u0003\u0002\u0002\u0002",
"\u0525\u0526\u0003\u0002\u0002\u0002\u0526\u0528\u0003\u0002\u0002\u0002",
"\u0527\u051c\u0003\u0002\u0002\u0002\u0528\u052b\u0003\u0002\u0002\u0002",
"\u0529\u0527\u0003\u0002\u0002\u0002\u0529\u052a\u0003\u0002\u0002\u0002",
"\u052a\u052c\u0003\u0002\u0002\u0002\u052b\u0529\u0003\u0002\u0002\u0002",
"\u052c\u052d\u0007>\u0002\u0002\u052d\u052f\u0007Y\u0002\u0002\u052e",
"\u0509\u0003\u0002\u0002\u0002\u052e\u050a\u0003\u0002\u0002\u0002\u052e",
"\u050b\u0003\u0002\u0002\u0002\u052e\u050c\u0003\u0002\u0002\u0002\u052e",
"\u050d\u0003\u0002\u0002\u0002\u052e\u050e\u0003\u0002\u0002\u0002\u052e",
"\u050f\u0003\u0002\u0002\u0002\u052f\u0097\u0003\u0002\u0002\u0002\u0530",
"\u0531\u0007k\u0002\u0002\u0531\u0532\u0007X\u0002\u0002\u0532\u0533",
"\u0005\u0096L\u0002\u0533\u0099\u0003\u0002\u0002\u0002\u0534\u0535",
"\u0007\u0013\u0002\u0002\u0535\u0536\u00052\u001a\u0002\u0536\u0537",
"\u0007X\u0002\u0002\u0537\u053b\u0003\u0002\u0002\u0002\u0538\u0539",
"\u0007\u0017\u0002\u0002\u0539\u053b\u0007X\u0002\u0002\u053a\u0534",
"\u0003\u0002\u0002\u0002\u053a\u0538\u0003\u0002\u0002\u0002\u053b\u009b",
"\u0003\u0002\u0002\u0002\u053c\u053e\u0007A\u0002\u0002\u053d\u053f",
"\u0005\u009eP\u0002\u053e\u053d\u0003\u0002\u0002\u0002\u053e\u053f",
"\u0003\u0002\u0002\u0002\u053f\u0540\u0003\u0002\u0002\u0002\u0540\u0541",
"\u0007B\u0002\u0002\u0541\u009d\u0003\u0002\u0002\u0002\u0542\u0543",
"\bP\u0001\u0002\u0543\u0544\u0005\u00a0Q\u0002\u0544\u0549\u0003\u0002",
"\u0002\u0002\u0545\u0546\f\u0003\u0002\u0002\u0546\u0548\u0005\u00a0",
"Q\u0002\u0547\u0545\u0003\u0002\u0002\u0002\u0548\u054b\u0003\u0002",
"\u0002\u0002\u0549\u0547\u0003\u0002\u0002\u0002\u0549\u054a\u0003\u0002",
"\u0002\u0002\u054a\u009f\u0003\u0002\u0002\u0002\u054b\u0549\u0003\u0002",
"\u0002\u0002\u054c\u0550\u0005\u00a2R\u0002\u054d\u0550\u00054\u001b",
"\u0002\u054e\u0550\u0005\u0096L\u0002\u054f\u054c\u0003\u0002\u0002",
"\u0002\u054f\u054d\u0003\u0002\u0002\u0002\u054f\u054e\u0003\u0002\u0002",
"\u0002\u0550\u00a1\u0003\u0002\u0002\u0002\u0551\u0552\u0007k\u0002",
"\u0002\u0552\u0553\u0007=\u0002\u0002\u0553\u0554\u0005,\u0017\u0002",
"\u0554\u0555\u0007>\u0002\u0002\u0555\u0556\u0007Y\u0002\u0002\u0556",
"\u00a3\u0003\u0002\u0002\u0002\u0557\u0559\u00050\u0019\u0002\u0558",
"\u0557\u0003\u0002\u0002\u0002\u0558\u0559\u0003\u0002\u0002\u0002\u0559",
"\u055a\u0003\u0002\u0002\u0002\u055a\u055b\u0007Y\u0002\u0002\u055b",
"\u00a5\u0003\u0002\u0002\u0002\u055c\u055d\u0007 \u0002\u0002\u055d",
"\u055e\u0007=\u0002\u0002\u055e\u055f\u00050\u0019\u0002\u055f\u0560",
"\u0007>\u0002\u0002\u0560\u0563\u0005\u0096L\u0002\u0561\u0562\u0007",
"\u001a\u0002\u0002\u0562\u0564\u0005\u0096L\u0002\u0563\u0561\u0003",
"\u0002\u0002\u0002\u0563\u0564\u0003\u0002\u0002\u0002\u0564\u056c\u0003",
"\u0002\u0002\u0002\u0565\u0566\u0007,\u0002\u0002\u0566\u0567\u0007",
"=\u0002\u0002\u0567\u0568\u00050\u0019\u0002\u0568\u0569\u0007>\u0002",
"\u0002\u0569\u056a\u0005\u00aeX\u0002\u056a\u056c\u0003\u0002\u0002",
"\u0002\u056b\u055c\u0003\u0002\u0002\u0002\u056b\u0565\u0003\u0002\u0002",
"\u0002\u056c\u00a7\u0003\u0002\u0002\u0002\u056d\u056e\u0005\u009aN",
"\u0002\u056e\u056f\u0005\u00aaV\u0002\u056f\u00a9\u0003\u0002\u0002",
"\u0002\u0570\u0571\u0005\u009eP\u0002\u0571\u00ab\u0003\u0002\u0002",
"\u0002\u0572\u0573\bW\u0001\u0002\u0573\u0574\u0005\u00a8U\u0002\u0574",
"\u0579\u0003\u0002\u0002\u0002\u0575\u0576\f\u0003\u0002\u0002\u0576",
"\u0578\u0005\u00a8U\u0002\u0577\u0575\u0003\u0002\u0002\u0002\u0578",
"\u057b\u0003\u0002\u0002\u0002\u0579\u0577\u0003\u0002\u0002\u0002\u0579",
"\u057a\u0003\u0002\u0002\u0002\u057a\u00ad\u0003\u0002\u0002\u0002\u057b",
"\u0579\u0003\u0002\u0002\u0002\u057c\u057e\u0007A\u0002\u0002\u057d",
"\u057f\u0005\u00acW\u0002\u057e\u057d\u0003\u0002\u0002\u0002\u057e",
"\u057f\u0003\u0002\u0002\u0002\u057f\u0580\u0003\u0002\u0002\u0002\u0580",
"\u0583\u0007B\u0002\u0002\u0581\u0583\u0005\u0096L\u0002\u0582\u057c",
"\u0003\u0002\u0002\u0002\u0582\u0581\u0003\u0002\u0002\u0002\u0583\u00af",
"\u0003\u0002\u0002\u0002\u0584\u0585\u00072\u0002\u0002\u0585\u0586",
"\u0007=\u0002\u0002\u0586\u0587\u00050\u0019\u0002\u0587\u0588\u0007",
">\u0002\u0002\u0588\u0589\u0005\u0096L\u0002\u0589\u05af\u0003\u0002",
"\u0002\u0002\u058a\u058b\u0007\u0018\u0002\u0002\u058b\u058c\u0005\u0096",
"L\u0002\u058c\u058d\u00072\u0002\u0002\u058d\u058e\u0007=\u0002\u0002",
"\u058e\u058f\u00050\u0019\u0002\u058f\u0590\u0007>\u0002\u0002\u0590",
"\u0591\u0007Y\u0002\u0002\u0591\u05af\u0003\u0002\u0002\u0002\u0592",
"\u0593\u0007\u001e\u0002\u0002\u0593\u0595\u0007=\u0002\u0002\u0594",
"\u0596\u00050\u0019\u0002\u0595\u0594\u0003\u0002\u0002\u0002\u0595",
"\u0596\u0003\u0002\u0002\u0002\u0596\u0597\u0003\u0002\u0002\u0002\u0597",
"\u0599\u0007Y\u0002\u0002\u0598\u059a\u00050\u0019\u0002\u0599\u0598",
"\u0003\u0002\u0002\u0002\u0599\u059a\u0003\u0002\u0002\u0002\u059a\u059b",
"\u0003\u0002\u0002\u0002\u059b\u059d\u0007Y\u0002\u0002\u059c\u059e",
"\u00050\u0019\u0002\u059d\u059c\u0003\u0002\u0002\u0002\u059d\u059e",
"\u0003\u0002\u0002\u0002\u059e\u059f\u0003\u0002\u0002\u0002\u059f\u05a0",
"\u0007>\u0002\u0002\u05a0\u05af\u0005\u0096L\u0002\u05a1\u05a2\u0007",
"\u001e\u0002\u0002\u05a2\u05a3\u0007=\u0002\u0002\u05a3\u05a5\u0005",
"4\u001b\u0002\u05a4\u05a6\u00050\u0019\u0002\u05a5\u05a4\u0003\u0002",
"\u0002\u0002\u05a5\u05a6\u0003\u0002\u0002\u0002\u05a6\u05a7\u0003\u0002",
"\u0002\u0002\u05a7\u05a9\u0007Y\u0002\u0002\u05a8\u05aa\u00050\u0019",
"\u0002\u05a9\u05a8\u0003\u0002\u0002\u0002\u05a9\u05aa\u0003\u0002\u0002",
"\u0002\u05aa\u05ab\u0003\u0002\u0002\u0002\u05ab\u05ac\u0007>\u0002",
"\u0002\u05ac\u05ad\u0005\u0096L\u0002\u05ad\u05af\u0003\u0002\u0002",
"\u0002\u05ae\u0584\u0003\u0002\u0002\u0002\u05ae\u058a\u0003\u0002\u0002",
"\u0002\u05ae\u0592\u0003\u0002\u0002\u0002\u05ae\u05a1\u0003\u0002\u0002",
"\u0002\u05af\u00b1\u0003\u0002\u0002\u0002\u05b0\u05b1\u0007\u001f\u0002",
"\u0002\u05b1\u05b2\u0007k\u0002\u0002\u05b2\u05c1\u0007Y\u0002\u0002",
"\u05b3\u05b4\u0007\u0016\u0002\u0002\u05b4\u05c1\u0007Y\u0002\u0002",
"\u05b5\u05b6\u0007\u0012\u0002\u0002\u05b6\u05c1\u0007Y\u0002\u0002",
"\u05b7\u05b9\u0007&\u0002\u0002\u05b8\u05ba\u00050\u0019\u0002\u05b9",
"\u05b8\u0003\u0002\u0002\u0002\u05b9\u05ba\u0003\u0002\u0002\u0002\u05ba",
"\u05bb\u0003\u0002\u0002\u0002\u05bb\u05c1\u0007Y\u0002\u0002\u05bc",
"\u05bd\u0007\u001f\u0002\u0002\u05bd\u05be\u0005\u000e\b\u0002\u05be",
"\u05bf\u0007Y\u0002\u0002\u05bf\u05c1\u0003\u0002\u0002\u0002\u05c0",
"\u05b0\u0003\u0002\u0002\u0002\u05c0\u05b3\u0003\u0002\u0002\u0002\u05c0",
"\u05b5\u0003\u0002\u0002\u0002\u05c0\u05b7\u0003\u0002\u0002\u0002\u05c0",
"\u05bc\u0003\u0002\u0002\u0002\u05c1\u00b3\u0003\u0002\u0002\u0002\u05c2",
"\u05c4\u0005\u00b6\\\u0002\u05c3\u05c2\u0003\u0002\u0002\u0002\u05c3",
"\u05c4\u0003\u0002\u0002\u0002\u05c4\u05c5\u0003\u0002\u0002\u0002\u05c5",
"\u05c8\u0007\u0002\u0002\u0003\u05c6\u05c8\u0007\u0002\u0002\u0003\u05c7",
"\u05c3\u0003\u0002\u0002\u0002\u05c7\u05c6\u0003\u0002\u0002\u0002\u05c8",
"\u00b5\u0003\u0002\u0002\u0002\u05c9\u05ca\b\\\u0001\u0002\u05ca\u05cb",
"\u0005\u00b8]\u0002\u05cb\u05d0\u0003\u0002\u0002\u0002\u05cc\u05cd",
"\f\u0003\u0002\u0002\u05cd\u05cf\u0005\u00b8]\u0002\u05ce\u05cc\u0003",
"\u0002\u0002\u0002\u05cf\u05d2\u0003\u0002\u0002\u0002\u05d0\u05ce\u0003",
"\u0002\u0002\u0002\u05d0\u05d1\u0003\u0002\u0002\u0002\u05d1\u00b7\u0003",
"\u0002\u0002\u0002\u05d2\u05d0\u0003\u0002\u0002\u0002\u05d3\u05da\u0005",
"\u00ba^\u0002\u05d4\u05d5\u0005> \u0002\u05d5\u05d6\u0007Y\u0002\u0002",
"\u05d6\u05da\u0003\u0002\u0002\u0002\u05d7\u05da\u00054\u001b\u0002",
"\u05d8\u05da\u0007Y\u0002\u0002\u05d9\u05d3\u0003\u0002\u0002\u0002",
"\u05d9\u05d4\u0003\u0002\u0002\u0002\u05d9\u05d7\u0003\u0002\u0002\u0002",
"\u05d9\u05d8\u0003\u0002\u0002\u0002\u05da\u00b9\u0003\u0002\u0002\u0002",
"\u05db\u05dd\u00058\u001d\u0002\u05dc\u05db\u0003\u0002\u0002\u0002",
"\u05dc\u05dd\u0003\u0002\u0002\u0002\u05dd\u05de\u0003\u0002\u0002\u0002",
"\u05de\u05e0\u0005f4\u0002\u05df\u05e1\u0005\u00bc_\u0002\u05e0\u05df",
"\u0003\u0002\u0002\u0002\u05e0\u05e1\u0003\u0002\u0002\u0002\u05e1\u05e2",
"\u0003\u0002\u0002\u0002\u05e2\u05e3\u0005\u009cO\u0002\u05e3\u00bb",
"\u0003\u0002\u0002\u0002\u05e4\u05e5\b_\u0001\u0002\u05e5\u05e6\u0005",
"4\u001b\u0002\u05e6\u05eb\u0003\u0002\u0002\u0002\u05e7\u05e8\f\u0003",
"\u0002\u0002\u05e8\u05ea\u00054\u001b\u0002\u05e9\u05e7\u0003\u0002",
"\u0002\u0002\u05ea\u05ed\u0003\u0002\u0002\u0002\u05eb\u05e9\u0003\u0002",
"\u0002\u0002\u05eb\u05ec\u0003\u0002\u0002\u0002\u05ec\u00bd\u0003\u0002",
"\u0002\u0002\u05ed\u05eb\u0003\u0002\u0002\u0002\u05ee\u05ef\u0007k",
"\u0002\u0002\u05ef\u0618\u0007\u0002\u0002\u0003\u05f0\u05f1\u0007l",
"\u0002\u0002\u05f1\u0618\u0007\u0002\u0002\u0003\u05f2\u05f4\u0007m",
"\u0002\u0002\u05f3\u05f2\u0003\u0002\u0002\u0002\u05f4\u05f5\u0003\u0002",
"\u0002\u0002\u05f5\u05f3\u0003\u0002\u0002\u0002\u05f5\u05f6\u0003\u0002",
"\u0002\u0002\u05f6\u05f7\u0003\u0002\u0002\u0002\u05f7\u0618\u0007\u0002",
"\u0002\u0003\u05f8\u05f9\u0007=\u0002\u0002\u05f9\u05fa\u00050\u0019",
"\u0002\u05fa\u05fb\u0007>\u0002\u0002\u05fb\u05fc\u0007\u0002\u0002",
"\u0003\u05fc\u0618\u0003\u0002\u0002\u0002\u05fd\u05fe\u0005\u0004\u0003",
"\u0002\u05fe\u05ff\u0007\u0002\u0002\u0003\u05ff\u0618\u0003\u0002\u0002",
"\u0002\u0600\u0602\u0007\u0003\u0002\u0002\u0601\u0600\u0003\u0002\u0002",
"\u0002\u0601\u0602\u0003\u0002\u0002\u0002\u0602\u0603\u0003\u0002\u0002",
"\u0002\u0603\u0604\u0007=\u0002\u0002\u0604\u0605\u0005\u009cO\u0002",
"\u0605\u0606\u0007>\u0002\u0002\u0606\u0618\u0003\u0002\u0002\u0002",
"\u0607\u0608\u0007\u0004\u0002\u0002\u0608\u0609\u0007=\u0002\u0002",
"\u0609\u060a\u0005\u000e\b\u0002\u060a\u060b\u0007Z\u0002\u0002\u060b",
"\u060c\u0005\u0082B\u0002\u060c\u060d\u0007>\u0002\u0002\u060d\u060e",
"\u0007\u0002\u0002\u0003\u060e\u0618\u0003\u0002\u0002\u0002\u060f\u0610",
"\u0007\u0005\u0002\u0002\u0610\u0611\u0007=\u0002\u0002\u0611\u0612",
"\u0005\u0082B\u0002\u0612\u0613\u0007Z\u0002\u0002\u0613\u0614\u0005",
"\u000e\b\u0002\u0614\u0615\u0007>\u0002\u0002\u0615\u0616\u0007\u0002",
"\u0002\u0003\u0616\u0618\u0003\u0002\u0002\u0002\u0617\u05ee\u0003\u0002",
"\u0002\u0002\u0617\u05f0\u0003\u0002\u0002\u0002\u0617\u05f3\u0003\u0002",
"\u0002\u0002\u0617\u05f8\u0003\u0002\u0002\u0002\u0617\u05fd\u0003\u0002",
"\u0002\u0002\u0617\u0601\u0003\u0002\u0002\u0002\u0617\u0607\u0003\u0002",
"\u0002\u0002\u0617\u060f\u0003\u0002\u0002\u0002\u0618\u00bf\u0003\u0002",
"\u0002\u0002\u0619\u061a\u00078\u0002\u0002\u061a\u061b\u0007=\u0002",
"\u0002\u061b\u061c\u0005,\u0017\u0002\u061c\u061d\u0007Z\u0002\u0002",
"\u061d\u061e\u0005\u0006\u0004\u0002\u061e\u061f\u0007>\u0002\u0002",
"\u061f\u0620\u0007\u0002\u0002\u0003\u0620\u00c1\u0003\u0002\u0002\u0002",
"\u0621\u0622\u0005\b\u0005\u0002\u0622\u0623\u0007\u0002\u0002\u0003",
"\u0623\u062a\u0003\u0002\u0002\u0002\u0624\u0625\u0005\u0006\u0004\u0002",
"\u0625\u0626\u0007Z\u0002\u0002\u0626\u0627\u0005\b\u0005\u0002\u0627",
"\u0628\u0007\u0002\u0002\u0003\u0628\u062a\u0003\u0002\u0002\u0002\u0629",
"\u0621\u0003\u0002\u0002\u0002\u0629\u0624\u0003\u0002\u0002\u0002\u062a",
"\u00c3\u0003\u0002\u0002\u0002\u062b\u062c\u0005\u0082B\u0002\u062c",
"\u062d\u0007X\u0002\u0002\u062d\u062e\u0005,\u0017\u0002\u062e\u062f",
"\u0007\u0002\u0002\u0003\u062f\u0636\u0003\u0002\u0002\u0002\u0630\u0631",
"\u0007\u0017\u0002\u0002\u0631\u0632\u0007X\u0002\u0002\u0632\u0633",
"\u0005,\u0017\u0002\u0633\u0634\u0007\u0002\u0002\u0003\u0634\u0636",
"\u0003\u0002\u0002\u0002\u0635\u062b\u0003\u0002\u0002\u0002\u0635\u0630",
"\u0003\u0002\u0002\u0002\u0636\u00c5\u0003\u0002\u0002\u0002\u0637\u0638",
"\u0005\u0002\u0002\u0002\u0638\u0639\u0007\u0002\u0002\u0003\u0639\u067f",
"\u0003\u0002\u0002\u0002\u063a\u063b\u0005\n\u0006\u0002\u063b\u063c",
"\u0007?\u0002\u0002\u063c\u063d\u00050\u0019\u0002\u063d\u063e\u0007",
"@\u0002\u0002\u063e\u063f\u0007\u0002\u0002\u0003\u063f\u067f\u0003",
"\u0002\u0002\u0002\u0640\u0641\u0005\n\u0006\u0002\u0641\u0643\u0007",
"=\u0002\u0002\u0642\u0644\u0005\f\u0007\u0002\u0643\u0642\u0003\u0002",
"\u0002\u0002\u0643\u0644\u0003\u0002\u0002\u0002\u0644\u0645\u0003\u0002",
"\u0002\u0002\u0645\u0646\u0007>\u0002\u0002\u0646\u0647\u0007\u0002",
"\u0002\u0003\u0647\u067f\u0003\u0002\u0002\u0002\u0648\u0649\u0005\n",
"\u0006\u0002\u0649\u064a\u0007i\u0002\u0002\u064a\u064b\u0007k\u0002",
"\u0002\u064b\u064c\u0007\u0002\u0002\u0003\u064c\u067f\u0003\u0002\u0002",
"\u0002\u064d\u064e\u0005\n\u0006\u0002\u064e\u064f\u0007h\u0002\u0002",
"\u064f\u0650\u0007k\u0002\u0002\u0650\u0651\u0007\u0002\u0002\u0003",
"\u0651\u067f\u0003\u0002\u0002\u0002\u0652\u0653\u0005\n\u0006\u0002",
"\u0653\u0654\u0007J\u0002\u0002\u0654\u0655\u0007\u0002\u0002\u0003",
"\u0655\u067f\u0003\u0002\u0002\u0002\u0656\u0657\u0005\n\u0006\u0002",
"\u0657\u0658\u0007L\u0002\u0002\u0658\u0659\u0007\u0002\u0002\u0003",
"\u0659\u067f\u0003\u0002\u0002\u0002\u065a\u065b\u0007=\u0002\u0002",
"\u065b\u065c\u0005\u0082B\u0002\u065c\u065d\u0007>\u0002\u0002\u065d",
"\u065e\u0007A\u0002\u0002\u065e\u065f\u0005\u008cG\u0002\u065f\u0660",
"\u0007B\u0002\u0002\u0660\u0661\u0007\u0002\u0002\u0003\u0661\u067f",
"\u0003\u0002\u0002\u0002\u0662\u0663\u0007=\u0002\u0002\u0663\u0664",
"\u0005\u0082B\u0002\u0664\u0665\u0007>\u0002\u0002\u0665\u0666\u0007",
"A\u0002\u0002\u0666\u0667\u0005\u008cG\u0002\u0667\u0668\u0007Z\u0002",
"\u0002\u0668\u0669\u0007B\u0002\u0002\u0669\u066a\u0007\u0002\u0002",
"\u0003\u066a\u067f\u0003\u0002\u0002\u0002\u066b\u066c\u0007\u0003\u0002",
"\u0002\u066c\u066d\u0007=\u0002\u0002\u066d\u066e\u0005\u0082B\u0002",
"\u066e\u066f\u0007>\u0002\u0002\u066f\u0670\u0007A\u0002\u0002\u0670",
"\u0671\u0005\u008cG\u0002\u0671\u0672\u0007B\u0002\u0002\u0672\u0673",
"\u0007\u0002\u0002\u0003\u0673\u067f\u0003\u0002\u0002\u0002\u0674\u0675",
"\u0007\u0003\u0002\u0002\u0675\u0676\u0007=\u0002\u0002\u0676\u0677",
"\u0005\u0082B\u0002\u0677\u0678\u0007>\u0002\u0002\u0678\u0679\u0007",
"A\u0002\u0002\u0679\u067a\u0005\u008cG\u0002\u067a\u067b\u0007Z\u0002",
"\u0002\u067b\u067c\u0007B\u0002\u0002\u067c\u067d\u0007\u0002\u0002",
"\u0003\u067d\u067f\u0003\u0002\u0002\u0002\u067e\u0637\u0003\u0002\u0002",
"\u0002\u067e\u063a\u0003\u0002\u0002\u0002\u067e\u0640\u0003\u0002\u0002",
"\u0002\u067e\u0648\u0003\u0002\u0002\u0002\u067e\u064d\u0003\u0002\u0002",
"\u0002\u067e\u0652\u0003\u0002\u0002\u0002\u067e\u0656\u0003\u0002\u0002",
"\u0002\u067e\u065a\u0003\u0002\u0002\u0002\u067e\u0662\u0003\u0002\u0002",
"\u0002\u067e\u066b\u0003\u0002\u0002\u0002\u067e\u0674\u0003\u0002\u0002",
"\u0002\u067f\u00c7\u0003\u0002\u0002\u0002\u0680\u0681\u0005,\u0017",
"\u0002\u0681\u0682\u0007\u0002\u0002\u0003\u0682\u0689\u0003\u0002\u0002",
"\u0002\u0683\u0684\u0005\f\u0007\u0002\u0684\u0685\u0007Z\u0002\u0002",
"\u0685\u0686\u0005,\u0017\u0002\u0686\u0687\u0007\u0002\u0002\u0003",
"\u0687\u0689\u0003\u0002\u0002\u0002\u0688\u0680\u0003\u0002\u0002\u0002",
"\u0688\u0683\u0003\u0002\u0002\u0002\u0689\u00c9\u0003\u0002\u0002\u0002",
"\u068a\u068b\u0005\n\u0006\u0002\u068b\u068c\u0007\u0002\u0002\u0003",
"\u068c\u06b2\u0003\u0002\u0002\u0002\u068d\u068e\u0007J\u0002\u0002",
"\u068e\u068f\u0005\u000e\b\u0002\u068f\u0690\u0007\u0002\u0002\u0003",
"\u0690\u06b2\u0003\u0002\u0002\u0002\u0691\u0692\u0007L\u0002\u0002",
"\u0692\u0693\u0005\u000e\b\u0002\u0693\u0694\u0007\u0002\u0002\u0003",
"\u0694\u06b2\u0003\u0002\u0002\u0002\u0695\u0696\u0005\u0012\n\u0002",
"\u0696\u0697\u0005\u0014\u000b\u0002\u0697\u0698\u0007\u0002\u0002\u0003",
"\u0698\u06b2\u0003\u0002\u0002\u0002\u0699\u069a\u0007)\u0002\u0002",
"\u069a\u069b\u0007=\u0002\u0002\u069b\u069c\u0005\u0010\t\u0002\u069c",
"\u069d\u0007>\u0002\u0002\u069d\u069e\u0007\u0002\u0002\u0003\u069e",
"\u06b2\u0003\u0002\u0002\u0002\u069f\u06a0\u0007)\u0002\u0002\u06a0",
"\u06a1\u0007=\u0002\u0002\u06a1\u06a2\u00050\u0019\u0002\u06a2\u06a3",
"\u0007>\u0002\u0002\u06a3\u06a4\u0007\u0002\u0002\u0003\u06a4\u06b2",
"\u0003\u0002\u0002\u0002\u06a5\u06a6\u0007)\u0002\u0002\u06a6\u06a7",
"\u0005\u000e\b\u0002\u06a7\u06a8\u0007\u0002\u0002\u0003\u06a8\u06b2",
"\u0003\u0002\u0002\u0002\u06a9\u06aa\u00074\u0002\u0002\u06aa\u06ab",
"\u0007=\u0002\u0002\u06ab\u06ac\u0005\u0082B\u0002\u06ac\u06ad\u0007",
">\u0002\u0002\u06ad\u06ae\u0007\u0002\u0002\u0003\u06ae\u06b2\u0003",
"\u0002\u0002\u0002\u06af\u06b0\u0007R\u0002\u0002\u06b0\u06b2\u0007",
"k\u0002\u0002\u06b1\u068a\u0003\u0002\u0002\u0002\u06b1\u068d\u0003",
"\u0002\u0002\u0002\u06b1\u0691\u0003\u0002\u0002\u0002\u06b1\u0695\u0003",
"\u0002\u0002\u0002\u06b1\u0699\u0003\u0002\u0002\u0002\u06b1\u069f\u0003",
"\u0002\u0002\u0002\u06b1\u06a5\u0003\u0002\u0002\u0002\u06b1\u06a9\u0003",
"\u0002\u0002\u0002\u06b1\u06af\u0003\u0002\u0002\u0002\u06b2\u00cb\u0003",
"\u0002\u0002\u0002\u06b3\u06b4\u0005\u0082B\u0002\u06b4\u06b5\u0007",
"\u0002\u0002\u0003\u06b5\u06ba\u0003\u0002\u0002\u0002\u06b6\u06b7\u0005",
"0\u0019\u0002\u06b7\u06b8\u0007\u0002\u0002\u0003\u06b8\u06ba\u0003",
"\u0002\u0002\u0002\u06b9\u06b3\u0003\u0002\u0002\u0002\u06b9\u06b6\u0003",
"\u0002\u0002\u0002\u06ba\u00cd\u0003\u0002\u0002\u0002\u06bb\u06c3\u0007",
"P\u0002\u0002\u06bc\u06c3\u0007M\u0002\u0002\u06bd\u06c3\u0007I\u0002",
"\u0002\u06be\u06c3\u0007K\u0002\u0002\u06bf\u06c3\u0007V\u0002\u0002",
"\u06c0\u06c1\u0007U\u0002\u0002\u06c1\u06c3\u0007\u0002\u0002\u0003",
"\u06c2\u06bb\u0003\u0002\u0002\u0002\u06c2\u06bc\u0003\u0002\u0002\u0002",
"\u06c2\u06bd\u0003\u0002\u0002\u0002\u06c2\u06be\u0003\u0002\u0002\u0002",
"\u06c2\u06bf\u0003\u0002\u0002\u0002\u06c2\u06c0\u0003\u0002\u0002\u0002",
"\u06c3\u00cf\u0003\u0002\u0002\u0002\u06c4\u06c5\u0005\u000e\b\u0002",
"\u06c5\u06c6\u0007\u0002\u0002\u0003\u06c6\u06d5\u0003\u0002\u0002\u0002",
"\u06c7\u06c8\u0007=\u0002\u0002\u06c8\u06c9\u0005\u0082B\u0002\u06c9",
"\u06ca\u0007>\u0002\u0002\u06ca\u06cb\u0005\u0014\u000b\u0002\u06cb",
"\u06cc\u0007\u0002\u0002\u0003\u06cc\u06d5\u0003\u0002\u0002\u0002\u06cd",
"\u06ce\u0007\u0003\u0002\u0002\u06ce\u06cf\u0007=\u0002\u0002\u06cf",
"\u06d0\u0005\u0082B\u0002\u06d0\u06d1\u0007>\u0002\u0002\u06d1\u06d2",
"\u0005\u0014\u000b\u0002\u06d2\u06d3\u0007\u0002\u0002\u0003\u06d3\u06d5",
"\u0003\u0002\u0002\u0002\u06d4\u06c4\u0003\u0002\u0002\u0002\u06d4\u06c7",
"\u0003\u0002\u0002\u0002\u06d4\u06cd\u0003\u0002\u0002\u0002\u06d5\u00d1",
"\u0003\u0002\u0002\u0002\u06d6\u06d7\u0005\u0014\u000b\u0002\u06d7\u06d8",
"\u0007\u0002\u0002\u0003\u06d8\u06e9\u0003\u0002\u0002\u0002\u06d9\u06da",
"\u0005\u0016\f\u0002\u06da\u06db\u0007M\u0002\u0002\u06db\u06dc\u0005",
"\u0014\u000b\u0002\u06dc\u06dd\u0007\u0002\u0002\u0003\u06dd\u06e9\u0003",
"\u0002\u0002\u0002\u06de\u06df\u0005\u0016\f\u0002\u06df\u06e0\u0007",
"N\u0002\u0002\u06e0\u06e1\u0005\u0014\u000b\u0002\u06e1\u06e2\u0007",
"\u0002\u0002\u0003\u06e2\u06e9\u0003\u0002\u0002\u0002\u06e3\u06e4\u0005",
"\u0016\f\u0002\u06e4\u06e5\u0007O\u0002\u0002\u06e5\u06e6\u0005\u0014",
"\u000b\u0002\u06e6\u06e7\u0007\u0002\u0002\u0003\u06e7\u06e9\u0003\u0002",
"\u0002\u0002\u06e8\u06d6\u0003\u0002\u0002\u0002\u06e8\u06d9\u0003\u0002",
"\u0002\u0002\u06e8\u06de\u0003\u0002\u0002\u0002\u06e8\u06e3\u0003\u0002",
"\u0002\u0002\u06e9\u00d3\u0003\u0002\u0002\u0002\u06ea\u06eb\u0005\u0016",
"\f\u0002\u06eb\u06ec\u0007\u0002\u0002\u0003\u06ec\u06f8\u0003\u0002",
"\u0002\u0002\u06ed\u06ee\u0005\u0018\r\u0002\u06ee\u06ef\u0007I\u0002",
"\u0002\u06ef\u06f0\u0005\u0016\f\u0002\u06f0\u06f1\u0007\u0002\u0002",
"\u0003\u06f1\u06f8\u0003\u0002\u0002\u0002\u06f2\u06f3\u0005\u0018\r",
"\u0002\u06f3\u06f4\u0007K\u0002\u0002\u06f4\u06f5\u0005\u0016\f\u0002",
"\u06f5\u06f6\u0007\u0002\u0002\u0003\u06f6\u06f8\u0003\u0002\u0002\u0002",
"\u06f7\u06ea\u0003\u0002\u0002\u0002\u06f7\u06ed\u0003\u0002\u0002\u0002",
"\u06f7\u06f2\u0003\u0002\u0002\u0002\u06f8\u00d5\u0003\u0002\u0002\u0002",
"\u06f9\u06fa\u0005\u0018\r\u0002\u06fa\u06fb\u0007\u0002\u0002\u0003",
"\u06fb\u0707\u0003\u0002\u0002\u0002\u06fc\u06fd\u0005\u001a\u000e\u0002",
"\u06fd\u06fe\u0007G\u0002\u0002\u06fe\u06ff\u0005\u0018\r\u0002\u06ff",
"\u0700\u0007\u0002\u0002\u0003\u0700\u0707\u0003\u0002\u0002\u0002\u0701",
"\u0702\u0005\u001a\u000e\u0002\u0702\u0703\u0007H\u0002\u0002\u0703",
"\u0704\u0005\u0018\r\u0002\u0704\u0705\u0007\u0002\u0002\u0003\u0705",
"\u0707\u0003\u0002\u0002\u0002\u0706\u06f9\u0003\u0002\u0002\u0002\u0706",
"\u06fc\u0003\u0002\u0002\u0002\u0706\u0701\u0003\u0002\u0002\u0002\u0707",
"\u00d7\u0003\u0002\u0002\u0002\u0708\u0709\u0005\u001a\u000e\u0002\u0709",
"\u070a\u0007\u0002\u0002\u0003\u070a\u0720\u0003\u0002\u0002\u0002\u070b",
"\u070c\u0005\u001c\u000f\u0002\u070c\u070d\u0007C\u0002\u0002\u070d",
"\u070e\u0005\u001a\u000e\u0002\u070e\u070f\u0007\u0002\u0002\u0003\u070f",
"\u0720\u0003\u0002\u0002\u0002\u0710\u0711\u0005\u001c\u000f\u0002\u0711",
"\u0712\u0007E\u0002\u0002\u0712\u0713\u0005\u001a\u000e\u0002\u0713",
"\u0714\u0007\u0002\u0002\u0003\u0714\u0720\u0003\u0002\u0002\u0002\u0715",
"\u0716\u0005\u001c\u000f\u0002\u0716\u0717\u0007D\u0002\u0002\u0717",
"\u0718\u0005\u001a\u000e\u0002\u0718\u0719\u0007\u0002\u0002\u0003\u0719",
"\u0720\u0003\u0002\u0002\u0002\u071a\u071b\u0005\u001c\u000f\u0002\u071b",
"\u071c\u0007F\u0002\u0002\u071c\u071d\u0005\u001a\u000e\u0002\u071d",
"\u071e\u0007\u0002\u0002\u0003\u071e\u0720\u0003\u0002\u0002\u0002\u071f",
"\u0708\u0003\u0002\u0002\u0002\u071f\u070b\u0003\u0002\u0002\u0002\u071f",
"\u0710\u0003\u0002\u0002\u0002\u071f\u0715\u0003\u0002\u0002\u0002\u071f",
"\u071a\u0003\u0002\u0002\u0002\u0720\u00d9\u0003\u0002\u0002\u0002\u0721",
"\u0722\u0005\u001c\u000f\u0002\u0722\u0723\u0007\u0002\u0002\u0003\u0723",
"\u072f\u0003\u0002\u0002\u0002\u0724\u0725\u0005\u001e\u0010\u0002\u0725",
"\u0726\u0007f\u0002\u0002\u0726\u0727\u0005\u001c\u000f\u0002\u0727",
"\u0728\u0007\u0002\u0002\u0003\u0728\u072f\u0003\u0002\u0002\u0002\u0729",
"\u072a\u0005\u001e\u0010\u0002\u072a\u072b\u0007g\u0002\u0002\u072b",
"\u072c\u0005\u001c\u000f\u0002\u072c\u072d\u0007\u0002\u0002\u0003\u072d",
"\u072f\u0003\u0002\u0002\u0002\u072e\u0721\u0003\u0002\u0002\u0002\u072e",
"\u0724\u0003\u0002\u0002\u0002\u072e\u0729\u0003\u0002\u0002\u0002\u072f",
"\u00db\u0003\u0002\u0002\u0002\u0730\u0731\u0005\u001e\u0010\u0002\u0731",
"\u0732\u0007\u0002\u0002\u0003\u0732\u0739\u0003\u0002\u0002\u0002\u0733",
"\u0734\u0005 \u0011\u0002\u0734\u0735\u0007P\u0002\u0002\u0735\u0736",
"\u0005\u001e\u0010\u0002\u0736\u0737\u0007\u0002\u0002\u0003\u0737\u0739",
"\u0003\u0002\u0002\u0002\u0738\u0730\u0003\u0002\u0002\u0002\u0738\u0733",
"\u0003\u0002\u0002\u0002\u0739\u00dd\u0003\u0002\u0002\u0002\u073a\u073b",
"\u0005 \u0011\u0002\u073b\u073c\u0007\u0002\u0002\u0003\u073c\u0743",
"\u0003\u0002\u0002\u0002\u073d\u073e\u0005\"\u0012\u0002\u073e\u073f",
"\u0007T\u0002\u0002\u073f\u0740\u0005 \u0011\u0002\u0740\u0741\u0007",
"\u0002\u0002\u0003\u0741\u0743\u0003\u0002\u0002\u0002\u0742\u073a\u0003",
"\u0002\u0002\u0002\u0742\u073d\u0003\u0002\u0002\u0002\u0743\u00df\u0003",
"\u0002\u0002\u0002\u0744\u0745\u0005\"\u0012\u0002\u0745\u0746\u0007",
"\u0002\u0002\u0003\u0746\u074d\u0003\u0002\u0002\u0002\u0747\u0748\u0005",
"$\u0013\u0002\u0748\u0749\u0007Q\u0002\u0002\u0749\u074a\u0005\"\u0012",
"\u0002\u074a\u074b\u0007\u0002\u0002\u0003\u074b\u074d\u0003\u0002\u0002",
"\u0002\u074c\u0744\u0003\u0002\u0002\u0002\u074c\u0747\u0003\u0002\u0002",
"\u0002\u074d\u00e1\u0003\u0002\u0002\u0002\u074e\u074f\u0005$\u0013",
"\u0002\u074f\u0750\u0007\u0002\u0002\u0003\u0750\u0757\u0003\u0002\u0002",
"\u0002\u0751\u0752\u0005&\u0014\u0002\u0752\u0753\u0007R\u0002\u0002",
"\u0753\u0754\u0005$\u0013\u0002\u0754\u0755\u0007\u0002\u0002\u0003",
"\u0755\u0757\u0003\u0002\u0002\u0002\u0756\u074e\u0003\u0002\u0002\u0002",
"\u0756\u0751\u0003\u0002\u0002\u0002\u0757\u00e3\u0003\u0002\u0002\u0002",
"\u0758\u0759\u0005&\u0014\u0002\u0759\u075a\u0007\u0002\u0002\u0003",
"\u075a\u0761\u0003\u0002\u0002\u0002\u075b\u075c\u0005(\u0015\u0002",
"\u075c\u075d\u0007S\u0002\u0002\u075d\u075e\u0005&\u0014\u0002\u075e",
"\u075f\u0007\u0002\u0002\u0003\u075f\u0761\u0003\u0002\u0002\u0002\u0760",
"\u0758\u0003\u0002\u0002\u0002\u0760\u075b\u0003\u0002\u0002\u0002\u0761",
"\u00e5\u0003\u0002\u0002\u0002\u0762\u0768\u0005(\u0015\u0002\u0763",
"\u0764\u0007W\u0002\u0002\u0764\u0765\u00050\u0019\u0002\u0765\u0766",
"\u0007X\u0002\u0002\u0766\u0767\u0005*\u0016\u0002\u0767\u0769\u0003",
"\u0002\u0002\u0002\u0768\u0763\u0003\u0002\u0002\u0002\u0768\u0769\u0003",
"\u0002\u0002\u0002\u0769\u076a\u0003\u0002\u0002\u0002\u076a\u076b\u0007",
"\u0002\u0002\u0003\u076b\u00e7\u0003\u0002\u0002\u0002\u076c\u076d\u0005",
"*\u0016\u0002\u076d\u076e\u0007\u0002\u0002\u0003\u076e\u0775\u0003",
"\u0002\u0002\u0002\u076f\u0770\u0005\u000e\b\u0002\u0770\u0771\u0005",
".\u0018\u0002\u0771\u0772\u0005,\u0017\u0002\u0772\u0773\u0007\u0002",
"\u0002\u0003\u0773\u0775\u0003\u0002\u0002\u0002\u0774\u076c\u0003\u0002",
"\u0002\u0002\u0774\u076f\u0003\u0002\u0002\u0002\u0775\u00e9\u0003\u0002",
"\u0002\u0002\u0776\u0783\u0007[\u0002\u0002\u0777\u0783\u0007\\\u0002",
"\u0002\u0778\u0783\u0007]\u0002\u0002\u0779\u0783\u0007^\u0002\u0002",
"\u077a\u0783\u0007_\u0002\u0002\u077b\u0783\u0007`\u0002\u0002\u077c",
"\u0783\u0007a\u0002\u0002\u077d\u0783\u0007b\u0002\u0002\u077e\u0783",
"\u0007c\u0002\u0002\u077f\u0783\u0007d\u0002\u0002\u0780\u0781\u0007",
"e\u0002\u0002\u0781\u0783\u0007\u0002\u0002\u0003\u0782\u0776\u0003",
"\u0002\u0002\u0002\u0782\u0777\u0003\u0002\u0002\u0002\u0782\u0778\u0003",
"\u0002\u0002\u0002\u0782\u0779\u0003\u0002\u0002\u0002\u0782\u077a\u0003",
"\u0002\u0002\u0002\u0782\u077b\u0003\u0002\u0002\u0002\u0782\u077c\u0003",
"\u0002\u0002\u0002\u0782\u077d\u0003\u0002\u0002\u0002\u0782\u077e\u0003",
"\u0002\u0002\u0002\u0782\u077f\u0003\u0002\u0002\u0002\u0782\u0780\u0003",
"\u0002\u0002\u0002\u0783\u00eb\u0003\u0002\u0002\u0002\u0784\u0785\u0005",
",\u0017\u0002\u0785\u0786\u0007\u0002\u0002\u0003\u0786\u078d\u0003",
"\u0002\u0002\u0002\u0787\u0788\u00050\u0019\u0002\u0788\u0789\u0007",
"Z\u0002\u0002\u0789\u078a\u0005,\u0017\u0002\u078a\u078b\u0007\u0002",
"\u0002\u0003\u078b\u078d\u0003\u0002\u0002\u0002\u078c\u0784\u0003\u0002",
"\u0002\u0002\u078c\u0787\u0003\u0002\u0002\u0002\u078d\u00ed\u0003\u0002",
"\u0002\u0002\u078e\u078f\u0005*\u0016\u0002\u078f\u0790\u0007\u0002",
"\u0002\u0003\u0790\u00ef\u0003\u0002\u0002\u0002\u0791\u0792\u00056",
"\u001c\u0002\u0792\u0793\u0007\u0002\u0002\u0003\u0793\u07a1\u0003\u0002",
"\u0002\u0002\u0794\u0795\u00058\u001d\u0002\u0795\u0796\u0005> \u0002",
"\u0796\u0797\u0007Y\u0002\u0002\u0797\u0798\u0007\u0002\u0002\u0003",
"\u0798\u07a1\u0003\u0002\u0002\u0002\u0799\u079a\u00058\u001d\u0002",
"\u079a\u079b\u0007Y\u0002\u0002\u079b\u079c\u0007\u0002\u0002\u0003",
"\u079c\u07a1\u0003\u0002\u0002\u0002\u079d\u079e\u0005\u0094K\u0002",
"\u079e\u079f\u0007\u0002\u0002\u0003\u079f\u07a1\u0003\u0002\u0002\u0002",
"\u07a0\u0791\u0003\u0002\u0002\u0002\u07a0\u0794\u0003\u0002\u0002\u0002",
"\u07a0\u0799\u0003\u0002\u0002\u0002\u07a0\u079d\u0003\u0002\u0002\u0002",
"\u07a1\u00f1\u0003\u0002\u0002\u0002\u07a2\u07a3\u00058\u001d\u0002",
"\u07a3\u07a4\u0005j6\u0002\u07a4\u07a6\u0007=\u0002\u0002\u07a5\u07a7",
"\u0005z>\u0002\u07a6\u07a5\u0003\u0002\u0002\u0002\u07a6\u07a7\u0003",
"\u0002\u0002\u0002\u07a7\u07a8\u0003\u0002\u0002\u0002\u07a8\u07a9\u0007",
">\u0002\u0002\u07a9\u07aa\u0007Y\u0002\u0002\u07aa\u07ab\u0007\u0002",
"\u0002\u0003\u07ab\u00f3\u0003\u0002\u0002\u0002\u07ac\u07ae\u0005<",
"\u001f\u0002\u07ad\u07ac\u0003\u0002\u0002\u0002\u07ae\u07af\u0003\u0002",
"\u0002\u0002\u07af\u07ad\u0003\u0002\u0002\u0002\u07af\u07b0\u0003\u0002",
"\u0002\u0002\u07b0\u07b1\u0003\u0002\u0002\u0002\u07b1\u07b2\u0007\u0002",
"\u0002\u0003\u07b2\u00f5\u0003\u0002\u0002\u0002\u07b3\u07b5\u0005<",
"\u001f\u0002\u07b4\u07b3\u0003\u0002\u0002\u0002\u07b5\u07b6\u0003\u0002",
"\u0002\u0002\u07b6\u07b4\u0003\u0002\u0002\u0002\u07b6\u07b7\u0003\u0002",
"\u0002\u0002\u07b7\u07b8\u0003\u0002\u0002\u0002\u07b8\u07b9\u0007\u0002",
"\u0002\u0003\u07b9\u00f7\u0003\u0002\u0002\u0002\u07ba\u07bb\u0005B",
"\"\u0002\u07bb\u07bc\u0007\u0002\u0002\u0003\u07bc\u07ca\u0003\u0002",
"\u0002\u0002\u07bd\u07be\u0005D#\u0002\u07be\u07bf\u0007\u0002\u0002",
"\u0003\u07bf\u07ca\u0003\u0002\u0002\u0002\u07c0\u07c1\u0005`1\u0002",
"\u07c1\u07c2\u0007\u0002\u0002\u0003\u07c2\u07ca\u0003\u0002\u0002\u0002",
"\u07c3\u07c4\u0005b2\u0002\u07c4\u07c5\u0007\u0002\u0002\u0003\u07c5",
"\u07ca\u0003\u0002\u0002\u0002\u07c6\u07c7\u0005d3\u0002\u07c7\u07c8",
"\u0007\u0002\u0002\u0003\u07c8\u07ca\u0003\u0002\u0002\u0002\u07c9\u07ba",
"\u0003\u0002\u0002\u0002\u07c9\u07bd\u0003\u0002\u0002\u0002\u07c9\u07c0",
"\u0003\u0002\u0002\u0002\u07c9\u07c3\u0003\u0002\u0002\u0002\u07c9\u07c6",
"\u0003\u0002\u0002\u0002\u07ca\u00f9\u0003\u0002\u0002\u0002\u07cb\u07cc",
"\u0005@!\u0002\u07cc\u07cd\u0007\u0002\u0002\u0003\u07cd\u07d4\u0003",
"\u0002\u0002\u0002\u07ce\u07cf\u0005> \u0002\u07cf\u07d0\u0007Z\u0002",
"\u0002\u07d0\u07d1\u0005@!\u0002\u07d1\u07d2\u0007\u0002\u0002\u0003",
"\u07d2\u07d4\u0003\u0002\u0002\u0002\u07d3\u07cb\u0003\u0002\u0002\u0002",
"\u07d3\u07ce\u0003\u0002\u0002\u0002\u07d4\u00fb\u0003\u0002\u0002\u0002",
"\u07d5\u07d6\u0005f4\u0002\u07d6\u07d7\u0007\u0002\u0002\u0003\u07d7",
"\u07de\u0003\u0002\u0002\u0002\u07d8\u07d9\u0005f4\u0002\u07d9\u07da",
"\u0007[\u0002\u0002\u07da\u07db\u0005\u008aF\u0002\u07db\u07dc\u0007",
"\u0002\u0002\u0003\u07dc\u07de\u0003\u0002\u0002\u0002\u07dd\u07d5\u0003",
"\u0002\u0002\u0002\u07dd\u07d8\u0003\u0002\u0002\u0002\u07de\u00fd\u0003",
"\u0002\u0002\u0002\u07df\u07e0\u0007-\u0002\u0002\u07e0\u07ec\u0007",
"\u0002\u0002\u0003\u07e1\u07e2\u0007\u001c\u0002\u0002\u07e2\u07ec\u0007",
"\u0002\u0002\u0003\u07e3\u07e4\u0007*\u0002\u0002\u07e4\u07ec\u0007",
"\u0002\u0002\u0003\u07e5\u07e6\u0007<\u0002\u0002\u07e6\u07ec\u0007",
"\u0002\u0002\u0003\u07e7\u07e8\u0007\u0011\u0002\u0002\u07e8\u07ec\u0007",
"\u0002\u0002\u0003\u07e9\u07ea\u0007$\u0002\u0002\u07ea\u07ec\u0007",
"\u0002\u0002\u0003\u07eb\u07df\u0003\u0002\u0002\u0002\u07eb\u07e1\u0003",
"\u0002\u0002\u0002\u07eb\u07e3\u0003\u0002\u0002\u0002\u07eb\u07e5\u0003",
"\u0002\u0002\u0002\u07eb\u07e7\u0003\u0002\u0002\u0002\u07eb\u07e9\u0003",
"\u0002\u0002\u0002\u07ec\u00ff\u0003\u0002\u0002\u0002\u07ed\u07ee\u0007",
"0\u0002\u0002\u07ee\u0809\u0007\u0002\u0002\u0003\u07ef\u07f0\u0007",
"\u0014\u0002\u0002\u07f0\u0809\u0007\u0002\u0002\u0003\u07f1\u07f2\u0007",
"\'\u0002\u0002\u07f2\u0809\u0007\u0002\u0002\u0003\u07f3\u07f4\u0007",
"\"\u0002\u0002\u07f4\u0809\u0007\u0002\u0002\u0003\u07f5\u07f6\u0007",
"#\u0002\u0002\u07f6\u0809\u0007\u0002\u0002\u0003\u07f7\u07f8\u0007",
"\u001d\u0002\u0002\u07f8\u0809\u0007\u0002\u0002\u0003\u07f9\u07fa\u0007",
"\u0019\u0002\u0002\u07fa\u0809\u0007\u0002\u0002\u0003\u07fb\u07fc\u0007",
"(\u0002\u0002\u07fc\u0809\u0007\u0002\u0002\u0003\u07fd\u07fe\u0007",
"/\u0002\u0002\u07fe\u0809\u0007\u0002\u0002\u0003\u07ff\u0800\u0007",
"6\u0002\u0002\u0800\u0809\u0007\u0002\u0002\u0003\u0801\u0802\u0007",
"7\u0002\u0002\u0802\u0809\u0007\u0002\u0002\u0003\u0803\u0804\u0007",
"\u0006\u0002\u0002\u0804\u0809\u0007\u0002\u0002\u0003\u0805\u0806\u0007",
"\u0007\u0002\u0002\u0806\u0809\u0007\u0002\u0002\u0003\u0807\u0809\u0007",
"\b\u0002\u0002\u0808\u07ed\u0003\u0002\u0002\u0002\u0808\u07ef\u0003",
"\u0002\u0002\u0002\u0808\u07f1\u0003\u0002\u0002\u0002\u0808\u07f3\u0003",
"\u0002\u0002\u0002\u0808\u07f5\u0003\u0002\u0002\u0002\u0808\u07f7\u0003",
"\u0002\u0002\u0002\u0808\u07f9\u0003\u0002\u0002\u0002\u0808\u07fb\u0003",
"\u0002\u0002\u0002\u0808\u07fd\u0003\u0002\u0002\u0002\u0808\u07ff\u0003",
"\u0002\u0002\u0002\u0808\u0801\u0003\u0002\u0002\u0002\u0808\u0803\u0003",
"\u0002\u0002\u0002\u0808\u0805\u0003\u0002\u0002\u0002\u0808\u0807\u0003",
"\u0002\u0002\u0002\u0809\u080a\u0003\u0002\u0002\u0002\u080a\u0822\u0007",
"\u0002\u0002\u0003\u080b\u080c\u0007\u0003\u0002\u0002\u080c\u080d\u0007",
"=\u0002\u0002\u080d\u080e\t\u0006\u0002\u0002\u080e\u080f\u0007>\u0002",
"\u0002\u080f\u0822\u0007\u0002\u0002\u0003\u0810\u0811\u0005^0\u0002",
"\u0811\u0812\u0007\u0002\u0002\u0003\u0812\u0822\u0003\u0002\u0002\u0002",
"\u0813\u0814\u0005F$\u0002\u0814\u0815\u0007\u0002\u0002\u0003\u0815",
"\u0822\u0003\u0002\u0002\u0002\u0816\u0817\u0005V,\u0002\u0817\u0818",
"\u0007\u0002\u0002\u0003\u0818\u0822\u0003\u0002\u0002\u0002\u0819\u081a",
"\u0005\u0088E\u0002\u081a\u081b\u0007\u0002\u0002\u0003\u081b\u0822",
"\u0003\u0002\u0002\u0002\u081c\u081d\u0007\t\u0002\u0002\u081d\u081e",
"\u0007=\u0002\u0002\u081e\u081f\u00052\u001a\u0002\u081f\u0820\u0007",
">\u0002\u0002\u0820\u0822\u0003\u0002\u0002\u0002\u0821\u0808\u0003",
"\u0002\u0002\u0002\u0821\u080b\u0003\u0002\u0002\u0002\u0821\u0810\u0003",
"\u0002\u0002\u0002\u0821\u0813\u0003\u0002\u0002\u0002\u0821\u0816\u0003",
"\u0002\u0002\u0002\u0821\u0819\u0003\u0002\u0002\u0002\u0821\u081c\u0003",
"\u0002\u0002\u0002\u0822\u0101\u0003\u0002\u0002\u0002\u0823\u0825\u0005",
"H%\u0002\u0824\u0826\u0007k\u0002\u0002\u0825\u0824\u0003\u0002\u0002",
"\u0002\u0825\u0826\u0003\u0002\u0002\u0002\u0826\u0827\u0003\u0002\u0002",
"\u0002\u0827\u0828\u0005J&\u0002\u0828\u0829\u0007\u0002\u0002\u0003",
"\u0829\u082f\u0003\u0002\u0002\u0002\u082a\u082b\u0005H%\u0002\u082b",
"\u082c\u0007k\u0002\u0002\u082c\u082d\u0007\u0002\u0002\u0003\u082d",
"\u082f\u0003\u0002\u0002\u0002\u082e\u0823\u0003\u0002\u0002\u0002\u082e",
"\u082a\u0003\u0002\u0002\u0002\u082f\u0103\u0003\u0002\u0002\u0002\u0830",
"\u0831\u0007+\u0002\u0002\u0831\u0835\u0007\u0002\u0002\u0003\u0832",
"\u0833\u0007.\u0002\u0002\u0833\u0835\u0007\u0002\u0002\u0003\u0834",
"\u0830\u0003\u0002\u0002\u0002\u0834\u0832\u0003\u0002\u0002\u0002\u0835",
"\u0105\u0003\u0002\u0002\u0002\u0836\u0837\u0007A\u0002\u0002\u0837",
"\u0838\u0005L\'\u0002\u0838\u0839\u0007B\u0002\u0002\u0839\u083a\u0007",
"\u0002\u0002\u0003\u083a\u0107\u0003\u0002\u0002\u0002\u083b\u083c\u0005",
"N(\u0002\u083c\u083d\u0007\u0002\u0002\u0003\u083d\u0843\u0003\u0002",
"\u0002\u0002\u083e\u083f\u0005L\'\u0002\u083f\u0840\u0005N(\u0002\u0840",
"\u0841\u0007\u0002\u0002\u0003\u0841\u0843\u0003\u0002\u0002\u0002\u0842",
"\u083b\u0003\u0002\u0002\u0002\u0842\u083e\u0003\u0002\u0002\u0002\u0843",
"\u0109\u0003\u0002\u0002\u0002\u0844\u0846\u0005P)\u0002\u0845\u0844",
"\u0003\u0002\u0002\u0002\u0845\u0846\u0003\u0002\u0002\u0002\u0846\u0847",
"\u0003\u0002\u0002\u0002\u0847\u0848\u0005R*\u0002\u0848\u0849\u0007",
"Y\u0002\u0002\u0849\u084a\u0007\u0002\u0002\u0003\u084a\u084f\u0003",
"\u0002\u0002\u0002\u084b\u084c\u0005\u0094K\u0002\u084c\u084d\u0007",
"\u0002\u0002\u0003\u084d\u084f\u0003\u0002\u0002\u0002\u084e\u0845\u0003",
"\u0002\u0002\u0002\u084e\u084b\u0003\u0002\u0002\u0002\u084f\u010b\u0003",
"\u0002\u0002\u0002\u0850\u0852\u0005D#\u0002\u0851\u0853\u0005P)\u0002",
"\u0852\u0851\u0003\u0002\u0002\u0002\u0852\u0853\u0003\u0002\u0002\u0002",
"\u0853\u0854\u0003\u0002\u0002\u0002\u0854\u0855\u0007\u0002\u0002\u0003",
"\u0855\u085d\u0003\u0002\u0002\u0002\u0856\u0858\u0005`1\u0002\u0857",
"\u0859\u0005P)\u0002\u0858\u0857\u0003\u0002\u0002\u0002\u0858\u0859",
"\u0003\u0002\u0002\u0002\u0859\u085a\u0003\u0002\u0002\u0002\u085a\u085b",
"\u0007\u0002\u0002\u0003\u085b\u085d\u0003\u0002\u0002\u0002\u085c\u0850",
"\u0003\u0002\u0002\u0002\u085c\u0856\u0003\u0002\u0002\u0002\u085d\u010d",
"\u0003\u0002\u0002\u0002\u085e\u085f\u0005T+\u0002\u085f\u0860\u0007",
"\u0002\u0002\u0003\u0860\u0867\u0003\u0002\u0002\u0002\u0861\u0862\u0005",
"R*\u0002\u0862\u0863\u0007Z\u0002\u0002\u0863\u0864\u0005T+\u0002\u0864",
"\u0865\u0007\u0002\u0002\u0003\u0865\u0867\u0003\u0002\u0002\u0002\u0866",
"\u085e\u0003\u0002\u0002\u0002\u0866\u0861\u0003\u0002\u0002\u0002\u0867",
"\u010f\u0003\u0002\u0002\u0002\u0868\u0869\u0005f4\u0002\u0869\u086a",
"\u0007\u0002\u0002\u0003\u086a\u0873\u0003\u0002\u0002\u0002\u086b\u086d",
"\u0005f4\u0002\u086c\u086b\u0003\u0002\u0002\u0002\u086c\u086d\u0003",
"\u0002\u0002\u0002\u086d\u086e\u0003\u0002\u0002\u0002\u086e\u086f\u0007",
"X\u0002\u0002\u086f\u0870\u00052\u001a\u0002\u0870\u0871\u0007\u0002",
"\u0002\u0003\u0871\u0873\u0003\u0002\u0002\u0002\u0872\u0868\u0003\u0002",
"\u0002\u0002\u0872\u086c\u0003\u0002\u0002\u0002\u0873\u0111\u0003\u0002",
"\u0002\u0002\u0874\u0876\u0007\u001b\u0002\u0002\u0875\u0877\u0007k",
"\u0002\u0002\u0876\u0875\u0003\u0002\u0002\u0002\u0876\u0877\u0003\u0002",
"\u0002\u0002\u0877\u0878\u0003\u0002\u0002\u0002\u0878\u0879\u0007A",
"\u0002\u0002\u0879\u087a\u0005X-\u0002\u087a\u087b\u0007B\u0002\u0002",
"\u087b\u087c\u0007\u0002\u0002\u0003\u087c\u088b\u0003\u0002\u0002\u0002",
"\u087d\u087f\u0007\u001b\u0002\u0002\u087e\u0880\u0007k\u0002\u0002",
"\u087f\u087e\u0003\u0002\u0002\u0002\u087f\u0880\u0003\u0002\u0002\u0002",
"\u0880\u0881\u0003\u0002\u0002\u0002\u0881\u0882\u0007A\u0002\u0002",
"\u0882\u0883\u0005X-\u0002\u0883\u0884\u0007Z\u0002\u0002\u0884\u0885",
"\u0007B\u0002\u0002\u0885\u0886\u0007\u0002\u0002\u0003\u0886\u088b",
"\u0003\u0002\u0002\u0002\u0887\u0888\u0007\u001b\u0002\u0002\u0888\u0889",
"\u0007k\u0002\u0002\u0889\u088b\u0007\u0002\u0002\u0003\u088a\u0874",
"\u0003\u0002\u0002\u0002\u088a\u087d\u0003\u0002\u0002\u0002\u088a\u0887",
"\u0003\u0002\u0002\u0002\u088b\u0113\u0003\u0002\u0002\u0002\u088c\u088d",
"\u0005Z.\u0002\u088d\u088e\u0007\u0002\u0002\u0003\u088e\u0895\u0003",
"\u0002\u0002\u0002\u088f\u0890\u0005X-\u0002\u0890\u0891\u0007Z\u0002",
"\u0002\u0891\u0892\u0005Z.\u0002\u0892\u0893\u0007\u0002\u0002\u0003",
"\u0893\u0895\u0003\u0002\u0002\u0002\u0894\u088c\u0003\u0002\u0002\u0002",
"\u0894\u088f\u0003\u0002\u0002\u0002\u0895\u0115\u0003\u0002\u0002\u0002",
"\u0896\u0897\u0005\\/\u0002\u0897\u0898\u0007\u0002\u0002\u0003\u0898",
"\u089f\u0003\u0002\u0002\u0002\u0899\u089a\u0005\\/\u0002\u089a\u089b",
"\u0007[\u0002\u0002\u089b\u089c\u00052\u001a\u0002\u089c\u089d\u0007",
"\u0002\u0002\u0003\u089d\u089f\u0003\u0002\u0002\u0002\u089e\u0896\u0003",
"\u0002\u0002\u0002\u089e\u0899\u0003\u0002\u0002\u0002\u089f\u0117\u0003",
"\u0002\u0002\u0002\u08a0\u08a1\u0007k\u0002\u0002\u08a1\u08a2\u0007",
"\u0002\u0002\u0003\u08a2\u0119\u0003\u0002\u0002\u0002\u08a3\u08a4\u0007",
"5\u0002\u0002\u08a4\u08a5\u0007=\u0002\u0002\u08a5\u08a6\u0005\u0082",
"B\u0002\u08a6\u08a7\u0007>\u0002\u0002\u08a7\u08a8\u0007\u0002\u0002",
"\u0003\u08a8\u011b\u0003\u0002\u0002\u0002\u08a9\u08aa\u0007\u0015\u0002",
"\u0002\u08aa\u08b2\u0007\u0002\u0002\u0003\u08ab\u08ac\u0007%\u0002",
"\u0002\u08ac\u08b2\u0007\u0002\u0002\u0003\u08ad\u08ae\u00071\u0002",
"\u0002\u08ae\u08b2\u0007\u0002\u0002\u0003\u08af\u08b0\u00075\u0002",
"\u0002\u08b0\u08b2\u0007\u0002\u0002\u0003\u08b1\u08a9\u0003\u0002\u0002",
"\u0002\u08b1\u08ab\u0003\u0002\u0002\u0002\u08b1\u08ad\u0003\u0002\u0002",
"\u0002\u08b1\u08af\u0003\u0002\u0002\u0002\u08b2\u011d\u0003\u0002\u0002",
"\u0002\u08b3\u08b4\u0007!\u0002\u0002\u08b4\u08ba\u0007\u0002\u0002",
"\u0003\u08b5\u08b6\u0007:\u0002\u0002\u08b6\u08ba\u0007\u0002\u0002",
"\u0003\u08b7\u08ba\u0007\n\u0002\u0002\u08b8\u08ba\u0007\u000b\u0002",
"\u0002\u08b9\u08b3\u0003\u0002\u0002\u0002\u08b9\u08b5\u0003\u0002\u0002",
"\u0002\u08b9\u08b7\u0003\u0002\u0002\u0002\u08b9\u08b8\u0003\u0002\u0002",
"\u0002\u08ba\u08bb\u0003\u0002\u0002\u0002\u08bb\u08c5\u0007\u0002\u0002",
"\u0003\u08bc\u08bd\u0005n8\u0002\u08bd\u08be\u0007\u0002\u0002\u0003",
"\u08be\u08c5\u0003\u0002\u0002\u0002\u08bf\u08c0\u0007\f\u0002\u0002",
"\u08c0\u08c1\u0007=\u0002\u0002\u08c1\u08c2\u0007k\u0002\u0002\u08c2",
"\u08c3\u0007>\u0002\u0002\u08c3\u08c5\u0007\u0002\u0002\u0003\u08c4",
"\u08b9\u0003\u0002\u0002\u0002\u08c4\u08bc\u0003\u0002\u0002\u0002\u08c4",
"\u08bf\u0003\u0002\u0002\u0002\u08c5\u011f\u0003\u0002\u0002\u0002\u08c6",
"\u08c7\u00073\u0002\u0002\u08c7\u08c8\u0007=\u0002\u0002\u08c8\u08c9",
"\u0005\u0082B\u0002\u08c9\u08ca\u0007>\u0002\u0002\u08ca\u08cb\u0007",
"\u0002\u0002\u0003\u08cb\u08d3\u0003\u0002\u0002\u0002\u08cc\u08cd\u0007",
"3\u0002\u0002\u08cd\u08ce\u0007=\u0002\u0002\u08ce\u08cf\u00052\u001a",
"\u0002\u08cf\u08d0\u0007>\u0002\u0002\u08d0\u08d1\u0007\u0002\u0002",
"\u0003\u08d1\u08d3\u0003\u0002\u0002\u0002\u08d2\u08c6\u0003\u0002\u0002",
"\u0002\u08d2\u08cc\u0003\u0002\u0002\u0002\u08d3\u0121\u0003\u0002\u0002",
"\u0002\u08d4\u08d6\u0005v<\u0002\u08d5\u08d4\u0003\u0002\u0002\u0002",
"\u08d5\u08d6\u0003\u0002\u0002\u0002\u08d6\u08d7\u0003\u0002\u0002\u0002",
"\u08d7\u08db\u0005j6\u0002\u08d8\u08da\u0005l7\u0002\u08d9\u08d8\u0003",
"\u0002\u0002\u0002\u08da\u08dd\u0003\u0002\u0002\u0002\u08db\u08d9\u0003",
"\u0002\u0002\u0002\u08db\u08dc\u0003\u0002\u0002\u0002\u08dc\u08de\u0003",
"\u0002\u0002\u0002\u08dd\u08db\u0003\u0002\u0002\u0002\u08de\u08df\u0007",
"\u0002\u0002\u0003\u08df\u0123\u0003\u0002\u0002\u0002\u08e0\u08e1\u0005",
"v<\u0002\u08e1\u08e2\u0005h5\u0002\u08e2\u08e3\u0007\u0002\u0002\u0003",
"\u08e3\u08e7\u0003\u0002\u0002\u0002\u08e4\u08e5\u0007k\u0002\u0002",
"\u08e5\u08e7\u0007\u0002\u0002\u0003\u08e6\u08e0\u0003\u0002\u0002\u0002",
"\u08e6\u08e4\u0003\u0002\u0002\u0002\u08e7\u0125\u0003\u0002\u0002\u0002",
"\u08e8\u08e9\u0007k\u0002\u0002\u08e9\u0924\u0007\u0002\u0002\u0003",
"\u08ea\u08eb\u0007=\u0002\u0002\u08eb\u08ec\u0005f4\u0002\u08ec\u08ed",
"\u0007>\u0002\u0002\u08ed\u08ee\u0007\u0002\u0002\u0003\u08ee\u0924",
"\u0003\u0002\u0002\u0002\u08ef\u08f0\u0005j6\u0002\u08f0\u08f2\u0007",
"?\u0002\u0002\u08f1\u08f3\u0005x=\u0002\u08f2\u08f1\u0003\u0002\u0002",
"\u0002\u08f2\u08f3\u0003\u0002\u0002\u0002\u08f3\u08f5\u0003\u0002\u0002",
"\u0002\u08f4\u08f6\u0005,\u0017\u0002\u08f5\u08f4\u0003\u0002\u0002",
"\u0002\u08f5\u08f6\u0003\u0002\u0002\u0002\u08f6\u08f7\u0003\u0002\u0002",
"\u0002\u08f7\u08f8\u0007@\u0002\u0002\u08f8\u08f9\u0007\u0002\u0002",
"\u0003\u08f9\u0924\u0003\u0002\u0002\u0002\u08fa\u08fb\u0005j6\u0002",
"\u08fb\u08fc\u0007?\u0002\u0002\u08fc\u08fe\u0007*\u0002\u0002\u08fd",
"\u08ff\u0005x=\u0002\u08fe\u08fd\u0003\u0002\u0002\u0002\u08fe\u08ff",
"\u0003\u0002\u0002\u0002\u08ff\u0900\u0003\u0002\u0002\u0002\u0900\u0901",
"\u0005,\u0017\u0002\u0901\u0902\u0007@\u0002\u0002\u0902\u0903\u0007",
"\u0002\u0002\u0003\u0903\u0924\u0003\u0002\u0002\u0002\u0904\u0905\u0005",
"j6\u0002\u0905\u0906\u0007?\u0002\u0002\u0906\u0907\u0005x=\u0002\u0907",
"\u0908\u0007*\u0002\u0002\u0908\u0909\u0005,\u0017\u0002\u0909\u090a",
"\u0007@\u0002\u0002\u090a\u090b\u0007\u0002\u0002\u0003\u090b\u0924",
"\u0003\u0002\u0002\u0002\u090c\u090d\u0005j6\u0002\u090d\u090f\u0007",
"?\u0002\u0002\u090e\u0910\u0005x=\u0002\u090f\u090e\u0003\u0002\u0002",
"\u0002\u090f\u0910\u0003\u0002\u0002\u0002\u0910\u0911\u0003\u0002\u0002",
"\u0002\u0911\u0912\u0007M\u0002\u0002\u0912\u0913\u0007@\u0002\u0002",
"\u0913\u0914\u0007\u0002\u0002\u0003\u0914\u0924\u0003\u0002\u0002\u0002",
"\u0915\u0916\u0005j6\u0002\u0916\u0917\u0007=\u0002\u0002\u0917\u0918",
"\u0005z>\u0002\u0918\u0919\u0007>\u0002\u0002\u0919\u091a\u0007\u0002",
"\u0002\u0003\u091a\u0924\u0003\u0002\u0002\u0002\u091b\u091c\u0005j",
"6\u0002\u091c\u091e\u0007=\u0002\u0002\u091d\u091f\u0005\u0080A\u0002",
"\u091e\u091d\u0003\u0002\u0002\u0002\u091e\u091f\u0003\u0002\u0002\u0002",
"\u091f\u0920\u0003\u0002\u0002\u0002\u0920\u0921\u0007>\u0002\u0002",
"\u0921\u0922\u0007\u0002\u0002\u0003\u0922\u0924\u0003\u0002\u0002\u0002",
"\u0923\u08e8\u0003\u0002\u0002\u0002\u0923\u08ea\u0003\u0002\u0002\u0002",
"\u0923\u08ef\u0003\u0002\u0002\u0002\u0923\u08fa\u0003\u0002\u0002\u0002",
"\u0923\u0904\u0003\u0002\u0002\u0002\u0923\u090c\u0003\u0002\u0002\u0002",
"\u0923\u0915\u0003\u0002\u0002\u0002\u0923\u091b\u0003\u0002\u0002\u0002",
"\u0924\u0127\u0003\u0002\u0002\u0002\u0925\u0926\u0007\r\u0002\u0002",
"\u0926\u0928\u0007=\u0002\u0002\u0927\u0929\u0007m\u0002\u0002\u0928",
"\u0927\u0003\u0002\u0002\u0002\u0929\u092a\u0003\u0002\u0002\u0002\u092a",
"\u0928\u0003\u0002\u0002\u0002\u092a\u092b\u0003\u0002\u0002\u0002\u092b",
"\u092c\u0003\u0002\u0002\u0002\u092c\u092d\u0007>\u0002\u0002\u092d",
"\u0932\u0007\u0002\u0002\u0003\u092e\u092f\u0005n8\u0002\u092f\u0930",
"\u0007\u0002\u0002\u0003\u0930\u0932\u0003\u0002\u0002\u0002\u0931\u0925",
"\u0003\u0002\u0002\u0002\u0931\u092e\u0003\u0002\u0002\u0002\u0932\u0129",
"\u0003\u0002\u0002\u0002\u0933\u0934\u0007\u000e\u0002\u0002\u0934\u0935",
"\u0007=\u0002\u0002\u0935\u0936\u0007=\u0002\u0002\u0936\u0937\u0005",
"p9\u0002\u0937\u0938\u0007>\u0002\u0002\u0938\u0939\u0007>\u0002\u0002",
"\u0939\u093a\u0007\u0002\u0002\u0003\u093a\u012b\u0003\u0002\u0002\u0002",
"\u093b\u0940\u0005r:\u0002\u093c\u093d\u0007Z\u0002\u0002\u093d\u093f",
"\u0005r:\u0002\u093e\u093c\u0003\u0002\u0002\u0002\u093f\u0942\u0003",
"\u0002\u0002\u0002\u0940\u093e\u0003\u0002\u0002\u0002\u0940\u0941\u0003",
"\u0002\u0002\u0002\u0941\u0943\u0003\u0002\u0002\u0002\u0942\u0940\u0003",
"\u0002\u0002\u0002\u0943\u0944\u0007\u0002\u0002\u0003\u0944\u0947\u0003",
"\u0002\u0002\u0002\u0945\u0947\u0003\u0002\u0002\u0002\u0946\u093b\u0003",
"\u0002\u0002\u0002\u0946\u0945\u0003\u0002\u0002\u0002\u0947\u012d\u0003",
"\u0002\u0002\u0002\u0948\u094e\n\n\u0002\u0002\u0949\u094b\u0007=\u0002",
"\u0002\u094a\u094c\u0005\f\u0007\u0002\u094b\u094a\u0003\u0002\u0002",
"\u0002\u094b\u094c\u0003\u0002\u0002\u0002\u094c\u094d\u0003\u0002\u0002",
"\u0002\u094d\u094f\u0007>\u0002\u0002\u094e\u0949\u0003\u0002\u0002",
"\u0002\u094e\u094f\u0003\u0002\u0002\u0002\u094f\u0950\u0003\u0002\u0002",
"\u0002\u0950\u0953\u0007\u0002\u0002\u0003\u0951\u0953\u0007\u0002\u0002",
"\u0003\u0952\u0948\u0003\u0002\u0002\u0002\u0952\u0951\u0003\u0002\u0002",
"\u0002\u0953\u012f\u0003\u0002\u0002\u0002\u0954\u095a\n\u000b\u0002",
"\u0002\u0955\u0956\u0007=\u0002\u0002\u0956\u0957\u0005t;\u0002\u0957",
"\u0958\u0007>\u0002\u0002\u0958\u095a\u0003\u0002\u0002\u0002\u0959",
"\u0954\u0003\u0002\u0002\u0002\u0959\u0955\u0003\u0002\u0002\u0002\u095a",
"\u095d\u0003\u0002\u0002\u0002\u095b\u0959\u0003\u0002\u0002\u0002\u095b",
"\u095c\u0003\u0002\u0002\u0002\u095c\u095e\u0003\u0002\u0002\u0002\u095d",
"\u095b\u0003\u0002\u0002\u0002\u095e\u095f\u0007\u0002\u0002\u0003\u095f",
"\u0131\u0003\u0002\u0002\u0002\u0960\u0962\u0007M\u0002\u0002\u0961",
"\u0963\u0005x=\u0002\u0962\u0961\u0003\u0002\u0002\u0002\u0962\u0963",
"\u0003\u0002\u0002\u0002\u0963\u0964\u0003\u0002\u0002\u0002\u0964\u0976",
"\u0007\u0002\u0002\u0003\u0965\u0967\u0007M\u0002\u0002\u0966\u0968",
"\u0005x=\u0002\u0967\u0966\u0003\u0002\u0002\u0002\u0967\u0968\u0003",
"\u0002\u0002\u0002\u0968\u0969\u0003\u0002\u0002\u0002\u0969\u096a\u0005",
"v<\u0002\u096a\u096b\u0007\u0002\u0002\u0003\u096b\u0976\u0003\u0002",
"\u0002\u0002\u096c\u096e\u0007T\u0002\u0002\u096d\u096f\u0005x=\u0002",
"\u096e\u096d\u0003\u0002\u0002\u0002\u096e\u096f\u0003\u0002\u0002\u0002",
"\u096f\u0976\u0003\u0002\u0002\u0002\u0970\u0972\u0007T\u0002\u0002",
"\u0971\u0973\u0005x=\u0002\u0972\u0971\u0003\u0002\u0002\u0002\u0972",
"\u0973\u0003\u0002\u0002\u0002\u0973\u0974\u0003\u0002\u0002\u0002\u0974",
"\u0976\u0005v<\u0002\u0975\u0960\u0003\u0002\u0002\u0002\u0975\u0965",
"\u0003\u0002\u0002\u0002\u0975\u096c\u0003\u0002\u0002\u0002\u0975\u0970",
"\u0003\u0002\u0002\u0002\u0976\u0133\u0003\u0002\u0002\u0002\u0977\u0978",
"\u0005`1\u0002\u0978\u0979\u0007\u0002\u0002\u0003\u0979\u097f\u0003",
"\u0002\u0002\u0002\u097a\u097b\u0005x=\u0002\u097b\u097c\u0005`1\u0002",
"\u097c\u097d\u0007\u0002\u0002\u0003\u097d\u097f\u0003\u0002\u0002\u0002",
"\u097e\u0977\u0003\u0002\u0002\u0002\u097e\u097a\u0003\u0002\u0002\u0002",
"\u097f\u0135\u0003\u0002\u0002\u0002\u0980\u0981\u0005|?\u0002\u0981",
"\u0982\u0007\u0002\u0002\u0003\u0982\u0989\u0003\u0002\u0002\u0002\u0983",
"\u0984\u0005|?\u0002\u0984\u0985\u0007Z\u0002\u0002\u0985\u0986\u0007",
"j\u0002\u0002\u0986\u0987\u0007\u0002\u0002\u0003\u0987\u0989\u0003",
"\u0002\u0002\u0002\u0988\u0980\u0003\u0002\u0002\u0002\u0988\u0983\u0003",
"\u0002\u0002\u0002\u0989\u0137\u0003\u0002\u0002\u0002\u098a\u098b\u0005",
"~@\u0002\u098b\u098c\u0007\u0002\u0002\u0003\u098c\u0993\u0003\u0002",
"\u0002\u0002\u098d\u098e\u0005|?\u0002\u098e\u098f\u0007Z\u0002\u0002",
"\u098f\u0990\u0005~@\u0002\u0990\u0991\u0007\u0002\u0002\u0003\u0991",
"\u0993\u0003\u0002\u0002\u0002\u0992\u098a\u0003\u0002\u0002\u0002\u0992",
"\u098d\u0003\u0002\u0002\u0002\u0993\u0139\u0003\u0002\u0002\u0002\u0994",
"\u0995\u00058\u001d\u0002\u0995\u0996\u0005f4\u0002\u0996\u0997\u0007",
"\u0002\u0002\u0003\u0997\u099f\u0003\u0002\u0002\u0002\u0998\u099a\u0005",
":\u001e\u0002\u0999\u099b\u0005\u0084C\u0002\u099a\u0999\u0003\u0002",
"\u0002\u0002\u099a\u099b\u0003\u0002\u0002\u0002\u099b\u099c\u0003\u0002",
"\u0002\u0002\u099c\u099d\u0007\u0002\u0002\u0003\u099d\u099f\u0003\u0002",
"\u0002\u0002\u099e\u0994\u0003\u0002\u0002\u0002\u099e\u0998\u0003\u0002",
"\u0002\u0002\u099f\u013b\u0003\u0002\u0002\u0002\u09a0\u09a1\u0007k",
"\u0002\u0002\u09a1\u09a8\u0007\u0002\u0002\u0003\u09a2\u09a3\u0005\u0080",
"A\u0002\u09a3\u09a4\u0007Z\u0002\u0002\u09a4\u09a5\u0007k\u0002\u0002",
"\u09a5\u09a6\u0007\u0002\u0002\u0003\u09a6\u09a8\u0003\u0002\u0002\u0002",
"\u09a7\u09a0\u0003\u0002\u0002\u0002\u09a7\u09a2\u0003\u0002\u0002\u0002",
"\u09a8\u013d\u0003\u0002\u0002\u0002\u09a9\u09ab\u0005P)\u0002\u09aa",
"\u09ac\u0005\u0084C\u0002\u09ab\u09aa\u0003\u0002\u0002\u0002\u09ab",
"\u09ac\u0003\u0002\u0002\u0002\u09ac\u09ad\u0003\u0002\u0002\u0002\u09ad",
"\u09ae\u0007\u0002\u0002\u0003\u09ae\u013f\u0003\u0002\u0002\u0002\u09af",
"\u09b0\u0005v<\u0002\u09b0\u09b1\u0007\u0002\u0002\u0003\u09b1\u09bf",
"\u0003\u0002\u0002\u0002\u09b2\u09b4\u0005v<\u0002\u09b3\u09b2\u0003",
"\u0002\u0002\u0002\u09b3\u09b4\u0003\u0002\u0002\u0002\u09b4\u09b5\u0003",
"\u0002\u0002\u0002\u09b5\u09b9\u0005\u0086D\u0002\u09b6\u09b8\u0005",
"l7\u0002\u09b7\u09b6\u0003\u0002\u0002\u0002\u09b8\u09bb\u0003\u0002",
"\u0002\u0002\u09b9\u09b7\u0003\u0002\u0002\u0002\u09b9\u09ba\u0003\u0002",
"\u0002\u0002\u09ba\u09bc\u0003\u0002\u0002\u0002\u09bb\u09b9\u0003\u0002",
"\u0002\u0002\u09bc\u09bd\u0007\u0002\u0002\u0003\u09bd\u09bf\u0003\u0002",
"\u0002\u0002\u09be\u09af\u0003\u0002\u0002\u0002\u09be\u09b3\u0003\u0002",
"\u0002\u0002\u09bf\u0141\u0003\u0002\u0002\u0002\u09c0\u09c1\u0007=",
"\u0002\u0002\u09c1\u09c2\u0005\u0084C\u0002\u09c2\u09c6\u0007>\u0002",
"\u0002\u09c3\u09c5\u0005l7\u0002\u09c4\u09c3\u0003\u0002\u0002\u0002",
"\u09c5\u09c8\u0003\u0002\u0002\u0002\u09c6\u09c4\u0003\u0002\u0002\u0002",
"\u09c6\u09c7\u0003\u0002\u0002\u0002\u09c7\u09c9\u0003\u0002\u0002\u0002",
"\u09c8\u09c6\u0003\u0002\u0002\u0002\u09c9\u09ca\u0007\u0002\u0002\u0003",
"\u09ca\u0a26\u0003\u0002\u0002\u0002\u09cb\u09cd\u0007?\u0002\u0002",
"\u09cc\u09ce\u0005x=\u0002\u09cd\u09cc\u0003\u0002\u0002\u0002\u09cd",
"\u09ce\u0003\u0002\u0002\u0002\u09ce\u09d0\u0003\u0002\u0002\u0002\u09cf",
"\u09d1\u0005,\u0017\u0002\u09d0\u09cf\u0003\u0002\u0002\u0002\u09d0",
"\u09d1\u0003\u0002\u0002\u0002\u09d1\u09d2\u0003\u0002\u0002\u0002\u09d2",
"\u09d3\u0007@\u0002\u0002\u09d3\u0a26\u0007\u0002\u0002\u0003\u09d4",
"\u09d5\u0007?\u0002\u0002\u09d5\u09d7\u0007*\u0002\u0002\u09d6\u09d8",
"\u0005x=\u0002\u09d7\u09d6\u0003\u0002\u0002\u0002\u09d7\u09d8\u0003",
"\u0002\u0002\u0002\u09d8\u09d9\u0003\u0002\u0002\u0002\u09d9\u09da\u0005",
",\u0017\u0002\u09da\u09db\u0007@\u0002\u0002\u09db\u09dc\u0007\u0002",
"\u0002\u0003\u09dc\u0a26\u0003\u0002\u0002\u0002\u09dd\u09de\u0007?",
"\u0002\u0002\u09de\u09df\u0005x=\u0002\u09df\u09e0\u0007*\u0002\u0002",
"\u09e0\u09e1\u0005,\u0017\u0002\u09e1\u09e2\u0007@\u0002\u0002\u09e2",
"\u09e3\u0007\u0002\u0002\u0003\u09e3\u0a26\u0003\u0002\u0002\u0002\u09e4",
"\u09e5\u0007?\u0002\u0002\u09e5\u09e6\u0007M\u0002\u0002\u09e6\u09e7",
"\u0007@\u0002\u0002\u09e7\u0a26\u0007\u0002\u0002\u0003\u09e8\u09ea",
"\u0007=\u0002\u0002\u09e9\u09eb\u0005z>\u0002\u09ea\u09e9\u0003\u0002",
"\u0002\u0002\u09ea\u09eb\u0003\u0002\u0002\u0002\u09eb\u09ec\u0003\u0002",
"\u0002\u0002\u09ec\u09f0\u0007>\u0002\u0002\u09ed\u09ef\u0005l7\u0002",
"\u09ee\u09ed\u0003\u0002\u0002\u0002\u09ef\u09f2\u0003\u0002\u0002\u0002",
"\u09f0\u09ee\u0003\u0002\u0002\u0002\u09f0\u09f1\u0003\u0002\u0002\u0002",
"\u09f1\u09f3\u0003\u0002\u0002\u0002\u09f2\u09f0\u0003\u0002\u0002\u0002",
"\u09f3\u0a26\u0007\u0002\u0002\u0003\u09f4\u09f5\u0005\u0086D\u0002",
"\u09f5\u09f7\u0007?\u0002\u0002\u09f6\u09f8\u0005x=\u0002\u09f7\u09f6",
"\u0003\u0002\u0002\u0002\u09f7\u09f8\u0003\u0002\u0002\u0002\u09f8\u09fa",
"\u0003\u0002\u0002\u0002\u09f9\u09fb\u0005,\u0017\u0002\u09fa\u09f9",
"\u0003\u0002\u0002\u0002\u09fa\u09fb\u0003\u0002\u0002\u0002\u09fb\u09fc",
"\u0003\u0002\u0002\u0002\u09fc\u09fd\u0007@\u0002\u0002\u09fd\u09fe",
"\u0007\u0002\u0002\u0003\u09fe\u0a26\u0003\u0002\u0002\u0002\u09ff\u0a00",
"\u0005\u0086D\u0002\u0a00\u0a01\u0007?\u0002\u0002\u0a01\u0a03\u0007",
"*\u0002\u0002\u0a02\u0a04\u0005x=\u0002\u0a03\u0a02\u0003\u0002\u0002",
"\u0002\u0a03\u0a04\u0003\u0002\u0002\u0002\u0a04\u0a05\u0003\u0002\u0002",
"\u0002\u0a05\u0a06\u0005,\u0017\u0002\u0a06\u0a07\u0007@\u0002\u0002",
"\u0a07\u0a08\u0007\u0002\u0002\u0003\u0a08\u0a26\u0003\u0002\u0002\u0002",
"\u0a09\u0a0a\u0005\u0086D\u0002\u0a0a\u0a0b\u0007?\u0002\u0002\u0a0b",
"\u0a0c\u0005x=\u0002\u0a0c\u0a0d\u0007*\u0002\u0002\u0a0d\u0a0e\u0005",
",\u0017\u0002\u0a0e\u0a0f\u0007@\u0002\u0002\u0a0f\u0a10\u0007\u0002",
"\u0002\u0003\u0a10\u0a26\u0003\u0002\u0002\u0002\u0a11\u0a12\u0005\u0086",
"D\u0002\u0a12\u0a13\u0007?\u0002\u0002\u0a13\u0a14\u0007M\u0002\u0002",
"\u0a14\u0a15\u0007@\u0002\u0002\u0a15\u0a16\u0007\u0002\u0002\u0003",
"\u0a16\u0a26\u0003\u0002\u0002\u0002\u0a17\u0a18\u0005\u0086D\u0002",
"\u0a18\u0a1a\u0007=\u0002\u0002\u0a19\u0a1b\u0005z>\u0002\u0a1a\u0a19",
"\u0003\u0002\u0002\u0002\u0a1a\u0a1b\u0003\u0002\u0002\u0002\u0a1b\u0a1c",
"\u0003\u0002\u0002\u0002\u0a1c\u0a20\u0007>\u0002\u0002\u0a1d\u0a1f",
"\u0005l7\u0002\u0a1e\u0a1d\u0003\u0002\u0002\u0002\u0a1f\u0a22\u0003",
"\u0002\u0002\u0002\u0a20\u0a1e\u0003\u0002\u0002\u0002\u0a20\u0a21\u0003",
"\u0002\u0002\u0002\u0a21\u0a23\u0003\u0002\u0002\u0002\u0a22\u0a20\u0003",
"\u0002\u0002\u0002\u0a23\u0a24\u0007\u0002\u0002\u0003\u0a24\u0a26\u0003",
"\u0002\u0002\u0002\u0a25\u09c0\u0003\u0002\u0002\u0002\u0a25\u09cb\u0003",
"\u0002\u0002\u0002\u0a25\u09d4\u0003\u0002\u0002\u0002\u0a25\u09dd\u0003",
"\u0002\u0002\u0002\u0a25\u09e4\u0003\u0002\u0002\u0002\u0a25\u09e8\u0003",
"\u0002\u0002\u0002\u0a25\u09f4\u0003\u0002\u0002\u0002\u0a25\u09ff\u0003",
"\u0002\u0002\u0002\u0a25\u0a09\u0003\u0002\u0002\u0002\u0a25\u0a11\u0003",
"\u0002\u0002\u0002\u0a25\u0a17\u0003\u0002\u0002\u0002\u0a26\u0143\u0003",
"\u0002\u0002\u0002\u0a27\u0a28\u0007k\u0002\u0002\u0a28\u0a29\u0007",
"\u0002\u0002\u0003\u0a29\u0145\u0003\u0002\u0002\u0002\u0a2a\u0a2b\u0005",
",\u0017\u0002\u0a2b\u0a2c\u0007\u0002\u0002\u0003\u0a2c\u0a39\u0003",
"\u0002\u0002\u0002\u0a2d\u0a2e\u0007A\u0002\u0002\u0a2e\u0a2f\u0005",
"\u008cG\u0002\u0a2f\u0a30\u0007B\u0002\u0002\u0a30\u0a31\u0007\u0002",
"\u0002\u0003\u0a31\u0a39\u0003\u0002\u0002\u0002\u0a32\u0a33\u0007A",
"\u0002\u0002\u0a33\u0a34\u0005\u008cG\u0002\u0a34\u0a35\u0007Z\u0002",
"\u0002\u0a35\u0a36\u0007B\u0002\u0002\u0a36\u0a37\u0007\u0002\u0002",
"\u0003\u0a37\u0a39\u0003\u0002\u0002\u0002\u0a38\u0a2a\u0003\u0002\u0002",
"\u0002\u0a38\u0a2d\u0003\u0002\u0002\u0002\u0a38\u0a32\u0003\u0002\u0002",
"\u0002\u0a39\u0147\u0003\u0002\u0002\u0002\u0a3a\u0a3c\u0005\u008eH",
"\u0002\u0a3b\u0a3a\u0003\u0002\u0002\u0002\u0a3b\u0a3c\u0003\u0002\u0002",
"\u0002\u0a3c\u0a3d\u0003\u0002\u0002\u0002\u0a3d\u0a3e\u0005\u008aF",
"\u0002\u0a3e\u0a3f\u0007\u0002\u0002\u0003\u0a3f\u0a49\u0003\u0002\u0002",
"\u0002\u0a40\u0a41\u0005\u008cG\u0002\u0a41\u0a43\u0007Z\u0002\u0002",
"\u0a42\u0a44\u0005\u008eH\u0002\u0a43\u0a42\u0003\u0002\u0002\u0002",
"\u0a43\u0a44\u0003\u0002\u0002\u0002\u0a44\u0a45\u0003\u0002\u0002\u0002",
"\u0a45\u0a46\u0005\u008aF\u0002\u0a46\u0a47\u0007\u0002\u0002\u0003",
"\u0a47\u0a49\u0003\u0002\u0002\u0002\u0a48\u0a3b\u0003\u0002\u0002\u0002",
"\u0a48\u0a40\u0003\u0002\u0002\u0002\u0a49\u0149\u0003\u0002\u0002\u0002",
"\u0a4a\u0a4b\u0005\u0090I\u0002\u0a4b\u0a4c\u0007[\u0002\u0002\u0a4c",
"\u0a4d\u0007\u0002\u0002\u0003\u0a4d\u014b\u0003\u0002\u0002\u0002\u0a4e",
"\u0a4f\u0005\u0092J\u0002\u0a4f\u0a50\u0007\u0002\u0002\u0003\u0a50",
"\u0a56\u0003\u0002\u0002\u0002\u0a51\u0a52\u0005\u0090I\u0002\u0a52",
"\u0a53\u0005\u0092J\u0002\u0a53\u0a54\u0007\u0002\u0002\u0003\u0a54",
"\u0a56\u0003\u0002\u0002\u0002\u0a55\u0a4e\u0003\u0002\u0002\u0002\u0a55",
"\u0a51\u0003\u0002\u0002\u0002\u0a56\u014d\u0003\u0002\u0002\u0002\u0a57",
"\u0a58\u0007?\u0002\u0002\u0a58\u0a59\u00052\u001a\u0002\u0a59\u0a5a",
"\u0007@\u0002\u0002\u0a5a\u0a5b\u0007\u0002\u0002\u0003\u0a5b\u0a60",
"\u0003\u0002\u0002\u0002\u0a5c\u0a5d\u0007i\u0002\u0002\u0a5d\u0a5e",
"\u0007k\u0002\u0002\u0a5e\u0a60\u0007\u0002\u0002\u0003\u0a5f\u0a57",
"\u0003\u0002\u0002\u0002\u0a5f\u0a5c\u0003\u0002\u0002\u0002\u0a60\u014f",
"\u0003\u0002\u0002\u0002\u0a61\u0a62\u0007;\u0002\u0002\u0a62\u0a63",
"\u0007=\u0002\u0002\u0a63\u0a64\u00052\u001a\u0002\u0a64\u0a66\u0007",
"Z\u0002\u0002\u0a65\u0a67\u0007m\u0002\u0002\u0a66\u0a65\u0003\u0002",
"\u0002\u0002\u0a67\u0a68\u0003\u0002\u0002\u0002\u0a68\u0a66\u0003\u0002",
"\u0002\u0002\u0a68\u0a69\u0003\u0002\u0002\u0002\u0a69\u0a6a\u0003\u0002",
"\u0002\u0002\u0a6a\u0a6b\u0007>\u0002\u0002\u0a6b\u0a6c\u0007Y\u0002",
"\u0002\u0a6c\u0a6d\u0007\u0002\u0002\u0003\u0a6d\u0151\u0003\u0002\u0002",
"\u0002\u0a6e\u0a6f\u0005\u0098M\u0002\u0a6f\u0a70\u0007\u0002\u0002",
"\u0003\u0a70\u0aa1\u0003\u0002\u0002\u0002\u0a71\u0a72\u0005\u009cO",
"\u0002\u0a72\u0a73\u0007\u0002\u0002\u0003\u0a73\u0aa1\u0003\u0002\u0002",
"\u0002\u0a74\u0a75\u0005\u00a4S\u0002\u0a75\u0a76\u0007\u0002\u0002",
"\u0003\u0a76\u0aa1\u0003\u0002\u0002\u0002\u0a77\u0a78\u0005\u00a6T",
"\u0002\u0a78\u0a79\u0007\u0002\u0002\u0003\u0a79\u0aa1\u0003\u0002\u0002",
"\u0002\u0a7a\u0a7b\u0005\u00b0Y\u0002\u0a7b\u0a7c\u0007\u0002\u0002",
"\u0003\u0a7c\u0aa1\u0003\u0002\u0002\u0002\u0a7d\u0a7e\u0005\u00b2Z",
"\u0002\u0a7e\u0a7f\u0007\u0002\u0002\u0003\u0a7f\u0aa1\u0003\u0002\u0002",
"\u0002\u0a80\u0a81\t\f\u0002\u0002\u0a81\u0a82\t\r\u0002\u0002\u0a82",
"\u0a8b\u0007=\u0002\u0002\u0a83\u0a88\u0005(\u0015\u0002\u0a84\u0a85",
"\u0007Z\u0002\u0002\u0a85\u0a87\u0005(\u0015\u0002\u0a86\u0a84\u0003",
"\u0002\u0002\u0002\u0a87\u0a8a\u0003\u0002\u0002\u0002\u0a88\u0a86\u0003",
"\u0002\u0002\u0002\u0a88\u0a89\u0003\u0002\u0002\u0002\u0a89\u0a8c\u0003",
"\u0002\u0002\u0002\u0a8a\u0a88\u0003\u0002\u0002\u0002\u0a8b\u0a83\u0003",
"\u0002\u0002\u0002\u0a8b\u0a8c\u0003\u0002\u0002\u0002\u0a8c\u0a9a\u0003",
"\u0002\u0002\u0002\u0a8d\u0a96\u0007X\u0002\u0002\u0a8e\u0a93\u0005",
"(\u0015\u0002\u0a8f\u0a90\u0007Z\u0002\u0002\u0a90\u0a92\u0005(\u0015",
"\u0002\u0a91\u0a8f\u0003\u0002\u0002\u0002\u0a92\u0a95\u0003\u0002\u0002",
"\u0002\u0a93\u0a91\u0003\u0002\u0002\u0002\u0a93\u0a94\u0003\u0002\u0002",
"\u0002\u0a94\u0a97\u0003\u0002\u0002\u0002\u0a95\u0a93\u0003\u0002\u0002",
"\u0002\u0a96\u0a8e\u0003\u0002\u0002\u0002\u0a96\u0a97\u0003\u0002\u0002",
"\u0002\u0a97\u0a99\u0003\u0002\u0002\u0002\u0a98\u0a8d\u0003\u0002\u0002",
"\u0002\u0a99\u0a9c\u0003\u0002\u0002\u0002\u0a9a\u0a98\u0003\u0002\u0002",
"\u0002\u0a9a\u0a9b\u0003\u0002\u0002\u0002\u0a9b\u0a9d\u0003\u0002\u0002",
"\u0002\u0a9c\u0a9a\u0003\u0002\u0002\u0002\u0a9d\u0a9e\u0007>\u0002",
"\u0002\u0a9e\u0a9f\u0007Y\u0002\u0002\u0a9f\u0aa1\u0007\u0002\u0002",
"\u0003\u0aa0\u0a6e\u0003\u0002\u0002\u0002\u0aa0\u0a71\u0003\u0002\u0002",
"\u0002\u0aa0\u0a74\u0003\u0002\u0002\u0002\u0aa0\u0a77\u0003\u0002\u0002",
"\u0002\u0aa0\u0a7a\u0003\u0002\u0002\u0002\u0aa0\u0a7d\u0003\u0002\u0002",
"\u0002\u0aa0\u0a80\u0003\u0002\u0002\u0002\u0aa1\u0153\u0003\u0002\u0002",
"\u0002\u0aa2\u0aa3\u0007k\u0002\u0002\u0aa3\u0aa4\u0007X\u0002\u0002",
"\u0aa4\u0aa5\u0005\u0096L\u0002\u0aa5\u0aa6\u0007\u0002\u0002\u0003",
"\u0aa6\u0155\u0003\u0002\u0002\u0002\u0aa7\u0aa8\u0007\u0013\u0002\u0002",
"\u0aa8\u0aa9\u00052\u001a\u0002\u0aa9\u0aaa\u0007X\u0002\u0002\u0aaa",
"\u0aab\u0005\u0096L\u0002\u0aab\u0aac\u0007\u0002\u0002\u0003\u0aac",
"\u0ab3\u0003\u0002\u0002\u0002\u0aad\u0aae\u0007\u0017\u0002\u0002\u0aae",
"\u0aaf\u0007X\u0002\u0002\u0aaf\u0ab0\u0005\u0096L\u0002\u0ab0\u0ab1",
"\u0007\u0002\u0002\u0003\u0ab1\u0ab3\u0003\u0002\u0002\u0002\u0ab2\u0aa7",
"\u0003\u0002\u0002\u0002\u0ab2\u0aad\u0003\u0002\u0002\u0002\u0ab3\u0157",
"\u0003\u0002\u0002\u0002\u0ab4\u0ab6\u0007A\u0002\u0002\u0ab5\u0ab7",
"\u0005\u009eP\u0002\u0ab6\u0ab5\u0003\u0002\u0002\u0002\u0ab6\u0ab7",
"\u0003\u0002\u0002\u0002\u0ab7\u0ab8\u0003\u0002\u0002\u0002\u0ab8\u0ab9",
"\u0007B\u0002\u0002\u0ab9\u0aba\u0007\u0002\u0002\u0003\u0aba\u0159",
"\u0003\u0002\u0002\u0002\u0abb\u0abc\u0005\u00a0Q\u0002\u0abc\u0abd",
"\u0007\u0002\u0002\u0003\u0abd\u0ac3\u0003\u0002\u0002\u0002\u0abe\u0abf",
"\u0005\u009eP\u0002\u0abf\u0ac0\u0005\u00a0Q\u0002\u0ac0\u0ac1\u0007",
"\u0002\u0002\u0003\u0ac1\u0ac3\u0003\u0002\u0002\u0002\u0ac2\u0abb\u0003",
"\u0002\u0002\u0002\u0ac2\u0abe\u0003\u0002\u0002\u0002\u0ac3\u015b\u0003",
"\u0002\u0002\u0002\u0ac4\u0ac5\u0005\u00a2R\u0002\u0ac5\u0ac6\u0007",
"\u0002\u0002\u0003\u0ac6\u0ad2\u0003\u0002\u0002\u0002\u0ac7\u0ac8\u0005",
"@!\u0002\u0ac8\u0ac9\u0007\u0002\u0002\u0003\u0ac9\u0ad2\u0003\u0002",
"\u0002\u0002\u0aca\u0acb\u00054\u001b\u0002\u0acb\u0acc\u0007\u0002",
"\u0002\u0003\u0acc\u0ad2\u0003\u0002\u0002\u0002\u0acd\u0ace\u0005\u0096",
"L\u0002\u0ace\u0acf\u0007\u0002\u0002\u0003\u0acf\u0ad2\u0003\u0002",
"\u0002\u0002\u0ad0\u0ad2\u0007\u0002\u0002\u0003\u0ad1\u0ac4\u0003\u0002",
"\u0002\u0002\u0ad1\u0ac7\u0003\u0002\u0002\u0002\u0ad1\u0aca\u0003\u0002",
"\u0002\u0002\u0ad1\u0acd\u0003\u0002\u0002\u0002\u0ad1\u0ad0\u0003\u0002",
"\u0002\u0002\u0ad2\u015d\u0003\u0002\u0002\u0002\u0ad3\u0ad4\u0007k",
"\u0002\u0002\u0ad4\u0ad5\u0007=\u0002\u0002\u0ad5\u0ad6\u0005,\u0017",
"\u0002\u0ad6\u0ad7\u0007>\u0002\u0002\u0ad7\u0ad8\u0007Y\u0002\u0002",
"\u0ad8\u0ad9\u0007\u0002\u0002\u0003\u0ad9\u015f\u0003\u0002\u0002\u0002",
"\u0ada\u0adc\u00050\u0019\u0002\u0adb\u0ada\u0003\u0002\u0002\u0002",
"\u0adb\u0adc\u0003\u0002\u0002\u0002\u0adc\u0add\u0003\u0002\u0002\u0002",
"\u0add\u0ade\u0007Y\u0002\u0002\u0ade\u0adf\u0007\u0002\u0002\u0003",
"\u0adf\u0161\u0003\u0002\u0002\u0002\u0ae0\u0ae1\u0007 \u0002\u0002",
"\u0ae1\u0ae2\u0007=\u0002\u0002\u0ae2\u0ae3\u00050\u0019\u0002\u0ae3",
"\u0ae4\u0007>\u0002\u0002\u0ae4\u0ae7\u0005\u0096L\u0002\u0ae5\u0ae6",
"\u0007\u001a\u0002\u0002\u0ae6\u0ae8\u0005\u0096L\u0002\u0ae7\u0ae5",
"\u0003\u0002\u0002\u0002\u0ae7\u0ae8\u0003\u0002\u0002\u0002\u0ae8\u0ae9",
"\u0003\u0002\u0002\u0002\u0ae9\u0aea\u0007\u0002\u0002\u0003\u0aea\u0af3",
"\u0003\u0002\u0002\u0002\u0aeb\u0aec\u0007,\u0002\u0002\u0aec\u0aed",
"\u0007=\u0002\u0002\u0aed\u0aee\u00050\u0019\u0002\u0aee\u0aef\u0007",
">\u0002\u0002\u0aef\u0af0\u0005\u00aeX\u0002\u0af0\u0af1\u0007\u0002",
"\u0002\u0003\u0af1\u0af3\u0003\u0002\u0002\u0002\u0af2\u0ae0\u0003\u0002",
"\u0002\u0002\u0af2\u0aeb\u0003\u0002\u0002\u0002\u0af3\u0163\u0003\u0002",
"\u0002\u0002\u0af4\u0af5\u0005\u009aN\u0002\u0af5\u0af6\u0005\u00aa",
"V\u0002\u0af6\u0af7\u0007\u0002\u0002\u0003\u0af7\u0165\u0003\u0002",
"\u0002\u0002\u0af8\u0af9\u0005\u009eP\u0002\u0af9\u0afa\u0007\u0002",
"\u0002\u0003\u0afa\u0167\u0003\u0002\u0002\u0002\u0afb\u0afc\u0005\u00a8",
"U\u0002\u0afc\u0afd\u0007\u0002\u0002\u0003\u0afd\u0b03\u0003\u0002",
"\u0002\u0002\u0afe\u0aff\u0005\u00acW\u0002\u0aff\u0b00\u0005\u00a8",
"U\u0002\u0b00\u0b01\u0007\u0002\u0002\u0003\u0b01\u0b03\u0003\u0002",
"\u0002\u0002\u0b02\u0afb\u0003\u0002\u0002\u0002\u0b02\u0afe\u0003\u0002",
"\u0002\u0002\u0b03\u0169\u0003\u0002\u0002\u0002\u0b04\u0b06\u0007A",
"\u0002\u0002\u0b05\u0b07\u0005\u00acW\u0002\u0b06\u0b05\u0003\u0002",
"\u0002\u0002\u0b06\u0b07\u0003\u0002\u0002\u0002\u0b07\u0b08\u0003\u0002",
"\u0002\u0002\u0b08\u0b09\u0007B\u0002\u0002\u0b09\u0b0e\u0007\u0002",
"\u0002\u0003\u0b0a\u0b0b\u0005\u0096L\u0002\u0b0b\u0b0c\u0007\u0002",
"\u0002\u0003\u0b0c\u0b0e\u0003\u0002\u0002\u0002\u0b0d\u0b04\u0003\u0002",
"\u0002\u0002\u0b0d\u0b0a\u0003\u0002\u0002\u0002\u0b0e\u016b\u0003\u0002",
"\u0002\u0002\u0b0f\u0b10\u00072\u0002\u0002\u0b10\u0b11\u0007=\u0002",
"\u0002\u0b11\u0b12\u00050\u0019\u0002\u0b12\u0b13\u0007>\u0002\u0002",
"\u0b13\u0b14\u0005\u0096L\u0002\u0b14\u0b15\u0007\u0002\u0002\u0003",
"\u0b15\u0b3f\u0003\u0002\u0002\u0002\u0b16\u0b17\u0007\u0018\u0002\u0002",
"\u0b17\u0b18\u0005\u0096L\u0002\u0b18\u0b19\u00072\u0002\u0002\u0b19",
"\u0b1a\u0007=\u0002\u0002\u0b1a\u0b1b\u00050\u0019\u0002\u0b1b\u0b1c",
"\u0007>\u0002\u0002\u0b1c\u0b1d\u0007Y\u0002\u0002\u0b1d\u0b1e\u0007",
"\u0002\u0002\u0003\u0b1e\u0b3f\u0003\u0002\u0002\u0002\u0b1f\u0b20\u0007",
"\u001e\u0002\u0002\u0b20\u0b22\u0007=\u0002\u0002\u0b21\u0b23\u0005",
"0\u0019\u0002\u0b22\u0b21\u0003\u0002\u0002\u0002\u0b22\u0b23\u0003",
"\u0002\u0002\u0002\u0b23\u0b24\u0003\u0002\u0002\u0002\u0b24\u0b26\u0007",
"Y\u0002\u0002\u0b25\u0b27\u00050\u0019\u0002\u0b26\u0b25\u0003\u0002",
"\u0002\u0002\u0b26\u0b27\u0003\u0002\u0002\u0002\u0b27\u0b28\u0003\u0002",
"\u0002\u0002\u0b28\u0b2a\u0007Y\u0002\u0002\u0b29\u0b2b\u00050\u0019",
"\u0002\u0b2a\u0b29\u0003\u0002\u0002\u0002\u0b2a\u0b2b\u0003\u0002\u0002",
"\u0002\u0b2b\u0b2c\u0003\u0002\u0002\u0002\u0b2c\u0b2d\u0007>\u0002",
"\u0002\u0b2d\u0b2e\u0005\u0096L\u0002\u0b2e\u0b2f\u0007\u0002\u0002",
"\u0003\u0b2f\u0b3f\u0003\u0002\u0002\u0002\u0b30\u0b31\u0007\u001e\u0002",
"\u0002\u0b31\u0b32\u0007=\u0002\u0002\u0b32\u0b34\u00054\u001b\u0002",
"\u0b33\u0b35\u00050\u0019\u0002\u0b34\u0b33\u0003\u0002\u0002\u0002",
"\u0b34\u0b35\u0003\u0002\u0002\u0002\u0b35\u0b36\u0003\u0002\u0002\u0002",
"\u0b36\u0b38\u0007Y\u0002\u0002\u0b37\u0b39\u00050\u0019\u0002\u0b38",
"\u0b37\u0003\u0002\u0002\u0002\u0b38\u0b39\u0003\u0002\u0002\u0002\u0b39",
"\u0b3a\u0003\u0002\u0002\u0002\u0b3a\u0b3b\u0007>\u0002\u0002\u0b3b",
"\u0b3c\u0005\u0096L\u0002\u0b3c\u0b3d\u0007\u0002\u0002\u0003\u0b3d",
"\u0b3f\u0003\u0002\u0002\u0002\u0b3e\u0b0f\u0003\u0002\u0002\u0002\u0b3e",
"\u0b16\u0003\u0002\u0002\u0002\u0b3e\u0b1f\u0003\u0002\u0002\u0002\u0b3e",
"\u0b30\u0003\u0002\u0002\u0002\u0b3f\u016d\u0003\u0002\u0002\u0002\u0b40",
"\u0b41\u0007\u001f\u0002\u0002\u0b41\u0b42\u0007k\u0002\u0002\u0b42",
"\u0b43\u0007Y\u0002\u0002\u0b43\u0b56\u0007\u0002\u0002\u0003\u0b44",
"\u0b45\u0007\u0016\u0002\u0002\u0b45\u0b46\u0007Y\u0002\u0002\u0b46",
"\u0b56\u0007\u0002\u0002\u0003\u0b47\u0b48\u0007\u0012\u0002\u0002\u0b48",
"\u0b49\u0007Y\u0002\u0002\u0b49\u0b56\u0007\u0002\u0002\u0003\u0b4a",
"\u0b4c\u0007&\u0002\u0002\u0b4b\u0b4d\u00050\u0019\u0002\u0b4c\u0b4b",
"\u0003\u0002\u0002\u0002\u0b4c\u0b4d\u0003\u0002\u0002\u0002\u0b4d\u0b4e",
"\u0003\u0002\u0002\u0002\u0b4e\u0b4f\u0007Y\u0002\u0002\u0b4f\u0b56",
"\u0007\u0002\u0002\u0003\u0b50\u0b51\u0007\u001f\u0002\u0002\u0b51\u0b52",
"\u0005\u000e\b\u0002\u0b52\u0b53\u0007Y\u0002\u0002\u0b53\u0b54\u0007",
"\u0002\u0002\u0003\u0b54\u0b56\u0003\u0002\u0002\u0002\u0b55\u0b40\u0003",
"\u0002\u0002\u0002\u0b55\u0b44\u0003\u0002\u0002\u0002\u0b55\u0b47\u0003",
"\u0002\u0002\u0002\u0b55\u0b4a\u0003\u0002\u0002\u0002\u0b55\u0b50\u0003",
"\u0002\u0002\u0002\u0b56\u016f\u0003\u0002\u0002\u0002\u0b57\u0b59\u0005",
"\u00b6\\\u0002\u0b58\u0b57\u0003\u0002\u0002\u0002\u0b58\u0b59\u0003",
"\u0002\u0002\u0002\u0b59\u0b5a\u0003\u0002\u0002\u0002\u0b5a\u0b5d\u0007",
"\u0002\u0002\u0003\u0b5b\u0b5d\u0007\u0002\u0002\u0003\u0b5c\u0b58\u0003",
"\u0002\u0002\u0002\u0b5c\u0b5b\u0003\u0002\u0002\u0002\u0b5d\u0171\u0003",
"\u0002\u0002\u0002\u0b5e\u0b5f\u0005\u00b8]\u0002\u0b5f\u0b60\u0007",
"\u0002\u0002\u0003\u0b60\u0b66\u0003\u0002\u0002\u0002\u0b61\u0b62\u0005",
"\u00b6\\\u0002\u0b62\u0b63\u0005\u00b8]\u0002\u0b63\u0b64\u0007\u0002",
"\u0002\u0003\u0b64\u0b66\u0003\u0002\u0002\u0002\u0b65\u0b5e\u0003\u0002",
"\u0002\u0002\u0b65\u0b61\u0003\u0002\u0002\u0002\u0b66\u0173\u0003\u0002",
"\u0002\u0002\u0b67\u0b68\u0005\u00ba^\u0002\u0b68\u0b69\u0007\u0002",
"\u0002\u0003\u0b69\u0b70\u0003\u0002\u0002\u0002\u0b6a\u0b6b\u00054",
"\u001b\u0002\u0b6b\u0b6c\u0007\u0002\u0002\u0003\u0b6c\u0b70\u0003\u0002",
"\u0002\u0002\u0b6d\u0b6e\u0007Y\u0002\u0002\u0b6e\u0b70\u0007\u0002",
"\u0002\u0003\u0b6f\u0b67\u0003\u0002\u0002\u0002\u0b6f\u0b6a\u0003\u0002",
"\u0002\u0002\u0b6f\u0b6d\u0003\u0002\u0002\u0002\u0b70\u0175\u0003\u0002",
"\u0002\u0002\u0b71\u0b73\u00058\u001d\u0002\u0b72\u0b71\u0003\u0002",
"\u0002\u0002\u0b72\u0b73\u0003\u0002\u0002\u0002\u0b73\u0b74\u0003\u0002",
"\u0002\u0002\u0b74\u0b76\u0005f4\u0002\u0b75\u0b77\u0005\u00bc_\u0002",
"\u0b76\u0b75\u0003\u0002\u0002\u0002\u0b76\u0b77\u0003\u0002\u0002\u0002",
"\u0b77\u0b78\u0003\u0002\u0002\u0002\u0b78\u0b79\u0005\u009cO\u0002",
"\u0b79\u0b7a\u0007\u0002\u0002\u0003\u0b7a\u0177\u0003\u0002\u0002\u0002",
"\u0b7b\u0b7c\u00054\u001b\u0002\u0b7c\u0b7d\u0007\u0002\u0002\u0003",
"\u0b7d\u0b83\u0003\u0002\u0002\u0002\u0b7e\u0b7f\u0005\u00bc_\u0002",
"\u0b7f\u0b80\u00054\u001b\u0002\u0b80\u0b81\u0007\u0002\u0002\u0003",
"\u0b81\u0b83\u0003\u0002\u0002\u0002\u0b82\u0b7b\u0003\u0002\u0002\u0002",
"\u0b82\u0b7e\u0003\u0002\u0002\u0002\u0b83\u0179\u0003\u0002\u0002\u0002",
"\u011d\u017f\u0187\u019b\u01ac\u01b6\u01da\u01e4\u01f1\u01f3\u01fe\u0217",
"\u021b\u022b\u0239\u023b\u0247\u0249\u0255\u0257\u0269\u026b\u0277\u0279",
"\u0284\u028f\u029a\u02a5\u02b0\u02b9\u02c0\u02cc\u02da\u02e0\u02e8\u02ed",
"\u02f4\u02fe\u0306\u0318\u031c\u0323\u0332\u0336\u033c\u0340\u0344\u0346",
"\u0350\u0355\u0359\u035d\u0365\u036e\u0378\u0380\u0391\u039d\u03a3\u03aa",
"\u03b2\u03b7\u03ba\u03c1\u03d0\u03dc\u03df\u03e1\u03e9\u03ed\u03fb\u03ff",
"\u0404\u0407\u040a\u0411\u0413\u0418\u041c\u0421\u0425\u0428\u0431\u0439",
"\u0443\u044b\u044d\u0457\u045c\u0460\u0466\u0469\u0472\u0477\u047a\u0480",
"\u0490\u0496\u0499\u049e\u04a1\u04a8\u04bb\u04c1\u04c4\u04c6\u04d5\u04d9",
"\u04e0\u04e5\u04f2\u04fb\u0504\u0517\u051a\u0522\u0525\u0529\u052e\u053a",
"\u053e\u0549\u054f\u0558\u0563\u056b\u0579\u057e\u0582\u0595\u0599\u059d",
"\u05a5\u05a9\u05ae\u05b9\u05c0\u05c3\u05c7\u05d0\u05d9\u05dc\u05e0\u05eb",
"\u05f5\u0601\u0617\u0629\u0635\u0643\u067e\u0688\u06b1\u06b9\u06c2\u06d4",
"\u06e8\u06f7\u0706\u071f\u072e\u0738\u0742\u074c\u0756\u0760\u0768\u0774",
"\u0782\u078c\u07a0\u07a6\u07af\u07b6\u07c9\u07d3\u07dd\u07eb\u0808\u0821",
"\u0825\u082e\u0834\u0842\u0845\u084e\u0852\u0858\u085c\u0866\u086c\u0872",
"\u0876\u087f\u088a\u0894\u089e\u08b1\u08b9\u08c4\u08d2\u08d5\u08db\u08e6",
"\u08f2\u08f5\u08fe\u090f\u091e\u0923\u092a\u0931\u0940\u0946\u094b\u094e",
"\u0952\u0959\u095b\u0962\u0967\u096e\u0972\u0975\u097e\u0988\u0992\u099a",
"\u099e\u09a7\u09ab\u09b3\u09b9\u09be\u09c6\u09cd\u09d0\u09d7\u09ea\u09f0",
"\u09f7\u09fa\u0a03\u0a1a\u0a20\u0a25\u0a38\u0a3b\u0a43\u0a48\u0a55\u0a5f",
"\u0a68\u0a88\u0a8b\u0a93\u0a96\u0a9a\u0aa0\u0ab2\u0ab6\u0ac2\u0ad1\u0adb",
"\u0ae7\u0af2\u0b02\u0b06\u0b0d\u0b22\u0b26\u0b2a\u0b34\u0b38\u0b3e\u0b4c",
"\u0b55\u0b58\u0b5c\u0b65\u0b6f\u0b72\u0b76\u0b82"].join("");
var atn = new antlr4.atn.ATNDeserializer().deserialize(serializedATN);
var decisionsToDFA = atn.decisionToState.map( function(ds, index) { return new antlr4.dfa.DFA(ds, index); });
var sharedContextCache = new antlr4.PredictionContextCache();
var literalNames = [ null, "'__extension__'", "'__builtin_va_arg'", "'__builtin_offsetof'",
"'__m128'", "'__m128d'", "'__m128i'", "'__typeof__'",
"'__inline__'", "'__stdcall'", "'__declspec'", "'__asm'",
"'__attribute__'", "'__asm__'", "'__volatile__'", "'auto'",
"'break'", "'case'", "'char'", "'const'", "'continue'",
"'default'", "'do'", "'double'", "'else'", "'enum'",
"'extern'", "'float'", "'for'", "'goto'", "'if'", "'inline'",
"'int'", "'long'", "'register'", "'restrict'", "'return'",
"'short'", "'signed'", "'sizeof'", "'static'", "'struct'",
"'switch'", "'typedef'", "'union'", "'unsigned'", "'void'",
"'volatile'", "'while'", "'_Alignas'", "'_Alignof'",
"'_Atomic'", "'_Bool'", "'_Complex'", "'_Generic'",
"'_Imaginary'", "'_Noreturn'", "'_Static_assert'",
"'_Thread_local'", "'('", "')'", "'['", "']'", "'{'",
"'}'", "'<'", "'<='", "'>'", "'>='", "'<<'", "'>>'",
"'+'", "'++'", "'-'", "'--'", "'*'", "'/'", "'%'",
"'&'", "'|'", "'&&'", "'||'", "'^'", "'!'", "'~'",
"'?'", "':'", "';'", "','", "'='", "'*='", "'/='",
"'%='", "'+='", "'-='", "'<<='", "'>>='", "'&='", "'^='",
"'|='", "'=='", "'!='", "'->'", "'.'", "'...'" ];
var symbolicNames = [ null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, "Auto", "Break",
"Case", "Char", "Const", "Continue", "Default", "Do",
"Double", "Else", "Enum", "Extern", "Float", "For",
"Goto", "If", "Inline", "Int", "Long", "Register",
"Restrict", "Return", "Short", "Signed", "Sizeof",
"Static", "Struct", "Switch", "Typedef", "Union",
"Unsigned", "Void", "Volatile", "While", "Alignas",
"Alignof", "Atomic", "Bool", "Complex", "Generic",
"Imaginary", "Noreturn", "StaticAssert", "ThreadLocal",
"LeftParen", "RightParen", "LeftBracket", "RightBracket",
"LeftBrace", "RightBrace", "Less", "LessEqual", "Greater",
"GreaterEqual", "LeftShift", "RightShift", "Plus",
"PlusPlus", "Minus", "MinusMinus", "Star", "Div",
"Mod", "And", "Or", "AndAnd", "OrOr", "Caret", "Not",
"Tilde", "Question", "Colon", "Semi", "Comma", "Assign",
"StarAssign", "DivAssign", "ModAssign", "PlusAssign",
"MinusAssign", "LeftShiftAssign", "RightShiftAssign",
"AndAssign", "XorAssign", "OrAssign", "Equal", "NotEqual",
"Arrow", "Dot", "Ellipsis", "Identifier", "Constant",
"StringLiteral", "Directive", "Whitespace", "Newline",
"BlockComment", "LineComment" ];
var ruleNames = [ "primaryExpression", "genericSelection", "genericAssocList",
"genericAssociation", "postfixExpression", "argumentExpressionList",
"unaryExpression", "typeNameOrExpression", "unaryOperator",
"castExpression", "multiplicativeExpression", "additiveExpression",
"shiftExpression", "relationalExpression", "equalityExpression",
"andExpression", "exclusiveOrExpression", "inclusiveOrExpression",
"logicalAndExpression", "logicalOrExpression", "conditionalExpression",
"assignmentExpression", "assignmentOperator", "expression",
"constantExpression", "declaration", "specialFunctionDeclaration",
"declarationSpecifiers", "declarationSpecifiers2", "declarationSpecifier",
"initDeclaratorList", "initDeclarator", "storageClassSpecifier",
"typeSpecifier", "structOrUnionSpecifier", "structOrUnion",
"structDeclarationsBlock", "structDeclarationList", "structDeclaration",
"specifierQualifierList", "structDeclaratorList", "structDeclarator",
"enumSpecifier", "enumeratorList", "enumerator", "enumerationConstant",
"atomicTypeSpecifier", "typeQualifier", "functionSpecifier",
"alignmentSpecifier", "declarator", "pointerDeclarator",
"directDeclarator", "gccDeclaratorExtension", "gccAttributeSpecifier",
"gccAttributeList", "gccAttribute", "nestedParenthesesBlock",
"pointer", "typeQualifierList", "parameterTypeList",
"parameterList", "parameterDeclaration", "identifierList",
"typeName", "abstractDeclarator", "directAbstractDeclarator",
"typedefName", "initializer", "initializerList", "designation",
"designatorList", "designator", "staticAssertDeclaration",
"statement", "labeledStatement", "switchLabel", "compoundStatement",
"blockItemList", "blockItem", "specialMethodCall", "expressionStatement",
"selectionStatement", "switchCase", "switchBlockItemList",
"switchCaseList", "switchCompoundStatement", "iterationStatement",
"jumpStatement", "compilationUnit", "translationUnit",
"externalDeclaration", "functionDefinition", "declarationList",
"primaryExpression_DropletFile", "genericSelection_DropletFile",
"genericAssocList_DropletFile", "genericAssociation_DropletFile",
"postfixExpression_DropletFile", "argumentExpressionList_DropletFile",
"unaryExpression_DropletFile", "typeNameOrExpression_DropletFile",
"unaryOperator_DropletFile", "castExpression_DropletFile",
"multiplicativeExpression_DropletFile", "additiveExpression_DropletFile",
"shiftExpression_DropletFile", "relationalExpression_DropletFile",
"equalityExpression_DropletFile", "andExpression_DropletFile",
"exclusiveOrExpression_DropletFile", "inclusiveOrExpression_DropletFile",
"logicalAndExpression_DropletFile", "logicalOrExpression_DropletFile",
"conditionalExpression_DropletFile", "assignmentExpression_DropletFile",
"assignmentOperator_DropletFile", "expression_DropletFile",
"constantExpression_DropletFile", "declaration_DropletFile",
"specialFunctionDeclaration_DropletFile", "declarationSpecifiers_DropletFile",
"declarationSpecifiers2_DropletFile", "declarationSpecifier_DropletFile",
"initDeclaratorList_DropletFile", "initDeclarator_DropletFile",
"storageClassSpecifier_DropletFile", "typeSpecifier_DropletFile",
"structOrUnionSpecifier_DropletFile", "structOrUnion_DropletFile",
"structDeclarationsBlock_DropletFile", "structDeclarationList_DropletFile",
"structDeclaration_DropletFile", "specifierQualifierList_DropletFile",
"structDeclaratorList_DropletFile", "structDeclarator_DropletFile",
"enumSpecifier_DropletFile", "enumeratorList_DropletFile",
"enumerator_DropletFile", "enumerationConstant_DropletFile",
"atomicTypeSpecifier_DropletFile", "typeQualifier_DropletFile",
"functionSpecifier_DropletFile", "alignmentSpecifier_DropletFile",
"declarator_DropletFile", "pointerDeclarator_DropletFile",
"directDeclarator_DropletFile", "gccDeclaratorExtension_DropletFile",
"gccAttributeSpecifier_DropletFile", "gccAttributeList_DropletFile",
"gccAttribute_DropletFile", "nestedParenthesesBlock_DropletFile",
"pointer_DropletFile", "typeQualifierList_DropletFile",
"parameterTypeList_DropletFile", "parameterList_DropletFile",
"parameterDeclaration_DropletFile", "identifierList_DropletFile",
"typeName_DropletFile", "abstractDeclarator_DropletFile",
"directAbstractDeclarator_DropletFile", "typedefName_DropletFile",
"initializer_DropletFile", "initializerList_DropletFile",
"designation_DropletFile", "designatorList_DropletFile",
"designator_DropletFile", "staticAssertDeclaration_DropletFile",
"statement_DropletFile", "labeledStatement_DropletFile",
"switchLabeledStatement_DropletFile", "compoundStatement_DropletFile",
"blockItemList_DropletFile", "blockItem_DropletFile",
"specialMethodCall_DropletFile", "expressionStatement_DropletFile",
"selectionStatement_DropletFile", "switchCase_DropletFile",
"switchBlockItemList_DropletFile", "switchCaseList_DropletFile",
"switchCompoundStatement_DropletFile", "iterationStatement_DropletFile",
"jumpStatement_DropletFile", "compilationUnit_DropletFile",
"translationUnit_DropletFile", "externalDeclaration_DropletFile",
"functionDefinition_DropletFile", "declarationList_DropletFile" ];
function CParser (input) {
antlr4.Parser.call(this, input);
this._interp = new antlr4.atn.ParserATNSimulator(this, atn, decisionsToDFA, sharedContextCache);
this.ruleNames = ruleNames;
this.literalNames = literalNames;
this.symbolicNames = symbolicNames;
return this;
}
CParser.prototype = Object.create(antlr4.Parser.prototype);
CParser.prototype.constructor = CParser;
Object.defineProperty(CParser.prototype, "atn", {
get : function() {
return atn;
}
});
CParser.EOF = antlr4.Token.EOF;
CParser.T__0 = 1;
CParser.T__1 = 2;
CParser.T__2 = 3;
CParser.T__3 = 4;
CParser.T__4 = 5;
CParser.T__5 = 6;
CParser.T__6 = 7;
CParser.T__7 = 8;
CParser.T__8 = 9;
CParser.T__9 = 10;
CParser.T__10 = 11;
CParser.T__11 = 12;
CParser.T__12 = 13;
CParser.T__13 = 14;
CParser.Auto = 15;
CParser.Break = 16;
CParser.Case = 17;
CParser.Char = 18;
CParser.Const = 19;
CParser.Continue = 20;
CParser.Default = 21;
CParser.Do = 22;
CParser.Double = 23;
CParser.Else = 24;
CParser.Enum = 25;
CParser.Extern = 26;
CParser.Float = 27;
CParser.For = 28;
CParser.Goto = 29;
CParser.If = 30;
CParser.Inline = 31;
CParser.Int = 32;
CParser.Long = 33;
CParser.Register = 34;
CParser.Restrict = 35;
CParser.Return = 36;
CParser.Short = 37;
CParser.Signed = 38;
CParser.Sizeof = 39;
CParser.Static = 40;
CParser.Struct = 41;
CParser.Switch = 42;
CParser.Typedef = 43;
CParser.Union = 44;
CParser.Unsigned = 45;
CParser.Void = 46;
CParser.Volatile = 47;
CParser.While = 48;
CParser.Alignas = 49;
CParser.Alignof = 50;
CParser.Atomic = 51;
CParser.Bool = 52;
CParser.Complex = 53;
CParser.Generic = 54;
CParser.Imaginary = 55;
CParser.Noreturn = 56;
CParser.StaticAssert = 57;
CParser.ThreadLocal = 58;
CParser.LeftParen = 59;
CParser.RightParen = 60;
CParser.LeftBracket = 61;
CParser.RightBracket = 62;
CParser.LeftBrace = 63;
CParser.RightBrace = 64;
CParser.Less = 65;
CParser.LessEqual = 66;
CParser.Greater = 67;
CParser.GreaterEqual = 68;
CParser.LeftShift = 69;
CParser.RightShift = 70;
CParser.Plus = 71;
CParser.PlusPlus = 72;
CParser.Minus = 73;
CParser.MinusMinus = 74;
CParser.Star = 75;
CParser.Div = 76;
CParser.Mod = 77;
CParser.And = 78;
CParser.Or = 79;
CParser.AndAnd = 80;
CParser.OrOr = 81;
CParser.Caret = 82;
CParser.Not = 83;
CParser.Tilde = 84;
CParser.Question = 85;
CParser.Colon = 86;
CParser.Semi = 87;
CParser.Comma = 88;
CParser.Assign = 89;
CParser.StarAssign = 90;
CParser.DivAssign = 91;
CParser.ModAssign = 92;
CParser.PlusAssign = 93;
CParser.MinusAssign = 94;
CParser.LeftShiftAssign = 95;
CParser.RightShiftAssign = 96;
CParser.AndAssign = 97;
CParser.XorAssign = 98;
CParser.OrAssign = 99;
CParser.Equal = 100;
CParser.NotEqual = 101;
CParser.Arrow = 102;
CParser.Dot = 103;
CParser.Ellipsis = 104;
CParser.Identifier = 105;
CParser.Constant = 106;
CParser.StringLiteral = 107;
CParser.Directive = 108;
CParser.Whitespace = 109;
CParser.Newline = 110;
CParser.BlockComment = 111;
CParser.LineComment = 112;
CParser.RULE_primaryExpression = 0;
CParser.RULE_genericSelection = 1;
CParser.RULE_genericAssocList = 2;
CParser.RULE_genericAssociation = 3;
CParser.RULE_postfixExpression = 4;
CParser.RULE_argumentExpressionList = 5;
CParser.RULE_unaryExpression = 6;
CParser.RULE_typeNameOrExpression = 7;
CParser.RULE_unaryOperator = 8;
CParser.RULE_castExpression = 9;
CParser.RULE_multiplicativeExpression = 10;
CParser.RULE_additiveExpression = 11;
CParser.RULE_shiftExpression = 12;
CParser.RULE_relationalExpression = 13;
CParser.RULE_equalityExpression = 14;
CParser.RULE_andExpression = 15;
CParser.RULE_exclusiveOrExpression = 16;
CParser.RULE_inclusiveOrExpression = 17;
CParser.RULE_logicalAndExpression = 18;
CParser.RULE_logicalOrExpression = 19;
CParser.RULE_conditionalExpression = 20;
CParser.RULE_assignmentExpression = 21;
CParser.RULE_assignmentOperator = 22;
CParser.RULE_expression = 23;
CParser.RULE_constantExpression = 24;
CParser.RULE_declaration = 25;
CParser.RULE_specialFunctionDeclaration = 26;
CParser.RULE_declarationSpecifiers = 27;
CParser.RULE_declarationSpecifiers2 = 28;
CParser.RULE_declarationSpecifier = 29;
CParser.RULE_initDeclaratorList = 30;
CParser.RULE_initDeclarator = 31;
CParser.RULE_storageClassSpecifier = 32;
CParser.RULE_typeSpecifier = 33;
CParser.RULE_structOrUnionSpecifier = 34;
CParser.RULE_structOrUnion = 35;
CParser.RULE_structDeclarationsBlock = 36;
CParser.RULE_structDeclarationList = 37;
CParser.RULE_structDeclaration = 38;
CParser.RULE_specifierQualifierList = 39;
CParser.RULE_structDeclaratorList = 40;
CParser.RULE_structDeclarator = 41;
CParser.RULE_enumSpecifier = 42;
CParser.RULE_enumeratorList = 43;
CParser.RULE_enumerator = 44;
CParser.RULE_enumerationConstant = 45;
CParser.RULE_atomicTypeSpecifier = 46;
CParser.RULE_typeQualifier = 47;
CParser.RULE_functionSpecifier = 48;
CParser.RULE_alignmentSpecifier = 49;
CParser.RULE_declarator = 50;
CParser.RULE_pointerDeclarator = 51;
CParser.RULE_directDeclarator = 52;
CParser.RULE_gccDeclaratorExtension = 53;
CParser.RULE_gccAttributeSpecifier = 54;
CParser.RULE_gccAttributeList = 55;
CParser.RULE_gccAttribute = 56;
CParser.RULE_nestedParenthesesBlock = 57;
CParser.RULE_pointer = 58;
CParser.RULE_typeQualifierList = 59;
CParser.RULE_parameterTypeList = 60;
CParser.RULE_parameterList = 61;
CParser.RULE_parameterDeclaration = 62;
CParser.RULE_identifierList = 63;
CParser.RULE_typeName = 64;
CParser.RULE_abstractDeclarator = 65;
CParser.RULE_directAbstractDeclarator = 66;
CParser.RULE_typedefName = 67;
CParser.RULE_initializer = 68;
CParser.RULE_initializerList = 69;
CParser.RULE_designation = 70;
CParser.RULE_designatorList = 71;
CParser.RULE_designator = 72;
CParser.RULE_staticAssertDeclaration = 73;
CParser.RULE_statement = 74;
CParser.RULE_labeledStatement = 75;
CParser.RULE_switchLabel = 76;
CParser.RULE_compoundStatement = 77;
CParser.RULE_blockItemList = 78;
CParser.RULE_blockItem = 79;
CParser.RULE_specialMethodCall = 80;
CParser.RULE_expressionStatement = 81;
CParser.RULE_selectionStatement = 82;
CParser.RULE_switchCase = 83;
CParser.RULE_switchBlockItemList = 84;
CParser.RULE_switchCaseList = 85;
CParser.RULE_switchCompoundStatement = 86;
CParser.RULE_iterationStatement = 87;
CParser.RULE_jumpStatement = 88;
CParser.RULE_compilationUnit = 89;
CParser.RULE_translationUnit = 90;
CParser.RULE_externalDeclaration = 91;
CParser.RULE_functionDefinition = 92;
CParser.RULE_declarationList = 93;
CParser.RULE_primaryExpression_DropletFile = 94;
CParser.RULE_genericSelection_DropletFile = 95;
CParser.RULE_genericAssocList_DropletFile = 96;
CParser.RULE_genericAssociation_DropletFile = 97;
CParser.RULE_postfixExpression_DropletFile = 98;
CParser.RULE_argumentExpressionList_DropletFile = 99;
CParser.RULE_unaryExpression_DropletFile = 100;
CParser.RULE_typeNameOrExpression_DropletFile = 101;
CParser.RULE_unaryOperator_DropletFile = 102;
CParser.RULE_castExpression_DropletFile = 103;
CParser.RULE_multiplicativeExpression_DropletFile = 104;
CParser.RULE_additiveExpression_DropletFile = 105;
CParser.RULE_shiftExpression_DropletFile = 106;
CParser.RULE_relationalExpression_DropletFile = 107;
CParser.RULE_equalityExpression_DropletFile = 108;
CParser.RULE_andExpression_DropletFile = 109;
CParser.RULE_exclusiveOrExpression_DropletFile = 110;
CParser.RULE_inclusiveOrExpression_DropletFile = 111;
CParser.RULE_logicalAndExpression_DropletFile = 112;
CParser.RULE_logicalOrExpression_DropletFile = 113;
CParser.RULE_conditionalExpression_DropletFile = 114;
CParser.RULE_assignmentExpression_DropletFile = 115;
CParser.RULE_assignmentOperator_DropletFile = 116;
CParser.RULE_expression_DropletFile = 117;
CParser.RULE_constantExpression_DropletFile = 118;
CParser.RULE_declaration_DropletFile = 119;
CParser.RULE_specialFunctionDeclaration_DropletFile = 120;
CParser.RULE_declarationSpecifiers_DropletFile = 121;
CParser.RULE_declarationSpecifiers2_DropletFile = 122;
CParser.RULE_declarationSpecifier_DropletFile = 123;
CParser.RULE_initDeclaratorList_DropletFile = 124;
CParser.RULE_initDeclarator_DropletFile = 125;
CParser.RULE_storageClassSpecifier_DropletFile = 126;
CParser.RULE_typeSpecifier_DropletFile = 127;
CParser.RULE_structOrUnionSpecifier_DropletFile = 128;
CParser.RULE_structOrUnion_DropletFile = 129;
CParser.RULE_structDeclarationsBlock_DropletFile = 130;
CParser.RULE_structDeclarationList_DropletFile = 131;
CParser.RULE_structDeclaration_DropletFile = 132;
CParser.RULE_specifierQualifierList_DropletFile = 133;
CParser.RULE_structDeclaratorList_DropletFile = 134;
CParser.RULE_structDeclarator_DropletFile = 135;
CParser.RULE_enumSpecifier_DropletFile = 136;
CParser.RULE_enumeratorList_DropletFile = 137;
CParser.RULE_enumerator_DropletFile = 138;
CParser.RULE_enumerationConstant_DropletFile = 139;
CParser.RULE_atomicTypeSpecifier_DropletFile = 140;
CParser.RULE_typeQualifier_DropletFile = 141;
CParser.RULE_functionSpecifier_DropletFile = 142;
CParser.RULE_alignmentSpecifier_DropletFile = 143;
CParser.RULE_declarator_DropletFile = 144;
CParser.RULE_pointerDeclarator_DropletFile = 145;
CParser.RULE_directDeclarator_DropletFile = 146;
CParser.RULE_gccDeclaratorExtension_DropletFile = 147;
CParser.RULE_gccAttributeSpecifier_DropletFile = 148;
CParser.RULE_gccAttributeList_DropletFile = 149;
CParser.RULE_gccAttribute_DropletFile = 150;
CParser.RULE_nestedParenthesesBlock_DropletFile = 151;
CParser.RULE_pointer_DropletFile = 152;
CParser.RULE_typeQualifierList_DropletFile = 153;
CParser.RULE_parameterTypeList_DropletFile = 154;
CParser.RULE_parameterList_DropletFile = 155;
CParser.RULE_parameterDeclaration_DropletFile = 156;
CParser.RULE_identifierList_DropletFile = 157;
CParser.RULE_typeName_DropletFile = 158;
CParser.RULE_abstractDeclarator_DropletFile = 159;
CParser.RULE_directAbstractDeclarator_DropletFile = 160;
CParser.RULE_typedefName_DropletFile = 161;
CParser.RULE_initializer_DropletFile = 162;
CParser.RULE_initializerList_DropletFile = 163;
CParser.RULE_designation_DropletFile = 164;
CParser.RULE_designatorList_DropletFile = 165;
CParser.RULE_designator_DropletFile = 166;
CParser.RULE_staticAssertDeclaration_DropletFile = 167;
CParser.RULE_statement_DropletFile = 168;
CParser.RULE_labeledStatement_DropletFile = 169;
CParser.RULE_switchLabeledStatement_DropletFile = 170;
CParser.RULE_compoundStatement_DropletFile = 171;
CParser.RULE_blockItemList_DropletFile = 172;
CParser.RULE_blockItem_DropletFile = 173;
CParser.RULE_specialMethodCall_DropletFile = 174;
CParser.RULE_expressionStatement_DropletFile = 175;
CParser.RULE_selectionStatement_DropletFile = 176;
CParser.RULE_switchCase_DropletFile = 177;
CParser.RULE_switchBlockItemList_DropletFile = 178;
CParser.RULE_switchCaseList_DropletFile = 179;
CParser.RULE_switchCompoundStatement_DropletFile = 180;
CParser.RULE_iterationStatement_DropletFile = 181;
CParser.RULE_jumpStatement_DropletFile = 182;
CParser.RULE_compilationUnit_DropletFile = 183;
CParser.RULE_translationUnit_DropletFile = 184;
CParser.RULE_externalDeclaration_DropletFile = 185;
CParser.RULE_functionDefinition_DropletFile = 186;
CParser.RULE_declarationList_DropletFile = 187;
function PrimaryExpressionContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_primaryExpression;
return this;
}
PrimaryExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
PrimaryExpressionContext.prototype.constructor = PrimaryExpressionContext;
PrimaryExpressionContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
PrimaryExpressionContext.prototype.Constant = function() {
return this.getToken(CParser.Constant, 0);
};
PrimaryExpressionContext.prototype.StringLiteral = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTokens(CParser.StringLiteral);
} else {
return this.getToken(CParser.StringLiteral, i);
}
};
PrimaryExpressionContext.prototype.expression = function() {
return this.getTypedRuleContext(ExpressionContext,0);
};
PrimaryExpressionContext.prototype.genericSelection = function() {
return this.getTypedRuleContext(GenericSelectionContext,0);
};
PrimaryExpressionContext.prototype.compoundStatement = function() {
return this.getTypedRuleContext(CompoundStatementContext,0);
};
PrimaryExpressionContext.prototype.unaryExpression = function() {
return this.getTypedRuleContext(UnaryExpressionContext,0);
};
PrimaryExpressionContext.prototype.typeName = function() {
return this.getTypedRuleContext(TypeNameContext,0);
};
PrimaryExpressionContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterPrimaryExpression(this);
}
};
PrimaryExpressionContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitPrimaryExpression(this);
}
};
CParser.PrimaryExpressionContext = PrimaryExpressionContext;
CParser.prototype.primaryExpression = function() {
var localctx = new PrimaryExpressionContext(this, this._ctx, this.state);
this.enterRule(localctx, 0, CParser.RULE_primaryExpression);
var _la = 0; // Token type
try {
this.state = 409;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,2,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 376;
this.match(CParser.Identifier);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 377;
this.match(CParser.Constant);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 379;
this._errHandler.sync(this);
var _alt = 1;
do {
switch (_alt) {
case 1:
this.state = 378;
this.match(CParser.StringLiteral);
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
this.state = 381;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,0, this._ctx);
} while ( _alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER );
break;
case 4:
this.enterOuterAlt(localctx, 4);
this.state = 383;
this.match(CParser.LeftParen);
this.state = 384;
this.expression(0);
this.state = 385;
this.match(CParser.RightParen);
break;
case 5:
this.enterOuterAlt(localctx, 5);
this.state = 387;
this.genericSelection();
break;
case 6:
this.enterOuterAlt(localctx, 6);
this.state = 389;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.T__0) {
this.state = 388;
this.match(CParser.T__0);
}
this.state = 391;
this.match(CParser.LeftParen);
this.state = 392;
this.compoundStatement();
this.state = 393;
this.match(CParser.RightParen);
break;
case 7:
this.enterOuterAlt(localctx, 7);
this.state = 395;
this.match(CParser.T__1);
this.state = 396;
this.match(CParser.LeftParen);
this.state = 397;
this.unaryExpression();
this.state = 398;
this.match(CParser.Comma);
this.state = 399;
this.typeName();
this.state = 400;
this.match(CParser.RightParen);
break;
case 8:
this.enterOuterAlt(localctx, 8);
this.state = 402;
this.match(CParser.T__2);
this.state = 403;
this.match(CParser.LeftParen);
this.state = 404;
this.typeName();
this.state = 405;
this.match(CParser.Comma);
this.state = 406;
this.unaryExpression();
this.state = 407;
this.match(CParser.RightParen);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function GenericSelectionContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_genericSelection;
return this;
}
GenericSelectionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
GenericSelectionContext.prototype.constructor = GenericSelectionContext;
GenericSelectionContext.prototype.assignmentExpression = function() {
return this.getTypedRuleContext(AssignmentExpressionContext,0);
};
GenericSelectionContext.prototype.genericAssocList = function() {
return this.getTypedRuleContext(GenericAssocListContext,0);
};
GenericSelectionContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterGenericSelection(this);
}
};
GenericSelectionContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitGenericSelection(this);
}
};
CParser.GenericSelectionContext = GenericSelectionContext;
CParser.prototype.genericSelection = function() {
var localctx = new GenericSelectionContext(this, this._ctx, this.state);
this.enterRule(localctx, 2, CParser.RULE_genericSelection);
try {
this.enterOuterAlt(localctx, 1);
this.state = 411;
this.match(CParser.Generic);
this.state = 412;
this.match(CParser.LeftParen);
this.state = 413;
this.assignmentExpression();
this.state = 414;
this.match(CParser.Comma);
this.state = 415;
this.genericAssocList(0);
this.state = 416;
this.match(CParser.RightParen);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function GenericAssocListContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_genericAssocList;
return this;
}
GenericAssocListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
GenericAssocListContext.prototype.constructor = GenericAssocListContext;
GenericAssocListContext.prototype.genericAssociation = function() {
return this.getTypedRuleContext(GenericAssociationContext,0);
};
GenericAssocListContext.prototype.genericAssocList = function() {
return this.getTypedRuleContext(GenericAssocListContext,0);
};
GenericAssocListContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterGenericAssocList(this);
}
};
GenericAssocListContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitGenericAssocList(this);
}
};
CParser.prototype.genericAssocList = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new GenericAssocListContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 4;
this.enterRecursionRule(localctx, 4, CParser.RULE_genericAssocList, _p);
try {
this.enterOuterAlt(localctx, 1);
this.state = 419;
this.genericAssociation();
this._ctx.stop = this._input.LT(-1);
this.state = 426;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,3,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
localctx = new GenericAssocListContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_genericAssocList);
this.state = 421;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 422;
this.match(CParser.Comma);
this.state = 423;
this.genericAssociation();
}
this.state = 428;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,3,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function GenericAssociationContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_genericAssociation;
return this;
}
GenericAssociationContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
GenericAssociationContext.prototype.constructor = GenericAssociationContext;
GenericAssociationContext.prototype.typeName = function() {
return this.getTypedRuleContext(TypeNameContext,0);
};
GenericAssociationContext.prototype.assignmentExpression = function() {
return this.getTypedRuleContext(AssignmentExpressionContext,0);
};
GenericAssociationContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterGenericAssociation(this);
}
};
GenericAssociationContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitGenericAssociation(this);
}
};
CParser.GenericAssociationContext = GenericAssociationContext;
CParser.prototype.genericAssociation = function() {
var localctx = new GenericAssociationContext(this, this._ctx, this.state);
this.enterRule(localctx, 6, CParser.RULE_genericAssociation);
try {
this.state = 436;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.T__0:
case CParser.T__3:
case CParser.T__4:
case CParser.T__5:
case CParser.T__6:
case CParser.Char:
case CParser.Const:
case CParser.Double:
case CParser.Enum:
case CParser.Float:
case CParser.Int:
case CParser.Long:
case CParser.Restrict:
case CParser.Short:
case CParser.Signed:
case CParser.Struct:
case CParser.Union:
case CParser.Unsigned:
case CParser.Void:
case CParser.Volatile:
case CParser.Atomic:
case CParser.Bool:
case CParser.Complex:
case CParser.Identifier:
this.enterOuterAlt(localctx, 1);
this.state = 429;
this.typeName();
this.state = 430;
this.match(CParser.Colon);
this.state = 431;
this.assignmentExpression();
break;
case CParser.Default:
this.enterOuterAlt(localctx, 2);
this.state = 433;
this.match(CParser.Default);
this.state = 434;
this.match(CParser.Colon);
this.state = 435;
this.assignmentExpression();
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function PostfixExpressionContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_postfixExpression;
return this;
}
PostfixExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
PostfixExpressionContext.prototype.constructor = PostfixExpressionContext;
PostfixExpressionContext.prototype.primaryExpression = function() {
return this.getTypedRuleContext(PrimaryExpressionContext,0);
};
PostfixExpressionContext.prototype.typeName = function() {
return this.getTypedRuleContext(TypeNameContext,0);
};
PostfixExpressionContext.prototype.initializerList = function() {
return this.getTypedRuleContext(InitializerListContext,0);
};
PostfixExpressionContext.prototype.postfixExpression = function() {
return this.getTypedRuleContext(PostfixExpressionContext,0);
};
PostfixExpressionContext.prototype.expression = function() {
return this.getTypedRuleContext(ExpressionContext,0);
};
PostfixExpressionContext.prototype.argumentExpressionList = function() {
return this.getTypedRuleContext(ArgumentExpressionListContext,0);
};
PostfixExpressionContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
PostfixExpressionContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterPostfixExpression(this);
}
};
PostfixExpressionContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitPostfixExpression(this);
}
};
CParser.prototype.postfixExpression = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new PostfixExpressionContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 8;
this.enterRecursionRule(localctx, 8, CParser.RULE_postfixExpression, _p);
var _la = 0; // Token type
try {
this.enterOuterAlt(localctx, 1);
this.state = 472;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,5,this._ctx);
switch(la_) {
case 1:
this.state = 439;
this.primaryExpression();
break;
case 2:
this.state = 440;
this.match(CParser.LeftParen);
this.state = 441;
this.typeName();
this.state = 442;
this.match(CParser.RightParen);
this.state = 443;
this.match(CParser.LeftBrace);
this.state = 444;
this.initializerList(0);
this.state = 445;
this.match(CParser.RightBrace);
break;
case 3:
this.state = 447;
this.match(CParser.LeftParen);
this.state = 448;
this.typeName();
this.state = 449;
this.match(CParser.RightParen);
this.state = 450;
this.match(CParser.LeftBrace);
this.state = 451;
this.initializerList(0);
this.state = 452;
this.match(CParser.Comma);
this.state = 453;
this.match(CParser.RightBrace);
break;
case 4:
this.state = 455;
this.match(CParser.T__0);
this.state = 456;
this.match(CParser.LeftParen);
this.state = 457;
this.typeName();
this.state = 458;
this.match(CParser.RightParen);
this.state = 459;
this.match(CParser.LeftBrace);
this.state = 460;
this.initializerList(0);
this.state = 461;
this.match(CParser.RightBrace);
break;
case 5:
this.state = 463;
this.match(CParser.T__0);
this.state = 464;
this.match(CParser.LeftParen);
this.state = 465;
this.typeName();
this.state = 466;
this.match(CParser.RightParen);
this.state = 467;
this.match(CParser.LeftBrace);
this.state = 468;
this.initializerList(0);
this.state = 469;
this.match(CParser.Comma);
this.state = 470;
this.match(CParser.RightBrace);
break;
}
this._ctx.stop = this._input.LT(-1);
this.state = 497;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,8,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
this.state = 495;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,7,this._ctx);
switch(la_) {
case 1:
localctx = new PostfixExpressionContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_postfixExpression);
this.state = 474;
if (!( this.precpred(this._ctx, 10))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 10)");
}
this.state = 475;
this.match(CParser.LeftBracket);
this.state = 476;
this.expression(0);
this.state = 477;
this.match(CParser.RightBracket);
break;
case 2:
localctx = new PostfixExpressionContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_postfixExpression);
this.state = 479;
if (!( this.precpred(this._ctx, 9))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 9)");
}
this.state = 480;
this.match(CParser.LeftParen);
this.state = 482;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 481;
this.argumentExpressionList(0);
}
this.state = 484;
this.match(CParser.RightParen);
break;
case 3:
localctx = new PostfixExpressionContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_postfixExpression);
this.state = 485;
if (!( this.precpred(this._ctx, 8))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 8)");
}
this.state = 486;
this.match(CParser.Dot);
this.state = 487;
this.match(CParser.Identifier);
break;
case 4:
localctx = new PostfixExpressionContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_postfixExpression);
this.state = 488;
if (!( this.precpred(this._ctx, 7))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 7)");
}
this.state = 489;
this.match(CParser.Arrow);
this.state = 490;
this.match(CParser.Identifier);
break;
case 5:
localctx = new PostfixExpressionContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_postfixExpression);
this.state = 491;
if (!( this.precpred(this._ctx, 6))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 6)");
}
this.state = 492;
this.match(CParser.PlusPlus);
break;
case 6:
localctx = new PostfixExpressionContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_postfixExpression);
this.state = 493;
if (!( this.precpred(this._ctx, 5))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 5)");
}
this.state = 494;
this.match(CParser.MinusMinus);
break;
}
}
this.state = 499;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,8,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function ArgumentExpressionListContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_argumentExpressionList;
return this;
}
ArgumentExpressionListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ArgumentExpressionListContext.prototype.constructor = ArgumentExpressionListContext;
ArgumentExpressionListContext.prototype.assignmentExpression = function() {
return this.getTypedRuleContext(AssignmentExpressionContext,0);
};
ArgumentExpressionListContext.prototype.argumentExpressionList = function() {
return this.getTypedRuleContext(ArgumentExpressionListContext,0);
};
ArgumentExpressionListContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterArgumentExpressionList(this);
}
};
ArgumentExpressionListContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitArgumentExpressionList(this);
}
};
CParser.prototype.argumentExpressionList = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new ArgumentExpressionListContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 10;
this.enterRecursionRule(localctx, 10, CParser.RULE_argumentExpressionList, _p);
try {
this.enterOuterAlt(localctx, 1);
this.state = 501;
this.assignmentExpression();
this._ctx.stop = this._input.LT(-1);
this.state = 508;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,9,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
localctx = new ArgumentExpressionListContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_argumentExpressionList);
this.state = 503;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 504;
this.match(CParser.Comma);
this.state = 505;
this.assignmentExpression();
}
this.state = 510;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,9,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function UnaryExpressionContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_unaryExpression;
return this;
}
UnaryExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
UnaryExpressionContext.prototype.constructor = UnaryExpressionContext;
UnaryExpressionContext.prototype.postfixExpression = function() {
return this.getTypedRuleContext(PostfixExpressionContext,0);
};
UnaryExpressionContext.prototype.unaryExpression = function() {
return this.getTypedRuleContext(UnaryExpressionContext,0);
};
UnaryExpressionContext.prototype.unaryOperator = function() {
return this.getTypedRuleContext(UnaryOperatorContext,0);
};
UnaryExpressionContext.prototype.castExpression = function() {
return this.getTypedRuleContext(CastExpressionContext,0);
};
UnaryExpressionContext.prototype.typeNameOrExpression = function() {
return this.getTypedRuleContext(TypeNameOrExpressionContext,0);
};
UnaryExpressionContext.prototype.typeName = function() {
return this.getTypedRuleContext(TypeNameContext,0);
};
UnaryExpressionContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
UnaryExpressionContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterUnaryExpression(this);
}
};
UnaryExpressionContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitUnaryExpression(this);
}
};
CParser.UnaryExpressionContext = UnaryExpressionContext;
CParser.prototype.unaryExpression = function() {
var localctx = new UnaryExpressionContext(this, this._ctx, this.state);
this.enterRule(localctx, 12, CParser.RULE_unaryExpression);
try {
this.state = 533;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,10,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 511;
this.postfixExpression(0);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 512;
this.match(CParser.PlusPlus);
this.state = 513;
this.unaryExpression();
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 514;
this.match(CParser.MinusMinus);
this.state = 515;
this.unaryExpression();
break;
case 4:
this.enterOuterAlt(localctx, 4);
this.state = 516;
this.unaryOperator();
this.state = 517;
this.castExpression();
break;
case 5:
this.enterOuterAlt(localctx, 5);
this.state = 519;
this.match(CParser.Sizeof);
this.state = 520;
this.match(CParser.LeftParen);
this.state = 521;
this.typeNameOrExpression();
this.state = 522;
this.match(CParser.RightParen);
break;
case 6:
this.enterOuterAlt(localctx, 6);
this.state = 524;
this.match(CParser.Sizeof);
this.state = 525;
this.unaryExpression();
break;
case 7:
this.enterOuterAlt(localctx, 7);
this.state = 526;
this.match(CParser.Alignof);
this.state = 527;
this.match(CParser.LeftParen);
this.state = 528;
this.typeName();
this.state = 529;
this.match(CParser.RightParen);
break;
case 8:
this.enterOuterAlt(localctx, 8);
this.state = 531;
this.match(CParser.AndAnd);
this.state = 532;
this.match(CParser.Identifier);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function TypeNameOrExpressionContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_typeNameOrExpression;
return this;
}
TypeNameOrExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TypeNameOrExpressionContext.prototype.constructor = TypeNameOrExpressionContext;
TypeNameOrExpressionContext.prototype.typeName = function() {
return this.getTypedRuleContext(TypeNameContext,0);
};
TypeNameOrExpressionContext.prototype.expression = function() {
return this.getTypedRuleContext(ExpressionContext,0);
};
TypeNameOrExpressionContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterTypeNameOrExpression(this);
}
};
TypeNameOrExpressionContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitTypeNameOrExpression(this);
}
};
CParser.TypeNameOrExpressionContext = TypeNameOrExpressionContext;
CParser.prototype.typeNameOrExpression = function() {
var localctx = new TypeNameOrExpressionContext(this, this._ctx, this.state);
this.enterRule(localctx, 14, CParser.RULE_typeNameOrExpression);
try {
this.state = 537;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,11,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 535;
this.typeName();
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 536;
this.expression(0);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function UnaryOperatorContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_unaryOperator;
return this;
}
UnaryOperatorContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
UnaryOperatorContext.prototype.constructor = UnaryOperatorContext;
UnaryOperatorContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterUnaryOperator(this);
}
};
UnaryOperatorContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitUnaryOperator(this);
}
};
CParser.UnaryOperatorContext = UnaryOperatorContext;
CParser.prototype.unaryOperator = function() {
var localctx = new UnaryOperatorContext(this, this._ctx, this.state);
this.enterRule(localctx, 16, CParser.RULE_unaryOperator);
var _la = 0; // Token type
try {
this.enterOuterAlt(localctx, 1);
this.state = 539;
_la = this._input.LA(1);
if(!(((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0))) {
this._errHandler.recoverInline(this);
}
else {
this._errHandler.reportMatch(this);
this.consume();
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function CastExpressionContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_castExpression;
return this;
}
CastExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
CastExpressionContext.prototype.constructor = CastExpressionContext;
CastExpressionContext.prototype.unaryExpression = function() {
return this.getTypedRuleContext(UnaryExpressionContext,0);
};
CastExpressionContext.prototype.typeName = function() {
return this.getTypedRuleContext(TypeNameContext,0);
};
CastExpressionContext.prototype.castExpression = function() {
return this.getTypedRuleContext(CastExpressionContext,0);
};
CastExpressionContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterCastExpression(this);
}
};
CastExpressionContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitCastExpression(this);
}
};
CParser.CastExpressionContext = CastExpressionContext;
CParser.prototype.castExpression = function() {
var localctx = new CastExpressionContext(this, this._ctx, this.state);
this.enterRule(localctx, 18, CParser.RULE_castExpression);
try {
this.state = 553;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,12,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 541;
this.unaryExpression();
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 542;
this.match(CParser.LeftParen);
this.state = 543;
this.typeName();
this.state = 544;
this.match(CParser.RightParen);
this.state = 545;
this.castExpression();
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 547;
this.match(CParser.T__0);
this.state = 548;
this.match(CParser.LeftParen);
this.state = 549;
this.typeName();
this.state = 550;
this.match(CParser.RightParen);
this.state = 551;
this.castExpression();
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function MultiplicativeExpressionContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_multiplicativeExpression;
return this;
}
MultiplicativeExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
MultiplicativeExpressionContext.prototype.constructor = MultiplicativeExpressionContext;
MultiplicativeExpressionContext.prototype.castExpression = function() {
return this.getTypedRuleContext(CastExpressionContext,0);
};
MultiplicativeExpressionContext.prototype.multiplicativeExpression = function() {
return this.getTypedRuleContext(MultiplicativeExpressionContext,0);
};
MultiplicativeExpressionContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterMultiplicativeExpression(this);
}
};
MultiplicativeExpressionContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitMultiplicativeExpression(this);
}
};
CParser.prototype.multiplicativeExpression = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new MultiplicativeExpressionContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 20;
this.enterRecursionRule(localctx, 20, CParser.RULE_multiplicativeExpression, _p);
try {
this.enterOuterAlt(localctx, 1);
this.state = 556;
this.castExpression();
this._ctx.stop = this._input.LT(-1);
this.state = 569;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,14,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
this.state = 567;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,13,this._ctx);
switch(la_) {
case 1:
localctx = new MultiplicativeExpressionContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_multiplicativeExpression);
this.state = 558;
if (!( this.precpred(this._ctx, 3))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)");
}
this.state = 559;
this.match(CParser.Star);
this.state = 560;
this.castExpression();
break;
case 2:
localctx = new MultiplicativeExpressionContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_multiplicativeExpression);
this.state = 561;
if (!( this.precpred(this._ctx, 2))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)");
}
this.state = 562;
this.match(CParser.Div);
this.state = 563;
this.castExpression();
break;
case 3:
localctx = new MultiplicativeExpressionContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_multiplicativeExpression);
this.state = 564;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 565;
this.match(CParser.Mod);
this.state = 566;
this.castExpression();
break;
}
}
this.state = 571;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,14,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function AdditiveExpressionContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_additiveExpression;
return this;
}
AdditiveExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AdditiveExpressionContext.prototype.constructor = AdditiveExpressionContext;
AdditiveExpressionContext.prototype.multiplicativeExpression = function() {
return this.getTypedRuleContext(MultiplicativeExpressionContext,0);
};
AdditiveExpressionContext.prototype.additiveExpression = function() {
return this.getTypedRuleContext(AdditiveExpressionContext,0);
};
AdditiveExpressionContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterAdditiveExpression(this);
}
};
AdditiveExpressionContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitAdditiveExpression(this);
}
};
CParser.prototype.additiveExpression = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new AdditiveExpressionContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 22;
this.enterRecursionRule(localctx, 22, CParser.RULE_additiveExpression, _p);
try {
this.enterOuterAlt(localctx, 1);
this.state = 573;
this.multiplicativeExpression(0);
this._ctx.stop = this._input.LT(-1);
this.state = 583;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,16,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
this.state = 581;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,15,this._ctx);
switch(la_) {
case 1:
localctx = new AdditiveExpressionContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_additiveExpression);
this.state = 575;
if (!( this.precpred(this._ctx, 2))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)");
}
this.state = 576;
this.match(CParser.Plus);
this.state = 577;
this.multiplicativeExpression(0);
break;
case 2:
localctx = new AdditiveExpressionContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_additiveExpression);
this.state = 578;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 579;
this.match(CParser.Minus);
this.state = 580;
this.multiplicativeExpression(0);
break;
}
}
this.state = 585;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,16,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function ShiftExpressionContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_shiftExpression;
return this;
}
ShiftExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ShiftExpressionContext.prototype.constructor = ShiftExpressionContext;
ShiftExpressionContext.prototype.additiveExpression = function() {
return this.getTypedRuleContext(AdditiveExpressionContext,0);
};
ShiftExpressionContext.prototype.shiftExpression = function() {
return this.getTypedRuleContext(ShiftExpressionContext,0);
};
ShiftExpressionContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterShiftExpression(this);
}
};
ShiftExpressionContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitShiftExpression(this);
}
};
CParser.prototype.shiftExpression = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new ShiftExpressionContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 24;
this.enterRecursionRule(localctx, 24, CParser.RULE_shiftExpression, _p);
try {
this.enterOuterAlt(localctx, 1);
this.state = 587;
this.additiveExpression(0);
this._ctx.stop = this._input.LT(-1);
this.state = 597;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,18,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
this.state = 595;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,17,this._ctx);
switch(la_) {
case 1:
localctx = new ShiftExpressionContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_shiftExpression);
this.state = 589;
if (!( this.precpred(this._ctx, 2))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)");
}
this.state = 590;
this.match(CParser.LeftShift);
this.state = 591;
this.additiveExpression(0);
break;
case 2:
localctx = new ShiftExpressionContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_shiftExpression);
this.state = 592;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 593;
this.match(CParser.RightShift);
this.state = 594;
this.additiveExpression(0);
break;
}
}
this.state = 599;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,18,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function RelationalExpressionContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_relationalExpression;
return this;
}
RelationalExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
RelationalExpressionContext.prototype.constructor = RelationalExpressionContext;
RelationalExpressionContext.prototype.shiftExpression = function() {
return this.getTypedRuleContext(ShiftExpressionContext,0);
};
RelationalExpressionContext.prototype.relationalExpression = function() {
return this.getTypedRuleContext(RelationalExpressionContext,0);
};
RelationalExpressionContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterRelationalExpression(this);
}
};
RelationalExpressionContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitRelationalExpression(this);
}
};
CParser.prototype.relationalExpression = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new RelationalExpressionContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 26;
this.enterRecursionRule(localctx, 26, CParser.RULE_relationalExpression, _p);
try {
this.enterOuterAlt(localctx, 1);
this.state = 601;
this.shiftExpression(0);
this._ctx.stop = this._input.LT(-1);
this.state = 617;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,20,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
this.state = 615;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,19,this._ctx);
switch(la_) {
case 1:
localctx = new RelationalExpressionContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_relationalExpression);
this.state = 603;
if (!( this.precpred(this._ctx, 4))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 4)");
}
this.state = 604;
this.match(CParser.Less);
this.state = 605;
this.shiftExpression(0);
break;
case 2:
localctx = new RelationalExpressionContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_relationalExpression);
this.state = 606;
if (!( this.precpred(this._ctx, 3))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)");
}
this.state = 607;
this.match(CParser.Greater);
this.state = 608;
this.shiftExpression(0);
break;
case 3:
localctx = new RelationalExpressionContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_relationalExpression);
this.state = 609;
if (!( this.precpred(this._ctx, 2))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)");
}
this.state = 610;
this.match(CParser.LessEqual);
this.state = 611;
this.shiftExpression(0);
break;
case 4:
localctx = new RelationalExpressionContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_relationalExpression);
this.state = 612;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 613;
this.match(CParser.GreaterEqual);
this.state = 614;
this.shiftExpression(0);
break;
}
}
this.state = 619;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,20,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function EqualityExpressionContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_equalityExpression;
return this;
}
EqualityExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
EqualityExpressionContext.prototype.constructor = EqualityExpressionContext;
EqualityExpressionContext.prototype.relationalExpression = function() {
return this.getTypedRuleContext(RelationalExpressionContext,0);
};
EqualityExpressionContext.prototype.equalityExpression = function() {
return this.getTypedRuleContext(EqualityExpressionContext,0);
};
EqualityExpressionContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterEqualityExpression(this);
}
};
EqualityExpressionContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitEqualityExpression(this);
}
};
CParser.prototype.equalityExpression = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new EqualityExpressionContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 28;
this.enterRecursionRule(localctx, 28, CParser.RULE_equalityExpression, _p);
try {
this.enterOuterAlt(localctx, 1);
this.state = 621;
this.relationalExpression(0);
this._ctx.stop = this._input.LT(-1);
this.state = 631;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,22,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
this.state = 629;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,21,this._ctx);
switch(la_) {
case 1:
localctx = new EqualityExpressionContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_equalityExpression);
this.state = 623;
if (!( this.precpred(this._ctx, 2))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)");
}
this.state = 624;
this.match(CParser.Equal);
this.state = 625;
this.relationalExpression(0);
break;
case 2:
localctx = new EqualityExpressionContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_equalityExpression);
this.state = 626;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 627;
this.match(CParser.NotEqual);
this.state = 628;
this.relationalExpression(0);
break;
}
}
this.state = 633;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,22,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function AndExpressionContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_andExpression;
return this;
}
AndExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AndExpressionContext.prototype.constructor = AndExpressionContext;
AndExpressionContext.prototype.equalityExpression = function() {
return this.getTypedRuleContext(EqualityExpressionContext,0);
};
AndExpressionContext.prototype.andExpression = function() {
return this.getTypedRuleContext(AndExpressionContext,0);
};
AndExpressionContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterAndExpression(this);
}
};
AndExpressionContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitAndExpression(this);
}
};
CParser.prototype.andExpression = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new AndExpressionContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 30;
this.enterRecursionRule(localctx, 30, CParser.RULE_andExpression, _p);
try {
this.enterOuterAlt(localctx, 1);
this.state = 635;
this.equalityExpression(0);
this._ctx.stop = this._input.LT(-1);
this.state = 642;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,23,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
localctx = new AndExpressionContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_andExpression);
this.state = 637;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 638;
this.match(CParser.And);
this.state = 639;
this.equalityExpression(0);
}
this.state = 644;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,23,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function ExclusiveOrExpressionContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_exclusiveOrExpression;
return this;
}
ExclusiveOrExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ExclusiveOrExpressionContext.prototype.constructor = ExclusiveOrExpressionContext;
ExclusiveOrExpressionContext.prototype.andExpression = function() {
return this.getTypedRuleContext(AndExpressionContext,0);
};
ExclusiveOrExpressionContext.prototype.exclusiveOrExpression = function() {
return this.getTypedRuleContext(ExclusiveOrExpressionContext,0);
};
ExclusiveOrExpressionContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterExclusiveOrExpression(this);
}
};
ExclusiveOrExpressionContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitExclusiveOrExpression(this);
}
};
CParser.prototype.exclusiveOrExpression = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new ExclusiveOrExpressionContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 32;
this.enterRecursionRule(localctx, 32, CParser.RULE_exclusiveOrExpression, _p);
try {
this.enterOuterAlt(localctx, 1);
this.state = 646;
this.andExpression(0);
this._ctx.stop = this._input.LT(-1);
this.state = 653;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,24,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
localctx = new ExclusiveOrExpressionContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_exclusiveOrExpression);
this.state = 648;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 649;
this.match(CParser.Caret);
this.state = 650;
this.andExpression(0);
}
this.state = 655;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,24,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function InclusiveOrExpressionContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_inclusiveOrExpression;
return this;
}
InclusiveOrExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
InclusiveOrExpressionContext.prototype.constructor = InclusiveOrExpressionContext;
InclusiveOrExpressionContext.prototype.exclusiveOrExpression = function() {
return this.getTypedRuleContext(ExclusiveOrExpressionContext,0);
};
InclusiveOrExpressionContext.prototype.inclusiveOrExpression = function() {
return this.getTypedRuleContext(InclusiveOrExpressionContext,0);
};
InclusiveOrExpressionContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterInclusiveOrExpression(this);
}
};
InclusiveOrExpressionContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitInclusiveOrExpression(this);
}
};
CParser.prototype.inclusiveOrExpression = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new InclusiveOrExpressionContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 34;
this.enterRecursionRule(localctx, 34, CParser.RULE_inclusiveOrExpression, _p);
try {
this.enterOuterAlt(localctx, 1);
this.state = 657;
this.exclusiveOrExpression(0);
this._ctx.stop = this._input.LT(-1);
this.state = 664;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,25,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
localctx = new InclusiveOrExpressionContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_inclusiveOrExpression);
this.state = 659;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 660;
this.match(CParser.Or);
this.state = 661;
this.exclusiveOrExpression(0);
}
this.state = 666;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,25,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function LogicalAndExpressionContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_logicalAndExpression;
return this;
}
LogicalAndExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
LogicalAndExpressionContext.prototype.constructor = LogicalAndExpressionContext;
LogicalAndExpressionContext.prototype.inclusiveOrExpression = function() {
return this.getTypedRuleContext(InclusiveOrExpressionContext,0);
};
LogicalAndExpressionContext.prototype.logicalAndExpression = function() {
return this.getTypedRuleContext(LogicalAndExpressionContext,0);
};
LogicalAndExpressionContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterLogicalAndExpression(this);
}
};
LogicalAndExpressionContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitLogicalAndExpression(this);
}
};
CParser.prototype.logicalAndExpression = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new LogicalAndExpressionContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 36;
this.enterRecursionRule(localctx, 36, CParser.RULE_logicalAndExpression, _p);
try {
this.enterOuterAlt(localctx, 1);
this.state = 668;
this.inclusiveOrExpression(0);
this._ctx.stop = this._input.LT(-1);
this.state = 675;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,26,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
localctx = new LogicalAndExpressionContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_logicalAndExpression);
this.state = 670;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 671;
this.match(CParser.AndAnd);
this.state = 672;
this.inclusiveOrExpression(0);
}
this.state = 677;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,26,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function LogicalOrExpressionContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_logicalOrExpression;
return this;
}
LogicalOrExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
LogicalOrExpressionContext.prototype.constructor = LogicalOrExpressionContext;
LogicalOrExpressionContext.prototype.logicalAndExpression = function() {
return this.getTypedRuleContext(LogicalAndExpressionContext,0);
};
LogicalOrExpressionContext.prototype.logicalOrExpression = function() {
return this.getTypedRuleContext(LogicalOrExpressionContext,0);
};
LogicalOrExpressionContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterLogicalOrExpression(this);
}
};
LogicalOrExpressionContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitLogicalOrExpression(this);
}
};
CParser.prototype.logicalOrExpression = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new LogicalOrExpressionContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 38;
this.enterRecursionRule(localctx, 38, CParser.RULE_logicalOrExpression, _p);
try {
this.enterOuterAlt(localctx, 1);
this.state = 679;
this.logicalAndExpression(0);
this._ctx.stop = this._input.LT(-1);
this.state = 686;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,27,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
localctx = new LogicalOrExpressionContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_logicalOrExpression);
this.state = 681;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 682;
this.match(CParser.OrOr);
this.state = 683;
this.logicalAndExpression(0);
}
this.state = 688;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,27,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function ConditionalExpressionContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_conditionalExpression;
return this;
}
ConditionalExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ConditionalExpressionContext.prototype.constructor = ConditionalExpressionContext;
ConditionalExpressionContext.prototype.logicalOrExpression = function() {
return this.getTypedRuleContext(LogicalOrExpressionContext,0);
};
ConditionalExpressionContext.prototype.expression = function() {
return this.getTypedRuleContext(ExpressionContext,0);
};
ConditionalExpressionContext.prototype.conditionalExpression = function() {
return this.getTypedRuleContext(ConditionalExpressionContext,0);
};
ConditionalExpressionContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterConditionalExpression(this);
}
};
ConditionalExpressionContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitConditionalExpression(this);
}
};
CParser.ConditionalExpressionContext = ConditionalExpressionContext;
CParser.prototype.conditionalExpression = function() {
var localctx = new ConditionalExpressionContext(this, this._ctx, this.state);
this.enterRule(localctx, 40, CParser.RULE_conditionalExpression);
try {
this.enterOuterAlt(localctx, 1);
this.state = 689;
this.logicalOrExpression(0);
this.state = 695;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,28,this._ctx);
if(la_===1) {
this.state = 690;
this.match(CParser.Question);
this.state = 691;
this.expression(0);
this.state = 692;
this.match(CParser.Colon);
this.state = 693;
this.conditionalExpression();
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function AssignmentExpressionContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_assignmentExpression;
return this;
}
AssignmentExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AssignmentExpressionContext.prototype.constructor = AssignmentExpressionContext;
AssignmentExpressionContext.prototype.conditionalExpression = function() {
return this.getTypedRuleContext(ConditionalExpressionContext,0);
};
AssignmentExpressionContext.prototype.unaryExpression = function() {
return this.getTypedRuleContext(UnaryExpressionContext,0);
};
AssignmentExpressionContext.prototype.assignmentOperator = function() {
return this.getTypedRuleContext(AssignmentOperatorContext,0);
};
AssignmentExpressionContext.prototype.assignmentExpression = function() {
return this.getTypedRuleContext(AssignmentExpressionContext,0);
};
AssignmentExpressionContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterAssignmentExpression(this);
}
};
AssignmentExpressionContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitAssignmentExpression(this);
}
};
CParser.AssignmentExpressionContext = AssignmentExpressionContext;
CParser.prototype.assignmentExpression = function() {
var localctx = new AssignmentExpressionContext(this, this._ctx, this.state);
this.enterRule(localctx, 42, CParser.RULE_assignmentExpression);
try {
this.state = 702;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,29,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 697;
this.conditionalExpression();
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 698;
this.unaryExpression();
this.state = 699;
this.assignmentOperator();
this.state = 700;
this.assignmentExpression();
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function AssignmentOperatorContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_assignmentOperator;
return this;
}
AssignmentOperatorContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AssignmentOperatorContext.prototype.constructor = AssignmentOperatorContext;
AssignmentOperatorContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterAssignmentOperator(this);
}
};
AssignmentOperatorContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitAssignmentOperator(this);
}
};
CParser.AssignmentOperatorContext = AssignmentOperatorContext;
CParser.prototype.assignmentOperator = function() {
var localctx = new AssignmentOperatorContext(this, this._ctx, this.state);
this.enterRule(localctx, 44, CParser.RULE_assignmentOperator);
var _la = 0; // Token type
try {
this.enterOuterAlt(localctx, 1);
this.state = 704;
_la = this._input.LA(1);
if(!(((((_la - 89)) & ~0x1f) == 0 && ((1 << (_la - 89)) & ((1 << (CParser.Assign - 89)) | (1 << (CParser.StarAssign - 89)) | (1 << (CParser.DivAssign - 89)) | (1 << (CParser.ModAssign - 89)) | (1 << (CParser.PlusAssign - 89)) | (1 << (CParser.MinusAssign - 89)) | (1 << (CParser.LeftShiftAssign - 89)) | (1 << (CParser.RightShiftAssign - 89)) | (1 << (CParser.AndAssign - 89)) | (1 << (CParser.XorAssign - 89)) | (1 << (CParser.OrAssign - 89)))) !== 0))) {
this._errHandler.recoverInline(this);
}
else {
this._errHandler.reportMatch(this);
this.consume();
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function ExpressionContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_expression;
return this;
}
ExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ExpressionContext.prototype.constructor = ExpressionContext;
ExpressionContext.prototype.assignmentExpression = function() {
return this.getTypedRuleContext(AssignmentExpressionContext,0);
};
ExpressionContext.prototype.expression = function() {
return this.getTypedRuleContext(ExpressionContext,0);
};
ExpressionContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterExpression(this);
}
};
ExpressionContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitExpression(this);
}
};
CParser.prototype.expression = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new ExpressionContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 46;
this.enterRecursionRule(localctx, 46, CParser.RULE_expression, _p);
try {
this.enterOuterAlt(localctx, 1);
this.state = 707;
this.assignmentExpression();
this._ctx.stop = this._input.LT(-1);
this.state = 714;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,30,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
localctx = new ExpressionContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_expression);
this.state = 709;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 710;
this.match(CParser.Comma);
this.state = 711;
this.assignmentExpression();
}
this.state = 716;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,30,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function ConstantExpressionContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_constantExpression;
return this;
}
ConstantExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ConstantExpressionContext.prototype.constructor = ConstantExpressionContext;
ConstantExpressionContext.prototype.conditionalExpression = function() {
return this.getTypedRuleContext(ConditionalExpressionContext,0);
};
ConstantExpressionContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterConstantExpression(this);
}
};
ConstantExpressionContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitConstantExpression(this);
}
};
CParser.ConstantExpressionContext = ConstantExpressionContext;
CParser.prototype.constantExpression = function() {
var localctx = new ConstantExpressionContext(this, this._ctx, this.state);
this.enterRule(localctx, 48, CParser.RULE_constantExpression);
try {
this.enterOuterAlt(localctx, 1);
this.state = 717;
this.conditionalExpression();
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function DeclarationContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_declaration;
return this;
}
DeclarationContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DeclarationContext.prototype.constructor = DeclarationContext;
DeclarationContext.prototype.specialFunctionDeclaration = function() {
return this.getTypedRuleContext(SpecialFunctionDeclarationContext,0);
};
DeclarationContext.prototype.declarationSpecifiers = function() {
return this.getTypedRuleContext(DeclarationSpecifiersContext,0);
};
DeclarationContext.prototype.initDeclaratorList = function() {
return this.getTypedRuleContext(InitDeclaratorListContext,0);
};
DeclarationContext.prototype.staticAssertDeclaration = function() {
return this.getTypedRuleContext(StaticAssertDeclarationContext,0);
};
DeclarationContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterDeclaration(this);
}
};
DeclarationContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitDeclaration(this);
}
};
CParser.DeclarationContext = DeclarationContext;
CParser.prototype.declaration = function() {
var localctx = new DeclarationContext(this, this._ctx, this.state);
this.enterRule(localctx, 50, CParser.RULE_declaration);
try {
this.state = 728;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,31,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 719;
this.specialFunctionDeclaration();
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 720;
this.declarationSpecifiers();
this.state = 721;
this.initDeclaratorList(0);
this.state = 722;
this.match(CParser.Semi);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 724;
this.declarationSpecifiers();
this.state = 725;
this.match(CParser.Semi);
break;
case 4:
this.enterOuterAlt(localctx, 4);
this.state = 727;
this.staticAssertDeclaration();
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function SpecialFunctionDeclarationContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_specialFunctionDeclaration;
return this;
}
SpecialFunctionDeclarationContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SpecialFunctionDeclarationContext.prototype.constructor = SpecialFunctionDeclarationContext;
SpecialFunctionDeclarationContext.prototype.declarationSpecifiers = function() {
return this.getTypedRuleContext(DeclarationSpecifiersContext,0);
};
SpecialFunctionDeclarationContext.prototype.directDeclarator = function() {
return this.getTypedRuleContext(DirectDeclaratorContext,0);
};
SpecialFunctionDeclarationContext.prototype.parameterTypeList = function() {
return this.getTypedRuleContext(ParameterTypeListContext,0);
};
SpecialFunctionDeclarationContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterSpecialFunctionDeclaration(this);
}
};
SpecialFunctionDeclarationContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitSpecialFunctionDeclaration(this);
}
};
CParser.SpecialFunctionDeclarationContext = SpecialFunctionDeclarationContext;
CParser.prototype.specialFunctionDeclaration = function() {
var localctx = new SpecialFunctionDeclarationContext(this, this._ctx, this.state);
this.enterRule(localctx, 52, CParser.RULE_specialFunctionDeclaration);
var _la = 0; // Token type
try {
this.enterOuterAlt(localctx, 1);
this.state = 730;
this.declarationSpecifiers();
this.state = 731;
this.directDeclarator(0);
this.state = 732;
this.match(CParser.LeftParen);
this.state = 734;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__3) | (1 << CParser.T__4) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__11) | (1 << CParser.Auto) | (1 << CParser.Char) | (1 << CParser.Const) | (1 << CParser.Double) | (1 << CParser.Enum) | (1 << CParser.Extern) | (1 << CParser.Float) | (1 << CParser.Inline))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (CParser.Int - 32)) | (1 << (CParser.Long - 32)) | (1 << (CParser.Register - 32)) | (1 << (CParser.Restrict - 32)) | (1 << (CParser.Short - 32)) | (1 << (CParser.Signed - 32)) | (1 << (CParser.Static - 32)) | (1 << (CParser.Struct - 32)) | (1 << (CParser.Typedef - 32)) | (1 << (CParser.Union - 32)) | (1 << (CParser.Unsigned - 32)) | (1 << (CParser.Void - 32)) | (1 << (CParser.Volatile - 32)) | (1 << (CParser.Alignas - 32)) | (1 << (CParser.Atomic - 32)) | (1 << (CParser.Bool - 32)) | (1 << (CParser.Complex - 32)) | (1 << (CParser.Noreturn - 32)) | (1 << (CParser.ThreadLocal - 32)))) !== 0) || _la===CParser.Identifier) {
this.state = 733;
this.parameterTypeList();
}
this.state = 736;
this.match(CParser.RightParen);
this.state = 737;
this.match(CParser.Semi);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function DeclarationSpecifiersContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_declarationSpecifiers;
return this;
}
DeclarationSpecifiersContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DeclarationSpecifiersContext.prototype.constructor = DeclarationSpecifiersContext;
DeclarationSpecifiersContext.prototype.declarationSpecifier = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTypedRuleContexts(DeclarationSpecifierContext);
} else {
return this.getTypedRuleContext(DeclarationSpecifierContext,i);
}
};
DeclarationSpecifiersContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterDeclarationSpecifiers(this);
}
};
DeclarationSpecifiersContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitDeclarationSpecifiers(this);
}
};
CParser.DeclarationSpecifiersContext = DeclarationSpecifiersContext;
CParser.prototype.declarationSpecifiers = function() {
var localctx = new DeclarationSpecifiersContext(this, this._ctx, this.state);
this.enterRule(localctx, 54, CParser.RULE_declarationSpecifiers);
try {
this.enterOuterAlt(localctx, 1);
this.state = 740;
this._errHandler.sync(this);
var _alt = 1;
do {
switch (_alt) {
case 1:
this.state = 739;
this.declarationSpecifier();
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
this.state = 742;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,33, this._ctx);
} while ( _alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER );
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function DeclarationSpecifiers2Context(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_declarationSpecifiers2;
return this;
}
DeclarationSpecifiers2Context.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DeclarationSpecifiers2Context.prototype.constructor = DeclarationSpecifiers2Context;
DeclarationSpecifiers2Context.prototype.declarationSpecifier = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTypedRuleContexts(DeclarationSpecifierContext);
} else {
return this.getTypedRuleContext(DeclarationSpecifierContext,i);
}
};
DeclarationSpecifiers2Context.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterDeclarationSpecifiers2(this);
}
};
DeclarationSpecifiers2Context.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitDeclarationSpecifiers2(this);
}
};
CParser.DeclarationSpecifiers2Context = DeclarationSpecifiers2Context;
CParser.prototype.declarationSpecifiers2 = function() {
var localctx = new DeclarationSpecifiers2Context(this, this._ctx, this.state);
this.enterRule(localctx, 56, CParser.RULE_declarationSpecifiers2);
try {
this.enterOuterAlt(localctx, 1);
this.state = 745;
this._errHandler.sync(this);
var _alt = 1;
do {
switch (_alt) {
case 1:
this.state = 744;
this.declarationSpecifier();
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
this.state = 747;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,34, this._ctx);
} while ( _alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER );
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function DeclarationSpecifierContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_declarationSpecifier;
return this;
}
DeclarationSpecifierContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DeclarationSpecifierContext.prototype.constructor = DeclarationSpecifierContext;
DeclarationSpecifierContext.prototype.storageClassSpecifier = function() {
return this.getTypedRuleContext(StorageClassSpecifierContext,0);
};
DeclarationSpecifierContext.prototype.typeSpecifier = function() {
return this.getTypedRuleContext(TypeSpecifierContext,0);
};
DeclarationSpecifierContext.prototype.typeQualifier = function() {
return this.getTypedRuleContext(TypeQualifierContext,0);
};
DeclarationSpecifierContext.prototype.functionSpecifier = function() {
return this.getTypedRuleContext(FunctionSpecifierContext,0);
};
DeclarationSpecifierContext.prototype.alignmentSpecifier = function() {
return this.getTypedRuleContext(AlignmentSpecifierContext,0);
};
DeclarationSpecifierContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterDeclarationSpecifier(this);
}
};
DeclarationSpecifierContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitDeclarationSpecifier(this);
}
};
CParser.DeclarationSpecifierContext = DeclarationSpecifierContext;
CParser.prototype.declarationSpecifier = function() {
var localctx = new DeclarationSpecifierContext(this, this._ctx, this.state);
this.enterRule(localctx, 58, CParser.RULE_declarationSpecifier);
try {
this.state = 754;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,35,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 749;
this.storageClassSpecifier();
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 750;
this.typeSpecifier();
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 751;
this.typeQualifier();
break;
case 4:
this.enterOuterAlt(localctx, 4);
this.state = 752;
this.functionSpecifier();
break;
case 5:
this.enterOuterAlt(localctx, 5);
this.state = 753;
this.alignmentSpecifier();
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function InitDeclaratorListContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_initDeclaratorList;
return this;
}
InitDeclaratorListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
InitDeclaratorListContext.prototype.constructor = InitDeclaratorListContext;
InitDeclaratorListContext.prototype.initDeclarator = function() {
return this.getTypedRuleContext(InitDeclaratorContext,0);
};
InitDeclaratorListContext.prototype.initDeclaratorList = function() {
return this.getTypedRuleContext(InitDeclaratorListContext,0);
};
InitDeclaratorListContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterInitDeclaratorList(this);
}
};
InitDeclaratorListContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitInitDeclaratorList(this);
}
};
CParser.prototype.initDeclaratorList = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new InitDeclaratorListContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 60;
this.enterRecursionRule(localctx, 60, CParser.RULE_initDeclaratorList, _p);
try {
this.enterOuterAlt(localctx, 1);
this.state = 757;
this.initDeclarator();
this._ctx.stop = this._input.LT(-1);
this.state = 764;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,36,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
localctx = new InitDeclaratorListContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_initDeclaratorList);
this.state = 759;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 760;
this.match(CParser.Comma);
this.state = 761;
this.initDeclarator();
}
this.state = 766;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,36,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function InitDeclaratorContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_initDeclarator;
return this;
}
InitDeclaratorContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
InitDeclaratorContext.prototype.constructor = InitDeclaratorContext;
InitDeclaratorContext.prototype.declarator = function() {
return this.getTypedRuleContext(DeclaratorContext,0);
};
InitDeclaratorContext.prototype.initializer = function() {
return this.getTypedRuleContext(InitializerContext,0);
};
InitDeclaratorContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterInitDeclarator(this);
}
};
InitDeclaratorContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitInitDeclarator(this);
}
};
CParser.InitDeclaratorContext = InitDeclaratorContext;
CParser.prototype.initDeclarator = function() {
var localctx = new InitDeclaratorContext(this, this._ctx, this.state);
this.enterRule(localctx, 62, CParser.RULE_initDeclarator);
try {
this.state = 772;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,37,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 767;
this.declarator();
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 768;
this.declarator();
this.state = 769;
this.match(CParser.Assign);
this.state = 770;
this.initializer();
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function StorageClassSpecifierContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_storageClassSpecifier;
return this;
}
StorageClassSpecifierContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StorageClassSpecifierContext.prototype.constructor = StorageClassSpecifierContext;
StorageClassSpecifierContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterStorageClassSpecifier(this);
}
};
StorageClassSpecifierContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitStorageClassSpecifier(this);
}
};
CParser.StorageClassSpecifierContext = StorageClassSpecifierContext;
CParser.prototype.storageClassSpecifier = function() {
var localctx = new StorageClassSpecifierContext(this, this._ctx, this.state);
this.enterRule(localctx, 64, CParser.RULE_storageClassSpecifier);
var _la = 0; // Token type
try {
this.enterOuterAlt(localctx, 1);
this.state = 774;
_la = this._input.LA(1);
if(!(_la===CParser.Auto || _la===CParser.Extern || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (CParser.Register - 34)) | (1 << (CParser.Static - 34)) | (1 << (CParser.Typedef - 34)) | (1 << (CParser.ThreadLocal - 34)))) !== 0))) {
this._errHandler.recoverInline(this);
}
else {
this._errHandler.reportMatch(this);
this.consume();
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function TypeSpecifierContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_typeSpecifier;
return this;
}
TypeSpecifierContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TypeSpecifierContext.prototype.constructor = TypeSpecifierContext;
TypeSpecifierContext.prototype.atomicTypeSpecifier = function() {
return this.getTypedRuleContext(AtomicTypeSpecifierContext,0);
};
TypeSpecifierContext.prototype.structOrUnionSpecifier = function() {
return this.getTypedRuleContext(StructOrUnionSpecifierContext,0);
};
TypeSpecifierContext.prototype.enumSpecifier = function() {
return this.getTypedRuleContext(EnumSpecifierContext,0);
};
TypeSpecifierContext.prototype.typedefName = function() {
return this.getTypedRuleContext(TypedefNameContext,0);
};
TypeSpecifierContext.prototype.constantExpression = function() {
return this.getTypedRuleContext(ConstantExpressionContext,0);
};
TypeSpecifierContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterTypeSpecifier(this);
}
};
TypeSpecifierContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitTypeSpecifier(this);
}
};
CParser.TypeSpecifierContext = TypeSpecifierContext;
CParser.prototype.typeSpecifier = function() {
var localctx = new TypeSpecifierContext(this, this._ctx, this.state);
this.enterRule(localctx, 66, CParser.RULE_typeSpecifier);
var _la = 0; // Token type
try {
this.state = 790;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.T__3:
case CParser.T__4:
case CParser.T__5:
case CParser.Char:
case CParser.Double:
case CParser.Float:
case CParser.Int:
case CParser.Long:
case CParser.Short:
case CParser.Signed:
case CParser.Unsigned:
case CParser.Void:
case CParser.Bool:
case CParser.Complex:
this.enterOuterAlt(localctx, 1);
this.state = 776;
_la = this._input.LA(1);
if(!((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__3) | (1 << CParser.T__4) | (1 << CParser.T__5) | (1 << CParser.Char) | (1 << CParser.Double) | (1 << CParser.Float))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (CParser.Int - 32)) | (1 << (CParser.Long - 32)) | (1 << (CParser.Short - 32)) | (1 << (CParser.Signed - 32)) | (1 << (CParser.Unsigned - 32)) | (1 << (CParser.Void - 32)) | (1 << (CParser.Bool - 32)) | (1 << (CParser.Complex - 32)))) !== 0))) {
this._errHandler.recoverInline(this);
}
else {
this._errHandler.reportMatch(this);
this.consume();
}
break;
case CParser.T__0:
this.enterOuterAlt(localctx, 2);
this.state = 777;
this.match(CParser.T__0);
this.state = 778;
this.match(CParser.LeftParen);
this.state = 779;
_la = this._input.LA(1);
if(!((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__3) | (1 << CParser.T__4) | (1 << CParser.T__5))) !== 0))) {
this._errHandler.recoverInline(this);
}
else {
this._errHandler.reportMatch(this);
this.consume();
}
this.state = 780;
this.match(CParser.RightParen);
break;
case CParser.Atomic:
this.enterOuterAlt(localctx, 3);
this.state = 781;
this.atomicTypeSpecifier();
break;
case CParser.Struct:
case CParser.Union:
this.enterOuterAlt(localctx, 4);
this.state = 782;
this.structOrUnionSpecifier();
break;
case CParser.Enum:
this.enterOuterAlt(localctx, 5);
this.state = 783;
this.enumSpecifier();
break;
case CParser.Identifier:
this.enterOuterAlt(localctx, 6);
this.state = 784;
this.typedefName();
break;
case CParser.T__6:
this.enterOuterAlt(localctx, 7);
this.state = 785;
this.match(CParser.T__6);
this.state = 786;
this.match(CParser.LeftParen);
this.state = 787;
this.constantExpression();
this.state = 788;
this.match(CParser.RightParen);
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function StructOrUnionSpecifierContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_structOrUnionSpecifier;
return this;
}
StructOrUnionSpecifierContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StructOrUnionSpecifierContext.prototype.constructor = StructOrUnionSpecifierContext;
StructOrUnionSpecifierContext.prototype.structOrUnion = function() {
return this.getTypedRuleContext(StructOrUnionContext,0);
};
StructOrUnionSpecifierContext.prototype.structDeclarationsBlock = function() {
return this.getTypedRuleContext(StructDeclarationsBlockContext,0);
};
StructOrUnionSpecifierContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
StructOrUnionSpecifierContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterStructOrUnionSpecifier(this);
}
};
StructOrUnionSpecifierContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitStructOrUnionSpecifier(this);
}
};
CParser.StructOrUnionSpecifierContext = StructOrUnionSpecifierContext;
CParser.prototype.structOrUnionSpecifier = function() {
var localctx = new StructOrUnionSpecifierContext(this, this._ctx, this.state);
this.enterRule(localctx, 68, CParser.RULE_structOrUnionSpecifier);
var _la = 0; // Token type
try {
this.state = 801;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,40,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 792;
this.structOrUnion();
this.state = 794;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Identifier) {
this.state = 793;
this.match(CParser.Identifier);
}
this.state = 796;
this.structDeclarationsBlock();
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 798;
this.structOrUnion();
this.state = 799;
this.match(CParser.Identifier);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function StructOrUnionContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_structOrUnion;
return this;
}
StructOrUnionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StructOrUnionContext.prototype.constructor = StructOrUnionContext;
StructOrUnionContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterStructOrUnion(this);
}
};
StructOrUnionContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitStructOrUnion(this);
}
};
CParser.StructOrUnionContext = StructOrUnionContext;
CParser.prototype.structOrUnion = function() {
var localctx = new StructOrUnionContext(this, this._ctx, this.state);
this.enterRule(localctx, 70, CParser.RULE_structOrUnion);
var _la = 0; // Token type
try {
this.enterOuterAlt(localctx, 1);
this.state = 803;
_la = this._input.LA(1);
if(!(_la===CParser.Struct || _la===CParser.Union)) {
this._errHandler.recoverInline(this);
}
else {
this._errHandler.reportMatch(this);
this.consume();
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function StructDeclarationsBlockContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_structDeclarationsBlock;
return this;
}
StructDeclarationsBlockContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StructDeclarationsBlockContext.prototype.constructor = StructDeclarationsBlockContext;
StructDeclarationsBlockContext.prototype.structDeclarationList = function() {
return this.getTypedRuleContext(StructDeclarationListContext,0);
};
StructDeclarationsBlockContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterStructDeclarationsBlock(this);
}
};
StructDeclarationsBlockContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitStructDeclarationsBlock(this);
}
};
CParser.StructDeclarationsBlockContext = StructDeclarationsBlockContext;
CParser.prototype.structDeclarationsBlock = function() {
var localctx = new StructDeclarationsBlockContext(this, this._ctx, this.state);
this.enterRule(localctx, 72, CParser.RULE_structDeclarationsBlock);
try {
this.enterOuterAlt(localctx, 1);
this.state = 805;
this.match(CParser.LeftBrace);
this.state = 806;
this.structDeclarationList(0);
this.state = 807;
this.match(CParser.RightBrace);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function StructDeclarationListContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_structDeclarationList;
return this;
}
StructDeclarationListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StructDeclarationListContext.prototype.constructor = StructDeclarationListContext;
StructDeclarationListContext.prototype.structDeclaration = function() {
return this.getTypedRuleContext(StructDeclarationContext,0);
};
StructDeclarationListContext.prototype.structDeclarationList = function() {
return this.getTypedRuleContext(StructDeclarationListContext,0);
};
StructDeclarationListContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterStructDeclarationList(this);
}
};
StructDeclarationListContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitStructDeclarationList(this);
}
};
CParser.prototype.structDeclarationList = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new StructDeclarationListContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 74;
this.enterRecursionRule(localctx, 74, CParser.RULE_structDeclarationList, _p);
try {
this.enterOuterAlt(localctx, 1);
this.state = 810;
this.structDeclaration();
this._ctx.stop = this._input.LT(-1);
this.state = 816;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,41,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
localctx = new StructDeclarationListContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_structDeclarationList);
this.state = 812;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 813;
this.structDeclaration();
}
this.state = 818;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,41,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function StructDeclarationContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_structDeclaration;
return this;
}
StructDeclarationContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StructDeclarationContext.prototype.constructor = StructDeclarationContext;
StructDeclarationContext.prototype.structDeclaratorList = function() {
return this.getTypedRuleContext(StructDeclaratorListContext,0);
};
StructDeclarationContext.prototype.specifierQualifierList = function() {
return this.getTypedRuleContext(SpecifierQualifierListContext,0);
};
StructDeclarationContext.prototype.staticAssertDeclaration = function() {
return this.getTypedRuleContext(StaticAssertDeclarationContext,0);
};
StructDeclarationContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterStructDeclaration(this);
}
};
StructDeclarationContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitStructDeclaration(this);
}
};
CParser.StructDeclarationContext = StructDeclarationContext;
CParser.prototype.structDeclaration = function() {
var localctx = new StructDeclarationContext(this, this._ctx, this.state);
this.enterRule(localctx, 76, CParser.RULE_structDeclaration);
try {
this.state = 826;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.T__0:
case CParser.T__3:
case CParser.T__4:
case CParser.T__5:
case CParser.T__6:
case CParser.Char:
case CParser.Const:
case CParser.Double:
case CParser.Enum:
case CParser.Float:
case CParser.Int:
case CParser.Long:
case CParser.Restrict:
case CParser.Short:
case CParser.Signed:
case CParser.Struct:
case CParser.Union:
case CParser.Unsigned:
case CParser.Void:
case CParser.Volatile:
case CParser.Atomic:
case CParser.Bool:
case CParser.Complex:
case CParser.LeftParen:
case CParser.Star:
case CParser.Caret:
case CParser.Colon:
case CParser.Identifier:
this.enterOuterAlt(localctx, 1);
this.state = 820;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,42,this._ctx);
if(la_===1) {
this.state = 819;
this.specifierQualifierList();
}
this.state = 822;
this.structDeclaratorList(0);
this.state = 823;
this.match(CParser.Semi);
break;
case CParser.StaticAssert:
this.enterOuterAlt(localctx, 2);
this.state = 825;
this.staticAssertDeclaration();
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function SpecifierQualifierListContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_specifierQualifierList;
return this;
}
SpecifierQualifierListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SpecifierQualifierListContext.prototype.constructor = SpecifierQualifierListContext;
SpecifierQualifierListContext.prototype.typeSpecifier = function() {
return this.getTypedRuleContext(TypeSpecifierContext,0);
};
SpecifierQualifierListContext.prototype.specifierQualifierList = function() {
return this.getTypedRuleContext(SpecifierQualifierListContext,0);
};
SpecifierQualifierListContext.prototype.typeQualifier = function() {
return this.getTypedRuleContext(TypeQualifierContext,0);
};
SpecifierQualifierListContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterSpecifierQualifierList(this);
}
};
SpecifierQualifierListContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitSpecifierQualifierList(this);
}
};
CParser.SpecifierQualifierListContext = SpecifierQualifierListContext;
CParser.prototype.specifierQualifierList = function() {
var localctx = new SpecifierQualifierListContext(this, this._ctx, this.state);
this.enterRule(localctx, 78, CParser.RULE_specifierQualifierList);
try {
this.state = 836;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,46,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 828;
this.typeSpecifier();
this.state = 830;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,44,this._ctx);
if(la_===1) {
this.state = 829;
this.specifierQualifierList();
}
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 832;
this.typeQualifier();
this.state = 834;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,45,this._ctx);
if(la_===1) {
this.state = 833;
this.specifierQualifierList();
}
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function StructDeclaratorListContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_structDeclaratorList;
return this;
}
StructDeclaratorListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StructDeclaratorListContext.prototype.constructor = StructDeclaratorListContext;
StructDeclaratorListContext.prototype.structDeclarator = function() {
return this.getTypedRuleContext(StructDeclaratorContext,0);
};
StructDeclaratorListContext.prototype.structDeclaratorList = function() {
return this.getTypedRuleContext(StructDeclaratorListContext,0);
};
StructDeclaratorListContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterStructDeclaratorList(this);
}
};
StructDeclaratorListContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitStructDeclaratorList(this);
}
};
CParser.prototype.structDeclaratorList = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new StructDeclaratorListContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 80;
this.enterRecursionRule(localctx, 80, CParser.RULE_structDeclaratorList, _p);
try {
this.enterOuterAlt(localctx, 1);
this.state = 839;
this.structDeclarator();
this._ctx.stop = this._input.LT(-1);
this.state = 846;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,47,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
localctx = new StructDeclaratorListContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_structDeclaratorList);
this.state = 841;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 842;
this.match(CParser.Comma);
this.state = 843;
this.structDeclarator();
}
this.state = 848;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,47,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function StructDeclaratorContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_structDeclarator;
return this;
}
StructDeclaratorContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StructDeclaratorContext.prototype.constructor = StructDeclaratorContext;
StructDeclaratorContext.prototype.declarator = function() {
return this.getTypedRuleContext(DeclaratorContext,0);
};
StructDeclaratorContext.prototype.constantExpression = function() {
return this.getTypedRuleContext(ConstantExpressionContext,0);
};
StructDeclaratorContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterStructDeclarator(this);
}
};
StructDeclaratorContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitStructDeclarator(this);
}
};
CParser.StructDeclaratorContext = StructDeclaratorContext;
CParser.prototype.structDeclarator = function() {
var localctx = new StructDeclaratorContext(this, this._ctx, this.state);
this.enterRule(localctx, 82, CParser.RULE_structDeclarator);
var _la = 0; // Token type
try {
this.state = 855;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,49,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 849;
this.declarator();
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 851;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(((((_la - 59)) & ~0x1f) == 0 && ((1 << (_la - 59)) & ((1 << (CParser.LeftParen - 59)) | (1 << (CParser.Star - 59)) | (1 << (CParser.Caret - 59)))) !== 0) || _la===CParser.Identifier) {
this.state = 850;
this.declarator();
}
this.state = 853;
this.match(CParser.Colon);
this.state = 854;
this.constantExpression();
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function EnumSpecifierContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_enumSpecifier;
return this;
}
EnumSpecifierContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
EnumSpecifierContext.prototype.constructor = EnumSpecifierContext;
EnumSpecifierContext.prototype.enumeratorList = function() {
return this.getTypedRuleContext(EnumeratorListContext,0);
};
EnumSpecifierContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
EnumSpecifierContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterEnumSpecifier(this);
}
};
EnumSpecifierContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitEnumSpecifier(this);
}
};
CParser.EnumSpecifierContext = EnumSpecifierContext;
CParser.prototype.enumSpecifier = function() {
var localctx = new EnumSpecifierContext(this, this._ctx, this.state);
this.enterRule(localctx, 84, CParser.RULE_enumSpecifier);
var _la = 0; // Token type
try {
this.state = 876;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,52,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 857;
this.match(CParser.Enum);
this.state = 859;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Identifier) {
this.state = 858;
this.match(CParser.Identifier);
}
this.state = 861;
this.match(CParser.LeftBrace);
this.state = 862;
this.enumeratorList(0);
this.state = 863;
this.match(CParser.RightBrace);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 865;
this.match(CParser.Enum);
this.state = 867;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Identifier) {
this.state = 866;
this.match(CParser.Identifier);
}
this.state = 869;
this.match(CParser.LeftBrace);
this.state = 870;
this.enumeratorList(0);
this.state = 871;
this.match(CParser.Comma);
this.state = 872;
this.match(CParser.RightBrace);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 874;
this.match(CParser.Enum);
this.state = 875;
this.match(CParser.Identifier);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function EnumeratorListContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_enumeratorList;
return this;
}
EnumeratorListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
EnumeratorListContext.prototype.constructor = EnumeratorListContext;
EnumeratorListContext.prototype.enumerator = function() {
return this.getTypedRuleContext(EnumeratorContext,0);
};
EnumeratorListContext.prototype.enumeratorList = function() {
return this.getTypedRuleContext(EnumeratorListContext,0);
};
EnumeratorListContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterEnumeratorList(this);
}
};
EnumeratorListContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitEnumeratorList(this);
}
};
CParser.prototype.enumeratorList = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new EnumeratorListContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 86;
this.enterRecursionRule(localctx, 86, CParser.RULE_enumeratorList, _p);
try {
this.enterOuterAlt(localctx, 1);
this.state = 879;
this.enumerator();
this._ctx.stop = this._input.LT(-1);
this.state = 886;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,53,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
localctx = new EnumeratorListContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_enumeratorList);
this.state = 881;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 882;
this.match(CParser.Comma);
this.state = 883;
this.enumerator();
}
this.state = 888;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,53,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function EnumeratorContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_enumerator;
return this;
}
EnumeratorContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
EnumeratorContext.prototype.constructor = EnumeratorContext;
EnumeratorContext.prototype.enumerationConstant = function() {
return this.getTypedRuleContext(EnumerationConstantContext,0);
};
EnumeratorContext.prototype.constantExpression = function() {
return this.getTypedRuleContext(ConstantExpressionContext,0);
};
EnumeratorContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterEnumerator(this);
}
};
EnumeratorContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitEnumerator(this);
}
};
CParser.EnumeratorContext = EnumeratorContext;
CParser.prototype.enumerator = function() {
var localctx = new EnumeratorContext(this, this._ctx, this.state);
this.enterRule(localctx, 88, CParser.RULE_enumerator);
try {
this.state = 894;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,54,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 889;
this.enumerationConstant();
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 890;
this.enumerationConstant();
this.state = 891;
this.match(CParser.Assign);
this.state = 892;
this.constantExpression();
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function EnumerationConstantContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_enumerationConstant;
return this;
}
EnumerationConstantContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
EnumerationConstantContext.prototype.constructor = EnumerationConstantContext;
EnumerationConstantContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
EnumerationConstantContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterEnumerationConstant(this);
}
};
EnumerationConstantContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitEnumerationConstant(this);
}
};
CParser.EnumerationConstantContext = EnumerationConstantContext;
CParser.prototype.enumerationConstant = function() {
var localctx = new EnumerationConstantContext(this, this._ctx, this.state);
this.enterRule(localctx, 90, CParser.RULE_enumerationConstant);
try {
this.enterOuterAlt(localctx, 1);
this.state = 896;
this.match(CParser.Identifier);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function AtomicTypeSpecifierContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_atomicTypeSpecifier;
return this;
}
AtomicTypeSpecifierContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AtomicTypeSpecifierContext.prototype.constructor = AtomicTypeSpecifierContext;
AtomicTypeSpecifierContext.prototype.typeName = function() {
return this.getTypedRuleContext(TypeNameContext,0);
};
AtomicTypeSpecifierContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterAtomicTypeSpecifier(this);
}
};
AtomicTypeSpecifierContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitAtomicTypeSpecifier(this);
}
};
CParser.AtomicTypeSpecifierContext = AtomicTypeSpecifierContext;
CParser.prototype.atomicTypeSpecifier = function() {
var localctx = new AtomicTypeSpecifierContext(this, this._ctx, this.state);
this.enterRule(localctx, 92, CParser.RULE_atomicTypeSpecifier);
try {
this.enterOuterAlt(localctx, 1);
this.state = 898;
this.match(CParser.Atomic);
this.state = 899;
this.match(CParser.LeftParen);
this.state = 900;
this.typeName();
this.state = 901;
this.match(CParser.RightParen);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function TypeQualifierContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_typeQualifier;
return this;
}
TypeQualifierContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TypeQualifierContext.prototype.constructor = TypeQualifierContext;
TypeQualifierContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterTypeQualifier(this);
}
};
TypeQualifierContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitTypeQualifier(this);
}
};
CParser.TypeQualifierContext = TypeQualifierContext;
CParser.prototype.typeQualifier = function() {
var localctx = new TypeQualifierContext(this, this._ctx, this.state);
this.enterRule(localctx, 94, CParser.RULE_typeQualifier);
var _la = 0; // Token type
try {
this.enterOuterAlt(localctx, 1);
this.state = 903;
_la = this._input.LA(1);
if(!(_la===CParser.Const || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (CParser.Restrict - 35)) | (1 << (CParser.Volatile - 35)) | (1 << (CParser.Atomic - 35)))) !== 0))) {
this._errHandler.recoverInline(this);
}
else {
this._errHandler.reportMatch(this);
this.consume();
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function FunctionSpecifierContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_functionSpecifier;
return this;
}
FunctionSpecifierContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
FunctionSpecifierContext.prototype.constructor = FunctionSpecifierContext;
FunctionSpecifierContext.prototype.gccAttributeSpecifier = function() {
return this.getTypedRuleContext(GccAttributeSpecifierContext,0);
};
FunctionSpecifierContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
FunctionSpecifierContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterFunctionSpecifier(this);
}
};
FunctionSpecifierContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitFunctionSpecifier(this);
}
};
CParser.FunctionSpecifierContext = FunctionSpecifierContext;
CParser.prototype.functionSpecifier = function() {
var localctx = new FunctionSpecifierContext(this, this._ctx, this.state);
this.enterRule(localctx, 96, CParser.RULE_functionSpecifier);
var _la = 0; // Token type
try {
this.state = 911;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.T__7:
case CParser.T__8:
case CParser.Inline:
case CParser.Noreturn:
this.enterOuterAlt(localctx, 1);
this.state = 905;
_la = this._input.LA(1);
if(!((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.Inline))) !== 0) || _la===CParser.Noreturn)) {
this._errHandler.recoverInline(this);
}
else {
this._errHandler.reportMatch(this);
this.consume();
}
break;
case CParser.T__11:
this.enterOuterAlt(localctx, 2);
this.state = 906;
this.gccAttributeSpecifier();
break;
case CParser.T__9:
this.enterOuterAlt(localctx, 3);
this.state = 907;
this.match(CParser.T__9);
this.state = 908;
this.match(CParser.LeftParen);
this.state = 909;
this.match(CParser.Identifier);
this.state = 910;
this.match(CParser.RightParen);
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function AlignmentSpecifierContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_alignmentSpecifier;
return this;
}
AlignmentSpecifierContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AlignmentSpecifierContext.prototype.constructor = AlignmentSpecifierContext;
AlignmentSpecifierContext.prototype.typeName = function() {
return this.getTypedRuleContext(TypeNameContext,0);
};
AlignmentSpecifierContext.prototype.constantExpression = function() {
return this.getTypedRuleContext(ConstantExpressionContext,0);
};
AlignmentSpecifierContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterAlignmentSpecifier(this);
}
};
AlignmentSpecifierContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitAlignmentSpecifier(this);
}
};
CParser.AlignmentSpecifierContext = AlignmentSpecifierContext;
CParser.prototype.alignmentSpecifier = function() {
var localctx = new AlignmentSpecifierContext(this, this._ctx, this.state);
this.enterRule(localctx, 98, CParser.RULE_alignmentSpecifier);
try {
this.state = 923;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,56,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 913;
this.match(CParser.Alignas);
this.state = 914;
this.match(CParser.LeftParen);
this.state = 915;
this.typeName();
this.state = 916;
this.match(CParser.RightParen);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 918;
this.match(CParser.Alignas);
this.state = 919;
this.match(CParser.LeftParen);
this.state = 920;
this.constantExpression();
this.state = 921;
this.match(CParser.RightParen);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function DeclaratorContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_declarator;
return this;
}
DeclaratorContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DeclaratorContext.prototype.constructor = DeclaratorContext;
DeclaratorContext.prototype.directDeclarator = function() {
return this.getTypedRuleContext(DirectDeclaratorContext,0);
};
DeclaratorContext.prototype.gccDeclaratorExtension = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTypedRuleContexts(GccDeclaratorExtensionContext);
} else {
return this.getTypedRuleContext(GccDeclaratorExtensionContext,i);
}
};
DeclaratorContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterDeclarator(this);
}
};
DeclaratorContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitDeclarator(this);
}
};
CParser.DeclaratorContext = DeclaratorContext;
CParser.prototype.declarator = function() {
var localctx = new DeclaratorContext(this, this._ctx, this.state);
this.enterRule(localctx, 100, CParser.RULE_declarator);
try {
this.enterOuterAlt(localctx, 1);
this.state = 925;
this.directDeclarator(0);
this.state = 929;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,57,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
this.state = 926;
this.gccDeclaratorExtension();
}
this.state = 931;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,57,this._ctx);
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function PointerDeclaratorContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_pointerDeclarator;
return this;
}
PointerDeclaratorContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
PointerDeclaratorContext.prototype.constructor = PointerDeclaratorContext;
PointerDeclaratorContext.prototype.pointer = function() {
return this.getTypedRuleContext(PointerContext,0);
};
PointerDeclaratorContext.prototype.pointerDeclarator = function() {
return this.getTypedRuleContext(PointerDeclaratorContext,0);
};
PointerDeclaratorContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
PointerDeclaratorContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterPointerDeclarator(this);
}
};
PointerDeclaratorContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitPointerDeclarator(this);
}
};
CParser.PointerDeclaratorContext = PointerDeclaratorContext;
CParser.prototype.pointerDeclarator = function() {
var localctx = new PointerDeclaratorContext(this, this._ctx, this.state);
this.enterRule(localctx, 102, CParser.RULE_pointerDeclarator);
try {
this.state = 936;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.Star:
case CParser.Caret:
this.enterOuterAlt(localctx, 1);
this.state = 932;
this.pointer();
this.state = 933;
this.pointerDeclarator();
break;
case CParser.Identifier:
this.enterOuterAlt(localctx, 2);
this.state = 935;
this.match(CParser.Identifier);
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function DirectDeclaratorContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_directDeclarator;
return this;
}
DirectDeclaratorContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DirectDeclaratorContext.prototype.constructor = DirectDeclaratorContext;
DirectDeclaratorContext.prototype.pointerDeclarator = function() {
return this.getTypedRuleContext(PointerDeclaratorContext,0);
};
DirectDeclaratorContext.prototype.declarator = function() {
return this.getTypedRuleContext(DeclaratorContext,0);
};
DirectDeclaratorContext.prototype.directDeclarator = function() {
return this.getTypedRuleContext(DirectDeclaratorContext,0);
};
DirectDeclaratorContext.prototype.typeQualifierList = function() {
return this.getTypedRuleContext(TypeQualifierListContext,0);
};
DirectDeclaratorContext.prototype.assignmentExpression = function() {
return this.getTypedRuleContext(AssignmentExpressionContext,0);
};
DirectDeclaratorContext.prototype.parameterTypeList = function() {
return this.getTypedRuleContext(ParameterTypeListContext,0);
};
DirectDeclaratorContext.prototype.identifierList = function() {
return this.getTypedRuleContext(IdentifierListContext,0);
};
DirectDeclaratorContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterDirectDeclarator(this);
}
};
DirectDeclaratorContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitDirectDeclarator(this);
}
};
CParser.prototype.directDeclarator = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new DirectDeclaratorContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 104;
this.enterRecursionRule(localctx, 104, CParser.RULE_directDeclarator, _p);
var _la = 0; // Token type
try {
this.enterOuterAlt(localctx, 1);
this.state = 944;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.Star:
case CParser.Caret:
case CParser.Identifier:
this.state = 939;
this.pointerDeclarator();
break;
case CParser.LeftParen:
this.state = 940;
this.match(CParser.LeftParen);
this.state = 941;
this.declarator();
this.state = 942;
this.match(CParser.RightParen);
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
this._ctx.stop = this._input.LT(-1);
this.state = 991;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,66,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
this.state = 989;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,65,this._ctx);
switch(la_) {
case 1:
localctx = new DirectDeclaratorContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_directDeclarator);
this.state = 946;
if (!( this.precpred(this._ctx, 6))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 6)");
}
this.state = 947;
this.match(CParser.LeftBracket);
this.state = 949;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Const || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (CParser.Restrict - 35)) | (1 << (CParser.Volatile - 35)) | (1 << (CParser.Atomic - 35)))) !== 0)) {
this.state = 948;
this.typeQualifierList(0);
}
this.state = 952;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 951;
this.assignmentExpression();
}
this.state = 954;
this.match(CParser.RightBracket);
break;
case 2:
localctx = new DirectDeclaratorContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_directDeclarator);
this.state = 955;
if (!( this.precpred(this._ctx, 5))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 5)");
}
this.state = 956;
this.match(CParser.LeftBracket);
this.state = 957;
this.match(CParser.Static);
this.state = 959;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Const || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (CParser.Restrict - 35)) | (1 << (CParser.Volatile - 35)) | (1 << (CParser.Atomic - 35)))) !== 0)) {
this.state = 958;
this.typeQualifierList(0);
}
this.state = 961;
this.assignmentExpression();
this.state = 962;
this.match(CParser.RightBracket);
break;
case 3:
localctx = new DirectDeclaratorContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_directDeclarator);
this.state = 964;
if (!( this.precpred(this._ctx, 4))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 4)");
}
this.state = 965;
this.match(CParser.LeftBracket);
this.state = 966;
this.typeQualifierList(0);
this.state = 967;
this.match(CParser.Static);
this.state = 968;
this.assignmentExpression();
this.state = 969;
this.match(CParser.RightBracket);
break;
case 4:
localctx = new DirectDeclaratorContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_directDeclarator);
this.state = 971;
if (!( this.precpred(this._ctx, 3))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)");
}
this.state = 972;
this.match(CParser.LeftBracket);
this.state = 974;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Const || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (CParser.Restrict - 35)) | (1 << (CParser.Volatile - 35)) | (1 << (CParser.Atomic - 35)))) !== 0)) {
this.state = 973;
this.typeQualifierList(0);
}
this.state = 976;
this.match(CParser.Star);
this.state = 977;
this.match(CParser.RightBracket);
break;
case 5:
localctx = new DirectDeclaratorContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_directDeclarator);
this.state = 978;
if (!( this.precpred(this._ctx, 2))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)");
}
this.state = 979;
this.match(CParser.LeftParen);
this.state = 980;
this.parameterTypeList();
this.state = 981;
this.match(CParser.RightParen);
break;
case 6:
localctx = new DirectDeclaratorContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_directDeclarator);
this.state = 983;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 984;
this.match(CParser.LeftParen);
this.state = 986;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Identifier) {
this.state = 985;
this.identifierList(0);
}
this.state = 988;
this.match(CParser.RightParen);
break;
}
}
this.state = 993;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,66,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function GccDeclaratorExtensionContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_gccDeclaratorExtension;
return this;
}
GccDeclaratorExtensionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
GccDeclaratorExtensionContext.prototype.constructor = GccDeclaratorExtensionContext;
GccDeclaratorExtensionContext.prototype.StringLiteral = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTokens(CParser.StringLiteral);
} else {
return this.getToken(CParser.StringLiteral, i);
}
};
GccDeclaratorExtensionContext.prototype.gccAttributeSpecifier = function() {
return this.getTypedRuleContext(GccAttributeSpecifierContext,0);
};
GccDeclaratorExtensionContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterGccDeclaratorExtension(this);
}
};
GccDeclaratorExtensionContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitGccDeclaratorExtension(this);
}
};
CParser.GccDeclaratorExtensionContext = GccDeclaratorExtensionContext;
CParser.prototype.gccDeclaratorExtension = function() {
var localctx = new GccDeclaratorExtensionContext(this, this._ctx, this.state);
this.enterRule(localctx, 106, CParser.RULE_gccDeclaratorExtension);
var _la = 0; // Token type
try {
this.state = 1003;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.T__10:
this.enterOuterAlt(localctx, 1);
this.state = 994;
this.match(CParser.T__10);
this.state = 995;
this.match(CParser.LeftParen);
this.state = 997;
this._errHandler.sync(this);
_la = this._input.LA(1);
do {
this.state = 996;
this.match(CParser.StringLiteral);
this.state = 999;
this._errHandler.sync(this);
_la = this._input.LA(1);
} while(_la===CParser.StringLiteral);
this.state = 1001;
this.match(CParser.RightParen);
break;
case CParser.T__11:
this.enterOuterAlt(localctx, 2);
this.state = 1002;
this.gccAttributeSpecifier();
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function GccAttributeSpecifierContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_gccAttributeSpecifier;
return this;
}
GccAttributeSpecifierContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
GccAttributeSpecifierContext.prototype.constructor = GccAttributeSpecifierContext;
GccAttributeSpecifierContext.prototype.gccAttributeList = function() {
return this.getTypedRuleContext(GccAttributeListContext,0);
};
GccAttributeSpecifierContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterGccAttributeSpecifier(this);
}
};
GccAttributeSpecifierContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitGccAttributeSpecifier(this);
}
};
CParser.GccAttributeSpecifierContext = GccAttributeSpecifierContext;
CParser.prototype.gccAttributeSpecifier = function() {
var localctx = new GccAttributeSpecifierContext(this, this._ctx, this.state);
this.enterRule(localctx, 108, CParser.RULE_gccAttributeSpecifier);
try {
this.enterOuterAlt(localctx, 1);
this.state = 1005;
this.match(CParser.T__11);
this.state = 1006;
this.match(CParser.LeftParen);
this.state = 1007;
this.match(CParser.LeftParen);
this.state = 1008;
this.gccAttributeList();
this.state = 1009;
this.match(CParser.RightParen);
this.state = 1010;
this.match(CParser.RightParen);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function GccAttributeListContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_gccAttributeList;
return this;
}
GccAttributeListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
GccAttributeListContext.prototype.constructor = GccAttributeListContext;
GccAttributeListContext.prototype.gccAttribute = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTypedRuleContexts(GccAttributeContext);
} else {
return this.getTypedRuleContext(GccAttributeContext,i);
}
};
GccAttributeListContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterGccAttributeList(this);
}
};
GccAttributeListContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitGccAttributeList(this);
}
};
CParser.GccAttributeListContext = GccAttributeListContext;
CParser.prototype.gccAttributeList = function() {
var localctx = new GccAttributeListContext(this, this._ctx, this.state);
this.enterRule(localctx, 110, CParser.RULE_gccAttributeList);
var _la = 0; // Token type
try {
this.state = 1021;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,70,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1012;
this.gccAttribute();
this.state = 1017;
this._errHandler.sync(this);
_la = this._input.LA(1);
while(_la===CParser.Comma) {
this.state = 1013;
this.match(CParser.Comma);
this.state = 1014;
this.gccAttribute();
this.state = 1019;
this._errHandler.sync(this);
_la = this._input.LA(1);
}
break;
case 2:
this.enterOuterAlt(localctx, 2);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function GccAttributeContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_gccAttribute;
return this;
}
GccAttributeContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
GccAttributeContext.prototype.constructor = GccAttributeContext;
GccAttributeContext.prototype.argumentExpressionList = function() {
return this.getTypedRuleContext(ArgumentExpressionListContext,0);
};
GccAttributeContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterGccAttribute(this);
}
};
GccAttributeContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitGccAttribute(this);
}
};
CParser.GccAttributeContext = GccAttributeContext;
CParser.prototype.gccAttribute = function() {
var localctx = new GccAttributeContext(this, this._ctx, this.state);
this.enterRule(localctx, 112, CParser.RULE_gccAttribute);
var _la = 0; // Token type
try {
this.state = 1032;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.T__0:
case CParser.T__1:
case CParser.T__2:
case CParser.T__3:
case CParser.T__4:
case CParser.T__5:
case CParser.T__6:
case CParser.T__7:
case CParser.T__8:
case CParser.T__9:
case CParser.T__10:
case CParser.T__11:
case CParser.T__12:
case CParser.T__13:
case CParser.Auto:
case CParser.Break:
case CParser.Case:
case CParser.Char:
case CParser.Const:
case CParser.Continue:
case CParser.Default:
case CParser.Do:
case CParser.Double:
case CParser.Else:
case CParser.Enum:
case CParser.Extern:
case CParser.Float:
case CParser.For:
case CParser.Goto:
case CParser.If:
case CParser.Inline:
case CParser.Int:
case CParser.Long:
case CParser.Register:
case CParser.Restrict:
case CParser.Return:
case CParser.Short:
case CParser.Signed:
case CParser.Sizeof:
case CParser.Static:
case CParser.Struct:
case CParser.Switch:
case CParser.Typedef:
case CParser.Union:
case CParser.Unsigned:
case CParser.Void:
case CParser.Volatile:
case CParser.While:
case CParser.Alignas:
case CParser.Alignof:
case CParser.Atomic:
case CParser.Bool:
case CParser.Complex:
case CParser.Generic:
case CParser.Imaginary:
case CParser.Noreturn:
case CParser.StaticAssert:
case CParser.ThreadLocal:
case CParser.LeftBracket:
case CParser.RightBracket:
case CParser.LeftBrace:
case CParser.RightBrace:
case CParser.Less:
case CParser.LessEqual:
case CParser.Greater:
case CParser.GreaterEqual:
case CParser.LeftShift:
case CParser.RightShift:
case CParser.Plus:
case CParser.PlusPlus:
case CParser.Minus:
case CParser.MinusMinus:
case CParser.Star:
case CParser.Div:
case CParser.Mod:
case CParser.And:
case CParser.Or:
case CParser.AndAnd:
case CParser.OrOr:
case CParser.Caret:
case CParser.Not:
case CParser.Tilde:
case CParser.Question:
case CParser.Colon:
case CParser.Semi:
case CParser.Assign:
case CParser.StarAssign:
case CParser.DivAssign:
case CParser.ModAssign:
case CParser.PlusAssign:
case CParser.MinusAssign:
case CParser.LeftShiftAssign:
case CParser.RightShiftAssign:
case CParser.AndAssign:
case CParser.XorAssign:
case CParser.OrAssign:
case CParser.Equal:
case CParser.NotEqual:
case CParser.Arrow:
case CParser.Dot:
case CParser.Ellipsis:
case CParser.Identifier:
case CParser.Constant:
case CParser.StringLiteral:
case CParser.Directive:
case CParser.Whitespace:
case CParser.Newline:
case CParser.BlockComment:
case CParser.LineComment:
this.enterOuterAlt(localctx, 1);
this.state = 1023;
_la = this._input.LA(1);
if(_la<=0 || ((((_la - 59)) & ~0x1f) == 0 && ((1 << (_la - 59)) & ((1 << (CParser.LeftParen - 59)) | (1 << (CParser.RightParen - 59)) | (1 << (CParser.Comma - 59)))) !== 0)) {
this._errHandler.recoverInline(this);
}
else {
this._errHandler.reportMatch(this);
this.consume();
}
this.state = 1029;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.LeftParen) {
this.state = 1024;
this.match(CParser.LeftParen);
this.state = 1026;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 1025;
this.argumentExpressionList(0);
}
this.state = 1028;
this.match(CParser.RightParen);
}
break;
case CParser.EOF:
case CParser.RightParen:
case CParser.Comma:
this.enterOuterAlt(localctx, 2);
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function NestedParenthesesBlockContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_nestedParenthesesBlock;
return this;
}
NestedParenthesesBlockContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
NestedParenthesesBlockContext.prototype.constructor = NestedParenthesesBlockContext;
NestedParenthesesBlockContext.prototype.nestedParenthesesBlock = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTypedRuleContexts(NestedParenthesesBlockContext);
} else {
return this.getTypedRuleContext(NestedParenthesesBlockContext,i);
}
};
NestedParenthesesBlockContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterNestedParenthesesBlock(this);
}
};
NestedParenthesesBlockContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitNestedParenthesesBlock(this);
}
};
CParser.NestedParenthesesBlockContext = NestedParenthesesBlockContext;
CParser.prototype.nestedParenthesesBlock = function() {
var localctx = new NestedParenthesesBlockContext(this, this._ctx, this.state);
this.enterRule(localctx, 114, CParser.RULE_nestedParenthesesBlock);
var _la = 0; // Token type
try {
this.enterOuterAlt(localctx, 1);
this.state = 1041;
this._errHandler.sync(this);
_la = this._input.LA(1);
while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2) | (1 << CParser.T__3) | (1 << CParser.T__4) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__10) | (1 << CParser.T__11) | (1 << CParser.T__12) | (1 << CParser.T__13) | (1 << CParser.Auto) | (1 << CParser.Break) | (1 << CParser.Case) | (1 << CParser.Char) | (1 << CParser.Const) | (1 << CParser.Continue) | (1 << CParser.Default) | (1 << CParser.Do) | (1 << CParser.Double) | (1 << CParser.Else) | (1 << CParser.Enum) | (1 << CParser.Extern) | (1 << CParser.Float) | (1 << CParser.For) | (1 << CParser.Goto) | (1 << CParser.If) | (1 << CParser.Inline))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (CParser.Int - 32)) | (1 << (CParser.Long - 32)) | (1 << (CParser.Register - 32)) | (1 << (CParser.Restrict - 32)) | (1 << (CParser.Return - 32)) | (1 << (CParser.Short - 32)) | (1 << (CParser.Signed - 32)) | (1 << (CParser.Sizeof - 32)) | (1 << (CParser.Static - 32)) | (1 << (CParser.Struct - 32)) | (1 << (CParser.Switch - 32)) | (1 << (CParser.Typedef - 32)) | (1 << (CParser.Union - 32)) | (1 << (CParser.Unsigned - 32)) | (1 << (CParser.Void - 32)) | (1 << (CParser.Volatile - 32)) | (1 << (CParser.While - 32)) | (1 << (CParser.Alignas - 32)) | (1 << (CParser.Alignof - 32)) | (1 << (CParser.Atomic - 32)) | (1 << (CParser.Bool - 32)) | (1 << (CParser.Complex - 32)) | (1 << (CParser.Generic - 32)) | (1 << (CParser.Imaginary - 32)) | (1 << (CParser.Noreturn - 32)) | (1 << (CParser.StaticAssert - 32)) | (1 << (CParser.ThreadLocal - 32)) | (1 << (CParser.LeftParen - 32)) | (1 << (CParser.LeftBracket - 32)) | (1 << (CParser.RightBracket - 32)) | (1 << (CParser.LeftBrace - 32)))) !== 0) || ((((_la - 64)) & ~0x1f) == 0 && ((1 << (_la - 64)) & ((1 << (CParser.RightBrace - 64)) | (1 << (CParser.Less - 64)) | (1 << (CParser.LessEqual - 64)) | (1 << (CParser.Greater - 64)) | (1 << (CParser.GreaterEqual - 64)) | (1 << (CParser.LeftShift - 64)) | (1 << (CParser.RightShift - 64)) | (1 << (CParser.Plus - 64)) | (1 << (CParser.PlusPlus - 64)) | (1 << (CParser.Minus - 64)) | (1 << (CParser.MinusMinus - 64)) | (1 << (CParser.Star - 64)) | (1 << (CParser.Div - 64)) | (1 << (CParser.Mod - 64)) | (1 << (CParser.And - 64)) | (1 << (CParser.Or - 64)) | (1 << (CParser.AndAnd - 64)) | (1 << (CParser.OrOr - 64)) | (1 << (CParser.Caret - 64)) | (1 << (CParser.Not - 64)) | (1 << (CParser.Tilde - 64)) | (1 << (CParser.Question - 64)) | (1 << (CParser.Colon - 64)) | (1 << (CParser.Semi - 64)) | (1 << (CParser.Comma - 64)) | (1 << (CParser.Assign - 64)) | (1 << (CParser.StarAssign - 64)) | (1 << (CParser.DivAssign - 64)) | (1 << (CParser.ModAssign - 64)) | (1 << (CParser.PlusAssign - 64)) | (1 << (CParser.MinusAssign - 64)) | (1 << (CParser.LeftShiftAssign - 64)))) !== 0) || ((((_la - 96)) & ~0x1f) == 0 && ((1 << (_la - 96)) & ((1 << (CParser.RightShiftAssign - 96)) | (1 << (CParser.AndAssign - 96)) | (1 << (CParser.XorAssign - 96)) | (1 << (CParser.OrAssign - 96)) | (1 << (CParser.Equal - 96)) | (1 << (CParser.NotEqual - 96)) | (1 << (CParser.Arrow - 96)) | (1 << (CParser.Dot - 96)) | (1 << (CParser.Ellipsis - 96)) | (1 << (CParser.Identifier - 96)) | (1 << (CParser.Constant - 96)) | (1 << (CParser.StringLiteral - 96)) | (1 << (CParser.Directive - 96)) | (1 << (CParser.Whitespace - 96)) | (1 << (CParser.Newline - 96)) | (1 << (CParser.BlockComment - 96)) | (1 << (CParser.LineComment - 96)))) !== 0)) {
this.state = 1039;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.T__0:
case CParser.T__1:
case CParser.T__2:
case CParser.T__3:
case CParser.T__4:
case CParser.T__5:
case CParser.T__6:
case CParser.T__7:
case CParser.T__8:
case CParser.T__9:
case CParser.T__10:
case CParser.T__11:
case CParser.T__12:
case CParser.T__13:
case CParser.Auto:
case CParser.Break:
case CParser.Case:
case CParser.Char:
case CParser.Const:
case CParser.Continue:
case CParser.Default:
case CParser.Do:
case CParser.Double:
case CParser.Else:
case CParser.Enum:
case CParser.Extern:
case CParser.Float:
case CParser.For:
case CParser.Goto:
case CParser.If:
case CParser.Inline:
case CParser.Int:
case CParser.Long:
case CParser.Register:
case CParser.Restrict:
case CParser.Return:
case CParser.Short:
case CParser.Signed:
case CParser.Sizeof:
case CParser.Static:
case CParser.Struct:
case CParser.Switch:
case CParser.Typedef:
case CParser.Union:
case CParser.Unsigned:
case CParser.Void:
case CParser.Volatile:
case CParser.While:
case CParser.Alignas:
case CParser.Alignof:
case CParser.Atomic:
case CParser.Bool:
case CParser.Complex:
case CParser.Generic:
case CParser.Imaginary:
case CParser.Noreturn:
case CParser.StaticAssert:
case CParser.ThreadLocal:
case CParser.LeftBracket:
case CParser.RightBracket:
case CParser.LeftBrace:
case CParser.RightBrace:
case CParser.Less:
case CParser.LessEqual:
case CParser.Greater:
case CParser.GreaterEqual:
case CParser.LeftShift:
case CParser.RightShift:
case CParser.Plus:
case CParser.PlusPlus:
case CParser.Minus:
case CParser.MinusMinus:
case CParser.Star:
case CParser.Div:
case CParser.Mod:
case CParser.And:
case CParser.Or:
case CParser.AndAnd:
case CParser.OrOr:
case CParser.Caret:
case CParser.Not:
case CParser.Tilde:
case CParser.Question:
case CParser.Colon:
case CParser.Semi:
case CParser.Comma:
case CParser.Assign:
case CParser.StarAssign:
case CParser.DivAssign:
case CParser.ModAssign:
case CParser.PlusAssign:
case CParser.MinusAssign:
case CParser.LeftShiftAssign:
case CParser.RightShiftAssign:
case CParser.AndAssign:
case CParser.XorAssign:
case CParser.OrAssign:
case CParser.Equal:
case CParser.NotEqual:
case CParser.Arrow:
case CParser.Dot:
case CParser.Ellipsis:
case CParser.Identifier:
case CParser.Constant:
case CParser.StringLiteral:
case CParser.Directive:
case CParser.Whitespace:
case CParser.Newline:
case CParser.BlockComment:
case CParser.LineComment:
this.state = 1034;
_la = this._input.LA(1);
if(_la<=0 || _la===CParser.LeftParen || _la===CParser.RightParen) {
this._errHandler.recoverInline(this);
}
else {
this._errHandler.reportMatch(this);
this.consume();
}
break;
case CParser.LeftParen:
this.state = 1035;
this.match(CParser.LeftParen);
this.state = 1036;
this.nestedParenthesesBlock();
this.state = 1037;
this.match(CParser.RightParen);
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
this.state = 1043;
this._errHandler.sync(this);
_la = this._input.LA(1);
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function PointerContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_pointer;
return this;
}
PointerContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
PointerContext.prototype.constructor = PointerContext;
PointerContext.prototype.typeQualifierList = function() {
return this.getTypedRuleContext(TypeQualifierListContext,0);
};
PointerContext.prototype.pointer = function() {
return this.getTypedRuleContext(PointerContext,0);
};
PointerContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterPointer(this);
}
};
PointerContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitPointer(this);
}
};
CParser.PointerContext = PointerContext;
CParser.prototype.pointer = function() {
var localctx = new PointerContext(this, this._ctx, this.state);
this.enterRule(localctx, 116, CParser.RULE_pointer);
var _la = 0; // Token type
try {
this.state = 1062;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,80,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1044;
this.match(CParser.Star);
this.state = 1046;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,76,this._ctx);
if(la_===1) {
this.state = 1045;
this.typeQualifierList(0);
}
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1048;
this.match(CParser.Star);
this.state = 1050;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Const || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (CParser.Restrict - 35)) | (1 << (CParser.Volatile - 35)) | (1 << (CParser.Atomic - 35)))) !== 0)) {
this.state = 1049;
this.typeQualifierList(0);
}
this.state = 1052;
this.pointer();
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 1053;
this.match(CParser.Caret);
this.state = 1055;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,78,this._ctx);
if(la_===1) {
this.state = 1054;
this.typeQualifierList(0);
}
break;
case 4:
this.enterOuterAlt(localctx, 4);
this.state = 1057;
this.match(CParser.Caret);
this.state = 1059;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Const || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (CParser.Restrict - 35)) | (1 << (CParser.Volatile - 35)) | (1 << (CParser.Atomic - 35)))) !== 0)) {
this.state = 1058;
this.typeQualifierList(0);
}
this.state = 1061;
this.pointer();
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function TypeQualifierListContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_typeQualifierList;
return this;
}
TypeQualifierListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TypeQualifierListContext.prototype.constructor = TypeQualifierListContext;
TypeQualifierListContext.prototype.typeQualifier = function() {
return this.getTypedRuleContext(TypeQualifierContext,0);
};
TypeQualifierListContext.prototype.typeQualifierList = function() {
return this.getTypedRuleContext(TypeQualifierListContext,0);
};
TypeQualifierListContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterTypeQualifierList(this);
}
};
TypeQualifierListContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitTypeQualifierList(this);
}
};
CParser.prototype.typeQualifierList = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new TypeQualifierListContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 118;
this.enterRecursionRule(localctx, 118, CParser.RULE_typeQualifierList, _p);
try {
this.enterOuterAlt(localctx, 1);
this.state = 1065;
this.typeQualifier();
this._ctx.stop = this._input.LT(-1);
this.state = 1071;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,81,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
localctx = new TypeQualifierListContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_typeQualifierList);
this.state = 1067;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 1068;
this.typeQualifier();
}
this.state = 1073;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,81,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function ParameterTypeListContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_parameterTypeList;
return this;
}
ParameterTypeListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ParameterTypeListContext.prototype.constructor = ParameterTypeListContext;
ParameterTypeListContext.prototype.parameterList = function() {
return this.getTypedRuleContext(ParameterListContext,0);
};
ParameterTypeListContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterParameterTypeList(this);
}
};
ParameterTypeListContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitParameterTypeList(this);
}
};
CParser.ParameterTypeListContext = ParameterTypeListContext;
CParser.prototype.parameterTypeList = function() {
var localctx = new ParameterTypeListContext(this, this._ctx, this.state);
this.enterRule(localctx, 120, CParser.RULE_parameterTypeList);
try {
this.state = 1079;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,82,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1074;
this.parameterList(0);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1075;
this.parameterList(0);
this.state = 1076;
this.match(CParser.Comma);
this.state = 1077;
this.match(CParser.Ellipsis);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function ParameterListContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_parameterList;
return this;
}
ParameterListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ParameterListContext.prototype.constructor = ParameterListContext;
ParameterListContext.prototype.parameterDeclaration = function() {
return this.getTypedRuleContext(ParameterDeclarationContext,0);
};
ParameterListContext.prototype.parameterList = function() {
return this.getTypedRuleContext(ParameterListContext,0);
};
ParameterListContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterParameterList(this);
}
};
ParameterListContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitParameterList(this);
}
};
CParser.prototype.parameterList = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new ParameterListContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 122;
this.enterRecursionRule(localctx, 122, CParser.RULE_parameterList, _p);
try {
this.enterOuterAlt(localctx, 1);
this.state = 1082;
this.parameterDeclaration();
this._ctx.stop = this._input.LT(-1);
this.state = 1089;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,83,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
localctx = new ParameterListContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_parameterList);
this.state = 1084;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 1085;
this.match(CParser.Comma);
this.state = 1086;
this.parameterDeclaration();
}
this.state = 1091;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,83,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function ParameterDeclarationContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_parameterDeclaration;
return this;
}
ParameterDeclarationContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ParameterDeclarationContext.prototype.constructor = ParameterDeclarationContext;
ParameterDeclarationContext.prototype.declarationSpecifiers = function() {
return this.getTypedRuleContext(DeclarationSpecifiersContext,0);
};
ParameterDeclarationContext.prototype.declarator = function() {
return this.getTypedRuleContext(DeclaratorContext,0);
};
ParameterDeclarationContext.prototype.declarationSpecifiers2 = function() {
return this.getTypedRuleContext(DeclarationSpecifiers2Context,0);
};
ParameterDeclarationContext.prototype.abstractDeclarator = function() {
return this.getTypedRuleContext(AbstractDeclaratorContext,0);
};
ParameterDeclarationContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterParameterDeclaration(this);
}
};
ParameterDeclarationContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitParameterDeclaration(this);
}
};
CParser.ParameterDeclarationContext = ParameterDeclarationContext;
CParser.prototype.parameterDeclaration = function() {
var localctx = new ParameterDeclarationContext(this, this._ctx, this.state);
this.enterRule(localctx, 124, CParser.RULE_parameterDeclaration);
try {
this.state = 1099;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,85,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1092;
this.declarationSpecifiers();
this.state = 1093;
this.declarator();
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1095;
this.declarationSpecifiers2();
this.state = 1097;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,84,this._ctx);
if(la_===1) {
this.state = 1096;
this.abstractDeclarator();
}
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function IdentifierListContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_identifierList;
return this;
}
IdentifierListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
IdentifierListContext.prototype.constructor = IdentifierListContext;
IdentifierListContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
IdentifierListContext.prototype.identifierList = function() {
return this.getTypedRuleContext(IdentifierListContext,0);
};
IdentifierListContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterIdentifierList(this);
}
};
IdentifierListContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitIdentifierList(this);
}
};
CParser.prototype.identifierList = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new IdentifierListContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 126;
this.enterRecursionRule(localctx, 126, CParser.RULE_identifierList, _p);
try {
this.enterOuterAlt(localctx, 1);
this.state = 1102;
this.match(CParser.Identifier);
this._ctx.stop = this._input.LT(-1);
this.state = 1109;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,86,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
localctx = new IdentifierListContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_identifierList);
this.state = 1104;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 1105;
this.match(CParser.Comma);
this.state = 1106;
this.match(CParser.Identifier);
}
this.state = 1111;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,86,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function TypeNameContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_typeName;
return this;
}
TypeNameContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TypeNameContext.prototype.constructor = TypeNameContext;
TypeNameContext.prototype.specifierQualifierList = function() {
return this.getTypedRuleContext(SpecifierQualifierListContext,0);
};
TypeNameContext.prototype.abstractDeclarator = function() {
return this.getTypedRuleContext(AbstractDeclaratorContext,0);
};
TypeNameContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterTypeName(this);
}
};
TypeNameContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitTypeName(this);
}
};
CParser.TypeNameContext = TypeNameContext;
CParser.prototype.typeName = function() {
var localctx = new TypeNameContext(this, this._ctx, this.state);
this.enterRule(localctx, 128, CParser.RULE_typeName);
var _la = 0; // Token type
try {
this.enterOuterAlt(localctx, 1);
this.state = 1112;
this.specifierQualifierList();
this.state = 1114;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(((((_la - 59)) & ~0x1f) == 0 && ((1 << (_la - 59)) & ((1 << (CParser.LeftParen - 59)) | (1 << (CParser.LeftBracket - 59)) | (1 << (CParser.Star - 59)) | (1 << (CParser.Caret - 59)))) !== 0)) {
this.state = 1113;
this.abstractDeclarator();
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function AbstractDeclaratorContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_abstractDeclarator;
return this;
}
AbstractDeclaratorContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AbstractDeclaratorContext.prototype.constructor = AbstractDeclaratorContext;
AbstractDeclaratorContext.prototype.pointer = function() {
return this.getTypedRuleContext(PointerContext,0);
};
AbstractDeclaratorContext.prototype.directAbstractDeclarator = function() {
return this.getTypedRuleContext(DirectAbstractDeclaratorContext,0);
};
AbstractDeclaratorContext.prototype.gccDeclaratorExtension = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTypedRuleContexts(GccDeclaratorExtensionContext);
} else {
return this.getTypedRuleContext(GccDeclaratorExtensionContext,i);
}
};
AbstractDeclaratorContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterAbstractDeclarator(this);
}
};
AbstractDeclaratorContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitAbstractDeclarator(this);
}
};
CParser.AbstractDeclaratorContext = AbstractDeclaratorContext;
CParser.prototype.abstractDeclarator = function() {
var localctx = new AbstractDeclaratorContext(this, this._ctx, this.state);
this.enterRule(localctx, 130, CParser.RULE_abstractDeclarator);
var _la = 0; // Token type
try {
this.state = 1127;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,90,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1116;
this.pointer();
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1118;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Star || _la===CParser.Caret) {
this.state = 1117;
this.pointer();
}
this.state = 1120;
this.directAbstractDeclarator(0);
this.state = 1124;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,89,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
this.state = 1121;
this.gccDeclaratorExtension();
}
this.state = 1126;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,89,this._ctx);
}
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function DirectAbstractDeclaratorContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_directAbstractDeclarator;
return this;
}
DirectAbstractDeclaratorContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DirectAbstractDeclaratorContext.prototype.constructor = DirectAbstractDeclaratorContext;
DirectAbstractDeclaratorContext.prototype.abstractDeclarator = function() {
return this.getTypedRuleContext(AbstractDeclaratorContext,0);
};
DirectAbstractDeclaratorContext.prototype.gccDeclaratorExtension = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTypedRuleContexts(GccDeclaratorExtensionContext);
} else {
return this.getTypedRuleContext(GccDeclaratorExtensionContext,i);
}
};
DirectAbstractDeclaratorContext.prototype.typeQualifierList = function() {
return this.getTypedRuleContext(TypeQualifierListContext,0);
};
DirectAbstractDeclaratorContext.prototype.assignmentExpression = function() {
return this.getTypedRuleContext(AssignmentExpressionContext,0);
};
DirectAbstractDeclaratorContext.prototype.parameterTypeList = function() {
return this.getTypedRuleContext(ParameterTypeListContext,0);
};
DirectAbstractDeclaratorContext.prototype.directAbstractDeclarator = function() {
return this.getTypedRuleContext(DirectAbstractDeclaratorContext,0);
};
DirectAbstractDeclaratorContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterDirectAbstractDeclarator(this);
}
};
DirectAbstractDeclaratorContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitDirectAbstractDeclarator(this);
}
};
CParser.prototype.directAbstractDeclarator = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new DirectAbstractDeclaratorContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 132;
this.enterRecursionRule(localctx, 132, CParser.RULE_directAbstractDeclarator, _p);
var _la = 0; // Token type
try {
this.enterOuterAlt(localctx, 1);
this.state = 1175;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,97,this._ctx);
switch(la_) {
case 1:
this.state = 1130;
this.match(CParser.LeftParen);
this.state = 1131;
this.abstractDeclarator();
this.state = 1132;
this.match(CParser.RightParen);
this.state = 1136;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,91,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
this.state = 1133;
this.gccDeclaratorExtension();
}
this.state = 1138;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,91,this._ctx);
}
break;
case 2:
this.state = 1139;
this.match(CParser.LeftBracket);
this.state = 1141;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Const || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (CParser.Restrict - 35)) | (1 << (CParser.Volatile - 35)) | (1 << (CParser.Atomic - 35)))) !== 0)) {
this.state = 1140;
this.typeQualifierList(0);
}
this.state = 1144;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 1143;
this.assignmentExpression();
}
this.state = 1146;
this.match(CParser.RightBracket);
break;
case 3:
this.state = 1147;
this.match(CParser.LeftBracket);
this.state = 1148;
this.match(CParser.Static);
this.state = 1150;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Const || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (CParser.Restrict - 35)) | (1 << (CParser.Volatile - 35)) | (1 << (CParser.Atomic - 35)))) !== 0)) {
this.state = 1149;
this.typeQualifierList(0);
}
this.state = 1152;
this.assignmentExpression();
this.state = 1153;
this.match(CParser.RightBracket);
break;
case 4:
this.state = 1155;
this.match(CParser.LeftBracket);
this.state = 1156;
this.typeQualifierList(0);
this.state = 1157;
this.match(CParser.Static);
this.state = 1158;
this.assignmentExpression();
this.state = 1159;
this.match(CParser.RightBracket);
break;
case 5:
this.state = 1161;
this.match(CParser.LeftBracket);
this.state = 1162;
this.match(CParser.Star);
this.state = 1163;
this.match(CParser.RightBracket);
break;
case 6:
this.state = 1164;
this.match(CParser.LeftParen);
this.state = 1166;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__3) | (1 << CParser.T__4) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__11) | (1 << CParser.Auto) | (1 << CParser.Char) | (1 << CParser.Const) | (1 << CParser.Double) | (1 << CParser.Enum) | (1 << CParser.Extern) | (1 << CParser.Float) | (1 << CParser.Inline))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (CParser.Int - 32)) | (1 << (CParser.Long - 32)) | (1 << (CParser.Register - 32)) | (1 << (CParser.Restrict - 32)) | (1 << (CParser.Short - 32)) | (1 << (CParser.Signed - 32)) | (1 << (CParser.Static - 32)) | (1 << (CParser.Struct - 32)) | (1 << (CParser.Typedef - 32)) | (1 << (CParser.Union - 32)) | (1 << (CParser.Unsigned - 32)) | (1 << (CParser.Void - 32)) | (1 << (CParser.Volatile - 32)) | (1 << (CParser.Alignas - 32)) | (1 << (CParser.Atomic - 32)) | (1 << (CParser.Bool - 32)) | (1 << (CParser.Complex - 32)) | (1 << (CParser.Noreturn - 32)) | (1 << (CParser.ThreadLocal - 32)))) !== 0) || _la===CParser.Identifier) {
this.state = 1165;
this.parameterTypeList();
}
this.state = 1168;
this.match(CParser.RightParen);
this.state = 1172;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,96,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
this.state = 1169;
this.gccDeclaratorExtension();
}
this.state = 1174;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,96,this._ctx);
}
break;
}
this._ctx.stop = this._input.LT(-1);
this.state = 1220;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,104,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
this.state = 1218;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,103,this._ctx);
switch(la_) {
case 1:
localctx = new DirectAbstractDeclaratorContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_directAbstractDeclarator);
this.state = 1177;
if (!( this.precpred(this._ctx, 5))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 5)");
}
this.state = 1178;
this.match(CParser.LeftBracket);
this.state = 1180;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Const || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (CParser.Restrict - 35)) | (1 << (CParser.Volatile - 35)) | (1 << (CParser.Atomic - 35)))) !== 0)) {
this.state = 1179;
this.typeQualifierList(0);
}
this.state = 1183;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 1182;
this.assignmentExpression();
}
this.state = 1185;
this.match(CParser.RightBracket);
break;
case 2:
localctx = new DirectAbstractDeclaratorContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_directAbstractDeclarator);
this.state = 1186;
if (!( this.precpred(this._ctx, 4))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 4)");
}
this.state = 1187;
this.match(CParser.LeftBracket);
this.state = 1188;
this.match(CParser.Static);
this.state = 1190;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Const || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (CParser.Restrict - 35)) | (1 << (CParser.Volatile - 35)) | (1 << (CParser.Atomic - 35)))) !== 0)) {
this.state = 1189;
this.typeQualifierList(0);
}
this.state = 1192;
this.assignmentExpression();
this.state = 1193;
this.match(CParser.RightBracket);
break;
case 3:
localctx = new DirectAbstractDeclaratorContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_directAbstractDeclarator);
this.state = 1195;
if (!( this.precpred(this._ctx, 3))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)");
}
this.state = 1196;
this.match(CParser.LeftBracket);
this.state = 1197;
this.typeQualifierList(0);
this.state = 1198;
this.match(CParser.Static);
this.state = 1199;
this.assignmentExpression();
this.state = 1200;
this.match(CParser.RightBracket);
break;
case 4:
localctx = new DirectAbstractDeclaratorContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_directAbstractDeclarator);
this.state = 1202;
if (!( this.precpred(this._ctx, 2))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)");
}
this.state = 1203;
this.match(CParser.LeftBracket);
this.state = 1204;
this.match(CParser.Star);
this.state = 1205;
this.match(CParser.RightBracket);
break;
case 5:
localctx = new DirectAbstractDeclaratorContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_directAbstractDeclarator);
this.state = 1206;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 1207;
this.match(CParser.LeftParen);
this.state = 1209;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__3) | (1 << CParser.T__4) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__11) | (1 << CParser.Auto) | (1 << CParser.Char) | (1 << CParser.Const) | (1 << CParser.Double) | (1 << CParser.Enum) | (1 << CParser.Extern) | (1 << CParser.Float) | (1 << CParser.Inline))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (CParser.Int - 32)) | (1 << (CParser.Long - 32)) | (1 << (CParser.Register - 32)) | (1 << (CParser.Restrict - 32)) | (1 << (CParser.Short - 32)) | (1 << (CParser.Signed - 32)) | (1 << (CParser.Static - 32)) | (1 << (CParser.Struct - 32)) | (1 << (CParser.Typedef - 32)) | (1 << (CParser.Union - 32)) | (1 << (CParser.Unsigned - 32)) | (1 << (CParser.Void - 32)) | (1 << (CParser.Volatile - 32)) | (1 << (CParser.Alignas - 32)) | (1 << (CParser.Atomic - 32)) | (1 << (CParser.Bool - 32)) | (1 << (CParser.Complex - 32)) | (1 << (CParser.Noreturn - 32)) | (1 << (CParser.ThreadLocal - 32)))) !== 0) || _la===CParser.Identifier) {
this.state = 1208;
this.parameterTypeList();
}
this.state = 1211;
this.match(CParser.RightParen);
this.state = 1215;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,102,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
this.state = 1212;
this.gccDeclaratorExtension();
}
this.state = 1217;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,102,this._ctx);
}
break;
}
}
this.state = 1222;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,104,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function TypedefNameContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_typedefName;
return this;
}
TypedefNameContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TypedefNameContext.prototype.constructor = TypedefNameContext;
TypedefNameContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
TypedefNameContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterTypedefName(this);
}
};
TypedefNameContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitTypedefName(this);
}
};
CParser.TypedefNameContext = TypedefNameContext;
CParser.prototype.typedefName = function() {
var localctx = new TypedefNameContext(this, this._ctx, this.state);
this.enterRule(localctx, 134, CParser.RULE_typedefName);
try {
this.enterOuterAlt(localctx, 1);
this.state = 1223;
this.match(CParser.Identifier);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function InitializerContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_initializer;
return this;
}
InitializerContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
InitializerContext.prototype.constructor = InitializerContext;
InitializerContext.prototype.assignmentExpression = function() {
return this.getTypedRuleContext(AssignmentExpressionContext,0);
};
InitializerContext.prototype.initializerList = function() {
return this.getTypedRuleContext(InitializerListContext,0);
};
InitializerContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterInitializer(this);
}
};
InitializerContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitInitializer(this);
}
};
CParser.InitializerContext = InitializerContext;
CParser.prototype.initializer = function() {
var localctx = new InitializerContext(this, this._ctx, this.state);
this.enterRule(localctx, 136, CParser.RULE_initializer);
try {
this.state = 1235;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,105,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1225;
this.assignmentExpression();
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1226;
this.match(CParser.LeftBrace);
this.state = 1227;
this.initializerList(0);
this.state = 1228;
this.match(CParser.RightBrace);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 1230;
this.match(CParser.LeftBrace);
this.state = 1231;
this.initializerList(0);
this.state = 1232;
this.match(CParser.Comma);
this.state = 1233;
this.match(CParser.RightBrace);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function InitializerListContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_initializerList;
return this;
}
InitializerListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
InitializerListContext.prototype.constructor = InitializerListContext;
InitializerListContext.prototype.initializer = function() {
return this.getTypedRuleContext(InitializerContext,0);
};
InitializerListContext.prototype.designation = function() {
return this.getTypedRuleContext(DesignationContext,0);
};
InitializerListContext.prototype.initializerList = function() {
return this.getTypedRuleContext(InitializerListContext,0);
};
InitializerListContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterInitializerList(this);
}
};
InitializerListContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitInitializerList(this);
}
};
CParser.prototype.initializerList = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new InitializerListContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 138;
this.enterRecursionRule(localctx, 138, CParser.RULE_initializerList, _p);
var _la = 0; // Token type
try {
this.enterOuterAlt(localctx, 1);
this.state = 1239;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.LeftBracket || _la===CParser.Dot) {
this.state = 1238;
this.designation();
}
this.state = 1241;
this.initializer();
this._ctx.stop = this._input.LT(-1);
this.state = 1251;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,108,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
localctx = new InitializerListContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_initializerList);
this.state = 1243;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 1244;
this.match(CParser.Comma);
this.state = 1246;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.LeftBracket || _la===CParser.Dot) {
this.state = 1245;
this.designation();
}
this.state = 1248;
this.initializer();
}
this.state = 1253;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,108,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function DesignationContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_designation;
return this;
}
DesignationContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DesignationContext.prototype.constructor = DesignationContext;
DesignationContext.prototype.designatorList = function() {
return this.getTypedRuleContext(DesignatorListContext,0);
};
DesignationContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterDesignation(this);
}
};
DesignationContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitDesignation(this);
}
};
CParser.DesignationContext = DesignationContext;
CParser.prototype.designation = function() {
var localctx = new DesignationContext(this, this._ctx, this.state);
this.enterRule(localctx, 140, CParser.RULE_designation);
try {
this.enterOuterAlt(localctx, 1);
this.state = 1254;
this.designatorList(0);
this.state = 1255;
this.match(CParser.Assign);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function DesignatorListContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_designatorList;
return this;
}
DesignatorListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DesignatorListContext.prototype.constructor = DesignatorListContext;
DesignatorListContext.prototype.designator = function() {
return this.getTypedRuleContext(DesignatorContext,0);
};
DesignatorListContext.prototype.designatorList = function() {
return this.getTypedRuleContext(DesignatorListContext,0);
};
DesignatorListContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterDesignatorList(this);
}
};
DesignatorListContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitDesignatorList(this);
}
};
CParser.prototype.designatorList = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new DesignatorListContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 142;
this.enterRecursionRule(localctx, 142, CParser.RULE_designatorList, _p);
try {
this.enterOuterAlt(localctx, 1);
this.state = 1258;
this.designator();
this._ctx.stop = this._input.LT(-1);
this.state = 1264;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,109,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
localctx = new DesignatorListContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_designatorList);
this.state = 1260;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 1261;
this.designator();
}
this.state = 1266;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,109,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function DesignatorContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_designator;
return this;
}
DesignatorContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DesignatorContext.prototype.constructor = DesignatorContext;
DesignatorContext.prototype.constantExpression = function() {
return this.getTypedRuleContext(ConstantExpressionContext,0);
};
DesignatorContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
DesignatorContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterDesignator(this);
}
};
DesignatorContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitDesignator(this);
}
};
CParser.DesignatorContext = DesignatorContext;
CParser.prototype.designator = function() {
var localctx = new DesignatorContext(this, this._ctx, this.state);
this.enterRule(localctx, 144, CParser.RULE_designator);
try {
this.state = 1273;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.LeftBracket:
this.enterOuterAlt(localctx, 1);
this.state = 1267;
this.match(CParser.LeftBracket);
this.state = 1268;
this.constantExpression();
this.state = 1269;
this.match(CParser.RightBracket);
break;
case CParser.Dot:
this.enterOuterAlt(localctx, 2);
this.state = 1271;
this.match(CParser.Dot);
this.state = 1272;
this.match(CParser.Identifier);
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function StaticAssertDeclarationContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_staticAssertDeclaration;
return this;
}
StaticAssertDeclarationContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StaticAssertDeclarationContext.prototype.constructor = StaticAssertDeclarationContext;
StaticAssertDeclarationContext.prototype.constantExpression = function() {
return this.getTypedRuleContext(ConstantExpressionContext,0);
};
StaticAssertDeclarationContext.prototype.StringLiteral = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTokens(CParser.StringLiteral);
} else {
return this.getToken(CParser.StringLiteral, i);
}
};
StaticAssertDeclarationContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterStaticAssertDeclaration(this);
}
};
StaticAssertDeclarationContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitStaticAssertDeclaration(this);
}
};
CParser.StaticAssertDeclarationContext = StaticAssertDeclarationContext;
CParser.prototype.staticAssertDeclaration = function() {
var localctx = new StaticAssertDeclarationContext(this, this._ctx, this.state);
this.enterRule(localctx, 146, CParser.RULE_staticAssertDeclaration);
var _la = 0; // Token type
try {
this.enterOuterAlt(localctx, 1);
this.state = 1275;
this.match(CParser.StaticAssert);
this.state = 1276;
this.match(CParser.LeftParen);
this.state = 1277;
this.constantExpression();
this.state = 1278;
this.match(CParser.Comma);
this.state = 1280;
this._errHandler.sync(this);
_la = this._input.LA(1);
do {
this.state = 1279;
this.match(CParser.StringLiteral);
this.state = 1282;
this._errHandler.sync(this);
_la = this._input.LA(1);
} while(_la===CParser.StringLiteral);
this.state = 1284;
this.match(CParser.RightParen);
this.state = 1285;
this.match(CParser.Semi);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function StatementContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_statement;
return this;
}
StatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StatementContext.prototype.constructor = StatementContext;
StatementContext.prototype.labeledStatement = function() {
return this.getTypedRuleContext(LabeledStatementContext,0);
};
StatementContext.prototype.compoundStatement = function() {
return this.getTypedRuleContext(CompoundStatementContext,0);
};
StatementContext.prototype.expressionStatement = function() {
return this.getTypedRuleContext(ExpressionStatementContext,0);
};
StatementContext.prototype.selectionStatement = function() {
return this.getTypedRuleContext(SelectionStatementContext,0);
};
StatementContext.prototype.iterationStatement = function() {
return this.getTypedRuleContext(IterationStatementContext,0);
};
StatementContext.prototype.jumpStatement = function() {
return this.getTypedRuleContext(JumpStatementContext,0);
};
StatementContext.prototype.logicalOrExpression = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTypedRuleContexts(LogicalOrExpressionContext);
} else {
return this.getTypedRuleContext(LogicalOrExpressionContext,i);
}
};
StatementContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterStatement(this);
}
};
StatementContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitStatement(this);
}
};
CParser.StatementContext = StatementContext;
CParser.prototype.statement = function() {
var localctx = new StatementContext(this, this._ctx, this.state);
this.enterRule(localctx, 148, CParser.RULE_statement);
var _la = 0; // Token type
try {
this.state = 1324;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,117,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1287;
this.labeledStatement();
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1288;
this.compoundStatement();
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 1289;
this.expressionStatement();
break;
case 4:
this.enterOuterAlt(localctx, 4);
this.state = 1290;
this.selectionStatement();
break;
case 5:
this.enterOuterAlt(localctx, 5);
this.state = 1291;
this.iterationStatement();
break;
case 6:
this.enterOuterAlt(localctx, 6);
this.state = 1292;
this.jumpStatement();
break;
case 7:
this.enterOuterAlt(localctx, 7);
this.state = 1293;
_la = this._input.LA(1);
if(!(_la===CParser.T__10 || _la===CParser.T__12)) {
this._errHandler.recoverInline(this);
}
else {
this._errHandler.reportMatch(this);
this.consume();
}
this.state = 1294;
_la = this._input.LA(1);
if(!(_la===CParser.T__13 || _la===CParser.Volatile)) {
this._errHandler.recoverInline(this);
}
else {
this._errHandler.reportMatch(this);
this.consume();
}
this.state = 1295;
this.match(CParser.LeftParen);
this.state = 1304;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 1296;
this.logicalOrExpression(0);
this.state = 1301;
this._errHandler.sync(this);
_la = this._input.LA(1);
while(_la===CParser.Comma) {
this.state = 1297;
this.match(CParser.Comma);
this.state = 1298;
this.logicalOrExpression(0);
this.state = 1303;
this._errHandler.sync(this);
_la = this._input.LA(1);
}
}
this.state = 1319;
this._errHandler.sync(this);
_la = this._input.LA(1);
while(_la===CParser.Colon) {
this.state = 1306;
this.match(CParser.Colon);
this.state = 1315;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 1307;
this.logicalOrExpression(0);
this.state = 1312;
this._errHandler.sync(this);
_la = this._input.LA(1);
while(_la===CParser.Comma) {
this.state = 1308;
this.match(CParser.Comma);
this.state = 1309;
this.logicalOrExpression(0);
this.state = 1314;
this._errHandler.sync(this);
_la = this._input.LA(1);
}
}
this.state = 1321;
this._errHandler.sync(this);
_la = this._input.LA(1);
}
this.state = 1322;
this.match(CParser.RightParen);
this.state = 1323;
this.match(CParser.Semi);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function LabeledStatementContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_labeledStatement;
return this;
}
LabeledStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
LabeledStatementContext.prototype.constructor = LabeledStatementContext;
LabeledStatementContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
LabeledStatementContext.prototype.statement = function() {
return this.getTypedRuleContext(StatementContext,0);
};
LabeledStatementContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterLabeledStatement(this);
}
};
LabeledStatementContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitLabeledStatement(this);
}
};
CParser.LabeledStatementContext = LabeledStatementContext;
CParser.prototype.labeledStatement = function() {
var localctx = new LabeledStatementContext(this, this._ctx, this.state);
this.enterRule(localctx, 150, CParser.RULE_labeledStatement);
try {
this.enterOuterAlt(localctx, 1);
this.state = 1326;
this.match(CParser.Identifier);
this.state = 1327;
this.match(CParser.Colon);
this.state = 1328;
this.statement();
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function SwitchLabelContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_switchLabel;
return this;
}
SwitchLabelContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SwitchLabelContext.prototype.constructor = SwitchLabelContext;
SwitchLabelContext.prototype.constantExpression = function() {
return this.getTypedRuleContext(ConstantExpressionContext,0);
};
SwitchLabelContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterSwitchLabel(this);
}
};
SwitchLabelContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitSwitchLabel(this);
}
};
CParser.SwitchLabelContext = SwitchLabelContext;
CParser.prototype.switchLabel = function() {
var localctx = new SwitchLabelContext(this, this._ctx, this.state);
this.enterRule(localctx, 152, CParser.RULE_switchLabel);
try {
this.state = 1336;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.Case:
this.enterOuterAlt(localctx, 1);
this.state = 1330;
this.match(CParser.Case);
this.state = 1331;
this.constantExpression();
this.state = 1332;
this.match(CParser.Colon);
break;
case CParser.Default:
this.enterOuterAlt(localctx, 2);
this.state = 1334;
this.match(CParser.Default);
this.state = 1335;
this.match(CParser.Colon);
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function CompoundStatementContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_compoundStatement;
return this;
}
CompoundStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
CompoundStatementContext.prototype.constructor = CompoundStatementContext;
CompoundStatementContext.prototype.blockItemList = function() {
return this.getTypedRuleContext(BlockItemListContext,0);
};
CompoundStatementContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterCompoundStatement(this);
}
};
CompoundStatementContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitCompoundStatement(this);
}
};
CParser.CompoundStatementContext = CompoundStatementContext;
CParser.prototype.compoundStatement = function() {
var localctx = new CompoundStatementContext(this, this._ctx, this.state);
this.enterRule(localctx, 154, CParser.RULE_compoundStatement);
var _la = 0; // Token type
try {
this.enterOuterAlt(localctx, 1);
this.state = 1338;
this.match(CParser.LeftBrace);
this.state = 1340;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2) | (1 << CParser.T__3) | (1 << CParser.T__4) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__10) | (1 << CParser.T__11) | (1 << CParser.T__12) | (1 << CParser.Auto) | (1 << CParser.Break) | (1 << CParser.Char) | (1 << CParser.Const) | (1 << CParser.Continue) | (1 << CParser.Do) | (1 << CParser.Double) | (1 << CParser.Enum) | (1 << CParser.Extern) | (1 << CParser.Float) | (1 << CParser.For) | (1 << CParser.Goto) | (1 << CParser.If) | (1 << CParser.Inline))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (CParser.Int - 32)) | (1 << (CParser.Long - 32)) | (1 << (CParser.Register - 32)) | (1 << (CParser.Restrict - 32)) | (1 << (CParser.Return - 32)) | (1 << (CParser.Short - 32)) | (1 << (CParser.Signed - 32)) | (1 << (CParser.Sizeof - 32)) | (1 << (CParser.Static - 32)) | (1 << (CParser.Struct - 32)) | (1 << (CParser.Switch - 32)) | (1 << (CParser.Typedef - 32)) | (1 << (CParser.Union - 32)) | (1 << (CParser.Unsigned - 32)) | (1 << (CParser.Void - 32)) | (1 << (CParser.Volatile - 32)) | (1 << (CParser.While - 32)) | (1 << (CParser.Alignas - 32)) | (1 << (CParser.Alignof - 32)) | (1 << (CParser.Atomic - 32)) | (1 << (CParser.Bool - 32)) | (1 << (CParser.Complex - 32)) | (1 << (CParser.Generic - 32)) | (1 << (CParser.Noreturn - 32)) | (1 << (CParser.StaticAssert - 32)) | (1 << (CParser.ThreadLocal - 32)) | (1 << (CParser.LeftParen - 32)) | (1 << (CParser.LeftBrace - 32)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)) | (1 << (CParser.Semi - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 1339;
this.blockItemList(0);
}
this.state = 1342;
this.match(CParser.RightBrace);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function BlockItemListContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_blockItemList;
return this;
}
BlockItemListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
BlockItemListContext.prototype.constructor = BlockItemListContext;
BlockItemListContext.prototype.blockItem = function() {
return this.getTypedRuleContext(BlockItemContext,0);
};
BlockItemListContext.prototype.blockItemList = function() {
return this.getTypedRuleContext(BlockItemListContext,0);
};
BlockItemListContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterBlockItemList(this);
}
};
BlockItemListContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitBlockItemList(this);
}
};
CParser.prototype.blockItemList = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new BlockItemListContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 156;
this.enterRecursionRule(localctx, 156, CParser.RULE_blockItemList, _p);
try {
this.enterOuterAlt(localctx, 1);
this.state = 1345;
this.blockItem();
this._ctx.stop = this._input.LT(-1);
this.state = 1351;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,120,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
localctx = new BlockItemListContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_blockItemList);
this.state = 1347;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 1348;
this.blockItem();
}
this.state = 1353;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,120,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function BlockItemContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_blockItem;
return this;
}
BlockItemContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
BlockItemContext.prototype.constructor = BlockItemContext;
BlockItemContext.prototype.specialMethodCall = function() {
return this.getTypedRuleContext(SpecialMethodCallContext,0);
};
BlockItemContext.prototype.declaration = function() {
return this.getTypedRuleContext(DeclarationContext,0);
};
BlockItemContext.prototype.statement = function() {
return this.getTypedRuleContext(StatementContext,0);
};
BlockItemContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterBlockItem(this);
}
};
BlockItemContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitBlockItem(this);
}
};
CParser.BlockItemContext = BlockItemContext;
CParser.prototype.blockItem = function() {
var localctx = new BlockItemContext(this, this._ctx, this.state);
this.enterRule(localctx, 158, CParser.RULE_blockItem);
try {
this.state = 1357;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,121,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1354;
this.specialMethodCall();
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1355;
this.declaration();
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 1356;
this.statement();
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function SpecialMethodCallContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_specialMethodCall;
return this;
}
SpecialMethodCallContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SpecialMethodCallContext.prototype.constructor = SpecialMethodCallContext;
SpecialMethodCallContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
SpecialMethodCallContext.prototype.assignmentExpression = function() {
return this.getTypedRuleContext(AssignmentExpressionContext,0);
};
SpecialMethodCallContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterSpecialMethodCall(this);
}
};
SpecialMethodCallContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitSpecialMethodCall(this);
}
};
CParser.SpecialMethodCallContext = SpecialMethodCallContext;
CParser.prototype.specialMethodCall = function() {
var localctx = new SpecialMethodCallContext(this, this._ctx, this.state);
this.enterRule(localctx, 160, CParser.RULE_specialMethodCall);
try {
this.enterOuterAlt(localctx, 1);
this.state = 1359;
this.match(CParser.Identifier);
this.state = 1360;
this.match(CParser.LeftParen);
this.state = 1361;
this.assignmentExpression();
this.state = 1362;
this.match(CParser.RightParen);
this.state = 1363;
this.match(CParser.Semi);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function ExpressionStatementContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_expressionStatement;
return this;
}
ExpressionStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ExpressionStatementContext.prototype.constructor = ExpressionStatementContext;
ExpressionStatementContext.prototype.expression = function() {
return this.getTypedRuleContext(ExpressionContext,0);
};
ExpressionStatementContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterExpressionStatement(this);
}
};
ExpressionStatementContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitExpressionStatement(this);
}
};
CParser.ExpressionStatementContext = ExpressionStatementContext;
CParser.prototype.expressionStatement = function() {
var localctx = new ExpressionStatementContext(this, this._ctx, this.state);
this.enterRule(localctx, 162, CParser.RULE_expressionStatement);
var _la = 0; // Token type
try {
this.enterOuterAlt(localctx, 1);
this.state = 1366;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 1365;
this.expression(0);
}
this.state = 1368;
this.match(CParser.Semi);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function SelectionStatementContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_selectionStatement;
return this;
}
SelectionStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SelectionStatementContext.prototype.constructor = SelectionStatementContext;
SelectionStatementContext.prototype.expression = function() {
return this.getTypedRuleContext(ExpressionContext,0);
};
SelectionStatementContext.prototype.statement = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTypedRuleContexts(StatementContext);
} else {
return this.getTypedRuleContext(StatementContext,i);
}
};
SelectionStatementContext.prototype.switchCompoundStatement = function() {
return this.getTypedRuleContext(SwitchCompoundStatementContext,0);
};
SelectionStatementContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterSelectionStatement(this);
}
};
SelectionStatementContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitSelectionStatement(this);
}
};
CParser.SelectionStatementContext = SelectionStatementContext;
CParser.prototype.selectionStatement = function() {
var localctx = new SelectionStatementContext(this, this._ctx, this.state);
this.enterRule(localctx, 164, CParser.RULE_selectionStatement);
try {
this.state = 1385;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.If:
this.enterOuterAlt(localctx, 1);
this.state = 1370;
this.match(CParser.If);
this.state = 1371;
this.match(CParser.LeftParen);
this.state = 1372;
this.expression(0);
this.state = 1373;
this.match(CParser.RightParen);
this.state = 1374;
this.statement();
this.state = 1377;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,123,this._ctx);
if(la_===1) {
this.state = 1375;
this.match(CParser.Else);
this.state = 1376;
this.statement();
}
break;
case CParser.Switch:
this.enterOuterAlt(localctx, 2);
this.state = 1379;
this.match(CParser.Switch);
this.state = 1380;
this.match(CParser.LeftParen);
this.state = 1381;
this.expression(0);
this.state = 1382;
this.match(CParser.RightParen);
this.state = 1383;
this.switchCompoundStatement();
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function SwitchCaseContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_switchCase;
return this;
}
SwitchCaseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SwitchCaseContext.prototype.constructor = SwitchCaseContext;
SwitchCaseContext.prototype.switchLabel = function() {
return this.getTypedRuleContext(SwitchLabelContext,0);
};
SwitchCaseContext.prototype.switchBlockItemList = function() {
return this.getTypedRuleContext(SwitchBlockItemListContext,0);
};
SwitchCaseContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterSwitchCase(this);
}
};
SwitchCaseContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitSwitchCase(this);
}
};
CParser.SwitchCaseContext = SwitchCaseContext;
CParser.prototype.switchCase = function() {
var localctx = new SwitchCaseContext(this, this._ctx, this.state);
this.enterRule(localctx, 166, CParser.RULE_switchCase);
try {
this.enterOuterAlt(localctx, 1);
this.state = 1387;
this.switchLabel();
this.state = 1388;
this.switchBlockItemList();
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function SwitchBlockItemListContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_switchBlockItemList;
return this;
}
SwitchBlockItemListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SwitchBlockItemListContext.prototype.constructor = SwitchBlockItemListContext;
SwitchBlockItemListContext.prototype.blockItemList = function() {
return this.getTypedRuleContext(BlockItemListContext,0);
};
SwitchBlockItemListContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterSwitchBlockItemList(this);
}
};
SwitchBlockItemListContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitSwitchBlockItemList(this);
}
};
CParser.SwitchBlockItemListContext = SwitchBlockItemListContext;
CParser.prototype.switchBlockItemList = function() {
var localctx = new SwitchBlockItemListContext(this, this._ctx, this.state);
this.enterRule(localctx, 168, CParser.RULE_switchBlockItemList);
try {
this.enterOuterAlt(localctx, 1);
this.state = 1390;
this.blockItemList(0);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function SwitchCaseListContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_switchCaseList;
return this;
}
SwitchCaseListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SwitchCaseListContext.prototype.constructor = SwitchCaseListContext;
SwitchCaseListContext.prototype.switchCase = function() {
return this.getTypedRuleContext(SwitchCaseContext,0);
};
SwitchCaseListContext.prototype.switchCaseList = function() {
return this.getTypedRuleContext(SwitchCaseListContext,0);
};
SwitchCaseListContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterSwitchCaseList(this);
}
};
SwitchCaseListContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitSwitchCaseList(this);
}
};
CParser.prototype.switchCaseList = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new SwitchCaseListContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 170;
this.enterRecursionRule(localctx, 170, CParser.RULE_switchCaseList, _p);
try {
this.enterOuterAlt(localctx, 1);
this.state = 1393;
this.switchCase();
this._ctx.stop = this._input.LT(-1);
this.state = 1399;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,125,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
localctx = new SwitchCaseListContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_switchCaseList);
this.state = 1395;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 1396;
this.switchCase();
}
this.state = 1401;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,125,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function SwitchCompoundStatementContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_switchCompoundStatement;
return this;
}
SwitchCompoundStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SwitchCompoundStatementContext.prototype.constructor = SwitchCompoundStatementContext;
SwitchCompoundStatementContext.prototype.switchCaseList = function() {
return this.getTypedRuleContext(SwitchCaseListContext,0);
};
SwitchCompoundStatementContext.prototype.statement = function() {
return this.getTypedRuleContext(StatementContext,0);
};
SwitchCompoundStatementContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterSwitchCompoundStatement(this);
}
};
SwitchCompoundStatementContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitSwitchCompoundStatement(this);
}
};
CParser.SwitchCompoundStatementContext = SwitchCompoundStatementContext;
CParser.prototype.switchCompoundStatement = function() {
var localctx = new SwitchCompoundStatementContext(this, this._ctx, this.state);
this.enterRule(localctx, 172, CParser.RULE_switchCompoundStatement);
var _la = 0; // Token type
try {
this.state = 1408;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,127,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1402;
this.match(CParser.LeftBrace);
this.state = 1404;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Case || _la===CParser.Default) {
this.state = 1403;
this.switchCaseList(0);
}
this.state = 1406;
this.match(CParser.RightBrace);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1407;
this.statement();
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function IterationStatementContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_iterationStatement;
return this;
}
IterationStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
IterationStatementContext.prototype.constructor = IterationStatementContext;
IterationStatementContext.prototype.expression = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTypedRuleContexts(ExpressionContext);
} else {
return this.getTypedRuleContext(ExpressionContext,i);
}
};
IterationStatementContext.prototype.statement = function() {
return this.getTypedRuleContext(StatementContext,0);
};
IterationStatementContext.prototype.declaration = function() {
return this.getTypedRuleContext(DeclarationContext,0);
};
IterationStatementContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterIterationStatement(this);
}
};
IterationStatementContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitIterationStatement(this);
}
};
CParser.IterationStatementContext = IterationStatementContext;
CParser.prototype.iterationStatement = function() {
var localctx = new IterationStatementContext(this, this._ctx, this.state);
this.enterRule(localctx, 174, CParser.RULE_iterationStatement);
var _la = 0; // Token type
try {
this.state = 1452;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,133,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1410;
this.match(CParser.While);
this.state = 1411;
this.match(CParser.LeftParen);
this.state = 1412;
this.expression(0);
this.state = 1413;
this.match(CParser.RightParen);
this.state = 1414;
this.statement();
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1416;
this.match(CParser.Do);
this.state = 1417;
this.statement();
this.state = 1418;
this.match(CParser.While);
this.state = 1419;
this.match(CParser.LeftParen);
this.state = 1420;
this.expression(0);
this.state = 1421;
this.match(CParser.RightParen);
this.state = 1422;
this.match(CParser.Semi);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 1424;
this.match(CParser.For);
this.state = 1425;
this.match(CParser.LeftParen);
this.state = 1427;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 1426;
this.expression(0);
}
this.state = 1429;
this.match(CParser.Semi);
this.state = 1431;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 1430;
this.expression(0);
}
this.state = 1433;
this.match(CParser.Semi);
this.state = 1435;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 1434;
this.expression(0);
}
this.state = 1437;
this.match(CParser.RightParen);
this.state = 1438;
this.statement();
break;
case 4:
this.enterOuterAlt(localctx, 4);
this.state = 1439;
this.match(CParser.For);
this.state = 1440;
this.match(CParser.LeftParen);
this.state = 1441;
this.declaration();
this.state = 1443;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 1442;
this.expression(0);
}
this.state = 1445;
this.match(CParser.Semi);
this.state = 1447;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 1446;
this.expression(0);
}
this.state = 1449;
this.match(CParser.RightParen);
this.state = 1450;
this.statement();
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function JumpStatementContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_jumpStatement;
return this;
}
JumpStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
JumpStatementContext.prototype.constructor = JumpStatementContext;
JumpStatementContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
JumpStatementContext.prototype.expression = function() {
return this.getTypedRuleContext(ExpressionContext,0);
};
JumpStatementContext.prototype.unaryExpression = function() {
return this.getTypedRuleContext(UnaryExpressionContext,0);
};
JumpStatementContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterJumpStatement(this);
}
};
JumpStatementContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitJumpStatement(this);
}
};
CParser.JumpStatementContext = JumpStatementContext;
CParser.prototype.jumpStatement = function() {
var localctx = new JumpStatementContext(this, this._ctx, this.state);
this.enterRule(localctx, 176, CParser.RULE_jumpStatement);
var _la = 0; // Token type
try {
this.state = 1470;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,135,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1454;
this.match(CParser.Goto);
this.state = 1455;
this.match(CParser.Identifier);
this.state = 1456;
this.match(CParser.Semi);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1457;
this.match(CParser.Continue);
this.state = 1458;
this.match(CParser.Semi);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 1459;
this.match(CParser.Break);
this.state = 1460;
this.match(CParser.Semi);
break;
case 4:
this.enterOuterAlt(localctx, 4);
this.state = 1461;
this.match(CParser.Return);
this.state = 1463;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 1462;
this.expression(0);
}
this.state = 1465;
this.match(CParser.Semi);
break;
case 5:
this.enterOuterAlt(localctx, 5);
this.state = 1466;
this.match(CParser.Goto);
this.state = 1467;
this.unaryExpression();
this.state = 1468;
this.match(CParser.Semi);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function CompilationUnitContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_compilationUnit;
return this;
}
CompilationUnitContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
CompilationUnitContext.prototype.constructor = CompilationUnitContext;
CompilationUnitContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
CompilationUnitContext.prototype.translationUnit = function() {
return this.getTypedRuleContext(TranslationUnitContext,0);
};
CompilationUnitContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterCompilationUnit(this);
}
};
CompilationUnitContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitCompilationUnit(this);
}
};
CParser.CompilationUnitContext = CompilationUnitContext;
CParser.prototype.compilationUnit = function() {
var localctx = new CompilationUnitContext(this, this._ctx, this.state);
this.enterRule(localctx, 178, CParser.RULE_compilationUnit);
var _la = 0; // Token type
try {
this.state = 1477;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,137,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1473;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__3) | (1 << CParser.T__4) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__11) | (1 << CParser.Auto) | (1 << CParser.Char) | (1 << CParser.Const) | (1 << CParser.Double) | (1 << CParser.Enum) | (1 << CParser.Extern) | (1 << CParser.Float) | (1 << CParser.Inline))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (CParser.Int - 32)) | (1 << (CParser.Long - 32)) | (1 << (CParser.Register - 32)) | (1 << (CParser.Restrict - 32)) | (1 << (CParser.Short - 32)) | (1 << (CParser.Signed - 32)) | (1 << (CParser.Static - 32)) | (1 << (CParser.Struct - 32)) | (1 << (CParser.Typedef - 32)) | (1 << (CParser.Union - 32)) | (1 << (CParser.Unsigned - 32)) | (1 << (CParser.Void - 32)) | (1 << (CParser.Volatile - 32)) | (1 << (CParser.Alignas - 32)) | (1 << (CParser.Atomic - 32)) | (1 << (CParser.Bool - 32)) | (1 << (CParser.Complex - 32)) | (1 << (CParser.Noreturn - 32)) | (1 << (CParser.StaticAssert - 32)) | (1 << (CParser.ThreadLocal - 32)) | (1 << (CParser.LeftParen - 32)))) !== 0) || ((((_la - 75)) & ~0x1f) == 0 && ((1 << (_la - 75)) & ((1 << (CParser.Star - 75)) | (1 << (CParser.Caret - 75)) | (1 << (CParser.Semi - 75)) | (1 << (CParser.Identifier - 75)))) !== 0)) {
this.state = 1472;
this.translationUnit(0);
}
this.state = 1475;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1476;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function TranslationUnitContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_translationUnit;
return this;
}
TranslationUnitContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TranslationUnitContext.prototype.constructor = TranslationUnitContext;
TranslationUnitContext.prototype.externalDeclaration = function() {
return this.getTypedRuleContext(ExternalDeclarationContext,0);
};
TranslationUnitContext.prototype.translationUnit = function() {
return this.getTypedRuleContext(TranslationUnitContext,0);
};
TranslationUnitContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterTranslationUnit(this);
}
};
TranslationUnitContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitTranslationUnit(this);
}
};
CParser.prototype.translationUnit = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new TranslationUnitContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 180;
this.enterRecursionRule(localctx, 180, CParser.RULE_translationUnit, _p);
try {
this.enterOuterAlt(localctx, 1);
this.state = 1480;
this.externalDeclaration();
this._ctx.stop = this._input.LT(-1);
this.state = 1486;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,138,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
localctx = new TranslationUnitContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_translationUnit);
this.state = 1482;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 1483;
this.externalDeclaration();
}
this.state = 1488;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,138,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function ExternalDeclarationContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_externalDeclaration;
return this;
}
ExternalDeclarationContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ExternalDeclarationContext.prototype.constructor = ExternalDeclarationContext;
ExternalDeclarationContext.prototype.functionDefinition = function() {
return this.getTypedRuleContext(FunctionDefinitionContext,0);
};
ExternalDeclarationContext.prototype.initDeclaratorList = function() {
return this.getTypedRuleContext(InitDeclaratorListContext,0);
};
ExternalDeclarationContext.prototype.declaration = function() {
return this.getTypedRuleContext(DeclarationContext,0);
};
ExternalDeclarationContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterExternalDeclaration(this);
}
};
ExternalDeclarationContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitExternalDeclaration(this);
}
};
CParser.ExternalDeclarationContext = ExternalDeclarationContext;
CParser.prototype.externalDeclaration = function() {
var localctx = new ExternalDeclarationContext(this, this._ctx, this.state);
this.enterRule(localctx, 182, CParser.RULE_externalDeclaration);
try {
this.state = 1495;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,139,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1489;
this.functionDefinition();
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1490;
this.initDeclaratorList(0);
this.state = 1491;
this.match(CParser.Semi);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 1493;
this.declaration();
break;
case 4:
this.enterOuterAlt(localctx, 4);
this.state = 1494;
this.match(CParser.Semi);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function FunctionDefinitionContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_functionDefinition;
return this;
}
FunctionDefinitionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
FunctionDefinitionContext.prototype.constructor = FunctionDefinitionContext;
FunctionDefinitionContext.prototype.declarator = function() {
return this.getTypedRuleContext(DeclaratorContext,0);
};
FunctionDefinitionContext.prototype.compoundStatement = function() {
return this.getTypedRuleContext(CompoundStatementContext,0);
};
FunctionDefinitionContext.prototype.declarationSpecifiers = function() {
return this.getTypedRuleContext(DeclarationSpecifiersContext,0);
};
FunctionDefinitionContext.prototype.declarationList = function() {
return this.getTypedRuleContext(DeclarationListContext,0);
};
FunctionDefinitionContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterFunctionDefinition(this);
}
};
FunctionDefinitionContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitFunctionDefinition(this);
}
};
CParser.FunctionDefinitionContext = FunctionDefinitionContext;
CParser.prototype.functionDefinition = function() {
var localctx = new FunctionDefinitionContext(this, this._ctx, this.state);
this.enterRule(localctx, 184, CParser.RULE_functionDefinition);
var _la = 0; // Token type
try {
this.enterOuterAlt(localctx, 1);
this.state = 1498;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,140,this._ctx);
if(la_===1) {
this.state = 1497;
this.declarationSpecifiers();
}
this.state = 1500;
this.declarator();
this.state = 1502;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__3) | (1 << CParser.T__4) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__11) | (1 << CParser.Auto) | (1 << CParser.Char) | (1 << CParser.Const) | (1 << CParser.Double) | (1 << CParser.Enum) | (1 << CParser.Extern) | (1 << CParser.Float) | (1 << CParser.Inline))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (CParser.Int - 32)) | (1 << (CParser.Long - 32)) | (1 << (CParser.Register - 32)) | (1 << (CParser.Restrict - 32)) | (1 << (CParser.Short - 32)) | (1 << (CParser.Signed - 32)) | (1 << (CParser.Static - 32)) | (1 << (CParser.Struct - 32)) | (1 << (CParser.Typedef - 32)) | (1 << (CParser.Union - 32)) | (1 << (CParser.Unsigned - 32)) | (1 << (CParser.Void - 32)) | (1 << (CParser.Volatile - 32)) | (1 << (CParser.Alignas - 32)) | (1 << (CParser.Atomic - 32)) | (1 << (CParser.Bool - 32)) | (1 << (CParser.Complex - 32)) | (1 << (CParser.Noreturn - 32)) | (1 << (CParser.StaticAssert - 32)) | (1 << (CParser.ThreadLocal - 32)))) !== 0) || _la===CParser.Identifier) {
this.state = 1501;
this.declarationList(0);
}
this.state = 1504;
this.compoundStatement();
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function DeclarationListContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_declarationList;
return this;
}
DeclarationListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DeclarationListContext.prototype.constructor = DeclarationListContext;
DeclarationListContext.prototype.declaration = function() {
return this.getTypedRuleContext(DeclarationContext,0);
};
DeclarationListContext.prototype.declarationList = function() {
return this.getTypedRuleContext(DeclarationListContext,0);
};
DeclarationListContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterDeclarationList(this);
}
};
DeclarationListContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitDeclarationList(this);
}
};
CParser.prototype.declarationList = function(_p) {
if(_p===undefined) {
_p = 0;
}
var _parentctx = this._ctx;
var _parentState = this.state;
var localctx = new DeclarationListContext(this, this._ctx, _parentState);
var _prevctx = localctx;
var _startState = 186;
this.enterRecursionRule(localctx, 186, CParser.RULE_declarationList, _p);
try {
this.enterOuterAlt(localctx, 1);
this.state = 1507;
this.declaration();
this._ctx.stop = this._input.LT(-1);
this.state = 1513;
this._errHandler.sync(this);
var _alt = this._interp.adaptivePredict(this._input,142,this._ctx)
while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
if(_alt===1) {
if(this._parseListeners!==null) {
this.triggerExitRuleEvent();
}
_prevctx = localctx;
localctx = new DeclarationListContext(this, _parentctx, _parentState);
this.pushNewRecursionContext(localctx, _startState, CParser.RULE_declarationList);
this.state = 1509;
if (!( this.precpred(this._ctx, 1))) {
throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
}
this.state = 1510;
this.declaration();
}
this.state = 1515;
this._errHandler.sync(this);
_alt = this._interp.adaptivePredict(this._input,142,this._ctx);
}
} catch( error) {
if(error instanceof antlr4.error.RecognitionException) {
localctx.exception = error;
this._errHandler.reportError(this, error);
this._errHandler.recover(this, error);
} else {
throw error;
}
} finally {
this.unrollRecursionContexts(_parentctx)
}
return localctx;
};
function PrimaryExpression_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_primaryExpression_DropletFile;
return this;
}
PrimaryExpression_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
PrimaryExpression_DropletFileContext.prototype.constructor = PrimaryExpression_DropletFileContext;
PrimaryExpression_DropletFileContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
PrimaryExpression_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
PrimaryExpression_DropletFileContext.prototype.Constant = function() {
return this.getToken(CParser.Constant, 0);
};
PrimaryExpression_DropletFileContext.prototype.StringLiteral = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTokens(CParser.StringLiteral);
} else {
return this.getToken(CParser.StringLiteral, i);
}
};
PrimaryExpression_DropletFileContext.prototype.expression = function() {
return this.getTypedRuleContext(ExpressionContext,0);
};
PrimaryExpression_DropletFileContext.prototype.genericSelection = function() {
return this.getTypedRuleContext(GenericSelectionContext,0);
};
PrimaryExpression_DropletFileContext.prototype.compoundStatement = function() {
return this.getTypedRuleContext(CompoundStatementContext,0);
};
PrimaryExpression_DropletFileContext.prototype.unaryExpression = function() {
return this.getTypedRuleContext(UnaryExpressionContext,0);
};
PrimaryExpression_DropletFileContext.prototype.typeName = function() {
return this.getTypedRuleContext(TypeNameContext,0);
};
PrimaryExpression_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterPrimaryExpression_DropletFile(this);
}
};
PrimaryExpression_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitPrimaryExpression_DropletFile(this);
}
};
CParser.PrimaryExpression_DropletFileContext = PrimaryExpression_DropletFileContext;
CParser.prototype.primaryExpression_DropletFile = function() {
var localctx = new PrimaryExpression_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 188, CParser.RULE_primaryExpression_DropletFile);
var _la = 0; // Token type
try {
this.state = 1557;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,145,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1516;
this.match(CParser.Identifier);
this.state = 1517;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1518;
this.match(CParser.Constant);
this.state = 1519;
this.match(CParser.EOF);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 1521;
this._errHandler.sync(this);
_la = this._input.LA(1);
do {
this.state = 1520;
this.match(CParser.StringLiteral);
this.state = 1523;
this._errHandler.sync(this);
_la = this._input.LA(1);
} while(_la===CParser.StringLiteral);
this.state = 1525;
this.match(CParser.EOF);
break;
case 4:
this.enterOuterAlt(localctx, 4);
this.state = 1526;
this.match(CParser.LeftParen);
this.state = 1527;
this.expression(0);
this.state = 1528;
this.match(CParser.RightParen);
this.state = 1529;
this.match(CParser.EOF);
break;
case 5:
this.enterOuterAlt(localctx, 5);
this.state = 1531;
this.genericSelection();
this.state = 1532;
this.match(CParser.EOF);
break;
case 6:
this.enterOuterAlt(localctx, 6);
this.state = 1535;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.T__0) {
this.state = 1534;
this.match(CParser.T__0);
}
this.state = 1537;
this.match(CParser.LeftParen);
this.state = 1538;
this.compoundStatement();
this.state = 1539;
this.match(CParser.RightParen);
break;
case 7:
this.enterOuterAlt(localctx, 7);
this.state = 1541;
this.match(CParser.T__1);
this.state = 1542;
this.match(CParser.LeftParen);
this.state = 1543;
this.unaryExpression();
this.state = 1544;
this.match(CParser.Comma);
this.state = 1545;
this.typeName();
this.state = 1546;
this.match(CParser.RightParen);
this.state = 1547;
this.match(CParser.EOF);
break;
case 8:
this.enterOuterAlt(localctx, 8);
this.state = 1549;
this.match(CParser.T__2);
this.state = 1550;
this.match(CParser.LeftParen);
this.state = 1551;
this.typeName();
this.state = 1552;
this.match(CParser.Comma);
this.state = 1553;
this.unaryExpression();
this.state = 1554;
this.match(CParser.RightParen);
this.state = 1555;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function GenericSelection_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_genericSelection_DropletFile;
return this;
}
GenericSelection_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
GenericSelection_DropletFileContext.prototype.constructor = GenericSelection_DropletFileContext;
GenericSelection_DropletFileContext.prototype.assignmentExpression = function() {
return this.getTypedRuleContext(AssignmentExpressionContext,0);
};
GenericSelection_DropletFileContext.prototype.genericAssocList = function() {
return this.getTypedRuleContext(GenericAssocListContext,0);
};
GenericSelection_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
GenericSelection_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterGenericSelection_DropletFile(this);
}
};
GenericSelection_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitGenericSelection_DropletFile(this);
}
};
CParser.GenericSelection_DropletFileContext = GenericSelection_DropletFileContext;
CParser.prototype.genericSelection_DropletFile = function() {
var localctx = new GenericSelection_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 190, CParser.RULE_genericSelection_DropletFile);
try {
this.enterOuterAlt(localctx, 1);
this.state = 1559;
this.match(CParser.Generic);
this.state = 1560;
this.match(CParser.LeftParen);
this.state = 1561;
this.assignmentExpression();
this.state = 1562;
this.match(CParser.Comma);
this.state = 1563;
this.genericAssocList(0);
this.state = 1564;
this.match(CParser.RightParen);
this.state = 1565;
this.match(CParser.EOF);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function GenericAssocList_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_genericAssocList_DropletFile;
return this;
}
GenericAssocList_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
GenericAssocList_DropletFileContext.prototype.constructor = GenericAssocList_DropletFileContext;
GenericAssocList_DropletFileContext.prototype.genericAssociation = function() {
return this.getTypedRuleContext(GenericAssociationContext,0);
};
GenericAssocList_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
GenericAssocList_DropletFileContext.prototype.genericAssocList = function() {
return this.getTypedRuleContext(GenericAssocListContext,0);
};
GenericAssocList_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterGenericAssocList_DropletFile(this);
}
};
GenericAssocList_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitGenericAssocList_DropletFile(this);
}
};
CParser.GenericAssocList_DropletFileContext = GenericAssocList_DropletFileContext;
CParser.prototype.genericAssocList_DropletFile = function() {
var localctx = new GenericAssocList_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 192, CParser.RULE_genericAssocList_DropletFile);
try {
this.state = 1575;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,146,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1567;
this.genericAssociation();
this.state = 1568;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1570;
this.genericAssocList(0);
this.state = 1571;
this.match(CParser.Comma);
this.state = 1572;
this.genericAssociation();
this.state = 1573;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function GenericAssociation_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_genericAssociation_DropletFile;
return this;
}
GenericAssociation_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
GenericAssociation_DropletFileContext.prototype.constructor = GenericAssociation_DropletFileContext;
GenericAssociation_DropletFileContext.prototype.typeName = function() {
return this.getTypedRuleContext(TypeNameContext,0);
};
GenericAssociation_DropletFileContext.prototype.assignmentExpression = function() {
return this.getTypedRuleContext(AssignmentExpressionContext,0);
};
GenericAssociation_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
GenericAssociation_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterGenericAssociation_DropletFile(this);
}
};
GenericAssociation_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitGenericAssociation_DropletFile(this);
}
};
CParser.GenericAssociation_DropletFileContext = GenericAssociation_DropletFileContext;
CParser.prototype.genericAssociation_DropletFile = function() {
var localctx = new GenericAssociation_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 194, CParser.RULE_genericAssociation_DropletFile);
try {
this.state = 1587;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.T__0:
case CParser.T__3:
case CParser.T__4:
case CParser.T__5:
case CParser.T__6:
case CParser.Char:
case CParser.Const:
case CParser.Double:
case CParser.Enum:
case CParser.Float:
case CParser.Int:
case CParser.Long:
case CParser.Restrict:
case CParser.Short:
case CParser.Signed:
case CParser.Struct:
case CParser.Union:
case CParser.Unsigned:
case CParser.Void:
case CParser.Volatile:
case CParser.Atomic:
case CParser.Bool:
case CParser.Complex:
case CParser.Identifier:
this.enterOuterAlt(localctx, 1);
this.state = 1577;
this.typeName();
this.state = 1578;
this.match(CParser.Colon);
this.state = 1579;
this.assignmentExpression();
this.state = 1580;
this.match(CParser.EOF);
break;
case CParser.Default:
this.enterOuterAlt(localctx, 2);
this.state = 1582;
this.match(CParser.Default);
this.state = 1583;
this.match(CParser.Colon);
this.state = 1584;
this.assignmentExpression();
this.state = 1585;
this.match(CParser.EOF);
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function PostfixExpression_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_postfixExpression_DropletFile;
return this;
}
PostfixExpression_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
PostfixExpression_DropletFileContext.prototype.constructor = PostfixExpression_DropletFileContext;
PostfixExpression_DropletFileContext.prototype.primaryExpression = function() {
return this.getTypedRuleContext(PrimaryExpressionContext,0);
};
PostfixExpression_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
PostfixExpression_DropletFileContext.prototype.postfixExpression = function() {
return this.getTypedRuleContext(PostfixExpressionContext,0);
};
PostfixExpression_DropletFileContext.prototype.expression = function() {
return this.getTypedRuleContext(ExpressionContext,0);
};
PostfixExpression_DropletFileContext.prototype.argumentExpressionList = function() {
return this.getTypedRuleContext(ArgumentExpressionListContext,0);
};
PostfixExpression_DropletFileContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
PostfixExpression_DropletFileContext.prototype.typeName = function() {
return this.getTypedRuleContext(TypeNameContext,0);
};
PostfixExpression_DropletFileContext.prototype.initializerList = function() {
return this.getTypedRuleContext(InitializerListContext,0);
};
PostfixExpression_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterPostfixExpression_DropletFile(this);
}
};
PostfixExpression_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitPostfixExpression_DropletFile(this);
}
};
CParser.PostfixExpression_DropletFileContext = PostfixExpression_DropletFileContext;
CParser.prototype.postfixExpression_DropletFile = function() {
var localctx = new PostfixExpression_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 196, CParser.RULE_postfixExpression_DropletFile);
var _la = 0; // Token type
try {
this.state = 1660;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,149,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1589;
this.primaryExpression();
this.state = 1590;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1592;
this.postfixExpression(0);
this.state = 1593;
this.match(CParser.LeftBracket);
this.state = 1594;
this.expression(0);
this.state = 1595;
this.match(CParser.RightBracket);
this.state = 1596;
this.match(CParser.EOF);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 1598;
this.postfixExpression(0);
this.state = 1599;
this.match(CParser.LeftParen);
this.state = 1601;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 1600;
this.argumentExpressionList(0);
}
this.state = 1603;
this.match(CParser.RightParen);
this.state = 1604;
this.match(CParser.EOF);
break;
case 4:
this.enterOuterAlt(localctx, 4);
this.state = 1606;
this.postfixExpression(0);
this.state = 1607;
this.match(CParser.Dot);
this.state = 1608;
this.match(CParser.Identifier);
this.state = 1609;
this.match(CParser.EOF);
break;
case 5:
this.enterOuterAlt(localctx, 5);
this.state = 1611;
this.postfixExpression(0);
this.state = 1612;
this.match(CParser.Arrow);
this.state = 1613;
this.match(CParser.Identifier);
this.state = 1614;
this.match(CParser.EOF);
break;
case 6:
this.enterOuterAlt(localctx, 6);
this.state = 1616;
this.postfixExpression(0);
this.state = 1617;
this.match(CParser.PlusPlus);
this.state = 1618;
this.match(CParser.EOF);
break;
case 7:
this.enterOuterAlt(localctx, 7);
this.state = 1620;
this.postfixExpression(0);
this.state = 1621;
this.match(CParser.MinusMinus);
this.state = 1622;
this.match(CParser.EOF);
break;
case 8:
this.enterOuterAlt(localctx, 8);
this.state = 1624;
this.match(CParser.LeftParen);
this.state = 1625;
this.typeName();
this.state = 1626;
this.match(CParser.RightParen);
this.state = 1627;
this.match(CParser.LeftBrace);
this.state = 1628;
this.initializerList(0);
this.state = 1629;
this.match(CParser.RightBrace);
this.state = 1630;
this.match(CParser.EOF);
break;
case 9:
this.enterOuterAlt(localctx, 9);
this.state = 1632;
this.match(CParser.LeftParen);
this.state = 1633;
this.typeName();
this.state = 1634;
this.match(CParser.RightParen);
this.state = 1635;
this.match(CParser.LeftBrace);
this.state = 1636;
this.initializerList(0);
this.state = 1637;
this.match(CParser.Comma);
this.state = 1638;
this.match(CParser.RightBrace);
this.state = 1639;
this.match(CParser.EOF);
break;
case 10:
this.enterOuterAlt(localctx, 10);
this.state = 1641;
this.match(CParser.T__0);
this.state = 1642;
this.match(CParser.LeftParen);
this.state = 1643;
this.typeName();
this.state = 1644;
this.match(CParser.RightParen);
this.state = 1645;
this.match(CParser.LeftBrace);
this.state = 1646;
this.initializerList(0);
this.state = 1647;
this.match(CParser.RightBrace);
this.state = 1648;
this.match(CParser.EOF);
break;
case 11:
this.enterOuterAlt(localctx, 11);
this.state = 1650;
this.match(CParser.T__0);
this.state = 1651;
this.match(CParser.LeftParen);
this.state = 1652;
this.typeName();
this.state = 1653;
this.match(CParser.RightParen);
this.state = 1654;
this.match(CParser.LeftBrace);
this.state = 1655;
this.initializerList(0);
this.state = 1656;
this.match(CParser.Comma);
this.state = 1657;
this.match(CParser.RightBrace);
this.state = 1658;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function ArgumentExpressionList_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_argumentExpressionList_DropletFile;
return this;
}
ArgumentExpressionList_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ArgumentExpressionList_DropletFileContext.prototype.constructor = ArgumentExpressionList_DropletFileContext;
ArgumentExpressionList_DropletFileContext.prototype.assignmentExpression = function() {
return this.getTypedRuleContext(AssignmentExpressionContext,0);
};
ArgumentExpressionList_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
ArgumentExpressionList_DropletFileContext.prototype.argumentExpressionList = function() {
return this.getTypedRuleContext(ArgumentExpressionListContext,0);
};
ArgumentExpressionList_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterArgumentExpressionList_DropletFile(this);
}
};
ArgumentExpressionList_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitArgumentExpressionList_DropletFile(this);
}
};
CParser.ArgumentExpressionList_DropletFileContext = ArgumentExpressionList_DropletFileContext;
CParser.prototype.argumentExpressionList_DropletFile = function() {
var localctx = new ArgumentExpressionList_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 198, CParser.RULE_argumentExpressionList_DropletFile);
try {
this.state = 1670;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,150,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1662;
this.assignmentExpression();
this.state = 1663;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1665;
this.argumentExpressionList(0);
this.state = 1666;
this.match(CParser.Comma);
this.state = 1667;
this.assignmentExpression();
this.state = 1668;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function UnaryExpression_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_unaryExpression_DropletFile;
return this;
}
UnaryExpression_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
UnaryExpression_DropletFileContext.prototype.constructor = UnaryExpression_DropletFileContext;
UnaryExpression_DropletFileContext.prototype.postfixExpression = function() {
return this.getTypedRuleContext(PostfixExpressionContext,0);
};
UnaryExpression_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
UnaryExpression_DropletFileContext.prototype.unaryExpression = function() {
return this.getTypedRuleContext(UnaryExpressionContext,0);
};
UnaryExpression_DropletFileContext.prototype.unaryOperator = function() {
return this.getTypedRuleContext(UnaryOperatorContext,0);
};
UnaryExpression_DropletFileContext.prototype.castExpression = function() {
return this.getTypedRuleContext(CastExpressionContext,0);
};
UnaryExpression_DropletFileContext.prototype.typeNameOrExpression = function() {
return this.getTypedRuleContext(TypeNameOrExpressionContext,0);
};
UnaryExpression_DropletFileContext.prototype.expression = function() {
return this.getTypedRuleContext(ExpressionContext,0);
};
UnaryExpression_DropletFileContext.prototype.typeName = function() {
return this.getTypedRuleContext(TypeNameContext,0);
};
UnaryExpression_DropletFileContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
UnaryExpression_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterUnaryExpression_DropletFile(this);
}
};
UnaryExpression_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitUnaryExpression_DropletFile(this);
}
};
CParser.UnaryExpression_DropletFileContext = UnaryExpression_DropletFileContext;
CParser.prototype.unaryExpression_DropletFile = function() {
var localctx = new UnaryExpression_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 200, CParser.RULE_unaryExpression_DropletFile);
try {
this.state = 1711;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,151,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1672;
this.postfixExpression(0);
this.state = 1673;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1675;
this.match(CParser.PlusPlus);
this.state = 1676;
this.unaryExpression();
this.state = 1677;
this.match(CParser.EOF);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 1679;
this.match(CParser.MinusMinus);
this.state = 1680;
this.unaryExpression();
this.state = 1681;
this.match(CParser.EOF);
break;
case 4:
this.enterOuterAlt(localctx, 4);
this.state = 1683;
this.unaryOperator();
this.state = 1684;
this.castExpression();
this.state = 1685;
this.match(CParser.EOF);
break;
case 5:
this.enterOuterAlt(localctx, 5);
this.state = 1687;
this.match(CParser.Sizeof);
this.state = 1688;
this.match(CParser.LeftParen);
this.state = 1689;
this.typeNameOrExpression();
this.state = 1690;
this.match(CParser.RightParen);
this.state = 1691;
this.match(CParser.EOF);
break;
case 6:
this.enterOuterAlt(localctx, 6);
this.state = 1693;
this.match(CParser.Sizeof);
this.state = 1694;
this.match(CParser.LeftParen);
this.state = 1695;
this.expression(0);
this.state = 1696;
this.match(CParser.RightParen);
this.state = 1697;
this.match(CParser.EOF);
break;
case 7:
this.enterOuterAlt(localctx, 7);
this.state = 1699;
this.match(CParser.Sizeof);
this.state = 1700;
this.unaryExpression();
this.state = 1701;
this.match(CParser.EOF);
break;
case 8:
this.enterOuterAlt(localctx, 8);
this.state = 1703;
this.match(CParser.Alignof);
this.state = 1704;
this.match(CParser.LeftParen);
this.state = 1705;
this.typeName();
this.state = 1706;
this.match(CParser.RightParen);
this.state = 1707;
this.match(CParser.EOF);
break;
case 9:
this.enterOuterAlt(localctx, 9);
this.state = 1709;
this.match(CParser.AndAnd);
this.state = 1710;
this.match(CParser.Identifier);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function TypeNameOrExpression_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_typeNameOrExpression_DropletFile;
return this;
}
TypeNameOrExpression_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TypeNameOrExpression_DropletFileContext.prototype.constructor = TypeNameOrExpression_DropletFileContext;
TypeNameOrExpression_DropletFileContext.prototype.typeName = function() {
return this.getTypedRuleContext(TypeNameContext,0);
};
TypeNameOrExpression_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
TypeNameOrExpression_DropletFileContext.prototype.expression = function() {
return this.getTypedRuleContext(ExpressionContext,0);
};
TypeNameOrExpression_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterTypeNameOrExpression_DropletFile(this);
}
};
TypeNameOrExpression_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitTypeNameOrExpression_DropletFile(this);
}
};
CParser.TypeNameOrExpression_DropletFileContext = TypeNameOrExpression_DropletFileContext;
CParser.prototype.typeNameOrExpression_DropletFile = function() {
var localctx = new TypeNameOrExpression_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 202, CParser.RULE_typeNameOrExpression_DropletFile);
try {
this.state = 1719;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,152,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1713;
this.typeName();
this.state = 1714;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1716;
this.expression(0);
this.state = 1717;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function UnaryOperator_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_unaryOperator_DropletFile;
return this;
}
UnaryOperator_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
UnaryOperator_DropletFileContext.prototype.constructor = UnaryOperator_DropletFileContext;
UnaryOperator_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
UnaryOperator_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterUnaryOperator_DropletFile(this);
}
};
UnaryOperator_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitUnaryOperator_DropletFile(this);
}
};
CParser.UnaryOperator_DropletFileContext = UnaryOperator_DropletFileContext;
CParser.prototype.unaryOperator_DropletFile = function() {
var localctx = new UnaryOperator_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 204, CParser.RULE_unaryOperator_DropletFile);
try {
this.state = 1728;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.And:
this.enterOuterAlt(localctx, 1);
this.state = 1721;
this.match(CParser.And);
break;
case CParser.Star:
this.enterOuterAlt(localctx, 2);
this.state = 1722;
this.match(CParser.Star);
break;
case CParser.Plus:
this.enterOuterAlt(localctx, 3);
this.state = 1723;
this.match(CParser.Plus);
break;
case CParser.Minus:
this.enterOuterAlt(localctx, 4);
this.state = 1724;
this.match(CParser.Minus);
break;
case CParser.Tilde:
this.enterOuterAlt(localctx, 5);
this.state = 1725;
this.match(CParser.Tilde);
break;
case CParser.Not:
this.enterOuterAlt(localctx, 6);
this.state = 1726;
this.match(CParser.Not);
this.state = 1727;
this.match(CParser.EOF);
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function CastExpression_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_castExpression_DropletFile;
return this;
}
CastExpression_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
CastExpression_DropletFileContext.prototype.constructor = CastExpression_DropletFileContext;
CastExpression_DropletFileContext.prototype.unaryExpression = function() {
return this.getTypedRuleContext(UnaryExpressionContext,0);
};
CastExpression_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
CastExpression_DropletFileContext.prototype.typeName = function() {
return this.getTypedRuleContext(TypeNameContext,0);
};
CastExpression_DropletFileContext.prototype.castExpression = function() {
return this.getTypedRuleContext(CastExpressionContext,0);
};
CastExpression_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterCastExpression_DropletFile(this);
}
};
CastExpression_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitCastExpression_DropletFile(this);
}
};
CParser.CastExpression_DropletFileContext = CastExpression_DropletFileContext;
CParser.prototype.castExpression_DropletFile = function() {
var localctx = new CastExpression_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 206, CParser.RULE_castExpression_DropletFile);
try {
this.state = 1746;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,154,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1730;
this.unaryExpression();
this.state = 1731;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1733;
this.match(CParser.LeftParen);
this.state = 1734;
this.typeName();
this.state = 1735;
this.match(CParser.RightParen);
this.state = 1736;
this.castExpression();
this.state = 1737;
this.match(CParser.EOF);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 1739;
this.match(CParser.T__0);
this.state = 1740;
this.match(CParser.LeftParen);
this.state = 1741;
this.typeName();
this.state = 1742;
this.match(CParser.RightParen);
this.state = 1743;
this.castExpression();
this.state = 1744;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function MultiplicativeExpression_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_multiplicativeExpression_DropletFile;
return this;
}
MultiplicativeExpression_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
MultiplicativeExpression_DropletFileContext.prototype.constructor = MultiplicativeExpression_DropletFileContext;
MultiplicativeExpression_DropletFileContext.prototype.castExpression = function() {
return this.getTypedRuleContext(CastExpressionContext,0);
};
MultiplicativeExpression_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
MultiplicativeExpression_DropletFileContext.prototype.multiplicativeExpression = function() {
return this.getTypedRuleContext(MultiplicativeExpressionContext,0);
};
MultiplicativeExpression_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterMultiplicativeExpression_DropletFile(this);
}
};
MultiplicativeExpression_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitMultiplicativeExpression_DropletFile(this);
}
};
CParser.MultiplicativeExpression_DropletFileContext = MultiplicativeExpression_DropletFileContext;
CParser.prototype.multiplicativeExpression_DropletFile = function() {
var localctx = new MultiplicativeExpression_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 208, CParser.RULE_multiplicativeExpression_DropletFile);
try {
this.state = 1766;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,155,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1748;
this.castExpression();
this.state = 1749;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1751;
this.multiplicativeExpression(0);
this.state = 1752;
this.match(CParser.Star);
this.state = 1753;
this.castExpression();
this.state = 1754;
this.match(CParser.EOF);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 1756;
this.multiplicativeExpression(0);
this.state = 1757;
this.match(CParser.Div);
this.state = 1758;
this.castExpression();
this.state = 1759;
this.match(CParser.EOF);
break;
case 4:
this.enterOuterAlt(localctx, 4);
this.state = 1761;
this.multiplicativeExpression(0);
this.state = 1762;
this.match(CParser.Mod);
this.state = 1763;
this.castExpression();
this.state = 1764;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function AdditiveExpression_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_additiveExpression_DropletFile;
return this;
}
AdditiveExpression_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AdditiveExpression_DropletFileContext.prototype.constructor = AdditiveExpression_DropletFileContext;
AdditiveExpression_DropletFileContext.prototype.multiplicativeExpression = function() {
return this.getTypedRuleContext(MultiplicativeExpressionContext,0);
};
AdditiveExpression_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
AdditiveExpression_DropletFileContext.prototype.additiveExpression = function() {
return this.getTypedRuleContext(AdditiveExpressionContext,0);
};
AdditiveExpression_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterAdditiveExpression_DropletFile(this);
}
};
AdditiveExpression_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitAdditiveExpression_DropletFile(this);
}
};
CParser.AdditiveExpression_DropletFileContext = AdditiveExpression_DropletFileContext;
CParser.prototype.additiveExpression_DropletFile = function() {
var localctx = new AdditiveExpression_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 210, CParser.RULE_additiveExpression_DropletFile);
try {
this.state = 1781;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,156,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1768;
this.multiplicativeExpression(0);
this.state = 1769;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1771;
this.additiveExpression(0);
this.state = 1772;
this.match(CParser.Plus);
this.state = 1773;
this.multiplicativeExpression(0);
this.state = 1774;
this.match(CParser.EOF);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 1776;
this.additiveExpression(0);
this.state = 1777;
this.match(CParser.Minus);
this.state = 1778;
this.multiplicativeExpression(0);
this.state = 1779;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function ShiftExpression_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_shiftExpression_DropletFile;
return this;
}
ShiftExpression_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ShiftExpression_DropletFileContext.prototype.constructor = ShiftExpression_DropletFileContext;
ShiftExpression_DropletFileContext.prototype.additiveExpression = function() {
return this.getTypedRuleContext(AdditiveExpressionContext,0);
};
ShiftExpression_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
ShiftExpression_DropletFileContext.prototype.shiftExpression = function() {
return this.getTypedRuleContext(ShiftExpressionContext,0);
};
ShiftExpression_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterShiftExpression_DropletFile(this);
}
};
ShiftExpression_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitShiftExpression_DropletFile(this);
}
};
CParser.ShiftExpression_DropletFileContext = ShiftExpression_DropletFileContext;
CParser.prototype.shiftExpression_DropletFile = function() {
var localctx = new ShiftExpression_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 212, CParser.RULE_shiftExpression_DropletFile);
try {
this.state = 1796;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,157,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1783;
this.additiveExpression(0);
this.state = 1784;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1786;
this.shiftExpression(0);
this.state = 1787;
this.match(CParser.LeftShift);
this.state = 1788;
this.additiveExpression(0);
this.state = 1789;
this.match(CParser.EOF);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 1791;
this.shiftExpression(0);
this.state = 1792;
this.match(CParser.RightShift);
this.state = 1793;
this.additiveExpression(0);
this.state = 1794;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function RelationalExpression_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_relationalExpression_DropletFile;
return this;
}
RelationalExpression_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
RelationalExpression_DropletFileContext.prototype.constructor = RelationalExpression_DropletFileContext;
RelationalExpression_DropletFileContext.prototype.shiftExpression = function() {
return this.getTypedRuleContext(ShiftExpressionContext,0);
};
RelationalExpression_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
RelationalExpression_DropletFileContext.prototype.relationalExpression = function() {
return this.getTypedRuleContext(RelationalExpressionContext,0);
};
RelationalExpression_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterRelationalExpression_DropletFile(this);
}
};
RelationalExpression_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitRelationalExpression_DropletFile(this);
}
};
CParser.RelationalExpression_DropletFileContext = RelationalExpression_DropletFileContext;
CParser.prototype.relationalExpression_DropletFile = function() {
var localctx = new RelationalExpression_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 214, CParser.RULE_relationalExpression_DropletFile);
try {
this.state = 1821;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,158,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1798;
this.shiftExpression(0);
this.state = 1799;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1801;
this.relationalExpression(0);
this.state = 1802;
this.match(CParser.Less);
this.state = 1803;
this.shiftExpression(0);
this.state = 1804;
this.match(CParser.EOF);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 1806;
this.relationalExpression(0);
this.state = 1807;
this.match(CParser.Greater);
this.state = 1808;
this.shiftExpression(0);
this.state = 1809;
this.match(CParser.EOF);
break;
case 4:
this.enterOuterAlt(localctx, 4);
this.state = 1811;
this.relationalExpression(0);
this.state = 1812;
this.match(CParser.LessEqual);
this.state = 1813;
this.shiftExpression(0);
this.state = 1814;
this.match(CParser.EOF);
break;
case 5:
this.enterOuterAlt(localctx, 5);
this.state = 1816;
this.relationalExpression(0);
this.state = 1817;
this.match(CParser.GreaterEqual);
this.state = 1818;
this.shiftExpression(0);
this.state = 1819;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function EqualityExpression_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_equalityExpression_DropletFile;
return this;
}
EqualityExpression_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
EqualityExpression_DropletFileContext.prototype.constructor = EqualityExpression_DropletFileContext;
EqualityExpression_DropletFileContext.prototype.relationalExpression = function() {
return this.getTypedRuleContext(RelationalExpressionContext,0);
};
EqualityExpression_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
EqualityExpression_DropletFileContext.prototype.equalityExpression = function() {
return this.getTypedRuleContext(EqualityExpressionContext,0);
};
EqualityExpression_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterEqualityExpression_DropletFile(this);
}
};
EqualityExpression_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitEqualityExpression_DropletFile(this);
}
};
CParser.EqualityExpression_DropletFileContext = EqualityExpression_DropletFileContext;
CParser.prototype.equalityExpression_DropletFile = function() {
var localctx = new EqualityExpression_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 216, CParser.RULE_equalityExpression_DropletFile);
try {
this.state = 1836;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,159,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1823;
this.relationalExpression(0);
this.state = 1824;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1826;
this.equalityExpression(0);
this.state = 1827;
this.match(CParser.Equal);
this.state = 1828;
this.relationalExpression(0);
this.state = 1829;
this.match(CParser.EOF);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 1831;
this.equalityExpression(0);
this.state = 1832;
this.match(CParser.NotEqual);
this.state = 1833;
this.relationalExpression(0);
this.state = 1834;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function AndExpression_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_andExpression_DropletFile;
return this;
}
AndExpression_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AndExpression_DropletFileContext.prototype.constructor = AndExpression_DropletFileContext;
AndExpression_DropletFileContext.prototype.equalityExpression = function() {
return this.getTypedRuleContext(EqualityExpressionContext,0);
};
AndExpression_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
AndExpression_DropletFileContext.prototype.andExpression = function() {
return this.getTypedRuleContext(AndExpressionContext,0);
};
AndExpression_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterAndExpression_DropletFile(this);
}
};
AndExpression_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitAndExpression_DropletFile(this);
}
};
CParser.AndExpression_DropletFileContext = AndExpression_DropletFileContext;
CParser.prototype.andExpression_DropletFile = function() {
var localctx = new AndExpression_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 218, CParser.RULE_andExpression_DropletFile);
try {
this.state = 1846;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,160,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1838;
this.equalityExpression(0);
this.state = 1839;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1841;
this.andExpression(0);
this.state = 1842;
this.match(CParser.And);
this.state = 1843;
this.equalityExpression(0);
this.state = 1844;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function ExclusiveOrExpression_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_exclusiveOrExpression_DropletFile;
return this;
}
ExclusiveOrExpression_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ExclusiveOrExpression_DropletFileContext.prototype.constructor = ExclusiveOrExpression_DropletFileContext;
ExclusiveOrExpression_DropletFileContext.prototype.andExpression = function() {
return this.getTypedRuleContext(AndExpressionContext,0);
};
ExclusiveOrExpression_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
ExclusiveOrExpression_DropletFileContext.prototype.exclusiveOrExpression = function() {
return this.getTypedRuleContext(ExclusiveOrExpressionContext,0);
};
ExclusiveOrExpression_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterExclusiveOrExpression_DropletFile(this);
}
};
ExclusiveOrExpression_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitExclusiveOrExpression_DropletFile(this);
}
};
CParser.ExclusiveOrExpression_DropletFileContext = ExclusiveOrExpression_DropletFileContext;
CParser.prototype.exclusiveOrExpression_DropletFile = function() {
var localctx = new ExclusiveOrExpression_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 220, CParser.RULE_exclusiveOrExpression_DropletFile);
try {
this.state = 1856;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,161,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1848;
this.andExpression(0);
this.state = 1849;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1851;
this.exclusiveOrExpression(0);
this.state = 1852;
this.match(CParser.Caret);
this.state = 1853;
this.andExpression(0);
this.state = 1854;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function InclusiveOrExpression_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_inclusiveOrExpression_DropletFile;
return this;
}
InclusiveOrExpression_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
InclusiveOrExpression_DropletFileContext.prototype.constructor = InclusiveOrExpression_DropletFileContext;
InclusiveOrExpression_DropletFileContext.prototype.exclusiveOrExpression = function() {
return this.getTypedRuleContext(ExclusiveOrExpressionContext,0);
};
InclusiveOrExpression_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
InclusiveOrExpression_DropletFileContext.prototype.inclusiveOrExpression = function() {
return this.getTypedRuleContext(InclusiveOrExpressionContext,0);
};
InclusiveOrExpression_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterInclusiveOrExpression_DropletFile(this);
}
};
InclusiveOrExpression_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitInclusiveOrExpression_DropletFile(this);
}
};
CParser.InclusiveOrExpression_DropletFileContext = InclusiveOrExpression_DropletFileContext;
CParser.prototype.inclusiveOrExpression_DropletFile = function() {
var localctx = new InclusiveOrExpression_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 222, CParser.RULE_inclusiveOrExpression_DropletFile);
try {
this.state = 1866;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,162,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1858;
this.exclusiveOrExpression(0);
this.state = 1859;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1861;
this.inclusiveOrExpression(0);
this.state = 1862;
this.match(CParser.Or);
this.state = 1863;
this.exclusiveOrExpression(0);
this.state = 1864;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function LogicalAndExpression_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_logicalAndExpression_DropletFile;
return this;
}
LogicalAndExpression_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
LogicalAndExpression_DropletFileContext.prototype.constructor = LogicalAndExpression_DropletFileContext;
LogicalAndExpression_DropletFileContext.prototype.inclusiveOrExpression = function() {
return this.getTypedRuleContext(InclusiveOrExpressionContext,0);
};
LogicalAndExpression_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
LogicalAndExpression_DropletFileContext.prototype.logicalAndExpression = function() {
return this.getTypedRuleContext(LogicalAndExpressionContext,0);
};
LogicalAndExpression_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterLogicalAndExpression_DropletFile(this);
}
};
LogicalAndExpression_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitLogicalAndExpression_DropletFile(this);
}
};
CParser.LogicalAndExpression_DropletFileContext = LogicalAndExpression_DropletFileContext;
CParser.prototype.logicalAndExpression_DropletFile = function() {
var localctx = new LogicalAndExpression_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 224, CParser.RULE_logicalAndExpression_DropletFile);
try {
this.state = 1876;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,163,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1868;
this.inclusiveOrExpression(0);
this.state = 1869;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1871;
this.logicalAndExpression(0);
this.state = 1872;
this.match(CParser.AndAnd);
this.state = 1873;
this.inclusiveOrExpression(0);
this.state = 1874;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function LogicalOrExpression_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_logicalOrExpression_DropletFile;
return this;
}
LogicalOrExpression_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
LogicalOrExpression_DropletFileContext.prototype.constructor = LogicalOrExpression_DropletFileContext;
LogicalOrExpression_DropletFileContext.prototype.logicalAndExpression = function() {
return this.getTypedRuleContext(LogicalAndExpressionContext,0);
};
LogicalOrExpression_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
LogicalOrExpression_DropletFileContext.prototype.logicalOrExpression = function() {
return this.getTypedRuleContext(LogicalOrExpressionContext,0);
};
LogicalOrExpression_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterLogicalOrExpression_DropletFile(this);
}
};
LogicalOrExpression_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitLogicalOrExpression_DropletFile(this);
}
};
CParser.LogicalOrExpression_DropletFileContext = LogicalOrExpression_DropletFileContext;
CParser.prototype.logicalOrExpression_DropletFile = function() {
var localctx = new LogicalOrExpression_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 226, CParser.RULE_logicalOrExpression_DropletFile);
try {
this.state = 1886;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,164,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1878;
this.logicalAndExpression(0);
this.state = 1879;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1881;
this.logicalOrExpression(0);
this.state = 1882;
this.match(CParser.OrOr);
this.state = 1883;
this.logicalAndExpression(0);
this.state = 1884;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function ConditionalExpression_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_conditionalExpression_DropletFile;
return this;
}
ConditionalExpression_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ConditionalExpression_DropletFileContext.prototype.constructor = ConditionalExpression_DropletFileContext;
ConditionalExpression_DropletFileContext.prototype.logicalOrExpression = function() {
return this.getTypedRuleContext(LogicalOrExpressionContext,0);
};
ConditionalExpression_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
ConditionalExpression_DropletFileContext.prototype.expression = function() {
return this.getTypedRuleContext(ExpressionContext,0);
};
ConditionalExpression_DropletFileContext.prototype.conditionalExpression = function() {
return this.getTypedRuleContext(ConditionalExpressionContext,0);
};
ConditionalExpression_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterConditionalExpression_DropletFile(this);
}
};
ConditionalExpression_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitConditionalExpression_DropletFile(this);
}
};
CParser.ConditionalExpression_DropletFileContext = ConditionalExpression_DropletFileContext;
CParser.prototype.conditionalExpression_DropletFile = function() {
var localctx = new ConditionalExpression_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 228, CParser.RULE_conditionalExpression_DropletFile);
var _la = 0; // Token type
try {
this.enterOuterAlt(localctx, 1);
this.state = 1888;
this.logicalOrExpression(0);
this.state = 1894;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Question) {
this.state = 1889;
this.match(CParser.Question);
this.state = 1890;
this.expression(0);
this.state = 1891;
this.match(CParser.Colon);
this.state = 1892;
this.conditionalExpression();
}
this.state = 1896;
this.match(CParser.EOF);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function AssignmentExpression_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_assignmentExpression_DropletFile;
return this;
}
AssignmentExpression_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AssignmentExpression_DropletFileContext.prototype.constructor = AssignmentExpression_DropletFileContext;
AssignmentExpression_DropletFileContext.prototype.conditionalExpression = function() {
return this.getTypedRuleContext(ConditionalExpressionContext,0);
};
AssignmentExpression_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
AssignmentExpression_DropletFileContext.prototype.unaryExpression = function() {
return this.getTypedRuleContext(UnaryExpressionContext,0);
};
AssignmentExpression_DropletFileContext.prototype.assignmentOperator = function() {
return this.getTypedRuleContext(AssignmentOperatorContext,0);
};
AssignmentExpression_DropletFileContext.prototype.assignmentExpression = function() {
return this.getTypedRuleContext(AssignmentExpressionContext,0);
};
AssignmentExpression_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterAssignmentExpression_DropletFile(this);
}
};
AssignmentExpression_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitAssignmentExpression_DropletFile(this);
}
};
CParser.AssignmentExpression_DropletFileContext = AssignmentExpression_DropletFileContext;
CParser.prototype.assignmentExpression_DropletFile = function() {
var localctx = new AssignmentExpression_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 230, CParser.RULE_assignmentExpression_DropletFile);
try {
this.state = 1906;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,166,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1898;
this.conditionalExpression();
this.state = 1899;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1901;
this.unaryExpression();
this.state = 1902;
this.assignmentOperator();
this.state = 1903;
this.assignmentExpression();
this.state = 1904;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function AssignmentOperator_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_assignmentOperator_DropletFile;
return this;
}
AssignmentOperator_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AssignmentOperator_DropletFileContext.prototype.constructor = AssignmentOperator_DropletFileContext;
AssignmentOperator_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
AssignmentOperator_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterAssignmentOperator_DropletFile(this);
}
};
AssignmentOperator_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitAssignmentOperator_DropletFile(this);
}
};
CParser.AssignmentOperator_DropletFileContext = AssignmentOperator_DropletFileContext;
CParser.prototype.assignmentOperator_DropletFile = function() {
var localctx = new AssignmentOperator_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 232, CParser.RULE_assignmentOperator_DropletFile);
try {
this.state = 1920;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.Assign:
this.enterOuterAlt(localctx, 1);
this.state = 1908;
this.match(CParser.Assign);
break;
case CParser.StarAssign:
this.enterOuterAlt(localctx, 2);
this.state = 1909;
this.match(CParser.StarAssign);
break;
case CParser.DivAssign:
this.enterOuterAlt(localctx, 3);
this.state = 1910;
this.match(CParser.DivAssign);
break;
case CParser.ModAssign:
this.enterOuterAlt(localctx, 4);
this.state = 1911;
this.match(CParser.ModAssign);
break;
case CParser.PlusAssign:
this.enterOuterAlt(localctx, 5);
this.state = 1912;
this.match(CParser.PlusAssign);
break;
case CParser.MinusAssign:
this.enterOuterAlt(localctx, 6);
this.state = 1913;
this.match(CParser.MinusAssign);
break;
case CParser.LeftShiftAssign:
this.enterOuterAlt(localctx, 7);
this.state = 1914;
this.match(CParser.LeftShiftAssign);
break;
case CParser.RightShiftAssign:
this.enterOuterAlt(localctx, 8);
this.state = 1915;
this.match(CParser.RightShiftAssign);
break;
case CParser.AndAssign:
this.enterOuterAlt(localctx, 9);
this.state = 1916;
this.match(CParser.AndAssign);
break;
case CParser.XorAssign:
this.enterOuterAlt(localctx, 10);
this.state = 1917;
this.match(CParser.XorAssign);
break;
case CParser.OrAssign:
this.enterOuterAlt(localctx, 11);
this.state = 1918;
this.match(CParser.OrAssign);
this.state = 1919;
this.match(CParser.EOF);
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function Expression_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_expression_DropletFile;
return this;
}
Expression_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Expression_DropletFileContext.prototype.constructor = Expression_DropletFileContext;
Expression_DropletFileContext.prototype.assignmentExpression = function() {
return this.getTypedRuleContext(AssignmentExpressionContext,0);
};
Expression_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
Expression_DropletFileContext.prototype.expression = function() {
return this.getTypedRuleContext(ExpressionContext,0);
};
Expression_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterExpression_DropletFile(this);
}
};
Expression_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitExpression_DropletFile(this);
}
};
CParser.Expression_DropletFileContext = Expression_DropletFileContext;
CParser.prototype.expression_DropletFile = function() {
var localctx = new Expression_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 234, CParser.RULE_expression_DropletFile);
try {
this.state = 1930;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,168,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1922;
this.assignmentExpression();
this.state = 1923;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1925;
this.expression(0);
this.state = 1926;
this.match(CParser.Comma);
this.state = 1927;
this.assignmentExpression();
this.state = 1928;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function ConstantExpression_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_constantExpression_DropletFile;
return this;
}
ConstantExpression_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ConstantExpression_DropletFileContext.prototype.constructor = ConstantExpression_DropletFileContext;
ConstantExpression_DropletFileContext.prototype.conditionalExpression = function() {
return this.getTypedRuleContext(ConditionalExpressionContext,0);
};
ConstantExpression_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
ConstantExpression_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterConstantExpression_DropletFile(this);
}
};
ConstantExpression_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitConstantExpression_DropletFile(this);
}
};
CParser.ConstantExpression_DropletFileContext = ConstantExpression_DropletFileContext;
CParser.prototype.constantExpression_DropletFile = function() {
var localctx = new ConstantExpression_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 236, CParser.RULE_constantExpression_DropletFile);
try {
this.enterOuterAlt(localctx, 1);
this.state = 1932;
this.conditionalExpression();
this.state = 1933;
this.match(CParser.EOF);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function Declaration_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_declaration_DropletFile;
return this;
}
Declaration_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Declaration_DropletFileContext.prototype.constructor = Declaration_DropletFileContext;
Declaration_DropletFileContext.prototype.specialFunctionDeclaration = function() {
return this.getTypedRuleContext(SpecialFunctionDeclarationContext,0);
};
Declaration_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
Declaration_DropletFileContext.prototype.declarationSpecifiers = function() {
return this.getTypedRuleContext(DeclarationSpecifiersContext,0);
};
Declaration_DropletFileContext.prototype.initDeclaratorList = function() {
return this.getTypedRuleContext(InitDeclaratorListContext,0);
};
Declaration_DropletFileContext.prototype.staticAssertDeclaration = function() {
return this.getTypedRuleContext(StaticAssertDeclarationContext,0);
};
Declaration_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterDeclaration_DropletFile(this);
}
};
Declaration_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitDeclaration_DropletFile(this);
}
};
CParser.Declaration_DropletFileContext = Declaration_DropletFileContext;
CParser.prototype.declaration_DropletFile = function() {
var localctx = new Declaration_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 238, CParser.RULE_declaration_DropletFile);
try {
this.state = 1950;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,169,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1935;
this.specialFunctionDeclaration();
this.state = 1936;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1938;
this.declarationSpecifiers();
this.state = 1939;
this.initDeclaratorList(0);
this.state = 1940;
this.match(CParser.Semi);
this.state = 1941;
this.match(CParser.EOF);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 1943;
this.declarationSpecifiers();
this.state = 1944;
this.match(CParser.Semi);
this.state = 1945;
this.match(CParser.EOF);
break;
case 4:
this.enterOuterAlt(localctx, 4);
this.state = 1947;
this.staticAssertDeclaration();
this.state = 1948;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function SpecialFunctionDeclaration_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_specialFunctionDeclaration_DropletFile;
return this;
}
SpecialFunctionDeclaration_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SpecialFunctionDeclaration_DropletFileContext.prototype.constructor = SpecialFunctionDeclaration_DropletFileContext;
SpecialFunctionDeclaration_DropletFileContext.prototype.declarationSpecifiers = function() {
return this.getTypedRuleContext(DeclarationSpecifiersContext,0);
};
SpecialFunctionDeclaration_DropletFileContext.prototype.directDeclarator = function() {
return this.getTypedRuleContext(DirectDeclaratorContext,0);
};
SpecialFunctionDeclaration_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
SpecialFunctionDeclaration_DropletFileContext.prototype.parameterTypeList = function() {
return this.getTypedRuleContext(ParameterTypeListContext,0);
};
SpecialFunctionDeclaration_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterSpecialFunctionDeclaration_DropletFile(this);
}
};
SpecialFunctionDeclaration_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitSpecialFunctionDeclaration_DropletFile(this);
}
};
CParser.SpecialFunctionDeclaration_DropletFileContext = SpecialFunctionDeclaration_DropletFileContext;
CParser.prototype.specialFunctionDeclaration_DropletFile = function() {
var localctx = new SpecialFunctionDeclaration_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 240, CParser.RULE_specialFunctionDeclaration_DropletFile);
var _la = 0; // Token type
try {
this.enterOuterAlt(localctx, 1);
this.state = 1952;
this.declarationSpecifiers();
this.state = 1953;
this.directDeclarator(0);
this.state = 1954;
this.match(CParser.LeftParen);
this.state = 1956;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__3) | (1 << CParser.T__4) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__11) | (1 << CParser.Auto) | (1 << CParser.Char) | (1 << CParser.Const) | (1 << CParser.Double) | (1 << CParser.Enum) | (1 << CParser.Extern) | (1 << CParser.Float) | (1 << CParser.Inline))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (CParser.Int - 32)) | (1 << (CParser.Long - 32)) | (1 << (CParser.Register - 32)) | (1 << (CParser.Restrict - 32)) | (1 << (CParser.Short - 32)) | (1 << (CParser.Signed - 32)) | (1 << (CParser.Static - 32)) | (1 << (CParser.Struct - 32)) | (1 << (CParser.Typedef - 32)) | (1 << (CParser.Union - 32)) | (1 << (CParser.Unsigned - 32)) | (1 << (CParser.Void - 32)) | (1 << (CParser.Volatile - 32)) | (1 << (CParser.Alignas - 32)) | (1 << (CParser.Atomic - 32)) | (1 << (CParser.Bool - 32)) | (1 << (CParser.Complex - 32)) | (1 << (CParser.Noreturn - 32)) | (1 << (CParser.ThreadLocal - 32)))) !== 0) || _la===CParser.Identifier) {
this.state = 1955;
this.parameterTypeList();
}
this.state = 1958;
this.match(CParser.RightParen);
this.state = 1959;
this.match(CParser.Semi);
this.state = 1960;
this.match(CParser.EOF);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function DeclarationSpecifiers_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_declarationSpecifiers_DropletFile;
return this;
}
DeclarationSpecifiers_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DeclarationSpecifiers_DropletFileContext.prototype.constructor = DeclarationSpecifiers_DropletFileContext;
DeclarationSpecifiers_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
DeclarationSpecifiers_DropletFileContext.prototype.declarationSpecifier = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTypedRuleContexts(DeclarationSpecifierContext);
} else {
return this.getTypedRuleContext(DeclarationSpecifierContext,i);
}
};
DeclarationSpecifiers_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterDeclarationSpecifiers_DropletFile(this);
}
};
DeclarationSpecifiers_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitDeclarationSpecifiers_DropletFile(this);
}
};
CParser.DeclarationSpecifiers_DropletFileContext = DeclarationSpecifiers_DropletFileContext;
CParser.prototype.declarationSpecifiers_DropletFile = function() {
var localctx = new DeclarationSpecifiers_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 242, CParser.RULE_declarationSpecifiers_DropletFile);
var _la = 0; // Token type
try {
this.enterOuterAlt(localctx, 1);
this.state = 1963;
this._errHandler.sync(this);
_la = this._input.LA(1);
do {
this.state = 1962;
this.declarationSpecifier();
this.state = 1965;
this._errHandler.sync(this);
_la = this._input.LA(1);
} while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__3) | (1 << CParser.T__4) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__11) | (1 << CParser.Auto) | (1 << CParser.Char) | (1 << CParser.Const) | (1 << CParser.Double) | (1 << CParser.Enum) | (1 << CParser.Extern) | (1 << CParser.Float) | (1 << CParser.Inline))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (CParser.Int - 32)) | (1 << (CParser.Long - 32)) | (1 << (CParser.Register - 32)) | (1 << (CParser.Restrict - 32)) | (1 << (CParser.Short - 32)) | (1 << (CParser.Signed - 32)) | (1 << (CParser.Static - 32)) | (1 << (CParser.Struct - 32)) | (1 << (CParser.Typedef - 32)) | (1 << (CParser.Union - 32)) | (1 << (CParser.Unsigned - 32)) | (1 << (CParser.Void - 32)) | (1 << (CParser.Volatile - 32)) | (1 << (CParser.Alignas - 32)) | (1 << (CParser.Atomic - 32)) | (1 << (CParser.Bool - 32)) | (1 << (CParser.Complex - 32)) | (1 << (CParser.Noreturn - 32)) | (1 << (CParser.ThreadLocal - 32)))) !== 0) || _la===CParser.Identifier);
this.state = 1967;
this.match(CParser.EOF);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function DeclarationSpecifiers2_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_declarationSpecifiers2_DropletFile;
return this;
}
DeclarationSpecifiers2_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DeclarationSpecifiers2_DropletFileContext.prototype.constructor = DeclarationSpecifiers2_DropletFileContext;
DeclarationSpecifiers2_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
DeclarationSpecifiers2_DropletFileContext.prototype.declarationSpecifier = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTypedRuleContexts(DeclarationSpecifierContext);
} else {
return this.getTypedRuleContext(DeclarationSpecifierContext,i);
}
};
DeclarationSpecifiers2_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterDeclarationSpecifiers2_DropletFile(this);
}
};
DeclarationSpecifiers2_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitDeclarationSpecifiers2_DropletFile(this);
}
};
CParser.DeclarationSpecifiers2_DropletFileContext = DeclarationSpecifiers2_DropletFileContext;
CParser.prototype.declarationSpecifiers2_DropletFile = function() {
var localctx = new DeclarationSpecifiers2_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 244, CParser.RULE_declarationSpecifiers2_DropletFile);
var _la = 0; // Token type
try {
this.enterOuterAlt(localctx, 1);
this.state = 1970;
this._errHandler.sync(this);
_la = this._input.LA(1);
do {
this.state = 1969;
this.declarationSpecifier();
this.state = 1972;
this._errHandler.sync(this);
_la = this._input.LA(1);
} while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__3) | (1 << CParser.T__4) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__11) | (1 << CParser.Auto) | (1 << CParser.Char) | (1 << CParser.Const) | (1 << CParser.Double) | (1 << CParser.Enum) | (1 << CParser.Extern) | (1 << CParser.Float) | (1 << CParser.Inline))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (CParser.Int - 32)) | (1 << (CParser.Long - 32)) | (1 << (CParser.Register - 32)) | (1 << (CParser.Restrict - 32)) | (1 << (CParser.Short - 32)) | (1 << (CParser.Signed - 32)) | (1 << (CParser.Static - 32)) | (1 << (CParser.Struct - 32)) | (1 << (CParser.Typedef - 32)) | (1 << (CParser.Union - 32)) | (1 << (CParser.Unsigned - 32)) | (1 << (CParser.Void - 32)) | (1 << (CParser.Volatile - 32)) | (1 << (CParser.Alignas - 32)) | (1 << (CParser.Atomic - 32)) | (1 << (CParser.Bool - 32)) | (1 << (CParser.Complex - 32)) | (1 << (CParser.Noreturn - 32)) | (1 << (CParser.ThreadLocal - 32)))) !== 0) || _la===CParser.Identifier);
this.state = 1974;
this.match(CParser.EOF);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function DeclarationSpecifier_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_declarationSpecifier_DropletFile;
return this;
}
DeclarationSpecifier_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DeclarationSpecifier_DropletFileContext.prototype.constructor = DeclarationSpecifier_DropletFileContext;
DeclarationSpecifier_DropletFileContext.prototype.storageClassSpecifier = function() {
return this.getTypedRuleContext(StorageClassSpecifierContext,0);
};
DeclarationSpecifier_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
DeclarationSpecifier_DropletFileContext.prototype.typeSpecifier = function() {
return this.getTypedRuleContext(TypeSpecifierContext,0);
};
DeclarationSpecifier_DropletFileContext.prototype.typeQualifier = function() {
return this.getTypedRuleContext(TypeQualifierContext,0);
};
DeclarationSpecifier_DropletFileContext.prototype.functionSpecifier = function() {
return this.getTypedRuleContext(FunctionSpecifierContext,0);
};
DeclarationSpecifier_DropletFileContext.prototype.alignmentSpecifier = function() {
return this.getTypedRuleContext(AlignmentSpecifierContext,0);
};
DeclarationSpecifier_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterDeclarationSpecifier_DropletFile(this);
}
};
DeclarationSpecifier_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitDeclarationSpecifier_DropletFile(this);
}
};
CParser.DeclarationSpecifier_DropletFileContext = DeclarationSpecifier_DropletFileContext;
CParser.prototype.declarationSpecifier_DropletFile = function() {
var localctx = new DeclarationSpecifier_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 246, CParser.RULE_declarationSpecifier_DropletFile);
try {
this.state = 1991;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,173,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1976;
this.storageClassSpecifier();
this.state = 1977;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1979;
this.typeSpecifier();
this.state = 1980;
this.match(CParser.EOF);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 1982;
this.typeQualifier();
this.state = 1983;
this.match(CParser.EOF);
break;
case 4:
this.enterOuterAlt(localctx, 4);
this.state = 1985;
this.functionSpecifier();
this.state = 1986;
this.match(CParser.EOF);
break;
case 5:
this.enterOuterAlt(localctx, 5);
this.state = 1988;
this.alignmentSpecifier();
this.state = 1989;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function InitDeclaratorList_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_initDeclaratorList_DropletFile;
return this;
}
InitDeclaratorList_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
InitDeclaratorList_DropletFileContext.prototype.constructor = InitDeclaratorList_DropletFileContext;
InitDeclaratorList_DropletFileContext.prototype.initDeclarator = function() {
return this.getTypedRuleContext(InitDeclaratorContext,0);
};
InitDeclaratorList_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
InitDeclaratorList_DropletFileContext.prototype.initDeclaratorList = function() {
return this.getTypedRuleContext(InitDeclaratorListContext,0);
};
InitDeclaratorList_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterInitDeclaratorList_DropletFile(this);
}
};
InitDeclaratorList_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitInitDeclaratorList_DropletFile(this);
}
};
CParser.InitDeclaratorList_DropletFileContext = InitDeclaratorList_DropletFileContext;
CParser.prototype.initDeclaratorList_DropletFile = function() {
var localctx = new InitDeclaratorList_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 248, CParser.RULE_initDeclaratorList_DropletFile);
try {
this.state = 2001;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,174,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 1993;
this.initDeclarator();
this.state = 1994;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 1996;
this.initDeclaratorList(0);
this.state = 1997;
this.match(CParser.Comma);
this.state = 1998;
this.initDeclarator();
this.state = 1999;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function InitDeclarator_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_initDeclarator_DropletFile;
return this;
}
InitDeclarator_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
InitDeclarator_DropletFileContext.prototype.constructor = InitDeclarator_DropletFileContext;
InitDeclarator_DropletFileContext.prototype.declarator = function() {
return this.getTypedRuleContext(DeclaratorContext,0);
};
InitDeclarator_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
InitDeclarator_DropletFileContext.prototype.initializer = function() {
return this.getTypedRuleContext(InitializerContext,0);
};
InitDeclarator_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterInitDeclarator_DropletFile(this);
}
};
InitDeclarator_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitInitDeclarator_DropletFile(this);
}
};
CParser.InitDeclarator_DropletFileContext = InitDeclarator_DropletFileContext;
CParser.prototype.initDeclarator_DropletFile = function() {
var localctx = new InitDeclarator_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 250, CParser.RULE_initDeclarator_DropletFile);
try {
this.state = 2011;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,175,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2003;
this.declarator();
this.state = 2004;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2006;
this.declarator();
this.state = 2007;
this.match(CParser.Assign);
this.state = 2008;
this.initializer();
this.state = 2009;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function StorageClassSpecifier_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_storageClassSpecifier_DropletFile;
return this;
}
StorageClassSpecifier_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StorageClassSpecifier_DropletFileContext.prototype.constructor = StorageClassSpecifier_DropletFileContext;
StorageClassSpecifier_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
StorageClassSpecifier_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterStorageClassSpecifier_DropletFile(this);
}
};
StorageClassSpecifier_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitStorageClassSpecifier_DropletFile(this);
}
};
CParser.StorageClassSpecifier_DropletFileContext = StorageClassSpecifier_DropletFileContext;
CParser.prototype.storageClassSpecifier_DropletFile = function() {
var localctx = new StorageClassSpecifier_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 252, CParser.RULE_storageClassSpecifier_DropletFile);
try {
this.state = 2025;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.Typedef:
this.enterOuterAlt(localctx, 1);
this.state = 2013;
this.match(CParser.Typedef);
this.state = 2014;
this.match(CParser.EOF);
break;
case CParser.Extern:
this.enterOuterAlt(localctx, 2);
this.state = 2015;
this.match(CParser.Extern);
this.state = 2016;
this.match(CParser.EOF);
break;
case CParser.Static:
this.enterOuterAlt(localctx, 3);
this.state = 2017;
this.match(CParser.Static);
this.state = 2018;
this.match(CParser.EOF);
break;
case CParser.ThreadLocal:
this.enterOuterAlt(localctx, 4);
this.state = 2019;
this.match(CParser.ThreadLocal);
this.state = 2020;
this.match(CParser.EOF);
break;
case CParser.Auto:
this.enterOuterAlt(localctx, 5);
this.state = 2021;
this.match(CParser.Auto);
this.state = 2022;
this.match(CParser.EOF);
break;
case CParser.Register:
this.enterOuterAlt(localctx, 6);
this.state = 2023;
this.match(CParser.Register);
this.state = 2024;
this.match(CParser.EOF);
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function TypeSpecifier_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_typeSpecifier_DropletFile;
return this;
}
TypeSpecifier_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TypeSpecifier_DropletFileContext.prototype.constructor = TypeSpecifier_DropletFileContext;
TypeSpecifier_DropletFileContext.prototype.EOF = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTokens(CParser.EOF);
} else {
return this.getToken(CParser.EOF, i);
}
};
TypeSpecifier_DropletFileContext.prototype.atomicTypeSpecifier = function() {
return this.getTypedRuleContext(AtomicTypeSpecifierContext,0);
};
TypeSpecifier_DropletFileContext.prototype.structOrUnionSpecifier = function() {
return this.getTypedRuleContext(StructOrUnionSpecifierContext,0);
};
TypeSpecifier_DropletFileContext.prototype.enumSpecifier = function() {
return this.getTypedRuleContext(EnumSpecifierContext,0);
};
TypeSpecifier_DropletFileContext.prototype.typedefName = function() {
return this.getTypedRuleContext(TypedefNameContext,0);
};
TypeSpecifier_DropletFileContext.prototype.constantExpression = function() {
return this.getTypedRuleContext(ConstantExpressionContext,0);
};
TypeSpecifier_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterTypeSpecifier_DropletFile(this);
}
};
TypeSpecifier_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitTypeSpecifier_DropletFile(this);
}
};
CParser.TypeSpecifier_DropletFileContext = TypeSpecifier_DropletFileContext;
CParser.prototype.typeSpecifier_DropletFile = function() {
var localctx = new TypeSpecifier_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 254, CParser.RULE_typeSpecifier_DropletFile);
var _la = 0; // Token type
try {
this.state = 2079;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.T__3:
case CParser.T__4:
case CParser.T__5:
case CParser.Char:
case CParser.Double:
case CParser.Float:
case CParser.Int:
case CParser.Long:
case CParser.Short:
case CParser.Signed:
case CParser.Unsigned:
case CParser.Void:
case CParser.Bool:
case CParser.Complex:
this.enterOuterAlt(localctx, 1);
this.state = 2054;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.Void:
this.state = 2027;
this.match(CParser.Void);
this.state = 2028;
this.match(CParser.EOF);
break;
case CParser.Char:
this.state = 2029;
this.match(CParser.Char);
this.state = 2030;
this.match(CParser.EOF);
break;
case CParser.Short:
this.state = 2031;
this.match(CParser.Short);
this.state = 2032;
this.match(CParser.EOF);
break;
case CParser.Int:
this.state = 2033;
this.match(CParser.Int);
this.state = 2034;
this.match(CParser.EOF);
break;
case CParser.Long:
this.state = 2035;
this.match(CParser.Long);
this.state = 2036;
this.match(CParser.EOF);
break;
case CParser.Float:
this.state = 2037;
this.match(CParser.Float);
this.state = 2038;
this.match(CParser.EOF);
break;
case CParser.Double:
this.state = 2039;
this.match(CParser.Double);
this.state = 2040;
this.match(CParser.EOF);
break;
case CParser.Signed:
this.state = 2041;
this.match(CParser.Signed);
this.state = 2042;
this.match(CParser.EOF);
break;
case CParser.Unsigned:
this.state = 2043;
this.match(CParser.Unsigned);
this.state = 2044;
this.match(CParser.EOF);
break;
case CParser.Bool:
this.state = 2045;
this.match(CParser.Bool);
this.state = 2046;
this.match(CParser.EOF);
break;
case CParser.Complex:
this.state = 2047;
this.match(CParser.Complex);
this.state = 2048;
this.match(CParser.EOF);
break;
case CParser.T__3:
this.state = 2049;
this.match(CParser.T__3);
this.state = 2050;
this.match(CParser.EOF);
break;
case CParser.T__4:
this.state = 2051;
this.match(CParser.T__4);
this.state = 2052;
this.match(CParser.EOF);
break;
case CParser.T__5:
this.state = 2053;
this.match(CParser.T__5);
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
this.state = 2056;
this.match(CParser.EOF);
break;
case CParser.T__0:
this.enterOuterAlt(localctx, 2);
this.state = 2057;
this.match(CParser.T__0);
this.state = 2058;
this.match(CParser.LeftParen);
this.state = 2059;
_la = this._input.LA(1);
if(!((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__3) | (1 << CParser.T__4) | (1 << CParser.T__5))) !== 0))) {
this._errHandler.recoverInline(this);
}
else {
this._errHandler.reportMatch(this);
this.consume();
}
this.state = 2060;
this.match(CParser.RightParen);
this.state = 2061;
this.match(CParser.EOF);
break;
case CParser.Atomic:
this.enterOuterAlt(localctx, 3);
this.state = 2062;
this.atomicTypeSpecifier();
this.state = 2063;
this.match(CParser.EOF);
break;
case CParser.Struct:
case CParser.Union:
this.enterOuterAlt(localctx, 4);
this.state = 2065;
this.structOrUnionSpecifier();
this.state = 2066;
this.match(CParser.EOF);
break;
case CParser.Enum:
this.enterOuterAlt(localctx, 5);
this.state = 2068;
this.enumSpecifier();
this.state = 2069;
this.match(CParser.EOF);
break;
case CParser.Identifier:
this.enterOuterAlt(localctx, 6);
this.state = 2071;
this.typedefName();
this.state = 2072;
this.match(CParser.EOF);
break;
case CParser.T__6:
this.enterOuterAlt(localctx, 7);
this.state = 2074;
this.match(CParser.T__6);
this.state = 2075;
this.match(CParser.LeftParen);
this.state = 2076;
this.constantExpression();
this.state = 2077;
this.match(CParser.RightParen);
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function StructOrUnionSpecifier_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_structOrUnionSpecifier_DropletFile;
return this;
}
StructOrUnionSpecifier_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StructOrUnionSpecifier_DropletFileContext.prototype.constructor = StructOrUnionSpecifier_DropletFileContext;
StructOrUnionSpecifier_DropletFileContext.prototype.structOrUnion = function() {
return this.getTypedRuleContext(StructOrUnionContext,0);
};
StructOrUnionSpecifier_DropletFileContext.prototype.structDeclarationsBlock = function() {
return this.getTypedRuleContext(StructDeclarationsBlockContext,0);
};
StructOrUnionSpecifier_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
StructOrUnionSpecifier_DropletFileContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
StructOrUnionSpecifier_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterStructOrUnionSpecifier_DropletFile(this);
}
};
StructOrUnionSpecifier_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitStructOrUnionSpecifier_DropletFile(this);
}
};
CParser.StructOrUnionSpecifier_DropletFileContext = StructOrUnionSpecifier_DropletFileContext;
CParser.prototype.structOrUnionSpecifier_DropletFile = function() {
var localctx = new StructOrUnionSpecifier_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 256, CParser.RULE_structOrUnionSpecifier_DropletFile);
var _la = 0; // Token type
try {
this.state = 2092;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,180,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2081;
this.structOrUnion();
this.state = 2083;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Identifier) {
this.state = 2082;
this.match(CParser.Identifier);
}
this.state = 2085;
this.structDeclarationsBlock();
this.state = 2086;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2088;
this.structOrUnion();
this.state = 2089;
this.match(CParser.Identifier);
this.state = 2090;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function StructOrUnion_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_structOrUnion_DropletFile;
return this;
}
StructOrUnion_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StructOrUnion_DropletFileContext.prototype.constructor = StructOrUnion_DropletFileContext;
StructOrUnion_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
StructOrUnion_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterStructOrUnion_DropletFile(this);
}
};
StructOrUnion_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitStructOrUnion_DropletFile(this);
}
};
CParser.StructOrUnion_DropletFileContext = StructOrUnion_DropletFileContext;
CParser.prototype.structOrUnion_DropletFile = function() {
var localctx = new StructOrUnion_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 258, CParser.RULE_structOrUnion_DropletFile);
try {
this.state = 2098;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.Struct:
this.enterOuterAlt(localctx, 1);
this.state = 2094;
this.match(CParser.Struct);
this.state = 2095;
this.match(CParser.EOF);
break;
case CParser.Union:
this.enterOuterAlt(localctx, 2);
this.state = 2096;
this.match(CParser.Union);
this.state = 2097;
this.match(CParser.EOF);
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function StructDeclarationsBlock_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_structDeclarationsBlock_DropletFile;
return this;
}
StructDeclarationsBlock_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StructDeclarationsBlock_DropletFileContext.prototype.constructor = StructDeclarationsBlock_DropletFileContext;
StructDeclarationsBlock_DropletFileContext.prototype.structDeclarationList = function() {
return this.getTypedRuleContext(StructDeclarationListContext,0);
};
StructDeclarationsBlock_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
StructDeclarationsBlock_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterStructDeclarationsBlock_DropletFile(this);
}
};
StructDeclarationsBlock_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitStructDeclarationsBlock_DropletFile(this);
}
};
CParser.StructDeclarationsBlock_DropletFileContext = StructDeclarationsBlock_DropletFileContext;
CParser.prototype.structDeclarationsBlock_DropletFile = function() {
var localctx = new StructDeclarationsBlock_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 260, CParser.RULE_structDeclarationsBlock_DropletFile);
try {
this.enterOuterAlt(localctx, 1);
this.state = 2100;
this.match(CParser.LeftBrace);
this.state = 2101;
this.structDeclarationList(0);
this.state = 2102;
this.match(CParser.RightBrace);
this.state = 2103;
this.match(CParser.EOF);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function StructDeclarationList_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_structDeclarationList_DropletFile;
return this;
}
StructDeclarationList_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StructDeclarationList_DropletFileContext.prototype.constructor = StructDeclarationList_DropletFileContext;
StructDeclarationList_DropletFileContext.prototype.structDeclaration = function() {
return this.getTypedRuleContext(StructDeclarationContext,0);
};
StructDeclarationList_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
StructDeclarationList_DropletFileContext.prototype.structDeclarationList = function() {
return this.getTypedRuleContext(StructDeclarationListContext,0);
};
StructDeclarationList_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterStructDeclarationList_DropletFile(this);
}
};
StructDeclarationList_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitStructDeclarationList_DropletFile(this);
}
};
CParser.StructDeclarationList_DropletFileContext = StructDeclarationList_DropletFileContext;
CParser.prototype.structDeclarationList_DropletFile = function() {
var localctx = new StructDeclarationList_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 262, CParser.RULE_structDeclarationList_DropletFile);
try {
this.state = 2112;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,182,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2105;
this.structDeclaration();
this.state = 2106;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2108;
this.structDeclarationList(0);
this.state = 2109;
this.structDeclaration();
this.state = 2110;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function StructDeclaration_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_structDeclaration_DropletFile;
return this;
}
StructDeclaration_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StructDeclaration_DropletFileContext.prototype.constructor = StructDeclaration_DropletFileContext;
StructDeclaration_DropletFileContext.prototype.structDeclaratorList = function() {
return this.getTypedRuleContext(StructDeclaratorListContext,0);
};
StructDeclaration_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
StructDeclaration_DropletFileContext.prototype.specifierQualifierList = function() {
return this.getTypedRuleContext(SpecifierQualifierListContext,0);
};
StructDeclaration_DropletFileContext.prototype.staticAssertDeclaration = function() {
return this.getTypedRuleContext(StaticAssertDeclarationContext,0);
};
StructDeclaration_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterStructDeclaration_DropletFile(this);
}
};
StructDeclaration_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitStructDeclaration_DropletFile(this);
}
};
CParser.StructDeclaration_DropletFileContext = StructDeclaration_DropletFileContext;
CParser.prototype.structDeclaration_DropletFile = function() {
var localctx = new StructDeclaration_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 264, CParser.RULE_structDeclaration_DropletFile);
try {
this.state = 2124;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.T__0:
case CParser.T__3:
case CParser.T__4:
case CParser.T__5:
case CParser.T__6:
case CParser.Char:
case CParser.Const:
case CParser.Double:
case CParser.Enum:
case CParser.Float:
case CParser.Int:
case CParser.Long:
case CParser.Restrict:
case CParser.Short:
case CParser.Signed:
case CParser.Struct:
case CParser.Union:
case CParser.Unsigned:
case CParser.Void:
case CParser.Volatile:
case CParser.Atomic:
case CParser.Bool:
case CParser.Complex:
case CParser.LeftParen:
case CParser.Star:
case CParser.Caret:
case CParser.Colon:
case CParser.Identifier:
this.enterOuterAlt(localctx, 1);
this.state = 2115;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,183,this._ctx);
if(la_===1) {
this.state = 2114;
this.specifierQualifierList();
}
this.state = 2117;
this.structDeclaratorList(0);
this.state = 2118;
this.match(CParser.Semi);
this.state = 2119;
this.match(CParser.EOF);
break;
case CParser.StaticAssert:
this.enterOuterAlt(localctx, 2);
this.state = 2121;
this.staticAssertDeclaration();
this.state = 2122;
this.match(CParser.EOF);
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function SpecifierQualifierList_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_specifierQualifierList_DropletFile;
return this;
}
SpecifierQualifierList_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SpecifierQualifierList_DropletFileContext.prototype.constructor = SpecifierQualifierList_DropletFileContext;
SpecifierQualifierList_DropletFileContext.prototype.typeSpecifier = function() {
return this.getTypedRuleContext(TypeSpecifierContext,0);
};
SpecifierQualifierList_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
SpecifierQualifierList_DropletFileContext.prototype.specifierQualifierList = function() {
return this.getTypedRuleContext(SpecifierQualifierListContext,0);
};
SpecifierQualifierList_DropletFileContext.prototype.typeQualifier = function() {
return this.getTypedRuleContext(TypeQualifierContext,0);
};
SpecifierQualifierList_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterSpecifierQualifierList_DropletFile(this);
}
};
SpecifierQualifierList_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitSpecifierQualifierList_DropletFile(this);
}
};
CParser.SpecifierQualifierList_DropletFileContext = SpecifierQualifierList_DropletFileContext;
CParser.prototype.specifierQualifierList_DropletFile = function() {
var localctx = new SpecifierQualifierList_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 266, CParser.RULE_specifierQualifierList_DropletFile);
var _la = 0; // Token type
try {
this.state = 2138;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,187,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2126;
this.typeSpecifier();
this.state = 2128;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__3) | (1 << CParser.T__4) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.Char) | (1 << CParser.Const) | (1 << CParser.Double) | (1 << CParser.Enum) | (1 << CParser.Float))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (CParser.Int - 32)) | (1 << (CParser.Long - 32)) | (1 << (CParser.Restrict - 32)) | (1 << (CParser.Short - 32)) | (1 << (CParser.Signed - 32)) | (1 << (CParser.Struct - 32)) | (1 << (CParser.Union - 32)) | (1 << (CParser.Unsigned - 32)) | (1 << (CParser.Void - 32)) | (1 << (CParser.Volatile - 32)) | (1 << (CParser.Atomic - 32)) | (1 << (CParser.Bool - 32)) | (1 << (CParser.Complex - 32)))) !== 0) || _la===CParser.Identifier) {
this.state = 2127;
this.specifierQualifierList();
}
this.state = 2130;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2132;
this.typeQualifier();
this.state = 2134;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__3) | (1 << CParser.T__4) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.Char) | (1 << CParser.Const) | (1 << CParser.Double) | (1 << CParser.Enum) | (1 << CParser.Float))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (CParser.Int - 32)) | (1 << (CParser.Long - 32)) | (1 << (CParser.Restrict - 32)) | (1 << (CParser.Short - 32)) | (1 << (CParser.Signed - 32)) | (1 << (CParser.Struct - 32)) | (1 << (CParser.Union - 32)) | (1 << (CParser.Unsigned - 32)) | (1 << (CParser.Void - 32)) | (1 << (CParser.Volatile - 32)) | (1 << (CParser.Atomic - 32)) | (1 << (CParser.Bool - 32)) | (1 << (CParser.Complex - 32)))) !== 0) || _la===CParser.Identifier) {
this.state = 2133;
this.specifierQualifierList();
}
this.state = 2136;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function StructDeclaratorList_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_structDeclaratorList_DropletFile;
return this;
}
StructDeclaratorList_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StructDeclaratorList_DropletFileContext.prototype.constructor = StructDeclaratorList_DropletFileContext;
StructDeclaratorList_DropletFileContext.prototype.structDeclarator = function() {
return this.getTypedRuleContext(StructDeclaratorContext,0);
};
StructDeclaratorList_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
StructDeclaratorList_DropletFileContext.prototype.structDeclaratorList = function() {
return this.getTypedRuleContext(StructDeclaratorListContext,0);
};
StructDeclaratorList_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterStructDeclaratorList_DropletFile(this);
}
};
StructDeclaratorList_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitStructDeclaratorList_DropletFile(this);
}
};
CParser.StructDeclaratorList_DropletFileContext = StructDeclaratorList_DropletFileContext;
CParser.prototype.structDeclaratorList_DropletFile = function() {
var localctx = new StructDeclaratorList_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 268, CParser.RULE_structDeclaratorList_DropletFile);
try {
this.state = 2148;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,188,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2140;
this.structDeclarator();
this.state = 2141;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2143;
this.structDeclaratorList(0);
this.state = 2144;
this.match(CParser.Comma);
this.state = 2145;
this.structDeclarator();
this.state = 2146;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function StructDeclarator_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_structDeclarator_DropletFile;
return this;
}
StructDeclarator_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StructDeclarator_DropletFileContext.prototype.constructor = StructDeclarator_DropletFileContext;
StructDeclarator_DropletFileContext.prototype.declarator = function() {
return this.getTypedRuleContext(DeclaratorContext,0);
};
StructDeclarator_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
StructDeclarator_DropletFileContext.prototype.constantExpression = function() {
return this.getTypedRuleContext(ConstantExpressionContext,0);
};
StructDeclarator_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterStructDeclarator_DropletFile(this);
}
};
StructDeclarator_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitStructDeclarator_DropletFile(this);
}
};
CParser.StructDeclarator_DropletFileContext = StructDeclarator_DropletFileContext;
CParser.prototype.structDeclarator_DropletFile = function() {
var localctx = new StructDeclarator_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 270, CParser.RULE_structDeclarator_DropletFile);
var _la = 0; // Token type
try {
this.state = 2160;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,190,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2150;
this.declarator();
this.state = 2151;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2154;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(((((_la - 59)) & ~0x1f) == 0 && ((1 << (_la - 59)) & ((1 << (CParser.LeftParen - 59)) | (1 << (CParser.Star - 59)) | (1 << (CParser.Caret - 59)))) !== 0) || _la===CParser.Identifier) {
this.state = 2153;
this.declarator();
}
this.state = 2156;
this.match(CParser.Colon);
this.state = 2157;
this.constantExpression();
this.state = 2158;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function EnumSpecifier_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_enumSpecifier_DropletFile;
return this;
}
EnumSpecifier_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
EnumSpecifier_DropletFileContext.prototype.constructor = EnumSpecifier_DropletFileContext;
EnumSpecifier_DropletFileContext.prototype.enumeratorList = function() {
return this.getTypedRuleContext(EnumeratorListContext,0);
};
EnumSpecifier_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
EnumSpecifier_DropletFileContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
EnumSpecifier_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterEnumSpecifier_DropletFile(this);
}
};
EnumSpecifier_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitEnumSpecifier_DropletFile(this);
}
};
CParser.EnumSpecifier_DropletFileContext = EnumSpecifier_DropletFileContext;
CParser.prototype.enumSpecifier_DropletFile = function() {
var localctx = new EnumSpecifier_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 272, CParser.RULE_enumSpecifier_DropletFile);
var _la = 0; // Token type
try {
this.state = 2184;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,193,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2162;
this.match(CParser.Enum);
this.state = 2164;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Identifier) {
this.state = 2163;
this.match(CParser.Identifier);
}
this.state = 2166;
this.match(CParser.LeftBrace);
this.state = 2167;
this.enumeratorList(0);
this.state = 2168;
this.match(CParser.RightBrace);
this.state = 2169;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2171;
this.match(CParser.Enum);
this.state = 2173;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Identifier) {
this.state = 2172;
this.match(CParser.Identifier);
}
this.state = 2175;
this.match(CParser.LeftBrace);
this.state = 2176;
this.enumeratorList(0);
this.state = 2177;
this.match(CParser.Comma);
this.state = 2178;
this.match(CParser.RightBrace);
this.state = 2179;
this.match(CParser.EOF);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 2181;
this.match(CParser.Enum);
this.state = 2182;
this.match(CParser.Identifier);
this.state = 2183;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function EnumeratorList_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_enumeratorList_DropletFile;
return this;
}
EnumeratorList_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
EnumeratorList_DropletFileContext.prototype.constructor = EnumeratorList_DropletFileContext;
EnumeratorList_DropletFileContext.prototype.enumerator = function() {
return this.getTypedRuleContext(EnumeratorContext,0);
};
EnumeratorList_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
EnumeratorList_DropletFileContext.prototype.enumeratorList = function() {
return this.getTypedRuleContext(EnumeratorListContext,0);
};
EnumeratorList_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterEnumeratorList_DropletFile(this);
}
};
EnumeratorList_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitEnumeratorList_DropletFile(this);
}
};
CParser.EnumeratorList_DropletFileContext = EnumeratorList_DropletFileContext;
CParser.prototype.enumeratorList_DropletFile = function() {
var localctx = new EnumeratorList_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 274, CParser.RULE_enumeratorList_DropletFile);
try {
this.state = 2194;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,194,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2186;
this.enumerator();
this.state = 2187;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2189;
this.enumeratorList(0);
this.state = 2190;
this.match(CParser.Comma);
this.state = 2191;
this.enumerator();
this.state = 2192;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function Enumerator_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_enumerator_DropletFile;
return this;
}
Enumerator_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Enumerator_DropletFileContext.prototype.constructor = Enumerator_DropletFileContext;
Enumerator_DropletFileContext.prototype.enumerationConstant = function() {
return this.getTypedRuleContext(EnumerationConstantContext,0);
};
Enumerator_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
Enumerator_DropletFileContext.prototype.constantExpression = function() {
return this.getTypedRuleContext(ConstantExpressionContext,0);
};
Enumerator_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterEnumerator_DropletFile(this);
}
};
Enumerator_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitEnumerator_DropletFile(this);
}
};
CParser.Enumerator_DropletFileContext = Enumerator_DropletFileContext;
CParser.prototype.enumerator_DropletFile = function() {
var localctx = new Enumerator_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 276, CParser.RULE_enumerator_DropletFile);
try {
this.state = 2204;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,195,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2196;
this.enumerationConstant();
this.state = 2197;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2199;
this.enumerationConstant();
this.state = 2200;
this.match(CParser.Assign);
this.state = 2201;
this.constantExpression();
this.state = 2202;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function EnumerationConstant_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_enumerationConstant_DropletFile;
return this;
}
EnumerationConstant_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
EnumerationConstant_DropletFileContext.prototype.constructor = EnumerationConstant_DropletFileContext;
EnumerationConstant_DropletFileContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
EnumerationConstant_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
EnumerationConstant_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterEnumerationConstant_DropletFile(this);
}
};
EnumerationConstant_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitEnumerationConstant_DropletFile(this);
}
};
CParser.EnumerationConstant_DropletFileContext = EnumerationConstant_DropletFileContext;
CParser.prototype.enumerationConstant_DropletFile = function() {
var localctx = new EnumerationConstant_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 278, CParser.RULE_enumerationConstant_DropletFile);
try {
this.enterOuterAlt(localctx, 1);
this.state = 2206;
this.match(CParser.Identifier);
this.state = 2207;
this.match(CParser.EOF);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function AtomicTypeSpecifier_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_atomicTypeSpecifier_DropletFile;
return this;
}
AtomicTypeSpecifier_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AtomicTypeSpecifier_DropletFileContext.prototype.constructor = AtomicTypeSpecifier_DropletFileContext;
AtomicTypeSpecifier_DropletFileContext.prototype.typeName = function() {
return this.getTypedRuleContext(TypeNameContext,0);
};
AtomicTypeSpecifier_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
AtomicTypeSpecifier_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterAtomicTypeSpecifier_DropletFile(this);
}
};
AtomicTypeSpecifier_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitAtomicTypeSpecifier_DropletFile(this);
}
};
CParser.AtomicTypeSpecifier_DropletFileContext = AtomicTypeSpecifier_DropletFileContext;
CParser.prototype.atomicTypeSpecifier_DropletFile = function() {
var localctx = new AtomicTypeSpecifier_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 280, CParser.RULE_atomicTypeSpecifier_DropletFile);
try {
this.enterOuterAlt(localctx, 1);
this.state = 2209;
this.match(CParser.Atomic);
this.state = 2210;
this.match(CParser.LeftParen);
this.state = 2211;
this.typeName();
this.state = 2212;
this.match(CParser.RightParen);
this.state = 2213;
this.match(CParser.EOF);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function TypeQualifier_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_typeQualifier_DropletFile;
return this;
}
TypeQualifier_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TypeQualifier_DropletFileContext.prototype.constructor = TypeQualifier_DropletFileContext;
TypeQualifier_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
TypeQualifier_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterTypeQualifier_DropletFile(this);
}
};
TypeQualifier_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitTypeQualifier_DropletFile(this);
}
};
CParser.TypeQualifier_DropletFileContext = TypeQualifier_DropletFileContext;
CParser.prototype.typeQualifier_DropletFile = function() {
var localctx = new TypeQualifier_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 282, CParser.RULE_typeQualifier_DropletFile);
try {
this.state = 2223;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.Const:
this.enterOuterAlt(localctx, 1);
this.state = 2215;
this.match(CParser.Const);
this.state = 2216;
this.match(CParser.EOF);
break;
case CParser.Restrict:
this.enterOuterAlt(localctx, 2);
this.state = 2217;
this.match(CParser.Restrict);
this.state = 2218;
this.match(CParser.EOF);
break;
case CParser.Volatile:
this.enterOuterAlt(localctx, 3);
this.state = 2219;
this.match(CParser.Volatile);
this.state = 2220;
this.match(CParser.EOF);
break;
case CParser.Atomic:
this.enterOuterAlt(localctx, 4);
this.state = 2221;
this.match(CParser.Atomic);
this.state = 2222;
this.match(CParser.EOF);
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function FunctionSpecifier_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_functionSpecifier_DropletFile;
return this;
}
FunctionSpecifier_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
FunctionSpecifier_DropletFileContext.prototype.constructor = FunctionSpecifier_DropletFileContext;
FunctionSpecifier_DropletFileContext.prototype.EOF = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTokens(CParser.EOF);
} else {
return this.getToken(CParser.EOF, i);
}
};
FunctionSpecifier_DropletFileContext.prototype.gccAttributeSpecifier = function() {
return this.getTypedRuleContext(GccAttributeSpecifierContext,0);
};
FunctionSpecifier_DropletFileContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
FunctionSpecifier_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterFunctionSpecifier_DropletFile(this);
}
};
FunctionSpecifier_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitFunctionSpecifier_DropletFile(this);
}
};
CParser.FunctionSpecifier_DropletFileContext = FunctionSpecifier_DropletFileContext;
CParser.prototype.functionSpecifier_DropletFile = function() {
var localctx = new FunctionSpecifier_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 284, CParser.RULE_functionSpecifier_DropletFile);
try {
this.state = 2242;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.T__7:
case CParser.T__8:
case CParser.Inline:
case CParser.Noreturn:
this.enterOuterAlt(localctx, 1);
this.state = 2231;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.Inline:
this.state = 2225;
this.match(CParser.Inline);
this.state = 2226;
this.match(CParser.EOF);
break;
case CParser.Noreturn:
this.state = 2227;
this.match(CParser.Noreturn);
this.state = 2228;
this.match(CParser.EOF);
break;
case CParser.T__7:
this.state = 2229;
this.match(CParser.T__7);
break;
case CParser.T__8:
this.state = 2230;
this.match(CParser.T__8);
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
this.state = 2233;
this.match(CParser.EOF);
break;
case CParser.T__11:
this.enterOuterAlt(localctx, 2);
this.state = 2234;
this.gccAttributeSpecifier();
this.state = 2235;
this.match(CParser.EOF);
break;
case CParser.T__9:
this.enterOuterAlt(localctx, 3);
this.state = 2237;
this.match(CParser.T__9);
this.state = 2238;
this.match(CParser.LeftParen);
this.state = 2239;
this.match(CParser.Identifier);
this.state = 2240;
this.match(CParser.RightParen);
this.state = 2241;
this.match(CParser.EOF);
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function AlignmentSpecifier_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_alignmentSpecifier_DropletFile;
return this;
}
AlignmentSpecifier_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AlignmentSpecifier_DropletFileContext.prototype.constructor = AlignmentSpecifier_DropletFileContext;
AlignmentSpecifier_DropletFileContext.prototype.typeName = function() {
return this.getTypedRuleContext(TypeNameContext,0);
};
AlignmentSpecifier_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
AlignmentSpecifier_DropletFileContext.prototype.constantExpression = function() {
return this.getTypedRuleContext(ConstantExpressionContext,0);
};
AlignmentSpecifier_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterAlignmentSpecifier_DropletFile(this);
}
};
AlignmentSpecifier_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitAlignmentSpecifier_DropletFile(this);
}
};
CParser.AlignmentSpecifier_DropletFileContext = AlignmentSpecifier_DropletFileContext;
CParser.prototype.alignmentSpecifier_DropletFile = function() {
var localctx = new AlignmentSpecifier_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 286, CParser.RULE_alignmentSpecifier_DropletFile);
try {
this.state = 2256;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,199,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2244;
this.match(CParser.Alignas);
this.state = 2245;
this.match(CParser.LeftParen);
this.state = 2246;
this.typeName();
this.state = 2247;
this.match(CParser.RightParen);
this.state = 2248;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2250;
this.match(CParser.Alignas);
this.state = 2251;
this.match(CParser.LeftParen);
this.state = 2252;
this.constantExpression();
this.state = 2253;
this.match(CParser.RightParen);
this.state = 2254;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function Declarator_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_declarator_DropletFile;
return this;
}
Declarator_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Declarator_DropletFileContext.prototype.constructor = Declarator_DropletFileContext;
Declarator_DropletFileContext.prototype.directDeclarator = function() {
return this.getTypedRuleContext(DirectDeclaratorContext,0);
};
Declarator_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
Declarator_DropletFileContext.prototype.pointer = function() {
return this.getTypedRuleContext(PointerContext,0);
};
Declarator_DropletFileContext.prototype.gccDeclaratorExtension = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTypedRuleContexts(GccDeclaratorExtensionContext);
} else {
return this.getTypedRuleContext(GccDeclaratorExtensionContext,i);
}
};
Declarator_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterDeclarator_DropletFile(this);
}
};
Declarator_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitDeclarator_DropletFile(this);
}
};
CParser.Declarator_DropletFileContext = Declarator_DropletFileContext;
CParser.prototype.declarator_DropletFile = function() {
var localctx = new Declarator_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 288, CParser.RULE_declarator_DropletFile);
var _la = 0; // Token type
try {
this.enterOuterAlt(localctx, 1);
this.state = 2259;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,200,this._ctx);
if(la_===1) {
this.state = 2258;
this.pointer();
}
this.state = 2261;
this.directDeclarator(0);
this.state = 2265;
this._errHandler.sync(this);
_la = this._input.LA(1);
while(_la===CParser.T__10 || _la===CParser.T__11) {
this.state = 2262;
this.gccDeclaratorExtension();
this.state = 2267;
this._errHandler.sync(this);
_la = this._input.LA(1);
}
this.state = 2268;
this.match(CParser.EOF);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function PointerDeclarator_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_pointerDeclarator_DropletFile;
return this;
}
PointerDeclarator_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
PointerDeclarator_DropletFileContext.prototype.constructor = PointerDeclarator_DropletFileContext;
PointerDeclarator_DropletFileContext.prototype.pointer = function() {
return this.getTypedRuleContext(PointerContext,0);
};
PointerDeclarator_DropletFileContext.prototype.pointerDeclarator = function() {
return this.getTypedRuleContext(PointerDeclaratorContext,0);
};
PointerDeclarator_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
PointerDeclarator_DropletFileContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
PointerDeclarator_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterPointerDeclarator_DropletFile(this);
}
};
PointerDeclarator_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitPointerDeclarator_DropletFile(this);
}
};
CParser.PointerDeclarator_DropletFileContext = PointerDeclarator_DropletFileContext;
CParser.prototype.pointerDeclarator_DropletFile = function() {
var localctx = new PointerDeclarator_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 290, CParser.RULE_pointerDeclarator_DropletFile);
try {
this.state = 2276;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.Star:
case CParser.Caret:
this.enterOuterAlt(localctx, 1);
this.state = 2270;
this.pointer();
this.state = 2271;
this.pointerDeclarator();
this.state = 2272;
this.match(CParser.EOF);
break;
case CParser.Identifier:
this.enterOuterAlt(localctx, 2);
this.state = 2274;
this.match(CParser.Identifier);
this.state = 2275;
this.match(CParser.EOF);
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function DirectDeclarator_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_directDeclarator_DropletFile;
return this;
}
DirectDeclarator_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DirectDeclarator_DropletFileContext.prototype.constructor = DirectDeclarator_DropletFileContext;
DirectDeclarator_DropletFileContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
DirectDeclarator_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
DirectDeclarator_DropletFileContext.prototype.declarator = function() {
return this.getTypedRuleContext(DeclaratorContext,0);
};
DirectDeclarator_DropletFileContext.prototype.directDeclarator = function() {
return this.getTypedRuleContext(DirectDeclaratorContext,0);
};
DirectDeclarator_DropletFileContext.prototype.typeQualifierList = function() {
return this.getTypedRuleContext(TypeQualifierListContext,0);
};
DirectDeclarator_DropletFileContext.prototype.assignmentExpression = function() {
return this.getTypedRuleContext(AssignmentExpressionContext,0);
};
DirectDeclarator_DropletFileContext.prototype.parameterTypeList = function() {
return this.getTypedRuleContext(ParameterTypeListContext,0);
};
DirectDeclarator_DropletFileContext.prototype.identifierList = function() {
return this.getTypedRuleContext(IdentifierListContext,0);
};
DirectDeclarator_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterDirectDeclarator_DropletFile(this);
}
};
DirectDeclarator_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitDirectDeclarator_DropletFile(this);
}
};
CParser.DirectDeclarator_DropletFileContext = DirectDeclarator_DropletFileContext;
CParser.prototype.directDeclarator_DropletFile = function() {
var localctx = new DirectDeclarator_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 292, CParser.RULE_directDeclarator_DropletFile);
var _la = 0; // Token type
try {
this.state = 2337;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,208,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2278;
this.match(CParser.Identifier);
this.state = 2279;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2280;
this.match(CParser.LeftParen);
this.state = 2281;
this.declarator();
this.state = 2282;
this.match(CParser.RightParen);
this.state = 2283;
this.match(CParser.EOF);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 2285;
this.directDeclarator(0);
this.state = 2286;
this.match(CParser.LeftBracket);
this.state = 2288;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Const || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (CParser.Restrict - 35)) | (1 << (CParser.Volatile - 35)) | (1 << (CParser.Atomic - 35)))) !== 0)) {
this.state = 2287;
this.typeQualifierList(0);
}
this.state = 2291;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 2290;
this.assignmentExpression();
}
this.state = 2293;
this.match(CParser.RightBracket);
this.state = 2294;
this.match(CParser.EOF);
break;
case 4:
this.enterOuterAlt(localctx, 4);
this.state = 2296;
this.directDeclarator(0);
this.state = 2297;
this.match(CParser.LeftBracket);
this.state = 2298;
this.match(CParser.Static);
this.state = 2300;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Const || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (CParser.Restrict - 35)) | (1 << (CParser.Volatile - 35)) | (1 << (CParser.Atomic - 35)))) !== 0)) {
this.state = 2299;
this.typeQualifierList(0);
}
this.state = 2302;
this.assignmentExpression();
this.state = 2303;
this.match(CParser.RightBracket);
this.state = 2304;
this.match(CParser.EOF);
break;
case 5:
this.enterOuterAlt(localctx, 5);
this.state = 2306;
this.directDeclarator(0);
this.state = 2307;
this.match(CParser.LeftBracket);
this.state = 2308;
this.typeQualifierList(0);
this.state = 2309;
this.match(CParser.Static);
this.state = 2310;
this.assignmentExpression();
this.state = 2311;
this.match(CParser.RightBracket);
this.state = 2312;
this.match(CParser.EOF);
break;
case 6:
this.enterOuterAlt(localctx, 6);
this.state = 2314;
this.directDeclarator(0);
this.state = 2315;
this.match(CParser.LeftBracket);
this.state = 2317;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Const || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (CParser.Restrict - 35)) | (1 << (CParser.Volatile - 35)) | (1 << (CParser.Atomic - 35)))) !== 0)) {
this.state = 2316;
this.typeQualifierList(0);
}
this.state = 2319;
this.match(CParser.Star);
this.state = 2320;
this.match(CParser.RightBracket);
this.state = 2321;
this.match(CParser.EOF);
break;
case 7:
this.enterOuterAlt(localctx, 7);
this.state = 2323;
this.directDeclarator(0);
this.state = 2324;
this.match(CParser.LeftParen);
this.state = 2325;
this.parameterTypeList();
this.state = 2326;
this.match(CParser.RightParen);
this.state = 2327;
this.match(CParser.EOF);
break;
case 8:
this.enterOuterAlt(localctx, 8);
this.state = 2329;
this.directDeclarator(0);
this.state = 2330;
this.match(CParser.LeftParen);
this.state = 2332;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Identifier) {
this.state = 2331;
this.identifierList(0);
}
this.state = 2334;
this.match(CParser.RightParen);
this.state = 2335;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function GccDeclaratorExtension_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_gccDeclaratorExtension_DropletFile;
return this;
}
GccDeclaratorExtension_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
GccDeclaratorExtension_DropletFileContext.prototype.constructor = GccDeclaratorExtension_DropletFileContext;
GccDeclaratorExtension_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
GccDeclaratorExtension_DropletFileContext.prototype.StringLiteral = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTokens(CParser.StringLiteral);
} else {
return this.getToken(CParser.StringLiteral, i);
}
};
GccDeclaratorExtension_DropletFileContext.prototype.gccAttributeSpecifier = function() {
return this.getTypedRuleContext(GccAttributeSpecifierContext,0);
};
GccDeclaratorExtension_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterGccDeclaratorExtension_DropletFile(this);
}
};
GccDeclaratorExtension_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitGccDeclaratorExtension_DropletFile(this);
}
};
CParser.GccDeclaratorExtension_DropletFileContext = GccDeclaratorExtension_DropletFileContext;
CParser.prototype.gccDeclaratorExtension_DropletFile = function() {
var localctx = new GccDeclaratorExtension_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 294, CParser.RULE_gccDeclaratorExtension_DropletFile);
var _la = 0; // Token type
try {
this.state = 2351;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.T__10:
this.enterOuterAlt(localctx, 1);
this.state = 2339;
this.match(CParser.T__10);
this.state = 2340;
this.match(CParser.LeftParen);
this.state = 2342;
this._errHandler.sync(this);
_la = this._input.LA(1);
do {
this.state = 2341;
this.match(CParser.StringLiteral);
this.state = 2344;
this._errHandler.sync(this);
_la = this._input.LA(1);
} while(_la===CParser.StringLiteral);
this.state = 2346;
this.match(CParser.RightParen);
this.state = 2347;
this.match(CParser.EOF);
break;
case CParser.T__11:
this.enterOuterAlt(localctx, 2);
this.state = 2348;
this.gccAttributeSpecifier();
this.state = 2349;
this.match(CParser.EOF);
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function GccAttributeSpecifier_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_gccAttributeSpecifier_DropletFile;
return this;
}
GccAttributeSpecifier_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
GccAttributeSpecifier_DropletFileContext.prototype.constructor = GccAttributeSpecifier_DropletFileContext;
GccAttributeSpecifier_DropletFileContext.prototype.gccAttributeList = function() {
return this.getTypedRuleContext(GccAttributeListContext,0);
};
GccAttributeSpecifier_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
GccAttributeSpecifier_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterGccAttributeSpecifier_DropletFile(this);
}
};
GccAttributeSpecifier_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitGccAttributeSpecifier_DropletFile(this);
}
};
CParser.GccAttributeSpecifier_DropletFileContext = GccAttributeSpecifier_DropletFileContext;
CParser.prototype.gccAttributeSpecifier_DropletFile = function() {
var localctx = new GccAttributeSpecifier_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 296, CParser.RULE_gccAttributeSpecifier_DropletFile);
try {
this.enterOuterAlt(localctx, 1);
this.state = 2353;
this.match(CParser.T__11);
this.state = 2354;
this.match(CParser.LeftParen);
this.state = 2355;
this.match(CParser.LeftParen);
this.state = 2356;
this.gccAttributeList();
this.state = 2357;
this.match(CParser.RightParen);
this.state = 2358;
this.match(CParser.RightParen);
this.state = 2359;
this.match(CParser.EOF);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function GccAttributeList_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_gccAttributeList_DropletFile;
return this;
}
GccAttributeList_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
GccAttributeList_DropletFileContext.prototype.constructor = GccAttributeList_DropletFileContext;
GccAttributeList_DropletFileContext.prototype.gccAttribute = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTypedRuleContexts(GccAttributeContext);
} else {
return this.getTypedRuleContext(GccAttributeContext,i);
}
};
GccAttributeList_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
GccAttributeList_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterGccAttributeList_DropletFile(this);
}
};
GccAttributeList_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitGccAttributeList_DropletFile(this);
}
};
CParser.GccAttributeList_DropletFileContext = GccAttributeList_DropletFileContext;
CParser.prototype.gccAttributeList_DropletFile = function() {
var localctx = new GccAttributeList_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 298, CParser.RULE_gccAttributeList_DropletFile);
var _la = 0; // Token type
try {
this.state = 2372;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,212,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2361;
this.gccAttribute();
this.state = 2366;
this._errHandler.sync(this);
_la = this._input.LA(1);
while(_la===CParser.Comma) {
this.state = 2362;
this.match(CParser.Comma);
this.state = 2363;
this.gccAttribute();
this.state = 2368;
this._errHandler.sync(this);
_la = this._input.LA(1);
}
this.state = 2369;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function GccAttribute_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_gccAttribute_DropletFile;
return this;
}
GccAttribute_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
GccAttribute_DropletFileContext.prototype.constructor = GccAttribute_DropletFileContext;
GccAttribute_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
GccAttribute_DropletFileContext.prototype.argumentExpressionList = function() {
return this.getTypedRuleContext(ArgumentExpressionListContext,0);
};
GccAttribute_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterGccAttribute_DropletFile(this);
}
};
GccAttribute_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitGccAttribute_DropletFile(this);
}
};
CParser.GccAttribute_DropletFileContext = GccAttribute_DropletFileContext;
CParser.prototype.gccAttribute_DropletFile = function() {
var localctx = new GccAttribute_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 300, CParser.RULE_gccAttribute_DropletFile);
var _la = 0; // Token type
try {
this.state = 2384;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.T__0:
case CParser.T__1:
case CParser.T__2:
case CParser.T__3:
case CParser.T__4:
case CParser.T__5:
case CParser.T__6:
case CParser.T__7:
case CParser.T__8:
case CParser.T__9:
case CParser.T__10:
case CParser.T__11:
case CParser.T__12:
case CParser.T__13:
case CParser.Auto:
case CParser.Break:
case CParser.Case:
case CParser.Char:
case CParser.Const:
case CParser.Continue:
case CParser.Default:
case CParser.Do:
case CParser.Double:
case CParser.Else:
case CParser.Enum:
case CParser.Extern:
case CParser.Float:
case CParser.For:
case CParser.Goto:
case CParser.If:
case CParser.Inline:
case CParser.Int:
case CParser.Long:
case CParser.Register:
case CParser.Restrict:
case CParser.Return:
case CParser.Short:
case CParser.Signed:
case CParser.Sizeof:
case CParser.Static:
case CParser.Struct:
case CParser.Switch:
case CParser.Typedef:
case CParser.Union:
case CParser.Unsigned:
case CParser.Void:
case CParser.Volatile:
case CParser.While:
case CParser.Alignas:
case CParser.Alignof:
case CParser.Atomic:
case CParser.Bool:
case CParser.Complex:
case CParser.Generic:
case CParser.Imaginary:
case CParser.Noreturn:
case CParser.StaticAssert:
case CParser.ThreadLocal:
case CParser.LeftBracket:
case CParser.RightBracket:
case CParser.LeftBrace:
case CParser.RightBrace:
case CParser.Less:
case CParser.LessEqual:
case CParser.Greater:
case CParser.GreaterEqual:
case CParser.LeftShift:
case CParser.RightShift:
case CParser.Plus:
case CParser.PlusPlus:
case CParser.Minus:
case CParser.MinusMinus:
case CParser.Star:
case CParser.Div:
case CParser.Mod:
case CParser.And:
case CParser.Or:
case CParser.AndAnd:
case CParser.OrOr:
case CParser.Caret:
case CParser.Not:
case CParser.Tilde:
case CParser.Question:
case CParser.Colon:
case CParser.Semi:
case CParser.Assign:
case CParser.StarAssign:
case CParser.DivAssign:
case CParser.ModAssign:
case CParser.PlusAssign:
case CParser.MinusAssign:
case CParser.LeftShiftAssign:
case CParser.RightShiftAssign:
case CParser.AndAssign:
case CParser.XorAssign:
case CParser.OrAssign:
case CParser.Equal:
case CParser.NotEqual:
case CParser.Arrow:
case CParser.Dot:
case CParser.Ellipsis:
case CParser.Identifier:
case CParser.Constant:
case CParser.StringLiteral:
case CParser.Directive:
case CParser.Whitespace:
case CParser.Newline:
case CParser.BlockComment:
case CParser.LineComment:
this.enterOuterAlt(localctx, 1);
this.state = 2374;
_la = this._input.LA(1);
if(_la<=0 || ((((_la - 59)) & ~0x1f) == 0 && ((1 << (_la - 59)) & ((1 << (CParser.LeftParen - 59)) | (1 << (CParser.RightParen - 59)) | (1 << (CParser.Comma - 59)))) !== 0)) {
this._errHandler.recoverInline(this);
}
else {
this._errHandler.reportMatch(this);
this.consume();
}
this.state = 2380;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.LeftParen) {
this.state = 2375;
this.match(CParser.LeftParen);
this.state = 2377;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 2376;
this.argumentExpressionList(0);
}
this.state = 2379;
this.match(CParser.RightParen);
}
this.state = 2382;
this.match(CParser.EOF);
break;
case CParser.EOF:
this.enterOuterAlt(localctx, 2);
this.state = 2383;
this.match(CParser.EOF);
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function NestedParenthesesBlock_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_nestedParenthesesBlock_DropletFile;
return this;
}
NestedParenthesesBlock_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
NestedParenthesesBlock_DropletFileContext.prototype.constructor = NestedParenthesesBlock_DropletFileContext;
NestedParenthesesBlock_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
NestedParenthesesBlock_DropletFileContext.prototype.nestedParenthesesBlock = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTypedRuleContexts(NestedParenthesesBlockContext);
} else {
return this.getTypedRuleContext(NestedParenthesesBlockContext,i);
}
};
NestedParenthesesBlock_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterNestedParenthesesBlock_DropletFile(this);
}
};
NestedParenthesesBlock_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitNestedParenthesesBlock_DropletFile(this);
}
};
CParser.NestedParenthesesBlock_DropletFileContext = NestedParenthesesBlock_DropletFileContext;
CParser.prototype.nestedParenthesesBlock_DropletFile = function() {
var localctx = new NestedParenthesesBlock_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 302, CParser.RULE_nestedParenthesesBlock_DropletFile);
var _la = 0; // Token type
try {
this.enterOuterAlt(localctx, 1);
this.state = 2393;
this._errHandler.sync(this);
_la = this._input.LA(1);
while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2) | (1 << CParser.T__3) | (1 << CParser.T__4) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__10) | (1 << CParser.T__11) | (1 << CParser.T__12) | (1 << CParser.T__13) | (1 << CParser.Auto) | (1 << CParser.Break) | (1 << CParser.Case) | (1 << CParser.Char) | (1 << CParser.Const) | (1 << CParser.Continue) | (1 << CParser.Default) | (1 << CParser.Do) | (1 << CParser.Double) | (1 << CParser.Else) | (1 << CParser.Enum) | (1 << CParser.Extern) | (1 << CParser.Float) | (1 << CParser.For) | (1 << CParser.Goto) | (1 << CParser.If) | (1 << CParser.Inline))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (CParser.Int - 32)) | (1 << (CParser.Long - 32)) | (1 << (CParser.Register - 32)) | (1 << (CParser.Restrict - 32)) | (1 << (CParser.Return - 32)) | (1 << (CParser.Short - 32)) | (1 << (CParser.Signed - 32)) | (1 << (CParser.Sizeof - 32)) | (1 << (CParser.Static - 32)) | (1 << (CParser.Struct - 32)) | (1 << (CParser.Switch - 32)) | (1 << (CParser.Typedef - 32)) | (1 << (CParser.Union - 32)) | (1 << (CParser.Unsigned - 32)) | (1 << (CParser.Void - 32)) | (1 << (CParser.Volatile - 32)) | (1 << (CParser.While - 32)) | (1 << (CParser.Alignas - 32)) | (1 << (CParser.Alignof - 32)) | (1 << (CParser.Atomic - 32)) | (1 << (CParser.Bool - 32)) | (1 << (CParser.Complex - 32)) | (1 << (CParser.Generic - 32)) | (1 << (CParser.Imaginary - 32)) | (1 << (CParser.Noreturn - 32)) | (1 << (CParser.StaticAssert - 32)) | (1 << (CParser.ThreadLocal - 32)) | (1 << (CParser.LeftParen - 32)) | (1 << (CParser.LeftBracket - 32)) | (1 << (CParser.RightBracket - 32)) | (1 << (CParser.LeftBrace - 32)))) !== 0) || ((((_la - 64)) & ~0x1f) == 0 && ((1 << (_la - 64)) & ((1 << (CParser.RightBrace - 64)) | (1 << (CParser.Less - 64)) | (1 << (CParser.LessEqual - 64)) | (1 << (CParser.Greater - 64)) | (1 << (CParser.GreaterEqual - 64)) | (1 << (CParser.LeftShift - 64)) | (1 << (CParser.RightShift - 64)) | (1 << (CParser.Plus - 64)) | (1 << (CParser.PlusPlus - 64)) | (1 << (CParser.Minus - 64)) | (1 << (CParser.MinusMinus - 64)) | (1 << (CParser.Star - 64)) | (1 << (CParser.Div - 64)) | (1 << (CParser.Mod - 64)) | (1 << (CParser.And - 64)) | (1 << (CParser.Or - 64)) | (1 << (CParser.AndAnd - 64)) | (1 << (CParser.OrOr - 64)) | (1 << (CParser.Caret - 64)) | (1 << (CParser.Not - 64)) | (1 << (CParser.Tilde - 64)) | (1 << (CParser.Question - 64)) | (1 << (CParser.Colon - 64)) | (1 << (CParser.Semi - 64)) | (1 << (CParser.Comma - 64)) | (1 << (CParser.Assign - 64)) | (1 << (CParser.StarAssign - 64)) | (1 << (CParser.DivAssign - 64)) | (1 << (CParser.ModAssign - 64)) | (1 << (CParser.PlusAssign - 64)) | (1 << (CParser.MinusAssign - 64)) | (1 << (CParser.LeftShiftAssign - 64)))) !== 0) || ((((_la - 96)) & ~0x1f) == 0 && ((1 << (_la - 96)) & ((1 << (CParser.RightShiftAssign - 96)) | (1 << (CParser.AndAssign - 96)) | (1 << (CParser.XorAssign - 96)) | (1 << (CParser.OrAssign - 96)) | (1 << (CParser.Equal - 96)) | (1 << (CParser.NotEqual - 96)) | (1 << (CParser.Arrow - 96)) | (1 << (CParser.Dot - 96)) | (1 << (CParser.Ellipsis - 96)) | (1 << (CParser.Identifier - 96)) | (1 << (CParser.Constant - 96)) | (1 << (CParser.StringLiteral - 96)) | (1 << (CParser.Directive - 96)) | (1 << (CParser.Whitespace - 96)) | (1 << (CParser.Newline - 96)) | (1 << (CParser.BlockComment - 96)) | (1 << (CParser.LineComment - 96)))) !== 0)) {
this.state = 2391;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.T__0:
case CParser.T__1:
case CParser.T__2:
case CParser.T__3:
case CParser.T__4:
case CParser.T__5:
case CParser.T__6:
case CParser.T__7:
case CParser.T__8:
case CParser.T__9:
case CParser.T__10:
case CParser.T__11:
case CParser.T__12:
case CParser.T__13:
case CParser.Auto:
case CParser.Break:
case CParser.Case:
case CParser.Char:
case CParser.Const:
case CParser.Continue:
case CParser.Default:
case CParser.Do:
case CParser.Double:
case CParser.Else:
case CParser.Enum:
case CParser.Extern:
case CParser.Float:
case CParser.For:
case CParser.Goto:
case CParser.If:
case CParser.Inline:
case CParser.Int:
case CParser.Long:
case CParser.Register:
case CParser.Restrict:
case CParser.Return:
case CParser.Short:
case CParser.Signed:
case CParser.Sizeof:
case CParser.Static:
case CParser.Struct:
case CParser.Switch:
case CParser.Typedef:
case CParser.Union:
case CParser.Unsigned:
case CParser.Void:
case CParser.Volatile:
case CParser.While:
case CParser.Alignas:
case CParser.Alignof:
case CParser.Atomic:
case CParser.Bool:
case CParser.Complex:
case CParser.Generic:
case CParser.Imaginary:
case CParser.Noreturn:
case CParser.StaticAssert:
case CParser.ThreadLocal:
case CParser.LeftBracket:
case CParser.RightBracket:
case CParser.LeftBrace:
case CParser.RightBrace:
case CParser.Less:
case CParser.LessEqual:
case CParser.Greater:
case CParser.GreaterEqual:
case CParser.LeftShift:
case CParser.RightShift:
case CParser.Plus:
case CParser.PlusPlus:
case CParser.Minus:
case CParser.MinusMinus:
case CParser.Star:
case CParser.Div:
case CParser.Mod:
case CParser.And:
case CParser.Or:
case CParser.AndAnd:
case CParser.OrOr:
case CParser.Caret:
case CParser.Not:
case CParser.Tilde:
case CParser.Question:
case CParser.Colon:
case CParser.Semi:
case CParser.Comma:
case CParser.Assign:
case CParser.StarAssign:
case CParser.DivAssign:
case CParser.ModAssign:
case CParser.PlusAssign:
case CParser.MinusAssign:
case CParser.LeftShiftAssign:
case CParser.RightShiftAssign:
case CParser.AndAssign:
case CParser.XorAssign:
case CParser.OrAssign:
case CParser.Equal:
case CParser.NotEqual:
case CParser.Arrow:
case CParser.Dot:
case CParser.Ellipsis:
case CParser.Identifier:
case CParser.Constant:
case CParser.StringLiteral:
case CParser.Directive:
case CParser.Whitespace:
case CParser.Newline:
case CParser.BlockComment:
case CParser.LineComment:
this.state = 2386;
_la = this._input.LA(1);
if(_la<=0 || _la===CParser.LeftParen || _la===CParser.RightParen) {
this._errHandler.recoverInline(this);
}
else {
this._errHandler.reportMatch(this);
this.consume();
}
break;
case CParser.LeftParen:
this.state = 2387;
this.match(CParser.LeftParen);
this.state = 2388;
this.nestedParenthesesBlock();
this.state = 2389;
this.match(CParser.RightParen);
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
this.state = 2395;
this._errHandler.sync(this);
_la = this._input.LA(1);
}
this.state = 2396;
this.match(CParser.EOF);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function Pointer_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_pointer_DropletFile;
return this;
}
Pointer_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Pointer_DropletFileContext.prototype.constructor = Pointer_DropletFileContext;
Pointer_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
Pointer_DropletFileContext.prototype.typeQualifierList = function() {
return this.getTypedRuleContext(TypeQualifierListContext,0);
};
Pointer_DropletFileContext.prototype.pointer = function() {
return this.getTypedRuleContext(PointerContext,0);
};
Pointer_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterPointer_DropletFile(this);
}
};
Pointer_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitPointer_DropletFile(this);
}
};
CParser.Pointer_DropletFileContext = Pointer_DropletFileContext;
CParser.prototype.pointer_DropletFile = function() {
var localctx = new Pointer_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 304, CParser.RULE_pointer_DropletFile);
var _la = 0; // Token type
try {
this.state = 2419;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,222,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2398;
this.match(CParser.Star);
this.state = 2400;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Const || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (CParser.Restrict - 35)) | (1 << (CParser.Volatile - 35)) | (1 << (CParser.Atomic - 35)))) !== 0)) {
this.state = 2399;
this.typeQualifierList(0);
}
this.state = 2402;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2403;
this.match(CParser.Star);
this.state = 2405;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Const || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (CParser.Restrict - 35)) | (1 << (CParser.Volatile - 35)) | (1 << (CParser.Atomic - 35)))) !== 0)) {
this.state = 2404;
this.typeQualifierList(0);
}
this.state = 2407;
this.pointer();
this.state = 2408;
this.match(CParser.EOF);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 2410;
this.match(CParser.Caret);
this.state = 2412;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Const || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (CParser.Restrict - 35)) | (1 << (CParser.Volatile - 35)) | (1 << (CParser.Atomic - 35)))) !== 0)) {
this.state = 2411;
this.typeQualifierList(0);
}
break;
case 4:
this.enterOuterAlt(localctx, 4);
this.state = 2414;
this.match(CParser.Caret);
this.state = 2416;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Const || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (CParser.Restrict - 35)) | (1 << (CParser.Volatile - 35)) | (1 << (CParser.Atomic - 35)))) !== 0)) {
this.state = 2415;
this.typeQualifierList(0);
}
this.state = 2418;
this.pointer();
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function TypeQualifierList_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_typeQualifierList_DropletFile;
return this;
}
TypeQualifierList_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TypeQualifierList_DropletFileContext.prototype.constructor = TypeQualifierList_DropletFileContext;
TypeQualifierList_DropletFileContext.prototype.typeQualifier = function() {
return this.getTypedRuleContext(TypeQualifierContext,0);
};
TypeQualifierList_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
TypeQualifierList_DropletFileContext.prototype.typeQualifierList = function() {
return this.getTypedRuleContext(TypeQualifierListContext,0);
};
TypeQualifierList_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterTypeQualifierList_DropletFile(this);
}
};
TypeQualifierList_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitTypeQualifierList_DropletFile(this);
}
};
CParser.TypeQualifierList_DropletFileContext = TypeQualifierList_DropletFileContext;
CParser.prototype.typeQualifierList_DropletFile = function() {
var localctx = new TypeQualifierList_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 306, CParser.RULE_typeQualifierList_DropletFile);
try {
this.state = 2428;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,223,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2421;
this.typeQualifier();
this.state = 2422;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2424;
this.typeQualifierList(0);
this.state = 2425;
this.typeQualifier();
this.state = 2426;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function ParameterTypeList_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_parameterTypeList_DropletFile;
return this;
}
ParameterTypeList_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ParameterTypeList_DropletFileContext.prototype.constructor = ParameterTypeList_DropletFileContext;
ParameterTypeList_DropletFileContext.prototype.parameterList = function() {
return this.getTypedRuleContext(ParameterListContext,0);
};
ParameterTypeList_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
ParameterTypeList_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterParameterTypeList_DropletFile(this);
}
};
ParameterTypeList_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitParameterTypeList_DropletFile(this);
}
};
CParser.ParameterTypeList_DropletFileContext = ParameterTypeList_DropletFileContext;
CParser.prototype.parameterTypeList_DropletFile = function() {
var localctx = new ParameterTypeList_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 308, CParser.RULE_parameterTypeList_DropletFile);
try {
this.state = 2438;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,224,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2430;
this.parameterList(0);
this.state = 2431;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2433;
this.parameterList(0);
this.state = 2434;
this.match(CParser.Comma);
this.state = 2435;
this.match(CParser.Ellipsis);
this.state = 2436;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function ParameterList_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_parameterList_DropletFile;
return this;
}
ParameterList_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ParameterList_DropletFileContext.prototype.constructor = ParameterList_DropletFileContext;
ParameterList_DropletFileContext.prototype.parameterDeclaration = function() {
return this.getTypedRuleContext(ParameterDeclarationContext,0);
};
ParameterList_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
ParameterList_DropletFileContext.prototype.parameterList = function() {
return this.getTypedRuleContext(ParameterListContext,0);
};
ParameterList_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterParameterList_DropletFile(this);
}
};
ParameterList_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitParameterList_DropletFile(this);
}
};
CParser.ParameterList_DropletFileContext = ParameterList_DropletFileContext;
CParser.prototype.parameterList_DropletFile = function() {
var localctx = new ParameterList_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 310, CParser.RULE_parameterList_DropletFile);
try {
this.state = 2448;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,225,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2440;
this.parameterDeclaration();
this.state = 2441;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2443;
this.parameterList(0);
this.state = 2444;
this.match(CParser.Comma);
this.state = 2445;
this.parameterDeclaration();
this.state = 2446;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function ParameterDeclaration_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_parameterDeclaration_DropletFile;
return this;
}
ParameterDeclaration_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ParameterDeclaration_DropletFileContext.prototype.constructor = ParameterDeclaration_DropletFileContext;
ParameterDeclaration_DropletFileContext.prototype.declarationSpecifiers = function() {
return this.getTypedRuleContext(DeclarationSpecifiersContext,0);
};
ParameterDeclaration_DropletFileContext.prototype.declarator = function() {
return this.getTypedRuleContext(DeclaratorContext,0);
};
ParameterDeclaration_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
ParameterDeclaration_DropletFileContext.prototype.declarationSpecifiers2 = function() {
return this.getTypedRuleContext(DeclarationSpecifiers2Context,0);
};
ParameterDeclaration_DropletFileContext.prototype.abstractDeclarator = function() {
return this.getTypedRuleContext(AbstractDeclaratorContext,0);
};
ParameterDeclaration_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterParameterDeclaration_DropletFile(this);
}
};
ParameterDeclaration_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitParameterDeclaration_DropletFile(this);
}
};
CParser.ParameterDeclaration_DropletFileContext = ParameterDeclaration_DropletFileContext;
CParser.prototype.parameterDeclaration_DropletFile = function() {
var localctx = new ParameterDeclaration_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 312, CParser.RULE_parameterDeclaration_DropletFile);
var _la = 0; // Token type
try {
this.state = 2460;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,227,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2450;
this.declarationSpecifiers();
this.state = 2451;
this.declarator();
this.state = 2452;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2454;
this.declarationSpecifiers2();
this.state = 2456;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(((((_la - 59)) & ~0x1f) == 0 && ((1 << (_la - 59)) & ((1 << (CParser.LeftParen - 59)) | (1 << (CParser.LeftBracket - 59)) | (1 << (CParser.Star - 59)) | (1 << (CParser.Caret - 59)))) !== 0)) {
this.state = 2455;
this.abstractDeclarator();
}
this.state = 2458;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function IdentifierList_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_identifierList_DropletFile;
return this;
}
IdentifierList_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
IdentifierList_DropletFileContext.prototype.constructor = IdentifierList_DropletFileContext;
IdentifierList_DropletFileContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
IdentifierList_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
IdentifierList_DropletFileContext.prototype.identifierList = function() {
return this.getTypedRuleContext(IdentifierListContext,0);
};
IdentifierList_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterIdentifierList_DropletFile(this);
}
};
IdentifierList_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitIdentifierList_DropletFile(this);
}
};
CParser.IdentifierList_DropletFileContext = IdentifierList_DropletFileContext;
CParser.prototype.identifierList_DropletFile = function() {
var localctx = new IdentifierList_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 314, CParser.RULE_identifierList_DropletFile);
try {
this.state = 2469;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,228,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2462;
this.match(CParser.Identifier);
this.state = 2463;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2464;
this.identifierList(0);
this.state = 2465;
this.match(CParser.Comma);
this.state = 2466;
this.match(CParser.Identifier);
this.state = 2467;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function TypeName_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_typeName_DropletFile;
return this;
}
TypeName_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TypeName_DropletFileContext.prototype.constructor = TypeName_DropletFileContext;
TypeName_DropletFileContext.prototype.specifierQualifierList = function() {
return this.getTypedRuleContext(SpecifierQualifierListContext,0);
};
TypeName_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
TypeName_DropletFileContext.prototype.abstractDeclarator = function() {
return this.getTypedRuleContext(AbstractDeclaratorContext,0);
};
TypeName_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterTypeName_DropletFile(this);
}
};
TypeName_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitTypeName_DropletFile(this);
}
};
CParser.TypeName_DropletFileContext = TypeName_DropletFileContext;
CParser.prototype.typeName_DropletFile = function() {
var localctx = new TypeName_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 316, CParser.RULE_typeName_DropletFile);
var _la = 0; // Token type
try {
this.enterOuterAlt(localctx, 1);
this.state = 2471;
this.specifierQualifierList();
this.state = 2473;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(((((_la - 59)) & ~0x1f) == 0 && ((1 << (_la - 59)) & ((1 << (CParser.LeftParen - 59)) | (1 << (CParser.LeftBracket - 59)) | (1 << (CParser.Star - 59)) | (1 << (CParser.Caret - 59)))) !== 0)) {
this.state = 2472;
this.abstractDeclarator();
}
this.state = 2475;
this.match(CParser.EOF);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function AbstractDeclarator_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_abstractDeclarator_DropletFile;
return this;
}
AbstractDeclarator_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AbstractDeclarator_DropletFileContext.prototype.constructor = AbstractDeclarator_DropletFileContext;
AbstractDeclarator_DropletFileContext.prototype.pointer = function() {
return this.getTypedRuleContext(PointerContext,0);
};
AbstractDeclarator_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
AbstractDeclarator_DropletFileContext.prototype.directAbstractDeclarator = function() {
return this.getTypedRuleContext(DirectAbstractDeclaratorContext,0);
};
AbstractDeclarator_DropletFileContext.prototype.gccDeclaratorExtension = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTypedRuleContexts(GccDeclaratorExtensionContext);
} else {
return this.getTypedRuleContext(GccDeclaratorExtensionContext,i);
}
};
AbstractDeclarator_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterAbstractDeclarator_DropletFile(this);
}
};
AbstractDeclarator_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitAbstractDeclarator_DropletFile(this);
}
};
CParser.AbstractDeclarator_DropletFileContext = AbstractDeclarator_DropletFileContext;
CParser.prototype.abstractDeclarator_DropletFile = function() {
var localctx = new AbstractDeclarator_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 318, CParser.RULE_abstractDeclarator_DropletFile);
var _la = 0; // Token type
try {
this.state = 2492;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,232,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2477;
this.pointer();
this.state = 2478;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2481;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Star || _la===CParser.Caret) {
this.state = 2480;
this.pointer();
}
this.state = 2483;
this.directAbstractDeclarator(0);
this.state = 2487;
this._errHandler.sync(this);
_la = this._input.LA(1);
while(_la===CParser.T__10 || _la===CParser.T__11) {
this.state = 2484;
this.gccDeclaratorExtension();
this.state = 2489;
this._errHandler.sync(this);
_la = this._input.LA(1);
}
this.state = 2490;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function DirectAbstractDeclarator_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_directAbstractDeclarator_DropletFile;
return this;
}
DirectAbstractDeclarator_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DirectAbstractDeclarator_DropletFileContext.prototype.constructor = DirectAbstractDeclarator_DropletFileContext;
DirectAbstractDeclarator_DropletFileContext.prototype.abstractDeclarator = function() {
return this.getTypedRuleContext(AbstractDeclaratorContext,0);
};
DirectAbstractDeclarator_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
DirectAbstractDeclarator_DropletFileContext.prototype.gccDeclaratorExtension = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTypedRuleContexts(GccDeclaratorExtensionContext);
} else {
return this.getTypedRuleContext(GccDeclaratorExtensionContext,i);
}
};
DirectAbstractDeclarator_DropletFileContext.prototype.typeQualifierList = function() {
return this.getTypedRuleContext(TypeQualifierListContext,0);
};
DirectAbstractDeclarator_DropletFileContext.prototype.assignmentExpression = function() {
return this.getTypedRuleContext(AssignmentExpressionContext,0);
};
DirectAbstractDeclarator_DropletFileContext.prototype.parameterTypeList = function() {
return this.getTypedRuleContext(ParameterTypeListContext,0);
};
DirectAbstractDeclarator_DropletFileContext.prototype.directAbstractDeclarator = function() {
return this.getTypedRuleContext(DirectAbstractDeclaratorContext,0);
};
DirectAbstractDeclarator_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterDirectAbstractDeclarator_DropletFile(this);
}
};
DirectAbstractDeclarator_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitDirectAbstractDeclarator_DropletFile(this);
}
};
CParser.DirectAbstractDeclarator_DropletFileContext = DirectAbstractDeclarator_DropletFileContext;
CParser.prototype.directAbstractDeclarator_DropletFile = function() {
var localctx = new DirectAbstractDeclarator_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 320, CParser.RULE_directAbstractDeclarator_DropletFile);
var _la = 0; // Token type
try {
this.state = 2595;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,244,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2494;
this.match(CParser.LeftParen);
this.state = 2495;
this.abstractDeclarator();
this.state = 2496;
this.match(CParser.RightParen);
this.state = 2500;
this._errHandler.sync(this);
_la = this._input.LA(1);
while(_la===CParser.T__10 || _la===CParser.T__11) {
this.state = 2497;
this.gccDeclaratorExtension();
this.state = 2502;
this._errHandler.sync(this);
_la = this._input.LA(1);
}
this.state = 2503;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2505;
this.match(CParser.LeftBracket);
this.state = 2507;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Const || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (CParser.Restrict - 35)) | (1 << (CParser.Volatile - 35)) | (1 << (CParser.Atomic - 35)))) !== 0)) {
this.state = 2506;
this.typeQualifierList(0);
}
this.state = 2510;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 2509;
this.assignmentExpression();
}
this.state = 2512;
this.match(CParser.RightBracket);
this.state = 2513;
this.match(CParser.EOF);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 2514;
this.match(CParser.LeftBracket);
this.state = 2515;
this.match(CParser.Static);
this.state = 2517;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Const || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (CParser.Restrict - 35)) | (1 << (CParser.Volatile - 35)) | (1 << (CParser.Atomic - 35)))) !== 0)) {
this.state = 2516;
this.typeQualifierList(0);
}
this.state = 2519;
this.assignmentExpression();
this.state = 2520;
this.match(CParser.RightBracket);
this.state = 2521;
this.match(CParser.EOF);
break;
case 4:
this.enterOuterAlt(localctx, 4);
this.state = 2523;
this.match(CParser.LeftBracket);
this.state = 2524;
this.typeQualifierList(0);
this.state = 2525;
this.match(CParser.Static);
this.state = 2526;
this.assignmentExpression();
this.state = 2527;
this.match(CParser.RightBracket);
this.state = 2528;
this.match(CParser.EOF);
break;
case 5:
this.enterOuterAlt(localctx, 5);
this.state = 2530;
this.match(CParser.LeftBracket);
this.state = 2531;
this.match(CParser.Star);
this.state = 2532;
this.match(CParser.RightBracket);
this.state = 2533;
this.match(CParser.EOF);
break;
case 6:
this.enterOuterAlt(localctx, 6);
this.state = 2534;
this.match(CParser.LeftParen);
this.state = 2536;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__3) | (1 << CParser.T__4) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__11) | (1 << CParser.Auto) | (1 << CParser.Char) | (1 << CParser.Const) | (1 << CParser.Double) | (1 << CParser.Enum) | (1 << CParser.Extern) | (1 << CParser.Float) | (1 << CParser.Inline))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (CParser.Int - 32)) | (1 << (CParser.Long - 32)) | (1 << (CParser.Register - 32)) | (1 << (CParser.Restrict - 32)) | (1 << (CParser.Short - 32)) | (1 << (CParser.Signed - 32)) | (1 << (CParser.Static - 32)) | (1 << (CParser.Struct - 32)) | (1 << (CParser.Typedef - 32)) | (1 << (CParser.Union - 32)) | (1 << (CParser.Unsigned - 32)) | (1 << (CParser.Void - 32)) | (1 << (CParser.Volatile - 32)) | (1 << (CParser.Alignas - 32)) | (1 << (CParser.Atomic - 32)) | (1 << (CParser.Bool - 32)) | (1 << (CParser.Complex - 32)) | (1 << (CParser.Noreturn - 32)) | (1 << (CParser.ThreadLocal - 32)))) !== 0) || _la===CParser.Identifier) {
this.state = 2535;
this.parameterTypeList();
}
this.state = 2538;
this.match(CParser.RightParen);
this.state = 2542;
this._errHandler.sync(this);
_la = this._input.LA(1);
while(_la===CParser.T__10 || _la===CParser.T__11) {
this.state = 2539;
this.gccDeclaratorExtension();
this.state = 2544;
this._errHandler.sync(this);
_la = this._input.LA(1);
}
this.state = 2545;
this.match(CParser.EOF);
break;
case 7:
this.enterOuterAlt(localctx, 7);
this.state = 2546;
this.directAbstractDeclarator(0);
this.state = 2547;
this.match(CParser.LeftBracket);
this.state = 2549;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Const || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (CParser.Restrict - 35)) | (1 << (CParser.Volatile - 35)) | (1 << (CParser.Atomic - 35)))) !== 0)) {
this.state = 2548;
this.typeQualifierList(0);
}
this.state = 2552;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 2551;
this.assignmentExpression();
}
this.state = 2554;
this.match(CParser.RightBracket);
this.state = 2555;
this.match(CParser.EOF);
break;
case 8:
this.enterOuterAlt(localctx, 8);
this.state = 2557;
this.directAbstractDeclarator(0);
this.state = 2558;
this.match(CParser.LeftBracket);
this.state = 2559;
this.match(CParser.Static);
this.state = 2561;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Const || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (CParser.Restrict - 35)) | (1 << (CParser.Volatile - 35)) | (1 << (CParser.Atomic - 35)))) !== 0)) {
this.state = 2560;
this.typeQualifierList(0);
}
this.state = 2563;
this.assignmentExpression();
this.state = 2564;
this.match(CParser.RightBracket);
this.state = 2565;
this.match(CParser.EOF);
break;
case 9:
this.enterOuterAlt(localctx, 9);
this.state = 2567;
this.directAbstractDeclarator(0);
this.state = 2568;
this.match(CParser.LeftBracket);
this.state = 2569;
this.typeQualifierList(0);
this.state = 2570;
this.match(CParser.Static);
this.state = 2571;
this.assignmentExpression();
this.state = 2572;
this.match(CParser.RightBracket);
this.state = 2573;
this.match(CParser.EOF);
break;
case 10:
this.enterOuterAlt(localctx, 10);
this.state = 2575;
this.directAbstractDeclarator(0);
this.state = 2576;
this.match(CParser.LeftBracket);
this.state = 2577;
this.match(CParser.Star);
this.state = 2578;
this.match(CParser.RightBracket);
this.state = 2579;
this.match(CParser.EOF);
break;
case 11:
this.enterOuterAlt(localctx, 11);
this.state = 2581;
this.directAbstractDeclarator(0);
this.state = 2582;
this.match(CParser.LeftParen);
this.state = 2584;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__3) | (1 << CParser.T__4) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__11) | (1 << CParser.Auto) | (1 << CParser.Char) | (1 << CParser.Const) | (1 << CParser.Double) | (1 << CParser.Enum) | (1 << CParser.Extern) | (1 << CParser.Float) | (1 << CParser.Inline))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (CParser.Int - 32)) | (1 << (CParser.Long - 32)) | (1 << (CParser.Register - 32)) | (1 << (CParser.Restrict - 32)) | (1 << (CParser.Short - 32)) | (1 << (CParser.Signed - 32)) | (1 << (CParser.Static - 32)) | (1 << (CParser.Struct - 32)) | (1 << (CParser.Typedef - 32)) | (1 << (CParser.Union - 32)) | (1 << (CParser.Unsigned - 32)) | (1 << (CParser.Void - 32)) | (1 << (CParser.Volatile - 32)) | (1 << (CParser.Alignas - 32)) | (1 << (CParser.Atomic - 32)) | (1 << (CParser.Bool - 32)) | (1 << (CParser.Complex - 32)) | (1 << (CParser.Noreturn - 32)) | (1 << (CParser.ThreadLocal - 32)))) !== 0) || _la===CParser.Identifier) {
this.state = 2583;
this.parameterTypeList();
}
this.state = 2586;
this.match(CParser.RightParen);
this.state = 2590;
this._errHandler.sync(this);
_la = this._input.LA(1);
while(_la===CParser.T__10 || _la===CParser.T__11) {
this.state = 2587;
this.gccDeclaratorExtension();
this.state = 2592;
this._errHandler.sync(this);
_la = this._input.LA(1);
}
this.state = 2593;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function TypedefName_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_typedefName_DropletFile;
return this;
}
TypedefName_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TypedefName_DropletFileContext.prototype.constructor = TypedefName_DropletFileContext;
TypedefName_DropletFileContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
TypedefName_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
TypedefName_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterTypedefName_DropletFile(this);
}
};
TypedefName_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitTypedefName_DropletFile(this);
}
};
CParser.TypedefName_DropletFileContext = TypedefName_DropletFileContext;
CParser.prototype.typedefName_DropletFile = function() {
var localctx = new TypedefName_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 322, CParser.RULE_typedefName_DropletFile);
try {
this.enterOuterAlt(localctx, 1);
this.state = 2597;
this.match(CParser.Identifier);
this.state = 2598;
this.match(CParser.EOF);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function Initializer_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_initializer_DropletFile;
return this;
}
Initializer_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Initializer_DropletFileContext.prototype.constructor = Initializer_DropletFileContext;
Initializer_DropletFileContext.prototype.assignmentExpression = function() {
return this.getTypedRuleContext(AssignmentExpressionContext,0);
};
Initializer_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
Initializer_DropletFileContext.prototype.initializerList = function() {
return this.getTypedRuleContext(InitializerListContext,0);
};
Initializer_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterInitializer_DropletFile(this);
}
};
Initializer_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitInitializer_DropletFile(this);
}
};
CParser.Initializer_DropletFileContext = Initializer_DropletFileContext;
CParser.prototype.initializer_DropletFile = function() {
var localctx = new Initializer_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 324, CParser.RULE_initializer_DropletFile);
try {
this.state = 2614;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,245,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2600;
this.assignmentExpression();
this.state = 2601;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2603;
this.match(CParser.LeftBrace);
this.state = 2604;
this.initializerList(0);
this.state = 2605;
this.match(CParser.RightBrace);
this.state = 2606;
this.match(CParser.EOF);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 2608;
this.match(CParser.LeftBrace);
this.state = 2609;
this.initializerList(0);
this.state = 2610;
this.match(CParser.Comma);
this.state = 2611;
this.match(CParser.RightBrace);
this.state = 2612;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function InitializerList_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_initializerList_DropletFile;
return this;
}
InitializerList_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
InitializerList_DropletFileContext.prototype.constructor = InitializerList_DropletFileContext;
InitializerList_DropletFileContext.prototype.initializer = function() {
return this.getTypedRuleContext(InitializerContext,0);
};
InitializerList_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
InitializerList_DropletFileContext.prototype.designation = function() {
return this.getTypedRuleContext(DesignationContext,0);
};
InitializerList_DropletFileContext.prototype.initializerList = function() {
return this.getTypedRuleContext(InitializerListContext,0);
};
InitializerList_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterInitializerList_DropletFile(this);
}
};
InitializerList_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitInitializerList_DropletFile(this);
}
};
CParser.InitializerList_DropletFileContext = InitializerList_DropletFileContext;
CParser.prototype.initializerList_DropletFile = function() {
var localctx = new InitializerList_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 326, CParser.RULE_initializerList_DropletFile);
var _la = 0; // Token type
try {
this.state = 2630;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,248,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2617;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.LeftBracket || _la===CParser.Dot) {
this.state = 2616;
this.designation();
}
this.state = 2619;
this.initializer();
this.state = 2620;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2622;
this.initializerList(0);
this.state = 2623;
this.match(CParser.Comma);
this.state = 2625;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.LeftBracket || _la===CParser.Dot) {
this.state = 2624;
this.designation();
}
this.state = 2627;
this.initializer();
this.state = 2628;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function Designation_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_designation_DropletFile;
return this;
}
Designation_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Designation_DropletFileContext.prototype.constructor = Designation_DropletFileContext;
Designation_DropletFileContext.prototype.designatorList = function() {
return this.getTypedRuleContext(DesignatorListContext,0);
};
Designation_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
Designation_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterDesignation_DropletFile(this);
}
};
Designation_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitDesignation_DropletFile(this);
}
};
CParser.Designation_DropletFileContext = Designation_DropletFileContext;
CParser.prototype.designation_DropletFile = function() {
var localctx = new Designation_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 328, CParser.RULE_designation_DropletFile);
try {
this.enterOuterAlt(localctx, 1);
this.state = 2632;
this.designatorList(0);
this.state = 2633;
this.match(CParser.Assign);
this.state = 2634;
this.match(CParser.EOF);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function DesignatorList_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_designatorList_DropletFile;
return this;
}
DesignatorList_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DesignatorList_DropletFileContext.prototype.constructor = DesignatorList_DropletFileContext;
DesignatorList_DropletFileContext.prototype.designator = function() {
return this.getTypedRuleContext(DesignatorContext,0);
};
DesignatorList_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
DesignatorList_DropletFileContext.prototype.designatorList = function() {
return this.getTypedRuleContext(DesignatorListContext,0);
};
DesignatorList_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterDesignatorList_DropletFile(this);
}
};
DesignatorList_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitDesignatorList_DropletFile(this);
}
};
CParser.DesignatorList_DropletFileContext = DesignatorList_DropletFileContext;
CParser.prototype.designatorList_DropletFile = function() {
var localctx = new DesignatorList_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 330, CParser.RULE_designatorList_DropletFile);
try {
this.state = 2643;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,249,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2636;
this.designator();
this.state = 2637;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2639;
this.designatorList(0);
this.state = 2640;
this.designator();
this.state = 2641;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function Designator_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_designator_DropletFile;
return this;
}
Designator_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Designator_DropletFileContext.prototype.constructor = Designator_DropletFileContext;
Designator_DropletFileContext.prototype.constantExpression = function() {
return this.getTypedRuleContext(ConstantExpressionContext,0);
};
Designator_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
Designator_DropletFileContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
Designator_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterDesignator_DropletFile(this);
}
};
Designator_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitDesignator_DropletFile(this);
}
};
CParser.Designator_DropletFileContext = Designator_DropletFileContext;
CParser.prototype.designator_DropletFile = function() {
var localctx = new Designator_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 332, CParser.RULE_designator_DropletFile);
try {
this.state = 2653;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.LeftBracket:
this.enterOuterAlt(localctx, 1);
this.state = 2645;
this.match(CParser.LeftBracket);
this.state = 2646;
this.constantExpression();
this.state = 2647;
this.match(CParser.RightBracket);
this.state = 2648;
this.match(CParser.EOF);
break;
case CParser.Dot:
this.enterOuterAlt(localctx, 2);
this.state = 2650;
this.match(CParser.Dot);
this.state = 2651;
this.match(CParser.Identifier);
this.state = 2652;
this.match(CParser.EOF);
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function StaticAssertDeclaration_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_staticAssertDeclaration_DropletFile;
return this;
}
StaticAssertDeclaration_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StaticAssertDeclaration_DropletFileContext.prototype.constructor = StaticAssertDeclaration_DropletFileContext;
StaticAssertDeclaration_DropletFileContext.prototype.constantExpression = function() {
return this.getTypedRuleContext(ConstantExpressionContext,0);
};
StaticAssertDeclaration_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
StaticAssertDeclaration_DropletFileContext.prototype.StringLiteral = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTokens(CParser.StringLiteral);
} else {
return this.getToken(CParser.StringLiteral, i);
}
};
StaticAssertDeclaration_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterStaticAssertDeclaration_DropletFile(this);
}
};
StaticAssertDeclaration_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitStaticAssertDeclaration_DropletFile(this);
}
};
CParser.StaticAssertDeclaration_DropletFileContext = StaticAssertDeclaration_DropletFileContext;
CParser.prototype.staticAssertDeclaration_DropletFile = function() {
var localctx = new StaticAssertDeclaration_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 334, CParser.RULE_staticAssertDeclaration_DropletFile);
var _la = 0; // Token type
try {
this.enterOuterAlt(localctx, 1);
this.state = 2655;
this.match(CParser.StaticAssert);
this.state = 2656;
this.match(CParser.LeftParen);
this.state = 2657;
this.constantExpression();
this.state = 2658;
this.match(CParser.Comma);
this.state = 2660;
this._errHandler.sync(this);
_la = this._input.LA(1);
do {
this.state = 2659;
this.match(CParser.StringLiteral);
this.state = 2662;
this._errHandler.sync(this);
_la = this._input.LA(1);
} while(_la===CParser.StringLiteral);
this.state = 2664;
this.match(CParser.RightParen);
this.state = 2665;
this.match(CParser.Semi);
this.state = 2666;
this.match(CParser.EOF);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function Statement_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_statement_DropletFile;
return this;
}
Statement_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Statement_DropletFileContext.prototype.constructor = Statement_DropletFileContext;
Statement_DropletFileContext.prototype.labeledStatement = function() {
return this.getTypedRuleContext(LabeledStatementContext,0);
};
Statement_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
Statement_DropletFileContext.prototype.compoundStatement = function() {
return this.getTypedRuleContext(CompoundStatementContext,0);
};
Statement_DropletFileContext.prototype.expressionStatement = function() {
return this.getTypedRuleContext(ExpressionStatementContext,0);
};
Statement_DropletFileContext.prototype.selectionStatement = function() {
return this.getTypedRuleContext(SelectionStatementContext,0);
};
Statement_DropletFileContext.prototype.iterationStatement = function() {
return this.getTypedRuleContext(IterationStatementContext,0);
};
Statement_DropletFileContext.prototype.jumpStatement = function() {
return this.getTypedRuleContext(JumpStatementContext,0);
};
Statement_DropletFileContext.prototype.logicalOrExpression = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTypedRuleContexts(LogicalOrExpressionContext);
} else {
return this.getTypedRuleContext(LogicalOrExpressionContext,i);
}
};
Statement_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterStatement_DropletFile(this);
}
};
Statement_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitStatement_DropletFile(this);
}
};
CParser.Statement_DropletFileContext = Statement_DropletFileContext;
CParser.prototype.statement_DropletFile = function() {
var localctx = new Statement_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 336, CParser.RULE_statement_DropletFile);
var _la = 0; // Token type
try {
this.state = 2718;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,257,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2668;
this.labeledStatement();
this.state = 2669;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2671;
this.compoundStatement();
this.state = 2672;
this.match(CParser.EOF);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 2674;
this.expressionStatement();
this.state = 2675;
this.match(CParser.EOF);
break;
case 4:
this.enterOuterAlt(localctx, 4);
this.state = 2677;
this.selectionStatement();
this.state = 2678;
this.match(CParser.EOF);
break;
case 5:
this.enterOuterAlt(localctx, 5);
this.state = 2680;
this.iterationStatement();
this.state = 2681;
this.match(CParser.EOF);
break;
case 6:
this.enterOuterAlt(localctx, 6);
this.state = 2683;
this.jumpStatement();
this.state = 2684;
this.match(CParser.EOF);
break;
case 7:
this.enterOuterAlt(localctx, 7);
this.state = 2686;
_la = this._input.LA(1);
if(!(_la===CParser.T__10 || _la===CParser.T__12)) {
this._errHandler.recoverInline(this);
}
else {
this._errHandler.reportMatch(this);
this.consume();
}
this.state = 2687;
_la = this._input.LA(1);
if(!(_la===CParser.T__13 || _la===CParser.Volatile)) {
this._errHandler.recoverInline(this);
}
else {
this._errHandler.reportMatch(this);
this.consume();
}
this.state = 2688;
this.match(CParser.LeftParen);
this.state = 2697;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 2689;
this.logicalOrExpression(0);
this.state = 2694;
this._errHandler.sync(this);
_la = this._input.LA(1);
while(_la===CParser.Comma) {
this.state = 2690;
this.match(CParser.Comma);
this.state = 2691;
this.logicalOrExpression(0);
this.state = 2696;
this._errHandler.sync(this);
_la = this._input.LA(1);
}
}
this.state = 2712;
this._errHandler.sync(this);
_la = this._input.LA(1);
while(_la===CParser.Colon) {
this.state = 2699;
this.match(CParser.Colon);
this.state = 2708;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 2700;
this.logicalOrExpression(0);
this.state = 2705;
this._errHandler.sync(this);
_la = this._input.LA(1);
while(_la===CParser.Comma) {
this.state = 2701;
this.match(CParser.Comma);
this.state = 2702;
this.logicalOrExpression(0);
this.state = 2707;
this._errHandler.sync(this);
_la = this._input.LA(1);
}
}
this.state = 2714;
this._errHandler.sync(this);
_la = this._input.LA(1);
}
this.state = 2715;
this.match(CParser.RightParen);
this.state = 2716;
this.match(CParser.Semi);
this.state = 2717;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function LabeledStatement_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_labeledStatement_DropletFile;
return this;
}
LabeledStatement_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
LabeledStatement_DropletFileContext.prototype.constructor = LabeledStatement_DropletFileContext;
LabeledStatement_DropletFileContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
LabeledStatement_DropletFileContext.prototype.statement = function() {
return this.getTypedRuleContext(StatementContext,0);
};
LabeledStatement_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
LabeledStatement_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterLabeledStatement_DropletFile(this);
}
};
LabeledStatement_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitLabeledStatement_DropletFile(this);
}
};
CParser.LabeledStatement_DropletFileContext = LabeledStatement_DropletFileContext;
CParser.prototype.labeledStatement_DropletFile = function() {
var localctx = new LabeledStatement_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 338, CParser.RULE_labeledStatement_DropletFile);
try {
this.enterOuterAlt(localctx, 1);
this.state = 2720;
this.match(CParser.Identifier);
this.state = 2721;
this.match(CParser.Colon);
this.state = 2722;
this.statement();
this.state = 2723;
this.match(CParser.EOF);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function SwitchLabeledStatement_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_switchLabeledStatement_DropletFile;
return this;
}
SwitchLabeledStatement_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SwitchLabeledStatement_DropletFileContext.prototype.constructor = SwitchLabeledStatement_DropletFileContext;
SwitchLabeledStatement_DropletFileContext.prototype.constantExpression = function() {
return this.getTypedRuleContext(ConstantExpressionContext,0);
};
SwitchLabeledStatement_DropletFileContext.prototype.statement = function() {
return this.getTypedRuleContext(StatementContext,0);
};
SwitchLabeledStatement_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
SwitchLabeledStatement_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterSwitchLabeledStatement_DropletFile(this);
}
};
SwitchLabeledStatement_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitSwitchLabeledStatement_DropletFile(this);
}
};
CParser.SwitchLabeledStatement_DropletFileContext = SwitchLabeledStatement_DropletFileContext;
CParser.prototype.switchLabeledStatement_DropletFile = function() {
var localctx = new SwitchLabeledStatement_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 340, CParser.RULE_switchLabeledStatement_DropletFile);
try {
this.state = 2736;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.Case:
this.enterOuterAlt(localctx, 1);
this.state = 2725;
this.match(CParser.Case);
this.state = 2726;
this.constantExpression();
this.state = 2727;
this.match(CParser.Colon);
this.state = 2728;
this.statement();
this.state = 2729;
this.match(CParser.EOF);
break;
case CParser.Default:
this.enterOuterAlt(localctx, 2);
this.state = 2731;
this.match(CParser.Default);
this.state = 2732;
this.match(CParser.Colon);
this.state = 2733;
this.statement();
this.state = 2734;
this.match(CParser.EOF);
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function CompoundStatement_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_compoundStatement_DropletFile;
return this;
}
CompoundStatement_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
CompoundStatement_DropletFileContext.prototype.constructor = CompoundStatement_DropletFileContext;
CompoundStatement_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
CompoundStatement_DropletFileContext.prototype.blockItemList = function() {
return this.getTypedRuleContext(BlockItemListContext,0);
};
CompoundStatement_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterCompoundStatement_DropletFile(this);
}
};
CompoundStatement_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitCompoundStatement_DropletFile(this);
}
};
CParser.CompoundStatement_DropletFileContext = CompoundStatement_DropletFileContext;
CParser.prototype.compoundStatement_DropletFile = function() {
var localctx = new CompoundStatement_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 342, CParser.RULE_compoundStatement_DropletFile);
var _la = 0; // Token type
try {
this.enterOuterAlt(localctx, 1);
this.state = 2738;
this.match(CParser.LeftBrace);
this.state = 2740;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2) | (1 << CParser.T__3) | (1 << CParser.T__4) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__10) | (1 << CParser.T__11) | (1 << CParser.T__12) | (1 << CParser.Auto) | (1 << CParser.Break) | (1 << CParser.Char) | (1 << CParser.Const) | (1 << CParser.Continue) | (1 << CParser.Do) | (1 << CParser.Double) | (1 << CParser.Enum) | (1 << CParser.Extern) | (1 << CParser.Float) | (1 << CParser.For) | (1 << CParser.Goto) | (1 << CParser.If) | (1 << CParser.Inline))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (CParser.Int - 32)) | (1 << (CParser.Long - 32)) | (1 << (CParser.Register - 32)) | (1 << (CParser.Restrict - 32)) | (1 << (CParser.Return - 32)) | (1 << (CParser.Short - 32)) | (1 << (CParser.Signed - 32)) | (1 << (CParser.Sizeof - 32)) | (1 << (CParser.Static - 32)) | (1 << (CParser.Struct - 32)) | (1 << (CParser.Switch - 32)) | (1 << (CParser.Typedef - 32)) | (1 << (CParser.Union - 32)) | (1 << (CParser.Unsigned - 32)) | (1 << (CParser.Void - 32)) | (1 << (CParser.Volatile - 32)) | (1 << (CParser.While - 32)) | (1 << (CParser.Alignas - 32)) | (1 << (CParser.Alignof - 32)) | (1 << (CParser.Atomic - 32)) | (1 << (CParser.Bool - 32)) | (1 << (CParser.Complex - 32)) | (1 << (CParser.Generic - 32)) | (1 << (CParser.Noreturn - 32)) | (1 << (CParser.StaticAssert - 32)) | (1 << (CParser.ThreadLocal - 32)) | (1 << (CParser.LeftParen - 32)) | (1 << (CParser.LeftBrace - 32)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)) | (1 << (CParser.Semi - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 2739;
this.blockItemList(0);
}
this.state = 2742;
this.match(CParser.RightBrace);
this.state = 2743;
this.match(CParser.EOF);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function BlockItemList_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_blockItemList_DropletFile;
return this;
}
BlockItemList_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
BlockItemList_DropletFileContext.prototype.constructor = BlockItemList_DropletFileContext;
BlockItemList_DropletFileContext.prototype.blockItem = function() {
return this.getTypedRuleContext(BlockItemContext,0);
};
BlockItemList_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
BlockItemList_DropletFileContext.prototype.blockItemList = function() {
return this.getTypedRuleContext(BlockItemListContext,0);
};
BlockItemList_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterBlockItemList_DropletFile(this);
}
};
BlockItemList_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitBlockItemList_DropletFile(this);
}
};
CParser.BlockItemList_DropletFileContext = BlockItemList_DropletFileContext;
CParser.prototype.blockItemList_DropletFile = function() {
var localctx = new BlockItemList_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 344, CParser.RULE_blockItemList_DropletFile);
try {
this.state = 2752;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,260,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2745;
this.blockItem();
this.state = 2746;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2748;
this.blockItemList(0);
this.state = 2749;
this.blockItem();
this.state = 2750;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function BlockItem_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_blockItem_DropletFile;
return this;
}
BlockItem_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
BlockItem_DropletFileContext.prototype.constructor = BlockItem_DropletFileContext;
BlockItem_DropletFileContext.prototype.specialMethodCall = function() {
return this.getTypedRuleContext(SpecialMethodCallContext,0);
};
BlockItem_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
BlockItem_DropletFileContext.prototype.initDeclarator = function() {
return this.getTypedRuleContext(InitDeclaratorContext,0);
};
BlockItem_DropletFileContext.prototype.declaration = function() {
return this.getTypedRuleContext(DeclarationContext,0);
};
BlockItem_DropletFileContext.prototype.statement = function() {
return this.getTypedRuleContext(StatementContext,0);
};
BlockItem_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterBlockItem_DropletFile(this);
}
};
BlockItem_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitBlockItem_DropletFile(this);
}
};
CParser.BlockItem_DropletFileContext = BlockItem_DropletFileContext;
CParser.prototype.blockItem_DropletFile = function() {
var localctx = new BlockItem_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 346, CParser.RULE_blockItem_DropletFile);
try {
this.state = 2767;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,261,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2754;
this.specialMethodCall();
this.state = 2755;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2757;
this.initDeclarator();
this.state = 2758;
this.match(CParser.EOF);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 2760;
this.declaration();
this.state = 2761;
this.match(CParser.EOF);
break;
case 4:
this.enterOuterAlt(localctx, 4);
this.state = 2763;
this.statement();
this.state = 2764;
this.match(CParser.EOF);
break;
case 5:
this.enterOuterAlt(localctx, 5);
this.state = 2766;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function SpecialMethodCall_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_specialMethodCall_DropletFile;
return this;
}
SpecialMethodCall_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SpecialMethodCall_DropletFileContext.prototype.constructor = SpecialMethodCall_DropletFileContext;
SpecialMethodCall_DropletFileContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
SpecialMethodCall_DropletFileContext.prototype.assignmentExpression = function() {
return this.getTypedRuleContext(AssignmentExpressionContext,0);
};
SpecialMethodCall_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
SpecialMethodCall_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterSpecialMethodCall_DropletFile(this);
}
};
SpecialMethodCall_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitSpecialMethodCall_DropletFile(this);
}
};
CParser.SpecialMethodCall_DropletFileContext = SpecialMethodCall_DropletFileContext;
CParser.prototype.specialMethodCall_DropletFile = function() {
var localctx = new SpecialMethodCall_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 348, CParser.RULE_specialMethodCall_DropletFile);
try {
this.enterOuterAlt(localctx, 1);
this.state = 2769;
this.match(CParser.Identifier);
this.state = 2770;
this.match(CParser.LeftParen);
this.state = 2771;
this.assignmentExpression();
this.state = 2772;
this.match(CParser.RightParen);
this.state = 2773;
this.match(CParser.Semi);
this.state = 2774;
this.match(CParser.EOF);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function ExpressionStatement_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_expressionStatement_DropletFile;
return this;
}
ExpressionStatement_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ExpressionStatement_DropletFileContext.prototype.constructor = ExpressionStatement_DropletFileContext;
ExpressionStatement_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
ExpressionStatement_DropletFileContext.prototype.expression = function() {
return this.getTypedRuleContext(ExpressionContext,0);
};
ExpressionStatement_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterExpressionStatement_DropletFile(this);
}
};
ExpressionStatement_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitExpressionStatement_DropletFile(this);
}
};
CParser.ExpressionStatement_DropletFileContext = ExpressionStatement_DropletFileContext;
CParser.prototype.expressionStatement_DropletFile = function() {
var localctx = new ExpressionStatement_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 350, CParser.RULE_expressionStatement_DropletFile);
var _la = 0; // Token type
try {
this.enterOuterAlt(localctx, 1);
this.state = 2777;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 2776;
this.expression(0);
}
this.state = 2779;
this.match(CParser.Semi);
this.state = 2780;
this.match(CParser.EOF);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function SelectionStatement_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_selectionStatement_DropletFile;
return this;
}
SelectionStatement_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SelectionStatement_DropletFileContext.prototype.constructor = SelectionStatement_DropletFileContext;
SelectionStatement_DropletFileContext.prototype.expression = function() {
return this.getTypedRuleContext(ExpressionContext,0);
};
SelectionStatement_DropletFileContext.prototype.statement = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTypedRuleContexts(StatementContext);
} else {
return this.getTypedRuleContext(StatementContext,i);
}
};
SelectionStatement_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
SelectionStatement_DropletFileContext.prototype.switchCompoundStatement = function() {
return this.getTypedRuleContext(SwitchCompoundStatementContext,0);
};
SelectionStatement_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterSelectionStatement_DropletFile(this);
}
};
SelectionStatement_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitSelectionStatement_DropletFile(this);
}
};
CParser.SelectionStatement_DropletFileContext = SelectionStatement_DropletFileContext;
CParser.prototype.selectionStatement_DropletFile = function() {
var localctx = new SelectionStatement_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 352, CParser.RULE_selectionStatement_DropletFile);
var _la = 0; // Token type
try {
this.state = 2800;
this._errHandler.sync(this);
switch(this._input.LA(1)) {
case CParser.If:
this.enterOuterAlt(localctx, 1);
this.state = 2782;
this.match(CParser.If);
this.state = 2783;
this.match(CParser.LeftParen);
this.state = 2784;
this.expression(0);
this.state = 2785;
this.match(CParser.RightParen);
this.state = 2786;
this.statement();
this.state = 2789;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Else) {
this.state = 2787;
this.match(CParser.Else);
this.state = 2788;
this.statement();
}
this.state = 2791;
this.match(CParser.EOF);
break;
case CParser.Switch:
this.enterOuterAlt(localctx, 2);
this.state = 2793;
this.match(CParser.Switch);
this.state = 2794;
this.match(CParser.LeftParen);
this.state = 2795;
this.expression(0);
this.state = 2796;
this.match(CParser.RightParen);
this.state = 2797;
this.switchCompoundStatement();
this.state = 2798;
this.match(CParser.EOF);
break;
default:
throw new antlr4.error.NoViableAltException(this);
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function SwitchCase_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_switchCase_DropletFile;
return this;
}
SwitchCase_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SwitchCase_DropletFileContext.prototype.constructor = SwitchCase_DropletFileContext;
SwitchCase_DropletFileContext.prototype.switchLabel = function() {
return this.getTypedRuleContext(SwitchLabelContext,0);
};
SwitchCase_DropletFileContext.prototype.switchBlockItemList = function() {
return this.getTypedRuleContext(SwitchBlockItemListContext,0);
};
SwitchCase_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
SwitchCase_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterSwitchCase_DropletFile(this);
}
};
SwitchCase_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitSwitchCase_DropletFile(this);
}
};
CParser.SwitchCase_DropletFileContext = SwitchCase_DropletFileContext;
CParser.prototype.switchCase_DropletFile = function() {
var localctx = new SwitchCase_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 354, CParser.RULE_switchCase_DropletFile);
try {
this.enterOuterAlt(localctx, 1);
this.state = 2802;
this.switchLabel();
this.state = 2803;
this.switchBlockItemList();
this.state = 2804;
this.match(CParser.EOF);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function SwitchBlockItemList_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_switchBlockItemList_DropletFile;
return this;
}
SwitchBlockItemList_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SwitchBlockItemList_DropletFileContext.prototype.constructor = SwitchBlockItemList_DropletFileContext;
SwitchBlockItemList_DropletFileContext.prototype.blockItemList = function() {
return this.getTypedRuleContext(BlockItemListContext,0);
};
SwitchBlockItemList_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
SwitchBlockItemList_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterSwitchBlockItemList_DropletFile(this);
}
};
SwitchBlockItemList_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitSwitchBlockItemList_DropletFile(this);
}
};
CParser.SwitchBlockItemList_DropletFileContext = SwitchBlockItemList_DropletFileContext;
CParser.prototype.switchBlockItemList_DropletFile = function() {
var localctx = new SwitchBlockItemList_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 356, CParser.RULE_switchBlockItemList_DropletFile);
try {
this.enterOuterAlt(localctx, 1);
this.state = 2806;
this.blockItemList(0);
this.state = 2807;
this.match(CParser.EOF);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function SwitchCaseList_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_switchCaseList_DropletFile;
return this;
}
SwitchCaseList_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SwitchCaseList_DropletFileContext.prototype.constructor = SwitchCaseList_DropletFileContext;
SwitchCaseList_DropletFileContext.prototype.switchCase = function() {
return this.getTypedRuleContext(SwitchCaseContext,0);
};
SwitchCaseList_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
SwitchCaseList_DropletFileContext.prototype.switchCaseList = function() {
return this.getTypedRuleContext(SwitchCaseListContext,0);
};
SwitchCaseList_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterSwitchCaseList_DropletFile(this);
}
};
SwitchCaseList_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitSwitchCaseList_DropletFile(this);
}
};
CParser.SwitchCaseList_DropletFileContext = SwitchCaseList_DropletFileContext;
CParser.prototype.switchCaseList_DropletFile = function() {
var localctx = new SwitchCaseList_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 358, CParser.RULE_switchCaseList_DropletFile);
try {
this.state = 2816;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,265,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2809;
this.switchCase();
this.state = 2810;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2812;
this.switchCaseList(0);
this.state = 2813;
this.switchCase();
this.state = 2814;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function SwitchCompoundStatement_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_switchCompoundStatement_DropletFile;
return this;
}
SwitchCompoundStatement_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SwitchCompoundStatement_DropletFileContext.prototype.constructor = SwitchCompoundStatement_DropletFileContext;
SwitchCompoundStatement_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
SwitchCompoundStatement_DropletFileContext.prototype.switchCaseList = function() {
return this.getTypedRuleContext(SwitchCaseListContext,0);
};
SwitchCompoundStatement_DropletFileContext.prototype.statement = function() {
return this.getTypedRuleContext(StatementContext,0);
};
SwitchCompoundStatement_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterSwitchCompoundStatement_DropletFile(this);
}
};
SwitchCompoundStatement_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitSwitchCompoundStatement_DropletFile(this);
}
};
CParser.SwitchCompoundStatement_DropletFileContext = SwitchCompoundStatement_DropletFileContext;
CParser.prototype.switchCompoundStatement_DropletFile = function() {
var localctx = new SwitchCompoundStatement_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 360, CParser.RULE_switchCompoundStatement_DropletFile);
var _la = 0; // Token type
try {
this.state = 2827;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,267,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2818;
this.match(CParser.LeftBrace);
this.state = 2820;
this._errHandler.sync(this);
_la = this._input.LA(1);
if(_la===CParser.Case || _la===CParser.Default) {
this.state = 2819;
this.switchCaseList(0);
}
this.state = 2822;
this.match(CParser.RightBrace);
this.state = 2823;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2824;
this.statement();
this.state = 2825;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function IterationStatement_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_iterationStatement_DropletFile;
return this;
}
IterationStatement_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
IterationStatement_DropletFileContext.prototype.constructor = IterationStatement_DropletFileContext;
IterationStatement_DropletFileContext.prototype.expression = function(i) {
if(i===undefined) {
i = null;
}
if(i===null) {
return this.getTypedRuleContexts(ExpressionContext);
} else {
return this.getTypedRuleContext(ExpressionContext,i);
}
};
IterationStatement_DropletFileContext.prototype.statement = function() {
return this.getTypedRuleContext(StatementContext,0);
};
IterationStatement_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
IterationStatement_DropletFileContext.prototype.declaration = function() {
return this.getTypedRuleContext(DeclarationContext,0);
};
IterationStatement_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterIterationStatement_DropletFile(this);
}
};
IterationStatement_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitIterationStatement_DropletFile(this);
}
};
CParser.IterationStatement_DropletFileContext = IterationStatement_DropletFileContext;
CParser.prototype.iterationStatement_DropletFile = function() {
var localctx = new IterationStatement_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 362, CParser.RULE_iterationStatement_DropletFile);
var _la = 0; // Token type
try {
this.state = 2876;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,273,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2829;
this.match(CParser.While);
this.state = 2830;
this.match(CParser.LeftParen);
this.state = 2831;
this.expression(0);
this.state = 2832;
this.match(CParser.RightParen);
this.state = 2833;
this.statement();
this.state = 2834;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2836;
this.match(CParser.Do);
this.state = 2837;
this.statement();
this.state = 2838;
this.match(CParser.While);
this.state = 2839;
this.match(CParser.LeftParen);
this.state = 2840;
this.expression(0);
this.state = 2841;
this.match(CParser.RightParen);
this.state = 2842;
this.match(CParser.Semi);
this.state = 2843;
this.match(CParser.EOF);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 2845;
this.match(CParser.For);
this.state = 2846;
this.match(CParser.LeftParen);
this.state = 2848;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 2847;
this.expression(0);
}
this.state = 2850;
this.match(CParser.Semi);
this.state = 2852;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 2851;
this.expression(0);
}
this.state = 2854;
this.match(CParser.Semi);
this.state = 2856;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 2855;
this.expression(0);
}
this.state = 2858;
this.match(CParser.RightParen);
this.state = 2859;
this.statement();
this.state = 2860;
this.match(CParser.EOF);
break;
case 4:
this.enterOuterAlt(localctx, 4);
this.state = 2862;
this.match(CParser.For);
this.state = 2863;
this.match(CParser.LeftParen);
this.state = 2864;
this.declaration();
this.state = 2866;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 2865;
this.expression(0);
}
this.state = 2868;
this.match(CParser.Semi);
this.state = 2870;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 2869;
this.expression(0);
}
this.state = 2872;
this.match(CParser.RightParen);
this.state = 2873;
this.statement();
this.state = 2874;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function JumpStatement_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_jumpStatement_DropletFile;
return this;
}
JumpStatement_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
JumpStatement_DropletFileContext.prototype.constructor = JumpStatement_DropletFileContext;
JumpStatement_DropletFileContext.prototype.Identifier = function() {
return this.getToken(CParser.Identifier, 0);
};
JumpStatement_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
JumpStatement_DropletFileContext.prototype.expression = function() {
return this.getTypedRuleContext(ExpressionContext,0);
};
JumpStatement_DropletFileContext.prototype.unaryExpression = function() {
return this.getTypedRuleContext(UnaryExpressionContext,0);
};
JumpStatement_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterJumpStatement_DropletFile(this);
}
};
JumpStatement_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitJumpStatement_DropletFile(this);
}
};
CParser.JumpStatement_DropletFileContext = JumpStatement_DropletFileContext;
CParser.prototype.jumpStatement_DropletFile = function() {
var localctx = new JumpStatement_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 364, CParser.RULE_jumpStatement_DropletFile);
var _la = 0; // Token type
try {
this.state = 2899;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,275,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2878;
this.match(CParser.Goto);
this.state = 2879;
this.match(CParser.Identifier);
this.state = 2880;
this.match(CParser.Semi);
this.state = 2881;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2882;
this.match(CParser.Continue);
this.state = 2883;
this.match(CParser.Semi);
this.state = 2884;
this.match(CParser.EOF);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 2885;
this.match(CParser.Break);
this.state = 2886;
this.match(CParser.Semi);
this.state = 2887;
this.match(CParser.EOF);
break;
case 4:
this.enterOuterAlt(localctx, 4);
this.state = 2888;
this.match(CParser.Return);
this.state = 2890;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CParser.Sizeof - 39)) | (1 << (CParser.Alignof - 39)) | (1 << (CParser.Generic - 39)) | (1 << (CParser.LeftParen - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CParser.Plus - 71)) | (1 << (CParser.PlusPlus - 71)) | (1 << (CParser.Minus - 71)) | (1 << (CParser.MinusMinus - 71)) | (1 << (CParser.Star - 71)) | (1 << (CParser.And - 71)) | (1 << (CParser.AndAnd - 71)) | (1 << (CParser.Not - 71)) | (1 << (CParser.Tilde - 71)))) !== 0) || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (CParser.Identifier - 105)) | (1 << (CParser.Constant - 105)) | (1 << (CParser.StringLiteral - 105)))) !== 0)) {
this.state = 2889;
this.expression(0);
}
this.state = 2892;
this.match(CParser.Semi);
this.state = 2893;
this.match(CParser.EOF);
break;
case 5:
this.enterOuterAlt(localctx, 5);
this.state = 2894;
this.match(CParser.Goto);
this.state = 2895;
this.unaryExpression();
this.state = 2896;
this.match(CParser.Semi);
this.state = 2897;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function CompilationUnit_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_compilationUnit_DropletFile;
return this;
}
CompilationUnit_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
CompilationUnit_DropletFileContext.prototype.constructor = CompilationUnit_DropletFileContext;
CompilationUnit_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
CompilationUnit_DropletFileContext.prototype.translationUnit = function() {
return this.getTypedRuleContext(TranslationUnitContext,0);
};
CompilationUnit_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterCompilationUnit_DropletFile(this);
}
};
CompilationUnit_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitCompilationUnit_DropletFile(this);
}
};
CParser.CompilationUnit_DropletFileContext = CompilationUnit_DropletFileContext;
CParser.prototype.compilationUnit_DropletFile = function() {
var localctx = new CompilationUnit_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 366, CParser.RULE_compilationUnit_DropletFile);
var _la = 0; // Token type
try {
this.state = 2906;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,277,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2902;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__3) | (1 << CParser.T__4) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__11) | (1 << CParser.Auto) | (1 << CParser.Char) | (1 << CParser.Const) | (1 << CParser.Double) | (1 << CParser.Enum) | (1 << CParser.Extern) | (1 << CParser.Float) | (1 << CParser.Inline))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (CParser.Int - 32)) | (1 << (CParser.Long - 32)) | (1 << (CParser.Register - 32)) | (1 << (CParser.Restrict - 32)) | (1 << (CParser.Short - 32)) | (1 << (CParser.Signed - 32)) | (1 << (CParser.Static - 32)) | (1 << (CParser.Struct - 32)) | (1 << (CParser.Typedef - 32)) | (1 << (CParser.Union - 32)) | (1 << (CParser.Unsigned - 32)) | (1 << (CParser.Void - 32)) | (1 << (CParser.Volatile - 32)) | (1 << (CParser.Alignas - 32)) | (1 << (CParser.Atomic - 32)) | (1 << (CParser.Bool - 32)) | (1 << (CParser.Complex - 32)) | (1 << (CParser.Noreturn - 32)) | (1 << (CParser.StaticAssert - 32)) | (1 << (CParser.ThreadLocal - 32)) | (1 << (CParser.LeftParen - 32)))) !== 0) || ((((_la - 75)) & ~0x1f) == 0 && ((1 << (_la - 75)) & ((1 << (CParser.Star - 75)) | (1 << (CParser.Caret - 75)) | (1 << (CParser.Semi - 75)) | (1 << (CParser.Identifier - 75)))) !== 0)) {
this.state = 2901;
this.translationUnit(0);
}
this.state = 2904;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2905;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function TranslationUnit_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_translationUnit_DropletFile;
return this;
}
TranslationUnit_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TranslationUnit_DropletFileContext.prototype.constructor = TranslationUnit_DropletFileContext;
TranslationUnit_DropletFileContext.prototype.externalDeclaration = function() {
return this.getTypedRuleContext(ExternalDeclarationContext,0);
};
TranslationUnit_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
TranslationUnit_DropletFileContext.prototype.translationUnit = function() {
return this.getTypedRuleContext(TranslationUnitContext,0);
};
TranslationUnit_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterTranslationUnit_DropletFile(this);
}
};
TranslationUnit_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitTranslationUnit_DropletFile(this);
}
};
CParser.TranslationUnit_DropletFileContext = TranslationUnit_DropletFileContext;
CParser.prototype.translationUnit_DropletFile = function() {
var localctx = new TranslationUnit_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 368, CParser.RULE_translationUnit_DropletFile);
try {
this.state = 2915;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,278,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2908;
this.externalDeclaration();
this.state = 2909;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2911;
this.translationUnit(0);
this.state = 2912;
this.externalDeclaration();
this.state = 2913;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function ExternalDeclaration_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_externalDeclaration_DropletFile;
return this;
}
ExternalDeclaration_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ExternalDeclaration_DropletFileContext.prototype.constructor = ExternalDeclaration_DropletFileContext;
ExternalDeclaration_DropletFileContext.prototype.functionDefinition = function() {
return this.getTypedRuleContext(FunctionDefinitionContext,0);
};
ExternalDeclaration_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
ExternalDeclaration_DropletFileContext.prototype.declaration = function() {
return this.getTypedRuleContext(DeclarationContext,0);
};
ExternalDeclaration_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterExternalDeclaration_DropletFile(this);
}
};
ExternalDeclaration_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitExternalDeclaration_DropletFile(this);
}
};
CParser.ExternalDeclaration_DropletFileContext = ExternalDeclaration_DropletFileContext;
CParser.prototype.externalDeclaration_DropletFile = function() {
var localctx = new ExternalDeclaration_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 370, CParser.RULE_externalDeclaration_DropletFile);
try {
this.state = 2925;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,279,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2917;
this.functionDefinition();
this.state = 2918;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2920;
this.declaration();
this.state = 2921;
this.match(CParser.EOF);
break;
case 3:
this.enterOuterAlt(localctx, 3);
this.state = 2923;
this.match(CParser.Semi);
this.state = 2924;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function FunctionDefinition_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_functionDefinition_DropletFile;
return this;
}
FunctionDefinition_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
FunctionDefinition_DropletFileContext.prototype.constructor = FunctionDefinition_DropletFileContext;
FunctionDefinition_DropletFileContext.prototype.declarator = function() {
return this.getTypedRuleContext(DeclaratorContext,0);
};
FunctionDefinition_DropletFileContext.prototype.compoundStatement = function() {
return this.getTypedRuleContext(CompoundStatementContext,0);
};
FunctionDefinition_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
FunctionDefinition_DropletFileContext.prototype.declarationSpecifiers = function() {
return this.getTypedRuleContext(DeclarationSpecifiersContext,0);
};
FunctionDefinition_DropletFileContext.prototype.declarationList = function() {
return this.getTypedRuleContext(DeclarationListContext,0);
};
FunctionDefinition_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterFunctionDefinition_DropletFile(this);
}
};
FunctionDefinition_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitFunctionDefinition_DropletFile(this);
}
};
CParser.FunctionDefinition_DropletFileContext = FunctionDefinition_DropletFileContext;
CParser.prototype.functionDefinition_DropletFile = function() {
var localctx = new FunctionDefinition_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 372, CParser.RULE_functionDefinition_DropletFile);
var _la = 0; // Token type
try {
this.enterOuterAlt(localctx, 1);
this.state = 2928;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,280,this._ctx);
if(la_===1) {
this.state = 2927;
this.declarationSpecifiers();
}
this.state = 2930;
this.declarator();
this.state = 2932;
this._errHandler.sync(this);
_la = this._input.LA(1);
if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__3) | (1 << CParser.T__4) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__11) | (1 << CParser.Auto) | (1 << CParser.Char) | (1 << CParser.Const) | (1 << CParser.Double) | (1 << CParser.Enum) | (1 << CParser.Extern) | (1 << CParser.Float) | (1 << CParser.Inline))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (CParser.Int - 32)) | (1 << (CParser.Long - 32)) | (1 << (CParser.Register - 32)) | (1 << (CParser.Restrict - 32)) | (1 << (CParser.Short - 32)) | (1 << (CParser.Signed - 32)) | (1 << (CParser.Static - 32)) | (1 << (CParser.Struct - 32)) | (1 << (CParser.Typedef - 32)) | (1 << (CParser.Union - 32)) | (1 << (CParser.Unsigned - 32)) | (1 << (CParser.Void - 32)) | (1 << (CParser.Volatile - 32)) | (1 << (CParser.Alignas - 32)) | (1 << (CParser.Atomic - 32)) | (1 << (CParser.Bool - 32)) | (1 << (CParser.Complex - 32)) | (1 << (CParser.Noreturn - 32)) | (1 << (CParser.StaticAssert - 32)) | (1 << (CParser.ThreadLocal - 32)))) !== 0) || _la===CParser.Identifier) {
this.state = 2931;
this.declarationList(0);
}
this.state = 2934;
this.compoundStatement();
this.state = 2935;
this.match(CParser.EOF);
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
function DeclarationList_DropletFileContext(parser, parent, invokingState) {
if(parent===undefined) {
parent = null;
}
if(invokingState===undefined || invokingState===null) {
invokingState = -1;
}
antlr4.ParserRuleContext.call(this, parent, invokingState);
this.parser = parser;
this.ruleIndex = CParser.RULE_declarationList_DropletFile;
return this;
}
DeclarationList_DropletFileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DeclarationList_DropletFileContext.prototype.constructor = DeclarationList_DropletFileContext;
DeclarationList_DropletFileContext.prototype.declaration = function() {
return this.getTypedRuleContext(DeclarationContext,0);
};
DeclarationList_DropletFileContext.prototype.EOF = function() {
return this.getToken(CParser.EOF, 0);
};
DeclarationList_DropletFileContext.prototype.declarationList = function() {
return this.getTypedRuleContext(DeclarationListContext,0);
};
DeclarationList_DropletFileContext.prototype.enterRule = function(listener) {
if(listener instanceof CListener ) {
listener.enterDeclarationList_DropletFile(this);
}
};
DeclarationList_DropletFileContext.prototype.exitRule = function(listener) {
if(listener instanceof CListener ) {
listener.exitDeclarationList_DropletFile(this);
}
};
CParser.DeclarationList_DropletFileContext = DeclarationList_DropletFileContext;
CParser.prototype.declarationList_DropletFile = function() {
var localctx = new DeclarationList_DropletFileContext(this, this._ctx, this.state);
this.enterRule(localctx, 374, CParser.RULE_declarationList_DropletFile);
try {
this.state = 2944;
this._errHandler.sync(this);
var la_ = this._interp.adaptivePredict(this._input,282,this._ctx);
switch(la_) {
case 1:
this.enterOuterAlt(localctx, 1);
this.state = 2937;
this.declaration();
this.state = 2938;
this.match(CParser.EOF);
break;
case 2:
this.enterOuterAlt(localctx, 2);
this.state = 2940;
this.declarationList(0);
this.state = 2941;
this.declaration();
this.state = 2942;
this.match(CParser.EOF);
break;
}
} catch (re) {
if(re instanceof antlr4.error.RecognitionException) {
localctx.exception = re;
this._errHandler.reportError(this, re);
this._errHandler.recover(this, re);
} else {
throw re;
}
} finally {
this.exitRule();
}
return localctx;
};
CParser.prototype.sempred = function(localctx, ruleIndex, predIndex) {
switch(ruleIndex) {
case 2:
return this.genericAssocList_sempred(localctx, predIndex);
case 4:
return this.postfixExpression_sempred(localctx, predIndex);
case 5:
return this.argumentExpressionList_sempred(localctx, predIndex);
case 10:
return this.multiplicativeExpression_sempred(localctx, predIndex);
case 11:
return this.additiveExpression_sempred(localctx, predIndex);
case 12:
return this.shiftExpression_sempred(localctx, predIndex);
case 13:
return this.relationalExpression_sempred(localctx, predIndex);
case 14:
return this.equalityExpression_sempred(localctx, predIndex);
case 15:
return this.andExpression_sempred(localctx, predIndex);
case 16:
return this.exclusiveOrExpression_sempred(localctx, predIndex);
case 17:
return this.inclusiveOrExpression_sempred(localctx, predIndex);
case 18:
return this.logicalAndExpression_sempred(localctx, predIndex);
case 19:
return this.logicalOrExpression_sempred(localctx, predIndex);
case 23:
return this.expression_sempred(localctx, predIndex);
case 30:
return this.initDeclaratorList_sempred(localctx, predIndex);
case 37:
return this.structDeclarationList_sempred(localctx, predIndex);
case 40:
return this.structDeclaratorList_sempred(localctx, predIndex);
case 43:
return this.enumeratorList_sempred(localctx, predIndex);
case 52:
return this.directDeclarator_sempred(localctx, predIndex);
case 59:
return this.typeQualifierList_sempred(localctx, predIndex);
case 61:
return this.parameterList_sempred(localctx, predIndex);
case 63:
return this.identifierList_sempred(localctx, predIndex);
case 66:
return this.directAbstractDeclarator_sempred(localctx, predIndex);
case 69:
return this.initializerList_sempred(localctx, predIndex);
case 71:
return this.designatorList_sempred(localctx, predIndex);
case 78:
return this.blockItemList_sempred(localctx, predIndex);
case 85:
return this.switchCaseList_sempred(localctx, predIndex);
case 90:
return this.translationUnit_sempred(localctx, predIndex);
case 93:
return this.declarationList_sempred(localctx, predIndex);
default:
throw "No predicate with index:" + ruleIndex;
}
};
CParser.prototype.genericAssocList_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 0:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.postfixExpression_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 1:
return this.precpred(this._ctx, 10);
case 2:
return this.precpred(this._ctx, 9);
case 3:
return this.precpred(this._ctx, 8);
case 4:
return this.precpred(this._ctx, 7);
case 5:
return this.precpred(this._ctx, 6);
case 6:
return this.precpred(this._ctx, 5);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.argumentExpressionList_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 7:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.multiplicativeExpression_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 8:
return this.precpred(this._ctx, 3);
case 9:
return this.precpred(this._ctx, 2);
case 10:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.additiveExpression_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 11:
return this.precpred(this._ctx, 2);
case 12:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.shiftExpression_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 13:
return this.precpred(this._ctx, 2);
case 14:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.relationalExpression_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 15:
return this.precpred(this._ctx, 4);
case 16:
return this.precpred(this._ctx, 3);
case 17:
return this.precpred(this._ctx, 2);
case 18:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.equalityExpression_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 19:
return this.precpred(this._ctx, 2);
case 20:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.andExpression_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 21:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.exclusiveOrExpression_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 22:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.inclusiveOrExpression_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 23:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.logicalAndExpression_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 24:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.logicalOrExpression_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 25:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.expression_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 26:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.initDeclaratorList_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 27:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.structDeclarationList_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 28:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.structDeclaratorList_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 29:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.enumeratorList_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 30:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.directDeclarator_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 31:
return this.precpred(this._ctx, 6);
case 32:
return this.precpred(this._ctx, 5);
case 33:
return this.precpred(this._ctx, 4);
case 34:
return this.precpred(this._ctx, 3);
case 35:
return this.precpred(this._ctx, 2);
case 36:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.typeQualifierList_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 37:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.parameterList_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 38:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.identifierList_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 39:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.directAbstractDeclarator_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 40:
return this.precpred(this._ctx, 5);
case 41:
return this.precpred(this._ctx, 4);
case 42:
return this.precpred(this._ctx, 3);
case 43:
return this.precpred(this._ctx, 2);
case 44:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.initializerList_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 45:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.designatorList_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 46:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.blockItemList_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 47:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.switchCaseList_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 48:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.translationUnit_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 49:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
CParser.prototype.declarationList_sempred = function(localctx, predIndex) {
switch(predIndex) {
case 50:
return this.precpred(this._ctx, 1);
default:
throw "No predicate with index:" + predIndex;
}
};
exports.CParser = CParser;
},{"./CListener":3,"antlr4/index":47}],5:[function(require,module,exports){
module.exports = assign;
function assign (target, firstSource) {
if (arguments.length === 1) {
firstSource = arguments[0];
return function (target) {
return assign(target, firstSource);
};
}
if (target === undefined || target === null)
throw new TypeError('Cannot convert first argument to object');
var to = Object(target);
for (var i = 1; i < arguments.length; i++) {
var nextSource = arguments[i];
if (nextSource === undefined || nextSource === null) continue;
var keysArray = Object.keys(Object(nextSource));
for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {
var nextKey = keysArray[nextIndex];
Object.getOwnPropertyDescriptor(nextSource, nextKey);
to[nextKey] = nextSource[nextKey];
}
}
return to;
}
},{}],6:[function(require,module,exports){
//
//
var Token = require('./Token').Token;
var Lexer = require('./Lexer').Lexer;
var Interval = require('./IntervalSet').Interval;
function TokenStream() {
return this;
}
function BufferedTokenStream(tokenSource) {
TokenStream.call(this);
this.tokenSource = tokenSource;
this.tokens = [];
//
this.index = -1;
//
this.fetchedEOF = false;
return this;
}
BufferedTokenStream.prototype = Object.create(TokenStream.prototype);
BufferedTokenStream.prototype.constructor = BufferedTokenStream;
BufferedTokenStream.prototype.mark = function() {
return 0;
};
BufferedTokenStream.prototype.release = function(marker) {
};
BufferedTokenStream.prototype.reset = function() {
this.seek(0);
};
BufferedTokenStream.prototype.seek = function(index) {
this.lazyInit();
this.index = this.adjustSeekIndex(index);
};
BufferedTokenStream.prototype.get = function(index) {
this.lazyInit();
return this.tokens[index];
};
BufferedTokenStream.prototype.consume = function() {
var skipEofCheck = false;
if (this.index >= 0) {
if (this.fetchedEOF) {
skipEofCheck = this.index < this.tokens.length - 1;
} else {
skipEofCheck = this.index < this.tokens.length;
}
} else {
skipEofCheck = false;
}
if (!skipEofCheck && this.LA(1) === Token.EOF) {
throw "cannot consume EOF";
}
if (this.sync(this.index + 1)) {
this.index = this.adjustSeekIndex(this.index + 1);
}
};
//
BufferedTokenStream.prototype.sync = function(i) {
var n = i - this.tokens.length + 1; // how many more elements we need?
if (n > 0) {
var fetched = this.fetch(n);
return fetched >= n;
}
return true;
};
//
BufferedTokenStream.prototype.fetch = function(n) {
if (this.fetchedEOF) {
return 0;
}
for (var i = 0; i < n; i++) {
var t = this.tokenSource.nextToken();
t.tokenIndex = this.tokens.length;
this.tokens.push(t);
if (t.type === Token.EOF) {
this.fetchedEOF = true;
return i + 1;
}
}
return n;
};
BufferedTokenStream.prototype.getTokens = function(start, stop, types) {
if (types === undefined) {
types = null;
}
if (start < 0 || stop < 0) {
return null;
}
this.lazyInit();
var subset = [];
if (stop >= this.tokens.length) {
stop = this.tokens.length - 1;
}
for (var i = start; i < stop; i++) {
var t = this.tokens[i];
if (t.type === Token.EOF) {
break;
}
if (types === null || types.contains(t.type)) {
subset.push(t);
}
}
return subset;
};
BufferedTokenStream.prototype.LA = function(i) {
return this.LT(i).type;
};
BufferedTokenStream.prototype.LB = function(k) {
if (this.index - k < 0) {
return null;
}
return this.tokens[this.index - k];
};
BufferedTokenStream.prototype.LT = function(k) {
this.lazyInit();
if (k === 0) {
return null;
}
if (k < 0) {
return this.LB(-k);
}
var i = this.index + k - 1;
this.sync(i);
if (i >= this.tokens.length) { // return EOF token
return this.tokens[this.tokens.length - 1];
}
return this.tokens[i];
};
//
//
BufferedTokenStream.prototype.adjustSeekIndex = function(i) {
return i;
};
BufferedTokenStream.prototype.lazyInit = function() {
if (this.index === -1) {
this.setup();
}
};
BufferedTokenStream.prototype.setup = function() {
this.sync(0);
this.index = this.adjustSeekIndex(0);
};
BufferedTokenStream.prototype.setTokenSource = function(tokenSource) {
this.tokenSource = tokenSource;
this.tokens = [];
this.index = -1;
this.fetchedEOF = false;
};
BufferedTokenStream.prototype.nextTokenOnChannel = function(i, channel) {
this.sync(i);
if (i >= this.tokens.length) {
return -1;
}
var token = this.tokens[i];
while (token.channel !== this.channel) {
if (token.type === Token.EOF) {
return -1;
}
i += 1;
this.sync(i);
token = this.tokens[i];
}
return i;
};
BufferedTokenStream.prototype.previousTokenOnChannel = function(i, channel) {
while (i >= 0 && this.tokens[i].channel !== channel) {
i -= 1;
}
return i;
};
BufferedTokenStream.prototype.getHiddenTokensToRight = function(tokenIndex,
channel) {
if (channel === undefined) {
channel = -1;
}
this.lazyInit();
if (tokenIndex < 0 || tokenIndex >= this.tokens.length) {
throw "" + tokenIndex + " not in 0.." + this.tokens.length - 1;
}
var nextOnChannel = this.nextTokenOnChannel(tokenIndex + 1, Lexer.DEFAULT_TOKEN_CHANNEL);
var from_ = tokenIndex + 1;
var to = nextOnChannel === -1 ? this.tokens.length - 1 : nextOnChannel;
return this.filterForChannel(from_, to, channel);
};
BufferedTokenStream.prototype.getHiddenTokensToLeft = function(tokenIndex,
channel) {
if (channel === undefined) {
channel = -1;
}
this.lazyInit();
if (tokenIndex < 0 || tokenIndex >= this.tokens.length) {
throw "" + tokenIndex + " not in 0.." + this.tokens.length - 1;
}
var prevOnChannel = this.previousTokenOnChannel(tokenIndex - 1, Lexer.DEFAULT_TOKEN_CHANNEL);
if (prevOnChannel === tokenIndex - 1) {
return null;
}
var from_ = prevOnChannel + 1;
var to = tokenIndex - 1;
return this.filterForChannel(from_, to, channel);
};
BufferedTokenStream.prototype.filterForChannel = function(left, right, channel) {
var hidden = [];
for (var i = left; i < right + 1; i++) {
var t = this.tokens[i];
if (channel === -1) {
if (t.channel !== Lexer.DEFAULT_TOKEN_CHANNEL) {
hidden.push(t);
}
} else if (t.channel === channel) {
hidden.push(t);
}
}
if (hidden.length === 0) {
return null;
}
return hidden;
};
BufferedTokenStream.prototype.getSourceName = function() {
return this.tokenSource.getSourceName();
};
BufferedTokenStream.prototype.getText = function(interval) {
this.lazyInit();
this.fill();
if (interval === undefined || interval === null) {
interval = new Interval(0, this.tokens.length - 1);
}
var start = interval.start;
if (start instanceof Token) {
start = start.tokenIndex;
}
var stop = interval.stop;
if (stop instanceof Token) {
stop = stop.tokenIndex;
}
if (start === null || stop === null || start < 0 || stop < 0) {
return "";
}
if (stop >= this.tokens.length) {
stop = this.tokens.length - 1;
}
var s = "";
for (var i = start; i < stop + 1; i++) {
var t = this.tokens[i];
if (t.type === Token.EOF) {
break;
}
s = s + t.text;
}
return s;
};
BufferedTokenStream.prototype.fill = function() {
this.lazyInit();
while (this.fetch(1000) === 1000) {
continue;
}
};
exports.BufferedTokenStream = BufferedTokenStream;
},{"./IntervalSet":12,"./Lexer":14,"./Token":20}],7:[function(require,module,exports){
//
//
var InputStream = require('./InputStream').InputStream;
var isNodeJs = typeof window === 'undefined' && typeof importScripts === 'undefined';
var fs = isNodeJs ? require("fs") : null;
//
var CharStreams = {
fromString: function(str) {
return new InputStream(str, true);
},
//
fromBlob: function(blob, encoding, onLoad, onError) {
var reader = FileReader();
reader.onload = function(e) {
var is = new InputStream(e.target.result, true);
onLoad(is);
};
reader.onerror = onError;
reader.readAsText(blob, encoding);
},
fromBuffer: function(buffer, encoding) {
return new InputStream(buffer.toString(encoding), true);
},
//
fromPath: function(path, encoding, callback) {
fs.readFile(path, encoding, function(err, data) {
var is = null;
if (data !== null) {
is = new InputStream(data, true);
}
callback(err, is);
});
},
fromPathSync: function(path, encoding) {
var data = fs.readFileSync(path, encoding);
return new InputStream(data, true);
}
};
exports.CharStreams = CharStreams;
},{"./InputStream":11,"fs":55}],8:[function(require,module,exports){
//
//
//
//
var CommonToken = require('./Token').CommonToken;
function TokenFactory() {
return this;
}
function CommonTokenFactory(copyText) {
TokenFactory.call(this);
//
//
this.copyText = copyText===undefined ? false : copyText;
return this;
}
CommonTokenFactory.prototype = Object.create(TokenFactory.prototype);
CommonTokenFactory.prototype.constructor = CommonTokenFactory;
//
//
//
CommonTokenFactory.DEFAULT = new CommonTokenFactory();
CommonTokenFactory.prototype.create = function(source, type, text, channel, start, stop, line, column) {
var t = new CommonToken(source, type, channel, start, stop);
t.line = line;
t.column = column;
if (text !==null) {
t.text = text;
} else if (this.copyText && source[1] !==null) {
t.text = source[1].getText(start,stop);
}
return t;
};
CommonTokenFactory.prototype.createThin = function(type, text) {
var t = new CommonToken(null, type);
t.text = text;
return t;
};
exports.CommonTokenFactory = CommonTokenFactory;
},{"./Token":20}],9:[function(require,module,exports){
//
//
//
//
//
var Token = require('./Token').Token;
var BufferedTokenStream = require('./BufferedTokenStream').BufferedTokenStream;
function CommonTokenStream(lexer, channel) {
BufferedTokenStream.call(this, lexer);
this.channel = channel===undefined ? Token.DEFAULT_CHANNEL : channel;
return this;
}
CommonTokenStream.prototype = Object.create(BufferedTokenStream.prototype);
CommonTokenStream.prototype.constructor = CommonTokenStream;
CommonTokenStream.prototype.adjustSeekIndex = function(i) {
return this.nextTokenOnChannel(i, this.channel);
};
CommonTokenStream.prototype.LB = function(k) {
if (k===0 || this.index-k<0) {
return null;
}
var i = this.index;
var n = 1;
while (n <= k) {
i = this.previousTokenOnChannel(i - 1, this.channel);
n += 1;
}
if (i < 0) {
return null;
}
return this.tokens[i];
};
CommonTokenStream.prototype.LT = function(k) {
this.lazyInit();
if (k === 0) {
return null;
}
if (k < 0) {
return this.LB(-k);
}
var i = this.index;
var n = 1; // we know tokens[pos] is a good one
while (n < k) {
if (this.sync(i + 1)) {
i = this.nextTokenOnChannel(i + 1, this.channel);
}
n += 1;
}
return this.tokens[i];
};
CommonTokenStream.prototype.getNumberOfOnChannelTokens = function() {
var n = 0;
this.fill();
for (var i =0; i< this.tokens.length;i++) {
var t = this.tokens[i];
if( t.channel===this.channel) {
n += 1;
}
if( t.type===Token.EOF) {
break;
}
}
return n;
};
exports.CommonTokenStream = CommonTokenStream;
},{"./BufferedTokenStream":6,"./Token":20}],10:[function(require,module,exports){
//
//
//
//
var InputStream = require('./InputStream').InputStream;
var isNodeJs = typeof window === 'undefined' && typeof importScripts === 'undefined';
var fs = isNodeJs ? require("fs") : null;
function FileStream(fileName, decodeToUnicodeCodePoints) {
var data = fs.readFileSync(fileName, "utf8");
InputStream.call(this, data, decodeToUnicodeCodePoints);
this.fileName = fileName;
return this;
}
FileStream.prototype = Object.create(InputStream.prototype);
FileStream.prototype.constructor = FileStream;
exports.FileStream = FileStream;
},{"./InputStream":11,"fs":55}],11:[function(require,module,exports){
//
//
var Token = require('./Token').Token;
require('./polyfills/codepointat');
require('./polyfills/fromcodepoint');
function _loadString(stream, decodeToUnicodeCodePoints) {
stream._index = 0;
stream.data = [];
if (stream.decodeToUnicodeCodePoints) {
for (var i = 0; i < stream.strdata.length; ) {
var codePoint = stream.strdata.codePointAt(i);
stream.data.push(codePoint);
i += codePoint <= 0xFFFF ? 1 : 2;
}
} else {
for (var i = 0; i < stream.strdata.length; i++) {
var codeUnit = stream.strdata.charCodeAt(i);
stream.data.push(codeUnit);
}
}
stream._size = stream.data.length;
}
//
function InputStream(data, decodeToUnicodeCodePoints) {
this.name = "";
this.strdata = data;
this.decodeToUnicodeCodePoints = decodeToUnicodeCodePoints || false;
_loadString(this);
return this;
}
Object.defineProperty(InputStream.prototype, "index", {
get : function() {
return this._index;
}
});
Object.defineProperty(InputStream.prototype, "size", {
get : function() {
return this._size;
}
});
//
InputStream.prototype.reset = function() {
this._index = 0;
};
InputStream.prototype.consume = function() {
if (this._index >= this._size) {
throw ("cannot consume EOF");
}
this._index += 1;
};
InputStream.prototype.LA = function(offset) {
if (offset === 0) {
return 0; // undefined
}
if (offset < 0) {
offset += 1; // e.g., translate LA(-1) to use offset=0
}
var pos = this._index + offset - 1;
if (pos < 0 || pos >= this._size) { // invalid
return Token.EOF;
}
return this.data[pos];
};
InputStream.prototype.LT = function(offset) {
return this.LA(offset);
};
InputStream.prototype.mark = function() {
return -1;
};
InputStream.prototype.release = function(marker) {
};
//
InputStream.prototype.seek = function(_index) {
if (_index <= this._index) {
this._index = _index; // just jump; don't update stream state (line,
return;
}
this._index = Math.min(_index, this._size);
};
InputStream.prototype.getText = function(start, stop) {
if (stop >= this._size) {
stop = this._size - 1;
}
if (start >= this._size) {
return "";
} else {
if (this.decodeToUnicodeCodePoints) {
var result = "";
for (var i = start; i <= stop; i++) {
result += String.fromCodePoint(this.data[i]);
}
return result;
} else {
return this.strdata.slice(start, stop + 1);
}
}
};
InputStream.prototype.toString = function() {
return this.strdata;
};
exports.InputStream = InputStream;
},{"./Token":20,"./polyfills/codepointat":48,"./polyfills/fromcodepoint":49}],12:[function(require,module,exports){
var Token = require('./Token').Token;
function Interval(start, stop) {
this.start = start;
this.stop = stop;
return this;
}
Interval.prototype.contains = function(item) {
return item >= this.start && item < this.stop;
};
Interval.prototype.toString = function() {
if(this.start===this.stop-1) {
return this.start.toString();
} else {
return this.start.toString() + ".." + (this.stop-1).toString();
}
};
Object.defineProperty(Interval.prototype, "length", {
get : function() {
return this.stop - this.start;
}
});
function IntervalSet() {
this.intervals = null;
this.readOnly = false;
}
IntervalSet.prototype.first = function(v) {
if (this.intervals === null || this.intervals.length===0) {
return Token.INVALID_TYPE;
} else {
return this.intervals[0].start;
}
};
IntervalSet.prototype.addOne = function(v) {
this.addInterval(new Interval(v, v + 1));
};
IntervalSet.prototype.addRange = function(l, h) {
this.addInterval(new Interval(l, h + 1));
};
IntervalSet.prototype.addInterval = function(v) {
if (this.intervals === null) {
this.intervals = [];
this.intervals.push(v);
} else {
for (var k = 0; k < this.intervals.length; k++) {
var i = this.intervals[k];
if (v.stop < i.start) {
this.intervals.splice(k, 0, v);
return;
}
else if (v.stop === i.start) {
this.intervals[k].start = v.start;
return;
}
else if (v.start <= i.stop) {
this.intervals[k] = new Interval(Math.min(i.start, v.start), Math.max(i.stop, v.stop));
this.reduce(k);
return;
}
}
this.intervals.push(v);
}
};
IntervalSet.prototype.addSet = function(other) {
if (other.intervals !== null) {
for (var k = 0; k < other.intervals.length; k++) {
var i = other.intervals[k];
this.addInterval(new Interval(i.start, i.stop));
}
}
return this;
};
IntervalSet.prototype.reduce = function(k) {
if (k < this.intervalslength - 1) {
var l = this.intervals[k];
var r = this.intervals[k + 1];
if (l.stop >= r.stop) {
this.intervals.pop(k + 1);
this.reduce(k);
} else if (l.stop >= r.start) {
this.intervals[k] = new Interval(l.start, r.stop);
this.intervals.pop(k + 1);
}
}
};
IntervalSet.prototype.complement = function(start, stop) {
var result = new IntervalSet();
result.addInterval(new Interval(start,stop+1));
for(var i=0; ii.start && v.stop=i.stop) {
this.intervals.splice(k, 1);
k = k - 1; // need another pass
}
else if(v.start");
} else {
names.push("'" + String.fromCharCode(v.start) + "'");
}
} else {
names.push("'" + String.fromCharCode(v.start) + "'..'" + String.fromCharCode(v.stop-1) + "'");
}
}
if (names.length > 1) {
return "{" + names.join(", ") + "}";
} else {
return names[0];
}
};
IntervalSet.prototype.toIndexString = function() {
var names = [];
for (var i = 0; i < this.intervals.length; i++) {
var v = this.intervals[i];
if(v.stop===v.start+1) {
if ( v.start===Token.EOF ) {
names.push("");
} else {
names.push(v.start.toString());
}
} else {
names.push(v.start.toString() + ".." + (v.stop-1).toString());
}
}
if (names.length > 1) {
return "{" + names.join(", ") + "}";
} else {
return names[0];
}
};
IntervalSet.prototype.toTokenString = function(literalNames, symbolicNames) {
var names = [];
for (var i = 0; i < this.intervals.length; i++) {
var v = this.intervals[i];
for (var j = v.start; j < v.stop; j++) {
names.push(this.elementName(literalNames, symbolicNames, j));
}
}
if (names.length > 1) {
return "{" + names.join(", ") + "}";
} else {
return names[0];
}
};
IntervalSet.prototype.elementName = function(literalNames, symbolicNames, a) {
if (a === Token.EOF) {
return "";
} else if (a === Token.EPSILON) {
return "";
} else {
return literalNames[a] || symbolicNames[a];
}
};
exports.Interval = Interval;
exports.IntervalSet = IntervalSet;
},{"./Token":20}],13:[function(require,module,exports){
//
var Set = require('./Utils').Set;
var BitSet = require('./Utils').BitSet;
var Token = require('./Token').Token;
var ATNConfig = require('./atn/ATNConfig').ATNConfig;
var Interval = require('./IntervalSet').Interval;
var IntervalSet = require('./IntervalSet').IntervalSet;
var RuleStopState = require('./atn/ATNState').RuleStopState;
var RuleTransition = require('./atn/Transition').RuleTransition;
var NotSetTransition = require('./atn/Transition').NotSetTransition;
var WildcardTransition = require('./atn/Transition').WildcardTransition;
var AbstractPredicateTransition = require('./atn/Transition').AbstractPredicateTransition;
var pc = require('./PredictionContext');
var predictionContextFromRuleContext = pc.predictionContextFromRuleContext;
var PredictionContext = pc.PredictionContext;
var SingletonPredictionContext = pc.SingletonPredictionContext;
function LL1Analyzer (atn) {
this.atn = atn;
}
LL1Analyzer.HIT_PRED = Token.INVALID_TYPE;
//
LL1Analyzer.prototype.getDecisionLookahead = function(s) {
if (s === null) {
return null;
}
var count = s.transitions.length;
var look = [];
for(var alt=0; alt< count; alt++) {
look[alt] = new IntervalSet();
var lookBusy = new Set();
var seeThruPreds = false; // fail to get lookahead upon pred
this._LOOK(s.transition(alt).target, null, PredictionContext.EMPTY,
look[alt], lookBusy, new BitSet(), seeThruPreds, false);
if (look[alt].length===0 || look[alt].contains(LL1Analyzer.HIT_PRED)) {
look[alt] = null;
}
}
return look;
};
//
//
//
LL1Analyzer.prototype.LOOK = function(s, stopState, ctx) {
var r = new IntervalSet();
var seeThruPreds = true; // ignore preds; get all lookahead
ctx = ctx || null;
var lookContext = ctx!==null ? predictionContextFromRuleContext(s.atn, ctx) : null;
this._LOOK(s, stopState, lookContext, r, new Set(), new BitSet(), seeThruPreds, true);
return r;
};
//
//
LL1Analyzer.prototype._LOOK = function(s, stopState , ctx, look, lookBusy, calledRuleStack, seeThruPreds, addEOF) {
var c = new ATNConfig({state:s, alt:0, context: ctx}, null);
if (lookBusy.contains(c)) {
return;
}
lookBusy.add(c);
if (s === stopState) {
if (ctx ===null) {
look.addOne(Token.EPSILON);
return;
} else if (ctx.isEmpty() && addEOF) {
look.addOne(Token.EOF);
return;
}
}
if (s instanceof RuleStopState ) {
if (ctx ===null) {
look.addOne(Token.EPSILON);
return;
} else if (ctx.isEmpty() && addEOF) {
look.addOne(Token.EOF);
return;
}
if (ctx !== PredictionContext.EMPTY) {
for(var i=0; i";
} else if (c === '\n') {
return "\\n";
} else if (c === '\t') {
return "\\t";
} else if (c === '\r') {
return "\\r";
} else {
return c;
}
};
Lexer.prototype.getCharErrorDisplay = function(c) {
return "'" + this.getErrorDisplayForChar(c) + "'";
};
Lexer.prototype.recover = function(re) {
if (this._input.LA(1) !== Token.EOF) {
if (re instanceof LexerNoViableAltException) {
this._interp.consume(this._input);
} else {
this._input.consume();
}
}
};
exports.Lexer = Lexer;
},{"./CommonTokenFactory":8,"./Recognizer":18,"./Token":20,"./error/Errors":45}],15:[function(require,module,exports){
var Token = require('./Token').Token;
var ParseTreeListener = require('./tree/Tree').ParseTreeListener;
var Recognizer = require('./Recognizer').Recognizer;
var DefaultErrorStrategy = require('./error/ErrorStrategy').DefaultErrorStrategy;
var ATNDeserializer = require('./atn/ATNDeserializer').ATNDeserializer;
var ATNDeserializationOptions = require('./atn/ATNDeserializationOptions').ATNDeserializationOptions;
var TerminalNode = require('./tree/Tree').TerminalNode;
var ErrorNode = require('./tree/Tree').ErrorNode;
function TraceListener(parser) {
ParseTreeListener.call(this);
this.parser = parser;
return this;
}
TraceListener.prototype = Object.create(ParseTreeListener.prototype);
TraceListener.prototype.constructor = TraceListener;
TraceListener.prototype.enterEveryRule = function(ctx) {
console.log("enter " + this.parser.ruleNames[ctx.ruleIndex] + ", LT(1)=" + this.parser._input.LT(1).text);
};
TraceListener.prototype.visitTerminal = function( node) {
console.log("consume " + node.symbol + " rule " + this.parser.ruleNames[this.parser._ctx.ruleIndex]);
};
TraceListener.prototype.exitEveryRule = function(ctx) {
console.log("exit " + this.parser.ruleNames[ctx.ruleIndex] + ", LT(1)=" + this.parser._input.LT(1).text);
};
function Parser(input) {
Recognizer.call(this);
this._input = null;
this._errHandler = new DefaultErrorStrategy();
this._precedenceStack = [];
this._precedenceStack.push(0);
this._ctx = null;
this.buildParseTrees = true;
this._tracer = null;
this._parseListeners = null;
this._syntaxErrors = 0;
this.setInputStream(input);
return this;
}
Parser.prototype = Object.create(Recognizer.prototype);
Parser.prototype.contructor = Parser;
//
//
Parser.bypassAltsAtnCache = {};
Parser.prototype.reset = function() {
if (this._input !== null) {
this._input.seek(0);
}
this._errHandler.reset(this);
this._ctx = null;
this._syntaxErrors = 0;
this.setTrace(false);
this._precedenceStack = [];
this._precedenceStack.push(0);
if (this._interp !== null) {
this._interp.reset();
}
};
//
//
Parser.prototype.match = function(ttype) {
var t = this.getCurrentToken();
if (t.type === ttype) {
this._errHandler.reportMatch(this);
this.consume();
} else {
t = this._errHandler.recoverInline(this);
if (this.buildParseTrees && t.tokenIndex === -1) {
this._ctx.addErrorNode(t);
}
}
return t;
};
//
//
Parser.prototype.matchWildcard = function() {
var t = this.getCurrentToken();
if (t.type > 0) {
this._errHandler.reportMatch(this);
this.consume();
} else {
t = this._errHandler.recoverInline(this);
if (this._buildParseTrees && t.tokenIndex === -1) {
this._ctx.addErrorNode(t);
}
}
return t;
};
Parser.prototype.getParseListeners = function() {
return this._parseListeners || [];
};
//
//
//
//
//
//
Parser.prototype.addParseListener = function(listener) {
if (listener === null) {
throw "listener";
}
if (this._parseListeners === null) {
this._parseListeners = [];
}
this._parseListeners.push(listener);
};
//
//
//
Parser.prototype.removeParseListener = function(listener) {
if (this._parseListeners !== null) {
var idx = this._parseListeners.indexOf(listener);
if (idx >= 0) {
this._parseListeners.splice(idx, 1);
}
if (this._parseListeners.length === 0) {
this._parseListeners = null;
}
}
};
Parser.prototype.removeParseListeners = function() {
this._parseListeners = null;
};
Parser.prototype.triggerEnterRuleEvent = function() {
if (this._parseListeners !== null) {
var ctx = this._ctx;
this._parseListeners.map(function(listener) {
listener.enterEveryRule(ctx);
ctx.enterRule(listener);
});
}
};
//
//
//
Parser.prototype.triggerExitRuleEvent = function() {
if (this._parseListeners !== null) {
var ctx = this._ctx;
this._parseListeners.slice(0).reverse().map(function(listener) {
ctx.exitRule(listener);
listener.exitEveryRule(ctx);
});
}
};
Parser.prototype.getTokenFactory = function() {
return this._input.tokenSource._factory;
};
Parser.prototype.setTokenFactory = function(factory) {
this._input.tokenSource._factory = factory;
};
//
//
Parser.prototype.getATNWithBypassAlts = function() {
var serializedAtn = this.getSerializedATN();
if (serializedAtn === null) {
throw "The current parser does not support an ATN with bypass alternatives.";
}
var result = this.bypassAltsAtnCache[serializedAtn];
if (result === null) {
var deserializationOptions = new ATNDeserializationOptions();
deserializationOptions.generateRuleBypassTransitions = true;
result = new ATNDeserializer(deserializationOptions)
.deserialize(serializedAtn);
this.bypassAltsAtnCache[serializedAtn] = result;
}
return result;
};
//
var Lexer = require('./Lexer').Lexer;
Parser.prototype.compileParseTreePattern = function(pattern, patternRuleIndex, lexer) {
lexer = lexer || null;
if (lexer === null) {
if (this.getTokenStream() !== null) {
var tokenSource = this.getTokenStream().tokenSource;
if (tokenSource instanceof Lexer) {
lexer = tokenSource;
}
}
}
if (lexer === null) {
throw "Parser can't discover a lexer to use";
}
var m = new ParseTreePatternMatcher(lexer, this);
return m.compile(pattern, patternRuleIndex);
};
Parser.prototype.getInputStream = function() {
return this.getTokenStream();
};
Parser.prototype.setInputStream = function(input) {
this.setTokenStream(input);
};
Parser.prototype.getTokenStream = function() {
return this._input;
};
Parser.prototype.setTokenStream = function(input) {
this._input = null;
this.reset();
this._input = input;
};
//
Parser.prototype.getCurrentToken = function() {
return this._input.LT(1);
};
Parser.prototype.notifyErrorListeners = function(msg, offendingToken, err) {
offendingToken = offendingToken || null;
err = err || null;
if (offendingToken === null) {
offendingToken = this.getCurrentToken();
}
this._syntaxErrors += 1;
var line = offendingToken.line;
var column = offendingToken.column;
var listener = this.getErrorListenerDispatch();
listener.syntaxError(this, offendingToken, line, column, msg, err);
};
//
//
//
//
//
Parser.prototype.consume = function() {
var o = this.getCurrentToken();
if (o.type !== Token.EOF) {
this.getInputStream().consume();
}
var hasListener = this._parseListeners !== null && this._parseListeners.length > 0;
if (this.buildParseTrees || hasListener) {
var node;
if (this._errHandler.inErrorRecoveryMode(this)) {
node = this._ctx.addErrorNode(o);
} else {
node = this._ctx.addTokenNode(o);
}
node.invokingState = this.state;
if (hasListener) {
this._parseListeners.map(function(listener) {
if (node instanceof ErrorNode || (node.isErrorNode !== undefined && node.isErrorNode())) {
listener.visitErrorNode(node);
} else if (node instanceof TerminalNode) {
listener.visitTerminal(node);
}
});
}
}
return o;
};
Parser.prototype.addContextToParseTree = function() {
if (this._ctx.parentCtx !== null) {
this._ctx.parentCtx.addChild(this._ctx);
}
};
Parser.prototype.enterRule = function(localctx, state, ruleIndex) {
this.state = state;
this._ctx = localctx;
this._ctx.start = this._input.LT(1);
if (this.buildParseTrees) {
this.addContextToParseTree();
}
if (this._parseListeners !== null) {
this.triggerEnterRuleEvent();
}
};
Parser.prototype.exitRule = function() {
this._ctx.stop = this._input.LT(-1);
if (this._parseListeners !== null) {
this.triggerExitRuleEvent();
}
this.state = this._ctx.invokingState;
this._ctx = this._ctx.parentCtx;
};
Parser.prototype.enterOuterAlt = function(localctx, altNum) {
localctx.setAltNumber(altNum);
if (this.buildParseTrees && this._ctx !== localctx) {
if (this._ctx.parentCtx !== null) {
this._ctx.parentCtx.removeLastChild();
this._ctx.parentCtx.addChild(localctx);
}
}
this._ctx = localctx;
};
//
Parser.prototype.getPrecedence = function() {
if (this._precedenceStack.length === 0) {
return -1;
} else {
return this._precedenceStack[this._precedenceStack.length-1];
}
};
Parser.prototype.enterRecursionRule = function(localctx, state, ruleIndex,
precedence) {
this.state = state;
this._precedenceStack.push(precedence);
this._ctx = localctx;
this._ctx.start = this._input.LT(1);
if (this._parseListeners !== null) {
this.triggerEnterRuleEvent(); // simulates rule entry for
}
};
//
Parser.prototype.pushNewRecursionContext = function(localctx, state, ruleIndex) {
var previous = this._ctx;
previous.parentCtx = localctx;
previous.invokingState = state;
previous.stop = this._input.LT(-1);
this._ctx = localctx;
this._ctx.start = previous.start;
if (this.buildParseTrees) {
this._ctx.addChild(previous);
}
if (this._parseListeners !== null) {
this.triggerEnterRuleEvent(); // simulates rule entry for
}
};
Parser.prototype.unrollRecursionContexts = function(parentCtx) {
this._precedenceStack.pop();
this._ctx.stop = this._input.LT(-1);
var retCtx = this._ctx; // save current ctx (return value)
if (this._parseListeners !== null) {
while (this._ctx !== parentCtx) {
this.triggerExitRuleEvent();
this._ctx = this._ctx.parentCtx;
}
} else {
this._ctx = parentCtx;
}
retCtx.parentCtx = parentCtx;
if (this.buildParseTrees && parentCtx !== null) {
parentCtx.addChild(retCtx);
}
};
Parser.prototype.getInvokingContext = function(ruleIndex) {
var ctx = this._ctx;
while (ctx !== null) {
if (ctx.ruleIndex === ruleIndex) {
return ctx;
}
ctx = ctx.parentCtx;
}
return null;
};
Parser.prototype.precpred = function(localctx, precedence) {
return precedence >= this._precedenceStack[this._precedenceStack.length-1];
};
Parser.prototype.inContext = function(context) {
return false;
};
//
//
//
Parser.prototype.isExpectedToken = function(symbol) {
var atn = this._interp.atn;
var ctx = this._ctx;
var s = atn.states[this.state];
var following = atn.nextTokens(s);
if (following.contains(symbol)) {
return true;
}
if (!following.contains(Token.EPSILON)) {
return false;
}
while (ctx !== null && ctx.invokingState >= 0 && following.contains(Token.EPSILON)) {
var invokingState = atn.states[ctx.invokingState];
var rt = invokingState.transitions[0];
following = atn.nextTokens(rt.followState);
if (following.contains(symbol)) {
return true;
}
ctx = ctx.parentCtx;
}
if (following.contains(Token.EPSILON) && symbol === Token.EOF) {
return true;
} else {
return false;
}
};
//
//
Parser.prototype.getExpectedTokens = function() {
return this._interp.atn.getExpectedTokens(this.state, this._ctx);
};
Parser.prototype.getExpectedTokensWithinCurrentRule = function() {
var atn = this._interp.atn;
var s = atn.states[this.state];
return atn.nextTokens(s);
};
Parser.prototype.getRuleIndex = function(ruleName) {
var ruleIndex = this.getRuleIndexMap()[ruleName];
if (ruleIndex !== null) {
return ruleIndex;
} else {
return -1;
}
};
//
//
Parser.prototype.getRuleInvocationStack = function(p) {
p = p || null;
if (p === null) {
p = this._ctx;
}
var stack = [];
while (p !== null) {
var ruleIndex = p.ruleIndex;
if (ruleIndex < 0) {
stack.push("n/a");
} else {
stack.push(this.ruleNames[ruleIndex]);
}
p = p.parentCtx;
}
return stack;
};
Parser.prototype.getDFAStrings = function() {
return this._interp.decisionToDFA.toString();
};
Parser.prototype.dumpDFA = function() {
var seenOne = false;
for (var i = 0; i < this._interp.decisionToDFA.length; i++) {
var dfa = this._interp.decisionToDFA[i];
if (dfa.states.length > 0) {
if (seenOne) {
console.log();
}
this.printer.println("Decision " + dfa.decision + ":");
this.printer.print(dfa.toString(this.literalNames, this.symbolicNames));
seenOne = true;
}
}
};
Parser.prototype.getSourceName = function() {
return this._input.sourceName;
};
//
Parser.prototype.setTrace = function(trace) {
if (!trace) {
this.removeParseListener(this._tracer);
this._tracer = null;
} else {
if (this._tracer !== null) {
this.removeParseListener(this._tracer);
}
this._tracer = new TraceListener(this);
this.addParseListener(this._tracer);
}
};
exports.Parser = Parser;
},{"./Lexer":14,"./Recognizer":18,"./Token":20,"./atn/ATNDeserializationOptions":25,"./atn/ATNDeserializer":26,"./error/ErrorStrategy":44,"./tree/Tree":50}],16:[function(require,module,exports){
//
//
//
//
var RuleContext = require('./RuleContext').RuleContext;
var Tree = require('./tree/Tree');
var INVALID_INTERVAL = Tree.INVALID_INTERVAL;
var TerminalNode = Tree.TerminalNode;
var TerminalNodeImpl = Tree.TerminalNodeImpl;
var ErrorNodeImpl = Tree.ErrorNodeImpl;
var Interval = require("./IntervalSet").Interval;
function ParserRuleContext(parent, invokingStateNumber) {
parent = parent || null;
invokingStateNumber = invokingStateNumber || null;
RuleContext.call(this, parent, invokingStateNumber);
this.ruleIndex = -1;
this.children = null;
this.start = null;
this.stop = null;
this.exception = null;
}
ParserRuleContext.prototype = Object.create(RuleContext.prototype);
ParserRuleContext.prototype.constructor = ParserRuleContext;
ParserRuleContext.prototype.copyFrom = function(ctx) {
this.parentCtx = ctx.parentCtx;
this.invokingState = ctx.invokingState;
this.children = null;
this.start = ctx.start;
this.stop = ctx.stop;
if(ctx.children) {
this.children = [];
ctx.children.map(function(child) {
if (child instanceof ErrorNodeImpl) {
this.children.push(child);
child.parentCtx = this;
}
}, this);
}
};
ParserRuleContext.prototype.enterRule = function(listener) {
};
ParserRuleContext.prototype.exitRule = function(listener) {
};
ParserRuleContext.prototype.addChild = function(child) {
if (this.children === null) {
this.children = [];
}
this.children.push(child);
return child;
};
ParserRuleContext.prototype.removeLastChild = function() {
if (this.children !== null) {
this.children.pop();
}
};
ParserRuleContext.prototype.addTokenNode = function(token) {
var node = new TerminalNodeImpl(token);
this.addChild(node);
node.parentCtx = this;
return node;
};
ParserRuleContext.prototype.addErrorNode = function(badToken) {
var node = new ErrorNodeImpl(badToken);
this.addChild(node);
node.parentCtx = this;
return node;
};
ParserRuleContext.prototype.getChild = function(i, type) {
type = type || null;
if (this.children === null || i < 0 || i >= this.children.length) {
return null;
}
if (type === null) {
return this.children[i];
} else {
for(var j=0; j= this.children.length) {
return null;
}
for(var j=0; j 0) {
s = s + ", ";
}
if (this.returnStates[i] === PredictionContext.EMPTY_RETURN_STATE) {
s = s + "$";
continue;
}
s = s + this.returnStates[i];
if (this.parents[i] !== null) {
s = s + " " + this.parents[i];
} else {
s = s + "null";
}
}
return s + "]";
}
};
function predictionContextFromRuleContext(atn, outerContext) {
if (outerContext === undefined || outerContext === null) {
outerContext = RuleContext.EMPTY;
}
if (outerContext.parentCtx === null || outerContext === RuleContext.EMPTY) {
return PredictionContext.EMPTY;
}
var parent = predictionContextFromRuleContext(atn, outerContext.parentCtx);
var state = atn.states[outerContext.invokingState];
var transition = state.transitions[0];
return SingletonPredictionContext.create(parent, transition.followState.stateNumber);
}
function merge(a, b, rootIsWildcard, mergeCache) {
if (a === b) {
return a;
}
if (a instanceof SingletonPredictionContext && b instanceof SingletonPredictionContext) {
return mergeSingletons(a, b, rootIsWildcard, mergeCache);
}
if (rootIsWildcard) {
if (a instanceof EmptyPredictionContext) {
return a;
}
if (b instanceof EmptyPredictionContext) {
return b;
}
}
if (a instanceof SingletonPredictionContext) {
a = new ArrayPredictionContext([a.getParent()], [a.returnState]);
}
if (b instanceof SingletonPredictionContext) {
b = new ArrayPredictionContext([b.getParent()], [b.returnState]);
}
return mergeArrays(a, b, rootIsWildcard, mergeCache);
}
//
//
//
//
//
//
function mergeSingletons(a, b, rootIsWildcard, mergeCache) {
if (mergeCache !== null) {
var previous = mergeCache.get(a, b);
if (previous !== null) {
return previous;
}
previous = mergeCache.get(b, a);
if (previous !== null) {
return previous;
}
}
var rootMerge = mergeRoot(a, b, rootIsWildcard);
if (rootMerge !== null) {
if (mergeCache !== null) {
mergeCache.set(a, b, rootMerge);
}
return rootMerge;
}
if (a.returnState === b.returnState) {
var parent = merge(a.parentCtx, b.parentCtx, rootIsWildcard, mergeCache);
if (parent === a.parentCtx) {
return a; // ax + bx = ax, if a=b
}
if (parent === b.parentCtx) {
return b; // ax + bx = bx, if a=b
}
var spc = SingletonPredictionContext.create(parent, a.returnState);
if (mergeCache !== null) {
mergeCache.set(a, b, spc);
}
return spc;
} else { // a != b payloads differ
var singleParent = null;
if (a === b || (a.parentCtx !== null && a.parentCtx === b.parentCtx)) { // ax +
singleParent = a.parentCtx;
}
if (singleParent !== null) { // parents are same
var payloads = [ a.returnState, b.returnState ];
if (a.returnState > b.returnState) {
payloads[0] = b.returnState;
payloads[1] = a.returnState;
}
var parents = [ singleParent, singleParent ];
var apc = new ArrayPredictionContext(parents, payloads);
if (mergeCache !== null) {
mergeCache.set(a, b, apc);
}
return apc;
}
var payloads = [ a.returnState, b.returnState ];
var parents = [ a.parentCtx, b.parentCtx ];
if (a.returnState > b.returnState) { // sort by payload
payloads[0] = b.returnState;
payloads[1] = a.returnState;
parents = [ b.parentCtx, a.parentCtx ];
}
var a_ = new ArrayPredictionContext(parents, payloads);
if (mergeCache !== null) {
mergeCache.set(a, b, a_);
}
return a_;
}
}
//
//
//
//
//
//
//
//
//
//
//
//
function mergeRoot(a, b, rootIsWildcard) {
if (rootIsWildcard) {
if (a === PredictionContext.EMPTY) {
return PredictionContext.EMPTY; // // + b =//
}
if (b === PredictionContext.EMPTY) {
return PredictionContext.EMPTY; // a +// =//
}
} else {
if (a === PredictionContext.EMPTY && b === PredictionContext.EMPTY) {
return PredictionContext.EMPTY; // $ + $ = $
} else if (a === PredictionContext.EMPTY) { // $ + x = [$,x]
var payloads = [ b.returnState,
PredictionContext.EMPTY_RETURN_STATE ];
var parents = [ b.parentCtx, null ];
return new ArrayPredictionContext(parents, payloads);
} else if (b === PredictionContext.EMPTY) { // x + $ = [$,x] ($ is always first if present)
var payloads = [ a.returnState, PredictionContext.EMPTY_RETURN_STATE ];
var parents = [ a.parentCtx, null ];
return new ArrayPredictionContext(parents, payloads);
}
}
return null;
}
//
//
//
//
//
//
function mergeArrays(a, b, rootIsWildcard, mergeCache) {
if (mergeCache !== null) {
var previous = mergeCache.get(a, b);
if (previous !== null) {
return previous;
}
previous = mergeCache.get(b, a);
if (previous !== null) {
return previous;
}
}
var i = 0; // walks a
var j = 0; // walks b
var k = 0; // walks target M array
var mergedReturnStates = [];
var mergedParents = [];
while (i < a.returnStates.length && j < b.returnStates.length) {
var a_parent = a.parents[i];
var b_parent = b.parents[j];
if (a.returnStates[i] === b.returnStates[j]) {
var payload = a.returnStates[i];
var bothDollars = payload === PredictionContext.EMPTY_RETURN_STATE &&
a_parent === null && b_parent === null;
var ax_ax = (a_parent !== null && b_parent !== null && a_parent === b_parent); // ax+ax
if (bothDollars || ax_ax) {
mergedParents[k] = a_parent; // choose left
mergedReturnStates[k] = payload;
} else { // ax+ay -> a'[x,y]
var mergedParent = merge(a_parent, b_parent, rootIsWildcard, mergeCache);
mergedParents[k] = mergedParent;
mergedReturnStates[k] = payload;
}
i += 1; // hop over left one as usual
j += 1; // but also skip one in right side since we merge
} else if (a.returnStates[i] < b.returnStates[j]) { // copy a[i] to M
mergedParents[k] = a_parent;
mergedReturnStates[k] = a.returnStates[i];
i += 1;
} else { // b > a, copy b[j] to M
mergedParents[k] = b_parent;
mergedReturnStates[k] = b.returnStates[j];
j += 1;
}
k += 1;
}
if (i < a.returnStates.length) {
for (var p = i; p < a.returnStates.length; p++) {
mergedParents[k] = a.parents[p];
mergedReturnStates[k] = a.returnStates[p];
k += 1;
}
} else {
for (var p = j; p < b.returnStates.length; p++) {
mergedParents[k] = b.parents[p];
mergedReturnStates[k] = b.returnStates[p];
k += 1;
}
}
if (k < mergedParents.length) { // write index < last position; trim
if (k === 1) { // for just one merged element, return singleton top
var a_ = SingletonPredictionContext.create(mergedParents[0],
mergedReturnStates[0]);
if (mergeCache !== null) {
mergeCache.set(a, b, a_);
}
return a_;
}
mergedParents = mergedParents.slice(0, k);
mergedReturnStates = mergedReturnStates.slice(0, k);
}
var M = new ArrayPredictionContext(mergedParents, mergedReturnStates);
if (M === a) {
if (mergeCache !== null) {
mergeCache.set(a, b, a);
}
return a;
}
if (M === b) {
if (mergeCache !== null) {
mergeCache.set(a, b, b);
}
return b;
}
combineCommonParents(mergedParents);
if (mergeCache !== null) {
mergeCache.set(a, b, M);
}
return M;
}
//
function combineCommonParents(parents) {
var uniqueParents = {};
for (var p = 0; p < parents.length; p++) {
var parent = parents[p];
if (!(parent in uniqueParents)) {
uniqueParents[parent] = parent;
}
}
for (var q = 0; q < parents.length; q++) {
parents[q] = uniqueParents[parents[q]];
}
}
function getCachedPredictionContext(context, contextCache, visited) {
if (context.isEmpty()) {
return context;
}
var existing = visited[context] || null;
if (existing !== null) {
return existing;
}
existing = contextCache.get(context);
if (existing !== null) {
visited[context] = existing;
return existing;
}
var changed = false;
var parents = [];
for (var i = 0; i < parents.length; i++) {
var parent = getCachedPredictionContext(context.getParent(i), contextCache, visited);
if (changed || parent !== context.getParent(i)) {
if (!changed) {
parents = [];
for (var j = 0; j < context.length; j++) {
parents[j] = context.getParent(j);
}
changed = true;
}
parents[i] = parent;
}
}
if (!changed) {
contextCache.add(context);
visited[context] = context;
return context;
}
var updated = null;
if (parents.length === 0) {
updated = PredictionContext.EMPTY;
} else if (parents.length === 1) {
updated = SingletonPredictionContext.create(parents[0], context
.getReturnState(0));
} else {
updated = new ArrayPredictionContext(parents, context.returnStates);
}
contextCache.add(updated);
visited[updated] = updated;
visited[context] = updated;
return updated;
}
function getAllContextNodes(context, nodes, visited) {
if (nodes === null) {
nodes = [];
return getAllContextNodes(context, nodes, visited);
} else if (visited === null) {
visited = {};
return getAllContextNodes(context, nodes, visited);
} else {
if (context === null || visited[context] !== null) {
return nodes;
}
visited[context] = context;
nodes.push(context);
for (var i = 0; i < context.length; i++) {
getAllContextNodes(context.getParent(i), nodes, visited);
}
return nodes;
}
}
exports.merge = merge;
exports.PredictionContext = PredictionContext;
exports.PredictionContextCache = PredictionContextCache;
exports.SingletonPredictionContext = SingletonPredictionContext;
exports.predictionContextFromRuleContext = predictionContextFromRuleContext;
exports.getCachedPredictionContext = getCachedPredictionContext;
},{"./RuleContext":19,"./Utils":21}],18:[function(require,module,exports){
//
//
var Token = require('./Token').Token;
var ConsoleErrorListener = require('./error/ErrorListener').ConsoleErrorListener;
var ProxyErrorListener = require('./error/ErrorListener').ProxyErrorListener;
function Recognizer() {
this._listeners = [ ConsoleErrorListener.INSTANCE ];
this._interp = null;
this._stateNumber = -1;
return this;
}
Recognizer.tokenTypeMapCache = {};
Recognizer.ruleIndexMapCache = {};
Recognizer.prototype.checkVersion = function(toolVersion) {
var runtimeVersion = "4.7.1";
if (runtimeVersion!==toolVersion) {
console.log("ANTLR runtime and generated code versions disagree: "+runtimeVersion+"!="+toolVersion);
}
};
Recognizer.prototype.addErrorListener = function(listener) {
this._listeners.push(listener);
};
Recognizer.prototype.removeErrorListeners = function() {
this._listeners = [];
};
Recognizer.prototype.getTokenTypeMap = function() {
var tokenNames = this.getTokenNames();
if (tokenNames===null) {
throw("The current recognizer does not provide a list of token names.");
}
var result = this.tokenTypeMapCache[tokenNames];
if(result===undefined) {
result = tokenNames.reduce(function(o, k, i) { o[k] = i; });
result.EOF = Token.EOF;
this.tokenTypeMapCache[tokenNames] = result;
}
return result;
};
//
//
Recognizer.prototype.getRuleIndexMap = function() {
var ruleNames = this.ruleNames;
if (ruleNames===null) {
throw("The current recognizer does not provide a list of rule names.");
}
var result = this.ruleIndexMapCache[ruleNames];
if(result===undefined) {
result = ruleNames.reduce(function(o, k, i) { o[k] = i; });
this.ruleIndexMapCache[ruleNames] = result;
}
return result;
};
Recognizer.prototype.getTokenType = function(tokenName) {
var ttype = this.getTokenTypeMap()[tokenName];
if (ttype !==undefined) {
return ttype;
} else {
return Token.INVALID_TYPE;
}
};
Recognizer.prototype.getErrorHeader = function(e) {
var line = e.getOffendingToken().line;
var column = e.getOffendingToken().column;
return "line " + line + ":" + column;
};
//
//
Recognizer.prototype.getTokenErrorDisplay = function(t) {
if (t===null) {
return "";
}
var s = t.text;
if (s===null) {
if (t.type===Token.EOF) {
s = "";
} else {
s = "<" + t.type + ">";
}
}
s = s.replace("\n","\\n").replace("\r","\\r").replace("\t","\\t");
return "'" + s + "'";
};
Recognizer.prototype.getErrorListenerDispatch = function() {
return new ProxyErrorListener(this._listeners);
};
Recognizer.prototype.sempred = function(localctx, ruleIndex, actionIndex) {
return true;
};
Recognizer.prototype.precpred = function(localctx , precedence) {
return true;
};
Object.defineProperty(Recognizer.prototype, "state", {
get : function() {
return this._stateNumber;
},
set : function(state) {
this._stateNumber = state;
}
});
exports.Recognizer = Recognizer;
},{"./Token":20,"./error/ErrorListener":43}],19:[function(require,module,exports){
//
//
//
var RuleNode = require('./tree/Tree').RuleNode;
var INVALID_INTERVAL = require('./tree/Tree').INVALID_INTERVAL;
var INVALID_ALT_NUMBER = require('./atn/ATN').INVALID_ALT_NUMBER;
function RuleContext(parent, invokingState) {
RuleNode.call(this);
this.parentCtx = parent || null;
this.invokingState = invokingState || -1;
return this;
}
RuleContext.prototype = Object.create(RuleNode.prototype);
RuleContext.prototype.constructor = RuleContext;
RuleContext.prototype.depth = function() {
var n = 0;
var p = this;
while (p !== null) {
p = p.parentCtx;
n += 1;
}
return n;
};
RuleContext.prototype.isEmpty = function() {
return this.invokingState === -1;
};
RuleContext.prototype.getSourceInterval = function() {
return INVALID_INTERVAL;
};
RuleContext.prototype.getRuleContext = function() {
return this;
};
RuleContext.prototype.getPayload = function() {
return this;
};
RuleContext.prototype.getText = function() {
if (this.getChildCount() === 0) {
return "";
} else {
return this.children.map(function(child) {
return child.getText();
}).join("");
}
};
RuleContext.prototype.getAltNumber = function() { return INVALID_ALT_NUMBER; }
RuleContext.prototype.setAltNumber = function(altNumber) { }
RuleContext.prototype.getChild = function(i) {
return null;
};
RuleContext.prototype.getChildCount = function() {
return 0;
};
RuleContext.prototype.accept = function(visitor) {
return visitor.visitChildren(this);
};
exports.RuleContext = RuleContext;
var Trees = require('./tree/Trees').Trees;
//
RuleContext.prototype.toStringTree = function(ruleNames, recog) {
return Trees.toStringTree(this, ruleNames, recog);
};
RuleContext.prototype.toString = function(ruleNames, stop) {
ruleNames = ruleNames || null;
stop = stop || null;
var p = this;
var s = "[";
while (p !== null && p !== stop) {
if (ruleNames === null) {
if (!p.isEmpty()) {
s += p.invokingState;
}
} else {
var ri = p.ruleIndex;
var ruleName = (ri >= 0 && ri < ruleNames.length) ? ruleNames[ri]
: "" + ri;
s += ruleName;
}
if (p.parentCtx !== null && (ruleNames !== null || !p.parentCtx.isEmpty())) {
s += " ";
}
p = p.parentCtx;
}
s += "]";
return s;
};
},{"./atn/ATN":22,"./tree/Tree":50,"./tree/Trees":51}],20:[function(require,module,exports){
//
function Token() {
this.source = null;
this.type = null; // token type of the token
this.channel = null; // The parser ignores everything not on DEFAULT_CHANNEL
this.start = null; // optional; return -1 if not implemented.
this.stop = null; // optional; return -1 if not implemented.
this.tokenIndex = null; // from 0..n-1 of the token object in the input stream
this.line = null; // line=1..n of the 1st character
this.column = null; // beginning of the line at which it occurs, 0..n-1
this._text = null; // text of the token.
return this;
}
Token.INVALID_TYPE = 0;
Token.EPSILON = -2;
Token.MIN_USER_TOKEN_TYPE = 1;
Token.EOF = -1;
Token.DEFAULT_CHANNEL = 0;
Token.HIDDEN_CHANNEL = 1;
//
Object.defineProperty(Token.prototype, "text", {
get : function() {
return this._text;
},
set : function(text) {
this._text = text;
}
});
Token.prototype.getTokenSource = function() {
return this.source[0];
};
Token.prototype.getInputStream = function() {
return this.source[1];
};
function CommonToken(source, type, channel, start, stop) {
Token.call(this);
this.source = source !== undefined ? source : CommonToken.EMPTY_SOURCE;
this.type = type !== undefined ? type : null;
this.channel = channel !== undefined ? channel : Token.DEFAULT_CHANNEL;
this.start = start !== undefined ? start : -1;
this.stop = stop !== undefined ? stop : -1;
this.tokenIndex = -1;
if (this.source[0] !== null) {
this.line = source[0].line;
this.column = source[0].column;
} else {
this.column = -1;
}
return this;
}
CommonToken.prototype = Object.create(Token.prototype);
CommonToken.prototype.constructor = CommonToken;
CommonToken.EMPTY_SOURCE = [ null, null ];
//
//
//
CommonToken.prototype.clone = function() {
var t = new CommonToken(this.source, this.type, this.channel, this.start,
this.stop);
t.tokenIndex = this.tokenIndex;
t.line = this.line;
t.column = this.column;
t.text = this.text;
return t;
};
Object.defineProperty(CommonToken.prototype, "text", {
get : function() {
if (this._text !== null) {
return this._text;
}
var input = this.getInputStream();
if (input === null) {
return null;
}
var n = input.size;
if (this.start < n && this.stop < n) {
return input.getText(this.start, this.stop);
} else {
return "";
}
},
set : function(text) {
this._text = text;
}
});
CommonToken.prototype.toString = function() {
var txt = this.text;
if (txt !== null) {
txt = txt.replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/\t/g, "\\t");
} else {
txt = "";
}
return "[@" + this.tokenIndex + "," + this.start + ":" + this.stop + "='" +
txt + "',<" + this.type + ">" +
(this.channel > 0 ? ",channel=" + this.channel : "") + "," +
this.line + ":" + this.column + "]";
};
exports.Token = Token;
exports.CommonToken = CommonToken;
},{}],21:[function(require,module,exports){
function arrayToString(a) {
return "[" + a.join(", ") + "]";
}
String.prototype.seed = String.prototype.seed || Math.round(Math.random() * Math.pow(2, 32));
String.prototype.hashCode = function () {
var remainder, bytes, h1, h1b, c1, c1b, c2, c2b, k1, i,
key = this.toString();
remainder = key.length & 3; // key.length % 4
bytes = key.length - remainder;
h1 = String.prototype.seed;
c1 = 0xcc9e2d51;
c2 = 0x1b873593;
i = 0;
while (i < bytes) {
k1 =
((key.charCodeAt(i) & 0xff)) |
((key.charCodeAt(++i) & 0xff) << 8) |
((key.charCodeAt(++i) & 0xff) << 16) |
((key.charCodeAt(++i) & 0xff) << 24);
++i;
k1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff;
k1 = (k1 << 15) | (k1 >>> 17);
k1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff;
h1 ^= k1;
h1 = (h1 << 13) | (h1 >>> 19);
h1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;
h1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16));
}
k1 = 0;
switch (remainder) {
case 3:
k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;
case 2:
k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;
case 1:
k1 ^= (key.charCodeAt(i) & 0xff);
k1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;
k1 = (k1 << 15) | (k1 >>> 17);
k1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;
h1 ^= k1;
}
h1 ^= key.length;
h1 ^= h1 >>> 16;
h1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;
h1 ^= h1 >>> 13;
h1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;
h1 ^= h1 >>> 16;
return h1 >>> 0;
};
function standardEqualsFunction(a, b) {
return a.equals(b);
}
function standardHashCodeFunction(a) {
return a.hashCode();
}
function Set(hashFunction, equalsFunction) {
this.data = {};
this.hashFunction = hashFunction || standardHashCodeFunction;
this.equalsFunction = equalsFunction || standardEqualsFunction;
return this;
}
Object.defineProperty(Set.prototype, "length", {
get: function () {
var l = 0;
for (var key in this.data) {
if (key.indexOf("hash_") === 0) {
l = l + this.data[key].length;
}
}
return l;
}
});
Set.prototype.add = function (value) {
var hash = this.hashFunction(value);
var key = "hash_" + hash;
if (key in this.data) {
var values = this.data[key];
for (var i = 0; i < values.length; i++) {
if (this.equalsFunction(value, values[i])) {
return values[i];
}
}
values.push(value);
return value;
} else {
this.data[key] = [value];
return value;
}
};
Set.prototype.contains = function (value) {
return this.get(value) != null;
};
Set.prototype.get = function (value) {
var hash = this.hashFunction(value);
var key = "hash_" + hash;
if (key in this.data) {
var values = this.data[key];
for (var i = 0; i < values.length; i++) {
if (this.equalsFunction(value, values[i])) {
return values[i];
}
}
}
return null;
};
Set.prototype.values = function () {
var l = [];
for (var key in this.data) {
if (key.indexOf("hash_") === 0) {
l = l.concat(this.data[key]);
}
}
return l;
};
Set.prototype.toString = function () {
return arrayToString(this.values());
};
function BitSet() {
this.data = [];
return this;
}
BitSet.prototype.add = function (value) {
this.data[value] = true;
};
BitSet.prototype.or = function (set) {
var bits = this;
Object.keys(set.data).map(function (alt) {
bits.add(alt);
});
};
BitSet.prototype.remove = function (value) {
delete this.data[value];
};
BitSet.prototype.contains = function (value) {
return this.data[value] === true;
};
BitSet.prototype.values = function () {
return Object.keys(this.data);
};
BitSet.prototype.minValue = function () {
return Math.min.apply(null, this.values());
};
BitSet.prototype.hashCode = function () {
var hash = new Hash();
hash.update(this.values());
return hash.finish();
};
BitSet.prototype.equals = function (other) {
if (!(other instanceof BitSet)) {
return false;
}
return this.hashCode() === other.hashCode();
};
Object.defineProperty(BitSet.prototype, "length", {
get: function () {
return this.values().length;
}
});
BitSet.prototype.toString = function () {
return "{" + this.values().join(", ") + "}";
};
function Map(hashFunction, equalsFunction) {
this.data = {};
this.hashFunction = hashFunction || standardHashCodeFunction;
this.equalsFunction = equalsFunction || standardEqualsFunction;
return this;
}
Object.defineProperty(Map.prototype, "length", {
get: function () {
var l = 0;
for (var hashKey in this.data) {
if (hashKey.indexOf("hash_") === 0) {
l = l + this.data[hashKey].length;
}
}
return l;
}
});
Map.prototype.put = function (key, value) {
var hashKey = "hash_" + this.hashFunction(key);
if (hashKey in this.data) {
var entries = this.data[hashKey];
for (var i = 0; i < entries.length; i++) {
var entry = entries[i];
if (this.equalsFunction(key, entry.key)) {
var oldValue = entry.value;
entry.value = value;
return oldValue;
}
}
entries.push({key:key, value:value});
return value;
} else {
this.data[hashKey] = [{key:key, value:value}];
return value;
}
};
Map.prototype.containsKey = function (key) {
var hashKey = "hash_" + this.hashFunction(key);
if(hashKey in this.data) {
var entries = this.data[hashKey];
for (var i = 0; i < entries.length; i++) {
var entry = entries[i];
if (this.equalsFunction(key, entry.key))
return true;
}
}
return false;
};
Map.prototype.get = function (key) {
var hashKey = "hash_" + this.hashFunction(key);
if(hashKey in this.data) {
var entries = this.data[hashKey];
for (var i = 0; i < entries.length; i++) {
var entry = entries[i];
if (this.equalsFunction(key, entry.key))
return entry.value;
}
}
return null;
};
Map.prototype.entries = function () {
var l = [];
for (var key in this.data) {
if (key.indexOf("hash_") === 0) {
l = l.concat(this.data[key]);
}
}
return l;
};
Map.prototype.getKeys = function () {
return this.entries().map(function(e) {
return e.key;
});
};
Map.prototype.getValues = function () {
return this.entries().map(function(e) {
return e.value;
});
};
Map.prototype.toString = function () {
var ss = this.entries().map(function(entry) {
return '{' + entry.key + ':' + entry.value + '}';
});
return '[' + ss.join(", ") + ']';
};
function AltDict() {
this.data = {};
return this;
}
AltDict.prototype.get = function (key) {
key = "k-" + key;
if (key in this.data) {
return this.data[key];
} else {
return null;
}
};
AltDict.prototype.put = function (key, value) {
key = "k-" + key;
this.data[key] = value;
};
AltDict.prototype.values = function () {
var data = this.data;
var keys = Object.keys(this.data);
return keys.map(function (key) {
return data[key];
});
};
function DoubleDict() {
return this;
}
function Hash() {
this.count = 0;
this.hash = 0;
return this;
}
Hash.prototype.update = function () {
for(var i=0;i>> (32 - 15));
k = k * 0x1B873593;
this.count = this.count + 1;
var hash = this.hash ^ k;
hash = (hash << 13) | (hash >>> (32 - 13));
hash = hash * 5 + 0xE6546B64;
this.hash = hash;
}
}
}
Hash.prototype.finish = function () {
var hash = this.hash ^ (this.count * 4);
hash = hash ^ (hash >>> 16);
hash = hash * 0x85EBCA6B;
hash = hash ^ (hash >>> 13);
hash = hash * 0xC2B2AE35;
hash = hash ^ (hash >>> 16);
return hash;
}
function hashStuff() {
var hash = new Hash();
hash.update.apply(arguments);
return hash.finish();
}
DoubleDict.prototype.get = function (a, b) {
var d = this[a] || null;
return d === null ? null : (d[b] || null);
};
DoubleDict.prototype.set = function (a, b, o) {
var d = this[a] || null;
if (d === null) {
d = {};
this[a] = d;
}
d[b] = o;
};
function escapeWhitespace(s, escapeSpaces) {
s = s.replace(/\t/g, "\\t")
.replace(/\n/g, "\\n")
.replace(/\r/g, "\\r");
if (escapeSpaces) {
s = s.replace(/ /g, "\u00B7");
}
return s;
}
function titleCase(str) {
return str.replace(/\w\S*/g, function (txt) {
return txt.charAt(0).toUpperCase() + txt.substr(1);
});
};
function equalArrays(a, b)
{
if (!Array.isArray(a) || !Array.isArray(b))
return false;
if (a == b)
return true;
if (a.length != b.length)
return false;
for (var i = 0; i < a.length; i++) {
if (a[i] == b[i])
continue;
if (!a[i].equals(b[i]))
return false;
}
return true;
};
exports.Hash = Hash;
exports.Set = Set;
exports.Map = Map;
exports.BitSet = BitSet;
exports.AltDict = AltDict;
exports.DoubleDict = DoubleDict;
exports.hashStuff = hashStuff;
exports.escapeWhitespace = escapeWhitespace;
exports.arrayToString = arrayToString;
exports.titleCase = titleCase;
exports.equalArrays = equalArrays;
},{}],22:[function(require,module,exports){
var LL1Analyzer = require('./../LL1Analyzer').LL1Analyzer;
var IntervalSet = require('./../IntervalSet').IntervalSet;
function ATN(grammarType , maxTokenType) {
this.grammarType = grammarType;
this.maxTokenType = maxTokenType;
this.states = [];
this.decisionToState = [];
this.ruleToStartState = [];
this.ruleToStopState = null;
this.modeNameToStartState = {};
this.ruleToTokenType = null;
this.lexerActions = null;
this.modeToStartState = [];
return this;
}
ATN.prototype.nextTokensInContext = function(s, ctx) {
var anal = new LL1Analyzer(this);
return anal.LOOK(s, null, ctx);
};
ATN.prototype.nextTokensNoContext = function(s) {
if (s.nextTokenWithinRule !== null ) {
return s.nextTokenWithinRule;
}
s.nextTokenWithinRule = this.nextTokensInContext(s, null);
s.nextTokenWithinRule.readOnly = true;
return s.nextTokenWithinRule;
};
ATN.prototype.nextTokens = function(s, ctx) {
if ( ctx===undefined ) {
return this.nextTokensNoContext(s);
} else {
return this.nextTokensInContext(s, ctx);
}
};
ATN.prototype.addState = function( state) {
if ( state !== null ) {
state.atn = this;
state.stateNumber = this.states.length;
}
this.states.push(state);
};
ATN.prototype.removeState = function( state) {
this.states[state.stateNumber] = null; // just free mem, don't shift states in list
};
ATN.prototype.defineDecisionState = function( s) {
this.decisionToState.push(s);
s.decision = this.decisionToState.length-1;
return s.decision;
};
ATN.prototype.getDecisionState = function( decision) {
if (this.decisionToState.length===0) {
return null;
} else {
return this.decisionToState[decision];
}
};
//
//
var Token = require('./../Token').Token;
ATN.prototype.getExpectedTokens = function( stateNumber, ctx ) {
if ( stateNumber < 0 || stateNumber >= this.states.length ) {
throw("Invalid state number.");
}
var s = this.states[stateNumber];
var following = this.nextTokens(s);
if (!following.contains(Token.EPSILON)) {
return following;
}
var expected = new IntervalSet();
expected.addSet(following);
expected.removeOne(Token.EPSILON);
while (ctx !== null && ctx.invokingState >= 0 && following.contains(Token.EPSILON)) {
var invokingState = this.states[ctx.invokingState];
var rt = invokingState.transitions[0];
following = this.nextTokens(rt.followState);
expected.addSet(following);
expected.removeOne(Token.EPSILON);
ctx = ctx.parentCtx;
}
if (following.contains(Token.EPSILON)) {
expected.addOne(Token.EOF);
}
return expected;
};
ATN.INVALID_ALT_NUMBER = 0;
exports.ATN = ATN;
},{"./../IntervalSet":12,"./../LL1Analyzer":13,"./../Token":20}],23:[function(require,module,exports){
//
var DecisionState = require('./ATNState').DecisionState;
var SemanticContext = require('./SemanticContext').SemanticContext;
var Hash = require("../Utils").Hash;
function checkParams(params, isCfg) {
if(params===null) {
var result = { state:null, alt:null, context:null, semanticContext:null };
if(isCfg) {
result.reachesIntoOuterContext = 0;
}
return result;
} else {
var props = {};
props.state = params.state || null;
props.alt = (params.alt === undefined) ? null : params.alt;
props.context = params.context || null;
props.semanticContext = params.semanticContext || null;
if(isCfg) {
props.reachesIntoOuterContext = params.reachesIntoOuterContext || 0;
props.precedenceFilterSuppressed = params.precedenceFilterSuppressed || false;
}
return props;
}
}
function ATNConfig(params, config) {
this.checkContext(params, config);
params = checkParams(params);
config = checkParams(config, true);
this.state = params.state!==null ? params.state : config.state;
this.alt = params.alt!==null ? params.alt : config.alt;
this.context = params.context!==null ? params.context : config.context;
this.semanticContext = params.semanticContext!==null ? params.semanticContext :
(config.semanticContext!==null ? config.semanticContext : SemanticContext.NONE);
//
this.reachesIntoOuterContext = config.reachesIntoOuterContext;
this.precedenceFilterSuppressed = config.precedenceFilterSuppressed;
return this;
}
ATNConfig.prototype.checkContext = function(params, config) {
if((params.context===null || params.context===undefined) &&
(config===null || config.context===null || config.context===undefined)) {
this.context = null;
}
};
ATNConfig.prototype.hashCode = function() {
var hash = new Hash();
this.updateHashCode(hash);
return hash.finish();
};
ATNConfig.prototype.updateHashCode = function(hash) {
hash.update(this.state.stateNumber, this.alt, this.context, this.semanticContext);
};
ATNConfig.prototype.equals = function(other) {
if (this === other) {
return true;
} else if (! (other instanceof ATNConfig)) {
return false;
} else {
return this.state.stateNumber===other.state.stateNumber &&
this.alt===other.alt &&
(this.context===null ? other.context===null : this.context.equals(other.context)) &&
this.semanticContext.equals(other.semanticContext) &&
this.precedenceFilterSuppressed===other.precedenceFilterSuppressed;
}
};
ATNConfig.prototype.hashCodeForConfigSet = function() {
var hash = new Hash();
hash.update(this.state.stateNumber, this.alt, this.semanticContext);
return hash.finish();
};
ATNConfig.prototype.equalsForConfigSet = function(other) {
if (this === other) {
return true;
} else if (! (other instanceof ATNConfig)) {
return false;
} else {
return this.state.stateNumber===other.state.stateNumber &&
this.alt===other.alt &&
this.semanticContext.equals(other.semanticContext);
}
};
ATNConfig.prototype.toString = function() {
return "(" + this.state + "," + this.alt +
(this.context!==null ? ",[" + this.context.toString() + "]" : "") +
(this.semanticContext !== SemanticContext.NONE ?
("," + this.semanticContext.toString())
: "") +
(this.reachesIntoOuterContext>0 ?
(",up=" + this.reachesIntoOuterContext)
: "") + ")";
};
function LexerATNConfig(params, config) {
ATNConfig.call(this, params, config);
var lexerActionExecutor = params.lexerActionExecutor || null;
this.lexerActionExecutor = lexerActionExecutor || (config!==null ? config.lexerActionExecutor : null);
this.passedThroughNonGreedyDecision = config!==null ? this.checkNonGreedyDecision(config, this.state) : false;
return this;
}
LexerATNConfig.prototype = Object.create(ATNConfig.prototype);
LexerATNConfig.prototype.constructor = LexerATNConfig;
LexerATNConfig.prototype.updateHashCode = function(hash) {
hash.update(this.state.stateNumber, this.alt, this.context, this.semanticContext, this.passedThroughNonGreedyDecision, this.lexerActionExecutor);
};
LexerATNConfig.prototype.equals = function(other) {
return this === other ||
(other instanceof LexerATNConfig &&
this.passedThroughNonGreedyDecision == other.passedThroughNonGreedyDecision &&
(this.lexerActionExecutor ? this.lexerActionExecutor.equals(other.lexerActionExecutor) : !other.lexerActionExecutor) &&
ATNConfig.prototype.equals.call(this, other));
};
LexerATNConfig.prototype.hashCodeForConfigSet = LexerATNConfig.prototype.hashCode;
LexerATNConfig.prototype.equalsForConfigSet = LexerATNConfig.prototype.equals;
LexerATNConfig.prototype.checkNonGreedyDecision = function(source, target) {
return source.passedThroughNonGreedyDecision ||
(target instanceof DecisionState) && target.nonGreedy;
};
exports.ATNConfig = ATNConfig;
exports.LexerATNConfig = LexerATNConfig;
},{"../Utils":21,"./ATNState":28,"./SemanticContext":35}],24:[function(require,module,exports){
//
//
var ATN = require('./ATN').ATN;
var Utils = require('./../Utils');
var Hash = Utils.Hash;
var Set = Utils.Set;
var SemanticContext = require('./SemanticContext').SemanticContext;
var merge = require('./../PredictionContext').merge;
function hashATNConfig(c) {
return c.hashCodeForConfigSet();
}
function equalATNConfigs(a, b) {
if ( a===b ) {
return true;
} else if ( a===null || b===null ) {
return false;
} else
return a.equalsForConfigSet(b);
}
function ATNConfigSet(fullCtx) {
//
this.configLookup = new Set(hashATNConfig, equalATNConfigs);
this.fullCtx = fullCtx === undefined ? true : fullCtx;
this.readOnly = false;
this.configs = [];
this.uniqueAlt = 0;
this.conflictingAlts = null;
this.hasSemanticContext = false;
this.dipsIntoOuterContext = false;
this.cachedHashCode = -1;
return this;
}
//
ATNConfigSet.prototype.add = function(config, mergeCache) {
if (mergeCache === undefined) {
mergeCache = null;
}
if (this.readOnly) {
throw "This set is readonly";
}
if (config.semanticContext !== SemanticContext.NONE) {
this.hasSemanticContext = true;
}
if (config.reachesIntoOuterContext > 0) {
this.dipsIntoOuterContext = true;
}
var existing = this.configLookup.add(config);
if (existing === config) {
this.cachedHashCode = -1;
this.configs.push(config); // track order here
return true;
}
var rootIsWildcard = !this.fullCtx;
var merged = merge(existing.context, config.context, rootIsWildcard, mergeCache);
existing.reachesIntoOuterContext = Math.max( existing.reachesIntoOuterContext, config.reachesIntoOuterContext);
if (config.precedenceFilterSuppressed) {
existing.precedenceFilterSuppressed = true;
}
existing.context = merged; // replace context; no need to alt mapping
return true;
};
ATNConfigSet.prototype.getStates = function() {
var states = new Set();
for (var i = 0; i < this.configs.length; i++) {
states.add(this.configs[i].state);
}
return states;
};
ATNConfigSet.prototype.getPredicates = function() {
var preds = [];
for (var i = 0; i < this.configs.length; i++) {
var c = this.configs[i].semanticContext;
if (c !== SemanticContext.NONE) {
preds.push(c.semanticContext);
}
}
return preds;
};
Object.defineProperty(ATNConfigSet.prototype, "items", {
get : function() {
return this.configs;
}
});
ATNConfigSet.prototype.optimizeConfigs = function(interpreter) {
if (this.readOnly) {
throw "This set is readonly";
}
if (this.configLookup.length === 0) {
return;
}
for (var i = 0; i < this.configs.length; i++) {
var config = this.configs[i];
config.context = interpreter.getCachedContext(config.context);
}
};
ATNConfigSet.prototype.addAll = function(coll) {
for (var i = 0; i < coll.length; i++) {
this.add(coll[i]);
}
return false;
};
ATNConfigSet.prototype.equals = function(other) {
return this === other ||
(other instanceof ATNConfigSet &&
Utils.equalArrays(this.configs, other.configs) &&
this.fullCtx === other.fullCtx &&
this.uniqueAlt === other.uniqueAlt &&
this.conflictingAlts === other.conflictingAlts &&
this.hasSemanticContext === other.hasSemanticContext &&
this.dipsIntoOuterContext === other.dipsIntoOuterContext);
};
ATNConfigSet.prototype.hashCode = function() {
var hash = new Hash();
this.updateHashCode(hash);
return hash.finish();
};
ATNConfigSet.prototype.updateHashCode = function(hash) {
if (this.readOnly) {
if (this.cachedHashCode === -1) {
var hash = new Hash();
hash.update(this.configs);
this.cachedHashCode = hash.finish();
}
hash.update(this.cachedHashCode);
} else {
hash.update(this.configs);
}
};
Object.defineProperty(ATNConfigSet.prototype, "length", {
get : function() {
return this.configs.length;
}
});
ATNConfigSet.prototype.isEmpty = function() {
return this.configs.length === 0;
};
ATNConfigSet.prototype.contains = function(item) {
if (this.configLookup === null) {
throw "This method is not implemented for readonly sets.";
}
return this.configLookup.contains(item);
};
ATNConfigSet.prototype.containsFast = function(item) {
if (this.configLookup === null) {
throw "This method is not implemented for readonly sets.";
}
return this.configLookup.containsFast(item);
};
ATNConfigSet.prototype.clear = function() {
if (this.readOnly) {
throw "This set is readonly";
}
this.configs = [];
this.cachedHashCode = -1;
this.configLookup = new Set();
};
ATNConfigSet.prototype.setReadonly = function(readOnly) {
this.readOnly = readOnly;
if (readOnly) {
this.configLookup = null; // can't mod, no need for lookup cache
}
};
ATNConfigSet.prototype.toString = function() {
return Utils.arrayToString(this.configs) +
(this.hasSemanticContext ? ",hasSemanticContext=" + this.hasSemanticContext : "") +
(this.uniqueAlt !== ATN.INVALID_ALT_NUMBER ? ",uniqueAlt=" + this.uniqueAlt : "") +
(this.conflictingAlts !== null ? ",conflictingAlts=" + this.conflictingAlts : "") +
(this.dipsIntoOuterContext ? ",dipsIntoOuterContext" : "");
};
function OrderedATNConfigSet() {
ATNConfigSet.call(this);
this.configLookup = new Set();
return this;
}
OrderedATNConfigSet.prototype = Object.create(ATNConfigSet.prototype);
OrderedATNConfigSet.prototype.constructor = OrderedATNConfigSet;
exports.ATNConfigSet = ATNConfigSet;
exports.OrderedATNConfigSet = OrderedATNConfigSet;
},{"./../PredictionContext":17,"./../Utils":21,"./ATN":22,"./SemanticContext":35}],25:[function(require,module,exports){
function ATNDeserializationOptions(copyFrom) {
if(copyFrom===undefined) {
copyFrom = null;
}
this.readOnly = false;
this.verifyATN = copyFrom===null ? true : copyFrom.verifyATN;
this.generateRuleBypassTransitions = copyFrom===null ? false : copyFrom.generateRuleBypassTransitions;
return this;
}
ATNDeserializationOptions.defaultOptions = new ATNDeserializationOptions();
ATNDeserializationOptions.defaultOptions.readOnly = true;
exports.ATNDeserializationOptions = ATNDeserializationOptions;
},{}],26:[function(require,module,exports){
var Token = require('./../Token').Token;
var ATN = require('./ATN').ATN;
var ATNType = require('./ATNType').ATNType;
var ATNStates = require('./ATNState');
var ATNState = ATNStates.ATNState;
var BasicState = ATNStates.BasicState;
var DecisionState = ATNStates.DecisionState;
var BlockStartState = ATNStates.BlockStartState;
var BlockEndState = ATNStates.BlockEndState;
var LoopEndState = ATNStates.LoopEndState;
var RuleStartState = ATNStates.RuleStartState;
var RuleStopState = ATNStates.RuleStopState;
var TokensStartState = ATNStates.TokensStartState;
var PlusLoopbackState = ATNStates.PlusLoopbackState;
var StarLoopbackState = ATNStates.StarLoopbackState;
var StarLoopEntryState = ATNStates.StarLoopEntryState;
var PlusBlockStartState = ATNStates.PlusBlockStartState;
var StarBlockStartState = ATNStates.StarBlockStartState;
var BasicBlockStartState = ATNStates.BasicBlockStartState;
var Transitions = require('./Transition');
var Transition = Transitions.Transition;
var AtomTransition = Transitions.AtomTransition;
var SetTransition = Transitions.SetTransition;
var NotSetTransition = Transitions.NotSetTransition;
var RuleTransition = Transitions.RuleTransition;
var RangeTransition = Transitions.RangeTransition;
var ActionTransition = Transitions.ActionTransition;
var EpsilonTransition = Transitions.EpsilonTransition;
var WildcardTransition = Transitions.WildcardTransition;
var PredicateTransition = Transitions.PredicateTransition;
var PrecedencePredicateTransition = Transitions.PrecedencePredicateTransition;
var IntervalSet = require('./../IntervalSet').IntervalSet;
var Interval = require('./../IntervalSet').Interval;
var ATNDeserializationOptions = require('./ATNDeserializationOptions').ATNDeserializationOptions;
var LexerActions = require('./LexerAction');
var LexerActionType = LexerActions.LexerActionType;
var LexerSkipAction = LexerActions.LexerSkipAction;
var LexerChannelAction = LexerActions.LexerChannelAction;
var LexerCustomAction = LexerActions.LexerCustomAction;
var LexerMoreAction = LexerActions.LexerMoreAction;
var LexerTypeAction = LexerActions.LexerTypeAction;
var LexerPushModeAction = LexerActions.LexerPushModeAction;
var LexerPopModeAction = LexerActions.LexerPopModeAction;
var LexerModeAction = LexerActions.LexerModeAction;
var BASE_SERIALIZED_UUID = "AADB8D7E-AEEF-4415-AD2B-8204D6CF042E";
//
//
var ADDED_UNICODE_SMP = "59627784-3BE5-417A-B9EB-8131A7286089";
var SUPPORTED_UUIDS = [ BASE_SERIALIZED_UUID, ADDED_UNICODE_SMP ];
var SERIALIZED_VERSION = 3;
var SERIALIZED_UUID = ADDED_UNICODE_SMP;
function initArray( length, value) {
var tmp = [];
tmp[length-1] = value;
return tmp.map(function(i) {return value;});
}
function ATNDeserializer (options) {
if ( options=== undefined || options === null ) {
options = ATNDeserializationOptions.defaultOptions;
}
this.deserializationOptions = options;
this.stateFactories = null;
this.actionFactories = null;
return this;
}
//
ATNDeserializer.prototype.isFeatureSupported = function(feature, actualUuid) {
var idx1 = SUPPORTED_UUIDS.indexOf(feature);
if (idx1<0) {
return false;
}
var idx2 = SUPPORTED_UUIDS.indexOf(actualUuid);
return idx2 >= idx1;
};
ATNDeserializer.prototype.deserialize = function(data) {
this.reset(data);
this.checkVersion();
this.checkUUID();
var atn = this.readATN();
this.readStates(atn);
this.readRules(atn);
this.readModes(atn);
var sets = [];
this.readSets(atn, sets, this.readInt.bind(this));
if (this.isFeatureSupported(ADDED_UNICODE_SMP, this.uuid)) {
this.readSets(atn, sets, this.readInt32.bind(this));
}
this.readEdges(atn, sets);
this.readDecisions(atn);
this.readLexerActions(atn);
this.markPrecedenceDecisions(atn);
this.verifyATN(atn);
if (this.deserializationOptions.generateRuleBypassTransitions && atn.grammarType === ATNType.PARSER ) {
this.generateRuleBypassTransitions(atn);
this.verifyATN(atn);
}
return atn;
};
ATNDeserializer.prototype.reset = function(data) {
var adjust = function(c) {
var v = c.charCodeAt(0);
return v>1 ? v-2 : v + 65533;
};
var temp = data.split("").map(adjust);
temp[0] = data.charCodeAt(0);
this.data = temp;
this.pos = 0;
};
ATNDeserializer.prototype.checkVersion = function() {
var version = this.readInt();
if ( version !== SERIALIZED_VERSION ) {
throw ("Could not deserialize ATN with version " + version + " (expected " + SERIALIZED_VERSION + ").");
}
};
ATNDeserializer.prototype.checkUUID = function() {
var uuid = this.readUUID();
if (SUPPORTED_UUIDS.indexOf(uuid)<0) {
throw ("Could not deserialize ATN with UUID: " + uuid +
" (expected " + SERIALIZED_UUID + " or a legacy UUID).", uuid, SERIALIZED_UUID);
}
this.uuid = uuid;
};
ATNDeserializer.prototype.readATN = function() {
var grammarType = this.readInt();
var maxTokenType = this.readInt();
return new ATN(grammarType, maxTokenType);
};
ATNDeserializer.prototype.readStates = function(atn) {
var j, pair, stateNumber;
var loopBackStateNumbers = [];
var endStateNumbers = [];
var nstates = this.readInt();
for(var i=0; i 0) {
bypassStart.addTransition(ruleToStartState.transitions[count-1]);
ruleToStartState.transitions = ruleToStartState.transitions.slice(-1);
}
atn.ruleToStartState[idx].addTransition(new EpsilonTransition(bypassStart));
bypassStop.addTransition(new EpsilonTransition(endState));
var matchState = new BasicState();
atn.addState(matchState);
matchState.addTransition(new AtomTransition(bypassStop, atn.ruleToTokenType[idx]));
bypassStart.addTransition(new EpsilonTransition(matchState));
};
ATNDeserializer.prototype.stateIsEndStateFor = function(state, idx) {
if ( state.ruleIndex !== idx) {
return null;
}
if (!( state instanceof StarLoopEntryState)) {
return null;
}
var maybeLoopEndState = state.transitions[state.transitions.length - 1].target;
if (!( maybeLoopEndState instanceof LoopEndState)) {
return null;
}
if (maybeLoopEndState.epsilonOnlyTransitions &&
(maybeLoopEndState.transitions[0].target instanceof RuleStopState)) {
return state;
} else {
return null;
}
};
//
//
//
ATNDeserializer.prototype.markPrecedenceDecisions = function(atn) {
for(var i=0; i= 0);
} else {
this.checkCondition(state.transitions.length <= 1 || (state instanceof RuleStopState));
}
}
};
ATNDeserializer.prototype.checkCondition = function(condition, message) {
if (!condition) {
if (message === undefined || message===null) {
message = "IllegalState";
}
throw (message);
}
};
ATNDeserializer.prototype.readInt = function() {
return this.data[this.pos++];
};
ATNDeserializer.prototype.readInt32 = function() {
var low = this.readInt();
var high = this.readInt();
return low | (high << 16);
};
ATNDeserializer.prototype.readLong = function() {
var low = this.readInt32();
var high = this.readInt32();
return (low & 0x00000000FFFFFFFF) | (high << 32);
};
function createByteToHex() {
var bth = [];
for (var i = 0; i < 256; i++) {
bth[i] = (i + 0x100).toString(16).substr(1).toUpperCase();
}
return bth;
}
var byteToHex = createByteToHex();
ATNDeserializer.prototype.readUUID = function() {
var bb = [];
for(var i=7;i>=0;i--) {
var int = this.readInt();
bb[(2*i)+1] = int & 0xFF;
bb[2*i] = (int >> 8) & 0xFF;
}
return byteToHex[bb[0]] + byteToHex[bb[1]] +
byteToHex[bb[2]] + byteToHex[bb[3]] + '-' +
byteToHex[bb[4]] + byteToHex[bb[5]] + '-' +
byteToHex[bb[6]] + byteToHex[bb[7]] + '-' +
byteToHex[bb[8]] + byteToHex[bb[9]] + '-' +
byteToHex[bb[10]] + byteToHex[bb[11]] +
byteToHex[bb[12]] + byteToHex[bb[13]] +
byteToHex[bb[14]] + byteToHex[bb[15]];
};
ATNDeserializer.prototype.edgeFactory = function(atn, type, src, trg, arg1, arg2, arg3, sets) {
var target = atn.states[trg];
switch(type) {
case Transition.EPSILON:
return new EpsilonTransition(target);
case Transition.RANGE:
return arg3 !== 0 ? new RangeTransition(target, Token.EOF, arg2) : new RangeTransition(target, arg1, arg2);
case Transition.RULE:
return new RuleTransition(atn.states[arg1], arg2, arg3, target);
case Transition.PREDICATE:
return new PredicateTransition(target, arg1, arg2, arg3 !== 0);
case Transition.PRECEDENCE:
return new PrecedencePredicateTransition(target, arg1);
case Transition.ATOM:
return arg3 !== 0 ? new AtomTransition(target, Token.EOF) : new AtomTransition(target, arg1);
case Transition.ACTION:
return new ActionTransition(target, arg1, arg2, arg3 !== 0);
case Transition.SET:
return new SetTransition(target, sets[arg1]);
case Transition.NOT_SET:
return new NotSetTransition(target, sets[arg1]);
case Transition.WILDCARD:
return new WildcardTransition(target);
default:
throw "The specified transition type: " + type + " is not valid.";
}
};
ATNDeserializer.prototype.stateFactory = function(type, ruleIndex) {
if (this.stateFactories === null) {
var sf = [];
sf[ATNState.INVALID_TYPE] = null;
sf[ATNState.BASIC] = function() { return new BasicState(); };
sf[ATNState.RULE_START] = function() { return new RuleStartState(); };
sf[ATNState.BLOCK_START] = function() { return new BasicBlockStartState(); };
sf[ATNState.PLUS_BLOCK_START] = function() { return new PlusBlockStartState(); };
sf[ATNState.STAR_BLOCK_START] = function() { return new StarBlockStartState(); };
sf[ATNState.TOKEN_START] = function() { return new TokensStartState(); };
sf[ATNState.RULE_STOP] = function() { return new RuleStopState(); };
sf[ATNState.BLOCK_END] = function() { return new BlockEndState(); };
sf[ATNState.STAR_LOOP_BACK] = function() { return new StarLoopbackState(); };
sf[ATNState.STAR_LOOP_ENTRY] = function() { return new StarLoopEntryState(); };
sf[ATNState.PLUS_LOOP_BACK] = function() { return new PlusLoopbackState(); };
sf[ATNState.LOOP_END] = function() { return new LoopEndState(); };
this.stateFactories = sf;
}
if (type>this.stateFactories.length || this.stateFactories[type] === null) {
throw("The specified state type " + type + " is not valid.");
} else {
var s = this.stateFactories[type]();
if (s!==null) {
s.ruleIndex = ruleIndex;
return s;
}
}
};
ATNDeserializer.prototype.lexerActionFactory = function(type, data1, data2) {
if (this.actionFactories === null) {
var af = [];
af[LexerActionType.CHANNEL] = function(data1, data2) { return new LexerChannelAction(data1); };
af[LexerActionType.CUSTOM] = function(data1, data2) { return new LexerCustomAction(data1, data2); };
af[LexerActionType.MODE] = function(data1, data2) { return new LexerModeAction(data1); };
af[LexerActionType.MORE] = function(data1, data2) { return LexerMoreAction.INSTANCE; };
af[LexerActionType.POP_MODE] = function(data1, data2) { return LexerPopModeAction.INSTANCE; };
af[LexerActionType.PUSH_MODE] = function(data1, data2) { return new LexerPushModeAction(data1); };
af[LexerActionType.SKIP] = function(data1, data2) { return LexerSkipAction.INSTANCE; };
af[LexerActionType.TYPE] = function(data1, data2) { return new LexerTypeAction(data1); };
this.actionFactories = af;
}
if (type>this.actionFactories.length || this.actionFactories[type] === null) {
throw("The specified lexer action type " + type + " is not valid.");
} else {
return this.actionFactories[type](data1, data2);
}
};
exports.ATNDeserializer = ATNDeserializer;
},{"./../IntervalSet":12,"./../Token":20,"./ATN":22,"./ATNDeserializationOptions":25,"./ATNState":28,"./ATNType":29,"./LexerAction":31,"./Transition":36}],27:[function(require,module,exports){
//
var DFAState = require('./../dfa/DFAState').DFAState;
var ATNConfigSet = require('./ATNConfigSet').ATNConfigSet;
var getCachedPredictionContext = require('./../PredictionContext').getCachedPredictionContext;
function ATNSimulator(atn, sharedContextCache) {
//
//
this.atn = atn;
this.sharedContextCache = sharedContextCache;
return this;
}
ATNSimulator.ERROR = new DFAState(0x7FFFFFFF, new ATNConfigSet());
ATNSimulator.prototype.getCachedContext = function(context) {
if (this.sharedContextCache ===null) {
return context;
}
var visited = {};
return getCachedPredictionContext(context, this.sharedContextCache, visited);
};
exports.ATNSimulator = ATNSimulator;
},{"./../PredictionContext":17,"./../dfa/DFAState":40,"./ATNConfigSet":24}],28:[function(require,module,exports){
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
var INITIAL_NUM_TRANSITIONS = 4;
function ATNState() {
this.atn = null;
this.stateNumber = ATNState.INVALID_STATE_NUMBER;
this.stateType = null;
this.ruleIndex = 0; // at runtime, we don't have Rule objects
this.epsilonOnlyTransitions = false;
this.transitions = [];
this.nextTokenWithinRule = null;
return this;
}
ATNState.INVALID_TYPE = 0;
ATNState.BASIC = 1;
ATNState.RULE_START = 2;
ATNState.BLOCK_START = 3;
ATNState.PLUS_BLOCK_START = 4;
ATNState.STAR_BLOCK_START = 5;
ATNState.TOKEN_START = 6;
ATNState.RULE_STOP = 7;
ATNState.BLOCK_END = 8;
ATNState.STAR_LOOP_BACK = 9;
ATNState.STAR_LOOP_ENTRY = 10;
ATNState.PLUS_LOOP_BACK = 11;
ATNState.LOOP_END = 12;
ATNState.serializationNames = [
"INVALID",
"BASIC",
"RULE_START",
"BLOCK_START",
"PLUS_BLOCK_START",
"STAR_BLOCK_START",
"TOKEN_START",
"RULE_STOP",
"BLOCK_END",
"STAR_LOOP_BACK",
"STAR_LOOP_ENTRY",
"PLUS_LOOP_BACK",
"LOOP_END" ];
ATNState.INVALID_STATE_NUMBER = -1;
ATNState.prototype.toString = function() {
return this.stateNumber;
};
ATNState.prototype.equals = function(other) {
if (other instanceof ATNState) {
return this.stateNumber===other.stateNumber;
} else {
return false;
}
};
ATNState.prototype.isNonGreedyExitState = function() {
return false;
};
ATNState.prototype.addTransition = function(trans, index) {
if(index===undefined) {
index = -1;
}
if (this.transitions.length===0) {
this.epsilonOnlyTransitions = trans.isEpsilon;
} else if(this.epsilonOnlyTransitions !== trans.isEpsilon) {
this.epsilonOnlyTransitions = false;
}
if (index===-1) {
this.transitions.push(trans);
} else {
this.transitions.splice(index, 1, trans);
}
};
function BasicState() {
ATNState.call(this);
this.stateType = ATNState.BASIC;
return this;
}
BasicState.prototype = Object.create(ATNState.prototype);
BasicState.prototype.constructor = BasicState;
function DecisionState() {
ATNState.call(this);
this.decision = -1;
this.nonGreedy = false;
return this;
}
DecisionState.prototype = Object.create(ATNState.prototype);
DecisionState.prototype.constructor = DecisionState;
function BlockStartState() {
DecisionState.call(this);
this.endState = null;
return this;
}
BlockStartState.prototype = Object.create(DecisionState.prototype);
BlockStartState.prototype.constructor = BlockStartState;
function BasicBlockStartState() {
BlockStartState.call(this);
this.stateType = ATNState.BLOCK_START;
return this;
}
BasicBlockStartState.prototype = Object.create(BlockStartState.prototype);
BasicBlockStartState.prototype.constructor = BasicBlockStartState;
function BlockEndState() {
ATNState.call(this);
this.stateType = ATNState.BLOCK_END;
this.startState = null;
return this;
}
BlockEndState.prototype = Object.create(ATNState.prototype);
BlockEndState.prototype.constructor = BlockEndState;
//
function RuleStopState() {
ATNState.call(this);
this.stateType = ATNState.RULE_STOP;
return this;
}
RuleStopState.prototype = Object.create(ATNState.prototype);
RuleStopState.prototype.constructor = RuleStopState;
function RuleStartState() {
ATNState.call(this);
this.stateType = ATNState.RULE_START;
this.stopState = null;
this.isPrecedenceRule = false;
return this;
}
RuleStartState.prototype = Object.create(ATNState.prototype);
RuleStartState.prototype.constructor = RuleStartState;
//
function PlusLoopbackState() {
DecisionState.call(this);
this.stateType = ATNState.PLUS_LOOP_BACK;
return this;
}
PlusLoopbackState.prototype = Object.create(DecisionState.prototype);
PlusLoopbackState.prototype.constructor = PlusLoopbackState;
//
function PlusBlockStartState() {
BlockStartState.call(this);
this.stateType = ATNState.PLUS_BLOCK_START;
this.loopBackState = null;
return this;
}
PlusBlockStartState.prototype = Object.create(BlockStartState.prototype);
PlusBlockStartState.prototype.constructor = PlusBlockStartState;
function StarBlockStartState() {
BlockStartState.call(this);
this.stateType = ATNState.STAR_BLOCK_START;
return this;
}
StarBlockStartState.prototype = Object.create(BlockStartState.prototype);
StarBlockStartState.prototype.constructor = StarBlockStartState;
function StarLoopbackState() {
ATNState.call(this);
this.stateType = ATNState.STAR_LOOP_BACK;
return this;
}
StarLoopbackState.prototype = Object.create(ATNState.prototype);
StarLoopbackState.prototype.constructor = StarLoopbackState;
function StarLoopEntryState() {
DecisionState.call(this);
this.stateType = ATNState.STAR_LOOP_ENTRY;
this.loopBackState = null;
this.isPrecedenceDecision = null;
return this;
}
StarLoopEntryState.prototype = Object.create(DecisionState.prototype);
StarLoopEntryState.prototype.constructor = StarLoopEntryState;
function LoopEndState() {
ATNState.call(this);
this.stateType = ATNState.LOOP_END;
this.loopBackState = null;
return this;
}
LoopEndState.prototype = Object.create(ATNState.prototype);
LoopEndState.prototype.constructor = LoopEndState;
function TokensStartState() {
DecisionState.call(this);
this.stateType = ATNState.TOKEN_START;
return this;
}
TokensStartState.prototype = Object.create(DecisionState.prototype);
TokensStartState.prototype.constructor = TokensStartState;
exports.ATNState = ATNState;
exports.BasicState = BasicState;
exports.DecisionState = DecisionState;
exports.BlockStartState = BlockStartState;
exports.BlockEndState = BlockEndState;
exports.LoopEndState = LoopEndState;
exports.RuleStartState = RuleStartState;
exports.RuleStopState = RuleStopState;
exports.TokensStartState = TokensStartState;
exports.PlusLoopbackState = PlusLoopbackState;
exports.StarLoopbackState = StarLoopbackState;
exports.StarLoopEntryState = StarLoopEntryState;
exports.PlusBlockStartState = PlusBlockStartState;
exports.StarBlockStartState = StarBlockStartState;
exports.BasicBlockStartState = BasicBlockStartState;
},{}],29:[function(require,module,exports){
function ATNType() {
}
ATNType.LEXER = 0;
ATNType.PARSER = 1;
exports.ATNType = ATNType;
},{}],30:[function(require,module,exports){
//
//
var Token = require('./../Token').Token;
var Lexer = require('./../Lexer').Lexer;
var ATN = require('./ATN').ATN;
var ATNSimulator = require('./ATNSimulator').ATNSimulator;
var DFAState = require('./../dfa/DFAState').DFAState;
var ATNConfigSet = require('./ATNConfigSet').ATNConfigSet;
var OrderedATNConfigSet = require('./ATNConfigSet').OrderedATNConfigSet;
var PredictionContext = require('./../PredictionContext').PredictionContext;
var SingletonPredictionContext = require('./../PredictionContext').SingletonPredictionContext;
var RuleStopState = require('./ATNState').RuleStopState;
var LexerATNConfig = require('./ATNConfig').LexerATNConfig;
var Transition = require('./Transition').Transition;
var LexerActionExecutor = require('./LexerActionExecutor').LexerActionExecutor;
var LexerNoViableAltException = require('./../error/Errors').LexerNoViableAltException;
function resetSimState(sim) {
sim.index = -1;
sim.line = 0;
sim.column = -1;
sim.dfaState = null;
}
function SimState() {
resetSimState(this);
return this;
}
SimState.prototype.reset = function() {
resetSimState(this);
};
function LexerATNSimulator(recog, atn, decisionToDFA, sharedContextCache) {
ATNSimulator.call(this, atn, sharedContextCache);
this.decisionToDFA = decisionToDFA;
this.recog = recog;
this.startIndex = -1;
this.line = 1;
this.column = 0;
this.mode = Lexer.DEFAULT_MODE;
this.prevAccept = new SimState();
return this;
}
LexerATNSimulator.prototype = Object.create(ATNSimulator.prototype);
LexerATNSimulator.prototype.constructor = LexerATNSimulator;
LexerATNSimulator.debug = false;
LexerATNSimulator.dfa_debug = false;
LexerATNSimulator.MIN_DFA_EDGE = 0;
LexerATNSimulator.MAX_DFA_EDGE = 127; // forces unicode to stay in ATN
LexerATNSimulator.match_calls = 0;
LexerATNSimulator.prototype.copyState = function(simulator) {
this.column = simulator.column;
this.line = simulator.line;
this.mode = simulator.mode;
this.startIndex = simulator.startIndex;
};
LexerATNSimulator.prototype.match = function(input, mode) {
this.match_calls += 1;
this.mode = mode;
var mark = input.mark();
try {
this.startIndex = input.index;
this.prevAccept.reset();
var dfa = this.decisionToDFA[mode];
if (dfa.s0 === null) {
return this.matchATN(input);
} else {
return this.execATN(input, dfa.s0);
}
} finally {
input.release(mark);
}
};
LexerATNSimulator.prototype.reset = function() {
this.prevAccept.reset();
this.startIndex = -1;
this.line = 1;
this.column = 0;
this.mode = Lexer.DEFAULT_MODE;
};
LexerATNSimulator.prototype.matchATN = function(input) {
var startState = this.atn.modeToStartState[this.mode];
if (LexerATNSimulator.debug) {
console.log("matchATN mode " + this.mode + " start: " + startState);
}
var old_mode = this.mode;
var s0_closure = this.computeStartState(input, startState);
var suppressEdge = s0_closure.hasSemanticContext;
s0_closure.hasSemanticContext = false;
var next = this.addDFAState(s0_closure);
if (!suppressEdge) {
this.decisionToDFA[this.mode].s0 = next;
}
var predict = this.execATN(input, next);
if (LexerATNSimulator.debug) {
console.log("DFA after matchATN: " + this.decisionToDFA[old_mode].toLexerString());
}
return predict;
};
LexerATNSimulator.prototype.execATN = function(input, ds0) {
if (LexerATNSimulator.debug) {
console.log("start state closure=" + ds0.configs);
}
if (ds0.isAcceptState) {
this.captureSimState(this.prevAccept, input, ds0);
}
var t = input.LA(1);
var s = ds0; // s is current/from DFA state
while (true) { // while more work
if (LexerATNSimulator.debug) {
console.log("execATN loop starting closure: " + s.configs);
}
var target = this.getExistingTargetState(s, t);
if (target === null) {
target = this.computeTargetState(input, s, t);
}
if (target === ATNSimulator.ERROR) {
break;
}
if (t !== Token.EOF) {
this.consume(input);
}
if (target.isAcceptState) {
this.captureSimState(this.prevAccept, input, target);
if (t === Token.EOF) {
break;
}
}
t = input.LA(1);
s = target; // flip; current DFA target becomes new src/from state
}
return this.failOrAccept(this.prevAccept, input, s.configs, t);
};
//
LexerATNSimulator.prototype.getExistingTargetState = function(s, t) {
if (s.edges === null || t < LexerATNSimulator.MIN_DFA_EDGE || t > LexerATNSimulator.MAX_DFA_EDGE) {
return null;
}
var target = s.edges[t - LexerATNSimulator.MIN_DFA_EDGE];
if(target===undefined) {
target = null;
}
if (LexerATNSimulator.debug && target !== null) {
console.log("reuse state " + s.stateNumber + " edge to " + target.stateNumber);
}
return target;
};
//
//
LexerATNSimulator.prototype.computeTargetState = function(input, s, t) {
var reach = new OrderedATNConfigSet();
this.getReachableConfigSet(input, s.configs, reach, t);
if (reach.items.length === 0) { // we got nowhere on t from s
if (!reach.hasSemanticContext) {
this.addDFAEdge(s, t, ATNSimulator.ERROR);
}
return ATNSimulator.ERROR;
}
return this.addDFAEdge(s, t, null, reach);
};
LexerATNSimulator.prototype.failOrAccept = function(prevAccept, input, reach, t) {
if (this.prevAccept.dfaState !== null) {
var lexerActionExecutor = prevAccept.dfaState.lexerActionExecutor;
this.accept(input, lexerActionExecutor, this.startIndex,
prevAccept.index, prevAccept.line, prevAccept.column);
return prevAccept.dfaState.prediction;
} else {
if (t === Token.EOF && input.index === this.startIndex) {
return Token.EOF;
}
throw new LexerNoViableAltException(this.recog, input, this.startIndex, reach);
}
};
LexerATNSimulator.prototype.getReachableConfigSet = function(input, closure,
reach, t) {
var skipAlt = ATN.INVALID_ALT_NUMBER;
for (var i = 0; i < closure.items.length; i++) {
var cfg = closure.items[i];
var currentAltReachedAcceptState = (cfg.alt === skipAlt);
if (currentAltReachedAcceptState && cfg.passedThroughNonGreedyDecision) {
continue;
}
if (LexerATNSimulator.debug) {
console.log("testing %s at %s\n", this.getTokenName(t), cfg
.toString(this.recog, true));
}
for (var j = 0; j < cfg.state.transitions.length; j++) {
var trans = cfg.state.transitions[j]; // for each transition
var target = this.getReachableTarget(trans, t);
if (target !== null) {
var lexerActionExecutor = cfg.lexerActionExecutor;
if (lexerActionExecutor !== null) {
lexerActionExecutor = lexerActionExecutor.fixOffsetBeforeMatch(input.index - this.startIndex);
}
var treatEofAsEpsilon = (t === Token.EOF);
var config = new LexerATNConfig({state:target, lexerActionExecutor:lexerActionExecutor}, cfg);
if (this.closure(input, config, reach,
currentAltReachedAcceptState, true, treatEofAsEpsilon)) {
skipAlt = cfg.alt;
}
}
}
}
};
LexerATNSimulator.prototype.accept = function(input, lexerActionExecutor,
startIndex, index, line, charPos) {
if (LexerATNSimulator.debug) {
console.log("ACTION %s\n", lexerActionExecutor);
}
input.seek(index);
this.line = line;
this.column = charPos;
if (lexerActionExecutor !== null && this.recog !== null) {
lexerActionExecutor.execute(this.recog, input, startIndex);
}
};
LexerATNSimulator.prototype.getReachableTarget = function(trans, t) {
if (trans.matches(t, 0, Lexer.MAX_CHAR_VALUE)) {
return trans.target;
} else {
return null;
}
};
LexerATNSimulator.prototype.computeStartState = function(input, p) {
var initialContext = PredictionContext.EMPTY;
var configs = new OrderedATNConfigSet();
for (var i = 0; i < p.transitions.length; i++) {
var target = p.transitions[i].target;
var cfg = new LexerATNConfig({state:target, alt:i+1, context:initialContext}, null);
this.closure(input, cfg, configs, false, false, false);
}
return configs;
};
//
LexerATNSimulator.prototype.closure = function(input, config, configs,
currentAltReachedAcceptState, speculative, treatEofAsEpsilon) {
var cfg = null;
if (LexerATNSimulator.debug) {
console.log("closure(" + config.toString(this.recog, true) + ")");
}
if (config.state instanceof RuleStopState) {
if (LexerATNSimulator.debug) {
if (this.recog !== null) {
console.log("closure at %s rule stop %s\n", this.recog.ruleNames[config.state.ruleIndex], config);
} else {
console.log("closure at rule stop %s\n", config);
}
}
if (config.context === null || config.context.hasEmptyPath()) {
if (config.context === null || config.context.isEmpty()) {
configs.add(config);
return true;
} else {
configs.add(new LexerATNConfig({ state:config.state, context:PredictionContext.EMPTY}, config));
currentAltReachedAcceptState = true;
}
}
if (config.context !== null && !config.context.isEmpty()) {
for (var i = 0; i < config.context.length; i++) {
if (config.context.getReturnState(i) !== PredictionContext.EMPTY_RETURN_STATE) {
var newContext = config.context.getParent(i); // "pop" return state
var returnState = this.atn.states[config.context.getReturnState(i)];
cfg = new LexerATNConfig({ state:returnState, context:newContext }, config);
currentAltReachedAcceptState = this.closure(input, cfg,
configs, currentAltReachedAcceptState, speculative,
treatEofAsEpsilon);
}
}
}
return currentAltReachedAcceptState;
}
if (!config.state.epsilonOnlyTransitions) {
if (!currentAltReachedAcceptState || !config.passedThroughNonGreedyDecision) {
configs.add(config);
}
}
for (var j = 0; j < config.state.transitions.length; j++) {
var trans = config.state.transitions[j];
cfg = this.getEpsilonTarget(input, config, trans, configs, speculative, treatEofAsEpsilon);
if (cfg !== null) {
currentAltReachedAcceptState = this.closure(input, cfg, configs,
currentAltReachedAcceptState, speculative, treatEofAsEpsilon);
}
}
return currentAltReachedAcceptState;
};
LexerATNSimulator.prototype.getEpsilonTarget = function(input, config, trans,
configs, speculative, treatEofAsEpsilon) {
var cfg = null;
if (trans.serializationType === Transition.RULE) {
var newContext = SingletonPredictionContext.create(config.context, trans.followState.stateNumber);
cfg = new LexerATNConfig( { state:trans.target, context:newContext}, config);
} else if (trans.serializationType === Transition.PRECEDENCE) {
throw "Precedence predicates are not supported in lexers.";
} else if (trans.serializationType === Transition.PREDICATE) {
if (LexerATNSimulator.debug) {
console.log("EVAL rule " + trans.ruleIndex + ":" + trans.predIndex);
}
configs.hasSemanticContext = true;
if (this.evaluatePredicate(input, trans.ruleIndex, trans.predIndex, speculative)) {
cfg = new LexerATNConfig({ state:trans.target}, config);
}
} else if (trans.serializationType === Transition.ACTION) {
if (config.context === null || config.context.hasEmptyPath()) {
//
var lexerActionExecutor = LexerActionExecutor.append(config.lexerActionExecutor,
this.atn.lexerActions[trans.actionIndex]);
cfg = new LexerATNConfig({ state:trans.target, lexerActionExecutor:lexerActionExecutor }, config);
} else {
cfg = new LexerATNConfig( { state:trans.target}, config);
}
} else if (trans.serializationType === Transition.EPSILON) {
cfg = new LexerATNConfig({ state:trans.target}, config);
} else if (trans.serializationType === Transition.ATOM ||
trans.serializationType === Transition.RANGE ||
trans.serializationType === Transition.SET) {
if (treatEofAsEpsilon) {
if (trans.matches(Token.EOF, 0, Lexer.MAX_CHAR_VALUE)) {
cfg = new LexerATNConfig( { state:trans.target }, config);
}
}
}
return cfg;
};
//
//
//
LexerATNSimulator.prototype.evaluatePredicate = function(input, ruleIndex,
predIndex, speculative) {
if (this.recog === null) {
return true;
}
if (!speculative) {
return this.recog.sempred(null, ruleIndex, predIndex);
}
var savedcolumn = this.column;
var savedLine = this.line;
var index = input.index;
var marker = input.mark();
try {
this.consume(input);
return this.recog.sempred(null, ruleIndex, predIndex);
} finally {
this.column = savedcolumn;
this.line = savedLine;
input.seek(index);
input.release(marker);
}
};
LexerATNSimulator.prototype.captureSimState = function(settings, input, dfaState) {
settings.index = input.index;
settings.line = this.line;
settings.column = this.column;
settings.dfaState = dfaState;
};
LexerATNSimulator.prototype.addDFAEdge = function(from_, tk, to, cfgs) {
if (to === undefined) {
to = null;
}
if (cfgs === undefined) {
cfgs = null;
}
if (to === null && cfgs !== null) {
//
var suppressEdge = cfgs.hasSemanticContext;
cfgs.hasSemanticContext = false;
to = this.addDFAState(cfgs);
if (suppressEdge) {
return to;
}
}
if (tk < LexerATNSimulator.MIN_DFA_EDGE || tk > LexerATNSimulator.MAX_DFA_EDGE) {
return to;
}
if (LexerATNSimulator.debug) {
console.log("EDGE " + from_ + " -> " + to + " upon " + tk);
}
if (from_.edges === null) {
from_.edges = [];
}
from_.edges[tk - LexerATNSimulator.MIN_DFA_EDGE] = to; // connect
return to;
};
LexerATNSimulator.prototype.addDFAState = function(configs) {
var proposed = new DFAState(null, configs);
var firstConfigWithRuleStopState = null;
for (var i = 0; i < configs.items.length; i++) {
var cfg = configs.items[i];
if (cfg.state instanceof RuleStopState) {
firstConfigWithRuleStopState = cfg;
break;
}
}
if (firstConfigWithRuleStopState !== null) {
proposed.isAcceptState = true;
proposed.lexerActionExecutor = firstConfigWithRuleStopState.lexerActionExecutor;
proposed.prediction = this.atn.ruleToTokenType[firstConfigWithRuleStopState.state.ruleIndex];
}
var dfa = this.decisionToDFA[this.mode];
var existing = dfa.states.get(proposed);
if (existing!==null) {
return existing;
}
var newState = proposed;
newState.stateNumber = dfa.states.length;
configs.setReadonly(true);
newState.configs = configs;
dfa.states.add(newState);
return newState;
};
LexerATNSimulator.prototype.getDFA = function(mode) {
return this.decisionToDFA[mode];
};
LexerATNSimulator.prototype.getText = function(input) {
return input.getText(this.startIndex, input.index - 1);
};
LexerATNSimulator.prototype.consume = function(input) {
var curChar = input.LA(1);
if (curChar === "\n".charCodeAt(0)) {
this.line += 1;
this.column = 0;
} else {
this.column += 1;
}
input.consume();
};
LexerATNSimulator.prototype.getTokenName = function(tt) {
if (tt === -1) {
return "EOF";
} else {
return "'" + String.fromCharCode(tt) + "'";
}
};
exports.LexerATNSimulator = LexerATNSimulator;
},{"./../Lexer":14,"./../PredictionContext":17,"./../Token":20,"./../dfa/DFAState":40,"./../error/Errors":45,"./ATN":22,"./ATNConfig":23,"./ATNConfigSet":24,"./ATNSimulator":27,"./ATNState":28,"./LexerActionExecutor":32,"./Transition":36}],31:[function(require,module,exports){
//
//
function LexerActionType() {
}
LexerActionType.CHANNEL = 0; //The type of a {@link LexerChannelAction} action.
LexerActionType.CUSTOM = 1; //The type of a {@link LexerCustomAction} action.
LexerActionType.MODE = 2; //The type of a {@link LexerModeAction} action.
LexerActionType.MORE = 3; //The type of a {@link LexerMoreAction} action.
LexerActionType.POP_MODE = 4; //The type of a {@link LexerPopModeAction} action.
LexerActionType.PUSH_MODE = 5; //The type of a {@link LexerPushModeAction} action.
LexerActionType.SKIP = 6; //The type of a {@link LexerSkipAction} action.
LexerActionType.TYPE = 7; //The type of a {@link LexerTypeAction} action.
function LexerAction(action) {
this.actionType = action;
this.isPositionDependent = false;
return this;
}
LexerAction.prototype.hashCode = function() {
var hash = new Hash();
this.updateHashCode(hash);
return hash.finish()
};
LexerAction.prototype.updateHashCode = function(hash) {
hash.update(this.actionType);
};
LexerAction.prototype.equals = function(other) {
return this === other;
};
//
//
function LexerSkipAction() {
LexerAction.call(this, LexerActionType.SKIP);
return this;
}
LexerSkipAction.prototype = Object.create(LexerAction.prototype);
LexerSkipAction.prototype.constructor = LexerSkipAction;
LexerSkipAction.INSTANCE = new LexerSkipAction();
LexerSkipAction.prototype.execute = function(lexer) {
lexer.skip();
};
LexerSkipAction.prototype.toString = function() {
return "skip";
};
function LexerTypeAction(type) {
LexerAction.call(this, LexerActionType.TYPE);
this.type = type;
return this;
}
LexerTypeAction.prototype = Object.create(LexerAction.prototype);
LexerTypeAction.prototype.constructor = LexerTypeAction;
LexerTypeAction.prototype.execute = function(lexer) {
lexer.type = this.type;
};
LexerTypeAction.prototype.updateHashCode = function(hash) {
hash.update(this.actionType, this.type);
};
LexerTypeAction.prototype.equals = function(other) {
if(this === other) {
return true;
} else if (! (other instanceof LexerTypeAction)) {
return false;
} else {
return this.type === other.type;
}
};
LexerTypeAction.prototype.toString = function() {
return "type(" + this.type + ")";
};
function LexerPushModeAction(mode) {
LexerAction.call(this, LexerActionType.PUSH_MODE);
this.mode = mode;
return this;
}
LexerPushModeAction.prototype = Object.create(LexerAction.prototype);
LexerPushModeAction.prototype.constructor = LexerPushModeAction;
LexerPushModeAction.prototype.execute = function(lexer) {
lexer.pushMode(this.mode);
};
LexerPushModeAction.prototype.updateHashCode = function(hash) {
hash.update(this.actionType, this.mode);
};
LexerPushModeAction.prototype.equals = function(other) {
if (this === other) {
return true;
} else if (! (other instanceof LexerPushModeAction)) {
return false;
} else {
return this.mode === other.mode;
}
};
LexerPushModeAction.prototype.toString = function() {
return "pushMode(" + this.mode + ")";
};
//
function LexerPopModeAction() {
LexerAction.call(this,LexerActionType.POP_MODE);
return this;
}
LexerPopModeAction.prototype = Object.create(LexerAction.prototype);
LexerPopModeAction.prototype.constructor = LexerPopModeAction;
LexerPopModeAction.INSTANCE = new LexerPopModeAction();
LexerPopModeAction.prototype.execute = function(lexer) {
lexer.popMode();
};
LexerPopModeAction.prototype.toString = function() {
return "popMode";
};
//
function LexerMoreAction() {
LexerAction.call(this, LexerActionType.MORE);
return this;
}
LexerMoreAction.prototype = Object.create(LexerAction.prototype);
LexerMoreAction.prototype.constructor = LexerMoreAction;
LexerMoreAction.INSTANCE = new LexerMoreAction();
LexerMoreAction.prototype.execute = function(lexer) {
lexer.more();
};
LexerMoreAction.prototype.toString = function() {
return "more";
};
function LexerModeAction(mode) {
LexerAction.call(this, LexerActionType.MODE);
this.mode = mode;
return this;
}
LexerModeAction.prototype = Object.create(LexerAction.prototype);
LexerModeAction.prototype.constructor = LexerModeAction;
LexerModeAction.prototype.execute = function(lexer) {
lexer.mode(this.mode);
};
LexerModeAction.prototype.updateHashCode = function(hash) {
hash.update(this.actionType, this.mode);
};
LexerModeAction.prototype.equals = function(other) {
if (this === other) {
return true;
} else if (! (other instanceof LexerModeAction)) {
return false;
} else {
return this.mode === other.mode;
}
};
LexerModeAction.prototype.toString = function() {
return "mode(" + this.mode + ")";
};
//
//
function LexerCustomAction(ruleIndex, actionIndex) {
LexerAction.call(this, LexerActionType.CUSTOM);
this.ruleIndex = ruleIndex;
this.actionIndex = actionIndex;
this.isPositionDependent = true;
return this;
}
LexerCustomAction.prototype = Object.create(LexerAction.prototype);
LexerCustomAction.prototype.constructor = LexerCustomAction;
LexerCustomAction.prototype.execute = function(lexer) {
lexer.action(null, this.ruleIndex, this.actionIndex);
};
LexerCustomAction.prototype.updateHashCode = function(hash) {
hash.update(this.actionType, this.ruleIndex, this.actionIndex);
};
LexerCustomAction.prototype.equals = function(other) {
if (this === other) {
return true;
} else if (! (other instanceof LexerCustomAction)) {
return false;
} else {
return this.ruleIndex === other.ruleIndex && this.actionIndex === other.actionIndex;
}
};
function LexerChannelAction(channel) {
LexerAction.call(this, LexerActionType.CHANNEL);
this.channel = channel;
return this;
}
LexerChannelAction.prototype = Object.create(LexerAction.prototype);
LexerChannelAction.prototype.constructor = LexerChannelAction;
LexerChannelAction.prototype.execute = function(lexer) {
lexer._channel = this.channel;
};
LexerChannelAction.prototype.updateHashCode = function(hash) {
hash.update(this.actionType, this.channel);
};
LexerChannelAction.prototype.equals = function(other) {
if (this === other) {
return true;
} else if (! (other instanceof LexerChannelAction)) {
return false;
} else {
return this.channel === other.channel;
}
};
LexerChannelAction.prototype.toString = function() {
return "channel(" + this.channel + ")";
};
//
//
//
function LexerIndexedCustomAction(offset, action) {
LexerAction.call(this, action.actionType);
this.offset = offset;
this.action = action;
this.isPositionDependent = true;
return this;
}
LexerIndexedCustomAction.prototype = Object.create(LexerAction.prototype);
LexerIndexedCustomAction.prototype.constructor = LexerIndexedCustomAction;
LexerIndexedCustomAction.prototype.execute = function(lexer) {
this.action.execute(lexer);
};
LexerIndexedCustomAction.prototype.updateHashCode = function(hash) {
hash.update(this.actionType, this.offset, this.action);
};
LexerIndexedCustomAction.prototype.equals = function(other) {
if (this === other) {
return true;
} else if (! (other instanceof LexerIndexedCustomAction)) {
return false;
} else {
return this.offset === other.offset && this.action === other.action;
}
};
exports.LexerActionType = LexerActionType;
exports.LexerSkipAction = LexerSkipAction;
exports.LexerChannelAction = LexerChannelAction;
exports.LexerCustomAction = LexerCustomAction;
exports.LexerIndexedCustomAction = LexerIndexedCustomAction;
exports.LexerMoreAction = LexerMoreAction;
exports.LexerTypeAction = LexerTypeAction;
exports.LexerPushModeAction = LexerPushModeAction;
exports.LexerPopModeAction = LexerPopModeAction;
exports.LexerModeAction = LexerModeAction;
},{}],32:[function(require,module,exports){
//
//
var hashStuff = require("../Utils").hashStuff;
var LexerIndexedCustomAction = require('./LexerAction').LexerIndexedCustomAction;
function LexerActionExecutor(lexerActions) {
this.lexerActions = lexerActions === null ? [] : lexerActions;
this.cachedHashCode = hashStuff(lexerActions); // "".join([str(la) for la in
return this;
}
//
//
LexerActionExecutor.append = function(lexerActionExecutor, lexerAction) {
if (lexerActionExecutor === null) {
return new LexerActionExecutor([ lexerAction ]);
}
var lexerActions = lexerActionExecutor.lexerActions.concat([ lexerAction ]);
return new LexerActionExecutor(lexerActions);
};
//
//
//
//
//
LexerActionExecutor.prototype.fixOffsetBeforeMatch = function(offset) {
var updatedLexerActions = null;
for (var i = 0; i < this.lexerActions.length; i++) {
if (this.lexerActions[i].isPositionDependent &&
!(this.lexerActions[i] instanceof LexerIndexedCustomAction)) {
if (updatedLexerActions === null) {
updatedLexerActions = this.lexerActions.concat([]);
}
updatedLexerActions[i] = new LexerIndexedCustomAction(offset,
this.lexerActions[i]);
}
}
if (updatedLexerActions === null) {
return this;
} else {
return new LexerActionExecutor(updatedLexerActions);
}
};
//
//
LexerActionExecutor.prototype.execute = function(lexer, input, startIndex) {
var requiresSeek = false;
var stopIndex = input.index;
try {
for (var i = 0; i < this.lexerActions.length; i++) {
var lexerAction = this.lexerActions[i];
if (lexerAction instanceof LexerIndexedCustomAction) {
var offset = lexerAction.offset;
input.seek(startIndex + offset);
lexerAction = lexerAction.action;
requiresSeek = (startIndex + offset) !== stopIndex;
} else if (lexerAction.isPositionDependent) {
input.seek(stopIndex);
requiresSeek = false;
}
lexerAction.execute(lexer);
}
} finally {
if (requiresSeek) {
input.seek(stopIndex);
}
}
};
LexerActionExecutor.prototype.hashCode = function() {
return this.cachedHashCode;
};
LexerActionExecutor.prototype.updateHashCode = function(hash) {
hash.update(this.cachedHashCode);
};
LexerActionExecutor.prototype.equals = function(other) {
if (this === other) {
return true;
} else if (!(other instanceof LexerActionExecutor)) {
return false;
} else if (this.cachedHashCode != other.cachedHashCode) {
return false;
} else if (this.lexerActions.length != other.lexerActions.length) {
return false;
} else {
var numActions = this.lexerActions.length
for (var idx = 0; idx < numActions; ++idx) {
if (!this.lexerActions[idx].equals(other.lexerActions[idx])) {
return false;
}
}
return true;
}
};
exports.LexerActionExecutor = LexerActionExecutor;
},{"../Utils":21,"./LexerAction":31}],33:[function(require,module,exports){
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
var Utils = require('./../Utils');
var Set = Utils.Set;
var BitSet = Utils.BitSet;
var DoubleDict = Utils.DoubleDict;
var ATN = require('./ATN').ATN;
var ATNState = require('./ATNState').ATNState;
var ATNConfig = require('./ATNConfig').ATNConfig;
var ATNConfigSet = require('./ATNConfigSet').ATNConfigSet;
var Token = require('./../Token').Token;
var DFAState = require('./../dfa/DFAState').DFAState;
var PredPrediction = require('./../dfa/DFAState').PredPrediction;
var ATNSimulator = require('./ATNSimulator').ATNSimulator;
var PredictionMode = require('./PredictionMode').PredictionMode;
var RuleContext = require('./../RuleContext').RuleContext;
var ParserRuleContext = require('./../ParserRuleContext').ParserRuleContext;
var SemanticContext = require('./SemanticContext').SemanticContext;
var StarLoopEntryState = require('./ATNState').StarLoopEntryState;
var RuleStopState = require('./ATNState').RuleStopState;
var PredictionContext = require('./../PredictionContext').PredictionContext;
var Interval = require('./../IntervalSet').Interval;
var Transitions = require('./Transition');
var Transition = Transitions.Transition;
var SetTransition = Transitions.SetTransition;
var NotSetTransition = Transitions.NotSetTransition;
var RuleTransition = Transitions.RuleTransition;
var ActionTransition = Transitions.ActionTransition;
var NoViableAltException = require('./../error/Errors').NoViableAltException;
var SingletonPredictionContext = require('./../PredictionContext').SingletonPredictionContext;
var predictionContextFromRuleContext = require('./../PredictionContext').predictionContextFromRuleContext;
function ParserATNSimulator(parser, atn, decisionToDFA, sharedContextCache) {
ATNSimulator.call(this, atn, sharedContextCache);
this.parser = parser;
this.decisionToDFA = decisionToDFA;
this.predictionMode = PredictionMode.LL;
this._input = null;
this._startIndex = 0;
this._outerContext = null;
this._dfa = null;
//
this.mergeCache = null;
return this;
}
ParserATNSimulator.prototype = Object.create(ATNSimulator.prototype);
ParserATNSimulator.prototype.constructor = ParserATNSimulator;
ParserATNSimulator.prototype.debug = false;
ParserATNSimulator.prototype.debug_closure = false;
ParserATNSimulator.prototype.debug_add = false;
ParserATNSimulator.prototype.debug_list_atn_decisions = false;
ParserATNSimulator.prototype.dfa_debug = false;
ParserATNSimulator.prototype.retry_debug = false;
ParserATNSimulator.prototype.reset = function() {
};
ParserATNSimulator.prototype.adaptivePredict = function(input, decision, outerContext) {
if (this.debug || this.debug_list_atn_decisions) {
console.log("adaptivePredict decision " + decision +
" exec LA(1)==" + this.getLookaheadName(input) +
" line " + input.LT(1).line + ":" +
input.LT(1).column);
}
this._input = input;
this._startIndex = input.index;
this._outerContext = outerContext;
var dfa = this.decisionToDFA[decision];
this._dfa = dfa;
var m = input.mark();
var index = input.index;
try {
var s0;
if (dfa.precedenceDfa) {
s0 = dfa.getPrecedenceStartState(this.parser.getPrecedence());
} else {
s0 = dfa.s0;
}
if (s0===null) {
if (outerContext===null) {
outerContext = RuleContext.EMPTY;
}
if (this.debug || this.debug_list_atn_decisions) {
console.log("predictATN decision " + dfa.decision +
" exec LA(1)==" + this.getLookaheadName(input) +
", outerContext=" + outerContext.toString(this.parser.ruleNames));
}
var fullCtx = false;
var s0_closure = this.computeStartState(dfa.atnStartState, RuleContext.EMPTY, fullCtx);
if( dfa.precedenceDfa) {
//
dfa.s0.configs = s0_closure; // not used for prediction but useful to know start configs anyway
s0_closure = this.applyPrecedenceFilter(s0_closure);
s0 = this.addDFAState(dfa, new DFAState(null, s0_closure));
dfa.setPrecedenceStartState(this.parser.getPrecedence(), s0);
} else {
s0 = this.addDFAState(dfa, new DFAState(null, s0_closure));
dfa.s0 = s0;
}
}
var alt = this.execATN(dfa, s0, input, index, outerContext);
if (this.debug) {
console.log("DFA after predictATN: " + dfa.toString(this.parser.literalNames));
}
return alt;
} finally {
this._dfa = null;
this.mergeCache = null; // wack cache after each prediction
input.seek(index);
input.release(m);
}
};
//
ParserATNSimulator.prototype.execATN = function(dfa, s0, input, startIndex, outerContext ) {
if (this.debug || this.debug_list_atn_decisions) {
console.log("execATN decision " + dfa.decision +
" exec LA(1)==" + this.getLookaheadName(input) +
" line " + input.LT(1).line + ":" + input.LT(1).column);
}
var alt;
var previousD = s0;
if (this.debug) {
console.log("s0 = " + s0);
}
var t = input.LA(1);
while(true) { // while more work
var D = this.getExistingTargetState(previousD, t);
if(D===null) {
D = this.computeTargetState(dfa, previousD, t);
}
if(D===ATNSimulator.ERROR) {
var e = this.noViableAlt(input, outerContext, previousD.configs, startIndex);
input.seek(startIndex);
alt = this.getSynValidOrSemInvalidAltThatFinishedDecisionEntryRule(previousD.configs, outerContext);
if(alt!==ATN.INVALID_ALT_NUMBER) {
return alt;
} else {
throw e;
}
}
if(D.requiresFullContext && this.predictionMode !== PredictionMode.SLL) {
var conflictingAlts = null;
if (D.predicates!==null) {
if (this.debug) {
console.log("DFA state has preds in DFA sim LL failover");
}
var conflictIndex = input.index;
if(conflictIndex !== startIndex) {
input.seek(startIndex);
}
conflictingAlts = this.evalSemanticContext(D.predicates, outerContext, true);
if (conflictingAlts.length===1) {
if(this.debug) {
console.log("Full LL avoided");
}
return conflictingAlts.minValue();
}
if (conflictIndex !== startIndex) {
input.seek(conflictIndex);
}
}
if (this.dfa_debug) {
console.log("ctx sensitive state " + outerContext +" in " + D);
}
var fullCtx = true;
var s0_closure = this.computeStartState(dfa.atnStartState, outerContext, fullCtx);
this.reportAttemptingFullContext(dfa, conflictingAlts, D.configs, startIndex, input.index);
alt = this.execATNWithFullContext(dfa, D, s0_closure, input, startIndex, outerContext);
return alt;
}
if (D.isAcceptState) {
if (D.predicates===null) {
return D.prediction;
}
var stopIndex = input.index;
input.seek(startIndex);
var alts = this.evalSemanticContext(D.predicates, outerContext, true);
if (alts.length===0) {
throw this.noViableAlt(input, outerContext, D.configs, startIndex);
} else if (alts.length===1) {
return alts.minValue();
} else {
this.reportAmbiguity(dfa, D, startIndex, stopIndex, false, alts, D.configs);
return alts.minValue();
}
}
previousD = D;
if (t !== Token.EOF) {
input.consume();
t = input.LA(1);
}
}
};
//
//
//
ParserATNSimulator.prototype.getExistingTargetState = function(previousD, t) {
var edges = previousD.edges;
if (edges===null) {
return null;
} else {
return edges[t + 1] || null;
}
};
//
//
//
//
ParserATNSimulator.prototype.computeTargetState = function(dfa, previousD, t) {
var reach = this.computeReachSet(previousD.configs, t, false);
if(reach===null) {
this.addDFAEdge(dfa, previousD, t, ATNSimulator.ERROR);
return ATNSimulator.ERROR;
}
var D = new DFAState(null, reach);
var predictedAlt = this.getUniqueAlt(reach);
if (this.debug) {
var altSubSets = PredictionMode.getConflictingAltSubsets(reach);
console.log("SLL altSubSets=" + Utils.arrayToString(altSubSets) +
", previous=" + previousD.configs +
", configs=" + reach +
", predict=" + predictedAlt +
", allSubsetsConflict=" +
PredictionMode.allSubsetsConflict(altSubSets) + ", conflictingAlts=" +
this.getConflictingAlts(reach));
}
if (predictedAlt!==ATN.INVALID_ALT_NUMBER) {
D.isAcceptState = true;
D.configs.uniqueAlt = predictedAlt;
D.prediction = predictedAlt;
} else if (PredictionMode.hasSLLConflictTerminatingPrediction(this.predictionMode, reach)) {
D.configs.conflictingAlts = this.getConflictingAlts(reach);
D.requiresFullContext = true;
D.isAcceptState = true;
D.prediction = D.configs.conflictingAlts.minValue();
}
if (D.isAcceptState && D.configs.hasSemanticContext) {
this.predicateDFAState(D, this.atn.getDecisionState(dfa.decision));
if( D.predicates!==null) {
D.prediction = ATN.INVALID_ALT_NUMBER;
}
}
D = this.addDFAEdge(dfa, previousD, t, D);
return D;
};
ParserATNSimulator.prototype.predicateDFAState = function(dfaState, decisionState) {
var nalts = decisionState.transitions.length;
var altsToCollectPredsFrom = this.getConflictingAltsOrUniqueAlt(dfaState.configs);
var altToPred = this.getPredsForAmbigAlts(altsToCollectPredsFrom, dfaState.configs, nalts);
if (altToPred!==null) {
dfaState.predicates = this.getPredicatePredictions(altsToCollectPredsFrom, altToPred);
dfaState.prediction = ATN.INVALID_ALT_NUMBER; // make sure we use preds
} else {
dfaState.prediction = altsToCollectPredsFrom.minValue();
}
};
ParserATNSimulator.prototype.execATNWithFullContext = function(dfa, D, // how far we got before failing over
s0,
input,
startIndex,
outerContext) {
if (this.debug || this.debug_list_atn_decisions) {
console.log("execATNWithFullContext "+s0);
}
var fullCtx = true;
var foundExactAmbig = false;
var reach = null;
var previous = s0;
input.seek(startIndex);
var t = input.LA(1);
var predictedAlt = -1;
while (true) { // while more work
reach = this.computeReachSet(previous, t, fullCtx);
if (reach===null) {
var e = this.noViableAlt(input, outerContext, previous, startIndex);
input.seek(startIndex);
var alt = this.getSynValidOrSemInvalidAltThatFinishedDecisionEntryRule(previous, outerContext);
if(alt!==ATN.INVALID_ALT_NUMBER) {
return alt;
} else {
throw e;
}
}
var altSubSets = PredictionMode.getConflictingAltSubsets(reach);
if(this.debug) {
console.log("LL altSubSets=" + altSubSets + ", predict=" +
PredictionMode.getUniqueAlt(altSubSets) + ", resolvesToJustOneViableAlt=" +
PredictionMode.resolvesToJustOneViableAlt(altSubSets));
}
reach.uniqueAlt = this.getUniqueAlt(reach);
if(reach.uniqueAlt!==ATN.INVALID_ALT_NUMBER) {
predictedAlt = reach.uniqueAlt;
break;
} else if (this.predictionMode !== PredictionMode.LL_EXACT_AMBIG_DETECTION) {
predictedAlt = PredictionMode.resolvesToJustOneViableAlt(altSubSets);
if(predictedAlt !== ATN.INVALID_ALT_NUMBER) {
break;
}
} else {
if (PredictionMode.allSubsetsConflict(altSubSets) && PredictionMode.allSubsetsEqual(altSubSets)) {
foundExactAmbig = true;
predictedAlt = PredictionMode.getSingleViableAlt(altSubSets);
break;
}
}
previous = reach;
if( t !== Token.EOF) {
input.consume();
t = input.LA(1);
}
}
if (reach.uniqueAlt !== ATN.INVALID_ALT_NUMBER ) {
this.reportContextSensitivity(dfa, predictedAlt, reach, startIndex, input.index);
return predictedAlt;
}
//
//
//
//
this.reportAmbiguity(dfa, D, startIndex, input.index, foundExactAmbig, null, reach);
return predictedAlt;
};
ParserATNSimulator.prototype.computeReachSet = function(closure, t, fullCtx) {
if (this.debug) {
console.log("in computeReachSet, starting closure: " + closure);
}
if( this.mergeCache===null) {
this.mergeCache = new DoubleDict();
}
var intermediate = new ATNConfigSet(fullCtx);
//
var skippedStopStates = null;
for (var i=0; i0) {
alt = this.getAltThatFinishedDecisionEntryRule(semInvalidConfigs);
if (alt!==ATN.INVALID_ALT_NUMBER) { // syntactically viable path exists
return alt;
}
}
return ATN.INVALID_ALT_NUMBER;
};
ParserATNSimulator.prototype.getAltThatFinishedDecisionEntryRule = function(configs) {
var alts = [];
for(var i=0;i0 || ((c.state instanceof RuleStopState) && c.context.hasEmptyPath())) {
if(alts.indexOf(c.alt)<0) {
alts.push(c.alt);
}
}
}
if (alts.length===0) {
return ATN.INVALID_ALT_NUMBER;
} else {
return Math.min.apply(null, alts);
}
};
//
//
//
ParserATNSimulator.prototype.splitAccordingToSemanticValidity = function( configs, outerContext) {
var succeeded = new ATNConfigSet(configs.fullCtx);
var failed = new ATNConfigSet(configs.fullCtx);
for(var i=0;i50) {
throw "problem";
}
}
if (config.state instanceof RuleStopState) {
if (! config.context.isEmpty()) {
for ( var i =0; i= 0) {
newDepth += 1;
}
}
this.closureCheckingStopState(c, configs, closureBusy, continueCollecting, fullCtx, newDepth, treatEofAsEpsilon);
}
}
};
ParserATNSimulator.prototype.canDropLoopEntryEdgeInLeftRecursiveRule = function(config) {
var p = config.state;
if(p.stateType != ATNState.STAR_LOOP_ENTRY)
return false;
if(p.stateType != ATNState.STAR_LOOP_ENTRY || !p.isPrecedenceDecision ||
config.context.isEmpty() || config.context.hasEmptyPath())
return false;
var numCtxs = config.context.length;
for(var i=0; i=0) {
return this.parser.ruleNames[index];
} else {
return "";
}
};
ParserATNSimulator.prototype.getEpsilonTarget = function(config, t, collectPredicates, inContext, fullCtx, treatEofAsEpsilon) {
switch(t.serializationType) {
case Transition.RULE:
return this.ruleTransition(config, t);
case Transition.PRECEDENCE:
return this.precedenceTransition(config, t, collectPredicates, inContext, fullCtx);
case Transition.PREDICATE:
return this.predTransition(config, t, collectPredicates, inContext, fullCtx);
case Transition.ACTION:
return this.actionTransition(config, t);
case Transition.EPSILON:
return new ATNConfig({state:t.target}, config);
case Transition.ATOM:
case Transition.RANGE:
case Transition.SET:
if (treatEofAsEpsilon) {
if (t.matches(Token.EOF, 0, 1)) {
return new ATNConfig({state: t.target}, config);
}
}
return null;
default:
return null;
}
};
ParserATNSimulator.prototype.actionTransition = function(config, t) {
if (this.debug) {
var index = t.actionIndex==-1 ? 65535 : t.actionIndex;
console.log("ACTION edge " + t.ruleIndex + ":" + index);
}
return new ATNConfig({state:t.target}, config);
};
ParserATNSimulator.prototype.precedenceTransition = function(config, pt, collectPredicates, inContext, fullCtx) {
if (this.debug) {
console.log("PRED (collectPredicates=" + collectPredicates + ") " +
pt.precedence + ">=_p, ctx dependent=true");
if (this.parser!==null) {
console.log("context surrounding pred is " + Utils.arrayToString(this.parser.getRuleInvocationStack()));
}
}
var c = null;
if (collectPredicates && inContext) {
if (fullCtx) {
var currentPosition = this._input.index;
this._input.seek(this._startIndex);
var predSucceeds = pt.getPredicate().evaluate(this.parser, this._outerContext);
this._input.seek(currentPosition);
if (predSucceeds) {
c = new ATNConfig({state:pt.target}, config); // no pred context
}
} else {
var newSemCtx = SemanticContext.andContext(config.semanticContext, pt.getPredicate());
c = new ATNConfig({state:pt.target, semanticContext:newSemCtx}, config);
}
} else {
c = new ATNConfig({state:pt.target}, config);
}
if (this.debug) {
console.log("config from pred transition=" + c);
}
return c;
};
ParserATNSimulator.prototype.predTransition = function(config, pt, collectPredicates, inContext, fullCtx) {
if (this.debug) {
console.log("PRED (collectPredicates=" + collectPredicates + ") " + pt.ruleIndex +
":" + pt.predIndex + ", ctx dependent=" + pt.isCtxDependent);
if (this.parser!==null) {
console.log("context surrounding pred is " + Utils.arrayToString(this.parser.getRuleInvocationStack()));
}
}
var c = null;
if (collectPredicates && ((pt.isCtxDependent && inContext) || ! pt.isCtxDependent)) {
if (fullCtx) {
var currentPosition = this._input.index;
this._input.seek(this._startIndex);
var predSucceeds = pt.getPredicate().evaluate(this.parser, this._outerContext);
this._input.seek(currentPosition);
if (predSucceeds) {
c = new ATNConfig({state:pt.target}, config); // no pred context
}
} else {
var newSemCtx = SemanticContext.andContext(config.semanticContext, pt.getPredicate());
c = new ATNConfig({state:pt.target, semanticContext:newSemCtx}, config);
}
} else {
c = new ATNConfig({state:pt.target}, config);
}
if (this.debug) {
console.log("config from pred transition=" + c);
}
return c;
};
ParserATNSimulator.prototype.ruleTransition = function(config, t) {
if (this.debug) {
console.log("CALL rule " + this.getRuleName(t.target.ruleIndex) + ", ctx=" + config.context);
}
var returnState = t.followState;
var newContext = SingletonPredictionContext.create(config.context, returnState.stateNumber);
return new ATNConfig({state:t.target, context:newContext}, config );
};
ParserATNSimulator.prototype.getConflictingAlts = function(configs) {
var altsets = PredictionMode.getConflictingAltSubsets(configs);
return PredictionMode.getAlts(altsets);
};
//
//
//
//
//
//
ParserATNSimulator.prototype.getConflictingAltsOrUniqueAlt = function(configs) {
var conflictingAlts = null;
if (configs.uniqueAlt!== ATN.INVALID_ALT_NUMBER) {
conflictingAlts = new BitSet();
conflictingAlts.add(configs.uniqueAlt);
} else {
conflictingAlts = configs.conflictingAlts;
}
return conflictingAlts;
};
ParserATNSimulator.prototype.getTokenName = function( t) {
if (t===Token.EOF) {
return "EOF";
}
if( this.parser!==null && this.parser.literalNames!==null) {
if (t >= this.parser.literalNames.length && t >= this.parser.symbolicNames.length) {
console.log("" + t + " ttype out of range: " + this.parser.literalNames);
console.log("" + this.parser.getInputStream().getTokens());
} else {
var name = this.parser.literalNames[t] || this.parser.symbolicNames[t];
return name + "<" + t + ">";
}
}
return "" + t;
};
ParserATNSimulator.prototype.getLookaheadName = function(input) {
return this.getTokenName(input.LA(1));
};
//
ParserATNSimulator.prototype.dumpDeadEndConfigs = function(nvae) {
console.log("dead end configs: ");
var decs = nvae.getDeadEndConfigs();
for(var i=0; i0) {
var t = c.state.transitions[0];
if (t instanceof AtomTransition) {
trans = "Atom "+ this.getTokenName(t.label);
} else if (t instanceof SetTransition) {
var neg = (t instanceof NotSetTransition);
trans = (neg ? "~" : "") + "Set " + t.set;
}
}
console.error(c.toString(this.parser, true) + ":" + trans);
}
};
ParserATNSimulator.prototype.noViableAlt = function(input, outerContext, configs, startIndex) {
return new NoViableAltException(this.parser, input, input.get(startIndex), input.LT(1), configs, outerContext);
};
ParserATNSimulator.prototype.getUniqueAlt = function(configs) {
var alt = ATN.INVALID_ALT_NUMBER;
for(var i=0;i " + to + " upon " + this.getTokenName(t));
}
if (to===null) {
return null;
}
to = this.addDFAState(dfa, to); // used existing if possible not incoming
if (from_===null || t < -1 || t > this.atn.maxTokenType) {
return to;
}
if (from_.edges===null) {
from_.edges = [];
}
from_.edges[t+1] = to; // connect
if (this.debug) {
var literalNames = this.parser===null ? null : this.parser.literalNames;
var symbolicNames = this.parser===null ? null : this.parser.symbolicNames;
console.log("DFA=\n" + dfa.toString(literalNames, symbolicNames));
}
return to;
};
//
//
//
//
ParserATNSimulator.prototype.addDFAState = function(dfa, D) {
if (D == ATNSimulator.ERROR) {
return D;
}
var existing = dfa.states.get(D);
if(existing!==null) {
return existing;
}
D.stateNumber = dfa.states.length;
if (! D.configs.readOnly) {
D.configs.optimizeConfigs(this);
D.configs.setReadonly(true);
}
dfa.states.add(D);
if (this.debug) {
console.log("adding new DFA state: " + D);
}
return D;
};
ParserATNSimulator.prototype.reportAttemptingFullContext = function(dfa, conflictingAlts, configs, startIndex, stopIndex) {
if (this.debug || this.retry_debug) {
var interval = new Interval(startIndex, stopIndex + 1);
console.log("reportAttemptingFullContext decision=" + dfa.decision + ":" + configs +
", input=" + this.parser.getTokenStream().getText(interval));
}
if (this.parser!==null) {
this.parser.getErrorListenerDispatch().reportAttemptingFullContext(this.parser, dfa, startIndex, stopIndex, conflictingAlts, configs);
}
};
ParserATNSimulator.prototype.reportContextSensitivity = function(dfa, prediction, configs, startIndex, stopIndex) {
if (this.debug || this.retry_debug) {
var interval = new Interval(startIndex, stopIndex + 1);
console.log("reportContextSensitivity decision=" + dfa.decision + ":" + configs +
", input=" + this.parser.getTokenStream().getText(interval));
}
if (this.parser!==null) {
this.parser.getErrorListenerDispatch().reportContextSensitivity(this.parser, dfa, startIndex, stopIndex, prediction, configs);
}
};
ParserATNSimulator.prototype.reportAmbiguity = function(dfa, D, startIndex, stopIndex,
exact, ambigAlts, configs ) {
if (this.debug || this.retry_debug) {
var interval = new Interval(startIndex, stopIndex + 1);
console.log("reportAmbiguity " + ambigAlts + ":" + configs +
", input=" + this.parser.getTokenStream().getText(interval));
}
if (this.parser!==null) {
this.parser.getErrorListenerDispatch().reportAmbiguity(this.parser, dfa, startIndex, stopIndex, exact, ambigAlts, configs);
}
};
exports.ParserATNSimulator = ParserATNSimulator;
},{"./../IntervalSet":12,"./../ParserRuleContext":16,"./../PredictionContext":17,"./../RuleContext":19,"./../Token":20,"./../Utils":21,"./../dfa/DFAState":40,"./../error/Errors":45,"./ATN":22,"./ATNConfig":23,"./ATNConfigSet":24,"./ATNSimulator":27,"./ATNState":28,"./PredictionMode":34,"./SemanticContext":35,"./Transition":36}],34:[function(require,module,exports){
//
//
//
var Set = require('./../Utils').Set;
var Map = require('./../Utils').Map;
var BitSet = require('./../Utils').BitSet;
var AltDict = require('./../Utils').AltDict;
var ATN = require('./ATN').ATN;
var RuleStopState = require('./ATNState').RuleStopState;
var ATNConfigSet = require('./ATNConfigSet').ATNConfigSet;
var ATNConfig = require('./ATNConfig').ATNConfig;
var SemanticContext = require('./SemanticContext').SemanticContext;
var Hash = require("../Utils").Hash;
var hashStuff = require('./../Utils').hashStuff;
var equalArrays = require('./../Utils').equalArrays;
function PredictionMode() {
return this;
}
//
//
//
//
PredictionMode.SLL = 0;
//
//
//
//
PredictionMode.LL = 1;
//
//
//
//
PredictionMode.LL_EXACT_AMBIG_DETECTION = 2;
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
PredictionMode.hasSLLConflictTerminatingPrediction = function( mode, configs) {
//
if (PredictionMode.allConfigsInRuleStopStates(configs)) {
return true;
}
if (mode === PredictionMode.SLL) {
if (configs.hasSemanticContext) {
var dup = new ATNConfigSet();
for(var i=0;i1) {
return true;
}
}
return false;
};
//
//
//
PredictionMode.allSubsetsEqual = function(altsets) {
var first = null;
for(var i=0;i=prec}?";
};
PrecedencePredicate.filterPrecedencePredicates = function(set) {
var result = [];
set.values().map( function(context) {
if (context instanceof PrecedencePredicate) {
result.push(context);
}
});
return result;
};
//
function AND(a, b) {
SemanticContext.call(this);
var operands = new Set();
if (a instanceof AND) {
a.opnds.map(function(o) {
operands.add(o);
});
} else {
operands.add(a);
}
if (b instanceof AND) {
b.opnds.map(function(o) {
operands.add(o);
});
} else {
operands.add(b);
}
var precedencePredicates = PrecedencePredicate.filterPrecedencePredicates(operands);
if (precedencePredicates.length > 0) {
var reduced = null;
precedencePredicates.map( function(p) {
if(reduced===null || p.precedence 3 ? s.slice(3) : s;
};
//
//
function OR(a, b) {
SemanticContext.call(this);
var operands = new Set();
if (a instanceof OR) {
a.opnds.map(function(o) {
operands.add(o);
});
} else {
operands.add(a);
}
if (b instanceof OR) {
b.opnds.map(function(o) {
operands.add(o);
});
} else {
operands.add(b);
}
var precedencePredicates = PrecedencePredicate.filterPrecedencePredicates(operands);
if (precedencePredicates.length > 0) {
var s = precedencePredicates.sort(function(a, b) {
return a.compareTo(b);
});
var reduced = s[s.length-1];
operands.add(reduced);
}
this.opnds = operands.values();
return this;
}
OR.prototype = Object.create(SemanticContext.prototype);
OR.prototype.constructor = OR;
OR.prototype.constructor = function(other) {
if (this === other) {
return true;
} else if (!(other instanceof OR)) {
return false;
} else {
return this.opnds === other.opnds;
}
};
OR.prototype.updateHashCode = function(hash) {
hash.update(this.opnds, "OR");
};
//
OR.prototype.evaluate = function(parser, outerContext) {
for (var i = 0; i < this.opnds.length; i++) {
if (this.opnds[i].evaluate(parser, outerContext)) {
return true;
}
}
return false;
};
OR.prototype.evalPrecedence = function(parser, outerContext) {
var differs = false;
var operands = [];
for (var i = 0; i < this.opnds.length; i++) {
var context = this.opnds[i];
var evaluated = context.evalPrecedence(parser, outerContext);
differs |= (evaluated !== context);
if (evaluated === SemanticContext.NONE) {
return SemanticContext.NONE;
} else if (evaluated !== null) {
operands.push(evaluated);
}
}
if (!differs) {
return this;
}
if (operands.length === 0) {
return null;
}
var result = null;
operands.map(function(o) {
return result === null ? o : SemanticContext.orContext(result, o);
});
return result;
};
OR.prototype.toString = function() {
var s = "";
this.opnds.map(function(o) {
s += "|| " + o.toString();
});
return s.length > 3 ? s.slice(3) : s;
};
exports.SemanticContext = SemanticContext;
exports.PrecedencePredicate = PrecedencePredicate;
exports.Predicate = Predicate;
},{"./../Utils":21}],36:[function(require,module,exports){
//
//
//
var Token = require('./../Token').Token;
var Interval = require('./../IntervalSet').Interval;
var IntervalSet = require('./../IntervalSet').IntervalSet;
var Predicate = require('./SemanticContext').Predicate;
var PrecedencePredicate = require('./SemanticContext').PrecedencePredicate;
function Transition (target) {
if (target===undefined || target===null) {
throw "target cannot be null.";
}
this.target = target;
this.isEpsilon = false;
this.label = null;
return this;
}
Transition.EPSILON = 1;
Transition.RANGE = 2;
Transition.RULE = 3;
Transition.PREDICATE = 4; // e.g., {isType(input.LT(1))}?
Transition.ATOM = 5;
Transition.ACTION = 6;
Transition.SET = 7; // ~(A|B) or ~atom, wildcard, which convert to next 2
Transition.NOT_SET = 8;
Transition.WILDCARD = 9;
Transition.PRECEDENCE = 10;
Transition.serializationNames = [
"INVALID",
"EPSILON",
"RANGE",
"RULE",
"PREDICATE",
"ATOM",
"ACTION",
"SET",
"NOT_SET",
"WILDCARD",
"PRECEDENCE"
];
Transition.serializationTypes = {
EpsilonTransition: Transition.EPSILON,
RangeTransition: Transition.RANGE,
RuleTransition: Transition.RULE,
PredicateTransition: Transition.PREDICATE,
AtomTransition: Transition.ATOM,
ActionTransition: Transition.ACTION,
SetTransition: Transition.SET,
NotSetTransition: Transition.NOT_SET,
WildcardTransition: Transition.WILDCARD,
PrecedencePredicateTransition: Transition.PRECEDENCE
};
function AtomTransition(target, label) {
Transition.call(this, target);
this.label_ = label; // The token type or character value; or, signifies special label.
this.label = this.makeLabel();
this.serializationType = Transition.ATOM;
return this;
}
AtomTransition.prototype = Object.create(Transition.prototype);
AtomTransition.prototype.constructor = AtomTransition;
AtomTransition.prototype.makeLabel = function() {
var s = new IntervalSet();
s.addOne(this.label_);
return s;
};
AtomTransition.prototype.matches = function( symbol, minVocabSymbol, maxVocabSymbol) {
return this.label_ === symbol;
};
AtomTransition.prototype.toString = function() {
return this.label_;
};
function RuleTransition(ruleStart, ruleIndex, precedence, followState) {
Transition.call(this, ruleStart);
this.ruleIndex = ruleIndex; // ptr to the rule definition object for this rule ref
this.precedence = precedence;
this.followState = followState; // what node to begin computations following ref to rule
this.serializationType = Transition.RULE;
this.isEpsilon = true;
return this;
}
RuleTransition.prototype = Object.create(Transition.prototype);
RuleTransition.prototype.constructor = RuleTransition;
RuleTransition.prototype.matches = function(symbol, minVocabSymbol, maxVocabSymbol) {
return false;
};
function EpsilonTransition(target, outermostPrecedenceReturn) {
Transition.call(this, target);
this.serializationType = Transition.EPSILON;
this.isEpsilon = true;
this.outermostPrecedenceReturn = outermostPrecedenceReturn;
return this;
}
EpsilonTransition.prototype = Object.create(Transition.prototype);
EpsilonTransition.prototype.constructor = EpsilonTransition;
EpsilonTransition.prototype.matches = function( symbol, minVocabSymbol, maxVocabSymbol) {
return false;
};
EpsilonTransition.prototype.toString = function() {
return "epsilon";
};
function RangeTransition(target, start, stop) {
Transition.call(this, target);
this.serializationType = Transition.RANGE;
this.start = start;
this.stop = stop;
this.label = this.makeLabel();
return this;
}
RangeTransition.prototype = Object.create(Transition.prototype);
RangeTransition.prototype.constructor = RangeTransition;
RangeTransition.prototype.makeLabel = function() {
var s = new IntervalSet();
s.addRange(this.start, this.stop);
return s;
};
RangeTransition.prototype.matches = function(symbol, minVocabSymbol, maxVocabSymbol) {
return symbol >= this.start && symbol <= this.stop;
};
RangeTransition.prototype.toString = function() {
return "'" + String.fromCharCode(this.start) + "'..'" + String.fromCharCode(this.stop) + "'";
};
function AbstractPredicateTransition(target) {
Transition.call(this, target);
return this;
}
AbstractPredicateTransition.prototype = Object.create(Transition.prototype);
AbstractPredicateTransition.prototype.constructor = AbstractPredicateTransition;
function PredicateTransition(target, ruleIndex, predIndex, isCtxDependent) {
AbstractPredicateTransition.call(this, target);
this.serializationType = Transition.PREDICATE;
this.ruleIndex = ruleIndex;
this.predIndex = predIndex;
this.isCtxDependent = isCtxDependent; // e.g., $i ref in pred
this.isEpsilon = true;
return this;
}
PredicateTransition.prototype = Object.create(AbstractPredicateTransition.prototype);
PredicateTransition.prototype.constructor = PredicateTransition;
PredicateTransition.prototype.matches = function(symbol, minVocabSymbol, maxVocabSymbol) {
return false;
};
PredicateTransition.prototype.getPredicate = function() {
return new Predicate(this.ruleIndex, this.predIndex, this.isCtxDependent);
};
PredicateTransition.prototype.toString = function() {
return "pred_" + this.ruleIndex + ":" + this.predIndex;
};
function ActionTransition(target, ruleIndex, actionIndex, isCtxDependent) {
Transition.call(this, target);
this.serializationType = Transition.ACTION;
this.ruleIndex = ruleIndex;
this.actionIndex = actionIndex===undefined ? -1 : actionIndex;
this.isCtxDependent = isCtxDependent===undefined ? false : isCtxDependent; // e.g., $i ref in pred
this.isEpsilon = true;
return this;
}
ActionTransition.prototype = Object.create(Transition.prototype);
ActionTransition.prototype.constructor = ActionTransition;
ActionTransition.prototype.matches = function(symbol, minVocabSymbol, maxVocabSymbol) {
return false;
};
ActionTransition.prototype.toString = function() {
return "action_" + this.ruleIndex + ":" + this.actionIndex;
};
function SetTransition(target, set) {
Transition.call(this, target);
this.serializationType = Transition.SET;
if (set !==undefined && set !==null) {
this.label = set;
} else {
this.label = new IntervalSet();
this.label.addOne(Token.INVALID_TYPE);
}
return this;
}
SetTransition.prototype = Object.create(Transition.prototype);
SetTransition.prototype.constructor = SetTransition;
SetTransition.prototype.matches = function(symbol, minVocabSymbol, maxVocabSymbol) {
return this.label.contains(symbol);
};
SetTransition.prototype.toString = function() {
return this.label.toString();
};
function NotSetTransition(target, set) {
SetTransition.call(this, target, set);
this.serializationType = Transition.NOT_SET;
return this;
}
NotSetTransition.prototype = Object.create(SetTransition.prototype);
NotSetTransition.prototype.constructor = NotSetTransition;
NotSetTransition.prototype.matches = function(symbol, minVocabSymbol, maxVocabSymbol) {
return symbol >= minVocabSymbol && symbol <= maxVocabSymbol &&
!SetTransition.prototype.matches.call(this, symbol, minVocabSymbol, maxVocabSymbol);
};
NotSetTransition.prototype.toString = function() {
return '~' + SetTransition.prototype.toString.call(this);
};
function WildcardTransition(target) {
Transition.call(this, target);
this.serializationType = Transition.WILDCARD;
return this;
}
WildcardTransition.prototype = Object.create(Transition.prototype);
WildcardTransition.prototype.constructor = WildcardTransition;
WildcardTransition.prototype.matches = function(symbol, minVocabSymbol, maxVocabSymbol) {
return symbol >= minVocabSymbol && symbol <= maxVocabSymbol;
};
WildcardTransition.prototype.toString = function() {
return ".";
};
function PrecedencePredicateTransition(target, precedence) {
AbstractPredicateTransition.call(this, target);
this.serializationType = Transition.PRECEDENCE;
this.precedence = precedence;
this.isEpsilon = true;
return this;
}
PrecedencePredicateTransition.prototype = Object.create(AbstractPredicateTransition.prototype);
PrecedencePredicateTransition.prototype.constructor = PrecedencePredicateTransition;
PrecedencePredicateTransition.prototype.matches = function(symbol, minVocabSymbol, maxVocabSymbol) {
return false;
};
PrecedencePredicateTransition.prototype.getPredicate = function() {
return new PrecedencePredicate(this.precedence);
};
PrecedencePredicateTransition.prototype.toString = function() {
return this.precedence + " >= _p";
};
exports.Transition = Transition;
exports.AtomTransition = AtomTransition;
exports.SetTransition = SetTransition;
exports.NotSetTransition = NotSetTransition;
exports.RuleTransition = RuleTransition;
exports.ActionTransition = ActionTransition;
exports.EpsilonTransition = EpsilonTransition;
exports.RangeTransition = RangeTransition;
exports.WildcardTransition = WildcardTransition;
exports.PredicateTransition = PredicateTransition;
exports.PrecedencePredicateTransition = PrecedencePredicateTransition;
exports.AbstractPredicateTransition = AbstractPredicateTransition;
},{"./../IntervalSet":12,"./../Token":20,"./SemanticContext":35}],37:[function(require,module,exports){
exports.ATN = require('./ATN').ATN;
exports.ATNDeserializer = require('./ATNDeserializer').ATNDeserializer;
exports.LexerATNSimulator = require('./LexerATNSimulator').LexerATNSimulator;
exports.ParserATNSimulator = require('./ParserATNSimulator').ParserATNSimulator;
exports.PredictionMode = require('./PredictionMode').PredictionMode;
},{"./ATN":22,"./ATNDeserializer":26,"./LexerATNSimulator":30,"./ParserATNSimulator":33,"./PredictionMode":34}],38:[function(require,module,exports){
//
var Set = require("../Utils").Set;
var DFAState = require('./DFAState').DFAState;
var StarLoopEntryState = require('../atn/ATNState').StarLoopEntryState;
var ATNConfigSet = require('./../atn/ATNConfigSet').ATNConfigSet;
var DFASerializer = require('./DFASerializer').DFASerializer;
var LexerDFASerializer = require('./DFASerializer').LexerDFASerializer;
function DFA(atnStartState, decision) {
if (decision === undefined) {
decision = 0;
}
this.atnStartState = atnStartState;
this.decision = decision;
this._states = new Set();
this.s0 = null;
this.precedenceDfa = false;
if (atnStartState instanceof StarLoopEntryState)
{
if (atnStartState.isPrecedenceDecision) {
this.precedenceDfa = true;
var precedenceState = new DFAState(null, new ATNConfigSet());
precedenceState.edges = [];
precedenceState.isAcceptState = false;
precedenceState.requiresFullContext = false;
this.s0 = precedenceState;
}
}
return this;
}
//
//
DFA.prototype.getPrecedenceStartState = function(precedence) {
if (!(this.precedenceDfa)) {
throw ("Only precedence DFAs may contain a precedence start state.");
}
if (precedence < 0 || precedence >= this.s0.edges.length) {
return null;
}
return this.s0.edges[precedence] || null;
};
//
//
//
DFA.prototype.setPrecedenceStartState = function(precedence, startState) {
if (!(this.precedenceDfa)) {
throw ("Only precedence DFAs may contain a precedence start state.");
}
if (precedence < 0) {
return;
}
this.s0.edges[precedence] = startState;
};
//
//
//
DFA.prototype.setPrecedenceDfa = function(precedenceDfa) {
if (this.precedenceDfa!==precedenceDfa) {
this._states = new DFAStatesSet();
if (precedenceDfa) {
var precedenceState = new DFAState(null, new ATNConfigSet());
precedenceState.edges = [];
precedenceState.isAcceptState = false;
precedenceState.requiresFullContext = false;
this.s0 = precedenceState;
} else {
this.s0 = null;
}
this.precedenceDfa = precedenceDfa;
}
};
Object.defineProperty(DFA.prototype, "states", {
get : function() {
return this._states;
}
});
DFA.prototype.sortedStates = function() {
var list = this._states.values();
return list.sort(function(a, b) {
return a.stateNumber - b.stateNumber;
});
};
DFA.prototype.toString = function(literalNames, symbolicNames) {
literalNames = literalNames || null;
symbolicNames = symbolicNames || null;
if (this.s0 === null) {
return "";
}
var serializer = new DFASerializer(this, literalNames, symbolicNames);
return serializer.toString();
};
DFA.prototype.toLexerString = function() {
if (this.s0 === null) {
return "";
}
var serializer = new LexerDFASerializer(this);
return serializer.toString();
};
exports.DFA = DFA;
},{"../Utils":21,"../atn/ATNState":28,"./../atn/ATNConfigSet":24,"./DFASerializer":39,"./DFAState":40}],39:[function(require,module,exports){
function DFASerializer(dfa, literalNames, symbolicNames) {
this.dfa = dfa;
this.literalNames = literalNames || [];
this.symbolicNames = symbolicNames || [];
return this;
}
DFASerializer.prototype.toString = function() {
if(this.dfa.s0 === null) {
return null;
}
var buf = "";
var states = this.dfa.sortedStates();
for(var i=0;i");
buf = buf.concat(this.getStateString(t));
buf = buf.concat('\n');
}
}
}
}
return buf.length===0 ? null : buf;
};
DFASerializer.prototype.getEdgeLabel = function(i) {
if (i===0) {
return "EOF";
} else if(this.literalNames !==null || this.symbolicNames!==null) {
return this.literalNames[i-1] || this.symbolicNames[i-1];
} else {
return String.fromCharCode(i-1);
}
};
DFASerializer.prototype.getStateString = function(s) {
var baseStateStr = ( s.isAcceptState ? ":" : "") + "s" + s.stateNumber + ( s.requiresFullContext ? "^" : "");
if(s.isAcceptState) {
if (s.predicates !== null) {
return baseStateStr + "=>" + s.predicates.toString();
} else {
return baseStateStr + "=>" + s.prediction.toString();
}
} else {
return baseStateStr;
}
};
function LexerDFASerializer(dfa) {
DFASerializer.call(this, dfa, null);
return this;
}
LexerDFASerializer.prototype = Object.create(DFASerializer.prototype);
LexerDFASerializer.prototype.constructor = LexerDFASerializer;
LexerDFASerializer.prototype.getEdgeLabel = function(i) {
return "'" + String.fromCharCode(i) + "'";
};
exports.DFASerializer = DFASerializer;
exports.LexerDFASerializer = LexerDFASerializer;
},{}],40:[function(require,module,exports){
//
var ATNConfigSet = require('./../atn/ATNConfigSet').ATNConfigSet;
var Utils = require('./../Utils');
var Hash = Utils.Hash;
var Set = Utils.Set;
function PredPrediction(pred, alt) {
this.alt = alt;
this.pred = pred;
return this;
}
PredPrediction.prototype.toString = function() {
return "(" + this.pred + ", " + this.alt + ")";
};
//
//
function DFAState(stateNumber, configs) {
if (stateNumber === null) {
stateNumber = -1;
}
if (configs === null) {
configs = new ATNConfigSet();
}
this.stateNumber = stateNumber;
this.configs = configs;
this.edges = null;
this.isAcceptState = false;
this.prediction = 0;
this.lexerActionExecutor = null;
this.requiresFullContext = false;
//
//
this.predicates = null;
return this;
}
DFAState.prototype.getAltSet = function() {
var alts = new Set();
if (this.configs !== null) {
for (var i = 0; i < this.configs.length; i++) {
var c = this.configs[i];
alts.add(c.alt);
}
}
if (alts.length === 0) {
return null;
} else {
return alts;
}
};
//
//
DFAState.prototype.equals = function(other) {
return this === other ||
(other instanceof DFAState &&
this.configs.equals(other.configs));
};
DFAState.prototype.toString = function() {
var s = "" + this.stateNumber + ":" + this.configs;
if(this.isAcceptState) {
s = s + "=>";
if (this.predicates !== null)
s = s + this.predicates;
else
s = s + this.prediction;
}
return s;
};
DFAState.prototype.hashCode = function() {
var hash = new Hash();
hash.update(this.configs);
if(this.isAcceptState) {
if (this.predicates !== null)
hash.update(this.predicates);
else
hash.update(this.prediction);
}
return hash.finish();
};
exports.DFAState = DFAState;
exports.PredPrediction = PredPrediction;
},{"./../Utils":21,"./../atn/ATNConfigSet":24}],41:[function(require,module,exports){
exports.DFA = require('./DFA').DFA;
exports.DFASerializer = require('./DFASerializer').DFASerializer;
exports.LexerDFASerializer = require('./DFASerializer').LexerDFASerializer;
exports.PredPrediction = require('./DFAState').PredPrediction;
},{"./DFA":38,"./DFASerializer":39,"./DFAState":40}],42:[function(require,module,exports){
//
//
//
//
var BitSet = require('./../Utils').BitSet;
var ErrorListener = require('./ErrorListener').ErrorListener;
var Interval = require('./../IntervalSet').Interval;
function DiagnosticErrorListener(exactOnly) {
ErrorListener.call(this);
exactOnly = exactOnly || true;
this.exactOnly = exactOnly;
return this;
}
DiagnosticErrorListener.prototype = Object.create(ErrorListener.prototype);
DiagnosticErrorListener.prototype.constructor = DiagnosticErrorListener;
DiagnosticErrorListener.prototype.reportAmbiguity = function(recognizer, dfa,
startIndex, stopIndex, exact, ambigAlts, configs) {
if (this.exactOnly && !exact) {
return;
}
var msg = "reportAmbiguity d=" +
this.getDecisionDescription(recognizer, dfa) +
": ambigAlts=" +
this.getConflictingAlts(ambigAlts, configs) +
", input='" +
recognizer.getTokenStream().getText(new Interval(startIndex, stopIndex)) + "'";
recognizer.notifyErrorListeners(msg);
};
DiagnosticErrorListener.prototype.reportAttemptingFullContext = function(
recognizer, dfa, startIndex, stopIndex, conflictingAlts, configs) {
var msg = "reportAttemptingFullContext d=" +
this.getDecisionDescription(recognizer, dfa) +
", input='" +
recognizer.getTokenStream().getText(new Interval(startIndex, stopIndex)) + "'";
recognizer.notifyErrorListeners(msg);
};
DiagnosticErrorListener.prototype.reportContextSensitivity = function(
recognizer, dfa, startIndex, stopIndex, prediction, configs) {
var msg = "reportContextSensitivity d=" +
this.getDecisionDescription(recognizer, dfa) +
", input='" +
recognizer.getTokenStream().getText(new Interval(startIndex, stopIndex)) + "'";
recognizer.notifyErrorListeners(msg);
};
DiagnosticErrorListener.prototype.getDecisionDescription = function(recognizer, dfa) {
var decision = dfa.decision;
var ruleIndex = dfa.atnStartState.ruleIndex;
var ruleNames = recognizer.ruleNames;
if (ruleIndex < 0 || ruleIndex >= ruleNames.length) {
return "" + decision;
}
var ruleName = ruleNames[ruleIndex] || null;
if (ruleName === null || ruleName.length === 0) {
return "" + decision;
}
return "" + decision + " (" + ruleName + ")";
};
//
//
//
DiagnosticErrorListener.prototype.getConflictingAlts = function(reportedAlts, configs) {
if (reportedAlts !== null) {
return reportedAlts;
}
var result = new BitSet();
for (var i = 0; i < configs.items.length; i++) {
result.add(configs.items[i].alt);
}
return "{" + result.values().join(", ") + "}";
};
exports.DiagnosticErrorListener = DiagnosticErrorListener;
},{"./../IntervalSet":12,"./../Utils":21,"./ErrorListener":43}],43:[function(require,module,exports){
//
function ErrorListener() {
return this;
}
ErrorListener.prototype.syntaxError = function(recognizer, offendingSymbol, line, column, msg, e) {
};
ErrorListener.prototype.reportAmbiguity = function(recognizer, dfa, startIndex, stopIndex, exact, ambigAlts, configs) {
};
ErrorListener.prototype.reportAttemptingFullContext = function(recognizer, dfa, startIndex, stopIndex, conflictingAlts, configs) {
};
ErrorListener.prototype.reportContextSensitivity = function(recognizer, dfa, startIndex, stopIndex, prediction, configs) {
};
function ConsoleErrorListener() {
ErrorListener.call(this);
return this;
}
ConsoleErrorListener.prototype = Object.create(ErrorListener.prototype);
ConsoleErrorListener.prototype.constructor = ConsoleErrorListener;
//
//
ConsoleErrorListener.INSTANCE = new ConsoleErrorListener();
//
//
//
//
ConsoleErrorListener.prototype.syntaxError = function(recognizer, offendingSymbol, line, column, msg, e) {
console.error("line " + line + ":" + column + " " + msg);
};
function ProxyErrorListener(delegates) {
ErrorListener.call(this);
if (delegates===null) {
throw "delegates";
}
this.delegates = delegates;
return this;
}
ProxyErrorListener.prototype = Object.create(ErrorListener.prototype);
ProxyErrorListener.prototype.constructor = ProxyErrorListener;
ProxyErrorListener.prototype.syntaxError = function(recognizer, offendingSymbol, line, column, msg, e) {
this.delegates.map(function(d) { d.syntaxError(recognizer, offendingSymbol, line, column, msg, e); });
};
ProxyErrorListener.prototype.reportAmbiguity = function(recognizer, dfa, startIndex, stopIndex, exact, ambigAlts, configs) {
this.delegates.map(function(d) { d.reportAmbiguity(recognizer, dfa, startIndex, stopIndex, exact, ambigAlts, configs); });
};
ProxyErrorListener.prototype.reportAttemptingFullContext = function(recognizer, dfa, startIndex, stopIndex, conflictingAlts, configs) {
this.delegates.map(function(d) { d.reportAttemptingFullContext(recognizer, dfa, startIndex, stopIndex, conflictingAlts, configs); });
};
ProxyErrorListener.prototype.reportContextSensitivity = function(recognizer, dfa, startIndex, stopIndex, prediction, configs) {
this.delegates.map(function(d) { d.reportContextSensitivity(recognizer, dfa, startIndex, stopIndex, prediction, configs); });
};
exports.ErrorListener = ErrorListener;
exports.ConsoleErrorListener = ConsoleErrorListener;
exports.ProxyErrorListener = ProxyErrorListener;
},{}],44:[function(require,module,exports){
//
//
var Token = require('./../Token').Token;
var Errors = require('./Errors');
var NoViableAltException = Errors.NoViableAltException;
var InputMismatchException = Errors.InputMismatchException;
var FailedPredicateException = Errors.FailedPredicateException;
var ParseCancellationException = Errors.ParseCancellationException;
var ATNState = require('./../atn/ATNState').ATNState;
var Interval = require('./../IntervalSet').Interval;
var IntervalSet = require('./../IntervalSet').IntervalSet;
function ErrorStrategy() {
}
ErrorStrategy.prototype.reset = function(recognizer){
};
ErrorStrategy.prototype.recoverInline = function(recognizer){
};
ErrorStrategy.prototype.recover = function(recognizer, e){
};
ErrorStrategy.prototype.sync = function(recognizer){
};
ErrorStrategy.prototype.inErrorRecoveryMode = function(recognizer){
};
ErrorStrategy.prototype.reportError = function(recognizer){
};
//
function DefaultErrorStrategy() {
ErrorStrategy.call(this);
//
//
this.errorRecoveryMode = false;
//
this.lastErrorIndex = -1;
this.lastErrorStates = null;
return this;
}
DefaultErrorStrategy.prototype = Object.create(ErrorStrategy.prototype);
DefaultErrorStrategy.prototype.constructor = DefaultErrorStrategy;
DefaultErrorStrategy.prototype.reset = function(recognizer) {
this.endErrorCondition(recognizer);
};
//
//
//
DefaultErrorStrategy.prototype.beginErrorCondition = function(recognizer) {
this.errorRecoveryMode = true;
};
DefaultErrorStrategy.prototype.inErrorRecoveryMode = function(recognizer) {
return this.errorRecoveryMode;
};
//
//
//
DefaultErrorStrategy.prototype.endErrorCondition = function(recognizer) {
this.errorRecoveryMode = false;
this.lastErrorStates = null;
this.lastErrorIndex = -1;
};
//
//
//
DefaultErrorStrategy.prototype.reportMatch = function(recognizer) {
this.endErrorCondition(recognizer);
};
//
//
//
//
DefaultErrorStrategy.prototype.reportError = function(recognizer, e) {
if(this.inErrorRecoveryMode(recognizer)) {
return; // don't report spurious errors
}
this.beginErrorCondition(recognizer);
if ( e instanceof NoViableAltException ) {
this.reportNoViableAlternative(recognizer, e);
} else if ( e instanceof InputMismatchException ) {
this.reportInputMismatch(recognizer, e);
} else if ( e instanceof FailedPredicateException ) {
this.reportFailedPredicate(recognizer, e);
} else {
console.log("unknown recognition error type: " + e.constructor.name);
console.log(e.stack);
recognizer.notifyErrorListeners(e.getOffendingToken(), e.getMessage(), e);
}
};
//
//
//
DefaultErrorStrategy.prototype.recover = function(recognizer, e) {
if (this.lastErrorIndex===recognizer.getInputStream().index &&
this.lastErrorStates !== null && this.lastErrorStates.indexOf(recognizer.state)>=0) {
recognizer.consume();
}
this.lastErrorIndex = recognizer._input.index;
if (this.lastErrorStates === null) {
this.lastErrorStates = [];
}
this.lastErrorStates.push(recognizer.state);
var followSet = this.getErrorRecoverySet(recognizer);
this.consumeUntil(recognizer, followSet);
};
//
//
//
//
//
//
//
//
//
//
//
DefaultErrorStrategy.prototype.sync = function(recognizer) {
if (this.inErrorRecoveryMode(recognizer)) {
return;
}
var s = recognizer._interp.atn.states[recognizer.state];
var la = recognizer.getTokenStream().LA(1);
var nextTokens = recognizer.atn.nextTokens(s);
if (nextTokens.contains(Token.EPSILON) || nextTokens.contains(la)) {
return;
}
switch (s.stateType) {
case ATNState.BLOCK_START:
case ATNState.STAR_BLOCK_START:
case ATNState.PLUS_BLOCK_START:
case ATNState.STAR_LOOP_ENTRY:
if( this.singleTokenDeletion(recognizer) !== null) {
return;
} else {
throw new InputMismatchException(recognizer);
}
break;
case ATNState.PLUS_LOOP_BACK:
case ATNState.STAR_LOOP_BACK:
this.reportUnwantedToken(recognizer);
var expecting = new IntervalSet();
expecting.addSet(recognizer.getExpectedTokens());
var whatFollowsLoopIterationOrRule = expecting.addSet(this.getErrorRecoverySet(recognizer));
this.consumeUntil(recognizer, whatFollowsLoopIterationOrRule);
break;
default:
}
};
//
//
//
DefaultErrorStrategy.prototype.reportNoViableAlternative = function(recognizer, e) {
var tokens = recognizer.getTokenStream();
var input;
if(tokens !== null) {
if (e.startToken.type===Token.EOF) {
input = "";
} else {
input = tokens.getText(new Interval(e.startToken.tokenIndex, e.offendingToken.tokenIndex));
}
} else {
input = "";
}
var msg = "no viable alternative at input " + this.escapeWSAndQuote(input);
recognizer.notifyErrorListeners(msg, e.offendingToken, e);
};
//
//
//
//
DefaultErrorStrategy.prototype.reportInputMismatch = function(recognizer, e) {
var msg = "mismatched input " + this.getTokenErrorDisplay(e.offendingToken) +
" expecting " + e.getExpectedTokens().toString(recognizer.literalNames, recognizer.symbolicNames);
recognizer.notifyErrorListeners(msg, e.offendingToken, e);
};
//
//
//
//
DefaultErrorStrategy.prototype.reportFailedPredicate = function(recognizer, e) {
var ruleName = recognizer.ruleNames[recognizer._ctx.ruleIndex];
var msg = "rule " + ruleName + " " + e.message;
recognizer.notifyErrorListeners(msg, e.offendingToken, e);
};
//
//
//
//
DefaultErrorStrategy.prototype.reportUnwantedToken = function(recognizer) {
if (this.inErrorRecoveryMode(recognizer)) {
return;
}
this.beginErrorCondition(recognizer);
var t = recognizer.getCurrentToken();
var tokenName = this.getTokenErrorDisplay(t);
var expecting = this.getExpectedTokens(recognizer);
var msg = "extraneous input " + tokenName + " expecting " +
expecting.toString(recognizer.literalNames, recognizer.symbolicNames);
recognizer.notifyErrorListeners(msg, t, null);
};
//
//
//
//
DefaultErrorStrategy.prototype.reportMissingToken = function(recognizer) {
if ( this.inErrorRecoveryMode(recognizer)) {
return;
}
this.beginErrorCondition(recognizer);
var t = recognizer.getCurrentToken();
var expecting = this.getExpectedTokens(recognizer);
var msg = "missing " + expecting.toString(recognizer.literalNames, recognizer.symbolicNames) +
" at " + this.getTokenErrorDisplay(t);
recognizer.notifyErrorListeners(msg, t, null);
};
//
//
//
//
//
//
//
//
//
//
//
//
//
DefaultErrorStrategy.prototype.recoverInline = function(recognizer) {
var matchedSymbol = this.singleTokenDeletion(recognizer);
if (matchedSymbol !== null) {
recognizer.consume();
return matchedSymbol;
}
if (this.singleTokenInsertion(recognizer)) {
return this.getMissingSymbol(recognizer);
}
throw new InputMismatchException(recognizer);
};
//
//
//
//
DefaultErrorStrategy.prototype.singleTokenInsertion = function(recognizer) {
var currentSymbolType = recognizer.getTokenStream().LA(1);
var atn = recognizer._interp.atn;
var currentState = atn.states[recognizer.state];
var next = currentState.transitions[0].target;
var expectingAtLL2 = atn.nextTokens(next, recognizer._ctx);
if (expectingAtLL2.contains(currentSymbolType) ){
this.reportMissingToken(recognizer);
return true;
} else {
return false;
}
};
//
//
//
DefaultErrorStrategy.prototype.singleTokenDeletion = function(recognizer) {
var nextTokenType = recognizer.getTokenStream().LA(2);
var expecting = this.getExpectedTokens(recognizer);
if (expecting.contains(nextTokenType)) {
this.reportUnwantedToken(recognizer);
recognizer.consume(); // simply delete extra token
var matchedSymbol = recognizer.getCurrentToken();
this.reportMatch(recognizer); // we know current token is correct
return matchedSymbol;
} else {
return null;
}
};
//
//
DefaultErrorStrategy.prototype.getMissingSymbol = function(recognizer) {
var currentSymbol = recognizer.getCurrentToken();
var expecting = this.getExpectedTokens(recognizer);
var expectedTokenType = expecting.first(); // get any element
var tokenText;
if (expectedTokenType===Token.EOF) {
tokenText = "";
} else {
tokenText = "";
}
var current = currentSymbol;
var lookback = recognizer.getTokenStream().LT(-1);
if (current.type===Token.EOF && lookback !== null) {
current = lookback;
}
return recognizer.getTokenFactory().create(current.source,
expectedTokenType, tokenText, Token.DEFAULT_CHANNEL,
-1, -1, current.line, current.column);
};
DefaultErrorStrategy.prototype.getExpectedTokens = function(recognizer) {
return recognizer.getExpectedTokens();
};
//
DefaultErrorStrategy.prototype.getTokenErrorDisplay = function(t) {
if (t === null) {
return "";
}
var s = t.text;
if (s === null) {
if (t.type===Token.EOF) {
s = "";
} else {
s = "<" + t.type + ">";
}
}
return this.escapeWSAndQuote(s);
};
DefaultErrorStrategy.prototype.escapeWSAndQuote = function(s) {
s = s.replace(/\n/g,"\\n");
s = s.replace(/\r/g,"\\r");
s = s.replace(/\t/g,"\\t");
return "'" + s + "'";
};
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
DefaultErrorStrategy.prototype.getErrorRecoverySet = function(recognizer) {
var atn = recognizer._interp.atn;
var ctx = recognizer._ctx;
var recoverSet = new IntervalSet();
while (ctx !== null && ctx.invokingState>=0) {
var invokingState = atn.states[ctx.invokingState];
var rt = invokingState.transitions[0];
var follow = atn.nextTokens(rt.followState);
recoverSet.addSet(follow);
ctx = ctx.parentCtx;
}
recoverSet.removeOne(Token.EPSILON);
return recoverSet;
};
DefaultErrorStrategy.prototype.consumeUntil = function(recognizer, set) {
var ttype = recognizer.getTokenStream().LA(1);
while( ttype !== Token.EOF && !set.contains(ttype)) {
recognizer.consume();
ttype = recognizer.getTokenStream().LA(1);
}
};
//
//
//
//
//
//
function BailErrorStrategy() {
DefaultErrorStrategy.call(this);
return this;
}
BailErrorStrategy.prototype = Object.create(DefaultErrorStrategy.prototype);
BailErrorStrategy.prototype.constructor = BailErrorStrategy;
//
BailErrorStrategy.prototype.recover = function(recognizer, e) {
var context = recognizer._ctx;
while (context !== null) {
context.exception = e;
context = context.parentCtx;
}
throw new ParseCancellationException(e);
};
//
BailErrorStrategy.prototype.recoverInline = function(recognizer) {
this.recover(recognizer, new InputMismatchException(recognizer));
};
BailErrorStrategy.prototype.sync = function(recognizer) {
};
exports.BailErrorStrategy = BailErrorStrategy;
exports.DefaultErrorStrategy = DefaultErrorStrategy;
},{"./../IntervalSet":12,"./../Token":20,"./../atn/ATNState":28,"./Errors":45}],45:[function(require,module,exports){
var PredicateTransition = require('./../atn/Transition').PredicateTransition;
function RecognitionException(params) {
Error.call(this);
if (!!Error.captureStackTrace) {
Error.captureStackTrace(this, RecognitionException);
} else {
var stack = new Error().stack;
}
this.message = params.message;
this.recognizer = params.recognizer;
this.input = params.input;
this.ctx = params.ctx;
this.offendingToken = null;
this.offendingState = -1;
if (this.recognizer!==null) {
this.offendingState = this.recognizer.state;
}
return this;
}
RecognitionException.prototype = Object.create(Error.prototype);
RecognitionException.prototype.constructor = RecognitionException;
//
//
//
RecognitionException.prototype.getExpectedTokens = function() {
if (this.recognizer!==null) {
return this.recognizer.atn.getExpectedTokens(this.offendingState, this.ctx);
} else {
return null;
}
};
RecognitionException.prototype.toString = function() {
return this.message;
};
function LexerNoViableAltException(lexer, input, startIndex, deadEndConfigs) {
RecognitionException.call(this, {message:"", recognizer:lexer, input:input, ctx:null});
this.startIndex = startIndex;
this.deadEndConfigs = deadEndConfigs;
return this;
}
LexerNoViableAltException.prototype = Object.create(RecognitionException.prototype);
LexerNoViableAltException.prototype.constructor = LexerNoViableAltException;
LexerNoViableAltException.prototype.toString = function() {
var symbol = "";
if (this.startIndex >= 0 && this.startIndex < this.input.size) {
symbol = this.input.getText((this.startIndex,this.startIndex));
}
return "LexerNoViableAltException" + symbol;
};
//
function NoViableAltException(recognizer, input, startToken, offendingToken, deadEndConfigs, ctx) {
ctx = ctx || recognizer._ctx;
offendingToken = offendingToken || recognizer.getCurrentToken();
startToken = startToken || recognizer.getCurrentToken();
input = input || recognizer.getInputStream();
RecognitionException.call(this, {message:"", recognizer:recognizer, input:input, ctx:ctx});
this.deadEndConfigs = deadEndConfigs;
this.startToken = startToken;
this.offendingToken = offendingToken;
}
NoViableAltException.prototype = Object.create(RecognitionException.prototype);
NoViableAltException.prototype.constructor = NoViableAltException;
//
function InputMismatchException(recognizer) {
RecognitionException.call(this, {message:"", recognizer:recognizer, input:recognizer.getInputStream(), ctx:recognizer._ctx});
this.offendingToken = recognizer.getCurrentToken();
}
InputMismatchException.prototype = Object.create(RecognitionException.prototype);
InputMismatchException.prototype.constructor = InputMismatchException;
function FailedPredicateException(recognizer, predicate, message) {
RecognitionException.call(this, {message:this.formatMessage(predicate,message || null), recognizer:recognizer,
input:recognizer.getInputStream(), ctx:recognizer._ctx});
var s = recognizer._interp.atn.states[recognizer.state];
var trans = s.transitions[0];
if (trans instanceof PredicateTransition) {
this.ruleIndex = trans.ruleIndex;
this.predicateIndex = trans.predIndex;
} else {
this.ruleIndex = 0;
this.predicateIndex = 0;
}
this.predicate = predicate;
this.offendingToken = recognizer.getCurrentToken();
return this;
}
FailedPredicateException.prototype = Object.create(RecognitionException.prototype);
FailedPredicateException.prototype.constructor = FailedPredicateException;
FailedPredicateException.prototype.formatMessage = function(predicate, message) {
if (message !==null) {
return message;
} else {
return "failed predicate: {" + predicate + "}?";
}
};
function ParseCancellationException() {
Error.call(this);
Error.captureStackTrace(this, ParseCancellationException);
return this;
}
ParseCancellationException.prototype = Object.create(Error.prototype);
ParseCancellationException.prototype.constructor = ParseCancellationException;
exports.RecognitionException = RecognitionException;
exports.NoViableAltException = NoViableAltException;
exports.LexerNoViableAltException = LexerNoViableAltException;
exports.InputMismatchException = InputMismatchException;
exports.FailedPredicateException = FailedPredicateException;
exports.ParseCancellationException = ParseCancellationException;
},{"./../atn/Transition":36}],46:[function(require,module,exports){
exports.RecognitionException = require('./Errors').RecognitionException;
exports.NoViableAltException = require('./Errors').NoViableAltException;
exports.LexerNoViableAltException = require('./Errors').LexerNoViableAltException;
exports.InputMismatchException = require('./Errors').InputMismatchException;
exports.FailedPredicateException = require('./Errors').FailedPredicateException;
exports.DiagnosticErrorListener = require('./DiagnosticErrorListener').DiagnosticErrorListener;
exports.BailErrorStrategy = require('./ErrorStrategy').BailErrorStrategy;
exports.ErrorListener = require('./ErrorListener').ErrorListener;
},{"./DiagnosticErrorListener":42,"./ErrorListener":43,"./ErrorStrategy":44,"./Errors":45}],47:[function(require,module,exports){
exports.atn = require('./atn/index');
exports.codepointat = require('./polyfills/codepointat');
exports.dfa = require('./dfa/index');
exports.fromcodepoint = require('./polyfills/fromcodepoint');
exports.tree = require('./tree/index');
exports.error = require('./error/index');
exports.Token = require('./Token').Token;
exports.CharStreams = require('./CharStreams').CharStreams;
exports.CommonToken = require('./Token').CommonToken;
exports.InputStream = require('./InputStream').InputStream;
exports.FileStream = require('./FileStream').FileStream;
exports.CommonTokenStream = require('./CommonTokenStream').CommonTokenStream;
exports.Lexer = require('./Lexer').Lexer;
exports.Parser = require('./Parser').Parser;
var pc = require('./PredictionContext');
exports.PredictionContextCache = pc.PredictionContextCache;
exports.ParserRuleContext = require('./ParserRuleContext').ParserRuleContext;
exports.Interval = require('./IntervalSet').Interval;
exports.Utils = require('./Utils');
},{"./CharStreams":7,"./CommonTokenStream":9,"./FileStream":10,"./InputStream":11,"./IntervalSet":12,"./Lexer":14,"./Parser":15,"./ParserRuleContext":16,"./PredictionContext":17,"./Token":20,"./Utils":21,"./atn/index":37,"./dfa/index":41,"./error/index":46,"./polyfills/codepointat":48,"./polyfills/fromcodepoint":49,"./tree/index":52}],48:[function(require,module,exports){
if (!String.prototype.codePointAt) {
(function() {
'use strict'; // needed to support `apply`/`call` with `undefined`/`null`
var defineProperty = (function() {
try {
var object = {};
var $defineProperty = Object.defineProperty;
var result = $defineProperty(object, object, object) && $defineProperty;
} catch(error) {}
return result;
}());
var codePointAt = function(position) {
if (this == null) {
throw TypeError();
}
var string = String(this);
var size = string.length;
var index = position ? Number(position) : 0;
if (index != index) { // better `isNaN`
index = 0;
}
if (index < 0 || index >= size) {
return undefined;
}
var first = string.charCodeAt(index);
var second;
if ( // check if it’s the start of a surrogate pair
first >= 0xD800 && first <= 0xDBFF && // high surrogate
size > index + 1 // there is a next code unit
) {
second = string.charCodeAt(index + 1);
if (second >= 0xDC00 && second <= 0xDFFF) { // low surrogate
return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;
}
}
return first;
};
if (defineProperty) {
defineProperty(String.prototype, 'codePointAt', {
'value': codePointAt,
'configurable': true,
'writable': true
});
} else {
String.prototype.codePointAt = codePointAt;
}
}());
}
},{}],49:[function(require,module,exports){
if (!String.fromCodePoint) {
(function() {
var defineProperty = (function() {
try {
var object = {};
var $defineProperty = Object.defineProperty;
var result = $defineProperty(object, object, object) && $defineProperty;
} catch(error) {}
return result;
}());
var stringFromCharCode = String.fromCharCode;
var floor = Math.floor;
var fromCodePoint = function(_) {
var MAX_SIZE = 0x4000;
var codeUnits = [];
var highSurrogate;
var lowSurrogate;
var index = -1;
var length = arguments.length;
if (!length) {
return '';
}
var result = '';
while (++index < length) {
var codePoint = Number(arguments[index]);
if (
!isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`
codePoint < 0 || // not a valid Unicode code point
codePoint > 0x10FFFF || // not a valid Unicode code point
floor(codePoint) != codePoint // not an integer
) {
throw RangeError('Invalid code point: ' + codePoint);
}
if (codePoint <= 0xFFFF) { // BMP code point
codeUnits.push(codePoint);
} else { // Astral code point; split in surrogate halves
codePoint -= 0x10000;
highSurrogate = (codePoint >> 10) + 0xD800;
lowSurrogate = (codePoint % 0x400) + 0xDC00;
codeUnits.push(highSurrogate, lowSurrogate);
}
if (index + 1 == length || codeUnits.length > MAX_SIZE) {
result += stringFromCharCode.apply(null, codeUnits);
codeUnits.length = 0;
}
}
return result;
};
if (defineProperty) {
defineProperty(String, 'fromCodePoint', {
'value': fromCodePoint,
'configurable': true,
'writable': true
});
} else {
String.fromCodePoint = fromCodePoint;
}
}());
}
},{}],50:[function(require,module,exports){
var Token = require('./../Token').Token;
var Interval = require('./../IntervalSet').Interval;
var INVALID_INTERVAL = new Interval(-1, -2);
var Utils = require('../Utils.js');
function Tree() {
return this;
}
function SyntaxTree() {
Tree.call(this);
return this;
}
SyntaxTree.prototype = Object.create(Tree.prototype);
SyntaxTree.prototype.constructor = SyntaxTree;
function ParseTree() {
SyntaxTree.call(this);
return this;
}
ParseTree.prototype = Object.create(SyntaxTree.prototype);
ParseTree.prototype.constructor = ParseTree;
function RuleNode() {
ParseTree.call(this);
return this;
}
RuleNode.prototype = Object.create(ParseTree.prototype);
RuleNode.prototype.constructor = RuleNode;
function TerminalNode() {
ParseTree.call(this);
return this;
}
TerminalNode.prototype = Object.create(ParseTree.prototype);
TerminalNode.prototype.constructor = TerminalNode;
function ErrorNode() {
TerminalNode.call(this);
return this;
}
ErrorNode.prototype = Object.create(TerminalNode.prototype);
ErrorNode.prototype.constructor = ErrorNode;
function ParseTreeVisitor() {
return this;
}
ParseTreeVisitor.prototype.visit = function(ctx) {
if (Array.isArray(ctx)) {
return ctx.map(function(child) {
return child.accept(this);
}, this);
} else {
return ctx.accept(this);
}
};
ParseTreeVisitor.prototype.visitChildren = function(ctx) {
return this.visit(ctx.children);
}
ParseTreeVisitor.prototype.visitTerminal = function(node) {
};
ParseTreeVisitor.prototype.visitErrorNode = function(node) {
};
function ParseTreeListener() {
return this;
}
ParseTreeListener.prototype.visitTerminal = function(node) {
};
ParseTreeListener.prototype.visitErrorNode = function(node) {
};
ParseTreeListener.prototype.enterEveryRule = function(node) {
};
ParseTreeListener.prototype.exitEveryRule = function(node) {
};
function TerminalNodeImpl(symbol) {
TerminalNode.call(this);
this.parentCtx = null;
this.symbol = symbol;
return this;
}
TerminalNodeImpl.prototype = Object.create(TerminalNode.prototype);
TerminalNodeImpl.prototype.constructor = TerminalNodeImpl;
TerminalNodeImpl.prototype.getChild = function(i) {
return null;
};
TerminalNodeImpl.prototype.getSymbol = function() {
return this.symbol;
};
TerminalNodeImpl.prototype.getParent = function() {
return this.parentCtx;
};
TerminalNodeImpl.prototype.getPayload = function() {
return this.symbol;
};
TerminalNodeImpl.prototype.getSourceInterval = function() {
if (this.symbol === null) {
return INVALID_INTERVAL;
}
var tokenIndex = this.symbol.tokenIndex;
return new Interval(tokenIndex, tokenIndex);
};
TerminalNodeImpl.prototype.getChildCount = function() {
return 0;
};
TerminalNodeImpl.prototype.accept = function(visitor) {
return visitor.visitTerminal(this);
};
TerminalNodeImpl.prototype.getText = function() {
return this.symbol.text;
};
TerminalNodeImpl.prototype.toString = function() {
if (this.symbol.type === Token.EOF) {
return "";
} else {
return this.symbol.text;
}
};
function ErrorNodeImpl(token) {
TerminalNodeImpl.call(this, token);
return this;
}
ErrorNodeImpl.prototype = Object.create(TerminalNodeImpl.prototype);
ErrorNodeImpl.prototype.constructor = ErrorNodeImpl;
ErrorNodeImpl.prototype.isErrorNode = function() {
return true;
};
ErrorNodeImpl.prototype.accept = function(visitor) {
return visitor.visitErrorNode(this);
};
function ParseTreeWalker() {
return this;
}
ParseTreeWalker.prototype.walk = function(listener, t) {
var errorNode = t instanceof ErrorNode ||
(t.isErrorNode !== undefined && t.isErrorNode());
if (errorNode) {
listener.visitErrorNode(t);
} else if (t instanceof TerminalNode) {
listener.visitTerminal(t);
} else {
this.enterRule(listener, t);
for (var i = 0; i < t.getChildCount(); i++) {
var child = t.getChild(i);
this.walk(listener, child);
}
this.exitRule(listener, t);
}
};
//
//
ParseTreeWalker.prototype.enterRule = function(listener, r) {
var ctx = r.getRuleContext();
listener.enterEveryRule(ctx);
ctx.enterRule(listener);
};
ParseTreeWalker.prototype.exitRule = function(listener, r) {
var ctx = r.getRuleContext();
ctx.exitRule(listener);
listener.exitEveryRule(ctx);
};
ParseTreeWalker.DEFAULT = new ParseTreeWalker();
exports.RuleNode = RuleNode;
exports.ErrorNode = ErrorNode;
exports.TerminalNode = TerminalNode;
exports.ErrorNodeImpl = ErrorNodeImpl;
exports.TerminalNodeImpl = TerminalNodeImpl;
exports.ParseTreeListener = ParseTreeListener;
exports.ParseTreeVisitor = ParseTreeVisitor;
exports.ParseTreeWalker = ParseTreeWalker;
exports.INVALID_INTERVAL = INVALID_INTERVAL;
},{"../Utils.js":21,"./../IntervalSet":12,"./../Token":20}],51:[function(require,module,exports){
var Utils = require('./../Utils');
var Token = require('./../Token').Token;
var RuleNode = require('./Tree').RuleNode;
var ErrorNode = require('./Tree').ErrorNode;
var TerminalNode = require('./Tree').TerminalNode;
var ParserRuleContext = require('./../ParserRuleContext').ParserRuleContext;
var RuleContext = require('./../RuleContext').RuleContext;
var INVALID_ALT_NUMBER = require('./../atn/ATN').INVALID_ALT_NUMBER;
function Trees() {
}
Trees.toStringTree = function(tree, ruleNames, recog) {
ruleNames = ruleNames || null;
recog = recog || null;
if(recog!==null) {
ruleNames = recog.ruleNames;
}
var s = Trees.getNodeText(tree, ruleNames);
s = Utils.escapeWhitespace(s, false);
var c = tree.getChildCount();
if(c===0) {
return s;
}
var res = "(" + s + ' ';
if(c>0) {
s = Trees.toStringTree(tree.getChild(0), ruleNames);
res = res.concat(s);
}
for(var i=1;i 0) {
throw new Error('Invalid string. Length must be a multiple of 4')
}
var len = b64.length
placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
arr = new Arr(b64.length * 3 / 4 - placeHolders)
l = placeHolders > 0 ? b64.length - 4 : b64.length
var L = 0
function push (v) {
arr[L++] = v
}
for (i = 0, j = 0; i < l; i += 4, j += 3) {
tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
push((tmp & 0xFF0000) >> 16)
push((tmp & 0xFF00) >> 8)
push(tmp & 0xFF)
}
if (placeHolders === 2) {
tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
push(tmp & 0xFF)
} else if (placeHolders === 1) {
tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
push((tmp >> 8) & 0xFF)
push(tmp & 0xFF)
}
return arr
}
function uint8ToBase64 (uint8) {
var i,
extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
output = "",
temp, length
function encode (num) {
return lookup.charAt(num)
}
function tripletToBase64 (num) {
return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
}
for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
output += tripletToBase64(temp)
}
switch (extraBytes) {
case 1:
temp = uint8[uint8.length - 1]
output += encode(temp >> 2)
output += encode((temp << 4) & 0x3F)
output += '=='
break
case 2:
temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
output += encode(temp >> 10)
output += encode((temp >> 4) & 0x3F)
output += encode((temp << 2) & 0x3F)
output += '='
break
}
return output
}
exports.toByteArray = b64ToByteArray
exports.fromByteArray = uint8ToBase64
}(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
},{}],54:[function(require,module,exports){
},{}],55:[function(require,module,exports){
arguments[4][54][0].apply(exports,arguments)
},{"dup":54}],56:[function(require,module,exports){
(function (global){
'use strict'
var base64 = require('base64-js')
var ieee754 = require('ieee754')
var isArray = require('isarray')
exports.Buffer = Buffer
exports.SlowBuffer = SlowBuffer
exports.INSPECT_MAX_BYTES = 50
Buffer.poolSize = 8192 // not used by this implementation
var rootParent = {}
Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined
? global.TYPED_ARRAY_SUPPORT
: typedArraySupport()
function typedArraySupport () {
function Bar () {}
try {
var arr = new Uint8Array(1)
arr.foo = function () { return 42 }
arr.constructor = Bar
return arr.foo() === 42 && // typed array instances can be augmented
arr.constructor === Bar && // constructor can be set
typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
} catch (e) {
return false
}
}
function kMaxLength () {
return Buffer.TYPED_ARRAY_SUPPORT
? 0x7fffffff
: 0x3fffffff
}
function Buffer (arg) {
if (!(this instanceof Buffer)) {
if (arguments.length > 1) return new Buffer(arg, arguments[1])
return new Buffer(arg)
}
if (!Buffer.TYPED_ARRAY_SUPPORT) {
this.length = 0
this.parent = undefined
}
if (typeof arg === 'number') {
return fromNumber(this, arg)
}
if (typeof arg === 'string') {
return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
}
return fromObject(this, arg)
}
function fromNumber (that, length) {
that = allocate(that, length < 0 ? 0 : checked(length) | 0)
if (!Buffer.TYPED_ARRAY_SUPPORT) {
for (var i = 0; i < length; i++) {
that[i] = 0
}
}
return that
}
function fromString (that, string, encoding) {
if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
var length = byteLength(string, encoding) | 0
that = allocate(that, length)
that.write(string, encoding)
return that
}
function fromObject (that, object) {
if (Buffer.isBuffer(object)) return fromBuffer(that, object)
if (isArray(object)) return fromArray(that, object)
if (object == null) {
throw new TypeError('must start with number, buffer, array or string')
}
if (typeof ArrayBuffer !== 'undefined') {
if (object.buffer instanceof ArrayBuffer) {
return fromTypedArray(that, object)
}
if (object instanceof ArrayBuffer) {
return fromArrayBuffer(that, object)
}
}
if (object.length) return fromArrayLike(that, object)
return fromJsonObject(that, object)
}
function fromBuffer (that, buffer) {
var length = checked(buffer.length) | 0
that = allocate(that, length)
buffer.copy(that, 0, 0, length)
return that
}
function fromArray (that, array) {
var length = checked(array.length) | 0
that = allocate(that, length)
for (var i = 0; i < length; i += 1) {
that[i] = array[i] & 255
}
return that
}
function fromTypedArray (that, array) {
var length = checked(array.length) | 0
that = allocate(that, length)
for (var i = 0; i < length; i += 1) {
that[i] = array[i] & 255
}
return that
}
function fromArrayBuffer (that, array) {
if (Buffer.TYPED_ARRAY_SUPPORT) {
array.byteLength
that = Buffer._augment(new Uint8Array(array))
} else {
that = fromTypedArray(that, new Uint8Array(array))
}
return that
}
function fromArrayLike (that, array) {
var length = checked(array.length) | 0
that = allocate(that, length)
for (var i = 0; i < length; i += 1) {
that[i] = array[i] & 255
}
return that
}
function fromJsonObject (that, object) {
var array
var length = 0
if (object.type === 'Buffer' && isArray(object.data)) {
array = object.data
length = checked(array.length) | 0
}
that = allocate(that, length)
for (var i = 0; i < length; i += 1) {
that[i] = array[i] & 255
}
return that
}
if (Buffer.TYPED_ARRAY_SUPPORT) {
Buffer.prototype.__proto__ = Uint8Array.prototype
Buffer.__proto__ = Uint8Array
} else {
Buffer.prototype.length = undefined
Buffer.prototype.parent = undefined
}
function allocate (that, length) {
if (Buffer.TYPED_ARRAY_SUPPORT) {
that = Buffer._augment(new Uint8Array(length))
that.__proto__ = Buffer.prototype
} else {
that.length = length
that._isBuffer = true
}
var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
if (fromPool) that.parent = rootParent
return that
}
function checked (length) {
if (length >= kMaxLength()) {
throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
'size: 0x' + kMaxLength().toString(16) + ' bytes')
}
return length | 0
}
function SlowBuffer (subject, encoding) {
if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
var buf = new Buffer(subject, encoding)
delete buf.parent
return buf
}
Buffer.isBuffer = function isBuffer (b) {
return !!(b != null && b._isBuffer)
}
Buffer.compare = function compare (a, b) {
if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
throw new TypeError('Arguments must be Buffers')
}
if (a === b) return 0
var x = a.length
var y = b.length
var i = 0
var len = Math.min(x, y)
while (i < len) {
if (a[i] !== b[i]) break
++i
}
if (i !== len) {
x = a[i]
y = b[i]
}
if (x < y) return -1
if (y < x) return 1
return 0
}
Buffer.isEncoding = function isEncoding (encoding) {
switch (String(encoding).toLowerCase()) {
case 'hex':
case 'utf8':
case 'utf-8':
case 'ascii':
case 'binary':
case 'base64':
case 'raw':
case 'ucs2':
case 'ucs-2':
case 'utf16le':
case 'utf-16le':
return true
default:
return false
}
}
Buffer.concat = function concat (list, length) {
if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
if (list.length === 0) {
return new Buffer(0)
}
var i
if (length === undefined) {
length = 0
for (i = 0; i < list.length; i++) {
length += list[i].length
}
}
var buf = new Buffer(length)
var pos = 0
for (i = 0; i < list.length; i++) {
var item = list[i]
item.copy(buf, pos)
pos += item.length
}
return buf
}
function byteLength (string, encoding) {
if (typeof string !== 'string') string = '' + string
var len = string.length
if (len === 0) return 0
var loweredCase = false
for (;;) {
switch (encoding) {
case 'ascii':
case 'binary':
case 'raw':
case 'raws':
return len
case 'utf8':
case 'utf-8':
return utf8ToBytes(string).length
case 'ucs2':
case 'ucs-2':
case 'utf16le':
case 'utf-16le':
return len * 2
case 'hex':
return len >>> 1
case 'base64':
return base64ToBytes(string).length
default:
if (loweredCase) return utf8ToBytes(string).length // assume utf8
encoding = ('' + encoding).toLowerCase()
loweredCase = true
}
}
}
Buffer.byteLength = byteLength
function slowToString (encoding, start, end) {
var loweredCase = false
start = start | 0
end = end === undefined || end === Infinity ? this.length : end | 0
if (!encoding) encoding = 'utf8'
if (start < 0) start = 0
if (end > this.length) end = this.length
if (end <= start) return ''
while (true) {
switch (encoding) {
case 'hex':
return hexSlice(this, start, end)
case 'utf8':
case 'utf-8':
return utf8Slice(this, start, end)
case 'ascii':
return asciiSlice(this, start, end)
case 'binary':
return binarySlice(this, start, end)
case 'base64':
return base64Slice(this, start, end)
case 'ucs2':
case 'ucs-2':
case 'utf16le':
case 'utf-16le':
return utf16leSlice(this, start, end)
default:
if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
encoding = (encoding + '').toLowerCase()
loweredCase = true
}
}
}
Buffer.prototype.toString = function toString () {
var length = this.length | 0
if (length === 0) return ''
if (arguments.length === 0) return utf8Slice(this, 0, length)
return slowToString.apply(this, arguments)
}
Buffer.prototype.equals = function equals (b) {
if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
if (this === b) return true
return Buffer.compare(this, b) === 0
}
Buffer.prototype.inspect = function inspect () {
var str = ''
var max = exports.INSPECT_MAX_BYTES
if (this.length > 0) {
str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
if (this.length > max) str += ' ... '
}
return ''
}
Buffer.prototype.compare = function compare (b) {
if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
if (this === b) return 0
return Buffer.compare(this, b)
}
Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
else if (byteOffset < -0x80000000) byteOffset = -0x80000000
byteOffset >>= 0
if (this.length === 0) return -1
if (byteOffset >= this.length) return -1
if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
if (typeof val === 'string') {
if (val.length === 0) return -1 // special case: looking for empty string always fails
return String.prototype.indexOf.call(this, val, byteOffset)
}
if (Buffer.isBuffer(val)) {
return arrayIndexOf(this, val, byteOffset)
}
if (typeof val === 'number') {
if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
}
return arrayIndexOf(this, [ val ], byteOffset)
}
function arrayIndexOf (arr, val, byteOffset) {
var foundIndex = -1
for (var i = 0; byteOffset + i < arr.length; i++) {
if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
if (foundIndex === -1) foundIndex = i
if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
} else {
foundIndex = -1
}
}
return -1
}
throw new TypeError('val must be string, number or Buffer')
}
Buffer.prototype.get = function get (offset) {
console.log('.get() is deprecated. Access using array indexes instead.')
return this.readUInt8(offset)
}
Buffer.prototype.set = function set (v, offset) {
console.log('.set() is deprecated. Access using array indexes instead.')
return this.writeUInt8(v, offset)
}
function hexWrite (buf, string, offset, length) {
offset = Number(offset) || 0
var remaining = buf.length - offset
if (!length) {
length = remaining
} else {
length = Number(length)
if (length > remaining) {
length = remaining
}
}
var strLen = string.length
if (strLen % 2 !== 0) throw new Error('Invalid hex string')
if (length > strLen / 2) {
length = strLen / 2
}
for (var i = 0; i < length; i++) {
var parsed = parseInt(string.substr(i * 2, 2), 16)
if (isNaN(parsed)) throw new Error('Invalid hex string')
buf[offset + i] = parsed
}
return i
}
function utf8Write (buf, string, offset, length) {
return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
}
function asciiWrite (buf, string, offset, length) {
return blitBuffer(asciiToBytes(string), buf, offset, length)
}
function binaryWrite (buf, string, offset, length) {
return asciiWrite(buf, string, offset, length)
}
function base64Write (buf, string, offset, length) {
return blitBuffer(base64ToBytes(string), buf, offset, length)
}
function ucs2Write (buf, string, offset, length) {
return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
}
Buffer.prototype.write = function write (string, offset, length, encoding) {
if (offset === undefined) {
encoding = 'utf8'
length = this.length
offset = 0
} else if (length === undefined && typeof offset === 'string') {
encoding = offset
length = this.length
offset = 0
} else if (isFinite(offset)) {
offset = offset | 0
if (isFinite(length)) {
length = length | 0
if (encoding === undefined) encoding = 'utf8'
} else {
encoding = length
length = undefined
}
} else {
var swap = encoding
encoding = offset
offset = length | 0
length = swap
}
var remaining = this.length - offset
if (length === undefined || length > remaining) length = remaining
if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
throw new RangeError('attempt to write outside buffer bounds')
}
if (!encoding) encoding = 'utf8'
var loweredCase = false
for (;;) {
switch (encoding) {
case 'hex':
return hexWrite(this, string, offset, length)
case 'utf8':
case 'utf-8':
return utf8Write(this, string, offset, length)
case 'ascii':
return asciiWrite(this, string, offset, length)
case 'binary':
return binaryWrite(this, string, offset, length)
case 'base64':
return base64Write(this, string, offset, length)
case 'ucs2':
case 'ucs-2':
case 'utf16le':
case 'utf-16le':
return ucs2Write(this, string, offset, length)
default:
if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
encoding = ('' + encoding).toLowerCase()
loweredCase = true
}
}
}
Buffer.prototype.toJSON = function toJSON () {
return {
type: 'Buffer',
data: Array.prototype.slice.call(this._arr || this, 0)
}
}
function base64Slice (buf, start, end) {
if (start === 0 && end === buf.length) {
return base64.fromByteArray(buf)
} else {
return base64.fromByteArray(buf.slice(start, end))
}
}
function utf8Slice (buf, start, end) {
end = Math.min(buf.length, end)
var res = []
var i = start
while (i < end) {
var firstByte = buf[i]
var codePoint = null
var bytesPerSequence = (firstByte > 0xEF) ? 4
: (firstByte > 0xDF) ? 3
: (firstByte > 0xBF) ? 2
: 1
if (i + bytesPerSequence <= end) {
var secondByte, thirdByte, fourthByte, tempCodePoint
switch (bytesPerSequence) {
case 1:
if (firstByte < 0x80) {
codePoint = firstByte
}
break
case 2:
secondByte = buf[i + 1]
if ((secondByte & 0xC0) === 0x80) {
tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
if (tempCodePoint > 0x7F) {
codePoint = tempCodePoint
}
}
break
case 3:
secondByte = buf[i + 1]
thirdByte = buf[i + 2]
if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
codePoint = tempCodePoint
}
}
break
case 4:
secondByte = buf[i + 1]
thirdByte = buf[i + 2]
fourthByte = buf[i + 3]
if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
codePoint = tempCodePoint
}
}
}
}
if (codePoint === null) {
codePoint = 0xFFFD
bytesPerSequence = 1
} else if (codePoint > 0xFFFF) {
codePoint -= 0x10000
res.push(codePoint >>> 10 & 0x3FF | 0xD800)
codePoint = 0xDC00 | codePoint & 0x3FF
}
res.push(codePoint)
i += bytesPerSequence
}
return decodeCodePointsArray(res)
}
var MAX_ARGUMENTS_LENGTH = 0x1000
function decodeCodePointsArray (codePoints) {
var len = codePoints.length
if (len <= MAX_ARGUMENTS_LENGTH) {
return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
}
var res = ''
var i = 0
while (i < len) {
res += String.fromCharCode.apply(
String,
codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
)
}
return res
}
function asciiSlice (buf, start, end) {
var ret = ''
end = Math.min(buf.length, end)
for (var i = start; i < end; i++) {
ret += String.fromCharCode(buf[i] & 0x7F)
}
return ret
}
function binarySlice (buf, start, end) {
var ret = ''
end = Math.min(buf.length, end)
for (var i = start; i < end; i++) {
ret += String.fromCharCode(buf[i])
}
return ret
}
function hexSlice (buf, start, end) {
var len = buf.length
if (!start || start < 0) start = 0
if (!end || end < 0 || end > len) end = len
var out = ''
for (var i = start; i < end; i++) {
out += toHex(buf[i])
}
return out
}
function utf16leSlice (buf, start, end) {
var bytes = buf.slice(start, end)
var res = ''
for (var i = 0; i < bytes.length; i += 2) {
res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
}
return res
}
Buffer.prototype.slice = function slice (start, end) {
var len = this.length
start = ~~start
end = end === undefined ? len : ~~end
if (start < 0) {
start += len
if (start < 0) start = 0
} else if (start > len) {
start = len
}
if (end < 0) {
end += len
if (end < 0) end = 0
} else if (end > len) {
end = len
}
if (end < start) end = start
var newBuf
if (Buffer.TYPED_ARRAY_SUPPORT) {
newBuf = Buffer._augment(this.subarray(start, end))
} else {
var sliceLen = end - start
newBuf = new Buffer(sliceLen, undefined)
for (var i = 0; i < sliceLen; i++) {
newBuf[i] = this[i + start]
}
}
if (newBuf.length) newBuf.parent = this.parent || this
return newBuf
}
function checkOffset (offset, ext, length) {
if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
}
Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
offset = offset | 0
byteLength = byteLength | 0
if (!noAssert) checkOffset(offset, byteLength, this.length)
var val = this[offset]
var mul = 1
var i = 0
while (++i < byteLength && (mul *= 0x100)) {
val += this[offset + i] * mul
}
return val
}
Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
offset = offset | 0
byteLength = byteLength | 0
if (!noAssert) {
checkOffset(offset, byteLength, this.length)
}
var val = this[offset + --byteLength]
var mul = 1
while (byteLength > 0 && (mul *= 0x100)) {
val += this[offset + --byteLength] * mul
}
return val
}
Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
if (!noAssert) checkOffset(offset, 1, this.length)
return this[offset]
}
Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
if (!noAssert) checkOffset(offset, 2, this.length)
return this[offset] | (this[offset + 1] << 8)
}
Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
if (!noAssert) checkOffset(offset, 2, this.length)
return (this[offset] << 8) | this[offset + 1]
}
Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
if (!noAssert) checkOffset(offset, 4, this.length)
return ((this[offset]) |
(this[offset + 1] << 8) |
(this[offset + 2] << 16)) +
(this[offset + 3] * 0x1000000)
}
Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
if (!noAssert) checkOffset(offset, 4, this.length)
return (this[offset] * 0x1000000) +
((this[offset + 1] << 16) |
(this[offset + 2] << 8) |
this[offset + 3])
}
Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
offset = offset | 0
byteLength = byteLength | 0
if (!noAssert) checkOffset(offset, byteLength, this.length)
var val = this[offset]
var mul = 1
var i = 0
while (++i < byteLength && (mul *= 0x100)) {
val += this[offset + i] * mul
}
mul *= 0x80
if (val >= mul) val -= Math.pow(2, 8 * byteLength)
return val
}
Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
offset = offset | 0
byteLength = byteLength | 0
if (!noAssert) checkOffset(offset, byteLength, this.length)
var i = byteLength
var mul = 1
var val = this[offset + --i]
while (i > 0 && (mul *= 0x100)) {
val += this[offset + --i] * mul
}
mul *= 0x80
if (val >= mul) val -= Math.pow(2, 8 * byteLength)
return val
}
Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
if (!noAssert) checkOffset(offset, 1, this.length)
if (!(this[offset] & 0x80)) return (this[offset])
return ((0xff - this[offset] + 1) * -1)
}
Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
if (!noAssert) checkOffset(offset, 2, this.length)
var val = this[offset] | (this[offset + 1] << 8)
return (val & 0x8000) ? val | 0xFFFF0000 : val
}
Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
if (!noAssert) checkOffset(offset, 2, this.length)
var val = this[offset + 1] | (this[offset] << 8)
return (val & 0x8000) ? val | 0xFFFF0000 : val
}
Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
if (!noAssert) checkOffset(offset, 4, this.length)
return (this[offset]) |
(this[offset + 1] << 8) |
(this[offset + 2] << 16) |
(this[offset + 3] << 24)
}
Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
if (!noAssert) checkOffset(offset, 4, this.length)
return (this[offset] << 24) |
(this[offset + 1] << 16) |
(this[offset + 2] << 8) |
(this[offset + 3])
}
Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
if (!noAssert) checkOffset(offset, 4, this.length)
return ieee754.read(this, offset, true, 23, 4)
}
Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
if (!noAssert) checkOffset(offset, 4, this.length)
return ieee754.read(this, offset, false, 23, 4)
}
Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
if (!noAssert) checkOffset(offset, 8, this.length)
return ieee754.read(this, offset, true, 52, 8)
}
Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
if (!noAssert) checkOffset(offset, 8, this.length)
return ieee754.read(this, offset, false, 52, 8)
}
function checkInt (buf, value, offset, ext, max, min) {
if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
if (value > max || value < min) throw new RangeError('value is out of bounds')
if (offset + ext > buf.length) throw new RangeError('index out of range')
}
Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
value = +value
offset = offset | 0
byteLength = byteLength | 0
if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
var mul = 1
var i = 0
this[offset] = value & 0xFF
while (++i < byteLength && (mul *= 0x100)) {
this[offset + i] = (value / mul) & 0xFF
}
return offset + byteLength
}
Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
value = +value
offset = offset | 0
byteLength = byteLength | 0
if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
var i = byteLength - 1
var mul = 1
this[offset + i] = value & 0xFF
while (--i >= 0 && (mul *= 0x100)) {
this[offset + i] = (value / mul) & 0xFF
}
return offset + byteLength
}
Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
value = +value
offset = offset | 0
if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
this[offset] = (value & 0xff)
return offset + 1
}
function objectWriteUInt16 (buf, value, offset, littleEndian) {
if (value < 0) value = 0xffff + value + 1
for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
(littleEndian ? i : 1 - i) * 8
}
}
Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
value = +value
offset = offset | 0
if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
if (Buffer.TYPED_ARRAY_SUPPORT) {
this[offset] = (value & 0xff)
this[offset + 1] = (value >>> 8)
} else {
objectWriteUInt16(this, value, offset, true)
}
return offset + 2
}
Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
value = +value
offset = offset | 0
if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
if (Buffer.TYPED_ARRAY_SUPPORT) {
this[offset] = (value >>> 8)
this[offset + 1] = (value & 0xff)
} else {
objectWriteUInt16(this, value, offset, false)
}
return offset + 2
}
function objectWriteUInt32 (buf, value, offset, littleEndian) {
if (value < 0) value = 0xffffffff + value + 1
for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
}
}
Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
value = +value
offset = offset | 0
if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
if (Buffer.TYPED_ARRAY_SUPPORT) {
this[offset + 3] = (value >>> 24)
this[offset + 2] = (value >>> 16)
this[offset + 1] = (value >>> 8)
this[offset] = (value & 0xff)
} else {
objectWriteUInt32(this, value, offset, true)
}
return offset + 4
}
Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
value = +value
offset = offset | 0
if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
if (Buffer.TYPED_ARRAY_SUPPORT) {
this[offset] = (value >>> 24)
this[offset + 1] = (value >>> 16)
this[offset + 2] = (value >>> 8)
this[offset + 3] = (value & 0xff)
} else {
objectWriteUInt32(this, value, offset, false)
}
return offset + 4
}
Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
value = +value
offset = offset | 0
if (!noAssert) {
var limit = Math.pow(2, 8 * byteLength - 1)
checkInt(this, value, offset, byteLength, limit - 1, -limit)
}
var i = 0
var mul = 1
var sub = value < 0 ? 1 : 0
this[offset] = value & 0xFF
while (++i < byteLength && (mul *= 0x100)) {
this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
}
return offset + byteLength
}
Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
value = +value
offset = offset | 0
if (!noAssert) {
var limit = Math.pow(2, 8 * byteLength - 1)
checkInt(this, value, offset, byteLength, limit - 1, -limit)
}
var i = byteLength - 1
var mul = 1
var sub = value < 0 ? 1 : 0
this[offset + i] = value & 0xFF
while (--i >= 0 && (mul *= 0x100)) {
this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
}
return offset + byteLength
}
Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
value = +value
offset = offset | 0
if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
if (value < 0) value = 0xff + value + 1
this[offset] = (value & 0xff)
return offset + 1
}
Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
value = +value
offset = offset | 0
if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
if (Buffer.TYPED_ARRAY_SUPPORT) {
this[offset] = (value & 0xff)
this[offset + 1] = (value >>> 8)
} else {
objectWriteUInt16(this, value, offset, true)
}
return offset + 2
}
Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
value = +value
offset = offset | 0
if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
if (Buffer.TYPED_ARRAY_SUPPORT) {
this[offset] = (value >>> 8)
this[offset + 1] = (value & 0xff)
} else {
objectWriteUInt16(this, value, offset, false)
}
return offset + 2
}
Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
value = +value
offset = offset | 0
if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
if (Buffer.TYPED_ARRAY_SUPPORT) {
this[offset] = (value & 0xff)
this[offset + 1] = (value >>> 8)
this[offset + 2] = (value >>> 16)
this[offset + 3] = (value >>> 24)
} else {
objectWriteUInt32(this, value, offset, true)
}
return offset + 4
}
Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
value = +value
offset = offset | 0
if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
if (value < 0) value = 0xffffffff + value + 1
if (Buffer.TYPED_ARRAY_SUPPORT) {
this[offset] = (value >>> 24)
this[offset + 1] = (value >>> 16)
this[offset + 2] = (value >>> 8)
this[offset + 3] = (value & 0xff)
} else {
objectWriteUInt32(this, value, offset, false)
}
return offset + 4
}
function checkIEEE754 (buf, value, offset, ext, max, min) {
if (value > max || value < min) throw new RangeError('value is out of bounds')
if (offset + ext > buf.length) throw new RangeError('index out of range')
if (offset < 0) throw new RangeError('index out of range')
}
function writeFloat (buf, value, offset, littleEndian, noAssert) {
if (!noAssert) {
checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
}
ieee754.write(buf, value, offset, littleEndian, 23, 4)
return offset + 4
}
Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
return writeFloat(this, value, offset, true, noAssert)
}
Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
return writeFloat(this, value, offset, false, noAssert)
}
function writeDouble (buf, value, offset, littleEndian, noAssert) {
if (!noAssert) {
checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
}
ieee754.write(buf, value, offset, littleEndian, 52, 8)
return offset + 8
}
Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
return writeDouble(this, value, offset, true, noAssert)
}
Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
return writeDouble(this, value, offset, false, noAssert)
}
Buffer.prototype.copy = function copy (target, targetStart, start, end) {
if (!start) start = 0
if (!end && end !== 0) end = this.length
if (targetStart >= target.length) targetStart = target.length
if (!targetStart) targetStart = 0
if (end > 0 && end < start) end = start
if (end === start) return 0
if (target.length === 0 || this.length === 0) return 0
if (targetStart < 0) {
throw new RangeError('targetStart out of bounds')
}
if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
if (end < 0) throw new RangeError('sourceEnd out of bounds')
if (end > this.length) end = this.length
if (target.length - targetStart < end - start) {
end = target.length - targetStart + start
}
var len = end - start
var i
if (this === target && start < targetStart && targetStart < end) {
for (i = len - 1; i >= 0; i--) {
target[i + targetStart] = this[i + start]
}
} else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
for (i = 0; i < len; i++) {
target[i + targetStart] = this[i + start]
}
} else {
target._set(this.subarray(start, start + len), targetStart)
}
return len
}
Buffer.prototype.fill = function fill (value, start, end) {
if (!value) value = 0
if (!start) start = 0
if (!end) end = this.length
if (end < start) throw new RangeError('end < start')
if (end === start) return
if (this.length === 0) return
if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
var i
if (typeof value === 'number') {
for (i = start; i < end; i++) {
this[i] = value
}
} else {
var bytes = utf8ToBytes(value.toString())
var len = bytes.length
for (i = start; i < end; i++) {
this[i] = bytes[i % len]
}
}
return this
}
Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
if (typeof Uint8Array !== 'undefined') {
if (Buffer.TYPED_ARRAY_SUPPORT) {
return (new Buffer(this)).buffer
} else {
var buf = new Uint8Array(this.length)
for (var i = 0, len = buf.length; i < len; i += 1) {
buf[i] = this[i]
}
return buf.buffer
}
} else {
throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
}
}
var BP = Buffer.prototype
Buffer._augment = function _augment (arr) {
arr.constructor = Buffer
arr._isBuffer = true
arr._set = arr.set
arr.get = BP.get
arr.set = BP.set
arr.write = BP.write
arr.toString = BP.toString
arr.toLocaleString = BP.toString
arr.toJSON = BP.toJSON
arr.equals = BP.equals
arr.compare = BP.compare
arr.indexOf = BP.indexOf
arr.copy = BP.copy
arr.slice = BP.slice
arr.readUIntLE = BP.readUIntLE
arr.readUIntBE = BP.readUIntBE
arr.readUInt8 = BP.readUInt8
arr.readUInt16LE = BP.readUInt16LE
arr.readUInt16BE = BP.readUInt16BE
arr.readUInt32LE = BP.readUInt32LE
arr.readUInt32BE = BP.readUInt32BE
arr.readIntLE = BP.readIntLE
arr.readIntBE = BP.readIntBE
arr.readInt8 = BP.readInt8
arr.readInt16LE = BP.readInt16LE
arr.readInt16BE = BP.readInt16BE
arr.readInt32LE = BP.readInt32LE
arr.readInt32BE = BP.readInt32BE
arr.readFloatLE = BP.readFloatLE
arr.readFloatBE = BP.readFloatBE
arr.readDoubleLE = BP.readDoubleLE
arr.readDoubleBE = BP.readDoubleBE
arr.writeUInt8 = BP.writeUInt8
arr.writeUIntLE = BP.writeUIntLE
arr.writeUIntBE = BP.writeUIntBE
arr.writeUInt16LE = BP.writeUInt16LE
arr.writeUInt16BE = BP.writeUInt16BE
arr.writeUInt32LE = BP.writeUInt32LE
arr.writeUInt32BE = BP.writeUInt32BE
arr.writeIntLE = BP.writeIntLE
arr.writeIntBE = BP.writeIntBE
arr.writeInt8 = BP.writeInt8
arr.writeInt16LE = BP.writeInt16LE
arr.writeInt16BE = BP.writeInt16BE
arr.writeInt32LE = BP.writeInt32LE
arr.writeInt32BE = BP.writeInt32BE
arr.writeFloatLE = BP.writeFloatLE
arr.writeFloatBE = BP.writeFloatBE
arr.writeDoubleLE = BP.writeDoubleLE
arr.writeDoubleBE = BP.writeDoubleBE
arr.fill = BP.fill
arr.inspect = BP.inspect
arr.toArrayBuffer = BP.toArrayBuffer
return arr
}
var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
function base64clean (str) {
str = stringtrim(str).replace(INVALID_BASE64_RE, '')
if (str.length < 2) return ''
while (str.length % 4 !== 0) {
str = str + '='
}
return str
}
function stringtrim (str) {
if (str.trim) return str.trim()
return str.replace(/^\s+|\s+$/g, '')
}
function toHex (n) {
if (n < 16) return '0' + n.toString(16)
return n.toString(16)
}
function utf8ToBytes (string, units) {
units = units || Infinity
var codePoint
var length = string.length
var leadSurrogate = null
var bytes = []
for (var i = 0; i < length; i++) {
codePoint = string.charCodeAt(i)
if (codePoint > 0xD7FF && codePoint < 0xE000) {
if (!leadSurrogate) {
if (codePoint > 0xDBFF) {
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
continue
} else if (i + 1 === length) {
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
continue
}
leadSurrogate = codePoint
continue
}
if (codePoint < 0xDC00) {
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
leadSurrogate = codePoint
continue
}
codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
} else if (leadSurrogate) {
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
}
leadSurrogate = null
if (codePoint < 0x80) {
if ((units -= 1) < 0) break
bytes.push(codePoint)
} else if (codePoint < 0x800) {
if ((units -= 2) < 0) break
bytes.push(
codePoint >> 0x6 | 0xC0,
codePoint & 0x3F | 0x80
)
} else if (codePoint < 0x10000) {
if ((units -= 3) < 0) break
bytes.push(
codePoint >> 0xC | 0xE0,
codePoint >> 0x6 & 0x3F | 0x80,
codePoint & 0x3F | 0x80
)
} else if (codePoint < 0x110000) {
if ((units -= 4) < 0) break
bytes.push(
codePoint >> 0x12 | 0xF0,
codePoint >> 0xC & 0x3F | 0x80,
codePoint >> 0x6 & 0x3F | 0x80,
codePoint & 0x3F | 0x80
)
} else {
throw new Error('Invalid code point')
}
}
return bytes
}
function asciiToBytes (str) {
var byteArray = []
for (var i = 0; i < str.length; i++) {
byteArray.push(str.charCodeAt(i) & 0xFF)
}
return byteArray
}
function utf16leToBytes (str, units) {
var c, hi, lo
var byteArray = []
for (var i = 0; i < str.length; i++) {
if ((units -= 2) < 0) break
c = str.charCodeAt(i)
hi = c >> 8
lo = c % 256
byteArray.push(lo)
byteArray.push(hi)
}
return byteArray
}
function base64ToBytes (str) {
return base64.toByteArray(base64clean(str))
}
function blitBuffer (src, dst, offset, length) {
for (var i = 0; i < length; i++) {
if ((i + offset >= dst.length) || (i >= src.length)) break
dst[i + offset] = src[i]
}
return i
}
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{"base64-js":53,"ieee754":60,"isarray":57}],57:[function(require,module,exports){
var toString = {}.toString;
module.exports = Array.isArray || function (arr) {
return toString.call(arr) == '[object Array]';
};
},{}],58:[function(require,module,exports){
(function (Buffer){
//
//
//
function isArray(arg) {
if (Array.isArray) {
return Array.isArray(arg);
}
return objectToString(arg) === '[object Array]';
}
exports.isArray = isArray;
function isBoolean(arg) {
return typeof arg === 'boolean';
}
exports.isBoolean = isBoolean;
function isNull(arg) {
return arg === null;
}
exports.isNull = isNull;
function isNullOrUndefined(arg) {
return arg == null;
}
exports.isNullOrUndefined = isNullOrUndefined;
function isNumber(arg) {
return typeof arg === 'number';
}
exports.isNumber = isNumber;
function isString(arg) {
return typeof arg === 'string';
}
exports.isString = isString;
function isSymbol(arg) {
return typeof arg === 'symbol';
}
exports.isSymbol = isSymbol;
function isUndefined(arg) {
return arg === void 0;
}
exports.isUndefined = isUndefined;
function isRegExp(re) {
return objectToString(re) === '[object RegExp]';
}
exports.isRegExp = isRegExp;
function isObject(arg) {
return typeof arg === 'object' && arg !== null;
}
exports.isObject = isObject;
function isDate(d) {
return objectToString(d) === '[object Date]';
}
exports.isDate = isDate;
function isError(e) {
return (objectToString(e) === '[object Error]' || e instanceof Error);
}
exports.isError = isError;
function isFunction(arg) {
return typeof arg === 'function';
}
exports.isFunction = isFunction;
function isPrimitive(arg) {
return arg === null ||
typeof arg === 'boolean' ||
typeof arg === 'number' ||
typeof arg === 'string' ||
typeof arg === 'symbol' || // ES6 symbol
typeof arg === 'undefined';
}
exports.isPrimitive = isPrimitive;
exports.isBuffer = Buffer.isBuffer;
function objectToString(o) {
return Object.prototype.toString.call(o);
}
}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
},{"../../is-buffer/index.js":62}],59:[function(require,module,exports){
//
//
//
function EventEmitter() {
this._events = this._events || {};
this._maxListeners = this._maxListeners || undefined;
}
module.exports = EventEmitter;
EventEmitter.EventEmitter = EventEmitter;
EventEmitter.prototype._events = undefined;
EventEmitter.prototype._maxListeners = undefined;
EventEmitter.defaultMaxListeners = 10;
EventEmitter.prototype.setMaxListeners = function(n) {
if (!isNumber(n) || n < 0 || isNaN(n))
throw TypeError('n must be a positive number');
this._maxListeners = n;
return this;
};
EventEmitter.prototype.emit = function(type) {
var er, handler, len, args, i, listeners;
if (!this._events)
this._events = {};
if (type === 'error') {
if (!this._events.error ||
(isObject(this._events.error) && !this._events.error.length)) {
er = arguments[1];
if (er instanceof Error) {
throw er; // Unhandled 'error' event
}
throw TypeError('Uncaught, unspecified "error" event.');
}
}
handler = this._events[type];
if (isUndefined(handler))
return false;
if (isFunction(handler)) {
switch (arguments.length) {
case 1:
handler.call(this);
break;
case 2:
handler.call(this, arguments[1]);
break;
case 3:
handler.call(this, arguments[1], arguments[2]);
break;
default:
len = arguments.length;
args = new Array(len - 1);
for (i = 1; i < len; i++)
args[i - 1] = arguments[i];
handler.apply(this, args);
}
} else if (isObject(handler)) {
len = arguments.length;
args = new Array(len - 1);
for (i = 1; i < len; i++)
args[i - 1] = arguments[i];
listeners = handler.slice();
len = listeners.length;
for (i = 0; i < len; i++)
listeners[i].apply(this, args);
}
return true;
};
EventEmitter.prototype.addListener = function(type, listener) {
var m;
if (!isFunction(listener))
throw TypeError('listener must be a function');
if (!this._events)
this._events = {};
if (this._events.newListener)
this.emit('newListener', type,
isFunction(listener.listener) ?
listener.listener : listener);
if (!this._events[type])
this._events[type] = listener;
else if (isObject(this._events[type]))
this._events[type].push(listener);
else
this._events[type] = [this._events[type], listener];
if (isObject(this._events[type]) && !this._events[type].warned) {
var m;
if (!isUndefined(this._maxListeners)) {
m = this._maxListeners;
} else {
m = EventEmitter.defaultMaxListeners;
}
if (m && m > 0 && this._events[type].length > m) {
this._events[type].warned = true;
console.error('(node) warning: possible EventEmitter memory ' +
'leak detected. %d listeners added. ' +
'Use emitter.setMaxListeners() to increase limit.',
this._events[type].length);
if (typeof console.trace === 'function') {
console.trace();
}
}
}
return this;
};
EventEmitter.prototype.on = EventEmitter.prototype.addListener;
EventEmitter.prototype.once = function(type, listener) {
if (!isFunction(listener))
throw TypeError('listener must be a function');
var fired = false;
function g() {
this.removeListener(type, g);
if (!fired) {
fired = true;
listener.apply(this, arguments);
}
}
g.listener = listener;
this.on(type, g);
return this;
};
EventEmitter.prototype.removeListener = function(type, listener) {
var list, position, length, i;
if (!isFunction(listener))
throw TypeError('listener must be a function');
if (!this._events || !this._events[type])
return this;
list = this._events[type];
length = list.length;
position = -1;
if (list === listener ||
(isFunction(list.listener) && list.listener === listener)) {
delete this._events[type];
if (this._events.removeListener)
this.emit('removeListener', type, listener);
} else if (isObject(list)) {
for (i = length; i-- > 0;) {
if (list[i] === listener ||
(list[i].listener && list[i].listener === listener)) {
position = i;
break;
}
}
if (position < 0)
return this;
if (list.length === 1) {
list.length = 0;
delete this._events[type];
} else {
list.splice(position, 1);
}
if (this._events.removeListener)
this.emit('removeListener', type, listener);
}
return this;
};
EventEmitter.prototype.removeAllListeners = function(type) {
var key, listeners;
if (!this._events)
return this;
if (!this._events.removeListener) {
if (arguments.length === 0)
this._events = {};
else if (this._events[type])
delete this._events[type];
return this;
}
if (arguments.length === 0) {
for (key in this._events) {
if (key === 'removeListener') continue;
this.removeAllListeners(key);
}
this.removeAllListeners('removeListener');
this._events = {};
return this;
}
listeners = this._events[type];
if (isFunction(listeners)) {
this.removeListener(type, listeners);
} else {
while (listeners.length)
this.removeListener(type, listeners[listeners.length - 1]);
}
delete this._events[type];
return this;
};
EventEmitter.prototype.listeners = function(type) {
var ret;
if (!this._events || !this._events[type])
ret = [];
else if (isFunction(this._events[type]))
ret = [this._events[type]];
else
ret = this._events[type].slice();
return ret;
};
EventEmitter.listenerCount = function(emitter, type) {
var ret;
if (!emitter._events || !emitter._events[type])
ret = 0;
else if (isFunction(emitter._events[type]))
ret = 1;
else
ret = emitter._events[type].length;
return ret;
};
function isFunction(arg) {
return typeof arg === 'function';
}
function isNumber(arg) {
return typeof arg === 'number';
}
function isObject(arg) {
return typeof arg === 'object' && arg !== null;
}
function isUndefined(arg) {
return arg === void 0;
}
},{}],60:[function(require,module,exports){
exports.read = function (buffer, offset, isLE, mLen, nBytes) {
var e, m
var eLen = (nBytes * 8) - mLen - 1
var eMax = (1 << eLen) - 1
var eBias = eMax >> 1
var nBits = -7
var i = isLE ? (nBytes - 1) : 0
var d = isLE ? -1 : 1
var s = buffer[offset + i]
i += d
e = s & ((1 << (-nBits)) - 1)
s >>= (-nBits)
nBits += eLen
for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}
m = e & ((1 << (-nBits)) - 1)
e >>= (-nBits)
nBits += mLen
for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}
if (e === 0) {
e = 1 - eBias
} else if (e === eMax) {
return m ? NaN : ((s ? -1 : 1) * Infinity)
} else {
m = m + Math.pow(2, mLen)
e = e - eBias
}
return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
}
exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
var e, m, c
var eLen = (nBytes * 8) - mLen - 1
var eMax = (1 << eLen) - 1
var eBias = eMax >> 1
var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
var i = isLE ? 0 : (nBytes - 1)
var d = isLE ? 1 : -1
var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
value = Math.abs(value)
if (isNaN(value) || value === Infinity) {
m = isNaN(value) ? 1 : 0
e = eMax
} else {
e = Math.floor(Math.log(value) / Math.LN2)
if (value * (c = Math.pow(2, -e)) < 1) {
e--
c *= 2
}
if (e + eBias >= 1) {
value += rt / c
} else {
value += rt * Math.pow(2, 1 - eBias)
}
if (value * c >= 2) {
e++
c /= 2
}
if (e + eBias >= eMax) {
m = 0
e = eMax
} else if (e + eBias >= 1) {
m = ((value * c) - 1) * Math.pow(2, mLen)
e = e + eBias
} else {
m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
e = 0
}
}
for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
e = (e << mLen) | m
eLen += mLen
for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
buffer[offset + i - d] |= s * 128
}
},{}],61:[function(require,module,exports){
if (typeof Object.create === 'function') {
module.exports = function inherits(ctor, superCtor) {
ctor.super_ = superCtor
ctor.prototype = Object.create(superCtor.prototype, {
constructor: {
value: ctor,
enumerable: false,
writable: true,
configurable: true
}
});
};
} else {
module.exports = function inherits(ctor, superCtor) {
ctor.super_ = superCtor
var TempCtor = function () {}
TempCtor.prototype = superCtor.prototype
ctor.prototype = new TempCtor()
ctor.prototype.constructor = ctor
}
}
},{}],62:[function(require,module,exports){
module.exports = function (obj) {
return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
}
function isBuffer (obj) {
return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
}
function isSlowBuffer (obj) {
return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
}
},{}],63:[function(require,module,exports){
module.exports = Array.isArray || function (arr) {
return Object.prototype.toString.call(arr) == '[object Array]';
};
},{}],64:[function(require,module,exports){
var json = typeof JSON !== 'undefined' ? JSON : require('jsonify');
module.exports = function (obj, opts) {
if (!opts) opts = {};
if (typeof opts === 'function') opts = { cmp: opts };
var space = opts.space || '';
if (typeof space === 'number') space = Array(space+1).join(' ');
var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;
var replacer = opts.replacer || function(key, value) { return value; };
var cmp = opts.cmp && (function (f) {
return function (node) {
return function (a, b) {
var aobj = { key: a, value: node[a] };
var bobj = { key: b, value: node[b] };
return f(aobj, bobj);
};
};
})(opts.cmp);
var seen = [];
return (function stringify (parent, key, node, level) {
var indent = space ? ('\n' + new Array(level + 1).join(space)) : '';
var colonSeparator = space ? ': ' : ':';
if (node && node.toJSON && typeof node.toJSON === 'function') {
node = node.toJSON();
}
node = replacer.call(parent, key, node);
if (node === undefined) {
return;
}
if (typeof node !== 'object' || node === null) {
return json.stringify(node);
}
if (isArray(node)) {
var out = [];
for (var i = 0; i < node.length; i++) {
var item = stringify(node, i, node[i], level+1) || json.stringify(null);
out.push(indent + space + item);
}
return '[' + out.join(',') + indent + ']';
}
else {
if (seen.indexOf(node) !== -1) {
if (cycles) return json.stringify('__cycle__');
throw new TypeError('Converting circular structure to JSON');
}
else seen.push(node);
var keys = objectKeys(node).sort(cmp && cmp(node));
var out = [];
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var value = stringify(node, key, node[key], level+1);
if(!value) continue;
var keyValue = json.stringify(key)
+ colonSeparator
+ value;
;
out.push(indent + space + keyValue);
}
seen.splice(seen.indexOf(node), 1);
return '{' + out.join(',') + indent + '}';
}
})({ '': obj }, '', obj, 0);
};
var isArray = Array.isArray || function (x) {
return {}.toString.call(x) === '[object Array]';
};
var objectKeys = Object.keys || function (obj) {
var has = Object.prototype.hasOwnProperty || function () { return true };
var keys = [];
for (var key in obj) {
if (has.call(obj, key)) keys.push(key);
}
return keys;
};
},{"jsonify":65}],65:[function(require,module,exports){
exports.parse = require('./lib/parse');
exports.stringify = require('./lib/stringify');
},{"./lib/parse":66,"./lib/stringify":67}],66:[function(require,module,exports){
var at, // The index of the current character
ch, // The current character
escapee = {
'"': '"',
'\\': '\\',
'/': '/',
b: '\b',
f: '\f',
n: '\n',
r: '\r',
t: '\t'
},
text,
error = function (m) {
throw {
name: 'SyntaxError',
message: m,
at: at,
text: text
};
},
next = function (c) {
if (c && c !== ch) {
error("Expected '" + c + "' instead of '" + ch + "'");
}
ch = text.charAt(at);
at += 1;
return ch;
},
number = function () {
var number,
string = '';
if (ch === '-') {
string = '-';
next('-');
}
while (ch >= '0' && ch <= '9') {
string += ch;
next();
}
if (ch === '.') {
string += '.';
while (next() && ch >= '0' && ch <= '9') {
string += ch;
}
}
if (ch === 'e' || ch === 'E') {
string += ch;
next();
if (ch === '-' || ch === '+') {
string += ch;
next();
}
while (ch >= '0' && ch <= '9') {
string += ch;
next();
}
}
number = +string;
if (!isFinite(number)) {
error("Bad number");
} else {
return number;
}
},
string = function () {
var hex,
i,
string = '',
uffff;
if (ch === '"') {
while (next()) {
if (ch === '"') {
next();
return string;
} else if (ch === '\\') {
next();
if (ch === 'u') {
uffff = 0;
for (i = 0; i < 4; i += 1) {
hex = parseInt(next(), 16);
if (!isFinite(hex)) {
break;
}
uffff = uffff * 16 + hex;
}
string += String.fromCharCode(uffff);
} else if (typeof escapee[ch] === 'string') {
string += escapee[ch];
} else {
break;
}
} else {
string += ch;
}
}
}
error("Bad string");
},
white = function () {
while (ch && ch <= ' ') {
next();
}
},
word = function () {
switch (ch) {
case 't':
next('t');
next('r');
next('u');
next('e');
return true;
case 'f':
next('f');
next('a');
next('l');
next('s');
next('e');
return false;
case 'n':
next('n');
next('u');
next('l');
next('l');
return null;
}
error("Unexpected '" + ch + "'");
},
value, // Place holder for the value function.
array = function () {
var array = [];
if (ch === '[') {
next('[');
white();
if (ch === ']') {
next(']');
return array; // empty array
}
while (ch) {
array.push(value());
white();
if (ch === ']') {
next(']');
return array;
}
next(',');
white();
}
}
error("Bad array");
},
object = function () {
var key,
object = {};
if (ch === '{') {
next('{');
white();
if (ch === '}') {
next('}');
return object; // empty object
}
while (ch) {
key = string();
white();
next(':');
if (Object.hasOwnProperty.call(object, key)) {
error('Duplicate key "' + key + '"');
}
object[key] = value();
white();
if (ch === '}') {
next('}');
return object;
}
next(',');
white();
}
}
error("Bad object");
};
value = function () {
white();
switch (ch) {
case '{':
return object();
case '[':
return array();
case '"':
return string();
case '-':
return number();
default:
return ch >= '0' && ch <= '9' ? number() : word();
}
};
module.exports = function (source, reviver) {
var result;
text = source;
at = 0;
ch = ' ';
result = value();
white();
if (ch) {
error("Syntax error");
}
return typeof reviver === 'function' ? (function walk(holder, key) {
var k, v, value = holder[key];
if (value && typeof value === 'object') {
for (k in value) {
if (Object.prototype.hasOwnProperty.call(value, k)) {
v = walk(value, k);
if (v !== undefined) {
value[k] = v;
} else {
delete value[k];
}
}
}
}
return reviver.call(holder, key, value);
}({'': result}, '')) : result;
};
},{}],67:[function(require,module,exports){
var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
gap,
indent,
meta = { // table of character substitutions
'\b': '\\b',
'\t': '\\t',
'\n': '\\n',
'\f': '\\f',
'\r': '\\r',
'"' : '\\"',
'\\': '\\\\'
},
rep;
function quote(string) {
escapable.lastIndex = 0;
return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
var c = meta[a];
return typeof c === 'string' ? c :
'\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
}) + '"' : '"' + string + '"';
}
function str(key, holder) {
var i, // The loop counter.
k, // The member key.
v, // The member value.
length,
mind = gap,
partial,
value = holder[key];
if (value && typeof value === 'object' &&
typeof value.toJSON === 'function') {
value = value.toJSON(key);
}
if (typeof rep === 'function') {
value = rep.call(holder, key, value);
}
switch (typeof value) {
case 'string':
return quote(value);
case 'number':
return isFinite(value) ? String(value) : 'null';
case 'boolean':
case 'null':
return String(value);
case 'object':
if (!value) return 'null';
gap += indent;
partial = [];
if (Object.prototype.toString.apply(value) === '[object Array]') {
length = value.length;
for (i = 0; i < length; i += 1) {
partial[i] = str(i, value) || 'null';
}
v = partial.length === 0 ? '[]' : gap ?
'[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' :
'[' + partial.join(',') + ']';
gap = mind;
return v;
}
if (rep && typeof rep === 'object') {
length = rep.length;
for (i = 0; i < length; i += 1) {
k = rep[i];
if (typeof k === 'string') {
v = str(k, value);
if (v) {
partial.push(quote(k) + (gap ? ': ' : ':') + v);
}
}
}
}
else {
for (k in value) {
if (Object.prototype.hasOwnProperty.call(value, k)) {
v = str(k, value);
if (v) {
partial.push(quote(k) + (gap ? ': ' : ':') + v);
}
}
}
}
v = partial.length === 0 ? '{}' : gap ?
'{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' :
'{' + partial.join(',') + '}';
gap = mind;
return v;
}
}
module.exports = function (value, replacer, space) {
var i;
gap = '';
indent = '';
if (typeof space === 'number') {
for (i = 0; i < space; i += 1) {
indent += ' ';
}
}
else if (typeof space === 'string') {
indent = space;
}
rep = replacer;
if (replacer && typeof replacer !== 'function'
&& (typeof replacer !== 'object' || typeof replacer.length !== 'number')) {
throw new Error('JSON.stringify');
}
return str('', {'': value});
};
},{}],68:[function(require,module,exports){
var assign = require('101/assign');
var PriorityQueue = require('./libs/queue');
var Graph = function(vertices) {
this.vertices = vertices || {};
}
assign(Graph.prototype, {
addVertex: function(name, edges) {
this.vertices[name] = edges;
return this;
},
shortestPath: function(start, finish, options) {
options = options || {};
this.nodes = new PriorityQueue();
this.distances = {};
this.previous = {};
this.start = start;
this.finish = finish;
this.setBaseline.call(this);
var smallest;
var path = [];
var alt;
while (!this.nodes.isEmpty()) {
smallest = this.nodes.dequeue();
if (smallest === finish) {
while (this.previous[smallest]) {
path.push(smallest);
smallest = this.previous[smallest];
}
break;
}
if (!smallest || this.distances[smallest] === Infinity) {
continue;
}
for (var neighbor in this.vertices[smallest]) {
alt = this.distances[smallest] + this.vertices[smallest][neighbor];
if (alt < this.distances[neighbor]) {
this.distances[neighbor] = alt;
this.previous[neighbor] = smallest;
this.nodes.enqueue(alt, neighbor);
}
}
}
if (path.length < 1) { return null; }
if (options.trim) {
path.shift()
if (options.reverse) { return path; }
return path.reverse();
}
path = path.concat([start]);
if (options.reverse) { return path; }
return path.reverse();
},
setBaseline: function() {
var vertex;
for (vertex in this.vertices) {
if (vertex === this.start) {
this.distances[vertex] = 0;
this.nodes.enqueue(0, vertex);
} else {
this.distances[vertex] = Infinity;
this.nodes.enqueue(Infinity, vertex);
}
this.previous[vertex] = null;
}
}
});
module.exports = Graph;
},{"./libs/queue":69,"101/assign":5}],69:[function(require,module,exports){
var assign = require('101/assign');
var PriorityQueue = function() {
this.nodes = [];
}
assign(PriorityQueue.prototype, {
enqueue: function(priority, key) {
this.nodes.push({key: key, priority: priority});
this.sort.call(this);
},
dequeue: function() {
return this.nodes.shift().key;
},
sort: function() {
this.nodes.sort(function(a, b) {
return a.priority - b.priority;
});
},
isEmpty: function() {
return !this.nodes.length;
}
});
module.exports = PriorityQueue;
},{"101/assign":5}],70:[function(require,module,exports){
'use strict';
const { DOCUMENT_MODE } = require('./html');
const VALID_DOCTYPE_NAME = 'html';
const VALID_SYSTEM_ID = 'about:legacy-compat';
const QUIRKS_MODE_SYSTEM_ID = 'http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd';
const QUIRKS_MODE_PUBLIC_ID_PREFIXES = [
'+//silmaril//dtd html pro v0r11 19970101//en',
'-//advasoft ltd//dtd html 3.0 aswedit + extensions//en',
'-//as//dtd html 3.0 aswedit + extensions//en',
'-//ietf//dtd html 2.0 level 1//en',
'-//ietf//dtd html 2.0 level 2//en',
'-//ietf//dtd html 2.0 strict level 1//en',
'-//ietf//dtd html 2.0 strict level 2//en',
'-//ietf//dtd html 2.0 strict//en',
'-//ietf//dtd html 2.0//en',
'-//ietf//dtd html 2.1e//en',
'-//ietf//dtd html 3.0//en',
'-//ietf//dtd html 3.0//en//',
'-//ietf//dtd html 3.2 final//en',
'-//ietf//dtd html 3.2//en',
'-//ietf//dtd html 3//en',
'-//ietf//dtd html level 0//en',
'-//ietf//dtd html level 0//en//2.0',
'-//ietf//dtd html level 1//en',
'-//ietf//dtd html level 1//en//2.0',
'-//ietf//dtd html level 2//en',
'-//ietf//dtd html level 2//en//2.0',
'-//ietf//dtd html level 3//en',
'-//ietf//dtd html level 3//en//3.0',
'-//ietf//dtd html strict level 0//en',
'-//ietf//dtd html strict level 0//en//2.0',
'-//ietf//dtd html strict level 1//en',
'-//ietf//dtd html strict level 1//en//2.0',
'-//ietf//dtd html strict level 2//en',
'-//ietf//dtd html strict level 2//en//2.0',
'-//ietf//dtd html strict level 3//en',
'-//ietf//dtd html strict level 3//en//3.0',
'-//ietf//dtd html strict//en',
'-//ietf//dtd html strict//en//2.0',
'-//ietf//dtd html strict//en//3.0',
'-//ietf//dtd html//en',
'-//ietf//dtd html//en//2.0',
'-//ietf//dtd html//en//3.0',
'-//metrius//dtd metrius presentational//en',
'-//microsoft//dtd internet explorer 2.0 html strict//en',
'-//microsoft//dtd internet explorer 2.0 html//en',
'-//microsoft//dtd internet explorer 2.0 tables//en',
'-//microsoft//dtd internet explorer 3.0 html strict//en',
'-//microsoft//dtd internet explorer 3.0 html//en',
'-//microsoft//dtd internet explorer 3.0 tables//en',
'-//netscape comm. corp.//dtd html//en',
'-//netscape comm. corp.//dtd strict html//en',
"-//o'reilly and associates//dtd html 2.0//en",
"-//o'reilly and associates//dtd html extended 1.0//en",
'-//spyglass//dtd html 2.0 extended//en',
'-//sq//dtd html 2.0 hotmetal + extensions//en',
'-//sun microsystems corp.//dtd hotjava html//en',
'-//sun microsystems corp.//dtd hotjava strict html//en',
'-//w3c//dtd html 3 1995-03-24//en',
'-//w3c//dtd html 3.2 draft//en',
'-//w3c//dtd html 3.2 final//en',
'-//w3c//dtd html 3.2//en',
'-//w3c//dtd html 3.2s draft//en',
'-//w3c//dtd html 4.0 frameset//en',
'-//w3c//dtd html 4.0 transitional//en',
'-//w3c//dtd html experimental 19960712//en',
'-//w3c//dtd html experimental 970421//en',
'-//w3c//dtd w3 html//en',
'-//w3o//dtd w3 html 3.0//en',
'-//w3o//dtd w3 html 3.0//en//',
'-//webtechs//dtd mozilla html 2.0//en',
'-//webtechs//dtd mozilla html//en'
];
const QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES = QUIRKS_MODE_PUBLIC_ID_PREFIXES.concat([
'-//w3c//dtd html 4.01 frameset//',
'-//w3c//dtd html 4.01 transitional//'
]);
const QUIRKS_MODE_PUBLIC_IDS = ['-//w3o//dtd w3 html strict 3.0//en//', '-/w3c/dtd html 4.0 transitional/en', 'html'];
const LIMITED_QUIRKS_PUBLIC_ID_PREFIXES = ['-//W3C//DTD XHTML 1.0 Frameset//', '-//W3C//DTD XHTML 1.0 Transitional//'];
const LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES = LIMITED_QUIRKS_PUBLIC_ID_PREFIXES.concat([
'-//W3C//DTD HTML 4.01 Frameset//',
'-//W3C//DTD HTML 4.01 Transitional//'
]);
function enquoteDoctypeId(id) {
const quote = id.indexOf('"') !== -1 ? "'" : '"';
return quote + id + quote;
}
function hasPrefix(publicId, prefixes) {
for (let i = 0; i < prefixes.length; i++) {
if (publicId.indexOf(prefixes[i]) === 0) {
return true;
}
}
return false;
}
exports.isConforming = function(token) {
return (
token.name === VALID_DOCTYPE_NAME &&
token.publicId === null &&
(token.systemId === null || token.systemId === VALID_SYSTEM_ID)
);
};
exports.getDocumentMode = function(token) {
if (token.name !== VALID_DOCTYPE_NAME) {
return DOCUMENT_MODE.QUIRKS;
}
const systemId = token.systemId;
if (systemId && systemId.toLowerCase() === QUIRKS_MODE_SYSTEM_ID) {
return DOCUMENT_MODE.QUIRKS;
}
let publicId = token.publicId;
if (publicId !== null) {
publicId = publicId.toLowerCase();
if (QUIRKS_MODE_PUBLIC_IDS.indexOf(publicId) > -1) {
return DOCUMENT_MODE.QUIRKS;
}
let prefixes = systemId === null ? QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES : QUIRKS_MODE_PUBLIC_ID_PREFIXES;
if (hasPrefix(publicId, prefixes)) {
return DOCUMENT_MODE.QUIRKS;
}
prefixes =
systemId === null ? LIMITED_QUIRKS_PUBLIC_ID_PREFIXES : LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES;
if (hasPrefix(publicId, prefixes)) {
return DOCUMENT_MODE.LIMITED_QUIRKS;
}
}
return DOCUMENT_MODE.NO_QUIRKS;
};
exports.serializeContent = function(name, publicId, systemId) {
let str = '!DOCTYPE ';
if (name) {
str += name;
}
if (publicId) {
str += ' PUBLIC ' + enquoteDoctypeId(publicId);
} else if (systemId) {
str += ' SYSTEM';
}
if (systemId !== null) {
str += ' ' + enquoteDoctypeId(systemId);
}
return str;
};
},{"./html":73}],71:[function(require,module,exports){
'use strict';
module.exports = {
controlCharacterInInputStream: 'control-character-in-input-stream',
noncharacterInInputStream: 'noncharacter-in-input-stream',
surrogateInInputStream: 'surrogate-in-input-stream',
nonVoidHtmlElementStartTagWithTrailingSolidus: 'non-void-html-element-start-tag-with-trailing-solidus',
endTagWithAttributes: 'end-tag-with-attributes',
endTagWithTrailingSolidus: 'end-tag-with-trailing-solidus',
unexpectedSolidusInTag: 'unexpected-solidus-in-tag',
unexpectedNullCharacter: 'unexpected-null-character',
unexpectedQuestionMarkInsteadOfTagName: 'unexpected-question-mark-instead-of-tag-name',
invalidFirstCharacterOfTagName: 'invalid-first-character-of-tag-name',
unexpectedEqualsSignBeforeAttributeName: 'unexpected-equals-sign-before-attribute-name',
missingEndTagName: 'missing-end-tag-name',
unexpectedCharacterInAttributeName: 'unexpected-character-in-attribute-name',
unknownNamedCharacterReference: 'unknown-named-character-reference',
missingSemicolonAfterCharacterReference: 'missing-semicolon-after-character-reference',
unexpectedCharacterAfterDoctypeSystemIdentifier: 'unexpected-character-after-doctype-system-identifier',
unexpectedCharacterInUnquotedAttributeValue: 'unexpected-character-in-unquoted-attribute-value',
eofBeforeTagName: 'eof-before-tag-name',
eofInTag: 'eof-in-tag',
missingAttributeValue: 'missing-attribute-value',
missingWhitespaceBetweenAttributes: 'missing-whitespace-between-attributes',
missingWhitespaceAfterDoctypePublicKeyword: 'missing-whitespace-after-doctype-public-keyword',
missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers:
'missing-whitespace-between-doctype-public-and-system-identifiers',
missingWhitespaceAfterDoctypeSystemKeyword: 'missing-whitespace-after-doctype-system-keyword',
missingQuoteBeforeDoctypePublicIdentifier: 'missing-quote-before-doctype-public-identifier',
missingQuoteBeforeDoctypeSystemIdentifier: 'missing-quote-before-doctype-system-identifier',
missingDoctypePublicIdentifier: 'missing-doctype-public-identifier',
missingDoctypeSystemIdentifier: 'missing-doctype-system-identifier',
abruptDoctypePublicIdentifier: 'abrupt-doctype-public-identifier',
abruptDoctypeSystemIdentifier: 'abrupt-doctype-system-identifier',
cdataInHtmlContent: 'cdata-in-html-content',
incorrectlyOpenedComment: 'incorrectly-opened-comment',
eofInScriptHtmlCommentLikeText: 'eof-in-script-html-comment-like-text',
eofInDoctype: 'eof-in-doctype',
nestedComment: 'nested-comment',
abruptClosingOfEmptyComment: 'abrupt-closing-of-empty-comment',
eofInComment: 'eof-in-comment',
incorrectlyClosedComment: 'incorrectly-closed-comment',
eofInCdata: 'eof-in-cdata',
absenceOfDigitsInNumericCharacterReference: 'absence-of-digits-in-numeric-character-reference',
nullCharacterReference: 'null-character-reference',
surrogateCharacterReference: 'surrogate-character-reference',
characterReferenceOutsideUnicodeRange: 'character-reference-outside-unicode-range',
controlCharacterReference: 'control-character-reference',
noncharacterCharacterReference: 'noncharacter-character-reference',
missingWhitespaceBeforeDoctypeName: 'missing-whitespace-before-doctype-name',
missingDoctypeName: 'missing-doctype-name',
invalidCharacterSequenceAfterDoctypeName: 'invalid-character-sequence-after-doctype-name',
duplicateAttribute: 'duplicate-attribute',
nonConformingDoctype: 'non-conforming-doctype',
missingDoctype: 'missing-doctype',
misplacedDoctype: 'misplaced-doctype',
endTagWithoutMatchingOpenElement: 'end-tag-without-matching-open-element',
closingOfElementWithOpenChildElements: 'closing-of-element-with-open-child-elements',
disallowedContentInNoscriptInHead: 'disallowed-content-in-noscript-in-head',
openElementsLeftAfterEof: 'open-elements-left-after-eof',
abandonedHeadElementChild: 'abandoned-head-element-child',
misplacedStartTagForHeadElement: 'misplaced-start-tag-for-head-element',
nestedNoscriptInHead: 'nested-noscript-in-head',
eofInElementThatCanContainOnlyText: 'eof-in-element-that-can-contain-only-text'
};
},{}],72:[function(require,module,exports){
'use strict';
const Tokenizer = require('../tokenizer');
const HTML = require('./html');
const $ = HTML.TAG_NAMES;
const NS = HTML.NAMESPACES;
const ATTRS = HTML.ATTRS;
const MIME_TYPES = {
TEXT_HTML: 'text/html',
APPLICATION_XML: 'application/xhtml+xml'
};
const DEFINITION_URL_ATTR = 'definitionurl';
const ADJUSTED_DEFINITION_URL_ATTR = 'definitionURL';
const SVG_ATTRS_ADJUSTMENT_MAP = {
attributename: 'attributeName',
attributetype: 'attributeType',
basefrequency: 'baseFrequency',
baseprofile: 'baseProfile',
calcmode: 'calcMode',
clippathunits: 'clipPathUnits',
diffuseconstant: 'diffuseConstant',
edgemode: 'edgeMode',
filterunits: 'filterUnits',
glyphref: 'glyphRef',
gradienttransform: 'gradientTransform',
gradientunits: 'gradientUnits',
kernelmatrix: 'kernelMatrix',
kernelunitlength: 'kernelUnitLength',
keypoints: 'keyPoints',
keysplines: 'keySplines',
keytimes: 'keyTimes',
lengthadjust: 'lengthAdjust',
limitingconeangle: 'limitingConeAngle',
markerheight: 'markerHeight',
markerunits: 'markerUnits',
markerwidth: 'markerWidth',
maskcontentunits: 'maskContentUnits',
maskunits: 'maskUnits',
numoctaves: 'numOctaves',
pathlength: 'pathLength',
patterncontentunits: 'patternContentUnits',
patterntransform: 'patternTransform',
patternunits: 'patternUnits',
pointsatx: 'pointsAtX',
pointsaty: 'pointsAtY',
pointsatz: 'pointsAtZ',
preservealpha: 'preserveAlpha',
preserveaspectratio: 'preserveAspectRatio',
primitiveunits: 'primitiveUnits',
refx: 'refX',
refy: 'refY',
repeatcount: 'repeatCount',
repeatdur: 'repeatDur',
requiredextensions: 'requiredExtensions',
requiredfeatures: 'requiredFeatures',
specularconstant: 'specularConstant',
specularexponent: 'specularExponent',
spreadmethod: 'spreadMethod',
startoffset: 'startOffset',
stddeviation: 'stdDeviation',
stitchtiles: 'stitchTiles',
surfacescale: 'surfaceScale',
systemlanguage: 'systemLanguage',
tablevalues: 'tableValues',
targetx: 'targetX',
targety: 'targetY',
textlength: 'textLength',
viewbox: 'viewBox',
viewtarget: 'viewTarget',
xchannelselector: 'xChannelSelector',
ychannelselector: 'yChannelSelector',
zoomandpan: 'zoomAndPan'
};
const XML_ATTRS_ADJUSTMENT_MAP = {
'xlink:actuate': { prefix: 'xlink', name: 'actuate', namespace: NS.XLINK },
'xlink:arcrole': { prefix: 'xlink', name: 'arcrole', namespace: NS.XLINK },
'xlink:href': { prefix: 'xlink', name: 'href', namespace: NS.XLINK },
'xlink:role': { prefix: 'xlink', name: 'role', namespace: NS.XLINK },
'xlink:show': { prefix: 'xlink', name: 'show', namespace: NS.XLINK },
'xlink:title': { prefix: 'xlink', name: 'title', namespace: NS.XLINK },
'xlink:type': { prefix: 'xlink', name: 'type', namespace: NS.XLINK },
'xml:base': { prefix: 'xml', name: 'base', namespace: NS.XML },
'xml:lang': { prefix: 'xml', name: 'lang', namespace: NS.XML },
'xml:space': { prefix: 'xml', name: 'space', namespace: NS.XML },
xmlns: { prefix: '', name: 'xmlns', namespace: NS.XMLNS },
'xmlns:xlink': { prefix: 'xmlns', name: 'xlink', namespace: NS.XMLNS }
};
const SVG_TAG_NAMES_ADJUSTMENT_MAP = (exports.SVG_TAG_NAMES_ADJUSTMENT_MAP = {
altglyph: 'altGlyph',
altglyphdef: 'altGlyphDef',
altglyphitem: 'altGlyphItem',
animatecolor: 'animateColor',
animatemotion: 'animateMotion',
animatetransform: 'animateTransform',
clippath: 'clipPath',
feblend: 'feBlend',
fecolormatrix: 'feColorMatrix',
fecomponenttransfer: 'feComponentTransfer',
fecomposite: 'feComposite',
feconvolvematrix: 'feConvolveMatrix',
fediffuselighting: 'feDiffuseLighting',
fedisplacementmap: 'feDisplacementMap',
fedistantlight: 'feDistantLight',
feflood: 'feFlood',
fefunca: 'feFuncA',
fefuncb: 'feFuncB',
fefuncg: 'feFuncG',
fefuncr: 'feFuncR',
fegaussianblur: 'feGaussianBlur',
feimage: 'feImage',
femerge: 'feMerge',
femergenode: 'feMergeNode',
femorphology: 'feMorphology',
feoffset: 'feOffset',
fepointlight: 'fePointLight',
fespecularlighting: 'feSpecularLighting',
fespotlight: 'feSpotLight',
fetile: 'feTile',
feturbulence: 'feTurbulence',
foreignobject: 'foreignObject',
glyphref: 'glyphRef',
lineargradient: 'linearGradient',
radialgradient: 'radialGradient',
textpath: 'textPath'
});
const EXITS_FOREIGN_CONTENT = {
[$.B]: true,
[$.BIG]: true,
[$.BLOCKQUOTE]: true,
[$.BODY]: true,
[$.BR]: true,
[$.CENTER]: true,
[$.CODE]: true,
[$.DD]: true,
[$.DIV]: true,
[$.DL]: true,
[$.DT]: true,
[$.EM]: true,
[$.EMBED]: true,
[$.H1]: true,
[$.H2]: true,
[$.H3]: true,
[$.H4]: true,
[$.H5]: true,
[$.H6]: true,
[$.HEAD]: true,
[$.HR]: true,
[$.I]: true,
[$.IMG]: true,
[$.LI]: true,
[$.LISTING]: true,
[$.MENU]: true,
[$.META]: true,
[$.NOBR]: true,
[$.OL]: true,
[$.P]: true,
[$.PRE]: true,
[$.RUBY]: true,
[$.S]: true,
[$.SMALL]: true,
[$.SPAN]: true,
[$.STRONG]: true,
[$.STRIKE]: true,
[$.SUB]: true,
[$.SUP]: true,
[$.TABLE]: true,
[$.TT]: true,
[$.U]: true,
[$.UL]: true,
[$.VAR]: true
};
exports.causesExit = function(startTagToken) {
const tn = startTagToken.tagName;
const isFontWithAttrs =
tn === $.FONT &&
(Tokenizer.getTokenAttr(startTagToken, ATTRS.COLOR) !== null ||
Tokenizer.getTokenAttr(startTagToken, ATTRS.SIZE) !== null ||
Tokenizer.getTokenAttr(startTagToken, ATTRS.FACE) !== null);
return isFontWithAttrs ? true : EXITS_FOREIGN_CONTENT[tn];
};
exports.adjustTokenMathMLAttrs = function(token) {
for (let i = 0; i < token.attrs.length; i++) {
if (token.attrs[i].name === DEFINITION_URL_ATTR) {
token.attrs[i].name = ADJUSTED_DEFINITION_URL_ATTR;
break;
}
}
};
exports.adjustTokenSVGAttrs = function(token) {
for (let i = 0; i < token.attrs.length; i++) {
const adjustedAttrName = SVG_ATTRS_ADJUSTMENT_MAP[token.attrs[i].name];
if (adjustedAttrName) {
token.attrs[i].name = adjustedAttrName;
}
}
};
exports.adjustTokenXMLAttrs = function(token) {
for (let i = 0; i < token.attrs.length; i++) {
const adjustedAttrEntry = XML_ATTRS_ADJUSTMENT_MAP[token.attrs[i].name];
if (adjustedAttrEntry) {
token.attrs[i].prefix = adjustedAttrEntry.prefix;
token.attrs[i].name = adjustedAttrEntry.name;
token.attrs[i].namespace = adjustedAttrEntry.namespace;
}
}
};
exports.adjustTokenSVGTagName = function(token) {
const adjustedTagName = SVG_TAG_NAMES_ADJUSTMENT_MAP[token.tagName];
if (adjustedTagName) {
token.tagName = adjustedTagName;
}
};
function isMathMLTextIntegrationPoint(tn, ns) {
return ns === NS.MATHML && (tn === $.MI || tn === $.MO || tn === $.MN || tn === $.MS || tn === $.MTEXT);
}
function isHtmlIntegrationPoint(tn, ns, attrs) {
if (ns === NS.MATHML && tn === $.ANNOTATION_XML) {
for (let i = 0; i < attrs.length; i++) {
if (attrs[i].name === ATTRS.ENCODING) {
const value = attrs[i].value.toLowerCase();
return value === MIME_TYPES.TEXT_HTML || value === MIME_TYPES.APPLICATION_XML;
}
}
}
return ns === NS.SVG && (tn === $.FOREIGN_OBJECT || tn === $.DESC || tn === $.TITLE);
}
exports.isIntegrationPoint = function(tn, ns, attrs, foreignNS) {
if ((!foreignNS || foreignNS === NS.HTML) && isHtmlIntegrationPoint(tn, ns, attrs)) {
return true;
}
if ((!foreignNS || foreignNS === NS.MATHML) && isMathMLTextIntegrationPoint(tn, ns)) {
return true;
}
return false;
};
},{"../tokenizer":88,"./html":73}],73:[function(require,module,exports){
'use strict';
const NS = (exports.NAMESPACES = {
HTML: 'http://www.w3.org/1999/xhtml',
MATHML: 'http://www.w3.org/1998/Math/MathML',
SVG: 'http://www.w3.org/2000/svg',
XLINK: 'http://www.w3.org/1999/xlink',
XML: 'http://www.w3.org/XML/1998/namespace',
XMLNS: 'http://www.w3.org/2000/xmlns/'
});
exports.ATTRS = {
TYPE: 'type',
ACTION: 'action',
ENCODING: 'encoding',
PROMPT: 'prompt',
NAME: 'name',
COLOR: 'color',
FACE: 'face',
SIZE: 'size'
};
exports.DOCUMENT_MODE = {
NO_QUIRKS: 'no-quirks',
QUIRKS: 'quirks',
LIMITED_QUIRKS: 'limited-quirks'
};
const $ = (exports.TAG_NAMES = {
A: 'a',
ADDRESS: 'address',
ANNOTATION_XML: 'annotation-xml',
APPLET: 'applet',
AREA: 'area',
ARTICLE: 'article',
ASIDE: 'aside',
B: 'b',
BASE: 'base',
BASEFONT: 'basefont',
BGSOUND: 'bgsound',
BIG: 'big',
BLOCKQUOTE: 'blockquote',
BODY: 'body',
BR: 'br',
BUTTON: 'button',
CAPTION: 'caption',
CENTER: 'center',
CODE: 'code',
COL: 'col',
COLGROUP: 'colgroup',
DD: 'dd',
DESC: 'desc',
DETAILS: 'details',
DIALOG: 'dialog',
DIR: 'dir',
DIV: 'div',
DL: 'dl',
DT: 'dt',
EM: 'em',
EMBED: 'embed',
FIELDSET: 'fieldset',
FIGCAPTION: 'figcaption',
FIGURE: 'figure',
FONT: 'font',
FOOTER: 'footer',
FOREIGN_OBJECT: 'foreignObject',
FORM: 'form',
FRAME: 'frame',
FRAMESET: 'frameset',
H1: 'h1',
H2: 'h2',
H3: 'h3',
H4: 'h4',
H5: 'h5',
H6: 'h6',
HEAD: 'head',
HEADER: 'header',
HGROUP: 'hgroup',
HR: 'hr',
HTML: 'html',
I: 'i',
IMG: 'img',
IMAGE: 'image',
INPUT: 'input',
IFRAME: 'iframe',
KEYGEN: 'keygen',
LABEL: 'label',
LI: 'li',
LINK: 'link',
LISTING: 'listing',
MAIN: 'main',
MALIGNMARK: 'malignmark',
MARQUEE: 'marquee',
MATH: 'math',
MENU: 'menu',
META: 'meta',
MGLYPH: 'mglyph',
MI: 'mi',
MO: 'mo',
MN: 'mn',
MS: 'ms',
MTEXT: 'mtext',
NAV: 'nav',
NOBR: 'nobr',
NOFRAMES: 'noframes',
NOEMBED: 'noembed',
NOSCRIPT: 'noscript',
OBJECT: 'object',
OL: 'ol',
OPTGROUP: 'optgroup',
OPTION: 'option',
P: 'p',
PARAM: 'param',
PLAINTEXT: 'plaintext',
PRE: 'pre',
RB: 'rb',
RP: 'rp',
RT: 'rt',
RTC: 'rtc',
RUBY: 'ruby',
S: 's',
SCRIPT: 'script',
SECTION: 'section',
SELECT: 'select',
SOURCE: 'source',
SMALL: 'small',
SPAN: 'span',
STRIKE: 'strike',
STRONG: 'strong',
STYLE: 'style',
SUB: 'sub',
SUMMARY: 'summary',
SUP: 'sup',
TABLE: 'table',
TBODY: 'tbody',
TEMPLATE: 'template',
TEXTAREA: 'textarea',
TFOOT: 'tfoot',
TD: 'td',
TH: 'th',
THEAD: 'thead',
TITLE: 'title',
TR: 'tr',
TRACK: 'track',
TT: 'tt',
U: 'u',
UL: 'ul',
SVG: 'svg',
VAR: 'var',
WBR: 'wbr',
XMP: 'xmp'
});
exports.SPECIAL_ELEMENTS = {
[NS.HTML]: {
[$.ADDRESS]: true,
[$.APPLET]: true,
[$.AREA]: true,
[$.ARTICLE]: true,
[$.ASIDE]: true,
[$.BASE]: true,
[$.BASEFONT]: true,
[$.BGSOUND]: true,
[$.BLOCKQUOTE]: true,
[$.BODY]: true,
[$.BR]: true,
[$.BUTTON]: true,
[$.CAPTION]: true,
[$.CENTER]: true,
[$.COL]: true,
[$.COLGROUP]: true,
[$.DD]: true,
[$.DETAILS]: true,
[$.DIR]: true,
[$.DIV]: true,
[$.DL]: true,
[$.DT]: true,
[$.EMBED]: true,
[$.FIELDSET]: true,
[$.FIGCAPTION]: true,
[$.FIGURE]: true,
[$.FOOTER]: true,
[$.FORM]: true,
[$.FRAME]: true,
[$.FRAMESET]: true,
[$.H1]: true,
[$.H2]: true,
[$.H3]: true,
[$.H4]: true,
[$.H5]: true,
[$.H6]: true,
[$.HEAD]: true,
[$.HEADER]: true,
[$.HGROUP]: true,
[$.HR]: true,
[$.HTML]: true,
[$.IFRAME]: true,
[$.IMG]: true,
[$.INPUT]: true,
[$.LI]: true,
[$.LINK]: true,
[$.LISTING]: true,
[$.MAIN]: true,
[$.MARQUEE]: true,
[$.MENU]: true,
[$.META]: true,
[$.NAV]: true,
[$.NOEMBED]: true,
[$.NOFRAMES]: true,
[$.NOSCRIPT]: true,
[$.OBJECT]: true,
[$.OL]: true,
[$.P]: true,
[$.PARAM]: true,
[$.PLAINTEXT]: true,
[$.PRE]: true,
[$.SCRIPT]: true,
[$.SECTION]: true,
[$.SELECT]: true,
[$.SOURCE]: true,
[$.STYLE]: true,
[$.SUMMARY]: true,
[$.TABLE]: true,
[$.TBODY]: true,
[$.TD]: true,
[$.TEMPLATE]: true,
[$.TEXTAREA]: true,
[$.TFOOT]: true,
[$.TH]: true,
[$.THEAD]: true,
[$.TITLE]: true,
[$.TR]: true,
[$.TRACK]: true,
[$.UL]: true,
[$.WBR]: true,
[$.XMP]: true
},
[NS.MATHML]: {
[$.MI]: true,
[$.MO]: true,
[$.MN]: true,
[$.MS]: true,
[$.MTEXT]: true,
[$.ANNOTATION_XML]: true
},
[NS.SVG]: {
[$.TITLE]: true,
[$.FOREIGN_OBJECT]: true,
[$.DESC]: true
}
};
},{}],74:[function(require,module,exports){
'use strict';
const UNDEFINED_CODE_POINTS = [
0xfffe,
0xffff,
0x1fffe,
0x1ffff,
0x2fffe,
0x2ffff,
0x3fffe,
0x3ffff,
0x4fffe,
0x4ffff,
0x5fffe,
0x5ffff,
0x6fffe,
0x6ffff,
0x7fffe,
0x7ffff,
0x8fffe,
0x8ffff,
0x9fffe,
0x9ffff,
0xafffe,
0xaffff,
0xbfffe,
0xbffff,
0xcfffe,
0xcffff,
0xdfffe,
0xdffff,
0xefffe,
0xeffff,
0xffffe,
0xfffff,
0x10fffe,
0x10ffff
];
exports.REPLACEMENT_CHARACTER = '\uFFFD';
exports.CODE_POINTS = {
EOF: -1,
NULL: 0x00,
TABULATION: 0x09,
CARRIAGE_RETURN: 0x0d,
LINE_FEED: 0x0a,
FORM_FEED: 0x0c,
SPACE: 0x20,
EXCLAMATION_MARK: 0x21,
QUOTATION_MARK: 0x22,
NUMBER_SIGN: 0x23,
AMPERSAND: 0x26,
APOSTROPHE: 0x27,
HYPHEN_MINUS: 0x2d,
SOLIDUS: 0x2f,
DIGIT_0: 0x30,
DIGIT_9: 0x39,
SEMICOLON: 0x3b,
LESS_THAN_SIGN: 0x3c,
EQUALS_SIGN: 0x3d,
GREATER_THAN_SIGN: 0x3e,
QUESTION_MARK: 0x3f,
LATIN_CAPITAL_A: 0x41,
LATIN_CAPITAL_F: 0x46,
LATIN_CAPITAL_X: 0x58,
LATIN_CAPITAL_Z: 0x5a,
RIGHT_SQUARE_BRACKET: 0x5d,
GRAVE_ACCENT: 0x60,
LATIN_SMALL_A: 0x61,
LATIN_SMALL_F: 0x66,
LATIN_SMALL_X: 0x78,
LATIN_SMALL_Z: 0x7a,
REPLACEMENT_CHARACTER: 0xfffd
};
exports.CODE_POINT_SEQUENCES = {
DASH_DASH_STRING: [0x2d, 0x2d], //--
DOCTYPE_STRING: [0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45], //DOCTYPE
CDATA_START_STRING: [0x5b, 0x43, 0x44, 0x41, 0x54, 0x41, 0x5b], //[CDATA[
SCRIPT_STRING: [0x73, 0x63, 0x72, 0x69, 0x70, 0x74], //script
PUBLIC_STRING: [0x50, 0x55, 0x42, 0x4c, 0x49, 0x43], //PUBLIC
SYSTEM_STRING: [0x53, 0x59, 0x53, 0x54, 0x45, 0x4d] //SYSTEM
};
exports.isSurrogate = function(cp) {
return cp >= 0xd800 && cp <= 0xdfff;
};
exports.isSurrogatePair = function(cp) {
return cp >= 0xdc00 && cp <= 0xdfff;
};
exports.getSurrogatePairCodePoint = function(cp1, cp2) {
return (cp1 - 0xd800) * 0x400 + 0x2400 + cp2;
};
exports.isControlCodePoint = function(cp) {
return (
(cp !== 0x20 && cp !== 0x0a && cp !== 0x0d && cp !== 0x09 && cp !== 0x0c && cp >= 0x01 && cp <= 0x1f) ||
(cp >= 0x7f && cp <= 0x9f)
);
};
exports.isUndefinedCodePoint = function(cp) {
return (cp >= 0xfdd0 && cp <= 0xfdef) || UNDEFINED_CODE_POINTS.indexOf(cp) > -1;
};
},{}],75:[function(require,module,exports){
'use strict';
const Mixin = require('../../utils/mixin');
class ErrorReportingMixinBase extends Mixin {
constructor(host, opts) {
super(host);
this.posTracker = null;
this.onParseError = opts.onParseError;
}
_setErrorLocation(err) {
err.startLine = err.endLine = this.posTracker.line;
err.startCol = err.endCol = this.posTracker.col;
err.startOffset = err.endOffset = this.posTracker.offset;
}
_reportError(code) {
const err = {
code: code,
startLine: -1,
startCol: -1,
startOffset: -1,
endLine: -1,
endCol: -1,
endOffset: -1
};
this._setErrorLocation(err);
this.onParseError(err);
}
_getOverriddenMethods(mxn) {
return {
_err(code) {
mxn._reportError(code);
}
};
}
}
module.exports = ErrorReportingMixinBase;
},{"../../utils/mixin":93}],76:[function(require,module,exports){
'use strict';
const ErrorReportingMixinBase = require('./mixin-base');
const ErrorReportingTokenizerMixin = require('./tokenizer-mixin');
const LocationInfoTokenizerMixin = require('../location-info/tokenizer-mixin');
const Mixin = require('../../utils/mixin');
class ErrorReportingParserMixin extends ErrorReportingMixinBase {
constructor(parser, opts) {
super(parser, opts);
this.opts = opts;
this.ctLoc = null;
this.locBeforeToken = false;
}
_setErrorLocation(err) {
if (this.ctLoc) {
err.startLine = this.ctLoc.startLine;
err.startCol = this.ctLoc.startCol;
err.startOffset = this.ctLoc.startOffset;
err.endLine = this.locBeforeToken ? this.ctLoc.startLine : this.ctLoc.endLine;
err.endCol = this.locBeforeToken ? this.ctLoc.startCol : this.ctLoc.endCol;
err.endOffset = this.locBeforeToken ? this.ctLoc.startOffset : this.ctLoc.endOffset;
}
}
_getOverriddenMethods(mxn, orig) {
return {
_bootstrap(document, fragmentContext) {
orig._bootstrap.call(this, document, fragmentContext);
Mixin.install(this.tokenizer, ErrorReportingTokenizerMixin, mxn.opts);
Mixin.install(this.tokenizer, LocationInfoTokenizerMixin);
},
_processInputToken(token) {
mxn.ctLoc = token.location;
orig._processInputToken.call(this, token);
},
_err(code, options) {
mxn.locBeforeToken = options && options.beforeToken;
mxn._reportError(code);
}
};
}
}
module.exports = ErrorReportingParserMixin;
},{"../../utils/mixin":93,"../location-info/tokenizer-mixin":81,"./mixin-base":75,"./tokenizer-mixin":78}],77:[function(require,module,exports){
'use strict';
const ErrorReportingMixinBase = require('./mixin-base');
const PositionTrackingPreprocessorMixin = require('../position-tracking/preprocessor-mixin');
const Mixin = require('../../utils/mixin');
class ErrorReportingPreprocessorMixin extends ErrorReportingMixinBase {
constructor(preprocessor, opts) {
super(preprocessor, opts);
this.posTracker = Mixin.install(preprocessor, PositionTrackingPreprocessorMixin);
this.lastErrOffset = -1;
}
_reportError(code) {
if (this.lastErrOffset !== this.posTracker.offset) {
this.lastErrOffset = this.posTracker.offset;
super._reportError(code);
}
}
}
module.exports = ErrorReportingPreprocessorMixin;
},{"../../utils/mixin":93,"../position-tracking/preprocessor-mixin":82,"./mixin-base":75}],78:[function(require,module,exports){
'use strict';
const ErrorReportingMixinBase = require('./mixin-base');
const ErrorReportingPreprocessorMixin = require('./preprocessor-mixin');
const Mixin = require('../../utils/mixin');
class ErrorReportingTokenizerMixin extends ErrorReportingMixinBase {
constructor(tokenizer, opts) {
super(tokenizer, opts);
const preprocessorMixin = Mixin.install(tokenizer.preprocessor, ErrorReportingPreprocessorMixin, opts);
this.posTracker = preprocessorMixin.posTracker;
}
}
module.exports = ErrorReportingTokenizerMixin;
},{"../../utils/mixin":93,"./mixin-base":75,"./preprocessor-mixin":77}],79:[function(require,module,exports){
'use strict';
const Mixin = require('../../utils/mixin');
class LocationInfoOpenElementStackMixin extends Mixin {
constructor(stack, opts) {
super(stack);
this.onItemPop = opts.onItemPop;
}
_getOverriddenMethods(mxn, orig) {
return {
pop() {
mxn.onItemPop(this.current);
orig.pop.call(this);
},
popAllUpToHtmlElement() {
for (let i = this.stackTop; i > 0; i--) {
mxn.onItemPop(this.items[i]);
}
orig.popAllUpToHtmlElement.call(this);
},
remove(element) {
mxn.onItemPop(this.current);
orig.remove.call(this, element);
}
};
}
}
module.exports = LocationInfoOpenElementStackMixin;
},{"../../utils/mixin":93}],80:[function(require,module,exports){
'use strict';
const Mixin = require('../../utils/mixin');
const Tokenizer = require('../../tokenizer');
const LocationInfoTokenizerMixin = require('./tokenizer-mixin');
const LocationInfoOpenElementStackMixin = require('./open-element-stack-mixin');
const HTML = require('../../common/html');
const $ = HTML.TAG_NAMES;
class LocationInfoParserMixin extends Mixin {
constructor(parser) {
super(parser);
this.parser = parser;
this.treeAdapter = this.parser.treeAdapter;
this.posTracker = null;
this.lastStartTagToken = null;
this.lastFosterParentingLocation = null;
this.currentToken = null;
}
_setStartLocation(element) {
let loc = null;
if (this.lastStartTagToken) {
loc = Object.assign({}, this.lastStartTagToken.location);
loc.startTag = this.lastStartTagToken.location;
}
this.treeAdapter.setNodeSourceCodeLocation(element, loc);
}
_setEndLocation(element, closingToken) {
const loc = this.treeAdapter.getNodeSourceCodeLocation(element);
if (loc) {
if (closingToken.location) {
const ctLoc = closingToken.location;
const tn = this.treeAdapter.getTagName(element);
const isClosingEndTag = closingToken.type === Tokenizer.END_TAG_TOKEN && tn === closingToken.tagName;
if (isClosingEndTag) {
loc.endTag = Object.assign({}, ctLoc);
loc.endLine = ctLoc.endLine;
loc.endCol = ctLoc.endCol;
loc.endOffset = ctLoc.endOffset;
} else {
loc.endLine = ctLoc.startLine;
loc.endCol = ctLoc.startCol;
loc.endOffset = ctLoc.startOffset;
}
}
}
}
_getOverriddenMethods(mxn, orig) {
return {
_bootstrap(document, fragmentContext) {
orig._bootstrap.call(this, document, fragmentContext);
mxn.lastStartTagToken = null;
mxn.lastFosterParentingLocation = null;
mxn.currentToken = null;
const tokenizerMixin = Mixin.install(this.tokenizer, LocationInfoTokenizerMixin);
mxn.posTracker = tokenizerMixin.posTracker;
Mixin.install(this.openElements, LocationInfoOpenElementStackMixin, {
onItemPop: function(element) {
mxn._setEndLocation(element, mxn.currentToken);
}
});
},
_runParsingLoop(scriptHandler) {
orig._runParsingLoop.call(this, scriptHandler);
for (let i = this.openElements.stackTop; i >= 0; i--) {
mxn._setEndLocation(this.openElements.items[i], mxn.currentToken);
}
},
_processTokenInForeignContent(token) {
mxn.currentToken = token;
orig._processTokenInForeignContent.call(this, token);
},
_processToken(token) {
mxn.currentToken = token;
orig._processToken.call(this, token);
const requireExplicitUpdate =
token.type === Tokenizer.END_TAG_TOKEN &&
(token.tagName === $.HTML || (token.tagName === $.BODY && this.openElements.hasInScope($.BODY)));
if (requireExplicitUpdate) {
for (let i = this.openElements.stackTop; i >= 0; i--) {
const element = this.openElements.items[i];
if (this.treeAdapter.getTagName(element) === token.tagName) {
mxn._setEndLocation(element, token);
break;
}
}
}
},
_setDocumentType(token) {
orig._setDocumentType.call(this, token);
const documentChildren = this.treeAdapter.getChildNodes(this.document);
const cnLength = documentChildren.length;
for (let i = 0; i < cnLength; i++) {
const node = documentChildren[i];
if (this.treeAdapter.isDocumentTypeNode(node)) {
this.treeAdapter.setNodeSourceCodeLocation(node, token.location);
break;
}
}
},
_attachElementToTree(element) {
mxn._setStartLocation(element);
mxn.lastStartTagToken = null;
orig._attachElementToTree.call(this, element);
},
_appendElement(token, namespaceURI) {
mxn.lastStartTagToken = token;
orig._appendElement.call(this, token, namespaceURI);
},
_insertElement(token, namespaceURI) {
mxn.lastStartTagToken = token;
orig._insertElement.call(this, token, namespaceURI);
},
_insertTemplate(token) {
mxn.lastStartTagToken = token;
orig._insertTemplate.call(this, token);
const tmplContent = this.treeAdapter.getTemplateContent(this.openElements.current);
this.treeAdapter.setNodeSourceCodeLocation(tmplContent, null);
},
_insertFakeRootElement() {
orig._insertFakeRootElement.call(this);
this.treeAdapter.setNodeSourceCodeLocation(this.openElements.current, null);
},
_appendCommentNode(token, parent) {
orig._appendCommentNode.call(this, token, parent);
const children = this.treeAdapter.getChildNodes(parent);
const commentNode = children[children.length - 1];
this.treeAdapter.setNodeSourceCodeLocation(commentNode, token.location);
},
_findFosterParentingLocation() {
mxn.lastFosterParentingLocation = orig._findFosterParentingLocation.call(this);
return mxn.lastFosterParentingLocation;
},
_insertCharacters(token) {
orig._insertCharacters.call(this, token);
const hasFosterParent = this._shouldFosterParentOnInsertion();
const parent =
(hasFosterParent && mxn.lastFosterParentingLocation.parent) ||
this.openElements.currentTmplContent ||
this.openElements.current;
const siblings = this.treeAdapter.getChildNodes(parent);
const textNodeIdx =
hasFosterParent && mxn.lastFosterParentingLocation.beforeElement
? siblings.indexOf(mxn.lastFosterParentingLocation.beforeElement) - 1
: siblings.length - 1;
const textNode = siblings[textNodeIdx];
const tnLoc = this.treeAdapter.getNodeSourceCodeLocation(textNode);
if (tnLoc) {
tnLoc.endLine = token.location.endLine;
tnLoc.endCol = token.location.endCol;
tnLoc.endOffset = token.location.endOffset;
} else {
this.treeAdapter.setNodeSourceCodeLocation(textNode, token.location);
}
}
};
}
}
module.exports = LocationInfoParserMixin;
},{"../../common/html":73,"../../tokenizer":88,"../../utils/mixin":93,"./open-element-stack-mixin":79,"./tokenizer-mixin":81}],81:[function(require,module,exports){
'use strict';
const Mixin = require('../../utils/mixin');
const Tokenizer = require('../../tokenizer');
const PositionTrackingPreprocessorMixin = require('../position-tracking/preprocessor-mixin');
class LocationInfoTokenizerMixin extends Mixin {
constructor(tokenizer) {
super(tokenizer);
this.tokenizer = tokenizer;
this.posTracker = Mixin.install(tokenizer.preprocessor, PositionTrackingPreprocessorMixin);
this.currentAttrLocation = null;
this.ctLoc = null;
}
_getCurrentLocation() {
return {
startLine: this.posTracker.line,
startCol: this.posTracker.col,
startOffset: this.posTracker.offset,
endLine: -1,
endCol: -1,
endOffset: -1
};
}
_attachCurrentAttrLocationInfo() {
this.currentAttrLocation.endLine = this.posTracker.line;
this.currentAttrLocation.endCol = this.posTracker.col;
this.currentAttrLocation.endOffset = this.posTracker.offset;
const currentToken = this.tokenizer.currentToken;
const currentAttr = this.tokenizer.currentAttr;
if (!currentToken.location.attrs) {
currentToken.location.attrs = Object.create(null);
}
currentToken.location.attrs[currentAttr.name] = this.currentAttrLocation;
}
_getOverriddenMethods(mxn, orig) {
const methods = {
_createStartTagToken() {
orig._createStartTagToken.call(this);
this.currentToken.location = mxn.ctLoc;
},
_createEndTagToken() {
orig._createEndTagToken.call(this);
this.currentToken.location = mxn.ctLoc;
},
_createCommentToken() {
orig._createCommentToken.call(this);
this.currentToken.location = mxn.ctLoc;
},
_createDoctypeToken(initialName) {
orig._createDoctypeToken.call(this, initialName);
this.currentToken.location = mxn.ctLoc;
},
_createCharacterToken(type, ch) {
orig._createCharacterToken.call(this, type, ch);
this.currentCharacterToken.location = mxn.ctLoc;
},
_createEOFToken() {
orig._createEOFToken.call(this);
this.currentToken.location = mxn._getCurrentLocation();
},
_createAttr(attrNameFirstCh) {
orig._createAttr.call(this, attrNameFirstCh);
mxn.currentAttrLocation = mxn._getCurrentLocation();
},
_leaveAttrName(toState) {
orig._leaveAttrName.call(this, toState);
mxn._attachCurrentAttrLocationInfo();
},
_leaveAttrValue(toState) {
orig._leaveAttrValue.call(this, toState);
mxn._attachCurrentAttrLocationInfo();
},
_emitCurrentToken() {
const ctLoc = this.currentToken.location;
if (this.currentCharacterToken) {
this.currentCharacterToken.location.endLine = ctLoc.startLine;
this.currentCharacterToken.location.endCol = ctLoc.startCol;
this.currentCharacterToken.location.endOffset = ctLoc.startOffset;
}
if (this.currentToken.type === Tokenizer.EOF_TOKEN) {
ctLoc.endLine = ctLoc.startLine;
ctLoc.endCol = ctLoc.startCol;
ctLoc.endOffset = ctLoc.startOffset;
} else {
ctLoc.endLine = mxn.posTracker.line;
ctLoc.endCol = mxn.posTracker.col + 1;
ctLoc.endOffset = mxn.posTracker.offset + 1;
}
orig._emitCurrentToken.call(this);
},
_emitCurrentCharacterToken() {
const ctLoc = this.currentCharacterToken && this.currentCharacterToken.location;
if (ctLoc && ctLoc.endOffset === -1) {
ctLoc.endLine = mxn.posTracker.line;
ctLoc.endCol = mxn.posTracker.col;
ctLoc.endOffset = mxn.posTracker.offset;
}
orig._emitCurrentCharacterToken.call(this);
}
};
Object.keys(Tokenizer.MODE).forEach(modeName => {
const state = Tokenizer.MODE[modeName];
methods[state] = function(cp) {
mxn.ctLoc = mxn._getCurrentLocation();
orig[state].call(this, cp);
};
});
return methods;
}
}
module.exports = LocationInfoTokenizerMixin;
},{"../../tokenizer":88,"../../utils/mixin":93,"../position-tracking/preprocessor-mixin":82}],82:[function(require,module,exports){
'use strict';
const Mixin = require('../../utils/mixin');
class PositionTrackingPreprocessorMixin extends Mixin {
constructor(preprocessor) {
super(preprocessor);
this.preprocessor = preprocessor;
this.isEol = false;
this.lineStartPos = 0;
this.droppedBufferSize = 0;
this.offset = 0;
this.col = 0;
this.line = 1;
}
_getOverriddenMethods(mxn, orig) {
return {
advance() {
const pos = this.pos + 1;
const ch = this.html[pos];
if (mxn.isEol) {
mxn.isEol = false;
mxn.line++;
mxn.lineStartPos = pos;
}
if (ch === '\n' || (ch === '\r' && this.html[pos + 1] !== '\n')) {
mxn.isEol = true;
}
mxn.col = pos - mxn.lineStartPos + 1;
mxn.offset = mxn.droppedBufferSize + pos;
return orig.advance.call(this);
},
retreat() {
orig.retreat.call(this);
mxn.isEol = false;
mxn.col = this.pos - mxn.lineStartPos + 1;
},
dropParsedChunk() {
const prevPos = this.pos;
orig.dropParsedChunk.call(this);
const reduction = prevPos - this.pos;
mxn.lineStartPos -= reduction;
mxn.droppedBufferSize += reduction;
mxn.offset = mxn.droppedBufferSize + this.pos;
}
};
}
}
module.exports = PositionTrackingPreprocessorMixin;
},{"../../utils/mixin":93}],83:[function(require,module,exports){
'use strict';
const Parser = require('./parser');
const Serializer = require('./serializer');
exports.parse = function parse(html, options) {
const parser = new Parser(options);
return parser.parse(html);
};
exports.parseFragment = function parseFragment(fragmentContext, html, options) {
if (typeof fragmentContext === 'string') {
options = html;
html = fragmentContext;
fragmentContext = null;
}
const parser = new Parser(options);
return parser.parseFragment(html, fragmentContext);
};
exports.serialize = function(node, options) {
const serializer = new Serializer(node, options);
return serializer.serialize();
};
},{"./parser":85,"./serializer":87}],84:[function(require,module,exports){
'use strict';
const NOAH_ARK_CAPACITY = 3;
class FormattingElementList {
constructor(treeAdapter) {
this.length = 0;
this.entries = [];
this.treeAdapter = treeAdapter;
this.bookmark = null;
}
_getNoahArkConditionCandidates(newElement) {
const candidates = [];
if (this.length >= NOAH_ARK_CAPACITY) {
const neAttrsLength = this.treeAdapter.getAttrList(newElement).length;
const neTagName = this.treeAdapter.getTagName(newElement);
const neNamespaceURI = this.treeAdapter.getNamespaceURI(newElement);
for (let i = this.length - 1; i >= 0; i--) {
const entry = this.entries[i];
if (entry.type === FormattingElementList.MARKER_ENTRY) {
break;
}
const element = entry.element;
const elementAttrs = this.treeAdapter.getAttrList(element);
const isCandidate =
this.treeAdapter.getTagName(element) === neTagName &&
this.treeAdapter.getNamespaceURI(element) === neNamespaceURI &&
elementAttrs.length === neAttrsLength;
if (isCandidate) {
candidates.push({ idx: i, attrs: elementAttrs });
}
}
}
return candidates.length < NOAH_ARK_CAPACITY ? [] : candidates;
}
_ensureNoahArkCondition(newElement) {
const candidates = this._getNoahArkConditionCandidates(newElement);
let cLength = candidates.length;
if (cLength) {
const neAttrs = this.treeAdapter.getAttrList(newElement);
const neAttrsLength = neAttrs.length;
const neAttrsMap = Object.create(null);
for (let i = 0; i < neAttrsLength; i++) {
const neAttr = neAttrs[i];
neAttrsMap[neAttr.name] = neAttr.value;
}
for (let i = 0; i < neAttrsLength; i++) {
for (let j = 0; j < cLength; j++) {
const cAttr = candidates[j].attrs[i];
if (neAttrsMap[cAttr.name] !== cAttr.value) {
candidates.splice(j, 1);
cLength--;
}
if (candidates.length < NOAH_ARK_CAPACITY) {
return;
}
}
}
for (let i = cLength - 1; i >= NOAH_ARK_CAPACITY - 1; i--) {
this.entries.splice(candidates[i].idx, 1);
this.length--;
}
}
}
insertMarker() {
this.entries.push({ type: FormattingElementList.MARKER_ENTRY });
this.length++;
}
pushElement(element, token) {
this._ensureNoahArkCondition(element);
this.entries.push({
type: FormattingElementList.ELEMENT_ENTRY,
element: element,
token: token
});
this.length++;
}
insertElementAfterBookmark(element, token) {
let bookmarkIdx = this.length - 1;
for (; bookmarkIdx >= 0; bookmarkIdx--) {
if (this.entries[bookmarkIdx] === this.bookmark) {
break;
}
}
this.entries.splice(bookmarkIdx + 1, 0, {
type: FormattingElementList.ELEMENT_ENTRY,
element: element,
token: token
});
this.length++;
}
removeEntry(entry) {
for (let i = this.length - 1; i >= 0; i--) {
if (this.entries[i] === entry) {
this.entries.splice(i, 1);
this.length--;
break;
}
}
}
clearToLastMarker() {
while (this.length) {
const entry = this.entries.pop();
this.length--;
if (entry.type === FormattingElementList.MARKER_ENTRY) {
break;
}
}
}
getElementEntryInScopeWithTagName(tagName) {
for (let i = this.length - 1; i >= 0; i--) {
const entry = this.entries[i];
if (entry.type === FormattingElementList.MARKER_ENTRY) {
return null;
}
if (this.treeAdapter.getTagName(entry.element) === tagName) {
return entry;
}
}
return null;
}
getElementEntry(element) {
for (let i = this.length - 1; i >= 0; i--) {
const entry = this.entries[i];
if (entry.type === FormattingElementList.ELEMENT_ENTRY && entry.element === element) {
return entry;
}
}
return null;
}
}
FormattingElementList.MARKER_ENTRY = 'MARKER_ENTRY';
FormattingElementList.ELEMENT_ENTRY = 'ELEMENT_ENTRY';
module.exports = FormattingElementList;
},{}],85:[function(require,module,exports){
'use strict';
const Tokenizer = require('../tokenizer');
const OpenElementStack = require('./open-element-stack');
const FormattingElementList = require('./formatting-element-list');
const LocationInfoParserMixin = require('../extensions/location-info/parser-mixin');
const ErrorReportingParserMixin = require('../extensions/error-reporting/parser-mixin');
const Mixin = require('../utils/mixin');
const defaultTreeAdapter = require('../tree-adapters/default');
const mergeOptions = require('../utils/merge-options');
const doctype = require('../common/doctype');
const foreignContent = require('../common/foreign-content');
const ERR = require('../common/error-codes');
const unicode = require('../common/unicode');
const HTML = require('../common/html');
const $ = HTML.TAG_NAMES;
const NS = HTML.NAMESPACES;
const ATTRS = HTML.ATTRS;
const DEFAULT_OPTIONS = {
scriptingEnabled: true,
sourceCodeLocationInfo: false,
onParseError: null,
treeAdapter: defaultTreeAdapter
};
const HIDDEN_INPUT_TYPE = 'hidden';
const AA_OUTER_LOOP_ITER = 8;
const AA_INNER_LOOP_ITER = 3;
const INITIAL_MODE = 'INITIAL_MODE';
const BEFORE_HTML_MODE = 'BEFORE_HTML_MODE';
const BEFORE_HEAD_MODE = 'BEFORE_HEAD_MODE';
const IN_HEAD_MODE = 'IN_HEAD_MODE';
const IN_HEAD_NO_SCRIPT_MODE = 'IN_HEAD_NO_SCRIPT_MODE';
const AFTER_HEAD_MODE = 'AFTER_HEAD_MODE';
const IN_BODY_MODE = 'IN_BODY_MODE';
const TEXT_MODE = 'TEXT_MODE';
const IN_TABLE_MODE = 'IN_TABLE_MODE';
const IN_TABLE_TEXT_MODE = 'IN_TABLE_TEXT_MODE';
const IN_CAPTION_MODE = 'IN_CAPTION_MODE';
const IN_COLUMN_GROUP_MODE = 'IN_COLUMN_GROUP_MODE';
const IN_TABLE_BODY_MODE = 'IN_TABLE_BODY_MODE';
const IN_ROW_MODE = 'IN_ROW_MODE';
const IN_CELL_MODE = 'IN_CELL_MODE';
const IN_SELECT_MODE = 'IN_SELECT_MODE';
const IN_SELECT_IN_TABLE_MODE = 'IN_SELECT_IN_TABLE_MODE';
const IN_TEMPLATE_MODE = 'IN_TEMPLATE_MODE';
const AFTER_BODY_MODE = 'AFTER_BODY_MODE';
const IN_FRAMESET_MODE = 'IN_FRAMESET_MODE';
const AFTER_FRAMESET_MODE = 'AFTER_FRAMESET_MODE';
const AFTER_AFTER_BODY_MODE = 'AFTER_AFTER_BODY_MODE';
const AFTER_AFTER_FRAMESET_MODE = 'AFTER_AFTER_FRAMESET_MODE';
const INSERTION_MODE_RESET_MAP = {
[$.TR]: IN_ROW_MODE,
[$.TBODY]: IN_TABLE_BODY_MODE,
[$.THEAD]: IN_TABLE_BODY_MODE,
[$.TFOOT]: IN_TABLE_BODY_MODE,
[$.CAPTION]: IN_CAPTION_MODE,
[$.COLGROUP]: IN_COLUMN_GROUP_MODE,
[$.TABLE]: IN_TABLE_MODE,
[$.BODY]: IN_BODY_MODE,
[$.FRAMESET]: IN_FRAMESET_MODE
};
const TEMPLATE_INSERTION_MODE_SWITCH_MAP = {
[$.CAPTION]: IN_TABLE_MODE,
[$.COLGROUP]: IN_TABLE_MODE,
[$.TBODY]: IN_TABLE_MODE,
[$.TFOOT]: IN_TABLE_MODE,
[$.THEAD]: IN_TABLE_MODE,
[$.COL]: IN_COLUMN_GROUP_MODE,
[$.TR]: IN_TABLE_BODY_MODE,
[$.TD]: IN_ROW_MODE,
[$.TH]: IN_ROW_MODE
};
const TOKEN_HANDLERS = {
[INITIAL_MODE]: {
[Tokenizer.CHARACTER_TOKEN]: tokenInInitialMode,
[Tokenizer.NULL_CHARACTER_TOKEN]: tokenInInitialMode,
[Tokenizer.WHITESPACE_CHARACTER_TOKEN]: ignoreToken,
[Tokenizer.COMMENT_TOKEN]: appendComment,
[Tokenizer.DOCTYPE_TOKEN]: doctypeInInitialMode,
[Tokenizer.START_TAG_TOKEN]: tokenInInitialMode,
[Tokenizer.END_TAG_TOKEN]: tokenInInitialMode,
[Tokenizer.EOF_TOKEN]: tokenInInitialMode
},
[BEFORE_HTML_MODE]: {
[Tokenizer.CHARACTER_TOKEN]: tokenBeforeHtml,
[Tokenizer.NULL_CHARACTER_TOKEN]: tokenBeforeHtml,
[Tokenizer.WHITESPACE_CHARACTER_TOKEN]: ignoreToken,
[Tokenizer.COMMENT_TOKEN]: appendComment,
[Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
[Tokenizer.START_TAG_TOKEN]: startTagBeforeHtml,
[Tokenizer.END_TAG_TOKEN]: endTagBeforeHtml,
[Tokenizer.EOF_TOKEN]: tokenBeforeHtml
},
[BEFORE_HEAD_MODE]: {
[Tokenizer.CHARACTER_TOKEN]: tokenBeforeHead,
[Tokenizer.NULL_CHARACTER_TOKEN]: tokenBeforeHead,
[Tokenizer.WHITESPACE_CHARACTER_TOKEN]: ignoreToken,
[Tokenizer.COMMENT_TOKEN]: appendComment,
[Tokenizer.DOCTYPE_TOKEN]: misplacedDoctype,
[Tokenizer.START_TAG_TOKEN]: startTagBeforeHead,
[Tokenizer.END_TAG_TOKEN]: endTagBeforeHead,
[Tokenizer.EOF_TOKEN]: tokenBeforeHead
},
[IN_HEAD_MODE]: {
[Tokenizer.CHARACTER_TOKEN]: tokenInHead,
[Tokenizer.NULL_CHARACTER_TOKEN]: tokenInHead,
[Tokenizer.WHITESPACE_CHARACTER_TOKEN]: insertCharacters,
[Tokenizer.COMMENT_TOKEN]: appendComment,
[Tokenizer.DOCTYPE_TOKEN]: misplacedDoctype,
[Tokenizer.START_TAG_TOKEN]: startTagInHead,
[Tokenizer.END_TAG_TOKEN]: endTagInHead,
[Tokenizer.EOF_TOKEN]: tokenInHead
},
[IN_HEAD_NO_SCRIPT_MODE]: {
[Tokenizer.CHARACTER_TOKEN]: tokenInHeadNoScript,
[Tokenizer.NULL_CHARACTER_TOKEN]: tokenInHeadNoScript,
[Tokenizer.WHITESPACE_CHARACTER_TOKEN]: insertCharacters,
[Tokenizer.COMMENT_TOKEN]: appendComment,
[Tokenizer.DOCTYPE_TOKEN]: misplacedDoctype,
[Tokenizer.START_TAG_TOKEN]: startTagInHeadNoScript,
[Tokenizer.END_TAG_TOKEN]: endTagInHeadNoScript,
[Tokenizer.EOF_TOKEN]: tokenInHeadNoScript
},
[AFTER_HEAD_MODE]: {
[Tokenizer.CHARACTER_TOKEN]: tokenAfterHead,
[Tokenizer.NULL_CHARACTER_TOKEN]: tokenAfterHead,
[Tokenizer.WHITESPACE_CHARACTER_TOKEN]: insertCharacters,
[Tokenizer.COMMENT_TOKEN]: appendComment,
[Tokenizer.DOCTYPE_TOKEN]: misplacedDoctype,
[Tokenizer.START_TAG_TOKEN]: startTagAfterHead,
[Tokenizer.END_TAG_TOKEN]: endTagAfterHead,
[Tokenizer.EOF_TOKEN]: tokenAfterHead
},
[IN_BODY_MODE]: {
[Tokenizer.CHARACTER_TOKEN]: characterInBody,
[Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,
[Tokenizer.WHITESPACE_CHARACTER_TOKEN]: whitespaceCharacterInBody,
[Tokenizer.COMMENT_TOKEN]: appendComment,
[Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
[Tokenizer.START_TAG_TOKEN]: startTagInBody,
[Tokenizer.END_TAG_TOKEN]: endTagInBody,
[Tokenizer.EOF_TOKEN]: eofInBody
},
[TEXT_MODE]: {
[Tokenizer.CHARACTER_TOKEN]: insertCharacters,
[Tokenizer.NULL_CHARACTER_TOKEN]: insertCharacters,
[Tokenizer.WHITESPACE_CHARACTER_TOKEN]: insertCharacters,
[Tokenizer.COMMENT_TOKEN]: ignoreToken,
[Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
[Tokenizer.START_TAG_TOKEN]: ignoreToken,
[Tokenizer.END_TAG_TOKEN]: endTagInText,
[Tokenizer.EOF_TOKEN]: eofInText
},
[IN_TABLE_MODE]: {
[Tokenizer.CHARACTER_TOKEN]: characterInTable,
[Tokenizer.NULL_CHARACTER_TOKEN]: characterInTable,
[Tokenizer.WHITESPACE_CHARACTER_TOKEN]: characterInTable,
[Tokenizer.COMMENT_TOKEN]: appendComment,
[Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
[Tokenizer.START_TAG_TOKEN]: startTagInTable,
[Tokenizer.END_TAG_TOKEN]: endTagInTable,
[Tokenizer.EOF_TOKEN]: eofInBody
},
[IN_TABLE_TEXT_MODE]: {
[Tokenizer.CHARACTER_TOKEN]: characterInTableText,
[Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,
[Tokenizer.WHITESPACE_CHARACTER_TOKEN]: whitespaceCharacterInTableText,
[Tokenizer.COMMENT_TOKEN]: tokenInTableText,
[Tokenizer.DOCTYPE_TOKEN]: tokenInTableText,
[Tokenizer.START_TAG_TOKEN]: tokenInTableText,
[Tokenizer.END_TAG_TOKEN]: tokenInTableText,
[Tokenizer.EOF_TOKEN]: tokenInTableText
},
[IN_CAPTION_MODE]: {
[Tokenizer.CHARACTER_TOKEN]: characterInBody,
[Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,
[Tokenizer.WHITESPACE_CHARACTER_TOKEN]: whitespaceCharacterInBody,
[Tokenizer.COMMENT_TOKEN]: appendComment,
[Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
[Tokenizer.START_TAG_TOKEN]: startTagInCaption,
[Tokenizer.END_TAG_TOKEN]: endTagInCaption,
[Tokenizer.EOF_TOKEN]: eofInBody
},
[IN_COLUMN_GROUP_MODE]: {
[Tokenizer.CHARACTER_TOKEN]: tokenInColumnGroup,
[Tokenizer.NULL_CHARACTER_TOKEN]: tokenInColumnGroup,
[Tokenizer.WHITESPACE_CHARACTER_TOKEN]: insertCharacters,
[Tokenizer.COMMENT_TOKEN]: appendComment,
[Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
[Tokenizer.START_TAG_TOKEN]: startTagInColumnGroup,
[Tokenizer.END_TAG_TOKEN]: endTagInColumnGroup,
[Tokenizer.EOF_TOKEN]: eofInBody
},
[IN_TABLE_BODY_MODE]: {
[Tokenizer.CHARACTER_TOKEN]: characterInTable,
[Tokenizer.NULL_CHARACTER_TOKEN]: characterInTable,
[Tokenizer.WHITESPACE_CHARACTER_TOKEN]: characterInTable,
[Tokenizer.COMMENT_TOKEN]: appendComment,
[Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
[Tokenizer.START_TAG_TOKEN]: startTagInTableBody,
[Tokenizer.END_TAG_TOKEN]: endTagInTableBody,
[Tokenizer.EOF_TOKEN]: eofInBody
},
[IN_ROW_MODE]: {
[Tokenizer.CHARACTER_TOKEN]: characterInTable,
[Tokenizer.NULL_CHARACTER_TOKEN]: characterInTable,
[Tokenizer.WHITESPACE_CHARACTER_TOKEN]: characterInTable,
[Tokenizer.COMMENT_TOKEN]: appendComment,
[Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
[Tokenizer.START_TAG_TOKEN]: startTagInRow,
[Tokenizer.END_TAG_TOKEN]: endTagInRow,
[Tokenizer.EOF_TOKEN]: eofInBody
},
[IN_CELL_MODE]: {
[Tokenizer.CHARACTER_TOKEN]: characterInBody,
[Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,
[Tokenizer.WHITESPACE_CHARACTER_TOKEN]: whitespaceCharacterInBody,
[Tokenizer.COMMENT_TOKEN]: appendComment,
[Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
[Tokenizer.START_TAG_TOKEN]: startTagInCell,
[Tokenizer.END_TAG_TOKEN]: endTagInCell,
[Tokenizer.EOF_TOKEN]: eofInBody
},
[IN_SELECT_MODE]: {
[Tokenizer.CHARACTER_TOKEN]: insertCharacters,
[Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,
[Tokenizer.WHITESPACE_CHARACTER_TOKEN]: insertCharacters,
[Tokenizer.COMMENT_TOKEN]: appendComment,
[Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
[Tokenizer.START_TAG_TOKEN]: startTagInSelect,
[Tokenizer.END_TAG_TOKEN]: endTagInSelect,
[Tokenizer.EOF_TOKEN]: eofInBody
},
[IN_SELECT_IN_TABLE_MODE]: {
[Tokenizer.CHARACTER_TOKEN]: insertCharacters,
[Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,
[Tokenizer.WHITESPACE_CHARACTER_TOKEN]: insertCharacters,
[Tokenizer.COMMENT_TOKEN]: appendComment,
[Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
[Tokenizer.START_TAG_TOKEN]: startTagInSelectInTable,
[Tokenizer.END_TAG_TOKEN]: endTagInSelectInTable,
[Tokenizer.EOF_TOKEN]: eofInBody
},
[IN_TEMPLATE_MODE]: {
[Tokenizer.CHARACTER_TOKEN]: characterInBody,
[Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,
[Tokenizer.WHITESPACE_CHARACTER_TOKEN]: whitespaceCharacterInBody,
[Tokenizer.COMMENT_TOKEN]: appendComment,
[Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
[Tokenizer.START_TAG_TOKEN]: startTagInTemplate,
[Tokenizer.END_TAG_TOKEN]: endTagInTemplate,
[Tokenizer.EOF_TOKEN]: eofInTemplate
},
[AFTER_BODY_MODE]: {
[Tokenizer.CHARACTER_TOKEN]: tokenAfterBody,
[Tokenizer.NULL_CHARACTER_TOKEN]: tokenAfterBody,
[Tokenizer.WHITESPACE_CHARACTER_TOKEN]: whitespaceCharacterInBody,
[Tokenizer.COMMENT_TOKEN]: appendCommentToRootHtmlElement,
[Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
[Tokenizer.START_TAG_TOKEN]: startTagAfterBody,
[Tokenizer.END_TAG_TOKEN]: endTagAfterBody,
[Tokenizer.EOF_TOKEN]: stopParsing
},
[IN_FRAMESET_MODE]: {
[Tokenizer.CHARACTER_TOKEN]: ignoreToken,
[Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,
[Tokenizer.WHITESPACE_CHARACTER_TOKEN]: insertCharacters,
[Tokenizer.COMMENT_TOKEN]: appendComment,
[Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
[Tokenizer.START_TAG_TOKEN]: startTagInFrameset,
[Tokenizer.END_TAG_TOKEN]: endTagInFrameset,
[Tokenizer.EOF_TOKEN]: stopParsing
},
[AFTER_FRAMESET_MODE]: {
[Tokenizer.CHARACTER_TOKEN]: ignoreToken,
[Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,
[Tokenizer.WHITESPACE_CHARACTER_TOKEN]: insertCharacters,
[Tokenizer.COMMENT_TOKEN]: appendComment,
[Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
[Tokenizer.START_TAG_TOKEN]: startTagAfterFrameset,
[Tokenizer.END_TAG_TOKEN]: endTagAfterFrameset,
[Tokenizer.EOF_TOKEN]: stopParsing
},
[AFTER_AFTER_BODY_MODE]: {
[Tokenizer.CHARACTER_TOKEN]: tokenAfterAfterBody,
[Tokenizer.NULL_CHARACTER_TOKEN]: tokenAfterAfterBody,
[Tokenizer.WHITESPACE_CHARACTER_TOKEN]: whitespaceCharacterInBody,
[Tokenizer.COMMENT_TOKEN]: appendCommentToDocument,
[Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
[Tokenizer.START_TAG_TOKEN]: startTagAfterAfterBody,
[Tokenizer.END_TAG_TOKEN]: tokenAfterAfterBody,
[Tokenizer.EOF_TOKEN]: stopParsing
},
[AFTER_AFTER_FRAMESET_MODE]: {
[Tokenizer.CHARACTER_TOKEN]: ignoreToken,
[Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,
[Tokenizer.WHITESPACE_CHARACTER_TOKEN]: whitespaceCharacterInBody,
[Tokenizer.COMMENT_TOKEN]: appendCommentToDocument,
[Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
[Tokenizer.START_TAG_TOKEN]: startTagAfterAfterFrameset,
[Tokenizer.END_TAG_TOKEN]: ignoreToken,
[Tokenizer.EOF_TOKEN]: stopParsing
}
};
class Parser {
constructor(options) {
this.options = mergeOptions(DEFAULT_OPTIONS, options);
this.treeAdapter = this.options.treeAdapter;
this.pendingScript = null;
if (this.options.sourceCodeLocationInfo) {
Mixin.install(this, LocationInfoParserMixin);
}
if (this.options.onParseError) {
Mixin.install(this, ErrorReportingParserMixin, { onParseError: this.options.onParseError });
}
}
parse(html) {
const document = this.treeAdapter.createDocument();
this._bootstrap(document, null);
this.tokenizer.write(html, true);
this._runParsingLoop(null);
return document;
}
parseFragment(html, fragmentContext) {
if (!fragmentContext) {
fragmentContext = this.treeAdapter.createElement($.TEMPLATE, NS.HTML, []);
}
const documentMock = this.treeAdapter.createElement('documentmock', NS.HTML, []);
this._bootstrap(documentMock, fragmentContext);
if (this.treeAdapter.getTagName(fragmentContext) === $.TEMPLATE) {
this._pushTmplInsertionMode(IN_TEMPLATE_MODE);
}
this._initTokenizerForFragmentParsing();
this._insertFakeRootElement();
this._resetInsertionMode();
this._findFormInFragmentContext();
this.tokenizer.write(html, true);
this._runParsingLoop(null);
const rootElement = this.treeAdapter.getFirstChild(documentMock);
const fragment = this.treeAdapter.createDocumentFragment();
this._adoptNodes(rootElement, fragment);
return fragment;
}
_bootstrap(document, fragmentContext) {
this.tokenizer = new Tokenizer(this.options);
this.stopped = false;
this.insertionMode = INITIAL_MODE;
this.originalInsertionMode = '';
this.document = document;
this.fragmentContext = fragmentContext;
this.headElement = null;
this.formElement = null;
this.openElements = new OpenElementStack(this.document, this.treeAdapter);
this.activeFormattingElements = new FormattingElementList(this.treeAdapter);
this.tmplInsertionModeStack = [];
this.tmplInsertionModeStackTop = -1;
this.currentTmplInsertionMode = null;
this.pendingCharacterTokens = [];
this.hasNonWhitespacePendingCharacterToken = false;
this.framesetOk = true;
this.skipNextNewLine = false;
this.fosterParentingEnabled = false;
}
_err() {
}
_runParsingLoop(scriptHandler) {
while (!this.stopped) {
this._setupTokenizerCDATAMode();
const token = this.tokenizer.getNextToken();
if (token.type === Tokenizer.HIBERNATION_TOKEN) {
break;
}
if (this.skipNextNewLine) {
this.skipNextNewLine = false;
if (token.type === Tokenizer.WHITESPACE_CHARACTER_TOKEN && token.chars[0] === '\n') {
if (token.chars.length === 1) {
continue;
}
token.chars = token.chars.substr(1);
}
}
this._processInputToken(token);
if (scriptHandler && this.pendingScript) {
break;
}
}
}
runParsingLoopForCurrentChunk(writeCallback, scriptHandler) {
this._runParsingLoop(scriptHandler);
if (scriptHandler && this.pendingScript) {
const script = this.pendingScript;
this.pendingScript = null;
scriptHandler(script);
return;
}
if (writeCallback) {
writeCallback();
}
}
_setupTokenizerCDATAMode() {
const current = this._getAdjustedCurrentElement();
this.tokenizer.allowCDATA =
current &&
current !== this.document &&
this.treeAdapter.getNamespaceURI(current) !== NS.HTML &&
!this._isIntegrationPoint(current);
}
_switchToTextParsing(currentToken, nextTokenizerState) {
this._insertElement(currentToken, NS.HTML);
this.tokenizer.state = nextTokenizerState;
this.originalInsertionMode = this.insertionMode;
this.insertionMode = TEXT_MODE;
}
switchToPlaintextParsing() {
this.insertionMode = TEXT_MODE;
this.originalInsertionMode = IN_BODY_MODE;
this.tokenizer.state = Tokenizer.MODE.PLAINTEXT;
}
_getAdjustedCurrentElement() {
return this.openElements.stackTop === 0 && this.fragmentContext
? this.fragmentContext
: this.openElements.current;
}
_findFormInFragmentContext() {
let node = this.fragmentContext;
do {
if (this.treeAdapter.getTagName(node) === $.FORM) {
this.formElement = node;
break;
}
node = this.treeAdapter.getParentNode(node);
} while (node);
}
_initTokenizerForFragmentParsing() {
if (this.treeAdapter.getNamespaceURI(this.fragmentContext) === NS.HTML) {
const tn = this.treeAdapter.getTagName(this.fragmentContext);
if (tn === $.TITLE || tn === $.TEXTAREA) {
this.tokenizer.state = Tokenizer.MODE.RCDATA;
} else if (
tn === $.STYLE ||
tn === $.XMP ||
tn === $.IFRAME ||
tn === $.NOEMBED ||
tn === $.NOFRAMES ||
tn === $.NOSCRIPT
) {
this.tokenizer.state = Tokenizer.MODE.RAWTEXT;
} else if (tn === $.SCRIPT) {
this.tokenizer.state = Tokenizer.MODE.SCRIPT_DATA;
} else if (tn === $.PLAINTEXT) {
this.tokenizer.state = Tokenizer.MODE.PLAINTEXT;
}
}
}
_setDocumentType(token) {
const name = token.name || '';
const publicId = token.publicId || '';
const systemId = token.systemId || '';
this.treeAdapter.setDocumentType(this.document, name, publicId, systemId);
}
_attachElementToTree(element) {
if (this._shouldFosterParentOnInsertion()) {
this._fosterParentElement(element);
} else {
const parent = this.openElements.currentTmplContent || this.openElements.current;
this.treeAdapter.appendChild(parent, element);
}
}
_appendElement(token, namespaceURI) {
const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);
this._attachElementToTree(element);
}
_insertElement(token, namespaceURI) {
const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);
this._attachElementToTree(element);
this.openElements.push(element);
}
_insertFakeElement(tagName) {
const element = this.treeAdapter.createElement(tagName, NS.HTML, []);
this._attachElementToTree(element);
this.openElements.push(element);
}
_insertTemplate(token) {
const tmpl = this.treeAdapter.createElement(token.tagName, NS.HTML, token.attrs);
const content = this.treeAdapter.createDocumentFragment();
this.treeAdapter.setTemplateContent(tmpl, content);
this._attachElementToTree(tmpl);
this.openElements.push(tmpl);
}
_insertFakeRootElement() {
const element = this.treeAdapter.createElement($.HTML, NS.HTML, []);
this.treeAdapter.appendChild(this.openElements.current, element);
this.openElements.push(element);
}
_appendCommentNode(token, parent) {
const commentNode = this.treeAdapter.createCommentNode(token.data);
this.treeAdapter.appendChild(parent, commentNode);
}
_insertCharacters(token) {
if (this._shouldFosterParentOnInsertion()) {
this._fosterParentText(token.chars);
} else {
const parent = this.openElements.currentTmplContent || this.openElements.current;
this.treeAdapter.insertText(parent, token.chars);
}
}
_adoptNodes(donor, recipient) {
for (let child = this.treeAdapter.getFirstChild(donor); child; child = this.treeAdapter.getFirstChild(donor)) {
this.treeAdapter.detachNode(child);
this.treeAdapter.appendChild(recipient, child);
}
}
_shouldProcessTokenInForeignContent(token) {
const current = this._getAdjustedCurrentElement();
if (!current || current === this.document) {
return false;
}
const ns = this.treeAdapter.getNamespaceURI(current);
if (ns === NS.HTML) {
return false;
}
if (
this.treeAdapter.getTagName(current) === $.ANNOTATION_XML &&
ns === NS.MATHML &&
token.type === Tokenizer.START_TAG_TOKEN &&
token.tagName === $.SVG
) {
return false;
}
const isCharacterToken =
token.type === Tokenizer.CHARACTER_TOKEN ||
token.type === Tokenizer.NULL_CHARACTER_TOKEN ||
token.type === Tokenizer.WHITESPACE_CHARACTER_TOKEN;
const isMathMLTextStartTag =
token.type === Tokenizer.START_TAG_TOKEN && token.tagName !== $.MGLYPH && token.tagName !== $.MALIGNMARK;
if ((isMathMLTextStartTag || isCharacterToken) && this._isIntegrationPoint(current, NS.MATHML)) {
return false;
}
if (
(token.type === Tokenizer.START_TAG_TOKEN || isCharacterToken) &&
this._isIntegrationPoint(current, NS.HTML)
) {
return false;
}
return token.type !== Tokenizer.EOF_TOKEN;
}
_processToken(token) {
TOKEN_HANDLERS[this.insertionMode][token.type](this, token);
}
_processTokenInBodyMode(token) {
TOKEN_HANDLERS[IN_BODY_MODE][token.type](this, token);
}
_processTokenInForeignContent(token) {
if (token.type === Tokenizer.CHARACTER_TOKEN) {
characterInForeignContent(this, token);
} else if (token.type === Tokenizer.NULL_CHARACTER_TOKEN) {
nullCharacterInForeignContent(this, token);
} else if (token.type === Tokenizer.WHITESPACE_CHARACTER_TOKEN) {
insertCharacters(this, token);
} else if (token.type === Tokenizer.COMMENT_TOKEN) {
appendComment(this, token);
} else if (token.type === Tokenizer.START_TAG_TOKEN) {
startTagInForeignContent(this, token);
} else if (token.type === Tokenizer.END_TAG_TOKEN) {
endTagInForeignContent(this, token);
}
}
_processInputToken(token) {
if (this._shouldProcessTokenInForeignContent(token)) {
this._processTokenInForeignContent(token);
} else {
this._processToken(token);
}
if (token.type === Tokenizer.START_TAG_TOKEN && token.selfClosing && !token.ackSelfClosing) {
this._err(ERR.nonVoidHtmlElementStartTagWithTrailingSolidus);
}
}
_isIntegrationPoint(element, foreignNS) {
const tn = this.treeAdapter.getTagName(element);
const ns = this.treeAdapter.getNamespaceURI(element);
const attrs = this.treeAdapter.getAttrList(element);
return foreignContent.isIntegrationPoint(tn, ns, attrs, foreignNS);
}
_reconstructActiveFormattingElements() {
const listLength = this.activeFormattingElements.length;
if (listLength) {
let unopenIdx = listLength;
let entry = null;
do {
unopenIdx--;
entry = this.activeFormattingElements.entries[unopenIdx];
if (entry.type === FormattingElementList.MARKER_ENTRY || this.openElements.contains(entry.element)) {
unopenIdx++;
break;
}
} while (unopenIdx > 0);
for (let i = unopenIdx; i < listLength; i++) {
entry = this.activeFormattingElements.entries[i];
this._insertElement(entry.token, this.treeAdapter.getNamespaceURI(entry.element));
entry.element = this.openElements.current;
}
}
}
_closeTableCell() {
this.openElements.generateImpliedEndTags();
this.openElements.popUntilTableCellPopped();
this.activeFormattingElements.clearToLastMarker();
this.insertionMode = IN_ROW_MODE;
}
_closePElement() {
this.openElements.generateImpliedEndTagsWithExclusion($.P);
this.openElements.popUntilTagNamePopped($.P);
}
_resetInsertionMode() {
for (let i = this.openElements.stackTop, last = false; i >= 0; i--) {
let element = this.openElements.items[i];
if (i === 0) {
last = true;
if (this.fragmentContext) {
element = this.fragmentContext;
}
}
const tn = this.treeAdapter.getTagName(element);
const newInsertionMode = INSERTION_MODE_RESET_MAP[tn];
if (newInsertionMode) {
this.insertionMode = newInsertionMode;
break;
} else if (!last && (tn === $.TD || tn === $.TH)) {
this.insertionMode = IN_CELL_MODE;
break;
} else if (!last && tn === $.HEAD) {
this.insertionMode = IN_HEAD_MODE;
break;
} else if (tn === $.SELECT) {
this._resetInsertionModeForSelect(i);
break;
} else if (tn === $.TEMPLATE) {
this.insertionMode = this.currentTmplInsertionMode;
break;
} else if (tn === $.HTML) {
this.insertionMode = this.headElement ? AFTER_HEAD_MODE : BEFORE_HEAD_MODE;
break;
} else if (last) {
this.insertionMode = IN_BODY_MODE;
break;
}
}
}
_resetInsertionModeForSelect(selectIdx) {
if (selectIdx > 0) {
for (let i = selectIdx - 1; i > 0; i--) {
const ancestor = this.openElements.items[i];
const tn = this.treeAdapter.getTagName(ancestor);
if (tn === $.TEMPLATE) {
break;
} else if (tn === $.TABLE) {
this.insertionMode = IN_SELECT_IN_TABLE_MODE;
return;
}
}
}
this.insertionMode = IN_SELECT_MODE;
}
_pushTmplInsertionMode(mode) {
this.tmplInsertionModeStack.push(mode);
this.tmplInsertionModeStackTop++;
this.currentTmplInsertionMode = mode;
}
_popTmplInsertionMode() {
this.tmplInsertionModeStack.pop();
this.tmplInsertionModeStackTop--;
this.currentTmplInsertionMode = this.tmplInsertionModeStack[this.tmplInsertionModeStackTop];
}
_isElementCausesFosterParenting(element) {
const tn = this.treeAdapter.getTagName(element);
return tn === $.TABLE || tn === $.TBODY || tn === $.TFOOT || tn === $.THEAD || tn === $.TR;
}
_shouldFosterParentOnInsertion() {
return this.fosterParentingEnabled && this._isElementCausesFosterParenting(this.openElements.current);
}
_findFosterParentingLocation() {
const location = {
parent: null,
beforeElement: null
};
for (let i = this.openElements.stackTop; i >= 0; i--) {
const openElement = this.openElements.items[i];
const tn = this.treeAdapter.getTagName(openElement);
const ns = this.treeAdapter.getNamespaceURI(openElement);
if (tn === $.TEMPLATE && ns === NS.HTML) {
location.parent = this.treeAdapter.getTemplateContent(openElement);
break;
} else if (tn === $.TABLE) {
location.parent = this.treeAdapter.getParentNode(openElement);
if (location.parent) {
location.beforeElement = openElement;
} else {
location.parent = this.openElements.items[i - 1];
}
break;
}
}
if (!location.parent) {
location.parent = this.openElements.items[0];
}
return location;
}
_fosterParentElement(element) {
const location = this._findFosterParentingLocation();
if (location.beforeElement) {
this.treeAdapter.insertBefore(location.parent, element, location.beforeElement);
} else {
this.treeAdapter.appendChild(location.parent, element);
}
}
_fosterParentText(chars) {
const location = this._findFosterParentingLocation();
if (location.beforeElement) {
this.treeAdapter.insertTextBefore(location.parent, chars, location.beforeElement);
} else {
this.treeAdapter.insertText(location.parent, chars);
}
}
_isSpecialElement(element) {
const tn = this.treeAdapter.getTagName(element);
const ns = this.treeAdapter.getNamespaceURI(element);
return HTML.SPECIAL_ELEMENTS[ns][tn];
}
}
module.exports = Parser;
function aaObtainFormattingElementEntry(p, token) {
let formattingElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName(token.tagName);
if (formattingElementEntry) {
if (!p.openElements.contains(formattingElementEntry.element)) {
p.activeFormattingElements.removeEntry(formattingElementEntry);
formattingElementEntry = null;
} else if (!p.openElements.hasInScope(token.tagName)) {
formattingElementEntry = null;
}
} else {
genericEndTagInBody(p, token);
}
return formattingElementEntry;
}
function aaObtainFurthestBlock(p, formattingElementEntry) {
let furthestBlock = null;
for (let i = p.openElements.stackTop; i >= 0; i--) {
const element = p.openElements.items[i];
if (element === formattingElementEntry.element) {
break;
}
if (p._isSpecialElement(element)) {
furthestBlock = element;
}
}
if (!furthestBlock) {
p.openElements.popUntilElementPopped(formattingElementEntry.element);
p.activeFormattingElements.removeEntry(formattingElementEntry);
}
return furthestBlock;
}
function aaInnerLoop(p, furthestBlock, formattingElement) {
let lastElement = furthestBlock;
let nextElement = p.openElements.getCommonAncestor(furthestBlock);
for (let i = 0, element = nextElement; element !== formattingElement; i++, element = nextElement) {
nextElement = p.openElements.getCommonAncestor(element);
const elementEntry = p.activeFormattingElements.getElementEntry(element);
const counterOverflow = elementEntry && i >= AA_INNER_LOOP_ITER;
const shouldRemoveFromOpenElements = !elementEntry || counterOverflow;
if (shouldRemoveFromOpenElements) {
if (counterOverflow) {
p.activeFormattingElements.removeEntry(elementEntry);
}
p.openElements.remove(element);
} else {
element = aaRecreateElementFromEntry(p, elementEntry);
if (lastElement === furthestBlock) {
p.activeFormattingElements.bookmark = elementEntry;
}
p.treeAdapter.detachNode(lastElement);
p.treeAdapter.appendChild(element, lastElement);
lastElement = element;
}
}
return lastElement;
}
function aaRecreateElementFromEntry(p, elementEntry) {
const ns = p.treeAdapter.getNamespaceURI(elementEntry.element);
const newElement = p.treeAdapter.createElement(elementEntry.token.tagName, ns, elementEntry.token.attrs);
p.openElements.replace(elementEntry.element, newElement);
elementEntry.element = newElement;
return newElement;
}
function aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement) {
if (p._isElementCausesFosterParenting(commonAncestor)) {
p._fosterParentElement(lastElement);
} else {
const tn = p.treeAdapter.getTagName(commonAncestor);
const ns = p.treeAdapter.getNamespaceURI(commonAncestor);
if (tn === $.TEMPLATE && ns === NS.HTML) {
commonAncestor = p.treeAdapter.getTemplateContent(commonAncestor);
}
p.treeAdapter.appendChild(commonAncestor, lastElement);
}
}
function aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry) {
const ns = p.treeAdapter.getNamespaceURI(formattingElementEntry.element);
const token = formattingElementEntry.token;
const newElement = p.treeAdapter.createElement(token.tagName, ns, token.attrs);
p._adoptNodes(furthestBlock, newElement);
p.treeAdapter.appendChild(furthestBlock, newElement);
p.activeFormattingElements.insertElementAfterBookmark(newElement, formattingElementEntry.token);
p.activeFormattingElements.removeEntry(formattingElementEntry);
p.openElements.remove(formattingElementEntry.element);
p.openElements.insertAfter(furthestBlock, newElement);
}
function callAdoptionAgency(p, token) {
let formattingElementEntry;
for (let i = 0; i < AA_OUTER_LOOP_ITER; i++) {
formattingElementEntry = aaObtainFormattingElementEntry(p, token, formattingElementEntry);
if (!formattingElementEntry) {
break;
}
const furthestBlock = aaObtainFurthestBlock(p, formattingElementEntry);
if (!furthestBlock) {
break;
}
p.activeFormattingElements.bookmark = formattingElementEntry;
const lastElement = aaInnerLoop(p, furthestBlock, formattingElementEntry.element);
const commonAncestor = p.openElements.getCommonAncestor(formattingElementEntry.element);
p.treeAdapter.detachNode(lastElement);
aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement);
aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry);
}
}
function ignoreToken() {
}
function misplacedDoctype(p) {
p._err(ERR.misplacedDoctype);
}
function appendComment(p, token) {
p._appendCommentNode(token, p.openElements.currentTmplContent || p.openElements.current);
}
function appendCommentToRootHtmlElement(p, token) {
p._appendCommentNode(token, p.openElements.items[0]);
}
function appendCommentToDocument(p, token) {
p._appendCommentNode(token, p.document);
}
function insertCharacters(p, token) {
p._insertCharacters(token);
}
function stopParsing(p) {
p.stopped = true;
}
function doctypeInInitialMode(p, token) {
p._setDocumentType(token);
const mode = token.forceQuirks ? HTML.DOCUMENT_MODE.QUIRKS : doctype.getDocumentMode(token);
if (!doctype.isConforming(token)) {
p._err(ERR.nonConformingDoctype);
}
p.treeAdapter.setDocumentMode(p.document, mode);
p.insertionMode = BEFORE_HTML_MODE;
}
function tokenInInitialMode(p, token) {
p._err(ERR.missingDoctype, { beforeToken: true });
p.treeAdapter.setDocumentMode(p.document, HTML.DOCUMENT_MODE.QUIRKS);
p.insertionMode = BEFORE_HTML_MODE;
p._processToken(token);
}
function startTagBeforeHtml(p, token) {
if (token.tagName === $.HTML) {
p._insertElement(token, NS.HTML);
p.insertionMode = BEFORE_HEAD_MODE;
} else {
tokenBeforeHtml(p, token);
}
}
function endTagBeforeHtml(p, token) {
const tn = token.tagName;
if (tn === $.HTML || tn === $.HEAD || tn === $.BODY || tn === $.BR) {
tokenBeforeHtml(p, token);
}
}
function tokenBeforeHtml(p, token) {
p._insertFakeRootElement();
p.insertionMode = BEFORE_HEAD_MODE;
p._processToken(token);
}
function startTagBeforeHead(p, token) {
const tn = token.tagName;
if (tn === $.HTML) {
startTagInBody(p, token);
} else if (tn === $.HEAD) {
p._insertElement(token, NS.HTML);
p.headElement = p.openElements.current;
p.insertionMode = IN_HEAD_MODE;
} else {
tokenBeforeHead(p, token);
}
}
function endTagBeforeHead(p, token) {
const tn = token.tagName;
if (tn === $.HEAD || tn === $.BODY || tn === $.HTML || tn === $.BR) {
tokenBeforeHead(p, token);
} else {
p._err(ERR.endTagWithoutMatchingOpenElement);
}
}
function tokenBeforeHead(p, token) {
p._insertFakeElement($.HEAD);
p.headElement = p.openElements.current;
p.insertionMode = IN_HEAD_MODE;
p._processToken(token);
}
function startTagInHead(p, token) {
const tn = token.tagName;
if (tn === $.HTML) {
startTagInBody(p, token);
} else if (tn === $.BASE || tn === $.BASEFONT || tn === $.BGSOUND || tn === $.LINK || tn === $.META) {
p._appendElement(token, NS.HTML);
token.ackSelfClosing = true;
} else if (tn === $.TITLE) {
p._switchToTextParsing(token, Tokenizer.MODE.RCDATA);
} else if (tn === $.NOSCRIPT) {
if (p.options.scriptingEnabled) {
p._switchToTextParsing(token, Tokenizer.MODE.RAWTEXT);
} else {
p._insertElement(token, NS.HTML);
p.insertionMode = IN_HEAD_NO_SCRIPT_MODE;
}
} else if (tn === $.NOFRAMES || tn === $.STYLE) {
p._switchToTextParsing(token, Tokenizer.MODE.RAWTEXT);
} else if (tn === $.SCRIPT) {
p._switchToTextParsing(token, Tokenizer.MODE.SCRIPT_DATA);
} else if (tn === $.TEMPLATE) {
p._insertTemplate(token, NS.HTML);
p.activeFormattingElements.insertMarker();
p.framesetOk = false;
p.insertionMode = IN_TEMPLATE_MODE;
p._pushTmplInsertionMode(IN_TEMPLATE_MODE);
} else if (tn === $.HEAD) {
p._err(ERR.misplacedStartTagForHeadElement);
} else {
tokenInHead(p, token);
}
}
function endTagInHead(p, token) {
const tn = token.tagName;
if (tn === $.HEAD) {
p.openElements.pop();
p.insertionMode = AFTER_HEAD_MODE;
} else if (tn === $.BODY || tn === $.BR || tn === $.HTML) {
tokenInHead(p, token);
} else if (tn === $.TEMPLATE) {
if (p.openElements.tmplCount > 0) {
p.openElements.generateImpliedEndTagsThoroughly();
if (p.openElements.currentTagName !== $.TEMPLATE) {
p._err(ERR.closingOfElementWithOpenChildElements);
}
p.openElements.popUntilTagNamePopped($.TEMPLATE);
p.activeFormattingElements.clearToLastMarker();
p._popTmplInsertionMode();
p._resetInsertionMode();
} else {
p._err(ERR.endTagWithoutMatchingOpenElement);
}
} else {
p._err(ERR.endTagWithoutMatchingOpenElement);
}
}
function tokenInHead(p, token) {
p.openElements.pop();
p.insertionMode = AFTER_HEAD_MODE;
p._processToken(token);
}
function startTagInHeadNoScript(p, token) {
const tn = token.tagName;
if (tn === $.HTML) {
startTagInBody(p, token);
} else if (
tn === $.BASEFONT ||
tn === $.BGSOUND ||
tn === $.HEAD ||
tn === $.LINK ||
tn === $.META ||
tn === $.NOFRAMES ||
tn === $.STYLE
) {
startTagInHead(p, token);
} else if (tn === $.NOSCRIPT) {
p._err(ERR.nestedNoscriptInHead);
} else {
tokenInHeadNoScript(p, token);
}
}
function endTagInHeadNoScript(p, token) {
const tn = token.tagName;
if (tn === $.NOSCRIPT) {
p.openElements.pop();
p.insertionMode = IN_HEAD_MODE;
} else if (tn === $.BR) {
tokenInHeadNoScript(p, token);
} else {
p._err(ERR.endTagWithoutMatchingOpenElement);
}
}
function tokenInHeadNoScript(p, token) {
const errCode =
token.type === Tokenizer.EOF_TOKEN ? ERR.openElementsLeftAfterEof : ERR.disallowedContentInNoscriptInHead;
p._err(errCode);
p.openElements.pop();
p.insertionMode = IN_HEAD_MODE;
p._processToken(token);
}
function startTagAfterHead(p, token) {
const tn = token.tagName;
if (tn === $.HTML) {
startTagInBody(p, token);
} else if (tn === $.BODY) {
p._insertElement(token, NS.HTML);
p.framesetOk = false;
p.insertionMode = IN_BODY_MODE;
} else if (tn === $.FRAMESET) {
p._insertElement(token, NS.HTML);
p.insertionMode = IN_FRAMESET_MODE;
} else if (
tn === $.BASE ||
tn === $.BASEFONT ||
tn === $.BGSOUND ||
tn === $.LINK ||
tn === $.META ||
tn === $.NOFRAMES ||
tn === $.SCRIPT ||
tn === $.STYLE ||
tn === $.TEMPLATE ||
tn === $.TITLE
) {
p._err(ERR.abandonedHeadElementChild);
p.openElements.push(p.headElement);
startTagInHead(p, token);
p.openElements.remove(p.headElement);
} else if (tn === $.HEAD) {
p._err(ERR.misplacedStartTagForHeadElement);
} else {
tokenAfterHead(p, token);
}
}
function endTagAfterHead(p, token) {
const tn = token.tagName;
if (tn === $.BODY || tn === $.HTML || tn === $.BR) {
tokenAfterHead(p, token);
} else if (tn === $.TEMPLATE) {
endTagInHead(p, token);
} else {
p._err(ERR.endTagWithoutMatchingOpenElement);
}
}
function tokenAfterHead(p, token) {
p._insertFakeElement($.BODY);
p.insertionMode = IN_BODY_MODE;
p._processToken(token);
}
function whitespaceCharacterInBody(p, token) {
p._reconstructActiveFormattingElements();
p._insertCharacters(token);
}
function characterInBody(p, token) {
p._reconstructActiveFormattingElements();
p._insertCharacters(token);
p.framesetOk = false;
}
function htmlStartTagInBody(p, token) {
if (p.openElements.tmplCount === 0) {
p.treeAdapter.adoptAttributes(p.openElements.items[0], token.attrs);
}
}
function bodyStartTagInBody(p, token) {
const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();
if (bodyElement && p.openElements.tmplCount === 0) {
p.framesetOk = false;
p.treeAdapter.adoptAttributes(bodyElement, token.attrs);
}
}
function framesetStartTagInBody(p, token) {
const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();
if (p.framesetOk && bodyElement) {
p.treeAdapter.detachNode(bodyElement);
p.openElements.popAllUpToHtmlElement();
p._insertElement(token, NS.HTML);
p.insertionMode = IN_FRAMESET_MODE;
}
}
function addressStartTagInBody(p, token) {
if (p.openElements.hasInButtonScope($.P)) {
p._closePElement();
}
p._insertElement(token, NS.HTML);
}
function numberedHeaderStartTagInBody(p, token) {
if (p.openElements.hasInButtonScope($.P)) {
p._closePElement();
}
const tn = p.openElements.currentTagName;
if (tn === $.H1 || tn === $.H2 || tn === $.H3 || tn === $.H4 || tn === $.H5 || tn === $.H6) {
p.openElements.pop();
}
p._insertElement(token, NS.HTML);
}
function preStartTagInBody(p, token) {
if (p.openElements.hasInButtonScope($.P)) {
p._closePElement();
}
p._insertElement(token, NS.HTML);
p.skipNextNewLine = true;
p.framesetOk = false;
}
function formStartTagInBody(p, token) {
const inTemplate = p.openElements.tmplCount > 0;
if (!p.formElement || inTemplate) {
if (p.openElements.hasInButtonScope($.P)) {
p._closePElement();
}
p._insertElement(token, NS.HTML);
if (!inTemplate) {
p.formElement = p.openElements.current;
}
}
}
function listItemStartTagInBody(p, token) {
p.framesetOk = false;
const tn = token.tagName;
for (let i = p.openElements.stackTop; i >= 0; i--) {
const element = p.openElements.items[i];
const elementTn = p.treeAdapter.getTagName(element);
let closeTn = null;
if (tn === $.LI && elementTn === $.LI) {
closeTn = $.LI;
} else if ((tn === $.DD || tn === $.DT) && (elementTn === $.DD || elementTn === $.DT)) {
closeTn = elementTn;
}
if (closeTn) {
p.openElements.generateImpliedEndTagsWithExclusion(closeTn);
p.openElements.popUntilTagNamePopped(closeTn);
break;
}
if (elementTn !== $.ADDRESS && elementTn !== $.DIV && elementTn !== $.P && p._isSpecialElement(element)) {
break;
}
}
if (p.openElements.hasInButtonScope($.P)) {
p._closePElement();
}
p._insertElement(token, NS.HTML);
}
function plaintextStartTagInBody(p, token) {
if (p.openElements.hasInButtonScope($.P)) {
p._closePElement();
}
p._insertElement(token, NS.HTML);
p.tokenizer.state = Tokenizer.MODE.PLAINTEXT;
}
function buttonStartTagInBody(p, token) {
if (p.openElements.hasInScope($.BUTTON)) {
p.openElements.generateImpliedEndTags();
p.openElements.popUntilTagNamePopped($.BUTTON);
}
p._reconstructActiveFormattingElements();
p._insertElement(token, NS.HTML);
p.framesetOk = false;
}
function aStartTagInBody(p, token) {
const activeElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName($.A);
if (activeElementEntry) {
callAdoptionAgency(p, token);
p.openElements.remove(activeElementEntry.element);
p.activeFormattingElements.removeEntry(activeElementEntry);
}
p._reconstructActiveFormattingElements();
p._insertElement(token, NS.HTML);
p.activeFormattingElements.pushElement(p.openElements.current, token);
}
function bStartTagInBody(p, token) {
p._reconstructActiveFormattingElements();
p._insertElement(token, NS.HTML);
p.activeFormattingElements.pushElement(p.openElements.current, token);
}
function nobrStartTagInBody(p, token) {
p._reconstructActiveFormattingElements();
if (p.openElements.hasInScope($.NOBR)) {
callAdoptionAgency(p, token);
p._reconstructActiveFormattingElements();
}
p._insertElement(token, NS.HTML);
p.activeFormattingElements.pushElement(p.openElements.current, token);
}
function appletStartTagInBody(p, token) {
p._reconstructActiveFormattingElements();
p._insertElement(token, NS.HTML);
p.activeFormattingElements.insertMarker();
p.framesetOk = false;
}
function tableStartTagInBody(p, token) {
if (
p.treeAdapter.getDocumentMode(p.document) !== HTML.DOCUMENT_MODE.QUIRKS &&
p.openElements.hasInButtonScope($.P)
) {
p._closePElement();
}
p._insertElement(token, NS.HTML);
p.framesetOk = false;
p.insertionMode = IN_TABLE_MODE;
}
function areaStartTagInBody(p, token) {
p._reconstructActiveFormattingElements();
p._appendElement(token, NS.HTML);
p.framesetOk = false;
token.ackSelfClosing = true;
}
function inputStartTagInBody(p, token) {
p._reconstructActiveFormattingElements();
p._appendElement(token, NS.HTML);
const inputType = Tokenizer.getTokenAttr(token, ATTRS.TYPE);
if (!inputType || inputType.toLowerCase() !== HIDDEN_INPUT_TYPE) {
p.framesetOk = false;
}
token.ackSelfClosing = true;
}
function paramStartTagInBody(p, token) {
p._appendElement(token, NS.HTML);
token.ackSelfClosing = true;
}
function hrStartTagInBody(p, token) {
if (p.openElements.hasInButtonScope($.P)) {
p._closePElement();
}
p._appendElement(token, NS.HTML);
p.framesetOk = false;
p.ackSelfClosing = true;
}
function imageStartTagInBody(p, token) {
token.tagName = $.IMG;
areaStartTagInBody(p, token);
}
function textareaStartTagInBody(p, token) {
p._insertElement(token, NS.HTML);
p.skipNextNewLine = true;
p.tokenizer.state = Tokenizer.MODE.RCDATA;
p.originalInsertionMode = p.insertionMode;
p.framesetOk = false;
p.insertionMode = TEXT_MODE;
}
function xmpStartTagInBody(p, token) {
if (p.openElements.hasInButtonScope($.P)) {
p._closePElement();
}
p._reconstructActiveFormattingElements();
p.framesetOk = false;
p._switchToTextParsing(token, Tokenizer.MODE.RAWTEXT);
}
function iframeStartTagInBody(p, token) {
p.framesetOk = false;
p._switchToTextParsing(token, Tokenizer.MODE.RAWTEXT);
}
function noembedStartTagInBody(p, token) {
p._switchToTextParsing(token, Tokenizer.MODE.RAWTEXT);
}
function selectStartTagInBody(p, token) {
p._reconstructActiveFormattingElements();
p._insertElement(token, NS.HTML);
p.framesetOk = false;
if (
p.insertionMode === IN_TABLE_MODE ||
p.insertionMode === IN_CAPTION_MODE ||
p.insertionMode === IN_TABLE_BODY_MODE ||
p.insertionMode === IN_ROW_MODE ||
p.insertionMode === IN_CELL_MODE
) {
p.insertionMode = IN_SELECT_IN_TABLE_MODE;
} else {
p.insertionMode = IN_SELECT_MODE;
}
}
function optgroupStartTagInBody(p, token) {
if (p.openElements.currentTagName === $.OPTION) {
p.openElements.pop();
}
p._reconstructActiveFormattingElements();
p._insertElement(token, NS.HTML);
}
function rbStartTagInBody(p, token) {
if (p.openElements.hasInScope($.RUBY)) {
p.openElements.generateImpliedEndTags();
}
p._insertElement(token, NS.HTML);
}
function rtStartTagInBody(p, token) {
if (p.openElements.hasInScope($.RUBY)) {
p.openElements.generateImpliedEndTagsWithExclusion($.RTC);
}
p._insertElement(token, NS.HTML);
}
function menuStartTagInBody(p, token) {
if (p.openElements.hasInButtonScope($.P)) {
p._closePElement();
}
p._insertElement(token, NS.HTML);
}
function mathStartTagInBody(p, token) {
p._reconstructActiveFormattingElements();
foreignContent.adjustTokenMathMLAttrs(token);
foreignContent.adjustTokenXMLAttrs(token);
if (token.selfClosing) {
p._appendElement(token, NS.MATHML);
} else {
p._insertElement(token, NS.MATHML);
}
token.ackSelfClosing = true;
}
function svgStartTagInBody(p, token) {
p._reconstructActiveFormattingElements();
foreignContent.adjustTokenSVGAttrs(token);
foreignContent.adjustTokenXMLAttrs(token);
if (token.selfClosing) {
p._appendElement(token, NS.SVG);
} else {
p._insertElement(token, NS.SVG);
}
token.ackSelfClosing = true;
}
function genericStartTagInBody(p, token) {
p._reconstructActiveFormattingElements();
p._insertElement(token, NS.HTML);
}
function startTagInBody(p, token) {
const tn = token.tagName;
switch (tn.length) {
case 1:
if (tn === $.I || tn === $.S || tn === $.B || tn === $.U) {
bStartTagInBody(p, token);
} else if (tn === $.P) {
addressStartTagInBody(p, token);
} else if (tn === $.A) {
aStartTagInBody(p, token);
} else {
genericStartTagInBody(p, token);
}
break;
case 2:
if (tn === $.DL || tn === $.OL || tn === $.UL) {
addressStartTagInBody(p, token);
} else if (tn === $.H1 || tn === $.H2 || tn === $.H3 || tn === $.H4 || tn === $.H5 || tn === $.H6) {
numberedHeaderStartTagInBody(p, token);
} else if (tn === $.LI || tn === $.DD || tn === $.DT) {
listItemStartTagInBody(p, token);
} else if (tn === $.EM || tn === $.TT) {
bStartTagInBody(p, token);
} else if (tn === $.BR) {
areaStartTagInBody(p, token);
} else if (tn === $.HR) {
hrStartTagInBody(p, token);
} else if (tn === $.RB) {
rbStartTagInBody(p, token);
} else if (tn === $.RT || tn === $.RP) {
rtStartTagInBody(p, token);
} else if (tn !== $.TH && tn !== $.TD && tn !== $.TR) {
genericStartTagInBody(p, token);
}
break;
case 3:
if (tn === $.DIV || tn === $.DIR || tn === $.NAV) {
addressStartTagInBody(p, token);
} else if (tn === $.PRE) {
preStartTagInBody(p, token);
} else if (tn === $.BIG) {
bStartTagInBody(p, token);
} else if (tn === $.IMG || tn === $.WBR) {
areaStartTagInBody(p, token);
} else if (tn === $.XMP) {
xmpStartTagInBody(p, token);
} else if (tn === $.SVG) {
svgStartTagInBody(p, token);
} else if (tn === $.RTC) {
rbStartTagInBody(p, token);
} else if (tn !== $.COL) {
genericStartTagInBody(p, token);
}
break;
case 4:
if (tn === $.HTML) {
htmlStartTagInBody(p, token);
} else if (tn === $.BASE || tn === $.LINK || tn === $.META) {
startTagInHead(p, token);
} else if (tn === $.BODY) {
bodyStartTagInBody(p, token);
} else if (tn === $.MAIN || tn === $.MENU) {
addressStartTagInBody(p, token);
} else if (tn === $.FORM) {
formStartTagInBody(p, token);
} else if (tn === $.CODE || tn === $.FONT) {
bStartTagInBody(p, token);
} else if (tn === $.NOBR) {
nobrStartTagInBody(p, token);
} else if (tn === $.AREA) {
areaStartTagInBody(p, token);
} else if (tn === $.MATH) {
mathStartTagInBody(p, token);
} else if (tn === $.MENU) {
menuStartTagInBody(p, token);
} else if (tn !== $.HEAD) {
genericStartTagInBody(p, token);
}
break;
case 5:
if (tn === $.STYLE || tn === $.TITLE) {
startTagInHead(p, token);
} else if (tn === $.ASIDE) {
addressStartTagInBody(p, token);
} else if (tn === $.SMALL) {
bStartTagInBody(p, token);
} else if (tn === $.TABLE) {
tableStartTagInBody(p, token);
} else if (tn === $.EMBED) {
areaStartTagInBody(p, token);
} else if (tn === $.INPUT) {
inputStartTagInBody(p, token);
} else if (tn === $.PARAM || tn === $.TRACK) {
paramStartTagInBody(p, token);
} else if (tn === $.IMAGE) {
imageStartTagInBody(p, token);
} else if (tn !== $.FRAME && tn !== $.TBODY && tn !== $.TFOOT && tn !== $.THEAD) {
genericStartTagInBody(p, token);
}
break;
case 6:
if (tn === $.SCRIPT) {
startTagInHead(p, token);
} else if (
tn === $.CENTER ||
tn === $.FIGURE ||
tn === $.FOOTER ||
tn === $.HEADER ||
tn === $.HGROUP ||
tn === $.DIALOG
) {
addressStartTagInBody(p, token);
} else if (tn === $.BUTTON) {
buttonStartTagInBody(p, token);
} else if (tn === $.STRIKE || tn === $.STRONG) {
bStartTagInBody(p, token);
} else if (tn === $.APPLET || tn === $.OBJECT) {
appletStartTagInBody(p, token);
} else if (tn === $.KEYGEN) {
areaStartTagInBody(p, token);
} else if (tn === $.SOURCE) {
paramStartTagInBody(p, token);
} else if (tn === $.IFRAME) {
iframeStartTagInBody(p, token);
} else if (tn === $.SELECT) {
selectStartTagInBody(p, token);
} else if (tn === $.OPTION) {
optgroupStartTagInBody(p, token);
} else {
genericStartTagInBody(p, token);
}
break;
case 7:
if (tn === $.BGSOUND) {
startTagInHead(p, token);
} else if (
tn === $.DETAILS ||
tn === $.ADDRESS ||
tn === $.ARTICLE ||
tn === $.SECTION ||
tn === $.SUMMARY
) {
addressStartTagInBody(p, token);
} else if (tn === $.LISTING) {
preStartTagInBody(p, token);
} else if (tn === $.MARQUEE) {
appletStartTagInBody(p, token);
} else if (tn === $.NOEMBED) {
noembedStartTagInBody(p, token);
} else if (tn !== $.CAPTION) {
genericStartTagInBody(p, token);
}
break;
case 8:
if (tn === $.BASEFONT) {
startTagInHead(p, token);
} else if (tn === $.FRAMESET) {
framesetStartTagInBody(p, token);
} else if (tn === $.FIELDSET) {
addressStartTagInBody(p, token);
} else if (tn === $.TEXTAREA) {
textareaStartTagInBody(p, token);
} else if (tn === $.TEMPLATE) {
startTagInHead(p, token);
} else if (tn === $.NOSCRIPT) {
if (p.options.scriptingEnabled) {
noembedStartTagInBody(p, token);
} else {
genericStartTagInBody(p, token);
}
} else if (tn === $.OPTGROUP) {
optgroupStartTagInBody(p, token);
} else if (tn !== $.COLGROUP) {
genericStartTagInBody(p, token);
}
break;
case 9:
if (tn === $.PLAINTEXT) {
plaintextStartTagInBody(p, token);
} else {
genericStartTagInBody(p, token);
}
break;
case 10:
if (tn === $.BLOCKQUOTE || tn === $.FIGCAPTION) {
addressStartTagInBody(p, token);
} else {
genericStartTagInBody(p, token);
}
break;
default:
genericStartTagInBody(p, token);
}
}
function bodyEndTagInBody(p) {
if (p.openElements.hasInScope($.BODY)) {
p.insertionMode = AFTER_BODY_MODE;
}
}
function htmlEndTagInBody(p, token) {
if (p.openElements.hasInScope($.BODY)) {
p.insertionMode = AFTER_BODY_MODE;
p._processToken(token);
}
}
function addressEndTagInBody(p, token) {
const tn = token.tagName;
if (p.openElements.hasInScope(tn)) {
p.openElements.generateImpliedEndTags();
p.openElements.popUntilTagNamePopped(tn);
}
}
function formEndTagInBody(p) {
const inTemplate = p.openElements.tmplCount > 0;
const formElement = p.formElement;
if (!inTemplate) {
p.formElement = null;
}
if ((formElement || inTemplate) && p.openElements.hasInScope($.FORM)) {
p.openElements.generateImpliedEndTags();
if (inTemplate) {
p.openElements.popUntilTagNamePopped($.FORM);
} else {
p.openElements.remove(formElement);
}
}
}
function pEndTagInBody(p) {
if (!p.openElements.hasInButtonScope($.P)) {
p._insertFakeElement($.P);
}
p._closePElement();
}
function liEndTagInBody(p) {
if (p.openElements.hasInListItemScope($.LI)) {
p.openElements.generateImpliedEndTagsWithExclusion($.LI);
p.openElements.popUntilTagNamePopped($.LI);
}
}
function ddEndTagInBody(p, token) {
const tn = token.tagName;
if (p.openElements.hasInScope(tn)) {
p.openElements.generateImpliedEndTagsWithExclusion(tn);
p.openElements.popUntilTagNamePopped(tn);
}
}
function numberedHeaderEndTagInBody(p) {
if (p.openElements.hasNumberedHeaderInScope()) {
p.openElements.generateImpliedEndTags();
p.openElements.popUntilNumberedHeaderPopped();
}
}
function appletEndTagInBody(p, token) {
const tn = token.tagName;
if (p.openElements.hasInScope(tn)) {
p.openElements.generateImpliedEndTags();
p.openElements.popUntilTagNamePopped(tn);
p.activeFormattingElements.clearToLastMarker();
}
}
function brEndTagInBody(p) {
p._reconstructActiveFormattingElements();
p._insertFakeElement($.BR);
p.openElements.pop();
p.framesetOk = false;
}
function genericEndTagInBody(p, token) {
const tn = token.tagName;
for (let i = p.openElements.stackTop; i > 0; i--) {
const element = p.openElements.items[i];
if (p.treeAdapter.getTagName(element) === tn) {
p.openElements.generateImpliedEndTagsWithExclusion(tn);
p.openElements.popUntilElementPopped(element);
break;
}
if (p._isSpecialElement(element)) {
break;
}
}
}
function endTagInBody(p, token) {
const tn = token.tagName;
switch (tn.length) {
case 1:
if (tn === $.A || tn === $.B || tn === $.I || tn === $.S || tn === $.U) {
callAdoptionAgency(p, token);
} else if (tn === $.P) {
pEndTagInBody(p, token);
} else {
genericEndTagInBody(p, token);
}
break;
case 2:
if (tn === $.DL || tn === $.UL || tn === $.OL) {
addressEndTagInBody(p, token);
} else if (tn === $.LI) {
liEndTagInBody(p, token);
} else if (tn === $.DD || tn === $.DT) {
ddEndTagInBody(p, token);
} else if (tn === $.H1 || tn === $.H2 || tn === $.H3 || tn === $.H4 || tn === $.H5 || tn === $.H6) {
numberedHeaderEndTagInBody(p, token);
} else if (tn === $.BR) {
brEndTagInBody(p, token);
} else if (tn === $.EM || tn === $.TT) {
callAdoptionAgency(p, token);
} else {
genericEndTagInBody(p, token);
}
break;
case 3:
if (tn === $.BIG) {
callAdoptionAgency(p, token);
} else if (tn === $.DIR || tn === $.DIV || tn === $.NAV || tn === $.PRE) {
addressEndTagInBody(p, token);
} else {
genericEndTagInBody(p, token);
}
break;
case 4:
if (tn === $.BODY) {
bodyEndTagInBody(p, token);
} else if (tn === $.HTML) {
htmlEndTagInBody(p, token);
} else if (tn === $.FORM) {
formEndTagInBody(p, token);
} else if (tn === $.CODE || tn === $.FONT || tn === $.NOBR) {
callAdoptionAgency(p, token);
} else if (tn === $.MAIN || tn === $.MENU) {
addressEndTagInBody(p, token);
} else {
genericEndTagInBody(p, token);
}
break;
case 5:
if (tn === $.ASIDE) {
addressEndTagInBody(p, token);
} else if (tn === $.SMALL) {
callAdoptionAgency(p, token);
} else {
genericEndTagInBody(p, token);
}
break;
case 6:
if (
tn === $.CENTER ||
tn === $.FIGURE ||
tn === $.FOOTER ||
tn === $.HEADER ||
tn === $.HGROUP ||
tn === $.DIALOG
) {
addressEndTagInBody(p, token);
} else if (tn === $.APPLET || tn === $.OBJECT) {
appletEndTagInBody(p, token);
} else if (tn === $.STRIKE || tn === $.STRONG) {
callAdoptionAgency(p, token);
} else {
genericEndTagInBody(p, token);
}
break;
case 7:
if (
tn === $.ADDRESS ||
tn === $.ARTICLE ||
tn === $.DETAILS ||
tn === $.SECTION ||
tn === $.SUMMARY ||
tn === $.LISTING
) {
addressEndTagInBody(p, token);
} else if (tn === $.MARQUEE) {
appletEndTagInBody(p, token);
} else {
genericEndTagInBody(p, token);
}
break;
case 8:
if (tn === $.FIELDSET) {
addressEndTagInBody(p, token);
} else if (tn === $.TEMPLATE) {
endTagInHead(p, token);
} else {
genericEndTagInBody(p, token);
}
break;
case 10:
if (tn === $.BLOCKQUOTE || tn === $.FIGCAPTION) {
addressEndTagInBody(p, token);
} else {
genericEndTagInBody(p, token);
}
break;
default:
genericEndTagInBody(p, token);
}
}
function eofInBody(p, token) {
if (p.tmplInsertionModeStackTop > -1) {
eofInTemplate(p, token);
} else {
p.stopped = true;
}
}
function endTagInText(p, token) {
if (token.tagName === $.SCRIPT) {
p.pendingScript = p.openElements.current;
}
p.openElements.pop();
p.insertionMode = p.originalInsertionMode;
}
function eofInText(p, token) {
p._err(ERR.eofInElementThatCanContainOnlyText);
p.openElements.pop();
p.insertionMode = p.originalInsertionMode;
p._processToken(token);
}
function characterInTable(p, token) {
const curTn = p.openElements.currentTagName;
if (curTn === $.TABLE || curTn === $.TBODY || curTn === $.TFOOT || curTn === $.THEAD || curTn === $.TR) {
p.pendingCharacterTokens = [];
p.hasNonWhitespacePendingCharacterToken = false;
p.originalInsertionMode = p.insertionMode;
p.insertionMode = IN_TABLE_TEXT_MODE;
p._processToken(token);
} else {
tokenInTable(p, token);
}
}
function captionStartTagInTable(p, token) {
p.openElements.clearBackToTableContext();
p.activeFormattingElements.insertMarker();
p._insertElement(token, NS.HTML);
p.insertionMode = IN_CAPTION_MODE;
}
function colgroupStartTagInTable(p, token) {
p.openElements.clearBackToTableContext();
p._insertElement(token, NS.HTML);
p.insertionMode = IN_COLUMN_GROUP_MODE;
}
function colStartTagInTable(p, token) {
p.openElements.clearBackToTableContext();
p._insertFakeElement($.COLGROUP);
p.insertionMode = IN_COLUMN_GROUP_MODE;
p._processToken(token);
}
function tbodyStartTagInTable(p, token) {
p.openElements.clearBackToTableContext();
p._insertElement(token, NS.HTML);
p.insertionMode = IN_TABLE_BODY_MODE;
}
function tdStartTagInTable(p, token) {
p.openElements.clearBackToTableContext();
p._insertFakeElement($.TBODY);
p.insertionMode = IN_TABLE_BODY_MODE;
p._processToken(token);
}
function tableStartTagInTable(p, token) {
if (p.openElements.hasInTableScope($.TABLE)) {
p.openElements.popUntilTagNamePopped($.TABLE);
p._resetInsertionMode();
p._processToken(token);
}
}
function inputStartTagInTable(p, token) {
const inputType = Tokenizer.getTokenAttr(token, ATTRS.TYPE);
if (inputType && inputType.toLowerCase() === HIDDEN_INPUT_TYPE) {
p._appendElement(token, NS.HTML);
} else {
tokenInTable(p, token);
}
token.ackSelfClosing = true;
}
function formStartTagInTable(p, token) {
if (!p.formElement && p.openElements.tmplCount === 0) {
p._insertElement(token, NS.HTML);
p.formElement = p.openElements.current;
p.openElements.pop();
}
}
function startTagInTable(p, token) {
const tn = token.tagName;
switch (tn.length) {
case 2:
if (tn === $.TD || tn === $.TH || tn === $.TR) {
tdStartTagInTable(p, token);
} else {
tokenInTable(p, token);
}
break;
case 3:
if (tn === $.COL) {
colStartTagInTable(p, token);
} else {
tokenInTable(p, token);
}
break;
case 4:
if (tn === $.FORM) {
formStartTagInTable(p, token);
} else {
tokenInTable(p, token);
}
break;
case 5:
if (tn === $.TABLE) {
tableStartTagInTable(p, token);
} else if (tn === $.STYLE) {
startTagInHead(p, token);
} else if (tn === $.TBODY || tn === $.TFOOT || tn === $.THEAD) {
tbodyStartTagInTable(p, token);
} else if (tn === $.INPUT) {
inputStartTagInTable(p, token);
} else {
tokenInTable(p, token);
}
break;
case 6:
if (tn === $.SCRIPT) {
startTagInHead(p, token);
} else {
tokenInTable(p, token);
}
break;
case 7:
if (tn === $.CAPTION) {
captionStartTagInTable(p, token);
} else {
tokenInTable(p, token);
}
break;
case 8:
if (tn === $.COLGROUP) {
colgroupStartTagInTable(p, token);
} else if (tn === $.TEMPLATE) {
startTagInHead(p, token);
} else {
tokenInTable(p, token);
}
break;
default:
tokenInTable(p, token);
}
}
function endTagInTable(p, token) {
const tn = token.tagName;
if (tn === $.TABLE) {
if (p.openElements.hasInTableScope($.TABLE)) {
p.openElements.popUntilTagNamePopped($.TABLE);
p._resetInsertionMode();
}
} else if (tn === $.TEMPLATE) {
endTagInHead(p, token);
} else if (
tn !== $.BODY &&
tn !== $.CAPTION &&
tn !== $.COL &&
tn !== $.COLGROUP &&
tn !== $.HTML &&
tn !== $.TBODY &&
tn !== $.TD &&
tn !== $.TFOOT &&
tn !== $.TH &&
tn !== $.THEAD &&
tn !== $.TR
) {
tokenInTable(p, token);
}
}
function tokenInTable(p, token) {
const savedFosterParentingState = p.fosterParentingEnabled;
p.fosterParentingEnabled = true;
p._processTokenInBodyMode(token);
p.fosterParentingEnabled = savedFosterParentingState;
}
function whitespaceCharacterInTableText(p, token) {
p.pendingCharacterTokens.push(token);
}
function characterInTableText(p, token) {
p.pendingCharacterTokens.push(token);
p.hasNonWhitespacePendingCharacterToken = true;
}
function tokenInTableText(p, token) {
let i = 0;
if (p.hasNonWhitespacePendingCharacterToken) {
for (; i < p.pendingCharacterTokens.length; i++) {
tokenInTable(p, p.pendingCharacterTokens[i]);
}
} else {
for (; i < p.pendingCharacterTokens.length; i++) {
p._insertCharacters(p.pendingCharacterTokens[i]);
}
}
p.insertionMode = p.originalInsertionMode;
p._processToken(token);
}
function startTagInCaption(p, token) {
const tn = token.tagName;
if (
tn === $.CAPTION ||
tn === $.COL ||
tn === $.COLGROUP ||
tn === $.TBODY ||
tn === $.TD ||
tn === $.TFOOT ||
tn === $.TH ||
tn === $.THEAD ||
tn === $.TR
) {
if (p.openElements.hasInTableScope($.CAPTION)) {
p.openElements.generateImpliedEndTags();
p.openElements.popUntilTagNamePopped($.CAPTION);
p.activeFormattingElements.clearToLastMarker();
p.insertionMode = IN_TABLE_MODE;
p._processToken(token);
}
} else {
startTagInBody(p, token);
}
}
function endTagInCaption(p, token) {
const tn = token.tagName;
if (tn === $.CAPTION || tn === $.TABLE) {
if (p.openElements.hasInTableScope($.CAPTION)) {
p.openElements.generateImpliedEndTags();
p.openElements.popUntilTagNamePopped($.CAPTION);
p.activeFormattingElements.clearToLastMarker();
p.insertionMode = IN_TABLE_MODE;
if (tn === $.TABLE) {
p._processToken(token);
}
}
} else if (
tn !== $.BODY &&
tn !== $.COL &&
tn !== $.COLGROUP &&
tn !== $.HTML &&
tn !== $.TBODY &&
tn !== $.TD &&
tn !== $.TFOOT &&
tn !== $.TH &&
tn !== $.THEAD &&
tn !== $.TR
) {
endTagInBody(p, token);
}
}
function startTagInColumnGroup(p, token) {
const tn = token.tagName;
if (tn === $.HTML) {
startTagInBody(p, token);
} else if (tn === $.COL) {
p._appendElement(token, NS.HTML);
token.ackSelfClosing = true;
} else if (tn === $.TEMPLATE) {
startTagInHead(p, token);
} else {
tokenInColumnGroup(p, token);
}
}
function endTagInColumnGroup(p, token) {
const tn = token.tagName;
if (tn === $.COLGROUP) {
if (p.openElements.currentTagName === $.COLGROUP) {
p.openElements.pop();
p.insertionMode = IN_TABLE_MODE;
}
} else if (tn === $.TEMPLATE) {
endTagInHead(p, token);
} else if (tn !== $.COL) {
tokenInColumnGroup(p, token);
}
}
function tokenInColumnGroup(p, token) {
if (p.openElements.currentTagName === $.COLGROUP) {
p.openElements.pop();
p.insertionMode = IN_TABLE_MODE;
p._processToken(token);
}
}
function startTagInTableBody(p, token) {
const tn = token.tagName;
if (tn === $.TR) {
p.openElements.clearBackToTableBodyContext();
p._insertElement(token, NS.HTML);
p.insertionMode = IN_ROW_MODE;
} else if (tn === $.TH || tn === $.TD) {
p.openElements.clearBackToTableBodyContext();
p._insertFakeElement($.TR);
p.insertionMode = IN_ROW_MODE;
p._processToken(token);
} else if (
tn === $.CAPTION ||
tn === $.COL ||
tn === $.COLGROUP ||
tn === $.TBODY ||
tn === $.TFOOT ||
tn === $.THEAD
) {
if (p.openElements.hasTableBodyContextInTableScope()) {
p.openElements.clearBackToTableBodyContext();
p.openElements.pop();
p.insertionMode = IN_TABLE_MODE;
p._processToken(token);
}
} else {
startTagInTable(p, token);
}
}
function endTagInTableBody(p, token) {
const tn = token.tagName;
if (tn === $.TBODY || tn === $.TFOOT || tn === $.THEAD) {
if (p.openElements.hasInTableScope(tn)) {
p.openElements.clearBackToTableBodyContext();
p.openElements.pop();
p.insertionMode = IN_TABLE_MODE;
}
} else if (tn === $.TABLE) {
if (p.openElements.hasTableBodyContextInTableScope()) {
p.openElements.clearBackToTableBodyContext();
p.openElements.pop();
p.insertionMode = IN_TABLE_MODE;
p._processToken(token);
}
} else if (
(tn !== $.BODY && tn !== $.CAPTION && tn !== $.COL && tn !== $.COLGROUP) ||
(tn !== $.HTML && tn !== $.TD && tn !== $.TH && tn !== $.TR)
) {
endTagInTable(p, token);
}
}
function startTagInRow(p, token) {
const tn = token.tagName;
if (tn === $.TH || tn === $.TD) {
p.openElements.clearBackToTableRowContext();
p._insertElement(token, NS.HTML);
p.insertionMode = IN_CELL_MODE;
p.activeFormattingElements.insertMarker();
} else if (
tn === $.CAPTION ||
tn === $.COL ||
tn === $.COLGROUP ||
tn === $.TBODY ||
tn === $.TFOOT ||
tn === $.THEAD ||
tn === $.TR
) {
if (p.openElements.hasInTableScope($.TR)) {
p.openElements.clearBackToTableRowContext();
p.openElements.pop();
p.insertionMode = IN_TABLE_BODY_MODE;
p._processToken(token);
}
} else {
startTagInTable(p, token);
}
}
function endTagInRow(p, token) {
const tn = token.tagName;
if (tn === $.TR) {
if (p.openElements.hasInTableScope($.TR)) {
p.openElements.clearBackToTableRowContext();
p.openElements.pop();
p.insertionMode = IN_TABLE_BODY_MODE;
}
} else if (tn === $.TABLE) {
if (p.openElements.hasInTableScope($.TR)) {
p.openElements.clearBackToTableRowContext();
p.openElements.pop();
p.insertionMode = IN_TABLE_BODY_MODE;
p._processToken(token);
}
} else if (tn === $.TBODY || tn === $.TFOOT || tn === $.THEAD) {
if (p.openElements.hasInTableScope(tn) || p.openElements.hasInTableScope($.TR)) {
p.openElements.clearBackToTableRowContext();
p.openElements.pop();
p.insertionMode = IN_TABLE_BODY_MODE;
p._processToken(token);
}
} else if (
(tn !== $.BODY && tn !== $.CAPTION && tn !== $.COL && tn !== $.COLGROUP) ||
(tn !== $.HTML && tn !== $.TD && tn !== $.TH)
) {
endTagInTable(p, token);
}
}
function startTagInCell(p, token) {
const tn = token.tagName;
if (
tn === $.CAPTION ||
tn === $.COL ||
tn === $.COLGROUP ||
tn === $.TBODY ||
tn === $.TD ||
tn === $.TFOOT ||
tn === $.TH ||
tn === $.THEAD ||
tn === $.TR
) {
if (p.openElements.hasInTableScope($.TD) || p.openElements.hasInTableScope($.TH)) {
p._closeTableCell();
p._processToken(token);
}
} else {
startTagInBody(p, token);
}
}
function endTagInCell(p, token) {
const tn = token.tagName;
if (tn === $.TD || tn === $.TH) {
if (p.openElements.hasInTableScope(tn)) {
p.openElements.generateImpliedEndTags();
p.openElements.popUntilTagNamePopped(tn);
p.activeFormattingElements.clearToLastMarker();
p.insertionMode = IN_ROW_MODE;
}
} else if (tn === $.TABLE || tn === $.TBODY || tn === $.TFOOT || tn === $.THEAD || tn === $.TR) {
if (p.openElements.hasInTableScope(tn)) {
p._closeTableCell();
p._processToken(token);
}
} else if (tn !== $.BODY && tn !== $.CAPTION && tn !== $.COL && tn !== $.COLGROUP && tn !== $.HTML) {
endTagInBody(p, token);
}
}
function startTagInSelect(p, token) {
const tn = token.tagName;
if (tn === $.HTML) {
startTagInBody(p, token);
} else if (tn === $.OPTION) {
if (p.openElements.currentTagName === $.OPTION) {
p.openElements.pop();
}
p._insertElement(token, NS.HTML);
} else if (tn === $.OPTGROUP) {
if (p.openElements.currentTagName === $.OPTION) {
p.openElements.pop();
}
if (p.openElements.currentTagName === $.OPTGROUP) {
p.openElements.pop();
}
p._insertElement(token, NS.HTML);
} else if (tn === $.INPUT || tn === $.KEYGEN || tn === $.TEXTAREA || tn === $.SELECT) {
if (p.openElements.hasInSelectScope($.SELECT)) {
p.openElements.popUntilTagNamePopped($.SELECT);
p._resetInsertionMode();
if (tn !== $.SELECT) {
p._processToken(token);
}
}
} else if (tn === $.SCRIPT || tn === $.TEMPLATE) {
startTagInHead(p, token);
}
}
function endTagInSelect(p, token) {
const tn = token.tagName;
if (tn === $.OPTGROUP) {
const prevOpenElement = p.openElements.items[p.openElements.stackTop - 1];
const prevOpenElementTn = prevOpenElement && p.treeAdapter.getTagName(prevOpenElement);
if (p.openElements.currentTagName === $.OPTION && prevOpenElementTn === $.OPTGROUP) {
p.openElements.pop();
}
if (p.openElements.currentTagName === $.OPTGROUP) {
p.openElements.pop();
}
} else if (tn === $.OPTION) {
if (p.openElements.currentTagName === $.OPTION) {
p.openElements.pop();
}
} else if (tn === $.SELECT && p.openElements.hasInSelectScope($.SELECT)) {
p.openElements.popUntilTagNamePopped($.SELECT);
p._resetInsertionMode();
} else if (tn === $.TEMPLATE) {
endTagInHead(p, token);
}
}
function startTagInSelectInTable(p, token) {
const tn = token.tagName;
if (
tn === $.CAPTION ||
tn === $.TABLE ||
tn === $.TBODY ||
tn === $.TFOOT ||
tn === $.THEAD ||
tn === $.TR ||
tn === $.TD ||
tn === $.TH
) {
p.openElements.popUntilTagNamePopped($.SELECT);
p._resetInsertionMode();
p._processToken(token);
} else {
startTagInSelect(p, token);
}
}
function endTagInSelectInTable(p, token) {
const tn = token.tagName;
if (
tn === $.CAPTION ||
tn === $.TABLE ||
tn === $.TBODY ||
tn === $.TFOOT ||
tn === $.THEAD ||
tn === $.TR ||
tn === $.TD ||
tn === $.TH
) {
if (p.openElements.hasInTableScope(tn)) {
p.openElements.popUntilTagNamePopped($.SELECT);
p._resetInsertionMode();
p._processToken(token);
}
} else {
endTagInSelect(p, token);
}
}
function startTagInTemplate(p, token) {
const tn = token.tagName;
if (
tn === $.BASE ||
tn === $.BASEFONT ||
tn === $.BGSOUND ||
tn === $.LINK ||
tn === $.META ||
tn === $.NOFRAMES ||
tn === $.SCRIPT ||
tn === $.STYLE ||
tn === $.TEMPLATE ||
tn === $.TITLE
) {
startTagInHead(p, token);
} else {
const newInsertionMode = TEMPLATE_INSERTION_MODE_SWITCH_MAP[tn] || IN_BODY_MODE;
p._popTmplInsertionMode();
p._pushTmplInsertionMode(newInsertionMode);
p.insertionMode = newInsertionMode;
p._processToken(token);
}
}
function endTagInTemplate(p, token) {
if (token.tagName === $.TEMPLATE) {
endTagInHead(p, token);
}
}
function eofInTemplate(p, token) {
if (p.openElements.tmplCount > 0) {
p.openElements.popUntilTagNamePopped($.TEMPLATE);
p.activeFormattingElements.clearToLastMarker();
p._popTmplInsertionMode();
p._resetInsertionMode();
p._processToken(token);
} else {
p.stopped = true;
}
}
function startTagAfterBody(p, token) {
if (token.tagName === $.HTML) {
startTagInBody(p, token);
} else {
tokenAfterBody(p, token);
}
}
function endTagAfterBody(p, token) {
if (token.tagName === $.HTML) {
if (!p.fragmentContext) {
p.insertionMode = AFTER_AFTER_BODY_MODE;
}
} else {
tokenAfterBody(p, token);
}
}
function tokenAfterBody(p, token) {
p.insertionMode = IN_BODY_MODE;
p._processToken(token);
}
function startTagInFrameset(p, token) {
const tn = token.tagName;
if (tn === $.HTML) {
startTagInBody(p, token);
} else if (tn === $.FRAMESET) {
p._insertElement(token, NS.HTML);
} else if (tn === $.FRAME) {
p._appendElement(token, NS.HTML);
token.ackSelfClosing = true;
} else if (tn === $.NOFRAMES) {
startTagInHead(p, token);
}
}
function endTagInFrameset(p, token) {
if (token.tagName === $.FRAMESET && !p.openElements.isRootHtmlElementCurrent()) {
p.openElements.pop();
if (!p.fragmentContext && p.openElements.currentTagName !== $.FRAMESET) {
p.insertionMode = AFTER_FRAMESET_MODE;
}
}
}
function startTagAfterFrameset(p, token) {
const tn = token.tagName;
if (tn === $.HTML) {
startTagInBody(p, token);
} else if (tn === $.NOFRAMES) {
startTagInHead(p, token);
}
}
function endTagAfterFrameset(p, token) {
if (token.tagName === $.HTML) {
p.insertionMode = AFTER_AFTER_FRAMESET_MODE;
}
}
function startTagAfterAfterBody(p, token) {
if (token.tagName === $.HTML) {
startTagInBody(p, token);
} else {
tokenAfterAfterBody(p, token);
}
}
function tokenAfterAfterBody(p, token) {
p.insertionMode = IN_BODY_MODE;
p._processToken(token);
}
function startTagAfterAfterFrameset(p, token) {
const tn = token.tagName;
if (tn === $.HTML) {
startTagInBody(p, token);
} else if (tn === $.NOFRAMES) {
startTagInHead(p, token);
}
}
function nullCharacterInForeignContent(p, token) {
token.chars = unicode.REPLACEMENT_CHARACTER;
p._insertCharacters(token);
}
function characterInForeignContent(p, token) {
p._insertCharacters(token);
p.framesetOk = false;
}
function startTagInForeignContent(p, token) {
if (foreignContent.causesExit(token) && !p.fragmentContext) {
while (
p.treeAdapter.getNamespaceURI(p.openElements.current) !== NS.HTML &&
!p._isIntegrationPoint(p.openElements.current)
) {
p.openElements.pop();
}
p._processToken(token);
} else {
const current = p._getAdjustedCurrentElement();
const currentNs = p.treeAdapter.getNamespaceURI(current);
if (currentNs === NS.MATHML) {
foreignContent.adjustTokenMathMLAttrs(token);
} else if (currentNs === NS.SVG) {
foreignContent.adjustTokenSVGTagName(token);
foreignContent.adjustTokenSVGAttrs(token);
}
foreignContent.adjustTokenXMLAttrs(token);
if (token.selfClosing) {
p._appendElement(token, currentNs);
} else {
p._insertElement(token, currentNs);
}
token.ackSelfClosing = true;
}
}
function endTagInForeignContent(p, token) {
for (let i = p.openElements.stackTop; i > 0; i--) {
const element = p.openElements.items[i];
if (p.treeAdapter.getNamespaceURI(element) === NS.HTML) {
p._processToken(token);
break;
}
if (p.treeAdapter.getTagName(element).toLowerCase() === token.tagName) {
p.openElements.popUntilElementPopped(element);
break;
}
}
}
},{"../common/doctype":70,"../common/error-codes":71,"../common/foreign-content":72,"../common/html":73,"../common/unicode":74,"../extensions/error-reporting/parser-mixin":76,"../extensions/location-info/parser-mixin":80,"../tokenizer":88,"../tree-adapters/default":91,"../utils/merge-options":92,"../utils/mixin":93,"./formatting-element-list":84,"./open-element-stack":86}],86:[function(require,module,exports){
'use strict';
const HTML = require('../common/html');
const $ = HTML.TAG_NAMES;
const NS = HTML.NAMESPACES;
function isImpliedEndTagRequired(tn) {
switch (tn.length) {
case 1:
return tn === $.P;
case 2:
return tn === $.RB || tn === $.RP || tn === $.RT || tn === $.DD || tn === $.DT || tn === $.LI;
case 3:
return tn === $.RTC;
case 6:
return tn === $.OPTION;
case 8:
return tn === $.OPTGROUP;
}
return false;
}
function isImpliedEndTagRequiredThoroughly(tn) {
switch (tn.length) {
case 1:
return tn === $.P;
case 2:
return (
tn === $.RB ||
tn === $.RP ||
tn === $.RT ||
tn === $.DD ||
tn === $.DT ||
tn === $.LI ||
tn === $.TD ||
tn === $.TH ||
tn === $.TR
);
case 3:
return tn === $.RTC;
case 5:
return tn === $.TBODY || tn === $.TFOOT || tn === $.THEAD;
case 6:
return tn === $.OPTION;
case 7:
return tn === $.CAPTION;
case 8:
return tn === $.OPTGROUP || tn === $.COLGROUP;
}
return false;
}
function isScopingElement(tn, ns) {
switch (tn.length) {
case 2:
if (tn === $.TD || tn === $.TH) {
return ns === NS.HTML;
} else if (tn === $.MI || tn === $.MO || tn === $.MN || tn === $.MS) {
return ns === NS.MATHML;
}
break;
case 4:
if (tn === $.HTML) {
return ns === NS.HTML;
} else if (tn === $.DESC) {
return ns === NS.SVG;
}
break;
case 5:
if (tn === $.TABLE) {
return ns === NS.HTML;
} else if (tn === $.MTEXT) {
return ns === NS.MATHML;
} else if (tn === $.TITLE) {
return ns === NS.SVG;
}
break;
case 6:
return (tn === $.APPLET || tn === $.OBJECT) && ns === NS.HTML;
case 7:
return (tn === $.CAPTION || tn === $.MARQUEE) && ns === NS.HTML;
case 8:
return tn === $.TEMPLATE && ns === NS.HTML;
case 13:
return tn === $.FOREIGN_OBJECT && ns === NS.SVG;
case 14:
return tn === $.ANNOTATION_XML && ns === NS.MATHML;
}
return false;
}
class OpenElementStack {
constructor(document, treeAdapter) {
this.stackTop = -1;
this.items = [];
this.current = document;
this.currentTagName = null;
this.currentTmplContent = null;
this.tmplCount = 0;
this.treeAdapter = treeAdapter;
}
_indexOf(element) {
let idx = -1;
for (let i = this.stackTop; i >= 0; i--) {
if (this.items[i] === element) {
idx = i;
break;
}
}
return idx;
}
_isInTemplate() {
return this.currentTagName === $.TEMPLATE && this.treeAdapter.getNamespaceURI(this.current) === NS.HTML;
}
_updateCurrentElement() {
this.current = this.items[this.stackTop];
this.currentTagName = this.current && this.treeAdapter.getTagName(this.current);
this.currentTmplContent = this._isInTemplate() ? this.treeAdapter.getTemplateContent(this.current) : null;
}
push(element) {
this.items[++this.stackTop] = element;
this._updateCurrentElement();
if (this._isInTemplate()) {
this.tmplCount++;
}
}
pop() {
this.stackTop--;
if (this.tmplCount > 0 && this._isInTemplate()) {
this.tmplCount--;
}
this._updateCurrentElement();
}
replace(oldElement, newElement) {
const idx = this._indexOf(oldElement);
this.items[idx] = newElement;
if (idx === this.stackTop) {
this._updateCurrentElement();
}
}
insertAfter(referenceElement, newElement) {
const insertionIdx = this._indexOf(referenceElement) + 1;
this.items.splice(insertionIdx, 0, newElement);
if (insertionIdx === ++this.stackTop) {
this._updateCurrentElement();
}
}
popUntilTagNamePopped(tagName) {
while (this.stackTop > -1) {
const tn = this.currentTagName;
const ns = this.treeAdapter.getNamespaceURI(this.current);
this.pop();
if (tn === tagName && ns === NS.HTML) {
break;
}
}
}
popUntilElementPopped(element) {
while (this.stackTop > -1) {
const poppedElement = this.current;
this.pop();
if (poppedElement === element) {
break;
}
}
}
popUntilNumberedHeaderPopped() {
while (this.stackTop > -1) {
const tn = this.currentTagName;
const ns = this.treeAdapter.getNamespaceURI(this.current);
this.pop();
if (
tn === $.H1 ||
tn === $.H2 ||
tn === $.H3 ||
tn === $.H4 ||
tn === $.H5 ||
(tn === $.H6 && ns === NS.HTML)
) {
break;
}
}
}
popUntilTableCellPopped() {
while (this.stackTop > -1) {
const tn = this.currentTagName;
const ns = this.treeAdapter.getNamespaceURI(this.current);
this.pop();
if (tn === $.TD || (tn === $.TH && ns === NS.HTML)) {
break;
}
}
}
popAllUpToHtmlElement() {
this.stackTop = 0;
this._updateCurrentElement();
}
clearBackToTableContext() {
while (
(this.currentTagName !== $.TABLE && this.currentTagName !== $.TEMPLATE && this.currentTagName !== $.HTML) ||
this.treeAdapter.getNamespaceURI(this.current) !== NS.HTML
) {
this.pop();
}
}
clearBackToTableBodyContext() {
while (
(this.currentTagName !== $.TBODY &&
this.currentTagName !== $.TFOOT &&
this.currentTagName !== $.THEAD &&
this.currentTagName !== $.TEMPLATE &&
this.currentTagName !== $.HTML) ||
this.treeAdapter.getNamespaceURI(this.current) !== NS.HTML
) {
this.pop();
}
}
clearBackToTableRowContext() {
while (
(this.currentTagName !== $.TR && this.currentTagName !== $.TEMPLATE && this.currentTagName !== $.HTML) ||
this.treeAdapter.getNamespaceURI(this.current) !== NS.HTML
) {
this.pop();
}
}
remove(element) {
for (let i = this.stackTop; i >= 0; i--) {
if (this.items[i] === element) {
this.items.splice(i, 1);
this.stackTop--;
this._updateCurrentElement();
break;
}
}
}
tryPeekProperlyNestedBodyElement() {
const element = this.items[1];
return element && this.treeAdapter.getTagName(element) === $.BODY ? element : null;
}
contains(element) {
return this._indexOf(element) > -1;
}
getCommonAncestor(element) {
let elementIdx = this._indexOf(element);
return --elementIdx >= 0 ? this.items[elementIdx] : null;
}
isRootHtmlElementCurrent() {
return this.stackTop === 0 && this.currentTagName === $.HTML;
}
hasInScope(tagName) {
for (let i = this.stackTop; i >= 0; i--) {
const tn = this.treeAdapter.getTagName(this.items[i]);
const ns = this.treeAdapter.getNamespaceURI(this.items[i]);
if (tn === tagName && ns === NS.HTML) {
return true;
}
if (isScopingElement(tn, ns)) {
return false;
}
}
return true;
}
hasNumberedHeaderInScope() {
for (let i = this.stackTop; i >= 0; i--) {
const tn = this.treeAdapter.getTagName(this.items[i]);
const ns = this.treeAdapter.getNamespaceURI(this.items[i]);
if (
(tn === $.H1 || tn === $.H2 || tn === $.H3 || tn === $.H4 || tn === $.H5 || tn === $.H6) &&
ns === NS.HTML
) {
return true;
}
if (isScopingElement(tn, ns)) {
return false;
}
}
return true;
}
hasInListItemScope(tagName) {
for (let i = this.stackTop; i >= 0; i--) {
const tn = this.treeAdapter.getTagName(this.items[i]);
const ns = this.treeAdapter.getNamespaceURI(this.items[i]);
if (tn === tagName && ns === NS.HTML) {
return true;
}
if (((tn === $.UL || tn === $.OL) && ns === NS.HTML) || isScopingElement(tn, ns)) {
return false;
}
}
return true;
}
hasInButtonScope(tagName) {
for (let i = this.stackTop; i >= 0; i--) {
const tn = this.treeAdapter.getTagName(this.items[i]);
const ns = this.treeAdapter.getNamespaceURI(this.items[i]);
if (tn === tagName && ns === NS.HTML) {
return true;
}
if ((tn === $.BUTTON && ns === NS.HTML) || isScopingElement(tn, ns)) {
return false;
}
}
return true;
}
hasInTableScope(tagName) {
for (let i = this.stackTop; i >= 0; i--) {
const tn = this.treeAdapter.getTagName(this.items[i]);
const ns = this.treeAdapter.getNamespaceURI(this.items[i]);
if (ns !== NS.HTML) {
continue;
}
if (tn === tagName) {
return true;
}
if (tn === $.TABLE || tn === $.TEMPLATE || tn === $.HTML) {
return false;
}
}
return true;
}
hasTableBodyContextInTableScope() {
for (let i = this.stackTop; i >= 0; i--) {
const tn = this.treeAdapter.getTagName(this.items[i]);
const ns = this.treeAdapter.getNamespaceURI(this.items[i]);
if (ns !== NS.HTML) {
continue;
}
if (tn === $.TBODY || tn === $.THEAD || tn === $.TFOOT) {
return true;
}
if (tn === $.TABLE || tn === $.HTML) {
return false;
}
}
return true;
}
hasInSelectScope(tagName) {
for (let i = this.stackTop; i >= 0; i--) {
const tn = this.treeAdapter.getTagName(this.items[i]);
const ns = this.treeAdapter.getNamespaceURI(this.items[i]);
if (ns !== NS.HTML) {
continue;
}
if (tn === tagName) {
return true;
}
if (tn !== $.OPTION && tn !== $.OPTGROUP) {
return false;
}
}
return true;
}
generateImpliedEndTags() {
while (isImpliedEndTagRequired(this.currentTagName)) {
this.pop();
}
}
generateImpliedEndTagsThoroughly() {
while (isImpliedEndTagRequiredThoroughly(this.currentTagName)) {
this.pop();
}
}
generateImpliedEndTagsWithExclusion(exclusionTagName) {
while (isImpliedEndTagRequired(this.currentTagName) && this.currentTagName !== exclusionTagName) {
this.pop();
}
}
}
module.exports = OpenElementStack;
},{"../common/html":73}],87:[function(require,module,exports){
'use strict';
const defaultTreeAdapter = require('../tree-adapters/default');
const mergeOptions = require('../utils/merge-options');
const doctype = require('../common/doctype');
const HTML = require('../common/html');
const $ = HTML.TAG_NAMES;
const NS = HTML.NAMESPACES;
const DEFAULT_OPTIONS = {
treeAdapter: defaultTreeAdapter
};
const AMP_REGEX = /&/g;
const NBSP_REGEX = /\u00a0/g;
const DOUBLE_QUOTE_REGEX = /"/g;
const LT_REGEX = //g;
class Serializer {
constructor(node, options) {
this.options = mergeOptions(DEFAULT_OPTIONS, options);
this.treeAdapter = this.options.treeAdapter;
this.html = '';
this.startNode = node;
}
serialize() {
this._serializeChildNodes(this.startNode);
return this.html;
}
_serializeChildNodes(parentNode) {
const childNodes = this.treeAdapter.getChildNodes(parentNode);
if (childNodes) {
for (let i = 0, cnLength = childNodes.length; i < cnLength; i++) {
const currentNode = childNodes[i];
if (this.treeAdapter.isElementNode(currentNode)) {
this._serializeElement(currentNode);
} else if (this.treeAdapter.isTextNode(currentNode)) {
this._serializeTextNode(currentNode);
} else if (this.treeAdapter.isCommentNode(currentNode)) {
this._serializeCommentNode(currentNode);
} else if (this.treeAdapter.isDocumentTypeNode(currentNode)) {
this._serializeDocumentTypeNode(currentNode);
}
}
}
}
_serializeElement(node) {
const tn = this.treeAdapter.getTagName(node);
const ns = this.treeAdapter.getNamespaceURI(node);
this.html += '<' + tn;
this._serializeAttributes(node);
this.html += '>';
if (
tn !== $.AREA &&
tn !== $.BASE &&
tn !== $.BASEFONT &&
tn !== $.BGSOUND &&
tn !== $.BR &&
tn !== $.COL &&
tn !== $.EMBED &&
tn !== $.FRAME &&
tn !== $.HR &&
tn !== $.IMG &&
tn !== $.INPUT &&
tn !== $.KEYGEN &&
tn !== $.LINK &&
tn !== $.META &&
tn !== $.PARAM &&
tn !== $.SOURCE &&
tn !== $.TRACK &&
tn !== $.WBR
) {
const childNodesHolder =
tn === $.TEMPLATE && ns === NS.HTML ? this.treeAdapter.getTemplateContent(node) : node;
this._serializeChildNodes(childNodesHolder);
this.html += '' + tn + '>';
}
}
_serializeAttributes(node) {
const attrs = this.treeAdapter.getAttrList(node);
for (let i = 0, attrsLength = attrs.length; i < attrsLength; i++) {
const attr = attrs[i];
const value = Serializer.escapeString(attr.value, true);
this.html += ' ';
if (!attr.namespace) {
this.html += attr.name;
} else if (attr.namespace === NS.XML) {
this.html += 'xml:' + attr.name;
} else if (attr.namespace === NS.XMLNS) {
if (attr.name !== 'xmlns') {
this.html += 'xmlns:';
}
this.html += attr.name;
} else if (attr.namespace === NS.XLINK) {
this.html += 'xlink:' + attr.name;
} else {
this.html += attr.namespace + ':' + attr.name;
}
this.html += '="' + value + '"';
}
}
_serializeTextNode(node) {
const content = this.treeAdapter.getTextNodeContent(node);
const parent = this.treeAdapter.getParentNode(node);
let parentTn = void 0;
if (parent && this.treeAdapter.isElementNode(parent)) {
parentTn = this.treeAdapter.getTagName(parent);
}
if (
parentTn === $.STYLE ||
parentTn === $.SCRIPT ||
parentTn === $.XMP ||
parentTn === $.IFRAME ||
parentTn === $.NOEMBED ||
parentTn === $.NOFRAMES ||
parentTn === $.PLAINTEXT ||
parentTn === $.NOSCRIPT
) {
this.html += content;
} else {
this.html += Serializer.escapeString(content, false);
}
}
_serializeCommentNode(node) {
this.html += '';
}
_serializeDocumentTypeNode(node) {
const name = this.treeAdapter.getDocumentTypeNodeName(node);
this.html += '<' + doctype.serializeContent(name, null, null) + '>';
}
}
Serializer.escapeString = function(str, attrMode) {
str = str.replace(AMP_REGEX, '&').replace(NBSP_REGEX, ' ');
if (attrMode) {
str = str.replace(DOUBLE_QUOTE_REGEX, '"');
} else {
str = str.replace(LT_REGEX, '<').replace(GT_REGEX, '>');
}
return str;
};
module.exports = Serializer;
},{"../common/doctype":70,"../common/html":73,"../tree-adapters/default":91,"../utils/merge-options":92}],88:[function(require,module,exports){
'use strict';
const Preprocessor = require('./preprocessor');
const unicode = require('../common/unicode');
const neTree = require('./named-entity-data');
const ERR = require('../common/error-codes');
const $ = unicode.CODE_POINTS;
const $$ = unicode.CODE_POINT_SEQUENCES;
const C1_CONTROLS_REFERENCE_REPLACEMENTS = {
0x80: 0x20ac,
0x82: 0x201a,
0x83: 0x0192,
0x84: 0x201e,
0x85: 0x2026,
0x86: 0x2020,
0x87: 0x2021,
0x88: 0x02c6,
0x89: 0x2030,
0x8a: 0x0160,
0x8b: 0x2039,
0x8c: 0x0152,
0x8e: 0x017d,
0x91: 0x2018,
0x92: 0x2019,
0x93: 0x201c,
0x94: 0x201d,
0x95: 0x2022,
0x96: 0x2013,
0x97: 0x2014,
0x98: 0x02dc,
0x99: 0x2122,
0x9a: 0x0161,
0x9b: 0x203a,
0x9c: 0x0153,
0x9e: 0x017e,
0x9f: 0x0178
};
const HAS_DATA_FLAG = 1 << 0;
const DATA_DUPLET_FLAG = 1 << 1;
const HAS_BRANCHES_FLAG = 1 << 2;
const MAX_BRANCH_MARKER_VALUE = HAS_DATA_FLAG | DATA_DUPLET_FLAG | HAS_BRANCHES_FLAG;
const DATA_STATE = 'DATA_STATE';
const RCDATA_STATE = 'RCDATA_STATE';
const RAWTEXT_STATE = 'RAWTEXT_STATE';
const SCRIPT_DATA_STATE = 'SCRIPT_DATA_STATE';
const PLAINTEXT_STATE = 'PLAINTEXT_STATE';
const TAG_OPEN_STATE = 'TAG_OPEN_STATE';
const END_TAG_OPEN_STATE = 'END_TAG_OPEN_STATE';
const TAG_NAME_STATE = 'TAG_NAME_STATE';
const RCDATA_LESS_THAN_SIGN_STATE = 'RCDATA_LESS_THAN_SIGN_STATE';
const RCDATA_END_TAG_OPEN_STATE = 'RCDATA_END_TAG_OPEN_STATE';
const RCDATA_END_TAG_NAME_STATE = 'RCDATA_END_TAG_NAME_STATE';
const RAWTEXT_LESS_THAN_SIGN_STATE = 'RAWTEXT_LESS_THAN_SIGN_STATE';
const RAWTEXT_END_TAG_OPEN_STATE = 'RAWTEXT_END_TAG_OPEN_STATE';
const RAWTEXT_END_TAG_NAME_STATE = 'RAWTEXT_END_TAG_NAME_STATE';
const SCRIPT_DATA_LESS_THAN_SIGN_STATE = 'SCRIPT_DATA_LESS_THAN_SIGN_STATE';
const SCRIPT_DATA_END_TAG_OPEN_STATE = 'SCRIPT_DATA_END_TAG_OPEN_STATE';
const SCRIPT_DATA_END_TAG_NAME_STATE = 'SCRIPT_DATA_END_TAG_NAME_STATE';
const SCRIPT_DATA_ESCAPE_START_STATE = 'SCRIPT_DATA_ESCAPE_START_STATE';
const SCRIPT_DATA_ESCAPE_START_DASH_STATE = 'SCRIPT_DATA_ESCAPE_START_DASH_STATE';
const SCRIPT_DATA_ESCAPED_STATE = 'SCRIPT_DATA_ESCAPED_STATE';
const SCRIPT_DATA_ESCAPED_DASH_STATE = 'SCRIPT_DATA_ESCAPED_DASH_STATE';
const SCRIPT_DATA_ESCAPED_DASH_DASH_STATE = 'SCRIPT_DATA_ESCAPED_DASH_DASH_STATE';
const SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE = 'SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE';
const SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE = 'SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE';
const SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE = 'SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE';
const SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE';
const SCRIPT_DATA_DOUBLE_ESCAPED_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPED_STATE';
const SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE';
const SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE';
const SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE';
const SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE';
const BEFORE_ATTRIBUTE_NAME_STATE = 'BEFORE_ATTRIBUTE_NAME_STATE';
const ATTRIBUTE_NAME_STATE = 'ATTRIBUTE_NAME_STATE';
const AFTER_ATTRIBUTE_NAME_STATE = 'AFTER_ATTRIBUTE_NAME_STATE';
const BEFORE_ATTRIBUTE_VALUE_STATE = 'BEFORE_ATTRIBUTE_VALUE_STATE';
const ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE = 'ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE';
const ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE = 'ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE';
const ATTRIBUTE_VALUE_UNQUOTED_STATE = 'ATTRIBUTE_VALUE_UNQUOTED_STATE';
const AFTER_ATTRIBUTE_VALUE_QUOTED_STATE = 'AFTER_ATTRIBUTE_VALUE_QUOTED_STATE';
const SELF_CLOSING_START_TAG_STATE = 'SELF_CLOSING_START_TAG_STATE';
const BOGUS_COMMENT_STATE = 'BOGUS_COMMENT_STATE';
const MARKUP_DECLARATION_OPEN_STATE = 'MARKUP_DECLARATION_OPEN_STATE';
const COMMENT_START_STATE = 'COMMENT_START_STATE';
const COMMENT_START_DASH_STATE = 'COMMENT_START_DASH_STATE';
const COMMENT_STATE = 'COMMENT_STATE';
const COMMENT_LESS_THAN_SIGN_STATE = 'COMMENT_LESS_THAN_SIGN_STATE';
const COMMENT_LESS_THAN_SIGN_BANG_STATE = 'COMMENT_LESS_THAN_SIGN_BANG_STATE';
const COMMENT_LESS_THAN_SIGN_BANG_DASH_STATE = 'COMMENT_LESS_THAN_SIGN_BANG_DASH_STATE';
const COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH_STATE = 'COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH_STATE';
const COMMENT_END_DASH_STATE = 'COMMENT_END_DASH_STATE';
const COMMENT_END_STATE = 'COMMENT_END_STATE';
const COMMENT_END_BANG_STATE = 'COMMENT_END_BANG_STATE';
const DOCTYPE_STATE = 'DOCTYPE_STATE';
const BEFORE_DOCTYPE_NAME_STATE = 'BEFORE_DOCTYPE_NAME_STATE';
const DOCTYPE_NAME_STATE = 'DOCTYPE_NAME_STATE';
const AFTER_DOCTYPE_NAME_STATE = 'AFTER_DOCTYPE_NAME_STATE';
const AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE = 'AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE';
const BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE = 'BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE';
const DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE = 'DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE';
const DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE = 'DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE';
const AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE = 'AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE';
const BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE = 'BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE';
const AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE = 'AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE';
const BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE = 'BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE';
const DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE = 'DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE';
const DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE = 'DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE';
const AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE = 'AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE';
const BOGUS_DOCTYPE_STATE = 'BOGUS_DOCTYPE_STATE';
const CDATA_SECTION_STATE = 'CDATA_SECTION_STATE';
const CDATA_SECTION_BRACKET_STATE = 'CDATA_SECTION_BRACKET_STATE';
const CDATA_SECTION_END_STATE = 'CDATA_SECTION_END_STATE';
const CHARACTER_REFERENCE_STATE = 'CHARACTER_REFERENCE_STATE';
const NAMED_CHARACTER_REFERENCE_STATE = 'NAMED_CHARACTER_REFERENCE_STATE';
const AMBIGUOUS_AMPERSAND_STATE = 'AMBIGUOS_AMPERSAND_STATE';
const NUMERIC_CHARACTER_REFERENCE_STATE = 'NUMERIC_CHARACTER_REFERENCE_STATE';
const HEXADEMICAL_CHARACTER_REFERENCE_START_STATE = 'HEXADEMICAL_CHARACTER_REFERENCE_START_STATE';
const DECIMAL_CHARACTER_REFERENCE_START_STATE = 'DECIMAL_CHARACTER_REFERENCE_START_STATE';
const HEXADEMICAL_CHARACTER_REFERENCE_STATE = 'HEXADEMICAL_CHARACTER_REFERENCE_STATE';
const DECIMAL_CHARACTER_REFERENCE_STATE = 'DECIMAL_CHARACTER_REFERENCE_STATE';
const NUMERIC_CHARACTER_REFERENCE_END_STATE = 'NUMERIC_CHARACTER_REFERENCE_END_STATE';
function isWhitespace(cp) {
return cp === $.SPACE || cp === $.LINE_FEED || cp === $.TABULATION || cp === $.FORM_FEED;
}
function isAsciiDigit(cp) {
return cp >= $.DIGIT_0 && cp <= $.DIGIT_9;
}
function isAsciiUpper(cp) {
return cp >= $.LATIN_CAPITAL_A && cp <= $.LATIN_CAPITAL_Z;
}
function isAsciiLower(cp) {
return cp >= $.LATIN_SMALL_A && cp <= $.LATIN_SMALL_Z;
}
function isAsciiLetter(cp) {
return isAsciiLower(cp) || isAsciiUpper(cp);
}
function isAsciiAlphaNumeric(cp) {
return isAsciiLetter(cp) || isAsciiDigit(cp);
}
function isAsciiUpperHexDigit(cp) {
return cp >= $.LATIN_CAPITAL_A && cp <= $.LATIN_CAPITAL_F;
}
function isAsciiLowerHexDigit(cp) {
return cp >= $.LATIN_SMALL_A && cp <= $.LATIN_SMALL_F;
}
function isAsciiHexDigit(cp) {
return isAsciiDigit(cp) || isAsciiUpperHexDigit(cp) || isAsciiLowerHexDigit(cp);
}
function toAsciiLowerCodePoint(cp) {
return cp + 0x0020;
}
function toChar(cp) {
if (cp <= 0xffff) {
return String.fromCharCode(cp);
}
cp -= 0x10000;
return String.fromCharCode(((cp >>> 10) & 0x3ff) | 0xd800) + String.fromCharCode(0xdc00 | (cp & 0x3ff));
}
function toAsciiLowerChar(cp) {
return String.fromCharCode(toAsciiLowerCodePoint(cp));
}
function findNamedEntityTreeBranch(nodeIx, cp) {
const branchCount = neTree[++nodeIx];
let lo = ++nodeIx;
let hi = lo + branchCount - 1;
while (lo <= hi) {
const mid = (lo + hi) >>> 1;
const midCp = neTree[mid];
if (midCp < cp) {
lo = mid + 1;
} else if (midCp > cp) {
hi = mid - 1;
} else {
return neTree[mid + branchCount];
}
}
return -1;
}
class Tokenizer {
constructor() {
this.preprocessor = new Preprocessor();
this.tokenQueue = [];
this.allowCDATA = false;
this.state = DATA_STATE;
this.returnState = '';
this.charRefCode = -1;
this.tempBuff = [];
this.lastStartTagName = '';
this.consumedAfterSnapshot = -1;
this.active = false;
this.currentCharacterToken = null;
this.currentToken = null;
this.currentAttr = null;
}
_err() {
}
_errOnNextCodePoint(err) {
this._consume();
this._err(err);
this._unconsume();
}
getNextToken() {
while (!this.tokenQueue.length && this.active) {
this.consumedAfterSnapshot = 0;
const cp = this._consume();
if (!this._ensureHibernation()) {
this[this.state](cp);
}
}
return this.tokenQueue.shift();
}
write(chunk, isLastChunk) {
this.active = true;
this.preprocessor.write(chunk, isLastChunk);
}
insertHtmlAtCurrentPos(chunk) {
this.active = true;
this.preprocessor.insertHtmlAtCurrentPos(chunk);
}
_ensureHibernation() {
if (this.preprocessor.endOfChunkHit) {
for (; this.consumedAfterSnapshot > 0; this.consumedAfterSnapshot--) {
this.preprocessor.retreat();
}
this.active = false;
this.tokenQueue.push({ type: Tokenizer.HIBERNATION_TOKEN });
return true;
}
return false;
}
_consume() {
this.consumedAfterSnapshot++;
return this.preprocessor.advance();
}
_unconsume() {
this.consumedAfterSnapshot--;
this.preprocessor.retreat();
}
_reconsumeInState(state) {
this.state = state;
this._unconsume();
}
_consumeSequenceIfMatch(pattern, startCp, caseSensitive) {
let consumedCount = 0;
let isMatch = true;
const patternLength = pattern.length;
let patternPos = 0;
let cp = startCp;
let patternCp = void 0;
for (; patternPos < patternLength; patternPos++) {
if (patternPos > 0) {
cp = this._consume();
consumedCount++;
}
if (cp === $.EOF) {
isMatch = false;
break;
}
patternCp = pattern[patternPos];
if (cp !== patternCp && (caseSensitive || cp !== toAsciiLowerCodePoint(patternCp))) {
isMatch = false;
break;
}
}
if (!isMatch) {
while (consumedCount--) {
this._unconsume();
}
}
return isMatch;
}
_isTempBufferEqualToScriptString() {
if (this.tempBuff.length !== $$.SCRIPT_STRING.length) {
return false;
}
for (let i = 0; i < this.tempBuff.length; i++) {
if (this.tempBuff[i] !== $$.SCRIPT_STRING[i]) {
return false;
}
}
return true;
}
_createStartTagToken() {
this.currentToken = {
type: Tokenizer.START_TAG_TOKEN,
tagName: '',
selfClosing: false,
ackSelfClosing: false,
attrs: []
};
}
_createEndTagToken() {
this.currentToken = {
type: Tokenizer.END_TAG_TOKEN,
tagName: '',
selfClosing: false,
attrs: []
};
}
_createCommentToken() {
this.currentToken = {
type: Tokenizer.COMMENT_TOKEN,
data: ''
};
}
_createDoctypeToken(initialName) {
this.currentToken = {
type: Tokenizer.DOCTYPE_TOKEN,
name: initialName,
forceQuirks: false,
publicId: null,
systemId: null
};
}
_createCharacterToken(type, ch) {
this.currentCharacterToken = {
type: type,
chars: ch
};
}
_createEOFToken() {
this.currentToken = { type: Tokenizer.EOF_TOKEN };
}
_createAttr(attrNameFirstCh) {
this.currentAttr = {
name: attrNameFirstCh,
value: ''
};
}
_leaveAttrName(toState) {
if (Tokenizer.getTokenAttr(this.currentToken, this.currentAttr.name) === null) {
this.currentToken.attrs.push(this.currentAttr);
} else {
this._err(ERR.duplicateAttribute);
}
this.state = toState;
}
_leaveAttrValue(toState) {
this.state = toState;
}
_emitCurrentToken() {
this._emitCurrentCharacterToken();
const ct = this.currentToken;
this.currentToken = null;
if (ct.type === Tokenizer.START_TAG_TOKEN) {
this.lastStartTagName = ct.tagName;
} else if (ct.type === Tokenizer.END_TAG_TOKEN) {
if (ct.attrs.length > 0) {
this._err(ERR.endTagWithAttributes);
}
if (ct.selfClosing) {
this._err(ERR.endTagWithTrailingSolidus);
}
}
this.tokenQueue.push(ct);
}
_emitCurrentCharacterToken() {
if (this.currentCharacterToken) {
this.tokenQueue.push(this.currentCharacterToken);
this.currentCharacterToken = null;
}
}
_emitEOFToken() {
this._createEOFToken();
this._emitCurrentToken();
}
_appendCharToCurrentCharacterToken(type, ch) {
if (this.currentCharacterToken && this.currentCharacterToken.type !== type) {
this._emitCurrentCharacterToken();
}
if (this.currentCharacterToken) {
this.currentCharacterToken.chars += ch;
} else {
this._createCharacterToken(type, ch);
}
}
_emitCodePoint(cp) {
let type = Tokenizer.CHARACTER_TOKEN;
if (isWhitespace(cp)) {
type = Tokenizer.WHITESPACE_CHARACTER_TOKEN;
} else if (cp === $.NULL) {
type = Tokenizer.NULL_CHARACTER_TOKEN;
}
this._appendCharToCurrentCharacterToken(type, toChar(cp));
}
_emitSeveralCodePoints(codePoints) {
for (let i = 0; i < codePoints.length; i++) {
this._emitCodePoint(codePoints[i]);
}
}
_emitChars(ch) {
this._appendCharToCurrentCharacterToken(Tokenizer.CHARACTER_TOKEN, ch);
}
_matchNamedCharacterReference(startCp) {
let result = null;
let excess = 1;
let i = findNamedEntityTreeBranch(0, startCp);
this.tempBuff.push(startCp);
while (i > -1) {
const current = neTree[i];
const inNode = current < MAX_BRANCH_MARKER_VALUE;
const nodeWithData = inNode && current & HAS_DATA_FLAG;
if (nodeWithData) {
result = current & DATA_DUPLET_FLAG ? [neTree[++i], neTree[++i]] : [neTree[++i]];
excess = 0;
}
const cp = this._consume();
this.tempBuff.push(cp);
excess++;
if (cp === $.EOF) {
break;
}
if (inNode) {
i = current & HAS_BRANCHES_FLAG ? findNamedEntityTreeBranch(i, cp) : -1;
} else {
i = cp === current ? ++i : -1;
}
}
while (excess--) {
this.tempBuff.pop();
this._unconsume();
}
return result;
}
_isCharacterReferenceInAttribute() {
return (
this.returnState === ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE ||
this.returnState === ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE ||
this.returnState === ATTRIBUTE_VALUE_UNQUOTED_STATE
);
}
_isCharacterReferenceAttributeQuirk(withSemicolon) {
if (!withSemicolon && this._isCharacterReferenceInAttribute()) {
const nextCp = this._consume();
this._unconsume();
return nextCp === $.EQUALS_SIGN || isAsciiAlphaNumeric(nextCp);
}
return false;
}
_flushCodePointsConsumedAsCharacterReference() {
if (this._isCharacterReferenceInAttribute()) {
for (let i = 0; i < this.tempBuff.length; i++) {
this.currentAttr.value += toChar(this.tempBuff[i]);
}
} else {
this._emitSeveralCodePoints(this.tempBuff);
}
this.tempBuff = [];
}
[DATA_STATE](cp) {
this.preprocessor.dropParsedChunk();
if (cp === $.LESS_THAN_SIGN) {
this.state = TAG_OPEN_STATE;
} else if (cp === $.AMPERSAND) {
this.returnState = DATA_STATE;
this.state = CHARACTER_REFERENCE_STATE;
} else if (cp === $.NULL) {
this._err(ERR.unexpectedNullCharacter);
this._emitCodePoint(cp);
} else if (cp === $.EOF) {
this._emitEOFToken();
} else {
this._emitCodePoint(cp);
}
}
[RCDATA_STATE](cp) {
this.preprocessor.dropParsedChunk();
if (cp === $.AMPERSAND) {
this.returnState = RCDATA_STATE;
this.state = CHARACTER_REFERENCE_STATE;
} else if (cp === $.LESS_THAN_SIGN) {
this.state = RCDATA_LESS_THAN_SIGN_STATE;
} else if (cp === $.NULL) {
this._err(ERR.unexpectedNullCharacter);
this._emitChars(unicode.REPLACEMENT_CHARACTER);
} else if (cp === $.EOF) {
this._emitEOFToken();
} else {
this._emitCodePoint(cp);
}
}
[RAWTEXT_STATE](cp) {
this.preprocessor.dropParsedChunk();
if (cp === $.LESS_THAN_SIGN) {
this.state = RAWTEXT_LESS_THAN_SIGN_STATE;
} else if (cp === $.NULL) {
this._err(ERR.unexpectedNullCharacter);
this._emitChars(unicode.REPLACEMENT_CHARACTER);
} else if (cp === $.EOF) {
this._emitEOFToken();
} else {
this._emitCodePoint(cp);
}
}
[SCRIPT_DATA_STATE](cp) {
this.preprocessor.dropParsedChunk();
if (cp === $.LESS_THAN_SIGN) {
this.state = SCRIPT_DATA_LESS_THAN_SIGN_STATE;
} else if (cp === $.NULL) {
this._err(ERR.unexpectedNullCharacter);
this._emitChars(unicode.REPLACEMENT_CHARACTER);
} else if (cp === $.EOF) {
this._emitEOFToken();
} else {
this._emitCodePoint(cp);
}
}
[PLAINTEXT_STATE](cp) {
this.preprocessor.dropParsedChunk();
if (cp === $.NULL) {
this._err(ERR.unexpectedNullCharacter);
this._emitChars(unicode.REPLACEMENT_CHARACTER);
} else if (cp === $.EOF) {
this._emitEOFToken();
} else {
this._emitCodePoint(cp);
}
}
[TAG_OPEN_STATE](cp) {
if (cp === $.EXCLAMATION_MARK) {
this.state = MARKUP_DECLARATION_OPEN_STATE;
} else if (cp === $.SOLIDUS) {
this.state = END_TAG_OPEN_STATE;
} else if (isAsciiLetter(cp)) {
this._createStartTagToken();
this._reconsumeInState(TAG_NAME_STATE);
} else if (cp === $.QUESTION_MARK) {
this._err(ERR.unexpectedQuestionMarkInsteadOfTagName);
this._createCommentToken();
this._reconsumeInState(BOGUS_COMMENT_STATE);
} else if (cp === $.EOF) {
this._err(ERR.eofBeforeTagName);
this._emitChars('<');
this._emitEOFToken();
} else {
this._err(ERR.invalidFirstCharacterOfTagName);
this._emitChars('<');
this._reconsumeInState(DATA_STATE);
}
}
[END_TAG_OPEN_STATE](cp) {
if (isAsciiLetter(cp)) {
this._createEndTagToken();
this._reconsumeInState(TAG_NAME_STATE);
} else if (cp === $.GREATER_THAN_SIGN) {
this._err(ERR.missingEndTagName);
this.state = DATA_STATE;
} else if (cp === $.EOF) {
this._err(ERR.eofBeforeTagName);
this._emitChars('');
this._emitEOFToken();
} else {
this._err(ERR.invalidFirstCharacterOfTagName);
this._createCommentToken();
this._reconsumeInState(BOGUS_COMMENT_STATE);
}
}
[TAG_NAME_STATE](cp) {
if (isWhitespace(cp)) {
this.state = BEFORE_ATTRIBUTE_NAME_STATE;
} else if (cp === $.SOLIDUS) {
this.state = SELF_CLOSING_START_TAG_STATE;
} else if (cp === $.GREATER_THAN_SIGN) {
this.state = DATA_STATE;
this._emitCurrentToken();
} else if (isAsciiUpper(cp)) {
this.currentToken.tagName += toAsciiLowerChar(cp);
} else if (cp === $.NULL) {
this._err(ERR.unexpectedNullCharacter);
this.currentToken.tagName += unicode.REPLACEMENT_CHARACTER;
} else if (cp === $.EOF) {
this._err(ERR.eofInTag);
this._emitEOFToken();
} else {
this.currentToken.tagName += toChar(cp);
}
}
[RCDATA_LESS_THAN_SIGN_STATE](cp) {
if (cp === $.SOLIDUS) {
this.tempBuff = [];
this.state = RCDATA_END_TAG_OPEN_STATE;
} else {
this._emitChars('<');
this._reconsumeInState(RCDATA_STATE);
}
}
[RCDATA_END_TAG_OPEN_STATE](cp) {
if (isAsciiLetter(cp)) {
this._createEndTagToken();
this._reconsumeInState(RCDATA_END_TAG_NAME_STATE);
} else {
this._emitChars('');
this._reconsumeInState(RCDATA_STATE);
}
}
[RCDATA_END_TAG_NAME_STATE](cp) {
if (isAsciiUpper(cp)) {
this.currentToken.tagName += toAsciiLowerChar(cp);
this.tempBuff.push(cp);
} else if (isAsciiLower(cp)) {
this.currentToken.tagName += toChar(cp);
this.tempBuff.push(cp);
} else {
if (this.lastStartTagName === this.currentToken.tagName) {
if (isWhitespace(cp)) {
this.state = BEFORE_ATTRIBUTE_NAME_STATE;
return;
}
if (cp === $.SOLIDUS) {
this.state = SELF_CLOSING_START_TAG_STATE;
return;
}
if (cp === $.GREATER_THAN_SIGN) {
this.state = DATA_STATE;
this._emitCurrentToken();
return;
}
}
this._emitChars('');
this._emitSeveralCodePoints(this.tempBuff);
this._reconsumeInState(RCDATA_STATE);
}
}
[RAWTEXT_LESS_THAN_SIGN_STATE](cp) {
if (cp === $.SOLIDUS) {
this.tempBuff = [];
this.state = RAWTEXT_END_TAG_OPEN_STATE;
} else {
this._emitChars('<');
this._reconsumeInState(RAWTEXT_STATE);
}
}
[RAWTEXT_END_TAG_OPEN_STATE](cp) {
if (isAsciiLetter(cp)) {
this._createEndTagToken();
this._reconsumeInState(RAWTEXT_END_TAG_NAME_STATE);
} else {
this._emitChars('');
this._reconsumeInState(RAWTEXT_STATE);
}
}
[RAWTEXT_END_TAG_NAME_STATE](cp) {
if (isAsciiUpper(cp)) {
this.currentToken.tagName += toAsciiLowerChar(cp);
this.tempBuff.push(cp);
} else if (isAsciiLower(cp)) {
this.currentToken.tagName += toChar(cp);
this.tempBuff.push(cp);
} else {
if (this.lastStartTagName === this.currentToken.tagName) {
if (isWhitespace(cp)) {
this.state = BEFORE_ATTRIBUTE_NAME_STATE;
return;
}
if (cp === $.SOLIDUS) {
this.state = SELF_CLOSING_START_TAG_STATE;
return;
}
if (cp === $.GREATER_THAN_SIGN) {
this._emitCurrentToken();
this.state = DATA_STATE;
return;
}
}
this._emitChars('');
this._emitSeveralCodePoints(this.tempBuff);
this._reconsumeInState(RAWTEXT_STATE);
}
}
[SCRIPT_DATA_LESS_THAN_SIGN_STATE](cp) {
if (cp === $.SOLIDUS) {
this.tempBuff = [];
this.state = SCRIPT_DATA_END_TAG_OPEN_STATE;
} else if (cp === $.EXCLAMATION_MARK) {
this.state = SCRIPT_DATA_ESCAPE_START_STATE;
this._emitChars('');
} else if (cp === $.NULL) {
this._err(ERR.unexpectedNullCharacter);
this.state = SCRIPT_DATA_ESCAPED_STATE;
this._emitChars(unicode.REPLACEMENT_CHARACTER);
} else if (cp === $.EOF) {
this._err(ERR.eofInScriptHtmlCommentLikeText);
this._emitEOFToken();
} else {
this.state = SCRIPT_DATA_ESCAPED_STATE;
this._emitCodePoint(cp);
}
}
[SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE](cp) {
if (cp === $.SOLIDUS) {
this.tempBuff = [];
this.state = SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE;
} else if (isAsciiLetter(cp)) {
this.tempBuff = [];
this._emitChars('<');
this._reconsumeInState(SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE);
} else {
this._emitChars('<');
this._reconsumeInState(SCRIPT_DATA_ESCAPED_STATE);
}
}
[SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE](cp) {
if (isAsciiLetter(cp)) {
this._createEndTagToken();
this._reconsumeInState(SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE);
} else {
this._emitChars('');
this._reconsumeInState(SCRIPT_DATA_ESCAPED_STATE);
}
}
[SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE](cp) {
if (isAsciiUpper(cp)) {
this.currentToken.tagName += toAsciiLowerChar(cp);
this.tempBuff.push(cp);
} else if (isAsciiLower(cp)) {
this.currentToken.tagName += toChar(cp);
this.tempBuff.push(cp);
} else {
if (this.lastStartTagName === this.currentToken.tagName) {
if (isWhitespace(cp)) {
this.state = BEFORE_ATTRIBUTE_NAME_STATE;
return;
}
if (cp === $.SOLIDUS) {
this.state = SELF_CLOSING_START_TAG_STATE;
return;
}
if (cp === $.GREATER_THAN_SIGN) {
this._emitCurrentToken();
this.state = DATA_STATE;
return;
}
}
this._emitChars('');
this._emitSeveralCodePoints(this.tempBuff);
this._reconsumeInState(SCRIPT_DATA_ESCAPED_STATE);
}
}
[SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE](cp) {
if (isWhitespace(cp) || cp === $.SOLIDUS || cp === $.GREATER_THAN_SIGN) {
this.state = this._isTempBufferEqualToScriptString()
? SCRIPT_DATA_DOUBLE_ESCAPED_STATE
: SCRIPT_DATA_ESCAPED_STATE;
this._emitCodePoint(cp);
} else if (isAsciiUpper(cp)) {
this.tempBuff.push(toAsciiLowerCodePoint(cp));
this._emitCodePoint(cp);
} else if (isAsciiLower(cp)) {
this.tempBuff.push(cp);
this._emitCodePoint(cp);
} else {
this._reconsumeInState(SCRIPT_DATA_ESCAPED_STATE);
}
}
[SCRIPT_DATA_DOUBLE_ESCAPED_STATE](cp) {
if (cp === $.HYPHEN_MINUS) {
this.state = SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE;
this._emitChars('-');
} else if (cp === $.LESS_THAN_SIGN) {
this.state = SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE;
this._emitChars('<');
} else if (cp === $.NULL) {
this._err(ERR.unexpectedNullCharacter);
this._emitChars(unicode.REPLACEMENT_CHARACTER);
} else if (cp === $.EOF) {
this._err(ERR.eofInScriptHtmlCommentLikeText);
this._emitEOFToken();
} else {
this._emitCodePoint(cp);
}
}
[SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE](cp) {
if (cp === $.HYPHEN_MINUS) {
this.state = SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE;
this._emitChars('-');
} else if (cp === $.LESS_THAN_SIGN) {
this.state = SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE;
this._emitChars('<');
} else if (cp === $.NULL) {
this._err(ERR.unexpectedNullCharacter);
this.state = SCRIPT_DATA_DOUBLE_ESCAPED_STATE;
this._emitChars(unicode.REPLACEMENT_CHARACTER);
} else if (cp === $.EOF) {
this._err(ERR.eofInScriptHtmlCommentLikeText);
this._emitEOFToken();
} else {
this.state = SCRIPT_DATA_DOUBLE_ESCAPED_STATE;
this._emitCodePoint(cp);
}
}
[SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE](cp) {
if (cp === $.HYPHEN_MINUS) {
this._emitChars('-');
} else if (cp === $.LESS_THAN_SIGN) {
this.state = SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE;
this._emitChars('<');
} else if (cp === $.GREATER_THAN_SIGN) {
this.state = SCRIPT_DATA_STATE;
this._emitChars('>');
} else if (cp === $.NULL) {
this._err(ERR.unexpectedNullCharacter);
this.state = SCRIPT_DATA_DOUBLE_ESCAPED_STATE;
this._emitChars(unicode.REPLACEMENT_CHARACTER);
} else if (cp === $.EOF) {
this._err(ERR.eofInScriptHtmlCommentLikeText);
this._emitEOFToken();
} else {
this.state = SCRIPT_DATA_DOUBLE_ESCAPED_STATE;
this._emitCodePoint(cp);
}
}
[SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE](cp) {
if (cp === $.SOLIDUS) {
this.tempBuff = [];
this.state = SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE;
this._emitChars('/');
} else {
this._reconsumeInState(SCRIPT_DATA_DOUBLE_ESCAPED_STATE);
}
}
[SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE](cp) {
if (isWhitespace(cp) || cp === $.SOLIDUS || cp === $.GREATER_THAN_SIGN) {
this.state = this._isTempBufferEqualToScriptString()
? SCRIPT_DATA_ESCAPED_STATE
: SCRIPT_DATA_DOUBLE_ESCAPED_STATE;
this._emitCodePoint(cp);
} else if (isAsciiUpper(cp)) {
this.tempBuff.push(toAsciiLowerCodePoint(cp));
this._emitCodePoint(cp);
} else if (isAsciiLower(cp)) {
this.tempBuff.push(cp);
this._emitCodePoint(cp);
} else {
this._reconsumeInState(SCRIPT_DATA_DOUBLE_ESCAPED_STATE);
}
}
[BEFORE_ATTRIBUTE_NAME_STATE](cp) {
if (isWhitespace(cp)) {
return;
}
if (cp === $.SOLIDUS || cp === $.GREATER_THAN_SIGN || cp === $.EOF) {
this._reconsumeInState(AFTER_ATTRIBUTE_NAME_STATE);
} else if (cp === $.EQUALS_SIGN) {
this._err(ERR.unexpectedEqualsSignBeforeAttributeName);
this._createAttr('=');
this.state = ATTRIBUTE_NAME_STATE;
} else {
this._createAttr('');
this._reconsumeInState(ATTRIBUTE_NAME_STATE);
}
}
[ATTRIBUTE_NAME_STATE](cp) {
if (isWhitespace(cp) || cp === $.SOLIDUS || cp === $.GREATER_THAN_SIGN || cp === $.EOF) {
this._leaveAttrName(AFTER_ATTRIBUTE_NAME_STATE);
this._unconsume();
} else if (cp === $.EQUALS_SIGN) {
this._leaveAttrName(BEFORE_ATTRIBUTE_VALUE_STATE);
} else if (isAsciiUpper(cp)) {
this.currentAttr.name += toAsciiLowerChar(cp);
} else if (cp === $.QUOTATION_MARK || cp === $.APOSTROPHE || cp === $.LESS_THAN_SIGN) {
this._err(ERR.unexpectedCharacterInAttributeName);
this.currentAttr.name += toChar(cp);
} else if (cp === $.NULL) {
this._err(ERR.unexpectedNullCharacter);
this.currentAttr.name += unicode.REPLACEMENT_CHARACTER;
} else {
this.currentAttr.name += toChar(cp);
}
}
[AFTER_ATTRIBUTE_NAME_STATE](cp) {
if (isWhitespace(cp)) {
return;
}
if (cp === $.SOLIDUS) {
this.state = SELF_CLOSING_START_TAG_STATE;
} else if (cp === $.EQUALS_SIGN) {
this.state = BEFORE_ATTRIBUTE_VALUE_STATE;
} else if (cp === $.GREATER_THAN_SIGN) {
this.state = DATA_STATE;
this._emitCurrentToken();
} else if (cp === $.EOF) {
this._err(ERR.eofInTag);
this._emitEOFToken();
} else {
this._createAttr('');
this._reconsumeInState(ATTRIBUTE_NAME_STATE);
}
}
[BEFORE_ATTRIBUTE_VALUE_STATE](cp) {
if (isWhitespace(cp)) {
return;
}
if (cp === $.QUOTATION_MARK) {
this.state = ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE;
} else if (cp === $.APOSTROPHE) {
this.state = ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE;
} else if (cp === $.GREATER_THAN_SIGN) {
this._err(ERR.missingAttributeValue);
this.state = DATA_STATE;
this._emitCurrentToken();
} else {
this._reconsumeInState(ATTRIBUTE_VALUE_UNQUOTED_STATE);
}
}
[ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE](cp) {
if (cp === $.QUOTATION_MARK) {
this.state = AFTER_ATTRIBUTE_VALUE_QUOTED_STATE;
} else if (cp === $.AMPERSAND) {
this.returnState = ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE;
this.state = CHARACTER_REFERENCE_STATE;
} else if (cp === $.NULL) {
this._err(ERR.unexpectedNullCharacter);
this.currentAttr.value += unicode.REPLACEMENT_CHARACTER;
} else if (cp === $.EOF) {
this._err(ERR.eofInTag);
this._emitEOFToken();
} else {
this.currentAttr.value += toChar(cp);
}
}
[ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE](cp) {
if (cp === $.APOSTROPHE) {
this.state = AFTER_ATTRIBUTE_VALUE_QUOTED_STATE;
} else if (cp === $.AMPERSAND) {
this.returnState = ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE;
this.state = CHARACTER_REFERENCE_STATE;
} else if (cp === $.NULL) {
this._err(ERR.unexpectedNullCharacter);
this.currentAttr.value += unicode.REPLACEMENT_CHARACTER;
} else if (cp === $.EOF) {
this._err(ERR.eofInTag);
this._emitEOFToken();
} else {
this.currentAttr.value += toChar(cp);
}
}
[ATTRIBUTE_VALUE_UNQUOTED_STATE](cp) {
if (isWhitespace(cp)) {
this._leaveAttrValue(BEFORE_ATTRIBUTE_NAME_STATE);
} else if (cp === $.AMPERSAND) {
this.returnState = ATTRIBUTE_VALUE_UNQUOTED_STATE;
this.state = CHARACTER_REFERENCE_STATE;
} else if (cp === $.GREATER_THAN_SIGN) {
this._leaveAttrValue(DATA_STATE);
this._emitCurrentToken();
} else if (cp === $.NULL) {
this._err(ERR.unexpectedNullCharacter);
this.currentAttr.value += unicode.REPLACEMENT_CHARACTER;
} else if (
cp === $.QUOTATION_MARK ||
cp === $.APOSTROPHE ||
cp === $.LESS_THAN_SIGN ||
cp === $.EQUALS_SIGN ||
cp === $.GRAVE_ACCENT
) {
this._err(ERR.unexpectedCharacterInUnquotedAttributeValue);
this.currentAttr.value += toChar(cp);
} else if (cp === $.EOF) {
this._err(ERR.eofInTag);
this._emitEOFToken();
} else {
this.currentAttr.value += toChar(cp);
}
}
[AFTER_ATTRIBUTE_VALUE_QUOTED_STATE](cp) {
if (isWhitespace(cp)) {
this._leaveAttrValue(BEFORE_ATTRIBUTE_NAME_STATE);
} else if (cp === $.SOLIDUS) {
this._leaveAttrValue(SELF_CLOSING_START_TAG_STATE);
} else if (cp === $.GREATER_THAN_SIGN) {
this._leaveAttrValue(DATA_STATE);
this._emitCurrentToken();
} else if (cp === $.EOF) {
this._err(ERR.eofInTag);
this._emitEOFToken();
} else {
this._err(ERR.missingWhitespaceBetweenAttributes);
this._reconsumeInState(BEFORE_ATTRIBUTE_NAME_STATE);
}
}
[SELF_CLOSING_START_TAG_STATE](cp) {
if (cp === $.GREATER_THAN_SIGN) {
this.currentToken.selfClosing = true;
this.state = DATA_STATE;
this._emitCurrentToken();
} else if (cp === $.EOF) {
this._err(ERR.eofInTag);
this._emitEOFToken();
} else {
this._err(ERR.unexpectedSolidusInTag);
this._reconsumeInState(BEFORE_ATTRIBUTE_NAME_STATE);
}
}
[BOGUS_COMMENT_STATE](cp) {
if (cp === $.GREATER_THAN_SIGN) {
this.state = DATA_STATE;
this._emitCurrentToken();
} else if (cp === $.EOF) {
this._emitCurrentToken();
this._emitEOFToken();
} else if (cp === $.NULL) {
this._err(ERR.unexpectedNullCharacter);
this.currentToken.data += unicode.REPLACEMENT_CHARACTER;
} else {
this.currentToken.data += toChar(cp);
}
}
[MARKUP_DECLARATION_OPEN_STATE](cp) {
if (this._consumeSequenceIfMatch($$.DASH_DASH_STRING, cp, true)) {
this._createCommentToken();
this.state = COMMENT_START_STATE;
} else if (this._consumeSequenceIfMatch($$.DOCTYPE_STRING, cp, false)) {
this.state = DOCTYPE_STATE;
} else if (this._consumeSequenceIfMatch($$.CDATA_START_STRING, cp, true)) {
if (this.allowCDATA) {
this.state = CDATA_SECTION_STATE;
} else {
this._err(ERR.cdataInHtmlContent);
this._createCommentToken();
this.currentToken.data = '[CDATA[';
this.state = BOGUS_COMMENT_STATE;
}
}
else if (!this._ensureHibernation()) {
this._err(ERR.incorrectlyOpenedComment);
this._createCommentToken();
this._reconsumeInState(BOGUS_COMMENT_STATE);
}
}
[COMMENT_START_STATE](cp) {
if (cp === $.HYPHEN_MINUS) {
this.state = COMMENT_START_DASH_STATE;
} else if (cp === $.GREATER_THAN_SIGN) {
this._err(ERR.abruptClosingOfEmptyComment);
this.state = DATA_STATE;
this._emitCurrentToken();
} else {
this._reconsumeInState(COMMENT_STATE);
}
}
[COMMENT_START_DASH_STATE](cp) {
if (cp === $.HYPHEN_MINUS) {
this.state = COMMENT_END_STATE;
} else if (cp === $.GREATER_THAN_SIGN) {
this._err(ERR.abruptClosingOfEmptyComment);
this.state = DATA_STATE;
this._emitCurrentToken();
} else if (cp === $.EOF) {
this._err(ERR.eofInComment);
this._emitCurrentToken();
this._emitEOFToken();
} else {
this.currentToken.data += '-';
this._reconsumeInState(COMMENT_STATE);
}
}
[COMMENT_STATE](cp) {
if (cp === $.HYPHEN_MINUS) {
this.state = COMMENT_END_DASH_STATE;
} else if (cp === $.LESS_THAN_SIGN) {
this.currentToken.data += '<';
this.state = COMMENT_LESS_THAN_SIGN_STATE;
} else if (cp === $.NULL) {
this._err(ERR.unexpectedNullCharacter);
this.currentToken.data += unicode.REPLACEMENT_CHARACTER;
} else if (cp === $.EOF) {
this._err(ERR.eofInComment);
this._emitCurrentToken();
this._emitEOFToken();
} else {
this.currentToken.data += toChar(cp);
}
}
[COMMENT_LESS_THAN_SIGN_STATE](cp) {
if (cp === $.EXCLAMATION_MARK) {
this.currentToken.data += '!';
this.state = COMMENT_LESS_THAN_SIGN_BANG_STATE;
} else if (cp === $.LESS_THAN_SIGN) {
this.currentToken.data += '!';
} else {
this._reconsumeInState(COMMENT_STATE);
}
}
[COMMENT_LESS_THAN_SIGN_BANG_STATE](cp) {
if (cp === $.HYPHEN_MINUS) {
this.state = COMMENT_LESS_THAN_SIGN_BANG_DASH_STATE;
} else {
this._reconsumeInState(COMMENT_STATE);
}
}
[COMMENT_LESS_THAN_SIGN_BANG_DASH_STATE](cp) {
if (cp === $.HYPHEN_MINUS) {
this.state = COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH_STATE;
} else {
this._reconsumeInState(COMMENT_END_DASH_STATE);
}
}
[COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH_STATE](cp) {
if (cp !== $.GREATER_THAN_SIGN && cp !== $.EOF) {
this._err(ERR.nestedComment);
}
this._reconsumeInState(COMMENT_END_STATE);
}
[COMMENT_END_DASH_STATE](cp) {
if (cp === $.HYPHEN_MINUS) {
this.state = COMMENT_END_STATE;
} else if (cp === $.EOF) {
this._err(ERR.eofInComment);
this._emitCurrentToken();
this._emitEOFToken();
} else {
this.currentToken.data += '-';
this._reconsumeInState(COMMENT_STATE);
}
}
[COMMENT_END_STATE](cp) {
if (cp === $.GREATER_THAN_SIGN) {
this.state = DATA_STATE;
this._emitCurrentToken();
} else if (cp === $.EXCLAMATION_MARK) {
this.state = COMMENT_END_BANG_STATE;
} else if (cp === $.HYPHEN_MINUS) {
this.currentToken.data += '-';
} else if (cp === $.EOF) {
this._err(ERR.eofInComment);
this._emitCurrentToken();
this._emitEOFToken();
} else {
this.currentToken.data += '--';
this._reconsumeInState(COMMENT_STATE);
}
}
[COMMENT_END_BANG_STATE](cp) {
if (cp === $.HYPHEN_MINUS) {
this.currentToken.data += '--!';
this.state = COMMENT_END_DASH_STATE;
} else if (cp === $.GREATER_THAN_SIGN) {
this._err(ERR.incorrectlyClosedComment);
this.state = DATA_STATE;
this._emitCurrentToken();
} else if (cp === $.EOF) {
this._err(ERR.eofInComment);
this._emitCurrentToken();
this._emitEOFToken();
} else {
this.currentToken.data += '--!';
this._reconsumeInState(COMMENT_STATE);
}
}
[DOCTYPE_STATE](cp) {
if (isWhitespace(cp)) {
this.state = BEFORE_DOCTYPE_NAME_STATE;
} else if (cp === $.GREATER_THAN_SIGN) {
this._reconsumeInState(BEFORE_DOCTYPE_NAME_STATE);
} else if (cp === $.EOF) {
this._err(ERR.eofInDoctype);
this._createDoctypeToken(null);
this.currentToken.forceQuirks = true;
this._emitCurrentToken();
this._emitEOFToken();
} else {
this._err(ERR.missingWhitespaceBeforeDoctypeName);
this._reconsumeInState(BEFORE_DOCTYPE_NAME_STATE);
}
}
[BEFORE_DOCTYPE_NAME_STATE](cp) {
if (isWhitespace(cp)) {
return;
}
if (isAsciiUpper(cp)) {
this._createDoctypeToken(toAsciiLowerChar(cp));
this.state = DOCTYPE_NAME_STATE;
} else if (cp === $.NULL) {
this._err(ERR.unexpectedNullCharacter);
this._createDoctypeToken(unicode.REPLACEMENT_CHARACTER);
this.state = DOCTYPE_NAME_STATE;
} else if (cp === $.GREATER_THAN_SIGN) {
this._err(ERR.missingDoctypeName);
this._createDoctypeToken(null);
this.currentToken.forceQuirks = true;
this._emitCurrentToken();
this.state = DATA_STATE;
} else if (cp === $.EOF) {
this._err(ERR.eofInDoctype);
this._createDoctypeToken(null);
this.currentToken.forceQuirks = true;
this._emitCurrentToken();
this._emitEOFToken();
} else {
this._createDoctypeToken(toChar(cp));
this.state = DOCTYPE_NAME_STATE;
}
}
[DOCTYPE_NAME_STATE](cp) {
if (isWhitespace(cp)) {
this.state = AFTER_DOCTYPE_NAME_STATE;
} else if (cp === $.GREATER_THAN_SIGN) {
this.state = DATA_STATE;
this._emitCurrentToken();
} else if (isAsciiUpper(cp)) {
this.currentToken.name += toAsciiLowerChar(cp);
} else if (cp === $.NULL) {
this._err(ERR.unexpectedNullCharacter);
this.currentToken.name += unicode.REPLACEMENT_CHARACTER;
} else if (cp === $.EOF) {
this._err(ERR.eofInDoctype);
this.currentToken.forceQuirks = true;
this._emitCurrentToken();
this._emitEOFToken();
} else {
this.currentToken.name += toChar(cp);
}
}
[AFTER_DOCTYPE_NAME_STATE](cp) {
if (isWhitespace(cp)) {
return;
}
if (cp === $.GREATER_THAN_SIGN) {
this.state = DATA_STATE;
this._emitCurrentToken();
} else if (cp === $.EOF) {
this._err(ERR.eofInDoctype);
this.currentToken.forceQuirks = true;
this._emitCurrentToken();
this._emitEOFToken();
} else if (this._consumeSequenceIfMatch($$.PUBLIC_STRING, cp, false)) {
this.state = AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE;
} else if (this._consumeSequenceIfMatch($$.SYSTEM_STRING, cp, false)) {
this.state = AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE;
}
else if (!this._ensureHibernation()) {
this._err(ERR.invalidCharacterSequenceAfterDoctypeName);
this.currentToken.forceQuirks = true;
this._reconsumeInState(BOGUS_DOCTYPE_STATE);
}
}
[AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE](cp) {
if (isWhitespace(cp)) {
this.state = BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE;
} else if (cp === $.QUOTATION_MARK) {
this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword);
this.currentToken.publicId = '';
this.state = DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE;
} else if (cp === $.APOSTROPHE) {
this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword);
this.currentToken.publicId = '';
this.state = DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE;
} else if (cp === $.GREATER_THAN_SIGN) {
this._err(ERR.missingDoctypePublicIdentifier);
this.currentToken.forceQuirks = true;
this.state = DATA_STATE;
this._emitCurrentToken();
} else if (cp === $.EOF) {
this._err(ERR.eofInDoctype);
this.currentToken.forceQuirks = true;
this._emitCurrentToken();
this._emitEOFToken();
} else {
this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier);
this.currentToken.forceQuirks = true;
this._reconsumeInState(BOGUS_DOCTYPE_STATE);
}
}
[BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE](cp) {
if (isWhitespace(cp)) {
return;
}
if (cp === $.QUOTATION_MARK) {
this.currentToken.publicId = '';
this.state = DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE;
} else if (cp === $.APOSTROPHE) {
this.currentToken.publicId = '';
this.state = DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE;
} else if (cp === $.GREATER_THAN_SIGN) {
this._err(ERR.missingDoctypePublicIdentifier);
this.currentToken.forceQuirks = true;
this.state = DATA_STATE;
this._emitCurrentToken();
} else if (cp === $.EOF) {
this._err(ERR.eofInDoctype);
this.currentToken.forceQuirks = true;
this._emitCurrentToken();
this._emitEOFToken();
} else {
this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier);
this.currentToken.forceQuirks = true;
this._reconsumeInState(BOGUS_DOCTYPE_STATE);
}
}
[DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE](cp) {
if (cp === $.QUOTATION_MARK) {
this.state = AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE;
} else if (cp === $.NULL) {
this._err(ERR.unexpectedNullCharacter);
this.currentToken.publicId += unicode.REPLACEMENT_CHARACTER;
} else if (cp === $.GREATER_THAN_SIGN) {
this._err(ERR.abruptDoctypePublicIdentifier);
this.currentToken.forceQuirks = true;
this._emitCurrentToken();
this.state = DATA_STATE;
} else if (cp === $.EOF) {
this._err(ERR.eofInDoctype);
this.currentToken.forceQuirks = true;
this._emitCurrentToken();
this._emitEOFToken();
} else {
this.currentToken.publicId += toChar(cp);
}
}
[DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE](cp) {
if (cp === $.APOSTROPHE) {
this.state = AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE;
} else if (cp === $.NULL) {
this._err(ERR.unexpectedNullCharacter);
this.currentToken.publicId += unicode.REPLACEMENT_CHARACTER;
} else if (cp === $.GREATER_THAN_SIGN) {
this._err(ERR.abruptDoctypePublicIdentifier);
this.currentToken.forceQuirks = true;
this._emitCurrentToken();
this.state = DATA_STATE;
} else if (cp === $.EOF) {
this._err(ERR.eofInDoctype);
this.currentToken.forceQuirks = true;
this._emitCurrentToken();
this._emitEOFToken();
} else {
this.currentToken.publicId += toChar(cp);
}
}
[AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE](cp) {
if (isWhitespace(cp)) {
this.state = BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE;
} else if (cp === $.GREATER_THAN_SIGN) {
this.state = DATA_STATE;
this._emitCurrentToken();
} else if (cp === $.QUOTATION_MARK) {
this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers);
this.currentToken.systemId = '';
this.state = DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE;
} else if (cp === $.APOSTROPHE) {
this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers);
this.currentToken.systemId = '';
this.state = DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE;
} else if (cp === $.EOF) {
this._err(ERR.eofInDoctype);
this.currentToken.forceQuirks = true;
this._emitCurrentToken();
this._emitEOFToken();
} else {
this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);
this.currentToken.forceQuirks = true;
this._reconsumeInState(BOGUS_DOCTYPE_STATE);
}
}
[BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE](cp) {
if (isWhitespace(cp)) {
return;
}
if (cp === $.GREATER_THAN_SIGN) {
this._emitCurrentToken();
this.state = DATA_STATE;
} else if (cp === $.QUOTATION_MARK) {
this.currentToken.systemId = '';
this.state = DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE;
} else if (cp === $.APOSTROPHE) {
this.currentToken.systemId = '';
this.state = DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE;
} else if (cp === $.EOF) {
this._err(ERR.eofInDoctype);
this.currentToken.forceQuirks = true;
this._emitCurrentToken();
this._emitEOFToken();
} else {
this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);
this.currentToken.forceQuirks = true;
this._reconsumeInState(BOGUS_DOCTYPE_STATE);
}
}
[AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE](cp) {
if (isWhitespace(cp)) {
this.state = BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE;
} else if (cp === $.QUOTATION_MARK) {
this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword);
this.currentToken.systemId = '';
this.state = DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE;
} else if (cp === $.APOSTROPHE) {
this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword);
this.currentToken.systemId = '';
this.state = DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE;
} else if (cp === $.GREATER_THAN_SIGN) {
this._err(ERR.missingDoctypeSystemIdentifier);
this.currentToken.forceQuirks = true;
this.state = DATA_STATE;
this._emitCurrentToken();
} else if (cp === $.EOF) {
this._err(ERR.eofInDoctype);
this.currentToken.forceQuirks = true;
this._emitCurrentToken();
this._emitEOFToken();
} else {
this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);
this.currentToken.forceQuirks = true;
this._reconsumeInState(BOGUS_DOCTYPE_STATE);
}
}
[BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE](cp) {
if (isWhitespace(cp)) {
return;
}
if (cp === $.QUOTATION_MARK) {
this.currentToken.systemId = '';
this.state = DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE;
} else if (cp === $.APOSTROPHE) {
this.currentToken.systemId = '';
this.state = DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE;
} else if (cp === $.GREATER_THAN_SIGN) {
this._err(ERR.missingDoctypeSystemIdentifier);
this.currentToken.forceQuirks = true;
this.state = DATA_STATE;
this._emitCurrentToken();
} else if (cp === $.EOF) {
this._err(ERR.eofInDoctype);
this.currentToken.forceQuirks = true;
this._emitCurrentToken();
this._emitEOFToken();
} else {
this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);
this.currentToken.forceQuirks = true;
this._reconsumeInState(BOGUS_DOCTYPE_STATE);
}
}
[DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE](cp) {
if (cp === $.QUOTATION_MARK) {
this.state = AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE;
} else if (cp === $.NULL) {
this._err(ERR.unexpectedNullCharacter);
this.currentToken.systemId += unicode.REPLACEMENT_CHARACTER;
} else if (cp === $.GREATER_THAN_SIGN) {
this._err(ERR.abruptDoctypeSystemIdentifier);
this.currentToken.forceQuirks = true;
this._emitCurrentToken();
this.state = DATA_STATE;
} else if (cp === $.EOF) {
this._err(ERR.eofInDoctype);
this.currentToken.forceQuirks = true;
this._emitCurrentToken();
this._emitEOFToken();
} else {
this.currentToken.systemId += toChar(cp);
}
}
[DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE](cp) {
if (cp === $.APOSTROPHE) {
this.state = AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE;
} else if (cp === $.NULL) {
this._err(ERR.unexpectedNullCharacter);
this.currentToken.systemId += unicode.REPLACEMENT_CHARACTER;
} else if (cp === $.GREATER_THAN_SIGN) {
this._err(ERR.abruptDoctypeSystemIdentifier);
this.currentToken.forceQuirks = true;
this._emitCurrentToken();
this.state = DATA_STATE;
} else if (cp === $.EOF) {
this._err(ERR.eofInDoctype);
this.currentToken.forceQuirks = true;
this._emitCurrentToken();
this._emitEOFToken();
} else {
this.currentToken.systemId += toChar(cp);
}
}
[AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE](cp) {
if (isWhitespace(cp)) {
return;
}
if (cp === $.GREATER_THAN_SIGN) {
this._emitCurrentToken();
this.state = DATA_STATE;
} else if (cp === $.EOF) {
this._err(ERR.eofInDoctype);
this.currentToken.forceQuirks = true;
this._emitCurrentToken();
this._emitEOFToken();
} else {
this._err(ERR.unexpectedCharacterAfterDoctypeSystemIdentifier);
this._reconsumeInState(BOGUS_DOCTYPE_STATE);
}
}
[BOGUS_DOCTYPE_STATE](cp) {
if (cp === $.GREATER_THAN_SIGN) {
this._emitCurrentToken();
this.state = DATA_STATE;
} else if (cp === $.NULL) {
this._err(ERR.unexpectedNullCharacter);
} else if (cp === $.EOF) {
this._emitCurrentToken();
this._emitEOFToken();
}
}
[CDATA_SECTION_STATE](cp) {
if (cp === $.RIGHT_SQUARE_BRACKET) {
this.state = CDATA_SECTION_BRACKET_STATE;
} else if (cp === $.EOF) {
this._err(ERR.eofInCdata);
this._emitEOFToken();
} else {
this._emitCodePoint(cp);
}
}
[CDATA_SECTION_BRACKET_STATE](cp) {
if (cp === $.RIGHT_SQUARE_BRACKET) {
this.state = CDATA_SECTION_END_STATE;
} else {
this._emitChars(']');
this._reconsumeInState(CDATA_SECTION_STATE);
}
}
[CDATA_SECTION_END_STATE](cp) {
if (cp === $.GREATER_THAN_SIGN) {
this.state = DATA_STATE;
} else if (cp === $.RIGHT_SQUARE_BRACKET) {
this._emitChars(']');
} else {
this._emitChars(']]');
this._reconsumeInState(CDATA_SECTION_STATE);
}
}
[CHARACTER_REFERENCE_STATE](cp) {
this.tempBuff = [$.AMPERSAND];
if (cp === $.NUMBER_SIGN) {
this.tempBuff.push(cp);
this.state = NUMERIC_CHARACTER_REFERENCE_STATE;
} else if (isAsciiAlphaNumeric(cp)) {
this._reconsumeInState(NAMED_CHARACTER_REFERENCE_STATE);
} else {
this._flushCodePointsConsumedAsCharacterReference();
this._reconsumeInState(this.returnState);
}
}
[NAMED_CHARACTER_REFERENCE_STATE](cp) {
const matchResult = this._matchNamedCharacterReference(cp);
if (this._ensureHibernation()) {
this.tempBuff = [$.AMPERSAND];
} else if (matchResult) {
const withSemicolon = this.tempBuff[this.tempBuff.length - 1] === $.SEMICOLON;
if (!this._isCharacterReferenceAttributeQuirk(withSemicolon)) {
if (!withSemicolon) {
this._errOnNextCodePoint(ERR.missingSemicolonAfterCharacterReference);
}
this.tempBuff = matchResult;
}
this._flushCodePointsConsumedAsCharacterReference();
this.state = this.returnState;
} else {
this._flushCodePointsConsumedAsCharacterReference();
this.state = AMBIGUOUS_AMPERSAND_STATE;
}
}
[AMBIGUOUS_AMPERSAND_STATE](cp) {
if (isAsciiAlphaNumeric(cp)) {
if (this._isCharacterReferenceInAttribute()) {
this.currentAttr.value += toChar(cp);
} else {
this._emitCodePoint(cp);
}
} else {
if (cp === $.SEMICOLON) {
this._err(ERR.unknownNamedCharacterReference);
}
this._reconsumeInState(this.returnState);
}
}
[NUMERIC_CHARACTER_REFERENCE_STATE](cp) {
this.charRefCode = 0;
if (cp === $.LATIN_SMALL_X || cp === $.LATIN_CAPITAL_X) {
this.tempBuff.push(cp);
this.state = HEXADEMICAL_CHARACTER_REFERENCE_START_STATE;
} else {
this._reconsumeInState(DECIMAL_CHARACTER_REFERENCE_START_STATE);
}
}
[HEXADEMICAL_CHARACTER_REFERENCE_START_STATE](cp) {
if (isAsciiHexDigit(cp)) {
this._reconsumeInState(HEXADEMICAL_CHARACTER_REFERENCE_STATE);
} else {
this._err(ERR.absenceOfDigitsInNumericCharacterReference);
this._flushCodePointsConsumedAsCharacterReference();
this._reconsumeInState(this.returnState);
}
}
[DECIMAL_CHARACTER_REFERENCE_START_STATE](cp) {
if (isAsciiDigit(cp)) {
this._reconsumeInState(DECIMAL_CHARACTER_REFERENCE_STATE);
} else {
this._err(ERR.absenceOfDigitsInNumericCharacterReference);
this._flushCodePointsConsumedAsCharacterReference();
this._reconsumeInState(this.returnState);
}
}
[HEXADEMICAL_CHARACTER_REFERENCE_STATE](cp) {
if (isAsciiUpperHexDigit(cp)) {
this.charRefCode = this.charRefCode * 16 + cp - 0x37;
} else if (isAsciiLowerHexDigit(cp)) {
this.charRefCode = this.charRefCode * 16 + cp - 0x57;
} else if (isAsciiDigit(cp)) {
this.charRefCode = this.charRefCode * 16 + cp - 0x30;
} else if (cp === $.SEMICOLON) {
this.state = NUMERIC_CHARACTER_REFERENCE_END_STATE;
} else {
this._err(ERR.missingSemicolonAfterCharacterReference);
this._reconsumeInState(NUMERIC_CHARACTER_REFERENCE_END_STATE);
}
}
[DECIMAL_CHARACTER_REFERENCE_STATE](cp) {
if (isAsciiDigit(cp)) {
this.charRefCode = this.charRefCode * 10 + cp - 0x30;
} else if (cp === $.SEMICOLON) {
this.state = NUMERIC_CHARACTER_REFERENCE_END_STATE;
} else {
this._err(ERR.missingSemicolonAfterCharacterReference);
this._reconsumeInState(NUMERIC_CHARACTER_REFERENCE_END_STATE);
}
}
[NUMERIC_CHARACTER_REFERENCE_END_STATE]() {
if (this.charRefCode === $.NULL) {
this._err(ERR.nullCharacterReference);
this.charRefCode = $.REPLACEMENT_CHARACTER;
} else if (this.charRefCode > 0x10ffff) {
this._err(ERR.characterReferenceOutsideUnicodeRange);
this.charRefCode = $.REPLACEMENT_CHARACTER;
} else if (unicode.isSurrogate(this.charRefCode)) {
this._err(ERR.surrogateCharacterReference);
this.charRefCode = $.REPLACEMENT_CHARACTER;
} else if (unicode.isUndefinedCodePoint(this.charRefCode)) {
this._err(ERR.noncharacterCharacterReference);
} else if (unicode.isControlCodePoint(this.charRefCode) || this.charRefCode === $.CARRIAGE_RETURN) {
this._err(ERR.controlCharacterReference);
const replacement = C1_CONTROLS_REFERENCE_REPLACEMENTS[this.charRefCode];
if (replacement) {
this.charRefCode = replacement;
}
}
this.tempBuff = [this.charRefCode];
this._flushCodePointsConsumedAsCharacterReference();
this._reconsumeInState(this.returnState);
}
}
Tokenizer.CHARACTER_TOKEN = 'CHARACTER_TOKEN';
Tokenizer.NULL_CHARACTER_TOKEN = 'NULL_CHARACTER_TOKEN';
Tokenizer.WHITESPACE_CHARACTER_TOKEN = 'WHITESPACE_CHARACTER_TOKEN';
Tokenizer.START_TAG_TOKEN = 'START_TAG_TOKEN';
Tokenizer.END_TAG_TOKEN = 'END_TAG_TOKEN';
Tokenizer.COMMENT_TOKEN = 'COMMENT_TOKEN';
Tokenizer.DOCTYPE_TOKEN = 'DOCTYPE_TOKEN';
Tokenizer.EOF_TOKEN = 'EOF_TOKEN';
Tokenizer.HIBERNATION_TOKEN = 'HIBERNATION_TOKEN';
Tokenizer.MODE = {
DATA: DATA_STATE,
RCDATA: RCDATA_STATE,
RAWTEXT: RAWTEXT_STATE,
SCRIPT_DATA: SCRIPT_DATA_STATE,
PLAINTEXT: PLAINTEXT_STATE
};
Tokenizer.getTokenAttr = function(token, attrName) {
for (let i = token.attrs.length - 1; i >= 0; i--) {
if (token.attrs[i].name === attrName) {
return token.attrs[i].value;
}
}
return null;
};
module.exports = Tokenizer;
},{"../common/error-codes":71,"../common/unicode":74,"./named-entity-data":89,"./preprocessor":90}],89:[function(require,module,exports){
'use strict';
module.exports = new Uint16Array([4,52,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,106,303,412,810,1432,1701,1796,1987,2114,2360,2420,2484,3170,3251,4140,4393,4575,4610,5106,5512,5728,6117,6274,6315,6345,6427,6516,7002,7910,8733,9323,9870,10170,10631,10893,11318,11386,11467,12773,13092,14474,14922,15448,15542,16419,17666,18166,18611,19004,19095,19298,19397,4,16,69,77,97,98,99,102,103,108,109,110,111,112,114,115,116,117,140,150,158,169,176,194,199,210,216,222,226,242,256,266,283,294,108,105,103,5,198,1,59,148,1,198,80,5,38,1,59,156,1,38,99,117,116,101,5,193,1,59,167,1,193,114,101,118,101,59,1,258,4,2,105,121,182,191,114,99,5,194,1,59,189,1,194,59,1,1040,114,59,3,55349,56580,114,97,118,101,5,192,1,59,208,1,192,112,104,97,59,1,913,97,99,114,59,1,256,100,59,1,10835,4,2,103,112,232,237,111,110,59,1,260,102,59,3,55349,56632,112,108,121,70,117,110,99,116,105,111,110,59,1,8289,105,110,103,5,197,1,59,264,1,197,4,2,99,115,272,277,114,59,3,55349,56476,105,103,110,59,1,8788,105,108,100,101,5,195,1,59,292,1,195,109,108,5,196,1,59,301,1,196,4,8,97,99,101,102,111,114,115,117,321,350,354,383,388,394,400,405,4,2,99,114,327,336,107,115,108,97,115,104,59,1,8726,4,2,118,119,342,345,59,1,10983,101,100,59,1,8966,121,59,1,1041,4,3,99,114,116,362,369,379,97,117,115,101,59,1,8757,110,111,117,108,108,105,115,59,1,8492,97,59,1,914,114,59,3,55349,56581,112,102,59,3,55349,56633,101,118,101,59,1,728,99,114,59,1,8492,109,112,101,113,59,1,8782,4,14,72,79,97,99,100,101,102,104,105,108,111,114,115,117,442,447,456,504,542,547,569,573,577,616,678,784,790,796,99,121,59,1,1063,80,89,5,169,1,59,454,1,169,4,3,99,112,121,464,470,497,117,116,101,59,1,262,4,2,59,105,476,478,1,8914,116,97,108,68,105,102,102,101,114,101,110,116,105,97,108,68,59,1,8517,108,101,121,115,59,1,8493,4,4,97,101,105,111,514,520,530,535,114,111,110,59,1,268,100,105,108,5,199,1,59,528,1,199,114,99,59,1,264,110,105,110,116,59,1,8752,111,116,59,1,266,4,2,100,110,553,560,105,108,108,97,59,1,184,116,101,114,68,111,116,59,1,183,114,59,1,8493,105,59,1,935,114,99,108,101,4,4,68,77,80,84,591,596,603,609,111,116,59,1,8857,105,110,117,115,59,1,8854,108,117,115,59,1,8853,105,109,101,115,59,1,8855,111,4,2,99,115,623,646,107,119,105,115,101,67,111,110,116,111,117,114,73,110,116,101,103,114,97,108,59,1,8754,101,67,117,114,108,121,4,2,68,81,658,671,111,117,98,108,101,81,117,111,116,101,59,1,8221,117,111,116,101,59,1,8217,4,4,108,110,112,117,688,701,736,753,111,110,4,2,59,101,696,698,1,8759,59,1,10868,4,3,103,105,116,709,717,722,114,117,101,110,116,59,1,8801,110,116,59,1,8751,111,117,114,73,110,116,101,103,114,97,108,59,1,8750,4,2,102,114,742,745,59,1,8450,111,100,117,99,116,59,1,8720,110,116,101,114,67,108,111,99,107,119,105,115,101,67,111,110,116,111,117,114,73,110,116,101,103,114,97,108,59,1,8755,111,115,115,59,1,10799,99,114,59,3,55349,56478,112,4,2,59,67,803,805,1,8915,97,112,59,1,8781,4,11,68,74,83,90,97,99,101,102,105,111,115,834,850,855,860,865,888,903,916,921,1011,1415,4,2,59,111,840,842,1,8517,116,114,97,104,100,59,1,10513,99,121,59,1,1026,99,121,59,1,1029,99,121,59,1,1039,4,3,103,114,115,873,879,883,103,101,114,59,1,8225,114,59,1,8609,104,118,59,1,10980,4,2,97,121,894,900,114,111,110,59,1,270,59,1,1044,108,4,2,59,116,910,912,1,8711,97,59,1,916,114,59,3,55349,56583,4,2,97,102,927,998,4,2,99,109,933,992,114,105,116,105,99,97,108,4,4,65,68,71,84,950,957,978,985,99,117,116,101,59,1,180,111,4,2,116,117,964,967,59,1,729,98,108,101,65,99,117,116,101,59,1,733,114,97,118,101,59,1,96,105,108,100,101,59,1,732,111,110,100,59,1,8900,102,101,114,101,110,116,105,97,108,68,59,1,8518,4,4,112,116,117,119,1021,1026,1048,1249,102,59,3,55349,56635,4,3,59,68,69,1034,1036,1041,1,168,111,116,59,1,8412,113,117,97,108,59,1,8784,98,108,101,4,6,67,68,76,82,85,86,1065,1082,1101,1189,1211,1236,111,110,116,111,117,114,73,110,116,101,103,114,97,108,59,1,8751,111,4,2,116,119,1089,1092,59,1,168,110,65,114,114,111,119,59,1,8659,4,2,101,111,1107,1141,102,116,4,3,65,82,84,1117,1124,1136,114,114,111,119,59,1,8656,105,103,104,116,65,114,114,111,119,59,1,8660,101,101,59,1,10980,110,103,4,2,76,82,1149,1177,101,102,116,4,2,65,82,1158,1165,114,114,111,119,59,1,10232,105,103,104,116,65,114,114,111,119,59,1,10234,105,103,104,116,65,114,114,111,119,59,1,10233,105,103,104,116,4,2,65,84,1199,1206,114,114,111,119,59,1,8658,101,101,59,1,8872,112,4,2,65,68,1218,1225,114,114,111,119,59,1,8657,111,119,110,65,114,114,111,119,59,1,8661,101,114,116,105,99,97,108,66,97,114,59,1,8741,110,4,6,65,66,76,82,84,97,1264,1292,1299,1352,1391,1408,114,114,111,119,4,3,59,66,85,1276,1278,1283,1,8595,97,114,59,1,10515,112,65,114,114,111,119,59,1,8693,114,101,118,101,59,1,785,101,102,116,4,3,82,84,86,1310,1323,1334,105,103,104,116,86,101,99,116,111,114,59,1,10576,101,101,86,101,99,116,111,114,59,1,10590,101,99,116,111,114,4,2,59,66,1345,1347,1,8637,97,114,59,1,10582,105,103,104,116,4,2,84,86,1362,1373,101,101,86,101,99,116,111,114,59,1,10591,101,99,116,111,114,4,2,59,66,1384,1386,1,8641,97,114,59,1,10583,101,101,4,2,59,65,1399,1401,1,8868,114,114,111,119,59,1,8615,114,114,111,119,59,1,8659,4,2,99,116,1421,1426,114,59,3,55349,56479,114,111,107,59,1,272,4,16,78,84,97,99,100,102,103,108,109,111,112,113,115,116,117,120,1466,1470,1478,1489,1515,1520,1525,1536,1544,1593,1609,1617,1650,1664,1668,1677,71,59,1,330,72,5,208,1,59,1476,1,208,99,117,116,101,5,201,1,59,1487,1,201,4,3,97,105,121,1497,1503,1512,114,111,110,59,1,282,114,99,5,202,1,59,1510,1,202,59,1,1069,111,116,59,1,278,114,59,3,55349,56584,114,97,118,101,5,200,1,59,1534,1,200,101,109,101,110,116,59,1,8712,4,2,97,112,1550,1555,99,114,59,1,274,116,121,4,2,83,86,1563,1576,109,97,108,108,83,113,117,97,114,101,59,1,9723,101,114,121,83,109,97,108,108,83,113,117,97,114,101,59,1,9643,4,2,103,112,1599,1604,111,110,59,1,280,102,59,3,55349,56636,115,105,108,111,110,59,1,917,117,4,2,97,105,1624,1640,108,4,2,59,84,1631,1633,1,10869,105,108,100,101,59,1,8770,108,105,98,114,105,117,109,59,1,8652,4,2,99,105,1656,1660,114,59,1,8496,109,59,1,10867,97,59,1,919,109,108,5,203,1,59,1675,1,203,4,2,105,112,1683,1689,115,116,115,59,1,8707,111,110,101,110,116,105,97,108,69,59,1,8519,4,5,99,102,105,111,115,1713,1717,1722,1762,1791,121,59,1,1060,114,59,3,55349,56585,108,108,101,100,4,2,83,86,1732,1745,109,97,108,108,83,113,117,97,114,101,59,1,9724,101,114,121,83,109,97,108,108,83,113,117,97,114,101,59,1,9642,4,3,112,114,117,1770,1775,1781,102,59,3,55349,56637,65,108,108,59,1,8704,114,105,101,114,116,114,102,59,1,8497,99,114,59,1,8497,4,12,74,84,97,98,99,100,102,103,111,114,115,116,1822,1827,1834,1848,1855,1877,1882,1887,1890,1896,1978,1984,99,121,59,1,1027,5,62,1,59,1832,1,62,109,109,97,4,2,59,100,1843,1845,1,915,59,1,988,114,101,118,101,59,1,286,4,3,101,105,121,1863,1869,1874,100,105,108,59,1,290,114,99,59,1,284,59,1,1043,111,116,59,1,288,114,59,3,55349,56586,59,1,8921,112,102,59,3,55349,56638,101,97,116,101,114,4,6,69,70,71,76,83,84,1915,1933,1944,1953,1959,1971,113,117,97,108,4,2,59,76,1925,1927,1,8805,101,115,115,59,1,8923,117,108,108,69,113,117,97,108,59,1,8807,114,101,97,116,101,114,59,1,10914,101,115,115,59,1,8823,108,97,110,116,69,113,117,97,108,59,1,10878,105,108,100,101,59,1,8819,99,114,59,3,55349,56482,59,1,8811,4,8,65,97,99,102,105,111,115,117,2005,2012,2026,2032,2036,2049,2073,2089,82,68,99,121,59,1,1066,4,2,99,116,2018,2023,101,107,59,1,711,59,1,94,105,114,99,59,1,292,114,59,1,8460,108,98,101,114,116,83,112,97,99,101,59,1,8459,4,2,112,114,2055,2059,102,59,1,8461,105,122,111,110,116,97,108,76,105,110,101,59,1,9472,4,2,99,116,2079,2083,114,59,1,8459,114,111,107,59,1,294,109,112,4,2,68,69,2097,2107,111,119,110,72,117,109,112,59,1,8782,113,117,97,108,59,1,8783,4,14,69,74,79,97,99,100,102,103,109,110,111,115,116,117,2144,2149,2155,2160,2171,2189,2194,2198,2209,2245,2307,2329,2334,2341,99,121,59,1,1045,108,105,103,59,1,306,99,121,59,1,1025,99,117,116,101,5,205,1,59,2169,1,205,4,2,105,121,2177,2186,114,99,5,206,1,59,2184,1,206,59,1,1048,111,116,59,1,304,114,59,1,8465,114,97,118,101,5,204,1,59,2207,1,204,4,3,59,97,112,2217,2219,2238,1,8465,4,2,99,103,2225,2229,114,59,1,298,105,110,97,114,121,73,59,1,8520,108,105,101,115,59,1,8658,4,2,116,118,2251,2281,4,2,59,101,2257,2259,1,8748,4,2,103,114,2265,2271,114,97,108,59,1,8747,115,101,99,116,105,111,110,59,1,8898,105,115,105,98,108,101,4,2,67,84,2293,2300,111,109,109,97,59,1,8291,105,109,101,115,59,1,8290,4,3,103,112,116,2315,2320,2325,111,110,59,1,302,102,59,3,55349,56640,97,59,1,921,99,114,59,1,8464,105,108,100,101,59,1,296,4,2,107,109,2347,2352,99,121,59,1,1030,108,5,207,1,59,2358,1,207,4,5,99,102,111,115,117,2372,2386,2391,2397,2414,4,2,105,121,2378,2383,114,99,59,1,308,59,1,1049,114,59,3,55349,56589,112,102,59,3,55349,56641,4,2,99,101,2403,2408,114,59,3,55349,56485,114,99,121,59,1,1032,107,99,121,59,1,1028,4,7,72,74,97,99,102,111,115,2436,2441,2446,2452,2467,2472,2478,99,121,59,1,1061,99,121,59,1,1036,112,112,97,59,1,922,4,2,101,121,2458,2464,100,105,108,59,1,310,59,1,1050,114,59,3,55349,56590,112,102,59,3,55349,56642,99,114,59,3,55349,56486,4,11,74,84,97,99,101,102,108,109,111,115,116,2508,2513,2520,2562,2585,2981,2986,3004,3011,3146,3167,99,121,59,1,1033,5,60,1,59,2518,1,60,4,5,99,109,110,112,114,2532,2538,2544,2548,2558,117,116,101,59,1,313,98,100,97,59,1,923,103,59,1,10218,108,97,99,101,116,114,102,59,1,8466,114,59,1,8606,4,3,97,101,121,2570,2576,2582,114,111,110,59,1,317,100,105,108,59,1,315,59,1,1051,4,2,102,115,2591,2907,116,4,10,65,67,68,70,82,84,85,86,97,114,2614,2663,2672,2728,2735,2760,2820,2870,2888,2895,4,2,110,114,2620,2633,103,108,101,66,114,97,99,107,101,116,59,1,10216,114,111,119,4,3,59,66,82,2644,2646,2651,1,8592,97,114,59,1,8676,105,103,104,116,65,114,114,111,119,59,1,8646,101,105,108,105,110,103,59,1,8968,111,4,2,117,119,2679,2692,98,108,101,66,114,97,99,107,101,116,59,1,10214,110,4,2,84,86,2699,2710,101,101,86,101,99,116,111,114,59,1,10593,101,99,116,111,114,4,2,59,66,2721,2723,1,8643,97,114,59,1,10585,108,111,111,114,59,1,8970,105,103,104,116,4,2,65,86,2745,2752,114,114,111,119,59,1,8596,101,99,116,111,114,59,1,10574,4,2,101,114,2766,2792,101,4,3,59,65,86,2775,2777,2784,1,8867,114,114,111,119,59,1,8612,101,99,116,111,114,59,1,10586,105,97,110,103,108,101,4,3,59,66,69,2806,2808,2813,1,8882,97,114,59,1,10703,113,117,97,108,59,1,8884,112,4,3,68,84,86,2829,2841,2852,111,119,110,86,101,99,116,111,114,59,1,10577,101,101,86,101,99,116,111,114,59,1,10592,101,99,116,111,114,4,2,59,66,2863,2865,1,8639,97,114,59,1,10584,101,99,116,111,114,4,2,59,66,2881,2883,1,8636,97,114,59,1,10578,114,114,111,119,59,1,8656,105,103,104,116,97,114,114,111,119,59,1,8660,115,4,6,69,70,71,76,83,84,2922,2936,2947,2956,2962,2974,113,117,97,108,71,114,101,97,116,101,114,59,1,8922,117,108,108,69,113,117,97,108,59,1,8806,114,101,97,116,101,114,59,1,8822,101,115,115,59,1,10913,108,97,110,116,69,113,117,97,108,59,1,10877,105,108,100,101,59,1,8818,114,59,3,55349,56591,4,2,59,101,2992,2994,1,8920,102,116,97,114,114,111,119,59,1,8666,105,100,111,116,59,1,319,4,3,110,112,119,3019,3110,3115,103,4,4,76,82,108,114,3030,3058,3070,3098,101,102,116,4,2,65,82,3039,3046,114,114,111,119,59,1,10229,105,103,104,116,65,114,114,111,119,59,1,10231,105,103,104,116,65,114,114,111,119,59,1,10230,101,102,116,4,2,97,114,3079,3086,114,114,111,119,59,1,10232,105,103,104,116,97,114,114,111,119,59,1,10234,105,103,104,116,97,114,114,111,119,59,1,10233,102,59,3,55349,56643,101,114,4,2,76,82,3123,3134,101,102,116,65,114,114,111,119,59,1,8601,105,103,104,116,65,114,114,111,119,59,1,8600,4,3,99,104,116,3154,3158,3161,114,59,1,8466,59,1,8624,114,111,107,59,1,321,59,1,8810,4,8,97,99,101,102,105,111,115,117,3188,3192,3196,3222,3227,3237,3243,3248,112,59,1,10501,121,59,1,1052,4,2,100,108,3202,3213,105,117,109,83,112,97,99,101,59,1,8287,108,105,110,116,114,102,59,1,8499,114,59,3,55349,56592,110,117,115,80,108,117,115,59,1,8723,112,102,59,3,55349,56644,99,114,59,1,8499,59,1,924,4,9,74,97,99,101,102,111,115,116,117,3271,3276,3283,3306,3422,3427,4120,4126,4137,99,121,59,1,1034,99,117,116,101,59,1,323,4,3,97,101,121,3291,3297,3303,114,111,110,59,1,327,100,105,108,59,1,325,59,1,1053,4,3,103,115,119,3314,3380,3415,97,116,105,118,101,4,3,77,84,86,3327,3340,3365,101,100,105,117,109,83,112,97,99,101,59,1,8203,104,105,4,2,99,110,3348,3357,107,83,112,97,99,101,59,1,8203,83,112,97,99,101,59,1,8203,101,114,121,84,104,105,110,83,112,97,99,101,59,1,8203,116,101,100,4,2,71,76,3389,3405,114,101,97,116,101,114,71,114,101,97,116,101,114,59,1,8811,101,115,115,76,101,115,115,59,1,8810,76,105,110,101,59,1,10,114,59,3,55349,56593,4,4,66,110,112,116,3437,3444,3460,3464,114,101,97,107,59,1,8288,66,114,101,97,107,105,110,103,83,112,97,99,101,59,1,160,102,59,1,8469,4,13,59,67,68,69,71,72,76,78,80,82,83,84,86,3492,3494,3517,3536,3578,3657,3685,3784,3823,3860,3915,4066,4107,1,10988,4,2,111,117,3500,3510,110,103,114,117,101,110,116,59,1,8802,112,67,97,112,59,1,8813,111,117,98,108,101,86,101,114,116,105,99,97,108,66,97,114,59,1,8742,4,3,108,113,120,3544,3552,3571,101,109,101,110,116,59,1,8713,117,97,108,4,2,59,84,3561,3563,1,8800,105,108,100,101,59,3,8770,824,105,115,116,115,59,1,8708,114,101,97,116,101,114,4,7,59,69,70,71,76,83,84,3600,3602,3609,3621,3631,3637,3650,1,8815,113,117,97,108,59,1,8817,117,108,108,69,113,117,97,108,59,3,8807,824,114,101,97,116,101,114,59,3,8811,824,101,115,115,59,1,8825,108,97,110,116,69,113,117,97,108,59,3,10878,824,105,108,100,101,59,1,8821,117,109,112,4,2,68,69,3666,3677,111,119,110,72,117,109,112,59,3,8782,824,113,117,97,108,59,3,8783,824,101,4,2,102,115,3692,3724,116,84,114,105,97,110,103,108,101,4,3,59,66,69,3709,3711,3717,1,8938,97,114,59,3,10703,824,113,117,97,108,59,1,8940,115,4,6,59,69,71,76,83,84,3739,3741,3748,3757,3764,3777,1,8814,113,117,97,108,59,1,8816,114,101,97,116,101,114,59,1,8824,101,115,115,59,3,8810,824,108,97,110,116,69,113,117,97,108,59,3,10877,824,105,108,100,101,59,1,8820,101,115,116,101,100,4,2,71,76,3795,3812,114,101,97,116,101,114,71,114,101,97,116,101,114,59,3,10914,824,101,115,115,76,101,115,115,59,3,10913,824,114,101,99,101,100,101,115,4,3,59,69,83,3838,3840,3848,1,8832,113,117,97,108,59,3,10927,824,108,97,110,116,69,113,117,97,108,59,1,8928,4,2,101,105,3866,3881,118,101,114,115,101,69,108,101,109,101,110,116,59,1,8716,103,104,116,84,114,105,97,110,103,108,101,4,3,59,66,69,3900,3902,3908,1,8939,97,114,59,3,10704,824,113,117,97,108,59,1,8941,4,2,113,117,3921,3973,117,97,114,101,83,117,4,2,98,112,3933,3952,115,101,116,4,2,59,69,3942,3945,3,8847,824,113,117,97,108,59,1,8930,101,114,115,101,116,4,2,59,69,3963,3966,3,8848,824,113,117,97,108,59,1,8931,4,3,98,99,112,3981,4000,4045,115,101,116,4,2,59,69,3990,3993,3,8834,8402,113,117,97,108,59,1,8840,99,101,101,100,115,4,4,59,69,83,84,4015,4017,4025,4037,1,8833,113,117,97,108,59,3,10928,824,108,97,110,116,69,113,117,97,108,59,1,8929,105,108,100,101,59,3,8831,824,101,114,115,101,116,4,2,59,69,4056,4059,3,8835,8402,113,117,97,108,59,1,8841,105,108,100,101,4,4,59,69,70,84,4080,4082,4089,4100,1,8769,113,117,97,108,59,1,8772,117,108,108,69,113,117,97,108,59,1,8775,105,108,100,101,59,1,8777,101,114,116,105,99,97,108,66,97,114,59,1,8740,99,114,59,3,55349,56489,105,108,100,101,5,209,1,59,4135,1,209,59,1,925,4,14,69,97,99,100,102,103,109,111,112,114,115,116,117,118,4170,4176,4187,4205,4212,4217,4228,4253,4259,4292,4295,4316,4337,4346,108,105,103,59,1,338,99,117,116,101,5,211,1,59,4185,1,211,4,2,105,121,4193,4202,114,99,5,212,1,59,4200,1,212,59,1,1054,98,108,97,99,59,1,336,114,59,3,55349,56594,114,97,118,101,5,210,1,59,4226,1,210,4,3,97,101,105,4236,4241,4246,99,114,59,1,332,103,97,59,1,937,99,114,111,110,59,1,927,112,102,59,3,55349,56646,101,110,67,117,114,108,121,4,2,68,81,4272,4285,111,117,98,108,101,81,117,111,116,101,59,1,8220,117,111,116,101,59,1,8216,59,1,10836,4,2,99,108,4301,4306,114,59,3,55349,56490,97,115,104,5,216,1,59,4314,1,216,105,4,2,108,109,4323,4332,100,101,5,213,1,59,4330,1,213,101,115,59,1,10807,109,108,5,214,1,59,4344,1,214,101,114,4,2,66,80,4354,4380,4,2,97,114,4360,4364,114,59,1,8254,97,99,4,2,101,107,4372,4375,59,1,9182,101,116,59,1,9140,97,114,101,110,116,104,101,115,105,115,59,1,9180,4,9,97,99,102,104,105,108,111,114,115,4413,4422,4426,4431,4435,4438,4448,4471,4561,114,116,105,97,108,68,59,1,8706,121,59,1,1055,114,59,3,55349,56595,105,59,1,934,59,1,928,117,115,77,105,110,117,115,59,1,177,4,2,105,112,4454,4467,110,99,97,114,101,112,108,97,110,101,59,1,8460,102,59,1,8473,4,4,59,101,105,111,4481,4483,4526,4531,1,10939,99,101,100,101,115,4,4,59,69,83,84,4498,4500,4507,4519,1,8826,113,117,97,108,59,1,10927,108,97,110,116,69,113,117,97,108,59,1,8828,105,108,100,101,59,1,8830,109,101,59,1,8243,4,2,100,112,4537,4543,117,99,116,59,1,8719,111,114,116,105,111,110,4,2,59,97,4555,4557,1,8759,108,59,1,8733,4,2,99,105,4567,4572,114,59,3,55349,56491,59,1,936,4,4,85,102,111,115,4585,4594,4599,4604,79,84,5,34,1,59,4592,1,34,114,59,3,55349,56596,112,102,59,1,8474,99,114,59,3,55349,56492,4,12,66,69,97,99,101,102,104,105,111,114,115,117,4636,4642,4650,4681,4704,4763,4767,4771,5047,5069,5081,5094,97,114,114,59,1,10512,71,5,174,1,59,4648,1,174,4,3,99,110,114,4658,4664,4668,117,116,101,59,1,340,103,59,1,10219,114,4,2,59,116,4675,4677,1,8608,108,59,1,10518,4,3,97,101,121,4689,4695,4701,114,111,110,59,1,344,100,105,108,59,1,342,59,1,1056,4,2,59,118,4710,4712,1,8476,101,114,115,101,4,2,69,85,4722,4748,4,2,108,113,4728,4736,101,109,101,110,116,59,1,8715,117,105,108,105,98,114,105,117,109,59,1,8651,112,69,113,117,105,108,105,98,114,105,117,109,59,1,10607,114,59,1,8476,111,59,1,929,103,104,116,4,8,65,67,68,70,84,85,86,97,4792,4840,4849,4905,4912,4972,5022,5040,4,2,110,114,4798,4811,103,108,101,66,114,97,99,107,101,116,59,1,10217,114,111,119,4,3,59,66,76,4822,4824,4829,1,8594,97,114,59,1,8677,101,102,116,65,114,114,111,119,59,1,8644,101,105,108,105,110,103,59,1,8969,111,4,2,117,119,4856,4869,98,108,101,66,114,97,99,107,101,116,59,1,10215,110,4,2,84,86,4876,4887,101,101,86,101,99,116,111,114,59,1,10589,101,99,116,111,114,4,2,59,66,4898,4900,1,8642,97,114,59,1,10581,108,111,111,114,59,1,8971,4,2,101,114,4918,4944,101,4,3,59,65,86,4927,4929,4936,1,8866,114,114,111,119,59,1,8614,101,99,116,111,114,59,1,10587,105,97,110,103,108,101,4,3,59,66,69,4958,4960,4965,1,8883,97,114,59,1,10704,113,117,97,108,59,1,8885,112,4,3,68,84,86,4981,4993,5004,111,119,110,86,101,99,116,111,114,59,1,10575,101,101,86,101,99,116,111,114,59,1,10588,101,99,116,111,114,4,2,59,66,5015,5017,1,8638,97,114,59,1,10580,101,99,116,111,114,4,2,59,66,5033,5035,1,8640,97,114,59,1,10579,114,114,111,119,59,1,8658,4,2,112,117,5053,5057,102,59,1,8477,110,100,73,109,112,108,105,101,115,59,1,10608,105,103,104,116,97,114,114,111,119,59,1,8667,4,2,99,104,5087,5091,114,59,1,8475,59,1,8625,108,101,68,101,108,97,121,101,100,59,1,10740,4,13,72,79,97,99,102,104,105,109,111,113,115,116,117,5134,5150,5157,5164,5198,5203,5259,5265,5277,5283,5374,5380,5385,4,2,67,99,5140,5146,72,99,121,59,1,1065,121,59,1,1064,70,84,99,121,59,1,1068,99,117,116,101,59,1,346,4,5,59,97,101,105,121,5176,5178,5184,5190,5195,1,10940,114,111,110,59,1,352,100,105,108,59,1,350,114,99,59,1,348,59,1,1057,114,59,3,55349,56598,111,114,116,4,4,68,76,82,85,5216,5227,5238,5250,111,119,110,65,114,114,111,119,59,1,8595,101,102,116,65,114,114,111,119,59,1,8592,105,103,104,116,65,114,114,111,119,59,1,8594,112,65,114,114,111,119,59,1,8593,103,109,97,59,1,931,97,108,108,67,105,114,99,108,101,59,1,8728,112,102,59,3,55349,56650,4,2,114,117,5289,5293,116,59,1,8730,97,114,101,4,4,59,73,83,85,5306,5308,5322,5367,1,9633,110,116,101,114,115,101,99,116,105,111,110,59,1,8851,117,4,2,98,112,5329,5347,115,101,116,4,2,59,69,5338,5340,1,8847,113,117,97,108,59,1,8849,101,114,115,101,116,4,2,59,69,5358,5360,1,8848,113,117,97,108,59,1,8850,110,105,111,110,59,1,8852,99,114,59,3,55349,56494,97,114,59,1,8902,4,4,98,99,109,112,5395,5420,5475,5478,4,2,59,115,5401,5403,1,8912,101,116,4,2,59,69,5411,5413,1,8912,113,117,97,108,59,1,8838,4,2,99,104,5426,5468,101,101,100,115,4,4,59,69,83,84,5440,5442,5449,5461,1,8827,113,117,97,108,59,1,10928,108,97,110,116,69,113,117,97,108,59,1,8829,105,108,100,101,59,1,8831,84,104,97,116,59,1,8715,59,1,8721,4,3,59,101,115,5486,5488,5507,1,8913,114,115,101,116,4,2,59,69,5498,5500,1,8835,113,117,97,108,59,1,8839,101,116,59,1,8913,4,11,72,82,83,97,99,102,104,105,111,114,115,5536,5546,5552,5567,5579,5602,5607,5655,5695,5701,5711,79,82,78,5,222,1,59,5544,1,222,65,68,69,59,1,8482,4,2,72,99,5558,5563,99,121,59,1,1035,121,59,1,1062,4,2,98,117,5573,5576,59,1,9,59,1,932,4,3,97,101,121,5587,5593,5599,114,111,110,59,1,356,100,105,108,59,1,354,59,1,1058,114,59,3,55349,56599,4,2,101,105,5613,5631,4,2,114,116,5619,5627,101,102,111,114,101,59,1,8756,97,59,1,920,4,2,99,110,5637,5647,107,83,112,97,99,101,59,3,8287,8202,83,112,97,99,101,59,1,8201,108,100,101,4,4,59,69,70,84,5668,5670,5677,5688,1,8764,113,117,97,108,59,1,8771,117,108,108,69,113,117,97,108,59,1,8773,105,108,100,101,59,1,8776,112,102,59,3,55349,56651,105,112,108,101,68,111,116,59,1,8411,4,2,99,116,5717,5722,114,59,3,55349,56495,114,111,107,59,1,358,4,14,97,98,99,100,102,103,109,110,111,112,114,115,116,117,5758,5789,5805,5823,5830,5835,5846,5852,5921,5937,6089,6095,6101,6108,4,2,99,114,5764,5774,117,116,101,5,218,1,59,5772,1,218,114,4,2,59,111,5781,5783,1,8607,99,105,114,59,1,10569,114,4,2,99,101,5796,5800,121,59,1,1038,118,101,59,1,364,4,2,105,121,5811,5820,114,99,5,219,1,59,5818,1,219,59,1,1059,98,108,97,99,59,1,368,114,59,3,55349,56600,114,97,118,101,5,217,1,59,5844,1,217,97,99,114,59,1,362,4,2,100,105,5858,5905,101,114,4,2,66,80,5866,5892,4,2,97,114,5872,5876,114,59,1,95,97,99,4,2,101,107,5884,5887,59,1,9183,101,116,59,1,9141,97,114,101,110,116,104,101,115,105,115,59,1,9181,111,110,4,2,59,80,5913,5915,1,8899,108,117,115,59,1,8846,4,2,103,112,5927,5932,111,110,59,1,370,102,59,3,55349,56652,4,8,65,68,69,84,97,100,112,115,5955,5985,5996,6009,6026,6033,6044,6075,114,114,111,119,4,3,59,66,68,5967,5969,5974,1,8593,97,114,59,1,10514,111,119,110,65,114,114,111,119,59,1,8645,111,119,110,65,114,114,111,119,59,1,8597,113,117,105,108,105,98,114,105,117,109,59,1,10606,101,101,4,2,59,65,6017,6019,1,8869,114,114,111,119,59,1,8613,114,114,111,119,59,1,8657,111,119,110,97,114,114,111,119,59,1,8661,101,114,4,2,76,82,6052,6063,101,102,116,65,114,114,111,119,59,1,8598,105,103,104,116,65,114,114,111,119,59,1,8599,105,4,2,59,108,6082,6084,1,978,111,110,59,1,933,105,110,103,59,1,366,99,114,59,3,55349,56496,105,108,100,101,59,1,360,109,108,5,220,1,59,6115,1,220,4,9,68,98,99,100,101,102,111,115,118,6137,6143,6148,6152,6166,6250,6255,6261,6267,97,115,104,59,1,8875,97,114,59,1,10987,121,59,1,1042,97,115,104,4,2,59,108,6161,6163,1,8873,59,1,10982,4,2,101,114,6172,6175,59,1,8897,4,3,98,116,121,6183,6188,6238,97,114,59,1,8214,4,2,59,105,6194,6196,1,8214,99,97,108,4,4,66,76,83,84,6209,6214,6220,6231,97,114,59,1,8739,105,110,101,59,1,124,101,112,97,114,97,116,111,114,59,1,10072,105,108,100,101,59,1,8768,84,104,105,110,83,112,97,99,101,59,1,8202,114,59,3,55349,56601,112,102,59,3,55349,56653,99,114,59,3,55349,56497,100,97,115,104,59,1,8874,4,5,99,101,102,111,115,6286,6292,6298,6303,6309,105,114,99,59,1,372,100,103,101,59,1,8896,114,59,3,55349,56602,112,102,59,3,55349,56654,99,114,59,3,55349,56498,4,4,102,105,111,115,6325,6330,6333,6339,114,59,3,55349,56603,59,1,926,112,102,59,3,55349,56655,99,114,59,3,55349,56499,4,9,65,73,85,97,99,102,111,115,117,6365,6370,6375,6380,6391,6405,6410,6416,6422,99,121,59,1,1071,99,121,59,1,1031,99,121,59,1,1070,99,117,116,101,5,221,1,59,6389,1,221,4,2,105,121,6397,6402,114,99,59,1,374,59,1,1067,114,59,3,55349,56604,112,102,59,3,55349,56656,99,114,59,3,55349,56500,109,108,59,1,376,4,8,72,97,99,100,101,102,111,115,6445,6450,6457,6472,6477,6501,6505,6510,99,121,59,1,1046,99,117,116,101,59,1,377,4,2,97,121,6463,6469,114,111,110,59,1,381,59,1,1047,111,116,59,1,379,4,2,114,116,6483,6497,111,87,105,100,116,104,83,112,97,99,101,59,1,8203,97,59,1,918,114,59,1,8488,112,102,59,1,8484,99,114,59,3,55349,56501,4,16,97,98,99,101,102,103,108,109,110,111,112,114,115,116,117,119,6550,6561,6568,6612,6622,6634,6645,6672,6699,6854,6870,6923,6933,6963,6974,6983,99,117,116,101,5,225,1,59,6559,1,225,114,101,118,101,59,1,259,4,6,59,69,100,105,117,121,6582,6584,6588,6591,6600,6609,1,8766,59,3,8766,819,59,1,8767,114,99,5,226,1,59,6598,1,226,116,101,5,180,1,59,6607,1,180,59,1,1072,108,105,103,5,230,1,59,6620,1,230,4,2,59,114,6628,6630,1,8289,59,3,55349,56606,114,97,118,101,5,224,1,59,6643,1,224,4,2,101,112,6651,6667,4,2,102,112,6657,6663,115,121,109,59,1,8501,104,59,1,8501,104,97,59,1,945,4,2,97,112,6678,6692,4,2,99,108,6684,6688,114,59,1,257,103,59,1,10815,5,38,1,59,6697,1,38,4,2,100,103,6705,6737,4,5,59,97,100,115,118,6717,6719,6724,6727,6734,1,8743,110,100,59,1,10837,59,1,10844,108,111,112,101,59,1,10840,59,1,10842,4,7,59,101,108,109,114,115,122,6753,6755,6758,6762,6814,6835,6848,1,8736,59,1,10660,101,59,1,8736,115,100,4,2,59,97,6770,6772,1,8737,4,8,97,98,99,100,101,102,103,104,6790,6793,6796,6799,6802,6805,6808,6811,59,1,10664,59,1,10665,59,1,10666,59,1,10667,59,1,10668,59,1,10669,59,1,10670,59,1,10671,116,4,2,59,118,6821,6823,1,8735,98,4,2,59,100,6830,6832,1,8894,59,1,10653,4,2,112,116,6841,6845,104,59,1,8738,59,1,197,97,114,114,59,1,9084,4,2,103,112,6860,6865,111,110,59,1,261,102,59,3,55349,56658,4,7,59,69,97,101,105,111,112,6886,6888,6891,6897,6900,6904,6908,1,8776,59,1,10864,99,105,114,59,1,10863,59,1,8778,100,59,1,8779,115,59,1,39,114,111,120,4,2,59,101,6917,6919,1,8776,113,59,1,8778,105,110,103,5,229,1,59,6931,1,229,4,3,99,116,121,6941,6946,6949,114,59,3,55349,56502,59,1,42,109,112,4,2,59,101,6957,6959,1,8776,113,59,1,8781,105,108,100,101,5,227,1,59,6972,1,227,109,108,5,228,1,59,6981,1,228,4,2,99,105,6989,6997,111,110,105,110,116,59,1,8755,110,116,59,1,10769,4,16,78,97,98,99,100,101,102,105,107,108,110,111,112,114,115,117,7036,7041,7119,7135,7149,7155,7219,7224,7347,7354,7463,7489,7786,7793,7814,7866,111,116,59,1,10989,4,2,99,114,7047,7094,107,4,4,99,101,112,115,7058,7064,7073,7080,111,110,103,59,1,8780,112,115,105,108,111,110,59,1,1014,114,105,109,101,59,1,8245,105,109,4,2,59,101,7088,7090,1,8765,113,59,1,8909,4,2,118,119,7100,7105,101,101,59,1,8893,101,100,4,2,59,103,7113,7115,1,8965,101,59,1,8965,114,107,4,2,59,116,7127,7129,1,9141,98,114,107,59,1,9142,4,2,111,121,7141,7146,110,103,59,1,8780,59,1,1073,113,117,111,59,1,8222,4,5,99,109,112,114,116,7167,7181,7188,7193,7199,97,117,115,4,2,59,101,7176,7178,1,8757,59,1,8757,112,116,121,118,59,1,10672,115,105,59,1,1014,110,111,117,59,1,8492,4,3,97,104,119,7207,7210,7213,59,1,946,59,1,8502,101,101,110,59,1,8812,114,59,3,55349,56607,103,4,7,99,111,115,116,117,118,119,7241,7262,7288,7305,7328,7335,7340,4,3,97,105,117,7249,7253,7258,112,59,1,8898,114,99,59,1,9711,112,59,1,8899,4,3,100,112,116,7270,7275,7281,111,116,59,1,10752,108,117,115,59,1,10753,105,109,101,115,59,1,10754,4,2,113,116,7294,7300,99,117,112,59,1,10758,97,114,59,1,9733,114,105,97,110,103,108,101,4,2,100,117,7318,7324,111,119,110,59,1,9661,112,59,1,9651,112,108,117,115,59,1,10756,101,101,59,1,8897,101,100,103,101,59,1,8896,97,114,111,119,59,1,10509,4,3,97,107,111,7362,7436,7458,4,2,99,110,7368,7432,107,4,3,108,115,116,7377,7386,7394,111,122,101,110,103,101,59,1,10731,113,117,97,114,101,59,1,9642,114,105,97,110,103,108,101,4,4,59,100,108,114,7411,7413,7419,7425,1,9652,111,119,110,59,1,9662,101,102,116,59,1,9666,105,103,104,116,59,1,9656,107,59,1,9251,4,2,49,51,7442,7454,4,2,50,52,7448,7451,59,1,9618,59,1,9617,52,59,1,9619,99,107,59,1,9608,4,2,101,111,7469,7485,4,2,59,113,7475,7478,3,61,8421,117,105,118,59,3,8801,8421,116,59,1,8976,4,4,112,116,119,120,7499,7504,7517,7523,102,59,3,55349,56659,4,2,59,116,7510,7512,1,8869,111,109,59,1,8869,116,105,101,59,1,8904,4,12,68,72,85,86,98,100,104,109,112,116,117,118,7549,7571,7597,7619,7655,7660,7682,7708,7715,7721,7728,7750,4,4,76,82,108,114,7559,7562,7565,7568,59,1,9559,59,1,9556,59,1,9558,59,1,9555,4,5,59,68,85,100,117,7583,7585,7588,7591,7594,1,9552,59,1,9574,59,1,9577,59,1,9572,59,1,9575,4,4,76,82,108,114,7607,7610,7613,7616,59,1,9565,59,1,9562,59,1,9564,59,1,9561,4,7,59,72,76,82,104,108,114,7635,7637,7640,7643,7646,7649,7652,1,9553,59,1,9580,59,1,9571,59,1,9568,59,1,9579,59,1,9570,59,1,9567,111,120,59,1,10697,4,4,76,82,108,114,7670,7673,7676,7679,59,1,9557,59,1,9554,59,1,9488,59,1,9484,4,5,59,68,85,100,117,7694,7696,7699,7702,7705,1,9472,59,1,9573,59,1,9576,59,1,9516,59,1,9524,105,110,117,115,59,1,8863,108,117,115,59,1,8862,105,109,101,115,59,1,8864,4,4,76,82,108,114,7738,7741,7744,7747,59,1,9563,59,1,9560,59,1,9496,59,1,9492,4,7,59,72,76,82,104,108,114,7766,7768,7771,7774,7777,7780,7783,1,9474,59,1,9578,59,1,9569,59,1,9566,59,1,9532,59,1,9508,59,1,9500,114,105,109,101,59,1,8245,4,2,101,118,7799,7804,118,101,59,1,728,98,97,114,5,166,1,59,7812,1,166,4,4,99,101,105,111,7824,7829,7834,7846,114,59,3,55349,56503,109,105,59,1,8271,109,4,2,59,101,7841,7843,1,8765,59,1,8909,108,4,3,59,98,104,7855,7857,7860,1,92,59,1,10693,115,117,98,59,1,10184,4,2,108,109,7872,7885,108,4,2,59,101,7879,7881,1,8226,116,59,1,8226,112,4,3,59,69,101,7894,7896,7899,1,8782,59,1,10926,4,2,59,113,7905,7907,1,8783,59,1,8783,4,15,97,99,100,101,102,104,105,108,111,114,115,116,117,119,121,7942,8021,8075,8080,8121,8126,8157,8279,8295,8430,8446,8485,8491,8707,8726,4,3,99,112,114,7950,7956,8007,117,116,101,59,1,263,4,6,59,97,98,99,100,115,7970,7972,7977,7984,7998,8003,1,8745,110,100,59,1,10820,114,99,117,112,59,1,10825,4,2,97,117,7990,7994,112,59,1,10827,112,59,1,10823,111,116,59,1,10816,59,3,8745,65024,4,2,101,111,8013,8017,116,59,1,8257,110,59,1,711,4,4,97,101,105,117,8031,8046,8056,8061,4,2,112,114,8037,8041,115,59,1,10829,111,110,59,1,269,100,105,108,5,231,1,59,8054,1,231,114,99,59,1,265,112,115,4,2,59,115,8069,8071,1,10828,109,59,1,10832,111,116,59,1,267,4,3,100,109,110,8088,8097,8104,105,108,5,184,1,59,8095,1,184,112,116,121,118,59,1,10674,116,5,162,2,59,101,8112,8114,1,162,114,100,111,116,59,1,183,114,59,3,55349,56608,4,3,99,101,105,8134,8138,8154,121,59,1,1095,99,107,4,2,59,109,8146,8148,1,10003,97,114,107,59,1,10003,59,1,967,114,4,7,59,69,99,101,102,109,115,8174,8176,8179,8258,8261,8268,8273,1,9675,59,1,10691,4,3,59,101,108,8187,8189,8193,1,710,113,59,1,8791,101,4,2,97,100,8200,8223,114,114,111,119,4,2,108,114,8210,8216,101,102,116,59,1,8634,105,103,104,116,59,1,8635,4,5,82,83,97,99,100,8235,8238,8241,8246,8252,59,1,174,59,1,9416,115,116,59,1,8859,105,114,99,59,1,8858,97,115,104,59,1,8861,59,1,8791,110,105,110,116,59,1,10768,105,100,59,1,10991,99,105,114,59,1,10690,117,98,115,4,2,59,117,8288,8290,1,9827,105,116,59,1,9827,4,4,108,109,110,112,8305,8326,8376,8400,111,110,4,2,59,101,8313,8315,1,58,4,2,59,113,8321,8323,1,8788,59,1,8788,4,2,109,112,8332,8344,97,4,2,59,116,8339,8341,1,44,59,1,64,4,3,59,102,108,8352,8354,8358,1,8705,110,59,1,8728,101,4,2,109,120,8365,8371,101,110,116,59,1,8705,101,115,59,1,8450,4,2,103,105,8382,8395,4,2,59,100,8388,8390,1,8773,111,116,59,1,10861,110,116,59,1,8750,4,3,102,114,121,8408,8412,8417,59,3,55349,56660,111,100,59,1,8720,5,169,2,59,115,8424,8426,1,169,114,59,1,8471,4,2,97,111,8436,8441,114,114,59,1,8629,115,115,59,1,10007,4,2,99,117,8452,8457,114,59,3,55349,56504,4,2,98,112,8463,8474,4,2,59,101,8469,8471,1,10959,59,1,10961,4,2,59,101,8480,8482,1,10960,59,1,10962,100,111,116,59,1,8943,4,7,100,101,108,112,114,118,119,8507,8522,8536,8550,8600,8697,8702,97,114,114,4,2,108,114,8516,8519,59,1,10552,59,1,10549,4,2,112,115,8528,8532,114,59,1,8926,99,59,1,8927,97,114,114,4,2,59,112,8545,8547,1,8630,59,1,10557,4,6,59,98,99,100,111,115,8564,8566,8573,8587,8592,8596,1,8746,114,99,97,112,59,1,10824,4,2,97,117,8579,8583,112,59,1,10822,112,59,1,10826,111,116,59,1,8845,114,59,1,10821,59,3,8746,65024,4,4,97,108,114,118,8610,8623,8663,8672,114,114,4,2,59,109,8618,8620,1,8631,59,1,10556,121,4,3,101,118,119,8632,8651,8656,113,4,2,112,115,8639,8645,114,101,99,59,1,8926,117,99,99,59,1,8927,101,101,59,1,8910,101,100,103,101,59,1,8911,101,110,5,164,1,59,8670,1,164,101,97,114,114,111,119,4,2,108,114,8684,8690,101,102,116,59,1,8630,105,103,104,116,59,1,8631,101,101,59,1,8910,101,100,59,1,8911,4,2,99,105,8713,8721,111,110,105,110,116,59,1,8754,110,116,59,1,8753,108,99,116,121,59,1,9005,4,19,65,72,97,98,99,100,101,102,104,105,106,108,111,114,115,116,117,119,122,8773,8778,8783,8821,8839,8854,8887,8914,8930,8944,9036,9041,9058,9197,9227,9258,9281,9297,9305,114,114,59,1,8659,97,114,59,1,10597,4,4,103,108,114,115,8793,8799,8805,8809,103,101,114,59,1,8224,101,116,104,59,1,8504,114,59,1,8595,104,4,2,59,118,8816,8818,1,8208,59,1,8867,4,2,107,108,8827,8834,97,114,111,119,59,1,10511,97,99,59,1,733,4,2,97,121,8845,8851,114,111,110,59,1,271,59,1,1076,4,3,59,97,111,8862,8864,8880,1,8518,4,2,103,114,8870,8876,103,101,114,59,1,8225,114,59,1,8650,116,115,101,113,59,1,10871,4,3,103,108,109,8895,8902,8907,5,176,1,59,8900,1,176,116,97,59,1,948,112,116,121,118,59,1,10673,4,2,105,114,8920,8926,115,104,116,59,1,10623,59,3,55349,56609,97,114,4,2,108,114,8938,8941,59,1,8643,59,1,8642,4,5,97,101,103,115,118,8956,8986,8989,8996,9001,109,4,3,59,111,115,8965,8967,8983,1,8900,110,100,4,2,59,115,8975,8977,1,8900,117,105,116,59,1,9830,59,1,9830,59,1,168,97,109,109,97,59,1,989,105,110,59,1,8946,4,3,59,105,111,9009,9011,9031,1,247,100,101,5,247,2,59,111,9020,9022,1,247,110,116,105,109,101,115,59,1,8903,110,120,59,1,8903,99,121,59,1,1106,99,4,2,111,114,9048,9053,114,110,59,1,8990,111,112,59,1,8973,4,5,108,112,116,117,119,9070,9076,9081,9130,9144,108,97,114,59,1,36,102,59,3,55349,56661,4,5,59,101,109,112,115,9093,9095,9109,9116,9122,1,729,113,4,2,59,100,9102,9104,1,8784,111,116,59,1,8785,105,110,117,115,59,1,8760,108,117,115,59,1,8724,113,117,97,114,101,59,1,8865,98,108,101,98,97,114,119,101,100,103,101,59,1,8966,110,4,3,97,100,104,9153,9160,9172,114,114,111,119,59,1,8595,111,119,110,97,114,114,111,119,115,59,1,8650,97,114,112,111,111,110,4,2,108,114,9184,9190,101,102,116,59,1,8643,105,103,104,116,59,1,8642,4,2,98,99,9203,9211,107,97,114,111,119,59,1,10512,4,2,111,114,9217,9222,114,110,59,1,8991,111,112,59,1,8972,4,3,99,111,116,9235,9248,9252,4,2,114,121,9241,9245,59,3,55349,56505,59,1,1109,108,59,1,10742,114,111,107,59,1,273,4,2,100,114,9264,9269,111,116,59,1,8945,105,4,2,59,102,9276,9278,1,9663,59,1,9662,4,2,97,104,9287,9292,114,114,59,1,8693,97,114,59,1,10607,97,110,103,108,101,59,1,10662,4,2,99,105,9311,9315,121,59,1,1119,103,114,97,114,114,59,1,10239,4,18,68,97,99,100,101,102,103,108,109,110,111,112,113,114,115,116,117,120,9361,9376,9398,9439,9444,9447,9462,9495,9531,9585,9598,9614,9659,9755,9771,9792,9808,9826,4,2,68,111,9367,9372,111,116,59,1,10871,116,59,1,8785,4,2,99,115,9382,9392,117,116,101,5,233,1,59,9390,1,233,116,101,114,59,1,10862,4,4,97,105,111,121,9408,9414,9430,9436,114,111,110,59,1,283,114,4,2,59,99,9421,9423,1,8790,5,234,1,59,9428,1,234,108,111,110,59,1,8789,59,1,1101,111,116,59,1,279,59,1,8519,4,2,68,114,9453,9458,111,116,59,1,8786,59,3,55349,56610,4,3,59,114,115,9470,9472,9482,1,10906,97,118,101,5,232,1,59,9480,1,232,4,2,59,100,9488,9490,1,10902,111,116,59,1,10904,4,4,59,105,108,115,9505,9507,9515,9518,1,10905,110,116,101,114,115,59,1,9191,59,1,8467,4,2,59,100,9524,9526,1,10901,111,116,59,1,10903,4,3,97,112,115,9539,9544,9564,99,114,59,1,275,116,121,4,3,59,115,118,9554,9556,9561,1,8709,101,116,59,1,8709,59,1,8709,112,4,2,49,59,9571,9583,4,2,51,52,9577,9580,59,1,8196,59,1,8197,1,8195,4,2,103,115,9591,9594,59,1,331,112,59,1,8194,4,2,103,112,9604,9609,111,110,59,1,281,102,59,3,55349,56662,4,3,97,108,115,9622,9635,9640,114,4,2,59,115,9629,9631,1,8917,108,59,1,10723,117,115,59,1,10865,105,4,3,59,108,118,9649,9651,9656,1,949,111,110,59,1,949,59,1,1013,4,4,99,115,117,118,9669,9686,9716,9747,4,2,105,111,9675,9680,114,99,59,1,8790,108,111,110,59,1,8789,4,2,105,108,9692,9696,109,59,1,8770,97,110,116,4,2,103,108,9705,9710,116,114,59,1,10902,101,115,115,59,1,10901,4,3,97,101,105,9724,9729,9734,108,115,59,1,61,115,116,59,1,8799,118,4,2,59,68,9741,9743,1,8801,68,59,1,10872,112,97,114,115,108,59,1,10725,4,2,68,97,9761,9766,111,116,59,1,8787,114,114,59,1,10609,4,3,99,100,105,9779,9783,9788,114,59,1,8495,111,116,59,1,8784,109,59,1,8770,4,2,97,104,9798,9801,59,1,951,5,240,1,59,9806,1,240,4,2,109,114,9814,9822,108,5,235,1,59,9820,1,235,111,59,1,8364,4,3,99,105,112,9834,9838,9843,108,59,1,33,115,116,59,1,8707,4,2,101,111,9849,9859,99,116,97,116,105,111,110,59,1,8496,110,101,110,116,105,97,108,101,59,1,8519,4,12,97,99,101,102,105,106,108,110,111,112,114,115,9896,9910,9914,9921,9954,9960,9967,9989,9994,10027,10036,10164,108,108,105,110,103,100,111,116,115,101,113,59,1,8786,121,59,1,1092,109,97,108,101,59,1,9792,4,3,105,108,114,9929,9935,9950,108,105,103,59,1,64259,4,2,105,108,9941,9945,103,59,1,64256,105,103,59,1,64260,59,3,55349,56611,108,105,103,59,1,64257,108,105,103,59,3,102,106,4,3,97,108,116,9975,9979,9984,116,59,1,9837,105,103,59,1,64258,110,115,59,1,9649,111,102,59,1,402,4,2,112,114,10000,10005,102,59,3,55349,56663,4,2,97,107,10011,10016,108,108,59,1,8704,4,2,59,118,10022,10024,1,8916,59,1,10969,97,114,116,105,110,116,59,1,10765,4,2,97,111,10042,10159,4,2,99,115,10048,10155,4,6,49,50,51,52,53,55,10062,10102,10114,10135,10139,10151,4,6,50,51,52,53,54,56,10076,10083,10086,10093,10096,10099,5,189,1,59,10081,1,189,59,1,8531,5,188,1,59,10091,1,188,59,1,8533,59,1,8537,59,1,8539,4,2,51,53,10108,10111,59,1,8532,59,1,8534,4,3,52,53,56,10122,10129,10132,5,190,1,59,10127,1,190,59,1,8535,59,1,8540,53,59,1,8536,4,2,54,56,10145,10148,59,1,8538,59,1,8541,56,59,1,8542,108,59,1,8260,119,110,59,1,8994,99,114,59,3,55349,56507,4,17,69,97,98,99,100,101,102,103,105,106,108,110,111,114,115,116,118,10206,10217,10247,10254,10268,10273,10358,10363,10374,10380,10385,10406,10458,10464,10470,10497,10610,4,2,59,108,10212,10214,1,8807,59,1,10892,4,3,99,109,112,10225,10231,10244,117,116,101,59,1,501,109,97,4,2,59,100,10239,10241,1,947,59,1,989,59,1,10886,114,101,118,101,59,1,287,4,2,105,121,10260,10265,114,99,59,1,285,59,1,1075,111,116,59,1,289,4,4,59,108,113,115,10283,10285,10288,10308,1,8805,59,1,8923,4,3,59,113,115,10296,10298,10301,1,8805,59,1,8807,108,97,110,116,59,1,10878,4,4,59,99,100,108,10318,10320,10324,10345,1,10878,99,59,1,10921,111,116,4,2,59,111,10332,10334,1,10880,4,2,59,108,10340,10342,1,10882,59,1,10884,4,2,59,101,10351,10354,3,8923,65024,115,59,1,10900,114,59,3,55349,56612,4,2,59,103,10369,10371,1,8811,59,1,8921,109,101,108,59,1,8503,99,121,59,1,1107,4,4,59,69,97,106,10395,10397,10400,10403,1,8823,59,1,10898,59,1,10917,59,1,10916,4,4,69,97,101,115,10416,10419,10434,10453,59,1,8809,112,4,2,59,112,10426,10428,1,10890,114,111,120,59,1,10890,4,2,59,113,10440,10442,1,10888,4,2,59,113,10448,10450,1,10888,59,1,8809,105,109,59,1,8935,112,102,59,3,55349,56664,97,118,101,59,1,96,4,2,99,105,10476,10480,114,59,1,8458,109,4,3,59,101,108,10489,10491,10494,1,8819,59,1,10894,59,1,10896,5,62,6,59,99,100,108,113,114,10512,10514,10527,10532,10538,10545,1,62,4,2,99,105,10520,10523,59,1,10919,114,59,1,10874,111,116,59,1,8919,80,97,114,59,1,10645,117,101,115,116,59,1,10876,4,5,97,100,101,108,115,10557,10574,10579,10599,10605,4,2,112,114,10563,10570,112,114,111,120,59,1,10886,114,59,1,10616,111,116,59,1,8919,113,4,2,108,113,10586,10592,101,115,115,59,1,8923,108,101,115,115,59,1,10892,101,115,115,59,1,8823,105,109,59,1,8819,4,2,101,110,10616,10626,114,116,110,101,113,113,59,3,8809,65024,69,59,3,8809,65024,4,10,65,97,98,99,101,102,107,111,115,121,10653,10658,10713,10718,10724,10760,10765,10786,10850,10875,114,114,59,1,8660,4,4,105,108,109,114,10668,10674,10678,10684,114,115,112,59,1,8202,102,59,1,189,105,108,116,59,1,8459,4,2,100,114,10690,10695,99,121,59,1,1098,4,3,59,99,119,10703,10705,10710,1,8596,105,114,59,1,10568,59,1,8621,97,114,59,1,8463,105,114,99,59,1,293,4,3,97,108,114,10732,10748,10754,114,116,115,4,2,59,117,10741,10743,1,9829,105,116,59,1,9829,108,105,112,59,1,8230,99,111,110,59,1,8889,114,59,3,55349,56613,115,4,2,101,119,10772,10779,97,114,111,119,59,1,10533,97,114,111,119,59,1,10534,4,5,97,109,111,112,114,10798,10803,10809,10839,10844,114,114,59,1,8703,116,104,116,59,1,8763,107,4,2,108,114,10816,10827,101,102,116,97,114,114,111,119,59,1,8617,105,103,104,116,97,114,114,111,119,59,1,8618,102,59,3,55349,56665,98,97,114,59,1,8213,4,3,99,108,116,10858,10863,10869,114,59,3,55349,56509,97,115,104,59,1,8463,114,111,107,59,1,295,4,2,98,112,10881,10887,117,108,108,59,1,8259,104,101,110,59,1,8208,4,15,97,99,101,102,103,105,106,109,110,111,112,113,115,116,117,10925,10936,10958,10977,10990,11001,11039,11045,11101,11192,11220,11226,11237,11285,11299,99,117,116,101,5,237,1,59,10934,1,237,4,3,59,105,121,10944,10946,10955,1,8291,114,99,5,238,1,59,10953,1,238,59,1,1080,4,2,99,120,10964,10968,121,59,1,1077,99,108,5,161,1,59,10975,1,161,4,2,102,114,10983,10986,59,1,8660,59,3,55349,56614,114,97,118,101,5,236,1,59,10999,1,236,4,4,59,105,110,111,11011,11013,11028,11034,1,8520,4,2,105,110,11019,11024,110,116,59,1,10764,116,59,1,8749,102,105,110,59,1,10716,116,97,59,1,8489,108,105,103,59,1,307,4,3,97,111,112,11053,11092,11096,4,3,99,103,116,11061,11065,11088,114,59,1,299,4,3,101,108,112,11073,11076,11082,59,1,8465,105,110,101,59,1,8464,97,114,116,59,1,8465,104,59,1,305,102,59,1,8887,101,100,59,1,437,4,5,59,99,102,111,116,11113,11115,11121,11136,11142,1,8712,97,114,101,59,1,8453,105,110,4,2,59,116,11129,11131,1,8734,105,101,59,1,10717,100,111,116,59,1,305,4,5,59,99,101,108,112,11154,11156,11161,11179,11186,1,8747,97,108,59,1,8890,4,2,103,114,11167,11173,101,114,115,59,1,8484,99,97,108,59,1,8890,97,114,104,107,59,1,10775,114,111,100,59,1,10812,4,4,99,103,112,116,11202,11206,11211,11216,121,59,1,1105,111,110,59,1,303,102,59,3,55349,56666,97,59,1,953,114,111,100,59,1,10812,117,101,115,116,5,191,1,59,11235,1,191,4,2,99,105,11243,11248,114,59,3,55349,56510,110,4,5,59,69,100,115,118,11261,11263,11266,11271,11282,1,8712,59,1,8953,111,116,59,1,8949,4,2,59,118,11277,11279,1,8948,59,1,8947,59,1,8712,4,2,59,105,11291,11293,1,8290,108,100,101,59,1,297,4,2,107,109,11305,11310,99,121,59,1,1110,108,5,239,1,59,11316,1,239,4,6,99,102,109,111,115,117,11332,11346,11351,11357,11363,11380,4,2,105,121,11338,11343,114,99,59,1,309,59,1,1081,114,59,3,55349,56615,97,116,104,59,1,567,112,102,59,3,55349,56667,4,2,99,101,11369,11374,114,59,3,55349,56511,114,99,121,59,1,1112,107,99,121,59,1,1108,4,8,97,99,102,103,104,106,111,115,11404,11418,11433,11438,11445,11450,11455,11461,112,112,97,4,2,59,118,11413,11415,1,954,59,1,1008,4,2,101,121,11424,11430,100,105,108,59,1,311,59,1,1082,114,59,3,55349,56616,114,101,101,110,59,1,312,99,121,59,1,1093,99,121,59,1,1116,112,102,59,3,55349,56668,99,114,59,3,55349,56512,4,23,65,66,69,72,97,98,99,100,101,102,103,104,106,108,109,110,111,112,114,115,116,117,118,11515,11538,11544,11555,11560,11721,11780,11818,11868,12136,12160,12171,12203,12208,12246,12275,12327,12509,12523,12569,12641,12732,12752,4,3,97,114,116,11523,11528,11532,114,114,59,1,8666,114,59,1,8656,97,105,108,59,1,10523,97,114,114,59,1,10510,4,2,59,103,11550,11552,1,8806,59,1,10891,97,114,59,1,10594,4,9,99,101,103,109,110,112,113,114,116,11580,11586,11594,11600,11606,11624,11627,11636,11694,117,116,101,59,1,314,109,112,116,121,118,59,1,10676,114,97,110,59,1,8466,98,100,97,59,1,955,103,4,3,59,100,108,11615,11617,11620,1,10216,59,1,10641,101,59,1,10216,59,1,10885,117,111,5,171,1,59,11634,1,171,114,4,8,59,98,102,104,108,112,115,116,11655,11657,11669,11673,11677,11681,11685,11690,1,8592,4,2,59,102,11663,11665,1,8676,115,59,1,10527,115,59,1,10525,107,59,1,8617,112,59,1,8619,108,59,1,10553,105,109,59,1,10611,108,59,1,8610,4,3,59,97,101,11702,11704,11709,1,10923,105,108,59,1,10521,4,2,59,115,11715,11717,1,10925,59,3,10925,65024,4,3,97,98,114,11729,11734,11739,114,114,59,1,10508,114,107,59,1,10098,4,2,97,107,11745,11758,99,4,2,101,107,11752,11755,59,1,123,59,1,91,4,2,101,115,11764,11767,59,1,10635,108,4,2,100,117,11774,11777,59,1,10639,59,1,10637,4,4,97,101,117,121,11790,11796,11811,11815,114,111,110,59,1,318,4,2,100,105,11802,11807,105,108,59,1,316,108,59,1,8968,98,59,1,123,59,1,1083,4,4,99,113,114,115,11828,11832,11845,11864,97,59,1,10550,117,111,4,2,59,114,11840,11842,1,8220,59,1,8222,4,2,100,117,11851,11857,104,97,114,59,1,10599,115,104,97,114,59,1,10571,104,59,1,8626,4,5,59,102,103,113,115,11880,11882,12008,12011,12031,1,8804,116,4,5,97,104,108,114,116,11895,11913,11935,11947,11996,114,114,111,119,4,2,59,116,11905,11907,1,8592,97,105,108,59,1,8610,97,114,112,111,111,110,4,2,100,117,11925,11931,111,119,110,59,1,8637,112,59,1,8636,101,102,116,97,114,114,111,119,115,59,1,8647,105,103,104,116,4,3,97,104,115,11959,11974,11984,114,114,111,119,4,2,59,115,11969,11971,1,8596,59,1,8646,97,114,112,111,111,110,115,59,1,8651,113,117,105,103,97,114,114,111,119,59,1,8621,104,114,101,101,116,105,109,101,115,59,1,8907,59,1,8922,4,3,59,113,115,12019,12021,12024,1,8804,59,1,8806,108,97,110,116,59,1,10877,4,5,59,99,100,103,115,12043,12045,12049,12070,12083,1,10877,99,59,1,10920,111,116,4,2,59,111,12057,12059,1,10879,4,2,59,114,12065,12067,1,10881,59,1,10883,4,2,59,101,12076,12079,3,8922,65024,115,59,1,10899,4,5,97,100,101,103,115,12095,12103,12108,12126,12131,112,112,114,111,120,59,1,10885,111,116,59,1,8918,113,4,2,103,113,12115,12120,116,114,59,1,8922,103,116,114,59,1,10891,116,114,59,1,8822,105,109,59,1,8818,4,3,105,108,114,12144,12150,12156,115,104,116,59,1,10620,111,111,114,59,1,8970,59,3,55349,56617,4,2,59,69,12166,12168,1,8822,59,1,10897,4,2,97,98,12177,12198,114,4,2,100,117,12184,12187,59,1,8637,4,2,59,108,12193,12195,1,8636,59,1,10602,108,107,59,1,9604,99,121,59,1,1113,4,5,59,97,99,104,116,12220,12222,12227,12235,12241,1,8810,114,114,59,1,8647,111,114,110,101,114,59,1,8990,97,114,100,59,1,10603,114,105,59,1,9722,4,2,105,111,12252,12258,100,111,116,59,1,320,117,115,116,4,2,59,97,12267,12269,1,9136,99,104,101,59,1,9136,4,4,69,97,101,115,12285,12288,12303,12322,59,1,8808,112,4,2,59,112,12295,12297,1,10889,114,111,120,59,1,10889,4,2,59,113,12309,12311,1,10887,4,2,59,113,12317,12319,1,10887,59,1,8808,105,109,59,1,8934,4,8,97,98,110,111,112,116,119,122,12345,12359,12364,12421,12446,12467,12474,12490,4,2,110,114,12351,12355,103,59,1,10220,114,59,1,8701,114,107,59,1,10214,103,4,3,108,109,114,12373,12401,12409,101,102,116,4,2,97,114,12382,12389,114,114,111,119,59,1,10229,105,103,104,116,97,114,114,111,119,59,1,10231,97,112,115,116,111,59,1,10236,105,103,104,116,97,114,114,111,119,59,1,10230,112,97,114,114,111,119,4,2,108,114,12433,12439,101,102,116,59,1,8619,105,103,104,116,59,1,8620,4,3,97,102,108,12454,12458,12462,114,59,1,10629,59,3,55349,56669,117,115,59,1,10797,105,109,101,115,59,1,10804,4,2,97,98,12480,12485,115,116,59,1,8727,97,114,59,1,95,4,3,59,101,102,12498,12500,12506,1,9674,110,103,101,59,1,9674,59,1,10731,97,114,4,2,59,108,12517,12519,1,40,116,59,1,10643,4,5,97,99,104,109,116,12535,12540,12548,12561,12564,114,114,59,1,8646,111,114,110,101,114,59,1,8991,97,114,4,2,59,100,12556,12558,1,8651,59,1,10605,59,1,8206,114,105,59,1,8895,4,6,97,99,104,105,113,116,12583,12589,12594,12597,12614,12635,113,117,111,59,1,8249,114,59,3,55349,56513,59,1,8624,109,4,3,59,101,103,12606,12608,12611,1,8818,59,1,10893,59,1,10895,4,2,98,117,12620,12623,59,1,91,111,4,2,59,114,12630,12632,1,8216,59,1,8218,114,111,107,59,1,322,5,60,8,59,99,100,104,105,108,113,114,12660,12662,12675,12680,12686,12692,12698,12705,1,60,4,2,99,105,12668,12671,59,1,10918,114,59,1,10873,111,116,59,1,8918,114,101,101,59,1,8907,109,101,115,59,1,8905,97,114,114,59,1,10614,117,101,115,116,59,1,10875,4,2,80,105,12711,12716,97,114,59,1,10646,4,3,59,101,102,12724,12726,12729,1,9667,59,1,8884,59,1,9666,114,4,2,100,117,12739,12746,115,104,97,114,59,1,10570,104,97,114,59,1,10598,4,2,101,110,12758,12768,114,116,110,101,113,113,59,3,8808,65024,69,59,3,8808,65024,4,14,68,97,99,100,101,102,104,105,108,110,111,112,115,117,12803,12809,12893,12908,12914,12928,12933,12937,13011,13025,13032,13049,13052,13069,68,111,116,59,1,8762,4,4,99,108,112,114,12819,12827,12849,12887,114,5,175,1,59,12825,1,175,4,2,101,116,12833,12836,59,1,9794,4,2,59,101,12842,12844,1,10016,115,101,59,1,10016,4,2,59,115,12855,12857,1,8614,116,111,4,4,59,100,108,117,12869,12871,12877,12883,1,8614,111,119,110,59,1,8615,101,102,116,59,1,8612,112,59,1,8613,107,101,114,59,1,9646,4,2,111,121,12899,12905,109,109,97,59,1,10793,59,1,1084,97,115,104,59,1,8212,97,115,117,114,101,100,97,110,103,108,101,59,1,8737,114,59,3,55349,56618,111,59,1,8487,4,3,99,100,110,12945,12954,12985,114,111,5,181,1,59,12952,1,181,4,4,59,97,99,100,12964,12966,12971,12976,1,8739,115,116,59,1,42,105,114,59,1,10992,111,116,5,183,1,59,12983,1,183,117,115,4,3,59,98,100,12995,12997,13000,1,8722,59,1,8863,4,2,59,117,13006,13008,1,8760,59,1,10794,4,2,99,100,13017,13021,112,59,1,10971,114,59,1,8230,112,108,117,115,59,1,8723,4,2,100,112,13038,13044,101,108,115,59,1,8871,102,59,3,55349,56670,59,1,8723,4,2,99,116,13058,13063,114,59,3,55349,56514,112,111,115,59,1,8766,4,3,59,108,109,13077,13079,13087,1,956,116,105,109,97,112,59,1,8888,97,112,59,1,8888,4,24,71,76,82,86,97,98,99,100,101,102,103,104,105,106,108,109,111,112,114,115,116,117,118,119,13142,13165,13217,13229,13247,13330,13359,13414,13420,13508,13513,13579,13602,13626,13631,13762,13767,13855,13936,13995,14214,14285,14312,14432,4,2,103,116,13148,13152,59,3,8921,824,4,2,59,118,13158,13161,3,8811,8402,59,3,8811,824,4,3,101,108,116,13173,13200,13204,102,116,4,2,97,114,13181,13188,114,114,111,119,59,1,8653,105,103,104,116,97,114,114,111,119,59,1,8654,59,3,8920,824,4,2,59,118,13210,13213,3,8810,8402,59,3,8810,824,105,103,104,116,97,114,114,111,119,59,1,8655,4,2,68,100,13235,13241,97,115,104,59,1,8879,97,115,104,59,1,8878,4,5,98,99,110,112,116,13259,13264,13270,13275,13308,108,97,59,1,8711,117,116,101,59,1,324,103,59,3,8736,8402,4,5,59,69,105,111,112,13287,13289,13293,13298,13302,1,8777,59,3,10864,824,100,59,3,8779,824,115,59,1,329,114,111,120,59,1,8777,117,114,4,2,59,97,13316,13318,1,9838,108,4,2,59,115,13325,13327,1,9838,59,1,8469,4,2,115,117,13336,13344,112,5,160,1,59,13342,1,160,109,112,4,2,59,101,13352,13355,3,8782,824,59,3,8783,824,4,5,97,101,111,117,121,13371,13385,13391,13407,13411,4,2,112,114,13377,13380,59,1,10819,111,110,59,1,328,100,105,108,59,1,326,110,103,4,2,59,100,13399,13401,1,8775,111,116,59,3,10861,824,112,59,1,10818,59,1,1085,97,115,104,59,1,8211,4,7,59,65,97,100,113,115,120,13436,13438,13443,13466,13472,13478,13494,1,8800,114,114,59,1,8663,114,4,2,104,114,13450,13454,107,59,1,10532,4,2,59,111,13460,13462,1,8599,119,59,1,8599,111,116,59,3,8784,824,117,105,118,59,1,8802,4,2,101,105,13484,13489,97,114,59,1,10536,109,59,3,8770,824,105,115,116,4,2,59,115,13503,13505,1,8708,59,1,8708,114,59,3,55349,56619,4,4,69,101,115,116,13523,13527,13563,13568,59,3,8807,824,4,3,59,113,115,13535,13537,13559,1,8817,4,3,59,113,115,13545,13547,13551,1,8817,59,3,8807,824,108,97,110,116,59,3,10878,824,59,3,10878,824,105,109,59,1,8821,4,2,59,114,13574,13576,1,8815,59,1,8815,4,3,65,97,112,13587,13592,13597,114,114,59,1,8654,114,114,59,1,8622,97,114,59,1,10994,4,3,59,115,118,13610,13612,13623,1,8715,4,2,59,100,13618,13620,1,8956,59,1,8954,59,1,8715,99,121,59,1,1114,4,7,65,69,97,100,101,115,116,13647,13652,13656,13661,13665,13737,13742,114,114,59,1,8653,59,3,8806,824,114,114,59,1,8602,114,59,1,8229,4,4,59,102,113,115,13675,13677,13703,13725,1,8816,116,4,2,97,114,13684,13691,114,114,111,119,59,1,8602,105,103,104,116,97,114,114,111,119,59,1,8622,4,3,59,113,115,13711,13713,13717,1,8816,59,3,8806,824,108,97,110,116,59,3,10877,824,4,2,59,115,13731,13734,3,10877,824,59,1,8814,105,109,59,1,8820,4,2,59,114,13748,13750,1,8814,105,4,2,59,101,13757,13759,1,8938,59,1,8940,105,100,59,1,8740,4,2,112,116,13773,13778,102,59,3,55349,56671,5,172,3,59,105,110,13787,13789,13829,1,172,110,4,4,59,69,100,118,13800,13802,13806,13812,1,8713,59,3,8953,824,111,116,59,3,8949,824,4,3,97,98,99,13820,13823,13826,59,1,8713,59,1,8951,59,1,8950,105,4,2,59,118,13836,13838,1,8716,4,3,97,98,99,13846,13849,13852,59,1,8716,59,1,8958,59,1,8957,4,3,97,111,114,13863,13892,13899,114,4,4,59,97,115,116,13874,13876,13883,13888,1,8742,108,108,101,108,59,1,8742,108,59,3,11005,8421,59,3,8706,824,108,105,110,116,59,1,10772,4,3,59,99,101,13907,13909,13914,1,8832,117,101,59,1,8928,4,2,59,99,13920,13923,3,10927,824,4,2,59,101,13929,13931,1,8832,113,59,3,10927,824,4,4,65,97,105,116,13946,13951,13971,13982,114,114,59,1,8655,114,114,4,3,59,99,119,13961,13963,13967,1,8603,59,3,10547,824,59,3,8605,824,103,104,116,97,114,114,111,119,59,1,8603,114,105,4,2,59,101,13990,13992,1,8939,59,1,8941,4,7,99,104,105,109,112,113,117,14011,14036,14060,14080,14085,14090,14106,4,4,59,99,101,114,14021,14023,14028,14032,1,8833,117,101,59,1,8929,59,3,10928,824,59,3,55349,56515,111,114,116,4,2,109,112,14045,14050,105,100,59,1,8740,97,114,97,108,108,101,108,59,1,8742,109,4,2,59,101,14067,14069,1,8769,4,2,59,113,14075,14077,1,8772,59,1,8772,105,100,59,1,8740,97,114,59,1,8742,115,117,4,2,98,112,14098,14102,101,59,1,8930,101,59,1,8931,4,3,98,99,112,14114,14157,14171,4,4,59,69,101,115,14124,14126,14130,14133,1,8836,59,3,10949,824,59,1,8840,101,116,4,2,59,101,14141,14144,3,8834,8402,113,4,2,59,113,14151,14153,1,8840,59,3,10949,824,99,4,2,59,101,14164,14166,1,8833,113,59,3,10928,824,4,4,59,69,101,115,14181,14183,14187,14190,1,8837,59,3,10950,824,59,1,8841,101,116,4,2,59,101,14198,14201,3,8835,8402,113,4,2,59,113,14208,14210,1,8841,59,3,10950,824,4,4,103,105,108,114,14224,14228,14238,14242,108,59,1,8825,108,100,101,5,241,1,59,14236,1,241,103,59,1,8824,105,97,110,103,108,101,4,2,108,114,14254,14269,101,102,116,4,2,59,101,14263,14265,1,8938,113,59,1,8940,105,103,104,116,4,2,59,101,14279,14281,1,8939,113,59,1,8941,4,2,59,109,14291,14293,1,957,4,3,59,101,115,14301,14303,14308,1,35,114,111,59,1,8470,112,59,1,8199,4,9,68,72,97,100,103,105,108,114,115,14332,14338,14344,14349,14355,14369,14376,14408,14426,97,115,104,59,1,8877,97,114,114,59,1,10500,112,59,3,8781,8402,97,115,104,59,1,8876,4,2,101,116,14361,14365,59,3,8805,8402,59,3,62,8402,110,102,105,110,59,1,10718,4,3,65,101,116,14384,14389,14393,114,114,59,1,10498,59,3,8804,8402,4,2,59,114,14399,14402,3,60,8402,105,101,59,3,8884,8402,4,2,65,116,14414,14419,114,114,59,1,10499,114,105,101,59,3,8885,8402,105,109,59,3,8764,8402,4,3,65,97,110,14440,14445,14468,114,114,59,1,8662,114,4,2,104,114,14452,14456,107,59,1,10531,4,2,59,111,14462,14464,1,8598,119,59,1,8598,101,97,114,59,1,10535,4,18,83,97,99,100,101,102,103,104,105,108,109,111,112,114,115,116,117,118,14512,14515,14535,14560,14597,14603,14618,14643,14657,14662,14701,14741,14747,14769,14851,14877,14907,14916,59,1,9416,4,2,99,115,14521,14531,117,116,101,5,243,1,59,14529,1,243,116,59,1,8859,4,2,105,121,14541,14557,114,4,2,59,99,14548,14550,1,8858,5,244,1,59,14555,1,244,59,1,1086,4,5,97,98,105,111,115,14572,14577,14583,14587,14591,115,104,59,1,8861,108,97,99,59,1,337,118,59,1,10808,116,59,1,8857,111,108,100,59,1,10684,108,105,103,59,1,339,4,2,99,114,14609,14614,105,114,59,1,10687,59,3,55349,56620,4,3,111,114,116,14626,14630,14640,110,59,1,731,97,118,101,5,242,1,59,14638,1,242,59,1,10689,4,2,98,109,14649,14654,97,114,59,1,10677,59,1,937,110,116,59,1,8750,4,4,97,99,105,116,14672,14677,14693,14698,114,114,59,1,8634,4,2,105,114,14683,14687,114,59,1,10686,111,115,115,59,1,10683,110,101,59,1,8254,59,1,10688,4,3,97,101,105,14709,14714,14719,99,114,59,1,333,103,97,59,1,969,4,3,99,100,110,14727,14733,14736,114,111,110,59,1,959,59,1,10678,117,115,59,1,8854,112,102,59,3,55349,56672,4,3,97,101,108,14755,14759,14764,114,59,1,10679,114,112,59,1,10681,117,115,59,1,8853,4,7,59,97,100,105,111,115,118,14785,14787,14792,14831,14837,14841,14848,1,8744,114,114,59,1,8635,4,4,59,101,102,109,14802,14804,14817,14824,1,10845,114,4,2,59,111,14811,14813,1,8500,102,59,1,8500,5,170,1,59,14822,1,170,5,186,1,59,14829,1,186,103,111,102,59,1,8886,114,59,1,10838,108,111,112,101,59,1,10839,59,1,10843,4,3,99,108,111,14859,14863,14873,114,59,1,8500,97,115,104,5,248,1,59,14871,1,248,108,59,1,8856,105,4,2,108,109,14884,14893,100,101,5,245,1,59,14891,1,245,101,115,4,2,59,97,14901,14903,1,8855,115,59,1,10806,109,108,5,246,1,59,14914,1,246,98,97,114,59,1,9021,4,12,97,99,101,102,104,105,108,109,111,114,115,117,14948,14992,14996,15033,15038,15068,15090,15189,15192,15222,15427,15441,114,4,4,59,97,115,116,14959,14961,14976,14989,1,8741,5,182,2,59,108,14968,14970,1,182,108,101,108,59,1,8741,4,2,105,108,14982,14986,109,59,1,10995,59,1,11005,59,1,8706,121,59,1,1087,114,4,5,99,105,109,112,116,15009,15014,15019,15024,15027,110,116,59,1,37,111,100,59,1,46,105,108,59,1,8240,59,1,8869,101,110,107,59,1,8241,114,59,3,55349,56621,4,3,105,109,111,15046,15057,15063,4,2,59,118,15052,15054,1,966,59,1,981,109,97,116,59,1,8499,110,101,59,1,9742,4,3,59,116,118,15076,15078,15087,1,960,99,104,102,111,114,107,59,1,8916,59,1,982,4,2,97,117,15096,15119,110,4,2,99,107,15103,15115,107,4,2,59,104,15110,15112,1,8463,59,1,8462,118,59,1,8463,115,4,9,59,97,98,99,100,101,109,115,116,15140,15142,15148,15151,15156,15168,15171,15179,15184,1,43,99,105,114,59,1,10787,59,1,8862,105,114,59,1,10786,4,2,111,117,15162,15165,59,1,8724,59,1,10789,59,1,10866,110,5,177,1,59,15177,1,177,105,109,59,1,10790,119,111,59,1,10791,59,1,177,4,3,105,112,117,15200,15208,15213,110,116,105,110,116,59,1,10773,102,59,3,55349,56673,110,100,5,163,1,59,15220,1,163,4,10,59,69,97,99,101,105,110,111,115,117,15244,15246,15249,15253,15258,15334,15347,15367,15416,15421,1,8826,59,1,10931,112,59,1,10935,117,101,59,1,8828,4,2,59,99,15264,15266,1,10927,4,6,59,97,99,101,110,115,15280,15282,15290,15299,15303,15329,1,8826,112,112,114,111,120,59,1,10935,117,114,108,121,101,113,59,1,8828,113,59,1,10927,4,3,97,101,115,15311,15319,15324,112,112,114,111,120,59,1,10937,113,113,59,1,10933,105,109,59,1,8936,105,109,59,1,8830,109,101,4,2,59,115,15342,15344,1,8242,59,1,8473,4,3,69,97,115,15355,15358,15362,59,1,10933,112,59,1,10937,105,109,59,1,8936,4,3,100,102,112,15375,15378,15404,59,1,8719,4,3,97,108,115,15386,15392,15398,108,97,114,59,1,9006,105,110,101,59,1,8978,117,114,102,59,1,8979,4,2,59,116,15410,15412,1,8733,111,59,1,8733,105,109,59,1,8830,114,101,108,59,1,8880,4,2,99,105,15433,15438,114,59,3,55349,56517,59,1,968,110,99,115,112,59,1,8200,4,6,102,105,111,112,115,117,15462,15467,15472,15478,15485,15491,114,59,3,55349,56622,110,116,59,1,10764,112,102,59,3,55349,56674,114,105,109,101,59,1,8279,99,114,59,3,55349,56518,4,3,97,101,111,15499,15520,15534,116,4,2,101,105,15506,15515,114,110,105,111,110,115,59,1,8461,110,116,59,1,10774,115,116,4,2,59,101,15528,15530,1,63,113,59,1,8799,116,5,34,1,59,15540,1,34,4,21,65,66,72,97,98,99,100,101,102,104,105,108,109,110,111,112,114,115,116,117,120,15586,15609,15615,15620,15796,15855,15893,15931,15977,16001,16039,16183,16204,16222,16228,16285,16312,16318,16363,16408,16416,4,3,97,114,116,15594,15599,15603,114,114,59,1,8667,114,59,1,8658,97,105,108,59,1,10524,97,114,114,59,1,10511,97,114,59,1,10596,4,7,99,100,101,110,113,114,116,15636,15651,15656,15664,15687,15696,15770,4,2,101,117,15642,15646,59,3,8765,817,116,101,59,1,341,105,99,59,1,8730,109,112,116,121,118,59,1,10675,103,4,4,59,100,101,108,15675,15677,15680,15683,1,10217,59,1,10642,59,1,10661,101,59,1,10217,117,111,5,187,1,59,15694,1,187,114,4,11,59,97,98,99,102,104,108,112,115,116,119,15721,15723,15727,15739,15742,15746,15750,15754,15758,15763,15767,1,8594,112,59,1,10613,4,2,59,102,15733,15735,1,8677,115,59,1,10528,59,1,10547,115,59,1,10526,107,59,1,8618,112,59,1,8620,108,59,1,10565,105,109,59,1,10612,108,59,1,8611,59,1,8605,4,2,97,105,15776,15781,105,108,59,1,10522,111,4,2,59,110,15788,15790,1,8758,97,108,115,59,1,8474,4,3,97,98,114,15804,15809,15814,114,114,59,1,10509,114,107,59,1,10099,4,2,97,107,15820,15833,99,4,2,101,107,15827,15830,59,1,125,59,1,93,4,2,101,115,15839,15842,59,1,10636,108,4,2,100,117,15849,15852,59,1,10638,59,1,10640,4,4,97,101,117,121,15865,15871,15886,15890,114,111,110,59,1,345,4,2,100,105,15877,15882,105,108,59,1,343,108,59,1,8969,98,59,1,125,59,1,1088,4,4,99,108,113,115,15903,15907,15914,15927,97,59,1,10551,100,104,97,114,59,1,10601,117,111,4,2,59,114,15922,15924,1,8221,59,1,8221,104,59,1,8627,4,3,97,99,103,15939,15966,15970,108,4,4,59,105,112,115,15950,15952,15957,15963,1,8476,110,101,59,1,8475,97,114,116,59,1,8476,59,1,8477,116,59,1,9645,5,174,1,59,15975,1,174,4,3,105,108,114,15985,15991,15997,115,104,116,59,1,10621,111,111,114,59,1,8971,59,3,55349,56623,4,2,97,111,16007,16028,114,4,2,100,117,16014,16017,59,1,8641,4,2,59,108,16023,16025,1,8640,59,1,10604,4,2,59,118,16034,16036,1,961,59,1,1009,4,3,103,110,115,16047,16167,16171,104,116,4,6,97,104,108,114,115,116,16063,16081,16103,16130,16143,16155,114,114,111,119,4,2,59,116,16073,16075,1,8594,97,105,108,59,1,8611,97,114,112,111,111,110,4,2,100,117,16093,16099,111,119,110,59,1,8641,112,59,1,8640,101,102,116,4,2,97,104,16112,16120,114,114,111,119,115,59,1,8644,97,114,112,111,111,110,115,59,1,8652,105,103,104,116,97,114,114,111,119,115,59,1,8649,113,117,105,103,97,114,114,111,119,59,1,8605,104,114,101,101,116,105,109,101,115,59,1,8908,103,59,1,730,105,110,103,100,111,116,115,101,113,59,1,8787,4,3,97,104,109,16191,16196,16201,114,114,59,1,8644,97,114,59,1,8652,59,1,8207,111,117,115,116,4,2,59,97,16214,16216,1,9137,99,104,101,59,1,9137,109,105,100,59,1,10990,4,4,97,98,112,116,16238,16252,16257,16278,4,2,110,114,16244,16248,103,59,1,10221,114,59,1,8702,114,107,59,1,10215,4,3,97,102,108,16265,16269,16273,114,59,1,10630,59,3,55349,56675,117,115,59,1,10798,105,109,101,115,59,1,10805,4,2,97,112,16291,16304,114,4,2,59,103,16298,16300,1,41,116,59,1,10644,111,108,105,110,116,59,1,10770,97,114,114,59,1,8649,4,4,97,99,104,113,16328,16334,16339,16342,113,117,111,59,1,8250,114,59,3,55349,56519,59,1,8625,4,2,98,117,16348,16351,59,1,93,111,4,2,59,114,16358,16360,1,8217,59,1,8217,4,3,104,105,114,16371,16377,16383,114,101,101,59,1,8908,109,101,115,59,1,8906,105,4,4,59,101,102,108,16394,16396,16399,16402,1,9657,59,1,8885,59,1,9656,116,114,105,59,1,10702,108,117,104,97,114,59,1,10600,59,1,8478,4,19,97,98,99,100,101,102,104,105,108,109,111,112,113,114,115,116,117,119,122,16459,16466,16472,16572,16590,16672,16687,16746,16844,16850,16924,16963,16988,17115,17121,17154,17206,17614,17656,99,117,116,101,59,1,347,113,117,111,59,1,8218,4,10,59,69,97,99,101,105,110,112,115,121,16494,16496,16499,16513,16518,16531,16536,16556,16564,16569,1,8827,59,1,10932,4,2,112,114,16505,16508,59,1,10936,111,110,59,1,353,117,101,59,1,8829,4,2,59,100,16524,16526,1,10928,105,108,59,1,351,114,99,59,1,349,4,3,69,97,115,16544,16547,16551,59,1,10934,112,59,1,10938,105,109,59,1,8937,111,108,105,110,116,59,1,10771,105,109,59,1,8831,59,1,1089,111,116,4,3,59,98,101,16582,16584,16587,1,8901,59,1,8865,59,1,10854,4,7,65,97,99,109,115,116,120,16606,16611,16634,16642,16646,16652,16668,114,114,59,1,8664,114,4,2,104,114,16618,16622,107,59,1,10533,4,2,59,111,16628,16630,1,8600,119,59,1,8600,116,5,167,1,59,16640,1,167,105,59,1,59,119,97,114,59,1,10537,109,4,2,105,110,16659,16665,110,117,115,59,1,8726,59,1,8726,116,59,1,10038,114,4,2,59,111,16679,16682,3,55349,56624,119,110,59,1,8994,4,4,97,99,111,121,16697,16702,16716,16739,114,112,59,1,9839,4,2,104,121,16708,16713,99,121,59,1,1097,59,1,1096,114,116,4,2,109,112,16724,16729,105,100,59,1,8739,97,114,97,108,108,101,108,59,1,8741,5,173,1,59,16744,1,173,4,2,103,109,16752,16770,109,97,4,3,59,102,118,16762,16764,16767,1,963,59,1,962,59,1,962,4,8,59,100,101,103,108,110,112,114,16788,16790,16795,16806,16817,16828,16832,16838,1,8764,111,116,59,1,10858,4,2,59,113,16801,16803,1,8771,59,1,8771,4,2,59,69,16812,16814,1,10910,59,1,10912,4,2,59,69,16823,16825,1,10909,59,1,10911,101,59,1,8774,108,117,115,59,1,10788,97,114,114,59,1,10610,97,114,114,59,1,8592,4,4,97,101,105,116,16860,16883,16891,16904,4,2,108,115,16866,16878,108,115,101,116,109,105,110,117,115,59,1,8726,104,112,59,1,10803,112,97,114,115,108,59,1,10724,4,2,100,108,16897,16900,59,1,8739,101,59,1,8995,4,2,59,101,16910,16912,1,10922,4,2,59,115,16918,16920,1,10924,59,3,10924,65024,4,3,102,108,112,16932,16938,16958,116,99,121,59,1,1100,4,2,59,98,16944,16946,1,47,4,2,59,97,16952,16954,1,10692,114,59,1,9023,102,59,3,55349,56676,97,4,2,100,114,16970,16985,101,115,4,2,59,117,16978,16980,1,9824,105,116,59,1,9824,59,1,8741,4,3,99,115,117,16996,17028,17089,4,2,97,117,17002,17015,112,4,2,59,115,17009,17011,1,8851,59,3,8851,65024,112,4,2,59,115,17022,17024,1,8852,59,3,8852,65024,117,4,2,98,112,17035,17062,4,3,59,101,115,17043,17045,17048,1,8847,59,1,8849,101,116,4,2,59,101,17056,17058,1,8847,113,59,1,8849,4,3,59,101,115,17070,17072,17075,1,8848,59,1,8850,101,116,4,2,59,101,17083,17085,1,8848,113,59,1,8850,4,3,59,97,102,17097,17099,17112,1,9633,114,4,2,101,102,17106,17109,59,1,9633,59,1,9642,59,1,9642,97,114,114,59,1,8594,4,4,99,101,109,116,17131,17136,17142,17148,114,59,3,55349,56520,116,109,110,59,1,8726,105,108,101,59,1,8995,97,114,102,59,1,8902,4,2,97,114,17160,17172,114,4,2,59,102,17167,17169,1,9734,59,1,9733,4,2,97,110,17178,17202,105,103,104,116,4,2,101,112,17188,17197,112,115,105,108,111,110,59,1,1013,104,105,59,1,981,115,59,1,175,4,5,98,99,109,110,112,17218,17351,17420,17423,17427,4,9,59,69,100,101,109,110,112,114,115,17238,17240,17243,17248,17261,17267,17279,17285,17291,1,8834,59,1,10949,111,116,59,1,10941,4,2,59,100,17254,17256,1,8838,111,116,59,1,10947,117,108,116,59,1,10945,4,2,69,101,17273,17276,59,1,10955,59,1,8842,108,117,115,59,1,10943,97,114,114,59,1,10617,4,3,101,105,117,17299,17335,17339,116,4,3,59,101,110,17308,17310,17322,1,8834,113,4,2,59,113,17317,17319,1,8838,59,1,10949,101,113,4,2,59,113,17330,17332,1,8842,59,1,10955,109,59,1,10951,4,2,98,112,17345,17348,59,1,10965,59,1,10963,99,4,6,59,97,99,101,110,115,17366,17368,17376,17385,17389,17415,1,8827,112,112,114,111,120,59,1,10936,117,114,108,121,101,113,59,1,8829,113,59,1,10928,4,3,97,101,115,17397,17405,17410,112,112,114,111,120,59,1,10938,113,113,59,1,10934,105,109,59,1,8937,105,109,59,1,8831,59,1,8721,103,59,1,9834,4,13,49,50,51,59,69,100,101,104,108,109,110,112,115,17455,17462,17469,17476,17478,17481,17496,17509,17524,17530,17536,17548,17554,5,185,1,59,17460,1,185,5,178,1,59,17467,1,178,5,179,1,59,17474,1,179,1,8835,59,1,10950,4,2,111,115,17487,17491,116,59,1,10942,117,98,59,1,10968,4,2,59,100,17502,17504,1,8839,111,116,59,1,10948,115,4,2,111,117,17516,17520,108,59,1,10185,98,59,1,10967,97,114,114,59,1,10619,117,108,116,59,1,10946,4,2,69,101,17542,17545,59,1,10956,59,1,8843,108,117,115,59,1,10944,4,3,101,105,117,17562,17598,17602,116,4,3,59,101,110,17571,17573,17585,1,8835,113,4,2,59,113,17580,17582,1,8839,59,1,10950,101,113,4,2,59,113,17593,17595,1,8843,59,1,10956,109,59,1,10952,4,2,98,112,17608,17611,59,1,10964,59,1,10966,4,3,65,97,110,17622,17627,17650,114,114,59,1,8665,114,4,2,104,114,17634,17638,107,59,1,10534,4,2,59,111,17644,17646,1,8601,119,59,1,8601,119,97,114,59,1,10538,108,105,103,5,223,1,59,17664,1,223,4,13,97,98,99,100,101,102,104,105,111,112,114,115,119,17694,17709,17714,17737,17742,17749,17754,17860,17905,17957,17964,18090,18122,4,2,114,117,17700,17706,103,101,116,59,1,8982,59,1,964,114,107,59,1,9140,4,3,97,101,121,17722,17728,17734,114,111,110,59,1,357,100,105,108,59,1,355,59,1,1090,111,116,59,1,8411,108,114,101,99,59,1,8981,114,59,3,55349,56625,4,4,101,105,107,111,17764,17805,17836,17851,4,2,114,116,17770,17786,101,4,2,52,102,17777,17780,59,1,8756,111,114,101,59,1,8756,97,4,3,59,115,118,17795,17797,17802,1,952,121,109,59,1,977,59,1,977,4,2,99,110,17811,17831,107,4,2,97,115,17818,17826,112,112,114,111,120,59,1,8776,105,109,59,1,8764,115,112,59,1,8201,4,2,97,115,17842,17846,112,59,1,8776,105,109,59,1,8764,114,110,5,254,1,59,17858,1,254,4,3,108,109,110,17868,17873,17901,100,101,59,1,732,101,115,5,215,3,59,98,100,17884,17886,17898,1,215,4,2,59,97,17892,17894,1,8864,114,59,1,10801,59,1,10800,116,59,1,8749,4,3,101,112,115,17913,17917,17953,97,59,1,10536,4,4,59,98,99,102,17927,17929,17934,17939,1,8868,111,116,59,1,9014,105,114,59,1,10993,4,2,59,111,17945,17948,3,55349,56677,114,107,59,1,10970,97,59,1,10537,114,105,109,101,59,1,8244,4,3,97,105,112,17972,17977,18082,100,101,59,1,8482,4,7,97,100,101,109,112,115,116,17993,18051,18056,18059,18066,18072,18076,110,103,108,101,4,5,59,100,108,113,114,18009,18011,18017,18032,18035,1,9653,111,119,110,59,1,9663,101,102,116,4,2,59,101,18026,18028,1,9667,113,59,1,8884,59,1,8796,105,103,104,116,4,2,59,101,18045,18047,1,9657,113,59,1,8885,111,116,59,1,9708,59,1,8796,105,110,117,115,59,1,10810,108,117,115,59,1,10809,98,59,1,10701,105,109,101,59,1,10811,101,122,105,117,109,59,1,9186,4,3,99,104,116,18098,18111,18116,4,2,114,121,18104,18108,59,3,55349,56521,59,1,1094,99,121,59,1,1115,114,111,107,59,1,359,4,2,105,111,18128,18133,120,116,59,1,8812,104,101,97,100,4,2,108,114,18143,18154,101,102,116,97,114,114,111,119,59,1,8606,105,103,104,116,97,114,114,111,119,59,1,8608,4,18,65,72,97,98,99,100,102,103,104,108,109,111,112,114,115,116,117,119,18204,18209,18214,18234,18250,18268,18292,18308,18319,18343,18379,18397,18413,18504,18547,18553,18584,18603,114,114,59,1,8657,97,114,59,1,10595,4,2,99,114,18220,18230,117,116,101,5,250,1,59,18228,1,250,114,59,1,8593,114,4,2,99,101,18241,18245,121,59,1,1118,118,101,59,1,365,4,2,105,121,18256,18265,114,99,5,251,1,59,18263,1,251,59,1,1091,4,3,97,98,104,18276,18281,18287,114,114,59,1,8645,108,97,99,59,1,369,97,114,59,1,10606,4,2,105,114,18298,18304,115,104,116,59,1,10622,59,3,55349,56626,114,97,118,101,5,249,1,59,18317,1,249,4,2,97,98,18325,18338,114,4,2,108,114,18332,18335,59,1,8639,59,1,8638,108,107,59,1,9600,4,2,99,116,18349,18374,4,2,111,114,18355,18369,114,110,4,2,59,101,18363,18365,1,8988,114,59,1,8988,111,112,59,1,8975,114,105,59,1,9720,4,2,97,108,18385,18390,99,114,59,1,363,5,168,1,59,18395,1,168,4,2,103,112,18403,18408,111,110,59,1,371,102,59,3,55349,56678,4,6,97,100,104,108,115,117,18427,18434,18445,18470,18475,18494,114,114,111,119,59,1,8593,111,119,110,97,114,114,111,119,59,1,8597,97,114,112,111,111,110,4,2,108,114,18457,18463,101,102,116,59,1,8639,105,103,104,116,59,1,8638,117,115,59,1,8846,105,4,3,59,104,108,18484,18486,18489,1,965,59,1,978,111,110,59,1,965,112,97,114,114,111,119,115,59,1,8648,4,3,99,105,116,18512,18537,18542,4,2,111,114,18518,18532,114,110,4,2,59,101,18526,18528,1,8989,114,59,1,8989,111,112,59,1,8974,110,103,59,1,367,114,105,59,1,9721,99,114,59,3,55349,56522,4,3,100,105,114,18561,18566,18572,111,116,59,1,8944,108,100,101,59,1,361,105,4,2,59,102,18579,18581,1,9653,59,1,9652,4,2,97,109,18590,18595,114,114,59,1,8648,108,5,252,1,59,18601,1,252,97,110,103,108,101,59,1,10663,4,15,65,66,68,97,99,100,101,102,108,110,111,112,114,115,122,18643,18648,18661,18667,18847,18851,18857,18904,18909,18915,18931,18937,18943,18949,18996,114,114,59,1,8661,97,114,4,2,59,118,18656,18658,1,10984,59,1,10985,97,115,104,59,1,8872,4,2,110,114,18673,18679,103,114,116,59,1,10652,4,7,101,107,110,112,114,115,116,18695,18704,18711,18720,18742,18754,18810,112,115,105,108,111,110,59,1,1013,97,112,112,97,59,1,1008,111,116,104,105,110,103,59,1,8709,4,3,104,105,114,18728,18732,18735,105,59,1,981,59,1,982,111,112,116,111,59,1,8733,4,2,59,104,18748,18750,1,8597,111,59,1,1009,4,2,105,117,18760,18766,103,109,97,59,1,962,4,2,98,112,18772,18791,115,101,116,110,101,113,4,2,59,113,18784,18787,3,8842,65024,59,3,10955,65024,115,101,116,110,101,113,4,2,59,113,18803,18806,3,8843,65024,59,3,10956,65024,4,2,104,114,18816,18822,101,116,97,59,1,977,105,97,110,103,108,101,4,2,108,114,18834,18840,101,102,116,59,1,8882,105,103,104,116,59,1,8883,121,59,1,1074,97,115,104,59,1,8866,4,3,101,108,114,18865,18884,18890,4,3,59,98,101,18873,18875,18880,1,8744,97,114,59,1,8891,113,59,1,8794,108,105,112,59,1,8942,4,2,98,116,18896,18901,97,114,59,1,124,59,1,124,114,59,3,55349,56627,116,114,105,59,1,8882,115,117,4,2,98,112,18923,18927,59,3,8834,8402,59,3,8835,8402,112,102,59,3,55349,56679,114,111,112,59,1,8733,116,114,105,59,1,8883,4,2,99,117,18955,18960,114,59,3,55349,56523,4,2,98,112,18966,18981,110,4,2,69,101,18973,18977,59,3,10955,65024,59,3,8842,65024,110,4,2,69,101,18988,18992,59,3,10956,65024,59,3,8843,65024,105,103,122,97,103,59,1,10650,4,7,99,101,102,111,112,114,115,19020,19026,19061,19066,19072,19075,19089,105,114,99,59,1,373,4,2,100,105,19032,19055,4,2,98,103,19038,19043,97,114,59,1,10847,101,4,2,59,113,19050,19052,1,8743,59,1,8793,101,114,112,59,1,8472,114,59,3,55349,56628,112,102,59,3,55349,56680,59,1,8472,4,2,59,101,19081,19083,1,8768,97,116,104,59,1,8768,99,114,59,3,55349,56524,4,14,99,100,102,104,105,108,109,110,111,114,115,117,118,119,19125,19146,19152,19157,19173,19176,19192,19197,19202,19236,19252,19269,19286,19291,4,3,97,105,117,19133,19137,19142,112,59,1,8898,114,99,59,1,9711,112,59,1,8899,116,114,105,59,1,9661,114,59,3,55349,56629,4,2,65,97,19163,19168,114,114,59,1,10234,114,114,59,1,10231,59,1,958,4,2,65,97,19182,19187,114,114,59,1,10232,114,114,59,1,10229,97,112,59,1,10236,105,115,59,1,8955,4,3,100,112,116,19210,19215,19230,111,116,59,1,10752,4,2,102,108,19221,19225,59,3,55349,56681,117,115,59,1,10753,105,109,101,59,1,10754,4,2,65,97,19242,19247,114,114,59,1,10233,114,114,59,1,10230,4,2,99,113,19258,19263,114,59,3,55349,56525,99,117,112,59,1,10758,4,2,112,116,19275,19281,108,117,115,59,1,10756,114,105,59,1,9651,101,101,59,1,8897,101,100,103,101,59,1,8896,4,8,97,99,101,102,105,111,115,117,19316,19335,19349,19357,19362,19367,19373,19379,99,4,2,117,121,19323,19332,116,101,5,253,1,59,19330,1,253,59,1,1103,4,2,105,121,19341,19346,114,99,59,1,375,59,1,1099,110,5,165,1,59,19355,1,165,114,59,3,55349,56630,99,121,59,1,1111,112,102,59,3,55349,56682,99,114,59,3,55349,56526,4,2,99,109,19385,19389,121,59,1,1102,108,5,255,1,59,19395,1,255,4,10,97,99,100,101,102,104,105,111,115,119,19419,19426,19441,19446,19462,19467,19472,19480,19486,19492,99,117,116,101,59,1,378,4,2,97,121,19432,19438,114,111,110,59,1,382,59,1,1079,111,116,59,1,380,4,2,101,116,19452,19458,116,114,102,59,1,8488,97,59,1,950,114,59,3,55349,56631,99,121,59,1,1078,103,114,97,114,114,59,1,8669,112,102,59,3,55349,56683,99,114,59,3,55349,56527,4,2,106,110,19498,19501,59,1,8205,106,59,1,8204]);
},{}],90:[function(require,module,exports){
'use strict';
const unicode = require('../common/unicode');
const ERR = require('../common/error-codes');
const $ = unicode.CODE_POINTS;
const DEFAULT_BUFFER_WATERLINE = 1 << 16;
class Preprocessor {
constructor() {
this.html = null;
this.pos = -1;
this.lastGapPos = -1;
this.lastCharPos = -1;
this.gapStack = [];
this.skipNextNewLine = false;
this.lastChunkWritten = false;
this.endOfChunkHit = false;
this.bufferWaterline = DEFAULT_BUFFER_WATERLINE;
}
_err() {
}
_addGap() {
this.gapStack.push(this.lastGapPos);
this.lastGapPos = this.pos;
}
_processSurrogate(cp) {
if (this.pos !== this.lastCharPos) {
const nextCp = this.html.charCodeAt(this.pos + 1);
if (unicode.isSurrogatePair(nextCp)) {
this.pos++;
this._addGap();
return unicode.getSurrogatePairCodePoint(cp, nextCp);
}
}
else if (!this.lastChunkWritten) {
this.endOfChunkHit = true;
return $.EOF;
}
this._err(ERR.surrogateInInputStream);
return cp;
}
dropParsedChunk() {
if (this.pos > this.bufferWaterline) {
this.lastCharPos -= this.pos;
this.html = this.html.substring(this.pos);
this.pos = 0;
this.lastGapPos = -1;
this.gapStack = [];
}
}
write(chunk, isLastChunk) {
if (this.html) {
this.html += chunk;
} else {
this.html = chunk;
}
this.lastCharPos = this.html.length - 1;
this.endOfChunkHit = false;
this.lastChunkWritten = isLastChunk;
}
insertHtmlAtCurrentPos(chunk) {
this.html = this.html.substring(0, this.pos + 1) + chunk + this.html.substring(this.pos + 1, this.html.length);
this.lastCharPos = this.html.length - 1;
this.endOfChunkHit = false;
}
advance() {
this.pos++;
if (this.pos > this.lastCharPos) {
this.endOfChunkHit = !this.lastChunkWritten;
return $.EOF;
}
let cp = this.html.charCodeAt(this.pos);
if (this.skipNextNewLine && cp === $.LINE_FEED) {
this.skipNextNewLine = false;
this._addGap();
return this.advance();
}
if (cp === $.CARRIAGE_RETURN) {
this.skipNextNewLine = true;
return $.LINE_FEED;
}
this.skipNextNewLine = false;
if (unicode.isSurrogate(cp)) {
cp = this._processSurrogate(cp);
}
const isCommonValidRange =
(cp > 0x1f && cp < 0x7f) || cp === $.LINE_FEED || cp === $.CARRIAGE_RETURN || (cp > 0x9f && cp < 0xfdd0);
if (!isCommonValidRange) {
this._checkForProblematicCharacters(cp);
}
return cp;
}
_checkForProblematicCharacters(cp) {
if (unicode.isControlCodePoint(cp)) {
this._err(ERR.controlCharacterInInputStream);
} else if (unicode.isUndefinedCodePoint(cp)) {
this._err(ERR.noncharacterInInputStream);
}
}
retreat() {
if (this.pos === this.lastGapPos) {
this.lastGapPos = this.gapStack.pop();
this.pos--;
}
this.pos--;
}
}
module.exports = Preprocessor;
},{"../common/error-codes":71,"../common/unicode":74}],91:[function(require,module,exports){
'use strict';
const { DOCUMENT_MODE } = require('../common/html');
exports.createDocument = function() {
return {
nodeName: '#document',
mode: DOCUMENT_MODE.NO_QUIRKS,
childNodes: []
};
};
exports.createDocumentFragment = function() {
return {
nodeName: '#document-fragment',
childNodes: []
};
};
exports.createElement = function(tagName, namespaceURI, attrs) {
return {
nodeName: tagName,
tagName: tagName,
attrs: attrs,
namespaceURI: namespaceURI,
childNodes: [],
parentNode: null
};
};
exports.createCommentNode = function(data) {
return {
nodeName: '#comment',
data: data,
parentNode: null
};
};
const createTextNode = function(value) {
return {
nodeName: '#text',
value: value,
parentNode: null
};
};
const appendChild = (exports.appendChild = function(parentNode, newNode) {
parentNode.childNodes.push(newNode);
newNode.parentNode = parentNode;
});
const insertBefore = (exports.insertBefore = function(parentNode, newNode, referenceNode) {
const insertionIdx = parentNode.childNodes.indexOf(referenceNode);
parentNode.childNodes.splice(insertionIdx, 0, newNode);
newNode.parentNode = parentNode;
});
exports.setTemplateContent = function(templateElement, contentElement) {
templateElement.content = contentElement;
};
exports.getTemplateContent = function(templateElement) {
return templateElement.content;
};
exports.setDocumentType = function(document, name, publicId, systemId) {
let doctypeNode = null;
for (let i = 0; i < document.childNodes.length; i++) {
if (document.childNodes[i].nodeName === '#documentType') {
doctypeNode = document.childNodes[i];
break;
}
}
if (doctypeNode) {
doctypeNode.name = name;
doctypeNode.publicId = publicId;
doctypeNode.systemId = systemId;
} else {
appendChild(document, {
nodeName: '#documentType',
name: name,
publicId: publicId,
systemId: systemId
});
}
};
exports.setDocumentMode = function(document, mode) {
document.mode = mode;
};
exports.getDocumentMode = function(document) {
return document.mode;
};
exports.detachNode = function(node) {
if (node.parentNode) {
const idx = node.parentNode.childNodes.indexOf(node);
node.parentNode.childNodes.splice(idx, 1);
node.parentNode = null;
}
};
exports.insertText = function(parentNode, text) {
if (parentNode.childNodes.length) {
const prevNode = parentNode.childNodes[parentNode.childNodes.length - 1];
if (prevNode.nodeName === '#text') {
prevNode.value += text;
return;
}
}
appendChild(parentNode, createTextNode(text));
};
exports.insertTextBefore = function(parentNode, text, referenceNode) {
const prevNode = parentNode.childNodes[parentNode.childNodes.indexOf(referenceNode) - 1];
if (prevNode && prevNode.nodeName === '#text') {
prevNode.value += text;
} else {
insertBefore(parentNode, createTextNode(text), referenceNode);
}
};
exports.adoptAttributes = function(recipient, attrs) {
const recipientAttrsMap = [];
for (let i = 0; i < recipient.attrs.length; i++) {
recipientAttrsMap.push(recipient.attrs[i].name);
}
for (let j = 0; j < attrs.length; j++) {
if (recipientAttrsMap.indexOf(attrs[j].name) === -1) {
recipient.attrs.push(attrs[j]);
}
}
};
exports.getFirstChild = function(node) {
return node.childNodes[0];
};
exports.getChildNodes = function(node) {
return node.childNodes;
};
exports.getParentNode = function(node) {
return node.parentNode;
};
exports.getAttrList = function(element) {
return element.attrs;
};
exports.getTagName = function(element) {
return element.tagName;
};
exports.getNamespaceURI = function(element) {
return element.namespaceURI;
};
exports.getTextNodeContent = function(textNode) {
return textNode.value;
};
exports.getCommentNodeContent = function(commentNode) {
return commentNode.data;
};
exports.getDocumentTypeNodeName = function(doctypeNode) {
return doctypeNode.name;
};
exports.getDocumentTypeNodePublicId = function(doctypeNode) {
return doctypeNode.publicId;
};
exports.getDocumentTypeNodeSystemId = function(doctypeNode) {
return doctypeNode.systemId;
};
exports.isTextNode = function(node) {
return node.nodeName === '#text';
};
exports.isCommentNode = function(node) {
return node.nodeName === '#comment';
};
exports.isDocumentTypeNode = function(node) {
return node.nodeName === '#documentType';
};
exports.isElementNode = function(node) {
return !!node.tagName;
};
exports.setNodeSourceCodeLocation = function(node, location) {
node.sourceCodeLocation = location;
};
exports.getNodeSourceCodeLocation = function(node) {
return node.sourceCodeLocation;
};
},{"../common/html":73}],92:[function(require,module,exports){
'use strict';
module.exports = function mergeOptions(defaults, options) {
options = options || Object.create(null);
return [defaults, options].reduce((merged, optObj) => {
Object.keys(optObj).forEach(key => {
merged[key] = optObj[key];
});
return merged;
}, Object.create(null));
};
},{}],93:[function(require,module,exports){
'use strict';
class Mixin {
constructor(host) {
const originalMethods = {};
const overriddenMethods = this._getOverriddenMethods(this, originalMethods);
for (const key of Object.keys(overriddenMethods)) {
if (typeof overriddenMethods[key] === 'function') {
originalMethods[key] = host[key];
host[key] = overriddenMethods[key];
}
}
}
_getOverriddenMethods() {
throw new Error('Not implemented');
}
}
Mixin.install = function(host, Ctor, opts) {
if (!host.__mixins) {
host.__mixins = [];
}
for (let i = 0; i < host.__mixins.length; i++) {
if (host.__mixins[i].constructor === Ctor) {
return host.__mixins[i];
}
}
const mixin = new Ctor(host, opts);
host.__mixins.push(mixin);
return mixin;
};
module.exports = Mixin;
},{}],94:[function(require,module,exports){
var process = module.exports = {};
var cachedSetTimeout;
var cachedClearTimeout;
function defaultSetTimout() {
throw new Error('setTimeout has not been defined');
}
function defaultClearTimeout () {
throw new Error('clearTimeout has not been defined');
}
(function () {
try {
if (typeof setTimeout === 'function') {
cachedSetTimeout = setTimeout;
} else {
cachedSetTimeout = defaultSetTimout;
}
} catch (e) {
cachedSetTimeout = defaultSetTimout;
}
try {
if (typeof clearTimeout === 'function') {
cachedClearTimeout = clearTimeout;
} else {
cachedClearTimeout = defaultClearTimeout;
}
} catch (e) {
cachedClearTimeout = defaultClearTimeout;
}
} ())
function runTimeout(fun) {
if (cachedSetTimeout === setTimeout) {
return setTimeout(fun, 0);
}
if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
cachedSetTimeout = setTimeout;
return setTimeout(fun, 0);
}
try {
return cachedSetTimeout(fun, 0);
} catch(e){
try {
return cachedSetTimeout.call(null, fun, 0);
} catch(e){
return cachedSetTimeout.call(this, fun, 0);
}
}
}
function runClearTimeout(marker) {
if (cachedClearTimeout === clearTimeout) {
return clearTimeout(marker);
}
if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
cachedClearTimeout = clearTimeout;
return clearTimeout(marker);
}
try {
return cachedClearTimeout(marker);
} catch (e){
try {
return cachedClearTimeout.call(null, marker);
} catch (e){
return cachedClearTimeout.call(this, marker);
}
}
}
var queue = [];
var draining = false;
var currentQueue;
var queueIndex = -1;
function cleanUpNextTick() {
if (!draining || !currentQueue) {
return;
}
draining = false;
if (currentQueue.length) {
queue = currentQueue.concat(queue);
} else {
queueIndex = -1;
}
if (queue.length) {
drainQueue();
}
}
function drainQueue() {
if (draining) {
return;
}
var timeout = runTimeout(cleanUpNextTick);
draining = true;
var len = queue.length;
while(len) {
currentQueue = queue;
queue = [];
while (++queueIndex < len) {
if (currentQueue) {
currentQueue[queueIndex].run();
}
}
queueIndex = -1;
len = queue.length;
}
currentQueue = null;
draining = false;
runClearTimeout(timeout);
}
process.nextTick = function (fun) {
var args = new Array(arguments.length - 1);
if (arguments.length > 1) {
for (var i = 1; i < arguments.length; i++) {
args[i - 1] = arguments[i];
}
}
queue.push(new Item(fun, args));
if (queue.length === 1 && !draining) {
runTimeout(drainQueue);
}
};
function Item(fun, array) {
this.fun = fun;
this.array = array;
}
Item.prototype.run = function () {
this.fun.apply(null, this.array);
};
process.title = 'browser';
process.browser = true;
process.env = {};
process.argv = [];
process.version = ''; // empty string to avoid regexp issues
process.versions = {};
function noop() {}
process.on = noop;
process.addListener = noop;
process.once = noop;
process.off = noop;
process.removeListener = noop;
process.removeAllListeners = noop;
process.emit = noop;
process.prependListener = noop;
process.prependOnceListener = noop;
process.listeners = function (name) { return [] }
process.binding = function (name) {
throw new Error('process.binding is not supported');
};
process.cwd = function () { return '/' };
process.chdir = function (dir) {
throw new Error('process.chdir is not supported');
};
process.umask = function() { return 0; };
},{}],95:[function(require,module,exports){
module.exports = require("./lib/_stream_duplex.js")
},{"./lib/_stream_duplex.js":96}],96:[function(require,module,exports){
(function (process){
//
//
//
module.exports = Duplex;
var objectKeys = Object.keys || function (obj) {
var keys = [];
for (var key in obj) keys.push(key);
return keys;
}
var util = require('core-util-is');
util.inherits = require('inherits');
var Readable = require('./_stream_readable');
var Writable = require('./_stream_writable');
util.inherits(Duplex, Readable);
forEach(objectKeys(Writable.prototype), function(method) {
if (!Duplex.prototype[method])
Duplex.prototype[method] = Writable.prototype[method];
});
function Duplex(options) {
if (!(this instanceof Duplex))
return new Duplex(options);
Readable.call(this, options);
Writable.call(this, options);
if (options && options.readable === false)
this.readable = false;
if (options && options.writable === false)
this.writable = false;
this.allowHalfOpen = true;
if (options && options.allowHalfOpen === false)
this.allowHalfOpen = false;
this.once('end', onend);
}
function onend() {
if (this.allowHalfOpen || this._writableState.ended)
return;
process.nextTick(this.end.bind(this));
}
function forEach (xs, f) {
for (var i = 0, l = xs.length; i < l; i++) {
f(xs[i], i);
}
}
}).call(this,require('_process'))
},{"./_stream_readable":98,"./_stream_writable":100,"_process":94,"core-util-is":58,"inherits":61}],97:[function(require,module,exports){
//
//
//
module.exports = PassThrough;
var Transform = require('./_stream_transform');
var util = require('core-util-is');
util.inherits = require('inherits');
util.inherits(PassThrough, Transform);
function PassThrough(options) {
if (!(this instanceof PassThrough))
return new PassThrough(options);
Transform.call(this, options);
}
PassThrough.prototype._transform = function(chunk, encoding, cb) {
cb(null, chunk);
};
},{"./_stream_transform":99,"core-util-is":58,"inherits":61}],98:[function(require,module,exports){
(function (process){
//
//
//
module.exports = Readable;
var isArray = require('isarray');
var Buffer = require('buffer').Buffer;
Readable.ReadableState = ReadableState;
var EE = require('events').EventEmitter;
if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
return emitter.listeners(type).length;
};
var Stream = require('stream');
var util = require('core-util-is');
util.inherits = require('inherits');
var StringDecoder;
var debug = require('util');
if (debug && debug.debuglog) {
debug = debug.debuglog('stream');
} else {
debug = function () {};
}
util.inherits(Readable, Stream);
function ReadableState(options, stream) {
var Duplex = require('./_stream_duplex');
options = options || {};
var hwm = options.highWaterMark;
var defaultHwm = options.objectMode ? 16 : 16 * 1024;
this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
this.highWaterMark = ~~this.highWaterMark;
this.buffer = [];
this.length = 0;
this.pipes = null;
this.pipesCount = 0;
this.flowing = null;
this.ended = false;
this.endEmitted = false;
this.reading = false;
this.sync = true;
this.needReadable = false;
this.emittedReadable = false;
this.readableListening = false;
this.objectMode = !!options.objectMode;
if (stream instanceof Duplex)
this.objectMode = this.objectMode || !!options.readableObjectMode;
this.defaultEncoding = options.defaultEncoding || 'utf8';
this.ranOut = false;
this.awaitDrain = 0;
this.readingMore = false;
this.decoder = null;
this.encoding = null;
if (options.encoding) {
if (!StringDecoder)
StringDecoder = require('string_decoder/').StringDecoder;
this.decoder = new StringDecoder(options.encoding);
this.encoding = options.encoding;
}
}
function Readable(options) {
var Duplex = require('./_stream_duplex');
if (!(this instanceof Readable))
return new Readable(options);
this._readableState = new ReadableState(options, this);
this.readable = true;
Stream.call(this);
}
Readable.prototype.push = function(chunk, encoding) {
var state = this._readableState;
if (util.isString(chunk) && !state.objectMode) {
encoding = encoding || state.defaultEncoding;
if (encoding !== state.encoding) {
chunk = new Buffer(chunk, encoding);
encoding = '';
}
}
return readableAddChunk(this, state, chunk, encoding, false);
};
Readable.prototype.unshift = function(chunk) {
var state = this._readableState;
return readableAddChunk(this, state, chunk, '', true);
};
function readableAddChunk(stream, state, chunk, encoding, addToFront) {
var er = chunkInvalid(state, chunk);
if (er) {
stream.emit('error', er);
} else if (util.isNullOrUndefined(chunk)) {
state.reading = false;
if (!state.ended)
onEofChunk(stream, state);
} else if (state.objectMode || chunk && chunk.length > 0) {
if (state.ended && !addToFront) {
var e = new Error('stream.push() after EOF');
stream.emit('error', e);
} else if (state.endEmitted && addToFront) {
var e = new Error('stream.unshift() after end event');
stream.emit('error', e);
} else {
if (state.decoder && !addToFront && !encoding)
chunk = state.decoder.write(chunk);
if (!addToFront)
state.reading = false;
if (state.flowing && state.length === 0 && !state.sync) {
stream.emit('data', chunk);
stream.read(0);
} else {
state.length += state.objectMode ? 1 : chunk.length;
if (addToFront)
state.buffer.unshift(chunk);
else
state.buffer.push(chunk);
if (state.needReadable)
emitReadable(stream);
}
maybeReadMore(stream, state);
}
} else if (!addToFront) {
state.reading = false;
}
return needMoreData(state);
}
function needMoreData(state) {
return !state.ended &&
(state.needReadable ||
state.length < state.highWaterMark ||
state.length === 0);
}
Readable.prototype.setEncoding = function(enc) {
if (!StringDecoder)
StringDecoder = require('string_decoder/').StringDecoder;
this._readableState.decoder = new StringDecoder(enc);
this._readableState.encoding = enc;
return this;
};
var MAX_HWM = 0x800000;
function roundUpToNextPowerOf2(n) {
if (n >= MAX_HWM) {
n = MAX_HWM;
} else {
n--;
for (var p = 1; p < 32; p <<= 1) n |= n >> p;
n++;
}
return n;
}
function howMuchToRead(n, state) {
if (state.length === 0 && state.ended)
return 0;
if (state.objectMode)
return n === 0 ? 0 : 1;
if (isNaN(n) || util.isNull(n)) {
if (state.flowing && state.buffer.length)
return state.buffer[0].length;
else
return state.length;
}
if (n <= 0)
return 0;
if (n > state.highWaterMark)
state.highWaterMark = roundUpToNextPowerOf2(n);
if (n > state.length) {
if (!state.ended) {
state.needReadable = true;
return 0;
} else
return state.length;
}
return n;
}
Readable.prototype.read = function(n) {
debug('read', n);
var state = this._readableState;
var nOrig = n;
if (!util.isNumber(n) || n > 0)
state.emittedReadable = false;
if (n === 0 &&
state.needReadable &&
(state.length >= state.highWaterMark || state.ended)) {
debug('read: emitReadable', state.length, state.ended);
if (state.length === 0 && state.ended)
endReadable(this);
else
emitReadable(this);
return null;
}
n = howMuchToRead(n, state);
if (n === 0 && state.ended) {
if (state.length === 0)
endReadable(this);
return null;
}
//
//
//
var doRead = state.needReadable;
debug('need readable', doRead);
if (state.length === 0 || state.length - n < state.highWaterMark) {
doRead = true;
debug('length less than watermark', doRead);
}
if (state.ended || state.reading) {
doRead = false;
debug('reading or ended', doRead);
}
if (doRead) {
debug('do read');
state.reading = true;
state.sync = true;
if (state.length === 0)
state.needReadable = true;
this._read(state.highWaterMark);
state.sync = false;
}
if (doRead && !state.reading)
n = howMuchToRead(nOrig, state);
var ret;
if (n > 0)
ret = fromList(n, state);
else
ret = null;
if (util.isNull(ret)) {
state.needReadable = true;
n = 0;
}
state.length -= n;
if (state.length === 0 && !state.ended)
state.needReadable = true;
if (nOrig !== n && state.ended && state.length === 0)
endReadable(this);
if (!util.isNull(ret))
this.emit('data', ret);
return ret;
};
function chunkInvalid(state, chunk) {
var er = null;
if (!util.isBuffer(chunk) &&
!util.isString(chunk) &&
!util.isNullOrUndefined(chunk) &&
!state.objectMode) {
er = new TypeError('Invalid non-string/buffer chunk');
}
return er;
}
function onEofChunk(stream, state) {
if (state.decoder && !state.ended) {
var chunk = state.decoder.end();
if (chunk && chunk.length) {
state.buffer.push(chunk);
state.length += state.objectMode ? 1 : chunk.length;
}
}
state.ended = true;
emitReadable(stream);
}
function emitReadable(stream) {
var state = stream._readableState;
state.needReadable = false;
if (!state.emittedReadable) {
debug('emitReadable', state.flowing);
state.emittedReadable = true;
if (state.sync)
process.nextTick(function() {
emitReadable_(stream);
});
else
emitReadable_(stream);
}
}
function emitReadable_(stream) {
debug('emit readable');
stream.emit('readable');
flow(stream);
}
function maybeReadMore(stream, state) {
if (!state.readingMore) {
state.readingMore = true;
process.nextTick(function() {
maybeReadMore_(stream, state);
});
}
}
function maybeReadMore_(stream, state) {
var len = state.length;
while (!state.reading && !state.flowing && !state.ended &&
state.length < state.highWaterMark) {
debug('maybeReadMore read 0');
stream.read(0);
if (len === state.length)
break;
else
len = state.length;
}
state.readingMore = false;
}
Readable.prototype._read = function(n) {
this.emit('error', new Error('not implemented'));
};
Readable.prototype.pipe = function(dest, pipeOpts) {
var src = this;
var state = this._readableState;
switch (state.pipesCount) {
case 0:
state.pipes = dest;
break;
case 1:
state.pipes = [state.pipes, dest];
break;
default:
state.pipes.push(dest);
break;
}
state.pipesCount += 1;
debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
dest !== process.stdout &&
dest !== process.stderr;
var endFn = doEnd ? onend : cleanup;
if (state.endEmitted)
process.nextTick(endFn);
else
src.once('end', endFn);
dest.on('unpipe', onunpipe);
function onunpipe(readable) {
debug('onunpipe');
if (readable === src) {
cleanup();
}
}
function onend() {
debug('onend');
dest.end();
}
var ondrain = pipeOnDrain(src);
dest.on('drain', ondrain);
function cleanup() {
debug('cleanup');
dest.removeListener('close', onclose);
dest.removeListener('finish', onfinish);
dest.removeListener('drain', ondrain);
dest.removeListener('error', onerror);
dest.removeListener('unpipe', onunpipe);
src.removeListener('end', onend);
src.removeListener('end', cleanup);
src.removeListener('data', ondata);
if (state.awaitDrain &&
(!dest._writableState || dest._writableState.needDrain))
ondrain();
}
src.on('data', ondata);
function ondata(chunk) {
debug('ondata');
var ret = dest.write(chunk);
if (false === ret) {
debug('false write response, pause',
src._readableState.awaitDrain);
src._readableState.awaitDrain++;
src.pause();
}
}
function onerror(er) {
debug('onerror', er);
unpipe();
dest.removeListener('error', onerror);
if (EE.listenerCount(dest, 'error') === 0)
dest.emit('error', er);
}
if (!dest._events || !dest._events.error)
dest.on('error', onerror);
else if (isArray(dest._events.error))
dest._events.error.unshift(onerror);
else
dest._events.error = [onerror, dest._events.error];
function onclose() {
dest.removeListener('finish', onfinish);
unpipe();
}
dest.once('close', onclose);
function onfinish() {
debug('onfinish');
dest.removeListener('close', onclose);
unpipe();
}
dest.once('finish', onfinish);
function unpipe() {
debug('unpipe');
src.unpipe(dest);
}
dest.emit('pipe', src);
if (!state.flowing) {
debug('pipe resume');
src.resume();
}
return dest;
};
function pipeOnDrain(src) {
return function() {
var state = src._readableState;
debug('pipeOnDrain', state.awaitDrain);
if (state.awaitDrain)
state.awaitDrain--;
if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
state.flowing = true;
flow(src);
}
};
}
Readable.prototype.unpipe = function(dest) {
var state = this._readableState;
if (state.pipesCount === 0)
return this;
if (state.pipesCount === 1) {
if (dest && dest !== state.pipes)
return this;
if (!dest)
dest = state.pipes;
state.pipes = null;
state.pipesCount = 0;
state.flowing = false;
if (dest)
dest.emit('unpipe', this);
return this;
}
if (!dest) {
var dests = state.pipes;
var len = state.pipesCount;
state.pipes = null;
state.pipesCount = 0;
state.flowing = false;
for (var i = 0; i < len; i++)
dests[i].emit('unpipe', this);
return this;
}
var i = indexOf(state.pipes, dest);
if (i === -1)
return this;
state.pipes.splice(i, 1);
state.pipesCount -= 1;
if (state.pipesCount === 1)
state.pipes = state.pipes[0];
dest.emit('unpipe', this);
return this;
};
Readable.prototype.on = function(ev, fn) {
var res = Stream.prototype.on.call(this, ev, fn);
if (ev === 'data' && false !== this._readableState.flowing) {
this.resume();
}
if (ev === 'readable' && this.readable) {
var state = this._readableState;
if (!state.readableListening) {
state.readableListening = true;
state.emittedReadable = false;
state.needReadable = true;
if (!state.reading) {
var self = this;
process.nextTick(function() {
debug('readable nexttick read 0');
self.read(0);
});
} else if (state.length) {
emitReadable(this, state);
}
}
}
return res;
};
Readable.prototype.addListener = Readable.prototype.on;
Readable.prototype.resume = function() {
var state = this._readableState;
if (!state.flowing) {
debug('resume');
state.flowing = true;
if (!state.reading) {
debug('resume read 0');
this.read(0);
}
resume(this, state);
}
return this;
};
function resume(stream, state) {
if (!state.resumeScheduled) {
state.resumeScheduled = true;
process.nextTick(function() {
resume_(stream, state);
});
}
}
function resume_(stream, state) {
state.resumeScheduled = false;
stream.emit('resume');
flow(stream);
if (state.flowing && !state.reading)
stream.read(0);
}
Readable.prototype.pause = function() {
debug('call pause flowing=%j', this._readableState.flowing);
if (false !== this._readableState.flowing) {
debug('pause');
this._readableState.flowing = false;
this.emit('pause');
}
return this;
};
function flow(stream) {
var state = stream._readableState;
debug('flow', state.flowing);
if (state.flowing) {
do {
var chunk = stream.read();
} while (null !== chunk && state.flowing);
}
}
Readable.prototype.wrap = function(stream) {
var state = this._readableState;
var paused = false;
var self = this;
stream.on('end', function() {
debug('wrapped end');
if (state.decoder && !state.ended) {
var chunk = state.decoder.end();
if (chunk && chunk.length)
self.push(chunk);
}
self.push(null);
});
stream.on('data', function(chunk) {
debug('wrapped data');
if (state.decoder)
chunk = state.decoder.write(chunk);
if (!chunk || !state.objectMode && !chunk.length)
return;
var ret = self.push(chunk);
if (!ret) {
paused = true;
stream.pause();
}
});
for (var i in stream) {
if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
this[i] = function(method) { return function() {
return stream[method].apply(stream, arguments);
}}(i);
}
}
var events = ['error', 'close', 'destroy', 'pause', 'resume'];
forEach(events, function(ev) {
stream.on(ev, self.emit.bind(self, ev));
});
self._read = function(n) {
debug('wrapped _read', n);
if (paused) {
paused = false;
stream.resume();
}
};
return self;
};
Readable._fromList = fromList;
function fromList(n, state) {
var list = state.buffer;
var length = state.length;
var stringMode = !!state.decoder;
var objectMode = !!state.objectMode;
var ret;
if (list.length === 0)
return null;
if (length === 0)
ret = null;
else if (objectMode)
ret = list.shift();
else if (!n || n >= length) {
if (stringMode)
ret = list.join('');
else
ret = Buffer.concat(list, length);
list.length = 0;
} else {
if (n < list[0].length) {
var buf = list[0];
ret = buf.slice(0, n);
list[0] = buf.slice(n);
} else if (n === list[0].length) {
ret = list.shift();
} else {
if (stringMode)
ret = '';
else
ret = new Buffer(n);
var c = 0;
for (var i = 0, l = list.length; i < l && c < n; i++) {
var buf = list[0];
var cpy = Math.min(n - c, buf.length);
if (stringMode)
ret += buf.slice(0, cpy);
else
buf.copy(ret, c, 0, cpy);
if (cpy < buf.length)
list[0] = buf.slice(cpy);
else
list.shift();
c += cpy;
}
}
}
return ret;
}
function endReadable(stream) {
var state = stream._readableState;
if (state.length > 0)
throw new Error('endReadable called on non-empty stream');
if (!state.endEmitted) {
state.ended = true;
process.nextTick(function() {
if (!state.endEmitted && state.length === 0) {
state.endEmitted = true;
stream.readable = false;
stream.emit('end');
}
});
}
}
function forEach (xs, f) {
for (var i = 0, l = xs.length; i < l; i++) {
f(xs[i], i);
}
}
function indexOf (xs, x) {
for (var i = 0, l = xs.length; i < l; i++) {
if (xs[i] === x) return i;
}
return -1;
}
}).call(this,require('_process'))
},{"./_stream_duplex":96,"_process":94,"buffer":56,"core-util-is":58,"events":59,"inherits":61,"isarray":63,"stream":106,"string_decoder/":107,"util":54}],99:[function(require,module,exports){
//
//
//
//
//
//
//
//
//
module.exports = Transform;
var Duplex = require('./_stream_duplex');
var util = require('core-util-is');
util.inherits = require('inherits');
util.inherits(Transform, Duplex);
function TransformState(options, stream) {
this.afterTransform = function(er, data) {
return afterTransform(stream, er, data);
};
this.needTransform = false;
this.transforming = false;
this.writecb = null;
this.writechunk = null;
}
function afterTransform(stream, er, data) {
var ts = stream._transformState;
ts.transforming = false;
var cb = ts.writecb;
if (!cb)
return stream.emit('error', new Error('no writecb in Transform class'));
ts.writechunk = null;
ts.writecb = null;
if (!util.isNullOrUndefined(data))
stream.push(data);
if (cb)
cb(er);
var rs = stream._readableState;
rs.reading = false;
if (rs.needReadable || rs.length < rs.highWaterMark) {
stream._read(rs.highWaterMark);
}
}
function Transform(options) {
if (!(this instanceof Transform))
return new Transform(options);
Duplex.call(this, options);
this._transformState = new TransformState(options, this);
var stream = this;
this._readableState.needReadable = true;
this._readableState.sync = false;
this.once('prefinish', function() {
if (util.isFunction(this._flush))
this._flush(function(er) {
done(stream, er);
});
else
done(stream);
});
}
Transform.prototype.push = function(chunk, encoding) {
this._transformState.needTransform = false;
return Duplex.prototype.push.call(this, chunk, encoding);
};
//
//
Transform.prototype._transform = function(chunk, encoding, cb) {
throw new Error('not implemented');
};
Transform.prototype._write = function(chunk, encoding, cb) {
var ts = this._transformState;
ts.writecb = cb;
ts.writechunk = chunk;
ts.writeencoding = encoding;
if (!ts.transforming) {
var rs = this._readableState;
if (ts.needTransform ||
rs.needReadable ||
rs.length < rs.highWaterMark)
this._read(rs.highWaterMark);
}
};
Transform.prototype._read = function(n) {
var ts = this._transformState;
if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
ts.transforming = true;
this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
} else {
ts.needTransform = true;
}
};
function done(stream, er) {
if (er)
return stream.emit('error', er);
var ws = stream._writableState;
var ts = stream._transformState;
if (ws.length)
throw new Error('calling transform done when ws.length != 0');
if (ts.transforming)
throw new Error('calling transform done when still transforming');
return stream.push(null);
}
},{"./_stream_duplex":96,"core-util-is":58,"inherits":61}],100:[function(require,module,exports){
(function (process){
//
//
//
module.exports = Writable;
var Buffer = require('buffer').Buffer;
Writable.WritableState = WritableState;
var util = require('core-util-is');
util.inherits = require('inherits');
var Stream = require('stream');
util.inherits(Writable, Stream);
function WriteReq(chunk, encoding, cb) {
this.chunk = chunk;
this.encoding = encoding;
this.callback = cb;
}
function WritableState(options, stream) {
var Duplex = require('./_stream_duplex');
options = options || {};
var hwm = options.highWaterMark;
var defaultHwm = options.objectMode ? 16 : 16 * 1024;
this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
this.objectMode = !!options.objectMode;
if (stream instanceof Duplex)
this.objectMode = this.objectMode || !!options.writableObjectMode;
this.highWaterMark = ~~this.highWaterMark;
this.needDrain = false;
this.ending = false;
this.ended = false;
this.finished = false;
var noDecode = options.decodeStrings === false;
this.decodeStrings = !noDecode;
this.defaultEncoding = options.defaultEncoding || 'utf8';
this.length = 0;
this.writing = false;
this.corked = 0;
this.sync = true;
this.bufferProcessing = false;
this.onwrite = function(er) {
onwrite(stream, er);
};
this.writecb = null;
this.writelen = 0;
this.buffer = [];
this.pendingcb = 0;
this.prefinished = false;
this.errorEmitted = false;
}
function Writable(options) {
var Duplex = require('./_stream_duplex');
if (!(this instanceof Writable) && !(this instanceof Duplex))
return new Writable(options);
this._writableState = new WritableState(options, this);
this.writable = true;
Stream.call(this);
}
Writable.prototype.pipe = function() {
this.emit('error', new Error('Cannot pipe. Not readable.'));
};
function writeAfterEnd(stream, state, cb) {
var er = new Error('write after end');
stream.emit('error', er);
process.nextTick(function() {
cb(er);
});
}
function validChunk(stream, state, chunk, cb) {
var valid = true;
if (!util.isBuffer(chunk) &&
!util.isString(chunk) &&
!util.isNullOrUndefined(chunk) &&
!state.objectMode) {
var er = new TypeError('Invalid non-string/buffer chunk');
stream.emit('error', er);
process.nextTick(function() {
cb(er);
});
valid = false;
}
return valid;
}
Writable.prototype.write = function(chunk, encoding, cb) {
var state = this._writableState;
var ret = false;
if (util.isFunction(encoding)) {
cb = encoding;
encoding = null;
}
if (util.isBuffer(chunk))
encoding = 'buffer';
else if (!encoding)
encoding = state.defaultEncoding;
if (!util.isFunction(cb))
cb = function() {};
if (state.ended)
writeAfterEnd(this, state, cb);
else if (validChunk(this, state, chunk, cb)) {
state.pendingcb++;
ret = writeOrBuffer(this, state, chunk, encoding, cb);
}
return ret;
};
Writable.prototype.cork = function() {
var state = this._writableState;
state.corked++;
};
Writable.prototype.uncork = function() {
var state = this._writableState;
if (state.corked) {
state.corked--;
if (!state.writing &&
!state.corked &&
!state.finished &&
!state.bufferProcessing &&
state.buffer.length)
clearBuffer(this, state);
}
};
function decodeChunk(state, chunk, encoding) {
if (!state.objectMode &&
state.decodeStrings !== false &&
util.isString(chunk)) {
chunk = new Buffer(chunk, encoding);
}
return chunk;
}
function writeOrBuffer(stream, state, chunk, encoding, cb) {
chunk = decodeChunk(state, chunk, encoding);
if (util.isBuffer(chunk))
encoding = 'buffer';
var len = state.objectMode ? 1 : chunk.length;
state.length += len;
var ret = state.length < state.highWaterMark;
if (!ret)
state.needDrain = true;
if (state.writing || state.corked)
state.buffer.push(new WriteReq(chunk, encoding, cb));
else
doWrite(stream, state, false, len, chunk, encoding, cb);
return ret;
}
function doWrite(stream, state, writev, len, chunk, encoding, cb) {
state.writelen = len;
state.writecb = cb;
state.writing = true;
state.sync = true;
if (writev)
stream._writev(chunk, state.onwrite);
else
stream._write(chunk, encoding, state.onwrite);
state.sync = false;
}
function onwriteError(stream, state, sync, er, cb) {
if (sync)
process.nextTick(function() {
state.pendingcb--;
cb(er);
});
else {
state.pendingcb--;
cb(er);
}
stream._writableState.errorEmitted = true;
stream.emit('error', er);
}
function onwriteStateUpdate(state) {
state.writing = false;
state.writecb = null;
state.length -= state.writelen;
state.writelen = 0;
}
function onwrite(stream, er) {
var state = stream._writableState;
var sync = state.sync;
var cb = state.writecb;
onwriteStateUpdate(state);
if (er)
onwriteError(stream, state, sync, er, cb);
else {
var finished = needFinish(stream, state);
if (!finished &&
!state.corked &&
!state.bufferProcessing &&
state.buffer.length) {
clearBuffer(stream, state);
}
if (sync) {
process.nextTick(function() {
afterWrite(stream, state, finished, cb);
});
} else {
afterWrite(stream, state, finished, cb);
}
}
}
function afterWrite(stream, state, finished, cb) {
if (!finished)
onwriteDrain(stream, state);
state.pendingcb--;
cb();
finishMaybe(stream, state);
}
function onwriteDrain(stream, state) {
if (state.length === 0 && state.needDrain) {
state.needDrain = false;
stream.emit('drain');
}
}
function clearBuffer(stream, state) {
state.bufferProcessing = true;
if (stream._writev && state.buffer.length > 1) {
var cbs = [];
for (var c = 0; c < state.buffer.length; c++)
cbs.push(state.buffer[c].callback);
state.pendingcb++;
doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
for (var i = 0; i < cbs.length; i++) {
state.pendingcb--;
cbs[i](err);
}
});
state.buffer = [];
} else {
for (var c = 0; c < state.buffer.length; c++) {
var entry = state.buffer[c];
var chunk = entry.chunk;
var encoding = entry.encoding;
var cb = entry.callback;
var len = state.objectMode ? 1 : chunk.length;
doWrite(stream, state, false, len, chunk, encoding, cb);
if (state.writing) {
c++;
break;
}
}
if (c < state.buffer.length)
state.buffer = state.buffer.slice(c);
else
state.buffer.length = 0;
}
state.bufferProcessing = false;
}
Writable.prototype._write = function(chunk, encoding, cb) {
cb(new Error('not implemented'));
};
Writable.prototype._writev = null;
Writable.prototype.end = function(chunk, encoding, cb) {
var state = this._writableState;
if (util.isFunction(chunk)) {
cb = chunk;
chunk = null;
encoding = null;
} else if (util.isFunction(encoding)) {
cb = encoding;
encoding = null;
}
if (!util.isNullOrUndefined(chunk))
this.write(chunk, encoding);
if (state.corked) {
state.corked = 1;
this.uncork();
}
if (!state.ending && !state.finished)
endWritable(this, state, cb);
};
function needFinish(stream, state) {
return (state.ending &&
state.length === 0 &&
!state.finished &&
!state.writing);
}
function prefinish(stream, state) {
if (!state.prefinished) {
state.prefinished = true;
stream.emit('prefinish');
}
}
function finishMaybe(stream, state) {
var need = needFinish(stream, state);
if (need) {
if (state.pendingcb === 0) {
prefinish(stream, state);
state.finished = true;
stream.emit('finish');
} else
prefinish(stream, state);
}
return need;
}
function endWritable(stream, state, cb) {
state.ending = true;
finishMaybe(stream, state);
if (cb) {
if (state.finished)
process.nextTick(cb);
else
stream.once('finish', cb);
}
state.ended = true;
}
}).call(this,require('_process'))
},{"./_stream_duplex":96,"_process":94,"buffer":56,"core-util-is":58,"inherits":61,"stream":106}],101:[function(require,module,exports){
module.exports = require("./lib/_stream_passthrough.js")
},{"./lib/_stream_passthrough.js":97}],102:[function(require,module,exports){
(function (process){
exports = module.exports = require('./lib/_stream_readable.js');
exports.Stream = require('stream');
exports.Readable = exports;
exports.Writable = require('./lib/_stream_writable.js');
exports.Duplex = require('./lib/_stream_duplex.js');
exports.Transform = require('./lib/_stream_transform.js');
exports.PassThrough = require('./lib/_stream_passthrough.js');
if (!process.browser && process.env.READABLE_STREAM === 'disable') {
module.exports = require('stream');
}
}).call(this,require('_process'))
},{"./lib/_stream_duplex.js":96,"./lib/_stream_passthrough.js":97,"./lib/_stream_readable.js":98,"./lib/_stream_transform.js":99,"./lib/_stream_writable.js":100,"_process":94,"stream":106}],103:[function(require,module,exports){
module.exports = require("./lib/_stream_transform.js")
},{"./lib/_stream_transform.js":99}],104:[function(require,module,exports){
module.exports = require("./lib/_stream_writable.js")
},{"./lib/_stream_writable.js":100}],105:[function(require,module,exports){
(function (Buffer){
;(function (sax) { // wrapper for non-node envs
sax.parser = function (strict, opt) { return new SAXParser(strict, opt) }
sax.SAXParser = SAXParser
sax.SAXStream = SAXStream
sax.createStream = createStream
sax.MAX_BUFFER_LENGTH = 64 * 1024
var buffers = [
'comment', 'sgmlDecl', 'textNode', 'tagName', 'doctype',
'procInstName', 'procInstBody', 'entity', 'attribName',
'attribValue', 'cdata', 'script'
]
sax.EVENTS = [
'text',
'processinginstruction',
'sgmldeclaration',
'doctype',
'comment',
'opentagstart',
'attribute',
'opentag',
'closetag',
'opencdata',
'cdata',
'closecdata',
'error',
'end',
'ready',
'script',
'opennamespace',
'closenamespace'
]
function SAXParser (strict, opt) {
if (!(this instanceof SAXParser)) {
return new SAXParser(strict, opt)
}
var parser = this
clearBuffers(parser)
parser.q = parser.c = ''
parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH
parser.opt = opt || {}
parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags
parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase'
parser.tags = []
parser.closed = parser.closedRoot = parser.sawRoot = false
parser.tag = parser.error = null
parser.strict = !!strict
parser.noscript = !!(strict || parser.opt.noscript)
parser.state = S.BEGIN
parser.strictEntities = parser.opt.strictEntities
parser.ENTITIES = parser.strictEntities ? Object.create(sax.XML_ENTITIES) : Object.create(sax.ENTITIES)
parser.attribList = []
if (parser.opt.xmlns) {
parser.ns = Object.create(rootNS)
}
parser.trackPosition = parser.opt.position !== false
if (parser.trackPosition) {
parser.position = parser.line = parser.column = 0
}
emit(parser, 'onready')
}
if (!Object.create) {
Object.create = function (o) {
function F () {}
F.prototype = o
var newf = new F()
return newf
}
}
if (!Object.keys) {
Object.keys = function (o) {
var a = []
for (var i in o) if (o.hasOwnProperty(i)) a.push(i)
return a
}
}
function checkBufferLength (parser) {
var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10)
var maxActual = 0
for (var i = 0, l = buffers.length; i < l; i++) {
var len = parser[buffers[i]].length
if (len > maxAllowed) {
switch (buffers[i]) {
case 'textNode':
closeText(parser)
break
case 'cdata':
emitNode(parser, 'oncdata', parser.cdata)
parser.cdata = ''
break
case 'script':
emitNode(parser, 'onscript', parser.script)
parser.script = ''
break
default:
error(parser, 'Max buffer length exceeded: ' + buffers[i])
}
}
maxActual = Math.max(maxActual, len)
}
var m = sax.MAX_BUFFER_LENGTH - maxActual
parser.bufferCheckPosition = m + parser.position
}
function clearBuffers (parser) {
for (var i = 0, l = buffers.length; i < l; i++) {
parser[buffers[i]] = ''
}
}
function flushBuffers (parser) {
closeText(parser)
if (parser.cdata !== '') {
emitNode(parser, 'oncdata', parser.cdata)
parser.cdata = ''
}
if (parser.script !== '') {
emitNode(parser, 'onscript', parser.script)
parser.script = ''
}
}
SAXParser.prototype = {
end: function () { end(this) },
write: write,
resume: function () { this.error = null; return this },
close: function () { return this.write(null) },
flush: function () { flushBuffers(this) }
}
var Stream
try {
Stream = require('stream').Stream
} catch (ex) {
Stream = function () {}
}
var streamWraps = sax.EVENTS.filter(function (ev) {
return ev !== 'error' && ev !== 'end'
})
function createStream (strict, opt) {
return new SAXStream(strict, opt)
}
function SAXStream (strict, opt) {
if (!(this instanceof SAXStream)) {
return new SAXStream(strict, opt)
}
Stream.apply(this)
this._parser = new SAXParser(strict, opt)
this.writable = true
this.readable = true
var me = this
this._parser.onend = function () {
me.emit('end')
}
this._parser.onerror = function (er) {
me.emit('error', er)
me._parser.error = null
}
this._decoder = null
streamWraps.forEach(function (ev) {
Object.defineProperty(me, 'on' + ev, {
get: function () {
return me._parser['on' + ev]
},
set: function (h) {
if (!h) {
me.removeAllListeners(ev)
me._parser['on' + ev] = h
return h
}
me.on(ev, h)
},
enumerable: true,
configurable: false
})
})
}
SAXStream.prototype = Object.create(Stream.prototype, {
constructor: {
value: SAXStream
}
})
SAXStream.prototype.write = function (data) {
if (typeof Buffer === 'function' &&
typeof Buffer.isBuffer === 'function' &&
Buffer.isBuffer(data)) {
if (!this._decoder) {
var SD = require('string_decoder').StringDecoder
this._decoder = new SD('utf8')
}
data = this._decoder.write(data)
}
this._parser.write(data.toString())
this.emit('data', data)
return true
}
SAXStream.prototype.end = function (chunk) {
if (chunk && chunk.length) {
this.write(chunk)
}
this._parser.end()
return true
}
SAXStream.prototype.on = function (ev, handler) {
var me = this
if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) {
me._parser['on' + ev] = function () {
var args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments)
args.splice(0, 0, ev)
me.emit.apply(me, args)
}
}
return Stream.prototype.on.call(me, ev, handler)
}
var CDATA = '[CDATA['
var DOCTYPE = 'DOCTYPE'
var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace'
var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/'
var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE }
var nameStart = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/
var nameBody = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/
var entityStart = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/
var entityBody = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/
function isWhitespace (c) {
return c === ' ' || c === '\n' || c === '\r' || c === '\t'
}
function isQuote (c) {
return c === '"' || c === '\''
}
function isAttribEnd (c) {
return c === '>' || isWhitespace(c)
}
function isMatch (regex, c) {
return regex.test(c)
}
function notMatch (regex, c) {
return !isMatch(regex, c)
}
var S = 0
sax.STATE = {
BEGIN: S++, // leading byte order mark or whitespace
BEGIN_WHITESPACE: S++, // leading whitespace
TEXT: S++, // general stuff
TEXT_ENTITY: S++, // & and such.
OPEN_WAKA: S++, // <
SGML_DECL: S++, //
SCRIPT: S++, //