All Downloads are FREE. Search and download functionalities are using the official Maven repository.

xtdb.antlr.Sql Maven / Gradle / Ivy

There is a newer version: 2.0.0-beta4
Show newest version
// Generated from xtdb/antlr/Sql.g4 by ANTLR 4.13.1
package xtdb.antlr;
import org.antlr.v4.runtime.atn.*;
import org.antlr.v4.runtime.dfa.DFA;
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.misc.*;
import org.antlr.v4.runtime.tree.*;
import java.util.List;
import java.util.Iterator;
import java.util.ArrayList;

@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"})
public class Sql extends Parser {
	static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); }

	protected static final DFA[] _decisionToDFA;
	protected static final PredictionContextCache _sharedContextCache =
		new PredictionContextCache();
	public static final int
		BLOCK_COMMENT=1, LINE_COMMENT=2, WHITESPACE=3, UNSIGNED_FLOAT=4, UNSIGNED_INTEGER=5, 
		CHARACTER_STRING=6, C_ESCAPES_STRING=7, BINARY_STRING=8, POSTGRES_PARAMETER_SPECIFICATION=9, 
		COMMA=10, DOT=11, SEMI=12, COLON=13, QUESTION=14, LPAREN=15, RPAREN=16, 
		LBRACK=17, RBRACK=18, LBRACE=19, RBRACE=20, CONCAT=21, TILDE=22, AMPERSAND=23, 
		PLUS=24, MINUS=25, ASTERISK=26, SOLIDUS=27, BITWISE_OR=28, BITWISE_XOR=29, 
		BITWISE_SHIFT_LEFT=30, BITWISE_SHIFT_RIGHT=31, EQUAL=32, NOT_EQUAL=33, 
		LT_GT=34, LT=35, GT=36, LE=37, GE=38, PG_CAST=39, PG_REGEX_I=40, PG_NOT_REGEX=41, 
		PG_NOT_REGEX_I=42, ABS=43, ACOS=44, AGE=45, ALL=46, AND=47, ANY=48, ARRAY=49, 
		ARRAY_AGG=50, ARRAY_UPPER=51, ARROW_TABLE=52, AS=53, ASC=54, ASIN=55, 
		ASSERT=56, ASYMMETRIC=57, AT=58, ATAN=59, AVG=60, BASIS=61, BEGIN=62, 
		BEGIN_FRAME=63, BEGIN_PARTITION=64, BETWEEN=65, BIGINT=66, BOOLEAN=67, 
		BOOL_AND=68, BOOL_OR=69, BOTH=70, BY=71, CARDINALITY=72, CASE=73, CAST=74, 
		CEIL=75, CEILING=76, CENTURY=77, CHARACTERISTICS=78, CHARACTERS=79, CHARACTER_LENGTH=80, 
		CHAR_LENGTH=81, COALESCE=82, COMMIT=83, COMMITTED=84, CONTAINS=85, COS=86, 
		COSH=87, COUNT=88, CROSS=89, CUME_DIST=90, CURRENT=91, CURRENT_DATABASE=92, 
		CURRENT_DATE=93, CURRENT_ROW=94, CURRENT_SCHEMA=95, CURRENT_SCHEMAS=96, 
		CURRENT_TIME=97, CURRENT_TIMESTAMP=98, CURRENT_USER=99, DATE=100, DATE_BIN=101, 
		DATE_TRUNC=102, DAY=103, DEC=104, DECADE=105, DECIMAL=106, DEFAULT=107, 
		DELETE=108, DENSE_RANK=109, DESC=110, DISTINCT=111, DOUBLE=112, DURATION=113, 
		ELSE=114, END=115, END_FRAME=116, END_PARTITION=117, EQUALS=118, ERASE=119, 
		ESCAPE=120, EVERY=121, EXCEPT=122, EXCLUDE=123, EXISTS=124, EXP=125, EXTRACT=126, 
		FALSE=127, FETCH=128, FIRST=129, FIRST_VALUE=130, FLAG=131, FLOAT=132, 
		FLOOR=133, FOLLOWING=134, FOR=135, FRAME_ROW=136, FROM=137, FULL=138, 
		GENERATE_SERIES=139, GREATEST=140, GROUP=141, GROUPS=142, HAS_ANY_COLUMN_PRIVILEGE=143, 
		HAS_SCHEMA_PRIVILEGE=144, HAS_TABLE_PRIVILEGE=145, HAVING=146, HOUR=147, 
		IGNORE=148, IMMEDIATELY=149, IN=150, INNER=151, INSERT=152, INT=153, INTEGER=154, 
		INTERSECT=155, INTERVAL=156, INTO=157, IS=158, ISOLATION=159, JOIN=160, 
		LAG=161, LAST=162, LAST_VALUE=163, LATERAL=164, LATEST=165, LEAD=166, 
		LEADING=167, LEAST=168, LEFT=169, LENGTH=170, LEVEL=171, LIKE=172, LIKE_REGEX=173, 
		LIMIT=174, LN=175, LOCAL=176, LOCALTIME=177, LOCALTIMESTAMP=178, LOG=179, 
		LOG10=180, LOWER=181, LOWER_INF=182, MAX=183, MICROSECOND=184, MILLENNIUM=185, 
		MILLISECOND=186, MIN=187, MINUTE=188, MOD=189, MONTH=190, NANOSECOND=191, 
		NATURAL=192, NEST_MANY=193, NEST_ONE=194, NEXT=195, NO=196, NONE=197, 
		NOT=198, NOW=199, NTH_VALUE=200, NTILE=201, NULL=202, NULLIF=203, NULLS=204, 
		NUMERIC=205, OBJECT=206, OCTETS=207, OCTET_LENGTH=208, OF=209, OFFSET=210, 
		ON=211, ONLY=212, OR=213, ORDER=214, ORDINALITY=215, OTHERS=216, OUTER=217, 
		OVER=218, OVERLAPS=219, OVERLAY=220, PARTITION=221, PERCENT_RANK=222, 
		PERIOD=223, PG_EXPANDARRAY=224, PG_GET_EXPR=225, PG_GET_INDEXDEF=226, 
		PLACING=227, PORTION=228, POSITION=229, POWER=230, PRECEDES=231, PRECEDING=232, 
		PRECISION=233, QUARTER=234, RANGE=235, RANGE_BINS=236, RANK=237, READ=238, 
		REAL=239, RECORD=240, RECORDS=241, RECURSIVE=242, REGCLASS=243, REGPROC=244, 
		RENAME=245, REPEATABLE=246, REPLACE=247, RESPECT=248, RETURNING=249, RIGHT=250, 
		ROLE=251, ROLLBACK=252, ROW=253, ROWS=254, ROW_NUMBER=255, SECOND=256, 
		SELECT=257, SERIALIZABLE=258, SESSION=259, SET=260, SETTING=261, SHOW=262, 
		SIN=263, SINH=264, SMALLINT=265, SOME=266, SQRT=267, STANDARD_CONFORMING_STRINGS=268, 
		START=269, STDDEV_POP=270, STDDEV_SAMP=271, SUBMITTED=272, SUBSTRING=273, 
		SUCCEEDS=274, SUM=275, SYMMETRIC=276, SYSTEM_TIME=277, TAN=278, TANH=279, 
		TEXT=280, THEN=281, TIES=282, TIME=283, TIMESTAMP=284, TIMESTAMPTZ=285, 
		TIMEZONE=286, TIMEZONE_HOUR=287, TIMEZONE_MINUTE=288, TO=289, TRAILING=290, 
		TRANSACTION=291, TRIM=292, TRIM_ARRAY=293, TRUE=294, TSTZRANGE=295, UNBOUNDED=296, 
		UNCOMMITTED=297, UNION=298, UNKNOWN=299, UNNEST=300, UPDATE=301, UPPER=302, 
		UPPER_INF=303, USING=304, UUID=305, VALID_TIME=306, VALUES=307, VALUE_OF=308, 
		VARCHAR=309, VAR_POP=310, VAR_SAMP=311, VERSION=312, WEEK=313, WHEN=314, 
		WHERE=315, WINDOW=316, WITH=317, WITHOUT=318, WRITE=319, YEAR=320, ZONE=321, 
		DOLLAR_TAG=322, REGULAR_IDENTIFIER=323, DELIMITED_IDENTIFIER=324, DM_END_TAG=325, 
		DM_TEXT=326;
	public static final int
		RULE_directSqlStatement = 0, RULE_directlyExecutableStatement = 1, RULE_showVariable = 2, 
		RULE_settingQueryVariables = 3, RULE_settingQueryVariable = 4, RULE_intervalLiteral = 5, 
		RULE_dateTimeLiteral = 6, RULE_literal = 7, RULE_dollarStringText = 8, 
		RULE_characterString = 9, RULE_intervalQualifier = 10, RULE_startField = 11, 
		RULE_endField = 12, RULE_intervalFractionalSecondsPrecision = 13, RULE_nonSecondPrimaryDatetimeField = 14, 
		RULE_singleDatetimeField = 15, RULE_identifierChain = 16, RULE_identifier = 17, 
		RULE_schemaName = 18, RULE_tableName = 19, RULE_columnName = 20, RULE_correlationName = 21, 
		RULE_queryName = 22, RULE_fieldName = 23, RULE_windowName = 24, RULE_dataType = 25, 
		RULE_precision = 26, RULE_scale = 27, RULE_charLengthUnits = 28, RULE_withOrWithoutTimeZone = 29, 
		RULE_maximumCardinality = 30, RULE_fieldDefinition = 31, RULE_expr = 32, 
		RULE_numericExpr = 33, RULE_exprPrimary = 34, RULE_replaceTarget = 35, 
		RULE_replacement = 36, RULE_currentInstantFunction = 37, RULE_booleanValue = 38, 
		RULE_objectConstructor = 39, RULE_objectNameAndValue = 40, RULE_objectName = 41, 
		RULE_parameterSpecification = 42, RULE_columnReference = 43, RULE_generateSeries = 44, 
		RULE_seriesStart = 45, RULE_seriesEnd = 46, RULE_seriesStep = 47, RULE_windowFunctionType = 48, 
		RULE_rankFunctionType = 49, RULE_numberOfTiles = 50, RULE_leadOrLagExtent = 51, 
		RULE_offset = 52, RULE_defaultExpression = 53, RULE_nullTreatment = 54, 
		RULE_firstOrLastValue = 55, RULE_nthRow = 56, RULE_fromFirstOrLast = 57, 
		RULE_windowNameOrSpecification = 58, RULE_nestedWindowFunction = 59, RULE_rowMarker = 60, 
		RULE_rowMarkerExpression = 61, RULE_rowMarkerDelta = 62, RULE_rowMarkerOffset = 63, 
		RULE_valueOfDefaultValue = 64, RULE_simpleWhenClause = 65, RULE_searchedWhenClause = 66, 
		RULE_elseClause = 67, RULE_whenOperandList = 68, RULE_whenOperand = 69, 
		RULE_extractField = 70, RULE_primaryDatetimeField = 71, RULE_timeZoneField = 72, 
		RULE_extractSource = 73, RULE_trimSource = 74, RULE_trimSpecification = 75, 
		RULE_trimCharacter = 76, RULE_startPosition = 77, RULE_stringLength = 78, 
		RULE_dateTruncPrecision = 79, RULE_dateTruncSource = 80, RULE_dateTruncTimeZone = 81, 
		RULE_dateBinSource = 82, RULE_rangeBinsSource = 83, RULE_dateBinOrigin = 84, 
		RULE_arrayValueConstructor = 85, RULE_trigonometricFunctionName = 86, 
		RULE_generalLogarithmBase = 87, RULE_generalLogarithmArgument = 88, RULE_rowValueConstructor = 89, 
		RULE_rowValueList = 90, RULE_tableValueConstructor = 91, RULE_recordValueConstructor = 92, 
		RULE_recordsValueList = 93, RULE_recordsValueConstructor = 94, RULE_fromClause = 95, 
		RULE_tableReference = 96, RULE_withOrdinality = 97, RULE_tableAlias = 98, 
		RULE_tableProjection = 99, RULE_querySystemTimePeriodSpecification = 100, 
		RULE_queryValidTimePeriodSpecification = 101, RULE_tableTimePeriodSpecification = 102, 
		RULE_periodSpecificationExpr = 103, RULE_tableOrQueryName = 104, RULE_columnNameList = 105, 
		RULE_joinSpecification = 106, RULE_joinType = 107, RULE_outerJoinType = 108, 
		RULE_whereClause = 109, RULE_groupByClause = 110, RULE_groupingElement = 111, 
		RULE_havingClause = 112, RULE_windowClause = 113, RULE_windowDefinitionList = 114, 
		RULE_windowDefinition = 115, RULE_newWindowName = 116, RULE_windowSpecification = 117, 
		RULE_windowSpecificationDetails = 118, RULE_existingWindowName = 119, 
		RULE_windowPartitionClause = 120, RULE_windowPartitionColumnReferenceList = 121, 
		RULE_windowPartitionColumnReference = 122, RULE_windowOrderClause = 123, 
		RULE_windowFrameClause = 124, RULE_windowFrameUnits = 125, RULE_windowFrameExtent = 126, 
		RULE_windowFrameStart = 127, RULE_windowFramePreceding = 128, RULE_windowFrameBetween = 129, 
		RULE_windowFrameBound1 = 130, RULE_windowFrameBound2 = 131, RULE_windowFrameBound = 132, 
		RULE_windowFrameFollowing = 133, RULE_windowFrameExclusion = 134, RULE_selectClause = 135, 
		RULE_selectList = 136, RULE_selectListAsterisk = 137, RULE_selectSublist = 138, 
		RULE_qualifiedAsterisk = 139, RULE_renameClause = 140, RULE_renameColumn = 141, 
		RULE_qualifiedRenameClause = 142, RULE_qualifiedRenameColumn = 143, RULE_excludeClause = 144, 
		RULE_derivedColumn = 145, RULE_asClause = 146, RULE_queryExpression = 147, 
		RULE_queryExpressionNoWith = 148, RULE_withClause = 149, RULE_withListElement = 150, 
		RULE_queryExpressionBody = 151, RULE_queryTerm = 152, RULE_orderByClause = 153, 
		RULE_offsetAndLimit = 154, RULE_resultOffsetClause = 155, RULE_fetchFirstClause = 156, 
		RULE_offsetRowCount = 157, RULE_fetchFirstRowCount = 158, RULE_subquery = 159, 
		RULE_predicatePart2 = 160, RULE_quantifiedComparisonPredicatePart3 = 161, 
		RULE_compOp = 162, RULE_inPredicateValue = 163, RULE_likePattern = 164, 
		RULE_likeEscape = 165, RULE_xqueryPattern = 166, RULE_xqueryOptionFlag = 167, 
		RULE_postgresRegexOperator = 168, RULE_quantifier = 169, RULE_searchCondition = 170, 
		RULE_userString = 171, RULE_tableString = 172, RULE_schemaString = 173, 
		RULE_privilegeString = 174, RULE_aggregateFunction = 175, RULE_setFunctionType = 176, 
		RULE_setQuantifier = 177, RULE_sortSpecificationList = 178, RULE_sortSpecification = 179, 
		RULE_orderingSpecification = 180, RULE_nullOrdering = 181, RULE_returningStatement = 182, 
		RULE_deleteStatementSearched = 183, RULE_dmlStatementValidTimeExtents = 184, 
		RULE_eraseStatementSearched = 185, RULE_insertStatement = 186, RULE_insertColumnsAndSource = 187, 
		RULE_updateStatementSearched = 188, RULE_setClauseList = 189, RULE_setClause = 190, 
		RULE_setTarget = 191, RULE_updateSource = 192, RULE_sessionCharacteristic = 193, 
		RULE_sessionTxMode = 194, RULE_transactionCharacteristics = 195, RULE_transactionMode = 196, 
		RULE_levelOfIsolation = 197;
	private static String[] makeRuleNames() {
		return new String[] {
			"directSqlStatement", "directlyExecutableStatement", "showVariable", 
			"settingQueryVariables", "settingQueryVariable", "intervalLiteral", "dateTimeLiteral", 
			"literal", "dollarStringText", "characterString", "intervalQualifier", 
			"startField", "endField", "intervalFractionalSecondsPrecision", "nonSecondPrimaryDatetimeField", 
			"singleDatetimeField", "identifierChain", "identifier", "schemaName", 
			"tableName", "columnName", "correlationName", "queryName", "fieldName", 
			"windowName", "dataType", "precision", "scale", "charLengthUnits", "withOrWithoutTimeZone", 
			"maximumCardinality", "fieldDefinition", "expr", "numericExpr", "exprPrimary", 
			"replaceTarget", "replacement", "currentInstantFunction", "booleanValue", 
			"objectConstructor", "objectNameAndValue", "objectName", "parameterSpecification", 
			"columnReference", "generateSeries", "seriesStart", "seriesEnd", "seriesStep", 
			"windowFunctionType", "rankFunctionType", "numberOfTiles", "leadOrLagExtent", 
			"offset", "defaultExpression", "nullTreatment", "firstOrLastValue", "nthRow", 
			"fromFirstOrLast", "windowNameOrSpecification", "nestedWindowFunction", 
			"rowMarker", "rowMarkerExpression", "rowMarkerDelta", "rowMarkerOffset", 
			"valueOfDefaultValue", "simpleWhenClause", "searchedWhenClause", "elseClause", 
			"whenOperandList", "whenOperand", "extractField", "primaryDatetimeField", 
			"timeZoneField", "extractSource", "trimSource", "trimSpecification", 
			"trimCharacter", "startPosition", "stringLength", "dateTruncPrecision", 
			"dateTruncSource", "dateTruncTimeZone", "dateBinSource", "rangeBinsSource", 
			"dateBinOrigin", "arrayValueConstructor", "trigonometricFunctionName", 
			"generalLogarithmBase", "generalLogarithmArgument", "rowValueConstructor", 
			"rowValueList", "tableValueConstructor", "recordValueConstructor", "recordsValueList", 
			"recordsValueConstructor", "fromClause", "tableReference", "withOrdinality", 
			"tableAlias", "tableProjection", "querySystemTimePeriodSpecification", 
			"queryValidTimePeriodSpecification", "tableTimePeriodSpecification", 
			"periodSpecificationExpr", "tableOrQueryName", "columnNameList", "joinSpecification", 
			"joinType", "outerJoinType", "whereClause", "groupByClause", "groupingElement", 
			"havingClause", "windowClause", "windowDefinitionList", "windowDefinition", 
			"newWindowName", "windowSpecification", "windowSpecificationDetails", 
			"existingWindowName", "windowPartitionClause", "windowPartitionColumnReferenceList", 
			"windowPartitionColumnReference", "windowOrderClause", "windowFrameClause", 
			"windowFrameUnits", "windowFrameExtent", "windowFrameStart", "windowFramePreceding", 
			"windowFrameBetween", "windowFrameBound1", "windowFrameBound2", "windowFrameBound", 
			"windowFrameFollowing", "windowFrameExclusion", "selectClause", "selectList", 
			"selectListAsterisk", "selectSublist", "qualifiedAsterisk", "renameClause", 
			"renameColumn", "qualifiedRenameClause", "qualifiedRenameColumn", "excludeClause", 
			"derivedColumn", "asClause", "queryExpression", "queryExpressionNoWith", 
			"withClause", "withListElement", "queryExpressionBody", "queryTerm", 
			"orderByClause", "offsetAndLimit", "resultOffsetClause", "fetchFirstClause", 
			"offsetRowCount", "fetchFirstRowCount", "subquery", "predicatePart2", 
			"quantifiedComparisonPredicatePart3", "compOp", "inPredicateValue", "likePattern", 
			"likeEscape", "xqueryPattern", "xqueryOptionFlag", "postgresRegexOperator", 
			"quantifier", "searchCondition", "userString", "tableString", "schemaString", 
			"privilegeString", "aggregateFunction", "setFunctionType", "setQuantifier", 
			"sortSpecificationList", "sortSpecification", "orderingSpecification", 
			"nullOrdering", "returningStatement", "deleteStatementSearched", "dmlStatementValidTimeExtents", 
			"eraseStatementSearched", "insertStatement", "insertColumnsAndSource", 
			"updateStatementSearched", "setClauseList", "setClause", "setTarget", 
			"updateSource", "sessionCharacteristic", "sessionTxMode", "transactionCharacteristics", 
			"transactionMode", "levelOfIsolation"
		};
	}
	public static final String[] ruleNames = makeRuleNames();

	private static String[] makeLiteralNames() {
		return new String[] {
			null, null, null, null, null, null, null, null, null, null, "','", "'.'", 
			"';'", "':'", "'?'", "'('", "')'", "'['", "']'", "'{'", "'}'", "'||'", 
			"'~'", "'&'", "'+'", "'-'", "'*'", "'/'", "'|'", "'#'", "'<<'", "'>>'", 
			"'='", "'!='", "'<>'", "'<'", "'>'", "'<='", "'>='", "'::'", "'~*'", 
			"'!~'", "'!~*'", "'ABS'", "'ACOS'", "'AGE'", "'ALL'", "'AND'", "'ANY'", 
			"'ARRAY'", "'ARRAY_AGG'", "'ARRAY_UPPER'", "'ARROW_TABLE'", "'AS'", "'ASC'", 
			"'ASIN'", "'ASSERT'", "'ASYMMETRIC'", "'AT'", "'ATAN'", "'AVG'", "'BASIS'", 
			"'BEGIN'", "'BEGIN_FRAME'", "'BEGIN_PARTITION'", "'BETWEEN'", "'BIGINT'", 
			"'BOOLEAN'", "'BOOL_AND'", "'BOOL_OR'", "'BOTH'", "'BY'", "'CARDINALITY'", 
			"'CASE'", "'CAST'", "'CEIL'", "'CEILING'", "'CENTURY'", "'CHARACTERISTICS'", 
			"'CHARACTERS'", "'CHARACTER_LENGTH'", "'CHAR_LENGTH'", "'COALESCE'", 
			"'COMMIT'", "'COMMITTED'", "'CONTAINS'", "'COS'", "'COSH'", "'COUNT'", 
			"'CROSS'", "'CUME_DIST'", "'CURRENT'", "'CURRENT_DATABASE'", "'CURRENT_DATE'", 
			"'CURRENT_ROW'", "'CURRENT_SCHEMA'", "'CURRENT_SCHEMAS'", "'CURRENT_TIME'", 
			"'CURRENT_TIMESTAMP'", "'CURRENT_USER'", "'DATE'", "'DATE_BIN'", "'DATE_TRUNC'", 
			"'DAY'", "'DEC'", "'DECADE'", "'DECIMAL'", "'DEFAULT'", "'DELETE'", "'DENSE_RANK'", 
			"'DESC'", "'DISTINCT'", "'DOUBLE'", "'DURATION'", "'ELSE'", "'END'", 
			"'END_FRAME'", "'END_PARTITION'", "'EQUALS'", "'ERASE'", "'ESCAPE'", 
			"'EVERY'", "'EXCEPT'", "'EXCLUDE'", "'EXISTS'", "'EXP'", "'EXTRACT'", 
			"'FALSE'", "'FETCH'", "'FIRST'", "'FIRST_VALUE'", "'FLAG'", "'FLOAT'", 
			"'FLOOR'", "'FOLLOWING'", "'FOR'", "'FRAME_ROW'", "'FROM'", "'FULL'", 
			"'GENERATE_SERIES'", "'GREATEST'", "'GROUP'", "'GROUPS'", "'HAS_ANY_COLUMN_PRIVILEGE'", 
			"'HAS_SCHEMA_PRIVILEGE'", "'HAS_TABLE_PRIVILEGE'", "'HAVING'", "'HOUR'", 
			"'IGNORE'", "'IMMEDIATELY'", "'IN'", "'INNER'", "'INSERT'", "'INT'", 
			"'INTEGER'", "'INTERSECT'", "'INTERVAL'", "'INTO'", "'IS'", "'ISOLATION'", 
			"'JOIN'", "'LAG'", "'LAST'", "'LAST_VALUE'", "'LATERAL'", "'LATEST'", 
			"'LEAD'", "'LEADING'", "'LEAST'", "'LEFT'", "'LENGTH'", "'LEVEL'", "'LIKE'", 
			"'LIKE_REGEX'", "'LIMIT'", "'LN'", "'LOCAL'", "'LOCALTIME'", "'LOCALTIMESTAMP'", 
			"'LOG'", "'LOG10'", "'LOWER'", "'LOWER_INF'", "'MAX'", "'MICROSECOND'", 
			"'MILLENNIUM'", "'MILLISECOND'", "'MIN'", "'MINUTE'", "'MOD'", "'MONTH'", 
			"'NANOSECOND'", "'NATURAL'", "'NEST_MANY'", "'NEST_ONE'", "'NEXT'", "'NO'", 
			"'NONE'", "'NOT'", "'NOW'", "'NTH_VALUE'", "'NTILE'", "'NULL'", "'NULLIF'", 
			"'NULLS'", "'NUMERIC'", "'OBJECT'", "'OCTETS'", "'OCTET_LENGTH'", "'OF'", 
			"'OFFSET'", "'ON'", "'ONLY'", "'OR'", "'ORDER'", "'ORDINALITY'", "'OTHERS'", 
			"'OUTER'", "'OVER'", "'OVERLAPS'", "'OVERLAY'", "'PARTITION'", "'PERCENT_RANK'", 
			"'PERIOD'", "'_PG_EXPANDARRAY'", "'PG_GET_EXPR'", "'PG_GET_INDEXDEF'", 
			"'PLACING'", "'PORTION'", "'POSITION'", "'POWER'", "'PRECEDES'", "'PRECEDING'", 
			"'PRECISION'", "'QUARTER'", "'RANGE'", "'RANGE_BINS'", "'RANK'", "'READ'", 
			"'REAL'", "'RECORD'", "'RECORDS'", "'RECURSIVE'", "'REGCLASS'", "'REGPROC'", 
			"'RENAME'", "'REPEATABLE'", "'REPLACE'", "'RESPECT'", "'RETURNING'", 
			"'RIGHT'", "'ROLE'", "'ROLLBACK'", "'ROW'", "'ROWS'", "'ROW_NUMBER'", 
			"'SECOND'", "'SELECT'", "'SERIALIZABLE'", "'SESSION'", "'SET'", "'SETTING'", 
			"'SHOW'", "'SIN'", "'SINH'", "'SMALLINT'", "'SOME'", "'SQRT'", "'STANDARD_CONFORMING_STRINGS'", 
			"'START'", "'STDDEV_POP'", "'STDDEV_SAMP'", "'SUBMITTED'", "'SUBSTRING'", 
			"'SUCCEEDS'", "'SUM'", "'SYMMETRIC'", "'SYSTEM_TIME'", "'TAN'", "'TANH'", 
			"'TEXT'", "'THEN'", "'TIES'", "'TIME'", "'TIMESTAMP'", "'TIMESTAMPTZ'", 
			"'TIMEZONE'", "'TIMEZONE_HOUR'", "'TIMEZONE_MINUTE'", "'TO'", "'TRAILING'", 
			"'TRANSACTION'", "'TRIM'", "'TRIM_ARRAY'", "'TRUE'", "'TSTZRANGE'", "'UNBOUNDED'", 
			"'UNCOMMITTED'", "'UNION'", "'UNKNOWN'", "'UNNEST'", "'UPDATE'", "'UPPER'", 
			"'UPPER_INF'", "'USING'", "'UUID'", "'VALID_TIME'", "'VALUES'", "'VALUE_OF'", 
			"'VARCHAR'", "'VAR_POP'", "'VAR_SAMP'", "'VERSION'", "'WEEK'", "'WHEN'", 
			"'WHERE'", "'WINDOW'", "'WITH'", "'WITHOUT'", "'WRITE'", "'YEAR'", "'ZONE'"
		};
	}
	private static final String[] _LITERAL_NAMES = makeLiteralNames();
	private static String[] makeSymbolicNames() {
		return new String[] {
			null, "BLOCK_COMMENT", "LINE_COMMENT", "WHITESPACE", "UNSIGNED_FLOAT", 
			"UNSIGNED_INTEGER", "CHARACTER_STRING", "C_ESCAPES_STRING", "BINARY_STRING", 
			"POSTGRES_PARAMETER_SPECIFICATION", "COMMA", "DOT", "SEMI", "COLON", 
			"QUESTION", "LPAREN", "RPAREN", "LBRACK", "RBRACK", "LBRACE", "RBRACE", 
			"CONCAT", "TILDE", "AMPERSAND", "PLUS", "MINUS", "ASTERISK", "SOLIDUS", 
			"BITWISE_OR", "BITWISE_XOR", "BITWISE_SHIFT_LEFT", "BITWISE_SHIFT_RIGHT", 
			"EQUAL", "NOT_EQUAL", "LT_GT", "LT", "GT", "LE", "GE", "PG_CAST", "PG_REGEX_I", 
			"PG_NOT_REGEX", "PG_NOT_REGEX_I", "ABS", "ACOS", "AGE", "ALL", "AND", 
			"ANY", "ARRAY", "ARRAY_AGG", "ARRAY_UPPER", "ARROW_TABLE", "AS", "ASC", 
			"ASIN", "ASSERT", "ASYMMETRIC", "AT", "ATAN", "AVG", "BASIS", "BEGIN", 
			"BEGIN_FRAME", "BEGIN_PARTITION", "BETWEEN", "BIGINT", "BOOLEAN", "BOOL_AND", 
			"BOOL_OR", "BOTH", "BY", "CARDINALITY", "CASE", "CAST", "CEIL", "CEILING", 
			"CENTURY", "CHARACTERISTICS", "CHARACTERS", "CHARACTER_LENGTH", "CHAR_LENGTH", 
			"COALESCE", "COMMIT", "COMMITTED", "CONTAINS", "COS", "COSH", "COUNT", 
			"CROSS", "CUME_DIST", "CURRENT", "CURRENT_DATABASE", "CURRENT_DATE", 
			"CURRENT_ROW", "CURRENT_SCHEMA", "CURRENT_SCHEMAS", "CURRENT_TIME", "CURRENT_TIMESTAMP", 
			"CURRENT_USER", "DATE", "DATE_BIN", "DATE_TRUNC", "DAY", "DEC", "DECADE", 
			"DECIMAL", "DEFAULT", "DELETE", "DENSE_RANK", "DESC", "DISTINCT", "DOUBLE", 
			"DURATION", "ELSE", "END", "END_FRAME", "END_PARTITION", "EQUALS", "ERASE", 
			"ESCAPE", "EVERY", "EXCEPT", "EXCLUDE", "EXISTS", "EXP", "EXTRACT", "FALSE", 
			"FETCH", "FIRST", "FIRST_VALUE", "FLAG", "FLOAT", "FLOOR", "FOLLOWING", 
			"FOR", "FRAME_ROW", "FROM", "FULL", "GENERATE_SERIES", "GREATEST", "GROUP", 
			"GROUPS", "HAS_ANY_COLUMN_PRIVILEGE", "HAS_SCHEMA_PRIVILEGE", "HAS_TABLE_PRIVILEGE", 
			"HAVING", "HOUR", "IGNORE", "IMMEDIATELY", "IN", "INNER", "INSERT", "INT", 
			"INTEGER", "INTERSECT", "INTERVAL", "INTO", "IS", "ISOLATION", "JOIN", 
			"LAG", "LAST", "LAST_VALUE", "LATERAL", "LATEST", "LEAD", "LEADING", 
			"LEAST", "LEFT", "LENGTH", "LEVEL", "LIKE", "LIKE_REGEX", "LIMIT", "LN", 
			"LOCAL", "LOCALTIME", "LOCALTIMESTAMP", "LOG", "LOG10", "LOWER", "LOWER_INF", 
			"MAX", "MICROSECOND", "MILLENNIUM", "MILLISECOND", "MIN", "MINUTE", "MOD", 
			"MONTH", "NANOSECOND", "NATURAL", "NEST_MANY", "NEST_ONE", "NEXT", "NO", 
			"NONE", "NOT", "NOW", "NTH_VALUE", "NTILE", "NULL", "NULLIF", "NULLS", 
			"NUMERIC", "OBJECT", "OCTETS", "OCTET_LENGTH", "OF", "OFFSET", "ON", 
			"ONLY", "OR", "ORDER", "ORDINALITY", "OTHERS", "OUTER", "OVER", "OVERLAPS", 
			"OVERLAY", "PARTITION", "PERCENT_RANK", "PERIOD", "PG_EXPANDARRAY", "PG_GET_EXPR", 
			"PG_GET_INDEXDEF", "PLACING", "PORTION", "POSITION", "POWER", "PRECEDES", 
			"PRECEDING", "PRECISION", "QUARTER", "RANGE", "RANGE_BINS", "RANK", "READ", 
			"REAL", "RECORD", "RECORDS", "RECURSIVE", "REGCLASS", "REGPROC", "RENAME", 
			"REPEATABLE", "REPLACE", "RESPECT", "RETURNING", "RIGHT", "ROLE", "ROLLBACK", 
			"ROW", "ROWS", "ROW_NUMBER", "SECOND", "SELECT", "SERIALIZABLE", "SESSION", 
			"SET", "SETTING", "SHOW", "SIN", "SINH", "SMALLINT", "SOME", "SQRT", 
			"STANDARD_CONFORMING_STRINGS", "START", "STDDEV_POP", "STDDEV_SAMP", 
			"SUBMITTED", "SUBSTRING", "SUCCEEDS", "SUM", "SYMMETRIC", "SYSTEM_TIME", 
			"TAN", "TANH", "TEXT", "THEN", "TIES", "TIME", "TIMESTAMP", "TIMESTAMPTZ", 
			"TIMEZONE", "TIMEZONE_HOUR", "TIMEZONE_MINUTE", "TO", "TRAILING", "TRANSACTION", 
			"TRIM", "TRIM_ARRAY", "TRUE", "TSTZRANGE", "UNBOUNDED", "UNCOMMITTED", 
			"UNION", "UNKNOWN", "UNNEST", "UPDATE", "UPPER", "UPPER_INF", "USING", 
			"UUID", "VALID_TIME", "VALUES", "VALUE_OF", "VARCHAR", "VAR_POP", "VAR_SAMP", 
			"VERSION", "WEEK", "WHEN", "WHERE", "WINDOW", "WITH", "WITHOUT", "WRITE", 
			"YEAR", "ZONE", "DOLLAR_TAG", "REGULAR_IDENTIFIER", "DELIMITED_IDENTIFIER", 
			"DM_END_TAG", "DM_TEXT"
		};
	}
	private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
	public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);

	/**
	 * @deprecated Use {@link #VOCABULARY} instead.
	 */
	@Deprecated
	public static final String[] tokenNames;
	static {
		tokenNames = new String[_SYMBOLIC_NAMES.length];
		for (int i = 0; i < tokenNames.length; i++) {
			tokenNames[i] = VOCABULARY.getLiteralName(i);
			if (tokenNames[i] == null) {
				tokenNames[i] = VOCABULARY.getSymbolicName(i);
			}

			if (tokenNames[i] == null) {
				tokenNames[i] = "";
			}
		}
	}

	@Override
	@Deprecated
	public String[] getTokenNames() {
		return tokenNames;
	}

	@Override

	public Vocabulary getVocabulary() {
		return VOCABULARY;
	}

	@Override
	public String getGrammarFileName() { return "Sql.g4"; }

	@Override
	public String[] getRuleNames() { return ruleNames; }

	@Override
	public String getSerializedATN() { return _serializedATN; }

	@Override
	public ATN getATN() { return _ATN; }

	public Sql(TokenStream input) {
		super(input);
		_interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
	}

	@SuppressWarnings("CheckReturnValue")
	public static class DirectSqlStatementContext extends ParserRuleContext {
		public DirectlyExecutableStatementContext directlyExecutableStatement() {
			return getRuleContext(DirectlyExecutableStatementContext.class,0);
		}
		public TerminalNode EOF() { return getToken(Sql.EOF, 0); }
		public TerminalNode SEMI() { return getToken(Sql.SEMI, 0); }
		public DirectSqlStatementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_directSqlStatement; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitDirectSqlStatement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DirectSqlStatementContext directSqlStatement() throws RecognitionException {
		DirectSqlStatementContext _localctx = new DirectSqlStatementContext(_ctx, getState());
		enterRule(_localctx, 0, RULE_directSqlStatement);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(396);
			directlyExecutableStatement();
			setState(398);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==SEMI) {
				{
				setState(397);
				match(SEMI);
				}
			}

			setState(400);
			match(EOF);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class DirectlyExecutableStatementContext extends ParserRuleContext {
		public DirectlyExecutableStatementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_directlyExecutableStatement; }
	 
		public DirectlyExecutableStatementContext() { }
		public void copyFrom(DirectlyExecutableStatementContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class SetSessionVariableStatementContext extends DirectlyExecutableStatementContext {
		public TerminalNode SET() { return getToken(Sql.SET, 0); }
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public LiteralContext literal() {
			return getRuleContext(LiteralContext.class,0);
		}
		public TerminalNode TO() { return getToken(Sql.TO, 0); }
		public TerminalNode EQUAL() { return getToken(Sql.EQUAL, 0); }
		public SetSessionVariableStatementContext(DirectlyExecutableStatementContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSetSessionVariableStatement(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class SetTransactionStatementContext extends DirectlyExecutableStatementContext {
		public TerminalNode SET() { return getToken(Sql.SET, 0); }
		public TerminalNode TRANSACTION() { return getToken(Sql.TRANSACTION, 0); }
		public TransactionCharacteristicsContext transactionCharacteristics() {
			return getRuleContext(TransactionCharacteristicsContext.class,0);
		}
		public TerminalNode LOCAL() { return getToken(Sql.LOCAL, 0); }
		public SetTransactionStatementContext(DirectlyExecutableStatementContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSetTransactionStatement(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class RollbackStatementContext extends DirectlyExecutableStatementContext {
		public TerminalNode ROLLBACK() { return getToken(Sql.ROLLBACK, 0); }
		public RollbackStatementContext(DirectlyExecutableStatementContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitRollbackStatement(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class QueryExprContext extends DirectlyExecutableStatementContext {
		public QueryExpressionContext queryExpression() {
			return getRuleContext(QueryExpressionContext.class,0);
		}
		public SettingQueryVariablesContext settingQueryVariables() {
			return getRuleContext(SettingQueryVariablesContext.class,0);
		}
		public QueryExprContext(DirectlyExecutableStatementContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitQueryExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class EraseStmtContext extends DirectlyExecutableStatementContext {
		public EraseStatementSearchedContext eraseStatementSearched() {
			return getRuleContext(EraseStatementSearchedContext.class,0);
		}
		public EraseStmtContext(DirectlyExecutableStatementContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitEraseStmt(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ShowLatestSubmittedTransactionStatementContext extends DirectlyExecutableStatementContext {
		public TerminalNode SHOW() { return getToken(Sql.SHOW, 0); }
		public TerminalNode LATEST() { return getToken(Sql.LATEST, 0); }
		public TerminalNode SUBMITTED() { return getToken(Sql.SUBMITTED, 0); }
		public TerminalNode TRANSACTION() { return getToken(Sql.TRANSACTION, 0); }
		public ShowLatestSubmittedTransactionStatementContext(DirectlyExecutableStatementContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitShowLatestSubmittedTransactionStatement(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class InsertStmtContext extends DirectlyExecutableStatementContext {
		public InsertStatementContext insertStatement() {
			return getRuleContext(InsertStatementContext.class,0);
		}
		public InsertStmtContext(DirectlyExecutableStatementContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitInsertStmt(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class DeleteStmtContext extends DirectlyExecutableStatementContext {
		public DeleteStatementSearchedContext deleteStatementSearched() {
			return getRuleContext(DeleteStatementSearchedContext.class,0);
		}
		public DeleteStmtContext(DirectlyExecutableStatementContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitDeleteStmt(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ShowSessionVariableStatementContext extends DirectlyExecutableStatementContext {
		public TerminalNode SHOW() { return getToken(Sql.SHOW, 0); }
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public ShowSessionVariableStatementContext(DirectlyExecutableStatementContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitShowSessionVariableStatement(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class SetRoleStatementContext extends DirectlyExecutableStatementContext {
		public TerminalNode SET() { return getToken(Sql.SET, 0); }
		public TerminalNode ROLE() { return getToken(Sql.ROLE, 0); }
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public TerminalNode NONE() { return getToken(Sql.NONE, 0); }
		public SetRoleStatementContext(DirectlyExecutableStatementContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSetRoleStatement(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class SetSessionCharacteristicsStatementContext extends DirectlyExecutableStatementContext {
		public TerminalNode SET() { return getToken(Sql.SET, 0); }
		public TerminalNode SESSION() { return getToken(Sql.SESSION, 0); }
		public TerminalNode CHARACTERISTICS() { return getToken(Sql.CHARACTERISTICS, 0); }
		public TerminalNode AS() { return getToken(Sql.AS, 0); }
		public List sessionCharacteristic() {
			return getRuleContexts(SessionCharacteristicContext.class);
		}
		public SessionCharacteristicContext sessionCharacteristic(int i) {
			return getRuleContext(SessionCharacteristicContext.class,i);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public SetSessionCharacteristicsStatementContext(DirectlyExecutableStatementContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSetSessionCharacteristicsStatement(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class SetTimeZoneStatementContext extends DirectlyExecutableStatementContext {
		public TerminalNode SET() { return getToken(Sql.SET, 0); }
		public TerminalNode TIME() { return getToken(Sql.TIME, 0); }
		public TerminalNode ZONE() { return getToken(Sql.ZONE, 0); }
		public CharacterStringContext characterString() {
			return getRuleContext(CharacterStringContext.class,0);
		}
		public SetTimeZoneStatementContext(DirectlyExecutableStatementContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSetTimeZoneStatement(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class AssertStatementContext extends DirectlyExecutableStatementContext {
		public TerminalNode ASSERT() { return getToken(Sql.ASSERT, 0); }
		public SearchConditionContext searchCondition() {
			return getRuleContext(SearchConditionContext.class,0);
		}
		public AssertStatementContext(DirectlyExecutableStatementContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitAssertStatement(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ShowVariableStatementContext extends DirectlyExecutableStatementContext {
		public TerminalNode SHOW() { return getToken(Sql.SHOW, 0); }
		public ShowVariableContext showVariable() {
			return getRuleContext(ShowVariableContext.class,0);
		}
		public ShowVariableStatementContext(DirectlyExecutableStatementContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitShowVariableStatement(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class CommitStatementContext extends DirectlyExecutableStatementContext {
		public TerminalNode COMMIT() { return getToken(Sql.COMMIT, 0); }
		public CommitStatementContext(DirectlyExecutableStatementContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitCommitStatement(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class StartTransactionStatementContext extends DirectlyExecutableStatementContext {
		public TerminalNode START() { return getToken(Sql.START, 0); }
		public TerminalNode TRANSACTION() { return getToken(Sql.TRANSACTION, 0); }
		public TerminalNode BEGIN() { return getToken(Sql.BEGIN, 0); }
		public TransactionCharacteristicsContext transactionCharacteristics() {
			return getRuleContext(TransactionCharacteristicsContext.class,0);
		}
		public StartTransactionStatementContext(DirectlyExecutableStatementContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitStartTransactionStatement(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class UpdateStmtContext extends DirectlyExecutableStatementContext {
		public UpdateStatementSearchedContext updateStatementSearched() {
			return getRuleContext(UpdateStatementSearchedContext.class,0);
		}
		public UpdateStmtContext(DirectlyExecutableStatementContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitUpdateStmt(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DirectlyExecutableStatementContext directlyExecutableStatement() throws RecognitionException {
		DirectlyExecutableStatementContext _localctx = new DirectlyExecutableStatementContext(_ctx, getState());
		enterRule(_localctx, 2, RULE_directlyExecutableStatement);
		int _la;
		try {
			setState(463);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,7,_ctx) ) {
			case 1:
				_localctx = new QueryExprContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(403);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==SETTING) {
					{
					setState(402);
					settingQueryVariables();
					}
				}

				setState(405);
				queryExpression();
				}
				break;
			case 2:
				_localctx = new InsertStmtContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(406);
				insertStatement();
				}
				break;
			case 3:
				_localctx = new UpdateStmtContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(407);
				updateStatementSearched();
				}
				break;
			case 4:
				_localctx = new DeleteStmtContext(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(408);
				deleteStatementSearched();
				}
				break;
			case 5:
				_localctx = new EraseStmtContext(_localctx);
				enterOuterAlt(_localctx, 5);
				{
				setState(409);
				eraseStatementSearched();
				}
				break;
			case 6:
				_localctx = new AssertStatementContext(_localctx);
				enterOuterAlt(_localctx, 6);
				{
				setState(410);
				match(ASSERT);
				setState(411);
				searchCondition();
				}
				break;
			case 7:
				_localctx = new StartTransactionStatementContext(_localctx);
				enterOuterAlt(_localctx, 7);
				{
				setState(415);
				_errHandler.sync(this);
				switch (_input.LA(1)) {
				case START:
					{
					setState(412);
					match(START);
					setState(413);
					match(TRANSACTION);
					}
					break;
				case BEGIN:
					{
					setState(414);
					match(BEGIN);
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				setState(418);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==AT || _la==ISOLATION || _la==READ) {
					{
					setState(417);
					transactionCharacteristics();
					}
				}

				}
				break;
			case 8:
				_localctx = new SetTransactionStatementContext(_localctx);
				enterOuterAlt(_localctx, 8);
				{
				setState(420);
				match(SET);
				setState(422);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==LOCAL) {
					{
					setState(421);
					match(LOCAL);
					}
				}

				setState(424);
				match(TRANSACTION);
				setState(425);
				transactionCharacteristics();
				}
				break;
			case 9:
				_localctx = new CommitStatementContext(_localctx);
				enterOuterAlt(_localctx, 9);
				{
				setState(426);
				match(COMMIT);
				}
				break;
			case 10:
				_localctx = new RollbackStatementContext(_localctx);
				enterOuterAlt(_localctx, 10);
				{
				setState(427);
				match(ROLLBACK);
				}
				break;
			case 11:
				_localctx = new SetSessionCharacteristicsStatementContext(_localctx);
				enterOuterAlt(_localctx, 11);
				{
				setState(428);
				match(SET);
				setState(429);
				match(SESSION);
				setState(430);
				match(CHARACTERISTICS);
				setState(431);
				match(AS);
				setState(432);
				sessionCharacteristic();
				setState(437);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==COMMA) {
					{
					{
					setState(433);
					match(COMMA);
					setState(434);
					sessionCharacteristic();
					}
					}
					setState(439);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				}
				break;
			case 12:
				_localctx = new SetRoleStatementContext(_localctx);
				enterOuterAlt(_localctx, 12);
				{
				setState(440);
				match(SET);
				setState(441);
				match(ROLE);
				setState(444);
				_errHandler.sync(this);
				switch (_input.LA(1)) {
				case AGE:
				case AVG:
				case BASIS:
				case BOOL_AND:
				case BOOL_OR:
				case CARDINALITY:
				case COMMITTED:
				case COUNT:
				case DELETE:
				case END:
				case ERASE:
				case EVERY:
				case INSERT:
				case LATEST:
				case MAX:
				case MIN:
				case ROLE:
				case SELECT:
				case SETTING:
				case START:
				case STDDEV_POP:
				case STDDEV_SAMP:
				case SUBMITTED:
				case SUM:
				case SYSTEM_TIME:
				case TIMEZONE:
				case UNCOMMITTED:
				case UPDATE:
				case VALID_TIME:
				case VAR_POP:
				case VAR_SAMP:
				case VERSION:
				case REGULAR_IDENTIFIER:
				case DELIMITED_IDENTIFIER:
					{
					setState(442);
					identifier();
					}
					break;
				case NONE:
					{
					setState(443);
					match(NONE);
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			case 13:
				_localctx = new SetTimeZoneStatementContext(_localctx);
				enterOuterAlt(_localctx, 13);
				{
				setState(446);
				match(SET);
				setState(447);
				match(TIME);
				setState(448);
				match(ZONE);
				setState(449);
				characterString();
				}
				break;
			case 14:
				_localctx = new SetSessionVariableStatementContext(_localctx);
				enterOuterAlt(_localctx, 14);
				{
				setState(450);
				match(SET);
				setState(451);
				identifier();
				setState(452);
				_la = _input.LA(1);
				if ( !(_la==EQUAL || _la==TO) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(453);
				literal();
				}
				break;
			case 15:
				_localctx = new ShowVariableStatementContext(_localctx);
				enterOuterAlt(_localctx, 15);
				{
				setState(455);
				match(SHOW);
				setState(456);
				showVariable();
				}
				break;
			case 16:
				_localctx = new ShowSessionVariableStatementContext(_localctx);
				enterOuterAlt(_localctx, 16);
				{
				setState(457);
				match(SHOW);
				setState(458);
				identifier();
				}
				break;
			case 17:
				_localctx = new ShowLatestSubmittedTransactionStatementContext(_localctx);
				enterOuterAlt(_localctx, 17);
				{
				setState(459);
				match(SHOW);
				setState(460);
				match(LATEST);
				setState(461);
				match(SUBMITTED);
				setState(462);
				match(TRANSACTION);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ShowVariableContext extends ParserRuleContext {
		public ShowVariableContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_showVariable; }
	 
		public ShowVariableContext() { }
		public void copyFrom(ShowVariableContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ShowTimeZoneContext extends ShowVariableContext {
		public TerminalNode TIME() { return getToken(Sql.TIME, 0); }
		public TerminalNode ZONE() { return getToken(Sql.ZONE, 0); }
		public TerminalNode TIMEZONE() { return getToken(Sql.TIMEZONE, 0); }
		public ShowTimeZoneContext(ShowVariableContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitShowTimeZone(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ShowStandardConformingStringsContext extends ShowVariableContext {
		public TerminalNode STANDARD_CONFORMING_STRINGS() { return getToken(Sql.STANDARD_CONFORMING_STRINGS, 0); }
		public ShowStandardConformingStringsContext(ShowVariableContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitShowStandardConformingStrings(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ShowTransactionIsolationLevelContext extends ShowVariableContext {
		public TerminalNode TRANSACTION() { return getToken(Sql.TRANSACTION, 0); }
		public TerminalNode ISOLATION() { return getToken(Sql.ISOLATION, 0); }
		public TerminalNode LEVEL() { return getToken(Sql.LEVEL, 0); }
		public ShowTransactionIsolationLevelContext(ShowVariableContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitShowTransactionIsolationLevel(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ShowVariableContext showVariable() throws RecognitionException {
		ShowVariableContext _localctx = new ShowVariableContext(_ctx, getState());
		enterRule(_localctx, 4, RULE_showVariable);
		try {
			setState(474);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case TRANSACTION:
				_localctx = new ShowTransactionIsolationLevelContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(465);
				match(TRANSACTION);
				setState(466);
				match(ISOLATION);
				setState(467);
				match(LEVEL);
				}
				break;
			case STANDARD_CONFORMING_STRINGS:
				_localctx = new ShowStandardConformingStringsContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(468);
				match(STANDARD_CONFORMING_STRINGS);
				}
				break;
			case TIME:
			case TIMEZONE:
				_localctx = new ShowTimeZoneContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(472);
				_errHandler.sync(this);
				switch (_input.LA(1)) {
				case TIME:
					{
					setState(469);
					match(TIME);
					setState(470);
					match(ZONE);
					}
					break;
				case TIMEZONE:
					{
					setState(471);
					match(TIMEZONE);
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class SettingQueryVariablesContext extends ParserRuleContext {
		public TerminalNode SETTING() { return getToken(Sql.SETTING, 0); }
		public List settingQueryVariable() {
			return getRuleContexts(SettingQueryVariableContext.class);
		}
		public SettingQueryVariableContext settingQueryVariable(int i) {
			return getRuleContext(SettingQueryVariableContext.class,i);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public SettingQueryVariablesContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_settingQueryVariables; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSettingQueryVariables(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SettingQueryVariablesContext settingQueryVariables() throws RecognitionException {
		SettingQueryVariablesContext _localctx = new SettingQueryVariablesContext(_ctx, getState());
		enterRule(_localctx, 6, RULE_settingQueryVariables);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(476);
			match(SETTING);
			setState(477);
			settingQueryVariable();
			setState(482);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(478);
				match(COMMA);
				setState(479);
				settingQueryVariable();
				}
				}
				setState(484);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class SettingQueryVariableContext extends ParserRuleContext {
		public SettingQueryVariableContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_settingQueryVariable; }
	 
		public SettingQueryVariableContext() { }
		public void copyFrom(SettingQueryVariableContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class SettingDefaultSystemTimeContext extends SettingQueryVariableContext {
		public TerminalNode DEFAULT() { return getToken(Sql.DEFAULT, 0); }
		public TerminalNode SYSTEM_TIME() { return getToken(Sql.SYSTEM_TIME, 0); }
		public TableTimePeriodSpecificationContext tableTimePeriodSpecification() {
			return getRuleContext(TableTimePeriodSpecificationContext.class,0);
		}
		public TerminalNode TO() { return getToken(Sql.TO, 0); }
		public SettingDefaultSystemTimeContext(SettingQueryVariableContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSettingDefaultSystemTime(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class SettingCurrentTimeContext extends SettingQueryVariableContext {
		public LiteralContext currentTime;
		public TerminalNode CURRENT_TIME() { return getToken(Sql.CURRENT_TIME, 0); }
		public TerminalNode TO() { return getToken(Sql.TO, 0); }
		public TerminalNode EQUAL() { return getToken(Sql.EQUAL, 0); }
		public LiteralContext literal() {
			return getRuleContext(LiteralContext.class,0);
		}
		public SettingCurrentTimeContext(SettingQueryVariableContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSettingCurrentTime(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class SettingBasisContext extends SettingQueryVariableContext {
		public LiteralContext basis;
		public TerminalNode BASIS() { return getToken(Sql.BASIS, 0); }
		public TerminalNode TO() { return getToken(Sql.TO, 0); }
		public TerminalNode EQUAL() { return getToken(Sql.EQUAL, 0); }
		public LiteralContext literal() {
			return getRuleContext(LiteralContext.class,0);
		}
		public SettingBasisContext(SettingQueryVariableContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSettingBasis(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class SettingDefaultValidTimeContext extends SettingQueryVariableContext {
		public TerminalNode DEFAULT() { return getToken(Sql.DEFAULT, 0); }
		public TerminalNode VALID_TIME() { return getToken(Sql.VALID_TIME, 0); }
		public TableTimePeriodSpecificationContext tableTimePeriodSpecification() {
			return getRuleContext(TableTimePeriodSpecificationContext.class,0);
		}
		public TerminalNode TO() { return getToken(Sql.TO, 0); }
		public SettingDefaultValidTimeContext(SettingQueryVariableContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSettingDefaultValidTime(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SettingQueryVariableContext settingQueryVariable() throws RecognitionException {
		SettingQueryVariableContext _localctx = new SettingQueryVariableContext(_ctx, getState());
		enterRule(_localctx, 8, RULE_settingQueryVariable);
		int _la;
		try {
			setState(503);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,13,_ctx) ) {
			case 1:
				_localctx = new SettingDefaultValidTimeContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(485);
				match(DEFAULT);
				setState(486);
				match(VALID_TIME);
				setState(488);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==TO) {
					{
					setState(487);
					match(TO);
					}
				}

				setState(490);
				tableTimePeriodSpecification();
				}
				break;
			case 2:
				_localctx = new SettingDefaultSystemTimeContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(491);
				match(DEFAULT);
				setState(492);
				match(SYSTEM_TIME);
				setState(494);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==TO) {
					{
					setState(493);
					match(TO);
					}
				}

				setState(496);
				tableTimePeriodSpecification();
				}
				break;
			case 3:
				_localctx = new SettingBasisContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(497);
				match(BASIS);
				setState(498);
				_la = _input.LA(1);
				if ( !(_la==EQUAL || _la==TO) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(499);
				((SettingBasisContext)_localctx).basis = literal();
				}
				break;
			case 4:
				_localctx = new SettingCurrentTimeContext(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(500);
				match(CURRENT_TIME);
				setState(501);
				_la = _input.LA(1);
				if ( !(_la==EQUAL || _la==TO) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(502);
				((SettingCurrentTimeContext)_localctx).currentTime = literal();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class IntervalLiteralContext extends ParserRuleContext {
		public TerminalNode INTERVAL() { return getToken(Sql.INTERVAL, 0); }
		public CharacterStringContext characterString() {
			return getRuleContext(CharacterStringContext.class,0);
		}
		public IntervalQualifierContext intervalQualifier() {
			return getRuleContext(IntervalQualifierContext.class,0);
		}
		public TerminalNode PLUS() { return getToken(Sql.PLUS, 0); }
		public TerminalNode MINUS() { return getToken(Sql.MINUS, 0); }
		public IntervalLiteralContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_intervalLiteral; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitIntervalLiteral(this);
			else return visitor.visitChildren(this);
		}
	}

	public final IntervalLiteralContext intervalLiteral() throws RecognitionException {
		IntervalLiteralContext _localctx = new IntervalLiteralContext(_ctx, getState());
		enterRule(_localctx, 10, RULE_intervalLiteral);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(505);
			match(INTERVAL);
			setState(507);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==PLUS || _la==MINUS) {
				{
				setState(506);
				_la = _input.LA(1);
				if ( !(_la==PLUS || _la==MINUS) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				}
			}

			setState(509);
			characterString();
			setState(511);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,15,_ctx) ) {
			case 1:
				{
				setState(510);
				intervalQualifier();
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class DateTimeLiteralContext extends ParserRuleContext {
		public DateTimeLiteralContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_dateTimeLiteral; }
	 
		public DateTimeLiteralContext() { }
		public void copyFrom(DateTimeLiteralContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class DateLiteralContext extends DateTimeLiteralContext {
		public TerminalNode DATE() { return getToken(Sql.DATE, 0); }
		public CharacterStringContext characterString() {
			return getRuleContext(CharacterStringContext.class,0);
		}
		public DateLiteralContext(DateTimeLiteralContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitDateLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class TimestampLiteralContext extends DateTimeLiteralContext {
		public TerminalNode TIMESTAMP() { return getToken(Sql.TIMESTAMP, 0); }
		public CharacterStringContext characterString() {
			return getRuleContext(CharacterStringContext.class,0);
		}
		public WithOrWithoutTimeZoneContext withOrWithoutTimeZone() {
			return getRuleContext(WithOrWithoutTimeZoneContext.class,0);
		}
		public TimestampLiteralContext(DateTimeLiteralContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitTimestampLiteral(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DateTimeLiteralContext dateTimeLiteral() throws RecognitionException {
		DateTimeLiteralContext _localctx = new DateTimeLiteralContext(_ctx, getState());
		enterRule(_localctx, 12, RULE_dateTimeLiteral);
		int _la;
		try {
			setState(520);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case DATE:
				_localctx = new DateLiteralContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(513);
				match(DATE);
				setState(514);
				characterString();
				}
				break;
			case TIMESTAMP:
				_localctx = new TimestampLiteralContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(515);
				match(TIMESTAMP);
				setState(517);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==WITH || _la==WITHOUT) {
					{
					setState(516);
					withOrWithoutTimeZone();
					}
				}

				setState(519);
				characterString();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class LiteralContext extends ParserRuleContext {
		public LiteralContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_literal; }
	 
		public LiteralContext() { }
		public void copyFrom(LiteralContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class CharacterStringLiteralContext extends LiteralContext {
		public CharacterStringContext characterString() {
			return getRuleContext(CharacterStringContext.class,0);
		}
		public CharacterStringLiteralContext(LiteralContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitCharacterStringLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class IntervalLiteral0Context extends LiteralContext {
		public IntervalLiteralContext intervalLiteral() {
			return getRuleContext(IntervalLiteralContext.class,0);
		}
		public IntervalLiteral0Context(LiteralContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitIntervalLiteral0(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class DateTimeLiteral0Context extends LiteralContext {
		public DateTimeLiteralContext dateTimeLiteral() {
			return getRuleContext(DateTimeLiteralContext.class,0);
		}
		public DateTimeLiteral0Context(LiteralContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitDateTimeLiteral0(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class BinaryStringLiteralContext extends LiteralContext {
		public TerminalNode BINARY_STRING() { return getToken(Sql.BINARY_STRING, 0); }
		public BinaryStringLiteralContext(LiteralContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitBinaryStringLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class FloatLiteralContext extends LiteralContext {
		public TerminalNode UNSIGNED_FLOAT() { return getToken(Sql.UNSIGNED_FLOAT, 0); }
		public TerminalNode PLUS() { return getToken(Sql.PLUS, 0); }
		public TerminalNode MINUS() { return getToken(Sql.MINUS, 0); }
		public FloatLiteralContext(LiteralContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitFloatLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class BooleanLiteralContext extends LiteralContext {
		public TerminalNode TRUE() { return getToken(Sql.TRUE, 0); }
		public TerminalNode FALSE() { return getToken(Sql.FALSE, 0); }
		public BooleanLiteralContext(LiteralContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitBooleanLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class UUIDLiteralContext extends LiteralContext {
		public TerminalNode UUID() { return getToken(Sql.UUID, 0); }
		public CharacterStringContext characterString() {
			return getRuleContext(CharacterStringContext.class,0);
		}
		public UUIDLiteralContext(LiteralContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitUUIDLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class NullLiteralContext extends LiteralContext {
		public TerminalNode NULL() { return getToken(Sql.NULL, 0); }
		public NullLiteralContext(LiteralContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitNullLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class IntegerLiteralContext extends LiteralContext {
		public TerminalNode UNSIGNED_INTEGER() { return getToken(Sql.UNSIGNED_INTEGER, 0); }
		public TerminalNode PLUS() { return getToken(Sql.PLUS, 0); }
		public TerminalNode MINUS() { return getToken(Sql.MINUS, 0); }
		public IntegerLiteralContext(LiteralContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitIntegerLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class TimeLiteralContext extends LiteralContext {
		public TerminalNode TIME() { return getToken(Sql.TIME, 0); }
		public CharacterStringContext characterString() {
			return getRuleContext(CharacterStringContext.class,0);
		}
		public TimeLiteralContext(LiteralContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitTimeLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class DurationLiteralContext extends LiteralContext {
		public TerminalNode DURATION() { return getToken(Sql.DURATION, 0); }
		public CharacterStringContext characterString() {
			return getRuleContext(CharacterStringContext.class,0);
		}
		public DurationLiteralContext(LiteralContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitDurationLiteral(this);
			else return visitor.visitChildren(this);
		}
	}

	public final LiteralContext literal() throws RecognitionException {
		LiteralContext _localctx = new LiteralContext(_ctx, getState());
		enterRule(_localctx, 14, RULE_literal);
		int _la;
		try {
			setState(542);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,20,_ctx) ) {
			case 1:
				_localctx = new FloatLiteralContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(523);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==PLUS || _la==MINUS) {
					{
					setState(522);
					_la = _input.LA(1);
					if ( !(_la==PLUS || _la==MINUS) ) {
					_errHandler.recoverInline(this);
					}
					else {
						if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
						_errHandler.reportMatch(this);
						consume();
					}
					}
				}

				setState(525);
				match(UNSIGNED_FLOAT);
				}
				break;
			case 2:
				_localctx = new IntegerLiteralContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(527);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==PLUS || _la==MINUS) {
					{
					setState(526);
					_la = _input.LA(1);
					if ( !(_la==PLUS || _la==MINUS) ) {
					_errHandler.recoverInline(this);
					}
					else {
						if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
						_errHandler.reportMatch(this);
						consume();
					}
					}
				}

				setState(529);
				match(UNSIGNED_INTEGER);
				}
				break;
			case 3:
				_localctx = new CharacterStringLiteralContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(530);
				characterString();
				}
				break;
			case 4:
				_localctx = new BinaryStringLiteralContext(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(531);
				match(BINARY_STRING);
				}
				break;
			case 5:
				_localctx = new DateTimeLiteral0Context(_localctx);
				enterOuterAlt(_localctx, 5);
				{
				setState(532);
				dateTimeLiteral();
				}
				break;
			case 6:
				_localctx = new TimeLiteralContext(_localctx);
				enterOuterAlt(_localctx, 6);
				{
				setState(533);
				match(TIME);
				setState(534);
				characterString();
				}
				break;
			case 7:
				_localctx = new IntervalLiteral0Context(_localctx);
				enterOuterAlt(_localctx, 7);
				{
				setState(535);
				intervalLiteral();
				}
				break;
			case 8:
				_localctx = new DurationLiteralContext(_localctx);
				enterOuterAlt(_localctx, 8);
				{
				setState(536);
				match(DURATION);
				setState(537);
				characterString();
				}
				break;
			case 9:
				_localctx = new UUIDLiteralContext(_localctx);
				enterOuterAlt(_localctx, 9);
				{
				setState(538);
				match(UUID);
				setState(539);
				characterString();
				}
				break;
			case 10:
				_localctx = new BooleanLiteralContext(_localctx);
				enterOuterAlt(_localctx, 10);
				{
				setState(540);
				_la = _input.LA(1);
				if ( !(_la==FALSE || _la==TRUE) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				}
				break;
			case 11:
				_localctx = new NullLiteralContext(_localctx);
				enterOuterAlt(_localctx, 11);
				{
				setState(541);
				match(NULL);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class DollarStringTextContext extends ParserRuleContext {
		public List DM_TEXT() { return getTokens(Sql.DM_TEXT); }
		public TerminalNode DM_TEXT(int i) {
			return getToken(Sql.DM_TEXT, i);
		}
		public DollarStringTextContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_dollarStringText; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitDollarStringText(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DollarStringTextContext dollarStringText() throws RecognitionException {
		DollarStringTextContext _localctx = new DollarStringTextContext(_ctx, getState());
		enterRule(_localctx, 16, RULE_dollarStringText);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(545); 
			_errHandler.sync(this);
			_la = _input.LA(1);
			do {
				{
				{
				setState(544);
				match(DM_TEXT);
				}
				}
				setState(547); 
				_errHandler.sync(this);
				_la = _input.LA(1);
			} while ( _la==DM_TEXT );
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class CharacterStringContext extends ParserRuleContext {
		public CharacterStringContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_characterString; }
	 
		public CharacterStringContext() { }
		public void copyFrom(CharacterStringContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class DollarStringContext extends CharacterStringContext {
		public TerminalNode DOLLAR_TAG() { return getToken(Sql.DOLLAR_TAG, 0); }
		public TerminalNode DM_END_TAG() { return getToken(Sql.DM_END_TAG, 0); }
		public DollarStringTextContext dollarStringText() {
			return getRuleContext(DollarStringTextContext.class,0);
		}
		public DollarStringContext(CharacterStringContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitDollarString(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class SqlStandardStringContext extends CharacterStringContext {
		public TerminalNode CHARACTER_STRING() { return getToken(Sql.CHARACTER_STRING, 0); }
		public SqlStandardStringContext(CharacterStringContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSqlStandardString(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class CEscapesStringContext extends CharacterStringContext {
		public TerminalNode C_ESCAPES_STRING() { return getToken(Sql.C_ESCAPES_STRING, 0); }
		public CEscapesStringContext(CharacterStringContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitCEscapesString(this);
			else return visitor.visitChildren(this);
		}
	}

	public final CharacterStringContext characterString() throws RecognitionException {
		CharacterStringContext _localctx = new CharacterStringContext(_ctx, getState());
		enterRule(_localctx, 18, RULE_characterString);
		int _la;
		try {
			setState(556);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case CHARACTER_STRING:
				_localctx = new SqlStandardStringContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(549);
				match(CHARACTER_STRING);
				}
				break;
			case C_ESCAPES_STRING:
				_localctx = new CEscapesStringContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(550);
				match(C_ESCAPES_STRING);
				}
				break;
			case DOLLAR_TAG:
				_localctx = new DollarStringContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(551);
				match(DOLLAR_TAG);
				setState(553);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==DM_TEXT) {
					{
					setState(552);
					dollarStringText();
					}
				}

				setState(555);
				match(DM_END_TAG);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class IntervalQualifierContext extends ParserRuleContext {
		public StartFieldContext startField() {
			return getRuleContext(StartFieldContext.class,0);
		}
		public TerminalNode TO() { return getToken(Sql.TO, 0); }
		public EndFieldContext endField() {
			return getRuleContext(EndFieldContext.class,0);
		}
		public SingleDatetimeFieldContext singleDatetimeField() {
			return getRuleContext(SingleDatetimeFieldContext.class,0);
		}
		public IntervalQualifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_intervalQualifier; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitIntervalQualifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final IntervalQualifierContext intervalQualifier() throws RecognitionException {
		IntervalQualifierContext _localctx = new IntervalQualifierContext(_ctx, getState());
		enterRule(_localctx, 20, RULE_intervalQualifier);
		try {
			setState(563);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,24,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(558);
				startField();
				setState(559);
				match(TO);
				setState(560);
				endField();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(562);
				singleDatetimeField();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class StartFieldContext extends ParserRuleContext {
		public NonSecondPrimaryDatetimeFieldContext nonSecondPrimaryDatetimeField() {
			return getRuleContext(NonSecondPrimaryDatetimeFieldContext.class,0);
		}
		public StartFieldContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_startField; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitStartField(this);
			else return visitor.visitChildren(this);
		}
	}

	public final StartFieldContext startField() throws RecognitionException {
		StartFieldContext _localctx = new StartFieldContext(_ctx, getState());
		enterRule(_localctx, 22, RULE_startField);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(565);
			nonSecondPrimaryDatetimeField();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class EndFieldContext extends ParserRuleContext {
		public SingleDatetimeFieldContext singleDatetimeField() {
			return getRuleContext(SingleDatetimeFieldContext.class,0);
		}
		public EndFieldContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_endField; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitEndField(this);
			else return visitor.visitChildren(this);
		}
	}

	public final EndFieldContext endField() throws RecognitionException {
		EndFieldContext _localctx = new EndFieldContext(_ctx, getState());
		enterRule(_localctx, 24, RULE_endField);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(567);
			singleDatetimeField();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class IntervalFractionalSecondsPrecisionContext extends ParserRuleContext {
		public TerminalNode UNSIGNED_INTEGER() { return getToken(Sql.UNSIGNED_INTEGER, 0); }
		public IntervalFractionalSecondsPrecisionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_intervalFractionalSecondsPrecision; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitIntervalFractionalSecondsPrecision(this);
			else return visitor.visitChildren(this);
		}
	}

	public final IntervalFractionalSecondsPrecisionContext intervalFractionalSecondsPrecision() throws RecognitionException {
		IntervalFractionalSecondsPrecisionContext _localctx = new IntervalFractionalSecondsPrecisionContext(_ctx, getState());
		enterRule(_localctx, 26, RULE_intervalFractionalSecondsPrecision);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(569);
			match(UNSIGNED_INTEGER);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class NonSecondPrimaryDatetimeFieldContext extends ParserRuleContext {
		public TerminalNode YEAR() { return getToken(Sql.YEAR, 0); }
		public TerminalNode MONTH() { return getToken(Sql.MONTH, 0); }
		public TerminalNode DAY() { return getToken(Sql.DAY, 0); }
		public TerminalNode HOUR() { return getToken(Sql.HOUR, 0); }
		public TerminalNode MINUTE() { return getToken(Sql.MINUTE, 0); }
		public NonSecondPrimaryDatetimeFieldContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_nonSecondPrimaryDatetimeField; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitNonSecondPrimaryDatetimeField(this);
			else return visitor.visitChildren(this);
		}
	}

	public final NonSecondPrimaryDatetimeFieldContext nonSecondPrimaryDatetimeField() throws RecognitionException {
		NonSecondPrimaryDatetimeFieldContext _localctx = new NonSecondPrimaryDatetimeFieldContext(_ctx, getState());
		enterRule(_localctx, 28, RULE_nonSecondPrimaryDatetimeField);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(571);
			_la = _input.LA(1);
			if ( !(_la==DAY || _la==HOUR || _la==MINUTE || _la==MONTH || _la==YEAR) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class SingleDatetimeFieldContext extends ParserRuleContext {
		public NonSecondPrimaryDatetimeFieldContext nonSecondPrimaryDatetimeField() {
			return getRuleContext(NonSecondPrimaryDatetimeFieldContext.class,0);
		}
		public TerminalNode SECOND() { return getToken(Sql.SECOND, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public IntervalFractionalSecondsPrecisionContext intervalFractionalSecondsPrecision() {
			return getRuleContext(IntervalFractionalSecondsPrecisionContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public SingleDatetimeFieldContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_singleDatetimeField; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSingleDatetimeField(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SingleDatetimeFieldContext singleDatetimeField() throws RecognitionException {
		SingleDatetimeFieldContext _localctx = new SingleDatetimeFieldContext(_ctx, getState());
		enterRule(_localctx, 30, RULE_singleDatetimeField);
		try {
			setState(581);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case DAY:
			case HOUR:
			case MINUTE:
			case MONTH:
			case YEAR:
				enterOuterAlt(_localctx, 1);
				{
				setState(573);
				nonSecondPrimaryDatetimeField();
				}
				break;
			case SECOND:
				enterOuterAlt(_localctx, 2);
				{
				setState(574);
				match(SECOND);
				setState(579);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,25,_ctx) ) {
				case 1:
					{
					setState(575);
					match(LPAREN);
					setState(576);
					intervalFractionalSecondsPrecision();
					setState(577);
					match(RPAREN);
					}
					break;
				}
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class IdentifierChainContext extends ParserRuleContext {
		public List identifier() {
			return getRuleContexts(IdentifierContext.class);
		}
		public IdentifierContext identifier(int i) {
			return getRuleContext(IdentifierContext.class,i);
		}
		public List DOT() { return getTokens(Sql.DOT); }
		public TerminalNode DOT(int i) {
			return getToken(Sql.DOT, i);
		}
		public IdentifierChainContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_identifierChain; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitIdentifierChain(this);
			else return visitor.visitChildren(this);
		}
	}

	public final IdentifierChainContext identifierChain() throws RecognitionException {
		IdentifierChainContext _localctx = new IdentifierChainContext(_ctx, getState());
		enterRule(_localctx, 32, RULE_identifierChain);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(583);
			identifier();
			setState(588);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,27,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(584);
					match(DOT);
					setState(585);
					identifier();
					}
					} 
				}
				setState(590);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,27,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class IdentifierContext extends ParserRuleContext {
		public IdentifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_identifier; }
	 
		public IdentifierContext() { }
		public void copyFrom(IdentifierContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class DelimitedIdentifierContext extends IdentifierContext {
		public TerminalNode DELIMITED_IDENTIFIER() { return getToken(Sql.DELIMITED_IDENTIFIER, 0); }
		public DelimitedIdentifierContext(IdentifierContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitDelimitedIdentifier(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class RegularIdentifierContext extends IdentifierContext {
		public TerminalNode REGULAR_IDENTIFIER() { return getToken(Sql.REGULAR_IDENTIFIER, 0); }
		public TerminalNode START() { return getToken(Sql.START, 0); }
		public TerminalNode END() { return getToken(Sql.END, 0); }
		public TerminalNode AGE() { return getToken(Sql.AGE, 0); }
		public TerminalNode COMMITTED() { return getToken(Sql.COMMITTED, 0); }
		public TerminalNode UNCOMMITTED() { return getToken(Sql.UNCOMMITTED, 0); }
		public TerminalNode TIMEZONE() { return getToken(Sql.TIMEZONE, 0); }
		public TerminalNode VERSION() { return getToken(Sql.VERSION, 0); }
		public TerminalNode LATEST() { return getToken(Sql.LATEST, 0); }
		public TerminalNode SUBMITTED() { return getToken(Sql.SUBMITTED, 0); }
		public TerminalNode SYSTEM_TIME() { return getToken(Sql.SYSTEM_TIME, 0); }
		public TerminalNode VALID_TIME() { return getToken(Sql.VALID_TIME, 0); }
		public TerminalNode SELECT() { return getToken(Sql.SELECT, 0); }
		public TerminalNode INSERT() { return getToken(Sql.INSERT, 0); }
		public TerminalNode UPDATE() { return getToken(Sql.UPDATE, 0); }
		public TerminalNode DELETE() { return getToken(Sql.DELETE, 0); }
		public TerminalNode ERASE() { return getToken(Sql.ERASE, 0); }
		public TerminalNode SETTING() { return getToken(Sql.SETTING, 0); }
		public TerminalNode BASIS() { return getToken(Sql.BASIS, 0); }
		public TerminalNode CARDINALITY() { return getToken(Sql.CARDINALITY, 0); }
		public TerminalNode ROLE() { return getToken(Sql.ROLE, 0); }
		public SetFunctionTypeContext setFunctionType() {
			return getRuleContext(SetFunctionTypeContext.class,0);
		}
		public RegularIdentifierContext(IdentifierContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitRegularIdentifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final IdentifierContext identifier() throws RecognitionException {
		IdentifierContext _localctx = new IdentifierContext(_ctx, getState());
		enterRule(_localctx, 34, RULE_identifier);
		try {
			setState(616);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case AGE:
			case AVG:
			case BASIS:
			case BOOL_AND:
			case BOOL_OR:
			case CARDINALITY:
			case COMMITTED:
			case COUNT:
			case DELETE:
			case END:
			case ERASE:
			case EVERY:
			case INSERT:
			case LATEST:
			case MAX:
			case MIN:
			case ROLE:
			case SELECT:
			case SETTING:
			case START:
			case STDDEV_POP:
			case STDDEV_SAMP:
			case SUBMITTED:
			case SUM:
			case SYSTEM_TIME:
			case TIMEZONE:
			case UNCOMMITTED:
			case UPDATE:
			case VALID_TIME:
			case VAR_POP:
			case VAR_SAMP:
			case VERSION:
			case REGULAR_IDENTIFIER:
				_localctx = new RegularIdentifierContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(613);
				_errHandler.sync(this);
				switch (_input.LA(1)) {
				case REGULAR_IDENTIFIER:
					{
					setState(591);
					match(REGULAR_IDENTIFIER);
					}
					break;
				case START:
					{
					setState(592);
					match(START);
					}
					break;
				case END:
					{
					setState(593);
					match(END);
					}
					break;
				case AGE:
					{
					setState(594);
					match(AGE);
					}
					break;
				case COMMITTED:
					{
					setState(595);
					match(COMMITTED);
					}
					break;
				case UNCOMMITTED:
					{
					setState(596);
					match(UNCOMMITTED);
					}
					break;
				case TIMEZONE:
					{
					setState(597);
					match(TIMEZONE);
					}
					break;
				case VERSION:
					{
					setState(598);
					match(VERSION);
					}
					break;
				case LATEST:
					{
					setState(599);
					match(LATEST);
					}
					break;
				case SUBMITTED:
					{
					setState(600);
					match(SUBMITTED);
					}
					break;
				case SYSTEM_TIME:
					{
					setState(601);
					match(SYSTEM_TIME);
					}
					break;
				case VALID_TIME:
					{
					setState(602);
					match(VALID_TIME);
					}
					break;
				case SELECT:
					{
					setState(603);
					match(SELECT);
					}
					break;
				case INSERT:
					{
					setState(604);
					match(INSERT);
					}
					break;
				case UPDATE:
					{
					setState(605);
					match(UPDATE);
					}
					break;
				case DELETE:
					{
					setState(606);
					match(DELETE);
					}
					break;
				case ERASE:
					{
					setState(607);
					match(ERASE);
					}
					break;
				case SETTING:
					{
					setState(608);
					match(SETTING);
					}
					break;
				case BASIS:
					{
					setState(609);
					match(BASIS);
					}
					break;
				case CARDINALITY:
					{
					setState(610);
					match(CARDINALITY);
					}
					break;
				case ROLE:
					{
					setState(611);
					match(ROLE);
					}
					break;
				case AVG:
				case BOOL_AND:
				case BOOL_OR:
				case COUNT:
				case EVERY:
				case MAX:
				case MIN:
				case STDDEV_POP:
				case STDDEV_SAMP:
				case SUM:
				case VAR_POP:
				case VAR_SAMP:
					{
					setState(612);
					setFunctionType();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			case DELIMITED_IDENTIFIER:
				_localctx = new DelimitedIdentifierContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(615);
				match(DELIMITED_IDENTIFIER);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class SchemaNameContext extends ParserRuleContext {
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public SchemaNameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_schemaName; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSchemaName(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SchemaNameContext schemaName() throws RecognitionException {
		SchemaNameContext _localctx = new SchemaNameContext(_ctx, getState());
		enterRule(_localctx, 36, RULE_schemaName);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(618);
			identifier();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class TableNameContext extends ParserRuleContext {
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public SchemaNameContext schemaName() {
			return getRuleContext(SchemaNameContext.class,0);
		}
		public TerminalNode DOT() { return getToken(Sql.DOT, 0); }
		public TableNameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_tableName; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitTableName(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TableNameContext tableName() throws RecognitionException {
		TableNameContext _localctx = new TableNameContext(_ctx, getState());
		enterRule(_localctx, 38, RULE_tableName);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(625);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,30,_ctx) ) {
			case 1:
				{
				setState(620);
				identifier();
				}
				break;
			case 2:
				{
				setState(621);
				schemaName();
				setState(622);
				match(DOT);
				setState(623);
				identifier();
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ColumnNameContext extends ParserRuleContext {
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public ColumnNameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_columnName; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitColumnName(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ColumnNameContext columnName() throws RecognitionException {
		ColumnNameContext _localctx = new ColumnNameContext(_ctx, getState());
		enterRule(_localctx, 40, RULE_columnName);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(627);
			identifier();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class CorrelationNameContext extends ParserRuleContext {
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public CorrelationNameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_correlationName; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitCorrelationName(this);
			else return visitor.visitChildren(this);
		}
	}

	public final CorrelationNameContext correlationName() throws RecognitionException {
		CorrelationNameContext _localctx = new CorrelationNameContext(_ctx, getState());
		enterRule(_localctx, 42, RULE_correlationName);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(629);
			identifier();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class QueryNameContext extends ParserRuleContext {
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public QueryNameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_queryName; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitQueryName(this);
			else return visitor.visitChildren(this);
		}
	}

	public final QueryNameContext queryName() throws RecognitionException {
		QueryNameContext _localctx = new QueryNameContext(_ctx, getState());
		enterRule(_localctx, 44, RULE_queryName);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(631);
			identifier();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class FieldNameContext extends ParserRuleContext {
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public FieldNameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_fieldName; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitFieldName(this);
			else return visitor.visitChildren(this);
		}
	}

	public final FieldNameContext fieldName() throws RecognitionException {
		FieldNameContext _localctx = new FieldNameContext(_ctx, getState());
		enterRule(_localctx, 46, RULE_fieldName);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(633);
			identifier();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WindowNameContext extends ParserRuleContext {
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public WindowNameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_windowName; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWindowName(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WindowNameContext windowName() throws RecognitionException {
		WindowNameContext _localctx = new WindowNameContext(_ctx, getState());
		enterRule(_localctx, 48, RULE_windowName);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(635);
			identifier();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class DataTypeContext extends ParserRuleContext {
		public DataTypeContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_dataType; }
	 
		public DataTypeContext() { }
		public void copyFrom(DataTypeContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class DurationTypeContext extends DataTypeContext {
		public TerminalNode DURATION() { return getToken(Sql.DURATION, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public PrecisionContext precision() {
			return getRuleContext(PrecisionContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public DurationTypeContext(DataTypeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitDurationType(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class CharacterStringTypeContext extends DataTypeContext {
		public TerminalNode VARCHAR() { return getToken(Sql.VARCHAR, 0); }
		public TerminalNode TEXT() { return getToken(Sql.TEXT, 0); }
		public CharacterStringTypeContext(DataTypeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitCharacterStringType(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class IntervalTypeContext extends DataTypeContext {
		public TerminalNode INTERVAL() { return getToken(Sql.INTERVAL, 0); }
		public IntervalQualifierContext intervalQualifier() {
			return getRuleContext(IntervalQualifierContext.class,0);
		}
		public IntervalTypeContext(DataTypeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitIntervalType(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class BooleanTypeContext extends DataTypeContext {
		public TerminalNode BOOLEAN() { return getToken(Sql.BOOLEAN, 0); }
		public BooleanTypeContext(DataTypeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitBooleanType(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class RegProcTypeContext extends DataTypeContext {
		public TerminalNode REGPROC() { return getToken(Sql.REGPROC, 0); }
		public RegProcTypeContext(DataTypeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitRegProcType(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class RowTypeContext extends DataTypeContext {
		public TerminalNode ROW() { return getToken(Sql.ROW, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public List fieldDefinition() {
			return getRuleContexts(FieldDefinitionContext.class);
		}
		public FieldDefinitionContext fieldDefinition(int i) {
			return getRuleContext(FieldDefinitionContext.class,i);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public RowTypeContext(DataTypeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitRowType(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class RealTypeContext extends DataTypeContext {
		public TerminalNode REAL() { return getToken(Sql.REAL, 0); }
		public RealTypeContext(DataTypeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitRealType(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class TimestampTzTypeContext extends DataTypeContext {
		public TerminalNode TIMESTAMPTZ() { return getToken(Sql.TIMESTAMPTZ, 0); }
		public TimestampTzTypeContext(DataTypeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitTimestampTzType(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class FloatTypeContext extends DataTypeContext {
		public TerminalNode FLOAT() { return getToken(Sql.FLOAT, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public PrecisionContext precision() {
			return getRuleContext(PrecisionContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public FloatTypeContext(DataTypeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitFloatType(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class TimeTypeContext extends DataTypeContext {
		public TerminalNode TIME() { return getToken(Sql.TIME, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public PrecisionContext precision() {
			return getRuleContext(PrecisionContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public WithOrWithoutTimeZoneContext withOrWithoutTimeZone() {
			return getRuleContext(WithOrWithoutTimeZoneContext.class,0);
		}
		public TimeTypeContext(DataTypeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitTimeType(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class IntegerTypeContext extends DataTypeContext {
		public TerminalNode SMALLINT() { return getToken(Sql.SMALLINT, 0); }
		public TerminalNode INTEGER() { return getToken(Sql.INTEGER, 0); }
		public TerminalNode INT() { return getToken(Sql.INT, 0); }
		public TerminalNode BIGINT() { return getToken(Sql.BIGINT, 0); }
		public IntegerTypeContext(DataTypeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitIntegerType(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ArrayTypeContext extends DataTypeContext {
		public DataTypeContext dataType() {
			return getRuleContext(DataTypeContext.class,0);
		}
		public TerminalNode ARRAY() { return getToken(Sql.ARRAY, 0); }
		public TerminalNode LBRACK() { return getToken(Sql.LBRACK, 0); }
		public MaximumCardinalityContext maximumCardinality() {
			return getRuleContext(MaximumCardinalityContext.class,0);
		}
		public TerminalNode RBRACK() { return getToken(Sql.RBRACK, 0); }
		public ArrayTypeContext(DataTypeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitArrayType(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class RegClassTypeContext extends DataTypeContext {
		public TerminalNode REGCLASS() { return getToken(Sql.REGCLASS, 0); }
		public RegClassTypeContext(DataTypeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitRegClassType(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class DoubleTypeContext extends DataTypeContext {
		public TerminalNode DOUBLE() { return getToken(Sql.DOUBLE, 0); }
		public TerminalNode PRECISION() { return getToken(Sql.PRECISION, 0); }
		public DoubleTypeContext(DataTypeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitDoubleType(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class DecimalTypeContext extends DataTypeContext {
		public TerminalNode NUMERIC() { return getToken(Sql.NUMERIC, 0); }
		public TerminalNode DECIMAL() { return getToken(Sql.DECIMAL, 0); }
		public TerminalNode DEC() { return getToken(Sql.DEC, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public PrecisionContext precision() {
			return getRuleContext(PrecisionContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public TerminalNode COMMA() { return getToken(Sql.COMMA, 0); }
		public ScaleContext scale() {
			return getRuleContext(ScaleContext.class,0);
		}
		public DecimalTypeContext(DataTypeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitDecimalType(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class TimestampTypeContext extends DataTypeContext {
		public TerminalNode TIMESTAMP() { return getToken(Sql.TIMESTAMP, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public PrecisionContext precision() {
			return getRuleContext(PrecisionContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public WithOrWithoutTimeZoneContext withOrWithoutTimeZone() {
			return getRuleContext(WithOrWithoutTimeZoneContext.class,0);
		}
		public TimestampTypeContext(DataTypeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitTimestampType(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class DateTypeContext extends DataTypeContext {
		public TerminalNode DATE() { return getToken(Sql.DATE, 0); }
		public DateTypeContext(DataTypeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitDateType(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DataTypeContext dataType() throws RecognitionException {
		return dataType(0);
	}

	private DataTypeContext dataType(int _p) throws RecognitionException {
		ParserRuleContext _parentctx = _ctx;
		int _parentState = getState();
		DataTypeContext _localctx = new DataTypeContext(_ctx, _parentState);
		DataTypeContext _prevctx = _localctx;
		int _startState = 50;
		enterRecursionRule(_localctx, 50, RULE_dataType, _p);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(709);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case DEC:
			case DECIMAL:
			case NUMERIC:
				{
				_localctx = new DecimalTypeContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;

				setState(638);
				_la = _input.LA(1);
				if ( !(_la==DEC || _la==DECIMAL || _la==NUMERIC) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(647);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,32,_ctx) ) {
				case 1:
					{
					setState(639);
					match(LPAREN);
					setState(640);
					precision();
					setState(643);
					_errHandler.sync(this);
					_la = _input.LA(1);
					if (_la==COMMA) {
						{
						setState(641);
						match(COMMA);
						setState(642);
						scale();
						}
					}

					setState(645);
					match(RPAREN);
					}
					break;
				}
				}
				break;
			case BIGINT:
			case INT:
			case INTEGER:
			case SMALLINT:
				{
				_localctx = new IntegerTypeContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(649);
				_la = _input.LA(1);
				if ( !(_la==BIGINT || _la==INT || _la==INTEGER || _la==SMALLINT) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				}
				break;
			case FLOAT:
				{
				_localctx = new FloatTypeContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(650);
				match(FLOAT);
				setState(655);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,33,_ctx) ) {
				case 1:
					{
					setState(651);
					match(LPAREN);
					setState(652);
					precision();
					setState(653);
					match(RPAREN);
					}
					break;
				}
				}
				break;
			case REAL:
				{
				_localctx = new RealTypeContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(657);
				match(REAL);
				}
				break;
			case DOUBLE:
				{
				_localctx = new DoubleTypeContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(658);
				match(DOUBLE);
				setState(659);
				match(PRECISION);
				}
				break;
			case BOOLEAN:
				{
				_localctx = new BooleanTypeContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(660);
				match(BOOLEAN);
				}
				break;
			case DATE:
				{
				_localctx = new DateTypeContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(661);
				match(DATE);
				}
				break;
			case TIME:
				{
				_localctx = new TimeTypeContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(662);
				match(TIME);
				setState(667);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,34,_ctx) ) {
				case 1:
					{
					setState(663);
					match(LPAREN);
					setState(664);
					precision();
					setState(665);
					match(RPAREN);
					}
					break;
				}
				setState(670);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,35,_ctx) ) {
				case 1:
					{
					setState(669);
					withOrWithoutTimeZone();
					}
					break;
				}
				}
				break;
			case TIMESTAMP:
				{
				_localctx = new TimestampTypeContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(672);
				match(TIMESTAMP);
				setState(677);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,36,_ctx) ) {
				case 1:
					{
					setState(673);
					match(LPAREN);
					setState(674);
					precision();
					setState(675);
					match(RPAREN);
					}
					break;
				}
				setState(680);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,37,_ctx) ) {
				case 1:
					{
					setState(679);
					withOrWithoutTimeZone();
					}
					break;
				}
				}
				break;
			case TIMESTAMPTZ:
				{
				_localctx = new TimestampTzTypeContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(682);
				match(TIMESTAMPTZ);
				}
				break;
			case INTERVAL:
				{
				_localctx = new IntervalTypeContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(683);
				match(INTERVAL);
				setState(685);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,38,_ctx) ) {
				case 1:
					{
					setState(684);
					intervalQualifier();
					}
					break;
				}
				}
				break;
			case TEXT:
			case VARCHAR:
				{
				_localctx = new CharacterStringTypeContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(687);
				_la = _input.LA(1);
				if ( !(_la==TEXT || _la==VARCHAR) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				}
				break;
			case DURATION:
				{
				_localctx = new DurationTypeContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(688);
				match(DURATION);
				setState(693);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,39,_ctx) ) {
				case 1:
					{
					setState(689);
					match(LPAREN);
					setState(690);
					precision();
					setState(691);
					match(RPAREN);
					}
					break;
				}
				}
				break;
			case ROW:
				{
				_localctx = new RowTypeContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(695);
				match(ROW);
				setState(696);
				match(LPAREN);
				setState(697);
				fieldDefinition();
				setState(702);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==COMMA) {
					{
					{
					setState(698);
					match(COMMA);
					setState(699);
					fieldDefinition();
					}
					}
					setState(704);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				setState(705);
				match(RPAREN);
				}
				break;
			case REGCLASS:
				{
				_localctx = new RegClassTypeContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(707);
				match(REGCLASS);
				}
				break;
			case REGPROC:
				{
				_localctx = new RegProcTypeContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(708);
				match(REGPROC);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
			_ctx.stop = _input.LT(-1);
			setState(721);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,43,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					if ( _parseListeners!=null ) triggerExitRuleEvent();
					_prevctx = _localctx;
					{
					{
					_localctx = new ArrayTypeContext(new DataTypeContext(_parentctx, _parentState));
					pushNewRecursionContext(_localctx, _startState, RULE_dataType);
					setState(711);
					if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
					setState(712);
					match(ARRAY);
					setState(717);
					_errHandler.sync(this);
					switch ( getInterpreter().adaptivePredict(_input,42,_ctx) ) {
					case 1:
						{
						setState(713);
						match(LBRACK);
						setState(714);
						maximumCardinality();
						setState(715);
						match(RBRACK);
						}
						break;
					}
					}
					} 
				}
				setState(723);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,43,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			unrollRecursionContexts(_parentctx);
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class PrecisionContext extends ParserRuleContext {
		public TerminalNode UNSIGNED_INTEGER() { return getToken(Sql.UNSIGNED_INTEGER, 0); }
		public PrecisionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_precision; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitPrecision(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PrecisionContext precision() throws RecognitionException {
		PrecisionContext _localctx = new PrecisionContext(_ctx, getState());
		enterRule(_localctx, 52, RULE_precision);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(724);
			match(UNSIGNED_INTEGER);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ScaleContext extends ParserRuleContext {
		public TerminalNode UNSIGNED_INTEGER() { return getToken(Sql.UNSIGNED_INTEGER, 0); }
		public ScaleContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_scale; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitScale(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ScaleContext scale() throws RecognitionException {
		ScaleContext _localctx = new ScaleContext(_ctx, getState());
		enterRule(_localctx, 54, RULE_scale);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(726);
			match(UNSIGNED_INTEGER);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class CharLengthUnitsContext extends ParserRuleContext {
		public TerminalNode CHARACTERS() { return getToken(Sql.CHARACTERS, 0); }
		public TerminalNode OCTETS() { return getToken(Sql.OCTETS, 0); }
		public CharLengthUnitsContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_charLengthUnits; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitCharLengthUnits(this);
			else return visitor.visitChildren(this);
		}
	}

	public final CharLengthUnitsContext charLengthUnits() throws RecognitionException {
		CharLengthUnitsContext _localctx = new CharLengthUnitsContext(_ctx, getState());
		enterRule(_localctx, 56, RULE_charLengthUnits);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(728);
			_la = _input.LA(1);
			if ( !(_la==CHARACTERS || _la==OCTETS) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WithOrWithoutTimeZoneContext extends ParserRuleContext {
		public WithOrWithoutTimeZoneContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_withOrWithoutTimeZone; }
	 
		public WithOrWithoutTimeZoneContext() { }
		public void copyFrom(WithOrWithoutTimeZoneContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class WithTimeZoneContext extends WithOrWithoutTimeZoneContext {
		public TerminalNode WITH() { return getToken(Sql.WITH, 0); }
		public TerminalNode TIME() { return getToken(Sql.TIME, 0); }
		public TerminalNode ZONE() { return getToken(Sql.ZONE, 0); }
		public WithTimeZoneContext(WithOrWithoutTimeZoneContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWithTimeZone(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class WithoutTimeZoneContext extends WithOrWithoutTimeZoneContext {
		public TerminalNode WITHOUT() { return getToken(Sql.WITHOUT, 0); }
		public TerminalNode TIME() { return getToken(Sql.TIME, 0); }
		public TerminalNode ZONE() { return getToken(Sql.ZONE, 0); }
		public WithoutTimeZoneContext(WithOrWithoutTimeZoneContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWithoutTimeZone(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WithOrWithoutTimeZoneContext withOrWithoutTimeZone() throws RecognitionException {
		WithOrWithoutTimeZoneContext _localctx = new WithOrWithoutTimeZoneContext(_ctx, getState());
		enterRule(_localctx, 58, RULE_withOrWithoutTimeZone);
		try {
			setState(736);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case WITH:
				_localctx = new WithTimeZoneContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(730);
				match(WITH);
				setState(731);
				match(TIME);
				setState(732);
				match(ZONE);
				}
				break;
			case WITHOUT:
				_localctx = new WithoutTimeZoneContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(733);
				match(WITHOUT);
				setState(734);
				match(TIME);
				setState(735);
				match(ZONE);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class MaximumCardinalityContext extends ParserRuleContext {
		public TerminalNode UNSIGNED_INTEGER() { return getToken(Sql.UNSIGNED_INTEGER, 0); }
		public MaximumCardinalityContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_maximumCardinality; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitMaximumCardinality(this);
			else return visitor.visitChildren(this);
		}
	}

	public final MaximumCardinalityContext maximumCardinality() throws RecognitionException {
		MaximumCardinalityContext _localctx = new MaximumCardinalityContext(_ctx, getState());
		enterRule(_localctx, 60, RULE_maximumCardinality);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(738);
			match(UNSIGNED_INTEGER);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class FieldDefinitionContext extends ParserRuleContext {
		public FieldNameContext fieldName() {
			return getRuleContext(FieldNameContext.class,0);
		}
		public DataTypeContext dataType() {
			return getRuleContext(DataTypeContext.class,0);
		}
		public FieldDefinitionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_fieldDefinition; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitFieldDefinition(this);
			else return visitor.visitChildren(this);
		}
	}

	public final FieldDefinitionContext fieldDefinition() throws RecognitionException {
		FieldDefinitionContext _localctx = new FieldDefinitionContext(_ctx, getState());
		enterRule(_localctx, 62, RULE_fieldDefinition);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(740);
			fieldName();
			setState(741);
			dataType(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ExprContext extends ParserRuleContext {
		public ExprContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_expr; }
	 
		public ExprContext() { }
		public void copyFrom(ExprContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class AndExprContext extends ExprContext {
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public TerminalNode AND() { return getToken(Sql.AND, 0); }
		public AndExprContext(ExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitAndExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class PeriodContainsPredicateContext extends ExprContext {
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public TerminalNode CONTAINS() { return getToken(Sql.CONTAINS, 0); }
		public PeriodContainsPredicateContext(ExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitPeriodContainsPredicate(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class PeriodImmediatelyPrecedesPredicateContext extends ExprContext {
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public TerminalNode IMMEDIATELY() { return getToken(Sql.IMMEDIATELY, 0); }
		public TerminalNode PRECEDES() { return getToken(Sql.PRECEDES, 0); }
		public PeriodImmediatelyPrecedesPredicateContext(ExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitPeriodImmediatelyPrecedesPredicate(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class IsBooleanValueExprContext extends ExprContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode IS() { return getToken(Sql.IS, 0); }
		public BooleanValueContext booleanValue() {
			return getRuleContext(BooleanValueContext.class,0);
		}
		public TerminalNode NOT() { return getToken(Sql.NOT, 0); }
		public IsBooleanValueExprContext(ExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitIsBooleanValueExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class BetweenPredicateContext extends ExprContext {
		public List numericExpr() {
			return getRuleContexts(NumericExprContext.class);
		}
		public NumericExprContext numericExpr(int i) {
			return getRuleContext(NumericExprContext.class,i);
		}
		public TerminalNode BETWEEN() { return getToken(Sql.BETWEEN, 0); }
		public TerminalNode AND() { return getToken(Sql.AND, 0); }
		public TerminalNode NOT() { return getToken(Sql.NOT, 0); }
		public TerminalNode ASYMMETRIC() { return getToken(Sql.ASYMMETRIC, 0); }
		public TerminalNode SYMMETRIC() { return getToken(Sql.SYMMETRIC, 0); }
		public BetweenPredicateContext(ExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitBetweenPredicate(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class PostgresRegexPredicateContext extends ExprContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public PostgresRegexOperatorContext postgresRegexOperator() {
			return getRuleContext(PostgresRegexOperatorContext.class,0);
		}
		public XqueryPatternContext xqueryPattern() {
			return getRuleContext(XqueryPatternContext.class,0);
		}
		public PostgresRegexPredicateContext(ExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitPostgresRegexPredicate(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class UnaryNotExprContext extends ExprContext {
		public TerminalNode NOT() { return getToken(Sql.NOT, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public UnaryNotExprContext(ExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitUnaryNotExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class PeriodSucceedsPredicateContext extends ExprContext {
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public TerminalNode SUCCEEDS() { return getToken(Sql.SUCCEEDS, 0); }
		public PeriodSucceedsPredicateContext(ExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitPeriodSucceedsPredicate(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class LikePredicateContext extends ExprContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode LIKE() { return getToken(Sql.LIKE, 0); }
		public LikePatternContext likePattern() {
			return getRuleContext(LikePatternContext.class,0);
		}
		public TerminalNode NOT() { return getToken(Sql.NOT, 0); }
		public TerminalNode ESCAPE() { return getToken(Sql.ESCAPE, 0); }
		public LikeEscapeContext likeEscape() {
			return getRuleContext(LikeEscapeContext.class,0);
		}
		public LikePredicateContext(ExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitLikePredicate(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class InPredicateContext extends ExprContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode IN() { return getToken(Sql.IN, 0); }
		public InPredicateValueContext inPredicateValue() {
			return getRuleContext(InPredicateValueContext.class,0);
		}
		public TerminalNode NOT() { return getToken(Sql.NOT, 0); }
		public InPredicateContext(ExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitInPredicate(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class PeriodPrecedesPredicateContext extends ExprContext {
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public TerminalNode PRECEDES() { return getToken(Sql.PRECEDES, 0); }
		public PeriodPrecedesPredicateContext(ExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitPeriodPrecedesPredicate(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ComparisonPredicateContext extends ExprContext {
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public CompOpContext compOp() {
			return getRuleContext(CompOpContext.class,0);
		}
		public ComparisonPredicateContext(ExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitComparisonPredicate(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class OrExprContext extends ExprContext {
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public TerminalNode OR() { return getToken(Sql.OR, 0); }
		public OrExprContext(ExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitOrExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class PeriodImmediatelySucceedsPredicateContext extends ExprContext {
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public TerminalNode IMMEDIATELY() { return getToken(Sql.IMMEDIATELY, 0); }
		public TerminalNode SUCCEEDS() { return getToken(Sql.SUCCEEDS, 0); }
		public PeriodImmediatelySucceedsPredicateContext(ExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitPeriodImmediatelySucceedsPredicate(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class QuantifiedComparisonPredicateContext extends ExprContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public CompOpContext compOp() {
			return getRuleContext(CompOpContext.class,0);
		}
		public QuantifierContext quantifier() {
			return getRuleContext(QuantifierContext.class,0);
		}
		public QuantifiedComparisonPredicatePart3Context quantifiedComparisonPredicatePart3() {
			return getRuleContext(QuantifiedComparisonPredicatePart3Context.class,0);
		}
		public QuantifiedComparisonPredicateContext(ExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitQuantifiedComparisonPredicate(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class NullPredicateContext extends ExprContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode IS() { return getToken(Sql.IS, 0); }
		public TerminalNode NULL() { return getToken(Sql.NULL, 0); }
		public TerminalNode NOT() { return getToken(Sql.NOT, 0); }
		public NullPredicateContext(ExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitNullPredicate(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class NumericExpr0Context extends ExprContext {
		public NumericExprContext numericExpr() {
			return getRuleContext(NumericExprContext.class,0);
		}
		public NumericExpr0Context(ExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitNumericExpr0(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class PeriodEqualsPredicateContext extends ExprContext {
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public TerminalNode EQUALS() { return getToken(Sql.EQUALS, 0); }
		public PeriodEqualsPredicateContext(ExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitPeriodEqualsPredicate(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class LikeRegexPredicateContext extends ExprContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode LIKE_REGEX() { return getToken(Sql.LIKE_REGEX, 0); }
		public XqueryPatternContext xqueryPattern() {
			return getRuleContext(XqueryPatternContext.class,0);
		}
		public TerminalNode NOT() { return getToken(Sql.NOT, 0); }
		public TerminalNode FLAG() { return getToken(Sql.FLAG, 0); }
		public XqueryOptionFlagContext xqueryOptionFlag() {
			return getRuleContext(XqueryOptionFlagContext.class,0);
		}
		public LikeRegexPredicateContext(ExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitLikeRegexPredicate(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class PeriodOverlapsPredicateContext extends ExprContext {
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public TerminalNode OVERLAPS() { return getToken(Sql.OVERLAPS, 0); }
		public PeriodOverlapsPredicateContext(ExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitPeriodOverlapsPredicate(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ExprContext expr() throws RecognitionException {
		return expr(0);
	}

	private ExprContext expr(int _p) throws RecognitionException {
		ParserRuleContext _parentctx = _ctx;
		int _parentState = getState();
		ExprContext _localctx = new ExprContext(_ctx, _parentState);
		ExprContext _prevctx = _localctx;
		int _startState = 64;
		enterRecursionRule(_localctx, 64, RULE_expr, _p);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(759);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,47,_ctx) ) {
			case 1:
				{
				_localctx = new BetweenPredicateContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;

				setState(744);
				numericExpr(0);
				setState(746);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NOT) {
					{
					setState(745);
					match(NOT);
					}
				}

				setState(748);
				match(BETWEEN);
				setState(750);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==ASYMMETRIC || _la==SYMMETRIC) {
					{
					setState(749);
					_la = _input.LA(1);
					if ( !(_la==ASYMMETRIC || _la==SYMMETRIC) ) {
					_errHandler.recoverInline(this);
					}
					else {
						if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
						_errHandler.reportMatch(this);
						consume();
					}
					}
				}

				setState(752);
				numericExpr(0);
				setState(753);
				match(AND);
				setState(754);
				numericExpr(0);
				}
				break;
			case 2:
				{
				_localctx = new UnaryNotExprContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(756);
				match(NOT);
				setState(757);
				expr(4);
				}
				break;
			case 3:
				{
				_localctx = new NumericExpr0Context(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(758);
				numericExpr(0);
				}
				break;
			}
			_ctx.stop = _input.LT(-1);
			setState(843);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,56,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					if ( _parseListeners!=null ) triggerExitRuleEvent();
					_prevctx = _localctx;
					{
					setState(841);
					_errHandler.sync(this);
					switch ( getInterpreter().adaptivePredict(_input,55,_ctx) ) {
					case 1:
						{
						_localctx = new ComparisonPredicateContext(new ExprContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expr);
						setState(761);
						if (!(precpred(_ctx, 19))) throw new FailedPredicateException(this, "precpred(_ctx, 19)");
						setState(762);
						compOp();
						setState(763);
						expr(20);
						}
						break;
					case 2:
						{
						_localctx = new PeriodOverlapsPredicateContext(new ExprContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expr);
						setState(765);
						if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)");
						setState(766);
						match(OVERLAPS);
						setState(767);
						expr(13);
						}
						break;
					case 3:
						{
						_localctx = new PeriodEqualsPredicateContext(new ExprContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expr);
						setState(768);
						if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)");
						setState(769);
						match(EQUALS);
						setState(770);
						expr(12);
						}
						break;
					case 4:
						{
						_localctx = new PeriodContainsPredicateContext(new ExprContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expr);
						setState(771);
						if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)");
						setState(772);
						match(CONTAINS);
						setState(773);
						expr(11);
						}
						break;
					case 5:
						{
						_localctx = new PeriodPrecedesPredicateContext(new ExprContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expr);
						setState(774);
						if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)");
						setState(775);
						match(PRECEDES);
						setState(776);
						expr(10);
						}
						break;
					case 6:
						{
						_localctx = new PeriodSucceedsPredicateContext(new ExprContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expr);
						setState(777);
						if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)");
						setState(778);
						match(SUCCEEDS);
						setState(779);
						expr(9);
						}
						break;
					case 7:
						{
						_localctx = new PeriodImmediatelyPrecedesPredicateContext(new ExprContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expr);
						setState(780);
						if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
						setState(781);
						match(IMMEDIATELY);
						setState(782);
						match(PRECEDES);
						setState(783);
						expr(8);
						}
						break;
					case 8:
						{
						_localctx = new PeriodImmediatelySucceedsPredicateContext(new ExprContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expr);
						setState(784);
						if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
						setState(785);
						match(IMMEDIATELY);
						setState(786);
						match(SUCCEEDS);
						setState(787);
						expr(7);
						}
						break;
					case 9:
						{
						_localctx = new AndExprContext(new ExprContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expr);
						setState(788);
						if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)");
						setState(789);
						match(AND);
						setState(790);
						expr(4);
						}
						break;
					case 10:
						{
						_localctx = new OrExprContext(new ExprContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expr);
						setState(791);
						if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)");
						setState(792);
						match(OR);
						setState(793);
						expr(3);
						}
						break;
					case 11:
						{
						_localctx = new IsBooleanValueExprContext(new ExprContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expr);
						setState(794);
						if (!(precpred(_ctx, 20))) throw new FailedPredicateException(this, "precpred(_ctx, 20)");
						setState(795);
						match(IS);
						setState(797);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==NOT) {
							{
							setState(796);
							match(NOT);
							}
						}

						setState(799);
						booleanValue();
						}
						break;
					case 12:
						{
						_localctx = new InPredicateContext(new ExprContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expr);
						setState(800);
						if (!(precpred(_ctx, 17))) throw new FailedPredicateException(this, "precpred(_ctx, 17)");
						setState(802);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==NOT) {
							{
							setState(801);
							match(NOT);
							}
						}

						setState(804);
						match(IN);
						setState(805);
						inPredicateValue();
						}
						break;
					case 13:
						{
						_localctx = new LikePredicateContext(new ExprContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expr);
						setState(806);
						if (!(precpred(_ctx, 16))) throw new FailedPredicateException(this, "precpred(_ctx, 16)");
						setState(808);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==NOT) {
							{
							setState(807);
							match(NOT);
							}
						}

						setState(810);
						match(LIKE);
						setState(811);
						likePattern();
						setState(814);
						_errHandler.sync(this);
						switch ( getInterpreter().adaptivePredict(_input,51,_ctx) ) {
						case 1:
							{
							setState(812);
							match(ESCAPE);
							setState(813);
							likeEscape();
							}
							break;
						}
						}
						break;
					case 14:
						{
						_localctx = new LikeRegexPredicateContext(new ExprContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expr);
						setState(816);
						if (!(precpred(_ctx, 15))) throw new FailedPredicateException(this, "precpred(_ctx, 15)");
						setState(818);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==NOT) {
							{
							setState(817);
							match(NOT);
							}
						}

						setState(820);
						match(LIKE_REGEX);
						setState(821);
						xqueryPattern();
						setState(824);
						_errHandler.sync(this);
						switch ( getInterpreter().adaptivePredict(_input,53,_ctx) ) {
						case 1:
							{
							setState(822);
							match(FLAG);
							setState(823);
							xqueryOptionFlag();
							}
							break;
						}
						}
						break;
					case 15:
						{
						_localctx = new PostgresRegexPredicateContext(new ExprContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expr);
						setState(826);
						if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)");
						setState(827);
						postgresRegexOperator();
						setState(828);
						xqueryPattern();
						}
						break;
					case 16:
						{
						_localctx = new NullPredicateContext(new ExprContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expr);
						setState(830);
						if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)");
						setState(831);
						match(IS);
						setState(833);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==NOT) {
							{
							setState(832);
							match(NOT);
							}
						}

						setState(835);
						match(NULL);
						}
						break;
					case 17:
						{
						_localctx = new QuantifiedComparisonPredicateContext(new ExprContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expr);
						setState(836);
						if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)");
						setState(837);
						compOp();
						setState(838);
						quantifier();
						setState(839);
						quantifiedComparisonPredicatePart3();
						}
						break;
					}
					} 
				}
				setState(845);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,56,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			unrollRecursionContexts(_parentctx);
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class NumericExprContext extends ParserRuleContext {
		public NumericExprContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_numericExpr; }
	 
		public NumericExprContext() { }
		public void copyFrom(NumericExprContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class NumericBitwiseAndExprContext extends NumericExprContext {
		public List numericExpr() {
			return getRuleContexts(NumericExprContext.class);
		}
		public NumericExprContext numericExpr(int i) {
			return getRuleContext(NumericExprContext.class,i);
		}
		public TerminalNode AMPERSAND() { return getToken(Sql.AMPERSAND, 0); }
		public NumericBitwiseAndExprContext(NumericExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitNumericBitwiseAndExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class NumericBitwiseNotExprContext extends NumericExprContext {
		public TerminalNode TILDE() { return getToken(Sql.TILDE, 0); }
		public NumericExprContext numericExpr() {
			return getRuleContext(NumericExprContext.class,0);
		}
		public NumericBitwiseNotExprContext(NumericExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitNumericBitwiseNotExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class UnaryPlusExprContext extends NumericExprContext {
		public TerminalNode PLUS() { return getToken(Sql.PLUS, 0); }
		public NumericExprContext numericExpr() {
			return getRuleContext(NumericExprContext.class,0);
		}
		public UnaryPlusExprContext(NumericExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitUnaryPlusExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class NumericTermExprContext extends NumericExprContext {
		public List numericExpr() {
			return getRuleContexts(NumericExprContext.class);
		}
		public NumericExprContext numericExpr(int i) {
			return getRuleContext(NumericExprContext.class,i);
		}
		public TerminalNode PLUS() { return getToken(Sql.PLUS, 0); }
		public TerminalNode MINUS() { return getToken(Sql.MINUS, 0); }
		public NumericTermExprContext(NumericExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitNumericTermExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class NumericBitwiseOrExprContext extends NumericExprContext {
		public List numericExpr() {
			return getRuleContexts(NumericExprContext.class);
		}
		public NumericExprContext numericExpr(int i) {
			return getRuleContext(NumericExprContext.class,i);
		}
		public TerminalNode BITWISE_OR() { return getToken(Sql.BITWISE_OR, 0); }
		public TerminalNode BITWISE_XOR() { return getToken(Sql.BITWISE_XOR, 0); }
		public NumericBitwiseOrExprContext(NumericExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitNumericBitwiseOrExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class NumericFactorExprContext extends NumericExprContext {
		public List numericExpr() {
			return getRuleContexts(NumericExprContext.class);
		}
		public NumericExprContext numericExpr(int i) {
			return getRuleContext(NumericExprContext.class,i);
		}
		public TerminalNode SOLIDUS() { return getToken(Sql.SOLIDUS, 0); }
		public TerminalNode ASTERISK() { return getToken(Sql.ASTERISK, 0); }
		public NumericFactorExprContext(NumericExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitNumericFactorExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class NumericBitwiseShiftExprContext extends NumericExprContext {
		public List numericExpr() {
			return getRuleContexts(NumericExprContext.class);
		}
		public NumericExprContext numericExpr(int i) {
			return getRuleContext(NumericExprContext.class,i);
		}
		public TerminalNode BITWISE_SHIFT_LEFT() { return getToken(Sql.BITWISE_SHIFT_LEFT, 0); }
		public TerminalNode BITWISE_SHIFT_RIGHT() { return getToken(Sql.BITWISE_SHIFT_RIGHT, 0); }
		public NumericBitwiseShiftExprContext(NumericExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitNumericBitwiseShiftExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ExprPrimary1Context extends NumericExprContext {
		public ExprPrimaryContext exprPrimary() {
			return getRuleContext(ExprPrimaryContext.class,0);
		}
		public ExprPrimary1Context(NumericExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitExprPrimary1(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class UnaryMinusExprContext extends NumericExprContext {
		public TerminalNode MINUS() { return getToken(Sql.MINUS, 0); }
		public NumericExprContext numericExpr() {
			return getRuleContext(NumericExprContext.class,0);
		}
		public UnaryMinusExprContext(NumericExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitUnaryMinusExpr(this);
			else return visitor.visitChildren(this);
		}
	}

	public final NumericExprContext numericExpr() throws RecognitionException {
		return numericExpr(0);
	}

	private NumericExprContext numericExpr(int _p) throws RecognitionException {
		ParserRuleContext _parentctx = _ctx;
		int _parentState = getState();
		NumericExprContext _localctx = new NumericExprContext(_ctx, _parentState);
		NumericExprContext _prevctx = _localctx;
		int _startState = 66;
		enterRecursionRule(_localctx, 66, RULE_numericExpr, _p);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(854);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,57,_ctx) ) {
			case 1:
				{
				_localctx = new UnaryPlusExprContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;

				setState(847);
				match(PLUS);
				setState(848);
				numericExpr(9);
				}
				break;
			case 2:
				{
				_localctx = new UnaryMinusExprContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(849);
				match(MINUS);
				setState(850);
				numericExpr(8);
				}
				break;
			case 3:
				{
				_localctx = new NumericBitwiseNotExprContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(851);
				match(TILDE);
				setState(852);
				numericExpr(5);
				}
				break;
			case 4:
				{
				_localctx = new ExprPrimary1Context(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(853);
				exprPrimary(0);
				}
				break;
			}
			_ctx.stop = _input.LT(-1);
			setState(873);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,59,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					if ( _parseListeners!=null ) triggerExitRuleEvent();
					_prevctx = _localctx;
					{
					setState(871);
					_errHandler.sync(this);
					switch ( getInterpreter().adaptivePredict(_input,58,_ctx) ) {
					case 1:
						{
						_localctx = new NumericFactorExprContext(new NumericExprContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_numericExpr);
						setState(856);
						if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
						setState(857);
						_la = _input.LA(1);
						if ( !(_la==ASTERISK || _la==SOLIDUS) ) {
						_errHandler.recoverInline(this);
						}
						else {
							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
							_errHandler.reportMatch(this);
							consume();
						}
						setState(858);
						numericExpr(8);
						}
						break;
					case 2:
						{
						_localctx = new NumericTermExprContext(new NumericExprContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_numericExpr);
						setState(859);
						if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
						setState(860);
						_la = _input.LA(1);
						if ( !(_la==PLUS || _la==MINUS) ) {
						_errHandler.recoverInline(this);
						}
						else {
							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
							_errHandler.reportMatch(this);
							consume();
						}
						setState(861);
						numericExpr(7);
						}
						break;
					case 3:
						{
						_localctx = new NumericBitwiseAndExprContext(new NumericExprContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_numericExpr);
						setState(862);
						if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)");
						setState(863);
						match(AMPERSAND);
						setState(864);
						numericExpr(5);
						}
						break;
					case 4:
						{
						_localctx = new NumericBitwiseOrExprContext(new NumericExprContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_numericExpr);
						setState(865);
						if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)");
						setState(866);
						_la = _input.LA(1);
						if ( !(_la==BITWISE_OR || _la==BITWISE_XOR) ) {
						_errHandler.recoverInline(this);
						}
						else {
							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
							_errHandler.reportMatch(this);
							consume();
						}
						setState(867);
						numericExpr(4);
						}
						break;
					case 5:
						{
						_localctx = new NumericBitwiseShiftExprContext(new NumericExprContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_numericExpr);
						setState(868);
						if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)");
						setState(869);
						_la = _input.LA(1);
						if ( !(_la==BITWISE_SHIFT_LEFT || _la==BITWISE_SHIFT_RIGHT) ) {
						_errHandler.recoverInline(this);
						}
						else {
							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
							_errHandler.reportMatch(this);
							consume();
						}
						setState(870);
						numericExpr(3);
						}
						break;
					}
					} 
				}
				setState(875);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,59,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			unrollRecursionContexts(_parentctx);
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ExprPrimaryContext extends ParserRuleContext {
		public ExprPrimaryContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_exprPrimary; }
	 
		public ExprPrimaryContext() { }
		public void copyFrom(ExprPrimaryContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class LowerFunctionContext extends ExprPrimaryContext {
		public TerminalNode LOWER() { return getToken(Sql.LOWER, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public LowerFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitLowerFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class UpperInfFunctionContext extends ExprPrimaryContext {
		public TerminalNode UPPER_INF() { return getToken(Sql.UPPER_INF, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public UpperInfFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitUpperInfFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class AggregateFunctionExprContext extends ExprPrimaryContext {
		public AggregateFunctionContext aggregateFunction() {
			return getRuleContext(AggregateFunctionContext.class,0);
		}
		public AggregateFunctionExprContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitAggregateFunctionExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class TrimArrayFunctionContext extends ExprPrimaryContext {
		public TerminalNode TRIM_ARRAY() { return getToken(Sql.TRIM_ARRAY, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public TerminalNode COMMA() { return getToken(Sql.COMMA, 0); }
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public TrimArrayFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitTrimArrayFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class CurrentSchemasFunctionContext extends ExprPrimaryContext {
		public TerminalNode CURRENT_SCHEMAS() { return getToken(Sql.CURRENT_SCHEMAS, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public SchemaNameContext schemaName() {
			return getRuleContext(SchemaNameContext.class,0);
		}
		public TerminalNode DOT() { return getToken(Sql.DOT, 0); }
		public CurrentSchemasFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitCurrentSchemasFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class CurrentInstantFunction0Context extends ExprPrimaryContext {
		public CurrentInstantFunctionContext currentInstantFunction() {
			return getRuleContext(CurrentInstantFunctionContext.class,0);
		}
		public CurrentInstantFunction0Context(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitCurrentInstantFunction0(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class PgExpandArrayFunctionContext extends ExprPrimaryContext {
		public TerminalNode PG_EXPANDARRAY() { return getToken(Sql.PG_EXPANDARRAY, 0); }
		public SchemaNameContext schemaName() {
			return getRuleContext(SchemaNameContext.class,0);
		}
		public TerminalNode DOT() { return getToken(Sql.DOT, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public PgExpandArrayFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitPgExpandArrayFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class OverlapsFunctionContext extends ExprPrimaryContext {
		public TerminalNode OVERLAPS() { return getToken(Sql.OVERLAPS, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public OverlapsFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitOverlapsFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class TsTzRangeConstructorContext extends ExprPrimaryContext {
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public TerminalNode COMMA() { return getToken(Sql.COMMA, 0); }
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public TerminalNode PERIOD() { return getToken(Sql.PERIOD, 0); }
		public TerminalNode TSTZRANGE() { return getToken(Sql.TSTZRANGE, 0); }
		public TsTzRangeConstructorContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitTsTzRangeConstructor(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class PositionFunctionContext extends ExprPrimaryContext {
		public TerminalNode POSITION() { return getToken(Sql.POSITION, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public TerminalNode IN() { return getToken(Sql.IN, 0); }
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public TerminalNode USING() { return getToken(Sql.USING, 0); }
		public CharLengthUnitsContext charLengthUnits() {
			return getRuleContext(CharLengthUnitsContext.class,0);
		}
		public PositionFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitPositionFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class LeastFunctionContext extends ExprPrimaryContext {
		public TerminalNode LEAST() { return getToken(Sql.LEAST, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public LeastFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitLeastFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class FloorFunctionContext extends ExprPrimaryContext {
		public TerminalNode FLOOR() { return getToken(Sql.FLOOR, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public FloorFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitFloorFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class AgeFunctionContext extends ExprPrimaryContext {
		public TerminalNode AGE() { return getToken(Sql.AGE, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public TerminalNode COMMA() { return getToken(Sql.COMMA, 0); }
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public AgeFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitAgeFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class CardinalityFunctionContext extends ExprPrimaryContext {
		public TerminalNode CARDINALITY() { return getToken(Sql.CARDINALITY, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public CardinalityFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitCardinalityFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ArrayAccessContext extends ExprPrimaryContext {
		public ExprPrimaryContext exprPrimary() {
			return getRuleContext(ExprPrimaryContext.class,0);
		}
		public TerminalNode LBRACK() { return getToken(Sql.LBRACK, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode RBRACK() { return getToken(Sql.RBRACK, 0); }
		public ArrayAccessContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitArrayAccess(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ObjectExprContext extends ExprPrimaryContext {
		public ObjectConstructorContext objectConstructor() {
			return getRuleContext(ObjectConstructorContext.class,0);
		}
		public ObjectExprContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitObjectExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class PgGetExprFunctionContext extends ExprPrimaryContext {
		public TerminalNode PG_GET_EXPR() { return getToken(Sql.PG_GET_EXPR, 0); }
		public SchemaNameContext schemaName() {
			return getRuleContext(SchemaNameContext.class,0);
		}
		public TerminalNode DOT() { return getToken(Sql.DOT, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public PgGetExprFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitPgGetExprFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ExtractFunctionContext extends ExprPrimaryContext {
		public TerminalNode EXTRACT() { return getToken(Sql.EXTRACT, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExtractFieldContext extractField() {
			return getRuleContext(ExtractFieldContext.class,0);
		}
		public TerminalNode FROM() { return getToken(Sql.FROM, 0); }
		public ExtractSourceContext extractSource() {
			return getRuleContext(ExtractSourceContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public ExtractFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitExtractFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class CastExprContext extends ExprPrimaryContext {
		public TerminalNode CAST() { return getToken(Sql.CAST, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode AS() { return getToken(Sql.AS, 0); }
		public DataTypeContext dataType() {
			return getRuleContext(DataTypeContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public CastExprContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitCastExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class CurrentSchemaFunctionContext extends ExprPrimaryContext {
		public TerminalNode CURRENT_SCHEMA() { return getToken(Sql.CURRENT_SCHEMA, 0); }
		public SchemaNameContext schemaName() {
			return getRuleContext(SchemaNameContext.class,0);
		}
		public TerminalNode DOT() { return getToken(Sql.DOT, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public CurrentSchemaFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitCurrentSchemaFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class NestOneSubqueryExprContext extends ExprPrimaryContext {
		public TerminalNode NEST_ONE() { return getToken(Sql.NEST_ONE, 0); }
		public SubqueryContext subquery() {
			return getRuleContext(SubqueryContext.class,0);
		}
		public NestOneSubqueryExprContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitNestOneSubqueryExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class UpperFunctionContext extends ExprPrimaryContext {
		public TerminalNode UPPER() { return getToken(Sql.UPPER, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public UpperFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitUpperFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class CurrentTimeFunctionContext extends ExprPrimaryContext {
		public TerminalNode CURRENT_TIME() { return getToken(Sql.CURRENT_TIME, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public PrecisionContext precision() {
			return getRuleContext(PrecisionContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public CurrentTimeFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitCurrentTimeFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class PostgresCastExprContext extends ExprPrimaryContext {
		public ExprPrimaryContext exprPrimary() {
			return getRuleContext(ExprPrimaryContext.class,0);
		}
		public TerminalNode PG_CAST() { return getToken(Sql.PG_CAST, 0); }
		public DataTypeContext dataType() {
			return getRuleContext(DataTypeContext.class,0);
		}
		public PostgresCastExprContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitPostgresCastExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class PgGetIndexdefFunctionContext extends ExprPrimaryContext {
		public TerminalNode PG_GET_INDEXDEF() { return getToken(Sql.PG_GET_INDEXDEF, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public SchemaNameContext schemaName() {
			return getRuleContext(SchemaNameContext.class,0);
		}
		public TerminalNode DOT() { return getToken(Sql.DOT, 0); }
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public PgGetIndexdefFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitPgGetIndexdefFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class HasTablePrivilegePredicateContext extends ExprPrimaryContext {
		public TerminalNode HAS_TABLE_PRIVILEGE() { return getToken(Sql.HAS_TABLE_PRIVILEGE, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public TableStringContext tableString() {
			return getRuleContext(TableStringContext.class,0);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public PrivilegeStringContext privilegeString() {
			return getRuleContext(PrivilegeStringContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public SchemaNameContext schemaName() {
			return getRuleContext(SchemaNameContext.class,0);
		}
		public TerminalNode DOT() { return getToken(Sql.DOT, 0); }
		public UserStringContext userString() {
			return getRuleContext(UserStringContext.class,0);
		}
		public HasTablePrivilegePredicateContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitHasTablePrivilegePredicate(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class OverlayFunctionContext extends ExprPrimaryContext {
		public TerminalNode OVERLAY() { return getToken(Sql.OVERLAY, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public TerminalNode PLACING() { return getToken(Sql.PLACING, 0); }
		public TerminalNode FROM() { return getToken(Sql.FROM, 0); }
		public StartPositionContext startPosition() {
			return getRuleContext(StartPositionContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public TerminalNode FOR() { return getToken(Sql.FOR, 0); }
		public StringLengthContext stringLength() {
			return getRuleContext(StringLengthContext.class,0);
		}
		public TerminalNode USING() { return getToken(Sql.USING, 0); }
		public CharLengthUnitsContext charLengthUnits() {
			return getRuleContext(CharLengthUnitsContext.class,0);
		}
		public OverlayFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitOverlayFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class CharacterSubstringFunctionContext extends ExprPrimaryContext {
		public TerminalNode SUBSTRING() { return getToken(Sql.SUBSTRING, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public StartPositionContext startPosition() {
			return getRuleContext(StartPositionContext.class,0);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public TerminalNode FROM() { return getToken(Sql.FROM, 0); }
		public StringLengthContext stringLength() {
			return getRuleContext(StringLengthContext.class,0);
		}
		public TerminalNode USING() { return getToken(Sql.USING, 0); }
		public CharLengthUnitsContext charLengthUnits() {
			return getRuleContext(CharLengthUnitsContext.class,0);
		}
		public TerminalNode FOR() { return getToken(Sql.FOR, 0); }
		public CharacterSubstringFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitCharacterSubstringFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class NullIfExprContext extends ExprPrimaryContext {
		public TerminalNode NULLIF() { return getToken(Sql.NULLIF, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public TerminalNode COMMA() { return getToken(Sql.COMMA, 0); }
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public NullIfExprContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitNullIfExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class HasAnyColumnPrivilegePredicateContext extends ExprPrimaryContext {
		public TerminalNode HAS_ANY_COLUMN_PRIVILEGE() { return getToken(Sql.HAS_ANY_COLUMN_PRIVILEGE, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public TableStringContext tableString() {
			return getRuleContext(TableStringContext.class,0);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public PrivilegeStringContext privilegeString() {
			return getRuleContext(PrivilegeStringContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public SchemaNameContext schemaName() {
			return getRuleContext(SchemaNameContext.class,0);
		}
		public TerminalNode DOT() { return getToken(Sql.DOT, 0); }
		public UserStringContext userString() {
			return getRuleContext(UserStringContext.class,0);
		}
		public HasAnyColumnPrivilegePredicateContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitHasAnyColumnPrivilegePredicate(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ArrayExprContext extends ExprPrimaryContext {
		public ArrayValueConstructorContext arrayValueConstructor() {
			return getRuleContext(ArrayValueConstructorContext.class,0);
		}
		public ArrayExprContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitArrayExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class LowerInfFunctionContext extends ExprPrimaryContext {
		public TerminalNode LOWER_INF() { return getToken(Sql.LOWER_INF, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public LowerInfFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitLowerInfFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class TrimFunctionContext extends ExprPrimaryContext {
		public TerminalNode TRIM() { return getToken(Sql.TRIM, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public TrimSourceContext trimSource() {
			return getRuleContext(TrimSourceContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public TrimSpecificationContext trimSpecification() {
			return getRuleContext(TrimSpecificationContext.class,0);
		}
		public TrimCharacterContext trimCharacter() {
			return getRuleContext(TrimCharacterContext.class,0);
		}
		public TerminalNode FROM() { return getToken(Sql.FROM, 0); }
		public TrimFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitTrimFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class PowerFunctionContext extends ExprPrimaryContext {
		public TerminalNode POWER() { return getToken(Sql.POWER, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public TerminalNode COMMA() { return getToken(Sql.COMMA, 0); }
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public PowerFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitPowerFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class DateBinFunctionContext extends ExprPrimaryContext {
		public TerminalNode DATE_BIN() { return getToken(Sql.DATE_BIN, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public IntervalLiteralContext intervalLiteral() {
			return getRuleContext(IntervalLiteralContext.class,0);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public DateBinSourceContext dateBinSource() {
			return getRuleContext(DateBinSourceContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public DateBinOriginContext dateBinOrigin() {
			return getRuleContext(DateBinOriginContext.class,0);
		}
		public DateBinFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitDateBinFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class CeilingFunctionContext extends ExprPrimaryContext {
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public TerminalNode CEIL() { return getToken(Sql.CEIL, 0); }
		public TerminalNode CEILING() { return getToken(Sql.CEILING, 0); }
		public CeilingFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitCeilingFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class GreatestFunctionContext extends ExprPrimaryContext {
		public TerminalNode GREATEST() { return getToken(Sql.GREATEST, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public GreatestFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitGreatestFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class LnFunctionContext extends ExprPrimaryContext {
		public TerminalNode LN() { return getToken(Sql.LN, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public LnFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitLnFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class Log10FunctionContext extends ExprPrimaryContext {
		public TerminalNode LOG10() { return getToken(Sql.LOG10, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public Log10FunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitLog10Function(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ColumnExprContext extends ExprPrimaryContext {
		public ColumnReferenceContext columnReference() {
			return getRuleContext(ColumnReferenceContext.class,0);
		}
		public ColumnExprContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitColumnExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ExistsPredicateContext extends ExprPrimaryContext {
		public TerminalNode EXISTS() { return getToken(Sql.EXISTS, 0); }
		public SubqueryContext subquery() {
			return getRuleContext(SubqueryContext.class,0);
		}
		public ExistsPredicateContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitExistsPredicate(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ReplaceFunctionContext extends ExprPrimaryContext {
		public TerminalNode REPLACE() { return getToken(Sql.REPLACE, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public ReplaceTargetContext replaceTarget() {
			return getRuleContext(ReplaceTargetContext.class,0);
		}
		public ReplacementContext replacement() {
			return getRuleContext(ReplacementContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public ReplaceFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitReplaceFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class NestedWindowFunctionExprContext extends ExprPrimaryContext {
		public NestedWindowFunctionContext nestedWindowFunction() {
			return getRuleContext(NestedWindowFunctionContext.class,0);
		}
		public NestedWindowFunctionExprContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitNestedWindowFunctionExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class CurrentUserFunctionContext extends ExprPrimaryContext {
		public TerminalNode CURRENT_USER() { return getToken(Sql.CURRENT_USER, 0); }
		public SchemaNameContext schemaName() {
			return getRuleContext(SchemaNameContext.class,0);
		}
		public TerminalNode DOT() { return getToken(Sql.DOT, 0); }
		public CurrentUserFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitCurrentUserFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class SqrtFunctionContext extends ExprPrimaryContext {
		public TerminalNode SQRT() { return getToken(Sql.SQRT, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public SqrtFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSqrtFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class TrigonometricFunctionContext extends ExprPrimaryContext {
		public TrigonometricFunctionNameContext trigonometricFunctionName() {
			return getRuleContext(TrigonometricFunctionNameContext.class,0);
		}
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public TrigonometricFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitTrigonometricFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class LiteralExprContext extends ExprPrimaryContext {
		public LiteralContext literal() {
			return getRuleContext(LiteralContext.class,0);
		}
		public LiteralExprContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitLiteralExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class SimpleCaseExprContext extends ExprPrimaryContext {
		public TerminalNode CASE() { return getToken(Sql.CASE, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode END() { return getToken(Sql.END, 0); }
		public List simpleWhenClause() {
			return getRuleContexts(SimpleWhenClauseContext.class);
		}
		public SimpleWhenClauseContext simpleWhenClause(int i) {
			return getRuleContext(SimpleWhenClauseContext.class,i);
		}
		public ElseClauseContext elseClause() {
			return getRuleContext(ElseClauseContext.class,0);
		}
		public SimpleCaseExprContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSimpleCaseExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class AbsFunctionContext extends ExprPrimaryContext {
		public TerminalNode ABS() { return getToken(Sql.ABS, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public AbsFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitAbsFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ModFunctionContext extends ExprPrimaryContext {
		public TerminalNode MOD() { return getToken(Sql.MOD, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public TerminalNode COMMA() { return getToken(Sql.COMMA, 0); }
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public ModFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitModFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class PostgresVersionFunctionContext extends ExprPrimaryContext {
		public TerminalNode VERSION() { return getToken(Sql.VERSION, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public SchemaNameContext schemaName() {
			return getRuleContext(SchemaNameContext.class,0);
		}
		public TerminalNode DOT() { return getToken(Sql.DOT, 0); }
		public PostgresVersionFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitPostgresVersionFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class LengthFunctionContext extends ExprPrimaryContext {
		public TerminalNode LENGTH() { return getToken(Sql.LENGTH, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public LengthFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitLengthFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ExpFunctionContext extends ExprPrimaryContext {
		public TerminalNode EXP() { return getToken(Sql.EXP, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public ExpFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitExpFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ParamExprContext extends ExprPrimaryContext {
		public ParameterSpecificationContext parameterSpecification() {
			return getRuleContext(ParameterSpecificationContext.class,0);
		}
		public ParamExprContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitParamExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ArrayUpperFunctionContext extends ExprPrimaryContext {
		public TerminalNode ARRAY_UPPER() { return getToken(Sql.ARRAY_UPPER, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public TerminalNode COMMA() { return getToken(Sql.COMMA, 0); }
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public ArrayUpperFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitArrayUpperFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class CoalesceExprContext extends ExprPrimaryContext {
		public TerminalNode COALESCE() { return getToken(Sql.COALESCE, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public CoalesceExprContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitCoalesceExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class HasSchemaPrivilegePredicateContext extends ExprPrimaryContext {
		public TerminalNode HAS_SCHEMA_PRIVILEGE() { return getToken(Sql.HAS_SCHEMA_PRIVILEGE, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public SchemaStringContext schemaString() {
			return getRuleContext(SchemaStringContext.class,0);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public PrivilegeStringContext privilegeString() {
			return getRuleContext(PrivilegeStringContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public SchemaNameContext schemaName() {
			return getRuleContext(SchemaNameContext.class,0);
		}
		public TerminalNode DOT() { return getToken(Sql.DOT, 0); }
		public UserStringContext userString() {
			return getRuleContext(UserStringContext.class,0);
		}
		public HasSchemaPrivilegePredicateContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitHasSchemaPrivilegePredicate(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class DateTruncFunctionContext extends ExprPrimaryContext {
		public TerminalNode DATE_TRUNC() { return getToken(Sql.DATE_TRUNC, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public DateTruncPrecisionContext dateTruncPrecision() {
			return getRuleContext(DateTruncPrecisionContext.class,0);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public DateTruncSourceContext dateTruncSource() {
			return getRuleContext(DateTruncSourceContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public DateTruncTimeZoneContext dateTruncTimeZone() {
			return getRuleContext(DateTruncTimeZoneContext.class,0);
		}
		public DateTruncFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitDateTruncFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class SearchedCaseExprContext extends ExprPrimaryContext {
		public TerminalNode CASE() { return getToken(Sql.CASE, 0); }
		public TerminalNode END() { return getToken(Sql.END, 0); }
		public List searchedWhenClause() {
			return getRuleContexts(SearchedWhenClauseContext.class);
		}
		public SearchedWhenClauseContext searchedWhenClause(int i) {
			return getRuleContext(SearchedWhenClauseContext.class,i);
		}
		public ElseClauseContext elseClause() {
			return getRuleContext(ElseClauseContext.class,0);
		}
		public SearchedCaseExprContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSearchedCaseExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class CurrentDatabaseFunctionContext extends ExprPrimaryContext {
		public TerminalNode CURRENT_DATABASE() { return getToken(Sql.CURRENT_DATABASE, 0); }
		public SchemaNameContext schemaName() {
			return getRuleContext(SchemaNameContext.class,0);
		}
		public TerminalNode DOT() { return getToken(Sql.DOT, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public CurrentDatabaseFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitCurrentDatabaseFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class LocalTimeFunctionContext extends ExprPrimaryContext {
		public TerminalNode LOCALTIME() { return getToken(Sql.LOCALTIME, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public PrecisionContext precision() {
			return getRuleContext(PrecisionContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public LocalTimeFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitLocalTimeFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class WrappedExprContext extends ExprPrimaryContext {
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public WrappedExprContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWrappedExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class CharacterLengthFunctionContext extends ExprPrimaryContext {
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public TerminalNode CHAR_LENGTH() { return getToken(Sql.CHAR_LENGTH, 0); }
		public TerminalNode CHARACTER_LENGTH() { return getToken(Sql.CHARACTER_LENGTH, 0); }
		public TerminalNode USING() { return getToken(Sql.USING, 0); }
		public CharLengthUnitsContext charLengthUnits() {
			return getRuleContext(CharLengthUnitsContext.class,0);
		}
		public CharacterLengthFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitCharacterLengthFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ConcatExprContext extends ExprPrimaryContext {
		public List exprPrimary() {
			return getRuleContexts(ExprPrimaryContext.class);
		}
		public ExprPrimaryContext exprPrimary(int i) {
			return getRuleContext(ExprPrimaryContext.class,i);
		}
		public TerminalNode CONCAT() { return getToken(Sql.CONCAT, 0); }
		public ConcatExprContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitConcatExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class RangeBinsFunctionContext extends ExprPrimaryContext {
		public TerminalNode RANGE_BINS() { return getToken(Sql.RANGE_BINS, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public IntervalLiteralContext intervalLiteral() {
			return getRuleContext(IntervalLiteralContext.class,0);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public RangeBinsSourceContext rangeBinsSource() {
			return getRuleContext(RangeBinsSourceContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public DateBinOriginContext dateBinOrigin() {
			return getRuleContext(DateBinOriginContext.class,0);
		}
		public RangeBinsFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitRangeBinsFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class LogFunctionContext extends ExprPrimaryContext {
		public TerminalNode LOG() { return getToken(Sql.LOG, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public GeneralLogarithmBaseContext generalLogarithmBase() {
			return getRuleContext(GeneralLogarithmBaseContext.class,0);
		}
		public TerminalNode COMMA() { return getToken(Sql.COMMA, 0); }
		public GeneralLogarithmArgumentContext generalLogarithmArgument() {
			return getRuleContext(GeneralLogarithmArgumentContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public LogFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitLogFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class GenerateSeriesFunctionContext extends ExprPrimaryContext {
		public GenerateSeriesContext generateSeries() {
			return getRuleContext(GenerateSeriesContext.class,0);
		}
		public GenerateSeriesFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitGenerateSeriesFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class FieldAccessContext extends ExprPrimaryContext {
		public ExprPrimaryContext exprPrimary() {
			return getRuleContext(ExprPrimaryContext.class,0);
		}
		public TerminalNode DOT() { return getToken(Sql.DOT, 0); }
		public FieldNameContext fieldName() {
			return getRuleContext(FieldNameContext.class,0);
		}
		public FieldAccessContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitFieldAccess(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class NestManySubqueryExprContext extends ExprPrimaryContext {
		public TerminalNode NEST_MANY() { return getToken(Sql.NEST_MANY, 0); }
		public SubqueryContext subquery() {
			return getRuleContext(SubqueryContext.class,0);
		}
		public NestManySubqueryExprContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitNestManySubqueryExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class OctetLengthFunctionContext extends ExprPrimaryContext {
		public TerminalNode OCTET_LENGTH() { return getToken(Sql.OCTET_LENGTH, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public OctetLengthFunctionContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitOctetLengthFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class WindowFunctionExprContext extends ExprPrimaryContext {
		public WindowFunctionTypeContext windowFunctionType() {
			return getRuleContext(WindowFunctionTypeContext.class,0);
		}
		public TerminalNode OVER() { return getToken(Sql.OVER, 0); }
		public WindowNameOrSpecificationContext windowNameOrSpecification() {
			return getRuleContext(WindowNameOrSpecificationContext.class,0);
		}
		public WindowFunctionExprContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWindowFunctionExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ScalarSubqueryExprContext extends ExprPrimaryContext {
		public SubqueryContext subquery() {
			return getRuleContext(SubqueryContext.class,0);
		}
		public ScalarSubqueryExprContext(ExprPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitScalarSubqueryExpr(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ExprPrimaryContext exprPrimary() throws RecognitionException {
		return exprPrimary(0);
	}

	private ExprPrimaryContext exprPrimary(int _p) throws RecognitionException {
		ParserRuleContext _parentctx = _ctx;
		int _parentState = getState();
		ExprPrimaryContext _localctx = new ExprPrimaryContext(_ctx, _parentState);
		ExprPrimaryContext _prevctx = _localctx;
		int _startState = 68;
		enterRecursionRule(_localctx, 68, RULE_exprPrimary, _p);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(1392);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,106,_ctx) ) {
			case 1:
				{
				_localctx = new WrappedExprContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;

				setState(877);
				match(LPAREN);
				setState(878);
				expr(0);
				setState(879);
				match(RPAREN);
				}
				break;
			case 2:
				{
				_localctx = new LiteralExprContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(881);
				literal();
				}
				break;
			case 3:
				{
				_localctx = new ParamExprContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(882);
				parameterSpecification();
				}
				break;
			case 4:
				{
				_localctx = new ColumnExprContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(883);
				columnReference();
				}
				break;
			case 5:
				{
				_localctx = new AggregateFunctionExprContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(884);
				aggregateFunction();
				}
				break;
			case 6:
				{
				_localctx = new WindowFunctionExprContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(885);
				windowFunctionType();
				setState(886);
				match(OVER);
				setState(887);
				windowNameOrSpecification();
				}
				break;
			case 7:
				{
				_localctx = new NestedWindowFunctionExprContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(889);
				nestedWindowFunction();
				}
				break;
			case 8:
				{
				_localctx = new ScalarSubqueryExprContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(890);
				subquery();
				}
				break;
			case 9:
				{
				_localctx = new NestOneSubqueryExprContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(891);
				match(NEST_ONE);
				setState(892);
				subquery();
				}
				break;
			case 10:
				{
				_localctx = new NestManySubqueryExprContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(893);
				match(NEST_MANY);
				setState(894);
				subquery();
				}
				break;
			case 11:
				{
				_localctx = new SimpleCaseExprContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(895);
				match(CASE);
				setState(896);
				expr(0);
				setState(898); 
				_errHandler.sync(this);
				_la = _input.LA(1);
				do {
					{
					{
					setState(897);
					simpleWhenClause();
					}
					}
					setState(900); 
					_errHandler.sync(this);
					_la = _input.LA(1);
				} while ( _la==WHEN );
				setState(903);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==ELSE) {
					{
					setState(902);
					elseClause();
					}
				}

				setState(905);
				match(END);
				}
				break;
			case 12:
				{
				_localctx = new SearchedCaseExprContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(907);
				match(CASE);
				setState(909); 
				_errHandler.sync(this);
				_la = _input.LA(1);
				do {
					{
					{
					setState(908);
					searchedWhenClause();
					}
					}
					setState(911); 
					_errHandler.sync(this);
					_la = _input.LA(1);
				} while ( _la==WHEN );
				setState(914);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==ELSE) {
					{
					setState(913);
					elseClause();
					}
				}

				setState(916);
				match(END);
				}
				break;
			case 13:
				{
				_localctx = new NullIfExprContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(918);
				match(NULLIF);
				setState(919);
				match(LPAREN);
				setState(920);
				expr(0);
				setState(921);
				match(COMMA);
				setState(922);
				expr(0);
				setState(923);
				match(RPAREN);
				}
				break;
			case 14:
				{
				_localctx = new CoalesceExprContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(925);
				match(COALESCE);
				setState(926);
				match(LPAREN);
				setState(927);
				expr(0);
				setState(932);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==COMMA) {
					{
					{
					setState(928);
					match(COMMA);
					setState(929);
					expr(0);
					}
					}
					setState(934);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				setState(935);
				match(RPAREN);
				}
				break;
			case 15:
				{
				_localctx = new CastExprContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(937);
				match(CAST);
				setState(938);
				match(LPAREN);
				setState(939);
				expr(0);
				setState(940);
				match(AS);
				setState(941);
				dataType(0);
				setState(942);
				match(RPAREN);
				}
				break;
			case 16:
				{
				_localctx = new ArrayExprContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(944);
				arrayValueConstructor();
				}
				break;
			case 17:
				{
				_localctx = new ObjectExprContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(945);
				objectConstructor();
				}
				break;
			case 18:
				{
				_localctx = new GenerateSeriesFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(946);
				generateSeries();
				}
				break;
			case 19:
				{
				_localctx = new ExistsPredicateContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(947);
				match(EXISTS);
				setState(948);
				subquery();
				}
				break;
			case 20:
				{
				_localctx = new HasAnyColumnPrivilegePredicateContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(952);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3458799698192629760L) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & 11400836069523475L) != 0) || ((((_la - 152)) & ~0x3f) == 0 && ((1L << (_la - 152)) & 36507230209L) != 0) || ((((_la - 251)) & ~0x3f) == 0 && ((1L << (_la - 251)) & 4072450366241506369L) != 0) || _la==REGULAR_IDENTIFIER || _la==DELIMITED_IDENTIFIER) {
					{
					setState(949);
					schemaName();
					setState(950);
					match(DOT);
					}
				}

				setState(954);
				match(HAS_ANY_COLUMN_PRIVILEGE);
				setState(955);
				match(LPAREN);
				setState(959);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,66,_ctx) ) {
				case 1:
					{
					setState(956);
					userString();
					setState(957);
					match(COMMA);
					}
					break;
				}
				setState(961);
				tableString();
				setState(962);
				match(COMMA);
				setState(963);
				privilegeString();
				setState(964);
				match(RPAREN);
				}
				break;
			case 21:
				{
				_localctx = new HasTablePrivilegePredicateContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(969);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3458799698192629760L) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & 11400836069523475L) != 0) || ((((_la - 152)) & ~0x3f) == 0 && ((1L << (_la - 152)) & 36507230209L) != 0) || ((((_la - 251)) & ~0x3f) == 0 && ((1L << (_la - 251)) & 4072450366241506369L) != 0) || _la==REGULAR_IDENTIFIER || _la==DELIMITED_IDENTIFIER) {
					{
					setState(966);
					schemaName();
					setState(967);
					match(DOT);
					}
				}

				setState(971);
				match(HAS_TABLE_PRIVILEGE);
				setState(972);
				match(LPAREN);
				setState(976);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,68,_ctx) ) {
				case 1:
					{
					setState(973);
					userString();
					setState(974);
					match(COMMA);
					}
					break;
				}
				setState(978);
				tableString();
				setState(979);
				match(COMMA);
				setState(980);
				privilegeString();
				setState(981);
				match(RPAREN);
				}
				break;
			case 22:
				{
				_localctx = new HasSchemaPrivilegePredicateContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(986);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3458799698192629760L) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & 11400836069523475L) != 0) || ((((_la - 152)) & ~0x3f) == 0 && ((1L << (_la - 152)) & 36507230209L) != 0) || ((((_la - 251)) & ~0x3f) == 0 && ((1L << (_la - 251)) & 4072450366241506369L) != 0) || _la==REGULAR_IDENTIFIER || _la==DELIMITED_IDENTIFIER) {
					{
					setState(983);
					schemaName();
					setState(984);
					match(DOT);
					}
				}

				setState(988);
				match(HAS_SCHEMA_PRIVILEGE);
				setState(989);
				match(LPAREN);
				setState(993);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,70,_ctx) ) {
				case 1:
					{
					setState(990);
					userString();
					setState(991);
					match(COMMA);
					}
					break;
				}
				setState(995);
				schemaString();
				setState(996);
				match(COMMA);
				setState(997);
				privilegeString();
				setState(998);
				match(RPAREN);
				}
				break;
			case 23:
				{
				_localctx = new PostgresVersionFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1003);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,71,_ctx) ) {
				case 1:
					{
					setState(1000);
					schemaName();
					setState(1001);
					match(DOT);
					}
					break;
				}
				setState(1005);
				match(VERSION);
				setState(1006);
				match(LPAREN);
				setState(1007);
				match(RPAREN);
				}
				break;
			case 24:
				{
				_localctx = new PositionFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1008);
				match(POSITION);
				setState(1009);
				match(LPAREN);
				setState(1010);
				expr(0);
				setState(1011);
				match(IN);
				setState(1012);
				expr(0);
				setState(1015);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==USING) {
					{
					setState(1013);
					match(USING);
					setState(1014);
					charLengthUnits();
					}
				}

				setState(1017);
				match(RPAREN);
				}
				break;
			case 25:
				{
				_localctx = new ExtractFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1019);
				match(EXTRACT);
				setState(1020);
				match(LPAREN);
				setState(1021);
				extractField();
				setState(1022);
				match(FROM);
				setState(1023);
				extractSource();
				setState(1024);
				match(RPAREN);
				}
				break;
			case 26:
				{
				_localctx = new CharacterLengthFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1026);
				_la = _input.LA(1);
				if ( !(_la==CHARACTER_LENGTH || _la==CHAR_LENGTH) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(1027);
				match(LPAREN);
				setState(1028);
				expr(0);
				setState(1031);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==USING) {
					{
					setState(1029);
					match(USING);
					setState(1030);
					charLengthUnits();
					}
				}

				setState(1033);
				match(RPAREN);
				}
				break;
			case 27:
				{
				_localctx = new OctetLengthFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1035);
				match(OCTET_LENGTH);
				setState(1036);
				match(LPAREN);
				setState(1037);
				expr(0);
				setState(1038);
				match(RPAREN);
				}
				break;
			case 28:
				{
				_localctx = new LengthFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1040);
				match(LENGTH);
				setState(1041);
				match(LPAREN);
				setState(1042);
				expr(0);
				setState(1043);
				match(RPAREN);
				}
				break;
			case 29:
				{
				_localctx = new CardinalityFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1045);
				match(CARDINALITY);
				setState(1046);
				match(LPAREN);
				setState(1047);
				expr(0);
				setState(1048);
				match(RPAREN);
				}
				break;
			case 30:
				{
				_localctx = new ArrayUpperFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1050);
				match(ARRAY_UPPER);
				setState(1051);
				match(LPAREN);
				setState(1052);
				expr(0);
				setState(1053);
				match(COMMA);
				setState(1054);
				expr(0);
				setState(1055);
				match(RPAREN);
				}
				break;
			case 31:
				{
				_localctx = new AbsFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1057);
				match(ABS);
				setState(1058);
				match(LPAREN);
				setState(1059);
				expr(0);
				setState(1060);
				match(RPAREN);
				}
				break;
			case 32:
				{
				_localctx = new ModFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1062);
				match(MOD);
				setState(1063);
				match(LPAREN);
				setState(1064);
				expr(0);
				setState(1065);
				match(COMMA);
				setState(1066);
				expr(0);
				setState(1067);
				match(RPAREN);
				}
				break;
			case 33:
				{
				_localctx = new TrigonometricFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1069);
				trigonometricFunctionName();
				setState(1070);
				match(LPAREN);
				setState(1071);
				expr(0);
				setState(1072);
				match(RPAREN);
				}
				break;
			case 34:
				{
				_localctx = new LogFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1074);
				match(LOG);
				setState(1075);
				match(LPAREN);
				setState(1076);
				generalLogarithmBase();
				setState(1077);
				match(COMMA);
				setState(1078);
				generalLogarithmArgument();
				setState(1079);
				match(RPAREN);
				}
				break;
			case 35:
				{
				_localctx = new Log10FunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1081);
				match(LOG10);
				setState(1082);
				match(LPAREN);
				setState(1083);
				expr(0);
				setState(1084);
				match(RPAREN);
				}
				break;
			case 36:
				{
				_localctx = new LnFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1086);
				match(LN);
				setState(1087);
				match(LPAREN);
				setState(1088);
				expr(0);
				setState(1089);
				match(RPAREN);
				}
				break;
			case 37:
				{
				_localctx = new ExpFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1091);
				match(EXP);
				setState(1092);
				match(LPAREN);
				setState(1093);
				expr(0);
				setState(1094);
				match(RPAREN);
				}
				break;
			case 38:
				{
				_localctx = new PowerFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1096);
				match(POWER);
				setState(1097);
				match(LPAREN);
				setState(1098);
				expr(0);
				setState(1099);
				match(COMMA);
				setState(1100);
				expr(0);
				setState(1101);
				match(RPAREN);
				}
				break;
			case 39:
				{
				_localctx = new SqrtFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1103);
				match(SQRT);
				setState(1104);
				match(LPAREN);
				setState(1105);
				expr(0);
				setState(1106);
				match(RPAREN);
				}
				break;
			case 40:
				{
				_localctx = new FloorFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1108);
				match(FLOOR);
				setState(1109);
				match(LPAREN);
				setState(1110);
				expr(0);
				setState(1111);
				match(RPAREN);
				}
				break;
			case 41:
				{
				_localctx = new CeilingFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1113);
				_la = _input.LA(1);
				if ( !(_la==CEIL || _la==CEILING) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(1114);
				match(LPAREN);
				setState(1115);
				expr(0);
				setState(1116);
				match(RPAREN);
				}
				break;
			case 42:
				{
				_localctx = new LeastFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1118);
				match(LEAST);
				setState(1119);
				match(LPAREN);
				setState(1120);
				expr(0);
				setState(1125);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==COMMA) {
					{
					{
					setState(1121);
					match(COMMA);
					setState(1122);
					expr(0);
					}
					}
					setState(1127);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				setState(1128);
				match(RPAREN);
				}
				break;
			case 43:
				{
				_localctx = new GreatestFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1130);
				match(GREATEST);
				setState(1131);
				match(LPAREN);
				setState(1132);
				expr(0);
				setState(1137);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==COMMA) {
					{
					{
					setState(1133);
					match(COMMA);
					setState(1134);
					expr(0);
					}
					}
					setState(1139);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				setState(1140);
				match(RPAREN);
				}
				break;
			case 44:
				{
				_localctx = new CharacterSubstringFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1142);
				match(SUBSTRING);
				setState(1143);
				match(LPAREN);
				setState(1144);
				expr(0);
				setState(1165);
				_errHandler.sync(this);
				switch (_input.LA(1)) {
				case UNSIGNED_FLOAT:
				case UNSIGNED_INTEGER:
				case CHARACTER_STRING:
				case C_ESCAPES_STRING:
				case BINARY_STRING:
				case POSTGRES_PARAMETER_SPECIFICATION:
				case QUESTION:
				case LPAREN:
				case LBRACK:
				case LBRACE:
				case TILDE:
				case PLUS:
				case MINUS:
				case ABS:
				case ACOS:
				case AGE:
				case ARRAY:
				case ARRAY_AGG:
				case ARRAY_UPPER:
				case ASIN:
				case ATAN:
				case AVG:
				case BASIS:
				case BOOL_AND:
				case BOOL_OR:
				case CARDINALITY:
				case CASE:
				case CAST:
				case CEIL:
				case CEILING:
				case CHARACTER_LENGTH:
				case CHAR_LENGTH:
				case COALESCE:
				case COMMITTED:
				case COS:
				case COSH:
				case COUNT:
				case CUME_DIST:
				case CURRENT_DATABASE:
				case CURRENT_DATE:
				case CURRENT_SCHEMA:
				case CURRENT_SCHEMAS:
				case CURRENT_TIME:
				case CURRENT_TIMESTAMP:
				case CURRENT_USER:
				case DATE:
				case DATE_BIN:
				case DATE_TRUNC:
				case DELETE:
				case DENSE_RANK:
				case DURATION:
				case END:
				case ERASE:
				case EVERY:
				case EXISTS:
				case EXP:
				case EXTRACT:
				case FALSE:
				case FIRST_VALUE:
				case FLOOR:
				case FROM:
				case GENERATE_SERIES:
				case GREATEST:
				case HAS_ANY_COLUMN_PRIVILEGE:
				case HAS_SCHEMA_PRIVILEGE:
				case HAS_TABLE_PRIVILEGE:
				case INSERT:
				case INTERVAL:
				case LAG:
				case LAST_VALUE:
				case LATEST:
				case LEAD:
				case LEAST:
				case LENGTH:
				case LN:
				case LOCALTIME:
				case LOCALTIMESTAMP:
				case LOG:
				case LOG10:
				case LOWER:
				case LOWER_INF:
				case MAX:
				case MIN:
				case MOD:
				case NEST_MANY:
				case NEST_ONE:
				case NOT:
				case NOW:
				case NTH_VALUE:
				case NTILE:
				case NULL:
				case NULLIF:
				case OBJECT:
				case OCTET_LENGTH:
				case OVERLAPS:
				case OVERLAY:
				case PERCENT_RANK:
				case PERIOD:
				case PG_EXPANDARRAY:
				case PG_GET_EXPR:
				case PG_GET_INDEXDEF:
				case POSITION:
				case POWER:
				case RANGE_BINS:
				case RANK:
				case RECORD:
				case REPLACE:
				case ROLE:
				case ROW_NUMBER:
				case SELECT:
				case SETTING:
				case SIN:
				case SINH:
				case SQRT:
				case START:
				case STDDEV_POP:
				case STDDEV_SAMP:
				case SUBMITTED:
				case SUBSTRING:
				case SUM:
				case SYSTEM_TIME:
				case TAN:
				case TANH:
				case TIME:
				case TIMESTAMP:
				case TIMEZONE:
				case TRIM:
				case TRIM_ARRAY:
				case TRUE:
				case TSTZRANGE:
				case UNCOMMITTED:
				case UPDATE:
				case UPPER:
				case UPPER_INF:
				case UUID:
				case VALID_TIME:
				case VALUE_OF:
				case VAR_POP:
				case VAR_SAMP:
				case VERSION:
				case DOLLAR_TAG:
				case REGULAR_IDENTIFIER:
				case DELIMITED_IDENTIFIER:
					{
					setState(1146);
					_errHandler.sync(this);
					_la = _input.LA(1);
					if (_la==FROM) {
						{
						setState(1145);
						match(FROM);
						}
					}

					setState(1148);
					startPosition();
					setState(1153);
					_errHandler.sync(this);
					_la = _input.LA(1);
					if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 4075256285523264496L) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & 5703988182742036979L) != 0) || ((((_la - 133)) & ~0x3f) == 0 && ((1L << (_la - 133)) & 3551075298076794053L) != 0) || ((((_la - 198)) & ~0x3f) == 0 && ((1L << (_la - 198)) & -8493220717618264769L) != 0) || ((((_la - 263)) & ~0x3f) == 0 && ((1L << (_la - 263)) & 4036260756444010451L) != 0)) {
						{
						setState(1150);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==FOR) {
							{
							setState(1149);
							match(FOR);
							}
						}

						setState(1152);
						stringLength();
						}
					}

					setState(1157);
					_errHandler.sync(this);
					_la = _input.LA(1);
					if (_la==USING) {
						{
						setState(1155);
						match(USING);
						setState(1156);
						charLengthUnits();
						}
					}

					}
					break;
				case COMMA:
					{
					setState(1159);
					match(COMMA);
					setState(1160);
					startPosition();
					setState(1163);
					_errHandler.sync(this);
					_la = _input.LA(1);
					if (_la==COMMA) {
						{
						setState(1161);
						match(COMMA);
						setState(1162);
						stringLength();
						}
					}

					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				setState(1167);
				match(RPAREN);
				}
				break;
			case 45:
				{
				_localctx = new UpperFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1169);
				match(UPPER);
				setState(1170);
				match(LPAREN);
				setState(1171);
				expr(0);
				setState(1172);
				match(RPAREN);
				}
				break;
			case 46:
				{
				_localctx = new LowerFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1174);
				match(LOWER);
				setState(1175);
				match(LPAREN);
				setState(1176);
				expr(0);
				setState(1177);
				match(RPAREN);
				}
				break;
			case 47:
				{
				_localctx = new TrimFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1179);
				match(TRIM);
				setState(1180);
				match(LPAREN);
				setState(1182);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==BOTH || _la==LEADING || _la==TRAILING) {
					{
					setState(1181);
					trimSpecification();
					}
				}

				setState(1185);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,83,_ctx) ) {
				case 1:
					{
					setState(1184);
					trimCharacter();
					}
					break;
				}
				setState(1188);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==FROM) {
					{
					setState(1187);
					match(FROM);
					}
				}

				setState(1190);
				trimSource();
				setState(1191);
				match(RPAREN);
				}
				break;
			case 48:
				{
				_localctx = new OverlayFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1193);
				match(OVERLAY);
				setState(1194);
				match(LPAREN);
				setState(1195);
				expr(0);
				setState(1196);
				match(PLACING);
				setState(1197);
				expr(0);
				setState(1198);
				match(FROM);
				setState(1199);
				startPosition();
				setState(1202);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==FOR) {
					{
					setState(1200);
					match(FOR);
					setState(1201);
					stringLength();
					}
				}

				setState(1206);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==USING) {
					{
					setState(1204);
					match(USING);
					setState(1205);
					charLengthUnits();
					}
				}

				setState(1208);
				match(RPAREN);
				}
				break;
			case 49:
				{
				_localctx = new ReplaceFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1210);
				match(REPLACE);
				setState(1211);
				match(LPAREN);
				setState(1212);
				expr(0);
				setState(1213);
				match(COMMA);
				setState(1214);
				replaceTarget();
				setState(1215);
				match(COMMA);
				setState(1216);
				replacement();
				setState(1217);
				match(RPAREN);
				}
				break;
			case 50:
				{
				_localctx = new CurrentUserFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1222);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3458799698192629760L) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & 11400836069523475L) != 0) || ((((_la - 152)) & ~0x3f) == 0 && ((1L << (_la - 152)) & 36507230209L) != 0) || ((((_la - 251)) & ~0x3f) == 0 && ((1L << (_la - 251)) & 4072450366241506369L) != 0) || _la==REGULAR_IDENTIFIER || _la==DELIMITED_IDENTIFIER) {
					{
					setState(1219);
					schemaName();
					setState(1220);
					match(DOT);
					}
				}

				setState(1224);
				match(CURRENT_USER);
				}
				break;
			case 51:
				{
				_localctx = new CurrentSchemaFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1228);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3458799698192629760L) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & 11400836069523475L) != 0) || ((((_la - 152)) & ~0x3f) == 0 && ((1L << (_la - 152)) & 36507230209L) != 0) || ((((_la - 251)) & ~0x3f) == 0 && ((1L << (_la - 251)) & 4072450366241506369L) != 0) || _la==REGULAR_IDENTIFIER || _la==DELIMITED_IDENTIFIER) {
					{
					setState(1225);
					schemaName();
					setState(1226);
					match(DOT);
					}
				}

				setState(1230);
				match(CURRENT_SCHEMA);
				setState(1233);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,89,_ctx) ) {
				case 1:
					{
					setState(1231);
					match(LPAREN);
					setState(1232);
					match(RPAREN);
					}
					break;
				}
				}
				break;
			case 52:
				{
				_localctx = new CurrentSchemasFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1238);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3458799698192629760L) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & 11400836069523475L) != 0) || ((((_la - 152)) & ~0x3f) == 0 && ((1L << (_la - 152)) & 36507230209L) != 0) || ((((_la - 251)) & ~0x3f) == 0 && ((1L << (_la - 251)) & 4072450366241506369L) != 0) || _la==REGULAR_IDENTIFIER || _la==DELIMITED_IDENTIFIER) {
					{
					setState(1235);
					schemaName();
					setState(1236);
					match(DOT);
					}
				}

				setState(1240);
				match(CURRENT_SCHEMAS);
				setState(1241);
				match(LPAREN);
				setState(1242);
				expr(0);
				setState(1243);
				match(RPAREN);
				}
				break;
			case 53:
				{
				_localctx = new CurrentDatabaseFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1248);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3458799698192629760L) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & 11400836069523475L) != 0) || ((((_la - 152)) & ~0x3f) == 0 && ((1L << (_la - 152)) & 36507230209L) != 0) || ((((_la - 251)) & ~0x3f) == 0 && ((1L << (_la - 251)) & 4072450366241506369L) != 0) || _la==REGULAR_IDENTIFIER || _la==DELIMITED_IDENTIFIER) {
					{
					setState(1245);
					schemaName();
					setState(1246);
					match(DOT);
					}
				}

				setState(1250);
				match(CURRENT_DATABASE);
				setState(1253);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,92,_ctx) ) {
				case 1:
					{
					setState(1251);
					match(LPAREN);
					setState(1252);
					match(RPAREN);
					}
					break;
				}
				}
				break;
			case 54:
				{
				_localctx = new PgGetExprFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1258);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3458799698192629760L) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & 11400836069523475L) != 0) || ((((_la - 152)) & ~0x3f) == 0 && ((1L << (_la - 152)) & 36507230209L) != 0) || ((((_la - 251)) & ~0x3f) == 0 && ((1L << (_la - 251)) & 4072450366241506369L) != 0) || _la==REGULAR_IDENTIFIER || _la==DELIMITED_IDENTIFIER) {
					{
					setState(1255);
					schemaName();
					setState(1256);
					match(DOT);
					}
				}

				setState(1260);
				match(PG_GET_EXPR);
				setState(1271);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,95,_ctx) ) {
				case 1:
					{
					setState(1261);
					match(LPAREN);
					setState(1262);
					expr(0);
					setState(1263);
					match(COMMA);
					setState(1264);
					expr(0);
					setState(1267);
					_errHandler.sync(this);
					_la = _input.LA(1);
					if (_la==COMMA) {
						{
						setState(1265);
						match(COMMA);
						setState(1266);
						expr(0);
						}
					}

					setState(1269);
					match(RPAREN);
					}
					break;
				}
				}
				break;
			case 55:
				{
				_localctx = new PgExpandArrayFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1276);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3458799698192629760L) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & 11400836069523475L) != 0) || ((((_la - 152)) & ~0x3f) == 0 && ((1L << (_la - 152)) & 36507230209L) != 0) || ((((_la - 251)) & ~0x3f) == 0 && ((1L << (_la - 251)) & 4072450366241506369L) != 0) || _la==REGULAR_IDENTIFIER || _la==DELIMITED_IDENTIFIER) {
					{
					setState(1273);
					schemaName();
					setState(1274);
					match(DOT);
					}
				}

				setState(1278);
				match(PG_EXPANDARRAY);
				setState(1283);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,97,_ctx) ) {
				case 1:
					{
					setState(1279);
					match(LPAREN);
					setState(1280);
					expr(0);
					setState(1281);
					match(RPAREN);
					}
					break;
				}
				}
				break;
			case 56:
				{
				_localctx = new PgGetIndexdefFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1288);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3458799698192629760L) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & 11400836069523475L) != 0) || ((((_la - 152)) & ~0x3f) == 0 && ((1L << (_la - 152)) & 36507230209L) != 0) || ((((_la - 251)) & ~0x3f) == 0 && ((1L << (_la - 251)) & 4072450366241506369L) != 0) || _la==REGULAR_IDENTIFIER || _la==DELIMITED_IDENTIFIER) {
					{
					setState(1285);
					schemaName();
					setState(1286);
					match(DOT);
					}
				}

				setState(1290);
				match(PG_GET_INDEXDEF);
				setState(1291);
				match(LPAREN);
				setState(1292);
				expr(0);
				setState(1298);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==COMMA) {
					{
					setState(1293);
					match(COMMA);
					setState(1294);
					expr(0);
					setState(1295);
					match(COMMA);
					setState(1296);
					expr(0);
					}
				}

				setState(1300);
				match(RPAREN);
				}
				break;
			case 57:
				{
				_localctx = new CurrentInstantFunction0Context(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1302);
				currentInstantFunction();
				}
				break;
			case 58:
				{
				_localctx = new CurrentTimeFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1303);
				match(CURRENT_TIME);
				setState(1308);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,100,_ctx) ) {
				case 1:
					{
					setState(1304);
					match(LPAREN);
					setState(1305);
					precision();
					setState(1306);
					match(RPAREN);
					}
					break;
				}
				}
				break;
			case 59:
				{
				_localctx = new LocalTimeFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1310);
				match(LOCALTIME);
				setState(1315);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,101,_ctx) ) {
				case 1:
					{
					setState(1311);
					match(LPAREN);
					setState(1312);
					precision();
					setState(1313);
					match(RPAREN);
					}
					break;
				}
				}
				break;
			case 60:
				{
				_localctx = new DateTruncFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1317);
				match(DATE_TRUNC);
				setState(1318);
				match(LPAREN);
				setState(1319);
				dateTruncPrecision();
				setState(1320);
				match(COMMA);
				setState(1321);
				dateTruncSource();
				setState(1324);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==COMMA) {
					{
					setState(1322);
					match(COMMA);
					setState(1323);
					dateTruncTimeZone();
					}
				}

				setState(1326);
				match(RPAREN);
				}
				break;
			case 61:
				{
				_localctx = new DateBinFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1328);
				match(DATE_BIN);
				setState(1329);
				match(LPAREN);
				setState(1330);
				intervalLiteral();
				setState(1331);
				match(COMMA);
				setState(1332);
				dateBinSource();
				setState(1335);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==COMMA) {
					{
					setState(1333);
					match(COMMA);
					setState(1334);
					dateBinOrigin();
					}
				}

				setState(1337);
				match(RPAREN);
				}
				break;
			case 62:
				{
				_localctx = new RangeBinsFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1339);
				match(RANGE_BINS);
				setState(1340);
				match(LPAREN);
				setState(1341);
				intervalLiteral();
				setState(1342);
				match(COMMA);
				setState(1343);
				rangeBinsSource();
				setState(1346);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==COMMA) {
					{
					setState(1344);
					match(COMMA);
					setState(1345);
					dateBinOrigin();
					}
				}

				setState(1348);
				match(RPAREN);
				}
				break;
			case 63:
				{
				_localctx = new OverlapsFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1350);
				match(OVERLAPS);
				setState(1351);
				match(LPAREN);
				setState(1352);
				expr(0);
				setState(1355); 
				_errHandler.sync(this);
				_la = _input.LA(1);
				do {
					{
					{
					setState(1353);
					match(COMMA);
					setState(1354);
					expr(0);
					}
					}
					setState(1357); 
					_errHandler.sync(this);
					_la = _input.LA(1);
				} while ( _la==COMMA );
				setState(1359);
				match(RPAREN);
				}
				break;
			case 64:
				{
				_localctx = new TsTzRangeConstructorContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1361);
				_la = _input.LA(1);
				if ( !(_la==PERIOD || _la==TSTZRANGE) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(1362);
				match(LPAREN);
				setState(1363);
				expr(0);
				setState(1364);
				match(COMMA);
				setState(1365);
				expr(0);
				setState(1366);
				match(RPAREN);
				}
				break;
			case 65:
				{
				_localctx = new UpperInfFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1368);
				match(UPPER_INF);
				setState(1369);
				match(LPAREN);
				setState(1370);
				expr(0);
				setState(1371);
				match(RPAREN);
				}
				break;
			case 66:
				{
				_localctx = new LowerInfFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1373);
				match(LOWER_INF);
				setState(1374);
				match(LPAREN);
				setState(1375);
				expr(0);
				setState(1376);
				match(RPAREN);
				}
				break;
			case 67:
				{
				_localctx = new AgeFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1378);
				match(AGE);
				setState(1379);
				match(LPAREN);
				setState(1380);
				expr(0);
				setState(1381);
				match(COMMA);
				setState(1382);
				expr(0);
				setState(1383);
				match(RPAREN);
				}
				break;
			case 68:
				{
				_localctx = new TrimArrayFunctionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1385);
				match(TRIM_ARRAY);
				setState(1386);
				match(LPAREN);
				setState(1387);
				expr(0);
				setState(1388);
				match(COMMA);
				setState(1389);
				expr(0);
				setState(1390);
				match(RPAREN);
				}
				break;
			}
			_ctx.stop = _input.LT(-1);
			setState(1410);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,108,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					if ( _parseListeners!=null ) triggerExitRuleEvent();
					_prevctx = _localctx;
					{
					setState(1408);
					_errHandler.sync(this);
					switch ( getInterpreter().adaptivePredict(_input,107,_ctx) ) {
					case 1:
						{
						_localctx = new ConcatExprContext(new ExprPrimaryContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_exprPrimary);
						setState(1394);
						if (!(precpred(_ctx, 67))) throw new FailedPredicateException(this, "precpred(_ctx, 67)");
						setState(1395);
						match(CONCAT);
						setState(1396);
						exprPrimary(68);
						}
						break;
					case 2:
						{
						_localctx = new FieldAccessContext(new ExprPrimaryContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_exprPrimary);
						setState(1397);
						if (!(precpred(_ctx, 70))) throw new FailedPredicateException(this, "precpred(_ctx, 70)");
						setState(1398);
						match(DOT);
						setState(1399);
						fieldName();
						}
						break;
					case 3:
						{
						_localctx = new ArrayAccessContext(new ExprPrimaryContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_exprPrimary);
						setState(1400);
						if (!(precpred(_ctx, 69))) throw new FailedPredicateException(this, "precpred(_ctx, 69)");
						setState(1401);
						match(LBRACK);
						setState(1402);
						expr(0);
						setState(1403);
						match(RBRACK);
						}
						break;
					case 4:
						{
						_localctx = new PostgresCastExprContext(new ExprPrimaryContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_exprPrimary);
						setState(1405);
						if (!(precpred(_ctx, 68))) throw new FailedPredicateException(this, "precpred(_ctx, 68)");
						setState(1406);
						match(PG_CAST);
						setState(1407);
						dataType(0);
						}
						break;
					}
					} 
				}
				setState(1412);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,108,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			unrollRecursionContexts(_parentctx);
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ReplaceTargetContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public ReplaceTargetContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_replaceTarget; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitReplaceTarget(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ReplaceTargetContext replaceTarget() throws RecognitionException {
		ReplaceTargetContext _localctx = new ReplaceTargetContext(_ctx, getState());
		enterRule(_localctx, 70, RULE_replaceTarget);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1413);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ReplacementContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public ReplacementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_replacement; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitReplacement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ReplacementContext replacement() throws RecognitionException {
		ReplacementContext _localctx = new ReplacementContext(_ctx, getState());
		enterRule(_localctx, 72, RULE_replacement);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1415);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class CurrentInstantFunctionContext extends ParserRuleContext {
		public CurrentInstantFunctionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_currentInstantFunction; }
	 
		public CurrentInstantFunctionContext() { }
		public void copyFrom(CurrentInstantFunctionContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class CurrentTimestampFunctionContext extends CurrentInstantFunctionContext {
		public TerminalNode CURRENT_TIMESTAMP() { return getToken(Sql.CURRENT_TIMESTAMP, 0); }
		public TerminalNode NOW() { return getToken(Sql.NOW, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public PrecisionContext precision() {
			return getRuleContext(PrecisionContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public CurrentTimestampFunctionContext(CurrentInstantFunctionContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitCurrentTimestampFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class LocalTimestampFunctionContext extends CurrentInstantFunctionContext {
		public TerminalNode LOCALTIMESTAMP() { return getToken(Sql.LOCALTIMESTAMP, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public PrecisionContext precision() {
			return getRuleContext(PrecisionContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public LocalTimestampFunctionContext(CurrentInstantFunctionContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitLocalTimestampFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class CurrentDateFunctionContext extends CurrentInstantFunctionContext {
		public TerminalNode CURRENT_DATE() { return getToken(Sql.CURRENT_DATE, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public CurrentDateFunctionContext(CurrentInstantFunctionContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitCurrentDateFunction(this);
			else return visitor.visitChildren(this);
		}
	}

	public final CurrentInstantFunctionContext currentInstantFunction() throws RecognitionException {
		CurrentInstantFunctionContext _localctx = new CurrentInstantFunctionContext(_ctx, getState());
		enterRule(_localctx, 74, RULE_currentInstantFunction);
		int _la;
		try {
			setState(1436);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case CURRENT_DATE:
				_localctx = new CurrentDateFunctionContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(1417);
				match(CURRENT_DATE);
				setState(1420);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,109,_ctx) ) {
				case 1:
					{
					setState(1418);
					match(LPAREN);
					setState(1419);
					match(RPAREN);
					}
					break;
				}
				}
				break;
			case CURRENT_TIMESTAMP:
			case NOW:
				_localctx = new CurrentTimestampFunctionContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(1422);
				_la = _input.LA(1);
				if ( !(_la==CURRENT_TIMESTAMP || _la==NOW) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(1427);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,110,_ctx) ) {
				case 1:
					{
					setState(1423);
					match(LPAREN);
					setState(1424);
					precision();
					setState(1425);
					match(RPAREN);
					}
					break;
				}
				}
				break;
			case LOCALTIMESTAMP:
				_localctx = new LocalTimestampFunctionContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(1429);
				match(LOCALTIMESTAMP);
				setState(1434);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,111,_ctx) ) {
				case 1:
					{
					setState(1430);
					match(LPAREN);
					setState(1431);
					precision();
					setState(1432);
					match(RPAREN);
					}
					break;
				}
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class BooleanValueContext extends ParserRuleContext {
		public TerminalNode TRUE() { return getToken(Sql.TRUE, 0); }
		public TerminalNode FALSE() { return getToken(Sql.FALSE, 0); }
		public TerminalNode UNKNOWN() { return getToken(Sql.UNKNOWN, 0); }
		public BooleanValueContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_booleanValue; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitBooleanValue(this);
			else return visitor.visitChildren(this);
		}
	}

	public final BooleanValueContext booleanValue() throws RecognitionException {
		BooleanValueContext _localctx = new BooleanValueContext(_ctx, getState());
		enterRule(_localctx, 76, RULE_booleanValue);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1438);
			_la = _input.LA(1);
			if ( !(_la==FALSE || _la==TRUE || _la==UNKNOWN) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ObjectConstructorContext extends ParserRuleContext {
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public TerminalNode RECORD() { return getToken(Sql.RECORD, 0); }
		public TerminalNode OBJECT() { return getToken(Sql.OBJECT, 0); }
		public List objectNameAndValue() {
			return getRuleContexts(ObjectNameAndValueContext.class);
		}
		public ObjectNameAndValueContext objectNameAndValue(int i) {
			return getRuleContext(ObjectNameAndValueContext.class,i);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public TerminalNode LBRACE() { return getToken(Sql.LBRACE, 0); }
		public TerminalNode RBRACE() { return getToken(Sql.RBRACE, 0); }
		public ObjectConstructorContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_objectConstructor; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitObjectConstructor(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ObjectConstructorContext objectConstructor() throws RecognitionException {
		ObjectConstructorContext _localctx = new ObjectConstructorContext(_ctx, getState());
		enterRule(_localctx, 78, RULE_objectConstructor);
		int _la;
		try {
			setState(1465);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case OBJECT:
			case RECORD:
				enterOuterAlt(_localctx, 1);
				{
				setState(1440);
				_la = _input.LA(1);
				if ( !(_la==OBJECT || _la==RECORD) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(1441);
				match(LPAREN);
				setState(1450);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3458799698192629760L) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & 11400836069523475L) != 0) || ((((_la - 152)) & ~0x3f) == 0 && ((1L << (_la - 152)) & 36507230209L) != 0) || ((((_la - 251)) & ~0x3f) == 0 && ((1L << (_la - 251)) & 4072450366241506369L) != 0) || _la==REGULAR_IDENTIFIER || _la==DELIMITED_IDENTIFIER) {
					{
					setState(1442);
					objectNameAndValue();
					setState(1447);
					_errHandler.sync(this);
					_la = _input.LA(1);
					while (_la==COMMA) {
						{
						{
						setState(1443);
						match(COMMA);
						setState(1444);
						objectNameAndValue();
						}
						}
						setState(1449);
						_errHandler.sync(this);
						_la = _input.LA(1);
					}
					}
				}

				setState(1452);
				match(RPAREN);
				}
				break;
			case LBRACE:
				enterOuterAlt(_localctx, 2);
				{
				setState(1453);
				match(LBRACE);
				setState(1462);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3458799698192629760L) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & 11400836069523475L) != 0) || ((((_la - 152)) & ~0x3f) == 0 && ((1L << (_la - 152)) & 36507230209L) != 0) || ((((_la - 251)) & ~0x3f) == 0 && ((1L << (_la - 251)) & 4072450366241506369L) != 0) || _la==REGULAR_IDENTIFIER || _la==DELIMITED_IDENTIFIER) {
					{
					setState(1454);
					objectNameAndValue();
					setState(1459);
					_errHandler.sync(this);
					_la = _input.LA(1);
					while (_la==COMMA) {
						{
						{
						setState(1455);
						match(COMMA);
						setState(1456);
						objectNameAndValue();
						}
						}
						setState(1461);
						_errHandler.sync(this);
						_la = _input.LA(1);
					}
					}
				}

				setState(1464);
				match(RBRACE);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ObjectNameAndValueContext extends ParserRuleContext {
		public ObjectNameContext objectName() {
			return getRuleContext(ObjectNameContext.class,0);
		}
		public TerminalNode COLON() { return getToken(Sql.COLON, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public ObjectNameAndValueContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_objectNameAndValue; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitObjectNameAndValue(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ObjectNameAndValueContext objectNameAndValue() throws RecognitionException {
		ObjectNameAndValueContext _localctx = new ObjectNameAndValueContext(_ctx, getState());
		enterRule(_localctx, 80, RULE_objectNameAndValue);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1467);
			objectName();
			setState(1468);
			match(COLON);
			setState(1469);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ObjectNameContext extends ParserRuleContext {
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public ObjectNameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_objectName; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitObjectName(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ObjectNameContext objectName() throws RecognitionException {
		ObjectNameContext _localctx = new ObjectNameContext(_ctx, getState());
		enterRule(_localctx, 82, RULE_objectName);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1471);
			identifier();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ParameterSpecificationContext extends ParserRuleContext {
		public ParameterSpecificationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_parameterSpecification; }
	 
		public ParameterSpecificationContext() { }
		public void copyFrom(ParameterSpecificationContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class PostgresParameterContext extends ParameterSpecificationContext {
		public TerminalNode POSTGRES_PARAMETER_SPECIFICATION() { return getToken(Sql.POSTGRES_PARAMETER_SPECIFICATION, 0); }
		public PostgresParameterContext(ParameterSpecificationContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitPostgresParameter(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class DynamicParameterContext extends ParameterSpecificationContext {
		public TerminalNode QUESTION() { return getToken(Sql.QUESTION, 0); }
		public DynamicParameterContext(ParameterSpecificationContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitDynamicParameter(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ParameterSpecificationContext parameterSpecification() throws RecognitionException {
		ParameterSpecificationContext _localctx = new ParameterSpecificationContext(_ctx, getState());
		enterRule(_localctx, 84, RULE_parameterSpecification);
		try {
			setState(1475);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case QUESTION:
				_localctx = new DynamicParameterContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(1473);
				match(QUESTION);
				}
				break;
			case POSTGRES_PARAMETER_SPECIFICATION:
				_localctx = new PostgresParameterContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(1474);
				match(POSTGRES_PARAMETER_SPECIFICATION);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ColumnReferenceContext extends ParserRuleContext {
		public IdentifierChainContext identifierChain() {
			return getRuleContext(IdentifierChainContext.class,0);
		}
		public ColumnReferenceContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_columnReference; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitColumnReference(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ColumnReferenceContext columnReference() throws RecognitionException {
		ColumnReferenceContext _localctx = new ColumnReferenceContext(_ctx, getState());
		enterRule(_localctx, 86, RULE_columnReference);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1477);
			identifierChain();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class GenerateSeriesContext extends ParserRuleContext {
		public TerminalNode GENERATE_SERIES() { return getToken(Sql.GENERATE_SERIES, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public SeriesStartContext seriesStart() {
			return getRuleContext(SeriesStartContext.class,0);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public SeriesEndContext seriesEnd() {
			return getRuleContext(SeriesEndContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public SchemaNameContext schemaName() {
			return getRuleContext(SchemaNameContext.class,0);
		}
		public TerminalNode DOT() { return getToken(Sql.DOT, 0); }
		public SeriesStepContext seriesStep() {
			return getRuleContext(SeriesStepContext.class,0);
		}
		public GenerateSeriesContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_generateSeries; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitGenerateSeries(this);
			else return visitor.visitChildren(this);
		}
	}

	public final GenerateSeriesContext generateSeries() throws RecognitionException {
		GenerateSeriesContext _localctx = new GenerateSeriesContext(_ctx, getState());
		enterRule(_localctx, 88, RULE_generateSeries);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1482);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3458799698192629760L) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & 11400836069523475L) != 0) || ((((_la - 152)) & ~0x3f) == 0 && ((1L << (_la - 152)) & 36507230209L) != 0) || ((((_la - 251)) & ~0x3f) == 0 && ((1L << (_la - 251)) & 4072450366241506369L) != 0) || _la==REGULAR_IDENTIFIER || _la==DELIMITED_IDENTIFIER) {
				{
				setState(1479);
				schemaName();
				setState(1480);
				match(DOT);
				}
			}

			setState(1484);
			match(GENERATE_SERIES);
			setState(1485);
			match(LPAREN);
			setState(1486);
			seriesStart();
			setState(1487);
			match(COMMA);
			setState(1488);
			seriesEnd();
			setState(1491);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==COMMA) {
				{
				setState(1489);
				match(COMMA);
				setState(1490);
				seriesStep();
				}
			}

			setState(1493);
			match(RPAREN);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class SeriesStartContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public SeriesStartContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_seriesStart; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSeriesStart(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SeriesStartContext seriesStart() throws RecognitionException {
		SeriesStartContext _localctx = new SeriesStartContext(_ctx, getState());
		enterRule(_localctx, 90, RULE_seriesStart);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1495);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class SeriesEndContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public SeriesEndContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_seriesEnd; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSeriesEnd(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SeriesEndContext seriesEnd() throws RecognitionException {
		SeriesEndContext _localctx = new SeriesEndContext(_ctx, getState());
		enterRule(_localctx, 92, RULE_seriesEnd);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1497);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class SeriesStepContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public SeriesStepContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_seriesStep; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSeriesStep(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SeriesStepContext seriesStep() throws RecognitionException {
		SeriesStepContext _localctx = new SeriesStepContext(_ctx, getState());
		enterRule(_localctx, 94, RULE_seriesStep);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1499);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WindowFunctionTypeContext extends ParserRuleContext {
		public WindowFunctionTypeContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_windowFunctionType; }
	 
		public WindowFunctionTypeContext() { }
		public void copyFrom(WindowFunctionTypeContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class NtileWindowFunctionContext extends WindowFunctionTypeContext {
		public TerminalNode NTILE() { return getToken(Sql.NTILE, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public NumberOfTilesContext numberOfTiles() {
			return getRuleContext(NumberOfTilesContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public NtileWindowFunctionContext(WindowFunctionTypeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitNtileWindowFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class FirstOrLastValueWindowFunctionContext extends WindowFunctionTypeContext {
		public FirstOrLastValueContext firstOrLastValue() {
			return getRuleContext(FirstOrLastValueContext.class,0);
		}
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public NullTreatmentContext nullTreatment() {
			return getRuleContext(NullTreatmentContext.class,0);
		}
		public FirstOrLastValueWindowFunctionContext(WindowFunctionTypeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitFirstOrLastValueWindowFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class LeadOrLagWindowFunctionContext extends WindowFunctionTypeContext {
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public LeadOrLagExtentContext leadOrLagExtent() {
			return getRuleContext(LeadOrLagExtentContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public TerminalNode LEAD() { return getToken(Sql.LEAD, 0); }
		public TerminalNode LAG() { return getToken(Sql.LAG, 0); }
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public OffsetContext offset() {
			return getRuleContext(OffsetContext.class,0);
		}
		public NullTreatmentContext nullTreatment() {
			return getRuleContext(NullTreatmentContext.class,0);
		}
		public DefaultExpressionContext defaultExpression() {
			return getRuleContext(DefaultExpressionContext.class,0);
		}
		public LeadOrLagWindowFunctionContext(WindowFunctionTypeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitLeadOrLagWindowFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class RankWindowFunctionContext extends WindowFunctionTypeContext {
		public RankFunctionTypeContext rankFunctionType() {
			return getRuleContext(RankFunctionTypeContext.class,0);
		}
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public RankWindowFunctionContext(WindowFunctionTypeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitRankWindowFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class NthValueWindowFunctionContext extends WindowFunctionTypeContext {
		public TerminalNode NTH_VALUE() { return getToken(Sql.NTH_VALUE, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode COMMA() { return getToken(Sql.COMMA, 0); }
		public NthRowContext nthRow() {
			return getRuleContext(NthRowContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public FromFirstOrLastContext fromFirstOrLast() {
			return getRuleContext(FromFirstOrLastContext.class,0);
		}
		public NullTreatmentContext nullTreatment() {
			return getRuleContext(NullTreatmentContext.class,0);
		}
		public NthValueWindowFunctionContext(WindowFunctionTypeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitNthValueWindowFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class AggregateWindowFunctionContext extends WindowFunctionTypeContext {
		public AggregateFunctionContext aggregateFunction() {
			return getRuleContext(AggregateFunctionContext.class,0);
		}
		public AggregateWindowFunctionContext(WindowFunctionTypeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitAggregateWindowFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class RowNumberWindowFunctionContext extends WindowFunctionTypeContext {
		public TerminalNode ROW_NUMBER() { return getToken(Sql.ROW_NUMBER, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public RowNumberWindowFunctionContext(WindowFunctionTypeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitRowNumberWindowFunction(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WindowFunctionTypeContext windowFunctionType() throws RecognitionException {
		WindowFunctionTypeContext _localctx = new WindowFunctionTypeContext(_ctx, getState());
		enterRule(_localctx, 96, RULE_windowFunctionType);
		int _la;
		try {
			setState(1548);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case CUME_DIST:
			case DENSE_RANK:
			case PERCENT_RANK:
			case RANK:
				_localctx = new RankWindowFunctionContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(1501);
				rankFunctionType();
				setState(1502);
				match(LPAREN);
				setState(1503);
				match(RPAREN);
				}
				break;
			case ROW_NUMBER:
				_localctx = new RowNumberWindowFunctionContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(1505);
				match(ROW_NUMBER);
				setState(1506);
				match(LPAREN);
				setState(1507);
				match(RPAREN);
				}
				break;
			case ARRAY_AGG:
			case AVG:
			case BOOL_AND:
			case BOOL_OR:
			case COUNT:
			case EVERY:
			case MAX:
			case MIN:
			case STDDEV_POP:
			case STDDEV_SAMP:
			case SUM:
			case VAR_POP:
			case VAR_SAMP:
				_localctx = new AggregateWindowFunctionContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(1508);
				aggregateFunction();
				}
				break;
			case NTILE:
				_localctx = new NtileWindowFunctionContext(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(1509);
				match(NTILE);
				setState(1510);
				match(LPAREN);
				setState(1511);
				numberOfTiles();
				setState(1512);
				match(RPAREN);
				}
				break;
			case LAG:
			case LEAD:
				_localctx = new LeadOrLagWindowFunctionContext(_localctx);
				enterOuterAlt(_localctx, 5);
				{
				setState(1514);
				_la = _input.LA(1);
				if ( !(_la==LAG || _la==LEAD) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(1515);
				match(LPAREN);
				setState(1516);
				leadOrLagExtent();
				setState(1523);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==COMMA) {
					{
					setState(1517);
					match(COMMA);
					setState(1518);
					offset();
					setState(1521);
					_errHandler.sync(this);
					_la = _input.LA(1);
					if (_la==COMMA) {
						{
						setState(1519);
						match(COMMA);
						setState(1520);
						defaultExpression();
						}
					}

					}
				}

				setState(1525);
				match(RPAREN);
				setState(1527);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==IGNORE || _la==RESPECT) {
					{
					setState(1526);
					nullTreatment();
					}
				}

				}
				break;
			case FIRST_VALUE:
			case LAST_VALUE:
				_localctx = new FirstOrLastValueWindowFunctionContext(_localctx);
				enterOuterAlt(_localctx, 6);
				{
				setState(1529);
				firstOrLastValue();
				setState(1530);
				match(LPAREN);
				setState(1531);
				expr(0);
				setState(1532);
				match(RPAREN);
				setState(1534);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==IGNORE || _la==RESPECT) {
					{
					setState(1533);
					nullTreatment();
					}
				}

				}
				break;
			case NTH_VALUE:
				_localctx = new NthValueWindowFunctionContext(_localctx);
				enterOuterAlt(_localctx, 7);
				{
				setState(1536);
				match(NTH_VALUE);
				setState(1537);
				match(LPAREN);
				setState(1538);
				expr(0);
				setState(1539);
				match(COMMA);
				setState(1540);
				nthRow();
				setState(1541);
				match(RPAREN);
				setState(1543);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==FROM) {
					{
					setState(1542);
					fromFirstOrLast();
					}
				}

				setState(1546);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==IGNORE || _la==RESPECT) {
					{
					setState(1545);
					nullTreatment();
					}
				}

				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class RankFunctionTypeContext extends ParserRuleContext {
		public TerminalNode RANK() { return getToken(Sql.RANK, 0); }
		public TerminalNode DENSE_RANK() { return getToken(Sql.DENSE_RANK, 0); }
		public TerminalNode PERCENT_RANK() { return getToken(Sql.PERCENT_RANK, 0); }
		public TerminalNode CUME_DIST() { return getToken(Sql.CUME_DIST, 0); }
		public RankFunctionTypeContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_rankFunctionType; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitRankFunctionType(this);
			else return visitor.visitChildren(this);
		}
	}

	public final RankFunctionTypeContext rankFunctionType() throws RecognitionException {
		RankFunctionTypeContext _localctx = new RankFunctionTypeContext(_ctx, getState());
		enterRule(_localctx, 98, RULE_rankFunctionType);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1550);
			_la = _input.LA(1);
			if ( !(_la==CUME_DIST || _la==DENSE_RANK || _la==PERCENT_RANK || _la==RANK) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class NumberOfTilesContext extends ParserRuleContext {
		public TerminalNode UNSIGNED_INTEGER() { return getToken(Sql.UNSIGNED_INTEGER, 0); }
		public ParameterSpecificationContext parameterSpecification() {
			return getRuleContext(ParameterSpecificationContext.class,0);
		}
		public NumberOfTilesContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_numberOfTiles; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitNumberOfTiles(this);
			else return visitor.visitChildren(this);
		}
	}

	public final NumberOfTilesContext numberOfTiles() throws RecognitionException {
		NumberOfTilesContext _localctx = new NumberOfTilesContext(_ctx, getState());
		enterRule(_localctx, 100, RULE_numberOfTiles);
		try {
			setState(1554);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case UNSIGNED_INTEGER:
				enterOuterAlt(_localctx, 1);
				{
				setState(1552);
				match(UNSIGNED_INTEGER);
				}
				break;
			case POSTGRES_PARAMETER_SPECIFICATION:
			case QUESTION:
				enterOuterAlt(_localctx, 2);
				{
				setState(1553);
				parameterSpecification();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class LeadOrLagExtentContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public LeadOrLagExtentContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_leadOrLagExtent; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitLeadOrLagExtent(this);
			else return visitor.visitChildren(this);
		}
	}

	public final LeadOrLagExtentContext leadOrLagExtent() throws RecognitionException {
		LeadOrLagExtentContext _localctx = new LeadOrLagExtentContext(_ctx, getState());
		enterRule(_localctx, 102, RULE_leadOrLagExtent);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1556);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class OffsetContext extends ParserRuleContext {
		public TerminalNode UNSIGNED_INTEGER() { return getToken(Sql.UNSIGNED_INTEGER, 0); }
		public OffsetContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_offset; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitOffset(this);
			else return visitor.visitChildren(this);
		}
	}

	public final OffsetContext offset() throws RecognitionException {
		OffsetContext _localctx = new OffsetContext(_ctx, getState());
		enterRule(_localctx, 104, RULE_offset);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1558);
			match(UNSIGNED_INTEGER);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class DefaultExpressionContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public DefaultExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_defaultExpression; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitDefaultExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DefaultExpressionContext defaultExpression() throws RecognitionException {
		DefaultExpressionContext _localctx = new DefaultExpressionContext(_ctx, getState());
		enterRule(_localctx, 106, RULE_defaultExpression);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1560);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class NullTreatmentContext extends ParserRuleContext {
		public NullTreatmentContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_nullTreatment; }
	 
		public NullTreatmentContext() { }
		public void copyFrom(NullTreatmentContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class RespectNullsContext extends NullTreatmentContext {
		public TerminalNode RESPECT() { return getToken(Sql.RESPECT, 0); }
		public TerminalNode NULLS() { return getToken(Sql.NULLS, 0); }
		public RespectNullsContext(NullTreatmentContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitRespectNulls(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class IgnoreNullsContext extends NullTreatmentContext {
		public TerminalNode IGNORE() { return getToken(Sql.IGNORE, 0); }
		public TerminalNode NULLS() { return getToken(Sql.NULLS, 0); }
		public IgnoreNullsContext(NullTreatmentContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitIgnoreNulls(this);
			else return visitor.visitChildren(this);
		}
	}

	public final NullTreatmentContext nullTreatment() throws RecognitionException {
		NullTreatmentContext _localctx = new NullTreatmentContext(_ctx, getState());
		enterRule(_localctx, 108, RULE_nullTreatment);
		try {
			setState(1566);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case RESPECT:
				_localctx = new RespectNullsContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(1562);
				match(RESPECT);
				setState(1563);
				match(NULLS);
				}
				break;
			case IGNORE:
				_localctx = new IgnoreNullsContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(1564);
				match(IGNORE);
				setState(1565);
				match(NULLS);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class FirstOrLastValueContext extends ParserRuleContext {
		public TerminalNode FIRST_VALUE() { return getToken(Sql.FIRST_VALUE, 0); }
		public TerminalNode LAST_VALUE() { return getToken(Sql.LAST_VALUE, 0); }
		public FirstOrLastValueContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_firstOrLastValue; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitFirstOrLastValue(this);
			else return visitor.visitChildren(this);
		}
	}

	public final FirstOrLastValueContext firstOrLastValue() throws RecognitionException {
		FirstOrLastValueContext _localctx = new FirstOrLastValueContext(_ctx, getState());
		enterRule(_localctx, 110, RULE_firstOrLastValue);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1568);
			_la = _input.LA(1);
			if ( !(_la==FIRST_VALUE || _la==LAST_VALUE) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class NthRowContext extends ParserRuleContext {
		public TerminalNode UNSIGNED_INTEGER() { return getToken(Sql.UNSIGNED_INTEGER, 0); }
		public TerminalNode QUESTION() { return getToken(Sql.QUESTION, 0); }
		public NthRowContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_nthRow; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitNthRow(this);
			else return visitor.visitChildren(this);
		}
	}

	public final NthRowContext nthRow() throws RecognitionException {
		NthRowContext _localctx = new NthRowContext(_ctx, getState());
		enterRule(_localctx, 112, RULE_nthRow);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1570);
			_la = _input.LA(1);
			if ( !(_la==UNSIGNED_INTEGER || _la==QUESTION) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class FromFirstOrLastContext extends ParserRuleContext {
		public FromFirstOrLastContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_fromFirstOrLast; }
	 
		public FromFirstOrLastContext() { }
		public void copyFrom(FromFirstOrLastContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class FromLastContext extends FromFirstOrLastContext {
		public TerminalNode FROM() { return getToken(Sql.FROM, 0); }
		public TerminalNode LAST() { return getToken(Sql.LAST, 0); }
		public FromLastContext(FromFirstOrLastContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitFromLast(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class FromFirstContext extends FromFirstOrLastContext {
		public TerminalNode FROM() { return getToken(Sql.FROM, 0); }
		public TerminalNode FIRST() { return getToken(Sql.FIRST, 0); }
		public FromFirstContext(FromFirstOrLastContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitFromFirst(this);
			else return visitor.visitChildren(this);
		}
	}

	public final FromFirstOrLastContext fromFirstOrLast() throws RecognitionException {
		FromFirstOrLastContext _localctx = new FromFirstOrLastContext(_ctx, getState());
		enterRule(_localctx, 114, RULE_fromFirstOrLast);
		try {
			setState(1576);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,130,_ctx) ) {
			case 1:
				_localctx = new FromFirstContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(1572);
				match(FROM);
				setState(1573);
				match(FIRST);
				}
				break;
			case 2:
				_localctx = new FromLastContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(1574);
				match(FROM);
				setState(1575);
				match(LAST);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WindowNameOrSpecificationContext extends ParserRuleContext {
		public WindowNameContext windowName() {
			return getRuleContext(WindowNameContext.class,0);
		}
		public WindowSpecificationContext windowSpecification() {
			return getRuleContext(WindowSpecificationContext.class,0);
		}
		public WindowNameOrSpecificationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_windowNameOrSpecification; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWindowNameOrSpecification(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WindowNameOrSpecificationContext windowNameOrSpecification() throws RecognitionException {
		WindowNameOrSpecificationContext _localctx = new WindowNameOrSpecificationContext(_ctx, getState());
		enterRule(_localctx, 116, RULE_windowNameOrSpecification);
		try {
			setState(1580);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case AGE:
			case AVG:
			case BASIS:
			case BOOL_AND:
			case BOOL_OR:
			case CARDINALITY:
			case COMMITTED:
			case COUNT:
			case DELETE:
			case END:
			case ERASE:
			case EVERY:
			case INSERT:
			case LATEST:
			case MAX:
			case MIN:
			case ROLE:
			case SELECT:
			case SETTING:
			case START:
			case STDDEV_POP:
			case STDDEV_SAMP:
			case SUBMITTED:
			case SUM:
			case SYSTEM_TIME:
			case TIMEZONE:
			case UNCOMMITTED:
			case UPDATE:
			case VALID_TIME:
			case VAR_POP:
			case VAR_SAMP:
			case VERSION:
			case REGULAR_IDENTIFIER:
			case DELIMITED_IDENTIFIER:
				enterOuterAlt(_localctx, 1);
				{
				setState(1578);
				windowName();
				}
				break;
			case LPAREN:
				enterOuterAlt(_localctx, 2);
				{
				setState(1579);
				windowSpecification();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class NestedWindowFunctionContext extends ParserRuleContext {
		public NestedWindowFunctionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_nestedWindowFunction; }
	 
		public NestedWindowFunctionContext() { }
		public void copyFrom(NestedWindowFunctionContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ValueOfExprAtRowContext extends NestedWindowFunctionContext {
		public TerminalNode VALUE_OF() { return getToken(Sql.VALUE_OF, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode AT() { return getToken(Sql.AT, 0); }
		public RowMarkerExpressionContext rowMarkerExpression() {
			return getRuleContext(RowMarkerExpressionContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public TerminalNode COMMA() { return getToken(Sql.COMMA, 0); }
		public ValueOfDefaultValueContext valueOfDefaultValue() {
			return getRuleContext(ValueOfDefaultValueContext.class,0);
		}
		public ValueOfExprAtRowContext(NestedWindowFunctionContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitValueOfExprAtRow(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class NestedRowNumberFunctionContext extends NestedWindowFunctionContext {
		public TerminalNode ROW_NUMBER() { return getToken(Sql.ROW_NUMBER, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public RowMarkerContext rowMarker() {
			return getRuleContext(RowMarkerContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public NestedRowNumberFunctionContext(NestedWindowFunctionContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitNestedRowNumberFunction(this);
			else return visitor.visitChildren(this);
		}
	}

	public final NestedWindowFunctionContext nestedWindowFunction() throws RecognitionException {
		NestedWindowFunctionContext _localctx = new NestedWindowFunctionContext(_ctx, getState());
		enterRule(_localctx, 118, RULE_nestedWindowFunction);
		int _la;
		try {
			setState(1598);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case ROW_NUMBER:
				_localctx = new NestedRowNumberFunctionContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(1582);
				match(ROW_NUMBER);
				setState(1583);
				match(LPAREN);
				setState(1584);
				rowMarker();
				setState(1585);
				match(RPAREN);
				}
				break;
			case VALUE_OF:
				_localctx = new ValueOfExprAtRowContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(1587);
				match(VALUE_OF);
				setState(1588);
				match(LPAREN);
				setState(1589);
				expr(0);
				setState(1590);
				match(AT);
				setState(1591);
				rowMarkerExpression();
				setState(1594);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==COMMA) {
					{
					setState(1592);
					match(COMMA);
					setState(1593);
					valueOfDefaultValue();
					}
				}

				setState(1596);
				match(RPAREN);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class RowMarkerContext extends ParserRuleContext {
		public TerminalNode BEGIN_PARTITION() { return getToken(Sql.BEGIN_PARTITION, 0); }
		public TerminalNode BEGIN_FRAME() { return getToken(Sql.BEGIN_FRAME, 0); }
		public TerminalNode CURRENT_ROW() { return getToken(Sql.CURRENT_ROW, 0); }
		public TerminalNode FRAME_ROW() { return getToken(Sql.FRAME_ROW, 0); }
		public TerminalNode END_FRAME() { return getToken(Sql.END_FRAME, 0); }
		public TerminalNode END_PARTITION() { return getToken(Sql.END_PARTITION, 0); }
		public RowMarkerContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_rowMarker; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitRowMarker(this);
			else return visitor.visitChildren(this);
		}
	}

	public final RowMarkerContext rowMarker() throws RecognitionException {
		RowMarkerContext _localctx = new RowMarkerContext(_ctx, getState());
		enterRule(_localctx, 120, RULE_rowMarker);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1600);
			_la = _input.LA(1);
			if ( !(((((_la - 63)) & ~0x3f) == 0 && ((1L << (_la - 63)) & 27021599911706627L) != 0) || _la==FRAME_ROW) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class RowMarkerExpressionContext extends ParserRuleContext {
		public RowMarkerContext rowMarker() {
			return getRuleContext(RowMarkerContext.class,0);
		}
		public RowMarkerDeltaContext rowMarkerDelta() {
			return getRuleContext(RowMarkerDeltaContext.class,0);
		}
		public RowMarkerExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_rowMarkerExpression; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitRowMarkerExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final RowMarkerExpressionContext rowMarkerExpression() throws RecognitionException {
		RowMarkerExpressionContext _localctx = new RowMarkerExpressionContext(_ctx, getState());
		enterRule(_localctx, 122, RULE_rowMarkerExpression);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1602);
			rowMarker();
			setState(1604);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==PLUS || _la==MINUS) {
				{
				setState(1603);
				rowMarkerDelta();
				}
			}

			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class RowMarkerDeltaContext extends ParserRuleContext {
		public TerminalNode PLUS() { return getToken(Sql.PLUS, 0); }
		public RowMarkerOffsetContext rowMarkerOffset() {
			return getRuleContext(RowMarkerOffsetContext.class,0);
		}
		public TerminalNode MINUS() { return getToken(Sql.MINUS, 0); }
		public RowMarkerDeltaContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_rowMarkerDelta; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitRowMarkerDelta(this);
			else return visitor.visitChildren(this);
		}
	}

	public final RowMarkerDeltaContext rowMarkerDelta() throws RecognitionException {
		RowMarkerDeltaContext _localctx = new RowMarkerDeltaContext(_ctx, getState());
		enterRule(_localctx, 124, RULE_rowMarkerDelta);
		try {
			setState(1610);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case PLUS:
				enterOuterAlt(_localctx, 1);
				{
				setState(1606);
				match(PLUS);
				setState(1607);
				rowMarkerOffset();
				}
				break;
			case MINUS:
				enterOuterAlt(_localctx, 2);
				{
				setState(1608);
				match(MINUS);
				setState(1609);
				rowMarkerOffset();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class RowMarkerOffsetContext extends ParserRuleContext {
		public TerminalNode UNSIGNED_INTEGER() { return getToken(Sql.UNSIGNED_INTEGER, 0); }
		public TerminalNode QUESTION() { return getToken(Sql.QUESTION, 0); }
		public RowMarkerOffsetContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_rowMarkerOffset; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitRowMarkerOffset(this);
			else return visitor.visitChildren(this);
		}
	}

	public final RowMarkerOffsetContext rowMarkerOffset() throws RecognitionException {
		RowMarkerOffsetContext _localctx = new RowMarkerOffsetContext(_ctx, getState());
		enterRule(_localctx, 126, RULE_rowMarkerOffset);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1612);
			_la = _input.LA(1);
			if ( !(_la==UNSIGNED_INTEGER || _la==QUESTION) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ValueOfDefaultValueContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public ValueOfDefaultValueContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_valueOfDefaultValue; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitValueOfDefaultValue(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ValueOfDefaultValueContext valueOfDefaultValue() throws RecognitionException {
		ValueOfDefaultValueContext _localctx = new ValueOfDefaultValueContext(_ctx, getState());
		enterRule(_localctx, 128, RULE_valueOfDefaultValue);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1614);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class SimpleWhenClauseContext extends ParserRuleContext {
		public TerminalNode WHEN() { return getToken(Sql.WHEN, 0); }
		public WhenOperandListContext whenOperandList() {
			return getRuleContext(WhenOperandListContext.class,0);
		}
		public TerminalNode THEN() { return getToken(Sql.THEN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public SimpleWhenClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_simpleWhenClause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSimpleWhenClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SimpleWhenClauseContext simpleWhenClause() throws RecognitionException {
		SimpleWhenClauseContext _localctx = new SimpleWhenClauseContext(_ctx, getState());
		enterRule(_localctx, 130, RULE_simpleWhenClause);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1616);
			match(WHEN);
			setState(1617);
			whenOperandList();
			setState(1618);
			match(THEN);
			setState(1619);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class SearchedWhenClauseContext extends ParserRuleContext {
		public TerminalNode WHEN() { return getToken(Sql.WHEN, 0); }
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public TerminalNode THEN() { return getToken(Sql.THEN, 0); }
		public SearchedWhenClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_searchedWhenClause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSearchedWhenClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SearchedWhenClauseContext searchedWhenClause() throws RecognitionException {
		SearchedWhenClauseContext _localctx = new SearchedWhenClauseContext(_ctx, getState());
		enterRule(_localctx, 132, RULE_searchedWhenClause);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1621);
			match(WHEN);
			setState(1622);
			expr(0);
			setState(1623);
			match(THEN);
			setState(1624);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ElseClauseContext extends ParserRuleContext {
		public TerminalNode ELSE() { return getToken(Sql.ELSE, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public ElseClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_elseClause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitElseClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ElseClauseContext elseClause() throws RecognitionException {
		ElseClauseContext _localctx = new ElseClauseContext(_ctx, getState());
		enterRule(_localctx, 134, RULE_elseClause);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1626);
			match(ELSE);
			setState(1627);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WhenOperandListContext extends ParserRuleContext {
		public List whenOperand() {
			return getRuleContexts(WhenOperandContext.class);
		}
		public WhenOperandContext whenOperand(int i) {
			return getRuleContext(WhenOperandContext.class,i);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public WhenOperandListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_whenOperandList; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWhenOperandList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WhenOperandListContext whenOperandList() throws RecognitionException {
		WhenOperandListContext _localctx = new WhenOperandListContext(_ctx, getState());
		enterRule(_localctx, 136, RULE_whenOperandList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1629);
			whenOperand();
			setState(1634);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(1630);
				match(COMMA);
				setState(1631);
				whenOperand();
				}
				}
				setState(1636);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WhenOperandContext extends ParserRuleContext {
		public PredicatePart2Context predicatePart2() {
			return getRuleContext(PredicatePart2Context.class,0);
		}
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public WhenOperandContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_whenOperand; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWhenOperand(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WhenOperandContext whenOperand() throws RecognitionException {
		WhenOperandContext _localctx = new WhenOperandContext(_ctx, getState());
		enterRule(_localctx, 138, RULE_whenOperand);
		try {
			setState(1639);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,137,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1637);
				predicatePart2();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1638);
				expr(0);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ExtractFieldContext extends ParserRuleContext {
		public PrimaryDatetimeFieldContext primaryDatetimeField() {
			return getRuleContext(PrimaryDatetimeFieldContext.class,0);
		}
		public TimeZoneFieldContext timeZoneField() {
			return getRuleContext(TimeZoneFieldContext.class,0);
		}
		public ExtractFieldContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_extractField; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitExtractField(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ExtractFieldContext extractField() throws RecognitionException {
		ExtractFieldContext _localctx = new ExtractFieldContext(_ctx, getState());
		enterRule(_localctx, 140, RULE_extractField);
		try {
			setState(1643);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case DAY:
			case HOUR:
			case MINUTE:
			case MONTH:
			case SECOND:
			case YEAR:
				enterOuterAlt(_localctx, 1);
				{
				setState(1641);
				primaryDatetimeField();
				}
				break;
			case TIMEZONE_HOUR:
			case TIMEZONE_MINUTE:
				enterOuterAlt(_localctx, 2);
				{
				setState(1642);
				timeZoneField();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class PrimaryDatetimeFieldContext extends ParserRuleContext {
		public NonSecondPrimaryDatetimeFieldContext nonSecondPrimaryDatetimeField() {
			return getRuleContext(NonSecondPrimaryDatetimeFieldContext.class,0);
		}
		public TerminalNode SECOND() { return getToken(Sql.SECOND, 0); }
		public PrimaryDatetimeFieldContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_primaryDatetimeField; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitPrimaryDatetimeField(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PrimaryDatetimeFieldContext primaryDatetimeField() throws RecognitionException {
		PrimaryDatetimeFieldContext _localctx = new PrimaryDatetimeFieldContext(_ctx, getState());
		enterRule(_localctx, 142, RULE_primaryDatetimeField);
		try {
			setState(1647);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case DAY:
			case HOUR:
			case MINUTE:
			case MONTH:
			case YEAR:
				enterOuterAlt(_localctx, 1);
				{
				setState(1645);
				nonSecondPrimaryDatetimeField();
				}
				break;
			case SECOND:
				enterOuterAlt(_localctx, 2);
				{
				setState(1646);
				match(SECOND);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class TimeZoneFieldContext extends ParserRuleContext {
		public TerminalNode TIMEZONE_HOUR() { return getToken(Sql.TIMEZONE_HOUR, 0); }
		public TerminalNode TIMEZONE_MINUTE() { return getToken(Sql.TIMEZONE_MINUTE, 0); }
		public TimeZoneFieldContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_timeZoneField; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitTimeZoneField(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TimeZoneFieldContext timeZoneField() throws RecognitionException {
		TimeZoneFieldContext _localctx = new TimeZoneFieldContext(_ctx, getState());
		enterRule(_localctx, 144, RULE_timeZoneField);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1649);
			_la = _input.LA(1);
			if ( !(_la==TIMEZONE_HOUR || _la==TIMEZONE_MINUTE) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ExtractSourceContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public ExtractSourceContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_extractSource; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitExtractSource(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ExtractSourceContext extractSource() throws RecognitionException {
		ExtractSourceContext _localctx = new ExtractSourceContext(_ctx, getState());
		enterRule(_localctx, 146, RULE_extractSource);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1651);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class TrimSourceContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TrimSourceContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_trimSource; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitTrimSource(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TrimSourceContext trimSource() throws RecognitionException {
		TrimSourceContext _localctx = new TrimSourceContext(_ctx, getState());
		enterRule(_localctx, 148, RULE_trimSource);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1653);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class TrimSpecificationContext extends ParserRuleContext {
		public TerminalNode LEADING() { return getToken(Sql.LEADING, 0); }
		public TerminalNode TRAILING() { return getToken(Sql.TRAILING, 0); }
		public TerminalNode BOTH() { return getToken(Sql.BOTH, 0); }
		public TrimSpecificationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_trimSpecification; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitTrimSpecification(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TrimSpecificationContext trimSpecification() throws RecognitionException {
		TrimSpecificationContext _localctx = new TrimSpecificationContext(_ctx, getState());
		enterRule(_localctx, 150, RULE_trimSpecification);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1655);
			_la = _input.LA(1);
			if ( !(_la==BOTH || _la==LEADING || _la==TRAILING) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class TrimCharacterContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TrimCharacterContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_trimCharacter; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitTrimCharacter(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TrimCharacterContext trimCharacter() throws RecognitionException {
		TrimCharacterContext _localctx = new TrimCharacterContext(_ctx, getState());
		enterRule(_localctx, 152, RULE_trimCharacter);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1657);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class StartPositionContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public StartPositionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_startPosition; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitStartPosition(this);
			else return visitor.visitChildren(this);
		}
	}

	public final StartPositionContext startPosition() throws RecognitionException {
		StartPositionContext _localctx = new StartPositionContext(_ctx, getState());
		enterRule(_localctx, 154, RULE_startPosition);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1659);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class StringLengthContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public StringLengthContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_stringLength; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitStringLength(this);
			else return visitor.visitChildren(this);
		}
	}

	public final StringLengthContext stringLength() throws RecognitionException {
		StringLengthContext _localctx = new StringLengthContext(_ctx, getState());
		enterRule(_localctx, 156, RULE_stringLength);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1661);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class DateTruncPrecisionContext extends ParserRuleContext {
		public TerminalNode MILLENNIUM() { return getToken(Sql.MILLENNIUM, 0); }
		public TerminalNode CENTURY() { return getToken(Sql.CENTURY, 0); }
		public TerminalNode DECADE() { return getToken(Sql.DECADE, 0); }
		public TerminalNode YEAR() { return getToken(Sql.YEAR, 0); }
		public TerminalNode QUARTER() { return getToken(Sql.QUARTER, 0); }
		public TerminalNode MONTH() { return getToken(Sql.MONTH, 0); }
		public TerminalNode WEEK() { return getToken(Sql.WEEK, 0); }
		public TerminalNode DAY() { return getToken(Sql.DAY, 0); }
		public TerminalNode HOUR() { return getToken(Sql.HOUR, 0); }
		public TerminalNode MINUTE() { return getToken(Sql.MINUTE, 0); }
		public TerminalNode SECOND() { return getToken(Sql.SECOND, 0); }
		public TerminalNode MILLISECOND() { return getToken(Sql.MILLISECOND, 0); }
		public TerminalNode MICROSECOND() { return getToken(Sql.MICROSECOND, 0); }
		public TerminalNode NANOSECOND() { return getToken(Sql.NANOSECOND, 0); }
		public DateTruncPrecisionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_dateTruncPrecision; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitDateTruncPrecision(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DateTruncPrecisionContext dateTruncPrecision() throws RecognitionException {
		DateTruncPrecisionContext _localctx = new DateTruncPrecisionContext(_ctx, getState());
		enterRule(_localctx, 158, RULE_dateTruncPrecision);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1663);
			_la = _input.LA(1);
			if ( !(((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & 335544321L) != 0) || ((((_la - 147)) & ~0x3f) == 0 && ((1L << (_la - 147)) & 29549374996481L) != 0) || _la==QUARTER || _la==SECOND || _la==WEEK || _la==YEAR) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class DateTruncSourceContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public DateTruncSourceContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_dateTruncSource; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitDateTruncSource(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DateTruncSourceContext dateTruncSource() throws RecognitionException {
		DateTruncSourceContext _localctx = new DateTruncSourceContext(_ctx, getState());
		enterRule(_localctx, 160, RULE_dateTruncSource);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1665);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class DateTruncTimeZoneContext extends ParserRuleContext {
		public CharacterStringContext characterString() {
			return getRuleContext(CharacterStringContext.class,0);
		}
		public DateTruncTimeZoneContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_dateTruncTimeZone; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitDateTruncTimeZone(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DateTruncTimeZoneContext dateTruncTimeZone() throws RecognitionException {
		DateTruncTimeZoneContext _localctx = new DateTruncTimeZoneContext(_ctx, getState());
		enterRule(_localctx, 162, RULE_dateTruncTimeZone);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1667);
			characterString();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class DateBinSourceContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public DateBinSourceContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_dateBinSource; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitDateBinSource(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DateBinSourceContext dateBinSource() throws RecognitionException {
		DateBinSourceContext _localctx = new DateBinSourceContext(_ctx, getState());
		enterRule(_localctx, 164, RULE_dateBinSource);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1669);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class RangeBinsSourceContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public RangeBinsSourceContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_rangeBinsSource; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitRangeBinsSource(this);
			else return visitor.visitChildren(this);
		}
	}

	public final RangeBinsSourceContext rangeBinsSource() throws RecognitionException {
		RangeBinsSourceContext _localctx = new RangeBinsSourceContext(_ctx, getState());
		enterRule(_localctx, 166, RULE_rangeBinsSource);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1671);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class DateBinOriginContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public DateBinOriginContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_dateBinOrigin; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitDateBinOrigin(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DateBinOriginContext dateBinOrigin() throws RecognitionException {
		DateBinOriginContext _localctx = new DateBinOriginContext(_ctx, getState());
		enterRule(_localctx, 168, RULE_dateBinOrigin);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1673);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ArrayValueConstructorContext extends ParserRuleContext {
		public ArrayValueConstructorContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_arrayValueConstructor; }
	 
		public ArrayValueConstructorContext() { }
		public void copyFrom(ArrayValueConstructorContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ArrayValueConstructorByEnumerationContext extends ArrayValueConstructorContext {
		public TerminalNode LBRACK() { return getToken(Sql.LBRACK, 0); }
		public TerminalNode RBRACK() { return getToken(Sql.RBRACK, 0); }
		public TerminalNode ARRAY() { return getToken(Sql.ARRAY, 0); }
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public ArrayValueConstructorByEnumerationContext(ArrayValueConstructorContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitArrayValueConstructorByEnumeration(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ArrayValueConstructorByQueryContext extends ArrayValueConstructorContext {
		public TerminalNode ARRAY() { return getToken(Sql.ARRAY, 0); }
		public SubqueryContext subquery() {
			return getRuleContext(SubqueryContext.class,0);
		}
		public ArrayValueConstructorByQueryContext(ArrayValueConstructorContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitArrayValueConstructorByQuery(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ArrayValueConstructorContext arrayValueConstructor() throws RecognitionException {
		ArrayValueConstructorContext _localctx = new ArrayValueConstructorContext(_ctx, getState());
		enterRule(_localctx, 170, RULE_arrayValueConstructor);
		int _la;
		try {
			setState(1692);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,143,_ctx) ) {
			case 1:
				_localctx = new ArrayValueConstructorByEnumerationContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(1676);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==ARRAY) {
					{
					setState(1675);
					match(ARRAY);
					}
				}

				setState(1678);
				match(LBRACK);
				setState(1687);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 4075256285523264496L) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & 5703988182742036979L) != 0) || ((((_la - 133)) & ~0x3f) == 0 && ((1L << (_la - 133)) & 3551075298076794049L) != 0) || ((((_la - 198)) & ~0x3f) == 0 && ((1L << (_la - 198)) & -8493220717618264769L) != 0) || ((((_la - 263)) & ~0x3f) == 0 && ((1L << (_la - 263)) & 4036260756444010451L) != 0)) {
					{
					setState(1679);
					expr(0);
					setState(1684);
					_errHandler.sync(this);
					_la = _input.LA(1);
					while (_la==COMMA) {
						{
						{
						setState(1680);
						match(COMMA);
						setState(1681);
						expr(0);
						}
						}
						setState(1686);
						_errHandler.sync(this);
						_la = _input.LA(1);
					}
					}
				}

				setState(1689);
				match(RBRACK);
				}
				break;
			case 2:
				_localctx = new ArrayValueConstructorByQueryContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(1690);
				match(ARRAY);
				setState(1691);
				subquery();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class TrigonometricFunctionNameContext extends ParserRuleContext {
		public TerminalNode SIN() { return getToken(Sql.SIN, 0); }
		public TerminalNode COS() { return getToken(Sql.COS, 0); }
		public TerminalNode TAN() { return getToken(Sql.TAN, 0); }
		public TerminalNode SINH() { return getToken(Sql.SINH, 0); }
		public TerminalNode COSH() { return getToken(Sql.COSH, 0); }
		public TerminalNode TANH() { return getToken(Sql.TANH, 0); }
		public TerminalNode ASIN() { return getToken(Sql.ASIN, 0); }
		public TerminalNode ACOS() { return getToken(Sql.ACOS, 0); }
		public TerminalNode ATAN() { return getToken(Sql.ATAN, 0); }
		public TrigonometricFunctionNameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_trigonometricFunctionName; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitTrigonometricFunctionName(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TrigonometricFunctionNameContext trigonometricFunctionName() throws RecognitionException {
		TrigonometricFunctionNameContext _localctx = new TrigonometricFunctionNameContext(_ctx, getState());
		enterRule(_localctx, 172, RULE_trigonometricFunctionName);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1694);
			_la = _input.LA(1);
			if ( !(((((_la - 44)) & ~0x3f) == 0 && ((1L << (_la - 44)) & 13194139568129L) != 0) || ((((_la - 263)) & ~0x3f) == 0 && ((1L << (_la - 263)) & 98307L) != 0)) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class GeneralLogarithmBaseContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public GeneralLogarithmBaseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_generalLogarithmBase; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitGeneralLogarithmBase(this);
			else return visitor.visitChildren(this);
		}
	}

	public final GeneralLogarithmBaseContext generalLogarithmBase() throws RecognitionException {
		GeneralLogarithmBaseContext _localctx = new GeneralLogarithmBaseContext(_ctx, getState());
		enterRule(_localctx, 174, RULE_generalLogarithmBase);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1696);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class GeneralLogarithmArgumentContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public GeneralLogarithmArgumentContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_generalLogarithmArgument; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitGeneralLogarithmArgument(this);
			else return visitor.visitChildren(this);
		}
	}

	public final GeneralLogarithmArgumentContext generalLogarithmArgument() throws RecognitionException {
		GeneralLogarithmArgumentContext _localctx = new GeneralLogarithmArgumentContext(_ctx, getState());
		enterRule(_localctx, 176, RULE_generalLogarithmArgument);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1698);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class RowValueConstructorContext extends ParserRuleContext {
		public RowValueConstructorContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_rowValueConstructor; }
	 
		public RowValueConstructorContext() { }
		public void copyFrom(RowValueConstructorContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class SingleExprRowConstructorContext extends RowValueConstructorContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public SingleExprRowConstructorContext(RowValueConstructorContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSingleExprRowConstructor(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class MultiExprRowConstructorContext extends RowValueConstructorContext {
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public TerminalNode ROW() { return getToken(Sql.ROW, 0); }
		public MultiExprRowConstructorContext(RowValueConstructorContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitMultiExprRowConstructor(this);
			else return visitor.visitChildren(this);
		}
	}

	public final RowValueConstructorContext rowValueConstructor() throws RecognitionException {
		RowValueConstructorContext _localctx = new RowValueConstructorContext(_ctx, getState());
		enterRule(_localctx, 178, RULE_rowValueConstructor);
		int _la;
		try {
			setState(1725);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,148,_ctx) ) {
			case 1:
				_localctx = new SingleExprRowConstructorContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(1700);
				expr(0);
				}
				break;
			case 2:
				_localctx = new MultiExprRowConstructorContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(1701);
				match(LPAREN);
				setState(1709);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 4075256285523264496L) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & 5703988182742036979L) != 0) || ((((_la - 133)) & ~0x3f) == 0 && ((1L << (_la - 133)) & 3551075298076794049L) != 0) || ((((_la - 198)) & ~0x3f) == 0 && ((1L << (_la - 198)) & -8493220717618264769L) != 0) || ((((_la - 263)) & ~0x3f) == 0 && ((1L << (_la - 263)) & 4036260756444010451L) != 0)) {
					{
					setState(1702);
					expr(0);
					setState(1705); 
					_errHandler.sync(this);
					_la = _input.LA(1);
					do {
						{
						{
						setState(1703);
						match(COMMA);
						setState(1704);
						expr(0);
						}
						}
						setState(1707); 
						_errHandler.sync(this);
						_la = _input.LA(1);
					} while ( _la==COMMA );
					}
				}

				setState(1711);
				match(RPAREN);
				}
				break;
			case 3:
				_localctx = new MultiExprRowConstructorContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(1712);
				match(ROW);
				setState(1713);
				match(LPAREN);
				setState(1722);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 4075256285523264496L) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & 5703988182742036979L) != 0) || ((((_la - 133)) & ~0x3f) == 0 && ((1L << (_la - 133)) & 3551075298076794049L) != 0) || ((((_la - 198)) & ~0x3f) == 0 && ((1L << (_la - 198)) & -8493220717618264769L) != 0) || ((((_la - 263)) & ~0x3f) == 0 && ((1L << (_la - 263)) & 4036260756444010451L) != 0)) {
					{
					setState(1714);
					expr(0);
					setState(1719);
					_errHandler.sync(this);
					_la = _input.LA(1);
					while (_la==COMMA) {
						{
						{
						setState(1715);
						match(COMMA);
						setState(1716);
						expr(0);
						}
						}
						setState(1721);
						_errHandler.sync(this);
						_la = _input.LA(1);
					}
					}
				}

				setState(1724);
				match(RPAREN);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class RowValueListContext extends ParserRuleContext {
		public List rowValueConstructor() {
			return getRuleContexts(RowValueConstructorContext.class);
		}
		public RowValueConstructorContext rowValueConstructor(int i) {
			return getRuleContext(RowValueConstructorContext.class,i);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public RowValueListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_rowValueList; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitRowValueList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final RowValueListContext rowValueList() throws RecognitionException {
		RowValueListContext _localctx = new RowValueListContext(_ctx, getState());
		enterRule(_localctx, 180, RULE_rowValueList);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(1727);
			rowValueConstructor();
			setState(1732);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,149,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(1728);
					match(COMMA);
					setState(1729);
					rowValueConstructor();
					}
					} 
				}
				setState(1734);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,149,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class TableValueConstructorContext extends ParserRuleContext {
		public TerminalNode VALUES() { return getToken(Sql.VALUES, 0); }
		public RowValueListContext rowValueList() {
			return getRuleContext(RowValueListContext.class,0);
		}
		public TableValueConstructorContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_tableValueConstructor; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitTableValueConstructor(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TableValueConstructorContext tableValueConstructor() throws RecognitionException {
		TableValueConstructorContext _localctx = new TableValueConstructorContext(_ctx, getState());
		enterRule(_localctx, 182, RULE_tableValueConstructor);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1735);
			match(VALUES);
			setState(1736);
			rowValueList();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class RecordValueConstructorContext extends ParserRuleContext {
		public RecordValueConstructorContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_recordValueConstructor; }
	 
		public RecordValueConstructorContext() { }
		public void copyFrom(RecordValueConstructorContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ObjectRecordContext extends RecordValueConstructorContext {
		public ObjectConstructorContext objectConstructor() {
			return getRuleContext(ObjectConstructorContext.class,0);
		}
		public ObjectRecordContext(RecordValueConstructorContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitObjectRecord(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ParameterRecordContext extends RecordValueConstructorContext {
		public ParameterSpecificationContext parameterSpecification() {
			return getRuleContext(ParameterSpecificationContext.class,0);
		}
		public ParameterRecordContext(RecordValueConstructorContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitParameterRecord(this);
			else return visitor.visitChildren(this);
		}
	}

	public final RecordValueConstructorContext recordValueConstructor() throws RecognitionException {
		RecordValueConstructorContext _localctx = new RecordValueConstructorContext(_ctx, getState());
		enterRule(_localctx, 184, RULE_recordValueConstructor);
		try {
			setState(1740);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case POSTGRES_PARAMETER_SPECIFICATION:
			case QUESTION:
				_localctx = new ParameterRecordContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(1738);
				parameterSpecification();
				}
				break;
			case LBRACE:
			case OBJECT:
			case RECORD:
				_localctx = new ObjectRecordContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(1739);
				objectConstructor();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class RecordsValueListContext extends ParserRuleContext {
		public List recordValueConstructor() {
			return getRuleContexts(RecordValueConstructorContext.class);
		}
		public RecordValueConstructorContext recordValueConstructor(int i) {
			return getRuleContext(RecordValueConstructorContext.class,i);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public RecordsValueListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_recordsValueList; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitRecordsValueList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final RecordsValueListContext recordsValueList() throws RecognitionException {
		RecordsValueListContext _localctx = new RecordsValueListContext(_ctx, getState());
		enterRule(_localctx, 186, RULE_recordsValueList);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(1742);
			recordValueConstructor();
			setState(1747);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,151,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(1743);
					match(COMMA);
					setState(1744);
					recordValueConstructor();
					}
					} 
				}
				setState(1749);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,151,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class RecordsValueConstructorContext extends ParserRuleContext {
		public TerminalNode RECORDS() { return getToken(Sql.RECORDS, 0); }
		public RecordsValueListContext recordsValueList() {
			return getRuleContext(RecordsValueListContext.class,0);
		}
		public RecordsValueConstructorContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_recordsValueConstructor; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitRecordsValueConstructor(this);
			else return visitor.visitChildren(this);
		}
	}

	public final RecordsValueConstructorContext recordsValueConstructor() throws RecognitionException {
		RecordsValueConstructorContext _localctx = new RecordsValueConstructorContext(_ctx, getState());
		enterRule(_localctx, 188, RULE_recordsValueConstructor);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1750);
			match(RECORDS);
			setState(1751);
			recordsValueList();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class FromClauseContext extends ParserRuleContext {
		public TerminalNode FROM() { return getToken(Sql.FROM, 0); }
		public List tableReference() {
			return getRuleContexts(TableReferenceContext.class);
		}
		public TableReferenceContext tableReference(int i) {
			return getRuleContext(TableReferenceContext.class,i);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public FromClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_fromClause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitFromClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final FromClauseContext fromClause() throws RecognitionException {
		FromClauseContext _localctx = new FromClauseContext(_ctx, getState());
		enterRule(_localctx, 190, RULE_fromClause);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(1753);
			match(FROM);
			setState(1754);
			tableReference(0);
			setState(1759);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,152,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(1755);
					match(COMMA);
					setState(1756);
					tableReference(0);
					}
					} 
				}
				setState(1761);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,152,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class TableReferenceContext extends ParserRuleContext {
		public TableReferenceContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_tableReference; }
	 
		public TableReferenceContext() { }
		public void copyFrom(TableReferenceContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class LateralDerivedTableContext extends TableReferenceContext {
		public TerminalNode LATERAL() { return getToken(Sql.LATERAL, 0); }
		public SubqueryContext subquery() {
			return getRuleContext(SubqueryContext.class,0);
		}
		public TableAliasContext tableAlias() {
			return getRuleContext(TableAliasContext.class,0);
		}
		public TableProjectionContext tableProjection() {
			return getRuleContext(TableProjectionContext.class,0);
		}
		public LateralDerivedTableContext(TableReferenceContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitLateralDerivedTable(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class DerivedTableContext extends TableReferenceContext {
		public SubqueryContext subquery() {
			return getRuleContext(SubqueryContext.class,0);
		}
		public TableAliasContext tableAlias() {
			return getRuleContext(TableAliasContext.class,0);
		}
		public TableProjectionContext tableProjection() {
			return getRuleContext(TableProjectionContext.class,0);
		}
		public DerivedTableContext(TableReferenceContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitDerivedTable(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class GenerateSeriesTableContext extends TableReferenceContext {
		public GenerateSeriesContext generateSeries() {
			return getRuleContext(GenerateSeriesContext.class,0);
		}
		public TableAliasContext tableAlias() {
			return getRuleContext(TableAliasContext.class,0);
		}
		public TableProjectionContext tableProjection() {
			return getRuleContext(TableProjectionContext.class,0);
		}
		public GenerateSeriesTableContext(TableReferenceContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitGenerateSeriesTable(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ArrowTableContext extends TableReferenceContext {
		public TerminalNode ARROW_TABLE() { return getToken(Sql.ARROW_TABLE, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public CharacterStringContext characterString() {
			return getRuleContext(CharacterStringContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public TableAliasContext tableAlias() {
			return getRuleContext(TableAliasContext.class,0);
		}
		public TableProjectionContext tableProjection() {
			return getRuleContext(TableProjectionContext.class,0);
		}
		public ArrowTableContext(TableReferenceContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitArrowTable(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class WrappedTableReferenceContext extends TableReferenceContext {
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public TableReferenceContext tableReference() {
			return getRuleContext(TableReferenceContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public WrappedTableReferenceContext(TableReferenceContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWrappedTableReference(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class BaseTableContext extends TableReferenceContext {
		public TableOrQueryNameContext tableOrQueryName() {
			return getRuleContext(TableOrQueryNameContext.class,0);
		}
		public List querySystemTimePeriodSpecification() {
			return getRuleContexts(QuerySystemTimePeriodSpecificationContext.class);
		}
		public QuerySystemTimePeriodSpecificationContext querySystemTimePeriodSpecification(int i) {
			return getRuleContext(QuerySystemTimePeriodSpecificationContext.class,i);
		}
		public List queryValidTimePeriodSpecification() {
			return getRuleContexts(QueryValidTimePeriodSpecificationContext.class);
		}
		public QueryValidTimePeriodSpecificationContext queryValidTimePeriodSpecification(int i) {
			return getRuleContext(QueryValidTimePeriodSpecificationContext.class,i);
		}
		public TableAliasContext tableAlias() {
			return getRuleContext(TableAliasContext.class,0);
		}
		public TableProjectionContext tableProjection() {
			return getRuleContext(TableProjectionContext.class,0);
		}
		public BaseTableContext(TableReferenceContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitBaseTable(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class CrossJoinTableContext extends TableReferenceContext {
		public List tableReference() {
			return getRuleContexts(TableReferenceContext.class);
		}
		public TableReferenceContext tableReference(int i) {
			return getRuleContext(TableReferenceContext.class,i);
		}
		public TerminalNode CROSS() { return getToken(Sql.CROSS, 0); }
		public TerminalNode JOIN() { return getToken(Sql.JOIN, 0); }
		public CrossJoinTableContext(TableReferenceContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitCrossJoinTable(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class CollectionDerivedTableContext extends TableReferenceContext {
		public TerminalNode UNNEST() { return getToken(Sql.UNNEST, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public TableAliasContext tableAlias() {
			return getRuleContext(TableAliasContext.class,0);
		}
		public WithOrdinalityContext withOrdinality() {
			return getRuleContext(WithOrdinalityContext.class,0);
		}
		public TableProjectionContext tableProjection() {
			return getRuleContext(TableProjectionContext.class,0);
		}
		public CollectionDerivedTableContext(TableReferenceContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitCollectionDerivedTable(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class NaturalJoinTableContext extends TableReferenceContext {
		public List tableReference() {
			return getRuleContexts(TableReferenceContext.class);
		}
		public TableReferenceContext tableReference(int i) {
			return getRuleContext(TableReferenceContext.class,i);
		}
		public TerminalNode NATURAL() { return getToken(Sql.NATURAL, 0); }
		public TerminalNode JOIN() { return getToken(Sql.JOIN, 0); }
		public JoinTypeContext joinType() {
			return getRuleContext(JoinTypeContext.class,0);
		}
		public NaturalJoinTableContext(TableReferenceContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitNaturalJoinTable(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class JoinTableContext extends TableReferenceContext {
		public List tableReference() {
			return getRuleContexts(TableReferenceContext.class);
		}
		public TableReferenceContext tableReference(int i) {
			return getRuleContext(TableReferenceContext.class,i);
		}
		public TerminalNode JOIN() { return getToken(Sql.JOIN, 0); }
		public JoinSpecificationContext joinSpecification() {
			return getRuleContext(JoinSpecificationContext.class,0);
		}
		public JoinTypeContext joinType() {
			return getRuleContext(JoinTypeContext.class,0);
		}
		public JoinTableContext(TableReferenceContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitJoinTable(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TableReferenceContext tableReference() throws RecognitionException {
		return tableReference(0);
	}

	private TableReferenceContext tableReference(int _p) throws RecognitionException {
		ParserRuleContext _parentctx = _ctx;
		int _parentState = getState();
		TableReferenceContext _localctx = new TableReferenceContext(_ctx, _parentState);
		TableReferenceContext _prevctx = _localctx;
		int _startState = 192;
		enterRecursionRule(_localctx, 192, RULE_tableReference, _p);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(1815);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,162,_ctx) ) {
			case 1:
				{
				_localctx = new BaseTableContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;

				setState(1763);
				tableOrQueryName();
				setState(1768);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,154,_ctx);
				while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
					if ( _alt==1 ) {
						{
						setState(1766);
						_errHandler.sync(this);
						switch ( getInterpreter().adaptivePredict(_input,153,_ctx) ) {
						case 1:
							{
							setState(1764);
							querySystemTimePeriodSpecification();
							}
							break;
						case 2:
							{
							setState(1765);
							queryValidTimePeriodSpecification();
							}
							break;
						}
						} 
					}
					setState(1770);
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,154,_ctx);
				}
				setState(1772);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,155,_ctx) ) {
				case 1:
					{
					setState(1771);
					tableAlias();
					}
					break;
				}
				setState(1775);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,156,_ctx) ) {
				case 1:
					{
					setState(1774);
					tableProjection();
					}
					break;
				}
				}
				break;
			case 2:
				{
				_localctx = new DerivedTableContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1777);
				subquery();
				setState(1778);
				tableAlias();
				setState(1780);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,157,_ctx) ) {
				case 1:
					{
					setState(1779);
					tableProjection();
					}
					break;
				}
				}
				break;
			case 3:
				{
				_localctx = new LateralDerivedTableContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1782);
				match(LATERAL);
				setState(1783);
				subquery();
				setState(1784);
				tableAlias();
				setState(1786);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,158,_ctx) ) {
				case 1:
					{
					setState(1785);
					tableProjection();
					}
					break;
				}
				}
				break;
			case 4:
				{
				_localctx = new CollectionDerivedTableContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1788);
				match(UNNEST);
				setState(1789);
				match(LPAREN);
				setState(1790);
				expr(0);
				setState(1791);
				match(RPAREN);
				setState(1793);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==WITH) {
					{
					setState(1792);
					withOrdinality();
					}
				}

				setState(1795);
				tableAlias();
				setState(1797);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,160,_ctx) ) {
				case 1:
					{
					setState(1796);
					tableProjection();
					}
					break;
				}
				}
				break;
			case 5:
				{
				_localctx = new GenerateSeriesTableContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1799);
				generateSeries();
				setState(1800);
				tableAlias();
				setState(1802);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,161,_ctx) ) {
				case 1:
					{
					setState(1801);
					tableProjection();
					}
					break;
				}
				}
				break;
			case 6:
				{
				_localctx = new ArrowTableContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1804);
				match(ARROW_TABLE);
				setState(1805);
				match(LPAREN);
				setState(1806);
				characterString();
				setState(1807);
				match(RPAREN);
				setState(1808);
				tableAlias();
				setState(1809);
				tableProjection();
				}
				break;
			case 7:
				{
				_localctx = new WrappedTableReferenceContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1811);
				match(LPAREN);
				setState(1812);
				tableReference(0);
				setState(1813);
				match(RPAREN);
				}
				break;
			}
			_ctx.stop = _input.LT(-1);
			setState(1838);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,166,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					if ( _parseListeners!=null ) triggerExitRuleEvent();
					_prevctx = _localctx;
					{
					setState(1836);
					_errHandler.sync(this);
					switch ( getInterpreter().adaptivePredict(_input,165,_ctx) ) {
					case 1:
						{
						_localctx = new CrossJoinTableContext(new TableReferenceContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_tableReference);
						setState(1817);
						if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)");
						setState(1818);
						match(CROSS);
						setState(1819);
						match(JOIN);
						setState(1820);
						tableReference(9);
						}
						break;
					case 2:
						{
						_localctx = new NaturalJoinTableContext(new TableReferenceContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_tableReference);
						setState(1821);
						if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
						setState(1822);
						match(NATURAL);
						setState(1824);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (((((_la - 138)) & ~0x3f) == 0 && ((1L << (_la - 138)) & 2147491841L) != 0) || _la==RIGHT) {
							{
							setState(1823);
							joinType();
							}
						}

						setState(1826);
						match(JOIN);
						setState(1827);
						tableReference(8);
						}
						break;
					case 3:
						{
						_localctx = new JoinTableContext(new TableReferenceContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_tableReference);
						setState(1828);
						if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)");
						setState(1830);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (((((_la - 138)) & ~0x3f) == 0 && ((1L << (_la - 138)) & 2147491841L) != 0) || _la==RIGHT) {
							{
							setState(1829);
							joinType();
							}
						}

						setState(1832);
						match(JOIN);
						setState(1833);
						tableReference(0);
						setState(1834);
						joinSpecification();
						}
						break;
					}
					} 
				}
				setState(1840);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,166,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			unrollRecursionContexts(_parentctx);
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WithOrdinalityContext extends ParserRuleContext {
		public TerminalNode WITH() { return getToken(Sql.WITH, 0); }
		public TerminalNode ORDINALITY() { return getToken(Sql.ORDINALITY, 0); }
		public WithOrdinalityContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_withOrdinality; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWithOrdinality(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WithOrdinalityContext withOrdinality() throws RecognitionException {
		WithOrdinalityContext _localctx = new WithOrdinalityContext(_ctx, getState());
		enterRule(_localctx, 194, RULE_withOrdinality);
		try {
			enterOuterAlt(_localctx, 1);
			{
			{
			setState(1841);
			match(WITH);
			setState(1842);
			match(ORDINALITY);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class TableAliasContext extends ParserRuleContext {
		public CorrelationNameContext correlationName() {
			return getRuleContext(CorrelationNameContext.class,0);
		}
		public TerminalNode AS() { return getToken(Sql.AS, 0); }
		public TableAliasContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_tableAlias; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitTableAlias(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TableAliasContext tableAlias() throws RecognitionException {
		TableAliasContext _localctx = new TableAliasContext(_ctx, getState());
		enterRule(_localctx, 196, RULE_tableAlias);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1845);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==AS) {
				{
				setState(1844);
				match(AS);
				}
			}

			setState(1847);
			correlationName();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class TableProjectionContext extends ParserRuleContext {
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ColumnNameListContext columnNameList() {
			return getRuleContext(ColumnNameListContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public TableProjectionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_tableProjection; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitTableProjection(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TableProjectionContext tableProjection() throws RecognitionException {
		TableProjectionContext _localctx = new TableProjectionContext(_ctx, getState());
		enterRule(_localctx, 198, RULE_tableProjection);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1849);
			match(LPAREN);
			setState(1850);
			columnNameList();
			setState(1851);
			match(RPAREN);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class QuerySystemTimePeriodSpecificationContext extends ParserRuleContext {
		public TerminalNode FOR() { return getToken(Sql.FOR, 0); }
		public TerminalNode SYSTEM_TIME() { return getToken(Sql.SYSTEM_TIME, 0); }
		public TableTimePeriodSpecificationContext tableTimePeriodSpecification() {
			return getRuleContext(TableTimePeriodSpecificationContext.class,0);
		}
		public TerminalNode ALL() { return getToken(Sql.ALL, 0); }
		public QuerySystemTimePeriodSpecificationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_querySystemTimePeriodSpecification; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitQuerySystemTimePeriodSpecification(this);
			else return visitor.visitChildren(this);
		}
	}

	public final QuerySystemTimePeriodSpecificationContext querySystemTimePeriodSpecification() throws RecognitionException {
		QuerySystemTimePeriodSpecificationContext _localctx = new QuerySystemTimePeriodSpecificationContext(_ctx, getState());
		enterRule(_localctx, 200, RULE_querySystemTimePeriodSpecification);
		try {
			setState(1859);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,168,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1853);
				match(FOR);
				setState(1854);
				match(SYSTEM_TIME);
				setState(1855);
				tableTimePeriodSpecification();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1856);
				match(FOR);
				setState(1857);
				match(ALL);
				setState(1858);
				match(SYSTEM_TIME);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class QueryValidTimePeriodSpecificationContext extends ParserRuleContext {
		public TerminalNode FOR() { return getToken(Sql.FOR, 0); }
		public TerminalNode VALID_TIME() { return getToken(Sql.VALID_TIME, 0); }
		public TableTimePeriodSpecificationContext tableTimePeriodSpecification() {
			return getRuleContext(TableTimePeriodSpecificationContext.class,0);
		}
		public TerminalNode ALL() { return getToken(Sql.ALL, 0); }
		public QueryValidTimePeriodSpecificationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_queryValidTimePeriodSpecification; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitQueryValidTimePeriodSpecification(this);
			else return visitor.visitChildren(this);
		}
	}

	public final QueryValidTimePeriodSpecificationContext queryValidTimePeriodSpecification() throws RecognitionException {
		QueryValidTimePeriodSpecificationContext _localctx = new QueryValidTimePeriodSpecificationContext(_ctx, getState());
		enterRule(_localctx, 202, RULE_queryValidTimePeriodSpecification);
		try {
			setState(1867);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,169,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1861);
				match(FOR);
				setState(1862);
				match(VALID_TIME);
				setState(1863);
				tableTimePeriodSpecification();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1864);
				match(FOR);
				setState(1865);
				match(ALL);
				setState(1866);
				match(VALID_TIME);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class TableTimePeriodSpecificationContext extends ParserRuleContext {
		public TableTimePeriodSpecificationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_tableTimePeriodSpecification; }
	 
		public TableTimePeriodSpecificationContext() { }
		public void copyFrom(TableTimePeriodSpecificationContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class TableFromToContext extends TableTimePeriodSpecificationContext {
		public TerminalNode FROM() { return getToken(Sql.FROM, 0); }
		public List periodSpecificationExpr() {
			return getRuleContexts(PeriodSpecificationExprContext.class);
		}
		public PeriodSpecificationExprContext periodSpecificationExpr(int i) {
			return getRuleContext(PeriodSpecificationExprContext.class,i);
		}
		public TerminalNode TO() { return getToken(Sql.TO, 0); }
		public TableFromToContext(TableTimePeriodSpecificationContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitTableFromTo(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class TableAsOfContext extends TableTimePeriodSpecificationContext {
		public TerminalNode AS() { return getToken(Sql.AS, 0); }
		public TerminalNode OF() { return getToken(Sql.OF, 0); }
		public PeriodSpecificationExprContext periodSpecificationExpr() {
			return getRuleContext(PeriodSpecificationExprContext.class,0);
		}
		public TableAsOfContext(TableTimePeriodSpecificationContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitTableAsOf(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class TableBetweenContext extends TableTimePeriodSpecificationContext {
		public TerminalNode BETWEEN() { return getToken(Sql.BETWEEN, 0); }
		public List periodSpecificationExpr() {
			return getRuleContexts(PeriodSpecificationExprContext.class);
		}
		public PeriodSpecificationExprContext periodSpecificationExpr(int i) {
			return getRuleContext(PeriodSpecificationExprContext.class,i);
		}
		public TerminalNode AND() { return getToken(Sql.AND, 0); }
		public TableBetweenContext(TableTimePeriodSpecificationContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitTableBetween(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class TableAllTimeContext extends TableTimePeriodSpecificationContext {
		public TerminalNode ALL() { return getToken(Sql.ALL, 0); }
		public TableAllTimeContext(TableTimePeriodSpecificationContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitTableAllTime(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TableTimePeriodSpecificationContext tableTimePeriodSpecification() throws RecognitionException {
		TableTimePeriodSpecificationContext _localctx = new TableTimePeriodSpecificationContext(_ctx, getState());
		enterRule(_localctx, 204, RULE_tableTimePeriodSpecification);
		try {
			setState(1883);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case AS:
				_localctx = new TableAsOfContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(1869);
				match(AS);
				setState(1870);
				match(OF);
				setState(1871);
				periodSpecificationExpr();
				}
				break;
			case ALL:
				_localctx = new TableAllTimeContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(1872);
				match(ALL);
				}
				break;
			case BETWEEN:
				_localctx = new TableBetweenContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(1873);
				match(BETWEEN);
				setState(1874);
				periodSpecificationExpr();
				setState(1875);
				match(AND);
				setState(1876);
				periodSpecificationExpr();
				}
				break;
			case FROM:
				_localctx = new TableFromToContext(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(1878);
				match(FROM);
				setState(1879);
				periodSpecificationExpr();
				setState(1880);
				match(TO);
				setState(1881);
				periodSpecificationExpr();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class PeriodSpecificationExprContext extends ParserRuleContext {
		public PeriodSpecificationExprContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_periodSpecificationExpr; }
	 
		public PeriodSpecificationExprContext() { }
		public void copyFrom(PeriodSpecificationExprContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class PeriodSpecLiteralContext extends PeriodSpecificationExprContext {
		public LiteralContext literal() {
			return getRuleContext(LiteralContext.class,0);
		}
		public PeriodSpecLiteralContext(PeriodSpecificationExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitPeriodSpecLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class PeriodSpecNowContext extends PeriodSpecificationExprContext {
		public TerminalNode NOW() { return getToken(Sql.NOW, 0); }
		public TerminalNode CURRENT_TIMESTAMP() { return getToken(Sql.CURRENT_TIMESTAMP, 0); }
		public PeriodSpecNowContext(PeriodSpecificationExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitPeriodSpecNow(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class PeriodSpecParamContext extends PeriodSpecificationExprContext {
		public ParameterSpecificationContext parameterSpecification() {
			return getRuleContext(ParameterSpecificationContext.class,0);
		}
		public PeriodSpecParamContext(PeriodSpecificationExprContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitPeriodSpecParam(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PeriodSpecificationExprContext periodSpecificationExpr() throws RecognitionException {
		PeriodSpecificationExprContext _localctx = new PeriodSpecificationExprContext(_ctx, getState());
		enterRule(_localctx, 206, RULE_periodSpecificationExpr);
		int _la;
		try {
			setState(1888);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case UNSIGNED_FLOAT:
			case UNSIGNED_INTEGER:
			case CHARACTER_STRING:
			case C_ESCAPES_STRING:
			case BINARY_STRING:
			case PLUS:
			case MINUS:
			case DATE:
			case DURATION:
			case FALSE:
			case INTERVAL:
			case NULL:
			case TIME:
			case TIMESTAMP:
			case TRUE:
			case UUID:
			case DOLLAR_TAG:
				_localctx = new PeriodSpecLiteralContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(1885);
				literal();
				}
				break;
			case POSTGRES_PARAMETER_SPECIFICATION:
			case QUESTION:
				_localctx = new PeriodSpecParamContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(1886);
				parameterSpecification();
				}
				break;
			case CURRENT_TIMESTAMP:
			case NOW:
				_localctx = new PeriodSpecNowContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(1887);
				_la = _input.LA(1);
				if ( !(_la==CURRENT_TIMESTAMP || _la==NOW) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class TableOrQueryNameContext extends ParserRuleContext {
		public TableNameContext tableName() {
			return getRuleContext(TableNameContext.class,0);
		}
		public TableOrQueryNameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_tableOrQueryName; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitTableOrQueryName(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TableOrQueryNameContext tableOrQueryName() throws RecognitionException {
		TableOrQueryNameContext _localctx = new TableOrQueryNameContext(_ctx, getState());
		enterRule(_localctx, 208, RULE_tableOrQueryName);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1890);
			tableName();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ColumnNameListContext extends ParserRuleContext {
		public List columnName() {
			return getRuleContexts(ColumnNameContext.class);
		}
		public ColumnNameContext columnName(int i) {
			return getRuleContext(ColumnNameContext.class,i);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public ColumnNameListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_columnNameList; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitColumnNameList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ColumnNameListContext columnNameList() throws RecognitionException {
		ColumnNameListContext _localctx = new ColumnNameListContext(_ctx, getState());
		enterRule(_localctx, 210, RULE_columnNameList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1892);
			columnName();
			setState(1897);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(1893);
				match(COMMA);
				setState(1894);
				columnName();
				}
				}
				setState(1899);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class JoinSpecificationContext extends ParserRuleContext {
		public JoinSpecificationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_joinSpecification; }
	 
		public JoinSpecificationContext() { }
		public void copyFrom(JoinSpecificationContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class NamedColumnsJoinContext extends JoinSpecificationContext {
		public TerminalNode USING() { return getToken(Sql.USING, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ColumnNameListContext columnNameList() {
			return getRuleContext(ColumnNameListContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public NamedColumnsJoinContext(JoinSpecificationContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitNamedColumnsJoin(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class JoinConditionContext extends JoinSpecificationContext {
		public TerminalNode ON() { return getToken(Sql.ON, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public JoinConditionContext(JoinSpecificationContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitJoinCondition(this);
			else return visitor.visitChildren(this);
		}
	}

	public final JoinSpecificationContext joinSpecification() throws RecognitionException {
		JoinSpecificationContext _localctx = new JoinSpecificationContext(_ctx, getState());
		enterRule(_localctx, 212, RULE_joinSpecification);
		try {
			setState(1907);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case ON:
				_localctx = new JoinConditionContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(1900);
				match(ON);
				setState(1901);
				expr(0);
				}
				break;
			case USING:
				_localctx = new NamedColumnsJoinContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(1902);
				match(USING);
				setState(1903);
				match(LPAREN);
				setState(1904);
				columnNameList();
				setState(1905);
				match(RPAREN);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class JoinTypeContext extends ParserRuleContext {
		public TerminalNode INNER() { return getToken(Sql.INNER, 0); }
		public OuterJoinTypeContext outerJoinType() {
			return getRuleContext(OuterJoinTypeContext.class,0);
		}
		public TerminalNode OUTER() { return getToken(Sql.OUTER, 0); }
		public JoinTypeContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_joinType; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitJoinType(this);
			else return visitor.visitChildren(this);
		}
	}

	public final JoinTypeContext joinType() throws RecognitionException {
		JoinTypeContext _localctx = new JoinTypeContext(_ctx, getState());
		enterRule(_localctx, 214, RULE_joinType);
		int _la;
		try {
			setState(1914);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case INNER:
				enterOuterAlt(_localctx, 1);
				{
				setState(1909);
				match(INNER);
				}
				break;
			case FULL:
			case LEFT:
			case RIGHT:
				enterOuterAlt(_localctx, 2);
				{
				setState(1910);
				outerJoinType();
				setState(1912);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==OUTER) {
					{
					setState(1911);
					match(OUTER);
					}
				}

				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class OuterJoinTypeContext extends ParserRuleContext {
		public TerminalNode LEFT() { return getToken(Sql.LEFT, 0); }
		public TerminalNode RIGHT() { return getToken(Sql.RIGHT, 0); }
		public TerminalNode FULL() { return getToken(Sql.FULL, 0); }
		public OuterJoinTypeContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_outerJoinType; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitOuterJoinType(this);
			else return visitor.visitChildren(this);
		}
	}

	public final OuterJoinTypeContext outerJoinType() throws RecognitionException {
		OuterJoinTypeContext _localctx = new OuterJoinTypeContext(_ctx, getState());
		enterRule(_localctx, 216, RULE_outerJoinType);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1916);
			_la = _input.LA(1);
			if ( !(_la==FULL || _la==LEFT || _la==RIGHT) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WhereClauseContext extends ParserRuleContext {
		public TerminalNode WHERE() { return getToken(Sql.WHERE, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public WhereClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_whereClause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWhereClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WhereClauseContext whereClause() throws RecognitionException {
		WhereClauseContext _localctx = new WhereClauseContext(_ctx, getState());
		enterRule(_localctx, 218, RULE_whereClause);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1918);
			match(WHERE);
			setState(1919);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class GroupByClauseContext extends ParserRuleContext {
		public TerminalNode GROUP() { return getToken(Sql.GROUP, 0); }
		public TerminalNode BY() { return getToken(Sql.BY, 0); }
		public List groupingElement() {
			return getRuleContexts(GroupingElementContext.class);
		}
		public GroupingElementContext groupingElement(int i) {
			return getRuleContext(GroupingElementContext.class,i);
		}
		public SetQuantifierContext setQuantifier() {
			return getRuleContext(SetQuantifierContext.class,0);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public GroupByClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_groupByClause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitGroupByClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final GroupByClauseContext groupByClause() throws RecognitionException {
		GroupByClauseContext _localctx = new GroupByClauseContext(_ctx, getState());
		enterRule(_localctx, 220, RULE_groupByClause);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(1921);
			match(GROUP);
			setState(1922);
			match(BY);
			setState(1924);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==ALL || _la==DISTINCT) {
				{
				setState(1923);
				setQuantifier();
				}
			}

			setState(1926);
			groupingElement();
			setState(1931);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,177,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(1927);
					match(COMMA);
					setState(1928);
					groupingElement();
					}
					} 
				}
				setState(1933);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,177,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class GroupingElementContext extends ParserRuleContext {
		public GroupingElementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_groupingElement; }
	 
		public GroupingElementContext() { }
		public void copyFrom(GroupingElementContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class EmptyGroupingSetContext extends GroupingElementContext {
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public EmptyGroupingSetContext(GroupingElementContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitEmptyGroupingSet(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class OrdinaryGroupingSetContext extends GroupingElementContext {
		public ColumnReferenceContext columnReference() {
			return getRuleContext(ColumnReferenceContext.class,0);
		}
		public OrdinaryGroupingSetContext(GroupingElementContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitOrdinaryGroupingSet(this);
			else return visitor.visitChildren(this);
		}
	}

	public final GroupingElementContext groupingElement() throws RecognitionException {
		GroupingElementContext _localctx = new GroupingElementContext(_ctx, getState());
		enterRule(_localctx, 222, RULE_groupingElement);
		try {
			setState(1937);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case AGE:
			case AVG:
			case BASIS:
			case BOOL_AND:
			case BOOL_OR:
			case CARDINALITY:
			case COMMITTED:
			case COUNT:
			case DELETE:
			case END:
			case ERASE:
			case EVERY:
			case INSERT:
			case LATEST:
			case MAX:
			case MIN:
			case ROLE:
			case SELECT:
			case SETTING:
			case START:
			case STDDEV_POP:
			case STDDEV_SAMP:
			case SUBMITTED:
			case SUM:
			case SYSTEM_TIME:
			case TIMEZONE:
			case UNCOMMITTED:
			case UPDATE:
			case VALID_TIME:
			case VAR_POP:
			case VAR_SAMP:
			case VERSION:
			case REGULAR_IDENTIFIER:
			case DELIMITED_IDENTIFIER:
				_localctx = new OrdinaryGroupingSetContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(1934);
				columnReference();
				}
				break;
			case LPAREN:
				_localctx = new EmptyGroupingSetContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(1935);
				match(LPAREN);
				setState(1936);
				match(RPAREN);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class HavingClauseContext extends ParserRuleContext {
		public TerminalNode HAVING() { return getToken(Sql.HAVING, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public HavingClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_havingClause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitHavingClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final HavingClauseContext havingClause() throws RecognitionException {
		HavingClauseContext _localctx = new HavingClauseContext(_ctx, getState());
		enterRule(_localctx, 224, RULE_havingClause);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1939);
			match(HAVING);
			setState(1940);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WindowClauseContext extends ParserRuleContext {
		public TerminalNode WINDOW() { return getToken(Sql.WINDOW, 0); }
		public WindowDefinitionListContext windowDefinitionList() {
			return getRuleContext(WindowDefinitionListContext.class,0);
		}
		public WindowClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_windowClause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWindowClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WindowClauseContext windowClause() throws RecognitionException {
		WindowClauseContext _localctx = new WindowClauseContext(_ctx, getState());
		enterRule(_localctx, 226, RULE_windowClause);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1942);
			match(WINDOW);
			setState(1943);
			windowDefinitionList();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WindowDefinitionListContext extends ParserRuleContext {
		public List windowDefinition() {
			return getRuleContexts(WindowDefinitionContext.class);
		}
		public WindowDefinitionContext windowDefinition(int i) {
			return getRuleContext(WindowDefinitionContext.class,i);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public WindowDefinitionListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_windowDefinitionList; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWindowDefinitionList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WindowDefinitionListContext windowDefinitionList() throws RecognitionException {
		WindowDefinitionListContext _localctx = new WindowDefinitionListContext(_ctx, getState());
		enterRule(_localctx, 228, RULE_windowDefinitionList);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(1945);
			windowDefinition();
			setState(1950);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,179,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(1946);
					match(COMMA);
					setState(1947);
					windowDefinition();
					}
					} 
				}
				setState(1952);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,179,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WindowDefinitionContext extends ParserRuleContext {
		public NewWindowNameContext newWindowName() {
			return getRuleContext(NewWindowNameContext.class,0);
		}
		public TerminalNode AS() { return getToken(Sql.AS, 0); }
		public WindowSpecificationContext windowSpecification() {
			return getRuleContext(WindowSpecificationContext.class,0);
		}
		public WindowDefinitionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_windowDefinition; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWindowDefinition(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WindowDefinitionContext windowDefinition() throws RecognitionException {
		WindowDefinitionContext _localctx = new WindowDefinitionContext(_ctx, getState());
		enterRule(_localctx, 230, RULE_windowDefinition);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1953);
			newWindowName();
			setState(1954);
			match(AS);
			setState(1955);
			windowSpecification();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class NewWindowNameContext extends ParserRuleContext {
		public WindowNameContext windowName() {
			return getRuleContext(WindowNameContext.class,0);
		}
		public NewWindowNameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_newWindowName; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitNewWindowName(this);
			else return visitor.visitChildren(this);
		}
	}

	public final NewWindowNameContext newWindowName() throws RecognitionException {
		NewWindowNameContext _localctx = new NewWindowNameContext(_ctx, getState());
		enterRule(_localctx, 232, RULE_newWindowName);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1957);
			windowName();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WindowSpecificationContext extends ParserRuleContext {
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public WindowSpecificationDetailsContext windowSpecificationDetails() {
			return getRuleContext(WindowSpecificationDetailsContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public WindowSpecificationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_windowSpecification; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWindowSpecification(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WindowSpecificationContext windowSpecification() throws RecognitionException {
		WindowSpecificationContext _localctx = new WindowSpecificationContext(_ctx, getState());
		enterRule(_localctx, 234, RULE_windowSpecification);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1959);
			match(LPAREN);
			setState(1960);
			windowSpecificationDetails();
			setState(1961);
			match(RPAREN);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WindowSpecificationDetailsContext extends ParserRuleContext {
		public ExistingWindowNameContext existingWindowName() {
			return getRuleContext(ExistingWindowNameContext.class,0);
		}
		public WindowPartitionClauseContext windowPartitionClause() {
			return getRuleContext(WindowPartitionClauseContext.class,0);
		}
		public WindowOrderClauseContext windowOrderClause() {
			return getRuleContext(WindowOrderClauseContext.class,0);
		}
		public WindowFrameClauseContext windowFrameClause() {
			return getRuleContext(WindowFrameClauseContext.class,0);
		}
		public WindowSpecificationDetailsContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_windowSpecificationDetails; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWindowSpecificationDetails(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WindowSpecificationDetailsContext windowSpecificationDetails() throws RecognitionException {
		WindowSpecificationDetailsContext _localctx = new WindowSpecificationDetailsContext(_ctx, getState());
		enterRule(_localctx, 236, RULE_windowSpecificationDetails);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1964);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3458799698192629760L) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & 11400836069523475L) != 0) || ((((_la - 152)) & ~0x3f) == 0 && ((1L << (_la - 152)) & 36507230209L) != 0) || ((((_la - 251)) & ~0x3f) == 0 && ((1L << (_la - 251)) & 4072450366241506369L) != 0) || _la==REGULAR_IDENTIFIER || _la==DELIMITED_IDENTIFIER) {
				{
				setState(1963);
				existingWindowName();
				}
			}

			setState(1967);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==PARTITION) {
				{
				setState(1966);
				windowPartitionClause();
				}
			}

			setState(1970);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==ORDER) {
				{
				setState(1969);
				windowOrderClause();
				}
			}

			setState(1973);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==GROUPS || _la==RANGE || _la==ROWS) {
				{
				setState(1972);
				windowFrameClause();
				}
			}

			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ExistingWindowNameContext extends ParserRuleContext {
		public WindowNameContext windowName() {
			return getRuleContext(WindowNameContext.class,0);
		}
		public ExistingWindowNameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_existingWindowName; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitExistingWindowName(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ExistingWindowNameContext existingWindowName() throws RecognitionException {
		ExistingWindowNameContext _localctx = new ExistingWindowNameContext(_ctx, getState());
		enterRule(_localctx, 238, RULE_existingWindowName);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1975);
			windowName();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WindowPartitionClauseContext extends ParserRuleContext {
		public TerminalNode PARTITION() { return getToken(Sql.PARTITION, 0); }
		public TerminalNode BY() { return getToken(Sql.BY, 0); }
		public WindowPartitionColumnReferenceListContext windowPartitionColumnReferenceList() {
			return getRuleContext(WindowPartitionColumnReferenceListContext.class,0);
		}
		public WindowPartitionClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_windowPartitionClause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWindowPartitionClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WindowPartitionClauseContext windowPartitionClause() throws RecognitionException {
		WindowPartitionClauseContext _localctx = new WindowPartitionClauseContext(_ctx, getState());
		enterRule(_localctx, 240, RULE_windowPartitionClause);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1977);
			match(PARTITION);
			setState(1978);
			match(BY);
			setState(1979);
			windowPartitionColumnReferenceList();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WindowPartitionColumnReferenceListContext extends ParserRuleContext {
		public List windowPartitionColumnReference() {
			return getRuleContexts(WindowPartitionColumnReferenceContext.class);
		}
		public WindowPartitionColumnReferenceContext windowPartitionColumnReference(int i) {
			return getRuleContext(WindowPartitionColumnReferenceContext.class,i);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public WindowPartitionColumnReferenceListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_windowPartitionColumnReferenceList; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWindowPartitionColumnReferenceList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WindowPartitionColumnReferenceListContext windowPartitionColumnReferenceList() throws RecognitionException {
		WindowPartitionColumnReferenceListContext _localctx = new WindowPartitionColumnReferenceListContext(_ctx, getState());
		enterRule(_localctx, 242, RULE_windowPartitionColumnReferenceList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1981);
			windowPartitionColumnReference();
			setState(1986);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(1982);
				match(COMMA);
				setState(1983);
				windowPartitionColumnReference();
				}
				}
				setState(1988);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WindowPartitionColumnReferenceContext extends ParserRuleContext {
		public ColumnReferenceContext columnReference() {
			return getRuleContext(ColumnReferenceContext.class,0);
		}
		public WindowPartitionColumnReferenceContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_windowPartitionColumnReference; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWindowPartitionColumnReference(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WindowPartitionColumnReferenceContext windowPartitionColumnReference() throws RecognitionException {
		WindowPartitionColumnReferenceContext _localctx = new WindowPartitionColumnReferenceContext(_ctx, getState());
		enterRule(_localctx, 244, RULE_windowPartitionColumnReference);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1989);
			columnReference();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WindowOrderClauseContext extends ParserRuleContext {
		public TerminalNode ORDER() { return getToken(Sql.ORDER, 0); }
		public TerminalNode BY() { return getToken(Sql.BY, 0); }
		public SortSpecificationListContext sortSpecificationList() {
			return getRuleContext(SortSpecificationListContext.class,0);
		}
		public WindowOrderClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_windowOrderClause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWindowOrderClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WindowOrderClauseContext windowOrderClause() throws RecognitionException {
		WindowOrderClauseContext _localctx = new WindowOrderClauseContext(_ctx, getState());
		enterRule(_localctx, 246, RULE_windowOrderClause);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1991);
			match(ORDER);
			setState(1992);
			match(BY);
			setState(1993);
			sortSpecificationList();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WindowFrameClauseContext extends ParserRuleContext {
		public WindowFrameUnitsContext windowFrameUnits() {
			return getRuleContext(WindowFrameUnitsContext.class,0);
		}
		public WindowFrameExtentContext windowFrameExtent() {
			return getRuleContext(WindowFrameExtentContext.class,0);
		}
		public WindowFrameExclusionContext windowFrameExclusion() {
			return getRuleContext(WindowFrameExclusionContext.class,0);
		}
		public WindowFrameClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_windowFrameClause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWindowFrameClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WindowFrameClauseContext windowFrameClause() throws RecognitionException {
		WindowFrameClauseContext _localctx = new WindowFrameClauseContext(_ctx, getState());
		enterRule(_localctx, 248, RULE_windowFrameClause);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1995);
			windowFrameUnits();
			setState(1996);
			windowFrameExtent();
			setState(1998);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==EXCLUDE) {
				{
				setState(1997);
				windowFrameExclusion();
				}
			}

			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WindowFrameUnitsContext extends ParserRuleContext {
		public TerminalNode ROWS() { return getToken(Sql.ROWS, 0); }
		public TerminalNode RANGE() { return getToken(Sql.RANGE, 0); }
		public TerminalNode GROUPS() { return getToken(Sql.GROUPS, 0); }
		public WindowFrameUnitsContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_windowFrameUnits; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWindowFrameUnits(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WindowFrameUnitsContext windowFrameUnits() throws RecognitionException {
		WindowFrameUnitsContext _localctx = new WindowFrameUnitsContext(_ctx, getState());
		enterRule(_localctx, 250, RULE_windowFrameUnits);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2000);
			_la = _input.LA(1);
			if ( !(_la==GROUPS || _la==RANGE || _la==ROWS) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WindowFrameExtentContext extends ParserRuleContext {
		public WindowFrameStartContext windowFrameStart() {
			return getRuleContext(WindowFrameStartContext.class,0);
		}
		public WindowFrameBetweenContext windowFrameBetween() {
			return getRuleContext(WindowFrameBetweenContext.class,0);
		}
		public WindowFrameExtentContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_windowFrameExtent; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWindowFrameExtent(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WindowFrameExtentContext windowFrameExtent() throws RecognitionException {
		WindowFrameExtentContext _localctx = new WindowFrameExtentContext(_ctx, getState());
		enterRule(_localctx, 252, RULE_windowFrameExtent);
		try {
			setState(2004);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case UNSIGNED_INTEGER:
			case CURRENT:
			case UNBOUNDED:
				enterOuterAlt(_localctx, 1);
				{
				setState(2002);
				windowFrameStart();
				}
				break;
			case BETWEEN:
				enterOuterAlt(_localctx, 2);
				{
				setState(2003);
				windowFrameBetween();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WindowFrameStartContext extends ParserRuleContext {
		public TerminalNode UNBOUNDED() { return getToken(Sql.UNBOUNDED, 0); }
		public TerminalNode PRECEDING() { return getToken(Sql.PRECEDING, 0); }
		public WindowFramePrecedingContext windowFramePreceding() {
			return getRuleContext(WindowFramePrecedingContext.class,0);
		}
		public TerminalNode CURRENT() { return getToken(Sql.CURRENT, 0); }
		public TerminalNode ROW() { return getToken(Sql.ROW, 0); }
		public WindowFrameStartContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_windowFrameStart; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWindowFrameStart(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WindowFrameStartContext windowFrameStart() throws RecognitionException {
		WindowFrameStartContext _localctx = new WindowFrameStartContext(_ctx, getState());
		enterRule(_localctx, 254, RULE_windowFrameStart);
		try {
			setState(2011);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case UNBOUNDED:
				enterOuterAlt(_localctx, 1);
				{
				setState(2006);
				match(UNBOUNDED);
				setState(2007);
				match(PRECEDING);
				}
				break;
			case UNSIGNED_INTEGER:
				enterOuterAlt(_localctx, 2);
				{
				setState(2008);
				windowFramePreceding();
				}
				break;
			case CURRENT:
				enterOuterAlt(_localctx, 3);
				{
				setState(2009);
				match(CURRENT);
				setState(2010);
				match(ROW);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WindowFramePrecedingContext extends ParserRuleContext {
		public TerminalNode UNSIGNED_INTEGER() { return getToken(Sql.UNSIGNED_INTEGER, 0); }
		public TerminalNode PRECEDING() { return getToken(Sql.PRECEDING, 0); }
		public WindowFramePrecedingContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_windowFramePreceding; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWindowFramePreceding(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WindowFramePrecedingContext windowFramePreceding() throws RecognitionException {
		WindowFramePrecedingContext _localctx = new WindowFramePrecedingContext(_ctx, getState());
		enterRule(_localctx, 256, RULE_windowFramePreceding);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2013);
			match(UNSIGNED_INTEGER);
			setState(2014);
			match(PRECEDING);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WindowFrameBetweenContext extends ParserRuleContext {
		public TerminalNode BETWEEN() { return getToken(Sql.BETWEEN, 0); }
		public WindowFrameBound1Context windowFrameBound1() {
			return getRuleContext(WindowFrameBound1Context.class,0);
		}
		public TerminalNode AND() { return getToken(Sql.AND, 0); }
		public WindowFrameBound2Context windowFrameBound2() {
			return getRuleContext(WindowFrameBound2Context.class,0);
		}
		public WindowFrameBetweenContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_windowFrameBetween; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWindowFrameBetween(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WindowFrameBetweenContext windowFrameBetween() throws RecognitionException {
		WindowFrameBetweenContext _localctx = new WindowFrameBetweenContext(_ctx, getState());
		enterRule(_localctx, 258, RULE_windowFrameBetween);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2016);
			match(BETWEEN);
			setState(2017);
			windowFrameBound1();
			setState(2018);
			match(AND);
			setState(2019);
			windowFrameBound2();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WindowFrameBound1Context extends ParserRuleContext {
		public WindowFrameBoundContext windowFrameBound() {
			return getRuleContext(WindowFrameBoundContext.class,0);
		}
		public WindowFrameBound1Context(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_windowFrameBound1; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWindowFrameBound1(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WindowFrameBound1Context windowFrameBound1() throws RecognitionException {
		WindowFrameBound1Context _localctx = new WindowFrameBound1Context(_ctx, getState());
		enterRule(_localctx, 260, RULE_windowFrameBound1);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2021);
			windowFrameBound();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WindowFrameBound2Context extends ParserRuleContext {
		public WindowFrameBoundContext windowFrameBound() {
			return getRuleContext(WindowFrameBoundContext.class,0);
		}
		public WindowFrameBound2Context(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_windowFrameBound2; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWindowFrameBound2(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WindowFrameBound2Context windowFrameBound2() throws RecognitionException {
		WindowFrameBound2Context _localctx = new WindowFrameBound2Context(_ctx, getState());
		enterRule(_localctx, 262, RULE_windowFrameBound2);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2023);
			windowFrameBound();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WindowFrameBoundContext extends ParserRuleContext {
		public WindowFrameStartContext windowFrameStart() {
			return getRuleContext(WindowFrameStartContext.class,0);
		}
		public TerminalNode UNBOUNDED() { return getToken(Sql.UNBOUNDED, 0); }
		public TerminalNode FOLLOWING() { return getToken(Sql.FOLLOWING, 0); }
		public WindowFrameFollowingContext windowFrameFollowing() {
			return getRuleContext(WindowFrameFollowingContext.class,0);
		}
		public WindowFrameBoundContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_windowFrameBound; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWindowFrameBound(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WindowFrameBoundContext windowFrameBound() throws RecognitionException {
		WindowFrameBoundContext _localctx = new WindowFrameBoundContext(_ctx, getState());
		enterRule(_localctx, 264, RULE_windowFrameBound);
		try {
			setState(2029);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,188,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(2025);
				windowFrameStart();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(2026);
				match(UNBOUNDED);
				setState(2027);
				match(FOLLOWING);
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(2028);
				windowFrameFollowing();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WindowFrameFollowingContext extends ParserRuleContext {
		public TerminalNode UNSIGNED_INTEGER() { return getToken(Sql.UNSIGNED_INTEGER, 0); }
		public TerminalNode FOLLOWING() { return getToken(Sql.FOLLOWING, 0); }
		public WindowFrameFollowingContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_windowFrameFollowing; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWindowFrameFollowing(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WindowFrameFollowingContext windowFrameFollowing() throws RecognitionException {
		WindowFrameFollowingContext _localctx = new WindowFrameFollowingContext(_ctx, getState());
		enterRule(_localctx, 266, RULE_windowFrameFollowing);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2031);
			match(UNSIGNED_INTEGER);
			setState(2032);
			match(FOLLOWING);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WindowFrameExclusionContext extends ParserRuleContext {
		public TerminalNode EXCLUDE() { return getToken(Sql.EXCLUDE, 0); }
		public TerminalNode CURRENT() { return getToken(Sql.CURRENT, 0); }
		public TerminalNode ROW() { return getToken(Sql.ROW, 0); }
		public TerminalNode GROUP() { return getToken(Sql.GROUP, 0); }
		public TerminalNode TIES() { return getToken(Sql.TIES, 0); }
		public TerminalNode NO() { return getToken(Sql.NO, 0); }
		public TerminalNode OTHERS() { return getToken(Sql.OTHERS, 0); }
		public WindowFrameExclusionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_windowFrameExclusion; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWindowFrameExclusion(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WindowFrameExclusionContext windowFrameExclusion() throws RecognitionException {
		WindowFrameExclusionContext _localctx = new WindowFrameExclusionContext(_ctx, getState());
		enterRule(_localctx, 268, RULE_windowFrameExclusion);
		try {
			setState(2044);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,189,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(2034);
				match(EXCLUDE);
				setState(2035);
				match(CURRENT);
				setState(2036);
				match(ROW);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(2037);
				match(EXCLUDE);
				setState(2038);
				match(GROUP);
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(2039);
				match(EXCLUDE);
				setState(2040);
				match(TIES);
				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(2041);
				match(EXCLUDE);
				setState(2042);
				match(NO);
				setState(2043);
				match(OTHERS);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class SelectClauseContext extends ParserRuleContext {
		public TerminalNode SELECT() { return getToken(Sql.SELECT, 0); }
		public SelectListContext selectList() {
			return getRuleContext(SelectListContext.class,0);
		}
		public SetQuantifierContext setQuantifier() {
			return getRuleContext(SetQuantifierContext.class,0);
		}
		public SelectClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_selectClause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSelectClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SelectClauseContext selectClause() throws RecognitionException {
		SelectClauseContext _localctx = new SelectClauseContext(_ctx, getState());
		enterRule(_localctx, 270, RULE_selectClause);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2046);
			match(SELECT);
			setState(2048);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==ALL || _la==DISTINCT) {
				{
				setState(2047);
				setQuantifier();
				}
			}

			setState(2050);
			selectList();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class SelectListContext extends ParserRuleContext {
		public SelectListAsteriskContext selectListAsterisk() {
			return getRuleContext(SelectListAsteriskContext.class,0);
		}
		public List selectSublist() {
			return getRuleContexts(SelectSublistContext.class);
		}
		public SelectSublistContext selectSublist(int i) {
			return getRuleContext(SelectSublistContext.class,i);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public SelectListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_selectList; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSelectList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SelectListContext selectList() throws RecognitionException {
		SelectListContext _localctx = new SelectListContext(_ctx, getState());
		enterRule(_localctx, 272, RULE_selectList);
		try {
			int _alt;
			setState(2074);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,194,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(2054);
				_errHandler.sync(this);
				switch (_input.LA(1)) {
				case ASTERISK:
					{
					setState(2052);
					selectListAsterisk();
					}
					break;
				case UNSIGNED_FLOAT:
				case UNSIGNED_INTEGER:
				case CHARACTER_STRING:
				case C_ESCAPES_STRING:
				case BINARY_STRING:
				case POSTGRES_PARAMETER_SPECIFICATION:
				case QUESTION:
				case LPAREN:
				case LBRACK:
				case LBRACE:
				case TILDE:
				case PLUS:
				case MINUS:
				case ABS:
				case ACOS:
				case AGE:
				case ARRAY:
				case ARRAY_AGG:
				case ARRAY_UPPER:
				case ASIN:
				case ATAN:
				case AVG:
				case BASIS:
				case BOOL_AND:
				case BOOL_OR:
				case CARDINALITY:
				case CASE:
				case CAST:
				case CEIL:
				case CEILING:
				case CHARACTER_LENGTH:
				case CHAR_LENGTH:
				case COALESCE:
				case COMMITTED:
				case COS:
				case COSH:
				case COUNT:
				case CUME_DIST:
				case CURRENT_DATABASE:
				case CURRENT_DATE:
				case CURRENT_SCHEMA:
				case CURRENT_SCHEMAS:
				case CURRENT_TIME:
				case CURRENT_TIMESTAMP:
				case CURRENT_USER:
				case DATE:
				case DATE_BIN:
				case DATE_TRUNC:
				case DELETE:
				case DENSE_RANK:
				case DURATION:
				case END:
				case ERASE:
				case EVERY:
				case EXISTS:
				case EXP:
				case EXTRACT:
				case FALSE:
				case FIRST_VALUE:
				case FLOOR:
				case GENERATE_SERIES:
				case GREATEST:
				case HAS_ANY_COLUMN_PRIVILEGE:
				case HAS_SCHEMA_PRIVILEGE:
				case HAS_TABLE_PRIVILEGE:
				case INSERT:
				case INTERVAL:
				case LAG:
				case LAST_VALUE:
				case LATEST:
				case LEAD:
				case LEAST:
				case LENGTH:
				case LN:
				case LOCALTIME:
				case LOCALTIMESTAMP:
				case LOG:
				case LOG10:
				case LOWER:
				case LOWER_INF:
				case MAX:
				case MIN:
				case MOD:
				case NEST_MANY:
				case NEST_ONE:
				case NOT:
				case NOW:
				case NTH_VALUE:
				case NTILE:
				case NULL:
				case NULLIF:
				case OBJECT:
				case OCTET_LENGTH:
				case OVERLAPS:
				case OVERLAY:
				case PERCENT_RANK:
				case PERIOD:
				case PG_EXPANDARRAY:
				case PG_GET_EXPR:
				case PG_GET_INDEXDEF:
				case POSITION:
				case POWER:
				case RANGE_BINS:
				case RANK:
				case RECORD:
				case REPLACE:
				case ROLE:
				case ROW_NUMBER:
				case SELECT:
				case SETTING:
				case SIN:
				case SINH:
				case SQRT:
				case START:
				case STDDEV_POP:
				case STDDEV_SAMP:
				case SUBMITTED:
				case SUBSTRING:
				case SUM:
				case SYSTEM_TIME:
				case TAN:
				case TANH:
				case TIME:
				case TIMESTAMP:
				case TIMEZONE:
				case TRIM:
				case TRIM_ARRAY:
				case TRUE:
				case TSTZRANGE:
				case UNCOMMITTED:
				case UPDATE:
				case UPPER:
				case UPPER_INF:
				case UUID:
				case VALID_TIME:
				case VALUE_OF:
				case VAR_POP:
				case VAR_SAMP:
				case VERSION:
				case DOLLAR_TAG:
				case REGULAR_IDENTIFIER:
				case DELIMITED_IDENTIFIER:
					{
					setState(2053);
					selectSublist();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				setState(2060);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,192,_ctx);
				while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
					if ( _alt==1 ) {
						{
						{
						setState(2056);
						match(COMMA);
						setState(2057);
						selectSublist();
						}
						} 
					}
					setState(2062);
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,192,_ctx);
				}
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(2063);
				selectSublist();
				setState(2068);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,193,_ctx);
				while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
					if ( _alt==1 ) {
						{
						{
						setState(2064);
						match(COMMA);
						setState(2065);
						selectSublist();
						}
						} 
					}
					setState(2070);
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,193,_ctx);
				}
				{
				setState(2071);
				match(COMMA);
				setState(2072);
				selectListAsterisk();
				}
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class SelectListAsteriskContext extends ParserRuleContext {
		public TerminalNode ASTERISK() { return getToken(Sql.ASTERISK, 0); }
		public ExcludeClauseContext excludeClause() {
			return getRuleContext(ExcludeClauseContext.class,0);
		}
		public RenameClauseContext renameClause() {
			return getRuleContext(RenameClauseContext.class,0);
		}
		public SelectListAsteriskContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_selectListAsterisk; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSelectListAsterisk(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SelectListAsteriskContext selectListAsterisk() throws RecognitionException {
		SelectListAsteriskContext _localctx = new SelectListAsteriskContext(_ctx, getState());
		enterRule(_localctx, 274, RULE_selectListAsterisk);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2076);
			match(ASTERISK);
			setState(2078);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,195,_ctx) ) {
			case 1:
				{
				setState(2077);
				excludeClause();
				}
				break;
			}
			setState(2081);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,196,_ctx) ) {
			case 1:
				{
				setState(2080);
				renameClause();
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class SelectSublistContext extends ParserRuleContext {
		public DerivedColumnContext derivedColumn() {
			return getRuleContext(DerivedColumnContext.class,0);
		}
		public QualifiedAsteriskContext qualifiedAsterisk() {
			return getRuleContext(QualifiedAsteriskContext.class,0);
		}
		public SelectSublistContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_selectSublist; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSelectSublist(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SelectSublistContext selectSublist() throws RecognitionException {
		SelectSublistContext _localctx = new SelectSublistContext(_ctx, getState());
		enterRule(_localctx, 276, RULE_selectSublist);
		try {
			setState(2085);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,197,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(2083);
				derivedColumn();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(2084);
				qualifiedAsterisk();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class QualifiedAsteriskContext extends ParserRuleContext {
		public IdentifierChainContext identifierChain() {
			return getRuleContext(IdentifierChainContext.class,0);
		}
		public TerminalNode DOT() { return getToken(Sql.DOT, 0); }
		public TerminalNode ASTERISK() { return getToken(Sql.ASTERISK, 0); }
		public ExcludeClauseContext excludeClause() {
			return getRuleContext(ExcludeClauseContext.class,0);
		}
		public QualifiedRenameClauseContext qualifiedRenameClause() {
			return getRuleContext(QualifiedRenameClauseContext.class,0);
		}
		public QualifiedAsteriskContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_qualifiedAsterisk; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitQualifiedAsterisk(this);
			else return visitor.visitChildren(this);
		}
	}

	public final QualifiedAsteriskContext qualifiedAsterisk() throws RecognitionException {
		QualifiedAsteriskContext _localctx = new QualifiedAsteriskContext(_ctx, getState());
		enterRule(_localctx, 278, RULE_qualifiedAsterisk);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2087);
			identifierChain();
			setState(2088);
			match(DOT);
			setState(2089);
			match(ASTERISK);
			setState(2091);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,198,_ctx) ) {
			case 1:
				{
				setState(2090);
				excludeClause();
				}
				break;
			}
			setState(2094);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,199,_ctx) ) {
			case 1:
				{
				setState(2093);
				qualifiedRenameClause();
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class RenameClauseContext extends ParserRuleContext {
		public TerminalNode RENAME() { return getToken(Sql.RENAME, 0); }
		public List renameColumn() {
			return getRuleContexts(RenameColumnContext.class);
		}
		public RenameColumnContext renameColumn(int i) {
			return getRuleContext(RenameColumnContext.class,i);
		}
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public RenameClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_renameClause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitRenameClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final RenameClauseContext renameClause() throws RecognitionException {
		RenameClauseContext _localctx = new RenameClauseContext(_ctx, getState());
		enterRule(_localctx, 280, RULE_renameClause);
		int _la;
		try {
			setState(2110);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,201,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(2096);
				match(RENAME);
				setState(2097);
				renameColumn();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(2098);
				match(RENAME);
				setState(2099);
				match(LPAREN);
				setState(2100);
				renameColumn();
				setState(2105);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==COMMA) {
					{
					{
					setState(2101);
					match(COMMA);
					setState(2102);
					renameColumn();
					}
					}
					setState(2107);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				setState(2108);
				match(RPAREN);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class RenameColumnContext extends ParserRuleContext {
		public ColumnReferenceContext columnReference() {
			return getRuleContext(ColumnReferenceContext.class,0);
		}
		public AsClauseContext asClause() {
			return getRuleContext(AsClauseContext.class,0);
		}
		public RenameColumnContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_renameColumn; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitRenameColumn(this);
			else return visitor.visitChildren(this);
		}
	}

	public final RenameColumnContext renameColumn() throws RecognitionException {
		RenameColumnContext _localctx = new RenameColumnContext(_ctx, getState());
		enterRule(_localctx, 282, RULE_renameColumn);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2112);
			columnReference();
			setState(2113);
			asClause();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class QualifiedRenameClauseContext extends ParserRuleContext {
		public TerminalNode RENAME() { return getToken(Sql.RENAME, 0); }
		public List qualifiedRenameColumn() {
			return getRuleContexts(QualifiedRenameColumnContext.class);
		}
		public QualifiedRenameColumnContext qualifiedRenameColumn(int i) {
			return getRuleContext(QualifiedRenameColumnContext.class,i);
		}
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public QualifiedRenameClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_qualifiedRenameClause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitQualifiedRenameClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final QualifiedRenameClauseContext qualifiedRenameClause() throws RecognitionException {
		QualifiedRenameClauseContext _localctx = new QualifiedRenameClauseContext(_ctx, getState());
		enterRule(_localctx, 284, RULE_qualifiedRenameClause);
		int _la;
		try {
			setState(2129);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,203,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(2115);
				match(RENAME);
				setState(2116);
				qualifiedRenameColumn();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(2117);
				match(RENAME);
				setState(2118);
				match(LPAREN);
				setState(2119);
				qualifiedRenameColumn();
				setState(2124);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==COMMA) {
					{
					{
					setState(2120);
					match(COMMA);
					setState(2121);
					qualifiedRenameColumn();
					}
					}
					setState(2126);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				setState(2127);
				match(RPAREN);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class QualifiedRenameColumnContext extends ParserRuleContext {
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public AsClauseContext asClause() {
			return getRuleContext(AsClauseContext.class,0);
		}
		public QualifiedRenameColumnContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_qualifiedRenameColumn; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitQualifiedRenameColumn(this);
			else return visitor.visitChildren(this);
		}
	}

	public final QualifiedRenameColumnContext qualifiedRenameColumn() throws RecognitionException {
		QualifiedRenameColumnContext _localctx = new QualifiedRenameColumnContext(_ctx, getState());
		enterRule(_localctx, 286, RULE_qualifiedRenameColumn);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2131);
			identifier();
			setState(2132);
			asClause();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ExcludeClauseContext extends ParserRuleContext {
		public TerminalNode EXCLUDE() { return getToken(Sql.EXCLUDE, 0); }
		public List identifier() {
			return getRuleContexts(IdentifierContext.class);
		}
		public IdentifierContext identifier(int i) {
			return getRuleContext(IdentifierContext.class,i);
		}
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public ExcludeClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_excludeClause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitExcludeClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ExcludeClauseContext excludeClause() throws RecognitionException {
		ExcludeClauseContext _localctx = new ExcludeClauseContext(_ctx, getState());
		enterRule(_localctx, 288, RULE_excludeClause);
		int _la;
		try {
			setState(2148);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,205,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(2134);
				match(EXCLUDE);
				setState(2135);
				identifier();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(2136);
				match(EXCLUDE);
				setState(2137);
				match(LPAREN);
				setState(2138);
				identifier();
				setState(2143);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==COMMA) {
					{
					{
					setState(2139);
					match(COMMA);
					setState(2140);
					identifier();
					}
					}
					setState(2145);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				setState(2146);
				match(RPAREN);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class DerivedColumnContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public AsClauseContext asClause() {
			return getRuleContext(AsClauseContext.class,0);
		}
		public DerivedColumnContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_derivedColumn; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitDerivedColumn(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DerivedColumnContext derivedColumn() throws RecognitionException {
		DerivedColumnContext _localctx = new DerivedColumnContext(_ctx, getState());
		enterRule(_localctx, 290, RULE_derivedColumn);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2150);
			expr(0);
			setState(2152);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,206,_ctx) ) {
			case 1:
				{
				setState(2151);
				asClause();
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class AsClauseContext extends ParserRuleContext {
		public ColumnNameContext columnName() {
			return getRuleContext(ColumnNameContext.class,0);
		}
		public TerminalNode AS() { return getToken(Sql.AS, 0); }
		public AsClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_asClause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitAsClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final AsClauseContext asClause() throws RecognitionException {
		AsClauseContext _localctx = new AsClauseContext(_ctx, getState());
		enterRule(_localctx, 292, RULE_asClause);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2155);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==AS) {
				{
				setState(2154);
				match(AS);
				}
			}

			setState(2157);
			columnName();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class QueryExpressionContext extends ParserRuleContext {
		public QueryExpressionNoWithContext queryExpressionNoWith() {
			return getRuleContext(QueryExpressionNoWithContext.class,0);
		}
		public WithClauseContext withClause() {
			return getRuleContext(WithClauseContext.class,0);
		}
		public QueryExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_queryExpression; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitQueryExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final QueryExpressionContext queryExpression() throws RecognitionException {
		QueryExpressionContext _localctx = new QueryExpressionContext(_ctx, getState());
		enterRule(_localctx, 294, RULE_queryExpression);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2160);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==WITH) {
				{
				setState(2159);
				withClause();
				}
			}

			setState(2162);
			queryExpressionNoWith();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class QueryExpressionNoWithContext extends ParserRuleContext {
		public QueryExpressionBodyContext queryExpressionBody() {
			return getRuleContext(QueryExpressionBodyContext.class,0);
		}
		public OrderByClauseContext orderByClause() {
			return getRuleContext(OrderByClauseContext.class,0);
		}
		public OffsetAndLimitContext offsetAndLimit() {
			return getRuleContext(OffsetAndLimitContext.class,0);
		}
		public QueryExpressionNoWithContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_queryExpressionNoWith; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitQueryExpressionNoWith(this);
			else return visitor.visitChildren(this);
		}
	}

	public final QueryExpressionNoWithContext queryExpressionNoWith() throws RecognitionException {
		QueryExpressionNoWithContext _localctx = new QueryExpressionNoWithContext(_ctx, getState());
		enterRule(_localctx, 296, RULE_queryExpressionNoWith);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2164);
			queryExpressionBody(0);
			setState(2166);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==ORDER) {
				{
				setState(2165);
				orderByClause();
				}
			}

			setState(2169);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==FETCH || _la==LIMIT || _la==OFFSET) {
				{
				setState(2168);
				offsetAndLimit();
				}
			}

			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WithClauseContext extends ParserRuleContext {
		public TerminalNode WITH() { return getToken(Sql.WITH, 0); }
		public List withListElement() {
			return getRuleContexts(WithListElementContext.class);
		}
		public WithListElementContext withListElement(int i) {
			return getRuleContext(WithListElementContext.class,i);
		}
		public TerminalNode RECURSIVE() { return getToken(Sql.RECURSIVE, 0); }
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public WithClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_withClause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWithClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WithClauseContext withClause() throws RecognitionException {
		WithClauseContext _localctx = new WithClauseContext(_ctx, getState());
		enterRule(_localctx, 298, RULE_withClause);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2171);
			match(WITH);
			setState(2173);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==RECURSIVE) {
				{
				setState(2172);
				match(RECURSIVE);
				}
			}

			setState(2175);
			withListElement();
			setState(2180);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(2176);
				match(COMMA);
				setState(2177);
				withListElement();
				}
				}
				setState(2182);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class WithListElementContext extends ParserRuleContext {
		public QueryNameContext queryName() {
			return getRuleContext(QueryNameContext.class,0);
		}
		public TerminalNode AS() { return getToken(Sql.AS, 0); }
		public SubqueryContext subquery() {
			return getRuleContext(SubqueryContext.class,0);
		}
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ColumnNameListContext columnNameList() {
			return getRuleContext(ColumnNameListContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public WithListElementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_withListElement; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWithListElement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WithListElementContext withListElement() throws RecognitionException {
		WithListElementContext _localctx = new WithListElementContext(_ctx, getState());
		enterRule(_localctx, 300, RULE_withListElement);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2183);
			queryName();
			setState(2188);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==LPAREN) {
				{
				setState(2184);
				match(LPAREN);
				setState(2185);
				columnNameList();
				setState(2186);
				match(RPAREN);
				}
			}

			setState(2190);
			match(AS);
			setState(2191);
			subquery();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class QueryExpressionBodyContext extends ParserRuleContext {
		public QueryExpressionBodyContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_queryExpressionBody; }
	 
		public QueryExpressionBodyContext() { }
		public void copyFrom(QueryExpressionBodyContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class UnionQueryContext extends QueryExpressionBodyContext {
		public QueryExpressionBodyContext queryExpressionBody() {
			return getRuleContext(QueryExpressionBodyContext.class,0);
		}
		public TerminalNode UNION() { return getToken(Sql.UNION, 0); }
		public QueryTermContext queryTerm() {
			return getRuleContext(QueryTermContext.class,0);
		}
		public TerminalNode ALL() { return getToken(Sql.ALL, 0); }
		public TerminalNode DISTINCT() { return getToken(Sql.DISTINCT, 0); }
		public UnionQueryContext(QueryExpressionBodyContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitUnionQuery(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class QueryBodyTermContext extends QueryExpressionBodyContext {
		public QueryTermContext queryTerm() {
			return getRuleContext(QueryTermContext.class,0);
		}
		public QueryBodyTermContext(QueryExpressionBodyContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitQueryBodyTerm(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ExceptQueryContext extends QueryExpressionBodyContext {
		public QueryExpressionBodyContext queryExpressionBody() {
			return getRuleContext(QueryExpressionBodyContext.class,0);
		}
		public TerminalNode EXCEPT() { return getToken(Sql.EXCEPT, 0); }
		public QueryTermContext queryTerm() {
			return getRuleContext(QueryTermContext.class,0);
		}
		public TerminalNode ALL() { return getToken(Sql.ALL, 0); }
		public TerminalNode DISTINCT() { return getToken(Sql.DISTINCT, 0); }
		public ExceptQueryContext(QueryExpressionBodyContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitExceptQuery(this);
			else return visitor.visitChildren(this);
		}
	}

	public final QueryExpressionBodyContext queryExpressionBody() throws RecognitionException {
		return queryExpressionBody(0);
	}

	private QueryExpressionBodyContext queryExpressionBody(int _p) throws RecognitionException {
		ParserRuleContext _parentctx = _ctx;
		int _parentState = getState();
		QueryExpressionBodyContext _localctx = new QueryExpressionBodyContext(_ctx, _parentState);
		QueryExpressionBodyContext _prevctx = _localctx;
		int _startState = 302;
		enterRecursionRule(_localctx, 302, RULE_queryExpressionBody, _p);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			{
			_localctx = new QueryBodyTermContext(_localctx);
			_ctx = _localctx;
			_prevctx = _localctx;

			setState(2194);
			queryTerm(0);
			}
			_ctx.stop = _input.LT(-1);
			setState(2210);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,217,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					if ( _parseListeners!=null ) triggerExitRuleEvent();
					_prevctx = _localctx;
					{
					setState(2208);
					_errHandler.sync(this);
					switch ( getInterpreter().adaptivePredict(_input,216,_ctx) ) {
					case 1:
						{
						_localctx = new UnionQueryContext(new QueryExpressionBodyContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_queryExpressionBody);
						setState(2196);
						if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)");
						setState(2197);
						match(UNION);
						setState(2199);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==ALL || _la==DISTINCT) {
							{
							setState(2198);
							_la = _input.LA(1);
							if ( !(_la==ALL || _la==DISTINCT) ) {
							_errHandler.recoverInline(this);
							}
							else {
								if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
								_errHandler.reportMatch(this);
								consume();
							}
							}
						}

						setState(2201);
						queryTerm(0);
						}
						break;
					case 2:
						{
						_localctx = new ExceptQueryContext(new QueryExpressionBodyContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_queryExpressionBody);
						setState(2202);
						if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
						setState(2203);
						match(EXCEPT);
						setState(2205);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==ALL || _la==DISTINCT) {
							{
							setState(2204);
							_la = _input.LA(1);
							if ( !(_la==ALL || _la==DISTINCT) ) {
							_errHandler.recoverInline(this);
							}
							else {
								if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
								_errHandler.reportMatch(this);
								consume();
							}
							}
						}

						setState(2207);
						queryTerm(0);
						}
						break;
					}
					} 
				}
				setState(2212);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,217,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			unrollRecursionContexts(_parentctx);
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class QueryTermContext extends ParserRuleContext {
		public QueryTermContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_queryTerm; }
	 
		public QueryTermContext() { }
		public void copyFrom(QueryTermContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class QuerySpecificationContext extends QueryTermContext {
		public SelectClauseContext selectClause() {
			return getRuleContext(SelectClauseContext.class,0);
		}
		public FromClauseContext fromClause() {
			return getRuleContext(FromClauseContext.class,0);
		}
		public WhereClauseContext whereClause() {
			return getRuleContext(WhereClauseContext.class,0);
		}
		public GroupByClauseContext groupByClause() {
			return getRuleContext(GroupByClauseContext.class,0);
		}
		public HavingClauseContext havingClause() {
			return getRuleContext(HavingClauseContext.class,0);
		}
		public WindowClauseContext windowClause() {
			return getRuleContext(WindowClauseContext.class,0);
		}
		public QuerySpecificationContext(QueryTermContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitQuerySpecification(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class RecordsQueryContext extends QueryTermContext {
		public RecordsValueConstructorContext recordsValueConstructor() {
			return getRuleContext(RecordsValueConstructorContext.class,0);
		}
		public RecordsQueryContext(QueryTermContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitRecordsQuery(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class WrappedQueryContext extends QueryTermContext {
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public QueryExpressionNoWithContext queryExpressionNoWith() {
			return getRuleContext(QueryExpressionNoWithContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public WrappedQueryContext(QueryTermContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitWrappedQuery(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ValuesQueryContext extends QueryTermContext {
		public TableValueConstructorContext tableValueConstructor() {
			return getRuleContext(TableValueConstructorContext.class,0);
		}
		public ValuesQueryContext(QueryTermContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitValuesQuery(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class IntersectQueryContext extends QueryTermContext {
		public List queryTerm() {
			return getRuleContexts(QueryTermContext.class);
		}
		public QueryTermContext queryTerm(int i) {
			return getRuleContext(QueryTermContext.class,i);
		}
		public TerminalNode INTERSECT() { return getToken(Sql.INTERSECT, 0); }
		public TerminalNode ALL() { return getToken(Sql.ALL, 0); }
		public TerminalNode DISTINCT() { return getToken(Sql.DISTINCT, 0); }
		public IntersectQueryContext(QueryTermContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitIntersectQuery(this);
			else return visitor.visitChildren(this);
		}
	}

	public final QueryTermContext queryTerm() throws RecognitionException {
		return queryTerm(0);
	}

	private QueryTermContext queryTerm(int _p) throws RecognitionException {
		ParserRuleContext _parentctx = _ctx;
		int _parentState = getState();
		QueryTermContext _localctx = new QueryTermContext(_ctx, _parentState);
		QueryTermContext _prevctx = _localctx;
		int _startState = 304;
		enterRecursionRule(_localctx, 304, RULE_queryTerm, _p);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(2252);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case SELECT:
				{
				_localctx = new QuerySpecificationContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;

				setState(2214);
				selectClause();
				setState(2216);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,218,_ctx) ) {
				case 1:
					{
					setState(2215);
					fromClause();
					}
					break;
				}
				setState(2219);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,219,_ctx) ) {
				case 1:
					{
					setState(2218);
					whereClause();
					}
					break;
				}
				setState(2222);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,220,_ctx) ) {
				case 1:
					{
					setState(2221);
					groupByClause();
					}
					break;
				}
				setState(2225);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,221,_ctx) ) {
				case 1:
					{
					setState(2224);
					havingClause();
					}
					break;
				}
				setState(2228);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,222,_ctx) ) {
				case 1:
					{
					setState(2227);
					windowClause();
					}
					break;
				}
				}
				break;
			case FROM:
				{
				_localctx = new QuerySpecificationContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(2230);
				fromClause();
				setState(2232);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,223,_ctx) ) {
				case 1:
					{
					setState(2231);
					whereClause();
					}
					break;
				}
				setState(2235);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,224,_ctx) ) {
				case 1:
					{
					setState(2234);
					groupByClause();
					}
					break;
				}
				setState(2238);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,225,_ctx) ) {
				case 1:
					{
					setState(2237);
					havingClause();
					}
					break;
				}
				setState(2241);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,226,_ctx) ) {
				case 1:
					{
					setState(2240);
					selectClause();
					}
					break;
				}
				setState(2244);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,227,_ctx) ) {
				case 1:
					{
					setState(2243);
					windowClause();
					}
					break;
				}
				}
				break;
			case VALUES:
				{
				_localctx = new ValuesQueryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(2246);
				tableValueConstructor();
				}
				break;
			case RECORDS:
				{
				_localctx = new RecordsQueryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(2247);
				recordsValueConstructor();
				}
				break;
			case LPAREN:
				{
				_localctx = new WrappedQueryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(2248);
				match(LPAREN);
				setState(2249);
				queryExpressionNoWith();
				setState(2250);
				match(RPAREN);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
			_ctx.stop = _input.LT(-1);
			setState(2262);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,230,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					if ( _parseListeners!=null ) triggerExitRuleEvent();
					_prevctx = _localctx;
					{
					{
					_localctx = new IntersectQueryContext(new QueryTermContext(_parentctx, _parentState));
					pushNewRecursionContext(_localctx, _startState, RULE_queryTerm);
					setState(2254);
					if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
					setState(2255);
					match(INTERSECT);
					setState(2257);
					_errHandler.sync(this);
					_la = _input.LA(1);
					if (_la==ALL || _la==DISTINCT) {
						{
						setState(2256);
						_la = _input.LA(1);
						if ( !(_la==ALL || _la==DISTINCT) ) {
						_errHandler.recoverInline(this);
						}
						else {
							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
							_errHandler.reportMatch(this);
							consume();
						}
						}
					}

					setState(2259);
					queryTerm(2);
					}
					} 
				}
				setState(2264);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,230,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			unrollRecursionContexts(_parentctx);
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class OrderByClauseContext extends ParserRuleContext {
		public TerminalNode ORDER() { return getToken(Sql.ORDER, 0); }
		public TerminalNode BY() { return getToken(Sql.BY, 0); }
		public SortSpecificationListContext sortSpecificationList() {
			return getRuleContext(SortSpecificationListContext.class,0);
		}
		public OrderByClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_orderByClause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitOrderByClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final OrderByClauseContext orderByClause() throws RecognitionException {
		OrderByClauseContext _localctx = new OrderByClauseContext(_ctx, getState());
		enterRule(_localctx, 306, RULE_orderByClause);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2265);
			match(ORDER);
			setState(2266);
			match(BY);
			setState(2267);
			sortSpecificationList();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class OffsetAndLimitContext extends ParserRuleContext {
		public ResultOffsetClauseContext resultOffsetClause() {
			return getRuleContext(ResultOffsetClauseContext.class,0);
		}
		public FetchFirstClauseContext fetchFirstClause() {
			return getRuleContext(FetchFirstClauseContext.class,0);
		}
		public OffsetAndLimitContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_offsetAndLimit; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitOffsetAndLimit(this);
			else return visitor.visitChildren(this);
		}
	}

	public final OffsetAndLimitContext offsetAndLimit() throws RecognitionException {
		OffsetAndLimitContext _localctx = new OffsetAndLimitContext(_ctx, getState());
		enterRule(_localctx, 308, RULE_offsetAndLimit);
		int _la;
		try {
			setState(2277);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case OFFSET:
				enterOuterAlt(_localctx, 1);
				{
				setState(2269);
				resultOffsetClause();
				setState(2271);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==FETCH || _la==LIMIT) {
					{
					setState(2270);
					fetchFirstClause();
					}
				}

				}
				break;
			case FETCH:
			case LIMIT:
				enterOuterAlt(_localctx, 2);
				{
				setState(2273);
				fetchFirstClause();
				setState(2275);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==OFFSET) {
					{
					setState(2274);
					resultOffsetClause();
					}
				}

				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ResultOffsetClauseContext extends ParserRuleContext {
		public TerminalNode OFFSET() { return getToken(Sql.OFFSET, 0); }
		public OffsetRowCountContext offsetRowCount() {
			return getRuleContext(OffsetRowCountContext.class,0);
		}
		public TerminalNode ROW() { return getToken(Sql.ROW, 0); }
		public TerminalNode ROWS() { return getToken(Sql.ROWS, 0); }
		public ResultOffsetClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_resultOffsetClause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitResultOffsetClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ResultOffsetClauseContext resultOffsetClause() throws RecognitionException {
		ResultOffsetClauseContext _localctx = new ResultOffsetClauseContext(_ctx, getState());
		enterRule(_localctx, 310, RULE_resultOffsetClause);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2279);
			match(OFFSET);
			setState(2280);
			offsetRowCount();
			setState(2282);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==ROW || _la==ROWS) {
				{
				setState(2281);
				_la = _input.LA(1);
				if ( !(_la==ROW || _la==ROWS) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				}
			}

			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class FetchFirstClauseContext extends ParserRuleContext {
		public TerminalNode FETCH() { return getToken(Sql.FETCH, 0); }
		public TerminalNode ONLY() { return getToken(Sql.ONLY, 0); }
		public TerminalNode FIRST() { return getToken(Sql.FIRST, 0); }
		public TerminalNode NEXT() { return getToken(Sql.NEXT, 0); }
		public TerminalNode ROW() { return getToken(Sql.ROW, 0); }
		public TerminalNode ROWS() { return getToken(Sql.ROWS, 0); }
		public FetchFirstRowCountContext fetchFirstRowCount() {
			return getRuleContext(FetchFirstRowCountContext.class,0);
		}
		public TerminalNode LIMIT() { return getToken(Sql.LIMIT, 0); }
		public FetchFirstClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_fetchFirstClause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitFetchFirstClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final FetchFirstClauseContext fetchFirstClause() throws RecognitionException {
		FetchFirstClauseContext _localctx = new FetchFirstClauseContext(_ctx, getState());
		enterRule(_localctx, 312, RULE_fetchFirstClause);
		int _la;
		try {
			setState(2293);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case FETCH:
				enterOuterAlt(_localctx, 1);
				{
				setState(2284);
				match(FETCH);
				setState(2285);
				_la = _input.LA(1);
				if ( !(_la==FIRST || _la==NEXT) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(2287);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 16928L) != 0)) {
					{
					setState(2286);
					fetchFirstRowCount();
					}
				}

				setState(2289);
				_la = _input.LA(1);
				if ( !(_la==ROW || _la==ROWS) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(2290);
				match(ONLY);
				}
				break;
			case LIMIT:
				enterOuterAlt(_localctx, 2);
				{
				setState(2291);
				match(LIMIT);
				setState(2292);
				fetchFirstRowCount();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class OffsetRowCountContext extends ParserRuleContext {
		public TerminalNode UNSIGNED_INTEGER() { return getToken(Sql.UNSIGNED_INTEGER, 0); }
		public ParameterSpecificationContext parameterSpecification() {
			return getRuleContext(ParameterSpecificationContext.class,0);
		}
		public OffsetRowCountContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_offsetRowCount; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitOffsetRowCount(this);
			else return visitor.visitChildren(this);
		}
	}

	public final OffsetRowCountContext offsetRowCount() throws RecognitionException {
		OffsetRowCountContext _localctx = new OffsetRowCountContext(_ctx, getState());
		enterRule(_localctx, 314, RULE_offsetRowCount);
		try {
			setState(2297);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case UNSIGNED_INTEGER:
				enterOuterAlt(_localctx, 1);
				{
				setState(2295);
				match(UNSIGNED_INTEGER);
				}
				break;
			case POSTGRES_PARAMETER_SPECIFICATION:
			case QUESTION:
				enterOuterAlt(_localctx, 2);
				{
				setState(2296);
				parameterSpecification();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class FetchFirstRowCountContext extends ParserRuleContext {
		public TerminalNode UNSIGNED_INTEGER() { return getToken(Sql.UNSIGNED_INTEGER, 0); }
		public ParameterSpecificationContext parameterSpecification() {
			return getRuleContext(ParameterSpecificationContext.class,0);
		}
		public FetchFirstRowCountContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_fetchFirstRowCount; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitFetchFirstRowCount(this);
			else return visitor.visitChildren(this);
		}
	}

	public final FetchFirstRowCountContext fetchFirstRowCount() throws RecognitionException {
		FetchFirstRowCountContext _localctx = new FetchFirstRowCountContext(_ctx, getState());
		enterRule(_localctx, 316, RULE_fetchFirstRowCount);
		try {
			setState(2301);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case UNSIGNED_INTEGER:
				enterOuterAlt(_localctx, 1);
				{
				setState(2299);
				match(UNSIGNED_INTEGER);
				}
				break;
			case POSTGRES_PARAMETER_SPECIFICATION:
			case QUESTION:
				enterOuterAlt(_localctx, 2);
				{
				setState(2300);
				parameterSpecification();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class SubqueryContext extends ParserRuleContext {
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public QueryExpressionContext queryExpression() {
			return getRuleContext(QueryExpressionContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public SubqueryContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_subquery; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSubquery(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SubqueryContext subquery() throws RecognitionException {
		SubqueryContext _localctx = new SubqueryContext(_ctx, getState());
		enterRule(_localctx, 318, RULE_subquery);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2303);
			match(LPAREN);
			setState(2304);
			queryExpression();
			setState(2305);
			match(RPAREN);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class PredicatePart2Context extends ParserRuleContext {
		public PredicatePart2Context(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_predicatePart2; }
	 
		public PredicatePart2Context() { }
		public void copyFrom(PredicatePart2Context ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class InPredicatePart2Context extends PredicatePart2Context {
		public TerminalNode IN() { return getToken(Sql.IN, 0); }
		public InPredicateValueContext inPredicateValue() {
			return getRuleContext(InPredicateValueContext.class,0);
		}
		public TerminalNode NOT() { return getToken(Sql.NOT, 0); }
		public InPredicatePart2Context(PredicatePart2Context ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitInPredicatePart2(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ComparisonPredicatePart2Context extends PredicatePart2Context {
		public CompOpContext compOp() {
			return getRuleContext(CompOpContext.class,0);
		}
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public ComparisonPredicatePart2Context(PredicatePart2Context ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitComparisonPredicatePart2(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class LikeRegexPredicatePart2Context extends PredicatePart2Context {
		public TerminalNode LIKE_REGEX() { return getToken(Sql.LIKE_REGEX, 0); }
		public XqueryPatternContext xqueryPattern() {
			return getRuleContext(XqueryPatternContext.class,0);
		}
		public TerminalNode NOT() { return getToken(Sql.NOT, 0); }
		public TerminalNode FLAG() { return getToken(Sql.FLAG, 0); }
		public XqueryOptionFlagContext xqueryOptionFlag() {
			return getRuleContext(XqueryOptionFlagContext.class,0);
		}
		public LikeRegexPredicatePart2Context(PredicatePart2Context ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitLikeRegexPredicatePart2(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class NullPredicatePart2Context extends PredicatePart2Context {
		public TerminalNode IS() { return getToken(Sql.IS, 0); }
		public TerminalNode NULL() { return getToken(Sql.NULL, 0); }
		public TerminalNode NOT() { return getToken(Sql.NOT, 0); }
		public NullPredicatePart2Context(PredicatePart2Context ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitNullPredicatePart2(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class QuantifiedComparisonPredicatePart2Context extends PredicatePart2Context {
		public CompOpContext compOp() {
			return getRuleContext(CompOpContext.class,0);
		}
		public QuantifierContext quantifier() {
			return getRuleContext(QuantifierContext.class,0);
		}
		public QuantifiedComparisonPredicatePart3Context quantifiedComparisonPredicatePart3() {
			return getRuleContext(QuantifiedComparisonPredicatePart3Context.class,0);
		}
		public QuantifiedComparisonPredicatePart2Context(PredicatePart2Context ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitQuantifiedComparisonPredicatePart2(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class BetweenPredicatePart2Context extends PredicatePart2Context {
		public TerminalNode BETWEEN() { return getToken(Sql.BETWEEN, 0); }
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public TerminalNode AND() { return getToken(Sql.AND, 0); }
		public TerminalNode NOT() { return getToken(Sql.NOT, 0); }
		public TerminalNode ASYMMETRIC() { return getToken(Sql.ASYMMETRIC, 0); }
		public TerminalNode SYMMETRIC() { return getToken(Sql.SYMMETRIC, 0); }
		public BetweenPredicatePart2Context(PredicatePart2Context ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitBetweenPredicatePart2(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class PostgresRegexPredicatePart2Context extends PredicatePart2Context {
		public PostgresRegexOperatorContext postgresRegexOperator() {
			return getRuleContext(PostgresRegexOperatorContext.class,0);
		}
		public XqueryPatternContext xqueryPattern() {
			return getRuleContext(XqueryPatternContext.class,0);
		}
		public PostgresRegexPredicatePart2Context(PredicatePart2Context ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitPostgresRegexPredicatePart2(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class LikePredicatePart2Context extends PredicatePart2Context {
		public TerminalNode LIKE() { return getToken(Sql.LIKE, 0); }
		public LikePatternContext likePattern() {
			return getRuleContext(LikePatternContext.class,0);
		}
		public TerminalNode NOT() { return getToken(Sql.NOT, 0); }
		public TerminalNode ESCAPE() { return getToken(Sql.ESCAPE, 0); }
		public LikeEscapeContext likeEscape() {
			return getRuleContext(LikeEscapeContext.class,0);
		}
		public LikePredicatePart2Context(PredicatePart2Context ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitLikePredicatePart2(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PredicatePart2Context predicatePart2() throws RecognitionException {
		PredicatePart2Context _localctx = new PredicatePart2Context(_ctx, getState());
		enterRule(_localctx, 320, RULE_predicatePart2);
		int _la;
		try {
			setState(2356);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,247,_ctx) ) {
			case 1:
				_localctx = new ComparisonPredicatePart2Context(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(2307);
				compOp();
				setState(2308);
				expr(0);
				}
				break;
			case 2:
				_localctx = new BetweenPredicatePart2Context(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(2311);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NOT) {
					{
					setState(2310);
					match(NOT);
					}
				}

				setState(2313);
				match(BETWEEN);
				setState(2315);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==ASYMMETRIC || _la==SYMMETRIC) {
					{
					setState(2314);
					_la = _input.LA(1);
					if ( !(_la==ASYMMETRIC || _la==SYMMETRIC) ) {
					_errHandler.recoverInline(this);
					}
					else {
						if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
						_errHandler.reportMatch(this);
						consume();
					}
					}
				}

				setState(2317);
				expr(0);
				setState(2318);
				match(AND);
				setState(2319);
				expr(0);
				}
				break;
			case 3:
				_localctx = new InPredicatePart2Context(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(2322);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NOT) {
					{
					setState(2321);
					match(NOT);
					}
				}

				setState(2324);
				match(IN);
				setState(2325);
				inPredicateValue();
				}
				break;
			case 4:
				_localctx = new LikePredicatePart2Context(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(2327);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NOT) {
					{
					setState(2326);
					match(NOT);
					}
				}

				setState(2329);
				match(LIKE);
				setState(2330);
				likePattern();
				setState(2333);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==ESCAPE) {
					{
					setState(2331);
					match(ESCAPE);
					setState(2332);
					likeEscape();
					}
				}

				}
				break;
			case 5:
				_localctx = new LikeRegexPredicatePart2Context(_localctx);
				enterOuterAlt(_localctx, 5);
				{
				setState(2336);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NOT) {
					{
					setState(2335);
					match(NOT);
					}
				}

				setState(2338);
				match(LIKE_REGEX);
				setState(2339);
				xqueryPattern();
				setState(2342);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==FLAG) {
					{
					setState(2340);
					match(FLAG);
					setState(2341);
					xqueryOptionFlag();
					}
				}

				}
				break;
			case 6:
				_localctx = new PostgresRegexPredicatePart2Context(_localctx);
				enterOuterAlt(_localctx, 6);
				{
				setState(2344);
				postgresRegexOperator();
				setState(2345);
				xqueryPattern();
				}
				break;
			case 7:
				_localctx = new NullPredicatePart2Context(_localctx);
				enterOuterAlt(_localctx, 7);
				{
				setState(2347);
				match(IS);
				setState(2349);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NOT) {
					{
					setState(2348);
					match(NOT);
					}
				}

				setState(2351);
				match(NULL);
				}
				break;
			case 8:
				_localctx = new QuantifiedComparisonPredicatePart2Context(_localctx);
				enterOuterAlt(_localctx, 8);
				{
				setState(2352);
				compOp();
				setState(2353);
				quantifier();
				setState(2354);
				quantifiedComparisonPredicatePart3();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class QuantifiedComparisonPredicatePart3Context extends ParserRuleContext {
		public QuantifiedComparisonPredicatePart3Context(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_quantifiedComparisonPredicatePart3; }
	 
		public QuantifiedComparisonPredicatePart3Context() { }
		public void copyFrom(QuantifiedComparisonPredicatePart3Context ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class QuantifiedComparisonExprContext extends QuantifiedComparisonPredicatePart3Context {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public QuantifiedComparisonExprContext(QuantifiedComparisonPredicatePart3Context ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitQuantifiedComparisonExpr(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class QuantifiedComparisonSubqueryContext extends QuantifiedComparisonPredicatePart3Context {
		public SubqueryContext subquery() {
			return getRuleContext(SubqueryContext.class,0);
		}
		public QuantifiedComparisonSubqueryContext(QuantifiedComparisonPredicatePart3Context ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitQuantifiedComparisonSubquery(this);
			else return visitor.visitChildren(this);
		}
	}

	public final QuantifiedComparisonPredicatePart3Context quantifiedComparisonPredicatePart3() throws RecognitionException {
		QuantifiedComparisonPredicatePart3Context _localctx = new QuantifiedComparisonPredicatePart3Context(_ctx, getState());
		enterRule(_localctx, 322, RULE_quantifiedComparisonPredicatePart3);
		try {
			setState(2360);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,248,_ctx) ) {
			case 1:
				_localctx = new QuantifiedComparisonSubqueryContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(2358);
				subquery();
				}
				break;
			case 2:
				_localctx = new QuantifiedComparisonExprContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(2359);
				expr(0);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class CompOpContext extends ParserRuleContext {
		public TerminalNode EQUAL() { return getToken(Sql.EQUAL, 0); }
		public TerminalNode NOT_EQUAL() { return getToken(Sql.NOT_EQUAL, 0); }
		public TerminalNode LT_GT() { return getToken(Sql.LT_GT, 0); }
		public TerminalNode LT() { return getToken(Sql.LT, 0); }
		public TerminalNode GT() { return getToken(Sql.GT, 0); }
		public TerminalNode LE() { return getToken(Sql.LE, 0); }
		public TerminalNode GE() { return getToken(Sql.GE, 0); }
		public CompOpContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_compOp; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitCompOp(this);
			else return visitor.visitChildren(this);
		}
	}

	public final CompOpContext compOp() throws RecognitionException {
		CompOpContext _localctx = new CompOpContext(_ctx, getState());
		enterRule(_localctx, 324, RULE_compOp);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2362);
			_la = _input.LA(1);
			if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 545460846592L) != 0)) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class InPredicateValueContext extends ParserRuleContext {
		public InPredicateValueContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_inPredicateValue; }
	 
		public InPredicateValueContext() { }
		public void copyFrom(InPredicateValueContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class InSubqueryContext extends InPredicateValueContext {
		public SubqueryContext subquery() {
			return getRuleContext(SubqueryContext.class,0);
		}
		public InSubqueryContext(InPredicateValueContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitInSubquery(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class InRowValueListContext extends InPredicateValueContext {
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public RowValueListContext rowValueList() {
			return getRuleContext(RowValueListContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public InRowValueListContext(InPredicateValueContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitInRowValueList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final InPredicateValueContext inPredicateValue() throws RecognitionException {
		InPredicateValueContext _localctx = new InPredicateValueContext(_ctx, getState());
		enterRule(_localctx, 326, RULE_inPredicateValue);
		try {
			setState(2369);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,249,_ctx) ) {
			case 1:
				_localctx = new InSubqueryContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(2364);
				subquery();
				}
				break;
			case 2:
				_localctx = new InRowValueListContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(2365);
				match(LPAREN);
				setState(2366);
				rowValueList();
				setState(2367);
				match(RPAREN);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class LikePatternContext extends ParserRuleContext {
		public ExprPrimaryContext exprPrimary() {
			return getRuleContext(ExprPrimaryContext.class,0);
		}
		public LikePatternContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_likePattern; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitLikePattern(this);
			else return visitor.visitChildren(this);
		}
	}

	public final LikePatternContext likePattern() throws RecognitionException {
		LikePatternContext _localctx = new LikePatternContext(_ctx, getState());
		enterRule(_localctx, 328, RULE_likePattern);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2371);
			exprPrimary(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class LikeEscapeContext extends ParserRuleContext {
		public ExprPrimaryContext exprPrimary() {
			return getRuleContext(ExprPrimaryContext.class,0);
		}
		public LikeEscapeContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_likeEscape; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitLikeEscape(this);
			else return visitor.visitChildren(this);
		}
	}

	public final LikeEscapeContext likeEscape() throws RecognitionException {
		LikeEscapeContext _localctx = new LikeEscapeContext(_ctx, getState());
		enterRule(_localctx, 330, RULE_likeEscape);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2373);
			exprPrimary(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class XqueryPatternContext extends ParserRuleContext {
		public ExprPrimaryContext exprPrimary() {
			return getRuleContext(ExprPrimaryContext.class,0);
		}
		public XqueryPatternContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_xqueryPattern; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitXqueryPattern(this);
			else return visitor.visitChildren(this);
		}
	}

	public final XqueryPatternContext xqueryPattern() throws RecognitionException {
		XqueryPatternContext _localctx = new XqueryPatternContext(_ctx, getState());
		enterRule(_localctx, 332, RULE_xqueryPattern);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2375);
			exprPrimary(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class XqueryOptionFlagContext extends ParserRuleContext {
		public ExprPrimaryContext exprPrimary() {
			return getRuleContext(ExprPrimaryContext.class,0);
		}
		public XqueryOptionFlagContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_xqueryOptionFlag; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitXqueryOptionFlag(this);
			else return visitor.visitChildren(this);
		}
	}

	public final XqueryOptionFlagContext xqueryOptionFlag() throws RecognitionException {
		XqueryOptionFlagContext _localctx = new XqueryOptionFlagContext(_ctx, getState());
		enterRule(_localctx, 334, RULE_xqueryOptionFlag);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2377);
			exprPrimary(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class PostgresRegexOperatorContext extends ParserRuleContext {
		public TerminalNode TILDE() { return getToken(Sql.TILDE, 0); }
		public TerminalNode PG_REGEX_I() { return getToken(Sql.PG_REGEX_I, 0); }
		public TerminalNode PG_NOT_REGEX() { return getToken(Sql.PG_NOT_REGEX, 0); }
		public TerminalNode PG_NOT_REGEX_I() { return getToken(Sql.PG_NOT_REGEX_I, 0); }
		public PostgresRegexOperatorContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_postgresRegexOperator; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitPostgresRegexOperator(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PostgresRegexOperatorContext postgresRegexOperator() throws RecognitionException {
		PostgresRegexOperatorContext _localctx = new PostgresRegexOperatorContext(_ctx, getState());
		enterRule(_localctx, 336, RULE_postgresRegexOperator);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2379);
			_la = _input.LA(1);
			if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 7696585588736L) != 0)) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class QuantifierContext extends ParserRuleContext {
		public TerminalNode ALL() { return getToken(Sql.ALL, 0); }
		public TerminalNode SOME() { return getToken(Sql.SOME, 0); }
		public TerminalNode ANY() { return getToken(Sql.ANY, 0); }
		public QuantifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_quantifier; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitQuantifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final QuantifierContext quantifier() throws RecognitionException {
		QuantifierContext _localctx = new QuantifierContext(_ctx, getState());
		enterRule(_localctx, 338, RULE_quantifier);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2381);
			_la = _input.LA(1);
			if ( !(_la==ALL || _la==ANY || _la==SOME) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class SearchConditionContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public SearchConditionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_searchCondition; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSearchCondition(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SearchConditionContext searchCondition() throws RecognitionException {
		SearchConditionContext _localctx = new SearchConditionContext(_ctx, getState());
		enterRule(_localctx, 340, RULE_searchCondition);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2383);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class UserStringContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public UserStringContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_userString; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitUserString(this);
			else return visitor.visitChildren(this);
		}
	}

	public final UserStringContext userString() throws RecognitionException {
		UserStringContext _localctx = new UserStringContext(_ctx, getState());
		enterRule(_localctx, 342, RULE_userString);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2385);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class TableStringContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TableStringContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_tableString; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitTableString(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TableStringContext tableString() throws RecognitionException {
		TableStringContext _localctx = new TableStringContext(_ctx, getState());
		enterRule(_localctx, 344, RULE_tableString);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2387);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class SchemaStringContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public SchemaStringContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_schemaString; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSchemaString(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SchemaStringContext schemaString() throws RecognitionException {
		SchemaStringContext _localctx = new SchemaStringContext(_ctx, getState());
		enterRule(_localctx, 346, RULE_schemaString);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2389);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class PrivilegeStringContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public PrivilegeStringContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_privilegeString; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitPrivilegeString(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PrivilegeStringContext privilegeString() throws RecognitionException {
		PrivilegeStringContext _localctx = new PrivilegeStringContext(_ctx, getState());
		enterRule(_localctx, 348, RULE_privilegeString);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2391);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class AggregateFunctionContext extends ParserRuleContext {
		public AggregateFunctionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_aggregateFunction; }
	 
		public AggregateFunctionContext() { }
		public void copyFrom(AggregateFunctionContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class CountStarFunctionContext extends AggregateFunctionContext {
		public TerminalNode COUNT() { return getToken(Sql.COUNT, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public TerminalNode ASTERISK() { return getToken(Sql.ASTERISK, 0); }
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public CountStarFunctionContext(AggregateFunctionContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitCountStarFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class SetFunctionContext extends AggregateFunctionContext {
		public SetFunctionTypeContext setFunctionType() {
			return getRuleContext(SetFunctionTypeContext.class,0);
		}
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public SetQuantifierContext setQuantifier() {
			return getRuleContext(SetQuantifierContext.class,0);
		}
		public SetFunctionContext(AggregateFunctionContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSetFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ArrayAggFunctionContext extends AggregateFunctionContext {
		public TerminalNode ARRAY_AGG() { return getToken(Sql.ARRAY_AGG, 0); }
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public TerminalNode ORDER() { return getToken(Sql.ORDER, 0); }
		public TerminalNode BY() { return getToken(Sql.BY, 0); }
		public SortSpecificationListContext sortSpecificationList() {
			return getRuleContext(SortSpecificationListContext.class,0);
		}
		public ArrayAggFunctionContext(AggregateFunctionContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitArrayAggFunction(this);
			else return visitor.visitChildren(this);
		}
	}

	public final AggregateFunctionContext aggregateFunction() throws RecognitionException {
		AggregateFunctionContext _localctx = new AggregateFunctionContext(_ctx, getState());
		enterRule(_localctx, 350, RULE_aggregateFunction);
		int _la;
		try {
			setState(2415);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,252,_ctx) ) {
			case 1:
				_localctx = new CountStarFunctionContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(2393);
				match(COUNT);
				setState(2394);
				match(LPAREN);
				setState(2395);
				match(ASTERISK);
				setState(2396);
				match(RPAREN);
				}
				break;
			case 2:
				_localctx = new ArrayAggFunctionContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(2397);
				match(ARRAY_AGG);
				setState(2398);
				match(LPAREN);
				setState(2399);
				expr(0);
				setState(2403);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==ORDER) {
					{
					setState(2400);
					match(ORDER);
					setState(2401);
					match(BY);
					setState(2402);
					sortSpecificationList();
					}
				}

				setState(2405);
				match(RPAREN);
				}
				break;
			case 3:
				_localctx = new SetFunctionContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(2407);
				setFunctionType();
				setState(2408);
				match(LPAREN);
				setState(2410);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==ALL || _la==DISTINCT) {
					{
					setState(2409);
					setQuantifier();
					}
				}

				setState(2412);
				expr(0);
				setState(2413);
				match(RPAREN);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class SetFunctionTypeContext extends ParserRuleContext {
		public TerminalNode AVG() { return getToken(Sql.AVG, 0); }
		public TerminalNode MAX() { return getToken(Sql.MAX, 0); }
		public TerminalNode MIN() { return getToken(Sql.MIN, 0); }
		public TerminalNode SUM() { return getToken(Sql.SUM, 0); }
		public TerminalNode COUNT() { return getToken(Sql.COUNT, 0); }
		public TerminalNode EVERY() { return getToken(Sql.EVERY, 0); }
		public TerminalNode BOOL_AND() { return getToken(Sql.BOOL_AND, 0); }
		public TerminalNode BOOL_OR() { return getToken(Sql.BOOL_OR, 0); }
		public TerminalNode STDDEV_POP() { return getToken(Sql.STDDEV_POP, 0); }
		public TerminalNode STDDEV_SAMP() { return getToken(Sql.STDDEV_SAMP, 0); }
		public TerminalNode VAR_SAMP() { return getToken(Sql.VAR_SAMP, 0); }
		public TerminalNode VAR_POP() { return getToken(Sql.VAR_POP, 0); }
		public SetFunctionTypeContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_setFunctionType; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSetFunctionType(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SetFunctionTypeContext setFunctionType() throws RecognitionException {
		SetFunctionTypeContext _localctx = new SetFunctionTypeContext(_ctx, getState());
		enterRule(_localctx, 352, RULE_setFunctionType);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2417);
			_la = _input.LA(1);
			if ( !(((((_la - 60)) & ~0x3f) == 0 && ((1L << (_la - 60)) & 2305843009482130177L) != 0) || _la==MAX || _la==MIN || ((((_la - 270)) & ~0x3f) == 0 && ((1L << (_la - 270)) & 3298534883363L) != 0)) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class SetQuantifierContext extends ParserRuleContext {
		public TerminalNode DISTINCT() { return getToken(Sql.DISTINCT, 0); }
		public TerminalNode ALL() { return getToken(Sql.ALL, 0); }
		public SetQuantifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_setQuantifier; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSetQuantifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SetQuantifierContext setQuantifier() throws RecognitionException {
		SetQuantifierContext _localctx = new SetQuantifierContext(_ctx, getState());
		enterRule(_localctx, 354, RULE_setQuantifier);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2419);
			_la = _input.LA(1);
			if ( !(_la==ALL || _la==DISTINCT) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class SortSpecificationListContext extends ParserRuleContext {
		public List sortSpecification() {
			return getRuleContexts(SortSpecificationContext.class);
		}
		public SortSpecificationContext sortSpecification(int i) {
			return getRuleContext(SortSpecificationContext.class,i);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public SortSpecificationListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_sortSpecificationList; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSortSpecificationList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SortSpecificationListContext sortSpecificationList() throws RecognitionException {
		SortSpecificationListContext _localctx = new SortSpecificationListContext(_ctx, getState());
		enterRule(_localctx, 356, RULE_sortSpecificationList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2421);
			sortSpecification();
			setState(2426);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(2422);
				match(COMMA);
				setState(2423);
				sortSpecification();
				}
				}
				setState(2428);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class SortSpecificationContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public OrderingSpecificationContext orderingSpecification() {
			return getRuleContext(OrderingSpecificationContext.class,0);
		}
		public NullOrderingContext nullOrdering() {
			return getRuleContext(NullOrderingContext.class,0);
		}
		public SortSpecificationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_sortSpecification; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSortSpecification(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SortSpecificationContext sortSpecification() throws RecognitionException {
		SortSpecificationContext _localctx = new SortSpecificationContext(_ctx, getState());
		enterRule(_localctx, 358, RULE_sortSpecification);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2429);
			expr(0);
			setState(2431);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==ASC || _la==DESC) {
				{
				setState(2430);
				orderingSpecification();
				}
			}

			setState(2434);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==NULLS) {
				{
				setState(2433);
				nullOrdering();
				}
			}

			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class OrderingSpecificationContext extends ParserRuleContext {
		public TerminalNode ASC() { return getToken(Sql.ASC, 0); }
		public TerminalNode DESC() { return getToken(Sql.DESC, 0); }
		public OrderingSpecificationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_orderingSpecification; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitOrderingSpecification(this);
			else return visitor.visitChildren(this);
		}
	}

	public final OrderingSpecificationContext orderingSpecification() throws RecognitionException {
		OrderingSpecificationContext _localctx = new OrderingSpecificationContext(_ctx, getState());
		enterRule(_localctx, 360, RULE_orderingSpecification);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2436);
			_la = _input.LA(1);
			if ( !(_la==ASC || _la==DESC) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class NullOrderingContext extends ParserRuleContext {
		public TerminalNode NULLS() { return getToken(Sql.NULLS, 0); }
		public TerminalNode FIRST() { return getToken(Sql.FIRST, 0); }
		public TerminalNode LAST() { return getToken(Sql.LAST, 0); }
		public NullOrderingContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_nullOrdering; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitNullOrdering(this);
			else return visitor.visitChildren(this);
		}
	}

	public final NullOrderingContext nullOrdering() throws RecognitionException {
		NullOrderingContext _localctx = new NullOrderingContext(_ctx, getState());
		enterRule(_localctx, 362, RULE_nullOrdering);
		try {
			setState(2442);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,256,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(2438);
				match(NULLS);
				setState(2439);
				match(FIRST);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(2440);
				match(NULLS);
				setState(2441);
				match(LAST);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ReturningStatementContext extends ParserRuleContext {
		public ReturningStatementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_returningStatement; }
	 
		public ReturningStatementContext() { }
		public void copyFrom(ReturningStatementContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class DmlReturningStatementContext extends ReturningStatementContext {
		public TerminalNode RETURNING() { return getToken(Sql.RETURNING, 0); }
		public SelectListContext selectList() {
			return getRuleContext(SelectListContext.class,0);
		}
		public DmlReturningStatementContext(ReturningStatementContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitDmlReturningStatement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ReturningStatementContext returningStatement() throws RecognitionException {
		ReturningStatementContext _localctx = new ReturningStatementContext(_ctx, getState());
		enterRule(_localctx, 364, RULE_returningStatement);
		try {
			_localctx = new DmlReturningStatementContext(_localctx);
			enterOuterAlt(_localctx, 1);
			{
			setState(2444);
			match(RETURNING);
			setState(2445);
			selectList();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class DeleteStatementSearchedContext extends ParserRuleContext {
		public TerminalNode DELETE() { return getToken(Sql.DELETE, 0); }
		public TerminalNode FROM() { return getToken(Sql.FROM, 0); }
		public TableNameContext tableName() {
			return getRuleContext(TableNameContext.class,0);
		}
		public DmlStatementValidTimeExtentsContext dmlStatementValidTimeExtents() {
			return getRuleContext(DmlStatementValidTimeExtentsContext.class,0);
		}
		public CorrelationNameContext correlationName() {
			return getRuleContext(CorrelationNameContext.class,0);
		}
		public TerminalNode WHERE() { return getToken(Sql.WHERE, 0); }
		public SearchConditionContext searchCondition() {
			return getRuleContext(SearchConditionContext.class,0);
		}
		public ReturningStatementContext returningStatement() {
			return getRuleContext(ReturningStatementContext.class,0);
		}
		public TerminalNode AS() { return getToken(Sql.AS, 0); }
		public DeleteStatementSearchedContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_deleteStatementSearched; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitDeleteStatementSearched(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DeleteStatementSearchedContext deleteStatementSearched() throws RecognitionException {
		DeleteStatementSearchedContext _localctx = new DeleteStatementSearchedContext(_ctx, getState());
		enterRule(_localctx, 366, RULE_deleteStatementSearched);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2447);
			match(DELETE);
			setState(2448);
			match(FROM);
			setState(2449);
			tableName();
			setState(2451);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==FOR) {
				{
				setState(2450);
				dmlStatementValidTimeExtents();
				}
			}

			setState(2457);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3467806897447370752L) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & 11400836069523475L) != 0) || ((((_la - 152)) & ~0x3f) == 0 && ((1L << (_la - 152)) & 36507230209L) != 0) || ((((_la - 251)) & ~0x3f) == 0 && ((1L << (_la - 251)) & 4072450366241506369L) != 0) || _la==REGULAR_IDENTIFIER || _la==DELIMITED_IDENTIFIER) {
				{
				setState(2454);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==AS) {
					{
					setState(2453);
					match(AS);
					}
				}

				setState(2456);
				correlationName();
				}
			}

			setState(2461);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==WHERE) {
				{
				setState(2459);
				match(WHERE);
				setState(2460);
				searchCondition();
				}
			}

			setState(2464);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==RETURNING) {
				{
				setState(2463);
				returningStatement();
				}
			}

			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class DmlStatementValidTimeExtentsContext extends ParserRuleContext {
		public DmlStatementValidTimeExtentsContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_dmlStatementValidTimeExtents; }
	 
		public DmlStatementValidTimeExtentsContext() { }
		public void copyFrom(DmlStatementValidTimeExtentsContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class DmlStatementValidTimeAllContext extends DmlStatementValidTimeExtentsContext {
		public TerminalNode FOR() { return getToken(Sql.FOR, 0); }
		public TerminalNode ALL() { return getToken(Sql.ALL, 0); }
		public TerminalNode VALID_TIME() { return getToken(Sql.VALID_TIME, 0); }
		public DmlStatementValidTimeAllContext(DmlStatementValidTimeExtentsContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitDmlStatementValidTimeAll(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class DmlStatementValidTimePortionContext extends DmlStatementValidTimeExtentsContext {
		public ExprContext from;
		public ExprContext to;
		public TerminalNode FOR() { return getToken(Sql.FOR, 0); }
		public TerminalNode VALID_TIME() { return getToken(Sql.VALID_TIME, 0); }
		public TerminalNode FROM() { return getToken(Sql.FROM, 0); }
		public List expr() {
			return getRuleContexts(ExprContext.class);
		}
		public ExprContext expr(int i) {
			return getRuleContext(ExprContext.class,i);
		}
		public TerminalNode PORTION() { return getToken(Sql.PORTION, 0); }
		public TerminalNode OF() { return getToken(Sql.OF, 0); }
		public TerminalNode TO() { return getToken(Sql.TO, 0); }
		public DmlStatementValidTimePortionContext(DmlStatementValidTimeExtentsContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitDmlStatementValidTimePortion(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DmlStatementValidTimeExtentsContext dmlStatementValidTimeExtents() throws RecognitionException {
		DmlStatementValidTimeExtentsContext _localctx = new DmlStatementValidTimeExtentsContext(_ctx, getState());
		enterRule(_localctx, 368, RULE_dmlStatementValidTimeExtents);
		int _la;
		try {
			setState(2485);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,265,_ctx) ) {
			case 1:
				_localctx = new DmlStatementValidTimePortionContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(2466);
				match(FOR);
				setState(2469);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==PORTION) {
					{
					setState(2467);
					match(PORTION);
					setState(2468);
					match(OF);
					}
				}

				setState(2471);
				match(VALID_TIME);
				setState(2472);
				match(FROM);
				setState(2473);
				((DmlStatementValidTimePortionContext)_localctx).from = expr(0);
				setState(2476);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==TO) {
					{
					setState(2474);
					match(TO);
					setState(2475);
					((DmlStatementValidTimePortionContext)_localctx).to = expr(0);
					}
				}

				}
				break;
			case 2:
				_localctx = new DmlStatementValidTimeAllContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(2478);
				match(FOR);
				setState(2483);
				_errHandler.sync(this);
				switch (_input.LA(1)) {
				case ALL:
					{
					setState(2479);
					match(ALL);
					setState(2480);
					match(VALID_TIME);
					}
					break;
				case VALID_TIME:
					{
					setState(2481);
					match(VALID_TIME);
					setState(2482);
					match(ALL);
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class EraseStatementSearchedContext extends ParserRuleContext {
		public TerminalNode ERASE() { return getToken(Sql.ERASE, 0); }
		public TerminalNode FROM() { return getToken(Sql.FROM, 0); }
		public TableNameContext tableName() {
			return getRuleContext(TableNameContext.class,0);
		}
		public CorrelationNameContext correlationName() {
			return getRuleContext(CorrelationNameContext.class,0);
		}
		public TerminalNode WHERE() { return getToken(Sql.WHERE, 0); }
		public SearchConditionContext searchCondition() {
			return getRuleContext(SearchConditionContext.class,0);
		}
		public TerminalNode AS() { return getToken(Sql.AS, 0); }
		public EraseStatementSearchedContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_eraseStatementSearched; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitEraseStatementSearched(this);
			else return visitor.visitChildren(this);
		}
	}

	public final EraseStatementSearchedContext eraseStatementSearched() throws RecognitionException {
		EraseStatementSearchedContext _localctx = new EraseStatementSearchedContext(_ctx, getState());
		enterRule(_localctx, 370, RULE_eraseStatementSearched);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2487);
			match(ERASE);
			setState(2488);
			match(FROM);
			setState(2489);
			tableName();
			setState(2494);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3467806897447370752L) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & 11400836069523475L) != 0) || ((((_la - 152)) & ~0x3f) == 0 && ((1L << (_la - 152)) & 36507230209L) != 0) || ((((_la - 251)) & ~0x3f) == 0 && ((1L << (_la - 251)) & 4072450366241506369L) != 0) || _la==REGULAR_IDENTIFIER || _la==DELIMITED_IDENTIFIER) {
				{
				setState(2491);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==AS) {
					{
					setState(2490);
					match(AS);
					}
				}

				setState(2493);
				correlationName();
				}
			}

			setState(2498);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==WHERE) {
				{
				setState(2496);
				match(WHERE);
				setState(2497);
				searchCondition();
				}
			}

			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class InsertStatementContext extends ParserRuleContext {
		public TerminalNode INSERT() { return getToken(Sql.INSERT, 0); }
		public TerminalNode INTO() { return getToken(Sql.INTO, 0); }
		public TableNameContext tableName() {
			return getRuleContext(TableNameContext.class,0);
		}
		public InsertColumnsAndSourceContext insertColumnsAndSource() {
			return getRuleContext(InsertColumnsAndSourceContext.class,0);
		}
		public ReturningStatementContext returningStatement() {
			return getRuleContext(ReturningStatementContext.class,0);
		}
		public InsertStatementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_insertStatement; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitInsertStatement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final InsertStatementContext insertStatement() throws RecognitionException {
		InsertStatementContext _localctx = new InsertStatementContext(_ctx, getState());
		enterRule(_localctx, 372, RULE_insertStatement);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2500);
			match(INSERT);
			setState(2501);
			match(INTO);
			setState(2502);
			tableName();
			setState(2503);
			insertColumnsAndSource();
			setState(2505);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==RETURNING) {
				{
				setState(2504);
				returningStatement();
				}
			}

			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class InsertColumnsAndSourceContext extends ParserRuleContext {
		public InsertColumnsAndSourceContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_insertColumnsAndSource; }
	 
		public InsertColumnsAndSourceContext() { }
		public void copyFrom(InsertColumnsAndSourceContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class InsertRecordsContext extends InsertColumnsAndSourceContext {
		public RecordsValueConstructorContext recordsValueConstructor() {
			return getRuleContext(RecordsValueConstructorContext.class,0);
		}
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ColumnNameListContext columnNameList() {
			return getRuleContext(ColumnNameListContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public InsertRecordsContext(InsertColumnsAndSourceContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitInsertRecords(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class InsertFromSubqueryContext extends InsertColumnsAndSourceContext {
		public QueryExpressionContext queryExpression() {
			return getRuleContext(QueryExpressionContext.class,0);
		}
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ColumnNameListContext columnNameList() {
			return getRuleContext(ColumnNameListContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public InsertFromSubqueryContext(InsertColumnsAndSourceContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitInsertFromSubquery(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class InsertValuesContext extends InsertColumnsAndSourceContext {
		public TableValueConstructorContext tableValueConstructor() {
			return getRuleContext(TableValueConstructorContext.class,0);
		}
		public TerminalNode LPAREN() { return getToken(Sql.LPAREN, 0); }
		public ColumnNameListContext columnNameList() {
			return getRuleContext(ColumnNameListContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(Sql.RPAREN, 0); }
		public InsertValuesContext(InsertColumnsAndSourceContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitInsertValues(this);
			else return visitor.visitChildren(this);
		}
	}

	public final InsertColumnsAndSourceContext insertColumnsAndSource() throws RecognitionException {
		InsertColumnsAndSourceContext _localctx = new InsertColumnsAndSourceContext(_ctx, getState());
		enterRule(_localctx, 374, RULE_insertColumnsAndSource);
		int _la;
		try {
			setState(2528);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,273,_ctx) ) {
			case 1:
				_localctx = new InsertValuesContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(2511);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==LPAREN) {
					{
					setState(2507);
					match(LPAREN);
					setState(2508);
					columnNameList();
					setState(2509);
					match(RPAREN);
					}
				}

				setState(2513);
				tableValueConstructor();
				}
				break;
			case 2:
				_localctx = new InsertRecordsContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(2518);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==LPAREN) {
					{
					setState(2514);
					match(LPAREN);
					setState(2515);
					columnNameList();
					setState(2516);
					match(RPAREN);
					}
				}

				setState(2520);
				recordsValueConstructor();
				}
				break;
			case 3:
				_localctx = new InsertFromSubqueryContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(2525);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,272,_ctx) ) {
				case 1:
					{
					setState(2521);
					match(LPAREN);
					setState(2522);
					columnNameList();
					setState(2523);
					match(RPAREN);
					}
					break;
				}
				setState(2527);
				queryExpression();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class UpdateStatementSearchedContext extends ParserRuleContext {
		public TerminalNode UPDATE() { return getToken(Sql.UPDATE, 0); }
		public TableNameContext tableName() {
			return getRuleContext(TableNameContext.class,0);
		}
		public TerminalNode SET() { return getToken(Sql.SET, 0); }
		public SetClauseListContext setClauseList() {
			return getRuleContext(SetClauseListContext.class,0);
		}
		public DmlStatementValidTimeExtentsContext dmlStatementValidTimeExtents() {
			return getRuleContext(DmlStatementValidTimeExtentsContext.class,0);
		}
		public CorrelationNameContext correlationName() {
			return getRuleContext(CorrelationNameContext.class,0);
		}
		public TerminalNode WHERE() { return getToken(Sql.WHERE, 0); }
		public SearchConditionContext searchCondition() {
			return getRuleContext(SearchConditionContext.class,0);
		}
		public ReturningStatementContext returningStatement() {
			return getRuleContext(ReturningStatementContext.class,0);
		}
		public TerminalNode AS() { return getToken(Sql.AS, 0); }
		public UpdateStatementSearchedContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_updateStatementSearched; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitUpdateStatementSearched(this);
			else return visitor.visitChildren(this);
		}
	}

	public final UpdateStatementSearchedContext updateStatementSearched() throws RecognitionException {
		UpdateStatementSearchedContext _localctx = new UpdateStatementSearchedContext(_ctx, getState());
		enterRule(_localctx, 376, RULE_updateStatementSearched);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2530);
			match(UPDATE);
			setState(2531);
			tableName();
			setState(2533);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==FOR) {
				{
				setState(2532);
				dmlStatementValidTimeExtents();
				}
			}

			setState(2539);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3467806897447370752L) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & 11400836069523475L) != 0) || ((((_la - 152)) & ~0x3f) == 0 && ((1L << (_la - 152)) & 36507230209L) != 0) || ((((_la - 251)) & ~0x3f) == 0 && ((1L << (_la - 251)) & 4072450366241506369L) != 0) || _la==REGULAR_IDENTIFIER || _la==DELIMITED_IDENTIFIER) {
				{
				setState(2536);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==AS) {
					{
					setState(2535);
					match(AS);
					}
				}

				setState(2538);
				correlationName();
				}
			}

			setState(2541);
			match(SET);
			setState(2542);
			setClauseList();
			setState(2545);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==WHERE) {
				{
				setState(2543);
				match(WHERE);
				setState(2544);
				searchCondition();
				}
			}

			setState(2548);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==RETURNING) {
				{
				setState(2547);
				returningStatement();
				}
			}

			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class SetClauseListContext extends ParserRuleContext {
		public List setClause() {
			return getRuleContexts(SetClauseContext.class);
		}
		public SetClauseContext setClause(int i) {
			return getRuleContext(SetClauseContext.class,i);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public SetClauseListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_setClauseList; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSetClauseList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SetClauseListContext setClauseList() throws RecognitionException {
		SetClauseListContext _localctx = new SetClauseListContext(_ctx, getState());
		enterRule(_localctx, 378, RULE_setClauseList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2550);
			setClause();
			setState(2555);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(2551);
				match(COMMA);
				setState(2552);
				setClause();
				}
				}
				setState(2557);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class SetClauseContext extends ParserRuleContext {
		public SetTargetContext setTarget() {
			return getRuleContext(SetTargetContext.class,0);
		}
		public TerminalNode EQUAL() { return getToken(Sql.EQUAL, 0); }
		public UpdateSourceContext updateSource() {
			return getRuleContext(UpdateSourceContext.class,0);
		}
		public SetClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_setClause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSetClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SetClauseContext setClause() throws RecognitionException {
		SetClauseContext _localctx = new SetClauseContext(_ctx, getState());
		enterRule(_localctx, 380, RULE_setClause);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2558);
			setTarget();
			setState(2559);
			match(EQUAL);
			setState(2560);
			updateSource();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class SetTargetContext extends ParserRuleContext {
		public ColumnNameContext columnName() {
			return getRuleContext(ColumnNameContext.class,0);
		}
		public SetTargetContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_setTarget; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSetTarget(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SetTargetContext setTarget() throws RecognitionException {
		SetTargetContext _localctx = new SetTargetContext(_ctx, getState());
		enterRule(_localctx, 382, RULE_setTarget);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2562);
			columnName();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class UpdateSourceContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public UpdateSourceContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_updateSource; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitUpdateSource(this);
			else return visitor.visitChildren(this);
		}
	}

	public final UpdateSourceContext updateSource() throws RecognitionException {
		UpdateSourceContext _localctx = new UpdateSourceContext(_ctx, getState());
		enterRule(_localctx, 384, RULE_updateSource);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2564);
			expr(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class SessionCharacteristicContext extends ParserRuleContext {
		public SessionCharacteristicContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_sessionCharacteristic; }
	 
		public SessionCharacteristicContext() { }
		public void copyFrom(SessionCharacteristicContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class SessionTxCharacteristicsContext extends SessionCharacteristicContext {
		public TerminalNode TRANSACTION() { return getToken(Sql.TRANSACTION, 0); }
		public List sessionTxMode() {
			return getRuleContexts(SessionTxModeContext.class);
		}
		public SessionTxModeContext sessionTxMode(int i) {
			return getRuleContext(SessionTxModeContext.class,i);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public SessionTxCharacteristicsContext(SessionCharacteristicContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSessionTxCharacteristics(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SessionCharacteristicContext sessionCharacteristic() throws RecognitionException {
		SessionCharacteristicContext _localctx = new SessionCharacteristicContext(_ctx, getState());
		enterRule(_localctx, 386, RULE_sessionCharacteristic);
		try {
			int _alt;
			_localctx = new SessionTxCharacteristicsContext(_localctx);
			enterOuterAlt(_localctx, 1);
			{
			setState(2566);
			match(TRANSACTION);
			setState(2567);
			sessionTxMode();
			setState(2572);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,280,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(2568);
					match(COMMA);
					setState(2569);
					sessionTxMode();
					}
					} 
				}
				setState(2574);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,280,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class SessionTxModeContext extends ParserRuleContext {
		public SessionTxModeContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_sessionTxMode; }
	 
		public SessionTxModeContext() { }
		public void copyFrom(SessionTxModeContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class SessionIsolationLevelContext extends SessionTxModeContext {
		public TerminalNode ISOLATION() { return getToken(Sql.ISOLATION, 0); }
		public TerminalNode LEVEL() { return getToken(Sql.LEVEL, 0); }
		public LevelOfIsolationContext levelOfIsolation() {
			return getRuleContext(LevelOfIsolationContext.class,0);
		}
		public SessionIsolationLevelContext(SessionTxModeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSessionIsolationLevel(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ReadWriteSessionContext extends SessionTxModeContext {
		public TerminalNode READ() { return getToken(Sql.READ, 0); }
		public TerminalNode WRITE() { return getToken(Sql.WRITE, 0); }
		public ReadWriteSessionContext(SessionTxModeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitReadWriteSession(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ReadOnlySessionContext extends SessionTxModeContext {
		public TerminalNode READ() { return getToken(Sql.READ, 0); }
		public TerminalNode ONLY() { return getToken(Sql.ONLY, 0); }
		public ReadOnlySessionContext(SessionTxModeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitReadOnlySession(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SessionTxModeContext sessionTxMode() throws RecognitionException {
		SessionTxModeContext _localctx = new SessionTxModeContext(_ctx, getState());
		enterRule(_localctx, 388, RULE_sessionTxMode);
		try {
			setState(2582);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,281,_ctx) ) {
			case 1:
				_localctx = new SessionIsolationLevelContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(2575);
				match(ISOLATION);
				setState(2576);
				match(LEVEL);
				setState(2577);
				levelOfIsolation();
				}
				break;
			case 2:
				_localctx = new ReadOnlySessionContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(2578);
				match(READ);
				setState(2579);
				match(ONLY);
				}
				break;
			case 3:
				_localctx = new ReadWriteSessionContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(2580);
				match(READ);
				setState(2581);
				match(WRITE);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class TransactionCharacteristicsContext extends ParserRuleContext {
		public List transactionMode() {
			return getRuleContexts(TransactionModeContext.class);
		}
		public TransactionModeContext transactionMode(int i) {
			return getRuleContext(TransactionModeContext.class,i);
		}
		public List COMMA() { return getTokens(Sql.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(Sql.COMMA, i);
		}
		public TransactionCharacteristicsContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_transactionCharacteristics; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitTransactionCharacteristics(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TransactionCharacteristicsContext transactionCharacteristics() throws RecognitionException {
		TransactionCharacteristicsContext _localctx = new TransactionCharacteristicsContext(_ctx, getState());
		enterRule(_localctx, 390, RULE_transactionCharacteristics);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2584);
			transactionMode();
			setState(2589);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(2585);
				match(COMMA);
				setState(2586);
				transactionMode();
				}
				}
				setState(2591);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class TransactionModeContext extends ParserRuleContext {
		public TransactionModeContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_transactionMode; }
	 
		public TransactionModeContext() { }
		public void copyFrom(TransactionModeContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class TransactionSystemTimeContext extends TransactionModeContext {
		public TerminalNode AT() { return getToken(Sql.AT, 0); }
		public TerminalNode SYSTEM_TIME() { return getToken(Sql.SYSTEM_TIME, 0); }
		public DateTimeLiteralContext dateTimeLiteral() {
			return getRuleContext(DateTimeLiteralContext.class,0);
		}
		public TransactionSystemTimeContext(TransactionModeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitTransactionSystemTime(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class IsolationLevelContext extends TransactionModeContext {
		public TerminalNode ISOLATION() { return getToken(Sql.ISOLATION, 0); }
		public TerminalNode LEVEL() { return getToken(Sql.LEVEL, 0); }
		public LevelOfIsolationContext levelOfIsolation() {
			return getRuleContext(LevelOfIsolationContext.class,0);
		}
		public IsolationLevelContext(TransactionModeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitIsolationLevel(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ReadOnlyTransactionContext extends TransactionModeContext {
		public TerminalNode READ() { return getToken(Sql.READ, 0); }
		public TerminalNode ONLY() { return getToken(Sql.ONLY, 0); }
		public ReadOnlyTransactionContext(TransactionModeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitReadOnlyTransaction(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ReadWriteTransactionContext extends TransactionModeContext {
		public TerminalNode READ() { return getToken(Sql.READ, 0); }
		public TerminalNode WRITE() { return getToken(Sql.WRITE, 0); }
		public ReadWriteTransactionContext(TransactionModeContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitReadWriteTransaction(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TransactionModeContext transactionMode() throws RecognitionException {
		TransactionModeContext _localctx = new TransactionModeContext(_ctx, getState());
		enterRule(_localctx, 392, RULE_transactionMode);
		try {
			setState(2602);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,283,_ctx) ) {
			case 1:
				_localctx = new IsolationLevelContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(2592);
				match(ISOLATION);
				setState(2593);
				match(LEVEL);
				setState(2594);
				levelOfIsolation();
				}
				break;
			case 2:
				_localctx = new ReadOnlyTransactionContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(2595);
				match(READ);
				setState(2596);
				match(ONLY);
				}
				break;
			case 3:
				_localctx = new ReadWriteTransactionContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(2597);
				match(READ);
				setState(2598);
				match(WRITE);
				}
				break;
			case 4:
				_localctx = new TransactionSystemTimeContext(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(2599);
				match(AT);
				setState(2600);
				match(SYSTEM_TIME);
				setState(2601);
				dateTimeLiteral();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class LevelOfIsolationContext extends ParserRuleContext {
		public LevelOfIsolationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_levelOfIsolation; }
	 
		public LevelOfIsolationContext() { }
		public void copyFrom(LevelOfIsolationContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class RepeatableReadIsolationContext extends LevelOfIsolationContext {
		public TerminalNode REPEATABLE() { return getToken(Sql.REPEATABLE, 0); }
		public TerminalNode READ() { return getToken(Sql.READ, 0); }
		public RepeatableReadIsolationContext(LevelOfIsolationContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitRepeatableReadIsolation(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ReadCommittedIsolationContext extends LevelOfIsolationContext {
		public TerminalNode READ() { return getToken(Sql.READ, 0); }
		public TerminalNode COMMITTED() { return getToken(Sql.COMMITTED, 0); }
		public ReadCommittedIsolationContext(LevelOfIsolationContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitReadCommittedIsolation(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ReadUncommittedIsolationContext extends LevelOfIsolationContext {
		public TerminalNode READ() { return getToken(Sql.READ, 0); }
		public TerminalNode UNCOMMITTED() { return getToken(Sql.UNCOMMITTED, 0); }
		public ReadUncommittedIsolationContext(LevelOfIsolationContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitReadUncommittedIsolation(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class SerializableIsolationContext extends LevelOfIsolationContext {
		public TerminalNode SERIALIZABLE() { return getToken(Sql.SERIALIZABLE, 0); }
		public SerializableIsolationContext(LevelOfIsolationContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof SqlVisitor ) return ((SqlVisitor)visitor).visitSerializableIsolation(this);
			else return visitor.visitChildren(this);
		}
	}

	public final LevelOfIsolationContext levelOfIsolation() throws RecognitionException {
		LevelOfIsolationContext _localctx = new LevelOfIsolationContext(_ctx, getState());
		enterRule(_localctx, 394, RULE_levelOfIsolation);
		try {
			setState(2611);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,284,_ctx) ) {
			case 1:
				_localctx = new ReadUncommittedIsolationContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(2604);
				match(READ);
				setState(2605);
				match(UNCOMMITTED);
				}
				break;
			case 2:
				_localctx = new ReadCommittedIsolationContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(2606);
				match(READ);
				setState(2607);
				match(COMMITTED);
				}
				break;
			case 3:
				_localctx = new RepeatableReadIsolationContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(2608);
				match(REPEATABLE);
				setState(2609);
				match(READ);
				}
				break;
			case 4:
				_localctx = new SerializableIsolationContext(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(2610);
				match(SERIALIZABLE);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
		switch (ruleIndex) {
		case 25:
			return dataType_sempred((DataTypeContext)_localctx, predIndex);
		case 32:
			return expr_sempred((ExprContext)_localctx, predIndex);
		case 33:
			return numericExpr_sempred((NumericExprContext)_localctx, predIndex);
		case 34:
			return exprPrimary_sempred((ExprPrimaryContext)_localctx, predIndex);
		case 96:
			return tableReference_sempred((TableReferenceContext)_localctx, predIndex);
		case 151:
			return queryExpressionBody_sempred((QueryExpressionBodyContext)_localctx, predIndex);
		case 152:
			return queryTerm_sempred((QueryTermContext)_localctx, predIndex);
		}
		return true;
	}
	private boolean dataType_sempred(DataTypeContext _localctx, int predIndex) {
		switch (predIndex) {
		case 0:
			return precpred(_ctx, 1);
		}
		return true;
	}
	private boolean expr_sempred(ExprContext _localctx, int predIndex) {
		switch (predIndex) {
		case 1:
			return precpred(_ctx, 19);
		case 2:
			return precpred(_ctx, 12);
		case 3:
			return precpred(_ctx, 11);
		case 4:
			return precpred(_ctx, 10);
		case 5:
			return precpred(_ctx, 9);
		case 6:
			return precpred(_ctx, 8);
		case 7:
			return precpred(_ctx, 7);
		case 8:
			return precpred(_ctx, 6);
		case 9:
			return precpred(_ctx, 3);
		case 10:
			return precpred(_ctx, 2);
		case 11:
			return precpred(_ctx, 20);
		case 12:
			return precpred(_ctx, 17);
		case 13:
			return precpred(_ctx, 16);
		case 14:
			return precpred(_ctx, 15);
		case 15:
			return precpred(_ctx, 14);
		case 16:
			return precpred(_ctx, 13);
		case 17:
			return precpred(_ctx, 5);
		}
		return true;
	}
	private boolean numericExpr_sempred(NumericExprContext _localctx, int predIndex) {
		switch (predIndex) {
		case 18:
			return precpred(_ctx, 7);
		case 19:
			return precpred(_ctx, 6);
		case 20:
			return precpred(_ctx, 4);
		case 21:
			return precpred(_ctx, 3);
		case 22:
			return precpred(_ctx, 2);
		}
		return true;
	}
	private boolean exprPrimary_sempred(ExprPrimaryContext _localctx, int predIndex) {
		switch (predIndex) {
		case 23:
			return precpred(_ctx, 67);
		case 24:
			return precpred(_ctx, 70);
		case 25:
			return precpred(_ctx, 69);
		case 26:
			return precpred(_ctx, 68);
		}
		return true;
	}
	private boolean tableReference_sempred(TableReferenceContext _localctx, int predIndex) {
		switch (predIndex) {
		case 27:
			return precpred(_ctx, 8);
		case 28:
			return precpred(_ctx, 7);
		case 29:
			return precpred(_ctx, 9);
		}
		return true;
	}
	private boolean queryExpressionBody_sempred(QueryExpressionBodyContext _localctx, int predIndex) {
		switch (predIndex) {
		case 30:
			return precpred(_ctx, 2);
		case 31:
			return precpred(_ctx, 1);
		}
		return true;
	}
	private boolean queryTerm_sempred(QueryTermContext _localctx, int predIndex) {
		switch (predIndex) {
		case 32:
			return precpred(_ctx, 1);
		}
		return true;
	}

	private static final String _serializedATNSegment0 =
		"\u0004\u0001\u0146\u0a36\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001"+
		"\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004"+
		"\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007"+
		"\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b"+
		"\u0002\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002\u000f\u0007"+
		"\u000f\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002\u0012\u0007"+
		"\u0012\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002\u0015\u0007"+
		"\u0015\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002\u0018\u0007"+
		"\u0018\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002\u001b\u0007"+
		"\u001b\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002\u001e\u0007"+
		"\u001e\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007!\u0002\"\u0007"+
		"\"\u0002#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007&\u0002\'\u0007"+
		"\'\u0002(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007+\u0002,\u0007"+
		",\u0002-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u00070\u00021\u0007"+
		"1\u00022\u00072\u00023\u00073\u00024\u00074\u00025\u00075\u00026\u0007"+
		"6\u00027\u00077\u00028\u00078\u00029\u00079\u0002:\u0007:\u0002;\u0007"+
		";\u0002<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002?\u0007?\u0002@\u0007"+
		"@\u0002A\u0007A\u0002B\u0007B\u0002C\u0007C\u0002D\u0007D\u0002E\u0007"+
		"E\u0002F\u0007F\u0002G\u0007G\u0002H\u0007H\u0002I\u0007I\u0002J\u0007"+
		"J\u0002K\u0007K\u0002L\u0007L\u0002M\u0007M\u0002N\u0007N\u0002O\u0007"+
		"O\u0002P\u0007P\u0002Q\u0007Q\u0002R\u0007R\u0002S\u0007S\u0002T\u0007"+
		"T\u0002U\u0007U\u0002V\u0007V\u0002W\u0007W\u0002X\u0007X\u0002Y\u0007"+
		"Y\u0002Z\u0007Z\u0002[\u0007[\u0002\\\u0007\\\u0002]\u0007]\u0002^\u0007"+
		"^\u0002_\u0007_\u0002`\u0007`\u0002a\u0007a\u0002b\u0007b\u0002c\u0007"+
		"c\u0002d\u0007d\u0002e\u0007e\u0002f\u0007f\u0002g\u0007g\u0002h\u0007"+
		"h\u0002i\u0007i\u0002j\u0007j\u0002k\u0007k\u0002l\u0007l\u0002m\u0007"+
		"m\u0002n\u0007n\u0002o\u0007o\u0002p\u0007p\u0002q\u0007q\u0002r\u0007"+
		"r\u0002s\u0007s\u0002t\u0007t\u0002u\u0007u\u0002v\u0007v\u0002w\u0007"+
		"w\u0002x\u0007x\u0002y\u0007y\u0002z\u0007z\u0002{\u0007{\u0002|\u0007"+
		"|\u0002}\u0007}\u0002~\u0007~\u0002\u007f\u0007\u007f\u0002\u0080\u0007"+
		"\u0080\u0002\u0081\u0007\u0081\u0002\u0082\u0007\u0082\u0002\u0083\u0007"+
		"\u0083\u0002\u0084\u0007\u0084\u0002\u0085\u0007\u0085\u0002\u0086\u0007"+
		"\u0086\u0002\u0087\u0007\u0087\u0002\u0088\u0007\u0088\u0002\u0089\u0007"+
		"\u0089\u0002\u008a\u0007\u008a\u0002\u008b\u0007\u008b\u0002\u008c\u0007"+
		"\u008c\u0002\u008d\u0007\u008d\u0002\u008e\u0007\u008e\u0002\u008f\u0007"+
		"\u008f\u0002\u0090\u0007\u0090\u0002\u0091\u0007\u0091\u0002\u0092\u0007"+
		"\u0092\u0002\u0093\u0007\u0093\u0002\u0094\u0007\u0094\u0002\u0095\u0007"+
		"\u0095\u0002\u0096\u0007\u0096\u0002\u0097\u0007\u0097\u0002\u0098\u0007"+
		"\u0098\u0002\u0099\u0007\u0099\u0002\u009a\u0007\u009a\u0002\u009b\u0007"+
		"\u009b\u0002\u009c\u0007\u009c\u0002\u009d\u0007\u009d\u0002\u009e\u0007"+
		"\u009e\u0002\u009f\u0007\u009f\u0002\u00a0\u0007\u00a0\u0002\u00a1\u0007"+
		"\u00a1\u0002\u00a2\u0007\u00a2\u0002\u00a3\u0007\u00a3\u0002\u00a4\u0007"+
		"\u00a4\u0002\u00a5\u0007\u00a5\u0002\u00a6\u0007\u00a6\u0002\u00a7\u0007"+
		"\u00a7\u0002\u00a8\u0007\u00a8\u0002\u00a9\u0007\u00a9\u0002\u00aa\u0007"+
		"\u00aa\u0002\u00ab\u0007\u00ab\u0002\u00ac\u0007\u00ac\u0002\u00ad\u0007"+
		"\u00ad\u0002\u00ae\u0007\u00ae\u0002\u00af\u0007\u00af\u0002\u00b0\u0007"+
		"\u00b0\u0002\u00b1\u0007\u00b1\u0002\u00b2\u0007\u00b2\u0002\u00b3\u0007"+
		"\u00b3\u0002\u00b4\u0007\u00b4\u0002\u00b5\u0007\u00b5\u0002\u00b6\u0007"+
		"\u00b6\u0002\u00b7\u0007\u00b7\u0002\u00b8\u0007\u00b8\u0002\u00b9\u0007"+
		"\u00b9\u0002\u00ba\u0007\u00ba\u0002\u00bb\u0007\u00bb\u0002\u00bc\u0007"+
		"\u00bc\u0002\u00bd\u0007\u00bd\u0002\u00be\u0007\u00be\u0002\u00bf\u0007"+
		"\u00bf\u0002\u00c0\u0007\u00c0\u0002\u00c1\u0007\u00c1\u0002\u00c2\u0007"+
		"\u00c2\u0002\u00c3\u0007\u00c3\u0002\u00c4\u0007\u00c4\u0002\u00c5\u0007"+
		"\u00c5\u0001\u0000\u0001\u0000\u0003\u0000\u018f\b\u0000\u0001\u0000\u0001"+
		"\u0000\u0001\u0001\u0003\u0001\u0194\b\u0001\u0001\u0001\u0001\u0001\u0001"+
		"\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
		"\u0001\u0001\u0001\u0003\u0001\u01a0\b\u0001\u0001\u0001\u0003\u0001\u01a3"+
		"\b\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u01a7\b\u0001\u0001\u0001"+
		"\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
		"\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u01b4\b\u0001"+
		"\n\u0001\f\u0001\u01b7\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
		"\u0001\u0003\u0001\u01bd\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
		"\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
		"\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
		"\u0001\u0001\u0001\u0003\u0001\u01d0\b\u0001\u0001\u0002\u0001\u0002\u0001"+
		"\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0003\u0002\u01d9"+
		"\b\u0002\u0003\u0002\u01db\b\u0002\u0001\u0003\u0001\u0003\u0001\u0003"+
		"\u0001\u0003\u0005\u0003\u01e1\b\u0003\n\u0003\f\u0003\u01e4\t\u0003\u0001"+
		"\u0004\u0001\u0004\u0001\u0004\u0003\u0004\u01e9\b\u0004\u0001\u0004\u0001"+
		"\u0004\u0001\u0004\u0001\u0004\u0003\u0004\u01ef\b\u0004\u0001\u0004\u0001"+
		"\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0003"+
		"\u0004\u01f8\b\u0004\u0001\u0005\u0001\u0005\u0003\u0005\u01fc\b\u0005"+
		"\u0001\u0005\u0001\u0005\u0003\u0005\u0200\b\u0005\u0001\u0006\u0001\u0006"+
		"\u0001\u0006\u0001\u0006\u0003\u0006\u0206\b\u0006\u0001\u0006\u0003\u0006"+
		"\u0209\b\u0006\u0001\u0007\u0003\u0007\u020c\b\u0007\u0001\u0007\u0001"+
		"\u0007\u0003\u0007\u0210\b\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001"+
		"\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001"+
		"\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0003\u0007\u021f\b\u0007\u0001"+
		"\b\u0004\b\u0222\b\b\u000b\b\f\b\u0223\u0001\t\u0001\t\u0001\t\u0001\t"+
		"\u0003\t\u022a\b\t\u0001\t\u0003\t\u022d\b\t\u0001\n\u0001\n\u0001\n\u0001"+
		"\n\u0001\n\u0003\n\u0234\b\n\u0001\u000b\u0001\u000b\u0001\f\u0001\f\u0001"+
		"\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u000f"+
		"\u0001\u000f\u0001\u000f\u0001\u000f\u0003\u000f\u0244\b\u000f\u0003\u000f"+
		"\u0246\b\u000f\u0001\u0010\u0001\u0010\u0001\u0010\u0005\u0010\u024b\b"+
		"\u0010\n\u0010\f\u0010\u024e\t\u0010\u0001\u0011\u0001\u0011\u0001\u0011"+
		"\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011"+
		"\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011"+
		"\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011"+
		"\u0001\u0011\u0003\u0011\u0266\b\u0011\u0001\u0011\u0003\u0011\u0269\b"+
		"\u0011\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0001"+
		"\u0013\u0001\u0013\u0003\u0013\u0272\b\u0013\u0001\u0014\u0001\u0014\u0001"+
		"\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001"+
		"\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+
		"\u0019\u0001\u0019\u0003\u0019\u0284\b\u0019\u0001\u0019\u0001\u0019\u0003"+
		"\u0019\u0288\b\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+
		"\u0019\u0001\u0019\u0003\u0019\u0290\b\u0019\u0001\u0019\u0001\u0019\u0001"+
		"\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+
		"\u0019\u0001\u0019\u0003\u0019\u029c\b\u0019\u0001\u0019\u0003\u0019\u029f"+
		"\b\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0003"+
		"\u0019\u02a6\b\u0019\u0001\u0019\u0003\u0019\u02a9\b\u0019\u0001\u0019"+
		"\u0001\u0019\u0001\u0019\u0003\u0019\u02ae\b\u0019\u0001\u0019\u0001\u0019"+
		"\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0003\u0019\u02b6\b\u0019"+
		"\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0005\u0019"+
		"\u02bd\b\u0019\n\u0019\f\u0019\u02c0\t\u0019\u0001\u0019\u0001\u0019\u0001"+
		"\u0019\u0001\u0019\u0003\u0019\u02c6\b\u0019\u0001\u0019\u0001\u0019\u0001"+
		"\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0003\u0019\u02ce\b\u0019\u0005"+
		"\u0019\u02d0\b\u0019\n\u0019\f\u0019\u02d3\t\u0019\u0001\u001a\u0001\u001a"+
		"\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001d\u0001\u001d"+
		"\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0003\u001d\u02e1\b\u001d"+
		"\u0001\u001e\u0001\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0001 \u0001"+
		" \u0001 \u0003 \u02eb\b \u0001 \u0001 \u0003 \u02ef\b \u0001 \u0001 \u0001"+
		" \u0001 \u0001 \u0001 \u0001 \u0003 \u02f8\b \u0001 \u0001 \u0001 \u0001"+
		" \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001"+
		" \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001"+
		" \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001"+
		" \u0001 \u0001 \u0003 \u031e\b \u0001 \u0001 \u0001 \u0003 \u0323\b \u0001"+
		" \u0001 \u0001 \u0001 \u0003 \u0329\b \u0001 \u0001 \u0001 \u0001 \u0003"+
		" \u032f\b \u0001 \u0001 \u0003 \u0333\b \u0001 \u0001 \u0001 \u0001 \u0003"+
		" \u0339\b \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0003 \u0342"+
		"\b \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0005 \u034a\b \n \f \u034d"+
		"\t \u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0003!\u0357"+
		"\b!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001"+
		"!\u0001!\u0001!\u0001!\u0001!\u0001!\u0005!\u0368\b!\n!\f!\u036b\t!\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0004\"\u0383\b\"\u000b\"\f\"\u0384\u0001\""+
		"\u0003\"\u0388\b\"\u0001\"\u0001\"\u0001\"\u0001\"\u0004\"\u038e\b\"\u000b"+
		"\"\f\"\u038f\u0001\"\u0003\"\u0393\b\"\u0001\"\u0001\"\u0001\"\u0001\""+
		"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0005\"\u03a3\b\"\n\"\f\"\u03a6\t\"\u0001\"\u0001\"\u0001\""+
		"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0003\"\u03b9\b\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0003\"\u03c0\b\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0003\"\u03ca\b\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0003\"\u03d1\b\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0003\"\u03db\b\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0003\"\u03e2\b\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0003\"\u03ec\b\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0003\"\u03f8\b\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0003\"\u0408\b\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0005\"\u0464\b\"\n\"\f\"\u0467"+
		"\t\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0005\"\u0470"+
		"\b\"\n\"\f\"\u0473\t\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\""+
		"\u0003\"\u047b\b\"\u0001\"\u0001\"\u0003\"\u047f\b\"\u0001\"\u0003\"\u0482"+
		"\b\"\u0001\"\u0001\"\u0003\"\u0486\b\"\u0001\"\u0001\"\u0001\"\u0001\""+
		"\u0003\"\u048c\b\"\u0003\"\u048e\b\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0003\"\u049f\b\"\u0001\"\u0003\"\u04a2\b\"\u0001\"\u0003\""+
		"\u04a5\b\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0003\"\u04b3\b\"\u0001\"\u0001\"\u0003"+
		"\"\u04b7\b\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0003\"\u04c7\b\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0003\"\u04cd\b\"\u0001\"\u0001\"\u0001\"\u0003"+
		"\"\u04d2\b\"\u0001\"\u0001\"\u0001\"\u0003\"\u04d7\b\"\u0001\"\u0001\""+
		"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0003\"\u04e1\b\"\u0001"+
		"\"\u0001\"\u0001\"\u0003\"\u04e6\b\"\u0001\"\u0001\"\u0001\"\u0003\"\u04eb"+
		"\b\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0003\"\u04f4"+
		"\b\"\u0001\"\u0001\"\u0003\"\u04f8\b\"\u0001\"\u0001\"\u0001\"\u0003\""+
		"\u04fd\b\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0003\"\u0504\b\"\u0001"+
		"\"\u0001\"\u0001\"\u0003\"\u0509\b\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0003\"\u0513\b\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0003\"\u051d\b\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0003\"\u0524\b\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0003\"\u052d\b\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0003\"\u0538\b\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0003\"\u0543\b\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0004\"\u054c\b\"\u000b"+
		"\"\f\"\u054d\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0003\"\u0571"+
		"\b\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0005\"\u0581\b\"\n\"\f\"\u0584"+
		"\t\"\u0001#\u0001#\u0001$\u0001$\u0001%\u0001%\u0001%\u0003%\u058d\b%"+
		"\u0001%\u0001%\u0001%\u0001%\u0001%\u0003%\u0594\b%\u0001%\u0001%\u0001"+
		"%\u0001%\u0001%\u0003%\u059b\b%\u0003%\u059d\b%\u0001&\u0001&\u0001\'"+
		"\u0001\'\u0001\'\u0001\'\u0001\'\u0005\'\u05a6\b\'\n\'\f\'\u05a9\t\'\u0003"+
		"\'\u05ab\b\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0005\'\u05b2\b\'"+
		"\n\'\f\'\u05b5\t\'\u0003\'\u05b7\b\'\u0001\'\u0003\'\u05ba\b\'\u0001("+
		"\u0001(\u0001(\u0001(\u0001)\u0001)\u0001*\u0001*\u0003*\u05c4\b*\u0001"+
		"+\u0001+\u0001,\u0001,\u0001,\u0003,\u05cb\b,\u0001,\u0001,\u0001,\u0001"+
		",\u0001,\u0001,\u0001,\u0003,\u05d4\b,\u0001,\u0001,\u0001-\u0001-\u0001"+
		".\u0001.\u0001/\u0001/\u00010\u00010\u00010\u00010\u00010\u00010\u0001"+
		"0\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u0001"+
		"0\u00010\u00010\u00010\u00030\u05f2\b0\u00030\u05f4\b0\u00010\u00010\u0003"+
		"0\u05f8\b0\u00010\u00010\u00010\u00010\u00010\u00030\u05ff\b0\u00010\u0001"+
		"0\u00010\u00010\u00010\u00010\u00010\u00030\u0608\b0\u00010\u00030\u060b"+
		"\b0\u00030\u060d\b0\u00011\u00011\u00012\u00012\u00032\u0613\b2\u0001"+
		"3\u00013\u00014\u00014\u00015\u00015\u00016\u00016\u00016\u00016\u0003"+
		"6\u061f\b6\u00017\u00017\u00018\u00018\u00019\u00019\u00019\u00019\u0003"+
		"9\u0629\b9\u0001:\u0001:\u0003:\u062d\b:\u0001;\u0001;\u0001;\u0001;\u0001"+
		";\u0001;\u0001;\u0001;\u0001;\u0001;\u0001;\u0001;\u0003;\u063b\b;\u0001"+
		";\u0001;\u0003;\u063f\b;\u0001<\u0001<\u0001=\u0001=\u0003=\u0645\b=\u0001"+
		">\u0001>\u0001>\u0001>\u0003>\u064b\b>\u0001?\u0001?\u0001@\u0001@\u0001"+
		"A\u0001A\u0001A\u0001A\u0001A\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+
		"C\u0001C\u0001C\u0001D\u0001D\u0001D\u0005D\u0661\bD\nD\fD\u0664\tD\u0001"+
		"E\u0001E\u0003E\u0668\bE\u0001F\u0001F\u0003F\u066c\bF\u0001G\u0001G\u0003"+
		"G\u0670\bG\u0001H\u0001H\u0001I\u0001I\u0001J\u0001J\u0001K\u0001K\u0001"+
		"L\u0001L\u0001M\u0001M\u0001N\u0001N\u0001O\u0001O\u0001P\u0001P\u0001"+
		"Q\u0001Q\u0001R\u0001R\u0001S\u0001S\u0001T\u0001T\u0001U\u0003U\u068d"+
		"\bU\u0001U\u0001U\u0001U\u0001U\u0005U\u0693\bU\nU\fU\u0696\tU\u0003U"+
		"\u0698\bU\u0001U\u0001U\u0001U\u0003U\u069d\bU\u0001V\u0001V\u0001W\u0001"+
		"W\u0001X\u0001X\u0001Y\u0001Y\u0001Y\u0001Y\u0001Y\u0004Y\u06aa\bY\u000b"+
		"Y\fY\u06ab\u0003Y\u06ae\bY\u0001Y\u0001Y\u0001Y\u0001Y\u0001Y\u0001Y\u0005"+
		"Y\u06b6\bY\nY\fY\u06b9\tY\u0003Y\u06bb\bY\u0001Y\u0003Y\u06be\bY\u0001"+
		"Z\u0001Z\u0001Z\u0005Z\u06c3\bZ\nZ\fZ\u06c6\tZ\u0001[\u0001[\u0001[\u0001"+
		"\\\u0001\\\u0003\\\u06cd\b\\\u0001]\u0001]\u0001]\u0005]\u06d2\b]\n]\f"+
		"]\u06d5\t]\u0001^\u0001^\u0001^\u0001_\u0001_\u0001_\u0001_\u0005_\u06de"+
		"\b_\n_\f_\u06e1\t_\u0001`\u0001`\u0001`\u0001`\u0005`\u06e7\b`\n`\f`\u06ea"+
		"\t`\u0001`\u0003`\u06ed\b`\u0001`\u0003`\u06f0\b`\u0001`\u0001`\u0001"+
		"`\u0003`\u06f5\b`\u0001`\u0001`\u0001`\u0001`\u0003`\u06fb\b`\u0001`\u0001"+
		"`\u0001`\u0001`\u0001`\u0003`\u0702\b`\u0001`\u0001`\u0003`\u0706\b`\u0001"+
		"`\u0001`\u0001`\u0003`\u070b\b`\u0001`\u0001`\u0001`\u0001`\u0001`\u0001"+
		"`\u0001`\u0001`\u0001`\u0001`\u0001`\u0003`\u0718\b`\u0001`\u0001`\u0001"+
		"`\u0001`\u0001`\u0001`\u0001`\u0003`\u0721\b`\u0001`\u0001`\u0001`\u0001"+
		"`\u0003`\u0727\b`\u0001`\u0001`\u0001`\u0001`\u0005`\u072d\b`\n`\f`\u0730"+
		"\t`\u0001a\u0001a\u0001a\u0001b\u0003b\u0736\bb\u0001b\u0001b\u0001c\u0001"+
		"c\u0001c\u0001c\u0001d\u0001d\u0001d\u0001d\u0001d\u0001d\u0003d\u0744"+
		"\bd\u0001e\u0001e\u0001e\u0001e\u0001e\u0001e\u0003e\u074c\be\u0001f\u0001"+
		"f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001"+
		"f\u0001f\u0001f\u0003f\u075c\bf\u0001g\u0001g\u0001g\u0003g\u0761\bg\u0001"+
		"h\u0001h\u0001i\u0001i\u0001i\u0005i\u0768\bi\ni\fi\u076b\ti\u0001j\u0001"+
		"j\u0001j\u0001j\u0001j\u0001j\u0001j\u0003j\u0774\bj\u0001k\u0001k\u0001"+
		"k\u0003k\u0779\bk\u0003k\u077b\bk\u0001l\u0001l\u0001m\u0001m\u0001m\u0001"+
		"n\u0001n\u0001n\u0003n\u0785\bn\u0001n\u0001n\u0001n\u0005n\u078a\bn\n"+
		"n\fn\u078d\tn\u0001o\u0001o\u0001o\u0003o\u0792\bo\u0001p\u0001p\u0001"+
		"p\u0001q\u0001q\u0001q\u0001r\u0001r\u0001r\u0005r\u079d\br\nr\fr\u07a0"+
		"\tr\u0001s\u0001s\u0001s\u0001s\u0001t\u0001t\u0001u\u0001u\u0001u\u0001"+
		"u\u0001v\u0003v\u07ad\bv\u0001v\u0003v\u07b0\bv\u0001v\u0003v\u07b3\b"+
		"v\u0001v\u0003v\u07b6\bv\u0001w\u0001w\u0001x\u0001x\u0001x\u0001x\u0001"+
		"y\u0001y\u0001y\u0005y\u07c1\by\ny\fy\u07c4\ty\u0001z\u0001z\u0001{\u0001"+
		"{\u0001{\u0001{\u0001|\u0001|\u0001|\u0003|\u07cf\b|\u0001}\u0001}\u0001"+
		"~\u0001~\u0003~\u07d5\b~\u0001\u007f\u0001\u007f\u0001\u007f\u0001\u007f"+
		"\u0001\u007f\u0003\u007f\u07dc\b\u007f\u0001\u0080\u0001\u0080\u0001\u0080"+
		"\u0001\u0081\u0001\u0081\u0001\u0081\u0001\u0081\u0001\u0081\u0001\u0082"+
		"\u0001\u0082\u0001\u0083\u0001\u0083\u0001\u0084\u0001\u0084\u0001\u0084"+
		"\u0001\u0084\u0003\u0084\u07ee\b\u0084\u0001\u0085\u0001\u0085\u0001\u0085"+
		"\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0086"+
		"\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0086\u0003\u0086\u07fd\b\u0086"+
		"\u0001\u0087\u0001\u0087\u0003\u0087\u0801\b\u0087\u0001\u0087\u0001\u0087"+
		"\u0001\u0088\u0001\u0088\u0003\u0088\u0807\b\u0088\u0001\u0088\u0001\u0088"+
		"\u0005\u0088\u080b\b\u0088\n\u0088\f\u0088\u080e\t\u0088\u0001\u0088\u0001"+
		"\u0088\u0001\u0088\u0005\u0088\u0813\b\u0088\n\u0088\f\u0088\u0816\t\u0088"+
		"\u0001\u0088\u0001\u0088\u0001\u0088\u0003\u0088\u081b\b\u0088\u0001\u0089"+
		"\u0001\u0089\u0003\u0089\u081f\b\u0089\u0001\u0089\u0003\u0089\u0822\b"+
		"\u0089\u0001\u008a\u0001\u008a\u0003\u008a\u0826\b\u008a\u0001\u008b\u0001"+
		"\u008b\u0001\u008b\u0001\u008b\u0003\u008b\u082c\b\u008b\u0001\u008b\u0003"+
		"\u008b\u082f\b\u008b\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001"+
		"\u008c\u0001\u008c\u0001\u008c\u0005\u008c\u0838\b\u008c\n\u008c\f\u008c"+
		"\u083b\t\u008c\u0001\u008c\u0001\u008c\u0003\u008c\u083f\b\u008c\u0001"+
		"\u008d\u0001\u008d\u0001\u008d\u0001\u008e\u0001\u008e\u0001\u008e\u0001"+
		"\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0005\u008e\u084b\b\u008e\n"+
		"\u008e\f\u008e\u084e\t\u008e\u0001\u008e\u0001\u008e\u0003\u008e\u0852"+
		"\b\u008e\u0001\u008f\u0001\u008f\u0001\u008f\u0001\u0090\u0001\u0090\u0001"+
		"\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0005\u0090\u085e"+
		"\b\u0090\n\u0090\f\u0090\u0861\t\u0090\u0001\u0090\u0001\u0090\u0003\u0090"+
		"\u0865\b\u0090\u0001\u0091\u0001\u0091\u0003\u0091\u0869\b\u0091\u0001"+
		"\u0092\u0003\u0092\u086c\b\u0092\u0001\u0092\u0001\u0092\u0001\u0093\u0003"+
		"\u0093\u0871\b\u0093\u0001\u0093\u0001\u0093\u0001\u0094\u0001\u0094\u0003"+
		"\u0094\u0877\b\u0094\u0001\u0094\u0003\u0094\u087a\b\u0094\u0001\u0095"+
		"\u0001\u0095\u0003\u0095\u087e\b\u0095\u0001\u0095\u0001\u0095\u0001\u0095"+
		"\u0005\u0095\u0883\b\u0095\n\u0095\f\u0095\u0886\t\u0095\u0001\u0096\u0001"+
		"\u0096\u0001\u0096\u0001\u0096\u0001\u0096\u0003\u0096\u088d\b\u0096\u0001"+
		"\u0096\u0001\u0096\u0001\u0096\u0001\u0097\u0001\u0097\u0001\u0097\u0001"+
		"\u0097\u0001\u0097\u0001\u0097\u0003\u0097\u0898\b\u0097\u0001\u0097\u0001"+
		"\u0097\u0001\u0097\u0001\u0097\u0003\u0097\u089e\b\u0097\u0001\u0097\u0005"+
		"\u0097\u08a1\b\u0097\n\u0097\f\u0097\u08a4\t\u0097\u0001\u0098\u0001\u0098"+
		"\u0001\u0098\u0003\u0098\u08a9\b\u0098\u0001\u0098\u0003\u0098\u08ac\b"+
		"\u0098\u0001\u0098\u0003\u0098\u08af\b\u0098\u0001\u0098\u0003\u0098\u08b2"+
		"\b\u0098\u0001\u0098\u0003\u0098\u08b5\b\u0098\u0001\u0098\u0001\u0098"+
		"\u0003\u0098\u08b9\b\u0098\u0001\u0098\u0003\u0098\u08bc\b\u0098\u0001"+
		"\u0098\u0003\u0098\u08bf\b\u0098\u0001\u0098\u0003\u0098\u08c2\b\u0098"+
		"\u0001\u0098\u0003\u0098\u08c5\b\u0098\u0001\u0098\u0001\u0098\u0001\u0098"+
		"\u0001\u0098\u0001\u0098\u0001\u0098\u0003\u0098\u08cd\b\u0098\u0001\u0098"+
		"\u0001\u0098\u0001\u0098\u0003\u0098\u08d2\b\u0098\u0001\u0098\u0005\u0098"+
		"\u08d5\b\u0098\n\u0098\f\u0098\u08d8\t\u0098\u0001\u0099\u0001\u0099\u0001"+
		"\u0099\u0001\u0099\u0001\u009a\u0001\u009a\u0003\u009a\u08e0\b\u009a\u0001"+
		"\u009a\u0001\u009a\u0003\u009a\u08e4\b\u009a\u0003\u009a\u08e6\b\u009a"+
		"\u0001\u009b\u0001\u009b\u0001\u009b\u0003\u009b\u08eb\b\u009b\u0001\u009c"+
		"\u0001\u009c\u0001\u009c\u0003\u009c\u08f0\b\u009c\u0001\u009c\u0001\u009c"+
		"\u0001\u009c\u0001\u009c\u0003\u009c\u08f6\b\u009c\u0001\u009d\u0001\u009d"+
		"\u0003\u009d\u08fa\b\u009d\u0001\u009e\u0001\u009e\u0003\u009e\u08fe\b"+
		"\u009e\u0001\u009f\u0001\u009f\u0001\u009f\u0001\u009f\u0001\u00a0\u0001"+
		"\u00a0\u0001\u00a0\u0001\u00a0\u0003\u00a0\u0908\b\u00a0\u0001\u00a0\u0001"+
		"\u00a0\u0003\u00a0\u090c\b\u00a0\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0001"+
		"\u00a0\u0001\u00a0\u0003\u00a0\u0913\b\u00a0\u0001\u00a0\u0001\u00a0\u0001"+
		"\u00a0\u0003\u00a0\u0918\b\u00a0\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0001"+
		"\u00a0\u0003\u00a0\u091e\b\u00a0\u0001\u00a0\u0003\u00a0\u0921\b\u00a0"+
		"\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0003\u00a0\u0927\b\u00a0"+
		"\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0003\u00a0"+
		"\u092e\b\u00a0\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0001\u00a0"+
		"\u0003\u00a0\u0935\b\u00a0\u0001\u00a1\u0001\u00a1\u0003\u00a1\u0939\b"+
		"\u00a1\u0001\u00a2\u0001\u00a2\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001"+
		"\u00a3\u0001\u00a3\u0003\u00a3\u0942\b\u00a3\u0001\u00a4\u0001\u00a4\u0001"+
		"\u00a5\u0001\u00a5\u0001\u00a6\u0001\u00a6\u0001\u00a7\u0001\u00a7\u0001"+
		"\u00a8\u0001\u00a8\u0001\u00a9\u0001\u00a9\u0001\u00aa\u0001\u00aa\u0001"+
		"\u00ab\u0001\u00ab\u0001\u00ac\u0001\u00ac\u0001\u00ad\u0001\u00ad\u0001"+
		"\u00ae\u0001\u00ae\u0001\u00af\u0001\u00af\u0001\u00af\u0001\u00af\u0001"+
		"\u00af\u0001\u00af\u0001\u00af\u0001\u00af\u0001\u00af\u0001\u00af\u0003"+
		"\u00af\u0964\b\u00af\u0001\u00af\u0001\u00af\u0001\u00af\u0001\u00af\u0001"+
		"\u00af\u0003\u00af\u096b\b\u00af\u0001\u00af\u0001\u00af\u0001\u00af\u0003"+
		"\u00af\u0970\b\u00af\u0001\u00b0\u0001\u00b0\u0001\u00b1\u0001\u00b1\u0001"+
		"\u00b2\u0001\u00b2\u0001\u00b2\u0005\u00b2\u0979\b\u00b2\n\u00b2\f\u00b2"+
		"\u097c\t\u00b2\u0001\u00b3\u0001\u00b3\u0003\u00b3\u0980\b\u00b3\u0001"+
		"\u00b3\u0003\u00b3\u0983\b\u00b3\u0001\u00b4\u0001\u00b4\u0001\u00b5\u0001"+
		"\u00b5\u0001\u00b5\u0001\u00b5\u0003\u00b5\u098b\b\u00b5\u0001\u00b6\u0001"+
		"\u00b6\u0001\u00b6\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0003"+
		"\u00b7\u0994\b\u00b7\u0001\u00b7\u0003\u00b7\u0997\b\u00b7\u0001\u00b7"+
		"\u0003\u00b7\u099a\b\u00b7\u0001\u00b7\u0001\u00b7\u0003\u00b7\u099e\b"+
		"\u00b7\u0001\u00b7\u0003\u00b7\u09a1\b\u00b7\u0001\u00b8\u0001\u00b8\u0001"+
		"\u00b8\u0003\u00b8\u09a6\b\u00b8\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001"+
		"\u00b8\u0001\u00b8\u0003\u00b8\u09ad\b\u00b8\u0001\u00b8\u0001\u00b8\u0001"+
		"\u00b8\u0001\u00b8\u0001\u00b8\u0003\u00b8\u09b4\b\u00b8\u0003\u00b8\u09b6"+
		"\b\u00b8\u0001\u00b9\u0001\u00b9\u0001\u00b9\u0001\u00b9\u0003\u00b9\u09bc"+
		"\b\u00b9\u0001\u00b9\u0003\u00b9\u09bf\b\u00b9\u0001\u00b9\u0001\u00b9"+
		"\u0003\u00b9\u09c3\b\u00b9\u0001\u00ba\u0001\u00ba\u0001\u00ba\u0001\u00ba"+
		"\u0001\u00ba\u0003\u00ba\u09ca\b\u00ba\u0001\u00bb\u0001\u00bb\u0001\u00bb"+
		"\u0001\u00bb\u0003\u00bb\u09d0\b\u00bb\u0001\u00bb\u0001\u00bb\u0001\u00bb"+
		"\u0001\u00bb\u0001\u00bb\u0003\u00bb\u09d7\b\u00bb\u0001\u00bb\u0001\u00bb"+
		"\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0003\u00bb\u09de\b\u00bb\u0001\u00bb"+
		"\u0003\u00bb\u09e1\b\u00bb\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0003\u00bc"+
		"\u09e6\b\u00bc\u0001\u00bc\u0003\u00bc\u09e9\b\u00bc\u0001\u00bc\u0003"+
		"\u00bc\u09ec\b\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0003"+
		"\u00bc\u09f2\b\u00bc\u0001\u00bc\u0003\u00bc\u09f5\b\u00bc\u0001\u00bd"+
		"\u0001\u00bd\u0001\u00bd\u0005\u00bd\u09fa\b\u00bd\n\u00bd\f\u00bd\u09fd"+
		"\t\u00bd\u0001\u00be\u0001\u00be\u0001\u00be\u0001\u00be\u0001\u00bf\u0001"+
		"\u00bf\u0001\u00c0\u0001\u00c0\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0001"+
		"\u00c1\u0005\u00c1\u0a0b\b\u00c1\n\u00c1\f\u00c1\u0a0e\t\u00c1\u0001\u00c2"+
		"\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2"+
		"\u0003\u00c2\u0a17\b\u00c2\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0005\u00c3"+
		"\u0a1c\b\u00c3\n\u00c3\f\u00c3\u0a1f\t\u00c3\u0001\u00c4\u0001\u00c4\u0001"+
		"\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001"+
		"\u00c4\u0001\u00c4\u0003\u00c4\u0a2b\b\u00c4\u0001\u00c5\u0001\u00c5\u0001"+
		"\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0003\u00c5\u0a34"+
		"\b\u00c5\u0001\u00c5\u0000\u00072@BD\u00c0\u012e\u0130\u00c6\u0000\u0002"+
		"\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a\u001c\u001e"+
		" \"$&(*,.02468:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082\u0084\u0086"+
		"\u0088\u008a\u008c\u008e\u0090\u0092\u0094\u0096\u0098\u009a\u009c\u009e"+
		"\u00a0\u00a2\u00a4\u00a6\u00a8\u00aa\u00ac\u00ae\u00b0\u00b2\u00b4\u00b6"+
		"\u00b8\u00ba\u00bc\u00be\u00c0\u00c2\u00c4\u00c6\u00c8\u00ca\u00cc\u00ce"+
		"\u00d0\u00d2\u00d4\u00d6\u00d8\u00da\u00dc\u00de\u00e0\u00e2\u00e4\u00e6"+
		"\u00e8\u00ea\u00ec\u00ee\u00f0\u00f2\u00f4\u00f6\u00f8\u00fa\u00fc\u00fe"+
		"\u0100\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116"+
		"\u0118\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128\u012a\u012c\u012e"+
		"\u0130\u0132\u0134\u0136\u0138\u013a\u013c\u013e\u0140\u0142\u0144\u0146"+
		"\u0148\u014a\u014c\u014e\u0150\u0152\u0154\u0156\u0158\u015a\u015c\u015e"+
		"\u0160\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170\u0172\u0174\u0176"+
		"\u0178\u017a\u017c\u017e\u0180\u0182\u0184\u0186\u0188\u018a\u0000%\u0002"+
		"\u0000  \u0121\u0121\u0001\u0000\u0018\u0019\u0002\u0000\u007f\u007f\u0126"+
		"\u0126\u0005\u0000gg\u0093\u0093\u00bc\u00bc\u00be\u00be\u0140\u0140\u0003"+
		"\u0000hhjj\u00cd\u00cd\u0003\u0000BB\u0099\u009a\u0109\u0109\u0002\u0000"+
		"\u0118\u0118\u0135\u0135\u0002\u0000OO\u00cf\u00cf\u0002\u000099\u0114"+
		"\u0114\u0001\u0000\u001a\u001b\u0001\u0000\u001c\u001d\u0001\u0000\u001e"+
		"\u001f\u0001\u0000PQ\u0001\u0000KL\u0002\u0000\u00df\u00df\u0127\u0127"+
		"\u0002\u0000bb\u00c7\u00c7\u0003\u0000\u007f\u007f\u0126\u0126\u012b\u012b"+
		"\u0002\u0000\u00ce\u00ce\u00f0\u00f0\u0002\u0000\u00a1\u00a1\u00a6\u00a6"+
		"\u0004\u0000ZZmm\u00de\u00de\u00ed\u00ed\u0002\u0000\u0082\u0082\u00a3"+
		"\u00a3\u0002\u0000\u0005\u0005\u000e\u000e\u0004\u0000?@^^tu\u0088\u0088"+
		"\u0001\u0000\u011f\u0120\u0003\u0000FF\u00a7\u00a7\u0122\u0122\u000b\u0000"+
		"MMggii\u0093\u0093\u00b8\u00ba\u00bc\u00bc\u00be\u00bf\u00ea\u00ea\u0100"+
		"\u0100\u0139\u0139\u0140\u0140\u0006\u0000,,77;;VW\u0107\u0108\u0116\u0117"+
		"\u0003\u0000\u008a\u008a\u00a9\u00a9\u00fa\u00fa\u0003\u0000\u008e\u008e"+
		"\u00eb\u00eb\u00fe\u00fe\u0002\u0000..oo\u0001\u0000\u00fd\u00fe\u0002"+
		"\u0000\u0081\u0081\u00c3\u00c3\u0001\u0000 &\u0002\u0000\u0016\u0016("+
		"*\u0003\u0000..00\u010a\u010a\t\u0000<\u02e4\u0001\u0000\u0000\u0000@\u02f7\u0001\u0000\u0000\u0000"+
		"B\u0356\u0001\u0000\u0000\u0000D\u0570\u0001\u0000\u0000\u0000F\u0585"+
		"\u0001\u0000\u0000\u0000H\u0587\u0001\u0000\u0000\u0000J\u059c\u0001\u0000"+
		"\u0000\u0000L\u059e\u0001\u0000\u0000\u0000N\u05b9\u0001\u0000\u0000\u0000"+
		"P\u05bb\u0001\u0000\u0000\u0000R\u05bf\u0001\u0000\u0000\u0000T\u05c3"+
		"\u0001\u0000\u0000\u0000V\u05c5\u0001\u0000\u0000\u0000X\u05ca\u0001\u0000"+
		"\u0000\u0000Z\u05d7\u0001\u0000\u0000\u0000\\\u05d9\u0001\u0000\u0000"+
		"\u0000^\u05db\u0001\u0000\u0000\u0000`\u060c\u0001\u0000\u0000\u0000b"+
		"\u060e\u0001\u0000\u0000\u0000d\u0612\u0001\u0000\u0000\u0000f\u0614\u0001"+
		"\u0000\u0000\u0000h\u0616\u0001\u0000\u0000\u0000j\u0618\u0001\u0000\u0000"+
		"\u0000l\u061e\u0001\u0000\u0000\u0000n\u0620\u0001\u0000\u0000\u0000p"+
		"\u0622\u0001\u0000\u0000\u0000r\u0628\u0001\u0000\u0000\u0000t\u062c\u0001"+
		"\u0000\u0000\u0000v\u063e\u0001\u0000\u0000\u0000x\u0640\u0001\u0000\u0000"+
		"\u0000z\u0642\u0001\u0000\u0000\u0000|\u064a\u0001\u0000\u0000\u0000~"+
		"\u064c\u0001\u0000\u0000\u0000\u0080\u064e\u0001\u0000\u0000\u0000\u0082"+
		"\u0650\u0001\u0000\u0000\u0000\u0084\u0655\u0001\u0000\u0000\u0000\u0086"+
		"\u065a\u0001\u0000\u0000\u0000\u0088\u065d\u0001\u0000\u0000\u0000\u008a"+
		"\u0667\u0001\u0000\u0000\u0000\u008c\u066b\u0001\u0000\u0000\u0000\u008e"+
		"\u066f\u0001\u0000\u0000\u0000\u0090\u0671\u0001\u0000\u0000\u0000\u0092"+
		"\u0673\u0001\u0000\u0000\u0000\u0094\u0675\u0001\u0000\u0000\u0000\u0096"+
		"\u0677\u0001\u0000\u0000\u0000\u0098\u0679\u0001\u0000\u0000\u0000\u009a"+
		"\u067b\u0001\u0000\u0000\u0000\u009c\u067d\u0001\u0000\u0000\u0000\u009e"+
		"\u067f\u0001\u0000\u0000\u0000\u00a0\u0681\u0001\u0000\u0000\u0000\u00a2"+
		"\u0683\u0001\u0000\u0000\u0000\u00a4\u0685\u0001\u0000\u0000\u0000\u00a6"+
		"\u0687\u0001\u0000\u0000\u0000\u00a8\u0689\u0001\u0000\u0000\u0000\u00aa"+
		"\u069c\u0001\u0000\u0000\u0000\u00ac\u069e\u0001\u0000\u0000\u0000\u00ae"+
		"\u06a0\u0001\u0000\u0000\u0000\u00b0\u06a2\u0001\u0000\u0000\u0000\u00b2"+
		"\u06bd\u0001\u0000\u0000\u0000\u00b4\u06bf\u0001\u0000\u0000\u0000\u00b6"+
		"\u06c7\u0001\u0000\u0000\u0000\u00b8\u06cc\u0001\u0000\u0000\u0000\u00ba"+
		"\u06ce\u0001\u0000\u0000\u0000\u00bc\u06d6\u0001\u0000\u0000\u0000\u00be"+
		"\u06d9\u0001\u0000\u0000\u0000\u00c0\u0717\u0001\u0000\u0000\u0000\u00c2"+
		"\u0731\u0001\u0000\u0000\u0000\u00c4\u0735\u0001\u0000\u0000\u0000\u00c6"+
		"\u0739\u0001\u0000\u0000\u0000\u00c8\u0743\u0001\u0000\u0000\u0000\u00ca"+
		"\u074b\u0001\u0000\u0000\u0000\u00cc\u075b\u0001\u0000\u0000\u0000\u00ce"+
		"\u0760\u0001\u0000\u0000\u0000\u00d0\u0762\u0001\u0000\u0000\u0000\u00d2"+
		"\u0764\u0001\u0000\u0000\u0000\u00d4\u0773\u0001\u0000\u0000\u0000\u00d6"+
		"\u077a\u0001\u0000\u0000\u0000\u00d8\u077c\u0001\u0000\u0000\u0000\u00da"+
		"\u077e\u0001\u0000\u0000\u0000\u00dc\u0781\u0001\u0000\u0000\u0000\u00de"+
		"\u0791\u0001\u0000\u0000\u0000\u00e0\u0793\u0001\u0000\u0000\u0000\u00e2"+
		"\u0796\u0001\u0000\u0000\u0000\u00e4\u0799\u0001\u0000\u0000\u0000\u00e6"+
		"\u07a1\u0001\u0000\u0000\u0000\u00e8\u07a5\u0001\u0000\u0000\u0000\u00ea"+
		"\u07a7\u0001\u0000\u0000\u0000\u00ec\u07ac\u0001\u0000\u0000\u0000\u00ee"+
		"\u07b7\u0001\u0000\u0000\u0000\u00f0\u07b9\u0001\u0000\u0000\u0000\u00f2"+
		"\u07bd\u0001\u0000\u0000\u0000\u00f4\u07c5\u0001\u0000\u0000\u0000\u00f6"+
		"\u07c7\u0001\u0000\u0000\u0000\u00f8\u07cb\u0001\u0000\u0000\u0000\u00fa"+
		"\u07d0\u0001\u0000\u0000\u0000\u00fc\u07d4\u0001\u0000\u0000\u0000\u00fe"+
		"\u07db\u0001\u0000\u0000\u0000\u0100\u07dd\u0001\u0000\u0000\u0000\u0102"+
		"\u07e0\u0001\u0000\u0000\u0000\u0104\u07e5\u0001\u0000\u0000\u0000\u0106"+
		"\u07e7\u0001\u0000\u0000\u0000\u0108\u07ed\u0001\u0000\u0000\u0000\u010a"+
		"\u07ef\u0001\u0000\u0000\u0000\u010c\u07fc\u0001\u0000\u0000\u0000\u010e"+
		"\u07fe\u0001\u0000\u0000\u0000\u0110\u081a\u0001\u0000\u0000\u0000\u0112"+
		"\u081c\u0001\u0000\u0000\u0000\u0114\u0825\u0001\u0000\u0000\u0000\u0116"+
		"\u0827\u0001\u0000\u0000\u0000\u0118\u083e\u0001\u0000\u0000\u0000\u011a"+
		"\u0840\u0001\u0000\u0000\u0000\u011c\u0851\u0001\u0000\u0000\u0000\u011e"+
		"\u0853\u0001\u0000\u0000\u0000\u0120\u0864\u0001\u0000\u0000\u0000\u0122"+
		"\u0866\u0001\u0000\u0000\u0000\u0124\u086b\u0001\u0000\u0000\u0000\u0126"+
		"\u0870\u0001\u0000\u0000\u0000\u0128\u0874\u0001\u0000\u0000\u0000\u012a"+
		"\u087b\u0001\u0000\u0000\u0000\u012c\u0887\u0001\u0000\u0000\u0000\u012e"+
		"\u0891\u0001\u0000\u0000\u0000\u0130\u08cc\u0001\u0000\u0000\u0000\u0132"+
		"\u08d9\u0001\u0000\u0000\u0000\u0134\u08e5\u0001\u0000\u0000\u0000\u0136"+
		"\u08e7\u0001\u0000\u0000\u0000\u0138\u08f5\u0001\u0000\u0000\u0000\u013a"+
		"\u08f9\u0001\u0000\u0000\u0000\u013c\u08fd\u0001\u0000\u0000\u0000\u013e"+
		"\u08ff\u0001\u0000\u0000\u0000\u0140\u0934\u0001\u0000\u0000\u0000\u0142"+
		"\u0938\u0001\u0000\u0000\u0000\u0144\u093a\u0001\u0000\u0000\u0000\u0146"+
		"\u0941\u0001\u0000\u0000\u0000\u0148\u0943\u0001\u0000\u0000\u0000\u014a"+
		"\u0945\u0001\u0000\u0000\u0000\u014c\u0947\u0001\u0000\u0000\u0000\u014e"+
		"\u0949\u0001\u0000\u0000\u0000\u0150\u094b\u0001\u0000\u0000\u0000\u0152"+
		"\u094d\u0001\u0000\u0000\u0000\u0154\u094f\u0001\u0000\u0000\u0000\u0156"+
		"\u0951\u0001\u0000\u0000\u0000\u0158\u0953\u0001\u0000\u0000\u0000\u015a"+
		"\u0955\u0001\u0000\u0000\u0000\u015c\u0957\u0001\u0000\u0000\u0000\u015e"+
		"\u096f\u0001\u0000\u0000\u0000\u0160\u0971\u0001\u0000\u0000\u0000\u0162"+
		"\u0973\u0001\u0000\u0000\u0000\u0164\u0975\u0001\u0000\u0000\u0000\u0166"+
		"\u097d\u0001\u0000\u0000\u0000\u0168\u0984\u0001\u0000\u0000\u0000\u016a"+
		"\u098a\u0001\u0000\u0000\u0000\u016c\u098c\u0001\u0000\u0000\u0000\u016e"+
		"\u098f\u0001\u0000\u0000\u0000\u0170\u09b5\u0001\u0000\u0000\u0000\u0172"+
		"\u09b7\u0001\u0000\u0000\u0000\u0174\u09c4\u0001\u0000\u0000\u0000\u0176"+
		"\u09e0\u0001\u0000\u0000\u0000\u0178\u09e2\u0001\u0000\u0000\u0000\u017a"+
		"\u09f6\u0001\u0000\u0000\u0000\u017c\u09fe\u0001\u0000\u0000\u0000\u017e"+
		"\u0a02\u0001\u0000\u0000\u0000\u0180\u0a04\u0001\u0000\u0000\u0000\u0182"+
		"\u0a06\u0001\u0000\u0000\u0000\u0184\u0a16\u0001\u0000\u0000\u0000\u0186"+
		"\u0a18\u0001\u0000\u0000\u0000\u0188\u0a2a\u0001\u0000\u0000\u0000\u018a"+
		"\u0a33\u0001\u0000\u0000\u0000\u018c\u018e\u0003\u0002\u0001\u0000\u018d"+
		"\u018f\u0005\f\u0000\u0000\u018e\u018d\u0001\u0000\u0000\u0000\u018e\u018f"+
		"\u0001\u0000\u0000\u0000\u018f\u0190\u0001\u0000\u0000\u0000\u0190\u0191"+
		"\u0005\u0000\u0000\u0001\u0191\u0001\u0001\u0000\u0000\u0000\u0192\u0194"+
		"\u0003\u0006\u0003\u0000\u0193\u0192\u0001\u0000\u0000\u0000\u0193\u0194"+
		"\u0001\u0000\u0000\u0000\u0194\u0195\u0001\u0000\u0000\u0000\u0195\u01d0"+
		"\u0003\u0126\u0093\u0000\u0196\u01d0\u0003\u0174\u00ba\u0000\u0197\u01d0"+
		"\u0003\u0178\u00bc\u0000\u0198\u01d0\u0003\u016e\u00b7\u0000\u0199\u01d0"+
		"\u0003\u0172\u00b9\u0000\u019a\u019b\u00058\u0000\u0000\u019b\u01d0\u0003"+
		"\u0154\u00aa\u0000\u019c\u019d\u0005\u010d\u0000\u0000\u019d\u01a0\u0005"+
		"\u0123\u0000\u0000\u019e\u01a0\u0005>\u0000\u0000\u019f\u019c\u0001\u0000"+
		"\u0000\u0000\u019f\u019e\u0001\u0000\u0000\u0000\u01a0\u01a2\u0001\u0000"+
		"\u0000\u0000\u01a1\u01a3\u0003\u0186\u00c3\u0000\u01a2\u01a1\u0001\u0000"+
		"\u0000\u0000\u01a2\u01a3\u0001\u0000\u0000\u0000\u01a3\u01d0\u0001\u0000"+
		"\u0000\u0000\u01a4\u01a6\u0005\u0104\u0000\u0000\u01a5\u01a7\u0005\u00b0"+
		"\u0000\u0000\u01a6\u01a5\u0001\u0000\u0000\u0000\u01a6\u01a7\u0001\u0000"+
		"\u0000\u0000\u01a7\u01a8\u0001\u0000\u0000\u0000\u01a8\u01a9\u0005\u0123"+
		"\u0000\u0000\u01a9\u01d0\u0003\u0186\u00c3\u0000\u01aa\u01d0\u0005S\u0000"+
		"\u0000\u01ab\u01d0\u0005\u00fc\u0000\u0000\u01ac\u01ad\u0005\u0104\u0000"+
		"\u0000\u01ad\u01ae\u0005\u0103\u0000\u0000\u01ae\u01af\u0005N\u0000\u0000"+
		"\u01af\u01b0\u00055\u0000\u0000\u01b0\u01b5\u0003\u0182\u00c1\u0000\u01b1"+
		"\u01b2\u0005\n\u0000\u0000\u01b2\u01b4\u0003\u0182\u00c1\u0000\u01b3\u01b1"+
		"\u0001\u0000\u0000\u0000\u01b4\u01b7\u0001\u0000\u0000\u0000\u01b5\u01b3"+
		"\u0001\u0000\u0000\u0000\u01b5\u01b6\u0001\u0000\u0000\u0000\u01b6\u01d0"+
		"\u0001\u0000\u0000\u0000\u01b7\u01b5\u0001\u0000\u0000\u0000\u01b8\u01b9"+
		"\u0005\u0104\u0000\u0000\u01b9\u01bc\u0005\u00fb\u0000\u0000\u01ba\u01bd"+
		"\u0003\"\u0011\u0000\u01bb\u01bd\u0005\u00c5\u0000\u0000\u01bc\u01ba\u0001"+
		"\u0000\u0000\u0000\u01bc\u01bb\u0001\u0000\u0000\u0000\u01bd\u01d0\u0001"+
		"\u0000\u0000\u0000\u01be\u01bf\u0005\u0104\u0000\u0000\u01bf\u01c0\u0005"+
		"\u011b\u0000\u0000\u01c0\u01c1\u0005\u0141\u0000\u0000\u01c1\u01d0\u0003"+
		"\u0012\t\u0000\u01c2\u01c3\u0005\u0104\u0000\u0000\u01c3\u01c4\u0003\""+
		"\u0011\u0000\u01c4\u01c5\u0007\u0000\u0000\u0000\u01c5\u01c6\u0003\u000e"+
		"\u0007\u0000\u01c6\u01d0\u0001\u0000\u0000\u0000\u01c7\u01c8\u0005\u0106"+
		"\u0000\u0000\u01c8\u01d0\u0003\u0004\u0002\u0000\u01c9\u01ca\u0005\u0106"+
		"\u0000\u0000\u01ca\u01d0\u0003\"\u0011\u0000\u01cb\u01cc\u0005\u0106\u0000"+
		"\u0000\u01cc\u01cd\u0005\u00a5\u0000\u0000\u01cd\u01ce\u0005\u0110\u0000"+
		"\u0000\u01ce\u01d0\u0005\u0123\u0000\u0000\u01cf\u0193\u0001\u0000\u0000"+
		"\u0000\u01cf\u0196\u0001\u0000\u0000\u0000\u01cf\u0197\u0001\u0000\u0000"+
		"\u0000\u01cf\u0198\u0001\u0000\u0000\u0000\u01cf\u0199\u0001\u0000\u0000"+
		"\u0000\u01cf\u019a\u0001\u0000\u0000\u0000\u01cf\u019f\u0001\u0000\u0000"+
		"\u0000\u01cf\u01a4\u0001\u0000\u0000\u0000\u01cf\u01aa\u0001\u0000\u0000"+
		"\u0000\u01cf\u01ab\u0001\u0000\u0000\u0000\u01cf\u01ac\u0001\u0000\u0000"+
		"\u0000\u01cf\u01b8\u0001\u0000\u0000\u0000\u01cf\u01be\u0001\u0000\u0000"+
		"\u0000\u01cf\u01c2\u0001\u0000\u0000\u0000\u01cf\u01c7\u0001\u0000\u0000"+
		"\u0000\u01cf\u01c9\u0001\u0000\u0000\u0000\u01cf\u01cb\u0001\u0000\u0000"+
		"\u0000\u01d0\u0003\u0001\u0000\u0000\u0000\u01d1\u01d2\u0005\u0123\u0000"+
		"\u0000\u01d2\u01d3\u0005\u009f\u0000\u0000\u01d3\u01db\u0005\u00ab\u0000"+
		"\u0000\u01d4\u01db\u0005\u010c\u0000\u0000\u01d5\u01d6\u0005\u011b\u0000"+
		"\u0000\u01d6\u01d9\u0005\u0141\u0000\u0000\u01d7\u01d9\u0005\u011e\u0000"+
		"\u0000\u01d8\u01d5\u0001\u0000\u0000\u0000\u01d8\u01d7\u0001\u0000\u0000"+
		"\u0000\u01d9\u01db\u0001\u0000\u0000\u0000\u01da\u01d1\u0001\u0000\u0000"+
		"\u0000\u01da\u01d4\u0001\u0000\u0000\u0000\u01da\u01d8\u0001\u0000\u0000"+
		"\u0000\u01db\u0005\u0001\u0000\u0000\u0000\u01dc\u01dd\u0005\u0105\u0000"+
		"\u0000\u01dd\u01e2\u0003\b\u0004\u0000\u01de\u01df\u0005\n\u0000\u0000"+
		"\u01df\u01e1\u0003\b\u0004\u0000\u01e0\u01de\u0001\u0000\u0000\u0000\u01e1"+
		"\u01e4\u0001\u0000\u0000\u0000\u01e2\u01e0\u0001\u0000\u0000\u0000\u01e2"+
		"\u01e3\u0001\u0000\u0000\u0000\u01e3\u0007\u0001\u0000\u0000\u0000\u01e4"+
		"\u01e2\u0001\u0000\u0000\u0000\u01e5\u01e6\u0005k\u0000\u0000\u01e6\u01e8"+
		"\u0005\u0132\u0000\u0000\u01e7\u01e9\u0005\u0121\u0000\u0000\u01e8\u01e7"+
		"\u0001\u0000\u0000\u0000\u01e8\u01e9\u0001\u0000\u0000\u0000\u01e9\u01ea"+
		"\u0001\u0000\u0000\u0000\u01ea\u01f8\u0003\u00ccf\u0000\u01eb\u01ec\u0005"+
		"k\u0000\u0000\u01ec\u01ee\u0005\u0115\u0000\u0000\u01ed\u01ef\u0005\u0121"+
		"\u0000\u0000\u01ee\u01ed\u0001\u0000\u0000\u0000\u01ee\u01ef\u0001\u0000"+
		"\u0000\u0000\u01ef\u01f0\u0001\u0000\u0000\u0000\u01f0\u01f8\u0003\u00cc"+
		"f\u0000\u01f1\u01f2\u0005=\u0000\u0000\u01f2\u01f3\u0007\u0000\u0000\u0000"+
		"\u01f3\u01f8\u0003\u000e\u0007\u0000\u01f4\u01f5\u0005a\u0000\u0000\u01f5"+
		"\u01f6\u0007\u0000\u0000\u0000\u01f6\u01f8\u0003\u000e\u0007\u0000\u01f7"+
		"\u01e5\u0001\u0000\u0000\u0000\u01f7\u01eb\u0001\u0000\u0000\u0000\u01f7"+
		"\u01f1\u0001\u0000\u0000\u0000\u01f7\u01f4\u0001\u0000\u0000\u0000\u01f8"+
		"\t\u0001\u0000\u0000\u0000\u01f9\u01fb\u0005\u009c\u0000\u0000\u01fa\u01fc"+
		"\u0007\u0001\u0000\u0000\u01fb\u01fa\u0001\u0000\u0000\u0000\u01fb\u01fc"+
		"\u0001\u0000\u0000\u0000\u01fc\u01fd\u0001\u0000\u0000\u0000\u01fd\u01ff"+
		"\u0003\u0012\t\u0000\u01fe\u0200\u0003\u0014\n\u0000\u01ff\u01fe\u0001"+
		"\u0000\u0000\u0000\u01ff\u0200\u0001\u0000\u0000\u0000\u0200\u000b\u0001"+
		"\u0000\u0000\u0000\u0201\u0202\u0005d\u0000\u0000\u0202\u0209\u0003\u0012"+
		"\t\u0000\u0203\u0205\u0005\u011c\u0000\u0000\u0204\u0206\u0003:\u001d"+
		"\u0000\u0205\u0204\u0001\u0000\u0000\u0000\u0205\u0206\u0001\u0000\u0000"+
		"\u0000\u0206\u0207\u0001\u0000\u0000\u0000\u0207\u0209\u0003\u0012\t\u0000"+
		"\u0208\u0201\u0001\u0000\u0000\u0000\u0208\u0203\u0001\u0000\u0000\u0000"+
		"\u0209\r\u0001\u0000\u0000\u0000\u020a\u020c\u0007\u0001\u0000\u0000\u020b"+
		"\u020a\u0001\u0000\u0000\u0000\u020b\u020c\u0001\u0000\u0000\u0000\u020c"+
		"\u020d\u0001\u0000\u0000\u0000\u020d\u021f\u0005\u0004\u0000\u0000\u020e"+
		"\u0210\u0007\u0001\u0000\u0000\u020f\u020e\u0001\u0000\u0000\u0000\u020f"+
		"\u0210\u0001\u0000\u0000\u0000\u0210\u0211\u0001\u0000\u0000\u0000\u0211"+
		"\u021f\u0005\u0005\u0000\u0000\u0212\u021f\u0003\u0012\t\u0000\u0213\u021f"+
		"\u0005\b\u0000\u0000\u0214\u021f\u0003\f\u0006\u0000\u0215\u0216\u0005"+
		"\u011b\u0000\u0000\u0216\u021f\u0003\u0012\t\u0000\u0217\u021f\u0003\n"+
		"\u0005\u0000\u0218\u0219\u0005q\u0000\u0000\u0219\u021f\u0003\u0012\t"+
		"\u0000\u021a\u021b\u0005\u0131\u0000\u0000\u021b\u021f\u0003\u0012\t\u0000"+
		"\u021c\u021f\u0007\u0002\u0000\u0000\u021d\u021f\u0005\u00ca\u0000\u0000"+
		"\u021e\u020b\u0001\u0000\u0000\u0000\u021e\u020f\u0001\u0000\u0000\u0000"+
		"\u021e\u0212\u0001\u0000\u0000\u0000\u021e\u0213\u0001\u0000\u0000\u0000"+
		"\u021e\u0214\u0001\u0000\u0000\u0000\u021e\u0215\u0001\u0000\u0000\u0000"+
		"\u021e\u0217\u0001\u0000\u0000\u0000\u021e\u0218\u0001\u0000\u0000\u0000"+
		"\u021e\u021a\u0001\u0000\u0000\u0000\u021e\u021c\u0001\u0000\u0000\u0000"+
		"\u021e\u021d\u0001\u0000\u0000\u0000\u021f\u000f\u0001\u0000\u0000\u0000"+
		"\u0220\u0222\u0005\u0146\u0000\u0000\u0221\u0220\u0001\u0000\u0000\u0000"+
		"\u0222\u0223\u0001\u0000\u0000\u0000\u0223\u0221\u0001\u0000\u0000\u0000"+
		"\u0223\u0224\u0001\u0000\u0000\u0000\u0224\u0011\u0001\u0000\u0000\u0000"+
		"\u0225\u022d\u0005\u0006\u0000\u0000\u0226\u022d\u0005\u0007\u0000\u0000"+
		"\u0227\u0229\u0005\u0142\u0000\u0000\u0228\u022a\u0003\u0010\b\u0000\u0229"+
		"\u0228\u0001\u0000\u0000\u0000\u0229\u022a\u0001\u0000\u0000\u0000\u022a"+
		"\u022b\u0001\u0000\u0000\u0000\u022b\u022d\u0005\u0145\u0000\u0000\u022c"+
		"\u0225\u0001\u0000\u0000\u0000\u022c\u0226\u0001\u0000\u0000\u0000\u022c"+
		"\u0227\u0001\u0000\u0000\u0000\u022d\u0013\u0001\u0000\u0000\u0000\u022e"+
		"\u022f\u0003\u0016\u000b\u0000\u022f\u0230\u0005\u0121\u0000\u0000\u0230"+
		"\u0231\u0003\u0018\f\u0000\u0231\u0234\u0001\u0000\u0000\u0000\u0232\u0234"+
		"\u0003\u001e\u000f\u0000\u0233\u022e\u0001\u0000\u0000\u0000\u0233\u0232"+
		"\u0001\u0000\u0000\u0000\u0234\u0015\u0001\u0000\u0000\u0000\u0235\u0236"+
		"\u0003\u001c\u000e\u0000\u0236\u0017\u0001\u0000\u0000\u0000\u0237\u0238"+
		"\u0003\u001e\u000f\u0000\u0238\u0019\u0001\u0000\u0000\u0000\u0239\u023a"+
		"\u0005\u0005\u0000\u0000\u023a\u001b\u0001\u0000\u0000\u0000\u023b\u023c"+
		"\u0007\u0003\u0000\u0000\u023c\u001d\u0001\u0000\u0000\u0000\u023d\u0246"+
		"\u0003\u001c\u000e\u0000\u023e\u0243\u0005\u0100\u0000\u0000\u023f\u0240"+
		"\u0005\u000f\u0000\u0000\u0240\u0241\u0003\u001a\r\u0000\u0241\u0242\u0005"+
		"\u0010\u0000\u0000\u0242\u0244\u0001\u0000\u0000\u0000\u0243\u023f\u0001"+
		"\u0000\u0000\u0000\u0243\u0244\u0001\u0000\u0000\u0000\u0244\u0246\u0001"+
		"\u0000\u0000\u0000\u0245\u023d\u0001\u0000\u0000\u0000\u0245\u023e\u0001"+
		"\u0000\u0000\u0000\u0246\u001f\u0001\u0000\u0000\u0000\u0247\u024c\u0003"+
		"\"\u0011\u0000\u0248\u0249\u0005\u000b\u0000\u0000\u0249\u024b\u0003\""+
		"\u0011\u0000\u024a\u0248\u0001\u0000\u0000\u0000\u024b\u024e\u0001\u0000"+
		"\u0000\u0000\u024c\u024a\u0001\u0000\u0000\u0000\u024c\u024d\u0001\u0000"+
		"\u0000\u0000\u024d!\u0001\u0000\u0000\u0000\u024e\u024c\u0001\u0000\u0000"+
		"\u0000\u024f\u0266\u0005\u0143\u0000\u0000\u0250\u0266\u0005\u010d\u0000"+
		"\u0000\u0251\u0266\u0005s\u0000\u0000\u0252\u0266\u0005-\u0000\u0000\u0253"+
		"\u0266\u0005T\u0000\u0000\u0254\u0266\u0005\u0129\u0000\u0000\u0255\u0266"+
		"\u0005\u011e\u0000\u0000\u0256\u0266\u0005\u0138\u0000\u0000\u0257\u0266"+
		"\u0005\u00a5\u0000\u0000\u0258\u0266\u0005\u0110\u0000\u0000\u0259\u0266"+
		"\u0005\u0115\u0000\u0000\u025a\u0266\u0005\u0132\u0000\u0000\u025b\u0266"+
		"\u0005\u0101\u0000\u0000\u025c\u0266\u0005\u0098\u0000\u0000\u025d\u0266"+
		"\u0005\u012d\u0000\u0000\u025e\u0266\u0005l\u0000\u0000\u025f\u0266\u0005"+
		"w\u0000\u0000\u0260\u0266\u0005\u0105\u0000\u0000\u0261\u0266\u0005=\u0000"+
		"\u0000\u0262\u0266\u0005H\u0000\u0000\u0263\u0266\u0005\u00fb\u0000\u0000"+
		"\u0264\u0266\u0003\u0160\u00b0\u0000\u0265\u024f\u0001\u0000\u0000\u0000"+
		"\u0265\u0250\u0001\u0000\u0000\u0000\u0265\u0251\u0001\u0000\u0000\u0000"+
		"\u0265\u0252\u0001\u0000\u0000\u0000\u0265\u0253\u0001\u0000\u0000\u0000"+
		"\u0265\u0254\u0001\u0000\u0000\u0000\u0265\u0255\u0001\u0000\u0000\u0000"+
		"\u0265\u0256\u0001\u0000\u0000\u0000\u0265\u0257\u0001\u0000\u0000\u0000"+
		"\u0265\u0258\u0001\u0000\u0000\u0000\u0265\u0259\u0001\u0000\u0000\u0000"+
		"\u0265\u025a\u0001\u0000\u0000\u0000\u0265\u025b\u0001\u0000\u0000\u0000"+
		"\u0265\u025c\u0001\u0000\u0000\u0000\u0265\u025d\u0001\u0000\u0000\u0000"+
		"\u0265\u025e\u0001\u0000\u0000\u0000\u0265\u025f\u0001\u0000\u0000\u0000"+
		"\u0265\u0260\u0001\u0000\u0000\u0000\u0265\u0261\u0001\u0000\u0000\u0000"+
		"\u0265\u0262\u0001\u0000\u0000\u0000\u0265\u0263\u0001\u0000\u0000\u0000"+
		"\u0265\u0264\u0001\u0000\u0000\u0000\u0266\u0269\u0001\u0000\u0000\u0000"+
		"\u0267\u0269\u0005\u0144\u0000\u0000\u0268\u0265\u0001\u0000\u0000\u0000"+
		"\u0268\u0267\u0001\u0000\u0000\u0000\u0269#\u0001\u0000\u0000\u0000\u026a"+
		"\u026b\u0003\"\u0011\u0000\u026b%\u0001\u0000\u0000\u0000\u026c\u0272"+
		"\u0003\"\u0011\u0000\u026d\u026e\u0003$\u0012\u0000\u026e\u026f\u0005"+
		"\u000b\u0000\u0000\u026f\u0270\u0003\"\u0011\u0000\u0270\u0272\u0001\u0000"+
		"\u0000\u0000\u0271\u026c\u0001\u0000\u0000\u0000\u0271\u026d\u0001\u0000"+
		"\u0000\u0000\u0272\'\u0001\u0000\u0000\u0000\u0273\u0274\u0003\"\u0011"+
		"\u0000\u0274)\u0001\u0000\u0000\u0000\u0275\u0276\u0003\"\u0011\u0000"+
		"\u0276+\u0001\u0000\u0000\u0000\u0277\u0278\u0003\"\u0011\u0000\u0278"+
		"-\u0001\u0000\u0000\u0000\u0279\u027a\u0003\"\u0011\u0000\u027a/\u0001"+
		"\u0000\u0000\u0000\u027b\u027c\u0003\"\u0011\u0000\u027c1\u0001\u0000"+
		"\u0000\u0000\u027d\u027e\u0006\u0019\uffff\uffff\u0000\u027e\u0287\u0007"+
		"\u0004\u0000\u0000\u027f\u0280\u0005\u000f\u0000\u0000\u0280\u0283\u0003"+
		"4\u001a\u0000\u0281\u0282\u0005\n\u0000\u0000\u0282\u0284\u00036\u001b"+
		"\u0000\u0283\u0281\u0001\u0000\u0000\u0000\u0283\u0284\u0001\u0000\u0000"+
		"\u0000\u0284\u0285\u0001\u0000\u0000\u0000\u0285\u0286\u0005\u0010\u0000"+
		"\u0000\u0286\u0288\u0001\u0000\u0000\u0000\u0287\u027f\u0001\u0000\u0000"+
		"\u0000\u0287\u0288\u0001\u0000\u0000\u0000\u0288\u02c6\u0001\u0000\u0000"+
		"\u0000\u0289\u02c6\u0007\u0005\u0000\u0000\u028a\u028f\u0005\u0084\u0000"+
		"\u0000\u028b\u028c\u0005\u000f\u0000\u0000\u028c\u028d\u00034\u001a\u0000"+
		"\u028d\u028e\u0005\u0010\u0000\u0000\u028e\u0290\u0001\u0000\u0000\u0000"+
		"\u028f\u028b\u0001\u0000\u0000\u0000\u028f\u0290\u0001\u0000\u0000\u0000"+
		"\u0290\u02c6\u0001\u0000\u0000\u0000\u0291\u02c6\u0005\u00ef\u0000\u0000"+
		"\u0292\u0293\u0005p\u0000\u0000\u0293\u02c6\u0005\u00e9\u0000\u0000\u0294"+
		"\u02c6\u0005C\u0000\u0000\u0295\u02c6\u0005d\u0000\u0000\u0296\u029b\u0005"+
		"\u011b\u0000\u0000\u0297\u0298\u0005\u000f\u0000\u0000\u0298\u0299\u0003"+
		"4\u001a\u0000\u0299\u029a\u0005\u0010\u0000\u0000\u029a\u029c\u0001\u0000"+
		"\u0000\u0000\u029b\u0297\u0001\u0000\u0000\u0000\u029b\u029c\u0001\u0000"+
		"\u0000\u0000\u029c\u029e\u0001\u0000\u0000\u0000\u029d\u029f\u0003:\u001d"+
		"\u0000\u029e\u029d\u0001\u0000\u0000\u0000\u029e\u029f\u0001\u0000\u0000"+
		"\u0000\u029f\u02c6\u0001\u0000\u0000\u0000\u02a0\u02a5\u0005\u011c\u0000"+
		"\u0000\u02a1\u02a2\u0005\u000f\u0000\u0000\u02a2\u02a3\u00034\u001a\u0000"+
		"\u02a3\u02a4\u0005\u0010\u0000\u0000\u02a4\u02a6\u0001\u0000\u0000\u0000"+
		"\u02a5\u02a1\u0001\u0000\u0000\u0000\u02a5\u02a6\u0001\u0000\u0000\u0000"+
		"\u02a6\u02a8\u0001\u0000\u0000\u0000\u02a7\u02a9\u0003:\u001d\u0000\u02a8"+
		"\u02a7\u0001\u0000\u0000\u0000\u02a8\u02a9\u0001\u0000\u0000\u0000\u02a9"+
		"\u02c6\u0001\u0000\u0000\u0000\u02aa\u02c6\u0005\u011d\u0000\u0000\u02ab"+
		"\u02ad\u0005\u009c\u0000\u0000\u02ac\u02ae\u0003\u0014\n\u0000\u02ad\u02ac"+
		"\u0001\u0000\u0000\u0000\u02ad\u02ae\u0001\u0000\u0000\u0000\u02ae\u02c6"+
		"\u0001\u0000\u0000\u0000\u02af\u02c6\u0007\u0006\u0000\u0000\u02b0\u02b5"+
		"\u0005q\u0000\u0000\u02b1\u02b2\u0005\u000f\u0000\u0000\u02b2\u02b3\u0003"+
		"4\u001a\u0000\u02b3\u02b4\u0005\u0010\u0000\u0000\u02b4\u02b6\u0001\u0000"+
		"\u0000\u0000\u02b5\u02b1\u0001\u0000\u0000\u0000\u02b5\u02b6\u0001\u0000"+
		"\u0000\u0000\u02b6\u02c6\u0001\u0000\u0000\u0000\u02b7\u02b8\u0005\u00fd"+
		"\u0000\u0000\u02b8\u02b9\u0005\u000f\u0000\u0000\u02b9\u02be\u0003>\u001f"+
		"\u0000\u02ba\u02bb\u0005\n\u0000\u0000\u02bb\u02bd\u0003>\u001f\u0000"+
		"\u02bc\u02ba\u0001\u0000\u0000\u0000\u02bd\u02c0\u0001\u0000\u0000\u0000"+
		"\u02be\u02bc\u0001\u0000\u0000\u0000\u02be\u02bf\u0001\u0000\u0000\u0000"+
		"\u02bf\u02c1\u0001\u0000\u0000\u0000\u02c0\u02be\u0001\u0000\u0000\u0000"+
		"\u02c1\u02c2\u0005\u0010\u0000\u0000\u02c2\u02c6\u0001\u0000\u0000\u0000"+
		"\u02c3\u02c6\u0005\u00f3\u0000\u0000\u02c4\u02c6\u0005\u00f4\u0000\u0000"+
		"\u02c5\u027d\u0001\u0000\u0000\u0000\u02c5\u0289\u0001\u0000\u0000\u0000"+
		"\u02c5\u028a\u0001\u0000\u0000\u0000\u02c5\u0291\u0001\u0000\u0000\u0000"+
		"\u02c5\u0292\u0001\u0000\u0000\u0000\u02c5\u0294\u0001\u0000\u0000\u0000"+
		"\u02c5\u0295\u0001\u0000\u0000\u0000\u02c5\u0296\u0001\u0000\u0000\u0000"+
		"\u02c5\u02a0\u0001\u0000\u0000\u0000\u02c5\u02aa\u0001\u0000\u0000\u0000"+
		"\u02c5\u02ab\u0001\u0000\u0000\u0000\u02c5\u02af\u0001\u0000\u0000\u0000"+
		"\u02c5\u02b0\u0001\u0000\u0000\u0000\u02c5\u02b7\u0001\u0000\u0000\u0000"+
		"\u02c5\u02c3\u0001\u0000\u0000\u0000\u02c5\u02c4\u0001\u0000\u0000\u0000"+
		"\u02c6\u02d1\u0001\u0000\u0000\u0000\u02c7\u02c8\n\u0001\u0000\u0000\u02c8"+
		"\u02cd\u00051\u0000\u0000\u02c9\u02ca\u0005\u0011\u0000\u0000\u02ca\u02cb"+
		"\u0003<\u001e\u0000\u02cb\u02cc\u0005\u0012\u0000\u0000\u02cc\u02ce\u0001"+
		"\u0000\u0000\u0000\u02cd\u02c9\u0001\u0000\u0000\u0000\u02cd\u02ce\u0001"+
		"\u0000\u0000\u0000\u02ce\u02d0\u0001\u0000\u0000\u0000\u02cf\u02c7\u0001"+
		"\u0000\u0000\u0000\u02d0\u02d3\u0001\u0000\u0000\u0000\u02d1\u02cf\u0001"+
		"\u0000\u0000\u0000\u02d1\u02d2\u0001\u0000\u0000\u0000\u02d23\u0001\u0000"+
		"\u0000\u0000\u02d3\u02d1\u0001\u0000\u0000\u0000\u02d4\u02d5\u0005\u0005"+
		"\u0000\u0000\u02d55\u0001\u0000\u0000\u0000\u02d6\u02d7\u0005\u0005\u0000"+
		"\u0000\u02d77\u0001\u0000\u0000\u0000\u02d8\u02d9\u0007\u0007\u0000\u0000"+
		"\u02d99\u0001\u0000\u0000\u0000\u02da\u02db\u0005\u013d\u0000\u0000\u02db"+
		"\u02dc\u0005\u011b\u0000\u0000\u02dc\u02e1\u0005\u0141\u0000\u0000\u02dd"+
		"\u02de\u0005\u013e\u0000\u0000\u02de\u02df\u0005\u011b\u0000\u0000\u02df"+
		"\u02e1\u0005\u0141\u0000\u0000\u02e0\u02da\u0001\u0000\u0000\u0000\u02e0"+
		"\u02dd\u0001\u0000\u0000\u0000\u02e1;\u0001\u0000\u0000\u0000\u02e2\u02e3"+
		"\u0005\u0005\u0000\u0000\u02e3=\u0001\u0000\u0000\u0000\u02e4\u02e5\u0003"+
		".\u0017\u0000\u02e5\u02e6\u00032\u0019\u0000\u02e6?\u0001\u0000\u0000"+
		"\u0000\u02e7\u02e8\u0006 \uffff\uffff\u0000\u02e8\u02ea\u0003B!\u0000"+
		"\u02e9\u02eb\u0005\u00c6\u0000\u0000\u02ea\u02e9\u0001\u0000\u0000\u0000"+
		"\u02ea\u02eb\u0001\u0000\u0000\u0000\u02eb\u02ec\u0001\u0000\u0000\u0000"+
		"\u02ec\u02ee\u0005A\u0000\u0000\u02ed\u02ef\u0007\b\u0000\u0000\u02ee"+
		"\u02ed\u0001\u0000\u0000\u0000\u02ee\u02ef\u0001\u0000\u0000\u0000\u02ef"+
		"\u02f0\u0001\u0000\u0000\u0000\u02f0\u02f1\u0003B!\u0000\u02f1\u02f2\u0005"+
		"/\u0000\u0000\u02f2\u02f3\u0003B!\u0000\u02f3\u02f8\u0001\u0000\u0000"+
		"\u0000\u02f4\u02f5\u0005\u00c6\u0000\u0000\u02f5\u02f8\u0003@ \u0004\u02f6"+
		"\u02f8\u0003B!\u0000\u02f7\u02e7\u0001\u0000\u0000\u0000\u02f7\u02f4\u0001"+
		"\u0000\u0000\u0000\u02f7\u02f6\u0001\u0000\u0000\u0000\u02f8\u034b\u0001"+
		"\u0000\u0000\u0000\u02f9\u02fa\n\u0013\u0000\u0000\u02fa\u02fb\u0003\u0144"+
		"\u00a2\u0000\u02fb\u02fc\u0003@ \u0014\u02fc\u034a\u0001\u0000\u0000\u0000"+
		"\u02fd\u02fe\n\f\u0000\u0000\u02fe\u02ff\u0005\u00db\u0000\u0000\u02ff"+
		"\u034a\u0003@ \r\u0300\u0301\n\u000b\u0000\u0000\u0301\u0302\u0005v\u0000"+
		"\u0000\u0302\u034a\u0003@ \f\u0303\u0304\n\n\u0000\u0000\u0304\u0305\u0005"+
		"U\u0000\u0000\u0305\u034a\u0003@ \u000b\u0306\u0307\n\t\u0000\u0000\u0307"+
		"\u0308\u0005\u00e7\u0000\u0000\u0308\u034a\u0003@ \n\u0309\u030a\n\b\u0000"+
		"\u0000\u030a\u030b\u0005\u0112\u0000\u0000\u030b\u034a\u0003@ \t\u030c"+
		"\u030d\n\u0007\u0000\u0000\u030d\u030e\u0005\u0095\u0000\u0000\u030e\u030f"+
		"\u0005\u00e7\u0000\u0000\u030f\u034a\u0003@ \b\u0310\u0311\n\u0006\u0000"+
		"\u0000\u0311\u0312\u0005\u0095\u0000\u0000\u0312\u0313\u0005\u0112\u0000"+
		"\u0000\u0313\u034a\u0003@ \u0007\u0314\u0315\n\u0003\u0000\u0000\u0315"+
		"\u0316\u0005/\u0000\u0000\u0316\u034a\u0003@ \u0004\u0317\u0318\n\u0002"+
		"\u0000\u0000\u0318\u0319\u0005\u00d5\u0000\u0000\u0319\u034a\u0003@ \u0003"+
		"\u031a\u031b\n\u0014\u0000\u0000\u031b\u031d\u0005\u009e\u0000\u0000\u031c"+
		"\u031e\u0005\u00c6\u0000\u0000\u031d\u031c\u0001\u0000\u0000\u0000\u031d"+
		"\u031e\u0001\u0000\u0000\u0000\u031e\u031f\u0001\u0000\u0000\u0000\u031f"+
		"\u034a\u0003L&\u0000\u0320\u0322\n\u0011\u0000\u0000\u0321\u0323\u0005"+
		"\u00c6\u0000\u0000\u0322\u0321\u0001\u0000\u0000\u0000\u0322\u0323\u0001"+
		"\u0000\u0000\u0000\u0323\u0324\u0001\u0000\u0000\u0000\u0324\u0325\u0005"+
		"\u0096\u0000\u0000\u0325\u034a\u0003\u0146\u00a3\u0000\u0326\u0328\n\u0010"+
		"\u0000\u0000\u0327\u0329\u0005\u00c6\u0000\u0000\u0328\u0327\u0001\u0000"+
		"\u0000\u0000\u0328\u0329\u0001\u0000\u0000\u0000\u0329\u032a\u0001\u0000"+
		"\u0000\u0000\u032a\u032b\u0005\u00ac\u0000\u0000\u032b\u032e\u0003\u0148"+
		"\u00a4\u0000\u032c\u032d\u0005x\u0000\u0000\u032d\u032f\u0003\u014a\u00a5"+
		"\u0000\u032e\u032c\u0001\u0000\u0000\u0000\u032e\u032f\u0001\u0000\u0000"+
		"\u0000\u032f\u034a\u0001\u0000\u0000\u0000\u0330\u0332\n\u000f\u0000\u0000"+
		"\u0331\u0333\u0005\u00c6\u0000\u0000\u0332\u0331\u0001\u0000\u0000\u0000"+
		"\u0332\u0333\u0001\u0000\u0000\u0000\u0333\u0334\u0001\u0000\u0000\u0000"+
		"\u0334\u0335\u0005\u00ad\u0000\u0000\u0335\u0338\u0003\u014c\u00a6\u0000"+
		"\u0336\u0337\u0005\u0083\u0000\u0000\u0337\u0339\u0003\u014e\u00a7\u0000"+
		"\u0338\u0336\u0001\u0000\u0000\u0000\u0338\u0339\u0001\u0000\u0000\u0000"+
		"\u0339\u034a\u0001\u0000\u0000\u0000\u033a\u033b\n\u000e\u0000\u0000\u033b"+
		"\u033c\u0003\u0150\u00a8\u0000\u033c\u033d\u0003\u014c\u00a6\u0000\u033d"+
		"\u034a\u0001\u0000\u0000\u0000\u033e\u033f\n\r\u0000\u0000\u033f\u0341"+
		"\u0005\u009e\u0000\u0000\u0340\u0342\u0005\u00c6\u0000\u0000\u0341\u0340"+
		"\u0001\u0000\u0000\u0000\u0341\u0342\u0001\u0000\u0000\u0000\u0342\u0343"+
		"\u0001\u0000\u0000\u0000\u0343\u034a\u0005\u00ca\u0000\u0000\u0344\u0345"+
		"\n\u0005\u0000\u0000\u0345\u0346\u0003\u0144\u00a2\u0000\u0346\u0347\u0003"+
		"\u0152\u00a9\u0000\u0347\u0348\u0003\u0142\u00a1\u0000\u0348\u034a\u0001"+
		"\u0000\u0000\u0000\u0349\u02f9\u0001\u0000\u0000\u0000\u0349\u02fd\u0001"+
		"\u0000\u0000\u0000\u0349\u0300\u0001\u0000\u0000\u0000\u0349\u0303\u0001"+
		"\u0000\u0000\u0000\u0349\u0306\u0001\u0000\u0000\u0000\u0349\u0309\u0001"+
		"\u0000\u0000\u0000\u0349\u030c\u0001\u0000\u0000\u0000\u0349\u0310\u0001"+
		"\u0000\u0000\u0000\u0349\u0314\u0001\u0000\u0000\u0000\u0349\u0317\u0001"+
		"\u0000\u0000\u0000\u0349\u031a\u0001\u0000\u0000\u0000\u0349\u0320\u0001"+
		"\u0000\u0000\u0000\u0349\u0326\u0001\u0000\u0000\u0000\u0349\u0330\u0001"+
		"\u0000\u0000\u0000\u0349\u033a\u0001\u0000\u0000\u0000\u0349\u033e\u0001"+
		"\u0000\u0000\u0000\u0349\u0344\u0001\u0000\u0000\u0000\u034a\u034d\u0001"+
		"\u0000\u0000\u0000\u034b\u0349\u0001\u0000\u0000\u0000\u034b\u034c\u0001"+
		"\u0000\u0000\u0000\u034cA\u0001\u0000\u0000\u0000\u034d\u034b\u0001\u0000"+
		"\u0000\u0000\u034e\u034f\u0006!\uffff\uffff\u0000\u034f\u0350\u0005\u0018"+
		"\u0000\u0000\u0350\u0357\u0003B!\t\u0351\u0352\u0005\u0019\u0000\u0000"+
		"\u0352\u0357\u0003B!\b\u0353\u0354\u0005\u0016\u0000\u0000\u0354\u0357"+
		"\u0003B!\u0005\u0355\u0357\u0003D\"\u0000\u0356\u034e\u0001\u0000\u0000"+
		"\u0000\u0356\u0351\u0001\u0000\u0000\u0000\u0356\u0353\u0001\u0000\u0000"+
		"\u0000\u0356\u0355\u0001\u0000\u0000\u0000\u0357\u0369\u0001\u0000\u0000"+
		"\u0000\u0358\u0359\n\u0007\u0000\u0000\u0359\u035a\u0007\t\u0000\u0000"+
		"\u035a\u0368\u0003B!\b\u035b\u035c\n\u0006\u0000\u0000\u035c\u035d\u0007"+
		"\u0001\u0000\u0000\u035d\u0368\u0003B!\u0007\u035e\u035f\n\u0004\u0000"+
		"\u0000\u035f\u0360\u0005\u0017\u0000\u0000\u0360\u0368\u0003B!\u0005\u0361"+
		"\u0362\n\u0003\u0000\u0000\u0362\u0363\u0007\n\u0000\u0000\u0363\u0368"+
		"\u0003B!\u0004\u0364\u0365\n\u0002\u0000\u0000\u0365\u0366\u0007\u000b"+
		"\u0000\u0000\u0366\u0368\u0003B!\u0003\u0367\u0358\u0001\u0000\u0000\u0000"+
		"\u0367\u035b\u0001\u0000\u0000\u0000\u0367\u035e\u0001\u0000\u0000\u0000"+
		"\u0367\u0361\u0001\u0000\u0000\u0000\u0367\u0364\u0001\u0000\u0000\u0000"+
		"\u0368\u036b\u0001\u0000\u0000\u0000\u0369\u0367\u0001\u0000\u0000\u0000"+
		"\u0369\u036a\u0001\u0000\u0000\u0000\u036aC\u0001\u0000\u0000\u0000\u036b"+
		"\u0369\u0001\u0000\u0000\u0000\u036c\u036d\u0006\"\uffff\uffff\u0000\u036d"+
		"\u036e\u0005\u000f\u0000\u0000\u036e\u036f\u0003@ \u0000\u036f\u0370\u0005"+
		"\u0010\u0000\u0000\u0370\u0571\u0001\u0000\u0000\u0000\u0371\u0571\u0003"+
		"\u000e\u0007\u0000\u0372\u0571\u0003T*\u0000\u0373\u0571\u0003V+\u0000"+
		"\u0374\u0571\u0003\u015e\u00af\u0000\u0375\u0376\u0003`0\u0000\u0376\u0377"+
		"\u0005\u00da\u0000\u0000\u0377\u0378\u0003t:\u0000\u0378\u0571\u0001\u0000"+
		"\u0000\u0000\u0379\u0571\u0003v;\u0000\u037a\u0571\u0003\u013e\u009f\u0000"+
		"\u037b\u037c\u0005\u00c2\u0000\u0000\u037c\u0571\u0003\u013e\u009f\u0000"+
		"\u037d\u037e\u0005\u00c1\u0000\u0000\u037e\u0571\u0003\u013e\u009f\u0000"+
		"\u037f\u0380\u0005I\u0000\u0000\u0380\u0382\u0003@ \u0000\u0381\u0383"+
		"\u0003\u0082A\u0000\u0382\u0381\u0001\u0000\u0000\u0000\u0383\u0384\u0001"+
		"\u0000\u0000\u0000\u0384\u0382\u0001\u0000\u0000\u0000\u0384\u0385\u0001"+
		"\u0000\u0000\u0000\u0385\u0387\u0001\u0000\u0000\u0000\u0386\u0388\u0003"+
		"\u0086C\u0000\u0387\u0386\u0001\u0000\u0000\u0000\u0387\u0388\u0001\u0000"+
		"\u0000\u0000\u0388\u0389\u0001\u0000\u0000\u0000\u0389\u038a\u0005s\u0000"+
		"\u0000\u038a\u0571\u0001\u0000\u0000\u0000\u038b\u038d\u0005I\u0000\u0000"+
		"\u038c\u038e\u0003\u0084B\u0000\u038d\u038c\u0001\u0000\u0000\u0000\u038e"+
		"\u038f\u0001\u0000\u0000\u0000\u038f\u038d\u0001\u0000\u0000\u0000\u038f"+
		"\u0390\u0001\u0000\u0000\u0000\u0390\u0392\u0001\u0000\u0000\u0000\u0391"+
		"\u0393\u0003\u0086C\u0000\u0392\u0391\u0001\u0000\u0000\u0000\u0392\u0393"+
		"\u0001\u0000\u0000\u0000\u0393\u0394\u0001\u0000\u0000\u0000\u0394\u0395"+
		"\u0005s\u0000\u0000\u0395\u0571\u0001\u0000\u0000\u0000\u0396\u0397\u0005"+
		"\u00cb\u0000\u0000\u0397\u0398\u0005\u000f\u0000\u0000\u0398\u0399\u0003"+
		"@ \u0000\u0399\u039a\u0005\n\u0000\u0000\u039a\u039b\u0003@ \u0000\u039b"+
		"\u039c\u0005\u0010\u0000\u0000\u039c\u0571\u0001\u0000\u0000\u0000\u039d"+
		"\u039e\u0005R\u0000\u0000\u039e\u039f\u0005\u000f\u0000\u0000\u039f\u03a4"+
		"\u0003@ \u0000\u03a0\u03a1\u0005\n\u0000\u0000\u03a1\u03a3\u0003@ \u0000"+
		"\u03a2\u03a0\u0001\u0000\u0000\u0000\u03a3\u03a6\u0001\u0000\u0000\u0000"+
		"\u03a4\u03a2\u0001\u0000\u0000\u0000\u03a4\u03a5\u0001\u0000\u0000\u0000"+
		"\u03a5\u03a7\u0001\u0000\u0000\u0000\u03a6\u03a4\u0001\u0000\u0000\u0000"+
		"\u03a7\u03a8\u0005\u0010\u0000\u0000\u03a8\u0571\u0001\u0000\u0000\u0000"+
		"\u03a9\u03aa\u0005J\u0000\u0000\u03aa\u03ab\u0005\u000f\u0000\u0000\u03ab"+
		"\u03ac\u0003@ \u0000\u03ac\u03ad\u00055\u0000\u0000\u03ad\u03ae\u0003"+
		"2\u0019\u0000\u03ae\u03af\u0005\u0010\u0000\u0000\u03af\u0571\u0001\u0000"+
		"\u0000\u0000\u03b0\u0571\u0003\u00aaU\u0000\u03b1\u0571\u0003N\'\u0000"+
		"\u03b2\u0571\u0003X,\u0000\u03b3\u03b4\u0005|\u0000\u0000\u03b4\u0571"+
		"\u0003\u013e\u009f\u0000\u03b5\u03b6\u0003$\u0012\u0000\u03b6\u03b7\u0005"+
		"\u000b\u0000\u0000\u03b7\u03b9\u0001\u0000\u0000\u0000\u03b8\u03b5\u0001"+
		"\u0000\u0000\u0000\u03b8\u03b9\u0001\u0000\u0000\u0000\u03b9\u03ba\u0001"+
		"\u0000\u0000\u0000\u03ba\u03bb\u0005\u008f\u0000\u0000\u03bb\u03bf\u0005"+
		"\u000f\u0000\u0000\u03bc\u03bd\u0003\u0156\u00ab\u0000\u03bd\u03be\u0005"+
		"\n\u0000\u0000\u03be\u03c0\u0001\u0000\u0000\u0000\u03bf\u03bc\u0001\u0000"+
		"\u0000\u0000\u03bf\u03c0\u0001\u0000\u0000\u0000\u03c0\u03c1\u0001\u0000"+
		"\u0000\u0000\u03c1\u03c2\u0003\u0158\u00ac\u0000\u03c2\u03c3\u0005\n\u0000"+
		"\u0000\u03c3\u03c4\u0003\u015c\u00ae\u0000\u03c4\u03c5\u0005\u0010\u0000"+
		"\u0000\u03c5\u0571\u0001\u0000\u0000\u0000\u03c6\u03c7\u0003$\u0012\u0000"+
		"\u03c7\u03c8\u0005\u000b\u0000\u0000\u03c8\u03ca\u0001\u0000\u0000\u0000"+
		"\u03c9\u03c6\u0001\u0000\u0000\u0000\u03c9\u03ca\u0001\u0000\u0000\u0000"+
		"\u03ca\u03cb\u0001\u0000\u0000\u0000\u03cb\u03cc\u0005\u0091\u0000\u0000"+
		"\u03cc\u03d0\u0005\u000f\u0000\u0000\u03cd\u03ce\u0003\u0156\u00ab\u0000"+
		"\u03ce\u03cf\u0005\n\u0000\u0000\u03cf\u03d1\u0001\u0000\u0000\u0000\u03d0"+
		"\u03cd\u0001\u0000\u0000\u0000\u03d0\u03d1\u0001\u0000\u0000\u0000\u03d1"+
		"\u03d2\u0001\u0000\u0000\u0000\u03d2\u03d3\u0003\u0158\u00ac\u0000\u03d3"+
		"\u03d4\u0005\n\u0000\u0000\u03d4\u03d5\u0003\u015c\u00ae\u0000\u03d5\u03d6"+
		"\u0005\u0010\u0000\u0000\u03d6\u0571\u0001\u0000\u0000\u0000\u03d7\u03d8"+
		"\u0003$\u0012\u0000\u03d8\u03d9\u0005\u000b\u0000\u0000\u03d9\u03db\u0001"+
		"\u0000\u0000\u0000\u03da\u03d7\u0001\u0000\u0000\u0000\u03da\u03db\u0001"+
		"\u0000\u0000\u0000\u03db\u03dc\u0001\u0000\u0000\u0000\u03dc\u03dd\u0005"+
		"\u0090\u0000\u0000\u03dd\u03e1\u0005\u000f\u0000\u0000\u03de\u03df\u0003"+
		"\u0156\u00ab\u0000\u03df\u03e0\u0005\n\u0000\u0000\u03e0\u03e2\u0001\u0000"+
		"\u0000\u0000\u03e1\u03de\u0001\u0000\u0000\u0000\u03e1\u03e2\u0001\u0000"+
		"\u0000\u0000\u03e2\u03e3\u0001\u0000\u0000\u0000\u03e3\u03e4\u0003\u015a"+
		"\u00ad\u0000\u03e4\u03e5\u0005\n\u0000\u0000\u03e5\u03e6\u0003\u015c\u00ae"+
		"\u0000\u03e6\u03e7\u0005\u0010\u0000\u0000\u03e7\u0571\u0001\u0000\u0000"+
		"\u0000\u03e8\u03e9\u0003$\u0012\u0000\u03e9\u03ea\u0005\u000b\u0000\u0000"+
		"\u03ea\u03ec\u0001\u0000\u0000\u0000\u03eb\u03e8\u0001\u0000\u0000\u0000"+
		"\u03eb\u03ec\u0001\u0000\u0000\u0000\u03ec\u03ed\u0001\u0000\u0000\u0000"+
		"\u03ed\u03ee\u0005\u0138\u0000\u0000\u03ee\u03ef\u0005\u000f\u0000\u0000"+
		"\u03ef\u0571\u0005\u0010\u0000\u0000\u03f0\u03f1\u0005\u00e5\u0000\u0000"+
		"\u03f1\u03f2\u0005\u000f\u0000\u0000\u03f2\u03f3\u0003@ \u0000\u03f3\u03f4"+
		"\u0005\u0096\u0000\u0000\u03f4\u03f7\u0003@ \u0000\u03f5\u03f6\u0005\u0130"+
		"\u0000\u0000\u03f6\u03f8\u00038\u001c\u0000\u03f7\u03f5\u0001\u0000\u0000"+
		"\u0000\u03f7\u03f8\u0001\u0000\u0000\u0000\u03f8\u03f9\u0001\u0000\u0000"+
		"\u0000\u03f9\u03fa\u0005\u0010\u0000\u0000\u03fa\u0571\u0001\u0000\u0000"+
		"\u0000\u03fb\u03fc\u0005~\u0000\u0000\u03fc\u03fd\u0005\u000f\u0000\u0000"+
		"\u03fd\u03fe\u0003\u008cF\u0000\u03fe\u03ff\u0005\u0089\u0000\u0000\u03ff"+
		"\u0400\u0003\u0092I\u0000\u0400\u0401\u0005\u0010\u0000\u0000\u0401\u0571"+
		"\u0001\u0000\u0000\u0000\u0402\u0403\u0007\f\u0000\u0000\u0403\u0404\u0005"+
		"\u000f\u0000\u0000\u0404\u0407\u0003@ \u0000\u0405\u0406\u0005\u0130\u0000"+
		"\u0000\u0406\u0408\u00038\u001c\u0000\u0407\u0405\u0001\u0000\u0000\u0000"+
		"\u0407\u0408\u0001\u0000\u0000\u0000\u0408\u0409\u0001\u0000\u0000\u0000"+
		"\u0409\u040a\u0005\u0010\u0000\u0000\u040a\u0571\u0001\u0000\u0000\u0000"+
		"\u040b\u040c\u0005\u00d0\u0000\u0000\u040c\u040d\u0005\u000f\u0000\u0000"+
		"\u040d\u040e\u0003@ \u0000\u040e\u040f\u0005\u0010\u0000\u0000\u040f\u0571"+
		"\u0001\u0000\u0000\u0000\u0410\u0411\u0005\u00aa\u0000\u0000\u0411\u0412"+
		"\u0005\u000f\u0000\u0000\u0412\u0413\u0003@ \u0000\u0413\u0414\u0005\u0010"+
		"\u0000\u0000\u0414\u0571\u0001\u0000\u0000\u0000\u0415\u0416\u0005H\u0000"+
		"\u0000\u0416\u0417\u0005\u000f\u0000\u0000\u0417\u0418\u0003@ \u0000\u0418"+
		"\u0419\u0005\u0010\u0000\u0000\u0419\u0571\u0001\u0000\u0000\u0000\u041a"+
		"\u041b\u00053\u0000\u0000\u041b\u041c\u0005\u000f\u0000\u0000\u041c\u041d"+
		"\u0003@ \u0000\u041d\u041e\u0005\n\u0000\u0000\u041e\u041f\u0003@ \u0000"+
		"\u041f\u0420\u0005\u0010\u0000\u0000\u0420\u0571\u0001\u0000\u0000\u0000"+
		"\u0421\u0422\u0005+\u0000\u0000\u0422\u0423\u0005\u000f\u0000\u0000\u0423"+
		"\u0424\u0003@ \u0000\u0424\u0425\u0005\u0010\u0000\u0000\u0425\u0571\u0001"+
		"\u0000\u0000\u0000\u0426\u0427\u0005\u00bd\u0000\u0000\u0427\u0428\u0005"+
		"\u000f\u0000\u0000\u0428\u0429\u0003@ \u0000\u0429\u042a\u0005\n\u0000"+
		"\u0000\u042a\u042b\u0003@ \u0000\u042b\u042c\u0005\u0010\u0000\u0000\u042c"+
		"\u0571\u0001\u0000\u0000\u0000\u042d\u042e\u0003\u00acV\u0000\u042e\u042f"+
		"\u0005\u000f\u0000\u0000\u042f\u0430\u0003@ \u0000\u0430\u0431\u0005\u0010"+
		"\u0000\u0000\u0431\u0571\u0001\u0000\u0000\u0000\u0432\u0433\u0005\u00b3"+
		"\u0000\u0000\u0433\u0434\u0005\u000f\u0000\u0000\u0434\u0435\u0003\u00ae"+
		"W\u0000\u0435\u0436\u0005\n\u0000\u0000\u0436\u0437\u0003\u00b0X\u0000"+
		"\u0437\u0438\u0005\u0010\u0000\u0000\u0438\u0571\u0001\u0000\u0000\u0000"+
		"\u0439\u043a\u0005\u00b4\u0000\u0000\u043a\u043b\u0005\u000f\u0000\u0000"+
		"\u043b\u043c\u0003@ \u0000\u043c\u043d\u0005\u0010\u0000\u0000\u043d\u0571"+
		"\u0001\u0000\u0000\u0000\u043e\u043f\u0005\u00af\u0000\u0000\u043f\u0440"+
		"\u0005\u000f\u0000\u0000\u0440\u0441\u0003@ \u0000\u0441\u0442\u0005\u0010"+
		"\u0000\u0000\u0442\u0571\u0001\u0000\u0000\u0000\u0443\u0444\u0005}\u0000"+
		"\u0000\u0444\u0445\u0005\u000f\u0000\u0000\u0445\u0446\u0003@ \u0000\u0446"+
		"\u0447\u0005\u0010\u0000\u0000\u0447\u0571\u0001\u0000\u0000\u0000\u0448"+
		"\u0449\u0005\u00e6\u0000\u0000\u0449\u044a\u0005\u000f\u0000\u0000\u044a"+
		"\u044b\u0003@ \u0000\u044b\u044c\u0005\n\u0000\u0000\u044c\u044d\u0003"+
		"@ \u0000\u044d\u044e\u0005\u0010\u0000\u0000\u044e\u0571\u0001\u0000\u0000"+
		"\u0000\u044f\u0450\u0005\u010b\u0000\u0000\u0450\u0451\u0005\u000f\u0000"+
		"\u0000\u0451\u0452\u0003@ \u0000\u0452\u0453\u0005\u0010\u0000\u0000\u0453"+
		"\u0571\u0001\u0000\u0000\u0000\u0454\u0455\u0005\u0085\u0000\u0000\u0455"+
		"\u0456\u0005\u000f\u0000\u0000\u0456\u0457\u0003@ \u0000\u0457\u0458\u0005"+
		"\u0010\u0000\u0000\u0458\u0571\u0001\u0000\u0000\u0000\u0459\u045a\u0007"+
		"\r\u0000\u0000\u045a\u045b\u0005\u000f\u0000\u0000\u045b\u045c\u0003@"+
		" \u0000\u045c\u045d\u0005\u0010\u0000\u0000\u045d\u0571\u0001\u0000\u0000"+
		"\u0000\u045e\u045f\u0005\u00a8\u0000\u0000\u045f\u0460\u0005\u000f\u0000"+
		"\u0000\u0460\u0465\u0003@ \u0000\u0461\u0462\u0005\n\u0000\u0000\u0462"+
		"\u0464\u0003@ \u0000\u0463\u0461\u0001\u0000\u0000\u0000\u0464\u0467\u0001"+
		"\u0000\u0000\u0000\u0465\u0463\u0001\u0000\u0000\u0000\u0465\u0466\u0001"+
		"\u0000\u0000\u0000\u0466\u0468\u0001\u0000\u0000\u0000\u0467\u0465\u0001"+
		"\u0000\u0000\u0000\u0468\u0469\u0005\u0010\u0000\u0000\u0469\u0571\u0001"+
		"\u0000\u0000\u0000\u046a\u046b\u0005\u008c\u0000\u0000\u046b\u046c\u0005"+
		"\u000f\u0000\u0000\u046c\u0471\u0003@ \u0000\u046d\u046e\u0005\n\u0000"+
		"\u0000\u046e\u0470\u0003@ \u0000\u046f\u046d\u0001\u0000\u0000\u0000\u0470"+
		"\u0473\u0001\u0000\u0000\u0000\u0471\u046f\u0001\u0000\u0000\u0000\u0471"+
		"\u0472\u0001\u0000\u0000\u0000\u0472\u0474\u0001\u0000\u0000\u0000\u0473"+
		"\u0471\u0001\u0000\u0000\u0000\u0474\u0475\u0005\u0010\u0000\u0000\u0475"+
		"\u0571\u0001\u0000\u0000\u0000\u0476\u0477\u0005\u0111\u0000\u0000\u0477"+
		"\u0478\u0005\u000f\u0000\u0000\u0478\u048d\u0003@ \u0000\u0479\u047b\u0005"+
		"\u0089\u0000\u0000\u047a\u0479\u0001\u0000\u0000\u0000\u047a\u047b\u0001"+
		"\u0000\u0000\u0000\u047b\u047c\u0001\u0000\u0000\u0000\u047c\u0481\u0003"+
		"\u009aM\u0000\u047d\u047f\u0005\u0087\u0000\u0000\u047e\u047d\u0001\u0000"+
		"\u0000\u0000\u047e\u047f\u0001\u0000\u0000\u0000\u047f\u0480\u0001\u0000"+
		"\u0000\u0000\u0480\u0482\u0003\u009cN\u0000\u0481\u047e\u0001\u0000\u0000"+
		"\u0000\u0481\u0482\u0001\u0000\u0000\u0000\u0482\u0485\u0001\u0000\u0000"+
		"\u0000\u0483\u0484\u0005\u0130\u0000\u0000\u0484\u0486\u00038\u001c\u0000"+
		"\u0485\u0483\u0001\u0000\u0000\u0000\u0485\u0486\u0001\u0000\u0000\u0000"+
		"\u0486\u048e\u0001\u0000\u0000\u0000\u0487\u0488\u0005\n\u0000\u0000\u0488"+
		"\u048b\u0003\u009aM\u0000\u0489\u048a\u0005\n\u0000\u0000\u048a\u048c"+
		"\u0003\u009cN\u0000\u048b\u0489\u0001\u0000\u0000\u0000\u048b\u048c\u0001"+
		"\u0000\u0000\u0000\u048c\u048e\u0001\u0000\u0000\u0000\u048d\u047a\u0001"+
		"\u0000\u0000\u0000\u048d\u0487\u0001\u0000\u0000\u0000\u048e\u048f\u0001"+
		"\u0000\u0000\u0000\u048f\u0490\u0005\u0010\u0000\u0000\u0490\u0571\u0001"+
		"\u0000\u0000\u0000\u0491\u0492\u0005\u012e\u0000\u0000\u0492\u0493\u0005"+
		"\u000f\u0000\u0000\u0493\u0494\u0003@ \u0000\u0494\u0495\u0005\u0010\u0000"+
		"\u0000\u0495\u0571\u0001\u0000\u0000\u0000\u0496\u0497\u0005\u00b5\u0000"+
		"\u0000\u0497\u0498\u0005\u000f\u0000\u0000\u0498\u0499\u0003@ \u0000\u0499"+
		"\u049a\u0005\u0010\u0000\u0000\u049a\u0571\u0001\u0000\u0000\u0000\u049b"+
		"\u049c\u0005\u0124\u0000\u0000\u049c\u049e\u0005\u000f\u0000\u0000\u049d"+
		"\u049f\u0003\u0096K\u0000\u049e\u049d\u0001\u0000\u0000\u0000\u049e\u049f"+
		"\u0001\u0000\u0000\u0000\u049f\u04a1\u0001\u0000\u0000\u0000\u04a0\u04a2"+
		"\u0003\u0098L\u0000\u04a1\u04a0\u0001\u0000\u0000\u0000\u04a1\u04a2\u0001"+
		"\u0000\u0000\u0000\u04a2\u04a4\u0001\u0000\u0000\u0000\u04a3\u04a5\u0005"+
		"\u0089\u0000\u0000\u04a4\u04a3\u0001\u0000\u0000\u0000\u04a4\u04a5\u0001"+
		"\u0000\u0000\u0000\u04a5\u04a6\u0001\u0000\u0000\u0000\u04a6\u04a7\u0003"+
		"\u0094J\u0000\u04a7\u04a8\u0005\u0010\u0000\u0000\u04a8\u0571\u0001\u0000"+
		"\u0000\u0000\u04a9\u04aa\u0005\u00dc\u0000\u0000\u04aa\u04ab\u0005\u000f"+
		"\u0000\u0000\u04ab\u04ac\u0003@ \u0000\u04ac\u04ad\u0005\u00e3\u0000\u0000"+
		"\u04ad\u04ae\u0003@ \u0000\u04ae\u04af\u0005\u0089\u0000\u0000\u04af\u04b2"+
		"\u0003\u009aM\u0000\u04b0\u04b1\u0005\u0087\u0000\u0000\u04b1\u04b3\u0003"+
		"\u009cN\u0000\u04b2\u04b0\u0001\u0000\u0000\u0000\u04b2\u04b3\u0001\u0000"+
		"\u0000\u0000\u04b3\u04b6\u0001\u0000\u0000\u0000\u04b4\u04b5\u0005\u0130"+
		"\u0000\u0000\u04b5\u04b7\u00038\u001c\u0000\u04b6\u04b4\u0001\u0000\u0000"+
		"\u0000\u04b6\u04b7\u0001\u0000\u0000\u0000\u04b7\u04b8\u0001\u0000\u0000"+
		"\u0000\u04b8\u04b9\u0005\u0010\u0000\u0000\u04b9\u0571\u0001\u0000\u0000"+
		"\u0000\u04ba\u04bb\u0005\u00f7\u0000\u0000\u04bb\u04bc\u0005\u000f\u0000"+
		"\u0000\u04bc\u04bd\u0003@ \u0000\u04bd\u04be\u0005\n\u0000\u0000\u04be"+
		"\u04bf\u0003F#\u0000\u04bf\u04c0\u0005\n\u0000\u0000\u04c0\u04c1\u0003"+
		"H$\u0000\u04c1\u04c2\u0005\u0010\u0000\u0000\u04c2\u0571\u0001\u0000\u0000"+
		"\u0000\u04c3\u04c4\u0003$\u0012\u0000\u04c4\u04c5\u0005\u000b\u0000\u0000"+
		"\u04c5\u04c7\u0001\u0000\u0000\u0000\u04c6\u04c3\u0001\u0000\u0000\u0000"+
		"\u04c6\u04c7\u0001\u0000\u0000\u0000\u04c7\u04c8\u0001\u0000\u0000\u0000"+
		"\u04c8\u0571\u0005c\u0000\u0000\u04c9\u04ca\u0003$\u0012\u0000\u04ca\u04cb"+
		"\u0005\u000b\u0000\u0000\u04cb\u04cd\u0001\u0000\u0000\u0000\u04cc\u04c9"+
		"\u0001\u0000\u0000\u0000\u04cc\u04cd\u0001\u0000\u0000\u0000\u04cd\u04ce"+
		"\u0001\u0000\u0000\u0000\u04ce\u04d1\u0005_\u0000\u0000\u04cf\u04d0\u0005"+
		"\u000f\u0000\u0000\u04d0\u04d2\u0005\u0010\u0000\u0000\u04d1\u04cf\u0001"+
		"\u0000\u0000\u0000\u04d1\u04d2\u0001\u0000\u0000\u0000\u04d2\u0571\u0001"+
		"\u0000\u0000\u0000\u04d3\u04d4\u0003$\u0012\u0000\u04d4\u04d5\u0005\u000b"+
		"\u0000\u0000\u04d5\u04d7\u0001\u0000\u0000\u0000\u04d6\u04d3\u0001\u0000"+
		"\u0000\u0000\u04d6\u04d7\u0001\u0000\u0000\u0000\u04d7\u04d8\u0001\u0000"+
		"\u0000\u0000\u04d8\u04d9\u0005`\u0000\u0000\u04d9\u04da\u0005\u000f\u0000"+
		"\u0000\u04da\u04db\u0003@ \u0000\u04db\u04dc\u0005\u0010\u0000\u0000\u04dc"+
		"\u0571\u0001\u0000\u0000\u0000\u04dd\u04de\u0003$\u0012\u0000\u04de\u04df"+
		"\u0005\u000b\u0000\u0000\u04df\u04e1\u0001\u0000\u0000\u0000\u04e0\u04dd"+
		"\u0001\u0000\u0000\u0000\u04e0\u04e1\u0001\u0000\u0000\u0000\u04e1\u04e2"+
		"\u0001\u0000\u0000\u0000\u04e2\u04e5\u0005\\\u0000\u0000\u04e3\u04e4\u0005"+
		"\u000f\u0000\u0000\u04e4\u04e6\u0005\u0010\u0000\u0000\u04e5\u04e3\u0001"+
		"\u0000\u0000\u0000\u04e5\u04e6\u0001\u0000\u0000\u0000\u04e6\u0571\u0001"+
		"\u0000\u0000\u0000\u04e7\u04e8\u0003$\u0012\u0000\u04e8\u04e9\u0005\u000b"+
		"\u0000\u0000\u04e9\u04eb\u0001\u0000\u0000\u0000\u04ea\u04e7\u0001\u0000"+
		"\u0000\u0000\u04ea\u04eb\u0001\u0000\u0000\u0000\u04eb\u04ec\u0001\u0000"+
		"\u0000\u0000\u04ec\u04f7\u0005\u00e1\u0000\u0000\u04ed\u04ee\u0005\u000f"+
		"\u0000\u0000\u04ee\u04ef\u0003@ \u0000\u04ef\u04f0\u0005\n\u0000\u0000"+
		"\u04f0\u04f3\u0003@ \u0000\u04f1\u04f2\u0005\n\u0000\u0000\u04f2\u04f4"+
		"\u0003@ \u0000\u04f3\u04f1\u0001\u0000\u0000\u0000\u04f3\u04f4\u0001\u0000"+
		"\u0000\u0000\u04f4\u04f5\u0001\u0000\u0000\u0000\u04f5\u04f6\u0005\u0010"+
		"\u0000\u0000\u04f6\u04f8\u0001\u0000\u0000\u0000\u04f7\u04ed\u0001\u0000"+
		"\u0000\u0000\u04f7\u04f8\u0001\u0000\u0000\u0000\u04f8\u0571\u0001\u0000"+
		"\u0000\u0000\u04f9\u04fa\u0003$\u0012\u0000\u04fa\u04fb\u0005\u000b\u0000"+
		"\u0000\u04fb\u04fd\u0001\u0000\u0000\u0000\u04fc\u04f9\u0001\u0000\u0000"+
		"\u0000\u04fc\u04fd\u0001\u0000\u0000\u0000\u04fd\u04fe\u0001\u0000\u0000"+
		"\u0000\u04fe\u0503\u0005\u00e0\u0000\u0000\u04ff\u0500\u0005\u000f\u0000"+
		"\u0000\u0500\u0501\u0003@ \u0000\u0501\u0502\u0005\u0010\u0000\u0000\u0502"+
		"\u0504\u0001\u0000\u0000\u0000\u0503\u04ff\u0001\u0000\u0000\u0000\u0503"+
		"\u0504\u0001\u0000\u0000\u0000\u0504\u0571\u0001\u0000\u0000\u0000\u0505"+
		"\u0506\u0003$\u0012\u0000\u0506\u0507\u0005\u000b\u0000\u0000\u0507\u0509"+
		"\u0001\u0000\u0000\u0000\u0508\u0505\u0001\u0000\u0000\u0000\u0508\u0509"+
		"\u0001\u0000\u0000\u0000\u0509\u050a\u0001\u0000\u0000\u0000\u050a\u050b"+
		"\u0005\u00e2\u0000\u0000\u050b\u050c\u0005\u000f\u0000\u0000\u050c\u0512"+
		"\u0003@ \u0000\u050d\u050e\u0005\n\u0000\u0000\u050e\u050f\u0003@ \u0000"+
		"\u050f\u0510\u0005\n\u0000\u0000\u0510\u0511\u0003@ \u0000\u0511\u0513"+
		"\u0001\u0000\u0000\u0000\u0512\u050d\u0001\u0000\u0000\u0000\u0512\u0513"+
		"\u0001\u0000\u0000\u0000\u0513\u0514\u0001\u0000\u0000\u0000\u0514\u0515"+
		"\u0005\u0010\u0000\u0000\u0515\u0571\u0001\u0000\u0000\u0000\u0516\u0571"+
		"\u0003J%\u0000\u0517\u051c\u0005a\u0000\u0000\u0518\u0519\u0005\u000f"+
		"\u0000\u0000\u0519\u051a\u00034\u001a\u0000\u051a\u051b\u0005\u0010\u0000"+
		"\u0000\u051b\u051d\u0001\u0000\u0000\u0000\u051c\u0518\u0001\u0000\u0000"+
		"\u0000\u051c\u051d\u0001\u0000\u0000\u0000\u051d\u0571\u0001\u0000\u0000"+
		"\u0000\u051e\u0523\u0005\u00b1\u0000\u0000\u051f\u0520\u0005\u000f\u0000"+
		"\u0000\u0520\u0521\u00034\u001a\u0000\u0521\u0522\u0005\u0010\u0000\u0000"+
		"\u0522\u0524\u0001\u0000\u0000\u0000\u0523\u051f\u0001\u0000\u0000\u0000"+
		"\u0523\u0524\u0001\u0000\u0000\u0000\u0524\u0571\u0001\u0000\u0000\u0000"+
		"\u0525\u0526\u0005f\u0000\u0000\u0526\u0527\u0005\u000f\u0000\u0000\u0527"+
		"\u0528\u0003\u009eO\u0000\u0528\u0529\u0005\n\u0000\u0000\u0529\u052c"+
		"\u0003\u00a0P\u0000\u052a\u052b\u0005\n\u0000\u0000\u052b\u052d\u0003"+
		"\u00a2Q\u0000\u052c\u052a\u0001\u0000\u0000\u0000\u052c\u052d\u0001\u0000"+
		"\u0000\u0000\u052d\u052e\u0001\u0000\u0000\u0000\u052e\u052f\u0005\u0010"+
		"\u0000\u0000\u052f\u0571\u0001\u0000\u0000\u0000\u0530\u0531\u0005e\u0000"+
		"\u0000\u0531\u0532\u0005\u000f\u0000\u0000\u0532\u0533\u0003\n\u0005\u0000"+
		"\u0533\u0534\u0005\n\u0000\u0000\u0534\u0537\u0003\u00a4R\u0000\u0535"+
		"\u0536\u0005\n\u0000\u0000\u0536\u0538\u0003\u00a8T\u0000\u0537\u0535"+
		"\u0001\u0000\u0000\u0000\u0537\u0538\u0001\u0000\u0000\u0000\u0538\u0539"+
		"\u0001\u0000\u0000\u0000\u0539\u053a\u0005\u0010\u0000\u0000\u053a\u0571"+
		"\u0001\u0000\u0000\u0000\u053b\u053c\u0005\u00ec\u0000\u0000\u053c\u053d"+
		"\u0005\u000f\u0000\u0000\u053d\u053e\u0003\n\u0005\u0000\u053e\u053f\u0005"+
		"\n\u0000\u0000\u053f\u0542\u0003\u00a6S\u0000\u0540\u0541\u0005\n\u0000"+
		"\u0000\u0541\u0543\u0003\u00a8T\u0000\u0542\u0540\u0001\u0000\u0000\u0000"+
		"\u0542\u0543\u0001\u0000\u0000\u0000\u0543\u0544\u0001\u0000\u0000\u0000"+
		"\u0544\u0545\u0005\u0010\u0000\u0000\u0545\u0571\u0001\u0000\u0000\u0000"+
		"\u0546\u0547\u0005\u00db\u0000\u0000\u0547\u0548\u0005\u000f\u0000\u0000"+
		"\u0548\u054b\u0003@ \u0000\u0549\u054a\u0005\n\u0000\u0000\u054a\u054c"+
		"\u0003@ \u0000\u054b\u0549\u0001\u0000\u0000\u0000\u054c\u054d\u0001\u0000"+
		"\u0000\u0000\u054d\u054b\u0001\u0000\u0000\u0000\u054d\u054e\u0001\u0000"+
		"\u0000\u0000\u054e\u054f\u0001\u0000\u0000\u0000\u054f\u0550\u0005\u0010"+
		"\u0000\u0000\u0550\u0571\u0001\u0000\u0000\u0000\u0551\u0552\u0007\u000e"+
		"\u0000\u0000\u0552\u0553\u0005\u000f\u0000\u0000\u0553\u0554\u0003@ \u0000"+
		"\u0554\u0555\u0005\n\u0000\u0000\u0555\u0556\u0003@ \u0000\u0556\u0557"+
		"\u0005\u0010\u0000\u0000\u0557\u0571\u0001\u0000\u0000\u0000\u0558\u0559"+
		"\u0005\u012f\u0000\u0000\u0559\u055a\u0005\u000f\u0000\u0000\u055a\u055b"+
		"\u0003@ \u0000\u055b\u055c\u0005\u0010\u0000\u0000\u055c\u0571\u0001\u0000"+
		"\u0000\u0000\u055d\u055e\u0005\u00b6\u0000\u0000\u055e\u055f\u0005\u000f"+
		"\u0000\u0000\u055f\u0560\u0003@ \u0000\u0560\u0561\u0005\u0010\u0000\u0000"+
		"\u0561\u0571\u0001\u0000\u0000\u0000\u0562\u0563\u0005-\u0000\u0000\u0563"+
		"\u0564\u0005\u000f\u0000\u0000\u0564\u0565\u0003@ \u0000\u0565\u0566\u0005"+
		"\n\u0000\u0000\u0566\u0567\u0003@ \u0000\u0567\u0568\u0005\u0010\u0000"+
		"\u0000\u0568\u0571\u0001\u0000\u0000\u0000\u0569\u056a\u0005\u0125\u0000"+
		"\u0000\u056a\u056b\u0005\u000f\u0000\u0000\u056b\u056c\u0003@ \u0000\u056c"+
		"\u056d\u0005\n\u0000\u0000\u056d\u056e\u0003@ \u0000\u056e\u056f\u0005"+
		"\u0010\u0000\u0000\u056f\u0571\u0001\u0000\u0000\u0000\u0570\u036c\u0001"+
		"\u0000\u0000\u0000\u0570\u0371\u0001\u0000\u0000\u0000\u0570\u0372\u0001"+
		"\u0000\u0000\u0000\u0570\u0373\u0001\u0000\u0000\u0000\u0570\u0374\u0001"+
		"\u0000\u0000\u0000\u0570\u0375\u0001\u0000\u0000\u0000\u0570\u0379\u0001"+
		"\u0000\u0000\u0000\u0570\u037a\u0001\u0000\u0000\u0000\u0570\u037b\u0001"+
		"\u0000\u0000\u0000\u0570\u037d\u0001\u0000\u0000\u0000\u0570\u037f\u0001"+
		"\u0000\u0000\u0000\u0570\u038b\u0001\u0000\u0000\u0000\u0570\u0396\u0001"+
		"\u0000\u0000\u0000\u0570\u039d\u0001\u0000\u0000\u0000\u0570\u03a9\u0001"+
		"\u0000\u0000\u0000\u0570\u03b0\u0001\u0000\u0000\u0000\u0570\u03b1\u0001"+
		"\u0000\u0000\u0000\u0570\u03b2\u0001\u0000\u0000\u0000\u0570\u03b3\u0001"+
		"\u0000\u0000\u0000\u0570\u03b8\u0001\u0000\u0000\u0000\u0570\u03c9\u0001"+
		"\u0000\u0000\u0000\u0570\u03da\u0001\u0000\u0000\u0000\u0570\u03eb\u0001"+
		"\u0000\u0000\u0000\u0570\u03f0\u0001\u0000\u0000\u0000\u0570\u03fb\u0001"+
		"\u0000\u0000\u0000\u0570\u0402\u0001\u0000\u0000\u0000\u0570\u040b\u0001"+
		"\u0000\u0000\u0000\u0570\u0410\u0001\u0000\u0000\u0000\u0570\u0415\u0001"+
		"\u0000\u0000\u0000\u0570\u041a\u0001\u0000\u0000\u0000\u0570\u0421\u0001"+
		"\u0000\u0000\u0000\u0570\u0426\u0001\u0000\u0000\u0000\u0570\u042d\u0001"+
		"\u0000\u0000\u0000\u0570\u0432\u0001\u0000\u0000\u0000\u0570\u0439\u0001"+
		"\u0000\u0000\u0000\u0570\u043e\u0001\u0000\u0000\u0000\u0570\u0443\u0001"+
		"\u0000\u0000\u0000\u0570\u0448\u0001\u0000\u0000\u0000\u0570\u044f\u0001"+
		"\u0000\u0000\u0000\u0570\u0454\u0001\u0000\u0000\u0000\u0570\u0459\u0001"+
		"\u0000\u0000\u0000\u0570\u045e\u0001\u0000\u0000\u0000\u0570\u046a\u0001"+
		"\u0000\u0000\u0000\u0570\u0476\u0001\u0000\u0000\u0000\u0570\u0491\u0001"+
		"\u0000\u0000\u0000\u0570\u0496\u0001\u0000\u0000\u0000\u0570\u049b\u0001"+
		"\u0000\u0000\u0000\u0570\u04a9\u0001\u0000\u0000\u0000\u0570\u04ba\u0001"+
		"\u0000\u0000\u0000\u0570\u04c6\u0001\u0000\u0000\u0000\u0570\u04cc\u0001"+
		"\u0000\u0000\u0000\u0570\u04d6\u0001\u0000\u0000\u0000\u0570\u04e0\u0001"+
		"\u0000\u0000\u0000\u0570\u04ea\u0001\u0000\u0000\u0000\u0570\u04fc\u0001"+
		"\u0000\u0000\u0000\u0570\u0508\u0001\u0000\u0000\u0000\u0570\u0516\u0001"+
		"\u0000\u0000\u0000\u0570\u0517\u0001\u0000\u0000\u0000\u0570\u051e\u0001"+
		"\u0000\u0000\u0000\u0570\u0525\u0001\u0000\u0000\u0000\u0570\u0530\u0001"+
		"\u0000\u0000\u0000\u0570\u053b\u0001\u0000\u0000\u0000\u0570\u0546\u0001"+
		"\u0000\u0000\u0000\u0570\u0551\u0001\u0000\u0000\u0000\u0570\u0558\u0001"+
		"\u0000\u0000\u0000\u0570\u055d\u0001\u0000\u0000\u0000\u0570\u0562\u0001"+
		"\u0000\u0000\u0000\u0570\u0569\u0001\u0000\u0000\u0000\u0571\u0582\u0001"+
		"\u0000\u0000\u0000\u0572\u0573\nC\u0000\u0000\u0573\u0574\u0005\u0015"+
		"\u0000\u0000\u0574\u0581\u0003D\"D\u0575\u0576\nF\u0000\u0000\u0576\u0577"+
		"\u0005\u000b\u0000\u0000\u0577\u0581\u0003.\u0017\u0000\u0578\u0579\n"+
		"E\u0000\u0000\u0579\u057a\u0005\u0011\u0000\u0000\u057a\u057b\u0003@ "+
		"\u0000\u057b\u057c\u0005\u0012\u0000\u0000\u057c\u0581\u0001\u0000\u0000"+
		"\u0000\u057d\u057e\nD\u0000\u0000\u057e\u057f\u0005\'\u0000\u0000\u057f"+
		"\u0581\u00032\u0019\u0000\u0580\u0572\u0001\u0000\u0000\u0000\u0580\u0575"+
		"\u0001\u0000\u0000\u0000\u0580\u0578\u0001\u0000\u0000\u0000\u0580\u057d"+
		"\u0001\u0000\u0000\u0000\u0581\u0584\u0001\u0000\u0000\u0000\u0582\u0580"+
		"\u0001\u0000\u0000\u0000\u0582\u0583\u0001\u0000\u0000\u0000\u0583E\u0001"+
		"\u0000\u0000\u0000\u0584\u0582\u0001\u0000\u0000\u0000\u0585\u0586\u0003"+
		"@ \u0000\u0586G\u0001\u0000\u0000\u0000\u0587\u0588\u0003@ \u0000\u0588"+
		"I\u0001\u0000\u0000\u0000\u0589\u058c\u0005]\u0000\u0000\u058a\u058b\u0005"+
		"\u000f\u0000\u0000\u058b\u058d\u0005\u0010\u0000\u0000\u058c\u058a\u0001"+
		"\u0000\u0000\u0000\u058c\u058d\u0001\u0000\u0000\u0000\u058d\u059d\u0001"+
		"\u0000\u0000\u0000\u058e\u0593\u0007\u000f\u0000\u0000\u058f\u0590\u0005"+
		"\u000f\u0000\u0000\u0590\u0591\u00034\u001a\u0000\u0591\u0592\u0005\u0010"+
		"\u0000\u0000\u0592\u0594\u0001\u0000\u0000\u0000\u0593\u058f\u0001\u0000"+
		"\u0000\u0000\u0593\u0594\u0001\u0000\u0000\u0000\u0594\u059d\u0001\u0000"+
		"\u0000\u0000\u0595\u059a\u0005\u00b2\u0000\u0000\u0596\u0597\u0005\u000f"+
		"\u0000\u0000\u0597\u0598\u00034\u001a\u0000\u0598\u0599\u0005\u0010\u0000"+
		"\u0000\u0599\u059b\u0001\u0000\u0000\u0000\u059a\u0596\u0001\u0000\u0000"+
		"\u0000\u059a\u059b\u0001\u0000\u0000\u0000\u059b\u059d\u0001\u0000\u0000"+
		"\u0000\u059c\u0589\u0001\u0000\u0000\u0000\u059c\u058e\u0001\u0000\u0000"+
		"\u0000\u059c\u0595\u0001\u0000\u0000\u0000\u059dK\u0001\u0000\u0000\u0000"+
		"\u059e\u059f\u0007\u0010\u0000\u0000\u059fM\u0001\u0000\u0000\u0000\u05a0"+
		"\u05a1\u0007\u0011\u0000\u0000\u05a1\u05aa\u0005\u000f\u0000\u0000\u05a2"+
		"\u05a7\u0003P(\u0000\u05a3\u05a4\u0005\n\u0000\u0000\u05a4\u05a6\u0003"+
		"P(\u0000\u05a5\u05a3\u0001\u0000\u0000\u0000\u05a6\u05a9\u0001\u0000\u0000"+
		"\u0000\u05a7\u05a5\u0001\u0000\u0000\u0000\u05a7\u05a8\u0001\u0000\u0000"+
		"\u0000\u05a8\u05ab\u0001\u0000\u0000\u0000\u05a9\u05a7\u0001\u0000\u0000"+
		"\u0000\u05aa\u05a2\u0001\u0000\u0000\u0000\u05aa\u05ab\u0001\u0000\u0000"+
		"\u0000\u05ab\u05ac\u0001\u0000\u0000\u0000\u05ac\u05ba\u0005\u0010\u0000"+
		"\u0000\u05ad\u05b6\u0005\u0013\u0000\u0000\u05ae\u05b3\u0003P(\u0000\u05af"+
		"\u05b0\u0005\n\u0000\u0000\u05b0\u05b2\u0003P(\u0000\u05b1\u05af\u0001"+
		"\u0000\u0000\u0000\u05b2\u05b5\u0001\u0000\u0000\u0000\u05b3\u05b1\u0001"+
		"\u0000\u0000\u0000\u05b3\u05b4\u0001\u0000\u0000\u0000\u05b4\u05b7\u0001"+
		"\u0000\u0000\u0000\u05b5\u05b3\u0001\u0000\u0000\u0000\u05b6\u05ae\u0001"+
		"\u0000\u0000\u0000\u05b6\u05b7\u0001\u0000\u0000\u0000\u05b7\u05b8\u0001"+
		"\u0000\u0000\u0000\u05b8\u05ba\u0005\u0014\u0000\u0000\u05b9\u05a0\u0001"+
		"\u0000\u0000\u0000\u05b9\u05ad\u0001\u0000\u0000\u0000\u05baO\u0001\u0000"+
		"\u0000\u0000\u05bb\u05bc\u0003R)\u0000\u05bc\u05bd\u0005\r\u0000\u0000"+
		"\u05bd\u05be\u0003@ \u0000\u05beQ\u0001\u0000\u0000\u0000\u05bf\u05c0"+
		"\u0003\"\u0011\u0000\u05c0S\u0001\u0000\u0000\u0000\u05c1\u05c4\u0005"+
		"\u000e\u0000\u0000\u05c2\u05c4\u0005\t\u0000\u0000\u05c3\u05c1\u0001\u0000"+
		"\u0000\u0000\u05c3\u05c2\u0001\u0000\u0000\u0000\u05c4U\u0001\u0000\u0000"+
		"\u0000\u05c5\u05c6\u0003 \u0010\u0000\u05c6W\u0001\u0000\u0000\u0000\u05c7"+
		"\u05c8\u0003$\u0012\u0000\u05c8\u05c9\u0005\u000b\u0000\u0000\u05c9\u05cb"+
		"\u0001\u0000\u0000\u0000\u05ca\u05c7\u0001\u0000\u0000\u0000\u05ca\u05cb"+
		"\u0001\u0000\u0000\u0000\u05cb\u05cc\u0001\u0000\u0000\u0000\u05cc\u05cd"+
		"\u0005\u008b\u0000\u0000\u05cd\u05ce\u0005\u000f\u0000\u0000\u05ce\u05cf"+
		"\u0003Z-\u0000\u05cf\u05d0\u0005\n\u0000\u0000\u05d0\u05d3\u0003\\.\u0000"+
		"\u05d1\u05d2\u0005\n\u0000\u0000\u05d2\u05d4\u0003^/\u0000\u05d3\u05d1"+
		"\u0001\u0000\u0000\u0000\u05d3\u05d4\u0001\u0000\u0000\u0000\u05d4\u05d5"+
		"\u0001\u0000\u0000\u0000\u05d5\u05d6\u0005\u0010\u0000\u0000\u05d6Y\u0001"+
		"\u0000\u0000\u0000\u05d7\u05d8\u0003@ \u0000\u05d8[\u0001\u0000\u0000"+
		"\u0000\u05d9\u05da\u0003@ \u0000\u05da]\u0001\u0000\u0000\u0000\u05db"+
		"\u05dc\u0003@ \u0000\u05dc_\u0001\u0000\u0000\u0000\u05dd\u05de\u0003"+
		"b1\u0000\u05de\u05df\u0005\u000f\u0000\u0000\u05df\u05e0\u0005\u0010\u0000"+
		"\u0000\u05e0\u060d\u0001\u0000\u0000\u0000\u05e1\u05e2\u0005\u00ff\u0000"+
		"\u0000\u05e2\u05e3\u0005\u000f\u0000\u0000\u05e3\u060d\u0005\u0010\u0000"+
		"\u0000\u05e4\u060d\u0003\u015e\u00af\u0000\u05e5\u05e6\u0005\u00c9\u0000"+
		"\u0000\u05e6\u05e7\u0005\u000f\u0000\u0000\u05e7\u05e8\u0003d2\u0000\u05e8"+
		"\u05e9\u0005\u0010\u0000\u0000\u05e9\u060d\u0001\u0000\u0000\u0000\u05ea"+
		"\u05eb\u0007\u0012\u0000\u0000\u05eb\u05ec\u0005\u000f\u0000\u0000\u05ec"+
		"\u05f3\u0003f3\u0000\u05ed\u05ee\u0005\n\u0000\u0000\u05ee\u05f1\u0003"+
		"h4\u0000\u05ef\u05f0\u0005\n\u0000\u0000\u05f0\u05f2\u0003j5\u0000\u05f1"+
		"\u05ef\u0001\u0000\u0000\u0000\u05f1\u05f2\u0001\u0000\u0000\u0000\u05f2"+
		"\u05f4\u0001\u0000\u0000\u0000\u05f3\u05ed\u0001\u0000\u0000\u0000\u05f3"+
		"\u05f4\u0001\u0000\u0000\u0000\u05f4\u05f5\u0001\u0000\u0000\u0000\u05f5"+
		"\u05f7\u0005\u0010\u0000\u0000\u05f6\u05f8\u0003l6\u0000\u05f7\u05f6\u0001"+
		"\u0000\u0000\u0000\u05f7\u05f8\u0001\u0000\u0000\u0000\u05f8\u060d\u0001"+
		"\u0000\u0000\u0000\u05f9\u05fa\u0003n7\u0000\u05fa\u05fb\u0005\u000f\u0000"+
		"\u0000\u05fb\u05fc\u0003@ \u0000\u05fc\u05fe\u0005\u0010\u0000\u0000\u05fd"+
		"\u05ff\u0003l6\u0000\u05fe\u05fd\u0001\u0000\u0000\u0000\u05fe\u05ff\u0001"+
		"\u0000\u0000\u0000\u05ff\u060d\u0001\u0000\u0000\u0000\u0600\u0601\u0005"+
		"\u00c8\u0000\u0000\u0601\u0602\u0005\u000f\u0000\u0000\u0602\u0603\u0003"+
		"@ \u0000\u0603\u0604\u0005\n\u0000\u0000\u0604\u0605\u0003p8\u0000\u0605"+
		"\u0607\u0005\u0010\u0000\u0000\u0606\u0608\u0003r9\u0000\u0607\u0606\u0001"+
		"\u0000\u0000\u0000\u0607\u0608\u0001\u0000\u0000\u0000\u0608\u060a\u0001"+
		"\u0000\u0000\u0000\u0609\u060b\u0003l6\u0000\u060a\u0609\u0001\u0000\u0000"+
		"\u0000\u060a\u060b\u0001\u0000\u0000\u0000\u060b\u060d\u0001\u0000\u0000"+
		"\u0000\u060c\u05dd\u0001\u0000\u0000\u0000\u060c\u05e1\u0001\u0000\u0000"+
		"\u0000\u060c\u05e4\u0001\u0000\u0000\u0000\u060c\u05e5\u0001\u0000\u0000"+
		"\u0000\u060c\u05ea\u0001\u0000\u0000\u0000\u060c\u05f9\u0001\u0000\u0000"+
		"\u0000\u060c\u0600\u0001\u0000\u0000\u0000\u060da\u0001\u0000\u0000\u0000"+
		"\u060e\u060f\u0007\u0013\u0000\u0000\u060fc\u0001\u0000\u0000\u0000\u0610"+
		"\u0613\u0005\u0005\u0000\u0000\u0611\u0613\u0003T*\u0000\u0612\u0610\u0001"+
		"\u0000\u0000\u0000\u0612\u0611\u0001\u0000\u0000\u0000\u0613e\u0001\u0000"+
		"\u0000\u0000\u0614\u0615\u0003@ \u0000\u0615g\u0001\u0000\u0000\u0000"+
		"\u0616\u0617\u0005\u0005\u0000\u0000\u0617i\u0001\u0000\u0000\u0000\u0618"+
		"\u0619\u0003@ \u0000\u0619k\u0001\u0000\u0000\u0000\u061a\u061b\u0005"+
		"\u00f8\u0000\u0000\u061b\u061f\u0005\u00cc\u0000\u0000\u061c\u061d\u0005"+
		"\u0094\u0000\u0000\u061d\u061f\u0005\u00cc\u0000\u0000\u061e\u061a\u0001"+
		"\u0000\u0000\u0000\u061e\u061c\u0001\u0000\u0000\u0000\u061fm\u0001\u0000"+
		"\u0000\u0000\u0620\u0621\u0007\u0014\u0000\u0000\u0621o\u0001\u0000\u0000"+
		"\u0000\u0622\u0623\u0007\u0015\u0000\u0000\u0623q\u0001\u0000\u0000\u0000"+
		"\u0624\u0625\u0005\u0089\u0000\u0000\u0625\u0629\u0005\u0081\u0000\u0000"+
		"\u0626\u0627\u0005\u0089\u0000\u0000\u0627\u0629\u0005\u00a2\u0000\u0000"+
		"\u0628\u0624\u0001\u0000\u0000\u0000\u0628\u0626\u0001\u0000\u0000\u0000"+
		"\u0629s\u0001\u0000\u0000\u0000\u062a\u062d\u00030\u0018\u0000\u062b\u062d"+
		"\u0003\u00eau\u0000\u062c\u062a\u0001\u0000\u0000\u0000\u062c\u062b\u0001"+
		"\u0000\u0000\u0000\u062du\u0001\u0000\u0000\u0000\u062e\u062f\u0005\u00ff"+
		"\u0000\u0000\u062f\u0630\u0005\u000f\u0000\u0000\u0630\u0631\u0003x<\u0000"+
		"\u0631\u0632\u0005\u0010\u0000\u0000\u0632\u063f\u0001\u0000\u0000\u0000"+
		"\u0633\u0634\u0005\u0134\u0000\u0000\u0634\u0635\u0005\u000f\u0000\u0000"+
		"\u0635\u0636\u0003@ \u0000\u0636\u0637\u0005:\u0000\u0000\u0637\u063a"+
		"\u0003z=\u0000\u0638\u0639\u0005\n\u0000\u0000\u0639\u063b\u0003\u0080"+
		"@\u0000\u063a\u0638\u0001\u0000\u0000\u0000\u063a\u063b\u0001\u0000\u0000"+
		"\u0000\u063b\u063c\u0001\u0000\u0000\u0000\u063c\u063d\u0005\u0010\u0000"+
		"\u0000\u063d\u063f\u0001\u0000\u0000\u0000\u063e\u062e\u0001\u0000\u0000"+
		"\u0000\u063e\u0633\u0001\u0000\u0000\u0000\u063fw\u0001\u0000\u0000\u0000"+
		"\u0640\u0641\u0007\u0016\u0000\u0000\u0641y\u0001\u0000\u0000\u0000\u0642"+
		"\u0644\u0003x<\u0000\u0643\u0645\u0003|>\u0000\u0644\u0643\u0001\u0000"+
		"\u0000\u0000\u0644\u0645\u0001\u0000\u0000\u0000\u0645{\u0001\u0000\u0000"+
		"\u0000\u0646\u0647\u0005\u0018\u0000\u0000\u0647\u064b\u0003~?\u0000\u0648"+
		"\u0649\u0005\u0019\u0000\u0000\u0649\u064b\u0003~?\u0000\u064a\u0646\u0001"+
		"\u0000\u0000\u0000\u064a\u0648\u0001\u0000\u0000\u0000\u064b}\u0001\u0000"+
		"\u0000\u0000\u064c\u064d\u0007\u0015\u0000\u0000\u064d\u007f\u0001\u0000"+
		"\u0000\u0000\u064e\u064f\u0003@ \u0000\u064f\u0081\u0001\u0000\u0000\u0000"+
		"\u0650\u0651\u0005\u013a\u0000\u0000\u0651\u0652\u0003\u0088D\u0000\u0652"+
		"\u0653\u0005\u0119\u0000\u0000\u0653\u0654\u0003@ \u0000\u0654\u0083\u0001"+
		"\u0000\u0000\u0000\u0655\u0656\u0005\u013a\u0000\u0000\u0656\u0657\u0003"+
		"@ \u0000\u0657\u0658\u0005\u0119\u0000\u0000\u0658\u0659\u0003@ \u0000"+
		"\u0659\u0085\u0001\u0000\u0000\u0000\u065a\u065b\u0005r\u0000\u0000\u065b"+
		"\u065c\u0003@ \u0000\u065c\u0087\u0001\u0000\u0000\u0000\u065d\u0662\u0003"+
		"\u008aE\u0000\u065e\u065f\u0005\n\u0000\u0000\u065f\u0661\u0003\u008a"+
		"E\u0000\u0660\u065e\u0001\u0000\u0000\u0000\u0661\u0664\u0001\u0000\u0000"+
		"\u0000\u0662\u0660\u0001\u0000\u0000\u0000\u0662\u0663\u0001\u0000\u0000"+
		"\u0000\u0663\u0089\u0001\u0000\u0000\u0000\u0664\u0662\u0001\u0000\u0000"+
		"\u0000\u0665\u0668\u0003\u0140\u00a0\u0000\u0666\u0668\u0003@ \u0000\u0667"+
		"\u0665\u0001\u0000\u0000\u0000\u0667\u0666\u0001\u0000\u0000\u0000\u0668"+
		"\u008b\u0001\u0000\u0000\u0000\u0669\u066c\u0003\u008eG\u0000\u066a\u066c"+
		"\u0003\u0090H\u0000\u066b\u0669\u0001\u0000\u0000\u0000\u066b\u066a\u0001"+
		"\u0000\u0000\u0000\u066c\u008d\u0001\u0000\u0000\u0000\u066d\u0670\u0003"+
		"\u001c\u000e\u0000\u066e\u0670\u0005\u0100\u0000\u0000\u066f\u066d\u0001"+
		"\u0000\u0000\u0000\u066f\u066e\u0001\u0000\u0000\u0000\u0670\u008f\u0001"+
		"\u0000\u0000\u0000\u0671\u0672\u0007\u0017\u0000\u0000\u0672\u0091\u0001"+
		"\u0000\u0000\u0000\u0673\u0674\u0003@ \u0000\u0674\u0093\u0001\u0000\u0000"+
		"\u0000\u0675\u0676\u0003@ \u0000\u0676\u0095\u0001\u0000\u0000\u0000\u0677"+
		"\u0678\u0007\u0018\u0000\u0000\u0678\u0097\u0001\u0000\u0000\u0000\u0679"+
		"\u067a\u0003@ \u0000\u067a\u0099\u0001\u0000\u0000\u0000\u067b\u067c\u0003"+
		"@ \u0000\u067c\u009b\u0001\u0000\u0000\u0000\u067d\u067e\u0003@ \u0000"+
		"\u067e\u009d\u0001\u0000\u0000\u0000\u067f\u0680\u0007\u0019\u0000\u0000"+
		"\u0680\u009f\u0001\u0000\u0000\u0000\u0681\u0682\u0003@ \u0000\u0682\u00a1"+
		"\u0001\u0000\u0000\u0000\u0683\u0684\u0003\u0012\t\u0000\u0684\u00a3\u0001"+
		"\u0000\u0000\u0000\u0685\u0686\u0003@ \u0000\u0686\u00a5\u0001\u0000\u0000"+
		"\u0000\u0687\u0688\u0003@ \u0000\u0688\u00a7\u0001\u0000\u0000\u0000\u0689"+
		"\u068a\u0003@ \u0000\u068a\u00a9\u0001\u0000\u0000\u0000\u068b\u068d\u0005"+
		"1\u0000\u0000\u068c\u068b\u0001\u0000\u0000\u0000\u068c\u068d\u0001\u0000"+
		"\u0000\u0000\u068d\u068e\u0001\u0000\u0000\u0000\u068e\u0697\u0005\u0011"+
		"\u0000\u0000\u068f\u0694\u0003@ \u0000\u0690\u0691\u0005\n\u0000\u0000"+
		"\u0691\u0693\u0003@ \u0000\u0692\u0690\u0001\u0000\u0000\u0000\u0693\u0696"+
		"\u0001\u0000\u0000\u0000\u0694\u0692\u0001\u0000\u0000\u0000\u0694\u0695"+
		"\u0001\u0000\u0000\u0000\u0695\u0698\u0001\u0000\u0000\u0000\u0696\u0694"+
		"\u0001\u0000\u0000\u0000\u0697\u068f\u0001\u0000\u0000\u0000\u0697\u0698"+
		"\u0001\u0000\u0000\u0000\u0698\u0699\u0001\u0000\u0000\u0000\u0699\u069d"+
		"\u0005\u0012\u0000\u0000\u069a\u069b\u00051\u0000\u0000\u069b\u069d\u0003"+
		"\u013e\u009f\u0000\u069c\u068c\u0001\u0000\u0000\u0000\u069c\u069a\u0001"+
		"\u0000\u0000\u0000\u069d\u00ab\u0001\u0000\u0000\u0000\u069e\u069f\u0007"+
		"\u001a\u0000\u0000\u069f\u00ad\u0001\u0000\u0000\u0000\u06a0\u06a1\u0003"+
		"@ \u0000\u06a1\u00af\u0001\u0000\u0000\u0000\u06a2\u06a3\u0003@ \u0000"+
		"\u06a3\u00b1\u0001\u0000\u0000\u0000\u06a4\u06be\u0003@ \u0000\u06a5\u06ad"+
		"\u0005\u000f\u0000\u0000\u06a6\u06a9\u0003@ \u0000\u06a7\u06a8\u0005\n"+
		"\u0000\u0000\u06a8\u06aa\u0003@ \u0000\u06a9\u06a7\u0001\u0000\u0000\u0000"+
		"\u06aa\u06ab\u0001\u0000\u0000\u0000\u06ab\u06a9\u0001\u0000\u0000\u0000"+
		"\u06ab\u06ac\u0001\u0000\u0000\u0000\u06ac\u06ae\u0001\u0000\u0000\u0000"+
		"\u06ad\u06a6\u0001\u0000\u0000\u0000\u06ad\u06ae\u0001\u0000\u0000\u0000"+
		"\u06ae\u06af\u0001\u0000\u0000\u0000\u06af\u06be\u0005\u0010\u0000\u0000"+
		"\u06b0\u06b1\u0005\u00fd\u0000\u0000\u06b1\u06ba\u0005\u000f\u0000\u0000"+
		"\u06b2\u06b7\u0003@ \u0000\u06b3\u06b4\u0005\n\u0000\u0000\u06b4\u06b6"+
		"\u0003@ \u0000\u06b5\u06b3\u0001\u0000\u0000\u0000\u06b6\u06b9\u0001\u0000"+
		"\u0000\u0000\u06b7\u06b5\u0001\u0000\u0000\u0000\u06b7\u06b8\u0001\u0000"+
		"\u0000\u0000\u06b8\u06bb\u0001\u0000\u0000\u0000\u06b9\u06b7\u0001\u0000"+
		"\u0000\u0000\u06ba\u06b2\u0001\u0000\u0000\u0000\u06ba\u06bb\u0001\u0000"+
		"\u0000\u0000\u06bb\u06bc\u0001\u0000\u0000\u0000\u06bc\u06be\u0005\u0010"+
		"\u0000\u0000\u06bd\u06a4\u0001\u0000\u0000\u0000\u06bd\u06a5\u0001\u0000"+
		"\u0000\u0000\u06bd\u06b0\u0001\u0000\u0000\u0000\u06be\u00b3\u0001\u0000"+
		"\u0000\u0000\u06bf\u06c4\u0003\u00b2Y\u0000\u06c0\u06c1\u0005\n\u0000"+
		"\u0000\u06c1\u06c3\u0003\u00b2Y\u0000\u06c2\u06c0\u0001\u0000\u0000\u0000"+
		"\u06c3\u06c6\u0001\u0000\u0000\u0000\u06c4\u06c2\u0001\u0000\u0000\u0000"+
		"\u06c4\u06c5\u0001\u0000\u0000\u0000\u06c5\u00b5\u0001\u0000\u0000\u0000"+
		"\u06c6\u06c4\u0001\u0000\u0000\u0000\u06c7\u06c8\u0005\u0133\u0000\u0000"+
		"\u06c8\u06c9\u0003\u00b4Z\u0000\u06c9\u00b7\u0001\u0000\u0000\u0000\u06ca"+
		"\u06cd\u0003T*\u0000\u06cb\u06cd\u0003N\'\u0000\u06cc\u06ca\u0001\u0000"+
		"\u0000\u0000\u06cc\u06cb\u0001\u0000\u0000\u0000\u06cd\u00b9\u0001\u0000"+
		"\u0000\u0000\u06ce\u06d3\u0003\u00b8\\\u0000\u06cf\u06d0\u0005\n\u0000"+
		"\u0000\u06d0\u06d2\u0003\u00b8\\\u0000\u06d1\u06cf\u0001\u0000\u0000\u0000"+
		"\u06d2\u06d5\u0001\u0000\u0000\u0000\u06d3\u06d1\u0001\u0000\u0000\u0000"+
		"\u06d3\u06d4\u0001\u0000\u0000\u0000\u06d4\u00bb\u0001\u0000\u0000\u0000"+
		"\u06d5\u06d3\u0001\u0000\u0000\u0000\u06d6\u06d7\u0005\u00f1\u0000\u0000"+
		"\u06d7\u06d8\u0003\u00ba]\u0000\u06d8\u00bd\u0001\u0000\u0000\u0000\u06d9"+
		"\u06da\u0005\u0089\u0000\u0000\u06da\u06df\u0003\u00c0`\u0000\u06db\u06dc"+
		"\u0005\n\u0000\u0000\u06dc\u06de\u0003\u00c0`\u0000\u06dd\u06db\u0001"+
		"\u0000\u0000\u0000\u06de\u06e1\u0001\u0000\u0000\u0000\u06df\u06dd\u0001"+
		"\u0000\u0000\u0000\u06df\u06e0\u0001\u0000\u0000\u0000\u06e0\u00bf\u0001"+
		"\u0000\u0000\u0000\u06e1\u06df\u0001\u0000\u0000\u0000\u06e2\u06e3\u0006"+
		"`\uffff\uffff\u0000\u06e3\u06e8\u0003\u00d0h\u0000\u06e4\u06e7\u0003\u00c8"+
		"d\u0000\u06e5\u06e7\u0003\u00cae\u0000\u06e6\u06e4\u0001\u0000\u0000\u0000"+
		"\u06e6\u06e5\u0001\u0000\u0000\u0000\u06e7\u06ea\u0001\u0000\u0000\u0000"+
		"\u06e8\u06e6\u0001\u0000\u0000\u0000\u06e8\u06e9\u0001\u0000\u0000\u0000"+
		"\u06e9\u06ec\u0001\u0000\u0000\u0000\u06ea\u06e8\u0001\u0000\u0000\u0000"+
		"\u06eb\u06ed\u0003\u00c4b\u0000\u06ec\u06eb\u0001\u0000\u0000\u0000\u06ec"+
		"\u06ed\u0001\u0000\u0000\u0000\u06ed\u06ef\u0001\u0000\u0000\u0000\u06ee"+
		"\u06f0\u0003\u00c6c\u0000\u06ef\u06ee\u0001\u0000\u0000\u0000\u06ef\u06f0"+
		"\u0001\u0000\u0000\u0000\u06f0\u0718\u0001\u0000\u0000\u0000\u06f1\u06f2"+
		"\u0003\u013e\u009f\u0000\u06f2\u06f4\u0003\u00c4b\u0000\u06f3\u06f5\u0003"+
		"\u00c6c\u0000\u06f4\u06f3\u0001\u0000\u0000\u0000\u06f4\u06f5\u0001\u0000"+
		"\u0000\u0000\u06f5\u0718\u0001\u0000\u0000\u0000\u06f6\u06f7\u0005\u00a4"+
		"\u0000\u0000\u06f7\u06f8\u0003\u013e\u009f\u0000\u06f8\u06fa\u0003\u00c4"+
		"b\u0000\u06f9\u06fb\u0003\u00c6c\u0000\u06fa\u06f9\u0001\u0000\u0000\u0000"+
		"\u06fa\u06fb\u0001\u0000\u0000\u0000\u06fb\u0718\u0001\u0000\u0000\u0000"+
		"\u06fc\u06fd\u0005\u012c\u0000\u0000\u06fd\u06fe\u0005\u000f\u0000\u0000"+
		"\u06fe\u06ff\u0003@ \u0000\u06ff\u0701\u0005\u0010\u0000\u0000\u0700\u0702"+
		"\u0003\u00c2a\u0000\u0701\u0700\u0001\u0000\u0000\u0000\u0701\u0702\u0001"+
		"\u0000\u0000\u0000\u0702\u0703\u0001\u0000\u0000\u0000\u0703\u0705\u0003"+
		"\u00c4b\u0000\u0704\u0706\u0003\u00c6c\u0000\u0705\u0704\u0001\u0000\u0000"+
		"\u0000\u0705\u0706\u0001\u0000\u0000\u0000\u0706\u0718\u0001\u0000\u0000"+
		"\u0000\u0707\u0708\u0003X,\u0000\u0708\u070a\u0003\u00c4b\u0000\u0709"+
		"\u070b\u0003\u00c6c\u0000\u070a\u0709\u0001\u0000\u0000\u0000\u070a\u070b"+
		"\u0001\u0000\u0000\u0000\u070b\u0718\u0001\u0000\u0000\u0000\u070c\u070d"+
		"\u00054\u0000\u0000\u070d\u070e\u0005\u000f\u0000\u0000\u070e\u070f\u0003"+
		"\u0012\t\u0000\u070f\u0710\u0005\u0010\u0000\u0000\u0710\u0711\u0003\u00c4"+
		"b\u0000\u0711\u0712\u0003\u00c6c\u0000\u0712\u0718\u0001\u0000\u0000\u0000"+
		"\u0713\u0714\u0005\u000f\u0000\u0000\u0714\u0715\u0003\u00c0`\u0000\u0715"+
		"\u0716\u0005\u0010\u0000\u0000\u0716\u0718\u0001\u0000\u0000\u0000\u0717"+
		"\u06e2\u0001\u0000\u0000\u0000\u0717\u06f1\u0001\u0000\u0000\u0000\u0717"+
		"\u06f6\u0001\u0000\u0000\u0000\u0717\u06fc\u0001\u0000\u0000\u0000\u0717"+
		"\u0707\u0001\u0000\u0000\u0000\u0717\u070c\u0001\u0000\u0000\u0000\u0717"+
		"\u0713\u0001\u0000\u0000\u0000\u0718\u072e\u0001\u0000\u0000\u0000\u0719"+
		"\u071a\n\b\u0000\u0000\u071a\u071b\u0005Y\u0000\u0000\u071b\u071c\u0005"+
		"\u00a0\u0000\u0000\u071c\u072d\u0003\u00c0`\t\u071d\u071e\n\u0007\u0000"+
		"\u0000\u071e\u0720\u0005\u00c0\u0000\u0000\u071f\u0721\u0003\u00d6k\u0000"+
		"\u0720\u071f\u0001\u0000\u0000\u0000\u0720\u0721\u0001\u0000\u0000\u0000"+
		"\u0721\u0722\u0001\u0000\u0000\u0000\u0722\u0723\u0005\u00a0\u0000\u0000"+
		"\u0723\u072d\u0003\u00c0`\b\u0724\u0726\n\t\u0000\u0000\u0725\u0727\u0003"+
		"\u00d6k\u0000\u0726\u0725\u0001\u0000\u0000\u0000\u0726\u0727\u0001\u0000"+
		"\u0000\u0000\u0727\u0728\u0001\u0000\u0000\u0000\u0728\u0729\u0005\u00a0"+
		"\u0000\u0000\u0729\u072a\u0003\u00c0`\u0000\u072a\u072b\u0003\u00d4j\u0000"+
		"\u072b\u072d\u0001\u0000\u0000\u0000\u072c\u0719\u0001\u0000\u0000\u0000"+
		"\u072c\u071d\u0001\u0000\u0000\u0000\u072c\u0724\u0001\u0000\u0000\u0000"+
		"\u072d\u0730\u0001\u0000\u0000\u0000\u072e\u072c\u0001\u0000\u0000\u0000"+
		"\u072e\u072f\u0001\u0000\u0000\u0000\u072f\u00c1\u0001\u0000\u0000\u0000"+
		"\u0730\u072e\u0001\u0000\u0000\u0000\u0731\u0732\u0005\u013d\u0000\u0000"+
		"\u0732\u0733\u0005\u00d7\u0000\u0000\u0733\u00c3\u0001\u0000\u0000\u0000"+
		"\u0734\u0736\u00055\u0000\u0000\u0735\u0734\u0001\u0000\u0000\u0000\u0735"+
		"\u0736\u0001\u0000\u0000\u0000\u0736\u0737\u0001\u0000\u0000\u0000\u0737"+
		"\u0738\u0003*\u0015\u0000\u0738\u00c5\u0001\u0000\u0000\u0000\u0739\u073a"+
		"\u0005\u000f\u0000\u0000\u073a\u073b\u0003\u00d2i\u0000\u073b\u073c\u0005"+
		"\u0010\u0000\u0000\u073c\u00c7\u0001\u0000\u0000\u0000\u073d\u073e\u0005"+
		"\u0087\u0000\u0000\u073e\u073f\u0005\u0115\u0000\u0000\u073f\u0744\u0003"+
		"\u00ccf\u0000\u0740\u0741\u0005\u0087\u0000\u0000\u0741\u0742\u0005.\u0000"+
		"\u0000\u0742\u0744\u0005\u0115\u0000\u0000\u0743\u073d\u0001\u0000\u0000"+
		"\u0000\u0743\u0740\u0001\u0000\u0000\u0000\u0744\u00c9\u0001\u0000\u0000"+
		"\u0000\u0745\u0746\u0005\u0087\u0000\u0000\u0746\u0747\u0005\u0132\u0000"+
		"\u0000\u0747\u074c\u0003\u00ccf\u0000\u0748\u0749\u0005\u0087\u0000\u0000"+
		"\u0749\u074a\u0005.\u0000\u0000\u074a\u074c\u0005\u0132\u0000\u0000\u074b"+
		"\u0745\u0001\u0000\u0000\u0000\u074b\u0748\u0001\u0000\u0000\u0000\u074c"+
		"\u00cb\u0001\u0000\u0000\u0000\u074d\u074e\u00055\u0000\u0000\u074e\u074f"+
		"\u0005\u00d1\u0000\u0000\u074f\u075c\u0003\u00ceg\u0000\u0750\u075c\u0005"+
		".\u0000\u0000\u0751\u0752\u0005A\u0000\u0000\u0752\u0753\u0003\u00ceg"+
		"\u0000\u0753\u0754\u0005/\u0000\u0000\u0754\u0755\u0003\u00ceg\u0000\u0755"+
		"\u075c\u0001\u0000\u0000\u0000\u0756\u0757\u0005\u0089\u0000\u0000\u0757"+
		"\u0758\u0003\u00ceg\u0000\u0758\u0759\u0005\u0121\u0000\u0000\u0759\u075a"+
		"\u0003\u00ceg\u0000\u075a\u075c\u0001\u0000\u0000\u0000\u075b\u074d\u0001"+
		"\u0000\u0000\u0000\u075b\u0750\u0001\u0000\u0000\u0000\u075b\u0751\u0001"+
		"\u0000\u0000\u0000\u075b\u0756\u0001\u0000\u0000\u0000\u075c\u00cd\u0001"+
		"\u0000\u0000\u0000\u075d\u0761\u0003\u000e\u0007\u0000\u075e\u0761\u0003"+
		"T*\u0000\u075f\u0761\u0007\u000f\u0000\u0000\u0760\u075d\u0001\u0000\u0000"+
		"\u0000\u0760\u075e\u0001\u0000\u0000\u0000\u0760\u075f\u0001\u0000\u0000"+
		"\u0000\u0761\u00cf\u0001\u0000\u0000\u0000\u0762\u0763\u0003&\u0013\u0000"+
		"\u0763\u00d1\u0001\u0000\u0000\u0000\u0764\u0769\u0003(\u0014\u0000\u0765"+
		"\u0766\u0005\n\u0000\u0000\u0766\u0768\u0003(\u0014\u0000\u0767\u0765"+
		"\u0001\u0000\u0000\u0000\u0768\u076b\u0001\u0000\u0000\u0000\u0769\u0767"+
		"\u0001\u0000\u0000\u0000\u0769\u076a\u0001\u0000\u0000\u0000\u076a\u00d3"+
		"\u0001\u0000\u0000\u0000\u076b\u0769\u0001\u0000\u0000\u0000\u076c\u076d"+
		"\u0005\u00d3\u0000\u0000\u076d\u0774\u0003@ \u0000\u076e\u076f\u0005\u0130"+
		"\u0000\u0000\u076f\u0770\u0005\u000f\u0000\u0000\u0770\u0771\u0003\u00d2"+
		"i\u0000\u0771\u0772\u0005\u0010\u0000\u0000\u0772\u0774\u0001\u0000\u0000"+
		"\u0000\u0773\u076c\u0001\u0000\u0000\u0000\u0773\u076e\u0001\u0000\u0000"+
		"\u0000\u0774\u00d5\u0001\u0000\u0000\u0000\u0775\u077b\u0005\u0097\u0000"+
		"\u0000\u0776\u0778\u0003\u00d8l\u0000\u0777\u0779\u0005\u00d9\u0000\u0000"+
		"\u0778\u0777\u0001\u0000\u0000\u0000\u0778\u0779\u0001\u0000\u0000\u0000"+
		"\u0779\u077b\u0001\u0000\u0000\u0000\u077a\u0775\u0001\u0000\u0000\u0000"+
		"\u077a\u0776\u0001\u0000\u0000\u0000\u077b\u00d7\u0001\u0000\u0000\u0000"+
		"\u077c\u077d\u0007\u001b\u0000\u0000\u077d\u00d9\u0001\u0000\u0000\u0000"+
		"\u077e\u077f\u0005\u013b\u0000\u0000\u077f\u0780\u0003@ \u0000\u0780\u00db"+
		"\u0001\u0000\u0000\u0000\u0781\u0782\u0005\u008d\u0000\u0000\u0782\u0784"+
		"\u0005G\u0000\u0000\u0783\u0785\u0003\u0162\u00b1\u0000\u0784\u0783\u0001"+
		"\u0000\u0000\u0000\u0784\u0785\u0001\u0000\u0000\u0000\u0785\u0786\u0001"+
		"\u0000\u0000\u0000\u0786\u078b\u0003\u00deo\u0000\u0787\u0788\u0005\n"+
		"\u0000\u0000\u0788\u078a\u0003\u00deo\u0000\u0789\u0787\u0001\u0000\u0000"+
		"\u0000\u078a\u078d\u0001\u0000\u0000\u0000\u078b\u0789\u0001\u0000\u0000"+
		"\u0000\u078b\u078c\u0001\u0000\u0000\u0000\u078c\u00dd\u0001\u0000\u0000"+
		"\u0000\u078d\u078b\u0001\u0000\u0000\u0000\u078e\u0792\u0003V+\u0000\u078f"+
		"\u0790\u0005\u000f\u0000\u0000\u0790\u0792\u0005\u0010\u0000\u0000\u0791"+
		"\u078e\u0001\u0000\u0000\u0000\u0791\u078f\u0001\u0000\u0000\u0000\u0792"+
		"\u00df\u0001\u0000\u0000\u0000\u0793\u0794\u0005\u0092\u0000\u0000\u0794"+
		"\u0795\u0003@ \u0000\u0795\u00e1\u0001\u0000\u0000\u0000\u0796\u0797\u0005"+
		"\u013c\u0000\u0000\u0797\u0798\u0003\u00e4r\u0000\u0798\u00e3\u0001\u0000"+
		"\u0000\u0000\u0799\u079e\u0003\u00e6s\u0000\u079a\u079b\u0005\n\u0000"+
		"\u0000\u079b\u079d\u0003\u00e6s\u0000\u079c\u079a\u0001\u0000\u0000\u0000"+
		"\u079d\u07a0\u0001\u0000\u0000\u0000\u079e\u079c\u0001\u0000\u0000\u0000"+
		"\u079e\u079f\u0001\u0000\u0000\u0000\u079f\u00e5\u0001\u0000\u0000\u0000"+
		"\u07a0\u079e\u0001\u0000\u0000\u0000\u07a1\u07a2\u0003\u00e8t\u0000\u07a2"+
		"\u07a3\u00055\u0000\u0000\u07a3\u07a4\u0003\u00eau\u0000\u07a4\u00e7\u0001"+
		"\u0000\u0000\u0000\u07a5\u07a6\u00030\u0018\u0000\u07a6\u00e9\u0001\u0000"+
		"\u0000\u0000\u07a7\u07a8\u0005\u000f\u0000\u0000\u07a8\u07a9\u0003\u00ec"+
		"v\u0000\u07a9\u07aa\u0005\u0010\u0000\u0000\u07aa\u00eb\u0001\u0000\u0000"+
		"\u0000\u07ab\u07ad\u0003\u00eew\u0000\u07ac\u07ab\u0001\u0000\u0000\u0000"+
		"\u07ac\u07ad\u0001\u0000\u0000\u0000\u07ad\u07af\u0001\u0000\u0000\u0000"+
		"\u07ae\u07b0\u0003\u00f0x\u0000\u07af\u07ae\u0001\u0000\u0000\u0000\u07af"+
		"\u07b0\u0001\u0000\u0000\u0000\u07b0\u07b2\u0001\u0000\u0000\u0000\u07b1"+
		"\u07b3\u0003\u00f6{\u0000\u07b2\u07b1\u0001\u0000\u0000\u0000\u07b2\u07b3"+
		"\u0001\u0000\u0000\u0000\u07b3\u07b5\u0001\u0000\u0000\u0000\u07b4\u07b6"+
		"\u0003\u00f8|\u0000\u07b5\u07b4\u0001\u0000\u0000\u0000\u07b5\u07b6\u0001"+
		"\u0000\u0000\u0000\u07b6\u00ed\u0001\u0000\u0000\u0000\u07b7\u07b8\u0003"+
		"0\u0018\u0000\u07b8\u00ef\u0001\u0000\u0000\u0000\u07b9\u07ba\u0005\u00dd"+
		"\u0000\u0000\u07ba\u07bb\u0005G\u0000\u0000\u07bb\u07bc\u0003\u00f2y\u0000"+
		"\u07bc\u00f1\u0001\u0000\u0000\u0000\u07bd\u07c2\u0003\u00f4z\u0000\u07be"+
		"\u07bf\u0005\n\u0000\u0000\u07bf\u07c1\u0003\u00f4z\u0000\u07c0\u07be"+
		"\u0001\u0000\u0000\u0000\u07c1\u07c4\u0001\u0000\u0000\u0000\u07c2\u07c0"+
		"\u0001\u0000\u0000\u0000\u07c2\u07c3\u0001\u0000\u0000\u0000\u07c3\u00f3"+
		"\u0001\u0000\u0000\u0000\u07c4\u07c2\u0001\u0000\u0000\u0000\u07c5\u07c6"+
		"\u0003V+\u0000\u07c6\u00f5\u0001\u0000\u0000\u0000\u07c7\u07c8\u0005\u00d6"+
		"\u0000\u0000\u07c8\u07c9\u0005G\u0000\u0000\u07c9\u07ca\u0003\u0164\u00b2"+
		"\u0000\u07ca\u00f7\u0001\u0000\u0000\u0000\u07cb\u07cc\u0003\u00fa}\u0000"+
		"\u07cc\u07ce\u0003\u00fc~\u0000\u07cd\u07cf\u0003\u010c\u0086\u0000\u07ce"+
		"\u07cd\u0001\u0000\u0000\u0000\u07ce\u07cf\u0001\u0000\u0000\u0000\u07cf"+
		"\u00f9\u0001\u0000\u0000\u0000\u07d0\u07d1\u0007\u001c\u0000\u0000\u07d1"+
		"\u00fb\u0001\u0000\u0000\u0000\u07d2\u07d5\u0003\u00fe\u007f\u0000\u07d3"+
		"\u07d5\u0003\u0102\u0081\u0000\u07d4\u07d2\u0001\u0000\u0000\u0000\u07d4"+
		"\u07d3\u0001\u0000\u0000\u0000\u07d5\u00fd\u0001\u0000\u0000\u0000\u07d6"+
		"\u07d7\u0005\u0128\u0000\u0000\u07d7\u07dc\u0005\u00e8\u0000\u0000\u07d8"+
		"\u07dc\u0003\u0100\u0080\u0000\u07d9\u07da\u0005[\u0000\u0000\u07da\u07dc"+
		"\u0005\u00fd\u0000\u0000\u07db\u07d6\u0001\u0000\u0000\u0000\u07db\u07d8"+
		"\u0001\u0000\u0000\u0000\u07db\u07d9\u0001\u0000\u0000\u0000\u07dc\u00ff"+
		"\u0001\u0000\u0000\u0000\u07dd\u07de\u0005\u0005\u0000\u0000\u07de\u07df"+
		"\u0005\u00e8\u0000\u0000\u07df\u0101\u0001\u0000\u0000\u0000\u07e0\u07e1"+
		"\u0005A\u0000\u0000\u07e1\u07e2\u0003\u0104\u0082\u0000\u07e2\u07e3\u0005"+
		"/\u0000\u0000\u07e3\u07e4\u0003\u0106\u0083\u0000\u07e4\u0103\u0001\u0000"+
		"\u0000\u0000\u07e5\u07e6\u0003\u0108\u0084\u0000\u07e6\u0105\u0001\u0000"+
		"\u0000\u0000\u07e7\u07e8\u0003\u0108\u0084\u0000\u07e8\u0107\u0001\u0000"+
		"\u0000\u0000\u07e9\u07ee\u0003\u00fe\u007f\u0000\u07ea\u07eb\u0005\u0128"+
		"\u0000\u0000\u07eb\u07ee\u0005\u0086\u0000\u0000\u07ec\u07ee\u0003\u010a"+
		"\u0085\u0000\u07ed\u07e9\u0001\u0000\u0000\u0000\u07ed\u07ea\u0001\u0000"+
		"\u0000\u0000\u07ed\u07ec\u0001\u0000\u0000\u0000\u07ee\u0109\u0001\u0000"+
		"\u0000\u0000\u07ef\u07f0\u0005\u0005\u0000\u0000\u07f0\u07f1\u0005\u0086"+
		"\u0000\u0000\u07f1\u010b\u0001\u0000\u0000\u0000\u07f2\u07f3\u0005{\u0000"+
		"\u0000\u07f3\u07f4\u0005[\u0000\u0000\u07f4\u07fd\u0005\u00fd\u0000\u0000"+
		"\u07f5\u07f6\u0005{\u0000\u0000\u07f6\u07fd\u0005\u008d\u0000\u0000\u07f7"+
		"\u07f8\u0005{\u0000\u0000\u07f8\u07fd\u0005\u011a\u0000\u0000\u07f9\u07fa"+
		"\u0005{\u0000\u0000\u07fa\u07fb\u0005\u00c4\u0000\u0000\u07fb\u07fd\u0005"+
		"\u00d8\u0000\u0000\u07fc\u07f2\u0001\u0000\u0000\u0000\u07fc\u07f5\u0001"+
		"\u0000\u0000\u0000\u07fc\u07f7\u0001\u0000\u0000\u0000\u07fc\u07f9\u0001"+
		"\u0000\u0000\u0000\u07fd\u010d\u0001\u0000\u0000\u0000\u07fe\u0800\u0005"+
		"\u0101\u0000\u0000\u07ff\u0801\u0003\u0162\u00b1\u0000\u0800\u07ff\u0001"+
		"\u0000\u0000\u0000\u0800\u0801\u0001\u0000\u0000\u0000\u0801\u0802\u0001"+
		"\u0000\u0000\u0000\u0802\u0803\u0003\u0110\u0088\u0000\u0803\u010f\u0001"+
		"\u0000\u0000\u0000\u0804\u0807\u0003\u0112\u0089\u0000\u0805\u0807\u0003"+
		"\u0114\u008a\u0000\u0806\u0804\u0001\u0000\u0000\u0000\u0806\u0805\u0001"+
		"\u0000\u0000\u0000\u0807\u080c\u0001\u0000\u0000\u0000\u0808\u0809\u0005"+
		"\n\u0000\u0000\u0809\u080b\u0003\u0114\u008a\u0000\u080a\u0808\u0001\u0000"+
		"\u0000\u0000\u080b\u080e\u0001\u0000\u0000\u0000\u080c\u080a\u0001\u0000"+
		"\u0000\u0000\u080c\u080d\u0001\u0000\u0000\u0000\u080d\u081b\u0001\u0000"+
		"\u0000\u0000\u080e\u080c\u0001\u0000\u0000\u0000\u080f\u0814\u0003\u0114"+
		"\u008a\u0000\u0810\u0811\u0005\n\u0000\u0000\u0811\u0813\u0003\u0114\u008a"+
		"\u0000\u0812\u0810\u0001\u0000\u0000\u0000\u0813\u0816\u0001\u0000\u0000"+
		"\u0000\u0814\u0812\u0001\u0000\u0000\u0000\u0814\u0815\u0001\u0000\u0000"+
		"\u0000\u0815\u0817\u0001\u0000\u0000\u0000\u0816\u0814\u0001\u0000\u0000"+
		"\u0000\u0817\u0818\u0005\n\u0000\u0000\u0818\u0819\u0003\u0112\u0089\u0000"+
		"\u0819\u081b\u0001\u0000\u0000\u0000\u081a\u0806\u0001\u0000\u0000\u0000"+
		"\u081a\u080f\u0001\u0000\u0000\u0000\u081b\u0111\u0001\u0000\u0000\u0000"+
		"\u081c\u081e\u0005\u001a\u0000\u0000\u081d\u081f\u0003\u0120\u0090\u0000"+
		"\u081e\u081d\u0001\u0000\u0000\u0000\u081e\u081f\u0001\u0000\u0000\u0000"+
		"\u081f\u0821\u0001\u0000\u0000\u0000\u0820\u0822\u0003\u0118\u008c\u0000"+
		"\u0821\u0820\u0001\u0000\u0000\u0000\u0821\u0822\u0001\u0000\u0000\u0000"+
		"\u0822\u0113\u0001\u0000\u0000\u0000\u0823\u0826\u0003\u0122\u0091\u0000"+
		"\u0824\u0826\u0003\u0116\u008b\u0000\u0825\u0823\u0001\u0000\u0000\u0000"+
		"\u0825\u0824\u0001\u0000\u0000\u0000\u0826\u0115\u0001\u0000\u0000\u0000"+
		"\u0827\u0828\u0003 \u0010\u0000\u0828\u0829\u0005\u000b\u0000\u0000\u0829"+
		"\u082b\u0005\u001a\u0000\u0000\u082a\u082c\u0003\u0120\u0090\u0000\u082b"+
		"\u082a\u0001\u0000\u0000\u0000\u082b\u082c\u0001\u0000\u0000\u0000\u082c"+
		"\u082e\u0001\u0000\u0000\u0000\u082d\u082f\u0003\u011c\u008e\u0000\u082e"+
		"\u082d\u0001\u0000\u0000\u0000\u082e\u082f\u0001\u0000\u0000\u0000\u082f"+
		"\u0117\u0001\u0000\u0000\u0000\u0830\u0831\u0005\u00f5\u0000\u0000\u0831"+
		"\u083f\u0003\u011a\u008d\u0000\u0832\u0833\u0005\u00f5\u0000\u0000\u0833"+
		"\u0834\u0005\u000f\u0000\u0000\u0834\u0839\u0003\u011a\u008d\u0000\u0835"+
		"\u0836\u0005\n\u0000\u0000\u0836\u0838\u0003\u011a\u008d\u0000\u0837\u0835"+
		"\u0001\u0000\u0000\u0000\u0838\u083b\u0001\u0000\u0000\u0000\u0839\u0837"+
		"\u0001\u0000\u0000\u0000\u0839\u083a\u0001\u0000\u0000\u0000\u083a\u083c"+
		"\u0001\u0000\u0000\u0000\u083b\u0839\u0001\u0000\u0000\u0000\u083c\u083d"+
		"\u0005\u0010\u0000\u0000\u083d\u083f\u0001\u0000\u0000\u0000\u083e\u0830"+
		"\u0001\u0000\u0000\u0000\u083e\u0832\u0001\u0000\u0000\u0000\u083f\u0119"+
		"\u0001\u0000\u0000\u0000\u0840\u0841\u0003V+\u0000\u0841\u0842\u0003\u0124"+
		"\u0092\u0000\u0842\u011b\u0001\u0000\u0000\u0000\u0843\u0844\u0005\u00f5"+
		"\u0000\u0000\u0844\u0852\u0003\u011e\u008f\u0000\u0845\u0846\u0005\u00f5"+
		"\u0000\u0000\u0846\u0847\u0005\u000f\u0000\u0000\u0847\u084c\u0003\u011e"+
		"\u008f\u0000\u0848\u0849\u0005\n\u0000\u0000\u0849\u084b\u0003\u011e\u008f"+
		"\u0000\u084a\u0848\u0001\u0000\u0000\u0000\u084b\u084e\u0001\u0000\u0000"+
		"\u0000\u084c\u084a\u0001\u0000\u0000\u0000\u084c\u084d\u0001\u0000\u0000"+
		"\u0000\u084d\u084f\u0001\u0000\u0000\u0000\u084e\u084c\u0001\u0000\u0000"+
		"\u0000\u084f\u0850\u0005\u0010\u0000\u0000\u0850\u0852\u0001\u0000\u0000"+
		"\u0000\u0851\u0843\u0001\u0000\u0000\u0000\u0851\u0845\u0001\u0000\u0000"+
		"\u0000\u0852\u011d\u0001\u0000\u0000\u0000\u0853\u0854\u0003\"\u0011\u0000"+
		"\u0854\u0855\u0003\u0124\u0092\u0000\u0855\u011f\u0001\u0000\u0000\u0000"+
		"\u0856\u0857\u0005{\u0000\u0000\u0857\u0865\u0003\"\u0011\u0000\u0858"+
		"\u0859\u0005{\u0000\u0000\u0859\u085a\u0005\u000f\u0000\u0000\u085a\u085f"+
		"\u0003\"\u0011\u0000\u085b\u085c\u0005\n\u0000\u0000\u085c\u085e\u0003"+
		"\"\u0011\u0000\u085d\u085b\u0001\u0000\u0000\u0000\u085e\u0861\u0001\u0000"+
		"\u0000\u0000\u085f\u085d\u0001\u0000\u0000\u0000\u085f\u0860\u0001\u0000"+
		"\u0000\u0000\u0860\u0862\u0001\u0000\u0000\u0000\u0861\u085f\u0001\u0000"+
		"\u0000\u0000\u0862\u0863\u0005\u0010\u0000\u0000\u0863\u0865\u0001\u0000"+
		"\u0000\u0000\u0864\u0856\u0001\u0000\u0000\u0000\u0864\u0858\u0001\u0000"+
		"\u0000\u0000\u0865\u0121\u0001\u0000\u0000\u0000\u0866\u0868\u0003@ \u0000"+
		"\u0867\u0869\u0003\u0124\u0092\u0000\u0868\u0867\u0001\u0000\u0000\u0000"+
		"\u0868\u0869\u0001\u0000\u0000\u0000\u0869\u0123\u0001\u0000\u0000\u0000"+
		"\u086a\u086c\u00055\u0000\u0000\u086b\u086a\u0001\u0000\u0000\u0000\u086b"+
		"\u086c\u0001\u0000\u0000\u0000\u086c\u086d\u0001\u0000\u0000\u0000\u086d"+
		"\u086e\u0003(\u0014\u0000\u086e\u0125\u0001\u0000\u0000\u0000\u086f\u0871"+
		"\u0003\u012a\u0095\u0000\u0870\u086f\u0001\u0000\u0000\u0000\u0870\u0871"+
		"\u0001\u0000\u0000\u0000\u0871\u0872\u0001\u0000\u0000\u0000\u0872\u0873"+
		"\u0003\u0128\u0094\u0000\u0873\u0127\u0001\u0000\u0000\u0000\u0874\u0876"+
		"\u0003\u012e\u0097\u0000\u0875\u0877\u0003\u0132\u0099\u0000\u0876\u0875"+
		"\u0001\u0000\u0000\u0000\u0876\u0877\u0001\u0000\u0000\u0000\u0877\u0879"+
		"\u0001\u0000\u0000\u0000\u0878\u087a\u0003\u0134\u009a\u0000\u0879\u0878"+
		"\u0001\u0000\u0000\u0000\u0879\u087a\u0001\u0000\u0000\u0000\u087a\u0129"+
		"\u0001\u0000\u0000\u0000\u087b\u087d\u0005\u013d\u0000\u0000\u087c\u087e"+
		"\u0005\u00f2\u0000\u0000\u087d\u087c\u0001\u0000\u0000\u0000\u087d\u087e"+
		"\u0001\u0000\u0000\u0000\u087e\u087f\u0001\u0000\u0000\u0000\u087f\u0884"+
		"\u0003\u012c\u0096\u0000\u0880\u0881\u0005\n\u0000\u0000\u0881\u0883\u0003"+
		"\u012c\u0096\u0000\u0882\u0880\u0001\u0000\u0000\u0000\u0883\u0886\u0001"+
		"\u0000\u0000\u0000\u0884\u0882\u0001\u0000\u0000\u0000\u0884\u0885\u0001"+
		"\u0000\u0000\u0000\u0885\u012b\u0001\u0000\u0000\u0000\u0886\u0884\u0001"+
		"\u0000\u0000\u0000\u0887\u088c\u0003,\u0016\u0000\u0888\u0889\u0005\u000f"+
		"\u0000\u0000\u0889\u088a\u0003\u00d2i\u0000\u088a\u088b\u0005\u0010\u0000"+
		"\u0000\u088b\u088d\u0001\u0000\u0000\u0000\u088c\u0888\u0001\u0000\u0000"+
		"\u0000\u088c\u088d\u0001\u0000\u0000\u0000\u088d\u088e\u0001\u0000\u0000"+
		"\u0000\u088e\u088f\u00055\u0000\u0000\u088f\u0890\u0003\u013e\u009f\u0000"+
		"\u0890\u012d\u0001\u0000\u0000\u0000\u0891\u0892\u0006\u0097\uffff\uffff"+
		"\u0000\u0892\u0893\u0003\u0130\u0098\u0000\u0893\u08a2\u0001\u0000\u0000"+
		"\u0000\u0894\u0895\n\u0002\u0000\u0000\u0895\u0897\u0005\u012a\u0000\u0000"+
		"\u0896\u0898\u0007\u001d\u0000\u0000\u0897\u0896\u0001\u0000\u0000\u0000"+
		"\u0897\u0898\u0001\u0000\u0000\u0000\u0898\u0899\u0001\u0000\u0000\u0000"+
		"\u0899\u08a1\u0003\u0130\u0098\u0000\u089a\u089b\n\u0001\u0000\u0000\u089b"+
		"\u089d\u0005z\u0000\u0000\u089c\u089e\u0007\u001d\u0000\u0000\u089d\u089c"+
		"\u0001\u0000\u0000\u0000\u089d\u089e\u0001\u0000\u0000\u0000\u089e\u089f"+
		"\u0001\u0000\u0000\u0000\u089f\u08a1\u0003\u0130\u0098\u0000\u08a0\u0894"+
		"\u0001\u0000\u0000\u0000\u08a0\u089a\u0001\u0000\u0000\u0000\u08a1\u08a4"+
		"\u0001\u0000\u0000\u0000\u08a2\u08a0\u0001\u0000\u0000\u0000\u08a2\u08a3"+
		"\u0001\u0000\u0000\u0000\u08a3\u012f\u0001\u0000\u0000\u0000\u08a4\u08a2"+
		"\u0001\u0000\u0000\u0000\u08a5\u08a6\u0006\u0098\uffff\uffff\u0000\u08a6"+
		"\u08a8\u0003\u010e\u0087\u0000\u08a7\u08a9\u0003\u00be_\u0000\u08a8\u08a7"+
		"\u0001\u0000\u0000\u0000\u08a8\u08a9\u0001\u0000\u0000\u0000\u08a9\u08ab"+
		"\u0001\u0000\u0000\u0000\u08aa\u08ac\u0003\u00dam\u0000\u08ab\u08aa\u0001"+
		"\u0000\u0000\u0000\u08ab\u08ac\u0001\u0000\u0000\u0000\u08ac\u08ae\u0001"+
		"\u0000\u0000\u0000\u08ad\u08af\u0003\u00dcn\u0000\u08ae\u08ad\u0001\u0000"+
		"\u0000\u0000\u08ae\u08af\u0001\u0000\u0000\u0000\u08af\u08b1\u0001\u0000"+
		"\u0000\u0000\u08b0\u08b2\u0003\u00e0p\u0000\u08b1\u08b0\u0001\u0000\u0000"+
		"\u0000\u08b1\u08b2\u0001\u0000\u0000\u0000\u08b2\u08b4\u0001\u0000\u0000"+
		"\u0000\u08b3\u08b5\u0003\u00e2q\u0000\u08b4\u08b3\u0001\u0000\u0000\u0000"+
		"\u08b4\u08b5\u0001\u0000\u0000\u0000\u08b5\u08cd\u0001\u0000\u0000\u0000"+
		"\u08b6\u08b8\u0003\u00be_\u0000\u08b7\u08b9\u0003\u00dam\u0000\u08b8\u08b7"+
		"\u0001\u0000\u0000\u0000\u08b8\u08b9\u0001\u0000\u0000\u0000\u08b9\u08bb"+
		"\u0001\u0000\u0000\u0000\u08ba\u08bc\u0003\u00dcn\u0000\u08bb\u08ba\u0001"+
		"\u0000\u0000\u0000\u08bb\u08bc\u0001\u0000\u0000\u0000\u08bc\u08be\u0001"+
		"\u0000\u0000\u0000\u08bd\u08bf\u0003\u00e0p\u0000\u08be\u08bd\u0001\u0000"+
		"\u0000\u0000\u08be\u08bf\u0001\u0000\u0000\u0000\u08bf\u08c1\u0001\u0000"+
		"\u0000\u0000\u08c0\u08c2\u0003\u010e\u0087\u0000\u08c1\u08c0\u0001\u0000"+
		"\u0000\u0000\u08c1\u08c2\u0001\u0000\u0000\u0000\u08c2\u08c4\u0001\u0000"+
		"\u0000\u0000\u08c3\u08c5\u0003\u00e2q\u0000\u08c4\u08c3\u0001\u0000\u0000"+
		"\u0000\u08c4\u08c5\u0001\u0000\u0000\u0000\u08c5\u08cd\u0001\u0000\u0000"+
		"\u0000\u08c6\u08cd\u0003\u00b6[\u0000\u08c7\u08cd\u0003\u00bc^\u0000\u08c8"+
		"\u08c9\u0005\u000f\u0000\u0000\u08c9\u08ca\u0003\u0128\u0094\u0000\u08ca"+
		"\u08cb\u0005\u0010\u0000\u0000\u08cb\u08cd\u0001\u0000\u0000\u0000\u08cc"+
		"\u08a5\u0001\u0000\u0000\u0000\u08cc\u08b6\u0001\u0000\u0000\u0000\u08cc"+
		"\u08c6\u0001\u0000\u0000\u0000\u08cc\u08c7\u0001\u0000\u0000\u0000\u08cc"+
		"\u08c8\u0001\u0000\u0000\u0000\u08cd\u08d6\u0001\u0000\u0000\u0000\u08ce"+
		"\u08cf\n\u0001\u0000\u0000\u08cf\u08d1\u0005\u009b\u0000\u0000\u08d0\u08d2"+
		"\u0007\u001d\u0000\u0000\u08d1\u08d0\u0001\u0000\u0000\u0000\u08d1\u08d2"+
		"\u0001\u0000\u0000\u0000\u08d2\u08d3\u0001\u0000\u0000\u0000\u08d3\u08d5"+
		"\u0003\u0130\u0098\u0002\u08d4\u08ce\u0001\u0000\u0000\u0000\u08d5\u08d8"+
		"\u0001\u0000\u0000\u0000\u08d6\u08d4\u0001\u0000\u0000\u0000\u08d6\u08d7"+
		"\u0001\u0000\u0000\u0000\u08d7\u0131\u0001\u0000\u0000\u0000\u08d8\u08d6"+
		"\u0001\u0000\u0000\u0000\u08d9\u08da\u0005\u00d6\u0000\u0000\u08da\u08db"+
		"\u0005G\u0000\u0000\u08db\u08dc\u0003\u0164\u00b2\u0000\u08dc\u0133\u0001"+
		"\u0000\u0000\u0000\u08dd\u08df\u0003\u0136\u009b\u0000\u08de\u08e0\u0003"+
		"\u0138\u009c\u0000\u08df\u08de\u0001\u0000\u0000\u0000\u08df\u08e0\u0001"+
		"\u0000\u0000\u0000\u08e0\u08e6\u0001\u0000\u0000\u0000\u08e1\u08e3\u0003"+
		"\u0138\u009c\u0000\u08e2\u08e4\u0003\u0136\u009b\u0000\u08e3\u08e2\u0001"+
		"\u0000\u0000\u0000\u08e3\u08e4\u0001\u0000\u0000\u0000\u08e4\u08e6\u0001"+
		"\u0000\u0000\u0000\u08e5\u08dd\u0001\u0000\u0000\u0000\u08e5\u08e1\u0001"+
		"\u0000\u0000\u0000\u08e6\u0135\u0001\u0000\u0000\u0000\u08e7\u08e8\u0005"+
		"\u00d2\u0000\u0000\u08e8\u08ea\u0003\u013a\u009d\u0000\u08e9\u08eb\u0007"+
		"\u001e\u0000\u0000\u08ea\u08e9\u0001\u0000\u0000\u0000\u08ea\u08eb\u0001"+
		"\u0000\u0000\u0000\u08eb\u0137\u0001\u0000\u0000\u0000\u08ec\u08ed\u0005"+
		"\u0080\u0000\u0000\u08ed\u08ef\u0007\u001f\u0000\u0000\u08ee\u08f0\u0003"+
		"\u013c\u009e\u0000\u08ef\u08ee\u0001\u0000\u0000\u0000\u08ef\u08f0\u0001"+
		"\u0000\u0000\u0000\u08f0\u08f1\u0001\u0000\u0000\u0000\u08f1\u08f2\u0007"+
		"\u001e\u0000\u0000\u08f2\u08f6\u0005\u00d4\u0000\u0000\u08f3\u08f4\u0005"+
		"\u00ae\u0000\u0000\u08f4\u08f6\u0003\u013c\u009e\u0000\u08f5\u08ec\u0001"+
		"\u0000\u0000\u0000\u08f5\u08f3\u0001\u0000\u0000\u0000\u08f6\u0139\u0001"+
		"\u0000\u0000\u0000\u08f7\u08fa\u0005\u0005\u0000\u0000\u08f8\u08fa\u0003"+
		"T*\u0000\u08f9\u08f7\u0001\u0000\u0000\u0000\u08f9\u08f8\u0001\u0000\u0000"+
		"\u0000\u08fa\u013b\u0001\u0000\u0000\u0000\u08fb\u08fe\u0005\u0005\u0000"+
		"\u0000\u08fc\u08fe\u0003T*\u0000\u08fd\u08fb\u0001\u0000\u0000\u0000\u08fd"+
		"\u08fc\u0001\u0000\u0000\u0000\u08fe\u013d\u0001\u0000\u0000\u0000\u08ff"+
		"\u0900\u0005\u000f\u0000\u0000\u0900\u0901\u0003\u0126\u0093\u0000\u0901"+
		"\u0902\u0005\u0010\u0000\u0000\u0902\u013f\u0001\u0000\u0000\u0000\u0903"+
		"\u0904\u0003\u0144\u00a2\u0000\u0904\u0905\u0003@ \u0000\u0905\u0935\u0001"+
		"\u0000\u0000\u0000\u0906\u0908\u0005\u00c6\u0000\u0000\u0907\u0906\u0001"+
		"\u0000\u0000\u0000\u0907\u0908\u0001\u0000\u0000\u0000\u0908\u0909\u0001"+
		"\u0000\u0000\u0000\u0909\u090b\u0005A\u0000\u0000\u090a\u090c\u0007\b"+
		"\u0000\u0000\u090b\u090a\u0001\u0000\u0000\u0000\u090b\u090c\u0001\u0000"+
		"\u0000\u0000\u090c\u090d\u0001\u0000\u0000\u0000\u090d\u090e\u0003@ \u0000"+
		"\u090e\u090f\u0005/\u0000\u0000\u090f\u0910\u0003@ \u0000\u0910\u0935"+
		"\u0001\u0000\u0000\u0000\u0911\u0913\u0005\u00c6\u0000\u0000\u0912\u0911"+
		"\u0001\u0000\u0000\u0000\u0912\u0913\u0001\u0000\u0000\u0000\u0913\u0914"+
		"\u0001\u0000\u0000\u0000\u0914\u0915\u0005\u0096\u0000\u0000\u0915\u0935"+
		"\u0003\u0146\u00a3\u0000\u0916\u0918\u0005\u00c6\u0000\u0000\u0917\u0916"+
		"\u0001\u0000\u0000\u0000\u0917\u0918\u0001\u0000\u0000\u0000\u0918\u0919"+
		"\u0001\u0000\u0000\u0000\u0919\u091a\u0005\u00ac\u0000\u0000\u091a\u091d"+
		"\u0003\u0148\u00a4\u0000\u091b\u091c\u0005x\u0000\u0000\u091c\u091e\u0003"+
		"\u014a\u00a5\u0000\u091d\u091b\u0001\u0000\u0000\u0000\u091d\u091e\u0001"+
		"\u0000\u0000\u0000\u091e\u0935\u0001\u0000\u0000\u0000\u091f\u0921\u0005"+
		"\u00c6\u0000\u0000\u0920\u091f\u0001\u0000\u0000\u0000\u0920\u0921\u0001"+
		"\u0000\u0000\u0000\u0921\u0922\u0001\u0000\u0000\u0000\u0922\u0923\u0005"+
		"\u00ad\u0000\u0000\u0923\u0926\u0003\u014c\u00a6\u0000\u0924\u0925\u0005"+
		"\u0083\u0000\u0000\u0925\u0927\u0003\u014e\u00a7\u0000\u0926\u0924\u0001"+
		"\u0000\u0000\u0000\u0926\u0927\u0001\u0000\u0000\u0000\u0927\u0935\u0001"+
		"\u0000\u0000\u0000\u0928\u0929\u0003\u0150\u00a8\u0000\u0929\u092a\u0003"+
		"\u014c\u00a6\u0000\u092a\u0935\u0001\u0000\u0000\u0000\u092b\u092d\u0005"+
		"\u009e\u0000\u0000\u092c\u092e\u0005\u00c6\u0000\u0000\u092d\u092c\u0001"+
		"\u0000\u0000\u0000\u092d\u092e\u0001\u0000\u0000\u0000\u092e\u092f\u0001"+
		"\u0000\u0000\u0000\u092f\u0935\u0005\u00ca\u0000\u0000\u0930\u0931\u0003"+
		"\u0144\u00a2\u0000\u0931\u0932\u0003\u0152\u00a9\u0000\u0932\u0933\u0003"+
		"\u0142\u00a1\u0000\u0933\u0935\u0001\u0000\u0000\u0000\u0934\u0903\u0001"+
		"\u0000\u0000\u0000\u0934\u0907\u0001\u0000\u0000\u0000\u0934\u0912\u0001"+
		"\u0000\u0000\u0000\u0934\u0917\u0001\u0000\u0000\u0000\u0934\u0920\u0001"+
		"\u0000\u0000\u0000\u0934\u0928\u0001\u0000\u0000\u0000\u0934\u092b\u0001"+
		"\u0000\u0000\u0000\u0934\u0930\u0001\u0000\u0000\u0000\u0935\u0141\u0001"+
		"\u0000\u0000\u0000\u0936\u0939\u0003\u013e\u009f\u0000\u0937\u0939\u0003"+
		"@ \u0000\u0938\u0936\u0001\u0000\u0000\u0000\u0938\u0937\u0001\u0000\u0000"+
		"\u0000\u0939\u0143\u0001\u0000\u0000\u0000\u093a\u093b\u0007 \u0000\u0000"+
		"\u093b\u0145\u0001\u0000\u0000\u0000\u093c\u0942\u0003\u013e\u009f\u0000"+
		"\u093d\u093e\u0005\u000f\u0000\u0000\u093e\u093f\u0003\u00b4Z\u0000\u093f"+
		"\u0940\u0005\u0010\u0000\u0000\u0940\u0942\u0001\u0000\u0000\u0000\u0941"+
		"\u093c\u0001\u0000\u0000\u0000\u0941\u093d\u0001\u0000\u0000\u0000\u0942"+
		"\u0147\u0001\u0000\u0000\u0000\u0943\u0944\u0003D\"\u0000\u0944\u0149"+
		"\u0001\u0000\u0000\u0000\u0945\u0946\u0003D\"\u0000\u0946\u014b\u0001"+
		"\u0000\u0000\u0000\u0947\u0948\u0003D\"\u0000\u0948\u014d\u0001\u0000"+
		"\u0000\u0000\u0949\u094a\u0003D\"\u0000\u094a\u014f\u0001\u0000\u0000"+
		"\u0000\u094b\u094c\u0007!\u0000\u0000\u094c\u0151\u0001\u0000\u0000\u0000"+
		"\u094d\u094e\u0007\"\u0000\u0000\u094e\u0153\u0001\u0000\u0000\u0000\u094f"+
		"\u0950\u0003@ \u0000\u0950\u0155\u0001\u0000\u0000\u0000\u0951\u0952\u0003"+
		"@ \u0000\u0952\u0157\u0001\u0000\u0000\u0000\u0953\u0954\u0003@ \u0000"+
		"\u0954\u0159\u0001\u0000\u0000\u0000\u0955\u0956\u0003@ \u0000\u0956\u015b"+
		"\u0001\u0000\u0000\u0000\u0957\u0958\u0003@ \u0000\u0958\u015d\u0001\u0000"+
		"\u0000\u0000\u0959\u095a\u0005X\u0000\u0000\u095a\u095b\u0005\u000f\u0000"+
		"\u0000\u095b\u095c\u0005\u001a\u0000\u0000\u095c\u0970\u0005\u0010\u0000"+
		"\u0000\u095d\u095e\u00052\u0000\u0000\u095e\u095f\u0005\u000f\u0000\u0000"+
		"\u095f\u0963\u0003@ \u0000\u0960\u0961\u0005\u00d6\u0000\u0000\u0961\u0962"+
		"\u0005G";
	private static final String _serializedATNSegment1 =
		"\u0000\u0000\u0962\u0964\u0003\u0164\u00b2\u0000\u0963\u0960\u0001\u0000"+
		"\u0000\u0000\u0963\u0964\u0001\u0000\u0000\u0000\u0964\u0965\u0001\u0000"+
		"\u0000\u0000\u0965\u0966\u0005\u0010\u0000\u0000\u0966\u0970\u0001\u0000"+
		"\u0000\u0000\u0967\u0968\u0003\u0160\u00b0\u0000\u0968\u096a\u0005\u000f"+
		"\u0000\u0000\u0969\u096b\u0003\u0162\u00b1\u0000\u096a\u0969\u0001\u0000"+
		"\u0000\u0000\u096a\u096b\u0001\u0000\u0000\u0000\u096b\u096c\u0001\u0000"+
		"\u0000\u0000\u096c\u096d\u0003@ \u0000\u096d\u096e\u0005\u0010\u0000\u0000"+
		"\u096e\u0970\u0001\u0000\u0000\u0000\u096f\u0959\u0001\u0000\u0000\u0000"+
		"\u096f\u095d\u0001\u0000\u0000\u0000\u096f\u0967\u0001\u0000\u0000\u0000"+
		"\u0970\u015f\u0001\u0000\u0000\u0000\u0971\u0972\u0007#\u0000\u0000\u0972"+
		"\u0161\u0001\u0000\u0000\u0000\u0973\u0974\u0007\u001d\u0000\u0000\u0974"+
		"\u0163\u0001\u0000\u0000\u0000\u0975\u097a\u0003\u0166\u00b3\u0000\u0976"+
		"\u0977\u0005\n\u0000\u0000\u0977\u0979\u0003\u0166\u00b3\u0000\u0978\u0976"+
		"\u0001\u0000\u0000\u0000\u0979\u097c\u0001\u0000\u0000\u0000\u097a\u0978"+
		"\u0001\u0000\u0000\u0000\u097a\u097b\u0001\u0000\u0000\u0000\u097b\u0165"+
		"\u0001\u0000\u0000\u0000\u097c\u097a\u0001\u0000\u0000\u0000\u097d\u097f"+
		"\u0003@ \u0000\u097e\u0980\u0003\u0168\u00b4\u0000\u097f\u097e\u0001\u0000"+
		"\u0000\u0000\u097f\u0980\u0001\u0000\u0000\u0000\u0980\u0982\u0001\u0000"+
		"\u0000\u0000\u0981\u0983\u0003\u016a\u00b5\u0000\u0982\u0981\u0001\u0000"+
		"\u0000\u0000\u0982\u0983\u0001\u0000\u0000\u0000\u0983\u0167\u0001\u0000"+
		"\u0000\u0000\u0984\u0985\u0007$\u0000\u0000\u0985\u0169\u0001\u0000\u0000"+
		"\u0000\u0986\u0987\u0005\u00cc\u0000\u0000\u0987\u098b\u0005\u0081\u0000"+
		"\u0000\u0988\u0989\u0005\u00cc\u0000\u0000\u0989\u098b\u0005\u00a2\u0000"+
		"\u0000\u098a\u0986\u0001\u0000\u0000\u0000\u098a\u0988\u0001\u0000\u0000"+
		"\u0000\u098b\u016b\u0001\u0000\u0000\u0000\u098c\u098d\u0005\u00f9\u0000"+
		"\u0000\u098d\u098e\u0003\u0110\u0088\u0000\u098e\u016d\u0001\u0000\u0000"+
		"\u0000\u098f\u0990\u0005l\u0000\u0000\u0990\u0991\u0005\u0089\u0000\u0000"+
		"\u0991\u0993\u0003&\u0013\u0000\u0992\u0994\u0003\u0170\u00b8\u0000\u0993"+
		"\u0992\u0001\u0000\u0000\u0000\u0993\u0994\u0001\u0000\u0000\u0000\u0994"+
		"\u0999\u0001\u0000\u0000\u0000\u0995\u0997\u00055\u0000\u0000\u0996\u0995"+
		"\u0001\u0000\u0000\u0000\u0996\u0997\u0001\u0000\u0000\u0000\u0997\u0998"+
		"\u0001\u0000\u0000\u0000\u0998\u099a\u0003*\u0015\u0000\u0999\u0996\u0001"+
		"\u0000\u0000\u0000\u0999\u099a\u0001\u0000\u0000\u0000\u099a\u099d\u0001"+
		"\u0000\u0000\u0000\u099b\u099c\u0005\u013b\u0000\u0000\u099c\u099e\u0003"+
		"\u0154\u00aa\u0000\u099d\u099b\u0001\u0000\u0000\u0000\u099d\u099e\u0001"+
		"\u0000\u0000\u0000\u099e\u09a0\u0001\u0000\u0000\u0000\u099f\u09a1\u0003"+
		"\u016c\u00b6\u0000\u09a0\u099f\u0001\u0000\u0000\u0000\u09a0\u09a1\u0001"+
		"\u0000\u0000\u0000\u09a1\u016f\u0001\u0000\u0000\u0000\u09a2\u09a5\u0005"+
		"\u0087\u0000\u0000\u09a3\u09a4\u0005\u00e4\u0000\u0000\u09a4\u09a6\u0005"+
		"\u00d1\u0000\u0000\u09a5\u09a3\u0001\u0000\u0000\u0000\u09a5\u09a6\u0001"+
		"\u0000\u0000\u0000\u09a6\u09a7\u0001\u0000\u0000\u0000\u09a7\u09a8\u0005"+
		"\u0132\u0000\u0000\u09a8\u09a9\u0005\u0089\u0000\u0000\u09a9\u09ac\u0003"+
		"@ \u0000\u09aa\u09ab\u0005\u0121\u0000\u0000\u09ab\u09ad\u0003@ \u0000"+
		"\u09ac\u09aa\u0001\u0000\u0000\u0000\u09ac\u09ad\u0001\u0000\u0000\u0000"+
		"\u09ad\u09b6\u0001\u0000\u0000\u0000\u09ae\u09b3\u0005\u0087\u0000\u0000"+
		"\u09af\u09b0\u0005.\u0000\u0000\u09b0\u09b4\u0005\u0132\u0000\u0000\u09b1"+
		"\u09b2\u0005\u0132\u0000\u0000\u09b2\u09b4\u0005.\u0000\u0000\u09b3\u09af"+
		"\u0001\u0000\u0000\u0000\u09b3\u09b1\u0001\u0000\u0000\u0000\u09b4\u09b6"+
		"\u0001\u0000\u0000\u0000\u09b5\u09a2\u0001\u0000\u0000\u0000\u09b5\u09ae"+
		"\u0001\u0000\u0000\u0000\u09b6\u0171\u0001\u0000\u0000\u0000\u09b7\u09b8"+
		"\u0005w\u0000\u0000\u09b8\u09b9\u0005\u0089\u0000\u0000\u09b9\u09be\u0003"+
		"&\u0013\u0000\u09ba\u09bc\u00055\u0000\u0000\u09bb\u09ba\u0001\u0000\u0000"+
		"\u0000\u09bb\u09bc\u0001\u0000\u0000\u0000\u09bc\u09bd\u0001\u0000\u0000"+
		"\u0000\u09bd\u09bf\u0003*\u0015\u0000\u09be\u09bb\u0001\u0000\u0000\u0000"+
		"\u09be\u09bf\u0001\u0000\u0000\u0000\u09bf\u09c2\u0001\u0000\u0000\u0000"+
		"\u09c0\u09c1\u0005\u013b\u0000\u0000\u09c1\u09c3\u0003\u0154\u00aa\u0000"+
		"\u09c2\u09c0\u0001\u0000\u0000\u0000\u09c2\u09c3\u0001\u0000\u0000\u0000"+
		"\u09c3\u0173\u0001\u0000\u0000\u0000\u09c4\u09c5\u0005\u0098\u0000\u0000"+
		"\u09c5\u09c6\u0005\u009d\u0000\u0000\u09c6\u09c7\u0003&\u0013\u0000\u09c7"+
		"\u09c9\u0003\u0176\u00bb\u0000\u09c8\u09ca\u0003\u016c\u00b6\u0000\u09c9"+
		"\u09c8\u0001\u0000\u0000\u0000\u09c9\u09ca\u0001\u0000\u0000\u0000\u09ca"+
		"\u0175\u0001\u0000\u0000\u0000\u09cb\u09cc\u0005\u000f\u0000\u0000\u09cc"+
		"\u09cd\u0003\u00d2i\u0000\u09cd\u09ce\u0005\u0010\u0000\u0000\u09ce\u09d0"+
		"\u0001\u0000\u0000\u0000\u09cf\u09cb\u0001\u0000\u0000\u0000\u09cf\u09d0"+
		"\u0001\u0000\u0000\u0000\u09d0\u09d1\u0001\u0000\u0000\u0000\u09d1\u09e1"+
		"\u0003\u00b6[\u0000\u09d2\u09d3\u0005\u000f\u0000\u0000\u09d3\u09d4\u0003"+
		"\u00d2i\u0000\u09d4\u09d5\u0005\u0010\u0000\u0000\u09d5\u09d7\u0001\u0000"+
		"\u0000\u0000\u09d6\u09d2\u0001\u0000\u0000\u0000\u09d6\u09d7\u0001\u0000"+
		"\u0000\u0000\u09d7\u09d8\u0001\u0000\u0000\u0000\u09d8\u09e1\u0003\u00bc"+
		"^\u0000\u09d9\u09da\u0005\u000f\u0000\u0000\u09da\u09db\u0003\u00d2i\u0000"+
		"\u09db\u09dc\u0005\u0010\u0000\u0000\u09dc\u09de\u0001\u0000\u0000\u0000"+
		"\u09dd\u09d9\u0001\u0000\u0000\u0000\u09dd\u09de\u0001\u0000\u0000\u0000"+
		"\u09de\u09df\u0001\u0000\u0000\u0000\u09df\u09e1\u0003\u0126\u0093\u0000"+
		"\u09e0\u09cf\u0001\u0000\u0000\u0000\u09e0\u09d6\u0001\u0000\u0000\u0000"+
		"\u09e0\u09dd\u0001\u0000\u0000\u0000\u09e1\u0177\u0001\u0000\u0000\u0000"+
		"\u09e2\u09e3\u0005\u012d\u0000\u0000\u09e3\u09e5\u0003&\u0013\u0000\u09e4"+
		"\u09e6\u0003\u0170\u00b8\u0000\u09e5\u09e4\u0001\u0000\u0000\u0000\u09e5"+
		"\u09e6\u0001\u0000\u0000\u0000\u09e6\u09eb\u0001\u0000\u0000\u0000\u09e7"+
		"\u09e9\u00055\u0000\u0000\u09e8\u09e7\u0001\u0000\u0000\u0000\u09e8\u09e9"+
		"\u0001\u0000\u0000\u0000\u09e9\u09ea\u0001\u0000\u0000\u0000\u09ea\u09ec"+
		"\u0003*\u0015\u0000\u09eb\u09e8\u0001\u0000\u0000\u0000\u09eb\u09ec\u0001"+
		"\u0000\u0000\u0000\u09ec\u09ed\u0001\u0000\u0000\u0000\u09ed\u09ee\u0005"+
		"\u0104\u0000\u0000\u09ee\u09f1\u0003\u017a\u00bd\u0000\u09ef\u09f0\u0005"+
		"\u013b\u0000\u0000\u09f0\u09f2\u0003\u0154\u00aa\u0000\u09f1\u09ef\u0001"+
		"\u0000\u0000\u0000\u09f1\u09f2\u0001\u0000\u0000\u0000\u09f2\u09f4\u0001"+
		"\u0000\u0000\u0000\u09f3\u09f5\u0003\u016c\u00b6\u0000\u09f4\u09f3\u0001"+
		"\u0000\u0000\u0000\u09f4\u09f5\u0001\u0000\u0000\u0000\u09f5\u0179\u0001"+
		"\u0000\u0000\u0000\u09f6\u09fb\u0003\u017c\u00be\u0000\u09f7\u09f8\u0005"+
		"\n\u0000\u0000\u09f8\u09fa\u0003\u017c\u00be\u0000\u09f9\u09f7\u0001\u0000"+
		"\u0000\u0000\u09fa\u09fd\u0001\u0000\u0000\u0000\u09fb\u09f9\u0001\u0000"+
		"\u0000\u0000\u09fb\u09fc\u0001\u0000\u0000\u0000\u09fc\u017b\u0001\u0000"+
		"\u0000\u0000\u09fd\u09fb\u0001\u0000\u0000\u0000\u09fe\u09ff\u0003\u017e"+
		"\u00bf\u0000\u09ff\u0a00\u0005 \u0000\u0000\u0a00\u0a01\u0003\u0180\u00c0"+
		"\u0000\u0a01\u017d\u0001\u0000\u0000\u0000\u0a02\u0a03\u0003(\u0014\u0000"+
		"\u0a03\u017f\u0001\u0000\u0000\u0000\u0a04\u0a05\u0003@ \u0000\u0a05\u0181"+
		"\u0001\u0000\u0000\u0000\u0a06\u0a07\u0005\u0123\u0000\u0000\u0a07\u0a0c"+
		"\u0003\u0184\u00c2\u0000\u0a08\u0a09\u0005\n\u0000\u0000\u0a09\u0a0b\u0003"+
		"\u0184\u00c2\u0000\u0a0a\u0a08\u0001\u0000\u0000\u0000\u0a0b\u0a0e\u0001"+
		"\u0000\u0000\u0000\u0a0c\u0a0a\u0001\u0000\u0000\u0000\u0a0c\u0a0d\u0001"+
		"\u0000\u0000\u0000\u0a0d\u0183\u0001\u0000\u0000\u0000\u0a0e\u0a0c\u0001"+
		"\u0000\u0000\u0000\u0a0f\u0a10\u0005\u009f\u0000\u0000\u0a10\u0a11\u0005"+
		"\u00ab\u0000\u0000\u0a11\u0a17\u0003\u018a\u00c5\u0000\u0a12\u0a13\u0005"+
		"\u00ee\u0000\u0000\u0a13\u0a17\u0005\u00d4\u0000\u0000\u0a14\u0a15\u0005"+
		"\u00ee\u0000\u0000\u0a15\u0a17\u0005\u013f\u0000\u0000\u0a16\u0a0f\u0001"+
		"\u0000\u0000\u0000\u0a16\u0a12\u0001\u0000\u0000\u0000\u0a16\u0a14\u0001"+
		"\u0000\u0000\u0000\u0a17\u0185\u0001\u0000\u0000\u0000\u0a18\u0a1d\u0003"+
		"\u0188\u00c4\u0000\u0a19\u0a1a\u0005\n\u0000\u0000\u0a1a\u0a1c\u0003\u0188"+
		"\u00c4\u0000\u0a1b\u0a19\u0001\u0000\u0000\u0000\u0a1c\u0a1f\u0001\u0000"+
		"\u0000\u0000\u0a1d\u0a1b\u0001\u0000\u0000\u0000\u0a1d\u0a1e\u0001\u0000"+
		"\u0000\u0000\u0a1e\u0187\u0001\u0000\u0000\u0000\u0a1f\u0a1d\u0001\u0000"+
		"\u0000\u0000\u0a20\u0a21\u0005\u009f\u0000\u0000\u0a21\u0a22\u0005\u00ab"+
		"\u0000\u0000\u0a22\u0a2b\u0003\u018a\u00c5\u0000\u0a23\u0a24\u0005\u00ee"+
		"\u0000\u0000\u0a24\u0a2b\u0005\u00d4\u0000\u0000\u0a25\u0a26\u0005\u00ee"+
		"\u0000\u0000\u0a26\u0a2b\u0005\u013f\u0000\u0000\u0a27\u0a28\u0005:\u0000"+
		"\u0000\u0a28\u0a29\u0005\u0115\u0000\u0000\u0a29\u0a2b\u0003\f\u0006\u0000"+
		"\u0a2a\u0a20\u0001\u0000\u0000\u0000\u0a2a\u0a23\u0001\u0000\u0000\u0000"+
		"\u0a2a\u0a25\u0001\u0000\u0000\u0000\u0a2a\u0a27\u0001\u0000\u0000\u0000"+
		"\u0a2b\u0189\u0001\u0000\u0000\u0000\u0a2c\u0a2d\u0005\u00ee\u0000\u0000"+
		"\u0a2d\u0a34\u0005\u0129\u0000\u0000\u0a2e\u0a2f\u0005\u00ee\u0000\u0000"+
		"\u0a2f\u0a34\u0005T\u0000\u0000\u0a30\u0a31\u0005\u00f6\u0000\u0000\u0a31"+
		"\u0a34\u0005\u00ee\u0000\u0000\u0a32\u0a34\u0005\u0102\u0000\u0000\u0a33"+
		"\u0a2c\u0001\u0000\u0000\u0000\u0a33\u0a2e\u0001\u0000\u0000\u0000\u0a33"+
		"\u0a30\u0001\u0000\u0000\u0000\u0a33\u0a32\u0001\u0000\u0000\u0000\u0a34"+
		"\u018b\u0001\u0000\u0000\u0000\u011d\u018e\u0193\u019f\u01a2\u01a6\u01b5"+
		"\u01bc\u01cf\u01d8\u01da\u01e2\u01e8\u01ee\u01f7\u01fb\u01ff\u0205\u0208"+
		"\u020b\u020f\u021e\u0223\u0229\u022c\u0233\u0243\u0245\u024c\u0265\u0268"+
		"\u0271\u0283\u0287\u028f\u029b\u029e\u02a5\u02a8\u02ad\u02b5\u02be\u02c5"+
		"\u02cd\u02d1\u02e0\u02ea\u02ee\u02f7\u031d\u0322\u0328\u032e\u0332\u0338"+
		"\u0341\u0349\u034b\u0356\u0367\u0369\u0384\u0387\u038f\u0392\u03a4\u03b8"+
		"\u03bf\u03c9\u03d0\u03da\u03e1\u03eb\u03f7\u0407\u0465\u0471\u047a\u047e"+
		"\u0481\u0485\u048b\u048d\u049e\u04a1\u04a4\u04b2\u04b6\u04c6\u04cc\u04d1"+
		"\u04d6\u04e0\u04e5\u04ea\u04f3\u04f7\u04fc\u0503\u0508\u0512\u051c\u0523"+
		"\u052c\u0537\u0542\u054d\u0570\u0580\u0582\u058c\u0593\u059a\u059c\u05a7"+
		"\u05aa\u05b3\u05b6\u05b9\u05c3\u05ca\u05d3\u05f1\u05f3\u05f7\u05fe\u0607"+
		"\u060a\u060c\u0612\u061e\u0628\u062c\u063a\u063e\u0644\u064a\u0662\u0667"+
		"\u066b\u066f\u068c\u0694\u0697\u069c\u06ab\u06ad\u06b7\u06ba\u06bd\u06c4"+
		"\u06cc\u06d3\u06df\u06e6\u06e8\u06ec\u06ef\u06f4\u06fa\u0701\u0705\u070a"+
		"\u0717\u0720\u0726\u072c\u072e\u0735\u0743\u074b\u075b\u0760\u0769\u0773"+
		"\u0778\u077a\u0784\u078b\u0791\u079e\u07ac\u07af\u07b2\u07b5\u07c2\u07ce"+
		"\u07d4\u07db\u07ed\u07fc\u0800\u0806\u080c\u0814\u081a\u081e\u0821\u0825"+
		"\u082b\u082e\u0839\u083e\u084c\u0851\u085f\u0864\u0868\u086b\u0870\u0876"+
		"\u0879\u087d\u0884\u088c\u0897\u089d\u08a0\u08a2\u08a8\u08ab\u08ae\u08b1"+
		"\u08b4\u08b8\u08bb\u08be\u08c1\u08c4\u08cc\u08d1\u08d6\u08df\u08e3\u08e5"+
		"\u08ea\u08ef\u08f5\u08f9\u08fd\u0907\u090b\u0912\u0917\u091d\u0920\u0926"+
		"\u092d\u0934\u0938\u0941\u0963\u096a\u096f\u097a\u097f\u0982\u098a\u0993"+
		"\u0996\u0999\u099d\u09a0\u09a5\u09ac\u09b3\u09b5\u09bb\u09be\u09c2\u09c9"+
		"\u09cf\u09d6\u09dd\u09e0\u09e5\u09e8\u09eb\u09f1\u09f4\u09fb\u0a0c\u0a16"+
		"\u0a1d\u0a2a\u0a33";
	public static final String _serializedATN = Utils.join(
		new String[] {
			_serializedATNSegment0,
			_serializedATNSegment1
		},
		""
	);
	public static final ATN _ATN =
		new ATNDeserializer().deserialize(_serializedATN.toCharArray());
	static {
		_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
		for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
			_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy