From d7aa6a3e604e35ea91bf237ead2dd6fb9da8646a Mon Sep 17 00:00:00 2001 From: HSunboy Date: Thu, 16 Aug 2018 18:02:51 +0800 Subject: [PATCH] add hive --- core/index.html | 9 + core/sqlSyntaxParser.js | 9191 +++++++++++++++++++++++++++++++ jison/autocomplete_footer.jison | 19 + jison/autocomplete_header.jison | 29 + jison/globalSearchParser.jison | 179 + jison/hue-sql-syntax.sh | 37 + jison/license.txt | 15 + jison/solrFormulaParser.jison | 265 + jison/solrQueryParser.jison | 292 + jison/sql.jisonlex | 550 ++ jison/sqlParseSupport.js | 2278 ++++++++ jison/sqlStatementsParser.jison | 172 + jison/sql_alter.jison | 1100 ++++ jison/sql_analyze.jison | 274 + jison/sql_create.jison | 1933 +++++++ jison/sql_drop.jison | 504 ++ jison/sql_error.jison | 190 + jison/sql_grant.jison | 516 ++ jison/sql_insert.jison | 762 +++ jison/sql_load.jison | 291 + jison/sql_main.jison | 4024 ++++++++++++++ jison/sql_set.jison | 67 + jison/sql_show.jison | 706 +++ jison/sql_update.jison | 138 + jison/sql_use.jison | 47 + jison/sql_valueExpression.jison | 867 +++ jison/syntax_footer.jison | 18 + jison/syntax_header.jison | 28 + lib/.DS_Store | Bin 0 -> 6148 bytes 29 files changed, 24501 insertions(+) create mode 100644 core/index.html create mode 100644 core/sqlSyntaxParser.js create mode 100755 jison/autocomplete_footer.jison create mode 100755 jison/autocomplete_header.jison create mode 100755 jison/globalSearchParser.jison create mode 100755 jison/hue-sql-syntax.sh create mode 100755 jison/license.txt create mode 100755 jison/solrFormulaParser.jison create mode 100755 jison/solrQueryParser.jison create mode 100755 jison/sql.jisonlex create mode 100755 jison/sqlParseSupport.js create mode 100755 jison/sqlStatementsParser.jison create mode 100755 jison/sql_alter.jison create mode 100755 jison/sql_analyze.jison create mode 100755 jison/sql_create.jison create mode 100755 jison/sql_drop.jison create mode 100755 jison/sql_error.jison create mode 100755 jison/sql_grant.jison create mode 100755 jison/sql_insert.jison create mode 100755 jison/sql_load.jison create mode 100755 jison/sql_main.jison create mode 100755 jison/sql_set.jison create mode 100755 jison/sql_show.jison create mode 100755 jison/sql_update.jison create mode 100755 jison/sql_use.jison create mode 100755 jison/sql_valueExpression.jison create mode 100755 jison/syntax_footer.jison create mode 100755 jison/syntax_header.jison create mode 100644 lib/.DS_Store diff --git a/core/index.html b/core/index.html new file mode 100644 index 0000000..244d42f --- /dev/null +++ b/core/index.html @@ -0,0 +1,9 @@ + + + + + + 1 + + + \ No newline at end of file diff --git a/core/sqlSyntaxParser.js b/core/sqlSyntaxParser.js new file mode 100644 index 0000000..c3581a6 --- /dev/null +++ b/core/sqlSyntaxParser.js @@ -0,0 +1,9191 @@ +// Licensed to Cloudera, Inc. under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. Cloudera, Inc. licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +var SqlParseSupport = (function () { + + // endsWith polyfill from hue_utils.js, needed as workers live in their own js environment + if (!String.prototype.endsWith) { + String.prototype.endsWith = function (searchString, position) { + var subjectString = this.toString(); + if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) { + position = subjectString.length; + } + position -= searchString.length; + var lastIndex = subjectString.lastIndexOf(searchString, position); + return lastIndex !== -1 && lastIndex === position; + }; + } + + /** + * Calculates the Optimal String Alignment distance between two strings. Returns 0 when the strings are equal and the + * distance when not, distances is less than or equal to the length of the longest string. + * + * @param strA + * @param strB + * @param [ignoreCase] + * @returns {number} The similarity + */ + var stringDistance = function (strA, strB, ignoreCase) { + if (ignoreCase) { + strA = strA.toLowerCase(); + strB = strB.toLowerCase(); + } + + // TODO: Consider other algorithms for performance + var strALength = strA.length; + var strBLength = strB.length; + if (strALength === 0) { + return strBLength; + } + if (strBLength === 0) { + return strALength; + } + + var distances = new Array(strALength); + + var cost, deletion, insertion, substitution, transposition; + for (var i = 0; i <= strALength; i++) { + distances[i] = new Array(strBLength); + distances[i][0] = i; + for (var j = 1; j <= strBLength; j++) { + if (!i){ + distances[0][j] = j; + } else { + cost = strA[i-1] === strB[j-1] ? 0 : 1; + deletion = distances[i - 1][j] + 1; + insertion = distances[i][j - 1] + 1; + substitution = distances[i - 1][j - 1] + cost; + if (deletion <= insertion && deletion <= substitution) { + distances[i][j] = deletion; + } else if (insertion <= deletion && insertion <= substitution) { + distances[i][j] = insertion; + } else { + distances[i][j] = substitution; + } + + if (i > 1 && j > 1 && strA[i] === strB[j - 1] && strA[i - 1] === strB[j]) { + transposition = distances[i - 2][j - 2] + cost; + if (transposition < distances[i][j]) { + distances[i][j] = transposition; + } + } + } + } + } + + return distances[strALength][strBLength]; + }; + + var equalIgnoreCase = function (a, b) { + return a && b && a.toLowerCase() === b.toLowerCase(); + }; + + var initSqlParser = function (parser) { + + var SIMPLE_TABLE_REF_SUGGESTIONS = ['suggestJoinConditions', 'suggestAggregateFunctions', 'suggestFilters', 'suggestGroupBys', 'suggestOrderBys']; + + parser.prepareNewStatement = function () { + linkTablePrimaries(); + parser.commitLocations(); + + delete parser.yy.lateralViews; + delete parser.yy.latestCommonTableExpressions; + delete parser.yy.correlatedSubQuery; + parser.yy.subQueries = []; + parser.yy.selectListAliases = []; + parser.yy.latestTablePrimaries = []; + + prioritizeSuggestions(); + }; + + parser.yy.parseError = function (message, error) { + parser.yy.errors.push(error); + return message; + }; + + parser.addCommonTableExpressions = function (identifiers) { + parser.yy.result.commonTableExpressions = identifiers; + parser.yy.latestCommonTableExpressions = identifiers; + }; + + parser.isInSubquery = function () { + return !!parser.yy.primariesStack.length + }; + + parser.pushQueryState = function () { + parser.yy.resultStack.push(parser.yy.result); + parser.yy.locationsStack.push(parser.yy.locations); + parser.yy.lateralViewsStack.push(parser.yy.lateralViews); + parser.yy.selectListAliasesStack.push(parser.yy.selectListAliases); + parser.yy.primariesStack.push(parser.yy.latestTablePrimaries); + parser.yy.subQueriesStack.push(parser.yy.subQueries); + + parser.yy.result = {}; + parser.yy.locations = []; + parser.yy.selectListAliases = []; // Not allowed in correlated sub-queries + parser.yy.lateralViews = []; // Not allowed in correlated sub-queries + + if (parser.yy.correlatedSubQuery) { + parser.yy.latestTablePrimaries = parser.yy.latestTablePrimaries.concat(); + parser.yy.subQueries = parser.yy.subQueries.concat(); + } else { + parser.yy.latestTablePrimaries = []; + parser.yy.subQueries = []; + } + }; + + parser.popQueryState = function (subQuery) { + linkTablePrimaries(); + parser.commitLocations(); + + if (Object.keys(parser.yy.result).length === 0) { + parser.yy.result = parser.yy.resultStack.pop(); + } else { + parser.yy.resultStack.pop(); + } + var oldSubQueries = parser.yy.subQueries; + parser.yy.subQueries = parser.yy.subQueriesStack.pop(); + if (subQuery) { + if (oldSubQueries.length > 0) { + subQuery.subQueries = oldSubQueries; + } + parser.yy.subQueries.push(subQuery); + } + + parser.yy.lateralViews = parser.yy.lateralViewsStack.pop(); + parser.yy.latestTablePrimaries = parser.yy.primariesStack.pop(); + parser.yy.locations = parser.yy.locationsStack.pop(); + parser.yy.selectListAliases = parser.yy.selectListAliasesStack.pop(); + }; + + parser.suggestSelectListAliases = function () { + if (parser.yy.selectListAliases && parser.yy.selectListAliases.length > 0 && parser.yy.result.suggestColumns + && (typeof parser.yy.result.suggestColumns.identifierChain === 'undefined' || parser.yy.result.suggestColumns.identifierChain.length === 0)) { + parser.yy.result.suggestColumnAliases = parser.yy.selectListAliases; + } + }; + + parser.isHive = function () { + return parser.yy.activeDialect === 'hive'; + }; + + parser.isImpala = function () { + return parser.yy.activeDialect === 'impala'; + }; + + parser.mergeSuggestKeywords = function () { + var result = []; + Array.prototype.slice.call(arguments).forEach(function (suggestion) { + if (typeof suggestion !== 'undefined' && typeof suggestion.suggestKeywords !== 'undefined') { + result = result.concat(suggestion.suggestKeywords); + } + }); + if (result.length > 0) { + return {suggestKeywords: result}; + } + return {}; + }; + + parser.suggestValueExpressionKeywords = function (valueExpression, extras) { + var expressionKeywords = parser.getValueExpressionKeywords(valueExpression, extras); + parser.suggestKeywords(expressionKeywords.suggestKeywords); + if (expressionKeywords.suggestColRefKeywords) { + parser.suggestColRefKeywords(expressionKeywords.suggestColRefKeywords); + } + if (valueExpression.lastType) { + parser.addColRefIfExists(valueExpression.lastType); + } else { + parser.addColRefIfExists(valueExpression); + } + }; + + parser.getSelectListKeywords = function (excludeAsterisk) { + var keywords = [{ value: 'CASE', weight: 450 }, 'FALSE', 'TRUE', 'NULL']; + if (!excludeAsterisk) { + keywords.push({ value: '*', weight: 10000 }); + } + if (parser.isHive()) { + keywords = keywords.concat(['EXISTS', 'NOT']); + } + return keywords; + }; + + parser.getValueExpressionKeywords = function (valueExpression, extras) { + var types = valueExpression.lastType ? valueExpression.lastType.types : valueExpression.types; + // We could have valueExpression.columnReference to suggest based on column type + var keywords = ['<', '<=', '<=>', '<>', '=', '>', '>=', 'BETWEEN', 'IN', 'IS NOT NULL', 'IS NULL', 'IS NOT TRUE', 'IS TRUE', 'IS NOT FALSE', 'IS FALSE', 'NOT BETWEEN', 'NOT IN']; + if (parser.isImpala()) { + keywords = keywords.concat(['IS DISTINCT FROM', 'IS NOT DISTINCT FROM', 'IS NOT UNKNOWN', 'IS UNKNOWN']); + } + if (extras) { + keywords = keywords.concat(extras); + } + if (valueExpression.suggestKeywords) { + keywords = keywords.concat(valueExpression.suggestKeywords); + } + if (types.length === 1 && types[0] === 'COLREF') { + return { + suggestKeywords: keywords, + suggestColRefKeywords: { + BOOLEAN: ['AND', 'OR'], + NUMBER: ['+', '-', '*', '/', '%', 'DIV'], + STRING: parser.isImpala() ? ['ILIKE', 'IREGEXP', 'LIKE', 'NOT LIKE', 'REGEXP', 'RLIKE'] : ['LIKE', 'NOT LIKE', 'REGEXP', 'RLIKE'] + } + } + } + if (typeof SqlFunctions === 'undefined' || SqlFunctions.matchesType(parser.yy.activeDialect, ['BOOLEAN'], types)) { + keywords = keywords.concat(['AND', 'OR']); + } + if (typeof SqlFunctions === 'undefined' || SqlFunctions.matchesType(parser.yy.activeDialect, ['NUMBER'], types)) { + keywords = keywords.concat(['+', '-', '*', '/', '%', 'DIV']); + } + if (typeof SqlFunctions === 'undefined' || SqlFunctions.matchesType(parser.yy.activeDialect, ['STRING'], types)) { + keywords = keywords.concat(parser.isImpala() ? ['ILIKE', 'IREGEXP', 'LIKE', 'NOT LIKE', 'REGEXP', 'RLIKE'] : ['LIKE', 'NOT LIKE', 'REGEXP', 'RLIKE']); + } + return { suggestKeywords: keywords }; + }; + + parser.getTypeKeywords = function () { + if (parser.isHive()) { + return ['BIGINT', 'BINARY', 'BOOLEAN', 'CHAR', 'DATE', 'DECIMAL', 'DOUBLE', 'DOUBLE PRECISION', 'FLOAT', 'INT', 'SMALLINT', 'TIMESTAMP', 'STRING', 'TINYINT', 'VARCHAR']; + } + if (parser.isImpala()) { + return ['BIGINT', 'BOOLEAN', 'CHAR', 'DECIMAL', 'DOUBLE', 'FLOAT', 'INT', 'REAL', 'SMALLINT', 'TIMESTAMP', 'STRING', 'TINYINT', 'VARCHAR']; + } + return ['BIGINT', 'BOOLEAN', 'CHAR', 'DECIMAL', 'DOUBLE', 'FLOAT', 'INT', 'SMALLINT', 'TIMESTAMP', 'STRING', 'TINYINT', 'VARCHAR']; + }; + + parser.getColumnDataTypeKeywords = function () { + if (parser.isHive()) { + return parser.getTypeKeywords().concat(['ARRAY<>', 'MAP<>', 'STRUCT<>', 'UNIONTYPE<>']); + } + if (parser.isImpala()) { + return parser.getTypeKeywords().concat(['ARRAY<>', 'MAP<>', 'STRUCT<>']); + } + return parser.getTypeKeywords(); + }; + + parser.addColRefIfExists = function (valueExpression) { + if (valueExpression.columnReference) { + parser.yy.result.colRef = {identifierChain: valueExpression.columnReference}; + } + }; + + parser.selectListNoTableSuggest = function (selectListEdit, hasDistinctOrAll) { + if (selectListEdit.cursorAtStart) { + var keywords = parser.getSelectListKeywords(); + if (!hasDistinctOrAll) { + keywords = keywords.concat([{ value: 'ALL', weight: 2 }, { value: 'DISTINCT', weight: 2 }]); + } + if (parser.isImpala()) { + keywords.push('STRAIGHT_JOIN'); + } + parser.suggestKeywords(keywords); + } else { + parser.checkForKeywords(selectListEdit); + } + if (selectListEdit.suggestFunctions) { + parser.suggestFunctions(); + } + if (selectListEdit.suggestColumns) { + parser.suggestColumns(); + } + if (selectListEdit.suggestAggregateFunctions && (!hasDistinctOrAll || hasDistinctOrAll === 'ALL')) { + parser.suggestAggregateFunctions(); + parser.suggestAnalyticFunctions(); + } + }; + + parser.suggestJoinConditions = function (details) { + parser.yy.result.suggestJoinConditions = details || {}; + if (parser.yy.latestTablePrimaries && !parser.yy.result.suggestJoinConditions.tablePrimaries) { + parser.yy.result.suggestJoinConditions.tablePrimaries = parser.yy.latestTablePrimaries.concat(); + } + }; + + parser.suggestJoins = function (details) { + parser.yy.result.suggestJoins = details || {}; + }; + + parser.valueExpressionSuggest = function (oppositeValueExpression, operator) { + if (oppositeValueExpression && oppositeValueExpression.columnReference) { + parser.suggestValues(); + parser.yy.result.colRef = {identifierChain: oppositeValueExpression.columnReference}; + } + parser.suggestColumns(); + parser.suggestFunctions(); + var keywords = [{ value: 'CASE', weight: 450 }, { value: 'FALSE', weight: 450 }, { value: 'NULL', weight: 450 }, { value: 'TRUE', weight: 450 }]; + if (parser.isHive() || typeof oppositeValueExpression === 'undefined' || typeof operator === 'undefined') { + keywords = keywords.concat(['EXISTS', 'NOT']); + } + if (oppositeValueExpression && oppositeValueExpression.types[0] === 'NUMBER') { + parser.applyTypeToSuggestions(['NUMBER']); + } else if (parser.isImpala() && (typeof operator === 'undefined' || operator === '-' || operator === '+')) { + keywords.push('INTERVAL'); + } + parser.suggestKeywords(keywords); + }; + + parser.applyTypeToSuggestions = function (types) { + if (types[0] === 'BOOLEAN') { + return; + } + if (parser.yy.result.suggestFunctions && !parser.yy.result.suggestFunctions.types) { + parser.yy.result.suggestFunctions.types = types; + } + if (parser.yy.result.suggestColumns && !parser.yy.result.suggestColumns.types) { + parser.yy.result.suggestColumns.types = types; + } + }; + + parser.findCaseType = function (whenThenList) { + var types = {}; + whenThenList.caseTypes.forEach(function (valueExpression) { + valueExpression.types.forEach(function (type) { + types[type] = true; + }); + }); + if (Object.keys(types).length === 1) { + return {types: [Object.keys(types)[0]]}; + } + return {types: ['T']}; + }; + + parser.findReturnTypes = function (functionName) { + return typeof SqlFunctions === 'undefined' ? ['T'] : SqlFunctions.getReturnTypes(parser.yy.activeDialect, functionName.toLowerCase()); + }; + + parser.applyArgumentTypesToSuggestions = function (functionName, position) { + var foundArguments = typeof SqlFunctions === 'undefined' ? ['T'] : SqlFunctions.getArgumentTypes(parser.yy.activeDialect, functionName.toLowerCase(), position); + if (foundArguments.length == 0 && parser.yy.result.suggestColumns) { + delete parser.yy.result.suggestColumns; + delete parser.yy.result.suggestKeyValues; + delete parser.yy.result.suggestValues; + delete parser.yy.result.suggestFunctions; + delete parser.yy.result.suggestIdentifiers; + delete parser.yy.result.suggestKeywords; + } else { + parser.applyTypeToSuggestions(foundArguments); + } + }; + + var getCleanImpalaPrimaries = function (primaries) { + var cleanPrimaries = []; + for (var i = primaries.length - 1; i >= 0; i--) { + var cleanPrimary = primaries[i]; + if (cleanPrimary.identifierChain && cleanPrimary.identifierChain.length > 0) { + for (var j = i - 1; j >=0; j--) { + var parentPrimary = primaries[j]; + if (parentPrimary.alias && cleanPrimary.identifierChain[0].name === parentPrimary.alias) { + var restOfChain = cleanPrimary.identifierChain.concat(); + restOfChain.shift(); + if (cleanPrimary.alias) { + cleanPrimary = { identifierChain: parentPrimary.identifierChain.concat(restOfChain), alias: cleanPrimary.alias, impalaComplex: true }; + } else { + cleanPrimary = { identifierChain: parentPrimary.identifierChain.concat(restOfChain), impalaComplex: true }; + } + } + } + } + cleanPrimaries.push(cleanPrimary); + } + return cleanPrimaries; + }; + + parser.commitLocations = function () { + if (parser.yy.locations.length === 0) { + return; + } + + var tablePrimaries = parser.yy.latestTablePrimaries; + + if (parser.isImpala()) { + tablePrimaries = []; + getCleanImpalaPrimaries(parser.yy.latestTablePrimaries).forEach(function (primary) { + var cleanPrimary = primary; + if (primary.identifierChain && primary.identifierChain.length > 0) { + for (var j = parser.yy.primariesStack.length - 1; j >= 0; j--) { + getCleanImpalaPrimaries(parser.yy.primariesStack[j]).every(function (parentPrimary) { + if (parentPrimary.alias && parentPrimary.alias === primary.identifierChain[0].name) { + var identifierChain = primary.identifierChain.concat(); + identifierChain.shift(); + cleanPrimary = { identifierChain: parentPrimary.identifierChain.concat(identifierChain) }; + if (primary.alias) { + cleanPrimary.alias = primary.alias; + } + return false; + } + return true; + }); + } + } + tablePrimaries.unshift(cleanPrimary); + }); + } + var i = parser.yy.locations.length; + + while (i--) { + var location = parser.yy.locations[i]; + if (location.type === 'variable' && location.colRef) { + parser.expandIdentifierChain({ wrapper: location.colRef, tablePrimaries: tablePrimaries, isColumnWrapper: true }); + delete location.colRef.linked; + } + + // Impala can have references to previous tables after FROM, i.e. FROM testTable t, t.testArray + // In this testArray would be marked a type table so we need to switch it to column. + if (location.type === 'table' && typeof location.identifierChain !== 'undefined' && location.identifierChain.length > 1 && tablePrimaries) { + var allPrimaries = tablePrimaries; + parser.yy.primariesStack.forEach(function (parentPrimaries) { + allPrimaries = getCleanImpalaPrimaries(parentPrimaries).concat(allPrimaries); + }); + var found = allPrimaries.filter(function (primary) { + return equalIgnoreCase(primary.alias, location.identifierChain[0].name); + }); + if (found.length > 0) { + location.type = 'column'; + } + } + + if (location.type === 'database' && typeof location.identifierChain !== 'undefined' && location.identifierChain.length > 0 && tablePrimaries) { + var allPrimaries = tablePrimaries; + parser.yy.primariesStack.forEach(function (parentPrimaries) { + allPrimaries = getCleanImpalaPrimaries(parentPrimaries).concat(allPrimaries); + }); + var foundAlias = allPrimaries.filter(function (primary) { + return equalIgnoreCase(primary.alias, location.identifierChain[0].name); + }); + if (foundAlias.length > 0 && parser.isImpala()) { + // Impala complex reference in FROM clause, i.e. FROM testTable t, t.testMap tm + location.type = 'table'; + parser.expandIdentifierChain({ tablePrimaries: allPrimaries, wrapper: location, anyOwner: true }); + location.type = location.identifierChain.length === 1 ? 'table' : 'complex'; + continue; + } + } + + if (location.type === 'unknown') { + if (typeof location.identifierChain !== 'undefined' && location.identifierChain.length > 0 && location.identifierChain.length <= 2 && tablePrimaries) { + var found = tablePrimaries.filter(function (primary) { + return equalIgnoreCase(primary.alias, location.identifierChain[0].name) || (primary.identifierChain && equalIgnoreCase(primary.identifierChain[0].name, location.identifierChain[0].name)); + }); + if (!found.length && location.firstInChain) { + found = tablePrimaries.filter(function (primary) { + return !primary.alias && primary.identifierChain && equalIgnoreCase(primary.identifierChain[primary.identifierChain.length - 1].name, location.identifierChain[0].name); + }); + } + + if (found.length) { + if (found[0].identifierChain.length > 1 && location.identifierChain.length === 1 && equalIgnoreCase(found[0].identifierChain[0].name, location.identifierChain[0].name)) { + location.type = 'database'; + } else if (found[0].alias && equalIgnoreCase(location.identifierChain[0].name, found[0].alias) && location.identifierChain.length > 1) { + location.type = 'column'; + parser.expandIdentifierChain({ tablePrimaries: tablePrimaries, wrapper: location, anyOwner: true }); + } else if (!found[0].alias && found[0].identifierChain && equalIgnoreCase(location.identifierChain[0].name, found[0].identifierChain[found[0].identifierChain.length - 1].name) && location.identifierChain.length > 1) { + location.type = 'column'; + parser.expandIdentifierChain({ tablePrimaries: tablePrimaries, wrapper: location, anyOwner: true }); + } else { + location.type = found[0].impalaComplex ? 'column' : 'table'; + parser.expandIdentifierChain({ tablePrimaries: tablePrimaries, wrapper: location, anyOwner: true }); + } + } else { + if (parser.yy.subQueries) { + found = parser.yy.subQueries.filter(function (subQuery) { + return equalIgnoreCase(subQuery.alias, location.identifierChain[0].name); + }); + if (found.length > 0) { + location.type = 'subQuery'; + location.identifierChain = [{subQuery: found[0].alias}]; + } + } + } + } + } + + if (location.type === 'asterisk' && !location.linked) { + + if (tablePrimaries && tablePrimaries.length > 0) { + location.tables = []; + location.linked = false; + if (!location.identifierChain) { + location.identifierChain = [{ asterisk: true }]; + } + parser.expandIdentifierChain({ tablePrimaries: tablePrimaries, wrapper: location, anyOwner: false }); + if (location.tables.length === 0) { + parser.yy.locations.splice(i, 1); + } + } else { + parser.yy.locations.splice(i, 1); + } + } + + if (location.type === 'table' && typeof location.identifierChain !== 'undefined' && location.identifierChain.length === 1 && location.identifierChain[0].name) { + // Could be a cte reference + parser.yy.locations.some(function (otherLocation) { + if (otherLocation.type === 'alias' && otherLocation.source === 'cte' && SqlUtils.identifierEquals(otherLocation.alias, location.identifierChain[0].name)) { + // TODO: Possibly add the other location if we want to show the link in the future. + // i.e. highlight select definition on hover over alias, also for subquery references. + location.type = 'alias'; + location.target = 'cte'; + location.alias = location.identifierChain[0].name; + delete location.identifierChain; + return true; + } + }); + } + + if (location.type === 'table' && (typeof location.identifierChain === 'undefined' || location.identifierChain.length === 0)) { + parser.yy.locations.splice(i, 1); + } + + if (location.type === 'unknown') { + location.type = 'column'; + } + + // A column location might refer to a previously defined alias, i.e. last 'foo' in "SELECT cast(id AS int) foo FROM tbl ORDER BY foo;" + if (location.type === 'column') { + for (var j = i - 1; j >= 0; j--) { + var otherLocation = parser.yy.locations[j]; + if (otherLocation.type === 'alias' && otherLocation.source === 'column' && location.identifierChain && location.identifierChain.length === 1 && location.identifierChain[0].name && otherLocation.alias && location.identifierChain[0].name.toLowerCase() === otherLocation.alias.toLowerCase()) { + location.type = 'alias'; + location.source = 'column'; + location.alias = location.identifierChain[0].name; + delete location.identifierChain; + location.parentLocation = otherLocation.parentLocation; + break; + } + } + } + + if (location.type === 'column') { + if (parser.isHive() && !location.linked) { + location.identifierChain = parser.expandLateralViews(parser.yy.lateralViews, location.identifierChain); + } + + var initialIdentifierChain = location.identifierChain ? location.identifierChain.concat() : undefined; + + parser.expandIdentifierChain({ tablePrimaries: tablePrimaries, wrapper: location, anyOwner: true, isColumnWrapper: true, isColumnLocation: true }); + + if (typeof location.identifierChain === 'undefined') { + parser.yy.locations.splice(i, 1); + } else if (location.identifierChain.length === 0 && initialIdentifierChain && initialIdentifierChain.length === 1) { + // This is for the case "SELECT tblOrColName FROM db.tblOrColName"; + location.identifierChain = initialIdentifierChain; + } + } + if (location.type === 'column' && location.identifierChain) { + if (location.identifierChain.length > 1 && location.tables && location.tables.length > 0) { + location.type = 'complex'; + } + } + delete location.firstInChain; + if (location.type !== 'column' && location.type !== 'complex') { + delete location.qualified; + } else if (typeof location.qualified === 'undefined') { + location.qualified = false; + } + } + + if (parser.yy.locations.length > 0) { + parser.yy.allLocations = parser.yy.allLocations.concat(parser.yy.locations); + parser.yy.locations = []; + } + }; + + var prioritizeSuggestions = function () { + parser.yy.result.lowerCase = parser.yy.lowerCase || false; + + var cteIndex = {}; + + if (typeof parser.yy.latestCommonTableExpressions !== 'undefined') { + parser.yy.latestCommonTableExpressions.forEach(function (cte) { + cteIndex[cte.alias.toLowerCase()] = cte; + }) + } + + SIMPLE_TABLE_REF_SUGGESTIONS.forEach(function (suggestionType) { + if (suggestionType !== 'suggestAggregateFunctions' && typeof parser.yy.result[suggestionType] !== 'undefined' && parser.yy.result[suggestionType].tables.length === 0) { + delete parser.yy.result[suggestionType]; + } else if (typeof parser.yy.result[suggestionType] !== 'undefined' && typeof parser.yy.result[suggestionType].tables !== 'undefined') { + for (var i = parser.yy.result[suggestionType].tables.length - 1; i >= 0; i--) { + var table = parser.yy.result[suggestionType].tables[i]; + if (table.identifierChain.length === 1 && typeof table.identifierChain[0].name !== 'undefined' && typeof cteIndex[table.identifierChain[0].name.toLowerCase()] !== 'undefined') { + parser.yy.result[suggestionType].tables.splice(i, 1); + } + } + } + }); + + if (typeof parser.yy.result.colRef !== 'undefined') { + if (!parser.yy.result.colRef.linked || typeof parser.yy.result.colRef.identifierChain === 'undefined' || parser.yy.result.colRef.identifierChain.length === 0) { + delete parser.yy.result.colRef; + if (typeof parser.yy.result.suggestColRefKeywords !== 'undefined') { + Object.keys(parser.yy.result.suggestColRefKeywords).forEach(function (type) { + parser.yy.result.suggestKeywords = parser.yy.result.suggestKeywords.concat(parser.createWeightedKeywords(parser.yy.result.suggestColRefKeywords[type], -1)); + }); + delete parser.yy.result.suggestColRefKeywords; + } + if (parser.yy.result.suggestColumns && parser.yy.result.suggestColumns.types.length === 1 && parser.yy.result.suggestColumns.types[0] === 'COLREF') { + parser.yy.result.suggestColumns.types = ['T']; + } + delete parser.yy.result.suggestValues; + } + } + + if (typeof parser.yy.result.colRef !== 'undefined') { + if (!parser.yy.result.suggestValues && !parser.yy.result.suggestColRefKeywords && + (!parser.yy.result.suggestColumns || + parser.yy.result.suggestColumns.types[0] !== 'COLREF')) { + delete parser.yy.result.colRef; + } + } + if (typeof parser.yy.result.suggestIdentifiers !== 'undefined' && parser.yy.result.suggestIdentifiers.length > 0) { + delete parser.yy.result.suggestTables; + delete parser.yy.result.suggestDatabases; + } + if (typeof parser.yy.result.suggestColumns !== 'undefined') { + var suggestColumns = parser.yy.result.suggestColumns; + if (typeof suggestColumns.tables === 'undefined' || suggestColumns.tables.length === 0) { + // Impala supports statements like SELECT * FROM tbl1, tbl2 WHERE db.tbl1.col = tbl2.bla + if (parser.yy.result.suggestColumns.linked && parser.isImpala() && typeof suggestColumns.identifierChain !== 'undefined' && suggestColumns.identifierChain.length > 0) { + if (suggestColumns.identifierChain.length === 1) { + parser.yy.result.suggestTables = suggestColumns; + delete parser.yy.result.suggestColumns + } else { + suggestColumns.tables = [{identifierChain: suggestColumns.identifierChain}]; + delete suggestColumns.identifierChain; + } + } else { + delete parser.yy.result.suggestColumns; + delete parser.yy.result.subQueries; + } + } else { + delete parser.yy.result.suggestTables; + delete parser.yy.result.suggestDatabases; + + suggestColumns.tables.forEach(function (table) { + if (typeof table.identifierChain !== 'undefined' && table.identifierChain.length === 1 && typeof table.identifierChain[0].name !== 'undefined') { + var cte = cteIndex[table.identifierChain[0].name.toLowerCase()]; + if (typeof cte !== 'undefined') { + delete table.identifierChain[0].name; + table.identifierChain[0].cte = cte.alias; + } + } else if (typeof table.identifierChain === 'undefined' && table.subQuery) { + table.identifierChain = [{ subQuery: table.subQuery }]; + delete table.subQuery; + } + }); + + if (typeof suggestColumns.identifierChain !== 'undefined' && suggestColumns.identifierChain.length === 0) { + delete suggestColumns.identifierChain; + } + } + } else { + delete parser.yy.result.subQueries; + } + + if (typeof parser.yy.result.suggestJoinConditions !== 'undefined') { + if (typeof parser.yy.result.suggestJoinConditions.tables === 'undefined' || parser.yy.result.suggestJoinConditions.tables.length === 0) { + delete parser.yy.result.suggestJoinConditions; + } + } + + if (typeof parser.yy.result.suggestTables !== 'undefined' && typeof parser.yy.latestCommonTableExpressions !== 'undefined') { + var ctes = []; + parser.yy.latestCommonTableExpressions.forEach(function (cte) { + var suggestion = {name: cte.alias}; + if (parser.yy.result.suggestTables.prependFrom) { + suggestion.prependFrom = true + } + if (parser.yy.result.suggestTables.prependQuestionMark) { + suggestion.prependQuestionMark = true; + } + ctes.push(suggestion); + }); + if (ctes.length > 0) { + parser.yy.result.suggestCommonTableExpressions = ctes; + } + } + }; + + /** + * Impala supports referencing maps and arrays in the the table reference list i.e. + * + * SELECT m['foo'].bar.| FROM someDb.someTable t, t.someMap m; + * + * From this the tablePrimaries would look like: + * + * [ { alias: 't', identifierChain: [ { name: 'someDb' }, { name: 'someTable' } ] }, + * { alias: 'm', identifierChain: [ { name: 't' }, { name: 'someMap' } ] } ] + * + * with an identifierChain from the select list: + * + * [ { name: 'm', keySet: true }, { name: 'bar' } ] + * + * Calling this would return an expanded identifierChain, given the above it would be: + * + * [ { name: 't' }, { name: 'someMap', keySet: true }, { name: 'bar' } ] + */ + parser.expandImpalaIdentifierChain = function (tablePrimaries, identifierChain) { + var expandedChain = identifierChain.concat(); // Clone in case it's called multiple times. + if (typeof expandedChain === 'undefined' || expandedChain.length === 0) { + return identifierChain; + } + var expand = function (identifier, expandedChain) { + var foundPrimary = tablePrimaries.filter(function (tablePrimary) { + var primaryIdentifier = tablePrimary.alias; + if (!primaryIdentifier && tablePrimary.identifierChain && tablePrimary.identifierChain.length > 0) { + primaryIdentifier = tablePrimary.identifierChain[tablePrimary.identifierChain.length - 1].name; + } + return equalIgnoreCase(primaryIdentifier, identifier); + }); + + if (foundPrimary.length === 1 && foundPrimary[0].identifierChain) { + var parentPrimary = tablePrimaries.filter(function (tablePrimary) { + return equalIgnoreCase(tablePrimary.alias, foundPrimary[0].identifierChain[0].name); + }); + if (parentPrimary.length === 1) { + var keySet = expandedChain[0].keySet; + var secondPart = expandedChain.slice(1); + var firstPart = []; + // Clone to make sure we don't add keySet to the primaries + foundPrimary[0].identifierChain.forEach(function (identifier) { + firstPart.push({name: identifier.name}); + }); + if (keySet && firstPart.length > 0) { + firstPart[firstPart.length - 1].keySet = true; + } + + if (firstPart.length === 0 || typeof secondPart === 'undefined' || secondPart.length === 0) { + return firstPart; + } + var result = firstPart.concat(secondPart); + if (result.length > 0) { + return expand(firstPart[0].name, result); + } else { + return result; + } + } + } + return expandedChain; + }; + return expand(expandedChain[0].name, expandedChain); + }; + + parser.identifyPartials = function (beforeCursor, afterCursor) { + var beforeMatch = beforeCursor.match(/[0-9a-zA-Z_]*$/); + var afterMatch = afterCursor.match(/^[0-9a-zA-Z_]*(?:\((?:[^)]*\))?)?/); + return {left: beforeMatch ? beforeMatch[0].length : 0, right: afterMatch ? afterMatch[0].length : 0}; + }; + + parser.expandLateralViews = function (lateralViews, originalIdentifierChain, columnSuggestion) { + var identifierChain = originalIdentifierChain.concat(); // Clone in case it's re-used + var firstIdentifier = identifierChain[0]; + if (typeof lateralViews !== 'undefined') { + lateralViews.concat().reverse().forEach(function (lateralView) { + if (!lateralView.udtf.expression.columnReference) { + return; + } + if (equalIgnoreCase(firstIdentifier.name, lateralView.tableAlias) && identifierChain.length > 1) { + identifierChain.shift(); + firstIdentifier = identifierChain[0]; + if (columnSuggestion) { + delete parser.yy.result.suggestKeywords; + } + } else if (equalIgnoreCase(firstIdentifier.name, lateralView.tableAlias) && identifierChain.length === 1 && typeof parser.yy.result.suggestColumns !== 'undefined') { + if (columnSuggestion) { + if (typeof parser.yy.result.suggestIdentifiers === 'undefined') { + parser.yy.result.suggestIdentifiers = []; + } + lateralView.columnAliases.forEach(function (columnAlias) { + parser.yy.result.suggestIdentifiers.push({name: columnAlias, type: 'alias'}); + }); + delete parser.yy.result.suggestColumns; + delete parser.yy.result.suggestKeywords; + } + return identifierChain; + } + if (lateralView.columnAliases.indexOf(firstIdentifier.name) !== -1) { + if (lateralView.columnAliases.length === 2 && lateralView.udtf.function.toLowerCase() === 'explode' && equalIgnoreCase(firstIdentifier.name, lateralView.columnAliases[0])) { + identifierChain[0] = {name: 'key'}; + } else if (lateralView.columnAliases.length === 2 && lateralView.udtf.function.toLowerCase() === 'explode' && equalIgnoreCase(firstIdentifier.name, lateralView.columnAliases[1])) { + identifierChain[0] = {name: 'value'}; + } else { + identifierChain[0] = {name: 'item'}; + } + identifierChain = lateralView.udtf.expression.columnReference.concat(identifierChain); + firstIdentifier = identifierChain[0]; + } + }); + } + return identifierChain; + }; + + var addCleanTablePrimary = function (tables, tablePrimary) { + if (tablePrimary.alias) { + tables.push({alias: tablePrimary.alias, identifierChain: tablePrimary.identifierChain}); + } else { + tables.push({identifierChain: tablePrimary.identifierChain}); + } + }; + + parser.expandIdentifierChain = function (options) { + var wrapper = options.wrapper; + var anyOwner = options.anyOwner; + var isColumnWrapper = options.isColumnWrapper; + var isColumnLocation = options.isColumnLocation; + var tablePrimaries = options.tablePrimaries || parser.yy.latestTablePrimaries; + + if (typeof wrapper.identifierChain === 'undefined' || typeof tablePrimaries === 'undefined') { + return; + } + var identifierChain = wrapper.identifierChain.concat(); + + if (tablePrimaries.length === 0) { + delete wrapper.identifierChain; + return; + } + + if (!anyOwner) { + tablePrimaries = filterTablePrimariesForOwner(tablePrimaries, wrapper.owner); + } + + if (identifierChain.length > 0 && identifierChain[identifierChain.length - 1].asterisk) { + var tables = []; + tablePrimaries.forEach(function (tablePrimary) { + if (identifierChain.length > 1 && !tablePrimary.subQueryAlias) { + if (identifierChain.length === 2 && equalIgnoreCase(tablePrimary.alias, identifierChain[0].name)) { + addCleanTablePrimary(tables, tablePrimary); + } else if (identifierChain.length === 2 && equalIgnoreCase(tablePrimary.identifierChain[0].name, identifierChain[0].name)) { + addCleanTablePrimary(tables, tablePrimary); + } else if (identifierChain.length === 3 && tablePrimary.identifierChain.length > 1 && + equalIgnoreCase(tablePrimary.identifierChain[0].name, identifierChain[0].name) && + equalIgnoreCase(tablePrimary.identifierChain[1].name, identifierChain[1].name)) { + addCleanTablePrimary(tables, tablePrimary); + } + } else { + if (tablePrimary.subQueryAlias) { + tables.push({identifierChain: [{subQuery: tablePrimary.subQueryAlias}]}); + } else { + addCleanTablePrimary(tables, tablePrimary); + } + } + }); + // Possible Joins + if (tables.length > 0) { + wrapper.tables = tables; + delete wrapper.identifierChain; + return; + } + } + + // Impala can have references to maps or array, i.e. FROM table t, t.map m + // We need to replace those in the identifierChain + if (parser.isImpala()) { + var lengthBefore = identifierChain.length; + identifierChain = parser.expandImpalaIdentifierChain(tablePrimaries, identifierChain); + // Change type of any locations marked as table + if (wrapper.type === 'table' && identifierChain.length > lengthBefore) { + wrapper.type = 'column'; + } + wrapper.identifierChain = identifierChain; + } + // Expand exploded views in the identifier chain + if (parser.isHive() && identifierChain.length > 0) { + identifierChain = parser.expandLateralViews(parser.yy.lateralViews, identifierChain); + wrapper.identifierChain = identifierChain; + } + + // IdentifierChain contains a possibly started identifier or empty, example: a.b.c = ['a', 'b', 'c'] + // Reduce the tablePrimaries to the one that matches the first identifier if found + var foundPrimary; + var doubleMatch = false; + var aliasMatch = false; + if (identifierChain.length > 0) { + for (var i = 0; i < tablePrimaries.length; i++) { + if (tablePrimaries[i].subQueryAlias) { + if (equalIgnoreCase(tablePrimaries[i].subQueryAlias, identifierChain[0].name)) { + foundPrimary = tablePrimaries[i]; + } + } else if (equalIgnoreCase(tablePrimaries[i].alias, identifierChain[0].name)) { + foundPrimary = tablePrimaries[i]; + aliasMatch = true; + break; + } else if (tablePrimaries[i].identifierChain.length > 1 && identifierChain.length > 1 && + equalIgnoreCase(tablePrimaries[i].identifierChain[0].name, identifierChain[0].name) && + equalIgnoreCase(tablePrimaries[i].identifierChain[1].name, identifierChain[1].name)) { + foundPrimary = tablePrimaries[i]; + doubleMatch = true; + break; + } else if (!foundPrimary && equalIgnoreCase(tablePrimaries[i].identifierChain[0].name, identifierChain[0].name) && identifierChain.length > (isColumnLocation ? 1 : 0)) { + foundPrimary = tablePrimaries[i]; + // No break as first two can still match. + } else if (!foundPrimary && tablePrimaries[i].identifierChain.length > 1 && !tablePrimaries[i].alias + && equalIgnoreCase(tablePrimaries[i].identifierChain[tablePrimaries[i].identifierChain.length - 1].name, identifierChain[0].name)) { + // This is for the case SELECT baa. FROM bla.baa, blo.boo; + foundPrimary = tablePrimaries[i]; + break; + } + } + } + + if (foundPrimary) { + if (foundPrimary.impalaComplex && wrapper.type === 'column') { + wrapper.type = 'complex'; + } + identifierChain.shift(); + if (doubleMatch) { + identifierChain.shift(); + } + } else if (tablePrimaries.length === 1 && !isColumnWrapper) { + foundPrimary = tablePrimaries[0]; + } + + if (foundPrimary) { + if (isColumnWrapper) { + wrapper.identifierChain = identifierChain; + if (foundPrimary.subQueryAlias) { + wrapper.tables = [{ subQuery: foundPrimary.subQueryAlias }]; + } else if (foundPrimary.alias) { + if (!isColumnLocation && isColumnWrapper && aliasMatch) { + // TODO: add alias on table in suggestColumns (needs support in sqlAutocomplete3.js) + // the case is: SELECT cu.| FROM customers cu; + // This prevents alias from being added automatically in sqlAutocompleter3.js + wrapper.tables = [{ identifierChain: foundPrimary.identifierChain }]; + } else { + wrapper.tables = [{ identifierChain: foundPrimary.identifierChain, alias: foundPrimary.alias }]; + } + } else { + wrapper.tables = [{ identifierChain: foundPrimary.identifierChain }]; + } + } else { + if (foundPrimary.subQueryAlias) { + identifierChain.unshift({ subQuery: foundPrimary.subQueryAlias }); + } else { + identifierChain = foundPrimary.identifierChain.concat(identifierChain); + } + if (wrapper.tables) { + wrapper.tables.push({identifierChain: identifierChain}); + delete wrapper.identifierChain; + } else { + wrapper.identifierChain = identifierChain; + } + } + } else { + if (isColumnWrapper) { + wrapper.tables = []; + } + tablePrimaries.forEach(function (tablePrimary) { + var targetTable = tablePrimary.subQueryAlias ? { subQuery: tablePrimary.subQueryAlias } : { identifierChain: tablePrimary.identifierChain } ; + if (tablePrimary.alias) { + targetTable.alias = tablePrimary.alias; + } + if (wrapper.tables) { + wrapper.tables.push(targetTable) + } + }); + } + delete wrapper.owner; + wrapper.linked = true; + }; + + var suggestLateralViewAliasesAsIdentifiers = function () { + if (typeof parser.yy.lateralViews === 'undefined' || parser.yy.lateralViews.length === 0) { + return; + } + if (typeof parser.yy.result.suggestIdentifiers === 'undefined') { + parser.yy.result.suggestIdentifiers = []; + } + parser.yy.lateralViews.forEach(function (lateralView) { + if (typeof lateralView.tableAlias !== 'undefined') { + parser.yy.result.suggestIdentifiers.push({name: lateralView.tableAlias + '.', type: 'alias'}); + } + lateralView.columnAliases.forEach(function (columnAlias) { + parser.yy.result.suggestIdentifiers.push({name: columnAlias, type: 'alias'}); + }); + }); + if (parser.yy.result.suggestIdentifiers.length === 0) { + delete parser.yy.result.suggestIdentifiers; + } + }; + + var filterTablePrimariesForOwner = function (tablePrimaries, owner) { + var result = []; + tablePrimaries.forEach(function (primary) { + if (typeof owner === 'undefined' && typeof primary.owner === 'undefined') { + result.push(primary); + } else if (owner === primary.owner) { + result.push(primary); + } + }); + return result; + }; + + var convertTablePrimariesToSuggestions = function (tablePrimaries) { + var tables = []; + var identifiers = []; + tablePrimaries.forEach(function (tablePrimary) { + if (tablePrimary.identifierChain && tablePrimary.identifierChain.length > 0) { + var table = {identifierChain: tablePrimary.identifierChain}; + if (tablePrimary.alias) { + table.alias = tablePrimary.alias; + identifiers.push({name: table.alias + '.', type: 'alias'}); + if (parser.isImpala()) { + var testForImpalaAlias = [{name: table.alias}]; + var result = parser.expandImpalaIdentifierChain(tablePrimaries, testForImpalaAlias); + if (result.length > 1) { + // Continue if it's a reference to a complex type + return; + } + } + } else { + var lastIdentifier = tablePrimary.identifierChain[tablePrimary.identifierChain.length - 1]; + if (typeof lastIdentifier.name !== 'undefined') { + identifiers.push({name: lastIdentifier.name + '.', type: 'table'}); + } else if (typeof lastIdentifier.subQuery !== 'undefined') { + identifiers.push({name: lastIdentifier.subQuery + '.', type: 'sub-query'}); + } + } + tables.push(table); + } else if (tablePrimary.subQueryAlias) { + identifiers.push({name: tablePrimary.subQueryAlias + '.', type: 'sub-query'}); + tables.push({identifierChain: [{subQuery: tablePrimary.subQueryAlias}]}); + } + }); + if (identifiers.length > 0) { + if (typeof parser.yy.result.suggestIdentifiers === 'undefined') { + parser.yy.result.suggestIdentifiers = identifiers; + } else { + parser.yy.result.suggestIdentifiers = identifiers.concat(parser.yy.result.suggestIdentifiers); + } + } + parser.yy.result.suggestColumns.tables = tables; + if (parser.yy.result.suggestColumns.identifierChain && parser.yy.result.suggestColumns.identifierChain.length === 0) { + delete parser.yy.result.suggestColumns.identifierChain; + } + parser.yy.result.suggestColumns.linked = true; + }; + + var linkTablePrimaries = function () { + if (!parser.yy.cursorFound || typeof parser.yy.latestTablePrimaries === 'undefined') { + return; + } + + SIMPLE_TABLE_REF_SUGGESTIONS.forEach(function (suggestionType) { + if (typeof parser.yy.result[suggestionType] !== 'undefined' && parser.yy.result[suggestionType].tablePrimaries && !parser.yy.result[suggestionType].linked) { + parser.yy.result[suggestionType].tables = []; + parser.yy.result[suggestionType].tablePrimaries.forEach(function (tablePrimary) { + if (!tablePrimary.subQueryAlias) { + parser.yy.result[suggestionType].tables.push(tablePrimary.alias ? { + identifierChain: tablePrimary.identifierChain.concat(), + alias: tablePrimary.alias + } : {identifierChain: tablePrimary.identifierChain.concat()}); + } + }); + delete parser.yy.result[suggestionType].tablePrimaries; + parser.yy.result[suggestionType].linked = true; + } + }); + + if (typeof parser.yy.result.suggestColumns !== 'undefined' && !parser.yy.result.suggestColumns.linked) { + var tablePrimaries = filterTablePrimariesForOwner(parser.yy.latestTablePrimaries, parser.yy.result.suggestColumns.owner); + if (!parser.yy.result.suggestColumns.tables) { + parser.yy.result.suggestColumns.tables = []; + } + if (parser.yy.subQueries.length > 0) { + parser.yy.result.subQueries = parser.yy.subQueries; + } + if (typeof parser.yy.result.suggestColumns.identifierChain === 'undefined' || parser.yy.result.suggestColumns.identifierChain.length === 0) { + if (tablePrimaries.length > 1) { + convertTablePrimariesToSuggestions(tablePrimaries); + } else { + suggestLateralViewAliasesAsIdentifiers(); + if (tablePrimaries.length === 1 && (tablePrimaries[0].alias || tablePrimaries[0].subQueryAlias)) { + convertTablePrimariesToSuggestions(tablePrimaries); + } + parser.expandIdentifierChain({ wrapper: parser.yy.result.suggestColumns, anyOwner: false, isColumnWrapper: true }); + } + } else { + // Expand exploded views in the identifier chain + if (parser.isHive() && !parser.yy.result.suggestColumns.linked) { + var originalLength = parser.yy.result.suggestColumns.identifierChain.length; + parser.yy.result.suggestColumns.identifierChain = parser.expandLateralViews(parser.yy.lateralViews, parser.yy.result.suggestColumns.identifierChain, true); + // Drop '*' keyword for lateral views + if (typeof parser.yy.result.suggestColumns !== 'undefined') { + if (parser.yy.result.suggestColumns.identifierChain.length > originalLength && + typeof parser.yy.result.suggestKeywords !== 'undefined' && + parser.yy.result.suggestKeywords.length === 1 && + parser.yy.result.suggestKeywords[0].value === '*') { + delete parser.yy.result.suggestKeywords; + } + parser.expandIdentifierChain({ wrapper: parser.yy.result.suggestColumns, anyOwner: false, isColumnWrapper: true }); + } + } else { + parser.expandIdentifierChain({ wrapper: parser.yy.result.suggestColumns, anyOwner: false, isColumnWrapper: true }); + } + } + } + + if (typeof parser.yy.result.colRef !== 'undefined' && !parser.yy.result.colRef.linked) { + parser.expandIdentifierChain({ wrapper: parser.yy.result.colRef }); + + var primaries = filterTablePrimariesForOwner(parser.yy.latestTablePrimaries); + if (primaries.length === 0 || (primaries.length > 1 && parser.yy.result.colRef.identifierChain.length === 1)) { + parser.yy.result.colRef.identifierChain = []; + } + } + if (typeof parser.yy.result.suggestKeyValues !== 'undefined' && !parser.yy.result.suggestKeyValues.linked) { + parser.expandIdentifierChain({ wrapper: parser.yy.result.suggestKeyValues }); + } + }; + + parser.getSubQuery = function (cols) { + var columns = []; + cols.selectList.forEach(function (col) { + var result = {}; + if (col.alias) { + result.alias = col.alias; + } + if (col.valueExpression && col.valueExpression.columnReference) { + result.identifierChain = col.valueExpression.columnReference + } else if (col.asterisk) { + result.identifierChain = [{asterisk: true}]; + } + if (col.valueExpression && col.valueExpression.types && col.valueExpression.types.length === 1) { + result.type = col.valueExpression.types[0]; + } + + columns.push(result); + }); + + return { + columns: columns + }; + }; + + parser.addTablePrimary = function (ref) { + if (typeof parser.yy.latestTablePrimaries === 'undefined') { + parser.yy.latestTablePrimaries = []; + } + parser.yy.latestTablePrimaries.push(ref); + }; + + parser.suggestFileFormats = function () { + if (parser.isHive()) { + parser.suggestKeywords(['AVRO', 'INPUTFORMAT', 'ORC', 'PARQUET', 'RCFILE', 'SEQUENCEFILE', 'TEXTFILE']); + } else { + parser.suggestKeywords(['AVRO', 'KUDU', 'ORC', 'PARQUET', 'RCFILE', 'SEQUENCEFILE', 'TEXTFILE']); + } + }; + + parser.getKeywordsForOptionalsLR = function (optionals, keywords, override) { + var result = []; + + for (var i = 0; i < optionals.length; i++) { + if (!optionals[i] && (typeof override === 'undefined' || override[i])) { + if (keywords[i] instanceof Array) { + result = result.concat(keywords[i]); + } else { + result.push(keywords[i]); + } + } else if (optionals[i]) { + break; + } + } + return result; + }; + + parser.suggestDdlAndDmlKeywords = function (extraKeywords) { + var keywords = ['ALTER', 'CREATE', 'DESCRIBE', 'DROP', 'GRANT', 'INSERT', 'REVOKE', 'SELECT', 'SET', 'SHOW', 'TRUNCATE', 'UPDATE', 'USE', 'WITH']; + + if (extraKeywords) { + keywords = keywords.concat(extraKeywords); + } + + if (parser.isHive()) { + keywords = keywords.concat(['ABORT', 'ANALYZE TABLE', 'DELETE', 'EXPORT', 'IMPORT', 'LOAD', 'MERGE', 'MSCK', 'RELOAD FUNCTION', 'RESET']); + } + + if (parser.isImpala()) { + keywords = keywords.concat(['COMMENT ON', 'COMPUTE', 'DELETE', 'INVALIDATE METADATA', 'LOAD', 'REFRESH', 'UPSERT']); + } + + parser.suggestKeywords(keywords); + }; + + parser.checkForSelectListKeywords = function (selectList) { + if (selectList.length === 0) { + return; + } + var last = selectList[selectList.length - 1]; + if (!last || !last.valueExpression) { + return; + } + var valueExpressionKeywords = parser.getValueExpressionKeywords(last.valueExpression); + var keywords = []; + if (last.suggestKeywords) { + keywords = keywords.concat(last.suggestKeywords); + } + if (valueExpressionKeywords.suggestKeywords) { + keywords = keywords.concat(valueExpressionKeywords.suggestKeywords); + } + if (valueExpressionKeywords.suggestColRefKeywords) { + parser.suggestColRefKeywords(valueExpressionKeywords.suggestColRefKeywords); + parser.addColRefIfExists(last.valueExpression); + } + if (!last.alias) { + keywords.push('AS'); + } + if (keywords.length > 0) { + parser.suggestKeywords(keywords); + } + }; + + parser.checkForKeywords = function (expression) { + if (expression) { + if (expression.suggestKeywords && expression.suggestKeywords.length > 0) { + parser.suggestKeywords(expression.suggestKeywords); + } + if (expression.suggestColRefKeywords) { + parser.suggestColRefKeywords(expression.suggestColRefKeywords); + parser.addColRefIfExists(expression); + } + } + }; + + parser.createWeightedKeywords = function (keywords, weight) { + var result = []; + keywords.forEach(function (keyword) { + if (typeof keyword.weight !== 'undefined') { + keyword.weight = weight + (keyword.weight / 10); + result.push(keyword); + } else { + result.push({value: keyword, weight: weight}); + } + }); + return result; + }; + + parser.suggestKeywords = function (keywords) { + var weightedKeywords = []; + if (keywords.length == 0) { + return; + } + keywords.forEach(function (keyword) { + if (typeof keyword.weight !== 'undefined') { + weightedKeywords.push(keyword); + } else { + weightedKeywords.push({value: keyword, weight: -1}) + } + }); + weightedKeywords.sort(function (a, b) { + if (a.weight !== b.weight) { + return b.weight - a.weight; + } + return a.value.localeCompare(b.value); + }); + parser.yy.result.suggestKeywords = weightedKeywords; + }; + + parser.suggestColRefKeywords = function (colRefKeywords) { + parser.yy.result.suggestColRefKeywords = colRefKeywords; + }; + + parser.suggestTablesOrColumns = function (identifier) { + if (typeof parser.yy.latestTablePrimaries == 'undefined') { + parser.suggestTables({identifierChain: [{name: identifier}]}); + return; + } + var tableRef = parser.yy.latestTablePrimaries.filter(function (tablePrimary) { + return equalIgnoreCase(tablePrimary.alias, identifier); + }); + if (tableRef.length > 0) { + parser.suggestColumns({identifierChain: [{name: identifier}]}); + } else { + parser.suggestTables({identifierChain: [{name: identifier}]}); + } + }; + + parser.suggestFunctions = function (details) { + parser.yy.result.suggestFunctions = details || {}; + }; + + parser.suggestAggregateFunctions = function () { + var primaries = []; + var aliases = {}; + parser.yy.latestTablePrimaries.forEach(function (primary) { + if (typeof primary.alias !== 'undefined') { + aliases[primary.alias] = true; + } + // Drop if the first one refers to a table alias (...FROM tbl t, t.map tm ...) + if (typeof primary.identifierChain !== 'undefined' && !aliases[primary.identifierChain[0].name] && typeof primary.owner === 'undefined') { + primaries.push(primary); + } + }); + parser.yy.result.suggestAggregateFunctions = {tablePrimaries: primaries}; + }; + + parser.suggestAnalyticFunctions = function () { + parser.yy.result.suggestAnalyticFunctions = true; + }; + + parser.suggestSetOptions = function () { + parser.yy.result.suggestSetOptions = true; + }; + + parser.suggestIdentifiers = function (identifiers) { + parser.yy.result.suggestIdentifiers = identifiers; + }; + + parser.suggestColumns = function (details) { + if (typeof details === 'undefined') { + details = {identifierChain: []}; + } else if (typeof details.identifierChain === 'undefined') { + details.identifierChain = []; + } + parser.yy.result.suggestColumns = details; + }; + + parser.suggestGroupBys = function (details) { + parser.yy.result.suggestGroupBys = details || {}; + }; + + parser.suggestOrderBys = function (details) { + parser.yy.result.suggestOrderBys = details || {}; + }; + + parser.suggestFilters = function (details) { + parser.yy.result.suggestFilters = details || {}; + }; + + parser.suggestKeyValues = function (details) { + parser.yy.result.suggestKeyValues = details || {}; + }; + + parser.suggestTables = function (details) { + parser.yy.result.suggestTables = details || {}; + }; + + var adjustLocationForCursor = function (location) { + // columns are 0-based and lines not, so add 1 to cols + var newLocation = { + first_line: location.first_line, + last_line: location.last_line, + first_column: location.first_column + 1, + last_column: location.last_column + 1 + }; + if (parser.yy.cursorFound) { + if (parser.yy.cursorFound.first_line === newLocation.first_line && parser.yy.cursorFound.last_column <= newLocation.first_column) { + var additionalSpace = parser.yy.partialLengths.left + parser.yy.partialLengths.right; + additionalSpace -= parser.yy.partialCursor ? 1 : 3; // For some reason the normal cursor eats 3 positions. + newLocation.first_column = newLocation.first_column + additionalSpace; + newLocation.last_column = newLocation.last_column + additionalSpace; + } + } + return newLocation; + }; + + parser.addFunctionLocation = function (location, functionName) { + // Remove trailing '(' from location + var adjustedLocation = { + first_line: location.first_line, + last_line: location.last_line, + first_column: location.first_column, + last_column: location.last_column - 1 + }; + parser.yy.locations.push({ + type: 'function', + location: adjustLocationForCursor(adjustedLocation), + function: functionName.toLowerCase() + }); + }; + + parser.addStatementLocation = function (location) { + // Don't report lonely cursor as a statement + if (location.first_line === location.last_line && Math.abs(location.last_column - location.first_column) === 1) { + return; + } + var adjustedLocation; + if (parser.yy.cursorFound && parser.yy.cursorFound.last_line === location.last_line && + parser.yy.cursorFound.first_column >= location.first_column && parser.yy.cursorFound.last_column <= location.last_column) { + var additionalSpace = parser.yy.partialLengths.left + parser.yy.partialLengths.right; + adjustedLocation = { + first_line: location.first_line, + last_line: location.last_line, + first_column: location.first_column + 1, + last_column: location.last_column + additionalSpace - (parser.yy.partialCursor ? 0 : 2) + } + } else { + adjustedLocation = { + first_line: location.first_line, + last_line: location.last_line, + first_column: location.first_column + 1, + last_column: location.last_column + 1 + } + } + + parser.yy.locations.push({ + type: 'statement', + location: adjustedLocation + }); + }; + + parser.firstDefined = function () { + for (var i = 0; i + 1 < arguments.length; i += 2) { + if (arguments[i]) { + return arguments[i + 1]; + } + } + }; + + parser.addClauseLocation = function (type, precedingLocation, locationIfPresent, isCursor) { + var location; + if (isCursor) { + if (parser.yy.partialLengths.left === 0 && parser.yy.partialLengths.right === 0) { + location = { + type: type, + missing: true, + location: adjustLocationForCursor({ + first_line: precedingLocation.last_line, + first_column: precedingLocation.last_column, + last_line: precedingLocation.last_line, + last_column: precedingLocation.last_column + }) + } + } else { + location = { + type: type, + missing: false, + location: { + first_line: locationIfPresent.last_line, + first_column: locationIfPresent.last_column - 1, + last_line: locationIfPresent.last_line, + last_column: locationIfPresent.last_column - 1 + parser.yy.partialLengths.right + parser.yy.partialLengths.left + } + } + } + } else { + location = { + type: type, + missing: !locationIfPresent, + location: adjustLocationForCursor(locationIfPresent || { + first_line: precedingLocation.last_line, + first_column: precedingLocation.last_column, + last_line: precedingLocation.last_line, + last_column: precedingLocation.last_column + }) + }; + } + if (parser.isInSubquery()) { + location.subquery = true; + } + parser.yy.locations.push(location) + }; + + parser.addStatementTypeLocation = function (identifier, location, additionalText) { + if (!parser.isImpala()) { + return; + } + var loc = { + type: 'statementType', + location: adjustLocationForCursor(location), + identifier: identifier + }; + if (typeof additionalText !== 'undefined') { + switch (identifier) { + case 'ALTER': + if (/ALTER\s+VIEW/i.test(additionalText)) { + loc.identifier = 'ALTER VIEW'; + } else { + loc.identifier = 'ALTER TABLE'; + } + break; + case 'COMPUTE': + loc.identifier = 'COMPUTE STATS'; + break; + case 'CREATE': + if (/CREATE\s+VIEW/i.test(additionalText)) { + loc.identifier = 'CREATE VIEW'; + } else if (/CREATE\s+TABLE/i.test(additionalText)) { + loc.identifier = 'CREATE TABLE'; + } else if (/CREATE\s+DATABASE/i.test(additionalText)) { + loc.identifier = 'CREATE DATABASE'; + } else if (/CREATE\s+ROLE/i.test(additionalText)) { + loc.identifier = 'CREATE ROLE'; + } else if (/CREATE\s+FUNCTION/i.test(additionalText)) { + loc.identifier = 'CREATE FUNCTION'; + } else { + loc.identifier = 'CREATE TABLE'; + } + break; + case 'DROP': + if (/DROP\s+VIEW/i.test(additionalText)) { + loc.identifier = 'DROP VIEW'; + } else if (/DROP\s+TABLE/i.test(additionalText)) { + loc.identifier = 'DROP TABLE'; + } else if (/DROP\s+DATABASE/i.test(additionalText)) { + loc.identifier = 'DROP DATABASE'; + } else if (/DROP\s+ROLE/i.test(additionalText)) { + loc.identifier = 'DROP ROLE'; + } else if (/DROP\s+STATS/i.test(additionalText)) { + loc.identifier = 'DROP STATS'; + } else if (/DROP\s+FUNCTION/i.test(additionalText)) { + loc.identifier = 'DROP FUNCTION'; + } else { + loc.identifier = 'DROP TABLE'; + } + break; + case 'INVALIDATE': + loc.identifier = 'INVALIDATE METADATA'; + break; + case 'LOAD': + loc.identifier = 'LOAD DATA'; + break; + case 'TRUNCATE': + loc.identifier = 'TRUNCATE TABLE'; + break; + default: + } + } + parser.yy.locations.push(loc); + }; + + parser.addFileLocation = function (location, path) { + parser.yy.locations.push({ + type: 'file', + location: adjustLocationForCursor(location), + path: path + }); + }; + + parser.addDatabaseLocation = function (location, identifierChain) { + parser.yy.locations.push({ + type: 'database', + location: adjustLocationForCursor(location), + identifierChain: identifierChain + }); + }; + + parser.addTableLocation = function (location, identifierChain) { + parser.yy.locations.push({ + type: 'table', + location: adjustLocationForCursor(location), + identifierChain: identifierChain + }); + }; + + parser.addColumnAliasLocation = function (location, alias, parentLocation) { + var aliasLocation = { + type: 'alias', + source: 'column', + alias: alias, + location: adjustLocationForCursor(location), + parentLocation: adjustLocationForCursor(parentLocation) + }; + if (parser.yy.locations.length && parser.yy.locations[parser.yy.locations.length - 1].type === 'column') { + var closestColumn = parser.yy.locations[parser.yy.locations.length - 1]; + if (closestColumn.location.first_line === aliasLocation.parentLocation.first_line && + closestColumn.location.last_line === aliasLocation.parentLocation.last_line && + closestColumn.location.first_column === aliasLocation.parentLocation.first_column && + closestColumn.location.last_column === aliasLocation.parentLocation.last_column) { + parser.yy.locations[parser.yy.locations.length - 1].alias = alias; + } + } + parser.yy.locations.push(aliasLocation); + }; + + parser.addTableAliasLocation = function (location, alias, identifierChain) { + parser.yy.locations.push({ + type: 'alias', + source: 'table', + alias: alias, + location: adjustLocationForCursor(location), + identifierChain: identifierChain + }); + }; + + parser.addSubqueryAliasLocation = function (location, alias) { + parser.yy.locations.push({ + type: 'alias', + source: 'subquery', + alias: alias, + location: adjustLocationForCursor(location) + }); + }; + + parser.addAsteriskLocation = function (location, identifierChain) { + parser.yy.locations.push({ + type: 'asterisk', + location: adjustLocationForCursor(location), + identifierChain: identifierChain + }); + }; + + parser.addVariableLocation = function (location, value) { + if (/\$\{[^}]*\}/.test(value)) { + parser.yy.locations.push({ + type: 'variable', + location: adjustLocationForCursor(location), + value: value + }); + } + }; + + parser.addColumnLocation = function (location, identifierChain) { + var isVariable = identifierChain.length && /\$\{[^}]*\}/.test(identifierChain[identifierChain.length - 1].name); + if (isVariable) { + parser.yy.locations.push({ + type: 'variable', + location: adjustLocationForCursor(location), + value: identifierChain[identifierChain.length - 1].name + }); + } else { + parser.yy.locations.push({ + type: 'column', + location: adjustLocationForCursor(location), + identifierChain: identifierChain, + qualified: identifierChain.length > 1 + }); + } + }; + + parser.addCteAliasLocation = function (location, alias) { + parser.yy.locations.push({ + type: 'alias', + source: 'cte', + alias: alias, + location: adjustLocationForCursor(location) + }); + }; + + parser.addUnknownLocation = function (location, identifierChain) { + var isVariable = identifierChain.length && /\$\{[^}]*\}/.test(identifierChain[identifierChain.length - 1].name); + var loc; + if (isVariable) { + loc = { + type: 'variable', + location: adjustLocationForCursor(location), + value: identifierChain[identifierChain.length - 1].name + }; + } else { + loc = { + type: 'unknown', + location: adjustLocationForCursor(location), + identifierChain: identifierChain, + qualified: identifierChain.length > 1 + }; + } + parser.yy.locations.push(loc); + return loc; + }; + + parser.addColRefToVariableIfExists = function (left, right) { + if (left && left.columnReference && left.columnReference.length && right && right.columnReference && right.columnReference.length && parser.yy.locations.length > 1) { + var addColRefToVariableLocation = function (variableValue, colRef) { + // See if colref is actually an alias + if (colRef.length === 1 && colRef[0].name) { + parser.yy.locations.some(function (location) { + if (location.type === 'column' && location.alias === colRef[0].name) { + colRef = location.identifierChain; + return true; + } + }); + } + + for (var i = parser.yy.locations.length - 1; i > 0; i--) { + var location = parser.yy.locations[i]; + if (location.type === 'variable' && location.value === variableValue) { + location.colRef = { identifierChain: colRef }; + break; + } + } + }; + + if (/\$\{[^}]*\}/.test(left.columnReference[0].name)) { + // left is variable + addColRefToVariableLocation(left.columnReference[0].name, right.columnReference); + } else if (/\$\{[^}]*\}/.test(right.columnReference[0].name)) { + // right is variable + addColRefToVariableLocation(right.columnReference[0].name, left.columnReference); + } + } + }; + + parser.suggestDatabases = function (details) { + parser.yy.result.suggestDatabases = details || {}; + }; + + parser.suggestHdfs = function (details) { + parser.yy.result.suggestHdfs = details || {}; + }; + + parser.suggestValues = function (details) { + parser.yy.result.suggestValues = details || {}; + }; + + parser.determineCase = function (text) { + if (!parser.yy.caseDetermined) { + parser.yy.lowerCase = text.toLowerCase() === text; + parser.yy.caseDetermined = true; + } + }; + + parser.handleQuotedValueWithCursor = function (lexer, yytext, yylloc, quoteChar) { + if (yytext.indexOf('\u2020') !== -1 || yytext.indexOf('\u2021') !== -1) { + parser.yy.partialCursor = yytext.indexOf('\u2021') !== -1; + var cursorIndex = parser.yy.partialCursor ? yytext.indexOf('\u2021') : yytext.indexOf('\u2020'); + parser.yy.cursorFound = { + first_line: yylloc.first_line, + last_line: yylloc.last_line, + first_column: yylloc.first_column + cursorIndex, + last_column: yylloc.first_column + cursorIndex + 1 + }; + var remainder = yytext.substring(cursorIndex + 1); + var remainingQuotes = (lexer.upcomingInput().match(new RegExp(quoteChar, 'g')) || []).length; + if (remainingQuotes > 0 && remainingQuotes & 1 != 0) { + parser.yy.missingEndQuote = false; + lexer.input(); + } else { + parser.yy.missingEndQuote = true; + lexer.unput(remainder); + } + lexer.popState(); + return true; + } + return false; + }; + + var lexerModified = false; + + /** + * Main parser function + */ + parser.parseSql = function (beforeCursor, afterCursor, dialect, debug) { + // Jison counts CRLF as two lines in the locations + beforeCursor = beforeCursor.replace(/\r\n|\n\r/gm, '\n'); + afterCursor = afterCursor.replace(/\r\n|\n\r/gm, '\n'); + parser.yy.result = {locations: []}; + parser.yy.lowerCase = false; + parser.yy.locations = []; + parser.yy.allLocations = []; + parser.yy.subQueries = []; + parser.yy.errors = []; + parser.yy.selectListAliases = []; + + parser.yy.locationsStack = []; + parser.yy.primariesStack = []; + parser.yy.lateralViewsStack = []; + parser.yy.subQueriesStack = []; + parser.yy.resultStack = []; + parser.yy.selectListAliasesStack = []; + + delete parser.yy.caseDetermined; + delete parser.yy.cursorFound; + delete parser.yy.partialCursor; + + parser.prepareNewStatement(); + + var REASONABLE_SURROUNDING_LENGTH = 150000; // About 3000 lines before and after + + if (beforeCursor.length > REASONABLE_SURROUNDING_LENGTH) { + if ((beforeCursor.length - beforeCursor.lastIndexOf(';')) > REASONABLE_SURROUNDING_LENGTH) { + // Bail out if the last complete statement is more than 150000 chars before + return {}; + } + // Cut it at the first statement found within 150000 chars before + var lastReasonableChunk = beforeCursor.substring(beforeCursor.length - REASONABLE_SURROUNDING_LENGTH); + beforeCursor = lastReasonableChunk.substring(lastReasonableChunk.indexOf(';') + 1); + } + + if (afterCursor.length > REASONABLE_SURROUNDING_LENGTH) { + if ((afterCursor.length - afterCursor.indexOf(';')) > REASONABLE_SURROUNDING_LENGTH) { + // No need to bail out for what's comes after, we can still get keyword completion + afterCursor = ''; + } else { + // Cut it at the last statement found within 150000 chars after + var firstReasonableChunk = afterCursor.substring(0, REASONABLE_SURROUNDING_LENGTH); + afterCursor = firstReasonableChunk.substring(0, firstReasonableChunk.lastIndexOf(';')); + } + } + + parser.yy.partialLengths = parser.identifyPartials(beforeCursor, afterCursor); + + if (parser.yy.partialLengths.left > 0) { + beforeCursor = beforeCursor.substring(0, beforeCursor.length - parser.yy.partialLengths.left); + } + + if (parser.yy.partialLengths.right > 0) { + afterCursor = afterCursor.substring(parser.yy.partialLengths.right); + } + + parser.yy.activeDialect = (dialect !== 'hive' && dialect !== 'impala') ? undefined : dialect; + + // Hack to set the inital state of the lexer without first having to hit a token + // has to be done as the first token found can be dependant on dialect + if (!lexerModified) { + var originalSetInput = parser.lexer.setInput; + parser.lexer.setInput = function (input, yy) { + var lexer = originalSetInput.bind(parser.lexer)(input, yy); + if (typeof parser.yy.activeDialect !== 'undefined') { + lexer.begin(parser.yy.activeDialect); + } + return lexer; + }; + lexerModified = true; + } + + var result; + try { + // Add |CURSOR| or |PARTIAL_CURSOR| to represent the different cursor states in the lexer + result = parser.parse(beforeCursor + (beforeCursor.length == 0 || /[\s\(]$$/.test(beforeCursor) ? ' \u2020 ' : '\u2021') + afterCursor); + } catch (err) { + // On any error try to at least return any existing result + if (typeof parser.yy.result === 'undefined') { + throw err; + } + if (debug) { + console.log(err); + console.error(err.stack); + } + result = parser.yy.result; + } + if (parser.yy.errors.length > 0) { + parser.yy.result.errors = parser.yy.errors; + if (debug) { + console.log(parser.yy.errors); + } + } + try { + linkTablePrimaries(); + parser.commitLocations(); + // Clean up and prioritize + prioritizeSuggestions(); + } catch (err) { + if (debug) { + console.log(err); + console.error(err.stack); + } + } + + + parser.yy.allLocations.sort(function (a, b) { + if (a.location.first_line !== b.location.first_line) { + return a.location.first_line - b.location.first_line; + } + if (a.location.first_column !== b.location.first_column) { + return a.location.first_column - b.location.first_column; + } + if (a.location.last_column !== b.location.last_column) { + return b.location.last_column - a.location.last_column; + } + return b.type.localeCompare(a.type); + }); + parser.yy.result.locations = parser.yy.allLocations; + + parser.yy.result.locations.forEach(function (location) { + delete location.linked; + }); + if (typeof parser.yy.result.suggestColumns !== 'undefined') { + delete parser.yy.result.suggestColumns.linked; + } + + SIMPLE_TABLE_REF_SUGGESTIONS.forEach(function (suggestionType) { + if (typeof parser.yy.result[suggestionType] !== 'undefined') { + delete parser.yy.result[suggestionType].linked; + } + }); + + if (typeof parser.yy.result.colRef !== 'undefined') { + delete parser.yy.result.colRef.linked; + } + if (typeof parser.yy.result.suggestKeyValues !== 'undefined') { + delete parser.yy.result.suggestKeyValues.linked; + } + + if (typeof result.error !== 'undefined' && typeof result.error.expected !== 'undefined') { + // Remove any expected tokens from other dialects, jison doesn't remove tokens from other lexer states. + var actualExpected = {}; + result.error.expected.forEach(function (expected) { + var match = expected.match(/\<([a-z]+)\>(.*)/); + if (match !== null) { + if (typeof parser.yy.activeDialect !== 'undefined' && parser.yy.activeDialect === match[1]) { + actualExpected[("'" + match[2])] = true; + } + } else if (expected.indexOf('CURSOR') == -1) { + actualExpected[expected] = true; + } + }); + result.error.expected = Object.keys(actualExpected); + } + + if (typeof result.error !== 'undefined' && result.error.recoverable) { + delete result.error; + } + + // Adjust all the statement locations to include white space surrounding them + var lastStatementLocation = null; + result.locations.forEach(function (location) { + if (location.type === 'statement') { + if (lastStatementLocation === null) { + location.location.first_line = 1; + location.location.first_column = 1; + } else { + location.location.first_line = lastStatementLocation.location.last_line; + location.location.first_column = lastStatementLocation.location.last_column + 1; + } + lastStatementLocation = location; + } + }); + + return result; + }; + }; + + var SYNTAX_PARSER_NOOP_FUNCTIONS = ['prepareNewStatement', 'addCommonTableExpressions', 'pushQueryState', 'popQueryState', 'suggestSelectListAliases', + 'suggestValueExpressionKeywords', 'getSelectListKeywords', 'getValueExpressionKeywords', 'addColRefIfExists', 'selectListNoTableSuggest', 'suggestJoinConditions', + 'suggestJoins', 'valueExpressionSuggest', 'applyTypeToSuggestions', 'applyArgumentTypesToSuggestions', 'commitLocations', 'identifyPartials', + 'getSubQuery', 'addTablePrimary', 'suggestFileFormats', 'suggestDdlAndDmlKeywords', 'checkForSelectListKeywords', 'checkForKeywords', + 'suggestKeywords', 'suggestColRefKeywords', 'suggestTablesOrColumns', 'suggestFunctions', 'suggestAggregateFunctions', 'suggestAnalyticFunctions', + 'suggestColumns', 'suggestGroupBys', 'suggestIdentifiers', 'suggestOrderBys', 'suggestFilters', 'suggestKeyValues', 'suggestTables', 'addFunctionLocation', + 'addStatementLocation', 'firstDefined', 'addClauseLocation', 'addStatementTypeLocation', 'addFileLocation', 'addDatabaseLocation', 'addColumnAliasLocation', + 'addTableAliasLocation', 'addSubqueryAliasLocation', 'addTableLocation', 'addAsteriskLocation', 'addVariableLocation', 'addColumnLocation', 'addCteAliasLocation', + 'addUnknownLocation', 'addColRefToVariableIfExists', 'suggestDatabases', 'suggestHdfs', 'suggestValues']; + + var SYNTAX_PARSER_NOOP = function () {}; + + var initSyntaxParser = function (parser) { + + // Noop functions for compatibility with the autocomplete parser as the grammar is shared + SYNTAX_PARSER_NOOP_FUNCTIONS.forEach(function (noopFn) { + parser[noopFn] = SYNTAX_PARSER_NOOP + }); + + parser.yy.locations = [{}]; + + parser.determineCase = function (text) { + if (!parser.yy.caseDetermined) { + parser.yy.lowerCase = text.toLowerCase() === text; + parser.yy.caseDetermined = true; + } + }; + + parser.getKeywordsForOptionalsLR = function () { + return []; + }; + + parser.mergeSuggestKeywords = function () { + return {}; + }; + + parser.getTypeKeywords = function () { + return []; + }; + + parser.getColumnDataTypeKeywords = function () { + return []; + }; + + parser.findCaseType = function () { + return {types: ['T']}; + }; + + parser.findReturnTypes = function (functionName) { + return ['T']; + }; + + parser.isHive = function () { + return parser.yy.activeDialect === 'hive'; + }; + + parser.isImpala = function () { + return parser.yy.activeDialect === 'impala'; + }; + + parser.expandImpalaIdentifierChain = function () { + return []; + }; + + parser.expandIdentifierChain = function () { + return []; + }; + + parser.expandLateralViews = function () { + return []; + }; + + parser.createWeightedKeywords = function () { + return []; + }; + + parser.handleQuotedValueWithCursor = function (lexer, yytext, yylloc, quoteChar) { + if (yytext.indexOf('\u2020') !== -1 || yytext.indexOf('\u2021') !== -1) { + parser.yy.partialCursor = yytext.indexOf('\u2021') !== -1; + var cursorIndex = parser.yy.partialCursor ? yytext.indexOf('\u2021') : yytext.indexOf('\u2020'); + parser.yy.cursorFound = { + first_line: yylloc.first_line, + last_line: yylloc.last_line, + first_column: yylloc.first_column + cursorIndex, + last_column: yylloc.first_column + cursorIndex + 1 + }; + var remainder = yytext.substring(cursorIndex + 1); + var remainingQuotes = (lexer.upcomingInput().match(new RegExp(quoteChar, 'g')) || []).length; + if (remainingQuotes > 0 && remainingQuotes & 1 != 0) { + parser.yy.missingEndQuote = false; + lexer.input(); + } else { + parser.yy.missingEndQuote = true; + lexer.unput(remainder); + } + lexer.popState(); + return true; + } + return false; + }; + + var lexerModified = false; + + parser.yy.parseError = function (str, hash) { + parser.yy.error = hash; + }; + + var IGNORED_EXPECTED = { + ';': true, + '.': true, + 'EOF': true, + 'UNSIGNED_INTEGER': true, + 'UNSIGNED_INTEGER_E': true, + 'REGULAR_IDENTIFIER': true, // TODO: Indicate that an identifier was expected + 'CURSOR': true, + 'PARTIAL_CURSOR': true, + 'HDFS_START_QUOTE': true, + 'HDFS_PATH': true, + 'HDFS_END_QUOTE' : true, + 'COMPARISON_OPERATOR': true, // TODO: Expand in results when found + 'ARITHMETIC_OPERATOR' : true, // TODO: Expand in results when found + 'VARIABLE_REFERENCE': true, + 'BACKTICK': true, + 'VALUE': true, + 'PARTIAL_VALUE': true, + 'SINGLE_QUOTE': true, + 'DOUBLE_QUOTE': true + }; + + var CLEAN_EXPECTED = { + 'BETWEEN_AND': 'AND', + 'OVERWRITE_DIRECTORY' : 'OVERWRITE', + 'STORED_AS_DIRECTORIES' : 'STORED', + 'LIKE_PARQUET' : 'LIKE', + 'PARTITION_VALUE' : 'PARTITION' + }; + + parser.parseSyntax = function (beforeCursor, afterCursor, dialect, debug) { + parser.yy.caseDetermined = false; + parser.yy.error = undefined; + + parser.yy.latestTablePrimaries = []; + parser.yy.subQueries = []; + parser.yy.selectListAliases = []; + parser.yy.latestTablePrimaries = []; + + parser.yy.activeDialect = (dialect !== 'hive' && dialect !== 'impala') ? undefined : dialect; + + // Hack to set the inital state of the lexer without first having to hit a token + // has to be done as the first token found can be dependant on dialect + if (!lexerModified) { + var originalSetInput = parser.lexer.setInput; + parser.lexer.setInput = function (input, yy) { + var lexer = originalSetInput.bind(parser.lexer)(input, yy); + if (typeof parser.yy.activeDialect !== 'undefined') { + lexer.begin(parser.yy.activeDialect); + } + return lexer; + }; + lexerModified = true; + } + + // TODO: Find a way around throwing an exception when the parser finds a syntax error + try { + parser.yy.error = false; + parser.parse(beforeCursor + afterCursor); + } catch (err) { + if (debug) { + console.log(err); + console.error(err.stack); + console.log(parser.yy.error); + } + } + + if (parser.yy.error && (parser.yy.error.loc.last_column < beforeCursor.length || !beforeCursor.endsWith(parser.yy.error.text))) { + var weightedExpected = []; + + var addedExpected = {}; + + var isLowerCase = parser.yy.caseDetermined && parser.yy.lowerCase || parser.yy.error.text.toLowerCase() === parser.yy.error.text; + + if (parser.yy.error.expected.length == 2 && parser.yy.error.expected.indexOf('\';\'') !== -1 && parser.yy.error.expected.indexOf('\'EOF\'') !== -1) { + parser.yy.error.expected = []; + parser.yy.error.expectedStatementEnd = true; + return parser.yy.error; + } + for (var i = 0; i < parser.yy.error.expected.length; i++) { + var expected = parser.yy.error.expected[i]; + // Strip away the surrounding ' chars + expected = expected.substring(1, expected.length - 1); + // TODO: Only suggest alphanumeric? + if (!IGNORED_EXPECTED[expected] && /[a-z_]+/i.test(expected)) { + if (dialect && expected.indexOf('<' + dialect + '>') == 0) { + expected = expected.substring(dialect.length + 2); + } else if (/^<[a-z]+>/.test(expected)) { + continue; + } + expected = CLEAN_EXPECTED[expected] || expected; + if (expected === parser.yy.error.text.toUpperCase()) { + // Can happen when the lexer entry for a rule contains multiple words like 'stored' in 'stored as parquet' + return false; + } + var text = isLowerCase ? expected.toLowerCase() : expected; + if (text && !addedExpected[text]) { + addedExpected[text] = true; + weightedExpected.push({ + text: text, + distance: stringDistance(parser.yy.error.text, text, true) + }); + } + } + } + if (weightedExpected.length === 0) { + parser.yy.error.expected = []; + parser.yy.error.incompleteStatement = true; + return parser.yy.error; + } + weightedExpected.sort(function (a, b) { + if (a.distance === b.distance) { + return a.text.localeCompare(b.text); + } + return a.distance - b.distance + }); + parser.yy.error.expected = weightedExpected; + parser.yy.error.incompleteStatement = true; + return parser.yy.error; + } else if (parser.yy.error) { + parser.yy.error.expected = []; + parser.yy.error.incompleteStatement = true; + return parser.yy.error; + } + return false; + } + }; + + var initGlobalSearchParser = function (parser) { + + parser.identifyPartials = function (beforeCursor, afterCursor) { + var beforeMatch = beforeCursor.match(/[0-9a-zA-Z_]*$/); + var afterMatch = afterCursor.match(/^[0-9a-zA-Z_]*(?:\((?:[^)]*\))?)?/); + return {left: beforeMatch ? beforeMatch[0].length : 0, right: afterMatch ? afterMatch[0].length : 0}; + }; + + parser.mergeFacets = function (a, b) { + if (!a.facets) { + a.facets = {}; + } + if (!b.facets) { + return; + } + Object.keys(b.facets).forEach(function (key) { + if (a.facets[key]) { + Object.keys(b.facets[key]).forEach(function (val) { + a.facets[key][val.toLowerCase()] = true; + }); + } else { + a.facets[key] = b.facets[key]; + } + }); + }; + + parser.mergeText = function (a, b) { + if (!a.text) { + a.text = []; + } + if (!b.text) { + return; + } + a.text = a.text.concat(b.text); + }; + + parser.handleQuotedValueWithCursor = function (lexer, yytext, yylloc, quoteChar) { + if (yytext.indexOf('\u2020') !== -1 || yytext.indexOf('\u2021') !== -1) { + var cursorIndex = yytext.indexOf('\u2020'); + parser.yy.cursorFound = { + first_line: yylloc.first_line, + last_line: yylloc.last_line, + first_column: yylloc.first_column + cursorIndex, + last_column: yylloc.first_column + cursorIndex + 1 + }; + var remainder = yytext.substring(cursorIndex + 1); + var remainingQuotes = (lexer.upcomingInput().match(new RegExp(quoteChar, 'g')) || []).length; + if (remainingQuotes > 0 && remainingQuotes & 1 != 0) { + parser.yy.missingEndQuote = false; + lexer.input(); + } else { + parser.yy.missingEndQuote = true; + lexer.unput(remainder); + } + lexer.popState(); + return true; + } + return false; + }; + + parser.parseGlobalSearch = function (beforeCursor, afterCursor, debug) { + delete parser.yy.cursorFound; + + var result; + try { + result = parser.parse(beforeCursor + '\u2020' + afterCursor); + } catch (err) { + if (debug) { + console.log(err); + console.error(err.stack); + console.log(parser.yy.error); + } + return { + facets: {}, + text: [] + } + } + return result; + }; + }; + + return { + initSqlParser: initSqlParser, + initSyntaxParser: initSyntaxParser, + stringDistance: stringDistance, + initGlobalSearchParser: initGlobalSearchParser + }; +})(); +/* parser generated by jison 0.4.18 */ +/* + Returns a Parser object of the following structure: + + Parser: { + yy: {} + } + + Parser.prototype: { + yy: {}, + trace: function(), + symbols_: {associative list: name ==> number}, + terminals_: {associative list: number ==> name}, + productions_: [...], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$), + table: [...], + defaultActions: {...}, + parseError: function(str, hash), + parse: function(input), + + lexer: { + EOF: 1, + parseError: function(str, hash), + setInput: function(input), + input: function(), + unput: function(str), + more: function(), + less: function(n), + pastInput: function(), + upcomingInput: function(), + showPosition: function(), + test_match: function(regex_match_array, rule_index), + next: function(), + lex: function(), + begin: function(condition), + popState: function(), + _currentRules: function(), + topState: function(), + pushState: function(condition), + + options: { + ranges: boolean (optional: true ==> token location info will include a .range[] member) + flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match) + backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code) + }, + + performAction: function(yy, yy_, $avoiding_name_collisions, YY_START), + rules: [...], + conditions: {associative list: name ==> set}, + } + } + + + token location info (@$, _$, etc.): { + first_line: n, + last_line: n, + first_column: n, + last_column: n, + range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) + } + + + the parseError function receives a 'hash' object with these members for lexer and parser errors: { + text: (matched text) + token: (the produced terminal token, if any) + line: (yylineno) + } + while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: { + loc: (yylloc) + expected: (string describing the set of expected tokens) + recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) + } +*/ +var sqlSyntaxParser = (function(){ +var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[6,10,25,29,57,58,73,78,79,96,112,130,144,162,182,219,308,340,353,439,440,441,453,569,570,576,759,814,857,919,920,922,1158,1182,1183,1184,1185,1187,1205,1220,1245,1246,1272,1308],$V1=[2,4],$V2=[6,10],$V3=[2,5],$V4=[1,64],$V5=[1,44],$V6=[1,33],$V7=[1,99],$V8=[1,129],$V9=[1,138],$Va=[1,108],$Vb=[1,109],$Vc=[1,135],$Vd=[1,122],$Ve=[1,66],$Vf=[1,34],$Vg=[1,65],$Vh=[1,92],$Vi=[1,136],$Vj=[1,69],$Vk=[1,102],$Vl=[1,131],$Vm=[1,132],$Vn=[1,133],$Vo=[1,110],$Vp=[1,103],$Vq=[1,104],$Vr=[1,101],$Vs=[1,119],$Vt=[1,105],$Vu=[1,116],$Vv=[1,45],$Vw=[1,46],$Vx=[1,47],$Vy=[1,91],$Vz=[1,125],$VA=[1,100],$VB=[1,142],$VC=[1,67],$VD=[1,68],$VE=[1,126],$VF=[1,141],$VG=[1,130],$VH=[1,98],$VI=[1,134],$VJ=[1,121],$VK=[6,10,400,949],$VL=[2,865],$VM=[1,151],$VN=[1,153],$VO=[1,156],$VP=[25,29,58,73,78,79,96,112,130,144,182,219,308,340,353,439,440,441,453,569,570,576,759,814,857,919,920,922,1158,1182,1183,1184,1185,1187,1205,1220,1245,1246,1272,1308],$VQ=[1,170],$VR=[1,171],$VS=[1,172],$VT=[1,173],$VU=[1,174],$VV=[1,175],$VW=[1,176],$VX=[1,177],$VY=[1,178],$VZ=[1,179],$V_=[1,180],$V$=[1,181],$V01=[1,182],$V11=[1,183],$V21=[1,184],$V31=[1,185],$V41=[1,186],$V51=[1,187],$V61=[1,188],$V71=[1,189],$V81=[1,190],$V91=[1,191],$Va1=[1,192],$Vb1=[1,193],$Vc1=[1,194],$Vd1=[1,195],$Ve1=[1,196],$Vf1=[1,197],$Vg1=[1,198],$Vh1=[1,199],$Vi1=[1,200],$Vj1=[1,201],$Vk1=[1,202],$Vl1=[1,203],$Vm1=[1,204],$Vn1=[1,205],$Vo1=[1,206],$Vp1=[1,207],$Vq1=[1,208],$Vr1=[1,209],$Vs1=[1,210],$Vt1=[1,211],$Vu1=[1,212],$Vv1=[1,213],$Vw1=[1,214],$Vx1=[1,215],$Vy1=[1,216],$Vz1=[1,217],$VA1=[1,218],$VB1=[1,219],$VC1=[1,220],$VD1=[1,221],$VE1=[1,222],$VF1=[1,223],$VG1=[1,224],$VH1=[1,225],$VI1=[1,226],$VJ1=[1,227],$VK1=[1,228],$VL1=[1,229],$VM1=[1,230],$VN1=[1,231],$VO1=[1,232],$VP1=[1,233],$VQ1=[1,234],$VR1=[1,235],$VS1=[1,236],$VT1=[1,237],$VU1=[1,238],$VV1=[1,239],$VW1=[1,240],$VX1=[1,241],$VY1=[1,242],$VZ1=[1,243],$V_1=[1,244],$V$1=[1,245],$V02=[1,246],$V12=[1,247],$V22=[1,248],$V32=[1,249],$V42=[1,250],$V52=[1,251],$V62=[1,252],$V72=[1,253],$V82=[1,254],$V92=[1,255],$Va2=[1,256],$Vb2=[1,257],$Vc2=[1,258],$Vd2=[1,259],$Ve2=[1,260],$Vf2=[1,261],$Vg2=[1,262],$Vh2=[1,263],$Vi2=[1,264],$Vj2=[1,265],$Vk2=[1,266],$Vl2=[1,267],$Vm2=[1,268],$Vn2=[1,269],$Vo2=[1,270],$Vp2=[1,271],$Vq2=[1,272],$Vr2=[1,273],$Vs2=[1,274],$Vt2=[1,275],$Vu2=[1,276],$Vv2=[1,277],$Vw2=[1,278],$Vx2=[1,279],$Vy2=[1,280],$Vz2=[1,281],$VA2=[1,282],$VB2=[1,283],$VC2=[1,284],$VD2=[1,285],$VE2=[1,286],$VF2=[1,287],$VG2=[1,288],$VH2=[1,289],$VI2=[1,290],$VJ2=[1,291],$VK2=[1,292],$VL2=[1,293],$VM2=[1,294],$VN2=[1,295],$VO2=[1,296],$VP2=[1,297],$VQ2=[1,298],$VR2=[1,299],$VS2=[1,300],$VT2=[1,301],$VU2=[1,302],$VV2=[1,167],$VW2=[1,168],$VX2=[1,166],$VY2=[1,323],$VZ2=[1,321],$V_2=[1,322],$V$2=[1,320],$V03=[1,318],$V13=[1,314],$V23=[1,317],$V33=[1,319],$V43=[1,316],$V53=[1,313],$V63=[1,315],$V73=[1,326],$V83=[1,328],$V93=[1,332],$Va3=[1,327],$Vb3=[1,329],$Vc3=[1,331],$Vd3=[1,330],$Ve3=[1,356],$Vf3=[25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,168,208,237,261,282,286,293,304,305,312,322,323,324,347,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,375,376,377,378,379,380,381,382,383,384,392,393,396,397,398,399,403,404,405,758,759,789],$Vg3=[2,900],$Vh3=[1,371],$Vi3=[1,372],$Vj3=[1,373],$Vk3=[25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,403],$Vl3=[1,384],$Vm3=[1,382],$Vn3=[1,383],$Vo3=[2,631],$Vp3=[1,387],$Vq3=[1,388],$Vr3=[1,396],$Vs3=[1,394],$Vt3=[1,395],$Vu3=[1,393],$Vv3=[1,397],$Vw3=[1,406],$Vx3=[1,433],$Vy3=[1,426],$Vz3=[1,422],$VA3=[1,421],$VB3=[1,432],$VC3=[1,431],$VD3=[1,438],$VE3=[1,436],$VF3=[1,435],$VG3=[1,439],$VH3=[1,434],$VI3=[1,407],$VJ3=[1,444],$VK3=[1,443],$VL3=[178,193,223,263,343],$VM3=[1,457],$VN3=[1,458],$VO3=[1,459],$VP3=[1,512],$VQ3=[1,513],$VR3=[25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160],$VS3=[1,519],$VT3=[1,522],$VU3=[1,523],$VV3=[44,217],$VW3=[105,121,132,146,156,178,181,193,197,202,211,223,230,263,297,338,343,1093],$VX3=[38,41,45,64,75,90,105,106,107,119,120,127,142,143,144,146,147,171,174,182,193,196,197,198,206,211,216,218,225,231,248,251,257,264,440,441],$VY3=[268,274,349,576],$VZ3=[6,10,348,400,949],$V_3=[2,663],$V$3=[6,10,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,167,170,176,184,188,204,207,213,232,243,245,259,265,266,267,268,270,274,275,276,287,295,308,309,310,311,312,314,318,319,321,323,325,326,327,329,331,334,336,339,340,348,349,352,353,395,399,400,403,446,453,544,576,652,659,758,814,825,857,895,897,899,949,1182],$V04=[1,551],$V14=[1,550],$V24=[1,549],$V34=[6,10,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,164,167,168,170,175,176,180,183,184,188,189,194,195,204,207,208,209,210,213,214,232,234,240,243,245,247,250,251,252,255,259,265,266,267,268,270,274,275,276,282,283,284,286,287,288,289,290,291,294,295,298,300,301,302,303,306,308,309,310,311,312,313,314,315,317,318,319,320,321,322,323,324,325,326,327,329,331,332,333,334,335,336,337,339,340,341,342,344,345,346,348,349,350,351,352,353,386,387,388,389,390,391,392,393,394,395,396,399,400,403,404,446,453,544,576,652,659,664,758,814,825,857,895,897,899,949,967,998,1182],$V44=[1,553],$V54=[1,552],$V64=[6,10,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,164,167,168,170,175,176,180,183,184,188,189,194,195,204,205,207,208,209,210,213,214,232,234,240,243,245,247,250,251,252,255,259,265,266,267,268,270,274,275,276,282,283,284,286,287,288,289,290,291,294,295,298,300,301,302,303,306,308,309,310,311,312,313,314,315,317,318,319,320,321,322,323,324,325,326,327,329,331,332,333,334,335,336,337,339,340,341,342,344,345,346,348,349,350,351,352,353,386,387,388,389,390,391,392,393,394,395,396,399,400,403,404,446,453,544,576,652,659,664,758,814,825,857,895,897,899,944,949,967,998,1182],$V74=[2,33],$V84=[2,111],$V94=[2,152],$Va4=[1,561],$Vb4=[1,563],$Vc4=[1,566],$Vd4=[1,565],$Ve4=[2,2766],$Vf4=[1,568],$Vg4=[308,325,395,825],$Vh4=[6,10,308,395,825],$Vi4=[2,692],$Vj4=[1,572],$Vk4=[308,325,395,399,825],$Vl4=[2,2805],$Vm4=[308,395],$Vn4=[208,282,388,396],$Vo4=[6,10,170,176,184,207,232,243,308,310,311,321,326,348,352,395,400,446,576,652,659,949,1182],$Vp4=[1,596],$Vq4=[1,597],$Vr4=[1,601],$Vs4=[1,598],$Vt4=[1,595],$Vu4=[1,602],$Vv4=[1,599],$Vw4=[1,603],$Vx4=[1,600],$Vy4=[6,10,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,167,170,176,184,207,232,243,265,266,267,287,295,308,309,310,311,314,318,319,321,325,326,327,334,339,348,352,395,400,403,446,576,652,659,949,1182],$Vz4=[6,10,170,176,184,207,232,243,265,266,267,295,308,309,310,311,314,318,319,321,325,326,327,334,339,348,352,395,400,446,576,652,659,949,1182],$VA4=[2,1371],$VB4=[353,576],$VC4=[2,1349],$VD4=[65,239],$VE4=[65,185,239],$VF4=[2,1453],$VG4=[6,10,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,164,188,329,340,399,403],$VH4=[25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,168,208,237,282,286,293,304,305,312,322,323,324,347,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,375,376,377,378,379,380,381,382,383,384,392,393,396,397,398,399,403,404,405,758,759,789],$VI4=[2,886],$VJ4=[1,622],$VK4=[25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,168,208,237,261,282,286,293,304,305,312,322,323,324,347,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,375,376,377,378,379,380,381,382,383,384,392,393,396,397,398,399,400,403,404,405,576,758,759,789],$VL4=[308,395,399,576,1182,1184,1220],$VM4=[2,623],$VN4=[1,627],$VO4=[6,10,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,164,312,403],$VP4=[25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,312,403],$VQ4=[188,251,329],$VR4=[2,656],$VS4=[2,1883],$VT4=[1,637],$VU4=[38,172,188,251,312,329,887],$VV4=[1,662],$VW4=[1,670],$VX4=[1,657],$VY4=[1,667],$VZ4=[1,665],$V_4=[1,669],$V$4=[1,671],$V05=[1,668],$V15=[1,666],$V25=[1,660],$V35=[1,661],$V45=[1,663],$V55=[2,653],$V65=[1,677],$V75=[1,681],$V85=[1,682],$V95=[2,1891],$Va5=[188,329],$Vb5=[82,83],$Vc5=[25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,403,848],$Vd5=[292,399],$Ve5=[38,887],$Vf5=[25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,168,175,212,241,252,269,271,272,278,290,291,294,298,300,306,315,341,342,345,346,350,353,399,403,576,1032],$Vg5=[193,263,343],$Vh5=[1,728],$Vi5=[1,729],$Vj5=[6,10,325],$Vk5=[6,10,320,404],$Vl5=[2,660],$Vm5=[1,756],$Vn5=[6,10,320],$Vo5=[193,263,343,1093],$Vp5=[6,10,313,320,404],$Vq5=[2,931],$Vr5=[1,766],$Vs5=[6,10,1182],$Vt5=[2,2962],$Vu5=[1,770],$Vv5=[1,774],$Vw5=[1,796],$Vx5=[1,805],$Vy5=[1,795],$Vz5=[1,785],$VA5=[1,783],$VB5=[1,824],$VC5=[1,794],$VD5=[1,797],$VE5=[1,779],$VF5=[1,790],$VG5=[1,823],$VH5=[1,826],$VI5=[1,813],$VJ5=[1,820],$VK5=[1,837],$VL5=[1,838],$VM5=[1,835],$VN5=[1,836],$VO5=[1,821],$VP5=[1,843],$VQ5=[1,846],$VR5=[1,847],$VS5=[1,827],$VT5=[1,828],$VU5=[1,829],$VV5=[1,830],$VW5=[1,831],$VX5=[1,833],$VY5=[1,840],$VZ5=[1,841],$V_5=[1,842],$V$5=[1,825],$V06=[1,815],$V16=[1,832],$V26=[1,839],$V36=[1,834],$V46=[1,844],$V56=[1,845],$V66=[1,812],$V76=[1,782],$V86=[1,781],$V96=[1,780],$Va6=[1,784],$Vb6=[1,798],$Vc6=[1,799],$Vd6=[1,814],$Ve6=[6,10,170,176,184,207,232,243,310,311,321,326,348,352,400,446,576,652,659,949,1182],$Vf6=[6,10,170,176,184,207,232,243,310,311,321,326,348,352,395,400,446,576,652,659,949,1182],$Vg6=[1,853],$Vh6=[2,2994],$Vi6=[1,856],$Vj6=[25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,263,403],$Vk6=[6,10,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,167,170,176,183,184,194,195,207,210,213,232,234,240,243,245,247,250,251,259,267,275,276,284,287,288,289,295,301,302,303,308,309,310,311,313,314,317,318,319,320,321,323,324,326,327,332,333,334,335,336,337,339,344,348,351,352,353,383,384,386,387,388,389,390,391,392,393,394,395,400,403,446,453,544,576,652,659,664,949,1182],$Vl6=[6,10,395],$Vm6=[6,10,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,167,170,176,183,184,194,195,207,210,213,232,234,240,243,245,247,250,251,259,267,275,276,284,287,288,289,295,301,302,303,308,309,310,311,313,314,317,318,319,320,321,323,324,326,327,332,333,334,335,336,337,339,344,348,351,352,353,386,387,388,389,390,391,392,393,394,395,400,403,446,453,544,576,652,659,664,949,1182],$Vn6=[2,1209],$Vo6=[1,869],$Vp6=[1,882],$Vq6=[1,880],$Vr6=[1,881],$Vs6=[1,892],$Vt6=[1,891],$Vu6=[1,890],$Vv6=[1,889],$Vw6=[1,907],$Vx6=[1,908],$Vy6=[1,906],$Vz6=[1,910],$VA6=[1,911],$VB6=[25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,399,403],$VC6=[2,1265],$VD6=[1,918],$VE6=[1,917],$VF6=[25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,274,280,399,403],$VG6=[6,10,170,176,184,207,232,243,266,267,295,308,309,310,311,314,318,319,321,325,326,327,334,339,348,352,395,400,446,576,652,659,949,1182],$VH6=[2,1341],$VI6=[1,939],$VJ6=[1,967],$VK6=[1,991],$VL6=[1,992],$VM6=[1,993],$VN6=[1,994],$VO6=[1,995],$VP6=[1,996],$VQ6=[1,997],$VR6=[1,998],$VS6=[1,999],$VT6=[1,1001],$VU6=[1,1002],$VV6=[1,1003],$VW6=[1,1004],$VX6=[1,1000],$VY6=[1,1006],$VZ6=[2,754],$V_6=[1,1011],$V$6=[31,66,84,88,94,108,123,212,241,269,271,272,278,1032],$V07=[6,10,353],$V17=[6,10,28,34,36,39,62,68,74,85,89,104,113,116,120,151,152,153,154,167,213,245,250,259,270,275,276,287,313,323,324,329,336,353,386,388,390,395,400,453,544,576,944,949],$V27=[2,1892],$V37=[1,1038],$V47=[6,10,36,39,74,89,113,116,120,167,213,245,259,270,275,276,287,320,329,336,353,399,453,544,949,967],$V57=[6,10,208],$V67=[6,10,170,176,207,243,311,321,326,348,400,652,659,949,1182],$V77=[6,10,170,176,207,232,243,310,311,321,326,348,400,446,652,659,949,1182],$V87=[116,275,353,576],$V97=[2,2953],$Va7=[1,1114],$Vb7=[1,1134],$Vc7=[1,1135],$Vd7=[1,1125],$Ve7=[1,1124],$Vf7=[1,1118],$Vg7=[1,1133],$Vh7=[1,1123],$Vi7=[1,1137],$Vj7=[1,1136],$Vk7=[1,1138],$Vl7=[1,1127],$Vm7=[1,1126],$Vn7=[1,1119],$Vo7=[1,1120],$Vp7=[1,1121],$Vq7=[1,1122],$Vr7=[1,1128],$Vs7=[1,1129],$Vt7=[1,1130],$Vu7=[6,10,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,167,170,176,183,184,194,195,207,210,232,234,240,243,247,251,267,284,287,288,289,295,301,302,303,308,309,310,311,313,314,317,318,319,320,321,323,326,327,332,333,334,335,337,339,344,348,351,352,353,386,387,388,389,390,391,392,393,394,395,400,403,446,576,652,659,664,949,1182],$Vv7=[1,1149],$Vw7=[6,10,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,167,170,176,183,184,194,195,207,210,232,234,240,243,247,250,251,267,284,287,288,289,295,301,302,303,308,309,310,311,313,314,317,318,319,320,321,323,324,326,327,332,333,334,335,337,339,344,348,351,352,353,386,387,388,389,390,391,392,393,394,395,400,403,446,453,576,652,659,664,949,1182],$Vx7=[1,1151],$Vy7=[6,10,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,167,170,176,183,184,194,195,207,210,232,234,240,243,247,250,251,267,284,287,288,289,295,301,302,303,308,309,310,311,313,314,317,318,319,320,321,323,324,326,327,332,333,334,335,337,339,344,348,351,352,353,386,387,388,389,390,391,392,393,394,395,399,400,403,446,453,576,652,659,664,949,1182],$Vz7=[1,1156],$VA7=[6,10,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,167,170,176,183,184,194,195,207,208,210,232,234,240,243,247,250,251,267,282,284,287,288,289,295,301,302,303,308,309,310,311,313,314,317,318,319,320,321,323,324,326,327,332,333,334,335,337,339,344,348,351,352,353,386,387,388,389,390,391,392,393,394,395,396,399,400,403,446,453,576,652,659,664,949,1182],$VB7=[6,10,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,167,170,176,183,184,194,195,207,210,232,234,240,243,247,250,251,267,284,287,288,289,295,301,302,303,308,309,310,311,313,314,317,318,319,320,321,323,324,326,327,328,332,333,334,335,337,339,344,348,351,352,353,386,387,388,389,390,391,392,393,394,395,400,403,446,453,576,652,659,664,949,1182],$VC7=[6,10,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,167,168,170,175,176,183,184,188,194,195,207,208,210,232,234,240,243,247,250,251,252,267,282,284,286,287,288,289,290,291,294,295,298,300,301,302,303,306,308,309,310,311,313,314,315,317,318,319,320,321,322,323,324,326,327,329,332,333,334,335,337,339,340,341,342,344,345,346,348,350,351,352,353,386,387,388,389,390,391,392,393,394,395,396,399,400,403,446,453,576,652,659,664,857,949,1182],$VD7=[1,1185],$VE7=[2,1210],$VF7=[1,1189],$VG7=[308,825],$VH7=[2,2833],$VI7=[1,1197],$VJ7=[1,1196],$VK7=[6,10,353,395],$VL7=[1,1203],$VM7=[6,10,243,321,348,395,400,652,659,949,1182],$VN7=[6,10,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,167,287,949],$VO7=[6,10,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,167,170,176,183,184,194,195,207,210,232,234,240,243,247,251,265,266,267,284,287,288,289,295,301,302,303,308,309,310,311,313,314,317,318,319,320,321,323,325,326,327,332,333,334,335,337,339,344,348,351,352,353,386,387,388,389,390,391,392,393,394,395,400,403,446,576,652,659,664,949,1182],$VP7=[6,10,352],$VQ7=[1,1246],$VR7=[6,10,308,351,352,395],$VS7=[39,388,395,400,453],$VT7=[1,1251],$VU7=[6,10,170,176,207,232,243,308,310,311,321,326,348,352,395,400,446,652,659,949,1182],$VV7=[6,10,188,208,282,329,396],$VW7=[6,10,188,213,329,544],$VX7=[2,743],$VY7=[1,1268],$VZ7=[1,1269],$V_7=[6,10,39,74,120,167,213,245,276,287,353,453,544,576,949],$V$7=[2,2387],$V08=[1,1284],$V18=[6,10,167,287,949],$V28=[1,1287],$V38=[6,10,93,395],$V48=[6,10,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,167,170,176,183,184,188,194,195,205,207,210,213,215,221,226,232,234,236,240,243,244,245,246,247,249,250,251,258,259,267,270,275,276,279,284,287,288,289,295,301,302,303,308,309,310,311,313,314,317,318,319,320,321,322,323,324,326,327,329,332,333,334,335,336,337,339,344,348,351,352,353,386,387,388,389,390,391,392,393,394,395,400,403,446,453,544,576,652,659,664,944,949,1182],$V58=[6,10,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,167,170,176,183,184,194,195,207,210,213,232,234,240,243,245,247,250,251,259,267,270,275,276,284,287,288,289,295,301,302,303,308,309,310,311,313,314,317,318,319,320,321,323,324,326,327,329,332,333,334,335,336,337,339,344,348,351,352,353,386,387,388,389,390,391,392,393,394,395,400,403,446,453,544,576,652,659,664,944,949,1182],$V68=[1,1304],$V78=[395,400],$V88=[2,648],$V98=[1,1313],$Va8=[1,1314],$Vb8=[2,2052],$Vc8=[1,1323],$Vd8=[1,1324],$Ve8=[39,120,167,287,453],$Vf8=[1,1334],$Vg8=[6,10,170,176,207,243,321,326,348,400,652,659,949,1182],$Vh8=[2,2329],$Vi8=[1,1382],$Vj8=[1,1383],$Vk8=[2,1223],$Vl8=[1,1388],$Vm8=[6,10,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,167,170,176,183,184,194,195,207,210,232,243,247,251,267,284,287,288,289,295,301,302,303,308,309,310,311,314,318,319,321,323,326,327,332,334,337,339,344,348,351,352,353,386,387,395,400,403,446,576,652,659,664,949,1182],$Vn8=[6,10,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,167,170,176,183,184,194,195,207,210,232,243,247,251,267,284,287,288,289,295,301,302,303,308,309,310,311,314,318,319,321,323,326,327,332,334,337,339,344,348,351,352,353,386,387,388,389,390,391,392,393,394,395,400,403,446,576,652,659,664,949,1182],$Vo8=[302,303,351],$Vp8=[1,1422],$Vq8=[1,1442],$Vr8=[1,1443],$Vs8=[25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,168,208,210,237,282,284,286,293,304,305,312,322,323,324,347,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,375,376,377,378,379,380,381,382,383,384,392,396,397,398,399,403,404,405,758,759,789],$Vt8=[25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,168,208,237,282,286,293,304,305,312,322,323,324,347,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,375,376,377,378,379,380,381,382,383,384,392,396,397,398,399,403,404,405,758,759,789],$Vu8=[1,1453],$Vv8=[326,395,400],$Vw8=[6,10,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,167,170,176,184,188,204,207,213,232,243,245,259,265,266,267,268,270,274,275,276,282,287,295,308,309,310,311,312,314,318,319,321,323,325,326,327,329,331,334,336,339,340,348,349,352,353,395,399,400,403,446,453,544,576,652,659,758,814,825,857,895,897,899,949,1182],$Vx8=[2,2827],$Vy8=[1,1463],$Vz8=[6,10,170,176,184,207,232,243,267,295,308,309,310,311,314,318,319,321,326,327,334,339,348,352,395,400,446,576,652,659,949,1182],$VA8=[2,1312],$VB8=[1,1480],$VC8=[1,1479],$VD8=[91,337],$VE8=[6,10,213,544],$VF8=[1,1517],$VG8=[6,10,74,120,167,213,245,276,287,544,949],$VH8=[2,2363],$VI8=[1,1532],$VJ8=[1,1533],$VK8=[6,10,34,104],$VL8=[1,1567],$VM8=[1,1570],$VN8=[1,1580],$VO8=[1,1575],$VP8=[1,1560],$VQ8=[1,1581],$VR8=[1,1576],$VS8=[1,1577],$VT8=[1,1568],$VU8=[1,1578],$VV8=[1,1563],$VW8=[1,1564],$VX8=[1,1572],$VY8=[1,1571],$VZ8=[1,1566],$V_8=[1,1565],$V$8=[1,1562],$V09=[1,1579],$V19=[1,1561],$V29=[1,1569],$V39=[1,1574],$V49=[1,1559],$V59=[1,1573],$V69=[404,405],$V79=[1,1614],$V89=[6,10,170,176,243,321,326,348,400,652,659,949,1182],$V99=[167,287],$Va9=[2,601],$Vb9=[1,1641],$Vc9=[1,1645],$Vd9=[1,1644],$Ve9=[6,10,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,167,170,176,183,184,194,195,207,210,232,243,247,251,267,284,287,288,289,295,301,302,303,308,309,310,311,314,318,319,321,323,326,327,332,334,337,339,344,348,351,352,353,386,387,388,389,390,391,395,400,403,446,576,652,659,664,949,1182],$Vf9=[6,10,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,167,170,176,183,184,194,195,207,210,232,243,247,251,267,284,287,288,295,301,302,303,308,309,310,311,314,318,319,321,326,327,332,334,337,339,344,348,351,352,353,386,387,395,400,403,446,576,652,659,664,949,1182],$Vg9=[326,400],$Vh9=[25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,168,286,312,322,758,759],$Vi9=[6,10,80,169],$Vj9=[2,747],$Vk9=[1,1705],$Vl9=[1,1710],$Vm9=[1,1711],$Vn9=[1,1712],$Vo9=[1,1709],$Vp9=[1,1720],$Vq9=[6,10,39,74,116,120,167,213,245,275,276,287,353,453,544,949],$Vr9=[2,2379],$Vs9=[1,1734],$Vt9=[1,1735],$Vu9=[1,1737],$Vv9=[1,1738],$Vw9=[122,277],$Vx9=[25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,208,282,305,324,347,383,384,392,396,404,405,685],$Vy9=[6,10,28,34,62,104,395,400],$Vz9=[1,1751],$VA9=[1,1749],$VB9=[1,1750],$VC9=[1,1748],$VD9=[1,1755],$VE9=[1,1752],$VF9=[1,1753],$VG9=[6,10,28,34,39,62,104,151,152,153,154,250,323,324,390,395,400,453],$VH9=[6,10,28,34,39,62,74,104,151,152,153,154,245,250,281,323,324,390,395,400,453],$VI9=[2,819],$VJ9=[1,1759],$VK9=[6,10,34,36,39,74,89,104,113,116,120,167,213,245,259,270,275,276,287,329,336,353,453,544,949],$VL9=[6,10,36,39,74,89,113,116,120,167,213,245,259,270,275,276,287,329,336,353,453,544,949],$VM9=[6,10,256],$VN9=[281,395,400],$VO9=[1,1805],$VP9=[1,1806],$VQ9=[1,1807],$VR9=[6,10,170,176,243,321,348,400,652,659,949,1182],$VS9=[1,1811],$VT9=[6,10,170,176,183,207,243,311,321,326,348,353,395,400,652,659,949,1182],$VU9=[6,10,37,39,72,74,116,120,167,213,244,245,275,276,287,322,324,353,453,544,576,949],$VV9=[6,10,351],$VW9=[6,10,80],$VX9=[208,282,305,347,349,383,384,396,404,405],$VY9=[6,10,28,34,39,62,104,151,152,153,154,250,323,324,395,400,453],$VZ9=[6,10,36,74,113,116,120,167,213,245,259,275,276,287,336,353,544,949],$V_9=[6,10,243,321,348,400,659,949,1182],$V$9=[1,1941],$V0a=[6,10,39,72,74,116,120,167,213,244,245,275,276,287,322,324,353,453,544,576,949],$V1a=[1,1966],$V2a=[1,1965],$V3a=[1,1973],$V4a=[390,395],$V5a=[6,10,74,113,116,120,167,213,245,275,276,287,336,353,544,949],$V6a=[2,991],$V7a=[1,2010],$V8a=[1,2012],$V9a=[1,2009],$Vaa=[1,2011],$Vba=[6,10,36,74,113,116,120,167,213,245,275,276,287,336,353,544,949],$Vca=[6,10,348,400,659,949,1182],$Vda=[6,10,39,72,74,116,120,167,213,244,245,275,276,287,324,353,453,544,576,949],$Vea=[289,780],$Vfa=[289,399,780],$Vga=[25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,167,403],$Vha=[6,10,170,176,243,247,251,321,332,337,348,395,400,652,659,949,1182],$Via=[6,10,39,68,74,116,120,245,275,276,313,336,453],$Vja=[6,10,348,400,949,1182],$Vka=[6,10,170,176,243,251,321,332,337,348,395,400,652,659,949,1182],$Vla=[2,952],$Vma=[1,2107],$Vna=[6,10,39,74,116,120,167,213,245,275,276,287,324,353,453,544,576,949],$Voa=[143,174,296,383,386,400,780],$Vpa=[2,1452],$Vqa=[6,10,74,116,120,167,213,245,275,276,287,336,353,544,949],$Vra=[6,10,39,74,116,120,245,275,276,313,336,453],$Vsa=[6,10,243,321,348,395,400,659,949,1182],$Vta=[1,2149],$Vua=[6,10,39,74,116,120,167,213,245,275,276,287,353,453,544,576,949],$Vva=[386,400],$Vwa=[2,1462],$Vxa=[1,2164],$Vya=[1,2163],$Vza=[1,2162],$VAa=[1,2160],$VBa=[1,2161],$VCa=[2,2317],$VDa=[1,2175],$VEa=[1,2174],$VFa=[6,10,39,74,116,120,245,275,276,336,453],$VGa=[6,10,215,226,236,258],$VHa=[1,2199],$VIa=[2,1472],$VJa=[307,330],$VKa=[6,10,400],$VLa=[6,10,39,74,120,167,213,245,276,287,353,453,544,949],$VMa=[1,2214],$VNa=[1,2215],$VOa=[6,10,226,236,258],$VPa=[49,109,220],$VQa=[6,10,226,236],$VRa=[2,2393],$VSa=[1,2260],$VTa=[1,2261],$VUa=[6,10,236],$VVa=[6,10,39,167,213,287,453,544,949],$VWa=[2,2280],$VXa=[2,2281],$VYa=[6,10,949]; +var parser = {trace: function trace() { }, +yy: {}, +symbols_: {"error":2,"SqlSyntax":3,"NewStatement":4,"SqlStatements":5,"EOF":6,"SqlAutocomplete":7,"SqlStatements_EDIT":8,"SqlStatement":9,";":10,"SqlStatement_EDIT":11,"DataDefinition":12,"DataManipulation":13,"QuerySpecification":14,"ExplainClause":15,"AnyCursor":16,"CommonTableExpression":17,"CURSOR":18,"ExplainClause_EDIT":19,"DataDefinition_EDIT":20,"DataManipulation_EDIT":21,"QuerySpecification_EDIT":22,"SetSpecification_EDIT":23,"NonReservedKeyword":24,"ABORT":25,"ADD":26,"ADMIN":27,"AFTER":28,"ANALYZE":29,"ARCHIVE":30,"AVRO":31,"BUCKET":32,"BUCKETS":33,"CASCADE":34,"CHANGE":35,"CLUSTERED":36,"COLLECTION":37,"COLUMNS":38,"COMMENT":39,"COMPACT":40,"COMPACTIONS":41,"COMPUTE":42,"CONCATENATE":43,"DATA":44,"DATABASES":45,"DBPROPERTIES":46,"DEFERRED":47,"DEFINED":48,"DELIMITED":49,"DEPENDENCY":50,"DIRECTORY":51,"DISABLE":52,"DOUBLE_PRECISION":53,"ENABLE":54,"ESCAPED":55,"EXCHANGE":56,"EXPLAIN":57,"EXPORT":58,"FIELDS":59,"FILE":60,"FILEFORMAT":61,"FIRST":62,"FORMAT":63,"FUNCTIONS":64,"INPATH":65,"INPUTFORMAT":66,"JAR":67,"IDXPROPERTIES":68,"ITEMS":69,"KEY":70,"KEYS":71,"LINES":72,"LOAD":73,"LOCATION":74,"LOCKS":75,"MATCHED":76,"METADATA":77,"MERGE":78,"MSCK":79,"NOSCAN":80,"NOVALIDATE":81,"NO_DROP":82,"OFFLINE":83,"ORC":84,"OUTPUTFORMAT":85,"OVERWRITE":86,"OWNER":87,"PARQUET":88,"PARTITIONED":89,"PARTITIONS":90,"PERCENT":91,"PRIVILEGES":92,"PURGE":93,"RCFILE":94,"REBUILD":95,"RELOAD":96,"RELY":97,"NORELY":98,"REPAIR":99,"REPLICATION":100,"RECOVER":101,"RENAME":102,"REPLACE":103,"RESTRICT":104,"ROLE":105,"ROLES":106,"SCHEMAS":107,"SEQUENCEFILE":108,"SERDE":109,"SERDEPROPERTIES":110,"SETS":111,"SHOW":112,"SKEWED":113,"SORTED":114,"STATISTICS":115,"STORED":116,"STRING":117,"STRUCT":118,"TABLES":119,"TBLPROPERTIES":120,"TEMPORARY":121,"TERMINATED":122,"TEXTFILE":123,"TIMESTAMP":124,"TINYINT":125,"TOUCH":126,"TRANSACTIONS":127,"UNARCHIVE":128,"UNIONTYPE":129,"USE":130,"USER":131,"VIEW":132,"WAIT":133,"DAY":134,"HOUR":135,"MINUTE":136,"MONTH":137,"QUARTER":138,"SECOND":139,"WEEK":140,"YEAR":141,"ANALYTIC":142,"CURRENT":143,"GRANT":144,"RECOVER":145,"ROLE":146,"ROLES":147,"URI":148,"SERVER":149,"UNKNOWN":150,"BLOCK_SIZE":151,"COMPRESSION":152,"DEFAULT":153,"ENCODING":154,"KEY":155,"ROLE":156,"OPTION":157,"RegularIdentifier":158,"REGULAR_IDENTIFIER":159,"VARIABLE_REFERENCE":160,"OptionalHiveExplainTypes":161,"EXPLAIN":162,"AUTHORIZATION":163,"EXTENDED":164,"NonStartingToken":165,"ALL":166,"AS":167,"BINARY":168,"CACHE":169,"CLUSTER":170,"CONF":171,"CONSTRAINT":172,"CUBE":173,"CURRENT":174,"DATE":175,"DISTRIBUTE":176,"DISTRIBUTED":177,"EXTERNAL":178,"FOR":179,"FOREIGN":180,"FUNCTION":181,"GRANT":182,"GROUPING":183,"LATERAL":184,"LOCAL":185,"LOCK":186,"MACRO":187,"PARTITION":188,"PRIMARY":189,"REFERENCES":190,"ROLLUP":191,"SHOW_DATABASE":192,"TABLE":193,"ASC":194,"DESC":195,"FORMATTED":196,"INDEX":197,"INDEXES":198,"NONE":199,"OF":200,"OUT":201,"SCHEMA":202,"STORED_AS_DIRECTORIES":203,"TABLESAMPLE":204,"USING":205,"VIEWS":206,"WINDOW":207,".":208,"[":209,"]":210,"AGGREGATE":211,"AVRO":212,"CACHED":213,"CASCADE":214,"CLOSE_FN":215,"COLUMN":216,"DATA":217,"DATABASES":218,"DELETE":219,"DELIMITED":220,"ESCAPED":221,"EXTENDED":222,"EXTERNAL":223,"FIELDS":224,"FILES":225,"FINALIZE_FN":226,"FIRST":227,"FORMAT":228,"FORMATTED":229,"FUNCTION":230,"FUNCTIONS":231,"GROUP":232,"HASH":233,"ILIKE":234,"INCREMENTAL":235,"INTERMEDIATE":236,"INTERVAL":237,"INIT_FN":238,"INPATH":239,"IREGEXP":240,"KUDU":241,"LAST":242,"LIMIT":243,"LINES":244,"LOCATION":245,"MERGE_FN":246,"NULLS":247,"PARTITIONS":248,"PREPARE_FN":249,"PRIMARY":250,"RANGE":251,"REAL":252,"REPEATABLE":253,"REPLICATION":254,"RESTRICT":255,"RETURNS":256,"SCHEMAS":257,"SERIALIZE_FN":258,"SORT":259,"STATS":260,"STRAIGHT_JOIN":261,"SYMBOL":262,"TABLE":263,"TABLES":264,"TABLESAMPLE":265,"USING":266,"ANTI":267,"NOSHUFFLE":268,"PARQUET":269,"PARTITIONED":270,"RCFILE":271,"SEQUENCEFILE":272,"SERDEPROPERTIES":273,"SHUFFLE":274,"STORED":275,"TBLPROPERTIES":276,"TERMINATED":277,"TEXTFILE":278,"UPDATE_FN":279,"BROADCAST":280,"...":281,".":282,"[":283,"]":284,"ALL":285,"ARRAY":286,"AS":287,"ASC":288,"BETWEEN":289,"BIGINT":290,"BOOLEAN":291,"BY":292,"CASE":293,"CHAR":294,"CROSS":295,"CURRENT":296,"DATABASE":297,"DECIMAL":298,"DISTINCT":299,"DOUBLE":300,"DESC":301,"ELSE":302,"END":303,"EXISTS":304,"FALSE":305,"FLOAT":306,"FOLLOWING":307,"FROM":308,"FULL":309,"GROUP":310,"HAVING":311,"IF":312,"IN":313,"INNER":314,"INT":315,"INTO":316,"IS":317,"JOIN":318,"LEFT":319,"LIKE":320,"LIMIT":321,"MAP":322,"NOT":323,"NULL":324,"ON":325,"ORDER":326,"OUTER":327,"OVER":328,"PARTITION":329,"PRECEDING":330,"PURGE":331,"RANGE":332,"REGEXP":333,"RIGHT":334,"RLIKE":335,"ROW":336,"ROWS":337,"SCHEMA":338,"SEMI":339,"SET":340,"SMALLINT":341,"STRING":342,"TABLE":343,"THEN":344,"TIMESTAMP":345,"TINYINT":346,"TRUE":347,"UNION":348,"VALUES":349,"VARCHAR":350,"WHEN":351,"WHERE":352,"WITH":353,"AVG":354,"CAST":355,"COUNT":356,"MAX":357,"MIN":358,"STDDEV_POP":359,"STDDEV_SAMP":360,"SUM":361,"VARIANCE":362,"VAR_POP":363,"VAR_SAMP":364,"COLLECT_SET":365,"COLLECT_LIST":366,"CORR":367,"COVAR_POP":368,"COVAR_SAMP":369,"DAYOFWEEK":370,"HISTOGRAM_NUMERIC":371,"NTILE":372,"PERCENTILE":373,"PERCENTILE_APPROX":374,"APPX_MEDIAN":375,"EXTRACT":376,"GROUP_CONCAT":377,"NDV":378,"STDDEV":379,"VARIANCE_POP":380,"VARIANCE_SAMP":381,"ANALYTIC":382,"UNSIGNED_INTEGER":383,"UNSIGNED_INTEGER_E":384,"HDFS_START_QUOTE":385,"AND":386,"OR":387,"=":388,"<":389,">":390,"COMPARISON_OPERATOR":391,"-":392,"*":393,"ARITHMETIC_OPERATOR":394,",":395,".":396,"~":397,"!":398,"(":399,")":400,"[":401,"]":402,"BACKTICK":403,"SINGLE_QUOTE":404,"DOUBLE_QUOTE":405,"DescribeStatement":406,"AlterStatement":407,"AnalyzeStatement":408,"RefreshStatement":409,"InvalidateStatement":410,"ComputeStatsStatement":411,"CreateStatement":412,"DropStatement":413,"HiveAbortStatement":414,"GrantStatement":415,"RevokeStatement":416,"SetRoleStatement":417,"SetSpecification":418,"ShowStatement":419,"UseStatement":420,"DescribeStatement_EDIT":421,"AlterStatement_EDIT":422,"AnalyzeStatement_EDIT":423,"RefreshStatement_EDIT":424,"InvalidateStatement_EDIT":425,"ComputeStatsStatement_EDIT":426,"CreateStatement_EDIT":427,"DropStatement_EDIT":428,"HiveAbortStatement_EDIT":429,"GrantStatement_EDIT":430,"RevokeStatement_EDIT":431,"SetRoleStatement_EDIT":432,"ShowStatement_EDIT":433,"UseStatement_EDIT":434,"AggregateOrAnalytic":435,"Commas":436,"AnyAs":437,"AnyCreate":438,"CREATE":439,"CREATE":440,"CREATE":441,"PARTIAL_CURSOR":442,"AnyDot":443,"AnyFromOrIn":444,"AnyGroup":445,"GROUP":446,"AnyPartition":447,"AnyTable":448,"DatabaseOrSchema":449,"FromOrIn":450,"HiveIndexOrIndexes":451,"HiveOrImpalaComment":452,"COMMENT":453,"HiveOrImpalaCreate":454,"HiveOrImpalaDatabasesOrSchemas":455,"HiveOrImpalaEscaped":456,"HiveOrImpalaFields":457,"HiveOrImpalaFormat":458,"HiveOrImpalaLeftSquareBracket":459,"HiveOrImpalaLines":460,"HiveOrImpalaLocation":461,"HiveOrImpalaRightSquareBracket":462,"HiveOrImpalaPartitioned":463,"HiveOrImpalaStored":464,"HiveOrImpalaTables":465,"HiveOrImpalaTblproperties":466,"HiveOrImpalaTerminated":467,"HiveRoleOrUser":468,"SingleQuotedValue":469,"VALUE":470,"SingleQuotedValue_EDIT":471,"PARTIAL_VALUE":472,"DoubleQuotedValue":473,"DoubleQuotedValue_EDIT":474,"QuotedValue":475,"QuotedValue_EDIT":476,"OptionalAggregateOrAnalytic":477,"OptionalHiveExtended":478,"OptionalHiveExtendedOrFormatted":479,"OptionalExternal":480,"OptionalImpalaExtendedOrFormatted":481,"OptionallyFormattedIndex":482,"OptionallyFormattedIndex_EDIT":483,"OptionalFromDatabase":484,"DatabaseIdentifier":485,"OptionalFromDatabase_EDIT":486,"DatabaseIdentifier_EDIT":487,"OptionalCascade":488,"OptionalCascadeOrRestrict":489,"OptionalHiveCascadeOrRestrict":490,"OptionalHiveTemporary":491,"OptionalIfExists":492,"OptionalIfExists_EDIT":493,"OptionalIfNotExists":494,"OptionalIfNotExists_EDIT":495,"OptionalInDatabase":496,"OptionalPartitionSpec":497,"PartitionSpec":498,"OptionalPartitionSpec_EDIT":499,"PartitionSpec_EDIT":500,"PartitionSpecList":501,"PartitionSpecList_EDIT":502,"RightParenthesisOrError":503,"RangePartitionSpec":504,"UnsignedValueSpecification":505,"RangePartitionComparisonOperator":506,"RangePartitionSpec_EDIT":507,"ConfigurationName":508,"PartialBacktickedOrAnyCursor":509,"PartialBacktickedIdentifier":510,"PartialBacktickedOrCursor":511,"PartialBacktickedOrPartialCursor":512,"OptionalParenthesizedColumnList":513,"ParenthesizedColumnList":514,"OptionalParenthesizedColumnList_EDIT":515,"ParenthesizedColumnList_EDIT":516,"ColumnList":517,"ColumnList_EDIT":518,"ColumnIdentifier":519,"ColumnIdentifier_EDIT":520,"ParenthesizedSimpleValueList":521,"SimpleValueList":522,"SchemaQualifiedTableIdentifier":523,"RegularOrBacktickedIdentifier":524,"ImpalaFields":525,"SchemaQualifiedTableIdentifier_EDIT":526,"ImpalaFields_EDIT":527,"ImpalaField":528,"ImpalaField_EDIT":529,"SchemaQualifiedIdentifier":530,"SchemaQualifiedIdentifier_EDIT":531,"PartitionExpression":532,"PartitionExpression_EDIT":533,"ValueExpression":534,"ValueExpression_EDIT":535,"OptionalHdfsLocation":536,"HdfsLocation":537,"HdfsPath":538,"HdfsLocation_EDIT":539,"HdfsPath_EDIT":540,"OptionalCachedInOrUncached":541,"CachedIn":542,"OptionalWithReplication":543,"UNCACHED":544,"OptionalCachedIn":545,"CachedIn_EDIT":546,"WithReplication":547,"SignedInteger":548,"WithReplication_EDIT":549,"RegularOrBackTickedSchemaQualifiedName":550,"RegularOrBackTickedSchemaQualifiedName_EDIT":551,"LocalOrSchemaQualifiedName":552,"LocalOrSchemaQualifiedName_EDIT":553,"ColumnReference":554,"BasicIdentifierChain":555,"ColumnReference_EDIT":556,"BasicIdentifierChain_EDIT":557,"DerivedColumnChain":558,"DerivedColumnChain_EDIT":559,"PartialBacktickedIdentifierOrPartialCursor":560,"HiveOrImpalaRightSquareBracketOrError":561,"PrimitiveType":562,"OptionalTypePrecision":563,"OptionalTypeLength":564,"HiveDescribeStatement":565,"ImpalaDescribeStatement":566,"HiveDescribeStatement_EDIT":567,"ImpalaDescribeStatement_EDIT":568,"DESCRIBE":569,"DESCRIBE":570,"SelectStatement":571,"OptionalUnions":572,"SelectStatement_EDIT":573,"OptionalUnions_EDIT":574,"CommonTableExpression_EDIT":575,"SELECT":576,"OptionalAllOrDistinct":577,"OptionalStraightJoin":578,"SelectList":579,"TableExpression":580,"Unions":581,"Unions_EDIT":582,"UnionClause":583,"UnionClause_EDIT":584,"SelectList_EDIT":585,"TableExpression_EDIT":586,"WithQueries":587,"WithQueries_EDIT":588,"WithQuery":589,"WithQuery_EDIT":590,"TableSubQueryInner":591,"TableSubQueryInner_EDIT":592,"FromClause":593,"OptionalSelectConditions":594,"FromClause_EDIT":595,"OptionalJoins":596,"OptionalSelectConditions_EDIT":597,"Joins":598,"Joins_INVALID":599,"TableReferenceList":600,"OptionalLateralViews":601,"TableReferenceList_EDIT":602,"OptionalLateralViews_EDIT":603,"OptionalWhereClause":604,"OptionalGroupByClause":605,"OptionalHavingClause":606,"OptionalWindowClause":607,"OptionalOrderByClause":608,"OptionalClusterOrDistributeBy":609,"OptionalLimitClause":610,"OptionalOffsetClause":611,"WhereClause_EDIT":612,"GroupByClause_EDIT":613,"HavingClause_EDIT":614,"WindowClause_EDIT":615,"OrderByClause_EDIT":616,"ClusterOrDistributeBy_EDIT":617,"LimitClause_EDIT":618,"OffsetClause_EDIT":619,"WhereClause":620,"GroupByClause":621,"HavingClause":622,"WindowClause":623,"OrderByClause":624,"ClusterOrDistributeBy":625,"LimitClause":626,"SearchCondition":627,"SearchCondition_EDIT":628,"GroupByColumnList":629,"OptionalHiveGroupingSetsCubeOrRollup":630,"GroupByColumnList_EDIT":631,"OptionalHiveGroupingSetsCubeOrRollup_EDIT":632,"HiveGroupingSets":633,"HiveGroupingSets_EDIT":634,"ColumnGroupingSets":635,"ColumnGroupingSets_EDIT":636,"ColumnGroupingSet_EDIT":637,"GroupByColumnListPartTwo_EDIT":638,"OrderByColumnList":639,"OrderByColumnList_EDIT":640,"OrderByIdentifier":641,"OrderByIdentifier_EDIT":642,"OptionalAscOrDesc":643,"OptionalImpalaNullsFirstOrLast":644,"OptionalImpalaNullsFirstOrLast_EDIT":645,"ClusterByClause":646,"DistributeByClause":647,"SortByClause":648,"ClusterByClause_EDIT":649,"DistributeByClause_EDIT":650,"SortByClause_EDIT":651,"SORT":652,"SortByList":653,"SortByList_EDIT":654,"SortByIdentifier":655,"SortByIdentifier_EDIT":656,"UnsignedNumericLiteral":657,"OffsetClause":658,"OFFSET":659,"NonParenthesizedValueExpressionPrimary":660,"OptionalNot":661,"TableSubQuery":662,"ValueExpressionList":663,"BETWEEN_AND":664,"LikeRightPart":665,"CaseRightPart":666,"NonParenthesizedValueExpressionPrimary_EDIT":667,"TableSubQuery_EDIT":668,"ValueExpressionInSecondPart_EDIT":669,"LikeRightPart_EDIT":670,"CaseRightPart_EDIT":671,"EndOrError":672,"ValueExpressionList_EDIT":673,"InValueList":674,"ColumnOrArbitraryFunctionRef":675,"ArbitraryFunctionRightPart":676,"ArbitraryFunctionName":677,"UserDefinedFunction":678,"ImpalaInterval":679,"UnsignedValueSpecification_EDIT":680,"ColumnOrArbitraryFunctionRef_EDIT":681,"ArbitraryFunctionRightPart_EDIT":682,"UserDefinedFunction_EDIT":683,"ImpalaInterval_EDIT":684,"+":685,"UnsignedLiteral":686,"UnsignedLiteral_EDIT":687,"GeneralLiteral":688,"GeneralLiteral_EDIT":689,"ExactNumericLiteral":690,"ApproximateNumericLiteral":691,"TruthValue":692,"SelectSpecification":693,"OptionalCorrelationName":694,"SelectSpecification_EDIT":695,"OptionalCorrelationName_EDIT":696,"TableReference":697,"TableReference_EDIT":698,"TablePrimaryOrJoinedTable":699,"TablePrimaryOrJoinedTable_EDIT":700,"TablePrimary":701,"JoinedTable":702,"TablePrimary_EDIT":703,"JoinedTable_EDIT":704,"Joins_EDIT":705,"JoinType":706,"OptionalImpalaBroadcastOrShuffle":707,"OptionalJoinCondition":708,"Join_EDIT":709,"JoinType_EDIT":710,"JoinCondition_EDIT":711,"UsingColList":712,"TableOrQueryName":713,"OptionalHiveTableSample":714,"OptionalImpalaTableSample":715,"DerivedTable":716,"TableOrQueryName_EDIT":717,"OptionalHiveTableSample_EDIT":718,"OptionalImpalaTableSample_EDIT":719,"DerivedTable_EDIT":720,"OptionalOnColumn":721,"OptionalOnColumn_EDIT":722,"SYSTEM":723,"PushQueryState":724,"PopQueryState":725,"SubQuery":726,"SubQuery_EDIT":727,"QueryExpression":728,"QueryExpression_EDIT":729,"QueryExpressionBody":730,"QueryExpressionBody_EDIT":731,"NonJoinQueryExpression":732,"NonJoinQueryExpression_EDIT":733,"NonJoinQueryTerm":734,"NonJoinQueryTerm_EDIT":735,"NonJoinQueryPrimary":736,"NonJoinQueryPrimary_EDIT":737,"SimpleTable":738,"SimpleTable_EDIT":739,"LateralView":740,"LateralView_EDIT":741,"AggregateFunction":742,"OptionalOverClause":743,"AnalyticFunction":744,"OverClause":745,"CastFunction":746,"HiveExtractFunction":747,"ImpalaExtractFunction":748,"AggregateFunction_EDIT":749,"OptionalOverClause_EDIT":750,"AnalyticFunction_EDIT":751,"OverClause_EDIT":752,"CastFunction_EDIT":753,"HiveExtractFunction_EDIT":754,"ImpalaExtractFunction_EDIT":755,"ArbitraryFunction":756,"ArbitraryFunction_EDIT":757,"REPLACE":758,"TRUNCATE":759,"CountFunction":760,"SumFunction":761,"OtherAggregateFunction":762,"CountFunction_EDIT":763,"SumFunction_EDIT":764,"OtherAggregateFunction_EDIT":765,"WindowExpression":766,"WindowExpression_EDIT":767,"OptionalPartitionBy":768,"OptionalOrderByAndWindow":769,"PartitionBy_EDIT":770,"OptionalOrderByAndWindow_EDIT":771,"PartitionBy":772,"OptionalWindowSpec":773,"WindowSpec_EDIT":774,"WindowSpec":775,"RowsOrRange":776,"PopLexerState":777,"OptionalCurrentOrPreceding":778,"OptionalAndFollowing":779,"UNBOUNDED":780,"OptionalCurrentOrPreceding_EDIT":781,"OptionalAndFollowing_EDIT":782,"PushHdfsLexerState":783,"HDFS_PATH":784,"HDFS_END_QUOTE":785,"AnyRange":786,"IntegerOrUnbounded":787,"AnyCurrent":788,"EXTRACT":789,"HiveDateField":790,"OtherAggregateFunction_Type":791,"FromOrComma":792,"OptionalOuter":793,"LateralViewColumnAliases":794,"LateralViewColumnAliases_EDIT":795,"CaseWhenThenList":796,"CaseWhenThenList_EDIT":797,"CaseWhenThenListPartTwo":798,"CaseWhenThenListPartTwo_EDIT":799,"AlterDatabase":800,"AlterIndex":801,"AlterTable":802,"AlterView":803,"Msck":804,"ReloadFunction":805,"CommentOn":806,"AlterDatabase_EDIT":807,"AlterIndex_EDIT":808,"AlterTable_EDIT":809,"AlterView_EDIT":810,"Msck_EDIT":811,"ReloadFunction_EDIT":812,"CommentOn_EDIT":813,"ALTER":814,"ParenthesizedPropertyAssignmentList":815,"PrincipalSpecification":816,"PrincipalSpecification_EDIT":817,"AlterTableLeftSide":818,"AnyAdd":819,"OptionalPartitionSpecs":820,"PARTITION_VALUE":821,"HivePrimaryKeySpecification":822,"HiveForeignKeySpecification":823,"AnyRename":824,"TO":825,"HiveSpecificOperations":826,"ImpalaSpecificOperations":827,"DropOperations":828,"OptionalPartitionOperations":829,"AlterTableLeftSide_EDIT":830,"AnyReplace":831,"OptionalPartitionSpecs_EDIT":832,"HivePrimaryKeySpecification_EDIT":833,"HiveForeignKeySpecification_EDIT":834,"HiveSpecificOperations_EDIT":835,"ImpalaSpecificOperations_EDIT":836,"OptionalPartitionOperations_EDIT":837,"DropOperations_EDIT":838,"AddOrReplace":839,"ClusteredBy":840,"ParenthesizedSkewedValueList":841,"OptionalStoredAsDirectories":842,"HiveExchange":843,"HiveArchiveOrUnArchive":844,"SKEWED_LOCATION":845,"ParenthesizedSkewedLocationList":846,"AnyChange":847,"COLUMN":848,"ParenthesizedColumnSpecificationList":849,"ClusteredBy_EDIT":850,"HiveExchange_EDIT":851,"ParenthesizedSkewedLocationList_EDIT":852,"OptionalStoredAsDirectories_EDIT":853,"OptionalImpalaColumn":854,"KuduStorageAttribute":855,"SetValue":856,"DROP":857,"ParenthesizedStatsList":858,"ParenthesizedStatsList_EDIT":859,"StatsList":860,"StatsList_EDIT":861,"StatsAssignment":862,"StatsAssignment_EDIT":863,"AnyFileFormat":864,"FileFormat":865,"OptionalWithSerdeproperties":866,"HiveOrImpalaSerdeproperties":867,"ImpalaRowFormat":868,"AddReplaceColumns":869,"OptionalAndWait":870,"OptionalWithOverwriteTblProperties":871,"HiveEnableOrDisable":872,"HiveNoDropOrOffline":873,"OptionalHiveColumn":874,"ColumnSpecification":875,"OptionalHiveFirstOrAfter":876,"AddReplaceColumns_EDIT":877,"ColumnSpecification_EDIT":878,"OptionalHiveFirstOrAfter_EDIT":879,"AndWait_EDIT":880,"WithOverwriteTblProperties_EDIT":881,"HiveNoDropOrOffline_EDIT":882,"ImpalaRowFormat_EDIT":883,"WithSerdeproperties_EDIT":884,"AnyColumns":885,"ParenthesizedColumnSpecificationList_EDIT":886,"COLUMNS":887,"ExchangePartitionSpec":888,"ExchangePartitionSpec_EDIT":889,"OneOrMorePartitionSpecLists":890,"OneOrMorePartitionSpecLists_EDIT":891,"OneOrMorePartitionSpecs":892,"OptionalHivePurge":893,"OneOrMorePartitionSpecs_EDIT":894,"CHANGE":895,"FILEFORMAT":896,"ADD":897,"HiveAfterOrFirst":898,"RENAME":899,"PartitionSpecWithLocationList":900,"PartitionSpecWithLocation":901,"PartitionSpecWithLocation_EDIT":902,"SkewedLocationList":903,"SkewedLocationList_EDIT":904,"SkewedLocation":905,"SkewedLocation_EDIT":906,"ColumnReferences":907,"AlterViewLeftSide":908,"AlterViewLeftSide_EDIT":909,"AnyView":910,"NullableComment":911,"OptionalForColumns":912,"OptionalCacheMetadata":913,"OptionalNoscan":914,"ForColumns":915,"CacheMetadata":916,"ForColumns_EDIT":917,"CacheMetadata_EDIT":918,"REFRESH":919,"INVALIDATE":920,"METADATA":921,"COMPUTE":922,"DatabaseDefinition":923,"TableDefinition":924,"ViewDefinition":925,"RoleDefinition":926,"FunctionDefinition":927,"IndexDefinition":928,"MacroDefinition":929,"DatabaseDefinition_EDIT":930,"TableDefinition_EDIT":931,"ViewDefinition_EDIT":932,"FunctionDefinition_EDIT":933,"IndexDefinition_EDIT":934,"MacroDefinition_EDIT":935,"DatabaseDefinitionOptionals":936,"OptionalComment":937,"OptionalHiveDbProperties":938,"DatabaseDefinitionOptionals_EDIT":939,"OptionalComment_INVALID":940,"Comment":941,"Comment_INVALID":942,"HiveDbProperties":943,"WITH":944,"PropertyAssignmentList":945,"PropertyAssignment":946,"TableDefinitionRightPart":947,"LifeCyclePart":948,"LIFECYCLE":949,"TableDefinitionRightPart_EDIT":950,"TableIdentifierAndOptionalColumnSpecification":951,"OptionalPartitionedBy":952,"OptionalSortBy":953,"OptionalClusteredBy":954,"OptionalSkewedBy":955,"OptionalStoredAsOrBy":956,"OptionalTblproperties":957,"OptionalAsSelectStatement":958,"TableIdentifierAndOptionalColumnSpecification_EDIT":959,"PartitionedBy_EDIT":960,"SortBy_EDIT":961,"SkewedBy_EDIT":962,"StoredAsOrBy_EDIT":963,"OptionalAsSelectStatement_EDIT":964,"OptionalColumnSpecificationsOrLike":965,"OptionalColumnSpecificationsOrLike_EDIT":966,"LIKE_PARQUET":967,"ColumnSpecificationList":968,"ConstraintSpecification":969,"ColumnSpecificationList_EDIT":970,"ConstraintSpecification_EDIT":971,"ColumnDataType":972,"OptionalColumnOptions":973,"ColumnDataType_EDIT":974,"ColumnOptions_EDIT":975,"ColumnOptions":976,"ColumnOption":977,"ColumnOption_EDIT":978,"ImpalaPrimaryKey":979,"ImpalaPrimaryKey_EDIT":980,"ArrayType":981,"MapType":982,"StructType":983,"UnionType":984,"ArrayType_INVALID":985,"MapType_INVALID":986,"StructType_INVALID":987,"UnionType_INVALID":988,"ArrayType_EDIT":989,"MapType_EDIT":990,"StructType_EDIT":991,"UnionType_EDIT":992,"GreaterThanOrError":993,"StructDefinitionList":994,"StructDefinitionList_EDIT":995,"StructDefinition":996,"StructDefinition_EDIT":997,":":998,"ColumnDataTypeList":999,"ColumnDataTypeList_EDIT":1000,"ColumnDataTypeListInner_EDIT":1001,"ImpalaPrimaryKeySpecification":1002,"ImpalaPrimaryKeySpecification_EDIT":1003,"HivePrimaryKey":1004,"HivePrimaryKey_EDIT":1005,"OptionalRelyNoRely":1006,"PartitionedBy":1007,"ParenthesizedPartitionValuesList":1008,"ParenthesizedPartitionValuesList_EDIT":1009,"SortBy":1010,"PartitionValueList":1011,"PartitionValueList_EDIT":1012,"PartitionValue":1013,"PartitionValue_EDIT":1014,"LessThanOrEqualTo":1015,"OptionalHiveSortedBy":1016,"OptionalHiveSortedBy_EDIT":1017,"ParenthesizedSortList":1018,"ParenthesizedSortList_EDIT":1019,"SortList":1020,"SortList_EDIT":1021,"SortIdentifier":1022,"SortIdentifier_EDIT":1023,"SkewedBy":1024,"SkewedValueList":1025,"StoredAsOrBy":1026,"StoredAs":1027,"HiveOrImpalaRowFormat":1028,"OptionalStoredAs":1029,"StoredAs_EDIT":1030,"HiveOrImpalaRowFormat_EDIT":1031,"ORC":1032,"HiveRowFormat":1033,"HiveRowFormat_EDIT":1034,"HiveDelimitedRowFormat":1035,"HiveDelimitedRowFormat_EDIT":1036,"OptionalFieldsTerminatedBy":1037,"OptionalCollectionItemsTerminatedBy":1038,"OptionalMapKeysTerminatedBy":1039,"OptionalLinesTerminatedBy":1040,"OptionalNullDefinedAs":1041,"OptionalFieldsTerminatedBy_EDIT":1042,"OptionalCollectionItemsTerminatedBy_EDIT":1043,"OptionalMapKeysTerminatedBy_EDIT":1044,"OptionalLinesTerminatedBy_EDIT":1045,"OptionalNullDefinedAs_EDIT":1046,"ESCAPED":1047,"WithSerdeproperties":1048,"TblProperties":1049,"OptionalHiveTblproperties":1050,"CommitLocations":1051,"OptionalParenthesizedViewColumnList":1052,"ParenthesizedViewColumnList_EDIT":1053,"ImpalaFunctionDefinition":1054,"ImpalaAggregateFunctionDefinition":1055,"HiveFunctionDefinition":1056,"HiveTemporaryFunction":1057,"ImpalaFunctionDefinition_EDIT":1058,"ImpalaAggregateFunctionDefinition_EDIT":1059,"HiveFunctionDefinition_EDIT":1060,"HiveTemporaryFunction_EDIT":1061,"ParenthesizedImpalaArgumentList":1062,"ImpalaReturns":1063,"ImpalaSymbol":1064,"ParenthesizedImpalaArgumentList_EDIT":1065,"ImpalaReturns_EDIT":1066,"OptionalImpalaInitFn":1067,"ImpalaUpdateFn":1068,"ImpalaMergeFn":1069,"OptionalImpalaPrepareFn":1070,"OptionalImpalaCloseFn":1071,"OptionalImpalaSerializeFn":1072,"OptionalImpalaFinalizeFn":1073,"OptionalIntermediate":1074,"OptionalImpalaInitFn_EDIT":1075,"ImpalaUpdateFn_EDIT":1076,"ImpalaMergeFn_EDIT":1077,"OptionalImpalaPrepareFn_EDIT":1078,"OptionalImpalaCloseFn_EDIT":1079,"OptionalImpalaSerializeFn_EDIT":1080,"OptionalImpalaFinalizeFn_EDIT":1081,"Intermediate_EDIT":1082,"OptionalHiveUsing":1083,"OptionalHiveUsing_EDIT":1084,"ImpalaArgumentList":1085,"OptionalVariableArguments":1086,"ImpalaArgumentList_EDIT":1087,"FunctionReference":1088,"FunctionReference_EDIT":1089,"OneOrMoreFunctionResources":1090,"FunctionResource":1091,"FunctionResourceType":1092,"VIEW":1093,"ParenthesizedViewColumnList":1094,"ViewColumnList":1095,"ViewColumnList_EDIT":1096,"AnyRole":1097,"ExistingTable":1098,"ParenthesizedIndexColumnList":1099,"IndexType":1100,"OptionalWithDeferredRebuild":1101,"OptionalIdxProperties":1102,"OptionalInTable":1103,"ExistingTable_EDIT":1104,"ParenthesizedIndexColumnList_EDIT":1105,"IndexType_EDIT":1106,"OptionalWithDeferredRebuild_EDIT":1107,"OptionalInTable_EDIT":1108,"IndexColumnList":1109,"IndexColumnList_EDIT":1110,"MacroArguments":1111,"MacroArguments_EDIT":1112,"MacroArgumentList":1113,"MacroArgumentList_EDIT":1114,"MacroArgument":1115,"MacroArgument_EDIT":1116,"HiveDeleteStatement":1117,"ImpalaDeleteStatement":1118,"InsertStatement":1119,"LoadStatement":1120,"ImportStatement":1121,"ExportStatement":1122,"UpdateStatement":1123,"HiveDeleteStatement_EDIT":1124,"ImpalaDeleteStatement_EDIT":1125,"HiveInsertStatement_EDIT":1126,"InsertValuesStatement_EDIT":1127,"ImpalaInsertOrUpsertStatement_EDIT":1128,"HiveInsertStatement":1129,"ImpalaInsertOrUpsertStatement":1130,"HiveMergeStatement_EDIT":1131,"LoadStatement_EDIT":1132,"ImportStatement_EDIT":1133,"ExportStatement_EDIT":1134,"UpdateStatement_EDIT":1135,"DropDatabaseStatement":1136,"DropFunctionStatement":1137,"DropRoleStatement":1138,"DropStatsStatement":1139,"DropTableStatement":1140,"DropIndexStatement":1141,"DropMacroStatement":1142,"DropViewStatement":1143,"TruncateTableStatement":1144,"DropDatabaseStatement_EDIT":1145,"DropFunctionStatement_EDIT":1146,"DropStatsStatement_EDIT":1147,"DropTableStatement_EDIT":1148,"DropIndexStatement_EDIT":1149,"DropMacroStatement_EDIT":1150,"DropViewStatement_EDIT":1151,"TruncateTableStatement_EDIT":1152,"DropImpalaFunction":1153,"DropHiveFunction":1154,"DropImpalaFunction_EDIT":1155,"DropHiveFunction_EDIT":1156,"OptionalPurge":1157,"DELETE":1158,"OptionalImpalaDeleteTableRef":1159,"ImpalaDeleteTableRef_EDIT":1160,"TransactionIdList":1161,"HivePrivilegeTypeList":1162,"OptionalOnSpecification":1163,"PrincipalSpecificationList":1164,"OptionalWithGrantOption":1165,"UserOrRoleList":1166,"OptionalWithAdminOption":1167,"ImpalaPrivilegeType":1168,"ImpalaObjectSpecification":1169,"HivePrivilegeTypeList_EDIT":1170,"OnSpecification_EDIT":1171,"PrincipalSpecificationList_EDIT":1172,"WithGrantOption_EDIT":1173,"WithAdminOption_EDIT":1174,"ImpalaPrivilegeType_EDIT":1175,"ImpalaObjectSpecification_EDIT":1176,"HiveObjectSpecification":1177,"HiveObjectSpecification_EDIT":1178,"HivePrivilegeTypeWithOptionalColumn":1179,"HivePrivilegeTypeWithOptionalColumn_EDIT":1180,"HivePrivilegeType":1181,"INSERT":1182,"UPDATE":1183,"INSERT":1184,"REVOKE":1185,"PrivilegesOrGrantOption":1186,"REVOKE":1187,"PrivilegesOrGrantOption_EDIT":1188,"InsertValuesStatement":1189,"HiveMergeStatement":1190,"HiveInsertWithoutQuery":1191,"HiveInserts":1192,"SelectWithoutTableExpression":1193,"HiveInsertWithoutQuery_EDIT":1194,"HiveInserts_EDIT":1195,"SelectWithoutTableExpression_EDIT":1196,"OptionalHiveTable":1197,"OptionalInsertRowFormat":1198,"OVERWRITE_DIRECTORY":1199,"OptionalInsertRowFormat_EDIT":1200,"OptionalStoredAs_EDIT":1201,"HiveInsert":1202,"HiveInsert_EDIT":1203,"InsertValuesList":1204,"INSERT":1205,"OptionalTable":1206,"ParenthesizedRowValuesList":1207,"RowValuesList":1208,"ImpalaInsertOrUpsertStatementWithoutCTE":1209,"ImpalaInsertOrUpsertStatementWithoutCTE_EDIT":1210,"ImpalaInsertOrUpsertLeftPart":1211,"OptionalImpalaShuffleOrNoShuffle":1212,"ImpalaRowValuesLists":1213,"ImpalaInsertOrUpsertLeftPart_EDIT":1214,"ImpalaRowValuesLists_EDIT":1215,"ImpalaUpsertStatementLeftPart":1216,"ImpalaInsertLeftPart":1217,"ImpalaUpsertStatementLeftPart_EDIT":1218,"ImpalaInsertLeftPart_EDIT":1219,"UPSERT":1220,"OptionalImpalaTable":1221,"IntoOrOverwrite":1222,"OVERWRITE":1223,"ParenthesizedImpalaRowValuesList":1224,"ParenthesizedImpalaRowValuesList_EDIT":1225,"HiveMergeStatementLeftPart":1226,"WhenList":1227,"HiveMergeStatementLeftPart_EDIT":1228,"WhenList_EDIT":1229,"MergeSource":1230,"MergeSource_EDIT":1231,"WhenClause":1232,"WhenClause_EDIT":1233,"OptionalMatchCondition":1234,"UpdateDeleteOrInsert":1235,"MatchCondition_EDIT":1236,"UpdateDeleteOrInsert_EDIT":1237,"SetClauseList":1238,"SetClauseList_EDIT":1239,"AnyLoad":1240,"AnyData":1241,"OptionalHiveLocal":1242,"AnyInpath":1243,"OptionalOverwrite":1244,"LOAD":1245,"IMPORT":1246,"OptionalTableWithPartition":1247,"TableWithPartition":1248,"TableWithPartition_EDIT":1249,"SetOption":1250,"ShowColumnStatsStatement":1251,"ShowColumnsStatement":1252,"ShowCompactionsStatement":1253,"ShowConfStatement":1254,"ShowCreateTableStatement":1255,"ShowCurrentRolesStatement":1256,"ShowDatabasesStatement":1257,"ShowFilesStatement":1258,"ShowFunctionsStatement":1259,"ShowGrantStatement":1260,"ShowIndexStatement":1261,"ShowLocksStatement":1262,"ShowPartitionsStatement":1263,"ShowRoleStatement":1264,"ShowRolesStatement":1265,"ShowTableStatement":1266,"ShowTablesStatement":1267,"ShowTblPropertiesStatement":1268,"ShowTransactionsStatement":1269,"ShowViewsStatement":1270,"AnyShow":1271,"SHOW":1272,"ShowColumnStatsStatement_EDIT":1273,"ShowColumnsStatement_EDIT":1274,"ShowCreateTableStatement_EDIT":1275,"ShowCurrentRolesStatement_EDIT":1276,"ShowDatabasesStatement_EDIT":1277,"ShowFilesStatement_EDIT":1278,"ShowFunctionsStatement_EDIT":1279,"ShowGrantStatement_EDIT":1280,"ShowIndexStatement_EDIT":1281,"ShowLocksStatement_EDIT":1282,"ShowPartitionsStatement_EDIT":1283,"ShowRoleStatement_EDIT":1284,"ShowTableStatement_EDIT":1285,"ShowTablesStatement_EDIT":1286,"ShowTblPropertiesStatement_EDIT":1287,"ShowViewsStatement_EDIT":1288,"AnyTableOrView":1289,"OptionalPrincipalName":1290,"OptionalPrincipalName_EDIT":1291,"OptionalInOrFromDatabase":1292,"OptionalLike":1293,"InOrFromDatabase_EDIT":1294,"Like_EDIT":1295,"TargetTable":1296,"OptionalFromJoinedTable":1297,"TargetTable_EDIT":1298,"FromJoinedTable_EDIT":1299,"TableName":1300,"TableName_EDIT":1301,"SetClause":1302,"SetClause_EDIT":1303,"SetTarget":1304,"UpdateSource":1305,"UpdateSource_EDIT":1306,"AnyUse":1307,"USE":1308,"$accept":0,"$end":1}, +terminals_: {2:"error",6:"EOF",10:";",18:"CURSOR",23:"SetSpecification_EDIT",25:"ABORT",26:"ADD",27:"ADMIN",28:"AFTER",29:"ANALYZE",30:"ARCHIVE",31:"AVRO",32:"BUCKET",33:"BUCKETS",34:"CASCADE",35:"CHANGE",36:"CLUSTERED",37:"COLLECTION",38:"COLUMNS",39:"COMMENT",40:"COMPACT",41:"COMPACTIONS",42:"COMPUTE",43:"CONCATENATE",44:"DATA",45:"DATABASES",46:"DBPROPERTIES",47:"DEFERRED",48:"DEFINED",49:"DELIMITED",50:"DEPENDENCY",51:"DIRECTORY",52:"DISABLE",53:"DOUBLE_PRECISION",54:"ENABLE",55:"ESCAPED",56:"EXCHANGE",57:"EXPLAIN",58:"EXPORT",59:"FIELDS",60:"FILE",61:"FILEFORMAT",62:"FIRST",63:"FORMAT",64:"FUNCTIONS",65:"INPATH",66:"INPUTFORMAT",67:"JAR",68:"IDXPROPERTIES",69:"ITEMS",70:"KEY",71:"KEYS",72:"LINES",73:"LOAD",74:"LOCATION",75:"LOCKS",76:"MATCHED",77:"METADATA",78:"MERGE",79:"MSCK",80:"NOSCAN",81:"NOVALIDATE",82:"NO_DROP",83:"OFFLINE",84:"ORC",85:"OUTPUTFORMAT",86:"OVERWRITE",87:"OWNER",88:"PARQUET",89:"PARTITIONED",90:"PARTITIONS",91:"PERCENT",92:"PRIVILEGES",93:"PURGE",94:"RCFILE",95:"REBUILD",96:"RELOAD",97:"RELY",98:"NORELY",99:"REPAIR",100:"REPLICATION",101:"RECOVER",102:"RENAME",103:"REPLACE",104:"RESTRICT",105:"ROLE",106:"ROLES",107:"SCHEMAS",108:"SEQUENCEFILE",109:"SERDE",110:"SERDEPROPERTIES",111:"SETS",112:"SHOW",113:"SKEWED",114:"SORTED",115:"STATISTICS",116:"STORED",117:"STRING",118:"STRUCT",119:"TABLES",120:"TBLPROPERTIES",121:"TEMPORARY",122:"TERMINATED",123:"TEXTFILE",124:"TIMESTAMP",125:"TINYINT",126:"TOUCH",127:"TRANSACTIONS",128:"UNARCHIVE",129:"UNIONTYPE",130:"USE",131:"USER",132:"VIEW",133:"WAIT",134:"DAY",135:"HOUR",136:"MINUTE",137:"MONTH",138:"QUARTER",139:"SECOND",140:"WEEK",141:"YEAR",142:"ANALYTIC",143:"CURRENT",144:"GRANT",145:"RECOVER",146:"ROLE",147:"ROLES",148:"URI",149:"SERVER",150:"UNKNOWN",151:"BLOCK_SIZE",152:"COMPRESSION",153:"DEFAULT",154:"ENCODING",155:"KEY",156:"ROLE",157:"OPTION",159:"REGULAR_IDENTIFIER",160:"VARIABLE_REFERENCE",162:"EXPLAIN",163:"AUTHORIZATION",164:"EXTENDED",166:"ALL",167:"AS",168:"BINARY",169:"CACHE",170:"CLUSTER",171:"CONF",172:"CONSTRAINT",173:"CUBE",174:"CURRENT",175:"DATE",176:"DISTRIBUTE",177:"DISTRIBUTED",178:"EXTERNAL",179:"FOR",180:"FOREIGN",181:"FUNCTION",182:"GRANT",183:"GROUPING",184:"LATERAL",185:"LOCAL",186:"LOCK",187:"MACRO",188:"PARTITION",189:"PRIMARY",190:"REFERENCES",191:"ROLLUP",192:"SHOW_DATABASE",193:"TABLE",194:"ASC",195:"DESC",196:"FORMATTED",197:"INDEX",198:"INDEXES",199:"NONE",200:"OF",201:"OUT",202:"SCHEMA",203:"STORED_AS_DIRECTORIES",204:"TABLESAMPLE",205:"USING",206:"VIEWS",207:"WINDOW",208:".",209:"[",210:"]",211:"AGGREGATE",212:"AVRO",213:"CACHED",214:"CASCADE",215:"CLOSE_FN",216:"COLUMN",217:"DATA",218:"DATABASES",219:"DELETE",220:"DELIMITED",221:"ESCAPED",222:"EXTENDED",223:"EXTERNAL",224:"FIELDS",225:"FILES",226:"FINALIZE_FN",227:"FIRST",228:"FORMAT",229:"FORMATTED",230:"FUNCTION",231:"FUNCTIONS",232:"GROUP",233:"HASH",234:"ILIKE",235:"INCREMENTAL",236:"INTERMEDIATE",237:"INTERVAL",238:"INIT_FN",239:"INPATH",240:"IREGEXP",241:"KUDU",242:"LAST",243:"LIMIT",244:"LINES",245:"LOCATION",246:"MERGE_FN",247:"NULLS",248:"PARTITIONS",249:"PREPARE_FN",250:"PRIMARY",251:"RANGE",252:"REAL",253:"REPEATABLE",254:"REPLICATION",255:"RESTRICT",256:"RETURNS",257:"SCHEMAS",258:"SERIALIZE_FN",259:"SORT",260:"STATS",261:"STRAIGHT_JOIN",262:"SYMBOL",263:"TABLE",264:"TABLES",265:"TABLESAMPLE",266:"USING",267:"ANTI",268:"NOSHUFFLE",269:"PARQUET",270:"PARTITIONED",271:"RCFILE",272:"SEQUENCEFILE",273:"SERDEPROPERTIES",274:"SHUFFLE",275:"STORED",276:"TBLPROPERTIES",277:"TERMINATED",278:"TEXTFILE",279:"UPDATE_FN",280:"BROADCAST",281:"...",282:".",283:"[",284:"]",285:"ALL",286:"ARRAY",287:"AS",288:"ASC",289:"BETWEEN",290:"BIGINT",291:"BOOLEAN",292:"BY",293:"CASE",294:"CHAR",295:"CROSS",296:"CURRENT",297:"DATABASE",298:"DECIMAL",299:"DISTINCT",300:"DOUBLE",301:"DESC",302:"ELSE",303:"END",304:"EXISTS",305:"FALSE",306:"FLOAT",307:"FOLLOWING",308:"FROM",309:"FULL",310:"GROUP",311:"HAVING",312:"IF",313:"IN",314:"INNER",315:"INT",316:"INTO",317:"IS",318:"JOIN",319:"LEFT",320:"LIKE",321:"LIMIT",322:"MAP",323:"NOT",324:"NULL",325:"ON",326:"ORDER",327:"OUTER",328:"OVER",329:"PARTITION",330:"PRECEDING",331:"PURGE",332:"RANGE",333:"REGEXP",334:"RIGHT",335:"RLIKE",336:"ROW",337:"ROWS",338:"SCHEMA",339:"SEMI",340:"SET",341:"SMALLINT",342:"STRING",343:"TABLE",344:"THEN",345:"TIMESTAMP",346:"TINYINT",347:"TRUE",348:"UNION",349:"VALUES",350:"VARCHAR",351:"WHEN",352:"WHERE",353:"WITH",354:"AVG",355:"CAST",356:"COUNT",357:"MAX",358:"MIN",359:"STDDEV_POP",360:"STDDEV_SAMP",361:"SUM",362:"VARIANCE",363:"VAR_POP",364:"VAR_SAMP",365:"COLLECT_SET",366:"COLLECT_LIST",367:"CORR",368:"COVAR_POP",369:"COVAR_SAMP",370:"DAYOFWEEK",371:"HISTOGRAM_NUMERIC",372:"NTILE",373:"PERCENTILE",374:"PERCENTILE_APPROX",375:"APPX_MEDIAN",376:"EXTRACT",377:"GROUP_CONCAT",378:"NDV",379:"STDDEV",380:"VARIANCE_POP",381:"VARIANCE_SAMP",382:"ANALYTIC",383:"UNSIGNED_INTEGER",384:"UNSIGNED_INTEGER_E",385:"HDFS_START_QUOTE",386:"AND",387:"OR",388:"=",389:"<",390:">",391:"COMPARISON_OPERATOR",392:"-",393:"*",394:"ARITHMETIC_OPERATOR",395:",",396:".",397:"~",398:"!",399:"(",400:")",401:"[",402:"]",403:"BACKTICK",404:"SINGLE_QUOTE",405:"DOUBLE_QUOTE",439:"CREATE",440:"CREATE",441:"CREATE",442:"PARTIAL_CURSOR",446:"GROUP",453:"COMMENT",470:"VALUE",472:"PARTIAL_VALUE",544:"UNCACHED",569:"DESCRIBE",570:"DESCRIBE",576:"SELECT",652:"SORT",659:"OFFSET",664:"BETWEEN_AND",685:"+",723:"SYSTEM",758:"REPLACE",759:"TRUNCATE",780:"UNBOUNDED",784:"HDFS_PATH",785:"HDFS_END_QUOTE",789:"EXTRACT",814:"ALTER",821:"PARTITION_VALUE",825:"TO",845:"SKEWED_LOCATION",848:"COLUMN",857:"DROP",887:"COLUMNS",895:"CHANGE",896:"FILEFORMAT",897:"ADD",899:"RENAME",907:"ColumnReferences",919:"REFRESH",920:"INVALIDATE",921:"METADATA",922:"COMPUTE",944:"WITH",949:"LIFECYCLE",967:"LIKE_PARQUET",998:":",1032:"ORC",1047:"ESCAPED",1093:"VIEW",1158:"DELETE",1182:"INSERT",1183:"UPDATE",1184:"INSERT",1185:"REVOKE",1187:"REVOKE",1199:"OVERWRITE_DIRECTORY",1201:"OptionalStoredAs_EDIT",1205:"INSERT",1208:"RowValuesList",1220:"UPSERT",1223:"OVERWRITE",1245:"LOAD",1246:"IMPORT",1272:"SHOW",1308:"USE"}, +productions_: [0,[3,3],[7,3],[7,3],[4,0],[5,0],[5,1],[5,4],[8,1],[8,4],[8,4],[8,7],[9,1],[9,1],[9,1],[9,2],[9,2],[9,2],[11,1],[11,2],[11,1],[11,1],[11,1],[11,1],[11,1],[11,2],[11,2],[11,2],[11,2],[11,2],[11,2],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[24,1],[158,1],[158,1],[158,1],[15,2],[15,1],[19,3],[19,2],[161,0],[161,1],[161,1],[161,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[165,1],[12,1],[12,1],[12,1],[12,1],[12,1],[12,1],[12,1],[12,1],[12,1],[12,1],[12,1],[12,1],[12,1],[12,1],[12,1],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[20,2],[20,1],[20,1],[435,1],[435,1],[436,1],[436,2],[437,1],[437,1],[438,1],[438,1],[438,1],[16,1],[16,1],[443,1],[443,1],[443,1],[444,1],[444,1],[445,1],[445,1],[445,1],[447,1],[447,1],[448,1],[448,1],[448,1],[449,1],[449,1],[449,1],[450,1],[450,1],[451,1],[451,1],[452,1],[452,1],[454,1],[454,1],[455,1],[455,1],[455,1],[455,1],[456,1],[456,1],[457,1],[457,1],[458,1],[458,1],[459,1],[459,1],[460,1],[460,1],[461,1],[461,1],[462,1],[462,1],[463,1],[463,1],[464,1],[464,1],[465,1],[465,1],[466,1],[466,1],[467,1],[467,1],[468,1],[468,1],[469,3],[469,2],[471,2],[473,3],[473,2],[474,2],[475,1],[475,1],[476,1],[476,1],[477,0],[477,1],[478,0],[478,1],[479,0],[479,1],[479,1],[480,0],[480,1],[480,1],[481,0],[481,1],[481,1],[482,2],[482,1],[483,2],[483,2],[484,0],[484,2],[486,2],[488,0],[488,1],[489,0],[489,1],[489,1],[489,1],[489,1],[490,0],[490,1],[490,1],[491,0],[491,1],[492,0],[492,2],[493,2],[494,0],[494,3],[495,2],[495,3],[496,0],[496,2],[496,2],[497,0],[497,1],[499,1],[498,4],[500,4],[504,5],[507,2],[507,3],[507,4],[507,5],[507,5],[507,5],[506,1],[506,1],[506,1],[506,1],[508,1],[508,1],[508,3],[508,3],[509,1],[509,1],[511,1],[511,1],[512,1],[512,1],[510,2],[503,1],[503,1],[513,0],[513,1],[515,1],[514,3],[516,3],[516,3],[517,1],[517,3],[518,1],[518,3],[518,3],[518,3],[518,5],[518,5],[521,3],[522,1],[522,3],[523,1],[523,3],[523,4],[526,1],[526,3],[526,3],[526,4],[525,1],[525,2],[527,1],[527,2],[527,3],[527,2],[528,2],[529,2],[530,1],[530,3],[531,1],[531,3],[531,3],[485,1],[487,1],[501,1],[501,3],[502,1],[502,3],[502,3],[502,5],[532,3],[532,1],[533,3],[533,3],[533,3],[533,1],[536,0],[536,1],[537,2],[539,2],[541,0],[541,2],[541,1],[545,0],[545,2],[542,3],[546,2],[543,0],[543,1],[547,4],[549,2],[549,3],[524,1],[524,3],[524,2],[550,1],[550,3],[551,1],[551,3],[552,1],[552,2],[553,1],[553,2],[554,1],[554,3],[556,1],[555,1],[555,3],[557,1],[557,3],[557,5],[557,3],[557,3],[557,5],[558,1],[558,3],[559,1],[559,3],[559,5],[559,3],[559,1],[559,3],[559,5],[559,3],[519,1],[519,4],[519,3],[520,4],[520,4],[560,1],[560,1],[561,1],[561,1],[562,1],[562,1],[562,1],[562,1],[562,1],[562,1],[562,1],[562,1],[562,1],[562,1],[562,1],[562,1],[562,2],[562,2],[562,2],[562,1],[562,1],[562,1],[562,1],[564,0],[564,3],[563,0],[563,3],[563,5],[406,1],[406,1],[421,1],[421,1],[565,5],[565,4],[565,4],[565,4],[567,4],[567,5],[567,6],[567,5],[567,5],[567,6],[567,5],[567,4],[567,3],[567,4],[567,5],[567,4],[567,5],[566,3],[566,4],[568,3],[568,3],[568,4],[568,4],[568,5],[14,2],[14,3],[14,5],[22,2],[22,2],[22,4],[22,3],[22,3],[22,1],[22,4],[22,3],[571,4],[571,5],[572,0],[572,1],[574,1],[581,1],[581,2],[582,1],[582,2],[582,2],[582,3],[583,4],[584,3],[584,4],[584,4],[573,4],[573,4],[573,5],[573,5],[573,5],[573,6],[573,7],[573,5],[578,0],[578,1],[17,2],[575,2],[587,1],[587,3],[588,1],[588,3],[588,3],[588,5],[589,5],[590,2],[590,5],[590,5],[577,0],[577,1],[577,1],[577,1],[580,2],[586,2],[586,4],[586,3],[596,0],[596,1],[596,1],[593,3],[595,2],[595,3],[595,3],[594,8],[597,8],[597,8],[597,8],[597,8],[597,8],[597,8],[597,8],[597,8],[597,9],[597,9],[597,9],[597,9],[597,9],[597,9],[597,9],[604,0],[604,1],[620,2],[612,2],[612,2],[605,0],[605,1],[621,4],[613,4],[613,4],[613,2],[613,4],[630,0],[630,1],[630,2],[630,2],[632,1],[632,2],[633,5],[634,2],[634,5],[635,0],[635,1],[635,3],[635,3],[636,1],[636,3],[636,3],[636,5],[636,3],[637,1],[637,1],[629,1],[629,3],[631,1],[631,2],[631,3],[631,3],[631,3],[631,4],[631,5],[638,1],[638,2],[638,1],[608,0],[608,1],[624,3],[616,3],[616,2],[639,1],[639,3],[640,1],[640,2],[640,3],[640,4],[640,5],[641,3],[642,3],[642,3],[642,3],[643,0],[643,1],[643,1],[643,1],[643,1],[644,0],[644,2],[644,2],[645,2],[609,0],[609,1],[625,1],[625,1],[625,2],[625,1],[617,1],[617,1],[617,2],[617,2],[617,1],[646,3],[649,2],[649,3],[649,3],[647,3],[650,2],[650,3],[650,3],[648,3],[651,2],[651,3],[653,1],[653,3],[654,1],[654,3],[654,3],[654,5],[655,2],[656,2],[656,2],[610,0],[610,1],[626,2],[626,4],[626,2],[626,4],[626,2],[618,2],[618,2],[618,2],[611,0],[611,1],[658,2],[619,2],[619,2],[627,1],[628,1],[534,1],[534,2],[534,2],[534,2],[534,2],[534,4],[534,4],[534,4],[534,4],[534,6],[534,2],[534,3],[534,3],[534,3],[534,3],[534,3],[534,6],[534,6],[534,5],[534,5],[534,6],[534,5],[534,3],[534,3],[534,3],[534,3],[534,3],[534,2],[534,3],[534,2],[534,3],[535,1],[535,3],[535,2],[535,2],[535,2],[535,2],[535,2],[535,2],[535,2],[535,2],[535,3],[535,4],[535,5],[535,4],[535,4],[535,4],[535,6],[535,6],[535,2],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,4],[535,3],[535,6],[535,6],[535,5],[535,5],[535,6],[535,6],[535,6],[535,6],[535,5],[535,4],[535,5],[535,5],[535,5],[535,5],[535,4],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,3],[535,2],[535,3],[535,2],[535,3],[535,2],[535,3],[535,2],[535,3],[535,3],[535,4],[535,3],[535,3],[535,3],[663,1],[663,3],[673,1],[673,3],[673,3],[673,5],[673,3],[673,5],[673,4],[673,3],[673,2],[673,2],[673,4],[674,1],[674,3],[660,1],[660,1],[660,2],[660,2],[660,1],[660,1],[660,1],[667,1],[667,1],[667,2],[667,2],[667,1],[667,1],[675,1],[675,3],[681,1],[679,3],[684,3],[548,1],[548,2],[548,2],[505,1],[680,1],[686,1],[686,1],[687,1],[657,1],[657,1],[690,1],[690,2],[690,3],[690,2],[691,2],[691,3],[691,4],[688,1],[688,1],[688,1],[689,1],[689,1],[692,1],[692,1],[661,0],[661,1],[693,2],[693,1],[695,2],[695,3],[695,2],[579,1],[579,3],[585,1],[585,2],[585,3],[585,3],[585,3],[585,4],[585,3],[585,3],[585,4],[585,4],[585,4],[585,5],[585,5],[600,1],[600,3],[602,1],[602,3],[602,3],[602,5],[602,3],[697,1],[698,1],[699,1],[699,1],[700,1],[700,1],[702,2],[704,2],[704,2],[598,4],[598,5],[599,2],[599,3],[707,0],[707,1],[707,1],[709,4],[709,2],[709,4],[709,4],[709,4],[705,1],[705,2],[705,2],[705,3],[706,1],[706,2],[706,2],[706,2],[706,2],[706,2],[706,2],[706,3],[706,2],[706,3],[706,3],[706,3],[706,3],[706,2],[706,3],[706,3],[706,3],[706,3],[710,2],[710,2],[710,2],[710,2],[710,2],[710,3],[710,3],[710,3],[710,3],[710,3],[710,3],[710,3],[710,3],[710,3],[710,3],[710,3],[710,3],[708,0],[708,2],[708,4],[712,1],[712,3],[711,2],[711,2],[701,4],[701,3],[703,4],[703,4],[703,4],[703,3],[703,3],[713,1],[717,1],[716,1],[720,1],[714,0],[714,9],[714,5],[714,5],[714,4],[718,4],[718,6],[718,7],[718,10],[718,9],[718,5],[715,0],[715,5],[715,9],[719,2],[721,0],[721,2],[722,2],[722,2],[724,0],[725,0],[662,3],[662,4],[668,3],[668,3],[591,2],[592,3],[726,1],[727,1],[728,1],[729,1],[730,1],[731,1],[732,1],[733,1],[734,1],[735,1],[736,1],[737,1],[738,1],[739,1],[694,0],[694,1],[694,2],[696,1],[696,2],[696,2],[601,0],[601,2],[603,3],[678,2],[678,2],[678,1],[678,1],[678,1],[683,1],[683,2],[683,1],[683,2],[683,2],[683,2],[683,1],[683,1],[683,1],[756,2],[756,2],[757,2],[757,2],[677,1],[677,1],[677,1],[677,1],[677,1],[677,1],[676,2],[676,3],[682,3],[682,4],[682,3],[742,1],[742,1],[742,1],[749,1],[749,1],[749,1],[744,3],[744,4],[751,4],[751,5],[751,4],[743,0],[743,1],[750,1],[745,2],[745,2],[752,2],[766,4],[767,4],[767,4],[767,5],[767,7],[768,0],[768,1],[772,3],[770,2],[770,3],[770,3],[769,0],[769,2],[771,1],[771,3],[771,2],[773,0],[773,1],[775,5],[775,5],[774,2],[774,6],[774,5],[774,5],[774,5],[774,4],[777,0],[783,0],[538,3],[540,5],[540,4],[540,3],[540,3],[540,2],[776,1],[776,1],[778,0],[778,2],[778,2],[781,2],[781,2],[788,1],[788,1],[788,1],[786,1],[786,1],[779,0],[779,3],[779,3],[782,2],[782,3],[782,3],[787,1],[787,1],[606,0],[606,1],[622,2],[614,2],[614,2],[607,0],[607,1],[623,4],[615,3],[615,4],[746,6],[746,3],[753,6],[753,5],[753,4],[753,6],[753,5],[753,4],[753,6],[753,5],[753,6],[753,5],[760,4],[760,3],[760,5],[763,5],[763,6],[763,5],[747,6],[754,4],[754,5],[754,6],[754,6],[754,6],[754,6],[790,1],[790,1],[790,1],[790,1],[790,1],[790,1],[790,1],[790,1],[790,1],[762,4],[762,5],[765,5],[765,6],[765,5],[791,1],[791,1],[791,1],[791,1],[791,1],[791,1],[791,1],[791,1],[791,1],[791,1],[791,1],[791,1],[791,1],[791,1],[791,1],[791,1],[791,1],[791,1],[791,1],[791,1],[791,1],[791,1],[791,1],[748,6],[748,3],[755,6],[755,5],[755,4],[755,6],[755,5],[755,4],[755,6],[755,5],[755,6],[755,5],[755,6],[755,5],[792,1],[792,1],[761,5],[761,3],[764,5],[764,6],[764,5],[740,6],[740,5],[740,5],[741,4],[741,5],[741,6],[741,6],[741,5],[741,6],[741,4],[741,2],[793,0],[793,1],[794,2],[794,4],[795,2],[795,4],[669,3],[669,3],[669,3],[665,2],[665,2],[665,2],[665,2],[665,2],[670,2],[670,2],[670,2],[670,2],[670,2],[670,2],[670,2],[670,2],[670,2],[670,2],[666,2],[666,4],[671,2],[671,4],[671,4],[671,3],[671,4],[671,3],[671,4],[671,4],[671,3],[671,4],[671,3],[672,1],[672,1],[796,1],[796,2],[797,1],[797,2],[797,3],[797,3],[797,2],[798,4],[799,2],[799,3],[799,4],[799,4],[799,3],[799,3],[799,4],[799,2],[799,3],[799,2],[799,3],[799,3],[799,4],[799,3],[799,4],[799,4],[799,5],[799,4],[799,3],[407,1],[407,1],[407,1],[407,1],[407,1],[407,1],[407,1],[422,1],[422,1],[422,1],[422,1],[422,1],[422,1],[422,1],[422,2],[800,6],[800,5],[800,6],[807,3],[807,4],[807,5],[807,5],[807,6],[807,6],[801,7],[808,4],[808,5],[808,5],[808,6],[808,7],[802,7],[802,6],[802,7],[802,5],[802,5],[802,4],[802,2],[802,2],[802,2],[802,2],[802,3],[802,3],[809,1],[809,7],[809,4],[809,2],[809,2],[809,2],[809,2],[809,3],[809,4],[809,3],[809,3],[809,7],[809,7],[809,7],[809,8],[809,7],[809,5],[809,6],[809,6],[809,6],[809,4],[809,5],[809,5],[809,5],[809,2],[809,2],[809,2],[809,2],[809,2],[809,3],[809,4],[809,4],[809,3],[809,3],[809,3],[809,4],[809,3],[826,1],[826,6],[826,1],[826,2],[826,2],[826,2],[826,2],[826,2],[826,3],[826,3],[826,4],[826,5],[835,2],[835,2],[835,1],[835,1],[835,2],[835,3],[835,4],[835,3],[835,4],[835,2],[835,3],[835,3],[835,2],[835,3],[835,3],[835,3],[835,6],[835,4],[835,7],[835,6],[835,2],[835,2],[827,6],[827,5],[827,5],[836,3],[836,4],[836,5],[836,5],[836,6],[836,3],[836,4],[836,5],[836,5],[855,1],[855,1],[855,1],[855,1],[855,1],[854,0],[854,1],[858,3],[859,3],[860,1],[860,3],[861,1],[861,3],[861,5],[861,3],[862,3],[863,1],[829,3],[829,2],[829,3],[829,4],[829,3],[829,3],[829,4],[829,2],[829,1],[829,1],[829,4],[829,2],[829,6],[837,1],[837,3],[837,6],[837,7],[837,6],[837,5],[837,4],[837,4],[837,2],[837,2],[837,3],[837,2],[837,2],[837,4],[837,3],[837,3],[837,4],[837,5],[837,4],[837,5],[837,4],[870,0],[870,2],[880,2],[871,0],[871,4],[881,2],[881,3],[869,4],[877,4],[877,5],[885,1],[885,1],[843,5],[851,2],[851,3],[851,4],[851,5],[851,5],[851,2],[851,5],[888,4],[888,4],[889,4],[889,4],[890,3],[890,5],[891,3],[891,5],[828,4],[828,3],[828,3],[828,5],[828,6],[828,3],[838,3],[838,4],[838,5],[838,3],[838,2],[838,4],[838,5],[838,5],[838,5],[838,2],[838,3],[838,3],[818,3],[830,3],[830,3],[847,1],[847,1],[864,1],[864,1],[819,1],[819,1],[831,1],[831,1],[839,1],[839,1],[876,0],[876,2],[898,1],[898,1],[879,2],[879,2],[874,0],[874,1],[824,1],[824,1],[872,1],[872,1],[873,2],[873,1],[882,3],[867,1],[867,1],[844,1],[844,1],[892,1],[892,3],[894,1],[894,3],[894,5],[894,3],[894,3],[894,3],[894,5],[893,0],[893,1],[820,0],[820,1],[900,1],[900,2],[832,1],[832,2],[832,2],[832,3],[902,2],[902,2],[901,2],[846,3],[852,3],[903,1],[903,3],[904,1],[904,3],[904,5],[904,3],[905,3],[906,1],[906,1],[906,3],[906,3],[906,3],[842,0],[842,1],[853,2],[853,3],[803,4],[803,3],[803,4],[803,6],[810,1],[810,2],[810,3],[810,3],[810,3],[810,3],[810,4],[908,3],[909,3],[909,3],[804,4],[811,2],[811,3],[811,4],[811,4],[805,2],[812,2],[806,6],[813,2],[813,3],[813,4],[813,5],[813,6],[911,1],[911,1],[408,9],[423,2],[423,3],[423,4],[423,4],[423,5],[423,6],[423,10],[423,10],[423,10],[423,4],[423,9],[423,9],[423,9],[423,9],[423,9],[912,0],[912,1],[915,2],[917,2],[913,0],[913,1],[916,2],[918,2],[914,0],[914,1],[409,3],[409,3],[424,2],[424,3],[424,4],[424,3],[424,3],[410,2],[410,3],[425,2],[425,3],[425,3],[425,3],[411,5],[411,5],[426,2],[426,3],[426,3],[426,4],[426,6],[426,5],[426,5],[426,5],[426,3],[426,5],[426,4],[426,5],[426,6],[426,5],[412,1],[412,1],[412,1],[412,1],[412,1],[412,1],[412,1],[427,1],[427,1],[427,1],[427,1],[427,1],[427,1],[427,4],[923,3],[923,5],[930,4],[930,3],[930,5],[930,4],[930,6],[936,3],[939,3],[939,3],[937,0],[937,1],[941,2],[942,2],[942,2],[942,3],[942,3],[940,1],[938,0],[938,1],[943,3],[943,2],[943,2],[815,3],[945,1],[945,3],[946,3],[924,7],[948,0],[948,2],[931,6],[931,6],[931,5],[947,12],[950,12],[950,12],[950,12],[950,12],[950,12],[950,12],[950,12],[950,12],[950,12],[950,13],[950,12],[950,12],[951,2],[959,2],[959,2],[965,0],[965,1],[965,2],[965,2],[966,1],[966,2],[966,2],[966,2],[849,3],[849,5],[886,3],[886,5],[886,5],[968,1],[968,3],[970,1],[970,3],[970,3],[970,5],[970,2],[970,4],[970,4],[970,6],[875,3],[878,3],[878,3],[878,3],[973,0],[973,1],[976,1],[976,2],[975,1],[975,2],[975,2],[975,3],[977,1],[977,2],[977,2],[977,2],[977,2],[977,2],[977,1],[977,1],[978,1],[978,2],[972,1],[972,1],[972,1],[972,1],[972,1],[972,1],[972,1],[972,1],[972,1],[974,1],[974,1],[974,1],[974,1],[981,4],[985,3],[989,4],[989,4],[982,6],[986,3],[990,6],[990,4],[990,6],[990,5],[983,4],[987,3],[991,4],[994,1],[994,3],[995,1],[995,2],[995,3],[995,3],[995,5],[996,4],[997,5],[997,4],[997,4],[997,4],[997,3],[997,3],[984,4],[988,3],[992,4],[999,1],[999,3],[1000,1],[1000,2],[1000,3],[1000,3],[1000,5],[1001,2],[1001,2],[1001,1],[1001,1],[993,1],[993,1],[969,1],[969,1],[969,3],[969,5],[971,1],[971,1],[971,3],[971,5],[971,5],[971,5],[971,3],[971,3],[971,4],[822,4],[833,1],[833,2],[833,3],[833,4],[833,4],[823,9],[834,2],[834,3],[834,4],[834,5],[834,5],[834,6],[834,7],[834,8],[834,10],[1006,0],[1006,1],[1006,1],[1002,2],[1003,1],[1003,2],[1003,2],[979,2],[980,2],[1004,2],[1005,2],[952,0],[952,1],[1007,3],[1007,5],[1007,6],[960,2],[960,3],[960,3],[960,2],[960,2],[960,3],[960,4],[960,5],[960,4],[960,5],[960,6],[953,0],[953,1],[1010,3],[961,2],[961,3],[1008,3],[1009,3],[1009,3],[1011,1],[1011,3],[1012,1],[1012,3],[1012,5],[1012,3],[1012,5],[1013,6],[1013,4],[1013,4],[1013,3],[1014,2],[1014,2],[1014,3],[1014,2],[1014,3],[1014,4],[1014,4],[1014,5],[1014,6],[1014,6],[1014,3],[1014,4],[1014,4],[1015,1],[1015,1],[954,0],[954,1],[840,7],[850,2],[850,4],[850,7],[850,5],[850,7],[850,7],[850,4],[1016,0],[1016,3],[1017,2],[1017,3],[1018,3],[1019,3],[1020,1],[1020,3],[1021,1],[1021,3],[1021,3],[1021,5],[1022,2],[1023,3],[1023,2],[1023,2],[955,0],[955,1],[1024,5],[1024,6],[962,2],[962,4],[841,3],[1025,1],[1025,3],[956,0],[956,1],[1026,1],[1026,4],[1026,3],[963,2],[963,1],[963,2],[963,3],[963,3],[963,5],[963,4],[1029,0],[1029,1],[1027,3],[1030,3],[865,1],[865,4],[865,1],[865,1],[865,1],[865,1],[865,1],[865,1],[865,1],[865,1],[865,1],[865,1],[865,1],[865,1],[1028,1],[1028,1],[1031,1],[1031,1],[1033,1],[1033,2],[1034,1],[1035,6],[1036,6],[1036,6],[1036,6],[1036,6],[1036,6],[868,3],[883,3],[883,3],[1037,0],[1037,4],[1037,7],[1042,2],[1042,3],[1042,6],[1038,0],[1038,5],[1043,2],[1043,3],[1043,4],[1039,0],[1039,5],[1044,2],[1044,3],[1044,4],[1040,0],[1040,4],[1045,2],[1045,3],[1041,0],[1041,4],[1046,2],[1046,3],[866,0],[866,1],[1048,3],[1048,3],[884,2],[884,3],[957,0],[957,1],[1049,2],[1050,0],[1050,2],[958,0],[958,3],[964,3],[964,3],[1051,0],[925,9],[932,4],[932,10],[932,3],[932,7],[932,8],[932,9],[932,9],[932,9],[927,1],[927,1],[927,1],[927,1],[933,1],[933,1],[933,1],[933,1],[1054,8],[1058,4],[1058,9],[1058,6],[1058,7],[1058,8],[1058,3],[1058,5],[1058,6],[1058,7],[1058,8],[1058,8],[1058,8],[1058,8],[1055,16],[1059,3],[1059,17],[1059,5],[1059,4],[1059,16],[1059,6],[1059,16],[1059,7],[1059,8],[1059,10],[1059,11],[1059,17],[1059,7],[1059,9],[1059,9],[1059,10],[1059,10],[1059,16],[1059,16],[1059,16],[1059,16],[1059,16],[1059,16],[1059,16],[1059,16],[1059,16],[1059,16],[1056,6],[1060,4],[1060,6],[1060,7],[1057,6],[1061,5],[1062,2],[1062,4],[1065,3],[1065,4],[1085,1],[1085,3],[1087,1],[1087,3],[1087,3],[1087,5],[1086,0],[1086,1],[1063,2],[1066,2],[1064,3],[1067,0],[1067,3],[1075,3],[1068,3],[1076,3],[1069,3],[1077,3],[1070,0],[1070,3],[1078,3],[1071,0],[1071,3],[1079,3],[1072,0],[1072,3],[1080,3],[1073,0],[1073,3],[1081,3],[1074,0],[1074,2],[1082,2],[1088,1],[1089,1],[1083,0],[1083,2],[1084,2],[1090,1],[1090,3],[1091,2],[1092,1],[1092,1],[1092,1],[910,1],[910,1],[1052,0],[1052,1],[1094,3],[1053,3],[1095,2],[1095,4],[1096,3],[1096,5],[1096,5],[1096,7],[926,3],[1097,1],[1097,1],[1097,1],[928,16],[1098,1],[1104,1],[934,4],[934,5],[934,6],[934,6],[934,7],[934,8],[934,9],[934,16],[934,16],[934,16],[934,16],[934,16],[934,16],[934,16],[934,17],[1100,1],[1106,1],[1101,0],[1101,3],[1107,2],[1107,3],[1102,0],[1102,2],[1103,0],[1103,3],[1108,2],[1108,3],[1108,3],[1099,3],[1105,3],[1109,1],[1109,3],[1110,1],[1110,3],[1110,3],[1110,5],[929,6],[935,5],[935,6],[935,6],[935,6],[1111,2],[1111,3],[1112,3],[1113,1],[1113,3],[1114,1],[1114,3],[1114,3],[1114,5],[1115,2],[1116,2],[1116,2],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[21,1],[21,1],[21,1],[21,1],[21,1],[21,2],[21,2],[21,2],[21,2],[21,1],[21,1],[21,1],[21,1],[21,1],[413,1],[413,1],[413,1],[413,1],[413,1],[413,1],[413,1],[413,1],[413,1],[428,1],[428,1],[428,1],[428,1],[428,1],[428,1],[428,1],[428,1],[428,2],[1136,5],[1145,3],[1145,3],[1145,4],[1145,5],[1145,5],[1145,6],[1137,1],[1137,1],[1146,1],[1146,1],[1153,5],[1153,6],[1155,4],[1155,5],[1155,6],[1155,3],[1155,6],[1155,5],[1155,3],[1155,7],[1155,4],[1155,6],[1155,5],[1155,6],[1154,4],[1154,5],[1156,4],[1156,5],[1156,3],[1156,4],[1156,4],[1156,5],[1156,4],[1138,3],[1139,3],[1139,5],[1147,3],[1147,3],[1147,4],[1147,5],[1147,3],[1147,4],[1147,4],[1147,5],[1147,5],[1147,5],[1140,5],[1148,3],[1148,4],[1148,5],[1148,5],[1148,6],[1157,0],[1157,1],[1157,1],[1141,6],[1149,4],[1149,3],[1149,5],[1149,6],[1149,6],[1142,5],[1150,3],[1150,5],[1150,4],[1143,4],[1151,4],[1151,5],[1151,3],[1151,4],[1151,4],[1144,5],[1152,2],[1152,5],[1152,4],[1152,5],[1152,6],[1152,5],[1152,6],[1152,5],[1117,4],[1124,2],[1124,3],[1124,5],[1124,4],[1124,4],[1118,5],[1125,3],[1125,2],[1125,4],[1125,6],[1125,3],[1125,5],[1125,5],[1125,5],[1159,0],[1159,1],[1160,1],[414,3],[429,2],[1161,1],[1161,3],[415,6],[415,5],[415,6],[415,6],[415,7],[415,8],[430,2],[430,3],[430,3],[430,4],[430,5],[430,5],[430,7],[430,6],[430,3],[430,4],[430,4],[430,6],[430,5],[430,5],[430,5],[430,7],[430,6],[430,2],[430,4],[430,5],[430,2],[430,3],[430,4],[430,4],[430,5],[430,6],[430,8],[430,7],[430,9],[430,8],[1163,0],[1163,2],[1171,2],[1171,2],[1177,2],[1177,2],[1177,1],[1178,2],[1178,2],[1178,2],[1178,1],[1169,2],[1169,2],[1169,2],[1169,2],[1176,2],[1176,2],[1176,2],[1162,1],[1162,3],[1170,1],[1170,3],[1170,3],[1170,5],[1170,3],[1170,3],[1170,5],[1179,2],[1180,2],[1181,1],[1181,1],[1181,1],[1181,1],[1181,1],[1181,1],[1181,1],[1181,1],[1181,1],[1181,1],[1181,1],[1168,1],[1168,1],[1168,1],[1168,1],[1168,1],[1168,1],[1168,2],[1175,2],[1164,1],[1164,3],[1172,3],[1172,3],[1172,5],[816,2],[816,2],[816,2],[817,2],[817,2],[817,2],[1166,1],[1166,3],[1165,0],[1165,3],[1165,3],[1173,2],[1173,3],[1173,3],[1167,0],[1167,3],[1174,2],[1174,3],[416,5],[416,8],[416,4],[416,5],[416,7],[416,8],[416,5],[416,6],[416,6],[416,7],[431,2],[431,2],[431,3],[431,4],[431,5],[431,5],[431,3],[431,4],[431,5],[431,5],[431,6],[431,7],[431,8],[431,8],[431,3],[431,4],[431,4],[431,4],[431,5],[431,5],[431,4],[431,5],[431,6],[431,7],[431,7],[431,7],[431,8],[431,8],[431,3],[431,4],[431,2],[431,4],[431,5],[431,2],[431,3],[431,4],[431,4],[431,5],[431,6],[1186,1],[1186,2],[1188,2],[1119,1],[1119,1],[1119,1],[1119,2],[1119,2],[1119,1],[1129,2],[1129,2],[1129,3],[1126,1],[1126,2],[1126,2],[1126,2],[1126,2],[1126,1],[1126,2],[1126,3],[1126,2],[1126,3],[1126,3],[1191,6],[1191,7],[1191,5],[1191,6],[1194,2],[1194,4],[1194,6],[1194,6],[1194,6],[1194,4],[1194,7],[1194,7],[1194,7],[1194,5],[1194,5],[1194,5],[1194,4],[1194,6],[1194,6],[1194,6],[1192,1],[1192,2],[1195,1],[1195,2],[1195,2],[1195,3],[1202,3],[1203,1],[1203,3],[1203,2],[1203,3],[1203,3],[1189,7],[1189,6],[1127,2],[1127,4],[1127,4],[1127,5],[1127,6],[1204,1],[1204,3],[1207,3],[1206,0],[1206,1],[1198,0],[1198,3],[1200,2],[1200,3],[1200,3],[1193,4],[1196,5],[1196,4],[1196,4],[1197,0],[1197,1],[1130,1],[1128,1],[1209,4],[1209,3],[1210,1],[1210,3],[1210,4],[1210,4],[1210,4],[1210,3],[1210,3],[1211,1],[1211,1],[1214,1],[1214,1],[1216,5],[1218,2],[1218,4],[1218,6],[1218,5],[1218,5],[1217,6],[1219,2],[1219,4],[1219,7],[1219,6],[1219,6],[1219,6],[1222,1],[1222,1],[1221,0],[1221,1],[1212,0],[1212,1],[1212,1],[1213,1],[1213,3],[1215,1],[1215,3],[1215,5],[1215,3],[1224,3],[1225,3],[1225,3],[1190,4],[1131,1],[1131,2],[1131,3],[1131,3],[1131,4],[1131,4],[1226,9],[1228,2],[1228,3],[1228,3],[1228,4],[1228,5],[1228,6],[1228,7],[1228,7],[1228,8],[1228,9],[1230,3],[1230,1],[1231,3],[1231,3],[1231,1],[1227,1],[1227,2],[1227,3],[1229,1],[1229,2],[1229,2],[1229,3],[1229,3],[1232,6],[1233,3],[1233,5],[1233,4],[1233,6],[1233,6],[1234,0],[1234,2],[1236,2],[1235,3],[1235,1],[1235,3],[1237,2],[1237,3],[1237,2],[1120,10],[1132,2],[1132,4],[1132,6],[1132,7],[1132,8],[1132,9],[1132,10],[1132,11],[1132,10],[1132,10],[1244,0],[1244,1],[1244,1],[1242,0],[1242,1],[1240,1],[1240,1],[1241,1],[1241,1],[1243,1],[1243,1],[1121,6],[1133,3],[1133,3],[1133,2],[1133,6],[1133,6],[1133,7],[1133,7],[1133,6],[1133,7],[1247,0],[1247,1],[1248,4],[1248,3],[1249,2],[1249,3],[1249,4],[1249,4],[1249,2],[1249,3],[1249,3],[1122,7],[1122,12],[1134,2],[1134,3],[1134,3],[1134,5],[1134,4],[1134,7],[1134,8],[1134,9],[1134,7],[1134,12],[1134,8],[1134,13],[1134,7],[1134,12],[1134,12],[418,4],[418,2],[1250,1],[1250,3],[856,1],[856,1],[856,2],[856,1],[856,1],[856,1],[856,1],[417,3],[417,3],[417,3],[432,3],[419,1],[419,1],[419,1],[419,1],[419,1],[419,1],[419,1],[419,1],[419,1],[419,1],[419,1],[419,1],[419,1],[419,1],[419,1],[419,1],[419,1],[419,1],[419,1],[419,1],[1271,1],[1271,1],[433,2],[433,3],[433,4],[433,1],[433,1],[433,1],[433,1],[433,1],[433,1],[433,1],[433,1],[433,1],[433,1],[433,1],[433,1],[433,1],[433,1],[433,1],[433,1],[1251,4],[1273,3],[1273,4],[1273,4],[1252,4],[1252,6],[1274,3],[1274,4],[1274,4],[1274,5],[1274,6],[1274,5],[1274,6],[1274,6],[1253,2],[1254,3],[1255,4],[1275,3],[1275,4],[1275,4],[1275,4],[1289,1],[1289,1],[1256,3],[1256,3],[1276,3],[1276,3],[1257,4],[1257,3],[1277,3],[1258,5],[1278,3],[1278,4],[1278,5],[1278,6],[1278,5],[1278,5],[1259,2],[1259,3],[1259,4],[1259,6],[1279,3],[1279,4],[1279,5],[1279,6],[1279,6],[1279,6],[1260,3],[1260,5],[1260,5],[1260,6],[1260,4],[1280,3],[1280,5],[1280,5],[1280,6],[1280,6],[1280,3],[1290,0],[1290,1],[1291,1],[1291,2],[1261,4],[1261,6],[1281,2],[1281,2],[1281,4],[1281,6],[1281,3],[1281,4],[1281,4],[1281,5],[1281,6],[1281,6],[1281,6],[1262,3],[1262,4],[1262,4],[1262,5],[1262,4],[1282,3],[1282,3],[1282,4],[1282,4],[1282,4],[1282,5],[1282,5],[1282,4],[1263,3],[1263,4],[1263,3],[1263,4],[1283,3],[1283,3],[1283,4],[1283,4],[1283,3],[1283,3],[1283,4],[1283,4],[1264,5],[1264,5],[1284,3],[1284,3],[1284,5],[1284,4],[1284,5],[1284,4],[1284,5],[1265,2],[1265,2],[1266,6],[1266,7],[1285,3],[1285,4],[1285,4],[1285,5],[1285,6],[1285,6],[1285,6],[1285,7],[1285,7],[1285,7],[1285,7],[1285,8],[1285,3],[1285,4],[1285,4],[1285,4],[1267,3],[1267,4],[1267,5],[1286,4],[1268,3],[1268,6],[1287,3],[1287,3],[1269,2],[1270,4],[1288,5],[1288,4],[1288,4],[1292,0],[1292,2],[1292,2],[1294,2],[1294,2],[1293,0],[1293,2],[1295,2],[1123,6],[1135,6],[1135,6],[1135,6],[1135,6],[1135,7],[1135,3],[1135,2],[1135,2],[1135,2],[1296,1],[1298,1],[1300,1],[1301,1],[1238,1],[1238,3],[1239,1],[1239,3],[1239,3],[1239,5],[1302,3],[1303,3],[1303,2],[1303,1],[1304,1],[1305,1],[1306,1],[1297,0],[1297,2],[1299,2],[1299,2],[1307,1],[1307,1],[420,2],[434,2]], +performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { +/* this == yyval */ + +var $0 = $$.length - 1; +switch (yystate) { +case 2: case 3: + + return parser.yy.result; + +break; +case 4: + + parser.prepareNewStatement(); + +break; +case 6: case 8: case 10: + + parser.addStatementLocation(_$[$0]); + +break; +case 9: case 11: + + parser.addStatementLocation(_$[$0-3]); + +break; +case 18: + + if (parser.isHive()) { + parser.suggestDdlAndDmlKeywords(['EXPLAIN', 'FROM']); + } else if (parser.isImpala()) { + parser.suggestDdlAndDmlKeywords(['EXPLAIN']); + } else { + parser.suggestDdlAndDmlKeywords(); + } + +break; +case 19: + + if (parser.isHive() || parser.isImpala()) { + parser.suggestKeywords(['INSERT', 'SELECT']); + } else { + parser.suggestKeywords(['SELECT']); + } + +break; +case 169: + + if (!$$[$0-1]) { + parser.suggestDdlAndDmlKeywords([{ value: 'AUTHORIZATION', weight: 2 }, { value: 'DEPENDENCY', weight: 2 }, { value: 'EXTENDED', weight: 2 }]); + } else { + parser.suggestDdlAndDmlKeywords(); + } + +break; +case 170: + + parser.suggestDdlAndDmlKeywords(); + +break; +case 543: + + parser.suggestSetOptions(); + if (parser.isHive()) { + parser.suggestKeywords(['ROLE']); + } + if (parser.isImpala()) { + parser.suggestKeywords(['ALL']); + } + +break; +case 611: case 614: case 719: case 760: case 852: case 1059: case 1242: case 1351: case 1408: case 2524: case 2526: case 3026: +this.$ = $$[$0-1]; +break; +case 612: case 615: case 761: +this.$ = ''; +break; +case 636: + + parser.suggestKeywords(['INDEX', 'INDEXES']); + +break; +case 637: + + parser.suggestKeywords(['FORMATTED']); + +break; +case 654: case 657: + + parser.yy.correlatedSubQuery = false; + +break; +case 655: case 659: + + parser.suggestKeywords(['EXISTS']); + +break; +case 658: + + parser.suggestKeywords(['NOT EXISTS']); + +break; +case 669: case 671: case 672: case 674: + + parser.suggestKeywords(['<', '<=', '<>', '=', '>', '>=']); + +break; +case 670: case 673: case 3053: + + parser.suggestKeywords(['VALUES']); + +break; +case 697: case 701: case 705: case 741: case 742: case 787: case 790: case 961: case 1030: case 1772: case 1870: case 1889: case 1935: case 1937: case 2307: case 2564: case 3343: + + parser.suggestColumns(); + +break; +case 709: case 762: + + parser.addTableLocation(_$[$0], [ { name: $$[$0] } ]); + this.$ = { identifierChain: [ { name: $$[$0] } ] }; + +break; +case 710: case 763: + + parser.addDatabaseLocation(_$[$0-2], [ { name: $$[$0-2] } ]); + parser.addTableLocation(_$[$0], [ { name: $$[$0-2] }, { name: $$[$0] } ]); + this.$ = { identifierChain: [ { name: $$[$0-2] }, { name: $$[$0] } ] }; + +break; +case 711: + + // This is a special case for Impala expression like "SELECT | FROM db.table.col" + this.$ = { identifierChain: [ { name: $$[$0-3] }, { name: $$[$0-1] } ].concat($$[$0]) }; + +break; +case 712: case 1676: case 1842: case 2009: case 2015: case 2024: case 2215: case 2537: case 2561: case 2664: case 2669: case 2687: case 2710: case 2717: case 2774: case 2782: case 3060: case 3091: case 3094: case 3100: case 3329: case 3349: + + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + +break; +case 713: case 727: + + parser.suggestDatabases(); + this.$ = { identifierChain: [{ name: $$[$0-2] }] }; + +break; +case 714: + + // In Impala you can have statements like 'SELECT ... FROM testTable t, t.|' + parser.suggestTablesOrColumns($$[$0-2]); + +break; +case 715: + + // TODO: switch to suggestColumns, it's currently handled in sqlAutocompleter2.js + // Issue is that suggestColumns is deleted if no tables are defined and this is + // Impala only cases like "SELECT | FROM db.table.col" + parser.suggestTables({ identifierChain: [{ name: $$[$0-3] }, { name: $$[$0-1] }].concat($$[$0]) }); + +break; +case 716: case 890: +this.$ = [$$[$0]]; +break; +case 717: + + $$[$0-1].push($$[$0]); + +break; +case 718: case 721: +this.$ = []; +break; +case 720: case 854: case 1244: +this.$ = $$[$0-2]; +break; +case 722: +this.$ = { name: $$[$0] }; +break; +case 726: case 1727: case 1954: + + parser.suggestDatabases({ appendDot: true }); + +break; +case 730: case 1968: case 2005: case 2773: case 2781: case 3183: case 3243: case 3257: case 3315: case 3316: case 3354: + + parser.suggestDatabases(); + +break; +case 740: case 966: case 967: case 973: case 974: case 1347: case 1435: case 3011: case 3047: + + parser.valueExpressionSuggest(); + +break; +case 748: case 751: + + if (!$$[$0]) { + this.$ = { suggestKeywords: ['WITH REPLICATION ='] }; + } + +break; +case 753: case 3201: + + parser.suggestKeywords(['IN']); + +break; +case 757: + + parser.suggestKeywords(['REPLICATION =']); + +break; +case 758: case 1710: case 1867: case 2268: + + parser.suggestKeywords(['=']); + +break; +case 764: case 3306: + + parser.suggestTables(); + parser.suggestDatabases({ prependDot: true }); + +break; +case 765: + + parser.suggestTablesOrColumns($$[$0-2]); + +break; +case 767: +this.$ = { identifierChain: $$[$0-1].identifierChain, alias: $$[$0] }; +break; +case 770: + + parser.yy.locations[parser.yy.locations.length - 1].type = 'column'; + +break; +case 771: case 1195: + + parser.addAsteriskLocation(_$[$0], $$[$0-2].concat({ asterisk: true })); + +break; +case 773: + + this.$ = [ $$[$0].identifier ]; + parser.yy.firstChainLocation = parser.addUnknownLocation($$[$0].location, [ $$[$0].identifier ]); + +break; +case 774: + + if (parser.yy.firstChainLocation) { + parser.yy.firstChainLocation.firstInChain = true; + delete parser.yy.firstChainLocation; + } + $$[$0-2].push($$[$0].identifier); + parser.addUnknownLocation($$[$0].location, $$[$0-2].concat()); + +break; +case 775: case 783: + + if ($$[$0].insideKey) { + parser.suggestKeyValues({ identifierChain: [ $$[$0].identifier ] }); + parser.suggestColumns(); + parser.suggestFunctions(); + } + +break; +case 776: case 784: + + if ($$[$0].insideKey) { + parser.suggestKeyValues({ identifierChain: $$[$0-2].concat([ $$[$0].identifier ]) }); + parser.suggestColumns(); + parser.suggestFunctions(); + } + +break; +case 779: + + parser.suggestColumns({ + identifierChain: $$[$0-2] + }); + this.$ = { suggestKeywords: [{ value: '*', weight: 10000 }] }; + +break; +case 780: + + parser.suggestColumns({ + identifierChain: $$[$0-4] + }); + this.$ = { suggestKeywords: [{ value: '*', weight: 10000 }] }; + +break; +case 781: +this.$ = [ $$[$0].identifier ]; +break; +case 782: + + $$[$0-2].push($$[$0].identifier); + +break; +case 785: + + if ($$[$0-2].insideKey) { + parser.suggestKeyValues({ identifierChain: $$[$0-4].concat([ $$[$0-2].identifier ]) }); + parser.suggestColumns(); + parser.suggestFunctions(); + } + +break; +case 786: + + if ($$[$0-2].insideKey) { + parser.suggestKeyValues({ identifierChain: [ $$[$0-2].identifier ] }); + parser.suggestColumns(); + parser.suggestFunctions(); + } + +break; +case 788: + + parser.suggestColumns({ identifierChain: $$[$0-2] }); + +break; +case 789: + + parser.suggestColumns({ identifierChain: $$[$0-4] }); + +break; +case 791: +this.$ = { identifier: { name: $$[$0] }, location: _$[$0] };; +break; +case 792: +this.$ = { identifier: { name: $$[$0-3], keySet: true }, location: _$[$0-3] }; +break; +case 793: +this.$ = { identifier: { name: $$[$0-2], keySet: true }, location: _$[$0-2] }; +break; +case 794: +this.$ = { identifier: { name: $$[$0-3] }, insideKey: true }; +break; +case 795: +this.$ = { identifier: { name: $$[$0-3] }};; +break; +case 828: + + parser.addTablePrimary($$[$0-2]); + parser.addColumnLocation(_$[$0-1], $$[$0-1]); + +break; +case 829: case 1678: case 1977: case 1999: case 2013: case 2027: case 2217: case 2663: case 2673: case 2674: case 2699: case 2705: case 2708: case 2713: case 3054: case 3063: case 3064: case 3093: case 3103: case 3200: case 3246: case 3247: case 3259: case 3261: + + parser.addTablePrimary($$[$0-1]); + +break; +case 830: case 846: case 2000: + + parser.addDatabaseLocation(_$[$0], [{ name: $$[$0] }]); + +break; +case 833: case 1674: case 2012: case 2019: case 2020: case 3248: + + parser.addTablePrimary($$[$0-2]); + +break; +case 834: + + if (!$$[$0-4]) { + parser.suggestKeywords(['EXTENDED', 'FORMATTED']); + } + +break; +case 835: + + if (!$$[$0-3]) { + parser.suggestKeywords(['EXTENDED', 'FORMATTED']); + } + +break; +case 836: + + parser.addTablePrimary($$[$0-2]); + parser.suggestColumns(); + if (!$$[$0]) { + parser.suggestKeywords(['PARTITION']); + } + +break; +case 837: + + if (!$$[$0]) { + parser.suggestKeywords(['PARTITION']); + } + +break; +case 840: + + if (!$$[$0-1]) { + parser.suggestKeywords(['DATABASE', 'EXTENDED', 'FORMATTED', 'FUNCTION', 'SCHEMA']); + } + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + +break; +case 841: case 843: + + if (!$$[$0-1]) { + parser.suggestKeywords(['EXTENDED']); + } + +break; +case 842: case 844: + + if (!$$[$0-2]) { + parser.suggestKeywords(['EXTENDED']); + } + +break; +case 845: case 1872: case 1955: case 1958: case 2007: case 2533: case 2662: case 2683: case 2693: case 2697: case 2771: case 2772: case 2778: case 3027: case 3096: case 3170: case 3186: case 3245: case 3258: case 3260: case 3303: case 3332: + + parser.addTablePrimary($$[$0]); + +break; +case 847: + + if (!$$[$0-1]) { + parser.suggestKeywords([{ value: 'DATABASE', weight: 2 }, { value: 'EXTENDED', weight: 1 }, { value: 'FORMATTED', weight: 1 }]); + } + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + +break; +case 849: + + parser.addTablePrimary($$[$0]); + if (!$$[$0-2]) { + parser.suggestKeywords([{ value: 'DATABASE', weight: 2 }, { value: 'EXTENDED', weight: 1 }, { value: 'FORMATTED', weight: 1 }]); + } + +break; +case 850: + + if (!$$[$0-1]) { + parser.suggestKeywords(['EXTENDED', 'FORMATTED']); + } + parser.suggestDatabases(); + +break; +case 851: + + if (!$$[$0-2]) { + parser.suggestKeywords(['EXTENDED', 'FORMATTED']); + } + parser.addDatabaseLocation(_$[$0], [{ name: $$[$0] }]); + +break; +case 857: + + parser.addCommonTableExpressions($$[$0-3]); + +break; +case 858: case 859: case 893: + + parser.addCommonTableExpressions($$[$0-2]); + +break; +case 863: + + parser.addClauseLocation('selectList', parser.firstDefined($$[$0-1], _$[$0-1], $$[$0-2], _$[$0-2], $$[$0-3], _$[$0-3]), _$[$0]); + this.$ = { selectList: $$[$0] }; + +break; +case 864: + + parser.addClauseLocation('selectList', parser.firstDefined($$[$0-2], _$[$0-2], $$[$0-3], _$[$0-3], $$[$0-4], _$[$0-4]), _$[$0-1]); + this.$ = { selectList: $$[$0-1], tableExpression: $$[$0] } + +break; +case 875: + + parser.suggestKeywords(['ALL', 'DISTINCT', 'SELECT']); + +break; +case 876: + + parser.suggestKeywords(['ALL', 'DISTINCT']); + +break; +case 878: + + parser.addClauseLocation('selectList', parser.firstDefined($$[$0-1], _$[$0-1], $$[$0-2], _$[$0-2], $$[$0-3], _$[$0-3]), _$[$0]); + if ($$[$0].cursorAtStart) { + var keywords = parser.getSelectListKeywords(); + if (!$$[$0-1] && !$$[$0-2]) { + keywords.push({ value: 'ALL', weight: 2 }); + keywords.push({ value: 'DISTINCT', weight: 2 }); + } + if (parser.isImpala() && !$$[$0-1]) { + keywords.push({ value: 'STRAIGHT_JOIN', weight: 1 }); + } + parser.suggestKeywords(keywords); + } else { + parser.checkForSelectListKeywords($$[$0]); + } + if ($$[$0].suggestFunctions) { + parser.suggestFunctions(); + } + if ($$[$0].suggestColumns) { + parser.suggestColumns({ identifierChain: [], source: 'select' }); + } + if ($$[$0].suggestTables) { + parser.suggestTables({ prependQuestionMark: true, prependFrom: true }); + } + if ($$[$0].suggestDatabases) { + parser.suggestDatabases({ prependQuestionMark: true, prependFrom: true, appendDot: true }); + } + if ($$[$0].suggestAggregateFunctions && (!$$[$0-2] || $$[$0-2] === 'ALL')) { + parser.suggestAggregateFunctions(); + parser.suggestAnalyticFunctions(); + } + +break; +case 879: + + parser.addClauseLocation('selectList', parser.firstDefined($$[$0-1], _$[$0-1], $$[$0-2], _$[$0-2], $$[$0-3], _$[$0-3]), _$[$0], true); + var keywords = parser.getSelectListKeywords(); + if (!$$[$0-2] || $$[$0-2] === 'ALL') { + parser.suggestAggregateFunctions(); + parser.suggestAnalyticFunctions(); + } + if (!$$[$0-1] && !$$[$0-2]) { + keywords.push({ value: 'ALL', weight: 2 }); + keywords.push({ value: 'DISTINCT', weight: 2 }); + } + if (parser.isImpala() && !$$[$0-1]) { + keywords.push({ value: 'STRAIGHT_JOIN', weight: 1 }); + } + parser.suggestKeywords(keywords); + parser.suggestFunctions(); + parser.suggestColumns({ identifierChain: [], source: 'select' }); + parser.suggestTables({ prependQuestionMark: true, prependFrom: true }); + parser.suggestDatabases({ prependQuestionMark: true, prependFrom: true, appendDot: true }); + +break; +case 880: + + parser.addClauseLocation('selectList', parser.firstDefined($$[$0-2], _$[$0-2], $$[$0-3], _$[$0-3], $$[$0-4], _$[$0-4]), _$[$0-1]); + +break; +case 881: + + parser.addClauseLocation('selectList', parser.firstDefined($$[$0-2], _$[$0-2], $$[$0-3], _$[$0-3], $$[$0-4], _$[$0-4]), _$[$0-1]); + parser.selectListNoTableSuggest($$[$0-1], $$[$0-3]); + if (parser.yy.result.suggestColumns) { + parser.yy.result.suggestColumns.source = 'select'; + } + +break; +case 882: + + parser.addClauseLocation('selectList', parser.firstDefined($$[$0-2], _$[$0-2], $$[$0-3], _$[$0-3], $$[$0-4], _$[$0-4]), _$[$0-1], true); + var keywords = parser.getSelectListKeywords(); + if (!$$[$0-3] || $$[$0-3] === 'ALL') { + parser.suggestAggregateFunctions(); + parser.suggestAnalyticFunctions(); + } + if (!$$[$0-2] && !$$[$0-3]) { + keywords.push({ value: 'ALL', weight: 2 }); + keywords.push({ value: 'DISTINCT', weight: 2 }); + } + if (parser.isImpala() && !$$[$0-2]) { + keywords.push({ value: 'STRAIGHT_JOIN', weight: 1 }); + } + parser.suggestKeywords(keywords); + parser.suggestFunctions(); + parser.suggestColumns({ identifierChain: [], source: 'select' }); + parser.suggestTables({ prependQuestionMark: true, prependFrom: true }); + parser.suggestDatabases({ prependQuestionMark: true, prependFrom: true, appendDot: true }); + +break; +case 883: + + parser.addClauseLocation('selectList', parser.firstDefined($$[$0-3], _$[$0-3], $$[$0-4], _$[$0-4], $$[$0-5], _$[$0-5]), _$[$0-2]); + parser.checkForSelectListKeywords($$[$0-2]); + +break; +case 884: + + parser.addClauseLocation('selectList', parser.firstDefined($$[$0-4], _$[$0-4], $$[$0-5], _$[$0-5], $$[$0-6], _$[$0-6]), _$[$0-3]); + parser.checkForSelectListKeywords($$[$0-3]); + +break; +case 885: + + parser.addClauseLocation('selectList', parser.firstDefined($$[$0-2], _$[$0-2], $$[$0-3], _$[$0-3], $$[$0-4], _$[$0-4]), _$[$0-1]); + parser.checkForSelectListKeywords($$[$0-1]); + var keywords = ['FROM']; + if (parser.yy.result.suggestKeywords) { + keywords = parser.yy.result.suggestKeywords.concat(keywords); + } + parser.suggestKeywords(keywords); + parser.suggestTables({ prependFrom: true }); + parser.suggestDatabases({ prependFrom: true, appendDot: true }); + +break; +case 888: case 933: case 964: case 977: case 981: case 1019: case 1023: case 1051: case 1077: case 1078: case 1159: case 1161: case 1229: case 1239: case 1246: case 1258: case 1433: case 1629: case 1630: case 1918: case 2088: case 2105: case 3046: case 3348: +this.$ = $$[$0]; +break; +case 891: +this.$ = $$[$0-2].concat([$$[$0]]);; +break; +case 895: + + parser.addCommonTableExpressions($$[$0-4]); + +break; +case 896: + + parser.addCteAliasLocation(_$[$0-4], $$[$0-4]); + $$[$0-1].alias = $$[$0-4]; + this.$ = $$[$0-1]; + +break; +case 897: case 1488: case 2327: case 2386: case 2463: case 2467: case 2540: + + parser.suggestKeywords(['AS']); + +break; +case 898: case 1354: case 1951: case 2400: case 2409: case 3028: + + parser.suggestKeywords(['SELECT']); + +break; +case 904: case 905: + + parser.addClauseLocation('whereClause', _$[$0-1], $$[$0].whereClauseLocation); + parser.addClauseLocation('limitClause', $$[$0].limitClausePreceding || _$[$0-1], $$[$0].limitClauseLocation); + +break; +case 906: + + var keywords = []; + + parser.addClauseLocation('whereClause', _$[$0-3], $$[$0-1].whereClauseLocation); + parser.addClauseLocation('limitClause', $$[$0-2].limitClausePreceding || _$[$0-3], $$[$0-2].limitClauseLocation); + + if ($$[$0-3]) { + if (!$$[$0-3].hasLateralViews && typeof $$[$0-3].tableReferenceList.hasJoinCondition !== 'undefined' && !$$[$0-3].tableReferenceList.hasJoinCondition) { + keywords.push({ value: 'ON', weight: 3 }); + if (parser.isImpala()) { + keywords.push({ value: 'USING', weight: 3 }); + } + } + if ($$[$0-3].suggestKeywords) { + keywords = parser.createWeightedKeywords($$[$0-3].suggestKeywords, 3); + } + if ($$[$0-3].tableReferenceList.suggestJoinConditions) { + parser.suggestJoinConditions($$[$0-3].tableReferenceList.suggestJoinConditions); + } + if ($$[$0-3].tableReferenceList.suggestJoins) { + parser.suggestJoins($$[$0-3].tableReferenceList.suggestJoins); + } + if (!$$[$0-3].hasLateralViews && $$[$0-3].tableReferenceList.suggestKeywords) { + keywords = keywords.concat(parser.createWeightedKeywords($$[$0-3].tableReferenceList.suggestKeywords, 3)); + } + + // Lower the weights for 'TABLESAMPLE' and 'LATERAL VIEW' + keywords.forEach(function (keyword) { + if (keyword.value === 'TABLESAMPLE' || keyword.value === 'LATERAL VIEW') { + keyword.weight = 1.1; + } + }); + + if (!$$[$0-3].hasLateralViews && $$[$0-3].tableReferenceList.types) { + var veKeywords = parser.getValueExpressionKeywords($$[$0-3].tableReferenceList); + keywords = keywords.concat(veKeywords.suggestKeywords); + if (veKeywords.suggestColRefKeywords) { + parser.suggestColRefKeywords(veKeywords.suggestColRefKeywords); + parser.addColRefIfExists($$[$0-3].tableReferenceList); + } + } + } + + if ($$[$0-1].empty && $$[$0] && $$[$0].joinType.toUpperCase() === 'JOIN') { + keywords = keywords.concat(['FULL', 'FULL OUTER', 'LEFT', 'LEFT OUTER', 'RIGHT', 'RIGHT OUTER']); + if (parser.isHive()) { + keywords = keywords.concat(['CROSS', 'INNER', 'LEFT SEMI']); + } else if (parser.isImpala()) { + keywords = keywords.concat(['ANTI', 'CROSS', 'INNER', 'LEFT ANTI', 'LEFT INNER', 'LEFT SEMI', 'OUTER', 'RIGHT ANTI', 'RIGHT INNER', 'RIGHT SEMI', 'SEMI']); + } else { + keywords.push('INNER'); + } + parser.suggestKeywords(keywords); + return; + } + + if ($$[$0-1].suggestKeywords) { + keywords = keywords.concat(parser.createWeightedKeywords($$[$0-1].suggestKeywords, 2)); + } + + if ($$[$0-1].suggestFilters) { + parser.suggestFilters($$[$0-1].suggestFilters); + } + if ($$[$0-1].suggestGroupBys) { + parser.suggestGroupBys($$[$0-1].suggestGroupBys); + } + if ($$[$0-1].suggestOrderBys) { + parser.suggestOrderBys($$[$0-1].suggestOrderBys); + } + + if ($$[$0-1].empty) { + keywords.push({ value: 'UNION', weight: 2.11 }); + } + + keywords = keywords.concat([ + { value: 'FULL JOIN', weight: 1 }, + { value: 'FULL OUTER JOIN', weight: 1 }, + { value: 'JOIN', weight: 1 }, + { value: 'LEFT JOIN', weight: 1 }, + { value: 'LEFT OUTER JOIN', weight: 1 }, + { value: 'RIGHT JOIN', weight: 1 }, + { value: 'RIGHT OUTER JOIN', weight: 1 } + ]); + if (parser.isHive()) { + keywords = keywords.concat([ + { value: 'CROSS JOIN', weight: 1 }, + { value: 'INNER JOIN', weight: 1 }, + { value: 'LEFT SEMI JOIN', weight: 1 } + ]); + } else if (parser.isImpala()) { + keywords = keywords.concat([ + { value: 'ANTI JOIN', weight: 1 }, + { value: 'INNER JOIN', weight: 1 }, + { value: 'LEFT ANTI JOIN', weight: 1 }, + { value: 'LEFT INNER JOIN', weight: 1 }, + { value: 'LEFT SEMI JOIN', weight: 1 }, + { value: 'OUTER JOIN', weight: 1 }, + { value: 'RIGHT ANTI JOIN', weight: 1 }, + { value: 'RIGHT INNER JOIN', weight: 1 }, + { value: 'RIGHT SEMI JOIN', weight: 1 }, + { value: 'SEMI JOIN', weight: 1 } + ]); + } else { + keywords.push({ value: 'INNER JOIN', weight: 1 }); + } + parser.suggestKeywords(keywords); + +break; +case 907: + + // A couple of things are going on here: + // - If there are no SelectConditions (WHERE, GROUP BY, etc.) we should suggest complete join options + // - If there's an OptionalJoin at the end, i.e. 'SELECT * FROM foo | JOIN ...' we should suggest + // different join types + // - The FromClause could end with a valueExpression, in which case we should suggest keywords like '=' + // or 'AND' based on type + + if (!$$[$0-1]) { + parser.addClauseLocation('whereClause', _$[$0-2]); + parser.addClauseLocation('limitClause', _$[$0-2]); + return; + } + parser.addClauseLocation('whereClause', _$[$0-2], $$[$0-1].whereClauseLocation); + parser.addClauseLocation('limitClause', $$[$0-1].limitClausePreceding || _$[$0-2], $$[$0-1].limitClauseLocation); + var keywords = []; + + if ($$[$0-1].suggestColRefKeywords) { + parser.suggestColRefKeywords($$[$0-1].suggestColRefKeywords); + parser.addColRefIfExists($$[$0-1]); + } + + if ($$[$0-1].suggestKeywords && $$[$0-1].suggestKeywords.length) { + keywords = keywords.concat(parser.createWeightedKeywords($$[$0-1].suggestKeywords, 2)); + } + + if ($$[$0-1].cursorAtEnd) { + keywords.push({ value: 'UNION', weight: 2.11 }); + } + parser.suggestKeywords(keywords); + +break; +case 911: + + if (parser.isHive()) { + this.$ = { tableReferenceList : $$[$0-1], suggestKeywords: ['LATERAL VIEW'] } + } else { + this.$ = { tableReferenceList : $$[$0-1] } + } + if (parser.isHive() && $$[$0]) { + parser.yy.lateralViews = $$[$0].lateralViews; + this.$.hasLateralViews = true; + if ($$[$0].suggestKeywords) { + this.$.suggestKeywords = this.$.suggestKeywords.concat($$[$0].suggestKeywords); + } + } + +break; +case 912: case 1251: + + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + +break; +case 913: + + if ($$[$0]) { + parser.yy.lateralViews = $$[$0].lateralViews; + } + +break; +case 915: + + var keywords = parser.getKeywordsForOptionalsLR( + [$$[$0-7], $$[$0-6], $$[$0-5], $$[$0-4], $$[$0-3], $$[$0-2], $$[$0-2], $$[$0-1], $$[$0]], + [{ value: 'WHERE', weight: 9 }, { value: 'GROUP BY', weight: 8 }, { value: 'HAVING', weight: 7 }, { value: 'WINDOW', weight: 6 }, { value: 'ORDER BY', weight: 5 }, [{ value: 'CLUSTER BY', weight: 4 }, { value: 'DISTRIBUTE BY', weight: 4 }], { value: 'SORT BY', weight: 4 }, { value: 'LIMIT', weight: 3 }, { value: 'OFFSET', weight: 2 }], + [true, true, true, parser.isHive(), true, parser.isHive(), parser.isHive() && !$$[$0-3], true, parser.isImpala()]); + + if (keywords.length > 0) { + this.$ = { suggestKeywords: keywords, empty: !$$[$0-7] && !$$[$0-6] && !$$[$0-5] && !$$[$0-4] && !$$[$0-3] && !$$[$0-2] && !$$[$0-1] && !$$[$0] }; + } else { + this.$ = {}; + } + + this.$.whereClauseLocation = $$[$0-7] ? _$[$0-7] : undefined; + this.$.limitClausePreceding = parser.firstDefined($$[$0-2], _$[$0-2], $$[$0-3], _$[$0-3], $$[$0-4], _$[$0-4], $$[$0-5], _$[$0-5], $$[$0-6], _$[$0-6], $$[$0-7], _$[$0-7]); + this.$.limitClauseLocation = $$[$0-1] ? _$[$0-1] : undefined; + + if (!$$[$0-7] && !$$[$0-6] && !$$[$0-5] && !$$[$0-4] && !$$[$0-3] && !$$[$0-2] && !$$[$0-1] && !$$[$0]) { + this.$.suggestFilters = { prefix: 'WHERE', tablePrimaries: parser.yy.latestTablePrimaries.concat() }; + } + if (!$$[$0-6] && !$$[$0-5] && !$$[$0-4] && !$$[$0-3] && !$$[$0-2] && !$$[$0-1] && !$$[$0]) { + this.$.suggestGroupBys = { prefix: 'GROUP BY', tablePrimaries: parser.yy.latestTablePrimaries.concat() }; + } + if (!$$[$0-3] && !$$[$0-2] && !$$[$0-1] && !$$[$0]) { + this.$.suggestOrderBys = { prefix: 'ORDER BY', tablePrimaries: parser.yy.latestTablePrimaries.concat() }; + } + +break; +case 916: + + if (parser.yy.result.suggestColumns) { + parser.yy.result.suggestColumns.source = 'where'; + } + +break; +case 917: + + if (parser.yy.result.suggestColumns) { + parser.yy.result.suggestColumns.source = 'group by'; + } + +break; +case 920: + + if (parser.yy.result.suggestColumns) { + parser.yy.result.suggestColumns.source = 'order by'; + } + +break; +case 924: + + var keywords = parser.getKeywordsForOptionalsLR( + [$$[$0-6], $$[$0-5], $$[$0-4], $$[$0-3], $$[$0-2], $$[$0-2], $$[$0-1], $$[$0]], + [{ value: 'GROUP BY', weight: 8 }, { value: 'HAVING', weight: 7 }, { value: 'WINDOW', weight: 6 }, { value: 'ORDER BY', weight: 5 }, [{ value: 'CLUSTER BY', weight: 4 }, { value: 'DISTRIBUTE BY', weight: 4 }], { value: 'SORT BY', weight: 4 }, { value: 'LIMIT', weight: 3 }, { value: 'OFFSET', weight: 2 }], + [true, true, parser.isHive(), true, parser.isHive(), parser.isHive() && !$$[$0-3], true, parser.isImpala()]); + if ($$[$0-8].suggestKeywords) { + keywords = keywords.concat(parser.createWeightedKeywords($$[$0-8].suggestKeywords, 1)); + } + this.$ = parser.getValueExpressionKeywords($$[$0-8], keywords); + this.$.cursorAtEnd = !$$[$0-6] && !$$[$0-5] && !$$[$0-4] && !$$[$0-3] && !$$[$0-2] && !$$[$0-1] && !$$[$0]; + if ($$[$0-8].columnReference) { + this.$.columnReference = $$[$0-8].columnReference; + } + if (!$$[$0-6]) { + parser.suggestGroupBys({ prefix: 'GROUP BY', tablePrimaries: parser.yy.latestTablePrimaries.concat() }); + } + if (!$$[$0-6] && !$$[$0-5] && !$$[$0-4] && !$$[$0-3]) { + parser.suggestOrderBys({ prefix: 'ORDER BY', tablePrimaries: parser.yy.latestTablePrimaries.concat() }); + } + this.$.whereClauseLocation = $$[$0-8] ? _$[$0-8] : undefined; + this.$.limitClausePreceding = parser.firstDefined($$[$0-2], _$[$0-2], $$[$0-3], _$[$0-3], $$[$0-4], _$[$0-4], $$[$0-5], _$[$0-5], $$[$0-6], _$[$0-6], $$[$0-8], _$[$0-8]); + this.$.limitClauseLocation = $$[$0-1] ? _$[$0-1] : undefined; + +break; +case 925: + + var keywords = parser.getKeywordsForOptionalsLR( + [$$[$0-5], $$[$0-4], $$[$0-3], $$[$0-2], $$[$0-2], $$[$0-1], $$[$0]], + [{ value: 'HAVING', weight: 7 }, { value: 'WINDOW', weight: 6 }, { value: 'ORDER BY', weight: 5 }, [{ value: 'CLUSTER BY', weight: 4 }, { value: 'DISTRIBUTE BY', weight: 4 }], { value: 'SORT BY', weight: 4 }, { value: 'LIMIT', weight: 3 }, { value: 'OFFSET', weight: 2 }], + [true, parser.isHive(), true, parser.isHive(), parser.isHive() && !$$[$0-3], true, parser.isImpala()]); + if ($$[$0-7].suggestKeywords) { + keywords = keywords.concat(parser.createWeightedKeywords($$[$0-7].suggestKeywords, 8)); + } + if ($$[$0-7].valueExpression) { + this.$ = parser.getValueExpressionKeywords($$[$0-7].valueExpression, keywords); + if ($$[$0-7].valueExpression.columnReference) { + this.$.columnReference = $$[$0-7].valueExpression.columnReference; + } + } else { + this.$ = { suggestKeywords: keywords }; + } + this.$.cursorAtEnd = !$$[$0-5] && !$$[$0-4] && !$$[$0-3] && !$$[$0-2] && !$$[$0-1] && !$$[$0]; + if (!$$[$0-5] && !$$[$0-4] && !$$[$0-3]) { + parser.suggestOrderBys({ prefix: 'ORDER BY', tablePrimaries: parser.yy.latestTablePrimaries.concat() }); + } + this.$.whereClauseLocation = $$[$0-8] ? _$[$0-8] : undefined; + this.$.limitClausePreceding = parser.firstDefined($$[$0-2], _$[$0-2], $$[$0-3], _$[$0-3], $$[$0-4], _$[$0-4], $$[$0-5], _$[$0-5], $$[$0-7], _$[$0-7]); + this.$.limitClauseLocation = $$[$0-1] ? _$[$0-1] : undefined; + +break; +case 926: + + var keywords = parser.getKeywordsForOptionalsLR( + [$$[$0-4], $$[$0-3], $$[$0-2], $$[$0-2], $$[$0-1], $$[$0]], + [{ value: 'WINDOW', weight: 6 }, { value: 'ORDER BY', weight: 5 }, [{ value: 'CLUSTER BY', weight: 4 }, { value: 'DISTRIBUTE BY', weight: 4 }], { value: 'SORT BY', weight: 4 }, { value: 'LIMIT', weight: 3 }, { value: 'OFFSET', weight: 2 }], + [parser.isHive(), true, parser.isHive(), parser.isHive() && !$$[$0-3], true, parser.isImpala()]); + this.$ = { suggestKeywords: keywords, cursorAtEnd: !$$[$0-4] && !$$[$0-3] && !$$[$0-2] && !$$[$0-1] && !$$[$0] }; + if (!$$[$0-4] && !$$[$0-3]) { + parser.suggestOrderBys({ prefix: 'ORDER BY', tablePrimaries: parser.yy.latestTablePrimaries.concat() }); + } + this.$.whereClauseLocation = $$[$0-8] ? _$[$0-8] : undefined; + this.$.limitClausePreceding = parser.firstDefined($$[$0-2], _$[$0-2], $$[$0-3], _$[$0-3], $$[$0-4], _$[$0-4], $$[$0-6], _$[$0-6]); + this.$.limitClauseLocation = $$[$0-1] ? _$[$0-1] : undefined; + +break; +case 927: + + var keywords = parser.getKeywordsForOptionalsLR([$$[$0-3], $$[$0-2], $$[$0-1], $$[$0]], [{ value: 'ORDER BY', weight: 5 }, [{ value: 'CLUSTER BY', weight: 4 }, { value: 'DISTRIBUTE BY', weight: 4 }, { value: 'SORT BY', weight: 4 }], { value: 'LIMIT', weight: 3 }, { value: 'OFFSET', weight: 2 }], [true, parser.isHive(), true, parser.isImpala()]); + this.$ = { suggestKeywords: keywords, cursorAtEnd: !$$[$0-3] && !$$[$0-2] && !$$[$0-1] && !$$[$0] }; + if (!$$[$0-3]) { + parser.suggestOrderBys({ prefix: 'ORDER BY', tablePrimaries: parser.yy.latestTablePrimaries.concat() }); + } + this.$.whereClauseLocation = $$[$0-8] ? _$[$0-8] : undefined; + this.$.limitClausePreceding = parser.firstDefined($$[$0-2], _$[$0-2], $$[$0-3], _$[$0-3], $$[$0-5], _$[$0-5]); + this.$.limitClauseLocation = $$[$0-1] ? _$[$0-1] : undefined; + +break; +case 928: + + var keywords = parser.getKeywordsForOptionalsLR([$$[$0-2], $$[$0-1], $$[$0]], [[{ value: 'CLUSTER BY', weight: 4 }, { value: 'DISTRIBUTE BY', weight: 4 }], { value: 'LIMIT', weight: 3 }, { value: 'OFFSET', weight: 2 }], [parser.isHive(), true, parser.isImpala()]); + if ($$[$0-4].suggestKeywords) { + keywords = keywords.concat(parser.createWeightedKeywords($$[$0-4].suggestKeywords, 5)); + } + this.$ = { suggestKeywords: keywords, cursorAtEnd: !$$[$0-2] && !$$[$0-1] && !$$[$0] }; + this.$.whereClauseLocation = $$[$0-8] ? _$[$0-8] : undefined; + this.$.limitClausePreceding = parser.firstDefined($$[$0-2], _$[$0-2], $$[$0-4], _$[$0-4]); + this.$.limitClauseLocation = $$[$0-1] ? _$[$0-1] : undefined; + +break; +case 929: + + var keywords = parser.getKeywordsForOptionalsLR([$$[$0-1], $$[$0]], [{ value: 'LIMIT', weight: 3 }, { value: 'OFFSET', weight: 2 }], [true, parser.isImpala()]); + if ($$[$0-3].suggestKeywords) { + keywords = keywords.concat(parser.createWeightedKeywords($$[$0-3].suggestKeywords, 4)); + } + this.$ = { suggestKeywords: keywords, cursorAtEnd: !$$[$0-1] && !$$[$0] }; + this.$.whereClauseLocation = $$[$0-8] ? _$[$0-8] : undefined; + this.$.limitClausePreceding = _$[$0-3]; + this.$.limitClauseLocation = $$[$0-1] ? _$[$0-1] : undefined; + +break; +case 930: + + var keywords = parser.getKeywordsForOptionalsLR([$$[$0]], [{ value: 'OFFSET', weight: 2 }], [parser.isImpala()]); + this.$ = { suggestKeywords: keywords, cursorAtEnd: !$$[$0] }; + this.$.whereClauseLocation = $$[$0-8] ? _$[$0-8] : undefined; + this.$.limitClausePreceding = parser.firstDefined($$[$0-3], _$[$0-3], $$[$0-4], _$[$0-4], $$[$0-5], _$[$0-5], $$[$0-6], _$[$0-6], $$[$0-7], _$[$0-7], $$[$0-8], _$[$0-8]); + this.$.limitClauseLocation = $$[$0-2] ? _$[$0-2] : undefined; + +break; +case 934: + + if ($$[$0].suggestFilters) { + parser.suggestFilters({ tablePrimaries: parser.yy.latestTablePrimaries.concat() }); + } + +break; +case 935: + + parser.suggestFunctions(); + parser.suggestColumns(); + parser.suggestKeywords(['EXISTS', 'NOT EXISTS']); + parser.suggestFilters({ tablePrimaries: parser.yy.latestTablePrimaries.concat() }); + +break; +case 938: + + this.$ = { valueExpression: $$[$0] ? false : $$[$0-1] }; + if (!$$[$0] && parser.isHive()) { + this.$.suggestKeywords = ['GROUPING SETS', 'WITH CUBE', 'WITH ROLLUP']; + } + +break; +case 939: case 988: case 1014: case 1018: case 1021: + + parser.suggestSelectListAliases(); + +break; +case 940: + + parser.valueExpressionSuggest(); + parser.suggestSelectListAliases(); + parser.suggestGroupBys({ tablePrimaries: parser.yy.latestTablePrimaries.concat() }); + +break; +case 941: + + parser.suggestKeywords(['BY']); + parser.suggestGroupBys({ prefix: 'BY', tablePrimaries: parser.yy.latestTablePrimaries.concat() }); + +break; +case 948: + + if (parser.isHive()) { + parser.suggestKeywords(['CUBE', 'ROLLUP']); + } + +break; +case 950: + + parser.suggestKeywords(['SETS']); + +break; +case 978: + + if ($$[$0].emptyOrderBy) { + parser.suggestOrderBys({ tablePrimaries: parser.yy.latestTablePrimaries.concat() }); + } + +break; +case 979: + + parser.suggestKeywords(['BY']); + parser.suggestOrderBys({ prefix: 'BY', tablePrimaries: parser.yy.latestTablePrimaries.concat() }); + +break; +case 983: + + this.$ = { emptyOrderBy: false } + parser.valueExpressionSuggest(); + parser.suggestAnalyticFunctions(); + parser.suggestSelectListAliases(); + +break; +case 984: case 985: case 986: +this.$ = { emptyOrderBy: false }; +break; +case 987: +this.$ = parser.mergeSuggestKeywords($$[$0-1], $$[$0]); +break; +case 990: + + this.$ = { emptyOrderBy: true } + parser.valueExpressionSuggest(); + parser.suggestAnalyticFunctions(); + parser.suggestSelectListAliases(); + +break; +case 991: + + this.$ = { suggestKeywords: ['ASC', 'DESC'] }; + +break; +case 996: + + if (parser.isImpala()) { + this.$ = { suggestKeywords: ['NULLS FIRST', 'NULLS LAST'] }; + } else { + this.$ = {}; + } + +break; +case 999: + + parser.suggestKeywords(['FIRST', 'LAST']); + +break; +case 1003: +this.$ = { suggestKeywords: ['SORT BY'] }; +break; +case 1012: case 1016: case 1020: + + suggestKeywords: ['BY']; + +break; +case 1013: case 1017: + + parser.suggestColumns(); + parser.suggestSelectListAliases(); + +break; +case 1028: + + parser.addColumnLocation($$[$0-1].location, [ $$[$0-1].identifier ]); + this.$ = $$[$0]; + +break; +case 1039: case 1044: + + parser.suggestFunctions({ types: ['BIGINT'] }); + +break; +case 1040: case 1045: + + delete parser.yy.result.suggestColumns; + +break; +case 1049: case 1050: + + // verifyType($$[$0], 'BOOLEAN'); + this.$ = { types: [ 'BOOLEAN' ] }; + +break; +case 1052: + + // verifyType($$[$0], 'NUMBER'); + this.$ = $$[$0]; + $$[$0].types = ['NUMBER']; + +break; +case 1053: case 1054: case 1055: case 1056: case 1057: case 1064: case 1065: case 1066: case 1067: case 1068: case 1069: case 1075: case 1076: case 1097: case 1155: case 1156: case 1218: +this.$ = { types: [ 'BOOLEAN' ] }; +break; +case 1058: + + this.$ = { types: [ 'BOOLEAN' ] }; + // clear correlated flag after completed sub-query (set by lexer) + parser.yy.correlatedSubQuery = false; + +break; +case 1060: case 1061: case 1062: case 1063: + + parser.addColRefToVariableIfExists($$[$0-2], $$[$0]); + this.$ = { types: [ 'BOOLEAN' ] }; + +break; +case 1070: case 1071: + + // verifyType($$[$0-2], 'BOOLEAN'); + // verifyType($$[$0], 'BOOLEAN'); + this.$ = { types: [ 'BOOLEAN' ] }; + +break; +case 1072: case 1073: case 1074: + + // verifyType($$[$0-2], 'NUMBER'); + // verifyType($$[$0], 'NUMBER'); + this.$ = { types: [ 'NUMBER' ] }; + +break; +case 1080: + + if (parser.isImpala()) { + parser.suggestKeywords(['BETWEEN', 'EXISTS', 'IN', 'ILIKE', 'IREGEXP', 'LIKE', 'REGEXP', 'RLIKE']); + } else { + parser.suggestKeywords(['BETWEEN', 'EXISTS', 'IN', 'LIKE', 'REGEXP', 'RLIKE']); + } + this.$ = { types: [ 'BOOLEAN' ] }; + +break; +case 1081: case 1083: +this.$ = { types: [ 'BOOLEAN' ], suggestFilters: $$[$0].suggestFilters }; +break; +case 1082: + + parser.suggestFunctions(); + parser.suggestColumns(); + parser.suggestKeywords(['EXISTS']); + this.$ = { types: [ 'BOOLEAN' ] }; + +break; +case 1084: + + parser.suggestFunctions({ types: [ 'BOOLEAN' ] }); + parser.suggestColumns({ types: [ 'BOOLEAN' ] }); + this.$ = { types: [ 'BOOLEAN' ] }; + +break; +case 1085: +this.$ = { types: [ 'T' ], suggestFilters: $$[$0].suggestFilters }; +break; +case 1086: + + parser.suggestFunctions(); + parser.suggestColumns(); + this.$ = { types: [ 'T' ] }; + +break; +case 1087: + + if (!$$[$0].typeSet) { + parser.applyTypeToSuggestions('NUMBER'); + } + this.$ = { types: [ 'NUMBER' ], suggestFilters: $$[$0].suggestFilters }; + +break; +case 1088: + + parser.suggestFunctions({ types: [ 'NUMBER' ] }); + parser.suggestColumns({ types: [ 'NUMBER' ] }); + this.$ = { types: [ 'NUMBER' ] }; + +break; +case 1089: + + var keywords = ['FALSE', 'NOT NULL', 'NOT TRUE', 'NOT FALSE', 'NULL', 'TRUE']; + if (parser.isImpala()) { + keywords = keywords.concat(['DISTINCT FROM', 'NOT DISTINCT FROM', 'NOT UNKNOWN', 'UNKNOWN']); + } + parser.suggestKeywords(keywords); + this.$ = { types: [ 'BOOLEAN' ] }; + +break; +case 1090: + + var keywords = ['FALSE', 'NULL', 'TRUE']; + if (parser.isImpala()) { + keywords = keywords.concat(['DISTINCT FROM', 'UNKNOWN']); + } + parser.suggestKeywords(keywords); + this.$ = { types: [ 'BOOLEAN' ] }; + +break; +case 1091: + + if (parser.isImpala()) { + parser.suggestKeywords(['FROM']); + } + this.$ = { types: [ 'BOOLEAN' ] }; + +break; +case 1092: case 1093: case 1094: + + parser.suggestKeywords(['NOT']); + this.$ = { types: [ 'BOOLEAN' ] }; + +break; +case 1095: + + parser.valueExpressionSuggest($$[$0-5], $$[$0-3] ? 'IS NOT DISTINCT FROM' : 'IS DISTINCT FROM'); + this.$ = { types: [ 'BOOLEAN' ] }; + +break; +case 1096: + + this.$ = { types: [ 'BOOLEAN' ], suggestFilters: $$[$0].suggestFilters } + +break; +case 1098: + + this.$ = $$[$0-1]; + +break; +case 1099: + + parser.valueExpressionSuggest(); + this.$ = { types: ['T'], typeSet: true }; + +break; +case 1100: + + parser.valueExpressionSuggest($$[$0], $$[$0-1]); + parser.applyTypeToSuggestions($$[$0].types); + this.$ = { types: [ 'BOOLEAN' ], typeSet: true }; + +break; +case 1101: case 1102: case 1103: + + parser.valueExpressionSuggest($$[$0], $$[$0-1]); + parser.applyTypeToSuggestions($$[$0].types); + this.$ = { types: [ 'BOOLEAN' ], typeSet: true }; + +break; +case 1104: case 1105: case 1106: case 1107: + + if (!$$[$0-2].typeSet) { + parser.applyTypeToSuggestions($$[$0].types); + parser.addColRefIfExists($$[$0]); + } + this.$ = { types: [ 'BOOLEAN' ], suggestFilters: $$[$0-2].suggestFilters } + +break; +case 1108: case 1110: + + parser.valueExpressionSuggest($$[$0-2], $$[$0-1]); + parser.applyTypeToSuggestions($$[$0-2].types); + this.$ = { types: [ 'BOOLEAN' ], typeSet: true }; + +break; +case 1109: + + parser.valueExpressionSuggest($$[$0-2], $$[$0-1]); + parser.applyTypeToSuggestions($$[$0-2].types); + this.$ = { types: [ 'BOOLEAN' ] , typeSet: true, endsWithLessThanOrEqual: true }; + +break; +case 1111: + + parser.valueExpressionSuggest($$[$0-2], $$[$0-1]); + parser.applyTypeToSuggestions($$[$0-2].types); + this.$ = { types: [ 'BOOLEAN' ], typeSet: true, endsWithLessThanOrEqual: $$[$0-1] === '<=' }; + +break; +case 1112: case 1113: case 1114: case 1115: + + if (!$$[$0].typeSet) { + parser.applyTypeToSuggestions($$[$0-2].types); + parser.addColRefIfExists($$[$0-2]); + } + this.$ = { types: [ 'BOOLEAN' ], suggestFilters: $$[$0].suggestFilters } + +break; +case 1116: + + if ($$[$0].inValueEdit) { + parser.valueExpressionSuggest($$[$0-3], $$[$0-2] + ' ' + $$[$0-1]); + parser.applyTypeToSuggestions($$[$0-3].types); + } + if ($$[$0].cursorAtStart) { + parser.suggestKeywords(['SELECT']); + } + this.$ = { types: [ 'BOOLEAN' ], typeSet: true }; + +break; +case 1117: + + if ($$[$0].inValueEdit) { + parser.valueExpressionSuggest($$[$0-2], $$[$0-1]); + parser.applyTypeToSuggestions($$[$0-2].types); + } + if ($$[$0].cursorAtStart) { + parser.suggestKeywords(['SELECT']); + } + this.$ = { types: [ 'BOOLEAN' ], typeSet: true }; + +break; +case 1118: case 1119: +this.$ = { types: [ 'BOOLEAN' ], suggestFilters: $$[$0-5].suggestFilters }; +break; +case 1120: case 1121: +this.$ = { types: [ 'BOOLEAN' ], suggestFilters: $$[$0-4].suggestFilters }; +break; +case 1122: + + if ($$[$0-2].types[0] === $$[$0].types[0] && !$$[$0-5].typeSet) { + parser.applyTypeToSuggestions($$[$0-2].types); + } + this.$ = { types: [ 'BOOLEAN' ], suggestFilters: $$[$0-5].suggestFilters }; + +break; +case 1123: + + if ($$[$0-5].types[0] === $$[$0].types[0] && !$$[$0-2].typeSet) { + parser.applyTypeToSuggestions($$[$0-5].types); + } + this.$ = { types: [ 'BOOLEAN' ], suggestFilters: $$[$0-2].suggestFilters }; + +break; +case 1124: + + if ($$[$0-5].types[0] === $$[$0-2].types[0] && !$$[$0].typeSet) { + parser.applyTypeToSuggestions($$[$0-5].types); + } + this.$ = { types: [ 'BOOLEAN' ], suggestFilters: $$[$0].suggestFilters }; + +break; +case 1125: + + parser.valueExpressionSuggest($$[$0-5], $$[$0-1]); + this.$ = { types: [ 'BOOLEAN' ], typeSet: true }; + +break; +case 1126: case 1132: + + parser.suggestValueExpressionKeywords($$[$0-1], ['AND']); + this.$ = { types: [ 'BOOLEAN' ] }; + +break; +case 1127: + + parser.valueExpressionSuggest($$[$0-3], $$[$0-2] + ' ' + $$[$0-1]); + this.$ = { types: [ 'BOOLEAN' ], typeSet: true }; + +break; +case 1128: + + if ($$[$0-4].types[0] === $$[$0-2].types[0] && !$$[$0-4].typeSet) { + parser.applyTypeToSuggestions($$[$0-4].types) + } + this.$ = { types: [ 'BOOLEAN' ], suggestFilters: $$[$0-4].suggestFilters }; + +break; +case 1129: + + if ($$[$0-4].types[0] === $$[$0-2].types[0] && !$$[$0-2].typeSet) { + parser.applyTypeToSuggestions($$[$0-4].types) + } + this.$ = { types: [ 'BOOLEAN' ], suggestFilters: $$[$0-2].suggestFilters }; + +break; +case 1130: + + if ($$[$0-4].types[0] === $$[$0-2].types[0] && !$$[$0].typeSet) { + parser.applyTypeToSuggestions($$[$0-4].types) + } + this.$ = { types: [ 'BOOLEAN' ], suggestFilters: $$[$0].suggestFilters }; + +break; +case 1131: + + parser.valueExpressionSuggest($$[$0-4], $$[$0-1]); + parser.applyTypeToSuggestions($$[$0-4].types); + this.$ = { types: [ 'BOOLEAN' ], typeSet: true }; + +break; +case 1133: + + parser.valueExpressionSuggest($$[$0-2], $$[$0-1]); + parser.applyTypeToSuggestions($$[$0-2].types); + this.$ = { types: [ 'BOOLEAN' ], typeSet: true }; + +break; +case 1134: case 1136: case 1138: case 1140: + + parser.valueExpressionSuggest(undefined, $$[$0-1]); + this.$ = { types: [ 'BOOLEAN' ], typeSet: true, suggestFilters: true }; + +break; +case 1135: case 1139: + + parser.addColRefIfExists($$[$0]); + this.$ = { types: [ 'BOOLEAN' ], suggestFilters: $$[$0-2].suggestFilters } + +break; +case 1137: case 1141: + + parser.addColRefIfExists($$[$0-2]); + this.$ = { types: [ 'BOOLEAN' ], suggestFilters: $$[$0].suggestFilters } + +break; +case 1142: case 1143: + + parser.valueExpressionSuggest(undefined, $$[$0-1]); + parser.applyTypeToSuggestions([ 'NUMBER' ]); + this.$ = { types: [ 'NUMBER' ], typeSet: true }; + +break; +case 1144: case 1145: case 1146: + + if (!$$[$0-2].typeSet) { + parser.applyTypeToSuggestions(['NUMBER']); + parser.addColRefIfExists($$[$0]); + } + this.$ = { types: [ 'NUMBER' ], suggestFilters: $$[$0-2].suggestFilters } + +break; +case 1147: case 1148: case 1149: + + parser.valueExpressionSuggest(undefined, $$[$0-1]); + parser.applyTypeToSuggestions(['NUMBER']); + this.$ = { types: [ 'NUMBER' ], typeSet: true }; + +break; +case 1150: case 1151: case 1152: + + if (!$$[$0].typeSet) { + parser.applyTypeToSuggestions(['NUMBER']); + parser.addColRefIfExists($$[$0-2]); + } + this.$ = { types: [ 'NUMBER' ], suggestFilters: $$[$0].suggestFilters }; + +break; +case 1153: +this.$ = { types: [ 'BOOLEAN' ], suggestFilters: $$[$0-1].suggestFilters }; +break; +case 1154: +this.$ = { types: [ 'BOOLEAN' ], suggestFilters: $$[$0-2].suggestFilters }; +break; +case 1157: + + parser.valueExpressionSuggest(undefined, $$[$0]); + parser.applyTypeToSuggestions([ 'STRING' ]); + this.$ = { types: [ 'BOOLEAN' ], typeSet: true }; + +break; +case 1158: + + parser.valueExpressionSuggest(undefined, $$[$0-1] + ' ' + $$[$0]); + parser.applyTypeToSuggestions([ 'STRING' ]); + this.$ = { types: [ 'BOOLEAN' ], typeSet: true }; + +break; +case 1160: + + parser.valueExpressionSuggest(); + parser.suggestKeywords(['WHEN']); + this.$ = { types: [ 'T' ], typeSet: true }; + +break; +case 1162: + + parser.suggestValueExpressionKeywords($$[$0-2], ['WHEN']); + this.$ = { types: [ 'T' ], typeSet: true }; + +break; +case 1163: + + this.$ = $$[$0]; + this.$.suggestFilters = $$[$0-1].suggestFilters; + +break; +case 1164: +this.$ = { types: [ 'T' ], suggestFilters: $$[$0-1].suggestFilters }; +break; +case 1165: case 1491: case 1496: case 1497: +this.$ = { types: [ 'T' ] }; +break; +case 1166: case 1168: + + $$[$0].position = 1; + +break; +case 1167: + + $$[$0].position = $$[$0-2].position + 1; + this.$ = $$[$0]; + +break; +case 1169: + + $$[$0-2].position += 1; + +break; +case 1170: + + $$[$0-2].position = 1; + +break; +case 1171: + + $$[$0-4].position += 1; + +break; +case 1172: + + parser.valueExpressionSuggest(); + $$[$0-2].position += 1; + +break; +case 1173: + + parser.valueExpressionSuggest(); + $$[$0-4].position += 1; + +break; +case 1174: + + parser.suggestValueExpressionKeywords($$[$0-3]); + +break; +case 1175: case 1176: + + parser.valueExpressionSuggest(); + this.$ = { cursorAtStart : true, position: 1 }; + +break; +case 1177: case 1178: + + parser.valueExpressionSuggest(); + this.$ = { position: 2 }; + +break; +case 1182: +this.$ = { types: ['COLREF'], columnReference: $$[$0].chain }; +break; +case 1183: + + // We need to handle arbitrary UDFs here instead of inside UserDefinedFunction or there will be a conflict + // with columnReference for functions like: db.udf(foo) + var fn = $$[$0-1].chain[$$[$0-1].chain.length - 1].name.toLowerCase(); + $$[$0-1].lastLoc.type = 'function'; + $$[$0-1].lastLoc.function = fn; + $$[$0-1].lastLoc.location = { + first_line: $$[$0-1].lastLoc.location.first_line, + last_line: $$[$0-1].lastLoc.location.last_line, + first_column: $$[$0-1].lastLoc.location.first_column, + last_column: $$[$0-1].lastLoc.location.last_column - 1 + } + if ($$[$0-1].lastLoc !== $$[$0-1].firstLoc) { + $$[$0-1].firstLoc.type = 'database'; + } else { + delete $$[$0-1].lastLoc.identifierChain; + } + if ($$[$0].expression) { + this.$ = { function: fn, expression: $$[$0].expression, types: parser.findReturnTypes(fn) } + } else { + this.$ = { function: fn, types: parser.findReturnTypes(fn) } + } + +break; +case 1184: + + parser.addFunctionLocation(_$[$0-1], $$[$0-1]); + if ($$[$0].expression) { + this.$ = { function: $$[$0-1], expression: $$[$0].expression, types: parser.findReturnTypes($$[$0-1]) } + } else { + this.$ = { function: $$[$0-1], types: parser.findReturnTypes($$[$0-1]) } + } + +break; +case 1186: +this.$ = { types: [ 'NULL' ] }; +break; +case 1187: +this.$ = { types: [ 'TIMESTAMP' ] }; +break; +case 1189: + + if ($$[$0].suggestKeywords) { + this.$ = { types: ['COLREF'], columnReference: $$[$0], suggestKeywords: $$[$0].suggestKeywords }; + } else { + this.$ = { types: ['COLREF'], columnReference: $$[$0] }; + } + +break; +case 1190: + + var fn = $$[$0-1].chain[$$[$0-1].chain.length - 1].name.toLowerCase(); + $$[$0-1].lastLoc.type = 'function'; + $$[$0-1].lastLoc.function = fn; + $$[$0-1].lastLoc.location = { + first_line: $$[$0-1].lastLoc.location.first_line, + last_line: $$[$0-1].lastLoc.location.last_line, + first_column: $$[$0-1].lastLoc.location.first_column, + last_column: $$[$0-1].lastLoc.location.last_column - 1 + } + if ($$[$0-1].lastLoc !== $$[$0-1].firstLoc) { + $$[$0-1].firstLoc.type = 'database'; + } else { + delete $$[$0-1].lastLoc.identifierChain; + } + if ($$[$0].position) { + parser.applyArgumentTypesToSuggestions(fn, $$[$0].position); + } + this.$ = { types: parser.findReturnTypes(fn) }; + +break; +case 1191: case 1396: case 1397: + + parser.addFunctionLocation(_$[$0-1], $$[$0-1]); + if ($$[$0].position) { + parser.applyArgumentTypesToSuggestions($$[$0-1], $$[$0].position); + } + this.$ = { types: parser.findReturnTypes($$[$0-1]) }; + +break; +case 1194: + + var lastLoc = parser.yy.locations[parser.yy.locations.length - 1]; + if (lastLoc.type !== 'variable') { + lastLoc.type = 'column'; + } + // used for function references with db prefix + var firstLoc = parser.yy.locations[parser.yy.locations.length - $$[$0].length]; + this.$ = { chain: $$[$0], firstLoc: firstLoc, lastLoc: lastLoc } + +break; +case 1198: + + parser.suggestKeywords(['DAYS', 'HOURS', 'MICROSECONDS', 'MILLISECONDS', 'MINUTES', 'MONTHS', 'NANOSECONDS', 'SECONDS', 'WEEKS', 'YEARS']); + +break; +case 1203: + + parser.suggestValues($$[$0]); + +break; +case 1204: +this.$ = { types: [ 'NUMBER' ] }; +break; +case 1210: case 1212: +this.$ = $$[$0-1] + $$[$0]; +break; +case 1211: +this.$ = $$[$0-2] + $$[$0-1] + $$[$0]; +break; +case 1216: case 1217: + + if (/\$\{[^}]*\}/.test($$[$0])) { + parser.addVariableLocation(_$[$0], $$[$0]); + this.$ = { types: [ 'STRING' ], columnReference: [{ name: $$[$0] }] } + } else { + this.$ = { types: [ 'STRING' ] } + } + +break; +case 1219: + + this.$ = { partialQuote: '\'', missingEndQuote: parser.yy.missingEndQuote }; + +break; +case 1220: + + this.$ = { partialQuote: '"', missingEndQuote: parser.yy.missingEndQuote }; + +break; +case 1225: + + if ($$[$0]) { + parser.addColumnAliasLocation($$[$0].location, $$[$0].alias, _$[$0-1]); + this.$ = { valueExpression: $$[$0-1], alias: $$[$0].alias }; + if (!parser.yy.selectListAliases) { + parser.yy.selectListAliases = []; + } + parser.yy.selectListAliases.push({ name: $$[$0].alias, types: $$[$0-1].types || ['T'] }); + } else { + this.$ = { valueExpression: $$[$0-1] } + } + +break; +case 1226: + + parser.addAsteriskLocation(_$[$0], [{ asterisk: true }]); + this.$ = { asterisk: true } + +break; +case 1227: + + if ($$[$0]) { + parser.addColumnAliasLocation($$[$0].location, $$[$0].alias, _$[$0-1]); + } + +break; +case 1228: + + parser.suggestFunctions(); + parser.suggestColumns(); + parser.addColumnAliasLocation(_$[$0], $$[$0], _$[$0-2]); + this.$ = { suggestAggregateFunctions: true }; + +break; +case 1230: case 1586: +this.$ = [ $$[$0] ]; +break; +case 1231: + + $$[$0-2].push($$[$0]); + +break; +case 1233: case 1234: + + this.$ = { cursorAtStart : true, suggestFunctions: true, suggestColumns: true, suggestAggregateFunctions: true }; + +break; +case 1236: + + parser.checkForSelectListKeywords($$[$0-2]); + +break; +case 1237: + + parser.checkForSelectListKeywords($$[$0-3]); + +break; +case 1238: + + this.$ = { suggestKeywords: parser.getSelectListKeywords(), suggestTables: true, suggestDatabases: true, suggestFunctions: true, suggestColumns: true, suggestAggregateFunctions: true }; + +break; +case 1240: case 1241: case 1243: + + this.$ = { suggestKeywords: parser.getSelectListKeywords(), suggestFunctions: true, suggestColumns: true, suggestAggregateFunctions: true, }; + +break; +case 1254: + + this.$ = $$[$0]; + + if (parser.yy.latestTablePrimaries.length > 0) { + var idx = parser.yy.latestTablePrimaries.length - 1; + var tables = []; + do { + var tablePrimary = parser.yy.latestTablePrimaries[idx]; + if (!tablePrimary.subQueryAlias) { + tables.unshift(tablePrimary.alias ? { identifierChain: tablePrimary.identifierChain, alias: tablePrimary.alias } : { identifierChain: tablePrimary.identifierChain }) + } + idx--; + } while (idx >= 0 && tablePrimary.join && !tablePrimary.subQueryAlias) + + if (tables.length > 0) { + this.$.suggestJoins = { + prependJoin: true, + tables: tables + }; + } + } + +break; +case 1261: + + if ($$[$0] && $$[$0].valueExpression) { + this.$ = $$[$0].valueExpression; + } else { + this.$ = {}; + } + this.$.joinType = $$[$0-3]; + if ($$[$0].noJoinCondition) { + this.$.suggestJoinConditions = { prependOn: true, tablePrimaries: parser.yy.latestTablePrimaries.concat() } + } + if ($$[$0].suggestKeywords) { + this.$.suggestKeywords = $$[$0].suggestKeywords; + } + if (parser.yy.latestTablePrimaries.length > 0) { + parser.yy.latestTablePrimaries[parser.yy.latestTablePrimaries.length - 1].join = true; + } + +break; +case 1262: + + if ($$[$0] && $$[$0].valueExpression) { + this.$ = $$[$0].valueExpression; + } else { + this.$ = {}; + } + this.$.joinType = $$[$0-4]; + if ($$[$0].noJoinCondition) { + this.$.suggestJoinConditions = { prependOn: true, tablePrimaries: parser.yy.latestTablePrimaries.concat() } + } + if ($$[$0].suggestKeywords) { + this.$.suggestKeywords = $$[$0].suggestKeywords; + } + if (parser.yy.latestTablePrimaries.length > 0) { + parser.yy.latestTablePrimaries[parser.yy.latestTablePrimaries.length - 1].join = true; + } + +break; +case 1263: +this.$ = { joinType: $$[$0-1] }; +break; +case 1264: +this.$ = { joinType: $$[$0-2] }; +break; +case 1268: + + if ($$[$0-3].suggestKeywords) { + parser.suggestKeywords($$[$0-3].suggestKeywords); + } + +break; +case 1269: case 1822: + + if ($$[$0-1].suggestKeywords) { + parser.suggestKeywords($$[$0-1].suggestKeywords); + } + +break; +case 1272: + + if (!$$[$0-2] && parser.isImpala()) { + parser.suggestKeywords(['[BROADCAST]', '[SHUFFLE]']); + } + if (!$$[$0-2] && parser.yy.latestTablePrimaries.length > 0) { + var idx = parser.yy.latestTablePrimaries.length - 1; + var tables = []; + do { + var tablePrimary = parser.yy.latestTablePrimaries[idx]; + if (!tablePrimary.subQueryAlias) { + tables.unshift(tablePrimary.alias ? { identifierChain: tablePrimary.identifierChain, alias: tablePrimary.alias } : { identifierChain: tablePrimary.identifierChain }) + } + idx--; + } while (idx >= 0 && tablePrimary.join && !tablePrimary.subQueryAlias) + + if (tables.length > 0) { + parser.suggestJoins({ + prependJoin: false, + joinType: $$[$0-3], + tables: tables + }) + } + } + parser.suggestTables(); + parser.suggestDatabases({ + appendDot: true + }); + +break; +case 1277: +this.$ = 'JOIN'; +break; +case 1278: +this.$ = 'ANTI JOIN'; +break; +case 1279: +this.$ = 'CROSS JOIN'; +break; +case 1280: +this.$ = 'INNER JOIN'; +break; +case 1281: +this.$ = 'OUTER JOIN'; +break; +case 1282: +this.$ = 'SEMI JOIN'; +break; +case 1283: +this.$ = 'FULL JOIN'; +break; +case 1284: +this.$ = 'FULL OUTER JOIN'; +break; +case 1285: +this.$ = 'LEFT JOIN'; +break; +case 1286: +this.$ = 'LEFT ANTI JOIN'; +break; +case 1287: +this.$ = 'LEFT INNER JOIN'; +break; +case 1288: +this.$ = 'LEFT OUTER JOIN'; +break; +case 1289: +this.$ = 'LEFT SEMI JOIN'; +break; +case 1290: +this.$ = 'RIGHT JOIN'; +break; +case 1291: +this.$ = 'RIGHT ANTI JOIN'; +break; +case 1292: case 1293: +this.$ = 'RIGHT OUTER JOIN'; +break; +case 1294: +this.$ = 'RIGHT SEMI JOIN'; +break; +case 1295: case 1296: case 1297: case 1298: case 1299: case 1300: case 1302: case 1303: case 1304: case 1305: case 1307: case 1308: case 1309: case 1310: +this.$ = { suggestKeywords: ['JOIN'] }; +break; +case 1301: +this.$ = { suggestKeywords: ['OUTER'] }; +break; +case 1306: +this.$ = { suggestKeywords: parser.isImpala() ? ['ANTI', 'INNER', 'OUTER', 'SEMI'] : parser.isHive() ? ['OUTER', 'SEMI'] : ['OUTER'] }; +break; +case 1311: +this.$ = { suggestKeywords: parser.isImpala() ? ['ANTI', 'INNER', 'OUTER', 'SEMI'] : ['OUTER'] }; +break; +case 1312: +this.$ = { noJoinCondition: true, suggestKeywords: parser.isImpala() ? ['ON', 'USING'] : ['ON'] }; +break; +case 1313: +this.$ = { valueExpression: $$[$0] }; +break; +case 1314: case 2118: +this.$ = {}; +break; +case 1318: + + parser.valueExpressionSuggest(); + parser.suggestJoinConditions({ prependOn: false }); + +break; +case 1319: + + this.$ = { + primary: $$[$0-3] + } + if ($$[$0-3].identifierChain) { + if ($$[$0-1]) { + $$[$0-3].alias = $$[$0-1].alias + parser.addTableAliasLocation($$[$0-1].location, $$[$0-1].alias, $$[$0-3].identifierChain); + } + parser.addTablePrimary($$[$0-3]); + } + var keywords = []; + if ($$[$0] && $$[$0].suggestKeywords) { + keywords = $$[$0].suggestKeywords; + } else { + // Right-to-left for cursor after TablePrimary + keywords = parser.getKeywordsForOptionalsLR([$$[$0], $$[$0-1], $$[$0-2]], [{ value: 'TABLESAMPLE', weight: 1 }, { value: 'AS', weight: 2 }, { value: 'TABLESAMPLE', weight: 3 }], [parser.isImpala(), true, parser.isHive()]); + } + if (keywords.length > 0) { + this.$.suggestKeywords = keywords; + } + +break; +case 1320: + + this.$ = { + primary: $$[$0-2] + }; + + if ($$[$0-1]) { + this.$.primary.alias = $$[$0-1].alias; + parser.addTablePrimary({ subQueryAlias: $$[$0-1].alias }); + parser.addSubqueryAliasLocation($$[$0-1].location, $$[$0-1].alias, $$[$0-2].identifierChain); + } + + var keywords = []; + if ($$[$0] && $$[$0].suggestKeywords) { + keywords = $$[$0].suggestKeywords; + } else { + keywords = parser.getKeywordsForOptionalsLR([$$[$0], $$[$0-1]], [{ value: 'TABLESAMPLE', weight: 1 }, { value: 'AS', weight: 2 }], [parser.isImpala(), true]); + } + if (keywords.length > 0) { + this.$.suggestKeywords = keywords; + } + +break; +case 1321: + + if ($$[$0-1]) { + parser.addTableAliasLocation($$[$0-1].location, $$[$0-1].alias, $$[$0-3].identifierChain); + } + +break; +case 1322: case 1323: + + if ($$[$0-1]) { + $$[$0-3].alias = $$[$0-1].alias; + parser.addTableAliasLocation($$[$0-1].location, $$[$0-1].alias, $$[$0-3].identifierChain); + } + parser.addTablePrimary($$[$0-3]); + +break; +case 1324: + + if ($$[$0-1]) { + parser.addTablePrimary({ subQueryAlias: $$[$0-1].alias }); + parser.addSubqueryAliasLocation($$[$0-1].location, $$[$0-1].alias); + } + +break; +case 1335: + + parser.suggestKeywords(['BUCKET']); + +break; +case 1336: + + parser.suggestKeywords(['OUT OF']); + +break; +case 1337: + + parser.suggestKeywords(['OF']); + +break; +case 1338: + + if (!$$[$0-2]) { + parser.suggestKeywords(['ON']); + } + +break; +case 1340: + + if ($$[$0-2].indexOf('.') === -1 ) { + parser.suggestKeywords(['PERCENT', 'ROWS']); + } else { + parser.suggestKeywords(['PERCENT']); + } + +break; +case 1342: +this.$ = { suggestKeywords: ['REPEATABLE()'] }; +break; +case 1344: + + parser.suggestKeywords(['SYSTEM()']); + +break; +case 1349: + + parser.pushQueryState(); + +break; +case 1350: + + parser.popQueryState(); + +break; +case 1352: + + if ($$[$0-1]) { + $$[$0-2].alias = $$[$0-1].alias; + parser.addTablePrimary({ subQueryAlias: $$[$0-1].alias }); + parser.addSubqueryAliasLocation($$[$0-1].location, $$[$0-1].alias, $$[$0-2].identifierChain); + } + this.$ = $$[$0-2]; + +break; +case 1355: + + var subQuery = parser.getSubQuery($$[$0]); + subQuery.columns.forEach(function (column) { + parser.expandIdentifierChain({ wrapper: column }); + delete column.linked; + }); + parser.popQueryState(subQuery); + this.$ = subQuery; + +break; +case 1372: case 1373: +this.$ = { alias: $$[$0], location: _$[$0] }; +break; +case 1378: + + if ($$[$0-1] && $$[$0].lateralView) { + $$[$0-1].lateralViews.push($$[$0].lateralView); + this.$ = $$[$0-1]; + } else if ($$[$0].lateralView) { + this.$ = { lateralViews: [ $$[$0].lateralView ] }; + } + if ($$[$0].suggestKeywords) { + this.$.suggestKeywords = $$[$0].suggestKeywords + } + +break; +case 1380: + + if (!$$[$0]) { + $$[$0-1].suggestKeywords = ['OVER']; + } + +break; +case 1389: + + parser.suggestKeywords(['OVER']); + +break; +case 1394: case 1395: + + parser.addFunctionLocation(_$[$0-1], $$[$0-1]); + if ($$[$0].expression) { + this.$ = { function: $$[$0-1], expression: $$[$0].expression, types: parser.findReturnTypes($$[$0-1]) } + } else { + this.$ = { function: $$[$0-1], types: parser.findReturnTypes($$[$0-1]) } + } + +break; +case 1405: +this.$ = { expression: $$[$0-1] }; +break; +case 1406: + + parser.valueExpressionSuggest(); + this.$ = { position: 1 } + +break; +case 1407: + + parser.suggestValueExpressionKeywords($$[$0-1]); + +break; +case 1415: case 1503: case 1569: +this.$ = { types: parser.findReturnTypes($$[$0-2]) }; +break; +case 1416: +this.$ = { function: $$[$0-3], expression: $$[$0-2], types: parser.findReturnTypes($$[$0-3]) }; +break; +case 1417: + + parser.valueExpressionSuggest(); + parser.applyArgumentTypesToSuggestions($$[$0-3], 1); + this.$ = { types: parser.findReturnTypes($$[$0-3]) }; + +break; +case 1418: + + parser.suggestValueExpressionKeywords($$[$0-2]); + this.$ = { types: parser.findReturnTypes($$[$0-4]) }; + +break; +case 1419: + + parser.applyArgumentTypesToSuggestions($$[$0-3], $$[$0-1].position); + this.$ = { types: parser.findReturnTypes($$[$0-3]) }; + +break; +case 1427: case 1428: + + if (parser.yy.result.suggestFunctions) { + parser.suggestAggregateFunctions(); + } + +break; +case 1429: + + if (!$$[$0-2] && !$$[$0-1]) { + parser.suggestKeywords([{ value: 'PARTITION BY', weight: 2 }, { value: 'ORDER BY', weight: 1 }]); + } else if (!$$[$0-2]) { + parser.suggestKeywords(['PARTITION BY']); + } + +break; +case 1430: + + if (!$$[$0-1]) { + parser.suggestValueExpressionKeywords($$[$0-3], [{ value: 'ORDER BY', weight: 2 }]); + } else { + parser.suggestValueExpressionKeywords($$[$0-3]); + } + +break; +case 1434: case 1753: case 2237: case 2238: case 2241: case 2251: case 2285: case 2294: case 2312: case 2367: case 2368: case 2373: case 2378: case 2382: + + parser.suggestKeywords(['BY']); + +break; +case 1439: + + // Only allowed in last order by + delete parser.yy.result.suggestAnalyticFunctions; + +break; +case 1440: + + var keywords = []; + if ($$[$0-2].suggestKeywords) { + keywords = parser.createWeightedKeywords($$[$0-2].suggestKeywords, 2); + } + if (!$$[$0]) { + keywords = keywords.concat([{ value: 'RANGE BETWEEN', weight: 1 }, { value: 'ROWS BETWEEN', weight: 1 }]); + } + parser.suggestKeywords(keywords); + +break; +case 1446: + + parser.suggestKeywords(parser.isHive() ? ['BETWEEN', 'UNBOUNDED'] : ['BETWEEN']); + +break; +case 1447: + + if (!$$[$0-2] && !$$[$0-1]) { + parser.suggestKeywords(['CURRENT ROW', 'UNBOUNDED PRECEDING']); + } else if (!$$[$0-1]) { + parser.suggestKeywords(['AND']); + } + +break; +case 1450: + + if (!$$[$0-1] && parser.isHive()) { + parser.suggestKeywords(['PRECEDING']); + } + +break; +case 1452: + + lexer.popState(); + +break; +case 1453: + + lexer.begin('hdfs'); + +break; +case 1455: + + parser.suggestHdfs({ path: $$[$0-3] }); + +break; +case 1456: + + parser.suggestHdfs({ path: $$[$0-2] }); + +break; +case 1457: + + parser.suggestHdfs({ path: $$[$0-1] }); + +break; +case 1458: + + parser.suggestHdfs({ path: '' }); + +break; +case 1459: + + parser.suggestHdfs({ path: '' }); + +break; +case 1465: + + parser.suggestKeywords(['PRECEDING']); + +break; +case 1466: case 1476: + + parser.suggestKeywords(['ROW']); + +break; +case 1475: + + parser.suggestKeywords(['CURRENT ROW', 'UNBOUNDED FOLLOWING']); + +break; +case 1477: + + parser.suggestKeywords(['FOLLOWING']); + +break; +case 1483: + + parser.valueExpressionSuggest(); + parser.suggestAggregateFunctions(); + parser.suggestSelectListAliases(true); + +break; +case 1484: + + parser.suggestAggregateFunctions(); + parser.suggestSelectListAliases(true); + +break; +case 1490: case 1495: +this.$ = { types: [ $$[$0-1].toUpperCase() ] }; +break; +case 1492: + + parser.valueExpressionSuggest(); + this.$ = { types: [ $$[$0-1].toUpperCase() ] }; + +break; +case 1493: case 1494: + + parser.valueExpressionSuggest(); + this.$ = { types: [ 'T' ] }; + +break; +case 1498: + + parser.suggestValueExpressionKeywords($$[$0-3], [{ value: 'AS', weight: 2 }]); + this.$ = { types: [ $$[$0-1].toUpperCase() ] }; + +break; +case 1499: + + parser.suggestValueExpressionKeywords($$[$0-2], [{ value: 'AS', weight: 2 }]); + this.$ = { types: [ 'T' ] }; + +break; +case 1500: case 1501: + + parser.suggestKeywords(parser.getTypeKeywords()); + this.$ = { types: [ 'T' ] }; + +break; +case 1502: case 1524: +this.$ = { types: parser.findReturnTypes($$[$0-3]) }; +break; +case 1504: case 1525: case 1568: +this.$ = { types: parser.findReturnTypes($$[$0-4]) }; +break; +case 1505: + + parser.valueExpressionSuggest(); + var keywords = parser.getSelectListKeywords(); + if (!$$[$0-2]) { + keywords.push('DISTINCT'); + if (parser.isImpala()) { + keywords.push('ALL'); + } + if (parser.yy.result.suggestKeywords) { + keywords = parser.yy.result.suggestKeywords.concat(keywords); + } + } + parser.suggestKeywords(keywords); + this.$ = { types: parser.findReturnTypes($$[$0-4]) }; + +break; +case 1506: case 1527: case 1571: + + parser.suggestValueExpressionKeywords($$[$0-2]); + this.$ = { types: parser.findReturnTypes($$[$0-5]) }; + +break; +case 1507: + + if ($$[$0-1].cursorAtStart) { + var keywords = parser.getSelectListKeywords(); + if (!$$[$0-2]) { + keywords.push('DISTINCT'); + if (parser.isImpala()) { + keywords.push('ALL'); + } + } + parser.suggestKeywords(keywords); + } + this.$ = { types: parser.findReturnTypes($$[$0-4]) }; + +break; +case 1508: case 1512: +this.$ = { types: ['INT'] }; +break; +case 1509: + + parser.suggestKeywords(['DAY', 'DAYOFWEEK', 'HOUR', 'MINUTE', 'MONTH', 'QUARTER', 'SECOND', 'WEEK', 'YEAR']); + this.$ = { types: ['INT'] } + +break; +case 1510: case 1514: + + parser.suggestKeywords(['FROM']); + this.$ = { types: ['INT'] } + +break; +case 1511: + + parser.valueExpressionSuggest(); + this.$ = { types: ['INT'] } + +break; +case 1513: + + parser.suggestKeywords(['DAY', 'DAYOFWEEK', 'HOUR', 'MINUTE', 'MONTH', 'QUARTER', 'SECOND', 'WEEK', 'YEAR']); + this.$ = { types: ['INT'] } + +break; +case 1526: + + parser.valueExpressionSuggest(); + var keywords = parser.getSelectListKeywords(true); + if (!$$[$0-2]) { + if ($$[$0-4].toLowerCase() === 'group_concat') { + keywords.push('ALL'); + } else if (parser.isImpala()) { + keywords.push('ALL'); + keywords.push('DISTINCT'); + } else { + keywords.push('DISTINCT'); + } + } + if (parser.yy.result.suggestKeywords) { + keywords = parser.yy.result.suggestKeywords.concat(keywords); + } + parser.suggestKeywords(keywords); + parser.applyArgumentTypesToSuggestions($$[$0-4], 1); + this.$ = { types: parser.findReturnTypes($$[$0-4]) }; + +break; +case 1528: + + if ($$[$0-1].cursorAtStart) { + var keywords = parser.getSelectListKeywords(true); + if (!$$[$0-2]) { + if ($$[$0-4].toLowerCase() === 'group_concat') { + keywords.push('ALL'); + } else if (parser.isImpala()) { + keywords.push('ALL'); + keywords.push('DISTINCT'); + } else { + keywords.push('DISTINCT'); + } + } + if (parser.yy.result.suggestKeywords) { + keywords = parser.yy.result.suggestKeywords.concat(keywords); + } + parser.suggestKeywords(keywords); + } + if (parser.yy.result.suggestFunctions && !parser.yy.result.suggestFunctions.types) { + parser.applyArgumentTypesToSuggestions($$[$0-4], $$[$0-1].position); + } + this.$ = { types: parser.findReturnTypes($$[$0-4]) }; + +break; +case 1554: + + parser.valueExpressionSuggest(); + parser.applyTypeToSuggestions($$[$0-2].toLowerCase() === 'from' ? ['STRING'] : ['TIMESTAMP']); + this.$ = { types: parser.findReturnTypes($$[$0-5]) }; + +break; +case 1555: + + parser.valueExpressionSuggest(); + parser.applyTypeToSuggestions($$[$0-1].toLowerCase() === 'from' ? ['STRING'] : ['TIMESTAMP']); + this.$ = { types: parser.findReturnTypes($$[$0-4]) }; + +break; +case 1556: + + parser.valueExpressionSuggest(); + parser.applyTypeToSuggestions(['STRING', 'TIMESTAMP']); + this.$ = { types: parser.findReturnTypes($$[$0-3]) }; + +break; +case 1557: + + parser.applyTypeToSuggestions($$[$0-2].toLowerCase() === 'from' ? ['STRING'] : ['TIMESTAMP']); + this.$ = { types: parser.findReturnTypes($$[$0-5]) }; + +break; +case 1558: + + parser.applyTypeToSuggestions($$[$0-1].toLowerCase() === 'from' ? ['STRING'] : ['TIMESTAMP']); + this.$ = { types: parser.findReturnTypes($$[$0-4]) }; + +break; +case 1559: + + parser.applyTypeToSuggestions(['STRING', 'TIMESTAMP']); + this.$ = { types: parser.findReturnTypes($$[$0-3]) }; + +break; +case 1560: + + parser.valueExpressionSuggest(); + parser.applyTypeToSuggestions($$[$0-2].toLowerCase() === 'from' ? ['TIMESTAMP'] : ['STRING']); + this.$ = { types: parser.findReturnTypes($$[$0-5]) }; + +break; +case 1561: + + parser.valueExpressionSuggest(); + parser.applyTypeToSuggestions($$[$0-1].toLowerCase() === 'from' ? ['TIMESTAMP'] : ['STRING']); + this.$ = { types: parser.findReturnTypes($$[$0-4]) }; + +break; +case 1562: + + parser.applyTypeToSuggestions($$[$0-2].toLowerCase() === 'from' ? ['TIMESTAMP'] : ['STRING']); + this.$ = { types: parser.findReturnTypes($$[$0-5]) }; + +break; +case 1563: + + parser.applyTypeToSuggestions($$[$0-1].toLowerCase() === 'from' ? ['TIMESTAMP'] : ['STRING']); + this.$ = { types: parser.findReturnTypes($$[$0-4]) }; + +break; +case 1564: + + if ($$[$0-3].types[0] === 'STRING') { + parser.suggestValueExpressionKeywords($$[$0-3], ['FROM']); + } else { + parser.suggestValueExpressionKeywords($$[$0-3]); + } + this.$ = { types: parser.findReturnTypes($$[$0-5]) }; + +break; +case 1565: + + if ($$[$0-2].types[0] === 'STRING') { + parser.suggestValueExpressionKeywords($$[$0-2], ['FROM']); + } else { + parser.suggestValueExpressionKeywords($$[$0-2]); + } + this.$ = { types: parser.findReturnTypes($$[$0-4]) }; + +break; +case 1570: + + parser.valueExpressionSuggest(); + parser.applyArgumentTypesToSuggestions($$[$0-4], 1); + var keywords = parser.getSelectListKeywords(true); + if (!$$[$0-2]) { + keywords.push('DISTINCT'); + if (parser.isImpala()) { + keywords.push('ALL'); + } + } + if (parser.yy.result.suggestKeywords) { + keywords = parser.yy.result.suggestKeywords.concat(keywords); + } + parser.suggestKeywords(keywords); + this.$ = { types: parser.findReturnTypes($$[$0-4]) }; + +break; +case 1572: + + if (parser.yy.result.suggestFunctions && ! parser.yy.result.suggestFunctions.types) { + parser.applyArgumentTypesToSuggestions($$[$0-4], 1); + } + this.$ = { types: parser.findReturnTypes($$[$0-4]) }; + +break; +case 1573: +this.$ = { lateralView: { udtf: $$[$0-2], tableAlias: $$[$0-1], columnAliases: $$[$0] }}; +break; +case 1574: + + if ($$[$0-1].function.toLowerCase() === 'explode') { + this.$ = { lateralView: { udtf: $$[$0-1], tableAlias: $$[$0], columnAliases: ['key', 'value'] }, suggestKeywords: ['AS'] }; + } else if ($$[$0-1].function.toLowerCase() === 'posexplode') { + this.$ = { lateralView: { udtf: $$[$0-1], tableAlias: $$[$0], columnAliases: ['pos', 'val'] }, suggestKeywords: ['AS'] }; + } else { + this.$ = { lateralView: { udtf: $$[$0-1], tableAlias: $$[$0], columnAliases: [] }, suggestKeywords: ['AS'] }; + } + +break; +case 1575: +this.$ = { lateralView: { udtf: $$[$0-1], columnAliases: $$[$0] }}; +break; +case 1582: + + if (!$$[$0-1]) { + parser.suggestKeywords([{ value: 'OUTER', weight: 2 }, { value: 'explode', weight: 1 }, { value: 'posexplode', weight: 1 }]); + } else { + parser.suggestKeywords(['explode', 'posexplode']); + } + +break; +case 1583: + + parser.suggestKeywords(['VIEW']); + +break; +case 1587: +this.$ = [ $$[$0-2], $$[$0] ]; +break; +case 1591: +this.$ = { inValueEdit: true }; +break; +case 1592: +this.$ = { inValueEdit: true, cursorAtStart: true }; +break; +case 1593: case 1594: case 1595: case 1596: case 1597: +this.$ = { suggestKeywords: ['NOT'] }; +break; +case 1603: case 1604: case 1605: case 1606: case 1607: + + parser.suggestFunctions({ types: [ 'STRING' ] }); + parser.suggestColumns({ types: [ 'STRING' ] }); + this.$ = { types: ['BOOLEAN'] } + +break; +case 1608: case 1610: +this.$ = parser.findCaseType($$[$0-1]); +break; +case 1609: case 1612: + + $$[$0-3].caseTypes.push($$[$0-1]); + this.$ = parser.findCaseType($$[$0-3]); + +break; +case 1611: + + parser.suggestValueExpressionKeywords($$[$0-1], ['END']); + $$[$0-3].caseTypes.push($$[$0-1]); + this.$ = parser.findCaseType($$[$0-3]); + +break; +case 1613: +this.$ = parser.findCaseType($$[$0-2]); +break; +case 1614: + + if ($$[$0].toLowerCase() !== 'end') { + parser.suggestValueExpressionKeywords($$[$0-3], [{ value: 'END', weight: 3 }, { value: 'ELSE', weight: 2 }, { value: 'WHEN', weight: 1 }]); + } else { + parser.suggestValueExpressionKeywords($$[$0-3], [{ value: 'ELSE', weight: 2 }, { value: 'WHEN', weight: 1 }]); + } + this.$ = parser.findCaseType($$[$0-3]); + +break; +case 1615: + + if ($$[$0].toLowerCase() !== 'end') { + parser.suggestValueExpressionKeywords($$[$0-2], [{ value: 'END', weight: 3 }, { value: 'ELSE', weight: 2 }, { value: 'WHEN', weight: 1 }]); + } else { + parser.suggestValueExpressionKeywords($$[$0-2], [{ value: 'ELSE', weight: 2 }, { value: 'WHEN', weight: 1 }]); + } + this.$ = parser.findCaseType($$[$0-2]); + +break; +case 1616: + + $$[$0-3].caseTypes.push($$[$0-1]); + this.$ = parser.findCaseType($$[$0-3]); + this.$.suggestFilters = $$[$0-1].suggestFilters + +break; +case 1617: + + parser.valueExpressionSuggest(); + this.$ = parser.findCaseType($$[$0-3]); + +break; +case 1618: + + parser.valueExpressionSuggest(); + this.$ = { types: [ 'T' ], typeSet: true }; + +break; +case 1619: + + parser.valueExpressionSuggest(); + parser.suggestKeywords(['WHEN']); + this.$ = $$[$0-1]; + +break; +case 1620: + + parser.valueExpressionSuggest(); + parser.suggestKeywords(['WHEN']); + this.$ = { types: [ 'T' ] }; + +break; +case 1623: +this.$ = { caseTypes: [ $$[$0] ], lastType: $$[$0] }; +break; +case 1624: + + $$[$0-1].caseTypes.push($$[$0]); + this.$ = { caseTypes: $$[$0-1].caseTypes, lastType: $$[$0] }; + +break; +case 1628: + + parser.suggestValueExpressionKeywords($$[$0-2], ['WHEN']); + +break; +case 1631: +this.$ = { caseTypes: [{ types: ['T'] }], suggestFilters: $$[$0].suggestFilters }; +break; +case 1632: +this.$ = { caseTypes: [{ types: ['T'] }], suggestFilters: $$[$0-1].suggestFilters }; +break; +case 1633: +this.$ = { caseTypes: [$$[$0]], suggestFilters: $$[$0-2].suggestFilters }; +break; +case 1634: case 1635: +this.$ = { caseTypes: [$$[$0]], suggestFilters: $$[$0].suggestFilters }; +break; +case 1636: + + parser.suggestKeywords(['WHEN']); + this.$ = { caseTypes: [{ types: ['T'] }] }; + +break; +case 1637: + + parser.suggestKeywords(['WHEN']); + this.$ = { caseTypes: [$$[$0]] }; + +break; +case 1638: + + parser.valueExpressionSuggest(); + parser.suggestKeywords(['WHEN']); + this.$ = { caseTypes: [{ types: ['T'] }] }; + +break; +case 1639: + + parser.valueExpressionSuggest(); + parser.suggestKeywords(['WHEN']); + this.$ = { caseTypes: [{ types: ['T'] }] }; + +break; +case 1640: case 1642: + + parser.valueExpressionSuggest(); + this.$ = { caseTypes: [{ types: ['T'] }], suggestFilters: true }; + +break; +case 1641: + + parser.valueExpressionSuggest(); + parser.suggestKeywords(['THEN']); + this.$ = { caseTypes: [{ types: ['T'] }], suggestFilters: true }; + +break; +case 1643: + + parser.valueExpressionSuggest(); + this.$ = { caseTypes: [$$[$0]], suggestFilters: true }; + +break; +case 1644: + + parser.suggestValueExpressionKeywords($$[$0-1], ['THEN']); + this.$ = { caseTypes: [{ types: ['T'] }] }; + +break; +case 1645: + + parser.suggestValueExpressionKeywords($$[$0-2], ['THEN']); + this.$ = { caseTypes: [{ types: ['T'] }] }; + +break; +case 1646: case 1647: case 1648: case 1649: + + parser.valueExpressionSuggest(); + this.$ = { caseTypes: [{ types: ['T'] }] }; + +break; +case 1664: + + if (parser.isHive()) { + parser.suggestKeywords(['DATABASE', 'INDEX', 'SCHEMA', 'TABLE', 'VIEW']); + } else { + parser.suggestKeywords(['TABLE', 'VIEW']); + } + +break; +case 1665: case 1667: + + parser.addDatabaseLocation(_$[$0-3], [ { name: $$[$0-3] } ]); + +break; +case 1666: + + parser.addDatabaseLocation(_$[$0-2], [ { name: $$[$0-2] } ]); + +break; +case 1668: + + if (parser.isHive()) { + parser.suggestDatabases(); + } + +break; +case 1669: + + parser.addDatabaseLocation(_$[$0-1], [ { name: $$[$0-1] } ]); + if (parser.isHive()) { + parser.suggestKeywords(['SET DBPROPERTIES', 'SET LOCATION', 'SET OWNER']); + } + +break; +case 1670: + + parser.addDatabaseLocation(_$[$0-2], [ { name: $$[$0-2] } ]); + if (parser.isHive()) { + parser.suggestKeywords(['DBPROPERTIES', 'LOCATION', 'OWNER']); + } + +break; +case 1671: case 1965: + + parser.addDatabaseLocation(_$[$0-2], [ { name: $$[$0-2] } ]); + +break; +case 1672: + + parser.addDatabaseLocation(_$[$0-3], [ { name: $$[$0-3] } ]); + parser.suggestKeywords(['GROUP', 'ROLE', 'USER']); + +break; +case 1673: + + parser.addDatabaseLocation(_$[$0-3], [ { name: $$[$0-3] } ]); + +break; +case 1675: case 1758: case 2313: case 2686: case 3010: case 3222: case 3238: case 3240: + + parser.suggestKeywords(['ON']); + +break; +case 1679: + + parser.addTablePrimary($$[$0-2]); + if (!$$[$0-1]) { + parser.suggestKeywords(['PARTITION', 'REBUILD']); + } else { + parser.suggestKeywords(['REBUILD']); + } + +break; +case 1700: + + if (!$$[$0-1] && parser.isImpala()) { + parser.suggestKeywords([{ value: 'IF NOT EXISTS', weight: 4 }, { value: 'COLUMNS', weight: 3 }, { value: 'PARTITION', weight: 2 }, { value: 'RANGE PARTITION', weight: 1 }]); + } else if (!$$[$0-1] && parser.isHive()) { + parser.suggestKeywords([{ value: 'IF NOT EXISTS', weight: 3 }, { value: 'COLUMNS', weight: 2 }, { value: 'CONSTRAINT', weight: 1 }, { value: 'PARTITION', weight: 1 }]); + } else if (parser.isImpala()) { + parser.suggestKeywords([{ value: 'PARTITION', weight: 2 }, { value: 'RANGE PARTITION', weight: 1 }]); + } else if (parser.isHive()) { + parser.suggestKeywords(['PARTITION']); + } + +break; +case 1701: case 1722: case 1992: + + parser.suggestKeywords(['COLUMNS']); + +break; +case 1706: + + if (parser.isHive()) { + if (!$$[$0-3] && !$$[$0-2] && !$$[$0-1]) { + parser.suggestKeywords(['LOCATION', 'PARTITION']); + } else if ($$[$0-2] && $$[$0-2].suggestKeywords) { + var keywords = parser.createWeightedKeywords($$[$0-2].suggestKeywords, 2); + keywords.push({ value: 'PARTITION', weight: 1 }); + parser.suggestKeywords(keywords); + } else { + parser.suggestKeywords(['PARTITION']); + } + } else if (parser.isImpala()) { + if (!$$[$0-3] && !$$[$0-2] && !$$[$0-1]) { + parser.suggestKeywords(['LOCATION', 'CACHED IN', 'UNCACHED']); + } else if (!$$[$0-1]) { + parser.suggestKeywords(['CACHED IN', 'UNCACHED']); + } else if ($$[$0-1] && $$[$0-1].suggestKeywords) { + parser.suggestKeywords($$[$0-1].suggestKeywords); + } + } + +break; +case 1708: case 1741: case 1749: case 1761: case 1839: case 1865: case 3294: + + parser.suggestKeywords(['PARTITION']); + +break; +case 1709: case 1866: + + parser.suggestKeywords(['VALUE']); + +break; +case 1713: + + parser.suggestKeywords(['FOREIGN KEY', 'PRIMARY KEY']); + +break; +case 1720: + + if (parser.isHive()) { + parser.suggestKeywords(['ADD COLUMNS', 'ADD IF NOT EXISTS', 'ADD PARTITION', 'ARCHIVE PARTITION', 'CHANGE', + 'CLUSTERED BY', 'CONCATENATE', 'COMPACT', 'DISABLE NO_DROP', 'DISABLE OFFLINE', 'DROP', 'ENABLE NO_DROP', + 'ENABLE OFFLINE', 'EXCHANGE PARTITION', 'NOT SKEWED', 'NOT STORED AS DIRECTORIES', 'PARTITION', + 'RECOVER PARTITIONS', 'RENAME TO', 'REPLACE COLUMNS', 'SET FILEFORMAT', 'SET LOCATION', 'SET OWNER', 'SET SERDE', + 'SET SERDEPROPERTIES', 'SET SKEWED LOCATION', 'SET TBLPROPERTIES', 'SKEWED BY', 'TOUCH', 'UNARCHIVE PARTITION']); + } else if (parser.isImpala()) { + parser.suggestKeywords(['ADD COLUMNS', 'ADD PARTITION', 'ADD RANGE PARTITION', 'ALTER', 'ALTER COLUMN', 'CHANGE', + 'DROP COLUMN', 'DROP PARTITION', 'DROP RANGE PARTITION', 'PARTITION', 'RECOVER PARTITIONS', 'RENAME TO', + 'REPLACE COLUMNS', 'SET CACHED IN', 'SET COLUMN STATS', 'SET FILEFORMAT', 'SET LOCATION', 'SET ROW FORMAT', + 'SET SERDEPROPERTIES', 'SET TBLPROPERTIES', 'SET UNCACHED']); + } + +break; +case 1721: + + if (parser.isHive()) { + parser.suggestKeywords(['ADD COLUMNS', 'CHANGE', 'COMPACT', 'CONCATENATE', 'DISABLE NO_DROP', 'DISABLE OFFLINE', + 'ENABLE NO_DROP', 'ENABLE OFFLINE', 'RENAME TO PARTITION', 'REPLACE COLUMNS', 'SET FILEFORMAT', 'SET LOCATION', + 'SET SERDE', 'SET SERDEPROPERTIES']); + } else if (parser.isImpala()) { + parser.suggestKeywords(['SET CACHED IN', 'SET FILEFORMAT', 'SET LOCATION', 'SET ROW FORMAT', + 'SET SERDEPROPERTIES', 'SET TBLPROPERTIES', 'SET UNCACHED']); + } + +break; +case 1723: + + if (parser.isHive()) { + parser.suggestKeywords(['FILEFORMAT', 'LOCATION', 'SERDE', 'SERDEPROPERTIES']); + } else if (parser.isImpala()) { + parser.suggestKeywords(['CACHED IN', 'FILEFORMAT', 'LOCATION', 'ROW FORMAT', 'SERDEPROPERTIES','TBLPROPERTIES', 'UNCACHED']); + } + +break; +case 1724: + + if (parser.isHive()) { + parser.suggestKeywords(['FILEFORMAT', 'LOCATION', 'OWNER', 'SERDE', 'SERDEPROPERTIES', 'SKEWED LOCATION', 'TBLPROPERTIES']); + } else if (parser.isImpala()) { + parser.suggestKeywords(['CACHED IN', 'COLUMN STATS', 'FILEFORMAT', 'LOCATION', 'ROW FORMAT', 'SERDEPROPERTIES', 'TBLPROPERTIES', 'UNCACHED']); + } + +break; +case 1726: case 1953: case 2744: case 2760: + + parser.suggestKeywords(['TO']); + +break; +case 1728: case 1750: case 2246: + + parser.suggestKeywords(['PARTITIONS']); + +break; +case 1745: + + if (parser.isHive()) { + parser.suggestKeywords(['SKEWED', 'STORED AS DIRECTORIES']); + } + +break; +case 1746: case 1942: + + parser.suggestKeywords(['AS DIRECTORIES']); + +break; +case 1747: case 1943: + + parser.suggestKeywords(['DIRECTORIES']); + +break; +case 1748: + + parser.suggestKeywords(['TO PARTITION']); + +break; +case 1751: case 2424: case 2443: + + parser.suggestKeywords(['LOCATION']); + +break; +case 1754: case 2740: case 2745: case 2749: case 2816: case 2817: case 2818: case 2851: case 2859: case 2862: case 2865: case 2870: case 2873: + + parser.suggestKeywords(['GROUP', 'ROLE', 'USER']); + +break; +case 1759: + + if (!$$[$0-1]) { + parser.suggestKeywords(['STORED AS DIRECTORIES']); + } + +break; +case 1763: case 1770: case 1804: case 1807: case 1809: + + parser.addColumnLocation($$[$0-3].location, [ $$[$0-3].identifier ]); + +break; +case 1764: + + parser.addColumnLocation($$[$0-2].location, [ $$[$0-2].identifier ]); + +break; +case 1765: case 1773: case 1774: + + parser.addColumnLocation($$[$0-1].location, [ $$[$0-1].identifier ]); + +break; +case 1766: + + if (parser.isImpala()) { + if (!$$[$0-1]) { + parser.suggestKeywords(['COLUMN']); + } + parser.suggestColumns(); + } + +break; +case 1767: + + if (parser.isImpala()) { + parser.suggestKeywords(['DROP DEFAULT', 'SET BLOCK_SIZE', 'SET COMMENT', 'SET COMPRESSION', 'SET DEFAULT', + 'SET ENCODING']); + parser.addColumnLocation($$[$0-1].location, [ $$[$0-1].identifier ]); + } + +break; +case 1768: + + if (parser.isImpala()) { + parser.suggestKeywords(['DEFAULT']); + parser.addColumnLocation($$[$0-2].location, [ $$[$0-2].identifier ]); + } + +break; +case 1769: + + if (parser.isImpala()) { + parser.suggestKeywords(['BLOCK_SIZE', 'COMMENT', 'COMPRESSION', 'DEFAULT', 'ENCODING']); + parser.addColumnLocation($$[$0-2].location, [ $$[$0-2].identifier ]); + } + +break; +case 1771: case 2022: case 2668: case 3171: case 3295: + + parser.suggestKeywords(['STATS']); + +break; +case 1791: + + parser.suggestIdentifiers(['\'avgSize\'', '\'maxSize\'', '\'numDVs\'', '\'numNulls\'']); + +break; +case 1806: + + if (parser.isHive() && !$$[$0-1]) { + parser.suggestKeywords(['COLUMN']); + } + parser.suggestColumns(); + +break; +case 1808: + + if (parser.isHive() && !$$[$0-2] && !$$[$0-1]) { + if ($$[$0-3].suggestKeywords) { + var keywords = parser.createWeightedKeywords($$[$0-3].suggestKeywords, 3); + keywords = keywords.concat([{ value: 'AFTER', weight: 2 }, { value: 'FIRST', weight: 2 }, { value: 'CASCADE', weight: 1 }, { value: 'RESTRICT', weight: 1 }]); + parser.suggestKeywords(keywords); + } else { + parser.suggestKeywords([{ value: 'AFTER', weight: 2 }, { value: 'FIRST', weight: 2 }, { value: 'CASCADE', weight: 1 }, { value: 'RESTRICT', weight: 1 }]); + } + } else if (parser.isHive() && $$[$0-2] && !$$[$0-1]) { + parser.suggestKeywords(['CASCADE', 'RESTRICT']); + } + parser.addColumnLocation($$[$0-4].location, [ $$[$0-4].identifier ]); + +break; +case 1810: + + if (!$$[$0-2] && !$$[$0-1]) { + parser.suggestKeywords(['AND WAIT', 'WITH OVERWRITE TBLPROPERTIES']); + } else if (!$$[$0-1]) { + parser.suggestKeywords(['WITH OVERWRITE TBLPROPERTIES']); + } + +break; +case 1813: + + parser.suggestKeywords(['NO_DROP', 'OFFLINE']); + +break; +case 1815: case 2332: + + parser.suggestFileFormats(); + +break; +case 1818: + + if (!$$[$0-1]) { + parser.suggestKeywords(['WITH REPLICATION =']); + } + +break; +case 1820: + + if (parser.isImpala()) { + parser.suggestKeywords(['FORMAT']); + } + +break; +case 1821: case 2956: + + parser.suggestKeywords(['DELIMITED']); + +break; +case 1824: + + if (!$$[$0-1]) { + parser.suggestKeywords(['WITH SERDEPROPERTIES']); + } + +break; +case 1828: + + parser.suggestKeywords(['WAIT']); + +break; +case 1831: + + parser.suggestKeywords(['OVERWRITE TBLPROPERTIES']); + +break; +case 1832: + + parser.suggestKeywords(['TBLPROPERTIES']); + +break; +case 1835: + + if (parser.isHive() && !$$[$0-1]) { + parser.suggestKeywords(['CASCADE', 'RESTRICT']); + } + +break; +case 1840: + + parser.suggestKeywords(['WITH TABLE']); + +break; +case 1841: case 1960: case 1974: case 2536: case 2560: case 2700: case 3090: case 3099: case 3226: + + parser.suggestKeywords(['TABLE']); + +break; +case 1859: + + parser.addColumnLocation($$[$0].location, [ $$[$0].identifier ]); + +break; +case 1860: + + if (parser.isHive() && !$$[$0-1]) { + parser.suggestKeywords([{ value: 'CONSTRAINT', weight: 1}, { value: 'PARTITION', weight: 1}, { value: 'IF EXISTS', weight: 2 }]); + } else if (parser.isHive()) { + parser.suggestKeywords(['PARTITION']); + } else if (parser.isImpala() && !$$[$0-1]) { + parser.suggestKeywords([{ value: 'COLUMN', weight: 1 }, { value: 'PARTITION', weight: 1 }, { value: 'RANGE PARTITION', weight: 1 }, { value: 'IF EXISTS', weight: 2 }]); + parser.suggestColumns(); + } else if (parser.isImpala()) { + parser.suggestKeywords(['PARTITION', 'RANGE PARTITION']); + } + +break; +case 1862: + + if (parser.isHive() && !$$[$0-1]) { + parser.suggestKeywords(['PURGE']); + } + +break; +case 1873: case 1976: case 2677: + + if (parser.yy.result.suggestTables) { + parser.yy.result.suggestTables.onlyTables = true; + } + +break; +case 1874: case 1961: case 1975: + + parser.suggestTables({ onlyTables: true }); + parser.suggestDatabases({ appendDot: true }); + +break; +case 1899: + + if (!$$[$0-1]) { + parser.suggestKeywords(['CASCADE']); + } + +break; +case 1907: case 1908: case 1909: + + if (parser.isHive()) { + parser.suggestKeywords(['PARTITION']); + } + +break; +case 1925: + + if (!$$[$0]) { + this.$ = { suggestKeywords: ['LOCATION'] }; + } + +break; +case 1949: + + if (parser.isHive()) { + parser.suggestKeywords(['AS', 'SET TBLPROPERTIES']); + } else if (parser.isImpala()) { + parser.suggestKeywords(['AS', 'RENAME TO']); + } else { + parser.suggestKeywords(['AS']); + } + +break; +case 1950: + + if (parser.isHive()) { + parser.suggestKeywords(['TBLPROPERTIES']); + } + +break; +case 1956: case 1962: case 2698: + + if (parser.yy.result.suggestTables) { + parser.yy.result.suggestTables.onlyViews = true; + } + +break; +case 1957: + + parser.suggestTables({ onlyViews: true }); + parser.suggestDatabases({ appendDot: true }); + +break; +case 1959: + + parser.suggestKeywords(['REPAIR TABLE']); + +break; +case 1964: case 2435: case 2646: + + parser.suggestKeywords(['FUNCTION']); + +break; +case 1966: + + parser.suggestKeywords(['ON DATABASE']); + +break; +case 1967: + + parser.suggestKeywords(['DATABASE']); + +break; +case 1969: + + parser.addDatabaseLocation(_$[$0-1], [ { name: $$[$0-1] } ]); + parser.suggestKeywords(['IS']); + +break; +case 1970: + + parser.addDatabaseLocation(_$[$0-2], [ { name: $$[$0-2] } ]); + parser.suggestKeywords(['NULL']); + +break; +case 1973: + + parser.addTablePrimary($$[$0-6]); + +break; +case 1978: + + parser.addTablePrimary($$[$0-2]); + if (!$$[$0-1]) { + parser.suggestKeywords([{ value: 'PARTITION', weight: 2 }, { value: 'COMPUTE STATISTICS', weight: 1 }]); + } else { + parser.suggestKeywords(['COMPUTE STATISTICS']); + } + +break; +case 1979: + + parser.addTablePrimary($$[$0-3]); + parser.suggestKeywords(['STATISTICS']); + +break; +case 1980: + + parser.addTablePrimary($$[$0-7]); + parser.suggestKeywords(parser.getKeywordsForOptionalsLR([$$[$0-2], $$[$0-1], $$[$0]], [{ value: 'FOR COLUMNS', weight: 3 }, { value: 'CACHE METADATA', weight: 2 }, { value: 'NOSCAN', weight: 1 }])); + +break; +case 1981: + + parser.addTablePrimary($$[$0-7]); + parser.suggestKeywords(parser.getKeywordsForOptionalsLR([$$[$0-1], $$[$0]], [{ value: 'CACHE METADATA', weight: 2 }, { value: 'NOSCAN', weight: 1 }])); + +break; +case 1982: + + parser.addTablePrimary($$[$0-7]); + parser.suggestKeywords(parser.getKeywordsForOptionalsLR([$$[$0]], [{ value: 'NOSCAN', weight: 1 }])); + +break; +case 1983: + + parser.suggestKeywords(['TABLE']); + parser.addTablePrimary($$[$0-1]); + +break; +case 1984: + + parser.suggestKeywords(['TABLE']); + parser.addTablePrimary($$[$0-6]); + +break; +case 1996: case 2008: + + parser.suggestKeywords(['METADATA']); + +break; +case 2001: + + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + parser.suggestKeywords(['FUNCTIONS']); + +break; +case 2003: case 3062: case 3204: + + parser.addTablePrimary($$[$0-2]); + if (!$$[$0-1]) { + parser.suggestKeywords(['PARTITION']); + } + +break; +case 2011: + + parser.addTablePrimary($$[$0]); + parser.suggestKeywords(['METADATA']); + +break; +case 2014: + + parser.suggestKeywords(['STATS', 'INCREMENTAL STATS']); + +break; +case 2017: + + parser.addTablePrimary($$[$0-1]); + parser.suggestKeywords(['STATS', 'INCREMENTAL STATS']); + +break; +case 2018: + + parser.addTablePrimary($$[$0-3]); + if (!$$[$0-1]) { + parser.suggestKeywords(['TABLESAMPLE']); + } else if ($$[$0-1].suggestKeywords) { + parser.suggestKeywords($$[$0-1].suggestKeywords); + } + +break; +case 2021: case 2667: + + parser.addTablePrimary($$[$0-1]); + parser.suggestKeywords(['INCREMENTAL']); + +break; +case 2023: + + parser.addTablePrimary($$[$0-1]); + parser.suggestKeywords(['STATS']); + +break; +case 2026: + + parser.addTablePrimary($$[$0-2]); + if (!$$[$0]) { + parser.suggestKeywords(['PARTITION']); + } + +break; +case 2041: + + if ($$[$0-1]) { + parser.suggestKeywords(['TABLE']); + } else if (parser.isHive()) { + if ($$[$0-2]) { + parser.suggestKeywords(['EXTERNAL TABLE', 'FUNCTION', 'MACRO', 'TABLE']); + } else { + parser.suggestKeywords(['DATABASE', 'EXTERNAL TABLE', 'FUNCTION', 'INDEX', 'ROLE', 'SCHEMA', 'TABLE', 'TEMPORARY EXTERNAL TABLE', 'TEMPORARY FUNCTION', 'TEMPORARY MACRO', 'TEMPORARY TABLE', 'VIEW']); + } + } else if (parser.isImpala()) { + parser.suggestKeywords(['AGGREGATE FUNCTION', 'DATABASE', 'EXTERNAL TABLE', 'FUNCTION', 'ROLE', 'SCHEMA', 'TABLE', 'VIEW']); + } else { + parser.suggestKeywords(['DATABASE', 'ROLE', 'SCHEMA', 'TABLE', 'VIEW']); + } + +break; +case 2044: case 2073: + + if (!$$[$0-1]) { + parser.suggestKeywords(['IF NOT EXISTS']); + } + +break; +case 2046: + + if (!$$[$0-2]) { + parser.suggestKeywords(['IF NOT EXISTS']); + } + +break; +case 2049: + + var keywords = []; + if (!$$[$0] && parser.isHive()) { + keywords.push('WITH DBPROPERTIES'); + } + if (!$$[$0-1] && !$$[$0]) { + keywords.push('LOCATION'); + } + if (!$$[$0-2] && !$$[$0-1] && !$$[$0]) { + keywords.push('COMMENT'); + } + if (keywords.length > 0) { + parser.suggestKeywords(keywords); + } + +break; +case 2064: + + parser.suggestKeywords(['DBPROPERTIES']); + +break; +case 2087: + + var keywords = []; + if (!$$[$0-11] && !$$[$0-10] && !$$[$0-9] && !$$[$0-8] && !$$[$0-7] && !$$[$0-6] && !$$[$0-5] && !$$[$0-4] && !$$[$0-3] && !$$[$0-2] && !$$[$0-1]) { + keywords.push({ value: 'LIKE', weight: 1 }); + if (parser.isImpala()) { + keywords.push({ value: 'LIKE PARQUET', weight: 1 }); + } + } else { + if (!$$[$0-10] && !$$[$0-9] && !$$[$0-8] && !$$[$0-7] && !$$[$0-6] && !$$[$0-5] && !$$[$0-4] && !$$[$0-3] && !$$[$0-2] && !$$[$0-1]) { + keywords.push({ value: 'COMMENT', weight: 11 }); + } + if (!$$[$0-9] && !$$[$0-8] && !$$[$0-7] && !$$[$0-6] && !$$[$0-5] && !$$[$0-4] && !$$[$0-3] && !$$[$0-2] && !$$[$0-1]) { + keywords.push({ value: 'PARTITIONED BY', weight: 10 }); + if (parser.isImpala()) { + keywords.push({ value: 'PARTITION BY', weight: 10 }); + } + } + if (parser.isImpala() && !$$[$0-8] && !$$[$0-7] && !$$[$0-6] && !$$[$0-5] && !$$[$0-4] && !$$[$0-3] && !$$[$0-2] && !$$[$0-1]) { + keywords.push({ value: 'SORT BY', weight: 9 }); + } + if (parser.isHive() && !$$[$0-7] && !$$[$0-6] && !$$[$0-5] && !$$[$0-4] && !$$[$0-3] && !$$[$0-2] && !$$[$0-1]) { + keywords.push({ value: 'CLUSTERED BY', weight: 8 }); + } + if (parser.isHive() && !$$[$0-6] && !$$[$0-5] && !$$[$0-4] && !$$[$0-3] && !$$[$0-2] && !$$[$0-1]) { + keywords.push({ value: 'SKEWED BY', weight: 7 }); + } else if (parser.isHive() && $$[$0-6] && $$[$0-6].suggestKeywords && !$$[$0-5] && !$$[$0-4] && !$$[$0-3] && !$$[$0-2] && !$$[$0-2]) { + keywords = keywords.concat(parser.createWeightedKeywords($$[$0-6].suggestKeywords, 7)); // Get the last optional from SKEWED BY + } + if (!$$[$0-5] && !$$[$0-4] && !$$[$0-3] && !$$[$0-2] && !$$[$0-1]) { + keywords.push({ value: 'ROW FORMAT', weight: 6 }); + keywords.push({ value: 'STORED AS', weight: 6 }); + if (parser.isHive()) { + keywords.push({ value: 'STORED BY', weight: 6 }); + } + } else if ($$[$0-5] && $$[$0-5].suggestKeywords && !$$[$0-4] && !$$[$0-3] && !$$[$0-2] && !$$[$0-1]) { + keywords = keywords.concat(parser.createWeightedKeywords($$[$0-5].suggestKeywords, 6)); + } + if ((($$[$0-5] && $$[$0-5].storedBy) || parser.isImpala()) && !$$[$0-4] && !$$[$0-3] && !$$[$0-2] && !$$[$0-1]) { + keywords.push({ value: 'WITH SERDEPROPERTIES', weight: 5 }); + } + if (!$$[$0-3] && !$$[$0-2] && !$$[$0-1]) { + keywords.push({ value: 'LOCATION', weight: 4 }); + } + if (!$$[$0-2] && !$$[$0-1]) { + keywords.push({ value: 'TBLPROPERTIES', weight: 3 }); + } + if (parser.isImpala() && !$$[$0-1]) { + keywords.push({ value: 'CACHED IN', weight: 2 }, { value: 'UNCACHED', weight: 2 }); + } + if (parser.isImpala() && $$[$0-1] && $$[$0-1].suggestKeywords) { + keywords = keywords.concat(parser.createWeightedKeywords($$[$0-1].suggestKeywords, 2)); + } + keywords.push({ value: 'AS', weight: 1 }); + } + + if (keywords.length > 0) { + parser.suggestKeywords(keywords); + } + +break; +case 2097: + + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + if (parser.isImpala()) { + parser.suggestKeywords(['PARQUET']); + } + +break; +case 2103: + + if (parser.isImpala()) { + parser.suggestKeywords(['PRIMARY KEY']); + } else if (parser.isHive()) { + parser.suggestKeywords([{ value: 'PRIMARY KEY', weight: 2 }, { value: 'CONSTRAINT', weight: 1 }]); + } + +break; +case 2110: case 2112: case 2305: + + parser.checkForKeywords($$[$0-1]); + +break; +case 2111: case 2113: + + parser.checkForKeywords($$[$0-3]); + +break; +case 2114: + + this.$ = $$[$0-2]; + var keywords = []; + if (parser.isImpala()) { + if (!$$[$0]['primary']) { + keywords.push('PRIMARY KEY'); + } + if (!$$[$0]['encoding']) { + keywords.push('ENCODING'); + } + if (!$$[$0]['compression']) { + keywords.push('COMPRESSION'); + } + if (!$$[$0]['default']) { + keywords.push('DEFAULT'); + } + if (!$$[$0]['block_size']) { + keywords.push('BLOCK_SIZE'); + } + if (!$$[$0]['null']) { + keywords.push('NOT NULL'); + keywords.push('NULL'); + } + } + if (!$$[$0]['comment']) { + keywords.push('COMMENT'); + if (parser.isHive() && $$[$0-1].toLowerCase() === 'double') { + keywords.push({ value: 'PRECISION', weight: 2 }); + } + } + if (keywords.length > 0) { + this.$.suggestKeywords = keywords; + } + +break; +case 2115: case 2151: case 2157: case 2158: case 2171: case 2174: case 2186: case 2188: case 2586: + + parser.suggestKeywords(parser.getColumnDataTypeKeywords()); + +break; +case 2120: + + this.$ = {}; + this.$[$$[$0]] = true; + +break; +case 2121: + + $$[$0-1][$$[$0]] = true; + +break; +case 2126: +this.$ = 'primary'; +break; +case 2127: +this.$ = 'encoding'; +break; +case 2128: +this.$ = 'compression'; +break; +case 2129: +this.$ = 'default'; +break; +case 2130: +this.$ = 'block_size'; +break; +case 2131: case 2132: +this.$ = 'null'; +break; +case 2133: +this.$ = 'comment'; +break; +case 2135: + + if (parser.isImpala()) { + parser.suggestKeywords(['NULL']); + } + +break; +case 2156: case 2470: case 2481: case 2504: + + parser.suggestKeywords(parser.getTypeKeywords()); + +break; +case 2170: case 2173: + + parser.suggestKeywords(['COMMENT']); + +break; +case 2198: + + parser.suggestKeywords(['CONSTRAINT']); + +break; +case 2199: case 2202: + + parser.suggestKeywords(['FOREIGN KEY']); + +break; +case 2204: + + parser.suggestKeywords(['PRIMARY KEY']); + +break; +case 2208: + + parser.suggestKeywords(['DISABLE NOVALIDATE']); + +break; +case 2209: + + parser.suggestKeywords(['NOVALIDATE']); + +break; +case 2211: case 3097: case 3104: case 3111: + + parser.addTablePrimary($$[$0-4]); + +break; +case 2212: case 2229: case 2231: + + parser.suggestKeywords(['KEY']); + +break; +case 2214: + + parser.suggestKeywords(['REFERENCES']); + +break; +case 2218: + + parser.addTablePrimary($$[$0-2]); + parser.suggestKeywords(['DISABLE NOVALIDATE']); + +break; +case 2219: + + parser.addTablePrimary($$[$0-3]); + parser.suggestKeywords(['NOVALIDATE']); + +break; +case 2220: + + parser.addTablePrimary($$[$0-5]); + if (!$$[$0-1]) { + parser.suggestKeywords(['NORELY', 'RELY']); + } + +break; +case 2242: + + parser.suggestKeywords(['HASH', 'RANGE']); + +break; +case 2254: case 2259: case 2260: + + if (parser.isImpala()) { + parser.suggestKeywords(['PARTITION']); + } + +break; +case 2267: + + if (parser.isImpala()) { + parser.suggestKeywords(['VALUE', 'VALUES']); + } + +break; +case 2269: case 2574: case 3006: + + parser.suggestFunctions(); + +break; +case 2270: + + if ($$[$0].endsWithLessThanOrEqual && parser.isImpala()) { + parser.suggestKeywords(['VALUES']); + } + +break; +case 2271: case 2274: case 2277: + + if (parser.isImpala()) { + parser.suggestKeywords(['<', '<=']); + } + +break; +case 2272: + + if (parser.isImpala()) { + parser.suggestKeywords(['VALUES']); + } + +break; +case 2275: case 2278: + + if (parser.isImpala()) { + parser.suggestFunctions(); + } + +break; +case 2288: + + if (!$$[$0-1]) { + parser.suggestKeywords([{ value: 'INTO', weight: 1 }, { value: 'SORTED BY', weight: 2 }]); + } else { + parser.suggestKeywords(['INTO']); + } + +break; +case 2289: + + parser.suggestKeywords(['BUCKETS']); + +break; +case 2310: +this.$ = { suggestKeywords: ['STORED AS DIRECTORIES'] }; +break; +case 2320: + + this.$ = parser.mergeSuggestKeywords($$[$0-1], $$[$0]) + +break; +case 2321: + + this.$ = { storedBy: true } + +break; +case 2322: + + if (parser.isHive()) { + parser.suggestKeywords(['AS', 'BY']); + } else { + parser.suggestKeywords(['AS']); + } + +break; +case 2324: + + parser.suggestKeywords(['FORMAT']); + +break; +case 2325: + + if (parser.isHive()) { + parser.suggestKeywords(['DELIMITED', 'SERDE']); + } else { + parser.suggestKeywords(['DELIMITED']); + } + +break; +case 2329: +this.$ = { suggestKeywords: ['STORED AS'] }; +break; +case 2354: + + if (!$$[$0-4] && !$$[$0-3] && !$$[$0-2] && !$$[$0-1] && !$$[$0]) { + this.$ = { suggestKeywords: [{ value: 'FIELDS TERMINATED BY', weight: 5 }, { value: 'COLLECTION ITEMS TERMINATED BY', weight: 4 }, { value: 'MAP KEYS TERMINATED BY', weight: 3 }, { value: 'LINES TERMINATED BY', weight: 2 }, { value: 'NULL DEFINED AS', weight: 1 }]}; + } else if ($$[$0-4] && $$[$0-4].suggestKeywords && !$$[$0-3] && !$$[$0-2] && !$$[$0-1] && !$$[$0]) { + this.$ = { suggestKeywords: parser.createWeightedKeywords($$[$0-4].suggestKeywords, 5).concat([{ value: 'COLLECTION ITEMS TERMINATED BY', weight: 4 }, { value: 'MAP KEYS TERMINATED BY', weight: 3 }, { value: 'LINES TERMINATED BY', weight: 2 }, { value: 'NULL DEFINED AS', weight: 1 }]) }; + } else if (!$$[$0-3] && !$$[$0-2] && !$$[$0-1] && !$$[$0]) { + this.$ = { suggestKeywords: [{ value: 'COLLECTION ITEMS TERMINATED BY', weight: 4 }, { value: 'MAP KEYS TERMINATED BY', weight: 3 }, { value: 'LINES TERMINATED BY', weight: 2 }, { value: 'NULL DEFINED AS', weight: 1 }] }; + } else if (!$$[$0-2] && !$$[$0-1] && !$$[$0]) { + this.$ = { suggestKeywords: [{ value: 'MAP KEYS TERMINATED BY', weight: 3 }, { value: 'LINES TERMINATED BY', weight: 2 }, { value: 'NULL DEFINED AS', weight: 1 }] }; + } else if (!$$[$0-1] && !$$[$0]) { + this.$ = { suggestKeywords: [{ value: 'LINES TERMINATED BY', weight: 2 }, { value: 'NULL DEFINED AS', weight: 1 }] }; + } else if (!$$[$0]) { + this.$ = { suggestKeywords: [{ value: 'NULL DEFINED AS', weight: 1 }] }; + } + +break; +case 2360: + + if (!$$[$0-1] && !$$[$0]) { + this.$ = { suggestKeywords: [{ value: 'FIELDS TERMINATED BY', weight: 2 }, { value: 'LINES TERMINATED BY', weight: 1 }] }; + } else if ($$[$0-1] && $$[$0-1].suggestKeywords && !$$[$0]) { + this.$ = { suggestKeywords: parser.createWeightedKeywords($$[$0-1].suggestKeywords, 2).concat(['LINES TERMINATED BY']) }; + } else if (!$$[$0]) { + this.$ = { suggestKeywords: [{ value: 'LINES TERMINATED BY', weight: 1 }] }; + } + +break; +case 2364: +this.$ = { suggestKeywords: ['ESCAPED BY'] }; +break; +case 2366: case 2372: case 2377: case 2381: + + parser.suggestKeywords(['TERMINATED BY']); + +break; +case 2371: + + parser.suggestKeywords(['ITEMS TERMINATED BY']); + +break; +case 2376: + + parser.suggestKeywords(['KEYS TERMINATED BY']); + +break; +case 2385: + + parser.suggestKeywords(['DEFINED AS']); + +break; +case 2391: case 2392: + + parser.suggestKeywords(['SERDEPROPERTIES']); + +break; +case 2402: + + parser.commitLocations(); + +break; +case 2404: case 2421: case 2437: + + if (!$$[$0-1]) { + parser.suggestKeywords(['IF NOT EXISTS']); + } + parser.suggestDatabases({ appendDot: true }); + +break; +case 2405: + + if (!$$[$0-7]) { + parser.suggestKeywords(['IF NOT EXISTS']); + } + +break; +case 2408: + + var keywords = [{value: 'AS', weight: 1 }]; + if (!$$[$0-1]) { + if (parser.isHive()) { + keywords.push({ value: 'TBLPROPERTIES', weight: 2 }); + } + if (!$$[$0-2]) { + keywords.push({ value: 'COMMENT', weight: 3 }); + } + } + parser.suggestKeywords(keywords); + +break; +case 2422: + + if (!$$[$0-6]) { + parser.suggestKeywords(['IF NOT EXISTS']); + } + +break; +case 2423: case 2442: + + parser.suggestKeywords(['RETURNS']); + +break; +case 2425: + + parser.suggestKeywords(['SYMBOL']); + +break; +case 2436: + + if (!$$[$0-13]) { + parser.suggestKeywords(['IF NOT EXISTS']); + } + +break; +case 2444: + + if (!$$[$0-1]) { + parser.suggestKeywords([{value: 'INIT_FN', weight: 2 }, {value: 'UPDATE_FN', weight: 1 }]); + } else { + parser.suggestKeywords([{value: 'UPDATE_FN', weight: 1 }]); + } + +break; +case 2445: + + parser.suggestKeywords(['MERGE_FN']); + +break; +case 2446: + + if (!$$[$0-5] && !$$[$0-4] && !$$[$0-3] && !$$[$0-2] && !$$[$0-1]) { + parser.suggestKeywords([{value: 'PREPARE_FN', weight: 5 }, {value: 'CLOSE_FN', weight: 4 }, {value: 'SERIALIZE_FN', weight: 3 }, {value: 'FINALIZE_FN', weight: 2 }, {value: 'INTERMEDIATE', weight: 1 }]); + } else if ($$[$0-5] && !$$[$0-4] && !$$[$0-3] && !$$[$0-2] && !$$[$0-1]) { + parser.suggestKeywords([{value: 'CLOSE_FN', weight: 4 }, {value: 'SERIALIZE_FN', weight: 3 }, {value: 'FINALIZE_FN', weight: 2 }, {value: 'INTERMEDIATE', weight: 1 }]); + } else if ($$[$0-4] && !$$[$0-3] && !$$[$0-2] && !$$[$0-1]) { + parser.suggestKeywords([{value: 'SERIALIZE_FN', weight: 3 }, {value: 'FINALIZE_FN', weight: 2 }, {value: 'INTERMEDIATE', weight: 1 }]); + } else if ($$[$0-3] && !$$[$0-2] && !$$[$0-1]) { + parser.suggestKeywords([{value: 'FINALIZE_FN', weight: 2 }, {value: 'INTERMEDIATE', weight: 1 }]); + } else if ($$[$0-2] && !$$[$0-1]) { + parser.suggestKeywords([{value: 'INTERMEDIATE', weight: 1 }]); + } + +break; +case 2465: + + if (!$$[$0-1]) { + parser.suggestKeywords(['USING']); + } else { + parser.suggestKeywords(['ARCHIVE', 'FILE', 'JAR']); + } + +break; +case 2471: + + parser.suggestKeywords(['...']); + +break; +case 2506: + + parser.suggestFunctions(); + parser.suggestAggregateFunctions(); + parser.suggestAnalyticFunctions(); + +break; +case 2509: + + parser.suggestKeywords(['ARCHIVE', 'FILE', 'JAR']); + +break; +case 2521: + + if (!$$[$0-1]) { + parser.suggestKeywords(['COMMENT']); + } + +break; +case 2525: case 2527: +this.$ = $$[$0-3]; +break; +case 2535: + + parser.suggestKeywords(['ON TABLE']); + +break; +case 2541: case 2551: + + parser.suggestKeywords(['\'BITMAP\'', '\'COMPACT\'']); + +break; +case 2549: + + if (!$$[$0-7] && !$$[$0-6] && !$$[$0-5] && !$$[$0-4] && !$$[$0-3] && !$$[$0-2] && !$$[$0-1]) { + parser.suggestKeywords([{ value: 'WITH DEFERRED REBUILD', weight: 7 }, { value: 'IDXPROPERTIES', weight: 6 }, { value: 'IN TABLE', weight: 5 }, { value: 'ROW FORMAT', weight: 4 }, { value: 'STORED AS', weight: 4 }, { value: 'STORED BY', weight: 4 }, { value: 'LOCATION', weight: 3 }, { value: 'TBLPROPERTIES', weight: 2 }, { value: 'COMMENT', weight: 1 }]); + } else if (!$$[$0-6] && !$$[$0-5] && !$$[$0-4] && !$$[$0-3] && !$$[$0-2] && !$$[$0-1]) { + parser.suggestKeywords([{ value: 'IDXPROPERTIES', weight: 6 }, { value: 'IN TABLE', weight: 5 }, { value: 'ROW FORMAT', weight: 4 }, { value: 'STORED AS', weight: 4 }, { value: 'STORED BY', weight: 4 }, { value: 'LOCATION', weight: 3 }, { value: 'TBLPROPERTIES', weight: 2 }, { value: 'COMMENT', weight: 1 }]); + } else if (!$$[$0-5] && !$$[$0-4] && !$$[$0-3] && !$$[$0-2] && !$$[$0-1]) { + parser.suggestKeywords([{ value: 'IN TABLE', weight: 5 }, { value: 'ROW FORMAT', weight: 4 }, { value: 'STORED AS', weight: 4 }, { value: 'STORED BY', weight: 4 }, { value: 'LOCATION', weight: 3 }, { value: 'TBLPROPERTIES', weight: 2 }, { value: 'COMMENT', weight: 1 }]); + } else if (!$$[$0-4] && !$$[$0-3] && !$$[$0-2] && !$$[$0-1]) { + parser.suggestKeywords([{ value: 'ROW FORMAT', weight: 4 }, { value: 'STORED AS', weight: 4 }, { value: 'STORED BY', weight: 4 }, { value: 'LOCATION', weight: 3 }, { value: 'TBLPROPERTIES', weight: 2 }, { value: 'COMMENT', weight: 1 }]); + } else if ($$[$0-4] && $$[$0-4].suggestKeywords && !$$[$0-3] && !$$[$0-2] && !$$[$0-1]) { + parser.suggestKeywords(parser.createWeightedKeywords($$[$0-4].suggestKeywords, 4).concat([{ value: 'LOCATION', weight: 3 }, { value: 'TBLPROPERTIES', weight: 2 }, { value: 'COMMENT', weight: 1 }])); + } else if (!$$[$0-3] && !$$[$0-2] && !$$[$0-1]) { + parser.suggestKeywords([{ value: 'LOCATION', weight: 3 }, { value: 'TBLPROPERTIES', weight: 2 }, { value: 'COMMENT', weight: 1 }]); + } else if (!$$[$0-2] && !$$[$0-1]) { + parser.suggestKeywords([{ value: 'TBLPROPERTIES', weight: 2 }, { value: 'COMMENT', weight: 1 }]); + } else if (!$$[$0-1]) { + parser.suggestKeywords([{ value: 'COMMENT', weight: 1 }]); + } + +break; +case 2554: + + parser.suggestKeywords(['DEFERRED REBUILD']); + +break; +case 2555: + + parser.suggestKeywords(['REBUILD']); + +break; +case 2600: case 2602: + + parser.addCommonTableExpressions($$[$0-1]); + +break; +case 2626: + + if (parser.isHive()) { + parser.suggestKeywords(['DATABASE', 'FUNCTION', 'INDEX', 'ROLE', 'SCHEMA', 'TABLE', 'TEMPORARY FUNCTION', 'TEMPORARY MACRO', 'VIEW']); + } else if (parser.isImpala()) { + parser.suggestKeywords(['AGGREGATE FUNCTION', 'DATABASE', 'FUNCTION', 'INCREMENTAL STATS', 'ROLE', 'SCHEMA', 'STATS', 'TABLE', 'VIEW']); + } else { + parser.suggestKeywords(['ROLE', 'SCHEMA', 'TABLE', 'VIEW']); + } + +break; +case 2630: + + if (!$$[$0-1]) { + parser.suggestKeywords(['IF EXISTS']); + } + parser.suggestDatabases(); + +break; +case 2631: + + if (parser.isHive() || parser.isImpala()) { + parser.suggestKeywords(['CASCADE', 'RESTRICT']); + } + +break; +case 2633: case 2642: case 2647: + + if (!$$[$0-3]) { + parser.suggestKeywords(['IF EXISTS']); + } + +break; +case 2640: case 2641: + + if (!$$[$0-1]) { + parser.suggestKeywords(['IF EXISTS']); + } + parser.suggestDatabases({ appendDot: true }); + +break; +case 2644: + + parser.suggestKeywords(['AGGREGATE']); + +break; +case 2654: case 2659: case 2691: + + if (!$$[$0-1]) { + parser.suggestKeywords(['IF EXISTS']); + } + +break; +case 2655: + + if (!$$[$0-2]) { + parser.suggestKeywords(['IF EXISTS']); + } + +break; +case 2666: + + parser.addTablePrimary($$[$0]); + parser.suggestKeywords(['INCREMENTAL']); + +break; +case 2672: case 3264: + + parser.addTablePrimary($$[$0-1]); + parser.suggestKeywords(['PARTITION']); + +break; +case 2676: + + if (!$$[$0-1]) { + parser.suggestKeywords(['IF EXISTS']); + } + parser.suggestTables({ onlyTables: true }); + parser.suggestDatabases({ + appendDot: true + }); + +break; +case 2679: + + parser.addTablePrimary($$[$0-2]); + if (!$$[$0-1]) { + parser.suggestKeywords(['PURGE']); + } + +break; +case 2684: + + parser.suggestKeywords(['IF EXISTS']); + +break; +case 2690: + + parser.suggestKeywords(['FUNCTION', 'MACRO']); + +break; +case 2694: + + if (!$$[$0-1]) { + parser.suggestKeywords(['IF EXISTS']); + } + parser.suggestTables({ onlyViews: true }); + parser.suggestDatabases({ appendDot: true }); + +break; +case 2695: + + parser.addTablePrimary($$[$0]); + if (!$$[$0-2]) { + parser.suggestKeywords(['IF EXISTS']); + } + +break; +case 2701: + + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + if (parser.isImpala() && !$$[$0-2]) { + parser.suggestKeywords(['IF EXISTS']); + } + +break; +case 2704: + + parser.addTablePrimary($$[$0-2]); + if (parser.isHive() && !$$[$0-1]) { + parser.suggestKeywords(['PARTITION']); + } + +break; +case 2706: + + parser.addTablePrimary($$[$0-2]); + if (parser.isImpala() && !$$[$0-3]) { + parser.suggestKeywords(['IF EXISTS']); + } + +break; +case 2709: case 2864: case 2869: case 2872: case 2876: case 2884: + + parser.suggestKeywords(['FROM']); + +break; +case 2711: + + parser.addTablePrimary($$[$0-2]); + if (!$$[$0]) { + parser.suggestKeywords(['WHERE']); + } + +break; +case 2715: + + parser.suggestKeywords(['FROM']); + if (parser.isImpala() && !$$[$0-1]) { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + +break; +case 2718: + + var keywords = [{ value: 'FULL JOIN', weight: 1 }, { value: 'FULL OUTER JOIN', weight: 1 }, { value: 'JOIN', weight: 1 }, { value: 'LEFT JOIN', weight: 1 }, { value: 'LEFT OUTER JOIN', weight: 1 }, { value: 'RIGHT JOIN', weight: 1 }, { value: 'RIGHT OUTER JOIN', weight: 1 }, { value: 'INNER JOIN', weight: 1 }, { value: 'LEFT ANTI JOIN', weight: 1 }, { value: 'LEFT SEMI JOIN', weight: 1 }, { value: 'RIGHT ANTI JOIN', weight: 1 }, { value: 'RIGHT SEMI JOIN', weight: 1 }]; + if (!$$[$0]) { + keywords.push({ value: 'WHERE', weight: 3 }); + } + if ($$[$0-2].suggestJoinConditions) { + parser.suggestJoinConditions($$[$0-2].suggestJoinConditions); + } + if ($$[$0-2].suggestJoins) { + parser.suggestJoins($$[$0-2].suggestJoins); + } + if ($$[$0-2].suggestKeywords) { + keywords = keywords.concat(parser.createWeightedKeywords($$[$0-2].suggestKeywords, 2)); + } + if (keywords.length > 0) { + parser.suggestKeywords(keywords); + } + +break; +case 2727: + + parser.suggestKeywords(['TRANSACTIONS']); + +break; +case 2736: + + parser.suggestKeywords(['ALL', 'ALTER', 'CREATE', 'DELETE', 'DROP', 'INDEX', 'INSERT', 'LOCK', 'ROLE', 'SELECT', 'UPDATE']); + +break; +case 2739: + + if (!$$[$0-1]) { + parser.suggestKeywords(['ON', 'TO']); + } else { + parser.suggestKeywords(['TO']); + } + +break; +case 2742: case 2762: case 2764: + + if (!$$[$0-1]) { + parser.suggestKeywords(['WITH GRANT OPTION']); + } + +break; +case 2747: case 2751: + + if (!$$[$0-1]) { + parser.suggestKeywords(['WITH ADMIN OPTION']); + } + +break; +case 2753: case 2877: + + parser.suggestKeywords(['ALL', 'ALTER', 'CREATE', 'DROP', 'INSERT', 'REFRESH', 'ROLE', 'SELECT']); + +break; +case 2754: + + parser.suggestKeywords(['TO GROUP']); + +break; +case 2755: case 2879: case 3277: case 3278: + + parser.suggestKeywords(['GROUP']); + +break; +case 2757: case 2881: + + if ($$[$0-1].isCreate) { + parser.suggestKeywords(['ON DATABASE', 'ON SERVER']); + } else { + parser.suggestKeywords(['ON DATABASE', 'ON SERVER', 'ON TABLE', 'ON URI']); + } + +break; +case 2758: + + if ($$[$0-2].isCreate) { + parser.suggestKeywords(['DATABASE', 'SERVER']); + } else { + parser.suggestKeywords(['DATABASE', 'SERVER', 'TABLE', 'URI']); + } + +break; +case 2761: case 2868: case 2885: case 3227: + + parser.suggestKeywords(['ROLE']); + +break; +case 2768: + + parser.suggestKeywords(['DATABASE', 'TABLE']); + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + +break; +case 2784: + + if ($$[$0].toUpperCase() === 'ALL') { + this.$ = { singleAll: true }; + } + +break; +case 2790: case 2791: case 2792: case 2855: + + parser.suggestKeywords(['ALL', 'ALTER', 'CREATE', 'DELETE', 'DROP', 'INDEX', 'INSERT', 'LOCK', 'SELECT', 'SHOW_DATABASE', 'UPDATE']); + +break; +case 2808: +this.$ = { isCreate: true }; +break; +case 2830: + + parser.suggestKeywords(['GRANT OPTION']); + +break; +case 2831: case 2832: case 2836: case 2888: + + parser.suggestKeywords(['OPTION']); + +break; +case 2835: + + parser.suggestKeywords(['ADMIN OPTION']); + +break; +case 2847: + + parser.suggestKeywords(['ADMIN OPTION FOR', 'ALL', 'ALL GRANT OPTION FROM', 'ALL PRIVILEGES FROM', 'ALTER', 'CREATE', 'DELETE', 'DROP', 'GRANT OPTION FOR', 'INDEX', 'INSERT', 'LOCK', 'ROLE', 'SELECT', 'UPDATE']); + +break; +case 2850: + + if (!$$[$0-1]) { + if ($$[$0-2].singleAll) { + parser.suggestKeywords(['FROM', 'GRANT OPTION', 'ON', 'PRIVILEGES FROM']); + } else { + parser.suggestKeywords(['FROM', 'ON']); + } + } else { + parser.suggestKeywords(['FROM']); + } + +break; +case 2853: + + parser.suggestKeywords(['OPTION FOR']); + +break; +case 2854: case 2867: + + parser.suggestKeywords(['FOR']); + +break; +case 2858: + + if (!$$[$0-1]) { + parser.suggestKeywords(['FROM', 'ON']); + } else { + parser.suggestKeywords(['FROM']); + } + +break; +case 2861: + + if ($$[$0-1].toUpperCase() === 'ADMIN') { + parser.suggestKeywords(['FROM', 'OPTION FOR']); + } else { + parser.suggestKeywords(['FROM']); + } + +break; +case 2878: + + parser.suggestKeywords(['FROM GROUP']); + +break; +case 2882: + + if ($$[$0-2].isCreate) { + parser.suggestKeywords(['DATABASE', 'SERVER']); + } else { + parser.suggestKeywords(['DATABASE', 'SERVER', 'TABLE', 'URI']); + } + +break; +case 2899: + + var keywords = []; + if ($$[$0-1].suggestKeywords) { + keywords = parser.createWeightedKeywords($$[$0-1].suggestKeywords, 2).concat([{ value: 'SELECT', weight: 1}]); + } else { + keywords = ['SELECT']; + } + if ($$[$0-1].addValues) { + keywords.push({ weight: 1.1, value: 'VALUES' }); + } + if (keywords.length > 0) { + parser.suggestKeywords(keywords); + } + +break; +case 2902: + + if (!$$[$0].keepTables) { + delete parser.yy.result.suggestTables; + delete parser.yy.result.suggestDatabases; + } + +break; +case 2906: + + parser.suggestKeywords(['INSERT INTO', 'INSERT OVERWRITE', 'SELECT']); + +break; +case 2907: + + if ($$[$0-1].cursorAtEnd) { + parser.checkForSelectListKeywords($$[$0-1]); + var keywords = parser.yy.result.suggestKeywords || []; + if ($$[$0].suggestKeywords) { + keywords = keywords.concat($$[$0].suggestKeywords); + } + if (keywords.length > 0) { + parser.suggestKeywords(keywords); + } + } + delete parser.yy.result.suggestTables; + delete parser.yy.result.suggestDatabases; + +break; +case 2908: + + if ($$[$0].cursorAtStart) { + parser.checkForSelectListKeywords($$[$0-1].tableExpression); + } + +break; +case 2909: + + $$[$0-2].owner = 'insert'; + parser.addTablePrimary($$[$0-2]); + if (!$$[$0-1] && !$$[$0]) { + this.$ = { suggestKeywords: ['PARTITION'] } + } else if (!$$[$0]) { + this.$ = { suggestKeywords: ['IF NOT EXISTS'] } + } + +break; +case 2910: + + if (!$$[$0-1] && !$$[$0]) { + this.$ = { suggestKeywords: [{ value: 'ROW FORMAT', weight: 2 }, { value: 'STORED AS', weight: 1}] }; + } else if (!$$[$0]) { + this.$ = { suggestKeywords: ['STORED AS'] }; + } + +break; +case 2911: + + if (!$$[$0-1] && !$$[$0]) { + this.$ = { suggestKeywords: [{ value: 'ROW FORMAT', weight: 2 }, { value: 'STORED AS', weight: 1}] }; + } else if (!$$[$0]) { + this.$ = { suggestKeywords: ['STORED AS'] }; + } + +break; +case 2912: + + $$[$0-2].owner = 'insert'; + parser.addTablePrimary($$[$0-2]); + if (!$$[$0-1] && !$$[$0]) { + this.$ = { suggestKeywords: ['PARTITION'], addValues: true }; + } else if (!$$[$0]) { + this.$ = { addValues: true }; + } + +break; +case 2913: + + parser.suggestKeywords(['OVERWRITE', 'INTO']); + +break; +case 2914: + + if (!$$[$0-1]) { + parser.suggestKeywords(['DIRECTORY', 'LOCAL DIRECTORY', 'TABLE']); + } + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + this.$ = { keepTables: true } + +break; +case 2915: case 2926: + + this.$ = { keepTables: true } + +break; +case 2916: case 2927: case 2928: case 2990: case 2991: + + $$[$0-2].owner = 'insert'; + parser.addTablePrimary($$[$0-2]); + if (parser.yy.result.suggestColumns) { + parser.yy.result.suggestColumns.owner = 'insert'; + } + +break; +case 2917: case 2942: + + $$[$0-2].owner = 'insert'; + parser.addTablePrimary($$[$0-2]); + +break; +case 2918: + + parser.suggestKeywords(['DIRECTORY']); + +break; +case 2925: + + if (!$$[$0-1]) { + parser.suggestKeywords(['TABLE']); + } + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + this.$ = { keepTables: true } + +break; +case 2938: + + if ($$[$0-1].suggestKeywords) { + parser.suggestKeywords(parser.createWeightedKeywords($$[$0-1].suggestKeywords, 2).concat([{ value: 'SELECT', weight: 1}])); + } else { + parser.suggestKeywords(['SELECT']); + } + +break; +case 2939: + + if ($$[$0-1].cursorAtEnd) { + parser.checkForSelectListKeywords($$[$0-1]); + var keywords = parser.yy.result.suggestKeywords || []; + if ($$[$0].suggestKeywords) { + keywords = keywords.concat($$[$0].suggestKeywords); + } + if (keywords.length > 0) { + parser.suggestKeywords(keywords); + } + } + +break; +case 2941: + + $$[$0-3].owner = 'insert'; + parser.addTablePrimary($$[$0-3]); + +break; +case 2943: case 2980: case 3016: + + parser.suggestKeywords(['INTO']); + +break; +case 2944: case 2981: case 2987: + + if (!$$[$0-1]) { + parser.suggestKeywords(['TABLE']); + } + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + +break; +case 2946: + + $$[$0-1].owner = 'insert'; + parser.addTablePrimary($$[$0-1]); + parser.suggestKeywords(['VALUES']); + +break; +case 2955: + + parser.suggestKeywords(['FORMAT DELIMITED']); + +break; +case 2958: +this.$ = { selectList: $$[$0] }; +break; +case 2959: + + this.$ = $$[$0-1]; + this.$.cursorAtEnd = true; + +break; +case 2960: + + parser.selectListNoTableSuggest($$[$0], $$[$0-2]); + +break; +case 2961: + + var keywords = parser.getSelectListKeywords(); + if (!$$[$0-2] || $$[$0-2] === 'ALL') { + parser.suggestAggregateFunctions(); + parser.suggestAnalyticFunctions(); + } + if (!$$[$0-1] && !$$[$0-2]) { + keywords.push({ value: 'ALL', weight: 2 }); + keywords.push({ value: 'DISTINCT', weight: 2 }); + } + if (parser.isImpala() && !$$[$0-1]) { + keywords.push({ value: 'STRAIGHT_JOIN', weight: 1 }); + } + parser.suggestKeywords(keywords); + parser.suggestFunctions(); + parser.suggestColumns(); + +break; +case 2969: + + var keywords = $$[$0-2].suggestKeywords && !$$[$0-1] ? parser.createWeightedKeywords($$[$0-2].suggestKeywords, 2) : []; + if (!$$[$0-1]) { + keywords = keywords.concat(['[NOSHUFFLE]', '[SHUFFLE]', 'SELECT', 'VALUES']) + } else { + keywords = keywords.concat(['SELECT']) + } + parser.suggestKeywords(keywords); + +break; +case 2979: + + $$[$0-1].owner = 'upsert'; + parser.addTablePrimary($$[$0-1]); + +break; +case 2982: + + if (!$$[$0-3]) { + parser.suggestKeywords(['TABLE']); + } + $$[$0-1].owner = 'upsert'; + parser.addTablePrimary($$[$0-1]); + +break; +case 2984: + + $$[$0-1].owner = 'upsert'; + parser.addTablePrimary($$[$0-1]); + if (parser.yy.result.suggestColumns) { + parser.yy.result.suggestColumns.owner = 'upsert'; + } + +break; +case 2985: + + $$[$0-2].owner = 'insert'; + parser.addTablePrimary($$[$0-2]); + if (!$$[$0]) { + this.$ = { suggestKeywords: ['PARTITION'] }; + } + +break; +case 2986: + + parser.suggestKeywords(['INTO', 'OVERWRITE']); + +break; +case 2988: + + if (!$$[$0-4]) { + parser.suggestKeywords(['TABLE']); + } + $$[$0-2].owner = 'insert'; + parser.addTablePrimary($$[$0-2]); + +break; +case 3013: + + parser.suggestValueExpressionKeywords($$[$0-1], [{ value: 'WHEN', weight: 2 }]); + +break; +case 3015: + + $$[$0-6].alias = $$[$0-4]; + parser.addTablePrimary($$[$0-6]); + if ($$[$0-2].subQuery) { + parser.addTablePrimary({ subQueryAlias: $$[$0] }); + } else { + $$[$0-2].alias = $$[$0]; + } + +break; +case 3017: + + parser.suggestDatabases({ appendDot: true }); + parser.suggestTables(); + +break; +case 3019: + + parser.addTablePrimary($$[$0-1]); + parser.suggestKeywords(['AS T USING']); + +break; +case 3020: + + parser.addTablePrimary($$[$0-2]); + parser.suggestKeywords(['T USING']); + +break; +case 3021: + + $$[$0-3].alias = $$[$0-1]; + parser.addTablePrimary($$[$0-3]); + parser.suggestKeywords(['USING']); + +break; +case 3022: + + $$[$0-4].alias = $$[$0-2]; + parser.addTablePrimary($$[$0-4]); + parser.suggestDatabases({ appendDot: true }); + parser.suggestTables(); + +break; +case 3023: + + $$[$0-4].alias = $$[$0-2]; + parser.addTablePrimary($$[$0-4]); + +break; +case 3024: + + $$[$0-5].alias = $$[$0-3]; + parser.addTablePrimary($$[$0-5]); + parser.suggestKeywords(['AS S ON']); + +break; +case 3025: + + $$[$0-6].alias = $$[$0-4]; + parser.addTablePrimary($$[$0-6]); + parser.suggestKeywords(['S ON']); + +break; +case 3034: + + if ($$[$0].suggestThenKeywords) { + parser.suggestKeywords(['DELETE', 'INSERT VALUES', 'UPDATE SET']); + } + +break; +case 3035: case 3037: + + if (!$$[$0-1].notPresent) { + parser.suggestKeywords(['WHEN']); + } + +break; +case 3036: + + if (!$$[$0-1].notPresent && $$[$0].suggestThenKeywords) { + var keywords = []; + if (!$$[$0-1].isDelete) { + keywords.push('DELETE'); + } + if (!$$[$0-1].isInsert) { + keywords.push('INSERT VALUES'); + } + if (!$$[$0-1].isUpdate) { + keywords.push('UPDATE SET'); + } + parser.suggestKeywords(keywords); + } + +break; +case 3038: + + if (!$$[$0-1].notPresent && $$[$0].suggestThenKeywords) { + var keywords = []; + if (!$$[$0-2].isDelete && !$$[$0-1].isDelete) { + keywords.push('DELETE'); + } + if (!$$[$0-2].isInsert && !$$[$0-1].isInsert) { + keywords.push('INSERT VALUES'); + } + if (!$$[$0-2].isUpdate && !$$[$0-1].isUpdate) { + keywords.push('UPDATE SET'); + } + parser.suggestKeywords(keywords); + } + +break; +case 3039: +this.$ = { notPresent: !!$$[$0-4], isDelete: $$[$0].isDelete, isInsert: $$[$0].isInsert, isUpdate: $$[$0].isUpdate }; +break; +case 3040: + + if (!$$[$0-1]) { + parser.suggestKeywords(['NOT MATCHED', 'MATCHED']); + } else { + parser.suggestKeywords(['MATCHED']); + } + +break; +case 3041: + + if (!$$[$0-1]) { + parser.suggestKeywords(['AND', 'THEN']); + } else { + parser.suggestValueExpressionKeywords($$[$0-1], [{ value: 'THEN', weight: 2 }]); + } + +break; +case 3043: +this.$ = { suggestThenKeywords: true }; +break; +case 3048: +this.$ = { isUpdate: true }; +break; +case 3049: +this.$ = { isDelete: true }; +break; +case 3050: +this.$ = { isInsert: true }; +break; +case 3051: + + parser.suggestKeywords(['SET']); + +break; +case 3055: + + if (parser.isHive()) { + parser.suggestKeywords(['DATA LOCAL INPATH', 'DATA INPATH']); + } else if (parser.isImpala()) { + parser.suggestKeywords(['DATA INPATH']); + } + +break; +case 3056: + + if (parser.isHive() && !$$[$0-1]) { + parser.suggestKeywords(['INPATH', 'LOCAL INPATH']); + } else { + parser.suggestKeywords(['INPATH']); + } + +break; +case 3058: + + if (!$$[$0-1]) { + parser.suggestKeywords(['OVERWRITE INTO TABLE', 'INTO TABLE']); + } else { + parser.suggestKeywords(['INTO TABLE']); + } + +break; +case 3059: + + parser.suggestKeywords([ 'TABLE' ]); + +break; +case 3077: + + if (!$$[$0]) { + parser.suggestKeywords(['EXTERNAL TABLE', 'FROM', 'TABLE']); + } else if (!$$[$0].hasExternal) { + parser.suggestKeywords(['EXTERNAL']); + } + +break; +case 3078: + + if ($$[$0-1].suggestKeywords) { + parser.suggestKeywords(parser.createWeightedKeywords($$[$0-1].suggestKeywords, 2).concat(['FROM'])); + } else { + parser.suggestKeywords(['FROM']); + } + +break; +case 3082: + + if (!$$[$0-1]) { + parser.suggestKeywords(['LOCATION']); + } + +break; +case 3083: + + if (!$$[$0-4]) { + parser.suggestKeywords(['EXTERNAL TABLE', 'TABLE']); + } else if (!$$[$0-4].hasExternal) { + parser.suggestKeywords(['EXTERNAL']); + } + +break; +case 3085: + + if ($$[$0-5].suggestKeywords) { + parser.suggestKeywords(parser.createWeightedKeywords($$[$0-5].suggestKeywords, 2).concat(['FROM'])); + } + +break; +case 3088: + + parser.addTablePrimary($$[$0-1]); + if (!$$[$0]) { + this.$ = { hasExternal: true, suggestKeywords: ['PARTITION'] }; + } else { + this.$ = { hasExternal: true } + } + +break; +case 3089: + + parser.addTablePrimary($$[$0-1]); + if (!$$[$0]) { + this.$ = { suggestKeywords: ['PARTITION'] }; + } + +break; +case 3098: case 3112: case 3113: + + parser.addTablePrimary($$[$0-9]); + +break; +case 3102: + + parser.addTablePrimary($$[$0-2]); + if (!$$[$0-1]) { + parser.suggestKeywords([{ weight: 2, value: 'PARTITION' }, { weight: 1, value: 'TO' }]); + } else { + parser.suggestKeywords([ 'TO' ]); + } + +break; +case 3105: + + parser.addTablePrimary($$[$0-5]); + parser.suggestKeywords(['FOR replication()']); + +break; +case 3106: + + parser.addTablePrimary($$[$0-6]); + parser.suggestKeywords(['replication()']); + +break; +case 3109: + + parser.addTablePrimary($$[$0-5]); + if (!$$[$0-4]) { + parser.suggestKeywords(['PARTITION']); + } + +break; +case 3110: + + parser.addTablePrimary($$[$0-10]); + if (!$$[$0-9]) { + parser.suggestKeywords(['PARTITION']); + } + +break; +case 3128: + + parser.suggestKeywords(['ALL', 'NONE']); + +break; +case 3151: + + if (parser.isHive()) { + parser.suggestKeywords(['COLUMNS', 'COMPACTIONS', 'CONF', 'CREATE TABLE', 'CURRENT ROLES', 'DATABASES', 'FORMATTED', 'FUNCTIONS', 'GRANT', 'INDEX', 'INDEXES', 'LOCKS', 'PARTITIONS', 'PRINCIPALS', 'ROLE GRANT', 'ROLES', 'SCHEMAS', 'TABLE EXTENDED', 'TABLES', 'TBLPROPERTIES', 'TRANSACTIONS', 'VIEWS']); + } else if (parser.isImpala()) { + parser.suggestKeywords(['AGGREGATE FUNCTIONS', 'ANALYTIC FUNCTIONS', 'COLUMN STATS', 'CREATE TABLE', 'CURRENT ROLES', 'DATABASES', 'FILES IN', 'FUNCTIONS', 'GRANT ROLE', 'PARTITIONS', 'RANGE PARTITIONS', 'ROLE GRANT GROUP', 'ROLES', 'SCHEMAS', 'TABLE STATS', 'TABLES']); + } else { + parser.suggestKeywords(['COLUMNS', 'DATABASES', 'TABLES']); + } + +break; +case 3152: + + // ROLES is considered a non-reserved keywords so we can't match it in ShowCurrentRolesStatement_EDIT + if ($$[$0].identifierChain && $$[$0].identifierChain.length === 1 && $$[$0].identifierChain[0].name.toLowerCase() === 'roles') { + parser.suggestKeywords(['CURRENT']); + parser.yy.locations.pop(); + } else { + parser.addTablePrimary($$[$0]); + if (parser.isImpala()) { + parser.suggestKeywords(['COLUMN STATS', 'CREATE TABLE', 'FILES IN', 'PARTITIONS', 'RANGE PARTITIONS', 'TABLE STATS']); + } + } + +break; +case 3153: + + if (parser.isImpala()) { + parser.suggestKeywords(['AGGREGATE FUNCTIONS', 'ANALYTIC FUNCTIONS', 'DATABASES', 'FUNCTIONS', 'SCHEMAS', 'TABLES']); + } else if (parser.isHive()) { + parser.suggestKeywords(['DATABASES', 'SCHEMAS', 'TABLE EXTENDED']); + } + +break; +case 3172: case 3202: case 3262: case 3266: case 3268: case 3296: + + parser.suggestTables(); + parser.suggestDatabases({ + appendDot: true + }); + +break; +case 3176: case 3177: case 3181: case 3182: case 3241: case 3242: + + parser.suggestKeywords(['FROM', 'IN']); + +break; +case 3178: case 3179: case 3180: case 3225: case 3239: + + parser.suggestTables(); + +break; +case 3187: + + if (parser.isImpala()) { + parser.suggestKeywords(['TABLE', 'VIEW']); + } else { + parser.suggestKeywords(['TABLE']); + } + +break; +case 3188: + + if ($$[$0-1].isView && parser.isImpala()) { + parser.suggestTables({ onlyViews: true }); + } else { + parser.suggestTables(); + } + parser.suggestDatabases({ + appendDot: true + }); + +break; +case 3189: + + if (parser.yy.result.suggestTables && $$[$0-1].isView) { + parser.yy.result.suggestTables.onlyViews = true; + } + +break; +case 3190: + + parser.addTablePrimary($$[$0]); + if (parser.isImpala()) { + parser.suggestKeywords(['TABLE', 'VIEW']); + } else { + parser.suggestKeywords(['TABLE']); + } + +break; +case 3192: +this.$ = { isView: true }; +break; +case 3195: case 3196: + + parser.suggestKeywords([ 'ROLES' ]); + +break; +case 3199: case 3293: + + parser.suggestKeywords(['LIKE']); + +break; +case 3206: + + parser.addTablePrimary($$[$0-1]); + parser.suggestKeywords(['IN']); + +break; +case 3211: case 3214: + + parser.suggestKeywords(['FUNCTIONS']); + +break; +case 3212: case 3215: + + parser.suggestKeywords(['AGGREGATE', 'ANALYTICAL']); + +break; +case 3213: case 3302: + + if (!$$[$0-1]) { + parser.suggestKeywords(['IN', 'LIKE']); + } else { + parser.suggestKeywords(['LIKE']); + } + +break; +case 3216: + + if (!$$[$0-2]) { + parser.suggestKeywords([{ value: 'IN', weight: 2 }, { value: 'LIKE', weight: 1 }]); + } else { + parser.suggestKeywords(['LIKE']); + } + +break; +case 3224: + + parser.suggestKeywords(['ALL', 'TABLE']); + parser.suggestTables(); + +break; +case 3244: + + parser.suggestTables({identifierChain: [{name: $$[$0]}]}); + +break; +case 3250: + + parser.suggestTables(); + parser.suggestDatabases({ + appendDot: true + }); + parser.suggestKeywords(['DATABASE', 'SCHEMA']); + +break; +case 3252: + + parser.addTablePrimary($$[$0-1]); + parser.suggestKeywords(['EXTENDED', 'PARTITION']); + +break; +case 3255: + + parser.addTablePrimary($$[$0-2]); + parser.suggestKeywords(['EXTENDED']); + +break; +case 3272: case 3273: case 3274: + + parser.suggestKeywords(['GRANT']); + +break; +case 3275: case 3276: + + parser.suggestKeywords(['ROLE', 'USER']); + +break; +case 3283: case 3292: + + parser.suggestKeywords(['EXTENDED']); + +break; +case 3286: + + if ($$[$0-1]) { + parser.suggestKeywords(['LIKE']); + } else { + parser.suggestKeywords(['FROM', 'IN', 'LIKE']); + } + +break; +case 3288: + + if (parser.isHive()) { + parser.suggestKeywords(['EXTENDED']); + } + +break; +case 3289: + + parser.suggestKeywords(['LIKE']); + +break; +case 3290: + + parser.suggestKeywords(['PARTITION']); + +break; +case 3297: + + parser.addTablePrimary($$[$0]); + +break; +case 3304: + + parser.addTablePrimary($$[$0-3]); + +break; +case 3309: + + if (!$$[$0-1] && !$$[$0-2]) { + parser.suggestKeywords([{ value: 'IN', weight: 2 }, { value: 'FROM', weight: 2 }, { value: 'LIKE', weight: 1 }]); + } else if (!$$[$0-1]) { + parser.suggestKeywords(['LIKE']); + } + +break; +case 3313: case 3314: + + parser.addDatabaseLocation(_$[$0], [ { name: $$[$0] } ]); + +break; +case 3325: + + if (parser.isImpala() && !$$[$0-1] && !$$[$0-2]) { + parser.suggestKeywords([{ value: 'FROM', weight: 2 }, { value: 'WHERE', weight: 1 }]); + } else if (parser.isImpala() && !$$[$0-1] && $$[$0-2]) { + var keywords = [{ value: 'FULL JOIN', weight: 2 }, { value: 'FULL OUTER JOIN', weight: 2 }, { value: 'JOIN', weight: 2 }, { value: 'LEFT JOIN', weight: 2 }, { value: 'LEFT OUTER JOIN', weight: 2 }, { value: 'RIGHT JOIN', weight: 2 }, { value: 'RIGHT OUTER JOIN', weight: 2 }, { value: 'INNER JOIN', weight: 2 }, { value: 'LEFT ANTI JOIN', weight: 2 }, { value: 'LEFT SEMI JOIN', weight: 2 }, { value: 'RIGHT ANTI JOIN', weight: 2 }, { value: 'RIGHT SEMI JOIN', weight: 2 }, { value: 'WHERE', weight: 1 }]; + if ($$[$0-2].suggestJoinConditions) { + parser.suggestJoinConditions($$[$0-2].suggestJoinConditions); + } + if ($$[$0-2].suggestJoins) { + parser.suggestJoins($$[$0-2].suggestJoins); + } + if ($$[$0-2].suggestKeywords) { + keywords = keywords.concat(parser.createWeightedKeywords($$[$0-2].suggestKeywords, 3)); + } + parser.suggestKeywords(keywords); + } else if (!$$[$0-1]) { + parser.suggestKeywords([ 'WHERE' ]); + } + +break; +case 3326: + + parser.suggestKeywords([ 'SET' ]); + +break; +case 3342: + + parser.suggestKeywords([ '=' ]); + +break; +case 3353: + + if (! parser.yy.cursorFound) { + parser.yy.result.useDatabase = $$[$0]; + } + +break; +} +}, +table: [o($V0,$V1,{3:1,4:2}),{1:[3]},o($V2,$V3,{5:3,9:4,12:5,13:6,14:7,15:8,406:9,407:10,408:11,409:12,410:13,411:14,412:15,413:16,414:17,415:18,416:19,417:20,418:21,419:22,420:23,1117:24,1118:25,1119:26,1120:27,1121:28,1122:29,1123:30,571:31,17:32,565:35,566:36,800:37,801:38,802:39,803:40,804:41,805:42,806:43,923:48,924:49,925:50,926:51,927:52,928:53,929:54,1136:55,1137:56,1138:57,1139:58,1140:59,1141:60,1142:61,1143:62,1144:63,1251:70,1252:71,1253:72,1254:73,1255:74,1256:75,1257:76,1258:77,1259:78,1260:79,1261:80,1262:81,1263:82,1264:83,1265:84,1266:85,1267:86,1268:87,1269:88,1270:89,1307:90,1129:93,1189:94,1130:95,1190:96,1240:97,818:106,908:107,438:111,1054:112,1055:113,1056:114,1057:115,1153:117,1154:118,1271:120,1191:123,593:124,1209:127,1226:128,1211:137,1216:139,1217:140,25:$V4,29:$V5,57:$V6,58:$V7,73:$V8,78:$V9,79:$Va,96:$Vb,112:$Vc,130:$Vd,144:$Ve,162:$Vf,182:$Vg,219:$Vh,308:$Vi,340:$Vj,353:$Vk,439:$Vl,440:$Vm,441:$Vn,453:$Vo,569:$Vp,570:$Vq,576:$Vr,759:$Vs,814:$Vt,857:$Vu,919:$Vv,920:$Vw,922:$Vx,1158:$Vy,1182:$Vz,1183:$VA,1184:$VB,1185:$VC,1187:$VD,1205:$VE,1220:$VF,1245:$VG,1246:$VH,1272:$VI,1308:$VJ}),{6:[1,143],10:[1,144]},o($V2,[2,6]),o($V2,[2,12]),o($V2,[2,13]),o($V2,[2,14]),{12:145,13:146,14:147,17:32,25:$V4,29:$V5,58:$V7,73:$V8,78:$V9,79:$Va,96:$Vb,112:$Vc,130:$Vd,144:$Ve,182:$Vg,219:$Vh,308:$Vi,340:$Vj,353:$Vk,406:9,407:10,408:11,409:12,410:13,411:14,412:15,413:16,414:17,415:18,416:19,417:20,418:21,419:22,420:23,438:111,439:$Vl,440:$Vm,441:$Vn,453:$Vo,565:35,566:36,569:$Vp,570:$Vq,571:31,576:$Vr,593:124,759:$Vs,800:37,801:38,802:39,803:40,804:41,805:42,806:43,814:$Vt,818:106,857:$Vu,908:107,919:$Vv,920:$Vw,922:$Vx,923:48,924:49,925:50,926:51,927:52,928:53,929:54,1054:112,1055:113,1056:114,1057:115,1117:24,1118:25,1119:26,1120:27,1121:28,1122:29,1123:30,1129:93,1130:95,1136:55,1137:56,1138:57,1139:58,1140:59,1141:60,1142:61,1143:62,1144:63,1153:117,1154:118,1158:$Vy,1182:$Vz,1183:$VA,1184:$VB,1185:$VC,1187:$VD,1189:94,1190:96,1191:123,1205:$VE,1209:127,1211:137,1216:139,1217:140,1220:$VF,1226:128,1240:97,1245:$VG,1246:$VH,1251:70,1252:71,1253:72,1254:73,1255:74,1256:75,1257:76,1258:77,1259:78,1260:79,1261:80,1262:81,1263:82,1264:83,1265:84,1266:85,1267:86,1268:87,1269:88,1270:89,1271:120,1272:$VI,1307:90,1308:$VJ},o($V2,[2,516]),o($V2,[2,517]),o($V2,[2,518]),o($V2,[2,519]),o($V2,[2,520]),o($V2,[2,521]),o($V2,[2,522]),o($V2,[2,523]),o($V2,[2,524]),o($V2,[2,525]),o($V2,[2,526]),o($V2,[2,527]),o($V2,[2,528]),o($V2,[2,529]),o($V2,[2,530]),o($V2,[2,2588]),o($V2,[2,2589]),o($V2,[2,2590]),o($V2,[2,2591]),o($V2,[2,2592]),o($V2,[2,2593]),o($V2,[2,2594]),o($VK,$VL,{572:148,581:149,583:150,348:$VM}),{308:$Vi,399:$VN,571:152,576:$Vr,593:124,1129:154,1130:155,1182:$VO,1184:$VB,1191:123,1209:127,1211:137,1216:139,1217:140,1220:$VF},o($VP,[2,171],{161:157,50:[1,159],163:[1,158],164:[1,160]}),o($VP,[2,168]),o($V2,[2,824]),o($V2,[2,825]),o($V2,[2,1650]),o($V2,[2,1651]),o($V2,[2,1652]),o($V2,[2,1653]),o($V2,[2,1654]),o($V2,[2,1655]),o($V2,[2,1656]),{193:[1,161]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,231:[1,163],403:$VX2,523:162,524:164},{921:[1,303]},{235:[1,305],260:[1,304]},o($V2,[2,2028]),o($V2,[2,2029]),o($V2,[2,2030]),o($V2,[2,2031]),o($V2,[2,2032]),o($V2,[2,2033]),o($V2,[2,2034]),o($V2,[2,2609]),o($V2,[2,2610]),o($V2,[2,2611]),o($V2,[2,2612]),o($V2,[2,2613]),o($V2,[2,2614]),o($V2,[2,2615]),o($V2,[2,2616]),o($V2,[2,2617]),{127:[1,306]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:[1,309],106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,166:$VY2,186:$VZ2,192:$V_2,197:$V$2,403:$VX2,440:$V03,524:311,576:$V13,814:$V23,857:$V33,1158:$V43,1162:307,1166:308,1179:310,1181:312,1182:$V53,1183:$V63},{146:[1,324],285:$V73,441:$V83,576:$V93,814:$Va3,857:$Vb3,919:$Vc3,1168:325,1184:$Vd3},{24:169,25:$VQ,26:$VR,27:[1,337],28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:[1,336],106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,166:[1,338],182:[1,334],186:$VZ2,192:$V_2,197:$V$2,403:$VX2,440:$V03,524:311,576:$V13,814:$V23,857:$V33,1158:$V43,1162:333,1166:335,1179:310,1181:312,1182:$V53,1183:$V63},{146:[1,339],285:$V73,441:$V83,576:$V93,814:$Va3,857:$Vb3,919:$Vc3,1168:340,1184:$Vd3},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:[1,341],106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:344,159:$VV2,160:$VW2,285:[1,343],1250:342},o($V2,[2,3129]),o($V2,[2,3130]),o($V2,[2,3131]),o($V2,[2,3132]),o($V2,[2,3133]),o($V2,[2,3134]),o($V2,[2,3135]),o($V2,[2,3136]),o($V2,[2,3137]),o($V2,[2,3138]),o($V2,[2,3139]),o($V2,[2,3140]),o($V2,[2,3141]),o($V2,[2,3142]),o($V2,[2,3143]),o($V2,[2,3144]),o($V2,[2,3145]),o($V2,[2,3146]),o($V2,[2,3147]),o($V2,[2,3148]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:345,159:$VV2,160:$VW2},{308:[1,346]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,308:[2,2723],399:$Ve3,403:$VX2,523:354,524:164,662:355,697:348,699:349,701:350,702:351,713:352,716:353,1159:347},o($V2,[2,2889]),o($V2,[2,2890]),o($V2,[2,2891]),o($V2,[2,2894]),{44:[1,358],217:[1,359],1241:357},{178:[1,362],193:[1,363],308:[2,3086],1247:360,1248:361},{193:[1,364]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:369,550:368,552:367,1296:365,1300:366},o($Vf3,$Vg3,{577:370,166:$Vh3,285:$Vi3,299:$Vj3}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:376,587:374,589:375},o($Vk3,[2,625],{479:377,449:378,164:[1,380],181:[1,379],196:[1,381],202:$Vl3,297:$Vm3,338:$Vn3}),o($Vk3,$Vo3,{481:385,222:$Vp3,229:$Vq3,297:[1,386]}),{132:$Vr3,193:$Vs3,197:[1,390],202:$Vl3,263:$Vt3,297:$Vm3,338:$Vn3,343:$Vu3,448:391,449:389,910:392,1093:$Vv3},{26:$Vw3,30:[1,428],35:$Vx3,36:$Vy3,40:$Vz3,43:$VA3,52:$VB3,54:$VC3,56:[1,427],101:[1,413],102:[1,409],103:$VD3,113:[1,411],126:[1,414],128:[1,429],145:[1,405],188:$VE3,323:[1,416],329:$VF3,340:[1,417],447:425,498:404,758:$VG3,814:[1,418],819:398,824:399,826:400,827:401,828:402,829:403,831:437,839:430,840:410,843:412,844:415,847:424,857:[1,419],869:420,872:423,895:$VH3,897:$VI3,899:[1,408]},{167:$VJ3,287:$VK3,340:[1,440],437:441,899:[1,442]},{99:[1,445]},{181:[1,446]},{325:[1,447]},o($VL3,[2,651],{449:448,491:449,910:450,1097:451,105:$VM3,121:[1,453],132:$Vr3,146:$VN3,156:$VO3,181:[1,456],197:[1,452],202:$Vl3,211:[1,455],230:[1,454],297:$Vm3,338:$Vn3,1093:$Vv3}),o($V2,[2,2412]),o($V2,[2,2413]),o($V2,[2,2414]),o($V2,[2,2415]),{105:$VM3,121:[1,466],132:$Vr3,146:$VN3,156:$VO3,181:[1,470],193:$Vs3,197:[1,465],202:$Vl3,211:[1,469],230:[1,468],235:[1,463],260:[1,462],263:$Vt3,297:$Vm3,338:$Vn3,343:$Vu3,448:464,449:460,910:467,1093:$Vv3,1097:461},o($V2,[2,2634]),o($V2,[2,2635]),{193:$Vs3,263:$Vt3,343:$Vu3,448:471},{38:[1,473],41:[1,474],45:[1,502],64:[1,482],75:[1,487],90:[1,488],105:[1,491],106:[1,494],107:[1,503],119:[1,508],120:[1,497],127:[1,498],142:[1,511],143:[1,478],144:[1,485],146:[1,492],147:[1,493],171:[1,475],174:[1,477],182:[1,484],193:[1,495],196:[1,506],197:$VP3,198:$VQ3,206:[1,499],211:[1,510],216:[1,472],218:[1,480],225:[1,481],231:[2,621],248:[1,489],251:[1,490],257:[1,504],264:[1,509],435:505,440:[1,500],441:[1,501],451:507,454:476,455:479,465:496,477:483,482:486},o($VR3,[2,3351]),o($VR3,[2,3352]),{14:514,17:515,353:$Vk,571:31,576:$Vr},{576:$VS3,1182:$VO,1191:520,1192:516,1193:517,1202:518},{86:$VT3,316:[1,521],1199:$VU3},{316:[1,524]},o($V2,[2,2964]),{325:[1,525]},o($VV3,[2,3070]),o($VV3,[2,3071]),o($VW3,[2,552]),o($VW3,[2,553]),o($VW3,[2,554]),o($VX3,[2,3149]),o($VX3,[2,3150]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,399:$Ve3,403:$VX2,523:354,524:164,600:526,662:355,697:527,699:349,701:350,702:351,713:352,716:353},{268:[1,531],274:[1,530],349:[1,529],576:[2,2996],1212:528},{316:[1,532]},o($VY3,[2,2975]),o($VY3,[2,2976]),{316:[1,533]},{316:[1,535],1222:534,1223:[1,536]},{1:[2,1]},o($V0,$V1,{4:537}),o($V2,[2,15]),o($V2,[2,16]),o($V2,[2,17]),o($VK,[2,852]),o($VK,[2,866],{583:538,348:$VM}),o($VZ3,[2,868]),o([166,285,299,576],$V1,{4:539}),o($VK,$VL,{581:149,583:150,572:540,348:$VM}),{14:541,17:515,353:$Vk,571:31,576:$Vr},o($V2,[2,2892]),o($V2,[2,2893]),{86:$VT3,316:[1,542],1199:$VU3},o($VP,[2,167]),o($VP,[2,172]),o($VP,[2,173]),o($VP,[2,174]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:543,524:164},o($V2,$V_3,{447:425,497:544,498:545,188:$VE3,329:$VF3}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,485:546,524:547},o($V$3,[2,709],{443:548,208:$V04,282:$V14,396:$V24}),o($V34,[2,759]),{403:$V44,470:$V54},o($V64,[2,164]),o($V64,[2,165]),o($V64,[2,166]),o($V64,[2,31]),o($V64,[2,32]),o($V64,$V74),o($V64,[2,34]),o($V64,[2,35]),o($V64,[2,36]),o($V64,[2,37]),o($V64,[2,38]),o($V64,[2,39]),o($V64,[2,40]),o($V64,[2,41]),o($V64,[2,42]),o($V64,[2,43]),o($V64,[2,44]),o($V64,[2,45]),o($V64,[2,46]),o($V64,[2,47]),o($V64,[2,48]),o($V64,[2,49]),o($V64,[2,50]),o($V64,[2,51]),o($V64,[2,52]),o($V64,[2,53]),o($V64,[2,54]),o($V64,[2,55]),o($V64,[2,56]),o($V64,[2,57]),o($V64,[2,58]),o($V64,[2,59]),o($V64,[2,60]),o($V64,[2,61]),o($V64,[2,62]),o($V64,[2,63]),o($V64,[2,64]),o($V64,[2,65]),o($V64,[2,66]),o($V64,[2,67]),o($V64,[2,68]),o($V64,[2,69]),o($V64,[2,70]),o($V64,[2,71]),o($V64,[2,72]),o($V64,[2,73]),o($V64,[2,74]),o($V64,[2,75]),o($V64,[2,76]),o($V64,[2,77]),o($V64,[2,78]),o($V64,[2,79]),o($V64,[2,80]),o($V64,[2,81]),o($V64,[2,82]),o($V64,[2,83]),o($V64,[2,84]),o($V64,[2,85]),o($V64,[2,86]),o($V64,[2,87]),o($V64,[2,88]),o($V64,[2,89]),o($V64,[2,90]),o($V64,[2,91]),o($V64,[2,92]),o($V64,[2,93]),o($V64,[2,94]),o($V64,[2,95]),o($V64,[2,96]),o($V64,[2,97]),o($V64,[2,98]),o($V64,[2,99]),o($V64,[2,100]),o($V64,[2,101]),o($V64,[2,102]),o($V64,[2,103]),o($V64,[2,104]),o($V64,[2,105]),o($V64,[2,106]),o($V64,[2,107]),o($V64,[2,108]),o($V64,[2,109]),o($V64,[2,110]),o($V64,$V84),o($V64,[2,112]),o($V64,[2,113]),o($V64,[2,114]),o($V64,[2,115]),o($V64,[2,116]),o($V64,[2,117]),o($V64,[2,118]),o($V64,[2,119]),o($V64,[2,120]),o($V64,[2,121]),o($V64,[2,122]),o($V64,[2,123]),o($V64,[2,124]),o($V64,[2,125]),o($V64,[2,126]),o($V64,[2,127]),o($V64,[2,128]),o($V64,[2,129]),o($V64,[2,130]),o($V64,[2,131]),o($V64,[2,132]),o($V64,[2,133]),o($V64,[2,134]),o($V64,[2,135]),o($V64,[2,136]),o($V64,[2,137]),o($V64,[2,138]),o($V64,[2,139]),o($V64,[2,140]),o($V64,[2,141]),o($V64,[2,142]),o($V64,[2,143]),o($V64,[2,144]),o($V64,[2,145]),o($V64,[2,146]),o($V64,[2,147]),o($V64,[2,148]),o($V64,[2,149]),o($V64,[2,150]),o($V64,[2,151]),o($V64,$V94),o($V64,[2,153]),o($V64,[2,154]),o($V64,[2,155]),o($V64,[2,156]),o($V64,[2,157]),o($V64,[2,158]),o($V64,[2,159]),o($V64,[2,160]),o($V64,[2,161]),o($V64,[2,162]),o($V64,[2,163]),o($V2,[2,2006],{524:164,158:165,24:169,523:554,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,159:$VV2,160:$VW2,403:$VX2}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:555,524:164},{260:[1,556]},{208:$V04,282:$V14,383:$Va4,384:$Vb4,396:$V24,443:562,657:558,690:559,691:560,1161:557},{325:$Vc4,395:$Vd4,825:$Ve4,1163:564},{395:$Vf4,825:[1,567]},o([395,825],$V84,{158:165,24:169,524:311,1166:569,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,159:$VV2,160:$VW2,403:$VX2}),o($Vg4,[2,2784]),o($Vh4,[2,2825]),o($Vg4,$Vi4,{513:570,514:571,399:$Vj4}),o($Vk4,[2,2795]),o($Vk4,[2,2796]),o($Vk4,[2,2797]),o($Vk4,[2,2798]),o($Vk4,[2,2799]),o($Vk4,[2,2800]),o($Vk4,[2,2801]),o($Vk4,[2,2802]),o($Vk4,[2,2803]),o($Vk4,[2,2804]),o($Vk4,$Vl4),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:573},{325:[1,574]},{325:[2,2806]},{325:[2,2807]},{325:[2,2808]},{325:[2,2809]},{325:[2,2810]},{325:[2,2811]},{325:$Vi4,399:$Vj4,513:575,514:571},{308:$Ve4,325:$Vc4,395:$Vd4,1163:576},{157:[1,577]},{308:[1,578],395:$Vf4},o($Vm4,$V84,{158:165,24:169,524:311,1166:579,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,159:$VV2,160:$VW2,403:$VX2}),o($Vm4,$V74,{157:[1,580]}),o([308,325,395,399],$Vl4,{1186:581,92:[1,582],182:[1,583]}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:584},{325:[1,585]},o($Vn4,$V84,{24:169,158:586,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,159:$VV2,160:$VW2,166:[1,587],199:[1,588]}),{208:$V04,282:$V14,388:[1,589],396:$V24,443:590},o($V2,[2,3115]),o($Vn4,[2,3116]),o($V2,[2,3353]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:591,524:164},{308:[1,592]},{308:[2,2724]},o($Vo4,[2,1252]),o($Vo4,[2,1254],{598:593,706:594,267:$Vp4,295:$Vq4,309:$Vr4,314:$Vs4,318:$Vt4,319:$Vu4,327:$Vv4,334:$Vw4,339:$Vx4}),o($Vo4,[2,1255]),o($Vy4,[2,1330],{714:604,204:[1,605]}),o($Vz4,$VA4,{158:165,24:169,694:606,524:607,437:608,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,159:$VV2,160:$VW2,167:$VJ3,287:$VK3,403:$VX2}),o([6,10,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,167,170,176,184,204,207,232,243,265,266,267,287,295,308,309,310,311,314,318,319,321,325,326,327,334,339,348,352,395,400,403,446,576,652,659,949,1182],[2,1326]),o($Vy4,[2,1328]),o($VB4,$VC4,{662:355,591:609,716:610,724:611,399:$Ve3}),o($VD4,[2,3068],{1242:612,185:[1,613]}),o($VE4,[2,3072]),o($VE4,[2,3073]),{308:$VF4,783:614},{308:[2,3087]},{193:[1,615]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:616,524:164},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:617,524:164},{340:[1,618]},{340:[2,3330]},{340:[2,3332]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,340:[2,766],403:$VX2,524:619},o($VG4,[2,762],{443:620,208:$V04,282:$V14,396:$V24}),o($VH4,$VI4,{578:621,261:$VJ4}),o($VK4,[2,901]),o($VK4,[2,902]),o($VK4,[2,903]),o([308,399,576,1182,1184,1220],[2,888],{395:[1,623]}),o($VL4,[2,890]),{167:$VJ3,287:$VK3,437:624},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:625,524:164},o($Vk3,$VM4,{478:626,164:$VN4}),o($VR3,$VM4,{478:628,164:$VN4}),o($Vk3,[2,626]),o($Vk3,[2,627]),o($VO4,[2,570]),o($VO4,[2,571]),o($VO4,[2,572]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:629,524:164},o($Vk3,$Vo3,{481:630,222:$Vp3,229:$Vq3}),o($Vk3,[2,632]),o($Vk3,[2,633]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:631},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:632},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:633,524:164},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:634,524:164},o($VP4,[2,567]),o($VP4,[2,568]),o($VP4,[2,569]),o($VP4,[2,2516]),o($VP4,[2,2517]),o($VQ4,$VR4,{494:635,38:$VS4,887:$VS4,172:[1,636],312:$VT4}),{825:[1,638]},o($V2,[2,1686]),o($V2,[2,1687]),o($V2,[2,1688]),o($V2,[2,1689]),{26:$Vw3,35:$Vx3,40:$Vz3,43:$VA3,52:$VB3,54:$VC3,102:[1,640],103:$VD3,340:[1,642],758:$VG3,819:643,829:639,831:437,839:430,847:641,869:420,872:423,895:$VH3,897:$VI3},{248:[1,644]},o($VU4,[2,1879]),o($VU4,[2,1880]),{825:[2,1893]},{825:[2,1894]},o($V2,[2,1729]),{292:[1,645]},o($V2,[2,1731]),{90:[1,646]},o($V2,$V_3,{447:425,498:545,497:647,188:$VE3,329:$VF3}),{188:$VE3,329:$VF3,447:425,498:648},{113:[1,649],203:[1,650]},{61:$VV4,74:$VW4,87:[1,652],109:$VX4,110:$VY4,120:$VZ4,213:$V_4,216:[1,653],245:$V$4,273:$V05,276:$V15,336:$V25,461:664,466:656,537:655,542:659,544:$V35,845:[1,651],864:654,867:658,896:$V45},o($Vk3,[2,1780],{854:672,216:[1,673]}),o($VQ4,$V55,{492:674,172:[1,675],216:[1,676],312:$V65}),o($V2,[2,1800]),o($V2,[2,1801]),{404:$V75,405:$V85,469:679,473:680,475:678},{82:[1,684],83:[1,685],873:683},o($Vk3,$V95,{874:686,848:[1,687]}),{399:[1,688]},{292:[1,689]},{329:[1,691],888:690},o($Va5,[2,1902]),o($Va5,[2,1903]),{38:[1,693],885:692,887:[1,694]},o($Vb5,[2,1895]),o($Vb5,[2,1896]),o($Vc5,[2,1875]),o($Vc5,[2,1876]),o($Vd5,[2,565]),o($Vd5,[2,566]),o($Ve5,[2,1884]),o($Ve5,[2,1881]),o($Ve5,[2,1882]),{120:[1,695]},{14:696,17:515,353:$Vk,571:31,576:$Vr},{825:[1,697]},o($Vf5,[2,550]),o($Vf5,[2,551]),{193:[1,698]},o($V2,[2,1963]),{297:[1,699]},o([6,10,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160],$VR4,{494:700,312:$VT4}),o($Vg5,[2,628],{480:701,178:[1,702],223:[1,703]}),o($Vk3,$VR4,{494:704,312:$VT4}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:705,159:$VV2,160:$VW2},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:706},o($VL3,[2,652],{181:[1,708],187:[1,707]}),o($Vk3,$VR4,{494:709,312:$VT4}),{230:[1,710]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:712,530:711},o($VR3,[2,2529]),o($VR3,[2,2530]),o($VR3,[2,2531]),o($Vk3,$V55,{492:713,312:$V65}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:714,159:$VV2,160:$VW2},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:715,524:164},{260:[1,716]},o($Vk3,$V55,{492:717,312:$V65}),o($Vk3,$V55,{492:718,312:$V65}),{181:[1,720],187:[1,719]},o($Vk3,$V55,{492:721,312:$V65}),o($Vk3,$V55,{492:722,312:$V65}),{230:[1,723]},o($Vk3,$V55,{492:724,312:$V65}),o($Vk3,$V55,{492:725,312:$V65}),{260:[1,726]},{308:$Vh5,313:$Vi5,444:727},o($V2,[2,3184]),{18:[1,732],24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:731,159:$VV2,160:$VW2,508:730},{193:$Vs3,263:$Vt3,343:$Vu3,448:734,1093:[1,735],1289:733},{106:[1,736]},{147:[1,737]},{320:[1,738]},{320:[2,583],404:$V75,469:739},{313:[1,740]},o($V2,[2,3207],{473:741,405:$V85}),{231:[1,742]},o($Vj5,[2,3228],{24:169,1290:743,158:744,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,159:$VV2,160:$VW2}),{146:[1,745]},{325:[1,746]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,202:$Vl3,297:$Vm3,338:$Vn3,403:$VX2,449:748,524:369,550:747},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:369,550:749},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:369,550:750},{248:[1,751]},{182:[1,752]},{144:[1,753]},o($V2,[2,3279]),o($V2,[2,3280]),{164:[1,754]},o($Vk5,$Vl5,{496:755,313:$Vm5}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:369,550:757},o($V2,[2,3307]),o($Vn5,[2,3312],{1292:758,308:[1,760],313:[1,759]}),o($Vo5,[2,579]),o($Vo5,[2,580]),{320:[2,581]},{320:[2,582]},{320:[2,584]},{231:[2,622]},{197:$VP3,198:$VQ3,451:761},{325:[2,635]},o($Vp5,[2,603]),o($Vp5,[2,604]),{231:[2,546]},{231:[2,547]},{325:[2,575]},{325:[2,576]},o($V2,[2,2895]),{399:$VN,571:152,576:$Vr},o($V2,[2,2896],{1191:520,1202:762,1182:$VO}),o([6,10,170,176,207,232,243,310,311,321,326,446,652,659],$Vq5,{594:763,604:764,620:765,352:$Vr5}),o($Vs5,[2,2929]),o($Vf3,$Vg3,{577:767,166:$Vh3,285:$Vi3,299:$Vj3}),{576:$VS3,1193:768},o($Vk3,$Vt5,{1197:769,193:$Vu5}),o($Vk3,$Vt5,{1197:771,185:[1,772],193:$Vu5}),{385:$Vv5,538:773},o($Vk3,[2,2951],{1206:775,343:[1,776]}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:777,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o($Ve6,[2,1377],{601:848,395:[1,849]}),o($Vf6,[2,1245]),{571:850,576:$Vr},{399:$Vg6,1213:851,1224:852},{576:[2,2997]},{576:[2,2998]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:854,524:164},o($Vk3,$Vh6,{1221:855,263:$Vi6}),o($Vk3,$Vh6,{1221:857,263:$Vi6}),o($Vj6,[2,2992]),o($Vj6,[2,2993]),o($V2,$V3,{9:4,12:5,13:6,14:7,15:8,406:9,407:10,408:11,409:12,410:13,411:14,412:15,413:16,414:17,415:18,416:19,417:20,418:21,419:22,420:23,1117:24,1118:25,1119:26,1120:27,1121:28,1122:29,1123:30,571:31,17:32,565:35,566:36,800:37,801:38,802:39,803:40,804:41,805:42,806:43,923:48,924:49,925:50,926:51,927:52,928:53,929:54,1136:55,1137:56,1138:57,1139:58,1140:59,1141:60,1142:61,1143:62,1144:63,1251:70,1252:71,1253:72,1254:73,1255:74,1256:75,1257:76,1258:77,1259:78,1260:79,1261:80,1262:81,1263:82,1264:83,1265:84,1266:85,1267:86,1268:87,1269:88,1270:89,1307:90,1129:93,1189:94,1130:95,1190:96,1240:97,818:106,908:107,438:111,1054:112,1055:113,1056:114,1057:115,1153:117,1154:118,1271:120,1191:123,593:124,1209:127,1226:128,1211:137,1216:139,1217:140,5:858,25:$V4,29:$V5,57:$V6,58:$V7,73:$V8,78:$V9,79:$Va,96:$Vb,112:$Vc,130:$Vd,144:$Ve,162:$Vf,182:$Vg,219:$Vh,308:$Vi,340:$Vj,353:$Vk,439:$Vl,440:$Vm,441:$Vn,453:$Vo,569:$Vp,570:$Vq,576:$Vr,759:$Vs,814:$Vt,857:$Vu,919:$Vv,920:$Vw,922:$Vx,1158:$Vy,1182:$Vz,1183:$VA,1184:$VB,1185:$VC,1187:$VD,1205:$VE,1220:$VF,1245:$VG,1246:$VH,1272:$VI,1308:$VJ}),o($VZ3,[2,869]),{166:$Vh3,285:$Vi3,299:$Vj3,576:$Vg3,577:859},o($VK,[2,853]),{400:[1,860]},o($Vk3,$Vt5,{1197:861,193:$Vu5}),{42:$V_3,188:$VE3,329:$VF3,447:425,497:862,498:545},o($V2,[2,1999]),o([6,10,42,95,268,274,308,312,349,353,399,576,825],[2,664]),o($V2,[2,2000]),o($Vk5,[2,729]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:863},o($Vk6,[2,557]),o($Vk6,[2,558]),o($Vk6,[2,559]),{403:[1,864]},o($V34,[2,761]),o($V2,[2,2007]),o([6,10,265],$Vi4,{514:571,513:865,399:$Vj4}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:866,524:164},o($V2,[2,2726],{395:[1,867]}),o($Vl6,[2,2728]),o($Vm6,[2,1207]),o($Vm6,[2,1208]),o($Vm6,$Vn6,{443:868,208:$V04,282:$V14,396:$V24}),{383:$Vo6,384:[1,870]},{383:[1,871]},{825:[1,872]},{166:$VY2,186:$VZ2,192:$V_2,197:$V$2,440:$V03,576:$V13,814:$V23,857:$V33,1158:$V43,1179:873,1181:312,1182:$V53,1183:$V63},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,193:[1,876],297:[1,875],403:$VX2,523:877,524:164,1177:874},{105:$Vp6,131:$Vq6,310:$Vr6,816:879,1164:878},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:883},{395:$Vf4,825:[1,884]},o($Vg4,[2,2793]),o([6,10,188,265,268,274,308,325,329,349,353,395,576,825],[2,693]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,517:885,519:886,524:819},{825:[1,887]},{148:$Vs6,149:$Vt6,263:$Vu6,297:$Vv6,1169:888},{325:[2,2812]},{308:[1,893]},{179:[1,894]},{105:$Vp6,131:$Vq6,310:$Vr6,816:879,1164:895},{308:[1,896],395:$Vf4},{179:[1,897]},{308:[1,898]},{308:[2,2886]},{157:[1,899]},{308:[1,900]},{148:$Vs6,149:$Vt6,263:$Vu6,297:$Vv6,1169:901},o($V2,[2,3125]),o($V2,[2,3126]),o($V2,[2,3127]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:903,159:$VV2,160:$VW2,208:$V04,282:$V14,305:$Vw6,324:$Vx6,347:$Vy6,383:$Va4,384:$Vb4,392:$Vz6,396:$V24,404:$V75,405:$V85,443:562,469:679,473:680,475:905,548:904,657:909,685:$VA6,690:559,691:560,856:902},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:912,159:$VV2,160:$VW2},o($V2,$Vq5,{620:765,604:913,352:$Vr5}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,399:$Ve3,403:$VX2,523:354,524:164,662:355,697:914,699:349,701:350,702:351,713:352,716:353},o($Vo4,[2,1258],{706:915,267:$Vp4,295:$Vq4,309:$Vr4,314:$Vs4,318:$Vt4,319:$Vu4,327:$Vv4,334:$Vw4,339:$Vx4}),o($VB6,$VC6,{707:916,274:$VD6,280:$VE6}),o($VF6,[2,1277]),{318:[1,919]},{318:[1,920]},{318:[1,921]},{318:[1,922]},{318:[1,923]},{318:[1,924],327:[1,925]},{267:[1,927],314:[1,928],318:[1,926],327:[1,929],339:[1,930]},{267:[1,932],314:[1,933],318:[1,931],327:[1,934],339:[1,935]},o($Vz4,$VA4,{158:165,24:169,524:607,437:608,694:936,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,159:$VV2,160:$VW2,167:$VJ3,287:$VK3,403:$VX2}),{399:[1,937]},o($VG6,$VH6,{715:938,265:$VI6}),o($Vz4,[2,1372]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:940},{400:[1,941]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,167:$VJ3,287:$VK3,400:$VA4,403:$VX2,437:608,524:607,694:942},{14:950,17:515,353:$Vk,571:31,576:$Vr,726:943,728:944,730:945,732:946,734:947,736:948,738:949},{65:[1,952],239:[1,953],1243:951},o($VD4,[2,3069]),{308:[1,954]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:955,524:164},{188:$VE3,308:$V_3,329:$VF3,447:425,497:956,498:545},{188:$VE3,329:$VF3,447:425,497:957,498:545,825:$V_3},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,519:808,524:819,554:961,555:962,1238:958,1302:959,1304:960},{340:[2,767]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:963},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,393:$VJ6,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:966,555:793,579:964,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,693:965,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o($VH4,[2,887]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:376,589:968},{399:[1,969]},o($V2,$V_3,{158:165,24:169,447:425,498:545,524:819,558:970,497:971,519:972,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,159:$VV2,160:$VW2,188:$VE3,329:$VF3,403:$VX2}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,485:973,524:547},o($Vk3,[2,624]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:974,159:$VV2,160:$VW2},o($V2,[2,845]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,485:975,524:547},{340:[1,976]},{325:[1,977]},o([26,30,35,36,40,43,52,54,56,101,102,103,113,126,128,145,188,323,329,340,758,814,857,895,897,899],[2,1872]),o([167,287,340,899],[2,1955]),{188:$VE3,251:[1,979],329:$VF3,447:425,498:978},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:980},{323:[1,981]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:369,550:982},o($V2,[2,1690]),{825:[1,983]},o($Vk3,$V95,{874:686,848:[1,984]}),{61:$VV4,74:$VW4,109:$VX4,110:$VY4,120:$VZ4,213:$V_4,245:$V$4,273:$V05,276:$V15,336:$V25,461:664,466:656,537:655,542:659,544:$V35,864:654,867:658,896:$V45},o($Ve5,$VS4),o($V2,[2,1691]),{399:$Vj4,514:985},o($V2,[2,1732]),o($V2,[2,1733]),o($V2,[2,1734]),o($V2,[2,1735]),o($V2,[2,1736]),{399:[1,987],846:986},{105:$Vp6,131:$Vq6,310:$Vr6,816:988},{260:[1,989]},{31:$VK6,66:$VL6,84:$VM6,88:$VN6,94:$VO6,108:$VP6,123:$VQ6,212:$VR6,241:$VS6,269:$VT6,271:$VU6,272:$VV6,278:$VW6,865:990,1032:$VX6},o($V2,[2,1793]),{399:$VY6,815:1005},{404:$V75,405:$V85,469:679,473:680,475:1007},{399:$VY6,815:1008},o($V2,$VZ6,{543:1009,547:1010,353:$V_6}),{228:[1,1012]},o($V2,[2,1799]),o($V$6,[2,1877]),o($V$6,[2,1878]),{385:$Vv5,538:1013},{399:[2,605]},{399:[2,606]},{399:[2,1900]},{399:[2,1901]},{313:[1,1014]},{385:[2,595]},{385:[2,596]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,519:1015,524:819},o($Vk3,[2,1781]),{188:$VE3,251:[1,1017],329:$VF3,447:425,498:1018,892:1016},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1019},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,519:1020,524:819},{304:[1,1021]},o($V07,[2,1826],{870:1022,386:[1,1023]}),o($V17,[2,617]),o($V17,[2,618]),{404:[1,1025],470:[1,1024]},{405:[1,1027],470:[1,1026]},o($V2,[2,1803]),o($V2,[2,641],{488:1028,34:[1,1029]}),o($V2,[2,1898]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,519:1030,524:819},o($Vk3,$V27),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,501:1031,519:1033,524:819,532:1032},{399:$Vj4,514:1034},{353:[1,1035]},{399:[1,1036]},{399:$V37,849:1037},{399:[2,1836]},{399:[2,1837]},{399:$VY6,815:1039},o($V2,[2,1945]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1040},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:1041,524:164},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1042},o($V2,[2,2042],{24:169,158:1043,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,159:$VV2,160:$VW2}),{193:$Vs3,263:$Vt3,343:$Vu3,448:1044},o($Vg5,[2,629]),o($Vg5,[2,630]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:712,530:1045},o($V2,[2,2528]),{325:[1,1046]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:1047,159:$VV2,160:$VW2},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:1048,159:$VV2,160:$VW2},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:712,530:1049},o($Vk3,$VR4,{494:1050,312:$VT4}),{167:[1,1051]},o($V47,[2,724],{443:1052,208:$V04,282:$V14,396:$V24}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1053},o($V2,[2,2661]),o($V2,[2,2662]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:1054,524:164},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:1055,524:164},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1056},o($VR3,$V55,{492:1057,312:$V65}),o($VR3,$V55,{492:1058,312:$V65}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:1059,524:164},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:712,530:1060},o($Vk3,$V55,{492:1061,312:$V65}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:712,530:1062},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:1063,524:164},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:369,550:1064},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1065},o($Vk3,[2,560]),o($Vk3,[2,561]),o($V2,[2,3185],{208:[1,1066]}),o($V57,[2,679]),o($V57,[2,680]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:369,550:1067},o($Vk3,[2,3191]),o($Vk3,[2,3192]),o($V2,[2,3193]),o($V2,[2,3194]),{404:$V75,469:1068},o($V2,[2,3198]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:369,550:1069},o($V2,[2,3208]),o($Vn5,$Vl5,{496:1070,313:$Vm5}),o($V2,[2,3217],{325:[1,1071]}),o($Vj5,[2,3229]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1072},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1073},o($V2,[2,3245],{447:425,498:1075,164:[1,1074],188:$VE3,329:$VF3}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1076},o($V2,[2,3258],{447:425,498:1077,188:$VE3,329:$VF3}),o($V2,[2,3260]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:369,550:1078},{105:[1,1080],131:[1,1081],468:1079},{232:[1,1082]},{308:[1,1085],313:[1,1086],320:[2,638],450:1084,484:1083},o($V2,[2,3299],{469:1087,320:[1,1088],404:$V75}),{18:[1,1093],24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:[1,1092],485:1089,487:1090,510:1094,511:1091,524:547},o($V2,[2,3303],{399:[1,1095]}),o($V2,[2,3317],{1293:1096,320:[1,1097]}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1098},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1099},{325:[2,634]},o($Vs5,[2,2930]),o($V2,[2,2897]),o($V67,[2,936],{605:1100,621:1101,445:1102,232:[1,1105],310:[1,1103],446:[1,1104]}),o($V77,[2,932]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1107,555:793,627:1106,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o($VH4,$VI4,{578:1108,261:$VJ4}),o([6,10,170,176,207,232,243,310,311,321,326,446,652,659,1182],$Vq5,{604:764,620:765,594:1109,352:$Vr5}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:1110,524:164},o($Vk3,[2,2963]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:1111,524:164},{51:[1,1112]},o($V87,$V97,{1198:1113,336:$Va7}),{784:[1,1115]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:1116,524:164},o($Vk3,[2,2952]),{234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,351:$Vk7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7,665:1131,1227:1117,1232:1132},o($Vu7,[2,1048]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1139,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1140,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1141,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1142,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{399:$Ve3,662:1143},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1144,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,351:$Vv7,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1146,555:793,657:806,660:778,666:1145,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822,796:1147,798:1148},o($Vw7,[2,1181]),o($Vw7,[2,1182],{676:1150,399:$Vx7}),{399:$Vx7,676:1152},o($Vw7,[2,1185]),o($Vw7,[2,1186]),o($Vw7,[2,1187]),o($Vw7,[2,1202]),o($Vy7,[2,1194],{443:1153,208:$V04,282:$V14,396:$V24}),{399:[2,1398]},{399:[2,1399]},{399:[2,1400]},{399:[2,1401]},{399:[2,1402]},{399:[2,1403]},o($Vw7,[2,1420],{743:1154,745:1155,328:$Vz7}),{328:$Vz7,745:1157},o($Vw7,[2,1382]),o($Vw7,[2,1383]),o($Vw7,[2,1384]),{208:$V04,282:$V14,383:$Va4,384:$Vb4,392:$Vz6,396:$V24,443:562,548:1158,657:909,685:$VA6,690:559,691:560},o($Vw7,[2,1204]),o($Vw7,[2,1205]),o($VA7,[2,773]),o($VB7,[2,1409]),o($VB7,[2,1410]),o($VB7,[2,1411]),{399:[1,1159]},{399:[1,1160]},{399:[1,1161]},{399:[1,1162]},o($Vw7,[2,1216]),o($Vw7,[2,1217]),o($Vw7,[2,1218]),o($VC7,[2,791],{459:1163,209:[1,1164],283:[1,1165]}),{399:[1,1166]},{399:[1,1167]},{399:[1,1168]},o($Vw7,[2,1221]),o($Vw7,[2,1222]),{399:[2,1529]},{399:[2,1530]},{399:[2,1531]},{399:[2,1532]},{399:[2,1533]},{399:[2,1534]},{399:[2,1535]},{399:[2,1536]},{399:[2,1537]},{399:[2,1538]},{399:[2,1539]},{399:[2,1540]},{399:[2,1541]},{399:[2,1542]},{399:[2,1543]},{399:[2,1544]},{399:[2,1545]},{399:[2,1546]},{399:[2,1547]},{399:[2,1548]},{399:[2,1549]},{399:[2,1550]},{399:[2,1551]},o([6,10,170,176,207,232,243,310,311,321,326,348,352,400,446,576,652,659,949,1182],[2,911],{740:1169,184:[1,1170]}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,399:$Ve3,403:$VX2,523:354,524:164,662:355,697:1171,699:349,701:350,702:351,713:352,716:353},o($V2,$VL,{581:149,583:150,572:1172,348:$VM}),o($V2,[2,2967],{395:[1,1173]}),o($Vl6,[2,2999]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1175,555:793,657:806,660:778,663:1174,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{167:[1,1176]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:1177,524:164},o($Vk3,[2,2995]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:1178,524:164},o($V2,[2,7]),{571:1179,576:$Vr},o($VK,$VL,{581:149,583:150,572:1180,348:$VM}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:1181,524:164},{42:[1,1182]},o($V$3,[2,710],{525:1183,528:1184,282:$VD7}),o($V34,[2,760]),o($V2,$VH6,{715:1186,265:$VI6}),o($V2,$V_3,{447:425,498:545,497:1187,188:$VE3,329:$VF3}),{208:$V04,282:$V14,383:$Va4,384:$Vb4,396:$V24,443:562,657:1188,690:559,691:560},o($Vm6,$VE7,{383:$VF7,384:[1,1190]}),o($Vm6,[2,1212]),{383:[1,1191]},o($Vm6,[2,1213]),{105:$Vp6,131:$Vq6,310:$Vr6,816:879,1164:1192},o($Vg4,[2,2785]),o($VG7,[2,2767]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1193},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:1194,524:164},o($VG7,[2,2772]),o($V2,$VH7,{1167:1195,353:$VI7,395:$VJ7}),o($VK7,[2,2814]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1198},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1199},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1200},o($Vh4,[2,2826]),{105:$Vp6,131:$Vq6,310:$Vr6,816:879,1164:1201},{395:$VL7,400:[1,1202]},o($VM7,[2,698]),{232:[1,1204]},{825:[1,1205]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1206},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:1207,524:164},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1208},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1209},{105:$Vp6,131:$Vq6,310:$Vr6,816:879,1164:1210},{166:$VY2,186:$VZ2,192:$V_2,197:$V$2,440:$V03,576:$V13,814:$V23,857:$V33,1158:$V43,1162:1211,1179:310,1181:312,1182:$V53,1183:$V63},o($V2,[2,2839],{395:$VJ7}),{105:$Vp6,131:$Vq6,310:$Vr6,816:879,1164:1212},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:[1,1214],106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:311,1166:1213},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:311,1166:1215},{308:[2,2887]},{232:[1,1216]},{308:[1,1217]},o($V2,[2,3114]),o($V2,[2,3118]),o($V2,[2,3119],{24:169,158:1218,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,159:$VV2,160:$VW2}),o($V2,[2,3121]),o($V2,[2,3122]),o($V2,[2,3123]),o($V2,[2,3124]),o($VN7,[2,1199]),{208:$V04,282:$V14,383:$Va4,384:$Vb4,396:$V24,443:562,657:1219,690:559,691:560},{208:$V04,282:$V14,383:$Va4,384:$Vb4,396:$V24,443:562,657:1220,690:559,691:560},o($Vn4,[2,3117]),o($V2,[2,2708]),o($V2,$Vq5,{620:765,604:1221,352:$Vr5}),o($VB6,$VC6,{707:1222,274:$VD6,280:$VE6}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,399:$Ve3,403:$VX2,523:354,524:164,662:355,701:1223,713:352,716:353},o($VB6,[2,1266]),o($VB6,[2,1267]),o($VF6,[2,1278]),o($VF6,[2,1279]),o($VF6,[2,1280]),o($VF6,[2,1281]),o($VF6,[2,1282]),o($VF6,[2,1283]),{318:[1,1224]},o($VF6,[2,1285]),{318:[1,1225]},{318:[1,1226]},{318:[1,1227]},{318:[1,1228]},o($VF6,[2,1290]),{318:[1,1229]},{318:[1,1230]},{318:[1,1231]},{318:[1,1232]},o($VG6,$VH6,{715:1233,265:$VI6}),{32:[1,1234],159:[1,1236],208:$V04,282:$V14,383:[1,1237],396:$V24,443:1238,690:1235},o($VG6,[2,1320]),{723:[1,1239]},o($Vz4,[2,1373]),o($VO7,[2,1351]),{400:[1,1240]},{400:[2,1355]},{400:[2,1357]},{400:[2,1359]},{400:[2,1361]},{400:[2,1363]},{400:[2,1365]},{400:[2,1367]},{400:[2,1369]},{385:$Vv5,538:1241},{385:[2,3074]},{385:[2,3075]},{385:$Vv5,538:1242},{188:$VE3,308:$V_3,329:$VF3,447:425,497:1243,498:545},{308:[2,3089]},{783:1244,825:$VF4},o($VP7,[2,3347],{1297:1245,308:[1,1247],395:$VQ7}),o($VR7,[2,3334]),{388:[1,1248]},{388:[2,3344]},o($VS7,[2,770],{443:1249,208:$V04,282:$V14,396:$V24}),o($VG4,[2,763]),o($VZ3,[2,863],{580:1250,593:1252,308:$Vi,395:$VT7}),o($VU7,[2,1230]),o($VU7,$VA4,{158:165,24:169,524:607,437:608,665:1131,694:1253,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,159:$VV2,160:$VW2,167:$VJ3,234:$Vb7,240:$Vc7,287:$VK3,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7,403:$VX2}),o($VU7,[2,1226]),o($VL4,[2,891]),o($VB4,$VC4,{724:611,591:1254}),o($V2,$V_3,{447:425,498:545,497:1255,443:1256,188:$VE3,208:$V04,282:$V14,329:$VF3,396:$V24}),o($V2,[2,829]),o($VV7,[2,781]),o($V2,[2,830]),o($V2,[2,831]),o($V2,[2,846]),{46:[1,1257],74:$VW4,87:[1,1259],245:$V$4,461:664,537:1258},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:1260,524:164},o($VW7,$VX7,{461:664,536:1261,537:1262,74:$VW4,245:$V$4}),{329:[1,1263],821:[1,1264]},{180:$VY7,189:$VZ7,822:1265,823:1266,1004:1267},{304:[1,1270]},o($V2,[2,1685]),{188:$VE3,329:$VF3,447:425,498:1271},o($Vk3,$V27,{849:1272,399:$V37}),{325:[1,1273]},o($V2,[2,1737]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,519:808,524:819,554:1276,555:962,903:1274,905:1275},o($V2,[2,1738]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,519:1277,524:819},o($V2,[2,1792]),o($V_7,[2,2333]),{404:$V75,405:$V85,469:679,473:680,475:1278},o($V_7,[2,2335]),o($V_7,[2,2336]),o($V_7,[2,2337]),o($V_7,[2,2338]),o($V_7,[2,2339]),o($V_7,[2,2340]),o($V_7,[2,2341]),o($V_7,[2,2342]),o($V_7,[2,2343]),o($V_7,[2,2344]),o($V_7,[2,2345]),o($V_7,[2,2346]),o($V2,[2,1794]),{404:$V75,405:$V85,469:679,473:680,475:1281,945:1279,946:1280},o($V2,$V$7,{866:1282,1048:1283,353:$V08}),o($V2,[2,1796]),o($V2,[2,1797]),o($V18,[2,755]),{254:[1,1285]},{220:$V28,868:1286},o([6,10,39,120,167,188,213,238,262,276,279,287,329,453,544,944,949],[2,745]),{404:$V75,405:$V85,469:679,473:680,475:1288},{340:[1,1289],857:[1,1290]},o($V2,[2,1913],{893:1291,93:[1,1293],395:[1,1292]}),o($V2,[2,1856],{329:[1,1294],821:[1,1295]}),o($V38,[2,1904]),o($V2,[2,1855]),o($V2,[2,1859]),o([25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,188,251,329,403],[2,654]),o($V2,[2,1829],{871:1296,353:[1,1297]}),{133:[1,1298]},{404:[1,1299]},o($V48,[2,612]),{405:[1,1300]},o($V58,[2,615]),o($V2,[2,1897]),o($V2,[2,642]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,519:1302,524:819,875:1301},{395:$V68,400:[1,1303]},o($V78,[2,731]),o($V78,[2,738],{388:[1,1305]}),{114:[1,1307],316:[2,2292],1016:1306},{193:[1,1308]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,399:[1,1311],403:$VX2,501:1310,519:1033,524:819,532:1032,890:1309},o($V2,$V88,{490:1312,34:$V98,104:$Va8}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,519:1302,524:819,875:1316,968:1315},o($V2,[2,1944]),o($V2,[2,1946],{282:[1,1317]}),o($V2,[2,1958]),{317:[1,1318]},o([6,10,74,245,944],$Vb8,{936:1319,937:1320,941:1321,452:1322,39:$Vc8,453:$Vd8}),o($Vk3,$VR4,{494:1325,312:$VT4}),o($Ve8,[2,2518],{1052:1326,1094:1327,399:[1,1328]}),{193:[1,1329]},{399:[1,1331],1111:1330},{167:[1,1332]},{399:$Vf8,1062:1333},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:712,530:1335},{404:$V75,469:1336},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1337},o($V2,[2,643],{489:1338,34:[1,1339],104:[1,1341],214:[1,1340],255:[1,1342]}),{188:$VE3,329:$VF3,447:425,498:1343},o($V2,[2,2680],{1157:1344,93:[1,1346],331:[1,1345]}),{325:[1,1347]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:1348,159:$VV2,160:$VW2},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:1349,159:$VV2,160:$VW2},o($V2,[2,2693]),{399:$Vf8,1062:1350},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:712,530:1351},o($V2,[2,2652]),o($V2,$V_3,{447:425,498:545,497:1352,188:$VE3,329:$VF3}),o($V2,[2,3170]),o($V2,[2,3174],{444:1353,308:$Vh5,313:$Vi5}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:1354,159:$VV2,160:$VW2,442:[1,1355]},o($V2,[2,3186]),o($V2,[2,3197]),o($V2,$V_3,{447:425,498:545,497:1356,188:$VE3,329:$VF3}),o($V2,[2,3209],{320:[1,1357]}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,166:[1,1358],193:$Vs3,263:$Vt3,343:$Vu3,403:$VX2,448:1360,524:1359},o($V2,[2,3221]),o($V2,[2,3232],{444:1361,308:$Vh5,313:$Vi5}),o($V2,[2,3246]),o($V2,[2,3247],{164:[1,1362]}),o($V2,[2,3249]),o($V2,[2,3259]),o($V2,[2,3261]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:1363,159:$VV2,160:$VW2},o($VR3,[2,609]),o($VR3,[2,610]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:1364,159:$VV2,160:$VW2},{320:[1,1365]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,485:1366,524:547},o($Vk3,[2,573]),o($Vk3,[2,574]),o($V2,[2,3300]),{404:$V75,469:1367},o($Vk5,[2,661]),o($Vk5,[2,662]),o($Vk5,[2,730]),{403:$V44,470:$V54,472:[1,1368]},o($Vk5,[2,685]),o($Vk5,[2,686]),{404:$V75,405:$V85,469:679,473:680,475:1369},o($V2,[2,3308]),{404:$V75,469:1370},o($Vn5,[2,3313]),o($Vn5,[2,3314]),o($Vg8,[2,1480],{606:1371,622:1372,311:[1,1373]}),o($V67,[2,937]),{292:[1,1374]},{292:[2,562]},{292:[2,563]},{292:[2,564]},o($V77,[2,933]),o($V77,[2,1046],{665:1131,234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,393:$VJ6,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:966,555:793,579:1375,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,693:965,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o($Vs5,[2,2935]),o([349,353,399,576],$V_3,{447:425,498:545,497:1376,188:$VE3,329:$VF3}),o([312,353,576],$V_3,{447:425,498:545,497:1377,188:$VE3,329:$VF3}),{385:$Vv5,538:1378},o($VB4,$Vh8,{1029:1379,1027:1380,464:1381,116:$Vi8,275:$Vj8}),{63:[1,1384]},{785:[1,1385]},{349:[1,1386]},o($V2,[2,3008]),o([150,299,305,324,347],$Vk8,{661:1387,323:$Vl8}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1389,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1390,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1391,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1392,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{234:$Vb7,240:$Vc7,289:[1,1394],313:[1,1393],320:$Vg7,333:$Vi7,335:$Vj7,665:1395},{399:[1,1396]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1397,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1398,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1399,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1400,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1401,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1402,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o($Vu7,[2,1075]),o($V2,[2,3031],{1232:1403,351:$Vk7}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1404,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1405,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1406,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1407,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1408,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{76:$Vk8,323:$Vl8,661:1409},o($Vm8,[2,1049],{665:1131,234:$Vb7,240:$Vc7,313:$Ve7,317:$Vf7,320:$Vg7,333:$Vi7,335:$Vj7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7}),o($Vm8,[2,1050],{665:1131,234:$Vb7,240:$Vc7,313:$Ve7,317:$Vf7,320:$Vg7,333:$Vi7,335:$Vj7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7}),o($Vm8,[2,1051],{665:1131,234:$Vb7,240:$Vc7,313:$Ve7,317:$Vf7,320:$Vg7,333:$Vi7,335:$Vj7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7}),o($Vn8,[2,1052],{665:1131}),o($Vu7,[2,1058]),{234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7,400:[1,1410],665:1131},o($Vu7,[2,1077]),{234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,351:$Vv7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7,665:1131,666:1411,796:1147,798:1148},{302:[1,1413],303:[1,1412],351:$Vv7,798:1414},o($Vo8,[2,1623]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1415,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o($Vw7,[2,1183]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,400:[1,1416],403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1175,555:793,657:806,660:778,663:1417,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o($Vw7,[2,1184]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,393:[1,1418],403:$VX2,519:1419,524:819},o($Vw7,[2,1380]),o($Vw7,[2,1421]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,399:$Vp8,403:$VX2,524:1420,766:1421},o($Vw7,[2,1381]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:1423,159:$VV2,160:$VW2},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,400:[1,1424],403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1175,555:793,657:806,660:778,663:1425,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,400:[1,1427],403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1426,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{134:[1,1429],135:[1,1431],136:[1,1432],137:[1,1433],138:[1,1434],139:[1,1435],140:[1,1436],141:[1,1437],370:[1,1430],790:1428},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,400:[1,1439],403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1438,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,210:$Vq8,237:$Vx5,282:$V14,284:$Vr8,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,462:1441,469:816,473:817,505:786,519:808,524:819,534:1440,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o($Vs8,[2,591]),o($Vs8,[2,592]),o($Vt8,$Vg3,{577:1446,166:$Vh3,285:$Vi3,299:$Vj3,393:[1,1444],400:[1,1445]}),o($Vt8,$Vg3,{577:1447,166:$Vh3,285:$Vi3,299:$Vj3,400:[1,1448]}),o([25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,168,208,237,282,286,293,304,305,312,322,323,324,347,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,375,376,377,378,379,380,381,382,383,384,392,396,397,398,399,400,403,404,405,758,759,789],$Vg3,{577:1449,166:$Vh3,285:$Vi3,299:$Vj3}),o($Ve6,[2,1378]),{132:[1,1450]},o($Vf6,[2,1246]),o($V2,[2,2966]),{399:$Vg6,1224:1451},{395:$Vu8,400:[1,1452]},o($Vv8,[2,1166],{665:1131,234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:1454,159:$VV2,160:$VW2},o($VY3,$Vi4,{514:571,513:1455,399:$Vj4}),o([188,268,274,329,349,576],$Vi4,{514:571,513:1456,399:$Vj4}),o($VZ3,[2,874]),o($VK,[2,854]),o([353,399,576],$V_3,{447:425,498:545,497:1457,188:$VE3,329:$VF3}),{115:[1,1458]},o($V$3,[2,711],{528:1459,282:$VD7}),o($Vw8,[2,716]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1460},o($V2,[2,2012]),o($V2,[2,2013]),o($Vl6,[2,2729]),o($Vm6,[2,1211]),{383:[1,1461]},o($Vm6,[2,1214]),o($V2,$Vx8,{1165:1462,353:$Vy8,395:$VJ7}),o($VG7,[2,2770]),o($VG7,[2,2771]),o($V2,[2,2731]),{105:$Vp6,131:$Vq6,310:$Vr6,816:1464},{27:[1,1465]},o($VK7,[2,2819]),o($VK7,[2,2820]),o($VK7,[2,2821]),o($V2,$VH7,{1167:1466,353:$VI7,395:$VJ7}),o([6,10,36,52,74,113,114,116,120,167,188,190,213,245,248,265,268,274,275,276,287,308,316,325,329,336,349,353,395,399,400,544,576,825,949],[2,695]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,519:1467,524:819},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1468},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:[1,1470],147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1469},o($VG7,[2,2777]),o($VG7,[2,2778]),o($VG7,[2,2779]),o($VG7,[2,2780]),o($V2,[2,2837],{395:$VJ7}),{308:$Ve4,325:$Vc4,395:$Vd4,1163:1471},o($V2,[2,2840],{395:$VJ7}),{308:[1,1472],395:$Vf4},o($Vm4,$V84,{158:165,24:169,524:311,1166:1473,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,159:$VV2,160:$VW2,403:$VX2}),o($V2,[2,2843],{395:$Vf4}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1474},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:[1,1476],147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1475},o($V2,[2,3120]),o($VN7,[2,1200]),o($VN7,[2,1201]),o($V2,[2,2714]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,399:$Ve3,403:$VX2,523:354,524:164,662:355,701:1477,713:352,716:353},o($Vz8,$VA8,{708:1478,266:$VB8,325:$VC8}),o($VF6,[2,1284]),o($VF6,[2,1286]),o($VF6,[2,1287]),o($VF6,[2,1288]),o($VF6,[2,1289]),o($VF6,[2,1291]),o($VF6,[2,1292]),o($VF6,[2,1293]),o($VF6,[2,1294]),o($VG6,[2,1319]),{383:[1,1481]},{91:[1,1482],337:[1,1483]},{400:[1,1484]},o($VD8,$Vn6,{443:1485,208:$V04,282:$V14,396:$V24}),{383:$Vo6},{399:[1,1486]},o($VO7,[2,1352]),{86:[1,1488],316:[2,3065],1223:[1,1489],1244:1487},o($V2,$VX7,{461:664,537:1262,536:1490,74:$VW4,245:$V$4}),{308:[2,3088]},{825:[1,1491]},o($V2,$Vq5,{620:765,604:1492,352:$Vr5}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,519:808,524:819,554:961,555:962,1302:1493,1304:960},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,399:$Ve3,403:$VX2,523:354,524:164,662:355,697:1494,699:349,701:350,702:351,713:352,716:353},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1496,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822,1305:1495},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,393:[1,1497],403:$VX2,519:1419,524:819},o($VZ3,[2,864]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,393:$VJ6,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:966,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,693:1498,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o([6,10,170,176,207,232,243,310,311,321,326,348,400,446,652,659,949],$Vq5,{604:764,620:765,594:1499,352:$Vr5}),o($VU7,[2,1225]),{400:[1,1500]},o($V2,[2,828]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,519:1501,524:819},{399:$VY6,815:1502},o($V2,[2,1666]),{105:$Vp6,131:$Vq6,310:$Vr6,816:1503},{95:$V_3,188:$VE3,329:$VF3,447:425,497:1504,498:545},o($VE8,[2,1915],{447:425,820:1505,900:1506,901:1507,498:1508,188:$VE3,329:$VF3}),o([6,10,39,120,167,188,213,276,287,329,453,544,944,949],[2,744]),{208:$V04,282:$V14,305:$VB5,347:$VG5,383:$Va4,384:$Vb4,396:$V24,404:$V75,405:$V85,443:562,469:816,473:817,504:1509,505:1510,657:806,686:792,688:807,690:559,691:560,692:818},{388:[1,1511]},o($V2,[2,1683]),o($V2,[2,1684]),{399:$Vj4,514:1512},{70:[1,1513]},{70:[1,1514]},o([6,10,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,188,251,329,353,403,576],[2,657]),o($V2,[2,1739]),o($V2,$V88,{490:1515,34:$V98,104:$Va8}),{399:$VF8,841:1516},{395:[1,1519],400:[1,1518]},o($V78,[2,1928]),{388:[1,1520]},{399:[1,1522],858:1521},{85:[1,1523]},{395:[1,1525],400:[1,1524]},o($V78,[2,2066]),{388:[1,1526]},o($V2,[2,1795]),o($VG8,[2,2388]),{110:[1,1527],273:[1,1528]},{388:[1,1529]},o($V2,[2,1798]),o([6,10,39,72,74,116,120,167,213,244,245,275,276,287,353,453,544,949],$VH8,{1037:1530,457:1531,59:$VI8,224:$VJ8}),o([6,10,167,287,353,949],[2,752]),{151:[1,1535],152:[1,1537],153:[1,1538],154:[1,1539],453:[1,1536],855:1534},{153:[1,1540]},o($V2,[2,1854]),{188:$VE3,329:$VF3,447:425,498:1541},o($V2,[2,1914]),{208:$V04,282:$V14,305:$VB5,347:$VG5,383:$Va4,384:$Vb4,396:$V24,404:$V75,405:$V85,443:562,469:816,473:817,504:1542,505:1510,657:806,686:792,688:807,690:559,691:560,692:818},{388:[1,1543]},o($V2,[2,1802]),{86:[1,1544]},o($V07,[2,1827]),o($V48,[2,611]),o($V58,[2,614]),o($VK8,[2,1885],{876:1545,898:1546,28:[1,1547],62:[1,1548]}),{53:$VL8,117:$VM8,118:$VN8,124:$VO8,125:$VP8,129:$VQ8,168:$VR8,175:$VS8,252:$VT8,286:$VU8,290:$VV8,291:$VW8,294:$VX8,298:$VY8,300:$VZ8,306:$V_8,315:$V$8,322:$V09,341:$V19,342:$V29,345:$V39,346:$V49,350:$V59,562:1550,972:1549,981:1551,982:1552,983:1553,984:1554,985:1555,986:1556,987:1557,988:1558},o([6,10,26,35,40,42,43,52,54,74,93,95,102,103,164,188,213,245,268,274,308,312,329,340,349,353,395,399,544,576,758,825,895,897],[2,666]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,519:1033,524:819,532:1582},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1583,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{316:[1,1584]},{292:[1,1585]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:369,550:1586},{395:[1,1588],400:[1,1587]},{395:$V68,400:[1,1589]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,501:1590,519:1033,524:819,532:1032},o($V2,[2,1833]),o($V2,[2,649]),o($V2,[2,650]),{395:[1,1592],400:[1,1591]},o($V78,[2,2104]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1593},{324:[1,1596],404:$V75,405:$V85,469:679,473:680,475:1595,911:1594},o($V2,[2,2043]),o([6,10,944],$VX7,{461:664,537:1262,536:1597,74:$VW4,245:$V$4}),o([6,10,36,74,89,113,116,120,167,213,245,259,270,275,276,287,329,336,353,390,395,400,544,944,949],[2,2053]),{404:$V75,405:$V85,469:679,473:680,475:1598},o($V69,[2,577]),o($V69,[2,578]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:712,530:1601,947:1599,951:1600},o([120,167,287],$Vb8,{941:1321,452:1322,937:1602,39:$Vc8,453:$Vd8}),o($Ve8,[2,2519]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,519:808,524:819,554:1604,555:962,1095:1603},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:1606,524:164,1098:1605},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1607,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:1611,159:$VV2,160:$VW2,400:[1,1608],1113:1609,1115:1610},{404:$V75,469:1612},{256:$V79,1063:1613},{53:$VL8,117:$VM8,124:$VO8,125:$VP8,168:$VR8,175:$VS8,252:$VT8,290:$VV8,291:$VW8,294:$VX8,298:$VY8,300:$VZ8,306:$V_8,315:$V$8,341:$V19,342:$V29,345:$V39,346:$V49,350:$V59,400:[1,1615],562:1617,1085:1616},{399:$Vf8,1062:1618},o($V2,[2,2507],{1083:1619,205:[1,1620]}),o($V47,[2,725]),o($V2,[2,2627]),o($V2,[2,644]),o($V2,[2,645]),o($V2,[2,646]),o($V2,[2,647]),o($V2,[2,2663]),o($V2,[2,2674]),o($V2,[2,2681]),o($V2,[2,2682]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:1621,524:164},o($V2,[2,2689]),o($V2,[2,2653]),o($V2,[2,2638]),{399:$Vf8,1062:1622},o($V2,[2,2699]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1623},o($V57,[2,681]),o($V57,[2,682]),o($V2,[2,3200]),{404:$V75,405:$V85,469:679,473:680,475:1624},o($V2,[2,3218]),o($V2,[2,3219]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1625},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1626},o($V2,[2,3248]),o($V2,[2,3270]),o($V2,[2,3271]),{404:$V75,469:1627},{320:[2,639]},o($V2,[2,3301]),o($Vk5,[2,689]),{400:[1,1628]},o($V2,[2,3318]),o($V89,[2,1485],{607:1629,623:1630,207:[1,1631]}),o($Vg8,[2,1481]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1632,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1634,555:793,629:1633,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o([6,10,170,176,207,232,243,310,311,321,326,352,446,652,659,1182],[2,2958],{395:$VT7}),o($VB4,$Vi4,{514:571,513:1636,349:[1,1635],399:$Vj4}),o($VB4,$VR4,{494:1637,312:$VT4}),o($V87,$V97,{1198:1638,336:$Va7}),o($VB4,[2,2911]),o($V_7,[2,2330]),{167:$VJ3,287:$VK3,437:1639},o($V99,$Va9),o($V99,[2,602]),{49:$Vb9,1035:1640},o([6,10,36,39,74,86,89,113,116,120,167,179,188,213,238,245,259,262,270,275,276,279,287,316,329,336,353,453,544,576,944,949,1223],[2,1454]),{399:$Vc9,1204:1642,1207:1643,1208:$Vd9},{150:[1,1649],299:[1,1650],305:[1,1648],324:[1,1646],347:[1,1647]},o([76,150,299,305,324,347],[2,1224]),o($Ve9,[2,1060],{665:1131,234:$Vb7,240:$Vc7,313:$Ve7,317:$Vf7,320:$Vg7,333:$Vi7,335:$Vj7,392:$Vr7,393:$Vs7,394:$Vt7}),o($Ve9,[2,1061],{665:1131,234:$Vb7,240:$Vc7,313:$Ve7,317:$Vf7,320:$Vg7,333:$Vi7,335:$Vj7,392:$Vr7,393:$Vs7,394:$Vt7}),o($Ve9,[2,1062],{665:1131,234:$Vb7,240:$Vc7,313:$Ve7,317:$Vf7,320:$Vg7,333:$Vi7,335:$Vj7,392:$Vr7,393:$Vs7,394:$Vt7}),o($Ve9,[2,1063],{665:1131,234:$Vb7,240:$Vc7,313:$Ve7,317:$Vf7,320:$Vg7,333:$Vi7,335:$Vj7,392:$Vr7,393:$Vs7,394:$Vt7}),{399:[1,1651]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1652,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o($Vu7,[2,1076]),o($VB4,$VC4,{158:165,24:169,690:559,691:560,443:562,724:611,660:778,505:786,675:787,677:788,678:789,679:791,686:792,555:793,742:800,744:801,746:802,747:803,748:804,657:806,688:807,519:808,760:809,761:810,762:811,469:816,473:817,692:818,524:819,791:822,534:1175,591:1653,663:1654,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,758:$Vb6,759:$Vc6,789:$Vd6}),{234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7,664:[1,1655],665:1131},o($Vf9,[2,1070],{665:1131,234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7}),o($Vf9,[2,1071],{665:1131,234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7}),o($Vn8,[2,1072],{665:1131,234:$Vb7,240:$Vc7,313:$Ve7,317:$Vf7,320:$Vg7,333:$Vi7,335:$Vj7}),o($Vn8,[2,1073],{665:1131,234:$Vb7,240:$Vc7,313:$Ve7,317:$Vf7,320:$Vg7,333:$Vi7,335:$Vj7}),o($Vn8,[2,1074],{665:1131,234:$Vb7,240:$Vc7,313:$Ve7,317:$Vf7,320:$Vg7,333:$Vi7,335:$Vj7}),o($V2,[2,3032],{1232:1656,351:$Vk7}),o($Vn8,[2,1593],{665:1131}),o($Vn8,[2,1594],{665:1131}),o($Vn8,[2,1595],{665:1131}),o($Vn8,[2,1596],{665:1131}),o($Vn8,[2,1597],{665:1131}),{76:[1,1657]},o($Vu7,[2,1059]),o($Vu7,[2,1078]),o($Vu7,[2,1608]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1658,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o($Vo8,[2,1624]),{234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,344:[1,1659],386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7,665:1131},o($Vw7,[2,1404]),{395:$Vu8,400:[1,1660]},o($Vy7,[2,1195]),o($VA7,[2,774]),o($Vw7,[2,1423]),o($Vw7,[2,1424]),o($Vg9,[2,1431],{768:1661,772:1662,447:1663,188:$VE3,329:$VF3}),o($Vw7,[2,1197]),{328:[2,1415]},{395:$Vu8,400:[1,1664]},{167:$VJ3,234:$Vb7,240:$Vc7,287:$VK3,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7,437:1665,665:1131},o($Vw7,[2,1491]),{308:[1,1666]},{308:[2,1515]},{308:[2,1516]},{308:[2,1517]},{308:[2,1518]},{308:[2,1519]},{308:[2,1520]},{308:[2,1521]},{308:[2,1522]},{308:[2,1523]},{234:$Vb7,240:$Vc7,289:$Vd7,308:[1,1668],313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7,395:[1,1669],665:1131,792:1667},o($Vw7,[2,1553]),{210:$Vq8,234:$Vb7,240:$Vc7,284:$Vr8,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7,462:1670,665:1131},o($VC7,[2,793]),o($VC7,[2,597]),o($VC7,[2,598]),{400:[1,1671]},o($VB7,[2,1503]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1175,555:793,657:806,660:778,663:1672,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1673,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o($VB7,[2,1569]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,400:[1,1674],403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1175,555:793,657:806,660:778,663:1675,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o($Vh9,[2,1584],{793:1676,327:[1,1677]}),o($Vl6,[2,3000]),o($Vl6,[2,3005]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1678,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{205:[1,1679]},o($VY3,[2,2979]),o($VY3,$V_3,{447:425,498:545,497:1680,188:$VE3,329:$VF3}),o($VB4,$Vi4,{514:571,513:1636,399:$Vj4}),o($Vi9,[2,1989],{912:1681,915:1682,179:[1,1683]}),o($Vw8,[2,717]),o($Vw8,[2,722]),o($Vm6,[2,1215]),o($V2,[2,2730]),{144:[1,1685],182:[1,1684]},o($VK7,[2,2815]),{157:[1,1686]},o($V2,[2,2732]),o($VM7,[2,699]),o($V2,[2,2733]),o($V2,$Vx8,{1165:1687,353:$Vy8}),o($V07,$V94,{158:165,24:169,524:1688,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,159:$VV2,160:$VW2,403:$VX2}),{308:[1,1689]},{105:$Vp6,131:$Vq6,310:$Vr6,816:879,1164:1690},{308:[1,1691],395:$Vf4},o($V2,[2,2844]),o($V2,[2,2845]),o($V2,$V94,{158:165,24:169,524:1692,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,159:$VV2,160:$VW2,403:$VX2}),o($Vz8,$VA8,{708:1693,266:$VB8,325:$VC8}),o($Vz8,[2,1261]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1694,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{399:[1,1695]},{201:[1,1696]},{400:[1,1697]},{400:[1,1698]},o($Vy4,[2,1334]),o($VD8,$VE7,{383:$VF7}),{383:[1,1699]},{316:[1,1700]},{316:[2,3066]},{316:[2,3067]},o($V2,[2,3076]),{385:$Vv5,538:1701},o($V2,[2,3320]),o($VR7,[2,3335]),o($VP7,[2,3348]),o($VR7,[2,3340]),o($VR7,[2,3345],{665:1131,234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7}),o($VS7,[2,771]),o($VU7,[2,1231]),o($VZ3,[2,904]),o($VL4,[2,896]),o($VV7,[2,782]),o($V2,[2,1665]),o($V2,[2,1667]),{95:[1,1702]},o($V2,$Vj9,{541:1703,542:1704,213:$V_4,544:$Vk9}),o($VE8,[2,1916],{447:425,498:1508,901:1706,188:$VE3,329:$VF3}),o($VW7,[2,1917]),o($VW7,$VX7,{461:664,537:1262,536:1707,74:$VW4,245:$V$4}),o($V2,[2,1681]),{388:$Vl9,389:$Vm9,390:$Vn9,391:$Vo9,506:1708},{208:$V04,282:$V14,305:$VB5,347:$VG5,383:$Va4,384:$Vb4,396:$V24,404:$V75,405:$V85,443:562,469:816,473:817,505:1713,657:806,686:792,688:807,690:559,691:560,692:818},{52:[1,1714]},{399:$Vj4,514:1715},{399:[2,2230]},o($V2,[2,1740]),o($V2,[2,1940],{842:1716,203:[1,1717]}),{399:$Vp9,521:1719,1025:1718},o($V2,[2,1926]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,519:808,524:819,554:1276,555:962,905:1721},{404:$V75,405:$V85,469:679,473:680,475:1722},o($V2,[2,1765]),{404:$V75,405:$V85,469:679,473:680,475:1725,860:1723,862:1724},{404:$V75,405:$V85,469:679,473:680,475:1726},o([6,10,39,74,116,120,167,213,245,275,276,287,313,336,453,544,949],[2,2065]),{404:$V75,405:$V85,469:679,473:680,475:1281,946:1727},{208:$V04,282:$V14,305:$VB5,347:$VG5,383:$Va4,384:$Vb4,396:$V24,404:$V75,405:$V85,443:562,469:816,473:817,505:1728,657:806,686:792,688:807,690:559,691:560,692:818},{399:$VY6,815:1729},{399:$VY6,815:1730},{208:$V04,282:$V14,383:$Va4,384:$Vb4,392:$Vz6,396:$V24,443:562,548:1731,657:909,685:$VA6,690:559,691:560},o($Vq9,$Vr9,{1040:1732,460:1733,72:$Vs9,244:$Vt9}),{122:$Vu9,277:$Vv9,467:1736},o($Vw9,[2,587]),o($Vw9,[2,588]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:903,159:$VV2,160:$VW2,208:$V04,282:$V14,305:$Vw6,324:$Vx6,347:$Vy6,383:$Va4,384:$Vb4,392:$Vz6,396:$V24,404:$V75,405:$V85,443:562,469:679,473:680,475:905,548:904,657:909,685:$VA6,690:559,691:560,856:1739},o($Vx9,[2,1775]),o($Vx9,[2,1776]),o($Vx9,[2,1777]),o($Vx9,[2,1778]),o($Vx9,[2,1779]),o($V2,[2,1764]),o($V38,[2,1905]),o($V2,[2,1857]),{208:$V04,282:$V14,305:$VB5,347:$VG5,383:$Va4,384:$Vb4,396:$V24,404:$V75,405:$V85,443:562,469:816,473:817,505:1740,657:806,686:792,688:807,690:559,691:560,692:818},{120:[1,1741]},o($V2,$V88,{490:1742,34:$V98,104:$Va8}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,519:1743,524:819},o($Vk3,[2,1887]),o($Vk3,[2,1888]),o($Vy9,[2,2118],{452:1322,973:1744,976:1745,977:1746,979:1747,941:1754,39:$Vc8,151:$Vz9,152:$VA9,153:$VB9,154:$VC9,250:$VD9,323:$VE9,324:$VF9,453:$Vd8}),o($VG9,[2,2136]),o($VG9,[2,2137]),o($VG9,[2,2138]),o($VG9,[2,2139]),o($VG9,[2,2140]),o($VG9,[2,2141]),o($VG9,[2,2142]),o($VG9,[2,2143]),o($VG9,[2,2144]),o($VH9,[2,800]),o($VH9,[2,801]),o($VH9,[2,802]),o($VH9,[2,803]),o($VH9,[2,804]),o($VH9,[2,805]),o($VH9,[2,806]),o($VH9,[2,807]),o($VH9,[2,808]),o($VH9,[2,809]),o($VH9,[2,810]),o($VH9,[2,811]),o($VH9,[2,821],{563:1756,399:[1,1757]}),o($VH9,$VI9,{564:1758,399:$VJ9}),o($VH9,$VI9,{564:1760,399:$VJ9}),o($VH9,[2,815]),o($VH9,[2,816]),o($VH9,[2,817]),o($VH9,[2,818]),{389:[1,1761]},{389:[1,1762]},{389:[1,1763]},{389:[1,1764]},o($V78,[2,732]),o($V78,[2,737],{665:1131,234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7}),{383:[1,1765]},{399:[1,1767],1018:1766},o($V2,[2,1838]),{353:[2,1846]},{399:[1,1768]},{353:[2,1847]},{395:$V68,400:[1,1769]},o($VK9,[2,2099]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,172:[1,1774],189:$VZ7,250:$VD9,403:$VX2,519:1302,524:819,822:1773,875:1771,969:1770,979:1775,1002:1772,1004:1267},o($V2,[2,1947]),o($V2,[2,1965]),o($V2,[2,1971]),o($V2,[2,1972]),o($V2,[2,2060],{938:1776,943:1777,944:[1,1778]}),o([6,10,28,34,36,39,62,74,89,104,113,116,120,151,152,153,154,167,213,245,250,259,270,275,276,287,323,324,329,336,353,390,395,400,453,544,944,949],[2,2054]),o($V2,[2,2070],{948:1779,949:[1,1780]}),o([6,10,36,74,89,113,116,120,167,213,245,259,270,275,276,287,329,336,353,544,949],$Vb8,{941:1321,452:1322,937:1781,39:$Vc8,453:$Vd8}),o($VL9,[2,2091],{965:1782,849:1783,320:[1,1785],399:$V37,967:[1,1784]}),o($V99,[2,2396],{1050:1786,120:[1,1787]}),{395:[1,1789],400:[1,1788]},o($V78,$Vb8,{941:1321,452:1322,937:1790,39:$Vc8,453:$Vd8}),{399:[1,1792],1099:1791},{399:[2,2533]},o($V2,[2,2571],{665:1131,234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7}),o($Vt8,[2,2576]),{395:[1,1794],400:[1,1793]},o($V78,[2,2579]),{53:$VL8,117:$VM8,118:$VN8,124:$VO8,125:$VP8,129:$VQ8,168:$VR8,175:$VS8,252:$VT8,286:$VU8,290:$VV8,291:$VW8,294:$VX8,298:$VY8,300:$VZ8,306:$V_8,315:$V$8,322:$V09,341:$V19,342:$V29,345:$V39,346:$V49,350:$V59,562:1550,972:1795,981:1551,982:1552,983:1553,984:1554,985:1555,986:1556,987:1557,988:1558},o($V2,[2,2466]),{74:$VW4,245:$V$4,461:664,537:1796},{53:$VL8,117:$VM8,124:$VO8,125:$VP8,168:$VR8,175:$VS8,252:$VT8,290:$VV8,291:$VW8,294:$VX8,298:$VY8,300:$VZ8,306:$V_8,315:$V$8,341:$V19,342:$V29,345:$V39,346:$V49,350:$V59,562:1797},o($VM9,[2,2468]),{281:[1,1800],395:[1,1799],400:[2,2478],1086:1798},o($VN9,[2,2472]),{256:$V79,1063:1801},o($V2,[2,2462]),{30:$VO9,60:$VP9,67:$VQ9,1090:1802,1091:1803,1092:1804},o($V2,[2,2683]),o($V2,[2,2639]),o($V2,[2,3175]),o($V2,[2,3210]),o($V2,[2,3220]),o($V2,[2,3233]),o($V2,[2,3281],{447:425,498:1808,188:$VE3,329:$VF3}),o($V2,[2,3304]),o($VR9,[2,975],{608:1809,624:1810,326:$VS9}),o($V89,[2,1486]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1812},o($Vg8,[2,1482],{665:1131,234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7}),o($V67,[2,943],{630:1813,633:1815,183:[1,1817],353:[1,1816],395:[1,1814]}),o($VT9,[2,963],{665:1131,234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7}),{399:$Vc9,1204:1818,1207:1643,1208:$Vd9},o($VB4,[2,2912]),o($VB4,[2,2909]),o($VB4,$Vh8,{1027:1380,464:1381,1029:1819,116:$Vi8,275:$Vj8}),{31:$VK6,66:$VL6,84:$VM6,88:$VN6,94:$VO6,108:$VP6,123:$VQ6,212:$VR6,241:$VS6,269:$VT6,271:$VU6,272:$VV6,278:$VW6,865:1820,1032:$VX6},o($V87,[2,2954]),o($VU9,$VH8,{457:1531,1037:1821,59:$VI8,224:$VJ8}),o($V2,[2,2942]),o($VV9,[2,2948]),{395:[1,1822]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,305:$VB5,312:$VC5,322:$VD5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,396:$V24,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,555:793,657:806,660:1824,674:1823,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o($Vu7,[2,1053]),o($Vu7,[2,1054]),o($Vu7,[2,1055]),o($Vu7,[2,1056]),{308:[1,1825]},o($VB4,$VC4,{158:165,24:169,690:559,691:560,443:562,724:611,660:778,505:786,675:787,677:788,678:789,679:791,686:792,555:793,742:800,744:801,746:802,747:803,748:804,657:806,688:807,519:808,760:809,761:810,762:811,469:816,473:817,692:818,524:819,791:822,534:1175,591:1826,663:1827,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,758:$Vb6,759:$Vc6,789:$Vd6}),{234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7,664:[1,1828],665:1131},{400:[1,1829]},{395:$Vu8,400:[1,1830]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1831,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o($V2,[2,3033]),{344:[2,3045],386:[1,1833],1234:1832},{234:$Vb7,240:$Vc7,289:$Vd7,303:[1,1834],313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7,665:1131},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1835,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o($Vw7,[2,1405]),{326:$VS9,400:[2,1437],624:1837,769:1836},o($Vg9,[2,1432]),{292:[1,1838]},{328:[2,1416]},{53:$VL8,117:$VM8,124:$VO8,125:$VP8,168:$VR8,175:$VS8,252:$VT8,290:$VV8,291:$VW8,294:$VX8,298:$VY8,300:$VZ8,306:$V_8,315:$V$8,341:$V19,342:$V29,345:$V39,346:$V49,350:$V59,562:1839},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1840,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1841,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o($Vt8,[2,1566]),o($Vt8,[2,1567]),o($VC7,[2,792]),o($VB7,[2,1502]),{395:$Vu8,400:[1,1842]},{234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7,400:[1,1843],665:1131},o($VB7,[2,1524]),{395:$Vu8,400:[1,1844]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:1846,159:$VV2,160:$VW2,168:$Vw5,286:$Vy5,312:$VC5,322:$VD5,677:1847,756:1845,758:$Vb6,759:$Vc6},o($Vh9,[2,1585]),o($Vv8,[2,1167],{665:1131,234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,399:[1,1849],403:$VX2,523:1850,524:164,1230:1848},o($VY3,[2,2985]),o($VW9,[2,1993],{913:1851,916:1852,169:[1,1853]}),o($Vi9,[2,1990]),{38:[1,1854]},{157:[1,1855]},{157:[1,1856]},o($V2,[2,2834]),o($V2,[2,2734]),o($V2,$Vx8,{1165:1857,353:$Vy8}),{105:$Vp6,131:$Vq6,310:$Vr6,816:879,1164:1858},o($V2,[2,2841],{395:$VJ7}),{105:$Vp6,131:$Vq6,310:$Vr6,816:879,1164:1859},o($V2,[2,2846]),o($Vz8,[2,1262]),o($Vz8,[2,1313],{665:1131,234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1861,712:1860},{200:[1,1862]},o($Vy4,[2,1332]),o($Vy4,[2,1333]),{400:[1,1863]},{193:$Vs3,263:$Vt3,343:$Vu3,448:1864},o($V2,[2,3097],{179:[1,1865]}),o($V2,[2,1674]),o($V2,[2,1680]),o($V18,$VZ6,{547:1010,543:1866,353:$V_6}),o($V18,[2,749]),o($VW7,[2,1918]),o($VW7,[2,1925]),{349:[1,1867]},o($VX9,[2,675]),o($VX9,[2,676]),o($VX9,[2,677]),o($VX9,[2,678]),o($V2,[2,1682]),{81:[1,1868]},{190:[1,1869]},o($V2,[2,1730]),o($V2,[2,1941]),{395:[1,1871],400:[1,1870]},o($V78,[2,2315]),{208:$V04,282:$V14,305:$VB5,347:$VG5,383:$Va4,384:$Vb4,396:$V24,404:$V75,405:$V85,443:562,469:816,473:817,505:1873,522:1872,657:806,686:792,688:807,690:559,691:560,692:818},o($V78,[2,1929]),o($V78,[2,1934]),{395:[1,1875],400:[1,1874]},o($V78,[2,1784]),{388:[1,1876]},o($V_7,[2,2334]),o($V78,[2,2067]),o($V78,[2,2068]),o($VG8,[2,2389]),o($VG8,[2,2390]),o($V18,[2,756]),o($Vq9,[2,2360]),{122:$Vu9,277:$Vv9,467:1877},o($Vw9,[2,593]),o($Vw9,[2,594]),{292:[1,1878]},{292:[2,607]},{292:[2,608]},o($V2,[2,1763]),o($V2,[2,1858]),{399:$VY6,815:1879},o($V2,[2,1804]),o($VK8,[2,1886]),o($Vy9,[2,2114]),o($Vy9,[2,2119],{452:1322,979:1747,941:1754,977:1880,39:$Vc8,151:$Vz9,152:$VA9,153:$VB9,154:$VC9,250:$VD9,323:$VE9,324:$VF9,453:$Vd8}),o($VY9,[2,2120]),o($VY9,[2,2126]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:1881,159:$VV2,160:$VW2},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:1882,159:$VV2,160:$VW2},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,305:$VB5,312:$VC5,322:$VD5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,396:$V24,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,555:793,657:806,660:1883,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{208:$V04,282:$V14,383:$Va4,384:$Vb4,396:$V24,443:562,657:1884,690:559,691:560},{324:[1,1885]},o($VY9,[2,2132]),o($VY9,[2,2133]),{155:[1,1886]},o($VH9,[2,812]),{383:[1,1887]},o($VH9,[2,813]),{383:[1,1888]},o($VH9,[2,814]),{53:$VL8,117:$VM8,118:$VN8,124:$VO8,125:$VP8,129:$VQ8,168:$VR8,175:$VS8,252:$VT8,286:$VU8,290:$VV8,291:$VW8,294:$VX8,298:$VY8,300:$VZ8,306:$V_8,315:$V$8,322:$V09,341:$V19,342:$V29,345:$V39,346:$V49,350:$V59,390:[1,1890],562:1550,972:1889,981:1551,982:1552,983:1553,984:1554,985:1555,986:1556,987:1557,988:1558},{53:$VL8,117:$VM8,124:$VO8,125:$VP8,168:$VR8,175:$VS8,252:$VT8,290:$VV8,291:$VW8,294:$VX8,298:$VY8,300:$VZ8,306:$V_8,315:$V$8,341:$V19,342:$V29,345:$V39,346:$V49,350:$V59,390:[1,1892],562:1891},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,390:[1,1894],403:$VX2,524:1896,994:1893,996:1895},{53:$VL8,117:$VM8,118:$VN8,124:$VO8,125:$VP8,129:$VQ8,168:$VR8,175:$VS8,252:$VT8,286:$VU8,290:$VV8,291:$VW8,294:$VX8,298:$VY8,300:$VZ8,306:$V_8,315:$V$8,322:$V09,341:$V19,342:$V29,345:$V39,346:$V49,350:$V59,390:[1,1898],562:1550,972:1899,981:1551,982:1552,983:1553,984:1554,985:1555,986:1556,987:1557,988:1558,999:1897},{33:[1,1900]},{316:[2,2293]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,519:1903,524:819,1020:1901,1022:1902},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,501:1904,519:1033,524:819,532:1032},o($V78,[2,1850]),{400:[1,1905]},o($V78,[2,2105]),{400:[2,2192]},{395:[1,1906],400:[2,2193]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1907},{399:$Vj4,514:1908},o($V2,[2,2049]),o($V2,[2,2061]),{18:[1,1910],46:[1,1909]},o($V2,[2,2069]),{383:[1,1911]},o($VZ9,[2,2232],{952:1912,1007:1913,463:1914,89:[1,1916],270:[1,1917],329:[1,1915]}),o($VL9,[2,2088]),o($VL9,[2,2092]),{385:$Vv5,538:1918},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:1919,524:164},{167:$VJ3,287:$VK3,437:1920},{399:$VY6,815:1921},o($Ve8,[2,2520]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,519:808,524:819,554:1922,555:962},o($V78,[2,2522]),{167:[1,1923]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,519:808,524:819,554:1925,555:962,1109:1924},o($Vt8,[2,2577]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:1611,159:$VV2,160:$VW2,1115:1926},o($V78,[2,2585]),{262:[1,1928],1064:1927},o([74,245],[2,2480]),{400:[1,1929]},{53:$VL8,117:$VM8,124:$VO8,125:$VP8,168:$VR8,175:$VS8,252:$VT8,290:$VV8,291:$VW8,294:$VX8,298:$VY8,300:$VZ8,306:$V_8,315:$V$8,341:$V19,342:$V29,345:$V39,346:$V49,350:$V59,562:1930},{400:[2,2479]},{74:$VW4,245:$V$4,461:664,537:1931},o($V2,[2,2508],{395:[1,1932]}),o($Vl6,[2,2510]),{404:$V75,469:1933},{404:[2,2513]},{404:[2,2514]},{404:[2,2515]},o($V2,[2,3282]),o($V_9,[2,1000],{609:1934,625:1935,646:1936,647:1937,648:1938,170:[1,1939],176:[1,1940],652:$V$9}),o($VR9,[2,976]),{292:[1,1942]},{167:[1,1943]},o($V67,[2,938]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1944,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o($V67,[2,944]),{173:[1,1945],191:[1,1946]},{111:[1,1947]},o($V2,[2,2941]),o($VB4,[2,2910]),o($V_7,[2,2331]),o($V0a,[2,2369],{1038:1948,37:[1,1949]}),{399:$Vc9,1207:1950},{395:[1,1952],400:[1,1951]},o($V78,[2,1179]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1953,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{400:[1,1954]},{395:$Vu8,400:[1,1955]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1956,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o($Vu7,[2,1066]),o($Vu7,[2,1067]),o([6,10,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,167,170,176,183,184,194,195,207,210,232,243,247,251,267,284,287,288,289,295,301,302,303,308,309,310,311,314,318,319,321,326,327,332,334,337,339,344,348,351,352,353,386,387,395,400,403,446,576,652,659,664,949,1182],[2,1069],{665:1131,234:$Vb7,240:$Vc7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7}),{344:[1,1957]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1958,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o($Vu7,[2,1609]),o($Vo8,[2,1630],{665:1131,234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7}),{400:[1,1959]},{251:$V1a,332:$V2a,337:[1,1963],400:[2,1442],773:1960,775:1961,776:1962,786:1964},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1175,555:793,657:806,660:778,663:1967,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{400:[1,1968]},{234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7,400:[1,1969],665:1131},{234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7,400:[1,1970],665:1131},o($VB7,[2,1504]),o($VB7,[2,1568]),o($VB7,[2,1525]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,167:$V3a,403:$VX2,524:1971,794:1972},{399:$Vx7,676:1974},{399:$Vx7,676:1975},{167:[1,1976]},o($VB4,$VC4,{724:611,591:1977}),{167:[2,3027]},o($V2,[2,1997],{914:1978,80:[1,1979]}),o($VW9,[2,1994]),{77:[1,1980]},o($Vi9,[2,1991]),o($V2,[2,2828]),o($V2,[2,2829]),o($V2,[2,2735]),o($V2,[2,2838],{395:$VJ7}),o($V2,[2,2842],{395:$VJ7}),{395:[1,1982],400:[1,1981]},o($V78,[2,1315]),{383:[1,1983]},o($VG6,[2,1342],{253:[1,1984]}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:1985,524:164},{100:[1,1986]},o($V18,[2,748]),{388:$Vl9,389:$Vm9,390:$Vn9,391:$Vo9,506:1987},o([6,10,395,400],[2,2205]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:1988,524:164},o([6,10,74,116,120,167,203,213,245,275,276,287,336,353,544,949],[2,2314]),{399:$Vp9,521:1989},{395:[1,1991],400:[1,1990]},o($V78,[2,707]),o($V2,[2,1782]),{404:$V75,405:$V85,469:679,473:680,475:1725,862:1992},{404:$V75,405:$V85,469:679,473:680,475:1993},{292:[1,1994]},{404:$V75,469:1995},o($V2,[2,1830]),o($VY9,[2,2121]),o($VY9,[2,2127]),o($VY9,[2,2128]),o($VY9,[2,2129]),o($VY9,[2,2130]),o($VY9,[2,2131]),o([6,10,28,34,39,62,104,151,152,153,154,250,323,324,395,399,400,453],[2,2228]),{395:[1,1997],400:[1,1996]},{400:[1,1998]},{390:[1,1999]},o($VG9,[2,2150]),{395:[1,2000]},o($VG9,[2,2154]),{390:[1,2001],395:[1,2002]},o($VG9,[2,2160]),o($V4a,[2,2162]),{998:[1,2003]},{390:[1,2004],395:[1,2005]},o($VG9,[2,2177]),o($V4a,[2,2179]),o($V5a,[2,2284]),{395:[1,2007],400:[1,2006]},o($V78,[2,2298]),o($V78,$V6a,{643:2008,194:$V7a,195:$V8a,288:$V9a,301:$Vaa}),{395:$V68,400:[1,2013]},o($VK9,[2,2100]),{172:[1,2014]},{180:$VY7,823:2015},{400:[2,2224]},o($V2,[2,2063],{815:2016,399:$VY6}),o($V2,[2,2064]),o($V2,[2,2071]),o($Vba,[2,2248],{953:2017,1010:2018,259:[1,2019]}),o($VZ9,[2,2233]),{292:[1,2020]},{292:[1,2021]},{292:[2,599]},{292:[2,600]},o($VL9,[2,2093]),o($VL9,[2,2094]),{14:2022,17:515,353:$Vk,571:31,576:$Vr},o($V99,[2,2397]),o($V78,$Vb8,{941:1321,452:1322,937:2023,39:$Vc8,453:$Vd8}),{404:$V75,405:$V85,469:679,473:680,475:2025,1100:2024},{395:[1,2027],400:[1,2026]},o($V78,[2,2565]),o($V78,[2,2580]),o($V2,[2,2420]),{388:[1,2028]},o($VM9,[2,2469]),o($VN9,[2,2473]),{238:[1,2030],279:[2,2483],1067:2029},{30:$VO9,60:$VP9,67:$VQ9,1091:2031,1092:1804},o($Vl6,[2,2512]),o($Vca,[2,1031],{610:2032,626:2033,243:[1,2035],321:[1,2034]}),o($V_9,[2,1001]),o($V_9,[2,1002]),o($V_9,[2,1003],{648:2036,652:$V$9}),o($V_9,[2,1005]),{292:[1,2037]},{292:[1,2038]},{292:[1,2039]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:2042,555:793,639:2040,641:2041,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{399:$Vp8,766:2043},o($VT9,[2,964],{665:1131,234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7}),o($V67,[2,945]),o($V67,[2,946]),{399:[1,2044]},o($Vda,[2,2374],{1039:2045,322:[1,2046]}),{69:[1,2047]},o($VV9,[2,2949]),o($VV9,[2,2950]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,305:$VB5,312:$VC5,322:$VD5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,396:$V24,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,555:793,657:806,660:2048,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o($Vn8,[2,1057],{665:1131}),o($Vu7,[2,1064]),o($Vu7,[2,1065]),o($Vm8,[2,1068],{665:1131,234:$Vb7,240:$Vc7,313:$Ve7,317:$Vf7,320:$Vg7,333:$Vi7,335:$Vj7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7}),{1158:[1,2051],1182:[1,2052],1183:[1,2050],1235:2049},{234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,344:[2,3046],386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7,665:1131},o($Vw7,[2,1426]),{400:[2,1438]},{400:[2,1443]},{289:[1,2053],780:[1,2054]},o($Vea,[2,1460]),o($Vea,[2,1461]),o($Vfa,[2,1470]),o($Vfa,[2,1471]),o($Vg9,[2,1433],{395:$Vu8}),o($Vw7,[2,1490]),o($Vw7,[2,1508]),o($Vw7,[2,1552]),o($Ve6,[2,1574],{794:2055,167:$V3a}),o($Ve6,[2,1575]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:2056},o($Vga,[2,1394]),o($Vga,[2,1395]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:2057,159:$VV2,160:$VW2},{400:[1,2058]},o($V2,[2,1973]),o($V2,[2,1998]),o($VW9,[2,1995]),o($Vz8,[2,1314]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:2059},{325:[1,2061],400:[2,1345],721:2060},{399:[1,2062]},o($V2,$V_3,{447:425,498:545,497:2063,188:$VE3,329:$VF3}),{399:[1,2064]},{208:$V04,282:$V14,305:$VB5,347:$VG5,383:$Va4,384:$Vb4,396:$V24,404:$V75,405:$V85,443:562,469:816,473:817,505:2065,657:806,686:792,688:807,690:559,691:560,692:818},{399:$Vj4,514:2066},o($V78,[2,2316]),o($V78,[2,706]),{208:$V04,282:$V14,305:$VB5,347:$VG5,383:$Va4,384:$Vb4,396:$V24,404:$V75,405:$V85,443:562,469:816,473:817,505:2067,657:806,686:792,688:807,690:559,691:560,692:818},o($V78,[2,1785]),o($V78,[2,1790]),{404:$V75,469:2068},o($VU9,[2,2364],{456:2069,55:[1,2070],221:[1,2071]}),o($VH9,[2,822]),{383:[1,2072]},o($VH9,[2,820]),o($VG9,[2,2149]),{53:$VL8,117:$VM8,118:$VN8,124:$VO8,125:$VP8,129:$VQ8,168:$VR8,175:$VS8,252:$VT8,286:$VU8,290:$VV8,291:$VW8,294:$VX8,298:$VY8,300:$VZ8,306:$V_8,315:$V$8,322:$V09,341:$V19,342:$V29,345:$V39,346:$V49,350:$V59,562:1550,972:2073,981:1551,982:1552,983:1553,984:1554,985:1555,986:1556,987:1557,988:1558},o($VG9,[2,2159]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:1896,996:2074},{53:$VL8,117:$VM8,118:$VN8,124:$VO8,125:$VP8,129:$VQ8,168:$VR8,175:$VS8,252:$VT8,286:$VU8,290:$VV8,291:$VW8,294:$VX8,298:$VY8,300:$VZ8,306:$V_8,315:$V$8,322:$V09,341:$V19,342:$V29,345:$V39,346:$V49,350:$V59,562:1550,972:2075,981:1551,982:1552,983:1553,984:1554,985:1555,986:1556,987:1557,988:1558},o($VG9,[2,2176]),{53:$VL8,117:$VM8,118:$VN8,124:$VO8,125:$VP8,129:$VQ8,168:$VR8,175:$VS8,252:$VT8,286:$VU8,290:$VV8,291:$VW8,294:$VX8,298:$VY8,300:$VZ8,306:$V_8,315:$V$8,322:$V09,341:$V19,342:$V29,345:$V39,346:$V49,350:$V59,562:1550,972:2076,981:1551,982:1552,983:1553,984:1554,985:1555,986:1556,987:1557,988:1558},{316:[2,2296]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,519:1903,524:819,1022:2077},o($V78,[2,2304]),o($Vha,[2,992]),o($Vha,[2,993]),o($Vha,[2,994]),o($Vha,[2,995]),o($V78,[2,1851]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:2078},{400:[2,2194]},o($V2,[2,2062]),o($V5a,[2,2282],{954:2079,840:2080,36:$Vy3}),o($Vba,[2,2249]),{292:[1,2081]},{399:$V37,849:2082},{233:[1,2084],251:$V1a,332:$V2a,786:2083},o($V2,[2,2403]),o($V78,[2,2523]),o($Via,[2,2552],{1101:2085,353:[1,2086]}),o([6,10,39,68,74,116,120,245,275,276,313,336,353,453],[2,2550]),{167:[2,2563]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,519:808,524:819,554:2087,555:962},{404:$V75,469:2088},{279:[1,2090],1068:2089},{388:[1,2091]},o($Vl6,[2,2511]),o($Vja,[2,1041],{611:2092,658:2093,659:[1,2094]}),o($Vca,[2,1032]),{160:[1,2096],208:$V04,282:$V14,383:$Va4,384:$Vb4,396:$V24,443:562,657:2095,690:559,691:560},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:2097,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o($V_9,[2,1004]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,517:2098,519:886,524:819},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,517:2099,519:886,524:819},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,519:2102,524:819,653:2100,655:2101},o([6,10,170,176,243,251,321,332,337,348,400,652,659,949,1182],[2,977],{395:[1,2103]}),o($Vka,[2,980]),o($Vha,$V6a,{665:1131,643:2104,194:$V7a,195:$V8a,234:$Vb7,240:$Vc7,288:$V9a,289:$Vd7,301:$Vaa,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7}),o($V89,[2,1487]),o($V78,$Vla,{158:165,24:169,519:808,524:819,555:962,635:2105,554:2106,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,159:$VV2,160:$VW2,399:$Vma,403:$VX2}),o($Vna,$Vr9,{460:1733,1040:2108,72:$Vs9,244:$Vt9}),{71:[1,2109]},{122:[1,2110]},o($V78,[2,1180]),o($VV9,[2,3039]),{340:[1,2111]},o($VV9,[2,3049]),{349:[1,2112]},o($Voa,$Vpa,{777:2113}),o($Voa,$Vpa,{777:2114}),o($Ve6,[2,1573]),o($Ve6,[2,1586],{395:[1,2115]}),{325:[2,3015]},{167:[2,3026]},o($V78,[2,1316]),{400:[1,2116]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:2117,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{383:[1,2118]},o($V2,[2,3054]),{404:$V75,405:$V85,469:679,473:680,475:2119},o($V2,[2,668]),{52:[1,2120]},o($V78,[2,708]),o($Vna,[2,2380]),{292:[1,2121]},{292:[2,585]},{292:[2,586]},{400:[1,2122]},{390:[1,2123]},o($V4a,[2,2163]),o($V4a,$Vb8,{941:1321,452:1322,937:2124,39:$Vc8,453:$Vd8}),o($V4a,[2,2180]),o($V78,[2,2299]),{180:$VY7,823:2125},o($Vqa,[2,2308],{955:2126,1024:2127,113:[1,2128]}),o($V5a,[2,2283]),{399:$Vj4,514:2129},o($VZ9,[2,2234]),{399:$Vj4,514:2130},{399:$Vj4,514:2131},o($Vra,[2,2556],{1102:2132,68:[1,2133]}),{47:[1,2134]},o($V78,[2,2566]),o($V2,[2,2482]),{246:[1,2136],1069:2135},{388:[1,2137]},{404:$V75,469:2139,1088:2138},o($Vja,[2,915]),o($Vja,[2,1042]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:2140,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o($Vca,[2,1033],{395:[1,2141]}),o($Vca,[2,1035],{395:[1,2142]}),o($Vca,[2,1037],{665:1131,234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7}),o($V_9,[2,1011],{395:$VL7}),o([6,10,243,321,348,400,652,659,949,1182],[2,1015],{395:$VL7}),o($V_9,[2,1019],{395:[1,2143]}),o($Vsa,[2,1022]),o($Vsa,$V6a,{643:2144,194:$V7a,195:$V8a,288:$V9a,301:$Vaa}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:2042,555:793,641:2145,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o($Vka,[2,996],{644:2146,247:[1,2147]}),{395:$Vta,400:[1,2148]},o($V78,[2,953]),o($V78,$Vla,{158:165,24:169,519:808,524:819,555:962,554:2106,635:2150,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,159:$VV2,160:$VW2,399:$Vma,403:$VX2}),o($Vua,[2,2383],{1041:2151,324:[1,2152]}),{122:[1,2153]},{292:[1,2154]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,519:808,524:819,554:961,555:962,1238:2155,1302:959,1304:960},{399:$Vc9,1204:2156,1207:1643,1208:$Vd9},o($Vva,$Vwa,{778:2157,787:2158,788:2159,143:$Vxa,174:$Vya,296:$Vza,383:$VAa,780:$VBa}),o($Vva,$Vwa,{787:2158,788:2159,778:2165,143:$Vxa,174:$Vya,296:$Vza,383:$VAa,780:$VBa}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,524:2166},o($Vy4,[2,1331]),{234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7,400:[2,1346],665:1131},{400:[1,2167]},{400:[1,2168]},{81:[1,2169]},{404:$V75,469:2170},o($VH9,[2,823]),o($VG9,[2,2153]),o($V4a,[2,2169]),{400:[2,2195]},o([6,10,74,120,167,213,245,276,287,353,544,949],$VCa,{464:1381,956:2171,1026:2172,1027:2173,116:$VDa,275:$Vj8,336:$VEa}),o($Vqa,[2,2309]),{292:[1,2176]},o($Vba,[2,2250]),{399:[1,2178],1008:2177},{248:[1,2179]},o($VFa,[2,2558],{1103:2180,313:[1,2181]}),{399:$VY6,815:2182},{95:[1,2183]},o($VGa,[2,2490],{1070:2184,249:[1,2185]}),{388:[1,2186]},{404:$V75,469:2139,1088:2187},{279:[2,2484]},o([6,10,215,226,236,246,249,258,279],[2,2505]),o($Vja,[2,1043],{665:1131,234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7}),{208:$V04,282:$V14,383:$Va4,384:$Vb4,396:$V24,443:562,657:2188,690:559,691:560},{160:[1,2189]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,519:2102,524:819,655:2190},o($Vsa,[2,1028]),o($Vka,[2,981]),o($Vka,[2,987]),{227:[1,2191],242:[1,2192]},o($V67,[2,949]),o($V78,$Vla,{158:165,24:169,519:808,524:819,555:962,554:2106,635:2193,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,159:$VV2,160:$VW2,399:$Vma,403:$VX2}),{395:$Vta,400:[1,2194]},o($Vua,[2,2354]),{48:[1,2195]},{292:[1,2196]},{404:$V75,469:2197},o($VV9,[2,3048],{395:$VQ7}),o($VV9,[2,3050]),{386:$VHa,400:$VIa,779:2198},{330:[1,2200]},{336:[1,2201]},o($VJa,[2,1478]),o($VJa,[2,1479]),{336:[2,1467]},{336:[2,1468]},{336:[2,1469]},{386:$VHa,400:$VIa,779:2202},o($Ve6,[2,1587]),o($VG6,[2,1343]),o($V2,[2,3098]),o($VKa,[2,2221],{1006:2203,97:[1,2204],98:[1,2205]}),o($VU9,[2,2365]),o($VG8,$V$7,{1048:1283,866:2206,353:$V08}),o($VLa,[2,2318]),o($VLa,[2,2319]),{63:[1,2208],228:[1,2209],458:2207},o($V99,$Va9,{292:[1,2210]}),{399:$Vj4,514:2211},o($VZ9,[2,2235]),{329:$VMa,821:$VNa,1011:2212,1013:2213},{208:$V04,282:$V14,383:$Va4,384:$Vb4,396:$V24,443:562,657:2216,690:559,691:560},o([6,10,39,74,120,245,276,453],$VCa,{464:1381,1026:2172,1027:2173,956:2217,116:$VDa,275:$Vj8,336:$VEa}),{193:[1,2218]},o($Vra,[2,2557]),o($Via,[2,2553]),o($VOa,[2,2493],{1071:2219,215:[1,2220]}),{388:[1,2221]},{404:$V75,469:2139,1088:2222},{246:[2,2486]},o($Vca,[2,1034]),o($Vca,[2,1036]),o($Vsa,[2,1023]),o($Vka,[2,997]),o($Vka,[2,998]),o($V78,[2,954]),o($V78,[2,955]),{167:[1,2223]},{404:$V75,469:2224},o($V0a,[2,2370]),{400:[2,1444]},{143:$Vxa,174:$Vya,296:$Vza,383:$VAa,780:$VBa,787:2226,788:2225},o($Vva,[2,1463]),o($Vva,[2,1464]),{400:[2,1445]},o($VKa,[2,2211]),o($VKa,[2,2222]),o($VKa,[2,2223]),o([6,10,120,167,213,276,287,544,949],$VX7,{461:664,537:1262,536:2227,74:$VW4,245:$V$4}),{49:$Vb9,109:[1,2232],220:$V28,868:2230,1028:2228,1033:2229,1035:2231},o($VPa,[2,589]),o($VPa,[2,590]),{404:$V75,405:$V85,469:679,473:680,475:2233},{325:[1,2234]},{395:[1,2236],400:[1,2235]},o($V78,[2,2256]),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,349:[1,2238],354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:2237,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{388:[1,2239]},o($VZ9,[2,2236]),o([6,10,39,120,276,453],$VX7,{461:664,537:1262,536:2240,74:$VW4,245:$V$4}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,403:$VX2,523:2241,524:164},o($VQa,[2,2496],{1072:2242,258:[1,2243]}),{388:[1,2244]},{404:$V75,469:2139,1088:2245},o([6,10,215,226,236,249,258],[2,2488]),{404:$V75,469:2246},o($Vda,[2,2375]),{336:[1,2247]},{307:[1,2248]},o([6,10,167,213,287,544,949],$VRa,{957:2249,1049:2250,466:2251,120:$VZ4,276:$V15}),o($VLa,$Vh8,{1027:1380,464:1381,1029:2252,116:$Vi8,275:$Vj8}),o($Vq9,[2,2347]),o($Vq9,[2,2348]),o($Vq9,[2,2351]),{404:$V75,405:$V85,469:679,473:680,475:2253},o($VLa,[2,2321]),{399:$VF8,841:2254},o($VZ9,[2,2253]),{329:$VMa,821:$VNa,1013:2255},{234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:[1,2257],390:$Vp7,391:[1,2258],392:$Vr7,393:$Vs7,394:$Vt7,665:1131,1015:2256},{389:$VSa,391:$VTa,1015:2259},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:2262,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o([6,10,39,453],$VRa,{1049:2250,466:2251,957:2263,120:$VZ4,276:$V15}),o($VFa,[2,2559]),o($VUa,[2,2499],{1073:2264,226:[1,2265]}),{388:[1,2266]},{404:$V75,469:2139,1088:2267},o($VGa,[2,2491]),o($Vua,[2,2384]),{400:[2,1473]},{400:[2,1474]},o($V18,$Vj9,{542:1704,541:2268,213:$V_4,544:$Vk9}),o($VVa,[2,2394]),{399:$VY6,815:2269},o($VLa,[2,2320]),o($Vq9,[2,2352]),o($Vqa,[2,2310],{203:[1,2270]}),o($V78,[2,2257]),{349:[1,2271]},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,349:$VWa,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1390,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,349:$VXa,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:1392,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:2272,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o($Vt8,$VWa),o($Vt8,$VXa),o($V78,[2,2266],{665:1131,234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7}),o($V2,$Vb8,{941:1321,452:1322,937:2273,39:$Vc8,453:$Vd8}),o($V2,[2,2502],{1074:2274,236:[1,2275]}),{388:[1,2276]},{404:$V75,469:2139,1088:2277},o($VOa,[2,2494]),o($VYa,[2,2398],{958:2278,437:2279,167:$VJ3,287:$VK3}),o($VVa,[2,2395]),o($Vqa,[2,2311]),o($V78,[2,2265],{1015:2280,389:$VSa,391:$VTa}),o($V78,[2,2264],{665:1131,234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7}),o($V2,[2,2532]),o($V2,[2,2434]),{53:$VL8,117:$VM8,124:$VO8,125:$VP8,168:$VR8,175:$VS8,252:$VT8,290:$VV8,291:$VW8,294:$VX8,298:$VY8,300:$VZ8,306:$V_8,315:$V$8,341:$V19,342:$V29,345:$V39,346:$V49,350:$V59,562:2281},{404:$V75,469:2139,1088:2282},o($VQa,[2,2497]),o($VYa,[2,2075]),o($VB4,[2,2402],{1051:2283}),{24:169,25:$VQ,26:$VR,27:$VS,28:$VT,29:$VU,30:$VV,31:$VW,32:$VX,33:$VY,34:$VZ,35:$V_,36:$V$,37:$V01,38:$V11,39:$V21,40:$V31,41:$V41,42:$V51,43:$V61,44:$V71,45:$V81,46:$V91,47:$Va1,48:$Vb1,49:$Vc1,50:$Vd1,51:$Ve1,52:$Vf1,53:$Vg1,54:$Vh1,55:$Vi1,56:$Vj1,57:$Vk1,58:$Vl1,59:$Vm1,60:$Vn1,61:$Vo1,62:$Vp1,63:$Vq1,64:$Vr1,65:$Vs1,66:$Vt1,67:$Vu1,68:$Vv1,69:$Vw1,70:$Vx1,71:$Vy1,72:$Vz1,73:$VA1,74:$VB1,75:$VC1,76:$VD1,77:$VE1,78:$VF1,79:$VG1,80:$VH1,81:$VI1,82:$VJ1,83:$VK1,84:$VL1,85:$VM1,86:$VN1,87:$VO1,88:$VP1,89:$VQ1,90:$VR1,91:$VS1,92:$VT1,93:$VU1,94:$VV1,95:$VW1,96:$VX1,97:$VY1,98:$VZ1,99:$V_1,100:$V$1,101:$V02,102:$V12,103:$V22,104:$V32,105:$V42,106:$V52,107:$V62,108:$V72,109:$V82,110:$V92,111:$Va2,112:$Vb2,113:$Vc2,114:$Vd2,115:$Ve2,116:$Vf2,117:$Vg2,118:$Vh2,119:$Vi2,120:$Vj2,121:$Vk2,122:$Vl2,123:$Vm2,124:$Vn2,125:$Vo2,126:$Vp2,127:$Vq2,128:$Vr2,129:$Vs2,130:$Vt2,131:$Vu2,132:$Vv2,133:$Vw2,134:$Vx2,135:$Vy2,136:$Vz2,137:$VA2,138:$VB2,139:$VC2,140:$VD2,141:$VE2,142:$VF2,143:$VG2,144:$VH2,145:$VI2,146:$VJ2,147:$VK2,148:$VL2,149:$VM2,150:$VN2,151:$VO2,152:$VP2,153:$VQ2,154:$VR2,155:$VS2,156:$VT2,157:$VU2,158:165,159:$VV2,160:$VW2,168:$Vw5,208:$V04,237:$Vx5,282:$V14,286:$Vy5,293:$Vz5,304:$VA5,305:$VB5,312:$VC5,322:$VD5,323:$VE5,324:$VF5,347:$VG5,354:$VH5,355:$VI5,356:$VJ5,357:$VK5,358:$VL5,359:$VM5,360:$VN5,361:$VO5,362:$VP5,363:$VQ5,364:$VR5,365:$VS5,366:$VT5,367:$VU5,368:$VV5,369:$VW5,371:$VX5,372:$VY5,373:$VZ5,374:$V_5,375:$V$5,376:$V06,377:$V16,378:$V26,379:$V36,380:$V46,381:$V56,382:$V66,383:$Va4,384:$Vb4,392:$V76,396:$V24,397:$V86,398:$V96,399:$Va6,403:$VX2,404:$V75,405:$V85,443:562,469:816,473:817,505:786,519:808,524:819,534:2284,555:793,657:806,660:778,675:787,677:788,678:789,679:791,686:792,688:807,690:559,691:560,692:818,742:800,744:801,746:802,747:803,748:804,758:$Vb6,759:$Vc6,760:809,761:810,762:811,789:$Vd6,791:822},o($V2,[2,2503]),o($VUa,[2,2500]),{14:2285,17:515,353:$Vk,571:31,576:$Vr},o($V78,[2,2263],{665:1131,234:$Vb7,240:$Vc7,289:$Vd7,313:$Ve7,317:$Vf7,320:$Vg7,323:$Vh7,333:$Vi7,335:$Vj7,386:$Vl7,387:$Vm7,388:$Vn7,389:$Vo7,390:$Vp7,391:$Vq7,392:$Vr7,393:$Vs7,394:$Vt7}),o($VYa,[2,2399])], +defaultActions: {143:[2,1],326:[2,2806],327:[2,2807],328:[2,2808],329:[2,2809],330:[2,2810],331:[2,2811],348:[2,2724],361:[2,3087],366:[2,3330],367:[2,3332],408:[2,1893],409:[2,1894],502:[2,581],503:[2,582],504:[2,584],505:[2,622],507:[2,635],510:[2,546],511:[2,547],512:[2,575],513:[2,576],530:[2,2997],531:[2,2998],575:[2,2812],582:[2,2886],619:[2,767],665:[2,605],666:[2,606],667:[2,1900],668:[2,1901],670:[2,595],671:[2,596],693:[2,1836],694:[2,1837],761:[2,634],794:[2,1398],795:[2,1399],796:[2,1400],797:[2,1401],798:[2,1402],799:[2,1403],825:[2,1529],826:[2,1530],827:[2,1531],828:[2,1532],829:[2,1533],830:[2,1534],831:[2,1535],832:[2,1536],833:[2,1537],834:[2,1538],835:[2,1539],836:[2,1540],837:[2,1541],838:[2,1542],839:[2,1543],840:[2,1544],841:[2,1545],842:[2,1546],843:[2,1547],844:[2,1548],845:[2,1549],846:[2,1550],847:[2,1551],899:[2,2887],943:[2,1355],944:[2,1357],945:[2,1359],946:[2,1361],947:[2,1363],948:[2,1365],949:[2,1367],950:[2,1369],952:[2,3074],953:[2,3075],956:[2,3089],961:[2,3344],1103:[2,562],1104:[2,563],1105:[2,564],1243:[2,3088],1366:[2,639],1424:[2,1415],1429:[2,1515],1430:[2,1516],1431:[2,1517],1432:[2,1518],1433:[2,1519],1434:[2,1520],1435:[2,1521],1436:[2,1522],1437:[2,1523],1488:[2,3066],1489:[2,3067],1514:[2,2230],1587:[2,1846],1589:[2,1847],1606:[2,2533],1664:[2,1416],1737:[2,607],1738:[2,608],1766:[2,2293],1772:[2,2192],1800:[2,2479],1805:[2,2513],1806:[2,2514],1807:[2,2515],1850:[2,3027],1908:[2,2224],1916:[2,599],1917:[2,600],1960:[2,1438],1961:[2,1443],2006:[2,2296],2015:[2,2194],2026:[2,2563],2057:[2,3015],2058:[2,3026],2070:[2,585],2071:[2,586],2125:[2,2195],2138:[2,2484],2162:[2,1467],2163:[2,1468],2164:[2,1469],2187:[2,2486],2198:[2,1444],2202:[2,1445],2247:[2,1473],2248:[2,1474]}, +parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } +}, +parse: function parse(input) { + var self = this, + stack = [0], + tstack = [], // token stack + vstack = [null], // semantic value stack + lstack = [], // location stack + table = this.table, + yytext = '', + yylineno = 0, + yyleng = 0, + recovering = 0, + TERROR = 2, + EOF = 1; + + var args = lstack.slice.call(arguments, 1); + + //this.reductionCount = this.shiftCount = 0; + + var lexer = Object.create(this.lexer); + var sharedState = { yy: {} }; + // copy state + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + + lexer.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer; + sharedState.yy.parser = this; + if (typeof lexer.yylloc == 'undefined') { + lexer.yylloc = {}; + } + var yyloc = lexer.yylloc; + lstack.push(yyloc); + + var ranges = lexer.options && lexer.options.ranges; + + if (typeof sharedState.yy.parseError === 'function') { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + + function popStack (n) { + stack.length = stack.length - 2 * n; + vstack.length = vstack.length - n; + lstack.length = lstack.length - n; + } + +_token_stack: + var lex = function () { + var token; + token = lexer.lex() || EOF; + // if token isn't its numeric value, convert + if (typeof token !== 'number') { + token = self.symbols_[token] || token; + } + return token; + } + + var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected; + while (true) { + // retreive state number from top of stack + state = stack[stack.length - 1]; + + // use default actions if available + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == 'undefined') { + symbol = lex(); + } + // read action for current state and first input + action = table[state] && table[state][symbol]; + } + +_handle_error: + // handle parse error + if (typeof action === 'undefined' || !action.length || !action[0]) { + var error_rule_depth; + var errStr = ''; + + // Return the rule stack depth where the nearest error rule can be found. + // Return FALSE when no error recovery rule was found. + function locateNearestErrorRecoveryRule(state) { + var stack_probe = stack.length - 1; + var depth = 0; + + // try to recover from error + for(;;) { + // check for error recovery rule in this state + if ((TERROR.toString()) in table[state]) { + return depth; + } + if (state === 0 || stack_probe < 2) { + return false; // No suitable error recovery rule available. + } + stack_probe -= 2; // popStack(1): [symbol, action] + state = stack[stack_probe]; + ++depth; + } + } + + if (!recovering) { + // first see if there's any chance at hitting an error recovery rule: + error_rule_depth = locateNearestErrorRecoveryRule(state); + + // Report error + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'"+this.terminals_[p]+"'"); + } + } + if (lexer.showPosition) { + errStr = 'Parse error on line '+(yylineno+1)+":\n"+lexer.showPosition()+"\nExpecting "+expected.join(', ') + ", got '" + (this.terminals_[symbol] || symbol)+ "'"; + } else { + errStr = 'Parse error on line '+(yylineno+1)+": Unexpected " + + (symbol == EOF ? "end of input" : + ("'"+(this.terminals_[symbol] || symbol)+"'")); + } + this.parseError(errStr, { + text: lexer.match, + token: this.terminals_[symbol] || symbol, + line: lexer.yylineno, + loc: lexer.yylloc, ruleId: stack.slice(stack.length - 2, stack.length).join(), + expected: expected, + recoverable: (error_rule_depth !== false) + }); + } else if (preErrorSymbol !== EOF) { + error_rule_depth = locateNearestErrorRecoveryRule(state); + } + + // just recovered from another error + if (recovering == 3) { + if (symbol === EOF || preErrorSymbol === EOF) { + throw new Error(errStr || 'Parsing halted while starting to recover from another error.'); + } + + // discard current lookahead and grab another + yyleng = lexer.yyleng; + yytext = lexer.yytext; + yylineno = lexer.yylineno; + yyloc = lexer.yylloc; + symbol = lex(); + } + + // try to recover from error + if (error_rule_depth === false) { + throw new Error(errStr || 'Parsing halted. No suitable error recovery rule available.'); + } + popStack(error_rule_depth); + + preErrorSymbol = (symbol == TERROR ? null : symbol); // save the lookahead token + symbol = TERROR; // insert generic error symbol as new lookahead + state = stack[stack.length-1]; + action = table[state] && table[state][TERROR]; + recovering = 3; // allow 3 real symbols to be shifted before reporting a new error + } + + // this shouldn't happen, unless resolve defaults are off + if (action[0] instanceof Array && action.length > 1) { + throw new Error('Parse Error: multiple actions possible at state: '+state+', token: '+symbol); + } + + switch (action[0]) { + case 1: // shift + //this.shiftCount++; + + stack.push(symbol); + vstack.push(lexer.yytext); + lstack.push(lexer.yylloc); + stack.push(action[1]); // push state + symbol = null; + if (!preErrorSymbol) { // normal execution/no error + yyleng = lexer.yyleng; + yytext = lexer.yytext; + yylineno = lexer.yylineno; + yyloc = lexer.yylloc; + if (recovering > 0) { + recovering--; + } + } else { + // error just occurred, resume old lookahead f/ before error + symbol = preErrorSymbol; + preErrorSymbol = null; + } + break; + + case 2: + // reduce + //this.reductionCount++; + + len = this.productions_[action[1]][1]; + + // perform semantic action + yyval.$ = vstack[vstack.length-len]; // default to $$ = $1 + // default location, uses first token for firsts, last for lasts + yyval._$ = { + first_line: lstack[lstack.length-(len||1)].first_line, + last_line: lstack[lstack.length-1].last_line, + first_column: lstack[lstack.length-(len||1)].first_column, + last_column: lstack[lstack.length-1].last_column + }; + if (ranges) { + yyval._$.range = [lstack[lstack.length-(len||1)].range[0], lstack[lstack.length-1].range[1]]; + } + r = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args)); + + if (typeof r !== 'undefined') { + return r; + } + + // pop off stack + if (len) { + stack = stack.slice(0,-1*len*2); + vstack = vstack.slice(0, -1*len); + lstack = lstack.slice(0, -1*len); + } + + stack.push(this.productions_[action[1]][0]); // push nonterminal (reduce) + vstack.push(yyval.$); + lstack.push(yyval._$); + // goto new state = table[STATE][NONTERMINAL] + newState = table[stack[stack.length-2]][stack[stack.length-1]]; + stack.push(newState); + break; + + case 3: + // accept + return true; + } + + } + + return true; +}}; + +SqlParseSupport.initSyntaxParser(parser); +/* generated by jison-lex 0.3.4 */ +var lexer = (function(){ +var lexer = ({ + +EOF:1, + +parseError:function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + +// resets the lexer, sets new input +setInput:function (input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ''; + this.conditionStack = ['INITIAL']; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0,0]; + } + this.offset = 0; + return this; + }, + +// consumes and returns one char from the input +input:function () { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + + this._input = this._input.slice(1); + return ch; + }, + +// unshifts one char (or a string) into the input +unput:function (ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + //this.yyleng -= len; + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? + (lines.length === oldLines.length ? this.yylloc.first_column : 0) + + oldLines[oldLines.length - lines.length].length - lines[0].length : + this.yylloc.first_column - len + }; + + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + +// When called from action, caches matched text and appends it on next action +more:function () { + this._more = true; + return this; + }, + +// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. +reject:function () { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + + } + return this; + }, + +// retain first n characters of the match +less:function (n) { + this.unput(this.match.slice(n)); + }, + +// displays already matched input, i.e. for error messages +pastInput:function () { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, ""); + }, + +// displays upcoming input, i.e. for error messages +upcomingInput:function () { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20-next.length); + } + return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); + }, + +// displays the character position where the lexing error occurred, i.e. for error messages +showPosition:function () { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + +// test the lexed token: return FALSE when not a match, otherwise return token +test_match:function (match, indexed_rule) { + var token, + lines, + backup; + + if (this.options.backtrack_lexer) { + // save context + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? + lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : + this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + // recover context + for (var k in backup) { + this[k] = backup[k]; + } + return false; // rule action called reject() implying the next rule should be tested instead. + } + return false; + }, + +// return next match in input +next:function () { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + + var token, + match, + tempMatch, + index; + if (!this._more) { + this.yytext = ''; + this.match = ''; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; // rule action called reject() implying a rule MISmatch. + } else { + // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + +// return next match that has a token +lex:function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + +// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) +begin:function begin(condition) { + this.conditionStack.push(condition); + }, + +// pop the previously active lexer condition state off the condition stack +popState:function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + +// produce the lexer rule set which is active for the currently active lexer condition state +_currentRules:function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + +// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available +topState:function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + +// alias for begin(condition) +pushState:function pushState(condition) { + this.begin(condition); + }, + +// return the number of states currently on the stack +stateStackSize:function stateStackSize() { + return this.conditionStack.length; + }, +options: {"case-insensitive":true,"flex":true}, +performAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) { +var YYSTATE=YY_START; +switch($avoiding_name_collisions) { +case 0: /* skip whitespace */ +break; +case 1: /* skip comments */ +break; +case 2: /* skip comments */ +break; +case 3: parser.yy.partialCursor = false; parser.yy.cursorFound = yy_.yylloc; return 18; +break; +case 4: parser.yy.partialCursor = true; parser.yy.cursorFound = yy_.yylloc; return 442; +break; +case 5: return 166; +break; +case 6: return 286; +break; +case 7: return 167; +break; +case 8: return 163; +break; +case 9: return 168; +break; +case 10: return 169; +break; +case 11: return 848; +break; +case 12: return 171; +break; +case 13: return 172; +break; +case 14: parser.determineCase(yy_.yytext); return 440; +break; +case 15: return 173; +break; +case 16: return 174; +break; +case 17: return 175; +break; +case 18: parser.determineCase(yy_.yytext); return 1158; +break; +case 19: parser.determineCase(yy_.yytext); return 569; +break; +case 20: return 164; +break; +case 21: return 178; +break; +case 22: return 179; +break; +case 23: return 180; +break; +case 24: return 181; +break; +case 25: return 182; +break; +case 26: return 183; +break; +case 27: parser.determineCase(yy_.yytext); return 1246; +break; +case 28: parser.determineCase(yy_.yytext); return 1182; +break; +case 29: return 184; +break; +case 30: return 185; +break; +case 31: return 187; +break; +case 32: return 322; +break; +case 33: return 199; +break; +case 34: return 200; +break; +case 35: return 201; +break; +case 36: return 189; +break; +case 37: return 190; +break; +case 38: return 1185; +break; +case 39: return 191; +break; +case 40: return 193; +break; +case 41: return 124; +break; +case 42: return 131; +break; +case 43: return 205; +break; +case 44: return 206; +break; +case 45: return 949; +break; +case 46: parser.determineCase(yy_.yytext); return 25; +break; +case 47: return 26; +break; +case 48: return 27; +break; +case 49: return 28; +break; +case 50: parser.determineCase(yy_.yytext); return 29; +break; +case 51: return 30; +break; +case 52: return 194; +break; +case 53: return 31; +break; +case 54: return 32; +break; +case 55: return 33; +break; +case 56: return 34; +break; +case 57: return 35; +break; +case 58: return 170; +break; +case 59: return 36; +break; +case 60: return 37; +break; +case 61: return 38; +break; +case 62: return 39; +break; +case 63: return 40; +break; +case 64: return 41; +break; +case 65: return 42; +break; +case 66: return 43; +break; +case 67: return 44; +break; +case 68: return 45; +break; +case 69: return 134; +break; +case 70: return 370; +break; +case 71: return 46; +break; +case 72: return 47; +break; +case 73: return 48; +break; +case 74: return 49; +break; +case 75: return 50; +break; +case 76: return 195; +break; +case 77: this.begin('hdfs'); return 51; +break; +case 78: return 52; +break; +case 79: return 176; +break; +case 80: return 53; +break; +case 81: return 55; +break; +case 82: return 54; +break; +case 83: return 56; +break; +case 84: parser.determineCase(yy_.yytext); return 57; +break; +case 85: parser.determineCase(yy_.yytext); return 58; +break; +case 86: return 59; +break; +case 87: return 60; +break; +case 88: return 61; +break; +case 89: return 62; +break; +case 90: return 63; +break; +case 91: return 196; +break; +case 92: return 181; +break; +case 93: return 64; +break; +case 94: return 135; +break; +case 95: return 68; +break; +case 96: return 197; +break; +case 97: return 198; +break; +case 98: this.begin('hdfs'); return 65; +break; +case 99: return 66; +break; +case 100: return 69; +break; +case 101: return 67; +break; +case 102: return 70; +break; +case 103: return 71; +break; +case 104: return 72; +break; +case 105: parser.determineCase(yy_.yytext); return 73; +break; +case 106: this.begin('hdfs'); return 74; +break; +case 107: return 186; +break; +case 108: return 75; +break; +case 109: return 76; +break; +case 110: return 78; +break; +case 111: return 77; +break; +case 112: return 136; +break; +case 113: return 137; +break; +case 114: return 79; +break; +case 115: return 98; +break; +case 116: return 80; +break; +case 117: return 81; +break; +case 118: return 82; +break; +case 119: return 83; +break; +case 120: return 84; +break; +case 121: return 85; +break; +case 122: return 86; +break; +case 123: this.begin('hdfs'); return 1199; +break; +case 124: return 87; +break; +case 125: return 88; +break; +case 126: return 89; +break; +case 127: return 90; +break; +case 128: return 91; +break; +case 129: return 92; +break; +case 130: return 93; +break; +case 131: return 138; +break; +case 132: return 94; +break; +case 133: return 95; +break; +case 134: parser.determineCase(yy_.yytext); return 96; +break; +case 135: return 97; +break; +case 136: return 99; +break; +case 137: return 100; +break; +case 138: return 101; +break; +case 139: return 102; +break; +case 140: return 103; +break; +case 141: return 104; +break; +case 142: return 105; +break; +case 143: return 106; +break; +case 144: return 139; +break; +case 145: return 202; +break; +case 146: return 107; +break; +case 147: return 108; +break; +case 148: return 109; +break; +case 149: return 110; +break; +case 150: return 111; +break; +case 151: parser.determineCase(yy_.yytext); return 112; +break; +case 152: return 192; +break; +case 153: return 113; +break; +case 154: return 845; +break; +case 155: return 652; +break; +case 156: return 114; +break; +case 157: return 115; +break; +case 158: return 116; +break; +case 159: return 203; +break; +case 160: return 117; +break; +case 161: return 118; +break; +case 162: return 119; +break; +case 163: return 204; +break; +case 164: return 120; +break; +case 165: return 121; +break; +case 166: return 122; +break; +case 167: return 123; +break; +case 168: return 125; +break; +case 169: return 126; +break; +case 170: return 127; +break; +case 171: return 128; +break; +case 172: return 129; +break; +case 173: parser.determineCase(yy_.yytext); return 130; +break; +case 174: return 132; +break; +case 175: return 133; +break; +case 176: return 140; +break; +case 177: return 207; +break; +case 178: return 141; +break; +case 179: return 208; +break; +case 180: return 209; +break; +case 181: return 210; +break; +case 182: return 897; +break; +case 183: return 211; +break; +case 184: return 212; +break; +case 185: return 213; +break; +case 186: return 214; +break; +case 187: return 895; +break; +case 188: return 215; +break; +case 189: return 216; +break; +case 190: return 887; +break; +case 191: parser.determineCase(yy_.yytext); return 453; +break; +case 192: parser.determineCase(yy_.yytext); return 922; +break; +case 193: parser.determineCase(yy_.yytext); parser.addStatementTypeLocation('CREATE', yy_.yylloc, yy.lexer.upcomingInput()); return 441; +break; +case 194: return 217; +break; +case 195: return 218; +break; +case 196: return 219; +break; +case 197: return 220; +break; +case 198: parser.determineCase(yy_.yytext); parser.addStatementTypeLocation('DESCRIBE', yy_.yylloc); return 570; +break; +case 199: return 221; +break; +case 200: parser.determineCase(yy_.yytext); parser.addStatementTypeLocation('EXPLAIN', yy_.yylloc); return 162; +break; +case 201: return 223; +break; +case 202: return 222; +break; +case 203: return 224; +break; +case 204: return 896; +break; +case 205: return 225; +break; +case 206: return 226; +break; +case 207: return 227; +break; +case 208: return 228; +break; +case 209: return 229; +break; +case 210: return 230; +break; +case 211: return 231; +break; +case 212: return 232; +break; +case 213: return 233; +break; +case 214: return 234; +break; +case 215: return 235; +break; +case 216: parser.determineCase(yy_.yytext); parser.addStatementTypeLocation('INSERT', yy_.yylloc); return 1184; +break; +case 217: return 237; +break; +case 218: return 236; +break; +case 219: return 238; +break; +case 220: parser.determineCase(yy_.yytext); parser.addStatementTypeLocation('INVALIDATE', yy_.yylloc, yy.lexer.upcomingInput()); return 920; +break; +case 221: this.begin('hdfs'); return 239; +break; +case 222: return 240; +break; +case 223: return 155; +break; +case 224: return 241; +break; +case 225: return 242; +break; +case 226: this.begin('hdfs'); return 967; +break; +case 227: return 243; +break; +case 228: return 244; +break; +case 229: parser.determineCase(yy_.yytext); parser.addStatementTypeLocation('LOAD', yy_.yylloc, yy.lexer.upcomingInput()); return 1245; +break; +case 230: this.begin('hdfs'); return 245; +break; +case 231: return 246; +break; +case 232: return 921; +break; +case 233: return 247; +break; +case 234: return 659; +break; +case 235: return 1032; +break; +case 236: return 1223; +break; +case 237: return 269; +break; +case 238: return 270; +break; +case 239: return 248; +break; +case 240: return 249; +break; +case 241: return 250; +break; +case 242: return 271; +break; +case 243: return 251; +break; +case 244: return 252; +break; +case 245: parser.determineCase(yy_.yytext); parser.addStatementTypeLocation('REFRESH', yy_.yylloc); return 919; +break; +case 246: return 899; +break; +case 247: return 253; +break; +case 248: return 758; +break; +case 249: return 254; +break; +case 250: return 255; +break; +case 251: return 256; +break; +case 252: parser.determineCase(yy_.yytext); parser.addStatementTypeLocation('REVOKE', yy_.yylloc); return 1187; +break; +case 253: return 272; +break; +case 254: return 273; +break; +case 255: return 257; +break; +case 256: return 258; +break; +case 257: return 149; +break; +case 258: return 259; +break; +case 259: return 260; +break; +case 260: return 275; +break; +case 261: return 261; +break; +case 262: return 262; +break; +case 263: return 263; +break; +case 264: return 264; +break; +case 265: return 265; +break; +case 266: return 276; +break; +case 267: return 277; +break; +case 268: return 278; +break; +case 269: return 544; +break; +case 270: return 279; +break; +case 271: parser.determineCase(yy_.yytext); parser.addStatementTypeLocation('UPSERT', yy_.yylloc); return 1220; +break; +case 272: return 148; +break; +case 273: return 266; +break; +case 274: return 821; +break; +case 275: return 142; +break; +case 276: return 267; +break; +case 277: return 286; +break; +case 278: return 151; +break; +case 279: return 152; +break; +case 280: return 143; +break; +case 281: return 153; +break; +case 282: return 154; +break; +case 283: return 144; +break; +case 284: return 322; +break; +case 285: return 145; +break; +case 286: return 146; +break; +case 287: return 147; +break; +case 288: return 118; +break; +case 289: return 150; +break; +case 290: return 280; +break; +case 291: return 268; +break; +case 292: return 274; +break; +case 293: return 281; +break; +case 294: return 282; +break; +case 295: return 283; +break; +case 296: return 284; +break; +case 297: this.popState(); return 664; +break; +case 298: return 285; +break; +case 299: parser.determineCase(yy_.yytext); parser.addStatementTypeLocation('ALTER', yy_.yylloc, yy.lexer.upcomingInput()); return 814; +break; +case 300: return 386; +break; +case 301: return 287; +break; +case 302: return 288; +break; +case 303: this.begin('between'); return 289; +break; +case 304: return 290; +break; +case 305: return 291; +break; +case 306: return 292; +break; +case 307: return 293; +break; +case 308: return 294; +break; +case 309: parser.determineCase(yy_.yytext); return 439; +break; +case 310: return 295; +break; +case 311: return 296; +break; +case 312: return 297; +break; +case 313: return 298; +break; +case 314: return 299; +break; +case 315: return 394; +break; +case 316: return 300; +break; +case 317: return 301; +break; +case 318: parser.determineCase(yy_.yytext); parser.addStatementTypeLocation('DROP', yy_.yylloc, yy.lexer.upcomingInput()); return 857; +break; +case 319: return 302; +break; +case 320: return 303; +break; +case 321: parser.yy.correlatedSubQuery = true; return 304; +break; +case 322: return 305; +break; +case 323: return 306; +break; +case 324: return 307; +break; +case 325: parser.determineCase(yy_.yytext); return 308; +break; +case 326: return 309; +break; +case 327: return 310; +break; +case 328: return 311; +break; +case 329: return 312; +break; +case 330: return 313; +break; +case 331: return 314; +break; +case 332: return 1205; +break; +case 333: return 315; +break; +case 334: return 316; +break; +case 335: return 317; +break; +case 336: return 318; +break; +case 337: return 319; +break; +case 338: return 320; +break; +case 339: return 321; +break; +case 340: return 323; +break; +case 341: return 324; +break; +case 342: return 325; +break; +case 343: return 157; +break; +case 344: return 387; +break; +case 345: return 326; +break; +case 346: return 327; +break; +case 347: return 329; +break; +case 348: return 330; +break; +case 349: return 331; +break; +case 350: return 332; +break; +case 351: return 333; +break; +case 352: return 334; +break; +case 353: return 335; +break; +case 354: return 336; +break; +case 355: return 337; +break; +case 356: return 338; +break; +case 357: parser.determineCase(yy_.yytext); parser.addStatementTypeLocation('SELECT', yy_.yylloc); return 576; +break; +case 358: return 339; +break; +case 359: parser.determineCase(yy_.yytext); parser.addStatementTypeLocation('SET', yy_.yylloc); return 340; +break; +case 360: parser.determineCase(yy_.yytext); parser.addStatementTypeLocation('SHOW', yy_.yylloc); return 1272; +break; +case 361: return 341; +break; +case 362: return 342; +break; +case 363: return 343; +break; +case 364: return 344; +break; +case 365: return 345; +break; +case 366: return 346; +break; +case 367: return 825; +break; +case 368: return 347; +break; +case 369: parser.determineCase(yy_.yytext); parser.addStatementTypeLocation('TRUNCATE', yy_.yylloc, yy.lexer.upcomingInput()); return 759; +break; +case 370: return 780; +break; +case 371: parser.determineCase(yy_.yytext); return 1183; +break; +case 372: parser.determineCase(yy_.yytext); parser.addStatementTypeLocation('USE', yy_.yylloc); return 1308; +break; +case 373: return 348; +break; +case 374: return 1093; +break; +case 375: return 350; +break; +case 376: return 349; +break; +case 377: return 351; +break; +case 378: return 352; +break; +case 379: parser.determineCase(yy_.yytext); parser.addStatementTypeLocation('WITH', yy_.yylloc); return 353; +break; +case 380: return 328; +break; +case 381: return 156; +break; +case 382: yy.lexer.unput('('); yy_.yytext = 'avg'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 354; +break; +case 383: yy.lexer.unput('('); yy_.yytext = 'cast'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 355; +break; +case 384: yy.lexer.unput('('); yy_.yytext = 'count'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 356; +break; +case 385: yy.lexer.unput('('); yy_.yytext = 'max'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 357; +break; +case 386: yy.lexer.unput('('); yy_.yytext = 'min'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 358; +break; +case 387: yy.lexer.unput('('); yy_.yytext = 'stddev_pop'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 359; +break; +case 388: yy.lexer.unput('('); yy_.yytext = 'stddev_samp'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 360; +break; +case 389: yy.lexer.unput('('); yy_.yytext = 'sum'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 361; +break; +case 390: yy.lexer.unput('('); yy_.yytext = 'variance'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 362; +break; +case 391: yy.lexer.unput('('); yy_.yytext = 'var_pop'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 363; +break; +case 392: yy.lexer.unput('('); yy_.yytext = 'var_samp'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 364; +break; +case 393: yy.lexer.unput('('); yy_.yytext = 'collect_set'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 365; +break; +case 394: yy.lexer.unput('('); yy_.yytext = 'collect_list'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 366; +break; +case 395: yy.lexer.unput('('); yy_.yytext = 'corr'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 367; +break; +case 396: yy.lexer.unput('('); yy_.yytext = 'covar_pop'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 368; +break; +case 397: yy.lexer.unput('('); yy_.yytext = 'covar_samp'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 369; +break; +case 398: yy.lexer.unput('('); yy_.yytext = 'extract'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 789; +break; +case 399: yy.lexer.unput('('); yy_.yytext = 'histogram_numeric'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 371; +break; +case 400: yy.lexer.unput('('); yy_.yytext = 'ntile'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 372; +break; +case 401: yy.lexer.unput('('); yy_.yytext = 'percentile'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 373; +break; +case 402: yy.lexer.unput('('); yy_.yytext = 'percentile_approx'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 374; +break; +case 403: yy.lexer.unput('('); yy_.yytext = 'appx_median'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 375; +break; +case 404: yy.lexer.unput('('); yy_.yytext = 'extract'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 376; +break; +case 405: yy.lexer.unput('('); yy_.yytext = 'group_concat'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 377; +break; +case 406: yy.lexer.unput('('); yy_.yytext = 'ndv'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 378; +break; +case 407: yy.lexer.unput('('); yy_.yytext = 'stddev'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 379; +break; +case 408: yy.lexer.unput('('); yy_.yytext = 'variance_pop'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 380; +break; +case 409: yy.lexer.unput('('); yy_.yytext = 'variance_samp'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 381; +break; +case 410: yy.lexer.unput('('); yy_.yytext = 'cume_dist'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 382; +break; +case 411: yy.lexer.unput('('); yy_.yytext = 'dense_rank'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 382; +break; +case 412: yy.lexer.unput('('); yy_.yytext = 'first_value'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 382; +break; +case 413: yy.lexer.unput('('); yy_.yytext = 'lag'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 382; +break; +case 414: yy.lexer.unput('('); yy_.yytext = 'last_value'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 382; +break; +case 415: yy.lexer.unput('('); yy_.yytext = 'lead'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 382; +break; +case 416: yy.lexer.unput('('); yy_.yytext = 'rank'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 382; +break; +case 417: yy.lexer.unput('('); yy_.yytext = 'row_number'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 382; +break; +case 418: yy.lexer.unput('('); yy_.yytext = 'cume_dist'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 382; +break; +case 419: yy.lexer.unput('('); yy_.yytext = 'percent_rank'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 382; +break; +case 420: yy.lexer.unput('('); yy_.yytext = 'ntile'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 382; +break; +case 421: yy.lexer.unput('('); yy_.yytext = 'percent_rank'; parser.addFunctionLocation(yy_.yylloc, yy_.yytext); return 382; +break; +case 422: yy.lexer.unput('('); yy_.yytext = 'system'; return 723; +break; +case 423: return 383; +break; +case 424: return 383; +break; +case 425: return 384; +break; +case 426: return 159; +break; +case 427: parser.yy.cursorFound = true; return 18; +break; +case 428: parser.yy.cursorFound = true; return 442; +break; +case 429: return 385; +break; +case 430: parser.addFileLocation(yy_.yylloc, yy_.yytext); return 784; +break; +case 431: this.popState(); return 785; +break; +case 432: return 6; +break; +case 433: return 386; +break; +case 434: return 387; +break; +case 435: return 388; +break; +case 436: return 389; +break; +case 437: return 390; +break; +case 438: return 391; +break; +case 439: return 391; +break; +case 440: return 391; +break; +case 441: return 391; +break; +case 442: return 391; +break; +case 443: return 392; +break; +case 444: return 393; +break; +case 445: return 394; +break; +case 446: return 394; +break; +case 447: return 394; +break; +case 448: return 394; +break; +case 449: return 394; +break; +case 450: return 394; +break; +case 451: return 395; +break; +case 452: return 396; +break; +case 453: return 998; +break; +case 454: return 10; +break; +case 455: return 397; +break; +case 456: return 398; +break; +case 457: return 399; +break; +case 458: return 400; +break; +case 459: return 401; +break; +case 460: return 402; +break; +case 461: return 160; +break; +case 462: this.begin('backtickedValue'); return 403; +break; +case 463: + if (parser.handleQuotedValueWithCursor(this, yy_.yytext, yy_.yylloc, '`')) { + return 472; + } + return 470; + +break; +case 464: this.popState(); return 403; +break; +case 465: this.begin('singleQuotedValue'); return 404; +break; +case 466: + if (parser.handleQuotedValueWithCursor(this, yy_.yytext, yy_.yylloc, '\'')) { + return 472; + } + return 470; + +break; +case 467: this.popState(); return 404; +break; +case 468: this.begin('doubleQuotedValue'); return 405; +break; +case 469: + if (parser.handleQuotedValueWithCursor(this, yy_.yytext, yy_.yylloc, '"')) { + return 472; + } + return 470; + +break; +case 470: this.popState(); return 405; +break; +case 471: return 6; +break; +case 472: /* To prevent console logging of unknown chars */ +break; +case 473: +break; +case 474: +break; +case 475: +break; +case 476: +break; +case 477: +break; +case 478: +break; +case 479: +break; +case 480:console.log(yy_.yytext); +break; +} +}, +rules: [/^(?:\s)/i,/^(?:--.*)/i,/^(?:[\/][*][^*]*[*]+([^\/*][^*]*[*]+)*[\/])/i,/^(?:\u2020)/i,/^(?:\u2021)/i,/^(?:ALL)/i,/^(?:ARRAY)/i,/^(?:AS)/i,/^(?:AUTHORIZATION)/i,/^(?:BINARY)/i,/^(?:CACHE)/i,/^(?:COLUMN)/i,/^(?:CONF)/i,/^(?:CONSTRAINT)/i,/^(?:CREATE)/i,/^(?:CUBE)/i,/^(?:CURRENT)/i,/^(?:DATE)/i,/^(?:DELETE)/i,/^(?:DESCRIBE)/i,/^(?:EXTENDED)/i,/^(?:EXTERNAL)/i,/^(?:FOR)/i,/^(?:FOREIGN)/i,/^(?:FUNCTION)/i,/^(?:GRANT)/i,/^(?:GROUPING)/i,/^(?:IMPORT)/i,/^(?:INSERT)/i,/^(?:LATERAL)/i,/^(?:LOCAL)/i,/^(?:MACRO)/i,/^(?:MAP)/i,/^(?:NONE)/i,/^(?:OF)/i,/^(?:OUT)/i,/^(?:PRIMARY)/i,/^(?:REFERENCES)/i,/^(?:REVOKE)/i,/^(?:ROLLUP)/i,/^(?:TABLE)/i,/^(?:TIMESTAMP)/i,/^(?:USER)/i,/^(?:USING)/i,/^(?:VIEWS)/i,/^(?:LIFECYCLE)/i,/^(?:ABORT)/i,/^(?:ADD)/i,/^(?:ADMIN)/i,/^(?:AFTER)/i,/^(?:ANALYZE)/i,/^(?:ARCHIVE)/i,/^(?:ASC)/i,/^(?:AVRO)/i,/^(?:BUCKET)/i,/^(?:BUCKETS)/i,/^(?:CASCADE)/i,/^(?:CHANGE)/i,/^(?:CLUSTER)/i,/^(?:CLUSTERED)/i,/^(?:COLLECTION)/i,/^(?:COLUMNS)/i,/^(?:COMMENT)/i,/^(?:COMPACT)/i,/^(?:COMPACTIONS)/i,/^(?:COMPUTE)/i,/^(?:CONCATENATE)/i,/^(?:DATA)/i,/^(?:DATABASES)/i,/^(?:DAY)/i,/^(?:DAYOFWEEK)/i,/^(?:DBPROPERTIES)/i,/^(?:DEFERRED)/i,/^(?:DEFINED)/i,/^(?:DELIMITED)/i,/^(?:DEPENDENCY)/i,/^(?:DESC)/i,/^(?:DIRECTORY)/i,/^(?:DISABLE)/i,/^(?:DISTRIBUTE)/i,/^(?:DOUBLE\s+PRECISION)/i,/^(?:ESCAPED)/i,/^(?:ENABLE)/i,/^(?:EXCHANGE)/i,/^(?:EXPLAIN)/i,/^(?:EXPORT)/i,/^(?:FIELDS)/i,/^(?:FILE)/i,/^(?:FILEFORMAT)/i,/^(?:FIRST)/i,/^(?:FORMAT)/i,/^(?:FORMATTED)/i,/^(?:FUNCTION)/i,/^(?:FUNCTIONS)/i,/^(?:HOUR)/i,/^(?:IDXPROPERTIES)/i,/^(?:INDEX)/i,/^(?:INDEXES)/i,/^(?:INPATH)/i,/^(?:INPUTFORMAT)/i,/^(?:ITEMS)/i,/^(?:JAR)/i,/^(?:KEY)/i,/^(?:KEYS)/i,/^(?:LINES)/i,/^(?:LOAD)/i,/^(?:LOCATION)/i,/^(?:LOCK)/i,/^(?:LOCKS)/i,/^(?:MATCHED)/i,/^(?:MERGE)/i,/^(?:METADATA)/i,/^(?:MINUTE)/i,/^(?:MONTH)/i,/^(?:MSCK)/i,/^(?:NORELY)/i,/^(?:NOSCAN)/i,/^(?:NOVALIDATE)/i,/^(?:NO_DROP)/i,/^(?:OFFLINE)/i,/^(?:ORC)/i,/^(?:OUTPUTFORMAT)/i,/^(?:OVERWRITE)/i,/^(?:OVERWRITE\s+DIRECTORY)/i,/^(?:OWNER)/i,/^(?:PARQUET)/i,/^(?:PARTITIONED)/i,/^(?:PARTITIONS)/i,/^(?:PERCENT)/i,/^(?:PRIVILEGES)/i,/^(?:PURGE)/i,/^(?:QUARTER)/i,/^(?:RCFILE)/i,/^(?:REBUILD)/i,/^(?:RELOAD)/i,/^(?:RELY)/i,/^(?:REPAIR)/i,/^(?:REPLICATION)/i,/^(?:RECOVER)/i,/^(?:RENAME)/i,/^(?:REPLACE)/i,/^(?:RESTRICT)/i,/^(?:ROLE)/i,/^(?:ROLES)/i,/^(?:SECOND)/i,/^(?:SCHEMA)/i,/^(?:SCHEMAS)/i,/^(?:SEQUENCEFILE)/i,/^(?:SERDE)/i,/^(?:SERDEPROPERTIES)/i,/^(?:SETS)/i,/^(?:SHOW)/i,/^(?:SHOW_DATABASE)/i,/^(?:SKEWED)/i,/^(?:SKEWED LOCATION)/i,/^(?:SORT)/i,/^(?:SORTED)/i,/^(?:STATISTICS)/i,/^(?:STORED)/i,/^(?:STORED\s+AS\s+DIRECTORIES)/i,/^(?:STRING)/i,/^(?:STRUCT)/i,/^(?:TABLES)/i,/^(?:TABLESAMPLE)/i,/^(?:TBLPROPERTIES)/i,/^(?:TEMPORARY)/i,/^(?:TERMINATED)/i,/^(?:TEXTFILE)/i,/^(?:TINYINT)/i,/^(?:TOUCH)/i,/^(?:TRANSACTIONS)/i,/^(?:UNARCHIVE)/i,/^(?:UNIONTYPE)/i,/^(?:USE)/i,/^(?:VIEW)/i,/^(?:WAIT)/i,/^(?:WEEK)/i,/^(?:WINDOW)/i,/^(?:YEAR)/i,/^(?:\.)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:ADD)/i,/^(?:AGGREGATE)/i,/^(?:AVRO)/i,/^(?:CACHED)/i,/^(?:CASCADE)/i,/^(?:CHANGE)/i,/^(?:CLOSE_FN)/i,/^(?:COLUMN)/i,/^(?:COLUMNS)/i,/^(?:COMMENT)/i,/^(?:COMPUTE)/i,/^(?:CREATE)/i,/^(?:DATA)/i,/^(?:DATABASES)/i,/^(?:DELETE)/i,/^(?:DELIMITED)/i,/^(?:DESCRIBE)/i,/^(?:ESCAPED)/i,/^(?:EXPLAIN)/i,/^(?:EXTERNAL)/i,/^(?:EXTENDED)/i,/^(?:FIELDS)/i,/^(?:FILEFORMAT)/i,/^(?:FILES)/i,/^(?:FINALIZE_FN)/i,/^(?:FIRST)/i,/^(?:FORMAT)/i,/^(?:FORMATTED)/i,/^(?:FUNCTION)/i,/^(?:FUNCTIONS)/i,/^(?:GROUP)/i,/^(?:HASH)/i,/^(?:ILIKE)/i,/^(?:INCREMENTAL)/i,/^(?:INSERT)/i,/^(?:INTERVAL)/i,/^(?:INTERMEDIATE)/i,/^(?:INIT_FN)/i,/^(?:INVALIDATE)/i,/^(?:INPATH)/i,/^(?:IREGEXP)/i,/^(?:KEY)/i,/^(?:KUDU)/i,/^(?:LAST)/i,/^(?:LIKE\s+PARQUET)/i,/^(?:LIMIT)/i,/^(?:LINES)/i,/^(?:LOAD)/i,/^(?:LOCATION)/i,/^(?:MERGE_FN)/i,/^(?:METADATA)/i,/^(?:NULLS)/i,/^(?:OFFSET)/i,/^(?:ORC)/i,/^(?:OVERWRITE)/i,/^(?:PARQUET)/i,/^(?:PARTITIONED)/i,/^(?:PARTITIONS)/i,/^(?:PREPARE_FN)/i,/^(?:PRIMARY)/i,/^(?:RCFILE)/i,/^(?:RANGE)/i,/^(?:REAL)/i,/^(?:REFRESH)/i,/^(?:RENAME)/i,/^(?:REPEATABLE)/i,/^(?:REPLACE)/i,/^(?:REPLICATION)/i,/^(?:RESTRICT)/i,/^(?:RETURNS)/i,/^(?:REVOKE)/i,/^(?:SEQUENCEFILE)/i,/^(?:SERDEPROPERTIES)/i,/^(?:SCHEMAS)/i,/^(?:SERIALIZE_FN)/i,/^(?:SERVER)/i,/^(?:SORT)/i,/^(?:STATS)/i,/^(?:STORED)/i,/^(?:STRAIGHT_JOIN)/i,/^(?:SYMBOL)/i,/^(?:TABLE)/i,/^(?:TABLES)/i,/^(?:TABLESAMPLE)/i,/^(?:TBLPROPERTIES)/i,/^(?:TERMINATED)/i,/^(?:TEXTFILE)/i,/^(?:UNCACHED)/i,/^(?:UPDATE_FN)/i,/^(?:UPSERT)/i,/^(?:URI)/i,/^(?:USING)/i,/^(?:PARTITION\s+VALUE\s)/i,/^(?:ANALYTIC)/i,/^(?:ANTI)/i,/^(?:ARRAY)/i,/^(?:BLOCK_SIZE)/i,/^(?:COMPRESSION)/i,/^(?:CURRENT)/i,/^(?:DEFAULT)/i,/^(?:ENCODING)/i,/^(?:GRANT)/i,/^(?:MAP)/i,/^(?:RECOVER)/i,/^(?:ROLE)/i,/^(?:ROLES)/i,/^(?:STRUCT)/i,/^(?:UNKNOWN)/i,/^(?:\[BROADCAST\])/i,/^(?:\[NOSHUFFLE\])/i,/^(?:\[SHUFFLE\])/i,/^(?:\.\.\.)/i,/^(?:\.)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:AND)/i,/^(?:ALL)/i,/^(?:ALTER)/i,/^(?:AND)/i,/^(?:AS)/i,/^(?:ASC)/i,/^(?:BETWEEN)/i,/^(?:BIGINT)/i,/^(?:BOOLEAN)/i,/^(?:BY)/i,/^(?:CASE)/i,/^(?:CHAR)/i,/^(?:CREATE)/i,/^(?:CROSS)/i,/^(?:CURRENT)/i,/^(?:DATABASE)/i,/^(?:DECIMAL)/i,/^(?:DISTINCT)/i,/^(?:DIV)/i,/^(?:DOUBLE)/i,/^(?:DESC)/i,/^(?:DROP)/i,/^(?:ELSE)/i,/^(?:END)/i,/^(?:EXISTS)/i,/^(?:FALSE)/i,/^(?:FLOAT)/i,/^(?:FOLLOWING)/i,/^(?:FROM)/i,/^(?:FULL)/i,/^(?:GROUP)/i,/^(?:HAVING)/i,/^(?:IF)/i,/^(?:IN)/i,/^(?:INNER)/i,/^(?:INSERT)/i,/^(?:INT)/i,/^(?:INTO)/i,/^(?:IS)/i,/^(?:JOIN)/i,/^(?:LEFT)/i,/^(?:LIKE)/i,/^(?:LIMIT)/i,/^(?:NOT)/i,/^(?:NULL)/i,/^(?:ON)/i,/^(?:OPTION)/i,/^(?:OR)/i,/^(?:ORDER)/i,/^(?:OUTER)/i,/^(?:PARTITION)/i,/^(?:PRECEDING)/i,/^(?:PURGE)/i,/^(?:RANGE)/i,/^(?:REGEXP)/i,/^(?:RIGHT)/i,/^(?:RLIKE)/i,/^(?:ROW)/i,/^(?:ROWS)/i,/^(?:SCHEMA)/i,/^(?:SELECT)/i,/^(?:SEMI)/i,/^(?:SET)/i,/^(?:SHOW)/i,/^(?:SMALLINT)/i,/^(?:STRING)/i,/^(?:TABLE)/i,/^(?:THEN)/i,/^(?:TIMESTAMP)/i,/^(?:TINYINT)/i,/^(?:TO)/i,/^(?:TRUE)/i,/^(?:TRUNCATE)/i,/^(?:UNBOUNDED)/i,/^(?:UPDATE)/i,/^(?:USE)/i,/^(?:UNION)/i,/^(?:VIEW)/i,/^(?:VARCHAR)/i,/^(?:VALUES)/i,/^(?:WHEN)/i,/^(?:WHERE)/i,/^(?:WITH)/i,/^(?:OVER)/i,/^(?:ROLE)/i,/^(?:AVG\s*\()/i,/^(?:CAST\s*\()/i,/^(?:COUNT\s*\()/i,/^(?:MAX\s*\()/i,/^(?:MIN\s*\()/i,/^(?:STDDEV_POP\s*\()/i,/^(?:STDDEV_SAMP\s*\()/i,/^(?:SUM\s*\()/i,/^(?:VARIANCE\s*\()/i,/^(?:VAR_POP\s*\()/i,/^(?:VAR_SAMP\s*\()/i,/^(?:COLLECT_SET\s*\()/i,/^(?:COLLECT_LIST\s*\()/i,/^(?:CORR\s*\()/i,/^(?:COVAR_POP\s*\()/i,/^(?:COVAR_SAMP\s*\()/i,/^(?:EXTRACT\s*\()/i,/^(?:HISTOGRAM_NUMERIC\s*\()/i,/^(?:NTILE\s*\()/i,/^(?:PERCENTILE\s*\()/i,/^(?:PERCENTILE_APPROX\s*\()/i,/^(?:APPX_MEDIAN\s*\()/i,/^(?:EXTRACT\s*\()/i,/^(?:GROUP_CONCAT\s*\()/i,/^(?:NDV\s*\()/i,/^(?:STDDEV\s*\()/i,/^(?:VARIANCE_POP\s*\()/i,/^(?:VARIANCE_SAMP\s*\()/i,/^(?:CUME_DIST\s*\()/i,/^(?:DENSE_RANK\s*\()/i,/^(?:FIRST_VALUE\s*\()/i,/^(?:LAG\s*\()/i,/^(?:LAST_VALUE\s*\()/i,/^(?:LEAD\s*\()/i,/^(?:RANK\s*\()/i,/^(?:ROW_NUMBER\s*\()/i,/^(?:CUME_DIST\s*\()/i,/^(?:PERCENT_RANK\s*\()/i,/^(?:NTILE\s*\()/i,/^(?:PERCENT_RANK\s*\()/i,/^(?:SYSTEM\s*\()/i,/^(?:[0-9]+)/i,/^(?:[0-9]+(?:[YSL]|BD)?)/i,/^(?:[0-9]+E)/i,/^(?:[A-Za-z0-9_]+)/i,/^(?:\u2020)/i,/^(?:\u2021)/i,/^(?:\s+['])/i,/^(?:[^'\u2020\u2021]+)/i,/^(?:['])/i,/^(?:$)/i,/^(?:&&)/i,/^(?:\|\|)/i,/^(?:=)/i,/^(?:<)/i,/^(?:>)/i,/^(?:!=)/i,/^(?:<=)/i,/^(?:>=)/i,/^(?:<>)/i,/^(?:<=>)/i,/^(?:-)/i,/^(?:\*)/i,/^(?:\+)/i,/^(?:\/)/i,/^(?:%)/i,/^(?:\|)/i,/^(?:\^)/i,/^(?:&)/i,/^(?:,)/i,/^(?:\.)/i,/^(?::)/i,/^(?:;)/i,/^(?:~)/i,/^(?:!)/i,/^(?:\()/i,/^(?:\))/i,/^(?:\[)/i,/^(?:\])/i,/^(?:\$\{[^}]*\})/i,/^(?:`)/i,/^(?:[^`]+)/i,/^(?:`)/i,/^(?:')/i,/^(?:(?:\\[']|[^'])+)/i,/^(?:')/i,/^(?:")/i,/^(?:(?:\\["]|[^"])+)/i,/^(?:")/i,/^(?:$)/i,/^(?:.)/i,/^(?:.)/i,/^(?:.)/i,/^(?:.)/i,/^(?:.)/i,/^(?:.)/i,/^(?:.)/i,/^(?:.)/i,/^(?:.)/i], +conditions: {"hdfs":{"rules":[427,428,429,430,431,432,476],"inclusive":false},"doubleQuotedValue":{"rules":[469,470,479],"inclusive":false},"singleQuotedValue":{"rules":[466,467,478],"inclusive":false},"backtickedValue":{"rules":[463,464,477],"inclusive":false},"between":{"rules":[0,1,2,3,4,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,410,411,412,413,414,415,416,417,423,424,425,426,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,465,468,471,472,473,480],"inclusive":true},"hive":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,410,411,412,413,414,415,416,417,418,419,423,424,425,426,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,465,468,471,472,474,480],"inclusive":true},"impala":{"rules":[0,1,2,3,4,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,420,421,422,423,424,425,426,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,465,468,471,472,475,480],"inclusive":true},"INITIAL":{"rules":[0,1,2,3,4,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,410,411,412,413,414,415,416,417,423,424,425,426,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,465,468,471,472,480],"inclusive":true}} +}); +return lexer; +})(); +parser.lexer = lexer; +function Parser () { + this.yy = {}; +} +Parser.prototype = parser;parser.Parser = Parser; +return new Parser; +})(); + + +if (typeof require !== 'undefined' && typeof exports !== 'undefined') { +exports.parser = sqlSyntaxParser; +exports.Parser = sqlSyntaxParser.Parser; +exports.parse = function () { return sqlSyntaxParser.parse.apply(sqlSyntaxParser, arguments); }; +exports.main = function commonjsMain(args) { + if (!args[1]) { + console.log('Usage: '+args[0]+' FILE'); + process.exit(1); + } + var source = require('fs').readFileSync(require('path').normalize(args[1]), "utf8"); + return exports.parser.parse(source); +}; +if (typeof module !== 'undefined' && require.main === module) { + exports.main(process.argv.slice(1)); +} +} diff --git a/jison/autocomplete_footer.jison b/jison/autocomplete_footer.jison new file mode 100755 index 0000000..899433d --- /dev/null +++ b/jison/autocomplete_footer.jison @@ -0,0 +1,19 @@ +// Licensed to Cloudera, Inc. under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. Cloudera, Inc. licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +%% + +SqlParseSupport.initSqlParser(parser); \ No newline at end of file diff --git a/jison/autocomplete_header.jison b/jison/autocomplete_header.jison new file mode 100755 index 0000000..8ad0466 --- /dev/null +++ b/jison/autocomplete_header.jison @@ -0,0 +1,29 @@ +// Licensed to Cloudera, Inc. under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. Cloudera, Inc. licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +%left 'AND' 'OR' +%left 'BETWEEN' +%left 'NOT' '!' '~' +%left '=' '<' '>' 'COMPARISON_OPERATOR' +%left '-' '*' 'ARITHMETIC_OPERATOR' + +%left ';' ',' +%nonassoc 'CURSOR' 'PARTIAL_CURSOR' +%nonassoc 'IN' 'IS' 'ILIKE' 'IREGEXP' 'LIKE' 'RLIKE' 'REGEXP' 'EXISTS' NEGATION + +%start SqlAutocomplete + +%% \ No newline at end of file diff --git a/jison/globalSearchParser.jison b/jison/globalSearchParser.jison new file mode 100755 index 0000000..15a1bdf --- /dev/null +++ b/jison/globalSearchParser.jison @@ -0,0 +1,179 @@ +// Licensed to Cloudera, Inc. under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. Cloudera, Inc. licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +%lex +%x singleQuote doubleQuote +%% + +\s+ { return 'WS' } + +'\u2020' { parser.yy.cursorFound = yylloc; return 'CURSOR'; } + +[a-zA-Z]+[:] { return 'FACET' } + +\' { this.begin('singleQuote'); return 'QUOTE'; } + +(?:\\[']|[^'])+ { + if (parser.handleQuotedValueWithCursor(this, yytext, yylloc, '\'')) { + return 'PARTIAL_VALUE'; + } + return 'VALUE'; + } + +\' { this.popState(); return 'QUOTE'; } + +\" { this.begin('doubleQuote'); return 'QUOTE'; } + +(?:\\["]|[^"])+ { + if (parser.handleQuotedValueWithCursor(this, yytext, yylloc, '"')) { + return 'PARTIAL_VALUE'; + } + return 'VALUE'; + } + +\" { this.popState(); return 'QUOTE'; } + +[^"'\s\u2020]+ { return 'TEXT'; } + +<> { return 'EOF'; } + +/lex + +%start GlobalSearchAutocomplete + +%% + +GlobalSearchAutocomplete + : OptionalWhitespace SearchParts OptionalWhitespace 'EOF' + { + return $2; + } + | OptionalWhitespace SearchParts_EDIT 'EOF' + { + if (!$2.facets) { + $2.facets = {}; + } + if (!$2.text) { + $2.text = []; + } + return $2; + } + | OptionalWhitespace 'EOF' + { + return { facets: {}, text: [] }; + } + ; + +SearchParts + : SearchPart + | SearchParts WS SearchPart + { + parser.mergeFacets($1, $3); + parser.mergeText($1, $3); + } + ; + +SearchParts_EDIT + : SearchPart_EDIT + | SearchParts WS SearchPart_EDIT + { + parser.mergeFacets($1, $3); + parser.mergeText($1, $3); + $$ = $3; + $$.text = $1.text; + $$.facets = $1.facets; + } + | SearchPart_EDIT WS SearchParts + { + $$ = $1; + parser.mergeFacets($$, $3); + parser.mergeText($$, $3); + } + | SearchParts WS SearchPart_EDIT WS SearchParts + { + parser.mergeFacets($1, $3); + parser.mergeFacets($1, $5); + parser.mergeText($1, $3); + parser.mergeText($1, $5); + $$ = $3; + $$.text = $1.text; + $$.facets = $1.facets; + } + ; + +SearchPart + : Facet --> { text: [], facets: $1.facets } + | FreeText --> { text: [$1], facets: {} } + ; + +SearchPart_EDIT + : Facet_EDIT + | FreeText_EDIT + ; + +Facet + : 'FACET' OptionalWhitespace FreeText + { + var facet = {}; + var facetName = $1.substring(0, $1.length - 1).toLowerCase(); + facet[facetName] = {}; + facet[facetName][$3.toLowerCase()] = true; + $$ = { facets: facet }; + } + ; + +Facet_EDIT + : 'FACET' OptionalWhitespace 'CURSOR' --> { suggestFacetValues: $1.substring(0, $1.length - 1).toLowerCase() } + | 'FACET' OptionalWhitespace FreeText 'CURSOR' + { + var facet = {}; + var facetName = $1.substring(0, $1.length - 1).toLowerCase(); + facet[facetName] = {}; + facet[facetName][$3.toLowerCase()] = true; + $$ = { suggestFacetValues: facetName, facets: facet } + } + ; + +FreeText + : 'TEXT' + | QuotedValue + ; + +FreeText_EDIT + : 'CURSOR' --> { suggestFacets: true, suggestResults: true } + | 'CURSOR' 'TEXT' --> { suggestFacets: true, suggestResults: true, text: [$2] } + | 'TEXT' 'CURSOR' 'TEXT' --> { suggestFacets: true, suggestResults: true, text: [$1+$3] } + | 'TEXT' 'CURSOR' --> { suggestFacets: true, suggestResults: true, text: [$1] } + | QuotedValue_EDIT + ; + +QuotedValue + : 'QUOTE' 'VALUE' 'QUOTE' --> $2 + | 'QUOTE' 'QUOTE' --> '' + ; + +QuotedValue_EDIT + : 'QUOTE' 'PARTIAL_VALUE' --> $2 + ; + +OptionalWhitespace + : + | WS + ; + +%% + +SqlParseSupport.initGlobalSearchParser(parser); \ No newline at end of file diff --git a/jison/hue-sql-syntax.sh b/jison/hue-sql-syntax.sh new file mode 100755 index 0000000..7a4365f --- /dev/null +++ b/jison/hue-sql-syntax.sh @@ -0,0 +1,37 @@ +#!/bin/bash +# Licensed to Cloudera, Inc. under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. Cloudera, Inc. licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +echo "Make sure you install jison first (npm install jison -g)" +echo "" +echo "Generating parser..." + +pushd jison +# === Syntax parser === +cat syntax_header.jison sql_main.jison sql_valueExpression.jison sql_alter.jison sql_analyze.jison sql_create.jison sql_drop.jison sql_grant.jison sql_insert.jison sql_load.jison sql_set.jison sql_show.jison sql_update.jison sql_use.jison syntax_footer.jison > sqlSyntaxParser.jison + +echo "Creating SQL syntax parser..." +jison sqlSyntaxParser.jison sql.jisonlex +# Workaround for a parser bug where it reports the location of the previous token on error (pull-request submitted for jison) +# We're also adding a ruleId to the parser error composed of the last two stack ID's and used for suppressing errors in the UI +sed -i '' 's/loc: yyloc,/loc: lexer.yylloc, ruleId: stack.slice(stack.length - 2, stack.length).join(''),/' sqlSyntaxParser.js +# grunt uglify:sqlSyntaxParser +cat sqlParseSupport.js sqlSyntaxParser.js > ../core/sqlSyntaxParser.js +rm sqlSyntaxParser.jison +rm sqlSyntaxParser.js + +popd +echo "Done!" diff --git a/jison/license.txt b/jison/license.txt new file mode 100755 index 0000000..9ce7cc9 --- /dev/null +++ b/jison/license.txt @@ -0,0 +1,15 @@ +// Licensed to Cloudera, Inc. under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. Cloudera, Inc. licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. diff --git a/jison/solrFormulaParser.jison b/jison/solrFormulaParser.jison new file mode 100755 index 0000000..5f4ce3b --- /dev/null +++ b/jison/solrFormulaParser.jison @@ -0,0 +1,265 @@ +// Licensed to Cloudera, Inc. under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. Cloudera, Inc. licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +%lex +%options case-insensitive +%% + +\s { /* skip whitespace */ } +'--'.* { /* skip comments */ } +[/][*][^*]*[*]+([^/*][^*]*[*]+)*[/] { /* skip comments */ } + +'\u2020' { parser.yy.cursorFound = yylloc; return 'CURSOR'; } + +[0-9]+(?:[,.][0-9]+)? { return 'NUMBER'; } + +'-' { return '-'; } +'+' { return '+'; } +'*' { return '*'; } +'/' { return '/'; } + +[a-z]+\s*\( { + yy.lexer.unput('('); + parser.addFunctionLocation({ + first_line: yylloc.first_line, + first_column: yylloc.first_column, + last_line: yylloc.first_line, + last_column: yylloc.first_column + yytext.trim().length + }, yytext.trim()); + return 'FUNCTION'; + } + +',' { return ','; } +'(' { return '('; } +')' { return ')'; } + +<> { return 'EOF'; } + +[^\s\u2020()]+ { parser.addFieldLocation(yylloc, yytext); return 'IDENTIFIER'; } + +/lex + +%left '+' '-' +%left '*' '/' + +%start SolrFormulaAutocomplete + +%% + +SolrFormulaAutocomplete + : SolrFormula 'EOF' + { + return { + parsedValue: $1 + }; + } + | SolrFormula_EDIT 'EOF' + { + return $1 + } + | 'CURSOR' 'EOF' + { + return { suggestAggregateFunctions: true } + } + ; + +SolrFormula + : NonParenthesizedSolrFormula + | '(' NonParenthesizedSolrFormula ')' -> $1 + $2 + $3 + ; + +SolrFormula_EDIT + : NonParenthesizedSolrFormula_EDIT + | '(' NonParenthesizedSolrFormula_EDIT RightParenthesisOrError --> $2 + ; + +NonParenthesizedSolrFormula + : 'NUMBER' + | 'IDENTIFIER' + | 'FUNCTION' '(' ArgumentList ')' -> $1 + $2 + $3 + $4 + | SolrFormula '+' SolrFormula -> 'sum(' + $1 + ',' + $3 + ')' + | SolrFormula '-' SolrFormula -> 'sub(' + $1 + ',' + $3 + ')' + | SolrFormula '*' SolrFormula -> 'mul(' + $1 + ',' + $3 + ')' + | SolrFormula '/' SolrFormula -> 'div(' + $1 + ',' + $3 + ')' + | '-' SolrFormula -> 'sub(0,' + $2 + ')' + ; + +NonParenthesizedSolrFormula_EDIT + : 'NUMBER' 'CURSOR' --> { suggestOperators: true } + | 'IDENTIFIER' 'CURSOR' --> { suggestOperators: true } + | 'CURSOR' 'NUMBER' --> { suggestAggregateFunctions: true, suggestFunctions: true, suggestFields: true } + | 'CURSOR' 'IDENTIFIER' --> { suggestAggregateFunctions: true, suggestFunctions: true, suggestFields: true } + ; + +NonParenthesizedSolrFormula_EDIT + : 'FUNCTION' '(' 'CURSOR' RightParenthesisOrError --> { suggestAggregateFunctions: true, suggestFunctions: true, suggestFields: true } + | 'FUNCTION' '(' ArgumentList_EDIT RightParenthesisOrError --> $3 + | 'FUNCTION' '(' ArgumentList ')' 'CURSOR' --> { suggestOperators: true } + ; + +NonParenthesizedSolrFormula_EDIT + : SolrFormula '+' 'CURSOR' --> { suggestAggregateFunctions: true, suggestFunctions: true, suggestFields: true } + | 'CURSOR' '+' SolrFormula --> { suggestAggregateFunctions: true, suggestFunctions: true, suggestFields: true } + | SolrFormula_EDIT '+' SolrFormula --> $1 + | SolrFormula '+' SolrFormula_EDIT --> $3 + ; + +NonParenthesizedSolrFormula_EDIT + : SolrFormula '-' 'CURSOR' --> { suggestAggregateFunctions: true, suggestFunctions: true, suggestFields: true } + | 'CURSOR' '-' SolrFormula --> { suggestAggregateFunctions: true, suggestFunctions: true, suggestFields: true } + | SolrFormula_EDIT '-' SolrFormula --> $1 + | SolrFormula '-' SolrFormula_EDIT --> $3 + ; + +NonParenthesizedSolrFormula_EDIT + : SolrFormula '*' 'CURSOR' --> { suggestAggregateFunctions: true, suggestFunctions: true, suggestFields: true } + | 'CURSOR' '*' SolrFormula --> { suggestAggregateFunctions: true, suggestFunctions: true, suggestFields: true } + | SolrFormula_EDIT '*' SolrFormula --> $1 + | SolrFormula '*' SolrFormula_EDIT --> $3 + ; + +NonParenthesizedSolrFormula_EDIT + : SolrFormula '/' 'CURSOR' --> { suggestAggregateFunctions: true, suggestFunctions: true, suggestFields: true } + | 'CURSOR' '/' SolrFormula --> { suggestAggregateFunctions: true, suggestFunctions: true, suggestFields: true } + | SolrFormula_EDIT '/' SolrFormula --> $1 + | SolrFormula '/' SolrFormula_EDIT --> $3 + ; + +NonParenthesizedSolrFormula_EDIT + : '-' 'CURSOR' --> { suggestAggregateFunctions: true, suggestFunctions: true, suggestFields: true } + | '-' SolrFormula_EDIT --> $2 + ; + +ArgumentList + : SolrFormula + | ArgumentList ',' SolrFormula + ; + +ArgumentList_EDIT + : SolrFormula_EDIT + | ArgumentList ',' SolrFormula_EDIT --> $3 + | SolrFormula_EDIT ',' ArgumentList + | ArgumentList ',' SolrFormula_EDIT ',' ArgumentList --> $3 + ; + + +RightParenthesisOrError + : ')' + | error + ; + +%% + +parser.yy.parseError = function () { return false; } + +parser.identifyPartials = function (beforeCursor, afterCursor) { + var beforeMatch = beforeCursor.match(/[^()-*+/,\s]*$/); + var afterMatch = afterCursor.match(/^[^()-*+/,\s]*/); + return {left: beforeMatch ? beforeMatch[0].length : 0, right: afterMatch ? afterMatch[0].length : 0}; +}; + +var adjustLocationForCursor = function (location) { + // columns are 0-based and lines not, so add 1 to cols + var newLocation = { + first_line: location.first_line, + last_line: location.last_line, + first_column: location.first_column + 1, + last_column: location.last_column + 1 + }; + if (parser.yy.cursorFound) { + if (parser.yy.cursorFound.first_line === newLocation.first_line && parser.yy.cursorFound.last_column <= newLocation.first_column) { + var additionalSpace = parser.yy.partialLengths.left + parser.yy.partialLengths.right; + additionalSpace -= parser.yy.partialCursor ? 1 : 3; // For some reason the normal cursor eats 3 positions. + newLocation.first_column = newLocation.first_column + additionalSpace; + newLocation.last_column = newLocation.last_column + additionalSpace; + } + } + return newLocation; +}; + +parser.addFunctionLocation = function (location, name) { + parser.yy.locations.push({ type: 'function', name: name, location: adjustLocationForCursor(location) }); +} + +parser.addFieldLocation = function (location, name) { + parser.yy.locations.push({ type: 'field', name: name, location: adjustLocationForCursor(location) }); +} + +parser.parseSolrFormula = function (formula, debug) { + parser.yy.cursorFound = false; + parser.yy.locations = []; + formula = formula.replace(/\r\n|\n\r/gm, '\n'); + + var result; + try { + result = parser.parse(formula); + } catch (err) { + if (debug) { + console.log(beforeCursor + '\u2020' + afterCursor); + console.log(err); + console.error(err.stack); + } + } + return result || false; +} + +parser.autocompleteSolrFormula = function (beforeCursor, afterCursor, debug) { + parser.yy.cursorFound = false; + parser.yy.locations = []; + + beforeCursor = beforeCursor.replace(/\r\n|\n\r/gm, '\n'); + afterCursor = afterCursor.replace(/\r\n|\n\r/gm, '\n'); + + parser.yy.partialLengths = parser.identifyPartials(beforeCursor, afterCursor); + + if (parser.yy.partialLengths.left > 0) { + beforeCursor = beforeCursor.substring(0, beforeCursor.length - parser.yy.partialLengths.left); + } + + if (parser.yy.partialLengths.right > 0) { + afterCursor = afterCursor.substring(parser.yy.partialLengths.right); + } + + var result; + try { + result = parser.parse(beforeCursor + '\u2020' + afterCursor); + } catch (err) { + // Workaround for too many missing parentheses (it's the only error we handle in the parser) + if (err && err.toString().indexOf('Parsing halted while starting to recover from another error') !== -1) { + var leftCount = (beforeCursor.match(/\(/g) || []).length; + var rightCount = (beforeCursor.match(/\)/g) || []).length; + var parenthesisPad = ''; + while (rightCount < leftCount) { + parenthesisPad += ')'; + rightCount++; + } + try { + result = parser.parse(beforeCursor + '\u2020' + parenthesisPad); + } catch (err) { + return {} + } + } else { + if (debug) { + console.log(beforeCursor + '\u2020' + afterCursor); + console.log(err); + console.error(err.stack); + } + return {} + } + } + result.locations = parser.yy.locations; + return result; +}; \ No newline at end of file diff --git a/jison/solrQueryParser.jison b/jison/solrQueryParser.jison new file mode 100755 index 0000000..d69bb45 --- /dev/null +++ b/jison/solrQueryParser.jison @@ -0,0 +1,292 @@ +// Licensed to Cloudera, Inc. under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. Cloudera, Inc. licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +%lex +%options case-insensitive flex +%x squareBracketRange curlyBracketRange doubleQuotedValue singleQuotedValue +%% + +\s { /* skip whitespace */ } +'--'.* { /* skip comments */ } +[/][*][^*]*[*]+([^/*][^*]*[*]+)*[/] { /* skip comments */ } + +'\u2020' { parser.yy.cursorFound = yylloc; return 'CURSOR'; } + +'AND' { return 'AND'; } +'&&' { return 'AND'; } +'OR' { return 'OR'; } +'||' { return 'OR'; } +'NOT' { return 'NOT'; } +'!' { return 'NOT'; } +'+' { return '+'; } +'-' { return '-'; } +':' { return ':'; } +'*' { return '*'; } + +'(' { return '('; } +')' { return ')'; } + +[0-9]+(?:[,.][0-9]+)? { return 'NUMBER'; } + +'[' { this.begin('squareBracketRange'); return '['; } +(?:\\[\]]|[^\]])+ { + if (parser.handleQuotedValueWithCursor(this, yytext, yylloc, ']')) { + return 'PARTIAL_VALUE'; + } + return 'VALUE'; + } +\] { this.popState(); return ']'; } + +'{' { this.begin('curlyBracketRange'); return '{'; } +(?:\\[\}]|[^\}])+ { + if (parser.handleQuotedValueWithCursor(this, yytext, yylloc, '}')) { + return 'PARTIAL_VALUE'; + } + return 'VALUE'; + } +\} { this.popState(); return '}'; } + +\' { this.begin('singleQuotedValue'); return 'SINGLE_QUOTE'; } +(?:\\[']|[^'])+ { + if (parser.handleQuotedValueWithCursor(this, yytext, yylloc, '\'')) { + yytext = yytext.replace(/[\u2020].*/, ''); + return 'PARTIAL_VALUE'; + } + return 'VALUE'; + } +\' { this.popState(); return 'SINGLE_QUOTE'; } + +\" { this.begin('doubleQuotedValue'); return 'DOUBLE_QUOTE'; } +(?:\\["]|[^"])+ { + if (parser.handleQuotedValueWithCursor(this, yytext, yylloc, '"')) { + yytext = yytext.replace(/[\u2020].*/, ''); + return 'PARTIAL_VALUE'; + } + return 'VALUE'; + } +\" { this.popState(); return 'DOUBLE_QUOTE'; } + +[^\s\u3000!():"'^+\-\[\]{}~*?/\u2020]+ { return 'TERM'; } + +<> { return 'EOF'; } + +/lex + +%left 'AND' 'OR' '&&' '||' BooleanOperator +%left 'CURSOR' // Cursor precedence needed to not conflict with operators i.e. x 'CURSOR' y vs. x 'AND' y + +%start SolrQueryAutocomplete + +%% + +SolrQueryAutocomplete + : SolrQuery 'EOF' + { + return {} + } + | SolrQuery_EDIT 'EOF' + { + return $1; + } + | 'CURSOR' 'EOF' + { + return { suggestFields: { appendColon: true } } + } + ; + +SolrQuery + : NonParenthesizedSolrQuery + | '(' NonParenthesizedSolrQuery ')' --> $2 + ; + +SolrQuery_EDIT + : NonParenthesizedSolrQuery_EDIT + | '(' NonParenthesizedSolrQuery_EDIT RightParenthesisOrError --> $2 + ; + +NonParenthesizedSolrQuery + : 'NUMBER' + | 'TERM' + | KeywordMatch --> { hasKeywordMatch: true } + ; + +NonParenthesizedSolrQuery_EDIT + : KeywordMatch_EDIT + ; + +NonParenthesizedSolrQuery + : SolrQuery BooleanOperator SolrQuery + ; + +NonParenthesizedSolrQuery_EDIT + : SolrQuery 'CURSOR' + { + if ($1.hasKeywordMatch) { + $$ = { suggestKeywords: ['AND', 'OR'] }; + } else { + $$ = { suggestKeywords: ['AND', 'OR', ':'], suggestValues: { field: $1, prependColon: true } }; + } + } + | SolrQuery 'CURSOR' SolrQuery + { + if ($1.hasKeywordMatch) { + $$ = { suggestKeywords: ['AND', 'OR'] }; + } else { + $$ = { suggestKeywords: ['AND', 'OR', ':'], suggestValues: { field: $1, prependColon: true } }; + } + } + | 'CURSOR' SolrQuery --> { suggestFields: { appendColon: true } } + ; + +NonParenthesizedSolrQuery_EDIT + : SolrQuery BooleanOperator 'CURSOR' --> { suggestFields: { appendColon: true } } + | 'CURSOR' BooleanOperator SolrQuery --> { suggestFields: { appendColon: true } } + | SolrQuery BooleanOperator SolrQuery_EDIT --> $3 + | SolrQuery_EDIT BooleanOperator SolrQuery --> $1 + ; + +KeywordMatch + : 'TERM' ':' 'TERM' + | 'TERM' ':' QuotedValue + ; + +KeywordMatch_EDIT + : 'TERM' ':' 'CURSOR' --> { suggestValues: { field: $1 } } + | 'TERM' ':' QuotedValue_EDIT --> { suggestValues: { field: $1, quotePresent: true, partial: $3 } } + ; + +// ======= Common constructs ======= + +BooleanOperator + : 'AND' | 'OR' | '&&' | '||'; + +QuotedValue + : 'SINGLE_QUOTE' 'VALUE' 'SINGLE_QUOTE' --> $2 + | 'DOUBLE_QUOTE' 'VALUE' 'DOUBLE_QUOTE' --> $2 + ; + +QuotedValue_EDIT + : 'SINGLE_QUOTE' 'PARTIAL_VALUE' --> $2 + | 'DOUBLE_QUOTE' 'PARTIAL_VALUE' --> $2 + ; + +RightParenthesisOrError: ')' | error; +%% + +parser.yy.parseError = function () { return false; } + +parser.addFieldLocation = function (location, name) { + parser.yy.locations.push({ type: 'field', name: name, location: adjustLocationForCursor(location) }); +} + +parser.identifyPartials = function (beforeCursor, afterCursor) { + var beforeMatch = beforeCursor.match(/[^()-*+/,:"'\s]*$/); + var afterMatch = afterCursor.match(/^[^()-*+/,:"'\s]*/); + return { left: beforeMatch ? beforeMatch[0].length : 0, right: afterMatch ? afterMatch[0].length : 0 }; +}; + +parser.handleQuotedValueWithCursor = function (lexer, yytext, yylloc, quoteChar) { + if (yytext.indexOf('\u2020') !== -1) { + var cursorIndex = yytext.indexOf('\u2020'); + parser.yy.cursorFound = { + first_line: yylloc.first_line, + last_line: yylloc.last_line, + first_column: yylloc.first_column + cursorIndex, + last_column: yylloc.first_column + cursorIndex + 1 + }; + var remainder = yytext.substring(cursorIndex + 1); + var remainingQuotes = (lexer.upcomingInput().match(new RegExp(quoteChar, 'g')) || []).length; + if (remainingQuotes > 0 && remainingQuotes & 1 != 0) { + parser.yy.missingEndQuote = false; + lexer.input(); + } else { + parser.yy.missingEndQuote = true; + lexer.unput(remainder); + } + lexer.popState(); + return true; + } + return false; +}; + +var adjustLocationForCursor = function (location) { + // columns are 0-based and lines not, so add 1 to cols + var newLocation = { + first_line: location.first_line, + last_line: location.last_line, + first_column: location.first_column + 1, + last_column: location.last_column + 1 + }; + if (parser.yy.cursorFound) { + if (parser.yy.cursorFound.first_line === newLocation.first_line && parser.yy.cursorFound.last_column <= newLocation.first_column) { + var additionalSpace = parser.yy.partialLengths.left + parser.yy.partialLengths.right; + additionalSpace -= parser.yy.partialCursor ? 1 : 3; // For some reason the normal cursor eats 3 positions. + newLocation.first_column = newLocation.first_column + additionalSpace; + newLocation.last_column = newLocation.last_column + additionalSpace; + } + } + return newLocation; +}; + +parser.autocompleteSolrQuery = function (beforeCursor, afterCursor, debug) { + parser.yy.cursorFound = false; + parser.yy.locations = []; + + beforeCursor = beforeCursor.replace(/\r\n|\n\r/gm, '\n'); + afterCursor = afterCursor.replace(/\r\n|\n\r/gm, '\n'); + + parser.yy.partialLengths = parser.identifyPartials(beforeCursor, afterCursor); + + parser.yy.partialCursor = parser.yy.partialLengths.left > 0; + + if (parser.yy.partialLengths.left > 0) { + beforeCursor = beforeCursor.substring(0, beforeCursor.length - parser.yy.partialLengths.left); + } + + if (parser.yy.partialLengths.right > 0) { + afterCursor = afterCursor.substring(parser.yy.partialLengths.right); + } + + var result; + try { + result = parser.parse(beforeCursor + '\u2020' + afterCursor); + } catch (err) { + // Workaround for too many missing parentheses (it's the only error we handle in the parser) + if (err && err.toString().indexOf('Parsing halted while starting to recover from another error') !== -1) { + var leftCount = (beforeCursor.match(/\(/g) || []).length; + var rightCount = (beforeCursor.match(/\)/g) || []).length; + var parenthesisPad = ''; + while (rightCount < leftCount) { + parenthesisPad += ')'; + rightCount++; + } + try { + result = parser.parse(beforeCursor + '\u2020' + parenthesisPad); + } catch (err) { + return { locations: parser.yy.locations } + } + } else { + if (debug) { + console.log(beforeCursor + '\u2020' + afterCursor); + console.log(err); + console.error(err.stack); + } + return { locations: parser.yy.locations } + } + } + result.locations = parser.yy.locations; + return result; +}; \ No newline at end of file diff --git a/jison/sql.jisonlex b/jison/sql.jisonlex new file mode 100755 index 0000000..18236a4 --- /dev/null +++ b/jison/sql.jisonlex @@ -0,0 +1,550 @@ +// Licensed to Cloudera, Inc. under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. Cloudera, Inc. licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +%options case-insensitive flex +%s between hive impala +%x hdfs doubleQuotedValue singleQuotedValue backtickedValue +%% + +\s { /* skip whitespace */ } +'--'.* { /* skip comments */ } +[/][*][^*]*[*]+([^/*][^*]*[*]+)*[/] { /* skip comments */ } + +'\u2020' { parser.yy.partialCursor = false; parser.yy.cursorFound = yylloc; return 'CURSOR'; } +'\u2021' { parser.yy.partialCursor = true; parser.yy.cursorFound = yylloc; return 'PARTIAL_CURSOR'; } + +// Reserved Keywords +'ALL' { return 'ALL'; } +'ARRAY' { return 'ARRAY'; } +'AS' { return 'AS'; } +'AUTHORIZATION' { return 'AUTHORIZATION'; } +'BINARY' { return 'BINARY'; } +'CACHE' { return 'CACHE'; } +'COLUMN' { return 'COLUMN'; } +'CONF' { return 'CONF'; } +'CONSTRAINT' { return 'CONSTRAINT'; } +'CREATE' { parser.determineCase(yytext); return 'CREATE'; } +'CUBE' { return 'CUBE'; } +'CURRENT' { return 'CURRENT'; } +'DATE' { return 'DATE'; } +'DELETE' { parser.determineCase(yytext); return 'DELETE'; } +'DESCRIBE' { parser.determineCase(yytext); return 'DESCRIBE'; } +'EXTENDED' { return 'EXTENDED'; } +'EXTERNAL' { return 'EXTERNAL'; } +'FOR' { return 'FOR'; } +'FOREIGN' { return 'FOREIGN'; } +'FUNCTION' { return 'FUNCTION'; } +'GRANT' { return 'GRANT'; } +'GROUPING' { return 'GROUPING'; } +'IMPORT' { parser.determineCase(yytext); return 'IMPORT'; } +'INSERT' { parser.determineCase(yytext); return 'INSERT'; } +'LATERAL' { return 'LATERAL'; } +'LOCAL' { return 'LOCAL'; } +'MACRO' { return 'MACRO'; } +'MAP' { return 'MAP'; } +'NONE' { return 'NONE'; } +'OF' { return 'OF'; } +'OUT' { return 'OUT'; } +'PRIMARY' { return 'PRIMARY'; } +'REFERENCES' { return 'REFERENCES'; } +'REVOKE' { return 'REVOKE'; } +'ROLLUP' { return 'ROLLUP'; } +'TABLE' { return 'TABLE'; } +'TIMESTAMP' { return 'TIMESTAMP'; } +'USER' { return 'USER'; } +'USING' { return 'USING'; } +'VIEWS' { return 'VIEWS'; } +'LIFECYCLE' { return 'LIFECYCLE'; } + +// Non-reserved Keywords +'ABORT' { parser.determineCase(yytext); return 'ABORT'; } +'ADD' { return 'ADD'; } +'ADMIN' { return 'ADMIN'; } +'AFTER' { return 'AFTER'; } +'ANALYZE' { parser.determineCase(yytext); return 'ANALYZE'; } +'ARCHIVE' { return 'ARCHIVE'; } +'ASC' { return 'ASC'; } +'AVRO' { return 'AVRO'; } +'BUCKET' { return 'BUCKET'; } +'BUCKETS' { return 'BUCKETS'; } +'CASCADE' { return 'CASCADE'; } +'CHANGE' { return 'CHANGE'; } +'CLUSTER' { return 'CLUSTER'; } +'CLUSTERED' { return 'CLUSTERED'; } +'COLLECTION' { return 'COLLECTION'; } +'COLUMNS' { return 'COLUMNS'; } +'COMMENT' { return 'COMMENT'; } +'COMPACT' { return 'COMPACT'; } +'COMPACTIONS' { return 'COMPACTIONS'; } +'COMPUTE' { return 'COMPUTE'; } +'CONCATENATE' { return 'CONCATENATE'; } +'DATA' { return 'DATA'; } +'DATABASES' { return 'DATABASES'; } +'DAY' { return 'DAY'; } +'DAYOFWEEK' { return 'DAYOFWEEK'; } +'DBPROPERTIES' { return 'DBPROPERTIES'; } +'DEFERRED' { return 'DEFERRED'; } +'DEFINED' { return 'DEFINED'; } +'DELIMITED' { return 'DELIMITED'; } +'DEPENDENCY' { return 'DEPENDENCY'; } +'DESC' { return 'DESC'; } +'DIRECTORY' { this.begin('hdfs'); return 'DIRECTORY'; } +'DISABLE' { return 'DISABLE'; } +'DISTRIBUTE' { return 'DISTRIBUTE'; } +DOUBLE\s+PRECISION { return 'DOUBLE_PRECISION'; } +'ESCAPED' { return 'ESCAPED'; } +'ENABLE' { return 'ENABLE'; } +'EXCHANGE' { return 'EXCHANGE'; } +'EXPLAIN' { parser.determineCase(yytext); return 'EXPLAIN'; } +'EXPORT' { parser.determineCase(yytext); return 'EXPORT'; } +'FIELDS' { return 'FIELDS'; } +'FILE' { return 'FILE'; } +'FILEFORMAT' { return 'FILEFORMAT'; } +'FIRST' { return 'FIRST'; } +'FORMAT' { return 'FORMAT'; } +'FORMATTED' { return 'FORMATTED'; } +'FUNCTION' { return 'FUNCTION'; } +'FUNCTIONS' { return 'FUNCTIONS'; } +'HOUR' { return 'HOUR'; } +'IDXPROPERTIES' { return 'IDXPROPERTIES'; } +'INDEX' { return 'INDEX'; } +'INDEXES' { return 'INDEXES'; } +'INPATH' { this.begin('hdfs'); return 'INPATH'; } +'INPUTFORMAT' { return 'INPUTFORMAT'; } +'ITEMS' { return 'ITEMS'; } +'JAR' { return 'JAR'; } +'KEY' { return 'KEY'; } +'KEYS' { return 'KEYS'; } +'LINES' { return 'LINES'; } +'LOAD' { parser.determineCase(yytext); return 'LOAD'; } +'LOCATION' { this.begin('hdfs'); return 'LOCATION'; } +'LOCK' { return 'LOCK'; } +'LOCKS' { return 'LOCKS'; } +'MATCHED' { return 'MATCHED'; } +'MERGE' { return 'MERGE'; } +'METADATA' { return 'METADATA'; } +'MINUTE' { return 'MINUTE'; } +'MONTH' { return 'MONTH'; } +'MSCK' { return 'MSCK'; } +'NORELY' { return 'NORELY'; } +'NOSCAN' { return 'NOSCAN'; } +'NOVALIDATE' { return 'NOVALIDATE'; } +'NO_DROP' { return 'NO_DROP'; } +'OFFLINE' { return 'OFFLINE'; } +'ORC' { return 'ORC'; } +'OUTPUTFORMAT' { return 'OUTPUTFORMAT'; } +'OVERWRITE' { return 'OVERWRITE'; } +OVERWRITE\s+DIRECTORY { this.begin('hdfs'); return 'OVERWRITE_DIRECTORY'; } +'OWNER' { return 'OWNER'; } +'PARQUET' { return 'PARQUET'; } +'PARTITIONED' { return 'PARTITIONED'; } +'PARTITIONS' { return 'PARTITIONS'; } +'PERCENT' { return 'PERCENT'; } +'PRIVILEGES' { return 'PRIVILEGES'; } +'PURGE' { return 'PURGE'; } +'QUARTER' { return 'QUARTER'; } +'RCFILE' { return 'RCFILE'; } +'REBUILD' { return 'REBUILD'; } +'RELOAD' { parser.determineCase(yytext); return 'RELOAD'; } +'RELY' { return 'RELY'; } +'REPAIR' { return 'REPAIR'; } +'REPLICATION' { return 'REPLICATION'; } +'RECOVER' { return 'RECOVER'; } +'RENAME' { return 'RENAME'; } +'REPLACE' { return 'REPLACE'; } +'RESTRICT' { return 'RESTRICT'; } +'ROLE' { return 'ROLE'; } +'ROLES' { return 'ROLES'; } +'SECOND' { return 'SECOND'; } +'SCHEMA' { return 'SCHEMA'; } +'SCHEMAS' { return 'SCHEMAS'; } +'SEQUENCEFILE' { return 'SEQUENCEFILE'; } +'SERDE' { return 'SERDE'; } +'SERDEPROPERTIES' { return 'SERDEPROPERTIES'; } +'SETS' { return 'SETS'; } +'SHOW' { parser.determineCase(yytext); return 'SHOW'; } +'SHOW_DATABASE' { return 'SHOW_DATABASE'; } +'SKEWED' { return 'SKEWED'; } +'SKEWED LOCATION' { return 'SKEWED_LOCATION'; } // Hack to prevent hdfs lexer state +'SORT' { return 'SORT'; } +'SORTED' { return 'SORTED'; } +'STATISTICS' { return 'STATISTICS'; } +'STORED' { return 'STORED'; } +STORED\s+AS\s+DIRECTORIES { return 'STORED_AS_DIRECTORIES'; } +'STRING' { return 'STRING'; } +'STRUCT' { return 'STRUCT'; } +'TABLES' { return 'TABLES'; } +'TABLESAMPLE' { return 'TABLESAMPLE'; } +'TBLPROPERTIES' { return 'TBLPROPERTIES'; } +'TEMPORARY' { return 'TEMPORARY'; } +'TERMINATED' { return 'TERMINATED'; } +'TEXTFILE' { return 'TEXTFILE'; } +'TINYINT' { return 'TINYINT'; } +'TOUCH' { return 'TOUCH'; } +'TRANSACTIONS' { return 'TRANSACTIONS'; } +'UNARCHIVE' { return 'UNARCHIVE'; } +'UNIONTYPE' { return 'UNIONTYPE'; } +'USE' { parser.determineCase(yytext); return 'USE'; } +'VIEW' { return 'VIEW'; } +'WAIT' { return 'WAIT'; } +'WEEK' { return 'WEEK'; } +'WINDOW' { return 'WINDOW'; } +'YEAR' { return 'YEAR'; } + +'.' { return '.'; } +'[' { return '['; } +']' { return ']'; } + +// Reserved Keywords +'ADD' { return 'ADD'; } +'AGGREGATE' { return 'AGGREGATE'; } +'AVRO' { return 'AVRO'; } +'CACHED' { return 'CACHED'; } +'CASCADE' { return 'CASCADE'; } +'CHANGE' { return 'CHANGE'; } +'CLOSE_FN' { return 'CLOSE_FN'; } +'COLUMN' { return 'COLUMN'; } +'COLUMNS' { return 'COLUMNS'; } +'COMMENT' { parser.determineCase(yytext); return 'COMMENT'; } +'COMPUTE' { parser.determineCase(yytext); return 'COMPUTE'; } +'CREATE' { parser.determineCase(yytext); parser.addStatementTypeLocation('CREATE', yylloc, yy.lexer.upcomingInput()); return 'CREATE'; } +'DATA' { return 'DATA'; } +'DATABASES' { return 'DATABASES'; } +'DELETE' { return 'DELETE'; } +'DELIMITED' { return 'DELIMITED'; } +'DESCRIBE' { parser.determineCase(yytext); parser.addStatementTypeLocation('DESCRIBE', yylloc); return 'DESCRIBE'; } +'ESCAPED' { return 'ESCAPED'; } +'EXPLAIN' { parser.determineCase(yytext); parser.addStatementTypeLocation('EXPLAIN', yylloc); return 'EXPLAIN'; } +'EXTERNAL' { return 'EXTERNAL'; } +'EXTENDED' { return 'EXTENDED'; } +'FIELDS' { return 'FIELDS'; } +'FILEFORMAT' { return 'FILEFORMAT'; } +'FILES' { return 'FILES'; } +'FINALIZE_FN' { return 'FINALIZE_FN'; } +'FIRST' { return 'FIRST'; } +'FORMAT' { return 'FORMAT'; } +'FORMATTED' { return 'FORMATTED'; } +'FUNCTION' { return 'FUNCTION'; } +'FUNCTIONS' { return 'FUNCTIONS'; } +'GROUP' { return 'GROUP'; } +'HASH' { return 'HASH'; } +'ILIKE' { return 'ILIKE'; } +'INCREMENTAL' { return 'INCREMENTAL'; } +'INSERT' { parser.determineCase(yytext); parser.addStatementTypeLocation('INSERT', yylloc); return 'INSERT'; } +'INTERVAL' { return 'INTERVAL'; } +'INTERMEDIATE' { return 'INTERMEDIATE'; } +'INIT_FN' { return 'INIT_FN'; } +'INVALIDATE' { parser.determineCase(yytext); parser.addStatementTypeLocation('INVALIDATE', yylloc, yy.lexer.upcomingInput()); return 'INVALIDATE'; } +'INPATH' { this.begin('hdfs'); return 'INPATH'; } +'IREGEXP' { return 'IREGEXP'; } +'KEY' { return 'KEY'; } +'KUDU' { return 'KUDU'; } +'LAST' { return 'LAST'; } +LIKE\s+PARQUET { this.begin('hdfs'); return 'LIKE_PARQUET'; } +'LIMIT' { return 'LIMIT'; } +'LINES' { return 'LINES'; } +'LOAD' { parser.determineCase(yytext); parser.addStatementTypeLocation('LOAD', yylloc, yy.lexer.upcomingInput()); return 'LOAD'; } +'LOCATION' { this.begin('hdfs'); return 'LOCATION'; } +'MERGE_FN' { return 'MERGE_FN'; } +'METADATA' { return 'METADATA'; } +'NULLS' { return 'NULLS'; } +'OFFSET' { return 'OFFSET'; } +'ORC' { return 'ORC'; } +'OVERWRITE' { return 'OVERWRITE'; } +'PARQUET' { return 'PARQUET'; } +'PARTITIONED' { return 'PARTITIONED'; } +'PARTITIONS' { return 'PARTITIONS'; } +'PREPARE_FN' { return 'PREPARE_FN'; } +'PRIMARY' { return 'PRIMARY'; } +'RCFILE' { return 'RCFILE'; } +'RANGE' { return 'RANGE'; } +'REAL' { return 'REAL'; } +'REFRESH' { parser.determineCase(yytext); parser.addStatementTypeLocation('REFRESH', yylloc); return 'REFRESH'; } +'RENAME' { return 'RENAME'; } +'REPEATABLE' { return 'REPEATABLE'; } +'REPLACE' { return 'REPLACE'; } +'REPLICATION' { return 'REPLICATION'; } +'RESTRICT' { return 'RESTRICT'; } +'RETURNS' { return 'RETURNS'; } +'REVOKE' { parser.determineCase(yytext); parser.addStatementTypeLocation('REVOKE', yylloc); return 'REVOKE'; } +'SEQUENCEFILE' { return 'SEQUENCEFILE'; } +'SERDEPROPERTIES' { return 'SERDEPROPERTIES'; } +'SCHEMAS' { return 'SCHEMAS'; } +'SERIALIZE_FN' { return 'SERIALIZE_FN'; } +'SERVER' { return 'SERVER'; } +'SORT' { return 'SORT'; } +'STATS' { return 'STATS'; } +'STORED' { return 'STORED'; } +'STRAIGHT_JOIN' { return 'STRAIGHT_JOIN'; } +'SYMBOL' { return 'SYMBOL'; } +'TABLE' { return 'TABLE'; } +'TABLES' { return 'TABLES'; } +'TABLESAMPLE' { return 'TABLESAMPLE'; } +'TBLPROPERTIES' { return 'TBLPROPERTIES'; } +'TERMINATED' { return 'TERMINATED'; } +'TEXTFILE' { return 'TEXTFILE'; } +'UNCACHED' { return 'UNCACHED'; } +'UPDATE_FN' { return 'UPDATE_FN'; } +'UPSERT' { parser.determineCase(yytext); parser.addStatementTypeLocation('UPSERT', yylloc); return 'UPSERT'; } +'URI' { return 'URI'; } +'USING' { return 'USING'; } +PARTITION\s+VALUE\s { return 'PARTITION_VALUE'; } + +// Non-reserved Keywords +'ANALYTIC' { return 'ANALYTIC'; } +'ANTI' { return 'ANTI'; } +'ARRAY' { return 'ARRAY'; } +'BLOCK_SIZE' { return 'BLOCK_SIZE'; } +'COMPRESSION' { return 'COMPRESSION'; } +'CURRENT' { return 'CURRENT'; } +'DEFAULT' { return 'DEFAULT'; } +'ENCODING' { return 'ENCODING'; } +'GRANT' { return 'GRANT'; } +'MAP' { return 'MAP'; } +'RECOVER' { return 'RECOVER'; } +'ROLE' { return 'ROLE'; } +'ROLES' { return 'ROLES'; } +'STRUCT' { return 'STRUCT'; } +'UNKNOWN' { return 'UNKNOWN'; } +\[BROADCAST\] { return 'BROADCAST'; } +\[NOSHUFFLE\] { return 'NOSHUFFLE'; } +\[SHUFFLE\] { return 'SHUFFLE'; } + +'...' { return '...'; } +'.' { return '.'; } +'[' { return '['; } +']' { return ']'; } + +'AND' { this.popState(); return 'BETWEEN_AND'; } + +// Reserved Keywords +'ALL' { return 'ALL'; } +'ALTER' { parser.determineCase(yytext); parser.addStatementTypeLocation('ALTER', yylloc, yy.lexer.upcomingInput()); return 'ALTER'; } +'AND' { return 'AND'; } +'AS' { return 'AS'; } +'ASC' { return 'ASC'; } +'BETWEEN' { this.begin('between'); return 'BETWEEN'; } +'BIGINT' { return 'BIGINT'; } +'BOOLEAN' { return 'BOOLEAN'; } +'BY' { return 'BY'; } +'CASE' { return 'CASE'; } +'CHAR' { return 'CHAR'; } +'CREATE' { parser.determineCase(yytext); return 'CREATE'; } +'CROSS' { return 'CROSS'; } +'CURRENT' { return 'CURRENT'; } +'DATABASE' { return 'DATABASE'; } +'DECIMAL' { return 'DECIMAL'; } +'DISTINCT' { return 'DISTINCT'; } +'DIV' { return 'ARITHMETIC_OPERATOR'; } +'DOUBLE' { return 'DOUBLE'; } +'DESC' { return 'DESC'; } +'DROP' { parser.determineCase(yytext); parser.addStatementTypeLocation('DROP', yylloc, yy.lexer.upcomingInput()); return 'DROP'; } +'ELSE' { return 'ELSE'; } +'END' { return 'END'; } +'EXISTS' { parser.yy.correlatedSubQuery = true; return 'EXISTS'; } +'FALSE' { return 'FALSE'; } +'FLOAT' { return 'FLOAT'; } +'FOLLOWING' { return 'FOLLOWING'; } +'FROM' { parser.determineCase(yytext); return 'FROM'; } +'FULL' { return 'FULL'; } +'GROUP' { return 'GROUP'; } +'HAVING' { return 'HAVING'; } +'IF' { return 'IF'; } +'IN' { return 'IN'; } +'INNER' { return 'INNER'; } +'INSERT' { return 'INSERT'; } +'INT' { return 'INT'; } +'INTO' { return 'INTO'; } +'IS' { return 'IS'; } +'JOIN' { return 'JOIN'; } +'LEFT' { return 'LEFT'; } +'LIKE' { return 'LIKE'; } +'LIMIT' { return 'LIMIT'; } +'NOT' { return 'NOT'; } +'NULL' { return 'NULL'; } +'ON' { return 'ON'; } +'OPTION' { return 'OPTION'; } +'OR' { return 'OR'; } +'ORDER' { return 'ORDER'; } +'OUTER' { return 'OUTER'; } +'PARTITION' { return 'PARTITION'; } +'PRECEDING' { return 'PRECEDING'; } +'PURGE' { return 'PURGE'; } +'RANGE' { return 'RANGE'; } +'REGEXP' { return 'REGEXP'; } +'RIGHT' { return 'RIGHT'; } +'RLIKE' { return 'RLIKE'; } +'ROW' { return 'ROW'; } +'ROWS' { return 'ROWS'; } +'SCHEMA' { return 'SCHEMA'; } +'SELECT' { parser.determineCase(yytext); parser.addStatementTypeLocation('SELECT', yylloc); return 'SELECT'; } +'SEMI' { return 'SEMI'; } +'SET' { parser.determineCase(yytext); parser.addStatementTypeLocation('SET', yylloc); return 'SET'; } +'SHOW' { parser.determineCase(yytext); parser.addStatementTypeLocation('SHOW', yylloc); return 'SHOW'; } +'SMALLINT' { return 'SMALLINT'; } +'STRING' { return 'STRING'; } +'TABLE' { return 'TABLE'; } +'THEN' { return 'THEN'; } +'TIMESTAMP' { return 'TIMESTAMP'; } +'TINYINT' { return 'TINYINT'; } +'TO' { return 'TO'; } +'TRUE' { return 'TRUE'; } +'TRUNCATE' { parser.determineCase(yytext); parser.addStatementTypeLocation('TRUNCATE', yylloc, yy.lexer.upcomingInput()); return 'TRUNCATE'; } +'UNBOUNDED' { return 'UNBOUNDED'; } +'UPDATE' { parser.determineCase(yytext); return 'UPDATE'; } +'USE' { parser.determineCase(yytext); parser.addStatementTypeLocation('USE', yylloc); return 'USE'; } +'UNION' { return 'UNION'; } +'VIEW' { return 'VIEW'; } +'VARCHAR' { return 'VARCHAR'; } // Not in Impala +'VALUES' { return 'VALUES'; } +'WHEN' { return 'WHEN'; } +'WHERE' { return 'WHERE'; } +'WITH' { parser.determineCase(yytext); parser.addStatementTypeLocation('WITH', yylloc); return 'WITH'; } + +// Non-reserved Keywords +'OVER' { return 'OVER'; } +'ROLE' { return 'ROLE'; } + +// --- UDFs --- +AVG\s*\( { yy.lexer.unput('('); yytext = 'avg'; parser.addFunctionLocation(yylloc, yytext); return 'AVG'; } +CAST\s*\( { yy.lexer.unput('('); yytext = 'cast'; parser.addFunctionLocation(yylloc, yytext); return 'CAST'; } +COUNT\s*\( { yy.lexer.unput('('); yytext = 'count'; parser.addFunctionLocation(yylloc, yytext); return 'COUNT'; } +MAX\s*\( { yy.lexer.unput('('); yytext = 'max'; parser.addFunctionLocation(yylloc, yytext); return 'MAX'; } +MIN\s*\( { yy.lexer.unput('('); yytext = 'min'; parser.addFunctionLocation(yylloc, yytext); return 'MIN'; } +STDDEV_POP\s*\( { yy.lexer.unput('('); yytext = 'stddev_pop'; parser.addFunctionLocation(yylloc, yytext); return 'STDDEV_POP'; } +STDDEV_SAMP\s*\( { yy.lexer.unput('('); yytext = 'stddev_samp'; parser.addFunctionLocation(yylloc, yytext); return 'STDDEV_SAMP'; } +SUM\s*\( { yy.lexer.unput('('); yytext = 'sum'; parser.addFunctionLocation(yylloc, yytext); return 'SUM'; } +VARIANCE\s*\( { yy.lexer.unput('('); yytext = 'variance'; parser.addFunctionLocation(yylloc, yytext); return 'VARIANCE'; } +VAR_POP\s*\( { yy.lexer.unput('('); yytext = 'var_pop'; parser.addFunctionLocation(yylloc, yytext); return 'VAR_POP'; } +VAR_SAMP\s*\( { yy.lexer.unput('('); yytext = 'var_samp'; parser.addFunctionLocation(yylloc, yytext); return 'VAR_SAMP'; } +COLLECT_SET\s*\( { yy.lexer.unput('('); yytext = 'collect_set'; parser.addFunctionLocation(yylloc, yytext); return 'COLLECT_SET'; } +COLLECT_LIST\s*\( { yy.lexer.unput('('); yytext = 'collect_list'; parser.addFunctionLocation(yylloc, yytext); return 'COLLECT_LIST'; } +CORR\s*\( { yy.lexer.unput('('); yytext = 'corr'; parser.addFunctionLocation(yylloc, yytext); return 'CORR'; } +COVAR_POP\s*\( { yy.lexer.unput('('); yytext = 'covar_pop'; parser.addFunctionLocation(yylloc, yytext); return 'COVAR_POP'; } +COVAR_SAMP\s*\( { yy.lexer.unput('('); yytext = 'covar_samp'; parser.addFunctionLocation(yylloc, yytext); return 'COVAR_SAMP'; } +EXTRACT\s*\( { yy.lexer.unput('('); yytext = 'extract'; parser.addFunctionLocation(yylloc, yytext); return 'EXTRACT'; } +HISTOGRAM_NUMERIC\s*\( { yy.lexer.unput('('); yytext = 'histogram_numeric'; parser.addFunctionLocation(yylloc, yytext); return 'HISTOGRAM_NUMERIC'; } +NTILE\s*\( { yy.lexer.unput('('); yytext = 'ntile'; parser.addFunctionLocation(yylloc, yytext); return 'NTILE'; } +PERCENTILE\s*\( { yy.lexer.unput('('); yytext = 'percentile'; parser.addFunctionLocation(yylloc, yytext); return 'PERCENTILE'; } +PERCENTILE_APPROX\s*\( { yy.lexer.unput('('); yytext = 'percentile_approx'; parser.addFunctionLocation(yylloc, yytext); return 'PERCENTILE_APPROX'; } +APPX_MEDIAN\s*\( { yy.lexer.unput('('); yytext = 'appx_median'; parser.addFunctionLocation(yylloc, yytext); return 'APPX_MEDIAN'; } +EXTRACT\s*\( { yy.lexer.unput('('); yytext = 'extract'; parser.addFunctionLocation(yylloc, yytext); return 'EXTRACT'; } +GROUP_CONCAT\s*\( { yy.lexer.unput('('); yytext = 'group_concat'; parser.addFunctionLocation(yylloc, yytext); return 'GROUP_CONCAT'; } +NDV\s*\( { yy.lexer.unput('('); yytext = 'ndv'; parser.addFunctionLocation(yylloc, yytext); return 'NDV'; } +STDDEV\s*\( { yy.lexer.unput('('); yytext = 'stddev'; parser.addFunctionLocation(yylloc, yytext); return 'STDDEV'; } +VARIANCE_POP\s*\( { yy.lexer.unput('('); yytext = 'variance_pop'; parser.addFunctionLocation(yylloc, yytext); return 'VARIANCE_POP'; } +VARIANCE_SAMP\s*\( { yy.lexer.unput('('); yytext = 'variance_samp'; parser.addFunctionLocation(yylloc, yytext); return 'VARIANCE_SAMP'; } + +// Analytical functions +CUME_DIST\s*\( { yy.lexer.unput('('); yytext = 'cume_dist'; parser.addFunctionLocation(yylloc, yytext); return 'ANALYTIC'; } +DENSE_RANK\s*\( { yy.lexer.unput('('); yytext = 'dense_rank'; parser.addFunctionLocation(yylloc, yytext); return 'ANALYTIC'; } +FIRST_VALUE\s*\( { yy.lexer.unput('('); yytext = 'first_value'; parser.addFunctionLocation(yylloc, yytext); return 'ANALYTIC'; } +LAG\s*\( { yy.lexer.unput('('); yytext = 'lag'; parser.addFunctionLocation(yylloc, yytext); return 'ANALYTIC'; } +LAST_VALUE\s*\( { yy.lexer.unput('('); yytext = 'last_value'; parser.addFunctionLocation(yylloc, yytext); return 'ANALYTIC'; } +LEAD\s*\( { yy.lexer.unput('('); yytext = 'lead'; parser.addFunctionLocation(yylloc, yytext); return 'ANALYTIC'; } +RANK\s*\( { yy.lexer.unput('('); yytext = 'rank'; parser.addFunctionLocation(yylloc, yytext); return 'ANALYTIC'; } +ROW_NUMBER\s*\( { yy.lexer.unput('('); yytext = 'row_number'; parser.addFunctionLocation(yylloc, yytext); return 'ANALYTIC'; } +CUME_DIST\s*\( { yy.lexer.unput('('); yytext = 'cume_dist'; parser.addFunctionLocation(yylloc, yytext); return 'ANALYTIC'; } +PERCENT_RANK\s*\( { yy.lexer.unput('('); yytext = 'percent_rank'; parser.addFunctionLocation(yylloc, yytext); return 'ANALYTIC'; } +NTILE\s*\( { yy.lexer.unput('('); yytext = 'ntile'; parser.addFunctionLocation(yylloc, yytext); return 'ANALYTIC'; } +PERCENT_RANK\s*\( { yy.lexer.unput('('); yytext = 'percent_rank'; parser.addFunctionLocation(yylloc, yytext); return 'ANALYTIC'; } + +SYSTEM\s*\( { yy.lexer.unput('('); yytext = 'system'; return 'SYSTEM'; } + +[0-9]+ { return 'UNSIGNED_INTEGER'; } +[0-9]+(?:[YSL]|BD)? { return 'UNSIGNED_INTEGER'; } +[0-9]+E { return 'UNSIGNED_INTEGER_E'; } +[A-Za-z0-9_]+ { return 'REGULAR_IDENTIFIER'; } + +'\u2020' { parser.yy.cursorFound = true; return 'CURSOR'; } +'\u2021' { parser.yy.cursorFound = true; return 'PARTIAL_CURSOR'; } +\s+['] { return 'HDFS_START_QUOTE'; } +[^'\u2020\u2021]+ { parser.addFileLocation(yylloc, yytext); return 'HDFS_PATH'; } +['] { this.popState(); return 'HDFS_END_QUOTE'; } +<> { return 'EOF'; } + +'&&' { return 'AND'; } +'||' { return 'OR'; } + +'=' { return '='; } +'<' { return '<'; } +'>' { return '>'; } +'!=' { return 'COMPARISON_OPERATOR'; } +'<=' { return 'COMPARISON_OPERATOR'; } +'>=' { return 'COMPARISON_OPERATOR'; } +'<>' { return 'COMPARISON_OPERATOR'; } +'<=>' { return 'COMPARISON_OPERATOR'; } + +'-' { return '-'; } +'*' { return '*'; } +'+' { return 'ARITHMETIC_OPERATOR'; } +'/' { return 'ARITHMETIC_OPERATOR'; } +'%' { return 'ARITHMETIC_OPERATOR'; } +'|' { return 'ARITHMETIC_OPERATOR'; } +'^' { return 'ARITHMETIC_OPERATOR'; } +'&' { return 'ARITHMETIC_OPERATOR'; } + +',' { return ','; } +'.' { return '.'; } +':' { return ':'; } +';' { return ';'; } +'~' { return '~'; } +'!' { return '!'; } + +'(' { return '('; } +')' { return ')'; } +'[' { return '['; } +']' { return ']'; } + +\$\{[^}]*\} { return 'VARIABLE_REFERENCE'; } + +\` { this.begin('backtickedValue'); return 'BACKTICK'; } +[^`]+ { + if (parser.handleQuotedValueWithCursor(this, yytext, yylloc, '`')) { + return 'PARTIAL_VALUE'; + } + return 'VALUE'; + } +\` { this.popState(); return 'BACKTICK'; } + +\' { this.begin('singleQuotedValue'); return 'SINGLE_QUOTE'; } +(?:\\[']|[^'])+ { + if (parser.handleQuotedValueWithCursor(this, yytext, yylloc, '\'')) { + return 'PARTIAL_VALUE'; + } + return 'VALUE'; + } +\' { this.popState(); return 'SINGLE_QUOTE'; } + +\" { this.begin('doubleQuotedValue'); return 'DOUBLE_QUOTE'; } +(?:\\["]|[^"])+ { + if (parser.handleQuotedValueWithCursor(this, yytext, yylloc, '"')) { + return 'PARTIAL_VALUE'; + } + return 'VALUE'; + } +\" { this.popState(); return 'DOUBLE_QUOTE'; } + +<> { return 'EOF'; } + +. { /* To prevent console logging of unknown chars */ } +. { } +. { } +. { } +. { } +. { } +. { } +. { } \ No newline at end of file diff --git a/jison/sqlParseSupport.js b/jison/sqlParseSupport.js new file mode 100755 index 0000000..42d64da --- /dev/null +++ b/jison/sqlParseSupport.js @@ -0,0 +1,2278 @@ +// Licensed to Cloudera, Inc. under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. Cloudera, Inc. licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +var SqlParseSupport = (function () { + + // endsWith polyfill from hue_utils.js, needed as workers live in their own js environment + if (!String.prototype.endsWith) { + String.prototype.endsWith = function (searchString, position) { + var subjectString = this.toString(); + if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) { + position = subjectString.length; + } + position -= searchString.length; + var lastIndex = subjectString.lastIndexOf(searchString, position); + return lastIndex !== -1 && lastIndex === position; + }; + } + + /** + * Calculates the Optimal String Alignment distance between two strings. Returns 0 when the strings are equal and the + * distance when not, distances is less than or equal to the length of the longest string. + * + * @param strA + * @param strB + * @param [ignoreCase] + * @returns {number} The similarity + */ + var stringDistance = function (strA, strB, ignoreCase) { + if (ignoreCase) { + strA = strA.toLowerCase(); + strB = strB.toLowerCase(); + } + + // TODO: Consider other algorithms for performance + var strALength = strA.length; + var strBLength = strB.length; + if (strALength === 0) { + return strBLength; + } + if (strBLength === 0) { + return strALength; + } + + var distances = new Array(strALength); + + var cost, deletion, insertion, substitution, transposition; + for (var i = 0; i <= strALength; i++) { + distances[i] = new Array(strBLength); + distances[i][0] = i; + for (var j = 1; j <= strBLength; j++) { + if (!i){ + distances[0][j] = j; + } else { + cost = strA[i-1] === strB[j-1] ? 0 : 1; + deletion = distances[i - 1][j] + 1; + insertion = distances[i][j - 1] + 1; + substitution = distances[i - 1][j - 1] + cost; + if (deletion <= insertion && deletion <= substitution) { + distances[i][j] = deletion; + } else if (insertion <= deletion && insertion <= substitution) { + distances[i][j] = insertion; + } else { + distances[i][j] = substitution; + } + + if (i > 1 && j > 1 && strA[i] === strB[j - 1] && strA[i - 1] === strB[j]) { + transposition = distances[i - 2][j - 2] + cost; + if (transposition < distances[i][j]) { + distances[i][j] = transposition; + } + } + } + } + } + + return distances[strALength][strBLength]; + }; + + var equalIgnoreCase = function (a, b) { + return a && b && a.toLowerCase() === b.toLowerCase(); + }; + + var initSqlParser = function (parser) { + + var SIMPLE_TABLE_REF_SUGGESTIONS = ['suggestJoinConditions', 'suggestAggregateFunctions', 'suggestFilters', 'suggestGroupBys', 'suggestOrderBys']; + + parser.prepareNewStatement = function () { + linkTablePrimaries(); + parser.commitLocations(); + + delete parser.yy.lateralViews; + delete parser.yy.latestCommonTableExpressions; + delete parser.yy.correlatedSubQuery; + parser.yy.subQueries = []; + parser.yy.selectListAliases = []; + parser.yy.latestTablePrimaries = []; + + prioritizeSuggestions(); + }; + + parser.yy.parseError = function (message, error) { + parser.yy.errors.push(error); + return message; + }; + + parser.addCommonTableExpressions = function (identifiers) { + parser.yy.result.commonTableExpressions = identifiers; + parser.yy.latestCommonTableExpressions = identifiers; + }; + + parser.isInSubquery = function () { + return !!parser.yy.primariesStack.length + }; + + parser.pushQueryState = function () { + parser.yy.resultStack.push(parser.yy.result); + parser.yy.locationsStack.push(parser.yy.locations); + parser.yy.lateralViewsStack.push(parser.yy.lateralViews); + parser.yy.selectListAliasesStack.push(parser.yy.selectListAliases); + parser.yy.primariesStack.push(parser.yy.latestTablePrimaries); + parser.yy.subQueriesStack.push(parser.yy.subQueries); + + parser.yy.result = {}; + parser.yy.locations = []; + parser.yy.selectListAliases = []; // Not allowed in correlated sub-queries + parser.yy.lateralViews = []; // Not allowed in correlated sub-queries + + if (parser.yy.correlatedSubQuery) { + parser.yy.latestTablePrimaries = parser.yy.latestTablePrimaries.concat(); + parser.yy.subQueries = parser.yy.subQueries.concat(); + } else { + parser.yy.latestTablePrimaries = []; + parser.yy.subQueries = []; + } + }; + + parser.popQueryState = function (subQuery) { + linkTablePrimaries(); + parser.commitLocations(); + + if (Object.keys(parser.yy.result).length === 0) { + parser.yy.result = parser.yy.resultStack.pop(); + } else { + parser.yy.resultStack.pop(); + } + var oldSubQueries = parser.yy.subQueries; + parser.yy.subQueries = parser.yy.subQueriesStack.pop(); + if (subQuery) { + if (oldSubQueries.length > 0) { + subQuery.subQueries = oldSubQueries; + } + parser.yy.subQueries.push(subQuery); + } + + parser.yy.lateralViews = parser.yy.lateralViewsStack.pop(); + parser.yy.latestTablePrimaries = parser.yy.primariesStack.pop(); + parser.yy.locations = parser.yy.locationsStack.pop(); + parser.yy.selectListAliases = parser.yy.selectListAliasesStack.pop(); + }; + + parser.suggestSelectListAliases = function () { + if (parser.yy.selectListAliases && parser.yy.selectListAliases.length > 0 && parser.yy.result.suggestColumns + && (typeof parser.yy.result.suggestColumns.identifierChain === 'undefined' || parser.yy.result.suggestColumns.identifierChain.length === 0)) { + parser.yy.result.suggestColumnAliases = parser.yy.selectListAliases; + } + }; + + parser.isHive = function () { + return parser.yy.activeDialect === 'hive'; + }; + + parser.isImpala = function () { + return parser.yy.activeDialect === 'impala'; + }; + + parser.mergeSuggestKeywords = function () { + var result = []; + Array.prototype.slice.call(arguments).forEach(function (suggestion) { + if (typeof suggestion !== 'undefined' && typeof suggestion.suggestKeywords !== 'undefined') { + result = result.concat(suggestion.suggestKeywords); + } + }); + if (result.length > 0) { + return {suggestKeywords: result}; + } + return {}; + }; + + parser.suggestValueExpressionKeywords = function (valueExpression, extras) { + var expressionKeywords = parser.getValueExpressionKeywords(valueExpression, extras); + parser.suggestKeywords(expressionKeywords.suggestKeywords); + if (expressionKeywords.suggestColRefKeywords) { + parser.suggestColRefKeywords(expressionKeywords.suggestColRefKeywords); + } + if (valueExpression.lastType) { + parser.addColRefIfExists(valueExpression.lastType); + } else { + parser.addColRefIfExists(valueExpression); + } + }; + + parser.getSelectListKeywords = function (excludeAsterisk) { + var keywords = [{ value: 'CASE', weight: 450 }, 'FALSE', 'TRUE', 'NULL']; + if (!excludeAsterisk) { + keywords.push({ value: '*', weight: 10000 }); + } + if (parser.isHive()) { + keywords = keywords.concat(['EXISTS', 'NOT']); + } + return keywords; + }; + + parser.getValueExpressionKeywords = function (valueExpression, extras) { + var types = valueExpression.lastType ? valueExpression.lastType.types : valueExpression.types; + // We could have valueExpression.columnReference to suggest based on column type + var keywords = ['<', '<=', '<=>', '<>', '=', '>', '>=', 'BETWEEN', 'IN', 'IS NOT NULL', 'IS NULL', 'IS NOT TRUE', 'IS TRUE', 'IS NOT FALSE', 'IS FALSE', 'NOT BETWEEN', 'NOT IN']; + if (parser.isImpala()) { + keywords = keywords.concat(['IS DISTINCT FROM', 'IS NOT DISTINCT FROM', 'IS NOT UNKNOWN', 'IS UNKNOWN']); + } + if (extras) { + keywords = keywords.concat(extras); + } + if (valueExpression.suggestKeywords) { + keywords = keywords.concat(valueExpression.suggestKeywords); + } + if (types.length === 1 && types[0] === 'COLREF') { + return { + suggestKeywords: keywords, + suggestColRefKeywords: { + BOOLEAN: ['AND', 'OR'], + NUMBER: ['+', '-', '*', '/', '%', 'DIV'], + STRING: parser.isImpala() ? ['ILIKE', 'IREGEXP', 'LIKE', 'NOT LIKE', 'REGEXP', 'RLIKE'] : ['LIKE', 'NOT LIKE', 'REGEXP', 'RLIKE'] + } + } + } + if (typeof SqlFunctions === 'undefined' || SqlFunctions.matchesType(parser.yy.activeDialect, ['BOOLEAN'], types)) { + keywords = keywords.concat(['AND', 'OR']); + } + if (typeof SqlFunctions === 'undefined' || SqlFunctions.matchesType(parser.yy.activeDialect, ['NUMBER'], types)) { + keywords = keywords.concat(['+', '-', '*', '/', '%', 'DIV']); + } + if (typeof SqlFunctions === 'undefined' || SqlFunctions.matchesType(parser.yy.activeDialect, ['STRING'], types)) { + keywords = keywords.concat(parser.isImpala() ? ['ILIKE', 'IREGEXP', 'LIKE', 'NOT LIKE', 'REGEXP', 'RLIKE'] : ['LIKE', 'NOT LIKE', 'REGEXP', 'RLIKE']); + } + return { suggestKeywords: keywords }; + }; + + parser.getTypeKeywords = function () { + if (parser.isHive()) { + return ['BIGINT', 'BINARY', 'BOOLEAN', 'CHAR', 'DATE', 'DECIMAL', 'DOUBLE', 'DOUBLE PRECISION', 'FLOAT', 'INT', 'SMALLINT', 'TIMESTAMP', 'STRING', 'TINYINT', 'VARCHAR']; + } + if (parser.isImpala()) { + return ['BIGINT', 'BOOLEAN', 'CHAR', 'DECIMAL', 'DOUBLE', 'FLOAT', 'INT', 'REAL', 'SMALLINT', 'TIMESTAMP', 'STRING', 'TINYINT', 'VARCHAR']; + } + return ['BIGINT', 'BOOLEAN', 'CHAR', 'DECIMAL', 'DOUBLE', 'FLOAT', 'INT', 'SMALLINT', 'TIMESTAMP', 'STRING', 'TINYINT', 'VARCHAR']; + }; + + parser.getColumnDataTypeKeywords = function () { + if (parser.isHive()) { + return parser.getTypeKeywords().concat(['ARRAY<>', 'MAP<>', 'STRUCT<>', 'UNIONTYPE<>']); + } + if (parser.isImpala()) { + return parser.getTypeKeywords().concat(['ARRAY<>', 'MAP<>', 'STRUCT<>']); + } + return parser.getTypeKeywords(); + }; + + parser.addColRefIfExists = function (valueExpression) { + if (valueExpression.columnReference) { + parser.yy.result.colRef = {identifierChain: valueExpression.columnReference}; + } + }; + + parser.selectListNoTableSuggest = function (selectListEdit, hasDistinctOrAll) { + if (selectListEdit.cursorAtStart) { + var keywords = parser.getSelectListKeywords(); + if (!hasDistinctOrAll) { + keywords = keywords.concat([{ value: 'ALL', weight: 2 }, { value: 'DISTINCT', weight: 2 }]); + } + if (parser.isImpala()) { + keywords.push('STRAIGHT_JOIN'); + } + parser.suggestKeywords(keywords); + } else { + parser.checkForKeywords(selectListEdit); + } + if (selectListEdit.suggestFunctions) { + parser.suggestFunctions(); + } + if (selectListEdit.suggestColumns) { + parser.suggestColumns(); + } + if (selectListEdit.suggestAggregateFunctions && (!hasDistinctOrAll || hasDistinctOrAll === 'ALL')) { + parser.suggestAggregateFunctions(); + parser.suggestAnalyticFunctions(); + } + }; + + parser.suggestJoinConditions = function (details) { + parser.yy.result.suggestJoinConditions = details || {}; + if (parser.yy.latestTablePrimaries && !parser.yy.result.suggestJoinConditions.tablePrimaries) { + parser.yy.result.suggestJoinConditions.tablePrimaries = parser.yy.latestTablePrimaries.concat(); + } + }; + + parser.suggestJoins = function (details) { + parser.yy.result.suggestJoins = details || {}; + }; + + parser.valueExpressionSuggest = function (oppositeValueExpression, operator) { + if (oppositeValueExpression && oppositeValueExpression.columnReference) { + parser.suggestValues(); + parser.yy.result.colRef = {identifierChain: oppositeValueExpression.columnReference}; + } + parser.suggestColumns(); + parser.suggestFunctions(); + var keywords = [{ value: 'CASE', weight: 450 }, { value: 'FALSE', weight: 450 }, { value: 'NULL', weight: 450 }, { value: 'TRUE', weight: 450 }]; + if (parser.isHive() || typeof oppositeValueExpression === 'undefined' || typeof operator === 'undefined') { + keywords = keywords.concat(['EXISTS', 'NOT']); + } + if (oppositeValueExpression && oppositeValueExpression.types[0] === 'NUMBER') { + parser.applyTypeToSuggestions(['NUMBER']); + } else if (parser.isImpala() && (typeof operator === 'undefined' || operator === '-' || operator === '+')) { + keywords.push('INTERVAL'); + } + parser.suggestKeywords(keywords); + }; + + parser.applyTypeToSuggestions = function (types) { + if (types[0] === 'BOOLEAN') { + return; + } + if (parser.yy.result.suggestFunctions && !parser.yy.result.suggestFunctions.types) { + parser.yy.result.suggestFunctions.types = types; + } + if (parser.yy.result.suggestColumns && !parser.yy.result.suggestColumns.types) { + parser.yy.result.suggestColumns.types = types; + } + }; + + parser.findCaseType = function (whenThenList) { + var types = {}; + whenThenList.caseTypes.forEach(function (valueExpression) { + valueExpression.types.forEach(function (type) { + types[type] = true; + }); + }); + if (Object.keys(types).length === 1) { + return {types: [Object.keys(types)[0]]}; + } + return {types: ['T']}; + }; + + parser.findReturnTypes = function (functionName) { + return typeof SqlFunctions === 'undefined' ? ['T'] : SqlFunctions.getReturnTypes(parser.yy.activeDialect, functionName.toLowerCase()); + }; + + parser.applyArgumentTypesToSuggestions = function (functionName, position) { + var foundArguments = typeof SqlFunctions === 'undefined' ? ['T'] : SqlFunctions.getArgumentTypes(parser.yy.activeDialect, functionName.toLowerCase(), position); + if (foundArguments.length == 0 && parser.yy.result.suggestColumns) { + delete parser.yy.result.suggestColumns; + delete parser.yy.result.suggestKeyValues; + delete parser.yy.result.suggestValues; + delete parser.yy.result.suggestFunctions; + delete parser.yy.result.suggestIdentifiers; + delete parser.yy.result.suggestKeywords; + } else { + parser.applyTypeToSuggestions(foundArguments); + } + }; + + var getCleanImpalaPrimaries = function (primaries) { + var cleanPrimaries = []; + for (var i = primaries.length - 1; i >= 0; i--) { + var cleanPrimary = primaries[i]; + if (cleanPrimary.identifierChain && cleanPrimary.identifierChain.length > 0) { + for (var j = i - 1; j >=0; j--) { + var parentPrimary = primaries[j]; + if (parentPrimary.alias && cleanPrimary.identifierChain[0].name === parentPrimary.alias) { + var restOfChain = cleanPrimary.identifierChain.concat(); + restOfChain.shift(); + if (cleanPrimary.alias) { + cleanPrimary = { identifierChain: parentPrimary.identifierChain.concat(restOfChain), alias: cleanPrimary.alias, impalaComplex: true }; + } else { + cleanPrimary = { identifierChain: parentPrimary.identifierChain.concat(restOfChain), impalaComplex: true }; + } + } + } + } + cleanPrimaries.push(cleanPrimary); + } + return cleanPrimaries; + }; + + parser.commitLocations = function () { + if (parser.yy.locations.length === 0) { + return; + } + + var tablePrimaries = parser.yy.latestTablePrimaries; + + if (parser.isImpala()) { + tablePrimaries = []; + getCleanImpalaPrimaries(parser.yy.latestTablePrimaries).forEach(function (primary) { + var cleanPrimary = primary; + if (primary.identifierChain && primary.identifierChain.length > 0) { + for (var j = parser.yy.primariesStack.length - 1; j >= 0; j--) { + getCleanImpalaPrimaries(parser.yy.primariesStack[j]).every(function (parentPrimary) { + if (parentPrimary.alias && parentPrimary.alias === primary.identifierChain[0].name) { + var identifierChain = primary.identifierChain.concat(); + identifierChain.shift(); + cleanPrimary = { identifierChain: parentPrimary.identifierChain.concat(identifierChain) }; + if (primary.alias) { + cleanPrimary.alias = primary.alias; + } + return false; + } + return true; + }); + } + } + tablePrimaries.unshift(cleanPrimary); + }); + } + var i = parser.yy.locations.length; + + while (i--) { + var location = parser.yy.locations[i]; + if (location.type === 'variable' && location.colRef) { + parser.expandIdentifierChain({ wrapper: location.colRef, tablePrimaries: tablePrimaries, isColumnWrapper: true }); + delete location.colRef.linked; + } + + // Impala can have references to previous tables after FROM, i.e. FROM testTable t, t.testArray + // In this testArray would be marked a type table so we need to switch it to column. + if (location.type === 'table' && typeof location.identifierChain !== 'undefined' && location.identifierChain.length > 1 && tablePrimaries) { + var allPrimaries = tablePrimaries; + parser.yy.primariesStack.forEach(function (parentPrimaries) { + allPrimaries = getCleanImpalaPrimaries(parentPrimaries).concat(allPrimaries); + }); + var found = allPrimaries.filter(function (primary) { + return equalIgnoreCase(primary.alias, location.identifierChain[0].name); + }); + if (found.length > 0) { + location.type = 'column'; + } + } + + if (location.type === 'database' && typeof location.identifierChain !== 'undefined' && location.identifierChain.length > 0 && tablePrimaries) { + var allPrimaries = tablePrimaries; + parser.yy.primariesStack.forEach(function (parentPrimaries) { + allPrimaries = getCleanImpalaPrimaries(parentPrimaries).concat(allPrimaries); + }); + var foundAlias = allPrimaries.filter(function (primary) { + return equalIgnoreCase(primary.alias, location.identifierChain[0].name); + }); + if (foundAlias.length > 0 && parser.isImpala()) { + // Impala complex reference in FROM clause, i.e. FROM testTable t, t.testMap tm + location.type = 'table'; + parser.expandIdentifierChain({ tablePrimaries: allPrimaries, wrapper: location, anyOwner: true }); + location.type = location.identifierChain.length === 1 ? 'table' : 'complex'; + continue; + } + } + + if (location.type === 'unknown') { + if (typeof location.identifierChain !== 'undefined' && location.identifierChain.length > 0 && location.identifierChain.length <= 2 && tablePrimaries) { + var found = tablePrimaries.filter(function (primary) { + return equalIgnoreCase(primary.alias, location.identifierChain[0].name) || (primary.identifierChain && equalIgnoreCase(primary.identifierChain[0].name, location.identifierChain[0].name)); + }); + if (!found.length && location.firstInChain) { + found = tablePrimaries.filter(function (primary) { + return !primary.alias && primary.identifierChain && equalIgnoreCase(primary.identifierChain[primary.identifierChain.length - 1].name, location.identifierChain[0].name); + }); + } + + if (found.length) { + if (found[0].identifierChain.length > 1 && location.identifierChain.length === 1 && equalIgnoreCase(found[0].identifierChain[0].name, location.identifierChain[0].name)) { + location.type = 'database'; + } else if (found[0].alias && equalIgnoreCase(location.identifierChain[0].name, found[0].alias) && location.identifierChain.length > 1) { + location.type = 'column'; + parser.expandIdentifierChain({ tablePrimaries: tablePrimaries, wrapper: location, anyOwner: true }); + } else if (!found[0].alias && found[0].identifierChain && equalIgnoreCase(location.identifierChain[0].name, found[0].identifierChain[found[0].identifierChain.length - 1].name) && location.identifierChain.length > 1) { + location.type = 'column'; + parser.expandIdentifierChain({ tablePrimaries: tablePrimaries, wrapper: location, anyOwner: true }); + } else { + location.type = found[0].impalaComplex ? 'column' : 'table'; + parser.expandIdentifierChain({ tablePrimaries: tablePrimaries, wrapper: location, anyOwner: true }); + } + } else { + if (parser.yy.subQueries) { + found = parser.yy.subQueries.filter(function (subQuery) { + return equalIgnoreCase(subQuery.alias, location.identifierChain[0].name); + }); + if (found.length > 0) { + location.type = 'subQuery'; + location.identifierChain = [{subQuery: found[0].alias}]; + } + } + } + } + } + + if (location.type === 'asterisk' && !location.linked) { + + if (tablePrimaries && tablePrimaries.length > 0) { + location.tables = []; + location.linked = false; + if (!location.identifierChain) { + location.identifierChain = [{ asterisk: true }]; + } + parser.expandIdentifierChain({ tablePrimaries: tablePrimaries, wrapper: location, anyOwner: false }); + if (location.tables.length === 0) { + parser.yy.locations.splice(i, 1); + } + } else { + parser.yy.locations.splice(i, 1); + } + } + + if (location.type === 'table' && typeof location.identifierChain !== 'undefined' && location.identifierChain.length === 1 && location.identifierChain[0].name) { + // Could be a cte reference + parser.yy.locations.some(function (otherLocation) { + if (otherLocation.type === 'alias' && otherLocation.source === 'cte' && SqlUtils.identifierEquals(otherLocation.alias, location.identifierChain[0].name)) { + // TODO: Possibly add the other location if we want to show the link in the future. + // i.e. highlight select definition on hover over alias, also for subquery references. + location.type = 'alias'; + location.target = 'cte'; + location.alias = location.identifierChain[0].name; + delete location.identifierChain; + return true; + } + }); + } + + if (location.type === 'table' && (typeof location.identifierChain === 'undefined' || location.identifierChain.length === 0)) { + parser.yy.locations.splice(i, 1); + } + + if (location.type === 'unknown') { + location.type = 'column'; + } + + // A column location might refer to a previously defined alias, i.e. last 'foo' in "SELECT cast(id AS int) foo FROM tbl ORDER BY foo;" + if (location.type === 'column') { + for (var j = i - 1; j >= 0; j--) { + var otherLocation = parser.yy.locations[j]; + if (otherLocation.type === 'alias' && otherLocation.source === 'column' && location.identifierChain && location.identifierChain.length === 1 && location.identifierChain[0].name && otherLocation.alias && location.identifierChain[0].name.toLowerCase() === otherLocation.alias.toLowerCase()) { + location.type = 'alias'; + location.source = 'column'; + location.alias = location.identifierChain[0].name; + delete location.identifierChain; + location.parentLocation = otherLocation.parentLocation; + break; + } + } + } + + if (location.type === 'column') { + if (parser.isHive() && !location.linked) { + location.identifierChain = parser.expandLateralViews(parser.yy.lateralViews, location.identifierChain); + } + + var initialIdentifierChain = location.identifierChain ? location.identifierChain.concat() : undefined; + + parser.expandIdentifierChain({ tablePrimaries: tablePrimaries, wrapper: location, anyOwner: true, isColumnWrapper: true, isColumnLocation: true }); + + if (typeof location.identifierChain === 'undefined') { + parser.yy.locations.splice(i, 1); + } else if (location.identifierChain.length === 0 && initialIdentifierChain && initialIdentifierChain.length === 1) { + // This is for the case "SELECT tblOrColName FROM db.tblOrColName"; + location.identifierChain = initialIdentifierChain; + } + } + if (location.type === 'column' && location.identifierChain) { + if (location.identifierChain.length > 1 && location.tables && location.tables.length > 0) { + location.type = 'complex'; + } + } + delete location.firstInChain; + if (location.type !== 'column' && location.type !== 'complex') { + delete location.qualified; + } else if (typeof location.qualified === 'undefined') { + location.qualified = false; + } + } + + if (parser.yy.locations.length > 0) { + parser.yy.allLocations = parser.yy.allLocations.concat(parser.yy.locations); + parser.yy.locations = []; + } + }; + + var prioritizeSuggestions = function () { + parser.yy.result.lowerCase = parser.yy.lowerCase || false; + + var cteIndex = {}; + + if (typeof parser.yy.latestCommonTableExpressions !== 'undefined') { + parser.yy.latestCommonTableExpressions.forEach(function (cte) { + cteIndex[cte.alias.toLowerCase()] = cte; + }) + } + + SIMPLE_TABLE_REF_SUGGESTIONS.forEach(function (suggestionType) { + if (suggestionType !== 'suggestAggregateFunctions' && typeof parser.yy.result[suggestionType] !== 'undefined' && parser.yy.result[suggestionType].tables.length === 0) { + delete parser.yy.result[suggestionType]; + } else if (typeof parser.yy.result[suggestionType] !== 'undefined' && typeof parser.yy.result[suggestionType].tables !== 'undefined') { + for (var i = parser.yy.result[suggestionType].tables.length - 1; i >= 0; i--) { + var table = parser.yy.result[suggestionType].tables[i]; + if (table.identifierChain.length === 1 && typeof table.identifierChain[0].name !== 'undefined' && typeof cteIndex[table.identifierChain[0].name.toLowerCase()] !== 'undefined') { + parser.yy.result[suggestionType].tables.splice(i, 1); + } + } + } + }); + + if (typeof parser.yy.result.colRef !== 'undefined') { + if (!parser.yy.result.colRef.linked || typeof parser.yy.result.colRef.identifierChain === 'undefined' || parser.yy.result.colRef.identifierChain.length === 0) { + delete parser.yy.result.colRef; + if (typeof parser.yy.result.suggestColRefKeywords !== 'undefined') { + Object.keys(parser.yy.result.suggestColRefKeywords).forEach(function (type) { + parser.yy.result.suggestKeywords = parser.yy.result.suggestKeywords.concat(parser.createWeightedKeywords(parser.yy.result.suggestColRefKeywords[type], -1)); + }); + delete parser.yy.result.suggestColRefKeywords; + } + if (parser.yy.result.suggestColumns && parser.yy.result.suggestColumns.types.length === 1 && parser.yy.result.suggestColumns.types[0] === 'COLREF') { + parser.yy.result.suggestColumns.types = ['T']; + } + delete parser.yy.result.suggestValues; + } + } + + if (typeof parser.yy.result.colRef !== 'undefined') { + if (!parser.yy.result.suggestValues && !parser.yy.result.suggestColRefKeywords && + (!parser.yy.result.suggestColumns || + parser.yy.result.suggestColumns.types[0] !== 'COLREF')) { + delete parser.yy.result.colRef; + } + } + if (typeof parser.yy.result.suggestIdentifiers !== 'undefined' && parser.yy.result.suggestIdentifiers.length > 0) { + delete parser.yy.result.suggestTables; + delete parser.yy.result.suggestDatabases; + } + if (typeof parser.yy.result.suggestColumns !== 'undefined') { + var suggestColumns = parser.yy.result.suggestColumns; + if (typeof suggestColumns.tables === 'undefined' || suggestColumns.tables.length === 0) { + // Impala supports statements like SELECT * FROM tbl1, tbl2 WHERE db.tbl1.col = tbl2.bla + if (parser.yy.result.suggestColumns.linked && parser.isImpala() && typeof suggestColumns.identifierChain !== 'undefined' && suggestColumns.identifierChain.length > 0) { + if (suggestColumns.identifierChain.length === 1) { + parser.yy.result.suggestTables = suggestColumns; + delete parser.yy.result.suggestColumns + } else { + suggestColumns.tables = [{identifierChain: suggestColumns.identifierChain}]; + delete suggestColumns.identifierChain; + } + } else { + delete parser.yy.result.suggestColumns; + delete parser.yy.result.subQueries; + } + } else { + delete parser.yy.result.suggestTables; + delete parser.yy.result.suggestDatabases; + + suggestColumns.tables.forEach(function (table) { + if (typeof table.identifierChain !== 'undefined' && table.identifierChain.length === 1 && typeof table.identifierChain[0].name !== 'undefined') { + var cte = cteIndex[table.identifierChain[0].name.toLowerCase()]; + if (typeof cte !== 'undefined') { + delete table.identifierChain[0].name; + table.identifierChain[0].cte = cte.alias; + } + } else if (typeof table.identifierChain === 'undefined' && table.subQuery) { + table.identifierChain = [{ subQuery: table.subQuery }]; + delete table.subQuery; + } + }); + + if (typeof suggestColumns.identifierChain !== 'undefined' && suggestColumns.identifierChain.length === 0) { + delete suggestColumns.identifierChain; + } + } + } else { + delete parser.yy.result.subQueries; + } + + if (typeof parser.yy.result.suggestJoinConditions !== 'undefined') { + if (typeof parser.yy.result.suggestJoinConditions.tables === 'undefined' || parser.yy.result.suggestJoinConditions.tables.length === 0) { + delete parser.yy.result.suggestJoinConditions; + } + } + + if (typeof parser.yy.result.suggestTables !== 'undefined' && typeof parser.yy.latestCommonTableExpressions !== 'undefined') { + var ctes = []; + parser.yy.latestCommonTableExpressions.forEach(function (cte) { + var suggestion = {name: cte.alias}; + if (parser.yy.result.suggestTables.prependFrom) { + suggestion.prependFrom = true + } + if (parser.yy.result.suggestTables.prependQuestionMark) { + suggestion.prependQuestionMark = true; + } + ctes.push(suggestion); + }); + if (ctes.length > 0) { + parser.yy.result.suggestCommonTableExpressions = ctes; + } + } + }; + + /** + * Impala supports referencing maps and arrays in the the table reference list i.e. + * + * SELECT m['foo'].bar.| FROM someDb.someTable t, t.someMap m; + * + * From this the tablePrimaries would look like: + * + * [ { alias: 't', identifierChain: [ { name: 'someDb' }, { name: 'someTable' } ] }, + * { alias: 'm', identifierChain: [ { name: 't' }, { name: 'someMap' } ] } ] + * + * with an identifierChain from the select list: + * + * [ { name: 'm', keySet: true }, { name: 'bar' } ] + * + * Calling this would return an expanded identifierChain, given the above it would be: + * + * [ { name: 't' }, { name: 'someMap', keySet: true }, { name: 'bar' } ] + */ + parser.expandImpalaIdentifierChain = function (tablePrimaries, identifierChain) { + var expandedChain = identifierChain.concat(); // Clone in case it's called multiple times. + if (typeof expandedChain === 'undefined' || expandedChain.length === 0) { + return identifierChain; + } + var expand = function (identifier, expandedChain) { + var foundPrimary = tablePrimaries.filter(function (tablePrimary) { + var primaryIdentifier = tablePrimary.alias; + if (!primaryIdentifier && tablePrimary.identifierChain && tablePrimary.identifierChain.length > 0) { + primaryIdentifier = tablePrimary.identifierChain[tablePrimary.identifierChain.length - 1].name; + } + return equalIgnoreCase(primaryIdentifier, identifier); + }); + + if (foundPrimary.length === 1 && foundPrimary[0].identifierChain) { + var parentPrimary = tablePrimaries.filter(function (tablePrimary) { + return equalIgnoreCase(tablePrimary.alias, foundPrimary[0].identifierChain[0].name); + }); + if (parentPrimary.length === 1) { + var keySet = expandedChain[0].keySet; + var secondPart = expandedChain.slice(1); + var firstPart = []; + // Clone to make sure we don't add keySet to the primaries + foundPrimary[0].identifierChain.forEach(function (identifier) { + firstPart.push({name: identifier.name}); + }); + if (keySet && firstPart.length > 0) { + firstPart[firstPart.length - 1].keySet = true; + } + + if (firstPart.length === 0 || typeof secondPart === 'undefined' || secondPart.length === 0) { + return firstPart; + } + var result = firstPart.concat(secondPart); + if (result.length > 0) { + return expand(firstPart[0].name, result); + } else { + return result; + } + } + } + return expandedChain; + }; + return expand(expandedChain[0].name, expandedChain); + }; + + parser.identifyPartials = function (beforeCursor, afterCursor) { + var beforeMatch = beforeCursor.match(/[0-9a-zA-Z_]*$/); + var afterMatch = afterCursor.match(/^[0-9a-zA-Z_]*(?:\((?:[^)]*\))?)?/); + return {left: beforeMatch ? beforeMatch[0].length : 0, right: afterMatch ? afterMatch[0].length : 0}; + }; + + parser.expandLateralViews = function (lateralViews, originalIdentifierChain, columnSuggestion) { + var identifierChain = originalIdentifierChain.concat(); // Clone in case it's re-used + var firstIdentifier = identifierChain[0]; + if (typeof lateralViews !== 'undefined') { + lateralViews.concat().reverse().forEach(function (lateralView) { + if (!lateralView.udtf.expression.columnReference) { + return; + } + if (equalIgnoreCase(firstIdentifier.name, lateralView.tableAlias) && identifierChain.length > 1) { + identifierChain.shift(); + firstIdentifier = identifierChain[0]; + if (columnSuggestion) { + delete parser.yy.result.suggestKeywords; + } + } else if (equalIgnoreCase(firstIdentifier.name, lateralView.tableAlias) && identifierChain.length === 1 && typeof parser.yy.result.suggestColumns !== 'undefined') { + if (columnSuggestion) { + if (typeof parser.yy.result.suggestIdentifiers === 'undefined') { + parser.yy.result.suggestIdentifiers = []; + } + lateralView.columnAliases.forEach(function (columnAlias) { + parser.yy.result.suggestIdentifiers.push({name: columnAlias, type: 'alias'}); + }); + delete parser.yy.result.suggestColumns; + delete parser.yy.result.suggestKeywords; + } + return identifierChain; + } + if (lateralView.columnAliases.indexOf(firstIdentifier.name) !== -1) { + if (lateralView.columnAliases.length === 2 && lateralView.udtf.function.toLowerCase() === 'explode' && equalIgnoreCase(firstIdentifier.name, lateralView.columnAliases[0])) { + identifierChain[0] = {name: 'key'}; + } else if (lateralView.columnAliases.length === 2 && lateralView.udtf.function.toLowerCase() === 'explode' && equalIgnoreCase(firstIdentifier.name, lateralView.columnAliases[1])) { + identifierChain[0] = {name: 'value'}; + } else { + identifierChain[0] = {name: 'item'}; + } + identifierChain = lateralView.udtf.expression.columnReference.concat(identifierChain); + firstIdentifier = identifierChain[0]; + } + }); + } + return identifierChain; + }; + + var addCleanTablePrimary = function (tables, tablePrimary) { + if (tablePrimary.alias) { + tables.push({alias: tablePrimary.alias, identifierChain: tablePrimary.identifierChain}); + } else { + tables.push({identifierChain: tablePrimary.identifierChain}); + } + }; + + parser.expandIdentifierChain = function (options) { + var wrapper = options.wrapper; + var anyOwner = options.anyOwner; + var isColumnWrapper = options.isColumnWrapper; + var isColumnLocation = options.isColumnLocation; + var tablePrimaries = options.tablePrimaries || parser.yy.latestTablePrimaries; + + if (typeof wrapper.identifierChain === 'undefined' || typeof tablePrimaries === 'undefined') { + return; + } + var identifierChain = wrapper.identifierChain.concat(); + + if (tablePrimaries.length === 0) { + delete wrapper.identifierChain; + return; + } + + if (!anyOwner) { + tablePrimaries = filterTablePrimariesForOwner(tablePrimaries, wrapper.owner); + } + + if (identifierChain.length > 0 && identifierChain[identifierChain.length - 1].asterisk) { + var tables = []; + tablePrimaries.forEach(function (tablePrimary) { + if (identifierChain.length > 1 && !tablePrimary.subQueryAlias) { + if (identifierChain.length === 2 && equalIgnoreCase(tablePrimary.alias, identifierChain[0].name)) { + addCleanTablePrimary(tables, tablePrimary); + } else if (identifierChain.length === 2 && equalIgnoreCase(tablePrimary.identifierChain[0].name, identifierChain[0].name)) { + addCleanTablePrimary(tables, tablePrimary); + } else if (identifierChain.length === 3 && tablePrimary.identifierChain.length > 1 && + equalIgnoreCase(tablePrimary.identifierChain[0].name, identifierChain[0].name) && + equalIgnoreCase(tablePrimary.identifierChain[1].name, identifierChain[1].name)) { + addCleanTablePrimary(tables, tablePrimary); + } + } else { + if (tablePrimary.subQueryAlias) { + tables.push({identifierChain: [{subQuery: tablePrimary.subQueryAlias}]}); + } else { + addCleanTablePrimary(tables, tablePrimary); + } + } + }); + // Possible Joins + if (tables.length > 0) { + wrapper.tables = tables; + delete wrapper.identifierChain; + return; + } + } + + // Impala can have references to maps or array, i.e. FROM table t, t.map m + // We need to replace those in the identifierChain + if (parser.isImpala()) { + var lengthBefore = identifierChain.length; + identifierChain = parser.expandImpalaIdentifierChain(tablePrimaries, identifierChain); + // Change type of any locations marked as table + if (wrapper.type === 'table' && identifierChain.length > lengthBefore) { + wrapper.type = 'column'; + } + wrapper.identifierChain = identifierChain; + } + // Expand exploded views in the identifier chain + if (parser.isHive() && identifierChain.length > 0) { + identifierChain = parser.expandLateralViews(parser.yy.lateralViews, identifierChain); + wrapper.identifierChain = identifierChain; + } + + // IdentifierChain contains a possibly started identifier or empty, example: a.b.c = ['a', 'b', 'c'] + // Reduce the tablePrimaries to the one that matches the first identifier if found + var foundPrimary; + var doubleMatch = false; + var aliasMatch = false; + if (identifierChain.length > 0) { + for (var i = 0; i < tablePrimaries.length; i++) { + if (tablePrimaries[i].subQueryAlias) { + if (equalIgnoreCase(tablePrimaries[i].subQueryAlias, identifierChain[0].name)) { + foundPrimary = tablePrimaries[i]; + } + } else if (equalIgnoreCase(tablePrimaries[i].alias, identifierChain[0].name)) { + foundPrimary = tablePrimaries[i]; + aliasMatch = true; + break; + } else if (tablePrimaries[i].identifierChain.length > 1 && identifierChain.length > 1 && + equalIgnoreCase(tablePrimaries[i].identifierChain[0].name, identifierChain[0].name) && + equalIgnoreCase(tablePrimaries[i].identifierChain[1].name, identifierChain[1].name)) { + foundPrimary = tablePrimaries[i]; + doubleMatch = true; + break; + } else if (!foundPrimary && equalIgnoreCase(tablePrimaries[i].identifierChain[0].name, identifierChain[0].name) && identifierChain.length > (isColumnLocation ? 1 : 0)) { + foundPrimary = tablePrimaries[i]; + // No break as first two can still match. + } else if (!foundPrimary && tablePrimaries[i].identifierChain.length > 1 && !tablePrimaries[i].alias + && equalIgnoreCase(tablePrimaries[i].identifierChain[tablePrimaries[i].identifierChain.length - 1].name, identifierChain[0].name)) { + // This is for the case SELECT baa. FROM bla.baa, blo.boo; + foundPrimary = tablePrimaries[i]; + break; + } + } + } + + if (foundPrimary) { + if (foundPrimary.impalaComplex && wrapper.type === 'column') { + wrapper.type = 'complex'; + } + identifierChain.shift(); + if (doubleMatch) { + identifierChain.shift(); + } + } else if (tablePrimaries.length === 1 && !isColumnWrapper) { + foundPrimary = tablePrimaries[0]; + } + + if (foundPrimary) { + if (isColumnWrapper) { + wrapper.identifierChain = identifierChain; + if (foundPrimary.subQueryAlias) { + wrapper.tables = [{ subQuery: foundPrimary.subQueryAlias }]; + } else if (foundPrimary.alias) { + if (!isColumnLocation && isColumnWrapper && aliasMatch) { + // TODO: add alias on table in suggestColumns (needs support in sqlAutocomplete3.js) + // the case is: SELECT cu.| FROM customers cu; + // This prevents alias from being added automatically in sqlAutocompleter3.js + wrapper.tables = [{ identifierChain: foundPrimary.identifierChain }]; + } else { + wrapper.tables = [{ identifierChain: foundPrimary.identifierChain, alias: foundPrimary.alias }]; + } + } else { + wrapper.tables = [{ identifierChain: foundPrimary.identifierChain }]; + } + } else { + if (foundPrimary.subQueryAlias) { + identifierChain.unshift({ subQuery: foundPrimary.subQueryAlias }); + } else { + identifierChain = foundPrimary.identifierChain.concat(identifierChain); + } + if (wrapper.tables) { + wrapper.tables.push({identifierChain: identifierChain}); + delete wrapper.identifierChain; + } else { + wrapper.identifierChain = identifierChain; + } + } + } else { + if (isColumnWrapper) { + wrapper.tables = []; + } + tablePrimaries.forEach(function (tablePrimary) { + var targetTable = tablePrimary.subQueryAlias ? { subQuery: tablePrimary.subQueryAlias } : { identifierChain: tablePrimary.identifierChain } ; + if (tablePrimary.alias) { + targetTable.alias = tablePrimary.alias; + } + if (wrapper.tables) { + wrapper.tables.push(targetTable) + } + }); + } + delete wrapper.owner; + wrapper.linked = true; + }; + + var suggestLateralViewAliasesAsIdentifiers = function () { + if (typeof parser.yy.lateralViews === 'undefined' || parser.yy.lateralViews.length === 0) { + return; + } + if (typeof parser.yy.result.suggestIdentifiers === 'undefined') { + parser.yy.result.suggestIdentifiers = []; + } + parser.yy.lateralViews.forEach(function (lateralView) { + if (typeof lateralView.tableAlias !== 'undefined') { + parser.yy.result.suggestIdentifiers.push({name: lateralView.tableAlias + '.', type: 'alias'}); + } + lateralView.columnAliases.forEach(function (columnAlias) { + parser.yy.result.suggestIdentifiers.push({name: columnAlias, type: 'alias'}); + }); + }); + if (parser.yy.result.suggestIdentifiers.length === 0) { + delete parser.yy.result.suggestIdentifiers; + } + }; + + var filterTablePrimariesForOwner = function (tablePrimaries, owner) { + var result = []; + tablePrimaries.forEach(function (primary) { + if (typeof owner === 'undefined' && typeof primary.owner === 'undefined') { + result.push(primary); + } else if (owner === primary.owner) { + result.push(primary); + } + }); + return result; + }; + + var convertTablePrimariesToSuggestions = function (tablePrimaries) { + var tables = []; + var identifiers = []; + tablePrimaries.forEach(function (tablePrimary) { + if (tablePrimary.identifierChain && tablePrimary.identifierChain.length > 0) { + var table = {identifierChain: tablePrimary.identifierChain}; + if (tablePrimary.alias) { + table.alias = tablePrimary.alias; + identifiers.push({name: table.alias + '.', type: 'alias'}); + if (parser.isImpala()) { + var testForImpalaAlias = [{name: table.alias}]; + var result = parser.expandImpalaIdentifierChain(tablePrimaries, testForImpalaAlias); + if (result.length > 1) { + // Continue if it's a reference to a complex type + return; + } + } + } else { + var lastIdentifier = tablePrimary.identifierChain[tablePrimary.identifierChain.length - 1]; + if (typeof lastIdentifier.name !== 'undefined') { + identifiers.push({name: lastIdentifier.name + '.', type: 'table'}); + } else if (typeof lastIdentifier.subQuery !== 'undefined') { + identifiers.push({name: lastIdentifier.subQuery + '.', type: 'sub-query'}); + } + } + tables.push(table); + } else if (tablePrimary.subQueryAlias) { + identifiers.push({name: tablePrimary.subQueryAlias + '.', type: 'sub-query'}); + tables.push({identifierChain: [{subQuery: tablePrimary.subQueryAlias}]}); + } + }); + if (identifiers.length > 0) { + if (typeof parser.yy.result.suggestIdentifiers === 'undefined') { + parser.yy.result.suggestIdentifiers = identifiers; + } else { + parser.yy.result.suggestIdentifiers = identifiers.concat(parser.yy.result.suggestIdentifiers); + } + } + parser.yy.result.suggestColumns.tables = tables; + if (parser.yy.result.suggestColumns.identifierChain && parser.yy.result.suggestColumns.identifierChain.length === 0) { + delete parser.yy.result.suggestColumns.identifierChain; + } + parser.yy.result.suggestColumns.linked = true; + }; + + var linkTablePrimaries = function () { + if (!parser.yy.cursorFound || typeof parser.yy.latestTablePrimaries === 'undefined') { + return; + } + + SIMPLE_TABLE_REF_SUGGESTIONS.forEach(function (suggestionType) { + if (typeof parser.yy.result[suggestionType] !== 'undefined' && parser.yy.result[suggestionType].tablePrimaries && !parser.yy.result[suggestionType].linked) { + parser.yy.result[suggestionType].tables = []; + parser.yy.result[suggestionType].tablePrimaries.forEach(function (tablePrimary) { + if (!tablePrimary.subQueryAlias) { + parser.yy.result[suggestionType].tables.push(tablePrimary.alias ? { + identifierChain: tablePrimary.identifierChain.concat(), + alias: tablePrimary.alias + } : {identifierChain: tablePrimary.identifierChain.concat()}); + } + }); + delete parser.yy.result[suggestionType].tablePrimaries; + parser.yy.result[suggestionType].linked = true; + } + }); + + if (typeof parser.yy.result.suggestColumns !== 'undefined' && !parser.yy.result.suggestColumns.linked) { + var tablePrimaries = filterTablePrimariesForOwner(parser.yy.latestTablePrimaries, parser.yy.result.suggestColumns.owner); + if (!parser.yy.result.suggestColumns.tables) { + parser.yy.result.suggestColumns.tables = []; + } + if (parser.yy.subQueries.length > 0) { + parser.yy.result.subQueries = parser.yy.subQueries; + } + if (typeof parser.yy.result.suggestColumns.identifierChain === 'undefined' || parser.yy.result.suggestColumns.identifierChain.length === 0) { + if (tablePrimaries.length > 1) { + convertTablePrimariesToSuggestions(tablePrimaries); + } else { + suggestLateralViewAliasesAsIdentifiers(); + if (tablePrimaries.length === 1 && (tablePrimaries[0].alias || tablePrimaries[0].subQueryAlias)) { + convertTablePrimariesToSuggestions(tablePrimaries); + } + parser.expandIdentifierChain({ wrapper: parser.yy.result.suggestColumns, anyOwner: false, isColumnWrapper: true }); + } + } else { + // Expand exploded views in the identifier chain + if (parser.isHive() && !parser.yy.result.suggestColumns.linked) { + var originalLength = parser.yy.result.suggestColumns.identifierChain.length; + parser.yy.result.suggestColumns.identifierChain = parser.expandLateralViews(parser.yy.lateralViews, parser.yy.result.suggestColumns.identifierChain, true); + // Drop '*' keyword for lateral views + if (typeof parser.yy.result.suggestColumns !== 'undefined') { + if (parser.yy.result.suggestColumns.identifierChain.length > originalLength && + typeof parser.yy.result.suggestKeywords !== 'undefined' && + parser.yy.result.suggestKeywords.length === 1 && + parser.yy.result.suggestKeywords[0].value === '*') { + delete parser.yy.result.suggestKeywords; + } + parser.expandIdentifierChain({ wrapper: parser.yy.result.suggestColumns, anyOwner: false, isColumnWrapper: true }); + } + } else { + parser.expandIdentifierChain({ wrapper: parser.yy.result.suggestColumns, anyOwner: false, isColumnWrapper: true }); + } + } + } + + if (typeof parser.yy.result.colRef !== 'undefined' && !parser.yy.result.colRef.linked) { + parser.expandIdentifierChain({ wrapper: parser.yy.result.colRef }); + + var primaries = filterTablePrimariesForOwner(parser.yy.latestTablePrimaries); + if (primaries.length === 0 || (primaries.length > 1 && parser.yy.result.colRef.identifierChain.length === 1)) { + parser.yy.result.colRef.identifierChain = []; + } + } + if (typeof parser.yy.result.suggestKeyValues !== 'undefined' && !parser.yy.result.suggestKeyValues.linked) { + parser.expandIdentifierChain({ wrapper: parser.yy.result.suggestKeyValues }); + } + }; + + parser.getSubQuery = function (cols) { + var columns = []; + cols.selectList.forEach(function (col) { + var result = {}; + if (col.alias) { + result.alias = col.alias; + } + if (col.valueExpression && col.valueExpression.columnReference) { + result.identifierChain = col.valueExpression.columnReference + } else if (col.asterisk) { + result.identifierChain = [{asterisk: true}]; + } + if (col.valueExpression && col.valueExpression.types && col.valueExpression.types.length === 1) { + result.type = col.valueExpression.types[0]; + } + + columns.push(result); + }); + + return { + columns: columns + }; + }; + + parser.addTablePrimary = function (ref) { + if (typeof parser.yy.latestTablePrimaries === 'undefined') { + parser.yy.latestTablePrimaries = []; + } + parser.yy.latestTablePrimaries.push(ref); + }; + + parser.suggestFileFormats = function () { + if (parser.isHive()) { + parser.suggestKeywords(['AVRO', 'INPUTFORMAT', 'ORC', 'PARQUET', 'RCFILE', 'SEQUENCEFILE', 'TEXTFILE']); + } else { + parser.suggestKeywords(['AVRO', 'KUDU', 'ORC', 'PARQUET', 'RCFILE', 'SEQUENCEFILE', 'TEXTFILE']); + } + }; + + parser.getKeywordsForOptionalsLR = function (optionals, keywords, override) { + var result = []; + + for (var i = 0; i < optionals.length; i++) { + if (!optionals[i] && (typeof override === 'undefined' || override[i])) { + if (keywords[i] instanceof Array) { + result = result.concat(keywords[i]); + } else { + result.push(keywords[i]); + } + } else if (optionals[i]) { + break; + } + } + return result; + }; + + parser.suggestDdlAndDmlKeywords = function (extraKeywords) { + var keywords = ['ALTER', 'CREATE', 'DESCRIBE', 'DROP', 'GRANT', 'INSERT', 'REVOKE', 'SELECT', 'SET', 'SHOW', 'TRUNCATE', 'UPDATE', 'USE', 'WITH']; + + if (extraKeywords) { + keywords = keywords.concat(extraKeywords); + } + + if (parser.isHive()) { + keywords = keywords.concat(['ABORT', 'ANALYZE TABLE', 'DELETE', 'EXPORT', 'IMPORT', 'LOAD', 'MERGE', 'MSCK', 'RELOAD FUNCTION', 'RESET']); + } + + if (parser.isImpala()) { + keywords = keywords.concat(['COMMENT ON', 'COMPUTE', 'DELETE', 'INVALIDATE METADATA', 'LOAD', 'REFRESH', 'UPSERT']); + } + + parser.suggestKeywords(keywords); + }; + + parser.checkForSelectListKeywords = function (selectList) { + if (selectList.length === 0) { + return; + } + var last = selectList[selectList.length - 1]; + if (!last || !last.valueExpression) { + return; + } + var valueExpressionKeywords = parser.getValueExpressionKeywords(last.valueExpression); + var keywords = []; + if (last.suggestKeywords) { + keywords = keywords.concat(last.suggestKeywords); + } + if (valueExpressionKeywords.suggestKeywords) { + keywords = keywords.concat(valueExpressionKeywords.suggestKeywords); + } + if (valueExpressionKeywords.suggestColRefKeywords) { + parser.suggestColRefKeywords(valueExpressionKeywords.suggestColRefKeywords); + parser.addColRefIfExists(last.valueExpression); + } + if (!last.alias) { + keywords.push('AS'); + } + if (keywords.length > 0) { + parser.suggestKeywords(keywords); + } + }; + + parser.checkForKeywords = function (expression) { + if (expression) { + if (expression.suggestKeywords && expression.suggestKeywords.length > 0) { + parser.suggestKeywords(expression.suggestKeywords); + } + if (expression.suggestColRefKeywords) { + parser.suggestColRefKeywords(expression.suggestColRefKeywords); + parser.addColRefIfExists(expression); + } + } + }; + + parser.createWeightedKeywords = function (keywords, weight) { + var result = []; + keywords.forEach(function (keyword) { + if (typeof keyword.weight !== 'undefined') { + keyword.weight = weight + (keyword.weight / 10); + result.push(keyword); + } else { + result.push({value: keyword, weight: weight}); + } + }); + return result; + }; + + parser.suggestKeywords = function (keywords) { + var weightedKeywords = []; + if (keywords.length == 0) { + return; + } + keywords.forEach(function (keyword) { + if (typeof keyword.weight !== 'undefined') { + weightedKeywords.push(keyword); + } else { + weightedKeywords.push({value: keyword, weight: -1}) + } + }); + weightedKeywords.sort(function (a, b) { + if (a.weight !== b.weight) { + return b.weight - a.weight; + } + return a.value.localeCompare(b.value); + }); + parser.yy.result.suggestKeywords = weightedKeywords; + }; + + parser.suggestColRefKeywords = function (colRefKeywords) { + parser.yy.result.suggestColRefKeywords = colRefKeywords; + }; + + parser.suggestTablesOrColumns = function (identifier) { + if (typeof parser.yy.latestTablePrimaries == 'undefined') { + parser.suggestTables({identifierChain: [{name: identifier}]}); + return; + } + var tableRef = parser.yy.latestTablePrimaries.filter(function (tablePrimary) { + return equalIgnoreCase(tablePrimary.alias, identifier); + }); + if (tableRef.length > 0) { + parser.suggestColumns({identifierChain: [{name: identifier}]}); + } else { + parser.suggestTables({identifierChain: [{name: identifier}]}); + } + }; + + parser.suggestFunctions = function (details) { + parser.yy.result.suggestFunctions = details || {}; + }; + + parser.suggestAggregateFunctions = function () { + var primaries = []; + var aliases = {}; + parser.yy.latestTablePrimaries.forEach(function (primary) { + if (typeof primary.alias !== 'undefined') { + aliases[primary.alias] = true; + } + // Drop if the first one refers to a table alias (...FROM tbl t, t.map tm ...) + if (typeof primary.identifierChain !== 'undefined' && !aliases[primary.identifierChain[0].name] && typeof primary.owner === 'undefined') { + primaries.push(primary); + } + }); + parser.yy.result.suggestAggregateFunctions = {tablePrimaries: primaries}; + }; + + parser.suggestAnalyticFunctions = function () { + parser.yy.result.suggestAnalyticFunctions = true; + }; + + parser.suggestSetOptions = function () { + parser.yy.result.suggestSetOptions = true; + }; + + parser.suggestIdentifiers = function (identifiers) { + parser.yy.result.suggestIdentifiers = identifiers; + }; + + parser.suggestColumns = function (details) { + if (typeof details === 'undefined') { + details = {identifierChain: []}; + } else if (typeof details.identifierChain === 'undefined') { + details.identifierChain = []; + } + parser.yy.result.suggestColumns = details; + }; + + parser.suggestGroupBys = function (details) { + parser.yy.result.suggestGroupBys = details || {}; + }; + + parser.suggestOrderBys = function (details) { + parser.yy.result.suggestOrderBys = details || {}; + }; + + parser.suggestFilters = function (details) { + parser.yy.result.suggestFilters = details || {}; + }; + + parser.suggestKeyValues = function (details) { + parser.yy.result.suggestKeyValues = details || {}; + }; + + parser.suggestTables = function (details) { + parser.yy.result.suggestTables = details || {}; + }; + + var adjustLocationForCursor = function (location) { + // columns are 0-based and lines not, so add 1 to cols + var newLocation = { + first_line: location.first_line, + last_line: location.last_line, + first_column: location.first_column + 1, + last_column: location.last_column + 1 + }; + if (parser.yy.cursorFound) { + if (parser.yy.cursorFound.first_line === newLocation.first_line && parser.yy.cursorFound.last_column <= newLocation.first_column) { + var additionalSpace = parser.yy.partialLengths.left + parser.yy.partialLengths.right; + additionalSpace -= parser.yy.partialCursor ? 1 : 3; // For some reason the normal cursor eats 3 positions. + newLocation.first_column = newLocation.first_column + additionalSpace; + newLocation.last_column = newLocation.last_column + additionalSpace; + } + } + return newLocation; + }; + + parser.addFunctionLocation = function (location, functionName) { + // Remove trailing '(' from location + var adjustedLocation = { + first_line: location.first_line, + last_line: location.last_line, + first_column: location.first_column, + last_column: location.last_column - 1 + }; + parser.yy.locations.push({ + type: 'function', + location: adjustLocationForCursor(adjustedLocation), + function: functionName.toLowerCase() + }); + }; + + parser.addStatementLocation = function (location) { + // Don't report lonely cursor as a statement + if (location.first_line === location.last_line && Math.abs(location.last_column - location.first_column) === 1) { + return; + } + var adjustedLocation; + if (parser.yy.cursorFound && parser.yy.cursorFound.last_line === location.last_line && + parser.yy.cursorFound.first_column >= location.first_column && parser.yy.cursorFound.last_column <= location.last_column) { + var additionalSpace = parser.yy.partialLengths.left + parser.yy.partialLengths.right; + adjustedLocation = { + first_line: location.first_line, + last_line: location.last_line, + first_column: location.first_column + 1, + last_column: location.last_column + additionalSpace - (parser.yy.partialCursor ? 0 : 2) + } + } else { + adjustedLocation = { + first_line: location.first_line, + last_line: location.last_line, + first_column: location.first_column + 1, + last_column: location.last_column + 1 + } + } + + parser.yy.locations.push({ + type: 'statement', + location: adjustedLocation + }); + }; + + parser.firstDefined = function () { + for (var i = 0; i + 1 < arguments.length; i += 2) { + if (arguments[i]) { + return arguments[i + 1]; + } + } + }; + + parser.addClauseLocation = function (type, precedingLocation, locationIfPresent, isCursor) { + var location; + if (isCursor) { + if (parser.yy.partialLengths.left === 0 && parser.yy.partialLengths.right === 0) { + location = { + type: type, + missing: true, + location: adjustLocationForCursor({ + first_line: precedingLocation.last_line, + first_column: precedingLocation.last_column, + last_line: precedingLocation.last_line, + last_column: precedingLocation.last_column + }) + } + } else { + location = { + type: type, + missing: false, + location: { + first_line: locationIfPresent.last_line, + first_column: locationIfPresent.last_column - 1, + last_line: locationIfPresent.last_line, + last_column: locationIfPresent.last_column - 1 + parser.yy.partialLengths.right + parser.yy.partialLengths.left + } + } + } + } else { + location = { + type: type, + missing: !locationIfPresent, + location: adjustLocationForCursor(locationIfPresent || { + first_line: precedingLocation.last_line, + first_column: precedingLocation.last_column, + last_line: precedingLocation.last_line, + last_column: precedingLocation.last_column + }) + }; + } + if (parser.isInSubquery()) { + location.subquery = true; + } + parser.yy.locations.push(location) + }; + + parser.addStatementTypeLocation = function (identifier, location, additionalText) { + if (!parser.isImpala()) { + return; + } + var loc = { + type: 'statementType', + location: adjustLocationForCursor(location), + identifier: identifier + }; + if (typeof additionalText !== 'undefined') { + switch (identifier) { + case 'ALTER': + if (/ALTER\s+VIEW/i.test(additionalText)) { + loc.identifier = 'ALTER VIEW'; + } else { + loc.identifier = 'ALTER TABLE'; + } + break; + case 'COMPUTE': + loc.identifier = 'COMPUTE STATS'; + break; + case 'CREATE': + if (/CREATE\s+VIEW/i.test(additionalText)) { + loc.identifier = 'CREATE VIEW'; + } else if (/CREATE\s+TABLE/i.test(additionalText)) { + loc.identifier = 'CREATE TABLE'; + } else if (/CREATE\s+DATABASE/i.test(additionalText)) { + loc.identifier = 'CREATE DATABASE'; + } else if (/CREATE\s+ROLE/i.test(additionalText)) { + loc.identifier = 'CREATE ROLE'; + } else if (/CREATE\s+FUNCTION/i.test(additionalText)) { + loc.identifier = 'CREATE FUNCTION'; + } else { + loc.identifier = 'CREATE TABLE'; + } + break; + case 'DROP': + if (/DROP\s+VIEW/i.test(additionalText)) { + loc.identifier = 'DROP VIEW'; + } else if (/DROP\s+TABLE/i.test(additionalText)) { + loc.identifier = 'DROP TABLE'; + } else if (/DROP\s+DATABASE/i.test(additionalText)) { + loc.identifier = 'DROP DATABASE'; + } else if (/DROP\s+ROLE/i.test(additionalText)) { + loc.identifier = 'DROP ROLE'; + } else if (/DROP\s+STATS/i.test(additionalText)) { + loc.identifier = 'DROP STATS'; + } else if (/DROP\s+FUNCTION/i.test(additionalText)) { + loc.identifier = 'DROP FUNCTION'; + } else { + loc.identifier = 'DROP TABLE'; + } + break; + case 'INVALIDATE': + loc.identifier = 'INVALIDATE METADATA'; + break; + case 'LOAD': + loc.identifier = 'LOAD DATA'; + break; + case 'TRUNCATE': + loc.identifier = 'TRUNCATE TABLE'; + break; + default: + } + } + parser.yy.locations.push(loc); + }; + + parser.addFileLocation = function (location, path) { + parser.yy.locations.push({ + type: 'file', + location: adjustLocationForCursor(location), + path: path + }); + }; + + parser.addDatabaseLocation = function (location, identifierChain) { + parser.yy.locations.push({ + type: 'database', + location: adjustLocationForCursor(location), + identifierChain: identifierChain + }); + }; + + parser.addTableLocation = function (location, identifierChain) { + parser.yy.locations.push({ + type: 'table', + location: adjustLocationForCursor(location), + identifierChain: identifierChain + }); + }; + + parser.addColumnAliasLocation = function (location, alias, parentLocation) { + var aliasLocation = { + type: 'alias', + source: 'column', + alias: alias, + location: adjustLocationForCursor(location), + parentLocation: adjustLocationForCursor(parentLocation) + }; + if (parser.yy.locations.length && parser.yy.locations[parser.yy.locations.length - 1].type === 'column') { + var closestColumn = parser.yy.locations[parser.yy.locations.length - 1]; + if (closestColumn.location.first_line === aliasLocation.parentLocation.first_line && + closestColumn.location.last_line === aliasLocation.parentLocation.last_line && + closestColumn.location.first_column === aliasLocation.parentLocation.first_column && + closestColumn.location.last_column === aliasLocation.parentLocation.last_column) { + parser.yy.locations[parser.yy.locations.length - 1].alias = alias; + } + } + parser.yy.locations.push(aliasLocation); + }; + + parser.addTableAliasLocation = function (location, alias, identifierChain) { + parser.yy.locations.push({ + type: 'alias', + source: 'table', + alias: alias, + location: adjustLocationForCursor(location), + identifierChain: identifierChain + }); + }; + + parser.addSubqueryAliasLocation = function (location, alias) { + parser.yy.locations.push({ + type: 'alias', + source: 'subquery', + alias: alias, + location: adjustLocationForCursor(location) + }); + }; + + parser.addAsteriskLocation = function (location, identifierChain) { + parser.yy.locations.push({ + type: 'asterisk', + location: adjustLocationForCursor(location), + identifierChain: identifierChain + }); + }; + + parser.addVariableLocation = function (location, value) { + if (/\$\{[^}]*\}/.test(value)) { + parser.yy.locations.push({ + type: 'variable', + location: adjustLocationForCursor(location), + value: value + }); + } + }; + + parser.addColumnLocation = function (location, identifierChain) { + var isVariable = identifierChain.length && /\$\{[^}]*\}/.test(identifierChain[identifierChain.length - 1].name); + if (isVariable) { + parser.yy.locations.push({ + type: 'variable', + location: adjustLocationForCursor(location), + value: identifierChain[identifierChain.length - 1].name + }); + } else { + parser.yy.locations.push({ + type: 'column', + location: adjustLocationForCursor(location), + identifierChain: identifierChain, + qualified: identifierChain.length > 1 + }); + } + }; + + parser.addCteAliasLocation = function (location, alias) { + parser.yy.locations.push({ + type: 'alias', + source: 'cte', + alias: alias, + location: adjustLocationForCursor(location) + }); + }; + + parser.addUnknownLocation = function (location, identifierChain) { + var isVariable = identifierChain.length && /\$\{[^}]*\}/.test(identifierChain[identifierChain.length - 1].name); + var loc; + if (isVariable) { + loc = { + type: 'variable', + location: adjustLocationForCursor(location), + value: identifierChain[identifierChain.length - 1].name + }; + } else { + loc = { + type: 'unknown', + location: adjustLocationForCursor(location), + identifierChain: identifierChain, + qualified: identifierChain.length > 1 + }; + } + parser.yy.locations.push(loc); + return loc; + }; + + parser.addColRefToVariableIfExists = function (left, right) { + if (left && left.columnReference && left.columnReference.length && right && right.columnReference && right.columnReference.length && parser.yy.locations.length > 1) { + var addColRefToVariableLocation = function (variableValue, colRef) { + // See if colref is actually an alias + if (colRef.length === 1 && colRef[0].name) { + parser.yy.locations.some(function (location) { + if (location.type === 'column' && location.alias === colRef[0].name) { + colRef = location.identifierChain; + return true; + } + }); + } + + for (var i = parser.yy.locations.length - 1; i > 0; i--) { + var location = parser.yy.locations[i]; + if (location.type === 'variable' && location.value === variableValue) { + location.colRef = { identifierChain: colRef }; + break; + } + } + }; + + if (/\$\{[^}]*\}/.test(left.columnReference[0].name)) { + // left is variable + addColRefToVariableLocation(left.columnReference[0].name, right.columnReference); + } else if (/\$\{[^}]*\}/.test(right.columnReference[0].name)) { + // right is variable + addColRefToVariableLocation(right.columnReference[0].name, left.columnReference); + } + } + }; + + parser.suggestDatabases = function (details) { + parser.yy.result.suggestDatabases = details || {}; + }; + + parser.suggestHdfs = function (details) { + parser.yy.result.suggestHdfs = details || {}; + }; + + parser.suggestValues = function (details) { + parser.yy.result.suggestValues = details || {}; + }; + + parser.determineCase = function (text) { + if (!parser.yy.caseDetermined) { + parser.yy.lowerCase = text.toLowerCase() === text; + parser.yy.caseDetermined = true; + } + }; + + parser.handleQuotedValueWithCursor = function (lexer, yytext, yylloc, quoteChar) { + if (yytext.indexOf('\u2020') !== -1 || yytext.indexOf('\u2021') !== -1) { + parser.yy.partialCursor = yytext.indexOf('\u2021') !== -1; + var cursorIndex = parser.yy.partialCursor ? yytext.indexOf('\u2021') : yytext.indexOf('\u2020'); + parser.yy.cursorFound = { + first_line: yylloc.first_line, + last_line: yylloc.last_line, + first_column: yylloc.first_column + cursorIndex, + last_column: yylloc.first_column + cursorIndex + 1 + }; + var remainder = yytext.substring(cursorIndex + 1); + var remainingQuotes = (lexer.upcomingInput().match(new RegExp(quoteChar, 'g')) || []).length; + if (remainingQuotes > 0 && remainingQuotes & 1 != 0) { + parser.yy.missingEndQuote = false; + lexer.input(); + } else { + parser.yy.missingEndQuote = true; + lexer.unput(remainder); + } + lexer.popState(); + return true; + } + return false; + }; + + var lexerModified = false; + + /** + * Main parser function + */ + parser.parseSql = function (beforeCursor, afterCursor, dialect, debug) { + // Jison counts CRLF as two lines in the locations + beforeCursor = beforeCursor.replace(/\r\n|\n\r/gm, '\n'); + afterCursor = afterCursor.replace(/\r\n|\n\r/gm, '\n'); + parser.yy.result = {locations: []}; + parser.yy.lowerCase = false; + parser.yy.locations = []; + parser.yy.allLocations = []; + parser.yy.subQueries = []; + parser.yy.errors = []; + parser.yy.selectListAliases = []; + + parser.yy.locationsStack = []; + parser.yy.primariesStack = []; + parser.yy.lateralViewsStack = []; + parser.yy.subQueriesStack = []; + parser.yy.resultStack = []; + parser.yy.selectListAliasesStack = []; + + delete parser.yy.caseDetermined; + delete parser.yy.cursorFound; + delete parser.yy.partialCursor; + + parser.prepareNewStatement(); + + var REASONABLE_SURROUNDING_LENGTH = 150000; // About 3000 lines before and after + + if (beforeCursor.length > REASONABLE_SURROUNDING_LENGTH) { + if ((beforeCursor.length - beforeCursor.lastIndexOf(';')) > REASONABLE_SURROUNDING_LENGTH) { + // Bail out if the last complete statement is more than 150000 chars before + return {}; + } + // Cut it at the first statement found within 150000 chars before + var lastReasonableChunk = beforeCursor.substring(beforeCursor.length - REASONABLE_SURROUNDING_LENGTH); + beforeCursor = lastReasonableChunk.substring(lastReasonableChunk.indexOf(';') + 1); + } + + if (afterCursor.length > REASONABLE_SURROUNDING_LENGTH) { + if ((afterCursor.length - afterCursor.indexOf(';')) > REASONABLE_SURROUNDING_LENGTH) { + // No need to bail out for what's comes after, we can still get keyword completion + afterCursor = ''; + } else { + // Cut it at the last statement found within 150000 chars after + var firstReasonableChunk = afterCursor.substring(0, REASONABLE_SURROUNDING_LENGTH); + afterCursor = firstReasonableChunk.substring(0, firstReasonableChunk.lastIndexOf(';')); + } + } + + parser.yy.partialLengths = parser.identifyPartials(beforeCursor, afterCursor); + + if (parser.yy.partialLengths.left > 0) { + beforeCursor = beforeCursor.substring(0, beforeCursor.length - parser.yy.partialLengths.left); + } + + if (parser.yy.partialLengths.right > 0) { + afterCursor = afterCursor.substring(parser.yy.partialLengths.right); + } + + parser.yy.activeDialect = (dialect !== 'hive' && dialect !== 'impala') ? undefined : dialect; + + // Hack to set the inital state of the lexer without first having to hit a token + // has to be done as the first token found can be dependant on dialect + if (!lexerModified) { + var originalSetInput = parser.lexer.setInput; + parser.lexer.setInput = function (input, yy) { + var lexer = originalSetInput.bind(parser.lexer)(input, yy); + if (typeof parser.yy.activeDialect !== 'undefined') { + lexer.begin(parser.yy.activeDialect); + } + return lexer; + }; + lexerModified = true; + } + + var result; + try { + // Add |CURSOR| or |PARTIAL_CURSOR| to represent the different cursor states in the lexer + result = parser.parse(beforeCursor + (beforeCursor.length == 0 || /[\s\(]$$/.test(beforeCursor) ? ' \u2020 ' : '\u2021') + afterCursor); + } catch (err) { + // On any error try to at least return any existing result + if (typeof parser.yy.result === 'undefined') { + throw err; + } + if (debug) { + console.log(err); + console.error(err.stack); + } + result = parser.yy.result; + } + if (parser.yy.errors.length > 0) { + parser.yy.result.errors = parser.yy.errors; + if (debug) { + console.log(parser.yy.errors); + } + } + try { + linkTablePrimaries(); + parser.commitLocations(); + // Clean up and prioritize + prioritizeSuggestions(); + } catch (err) { + if (debug) { + console.log(err); + console.error(err.stack); + } + } + + + parser.yy.allLocations.sort(function (a, b) { + if (a.location.first_line !== b.location.first_line) { + return a.location.first_line - b.location.first_line; + } + if (a.location.first_column !== b.location.first_column) { + return a.location.first_column - b.location.first_column; + } + if (a.location.last_column !== b.location.last_column) { + return b.location.last_column - a.location.last_column; + } + return b.type.localeCompare(a.type); + }); + parser.yy.result.locations = parser.yy.allLocations; + + parser.yy.result.locations.forEach(function (location) { + delete location.linked; + }); + if (typeof parser.yy.result.suggestColumns !== 'undefined') { + delete parser.yy.result.suggestColumns.linked; + } + + SIMPLE_TABLE_REF_SUGGESTIONS.forEach(function (suggestionType) { + if (typeof parser.yy.result[suggestionType] !== 'undefined') { + delete parser.yy.result[suggestionType].linked; + } + }); + + if (typeof parser.yy.result.colRef !== 'undefined') { + delete parser.yy.result.colRef.linked; + } + if (typeof parser.yy.result.suggestKeyValues !== 'undefined') { + delete parser.yy.result.suggestKeyValues.linked; + } + + if (typeof result.error !== 'undefined' && typeof result.error.expected !== 'undefined') { + // Remove any expected tokens from other dialects, jison doesn't remove tokens from other lexer states. + var actualExpected = {}; + result.error.expected.forEach(function (expected) { + var match = expected.match(/\<([a-z]+)\>(.*)/); + if (match !== null) { + if (typeof parser.yy.activeDialect !== 'undefined' && parser.yy.activeDialect === match[1]) { + actualExpected[("'" + match[2])] = true; + } + } else if (expected.indexOf('CURSOR') == -1) { + actualExpected[expected] = true; + } + }); + result.error.expected = Object.keys(actualExpected); + } + + if (typeof result.error !== 'undefined' && result.error.recoverable) { + delete result.error; + } + + // Adjust all the statement locations to include white space surrounding them + var lastStatementLocation = null; + result.locations.forEach(function (location) { + if (location.type === 'statement') { + if (lastStatementLocation === null) { + location.location.first_line = 1; + location.location.first_column = 1; + } else { + location.location.first_line = lastStatementLocation.location.last_line; + location.location.first_column = lastStatementLocation.location.last_column + 1; + } + lastStatementLocation = location; + } + }); + + return result; + }; + }; + + var SYNTAX_PARSER_NOOP_FUNCTIONS = ['prepareNewStatement', 'addCommonTableExpressions', 'pushQueryState', 'popQueryState', 'suggestSelectListAliases', + 'suggestValueExpressionKeywords', 'getSelectListKeywords', 'getValueExpressionKeywords', 'addColRefIfExists', 'selectListNoTableSuggest', 'suggestJoinConditions', + 'suggestJoins', 'valueExpressionSuggest', 'applyTypeToSuggestions', 'applyArgumentTypesToSuggestions', 'commitLocations', 'identifyPartials', + 'getSubQuery', 'addTablePrimary', 'suggestFileFormats', 'suggestDdlAndDmlKeywords', 'checkForSelectListKeywords', 'checkForKeywords', + 'suggestKeywords', 'suggestColRefKeywords', 'suggestTablesOrColumns', 'suggestFunctions', 'suggestAggregateFunctions', 'suggestAnalyticFunctions', + 'suggestColumns', 'suggestGroupBys', 'suggestIdentifiers', 'suggestOrderBys', 'suggestFilters', 'suggestKeyValues', 'suggestTables', 'addFunctionLocation', + 'addStatementLocation', 'firstDefined', 'addClauseLocation', 'addStatementTypeLocation', 'addFileLocation', 'addDatabaseLocation', 'addColumnAliasLocation', + 'addTableAliasLocation', 'addSubqueryAliasLocation', 'addTableLocation', 'addAsteriskLocation', 'addVariableLocation', 'addColumnLocation', 'addCteAliasLocation', + 'addUnknownLocation', 'addColRefToVariableIfExists', 'suggestDatabases', 'suggestHdfs', 'suggestValues']; + + var SYNTAX_PARSER_NOOP = function () {}; + + var initSyntaxParser = function (parser) { + + // Noop functions for compatibility with the autocomplete parser as the grammar is shared + SYNTAX_PARSER_NOOP_FUNCTIONS.forEach(function (noopFn) { + parser[noopFn] = SYNTAX_PARSER_NOOP + }); + + parser.yy.locations = [{}]; + + parser.determineCase = function (text) { + if (!parser.yy.caseDetermined) { + parser.yy.lowerCase = text.toLowerCase() === text; + parser.yy.caseDetermined = true; + } + }; + + parser.getKeywordsForOptionalsLR = function () { + return []; + }; + + parser.mergeSuggestKeywords = function () { + return {}; + }; + + parser.getTypeKeywords = function () { + return []; + }; + + parser.getColumnDataTypeKeywords = function () { + return []; + }; + + parser.findCaseType = function () { + return {types: ['T']}; + }; + + parser.findReturnTypes = function (functionName) { + return ['T']; + }; + + parser.isHive = function () { + return parser.yy.activeDialect === 'hive'; + }; + + parser.isImpala = function () { + return parser.yy.activeDialect === 'impala'; + }; + + parser.expandImpalaIdentifierChain = function () { + return []; + }; + + parser.expandIdentifierChain = function () { + return []; + }; + + parser.expandLateralViews = function () { + return []; + }; + + parser.createWeightedKeywords = function () { + return []; + }; + + parser.handleQuotedValueWithCursor = function (lexer, yytext, yylloc, quoteChar) { + if (yytext.indexOf('\u2020') !== -1 || yytext.indexOf('\u2021') !== -1) { + parser.yy.partialCursor = yytext.indexOf('\u2021') !== -1; + var cursorIndex = parser.yy.partialCursor ? yytext.indexOf('\u2021') : yytext.indexOf('\u2020'); + parser.yy.cursorFound = { + first_line: yylloc.first_line, + last_line: yylloc.last_line, + first_column: yylloc.first_column + cursorIndex, + last_column: yylloc.first_column + cursorIndex + 1 + }; + var remainder = yytext.substring(cursorIndex + 1); + var remainingQuotes = (lexer.upcomingInput().match(new RegExp(quoteChar, 'g')) || []).length; + if (remainingQuotes > 0 && remainingQuotes & 1 != 0) { + parser.yy.missingEndQuote = false; + lexer.input(); + } else { + parser.yy.missingEndQuote = true; + lexer.unput(remainder); + } + lexer.popState(); + return true; + } + return false; + }; + + var lexerModified = false; + + parser.yy.parseError = function (str, hash) { + parser.yy.error = hash; + }; + + var IGNORED_EXPECTED = { + ';': true, + '.': true, + 'EOF': true, + 'UNSIGNED_INTEGER': true, + 'UNSIGNED_INTEGER_E': true, + 'REGULAR_IDENTIFIER': true, // TODO: Indicate that an identifier was expected + 'CURSOR': true, + 'PARTIAL_CURSOR': true, + 'HDFS_START_QUOTE': true, + 'HDFS_PATH': true, + 'HDFS_END_QUOTE' : true, + 'COMPARISON_OPERATOR': true, // TODO: Expand in results when found + 'ARITHMETIC_OPERATOR' : true, // TODO: Expand in results when found + 'VARIABLE_REFERENCE': true, + 'BACKTICK': true, + 'VALUE': true, + 'PARTIAL_VALUE': true, + 'SINGLE_QUOTE': true, + 'DOUBLE_QUOTE': true + }; + + var CLEAN_EXPECTED = { + 'BETWEEN_AND': 'AND', + 'OVERWRITE_DIRECTORY' : 'OVERWRITE', + 'STORED_AS_DIRECTORIES' : 'STORED', + 'LIKE_PARQUET' : 'LIKE', + 'PARTITION_VALUE' : 'PARTITION' + }; + + parser.parseSyntax = function (beforeCursor, afterCursor, dialect, debug) { + parser.yy.caseDetermined = false; + parser.yy.error = undefined; + + parser.yy.latestTablePrimaries = []; + parser.yy.subQueries = []; + parser.yy.selectListAliases = []; + parser.yy.latestTablePrimaries = []; + + parser.yy.activeDialect = (dialect !== 'hive' && dialect !== 'impala') ? undefined : dialect; + + // Hack to set the inital state of the lexer without first having to hit a token + // has to be done as the first token found can be dependant on dialect + if (!lexerModified) { + var originalSetInput = parser.lexer.setInput; + parser.lexer.setInput = function (input, yy) { + var lexer = originalSetInput.bind(parser.lexer)(input, yy); + if (typeof parser.yy.activeDialect !== 'undefined') { + lexer.begin(parser.yy.activeDialect); + } + return lexer; + }; + lexerModified = true; + } + + // TODO: Find a way around throwing an exception when the parser finds a syntax error + try { + parser.yy.error = false; + parser.parse(beforeCursor + afterCursor); + } catch (err) { + if (debug) { + console.log(err); + console.error(err.stack); + console.log(parser.yy.error); + } + } + + if (parser.yy.error && (parser.yy.error.loc.last_column < beforeCursor.length || !beforeCursor.endsWith(parser.yy.error.text))) { + var weightedExpected = []; + + var addedExpected = {}; + + var isLowerCase = parser.yy.caseDetermined && parser.yy.lowerCase || parser.yy.error.text.toLowerCase() === parser.yy.error.text; + + if (parser.yy.error.expected.length == 2 && parser.yy.error.expected.indexOf('\';\'') !== -1 && parser.yy.error.expected.indexOf('\'EOF\'') !== -1) { + parser.yy.error.expected = []; + parser.yy.error.expectedStatementEnd = true; + return parser.yy.error; + } + for (var i = 0; i < parser.yy.error.expected.length; i++) { + var expected = parser.yy.error.expected[i]; + // Strip away the surrounding ' chars + expected = expected.substring(1, expected.length - 1); + // TODO: Only suggest alphanumeric? + if (!IGNORED_EXPECTED[expected] && /[a-z_]+/i.test(expected)) { + if (dialect && expected.indexOf('<' + dialect + '>') == 0) { + expected = expected.substring(dialect.length + 2); + } else if (/^<[a-z]+>/.test(expected)) { + continue; + } + expected = CLEAN_EXPECTED[expected] || expected; + if (expected === parser.yy.error.text.toUpperCase()) { + // Can happen when the lexer entry for a rule contains multiple words like 'stored' in 'stored as parquet' + return false; + } + var text = isLowerCase ? expected.toLowerCase() : expected; + if (text && !addedExpected[text]) { + addedExpected[text] = true; + weightedExpected.push({ + text: text, + distance: stringDistance(parser.yy.error.text, text, true) + }); + } + } + } + if (weightedExpected.length === 0) { + parser.yy.error.expected = []; + parser.yy.error.incompleteStatement = true; + return parser.yy.error; + } + weightedExpected.sort(function (a, b) { + if (a.distance === b.distance) { + return a.text.localeCompare(b.text); + } + return a.distance - b.distance + }); + parser.yy.error.expected = weightedExpected; + parser.yy.error.incompleteStatement = true; + return parser.yy.error; + } else if (parser.yy.error) { + parser.yy.error.expected = []; + parser.yy.error.incompleteStatement = true; + return parser.yy.error; + } + return false; + } + }; + + var initGlobalSearchParser = function (parser) { + + parser.identifyPartials = function (beforeCursor, afterCursor) { + var beforeMatch = beforeCursor.match(/[0-9a-zA-Z_]*$/); + var afterMatch = afterCursor.match(/^[0-9a-zA-Z_]*(?:\((?:[^)]*\))?)?/); + return {left: beforeMatch ? beforeMatch[0].length : 0, right: afterMatch ? afterMatch[0].length : 0}; + }; + + parser.mergeFacets = function (a, b) { + if (!a.facets) { + a.facets = {}; + } + if (!b.facets) { + return; + } + Object.keys(b.facets).forEach(function (key) { + if (a.facets[key]) { + Object.keys(b.facets[key]).forEach(function (val) { + a.facets[key][val.toLowerCase()] = true; + }); + } else { + a.facets[key] = b.facets[key]; + } + }); + }; + + parser.mergeText = function (a, b) { + if (!a.text) { + a.text = []; + } + if (!b.text) { + return; + } + a.text = a.text.concat(b.text); + }; + + parser.handleQuotedValueWithCursor = function (lexer, yytext, yylloc, quoteChar) { + if (yytext.indexOf('\u2020') !== -1 || yytext.indexOf('\u2021') !== -1) { + var cursorIndex = yytext.indexOf('\u2020'); + parser.yy.cursorFound = { + first_line: yylloc.first_line, + last_line: yylloc.last_line, + first_column: yylloc.first_column + cursorIndex, + last_column: yylloc.first_column + cursorIndex + 1 + }; + var remainder = yytext.substring(cursorIndex + 1); + var remainingQuotes = (lexer.upcomingInput().match(new RegExp(quoteChar, 'g')) || []).length; + if (remainingQuotes > 0 && remainingQuotes & 1 != 0) { + parser.yy.missingEndQuote = false; + lexer.input(); + } else { + parser.yy.missingEndQuote = true; + lexer.unput(remainder); + } + lexer.popState(); + return true; + } + return false; + }; + + parser.parseGlobalSearch = function (beforeCursor, afterCursor, debug) { + delete parser.yy.cursorFound; + + var result; + try { + result = parser.parse(beforeCursor + '\u2020' + afterCursor); + } catch (err) { + if (debug) { + console.log(err); + console.error(err.stack); + console.log(parser.yy.error); + } + return { + facets: {}, + text: [] + } + } + return result; + }; + }; + + return { + initSqlParser: initSqlParser, + initSyntaxParser: initSyntaxParser, + stringDistance: stringDistance, + initGlobalSearchParser: initGlobalSearchParser + }; +})(); diff --git a/jison/sqlStatementsParser.jison b/jison/sqlStatementsParser.jison new file mode 100755 index 0000000..328bbd4 --- /dev/null +++ b/jison/sqlStatementsParser.jison @@ -0,0 +1,172 @@ +// Licensed to Cloudera, Inc. under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. Cloudera, Inc. licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +%lex +%options flex +%x multiLineComment inLineComment singleQuote doubleQuote backTick +%% + +'/*' { this.begin("multiLineComment"); return 'PART_OF_STATEMENT'; } +[^*]+ { return 'PART_OF_STATEMENT'; } +[*][^/] { return 'PART_OF_STATEMENT'; } +<> { this.popState(); return 'PART_OF_STATEMENT'; } +'*/' { this.popState(); return 'PART_OF_STATEMENT'; } + +'--' { this.begin("inLineComment"); return 'PART_OF_STATEMENT'; } +[^\n]+ { return 'PART_OF_STATEMENT'; } +<> { this.popState(); return 'EOF'; } +[\n] { this.popState(); return 'PART_OF_STATEMENT'; } + +'"' { this.begin("doubleQuote"); return 'PART_OF_STATEMENT'; } +(?:\\["]|[^"])+ { return 'PART_OF_STATEMENT'; } +<> { this.popState(); return 'EOF'; } +'"' { this.popState(); return 'PART_OF_STATEMENT'; } + +'\'' { this.begin("singleQuote"); return 'PART_OF_STATEMENT'; } +(?:\\[']|[^'])+ { return 'PART_OF_STATEMENT'; } +<> { this.popState(); return 'EOF'; } +'\'' { this.popState(); return 'PART_OF_STATEMENT'; } + +'`' { this.begin("backTick"); return 'PART_OF_STATEMENT'; } +[^`]+ { return 'PART_OF_STATEMENT'; } +<> { this.popState(); return 'EOF'; } +'`' { this.popState(); return 'PART_OF_STATEMENT'; } + +[^"\/;'`-]+ { + if (!parser.yy.firstToken) { + var firstWordMatch = yytext.match(/[a-zA-Z_]+/); + if (firstWordMatch) { + parser.yy.firstToken = firstWordMatch[0]; + } + }; + return 'PART_OF_STATEMENT'; + } +[-][^;-]? { return 'PART_OF_STATEMENT'; } +[/][^;*]? { return 'PART_OF_STATEMENT'; } + +';' { return ';'; } + +<> { return 'EOF'; } + +. { /* To prevent console logging of unknown chars */ } +/lex + +%start SqlStatementsParser + +%% + +SqlStatementsParser + : Statements 'EOF' + { + parser.removeTrailingWhiteSpace($1); + return $1; + } + | OneOrMoreSeparators Statements 'EOF' + { + parser.handleLeadingStatements($1, $2); + parser.removeTrailingWhiteSpace($2); + return $2; + } + | OneOrMoreSeparators Statements OneOrMoreSeparators 'EOF' + { + parser.handleLeadingStatements($1, $2); + parser.handleTrailingStatements($2, $3); + parser.removeTrailingWhiteSpace($2); + return $2; + } + | Statements OneOrMoreSeparators 'EOF' + { + parser.handleTrailingStatements($1, $2); + parser.removeTrailingWhiteSpace($1); + return $1; + } + | OneOrMoreSeparators 'EOF' + { + var result = []; + parser.handleLeadingStatements($1, result); + return result; + } + | 'EOF' + { + return []; + } + ; + +Statements + : StatementParts + { + if (parser.yy.firstToken) { + $$ = [{ type: 'statement', statement: $1, location: @1, firstToken: parser.yy.firstToken }]; + parser.yy.firstToken = null; + } else { + $$ = [{ type: 'statement', statement: $1, location: @1 }]; + } + } + | Statements OneOrMoreSeparators StatementParts + { + parser.handleTrailingStatements($1, $2); + if (parser.yy.firstToken) { + $1.push({ type: 'statement', statement: $3, location: @3, firstToken: parser.yy.firstToken }); + parser.yy.firstToken = null; + } else { + $1.push({ type: 'statement', statement: $3, location: @3 }); + } + } + ; + +StatementParts + : 'PART_OF_STATEMENT' + | StatementParts 'PART_OF_STATEMENT' -> $1 + $2; + ; + +OneOrMoreSeparators + : ';' -> [@1] + | OneOrMoreSeparators ';' + { + $1.push(@2); + } + ; + +%% + +parser.handleLeadingStatements = function (emptyStatements, result) { + for (var i = emptyStatements.length - 1; i >= 0; i--) { + result.unshift({ type: 'statement', statement: ';', location: emptyStatements[i] }); + } +} + +parser.handleTrailingStatements = function (result, emptyStatements) { + var lastStatement = result[result.length - 1]; + lastStatement.statement += ';' + lastStatement.location = { + first_line: lastStatement.location.first_line, + first_column: lastStatement.location.first_column, + last_line: emptyStatements[0].last_line, + last_column: emptyStatements[0].last_column + } + if (emptyStatements.length > 1) { + for (var i = 1; i < emptyStatements.length; i++) { + result.push({ type: 'statement', statement: ';', location: emptyStatements[i] }); + } + } +} + +parser.removeTrailingWhiteSpace = function (result) { + var lastStatement = result[result.length - 1]; + if (/^\s+$/.test(lastStatement.statement)) { + result.pop() + } +} \ No newline at end of file diff --git a/jison/sql_alter.jison b/jison/sql_alter.jison new file mode 100755 index 0000000..d2e93e9 --- /dev/null +++ b/jison/sql_alter.jison @@ -0,0 +1,1100 @@ +// Licensed to Cloudera, Inc. under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. Cloudera, Inc. licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +DataDefinition + : AlterStatement + ; + +DataDefinition_EDIT + : AlterStatement_EDIT + ; + +AlterStatement + : AlterDatabase + | AlterIndex + | AlterTable + | AlterView + | Msck + | ReloadFunction + | CommentOn + ; + +AlterStatement_EDIT + : AlterDatabase_EDIT + | AlterIndex_EDIT + | AlterTable_EDIT + | AlterView_EDIT + | Msck_EDIT + | ReloadFunction_EDIT + | CommentOn_EDIT + | 'ALTER' 'CURSOR' + { + if (parser.isHive()) { + parser.suggestKeywords(['DATABASE', 'INDEX', 'SCHEMA', 'TABLE', 'VIEW']); + } else { + parser.suggestKeywords(['TABLE', 'VIEW']); + } + } + ; + +AlterDatabase + : 'ALTER' DatabaseOrSchema RegularOrBacktickedIdentifier 'SET' 'DBPROPERTIES' ParenthesizedPropertyAssignmentList + { + parser.addDatabaseLocation(@3, [ { name: $3 } ]); + } + | 'ALTER' DatabaseOrSchema RegularOrBacktickedIdentifier 'SET' HdfsLocation + { + parser.addDatabaseLocation(@3, [ { name: $3 } ]); + } + | 'ALTER' DatabaseOrSchema RegularOrBacktickedIdentifier 'SET' 'OWNER' PrincipalSpecification + { + parser.addDatabaseLocation(@3, [ { name: $3 } ]); + } + ; + +AlterDatabase_EDIT + : 'ALTER' DatabaseOrSchema 'CURSOR' + { + if (parser.isHive()) { + parser.suggestDatabases(); + } + } + | 'ALTER' DatabaseOrSchema RegularOrBacktickedIdentifier 'CURSOR' + { + parser.addDatabaseLocation(@3, [ { name: $3 } ]); + if (parser.isHive()) { + parser.suggestKeywords(['SET DBPROPERTIES', 'SET LOCATION', 'SET OWNER']); + } + } + | 'ALTER' DatabaseOrSchema RegularOrBacktickedIdentifier 'SET' 'CURSOR' + { + parser.addDatabaseLocation(@3, [ { name: $3 } ]); + if (parser.isHive()) { + parser.suggestKeywords(['DBPROPERTIES', 'LOCATION', 'OWNER']); + } + } + | 'ALTER' DatabaseOrSchema RegularOrBacktickedIdentifier 'SET' HdfsLocation_EDIT + { + parser.addDatabaseLocation(@3, [ { name: $3 } ]); + } + | 'ALTER' DatabaseOrSchema RegularOrBacktickedIdentifier 'SET' 'OWNER' 'CURSOR' + { + parser.addDatabaseLocation(@3, [ { name: $3 } ]); + parser.suggestKeywords(['GROUP', 'ROLE', 'USER']); + } + | 'ALTER' DatabaseOrSchema RegularOrBacktickedIdentifier 'SET' 'OWNER' PrincipalSpecification_EDIT + { + parser.addDatabaseLocation(@3, [ { name: $3 } ]); + } + ; + +AlterIndex + : 'ALTER' 'INDEX' RegularOrBacktickedIdentifier 'ON' SchemaQualifiedTableIdentifier OptionalPartitionSpec 'REBUILD' + { + parser.addTablePrimary($5); + } + ; + +AlterIndex_EDIT + : 'ALTER' 'INDEX' RegularOrBacktickedIdentifier 'CURSOR' + { + parser.suggestKeywords(['ON']); + } + | 'ALTER' 'INDEX' RegularOrBacktickedIdentifier 'ON' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + | 'ALTER' 'INDEX' RegularOrBacktickedIdentifier 'ON' SchemaQualifiedTableIdentifier_EDIT + | 'ALTER' 'INDEX' RegularOrBacktickedIdentifier 'ON' SchemaQualifiedTableIdentifier OptionalPartitionSpec_EDIT + { + parser.addTablePrimary($5); + } + | 'ALTER' 'INDEX' RegularOrBacktickedIdentifier 'ON' SchemaQualifiedTableIdentifier OptionalPartitionSpec 'CURSOR' + { + parser.addTablePrimary($5); + if (!$6) { + parser.suggestKeywords(['PARTITION', 'REBUILD']); + } else { + parser.suggestKeywords(['REBUILD']); + } + } + ; + +AlterTable + : AlterTableLeftSide AnyAdd OptionalIfNotExists PartitionSpec OptionalHdfsLocation OptionalPartitionSpecs OptionalCachedInOrUncached + | AlterTableLeftSide AnyAdd OptionalIfNotExists 'RANGE' 'PARTITION' RangePartitionSpec + | AlterTableLeftSide AnyAdd OptionalIfNotExists 'RANGE' 'PARTITION_VALUE' '=' UnsignedValueSpecification + | AlterTableLeftSide AnyAdd 'CONSTRAINT' RegularOrBacktickedIdentifier HivePrimaryKeySpecification + | AlterTableLeftSide AnyAdd 'CONSTRAINT' RegularOrBacktickedIdentifier HiveForeignKeySpecification + | AlterTableLeftSide AnyRename 'TO' RegularOrBackTickedSchemaQualifiedName + | AlterTableLeftSide HiveSpecificOperations + | AlterTableLeftSide ImpalaSpecificOperations + | AlterTableLeftSide DropOperations + | AlterTableLeftSide OptionalPartitionOperations + | AlterTableLeftSide PartitionSpec OptionalPartitionOperations + | AlterTableLeftSide 'RECOVER' 'PARTITIONS' + ; + +AlterTable_EDIT + : AlterTableLeftSide_EDIT + | AlterTableLeftSide_EDIT AnyAdd OptionalIfNotExists PartitionSpec OptionalHdfsLocation OptionalPartitionSpecs OptionalCachedInOrUncached + | AlterTableLeftSide_EDIT AnyRename 'TO' RegularOrBackTickedSchemaQualifiedName + | AlterTableLeftSide_EDIT HiveSpecificOperations + | AlterTableLeftSide_EDIT ImpalaSpecificOperations + | AlterTableLeftSide_EDIT DropOperations + | AlterTableLeftSide_EDIT OptionalPartitionOperations + | AlterTableLeftSide_EDIT PartitionSpec OptionalPartitionOperations + | AlterTableLeftSide AnyAdd OptionalIfNotExists 'CURSOR' + { + if (!$3 && parser.isImpala()) { + parser.suggestKeywords([{ value: 'IF NOT EXISTS', weight: 4 }, { value: 'COLUMNS', weight: 3 }, { value: 'PARTITION', weight: 2 }, { value: 'RANGE PARTITION', weight: 1 }]); + } else if (!$3 && parser.isHive()) { + parser.suggestKeywords([{ value: 'IF NOT EXISTS', weight: 3 }, { value: 'COLUMNS', weight: 2 }, { value: 'CONSTRAINT', weight: 1 }, { value: 'PARTITION', weight: 1 }]); + } else if (parser.isImpala()) { + parser.suggestKeywords([{ value: 'PARTITION', weight: 2 }, { value: 'RANGE PARTITION', weight: 1 }]); + } else if (parser.isHive()) { + parser.suggestKeywords(['PARTITION']); + } + } + | AlterTableLeftSide AnyReplace 'CURSOR' + { + parser.suggestKeywords(['COLUMNS']); + } + | AlterTableLeftSide AnyAdd OptionalIfNotExists_EDIT + | AlterTableLeftSide AnyAdd OptionalIfNotExists PartitionSpec HdfsLocation_EDIT OptionalPartitionSpecs OptionalCachedInOrUncached + | AlterTableLeftSide AnyAdd OptionalIfNotExists PartitionSpec OptionalHdfsLocation OptionalPartitionSpecs_EDIT OptionalCachedInOrUncached + | AlterTableLeftSide AnyAdd OptionalIfNotExists PartitionSpec OptionalHdfsLocation OptionalPartitionSpecs CachedIn_EDIT + | AlterTableLeftSide AnyAdd OptionalIfNotExists PartitionSpec OptionalHdfsLocation OptionalPartitionSpecs OptionalCachedInOrUncached 'CURSOR' + { + if (parser.isHive()) { + if (!$5 && !$6 && !$7) { + parser.suggestKeywords(['LOCATION', 'PARTITION']); + } else if ($6 && $6.suggestKeywords) { + var keywords = parser.createWeightedKeywords($6.suggestKeywords, 2); + keywords.push({ value: 'PARTITION', weight: 1 }); + parser.suggestKeywords(keywords); + } else { + parser.suggestKeywords(['PARTITION']); + } + } else if (parser.isImpala()) { + if (!$5 && !$6 && !$7) { + parser.suggestKeywords(['LOCATION', 'CACHED IN', 'UNCACHED']); + } else if (!$7) { + parser.suggestKeywords(['CACHED IN', 'UNCACHED']); + } else if ($7 && $7.suggestKeywords) { + parser.suggestKeywords($7.suggestKeywords); + } + } + } + | AlterTableLeftSide AnyAdd OptionalIfNotExists PartitionSpec_EDIT OptionalHdfsLocation OptionalPartitionSpecs OptionalCachedIn + | AlterTableLeftSide AnyAdd OptionalIfNotExists 'RANGE' 'CURSOR' + { + parser.suggestKeywords(['PARTITION']); + } + | AlterTableLeftSide AnyAdd OptionalIfNotExists 'RANGE' 'PARTITION' 'CURSOR' + { + parser.suggestKeywords(['VALUE']); + } + | AlterTableLeftSide AnyAdd OptionalIfNotExists 'RANGE' 'PARTITION_VALUE' 'CURSOR' + { + parser.suggestKeywords(['=']); + } + | AlterTableLeftSide AnyAdd OptionalIfNotExists 'RANGE' 'PARTITION' RangePartitionSpec_EDIT + | AlterTableLeftSide AnyAdd 'CONSTRAINT' 'CURSOR' + | AlterTableLeftSide AnyAdd 'CONSTRAINT' RegularOrBacktickedIdentifier 'CURSOR' + { + parser.suggestKeywords(['FOREIGN KEY', 'PRIMARY KEY']); + } + | AlterTableLeftSide AnyAdd 'CONSTRAINT' RegularOrBacktickedIdentifier HivePrimaryKeySpecification_EDIT + | AlterTableLeftSide AnyAdd 'CONSTRAINT' RegularOrBacktickedIdentifier HiveForeignKeySpecification_EDIT + | AlterTableLeftSide HiveSpecificOperations_EDIT + | AlterTableLeftSide ImpalaSpecificOperations_EDIT + | AlterTableLeftSide OptionalPartitionOperations_EDIT + | AlterTableLeftSide DropOperations_EDIT + | AlterTableLeftSide 'CURSOR' + { + if (parser.isHive()) { + parser.suggestKeywords(['ADD COLUMNS', 'ADD IF NOT EXISTS', 'ADD PARTITION', 'ARCHIVE PARTITION', 'CHANGE', + 'CLUSTERED BY', 'CONCATENATE', 'COMPACT', 'DISABLE NO_DROP', 'DISABLE OFFLINE', 'DROP', 'ENABLE NO_DROP', + 'ENABLE OFFLINE', 'EXCHANGE PARTITION', 'NOT SKEWED', 'NOT STORED AS DIRECTORIES', 'PARTITION', + 'RECOVER PARTITIONS', 'RENAME TO', 'REPLACE COLUMNS', 'SET FILEFORMAT', 'SET LOCATION', 'SET OWNER', 'SET SERDE', + 'SET SERDEPROPERTIES', 'SET SKEWED LOCATION', 'SET TBLPROPERTIES', 'SKEWED BY', 'TOUCH', 'UNARCHIVE PARTITION']); + } else if (parser.isImpala()) { + parser.suggestKeywords(['ADD COLUMNS', 'ADD PARTITION', 'ADD RANGE PARTITION', 'ALTER', 'ALTER COLUMN', 'CHANGE', + 'DROP COLUMN', 'DROP PARTITION', 'DROP RANGE PARTITION', 'PARTITION', 'RECOVER PARTITIONS', 'RENAME TO', + 'REPLACE COLUMNS', 'SET CACHED IN', 'SET COLUMN STATS', 'SET FILEFORMAT', 'SET LOCATION', 'SET ROW FORMAT', + 'SET SERDEPROPERTIES', 'SET TBLPROPERTIES', 'SET UNCACHED']); + } + } + | AlterTableLeftSide PartitionSpec 'CURSOR' + { + if (parser.isHive()) { + parser.suggestKeywords(['ADD COLUMNS', 'CHANGE', 'COMPACT', 'CONCATENATE', 'DISABLE NO_DROP', 'DISABLE OFFLINE', + 'ENABLE NO_DROP', 'ENABLE OFFLINE', 'RENAME TO PARTITION', 'REPLACE COLUMNS', 'SET FILEFORMAT', 'SET LOCATION', + 'SET SERDE', 'SET SERDEPROPERTIES']); + } else if (parser.isImpala()) { + parser.suggestKeywords(['SET CACHED IN', 'SET FILEFORMAT', 'SET LOCATION', 'SET ROW FORMAT', + 'SET SERDEPROPERTIES', 'SET TBLPROPERTIES', 'SET UNCACHED']); + } + } + | AlterTableLeftSide PartitionSpec AddOrReplace 'CURSOR' + { + parser.suggestKeywords(['COLUMNS']); + } + | AlterTableLeftSide PartitionSpec 'SET' 'CURSOR' + { + if (parser.isHive()) { + parser.suggestKeywords(['FILEFORMAT', 'LOCATION', 'SERDE', 'SERDEPROPERTIES']); + } else if (parser.isImpala()) { + parser.suggestKeywords(['CACHED IN', 'FILEFORMAT', 'LOCATION', 'ROW FORMAT', 'SERDEPROPERTIES','TBLPROPERTIES', 'UNCACHED']); + } + } + | AlterTableLeftSide 'SET' 'CURSOR' + { + if (parser.isHive()) { + parser.suggestKeywords(['FILEFORMAT', 'LOCATION', 'OWNER', 'SERDE', 'SERDEPROPERTIES', 'SKEWED LOCATION', 'TBLPROPERTIES']); + } else if (parser.isImpala()) { + parser.suggestKeywords(['CACHED IN', 'COLUMN STATS', 'FILEFORMAT', 'LOCATION', 'ROW FORMAT', 'SERDEPROPERTIES', 'TBLPROPERTIES', 'UNCACHED']); + } + } + | AlterTableLeftSide PartitionSpec OptionalPartitionOperations_EDIT + | AlterTableLeftSide AnyRename 'CURSOR' + { + parser.suggestKeywords(['TO']); + } + | AlterTableLeftSide AnyRename 'TO' 'CURSOR' + { + parser.suggestDatabases({ appendDot: true }); + } + | AlterTableLeftSide 'RECOVER' 'CURSOR' + { + parser.suggestKeywords(['PARTITIONS']); + } + ; + +HiveSpecificOperations + : ClusteredBy + | 'SKEWED' 'BY' ParenthesizedColumnList 'ON' ParenthesizedSkewedValueList OptionalStoredAsDirectories + | HiveExchange + | 'RECOVER' 'PARTITIONS' + | 'TOUCH' OptionalPartitionSpec + | HiveArchiveOrUnArchive PartitionSpec + | 'NOT' 'SKEWED' + | 'NOT' 'STORED_AS_DIRECTORIES' + | 'SET' 'SKEWED_LOCATION' ParenthesizedSkewedLocationList + | 'SET' 'OWNER' PrincipalSpecification + | PartitionSpec 'RENAME' 'TO' PartitionSpec + | PartitionSpec AnyChange 'COLUMN' ParenthesizedColumnSpecificationList OptionalHiveCascadeOrRestrict + ; + +HiveSpecificOperations_EDIT + : HiveArchiveOrUnArchive 'CURSOR' + { + parser.suggestKeywords(['PARTITION']); + } + | HiveArchiveOrUnArchive PartitionSpec_EDIT + | ClusteredBy_EDIT + | HiveExchange_EDIT + | 'NOT' 'CURSOR' + { + if (parser.isHive()) { + parser.suggestKeywords(['SKEWED', 'STORED AS DIRECTORIES']); + } + } + | 'NOT' 'STORED' 'CURSOR' + { + parser.suggestKeywords(['AS DIRECTORIES']); + } + | 'NOT' 'STORED' 'AS' 'CURSOR' + { + parser.suggestKeywords(['DIRECTORIES']); + } + | PartitionSpec 'RENAME' 'CURSOR' + { + parser.suggestKeywords(['TO PARTITION']); + } + | PartitionSpec 'RENAME' 'TO' 'CURSOR' + { + parser.suggestKeywords(['PARTITION']); + } + | 'RECOVER' 'CURSOR' + { + parser.suggestKeywords(['PARTITIONS']); + } + | 'SET' 'SKEWED' 'CURSOR' + { + parser.suggestKeywords(['LOCATION']); + } + | 'SET' 'SKEWED_LOCATION' ParenthesizedSkewedLocationList_EDIT + | 'SKEWED' 'CURSOR' + { + parser.suggestKeywords(['BY']); + } + | 'SET' 'OWNER' 'CURSOR' + { + parser.suggestKeywords(['GROUP', 'ROLE', 'USER']); + } + | 'SET' 'OWNER' PrincipalSpecification_EDIT + | 'SKEWED' 'BY' ParenthesizedColumnList_EDIT + | 'SKEWED' 'BY' ParenthesizedColumnList_EDIT 'ON' ParenthesizedSkewedValueList OptionalStoredAsDirectories + | 'SKEWED' 'BY' ParenthesizedColumnList 'CURSOR' + { + parser.suggestKeywords(['ON']); + } + | 'SKEWED' 'BY' ParenthesizedColumnList 'ON' ParenthesizedSkewedValueList OptionalStoredAsDirectories 'CURSOR' + { + if (!$6) { + parser.suggestKeywords(['STORED AS DIRECTORIES']); + } + } + | 'SKEWED' 'BY' ParenthesizedColumnList 'ON' ParenthesizedSkewedValueList OptionalStoredAsDirectories_EDIT + | 'TOUCH' 'CURSOR' + { + parser.suggestKeywords(['PARTITION']); + } + | 'TOUCH' OptionalPartitionSpec_EDIT + ; + +ImpalaSpecificOperations + : 'ALTER' OptionalImpalaColumn ColumnIdentifier 'SET' KuduStorageAttribute SetValue + { + parser.addColumnLocation($3.location, [ $3.identifier ]); + } + | 'ALTER' OptionalImpalaColumn ColumnIdentifier 'DROP' 'DEFAULT' + { + parser.addColumnLocation($3.location, [ $3.identifier ]); + } + | 'SET' 'COLUMN' 'STATS' ColumnIdentifier ParenthesizedStatsList + { + parser.addColumnLocation($4.location, [ $4.identifier ]); + } + ; + +ImpalaSpecificOperations_EDIT + : 'ALTER' OptionalImpalaColumn 'CURSOR' + { + if (parser.isImpala()) { + if (!$2) { + parser.suggestKeywords(['COLUMN']); + } + parser.suggestColumns(); + } + } + | 'ALTER' OptionalImpalaColumn ColumnIdentifier 'CURSOR' + { + if (parser.isImpala()) { + parser.suggestKeywords(['DROP DEFAULT', 'SET BLOCK_SIZE', 'SET COMMENT', 'SET COMPRESSION', 'SET DEFAULT', + 'SET ENCODING']); + parser.addColumnLocation($3.location, [ $3.identifier ]); + } + } + | 'ALTER' OptionalImpalaColumn ColumnIdentifier 'DROP' 'CURSOR' + { + if (parser.isImpala()) { + parser.suggestKeywords(['DEFAULT']); + parser.addColumnLocation($3.location, [ $3.identifier ]); + } + } + | 'ALTER' OptionalImpalaColumn ColumnIdentifier 'SET' 'CURSOR' + { + if (parser.isImpala()) { + parser.suggestKeywords(['BLOCK_SIZE', 'COMMENT', 'COMPRESSION', 'DEFAULT', 'ENCODING']); + parser.addColumnLocation($3.location, [ $3.identifier ]); + } + } + | 'ALTER' OptionalImpalaColumn ColumnIdentifier 'SET' KuduStorageAttribute 'CURSOR' + { + parser.addColumnLocation($3.location, [ $3.identifier ]); + } + | 'SET' 'COLUMN' 'CURSOR' + { + parser.suggestKeywords(['STATS']); + } + | 'SET' 'COLUMN' 'STATS' 'CURSOR' + { + parser.suggestColumns(); + } + | 'SET' 'COLUMN' 'STATS' ColumnIdentifier 'CURSOR' + { + parser.addColumnLocation($4.location, [ $4.identifier ]); + } + | 'SET' 'COLUMN' 'STATS' ColumnIdentifier ParenthesizedStatsList_EDIT + { + parser.addColumnLocation($4.location, [ $4.identifier ]); + } + ; + +KuduStorageAttribute + : 'BLOCK_SIZE' + | 'COMMENT' + | 'COMPRESSION' + | 'DEFAULT' + | 'ENCODING' + ; + +OptionalImpalaColumn + : + | 'COLUMN' + ; + +ParenthesizedStatsList + : '(' StatsList ')' + ; + +ParenthesizedStatsList_EDIT + : '(' StatsList_EDIT RightParenthesisOrError + ; + +StatsList + : StatsAssignment + | StatsList ',' StatsAssignment + ; + +StatsList_EDIT + : StatsAssignment_EDIT + | StatsList ',' StatsAssignment_EDIT + | StatsList ',' StatsAssignment_EDIT ',' StatsList + | StatsAssignment_EDIT ',' StatsList + ; + +StatsAssignment + : QuotedValue '=' QuotedValue + ; + +StatsAssignment_EDIT + : 'CURSOR' + { + parser.suggestIdentifiers(['\'avgSize\'', '\'maxSize\'', '\'numDVs\'', '\'numNulls\'']); + } + ; + +OptionalPartitionOperations + : 'SET' AnyFileFormat FileFormat + | 'SET' HdfsLocation + | 'SET' HiveOrImpalaTblproperties ParenthesizedPropertyAssignmentList + | 'SET' 'SERDE' QuotedValue OptionalWithSerdeproperties + | 'SET' HiveOrImpalaSerdeproperties ParenthesizedPropertyAssignmentList + | 'SET' CachedIn OptionalWithReplication + | 'SET' 'ROW' 'FORMAT' ImpalaRowFormat + | 'SET' 'UNCACHED' + | AddReplaceColumns + | 'CONCATENATE' + | 'COMPACT' QuotedValue OptionalAndWait OptionalWithOverwriteTblProperties + | HiveEnableOrDisable HiveNoDropOrOffline + | AnyChange OptionalHiveColumn ColumnIdentifier ColumnSpecification OptionalHiveFirstOrAfter OptionalHiveCascadeOrRestrict + { + parser.addColumnLocation($3.location, [ $3.identifier ]); + } + ; + +OptionalPartitionOperations_EDIT + : AddReplaceColumns_EDIT + | AnyChange OptionalHiveColumn 'CURSOR' + { + if (parser.isHive() && !$2) { + parser.suggestKeywords(['COLUMN']); + } + parser.suggestColumns(); + } + | AnyChange OptionalHiveColumn ColumnIdentifier ColumnSpecification_EDIT OptionalHiveFirstOrAfter OptionalHiveCascadeOrRestrict + { + parser.addColumnLocation($3.location, [ $3.identifier ]); + } + | AnyChange OptionalHiveColumn ColumnIdentifier ColumnSpecification OptionalHiveFirstOrAfter OptionalHiveCascadeOrRestrict 'CURSOR' + { + if (parser.isHive() && !$5 && !$6) { + if ($4.suggestKeywords) { + var keywords = parser.createWeightedKeywords($4.suggestKeywords, 3); + keywords = keywords.concat([{ value: 'AFTER', weight: 2 }, { value: 'FIRST', weight: 2 }, { value: 'CASCADE', weight: 1 }, { value: 'RESTRICT', weight: 1 }]); + parser.suggestKeywords(keywords); + } else { + parser.suggestKeywords([{ value: 'AFTER', weight: 2 }, { value: 'FIRST', weight: 2 }, { value: 'CASCADE', weight: 1 }, { value: 'RESTRICT', weight: 1 }]); + } + } else if (parser.isHive() && $5 && !$6) { + parser.suggestKeywords(['CASCADE', 'RESTRICT']); + } + parser.addColumnLocation($3.location, [ $3.identifier ]); + } + | AnyChange OptionalHiveColumn ColumnIdentifier ColumnSpecification OptionalHiveFirstOrAfter_EDIT OptionalHiveCascadeOrRestrict + { + parser.addColumnLocation($3.location, [ $3.identifier ]); + } + | 'COMPACT' QuotedValue OptionalAndWait OptionalWithOverwriteTblProperties 'CURSOR' + { + if (!$3 && !$4) { + parser.suggestKeywords(['AND WAIT', 'WITH OVERWRITE TBLPROPERTIES']); + } else if (!$4) { + parser.suggestKeywords(['WITH OVERWRITE TBLPROPERTIES']); + } + } + | 'COMPACT' QuotedValue AndWait_EDIT OptionalWithOverwriteTblProperties + | 'COMPACT' QuotedValue OptionalAndWait WithOverwriteTblProperties_EDIT + | HiveEnableOrDisable 'CURSOR' + { + parser.suggestKeywords(['NO_DROP', 'OFFLINE']); + } + | HiveEnableOrDisable HiveNoDropOrOffline_EDIT + | 'SET' AnyFileFormat 'CURSOR' + { + parser.suggestFileFormats(); + } + | 'SET' HdfsLocation_EDIT + | 'SET' CachedIn_EDIT + | 'SET' CachedIn OptionalWithReplication 'CURSOR' + { + if (!$3) { + parser.suggestKeywords(['WITH REPLICATION =']); + } + } + | 'SET' CachedIn WithReplication_EDIT + | 'SET' 'ROW' 'CURSOR' + { + if (parser.isImpala()) { + parser.suggestKeywords(['FORMAT']); + } + } + | 'SET' 'ROW' 'FORMAT' 'CURSOR' + { + parser.suggestKeywords(['DELIMITED']); + } + | 'SET' 'ROW' 'FORMAT' ImpalaRowFormat 'CURSOR' + { + if ($4.suggestKeywords) { + parser.suggestKeywords($4.suggestKeywords); + } + } + | 'SET' 'ROW' 'FORMAT' ImpalaRowFormat_EDIT + | 'SET' 'SERDE' QuotedValue OptionalWithSerdeproperties 'CURSOR' + { + if (!$4) { + parser.suggestKeywords(['WITH SERDEPROPERTIES']); + } + } + | 'SET' 'SERDE' QuotedValue WithSerdeproperties_EDIT + ; + +OptionalAndWait + : + | 'AND' 'WAIT' + ; + +AndWait_EDIT + : 'AND' 'CURSOR' + { + parser.suggestKeywords(['WAIT']); + } + ; + +OptionalWithOverwriteTblProperties + : + | 'WITH' 'OVERWRITE' 'TBLPROPERTIES' ParenthesizedPropertyAssignmentList + ; + +WithOverwriteTblProperties_EDIT + : 'WITH' 'CURSOR' + { + parser.suggestKeywords(['OVERWRITE TBLPROPERTIES']); + } + | 'WITH' 'OVERWRITE' 'CURSOR' + { + parser.suggestKeywords(['TBLPROPERTIES']); + } + ; + +AddReplaceColumns + : AddOrReplace AnyColumns ParenthesizedColumnSpecificationList OptionalHiveCascadeOrRestrict + ; + +AddReplaceColumns_EDIT + : AddOrReplace AnyColumns ParenthesizedColumnSpecificationList_EDIT OptionalHiveCascadeOrRestrict + | AddOrReplace AnyColumns ParenthesizedColumnSpecificationList OptionalHiveCascadeOrRestrict 'CURSOR' + { + if (parser.isHive() && !$4) { + parser.suggestKeywords(['CASCADE', 'RESTRICT']); + } + } + ; + +AnyColumns + : 'COLUMNS' + | 'COLUMNS' + ; + +HiveExchange + : 'EXCHANGE' ExchangePartitionSpec 'WITH' 'TABLE' RegularOrBackTickedSchemaQualifiedName + ; + +HiveExchange_EDIT + : 'EXCHANGE' 'CURSOR' + { + parser.suggestKeywords(['PARTITION']); + } + | 'EXCHANGE' ExchangePartitionSpec 'CURSOR' + { + parser.suggestKeywords(['WITH TABLE']); + } + | 'EXCHANGE' ExchangePartitionSpec 'WITH' 'CURSOR' + { + parser.suggestKeywords(['TABLE']); + } + | 'EXCHANGE' ExchangePartitionSpec 'WITH' 'TABLE' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + | 'EXCHANGE' ExchangePartitionSpec 'WITH' 'TABLE' RegularOrBackTickedSchemaQualifiedName_EDIT + | 'EXCHANGE' ExchangePartitionSpec_EDIT + | 'EXCHANGE' ExchangePartitionSpec_EDIT 'WITH' 'TABLE' RegularOrBackTickedSchemaQualifiedName + ; + +ExchangePartitionSpec + : 'PARTITION' '(' OneOrMorePartitionSpecLists ')' + | 'PARTITION' '(' PartitionSpecList ')' + ; + +ExchangePartitionSpec_EDIT + : 'PARTITION' '(' OneOrMorePartitionSpecLists_EDIT RightParenthesisOrError + | 'PARTITION' '(' PartitionSpecList_EDIT RightParenthesisOrError + ; + +OneOrMorePartitionSpecLists + : '(' PartitionSpecList ')' + | OneOrMorePartitionSpecLists ',' '(' PartitionSpecList ')' + ; + +OneOrMorePartitionSpecLists_EDIT + : '(' PartitionSpecList_EDIT RightParenthesisOrError + | OneOrMorePartitionSpecLists ',' '(' PartitionSpecList_EDIT RightParenthesisOrError + ; + +DropOperations + : 'DROP' OptionalIfExists OneOrMorePartitionSpecs OptionalHivePurge + | 'DROP' 'CONSTRAINT' RegularOrBacktickedIdentifier + | 'DROP' OptionalIfExists 'RANGE' + | 'DROP' OptionalIfExists 'RANGE' 'PARTITION' RangePartitionSpec + | 'DROP' OptionalIfExists 'RANGE' 'PARTITION_VALUE' '=' UnsignedValueSpecification + | 'DROP' 'COLUMN' ColumnIdentifier + { + parser.addColumnLocation($3.location, [ $3.identifier ]); + } + ; + +DropOperations_EDIT + : 'DROP' OptionalIfExists 'CURSOR' + { + if (parser.isHive() && !$2) { + parser.suggestKeywords([{ value: 'CONSTRAINT', weight: 1}, { value: 'PARTITION', weight: 1}, { value: 'IF EXISTS', weight: 2 }]); + } else if (parser.isHive()) { + parser.suggestKeywords(['PARTITION']); + } else if (parser.isImpala() && !$2) { + parser.suggestKeywords([{ value: 'COLUMN', weight: 1 }, { value: 'PARTITION', weight: 1 }, { value: 'RANGE PARTITION', weight: 1 }, { value: 'IF EXISTS', weight: 2 }]); + parser.suggestColumns(); + } else if (parser.isImpala()) { + parser.suggestKeywords(['PARTITION', 'RANGE PARTITION']); + } + } + | 'DROP' OptionalIfExists OneOrMorePartitionSpecs_EDIT OptionalHivePurge + | 'DROP' OptionalIfExists OneOrMorePartitionSpecs OptionalHivePurge 'CURSOR' + { + if (parser.isHive() && !$4) { + parser.suggestKeywords(['PURGE']); + } + } + | 'DROP' 'CONSTRAINT' 'CURSOR' + | 'DROP' OptionalIfExists_EDIT + | 'DROP' OptionalIfExists 'RANGE' 'CURSOR' + { + parser.suggestKeywords(['PARTITION']); + } + | 'DROP' OptionalIfExists 'RANGE' 'PARTITION' 'CURSOR' + { + parser.suggestKeywords(['VALUE']); + } + | 'DROP' OptionalIfExists 'RANGE' 'PARTITION_VALUE' 'CURSOR' + { + parser.suggestKeywords(['=']); + } + | 'DROP' OptionalIfExists 'RANGE' 'PARTITION' RangePartitionSpec_EDIT + | 'DROP' ColumnIdentifier_EDIT + | 'DROP' 'COLUMN' 'CURSOR' + { + parser.suggestColumns(); + } + | 'DROP' 'COLUMN' ColumnIdentifier_EDIT + ; + +AlterTableLeftSide + : 'ALTER' AnyTable SchemaQualifiedTableIdentifier + { + parser.addTablePrimary($3); + } + ; + +AlterTableLeftSide_EDIT + : 'ALTER' AnyTable SchemaQualifiedTableIdentifier_EDIT + { + if (parser.yy.result.suggestTables) { + parser.yy.result.suggestTables.onlyTables = true; + } + } + | 'ALTER' AnyTable 'CURSOR' + { + parser.suggestTables({ onlyTables: true }); + parser.suggestDatabases({ appendDot: true }); + } + ; + +AnyChange + : 'CHANGE' + | 'CHANGE' + ; + +AnyFileFormat + : 'FILEFORMAT' + | 'FILEFORMAT' + ; + +AnyAdd + : 'ADD' + | 'ADD' + ; + +AnyReplace + : 'REPLACE' + | 'REPLACE' + ; + +AddOrReplace + : AnyAdd + | AnyReplace + ; + +OptionalHiveFirstOrAfter + : + | HiveAfterOrFirst ColumnIdentifier + ; + +HiveAfterOrFirst + : 'AFTER' + | 'FIRST' + ; + +OptionalHiveFirstOrAfter_EDIT + : HiveAfterOrFirst 'CURSOR' + { + parser.suggestColumns(); + } + | HiveAfterOrFirst ColumnIdentifier_EDIT + ; + +OptionalHiveColumn + : + | 'COLUMN' + ; + +AnyRename + : 'RENAME' + | 'RENAME' + ; + +HiveEnableOrDisable + : 'ENABLE' + | 'DISABLE' + ; + +HiveNoDropOrOffline + : 'NO_DROP' OptionalCascade + | 'OFFLINE' + ; + +HiveNoDropOrOffline_EDIT + : 'NO_DROP' OptionalCascade 'CURSOR' + { + if (!$2) { + parser.suggestKeywords(['CASCADE']); + } + } + ; + +HiveOrImpalaSerdeproperties + : 'SERDEPROPERTIES' + | 'SERDEPROPERTIES' + ; + +HiveArchiveOrUnArchive + : 'ARCHIVE' + | 'UNARCHIVE' + ; + +OneOrMorePartitionSpecs + : PartitionSpec + | OneOrMorePartitionSpecs ',' PartitionSpec // Only Hive + ; + +OneOrMorePartitionSpecs_EDIT + : PartitionSpec_EDIT + | OneOrMorePartitionSpecs ',' AnyCursor + { + if (parser.isHive()) { + parser.suggestKeywords(['PARTITION']); + } + } + | OneOrMorePartitionSpecs ',' AnyCursor ',' OneOrMorePartitionSpecs + { + if (parser.isHive()) { + parser.suggestKeywords(['PARTITION']); + } + } + | AnyCursor ',' OneOrMorePartitionSpecs + { + if (parser.isHive()) { + parser.suggestKeywords(['PARTITION']); + } + } + | OneOrMorePartitionSpecs ',' PartitionSpec_EDIT + | PartitionSpec_EDIT ',' OneOrMorePartitionSpecs + | OneOrMorePartitionSpecs ',' PartitionSpec_EDIT ',' OneOrMorePartitionSpecs + ; + +OptionalHivePurge + : + | 'PURGE' + ; + +OptionalPartitionSpecs + : + | PartitionSpecWithLocationList + ; + +PartitionSpecWithLocationList + : PartitionSpecWithLocation + | PartitionSpecWithLocationList PartitionSpecWithLocation -> $2 + ; + +OptionalPartitionSpecs_EDIT + : PartitionSpecWithLocation_EDIT + | PartitionSpecWithLocation_EDIT PartitionSpecWithLocationList + | PartitionSpecWithLocationList PartitionSpecWithLocation_EDIT + | PartitionSpecWithLocationList PartitionSpecWithLocation_EDIT PartitionSpecWithLocationList + ; + +PartitionSpecWithLocation_EDIT + : PartitionSpec HdfsLocation_EDIT + | PartitionSpec_EDIT OptionalHdfsLocation + ; + +PartitionSpecWithLocation + : PartitionSpec OptionalHdfsLocation + { + if (!$2) { + $$ = { suggestKeywords: ['LOCATION'] }; + } + } + ; + +ParenthesizedSkewedLocationList + : '(' SkewedLocationList ')' + ; + +ParenthesizedSkewedLocationList_EDIT + : '(' SkewedLocationList_EDIT RightParenthesisOrError + ; + +SkewedLocationList + : SkewedLocation + | SkewedLocationList ',' SkewedLocation + ; + +SkewedLocationList_EDIT + : SkewedLocation_EDIT + | SkewedLocationList ',' SkewedLocation_EDIT + | SkewedLocationList ',' SkewedLocation_EDIT ',' SkewedLocationList + | SkewedLocation_EDIT ',' SkewedLocationList + ; + +SkewedLocation + : ColumnReference '=' QuotedValue + ; + +SkewedLocation_EDIT + : AnyCursor + { + parser.suggestColumns(); + } + | ColumnReference_EDIT + | AnyCursor '=' QuotedValue + { + parser.suggestColumns(); + } + | ColumnReference_EDIT '=' QuotedValue + | ColumnReferences '=' QuotedValue + ; + +OptionalStoredAsDirectories + : + | 'STORED_AS_DIRECTORIES' + ; + +OptionalStoredAsDirectories_EDIT + : 'STORED' 'CURSOR' + { + parser.suggestKeywords(['AS DIRECTORIES']); + } + | 'STORED' 'AS' 'CURSOR' + { + parser.suggestKeywords(['DIRECTORIES']); + } + ; + +AlterView + : AlterViewLeftSide 'SET' 'TBLPROPERTIES' ParenthesizedPropertyAssignmentList + | AlterViewLeftSide AnyAs QuerySpecification + | AlterViewLeftSide 'RENAME' 'TO' RegularOrBacktickedIdentifier + | AlterViewLeftSide 'RENAME' 'TO' RegularOrBacktickedIdentifier '.' RegularOrBacktickedIdentifier + ; + +AlterView_EDIT + : AlterViewLeftSide_EDIT + | AlterViewLeftSide 'CURSOR' + { + if (parser.isHive()) { + parser.suggestKeywords(['AS', 'SET TBLPROPERTIES']); + } else if (parser.isImpala()) { + parser.suggestKeywords(['AS', 'RENAME TO']); + } else { + parser.suggestKeywords(['AS']); + } + } + | AlterViewLeftSide 'SET' 'CURSOR' + { + if (parser.isHive()) { + parser.suggestKeywords(['TBLPROPERTIES']); + } + } + | AlterViewLeftSide AnyAs 'CURSOR' + { + parser.suggestKeywords(['SELECT']); + } + | AlterViewLeftSide AnyAs QuerySpecification_EDIT + | AlterViewLeftSide 'RENAME' 'CURSOR' + { + parser.suggestKeywords(['TO']); + } + | AlterViewLeftSide 'RENAME' 'TO' 'CURSOR' + { + parser.suggestDatabases({ appendDot: true }); + } + ; + + +AlterViewLeftSide + : 'ALTER' AnyView SchemaQualifiedTableIdentifier + { + parser.addTablePrimary($3); + } + ; + +AlterViewLeftSide_EDIT + : 'ALTER' AnyView SchemaQualifiedTableIdentifier_EDIT + { + if (parser.yy.result.suggestTables) { + parser.yy.result.suggestTables.onlyViews = true; + } + } + | 'ALTER' AnyView 'CURSOR' + { + parser.suggestTables({ onlyViews: true }); + parser.suggestDatabases({ appendDot: true }); + } + ; + +Msck + : 'MSCK' 'REPAIR' 'TABLE' SchemaQualifiedTableIdentifier + { + parser.addTablePrimary($4); + } + ; + +Msck_EDIT + : 'MSCK' 'CURSOR' + { + parser.suggestKeywords(['REPAIR TABLE']); + } + | 'MSCK' 'REPAIR' 'CURSOR' + { + parser.suggestKeywords(['TABLE']); + } + | 'MSCK' 'REPAIR' 'TABLE' 'CURSOR' + { + parser.suggestTables({ onlyTables: true }); + parser.suggestDatabases({ appendDot: true }); + } + | 'MSCK' 'REPAIR' 'TABLE' SchemaQualifiedTableIdentifier_EDIT + { + if (parser.yy.result.suggestTables) { + parser.yy.result.suggestTables.onlyViews = true; + } + } + ; + +ReloadFunction + : 'RELOAD' 'FUNCTION' + ; + +ReloadFunction_EDIT + : 'RELOAD' 'CURSOR' + { + parser.suggestKeywords(['FUNCTION']); + } + ; + +CommentOn + : 'COMMENT' 'ON' 'DATABASE' RegularOrBacktickedIdentifier 'IS' NullableComment + { + parser.addDatabaseLocation(@4, [ { name: $4 } ]); + } + ; + +CommentOn_EDIT + : 'COMMENT' 'CURSOR' + { + parser.suggestKeywords(['ON DATABASE']); + } + | 'COMMENT' 'ON' 'CURSOR' + { + parser.suggestKeywords(['DATABASE']); + } + | 'COMMENT' 'ON' 'DATABASE' 'CURSOR' + { + parser.suggestDatabases(); + } + | 'COMMENT' 'ON' 'DATABASE' RegularOrBacktickedIdentifier 'CURSOR' + { + parser.addDatabaseLocation(@4, [ { name: $4 } ]); + parser.suggestKeywords(['IS']); + } + | 'COMMENT' 'ON' 'DATABASE' RegularOrBacktickedIdentifier 'IS' 'CURSOR' + { + parser.addDatabaseLocation(@4, [ { name: $4 } ]); + parser.suggestKeywords(['NULL']); + } + ; + +NullableComment + : QuotedValue + | 'NULL' + ; \ No newline at end of file diff --git a/jison/sql_analyze.jison b/jison/sql_analyze.jison new file mode 100755 index 0000000..5ebd10d --- /dev/null +++ b/jison/sql_analyze.jison @@ -0,0 +1,274 @@ +// Licensed to Cloudera, Inc. under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. Cloudera, Inc. licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +DataDefinition + : AnalyzeStatement + | RefreshStatement + | InvalidateStatement + | ComputeStatsStatement + ; + +DataDefinition_EDIT + : AnalyzeStatement_EDIT + | RefreshStatement_EDIT + | InvalidateStatement_EDIT + | ComputeStatsStatement_EDIT + ; + +AnalyzeStatement + : 'ANALYZE' 'TABLE' SchemaQualifiedTableIdentifier OptionalPartitionSpec 'COMPUTE' 'STATISTICS' OptionalForColumns OptionalCacheMetadata OptionalNoscan + { + parser.addTablePrimary($3); + } + ; + +AnalyzeStatement_EDIT + : 'ANALYZE' 'CURSOR' + { + parser.suggestKeywords(['TABLE']); + } + | 'ANALYZE' 'TABLE' 'CURSOR' + { + parser.suggestTables({ onlyTables: true }); + parser.suggestDatabases({ appendDot: true }); + } + | 'ANALYZE' 'TABLE' SchemaQualifiedTableIdentifier_EDIT OptionalPartitionSpec + { + if (parser.yy.result.suggestTables) { + parser.yy.result.suggestTables.onlyTables = true; + } + } + | 'ANALYZE' 'TABLE' SchemaQualifiedTableIdentifier OptionalPartitionSpec_EDIT + { + parser.addTablePrimary($3); + } + | 'ANALYZE' 'TABLE' SchemaQualifiedTableIdentifier OptionalPartitionSpec 'CURSOR' + { + parser.addTablePrimary($3); + if (!$4) { + parser.suggestKeywords([{ value: 'PARTITION', weight: 2 }, { value: 'COMPUTE STATISTICS', weight: 1 }]); + } else { + parser.suggestKeywords(['COMPUTE STATISTICS']); + } + } + | 'ANALYZE' 'TABLE' SchemaQualifiedTableIdentifier OptionalPartitionSpec 'COMPUTE' 'CURSOR' + { + parser.addTablePrimary($3); + parser.suggestKeywords(['STATISTICS']); + } + | 'ANALYZE' 'TABLE' SchemaQualifiedTableIdentifier OptionalPartitionSpec 'COMPUTE' 'STATISTICS' 'CURSOR' OptionalForColumns OptionalCacheMetadata OptionalNoscan + { + parser.addTablePrimary($3); + parser.suggestKeywords(parser.getKeywordsForOptionalsLR([$8, $9, $10], [{ value: 'FOR COLUMNS', weight: 3 }, { value: 'CACHE METADATA', weight: 2 }, { value: 'NOSCAN', weight: 1 }])); + } + | 'ANALYZE' 'TABLE' SchemaQualifiedTableIdentifier OptionalPartitionSpec 'COMPUTE' 'STATISTICS' ForColumns 'CURSOR' OptionalCacheMetadata OptionalNoscan + { + parser.addTablePrimary($3); + parser.suggestKeywords(parser.getKeywordsForOptionalsLR([$9, $10], [{ value: 'CACHE METADATA', weight: 2 }, { value: 'NOSCAN', weight: 1 }])); + } + | 'ANALYZE' 'TABLE' SchemaQualifiedTableIdentifier OptionalPartitionSpec 'COMPUTE' 'STATISTICS' OptionalForColumns CacheMetadata 'CURSOR' OptionalNoscan + { + parser.addTablePrimary($3); + parser.suggestKeywords(parser.getKeywordsForOptionalsLR([$10], [{ value: 'NOSCAN', weight: 1 }])); + } + | 'ANALYZE' 'CURSOR' SchemaQualifiedTableIdentifier OptionalPartitionSpec + { + parser.suggestKeywords(['TABLE']); + parser.addTablePrimary($3); + } + | 'ANALYZE' 'CURSOR' SchemaQualifiedTableIdentifier OptionalPartitionSpec 'COMPUTE' 'STATISTICS' OptionalForColumns OptionalCacheMetadata OptionalNoscan + { + parser.suggestKeywords(['TABLE']); + parser.addTablePrimary($3); + } + | 'ANALYZE' 'TABLE' SchemaQualifiedTableIdentifier_EDIT OptionalPartitionSpec 'COMPUTE' 'STATISTICS' OptionalForColumns OptionalCacheMetadata OptionalNoscan + | 'ANALYZE' 'TABLE' SchemaQualifiedTableIdentifier OptionalPartitionSpec_EDIT 'COMPUTE' 'STATISTICS' OptionalForColumns OptionalCacheMetadata OptionalNoscan + | 'ANALYZE' 'TABLE' SchemaQualifiedTableIdentifier OptionalPartitionSpec 'COMPUTE' 'STATISTICS' ForColumns_EDIT OptionalCacheMetadata OptionalNoscan + | 'ANALYZE' 'TABLE' SchemaQualifiedTableIdentifier OptionalPartitionSpec 'COMPUTE' 'STATISTICS' OptionalForColumns CacheMetadata_EDIT OptionalNoscan + ; + +OptionalForColumns + : + | ForColumns + ; + +ForColumns + : 'FOR' 'COLUMNS' + ; + +ForColumns_EDIT + : 'FOR' 'CURSOR' + { + parser.suggestKeywords(['COLUMNS']); + } + ; + +OptionalCacheMetadata + : + | CacheMetadata + ; + +CacheMetadata + : 'CACHE' 'METADATA' + ; + +CacheMetadata_EDIT + : 'CACHE' 'CURSOR' + { + parser.suggestKeywords(['METADATA']); + } + ; + +OptionalNoscan + : + | 'NOSCAN' + ; + +RefreshStatement + : 'REFRESH' SchemaQualifiedTableIdentifier OptionalPartitionSpec + { + parser.addTablePrimary($2); + } + | 'REFRESH' 'FUNCTIONS' DatabaseIdentifier + { + parser.addDatabaseLocation(@3, [{ name: $3 }]); + } + ; + +RefreshStatement_EDIT + : 'REFRESH' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + parser.suggestKeywords(['FUNCTIONS']); + } + | 'REFRESH' SchemaQualifiedTableIdentifier_EDIT OptionalPartitionSpec + | 'REFRESH' SchemaQualifiedTableIdentifier OptionalPartitionSpec 'CURSOR' + { + parser.addTablePrimary($2); + if (!$3) { + parser.suggestKeywords(['PARTITION']); + } + } + | 'REFRESH' SchemaQualifiedTableIdentifier OptionalPartitionSpec_EDIT + | 'REFRESH' 'FUNCTIONS' 'CURSOR' + { + parser.suggestDatabases(); + } + ; + +InvalidateStatement + : 'INVALIDATE' 'METADATA' + | 'INVALIDATE' 'METADATA' SchemaQualifiedTableIdentifier + { + parser.addTablePrimary($3); + } + ; + +InvalidateStatement_EDIT + : 'INVALIDATE' 'CURSOR' + { + parser.suggestKeywords(['METADATA']); + } + | 'INVALIDATE' 'METADATA' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + | 'INVALIDATE' 'METADATA' SchemaQualifiedTableIdentifier_EDIT + | 'INVALIDATE' 'CURSOR' SchemaQualifiedTableIdentifier + { + parser.addTablePrimary($3); + parser.suggestKeywords(['METADATA']); + } + ; + +ComputeStatsStatement + : 'COMPUTE' 'STATS' SchemaQualifiedTableIdentifier OptionalParenthesizedColumnList OptionalImpalaTableSample + { + parser.addTablePrimary($3); + } + | 'COMPUTE' 'INCREMENTAL' 'STATS' SchemaQualifiedTableIdentifier OptionalPartitionSpec + { + parser.addTablePrimary($4); + } + ; + +ComputeStatsStatement_EDIT + : 'COMPUTE' 'CURSOR' + { + parser.suggestKeywords(['STATS', 'INCREMENTAL STATS']); + } + | 'COMPUTE' 'STATS' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + | 'COMPUTE' 'STATS' SchemaQualifiedTableIdentifier_EDIT + | 'COMPUTE' 'CURSOR' SchemaQualifiedTableIdentifier OptionalPartitionSpec + { + parser.addTablePrimary($3); + parser.suggestKeywords(['STATS', 'INCREMENTAL STATS']); + } + | 'COMPUTE' 'STATS' SchemaQualifiedTableIdentifier OptionalParenthesizedColumnList OptionalImpalaTableSample 'CURSOR' + { + parser.addTablePrimary($3); + if (!$5) { + parser.suggestKeywords(['TABLESAMPLE']); + } else if ($5.suggestKeywords) { + parser.suggestKeywords($5.suggestKeywords); + } + } + | 'COMPUTE' 'STATS' SchemaQualifiedTableIdentifier ParenthesizedColumnList_EDIT OptionalImpalaTableSample + { + parser.addTablePrimary($3); + } + | 'COMPUTE' 'STATS' SchemaQualifiedTableIdentifier OptionalParenthesizedColumnList OptionalImpalaTableSample_EDIT + { + parser.addTablePrimary($3); + } + | 'COMPUTE' 'CURSOR' 'STATS' SchemaQualifiedTableIdentifier OptionalPartitionSpec + { + parser.addTablePrimary($4); + parser.suggestKeywords(['INCREMENTAL']); + } + | 'COMPUTE' 'INCREMENTAL' 'CURSOR' + { + parser.suggestKeywords(['STATS']); + } + | 'COMPUTE' 'INCREMENTAL' 'CURSOR' SchemaQualifiedTableIdentifier OptionalPartitionSpec + { + parser.addTablePrimary($4); + parser.suggestKeywords(['STATS']); + } + | 'COMPUTE' 'INCREMENTAL' 'STATS' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + | 'COMPUTE' 'INCREMENTAL' 'STATS' SchemaQualifiedTableIdentifier_EDIT OptionalPartitionSpec + | 'COMPUTE' 'INCREMENTAL' 'STATS' SchemaQualifiedTableIdentifier 'CURSOR' OptionalPartitionSpec + { + parser.addTablePrimary($4); + if (!$6) { + parser.suggestKeywords(['PARTITION']); + } + } + | 'COMPUTE' 'INCREMENTAL' 'STATS' SchemaQualifiedTableIdentifier PartitionSpec_EDIT + { + parser.addTablePrimary($4); + } + ; \ No newline at end of file diff --git a/jison/sql_create.jison b/jison/sql_create.jison new file mode 100755 index 0000000..e8c4d70 --- /dev/null +++ b/jison/sql_create.jison @@ -0,0 +1,1933 @@ +// Licensed to Cloudera, Inc. under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. Cloudera, Inc. licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +DataDefinition + : CreateStatement + ; + +DataDefinition_EDIT + : CreateStatement_EDIT + ; + +CreateStatement + : DatabaseDefinition + | TableDefinition + | ViewDefinition + | RoleDefinition + | FunctionDefinition + | IndexDefinition + | MacroDefinition + ; + +CreateStatement_EDIT + : DatabaseDefinition_EDIT + | TableDefinition_EDIT + | ViewDefinition_EDIT + | FunctionDefinition_EDIT + | IndexDefinition_EDIT + | MacroDefinition_EDIT + | AnyCreate OptionalHiveTemporary OptionalExternal 'CURSOR' + { + if ($3) { + parser.suggestKeywords(['TABLE']); + } else if (parser.isHive()) { + if ($2) { + parser.suggestKeywords(['EXTERNAL TABLE', 'FUNCTION', 'MACRO', 'TABLE']); + } else { + parser.suggestKeywords(['DATABASE', 'EXTERNAL TABLE', 'FUNCTION', 'INDEX', 'ROLE', 'SCHEMA', 'TABLE', 'TEMPORARY EXTERNAL TABLE', 'TEMPORARY FUNCTION', 'TEMPORARY MACRO', 'TEMPORARY TABLE', 'VIEW']); + } + } else if (parser.isImpala()) { + parser.suggestKeywords(['AGGREGATE FUNCTION', 'DATABASE', 'EXTERNAL TABLE', 'FUNCTION', 'ROLE', 'SCHEMA', 'TABLE', 'VIEW']); + } else { + parser.suggestKeywords(['DATABASE', 'ROLE', 'SCHEMA', 'TABLE', 'VIEW']); + } + } + ; + +DatabaseDefinition + : AnyCreate DatabaseOrSchema OptionalIfNotExists + | AnyCreate DatabaseOrSchema OptionalIfNotExists RegularIdentifier DatabaseDefinitionOptionals + ; + +DatabaseDefinition_EDIT + : AnyCreate DatabaseOrSchema OptionalIfNotExists 'CURSOR' + { + if (!$3) { + parser.suggestKeywords(['IF NOT EXISTS']); + } + } + | AnyCreate DatabaseOrSchema OptionalIfNotExists_EDIT + | AnyCreate DatabaseOrSchema OptionalIfNotExists 'CURSOR' RegularIdentifier + { + if (!$3) { + parser.suggestKeywords(['IF NOT EXISTS']); + } + } + | AnyCreate DatabaseOrSchema OptionalIfNotExists_EDIT RegularIdentifier + | AnyCreate DatabaseOrSchema OptionalIfNotExists RegularIdentifier DatabaseDefinitionOptionals 'CURSOR' + ; + +DatabaseDefinitionOptionals + : OptionalComment OptionalHdfsLocation OptionalHiveDbProperties + { + var keywords = []; + if (!$3 && parser.isHive()) { + keywords.push('WITH DBPROPERTIES'); + } + if (!$2 && !$3) { + keywords.push('LOCATION'); + } + if (!$1 && !$2 && !$3) { + keywords.push('COMMENT'); + } + if (keywords.length > 0) { + parser.suggestKeywords(keywords); + } + } + ; + +DatabaseDefinitionOptionals_EDIT + : OptionalComment_INVALID OptionalHdfsLocation OptionalHiveDbProperties + | OptionalComment HdfsLocation_EDIT OptionalHiveDbProperties + ; + +OptionalComment + : + | Comment + ; + +Comment + : HiveOrImpalaComment QuotedValue + ; + +Comment_INVALID + : HiveOrImpalaComment SINGLE_QUOTE + | HiveOrImpalaComment DOUBLE_QUOTE + | HiveOrImpalaComment SINGLE_QUOTE VALUE + | HiveOrImpalaComment DOUBLE_QUOTE VALUE + ; + +OptionalComment_INVALID + : Comment_INVALID + ; + +OptionalHiveDbProperties + : + | HiveDbProperties + ; + +HiveDbProperties + : 'WITH' 'DBPROPERTIES' ParenthesizedPropertyAssignmentList + | 'WITH' 'DBPROPERTIES' + | 'WITH' 'CURSOR' + { + parser.suggestKeywords(['DBPROPERTIES']); + } + ; + +ParenthesizedPropertyAssignmentList + : '(' PropertyAssignmentList ')' + ; + +PropertyAssignmentList + : PropertyAssignment + | PropertyAssignmentList ',' PropertyAssignment + ; + +PropertyAssignment + : QuotedValue '=' UnsignedValueSpecification + ; + +TableDefinition + : AnyCreate OptionalHiveTemporary OptionalExternal AnyTable OptionalIfNotExists TableDefinitionRightPart LifeCyclePart + ; + +LifeCyclePart +: +| 'LIFECYCLE' 'UNSIGNED_INTEGER' +; + +TableDefinition_EDIT + : AnyCreate OptionalHiveTemporary OptionalExternal AnyTable OptionalIfNotExists TableDefinitionRightPart_EDIT + | AnyCreate OptionalHiveTemporary OptionalExternal AnyTable OptionalIfNotExists 'CURSOR' + { + if (!$5) { + parser.suggestKeywords(['IF NOT EXISTS']); + } + } + | AnyCreate OptionalHiveTemporary OptionalExternal AnyTable OptionalIfNotExists_EDIT + ; + +TableDefinitionRightPart + : TableIdentifierAndOptionalColumnSpecification OptionalComment OptionalPartitionedBy OptionalSortBy OptionalClusteredBy OptionalSkewedBy + OptionalStoredAsOrBy OptionalWithSerdeproperties OptionalHdfsLocation OptionalTblproperties OptionalCachedInOrUncached OptionalAsSelectStatement + ; + +TableDefinitionRightPart_EDIT + : TableIdentifierAndOptionalColumnSpecification_EDIT OptionalComment OptionalPartitionedBy OptionalSortBy OptionalClusteredBy OptionalSkewedBy + OptionalStoredAsOrBy OptionalWithSerdeproperties OptionalHdfsLocation OptionalTblproperties OptionalCachedInOrUncached OptionalAsSelectStatement + | TableIdentifierAndOptionalColumnSpecification OptionalComment PartitionedBy_EDIT OptionalSortBy OptionalClusteredBy OptionalSkewedBy + OptionalStoredAsOrBy OptionalWithSerdeproperties OptionalHdfsLocation OptionalTblproperties OptionalCachedInOrUncached OptionalAsSelectStatement + | TableIdentifierAndOptionalColumnSpecification OptionalComment OptionalPartitionedBy SortBy_EDIT OptionalClusteredBy OptionalSkewedBy + OptionalStoredAsOrBy OptionalWithSerdeproperties OptionalHdfsLocation OptionalTblproperties OptionalCachedInOrUncached OptionalAsSelectStatement + | TableIdentifierAndOptionalColumnSpecification OptionalComment OptionalPartitionedBy OptionalSortBy ClusteredBy_EDIT OptionalSkewedBy + OptionalStoredAsOrBy OptionalWithSerdeproperties OptionalHdfsLocation OptionalTblproperties OptionalCachedInOrUncached OptionalAsSelectStatement + | TableIdentifierAndOptionalColumnSpecification OptionalComment OptionalPartitionedBy OptionalSortBy OptionalClusteredBy SkewedBy_EDIT + OptionalStoredAsOrBy OptionalWithSerdeproperties OptionalHdfsLocation OptionalTblproperties OptionalCachedInOrUncached OptionalAsSelectStatement + | TableIdentifierAndOptionalColumnSpecification OptionalComment OptionalPartitionedBy OptionalSortBy OptionalClusteredBy OptionalSkewedBy + StoredAsOrBy_EDIT OptionalWithSerdeproperties OptionalHdfsLocation OptionalTblproperties OptionalCachedInOrUncached OptionalAsSelectStatement + | TableIdentifierAndOptionalColumnSpecification OptionalComment OptionalPartitionedBy OptionalSortBy OptionalClusteredBy OptionalSkewedBy + OptionalStoredAsOrBy WithSerdeproperties_EDIT OptionalHdfsLocation OptionalTblproperties OptionalCachedInOrUncached OptionalAsSelectStatement + | TableIdentifierAndOptionalColumnSpecification OptionalComment OptionalPartitionedBy OptionalSortBy OptionalClusteredBy OptionalSkewedBy + OptionalStoredAsOrBy OptionalWithSerdeproperties HdfsLocation_EDIT OptionalTblproperties OptionalCachedInOrUncached OptionalAsSelectStatement + | TableIdentifierAndOptionalColumnSpecification OptionalComment OptionalPartitionedBy OptionalSortBy OptionalClusteredBy OptionalSkewedBy + OptionalStoredAsOrBy OptionalWithSerdeproperties OptionalHdfsLocation OptionalTblproperties CachedIn_EDIT OptionalAsSelectStatement + | TableIdentifierAndOptionalColumnSpecification OptionalComment OptionalPartitionedBy OptionalSortBy OptionalClusteredBy OptionalSkewedBy + OptionalStoredAsOrBy OptionalWithSerdeproperties OptionalHdfsLocation OptionalTblproperties CachedIn WithReplication_EDIT OptionalAsSelectStatement + | TableIdentifierAndOptionalColumnSpecification OptionalComment OptionalPartitionedBy OptionalSortBy OptionalClusteredBy OptionalSkewedBy + OptionalStoredAsOrBy OptionalWithSerdeproperties OptionalHdfsLocation OptionalTblproperties OptionalCachedInOrUncached OptionalAsSelectStatement_EDIT + | TableIdentifierAndOptionalColumnSpecification OptionalComment OptionalPartitionedBy OptionalSortBy OptionalClusteredBy OptionalSkewedBy + OptionalStoredAsOrBy OptionalWithSerdeproperties OptionalHdfsLocation OptionalTblproperties OptionalCachedInOrUncached 'CURSOR' + { + var keywords = []; + if (!$1 && !$2 && !$3 && !$4 && !$5 && !$6 && !$7 && !$8 && !$9 && !$10 && !$11) { + keywords.push({ value: 'LIKE', weight: 1 }); + if (parser.isImpala()) { + keywords.push({ value: 'LIKE PARQUET', weight: 1 }); + } + } else { + if (!$2 && !$3 && !$4 && !$5 && !$6 && !$7 && !$8 && !$9 && !$10 && !$11) { + keywords.push({ value: 'COMMENT', weight: 11 }); + } + if (!$3 && !$4 && !$5 && !$6 && !$7 && !$8 && !$9 && !$10 && !$11) { + keywords.push({ value: 'PARTITIONED BY', weight: 10 }); + if (parser.isImpala()) { + keywords.push({ value: 'PARTITION BY', weight: 10 }); + } + } + if (parser.isImpala() && !$4 && !$5 && !$6 && !$7 && !$8 && !$9 && !$10 && !$11) { + keywords.push({ value: 'SORT BY', weight: 9 }); + } + if (parser.isHive() && !$5 && !$6 && !$7 && !$8 && !$9 && !$10 && !$11) { + keywords.push({ value: 'CLUSTERED BY', weight: 8 }); + } + if (parser.isHive() && !$6 && !$7 && !$8 && !$9 && !$10 && !$11) { + keywords.push({ value: 'SKEWED BY', weight: 7 }); + } else if (parser.isHive() && $6 && $6.suggestKeywords && !$7 && !$8 && !$9 && !$10 && !$10) { + keywords = keywords.concat(parser.createWeightedKeywords($6.suggestKeywords, 7)); // Get the last optional from SKEWED BY + } + if (!$7 && !$8 && !$9 && !$10 && !$11) { + keywords.push({ value: 'ROW FORMAT', weight: 6 }); + keywords.push({ value: 'STORED AS', weight: 6 }); + if (parser.isHive()) { + keywords.push({ value: 'STORED BY', weight: 6 }); + } + } else if ($7 && $7.suggestKeywords && !$8 && !$9 && !$10 && !$11) { + keywords = keywords.concat(parser.createWeightedKeywords($7.suggestKeywords, 6)); + } + if ((($7 && $7.storedBy) || parser.isImpala()) && !$8 && !$9 && !$10 && !$11) { + keywords.push({ value: 'WITH SERDEPROPERTIES', weight: 5 }); + } + if (!$9 && !$10 && !$11) { + keywords.push({ value: 'LOCATION', weight: 4 }); + } + if (!$10 && !$11) { + keywords.push({ value: 'TBLPROPERTIES', weight: 3 }); + } + if (parser.isImpala() && !$11) { + keywords.push({ value: 'CACHED IN', weight: 2 }, { value: 'UNCACHED', weight: 2 }); + } + if (parser.isImpala() && $11 && $11.suggestKeywords) { + keywords = keywords.concat(parser.createWeightedKeywords($11.suggestKeywords, 2)); + } + keywords.push({ value: 'AS', weight: 1 }); + } + + if (keywords.length > 0) { + parser.suggestKeywords(keywords); + } + } + ; + +TableIdentifierAndOptionalColumnSpecification + : SchemaQualifiedIdentifier OptionalColumnSpecificationsOrLike -> $2 + ; + +TableIdentifierAndOptionalColumnSpecification_EDIT + : SchemaQualifiedIdentifier OptionalColumnSpecificationsOrLike_EDIT + | SchemaQualifiedIdentifier_EDIT OptionalColumnSpecificationsOrLike + ; + +OptionalColumnSpecificationsOrLike + : + | ParenthesizedColumnSpecificationList + | 'LIKE_PARQUET' HdfsPath + | 'LIKE' SchemaQualifiedTableIdentifier + ; + +OptionalColumnSpecificationsOrLike_EDIT + : ParenthesizedColumnSpecificationList_EDIT + | 'LIKE_PARQUET' HdfsPath_EDIT + | 'LIKE' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + if (parser.isImpala()) { + parser.suggestKeywords(['PARQUET']); + } + } + | 'LIKE' SchemaQualifiedTableIdentifier_EDIT + ; + +ParenthesizedColumnSpecificationList + : '(' ColumnSpecificationList ')' + | '(' ColumnSpecificationList ',' ConstraintSpecification ')' + ; + +ParenthesizedColumnSpecificationList_EDIT + : '(' ColumnSpecificationList_EDIT RightParenthesisOrError + | '(' ColumnSpecificationList ',' ConstraintSpecification_EDIT RightParenthesisOrError + | '(' ColumnSpecificationList ',' 'CURSOR' RightParenthesisOrError + { + if (parser.isImpala()) { + parser.suggestKeywords(['PRIMARY KEY']); + } else if (parser.isHive()) { + parser.suggestKeywords([{ value: 'PRIMARY KEY', weight: 2 }, { value: 'CONSTRAINT', weight: 1 }]); + } + } + ; + +ColumnSpecificationList + : ColumnSpecification + | ColumnSpecificationList ',' ColumnSpecification -> $3 + ; + +ColumnSpecificationList_EDIT + : ColumnSpecification_EDIT + | ColumnSpecification_EDIT ',' ColumnSpecificationList + | ColumnSpecificationList ',' ColumnSpecification_EDIT + | ColumnSpecificationList ',' ColumnSpecification_EDIT ',' ColumnSpecificationList + | ColumnSpecification 'CURSOR' + { + parser.checkForKeywords($1); + } + | ColumnSpecification 'CURSOR' ',' ColumnSpecificationList + { + parser.checkForKeywords($1); + } + | ColumnSpecificationList ',' ColumnSpecification 'CURSOR' + { + parser.checkForKeywords($3); + } + | ColumnSpecificationList ',' ColumnSpecification 'CURSOR' ',' ColumnSpecificationList + { + parser.checkForKeywords($3); + } + ; + +ColumnSpecification + : ColumnIdentifier ColumnDataType OptionalColumnOptions + { + $$ = $1; + var keywords = []; + if (parser.isImpala()) { + if (!$3['primary']) { + keywords.push('PRIMARY KEY'); + } + if (!$3['encoding']) { + keywords.push('ENCODING'); + } + if (!$3['compression']) { + keywords.push('COMPRESSION'); + } + if (!$3['default']) { + keywords.push('DEFAULT'); + } + if (!$3['block_size']) { + keywords.push('BLOCK_SIZE'); + } + if (!$3['null']) { + keywords.push('NOT NULL'); + keywords.push('NULL'); + } + } + if (!$3['comment']) { + keywords.push('COMMENT'); + if (parser.isHive() && $2.toLowerCase() === 'double') { + keywords.push({ value: 'PRECISION', weight: 2 }); + } + } + if (keywords.length > 0) { + $$.suggestKeywords = keywords; + } + } + ; + +ColumnSpecification_EDIT + : ColumnIdentifier 'CURSOR' OptionalColumnOptions + { + parser.suggestKeywords(parser.getColumnDataTypeKeywords()); + } + | ColumnIdentifier ColumnDataType_EDIT OptionalColumnOptions + | ColumnIdentifier ColumnDataType ColumnOptions_EDIT + ; + +OptionalColumnOptions + : -> {} + | ColumnOptions + ; + +ColumnOptions + : ColumnOption + { + $$ = {}; + $$[$1] = true; + } + | ColumnOptions ColumnOption + { + $1[$2] = true; + } + ; + +ColumnOptions_EDIT + : ColumnOption_EDIT + | ColumnOption_EDIT ColumnOptions + | ColumnOptions ColumnOption_EDIT + | ColumnOptions ColumnOption_EDIT ColumnOptions + ; + +ColumnOption + : ImpalaPrimaryKey -> 'primary' + | 'ENCODING' RegularIdentifier -> 'encoding' + | 'COMPRESSION' RegularIdentifier -> 'compression' + | 'DEFAULT' NonParenthesizedValueExpressionPrimary -> 'default' + | 'BLOCK_SIZE' UnsignedNumericLiteral -> 'block_size' + | 'NOT' 'NULL' -> 'null' + | 'NULL' -> 'null' + | Comment -> 'comment' + ; + +ColumnOption_EDIT + : ImpalaPrimaryKey_EDIT + | 'NOT' 'CURSOR' + { + if (parser.isImpala()) { + parser.suggestKeywords(['NULL']); + } + } + ; + +ColumnDataType + : PrimitiveType + | ArrayType + | MapType + | StructType + | UnionType + | ArrayType_INVALID + | MapType_INVALID + | StructType_INVALID + | UnionType_INVALID + ; + +ColumnDataType_EDIT + : ArrayType_EDIT + | MapType_EDIT + | StructType_EDIT + | UnionType_EDIT + ; + +ArrayType + : 'ARRAY' '<' ColumnDataType '>' + ; + +ArrayType_INVALID + : 'ARRAY' '<' '>' + ; + +ArrayType_EDIT + : 'ARRAY' '<' AnyCursor GreaterThanOrError + { + parser.suggestKeywords(parser.getColumnDataTypeKeywords()); + } + | 'ARRAY' '<' ColumnDataType_EDIT GreaterThanOrError + ; + +MapType + : 'MAP' '<' PrimitiveType ',' ColumnDataType '>' + ; + +MapType_INVALID + : 'MAP' '<' '>' + ; + +MapType_EDIT + : 'MAP' '<' PrimitiveType ',' ColumnDataType_EDIT GreaterThanOrError + | 'MAP' '<' AnyCursor GreaterThanOrError + { + parser.suggestKeywords(parser.getTypeKeywords()); + } + | 'MAP' '<' PrimitiveType ',' AnyCursor GreaterThanOrError + { + parser.suggestKeywords(parser.getColumnDataTypeKeywords()); + } + | 'MAP' '<' ',' AnyCursor GreaterThanOrError + { + parser.suggestKeywords(parser.getColumnDataTypeKeywords()); + } + ; + +StructType + : 'STRUCT' '<' StructDefinitionList '>' + ; + +StructType_INVALID + : 'STRUCT' '<' '>' + ; + +StructType_EDIT + : 'STRUCT' '<' StructDefinitionList_EDIT GreaterThanOrError + ; + +StructDefinitionList + : StructDefinition + | StructDefinitionList ',' StructDefinition + ; + +StructDefinitionList_EDIT + : StructDefinition_EDIT + | StructDefinition_EDIT Commas + | StructDefinition_EDIT Commas StructDefinitionList + | StructDefinitionList ',' StructDefinition_EDIT + | StructDefinitionList ',' StructDefinition_EDIT Commas StructDefinitionList + ; + +StructDefinition + : RegularOrBacktickedIdentifier ':' ColumnDataType OptionalComment + ; + +StructDefinition_EDIT + : Commas RegularOrBacktickedIdentifier ':' ColumnDataType 'CURSOR' + { + parser.suggestKeywords(['COMMENT']); + } + | Commas RegularOrBacktickedIdentifier ':' AnyCursor + { + parser.suggestKeywords(parser.getColumnDataTypeKeywords()); + } + | Commas RegularOrBacktickedIdentifier ':' ColumnDataType_EDIT + | RegularOrBacktickedIdentifier ':' ColumnDataType 'CURSOR' + { + parser.suggestKeywords(['COMMENT']); + } + | RegularOrBacktickedIdentifier ':' AnyCursor + { + parser.suggestKeywords(parser.getColumnDataTypeKeywords()); + } + | RegularOrBacktickedIdentifier ':' ColumnDataType_EDIT + ; + +UnionType + : 'UNIONTYPE' '<' ColumnDataTypeList '>' + ; + +UnionType_INVALID + : 'UNIONTYPE' '<' '>' + ; + +UnionType_EDIT + : 'UNIONTYPE' '<' ColumnDataTypeList_EDIT GreaterThanOrError + ; + +ColumnDataTypeList + : ColumnDataType + | ColumnDataTypeList ',' ColumnDataType + ; + +ColumnDataTypeList_EDIT + : ColumnDataTypeListInner_EDIT + | ColumnDataTypeListInner_EDIT Commas + | ColumnDataTypeList ',' ColumnDataTypeListInner_EDIT + | ColumnDataTypeListInner_EDIT Commas ColumnDataTypeList + | ColumnDataTypeList ',' ColumnDataTypeListInner_EDIT Commas ColumnDataTypeList + ; + +ColumnDataTypeListInner_EDIT + : Commas AnyCursor + { + parser.suggestKeywords(parser.getColumnDataTypeKeywords()); + } + | Commas ColumnDataType_EDIT + | AnyCursor + { + parser.suggestKeywords(parser.getColumnDataTypeKeywords()); + } + | ColumnDataType_EDIT + ; + +GreaterThanOrError + : '>' + | error + ; + +ConstraintSpecification + : ImpalaPrimaryKeySpecification + | HivePrimaryKeySpecification + | 'CONSTRAINT' RegularOrBacktickedIdentifier HiveForeignKeySpecification + | HivePrimaryKeySpecification ',' 'CONSTRAINT' RegularOrBacktickedIdentifier HiveForeignKeySpecification + ; + +ConstraintSpecification_EDIT + : ImpalaPrimaryKeySpecification_EDIT + | HivePrimaryKeySpecification_EDIT + | HivePrimaryKeySpecification ',' 'CURSOR' + { + parser.suggestKeywords(['CONSTRAINT']); + } + | HivePrimaryKeySpecification ',' 'CONSTRAINT' RegularOrBacktickedIdentifier 'CURSOR' + { + parser.suggestKeywords(['FOREIGN KEY']); + } + | HivePrimaryKeySpecification ',' 'CONSTRAINT' RegularOrBacktickedIdentifier HiveForeignKeySpecification_EDIT + | HivePrimaryKeySpecification_EDIT ',' 'CONSTRAINT' RegularOrBacktickedIdentifier HiveForeignKeySpecification + | 'CONSTRAINT' RegularOrBacktickedIdentifier 'CURSOR' + { + parser.suggestKeywords(['FOREIGN KEY']); + } + | 'CONSTRAINT' RegularOrBacktickedIdentifier HiveForeignKeySpecification_EDIT + | 'CURSOR' 'CONSTRAINT' RegularOrBacktickedIdentifier HiveForeignKeySpecification + { + parser.suggestKeywords(['PRIMARY KEY']); + } + ; + +HivePrimaryKeySpecification + : HivePrimaryKey ParenthesizedColumnList 'DISABLE' 'NOVALIDATE' + ; + +HivePrimaryKeySpecification_EDIT + : HivePrimaryKey_EDIT + | HivePrimaryKey ParenthesizedColumnList_EDIT + | HivePrimaryKey ParenthesizedColumnList 'CURSOR' + { + parser.suggestKeywords(['DISABLE NOVALIDATE']); + } + | HivePrimaryKey ParenthesizedColumnList 'DISABLE' 'CURSOR' + { + parser.suggestKeywords(['NOVALIDATE']); + } + | HivePrimaryKey ParenthesizedColumnList_EDIT 'DISABLE' 'NOVALIDATE' + ; + +HiveForeignKeySpecification + : 'FOREIGN' 'KEY' ParenthesizedColumnList 'REFERENCES' SchemaQualifiedTableIdentifier ParenthesizedColumnList 'DISABLE' 'NOVALIDATE' OptionalRelyNoRely + { + parser.addTablePrimary($5); + } + ; + +HiveForeignKeySpecification_EDIT + : 'FOREIGN' 'CURSOR' + { + parser.suggestKeywords(['KEY']); + } + | 'FOREIGN' 'KEY' ParenthesizedColumnList_EDIT + | 'FOREIGN' 'KEY' ParenthesizedColumnList 'CURSOR' + { + parser.suggestKeywords(['REFERENCES']); + } + | 'FOREIGN' 'KEY' ParenthesizedColumnList 'REFERENCES' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + | 'FOREIGN' 'KEY' ParenthesizedColumnList 'REFERENCES' SchemaQualifiedTableIdentifier_EDIT + | 'FOREIGN' 'KEY' ParenthesizedColumnList 'REFERENCES' SchemaQualifiedTableIdentifier ParenthesizedColumnList_EDIT + { + parser.addTablePrimary($5); + } + | 'FOREIGN' 'KEY' ParenthesizedColumnList 'REFERENCES' SchemaQualifiedTableIdentifier ParenthesizedColumnList 'CURSOR' + { + parser.addTablePrimary($5); + parser.suggestKeywords(['DISABLE NOVALIDATE']); + } + | 'FOREIGN' 'KEY' ParenthesizedColumnList 'REFERENCES' SchemaQualifiedTableIdentifier ParenthesizedColumnList 'DISABLE' 'CURSOR' + { + parser.addTablePrimary($5); + parser.suggestKeywords(['NOVALIDATE']); + } + | 'FOREIGN' 'KEY' ParenthesizedColumnList 'REFERENCES' SchemaQualifiedTableIdentifier ParenthesizedColumnList 'DISABLE' 'NOVALIDATE' OptionalRelyNoRely 'CURSOR' + { + parser.addTablePrimary($5); + if (!$9) { + parser.suggestKeywords(['NORELY', 'RELY']); + } + } + ; + +OptionalRelyNoRely + : + | 'RELY' + | 'NORELY' + ; + +ImpalaPrimaryKeySpecification + : ImpalaPrimaryKey ParenthesizedColumnList + ; + +ImpalaPrimaryKeySpecification_EDIT + : ImpalaPrimaryKey_EDIT + | ImpalaPrimaryKey_EDIT ParenthesizedColumnList + | ImpalaPrimaryKey ParenthesizedColumnList_EDIT + ; + +ImpalaPrimaryKey + : 'PRIMARY' 'KEY' + ; + +ImpalaPrimaryKey_EDIT + : 'PRIMARY' 'CURSOR' + { + parser.suggestKeywords(['KEY']); + } + ; + +HivePrimaryKey + : 'PRIMARY' 'KEY' + ; + +HivePrimaryKey_EDIT + : 'PRIMARY' 'CURSOR' + { + parser.suggestKeywords(['KEY']); + } + ; + +OptionalPartitionedBy + : + | PartitionedBy + ; + +PartitionedBy + : HiveOrImpalaPartitioned 'BY' ParenthesizedColumnSpecificationList + | 'PARTITION' 'BY' AnyRange ParenthesizedColumnList ParenthesizedPartitionValuesList + | 'PARTITION' 'BY' 'HASH' ParenthesizedColumnList 'PARTITIONS' UnsignedNumericLiteral + ; + +PartitionedBy_EDIT + : HiveOrImpalaPartitioned 'CURSOR' + { + parser.suggestKeywords(['BY']); + } + | HiveOrImpalaPartitioned 'CURSOR' ParenthesizedColumnSpecificationList + { + parser.suggestKeywords(['BY']); + } + | HiveOrImpalaPartitioned 'BY' ParenthesizedColumnSpecificationList_EDIT + | HiveOrImpalaPartitioned ParenthesizedColumnSpecificationList_EDIT + | 'PARTITION' 'CURSOR' + { + parser.suggestKeywords(['BY']); + } + | 'PARTITION' 'BY' 'CURSOR' + { + parser.suggestKeywords(['HASH', 'RANGE']); + } + | 'PARTITION' 'BY' AnyRange ParenthesizedColumnList_EDIT + | 'PARTITION' 'BY' AnyRange ParenthesizedColumnList ParenthesizedPartitionValuesList_EDIT + | 'PARTITION' 'BY' 'HASH' ParenthesizedColumnList_EDIT + | 'PARTITION' 'BY' 'HASH' ParenthesizedColumnList 'CURSOR' + { + parser.suggestKeywords(['PARTITIONS']); + } + | 'PARTITION' 'BY' 'HASH' ParenthesizedColumnList_EDIT 'PARTITIONS' UnsignedNumericLiteral + ; + +OptionalSortBy + : + | SortBy + ; + +SortBy + : 'SORT' 'BY' ParenthesizedColumnList + ; + +SortBy_EDIT + : 'SORT' 'CURSOR' + { + parser.suggestKeywords(['BY']); + } + | 'SORT' 'BY' ParenthesizedColumnList_EDIT + ; + +ParenthesizedPartitionValuesList + : '(' PartitionValueList ')' + ; + +ParenthesizedPartitionValuesList_EDIT + : '(' 'CURSOR' RightParenthesisOrError + { + if (parser.isImpala()) { + parser.suggestKeywords(['PARTITION']); + } + } + |'(' PartitionValueList_EDIT RightParenthesisOrError + ; + +PartitionValueList + : PartitionValue + | PartitionValueList ',' PartitionValue + ; + +PartitionValueList_EDIT + : PartitionValue_EDIT + | PartitionValueList ',' 'CURSOR' + { + if (parser.isImpala()) { + parser.suggestKeywords(['PARTITION']); + } + } + | PartitionValueList ',' 'CURSOR' ',' PartitionValueList + { + if (parser.isImpala()) { + parser.suggestKeywords(['PARTITION']); + } + } + | PartitionValueList ',' PartitionValue_EDIT + | PartitionValueList ',' PartitionValue_EDIT ',' PartitionValueList + ; + +PartitionValue + : 'PARTITION' ValueExpression LessThanOrEqualTo 'VALUES' LessThanOrEqualTo ValueExpression + | 'PARTITION' 'VALUES' LessThanOrEqualTo ValueExpression + | 'PARTITION' ValueExpression LessThanOrEqualTo 'VALUES' + | 'PARTITION_VALUE' '=' ValueExpression + ; + +PartitionValue_EDIT + : 'PARTITION' 'CURSOR' + { + if (parser.isImpala()) { + parser.suggestKeywords(['VALUE', 'VALUES']); + } + } + | 'PARTITION_VALUE' 'CURSOR' + { + parser.suggestKeywords(['=']); + } + | 'PARTITION_VALUE' '=' 'CURSOR' + { + parser.suggestFunctions(); + } + | 'PARTITION' ValueExpression_EDIT + { + if ($2.endsWithLessThanOrEqual && parser.isImpala()) { + parser.suggestKeywords(['VALUES']); + } + } + | 'PARTITION' ValueExpression 'CURSOR' + { + if (parser.isImpala()) { + parser.suggestKeywords(['<', '<=']); + } + } + | 'PARTITION' ValueExpression LessThanOrEqualTo 'CURSOR' + { + if (parser.isImpala()) { + parser.suggestKeywords(['VALUES']); + } + } + | 'PARTITION' ValueExpression_EDIT LessThanOrEqualTo 'VALUES' + | 'PARTITION' ValueExpression LessThanOrEqualTo 'VALUES' 'CURSOR' + { + if (parser.isImpala()) { + parser.suggestKeywords(['<', '<=']); + } + } + | 'PARTITION' ValueExpression LessThanOrEqualTo 'VALUES' LessThanOrEqualTo 'CURSOR' + { + if (parser.isImpala()) { + parser.suggestFunctions(); + } + } + | 'PARTITION' ValueExpression LessThanOrEqualTo 'VALUES' LessThanOrEqualTo ValueExpression_EDIT + | 'PARTITION' 'VALUES' 'CURSOR' + { + if (parser.isImpala()) { + parser.suggestKeywords(['<', '<=']); + } + } + | 'PARTITION' 'VALUES' LessThanOrEqualTo 'CURSOR' + { + if (parser.isImpala()) { + parser.suggestFunctions(); + } + } + | 'PARTITION' 'VALUES' LessThanOrEqualTo ValueExpression_EDIT + ; + +LessThanOrEqualTo + : '<' + | 'COMPARISON_OPERATOR' // This is fine for autocompletion + ; + +OptionalClusteredBy + : + | ClusteredBy + ; + +ClusteredBy + : 'CLUSTERED' 'BY' ParenthesizedColumnList OptionalHiveSortedBy 'INTO' 'UNSIGNED_INTEGER' 'BUCKETS' + ; + +ClusteredBy_EDIT + : 'CLUSTERED' 'CURSOR' + { + parser.suggestKeywords(['BY']); + } + | 'CLUSTERED' 'BY' ParenthesizedColumnList_EDIT OptionalHiveSortedBy + | 'CLUSTERED' 'BY' ParenthesizedColumnList_EDIT OptionalHiveSortedBy 'INTO' 'UNSIGNED_INTEGER' 'BUCKETS' + | 'CLUSTERED' 'BY' ParenthesizedColumnList OptionalHiveSortedBy 'CURSOR' + { + if (!$4) { + parser.suggestKeywords([{ value: 'INTO', weight: 1 }, { value: 'SORTED BY', weight: 2 }]); + } else { + parser.suggestKeywords(['INTO']); + } + } + | 'CLUSTERED' 'BY' ParenthesizedColumnList OptionalHiveSortedBy 'INTO' 'UNSIGNED_INTEGER' 'CURSOR' + { + parser.suggestKeywords(['BUCKETS']); + } + | 'CLUSTERED' 'BY' ParenthesizedColumnList OptionalHiveSortedBy_EDIT 'INTO' 'UNSIGNED_INTEGER' 'BUCKETS' + | 'CLUSTERED' 'BY' ParenthesizedColumnList OptionalHiveSortedBy_EDIT + ; + +OptionalHiveSortedBy + : + | 'SORTED' 'BY' ParenthesizedSortList + ; + +OptionalHiveSortedBy_EDIT + : 'SORTED' 'CURSOR' + { + parser.suggestKeywords(['BY']); + } + | 'SORTED' 'BY' ParenthesizedSortList_EDIT + ; + +ParenthesizedSortList + : '(' SortList ')' + ; + +ParenthesizedSortList_EDIT + : '(' SortList_EDIT RightParenthesisOrError + ; + +SortList + : SortIdentifier + | SortList ',' SortIdentifier + ; + +SortList_EDIT + : SortIdentifier_EDIT + | SortIdentifier_EDIT ',' SortList + | SortList ',' SortIdentifier_EDIT + | SortList ',' SortIdentifier_EDIT ',' SortList + ; + +SortIdentifier + : ColumnIdentifier OptionalAscOrDesc + ; + +SortIdentifier_EDIT + : ColumnIdentifier OptionalAscOrDesc 'CURSOR' + { + parser.checkForKeywords($2); + } + | ColumnIdentifier_EDIT OptionalAscOrDesc + | AnyCursor OptionalAscOrDesc + { + parser.suggestColumns(); + } + ; + +OptionalSkewedBy + : + | SkewedBy + ; + +SkewedBy + : 'SKEWED' 'BY' ParenthesizedColumnList ON ParenthesizedSkewedValueList -> { suggestKeywords: ['STORED AS DIRECTORIES'] } + | 'SKEWED' 'BY' ParenthesizedColumnList ON ParenthesizedSkewedValueList 'STORED_AS_DIRECTORIES' // Hack otherwise ambiguous with OptionalHiveStoredAsOrBy + ; + +SkewedBy_EDIT + : 'SKEWED' 'CURSOR' + { + parser.suggestKeywords(['BY']); + } + | 'SKEWED' 'BY' ParenthesizedColumnList 'CURSOR' + { + parser.suggestKeywords(['ON']); + } + ; + +ParenthesizedSkewedValueList + : '(' SkewedValueList ')' + ; + +SkewedValueList + : ParenthesizedSimpleValueList + | SkewedValueList ',' ParenthesizedSimpleValueList + ; + +OptionalStoredAsOrBy + : + | StoredAsOrBy + ; + +StoredAsOrBy + : StoredAs + | 'ROW' HiveOrImpalaFormat HiveOrImpalaRowFormat OptionalStoredAs + { + $$ = parser.mergeSuggestKeywords($3, $4) + } + | 'STORED' 'BY' QuotedValue + { + $$ = { storedBy: true } + } + ; + +StoredAsOrBy_EDIT + : HiveOrImpalaStored 'CURSOR' + { + if (parser.isHive()) { + parser.suggestKeywords(['AS', 'BY']); + } else { + parser.suggestKeywords(['AS']); + } + } + | StoredAs_EDIT + | 'ROW' 'CURSOR' + { + parser.suggestKeywords(['FORMAT']); + } + | 'ROW' HiveOrImpalaFormat 'CURSOR' + { + if (parser.isHive()) { + parser.suggestKeywords(['DELIMITED', 'SERDE']); + } else { + parser.suggestKeywords(['DELIMITED']); + } + } + | 'ROW' HiveOrImpalaFormat HiveOrImpalaRowFormat_EDIT + | 'ROW' HiveOrImpalaFormat HiveOrImpalaRowFormat HiveOrImpalaStored 'CURSOR' + { + parser.suggestKeywords(['AS']); + } + | 'ROW' HiveOrImpalaFormat HiveOrImpalaRowFormat StoredAs_EDIT + ; + +OptionalStoredAs + : -> { suggestKeywords: ['STORED AS'] } + | StoredAs + ; + +StoredAs + : HiveOrImpalaStored AnyAs FileFormat + ; + +StoredAs_EDIT + : HiveOrImpalaStored AnyAs 'CURSOR' + { + parser.suggestFileFormats(); + } + ; + +FileFormat + : 'AVRO' + | 'INPUTFORMAT' QuotedValue 'OUTPUTFORMAT' QuotedValue + | 'ORC' + | 'PARQUET' + | 'RCFILE' + | 'SEQUENCEFILE' + | 'TEXTFILE' + | 'AVRO' + | 'KUDU' + | 'ORC' + | 'PARQUET' + | 'RCFILE' + | 'SEQUENCEFILE' + | 'TEXTFILE' + ; + +HiveOrImpalaRowFormat + : HiveRowFormat + | ImpalaRowFormat + ; + +HiveOrImpalaRowFormat_EDIT + : ImpalaRowFormat_EDIT + | HiveRowFormat_EDIT + ; + +HiveRowFormat + : HiveDelimitedRowFormat + | 'SERDE' QuotedValue + ; + +HiveRowFormat_EDIT + : HiveDelimitedRowFormat_EDIT + ; + +HiveDelimitedRowFormat + : 'DELIMITED' OptionalFieldsTerminatedBy OptionalCollectionItemsTerminatedBy OptionalMapKeysTerminatedBy + OptionalLinesTerminatedBy OptionalNullDefinedAs + { + if (!$2 && !$3 && !$4 && !$5 && !$6) { + $$ = { suggestKeywords: [{ value: 'FIELDS TERMINATED BY', weight: 5 }, { value: 'COLLECTION ITEMS TERMINATED BY', weight: 4 }, { value: 'MAP KEYS TERMINATED BY', weight: 3 }, { value: 'LINES TERMINATED BY', weight: 2 }, { value: 'NULL DEFINED AS', weight: 1 }]}; + } else if ($2 && $2.suggestKeywords && !$3 && !$4 && !$5 && !$6) { + $$ = { suggestKeywords: parser.createWeightedKeywords($2.suggestKeywords, 5).concat([{ value: 'COLLECTION ITEMS TERMINATED BY', weight: 4 }, { value: 'MAP KEYS TERMINATED BY', weight: 3 }, { value: 'LINES TERMINATED BY', weight: 2 }, { value: 'NULL DEFINED AS', weight: 1 }]) }; + } else if (!$3 && !$4 && !$5 && !$6) { + $$ = { suggestKeywords: [{ value: 'COLLECTION ITEMS TERMINATED BY', weight: 4 }, { value: 'MAP KEYS TERMINATED BY', weight: 3 }, { value: 'LINES TERMINATED BY', weight: 2 }, { value: 'NULL DEFINED AS', weight: 1 }] }; + } else if (!$4 && !$5 && !$6) { + $$ = { suggestKeywords: [{ value: 'MAP KEYS TERMINATED BY', weight: 3 }, { value: 'LINES TERMINATED BY', weight: 2 }, { value: 'NULL DEFINED AS', weight: 1 }] }; + } else if (!$5 && !$6) { + $$ = { suggestKeywords: [{ value: 'LINES TERMINATED BY', weight: 2 }, { value: 'NULL DEFINED AS', weight: 1 }] }; + } else if (!$6) { + $$ = { suggestKeywords: [{ value: 'NULL DEFINED AS', weight: 1 }] }; + } + } + ; + +HiveDelimitedRowFormat_EDIT + : 'DELIMITED' OptionalFieldsTerminatedBy_EDIT OptionalCollectionItemsTerminatedBy OptionalMapKeysTerminatedBy + OptionalLinesTerminatedBy OptionalNullDefinedAs + | 'DELIMITED' OptionalFieldsTerminatedBy OptionalCollectionItemsTerminatedBy_EDIT OptionalMapKeysTerminatedBy + OptionalLinesTerminatedBy OptionalNullDefinedAs + | 'DELIMITED' OptionalFieldsTerminatedBy OptionalCollectionItemsTerminatedBy OptionalMapKeysTerminatedBy_EDIT + OptionalLinesTerminatedBy OptionalNullDefinedAs + | 'DELIMITED' OptionalFieldsTerminatedBy OptionalCollectionItemsTerminatedBy OptionalMapKeysTerminatedBy + OptionalLinesTerminatedBy_EDIT OptionalNullDefinedAs + | 'DELIMITED' OptionalFieldsTerminatedBy OptionalCollectionItemsTerminatedBy OptionalMapKeysTerminatedBy + OptionalLinesTerminatedBy OptionalNullDefinedAs_EDIT + ; + +ImpalaRowFormat + : 'DELIMITED' OptionalFieldsTerminatedBy OptionalLinesTerminatedBy + { + if (!$2 && !$3) { + $$ = { suggestKeywords: [{ value: 'FIELDS TERMINATED BY', weight: 2 }, { value: 'LINES TERMINATED BY', weight: 1 }] }; + } else if ($2 && $2.suggestKeywords && !$3) { + $$ = { suggestKeywords: parser.createWeightedKeywords($2.suggestKeywords, 2).concat(['LINES TERMINATED BY']) }; + } else if (!$3) { + $$ = { suggestKeywords: [{ value: 'LINES TERMINATED BY', weight: 1 }] }; + } + } + ; + +ImpalaRowFormat_EDIT + : 'DELIMITED' OptionalFieldsTerminatedBy_EDIT OptionalLinesTerminatedBy + | 'DELIMITED' OptionalFieldsTerminatedBy OptionalLinesTerminatedBy_EDIT + ; + +OptionalFieldsTerminatedBy + : + | HiveOrImpalaFields HiveOrImpalaTerminated 'BY' SingleQuotedValue -> { suggestKeywords: ['ESCAPED BY'] } + | HiveOrImpalaFields HiveOrImpalaTerminated 'BY' SingleQuotedValue HiveOrImpalaEscaped 'BY' SingleQuotedValue + ; + +OptionalFieldsTerminatedBy_EDIT + : HiveOrImpalaFields 'CURSOR' + { + parser.suggestKeywords(['TERMINATED BY']); + } + | HiveOrImpalaFields HiveOrImpalaTerminated 'CURSOR' + { + parser.suggestKeywords(['BY']); + } + | HiveOrImpalaFields HiveOrImpalaTerminated 'BY' SingleQuotedValue 'ESCAPED' 'CURSOR' + { + parser.suggestKeywords(['BY']); + } + ; + +OptionalCollectionItemsTerminatedBy + : + | 'COLLECTION' 'ITEMS' 'TERMINATED' 'BY' SingleQuotedValue + ; + +OptionalCollectionItemsTerminatedBy_EDIT + : 'COLLECTION' 'CURSOR' + { + parser.suggestKeywords(['ITEMS TERMINATED BY']); + } + | 'COLLECTION' 'ITEMS' 'CURSOR' + { + parser.suggestKeywords(['TERMINATED BY']); + } + | 'COLLECTION' 'ITEMS' 'TERMINATED' 'CURSOR' + { + parser.suggestKeywords(['BY']); + } + ; + +OptionalMapKeysTerminatedBy + : + | 'MAP' 'KEYS' 'TERMINATED' 'BY' SingleQuotedValue + ; + +OptionalMapKeysTerminatedBy_EDIT + : 'MAP' 'CURSOR' + { + parser.suggestKeywords(['KEYS TERMINATED BY']); + } + | 'MAP' 'KEYS' 'CURSOR' + { + parser.suggestKeywords(['TERMINATED BY']); + } + | 'MAP' 'KEYS' 'TERMINATED' 'CURSOR' + { + parser.suggestKeywords(['BY']); + } + ; + +OptionalLinesTerminatedBy + : + | HiveOrImpalaLines HiveOrImpalaTerminated 'BY' SingleQuotedValue + ; + +OptionalLinesTerminatedBy_EDIT + : HiveOrImpalaLines 'CURSOR' + { + parser.suggestKeywords(['TERMINATED BY']); + } + | HiveOrImpalaLines HiveOrImpalaTerminated 'CURSOR' + { + parser.suggestKeywords(['BY']); + } + ; + +OptionalNullDefinedAs + : + | 'NULL' 'DEFINED' 'AS' SingleQuotedValue + ; + +OptionalNullDefinedAs_EDIT + : 'NULL' 'CURSOR' + { + parser.suggestKeywords(['DEFINED AS']); + } + | 'NULL' 'DEFINED' 'CURSOR' + { + parser.suggestKeywords(['AS']); + } + ; + +OptionalWithSerdeproperties + : + | WithSerdeproperties + ; + +WithSerdeproperties + : 'WITH' 'SERDEPROPERTIES' ParenthesizedPropertyAssignmentList + | 'WITH' 'SERDEPROPERTIES' ParenthesizedPropertyAssignmentList + ; + +WithSerdeproperties_EDIT + : 'WITH' 'CURSOR' + { + parser.suggestKeywords(['SERDEPROPERTIES']); + } + | 'WITH' 'CURSOR' ParenthesizedPropertyAssignmentList + { + parser.suggestKeywords(['SERDEPROPERTIES']); + } + ; + +OptionalTblproperties + : + | TblProperties + ; + +TblProperties + : HiveOrImpalaTblproperties ParenthesizedPropertyAssignmentList + ; + +OptionalHiveTblproperties + : + | 'TBLPROPERTIES' ParenthesizedPropertyAssignmentList + ; + +OptionalAsSelectStatement + : + | AnyAs CommitLocations QuerySpecification + ; + +OptionalAsSelectStatement_EDIT + : AnyAs CommitLocations 'CURSOR' + { + parser.suggestKeywords(['SELECT']); + } + | AnyAs CommitLocations QuerySpecification_EDIT + ; + +CommitLocations + : /* empty */ + { + parser.commitLocations(); + } + ; + +ViewDefinition + : AnyCreate AnyView OptionalIfNotExists SchemaQualifiedIdentifier OptionalParenthesizedViewColumnList OptionalComment OptionalHiveTblproperties AnyAs QuerySpecification + ; + +ViewDefinition_EDIT + : AnyCreate AnyView OptionalIfNotExists 'CURSOR' + { + if (!$3) { + parser.suggestKeywords(['IF NOT EXISTS']); + } + parser.suggestDatabases({ appendDot: true }); + } + | AnyCreate AnyView OptionalIfNotExists 'CURSOR' SchemaQualifiedIdentifier OptionalParenthesizedViewColumnList OptionalComment OptionalHiveTblproperties AnyAs QuerySpecification + { + if (!$3) { + parser.suggestKeywords(['IF NOT EXISTS']); + } + } + | AnyCreate AnyView OptionalIfNotExists_EDIT + | AnyCreate AnyView OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedViewColumnList_EDIT OptionalComment OptionalHiveTblproperties + | AnyCreate AnyView OptionalIfNotExists SchemaQualifiedIdentifier OptionalParenthesizedViewColumnList OptionalComment OptionalHiveTblproperties 'CURSOR' + { + var keywords = [{value: 'AS', weight: 1 }]; + if (!$7) { + if (parser.isHive()) { + keywords.push({ value: 'TBLPROPERTIES', weight: 2 }); + } + if (!$6) { + keywords.push({ value: 'COMMENT', weight: 3 }); + } + } + parser.suggestKeywords(keywords); + } + | AnyCreate AnyView OptionalIfNotExists SchemaQualifiedIdentifier OptionalParenthesizedViewColumnList OptionalComment OptionalHiveTblproperties AnyAs 'CURSOR' + { + parser.suggestKeywords(['SELECT']); + } + | AnyCreate AnyView OptionalIfNotExists SchemaQualifiedIdentifier OptionalParenthesizedViewColumnList OptionalComment OptionalHiveTblproperties AnyAs QuerySpecification_EDIT + | AnyCreate AnyView OptionalIfNotExists SchemaQualifiedIdentifier_EDIT OptionalParenthesizedViewColumnList OptionalComment OptionalHiveTblproperties AnyAs QuerySpecification + ; + +FunctionDefinition + : ImpalaFunctionDefinition + | ImpalaAggregateFunctionDefinition + | HiveFunctionDefinition + | HiveTemporaryFunction + ; + +FunctionDefinition_EDIT + : ImpalaFunctionDefinition_EDIT + | ImpalaAggregateFunctionDefinition_EDIT + | HiveFunctionDefinition_EDIT + | HiveTemporaryFunction_EDIT + ; + +ImpalaFunctionDefinition + : AnyCreate 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns HdfsLocation ImpalaSymbol + ; + +ImpalaFunctionDefinition_EDIT + : AnyCreate 'FUNCTION' OptionalIfNotExists 'CURSOR' + { + if (!$3) { + parser.suggestKeywords(['IF NOT EXISTS']); + } + parser.suggestDatabases({ appendDot: true }); + } + | AnyCreate 'FUNCTION' OptionalIfNotExists 'CURSOR' SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns HdfsLocation ImpalaSymbol + { + if (!$3) { + parser.suggestKeywords(['IF NOT EXISTS']); + } + } + | AnyCreate 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList 'CURSOR' + { + parser.suggestKeywords(['RETURNS']); + } + | AnyCreate 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns 'CURSOR' + { + parser.suggestKeywords(['LOCATION']); + } + | AnyCreate 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns HdfsLocation 'CURSOR' + { + parser.suggestKeywords(['SYMBOL']); + } + | AnyCreate 'FUNCTION' OptionalIfNotExists_EDIT + | AnyCreate 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList_EDIT + | AnyCreate 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns_EDIT + | AnyCreate 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns HdfsLocation_EDIT + | AnyCreate 'FUNCTION' OptionalIfNotExists_EDIT SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns HdfsLocation ImpalaSymbol + | AnyCreate 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList_EDIT ImpalaReturns HdfsLocation ImpalaSymbol + | AnyCreate 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns_EDIT HdfsLocation ImpalaSymbol + | AnyCreate 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns HdfsLocation_EDIT ImpalaSymbol + ; + +ImpalaAggregateFunctionDefinition + : AnyCreate 'AGGREGATE' 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns + HdfsLocation OptionalImpalaInitFn ImpalaUpdateFn ImpalaMergeFn OptionalImpalaPrepareFn OptionalImpalaCloseFn OptionalImpalaSerializeFn OptionalImpalaFinalizeFn OptionalIntermediate + ; + +ImpalaAggregateFunctionDefinition_EDIT + : AnyCreate 'AGGREGATE' 'CURSOR' + { + parser.suggestKeywords(['FUNCTION']); + } + | AnyCreate 'AGGREGATE' 'FUNCTION' OptionalIfNotExists 'CURSOR' SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns + HdfsLocation OptionalImpalaInitFn ImpalaUpdateFn ImpalaMergeFn OptionalImpalaPrepareFn OptionalImpalaCloseFn OptionalImpalaSerializeFn OptionalImpalaFinalizeFn OptionalIntermediate + { + if (!$4) { + parser.suggestKeywords(['IF NOT EXISTS']); + } + } + | AnyCreate 'AGGREGATE' 'FUNCTION' OptionalIfNotExists 'CURSOR' + { + if (!$4) { + parser.suggestKeywords(['IF NOT EXISTS']); + } + parser.suggestDatabases({ appendDot: true }); + } + | AnyCreate 'AGGREGATE' 'FUNCTION' OptionalIfNotExists_EDIT + | AnyCreate 'AGGREGATE' 'FUNCTION' OptionalIfNotExists_EDIT SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns + HdfsLocation OptionalImpalaInitFn ImpalaUpdateFn ImpalaMergeFn OptionalImpalaPrepareFn OptionalImpalaCloseFn OptionalImpalaSerializeFn OptionalImpalaFinalizeFn OptionalIntermediate + | AnyCreate 'AGGREGATE' 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList_EDIT + | AnyCreate 'AGGREGATE' 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList_EDIT ImpalaReturns + HdfsLocation OptionalImpalaInitFn ImpalaUpdateFn ImpalaMergeFn OptionalImpalaPrepareFn OptionalImpalaCloseFn OptionalImpalaSerializeFn OptionalImpalaFinalizeFn OptionalIntermediate + | AnyCreate 'AGGREGATE' 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList 'CURSOR' + { + parser.suggestKeywords(['RETURNS']); + } + | AnyCreate 'AGGREGATE' 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns + 'CURSOR' + { + parser.suggestKeywords(['LOCATION']); + } + | AnyCreate 'AGGREGATE' 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns + HdfsLocation OptionalImpalaInitFn 'CURSOR' + { + if (!$9) { + parser.suggestKeywords([{value: 'INIT_FN', weight: 2 }, {value: 'UPDATE_FN', weight: 1 }]); + } else { + parser.suggestKeywords([{value: 'UPDATE_FN', weight: 1 }]); + } + } + | AnyCreate 'AGGREGATE' 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns + HdfsLocation OptionalImpalaInitFn ImpalaUpdateFn 'CURSOR' + { + parser.suggestKeywords(['MERGE_FN']); + } + | AnyCreate 'AGGREGATE' 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns + HdfsLocation OptionalImpalaInitFn ImpalaUpdateFn ImpalaMergeFn OptionalImpalaPrepareFn OptionalImpalaCloseFn OptionalImpalaSerializeFn OptionalImpalaFinalizeFn OptionalIntermediate 'CURSOR' + { + if (!$12 && !$13 && !$14 && !$15 && !$16) { + parser.suggestKeywords([{value: 'PREPARE_FN', weight: 5 }, {value: 'CLOSE_FN', weight: 4 }, {value: 'SERIALIZE_FN', weight: 3 }, {value: 'FINALIZE_FN', weight: 2 }, {value: 'INTERMEDIATE', weight: 1 }]); + } else if ($12 && !$13 && !$14 && !$15 && !$16) { + parser.suggestKeywords([{value: 'CLOSE_FN', weight: 4 }, {value: 'SERIALIZE_FN', weight: 3 }, {value: 'FINALIZE_FN', weight: 2 }, {value: 'INTERMEDIATE', weight: 1 }]); + } else if ($13 && !$14 && !$15 && !$16) { + parser.suggestKeywords([{value: 'SERIALIZE_FN', weight: 3 }, {value: 'FINALIZE_FN', weight: 2 }, {value: 'INTERMEDIATE', weight: 1 }]); + } else if ($14 && !$15 && !$16) { + parser.suggestKeywords([{value: 'FINALIZE_FN', weight: 2 }, {value: 'INTERMEDIATE', weight: 1 }]); + } else if ($15 && !$16) { + parser.suggestKeywords([{value: 'INTERMEDIATE', weight: 1 }]); + } + } + | AnyCreate 'AGGREGATE' 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns_EDIT + | AnyCreate 'AGGREGATE' 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns + HdfsLocation_EDIT OptionalImpalaInitFn + | AnyCreate 'AGGREGATE' 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns + HdfsLocation OptionalImpalaInitFn_EDIT + | AnyCreate 'AGGREGATE' 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns + HdfsLocation OptionalImpalaInitFn ImpalaUpdateFn_EDIT + | AnyCreate 'AGGREGATE' 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns + HdfsLocation OptionalImpalaInitFn ImpalaUpdateFn + | AnyCreate 'AGGREGATE' 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns + HdfsLocation OptionalImpalaInitFn ImpalaUpdateFn ImpalaMergeFn_EDIT OptionalImpalaPrepareFn OptionalImpalaCloseFn OptionalImpalaSerializeFn OptionalImpalaFinalizeFn OptionalIntermediate + | AnyCreate 'AGGREGATE' 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns + HdfsLocation OptionalImpalaInitFn ImpalaUpdateFn ImpalaMergeFn OptionalImpalaPrepareFn_EDIT OptionalImpalaCloseFn OptionalImpalaSerializeFn OptionalImpalaFinalizeFn OptionalIntermediate + | AnyCreate 'AGGREGATE' 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns + HdfsLocation OptionalImpalaInitFn ImpalaUpdateFn ImpalaMergeFn OptionalImpalaPrepareFn OptionalImpalaCloseFn_EDIT OptionalImpalaSerializeFn OptionalImpalaFinalizeFn OptionalIntermediate + | AnyCreate 'AGGREGATE' 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns + HdfsLocation OptionalImpalaInitFn ImpalaUpdateFn ImpalaMergeFn OptionalImpalaPrepareFn OptionalImpalaCloseFn OptionalImpalaSerializeFn_EDIT OptionalImpalaFinalizeFn OptionalIntermediate + | AnyCreate 'AGGREGATE' 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns + HdfsLocation OptionalImpalaInitFn ImpalaUpdateFn ImpalaMergeFn OptionalImpalaPrepareFn OptionalImpalaCloseFn OptionalImpalaSerializeFn OptionalImpalaFinalizeFn_EDIT OptionalIntermediate + | AnyCreate 'AGGREGATE' 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns + HdfsLocation OptionalImpalaInitFn ImpalaUpdateFn ImpalaMergeFn OptionalImpalaPrepareFn OptionalImpalaCloseFn OptionalImpalaSerializeFn OptionalImpalaFinalizeFn Intermediate_EDIT + | AnyCreate 'AGGREGATE' 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns_EDIT + HdfsLocation OptionalImpalaInitFn ImpalaUpdateFn ImpalaMergeFn OptionalImpalaPrepareFn OptionalImpalaCloseFn OptionalImpalaSerializeFn OptionalImpalaFinalizeFn OptionalIntermediate + | AnyCreate 'AGGREGATE' 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns + HdfsLocation_EDIT OptionalImpalaInitFn ImpalaUpdateFn ImpalaMergeFn OptionalImpalaPrepareFn OptionalImpalaCloseFn OptionalImpalaSerializeFn OptionalImpalaFinalizeFn OptionalIntermediate + | AnyCreate 'AGGREGATE' 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns + HdfsLocation OptionalImpalaInitFn_EDIT ImpalaUpdateFn ImpalaMergeFn OptionalImpalaPrepareFn OptionalImpalaCloseFn OptionalImpalaSerializeFn OptionalImpalaFinalizeFn OptionalIntermediate + | AnyCreate 'AGGREGATE' 'FUNCTION' OptionalIfNotExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList ImpalaReturns + HdfsLocation OptionalImpalaInitFn ImpalaUpdateFn_EDIT ImpalaMergeFn OptionalImpalaPrepareFn OptionalImpalaCloseFn OptionalImpalaSerializeFn OptionalImpalaFinalizeFn OptionalIntermediate + ; + +HiveFunctionDefinition + : AnyCreate 'FUNCTION' SchemaQualifiedIdentifier 'AS' SingleQuotedValue OptionalHiveUsing + ; + +HiveFunctionDefinition_EDIT + : AnyCreate 'FUNCTION' SchemaQualifiedIdentifier 'CURSOR' + { + parser.suggestKeywords(['AS']); + } + | AnyCreate 'FUNCTION' SchemaQualifiedIdentifier 'AS' SingleQuotedValue OptionalHiveUsing_EDIT + | AnyCreate 'FUNCTION' SchemaQualifiedIdentifier 'AS' SingleQuotedValue OptionalHiveUsing 'CURSOR' + { + if (!$6) { + parser.suggestKeywords(['USING']); + } else { + parser.suggestKeywords(['ARCHIVE', 'FILE', 'JAR']); + } + } + ; + +HiveTemporaryFunction + : AnyCreate 'TEMPORARY' 'FUNCTION' RegularIdentifier 'AS' SingleQuotedValue + ; + +HiveTemporaryFunction_EDIT + : AnyCreate 'TEMPORARY' 'FUNCTION' RegularIdentifier 'CURSOR' + { + parser.suggestKeywords(['AS']); + } + ; + +ParenthesizedImpalaArgumentList + : '(' ')' + | '(' ImpalaArgumentList OptionalVariableArguments')' + ; + +ParenthesizedImpalaArgumentList_EDIT + : '(' ImpalaArgumentList_EDIT RightParenthesisOrError + { + parser.suggestKeywords(parser.getTypeKeywords()); + } + | '(' ImpalaArgumentList 'CURSOR' RightParenthesisOrError + { + parser.suggestKeywords(['...']); + } + ; + +ImpalaArgumentList + : PrimitiveType + | ImpalaArgumentList ',' PrimitiveType + ; + +ImpalaArgumentList_EDIT + : AnyCursor + | ImpalaArgumentList ',' AnyCursor + | AnyCursor ',' ImpalaArgumentList + | ImpalaArgumentList ',' AnyCursor ',' ImpalaArgumentList + ; + +OptionalVariableArguments + : + | '...' + ; + +ImpalaReturns + : 'RETURNS' PrimitiveType + ; + +ImpalaReturns_EDIT + : 'RETURNS' 'CURSOR' + { + parser.suggestKeywords(parser.getTypeKeywords()); + } + ; + +ImpalaSymbol + : 'SYMBOL' '=' SingleQuotedValue + ; + +OptionalImpalaInitFn + : + | 'INIT_FN' '=' FunctionReference + ; + +OptionalImpalaInitFn_EDIT + : 'INIT_FN' '=' FunctionReference_EDIT + ; + +ImpalaUpdateFn + : 'UPDATE_FN' '=' FunctionReference + ; + +ImpalaUpdateFn_EDIT + : 'UPDATE_FN' '=' FunctionReference_EDIT + ; + +ImpalaMergeFn + : 'MERGE_FN' '=' FunctionReference + ; + +ImpalaMergeFn_EDIT + : 'MERGE_FN' '=' FunctionReference_EDIT + ; + +OptionalImpalaPrepareFn + : + | 'PREPARE_FN' '=' FunctionReference + ; + +OptionalImpalaPrepareFn_EDIT + : 'PREPARE_FN' '=' FunctionReference_EDIT + ; + +OptionalImpalaCloseFn + : + | 'CLOSE_FN' '=' FunctionReference + ; + +OptionalImpalaCloseFn_EDIT + : 'CLOSE_FN' '=' FunctionReference_EDIT + ; + +OptionalImpalaSerializeFn + : + | 'SERIALIZE_FN' '=' FunctionReference + ; + +OptionalImpalaSerializeFn_EDIT + : 'SERIALIZE_FN' '=' FunctionReference_EDIT + ; + +OptionalImpalaFinalizeFn + : + | 'FINALIZE_FN' '=' FunctionReference + ; + +OptionalImpalaFinalizeFn_EDIT + : 'FINALIZE_FN' '=' FunctionReference_EDIT + ; + +OptionalIntermediate + : + | 'INTERMEDIATE' PrimitiveType + ; + +Intermediate_EDIT + : 'INTERMEDIATE' 'CURSOR' + { + parser.suggestKeywords(parser.getTypeKeywords()); + } + ; + +FunctionReference + : SingleQuotedValue + ; + +FunctionReference_EDIT + : SingleQuotedValue_EDIT + { + parser.suggestFunctions(); + parser.suggestAggregateFunctions(); + parser.suggestAnalyticFunctions(); + } + ; + +OptionalHiveUsing + : + | 'USING' OneOrMoreFunctionResources + ; + +OptionalHiveUsing_EDIT + : 'USING' 'CURSOR' + { + parser.suggestKeywords(['ARCHIVE', 'FILE', 'JAR']); + } + ; + +OneOrMoreFunctionResources + : FunctionResource + | OneOrMoreFunctionResources ',' FunctionResource + ; + +FunctionResource + : FunctionResourceType SingleQuotedValue + ; + +FunctionResourceType + : 'ARCHIVE' + | 'FILE' + | 'JAR' + ; + +AnyView + : 'VIEW' + | 'VIEW' + ; + +OptionalParenthesizedViewColumnList + : + | ParenthesizedViewColumnList + ; + +ParenthesizedViewColumnList + : '(' ViewColumnList ')' + ; + +ParenthesizedViewColumnList_EDIT + : '(' ViewColumnList_EDIT RightParenthesisOrError + { + if (!$2) { + parser.suggestKeywords(['COMMENT']); + } + } + ; + +ViewColumnList + : ColumnReference OptionalComment + | ViewColumnList ',' ColumnReference OptionalComment + ; + +ViewColumnList_EDIT + : ColumnReference OptionalComment 'CURSOR' --> $2 + | ColumnReference OptionalComment 'CURSOR' ',' ViewColumnList --> $2 + | ViewColumnList ',' ColumnReference OptionalComment 'CURSOR' --> $4 + | ViewColumnList ',' ColumnReference OptionalComment 'CURSOR' ',' ViewColumnList --> $4 + ; + +RoleDefinition + : AnyCreate AnyRole RegularIdentifier + ; + +AnyRole + : 'ROLE' + | 'ROLE' + | 'ROLE' + ; + +IndexDefinition + : AnyCreate 'INDEX' RegularOrBacktickedIdentifier 'ON' 'TABLE' ExistingTable ParenthesizedIndexColumnList + 'AS' IndexType OptionalWithDeferredRebuild OptionalIdxProperties OptionalInTable OptionalStoredAsOrBy OptionalHdfsLocation + OptionalTblproperties OptionalComment + ; + +ExistingTable + : SchemaQualifiedTableIdentifier + { + parser.addTablePrimary($1); + } + ; + +ExistingTable_EDIT + : SchemaQualifiedTableIdentifier_EDIT + ; + +IndexDefinition_EDIT + : AnyCreate 'INDEX' RegularOrBacktickedIdentifier 'CURSOR' + { + parser.suggestKeywords(['ON TABLE']); + } + | AnyCreate 'INDEX' RegularOrBacktickedIdentifier 'ON' 'CURSOR' + { + parser.suggestKeywords(['TABLE']); + } + | AnyCreate 'INDEX' RegularOrBacktickedIdentifier 'ON' 'TABLE' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + | AnyCreate 'INDEX' RegularOrBacktickedIdentifier 'ON' 'TABLE' ExistingTable_EDIT + | AnyCreate 'INDEX' RegularOrBacktickedIdentifier 'ON' 'TABLE' ExistingTable ParenthesizedIndexColumnList_EDIT + | AnyCreate 'INDEX' RegularOrBacktickedIdentifier 'ON' 'TABLE' ExistingTable ParenthesizedIndexColumnList 'CURSOR' + { + parser.suggestKeywords(['AS']); + } + | AnyCreate 'INDEX' RegularOrBacktickedIdentifier 'ON' 'TABLE' ExistingTable ParenthesizedIndexColumnList + 'AS' 'CURSOR' + { + parser.suggestKeywords(['\'BITMAP\'', '\'COMPACT\'']); + } + | AnyCreate 'INDEX' RegularOrBacktickedIdentifier 'ON' 'TABLE' ExistingTable ParenthesizedIndexColumnList + 'AS' IndexType_EDIT OptionalWithDeferredRebuild OptionalIdxProperties OptionalInTable OptionalStoredAsOrBy OptionalHdfsLocation + OptionalTblproperties OptionalComment + | AnyCreate 'INDEX' RegularOrBacktickedIdentifier 'ON' 'TABLE' ExistingTable_EDIT ParenthesizedIndexColumnList + 'AS' IndexType OptionalWithDeferredRebuild OptionalIdxProperties OptionalInTable OptionalStoredAsOrBy OptionalHdfsLocation + OptionalTblproperties OptionalComment + | AnyCreate 'INDEX' RegularOrBacktickedIdentifier 'ON' 'TABLE' ExistingTable ParenthesizedIndexColumnList_EDIT + 'AS' IndexType OptionalWithDeferredRebuild OptionalIdxProperties OptionalInTable OptionalStoredAsOrBy OptionalHdfsLocation + OptionalTblproperties OptionalComment + | AnyCreate 'INDEX' RegularOrBacktickedIdentifier 'ON' 'TABLE' ExistingTable ParenthesizedIndexColumnList + 'AS' IndexType OptionalWithDeferredRebuild_EDIT OptionalIdxProperties OptionalInTable OptionalStoredAsOrBy OptionalHdfsLocation + OptionalTblproperties OptionalComment + | AnyCreate 'INDEX' RegularOrBacktickedIdentifier 'ON' 'TABLE' ExistingTable ParenthesizedIndexColumnList + 'AS' IndexType OptionalWithDeferredRebuild OptionalIdxProperties OptionalInTable_EDIT OptionalStoredAsOrBy OptionalHdfsLocation + OptionalTblproperties OptionalComment + | AnyCreate 'INDEX' RegularOrBacktickedIdentifier 'ON' 'TABLE' ExistingTable ParenthesizedIndexColumnList + 'AS' IndexType OptionalWithDeferredRebuild OptionalIdxProperties OptionalInTable StoredAsOrBy_EDIT OptionalHdfsLocation + OptionalTblproperties OptionalComment + | AnyCreate 'INDEX' RegularOrBacktickedIdentifier 'ON' 'TABLE' ExistingTable ParenthesizedIndexColumnList + 'AS' IndexType OptionalWithDeferredRebuild OptionalIdxProperties OptionalInTable OptionalStoredAsOrBy HdfsLocation_EDIT + OptionalTblproperties OptionalComment + | AnyCreate 'INDEX' RegularOrBacktickedIdentifier 'ON' 'TABLE' ExistingTable ParenthesizedIndexColumnList + 'AS' IndexType OptionalWithDeferredRebuild OptionalIdxProperties OptionalInTable OptionalStoredAsOrBy OptionalHdfsLocation + OptionalTblproperties OptionalComment 'CURSOR' + { + if (!$10 && !$11 && !$12 && !$13 && !$14 && !$15 && !$16) { + parser.suggestKeywords([{ value: 'WITH DEFERRED REBUILD', weight: 7 }, { value: 'IDXPROPERTIES', weight: 6 }, { value: 'IN TABLE', weight: 5 }, { value: 'ROW FORMAT', weight: 4 }, { value: 'STORED AS', weight: 4 }, { value: 'STORED BY', weight: 4 }, { value: 'LOCATION', weight: 3 }, { value: 'TBLPROPERTIES', weight: 2 }, { value: 'COMMENT', weight: 1 }]); + } else if (!$11 && !$12 && !$13 && !$14 && !$15 && !$16) { + parser.suggestKeywords([{ value: 'IDXPROPERTIES', weight: 6 }, { value: 'IN TABLE', weight: 5 }, { value: 'ROW FORMAT', weight: 4 }, { value: 'STORED AS', weight: 4 }, { value: 'STORED BY', weight: 4 }, { value: 'LOCATION', weight: 3 }, { value: 'TBLPROPERTIES', weight: 2 }, { value: 'COMMENT', weight: 1 }]); + } else if (!$12 && !$13 && !$14 && !$15 && !$16) { + parser.suggestKeywords([{ value: 'IN TABLE', weight: 5 }, { value: 'ROW FORMAT', weight: 4 }, { value: 'STORED AS', weight: 4 }, { value: 'STORED BY', weight: 4 }, { value: 'LOCATION', weight: 3 }, { value: 'TBLPROPERTIES', weight: 2 }, { value: 'COMMENT', weight: 1 }]); + } else if (!$13 && !$14 && !$15 && !$16) { + parser.suggestKeywords([{ value: 'ROW FORMAT', weight: 4 }, { value: 'STORED AS', weight: 4 }, { value: 'STORED BY', weight: 4 }, { value: 'LOCATION', weight: 3 }, { value: 'TBLPROPERTIES', weight: 2 }, { value: 'COMMENT', weight: 1 }]); + } else if ($13 && $13.suggestKeywords && !$14 && !$15 && !$16) { + parser.suggestKeywords(parser.createWeightedKeywords($13.suggestKeywords, 4).concat([{ value: 'LOCATION', weight: 3 }, { value: 'TBLPROPERTIES', weight: 2 }, { value: 'COMMENT', weight: 1 }])); + } else if (!$14 && !$15 && !$16) { + parser.suggestKeywords([{ value: 'LOCATION', weight: 3 }, { value: 'TBLPROPERTIES', weight: 2 }, { value: 'COMMENT', weight: 1 }]); + } else if (!$15 && !$16) { + parser.suggestKeywords([{ value: 'TBLPROPERTIES', weight: 2 }, { value: 'COMMENT', weight: 1 }]); + } else if (!$16) { + parser.suggestKeywords([{ value: 'COMMENT', weight: 1 }]); + } + } + ; + +IndexType + : QuotedValue + ; + +IndexType_EDIT + : QuotedValue_EDIT + { + parser.suggestKeywords(['\'BITMAP\'', '\'COMPACT\'']); + } + ; + +OptionalWithDeferredRebuild + : + | 'WITH' 'DEFERRED' 'REBUILD' + ; + +OptionalWithDeferredRebuild_EDIT + : 'WITH' 'CURSOR' + { + parser.suggestKeywords(['DEFERRED REBUILD']); + } + | 'WITH' 'DEFERRED' 'CURSOR' + { + parser.suggestKeywords(['REBUILD']); + } + ; + +OptionalIdxProperties + : + | 'IDXPROPERTIES' ParenthesizedPropertyAssignmentList + ; + +OptionalInTable + : + | 'IN' 'TABLE' SchemaQualifiedTableIdentifier + ; + +OptionalInTable_EDIT + : 'IN' 'CURSOR' + { + parser.suggestKeywords(['TABLE']); + } + | 'IN' 'TABLE' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + | 'IN' 'TABLE' SchemaQualifiedTableIdentifier_EDIT + ; + + +ParenthesizedIndexColumnList + : '(' IndexColumnList ')' + ; + +ParenthesizedIndexColumnList_EDIT + : '(' IndexColumnList_EDIT RightParenthesisOrError + { + parser.suggestColumns(); + } + ; + +IndexColumnList + : ColumnReference + | IndexColumnList ',' ColumnReference + ; + +IndexColumnList_EDIT + : AnyCursor + | IndexColumnList ',' AnyCursor + | AnyCursor ',' IndexColumnList + | IndexColumnList ',' AnyCursor ',' IndexColumnList + ; + +MacroDefinition + : AnyCreate 'TEMPORARY' 'MACRO' RegularIdentifier MacroArguments ValueExpression + ; + +MacroDefinition_EDIT + : AnyCreate 'TEMPORARY' 'MACRO' RegularIdentifier MacroArguments_EDIT + | AnyCreate 'TEMPORARY' 'MACRO' RegularIdentifier MacroArguments_EDIT ValueExpression + | AnyCreate 'TEMPORARY' 'MACRO' RegularIdentifier MacroArguments 'CURSOR' + { + parser.suggestFunctions(); + } + | AnyCreate 'TEMPORARY' 'MACRO' RegularIdentifier MacroArguments ValueExpression_EDIT + ; + +MacroArguments + : '(' ')' + | '(' MacroArgumentList ')' + ; + +MacroArguments_EDIT + : '(' MacroArgumentList_EDIT RightParenthesisOrError + ; + + +MacroArgumentList + : MacroArgument + | MacroArgumentList ',' MacroArgument + ; + +MacroArgumentList_EDIT + : MacroArgument_EDIT + | MacroArgumentList ',' MacroArgument_EDIT + | MacroArgument_EDIT ',' MacroArgumentList + | MacroArgumentList ',' MacroArgument_EDIT ',' MacroArgumentList + ; + +MacroArgument + : RegularIdentifier ColumnDataType + ; + +MacroArgument_EDIT + : RegularIdentifier 'CURSOR' + { + parser.suggestKeywords(parser.getColumnDataTypeKeywords()); + } + | RegularIdentifier ColumnDataType_EDIT + ; \ No newline at end of file diff --git a/jison/sql_drop.jison b/jison/sql_drop.jison new file mode 100755 index 0000000..5725f10 --- /dev/null +++ b/jison/sql_drop.jison @@ -0,0 +1,504 @@ +// Licensed to Cloudera, Inc. under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. Cloudera, Inc. licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +DataDefinition + : DropStatement + | HiveAbortStatement + ; + +DataDefinition_EDIT + : DropStatement_EDIT + | HiveAbortStatement_EDIT + ; + +DataManipulation + : HiveDeleteStatement + | ImpalaDeleteStatement + ; + +DataManipulation_EDIT + : HiveDeleteStatement_EDIT + | ImpalaDeleteStatement_EDIT + ; + +DropStatement + : DropDatabaseStatement + | DropFunctionStatement + | DropRoleStatement + | DropStatsStatement + | DropTableStatement + | DropIndexStatement + | DropMacroStatement + | DropViewStatement + | TruncateTableStatement + ; + +DropStatement_EDIT + : DropDatabaseStatement_EDIT + | DropFunctionStatement_EDIT + | DropStatsStatement_EDIT + | DropTableStatement_EDIT + | DropIndexStatement_EDIT + | DropMacroStatement_EDIT + | DropViewStatement_EDIT + | TruncateTableStatement_EDIT + | 'DROP' 'CURSOR' + { + if (parser.isHive()) { + parser.suggestKeywords(['DATABASE', 'FUNCTION', 'INDEX', 'ROLE', 'SCHEMA', 'TABLE', 'TEMPORARY FUNCTION', 'TEMPORARY MACRO', 'VIEW']); + } else if (parser.isImpala()) { + parser.suggestKeywords(['AGGREGATE FUNCTION', 'DATABASE', 'FUNCTION', 'INCREMENTAL STATS', 'ROLE', 'SCHEMA', 'STATS', 'TABLE', 'VIEW']); + } else { + parser.suggestKeywords(['ROLE', 'SCHEMA', 'TABLE', 'VIEW']); + } + } + ; + +DropDatabaseStatement + : 'DROP' DatabaseOrSchema OptionalIfExists RegularOrBacktickedIdentifier OptionalCascadeOrRestrict + ; + +DropDatabaseStatement_EDIT + : 'DROP' DatabaseOrSchema OptionalIfExists + | 'DROP' DatabaseOrSchema OptionalIfExists_EDIT + | 'DROP' DatabaseOrSchema OptionalIfExists 'CURSOR' + { + if (!$3) { + parser.suggestKeywords(['IF EXISTS']); + } + parser.suggestDatabases(); + } + | 'DROP' DatabaseOrSchema OptionalIfExists RegularOrBacktickedIdentifier 'CURSOR' + { + if (parser.isHive() || parser.isImpala()) { + parser.suggestKeywords(['CASCADE', 'RESTRICT']); + } + } + | 'DROP' DatabaseOrSchema OptionalIfExists_EDIT RegularOrBacktickedIdentifier OptionalCascadeOrRestrict + | 'DROP' DatabaseOrSchema OptionalIfExists 'CURSOR' RegularOrBacktickedIdentifier OptionalCascadeOrRestrict + { + if (!$3) { + parser.suggestKeywords(['IF EXISTS']); + } + } + ; + +DropFunctionStatement + : DropImpalaFunction + | DropHiveFunction + ; + +DropFunctionStatement_EDIT + : DropImpalaFunction_EDIT + | DropHiveFunction_EDIT + ; + +// OptionalAggregate is no go for look ahead reasons +DropImpalaFunction + : 'DROP' 'FUNCTION' OptionalIfExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList + | 'DROP' 'AGGREGATE' 'FUNCTION' OptionalIfExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList + ; + +DropImpalaFunction_EDIT + : 'DROP' 'FUNCTION' OptionalIfExists 'CURSOR' + { + if (!$3) { + parser.suggestKeywords(['IF EXISTS']); + } + parser.suggestDatabases({ appendDot: true }); + } + | 'DROP' 'AGGREGATE' 'FUNCTION' OptionalIfExists 'CURSOR' + { + if (!$4) { + parser.suggestKeywords(['IF EXISTS']); + } + parser.suggestDatabases({ appendDot: true }); + } + | 'DROP' 'FUNCTION' OptionalIfExists 'CURSOR' SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList + { + if (!$3) { + parser.suggestKeywords(['IF EXISTS']); + } + } + | 'DROP' 'FUNCTION' OptionalIfExists_EDIT + | 'DROP' 'CURSOR' 'FUNCTION' OptionalIfExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList + { + parser.suggestKeywords(['AGGREGATE']); + } + | 'DROP' 'FUNCTION' OptionalIfExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList_EDIT + | 'DROP' 'AGGREGATE' 'CURSOR' + { + parser.suggestKeywords(['FUNCTION']); + } + | 'DROP' 'AGGREGATE' 'FUNCTION' OptionalIfExists 'CURSOR' SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList + { + if (!$4) { + parser.suggestKeywords(['IF EXISTS']); + } + } + | 'DROP' 'AGGREGATE' 'FUNCTION' OptionalIfExists_EDIT + | 'DROP' 'AGGREGATE' 'FUNCTION' OptionalIfExists SchemaQualifiedIdentifier ParenthesizedImpalaArgumentList_EDIT + | 'DROP' 'FUNCTION' OptionalIfExists SchemaQualifiedIdentifier_EDIT ParenthesizedImpalaArgumentList + | 'DROP' 'AGGREGATE' 'FUNCTION' OptionalIfExists SchemaQualifiedIdentifier_EDIT ParenthesizedImpalaArgumentList + ; + +DropHiveFunction + : 'DROP' 'FUNCTION' OptionalIfExists SchemaQualifiedIdentifier + | 'DROP' 'TEMPORARY' 'FUNCTION' OptionalIfExists RegularIdentifier + ; + +DropHiveFunction_EDIT + : 'DROP' 'FUNCTION' OptionalIfExists 'CURSOR' + { + if (!$3) { + parser.suggestKeywords(['IF EXISTS']); + } + } + | 'DROP' 'FUNCTION' OptionalIfExists 'CURSOR' SchemaQualifiedIdentifier + { + if (!$3) { + parser.suggestKeywords(['IF EXISTS']); + } + } + | 'DROP' 'FUNCTION' OptionalIfExists_EDIT + | 'DROP' 'FUNCTION' OptionalIfExists_EDIT SchemaQualifiedIdentifier + | 'DROP' 'FUNCTION' OptionalIfExists SchemaQualifiedIdentifier_EDIT + | 'DROP' 'TEMPORARY' 'FUNCTION' OptionalIfExists 'CURSOR' + { + if (!$4) { + parser.suggestKeywords(['IF EXISTS']); + } + } + | 'DROP' 'TEMPORARY' 'FUNCTION' OptionalIfExists_EDIT + ; + +DropRoleStatement + : 'DROP' AnyRole RegularIdentifier + ; + +DropStatsStatement + : 'DROP' 'STATS' SchemaQualifiedTableIdentifier + { + parser.addTablePrimary($3); + } + | 'DROP' 'INCREMENTAL' 'STATS' SchemaQualifiedTableIdentifier PartitionSpec + { + parser.addTablePrimary($4); + } + ; + +DropStatsStatement_EDIT + : 'DROP' 'STATS' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + | 'DROP' 'STATS' SchemaQualifiedTableIdentifier_EDIT + | 'DROP' 'CURSOR' 'STATS' SchemaQualifiedTableIdentifier + { + parser.addTablePrimary($4); + parser.suggestKeywords(['INCREMENTAL']); + } + | 'DROP' 'CURSOR' 'STATS' SchemaQualifiedTableIdentifier PartitionSpec + { + parser.addTablePrimary($4); + parser.suggestKeywords(['INCREMENTAL']); + } + | 'DROP' 'INCREMENTAL' 'CURSOR' + { + parser.suggestKeywords(['STATS']); + } + | 'DROP' 'INCREMENTAL' 'STATS' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + | 'DROP' 'INCREMENTAL' 'STATS' SchemaQualifiedTableIdentifier_EDIT + | 'DROP' 'INCREMENTAL' 'STATS' SchemaQualifiedTableIdentifier_EDIT PartitionSpec + | 'DROP' 'INCREMENTAL' 'STATS' SchemaQualifiedTableIdentifier 'CURSOR' + { + parser.addTablePrimary($4); + parser.suggestKeywords(['PARTITION']); + } + | 'DROP' 'INCREMENTAL' 'STATS' SchemaQualifiedTableIdentifier PartitionSpec_EDIT + { + parser.addTablePrimary($4); + } + ; + +DropTableStatement + : 'DROP' AnyTable OptionalIfExists SchemaQualifiedTableIdentifier OptionalPurge + { + parser.addTablePrimary($4); + } + ; + +DropTableStatement_EDIT + : 'DROP' AnyTable OptionalIfExists_EDIT + | 'DROP' AnyTable OptionalIfExists 'CURSOR' + { + if (!$3) { + parser.suggestKeywords(['IF EXISTS']); + } + parser.suggestTables({ onlyTables: true }); + parser.suggestDatabases({ + appendDot: true + }); + } + | 'DROP' AnyTable OptionalIfExists SchemaQualifiedTableIdentifier_EDIT OptionalPurge + { + if (parser.yy.result.suggestTables) { + parser.yy.result.suggestTables.onlyTables = true; + } + } + | 'DROP' AnyTable OptionalIfExists_EDIT SchemaQualifiedTableIdentifier OptionalPurge + | 'DROP' AnyTable OptionalIfExists SchemaQualifiedTableIdentifier OptionalPurge 'CURSOR' + { + parser.addTablePrimary($4); + if (!$5) { + parser.suggestKeywords(['PURGE']); + } + } + ; + +OptionalPurge + : + | 'PURGE' + | 'PURGE' + ; + + +DropIndexStatement + : 'DROP' 'INDEX' OptionalIfExists RegularOrBacktickedIdentifier 'ON' SchemaQualifiedTableIdentifier + { + parser.addTablePrimary($6); + } + ; + +DropIndexStatement_EDIT + : 'DROP' 'INDEX' OptionalIfExists 'CURSOR' + { + parser.suggestKeywords(['IF EXISTS']); + } + | 'DROP' 'INDEX' OptionalIfExists_EDIT + | 'DROP' 'INDEX' OptionalIfExists RegularOrBacktickedIdentifier 'CURSOR' + { + parser.suggestKeywords(['ON']); + } + | 'DROP' 'INDEX' OptionalIfExists RegularOrBacktickedIdentifier 'ON' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + | 'DROP' 'INDEX' OptionalIfExists RegularOrBacktickedIdentifier 'ON' SchemaQualifiedTableIdentifier_EDIT + ; + +DropMacroStatement + : 'DROP' 'TEMPORARY' 'MACRO' OptionalIfExists RegularIdentifier + ; + +DropMacroStatement_EDIT + : 'DROP' 'TEMPORARY' 'CURSOR' + { + parser.suggestKeywords(['FUNCTION', 'MACRO']); + } + | 'DROP' 'TEMPORARY' 'MACRO' OptionalIfExists 'CURSOR' + { + if (!$4) { + parser.suggestKeywords(['IF EXISTS']); + } + } + | 'DROP' 'TEMPORARY' 'MACRO' OptionalIfExists_EDIT + ; + +DropViewStatement + : 'DROP' AnyView OptionalIfExists SchemaQualifiedTableIdentifier + { + parser.addTablePrimary($4); + } + ; + +DropViewStatement_EDIT + : 'DROP' AnyView OptionalIfExists 'CURSOR' + { + if (!$3) { + parser.suggestKeywords(['IF EXISTS']); + } + parser.suggestTables({ onlyViews: true }); + parser.suggestDatabases({ appendDot: true }); + } + | 'DROP' AnyView OptionalIfExists 'CURSOR' SchemaQualifiedTableIdentifier + { + parser.addTablePrimary($5); + if (!$3) { + parser.suggestKeywords(['IF EXISTS']); + } + } + | 'DROP' AnyView OptionalIfExists_EDIT + | 'DROP' AnyView OptionalIfExists_EDIT SchemaQualifiedTableIdentifier + { + parser.addTablePrimary($4); + } + | 'DROP' AnyView OptionalIfExists SchemaQualifiedTableIdentifier_EDIT + { + if (parser.yy.result.suggestTables) { + parser.yy.result.suggestTables.onlyViews = true; + } + } + ; + +TruncateTableStatement + : 'TRUNCATE' AnyTable OptionalIfExists SchemaQualifiedTableIdentifier OptionalPartitionSpec + { + parser.addTablePrimary($4); + } + ; + +TruncateTableStatement_EDIT + : 'TRUNCATE' 'CURSOR' + { + parser.suggestKeywords(['TABLE']); + } + | 'TRUNCATE' AnyTable OptionalIfExists 'CURSOR' OptionalPartitionSpec + { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + if (parser.isImpala() && !$3) { + parser.suggestKeywords(['IF EXISTS']); + } + } + | 'TRUNCATE' AnyTable OptionalIfExists_EDIT OptionalPartitionSpec + | 'TRUNCATE' AnyTable OptionalIfExists SchemaQualifiedTableIdentifier_EDIT OptionalPartitionSpec + | 'TRUNCATE' AnyTable OptionalIfExists SchemaQualifiedTableIdentifier OptionalPartitionSpec 'CURSOR' + { + parser.addTablePrimary($4); + if (parser.isHive() && !$5) { + parser.suggestKeywords(['PARTITION']); + } + } + | 'TRUNCATE' AnyTable OptionalIfExists SchemaQualifiedTableIdentifier OptionalPartitionSpec_EDIT + { + parser.addTablePrimary($4); + } + | 'TRUNCATE' AnyTable OptionalIfExists 'CURSOR' SchemaQualifiedTableIdentifier OptionalPartitionSpec + { + parser.addTablePrimary($4); + if (parser.isImpala() && !$3) { + parser.suggestKeywords(['IF EXISTS']); + } + } + | 'TRUNCATE' AnyTable OptionalIfExists_EDIT SchemaQualifiedTableIdentifier OptionalPartitionSpec + ; + +HiveDeleteStatement + : 'DELETE' 'FROM' SchemaQualifiedTableIdentifier OptionalWhereClause + { + parser.addTablePrimary($3); + } + ; + +HiveDeleteStatement_EDIT + : 'DELETE' 'CURSOR' + { + parser.suggestKeywords(['FROM']); + } + | 'DELETE' 'FROM' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + | 'DELETE' 'FROM' SchemaQualifiedTableIdentifier 'CURSOR' OptionalWhereClause + { + parser.addTablePrimary($3); + if (!$5) { + parser.suggestKeywords(['WHERE']); + } + } + | 'DELETE' 'FROM' SchemaQualifiedTableIdentifier_EDIT OptionalWhereClause + | 'DELETE' 'FROM' SchemaQualifiedTableIdentifier WhereClause_EDIT + { + parser.addTablePrimary($3); + } + ; + +ImpalaDeleteStatement + : 'DELETE' OptionalImpalaDeleteTableRef 'FROM' TableReference OptionalWhereClause + ; + +ImpalaDeleteStatement_EDIT + : 'DELETE' OptionalImpalaDeleteTableRef 'CURSOR' + { + parser.suggestKeywords(['FROM']); + if (parser.isImpala() && !$2) { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + } + | 'DELETE' ImpalaDeleteTableRef_EDIT + | 'DELETE' OptionalImpalaDeleteTableRef 'FROM' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + | 'DELETE' OptionalImpalaDeleteTableRef 'FROM' TableReference 'CURSOR' OptionalWhereClause + { + var keywords = [{ value: 'FULL JOIN', weight: 1 }, { value: 'FULL OUTER JOIN', weight: 1 }, { value: 'JOIN', weight: 1 }, { value: 'LEFT JOIN', weight: 1 }, { value: 'LEFT OUTER JOIN', weight: 1 }, { value: 'RIGHT JOIN', weight: 1 }, { value: 'RIGHT OUTER JOIN', weight: 1 }, { value: 'INNER JOIN', weight: 1 }, { value: 'LEFT ANTI JOIN', weight: 1 }, { value: 'LEFT SEMI JOIN', weight: 1 }, { value: 'RIGHT ANTI JOIN', weight: 1 }, { value: 'RIGHT SEMI JOIN', weight: 1 }]; + if (!$6) { + keywords.push({ value: 'WHERE', weight: 3 }); + } + if ($4.suggestJoinConditions) { + parser.suggestJoinConditions($4.suggestJoinConditions); + } + if ($4.suggestJoins) { + parser.suggestJoins($4.suggestJoins); + } + if ($4.suggestKeywords) { + keywords = keywords.concat(parser.createWeightedKeywords($4.suggestKeywords, 2)); + } + if (keywords.length > 0) { + parser.suggestKeywords(keywords); + } + } + | 'DELETE' ImpalaDeleteTableRef_EDIT 'FROM' + | 'DELETE' ImpalaDeleteTableRef_EDIT 'FROM' TableReference OptionalWhereClause + | 'DELETE' OptionalImpalaDeleteTableRef 'FROM' TableReference_EDIT OptionalWhereClause + | 'DELETE' OptionalImpalaDeleteTableRef 'FROM' TableReference WhereClause_EDIT + ; + +OptionalImpalaDeleteTableRef + : + | TableReference + ; + +ImpalaDeleteTableRef_EDIT + : TableReference_EDIT + ; + +HiveAbortStatement + : 'ABORT' 'TRANSACTIONS' TransactionIdList + ; + +HiveAbortStatement_EDIT + : 'ABORT' 'CURSOR' + { + parser.suggestKeywords(['TRANSACTIONS']); + } + ; + +TransactionIdList + : UnsignedNumericLiteral + | TransactionIdList ',' UnsignedNumericLiteral + ; \ No newline at end of file diff --git a/jison/sql_error.jison b/jison/sql_error.jison new file mode 100755 index 0000000..f0f589a --- /dev/null +++ b/jison/sql_error.jison @@ -0,0 +1,190 @@ +// Licensed to Cloudera, Inc. under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. Cloudera, Inc. licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +SqlStatements + : error + | NonStartingToken error // Having just ': error' does not work for some reason, jison bug? + ; + +SqlStatement_EDIT + : AnyCursor error + { + if (parser.isHive()) { + parser.suggestDdlAndDmlKeywords(['EXPLAIN', 'FROM']); + } else if (parser.isImpala()) { + parser.suggestDdlAndDmlKeywords(['EXPLAIN']); + } else { + parser.suggestDdlAndDmlKeywords(); + } + } + ; + +SelectStatement + : 'SELECT' OptionalAllOrDistinct OptionalStraightJoin SelectList_ERROR TableExpression + | 'SELECT' OptionalAllOrDistinct OptionalStraightJoin SelectList TableExpression_ERROR + ; + +SelectStatement_EDIT + : 'SELECT' OptionalAllOrDistinct OptionalStraightJoin SelectList_ERROR_EDIT TableExpression + { + parser.selectListNoTableSuggest($4, $2); + } + | 'SELECT' OptionalAllOrDistinct OptionalStraightJoin SelectList_ERROR TableExpression_EDIT + ; + +SelectList_ERROR + : ErrorList + | SelectList ',' ErrorList + | ErrorList ',' SelectList ',' ErrorList + | ErrorList ',' SelectList + | SelectList ',' ErrorList ',' SelectList + ; + +SelectList_ERROR_EDIT + : ErrorList ',' SelectList_EDIT -> $3 + | SelectList ',' ErrorList ',' SelectList_EDIT -> $5 + | ErrorList ',' SelectList ',' ErrorList ',' SelectList_EDIT -> $7 + | ErrorList ',' AnyCursor + { + $$ = { cursorAtStart : false, suggestFunctions: true, suggestColumns: true, suggestAggregateFunctions: true }; + } + | SelectList ',' ErrorList ',' AnyCursor + { + $$ = { cursorAtStart : false, suggestFunctions: true, suggestColumns: true, suggestAggregateFunctions: true }; + } + | ErrorList ',' SelectList ',' Errors ',' AnyCursor + { + $$ = { cursorAtStart : true, suggestFunctions: true, suggestColumns: true, suggestAggregateFunctions: true }; + } + ; + +SetSpecification + : 'SET' SetOption '=' error + ; + +ErrorList + : error + | Errors ',' error + ; + +LateralView + : 'LATERAL' 'VIEW' OptionalOuter ArbitraryFunction RegularOrBacktickedIdentifier 'AS' error -> { } + | 'LATERAL' 'VIEW' OptionalOuter ArbitraryFunction error -> { } + | 'LATERAL' 'VIEW' OptionalOuter error -> { } + | 'LATERAL' error -> { } + ; + +JoinType_EDIT + : 'FULL' 'CURSOR' error + { + parser.suggestKeywords(['JOIN', 'OUTER JOIN']); + } + | 'LEFT' 'CURSOR' error + { + if (parser.isHive()) { + parser.suggestKeywords(['JOIN', 'OUTER JOIN', 'SEMI JOIN']); + } else if (parser.isImpala()) { + parser.suggestKeywords(['ANTI JOIN', 'INNER JOIN', 'JOIN', 'OUTER JOIN', 'SEMI JOIN']); + } else { + parser.suggestKeywords(['JOIN', 'OUTER JOIN']); + } + } + | 'RIGHT' 'CURSOR' error + { + if (parser.isImpala()) { + parser.suggestKeywords(['ANTI JOIN', 'INNER JOIN', 'JOIN', 'OUTER JOIN', 'SEMI JOIN']); + } else { + parser.suggestKeywords(['JOIN', 'OUTER JOIN']); + } + } + ; + +OptionalSelectConditions_EDIT + : WhereClause error 'CURSOR' OptionalGroupByClause OptionalHavingClause OptionalWindowClause OptionalOrderByClause OptionalClusterOrDistributeBy OptionalLimitClause OptionalOffsetClause + { + $$ = { + suggestKeywords: parser.getKeywordsForOptionalsLR([$4, $5, $6, $7, $8, $9, $10], [{ value: 'GROUP BY', weight: 8 }, { value: 'HAVING', weight: 7 }, { value: 'WINDOW', weight: 6 }, { value: 'ORDER BY', weight: 5 }, [{ value: 'CLUSTER BY', weight: 4 }, { value: 'DISTRIBUTE BY', weight: 4 }, { value: 'SORT BY', weight: 4 }], { value: 'LIMIT', weight: 3 }, { value: 'OFFSET', weight: 2 }], [true, true, parser.isHive(), true, parser.isHive(), true, parser.isImpala()]), + cursorAtEnd: !$4 && !$5 && !$6 && !$7 && !$8 && !$9 && !$10 + }; + } + | OptionalWhereClause OptionalGroupByClause HavingClause error 'CURSOR' OptionalWindowClause OptionalOrderByClause OptionalClusterOrDistributeBy OptionalLimitClause OptionalOffsetClause + { + $$ = { + suggestKeywords: parser.getKeywordsForOptionalsLR([$6, $7, $8, $9, $10], [{ value: 'WINDOW', weight: 6 }, { value: 'ORDER BY', weight: 5 }, [{ value: 'CLUSTER BY', weight: 4 }, { value: 'DISTRIBUTE BY', weight: 4 }, { value: 'SORT BY', weight: 4 }], { value: 'LIMIT', weight: 3 }, { value: 'OFFSET', weight: 2 }], [parser.isHive(), true, parser.isHive(), true, parser.isImpala()]), + cursorAtEnd: !$6 && !$7 && !$8 && !$9 && !$10 + } + } + | OptionalWhereClause OptionalGroupByClause OptionalHavingClause WindowClause error 'CURSOR' OptionalOrderByClause OptionalClusterOrDistributeBy OptionalLimitClause OptionalOffsetClause + { + $$ = { + suggestKeywords: parser.getKeywordsForOptionalsLR([$7, $8, $9, $10], [{ value: 'ORDER BY', weight: 5 }, [{ value: 'CLUSTER BY', weight: 4 }, { value: 'DISTRIBUTE BY', weight: 4 }, { value: 'SORT BY', weight: 4 }], { value: 'LIMIT', weight: 3 }, { value: 'OFFSET', weight: 2 }], [true, parser.isHive(), true, parser.isImpala()]), + cursorAtEnd: !$7 && !$8 && !$9 && !$10 + } + } + | OptionalWhereClause OptionalGroupByClause OptionalHavingClause OptionalWindowClause OrderByClause error 'CURSOR' OptionalClusterOrDistributeBy OptionalLimitClause OptionalOffsetClause + { + $$ = { + suggestKeywords: parser.getKeywordsForOptionalsLR([$8, $9, $10], [[{ value: 'CLUSTER BY', weight: 4 }, { value: 'DISTRIBUTE BY', weight: 4 }, { value: 'SORT BY', weight: 4 }], { value: 'LIMIT', weight: 3 }, { value: 'OFFSET', weight: 2 }], [parser.isHive(), true, parser.isImpala()]), + cursorAtEnd: !$8 && !$9 && !$10 + } + } + | OptionalWhereClause OptionalGroupByClause OptionalHavingClause OptionalWindowClause OptionalOrderByClause ClusterOrDistributeBy error 'CURSOR' OptionalLimitClause OptionalOffsetClause + { + $$ = { + suggestKeywords: parser.getKeywordsForOptionalsLR([$9, $10], [{ value: 'LIMIT', weight: 3 }, { value: 'OFFSET', weight: 2 }], [true, parser.isImpala()]), + cursorAtEnd: !$9 && !$10 + } + } + | OptionalWhereClause OptionalGroupByClause OptionalHavingClause OptionalWindowClause OptionalOrderByClause OptionalClusterOrDistributeBy LimitClause error 'CURSOR' OptionalOffsetClause + { + $$ = { + suggestKeywords: parser.getKeywordsForOptionalsLR([$10], [{ value: 'OFFSET', weight: 2 }], [parser.isImpala()]), + cursorAtEnd: !$10 + } + } + ; + +OptionalSelectConditions_EDIT + : WhereClause error GroupByClause_EDIT OptionalHavingClause OptionalWindowClause OptionalOrderByClause OptionalClusterOrDistributeBy OptionalLimitClause OptionalOffsetClause + | WhereClause error OptionalGroupByClause HavingClause_EDIT OptionalWindowClause OptionalOrderByClause OptionalClusterOrDistributeBy OptionalLimitClause OptionalOffsetClause + | WhereClause error OptionalGroupByClause OptionalHavingClause WindowClause_EDIT OptionalOrderByClause OptionalClusterOrDistributeBy OptionalLimitClause OptionalOffsetClause + | WhereClause error OptionalGroupByClause OptionalHavingClause OptionalWindowClause OrderByClause_EDIT OptionalClusterOrDistributeBy OptionalLimitClause OptionalOffsetClause + | WhereClause error OptionalGroupByClause OptionalHavingClause OptionalWindowClause OptionalOrderByClause ClusterOrDistributeBy_EDIT OptionalLimitClause OptionalOffsetClause + | WhereClause error OptionalGroupByClause OptionalHavingClause OptionalWindowClause OptionalOrderByClause OptionalClusterOrDistributeBy LimitClause_EDIT OptionalOffsetClause + | WhereClause error OptionalGroupByClause OptionalHavingClause OptionalWindowClause OptionalOrderByClause OptionalClusterOrDistributeBy OptionalLimitClause OffsetClause_EDIT + | OptionalWhereClause GroupByClause error HavingClause_EDIT OptionalWindowClause OptionalOrderByClause OptionalClusterOrDistributeBy OptionalLimitClause OptionalOffsetClause + | OptionalWhereClause GroupByClause error OptionalHavingClause WindowClause_EDIT OptionalOrderByClause OptionalClusterOrDistributeBy OptionalLimitClause OptionalOffsetClause + | OptionalWhereClause GroupByClause error OptionalHavingClause OptionalWindowClause OrderByClause_EDIT OptionalClusterOrDistributeBy OptionalLimitClause OptionalOffsetClause + | OptionalWhereClause GroupByClause error OptionalHavingClause OptionalWindowClause OptionalOrderByClause ClusterOrDistributeBy_EDIT OptionalLimitClause OptionalOffsetClause + | OptionalWhereClause GroupByClause error OptionalHavingClause OptionalWindowClause OptionalOrderByClause OptionalClusterOrDistributeBy LimitClause_EDIT OptionalOffsetClause + | OptionalWhereClause GroupByClause error OptionalHavingClause OptionalWindowClause OptionalOrderByClause OptionalClusterOrDistributeBy OptionalLimitClause OffsetClause_EDIT + | OptionalWhereClause OptionalGroupByClause HavingClause error WindowClause_EDIT OptionalOrderByClause OptionalClusterOrDistributeBy OptionalLimitClause OptionalOffsetClause + | OptionalWhereClause OptionalGroupByClause HavingClause error OptionalWindowClause OrderByClause_EDIT OptionalClusterOrDistributeBy OptionalLimitClause OptionalOffsetClause + | OptionalWhereClause OptionalGroupByClause HavingClause error OptionalWindowClause OptionalOrderByClause ClusterOrDistributeBy_EDIT OptionalLimitClause OptionalOffsetClause + | OptionalWhereClause OptionalGroupByClause HavingClause error OptionalWindowClause OptionalOrderByClause OptionalClusterOrDistributeBy LimitClause_EDIT OptionalOffsetClause + | OptionalWhereClause OptionalGroupByClause HavingClause error OptionalWindowClause OptionalOrderByClause OptionalClusterOrDistributeBy OptionalLimitClause OffsetClause_EDIT + | OptionalWhereClause OptionalGroupByClause OptionalHavingClause WindowClause error OrderByClause_EDIT OptionalClusterOrDistributeBy OptionalLimitClause OptionalOffsetClause + | OptionalWhereClause OptionalGroupByClause OptionalHavingClause WindowClause error OptionalOrderByClause ClusterOrDistributeBy_EDIT OptionalLimitClause OptionalOffsetClause + | OptionalWhereClause OptionalGroupByClause OptionalHavingClause WindowClause error OptionalOrderByClause OptionalClusterOrDistributeBy LimitClause_EDIT OptionalOffsetClause + | OptionalWhereClause OptionalGroupByClause OptionalHavingClause WindowClause error OptionalOrderByClause OptionalClusterOrDistributeBy OptionalLimitClause OffsetClause_EDIT + | OptionalWhereClause OptionalGroupByClause OptionalHavingClause OptionalWindowClause OrderByClause error ClusterOrDistributeBy_EDIT OptionalLimitClause OptionalOffsetClause + | OptionalWhereClause OptionalGroupByClause OptionalHavingClause OptionalWindowClause OrderByClause error OptionalClusterOrDistributeBy LimitClause_EDIT OptionalOffsetClause + | OptionalWhereClause OptionalGroupByClause OptionalHavingClause OptionalWindowClause OrderByClause error OptionalClusterOrDistributeBy OptionalLimitClause OffsetClause_EDIT + ; + +DatabaseDefinition_EDIT + : AnyCreate DatabaseOrSchema OptionalIfNotExists RegularIdentifier DatabaseDefinitionOptionals_EDIT error + ; diff --git a/jison/sql_grant.jison b/jison/sql_grant.jison new file mode 100755 index 0000000..0b09ddb --- /dev/null +++ b/jison/sql_grant.jison @@ -0,0 +1,516 @@ +// Licensed to Cloudera, Inc. under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. Cloudera, Inc. licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +DataDefinition + : GrantStatement + | RevokeStatement + ; + +DataDefinition_EDIT + : GrantStatement_EDIT + | RevokeStatement_EDIT + ; + +GrantStatement + : 'GRANT' HivePrivilegeTypeList OptionalOnSpecification 'TO' PrincipalSpecificationList OptionalWithGrantOption + | 'GRANT' UserOrRoleList 'TO' PrincipalSpecificationList OptionalWithAdminOption + | 'GRANT' 'ROLE' UserOrRoleList 'TO' PrincipalSpecificationList OptionalWithAdminOption + | 'GRANT' 'ROLE' RegularOrBacktickedIdentifier 'TO' 'GROUP' RegularOrBacktickedIdentifier + | 'GRANT' ImpalaPrivilegeType 'ON' ImpalaObjectSpecification 'TO' RegularOrBacktickedIdentifier OptionalWithGrantOption + | 'GRANT' ImpalaPrivilegeType 'ON' ImpalaObjectSpecification 'TO' 'ROLE' RegularOrBacktickedIdentifier OptionalWithGrantOption + ; + +GrantStatement_EDIT + : 'GRANT' 'CURSOR' + { + parser.suggestKeywords(['ALL', 'ALTER', 'CREATE', 'DELETE', 'DROP', 'INDEX', 'INSERT', 'LOCK', 'ROLE', 'SELECT', 'UPDATE']); + } + | 'GRANT' HivePrivilegeTypeList_EDIT OptionalOnSpecification + | 'GRANT' HivePrivilegeTypeList OnSpecification_EDIT + | 'GRANT' HivePrivilegeTypeList OptionalOnSpecification 'CURSOR' + { + if (!$3) { + parser.suggestKeywords(['ON', 'TO']); + } else { + parser.suggestKeywords(['TO']); + } + } + | 'GRANT' HivePrivilegeTypeList OptionalOnSpecification 'TO' 'CURSOR' + { + parser.suggestKeywords(['GROUP', 'ROLE', 'USER']); + } + | 'GRANT' HivePrivilegeTypeList OptionalOnSpecification 'TO' PrincipalSpecificationList_EDIT + | 'GRANT' HivePrivilegeTypeList OptionalOnSpecification 'TO' PrincipalSpecificationList OptionalWithGrantOption 'CURSOR' + { + if (!$6) { + parser.suggestKeywords(['WITH GRANT OPTION']); + } + } + | 'GRANT' HivePrivilegeTypeList OptionalOnSpecification 'TO' PrincipalSpecificationList WithGrantOption_EDIT + | 'GRANT' UserOrRoleList 'CURSOR' + { + parser.suggestKeywords(['TO']); + } + | 'GRANT' UserOrRoleList 'TO' 'CURSOR' + { + parser.suggestKeywords(['GROUP', 'ROLE', 'USER']); + } + | 'GRANT' UserOrRoleList 'TO' PrincipalSpecificationList_EDIT + | 'GRANT' UserOrRoleList 'TO' PrincipalSpecificationList OptionalWithAdminOption 'CURSOR' + { + if (!$5) { + parser.suggestKeywords(['WITH ADMIN OPTION']); + } + } + | 'GRANT' UserOrRoleList 'TO' PrincipalSpecificationList WithAdminOption_EDIT + | 'GRANT' 'ROLE' UserOrRoleList 'TO' 'CURSOR' + { + parser.suggestKeywords(['GROUP', 'ROLE', 'USER']); + } + | 'GRANT' 'ROLE' UserOrRoleList 'TO' PrincipalSpecificationList_EDIT + | 'GRANT' 'ROLE' UserOrRoleList 'TO' PrincipalSpecificationList OptionalWithAdminOption 'CURSOR' + { + if (!$6) { + parser.suggestKeywords(['WITH ADMIN OPTION']); + } + } + | 'GRANT' 'ROLE' UserOrRoleList 'TO' PrincipalSpecificationList WithAdminOption_EDIT + | 'GRANT' 'CURSOR' + { + parser.suggestKeywords(['ALL', 'ALTER', 'CREATE', 'DROP', 'INSERT', 'REFRESH', 'ROLE', 'SELECT']); + } + | 'GRANT' 'ROLE' RegularOrBacktickedIdentifier 'CURSOR' + { + parser.suggestKeywords(['TO GROUP']); + } + | 'GRANT' 'ROLE' RegularOrBacktickedIdentifier 'TO' 'CURSOR' + { + parser.suggestKeywords(['GROUP']); + } + | 'GRANT' ImpalaPrivilegeType_EDIT + | 'GRANT' ImpalaPrivilegeType 'CURSOR' + { + if ($2.isCreate) { + parser.suggestKeywords(['ON DATABASE', 'ON SERVER']); + } else { + parser.suggestKeywords(['ON DATABASE', 'ON SERVER', 'ON TABLE', 'ON URI']); + } + } + | 'GRANT' ImpalaPrivilegeType 'ON' 'CURSOR' + { + if ($2.isCreate) { + parser.suggestKeywords(['DATABASE', 'SERVER']); + } else { + parser.suggestKeywords(['DATABASE', 'SERVER', 'TABLE', 'URI']); + } + } + | 'GRANT' ImpalaPrivilegeType 'ON' ImpalaObjectSpecification_EDIT + | 'GRANT' ImpalaPrivilegeType 'ON' ImpalaObjectSpecification 'CURSOR' + { + parser.suggestKeywords(['TO']); + } + | 'GRANT' ImpalaPrivilegeType 'ON' ImpalaObjectSpecification 'TO' 'CURSOR' + { + parser.suggestKeywords(['ROLE']); + } + | 'GRANT' ImpalaPrivilegeType 'ON' ImpalaObjectSpecification 'TO' RegularOrBacktickedIdentifier OptionalWithGrantOption 'CURSOR' + { + if (!$7) { + parser.suggestKeywords(['WITH GRANT OPTION']); + } + } + | 'GRANT' ImpalaPrivilegeType 'ON' ImpalaObjectSpecification 'TO' RegularOrBacktickedIdentifier WithGrantOption_EDIT + | 'GRANT' ImpalaPrivilegeType 'ON' ImpalaObjectSpecification 'TO' 'ROLE' RegularOrBacktickedIdentifier OptionalWithGrantOption 'CURSOR' + { + if (!$8) { + parser.suggestKeywords(['WITH GRANT OPTION']); + } + } + | 'GRANT' ImpalaPrivilegeType 'ON' ImpalaObjectSpecification 'TO' 'ROLE' RegularOrBacktickedIdentifier WithGrantOption_EDIT + ; + +OptionalOnSpecification + : + | 'ON' HiveObjectSpecification + ; + +OnSpecification_EDIT + : 'ON' 'CURSOR' + { + parser.suggestKeywords(['DATABASE', 'TABLE']); + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + | 'ON' HiveObjectSpecification_EDIT + ; + +HiveObjectSpecification + : 'DATABASE' RegularOrBacktickedIdentifier + | 'TABLE' SchemaQualifiedTableIdentifier + { + parser.addTablePrimary($2); + } + | SchemaQualifiedTableIdentifier + { + parser.addTablePrimary($1); + } + ; + +HiveObjectSpecification_EDIT + : 'DATABASE' 'CURSOR' + { + parser.suggestDatabases(); + } + | 'TABLE' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + | 'TABLE' SchemaQualifiedTableIdentifier_EDIT + | SchemaQualifiedTableIdentifier_EDIT + ; + +ImpalaObjectSpecification + : 'DATABASE' RegularOrBacktickedIdentifier + | 'TABLE' SchemaQualifiedTableIdentifier + { + parser.addTablePrimary($2); + } + | 'SERVER' RegularOrBacktickedIdentifier + | 'URI' RegularOrBacktickedIdentifier + ; + +ImpalaObjectSpecification_EDIT + : 'DATABASE' 'CURSOR' + { + parser.suggestDatabases(); + } + | 'TABLE' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + | 'TABLE' SchemaQualifiedTableIdentifier_EDIT + ; + +HivePrivilegeTypeList + : HivePrivilegeTypeWithOptionalColumn + { + if ($1.toUpperCase() === 'ALL') { + $$ = { singleAll: true }; + } + } + | HivePrivilegeTypeList ',' HivePrivilegeTypeWithOptionalColumn + ; + +HivePrivilegeTypeList_EDIT + : HivePrivilegeTypeWithOptionalColumn_EDIT + | HivePrivilegeTypeList ',' HivePrivilegeTypeWithOptionalColumn_EDIT + | HivePrivilegeTypeWithOptionalColumn_EDIT ',' HivePrivilegeTypeList + | HivePrivilegeTypeList ',' HivePrivilegeTypeWithOptionalColumn_EDIT ',' HivePrivilegeTypeList + | 'CURSOR' ',' HivePrivilegeTypeList + { + parser.suggestKeywords(['ALL', 'ALTER', 'CREATE', 'DELETE', 'DROP', 'INDEX', 'INSERT', 'LOCK', 'SELECT', 'SHOW_DATABASE', 'UPDATE']); + } + | HivePrivilegeTypeList ',' 'CURSOR' + { + parser.suggestKeywords(['ALL', 'ALTER', 'CREATE', 'DELETE', 'DROP', 'INDEX', 'INSERT', 'LOCK', 'SELECT', 'SHOW_DATABASE', 'UPDATE']); + } + | HivePrivilegeTypeList ',' 'CURSOR' ',' HivePrivilegeTypeList + { + parser.suggestKeywords(['ALL', 'ALTER', 'CREATE', 'DELETE', 'DROP', 'INDEX', 'INSERT', 'LOCK', 'SELECT', 'SHOW_DATABASE', 'UPDATE']); + } + ; + +HivePrivilegeTypeWithOptionalColumn + : HivePrivilegeType OptionalParenthesizedColumnList + ; + +HivePrivilegeTypeWithOptionalColumn_EDIT + : HivePrivilegeType ParenthesizedColumnList_EDIT + ; + +HivePrivilegeType + : 'INSERT' + | 'SELECT' + | 'UPDATE' + | 'DELETE' + | 'ALTER' + | 'CREATE' + | 'DROP' + | 'INDEX' + | 'LOCK' + | 'SHOW_DATABASE' + | 'ALL' + ; + +ImpalaPrivilegeType + : 'ALL' + | 'ALTER' + | 'CREATE' --> { isCreate: true } + | 'DROP' + | 'INSERT' + | 'REFRESH' + | 'SELECT' OptionalParenthesizedColumnList + ; + +ImpalaPrivilegeType_EDIT + : 'SELECT' ParenthesizedColumnList_EDIT + ; + +PrincipalSpecificationList + : PrincipalSpecification + | PrincipalSpecificationList ',' PrincipalSpecification + ; + +PrincipalSpecificationList_EDIT + : PrincipalSpecificationList ',' 'CURSOR' + { + parser.suggestKeywords(['GROUP', 'ROLE', 'USER']); + } + | 'CURSOR' ',' PrincipalSpecificationList + { + parser.suggestKeywords(['GROUP', 'ROLE', 'USER']); + } + | PrincipalSpecificationList ',' 'CURSOR' ',' PrincipalSpecificationList + { + parser.suggestKeywords(['GROUP', 'ROLE', 'USER']); + } + ; + +PrincipalSpecification + : 'USER' RegularOrBacktickedIdentifier + | 'GROUP' RegularOrBacktickedIdentifier + | 'ROLE' RegularOrBacktickedIdentifier + ; + +PrincipalSpecification_EDIT + : 'USER' 'CURSOR' + | 'GROUP' 'CURSOR' + | 'ROLE' 'CURSOR' + ; + +UserOrRoleList + : RegularOrBacktickedIdentifier + | UserOrRoleList ',' RegularOrBacktickedIdentifier + ; + +OptionalWithGrantOption + : + | 'WITH' 'GRANT' 'OPTION' + | 'WITH' 'GRANT' 'OPTION' + ; + +WithGrantOption_EDIT + : 'WITH' 'CURSOR' + { + parser.suggestKeywords(['GRANT OPTION']); + } + | 'WITH' 'GRANT' 'CURSOR' + { + parser.suggestKeywords(['OPTION']); + } + | 'WITH' 'GRANT' 'CURSOR' + { + parser.suggestKeywords(['OPTION']); + } + ; + +OptionalWithAdminOption + : + | 'WITH' 'ADMIN' 'OPTION' + ; + +WithAdminOption_EDIT + : 'WITH' 'CURSOR' + { + parser.suggestKeywords(['ADMIN OPTION']); + } + | 'WITH' 'ADMIN' 'CURSOR' + { + parser.suggestKeywords(['OPTION']); + } + ; + +RevokeStatement + : 'REVOKE' HivePrivilegeTypeList OptionalOnSpecification 'FROM' PrincipalSpecificationList + | 'REVOKE' 'GRANT' 'OPTION' 'FOR' HivePrivilegeTypeList OptionalOnSpecification 'FROM' PrincipalSpecificationList + | 'REVOKE' UserOrRoleList 'FROM' PrincipalSpecificationList + | 'REVOKE' 'ROLE' UserOrRoleList 'FROM' PrincipalSpecificationList + | 'REVOKE' 'ADMIN' 'OPTION' 'FOR' UserOrRoleList 'FROM' PrincipalSpecificationList + | 'REVOKE' 'ADMIN' 'OPTION' 'FOR' 'ROLE' UserOrRoleList 'FROM' PrincipalSpecificationList + | 'REVOKE' 'ALL' PrivilegesOrGrantOption 'FROM' UserOrRoleList + | 'REVOKE' 'ROLE' RegularOrBacktickedIdentifier 'FROM' 'GROUP' RegularOrBacktickedIdentifier + | 'REVOKE' ImpalaPrivilegeType 'ON' ImpalaObjectSpecification 'FROM' RegularOrBacktickedIdentifier + | 'REVOKE' ImpalaPrivilegeType 'ON' ImpalaObjectSpecification 'FROM' 'ROLE' RegularOrBacktickedIdentifier + ; + +RevokeStatement_EDIT + : 'REVOKE' 'CURSOR' + { + parser.suggestKeywords(['ADMIN OPTION FOR', 'ALL', 'ALL GRANT OPTION FROM', 'ALL PRIVILEGES FROM', 'ALTER', 'CREATE', 'DELETE', 'DROP', 'GRANT OPTION FOR', 'INDEX', 'INSERT', 'LOCK', 'ROLE', 'SELECT', 'UPDATE']); + } + | 'REVOKE' HivePrivilegeTypeList_EDIT + | 'REVOKE' HivePrivilegeTypeList OnSpecification_EDIT + | 'REVOKE' HivePrivilegeTypeList OptionalOnSpecification 'CURSOR' + { + if (!$3) { + if ($2.singleAll) { + parser.suggestKeywords(['FROM', 'GRANT OPTION', 'ON', 'PRIVILEGES FROM']); + } else { + parser.suggestKeywords(['FROM', 'ON']); + } + } else { + parser.suggestKeywords(['FROM']); + } + } + | 'REVOKE' HivePrivilegeTypeList OptionalOnSpecification 'FROM' 'CURSOR' + { + parser.suggestKeywords(['GROUP', 'ROLE', 'USER']); + } + | 'REVOKE' HivePrivilegeTypeList OptionalOnSpecification 'FROM' PrincipalSpecificationList_EDIT + | 'REVOKE' 'GRANT' 'CURSOR' + { + parser.suggestKeywords(['OPTION FOR']); + } + | 'REVOKE' 'GRANT' 'OPTION' 'CURSOR' + { + parser.suggestKeywords(['FOR']); + } + | 'REVOKE' 'GRANT' 'OPTION' 'FOR' 'CURSOR' + { + parser.suggestKeywords(['ALL', 'ALTER', 'CREATE', 'DELETE', 'DROP', 'INDEX', 'INSERT', 'LOCK', 'SELECT', 'SHOW_DATABASE', 'UPDATE']); + } + | 'REVOKE' 'GRANT' 'OPTION' 'FOR' HivePrivilegeTypeList_EDIT + | 'REVOKE' 'GRANT' 'OPTION' 'FOR' HivePrivilegeTypeList OnSpecification_EDIT + | 'REVOKE' 'GRANT' 'OPTION' 'FOR' HivePrivilegeTypeList OptionalOnSpecification 'CURSOR' + { + if (!$6) { + parser.suggestKeywords(['FROM', 'ON']); + } else { + parser.suggestKeywords(['FROM']); + } + } + | 'REVOKE' 'GRANT' 'OPTION' 'FOR' HivePrivilegeTypeList OptionalOnSpecification 'FROM' 'CURSOR' + { + parser.suggestKeywords(['GROUP', 'ROLE', 'USER']); + } + | 'REVOKE' 'GRANT' 'OPTION' 'FOR' HivePrivilegeTypeList OptionalOnSpecification 'FROM' PrincipalSpecificationList_EDIT + | 'REVOKE' UserOrRoleList 'CURSOR' + { + if ($2.toUpperCase() === 'ADMIN') { + parser.suggestKeywords(['FROM', 'OPTION FOR']); + } else { + parser.suggestKeywords(['FROM']); + } + } + | 'REVOKE' UserOrRoleList 'FROM' 'CURSOR' + { + parser.suggestKeywords(['GROUP', 'ROLE', 'USER']); + } + | 'REVOKE' UserOrRoleList 'FROM' PrincipalSpecificationList_EDIT + | 'REVOKE' 'ROLE' UserOrRoleList 'CURSOR' + { + parser.suggestKeywords(['FROM']); + } + | 'REVOKE' 'ROLE' UserOrRoleList 'FROM' 'CURSOR' + { + parser.suggestKeywords(['GROUP', 'ROLE', 'USER']); + } + | 'REVOKE' 'ROLE' UserOrRoleList 'FROM' PrincipalSpecificationList_EDIT + + | 'REVOKE' 'ADMIN' 'OPTION' 'CURSOR' + { + parser.suggestKeywords(['FOR']); + } + | 'REVOKE' 'ADMIN' 'OPTION' 'FOR' 'CURSOR' + { + parser.suggestKeywords(['ROLE']); + } + | 'REVOKE' 'ADMIN' 'OPTION' 'FOR' UserOrRoleList 'CURSOR' + { + parser.suggestKeywords(['FROM']); + } + | 'REVOKE' 'ADMIN' 'OPTION' 'FOR' UserOrRoleList 'FROM' 'CURSOR' + { + parser.suggestKeywords(['GROUP', 'ROLE', 'USER']); + } + | 'REVOKE' 'ADMIN' 'OPTION' 'FOR' UserOrRoleList 'FROM' PrincipalSpecificationList_EDIT + | 'REVOKE' 'ADMIN' 'OPTION' 'FOR' 'ROLE' UserOrRoleList 'CURSOR' + { + parser.suggestKeywords(['FROM']); + } + | 'REVOKE' 'ADMIN' 'OPTION' 'FOR' 'ROLE' UserOrRoleList 'FROM' 'CURSOR' + { + parser.suggestKeywords(['GROUP', 'ROLE', 'USER']); + } + | 'REVOKE' 'ADMIN' 'OPTION' 'FOR' 'ROLE' UserOrRoleList 'FROM' PrincipalSpecificationList_EDIT + | 'REVOKE' 'ALL' PrivilegesOrGrantOption_EDIT + | 'REVOKE' 'ALL' PrivilegesOrGrantOption 'CURSOR' + { + parser.suggestKeywords(['FROM']); + } + | 'REVOKE' 'CURSOR' + { + parser.suggestKeywords(['ALL', 'ALTER', 'CREATE', 'DROP', 'INSERT', 'REFRESH', 'ROLE', 'SELECT']); + } + | 'REVOKE' 'ROLE' RegularOrBacktickedIdentifier 'CURSOR' + { + parser.suggestKeywords(['FROM GROUP']); + } + | 'REVOKE' 'ROLE' RegularOrBacktickedIdentifier 'FROM' 'CURSOR' + { + parser.suggestKeywords(['GROUP']); + } + | 'REVOKE' ImpalaPrivilegeType_EDIT + | 'REVOKE' ImpalaPrivilegeType 'CURSOR' + { + if ($2.isCreate) { + parser.suggestKeywords(['ON DATABASE', 'ON SERVER']); + } else { + parser.suggestKeywords(['ON DATABASE', 'ON SERVER', 'ON TABLE', 'ON URI']); + } + } + | 'REVOKE' ImpalaPrivilegeType 'ON' 'CURSOR' + { + if ($2.isCreate) { + parser.suggestKeywords(['DATABASE', 'SERVER']); + } else { + parser.suggestKeywords(['DATABASE', 'SERVER', 'TABLE', 'URI']); + } + } + | 'REVOKE' ImpalaPrivilegeType 'ON' ImpalaObjectSpecification_EDIT + | 'REVOKE' ImpalaPrivilegeType 'ON' ImpalaObjectSpecification 'CURSOR' + { + parser.suggestKeywords(['FROM']); + } + | 'REVOKE' ImpalaPrivilegeType 'ON' ImpalaObjectSpecification 'FROM' 'CURSOR' + { + parser.suggestKeywords(['ROLE']); + } + ; + +PrivilegesOrGrantOption + : 'PRIVILEGES' + | 'GRANT' 'OPTION' + ; + +PrivilegesOrGrantOption_EDIT + : 'GRANT' 'CURSOR' + { + parser.suggestKeywords(['OPTION']); + } + ; diff --git a/jison/sql_insert.jison b/jison/sql_insert.jison new file mode 100755 index 0000000..10b4dc7 --- /dev/null +++ b/jison/sql_insert.jison @@ -0,0 +1,762 @@ +// Licensed to Cloudera, Inc. under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. Cloudera, Inc. licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +DataManipulation + : InsertStatement + ; + +InsertStatement + : HiveInsertStatement + | InsertValuesStatement + | ImpalaInsertOrUpsertStatement + | CommonTableExpression HiveInsertStatement + | CommonTableExpression ImpalaInsertOrUpsertStatement + | HiveMergeStatement + ; + +DataManipulation_EDIT + : HiveInsertStatement_EDIT + | InsertValuesStatement_EDIT + | ImpalaInsertOrUpsertStatement_EDIT + | CommonTableExpression HiveInsertStatement_EDIT + { + parser.addCommonTableExpressions($1); + } + | CommonTableExpression_EDIT HiveInsertStatement + | CommonTableExpression ImpalaInsertOrUpsertStatement_EDIT + { + parser.addCommonTableExpressions($1); + } + | CommonTableExpression_EDIT ImpalaInsertOrUpsertStatement + | HiveMergeStatement_EDIT + ; + +HiveInsertStatement + : HiveInsertWithoutQuery QuerySpecification + | FromClause HiveInserts + | FromClause SelectWithoutTableExpression OptionalSelectConditions + ; + +HiveInsertStatement_EDIT + : HiveInsertWithoutQuery_EDIT + | HiveInsertWithoutQuery 'CURSOR' + { + var keywords = []; + if ($1.suggestKeywords) { + keywords = parser.createWeightedKeywords($1.suggestKeywords, 2).concat([{ value: 'SELECT', weight: 1}]); + } else { + keywords = ['SELECT']; + } + if ($1.addValues) { + keywords.push({ weight: 1.1, value: 'VALUES' }); + } + if (keywords.length > 0) { + parser.suggestKeywords(keywords); + } + } + | HiveInsertWithoutQuery_EDIT QuerySpecification + | HiveInsertWithoutQuery QuerySpecification_EDIT + | FromClause HiveInserts_EDIT + { + if (!$2.keepTables) { + delete parser.yy.result.suggestTables; + delete parser.yy.result.suggestDatabases; + } + } + | FromClause_EDIT + | FromClause_EDIT HiveInserts + | FromClause_EDIT SelectWithoutTableExpression OptionalSelectConditions + | FromClause 'CURSOR' + { + parser.suggestKeywords(['INSERT INTO', 'INSERT OVERWRITE', 'SELECT']); + } + | FromClause SelectWithoutTableExpression_EDIT OptionalSelectConditions + { + if ($2.cursorAtEnd) { + parser.checkForSelectListKeywords($2); + var keywords = parser.yy.result.suggestKeywords || []; + if ($3.suggestKeywords) { + keywords = keywords.concat($3.suggestKeywords); + } + if (keywords.length > 0) { + parser.suggestKeywords(keywords); + } + } + delete parser.yy.result.suggestTables; + delete parser.yy.result.suggestDatabases; + } + | FromClause SelectWithoutTableExpression OptionalSelectConditions_EDIT + { + if ($3.cursorAtStart) { + parser.checkForSelectListKeywords($2.tableExpression); + } + } + ; + +HiveInsertWithoutQuery + : 'INSERT' 'OVERWRITE' OptionalHiveTable SchemaQualifiedTableIdentifier OptionalPartitionSpec OptionalIfNotExists + { + $4.owner = 'insert'; + parser.addTablePrimary($4); + if (!$5 && !$6) { + $$ = { suggestKeywords: ['PARTITION'] } + } else if (!$6) { + $$ = { suggestKeywords: ['IF NOT EXISTS'] } + } + } + | 'INSERT' 'OVERWRITE' 'LOCAL' 'DIRECTORY' HdfsPath OptionalInsertRowFormat OptionalStoredAs + { + if (!$6 && !$7) { + $$ = { suggestKeywords: [{ value: 'ROW FORMAT', weight: 2 }, { value: 'STORED AS', weight: 1}] }; + } else if (!$7) { + $$ = { suggestKeywords: ['STORED AS'] }; + } + } + | 'INSERT' 'OVERWRITE_DIRECTORY' HdfsPath OptionalInsertRowFormat OptionalStoredAs + { + if (!$4 && !$5) { + $$ = { suggestKeywords: [{ value: 'ROW FORMAT', weight: 2 }, { value: 'STORED AS', weight: 1}] }; + } else if (!$5) { + $$ = { suggestKeywords: ['STORED AS'] }; + } + } + | 'INSERT' 'INTO' OptionalHiveTable SchemaQualifiedTableIdentifier OptionalPartitionSpec OptionalParenthesizedColumnList + { + $4.owner = 'insert'; + parser.addTablePrimary($4); + if (!$5 && !$6) { + $$ = { suggestKeywords: ['PARTITION'], addValues: true }; + } else if (!$6) { + $$ = { addValues: true }; + } + } + ; + +HiveInsertWithoutQuery_EDIT + : 'INSERT' 'CURSOR' + { + parser.suggestKeywords(['OVERWRITE', 'INTO']); + } + | 'INSERT' 'OVERWRITE' OptionalHiveTable 'CURSOR' + { + if (!$3) { + parser.suggestKeywords(['DIRECTORY', 'LOCAL DIRECTORY', 'TABLE']); + } + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + $$ = { keepTables: true } + } + | 'INSERT' 'OVERWRITE' OptionalHiveTable SchemaQualifiedTableIdentifier_EDIT OptionalPartitionSpec OptionalParenthesizedColumnList + { + $$ = { keepTables: true } + } + | 'INSERT' 'OVERWRITE' OptionalHiveTable SchemaQualifiedTableIdentifier OptionalPartitionSpec_EDIT OptionalIfNotExists + { + $4.owner = 'insert'; + parser.addTablePrimary($4); + if (parser.yy.result.suggestColumns) { + parser.yy.result.suggestColumns.owner = 'insert'; + } + } + | 'INSERT' 'OVERWRITE' OptionalHiveTable SchemaQualifiedTableIdentifier OptionalPartitionSpec OptionalIfNotExists_EDIT + { + $4.owner = 'insert'; + parser.addTablePrimary($4); + } + | 'INSERT' 'OVERWRITE' 'LOCAL' 'CURSOR' + { + parser.suggestKeywords(['DIRECTORY']); + } + | 'INSERT' 'OVERWRITE' 'LOCAL' 'DIRECTORY' HdfsPath_EDIT OptionalInsertRowFormat OptionalStoredAs + | 'INSERT' 'OVERWRITE' 'LOCAL' 'DIRECTORY' HdfsPath OptionalInsertRowFormat_EDIT OptionalStoredAs + | 'INSERT' 'OVERWRITE' 'LOCAL' 'DIRECTORY' HdfsPath OptionalInsertRowFormat OptionalStoredAs_EDIT + | 'INSERT' 'OVERWRITE_DIRECTORY' HdfsPath_EDIT OptionalInsertRowFormat OptionalStoredAs // DIRECTORY is a non-reserved keyword + | 'INSERT' 'OVERWRITE_DIRECTORY' HdfsPath OptionalInsertRowFormat_EDIT OptionalStoredAs + | 'INSERT' 'OVERWRITE_DIRECTORY' HdfsPath OptionalInsertRowFormat OptionalStoredAs_EDIT + | 'INSERT' 'INTO' OptionalHiveTable 'CURSOR' + { + if (!$3) { + parser.suggestKeywords(['TABLE']); + } + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + $$ = { keepTables: true } + } + | 'INSERT' 'INTO' OptionalHiveTable SchemaQualifiedTableIdentifier_EDIT OptionalPartitionSpec OptionalParenthesizedColumnList + { + $$ = { keepTables: true } + } + | 'INSERT' 'INTO' OptionalHiveTable SchemaQualifiedTableIdentifier OptionalPartitionSpec_EDIT OptionalParenthesizedColumnList + { + $4.owner = 'insert'; + parser.addTablePrimary($4); + if (parser.yy.result.suggestColumns) { + parser.yy.result.suggestColumns.owner = 'insert'; + } + } + | 'INSERT' 'INTO' OptionalHiveTable SchemaQualifiedTableIdentifier OptionalPartitionSpec OptionalParenthesizedColumnList_EDIT + { + $4.owner = 'insert'; + parser.addTablePrimary($4); + if (parser.yy.result.suggestColumns) { + parser.yy.result.suggestColumns.owner = 'insert'; + } + } + ; + +HiveInserts + : HiveInsert + | HiveInserts HiveInsert + ; + +HiveInserts_EDIT + : HiveInsert_EDIT + | HiveInserts HiveInsert_EDIT + | HiveInsert_EDIT HiveInserts + | HiveInserts HiveInsert_EDIT HiveInserts + ; + +// TODO: Verify Hive unions in insert +HiveInsert + : HiveInsertWithoutQuery SelectWithoutTableExpression OptionalSelectConditions + ; + +HiveInsert_EDIT + : HiveInsertWithoutQuery_EDIT + | HiveInsertWithoutQuery_EDIT SelectWithoutTableExpression OptionalSelectConditions + | HiveInsertWithoutQuery 'CURSOR' + { + if ($1.suggestKeywords) { + parser.suggestKeywords(parser.createWeightedKeywords($1.suggestKeywords, 2).concat([{ value: 'SELECT', weight: 1}])); + } else { + parser.suggestKeywords(['SELECT']); + } + } + | HiveInsertWithoutQuery SelectWithoutTableExpression_EDIT OptionalSelectConditions + { + if ($2.cursorAtEnd) { + parser.checkForSelectListKeywords($2); + var keywords = parser.yy.result.suggestKeywords || []; + if ($3.suggestKeywords) { + keywords = keywords.concat($3.suggestKeywords); + } + if (keywords.length > 0) { + parser.suggestKeywords(keywords); + } + } + } + | HiveInsertWithoutQuery SelectWithoutTableExpression OptionalSelectConditions_EDIT + ; + +InsertValuesStatement + : 'INSERT' 'INTO' OptionalHiveTable SchemaQualifiedTableIdentifier OptionalPartitionSpec 'VALUES' InsertValuesList + { + $4.owner = 'insert'; + parser.addTablePrimary($4); + } + | 'INSERT' 'INTO' OptionalTable SchemaQualifiedTableIdentifier 'VALUES' InsertValuesList + { + $4.owner = 'insert'; + parser.addTablePrimary($4); + } + ; + +InsertValuesStatement_EDIT + : 'INSERT' 'CURSOR' + { + parser.suggestKeywords(['INTO']); + } + | 'INSERT' 'INTO' OptionalTable 'CURSOR' + { + if (!$3) { + parser.suggestKeywords(['TABLE']); + } + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + | 'INSERT' 'INTO' OptionalTable SchemaQualifiedTableIdentifier_EDIT + | 'INSERT' 'INTO' OptionalTable SchemaQualifiedTableIdentifier 'CURSOR' + { + $4.owner = 'insert'; + parser.addTablePrimary($4); + parser.suggestKeywords(['VALUES']); + } + | 'INSERT' 'INTO' OptionalTable SchemaQualifiedTableIdentifier_EDIT 'VALUES' InsertValuesList + ; + +InsertValuesList + : ParenthesizedRowValuesList + | RowValuesList ',' ParenthesizedRowValuesList + ; + +ParenthesizedRowValuesList + : '(' InValueList ')' + ; + +OptionalTable + : + | 'TABLE' + ; + +OptionalInsertRowFormat + : + | 'ROW' 'FORMAT' HiveDelimitedRowFormat + ; + +OptionalInsertRowFormat_EDIT + : 'ROW' 'CURSOR' + { + parser.suggestKeywords(['FORMAT DELIMITED']); + } + | 'ROW' 'FORMAT' 'CURSOR' + { + parser.suggestKeywords(['DELIMITED']); + } + | 'ROW' 'FORMAT' HiveDelimitedRowFormat_EDIT + ; + +SelectWithoutTableExpression + : 'SELECT' OptionalAllOrDistinct OptionalStraightJoin SelectList -> { selectList: $4 } + ; + +SelectWithoutTableExpression_EDIT + : 'SELECT' OptionalAllOrDistinct OptionalStraightJoin SelectList 'CURSOR' + { + $$ = $4; + $$.cursorAtEnd = true; + } + | 'SELECT' OptionalAllOrDistinct OptionalStraightJoin SelectList_EDIT + { + parser.selectListNoTableSuggest($4, $2); + } + | 'SELECT' OptionalAllOrDistinct OptionalStraightJoin 'CURSOR' + { + var keywords = parser.getSelectListKeywords(); + if (!$2 || $2 === 'ALL') { + parser.suggestAggregateFunctions(); + parser.suggestAnalyticFunctions(); + } + if (!$3 && !$2) { + keywords.push({ value: 'ALL', weight: 2 }); + keywords.push({ value: 'DISTINCT', weight: 2 }); + } + if (parser.isImpala() && !$3) { + keywords.push({ value: 'STRAIGHT_JOIN', weight: 1 }); + } + parser.suggestKeywords(keywords); + parser.suggestFunctions(); + parser.suggestColumns(); + } + ; + +OptionalHiveTable + : + | 'TABLE' + ; + +ImpalaInsertOrUpsertStatement + : ImpalaInsertOrUpsertStatementWithoutCTE + ; + +ImpalaInsertOrUpsertStatement_EDIT + : ImpalaInsertOrUpsertStatementWithoutCTE_EDIT + ; + +ImpalaInsertOrUpsertStatementWithoutCTE + : ImpalaInsertOrUpsertLeftPart OptionalImpalaShuffleOrNoShuffle SelectStatement OptionalUnions + | ImpalaInsertOrUpsertLeftPart 'VALUES' ImpalaRowValuesLists + ; + +ImpalaInsertOrUpsertStatementWithoutCTE_EDIT + : ImpalaInsertOrUpsertLeftPart_EDIT + | ImpalaInsertOrUpsertLeftPart OptionalImpalaShuffleOrNoShuffle 'CURSOR' + { + var keywords = $1.suggestKeywords && !$2 ? parser.createWeightedKeywords($1.suggestKeywords, 2) : []; + if (!$2) { + keywords = keywords.concat(['[NOSHUFFLE]', '[SHUFFLE]', 'SELECT', 'VALUES']) + } else { + keywords = keywords.concat(['SELECT']) + } + parser.suggestKeywords(keywords); + } + | ImpalaInsertOrUpsertLeftPart_EDIT OptionalImpalaShuffleOrNoShuffle SelectStatement OptionalUnions + | ImpalaInsertOrUpsertLeftPart OptionalImpalaShuffleOrNoShuffle SelectStatement_EDIT OptionalUnions + | ImpalaInsertOrUpsertLeftPart OptionalImpalaShuffleOrNoShuffle SelectStatement OptionalUnions_EDIT + | ImpalaInsertOrUpsertLeftPart_EDIT 'VALUES' ImpalaRowValuesLists + | ImpalaInsertOrUpsertLeftPart 'VALUES' ImpalaRowValuesLists_EDIT + ; + +ImpalaInsertOrUpsertLeftPart + : ImpalaUpsertStatementLeftPart + | ImpalaInsertLeftPart + ; + +ImpalaInsertOrUpsertLeftPart_EDIT + : ImpalaUpsertStatementLeftPart_EDIT + | ImpalaInsertLeftPart_EDIT + ; + +ImpalaUpsertStatementLeftPart + : 'UPSERT' 'INTO' OptionalImpalaTable SchemaQualifiedTableIdentifier OptionalParenthesizedColumnList + { + $4.owner = 'upsert'; + parser.addTablePrimary($4); + } + ; + +ImpalaUpsertStatementLeftPart_EDIT + : 'UPSERT' 'CURSOR' + { + parser.suggestKeywords(['INTO']); + } + | 'UPSERT' 'INTO' OptionalImpalaTable 'CURSOR' + { + if (!$3) { + parser.suggestKeywords(['TABLE']); + } + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + | 'UPSERT' 'INTO' OptionalImpalaTable 'CURSOR' SchemaQualifiedTableIdentifier OptionalParenthesizedColumnList + { + if (!$3) { + parser.suggestKeywords(['TABLE']); + } + $5.owner = 'upsert'; + parser.addTablePrimary($5); + } + | 'UPSERT' 'INTO' OptionalImpalaTable SchemaQualifiedTableIdentifier_EDIT OptionalParenthesizedColumnList + | 'UPSERT' 'INTO' OptionalImpalaTable SchemaQualifiedTableIdentifier OptionalParenthesizedColumnList_EDIT + { + $4.owner = 'upsert'; + parser.addTablePrimary($4); + if (parser.yy.result.suggestColumns) { + parser.yy.result.suggestColumns.owner = 'upsert'; + } + } + ; + + +ImpalaInsertLeftPart + : 'INSERT' IntoOrOverwrite OptionalImpalaTable SchemaQualifiedTableIdentifier OptionalParenthesizedColumnList OptionalPartitionSpec + { + $4.owner = 'insert'; + parser.addTablePrimary($4); + if (!$6) { + $$ = { suggestKeywords: ['PARTITION'] }; + } + } + ; + +ImpalaInsertLeftPart_EDIT + : 'INSERT' 'CURSOR' + { + parser.suggestKeywords(['INTO', 'OVERWRITE']); + } + | 'INSERT' IntoOrOverwrite OptionalImpalaTable 'CURSOR' + { + if (!$3) { + parser.suggestKeywords(['TABLE']); + } + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + | 'INSERT' IntoOrOverwrite OptionalImpalaTable 'CURSOR' SchemaQualifiedTableIdentifier OptionalParenthesizedColumnList OptionalPartitionSpec + { + if (!$3) { + parser.suggestKeywords(['TABLE']); + } + $5.owner = 'insert'; + parser.addTablePrimary($5); + } + | 'INSERT' IntoOrOverwrite OptionalImpalaTable SchemaQualifiedTableIdentifier_EDIT OptionalParenthesizedColumnList OptionalPartitionSpec + | 'INSERT' IntoOrOverwrite OptionalImpalaTable SchemaQualifiedTableIdentifier OptionalParenthesizedColumnList_EDIT OptionalPartitionSpec + { + $4.owner = 'insert'; + parser.addTablePrimary($4); + if (parser.yy.result.suggestColumns) { + parser.yy.result.suggestColumns.owner = 'insert'; + } + } + | 'INSERT' IntoOrOverwrite OptionalImpalaTable SchemaQualifiedTableIdentifier OptionalParenthesizedColumnList OptionalPartitionSpec_EDIT + { + $4.owner = 'insert'; + parser.addTablePrimary($4); + if (parser.yy.result.suggestColumns) { + parser.yy.result.suggestColumns.owner = 'insert'; + } + } + ; + +IntoOrOverwrite + : 'INTO' + | 'OVERWRITE' + ; + +OptionalImpalaTable + : + | 'TABLE' + ; + +OptionalImpalaShuffleOrNoShuffle + : + | 'SHUFFLE' + | 'NOSHUFFLE' + ; + +ImpalaRowValuesLists + : ParenthesizedImpalaRowValuesList + | ImpalaRowValuesLists ',' ParenthesizedImpalaRowValuesList + ; + +ImpalaRowValuesLists_EDIT + : ParenthesizedImpalaRowValuesList_EDIT + | ImpalaRowValuesLists ',' ParenthesizedImpalaRowValuesList_EDIT + | ImpalaRowValuesLists ',' ParenthesizedImpalaRowValuesList_EDIT ',' ImpalaRowValuesLists + | ParenthesizedImpalaRowValuesList_EDIT ',' ImpalaRowValuesLists + ; + +ParenthesizedImpalaRowValuesList + : '(' ValueExpressionList ')' + ; + +ParenthesizedImpalaRowValuesList_EDIT + : '(' AnyCursor RightParenthesisOrError + { + parser.suggestFunctions(); + } + | '(' ValueExpressionList_EDIT RightParenthesisOrError + ; + +HiveMergeStatement + : HiveMergeStatementLeftPart 'ON' ValueExpression WhenList + ; + +HiveMergeStatement_EDIT + : HiveMergeStatementLeftPart_EDIT + | HiveMergeStatementLeftPart 'CURSOR' + { + parser.suggestKeywords(['ON']); + } + | HiveMergeStatementLeftPart 'ON' 'CURSOR' + { + parser.valueExpressionSuggest(); + } + | HiveMergeStatementLeftPart 'ON' ValueExpression_EDIT + | HiveMergeStatementLeftPart 'ON' ValueExpression 'CURSOR' + { + parser.suggestValueExpressionKeywords($3, [{ value: 'WHEN', weight: 2 }]); + } + | HiveMergeStatementLeftPart 'ON' ValueExpression WhenList_EDIT + ; + +HiveMergeStatementLeftPart + : 'MERGE' 'INTO' SchemaQualifiedTableIdentifier 'AS' RegularIdentifier 'USING' MergeSource 'AS' RegularIdentifier + { + $3.alias = $5; + parser.addTablePrimary($3); + if ($7.subQuery) { + parser.addTablePrimary({ subQueryAlias: $9 }); + } else { + $7.alias = $9; + } + } + ; + +HiveMergeStatementLeftPart_EDIT + : 'MERGE' 'CURSOR' + { + parser.suggestKeywords(['INTO']); + } + | 'MERGE' 'INTO' 'CURSOR' + { + parser.suggestDatabases({ appendDot: true }); + parser.suggestTables(); + } + | 'MERGE' 'INTO' SchemaQualifiedTableIdentifier_EDIT + | 'MERGE' 'INTO' SchemaQualifiedTableIdentifier 'CURSOR' + { + parser.addTablePrimary($3); + parser.suggestKeywords(['AS T USING']); + } + | 'MERGE' 'INTO' SchemaQualifiedTableIdentifier 'AS' 'CURSOR' + { + parser.addTablePrimary($3); + parser.suggestKeywords(['T USING']); + } + | 'MERGE' 'INTO' SchemaQualifiedTableIdentifier 'AS' RegularIdentifier 'CURSOR' + { + $3.alias = $5; + parser.addTablePrimary($3); + parser.suggestKeywords(['USING']); + } + | 'MERGE' 'INTO' SchemaQualifiedTableIdentifier 'AS' RegularIdentifier 'USING' 'CURSOR' + { + $3.alias = $5; + parser.addTablePrimary($3); + parser.suggestDatabases({ appendDot: true }); + parser.suggestTables(); + } + | 'MERGE' 'INTO' SchemaQualifiedTableIdentifier 'AS' RegularIdentifier 'USING' MergeSource_EDIT + { + $3.alias = $5; + parser.addTablePrimary($3); + } + | 'MERGE' 'INTO' SchemaQualifiedTableIdentifier 'AS' RegularIdentifier 'USING' MergeSource 'CURSOR' + { + $3.alias = $5; + parser.addTablePrimary($3); + parser.suggestKeywords(['AS S ON']); + } + | 'MERGE' 'INTO' SchemaQualifiedTableIdentifier 'AS' RegularIdentifier 'USING' MergeSource 'AS' 'CURSOR' + { + $3.alias = $5; + parser.addTablePrimary($3); + parser.suggestKeywords(['S ON']); + } + ; + +MergeSource + : '(' TableSubQueryInner ')' --> $2 + | SchemaQualifiedTableIdentifier + { + parser.addTablePrimary($1); + } + ; + +MergeSource_EDIT + : '(' 'CURSOR' RightParenthesisOrError + { + parser.suggestKeywords(['SELECT']); + } + | '(' TableSubQueryInner_EDIT RightParenthesisOrError + | SchemaQualifiedTableIdentifier_EDIT + ; + +WhenList + : WhenClause + | WhenClause WhenClause + | WhenClause WhenClause WhenClause + ; + +WhenList_EDIT + : WhenClause_EDIT + { + if ($1.suggestThenKeywords) { + parser.suggestKeywords(['DELETE', 'INSERT VALUES', 'UPDATE SET']); + } + } + | WhenClause 'CURSOR' + { + if (!$1.notPresent) { + parser.suggestKeywords(['WHEN']); + } + } + | WhenClause WhenClause_EDIT + { + if (!$1.notPresent && $2.suggestThenKeywords) { + var keywords = []; + if (!$1.isDelete) { + keywords.push('DELETE'); + } + if (!$1.isInsert) { + keywords.push('INSERT VALUES'); + } + if (!$1.isUpdate) { + keywords.push('UPDATE SET'); + } + parser.suggestKeywords(keywords); + } + } + | WhenClause WhenClause 'CURSOR' + { + if (!$2.notPresent) { + parser.suggestKeywords(['WHEN']); + } + } + | WhenClause WhenClause WhenClause_EDIT + { + if (!$2.notPresent && $3.suggestThenKeywords) { + var keywords = []; + if (!$1.isDelete && !$2.isDelete) { + keywords.push('DELETE'); + } + if (!$1.isInsert && !$2.isInsert) { + keywords.push('INSERT VALUES'); + } + if (!$1.isUpdate && !$2.isUpdate) { + keywords.push('UPDATE SET'); + } + parser.suggestKeywords(keywords); + } + } + ; + +WhenClause + : 'WHEN' OptionalNot 'MATCHED' OptionalMatchCondition 'THEN' UpdateDeleteOrInsert --> { notPresent: !!$2, isDelete: $6.isDelete, isInsert: $6.isInsert, isUpdate: $6.isUpdate } + ; + +WhenClause_EDIT + : 'WHEN' OptionalNot 'CURSOR' + { + if (!$2) { + parser.suggestKeywords(['NOT MATCHED', 'MATCHED']); + } else { + parser.suggestKeywords(['MATCHED']); + } + } + | 'WHEN' OptionalNot 'MATCHED' OptionalMatchCondition 'CURSOR' + { + if (!$4) { + parser.suggestKeywords(['AND', 'THEN']); + } else { + parser.suggestValueExpressionKeywords($4, [{ value: 'THEN', weight: 2 }]); + } + } + | 'WHEN' OptionalNot 'MATCHED' MatchCondition_EDIT + | 'WHEN' OptionalNot 'MATCHED' OptionalMatchCondition 'THEN' 'CURSOR' --> { suggestThenKeywords: true } + | 'WHEN' OptionalNot 'MATCHED' OptionalMatchCondition 'THEN' UpdateDeleteOrInsert_EDIT + ; + +OptionalMatchCondition + : + | 'AND' ValueExpression --> $2 + ; + +MatchCondition_EDIT + : 'AND' 'CURSOR' + { + parser.valueExpressionSuggest(); + } + ; + +UpdateDeleteOrInsert + : 'UPDATE' 'SET' SetClauseList --> { isUpdate: true } + | 'DELETE' --> { isDelete: true } + | 'INSERT' 'VALUES' InsertValuesList --> { isInsert: true } + ; + +UpdateDeleteOrInsert_EDIT + : 'UPDATE' 'CURSOR' + { + parser.suggestKeywords(['SET']); + } + | 'UPDATE' 'SET' SetClauseList_EDIT + | 'INSERT' 'CURSOR' + { + parser.suggestKeywords(['VALUES']); + } + ; \ No newline at end of file diff --git a/jison/sql_load.jison b/jison/sql_load.jison new file mode 100755 index 0000000..ca607ca --- /dev/null +++ b/jison/sql_load.jison @@ -0,0 +1,291 @@ +// Licensed to Cloudera, Inc. under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. Cloudera, Inc. licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +DataManipulation + : LoadStatement + | ImportStatement + | ExportStatement + ; + +DataManipulation_EDIT + : LoadStatement_EDIT + | ImportStatement_EDIT + | ExportStatement_EDIT + ; + +LoadStatement + : AnyLoad AnyData OptionalHiveLocal AnyInpath HdfsPath OptionalOverwrite 'INTO' AnyTable SchemaQualifiedTableIdentifier OptionalPartitionSpec + { + parser.addTablePrimary($9); + } + ; + +LoadStatement_EDIT + : AnyLoad 'CURSOR' + { + if (parser.isHive()) { + parser.suggestKeywords(['DATA LOCAL INPATH', 'DATA INPATH']); + } else if (parser.isImpala()) { + parser.suggestKeywords(['DATA INPATH']); + } + } + | AnyLoad AnyData OptionalHiveLocal 'CURSOR' + { + if (parser.isHive() && !$3) { + parser.suggestKeywords(['INPATH', 'LOCAL INPATH']); + } else { + parser.suggestKeywords(['INPATH']); + } + } + | AnyLoad AnyData OptionalHiveLocal AnyInpath HdfsPath_EDIT OptionalOverwrite + | AnyLoad AnyData OptionalHiveLocal AnyInpath HdfsPath OptionalOverwrite 'CURSOR' + { + if (!$6) { + parser.suggestKeywords(['OVERWRITE INTO TABLE', 'INTO TABLE']); + } else { + parser.suggestKeywords(['INTO TABLE']); + } + } + | AnyLoad AnyData OptionalHiveLocal AnyInpath HdfsPath OptionalOverwrite 'INTO' 'CURSOR' + { + parser.suggestKeywords([ 'TABLE' ]); + } + | AnyLoad AnyData OptionalHiveLocal AnyInpath HdfsPath OptionalOverwrite 'INTO' AnyTable 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + | AnyLoad AnyData OptionalHiveLocal AnyInpath HdfsPath OptionalOverwrite 'INTO' AnyTable SchemaQualifiedTableIdentifier_EDIT OptionalPartitionSpec + | AnyLoad AnyData OptionalHiveLocal AnyInpath HdfsPath OptionalOverwrite 'INTO' AnyTable SchemaQualifiedTableIdentifier OptionalPartitionSpec 'CURSOR' + { + parser.addTablePrimary($9); + if (!$10) { + parser.suggestKeywords(['PARTITION']); + } + } + | AnyLoad AnyData OptionalHiveLocal AnyInpath HdfsPath OptionalOverwrite 'INTO' AnyTable SchemaQualifiedTableIdentifier OptionalPartitionSpec_EDIT + { + parser.addTablePrimary($9); + } + | AnyLoad AnyData OptionalHiveLocal AnyInpath HdfsPath_EDIT OptionalOverwrite 'INTO' AnyTable SchemaQualifiedTableIdentifier OptionalPartitionSpec + { + parser.addTablePrimary($9); + } + ; + +OptionalOverwrite + : + | 'OVERWRITE' + | 'OVERWRITE' + ; + +OptionalHiveLocal + : + | 'LOCAL' + ; + +AnyLoad + : 'LOAD' + | 'LOAD' + ; + +AnyData + : 'DATA' + | 'DATA' + ; + +AnyInpath + : 'INPATH' + | 'INPATH' + ; + +ImportStatement + : 'IMPORT' OptionalTableWithPartition PushHdfsLexerState 'FROM' HdfsPath OptionalHdfsLocation + ; + +ImportStatement_EDIT + : 'IMPORT' 'CURSOR' OptionalTableWithPartition + { + if (!$3) { + parser.suggestKeywords(['EXTERNAL TABLE', 'FROM', 'TABLE']); + } else if (!$3.hasExternal) { + parser.suggestKeywords(['EXTERNAL']); + } + } + | 'IMPORT' TableWithPartition 'CURSOR' + { + if ($2.suggestKeywords) { + parser.suggestKeywords(parser.createWeightedKeywords($2.suggestKeywords, 2).concat(['FROM'])); + } else { + parser.suggestKeywords(['FROM']); + } + } + | 'IMPORT' TableWithPartition_EDIT + | 'IMPORT' OptionalTableWithPartition PushHdfsLexerState 'FROM' HdfsPath_EDIT OptionalHdfsLocation + | 'IMPORT' OptionalTableWithPartition PushHdfsLexerState 'FROM' HdfsPath HdfsLocation_EDIT + | 'IMPORT' OptionalTableWithPartition PushHdfsLexerState 'FROM' HdfsPath OptionalHdfsLocation 'CURSOR' + { + if (!$6) { + parser.suggestKeywords(['LOCATION']); + } + } + | 'IMPORT' 'CURSOR' OptionalTableWithPartition PushHdfsLexerState 'FROM' HdfsPath OptionalHdfsLocation + { + if (!$3) { + parser.suggestKeywords(['EXTERNAL TABLE', 'TABLE']); + } else if (!$3.hasExternal) { + parser.suggestKeywords(['EXTERNAL']); + } + } +| 'IMPORT' TableWithPartition_EDIT PushHdfsLexerState 'FROM' HdfsPath OptionalHdfsLocation + | 'IMPORT' TableWithPartition 'CURSOR' PushHdfsLexerState 'FROM' HdfsPath OptionalHdfsLocation + { + if ($2.suggestKeywords) { + parser.suggestKeywords(parser.createWeightedKeywords($2.suggestKeywords, 2).concat(['FROM'])); + } + } + ; + +OptionalTableWithPartition + : + | TableWithPartition + ; + +TableWithPartition + : 'EXTERNAL' 'TABLE' SchemaQualifiedTableIdentifier OptionalPartitionSpec + { + parser.addTablePrimary($3); + if (!$4) { + $$ = { hasExternal: true, suggestKeywords: ['PARTITION'] }; + } else { + $$ = { hasExternal: true } + } + } + | 'TABLE' SchemaQualifiedTableIdentifier OptionalPartitionSpec + { + parser.addTablePrimary($2); + if (!$3) { + $$ = { suggestKeywords: ['PARTITION'] }; + } + } + ; + +TableWithPartition_EDIT + : 'EXTERNAL' 'CURSOR' + { + parser.suggestKeywords(['TABLE']); + } + | 'EXTERNAL' 'TABLE' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + | 'EXTERNAL' 'TABLE' SchemaQualifiedTableIdentifier_EDIT OptionalPartitionSpec + | 'EXTERNAL' 'TABLE' SchemaQualifiedTableIdentifier PartitionSpec_EDIT + { + parser.addTablePrimary($3); + } + | 'TABLE' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + + | 'TABLE' SchemaQualifiedTableIdentifier_EDIT OptionalPartitionSpec + | 'TABLE' SchemaQualifiedTableIdentifier PartitionSpec_EDIT + { + parser.addTablePrimary($3); + } + ; + +ExportStatement + : 'EXPORT' 'TABLE' SchemaQualifiedTableIdentifier OptionalPartitionSpec PushHdfsLexerState 'TO' HdfsPath + { + parser.addTablePrimary($3); + } + | 'EXPORT' 'TABLE' SchemaQualifiedTableIdentifier OptionalPartitionSpec PushHdfsLexerState 'TO' HdfsPath 'FOR' 'REPLICATION' '(' QuotedValue ')' + { + parser.addTablePrimary($3); + } + ; + +ExportStatement_EDIT + : 'EXPORT' 'CURSOR' + { + parser.suggestKeywords(['TABLE']); + } + | 'EXPORT' 'TABLE' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + | 'EXPORT' 'TABLE' SchemaQualifiedTableIdentifier_EDIT + | 'EXPORT' 'TABLE' SchemaQualifiedTableIdentifier OptionalPartitionSpec 'CURSOR' + { + parser.addTablePrimary($3); + if (!$4) { + parser.suggestKeywords([{ weight: 2, value: 'PARTITION' }, { weight: 1, value: 'TO' }]); + } else { + parser.suggestKeywords([ 'TO' ]); + } + } + | 'EXPORT' 'TABLE' SchemaQualifiedTableIdentifier PartitionSpec_EDIT + { + parser.addTablePrimary($3); + } + | 'EXPORT' 'TABLE' SchemaQualifiedTableIdentifier OptionalPartitionSpec PushHdfsLexerState 'TO' HdfsPath_EDIT + { + parser.addTablePrimary($3); + } + | 'EXPORT' 'TABLE' SchemaQualifiedTableIdentifier OptionalPartitionSpec PushHdfsLexerState 'TO' HdfsPath 'CURSOR' + { + parser.addTablePrimary($3); + parser.suggestKeywords(['FOR replication()']); + } + | 'EXPORT' 'TABLE' SchemaQualifiedTableIdentifier OptionalPartitionSpec PushHdfsLexerState 'TO' HdfsPath 'FOR' 'CURSOR' + { + parser.addTablePrimary($3); + parser.suggestKeywords(['replication()']); + } + | 'EXPORT' 'TABLE' SchemaQualifiedTableIdentifier_EDIT OptionalPartitionSpec PushHdfsLexerState 'TO' HdfsPath + | 'EXPORT' 'TABLE' SchemaQualifiedTableIdentifier_EDIT OptionalPartitionSpec PushHdfsLexerState 'TO' HdfsPath 'FOR' 'REPLICATION' '(' QuotedValue ')' + | 'EXPORT' 'TABLE' SchemaQualifiedTableIdentifier OptionalPartitionSpec 'CURSOR' PushHdfsLexerState 'TO' HdfsPath + { + parser.addTablePrimary($3); + if (!$4) { + parser.suggestKeywords(['PARTITION']); + } + } + | 'EXPORT' 'TABLE' SchemaQualifiedTableIdentifier OptionalPartitionSpec 'CURSOR' PushHdfsLexerState 'TO' HdfsPath 'FOR' 'REPLICATION' '(' QuotedValue ')' + { + parser.addTablePrimary($3); + if (!$4) { + parser.suggestKeywords(['PARTITION']); + } + } + | 'EXPORT' 'TABLE' SchemaQualifiedTableIdentifier PartitionSpec_EDIT PushHdfsLexerState 'TO' HdfsPath + { + parser.addTablePrimary($3); + } + | 'EXPORT' 'TABLE' SchemaQualifiedTableIdentifier PartitionSpec_EDIT PushHdfsLexerState 'TO' HdfsPath 'FOR' 'REPLICATION' '(' QuotedValue ')' + { + parser.addTablePrimary($3); + } + | 'EXPORT' 'TABLE' SchemaQualifiedTableIdentifier OptionalPartitionSpec PushHdfsLexerState 'TO' HdfsPath_EDIT 'FOR' 'REPLICATION' '(' QuotedValue ')' + { + parser.addTablePrimary($3); + } + ; \ No newline at end of file diff --git a/jison/sql_main.jison b/jison/sql_main.jison new file mode 100755 index 0000000..6ef9b53 --- /dev/null +++ b/jison/sql_main.jison @@ -0,0 +1,4024 @@ +// Licensed to Cloudera, Inc. under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. Cloudera, Inc. licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +SqlSyntax + : NewStatement SqlStatements EOF + ; + +SqlAutocomplete + : NewStatement SqlStatements EOF + { + return parser.yy.result; + } + | NewStatement SqlStatements_EDIT EOF + { + return parser.yy.result; + } + ; + +NewStatement + : /* empty */ + { + parser.prepareNewStatement(); + } + ; + +SqlStatements + : + | SqlStatement + { + parser.addStatementLocation(@1); + } + | SqlStatements ';' NewStatement SqlStatements + ; + +SqlStatements_EDIT + : SqlStatement_EDIT + { + parser.addStatementLocation(@1); + } + | SqlStatement_EDIT ';' NewStatement SqlStatements + { + parser.addStatementLocation(@1); + } + | SqlStatements ';' NewStatement SqlStatement_EDIT + { + parser.addStatementLocation(@4); + } + | SqlStatements ';' NewStatement SqlStatement_EDIT ';' NewStatement SqlStatements + { + parser.addStatementLocation(@4); + } + ; + +SqlStatement + : DataDefinition + | DataManipulation + | QuerySpecification + | ExplainClause DataDefinition + | ExplainClause DataManipulation + | ExplainClause QuerySpecification + ; + +SqlStatement_EDIT + : AnyCursor + { + if (parser.isHive()) { + parser.suggestDdlAndDmlKeywords(['EXPLAIN', 'FROM']); + } else if (parser.isImpala()) { + parser.suggestDdlAndDmlKeywords(['EXPLAIN']); + } else { + parser.suggestDdlAndDmlKeywords(); + } + } + | CommonTableExpression 'CURSOR' + { + if (parser.isHive() || parser.isImpala()) { + parser.suggestKeywords(['INSERT', 'SELECT']); + } else { + parser.suggestKeywords(['SELECT']); + } + } + | ExplainClause_EDIT + | DataDefinition_EDIT + | DataManipulation_EDIT + | QuerySpecification_EDIT + | SetSpecification_EDIT + | ExplainClause DataDefinition_EDIT + | ExplainClause DataManipulation_EDIT + | ExplainClause QuerySpecification_EDIT + | ExplainClause_EDIT DataDefinition + | ExplainClause_EDIT DataManipulation + | ExplainClause_EDIT QuerySpecification + ; + +NonReservedKeyword + : 'ABORT' + | 'ADD' + | 'ADMIN' + | 'AFTER' + | 'ANALYZE' + | 'ARCHIVE' + | 'AVRO' + | 'BUCKET' + | 'BUCKETS' + | 'CASCADE' + | 'CHANGE' + | 'CLUSTERED' + | 'COLLECTION' + | 'COLUMNS' + | 'COMMENT' + | 'COMPACT' + | 'COMPACTIONS' + | 'COMPUTE' + | 'CONCATENATE' + | 'DATA' + | 'DATABASES' + | 'DBPROPERTIES' + | 'DEFERRED' + | 'DEFINED' + | 'DELIMITED' + | 'DEPENDENCY' + | 'DIRECTORY' + | 'DISABLE' + | 'DOUBLE_PRECISION' + | 'ENABLE' + | 'ESCAPED' + | 'EXCHANGE' + | 'EXPLAIN' + | 'EXPORT' + | 'FIELDS' + | 'FILE' + | 'FILEFORMAT' + | 'FIRST' + | 'FORMAT' + | 'FUNCTIONS' + | 'INPATH' + | 'INPUTFORMAT' + | 'JAR' + | 'IDXPROPERTIES' + | 'ITEMS' + | 'KEY' + | 'KEYS' + | 'LINES' + | 'LOAD' + | 'LOCATION' + | 'LOCKS' + | 'MATCHED' + | 'METADATA' + | 'MERGE' + | 'MSCK' + | 'NOSCAN' + | 'NOVALIDATE' + | 'NO_DROP' + | 'OFFLINE' + | 'ORC' + | 'OUTPUTFORMAT' + | 'OVERWRITE' + | 'OWNER' + | 'PARQUET' + | 'PARTITIONED' + | 'PARTITIONS' + | 'PERCENT' + | 'PRIVILEGES' + | 'PURGE' + | 'RCFILE' + | 'REBUILD' + | 'RELOAD' + | 'RELY' + | 'NORELY' + | 'REPAIR' + | 'REPLICATION' + | 'RECOVER' + | 'RENAME' + | 'REPLACE' + | 'RESTRICT' + | 'ROLE' + | 'ROLES' + | 'SCHEMAS' + | 'SEQUENCEFILE' + | 'SERDE' + | 'SERDEPROPERTIES' + | 'SETS' + | 'SHOW' + | 'SKEWED' + | 'SORTED' + | 'STATISTICS' + | 'STORED' + | 'STRING' + | 'STRUCT' + | 'TABLES' + | 'TBLPROPERTIES' + | 'TEMPORARY' + | 'TERMINATED' + | 'TEXTFILE' + | 'TIMESTAMP' + | 'TINYINT' + | 'TOUCH' + | 'TRANSACTIONS' + | 'UNARCHIVE' + | 'UNIONTYPE' + | 'USE' + | 'USER' + | 'VIEW' + | 'WAIT' + | 'DAY' + | 'HOUR' + | 'MINUTE' + | 'MONTH' + | 'QUARTER' + | 'SECOND' + | 'WEEK' + | 'YEAR' +// | 'ASC' // These cause conflicts, we could use a separate lexer state for DESCRIBE, ALTER, GRANT, REVOKE and SHOW +// | 'CLUSTER' +// | 'DESC' +// | 'DISTRIBUTE' +// | 'FORMATTED' +// | 'FUNCTION' +// | 'INDEX' +// | 'INDEXES' +// | 'LOCK' +// | 'SCHEMA' +// | 'SHOW_DATABASE' +// | 'SORT' + ; + +NonReservedKeyword + : 'ANALYTIC' +// | 'ANTI' + | 'CURRENT' + | 'GRANT' + | 'RECOVER' + | 'ROLE' + | 'ROLES' + | 'URI' + | 'SERVER' + | 'UNKNOWN' +// | 'BROADCAST' +// | 'NOSHUFFLE' +// | 'SHUFFLE' +// TODO: Check if following are true + | 'BLOCK_SIZE' + | 'COMPRESSION' + | 'DEFAULT' + | 'ENCODING' + | 'KEY' + ; + +NonReservedKeyword + : 'ROLE' + | 'OPTION' + ; + +RegularIdentifier + : 'REGULAR_IDENTIFIER' + | 'VARIABLE_REFERENCE' + | NonReservedKeyword + ; + +ExplainClause + : 'EXPLAIN' OptionalHiveExplainTypes + | 'EXPLAIN' + ; + +ExplainClause_EDIT + : 'EXPLAIN' OptionalHiveExplainTypes 'CURSOR' + { + if (!$2) { + parser.suggestDdlAndDmlKeywords([{ value: 'AUTHORIZATION', weight: 2 }, { value: 'DEPENDENCY', weight: 2 }, { value: 'EXTENDED', weight: 2 }]); + } else { + parser.suggestDdlAndDmlKeywords(); + } + } + | 'EXPLAIN' 'CURSOR' + { + parser.suggestDdlAndDmlKeywords(); + } + ; + +OptionalHiveExplainTypes + : + | 'AUTHORIZATION' + | 'DEPENDENCY' + | 'EXTENDED' + ; + +// This is a work-around for error handling when a statement starts with some token that the parser can understand but +// it's not a valid statement (see ErrorStatement). It contains everything except valid starting tokens ('SELECT', 'USE' etc.) +NonStartingToken + : 'ADMIN' | 'ALL' | 'AS' | 'AUTHORIZATION' | 'AVRO' | 'BINARY' | 'BUCKET' | 'BUCKETS' | 'CACHE' | 'CLUSTER' | 'CLUSTERED' | 'COLLECTION' | 'COMPUTE' | 'CONF' | 'CONSTRAINT' | 'CUBE' | 'CURRENT' | 'DBPROPERTIES' | 'DATE' | 'DEFERRED' | 'DELIMITED' | 'DEPENDENCY' | 'DIRECTORY' | 'DISTRIBUTE' | 'DISTRIBUTED' | 'DOUBLE_PRECISION' |'ESCAPED' | 'EXTENDED' | 'EXTERNAL' | 'FIELDS' | 'FILE' | 'FOR' | 'FOREIGN' | 'FORMAT' | 'FUNCTION' | 'GRANT' | 'GROUPING' | 'IDXPROPERTIES' | 'KEY' | 'LATERAL' | 'LOCAL' | 'LOCK' | 'MACRO' | 'MATCHED' | 'NORELY' | 'NOVALIDATE' | 'OVERWRITE' | 'OWNER' | 'PARTITION' | 'PERCENT' | 'PRIVILEGES' | 'PRIMARY' | 'REBUILD' | 'REFERENCES' | 'RELY' | 'REPAIR' | 'REPLICATION' |'ROLLUP' | 'SETS' | 'STATISTICS' | 'SHOW_DATABASE' | 'TABLE' | 'TIMESTAMP' |'USER' | 'ASC' | 'COLUMNS' | 'COMMENT' | 'COMPACTIONS' | 'DATA' | 'DATABASES' | 'DEFINED' | 'DESC' | 'FORMATTED' | 'FUNCTIONS' | 'INDEX' | 'INDEXES' | 'INPATH' | 'INPUTFORMAT' | 'ITEMS' | 'JAR' | 'KEYS' | 'LINES' | 'LOCATION' | 'LOCKS' | 'METADATA' | 'NONE' | 'NOSCAN' | 'OF' | 'ORC' | 'OUT' | 'OUTPUTFORMAT' | 'PARQUET' | 'PARTITIONED' | 'PARTITIONS' | 'RCFILE' | 'ROLE' | 'ROLES' | 'SCHEMA' | 'SCHEMAS' | 'SEQUENCEFILE' | 'SERDE' | 'SERDEPROPERTIES' | 'SKEWED' | 'SORTED' | 'STORED' | 'STORED_AS_DIRECTORIES' | 'STRING' | 'TABLES' | 'TABLESAMPLE' | 'TBLPROPERTIES' | 'TEMPORARY' | 'TERMINATED' | 'TEXTFILE' | 'TINYINT' | 'TRANSACTIONS' | 'UNIONTYPE' | 'USING' | 'VIEW' | 'VIEWS' | 'WAIT' | 'WINDOW' | '.' | '[' | ']' + | 'AGGREGATE' | 'AVRO' | 'CACHED' | 'CASCADE' | 'CLOSE_FN' | 'COLUMN' | 'DATA' | 'DATABASES' | 'DELETE' | 'DELIMITED' | 'ESCAPED' | 'EXTENDED' |'EXTERNAL' | 'FIELDS' | 'FILES' | 'FINALIZE_FN' | 'FIRST' | 'FORMAT' | 'FORMATTED' | 'FUNCTION' | 'FUNCTIONS' | 'GROUP' | 'HASH' | 'ILIKE' | 'INCREMENTAL' | 'INTERMEDIATE' | 'INTERVAL' | 'INIT_FN' | 'INPATH' | 'IREGEXP' | 'KEY' | 'KUDU' | 'LAST' | 'LIMIT' | 'LINES' | 'LOCATION' | 'MERGE_FN' | 'NULLS' | 'PARTITIONS' | 'PREPARE_FN' | 'PRIMARY' | 'RANGE' | 'REAL' | 'RECOVER' | 'REPEATABLE' | 'REPLICATION' | 'RESTRICT' | 'RETURNS' | 'SCHEMAS' | 'SERIALIZE_FN' | 'SERVER' | 'SORT' | 'STATS' | 'STRAIGHT_JOIN' | 'SYMBOL' | 'TABLE' | 'TABLES' | 'TABLESAMPLE' | 'URI' | 'USING' | 'ANALYTIC' | 'ANTI' | 'CURRENT' | 'GRANT' | 'NOSHUFFLE' | 'PARQUET' | 'PARTITIONED' | 'RCFILE' | 'ROLE' | 'ROLES' | 'SEQUENCEFILE' | 'SERDEPROPERTIES' | 'SHUFFLE' | 'STORED' | 'TBLPROPERTIES' | 'TERMINATED' | 'TEXTFILE' | 'UPDATE_FN' | 'BROADCAST' | '...' | '.' | '[' | ']' + | 'ALL' | 'ARRAY' | 'AS' | 'ASC' | 'BETWEEN' | 'BIGINT' | 'BOOLEAN' | 'BY' | 'CASE' | 'CHAR' | 'CROSS' | 'CURRENT' | 'DATABASE' | 'DECIMAL' | 'DISTINCT' | 'DOUBLE' | 'DESC' | 'ELSE' | 'END' | 'EXISTS' | 'FALSE' | 'FLOAT' | 'FOLLOWING' | 'FROM' | 'FULL' | 'GROUP' | 'HAVING' | 'IF' | 'IN' | 'INNER' | 'INT' | 'INTO' | 'IS' | 'JOIN' | 'LEFT' | 'LIKE' | 'LIMIT' | 'MAP' | 'NOT' | 'NULL' | 'ON' | 'OPTION' | 'ORDER' | 'OUTER' | 'OVER' | 'PARTITION' | 'PRECEDING' | 'PURGE' | 'RANGE' | 'REGEXP' | 'RIGHT' | 'RLIKE' | 'ROW' | 'ROWS' | 'SCHEMA' | 'SEMI' | 'SET' | 'SMALLINT' | 'STRING' | 'STRUCT' | 'TABLE' | 'THEN' | 'TIMESTAMP' | 'TINYINT' | 'TRUE' | 'UNION' | 'VALUES' | 'VARCHAR' | 'WHEN' | 'WHERE' | 'WITH' | 'ROLE' + | 'AVG' | 'CAST' | 'COUNT' | 'MAX' | 'MIN' | 'STDDEV_POP' | 'STDDEV_SAMP' | 'SUM' | 'VARIANCE' | 'VAR_POP' | 'VAR_SAMP' + | 'COLLECT_SET' | 'COLLECT_LIST' | 'CORR' | 'COVAR_POP' | 'COVAR_SAMP' | 'DAY' | 'DAYOFWEEK' | 'HISTOGRAM_NUMERIC' | 'HOUR' | 'MINUTE' | 'MONTH' | 'NTILE' | 'PERCENTILE' | 'PERCENTILE_APPROX' | 'QUARTER' | 'SECOND' | 'WEEK' | 'YEAR' + | 'APPX_MEDIAN' | 'EXTRACT' | 'GROUP_CONCAT' | 'NDV' | 'STDDEV' | 'VARIANCE_POP' | 'VARIANCE_SAMP' + | 'ANALYTIC' + | 'UNSIGNED_INTEGER' | 'UNSIGNED_INTEGER_E' | 'REGULAR_IDENTIFIER' | 'HDFS_START_QUOTE' | 'AND' | 'OR' | '=' | '<' | '>' | 'COMPARISON_OPERATOR' | '-' | '*' | 'ARITHMETIC_OPERATOR' | ',' | '.' | '~' | '!' | '(' | ')' | '[' | ']' | 'VARIABLE_REFERENCE' | 'BACKTICK' | 'SINGLE_QUOTE' | 'DOUBLE_QUOTE' + ; + +DataDefinition + : DescribeStatement + ; + +DataDefinition_EDIT + : DescribeStatement_EDIT + ; + +// ===================================== Commonly used constructs ===================================== + +AggregateOrAnalytic + : 'AGGREGATE' + | 'ANALYTIC' + ; + +Commas + : ',' + | Commas ',' + ; + +AnyAs + : 'AS' + | 'AS' + ; + +AnyCreate + : 'CREATE' + | 'CREATE' + | 'CREATE' + ; + +AnyCursor + : 'CURSOR' + | 'PARTIAL_CURSOR' + ; + +AnyDot + : '.' + | '.' + | '.' + ; + +AnyFromOrIn + : 'FROM' + | 'IN' + ; + +AnyGroup + : 'GROUP' + | 'GROUP' + | 'GROUP' + ; + +AnyPartition + : 'PARTITION' + | 'PARTITION' + ; + +AnyTable + : 'TABLE' + | 'TABLE' + | 'TABLE' + ; + +DatabaseOrSchema + : 'DATABASE' + | 'SCHEMA' + | 'SCHEMA' + ; + +FromOrIn + : 'FROM' + | 'IN' + ; + +HiveIndexOrIndexes + : 'INDEX' + | 'INDEXES' + ; + +HiveOrImpalaComment + : 'COMMENT' + | 'COMMENT' + ; + +HiveOrImpalaCreate + : 'CREATE' + | 'CREATE' + ; + +HiveOrImpalaDatabasesOrSchemas + : 'DATABASES' + | 'SCHEMAS' + | 'DATABASES' + | 'SCHEMAS' + ; + +HiveOrImpalaEscaped + : 'ESCAPED' + | 'ESCAPED' + ; + +HiveOrImpalaFields + : 'FIELDS' + | 'FIELDS' + ; + +HiveOrImpalaFormat + : 'FORMAT' + | 'FORMAT' + ; + +HiveOrImpalaLeftSquareBracket + : '[' + | '[' + ; + +HiveOrImpalaLines + : 'LINES' + | 'LINES' + ; + +HiveOrImpalaLocation + : 'LOCATION' + | 'LOCATION' + ; + +HiveOrImpalaRightSquareBracket + : ']' + | ']' + ; + +HiveOrImpalaPartitioned + : 'PARTITIONED' + | 'PARTITIONED' + ; + +HiveOrImpalaStored + : 'STORED' + | 'STORED' + ; + +HiveOrImpalaTables + : 'TABLES' + | 'TABLES' + ; + +HiveOrImpalaTblproperties + : 'TBLPROPERTIES' + | 'TBLPROPERTIES' + ; + +HiveOrImpalaTerminated + : 'TERMINATED' + | 'TERMINATED' + ; + +HiveRoleOrUser + : 'ROLE' + | 'USER' + ; + +SingleQuotedValue + : 'SINGLE_QUOTE' 'VALUE' 'SINGLE_QUOTE' -> $2 + | 'SINGLE_QUOTE' 'SINGLE_QUOTE' -> '' + ; + +SingleQuotedValue_EDIT + : 'SINGLE_QUOTE' 'PARTIAL_VALUE' + ; + +DoubleQuotedValue + : 'DOUBLE_QUOTE' 'VALUE' 'DOUBLE_QUOTE' -> $2 + | 'DOUBLE_QUOTE' 'DOUBLE_QUOTE' -> '' + ; + +DoubleQuotedValue_EDIT + : 'DOUBLE_QUOTE' 'PARTIAL_VALUE' + ; + +QuotedValue + : SingleQuotedValue + | DoubleQuotedValue + ; + +QuotedValue_EDIT + : SingleQuotedValue_EDIT + | DoubleQuotedValue_EDIT + ; + +OptionalAggregateOrAnalytic + : + | AggregateOrAnalytic + ; + +OptionalHiveExtended + : + | 'EXTENDED' + ; + +OptionalHiveExtendedOrFormatted + : + | 'EXTENDED' + | 'FORMATTED' + ; + +OptionalExternal + : + | 'EXTERNAL' + | 'EXTERNAL' + ; + +OptionalImpalaExtendedOrFormatted + : + | 'EXTENDED' + | 'FORMATTED' + ; + +OptionallyFormattedIndex + : 'FORMATTED' HiveIndexOrIndexes + | HiveIndexOrIndexes + ; + +OptionallyFormattedIndex_EDIT + : 'FORMATTED' 'CURSOR' + { + parser.suggestKeywords(['INDEX', 'INDEXES']); + } + | 'CURSOR' HiveIndexOrIndexes + { + parser.suggestKeywords(['FORMATTED']); + } + ; + +OptionalFromDatabase + : + | FromOrIn DatabaseIdentifier + ; + +OptionalFromDatabase_EDIT + : FromOrIn DatabaseIdentifier_EDIT + ; + +OptionalCascade + : + | 'CASCADE' + ; + +OptionalCascadeOrRestrict + : + | 'CASCADE' + | 'CASCADE' + | 'RESTRICT' + | 'RESTRICT' + ; + +OptionalHiveCascadeOrRestrict + : + | 'CASCADE' + | 'RESTRICT' + ; + +OptionalHiveTemporary + : + | 'TEMPORARY' + ; + +OptionalIfExists + : + | 'IF' 'EXISTS' + { + parser.yy.correlatedSubQuery = false; + } + ; + +OptionalIfExists_EDIT + : 'IF' 'CURSOR' + { + parser.suggestKeywords(['EXISTS']); + } + ; + +OptionalIfNotExists + : + | 'IF' 'NOT' 'EXISTS' + { + parser.yy.correlatedSubQuery = false; + } + ; + +OptionalIfNotExists_EDIT + : 'IF' 'CURSOR' + { + parser.suggestKeywords(['NOT EXISTS']); + } + | 'IF' 'NOT' 'CURSOR' + { + parser.suggestKeywords(['EXISTS']); + } + ; + +OptionalInDatabase + : + | 'IN' DatabaseIdentifier + | 'IN' DatabaseIdentifier_EDIT + ; + +OptionalPartitionSpec + : + | PartitionSpec + ; + +OptionalPartitionSpec_EDIT + : PartitionSpec_EDIT + ; + +PartitionSpec + : AnyPartition '(' PartitionSpecList ')' + ; + +PartitionSpec_EDIT + : AnyPartition '(' PartitionSpecList_EDIT RightParenthesisOrError + ; + +RangePartitionSpec + : UnsignedValueSpecification RangePartitionComparisonOperator 'VALUES' RangePartitionComparisonOperator UnsignedValueSpecification + ; + +RangePartitionSpec_EDIT + : UnsignedValueSpecification 'CURSOR' + { + parser.suggestKeywords(['<', '<=', '<>', '=', '>', '>=']); + } + | UnsignedValueSpecification RangePartitionComparisonOperator 'CURSOR' + { + parser.suggestKeywords(['VALUES']); + } + | UnsignedValueSpecification RangePartitionComparisonOperator 'VALUES' 'CURSOR' + { + parser.suggestKeywords(['<', '<=', '<>', '=', '>', '>=']); + } + | UnsignedValueSpecification 'CURSOR' 'VALUES' RangePartitionComparisonOperator UnsignedValueSpecification + { + parser.suggestKeywords(['<', '<=', '<>', '=', '>', '>=']); + } + | UnsignedValueSpecification RangePartitionComparisonOperator 'CURSOR' RangePartitionComparisonOperator UnsignedValueSpecification + { + parser.suggestKeywords(['VALUES']); + } + | UnsignedValueSpecification RangePartitionComparisonOperator 'VALUES' 'CURSOR' UnsignedValueSpecification + { + parser.suggestKeywords(['<', '<=', '<>', '=', '>', '>=']); + } + ; + +RangePartitionComparisonOperator + : 'COMPARISON_OPERATOR' + | '=' + | '<' + | '>' + ; + +ConfigurationName + : RegularIdentifier + | 'CURSOR' + | ConfigurationName '.' RegularIdentifier + | ConfigurationName '.' 'PARTIAL_CURSOR' + ; + +PartialBacktickedOrAnyCursor + : AnyCursor + | PartialBacktickedIdentifier + ; + +PartialBacktickedOrCursor + : 'CURSOR' + | PartialBacktickedIdentifier + ; + +PartialBacktickedOrPartialCursor + : 'PARTIAL_CURSOR' + | PartialBacktickedIdentifier + ; + +PartialBacktickedIdentifier + : 'BACKTICK' 'PARTIAL_VALUE' + ; + +RightParenthesisOrError + : ')' + | error + ; + +OptionalParenthesizedColumnList + : + | ParenthesizedColumnList + ; + +OptionalParenthesizedColumnList_EDIT + : ParenthesizedColumnList_EDIT + ; + +ParenthesizedColumnList + : '(' ColumnList ')' + ; + +ParenthesizedColumnList_EDIT + : '(' ColumnList_EDIT RightParenthesisOrError + | '(' AnyCursor RightParenthesisOrError + { + parser.suggestColumns(); + } + ; + +ColumnList + : ColumnIdentifier + | ColumnList ',' ColumnIdentifier + ; + +ColumnList_EDIT + : ColumnIdentifier_EDIT + | ColumnList ',' AnyCursor + { + parser.suggestColumns(); + } + | ColumnList ',' ColumnIdentifier_EDIT + | ColumnIdentifier_EDIT ',' ColumnList + | ColumnList ',' ColumnIdentifier_EDIT ',' ColumnList + | ColumnList ',' AnyCursor ',' ColumnList + { + parser.suggestColumns(); + } + ; + +ParenthesizedSimpleValueList + : '(' SimpleValueList ')' + ; + +SimpleValueList + : UnsignedValueSpecification + | SimpleValueList ',' UnsignedValueSpecification + ; + +SchemaQualifiedTableIdentifier + : RegularOrBacktickedIdentifier + { + parser.addTableLocation(@1, [ { name: $1 } ]); + $$ = { identifierChain: [ { name: $1 } ] }; + } + | RegularOrBacktickedIdentifier AnyDot RegularOrBacktickedIdentifier + { + parser.addDatabaseLocation(@1, [ { name: $1 } ]); + parser.addTableLocation(@3, [ { name: $1 }, { name: $3 } ]); + $$ = { identifierChain: [ { name: $1 }, { name: $3 } ] }; + } + | RegularOrBacktickedIdentifier AnyDot RegularOrBacktickedIdentifier ImpalaFields + { + // This is a special case for Impala expression like "SELECT | FROM db.table.col" + $$ = { identifierChain: [ { name: $1 }, { name: $3 } ].concat($4) }; + } + ; + +SchemaQualifiedTableIdentifier_EDIT + : PartialBacktickedIdentifier + { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + | PartialBacktickedIdentifier AnyDot RegularOrBacktickedIdentifier + { + parser.suggestDatabases(); + $$ = { identifierChain: [{ name: $1 }] }; + } + | RegularOrBacktickedIdentifier AnyDot PartialBacktickedOrPartialCursor + { + // In Impala you can have statements like 'SELECT ... FROM testTable t, t.|' + parser.suggestTablesOrColumns($1); + } + | RegularOrBacktickedIdentifier AnyDot RegularOrBacktickedIdentifier ImpalaFields_EDIT + { + // TODO: switch to suggestColumns, it's currently handled in sqlAutocompleter2.js + // Issue is that suggestColumns is deleted if no tables are defined and this is + // Impala only cases like "SELECT | FROM db.table.col" + parser.suggestTables({ identifierChain: [{ name: $1 }, { name: $3 }].concat($4) }); + } + ; + +ImpalaFields + : ImpalaField -> [$1] + | ImpalaFields ImpalaField + { + $1.push($2); + } + ; + +ImpalaFields_EDIT + : ImpalaField_EDIT -> [] + | ImpalaFields ImpalaField_EDIT -> $1 + | ImpalaFields ImpalaField_EDIT ImpalaFields -> $1 + | ImpalaField_EDIT ImpalaFields -> [] + ; + +ImpalaField + : '.' RegularOrBacktickedIdentifier -> { name: $2 } + ; + +ImpalaField_EDIT + : '.' PartialBacktickedOrPartialCursor + ; + +SchemaQualifiedIdentifier + : RegularOrBacktickedIdentifier + | RegularOrBacktickedIdentifier AnyDot RegularOrBacktickedIdentifier + ; + +SchemaQualifiedIdentifier_EDIT + : PartialBacktickedIdentifier + { + parser.suggestDatabases({ appendDot: true }); + } + | PartialBacktickedIdentifier AnyDot RegularOrBacktickedIdentifier + { + parser.suggestDatabases(); + $$ = { identifierChain: [{ name: $1 }] }; + } + | RegularOrBacktickedIdentifier AnyDot PartialBacktickedOrPartialCursor + ; + +DatabaseIdentifier + : RegularOrBacktickedIdentifier + ; + +DatabaseIdentifier_EDIT + : PartialBacktickedOrCursor + { + parser.suggestDatabases(); + } + ; + +PartitionSpecList + : PartitionExpression + | PartitionSpecList ',' PartitionExpression + ; + +PartitionSpecList_EDIT + : PartitionExpression_EDIT + | PartitionSpecList ',' PartitionExpression_EDIT + | PartitionExpression_EDIT ',' PartitionSpecList + | PartitionSpecList ',' PartitionExpression_EDIT ',' PartitionSpecList + ; + +PartitionExpression + : ColumnIdentifier '=' ValueExpression + | ColumnIdentifier // Hive allows partial partition specs in some cases + ; + +PartitionExpression_EDIT + : ColumnIdentifier '=' ValueExpression_EDIT + | ColumnIdentifier '=' AnyCursor + { + parser.valueExpressionSuggest(); + } + | PartialBacktickedIdentifier '=' ValueExpression + { + parser.suggestColumns(); + } + | AnyCursor + { + parser.suggestColumns(); + } + ; + +OptionalHdfsLocation + : + | HdfsLocation + ; + +HdfsLocation + : HiveOrImpalaLocation HdfsPath + ; + +HdfsLocation_EDIT + : HiveOrImpalaLocation HdfsPath_EDIT + ; + +OptionalCachedInOrUncached + : + | CachedIn OptionalWithReplication + { + if (!$2) { + $$ = { suggestKeywords: ['WITH REPLICATION ='] }; + } + } + | 'UNCACHED' + ; + + +OptionalCachedIn + : + | CachedIn OptionalWithReplication + { + if (!$2) { + $$ = { suggestKeywords: ['WITH REPLICATION ='] }; + } + } + ; + +CachedIn + : 'CACHED' 'IN' QuotedValue + ; + +CachedIn_EDIT + : 'CACHED' 'CURSOR' + { + parser.suggestKeywords(['IN']); + } + ; + +OptionalWithReplication + : + | WithReplication + ; + +WithReplication + : 'WITH' 'REPLICATION' '=' SignedInteger + ; + +WithReplication_EDIT + : 'WITH' 'CURSOR' + { + parser.suggestKeywords(['REPLICATION =']); + } + | 'WITH' 'REPLICATION' 'CURSOR' + { + parser.suggestKeywords(['=']); + } + ; + +RegularOrBacktickedIdentifier + : RegularIdentifier + | 'BACKTICK' 'VALUE' 'BACKTICK' -> $2 + | 'BACKTICK' 'BACKTICK' -> '' + ; + +// TODO: Same as SchemaQualifiedTableIdentifier? +RegularOrBackTickedSchemaQualifiedName + : RegularOrBacktickedIdentifier + { + parser.addTableLocation(@1, [ { name: $1 } ]); + $$ = { identifierChain: [ { name: $1 } ] }; + } + | RegularOrBacktickedIdentifier AnyDot RegularOrBacktickedIdentifier + { + parser.addDatabaseLocation(@1, [ { name: $1 } ]); + parser.addTableLocation(@3, [ { name: $1 }, { name: $3 } ]); + $$ = { identifierChain: [ { name: $1 }, { name: $3 } ] }; + } + ; + +RegularOrBackTickedSchemaQualifiedName_EDIT + : PartialBacktickedIdentifier + { + parser.suggestTables(); + parser.suggestDatabases({ prependDot: true }); + } + | RegularOrBacktickedIdentifier AnyDot PartialBacktickedOrPartialCursor + { + parser.suggestTablesOrColumns($1); + } + ; + + +LocalOrSchemaQualifiedName + : RegularOrBackTickedSchemaQualifiedName + | RegularOrBackTickedSchemaQualifiedName RegularOrBacktickedIdentifier -> { identifierChain: $1.identifierChain, alias: $2 } + ; + +LocalOrSchemaQualifiedName_EDIT + : RegularOrBackTickedSchemaQualifiedName_EDIT + | RegularOrBackTickedSchemaQualifiedName_EDIT RegularOrBacktickedIdentifier + ; + +ColumnReference + : BasicIdentifierChain + { + parser.yy.locations[parser.yy.locations.length - 1].type = 'column'; + } + | BasicIdentifierChain AnyDot '*' + { + parser.addAsteriskLocation(@3, $1.concat({ asterisk: true })); + } + ; + +ColumnReference_EDIT + : BasicIdentifierChain_EDIT + ; + +BasicIdentifierChain + : ColumnIdentifier + { + $$ = [ $1.identifier ]; + parser.yy.firstChainLocation = parser.addUnknownLocation($1.location, [ $1.identifier ]); + } + | BasicIdentifierChain AnyDot ColumnIdentifier + { + if (parser.yy.firstChainLocation) { + parser.yy.firstChainLocation.firstInChain = true; + delete parser.yy.firstChainLocation; + } + $1.push($3.identifier); + parser.addUnknownLocation($3.location, $1.concat()); + } + ; + +// TODO: Merge with DerivedColumnChain_EDIT ( issue is starting with PartialBacktickedOrPartialCursor) +BasicIdentifierChain_EDIT + : ColumnIdentifier_EDIT + { + if ($1.insideKey) { + parser.suggestKeyValues({ identifierChain: [ $1.identifier ] }); + parser.suggestColumns(); + parser.suggestFunctions(); + } + } + | BasicIdentifierChain AnyDot ColumnIdentifier_EDIT + { + if ($3.insideKey) { + parser.suggestKeyValues({ identifierChain: $1.concat([ $3.identifier ]) }); + parser.suggestColumns(); + parser.suggestFunctions(); + } + } + | BasicIdentifierChain AnyDot ColumnIdentifier_EDIT AnyDot BasicIdentifierChain + | ColumnIdentifier_EDIT AnyDot BasicIdentifierChain + | BasicIdentifierChain AnyDot PartialBacktickedOrPartialCursor + { + parser.suggestColumns({ + identifierChain: $1 + }); + $$ = { suggestKeywords: [{ value: '*', weight: 10000 }] }; + } + | BasicIdentifierChain AnyDot PartialBacktickedOrPartialCursor AnyDot BasicIdentifierChain + { + parser.suggestColumns({ + identifierChain: $1 + }); + $$ = { suggestKeywords: [{ value: '*', weight: 10000 }] }; + } + ; + +DerivedColumnChain + : ColumnIdentifier -> [ $1.identifier ] + | DerivedColumnChain AnyDot ColumnIdentifier + { + $1.push($3.identifier); + } + ; + +DerivedColumnChain_EDIT + : ColumnIdentifier_EDIT + { + if ($1.insideKey) { + parser.suggestKeyValues({ identifierChain: [ $1.identifier ] }); + parser.suggestColumns(); + parser.suggestFunctions(); + } + } + | DerivedColumnChain AnyDot ColumnIdentifier_EDIT + { + if ($3.insideKey) { + parser.suggestKeyValues({ identifierChain: $1.concat([ $3.identifier ]) }); + parser.suggestColumns(); + parser.suggestFunctions(); + } + } + | DerivedColumnChain AnyDot ColumnIdentifier_EDIT AnyDot DerivedColumnChain + { + if ($3.insideKey) { + parser.suggestKeyValues({ identifierChain: $1.concat([ $3.identifier ]) }); + parser.suggestColumns(); + parser.suggestFunctions(); + } + } + | ColumnIdentifier_EDIT AnyDot DerivedColumnChain + { + if ($1.insideKey) { + parser.suggestKeyValues({ identifierChain: [ $1.identifier ] }); + parser.suggestColumns(); + parser.suggestFunctions(); + } + } + | PartialBacktickedIdentifierOrPartialCursor + { + parser.suggestColumns(); + } + | DerivedColumnChain AnyDot PartialBacktickedIdentifierOrPartialCursor + { + parser.suggestColumns({ identifierChain: $1 }); + } + | DerivedColumnChain AnyDot PartialBacktickedIdentifierOrPartialCursor AnyDot DerivedColumnChain + { + parser.suggestColumns({ identifierChain: $1 }); + } + | PartialBacktickedIdentifierOrPartialCursor AnyDot DerivedColumnChain + { + parser.suggestColumns(); + } + ; + +ColumnIdentifier + : RegularOrBacktickedIdentifier -> { identifier: { name: $1 }, location: @1 }; + | RegularOrBacktickedIdentifier HiveOrImpalaLeftSquareBracket ValueExpression HiveOrImpalaRightSquareBracket -> { identifier: { name: $1, keySet: true }, location: @1 } + | RegularOrBacktickedIdentifier HiveOrImpalaLeftSquareBracket HiveOrImpalaRightSquareBracket -> { identifier: { name: $1, keySet: true }, location: @1 } + ; + +ColumnIdentifier_EDIT + : RegularOrBacktickedIdentifier HiveOrImpalaLeftSquareBracket AnyCursor HiveOrImpalaRightSquareBracketOrError -> { identifier: { name: $1 }, insideKey: true } + | RegularOrBacktickedIdentifier HiveOrImpalaLeftSquareBracket ValueExpression_EDIT HiveOrImpalaRightSquareBracketOrError -> { identifier: { name: $1 }}; + ; + +PartialBacktickedIdentifierOrPartialCursor + : PartialBacktickedIdentifier + | 'PARTIAL_CURSOR' + ; + +HiveOrImpalaRightSquareBracketOrError + : HiveOrImpalaRightSquareBracket + | error + ; + +// TODO: Support | DECIMAL(precision, scale) -- (Note: Available in Hive 0.13.0 and later) +PrimitiveType + : 'TINYINT' + | 'TINYINT' + | 'SMALLINT' + | 'INT' + | 'BIGINT' + | 'BOOLEAN' + | 'FLOAT' + | 'DOUBLE' + | 'DOUBLE_PRECISION' + | 'REAL' + | 'STRING' + | 'STRING' + | 'DECIMAL' OptionalTypePrecision + | 'CHAR' OptionalTypeLength + | 'VARCHAR' OptionalTypeLength + | 'TIMESTAMP' + | 'TIMESTAMP' + | 'BINARY' + | 'DATE' + ; + +OptionalTypeLength + : + | '(' 'UNSIGNED_INTEGER' ')' + ; + +OptionalTypePrecision + : + | '(' 'UNSIGNED_INTEGER' ')' + | '(' 'UNSIGNED_INTEGER' ',' 'UNSIGNED_INTEGER' ')' + ; + +// ===================================== DESCRIBE statement ===================================== + +DescribeStatement + : HiveDescribeStatement + | ImpalaDescribeStatement + ; + +DescribeStatement_EDIT + : HiveDescribeStatement_EDIT + | ImpalaDescribeStatement_EDIT + ; + +HiveDescribeStatement + : 'DESCRIBE' OptionalHiveExtendedOrFormatted SchemaQualifiedTableIdentifier DerivedColumnChain OptionalPartitionSpec + { + parser.addTablePrimary($3); + parser.addColumnLocation(@4, $4); + } + | 'DESCRIBE' OptionalHiveExtendedOrFormatted SchemaQualifiedTableIdentifier OptionalPartitionSpec + { + parser.addTablePrimary($3); + } + | 'DESCRIBE' DatabaseOrSchema OptionalHiveExtended DatabaseIdentifier + { + parser.addDatabaseLocation(@4, [{ name: $4 }]); + } + | 'DESCRIBE' 'FUNCTION' OptionalHiveExtended RegularIdentifier + ; + +HiveDescribeStatement_EDIT + : 'DESCRIBE' OptionalHiveExtendedOrFormatted SchemaQualifiedTableIdentifier_EDIT OptionalPartitionSpec + | 'DESCRIBE' OptionalHiveExtendedOrFormatted SchemaQualifiedTableIdentifier DerivedColumnChain_EDIT OptionalPartitionSpec + { + parser.addTablePrimary($3); + } + | 'DESCRIBE' OptionalHiveExtendedOrFormatted 'CURSOR' SchemaQualifiedTableIdentifier DerivedColumnChain OptionalPartitionSpec + { + if (!$2) { + parser.suggestKeywords(['EXTENDED', 'FORMATTED']); + } + } + | 'DESCRIBE' OptionalHiveExtendedOrFormatted 'CURSOR' SchemaQualifiedTableIdentifier OptionalPartitionSpec + { + if (!$2) { + parser.suggestKeywords(['EXTENDED', 'FORMATTED']); + } + } + | 'DESCRIBE' OptionalHiveExtendedOrFormatted SchemaQualifiedTableIdentifier 'CURSOR' OptionalPartitionSpec + { + parser.addTablePrimary($3); + parser.suggestColumns(); + if (!$5) { + parser.suggestKeywords(['PARTITION']); + } + } + | 'DESCRIBE' OptionalHiveExtendedOrFormatted SchemaQualifiedTableIdentifier DerivedColumnChain 'CURSOR' OptionalPartitionSpec + { + if (!$6) { + parser.suggestKeywords(['PARTITION']); + } + } + | 'DESCRIBE' OptionalHiveExtendedOrFormatted SchemaQualifiedTableIdentifier DerivedColumnChain OptionalPartitionSpec_EDIT + | 'DESCRIBE' OptionalHiveExtendedOrFormatted SchemaQualifiedTableIdentifier OptionalPartitionSpec_EDIT + + | 'DESCRIBE' OptionalHiveExtendedOrFormatted 'CURSOR' + { + if (!$2) { + parser.suggestKeywords(['DATABASE', 'EXTENDED', 'FORMATTED', 'FUNCTION', 'SCHEMA']); + } + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + | 'DESCRIBE' DatabaseOrSchema OptionalHiveExtended DatabaseIdentifier_EDIT + { + if (!$3) { + parser.suggestKeywords(['EXTENDED']); + } + } + | 'DESCRIBE' DatabaseOrSchema OptionalHiveExtended 'CURSOR' DatabaseIdentifier + { + if (!$3) { + parser.suggestKeywords(['EXTENDED']); + } + } + | 'DESCRIBE' 'FUNCTION' OptionalHiveExtended 'CURSOR' + { + if (!$3) { + parser.suggestKeywords(['EXTENDED']); + } + } + | 'DESCRIBE' 'FUNCTION' OptionalHiveExtended 'CURSOR' RegularIdentifier + { + if (!$3) { + parser.suggestKeywords(['EXTENDED']); + } + } + ; + +ImpalaDescribeStatement + : 'DESCRIBE' OptionalImpalaExtendedOrFormatted SchemaQualifiedTableIdentifier + { + parser.addTablePrimary($3); + } + | 'DESCRIBE' 'DATABASE' OptionalImpalaExtendedOrFormatted DatabaseIdentifier + { + parser.addDatabaseLocation(@4, [{ name: $4 }]); + } + ; + +ImpalaDescribeStatement_EDIT + : 'DESCRIBE' OptionalImpalaExtendedOrFormatted 'CURSOR' + { + if (!$2) { + parser.suggestKeywords([{ value: 'DATABASE', weight: 2 }, { value: 'EXTENDED', weight: 1 }, { value: 'FORMATTED', weight: 1 }]); + } + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + | 'DESCRIBE' OptionalImpalaExtendedOrFormatted SchemaQualifiedTableIdentifier_EDIT + | 'DESCRIBE' OptionalImpalaExtendedOrFormatted 'CURSOR' SchemaQualifiedTableIdentifier + { + parser.addTablePrimary($4); + if (!$2) { + parser.suggestKeywords([{ value: 'DATABASE', weight: 2 }, { value: 'EXTENDED', weight: 1 }, { value: 'FORMATTED', weight: 1 }]); + } + } + | 'DESCRIBE' 'DATABASE' OptionalImpalaExtendedOrFormatted 'CURSOR' + { + if (!$3) { + parser.suggestKeywords(['EXTENDED', 'FORMATTED']); + } + parser.suggestDatabases(); + } + | 'DESCRIBE' 'DATABASE' OptionalImpalaExtendedOrFormatted 'CURSOR' DatabaseIdentifier + { + if (!$3) { + parser.suggestKeywords(['EXTENDED', 'FORMATTED']); + } + parser.addDatabaseLocation(@5, [{ name: $5 }]); + } + ; + +// ===================================== SELECT statement ===================================== + +QuerySpecification + : SelectStatement OptionalUnions -> $1 + | CommonTableExpression SelectStatement OptionalUnions + | CommonTableExpression '(' QuerySpecification ')' OptionalUnions -> $3 + ; + +QuerySpecification_EDIT + : SelectStatement_EDIT OptionalUnions + | SelectStatement OptionalUnions_EDIT + | CommonTableExpression '(' QuerySpecification_EDIT ')' + { + parser.addCommonTableExpressions($1); + } + | CommonTableExpression SelectStatement_EDIT OptionalUnions + { + parser.addCommonTableExpressions($1); + } + | CommonTableExpression SelectStatement OptionalUnions_EDIT + { + parser.addCommonTableExpressions($1); + } + | CommonTableExpression_EDIT + | CommonTableExpression_EDIT '(' QuerySpecification ')' + | CommonTableExpression_EDIT SelectStatement OptionalUnions + ; + +SelectStatement + : 'SELECT' OptionalAllOrDistinct OptionalStraightJoin SelectList + { + parser.addClauseLocation('selectList', parser.firstDefined($3, @3, $2, @2, $1, @1), @4); + $$ = { selectList: $4 }; + } + | 'SELECT' OptionalAllOrDistinct OptionalStraightJoin SelectList TableExpression + { + parser.addClauseLocation('selectList', parser.firstDefined($3, @3, $2, @2, $1, @1), @4); + $$ = { selectList: $4, tableExpression: $5 } + } + ; + +OptionalUnions + : + | Unions + ; + +OptionalUnions_EDIT + : Unions_EDIT + ; + +Unions + : UnionClause + | Unions UnionClause + ; + +Unions_EDIT + : UnionClause_EDIT + | Unions UnionClause_EDIT + | UnionClause_EDIT Unions + | Unions UnionClause_EDIT Unions + ; + +UnionClause + : 'UNION' NewStatement OptionalAllOrDistinct SelectStatement + ; + +UnionClause_EDIT + : 'UNION' NewStatement 'CURSOR' + { + parser.suggestKeywords(['ALL', 'DISTINCT', 'SELECT']); + } + | 'UNION' NewStatement 'CURSOR' SelectStatement + { + parser.suggestKeywords(['ALL', 'DISTINCT']); + } + | 'UNION' NewStatement OptionalAllOrDistinct SelectStatement_EDIT + ; + +SelectStatement_EDIT + : 'SELECT' OptionalAllOrDistinct OptionalStraightJoin SelectList_EDIT + { + parser.addClauseLocation('selectList', parser.firstDefined($3, @3, $2, @2, $1, @1), @4); + if ($4.cursorAtStart) { + var keywords = parser.getSelectListKeywords(); + if (!$3 && !$2) { + keywords.push({ value: 'ALL', weight: 2 }); + keywords.push({ value: 'DISTINCT', weight: 2 }); + } + if (parser.isImpala() && !$3) { + keywords.push({ value: 'STRAIGHT_JOIN', weight: 1 }); + } + parser.suggestKeywords(keywords); + } else { + parser.checkForSelectListKeywords($4); + } + if ($4.suggestFunctions) { + parser.suggestFunctions(); + } + if ($4.suggestColumns) { + parser.suggestColumns({ identifierChain: [], source: 'select' }); + } + if ($4.suggestTables) { + parser.suggestTables({ prependQuestionMark: true, prependFrom: true }); + } + if ($4.suggestDatabases) { + parser.suggestDatabases({ prependQuestionMark: true, prependFrom: true, appendDot: true }); + } + if ($4.suggestAggregateFunctions && (!$2 || $2 === 'ALL')) { + parser.suggestAggregateFunctions(); + parser.suggestAnalyticFunctions(); + } + } + | 'SELECT' OptionalAllOrDistinct OptionalStraightJoin 'CURSOR' + { + parser.addClauseLocation('selectList', parser.firstDefined($3, @3, $2, @2, $1, @1), @4, true); + var keywords = parser.getSelectListKeywords(); + if (!$2 || $2 === 'ALL') { + parser.suggestAggregateFunctions(); + parser.suggestAnalyticFunctions(); + } + if (!$3 && !$2) { + keywords.push({ value: 'ALL', weight: 2 }); + keywords.push({ value: 'DISTINCT', weight: 2 }); + } + if (parser.isImpala() && !$3) { + keywords.push({ value: 'STRAIGHT_JOIN', weight: 1 }); + } + parser.suggestKeywords(keywords); + parser.suggestFunctions(); + parser.suggestColumns({ identifierChain: [], source: 'select' }); + parser.suggestTables({ prependQuestionMark: true, prependFrom: true }); + parser.suggestDatabases({ prependQuestionMark: true, prependFrom: true, appendDot: true }); + } + | 'SELECT' OptionalAllOrDistinct OptionalStraightJoin SelectList TableExpression_EDIT + { + parser.addClauseLocation('selectList', parser.firstDefined($3, @3, $2, @2, $1, @1), @4); + } + | 'SELECT' OptionalAllOrDistinct OptionalStraightJoin SelectList_EDIT TableExpression + { + parser.addClauseLocation('selectList', parser.firstDefined($3, @3, $2, @2, $1, @1), @4); + parser.selectListNoTableSuggest($4, $2); + if (parser.yy.result.suggestColumns) { + parser.yy.result.suggestColumns.source = 'select'; + } + } + | 'SELECT' OptionalAllOrDistinct OptionalStraightJoin 'CURSOR' TableExpression + { + parser.addClauseLocation('selectList', parser.firstDefined($3, @3, $2, @2, $1, @1), @4, true); + var keywords = parser.getSelectListKeywords(); + if (!$2 || $2 === 'ALL') { + parser.suggestAggregateFunctions(); + parser.suggestAnalyticFunctions(); + } + if (!$3 && !$2) { + keywords.push({ value: 'ALL', weight: 2 }); + keywords.push({ value: 'DISTINCT', weight: 2 }); + } + if (parser.isImpala() && !$3) { + keywords.push({ value: 'STRAIGHT_JOIN', weight: 1 }); + } + parser.suggestKeywords(keywords); + parser.suggestFunctions(); + parser.suggestColumns({ identifierChain: [], source: 'select' }); + parser.suggestTables({ prependQuestionMark: true, prependFrom: true }); + parser.suggestDatabases({ prependQuestionMark: true, prependFrom: true, appendDot: true }); + } + | 'SELECT' OptionalAllOrDistinct OptionalStraightJoin SelectList 'CURSOR' TableExpression + { + parser.addClauseLocation('selectList', parser.firstDefined($3, @3, $2, @2, $1, @1), @4); + parser.checkForSelectListKeywords($4); + } + | 'SELECT' OptionalAllOrDistinct OptionalStraightJoin SelectList 'CURSOR' ',' TableExpression + { + parser.addClauseLocation('selectList', parser.firstDefined($3, @3, $2, @2, $1, @1), @4); + parser.checkForSelectListKeywords($4); + } + | 'SELECT' OptionalAllOrDistinct OptionalStraightJoin SelectList 'CURSOR' + { + parser.addClauseLocation('selectList', parser.firstDefined($3, @3, $2, @2, $1, @1), @4); + parser.checkForSelectListKeywords($4); + var keywords = ['FROM']; + if (parser.yy.result.suggestKeywords) { + keywords = parser.yy.result.suggestKeywords.concat(keywords); + } + parser.suggestKeywords(keywords); + parser.suggestTables({ prependFrom: true }); + parser.suggestDatabases({ prependFrom: true, appendDot: true }); + } + ; + +OptionalStraightJoin + : + | 'STRAIGHT_JOIN' + ; + +CommonTableExpression + : 'WITH' WithQueries -> $2 + ; + +CommonTableExpression_EDIT + : 'WITH' WithQueries_EDIT + ; + +WithQueries + : WithQuery -> [$1] + | WithQueries ',' WithQuery -> $1.concat([$3]); + ; + +WithQueries_EDIT + : WithQuery_EDIT + | WithQueries ',' WithQuery_EDIT + { + parser.addCommonTableExpressions($1); + } + | WithQuery_EDIT ',' WithQueries + | WithQueries ',' WithQuery_EDIT ',' WithQueries + { + parser.addCommonTableExpressions($1); + } + ; + +WithQuery + : RegularOrBacktickedIdentifier AnyAs '(' TableSubQueryInner ')' + { + parser.addCteAliasLocation(@1, $1); + $4.alias = $1; + $$ = $4; + } + ; + +WithQuery_EDIT + : RegularOrBacktickedIdentifier 'CURSOR' + { + parser.suggestKeywords(['AS']); + } + | RegularOrBacktickedIdentifier AnyAs '(' AnyCursor RightParenthesisOrError + { + parser.suggestKeywords(['SELECT']); + } + | RegularOrBacktickedIdentifier AnyAs '(' TableSubQueryInner_EDIT RightParenthesisOrError + ; + +OptionalAllOrDistinct + : + | 'ALL' + | 'ALL' + | 'DISTINCT' + ; + +TableExpression + : FromClause OptionalSelectConditions + { + parser.addClauseLocation('whereClause', @1, $2.whereClauseLocation); + parser.addClauseLocation('limitClause', $2.limitClausePreceding || @1, $2.limitClauseLocation); + } + ; + +TableExpression_EDIT + : FromClause_EDIT OptionalSelectConditions + { + parser.addClauseLocation('whereClause', @1, $2.whereClauseLocation); + parser.addClauseLocation('limitClause', $2.limitClausePreceding || @1, $2.limitClauseLocation); + } + | FromClause 'CURSOR' OptionalSelectConditions OptionalJoins + { + var keywords = []; + + parser.addClauseLocation('whereClause', @1, $3.whereClauseLocation); + parser.addClauseLocation('limitClause', $2.limitClausePreceding || @1, $2.limitClauseLocation); + + if ($1) { + if (!$1.hasLateralViews && typeof $1.tableReferenceList.hasJoinCondition !== 'undefined' && !$1.tableReferenceList.hasJoinCondition) { + keywords.push({ value: 'ON', weight: 3 }); + if (parser.isImpala()) { + keywords.push({ value: 'USING', weight: 3 }); + } + } + if ($1.suggestKeywords) { + keywords = parser.createWeightedKeywords($1.suggestKeywords, 3); + } + if ($1.tableReferenceList.suggestJoinConditions) { + parser.suggestJoinConditions($1.tableReferenceList.suggestJoinConditions); + } + if ($1.tableReferenceList.suggestJoins) { + parser.suggestJoins($1.tableReferenceList.suggestJoins); + } + if (!$1.hasLateralViews && $1.tableReferenceList.suggestKeywords) { + keywords = keywords.concat(parser.createWeightedKeywords($1.tableReferenceList.suggestKeywords, 3)); + } + + // Lower the weights for 'TABLESAMPLE' and 'LATERAL VIEW' + keywords.forEach(function (keyword) { + if (keyword.value === 'TABLESAMPLE' || keyword.value === 'LATERAL VIEW') { + keyword.weight = 1.1; + } + }); + + if (!$1.hasLateralViews && $1.tableReferenceList.types) { + var veKeywords = parser.getValueExpressionKeywords($1.tableReferenceList); + keywords = keywords.concat(veKeywords.suggestKeywords); + if (veKeywords.suggestColRefKeywords) { + parser.suggestColRefKeywords(veKeywords.suggestColRefKeywords); + parser.addColRefIfExists($1.tableReferenceList); + } + } + } + + if ($3.empty && $4 && $4.joinType.toUpperCase() === 'JOIN') { + keywords = keywords.concat(['FULL', 'FULL OUTER', 'LEFT', 'LEFT OUTER', 'RIGHT', 'RIGHT OUTER']); + if (parser.isHive()) { + keywords = keywords.concat(['CROSS', 'INNER', 'LEFT SEMI']); + } else if (parser.isImpala()) { + keywords = keywords.concat(['ANTI', 'CROSS', 'INNER', 'LEFT ANTI', 'LEFT INNER', 'LEFT SEMI', 'OUTER', 'RIGHT ANTI', 'RIGHT INNER', 'RIGHT SEMI', 'SEMI']); + } else { + keywords.push('INNER'); + } + parser.suggestKeywords(keywords); + return; + } + + if ($3.suggestKeywords) { + keywords = keywords.concat(parser.createWeightedKeywords($3.suggestKeywords, 2)); + } + + if ($3.suggestFilters) { + parser.suggestFilters($3.suggestFilters); + } + if ($3.suggestGroupBys) { + parser.suggestGroupBys($3.suggestGroupBys); + } + if ($3.suggestOrderBys) { + parser.suggestOrderBys($3.suggestOrderBys); + } + + if ($3.empty) { + keywords.push({ value: 'UNION', weight: 2.11 }); + } + + keywords = keywords.concat([ + { value: 'FULL JOIN', weight: 1 }, + { value: 'FULL OUTER JOIN', weight: 1 }, + { value: 'JOIN', weight: 1 }, + { value: 'LEFT JOIN', weight: 1 }, + { value: 'LEFT OUTER JOIN', weight: 1 }, + { value: 'RIGHT JOIN', weight: 1 }, + { value: 'RIGHT OUTER JOIN', weight: 1 } + ]); + if (parser.isHive()) { + keywords = keywords.concat([ + { value: 'CROSS JOIN', weight: 1 }, + { value: 'INNER JOIN', weight: 1 }, + { value: 'LEFT SEMI JOIN', weight: 1 } + ]); + } else if (parser.isImpala()) { + keywords = keywords.concat([ + { value: 'ANTI JOIN', weight: 1 }, + { value: 'INNER JOIN', weight: 1 }, + { value: 'LEFT ANTI JOIN', weight: 1 }, + { value: 'LEFT INNER JOIN', weight: 1 }, + { value: 'LEFT SEMI JOIN', weight: 1 }, + { value: 'OUTER JOIN', weight: 1 }, + { value: 'RIGHT ANTI JOIN', weight: 1 }, + { value: 'RIGHT INNER JOIN', weight: 1 }, + { value: 'RIGHT SEMI JOIN', weight: 1 }, + { value: 'SEMI JOIN', weight: 1 } + ]); + } else { + keywords.push({ value: 'INNER JOIN', weight: 1 }); + } + parser.suggestKeywords(keywords); + } + | FromClause OptionalSelectConditions_EDIT OptionalJoins + { + // A couple of things are going on here: + // - If there are no SelectConditions (WHERE, GROUP BY, etc.) we should suggest complete join options + // - If there's an OptionalJoin at the end, i.e. 'SELECT * FROM foo | JOIN ...' we should suggest + // different join types + // - The FromClause could end with a valueExpression, in which case we should suggest keywords like '=' + // or 'AND' based on type + + if (!$2) { + parser.addClauseLocation('whereClause', @1); + parser.addClauseLocation('limitClause', @1); + return; + } + parser.addClauseLocation('whereClause', @1, $2.whereClauseLocation); + parser.addClauseLocation('limitClause', $2.limitClausePreceding || @1, $2.limitClauseLocation); + var keywords = []; + + if ($2.suggestColRefKeywords) { + parser.suggestColRefKeywords($2.suggestColRefKeywords); + parser.addColRefIfExists($2); + } + + if ($2.suggestKeywords && $2.suggestKeywords.length) { + keywords = keywords.concat(parser.createWeightedKeywords($2.suggestKeywords, 2)); + } + + if ($2.cursorAtEnd) { + keywords.push({ value: 'UNION', weight: 2.11 }); + } + parser.suggestKeywords(keywords); + } + ; + +OptionalJoins + : + | Joins + | Joins_INVALID + ; + +FromClause + : 'FROM' TableReferenceList OptionalLateralViews + { + if (parser.isHive()) { + $$ = { tableReferenceList : $2, suggestKeywords: ['LATERAL VIEW'] } + } else { + $$ = { tableReferenceList : $2 } + } + if (parser.isHive() && $3) { + parser.yy.lateralViews = $3.lateralViews; + $$.hasLateralViews = true; + if ($3.suggestKeywords) { + $$.suggestKeywords = $$.suggestKeywords.concat($3.suggestKeywords); + } + } + } + ; + +FromClause_EDIT + : 'FROM' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + | 'FROM' TableReferenceList_EDIT OptionalLateralViews + { + if ($3) { + parser.yy.lateralViews = $3.lateralViews; + } + } + | 'FROM' TableReferenceList OptionalLateralViews_EDIT + ; + +OptionalSelectConditions + : OptionalWhereClause OptionalGroupByClause OptionalHavingClause OptionalWindowClause OptionalOrderByClause OptionalClusterOrDistributeBy OptionalLimitClause OptionalOffsetClause + { + var keywords = parser.getKeywordsForOptionalsLR( + [$1, $2, $3, $4, $5, $6, $6, $7, $8], + [{ value: 'WHERE', weight: 9 }, { value: 'GROUP BY', weight: 8 }, { value: 'HAVING', weight: 7 }, { value: 'WINDOW', weight: 6 }, { value: 'ORDER BY', weight: 5 }, [{ value: 'CLUSTER BY', weight: 4 }, { value: 'DISTRIBUTE BY', weight: 4 }], { value: 'SORT BY', weight: 4 }, { value: 'LIMIT', weight: 3 }, { value: 'OFFSET', weight: 2 }], + [true, true, true, parser.isHive(), true, parser.isHive(), parser.isHive() && !$5, true, parser.isImpala()]); + + if (keywords.length > 0) { + $$ = { suggestKeywords: keywords, empty: !$1 && !$2 && !$3 && !$4 && !$5 && !$6 && !$7 && !$8 }; + } else { + $$ = {}; + } + + $$.whereClauseLocation = $1 ? @1 : undefined; + $$.limitClausePreceding = parser.firstDefined($6, @6, $5, @5, $4, @4, $3, @3, $2, @2, $1, @1); + $$.limitClauseLocation = $7 ? @7 : undefined; + + if (!$1 && !$2 && !$3 && !$4 && !$5 && !$6 && !$7 && !$8) { + $$.suggestFilters = { prefix: 'WHERE', tablePrimaries: parser.yy.latestTablePrimaries.concat() }; + } + if (!$2 && !$3 && !$4 && !$5 && !$6 && !$7 && !$8) { + $$.suggestGroupBys = { prefix: 'GROUP BY', tablePrimaries: parser.yy.latestTablePrimaries.concat() }; + } + if (!$5 && !$6 && !$7 && !$8) { + $$.suggestOrderBys = { prefix: 'ORDER BY', tablePrimaries: parser.yy.latestTablePrimaries.concat() }; + } + } + ; + +OptionalSelectConditions_EDIT + : WhereClause_EDIT OptionalGroupByClause OptionalHavingClause OptionalWindowClause OptionalOrderByClause OptionalClusterOrDistributeBy OptionalLimitClause OptionalOffsetClause + { + if (parser.yy.result.suggestColumns) { + parser.yy.result.suggestColumns.source = 'where'; + } + } + | OptionalWhereClause GroupByClause_EDIT OptionalHavingClause OptionalWindowClause OptionalOrderByClause OptionalClusterOrDistributeBy OptionalLimitClause OptionalOffsetClause + { + if (parser.yy.result.suggestColumns) { + parser.yy.result.suggestColumns.source = 'group by'; + } + } + | OptionalWhereClause OptionalGroupByClause HavingClause_EDIT OptionalWindowClause OptionalOrderByClause OptionalClusterOrDistributeBy OptionalLimitClause OptionalOffsetClause + | OptionalWhereClause OptionalGroupByClause OptionalHavingClause WindowClause_EDIT OptionalOrderByClause OptionalClusterOrDistributeBy OptionalLimitClause OptionalOffsetClause + | OptionalWhereClause OptionalGroupByClause OptionalHavingClause OptionalWindowClause OrderByClause_EDIT OptionalClusterOrDistributeBy OptionalLimitClause OptionalOffsetClause + { + if (parser.yy.result.suggestColumns) { + parser.yy.result.suggestColumns.source = 'order by'; + } + } + | OptionalWhereClause OptionalGroupByClause OptionalHavingClause OptionalWindowClause OptionalOrderByClause ClusterOrDistributeBy_EDIT OptionalLimitClause OptionalOffsetClause + | OptionalWhereClause OptionalGroupByClause OptionalHavingClause OptionalWindowClause OptionalOrderByClause OptionalClusterOrDistributeBy LimitClause_EDIT OptionalOffsetClause + | OptionalWhereClause OptionalGroupByClause OptionalHavingClause OptionalWindowClause OptionalOrderByClause OptionalClusterOrDistributeBy OptionalLimitClause OffsetClause_EDIT + ; + +OptionalSelectConditions_EDIT + : WhereClause 'CURSOR' OptionalGroupByClause OptionalHavingClause OptionalWindowClause OptionalOrderByClause OptionalClusterOrDistributeBy OptionalLimitClause OptionalOffsetClause + { + var keywords = parser.getKeywordsForOptionalsLR( + [$3, $4, $5, $6, $7, $7, $8, $9], + [{ value: 'GROUP BY', weight: 8 }, { value: 'HAVING', weight: 7 }, { value: 'WINDOW', weight: 6 }, { value: 'ORDER BY', weight: 5 }, [{ value: 'CLUSTER BY', weight: 4 }, { value: 'DISTRIBUTE BY', weight: 4 }], { value: 'SORT BY', weight: 4 }, { value: 'LIMIT', weight: 3 }, { value: 'OFFSET', weight: 2 }], + [true, true, parser.isHive(), true, parser.isHive(), parser.isHive() && !$6, true, parser.isImpala()]); + if ($1.suggestKeywords) { + keywords = keywords.concat(parser.createWeightedKeywords($1.suggestKeywords, 1)); + } + $$ = parser.getValueExpressionKeywords($1, keywords); + $$.cursorAtEnd = !$3 && !$4 && !$5 && !$6 && !$7 && !$8 && !$9; + if ($1.columnReference) { + $$.columnReference = $1.columnReference; + } + if (!$3) { + parser.suggestGroupBys({ prefix: 'GROUP BY', tablePrimaries: parser.yy.latestTablePrimaries.concat() }); + } + if (!$3 && !$4 && !$5 && !$6) { + parser.suggestOrderBys({ prefix: 'ORDER BY', tablePrimaries: parser.yy.latestTablePrimaries.concat() }); + } + $$.whereClauseLocation = $1 ? @1 : undefined; + $$.limitClausePreceding = parser.firstDefined($7, @7, $6, @6, $5, @5, $4, @4, $3, @3, $1, @1); + $$.limitClauseLocation = $8 ? @8 : undefined; + } + | OptionalWhereClause GroupByClause 'CURSOR' OptionalHavingClause OptionalWindowClause OptionalOrderByClause OptionalClusterOrDistributeBy OptionalLimitClause OptionalOffsetClause + { + var keywords = parser.getKeywordsForOptionalsLR( + [$4, $5, $6, $7, $7, $8, $9], + [{ value: 'HAVING', weight: 7 }, { value: 'WINDOW', weight: 6 }, { value: 'ORDER BY', weight: 5 }, [{ value: 'CLUSTER BY', weight: 4 }, { value: 'DISTRIBUTE BY', weight: 4 }], { value: 'SORT BY', weight: 4 }, { value: 'LIMIT', weight: 3 }, { value: 'OFFSET', weight: 2 }], + [true, parser.isHive(), true, parser.isHive(), parser.isHive() && !$6, true, parser.isImpala()]); + if ($2.suggestKeywords) { + keywords = keywords.concat(parser.createWeightedKeywords($2.suggestKeywords, 8)); + } + if ($2.valueExpression) { + $$ = parser.getValueExpressionKeywords($2.valueExpression, keywords); + if ($2.valueExpression.columnReference) { + $$.columnReference = $2.valueExpression.columnReference; + } + } else { + $$ = { suggestKeywords: keywords }; + } + $$.cursorAtEnd = !$4 && !$5 && !$6 && !$7 && !$8 && !$9; + if (!$4 && !$5 && !$6) { + parser.suggestOrderBys({ prefix: 'ORDER BY', tablePrimaries: parser.yy.latestTablePrimaries.concat() }); + } + $$.whereClauseLocation = $1 ? @1 : undefined; + $$.limitClausePreceding = parser.firstDefined($7, @7, $6, @6, $5, @5, $4, @4, $2, @2); + $$.limitClauseLocation = $8 ? @8 : undefined; + } + | OptionalWhereClause OptionalGroupByClause HavingClause 'CURSOR' OptionalWindowClause OptionalOrderByClause OptionalClusterOrDistributeBy OptionalLimitClause OptionalOffsetClause + { + var keywords = parser.getKeywordsForOptionalsLR( + [$5, $6, $7, $7, $8, $9], + [{ value: 'WINDOW', weight: 6 }, { value: 'ORDER BY', weight: 5 }, [{ value: 'CLUSTER BY', weight: 4 }, { value: 'DISTRIBUTE BY', weight: 4 }], { value: 'SORT BY', weight: 4 }, { value: 'LIMIT', weight: 3 }, { value: 'OFFSET', weight: 2 }], + [parser.isHive(), true, parser.isHive(), parser.isHive() && !$6, true, parser.isImpala()]); + $$ = { suggestKeywords: keywords, cursorAtEnd: !$5 && !$6 && !$7 && !$8 && !$9 }; + if (!$5 && !$6) { + parser.suggestOrderBys({ prefix: 'ORDER BY', tablePrimaries: parser.yy.latestTablePrimaries.concat() }); + } + $$.whereClauseLocation = $1 ? @1 : undefined; + $$.limitClausePreceding = parser.firstDefined($7, @7, $6, @6, $5, @5, $3, @3); + $$.limitClauseLocation = $8 ? @8 : undefined; + } + | OptionalWhereClause OptionalGroupByClause OptionalHavingClause WindowClause 'CURSOR' OptionalOrderByClause OptionalClusterOrDistributeBy OptionalLimitClause OptionalOffsetClause + { + var keywords = parser.getKeywordsForOptionalsLR([$6, $7, $8, $9], [{ value: 'ORDER BY', weight: 5 }, [{ value: 'CLUSTER BY', weight: 4 }, { value: 'DISTRIBUTE BY', weight: 4 }, { value: 'SORT BY', weight: 4 }], { value: 'LIMIT', weight: 3 }, { value: 'OFFSET', weight: 2 }], [true, parser.isHive(), true, parser.isImpala()]); + $$ = { suggestKeywords: keywords, cursorAtEnd: !$6 && !$7 && !$8 && !$9 }; + if (!$6) { + parser.suggestOrderBys({ prefix: 'ORDER BY', tablePrimaries: parser.yy.latestTablePrimaries.concat() }); + } + $$.whereClauseLocation = $1 ? @1 : undefined; + $$.limitClausePreceding = parser.firstDefined($7, @7, $6, @6, $4, @4); + $$.limitClauseLocation = $8 ? @8 : undefined; + } + | OptionalWhereClause OptionalGroupByClause OptionalHavingClause OptionalWindowClause OrderByClause 'CURSOR' OptionalClusterOrDistributeBy OptionalLimitClause OptionalOffsetClause + { + var keywords = parser.getKeywordsForOptionalsLR([$7, $8, $9], [[{ value: 'CLUSTER BY', weight: 4 }, { value: 'DISTRIBUTE BY', weight: 4 }], { value: 'LIMIT', weight: 3 }, { value: 'OFFSET', weight: 2 }], [parser.isHive(), true, parser.isImpala()]); + if ($5.suggestKeywords) { + keywords = keywords.concat(parser.createWeightedKeywords($5.suggestKeywords, 5)); + } + $$ = { suggestKeywords: keywords, cursorAtEnd: !$7 && !$8 && !$9 }; + $$.whereClauseLocation = $1 ? @1 : undefined; + $$.limitClausePreceding = parser.firstDefined($7, @7, $5, @5); + $$.limitClauseLocation = $8 ? @8 : undefined; + } + | OptionalWhereClause OptionalGroupByClause OptionalHavingClause OptionalWindowClause OptionalOrderByClause ClusterOrDistributeBy 'CURSOR' OptionalLimitClause OptionalOffsetClause + { + var keywords = parser.getKeywordsForOptionalsLR([$8, $9], [{ value: 'LIMIT', weight: 3 }, { value: 'OFFSET', weight: 2 }], [true, parser.isImpala()]); + if ($6.suggestKeywords) { + keywords = keywords.concat(parser.createWeightedKeywords($6.suggestKeywords, 4)); + } + $$ = { suggestKeywords: keywords, cursorAtEnd: !$8 && !$9 }; + $$.whereClauseLocation = $1 ? @1 : undefined; + $$.limitClausePreceding = @6; + $$.limitClauseLocation = $8 ? @8 : undefined; + } + | OptionalWhereClause OptionalGroupByClause OptionalHavingClause OptionalWindowClause OptionalOrderByClause OptionalClusterOrDistributeBy LimitClause 'CURSOR' OptionalOffsetClause + { + var keywords = parser.getKeywordsForOptionalsLR([$9], [{ value: 'OFFSET', weight: 2 }], [parser.isImpala()]); + $$ = { suggestKeywords: keywords, cursorAtEnd: !$9 }; + $$.whereClauseLocation = $1 ? @1 : undefined; + $$.limitClausePreceding = parser.firstDefined($6, @6, $5, @5, $4, @4, $3, @3, $2, @2, $1, @1); + $$.limitClauseLocation = $7 ? @7 : undefined; + } + ; + +OptionalWhereClause + : + | WhereClause + ; + +WhereClause + : 'WHERE' SearchCondition -> $2 + ; + +WhereClause_EDIT + : 'WHERE' SearchCondition_EDIT + { + if ($2.suggestFilters) { + parser.suggestFilters({ tablePrimaries: parser.yy.latestTablePrimaries.concat() }); + } + } + | 'WHERE' 'CURSOR' + { + parser.suggestFunctions(); + parser.suggestColumns(); + parser.suggestKeywords(['EXISTS', 'NOT EXISTS']); + parser.suggestFilters({ tablePrimaries: parser.yy.latestTablePrimaries.concat() }); + } + ; + +OptionalGroupByClause + : + | GroupByClause + ; + +GroupByClause + : AnyGroup 'BY' GroupByColumnList OptionalHiveGroupingSetsCubeOrRollup + { + $$ = { valueExpression: $4 ? false : $3 }; + if (!$4 && parser.isHive()) { + $$.suggestKeywords = ['GROUPING SETS', 'WITH CUBE', 'WITH ROLLUP']; + } + } + ; + +GroupByClause_EDIT + : AnyGroup 'BY' GroupByColumnList_EDIT OptionalHiveGroupingSetsCubeOrRollup + { + parser.suggestSelectListAliases(); + } + | AnyGroup 'BY' 'CURSOR' OptionalHiveGroupingSetsCubeOrRollup + { + parser.valueExpressionSuggest(); + parser.suggestSelectListAliases(); + parser.suggestGroupBys({ tablePrimaries: parser.yy.latestTablePrimaries.concat() }); + } + | AnyGroup 'CURSOR' + { + parser.suggestKeywords(['BY']); + parser.suggestGroupBys({ prefix: 'BY', tablePrimaries: parser.yy.latestTablePrimaries.concat() }); + } + | AnyGroup 'BY' GroupByColumnList OptionalHiveGroupingSetsCubeOrRollup_EDIT + ; + +OptionalHiveGroupingSetsCubeOrRollup + : + | HiveGroupingSets + | 'WITH' 'CUBE' + | 'WITH' 'ROLLUP' + ; + +OptionalHiveGroupingSetsCubeOrRollup_EDIT + : HiveGroupingSets_EDIT + | 'WITH' 'CURSOR' + { + if (parser.isHive()) { + parser.suggestKeywords(['CUBE', 'ROLLUP']); + } + } + ; + +HiveGroupingSets + : 'GROUPING' 'SETS' '(' ColumnGroupingSets ')' + ; + +HiveGroupingSets_EDIT + : 'GROUPING' 'CURSOR' + { + parser.suggestKeywords(['SETS']); + } + | 'GROUPING' 'SETS' '(' ColumnGroupingSets_EDIT RightParenthesisOrError + ; + +ColumnGroupingSets + : + | ColumnReference + | ColumnGroupingSets ',' ColumnGroupingSets + | '(' ColumnGroupingSets ')' + ; + +ColumnGroupingSets_EDIT + : ColumnGroupingSet_EDIT + | ColumnGroupingSet_EDIT ',' ColumnGroupingSets + | ColumnGroupingSets ',' ColumnGroupingSet_EDIT + | ColumnGroupingSets ',' ColumnGroupingSet_EDIT ',' ColumnGroupingSets + | '(' ColumnGroupingSets_EDIT RightParenthesisOrError + ; + +ColumnGroupingSet_EDIT + : AnyCursor + { + parser.suggestColumns(); + } + | ColumnReference_EDIT + ; + +GroupByColumnList + : ValueExpression + | GroupByColumnList ',' ValueExpression -> $3 + ; + +GroupByColumnList_EDIT + : ValueExpression_EDIT + | 'CURSOR' ValueExpression + { + parser.valueExpressionSuggest(); + } + | 'CURSOR' ',' GroupByColumnList + { + parser.valueExpressionSuggest(); + } + | ValueExpression_EDIT ',' GroupByColumnList + | GroupByColumnList ',' GroupByColumnListPartTwo_EDIT + | GroupByColumnList ',' GroupByColumnListPartTwo_EDIT ',' + | GroupByColumnList ',' GroupByColumnListPartTwo_EDIT ',' GroupByColumnList + ; + +GroupByColumnListPartTwo_EDIT + : ValueExpression_EDIT + | AnyCursor ValueExpression + { + parser.valueExpressionSuggest(); + } + | AnyCursor + { + parser.valueExpressionSuggest(); + } + ; + +OptionalOrderByClause + : + | OrderByClause + ; + +OrderByClause + : 'ORDER' 'BY' OrderByColumnList -> $3 + ; + +OrderByClause_EDIT + : 'ORDER' 'BY' OrderByColumnList_EDIT + { + if ($3.emptyOrderBy) { + parser.suggestOrderBys({ tablePrimaries: parser.yy.latestTablePrimaries.concat() }); + } + } + | 'ORDER' 'CURSOR' + { + parser.suggestKeywords(['BY']); + parser.suggestOrderBys({ prefix: 'BY', tablePrimaries: parser.yy.latestTablePrimaries.concat() }); + } + ; + +OrderByColumnList + : OrderByIdentifier + | OrderByColumnList ',' OrderByIdentifier -> $3 + ; + +OrderByColumnList_EDIT + : OrderByIdentifier_EDIT + | 'CURSOR' OrderByIdentifier + { + $$ = { emptyOrderBy: false } + parser.valueExpressionSuggest(); + parser.suggestAnalyticFunctions(); + parser.suggestSelectListAliases(); + } + | OrderByColumnList ',' OrderByIdentifier_EDIT -> { emptyOrderBy: false } + | OrderByColumnList ',' OrderByIdentifier_EDIT ',' -> { emptyOrderBy: false } + | OrderByColumnList ',' OrderByIdentifier_EDIT ',' OrderByColumnList -> { emptyOrderBy: false } + ; + +OrderByIdentifier + : ValueExpression OptionalAscOrDesc OptionalImpalaNullsFirstOrLast -> parser.mergeSuggestKeywords($2, $3) + ; + +OrderByIdentifier_EDIT + : ValueExpression_EDIT OptionalAscOrDesc OptionalImpalaNullsFirstOrLast + { + parser.suggestSelectListAliases(); + } + | ValueExpression OptionalAscOrDesc OptionalImpalaNullsFirstOrLast_EDIT + | AnyCursor OptionalAscOrDesc OptionalImpalaNullsFirstOrLast + { + $$ = { emptyOrderBy: true } + parser.valueExpressionSuggest(); + parser.suggestAnalyticFunctions(); + parser.suggestSelectListAliases(); + } + ; + +OptionalAscOrDesc + : + { + $$ = { suggestKeywords: ['ASC', 'DESC'] }; + } + | 'ASC' + | 'ASC' + | 'DESC' + | 'DESC' + ; + +OptionalImpalaNullsFirstOrLast + : + { + if (parser.isImpala()) { + $$ = { suggestKeywords: ['NULLS FIRST', 'NULLS LAST'] }; + } else { + $$ = {}; + } + } + | 'NULLS' 'FIRST' + | 'NULLS' 'LAST' + ; + +OptionalImpalaNullsFirstOrLast_EDIT + : 'NULLS' 'CURSOR' + { + parser.suggestKeywords(['FIRST', 'LAST']); + } + ; + +OptionalClusterOrDistributeBy + : + | ClusterOrDistributeBy + ; + +ClusterOrDistributeBy + : ClusterByClause + | DistributeByClause -> { suggestKeywords: ['SORT BY'] } + | DistributeByClause SortByClause + | SortByClause + ; + +ClusterOrDistributeBy_EDIT + : ClusterByClause_EDIT + | DistributeByClause_EDIT + | DistributeByClause SortByClause_EDIT + | DistributeByClause_EDIT SortByClause + | SortByClause_EDIT + ; + +ClusterByClause + : 'CLUSTER' 'BY' ColumnList + ; + +ClusterByClause_EDIT + : 'CLUSTER' 'CURSOR' + { + suggestKeywords: ['BY']; + } + | 'CLUSTER' 'BY' 'CURSOR' + { + parser.suggestColumns(); + parser.suggestSelectListAliases(); + } + | 'CLUSTER' 'BY' ColumnList_EDIT + { + parser.suggestSelectListAliases(); + } + ; + +DistributeByClause + : 'DISTRIBUTE' 'BY' ColumnList + ; + +DistributeByClause_EDIT + : 'DISTRIBUTE' 'CURSOR' + { + suggestKeywords: ['BY']; + } + | 'DISTRIBUTE' 'BY' 'CURSOR' + { + parser.suggestColumns(); + parser.suggestSelectListAliases(); + } + | 'DISTRIBUTE' 'BY' ColumnList_EDIT + { + parser.suggestSelectListAliases(); + } + ; + +SortByClause + : 'SORT' 'BY' SortByList -> $3 + ; + +SortByClause_EDIT + : 'SORT' 'CURSOR' + { + suggestKeywords: ['BY']; + } + | 'SORT' 'BY' SortByList_EDIT + { + parser.suggestSelectListAliases(); + } + ; + +SortByList + : SortByIdentifier + | SortByList ',' SortByIdentifier -> $3 + ; + +SortByList_EDIT + : SortByIdentifier_EDIT + | SortByIdentifier_EDIT ',' SortByList + | SortByList ',' SortByIdentifier_EDIT + | SortByList ',' SortByIdentifier_EDIT ',' SortByList + ; + +SortByIdentifier + : ColumnIdentifier OptionalAscOrDesc + { + parser.addColumnLocation($1.location, [ $1.identifier ]); + $$ = $2; + } + ; + +SortByIdentifier_EDIT + : ColumnIdentifier_EDIT OptionalAscOrDesc + | AnyCursor OptionalAscOrDesc + { + parser.suggestColumns(); + } + ; + +OptionalLimitClause + : + | LimitClause + ; + +LimitClause + : 'LIMIT' UnsignedNumericLiteral + | 'LIMIT' UnsignedNumericLiteral ',' UnsignedNumericLiteral + | 'LIMIT' 'VARIABLE_REFERENCE' + | 'LIMIT' 'VARIABLE_REFERENCE' ',' 'VARIABLE_REFERENCE' + | 'LIMIT' ValueExpression + ; + +LimitClause_EDIT + : 'LIMIT' 'CURSOR' + | 'LIMIT' 'CURSOR' + { + parser.suggestFunctions({ types: ['BIGINT'] }); + } + | 'LIMIT' ValueExpression_EDIT + { + delete parser.yy.result.suggestColumns; + } + ; + +OptionalOffsetClause + : + | OffsetClause + ; + +OffsetClause + : 'OFFSET' ValueExpression + ; + +OffsetClause_EDIT + : 'OFFSET' 'CURSOR' + { + parser.suggestFunctions({ types: ['BIGINT'] }); + } + | 'OFFSET' ValueExpression_EDIT + { + delete parser.yy.result.suggestColumns; + } + ; + +SearchCondition + : ValueExpression + ; + +SearchCondition_EDIT + : ValueExpression_EDIT + ; + +ValueExpression + : NonParenthesizedValueExpressionPrimary + ; + +ValueExpression_EDIT + : NonParenthesizedValueExpressionPrimary_EDIT + ; + +ValueExpression_EDIT + : ValueExpression 'NOT' 'CURSOR' + { + if (parser.isImpala()) { + parser.suggestKeywords(['BETWEEN', 'EXISTS', 'IN', 'ILIKE', 'IREGEXP', 'LIKE', 'REGEXP', 'RLIKE']); + } else { + parser.suggestKeywords(['BETWEEN', 'EXISTS', 'IN', 'LIKE', 'REGEXP', 'RLIKE']); + } + $$ = { types: [ 'BOOLEAN' ] }; + } + ; + +ValueExpressionList + : ValueExpression + { + $1.position = 1; + } + | ValueExpressionList ',' ValueExpression + { + $3.position = $1.position + 1; + $$ = $3; + } + ; + +ValueExpressionList_EDIT + : ValueExpression_EDIT + { + $1.position = 1; + } + | ValueExpressionList ',' ValueExpression_EDIT + { + $1.position += 1; + } + | ValueExpression_EDIT ',' ValueExpressionList + { + $1.position = 1; + } + | ValueExpressionList ',' ValueExpression_EDIT ',' ValueExpressionList + { + $1.position += 1; + } + | ValueExpressionList ',' AnyCursor + { + parser.valueExpressionSuggest(); + $1.position += 1; + } + | ValueExpressionList ',' AnyCursor ',' ValueExpressionList + { + parser.valueExpressionSuggest(); + $1.position += 1; + } + | ValueExpressionList 'CURSOR' ',' ValueExpressionList + { + parser.suggestValueExpressionKeywords($1); + } + | AnyCursor ',' ValueExpressionList + { + parser.valueExpressionSuggest(); + $$ = { cursorAtStart : true, position: 1 }; + } + | AnyCursor ',' + { + parser.valueExpressionSuggest(); + $$ = { cursorAtStart : true, position: 1 }; + } + | ',' AnyCursor + { + parser.valueExpressionSuggest(); + $$ = { position: 2 }; + } + | ',' AnyCursor ',' ValueExpressionList + { + parser.valueExpressionSuggest(); + $$ = { position: 2 }; + } + ; + +InValueList + : NonParenthesizedValueExpressionPrimary + | InValueList ',' NonParenthesizedValueExpressionPrimary + ; + +NonParenthesizedValueExpressionPrimary + : UnsignedValueSpecification + | ColumnOrArbitraryFunctionRef -> { types: ['COLREF'], columnReference: $1.chain } + | ColumnOrArbitraryFunctionRef ArbitraryFunctionRightPart + { + // We need to handle arbitrary UDFs here instead of inside UserDefinedFunction or there will be a conflict + // with columnReference for functions like: db.udf(foo) + var fn = $1.chain[$1.chain.length - 1].name.toLowerCase(); + $1.lastLoc.type = 'function'; + $1.lastLoc.function = fn; + $1.lastLoc.location = { + first_line: $1.lastLoc.location.first_line, + last_line: $1.lastLoc.location.last_line, + first_column: $1.lastLoc.location.first_column, + last_column: $1.lastLoc.location.last_column - 1 + } + if ($1.lastLoc !== $1.firstLoc) { + $1.firstLoc.type = 'database'; + } else { + delete $1.lastLoc.identifierChain; + } + if ($2.expression) { + $$ = { function: fn, expression: $2.expression, types: parser.findReturnTypes(fn) } + } else { + $$ = { function: fn, types: parser.findReturnTypes(fn) } + } + } + | ArbitraryFunctionName ArbitraryFunctionRightPart + { + parser.addFunctionLocation(@1, $1); + if ($2.expression) { + $$ = { function: $1, expression: $2.expression, types: parser.findReturnTypes($1) } + } else { + $$ = { function: $1, types: parser.findReturnTypes($1) } + } + } + | UserDefinedFunction + | 'NULL' -> { types: [ 'NULL' ] } + | ImpalaInterval -> { types: [ 'TIMESTAMP' ] } + ; + +NonParenthesizedValueExpressionPrimary_EDIT + : UnsignedValueSpecification_EDIT + | ColumnOrArbitraryFunctionRef_EDIT + { + if ($1.suggestKeywords) { + $$ = { types: ['COLREF'], columnReference: $1, suggestKeywords: $1.suggestKeywords }; + } else { + $$ = { types: ['COLREF'], columnReference: $1 }; + } + } + | ColumnOrArbitraryFunctionRef ArbitraryFunctionRightPart_EDIT + { + var fn = $1.chain[$1.chain.length - 1].name.toLowerCase(); + $1.lastLoc.type = 'function'; + $1.lastLoc.function = fn; + $1.lastLoc.location = { + first_line: $1.lastLoc.location.first_line, + last_line: $1.lastLoc.location.last_line, + first_column: $1.lastLoc.location.first_column, + last_column: $1.lastLoc.location.last_column - 1 + } + if ($1.lastLoc !== $1.firstLoc) { + $1.firstLoc.type = 'database'; + } else { + delete $1.lastLoc.identifierChain; + } + if ($2.position) { + parser.applyArgumentTypesToSuggestions(fn, $2.position); + } + $$ = { types: parser.findReturnTypes(fn) }; + } + | ArbitraryFunctionName ArbitraryFunctionRightPart_EDIT + { + parser.addFunctionLocation(@1, $1); + if ($2.position) { + parser.applyArgumentTypesToSuggestions($1, $2.position); + } + $$ = { types: parser.findReturnTypes($1) }; + } + | UserDefinedFunction_EDIT + | ImpalaInterval_EDIT + ; + +ColumnOrArbitraryFunctionRef + : BasicIdentifierChain + { + var lastLoc = parser.yy.locations[parser.yy.locations.length - 1]; + if (lastLoc.type !== 'variable') { + lastLoc.type = 'column'; + } + // used for function references with db prefix + var firstLoc = parser.yy.locations[parser.yy.locations.length - $1.length]; + $$ = { chain: $1, firstLoc: firstLoc, lastLoc: lastLoc } + } + | BasicIdentifierChain AnyDot '*' + { + parser.addAsteriskLocation(@3, $1.concat({ asterisk: true })); + } + ; + +ColumnOrArbitraryFunctionRef_EDIT + : BasicIdentifierChain_EDIT + ; + +ImpalaInterval + : 'INTERVAL' SignedInteger RegularIdentifier + ; + +ImpalaInterval_EDIT + : 'INTERVAL' SignedInteger 'CURSOR' + { + parser.suggestKeywords(['DAYS', 'HOURS', 'MICROSECONDS', 'MILLISECONDS', 'MINUTES', 'MONTHS', 'NANOSECONDS', 'SECONDS', 'WEEKS', 'YEARS']); + } + ; + +SignedInteger + : UnsignedNumericLiteral + | '-' UnsignedNumericLiteral + | '+' UnsignedNumericLiteral + ; + +UnsignedValueSpecification + : UnsignedLiteral + ; + +UnsignedValueSpecification_EDIT + : UnsignedLiteral_EDIT + { + parser.suggestValues($1); + } + ; + +UnsignedLiteral + : UnsignedNumericLiteral -> { types: [ 'NUMBER' ] } + | GeneralLiteral + ; + +UnsignedLiteral_EDIT + : GeneralLiteral_EDIT + ; + +UnsignedNumericLiteral + : ExactNumericLiteral + | ApproximateNumericLiteral + ; + +ExactNumericLiteral + : 'UNSIGNED_INTEGER' + | 'UNSIGNED_INTEGER' AnyDot -> $1 + $2 + | 'UNSIGNED_INTEGER' AnyDot 'UNSIGNED_INTEGER' -> $1 + $2 + $3 + | AnyDot 'UNSIGNED_INTEGER' -> $1 + $2 + ; + +ApproximateNumericLiteral + : UNSIGNED_INTEGER_E 'UNSIGNED_INTEGER' + | AnyDot UNSIGNED_INTEGER_E 'UNSIGNED_INTEGER' + | 'UNSIGNED_INTEGER' AnyDot UNSIGNED_INTEGER_E 'UNSIGNED_INTEGER' + ; + +GeneralLiteral + : SingleQuotedValue + { + if (/\$\{[^}]*\}/.test($1)) { + parser.addVariableLocation(@1, $1); + $$ = { types: [ 'STRING' ], columnReference: [{ name: $1 }] } + } else { + $$ = { types: [ 'STRING' ] } + } + } + | DoubleQuotedValue + { + if (/\$\{[^}]*\}/.test($1)) { + parser.addVariableLocation(@1, $1); + $$ = { types: [ 'STRING' ], columnReference: [{ name: $1 }] } + } else { + $$ = { types: [ 'STRING' ] } + } + } + | TruthValue -> { types: [ 'BOOLEAN' ] } + ; + +GeneralLiteral_EDIT + : SingleQuotedValue_EDIT + { + $$ = { partialQuote: '\'', missingEndQuote: parser.yy.missingEndQuote }; + } + | DoubleQuotedValue_EDIT + { + $$ = { partialQuote: '"', missingEndQuote: parser.yy.missingEndQuote }; + } + ; + +TruthValue + : 'TRUE' + | 'FALSE' + ; + +OptionalNot + : + | 'NOT' + ; + +SelectSpecification + : ValueExpression OptionalCorrelationName + { + if ($2) { + parser.addColumnAliasLocation($2.location, $2.alias, @1); + $$ = { valueExpression: $1, alias: $2.alias }; + if (!parser.yy.selectListAliases) { + parser.yy.selectListAliases = []; + } + parser.yy.selectListAliases.push({ name: $2.alias, types: $1.types || ['T'] }); + } else { + $$ = { valueExpression: $1 } + } + } + | '*' + { + parser.addAsteriskLocation(@1, [{ asterisk: true }]); + $$ = { asterisk: true } + } + ; + +SelectSpecification_EDIT + : ValueExpression_EDIT OptionalCorrelationName + { + if ($2) { + parser.addColumnAliasLocation($2.location, $2.alias, @1); + } + } + + | AnyCursor AnyAs RegularOrBacktickedIdentifier + { + parser.suggestFunctions(); + parser.suggestColumns(); + parser.addColumnAliasLocation(@3, $3, @1); + $$ = { suggestAggregateFunctions: true }; + } + | ValueExpression OptionalCorrelationName_EDIT -> $2 + ; + +SelectList + : SelectSpecification -> [ $1 ] + | SelectList ',' SelectSpecification + { + $1.push($3); + } + ; + +SelectList_EDIT + : SelectSpecification_EDIT + | 'CURSOR' SelectList + { + $$ = { cursorAtStart : true, suggestFunctions: true, suggestColumns: true, suggestAggregateFunctions: true }; + } + | 'CURSOR' ',' SelectList + { + $$ = { cursorAtStart : true, suggestFunctions: true, suggestColumns: true, suggestAggregateFunctions: true }; + } + | SelectSpecification_EDIT ',' SelectList + | SelectList 'CURSOR' SelectList + { + parser.checkForSelectListKeywords($1); + } + | SelectList 'CURSOR' ',' SelectList + { + parser.checkForSelectListKeywords($1); + } + | SelectList ',' AnyCursor + { + $$ = { suggestKeywords: parser.getSelectListKeywords(), suggestTables: true, suggestDatabases: true, suggestFunctions: true, suggestColumns: true, suggestAggregateFunctions: true }; + } + | SelectList ',' SelectSpecification_EDIT -> $3 + | SelectList ',' AnyCursor SelectList + { + $$ = { suggestKeywords: parser.getSelectListKeywords(), suggestFunctions: true, suggestColumns: true, suggestAggregateFunctions: true, }; + } + | SelectList ',' AnyCursor ',' + { + $$ = { suggestKeywords: parser.getSelectListKeywords(), suggestFunctions: true, suggestColumns: true, suggestAggregateFunctions: true, }; + } + | SelectList ',' SelectSpecification_EDIT ',' -> $3 + | SelectList ',' AnyCursor ',' SelectList + { + $$ = { suggestKeywords: parser.getSelectListKeywords(), suggestFunctions: true, suggestColumns: true, suggestAggregateFunctions: true, }; + } + | SelectList ',' SelectSpecification_EDIT ',' SelectList -> $3 + ; + +TableReferenceList + : TableReference + | TableReferenceList ',' TableReference -> $3 + ; + +TableReferenceList_EDIT + : TableReference_EDIT + | TableReference_EDIT ',' TableReference + | TableReferenceList ',' TableReference_EDIT + | TableReferenceList ',' TableReference_EDIT ',' TableReferenceList + | TableReferenceList ',' AnyCursor + { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + ; + +TableReference + : TablePrimaryOrJoinedTable + ; + +TableReference_EDIT + : TablePrimaryOrJoinedTable_EDIT + ; + +TablePrimaryOrJoinedTable + : TablePrimary + { + $$ = $1; + + if (parser.yy.latestTablePrimaries.length > 0) { + var idx = parser.yy.latestTablePrimaries.length - 1; + var tables = []; + do { + var tablePrimary = parser.yy.latestTablePrimaries[idx]; + if (!tablePrimary.subQueryAlias) { + tables.unshift(tablePrimary.alias ? { identifierChain: tablePrimary.identifierChain, alias: tablePrimary.alias } : { identifierChain: tablePrimary.identifierChain }) + } + idx--; + } while (idx >= 0 && tablePrimary.join && !tablePrimary.subQueryAlias) + + if (tables.length > 0) { + $$.suggestJoins = { + prependJoin: true, + tables: tables + }; + } + } + } + | JoinedTable + ; + +TablePrimaryOrJoinedTable_EDIT + : TablePrimary_EDIT + | JoinedTable_EDIT + ; + +JoinedTable + : TablePrimary Joins -> $2 + ; + +JoinedTable_EDIT + : TablePrimary Joins_EDIT + | TablePrimary_EDIT Joins + ; + +Joins + : JoinType OptionalImpalaBroadcastOrShuffle TablePrimary OptionalJoinCondition + { + if ($4 && $4.valueExpression) { + $$ = $4.valueExpression; + } else { + $$ = {}; + } + $$.joinType = $1; + if ($4.noJoinCondition) { + $$.suggestJoinConditions = { prependOn: true, tablePrimaries: parser.yy.latestTablePrimaries.concat() } + } + if ($4.suggestKeywords) { + $$.suggestKeywords = $4.suggestKeywords; + } + if (parser.yy.latestTablePrimaries.length > 0) { + parser.yy.latestTablePrimaries[parser.yy.latestTablePrimaries.length - 1].join = true; + } + } + | Joins JoinType OptionalImpalaBroadcastOrShuffle TablePrimary OptionalJoinCondition + { + if ($5 && $5.valueExpression) { + $$ = $5.valueExpression; + } else { + $$ = {}; + } + $$.joinType = $1; + if ($5.noJoinCondition) { + $$.suggestJoinConditions = { prependOn: true, tablePrimaries: parser.yy.latestTablePrimaries.concat() } + } + if ($5.suggestKeywords) { + $$.suggestKeywords = $5.suggestKeywords; + } + if (parser.yy.latestTablePrimaries.length > 0) { + parser.yy.latestTablePrimaries[parser.yy.latestTablePrimaries.length - 1].join = true; + } + } + ; + +Joins_INVALID + : JoinType OptionalImpalaBroadcastOrShuffle -> { joinType: $1 } + | JoinType OptionalImpalaBroadcastOrShuffle Joins -> { joinType: $1 } + ; + +OptionalImpalaBroadcastOrShuffle + : + | 'BROADCAST' + | 'SHUFFLE' + ; + +Join_EDIT + : JoinType_EDIT OptionalImpalaBroadcastOrShuffle TablePrimary OptionalJoinCondition + { + if ($1.suggestKeywords) { + parser.suggestKeywords($1.suggestKeywords); + } + } + | JoinType_EDIT OptionalImpalaBroadcastOrShuffle + { + if ($1.suggestKeywords) { + parser.suggestKeywords($1.suggestKeywords); + } + } + | JoinType OptionalImpalaBroadcastOrShuffle TablePrimary_EDIT OptionalJoinCondition + | JoinType OptionalImpalaBroadcastOrShuffle TablePrimary JoinCondition_EDIT + | JoinType OptionalImpalaBroadcastOrShuffle 'CURSOR' OptionalJoinCondition + { + if (!$2 && parser.isImpala()) { + parser.suggestKeywords(['[BROADCAST]', '[SHUFFLE]']); + } + if (!$2 && parser.yy.latestTablePrimaries.length > 0) { + var idx = parser.yy.latestTablePrimaries.length - 1; + var tables = []; + do { + var tablePrimary = parser.yy.latestTablePrimaries[idx]; + if (!tablePrimary.subQueryAlias) { + tables.unshift(tablePrimary.alias ? { identifierChain: tablePrimary.identifierChain, alias: tablePrimary.alias } : { identifierChain: tablePrimary.identifierChain }) + } + idx--; + } while (idx >= 0 && tablePrimary.join && !tablePrimary.subQueryAlias) + + if (tables.length > 0) { + parser.suggestJoins({ + prependJoin: false, + joinType: $1, + tables: tables + }) + } + } + parser.suggestTables(); + parser.suggestDatabases({ + appendDot: true + }); + } + ; + +Joins_EDIT + : Join_EDIT + | Join_EDIT Joins + | Joins Join_EDIT + | Joins Join_EDIT Joins + ; + +JoinType + : 'JOIN' -> 'JOIN' + | 'ANTI' 'JOIN' -> 'ANTI JOIN' + | 'CROSS' 'JOIN' -> 'CROSS JOIN' + | 'INNER' 'JOIN' -> 'INNER JOIN' + | 'OUTER' 'JOIN' -> 'OUTER JOIN' + | 'SEMI' 'JOIN' -> 'SEMI JOIN' + | 'FULL' 'JOIN' -> 'FULL JOIN' + | 'FULL' 'OUTER' 'JOIN' -> 'FULL OUTER JOIN' + | 'LEFT' 'JOIN' -> 'LEFT JOIN' + | 'LEFT' 'ANTI' 'JOIN' -> 'LEFT ANTI JOIN' + | 'LEFT' 'INNER' 'JOIN' -> 'LEFT INNER JOIN' + | 'LEFT' 'OUTER' 'JOIN' -> 'LEFT OUTER JOIN' + | 'LEFT' 'SEMI' 'JOIN' -> 'LEFT SEMI JOIN' + | 'RIGHT' 'JOIN' -> 'RIGHT JOIN' + | 'RIGHT' 'ANTI' 'JOIN' -> 'RIGHT ANTI JOIN' + | 'RIGHT' 'INNER' 'JOIN' -> 'RIGHT OUTER JOIN' + | 'RIGHT' 'OUTER' 'JOIN' -> 'RIGHT OUTER JOIN' + | 'RIGHT' 'SEMI' 'JOIN' -> 'RIGHT SEMI JOIN' + ; + +JoinType_EDIT + : 'ANTI' 'CURSOR' -> { suggestKeywords: ['JOIN'] } + | 'CROSS' 'CURSOR' -> { suggestKeywords: ['JOIN'] } + | 'INNER' 'CURSOR' -> { suggestKeywords: ['JOIN'] } + | 'OUTER' 'CURSOR' -> { suggestKeywords: ['JOIN'] } + | 'SEMI' 'CURSOR' -> { suggestKeywords: ['JOIN'] } + | 'FULL' 'OUTER' 'CURSOR' -> { suggestKeywords: ['JOIN'] } + | 'FULL' 'CURSOR' 'JOIN' -> { suggestKeywords: ['OUTER'] } + | 'LEFT' 'ANTI' 'CURSOR' -> { suggestKeywords: ['JOIN'] } + | 'LEFT' 'INNER' 'CURSOR' -> { suggestKeywords: ['JOIN'] } + | 'LEFT' 'OUTER' 'CURSOR' -> { suggestKeywords: ['JOIN'] } + | 'LEFT' 'SEMI' 'CURSOR' -> { suggestKeywords: ['JOIN'] } + | 'LEFT' 'CURSOR' 'JOIN' -> { suggestKeywords: parser.isImpala() ? ['ANTI', 'INNER', 'OUTER', 'SEMI'] : parser.isHive() ? ['OUTER', 'SEMI'] : ['OUTER'] } + | 'RIGHT' 'ANTI' 'CURSOR' -> { suggestKeywords: ['JOIN'] } + | 'RIGHT' 'INNER' 'CURSOR' -> { suggestKeywords: ['JOIN'] } + | 'RIGHT' 'OUTER' 'CURSOR' -> { suggestKeywords: ['JOIN'] } + | 'RIGHT' 'SEMI' 'CURSOR' -> { suggestKeywords: ['JOIN'] } + | 'RIGHT' 'CURSOR' 'JOIN' -> { suggestKeywords: parser.isImpala() ? ['ANTI', 'INNER', 'OUTER', 'SEMI'] : ['OUTER'] } + ; + +OptionalJoinCondition + : -> { noJoinCondition: true, suggestKeywords: parser.isImpala() ? ['ON', 'USING'] : ['ON'] } + | 'ON' ValueExpression -> { valueExpression: $2 } + | 'USING' '(' UsingColList ')' -> {} + ; + +UsingColList + : RegularOrBacktickedIdentifier + | UsingColList ',' RegularOrBacktickedIdentifier + ; + +JoinCondition_EDIT + : 'ON' ValueExpression_EDIT + | 'ON' 'CURSOR' + { + parser.valueExpressionSuggest(); + parser.suggestJoinConditions({ prependOn: false }); + } + ; + +TablePrimary + : TableOrQueryName OptionalHiveTableSample OptionalCorrelationName OptionalImpalaTableSample + { + $$ = { + primary: $1 + } + if ($1.identifierChain) { + if ($3) { + $1.alias = $3.alias + parser.addTableAliasLocation($3.location, $3.alias, $1.identifierChain); + } + parser.addTablePrimary($1); + } + var keywords = []; + if ($4 && $4.suggestKeywords) { + keywords = $4.suggestKeywords; + } else { + // Right-to-left for cursor after TablePrimary + keywords = parser.getKeywordsForOptionalsLR([$4, $3, $2], [{ value: 'TABLESAMPLE', weight: 1 }, { value: 'AS', weight: 2 }, { value: 'TABLESAMPLE', weight: 3 }], [parser.isImpala(), true, parser.isHive()]); + } + if (keywords.length > 0) { + $$.suggestKeywords = keywords; + } + } + | DerivedTable OptionalCorrelationName OptionalImpalaTableSample + { + $$ = { + primary: $1 + }; + + if ($2) { + $$.primary.alias = $2.alias; + parser.addTablePrimary({ subQueryAlias: $2.alias }); + parser.addSubqueryAliasLocation($2.location, $2.alias, $1.identifierChain); + } + + var keywords = []; + if ($3 && $3.suggestKeywords) { + keywords = $3.suggestKeywords; + } else { + keywords = parser.getKeywordsForOptionalsLR([$3, $2], [{ value: 'TABLESAMPLE', weight: 1 }, { value: 'AS', weight: 2 }], [parser.isImpala(), true]); + } + if (keywords.length > 0) { + $$.suggestKeywords = keywords; + } + } + ; + +TablePrimary_EDIT + : TableOrQueryName_EDIT OptionalHiveTableSample OptionalCorrelationName OptionalImpalaTableSample + { + if ($3) { + parser.addTableAliasLocation($3.location, $3.alias, $1.identifierChain); + } + } + | TableOrQueryName OptionalHiveTableSample_EDIT OptionalCorrelationName OptionalImpalaTableSample + { + if ($3) { + $1.alias = $3.alias; + parser.addTableAliasLocation($3.location, $3.alias, $1.identifierChain); + } + parser.addTablePrimary($1); + } + | TableOrQueryName OptionalHiveTableSample OptionalCorrelationName OptionalImpalaTableSample_EDIT + { + if ($3) { + $1.alias = $3.alias; + parser.addTableAliasLocation($3.location, $3.alias, $1.identifierChain); + } + parser.addTablePrimary($1); + } + | DerivedTable_EDIT OptionalCorrelationName OptionalImpalaTableSample + { + if ($2) { + parser.addTablePrimary({ subQueryAlias: $2.alias }); + parser.addSubqueryAliasLocation($2.location, $2.alias); + } + } + | DerivedTable OptionalCorrelationName_EDIT OptionalImpalaTableSample + ; + +TableOrQueryName + : SchemaQualifiedTableIdentifier + ; + +TableOrQueryName_EDIT + : SchemaQualifiedTableIdentifier_EDIT + ; + +DerivedTable + : TableSubQuery + ; + +DerivedTable_EDIT + : TableSubQuery_EDIT + ; + +OptionalHiveTableSample + : + | 'TABLESAMPLE' '(' 'BUCKET' 'UNSIGNED_INTEGER' 'OUT' 'OF' 'UNSIGNED_INTEGER' OptionalOnColumn ')' + | 'TABLESAMPLE' '(' ExactNumericLiteral 'PERCENT' ')' + | 'TABLESAMPLE' '(' ExactNumericLiteral 'ROWS' ')' + | 'TABLESAMPLE' '(' 'REGULAR_IDENTIFIER' ')' + ; + +OptionalHiveTableSample_EDIT + : 'TABLESAMPLE' '(' AnyCursor RightParenthesisOrError + { + parser.suggestKeywords(['BUCKET']); + } + | 'TABLESAMPLE' '(' 'BUCKET' 'UNSIGNED_INTEGER' 'CURSOR' RightParenthesisOrError + { + parser.suggestKeywords(['OUT OF']); + } + | 'TABLESAMPLE' '(' 'BUCKET' 'UNSIGNED_INTEGER' 'OUT' 'CURSOR' RightParenthesisOrError + { + parser.suggestKeywords(['OF']); + } + | 'TABLESAMPLE' '(' 'BUCKET' 'UNSIGNED_INTEGER' 'OUT' 'OF' 'UNSIGNED_INTEGER' OptionalOnColumn 'CURSOR' RightParenthesisOrError + { + if (!$8) { + parser.suggestKeywords(['ON']); + } + } + | 'TABLESAMPLE' '(' 'BUCKET' 'UNSIGNED_INTEGER' 'OUT' 'OF' 'UNSIGNED_INTEGER' OptionalOnColumn_EDIT RightParenthesisOrError + | 'TABLESAMPLE' '(' ExactNumericLiteral 'CURSOR' RightParenthesisOrError + { + if ($3.indexOf('.') === -1 ) { + parser.suggestKeywords(['PERCENT', 'ROWS']); + } else { + parser.suggestKeywords(['PERCENT']); + } + } + ; + +OptionalImpalaTableSample + : + | 'TABLESAMPLE' 'SYSTEM' '(' 'UNSIGNED_INTEGER' ')' --> { suggestKeywords: ['REPEATABLE()'] } + | 'TABLESAMPLE' 'SYSTEM' '(' 'UNSIGNED_INTEGER' ')' 'REPEATABLE' '(' 'UNSIGNED_INTEGER' ')' + ; + +OptionalImpalaTableSample_EDIT + : 'TABLESAMPLE' 'CURSOR' + { + parser.suggestKeywords(['SYSTEM()']); + } + ; + +OptionalOnColumn + : + | 'ON' ValueExpression + ; + +OptionalOnColumn_EDIT + : 'ON' 'CURSOR' + { + parser.valueExpressionSuggest(); + } + | 'ON' ValueExpression_EDIT + ; + +PushQueryState + : + { + parser.pushQueryState(); + } + ; + +PopQueryState + : + { + parser.popQueryState(); + } + ; + +TableSubQuery + : '(' TableSubQueryInner ')' -> $2 + | '(' DerivedTable OptionalCorrelationName ')' + { + if ($3) { + $2.alias = $3.alias; + parser.addTablePrimary({ subQueryAlias: $3.alias }); + parser.addSubqueryAliasLocation($3.location, $3.alias, $2.identifierChain); + } + $$ = $2; + } + ; + +TableSubQuery_EDIT + : '(' TableSubQueryInner_EDIT RightParenthesisOrError + | '(' AnyCursor RightParenthesisOrError + { + parser.suggestKeywords(['SELECT']); + } + ; + +TableSubQueryInner + : PushQueryState SubQuery + { + var subQuery = parser.getSubQuery($2); + subQuery.columns.forEach(function (column) { + parser.expandIdentifierChain({ wrapper: column }); + delete column.linked; + }); + parser.popQueryState(subQuery); + $$ = subQuery; + } + ; + +TableSubQueryInner_EDIT + : PushQueryState SubQuery_EDIT PopQueryState + ; + +SubQuery + : QueryExpression + ; + +SubQuery_EDIT + : QueryExpression_EDIT + ; + +QueryExpression + : QueryExpressionBody + ; + +QueryExpression_EDIT + : QueryExpressionBody_EDIT + ; + +QueryExpressionBody + : NonJoinQueryExpression + ; + +QueryExpressionBody_EDIT + : NonJoinQueryExpression_EDIT + ; + +NonJoinQueryExpression + : NonJoinQueryTerm + ; + +NonJoinQueryExpression_EDIT + : NonJoinQueryTerm_EDIT + ; + +NonJoinQueryTerm + : NonJoinQueryPrimary + ; + +NonJoinQueryTerm_EDIT + : NonJoinQueryPrimary_EDIT + ; + +NonJoinQueryPrimary + : SimpleTable + ; + +NonJoinQueryPrimary_EDIT + : SimpleTable_EDIT + ; + +SimpleTable + : QuerySpecification + ; + +SimpleTable_EDIT + : QuerySpecification_EDIT + ; + +OptionalCorrelationName + : + | RegularOrBacktickedIdentifier -> { alias: $1, location: @1 } + | AnyAs RegularOrBacktickedIdentifier -> { alias: $2, location: @2 } + ; + +OptionalCorrelationName_EDIT + : PartialBacktickedIdentifier + | AnyAs PartialBacktickedIdentifier + | AnyAs 'CURSOR' + ; + +OptionalLateralViews + : + | OptionalLateralViews LateralView + { + if ($1 && $2.lateralView) { + $1.lateralViews.push($2.lateralView); + $$ = $1; + } else if ($2.lateralView) { + $$ = { lateralViews: [ $2.lateralView ] }; + } + if ($2.suggestKeywords) { + $$.suggestKeywords = $2.suggestKeywords + } + } + ; + +OptionalLateralViews_EDIT + : OptionalLateralViews LateralView_EDIT OptionalLateralViews + ; + +UserDefinedFunction + : AggregateFunction OptionalOverClause + { + if (!$2) { + $1.suggestKeywords = ['OVER']; + } + } + | AnalyticFunction OverClause + | CastFunction + | HiveExtractFunction + | ImpalaExtractFunction + ; + +UserDefinedFunction_EDIT + : AggregateFunction_EDIT + | AggregateFunction OptionalOverClause_EDIT + | AnalyticFunction_EDIT + | AnalyticFunction_EDIT OverClause + | AnalyticFunction 'CURSOR' + { + parser.suggestKeywords(['OVER']); + } + | AnalyticFunction OverClause_EDIT + | CastFunction_EDIT + | HiveExtractFunction_EDIT + | ImpalaExtractFunction_EDIT + ; + +ArbitraryFunction + : RegularIdentifier ArbitraryFunctionRightPart + { + parser.addFunctionLocation(@1, $1); + if ($2.expression) { + $$ = { function: $1, expression: $2.expression, types: parser.findReturnTypes($1) } + } else { + $$ = { function: $1, types: parser.findReturnTypes($1) } + } + } + | ArbitraryFunctionName ArbitraryFunctionRightPart + { + parser.addFunctionLocation(@1, $1); + if ($2.expression) { + $$ = { function: $1, expression: $2.expression, types: parser.findReturnTypes($1) } + } else { + $$ = { function: $1, types: parser.findReturnTypes($1) } + } + } + ; + +ArbitraryFunction_EDIT + : RegularIdentifier ArbitraryFunctionRightPart_EDIT + { + parser.addFunctionLocation(@1, $1); + if ($2.position) { + parser.applyArgumentTypesToSuggestions($1, $2.position); + } + $$ = { types: parser.findReturnTypes($1) }; + } + | ArbitraryFunctionName ArbitraryFunctionRightPart_EDIT + { + parser.addFunctionLocation(@1, $1); + if ($2.position) { + parser.applyArgumentTypesToSuggestions($1, $2.position); + } + $$ = { types: parser.findReturnTypes($1) }; + } + ; + +ArbitraryFunctionName + : 'IF' + | 'ARRAY' + | 'BINARY' + | 'MAP' + | 'REPLACE' + | 'TRUNCATE' + ; + +ArbitraryFunctionRightPart + : '(' ')' + | '(' ValueExpressionList ')' -> { expression: $2 } + ; + +ArbitraryFunctionRightPart_EDIT + : '(' AnyCursor RightParenthesisOrError + { + parser.valueExpressionSuggest(); + $$ = { position: 1 } + } + | '(' ValueExpressionList 'CURSOR' RightParenthesisOrError + { + parser.suggestValueExpressionKeywords($3); + } + | '(' ValueExpressionList_EDIT RightParenthesisOrError -> $2 + ; + +AggregateFunction + : CountFunction + | SumFunction + | OtherAggregateFunction + ; + +AggregateFunction_EDIT + : CountFunction_EDIT + | SumFunction_EDIT + | OtherAggregateFunction_EDIT + ; + +AnalyticFunction + : 'ANALYTIC' '(' ')' -> { types: parser.findReturnTypes($1) } + | 'ANALYTIC' '(' ValueExpressionList ')' -> { function: $1, expression: $2, types: parser.findReturnTypes($1) } + ; + +AnalyticFunction_EDIT + : 'ANALYTIC' '(' AnyCursor RightParenthesisOrError + { + parser.valueExpressionSuggest(); + parser.applyArgumentTypesToSuggestions($1, 1); + $$ = { types: parser.findReturnTypes($1) }; + } + | 'ANALYTIC' '(' ValueExpressionList 'CURSOR' RightParenthesisOrError + { + parser.suggestValueExpressionKeywords($3); + $$ = { types: parser.findReturnTypes($1) }; + } + | 'ANALYTIC' '(' ValueExpressionList_EDIT RightParenthesisOrError + { + parser.applyArgumentTypesToSuggestions($1, $3.position); + $$ = { types: parser.findReturnTypes($1) }; + } + ; + +OptionalOverClause + : + | OverClause + ; + +OptionalOverClause_EDIT + : OverClause_EDIT + ; + +OverClause + : 'OVER' RegularOrBacktickedIdentifier + | 'OVER' WindowExpression + ; + +OverClause_EDIT + : 'OVER' WindowExpression_EDIT + ; + +WindowExpression + : '(' OptionalPartitionBy OptionalOrderByAndWindow ')' + ; + +WindowExpression_EDIT + : '(' PartitionBy_EDIT OptionalOrderByAndWindow RightParenthesisOrError + { + if (parser.yy.result.suggestFunctions) { + parser.suggestAggregateFunctions(); + } + } + | '(' OptionalPartitionBy OptionalOrderByAndWindow_EDIT RightParenthesisOrError + { + if (parser.yy.result.suggestFunctions) { + parser.suggestAggregateFunctions(); + } + } + | '(' AnyCursor OptionalPartitionBy OptionalOrderByAndWindow RightParenthesisOrError + { + if (!$3 && !$4) { + parser.suggestKeywords([{ value: 'PARTITION BY', weight: 2 }, { value: 'ORDER BY', weight: 1 }]); + } else if (!$3) { + parser.suggestKeywords(['PARTITION BY']); + } + } + | '(' AnyPartition 'BY' ValueExpressionList 'CURSOR' OptionalOrderByAndWindow RightParenthesisOrError + { + if (!$6) { + parser.suggestValueExpressionKeywords($4, [{ value: 'ORDER BY', weight: 2 }]); + } else { + parser.suggestValueExpressionKeywords($4); + } + } + ; + +OptionalPartitionBy + : + | PartitionBy + ; + +PartitionBy + : AnyPartition 'BY' ValueExpressionList -> $3 + ; + +PartitionBy_EDIT + : AnyPartition 'CURSOR' + { + parser.suggestKeywords(['BY']); + } + | AnyPartition 'BY' 'CURSOR' + { + parser.valueExpressionSuggest(); + } + | AnyPartition 'BY' ValueExpressionList_EDIT + ; + +OptionalOrderByAndWindow + : + | OrderByClause OptionalWindowSpec + ; + +OptionalOrderByAndWindow_EDIT + : OrderByClause_EDIT + { + // Only allowed in last order by + delete parser.yy.result.suggestAnalyticFunctions; + } + | OrderByClause 'CURSOR' OptionalWindowSpec + { + var keywords = []; + if ($1.suggestKeywords) { + keywords = parser.createWeightedKeywords($1.suggestKeywords, 2); + } + if (!$3) { + keywords = keywords.concat([{ value: 'RANGE BETWEEN', weight: 1 }, { value: 'ROWS BETWEEN', weight: 1 }]); + } + parser.suggestKeywords(keywords); + } + | OrderByClause WindowSpec_EDIT + ; + +OptionalWindowSpec + : + | WindowSpec + ; + +WindowSpec + : RowsOrRange 'BETWEEN' PopLexerState OptionalCurrentOrPreceding OptionalAndFollowing + | RowsOrRange 'UNBOUNDED' PopLexerState OptionalCurrentOrPreceding OptionalAndFollowing + ; + +WindowSpec_EDIT + : RowsOrRange 'CURSOR' + { + parser.suggestKeywords(parser.isHive() ? ['BETWEEN', 'UNBOUNDED'] : ['BETWEEN']); + } + | RowsOrRange 'BETWEEN' PopLexerState OptionalCurrentOrPreceding OptionalAndFollowing 'CURSOR' + { + if (!$4 && !$5) { + parser.suggestKeywords(['CURRENT ROW', 'UNBOUNDED PRECEDING']); + } else if (!$5) { + parser.suggestKeywords(['AND']); + } + } + | RowsOrRange 'BETWEEN' PopLexerState OptionalCurrentOrPreceding_EDIT OptionalAndFollowing + | RowsOrRange 'BETWEEN' PopLexerState OptionalCurrentOrPreceding OptionalAndFollowing_EDIT + | RowsOrRange 'UNBOUNDED' PopLexerState OptionalCurrentOrPreceding 'CURSOR' + { + if (!$4 && parser.isHive()) { + parser.suggestKeywords(['PRECEDING']); + } + } + | RowsOrRange 'UNBOUNDED' PopLexerState OptionalCurrentOrPreceding_EDIT + ; + +PopLexerState + : + { + lexer.popState(); + } + ; + +PushHdfsLexerState + : + { + lexer.begin('hdfs'); + } + ; + +HdfsPath + : 'HDFS_START_QUOTE' 'HDFS_PATH' 'HDFS_END_QUOTE' + ; + +HdfsPath_EDIT + : 'HDFS_START_QUOTE' 'HDFS_PATH' 'PARTIAL_CURSOR' 'HDFS_PATH' 'HDFS_END_QUOTE' + { + parser.suggestHdfs({ path: $2 }); + } + | 'HDFS_START_QUOTE' 'HDFS_PATH' 'PARTIAL_CURSOR' 'HDFS_END_QUOTE' + { + parser.suggestHdfs({ path: $2 }); + } + | 'HDFS_START_QUOTE' 'HDFS_PATH' 'PARTIAL_CURSOR' + { + parser.suggestHdfs({ path: $2 }); + } + | 'HDFS_START_QUOTE' 'PARTIAL_CURSOR' 'HDFS_END_QUOTE' + { + parser.suggestHdfs({ path: '' }); + } + | 'HDFS_START_QUOTE' 'PARTIAL_CURSOR' + { + parser.suggestHdfs({ path: '' }); + } + ; + +RowsOrRange + : 'ROWS' + | AnyRange + ; + +OptionalCurrentOrPreceding + : + | IntegerOrUnbounded 'PRECEDING' + | AnyCurrent 'ROW' + ; + +OptionalCurrentOrPreceding_EDIT + : IntegerOrUnbounded 'CURSOR' + { + parser.suggestKeywords(['PRECEDING']); + } + | AnyCurrent 'CURSOR' + { + parser.suggestKeywords(['ROW']); + } + ; + +AnyCurrent + : 'CURRENT' + | 'CURRENT' + | 'CURRENT' + ; + +AnyRange + : 'RANGE' + | 'RANGE' + ; + +OptionalAndFollowing + : + | 'AND' AnyCurrent 'ROW' + | 'AND' IntegerOrUnbounded 'FOLLOWING' + ; + +OptionalAndFollowing_EDIT + : 'AND' 'CURSOR' + { + parser.suggestKeywords(['CURRENT ROW', 'UNBOUNDED FOLLOWING']); + } + | 'AND' AnyCurrent 'CURSOR' + { + parser.suggestKeywords(['ROW']); + } + | 'AND' IntegerOrUnbounded 'CURSOR' + { + parser.suggestKeywords(['FOLLOWING']); + } + ; + +IntegerOrUnbounded + : 'UNSIGNED_INTEGER' + | 'UNBOUNDED' + ; + +OptionalHavingClause + : + | HavingClause + ; + +HavingClause + : 'HAVING' ValueExpression + ; + +HavingClause_EDIT + : 'HAVING' 'CURSOR' + { + parser.valueExpressionSuggest(); + parser.suggestAggregateFunctions(); + parser.suggestSelectListAliases(true); + } + | 'HAVING' ValueExpression_EDIT + { + parser.suggestAggregateFunctions(); + parser.suggestSelectListAliases(true); + } + ; + +OptionalWindowClause + : + | WindowClause + ; + +WindowClause + : 'WINDOW' RegularOrBacktickedIdentifier 'AS' WindowExpression + ; + +WindowClause_EDIT + : 'WINDOW' RegularOrBacktickedIdentifier 'CURSOR' + { + parser.suggestKeywords(['AS']); + } + | 'WINDOW' RegularOrBacktickedIdentifier 'AS' WindowExpression_EDIT + ; + +CastFunction + : 'CAST' '(' ValueExpression AnyAs PrimitiveType ')' -> { types: [ $5.toUpperCase() ] } + | 'CAST' '(' ')' -> { types: [ 'T' ] } + ; + +CastFunction_EDIT + : 'CAST' '(' AnyCursor AnyAs PrimitiveType RightParenthesisOrError + { + parser.valueExpressionSuggest(); + $$ = { types: [ $5.toUpperCase() ] }; + } + | 'CAST' '(' AnyCursor AnyAs RightParenthesisOrError + { + parser.valueExpressionSuggest(); + $$ = { types: [ 'T' ] }; + } + | 'CAST' '(' AnyCursor RightParenthesisOrError + { + parser.valueExpressionSuggest(); + $$ = { types: [ 'T' ] }; + } + | 'CAST' '(' ValueExpression_EDIT AnyAs PrimitiveType RightParenthesisOrError -> { types: [ $5.toUpperCase() ] } + | 'CAST' '(' ValueExpression_EDIT AnyAs RightParenthesisOrError -> { types: [ 'T' ] } + | 'CAST' '(' ValueExpression_EDIT RightParenthesisOrError -> { types: [ 'T' ] } + | 'CAST' '(' ValueExpression 'CURSOR' PrimitiveType RightParenthesisOrError + { + parser.suggestValueExpressionKeywords($3, [{ value: 'AS', weight: 2 }]); + $$ = { types: [ $5.toUpperCase() ] }; + } + | 'CAST' '(' ValueExpression 'CURSOR' RightParenthesisOrError + { + parser.suggestValueExpressionKeywords($3, [{ value: 'AS', weight: 2 }]); + $$ = { types: [ 'T' ] }; + } + | 'CAST' '(' ValueExpression AnyAs 'CURSOR' RightParenthesisOrError + { + parser.suggestKeywords(parser.getTypeKeywords()); + $$ = { types: [ 'T' ] }; + } + | 'CAST' '(' AnyAs 'CURSOR' RightParenthesisOrError + { + parser.suggestKeywords(parser.getTypeKeywords()); + $$ = { types: [ 'T' ] }; + } + ; + +CountFunction + : 'COUNT' '(' '*' ')' -> { types: parser.findReturnTypes($1) } + | 'COUNT' '(' ')' -> { types: parser.findReturnTypes($1) } + | 'COUNT' '(' OptionalAllOrDistinct ValueExpressionList ')' -> { types: parser.findReturnTypes($1) } + ; + +CountFunction_EDIT + : 'COUNT' '(' OptionalAllOrDistinct AnyCursor RightParenthesisOrError + { + parser.valueExpressionSuggest(); + var keywords = parser.getSelectListKeywords(); + if (!$3) { + keywords.push('DISTINCT'); + if (parser.isImpala()) { + keywords.push('ALL'); + } + if (parser.yy.result.suggestKeywords) { + keywords = parser.yy.result.suggestKeywords.concat(keywords); + } + } + parser.suggestKeywords(keywords); + $$ = { types: parser.findReturnTypes($1) }; + } + | 'COUNT' '(' OptionalAllOrDistinct ValueExpressionList 'CURSOR' RightParenthesisOrError + { + parser.suggestValueExpressionKeywords($4); + $$ = { types: parser.findReturnTypes($1) }; + } + | 'COUNT' '(' OptionalAllOrDistinct ValueExpressionList_EDIT RightParenthesisOrError + { + if ($4.cursorAtStart) { + var keywords = parser.getSelectListKeywords(); + if (!$3) { + keywords.push('DISTINCT'); + if (parser.isImpala()) { + keywords.push('ALL'); + } + } + parser.suggestKeywords(keywords); + } + $$ = { types: parser.findReturnTypes($1) }; + } + ; + +HiveExtractFunction + : 'EXTRACT' '(' HiveDateField 'FROM' ValueExpression ')' -> { types: ['INT'] } + ; + +HiveExtractFunction_EDIT + : 'EXTRACT' '(' AnyCursor RightParenthesisOrError + { + parser.suggestKeywords(['DAY', 'DAYOFWEEK', 'HOUR', 'MINUTE', 'MONTH', 'QUARTER', 'SECOND', 'WEEK', 'YEAR']); + $$ = { types: ['INT'] } + } + | 'EXTRACT' '(' HiveDateField 'CURSOR' RightParenthesisOrError + { + parser.suggestKeywords(['FROM']); + $$ = { types: ['INT'] } + } + | 'EXTRACT' '(' HiveDateField 'FROM' 'CURSOR' RightParenthesisOrError + { + parser.valueExpressionSuggest(); + $$ = { types: ['INT'] } + } + | 'EXTRACT' '(' HiveDateField 'FROM' ValueExpression_EDIT RightParenthesisOrError -> { types: ['INT'] } + | 'EXTRACT' '(' AnyCursor 'FROM' ValueExpression RightParenthesisOrError + { + parser.suggestKeywords(['DAY', 'DAYOFWEEK', 'HOUR', 'MINUTE', 'MONTH', 'QUARTER', 'SECOND', 'WEEK', 'YEAR']); + $$ = { types: ['INT'] } + } + | 'EXTRACT' '(' HiveDateField 'CURSOR' ValueExpression RightParenthesisOrError + { + parser.suggestKeywords(['FROM']); + $$ = { types: ['INT'] } + } + ; + +HiveDateField + : 'DAY' + | 'DAYOFWEEK' + | 'HOUR' + | 'MINUTE' + | 'MONTH' + | 'QUARTER' + | 'SECOND' + | 'WEEK' + | 'YEAR' + ; + +OtherAggregateFunction + : OtherAggregateFunction_Type '(' OptionalAllOrDistinct ')' -> { types: parser.findReturnTypes($1) } + | OtherAggregateFunction_Type '(' OptionalAllOrDistinct ValueExpressionList ')' -> { types: parser.findReturnTypes($1) } + ; + +OtherAggregateFunction_EDIT + : OtherAggregateFunction_Type '(' OptionalAllOrDistinct AnyCursor RightParenthesisOrError + { + parser.valueExpressionSuggest(); + var keywords = parser.getSelectListKeywords(true); + if (!$3) { + if ($1.toLowerCase() === 'group_concat') { + keywords.push('ALL'); + } else if (parser.isImpala()) { + keywords.push('ALL'); + keywords.push('DISTINCT'); + } else { + keywords.push('DISTINCT'); + } + } + if (parser.yy.result.suggestKeywords) { + keywords = parser.yy.result.suggestKeywords.concat(keywords); + } + parser.suggestKeywords(keywords); + parser.applyArgumentTypesToSuggestions($1, 1); + $$ = { types: parser.findReturnTypes($1) }; + } + | OtherAggregateFunction_Type '(' OptionalAllOrDistinct ValueExpressionList 'CURSOR' RightParenthesisOrError + { + parser.suggestValueExpressionKeywords($4); + $$ = { types: parser.findReturnTypes($1) }; + } + | OtherAggregateFunction_Type '(' OptionalAllOrDistinct ValueExpressionList_EDIT RightParenthesisOrError + { + if ($4.cursorAtStart) { + var keywords = parser.getSelectListKeywords(true); + if (!$3) { + if ($1.toLowerCase() === 'group_concat') { + keywords.push('ALL'); + } else if (parser.isImpala()) { + keywords.push('ALL'); + keywords.push('DISTINCT'); + } else { + keywords.push('DISTINCT'); + } + } + if (parser.yy.result.suggestKeywords) { + keywords = parser.yy.result.suggestKeywords.concat(keywords); + } + parser.suggestKeywords(keywords); + } + if (parser.yy.result.suggestFunctions && !parser.yy.result.suggestFunctions.types) { + parser.applyArgumentTypesToSuggestions($1, $4.position); + } + $$ = { types: parser.findReturnTypes($1) }; + } + ; + +OtherAggregateFunction_Type + : 'APPX_MEDIAN' + | 'AVG' + | 'COLLECT_SET' + | 'COLLECT_LIST' + | 'CORR' + | 'COVAR_POP' + | 'COVAR_SAMP' + | 'GROUP_CONCAT' + | 'HISTOGRAM_NUMERIC' + | 'STDDEV' + | 'STDDEV_POP' + | 'STDDEV_SAMP' + | 'MAX' + | 'MIN' + | 'NDV' + | 'NTILE' + | 'PERCENTILE' + | 'PERCENTILE_APPROX' + | 'VARIANCE' + | 'VARIANCE_POP' + | 'VARIANCE_SAMP' + | 'VAR_POP' + | 'VAR_SAMP' + ; + +ImpalaExtractFunction + : 'EXTRACT' '(' ValueExpression FromOrComma ValueExpression ')' + | 'EXTRACT' '(' ')' + ; + +ImpalaExtractFunction_EDIT + : 'EXTRACT' '(' AnyCursor FromOrComma ValueExpression RightParenthesisOrError + { + parser.valueExpressionSuggest(); + parser.applyTypeToSuggestions($4.toLowerCase() === 'from' ? ['STRING'] : ['TIMESTAMP']); + $$ = { types: parser.findReturnTypes($1) }; + } + | 'EXTRACT' '(' AnyCursor FromOrComma RightParenthesisOrError + { + parser.valueExpressionSuggest(); + parser.applyTypeToSuggestions($4.toLowerCase() === 'from' ? ['STRING'] : ['TIMESTAMP']); + $$ = { types: parser.findReturnTypes($1) }; + } + | 'EXTRACT' '(' AnyCursor RightParenthesisOrError + { + parser.valueExpressionSuggest(); + parser.applyTypeToSuggestions(['STRING', 'TIMESTAMP']); + $$ = { types: parser.findReturnTypes($1) }; + } + | 'EXTRACT' '(' ValueExpression_EDIT FromOrComma ValueExpression RightParenthesisOrError + { + parser.applyTypeToSuggestions($4.toLowerCase() === 'from' ? ['STRING'] : ['TIMESTAMP']); + $$ = { types: parser.findReturnTypes($1) }; + } + | 'EXTRACT' '(' ValueExpression_EDIT FromOrComma RightParenthesisOrError + { + parser.applyTypeToSuggestions($4.toLowerCase() === 'from' ? ['STRING'] : ['TIMESTAMP']); + $$ = { types: parser.findReturnTypes($1) }; + } + | 'EXTRACT' '(' ValueExpression_EDIT RightParenthesisOrError + { + parser.applyTypeToSuggestions(['STRING', 'TIMESTAMP']); + $$ = { types: parser.findReturnTypes($1) }; + } + | 'EXTRACT' '(' ValueExpression FromOrComma AnyCursor RightParenthesisOrError + { + parser.valueExpressionSuggest(); + parser.applyTypeToSuggestions($4.toLowerCase() === 'from' ? ['TIMESTAMP'] : ['STRING']); + $$ = { types: parser.findReturnTypes($1) }; + } + | 'EXTRACT' '(' FromOrComma AnyCursor RightParenthesisOrError + { + parser.valueExpressionSuggest(); + parser.applyTypeToSuggestions($4.toLowerCase() === 'from' ? ['TIMESTAMP'] : ['STRING']); + $$ = { types: parser.findReturnTypes($1) }; + } + | 'EXTRACT' '(' ValueExpression FromOrComma ValueExpression_EDIT RightParenthesisOrError + { + parser.applyTypeToSuggestions($4.toLowerCase() === 'from' ? ['TIMESTAMP'] : ['STRING']); + $$ = { types: parser.findReturnTypes($1) }; + } + | 'EXTRACT' '(' FromOrComma ValueExpression_EDIT RightParenthesisOrError + { + parser.applyTypeToSuggestions($4.toLowerCase() === 'from' ? ['TIMESTAMP'] : ['STRING']); + $$ = { types: parser.findReturnTypes($1) }; + } + | 'EXTRACT' '(' ValueExpression 'CURSOR' ValueExpression RightParenthesisOrError + { + if ($3.types[0] === 'STRING') { + parser.suggestValueExpressionKeywords($3, ['FROM']); + } else { + parser.suggestValueExpressionKeywords($3); + } + $$ = { types: parser.findReturnTypes($1) }; + } + | 'EXTRACT' '(' ValueExpression 'CURSOR' RightParenthesisOrError + { + if ($3.types[0] === 'STRING') { + parser.suggestValueExpressionKeywords($3, ['FROM']); + } else { + parser.suggestValueExpressionKeywords($3); + } + $$ = { types: parser.findReturnTypes($1) }; + } + ; + +FromOrComma + : 'FROM' + | ',' + ; + +SumFunction + : 'SUM' '(' OptionalAllOrDistinct ValueExpression ')' -> { types: parser.findReturnTypes($1) } + | 'SUM' '(' ')' -> { types: parser.findReturnTypes($1) } + ; + +SumFunction_EDIT + : 'SUM' '(' OptionalAllOrDistinct AnyCursor RightParenthesisOrError + { + parser.valueExpressionSuggest(); + parser.applyArgumentTypesToSuggestions($1, 1); + var keywords = parser.getSelectListKeywords(true); + if (!$3) { + keywords.push('DISTINCT'); + if (parser.isImpala()) { + keywords.push('ALL'); + } + } + if (parser.yy.result.suggestKeywords) { + keywords = parser.yy.result.suggestKeywords.concat(keywords); + } + parser.suggestKeywords(keywords); + $$ = { types: parser.findReturnTypes($1) }; + } + | 'SUM' '(' OptionalAllOrDistinct ValueExpression 'CURSOR' RightParenthesisOrError + { + parser.suggestValueExpressionKeywords($4); + $$ = { types: parser.findReturnTypes($1) }; + } + | 'SUM' '(' OptionalAllOrDistinct ValueExpression_EDIT RightParenthesisOrError + { + if (parser.yy.result.suggestFunctions && ! parser.yy.result.suggestFunctions.types) { + parser.applyArgumentTypesToSuggestions($1, 1); + } + $$ = { types: parser.findReturnTypes($1) }; + } + ; + +LateralView + : 'LATERAL' 'VIEW' OptionalOuter ArbitraryFunction RegularOrBacktickedIdentifier LateralViewColumnAliases -> { lateralView: { udtf: $4, tableAlias: $5, columnAliases: $6 }} + | 'LATERAL' 'VIEW' OptionalOuter ArbitraryFunction RegularOrBacktickedIdentifier + { + if ($4.function.toLowerCase() === 'explode') { + $$ = { lateralView: { udtf: $4, tableAlias: $5, columnAliases: ['key', 'value'] }, suggestKeywords: ['AS'] }; + } else if ($4.function.toLowerCase() === 'posexplode') { + $$ = { lateralView: { udtf: $4, tableAlias: $5, columnAliases: ['pos', 'val'] }, suggestKeywords: ['AS'] }; + } else { + $$ = { lateralView: { udtf: $4, tableAlias: $5, columnAliases: [] }, suggestKeywords: ['AS'] }; + } + } + | 'LATERAL' 'VIEW' OptionalOuter ArbitraryFunction LateralViewColumnAliases -> { lateralView: { udtf: $4, columnAliases: $5 }} + ; + +LateralView_EDIT + : 'LATERAL' 'VIEW' OptionalOuter ArbitraryFunction_EDIT + | 'LATERAL' 'VIEW' OptionalOuter ArbitraryFunction_EDIT RegularOrBacktickedIdentifier + | 'LATERAL' 'VIEW' OptionalOuter ArbitraryFunction_EDIT RegularOrBacktickedIdentifier LateralViewColumnAliases + | 'LATERAL' 'VIEW' OptionalOuter ArbitraryFunction RegularOrBacktickedIdentifier LateralViewColumnAliases_EDIT + | 'LATERAL' 'VIEW' OptionalOuter ArbitraryFunction PartialBacktickedOrCursor + | 'LATERAL' 'VIEW' OptionalOuter ArbitraryFunction PartialBacktickedOrCursor LateralViewColumnAliases + | 'LATERAL' 'VIEW' OptionalOuter 'CURSOR' + { + if (!$3) { + parser.suggestKeywords([{ value: 'OUTER', weight: 2 }, { value: 'explode', weight: 1 }, { value: 'posexplode', weight: 1 }]); + } else { + parser.suggestKeywords(['explode', 'posexplode']); + } + } + | 'LATERAL' 'CURSOR' + { + parser.suggestKeywords(['VIEW']); + } + ; + +OptionalOuter + : + | 'OUTER' + ; + +LateralViewColumnAliases + : 'AS' RegularOrBacktickedIdentifier -> [ $2 ] + | 'AS' RegularOrBacktickedIdentifier ',' RegularOrBacktickedIdentifier -> [ $2, $4 ] + ; + +LateralViewColumnAliases_EDIT + : 'AS' PartialBacktickedOrCursor + | 'AS' RegularOrBacktickedIdentifier ',' PartialBacktickedOrAnyCursor + ; \ No newline at end of file diff --git a/jison/sql_set.jison b/jison/sql_set.jison new file mode 100755 index 0000000..c1ae3af --- /dev/null +++ b/jison/sql_set.jison @@ -0,0 +1,67 @@ +// Licensed to Cloudera, Inc. under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. Cloudera, Inc. licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +DataDefinition + : SetRoleStatement + | SetSpecification + ; + +DataDefinition_EDIT + : SetRoleStatement_EDIT + | 'SET' 'CURSOR' + { + parser.suggestSetOptions(); + if (parser.isHive()) { + parser.suggestKeywords(['ROLE']); + } + if (parser.isImpala()) { + parser.suggestKeywords(['ALL']); + } + } + ; + +SetSpecification + : 'SET' SetOption '=' SetValue + | 'SET' 'ALL' + ; + +SetOption + : RegularIdentifier + | SetOption AnyDot RegularIdentifier + ; + +SetValue + : RegularIdentifier + | SignedInteger + | SignedInteger RegularIdentifier + | QuotedValue + | 'TRUE' + | 'FALSE' + | 'NULL' + ; + +SetRoleStatement + : 'SET' 'ROLE' RegularIdentifier + | 'SET' 'ROLE' 'ALL' + | 'SET' 'ROLE' 'NONE' + ; + +SetRoleStatement_EDIT + : 'SET' 'ROLE' 'CURSOR' + { + parser.suggestKeywords(['ALL', 'NONE']); + } + ; \ No newline at end of file diff --git a/jison/sql_show.jison b/jison/sql_show.jison new file mode 100755 index 0000000..19d96b9 --- /dev/null +++ b/jison/sql_show.jison @@ -0,0 +1,706 @@ +// Licensed to Cloudera, Inc. under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. Cloudera, Inc. licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +DataDefinition + : ShowStatement + ; + +DataDefinition_EDIT + : ShowStatement_EDIT + ; + +ShowStatement + : ShowColumnStatsStatement + | ShowColumnsStatement + | ShowCompactionsStatement + | ShowConfStatement + | ShowCreateTableStatement + | ShowCurrentRolesStatement + | ShowDatabasesStatement + | ShowFilesStatement + | ShowFunctionsStatement + | ShowGrantStatement + | ShowIndexStatement + | ShowLocksStatement + | ShowPartitionsStatement + | ShowRoleStatement + | ShowRolesStatement + | ShowTableStatement + | ShowTablesStatement + | ShowTblPropertiesStatement + | ShowTransactionsStatement + | ShowViewsStatement + ; + +AnyShow + : 'SHOW' + | 'SHOW' + ; + +ShowStatement_EDIT + : AnyShow 'CURSOR' + { + if (parser.isHive()) { + parser.suggestKeywords(['COLUMNS', 'COMPACTIONS', 'CONF', 'CREATE TABLE', 'CURRENT ROLES', 'DATABASES', 'FORMATTED', 'FUNCTIONS', 'GRANT', 'INDEX', 'INDEXES', 'LOCKS', 'PARTITIONS', 'PRINCIPALS', 'ROLE GRANT', 'ROLES', 'SCHEMAS', 'TABLE EXTENDED', 'TABLES', 'TBLPROPERTIES', 'TRANSACTIONS', 'VIEWS']); + } else if (parser.isImpala()) { + parser.suggestKeywords(['AGGREGATE FUNCTIONS', 'ANALYTIC FUNCTIONS', 'COLUMN STATS', 'CREATE TABLE', 'CURRENT ROLES', 'DATABASES', 'FILES IN', 'FUNCTIONS', 'GRANT ROLE', 'PARTITIONS', 'RANGE PARTITIONS', 'ROLE GRANT GROUP', 'ROLES', 'SCHEMAS', 'TABLE STATS', 'TABLES']); + } else { + parser.suggestKeywords(['COLUMNS', 'DATABASES', 'TABLES']); + } + } + | AnyShow 'CURSOR' RegularOrBackTickedSchemaQualifiedName + { + // ROLES is considered a non-reserved keywords so we can't match it in ShowCurrentRolesStatement_EDIT + if ($3.identifierChain && $3.identifierChain.length === 1 && $3.identifierChain[0].name.toLowerCase() === 'roles') { + parser.suggestKeywords(['CURRENT']); + parser.yy.locations.pop(); + } else { + parser.addTablePrimary($3); + if (parser.isImpala()) { + parser.suggestKeywords(['COLUMN STATS', 'CREATE TABLE', 'FILES IN', 'PARTITIONS', 'RANGE PARTITIONS', 'TABLE STATS']); + } + } + } + | AnyShow 'CURSOR' LIKE SingleQuotedValue + { + if (parser.isImpala()) { + parser.suggestKeywords(['AGGREGATE FUNCTIONS', 'ANALYTIC FUNCTIONS', 'DATABASES', 'FUNCTIONS', 'SCHEMAS', 'TABLES']); + } else if (parser.isHive()) { + parser.suggestKeywords(['DATABASES', 'SCHEMAS', 'TABLE EXTENDED']); + } + } + | ShowColumnStatsStatement_EDIT + | ShowColumnsStatement_EDIT + | ShowCreateTableStatement_EDIT + | ShowCurrentRolesStatement_EDIT + | ShowDatabasesStatement_EDIT + | ShowFilesStatement_EDIT + | ShowFunctionsStatement_EDIT + | ShowGrantStatement_EDIT + | ShowIndexStatement_EDIT + | ShowLocksStatement_EDIT + | ShowPartitionsStatement_EDIT + | ShowRoleStatement_EDIT + | ShowTableStatement_EDIT + | ShowTablesStatement_EDIT + | ShowTblPropertiesStatement_EDIT + | ShowViewsStatement_EDIT + ; + +ShowColumnStatsStatement + : AnyShow 'COLUMN' 'STATS' RegularOrBackTickedSchemaQualifiedName + { + parser.addTablePrimary($4); + } + ; + +ShowColumnStatsStatement_EDIT + : AnyShow 'COLUMN' 'CURSOR' + { + parser.suggestKeywords(['STATS']); + } + | AnyShow 'COLUMN' 'STATS' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ + appendDot: true + }); + } + | AnyShow 'COLUMN' 'STATS' RegularOrBackTickedSchemaQualifiedName_EDIT + ; + +ShowColumnsStatement + : AnyShow 'COLUMNS' AnyFromOrIn RegularOrBacktickedIdentifier + | AnyShow 'COLUMNS' AnyFromOrIn RegularOrBacktickedIdentifier AnyFromOrIn RegularOrBacktickedIdentifier + ; + +ShowColumnsStatement_EDIT + : AnyShow 'COLUMNS' 'CURSOR' + { + parser.suggestKeywords(['FROM', 'IN']); + } + | AnyShow 'COLUMNS' 'CURSOR' RegularOrBacktickedIdentifier + { + parser.suggestKeywords(['FROM', 'IN']); + } + | AnyShow 'COLUMNS' AnyFromOrIn 'CURSOR' + { + parser.suggestTables(); + } + | AnyShow 'COLUMNS' AnyFromOrIn 'CURSOR' AnyFromOrIn + { + parser.suggestTables(); + } + | AnyShow 'COLUMNS' AnyFromOrIn 'CURSOR' AnyFromOrIn RegularOrBacktickedIdentifier + { + parser.suggestTables(); + } + | AnyShow 'COLUMNS' AnyFromOrIn RegularOrBacktickedIdentifier 'CURSOR' + { + parser.suggestKeywords(['FROM', 'IN']); + } + | AnyShow 'COLUMNS' AnyFromOrIn RegularOrBacktickedIdentifier 'CURSOR' RegularOrBacktickedIdentifier + { + parser.suggestKeywords(['FROM', 'IN']); + } + | AnyShow 'COLUMNS' AnyFromOrIn RegularOrBacktickedIdentifier AnyFromOrIn 'CURSOR' + { + parser.suggestDatabases(); + } + ; + +ShowCompactionsStatement + : AnyShow 'COMPACTIONS' + ; + +ShowConfStatement + : AnyShow 'CONF' ConfigurationName + ; + +ShowCreateTableStatement + : AnyShow HiveOrImpalaCreate AnyTableOrView RegularOrBackTickedSchemaQualifiedName + { + parser.addTablePrimary($4); + } + ; + +ShowCreateTableStatement_EDIT + : AnyShow HiveOrImpalaCreate 'CURSOR' + { + if (parser.isImpala()) { + parser.suggestKeywords(['TABLE', 'VIEW']); + } else { + parser.suggestKeywords(['TABLE']); + } + } + | AnyShow HiveOrImpalaCreate AnyTableOrView 'CURSOR' + { + if ($3.isView && parser.isImpala()) { + parser.suggestTables({ onlyViews: true }); + } else { + parser.suggestTables(); + } + parser.suggestDatabases({ + appendDot: true + }); + } + | AnyShow HiveOrImpalaCreate AnyTableOrView RegularOrBackTickedSchemaQualifiedName_EDIT + { + if (parser.yy.result.suggestTables && $3.isView) { + parser.yy.result.suggestTables.onlyViews = true; + } + } + | AnyShow HiveOrImpalaCreate 'CURSOR' RegularOrBackTickedSchemaQualifiedName + { + parser.addTablePrimary($4); + if (parser.isImpala()) { + parser.suggestKeywords(['TABLE', 'VIEW']); + } else { + parser.suggestKeywords(['TABLE']); + } + } + ; + +AnyTableOrView + : AnyTable + | 'VIEW' --> { isView: true } + ; + +ShowCurrentRolesStatement + : AnyShow 'CURRENT' 'ROLES' + | AnyShow 'CURRENT' 'ROLES' + ; + +ShowCurrentRolesStatement_EDIT + : AnyShow 'CURRENT' 'CURSOR' + { + parser.suggestKeywords([ 'ROLES' ]); + } + | AnyShow 'CURRENT' 'CURSOR' + { + parser.suggestKeywords([ 'ROLES' ]); + } + ; + +ShowDatabasesStatement + : AnyShow HiveOrImpalaDatabasesOrSchemas 'LIKE' SingleQuotedValue + | AnyShow 'DATABASES' SingleQuotedValue + ; + +ShowDatabasesStatement_EDIT + : AnyShow HiveOrImpalaDatabasesOrSchemas 'CURSOR' + { + parser.suggestKeywords(['LIKE']); + } + ; + +ShowFilesStatement + : AnyShow 'FILES' 'IN' RegularOrBackTickedSchemaQualifiedName OptionalPartitionSpec + { + parser.addTablePrimary($4); + } + ; + +ShowFilesStatement_EDIT + : AnyShow 'FILES' 'CURSOR' + { + parser.suggestKeywords(['IN']); + } + | AnyShow 'FILES' 'IN' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ + appendDot: true + }); + } + | AnyShow 'FILES' 'IN' RegularOrBackTickedSchemaQualifiedName_EDIT OptionalPartitionSpec + | AnyShow 'FILES' 'IN' RegularOrBackTickedSchemaQualifiedName OptionalPartitionSpec 'CURSOR' + { + parser.addTablePrimary($4); + if (!$5) { + parser.suggestKeywords(['PARTITION']); + } + } + | AnyShow 'FILES' 'IN' RegularOrBackTickedSchemaQualifiedName OptionalPartitionSpec_EDIT + | AnyShow 'FILES' 'CURSOR' RegularOrBackTickedSchemaQualifiedName OptionalPartitionSpec + { + parser.addTablePrimary($4); + parser.suggestKeywords(['IN']); + } + ; + +ShowFunctionsStatement + : AnyShow 'FUNCTIONS' + | AnyShow 'FUNCTIONS' DoubleQuotedValue + | AnyShow OptionalAggregateOrAnalytic 'FUNCTIONS' OptionalInDatabase + | AnyShow OptionalAggregateOrAnalytic 'FUNCTIONS' OptionalInDatabase 'LIKE' QuotedValue + ; + +ShowFunctionsStatement_EDIT + : AnyShow AggregateOrAnalytic 'CURSOR' + { + parser.suggestKeywords(['FUNCTIONS']); + } + | AnyShow 'CURSOR' 'FUNCTIONS' OptionalInDatabase + { + parser.suggestKeywords(['AGGREGATE', 'ANALYTICAL']); + } + | AnyShow OptionalAggregateOrAnalytic 'FUNCTIONS' OptionalInDatabase 'CURSOR' + { + if (!$4) { + parser.suggestKeywords(['IN', 'LIKE']); + } else { + parser.suggestKeywords(['LIKE']); + } + } + | AnyShow AggregateOrAnalytic 'CURSOR' OptionalInDatabase 'LIKE' QuotedValue + { + parser.suggestKeywords(['FUNCTIONS']); + } + | AnyShow 'CURSOR' 'FUNCTIONS' OptionalInDatabase 'LIKE' QuotedValue + { + parser.suggestKeywords(['AGGREGATE', 'ANALYTICAL']); + } + | AnyShow OptionalAggregateOrAnalytic 'FUNCTIONS' OptionalInDatabase 'CURSOR' QuotedValue + { + if (!$4) { + parser.suggestKeywords([{ value: 'IN', weight: 2 }, { value: 'LIKE', weight: 1 }]); + } else { + parser.suggestKeywords(['LIKE']); + } + } + ; + +ShowGrantStatement + : AnyShow 'GRANT' OptionalPrincipalName + | AnyShow 'GRANT' OptionalPrincipalName 'ON' 'ALL' + | AnyShow 'GRANT' OptionalPrincipalName 'ON' RegularOrBacktickedIdentifier + | AnyShow 'GRANT' OptionalPrincipalName 'ON' AnyTable RegularOrBacktickedIdentifier + | AnyShow 'GRANT' 'ROLE' RegularOrBacktickedIdentifier + ; + +ShowGrantStatement_EDIT + : AnyShow 'GRANT' OptionalPrincipalName_EDIT + { + parser.suggestKeywords(['ON']); + } + | AnyShow 'GRANT' OptionalPrincipalName_EDIT 'ON' 'ALL' + | AnyShow 'GRANT' OptionalPrincipalName 'ON' 'CURSOR' + { + parser.suggestKeywords(['ALL', 'TABLE']); + parser.suggestTables(); + } + | AnyShow 'GRANT' OptionalPrincipalName 'ON' AnyTable 'CURSOR' + { + parser.suggestTables(); + } + | AnyShow 'GRANT' OptionalPrincipalName 'ON' 'CURSOR' RegularOrBacktickedIdentifier + { + parser.suggestKeywords(['TABLE']); + } + | AnyShow 'GRANT' 'CURSOR' + { + parser.suggestKeywords(['ROLE']); + } + ; + +OptionalPrincipalName + : + | RegularIdentifier + ; + +OptionalPrincipalName_EDIT + : 'CURSOR' + | RegularIdentifier 'CURSOR' + ; + +ShowIndexStatement + : AnyShow OptionallyFormattedIndex 'ON' RegularOrBacktickedIdentifier + | AnyShow OptionallyFormattedIndex 'ON' RegularOrBacktickedIdentifier AnyFromOrIn RegularOrBacktickedIdentifier + ; + +ShowIndexStatement_EDIT + : AnyShow OptionallyFormattedIndex + | AnyShow OptionallyFormattedIndex_EDIT + | AnyShow OptionallyFormattedIndex_EDIT 'ON' RegularOrBacktickedIdentifier + | AnyShow OptionallyFormattedIndex_EDIT 'ON' RegularOrBacktickedIdentifier AnyFromOrIn RegularOrBacktickedIdentifier + | AnyShow OptionallyFormattedIndex 'CURSOR' + { + parser.suggestKeywords(['ON']); + } + | AnyShow OptionallyFormattedIndex 'ON' 'CURSOR' + { + parser.suggestTables(); + } + | AnyShow OptionallyFormattedIndex 'CURSOR' RegularOrBacktickedIdentifier + { + parser.suggestKeywords(['ON']); + } + | AnyShow OptionallyFormattedIndex 'ON' RegularOrBacktickedIdentifier 'CURSOR' + { + parser.suggestKeywords(['FROM', 'IN']); + } + | AnyShow OptionallyFormattedIndex 'ON' RegularOrBacktickedIdentifier 'CURSOR' RegularOrBacktickedIdentifier + { + parser.suggestKeywords(['FROM', 'IN']); + } + | AnyShow OptionallyFormattedIndex 'ON' RegularOrBacktickedIdentifier AnyFromOrIn 'CURSOR' + { + parser.suggestDatabases(); + } + | AnyShow OptionallyFormattedIndex 'ON' 'CURSOR' AnyFromOrIn RegularOrBacktickedIdentifier + { + parser.suggestTables({identifierChain: [{name: $6}]}); + } + ; + +ShowLocksStatement + : AnyShow 'LOCKS' RegularOrBackTickedSchemaQualifiedName + { + parser.addTablePrimary($3); + } + | AnyShow 'LOCKS' RegularOrBackTickedSchemaQualifiedName 'EXTENDED' + { + parser.addTablePrimary($3); + } + | AnyShow 'LOCKS' RegularOrBackTickedSchemaQualifiedName PartitionSpec + { + parser.addTablePrimary($3); + } + | AnyShow 'LOCKS' RegularOrBackTickedSchemaQualifiedName PartitionSpec 'EXTENDED' + { + parser.addTablePrimary($3); + } + | AnyShow 'LOCKS' DatabaseOrSchema RegularOrBacktickedIdentifier + ; + +ShowLocksStatement_EDIT + : AnyShow 'LOCKS' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ + appendDot: true + }); + parser.suggestKeywords(['DATABASE', 'SCHEMA']); + } + | AnyShow 'LOCKS' RegularOrBackTickedSchemaQualifiedName_EDIT + | AnyShow 'LOCKS' RegularOrBackTickedSchemaQualifiedName 'CURSOR' + { + parser.addTablePrimary($3); + parser.suggestKeywords(['EXTENDED', 'PARTITION']); + } + | AnyShow 'LOCKS' RegularOrBackTickedSchemaQualifiedName_EDIT 'EXTENDED' + | AnyShow 'LOCKS' RegularOrBackTickedSchemaQualifiedName_EDIT PartitionSpec + | AnyShow 'LOCKS' RegularOrBackTickedSchemaQualifiedName PartitionSpec 'CURSOR' + { + parser.addTablePrimary($3); + parser.suggestKeywords(['EXTENDED']); + } + | AnyShow 'LOCKS' RegularOrBackTickedSchemaQualifiedName_EDIT PartitionSpec 'EXTENDED' + | AnyShow 'LOCKS' DatabaseOrSchema 'CURSOR' + { + parser.suggestDatabases(); + } + ; + +ShowPartitionsStatement + : AnyShow 'PARTITIONS' RegularOrBackTickedSchemaQualifiedName + { + parser.addTablePrimary($3); + } + | AnyShow 'PARTITIONS' RegularOrBackTickedSchemaQualifiedName PartitionSpec + { + parser.addTablePrimary($3); + } + | AnyShow 'PARTITIONS' RegularOrBackTickedSchemaQualifiedName + { + parser.addTablePrimary($3); + } + | AnyShow 'RANGE' 'PARTITIONS' RegularOrBackTickedSchemaQualifiedName + { + parser.addTablePrimary($3); + } + ; + +ShowPartitionsStatement_EDIT + : AnyShow 'PARTITIONS' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ + appendDot: true + }); + } + | AnyShow 'PARTITIONS' RegularOrBackTickedSchemaQualifiedName_EDIT + | AnyShow 'PARTITIONS' RegularOrBackTickedSchemaQualifiedName 'CURSOR' + { + parser.addTablePrimary($3); + parser.suggestKeywords(['PARTITION']); + } + | AnyShow 'PARTITIONS' RegularOrBackTickedSchemaQualifiedName_EDIT PartitionSpec + | AnyShow 'PARTITIONS' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ + appendDot: true + }); + } + | AnyShow 'PARTITIONS' RegularOrBackTickedSchemaQualifiedName_EDIT + | AnyShow 'RANGE' 'PARTITIONS' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ + appendDot: true + }); + } + | AnyShow 'RANGE' 'PARTITIONS' RegularOrBackTickedSchemaQualifiedName_EDIT + ; + +ShowRoleStatement + : AnyShow 'ROLE' 'GRANT' HiveRoleOrUser RegularIdentifier + | AnyShow 'ROLE' 'GRANT' 'GROUP' RegularIdentifier + ; + +ShowRoleStatement_EDIT + : AnyShow 'ROLE' 'CURSOR' + { + parser.suggestKeywords(['GRANT']); + } + | AnyShow 'ROLE' 'CURSOR' + { + parser.suggestKeywords(['GRANT']); + } + | AnyShow 'ROLE' 'CURSOR' HiveRoleOrUser RegularIdentifier + { + parser.suggestKeywords(['GRANT']); + } + | AnyShow 'ROLE' 'GRANT' 'CURSOR' + { + parser.suggestKeywords(['ROLE', 'USER']); + } + | AnyShow 'ROLE' 'GRANT' 'CURSOR' RegularIdentifier + { + parser.suggestKeywords(['ROLE', 'USER']); + } + | AnyShow 'ROLE' 'GRANT' 'CURSOR' + { + parser.suggestKeywords(['GROUP']); + } + | AnyShow 'ROLE' 'GRANT' 'CURSOR' RegularIdentifier + { + parser.suggestKeywords(['GROUP']); + } + ; + +ShowRolesStatement + : AnyShow 'ROLES' + | AnyShow 'ROLES' + ; + +ShowTableStatement + : AnyShow 'TABLE' 'EXTENDED' OptionalFromDatabase 'LIKE' SingleQuotedValue + | AnyShow 'TABLE' 'EXTENDED' OptionalFromDatabase 'LIKE' SingleQuotedValue PartitionSpec + ; + +ShowTableStatement_EDIT + : AnyShow 'TABLE' 'CURSOR' + { + parser.suggestKeywords(['EXTENDED']); + } + | AnyShow 'TABLE' 'EXTENDED' OptionalFromDatabase + | AnyShow 'TABLE' 'EXTENDED' OptionalFromDatabase_EDIT + | AnyShow 'TABLE' 'EXTENDED' OptionalFromDatabase 'CURSOR' + { + if ($4) { + parser.suggestKeywords(['LIKE']); + } else { + parser.suggestKeywords(['FROM', 'IN', 'LIKE']); + } + } + | AnyShow 'TABLE' 'EXTENDED' OptionalFromDatabase_EDIT 'LIKE' SingleQuotedValue + | AnyShow 'TABLE' 'CURSOR' OptionalFromDatabase 'LIKE' SingleQuotedValue + { + if (parser.isHive()) { + parser.suggestKeywords(['EXTENDED']); + } + } + | AnyShow 'TABLE' 'EXTENDED' OptionalFromDatabase 'CURSOR' SingleQuotedValue + { + parser.suggestKeywords(['LIKE']); + } + | AnyShow 'TABLE' 'EXTENDED' OptionalFromDatabase 'LIKE' SingleQuotedValue 'CURSOR' + { + parser.suggestKeywords(['PARTITION']); + } + | AnyShow 'TABLE' 'EXTENDED' OptionalFromDatabase_EDIT 'LIKE' SingleQuotedValue PartitionSpec + | AnyShow 'TABLE' 'CURSOR' OptionalFromDatabase 'LIKE' SingleQuotedValue PartitionSpec + { + parser.suggestKeywords(['EXTENDED']); + } + | AnyShow 'TABLE' 'EXTENDED' OptionalFromDatabase 'CURSOR' SingleQuotedValue PartitionSpec + { + parser.suggestKeywords(['LIKE']); + } + | AnyShow 'TABLE' 'EXTENDED' OptionalFromDatabase 'LIKE' SingleQuotedValue 'CURSOR' PartitionSpecList + { + parser.suggestKeywords(['PARTITION']); + } + | AnyShow 'TABLE' 'CURSOR' + { + parser.suggestKeywords(['STATS']); + } + | AnyShow 'TABLE' 'STATS' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ + appendDot: true + }); + } + | AnyShow 'TABLE' 'STATS' RegularOrBackTickedSchemaQualifiedName + { + parser.addTablePrimary($4); + } + | AnyShow 'TABLE' 'STATS' RegularOrBackTickedSchemaQualifiedName_EDIT + ; + +ShowTablesStatement + : AnyShow HiveOrImpalaTables OptionalInDatabase + | AnyShow HiveOrImpalaTables OptionalInDatabase SingleQuotedValue + | AnyShow HiveOrImpalaTables OptionalInDatabase 'LIKE' SingleQuotedValue + ; + +ShowTablesStatement_EDIT + : AnyShow HiveOrImpalaTables OptionalInDatabase 'CURSOR' + { + if (!$3) { + parser.suggestKeywords(['IN', 'LIKE']); + } else { + parser.suggestKeywords(['LIKE']); + } + } + ; + +ShowTblPropertiesStatement + : AnyShow 'TBLPROPERTIES' RegularOrBackTickedSchemaQualifiedName + { + parser.addTablePrimary($3); + } + | AnyShow 'TBLPROPERTIES' RegularOrBackTickedSchemaQualifiedName '(' QuotedValue ')' + { + parser.addTablePrimary($3); + } + ; + +ShowTblPropertiesStatement_EDIT + : AnyShow 'TBLPROPERTIES' RegularOrBackTickedSchemaQualifiedName_EDIT + | AnyShow 'TBLPROPERTIES' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ prependDot: true }); + } + ; + +ShowTransactionsStatement + : AnyShow 'TRANSACTIONS' + ; + +ShowViewsStatement + : AnyShow 'VIEWS' OptionalInOrFromDatabase OptionalLike + ; + +ShowViewsStatement_EDIT + : AnyShow 'VIEWS' OptionalInOrFromDatabase OptionalLike 'CURSOR' + { + if (!$4 && !$3) { + parser.suggestKeywords([{ value: 'IN', weight: 2 }, { value: 'FROM', weight: 2 }, { value: 'LIKE', weight: 1 }]); + } else if (!$4) { + parser.suggestKeywords(['LIKE']); + } + } + | AnyShow 'VIEWS' InOrFromDatabase_EDIT OptionalLike + | AnyShow 'VIEWS' OptionalInOrFromDatabase Like_EDIT + ; + +OptionalInOrFromDatabase + : + | 'IN' RegularOrBacktickedIdentifier + { + parser.addDatabaseLocation(@2, [ { name: $2 } ]); + } + | 'FROM' RegularOrBacktickedIdentifier + { + parser.addDatabaseLocation(@2, [ { name: $2 } ]); + } + ; + +InOrFromDatabase_EDIT + : 'IN' 'CURSOR' + { + parser.suggestDatabases(); + } + | 'FROM' 'CURSOR' + { + parser.suggestDatabases(); + } + ; + +OptionalLike + : + | 'LIKE' SingleQuotedValue + ; + +Like_EDIT + : 'LIKE' 'CURSOR' + ; \ No newline at end of file diff --git a/jison/sql_update.jison b/jison/sql_update.jison new file mode 100755 index 0000000..3ff205b --- /dev/null +++ b/jison/sql_update.jison @@ -0,0 +1,138 @@ +// Licensed to Cloudera, Inc. under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. Cloudera, Inc. licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +DataManipulation + : UpdateStatement + ; + +DataManipulation_EDIT + : UpdateStatement_EDIT + ; + +UpdateStatement + : 'UPDATE' TargetTable 'SET' SetClauseList OptionalFromJoinedTable OptionalWhereClause + ; + +UpdateStatement_EDIT + : 'UPDATE' TargetTable_EDIT 'SET' SetClauseList OptionalFromJoinedTable OptionalWhereClause + | 'UPDATE' TargetTable 'SET' SetClauseList_EDIT OptionalFromJoinedTable OptionalWhereClause + | 'UPDATE' TargetTable 'SET' SetClauseList FromJoinedTable_EDIT OptionalWhereClause + | 'UPDATE' TargetTable 'SET' SetClauseList OptionalFromJoinedTable WhereClause_EDIT + | 'UPDATE' TargetTable 'SET' SetClauseList OptionalFromJoinedTable OptionalWhereClause 'CURSOR' + { + if (parser.isImpala() && !$6 && !$5) { + parser.suggestKeywords([{ value: 'FROM', weight: 2 }, { value: 'WHERE', weight: 1 }]); + } else if (parser.isImpala() && !$6 && $5) { + var keywords = [{ value: 'FULL JOIN', weight: 2 }, { value: 'FULL OUTER JOIN', weight: 2 }, { value: 'JOIN', weight: 2 }, { value: 'LEFT JOIN', weight: 2 }, { value: 'LEFT OUTER JOIN', weight: 2 }, { value: 'RIGHT JOIN', weight: 2 }, { value: 'RIGHT OUTER JOIN', weight: 2 }, { value: 'INNER JOIN', weight: 2 }, { value: 'LEFT ANTI JOIN', weight: 2 }, { value: 'LEFT SEMI JOIN', weight: 2 }, { value: 'RIGHT ANTI JOIN', weight: 2 }, { value: 'RIGHT SEMI JOIN', weight: 2 }, { value: 'WHERE', weight: 1 }]; + if ($5.suggestJoinConditions) { + parser.suggestJoinConditions($5.suggestJoinConditions); + } + if ($5.suggestJoins) { + parser.suggestJoins($5.suggestJoins); + } + if ($5.suggestKeywords) { + keywords = keywords.concat(parser.createWeightedKeywords($5.suggestKeywords, 3)); + } + parser.suggestKeywords(keywords); + } else if (!$6) { + parser.suggestKeywords([ 'WHERE' ]); + } + } + | 'UPDATE' TargetTable 'CURSOR' + { + parser.suggestKeywords([ 'SET' ]); + } + | 'UPDATE' TargetTable_EDIT + | 'UPDATE' TargetTable + | 'UPDATE' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + ; + +TargetTable + : TableName + ; + +TargetTable_EDIT + : TableName_EDIT + ; + +TableName + : LocalOrSchemaQualifiedName + { + parser.addTablePrimary($1); + } + ; + +TableName_EDIT + : LocalOrSchemaQualifiedName_EDIT + ; + +SetClauseList + : SetClause + | SetClauseList ',' SetClause + ; + +SetClauseList_EDIT + : SetClause_EDIT + | SetClauseList ',' SetClause_EDIT + | SetClause_EDIT ',' SetClauseList + | SetClauseList ',' SetClause_EDIT ',' SetClauseList + ; + +SetClause + : SetTarget '=' UpdateSource + ; + +SetClause_EDIT + : SetTarget '=' UpdateSource_EDIT + | SetTarget 'CURSOR' + { + parser.suggestKeywords([ '=' ]); + } + | 'CURSOR' + { + parser.suggestColumns(); + } + ; + +SetTarget + : ColumnReference + ; + +UpdateSource + : ValueExpression + ; + +UpdateSource_EDIT + : ValueExpression_EDIT + ; + +OptionalFromJoinedTable + : + | 'FROM' TableReference -> $2 + ; + +FromJoinedTable_EDIT + : 'FROM' 'CURSOR' + { + parser.suggestTables(); + parser.suggestDatabases({ appendDot: true }); + } + | 'FROM' TableReference_EDIT + ; diff --git a/jison/sql_use.jison b/jison/sql_use.jison new file mode 100755 index 0000000..6d0c6d3 --- /dev/null +++ b/jison/sql_use.jison @@ -0,0 +1,47 @@ +// Licensed to Cloudera, Inc. under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. Cloudera, Inc. licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +DataDefinition + : UseStatement + ; + +DataDefinition_EDIT + : UseStatement_EDIT + ; + +AnyUse + : 'USE' + | 'USE' + ; + +UseStatement + : AnyUse RegularIdentifier + { + if (! parser.yy.cursorFound) { + parser.yy.result.useDatabase = $2; + } + } + ; + +UseStatement_EDIT + : AnyUse 'CURSOR' + { + parser.suggestDatabases(); + } + ; + + +// ===================================== Fin ===================================== diff --git a/jison/sql_valueExpression.jison b/jison/sql_valueExpression.jison new file mode 100755 index 0000000..e0fba75 --- /dev/null +++ b/jison/sql_valueExpression.jison @@ -0,0 +1,867 @@ +// Licensed to Cloudera, Inc. under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. Cloudera, Inc. licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +ValueExpression + : 'NOT' ValueExpression + { + // verifyType($2, 'BOOLEAN'); + $$ = { types: [ 'BOOLEAN' ] }; + } + | '!' ValueExpression + { + // verifyType($2, 'BOOLEAN'); + $$ = { types: [ 'BOOLEAN' ] }; + } + | '~' ValueExpression -> $2 + | '-' ValueExpression %prec NEGATION + { + // verifyType($2, 'NUMBER'); + $$ = $2; + $2.types = ['NUMBER']; + } + | ValueExpression 'IS' OptionalNot 'NULL' -> { types: [ 'BOOLEAN' ] } + | ValueExpression 'IS' OptionalNot 'TRUE' -> { types: [ 'BOOLEAN' ] } + | ValueExpression 'IS' OptionalNot 'FALSE' -> { types: [ 'BOOLEAN' ] } + | ValueExpression 'IS' OptionalNot 'UNKNOWN' -> { types: [ 'BOOLEAN' ] } + | ValueExpression 'IS' OptionalNot 'DISTINCT' 'FROM' ValueExpression -> { types: [ 'BOOLEAN' ] } + ; + +ValueExpression_EDIT + : 'NOT' ValueExpression_EDIT -> { types: [ 'BOOLEAN' ], suggestFilters: $2.suggestFilters } + | 'NOT' 'CURSOR' + { + parser.suggestFunctions(); + parser.suggestColumns(); + parser.suggestKeywords(['EXISTS']); + $$ = { types: [ 'BOOLEAN' ] }; + } + | '!' ValueExpression_EDIT -> { types: [ 'BOOLEAN' ], suggestFilters: $2.suggestFilters } + | '!' AnyCursor + { + parser.suggestFunctions({ types: [ 'BOOLEAN' ] }); + parser.suggestColumns({ types: [ 'BOOLEAN' ] }); + $$ = { types: [ 'BOOLEAN' ] }; + } + | '~' ValueExpression_EDIT -> { types: [ 'T' ], suggestFilters: $2.suggestFilters } + | '~' 'PARTIAL_CURSOR' + { + parser.suggestFunctions(); + parser.suggestColumns(); + $$ = { types: [ 'T' ] }; + } + | '-' ValueExpression_EDIT %prec NEGATION + { + if (!$2.typeSet) { + parser.applyTypeToSuggestions('NUMBER'); + } + $$ = { types: [ 'NUMBER' ], suggestFilters: $2.suggestFilters }; + } + | '-' 'PARTIAL_CURSOR' %prec NEGATION + { + parser.suggestFunctions({ types: [ 'NUMBER' ] }); + parser.suggestColumns({ types: [ 'NUMBER' ] }); + $$ = { types: [ 'NUMBER' ] }; + } + | ValueExpression 'IS' 'CURSOR' + { + var keywords = ['FALSE', 'NOT NULL', 'NOT TRUE', 'NOT FALSE', 'NULL', 'TRUE']; + if (parser.isImpala()) { + keywords = keywords.concat(['DISTINCT FROM', 'NOT DISTINCT FROM', 'NOT UNKNOWN', 'UNKNOWN']); + } + parser.suggestKeywords(keywords); + $$ = { types: [ 'BOOLEAN' ] }; + } + | ValueExpression 'IS' 'NOT' 'CURSOR' + { + var keywords = ['FALSE', 'NULL', 'TRUE']; + if (parser.isImpala()) { + keywords = keywords.concat(['DISTINCT FROM', 'UNKNOWN']); + } + parser.suggestKeywords(keywords); + $$ = { types: [ 'BOOLEAN' ] }; + } + | ValueExpression 'IS' OptionalNot 'DISTINCT' 'CURSOR' + { + if (parser.isImpala()) { + parser.suggestKeywords(['FROM']); + } + $$ = { types: [ 'BOOLEAN' ] }; + } + | ValueExpression 'IS' 'CURSOR' 'NULL' + { + parser.suggestKeywords(['NOT']); + $$ = { types: [ 'BOOLEAN' ] }; + } + | ValueExpression 'IS' 'CURSOR' 'FALSE' + { + parser.suggestKeywords(['NOT']); + $$ = { types: [ 'BOOLEAN' ] }; + } + | ValueExpression 'IS' 'CURSOR' 'TRUE' + { + parser.suggestKeywords(['NOT']); + $$ = { types: [ 'BOOLEAN' ] }; + } + | ValueExpression 'IS' OptionalNot 'DISTINCT' 'FROM' PartialBacktickedOrAnyCursor + { + parser.valueExpressionSuggest($1, $3 ? 'IS NOT DISTINCT FROM' : 'IS DISTINCT FROM'); + $$ = { types: [ 'BOOLEAN' ] }; + } + | ValueExpression 'IS' OptionalNot 'DISTINCT' 'FROM' ValueExpression_EDIT + { + $$ = { types: [ 'BOOLEAN' ], suggestFilters: $6.suggestFilters } + } + ; + +// ------------------ EXISTS and parenthesized ------------------ +ValueExpression + : 'EXISTS' TableSubQuery + { + $$ = { types: [ 'BOOLEAN' ] }; + // clear correlated flag after completed sub-query (set by lexer) + parser.yy.correlatedSubQuery = false; + } + | '(' ValueExpression ')' -> $2 + ; + +ValueExpression_EDIT + : 'EXISTS' TableSubQuery_EDIT -> { types: [ 'BOOLEAN' ] } + | '(' ValueExpression_EDIT RightParenthesisOrError + { + $$ = $2; + } + | '(' 'CURSOR' RightParenthesisOrError + { + parser.valueExpressionSuggest(); + $$ = { types: ['T'], typeSet: true }; + } + ; + +// ------------------ COMPARISON ------------------ + +ValueExpression + : ValueExpression '=' ValueExpression + { + parser.addColRefToVariableIfExists($1, $3); + $$ = { types: [ 'BOOLEAN' ] }; + } + | ValueExpression '<' ValueExpression + { + parser.addColRefToVariableIfExists($1, $3); + $$ = { types: [ 'BOOLEAN' ] }; + } + | ValueExpression '>' ValueExpression + { + parser.addColRefToVariableIfExists($1, $3); + $$ = { types: [ 'BOOLEAN' ] }; + } + | ValueExpression 'COMPARISON_OPERATOR' ValueExpression + { + parser.addColRefToVariableIfExists($1, $3); + $$ = { types: [ 'BOOLEAN' ] }; + } + ; + +ValueExpression_EDIT + : 'CURSOR' '=' ValueExpression + { + parser.valueExpressionSuggest($3, $2); + parser.applyTypeToSuggestions($3.types); + $$ = { types: [ 'BOOLEAN' ], typeSet: true }; + } + | 'CURSOR' '<' ValueExpression + { + parser.valueExpressionSuggest($3, $2); + parser.applyTypeToSuggestions($3.types); + $$ = { types: [ 'BOOLEAN' ], typeSet: true }; + } + | 'CURSOR' '>' ValueExpression + { + parser.valueExpressionSuggest($3, $2); + parser.applyTypeToSuggestions($3.types); + $$ = { types: [ 'BOOLEAN' ], typeSet: true }; + } + | 'CURSOR' 'COMPARISON_OPERATOR' ValueExpression + { + parser.valueExpressionSuggest($3, $2); + parser.applyTypeToSuggestions($3.types); + $$ = { types: [ 'BOOLEAN' ], typeSet: true }; + } + | ValueExpression_EDIT '=' ValueExpression + { + if (!$1.typeSet) { + parser.applyTypeToSuggestions($3.types); + parser.addColRefIfExists($3); + } + $$ = { types: [ 'BOOLEAN' ], suggestFilters: $1.suggestFilters } + } + | ValueExpression_EDIT '<' ValueExpression + { + if (!$1.typeSet) { + parser.applyTypeToSuggestions($3.types); + parser.addColRefIfExists($3); + } + $$ = { types: [ 'BOOLEAN' ], suggestFilters: $1.suggestFilters } + } + | ValueExpression_EDIT '>' ValueExpression + { + if (!$1.typeSet) { + parser.applyTypeToSuggestions($3.types); + parser.addColRefIfExists($3); + } + $$ = { types: [ 'BOOLEAN' ], suggestFilters: $1.suggestFilters } + } + | ValueExpression_EDIT 'COMPARISON_OPERATOR' ValueExpression + { + if (!$1.typeSet) { + parser.applyTypeToSuggestions($3.types); + parser.addColRefIfExists($3); + } + $$ = { types: [ 'BOOLEAN' ], suggestFilters: $1.suggestFilters } + } + | ValueExpression '=' PartialBacktickedOrAnyCursor + { + parser.valueExpressionSuggest($1, $2); + parser.applyTypeToSuggestions($1.types); + $$ = { types: [ 'BOOLEAN' ], typeSet: true }; + } + | ValueExpression '<' PartialBacktickedOrAnyCursor + { + parser.valueExpressionSuggest($1, $2); + parser.applyTypeToSuggestions($1.types); + $$ = { types: [ 'BOOLEAN' ] , typeSet: true, endsWithLessThanOrEqual: true }; + } + | ValueExpression '>' PartialBacktickedOrAnyCursor + { + parser.valueExpressionSuggest($1, $2); + parser.applyTypeToSuggestions($1.types); + $$ = { types: [ 'BOOLEAN' ], typeSet: true }; + } + | ValueExpression 'COMPARISON_OPERATOR' PartialBacktickedOrAnyCursor + { + parser.valueExpressionSuggest($1, $2); + parser.applyTypeToSuggestions($1.types); + $$ = { types: [ 'BOOLEAN' ], typeSet: true, endsWithLessThanOrEqual: $2 === '<=' }; + } + | ValueExpression '=' ValueExpression_EDIT + { + if (!$3.typeSet) { + parser.applyTypeToSuggestions($1.types); + parser.addColRefIfExists($1); + } + $$ = { types: [ 'BOOLEAN' ], suggestFilters: $3.suggestFilters } + } + | ValueExpression '<' ValueExpression_EDIT + { + if (!$3.typeSet) { + parser.applyTypeToSuggestions($1.types); + parser.addColRefIfExists($1); + } + $$ = { types: [ 'BOOLEAN' ], suggestFilters: $3.suggestFilters } + } + | ValueExpression '>' ValueExpression_EDIT + { + if (!$3.typeSet) { + parser.applyTypeToSuggestions($1.types); + parser.addColRefIfExists($1); + } + $$ = { types: [ 'BOOLEAN' ], suggestFilters: $3.suggestFilters } + } + | ValueExpression 'COMPARISON_OPERATOR' ValueExpression_EDIT + { + if (!$3.typeSet) { + parser.applyTypeToSuggestions($1.types); + parser.addColRefIfExists($1); + } + $$ = { types: [ 'BOOLEAN' ], suggestFilters: $3.suggestFilters } + } + ; + + +// ------------------ IN ------------------ + +ValueExpression + : ValueExpression 'NOT' 'IN' '(' TableSubQueryInner ')' -> { types: [ 'BOOLEAN' ] } + | ValueExpression 'NOT' 'IN' '(' ValueExpressionList ')' -> { types: [ 'BOOLEAN' ] } + | ValueExpression 'IN' '(' TableSubQueryInner ')' -> { types: [ 'BOOLEAN' ] } + | ValueExpression 'IN' '(' ValueExpressionList ')' -> { types: [ 'BOOLEAN' ] } + ; + +ValueExpression_EDIT + : ValueExpression 'NOT' 'IN' ValueExpressionInSecondPart_EDIT + { + if ($4.inValueEdit) { + parser.valueExpressionSuggest($1, $2 + ' ' + $3); + parser.applyTypeToSuggestions($1.types); + } + if ($4.cursorAtStart) { + parser.suggestKeywords(['SELECT']); + } + $$ = { types: [ 'BOOLEAN' ], typeSet: true }; + } + | ValueExpression 'IN' ValueExpressionInSecondPart_EDIT + { + if ($3.inValueEdit) { + parser.valueExpressionSuggest($1, $2); + parser.applyTypeToSuggestions($1.types); + } + if ($3.cursorAtStart) { + parser.suggestKeywords(['SELECT']); + } + $$ = { types: [ 'BOOLEAN' ], typeSet: true }; + } + | ValueExpression_EDIT 'NOT' 'IN' '(' ValueExpressionList RightParenthesisOrError -> { types: [ 'BOOLEAN' ], suggestFilters: $1.suggestFilters } + | ValueExpression_EDIT 'NOT' 'IN' '(' TableSubQueryInner RightParenthesisOrError -> { types: [ 'BOOLEAN' ], suggestFilters: $1.suggestFilters } + | ValueExpression_EDIT 'IN' '(' ValueExpressionList RightParenthesisOrError -> { types: [ 'BOOLEAN' ], suggestFilters: $1.suggestFilters } + | ValueExpression_EDIT 'IN' '(' TableSubQueryInner RightParenthesisOrError -> { types: [ 'BOOLEAN' ], suggestFilters: $1.suggestFilters } + ; + +ValueExpressionInSecondPart_EDIT + : '(' TableSubQueryInner_EDIT RightParenthesisOrError + | '(' ValueExpressionList_EDIT RightParenthesisOrError -> { inValueEdit: true } + | '(' AnyCursor RightParenthesisOrError -> { inValueEdit: true, cursorAtStart: true } + ; + +// ------------------ BETWEEN ------------------ + +ValueExpression + : ValueExpression 'NOT' 'BETWEEN' ValueExpression 'BETWEEN_AND' ValueExpression -> { types: [ 'BOOLEAN' ] } + | ValueExpression 'BETWEEN' ValueExpression 'BETWEEN_AND' ValueExpression -> { types: [ 'BOOLEAN' ] } + ; + +ValueExpression_EDIT + : ValueExpression_EDIT 'NOT' 'BETWEEN' ValueExpression 'BETWEEN_AND' ValueExpression + { + if ($4.types[0] === $6.types[0] && !$1.typeSet) { + parser.applyTypeToSuggestions($4.types); + } + $$ = { types: [ 'BOOLEAN' ], suggestFilters: $1.suggestFilters }; + } + | ValueExpression 'NOT' 'BETWEEN' ValueExpression_EDIT 'BETWEEN_AND' ValueExpression + { + if ($1.types[0] === $6.types[0] && !$4.typeSet) { + parser.applyTypeToSuggestions($1.types); + } + $$ = { types: [ 'BOOLEAN' ], suggestFilters: $4.suggestFilters }; + } + | ValueExpression 'NOT' 'BETWEEN' ValueExpression 'BETWEEN_AND' ValueExpression_EDIT + { + if ($1.types[0] === $4.types[0] && !$6.typeSet) { + parser.applyTypeToSuggestions($1.types); + } + $$ = { types: [ 'BOOLEAN' ], suggestFilters: $6.suggestFilters }; + } + | ValueExpression 'NOT' 'BETWEEN' ValueExpression 'BETWEEN_AND' 'CURSOR' + { + parser.valueExpressionSuggest($1, $5); + $$ = { types: [ 'BOOLEAN' ], typeSet: true }; + } + | ValueExpression 'NOT' 'BETWEEN' ValueExpression 'CURSOR' + { + parser.suggestValueExpressionKeywords($4, ['AND']); + $$ = { types: [ 'BOOLEAN' ] }; + } + | ValueExpression 'NOT' 'BETWEEN' 'CURSOR' + { + parser.valueExpressionSuggest($1, $2 + ' ' + $3); + $$ = { types: [ 'BOOLEAN' ], typeSet: true }; + } + | ValueExpression_EDIT 'BETWEEN' ValueExpression 'BETWEEN_AND' ValueExpression + { + if ($1.types[0] === $3.types[0] && !$1.typeSet) { + parser.applyTypeToSuggestions($1.types) + } + $$ = { types: [ 'BOOLEAN' ], suggestFilters: $1.suggestFilters }; + } + | ValueExpression 'BETWEEN' ValueExpression_EDIT 'BETWEEN_AND' ValueExpression + { + if ($1.types[0] === $3.types[0] && !$3.typeSet) { + parser.applyTypeToSuggestions($1.types) + } + $$ = { types: [ 'BOOLEAN' ], suggestFilters: $3.suggestFilters }; + } + | ValueExpression 'BETWEEN' ValueExpression 'BETWEEN_AND' ValueExpression_EDIT + { + if ($1.types[0] === $3.types[0] && !$5.typeSet) { + parser.applyTypeToSuggestions($1.types) + } + $$ = { types: [ 'BOOLEAN' ], suggestFilters: $5.suggestFilters }; + } + | ValueExpression 'BETWEEN' ValueExpression 'BETWEEN_AND' 'CURSOR' + { + parser.valueExpressionSuggest($1, $4); + parser.applyTypeToSuggestions($1.types); + $$ = { types: [ 'BOOLEAN' ], typeSet: true }; + } + | ValueExpression 'BETWEEN' ValueExpression 'CURSOR' + { + parser.suggestValueExpressionKeywords($3, ['AND']); + $$ = { types: [ 'BOOLEAN' ] }; + } + | ValueExpression 'BETWEEN' 'CURSOR' + { + parser.valueExpressionSuggest($1, $2); + parser.applyTypeToSuggestions($1.types); + $$ = { types: [ 'BOOLEAN' ], typeSet: true }; + } + ; + +// ------------------ BOOLEAN ------------------ + +ValueExpression + : ValueExpression 'OR' ValueExpression + { + // verifyType($1, 'BOOLEAN'); + // verifyType($3, 'BOOLEAN'); + $$ = { types: [ 'BOOLEAN' ] }; + } + | ValueExpression 'AND' ValueExpression + { + // verifyType($1, 'BOOLEAN'); + // verifyType($3, 'BOOLEAN'); + $$ = { types: [ 'BOOLEAN' ] }; + } + ; + +ValueExpression_EDIT + : 'CURSOR' 'OR' ValueExpression + { + parser.valueExpressionSuggest(undefined, $2); + $$ = { types: [ 'BOOLEAN' ], typeSet: true, suggestFilters: true }; + } + | ValueExpression_EDIT 'OR' ValueExpression + { + parser.addColRefIfExists($3); + $$ = { types: [ 'BOOLEAN' ], suggestFilters: $1.suggestFilters } + } + | ValueExpression 'OR' PartialBacktickedOrAnyCursor + { + parser.valueExpressionSuggest(undefined, $2); + $$ = { types: [ 'BOOLEAN' ], typeSet: true, suggestFilters: true }; + } + | ValueExpression 'OR' ValueExpression_EDIT + { + parser.addColRefIfExists($1); + $$ = { types: [ 'BOOLEAN' ], suggestFilters: $3.suggestFilters } + } + | 'CURSOR' 'AND' ValueExpression + { + parser.valueExpressionSuggest(undefined, $2); + $$ = { types: [ 'BOOLEAN' ], typeSet: true, suggestFilters: true }; + } + | ValueExpression_EDIT 'AND' ValueExpression + { + parser.addColRefIfExists($3); + $$ = { types: [ 'BOOLEAN' ], suggestFilters: $1.suggestFilters } + } + | ValueExpression 'AND' PartialBacktickedOrAnyCursor + { + parser.valueExpressionSuggest(undefined, $2); + $$ = { types: [ 'BOOLEAN' ], typeSet: true, suggestFilters: true }; + } + | ValueExpression 'AND' ValueExpression_EDIT + { + parser.addColRefIfExists($1); + $$ = { types: [ 'BOOLEAN' ], suggestFilters: $3.suggestFilters } + } + ; + +// ------------------ ARITHMETIC ------------------ + +ValueExpression + : ValueExpression '-' ValueExpression + { + // verifyType($1, 'NUMBER'); + // verifyType($3, 'NUMBER'); + $$ = { types: [ 'NUMBER' ] }; + } + | ValueExpression '*' ValueExpression + { + // verifyType($1, 'NUMBER'); + // verifyType($3, 'NUMBER'); + $$ = { types: [ 'NUMBER' ] }; + } + | ValueExpression 'ARITHMETIC_OPERATOR' ValueExpression + { + // verifyType($1, 'NUMBER'); + // verifyType($3, 'NUMBER'); + $$ = { types: [ 'NUMBER' ] }; + } + ; + +ValueExpression_EDIT + : 'CURSOR' '*' ValueExpression + { + parser.valueExpressionSuggest(undefined, $2); + parser.applyTypeToSuggestions([ 'NUMBER' ]); + $$ = { types: [ 'NUMBER' ], typeSet: true }; + } + | 'CURSOR' 'ARITHMETIC_OPERATOR' ValueExpression + { + parser.valueExpressionSuggest(undefined, $2); + parser.applyTypeToSuggestions([ 'NUMBER' ]); + $$ = { types: [ 'NUMBER' ], typeSet: true }; + } + | ValueExpression_EDIT '-' ValueExpression + { + if (!$1.typeSet) { + parser.applyTypeToSuggestions(['NUMBER']); + parser.addColRefIfExists($3); + } + $$ = { types: [ 'NUMBER' ], suggestFilters: $1.suggestFilters } + } + | ValueExpression_EDIT '*' ValueExpression + { + if (!$1.typeSet) { + parser.applyTypeToSuggestions(['NUMBER']); + parser.addColRefIfExists($3); + } + $$ = { types: [ 'NUMBER' ], suggestFilters: $1.suggestFilters } + } + | ValueExpression_EDIT 'ARITHMETIC_OPERATOR' ValueExpression + { + if (!$1.typeSet) { + parser.applyTypeToSuggestions(['NUMBER']); + parser.addColRefIfExists($3); + } + $$ = { types: [ 'NUMBER' ], suggestFilters: $1.suggestFilters } + } + | ValueExpression '-' PartialBacktickedOrAnyCursor + { + parser.valueExpressionSuggest(undefined, $2); + parser.applyTypeToSuggestions(['NUMBER']); + $$ = { types: [ 'NUMBER' ], typeSet: true }; + } + | ValueExpression '*' PartialBacktickedOrAnyCursor + { + parser.valueExpressionSuggest(undefined, $2); + parser.applyTypeToSuggestions(['NUMBER']); + $$ = { types: [ 'NUMBER' ], typeSet: true }; + } + | ValueExpression 'ARITHMETIC_OPERATOR' PartialBacktickedOrAnyCursor + { + parser.valueExpressionSuggest(undefined, $2); + parser.applyTypeToSuggestions(['NUMBER']); + $$ = { types: [ 'NUMBER' ], typeSet: true }; + } + | ValueExpression '-' ValueExpression_EDIT + { + if (!$3.typeSet) { + parser.applyTypeToSuggestions(['NUMBER']); + parser.addColRefIfExists($1); + } + $$ = { types: [ 'NUMBER' ], suggestFilters: $3.suggestFilters }; + } + | ValueExpression '*' ValueExpression_EDIT + { + if (!$3.typeSet) { + parser.applyTypeToSuggestions(['NUMBER']); + parser.addColRefIfExists($1); + } + $$ = { types: [ 'NUMBER' ], suggestFilters: $3.suggestFilters }; + } + | ValueExpression 'ARITHMETIC_OPERATOR' ValueExpression_EDIT + { + if (!$3.typeSet) { + parser.applyTypeToSuggestions(['NUMBER']); + parser.addColRefIfExists($1); + } + $$ = { types: [ 'NUMBER' ], suggestFilters: $3.suggestFilters }; + } + ; + +// ------------------ LIKE, RLIKE and REGEXP ------------------ + +ValueExpression + : ValueExpression LikeRightPart -> { types: [ 'BOOLEAN' ] } + | ValueExpression 'NOT' LikeRightPart -> { types: [ 'BOOLEAN' ] } + ; + +LikeRightPart + : 'LIKE' ValueExpression -> { suggestKeywords: ['NOT'] } + | 'ILIKE' ValueExpression -> { suggestKeywords: ['NOT'] } + | 'IREGEXP' ValueExpression -> { suggestKeywords: ['NOT'] } + | 'RLIKE' ValueExpression -> { suggestKeywords: ['NOT'] } + | 'REGEXP' ValueExpression -> { suggestKeywords: ['NOT'] } + ; + +LikeRightPart_EDIT + : 'LIKE' ValueExpression_EDIT + | 'ILIKE' ValueExpression_EDIT + | 'IREGEXP' ValueExpression_EDIT + | 'RLIKE' ValueExpression_EDIT + | 'REGEXP' ValueExpression_EDIT + | 'LIKE' PartialBacktickedOrCursor + { + parser.suggestFunctions({ types: [ 'STRING' ] }); + parser.suggestColumns({ types: [ 'STRING' ] }); + $$ = { types: ['BOOLEAN'] } + } + | 'ILIKE' PartialBacktickedOrCursor + { + parser.suggestFunctions({ types: [ 'STRING' ] }); + parser.suggestColumns({ types: [ 'STRING' ] }); + $$ = { types: ['BOOLEAN'] } + } + | 'IREGEXP' PartialBacktickedOrCursor + { + parser.suggestFunctions({ types: [ 'STRING' ] }); + parser.suggestColumns({ types: [ 'STRING' ] }); + $$ = { types: ['BOOLEAN'] } + } + | 'RLIKE' PartialBacktickedOrCursor + { + parser.suggestFunctions({ types: [ 'STRING' ] }); + parser.suggestColumns({ types: [ 'STRING' ] }); + $$ = { types: ['BOOLEAN'] } + } + | 'REGEXP' PartialBacktickedOrCursor + { + parser.suggestFunctions({ types: [ 'STRING' ] }); + parser.suggestColumns({ types: [ 'STRING' ] }); + $$ = { types: ['BOOLEAN'] } + } + ; + +ValueExpression_EDIT + : ValueExpression_EDIT LikeRightPart -> { types: [ 'BOOLEAN' ], suggestFilters: $1.suggestFilters } + | ValueExpression_EDIT 'NOT' LikeRightPart -> { types: [ 'BOOLEAN' ], suggestFilters: $1.suggestFilters } + | ValueExpression LikeRightPart_EDIT -> { types: [ 'BOOLEAN' ] } + | ValueExpression 'NOT' LikeRightPart_EDIT -> { types: [ 'BOOLEAN' ] } + | 'CURSOR' LikeRightPart + { + parser.valueExpressionSuggest(undefined, $2); + parser.applyTypeToSuggestions([ 'STRING' ]); + $$ = { types: [ 'BOOLEAN' ], typeSet: true }; + } + | 'CURSOR' 'NOT' LikeRightPart + { + parser.valueExpressionSuggest(undefined, $2 + ' ' + $3); + parser.applyTypeToSuggestions([ 'STRING' ]); + $$ = { types: [ 'BOOLEAN' ], typeSet: true }; + } + ; + +// ------------------ CASE, WHEN, THEN ------------------ + +ValueExpression + : 'CASE' CaseRightPart -> $2 + | 'CASE' ValueExpression CaseRightPart -> $3 + ; + +ValueExpression_EDIT + : 'CASE' CaseRightPart_EDIT -> $2 + | 'CASE' 'CURSOR' EndOrError + { + parser.valueExpressionSuggest(); + parser.suggestKeywords(['WHEN']); + $$ = { types: [ 'T' ], typeSet: true }; + } + | 'CASE' ValueExpression CaseRightPart_EDIT -> $3 + | 'CASE' ValueExpression 'CURSOR' EndOrError + { + parser.suggestValueExpressionKeywords($2, ['WHEN']); + $$ = { types: [ 'T' ], typeSet: true }; + } + | 'CASE' ValueExpression_EDIT CaseRightPart + { + $$ = $3; + $$.suggestFilters = $2.suggestFilters; + } + | 'CASE' ValueExpression_EDIT EndOrError -> { types: [ 'T' ], suggestFilters: $2.suggestFilters } + | 'CASE' 'CURSOR' CaseRightPart -> { types: [ 'T' ] } + ; + +CaseRightPart + : CaseWhenThenList 'END' -> parser.findCaseType($1) + | CaseWhenThenList 'ELSE' ValueExpression 'END' + { + $1.caseTypes.push($3); + $$ = parser.findCaseType($1); + } + ; + +CaseRightPart_EDIT + : CaseWhenThenList_EDIT EndOrError -> parser.findCaseType($1) + | CaseWhenThenList 'ELSE' ValueExpression 'CURSOR' + { + parser.suggestValueExpressionKeywords($3, ['END']); + $1.caseTypes.push($3); + $$ = parser.findCaseType($1); + } + | CaseWhenThenList_EDIT 'ELSE' ValueExpression EndOrError + { + $1.caseTypes.push($3); + $$ = parser.findCaseType($1); + } + | CaseWhenThenList_EDIT 'ELSE' EndOrError -> parser.findCaseType($1) + | CaseWhenThenList 'CURSOR' ValueExpression EndOrError + { + if ($4.toLowerCase() !== 'end') { + parser.suggestValueExpressionKeywords($1, [{ value: 'END', weight: 3 }, { value: 'ELSE', weight: 2 }, { value: 'WHEN', weight: 1 }]); + } else { + parser.suggestValueExpressionKeywords($1, [{ value: 'ELSE', weight: 2 }, { value: 'WHEN', weight: 1 }]); + } + $$ = parser.findCaseType($1); + } + | CaseWhenThenList 'CURSOR' EndOrError + { + if ($3.toLowerCase() !== 'end') { + parser.suggestValueExpressionKeywords($1, [{ value: 'END', weight: 3 }, { value: 'ELSE', weight: 2 }, { value: 'WHEN', weight: 1 }]); + } else { + parser.suggestValueExpressionKeywords($1, [{ value: 'ELSE', weight: 2 }, { value: 'WHEN', weight: 1 }]); + } + $$ = parser.findCaseType($1); + } + | CaseWhenThenList 'ELSE' ValueExpression_EDIT EndOrError + { + $1.caseTypes.push($3); + $$ = parser.findCaseType($1); + $$.suggestFilters = $3.suggestFilters + } + | CaseWhenThenList 'ELSE' 'CURSOR' EndOrError + { + parser.valueExpressionSuggest(); + $$ = parser.findCaseType($1); + } + | 'ELSE' 'CURSOR' EndOrError + { + parser.valueExpressionSuggest(); + $$ = { types: [ 'T' ], typeSet: true }; + } + | 'CURSOR' 'ELSE' ValueExpression EndOrError + { + parser.valueExpressionSuggest(); + parser.suggestKeywords(['WHEN']); + $$ = $3; + } + | 'CURSOR' 'ELSE' EndOrError + { + parser.valueExpressionSuggest(); + parser.suggestKeywords(['WHEN']); + $$ = { types: [ 'T' ] }; + } + ; + +EndOrError + : 'END' + | error + ; + +CaseWhenThenList + : CaseWhenThenListPartTwo -> { caseTypes: [ $1 ], lastType: $1 } + | CaseWhenThenList CaseWhenThenListPartTwo + { + $1.caseTypes.push($2); + $$ = { caseTypes: $1.caseTypes, lastType: $2 }; + } + ; + +CaseWhenThenList_EDIT + : CaseWhenThenListPartTwo_EDIT + | CaseWhenThenList CaseWhenThenListPartTwo_EDIT + | CaseWhenThenList CaseWhenThenListPartTwo_EDIT CaseWhenThenList + | CaseWhenThenList 'CURSOR' CaseWhenThenList + { + parser.suggestValueExpressionKeywords($1, ['WHEN']); + } + | CaseWhenThenListPartTwo_EDIT CaseWhenThenList -> $2 + ; + +CaseWhenThenListPartTwo + : 'WHEN' ValueExpression 'THEN' ValueExpression -> $4 + ; + +CaseWhenThenListPartTwo_EDIT + : 'WHEN' ValueExpression_EDIT -> { caseTypes: [{ types: ['T'] }], suggestFilters: $2.suggestFilters } + | 'WHEN' ValueExpression_EDIT 'THEN' -> { caseTypes: [{ types: ['T'] }], suggestFilters: $2.suggestFilters } + | 'WHEN' ValueExpression_EDIT 'THEN' ValueExpression -> { caseTypes: [$4], suggestFilters: $2.suggestFilters } + | 'WHEN' ValueExpression 'THEN' ValueExpression_EDIT -> { caseTypes: [$4], suggestFilters: $4.suggestFilters } + | 'WHEN' 'THEN' ValueExpression_EDIT -> { caseTypes: [$3], suggestFilters: $3.suggestFilters } + | 'CURSOR' ValueExpression 'THEN' + { + parser.suggestKeywords(['WHEN']); + $$ = { caseTypes: [{ types: ['T'] }] }; + } + | 'CURSOR' ValueExpression 'THEN' ValueExpression + { + parser.suggestKeywords(['WHEN']); + $$ = { caseTypes: [$4] }; + } + | 'CURSOR' 'THEN' + { + parser.valueExpressionSuggest(); + parser.suggestKeywords(['WHEN']); + $$ = { caseTypes: [{ types: ['T'] }] }; + } + | 'CURSOR' 'THEN' ValueExpression + { + parser.valueExpressionSuggest(); + parser.suggestKeywords(['WHEN']); + $$ = { caseTypes: [{ types: ['T'] }] }; + } + | 'WHEN' 'CURSOR' + { + parser.valueExpressionSuggest(); + $$ = { caseTypes: [{ types: ['T'] }], suggestFilters: true }; + } + | 'WHEN' 'CURSOR' ValueExpression + { + parser.valueExpressionSuggest(); + parser.suggestKeywords(['THEN']); + $$ = { caseTypes: [{ types: ['T'] }], suggestFilters: true }; + } + | 'WHEN' 'CURSOR' 'THEN' + { + parser.valueExpressionSuggest(); + $$ = { caseTypes: [{ types: ['T'] }], suggestFilters: true }; + } + | 'WHEN' 'CURSOR' 'THEN' ValueExpression + { + parser.valueExpressionSuggest(); + $$ = { caseTypes: [$4], suggestFilters: true }; + } + | 'WHEN' ValueExpression 'CURSOR' + { + parser.suggestValueExpressionKeywords($2, ['THEN']); + $$ = { caseTypes: [{ types: ['T'] }] }; + } + | 'WHEN' ValueExpression 'CURSOR' ValueExpression + { + parser.suggestValueExpressionKeywords($2, ['THEN']); + $$ = { caseTypes: [{ types: ['T'] }] }; + } + | 'WHEN' ValueExpression 'THEN' 'CURSOR' + { + parser.valueExpressionSuggest(); + $$ = { caseTypes: [{ types: ['T'] }] }; + } + | 'WHEN' ValueExpression 'THEN' 'CURSOR' ValueExpression + { + parser.valueExpressionSuggest(); + $$ = { caseTypes: [{ types: ['T'] }] }; + } + | 'WHEN' 'THEN' 'CURSOR' ValueExpression + { + parser.valueExpressionSuggest(); + $$ = { caseTypes: [{ types: ['T'] }] }; + } + | 'WHEN' 'THEN' 'CURSOR' + { + parser.valueExpressionSuggest(); + $$ = { caseTypes: [{ types: ['T'] }] }; + } + ; \ No newline at end of file diff --git a/jison/syntax_footer.jison b/jison/syntax_footer.jison new file mode 100755 index 0000000..6f568d3 --- /dev/null +++ b/jison/syntax_footer.jison @@ -0,0 +1,18 @@ +// Licensed to Cloudera, Inc. under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. Cloudera, Inc. licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +%% +SqlParseSupport.initSyntaxParser(parser); diff --git a/jison/syntax_header.jison b/jison/syntax_header.jison new file mode 100755 index 0000000..2594569 --- /dev/null +++ b/jison/syntax_header.jison @@ -0,0 +1,28 @@ +// Licensed to Cloudera, Inc. under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. Cloudera, Inc. licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +%left 'AND' 'OR' +%left 'BETWEEN' +%left 'NOT' '!' '~' +%left '=' '<' '>' 'COMPARISON_OPERATOR' +%left '-' '*' 'ARITHMETIC_OPERATOR' + +%left ';' ',' +%nonassoc 'IN' 'IS' 'ILIKE' 'IREGEXP' 'LIKE' 'RLIKE' 'REGEXP' 'EXISTS' NEGATION + +%start SqlSyntax + +%% \ No newline at end of file diff --git a/lib/.DS_Store b/lib/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0