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

chapi.ast.antlr.CParser Maven / Gradle / Ivy

Go to download

Chapi is A common language meta information convertor, convert different languages to same meta-data model

The newest version!
// Generated from CParser.g4 by ANTLR 4.13.1
package chapi.ast.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 CParser 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
		SINGLE_LINE_DOC_COMMENT=1, EMPTY_DELIMITED_DOC_COMMENT=2, DELIMITED_DOC_COMMENT=3, 
		SINGLE_LINE_COMMENT=4, DELIMITED_COMMENT=5, WHITESPACES=6, SHARP=7, MultiLineMacro=8, 
		Auto=9, Break=10, Case=11, Char=12, Const=13, Continue=14, Default=15, 
		Do=16, Double=17, Else=18, Enum=19, Extern=20, Float=21, For=22, Goto=23, 
		If=24, Inline=25, Int=26, Long=27, Register=28, Restrict=29, Return=30, 
		Short=31, Signed=32, Sizeof=33, Static=34, Struct=35, Switch=36, Typedef=37, 
		Union=38, Unsigned=39, Void=40, Volatile=41, While=42, Alignas=43, Alignof=44, 
		Atomic=45, Bool=46, Complex=47, Generic=48, Imaginary=49, Noreturn=50, 
		StaticAssert=51, ThreadLocal=52, OPEN_PARENS=53, CLOSE_PARENS=54, LeftBracket=55, 
		RightBracket=56, LeftBrace=57, RightBrace=58, Less=59, LessEqual=60, Greater=61, 
		GreaterEqual=62, LeftShift=63, RightShift=64, Plus=65, PlusPlus=66, Minus=67, 
		MinusMinus=68, Star=69, Div=70, Mod=71, And=72, Or=73, OP_AND=74, OP_OR=75, 
		Caret=76, Not=77, Tilde=78, Question=79, Colon=80, Semi=81, Comma=82, 
		OP_EQ=83, StarAssign=84, DivAssign=85, ModAssign=86, PlusAssign=87, MinusAssign=88, 
		LeftShiftAssign=89, RightShiftAssign=90, AndAssign=91, XorAssign=92, OrAssign=93, 
		Equal=94, OP_NE=95, Arrow=96, Dot=97, Ellipsis=98, TRUE=99, FALSE=100, 
		Ifdef=101, Ifndef=102, Extenion=103, EXT_BuiltinVaArg=104, EXT_BuiltinOffsetof=105, 
		EXT_Error=106, EXT_M128=107, EXT_M128d=108, EXT_M128i=109, EXT_Typeof=110, 
		EXT_Inline=111, EXT_Stdcall=112, EXT_Declspec=113, EXT_Cdecl=114, EXT_Clrcall=115, 
		EXT_Fastcall=116, EXT_Thiscall=117, EXT_Vectorcall=118, EXT_Asm=119, EXT_Asm_=120, 
		EXT_Attribute=121, EXT_Volatile=122, Identifier=123, DigitSequence=124, 
		STRING=125, Constant=126, AsmBlock=127, Whitespace=128, Newline=129, BlockComment=130, 
		LineComment=131, DIRECTIVE_WHITESPACES=132, DIGITS=133, INCLUDE=134, DEFINE=135, 
		UNDEF=136, ELIF=137, ENDIF=138, LINE=139, ERROR=140, WARNING=141, REGION=142, 
		ENDREGION=143, PRAGMA=144, NULLABLE=145, DIRECTIVE_HIDDEN=146, DIRECTIVE_DOUBLE_QUOTE=147, 
		CONDITIONAL_SYMBOL=148, DIRECTIVE_NEW_LINE=149, INCLUDE_TEXT=150, TEXT=151;
	public static final int
		RULE_compilationUnit = 0, RULE_primaryExpression = 1, RULE_genericSelection = 2, 
		RULE_genericAssocList = 3, RULE_genericAssociation = 4, RULE_postfixExpression = 5, 
		RULE_extensionExpression = 6, RULE_postixCall = 7, RULE_argumentExpressionList = 8, 
		RULE_unaryExpression = 9, RULE_unaryOperator = 10, RULE_castExpression = 11, 
		RULE_multiplicativeExpression = 12, RULE_additiveExpression = 13, RULE_shiftExpression = 14, 
		RULE_relationalExpression = 15, RULE_comparator = 16, RULE_equalityExpression = 17, 
		RULE_andExpression = 18, RULE_exclusiveOrExpression = 19, RULE_inclusiveOrExpression = 20, 
		RULE_logicalAndExpression = 21, RULE_logicalOrExpression = 22, RULE_conditionalExpression = 23, 
		RULE_assignmentExpression = 24, RULE_assignmentOperator = 25, RULE_expression = 26, 
		RULE_constantExpression = 27, RULE_declaration = 28, RULE_declarationSpecifier = 29, 
		RULE_initDeclaratorList = 30, RULE_initDeclarator = 31, RULE_storageClassSpecifier = 32, 
		RULE_typeSpecifier = 33, RULE_structOrUnionSpecifier = 34, RULE_structOrUnion = 35, 
		RULE_structDeclarationList = 36, RULE_structDeclaration = 37, RULE_specifierQualifierList = 38, 
		RULE_structDeclaratorList = 39, RULE_structDeclarator = 40, RULE_enumSpecifier = 41, 
		RULE_enumeratorList = 42, RULE_enumerator = 43, RULE_enumerationConstant = 44, 
		RULE_atomicTypeSpecifier = 45, RULE_typeQualifier = 46, RULE_functionSpecifier = 47, 
		RULE_alignmentSpecifier = 48, RULE_declarator = 49, RULE_directDeclarator = 50, 
		RULE_vcSpecificModifer = 51, RULE_gccDeclaratorExtension = 52, RULE_gccAttributeSpecifier = 53, 
		RULE_gccAttributeList = 54, RULE_gccAttribute = 55, RULE_nestedParenthesesBlock = 56, 
		RULE_pointer = 57, RULE_typeQualifierList = 58, RULE_parameterTypeList = 59, 
		RULE_parameterList = 60, RULE_parameterDeclaration = 61, RULE_identifierList = 62, 
		RULE_typeName = 63, RULE_abstractDeclarator = 64, RULE_directAbstractDeclarator = 65, 
		RULE_typedefName = 66, RULE_initializer = 67, RULE_initializerList = 68, 
		RULE_designation = 69, RULE_designatorList = 70, RULE_designator = 71, 
		RULE_staticAssertDeclaration = 72, RULE_statement = 73, RULE_normalStatement = 74, 
		RULE_asmBody = 75, RULE_logicals = 76, RULE_labeledStatement = 77, RULE_compoundStatement = 78, 
		RULE_blockItemList = 79, RULE_blockItem = 80, RULE_expressionStatement = 81, 
		RULE_selectionStatement = 82, RULE_iterationStatement = 83, RULE_forCondition = 84, 
		RULE_forDeclaration = 85, RULE_forExpression = 86, RULE_jumpStatement = 87, 
		RULE_externalDeclaration = 88, RULE_functionDefinition = 89, RULE_declarationList = 90, 
		RULE_typeKeywords = 91, RULE_keywords = 92;
	private static String[] makeRuleNames() {
		return new String[] {
			"compilationUnit", "primaryExpression", "genericSelection", "genericAssocList", 
			"genericAssociation", "postfixExpression", "extensionExpression", "postixCall", 
			"argumentExpressionList", "unaryExpression", "unaryOperator", "castExpression", 
			"multiplicativeExpression", "additiveExpression", "shiftExpression", 
			"relationalExpression", "comparator", "equalityExpression", "andExpression", 
			"exclusiveOrExpression", "inclusiveOrExpression", "logicalAndExpression", 
			"logicalOrExpression", "conditionalExpression", "assignmentExpression", 
			"assignmentOperator", "expression", "constantExpression", "declaration", 
			"declarationSpecifier", "initDeclaratorList", "initDeclarator", "storageClassSpecifier", 
			"typeSpecifier", "structOrUnionSpecifier", "structOrUnion", "structDeclarationList", 
			"structDeclaration", "specifierQualifierList", "structDeclaratorList", 
			"structDeclarator", "enumSpecifier", "enumeratorList", "enumerator", 
			"enumerationConstant", "atomicTypeSpecifier", "typeQualifier", "functionSpecifier", 
			"alignmentSpecifier", "declarator", "directDeclarator", "vcSpecificModifer", 
			"gccDeclaratorExtension", "gccAttributeSpecifier", "gccAttributeList", 
			"gccAttribute", "nestedParenthesesBlock", "pointer", "typeQualifierList", 
			"parameterTypeList", "parameterList", "parameterDeclaration", "identifierList", 
			"typeName", "abstractDeclarator", "directAbstractDeclarator", "typedefName", 
			"initializer", "initializerList", "designation", "designatorList", "designator", 
			"staticAssertDeclaration", "statement", "normalStatement", "asmBody", 
			"logicals", "labeledStatement", "compoundStatement", "blockItemList", 
			"blockItem", "expressionStatement", "selectionStatement", "iterationStatement", 
			"forCondition", "forDeclaration", "forExpression", "jumpStatement", "externalDeclaration", 
			"functionDefinition", "declarationList", "typeKeywords", "keywords"
		};
	}
	public static final String[] ruleNames = makeRuleNames();

	private static String[] makeLiteralNames() {
		return new String[] {
			null, null, "'/***/'", null, null, null, null, "'#'", null, "'auto'", 
			"'break'", "'case'", "'char'", "'const'", "'continue'", "'default'", 
			"'do'", "'double'", "'else'", "'enum'", "'extern'", "'float'", "'for'", 
			"'goto'", "'if'", "'inline'", "'int'", "'long'", "'register'", "'restrict'", 
			"'return'", "'short'", "'signed'", "'sizeof'", "'static'", "'struct'", 
			"'switch'", "'typedef'", "'union'", "'unsigned'", "'void'", "'volatile'", 
			"'while'", "'_Alignas'", "'_Alignof'", "'_Atomic'", "'_Bool'", "'_Complex'", 
			"'_Generic'", "'_Imaginary'", "'_Noreturn'", "'_Static_assert'", "'_Thread_local'", 
			"'('", "')'", "'['", "']'", "'{'", "'}'", "'<'", "'<='", "'>'", "'>='", 
			"'<<'", "'>>'", "'+'", "'++'", "'-'", "'--'", "'*'", "'/'", "'%'", "'&'", 
			"'|'", "'&&'", "'||'", "'^'", "'!'", "'~'", "'?'", "':'", "';'", "','", 
			"'='", "'*='", "'/='", "'%='", "'+='", "'-='", "'<<='", "'>>='", "'&='", 
			"'^='", "'|='", "'=='", "'!='", "'->'", "'.'", "'...'", "'true'", "'false'", 
			"'ifdef'", "'ifndef'", "'__extension__'", "'__builtin_va_arg'", "'__builtin_offsetof'", 
			"'__error__'", "'__m128'", "'__m128d'", "'__m128i'", "'__typeof__'", 
			"'__inline__'", "'__stdcall'", "'__declspec'", "'__cdecl'", "'__clrcall'", 
			"'__fastcall'", "'__thiscall'", "'__vectorcall'", "'__asm'", "'__asm__'", 
			"'__attribute__'", "'__volatile__'", null, null, null, null, null, null, 
			null, null, null, null, null, "'include'", "'define'", "'undef'", "'elif'", 
			"'endif'", "'line'", null, null, null, null, null, null, "'hidden'", 
			"'\"'"
		};
	}
	private static final String[] _LITERAL_NAMES = makeLiteralNames();
	private static String[] makeSymbolicNames() {
		return new String[] {
			null, "SINGLE_LINE_DOC_COMMENT", "EMPTY_DELIMITED_DOC_COMMENT", "DELIMITED_DOC_COMMENT", 
			"SINGLE_LINE_COMMENT", "DELIMITED_COMMENT", "WHITESPACES", "SHARP", "MultiLineMacro", 
			"Auto", "Break", "Case", "Char", "Const", "Continue", "Default", "Do", 
			"Double", "Else", "Enum", "Extern", "Float", "For", "Goto", "If", "Inline", 
			"Int", "Long", "Register", "Restrict", "Return", "Short", "Signed", "Sizeof", 
			"Static", "Struct", "Switch", "Typedef", "Union", "Unsigned", "Void", 
			"Volatile", "While", "Alignas", "Alignof", "Atomic", "Bool", "Complex", 
			"Generic", "Imaginary", "Noreturn", "StaticAssert", "ThreadLocal", "OPEN_PARENS", 
			"CLOSE_PARENS", "LeftBracket", "RightBracket", "LeftBrace", "RightBrace", 
			"Less", "LessEqual", "Greater", "GreaterEqual", "LeftShift", "RightShift", 
			"Plus", "PlusPlus", "Minus", "MinusMinus", "Star", "Div", "Mod", "And", 
			"Or", "OP_AND", "OP_OR", "Caret", "Not", "Tilde", "Question", "Colon", 
			"Semi", "Comma", "OP_EQ", "StarAssign", "DivAssign", "ModAssign", "PlusAssign", 
			"MinusAssign", "LeftShiftAssign", "RightShiftAssign", "AndAssign", "XorAssign", 
			"OrAssign", "Equal", "OP_NE", "Arrow", "Dot", "Ellipsis", "TRUE", "FALSE", 
			"Ifdef", "Ifndef", "Extenion", "EXT_BuiltinVaArg", "EXT_BuiltinOffsetof", 
			"EXT_Error", "EXT_M128", "EXT_M128d", "EXT_M128i", "EXT_Typeof", "EXT_Inline", 
			"EXT_Stdcall", "EXT_Declspec", "EXT_Cdecl", "EXT_Clrcall", "EXT_Fastcall", 
			"EXT_Thiscall", "EXT_Vectorcall", "EXT_Asm", "EXT_Asm_", "EXT_Attribute", 
			"EXT_Volatile", "Identifier", "DigitSequence", "STRING", "Constant", 
			"AsmBlock", "Whitespace", "Newline", "BlockComment", "LineComment", "DIRECTIVE_WHITESPACES", 
			"DIGITS", "INCLUDE", "DEFINE", "UNDEF", "ELIF", "ENDIF", "LINE", "ERROR", 
			"WARNING", "REGION", "ENDREGION", "PRAGMA", "NULLABLE", "DIRECTIVE_HIDDEN", 
			"DIRECTIVE_DOUBLE_QUOTE", "CONDITIONAL_SYMBOL", "DIRECTIVE_NEW_LINE", 
			"INCLUDE_TEXT", "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 "CParser.g4"; }

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

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

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

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

	@SuppressWarnings("CheckReturnValue")
	public static class CompilationUnitContext extends ParserRuleContext {
		public TerminalNode EOF() { return getToken(CParser.EOF, 0); }
		public List externalDeclaration() {
			return getRuleContexts(ExternalDeclarationContext.class);
		}
		public ExternalDeclarationContext externalDeclaration(int i) {
			return getRuleContext(ExternalDeclarationContext.class,i);
		}
		public CompilationUnitContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_compilationUnit; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterCompilationUnit(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitCompilationUnit(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitCompilationUnit(this);
			else return visitor.visitChildren(this);
		}
	}

	public final CompilationUnitContext compilationUnit() throws RecognitionException {
		CompilationUnitContext _localctx = new CompilationUnitContext(_ctx, getState());
		enterRule(_localctx, 0, RULE_compilationUnit);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(189);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 17429379910611456L) != 0) || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & 239816525538660481L) != 0)) {
				{
				{
				setState(186);
				externalDeclaration();
				}
				}
				setState(191);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			setState(192);
			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 PrimaryExpressionContext extends ParserRuleContext {
		public TerminalNode Identifier() { return getToken(CParser.Identifier, 0); }
		public TerminalNode Constant() { return getToken(CParser.Constant, 0); }
		public List STRING() { return getTokens(CParser.STRING); }
		public TerminalNode STRING(int i) {
			return getToken(CParser.STRING, i);
		}
		public TerminalNode OPEN_PARENS() { return getToken(CParser.OPEN_PARENS, 0); }
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode CLOSE_PARENS() { return getToken(CParser.CLOSE_PARENS, 0); }
		public GenericSelectionContext genericSelection() {
			return getRuleContext(GenericSelectionContext.class,0);
		}
		public CompoundStatementContext compoundStatement() {
			return getRuleContext(CompoundStatementContext.class,0);
		}
		public TerminalNode Extenion() { return getToken(CParser.Extenion, 0); }
		public TerminalNode EXT_BuiltinVaArg() { return getToken(CParser.EXT_BuiltinVaArg, 0); }
		public UnaryExpressionContext unaryExpression() {
			return getRuleContext(UnaryExpressionContext.class,0);
		}
		public TerminalNode Comma() { return getToken(CParser.Comma, 0); }
		public TypeNameContext typeName() {
			return getRuleContext(TypeNameContext.class,0);
		}
		public TerminalNode EXT_BuiltinOffsetof() { return getToken(CParser.EXT_BuiltinOffsetof, 0); }
		public List typeKeywords() {
			return getRuleContexts(TypeKeywordsContext.class);
		}
		public TypeKeywordsContext typeKeywords(int i) {
			return getRuleContext(TypeKeywordsContext.class,i);
		}
		public PointerContext pointer() {
			return getRuleContext(PointerContext.class,0);
		}
		public PrimaryExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_primaryExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterPrimaryExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitPrimaryExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitPrimaryExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PrimaryExpressionContext primaryExpression() throws RecognitionException {
		PrimaryExpressionContext _localctx = new PrimaryExpressionContext(_ctx, getState());
		enterRule(_localctx, 2, RULE_primaryExpression);
		int _la;
		try {
			int _alt;
			setState(237);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,5,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(194);
				match(Identifier);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(195);
				match(Constant);
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(197); 
				_errHandler.sync(this);
				_alt = 1;
				do {
					switch (_alt) {
					case 1:
						{
						{
						setState(196);
						match(STRING);
						}
						}
						break;
					default:
						throw new NoViableAltException(this);
					}
					setState(199); 
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,1,_ctx);
				} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(201);
				match(OPEN_PARENS);
				setState(202);
				expression();
				setState(203);
				match(CLOSE_PARENS);
				}
				break;
			case 5:
				enterOuterAlt(_localctx, 5);
				{
				setState(205);
				genericSelection();
				}
				break;
			case 6:
				enterOuterAlt(_localctx, 6);
				{
				setState(207);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==Extenion) {
					{
					setState(206);
					match(Extenion);
					}
				}

				setState(209);
				match(OPEN_PARENS);
				setState(210);
				compoundStatement();
				setState(211);
				match(CLOSE_PARENS);
				}
				break;
			case 7:
				enterOuterAlt(_localctx, 7);
				{
				setState(213);
				match(EXT_BuiltinVaArg);
				setState(214);
				match(OPEN_PARENS);
				setState(215);
				unaryExpression();
				setState(216);
				match(Comma);
				setState(217);
				typeName();
				setState(218);
				match(CLOSE_PARENS);
				}
				break;
			case 8:
				enterOuterAlt(_localctx, 8);
				{
				setState(220);
				match(EXT_BuiltinOffsetof);
				setState(221);
				match(OPEN_PARENS);
				setState(222);
				typeName();
				setState(223);
				match(Comma);
				setState(224);
				unaryExpression();
				setState(225);
				match(CLOSE_PARENS);
				}
				break;
			case 9:
				enterOuterAlt(_localctx, 9);
				{
				setState(227);
				typeKeywords();
				setState(231);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,3,_ctx);
				while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
					if ( _alt==1 ) {
						{
						{
						setState(228);
						typeKeywords();
						}
						} 
					}
					setState(233);
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,3,_ctx);
				}
				setState(235);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,4,_ctx) ) {
				case 1:
					{
					setState(234);
					pointer();
					}
					break;
				}
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class GenericSelectionContext extends ParserRuleContext {
		public TerminalNode Generic() { return getToken(CParser.Generic, 0); }
		public TerminalNode OPEN_PARENS() { return getToken(CParser.OPEN_PARENS, 0); }
		public AssignmentExpressionContext assignmentExpression() {
			return getRuleContext(AssignmentExpressionContext.class,0);
		}
		public TerminalNode Comma() { return getToken(CParser.Comma, 0); }
		public GenericAssocListContext genericAssocList() {
			return getRuleContext(GenericAssocListContext.class,0);
		}
		public TerminalNode CLOSE_PARENS() { return getToken(CParser.CLOSE_PARENS, 0); }
		public GenericSelectionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_genericSelection; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterGenericSelection(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitGenericSelection(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitGenericSelection(this);
			else return visitor.visitChildren(this);
		}
	}

	public final GenericSelectionContext genericSelection() throws RecognitionException {
		GenericSelectionContext _localctx = new GenericSelectionContext(_ctx, getState());
		enterRule(_localctx, 4, RULE_genericSelection);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(239);
			match(Generic);
			setState(240);
			match(OPEN_PARENS);
			setState(241);
			assignmentExpression();
			setState(242);
			match(Comma);
			setState(243);
			genericAssocList();
			setState(244);
			match(CLOSE_PARENS);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class GenericAssocListContext extends ParserRuleContext {
		public List genericAssociation() {
			return getRuleContexts(GenericAssociationContext.class);
		}
		public GenericAssociationContext genericAssociation(int i) {
			return getRuleContext(GenericAssociationContext.class,i);
		}
		public List Comma() { return getTokens(CParser.Comma); }
		public TerminalNode Comma(int i) {
			return getToken(CParser.Comma, i);
		}
		public GenericAssocListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_genericAssocList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterGenericAssocList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitGenericAssocList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitGenericAssocList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final GenericAssocListContext genericAssocList() throws RecognitionException {
		GenericAssocListContext _localctx = new GenericAssocListContext(_ctx, getState());
		enterRule(_localctx, 6, RULE_genericAssocList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(246);
			genericAssociation();
			setState(251);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==Comma) {
				{
				{
				setState(247);
				match(Comma);
				setState(248);
				genericAssociation();
				}
				}
				setState(253);
				_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 GenericAssociationContext extends ParserRuleContext {
		public TerminalNode Colon() { return getToken(CParser.Colon, 0); }
		public AssignmentExpressionContext assignmentExpression() {
			return getRuleContext(AssignmentExpressionContext.class,0);
		}
		public TypeNameContext typeName() {
			return getRuleContext(TypeNameContext.class,0);
		}
		public TerminalNode Default() { return getToken(CParser.Default, 0); }
		public GenericAssociationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_genericAssociation; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterGenericAssociation(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitGenericAssociation(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitGenericAssociation(this);
			else return visitor.visitChildren(this);
		}
	}

	public final GenericAssociationContext genericAssociation() throws RecognitionException {
		GenericAssociationContext _localctx = new GenericAssociationContext(_ctx, getState());
		enterRule(_localctx, 8, RULE_genericAssociation);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(256);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case Char:
			case Const:
			case Double:
			case Enum:
			case Float:
			case Int:
			case Long:
			case Restrict:
			case Short:
			case Signed:
			case Static:
			case Struct:
			case Union:
			case Unsigned:
			case Void:
			case Volatile:
			case Atomic:
			case Bool:
			case Complex:
			case Generic:
			case OPEN_PARENS:
			case Extenion:
			case EXT_BuiltinVaArg:
			case EXT_BuiltinOffsetof:
			case EXT_M128:
			case EXT_M128d:
			case EXT_M128i:
			case EXT_Typeof:
			case Identifier:
			case STRING:
			case Constant:
				{
				setState(254);
				typeName();
				}
				break;
			case Default:
				{
				setState(255);
				match(Default);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
			setState(258);
			match(Colon);
			setState(259);
			assignmentExpression();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class PostfixExpressionContext extends ParserRuleContext {
		public PrimaryExpressionContext primaryExpression() {
			return getRuleContext(PrimaryExpressionContext.class,0);
		}
		public ExtensionExpressionContext extensionExpression() {
			return getRuleContext(ExtensionExpressionContext.class,0);
		}
		public List postixCall() {
			return getRuleContexts(PostixCallContext.class);
		}
		public PostixCallContext postixCall(int i) {
			return getRuleContext(PostixCallContext.class,i);
		}
		public List PlusPlus() { return getTokens(CParser.PlusPlus); }
		public TerminalNode PlusPlus(int i) {
			return getToken(CParser.PlusPlus, i);
		}
		public List MinusMinus() { return getTokens(CParser.MinusMinus); }
		public TerminalNode MinusMinus(int i) {
			return getToken(CParser.MinusMinus, i);
		}
		public PostfixExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_postfixExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterPostfixExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitPostfixExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitPostfixExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PostfixExpressionContext postfixExpression() throws RecognitionException {
		PostfixExpressionContext _localctx = new PostfixExpressionContext(_ctx, getState());
		enterRule(_localctx, 10, RULE_postfixExpression);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(263);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,8,_ctx) ) {
			case 1:
				{
				setState(261);
				primaryExpression();
				}
				break;
			case 2:
				{
				setState(262);
				extensionExpression();
				}
				break;
			}
			setState(270);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,10,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					setState(268);
					_errHandler.sync(this);
					switch (_input.LA(1)) {
					case OPEN_PARENS:
					case LeftBracket:
					case Arrow:
					case Dot:
						{
						setState(265);
						postixCall();
						}
						break;
					case PlusPlus:
						{
						setState(266);
						match(PlusPlus);
						}
						break;
					case MinusMinus:
						{
						setState(267);
						match(MinusMinus);
						}
						break;
					default:
						throw new NoViableAltException(this);
					}
					} 
				}
				setState(272);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,10,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ExtensionExpressionContext extends ParserRuleContext {
		public TerminalNode OPEN_PARENS() { return getToken(CParser.OPEN_PARENS, 0); }
		public TypeNameContext typeName() {
			return getRuleContext(TypeNameContext.class,0);
		}
		public TerminalNode CLOSE_PARENS() { return getToken(CParser.CLOSE_PARENS, 0); }
		public TerminalNode LeftBrace() { return getToken(CParser.LeftBrace, 0); }
		public InitializerListContext initializerList() {
			return getRuleContext(InitializerListContext.class,0);
		}
		public TerminalNode RightBrace() { return getToken(CParser.RightBrace, 0); }
		public TerminalNode Extenion() { return getToken(CParser.Extenion, 0); }
		public TerminalNode Comma() { return getToken(CParser.Comma, 0); }
		public ExtensionExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_extensionExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterExtensionExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitExtensionExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitExtensionExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ExtensionExpressionContext extensionExpression() throws RecognitionException {
		ExtensionExpressionContext _localctx = new ExtensionExpressionContext(_ctx, getState());
		enterRule(_localctx, 12, RULE_extensionExpression);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(274);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==Extenion) {
				{
				setState(273);
				match(Extenion);
				}
			}

			setState(276);
			match(OPEN_PARENS);
			setState(277);
			typeName();
			setState(278);
			match(CLOSE_PARENS);
			setState(279);
			match(LeftBrace);
			setState(280);
			initializerList();
			setState(282);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==Comma) {
				{
				setState(281);
				match(Comma);
				}
			}

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

	@SuppressWarnings("CheckReturnValue")
	public static class PostixCallContext extends ParserRuleContext {
		public PostixCallContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_postixCall; }
	 
		public PostixCallContext() { }
		public void copyFrom(PostixCallContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class MemberAccessPostfixExpressionContext extends PostixCallContext {
		public TerminalNode Identifier() { return getToken(CParser.Identifier, 0); }
		public TerminalNode Dot() { return getToken(CParser.Dot, 0); }
		public TerminalNode Arrow() { return getToken(CParser.Arrow, 0); }
		public MemberAccessPostfixExpressionContext(PostixCallContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterMemberAccessPostfixExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitMemberAccessPostfixExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitMemberAccessPostfixExpression(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ArrayAccessPostfixExpressionContext extends PostixCallContext {
		public TerminalNode LeftBracket() { return getToken(CParser.LeftBracket, 0); }
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode RightBracket() { return getToken(CParser.RightBracket, 0); }
		public ArrayAccessPostfixExpressionContext(PostixCallContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterArrayAccessPostfixExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitArrayAccessPostfixExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitArrayAccessPostfixExpression(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class FunctionCallPostfixExpressionContext extends PostixCallContext {
		public TerminalNode OPEN_PARENS() { return getToken(CParser.OPEN_PARENS, 0); }
		public TerminalNode CLOSE_PARENS() { return getToken(CParser.CLOSE_PARENS, 0); }
		public TerminalNode Comma() { return getToken(CParser.Comma, 0); }
		public ArgumentExpressionListContext argumentExpressionList() {
			return getRuleContext(ArgumentExpressionListContext.class,0);
		}
		public FunctionCallPostfixExpressionContext(PostixCallContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterFunctionCallPostfixExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitFunctionCallPostfixExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitFunctionCallPostfixExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PostixCallContext postixCall() throws RecognitionException {
		PostixCallContext _localctx = new PostixCallContext(_ctx, getState());
		enterRule(_localctx, 14, RULE_postixCall);
		int _la;
		try {
			setState(300);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case LeftBracket:
				_localctx = new ArrayAccessPostfixExpressionContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(286);
				match(LeftBracket);
				setState(287);
				expression();
				setState(288);
				match(RightBracket);
				}
				break;
			case OPEN_PARENS:
				_localctx = new FunctionCallPostfixExpressionContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(290);
				match(OPEN_PARENS);
				setState(292);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==Comma) {
					{
					setState(291);
					match(Comma);
					}
				}

				setState(295);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 9307948100751360L) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & 4323457566421037727L) != 0)) {
					{
					setState(294);
					argumentExpressionList();
					}
				}

				setState(297);
				match(CLOSE_PARENS);
				}
				break;
			case Arrow:
			case Dot:
				_localctx = new MemberAccessPostfixExpressionContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(298);
				_la = _input.LA(1);
				if ( !(_la==Arrow || _la==Dot) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(299);
				match(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 ArgumentExpressionListContext extends ParserRuleContext {
		public List assignmentExpression() {
			return getRuleContexts(AssignmentExpressionContext.class);
		}
		public AssignmentExpressionContext assignmentExpression(int i) {
			return getRuleContext(AssignmentExpressionContext.class,i);
		}
		public List Comma() { return getTokens(CParser.Comma); }
		public TerminalNode Comma(int i) {
			return getToken(CParser.Comma, i);
		}
		public ArgumentExpressionListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_argumentExpressionList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterArgumentExpressionList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitArgumentExpressionList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitArgumentExpressionList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ArgumentExpressionListContext argumentExpressionList() throws RecognitionException {
		ArgumentExpressionListContext _localctx = new ArgumentExpressionListContext(_ctx, getState());
		enterRule(_localctx, 16, RULE_argumentExpressionList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(302);
			assignmentExpression();
			setState(307);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==Comma) {
				{
				{
				setState(303);
				match(Comma);
				setState(304);
				assignmentExpression();
				}
				}
				setState(309);
				_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 UnaryExpressionContext extends ParserRuleContext {
		public PostfixExpressionContext postfixExpression() {
			return getRuleContext(PostfixExpressionContext.class,0);
		}
		public UnaryOperatorContext unaryOperator() {
			return getRuleContext(UnaryOperatorContext.class,0);
		}
		public CastExpressionContext castExpression() {
			return getRuleContext(CastExpressionContext.class,0);
		}
		public TerminalNode OPEN_PARENS() { return getToken(CParser.OPEN_PARENS, 0); }
		public TypeNameContext typeName() {
			return getRuleContext(TypeNameContext.class,0);
		}
		public TerminalNode CLOSE_PARENS() { return getToken(CParser.CLOSE_PARENS, 0); }
		public TerminalNode OP_AND() { return getToken(CParser.OP_AND, 0); }
		public TerminalNode Identifier() { return getToken(CParser.Identifier, 0); }
		public List Sizeof() { return getTokens(CParser.Sizeof); }
		public TerminalNode Sizeof(int i) {
			return getToken(CParser.Sizeof, i);
		}
		public TerminalNode Alignof() { return getToken(CParser.Alignof, 0); }
		public List PlusPlus() { return getTokens(CParser.PlusPlus); }
		public TerminalNode PlusPlus(int i) {
			return getToken(CParser.PlusPlus, i);
		}
		public List MinusMinus() { return getTokens(CParser.MinusMinus); }
		public TerminalNode MinusMinus(int i) {
			return getToken(CParser.MinusMinus, i);
		}
		public UnaryExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_unaryExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterUnaryExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitUnaryExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitUnaryExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final UnaryExpressionContext unaryExpression() throws RecognitionException {
		UnaryExpressionContext _localctx = new UnaryExpressionContext(_ctx, getState());
		enterRule(_localctx, 18, RULE_unaryExpression);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(313);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,17,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(310);
					_la = _input.LA(1);
					if ( !(((((_la - 33)) & ~0x3f) == 0 && ((1L << (_la - 33)) & 42949672961L) != 0)) ) {
					_errHandler.recoverInline(this);
					}
					else {
						if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
						_errHandler.reportMatch(this);
						consume();
					}
					}
					} 
				}
				setState(315);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,17,_ctx);
			}
			setState(327);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case Char:
			case Double:
			case Float:
			case Int:
			case Long:
			case Short:
			case Signed:
			case Static:
			case Unsigned:
			case Void:
			case Generic:
			case OPEN_PARENS:
			case Extenion:
			case EXT_BuiltinVaArg:
			case EXT_BuiltinOffsetof:
			case Identifier:
			case STRING:
			case Constant:
				{
				setState(316);
				postfixExpression();
				}
				break;
			case Plus:
			case Minus:
			case Star:
			case And:
			case Not:
			case Tilde:
				{
				setState(317);
				unaryOperator();
				setState(318);
				castExpression();
				}
				break;
			case Sizeof:
			case Alignof:
				{
				setState(320);
				_la = _input.LA(1);
				if ( !(_la==Sizeof || _la==Alignof) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(321);
				match(OPEN_PARENS);
				setState(322);
				typeName();
				setState(323);
				match(CLOSE_PARENS);
				}
				break;
			case OP_AND:
				{
				setState(325);
				match(OP_AND);
				setState(326);
				match(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 UnaryOperatorContext extends ParserRuleContext {
		public TerminalNode And() { return getToken(CParser.And, 0); }
		public TerminalNode Star() { return getToken(CParser.Star, 0); }
		public TerminalNode Plus() { return getToken(CParser.Plus, 0); }
		public TerminalNode Minus() { return getToken(CParser.Minus, 0); }
		public TerminalNode Tilde() { return getToken(CParser.Tilde, 0); }
		public TerminalNode Not() { return getToken(CParser.Not, 0); }
		public UnaryOperatorContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_unaryOperator; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterUnaryOperator(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitUnaryOperator(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitUnaryOperator(this);
			else return visitor.visitChildren(this);
		}
	}

	public final UnaryOperatorContext unaryOperator() throws RecognitionException {
		UnaryOperatorContext _localctx = new UnaryOperatorContext(_ctx, getState());
		enterRule(_localctx, 20, RULE_unaryOperator);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(329);
			_la = _input.LA(1);
			if ( !(((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & 12437L) != 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 CastExpressionContext extends ParserRuleContext {
		public TerminalNode OPEN_PARENS() { return getToken(CParser.OPEN_PARENS, 0); }
		public TypeNameContext typeName() {
			return getRuleContext(TypeNameContext.class,0);
		}
		public TerminalNode CLOSE_PARENS() { return getToken(CParser.CLOSE_PARENS, 0); }
		public CastExpressionContext castExpression() {
			return getRuleContext(CastExpressionContext.class,0);
		}
		public TerminalNode Extenion() { return getToken(CParser.Extenion, 0); }
		public UnaryExpressionContext unaryExpression() {
			return getRuleContext(UnaryExpressionContext.class,0);
		}
		public TerminalNode DigitSequence() { return getToken(CParser.DigitSequence, 0); }
		public CastExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_castExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterCastExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitCastExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitCastExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final CastExpressionContext castExpression() throws RecognitionException {
		CastExpressionContext _localctx = new CastExpressionContext(_ctx, getState());
		enterRule(_localctx, 22, RULE_castExpression);
		int _la;
		try {
			setState(341);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,20,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(332);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==Extenion) {
					{
					setState(331);
					match(Extenion);
					}
				}

				setState(334);
				match(OPEN_PARENS);
				setState(335);
				typeName();
				setState(336);
				match(CLOSE_PARENS);
				setState(337);
				castExpression();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(339);
				unaryExpression();
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(340);
				match(DigitSequence);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class MultiplicativeExpressionContext extends ParserRuleContext {
		public List castExpression() {
			return getRuleContexts(CastExpressionContext.class);
		}
		public CastExpressionContext castExpression(int i) {
			return getRuleContext(CastExpressionContext.class,i);
		}
		public List Star() { return getTokens(CParser.Star); }
		public TerminalNode Star(int i) {
			return getToken(CParser.Star, i);
		}
		public List Div() { return getTokens(CParser.Div); }
		public TerminalNode Div(int i) {
			return getToken(CParser.Div, i);
		}
		public List Mod() { return getTokens(CParser.Mod); }
		public TerminalNode Mod(int i) {
			return getToken(CParser.Mod, i);
		}
		public MultiplicativeExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_multiplicativeExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterMultiplicativeExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitMultiplicativeExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitMultiplicativeExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final MultiplicativeExpressionContext multiplicativeExpression() throws RecognitionException {
		MultiplicativeExpressionContext _localctx = new MultiplicativeExpressionContext(_ctx, getState());
		enterRule(_localctx, 24, RULE_multiplicativeExpression);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(343);
			castExpression();
			setState(348);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,21,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(344);
					_la = _input.LA(1);
					if ( !(((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & 7L) != 0)) ) {
					_errHandler.recoverInline(this);
					}
					else {
						if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
						_errHandler.reportMatch(this);
						consume();
					}
					setState(345);
					castExpression();
					}
					} 
				}
				setState(350);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,21,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class AdditiveExpressionContext extends ParserRuleContext {
		public List multiplicativeExpression() {
			return getRuleContexts(MultiplicativeExpressionContext.class);
		}
		public MultiplicativeExpressionContext multiplicativeExpression(int i) {
			return getRuleContext(MultiplicativeExpressionContext.class,i);
		}
		public List Minus() { return getTokens(CParser.Minus); }
		public TerminalNode Minus(int i) {
			return getToken(CParser.Minus, i);
		}
		public List Plus() { return getTokens(CParser.Plus); }
		public TerminalNode Plus(int i) {
			return getToken(CParser.Plus, i);
		}
		public AdditiveExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_additiveExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterAdditiveExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitAdditiveExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitAdditiveExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final AdditiveExpressionContext additiveExpression() throws RecognitionException {
		AdditiveExpressionContext _localctx = new AdditiveExpressionContext(_ctx, getState());
		enterRule(_localctx, 26, RULE_additiveExpression);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(351);
			multiplicativeExpression();
			setState(356);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,22,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(352);
					_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(353);
					multiplicativeExpression();
					}
					} 
				}
				setState(358);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,22,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ShiftExpressionContext extends ParserRuleContext {
		public List additiveExpression() {
			return getRuleContexts(AdditiveExpressionContext.class);
		}
		public AdditiveExpressionContext additiveExpression(int i) {
			return getRuleContext(AdditiveExpressionContext.class,i);
		}
		public List LeftShift() { return getTokens(CParser.LeftShift); }
		public TerminalNode LeftShift(int i) {
			return getToken(CParser.LeftShift, i);
		}
		public List RightShift() { return getTokens(CParser.RightShift); }
		public TerminalNode RightShift(int i) {
			return getToken(CParser.RightShift, i);
		}
		public ShiftExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_shiftExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterShiftExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitShiftExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitShiftExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ShiftExpressionContext shiftExpression() throws RecognitionException {
		ShiftExpressionContext _localctx = new ShiftExpressionContext(_ctx, getState());
		enterRule(_localctx, 28, RULE_shiftExpression);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(359);
			additiveExpression();
			setState(364);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==LeftShift || _la==RightShift) {
				{
				{
				setState(360);
				_la = _input.LA(1);
				if ( !(_la==LeftShift || _la==RightShift) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(361);
				additiveExpression();
				}
				}
				setState(366);
				_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 RelationalExpressionContext extends ParserRuleContext {
		public List shiftExpression() {
			return getRuleContexts(ShiftExpressionContext.class);
		}
		public ShiftExpressionContext shiftExpression(int i) {
			return getRuleContext(ShiftExpressionContext.class,i);
		}
		public List comparator() {
			return getRuleContexts(ComparatorContext.class);
		}
		public ComparatorContext comparator(int i) {
			return getRuleContext(ComparatorContext.class,i);
		}
		public RelationalExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_relationalExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterRelationalExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitRelationalExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitRelationalExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final RelationalExpressionContext relationalExpression() throws RecognitionException {
		RelationalExpressionContext _localctx = new RelationalExpressionContext(_ctx, getState());
		enterRule(_localctx, 30, RULE_relationalExpression);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(367);
			shiftExpression();
			setState(373);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 8646911284551352320L) != 0)) {
				{
				{
				{
				setState(368);
				comparator();
				}
				setState(369);
				shiftExpression();
				}
				}
				setState(375);
				_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 ComparatorContext extends ParserRuleContext {
		public TerminalNode Less() { return getToken(CParser.Less, 0); }
		public TerminalNode Greater() { return getToken(CParser.Greater, 0); }
		public TerminalNode LessEqual() { return getToken(CParser.LessEqual, 0); }
		public TerminalNode GreaterEqual() { return getToken(CParser.GreaterEqual, 0); }
		public ComparatorContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_comparator; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterComparator(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitComparator(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitComparator(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ComparatorContext comparator() throws RecognitionException {
		ComparatorContext _localctx = new ComparatorContext(_ctx, getState());
		enterRule(_localctx, 32, RULE_comparator);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(376);
			_la = _input.LA(1);
			if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 8646911284551352320L) != 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 EqualityExpressionContext extends ParserRuleContext {
		public List relationalExpression() {
			return getRuleContexts(RelationalExpressionContext.class);
		}
		public RelationalExpressionContext relationalExpression(int i) {
			return getRuleContext(RelationalExpressionContext.class,i);
		}
		public List Equal() { return getTokens(CParser.Equal); }
		public TerminalNode Equal(int i) {
			return getToken(CParser.Equal, i);
		}
		public List OP_NE() { return getTokens(CParser.OP_NE); }
		public TerminalNode OP_NE(int i) {
			return getToken(CParser.OP_NE, i);
		}
		public EqualityExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_equalityExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterEqualityExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitEqualityExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitEqualityExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final EqualityExpressionContext equalityExpression() throws RecognitionException {
		EqualityExpressionContext _localctx = new EqualityExpressionContext(_ctx, getState());
		enterRule(_localctx, 34, RULE_equalityExpression);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(378);
			relationalExpression();
			setState(383);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==Equal || _la==OP_NE) {
				{
				{
				setState(379);
				_la = _input.LA(1);
				if ( !(_la==Equal || _la==OP_NE) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(380);
				relationalExpression();
				}
				}
				setState(385);
				_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 AndExpressionContext extends ParserRuleContext {
		public List equalityExpression() {
			return getRuleContexts(EqualityExpressionContext.class);
		}
		public EqualityExpressionContext equalityExpression(int i) {
			return getRuleContext(EqualityExpressionContext.class,i);
		}
		public List And() { return getTokens(CParser.And); }
		public TerminalNode And(int i) {
			return getToken(CParser.And, i);
		}
		public AndExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_andExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterAndExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitAndExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitAndExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final AndExpressionContext andExpression() throws RecognitionException {
		AndExpressionContext _localctx = new AndExpressionContext(_ctx, getState());
		enterRule(_localctx, 36, RULE_andExpression);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(386);
			equalityExpression();
			setState(391);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,26,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(387);
					match(And);
					setState(388);
					equalityExpression();
					}
					} 
				}
				setState(393);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,26,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ExclusiveOrExpressionContext extends ParserRuleContext {
		public List andExpression() {
			return getRuleContexts(AndExpressionContext.class);
		}
		public AndExpressionContext andExpression(int i) {
			return getRuleContext(AndExpressionContext.class,i);
		}
		public List Caret() { return getTokens(CParser.Caret); }
		public TerminalNode Caret(int i) {
			return getToken(CParser.Caret, i);
		}
		public ExclusiveOrExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_exclusiveOrExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterExclusiveOrExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitExclusiveOrExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitExclusiveOrExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ExclusiveOrExpressionContext exclusiveOrExpression() throws RecognitionException {
		ExclusiveOrExpressionContext _localctx = new ExclusiveOrExpressionContext(_ctx, getState());
		enterRule(_localctx, 38, RULE_exclusiveOrExpression);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(394);
			andExpression();
			setState(399);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==Caret) {
				{
				{
				setState(395);
				match(Caret);
				setState(396);
				andExpression();
				}
				}
				setState(401);
				_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 InclusiveOrExpressionContext extends ParserRuleContext {
		public List exclusiveOrExpression() {
			return getRuleContexts(ExclusiveOrExpressionContext.class);
		}
		public ExclusiveOrExpressionContext exclusiveOrExpression(int i) {
			return getRuleContext(ExclusiveOrExpressionContext.class,i);
		}
		public List Or() { return getTokens(CParser.Or); }
		public TerminalNode Or(int i) {
			return getToken(CParser.Or, i);
		}
		public InclusiveOrExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_inclusiveOrExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterInclusiveOrExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitInclusiveOrExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitInclusiveOrExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final InclusiveOrExpressionContext inclusiveOrExpression() throws RecognitionException {
		InclusiveOrExpressionContext _localctx = new InclusiveOrExpressionContext(_ctx, getState());
		enterRule(_localctx, 40, RULE_inclusiveOrExpression);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(402);
			exclusiveOrExpression();
			setState(407);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==Or) {
				{
				{
				setState(403);
				match(Or);
				setState(404);
				exclusiveOrExpression();
				}
				}
				setState(409);
				_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 LogicalAndExpressionContext extends ParserRuleContext {
		public List inclusiveOrExpression() {
			return getRuleContexts(InclusiveOrExpressionContext.class);
		}
		public InclusiveOrExpressionContext inclusiveOrExpression(int i) {
			return getRuleContext(InclusiveOrExpressionContext.class,i);
		}
		public List OP_AND() { return getTokens(CParser.OP_AND); }
		public TerminalNode OP_AND(int i) {
			return getToken(CParser.OP_AND, i);
		}
		public LogicalAndExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_logicalAndExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterLogicalAndExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitLogicalAndExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitLogicalAndExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final LogicalAndExpressionContext logicalAndExpression() throws RecognitionException {
		LogicalAndExpressionContext _localctx = new LogicalAndExpressionContext(_ctx, getState());
		enterRule(_localctx, 42, RULE_logicalAndExpression);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(410);
			inclusiveOrExpression();
			setState(415);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,29,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(411);
					match(OP_AND);
					setState(412);
					inclusiveOrExpression();
					}
					} 
				}
				setState(417);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,29,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class LogicalOrExpressionContext extends ParserRuleContext {
		public List logicalAndExpression() {
			return getRuleContexts(LogicalAndExpressionContext.class);
		}
		public LogicalAndExpressionContext logicalAndExpression(int i) {
			return getRuleContext(LogicalAndExpressionContext.class,i);
		}
		public List OP_OR() { return getTokens(CParser.OP_OR); }
		public TerminalNode OP_OR(int i) {
			return getToken(CParser.OP_OR, i);
		}
		public LogicalOrExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_logicalOrExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterLogicalOrExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitLogicalOrExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitLogicalOrExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final LogicalOrExpressionContext logicalOrExpression() throws RecognitionException {
		LogicalOrExpressionContext _localctx = new LogicalOrExpressionContext(_ctx, getState());
		enterRule(_localctx, 44, RULE_logicalOrExpression);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(418);
			logicalAndExpression();
			setState(423);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==OP_OR) {
				{
				{
				setState(419);
				match(OP_OR);
				setState(420);
				logicalAndExpression();
				}
				}
				setState(425);
				_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 ConditionalExpressionContext extends ParserRuleContext {
		public LogicalOrExpressionContext logicalOrExpression() {
			return getRuleContext(LogicalOrExpressionContext.class,0);
		}
		public TerminalNode Question() { return getToken(CParser.Question, 0); }
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode Colon() { return getToken(CParser.Colon, 0); }
		public ConditionalExpressionContext conditionalExpression() {
			return getRuleContext(ConditionalExpressionContext.class,0);
		}
		public ConditionalExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_conditionalExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterConditionalExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitConditionalExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitConditionalExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ConditionalExpressionContext conditionalExpression() throws RecognitionException {
		ConditionalExpressionContext _localctx = new ConditionalExpressionContext(_ctx, getState());
		enterRule(_localctx, 46, RULE_conditionalExpression);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(426);
			logicalOrExpression();
			setState(432);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==Question) {
				{
				setState(427);
				match(Question);
				setState(428);
				expression();
				setState(429);
				match(Colon);
				setState(430);
				conditionalExpression();
				}
			}

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

	@SuppressWarnings("CheckReturnValue")
	public static class AssignmentExpressionContext extends ParserRuleContext {
		public ConditionalExpressionContext conditionalExpression() {
			return getRuleContext(ConditionalExpressionContext.class,0);
		}
		public UnaryExpressionContext unaryExpression() {
			return getRuleContext(UnaryExpressionContext.class,0);
		}
		public AssignmentOperatorContext assignmentOperator() {
			return getRuleContext(AssignmentOperatorContext.class,0);
		}
		public AssignmentExpressionContext assignmentExpression() {
			return getRuleContext(AssignmentExpressionContext.class,0);
		}
		public TerminalNode DigitSequence() { return getToken(CParser.DigitSequence, 0); }
		public AssignmentExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_assignmentExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterAssignmentExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitAssignmentExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitAssignmentExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final AssignmentExpressionContext assignmentExpression() throws RecognitionException {
		AssignmentExpressionContext _localctx = new AssignmentExpressionContext(_ctx, getState());
		enterRule(_localctx, 48, RULE_assignmentExpression);
		try {
			setState(440);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,32,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(434);
				conditionalExpression();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(435);
				unaryExpression();
				setState(436);
				assignmentOperator();
				setState(437);
				assignmentExpression();
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(439);
				match(DigitSequence);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class AssignmentOperatorContext extends ParserRuleContext {
		public TerminalNode OP_EQ() { return getToken(CParser.OP_EQ, 0); }
		public TerminalNode StarAssign() { return getToken(CParser.StarAssign, 0); }
		public TerminalNode DivAssign() { return getToken(CParser.DivAssign, 0); }
		public TerminalNode ModAssign() { return getToken(CParser.ModAssign, 0); }
		public TerminalNode PlusAssign() { return getToken(CParser.PlusAssign, 0); }
		public TerminalNode MinusAssign() { return getToken(CParser.MinusAssign, 0); }
		public TerminalNode LeftShiftAssign() { return getToken(CParser.LeftShiftAssign, 0); }
		public TerminalNode RightShiftAssign() { return getToken(CParser.RightShiftAssign, 0); }
		public TerminalNode AndAssign() { return getToken(CParser.AndAssign, 0); }
		public TerminalNode XorAssign() { return getToken(CParser.XorAssign, 0); }
		public TerminalNode OrAssign() { return getToken(CParser.OrAssign, 0); }
		public AssignmentOperatorContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_assignmentOperator; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterAssignmentOperator(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitAssignmentOperator(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitAssignmentOperator(this);
			else return visitor.visitChildren(this);
		}
	}

	public final AssignmentOperatorContext assignmentOperator() throws RecognitionException {
		AssignmentOperatorContext _localctx = new AssignmentOperatorContext(_ctx, getState());
		enterRule(_localctx, 50, RULE_assignmentOperator);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(442);
			_la = _input.LA(1);
			if ( !(((((_la - 83)) & ~0x3f) == 0 && ((1L << (_la - 83)) & 2047L) != 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 ExpressionContext extends ParserRuleContext {
		public List assignmentExpression() {
			return getRuleContexts(AssignmentExpressionContext.class);
		}
		public AssignmentExpressionContext assignmentExpression(int i) {
			return getRuleContext(AssignmentExpressionContext.class,i);
		}
		public List Comma() { return getTokens(CParser.Comma); }
		public TerminalNode Comma(int i) {
			return getToken(CParser.Comma, i);
		}
		public ExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_expression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ExpressionContext expression() throws RecognitionException {
		ExpressionContext _localctx = new ExpressionContext(_ctx, getState());
		enterRule(_localctx, 52, RULE_expression);
		try {
			int _alt;
			setState(453);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case Char:
			case Double:
			case Float:
			case Int:
			case Long:
			case Short:
			case Signed:
			case Sizeof:
			case Static:
			case Unsigned:
			case Void:
			case Alignof:
			case Generic:
			case OPEN_PARENS:
			case Plus:
			case PlusPlus:
			case Minus:
			case MinusMinus:
			case Star:
			case And:
			case OP_AND:
			case Not:
			case Tilde:
			case Extenion:
			case EXT_BuiltinVaArg:
			case EXT_BuiltinOffsetof:
			case Identifier:
			case DigitSequence:
			case STRING:
			case Constant:
				enterOuterAlt(_localctx, 1);
				{
				setState(444);
				assignmentExpression();
				setState(449);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,33,_ctx);
				while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
					if ( _alt==1 ) {
						{
						{
						setState(445);
						match(Comma);
						setState(446);
						assignmentExpression();
						}
						} 
					}
					setState(451);
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,33,_ctx);
				}
				}
				break;
			case Comma:
				enterOuterAlt(_localctx, 2);
				{
				setState(452);
				match(Comma);
				}
				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 ConstantExpressionContext extends ParserRuleContext {
		public ConditionalExpressionContext conditionalExpression() {
			return getRuleContext(ConditionalExpressionContext.class,0);
		}
		public ConstantExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_constantExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterConstantExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitConstantExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitConstantExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ConstantExpressionContext constantExpression() throws RecognitionException {
		ConstantExpressionContext _localctx = new ConstantExpressionContext(_ctx, getState());
		enterRule(_localctx, 54, RULE_constantExpression);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(455);
			conditionalExpression();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class DeclarationContext extends ParserRuleContext {
		public TerminalNode Semi() { return getToken(CParser.Semi, 0); }
		public TerminalNode Static() { return getToken(CParser.Static, 0); }
		public List declarationSpecifier() {
			return getRuleContexts(DeclarationSpecifierContext.class);
		}
		public DeclarationSpecifierContext declarationSpecifier(int i) {
			return getRuleContext(DeclarationSpecifierContext.class,i);
		}
		public InitDeclaratorListContext initDeclaratorList() {
			return getRuleContext(InitDeclaratorListContext.class,0);
		}
		public StaticAssertDeclarationContext staticAssertDeclaration() {
			return getRuleContext(StaticAssertDeclarationContext.class,0);
		}
		public DeclarationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_declaration; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterDeclaration(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitDeclaration(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitDeclaration(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DeclarationContext declaration() throws RecognitionException {
		DeclarationContext _localctx = new DeclarationContext(_ctx, getState());
		enterRule(_localctx, 56, RULE_declaration);
		int _la;
		try {
			int _alt;
			setState(471);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case Auto:
			case Char:
			case Const:
			case Double:
			case Enum:
			case Extern:
			case Float:
			case Inline:
			case Int:
			case Long:
			case Register:
			case Restrict:
			case Short:
			case Signed:
			case Static:
			case Struct:
			case Typedef:
			case Union:
			case Unsigned:
			case Void:
			case Volatile:
			case Alignas:
			case Atomic:
			case Bool:
			case Complex:
			case Generic:
			case Noreturn:
			case ThreadLocal:
			case OPEN_PARENS:
			case Extenion:
			case EXT_BuiltinVaArg:
			case EXT_BuiltinOffsetof:
			case EXT_M128:
			case EXT_M128d:
			case EXT_M128i:
			case EXT_Typeof:
			case EXT_Inline:
			case EXT_Stdcall:
			case EXT_Declspec:
			case EXT_Attribute:
			case Identifier:
			case STRING:
			case Constant:
				enterOuterAlt(_localctx, 1);
				{
				setState(458);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,35,_ctx) ) {
				case 1:
					{
					setState(457);
					match(Static);
					}
					break;
				}
				setState(461); 
				_errHandler.sync(this);
				_alt = 1;
				do {
					switch (_alt) {
					case 1:
						{
						{
						setState(460);
						declarationSpecifier();
						}
						}
						break;
					default:
						throw new NoViableAltException(this);
					}
					setState(463); 
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,36,_ctx);
				} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
				setState(466);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==OPEN_PARENS || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & 19113910137258113L) != 0)) {
					{
					setState(465);
					initDeclaratorList();
					}
				}

				setState(468);
				match(Semi);
				}
				break;
			case StaticAssert:
				enterOuterAlt(_localctx, 2);
				{
				setState(470);
				staticAssertDeclaration();
				}
				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 DeclarationSpecifierContext extends ParserRuleContext {
		public StorageClassSpecifierContext storageClassSpecifier() {
			return getRuleContext(StorageClassSpecifierContext.class,0);
		}
		public TypeSpecifierContext typeSpecifier() {
			return getRuleContext(TypeSpecifierContext.class,0);
		}
		public TypeQualifierContext typeQualifier() {
			return getRuleContext(TypeQualifierContext.class,0);
		}
		public FunctionSpecifierContext functionSpecifier() {
			return getRuleContext(FunctionSpecifierContext.class,0);
		}
		public AlignmentSpecifierContext alignmentSpecifier() {
			return getRuleContext(AlignmentSpecifierContext.class,0);
		}
		public DeclarationSpecifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_declarationSpecifier; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterDeclarationSpecifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitDeclarationSpecifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitDeclarationSpecifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DeclarationSpecifierContext declarationSpecifier() throws RecognitionException {
		DeclarationSpecifierContext _localctx = new DeclarationSpecifierContext(_ctx, getState());
		enterRule(_localctx, 58, RULE_declarationSpecifier);
		try {
			setState(478);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,39,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(473);
				storageClassSpecifier();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(474);
				typeSpecifier();
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(475);
				typeQualifier();
				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(476);
				functionSpecifier();
				}
				break;
			case 5:
				enterOuterAlt(_localctx, 5);
				{
				setState(477);
				alignmentSpecifier();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class InitDeclaratorListContext extends ParserRuleContext {
		public List initDeclarator() {
			return getRuleContexts(InitDeclaratorContext.class);
		}
		public InitDeclaratorContext initDeclarator(int i) {
			return getRuleContext(InitDeclaratorContext.class,i);
		}
		public List Comma() { return getTokens(CParser.Comma); }
		public TerminalNode Comma(int i) {
			return getToken(CParser.Comma, i);
		}
		public InitDeclaratorListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_initDeclaratorList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterInitDeclaratorList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitInitDeclaratorList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitInitDeclaratorList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final InitDeclaratorListContext initDeclaratorList() throws RecognitionException {
		InitDeclaratorListContext _localctx = new InitDeclaratorListContext(_ctx, getState());
		enterRule(_localctx, 60, RULE_initDeclaratorList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(480);
			initDeclarator();
			setState(485);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==Comma) {
				{
				{
				setState(481);
				match(Comma);
				setState(482);
				initDeclarator();
				}
				}
				setState(487);
				_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 InitDeclaratorContext extends ParserRuleContext {
		public DeclaratorContext declarator() {
			return getRuleContext(DeclaratorContext.class,0);
		}
		public TerminalNode OP_EQ() { return getToken(CParser.OP_EQ, 0); }
		public InitializerContext initializer() {
			return getRuleContext(InitializerContext.class,0);
		}
		public InitDeclaratorContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_initDeclarator; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterInitDeclarator(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitInitDeclarator(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitInitDeclarator(this);
			else return visitor.visitChildren(this);
		}
	}

	public final InitDeclaratorContext initDeclarator() throws RecognitionException {
		InitDeclaratorContext _localctx = new InitDeclaratorContext(_ctx, getState());
		enterRule(_localctx, 62, RULE_initDeclarator);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(488);
			declarator();
			setState(491);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==OP_EQ) {
				{
				setState(489);
				match(OP_EQ);
				setState(490);
				initializer();
				}
			}

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

	@SuppressWarnings("CheckReturnValue")
	public static class StorageClassSpecifierContext extends ParserRuleContext {
		public TerminalNode Typedef() { return getToken(CParser.Typedef, 0); }
		public TerminalNode Extern() { return getToken(CParser.Extern, 0); }
		public TerminalNode Static() { return getToken(CParser.Static, 0); }
		public TerminalNode ThreadLocal() { return getToken(CParser.ThreadLocal, 0); }
		public TerminalNode Auto() { return getToken(CParser.Auto, 0); }
		public TerminalNode Register() { return getToken(CParser.Register, 0); }
		public StorageClassSpecifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_storageClassSpecifier; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterStorageClassSpecifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitStorageClassSpecifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitStorageClassSpecifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final StorageClassSpecifierContext storageClassSpecifier() throws RecognitionException {
		StorageClassSpecifierContext _localctx = new StorageClassSpecifierContext(_ctx, getState());
		enterRule(_localctx, 64, RULE_storageClassSpecifier);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(493);
			_la = _input.LA(1);
			if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 4503754515677696L) != 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 TypeSpecifierContext extends ParserRuleContext {
		public TerminalNode Void() { return getToken(CParser.Void, 0); }
		public TerminalNode Char() { return getToken(CParser.Char, 0); }
		public TerminalNode Short() { return getToken(CParser.Short, 0); }
		public TerminalNode Int() { return getToken(CParser.Int, 0); }
		public TerminalNode Long() { return getToken(CParser.Long, 0); }
		public TerminalNode Float() { return getToken(CParser.Float, 0); }
		public TerminalNode Double() { return getToken(CParser.Double, 0); }
		public TerminalNode Signed() { return getToken(CParser.Signed, 0); }
		public TerminalNode Unsigned() { return getToken(CParser.Unsigned, 0); }
		public TerminalNode Bool() { return getToken(CParser.Bool, 0); }
		public TerminalNode Complex() { return getToken(CParser.Complex, 0); }
		public TerminalNode EXT_M128() { return getToken(CParser.EXT_M128, 0); }
		public TerminalNode EXT_M128d() { return getToken(CParser.EXT_M128d, 0); }
		public TerminalNode EXT_M128i() { return getToken(CParser.EXT_M128i, 0); }
		public TerminalNode Extenion() { return getToken(CParser.Extenion, 0); }
		public TerminalNode OPEN_PARENS() { return getToken(CParser.OPEN_PARENS, 0); }
		public TerminalNode CLOSE_PARENS() { return getToken(CParser.CLOSE_PARENS, 0); }
		public AtomicTypeSpecifierContext atomicTypeSpecifier() {
			return getRuleContext(AtomicTypeSpecifierContext.class,0);
		}
		public StructOrUnionSpecifierContext structOrUnionSpecifier() {
			return getRuleContext(StructOrUnionSpecifierContext.class,0);
		}
		public EnumSpecifierContext enumSpecifier() {
			return getRuleContext(EnumSpecifierContext.class,0);
		}
		public TypedefNameContext typedefName() {
			return getRuleContext(TypedefNameContext.class,0);
		}
		public TerminalNode EXT_Typeof() { return getToken(CParser.EXT_Typeof, 0); }
		public ConstantExpressionContext constantExpression() {
			return getRuleContext(ConstantExpressionContext.class,0);
		}
		public PostfixExpressionContext postfixExpression() {
			return getRuleContext(PostfixExpressionContext.class,0);
		}
		public TypeSpecifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_typeSpecifier; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterTypeSpecifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitTypeSpecifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitTypeSpecifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TypeSpecifierContext typeSpecifier() throws RecognitionException {
		TypeSpecifierContext _localctx = new TypeSpecifierContext(_ctx, getState());
		enterRule(_localctx, 66, RULE_typeSpecifier);
		int _la;
		try {
			setState(523);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,42,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(495);
				match(Void);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(496);
				match(Char);
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(497);
				match(Short);
				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(498);
				match(Int);
				}
				break;
			case 5:
				enterOuterAlt(_localctx, 5);
				{
				setState(499);
				match(Long);
				}
				break;
			case 6:
				enterOuterAlt(_localctx, 6);
				{
				setState(500);
				match(Float);
				}
				break;
			case 7:
				enterOuterAlt(_localctx, 7);
				{
				setState(501);
				match(Double);
				}
				break;
			case 8:
				enterOuterAlt(_localctx, 8);
				{
				setState(502);
				match(Signed);
				}
				break;
			case 9:
				enterOuterAlt(_localctx, 9);
				{
				setState(503);
				match(Unsigned);
				}
				break;
			case 10:
				enterOuterAlt(_localctx, 10);
				{
				setState(504);
				match(Bool);
				}
				break;
			case 11:
				enterOuterAlt(_localctx, 11);
				{
				setState(505);
				match(Complex);
				}
				break;
			case 12:
				enterOuterAlt(_localctx, 12);
				{
				setState(506);
				match(EXT_M128);
				}
				break;
			case 13:
				enterOuterAlt(_localctx, 13);
				{
				setState(507);
				match(EXT_M128d);
				}
				break;
			case 14:
				enterOuterAlt(_localctx, 14);
				{
				setState(508);
				match(EXT_M128i);
				}
				break;
			case 15:
				enterOuterAlt(_localctx, 15);
				{
				setState(509);
				match(Extenion);
				setState(510);
				match(OPEN_PARENS);
				setState(511);
				_la = _input.LA(1);
				if ( !(((((_la - 107)) & ~0x3f) == 0 && ((1L << (_la - 107)) & 7L) != 0)) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(512);
				match(CLOSE_PARENS);
				}
				break;
			case 16:
				enterOuterAlt(_localctx, 16);
				{
				setState(513);
				atomicTypeSpecifier();
				}
				break;
			case 17:
				enterOuterAlt(_localctx, 17);
				{
				setState(514);
				structOrUnionSpecifier();
				}
				break;
			case 18:
				enterOuterAlt(_localctx, 18);
				{
				setState(515);
				enumSpecifier();
				}
				break;
			case 19:
				enterOuterAlt(_localctx, 19);
				{
				setState(516);
				typedefName();
				}
				break;
			case 20:
				enterOuterAlt(_localctx, 20);
				{
				setState(517);
				match(EXT_Typeof);
				setState(518);
				match(OPEN_PARENS);
				setState(519);
				constantExpression();
				setState(520);
				match(CLOSE_PARENS);
				}
				break;
			case 21:
				enterOuterAlt(_localctx, 21);
				{
				setState(522);
				postfixExpression();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class StructOrUnionSpecifierContext extends ParserRuleContext {
		public StructOrUnionContext structOrUnion() {
			return getRuleContext(StructOrUnionContext.class,0);
		}
		public TerminalNode LeftBrace() { return getToken(CParser.LeftBrace, 0); }
		public StructDeclarationListContext structDeclarationList() {
			return getRuleContext(StructDeclarationListContext.class,0);
		}
		public TerminalNode RightBrace() { return getToken(CParser.RightBrace, 0); }
		public TerminalNode Identifier() { return getToken(CParser.Identifier, 0); }
		public StructOrUnionSpecifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_structOrUnionSpecifier; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterStructOrUnionSpecifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitStructOrUnionSpecifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitStructOrUnionSpecifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final StructOrUnionSpecifierContext structOrUnionSpecifier() throws RecognitionException {
		StructOrUnionSpecifierContext _localctx = new StructOrUnionSpecifierContext(_ctx, getState());
		enterRule(_localctx, 68, RULE_structOrUnionSpecifier);
		int _la;
		try {
			setState(536);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,44,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(525);
				structOrUnion();
				setState(527);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==Identifier) {
					{
					setState(526);
					match(Identifier);
					}
				}

				setState(529);
				match(LeftBrace);
				setState(530);
				structDeclarationList();
				setState(531);
				match(RightBrace);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(533);
				structOrUnion();
				setState(534);
				match(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 StructOrUnionContext extends ParserRuleContext {
		public TerminalNode Struct() { return getToken(CParser.Struct, 0); }
		public TerminalNode Union() { return getToken(CParser.Union, 0); }
		public StructOrUnionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_structOrUnion; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterStructOrUnion(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitStructOrUnion(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitStructOrUnion(this);
			else return visitor.visitChildren(this);
		}
	}

	public final StructOrUnionContext structOrUnion() throws RecognitionException {
		StructOrUnionContext _localctx = new StructOrUnionContext(_ctx, getState());
		enterRule(_localctx, 70, RULE_structOrUnion);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(538);
			_la = _input.LA(1);
			if ( !(_la==Struct || _la==Union) ) {
			_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 StructDeclarationListContext extends ParserRuleContext {
		public List structDeclaration() {
			return getRuleContexts(StructDeclarationContext.class);
		}
		public StructDeclarationContext structDeclaration(int i) {
			return getRuleContext(StructDeclarationContext.class,i);
		}
		public StructDeclarationListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_structDeclarationList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterStructDeclarationList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitStructDeclarationList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitStructDeclarationList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final StructDeclarationListContext structDeclarationList() throws RecognitionException {
		StructDeclarationListContext _localctx = new StructDeclarationListContext(_ctx, getState());
		enterRule(_localctx, 72, RULE_structDeclarationList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(541); 
			_errHandler.sync(this);
			_la = _input.LA(1);
			do {
				{
				{
				setState(540);
				structDeclaration();
				}
				}
				setState(543); 
				_errHandler.sync(this);
				_la = _input.LA(1);
			} while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & 11790946541383680L) != 0) || ((((_la - 103)) & ~0x3f) == 0 && ((1L << (_la - 103)) & 13631735L) != 0) );
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class StructDeclarationContext extends ParserRuleContext {
		public SpecifierQualifierListContext specifierQualifierList() {
			return getRuleContext(SpecifierQualifierListContext.class,0);
		}
		public TerminalNode Semi() { return getToken(CParser.Semi, 0); }
		public StructDeclaratorListContext structDeclaratorList() {
			return getRuleContext(StructDeclaratorListContext.class,0);
		}
		public StaticAssertDeclarationContext staticAssertDeclaration() {
			return getRuleContext(StaticAssertDeclarationContext.class,0);
		}
		public StructDeclarationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_structDeclaration; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterStructDeclaration(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitStructDeclaration(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitStructDeclaration(this);
			else return visitor.visitChildren(this);
		}
	}

	public final StructDeclarationContext structDeclaration() throws RecognitionException {
		StructDeclarationContext _localctx = new StructDeclarationContext(_ctx, getState());
		enterRule(_localctx, 74, RULE_structDeclaration);
		int _la;
		try {
			setState(552);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case Char:
			case Const:
			case Double:
			case Enum:
			case Float:
			case Int:
			case Long:
			case Restrict:
			case Short:
			case Signed:
			case Static:
			case Struct:
			case Union:
			case Unsigned:
			case Void:
			case Volatile:
			case Atomic:
			case Bool:
			case Complex:
			case Generic:
			case OPEN_PARENS:
			case Extenion:
			case EXT_BuiltinVaArg:
			case EXT_BuiltinOffsetof:
			case EXT_M128:
			case EXT_M128d:
			case EXT_M128i:
			case EXT_Typeof:
			case Identifier:
			case STRING:
			case Constant:
				enterOuterAlt(_localctx, 1);
				{
				setState(545);
				specifierQualifierList();
				setState(547);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==OPEN_PARENS || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & 19113910137260161L) != 0)) {
					{
					setState(546);
					structDeclaratorList();
					}
				}

				setState(549);
				match(Semi);
				}
				break;
			case StaticAssert:
				enterOuterAlt(_localctx, 2);
				{
				setState(551);
				staticAssertDeclaration();
				}
				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 SpecifierQualifierListContext extends ParserRuleContext {
		public TypeSpecifierContext typeSpecifier() {
			return getRuleContext(TypeSpecifierContext.class,0);
		}
		public TypeQualifierContext typeQualifier() {
			return getRuleContext(TypeQualifierContext.class,0);
		}
		public SpecifierQualifierListContext specifierQualifierList() {
			return getRuleContext(SpecifierQualifierListContext.class,0);
		}
		public SpecifierQualifierListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_specifierQualifierList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterSpecifierQualifierList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitSpecifierQualifierList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitSpecifierQualifierList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SpecifierQualifierListContext specifierQualifierList() throws RecognitionException {
		SpecifierQualifierListContext _localctx = new SpecifierQualifierListContext(_ctx, getState());
		enterRule(_localctx, 76, RULE_specifierQualifierList);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(556);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,48,_ctx) ) {
			case 1:
				{
				setState(554);
				typeSpecifier();
				}
				break;
			case 2:
				{
				setState(555);
				typeQualifier();
				}
				break;
			}
			setState(559);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,49,_ctx) ) {
			case 1:
				{
				setState(558);
				specifierQualifierList();
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class StructDeclaratorListContext extends ParserRuleContext {
		public List structDeclarator() {
			return getRuleContexts(StructDeclaratorContext.class);
		}
		public StructDeclaratorContext structDeclarator(int i) {
			return getRuleContext(StructDeclaratorContext.class,i);
		}
		public List Comma() { return getTokens(CParser.Comma); }
		public TerminalNode Comma(int i) {
			return getToken(CParser.Comma, i);
		}
		public StructDeclaratorListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_structDeclaratorList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterStructDeclaratorList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitStructDeclaratorList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitStructDeclaratorList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final StructDeclaratorListContext structDeclaratorList() throws RecognitionException {
		StructDeclaratorListContext _localctx = new StructDeclaratorListContext(_ctx, getState());
		enterRule(_localctx, 78, RULE_structDeclaratorList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(561);
			structDeclarator();
			setState(566);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==Comma) {
				{
				{
				setState(562);
				match(Comma);
				setState(563);
				structDeclarator();
				}
				}
				setState(568);
				_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 StructDeclaratorContext extends ParserRuleContext {
		public DeclaratorContext declarator() {
			return getRuleContext(DeclaratorContext.class,0);
		}
		public TerminalNode Colon() { return getToken(CParser.Colon, 0); }
		public ConstantExpressionContext constantExpression() {
			return getRuleContext(ConstantExpressionContext.class,0);
		}
		public StructDeclaratorContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_structDeclarator; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterStructDeclarator(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitStructDeclarator(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitStructDeclarator(this);
			else return visitor.visitChildren(this);
		}
	}

	public final StructDeclaratorContext structDeclarator() throws RecognitionException {
		StructDeclaratorContext _localctx = new StructDeclaratorContext(_ctx, getState());
		enterRule(_localctx, 80, RULE_structDeclarator);
		int _la;
		try {
			setState(575);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,52,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(569);
				declarator();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(571);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==OPEN_PARENS || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & 19113910137258113L) != 0)) {
					{
					setState(570);
					declarator();
					}
				}

				setState(573);
				match(Colon);
				setState(574);
				constantExpression();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class EnumSpecifierContext extends ParserRuleContext {
		public TerminalNode Enum() { return getToken(CParser.Enum, 0); }
		public TerminalNode LeftBrace() { return getToken(CParser.LeftBrace, 0); }
		public EnumeratorListContext enumeratorList() {
			return getRuleContext(EnumeratorListContext.class,0);
		}
		public TerminalNode RightBrace() { return getToken(CParser.RightBrace, 0); }
		public TerminalNode Identifier() { return getToken(CParser.Identifier, 0); }
		public TerminalNode Comma() { return getToken(CParser.Comma, 0); }
		public EnumSpecifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_enumSpecifier; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterEnumSpecifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitEnumSpecifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitEnumSpecifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final EnumSpecifierContext enumSpecifier() throws RecognitionException {
		EnumSpecifierContext _localctx = new EnumSpecifierContext(_ctx, getState());
		enterRule(_localctx, 82, RULE_enumSpecifier);
		int _la;
		try {
			setState(590);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,55,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(577);
				match(Enum);
				setState(579);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==Identifier) {
					{
					setState(578);
					match(Identifier);
					}
				}

				setState(581);
				match(LeftBrace);
				setState(582);
				enumeratorList();
				setState(584);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==Comma) {
					{
					setState(583);
					match(Comma);
					}
				}

				setState(586);
				match(RightBrace);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(588);
				match(Enum);
				setState(589);
				match(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 EnumeratorListContext extends ParserRuleContext {
		public List enumerator() {
			return getRuleContexts(EnumeratorContext.class);
		}
		public EnumeratorContext enumerator(int i) {
			return getRuleContext(EnumeratorContext.class,i);
		}
		public List Comma() { return getTokens(CParser.Comma); }
		public TerminalNode Comma(int i) {
			return getToken(CParser.Comma, i);
		}
		public EnumeratorListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_enumeratorList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterEnumeratorList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitEnumeratorList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitEnumeratorList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final EnumeratorListContext enumeratorList() throws RecognitionException {
		EnumeratorListContext _localctx = new EnumeratorListContext(_ctx, getState());
		enterRule(_localctx, 84, RULE_enumeratorList);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(592);
			enumerator();
			setState(597);
			_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 ) {
					{
					{
					setState(593);
					match(Comma);
					setState(594);
					enumerator();
					}
					} 
				}
				setState(599);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,56,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class EnumeratorContext extends ParserRuleContext {
		public EnumerationConstantContext enumerationConstant() {
			return getRuleContext(EnumerationConstantContext.class,0);
		}
		public TerminalNode OP_EQ() { return getToken(CParser.OP_EQ, 0); }
		public ConstantExpressionContext constantExpression() {
			return getRuleContext(ConstantExpressionContext.class,0);
		}
		public EnumeratorContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_enumerator; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterEnumerator(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitEnumerator(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitEnumerator(this);
			else return visitor.visitChildren(this);
		}
	}

	public final EnumeratorContext enumerator() throws RecognitionException {
		EnumeratorContext _localctx = new EnumeratorContext(_ctx, getState());
		enterRule(_localctx, 86, RULE_enumerator);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(600);
			enumerationConstant();
			setState(603);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==OP_EQ) {
				{
				setState(601);
				match(OP_EQ);
				setState(602);
				constantExpression();
				}
			}

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

	@SuppressWarnings("CheckReturnValue")
	public static class EnumerationConstantContext extends ParserRuleContext {
		public TerminalNode Identifier() { return getToken(CParser.Identifier, 0); }
		public EnumerationConstantContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_enumerationConstant; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterEnumerationConstant(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitEnumerationConstant(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitEnumerationConstant(this);
			else return visitor.visitChildren(this);
		}
	}

	public final EnumerationConstantContext enumerationConstant() throws RecognitionException {
		EnumerationConstantContext _localctx = new EnumerationConstantContext(_ctx, getState());
		enterRule(_localctx, 88, RULE_enumerationConstant);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(605);
			match(Identifier);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class AtomicTypeSpecifierContext extends ParserRuleContext {
		public TerminalNode Atomic() { return getToken(CParser.Atomic, 0); }
		public TerminalNode OPEN_PARENS() { return getToken(CParser.OPEN_PARENS, 0); }
		public TypeNameContext typeName() {
			return getRuleContext(TypeNameContext.class,0);
		}
		public TerminalNode CLOSE_PARENS() { return getToken(CParser.CLOSE_PARENS, 0); }
		public AtomicTypeSpecifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_atomicTypeSpecifier; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterAtomicTypeSpecifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitAtomicTypeSpecifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitAtomicTypeSpecifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final AtomicTypeSpecifierContext atomicTypeSpecifier() throws RecognitionException {
		AtomicTypeSpecifierContext _localctx = new AtomicTypeSpecifierContext(_ctx, getState());
		enterRule(_localctx, 90, RULE_atomicTypeSpecifier);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(607);
			match(Atomic);
			setState(608);
			match(OPEN_PARENS);
			setState(609);
			typeName();
			setState(610);
			match(CLOSE_PARENS);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class TypeQualifierContext extends ParserRuleContext {
		public TerminalNode Const() { return getToken(CParser.Const, 0); }
		public TerminalNode Restrict() { return getToken(CParser.Restrict, 0); }
		public TerminalNode Volatile() { return getToken(CParser.Volatile, 0); }
		public TerminalNode Atomic() { return getToken(CParser.Atomic, 0); }
		public TypeQualifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_typeQualifier; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterTypeQualifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitTypeQualifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitTypeQualifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TypeQualifierContext typeQualifier() throws RecognitionException {
		TypeQualifierContext _localctx = new TypeQualifierContext(_ctx, getState());
		enterRule(_localctx, 92, RULE_typeQualifier);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(612);
			_la = _input.LA(1);
			if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 37383932223488L) != 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 FunctionSpecifierContext extends ParserRuleContext {
		public TerminalNode Inline() { return getToken(CParser.Inline, 0); }
		public TerminalNode Noreturn() { return getToken(CParser.Noreturn, 0); }
		public TerminalNode EXT_Inline() { return getToken(CParser.EXT_Inline, 0); }
		public TerminalNode EXT_Stdcall() { return getToken(CParser.EXT_Stdcall, 0); }
		public GccAttributeSpecifierContext gccAttributeSpecifier() {
			return getRuleContext(GccAttributeSpecifierContext.class,0);
		}
		public TerminalNode EXT_Declspec() { return getToken(CParser.EXT_Declspec, 0); }
		public TerminalNode OPEN_PARENS() { return getToken(CParser.OPEN_PARENS, 0); }
		public TerminalNode Identifier() { return getToken(CParser.Identifier, 0); }
		public TerminalNode CLOSE_PARENS() { return getToken(CParser.CLOSE_PARENS, 0); }
		public FunctionSpecifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_functionSpecifier; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterFunctionSpecifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitFunctionSpecifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitFunctionSpecifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final FunctionSpecifierContext functionSpecifier() throws RecognitionException {
		FunctionSpecifierContext _localctx = new FunctionSpecifierContext(_ctx, getState());
		enterRule(_localctx, 94, RULE_functionSpecifier);
		try {
			setState(623);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case Inline:
				enterOuterAlt(_localctx, 1);
				{
				setState(614);
				match(Inline);
				}
				break;
			case Noreturn:
				enterOuterAlt(_localctx, 2);
				{
				setState(615);
				match(Noreturn);
				}
				break;
			case EXT_Inline:
				enterOuterAlt(_localctx, 3);
				{
				setState(616);
				match(EXT_Inline);
				}
				break;
			case EXT_Stdcall:
				enterOuterAlt(_localctx, 4);
				{
				setState(617);
				match(EXT_Stdcall);
				}
				break;
			case EXT_Attribute:
				enterOuterAlt(_localctx, 5);
				{
				setState(618);
				gccAttributeSpecifier();
				}
				break;
			case EXT_Declspec:
				enterOuterAlt(_localctx, 6);
				{
				setState(619);
				match(EXT_Declspec);
				setState(620);
				match(OPEN_PARENS);
				setState(621);
				match(Identifier);
				setState(622);
				match(CLOSE_PARENS);
				}
				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 AlignmentSpecifierContext extends ParserRuleContext {
		public TerminalNode Alignas() { return getToken(CParser.Alignas, 0); }
		public TerminalNode OPEN_PARENS() { return getToken(CParser.OPEN_PARENS, 0); }
		public TerminalNode CLOSE_PARENS() { return getToken(CParser.CLOSE_PARENS, 0); }
		public TypeNameContext typeName() {
			return getRuleContext(TypeNameContext.class,0);
		}
		public ConstantExpressionContext constantExpression() {
			return getRuleContext(ConstantExpressionContext.class,0);
		}
		public AlignmentSpecifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_alignmentSpecifier; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterAlignmentSpecifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitAlignmentSpecifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitAlignmentSpecifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final AlignmentSpecifierContext alignmentSpecifier() throws RecognitionException {
		AlignmentSpecifierContext _localctx = new AlignmentSpecifierContext(_ctx, getState());
		enterRule(_localctx, 96, RULE_alignmentSpecifier);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(625);
			match(Alignas);
			setState(626);
			match(OPEN_PARENS);
			setState(629);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,59,_ctx) ) {
			case 1:
				{
				setState(627);
				typeName();
				}
				break;
			case 2:
				{
				setState(628);
				constantExpression();
				}
				break;
			}
			setState(631);
			match(CLOSE_PARENS);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class DeclaratorContext extends ParserRuleContext {
		public DirectDeclaratorContext directDeclarator() {
			return getRuleContext(DirectDeclaratorContext.class,0);
		}
		public PointerContext pointer() {
			return getRuleContext(PointerContext.class,0);
		}
		public List gccDeclaratorExtension() {
			return getRuleContexts(GccDeclaratorExtensionContext.class);
		}
		public GccDeclaratorExtensionContext gccDeclaratorExtension(int i) {
			return getRuleContext(GccDeclaratorExtensionContext.class,i);
		}
		public DeclaratorContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_declarator; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterDeclarator(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitDeclarator(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitDeclarator(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DeclaratorContext declarator() throws RecognitionException {
		DeclaratorContext _localctx = new DeclaratorContext(_ctx, getState());
		enterRule(_localctx, 98, RULE_declarator);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(634);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==Star || _la==Caret) {
				{
				setState(633);
				pointer();
				}
			}

			setState(636);
			directDeclarator(0);
			setState(640);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,61,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(637);
					gccDeclaratorExtension();
					}
					} 
				}
				setState(642);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,61,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class DirectDeclaratorContext extends ParserRuleContext {
		public DirectDeclaratorContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_directDeclarator; }
	 
		public DirectDeclaratorContext() { }
		public void copyFrom(DirectDeclaratorContext ctx) {
			super.copyFrom(ctx);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class BitFieldDirectDeclaratorContext extends DirectDeclaratorContext {
		public TerminalNode Identifier() { return getToken(CParser.Identifier, 0); }
		public TerminalNode Colon() { return getToken(CParser.Colon, 0); }
		public TerminalNode DigitSequence() { return getToken(CParser.DigitSequence, 0); }
		public BitFieldDirectDeclaratorContext(DirectDeclaratorContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterBitFieldDirectDeclarator(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitBitFieldDirectDeclarator(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitBitFieldDirectDeclarator(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class AssignmentExpressionDirectDeclaratorContext extends DirectDeclaratorContext {
		public DirectDeclaratorContext directDeclarator() {
			return getRuleContext(DirectDeclaratorContext.class,0);
		}
		public TerminalNode LeftBracket() { return getToken(CParser.LeftBracket, 0); }
		public TerminalNode RightBracket() { return getToken(CParser.RightBracket, 0); }
		public TypeQualifierListContext typeQualifierList() {
			return getRuleContext(TypeQualifierListContext.class,0);
		}
		public AssignmentExpressionContext assignmentExpression() {
			return getRuleContext(AssignmentExpressionContext.class,0);
		}
		public AssignmentExpressionDirectDeclaratorContext(DirectDeclaratorContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterAssignmentExpressionDirectDeclarator(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitAssignmentExpressionDirectDeclarator(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitAssignmentExpressionDirectDeclarator(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class PreStaticAssignmentExpressionDirectDeclaratorContext extends DirectDeclaratorContext {
		public DirectDeclaratorContext directDeclarator() {
			return getRuleContext(DirectDeclaratorContext.class,0);
		}
		public TerminalNode LeftBracket() { return getToken(CParser.LeftBracket, 0); }
		public TerminalNode Static() { return getToken(CParser.Static, 0); }
		public AssignmentExpressionContext assignmentExpression() {
			return getRuleContext(AssignmentExpressionContext.class,0);
		}
		public TerminalNode RightBracket() { return getToken(CParser.RightBracket, 0); }
		public TypeQualifierListContext typeQualifierList() {
			return getRuleContext(TypeQualifierListContext.class,0);
		}
		public PreStaticAssignmentExpressionDirectDeclaratorContext(DirectDeclaratorContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterPreStaticAssignmentExpressionDirectDeclarator(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitPreStaticAssignmentExpressionDirectDeclarator(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitPreStaticAssignmentExpressionDirectDeclarator(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class ParameterDirectDeclaratorContext extends DirectDeclaratorContext {
		public DirectDeclaratorContext directDeclarator() {
			return getRuleContext(DirectDeclaratorContext.class,0);
		}
		public TerminalNode OPEN_PARENS() { return getToken(CParser.OPEN_PARENS, 0); }
		public ParameterTypeListContext parameterTypeList() {
			return getRuleContext(ParameterTypeListContext.class,0);
		}
		public TerminalNode CLOSE_PARENS() { return getToken(CParser.CLOSE_PARENS, 0); }
		public ParameterDirectDeclaratorContext(DirectDeclaratorContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterParameterDirectDeclarator(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitParameterDirectDeclarator(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitParameterDirectDeclarator(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class VcSpecificModiferDirectDeclaratorContext extends DirectDeclaratorContext {
		public VcSpecificModiferContext vcSpecificModifer() {
			return getRuleContext(VcSpecificModiferContext.class,0);
		}
		public TerminalNode Identifier() { return getToken(CParser.Identifier, 0); }
		public VcSpecificModiferDirectDeclaratorContext(DirectDeclaratorContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterVcSpecificModiferDirectDeclarator(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitVcSpecificModiferDirectDeclarator(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitVcSpecificModiferDirectDeclarator(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class PostStaticAssignmentExpressionDirectDeclaratorContext extends DirectDeclaratorContext {
		public DirectDeclaratorContext directDeclarator() {
			return getRuleContext(DirectDeclaratorContext.class,0);
		}
		public TerminalNode LeftBracket() { return getToken(CParser.LeftBracket, 0); }
		public TypeQualifierListContext typeQualifierList() {
			return getRuleContext(TypeQualifierListContext.class,0);
		}
		public TerminalNode Static() { return getToken(CParser.Static, 0); }
		public AssignmentExpressionContext assignmentExpression() {
			return getRuleContext(AssignmentExpressionContext.class,0);
		}
		public TerminalNode RightBracket() { return getToken(CParser.RightBracket, 0); }
		public PostStaticAssignmentExpressionDirectDeclaratorContext(DirectDeclaratorContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterPostStaticAssignmentExpressionDirectDeclarator(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitPostStaticAssignmentExpressionDirectDeclarator(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitPostStaticAssignmentExpressionDirectDeclarator(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class TypeQualifierListPointerDirectDeclaratorContext extends DirectDeclaratorContext {
		public DirectDeclaratorContext directDeclarator() {
			return getRuleContext(DirectDeclaratorContext.class,0);
		}
		public TerminalNode LeftBracket() { return getToken(CParser.LeftBracket, 0); }
		public TerminalNode Star() { return getToken(CParser.Star, 0); }
		public TerminalNode RightBracket() { return getToken(CParser.RightBracket, 0); }
		public TypeQualifierListContext typeQualifierList() {
			return getRuleContext(TypeQualifierListContext.class,0);
		}
		public TypeQualifierListPointerDirectDeclaratorContext(DirectDeclaratorContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterTypeQualifierListPointerDirectDeclarator(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitTypeQualifierListPointerDirectDeclarator(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitTypeQualifierListPointerDirectDeclarator(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class DeclaratorDirectDeclaratorContext extends DirectDeclaratorContext {
		public TerminalNode OPEN_PARENS() { return getToken(CParser.OPEN_PARENS, 0); }
		public DeclaratorContext declarator() {
			return getRuleContext(DeclaratorContext.class,0);
		}
		public TerminalNode CLOSE_PARENS() { return getToken(CParser.CLOSE_PARENS, 0); }
		public DeclaratorDirectDeclaratorContext(DirectDeclaratorContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterDeclaratorDirectDeclarator(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitDeclaratorDirectDeclarator(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitDeclaratorDirectDeclarator(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class FunctionPointerDirectDeclaratorContext extends DirectDeclaratorContext {
		public TerminalNode OPEN_PARENS() { return getToken(CParser.OPEN_PARENS, 0); }
		public PointerContext pointer() {
			return getRuleContext(PointerContext.class,0);
		}
		public DirectDeclaratorContext directDeclarator() {
			return getRuleContext(DirectDeclaratorContext.class,0);
		}
		public TerminalNode CLOSE_PARENS() { return getToken(CParser.CLOSE_PARENS, 0); }
		public TypeSpecifierContext typeSpecifier() {
			return getRuleContext(TypeSpecifierContext.class,0);
		}
		public FunctionPointerDirectDeclaratorContext(DirectDeclaratorContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterFunctionPointerDirectDeclarator(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitFunctionPointerDirectDeclarator(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitFunctionPointerDirectDeclarator(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class IdentifierListDirectDeclaratorContext extends DirectDeclaratorContext {
		public DirectDeclaratorContext directDeclarator() {
			return getRuleContext(DirectDeclaratorContext.class,0);
		}
		public TerminalNode OPEN_PARENS() { return getToken(CParser.OPEN_PARENS, 0); }
		public TerminalNode CLOSE_PARENS() { return getToken(CParser.CLOSE_PARENS, 0); }
		public IdentifierListContext identifierList() {
			return getRuleContext(IdentifierListContext.class,0);
		}
		public IdentifierListDirectDeclaratorContext(DirectDeclaratorContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterIdentifierListDirectDeclarator(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitIdentifierListDirectDeclarator(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitIdentifierListDirectDeclarator(this);
			else return visitor.visitChildren(this);
		}
	}
	@SuppressWarnings("CheckReturnValue")
	public static class IdentifierDirectDeclaratorContext extends DirectDeclaratorContext {
		public TerminalNode Identifier() { return getToken(CParser.Identifier, 0); }
		public IdentifierDirectDeclaratorContext(DirectDeclaratorContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterIdentifierDirectDeclarator(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitIdentifierDirectDeclarator(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitIdentifierDirectDeclarator(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DirectDeclaratorContext directDeclarator() throws RecognitionException {
		return directDeclarator(0);
	}

	private DirectDeclaratorContext directDeclarator(int _p) throws RecognitionException {
		ParserRuleContext _parentctx = _ctx;
		int _parentState = getState();
		DirectDeclaratorContext _localctx = new DirectDeclaratorContext(_ctx, _parentState);
		DirectDeclaratorContext _prevctx = _localctx;
		int _startState = 100;
		enterRecursionRule(_localctx, 100, RULE_directDeclarator, _p);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(663);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,63,_ctx) ) {
			case 1:
				{
				_localctx = new IdentifierDirectDeclaratorContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;

				setState(644);
				match(Identifier);
				}
				break;
			case 2:
				{
				_localctx = new DeclaratorDirectDeclaratorContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(645);
				match(OPEN_PARENS);
				setState(646);
				declarator();
				setState(647);
				match(CLOSE_PARENS);
				}
				break;
			case 3:
				{
				_localctx = new BitFieldDirectDeclaratorContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(649);
				match(Identifier);
				setState(650);
				match(Colon);
				setState(651);
				match(DigitSequence);
				}
				break;
			case 4:
				{
				_localctx = new VcSpecificModiferDirectDeclaratorContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(652);
				vcSpecificModifer();
				setState(653);
				match(Identifier);
				}
				break;
			case 5:
				{
				_localctx = new FunctionPointerDirectDeclaratorContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(655);
				match(OPEN_PARENS);
				setState(657);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 9536947167563776L) != 0) || ((((_la - 103)) & ~0x3f) == 0 && ((1L << (_la - 103)) & 13631735L) != 0)) {
					{
					setState(656);
					typeSpecifier();
					}
				}

				setState(659);
				pointer();
				setState(660);
				directDeclarator(0);
				setState(661);
				match(CLOSE_PARENS);
				}
				break;
			}
			_ctx.stop = _input.LT(-1);
			setState(710);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,70,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					if ( _parseListeners!=null ) triggerExitRuleEvent();
					_prevctx = _localctx;
					{
					setState(708);
					_errHandler.sync(this);
					switch ( getInterpreter().adaptivePredict(_input,69,_ctx) ) {
					case 1:
						{
						_localctx = new AssignmentExpressionDirectDeclaratorContext(new DirectDeclaratorContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_directDeclarator);
						setState(665);
						if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)");
						setState(666);
						match(LeftBracket);
						setState(668);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 37383932223488L) != 0)) {
							{
							setState(667);
							typeQualifierList();
							}
						}

						setState(671);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 9307948100751360L) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & 4323457566421037727L) != 0)) {
							{
							setState(670);
							assignmentExpression();
							}
						}

						setState(673);
						match(RightBracket);
						}
						break;
					case 2:
						{
						_localctx = new PreStaticAssignmentExpressionDirectDeclaratorContext(new DirectDeclaratorContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_directDeclarator);
						setState(674);
						if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)");
						setState(675);
						match(LeftBracket);
						setState(676);
						match(Static);
						setState(678);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 37383932223488L) != 0)) {
							{
							setState(677);
							typeQualifierList();
							}
						}

						setState(680);
						assignmentExpression();
						setState(681);
						match(RightBracket);
						}
						break;
					case 3:
						{
						_localctx = new PostStaticAssignmentExpressionDirectDeclaratorContext(new DirectDeclaratorContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_directDeclarator);
						setState(683);
						if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
						setState(684);
						match(LeftBracket);
						setState(685);
						typeQualifierList();
						setState(686);
						match(Static);
						setState(687);
						assignmentExpression();
						setState(688);
						match(RightBracket);
						}
						break;
					case 4:
						{
						_localctx = new TypeQualifierListPointerDirectDeclaratorContext(new DirectDeclaratorContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_directDeclarator);
						setState(690);
						if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
						setState(691);
						match(LeftBracket);
						setState(693);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 37383932223488L) != 0)) {
							{
							setState(692);
							typeQualifierList();
							}
						}

						setState(695);
						match(Star);
						setState(696);
						match(RightBracket);
						}
						break;
					case 5:
						{
						_localctx = new ParameterDirectDeclaratorContext(new DirectDeclaratorContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_directDeclarator);
						setState(697);
						if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)");
						setState(698);
						match(OPEN_PARENS);
						setState(699);
						parameterTypeList();
						setState(700);
						match(CLOSE_PARENS);
						}
						break;
					case 6:
						{
						_localctx = new IdentifierListDirectDeclaratorContext(new DirectDeclaratorContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_directDeclarator);
						setState(702);
						if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)");
						setState(703);
						match(OPEN_PARENS);
						setState(705);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==Identifier) {
							{
							setState(704);
							identifierList();
							}
						}

						setState(707);
						match(CLOSE_PARENS);
						}
						break;
					}
					} 
				}
				setState(712);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,70,_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 VcSpecificModiferContext extends ParserRuleContext {
		public TerminalNode EXT_Cdecl() { return getToken(CParser.EXT_Cdecl, 0); }
		public TerminalNode EXT_Clrcall() { return getToken(CParser.EXT_Clrcall, 0); }
		public TerminalNode EXT_Stdcall() { return getToken(CParser.EXT_Stdcall, 0); }
		public TerminalNode EXT_Fastcall() { return getToken(CParser.EXT_Fastcall, 0); }
		public TerminalNode EXT_Thiscall() { return getToken(CParser.EXT_Thiscall, 0); }
		public TerminalNode EXT_Vectorcall() { return getToken(CParser.EXT_Vectorcall, 0); }
		public VcSpecificModiferContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_vcSpecificModifer; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterVcSpecificModifer(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitVcSpecificModifer(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitVcSpecificModifer(this);
			else return visitor.visitChildren(this);
		}
	}

	public final VcSpecificModiferContext vcSpecificModifer() throws RecognitionException {
		VcSpecificModiferContext _localctx = new VcSpecificModiferContext(_ctx, getState());
		enterRule(_localctx, 102, RULE_vcSpecificModifer);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(713);
			_la = _input.LA(1);
			if ( !(((((_la - 112)) & ~0x3f) == 0 && ((1L << (_la - 112)) & 125L) != 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 GccDeclaratorExtensionContext extends ParserRuleContext {
		public TerminalNode EXT_Asm() { return getToken(CParser.EXT_Asm, 0); }
		public TerminalNode OPEN_PARENS() { return getToken(CParser.OPEN_PARENS, 0); }
		public TerminalNode CLOSE_PARENS() { return getToken(CParser.CLOSE_PARENS, 0); }
		public List STRING() { return getTokens(CParser.STRING); }
		public TerminalNode STRING(int i) {
			return getToken(CParser.STRING, i);
		}
		public GccAttributeSpecifierContext gccAttributeSpecifier() {
			return getRuleContext(GccAttributeSpecifierContext.class,0);
		}
		public GccDeclaratorExtensionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_gccDeclaratorExtension; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterGccDeclaratorExtension(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitGccDeclaratorExtension(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitGccDeclaratorExtension(this);
			else return visitor.visitChildren(this);
		}
	}

	public final GccDeclaratorExtensionContext gccDeclaratorExtension() throws RecognitionException {
		GccDeclaratorExtensionContext _localctx = new GccDeclaratorExtensionContext(_ctx, getState());
		enterRule(_localctx, 104, RULE_gccDeclaratorExtension);
		int _la;
		try {
			setState(724);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case EXT_Asm:
				enterOuterAlt(_localctx, 1);
				{
				setState(715);
				match(EXT_Asm);
				setState(716);
				match(OPEN_PARENS);
				setState(718); 
				_errHandler.sync(this);
				_la = _input.LA(1);
				do {
					{
					{
					setState(717);
					match(STRING);
					}
					}
					setState(720); 
					_errHandler.sync(this);
					_la = _input.LA(1);
				} while ( _la==STRING );
				setState(722);
				match(CLOSE_PARENS);
				}
				break;
			case EXT_Attribute:
				enterOuterAlt(_localctx, 2);
				{
				setState(723);
				gccAttributeSpecifier();
				}
				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 GccAttributeSpecifierContext extends ParserRuleContext {
		public TerminalNode EXT_Attribute() { return getToken(CParser.EXT_Attribute, 0); }
		public List OPEN_PARENS() { return getTokens(CParser.OPEN_PARENS); }
		public TerminalNode OPEN_PARENS(int i) {
			return getToken(CParser.OPEN_PARENS, i);
		}
		public GccAttributeListContext gccAttributeList() {
			return getRuleContext(GccAttributeListContext.class,0);
		}
		public List CLOSE_PARENS() { return getTokens(CParser.CLOSE_PARENS); }
		public TerminalNode CLOSE_PARENS(int i) {
			return getToken(CParser.CLOSE_PARENS, i);
		}
		public GccAttributeSpecifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_gccAttributeSpecifier; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterGccAttributeSpecifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitGccAttributeSpecifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitGccAttributeSpecifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final GccAttributeSpecifierContext gccAttributeSpecifier() throws RecognitionException {
		GccAttributeSpecifierContext _localctx = new GccAttributeSpecifierContext(_ctx, getState());
		enterRule(_localctx, 106, RULE_gccAttributeSpecifier);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(726);
			match(EXT_Attribute);
			setState(727);
			match(OPEN_PARENS);
			setState(728);
			match(OPEN_PARENS);
			setState(729);
			gccAttributeList();
			setState(730);
			match(CLOSE_PARENS);
			setState(731);
			match(CLOSE_PARENS);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class GccAttributeListContext extends ParserRuleContext {
		public List gccAttribute() {
			return getRuleContexts(GccAttributeContext.class);
		}
		public GccAttributeContext gccAttribute(int i) {
			return getRuleContext(GccAttributeContext.class,i);
		}
		public List Comma() { return getTokens(CParser.Comma); }
		public TerminalNode Comma(int i) {
			return getToken(CParser.Comma, i);
		}
		public GccAttributeListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_gccAttributeList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterGccAttributeList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitGccAttributeList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitGccAttributeList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final GccAttributeListContext gccAttributeList() throws RecognitionException {
		GccAttributeListContext _localctx = new GccAttributeListContext(_ctx, getState());
		enterRule(_localctx, 108, RULE_gccAttributeList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(734);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -27021597764222978L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -262145L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & 16777215L) != 0)) {
				{
				setState(733);
				gccAttribute();
				}
			}

			setState(742);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==Comma) {
				{
				{
				setState(736);
				match(Comma);
				setState(738);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -27021597764222978L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -262145L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & 16777215L) != 0)) {
					{
					setState(737);
					gccAttribute();
					}
				}

				}
				}
				setState(744);
				_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 GccAttributeContext extends ParserRuleContext {
		public TerminalNode Comma() { return getToken(CParser.Comma, 0); }
		public List OPEN_PARENS() { return getTokens(CParser.OPEN_PARENS); }
		public TerminalNode OPEN_PARENS(int i) {
			return getToken(CParser.OPEN_PARENS, i);
		}
		public List CLOSE_PARENS() { return getTokens(CParser.CLOSE_PARENS); }
		public TerminalNode CLOSE_PARENS(int i) {
			return getToken(CParser.CLOSE_PARENS, i);
		}
		public ArgumentExpressionListContext argumentExpressionList() {
			return getRuleContext(ArgumentExpressionListContext.class,0);
		}
		public GccAttributeContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_gccAttribute; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterGccAttribute(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitGccAttribute(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitGccAttribute(this);
			else return visitor.visitChildren(this);
		}
	}

	public final GccAttributeContext gccAttribute() throws RecognitionException {
		GccAttributeContext _localctx = new GccAttributeContext(_ctx, getState());
		enterRule(_localctx, 110, RULE_gccAttribute);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(745);
			_la = _input.LA(1);
			if ( _la <= 0 || (((((_la - 53)) & ~0x3f) == 0 && ((1L << (_la - 53)) & 536870915L) != 0)) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			setState(751);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==OPEN_PARENS) {
				{
				setState(746);
				match(OPEN_PARENS);
				setState(748);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 9307948100751360L) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & 4323457566421037727L) != 0)) {
					{
					setState(747);
					argumentExpressionList();
					}
				}

				setState(750);
				match(CLOSE_PARENS);
				}
			}

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

	@SuppressWarnings("CheckReturnValue")
	public static class NestedParenthesesBlockContext extends ParserRuleContext {
		public List OPEN_PARENS() { return getTokens(CParser.OPEN_PARENS); }
		public TerminalNode OPEN_PARENS(int i) {
			return getToken(CParser.OPEN_PARENS, i);
		}
		public List nestedParenthesesBlock() {
			return getRuleContexts(NestedParenthesesBlockContext.class);
		}
		public NestedParenthesesBlockContext nestedParenthesesBlock(int i) {
			return getRuleContext(NestedParenthesesBlockContext.class,i);
		}
		public List CLOSE_PARENS() { return getTokens(CParser.CLOSE_PARENS); }
		public TerminalNode CLOSE_PARENS(int i) {
			return getToken(CParser.CLOSE_PARENS, i);
		}
		public NestedParenthesesBlockContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_nestedParenthesesBlock; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterNestedParenthesesBlock(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitNestedParenthesesBlock(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitNestedParenthesesBlock(this);
			else return visitor.visitChildren(this);
		}
	}

	public final NestedParenthesesBlockContext nestedParenthesesBlock() throws RecognitionException {
		NestedParenthesesBlockContext _localctx = new NestedParenthesesBlockContext(_ctx, getState());
		enterRule(_localctx, 112, RULE_nestedParenthesesBlock);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(760);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while ((((_la) & ~0x3f) == 0 && ((1L << _la) & -18014398509481986L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & 16777215L) != 0)) {
				{
				setState(758);
				_errHandler.sync(this);
				switch (_input.LA(1)) {
				case SINGLE_LINE_DOC_COMMENT:
				case EMPTY_DELIMITED_DOC_COMMENT:
				case DELIMITED_DOC_COMMENT:
				case SINGLE_LINE_COMMENT:
				case DELIMITED_COMMENT:
				case WHITESPACES:
				case SHARP:
				case MultiLineMacro:
				case Auto:
				case Break:
				case Case:
				case Char:
				case Const:
				case Continue:
				case Default:
				case Do:
				case Double:
				case Else:
				case Enum:
				case Extern:
				case Float:
				case For:
				case Goto:
				case If:
				case Inline:
				case Int:
				case Long:
				case Register:
				case Restrict:
				case Return:
				case Short:
				case Signed:
				case Sizeof:
				case Static:
				case Struct:
				case Switch:
				case Typedef:
				case Union:
				case Unsigned:
				case Void:
				case Volatile:
				case While:
				case Alignas:
				case Alignof:
				case Atomic:
				case Bool:
				case Complex:
				case Generic:
				case Imaginary:
				case Noreturn:
				case StaticAssert:
				case ThreadLocal:
				case LeftBracket:
				case RightBracket:
				case LeftBrace:
				case RightBrace:
				case Less:
				case LessEqual:
				case Greater:
				case GreaterEqual:
				case LeftShift:
				case RightShift:
				case Plus:
				case PlusPlus:
				case Minus:
				case MinusMinus:
				case Star:
				case Div:
				case Mod:
				case And:
				case Or:
				case OP_AND:
				case OP_OR:
				case Caret:
				case Not:
				case Tilde:
				case Question:
				case Colon:
				case Semi:
				case Comma:
				case OP_EQ:
				case StarAssign:
				case DivAssign:
				case ModAssign:
				case PlusAssign:
				case MinusAssign:
				case LeftShiftAssign:
				case RightShiftAssign:
				case AndAssign:
				case XorAssign:
				case OrAssign:
				case Equal:
				case OP_NE:
				case Arrow:
				case Dot:
				case Ellipsis:
				case TRUE:
				case FALSE:
				case Ifdef:
				case Ifndef:
				case Extenion:
				case EXT_BuiltinVaArg:
				case EXT_BuiltinOffsetof:
				case EXT_Error:
				case EXT_M128:
				case EXT_M128d:
				case EXT_M128i:
				case EXT_Typeof:
				case EXT_Inline:
				case EXT_Stdcall:
				case EXT_Declspec:
				case EXT_Cdecl:
				case EXT_Clrcall:
				case EXT_Fastcall:
				case EXT_Thiscall:
				case EXT_Vectorcall:
				case EXT_Asm:
				case EXT_Asm_:
				case EXT_Attribute:
				case EXT_Volatile:
				case Identifier:
				case DigitSequence:
				case STRING:
				case Constant:
				case AsmBlock:
				case Whitespace:
				case Newline:
				case BlockComment:
				case LineComment:
				case DIRECTIVE_WHITESPACES:
				case DIGITS:
				case INCLUDE:
				case DEFINE:
				case UNDEF:
				case ELIF:
				case ENDIF:
				case LINE:
				case ERROR:
				case WARNING:
				case REGION:
				case ENDREGION:
				case PRAGMA:
				case NULLABLE:
				case DIRECTIVE_HIDDEN:
				case DIRECTIVE_DOUBLE_QUOTE:
				case CONDITIONAL_SYMBOL:
				case DIRECTIVE_NEW_LINE:
				case INCLUDE_TEXT:
				case TEXT:
					{
					setState(753);
					_la = _input.LA(1);
					if ( _la <= 0 || (_la==OPEN_PARENS || _la==CLOSE_PARENS) ) {
					_errHandler.recoverInline(this);
					}
					else {
						if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
						_errHandler.reportMatch(this);
						consume();
					}
					}
					break;
				case OPEN_PARENS:
					{
					setState(754);
					match(OPEN_PARENS);
					setState(755);
					nestedParenthesesBlock();
					setState(756);
					match(CLOSE_PARENS);
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				setState(762);
				_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 PointerContext extends ParserRuleContext {
		public List Star() { return getTokens(CParser.Star); }
		public TerminalNode Star(int i) {
			return getToken(CParser.Star, i);
		}
		public List Caret() { return getTokens(CParser.Caret); }
		public TerminalNode Caret(int i) {
			return getToken(CParser.Caret, i);
		}
		public List typeQualifierList() {
			return getRuleContexts(TypeQualifierListContext.class);
		}
		public TypeQualifierListContext typeQualifierList(int i) {
			return getRuleContext(TypeQualifierListContext.class,i);
		}
		public PointerContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_pointer; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterPointer(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitPointer(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitPointer(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PointerContext pointer() throws RecognitionException {
		PointerContext _localctx = new PointerContext(_ctx, getState());
		enterRule(_localctx, 114, RULE_pointer);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(767); 
			_errHandler.sync(this);
			_alt = 1;
			do {
				switch (_alt) {
				case 1:
					{
					{
					setState(763);
					_la = _input.LA(1);
					if ( !(_la==Star || _la==Caret) ) {
					_errHandler.recoverInline(this);
					}
					else {
						if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
						_errHandler.reportMatch(this);
						consume();
					}
					setState(765);
					_errHandler.sync(this);
					switch ( getInterpreter().adaptivePredict(_input,80,_ctx) ) {
					case 1:
						{
						setState(764);
						typeQualifierList();
						}
						break;
					}
					}
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				setState(769); 
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,81,_ctx);
			} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class TypeQualifierListContext extends ParserRuleContext {
		public List typeQualifier() {
			return getRuleContexts(TypeQualifierContext.class);
		}
		public TypeQualifierContext typeQualifier(int i) {
			return getRuleContext(TypeQualifierContext.class,i);
		}
		public TypeQualifierListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_typeQualifierList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterTypeQualifierList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitTypeQualifierList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitTypeQualifierList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TypeQualifierListContext typeQualifierList() throws RecognitionException {
		TypeQualifierListContext _localctx = new TypeQualifierListContext(_ctx, getState());
		enterRule(_localctx, 116, RULE_typeQualifierList);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(772); 
			_errHandler.sync(this);
			_alt = 1;
			do {
				switch (_alt) {
				case 1:
					{
					{
					setState(771);
					typeQualifier();
					}
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				setState(774); 
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,82,_ctx);
			} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ParameterTypeListContext extends ParserRuleContext {
		public ParameterListContext parameterList() {
			return getRuleContext(ParameterListContext.class,0);
		}
		public TerminalNode Comma() { return getToken(CParser.Comma, 0); }
		public TerminalNode Ellipsis() { return getToken(CParser.Ellipsis, 0); }
		public ParameterTypeListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_parameterTypeList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterParameterTypeList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitParameterTypeList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitParameterTypeList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ParameterTypeListContext parameterTypeList() throws RecognitionException {
		ParameterTypeListContext _localctx = new ParameterTypeListContext(_ctx, getState());
		enterRule(_localctx, 118, RULE_parameterTypeList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(776);
			parameterList();
			setState(779);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==Comma) {
				{
				setState(777);
				match(Comma);
				setState(778);
				match(Ellipsis);
				}
			}

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

	@SuppressWarnings("CheckReturnValue")
	public static class ParameterListContext extends ParserRuleContext {
		public List parameterDeclaration() {
			return getRuleContexts(ParameterDeclarationContext.class);
		}
		public ParameterDeclarationContext parameterDeclaration(int i) {
			return getRuleContext(ParameterDeclarationContext.class,i);
		}
		public List Comma() { return getTokens(CParser.Comma); }
		public TerminalNode Comma(int i) {
			return getToken(CParser.Comma, i);
		}
		public ParameterListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_parameterList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterParameterList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitParameterList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitParameterList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ParameterListContext parameterList() throws RecognitionException {
		ParameterListContext _localctx = new ParameterListContext(_ctx, getState());
		enterRule(_localctx, 120, RULE_parameterList);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(781);
			parameterDeclaration();
			setState(786);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,84,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(782);
					match(Comma);
					setState(783);
					parameterDeclaration();
					}
					} 
				}
				setState(788);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,84,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ParameterDeclarationContext extends ParserRuleContext {
		public DeclaratorContext declarator() {
			return getRuleContext(DeclaratorContext.class,0);
		}
		public List declarationSpecifier() {
			return getRuleContexts(DeclarationSpecifierContext.class);
		}
		public DeclarationSpecifierContext declarationSpecifier(int i) {
			return getRuleContext(DeclarationSpecifierContext.class,i);
		}
		public AbstractDeclaratorContext abstractDeclarator() {
			return getRuleContext(AbstractDeclaratorContext.class,0);
		}
		public ParameterDeclarationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_parameterDeclaration; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterParameterDeclaration(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitParameterDeclaration(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitParameterDeclaration(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ParameterDeclarationContext parameterDeclaration() throws RecognitionException {
		ParameterDeclarationContext _localctx = new ParameterDeclarationContext(_ctx, getState());
		enterRule(_localctx, 122, RULE_parameterDeclaration);
		int _la;
		try {
			int _alt;
			setState(804);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,88,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(790); 
				_errHandler.sync(this);
				_alt = 1;
				do {
					switch (_alt) {
					case 1:
						{
						{
						setState(789);
						declarationSpecifier();
						}
						}
						break;
					default:
						throw new NoViableAltException(this);
					}
					setState(792); 
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,85,_ctx);
				} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
				setState(794);
				declarator();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(797); 
				_errHandler.sync(this);
				_alt = 1;
				do {
					switch (_alt) {
					case 1:
						{
						{
						setState(796);
						declarationSpecifier();
						}
						}
						break;
					default:
						throw new NoViableAltException(this);
					}
					setState(799); 
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,86,_ctx);
				} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
				setState(802);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (((((_la - 53)) & ~0x3f) == 0 && ((1L << (_la - 53)) & 8454149L) != 0)) {
					{
					setState(801);
					abstractDeclarator();
					}
				}

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

	@SuppressWarnings("CheckReturnValue")
	public static class IdentifierListContext extends ParserRuleContext {
		public List Identifier() { return getTokens(CParser.Identifier); }
		public TerminalNode Identifier(int i) {
			return getToken(CParser.Identifier, i);
		}
		public List Comma() { return getTokens(CParser.Comma); }
		public TerminalNode Comma(int i) {
			return getToken(CParser.Comma, i);
		}
		public IdentifierListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_identifierList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterIdentifierList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitIdentifierList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitIdentifierList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final IdentifierListContext identifierList() throws RecognitionException {
		IdentifierListContext _localctx = new IdentifierListContext(_ctx, getState());
		enterRule(_localctx, 124, RULE_identifierList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(806);
			match(Identifier);
			setState(811);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==Comma) {
				{
				{
				setState(807);
				match(Comma);
				setState(808);
				match(Identifier);
				}
				}
				setState(813);
				_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 TypeNameContext extends ParserRuleContext {
		public SpecifierQualifierListContext specifierQualifierList() {
			return getRuleContext(SpecifierQualifierListContext.class,0);
		}
		public AbstractDeclaratorContext abstractDeclarator() {
			return getRuleContext(AbstractDeclaratorContext.class,0);
		}
		public TypeNameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_typeName; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterTypeName(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitTypeName(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitTypeName(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TypeNameContext typeName() throws RecognitionException {
		TypeNameContext _localctx = new TypeNameContext(_ctx, getState());
		enterRule(_localctx, 126, RULE_typeName);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(814);
			specifierQualifierList();
			setState(816);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (((((_la - 53)) & ~0x3f) == 0 && ((1L << (_la - 53)) & 8454149L) != 0)) {
				{
				setState(815);
				abstractDeclarator();
				}
			}

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

	@SuppressWarnings("CheckReturnValue")
	public static class AbstractDeclaratorContext extends ParserRuleContext {
		public PointerContext pointer() {
			return getRuleContext(PointerContext.class,0);
		}
		public DirectAbstractDeclaratorContext directAbstractDeclarator() {
			return getRuleContext(DirectAbstractDeclaratorContext.class,0);
		}
		public List gccDeclaratorExtension() {
			return getRuleContexts(GccDeclaratorExtensionContext.class);
		}
		public GccDeclaratorExtensionContext gccDeclaratorExtension(int i) {
			return getRuleContext(GccDeclaratorExtensionContext.class,i);
		}
		public AbstractDeclaratorContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_abstractDeclarator; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterAbstractDeclarator(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitAbstractDeclarator(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitAbstractDeclarator(this);
			else return visitor.visitChildren(this);
		}
	}

	public final AbstractDeclaratorContext abstractDeclarator() throws RecognitionException {
		AbstractDeclaratorContext _localctx = new AbstractDeclaratorContext(_ctx, getState());
		enterRule(_localctx, 128, RULE_abstractDeclarator);
		int _la;
		try {
			setState(829);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,93,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(818);
				pointer();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(820);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==Star || _la==Caret) {
					{
					setState(819);
					pointer();
					}
				}

				setState(822);
				directAbstractDeclarator(0);
				setState(826);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==EXT_Asm || _la==EXT_Attribute) {
					{
					{
					setState(823);
					gccDeclaratorExtension();
					}
					}
					setState(828);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class DirectAbstractDeclaratorContext extends ParserRuleContext {
		public TerminalNode OPEN_PARENS() { return getToken(CParser.OPEN_PARENS, 0); }
		public AbstractDeclaratorContext abstractDeclarator() {
			return getRuleContext(AbstractDeclaratorContext.class,0);
		}
		public TerminalNode CLOSE_PARENS() { return getToken(CParser.CLOSE_PARENS, 0); }
		public List gccDeclaratorExtension() {
			return getRuleContexts(GccDeclaratorExtensionContext.class);
		}
		public GccDeclaratorExtensionContext gccDeclaratorExtension(int i) {
			return getRuleContext(GccDeclaratorExtensionContext.class,i);
		}
		public TerminalNode LeftBracket() { return getToken(CParser.LeftBracket, 0); }
		public TerminalNode RightBracket() { return getToken(CParser.RightBracket, 0); }
		public TypeQualifierListContext typeQualifierList() {
			return getRuleContext(TypeQualifierListContext.class,0);
		}
		public AssignmentExpressionContext assignmentExpression() {
			return getRuleContext(AssignmentExpressionContext.class,0);
		}
		public TerminalNode Static() { return getToken(CParser.Static, 0); }
		public TerminalNode Star() { return getToken(CParser.Star, 0); }
		public ParameterTypeListContext parameterTypeList() {
			return getRuleContext(ParameterTypeListContext.class,0);
		}
		public DirectAbstractDeclaratorContext directAbstractDeclarator() {
			return getRuleContext(DirectAbstractDeclaratorContext.class,0);
		}
		public DirectAbstractDeclaratorContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_directAbstractDeclarator; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterDirectAbstractDeclarator(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitDirectAbstractDeclarator(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitDirectAbstractDeclarator(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DirectAbstractDeclaratorContext directAbstractDeclarator() throws RecognitionException {
		return directAbstractDeclarator(0);
	}

	private DirectAbstractDeclaratorContext directAbstractDeclarator(int _p) throws RecognitionException {
		ParserRuleContext _parentctx = _ctx;
		int _parentState = getState();
		DirectAbstractDeclaratorContext _localctx = new DirectAbstractDeclaratorContext(_ctx, _parentState);
		DirectAbstractDeclaratorContext _prevctx = _localctx;
		int _startState = 130;
		enterRecursionRule(_localctx, 130, RULE_directAbstractDeclarator, _p);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(877);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,100,_ctx) ) {
			case 1:
				{
				setState(832);
				match(OPEN_PARENS);
				setState(833);
				abstractDeclarator();
				setState(834);
				match(CLOSE_PARENS);
				setState(838);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,94,_ctx);
				while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
					if ( _alt==1 ) {
						{
						{
						setState(835);
						gccDeclaratorExtension();
						}
						} 
					}
					setState(840);
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,94,_ctx);
				}
				}
				break;
			case 2:
				{
				setState(841);
				match(LeftBracket);
				setState(843);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 37383932223488L) != 0)) {
					{
					setState(842);
					typeQualifierList();
					}
				}

				setState(846);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 9307948100751360L) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & 4323457566421037727L) != 0)) {
					{
					setState(845);
					assignmentExpression();
					}
				}

				setState(848);
				match(RightBracket);
				}
				break;
			case 3:
				{
				setState(849);
				match(LeftBracket);
				setState(850);
				match(Static);
				setState(852);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 37383932223488L) != 0)) {
					{
					setState(851);
					typeQualifierList();
					}
				}

				setState(854);
				assignmentExpression();
				setState(855);
				match(RightBracket);
				}
				break;
			case 4:
				{
				setState(857);
				match(LeftBracket);
				setState(858);
				typeQualifierList();
				setState(859);
				match(Static);
				setState(860);
				assignmentExpression();
				setState(861);
				match(RightBracket);
				}
				break;
			case 5:
				{
				setState(863);
				match(LeftBracket);
				setState(864);
				match(Star);
				setState(865);
				match(RightBracket);
				}
				break;
			case 6:
				{
				setState(866);
				match(OPEN_PARENS);
				setState(868);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 15177580096926208L) != 0) || ((((_la - 103)) & ~0x3f) == 0 && ((1L << (_la - 103)) & 13895671L) != 0)) {
					{
					setState(867);
					parameterTypeList();
					}
				}

				setState(870);
				match(CLOSE_PARENS);
				setState(874);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,99,_ctx);
				while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
					if ( _alt==1 ) {
						{
						{
						setState(871);
						gccDeclaratorExtension();
						}
						} 
					}
					setState(876);
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,99,_ctx);
				}
				}
				break;
			}
			_ctx.stop = _input.LT(-1);
			setState(922);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,107,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					if ( _parseListeners!=null ) triggerExitRuleEvent();
					_prevctx = _localctx;
					{
					setState(920);
					_errHandler.sync(this);
					switch ( getInterpreter().adaptivePredict(_input,106,_ctx) ) {
					case 1:
						{
						_localctx = new DirectAbstractDeclaratorContext(_parentctx, _parentState);
						pushNewRecursionContext(_localctx, _startState, RULE_directAbstractDeclarator);
						setState(879);
						if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)");
						setState(880);
						match(LeftBracket);
						setState(882);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 37383932223488L) != 0)) {
							{
							setState(881);
							typeQualifierList();
							}
						}

						setState(885);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 9307948100751360L) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & 4323457566421037727L) != 0)) {
							{
							setState(884);
							assignmentExpression();
							}
						}

						setState(887);
						match(RightBracket);
						}
						break;
					case 2:
						{
						_localctx = new DirectAbstractDeclaratorContext(_parentctx, _parentState);
						pushNewRecursionContext(_localctx, _startState, RULE_directAbstractDeclarator);
						setState(888);
						if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)");
						setState(889);
						match(LeftBracket);
						setState(890);
						match(Static);
						setState(892);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 37383932223488L) != 0)) {
							{
							setState(891);
							typeQualifierList();
							}
						}

						setState(894);
						assignmentExpression();
						setState(895);
						match(RightBracket);
						}
						break;
					case 3:
						{
						_localctx = new DirectAbstractDeclaratorContext(_parentctx, _parentState);
						pushNewRecursionContext(_localctx, _startState, RULE_directAbstractDeclarator);
						setState(897);
						if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)");
						setState(898);
						match(LeftBracket);
						setState(899);
						typeQualifierList();
						setState(900);
						match(Static);
						setState(901);
						assignmentExpression();
						setState(902);
						match(RightBracket);
						}
						break;
					case 4:
						{
						_localctx = new DirectAbstractDeclaratorContext(_parentctx, _parentState);
						pushNewRecursionContext(_localctx, _startState, RULE_directAbstractDeclarator);
						setState(904);
						if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)");
						setState(905);
						match(LeftBracket);
						setState(906);
						match(Star);
						setState(907);
						match(RightBracket);
						}
						break;
					case 5:
						{
						_localctx = new DirectAbstractDeclaratorContext(_parentctx, _parentState);
						pushNewRecursionContext(_localctx, _startState, RULE_directAbstractDeclarator);
						setState(908);
						if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
						setState(909);
						match(OPEN_PARENS);
						setState(911);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 15177580096926208L) != 0) || ((((_la - 103)) & ~0x3f) == 0 && ((1L << (_la - 103)) & 13895671L) != 0)) {
							{
							setState(910);
							parameterTypeList();
							}
						}

						setState(913);
						match(CLOSE_PARENS);
						setState(917);
						_errHandler.sync(this);
						_alt = getInterpreter().adaptivePredict(_input,105,_ctx);
						while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
							if ( _alt==1 ) {
								{
								{
								setState(914);
								gccDeclaratorExtension();
								}
								} 
							}
							setState(919);
							_errHandler.sync(this);
							_alt = getInterpreter().adaptivePredict(_input,105,_ctx);
						}
						}
						break;
					}
					} 
				}
				setState(924);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,107,_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 TypedefNameContext extends ParserRuleContext {
		public TerminalNode Identifier() { return getToken(CParser.Identifier, 0); }
		public TypedefNameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_typedefName; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterTypedefName(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitTypedefName(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitTypedefName(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TypedefNameContext typedefName() throws RecognitionException {
		TypedefNameContext _localctx = new TypedefNameContext(_ctx, getState());
		enterRule(_localctx, 132, RULE_typedefName);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(925);
			match(Identifier);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class InitializerContext extends ParserRuleContext {
		public AssignmentExpressionContext assignmentExpression() {
			return getRuleContext(AssignmentExpressionContext.class,0);
		}
		public TerminalNode LeftBrace() { return getToken(CParser.LeftBrace, 0); }
		public InitializerListContext initializerList() {
			return getRuleContext(InitializerListContext.class,0);
		}
		public TerminalNode RightBrace() { return getToken(CParser.RightBrace, 0); }
		public TerminalNode Comma() { return getToken(CParser.Comma, 0); }
		public InitializerContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_initializer; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterInitializer(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitInitializer(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitInitializer(this);
			else return visitor.visitChildren(this);
		}
	}

	public final InitializerContext initializer() throws RecognitionException {
		InitializerContext _localctx = new InitializerContext(_ctx, getState());
		enterRule(_localctx, 134, RULE_initializer);
		int _la;
		try {
			setState(935);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case Char:
			case Double:
			case Float:
			case Int:
			case Long:
			case Short:
			case Signed:
			case Sizeof:
			case Static:
			case Unsigned:
			case Void:
			case Alignof:
			case Generic:
			case OPEN_PARENS:
			case Plus:
			case PlusPlus:
			case Minus:
			case MinusMinus:
			case Star:
			case And:
			case OP_AND:
			case Not:
			case Tilde:
			case Extenion:
			case EXT_BuiltinVaArg:
			case EXT_BuiltinOffsetof:
			case Identifier:
			case DigitSequence:
			case STRING:
			case Constant:
				enterOuterAlt(_localctx, 1);
				{
				setState(927);
				assignmentExpression();
				}
				break;
			case LeftBrace:
				enterOuterAlt(_localctx, 2);
				{
				setState(928);
				match(LeftBrace);
				setState(929);
				initializerList();
				setState(931);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==Comma) {
					{
					setState(930);
					match(Comma);
					}
				}

				setState(933);
				match(RightBrace);
				}
				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 InitializerListContext extends ParserRuleContext {
		public List initializer() {
			return getRuleContexts(InitializerContext.class);
		}
		public InitializerContext initializer(int i) {
			return getRuleContext(InitializerContext.class,i);
		}
		public List designation() {
			return getRuleContexts(DesignationContext.class);
		}
		public DesignationContext designation(int i) {
			return getRuleContext(DesignationContext.class,i);
		}
		public List Comma() { return getTokens(CParser.Comma); }
		public TerminalNode Comma(int i) {
			return getToken(CParser.Comma, i);
		}
		public InitializerListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_initializerList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterInitializerList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitInitializerList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitInitializerList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final InitializerListContext initializerList() throws RecognitionException {
		InitializerListContext _localctx = new InitializerListContext(_ctx, getState());
		enterRule(_localctx, 136, RULE_initializerList);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(938);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,110,_ctx) ) {
			case 1:
				{
				setState(937);
				designation();
				}
				break;
			}
			setState(940);
			initializer();
			setState(948);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,112,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(941);
					match(Comma);
					setState(943);
					_errHandler.sync(this);
					switch ( getInterpreter().adaptivePredict(_input,111,_ctx) ) {
					case 1:
						{
						setState(942);
						designation();
						}
						break;
					}
					setState(945);
					initializer();
					}
					} 
				}
				setState(950);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,112,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class DesignationContext extends ParserRuleContext {
		public DesignatorListContext designatorList() {
			return getRuleContext(DesignatorListContext.class,0);
		}
		public TerminalNode OP_EQ() { return getToken(CParser.OP_EQ, 0); }
		public DirectDeclaratorContext directDeclarator() {
			return getRuleContext(DirectDeclaratorContext.class,0);
		}
		public DesignationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_designation; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterDesignation(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitDesignation(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitDesignation(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DesignationContext designation() throws RecognitionException {
		DesignationContext _localctx = new DesignationContext(_ctx, getState());
		enterRule(_localctx, 138, RULE_designation);
		try {
			setState(955);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case LeftBracket:
			case Dot:
				enterOuterAlt(_localctx, 1);
				{
				setState(951);
				designatorList();
				setState(952);
				match(OP_EQ);
				}
				break;
			case OPEN_PARENS:
			case EXT_Stdcall:
			case EXT_Cdecl:
			case EXT_Clrcall:
			case EXT_Fastcall:
			case EXT_Thiscall:
			case EXT_Vectorcall:
			case Identifier:
				enterOuterAlt(_localctx, 2);
				{
				setState(954);
				directDeclarator(0);
				}
				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 DesignatorListContext extends ParserRuleContext {
		public List designator() {
			return getRuleContexts(DesignatorContext.class);
		}
		public DesignatorContext designator(int i) {
			return getRuleContext(DesignatorContext.class,i);
		}
		public DesignatorListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_designatorList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterDesignatorList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitDesignatorList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitDesignatorList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DesignatorListContext designatorList() throws RecognitionException {
		DesignatorListContext _localctx = new DesignatorListContext(_ctx, getState());
		enterRule(_localctx, 140, RULE_designatorList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(958); 
			_errHandler.sync(this);
			_la = _input.LA(1);
			do {
				{
				{
				setState(957);
				designator();
				}
				}
				setState(960); 
				_errHandler.sync(this);
				_la = _input.LA(1);
			} while ( _la==LeftBracket || _la==Dot );
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class DesignatorContext extends ParserRuleContext {
		public TerminalNode LeftBracket() { return getToken(CParser.LeftBracket, 0); }
		public ConstantExpressionContext constantExpression() {
			return getRuleContext(ConstantExpressionContext.class,0);
		}
		public TerminalNode RightBracket() { return getToken(CParser.RightBracket, 0); }
		public TerminalNode Dot() { return getToken(CParser.Dot, 0); }
		public TerminalNode Identifier() { return getToken(CParser.Identifier, 0); }
		public DesignatorContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_designator; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterDesignator(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitDesignator(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitDesignator(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DesignatorContext designator() throws RecognitionException {
		DesignatorContext _localctx = new DesignatorContext(_ctx, getState());
		enterRule(_localctx, 142, RULE_designator);
		try {
			setState(968);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case LeftBracket:
				enterOuterAlt(_localctx, 1);
				{
				setState(962);
				match(LeftBracket);
				setState(963);
				constantExpression();
				setState(964);
				match(RightBracket);
				}
				break;
			case Dot:
				enterOuterAlt(_localctx, 2);
				{
				setState(966);
				match(Dot);
				setState(967);
				match(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 StaticAssertDeclarationContext extends ParserRuleContext {
		public TerminalNode StaticAssert() { return getToken(CParser.StaticAssert, 0); }
		public TerminalNode OPEN_PARENS() { return getToken(CParser.OPEN_PARENS, 0); }
		public ConstantExpressionContext constantExpression() {
			return getRuleContext(ConstantExpressionContext.class,0);
		}
		public TerminalNode Comma() { return getToken(CParser.Comma, 0); }
		public TerminalNode CLOSE_PARENS() { return getToken(CParser.CLOSE_PARENS, 0); }
		public TerminalNode Semi() { return getToken(CParser.Semi, 0); }
		public List STRING() { return getTokens(CParser.STRING); }
		public TerminalNode STRING(int i) {
			return getToken(CParser.STRING, i);
		}
		public StaticAssertDeclarationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_staticAssertDeclaration; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterStaticAssertDeclaration(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitStaticAssertDeclaration(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitStaticAssertDeclaration(this);
			else return visitor.visitChildren(this);
		}
	}

	public final StaticAssertDeclarationContext staticAssertDeclaration() throws RecognitionException {
		StaticAssertDeclarationContext _localctx = new StaticAssertDeclarationContext(_ctx, getState());
		enterRule(_localctx, 144, RULE_staticAssertDeclaration);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(970);
			match(StaticAssert);
			setState(971);
			match(OPEN_PARENS);
			setState(972);
			constantExpression();
			setState(973);
			match(Comma);
			setState(975); 
			_errHandler.sync(this);
			_la = _input.LA(1);
			do {
				{
				{
				setState(974);
				match(STRING);
				}
				}
				setState(977); 
				_errHandler.sync(this);
				_la = _input.LA(1);
			} while ( _la==STRING );
			setState(979);
			match(CLOSE_PARENS);
			setState(980);
			match(Semi);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class StatementContext extends ParserRuleContext {
		public NormalStatementContext normalStatement() {
			return getRuleContext(NormalStatementContext.class,0);
		}
		public StatementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_statement; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterStatement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitStatement(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitStatement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final StatementContext statement() throws RecognitionException {
		StatementContext _localctx = new StatementContext(_ctx, getState());
		enterRule(_localctx, 146, RULE_statement);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(982);
			normalStatement();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class NormalStatementContext extends ParserRuleContext {
		public LabeledStatementContext labeledStatement() {
			return getRuleContext(LabeledStatementContext.class,0);
		}
		public CompoundStatementContext compoundStatement() {
			return getRuleContext(CompoundStatementContext.class,0);
		}
		public ExpressionStatementContext expressionStatement() {
			return getRuleContext(ExpressionStatementContext.class,0);
		}
		public SelectionStatementContext selectionStatement() {
			return getRuleContext(SelectionStatementContext.class,0);
		}
		public IterationStatementContext iterationStatement() {
			return getRuleContext(IterationStatementContext.class,0);
		}
		public JumpStatementContext jumpStatement() {
			return getRuleContext(JumpStatementContext.class,0);
		}
		public AsmBodyContext asmBody() {
			return getRuleContext(AsmBodyContext.class,0);
		}
		public TerminalNode EXT_Asm() { return getToken(CParser.EXT_Asm, 0); }
		public TerminalNode EXT_Asm_() { return getToken(CParser.EXT_Asm_, 0); }
		public TerminalNode Volatile() { return getToken(CParser.Volatile, 0); }
		public TerminalNode EXT_Volatile() { return getToken(CParser.EXT_Volatile, 0); }
		public NormalStatementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_normalStatement; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterNormalStatement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitNormalStatement(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitNormalStatement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final NormalStatementContext normalStatement() throws RecognitionException {
		NormalStatementContext _localctx = new NormalStatementContext(_ctx, getState());
		enterRule(_localctx, 148, RULE_normalStatement);
		int _la;
		try {
			setState(995);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,118,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(984);
				labeledStatement();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(985);
				compoundStatement();
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(986);
				expressionStatement();
				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(987);
				selectionStatement();
				}
				break;
			case 5:
				enterOuterAlt(_localctx, 5);
				{
				setState(988);
				iterationStatement();
				}
				break;
			case 6:
				enterOuterAlt(_localctx, 6);
				{
				setState(989);
				jumpStatement();
				}
				break;
			case 7:
				enterOuterAlt(_localctx, 7);
				{
				setState(990);
				_la = _input.LA(1);
				if ( !(_la==EXT_Asm || _la==EXT_Asm_) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(992);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==Volatile || _la==EXT_Volatile) {
					{
					setState(991);
					_la = _input.LA(1);
					if ( !(_la==Volatile || _la==EXT_Volatile) ) {
					_errHandler.recoverInline(this);
					}
					else {
						if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
						_errHandler.reportMatch(this);
						consume();
					}
					}
				}

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

	@SuppressWarnings("CheckReturnValue")
	public static class AsmBodyContext extends ParserRuleContext {
		public TerminalNode OPEN_PARENS() { return getToken(CParser.OPEN_PARENS, 0); }
		public TerminalNode CLOSE_PARENS() { return getToken(CParser.CLOSE_PARENS, 0); }
		public List logicals() {
			return getRuleContexts(LogicalsContext.class);
		}
		public LogicalsContext logicals(int i) {
			return getRuleContext(LogicalsContext.class,i);
		}
		public List Colon() { return getTokens(CParser.Colon); }
		public TerminalNode Colon(int i) {
			return getToken(CParser.Colon, i);
		}
		public TerminalNode Semi() { return getToken(CParser.Semi, 0); }
		public TypeSpecifierContext typeSpecifier() {
			return getRuleContext(TypeSpecifierContext.class,0);
		}
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public AsmBodyContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_asmBody; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterAsmBody(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitAsmBody(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitAsmBody(this);
			else return visitor.visitChildren(this);
		}
	}

	public final AsmBodyContext asmBody() throws RecognitionException {
		AsmBodyContext _localctx = new AsmBodyContext(_ctx, getState());
		enterRule(_localctx, 150, RULE_asmBody);
		int _la;
		try {
			setState(1017);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,123,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(997);
				match(OPEN_PARENS);
				setState(999);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 9307948100751360L) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & 4323457566421037727L) != 0)) {
					{
					setState(998);
					logicals();
					}
				}

				setState(1007);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==Colon) {
					{
					{
					setState(1001);
					match(Colon);
					setState(1003);
					_errHandler.sync(this);
					_la = _input.LA(1);
					if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 9307948100751360L) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & 4323457566421037727L) != 0)) {
						{
						setState(1002);
						logicals();
						}
					}

					}
					}
					setState(1009);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				setState(1010);
				match(CLOSE_PARENS);
				setState(1012);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,122,_ctx) ) {
				case 1:
					{
					setState(1011);
					match(Semi);
					}
					break;
				}
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1014);
				typeSpecifier();
				setState(1015);
				expression();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class LogicalsContext extends ParserRuleContext {
		public List logicalOrExpression() {
			return getRuleContexts(LogicalOrExpressionContext.class);
		}
		public LogicalOrExpressionContext logicalOrExpression(int i) {
			return getRuleContext(LogicalOrExpressionContext.class,i);
		}
		public List Comma() { return getTokens(CParser.Comma); }
		public TerminalNode Comma(int i) {
			return getToken(CParser.Comma, i);
		}
		public LogicalsContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_logicals; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterLogicals(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitLogicals(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitLogicals(this);
			else return visitor.visitChildren(this);
		}
	}

	public final LogicalsContext logicals() throws RecognitionException {
		LogicalsContext _localctx = new LogicalsContext(_ctx, getState());
		enterRule(_localctx, 152, RULE_logicals);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1019);
			logicalOrExpression();
			setState(1024);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==Comma) {
				{
				{
				setState(1020);
				match(Comma);
				setState(1021);
				logicalOrExpression();
				}
				}
				setState(1026);
				_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 LabeledStatementContext extends ParserRuleContext {
		public TerminalNode Identifier() { return getToken(CParser.Identifier, 0); }
		public TerminalNode Colon() { return getToken(CParser.Colon, 0); }
		public StatementContext statement() {
			return getRuleContext(StatementContext.class,0);
		}
		public TerminalNode Case() { return getToken(CParser.Case, 0); }
		public ConstantExpressionContext constantExpression() {
			return getRuleContext(ConstantExpressionContext.class,0);
		}
		public TerminalNode Default() { return getToken(CParser.Default, 0); }
		public LabeledStatementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_labeledStatement; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterLabeledStatement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitLabeledStatement(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitLabeledStatement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final LabeledStatementContext labeledStatement() throws RecognitionException {
		LabeledStatementContext _localctx = new LabeledStatementContext(_ctx, getState());
		enterRule(_localctx, 154, RULE_labeledStatement);
		try {
			setState(1040);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case Identifier:
				enterOuterAlt(_localctx, 1);
				{
				setState(1027);
				match(Identifier);
				setState(1028);
				match(Colon);
				setState(1030);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,125,_ctx) ) {
				case 1:
					{
					setState(1029);
					statement();
					}
					break;
				}
				}
				break;
			case Case:
				enterOuterAlt(_localctx, 2);
				{
				setState(1032);
				match(Case);
				setState(1033);
				constantExpression();
				setState(1034);
				match(Colon);
				setState(1035);
				statement();
				}
				break;
			case Default:
				enterOuterAlt(_localctx, 3);
				{
				setState(1037);
				match(Default);
				setState(1038);
				match(Colon);
				setState(1039);
				statement();
				}
				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 CompoundStatementContext extends ParserRuleContext {
		public TerminalNode LeftBrace() { return getToken(CParser.LeftBrace, 0); }
		public TerminalNode RightBrace() { return getToken(CParser.RightBrace, 0); }
		public BlockItemListContext blockItemList() {
			return getRuleContext(BlockItemListContext.class,0);
		}
		public CompoundStatementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_compoundStatement; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterCompoundStatement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitCompoundStatement(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitCompoundStatement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final CompoundStatementContext compoundStatement() throws RecognitionException {
		CompoundStatementContext _localctx = new CompoundStatementContext(_ctx, getState());
		enterRule(_localctx, 156, RULE_compoundStatement);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1042);
			match(LeftBrace);
			setState(1044);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 161566636631653888L) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & 4450116907894518431L) != 0)) {
				{
				setState(1043);
				blockItemList();
				}
			}

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

	@SuppressWarnings("CheckReturnValue")
	public static class BlockItemListContext extends ParserRuleContext {
		public List blockItem() {
			return getRuleContexts(BlockItemContext.class);
		}
		public BlockItemContext blockItem(int i) {
			return getRuleContext(BlockItemContext.class,i);
		}
		public BlockItemListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_blockItemList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterBlockItemList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitBlockItemList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitBlockItemList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final BlockItemListContext blockItemList() throws RecognitionException {
		BlockItemListContext _localctx = new BlockItemListContext(_ctx, getState());
		enterRule(_localctx, 158, RULE_blockItemList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1049); 
			_errHandler.sync(this);
			_la = _input.LA(1);
			do {
				{
				{
				setState(1048);
				blockItem();
				}
				}
				setState(1051); 
				_errHandler.sync(this);
				_la = _input.LA(1);
			} while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & 161566636631653888L) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & 4450116907894518431L) != 0) );
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class BlockItemContext extends ParserRuleContext {
		public StatementContext statement() {
			return getRuleContext(StatementContext.class,0);
		}
		public DeclarationContext declaration() {
			return getRuleContext(DeclarationContext.class,0);
		}
		public BlockItemContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_blockItem; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterBlockItem(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitBlockItem(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitBlockItem(this);
			else return visitor.visitChildren(this);
		}
	}

	public final BlockItemContext blockItem() throws RecognitionException {
		BlockItemContext _localctx = new BlockItemContext(_ctx, getState());
		enterRule(_localctx, 160, RULE_blockItem);
		try {
			setState(1055);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,129,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1053);
				statement();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1054);
				declaration();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ExpressionStatementContext extends ParserRuleContext {
		public TerminalNode Semi() { return getToken(CParser.Semi, 0); }
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public ExpressionStatementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_expressionStatement; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterExpressionStatement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitExpressionStatement(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitExpressionStatement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ExpressionStatementContext expressionStatement() throws RecognitionException {
		ExpressionStatementContext _localctx = new ExpressionStatementContext(_ctx, getState());
		enterRule(_localctx, 162, RULE_expressionStatement);
		int _la;
		try {
			setState(1065);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,132,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1058);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 9307948100751360L) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & 4323457566421168799L) != 0)) {
					{
					setState(1057);
					expression();
					}
				}

				setState(1060);
				match(Semi);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1061);
				expression();
				setState(1063);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,131,_ctx) ) {
				case 1:
					{
					setState(1062);
					match(Semi);
					}
					break;
				}
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class SelectionStatementContext extends ParserRuleContext {
		public TerminalNode If() { return getToken(CParser.If, 0); }
		public TerminalNode OPEN_PARENS() { return getToken(CParser.OPEN_PARENS, 0); }
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode CLOSE_PARENS() { return getToken(CParser.CLOSE_PARENS, 0); }
		public List statement() {
			return getRuleContexts(StatementContext.class);
		}
		public StatementContext statement(int i) {
			return getRuleContext(StatementContext.class,i);
		}
		public TerminalNode Else() { return getToken(CParser.Else, 0); }
		public TerminalNode Switch() { return getToken(CParser.Switch, 0); }
		public SelectionStatementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_selectionStatement; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterSelectionStatement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitSelectionStatement(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitSelectionStatement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SelectionStatementContext selectionStatement() throws RecognitionException {
		SelectionStatementContext _localctx = new SelectionStatementContext(_ctx, getState());
		enterRule(_localctx, 164, RULE_selectionStatement);
		try {
			setState(1084);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case If:
				enterOuterAlt(_localctx, 1);
				{
				setState(1067);
				match(If);
				setState(1068);
				match(OPEN_PARENS);
				setState(1069);
				expression();
				setState(1070);
				match(CLOSE_PARENS);
				setState(1072);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,133,_ctx) ) {
				case 1:
					{
					setState(1071);
					statement();
					}
					break;
				}
				setState(1076);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,134,_ctx) ) {
				case 1:
					{
					setState(1074);
					match(Else);
					setState(1075);
					statement();
					}
					break;
				}
				}
				break;
			case Switch:
				enterOuterAlt(_localctx, 2);
				{
				setState(1078);
				match(Switch);
				setState(1079);
				match(OPEN_PARENS);
				setState(1080);
				expression();
				setState(1081);
				match(CLOSE_PARENS);
				setState(1082);
				statement();
				}
				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 IterationStatementContext extends ParserRuleContext {
		public TerminalNode While() { return getToken(CParser.While, 0); }
		public TerminalNode OPEN_PARENS() { return getToken(CParser.OPEN_PARENS, 0); }
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode CLOSE_PARENS() { return getToken(CParser.CLOSE_PARENS, 0); }
		public StatementContext statement() {
			return getRuleContext(StatementContext.class,0);
		}
		public TerminalNode Do() { return getToken(CParser.Do, 0); }
		public TerminalNode Semi() { return getToken(CParser.Semi, 0); }
		public TerminalNode For() { return getToken(CParser.For, 0); }
		public ForConditionContext forCondition() {
			return getRuleContext(ForConditionContext.class,0);
		}
		public IterationStatementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_iterationStatement; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterIterationStatement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitIterationStatement(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitIterationStatement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final IterationStatementContext iterationStatement() throws RecognitionException {
		IterationStatementContext _localctx = new IterationStatementContext(_ctx, getState());
		enterRule(_localctx, 166, RULE_iterationStatement);
		try {
			setState(1106);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case While:
				enterOuterAlt(_localctx, 1);
				{
				setState(1086);
				match(While);
				setState(1087);
				match(OPEN_PARENS);
				setState(1088);
				expression();
				setState(1089);
				match(CLOSE_PARENS);
				setState(1090);
				statement();
				}
				break;
			case Do:
				enterOuterAlt(_localctx, 2);
				{
				setState(1092);
				match(Do);
				setState(1093);
				statement();
				setState(1094);
				match(While);
				setState(1095);
				match(OPEN_PARENS);
				setState(1096);
				expression();
				setState(1097);
				match(CLOSE_PARENS);
				setState(1098);
				match(Semi);
				}
				break;
			case For:
				enterOuterAlt(_localctx, 3);
				{
				setState(1100);
				match(For);
				setState(1101);
				match(OPEN_PARENS);
				setState(1102);
				forCondition();
				setState(1103);
				match(CLOSE_PARENS);
				setState(1104);
				statement();
				}
				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 ForConditionContext extends ParserRuleContext {
		public List Semi() { return getTokens(CParser.Semi); }
		public TerminalNode Semi(int i) {
			return getToken(CParser.Semi, i);
		}
		public ForDeclarationContext forDeclaration() {
			return getRuleContext(ForDeclarationContext.class,0);
		}
		public List forExpression() {
			return getRuleContexts(ForExpressionContext.class);
		}
		public ForExpressionContext forExpression(int i) {
			return getRuleContext(ForExpressionContext.class,i);
		}
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public ForConditionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_forCondition; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterForCondition(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitForCondition(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitForCondition(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ForConditionContext forCondition() throws RecognitionException {
		ForConditionContext _localctx = new ForConditionContext(_ctx, getState());
		enterRule(_localctx, 168, RULE_forCondition);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1112);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,138,_ctx) ) {
			case 1:
				{
				setState(1108);
				forDeclaration();
				}
				break;
			case 2:
				{
				setState(1110);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 9307948100751360L) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & 4323457566421168799L) != 0)) {
					{
					setState(1109);
					expression();
					}
				}

				}
				break;
			}
			setState(1114);
			match(Semi);
			setState(1116);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 9307948100751360L) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & 4323457566421037727L) != 0)) {
				{
				setState(1115);
				forExpression();
				}
			}

			setState(1118);
			match(Semi);
			setState(1120);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 9307948100751360L) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & 4323457566421037727L) != 0)) {
				{
				setState(1119);
				forExpression();
				}
			}

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

	@SuppressWarnings("CheckReturnValue")
	public static class ForDeclarationContext extends ParserRuleContext {
		public List declarationSpecifier() {
			return getRuleContexts(DeclarationSpecifierContext.class);
		}
		public DeclarationSpecifierContext declarationSpecifier(int i) {
			return getRuleContext(DeclarationSpecifierContext.class,i);
		}
		public InitDeclaratorListContext initDeclaratorList() {
			return getRuleContext(InitDeclaratorListContext.class,0);
		}
		public ForDeclarationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_forDeclaration; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterForDeclaration(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitForDeclaration(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitForDeclaration(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ForDeclarationContext forDeclaration() throws RecognitionException {
		ForDeclarationContext _localctx = new ForDeclarationContext(_ctx, getState());
		enterRule(_localctx, 170, RULE_forDeclaration);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(1123); 
			_errHandler.sync(this);
			_alt = 1;
			do {
				switch (_alt) {
				case 1:
					{
					{
					setState(1122);
					declarationSpecifier();
					}
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				setState(1125); 
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,141,_ctx);
			} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
			setState(1128);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==OPEN_PARENS || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & 19113910137258113L) != 0)) {
				{
				setState(1127);
				initDeclaratorList();
				}
			}

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

	@SuppressWarnings("CheckReturnValue")
	public static class ForExpressionContext extends ParserRuleContext {
		public List assignmentExpression() {
			return getRuleContexts(AssignmentExpressionContext.class);
		}
		public AssignmentExpressionContext assignmentExpression(int i) {
			return getRuleContext(AssignmentExpressionContext.class,i);
		}
		public List Comma() { return getTokens(CParser.Comma); }
		public TerminalNode Comma(int i) {
			return getToken(CParser.Comma, i);
		}
		public ForExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_forExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterForExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitForExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitForExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ForExpressionContext forExpression() throws RecognitionException {
		ForExpressionContext _localctx = new ForExpressionContext(_ctx, getState());
		enterRule(_localctx, 172, RULE_forExpression);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1130);
			assignmentExpression();
			setState(1135);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==Comma) {
				{
				{
				setState(1131);
				match(Comma);
				setState(1132);
				assignmentExpression();
				}
				}
				setState(1137);
				_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 JumpStatementContext extends ParserRuleContext {
		public TerminalNode Semi() { return getToken(CParser.Semi, 0); }
		public TerminalNode Goto() { return getToken(CParser.Goto, 0); }
		public TerminalNode Identifier() { return getToken(CParser.Identifier, 0); }
		public TerminalNode Continue() { return getToken(CParser.Continue, 0); }
		public TerminalNode Break() { return getToken(CParser.Break, 0); }
		public TerminalNode Return() { return getToken(CParser.Return, 0); }
		public UnaryExpressionContext unaryExpression() {
			return getRuleContext(UnaryExpressionContext.class,0);
		}
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public JumpStatementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_jumpStatement; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterJumpStatement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitJumpStatement(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitJumpStatement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final JumpStatementContext jumpStatement() throws RecognitionException {
		JumpStatementContext _localctx = new JumpStatementContext(_ctx, getState());
		enterRule(_localctx, 174, RULE_jumpStatement);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1148);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,145,_ctx) ) {
			case 1:
				{
				setState(1138);
				match(Goto);
				setState(1139);
				match(Identifier);
				}
				break;
			case 2:
				{
				setState(1140);
				match(Continue);
				}
				break;
			case 3:
				{
				setState(1141);
				match(Break);
				}
				break;
			case 4:
				{
				setState(1142);
				match(Return);
				setState(1144);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 9307948100751360L) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & 4323457566421168799L) != 0)) {
					{
					setState(1143);
					expression();
					}
				}

				}
				break;
			case 5:
				{
				setState(1146);
				match(Goto);
				setState(1147);
				unaryExpression();
				}
				break;
			}
			setState(1150);
			match(Semi);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ExternalDeclarationContext extends ParserRuleContext {
		public FunctionDefinitionContext functionDefinition() {
			return getRuleContext(FunctionDefinitionContext.class,0);
		}
		public DeclarationContext declaration() {
			return getRuleContext(DeclarationContext.class,0);
		}
		public TerminalNode Semi() { return getToken(CParser.Semi, 0); }
		public ExternalDeclarationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_externalDeclaration; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterExternalDeclaration(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitExternalDeclaration(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitExternalDeclaration(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ExternalDeclarationContext externalDeclaration() throws RecognitionException {
		ExternalDeclarationContext _localctx = new ExternalDeclarationContext(_ctx, getState());
		enterRule(_localctx, 176, RULE_externalDeclaration);
		try {
			setState(1155);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,146,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1152);
				functionDefinition();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1153);
				declaration();
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(1154);
				match(Semi);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class FunctionDefinitionContext extends ParserRuleContext {
		public DeclaratorContext declarator() {
			return getRuleContext(DeclaratorContext.class,0);
		}
		public CompoundStatementContext compoundStatement() {
			return getRuleContext(CompoundStatementContext.class,0);
		}
		public DeclarationListContext declarationList() {
			return getRuleContext(DeclarationListContext.class,0);
		}
		public List declarationSpecifier() {
			return getRuleContexts(DeclarationSpecifierContext.class);
		}
		public DeclarationSpecifierContext declarationSpecifier(int i) {
			return getRuleContext(DeclarationSpecifierContext.class,i);
		}
		public FunctionDefinitionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_functionDefinition; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterFunctionDefinition(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitFunctionDefinition(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitFunctionDefinition(this);
			else return visitor.visitChildren(this);
		}
	}

	public final FunctionDefinitionContext functionDefinition() throws RecognitionException {
		FunctionDefinitionContext _localctx = new FunctionDefinitionContext(_ctx, getState());
		enterRule(_localctx, 178, RULE_functionDefinition);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(1162);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,148,_ctx) ) {
			case 1:
				{
				setState(1158); 
				_errHandler.sync(this);
				_alt = 1;
				do {
					switch (_alt) {
					case 1:
						{
						{
						setState(1157);
						declarationSpecifier();
						}
						}
						break;
					default:
						throw new NoViableAltException(this);
					}
					setState(1160); 
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,147,_ctx);
				} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
				}
				break;
			}
			setState(1164);
			declarator();
			setState(1166);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 17429379910611456L) != 0) || ((((_la - 103)) & ~0x3f) == 0 && ((1L << (_la - 103)) & 13895671L) != 0)) {
				{
				setState(1165);
				declarationList();
				}
			}

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

	@SuppressWarnings("CheckReturnValue")
	public static class DeclarationListContext extends ParserRuleContext {
		public List declaration() {
			return getRuleContexts(DeclarationContext.class);
		}
		public DeclarationContext declaration(int i) {
			return getRuleContext(DeclarationContext.class,i);
		}
		public DeclarationListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_declarationList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterDeclarationList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitDeclarationList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitDeclarationList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DeclarationListContext declarationList() throws RecognitionException {
		DeclarationListContext _localctx = new DeclarationListContext(_ctx, getState());
		enterRule(_localctx, 180, RULE_declarationList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1171); 
			_errHandler.sync(this);
			_la = _input.LA(1);
			do {
				{
				{
				setState(1170);
				declaration();
				}
				}
				setState(1173); 
				_errHandler.sync(this);
				_la = _input.LA(1);
			} while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & 17429379910611456L) != 0) || ((((_la - 103)) & ~0x3f) == 0 && ((1L << (_la - 103)) & 13895671L) != 0) );
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class TypeKeywordsContext extends ParserRuleContext {
		public TerminalNode Char() { return getToken(CParser.Char, 0); }
		public TerminalNode Short() { return getToken(CParser.Short, 0); }
		public TerminalNode Int() { return getToken(CParser.Int, 0); }
		public TerminalNode Long() { return getToken(CParser.Long, 0); }
		public TerminalNode Float() { return getToken(CParser.Float, 0); }
		public TerminalNode Double() { return getToken(CParser.Double, 0); }
		public TerminalNode Signed() { return getToken(CParser.Signed, 0); }
		public TerminalNode Unsigned() { return getToken(CParser.Unsigned, 0); }
		public TerminalNode Void() { return getToken(CParser.Void, 0); }
		public TerminalNode Static() { return getToken(CParser.Static, 0); }
		public TypeKeywordsContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_typeKeywords; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterTypeKeywords(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitTypeKeywords(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitTypeKeywords(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TypeKeywordsContext typeKeywords() throws RecognitionException {
		TypeKeywordsContext _localctx = new TypeKeywordsContext(_ctx, getState());
		enterRule(_localctx, 182, RULE_typeKeywords);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1175);
			_la = _input.LA(1);
			if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 1673093320704L) != 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 KeywordsContext extends ParserRuleContext {
		public TerminalNode Float() { return getToken(CParser.Float, 0); }
		public TerminalNode Double() { return getToken(CParser.Double, 0); }
		public TerminalNode Char() { return getToken(CParser.Char, 0); }
		public TerminalNode Int() { return getToken(CParser.Int, 0); }
		public TerminalNode Long() { return getToken(CParser.Long, 0); }
		public TerminalNode Short() { return getToken(CParser.Short, 0); }
		public TerminalNode Signed() { return getToken(CParser.Signed, 0); }
		public TerminalNode Unsigned() { return getToken(CParser.Unsigned, 0); }
		public TerminalNode Void() { return getToken(CParser.Void, 0); }
		public TerminalNode Const() { return getToken(CParser.Const, 0); }
		public TerminalNode Volatile() { return getToken(CParser.Volatile, 0); }
		public TerminalNode Extern() { return getToken(CParser.Extern, 0); }
		public TerminalNode Static() { return getToken(CParser.Static, 0); }
		public TerminalNode Auto() { return getToken(CParser.Auto, 0); }
		public TerminalNode Register() { return getToken(CParser.Register, 0); }
		public TerminalNode Typedef() { return getToken(CParser.Typedef, 0); }
		public TerminalNode Struct() { return getToken(CParser.Struct, 0); }
		public TerminalNode Union() { return getToken(CParser.Union, 0); }
		public TerminalNode Enum() { return getToken(CParser.Enum, 0); }
		public TerminalNode Case() { return getToken(CParser.Case, 0); }
		public TerminalNode Default() { return getToken(CParser.Default, 0); }
		public TerminalNode If() { return getToken(CParser.If, 0); }
		public TerminalNode Else() { return getToken(CParser.Else, 0); }
		public TerminalNode Switch() { return getToken(CParser.Switch, 0); }
		public TerminalNode While() { return getToken(CParser.While, 0); }
		public TerminalNode Do() { return getToken(CParser.Do, 0); }
		public TerminalNode For() { return getToken(CParser.For, 0); }
		public TerminalNode Goto() { return getToken(CParser.Goto, 0); }
		public TerminalNode Continue() { return getToken(CParser.Continue, 0); }
		public TerminalNode Break() { return getToken(CParser.Break, 0); }
		public TerminalNode Return() { return getToken(CParser.Return, 0); }
		public KeywordsContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_keywords; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).enterKeywords(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof CParserListener ) ((CParserListener)listener).exitKeywords(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof CParserVisitor ) return ((CParserVisitor)visitor).visitKeywords(this);
			else return visitor.visitChildren(this);
		}
	}

	public final KeywordsContext keywords() throws RecognitionException {
		KeywordsContext _localctx = new KeywordsContext(_ctx, getState());
		enterRule(_localctx, 184, RULE_keywords);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1177);
			_la = _input.LA(1);
			if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 8786932661760L) != 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;
	}

	public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
		switch (ruleIndex) {
		case 50:
			return directDeclarator_sempred((DirectDeclaratorContext)_localctx, predIndex);
		case 65:
			return directAbstractDeclarator_sempred((DirectAbstractDeclaratorContext)_localctx, predIndex);
		}
		return true;
	}
	private boolean directDeclarator_sempred(DirectDeclaratorContext _localctx, int predIndex) {
		switch (predIndex) {
		case 0:
			return precpred(_ctx, 9);
		case 1:
			return precpred(_ctx, 8);
		case 2:
			return precpred(_ctx, 7);
		case 3:
			return precpred(_ctx, 6);
		case 4:
			return precpred(_ctx, 5);
		case 5:
			return precpred(_ctx, 4);
		}
		return true;
	}
	private boolean directAbstractDeclarator_sempred(DirectAbstractDeclaratorContext _localctx, int predIndex) {
		switch (predIndex) {
		case 6:
			return precpred(_ctx, 5);
		case 7:
			return precpred(_ctx, 4);
		case 8:
			return precpred(_ctx, 3);
		case 9:
			return precpred(_ctx, 2);
		case 10:
			return precpred(_ctx, 1);
		}
		return true;
	}

	public static final String _serializedATN =
		"\u0004\u0001\u0097\u049c\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\\\u0001\u0000\u0005\u0000"+
		"\u00bc\b\u0000\n\u0000\f\u0000\u00bf\t\u0000\u0001\u0000\u0001\u0000\u0001"+
		"\u0001\u0001\u0001\u0001\u0001\u0004\u0001\u00c6\b\u0001\u000b\u0001\f"+
		"\u0001\u00c7\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
		"\u0001\u0001\u0003\u0001\u00d0\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\u0005\u0001"+
		"\u00e6\b\u0001\n\u0001\f\u0001\u00e9\t\u0001\u0001\u0001\u0003\u0001\u00ec"+
		"\b\u0001\u0003\u0001\u00ee\b\u0001\u0001\u0002\u0001\u0002\u0001\u0002"+
		"\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003"+
		"\u0001\u0003\u0005\u0003\u00fa\b\u0003\n\u0003\f\u0003\u00fd\t\u0003\u0001"+
		"\u0004\u0001\u0004\u0003\u0004\u0101\b\u0004\u0001\u0004\u0001\u0004\u0001"+
		"\u0004\u0001\u0005\u0001\u0005\u0003\u0005\u0108\b\u0005\u0001\u0005\u0001"+
		"\u0005\u0001\u0005\u0005\u0005\u010d\b\u0005\n\u0005\f\u0005\u0110\t\u0005"+
		"\u0001\u0006\u0003\u0006\u0113\b\u0006\u0001\u0006\u0001\u0006\u0001\u0006"+
		"\u0001\u0006\u0001\u0006\u0001\u0006\u0003\u0006\u011b\b\u0006\u0001\u0006"+
		"\u0001\u0006\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+
		"\u0001\u0007\u0003\u0007\u0125\b\u0007\u0001\u0007\u0003\u0007\u0128\b"+
		"\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0003\u0007\u012d\b\u0007\u0001"+
		"\b\u0001\b\u0001\b\u0005\b\u0132\b\b\n\b\f\b\u0135\t\b\u0001\t\u0005\t"+
		"\u0138\b\t\n\t\f\t\u013b\t\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001"+
		"\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0003\t\u0148\b\t\u0001\n\u0001"+
		"\n\u0001\u000b\u0003\u000b\u014d\b\u000b\u0001\u000b\u0001\u000b\u0001"+
		"\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0003\u000b\u0156"+
		"\b\u000b\u0001\f\u0001\f\u0001\f\u0005\f\u015b\b\f\n\f\f\f\u015e\t\f\u0001"+
		"\r\u0001\r\u0001\r\u0005\r\u0163\b\r\n\r\f\r\u0166\t\r\u0001\u000e\u0001"+
		"\u000e\u0001\u000e\u0005\u000e\u016b\b\u000e\n\u000e\f\u000e\u016e\t\u000e"+
		"\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0005\u000f\u0174\b\u000f"+
		"\n\u000f\f\u000f\u0177\t\u000f\u0001\u0010\u0001\u0010\u0001\u0011\u0001"+
		"\u0011\u0001\u0011\u0005\u0011\u017e\b\u0011\n\u0011\f\u0011\u0181\t\u0011"+
		"\u0001\u0012\u0001\u0012\u0001\u0012\u0005\u0012\u0186\b\u0012\n\u0012"+
		"\f\u0012\u0189\t\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0005\u0013"+
		"\u018e\b\u0013\n\u0013\f\u0013\u0191\t\u0013\u0001\u0014\u0001\u0014\u0001"+
		"\u0014\u0005\u0014\u0196\b\u0014\n\u0014\f\u0014\u0199\t\u0014\u0001\u0015"+
		"\u0001\u0015\u0001\u0015\u0005\u0015\u019e\b\u0015\n\u0015\f\u0015\u01a1"+
		"\t\u0015\u0001\u0016\u0001\u0016\u0001\u0016\u0005\u0016\u01a6\b\u0016"+
		"\n\u0016\f\u0016\u01a9\t\u0016\u0001\u0017\u0001\u0017\u0001\u0017\u0001"+
		"\u0017\u0001\u0017\u0001\u0017\u0003\u0017\u01b1\b\u0017\u0001\u0018\u0001"+
		"\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0003\u0018\u01b9"+
		"\b\u0018\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001a\u0005"+
		"\u001a\u01c0\b\u001a\n\u001a\f\u001a\u01c3\t\u001a\u0001\u001a\u0003\u001a"+
		"\u01c6\b\u001a\u0001\u001b\u0001\u001b\u0001\u001c\u0003\u001c\u01cb\b"+
		"\u001c\u0001\u001c\u0004\u001c\u01ce\b\u001c\u000b\u001c\f\u001c\u01cf"+
		"\u0001\u001c\u0003\u001c\u01d3\b\u001c\u0001\u001c\u0001\u001c\u0001\u001c"+
		"\u0003\u001c\u01d8\b\u001c\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d"+
		"\u0001\u001d\u0003\u001d\u01df\b\u001d\u0001\u001e\u0001\u001e\u0001\u001e"+
		"\u0005\u001e\u01e4\b\u001e\n\u001e\f\u001e\u01e7\t\u001e\u0001\u001f\u0001"+
		"\u001f\u0001\u001f\u0003\u001f\u01ec\b\u001f\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!\u020c\b!\u0001\"\u0001"+
		"\"\u0003\"\u0210\b\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
		"\"\u0003\"\u0219\b\"\u0001#\u0001#\u0001$\u0004$\u021e\b$\u000b$\f$\u021f"+
		"\u0001%\u0001%\u0003%\u0224\b%\u0001%\u0001%\u0001%\u0003%\u0229\b%\u0001"+
		"&\u0001&\u0003&\u022d\b&\u0001&\u0003&\u0230\b&\u0001\'\u0001\'\u0001"+
		"\'\u0005\'\u0235\b\'\n\'\f\'\u0238\t\'\u0001(\u0001(\u0003(\u023c\b(\u0001"+
		"(\u0001(\u0003(\u0240\b(\u0001)\u0001)\u0003)\u0244\b)\u0001)\u0001)\u0001"+
		")\u0003)\u0249\b)\u0001)\u0001)\u0001)\u0001)\u0003)\u024f\b)\u0001*\u0001"+
		"*\u0001*\u0005*\u0254\b*\n*\f*\u0257\t*\u0001+\u0001+\u0001+\u0003+\u025c"+
		"\b+\u0001,\u0001,\u0001-\u0001-\u0001-\u0001-\u0001-\u0001.\u0001.\u0001"+
		"/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0003/\u0270"+
		"\b/\u00010\u00010\u00010\u00010\u00030\u0276\b0\u00010\u00010\u00011\u0003"+
		"1\u027b\b1\u00011\u00011\u00051\u027f\b1\n1\f1\u0282\t1\u00012\u00012"+
		"\u00012\u00012\u00012\u00012\u00012\u00012\u00012\u00012\u00012\u0001"+
		"2\u00012\u00012\u00032\u0292\b2\u00012\u00012\u00012\u00012\u00032\u0298"+
		"\b2\u00012\u00012\u00012\u00032\u029d\b2\u00012\u00032\u02a0\b2\u0001"+
		"2\u00012\u00012\u00012\u00012\u00032\u02a7\b2\u00012\u00012\u00012\u0001"+
		"2\u00012\u00012\u00012\u00012\u00012\u00012\u00012\u00012\u00012\u0003"+
		"2\u02b6\b2\u00012\u00012\u00012\u00012\u00012\u00012\u00012\u00012\u0001"+
		"2\u00012\u00032\u02c2\b2\u00012\u00052\u02c5\b2\n2\f2\u02c8\t2\u00013"+
		"\u00013\u00014\u00014\u00014\u00044\u02cf\b4\u000b4\f4\u02d0\u00014\u0001"+
		"4\u00034\u02d5\b4\u00015\u00015\u00015\u00015\u00015\u00015\u00015\u0001"+
		"6\u00036\u02df\b6\u00016\u00016\u00036\u02e3\b6\u00056\u02e5\b6\n6\f6"+
		"\u02e8\t6\u00017\u00017\u00017\u00037\u02ed\b7\u00017\u00037\u02f0\b7"+
		"\u00018\u00018\u00018\u00018\u00018\u00058\u02f7\b8\n8\f8\u02fa\t8\u0001"+
		"9\u00019\u00039\u02fe\b9\u00049\u0300\b9\u000b9\f9\u0301\u0001:\u0004"+
		":\u0305\b:\u000b:\f:\u0306\u0001;\u0001;\u0001;\u0003;\u030c\b;\u0001"+
		"<\u0001<\u0001<\u0005<\u0311\b<\n<\f<\u0314\t<\u0001=\u0004=\u0317\b="+
		"\u000b=\f=\u0318\u0001=\u0001=\u0001=\u0004=\u031e\b=\u000b=\f=\u031f"+
		"\u0001=\u0003=\u0323\b=\u0003=\u0325\b=\u0001>\u0001>\u0001>\u0005>\u032a"+
		"\b>\n>\f>\u032d\t>\u0001?\u0001?\u0003?\u0331\b?\u0001@\u0001@\u0003@"+
		"\u0335\b@\u0001@\u0001@\u0005@\u0339\b@\n@\f@\u033c\t@\u0003@\u033e\b"+
		"@\u0001A\u0001A\u0001A\u0001A\u0001A\u0005A\u0345\bA\nA\fA\u0348\tA\u0001"+
		"A\u0001A\u0003A\u034c\bA\u0001A\u0003A\u034f\bA\u0001A\u0001A\u0001A\u0001"+
		"A\u0003A\u0355\bA\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001"+
		"A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0003A\u0365\bA\u0001A\u0001"+
		"A\u0005A\u0369\bA\nA\fA\u036c\tA\u0003A\u036e\bA\u0001A\u0001A\u0001A"+
		"\u0003A\u0373\bA\u0001A\u0003A\u0376\bA\u0001A\u0001A\u0001A\u0001A\u0001"+
		"A\u0003A\u037d\bA\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001"+
		"A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0003"+
		"A\u0390\bA\u0001A\u0001A\u0005A\u0394\bA\nA\fA\u0397\tA\u0005A\u0399\b"+
		"A\nA\fA\u039c\tA\u0001B\u0001B\u0001C\u0001C\u0001C\u0001C\u0003C\u03a4"+
		"\bC\u0001C\u0001C\u0003C\u03a8\bC\u0001D\u0003D\u03ab\bD\u0001D\u0001"+
		"D\u0001D\u0003D\u03b0\bD\u0001D\u0005D\u03b3\bD\nD\fD\u03b6\tD\u0001E"+
		"\u0001E\u0001E\u0001E\u0003E\u03bc\bE\u0001F\u0004F\u03bf\bF\u000bF\f"+
		"F\u03c0\u0001G\u0001G\u0001G\u0001G\u0001G\u0001G\u0003G\u03c9\bG\u0001"+
		"H\u0001H\u0001H\u0001H\u0001H\u0004H\u03d0\bH\u000bH\fH\u03d1\u0001H\u0001"+
		"H\u0001H\u0001I\u0001I\u0001J\u0001J\u0001J\u0001J\u0001J\u0001J\u0001"+
		"J\u0001J\u0003J\u03e1\bJ\u0001J\u0003J\u03e4\bJ\u0001K\u0001K\u0003K\u03e8"+
		"\bK\u0001K\u0001K\u0003K\u03ec\bK\u0005K\u03ee\bK\nK\fK\u03f1\tK\u0001"+
		"K\u0001K\u0003K\u03f5\bK\u0001K\u0001K\u0001K\u0003K\u03fa\bK\u0001L\u0001"+
		"L\u0001L\u0005L\u03ff\bL\nL\fL\u0402\tL\u0001M\u0001M\u0001M\u0003M\u0407"+
		"\bM\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0003M\u0411"+
		"\bM\u0001N\u0001N\u0003N\u0415\bN\u0001N\u0001N\u0001O\u0004O\u041a\b"+
		"O\u000bO\fO\u041b\u0001P\u0001P\u0003P\u0420\bP\u0001Q\u0003Q\u0423\b"+
		"Q\u0001Q\u0001Q\u0001Q\u0003Q\u0428\bQ\u0003Q\u042a\bQ\u0001R\u0001R\u0001"+
		"R\u0001R\u0001R\u0003R\u0431\bR\u0001R\u0001R\u0003R\u0435\bR\u0001R\u0001"+
		"R\u0001R\u0001R\u0001R\u0001R\u0003R\u043d\bR\u0001S\u0001S\u0001S\u0001"+
		"S\u0001S\u0001S\u0001S\u0001S\u0001S\u0001S\u0001S\u0001S\u0001S\u0001"+
		"S\u0001S\u0001S\u0001S\u0001S\u0001S\u0001S\u0003S\u0453\bS\u0001T\u0001"+
		"T\u0003T\u0457\bT\u0003T\u0459\bT\u0001T\u0001T\u0003T\u045d\bT\u0001"+
		"T\u0001T\u0003T\u0461\bT\u0001U\u0004U\u0464\bU\u000bU\fU\u0465\u0001"+
		"U\u0003U\u0469\bU\u0001V\u0001V\u0001V\u0005V\u046e\bV\nV\fV\u0471\tV"+
		"\u0001W\u0001W\u0001W\u0001W\u0001W\u0001W\u0003W\u0479\bW\u0001W\u0001"+
		"W\u0003W\u047d\bW\u0001W\u0001W\u0001X\u0001X\u0001X\u0003X\u0484\bX\u0001"+
		"Y\u0004Y\u0487\bY\u000bY\fY\u0488\u0003Y\u048b\bY\u0001Y\u0001Y\u0003"+
		"Y\u048f\bY\u0001Y\u0001Y\u0001Z\u0004Z\u0494\bZ\u000bZ\fZ\u0495\u0001"+
		"[\u0001[\u0001\\\u0001\\\u0001\\\u0000\u0002d\u0082]\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\u0000\u0016\u0001\u0000`a\u0003\u0000!!BBDD\u0002\u0000!!,,\u0005"+
		"\u0000AACCEEHHMN\u0001\u0000EG\u0002\u0000AACC\u0001\u0000?@\u0001\u0000"+
		";>\u0001\u0000^_\u0001\u0000S]\u0006\u0000\t\t\u0014\u0014\u001c\u001c"+
		"\"\"%%44\u0001\u0000km\u0002\u0000##&&\u0004\u0000\r\r\u001d\u001d))-"+
		"-\u0002\u0000pprv\u0002\u000056RR\u0001\u000056\u0002\u0000EELL\u0001"+
		"\u0000wx\u0002\u0000))zz\u0007\u0000\f\f\u0011\u0011\u0015\u0015\u001a"+
		"\u001b\u001f \"\"\'(\u0004\u0000\t\u0018\u001a\u001c\u001e \"*\u0515\u0000"+
		"\u00bd\u0001\u0000\u0000\u0000\u0002\u00ed\u0001\u0000\u0000\u0000\u0004"+
		"\u00ef\u0001\u0000\u0000\u0000\u0006\u00f6\u0001\u0000\u0000\u0000\b\u0100"+
		"\u0001\u0000\u0000\u0000\n\u0107\u0001\u0000\u0000\u0000\f\u0112\u0001"+
		"\u0000\u0000\u0000\u000e\u012c\u0001\u0000\u0000\u0000\u0010\u012e\u0001"+
		"\u0000\u0000\u0000\u0012\u0139\u0001\u0000\u0000\u0000\u0014\u0149\u0001"+
		"\u0000\u0000\u0000\u0016\u0155\u0001\u0000\u0000\u0000\u0018\u0157\u0001"+
		"\u0000\u0000\u0000\u001a\u015f\u0001\u0000\u0000\u0000\u001c\u0167\u0001"+
		"\u0000\u0000\u0000\u001e\u016f\u0001\u0000\u0000\u0000 \u0178\u0001\u0000"+
		"\u0000\u0000\"\u017a\u0001\u0000\u0000\u0000$\u0182\u0001\u0000\u0000"+
		"\u0000&\u018a\u0001\u0000\u0000\u0000(\u0192\u0001\u0000\u0000\u0000*"+
		"\u019a\u0001\u0000\u0000\u0000,\u01a2\u0001\u0000\u0000\u0000.\u01aa\u0001"+
		"\u0000\u0000\u00000\u01b8\u0001\u0000\u0000\u00002\u01ba\u0001\u0000\u0000"+
		"\u00004\u01c5\u0001\u0000\u0000\u00006\u01c7\u0001\u0000\u0000\u00008"+
		"\u01d7\u0001\u0000\u0000\u0000:\u01de\u0001\u0000\u0000\u0000<\u01e0\u0001"+
		"\u0000\u0000\u0000>\u01e8\u0001\u0000\u0000\u0000@\u01ed\u0001\u0000\u0000"+
		"\u0000B\u020b\u0001\u0000\u0000\u0000D\u0218\u0001\u0000\u0000\u0000F"+
		"\u021a\u0001\u0000\u0000\u0000H\u021d\u0001\u0000\u0000\u0000J\u0228\u0001"+
		"\u0000\u0000\u0000L\u022c\u0001\u0000\u0000\u0000N\u0231\u0001\u0000\u0000"+
		"\u0000P\u023f\u0001\u0000\u0000\u0000R\u024e\u0001\u0000\u0000\u0000T"+
		"\u0250\u0001\u0000\u0000\u0000V\u0258\u0001\u0000\u0000\u0000X\u025d\u0001"+
		"\u0000\u0000\u0000Z\u025f\u0001\u0000\u0000\u0000\\\u0264\u0001\u0000"+
		"\u0000\u0000^\u026f\u0001\u0000\u0000\u0000`\u0271\u0001\u0000\u0000\u0000"+
		"b\u027a\u0001\u0000\u0000\u0000d\u0297\u0001\u0000\u0000\u0000f\u02c9"+
		"\u0001\u0000\u0000\u0000h\u02d4\u0001\u0000\u0000\u0000j\u02d6\u0001\u0000"+
		"\u0000\u0000l\u02de\u0001\u0000\u0000\u0000n\u02e9\u0001\u0000\u0000\u0000"+
		"p\u02f8\u0001\u0000\u0000\u0000r\u02ff\u0001\u0000\u0000\u0000t\u0304"+
		"\u0001\u0000\u0000\u0000v\u0308\u0001\u0000\u0000\u0000x\u030d\u0001\u0000"+
		"\u0000\u0000z\u0324\u0001\u0000\u0000\u0000|\u0326\u0001\u0000\u0000\u0000"+
		"~\u032e\u0001\u0000\u0000\u0000\u0080\u033d\u0001\u0000\u0000\u0000\u0082"+
		"\u036d\u0001\u0000\u0000\u0000\u0084\u039d\u0001\u0000\u0000\u0000\u0086"+
		"\u03a7\u0001\u0000\u0000\u0000\u0088\u03aa\u0001\u0000\u0000\u0000\u008a"+
		"\u03bb\u0001\u0000\u0000\u0000\u008c\u03be\u0001\u0000\u0000\u0000\u008e"+
		"\u03c8\u0001\u0000\u0000\u0000\u0090\u03ca\u0001\u0000\u0000\u0000\u0092"+
		"\u03d6\u0001\u0000\u0000\u0000\u0094\u03e3\u0001\u0000\u0000\u0000\u0096"+
		"\u03f9\u0001\u0000\u0000\u0000\u0098\u03fb\u0001\u0000\u0000\u0000\u009a"+
		"\u0410\u0001\u0000\u0000\u0000\u009c\u0412\u0001\u0000\u0000\u0000\u009e"+
		"\u0419\u0001\u0000\u0000\u0000\u00a0\u041f\u0001\u0000\u0000\u0000\u00a2"+
		"\u0429\u0001\u0000\u0000\u0000\u00a4\u043c\u0001\u0000\u0000\u0000\u00a6"+
		"\u0452\u0001\u0000\u0000\u0000\u00a8\u0458\u0001\u0000\u0000\u0000\u00aa"+
		"\u0463\u0001\u0000\u0000\u0000\u00ac\u046a\u0001\u0000\u0000\u0000\u00ae"+
		"\u047c\u0001\u0000\u0000\u0000\u00b0\u0483\u0001\u0000\u0000\u0000\u00b2"+
		"\u048a\u0001\u0000\u0000\u0000\u00b4\u0493\u0001\u0000\u0000\u0000\u00b6"+
		"\u0497\u0001\u0000\u0000\u0000\u00b8\u0499\u0001\u0000\u0000\u0000\u00ba"+
		"\u00bc\u0003\u00b0X\u0000\u00bb\u00ba\u0001\u0000\u0000\u0000\u00bc\u00bf"+
		"\u0001\u0000\u0000\u0000\u00bd\u00bb\u0001\u0000\u0000\u0000\u00bd\u00be"+
		"\u0001\u0000\u0000\u0000\u00be\u00c0\u0001\u0000\u0000\u0000\u00bf\u00bd"+
		"\u0001\u0000\u0000\u0000\u00c0\u00c1\u0005\u0000\u0000\u0001\u00c1\u0001"+
		"\u0001\u0000\u0000\u0000\u00c2\u00ee\u0005{\u0000\u0000\u00c3\u00ee\u0005"+
		"~\u0000\u0000\u00c4\u00c6\u0005}\u0000\u0000\u00c5\u00c4\u0001\u0000\u0000"+
		"\u0000\u00c6\u00c7\u0001\u0000\u0000\u0000\u00c7\u00c5\u0001\u0000\u0000"+
		"\u0000\u00c7\u00c8\u0001\u0000\u0000\u0000\u00c8\u00ee\u0001\u0000\u0000"+
		"\u0000\u00c9\u00ca\u00055\u0000\u0000\u00ca\u00cb\u00034\u001a\u0000\u00cb"+
		"\u00cc\u00056\u0000\u0000\u00cc\u00ee\u0001\u0000\u0000\u0000\u00cd\u00ee"+
		"\u0003\u0004\u0002\u0000\u00ce\u00d0\u0005g\u0000\u0000\u00cf\u00ce\u0001"+
		"\u0000\u0000\u0000\u00cf\u00d0\u0001\u0000\u0000\u0000\u00d0\u00d1\u0001"+
		"\u0000\u0000\u0000\u00d1\u00d2\u00055\u0000\u0000\u00d2\u00d3\u0003\u009c"+
		"N\u0000\u00d3\u00d4\u00056\u0000\u0000\u00d4\u00ee\u0001\u0000\u0000\u0000"+
		"\u00d5\u00d6\u0005h\u0000\u0000\u00d6\u00d7\u00055\u0000\u0000\u00d7\u00d8"+
		"\u0003\u0012\t\u0000\u00d8\u00d9\u0005R\u0000\u0000\u00d9\u00da\u0003"+
		"~?\u0000\u00da\u00db\u00056\u0000\u0000\u00db\u00ee\u0001\u0000\u0000"+
		"\u0000\u00dc\u00dd\u0005i\u0000\u0000\u00dd\u00de\u00055\u0000\u0000\u00de"+
		"\u00df\u0003~?\u0000\u00df\u00e0\u0005R\u0000\u0000\u00e0\u00e1\u0003"+
		"\u0012\t\u0000\u00e1\u00e2\u00056\u0000\u0000\u00e2\u00ee\u0001\u0000"+
		"\u0000\u0000\u00e3\u00e7\u0003\u00b6[\u0000\u00e4\u00e6\u0003\u00b6[\u0000"+
		"\u00e5\u00e4\u0001\u0000\u0000\u0000\u00e6\u00e9\u0001\u0000\u0000\u0000"+
		"\u00e7\u00e5\u0001\u0000\u0000\u0000\u00e7\u00e8\u0001\u0000\u0000\u0000"+
		"\u00e8\u00eb\u0001\u0000\u0000\u0000\u00e9\u00e7\u0001\u0000\u0000\u0000"+
		"\u00ea\u00ec\u0003r9\u0000\u00eb\u00ea\u0001\u0000\u0000\u0000\u00eb\u00ec"+
		"\u0001\u0000\u0000\u0000\u00ec\u00ee\u0001\u0000\u0000\u0000\u00ed\u00c2"+
		"\u0001\u0000\u0000\u0000\u00ed\u00c3\u0001\u0000\u0000\u0000\u00ed\u00c5"+
		"\u0001\u0000\u0000\u0000\u00ed\u00c9\u0001\u0000\u0000\u0000\u00ed\u00cd"+
		"\u0001\u0000\u0000\u0000\u00ed\u00cf\u0001\u0000\u0000\u0000\u00ed\u00d5"+
		"\u0001\u0000\u0000\u0000\u00ed\u00dc\u0001\u0000\u0000\u0000\u00ed\u00e3"+
		"\u0001\u0000\u0000\u0000\u00ee\u0003\u0001\u0000\u0000\u0000\u00ef\u00f0"+
		"\u00050\u0000\u0000\u00f0\u00f1\u00055\u0000\u0000\u00f1\u00f2\u00030"+
		"\u0018\u0000\u00f2\u00f3\u0005R\u0000\u0000\u00f3\u00f4\u0003\u0006\u0003"+
		"\u0000\u00f4\u00f5\u00056\u0000\u0000\u00f5\u0005\u0001\u0000\u0000\u0000"+
		"\u00f6\u00fb\u0003\b\u0004\u0000\u00f7\u00f8\u0005R\u0000\u0000\u00f8"+
		"\u00fa\u0003\b\u0004\u0000\u00f9\u00f7\u0001\u0000\u0000\u0000\u00fa\u00fd"+
		"\u0001\u0000\u0000\u0000\u00fb\u00f9\u0001\u0000\u0000\u0000\u00fb\u00fc"+
		"\u0001\u0000\u0000\u0000\u00fc\u0007\u0001\u0000\u0000\u0000\u00fd\u00fb"+
		"\u0001\u0000\u0000\u0000\u00fe\u0101\u0003~?\u0000\u00ff\u0101\u0005\u000f"+
		"\u0000\u0000\u0100\u00fe\u0001\u0000\u0000\u0000\u0100\u00ff\u0001\u0000"+
		"\u0000\u0000\u0101\u0102\u0001\u0000\u0000\u0000\u0102\u0103\u0005P\u0000"+
		"\u0000\u0103\u0104\u00030\u0018\u0000\u0104\t\u0001\u0000\u0000\u0000"+
		"\u0105\u0108\u0003\u0002\u0001\u0000\u0106\u0108\u0003\f\u0006\u0000\u0107"+
		"\u0105\u0001\u0000\u0000\u0000\u0107\u0106\u0001\u0000\u0000\u0000\u0108"+
		"\u010e\u0001\u0000\u0000\u0000\u0109\u010d\u0003\u000e\u0007\u0000\u010a"+
		"\u010d\u0005B\u0000\u0000\u010b\u010d\u0005D\u0000\u0000\u010c\u0109\u0001"+
		"\u0000\u0000\u0000\u010c\u010a\u0001\u0000\u0000\u0000\u010c\u010b\u0001"+
		"\u0000\u0000\u0000\u010d\u0110\u0001\u0000\u0000\u0000\u010e\u010c\u0001"+
		"\u0000\u0000\u0000\u010e\u010f\u0001\u0000\u0000\u0000\u010f\u000b\u0001"+
		"\u0000\u0000\u0000\u0110\u010e\u0001\u0000\u0000\u0000\u0111\u0113\u0005"+
		"g\u0000\u0000\u0112\u0111\u0001\u0000\u0000\u0000\u0112\u0113\u0001\u0000"+
		"\u0000\u0000\u0113\u0114\u0001\u0000\u0000\u0000\u0114\u0115\u00055\u0000"+
		"\u0000\u0115\u0116\u0003~?\u0000\u0116\u0117\u00056\u0000\u0000\u0117"+
		"\u0118\u00059\u0000\u0000\u0118\u011a\u0003\u0088D\u0000\u0119\u011b\u0005"+
		"R\u0000\u0000\u011a\u0119\u0001\u0000\u0000\u0000\u011a\u011b\u0001\u0000"+
		"\u0000\u0000\u011b\u011c\u0001\u0000\u0000\u0000\u011c\u011d\u0005:\u0000"+
		"\u0000\u011d\r\u0001\u0000\u0000\u0000\u011e\u011f\u00057\u0000\u0000"+
		"\u011f\u0120\u00034\u001a\u0000\u0120\u0121\u00058\u0000\u0000\u0121\u012d"+
		"\u0001\u0000\u0000\u0000\u0122\u0124\u00055\u0000\u0000\u0123\u0125\u0005"+
		"R\u0000\u0000\u0124\u0123\u0001\u0000\u0000\u0000\u0124\u0125\u0001\u0000"+
		"\u0000\u0000\u0125\u0127\u0001\u0000\u0000\u0000\u0126\u0128\u0003\u0010"+
		"\b\u0000\u0127\u0126\u0001\u0000\u0000\u0000\u0127\u0128\u0001\u0000\u0000"+
		"\u0000\u0128\u0129\u0001\u0000\u0000\u0000\u0129\u012d\u00056\u0000\u0000"+
		"\u012a\u012b\u0007\u0000\u0000\u0000\u012b\u012d\u0005{\u0000\u0000\u012c"+
		"\u011e\u0001\u0000\u0000\u0000\u012c\u0122\u0001\u0000\u0000\u0000\u012c"+
		"\u012a\u0001\u0000\u0000\u0000\u012d\u000f\u0001\u0000\u0000\u0000\u012e"+
		"\u0133\u00030\u0018\u0000\u012f\u0130\u0005R\u0000\u0000\u0130\u0132\u0003"+
		"0\u0018\u0000\u0131\u012f\u0001\u0000\u0000\u0000\u0132\u0135\u0001\u0000"+
		"\u0000\u0000\u0133\u0131\u0001\u0000\u0000\u0000\u0133\u0134\u0001\u0000"+
		"\u0000\u0000\u0134\u0011\u0001\u0000\u0000\u0000\u0135\u0133\u0001\u0000"+
		"\u0000\u0000\u0136\u0138\u0007\u0001\u0000\u0000\u0137\u0136\u0001\u0000"+
		"\u0000\u0000\u0138\u013b\u0001\u0000\u0000\u0000\u0139\u0137\u0001\u0000"+
		"\u0000\u0000\u0139\u013a\u0001\u0000\u0000\u0000\u013a\u0147\u0001\u0000"+
		"\u0000\u0000\u013b\u0139\u0001\u0000\u0000\u0000\u013c\u0148\u0003\n\u0005"+
		"\u0000\u013d\u013e\u0003\u0014\n\u0000\u013e\u013f\u0003\u0016\u000b\u0000"+
		"\u013f\u0148\u0001\u0000\u0000\u0000\u0140\u0141\u0007\u0002\u0000\u0000"+
		"\u0141\u0142\u00055\u0000\u0000\u0142\u0143\u0003~?\u0000\u0143\u0144"+
		"\u00056\u0000\u0000\u0144\u0148\u0001\u0000\u0000\u0000\u0145\u0146\u0005"+
		"J\u0000\u0000\u0146\u0148\u0005{\u0000\u0000\u0147\u013c\u0001\u0000\u0000"+
		"\u0000\u0147\u013d\u0001\u0000\u0000\u0000\u0147\u0140\u0001\u0000\u0000"+
		"\u0000\u0147\u0145\u0001\u0000\u0000\u0000\u0148\u0013\u0001\u0000\u0000"+
		"\u0000\u0149\u014a\u0007\u0003\u0000\u0000\u014a\u0015\u0001\u0000\u0000"+
		"\u0000\u014b\u014d\u0005g\u0000\u0000\u014c\u014b\u0001\u0000\u0000\u0000"+
		"\u014c\u014d\u0001\u0000\u0000\u0000\u014d\u014e\u0001\u0000\u0000\u0000"+
		"\u014e\u014f\u00055\u0000\u0000\u014f\u0150\u0003~?\u0000\u0150\u0151"+
		"\u00056\u0000\u0000\u0151\u0152\u0003\u0016\u000b\u0000\u0152\u0156\u0001"+
		"\u0000\u0000\u0000\u0153\u0156\u0003\u0012\t\u0000\u0154\u0156\u0005|"+
		"\u0000\u0000\u0155\u014c\u0001\u0000\u0000\u0000\u0155\u0153\u0001\u0000"+
		"\u0000\u0000\u0155\u0154\u0001\u0000\u0000\u0000\u0156\u0017\u0001\u0000"+
		"\u0000\u0000\u0157\u015c\u0003\u0016\u000b\u0000\u0158\u0159\u0007\u0004"+
		"\u0000\u0000\u0159\u015b\u0003\u0016\u000b\u0000\u015a\u0158\u0001\u0000"+
		"\u0000\u0000\u015b\u015e\u0001\u0000\u0000\u0000\u015c\u015a\u0001\u0000"+
		"\u0000\u0000\u015c\u015d\u0001\u0000\u0000\u0000\u015d\u0019\u0001\u0000"+
		"\u0000\u0000\u015e\u015c\u0001\u0000\u0000\u0000\u015f\u0164\u0003\u0018"+
		"\f\u0000\u0160\u0161\u0007\u0005\u0000\u0000\u0161\u0163\u0003\u0018\f"+
		"\u0000\u0162\u0160\u0001\u0000\u0000\u0000\u0163\u0166\u0001\u0000\u0000"+
		"\u0000\u0164\u0162\u0001\u0000\u0000\u0000\u0164\u0165\u0001\u0000\u0000"+
		"\u0000\u0165\u001b\u0001\u0000\u0000\u0000\u0166\u0164\u0001\u0000\u0000"+
		"\u0000\u0167\u016c\u0003\u001a\r\u0000\u0168\u0169\u0007\u0006\u0000\u0000"+
		"\u0169\u016b\u0003\u001a\r\u0000\u016a\u0168\u0001\u0000\u0000\u0000\u016b"+
		"\u016e\u0001\u0000\u0000\u0000\u016c\u016a\u0001\u0000\u0000\u0000\u016c"+
		"\u016d\u0001\u0000\u0000\u0000\u016d\u001d\u0001\u0000\u0000\u0000\u016e"+
		"\u016c\u0001\u0000\u0000\u0000\u016f\u0175\u0003\u001c\u000e\u0000\u0170"+
		"\u0171\u0003 \u0010\u0000\u0171\u0172\u0003\u001c\u000e\u0000\u0172\u0174"+
		"\u0001\u0000\u0000\u0000\u0173\u0170\u0001\u0000\u0000\u0000\u0174\u0177"+
		"\u0001\u0000\u0000\u0000\u0175\u0173\u0001\u0000\u0000\u0000\u0175\u0176"+
		"\u0001\u0000\u0000\u0000\u0176\u001f\u0001\u0000\u0000\u0000\u0177\u0175"+
		"\u0001\u0000\u0000\u0000\u0178\u0179\u0007\u0007\u0000\u0000\u0179!\u0001"+
		"\u0000\u0000\u0000\u017a\u017f\u0003\u001e\u000f\u0000\u017b\u017c\u0007"+
		"\b\u0000\u0000\u017c\u017e\u0003\u001e\u000f\u0000\u017d\u017b\u0001\u0000"+
		"\u0000\u0000\u017e\u0181\u0001\u0000\u0000\u0000\u017f\u017d\u0001\u0000"+
		"\u0000\u0000\u017f\u0180\u0001\u0000\u0000\u0000\u0180#\u0001\u0000\u0000"+
		"\u0000\u0181\u017f\u0001\u0000\u0000\u0000\u0182\u0187\u0003\"\u0011\u0000"+
		"\u0183\u0184\u0005H\u0000\u0000\u0184\u0186\u0003\"\u0011\u0000\u0185"+
		"\u0183\u0001\u0000\u0000\u0000\u0186\u0189\u0001\u0000\u0000\u0000\u0187"+
		"\u0185\u0001\u0000\u0000\u0000\u0187\u0188\u0001\u0000\u0000\u0000\u0188"+
		"%\u0001\u0000\u0000\u0000\u0189\u0187\u0001\u0000\u0000\u0000\u018a\u018f"+
		"\u0003$\u0012\u0000\u018b\u018c\u0005L\u0000\u0000\u018c\u018e\u0003$"+
		"\u0012\u0000\u018d\u018b\u0001\u0000\u0000\u0000\u018e\u0191\u0001\u0000"+
		"\u0000\u0000\u018f\u018d\u0001\u0000\u0000\u0000\u018f\u0190\u0001\u0000"+
		"\u0000\u0000\u0190\'\u0001\u0000\u0000\u0000\u0191\u018f\u0001\u0000\u0000"+
		"\u0000\u0192\u0197\u0003&\u0013\u0000\u0193\u0194\u0005I\u0000\u0000\u0194"+
		"\u0196\u0003&\u0013\u0000\u0195\u0193\u0001\u0000\u0000\u0000\u0196\u0199"+
		"\u0001\u0000\u0000\u0000\u0197\u0195\u0001\u0000\u0000\u0000\u0197\u0198"+
		"\u0001\u0000\u0000\u0000\u0198)\u0001\u0000\u0000\u0000\u0199\u0197\u0001"+
		"\u0000\u0000\u0000\u019a\u019f\u0003(\u0014\u0000\u019b\u019c\u0005J\u0000"+
		"\u0000\u019c\u019e\u0003(\u0014\u0000\u019d\u019b\u0001\u0000\u0000\u0000"+
		"\u019e\u01a1\u0001\u0000\u0000\u0000\u019f\u019d\u0001\u0000\u0000\u0000"+
		"\u019f\u01a0\u0001\u0000\u0000\u0000\u01a0+\u0001\u0000\u0000\u0000\u01a1"+
		"\u019f\u0001\u0000\u0000\u0000\u01a2\u01a7\u0003*\u0015\u0000\u01a3\u01a4"+
		"\u0005K\u0000\u0000\u01a4\u01a6\u0003*\u0015\u0000\u01a5\u01a3\u0001\u0000"+
		"\u0000\u0000\u01a6\u01a9\u0001\u0000\u0000\u0000\u01a7\u01a5\u0001\u0000"+
		"\u0000\u0000\u01a7\u01a8\u0001\u0000\u0000\u0000\u01a8-\u0001\u0000\u0000"+
		"\u0000\u01a9\u01a7\u0001\u0000\u0000\u0000\u01aa\u01b0\u0003,\u0016\u0000"+
		"\u01ab\u01ac\u0005O\u0000\u0000\u01ac\u01ad\u00034\u001a\u0000\u01ad\u01ae"+
		"\u0005P\u0000\u0000\u01ae\u01af\u0003.\u0017\u0000\u01af\u01b1\u0001\u0000"+
		"\u0000\u0000\u01b0\u01ab\u0001\u0000\u0000\u0000\u01b0\u01b1\u0001\u0000"+
		"\u0000\u0000\u01b1/\u0001\u0000\u0000\u0000\u01b2\u01b9\u0003.\u0017\u0000"+
		"\u01b3\u01b4\u0003\u0012\t\u0000\u01b4\u01b5\u00032\u0019\u0000\u01b5"+
		"\u01b6\u00030\u0018\u0000\u01b6\u01b9\u0001\u0000\u0000\u0000\u01b7\u01b9"+
		"\u0005|\u0000\u0000\u01b8\u01b2\u0001\u0000\u0000\u0000\u01b8\u01b3\u0001"+
		"\u0000\u0000\u0000\u01b8\u01b7\u0001\u0000\u0000\u0000\u01b91\u0001\u0000"+
		"\u0000\u0000\u01ba\u01bb\u0007\t\u0000\u0000\u01bb3\u0001\u0000\u0000"+
		"\u0000\u01bc\u01c1\u00030\u0018\u0000\u01bd\u01be\u0005R\u0000\u0000\u01be"+
		"\u01c0\u00030\u0018\u0000\u01bf\u01bd\u0001\u0000\u0000\u0000\u01c0\u01c3"+
		"\u0001\u0000\u0000\u0000\u01c1\u01bf\u0001\u0000\u0000\u0000\u01c1\u01c2"+
		"\u0001\u0000\u0000\u0000\u01c2\u01c6\u0001\u0000\u0000\u0000\u01c3\u01c1"+
		"\u0001\u0000\u0000\u0000\u01c4\u01c6\u0005R\u0000\u0000\u01c5\u01bc\u0001"+
		"\u0000\u0000\u0000\u01c5\u01c4\u0001\u0000\u0000\u0000\u01c65\u0001\u0000"+
		"\u0000\u0000\u01c7\u01c8\u0003.\u0017\u0000\u01c87\u0001\u0000\u0000\u0000"+
		"\u01c9\u01cb\u0005\"\u0000\u0000\u01ca\u01c9\u0001\u0000\u0000\u0000\u01ca"+
		"\u01cb\u0001\u0000\u0000\u0000\u01cb\u01cd\u0001\u0000\u0000\u0000\u01cc"+
		"\u01ce\u0003:\u001d\u0000\u01cd\u01cc\u0001\u0000\u0000\u0000\u01ce\u01cf"+
		"\u0001\u0000\u0000\u0000\u01cf\u01cd\u0001\u0000\u0000\u0000\u01cf\u01d0"+
		"\u0001\u0000\u0000\u0000\u01d0\u01d2\u0001\u0000\u0000\u0000\u01d1\u01d3"+
		"\u0003<\u001e\u0000\u01d2\u01d1\u0001\u0000\u0000\u0000\u01d2\u01d3\u0001"+
		"\u0000\u0000\u0000\u01d3\u01d4\u0001\u0000\u0000\u0000\u01d4\u01d5\u0005"+
		"Q\u0000\u0000\u01d5\u01d8\u0001\u0000\u0000\u0000\u01d6\u01d8\u0003\u0090"+
		"H\u0000\u01d7\u01ca\u0001\u0000\u0000\u0000\u01d7\u01d6\u0001\u0000\u0000"+
		"\u0000\u01d89\u0001\u0000\u0000\u0000\u01d9\u01df\u0003@ \u0000\u01da"+
		"\u01df\u0003B!\u0000\u01db\u01df\u0003\\.\u0000\u01dc\u01df\u0003^/\u0000"+
		"\u01dd\u01df\u0003`0\u0000\u01de\u01d9\u0001\u0000\u0000\u0000\u01de\u01da"+
		"\u0001\u0000\u0000\u0000\u01de\u01db\u0001\u0000\u0000\u0000\u01de\u01dc"+
		"\u0001\u0000\u0000\u0000\u01de\u01dd\u0001\u0000\u0000\u0000\u01df;\u0001"+
		"\u0000\u0000\u0000\u01e0\u01e5\u0003>\u001f\u0000\u01e1\u01e2\u0005R\u0000"+
		"\u0000\u01e2\u01e4\u0003>\u001f\u0000\u01e3\u01e1\u0001\u0000\u0000\u0000"+
		"\u01e4\u01e7\u0001\u0000\u0000\u0000\u01e5\u01e3\u0001\u0000\u0000\u0000"+
		"\u01e5\u01e6\u0001\u0000\u0000\u0000\u01e6=\u0001\u0000\u0000\u0000\u01e7"+
		"\u01e5\u0001\u0000\u0000\u0000\u01e8\u01eb\u0003b1\u0000\u01e9\u01ea\u0005"+
		"S\u0000\u0000\u01ea\u01ec\u0003\u0086C\u0000\u01eb\u01e9\u0001\u0000\u0000"+
		"\u0000\u01eb\u01ec\u0001\u0000\u0000\u0000\u01ec?\u0001\u0000\u0000\u0000"+
		"\u01ed\u01ee\u0007\n\u0000\u0000\u01eeA\u0001\u0000\u0000\u0000\u01ef"+
		"\u020c\u0005(\u0000\u0000\u01f0\u020c\u0005\f\u0000\u0000\u01f1\u020c"+
		"\u0005\u001f\u0000\u0000\u01f2\u020c\u0005\u001a\u0000\u0000\u01f3\u020c"+
		"\u0005\u001b\u0000\u0000\u01f4\u020c\u0005\u0015\u0000\u0000\u01f5\u020c"+
		"\u0005\u0011\u0000\u0000\u01f6\u020c\u0005 \u0000\u0000\u01f7\u020c\u0005"+
		"\'\u0000\u0000\u01f8\u020c\u0005.\u0000\u0000\u01f9\u020c\u0005/\u0000"+
		"\u0000\u01fa\u020c\u0005k\u0000\u0000\u01fb\u020c\u0005l\u0000\u0000\u01fc"+
		"\u020c\u0005m\u0000\u0000\u01fd\u01fe\u0005g\u0000\u0000\u01fe\u01ff\u0005"+
		"5\u0000\u0000\u01ff\u0200\u0007\u000b\u0000\u0000\u0200\u020c\u00056\u0000"+
		"\u0000\u0201\u020c\u0003Z-\u0000\u0202\u020c\u0003D\"\u0000\u0203\u020c"+
		"\u0003R)\u0000\u0204\u020c\u0003\u0084B\u0000\u0205\u0206\u0005n\u0000"+
		"\u0000\u0206\u0207\u00055\u0000\u0000\u0207\u0208\u00036\u001b\u0000\u0208"+
		"\u0209\u00056\u0000\u0000\u0209\u020c\u0001\u0000\u0000\u0000\u020a\u020c"+
		"\u0003\n\u0005\u0000\u020b\u01ef\u0001\u0000\u0000\u0000\u020b\u01f0\u0001"+
		"\u0000\u0000\u0000\u020b\u01f1\u0001\u0000\u0000\u0000\u020b\u01f2\u0001"+
		"\u0000\u0000\u0000\u020b\u01f3\u0001\u0000\u0000\u0000\u020b\u01f4\u0001"+
		"\u0000\u0000\u0000\u020b\u01f5\u0001\u0000\u0000\u0000\u020b\u01f6\u0001"+
		"\u0000\u0000\u0000\u020b\u01f7\u0001\u0000\u0000\u0000\u020b\u01f8\u0001"+
		"\u0000\u0000\u0000\u020b\u01f9\u0001\u0000\u0000\u0000\u020b\u01fa\u0001"+
		"\u0000\u0000\u0000\u020b\u01fb\u0001\u0000\u0000\u0000\u020b\u01fc\u0001"+
		"\u0000\u0000\u0000\u020b\u01fd\u0001\u0000\u0000\u0000\u020b\u0201\u0001"+
		"\u0000\u0000\u0000\u020b\u0202\u0001\u0000\u0000\u0000\u020b\u0203\u0001"+
		"\u0000\u0000\u0000\u020b\u0204\u0001\u0000\u0000\u0000\u020b\u0205\u0001"+
		"\u0000\u0000\u0000\u020b\u020a\u0001\u0000\u0000\u0000\u020cC\u0001\u0000"+
		"\u0000\u0000\u020d\u020f\u0003F#\u0000\u020e\u0210\u0005{\u0000\u0000"+
		"\u020f\u020e\u0001\u0000\u0000\u0000\u020f\u0210\u0001\u0000\u0000\u0000"+
		"\u0210\u0211\u0001\u0000\u0000\u0000\u0211\u0212\u00059\u0000\u0000\u0212"+
		"\u0213\u0003H$\u0000\u0213\u0214\u0005:\u0000\u0000\u0214\u0219\u0001"+
		"\u0000\u0000\u0000\u0215\u0216\u0003F#\u0000\u0216\u0217\u0005{\u0000"+
		"\u0000\u0217\u0219\u0001\u0000\u0000\u0000\u0218\u020d\u0001\u0000\u0000"+
		"\u0000\u0218\u0215\u0001\u0000\u0000\u0000\u0219E\u0001\u0000\u0000\u0000"+
		"\u021a\u021b\u0007\f\u0000\u0000\u021bG\u0001\u0000\u0000\u0000\u021c"+
		"\u021e\u0003J%\u0000\u021d\u021c\u0001\u0000\u0000\u0000\u021e\u021f\u0001"+
		"\u0000\u0000\u0000\u021f\u021d\u0001\u0000\u0000\u0000\u021f\u0220\u0001"+
		"\u0000\u0000\u0000\u0220I\u0001\u0000\u0000\u0000\u0221\u0223\u0003L&"+
		"\u0000\u0222\u0224\u0003N\'\u0000\u0223\u0222\u0001\u0000\u0000\u0000"+
		"\u0223\u0224\u0001\u0000\u0000\u0000\u0224\u0225\u0001\u0000\u0000\u0000"+
		"\u0225\u0226\u0005Q\u0000\u0000\u0226\u0229\u0001\u0000\u0000\u0000\u0227"+
		"\u0229\u0003\u0090H\u0000\u0228\u0221\u0001\u0000\u0000\u0000\u0228\u0227"+
		"\u0001\u0000\u0000\u0000\u0229K\u0001\u0000\u0000\u0000\u022a\u022d\u0003"+
		"B!\u0000\u022b\u022d\u0003\\.\u0000\u022c\u022a\u0001\u0000\u0000\u0000"+
		"\u022c\u022b\u0001\u0000\u0000\u0000\u022d\u022f\u0001\u0000\u0000\u0000"+
		"\u022e\u0230\u0003L&\u0000\u022f\u022e\u0001\u0000\u0000\u0000\u022f\u0230"+
		"\u0001\u0000\u0000\u0000\u0230M\u0001\u0000\u0000\u0000\u0231\u0236\u0003"+
		"P(\u0000\u0232\u0233\u0005R\u0000\u0000\u0233\u0235\u0003P(\u0000\u0234"+
		"\u0232\u0001\u0000\u0000\u0000\u0235\u0238\u0001\u0000\u0000\u0000\u0236"+
		"\u0234\u0001\u0000\u0000\u0000\u0236\u0237\u0001\u0000\u0000\u0000\u0237"+
		"O\u0001\u0000\u0000\u0000\u0238\u0236\u0001\u0000\u0000\u0000\u0239\u0240"+
		"\u0003b1\u0000\u023a\u023c\u0003b1\u0000\u023b\u023a\u0001\u0000\u0000"+
		"\u0000\u023b\u023c\u0001\u0000\u0000\u0000\u023c\u023d\u0001\u0000\u0000"+
		"\u0000\u023d\u023e\u0005P\u0000\u0000\u023e\u0240\u00036\u001b\u0000\u023f"+
		"\u0239\u0001\u0000\u0000\u0000\u023f\u023b\u0001\u0000\u0000\u0000\u0240"+
		"Q\u0001\u0000\u0000\u0000\u0241\u0243\u0005\u0013\u0000\u0000\u0242\u0244"+
		"\u0005{\u0000\u0000\u0243\u0242\u0001\u0000\u0000\u0000\u0243\u0244\u0001"+
		"\u0000\u0000\u0000\u0244\u0245\u0001\u0000\u0000\u0000\u0245\u0246\u0005"+
		"9\u0000\u0000\u0246\u0248\u0003T*\u0000\u0247\u0249\u0005R\u0000\u0000"+
		"\u0248\u0247\u0001\u0000\u0000\u0000\u0248\u0249\u0001\u0000\u0000\u0000"+
		"\u0249\u024a\u0001\u0000\u0000\u0000\u024a\u024b\u0005:\u0000\u0000\u024b"+
		"\u024f\u0001\u0000\u0000\u0000\u024c\u024d\u0005\u0013\u0000\u0000\u024d"+
		"\u024f\u0005{\u0000\u0000\u024e\u0241\u0001\u0000\u0000\u0000\u024e\u024c"+
		"\u0001\u0000\u0000\u0000\u024fS\u0001\u0000\u0000\u0000\u0250\u0255\u0003"+
		"V+\u0000\u0251\u0252\u0005R\u0000\u0000\u0252\u0254\u0003V+\u0000\u0253"+
		"\u0251\u0001\u0000\u0000\u0000\u0254\u0257\u0001\u0000\u0000\u0000\u0255"+
		"\u0253\u0001\u0000\u0000\u0000\u0255\u0256\u0001\u0000\u0000\u0000\u0256"+
		"U\u0001\u0000\u0000\u0000\u0257\u0255\u0001\u0000\u0000\u0000\u0258\u025b"+
		"\u0003X,\u0000\u0259\u025a\u0005S\u0000\u0000\u025a\u025c\u00036\u001b"+
		"\u0000\u025b\u0259\u0001\u0000\u0000\u0000\u025b\u025c\u0001\u0000\u0000"+
		"\u0000\u025cW\u0001\u0000\u0000\u0000\u025d\u025e\u0005{\u0000\u0000\u025e"+
		"Y\u0001\u0000\u0000\u0000\u025f\u0260\u0005-\u0000\u0000\u0260\u0261\u0005"+
		"5\u0000\u0000\u0261\u0262\u0003~?\u0000\u0262\u0263\u00056\u0000\u0000"+
		"\u0263[\u0001\u0000\u0000\u0000\u0264\u0265\u0007\r\u0000\u0000\u0265"+
		"]\u0001\u0000\u0000\u0000\u0266\u0270\u0005\u0019\u0000\u0000\u0267\u0270"+
		"\u00052\u0000\u0000\u0268\u0270\u0005o\u0000\u0000\u0269\u0270\u0005p"+
		"\u0000\u0000\u026a\u0270\u0003j5\u0000\u026b\u026c\u0005q\u0000\u0000"+
		"\u026c\u026d\u00055\u0000\u0000\u026d\u026e\u0005{\u0000\u0000\u026e\u0270"+
		"\u00056\u0000\u0000\u026f\u0266\u0001\u0000\u0000\u0000\u026f\u0267\u0001"+
		"\u0000\u0000\u0000\u026f\u0268\u0001\u0000\u0000\u0000\u026f\u0269\u0001"+
		"\u0000\u0000\u0000\u026f\u026a\u0001\u0000\u0000\u0000\u026f\u026b\u0001"+
		"\u0000\u0000\u0000\u0270_\u0001\u0000\u0000\u0000\u0271\u0272\u0005+\u0000"+
		"\u0000\u0272\u0275\u00055\u0000\u0000\u0273\u0276\u0003~?\u0000\u0274"+
		"\u0276\u00036\u001b\u0000\u0275\u0273\u0001\u0000\u0000\u0000\u0275\u0274"+
		"\u0001\u0000\u0000\u0000\u0276\u0277\u0001\u0000\u0000\u0000\u0277\u0278"+
		"\u00056\u0000\u0000\u0278a\u0001\u0000\u0000\u0000\u0279\u027b\u0003r"+
		"9\u0000\u027a\u0279\u0001\u0000\u0000\u0000\u027a\u027b\u0001\u0000\u0000"+
		"\u0000\u027b\u027c\u0001\u0000\u0000\u0000\u027c\u0280\u0003d2\u0000\u027d"+
		"\u027f\u0003h4\u0000\u027e\u027d\u0001\u0000\u0000\u0000\u027f\u0282\u0001"+
		"\u0000\u0000\u0000\u0280\u027e\u0001\u0000\u0000\u0000\u0280\u0281\u0001"+
		"\u0000\u0000\u0000\u0281c\u0001\u0000\u0000\u0000\u0282\u0280\u0001\u0000"+
		"\u0000\u0000\u0283\u0284\u00062\uffff\uffff\u0000\u0284\u0298\u0005{\u0000"+
		"\u0000\u0285\u0286\u00055\u0000\u0000\u0286\u0287\u0003b1\u0000\u0287"+
		"\u0288\u00056\u0000\u0000\u0288\u0298\u0001\u0000\u0000\u0000\u0289\u028a"+
		"\u0005{\u0000\u0000\u028a\u028b\u0005P\u0000\u0000\u028b\u0298\u0005|"+
		"\u0000\u0000\u028c\u028d\u0003f3\u0000\u028d\u028e\u0005{\u0000\u0000"+
		"\u028e\u0298\u0001\u0000\u0000\u0000\u028f\u0291\u00055\u0000\u0000\u0290"+
		"\u0292\u0003B!\u0000\u0291\u0290\u0001\u0000\u0000\u0000\u0291\u0292\u0001"+
		"\u0000\u0000\u0000\u0292\u0293\u0001\u0000\u0000\u0000\u0293\u0294\u0003"+
		"r9\u0000\u0294\u0295\u0003d2\u0000\u0295\u0296\u00056\u0000\u0000\u0296"+
		"\u0298\u0001\u0000\u0000\u0000\u0297\u0283\u0001\u0000\u0000\u0000\u0297"+
		"\u0285\u0001\u0000\u0000\u0000\u0297\u0289\u0001\u0000\u0000\u0000\u0297"+
		"\u028c\u0001\u0000\u0000\u0000\u0297\u028f\u0001\u0000\u0000\u0000\u0298"+
		"\u02c6\u0001\u0000\u0000\u0000\u0299\u029a\n\t\u0000\u0000\u029a\u029c"+
		"\u00057\u0000\u0000\u029b\u029d\u0003t:\u0000\u029c\u029b\u0001\u0000"+
		"\u0000\u0000\u029c\u029d\u0001\u0000\u0000\u0000\u029d\u029f\u0001\u0000"+
		"\u0000\u0000\u029e\u02a0\u00030\u0018\u0000\u029f\u029e\u0001\u0000\u0000"+
		"\u0000\u029f\u02a0\u0001\u0000\u0000\u0000\u02a0\u02a1\u0001\u0000\u0000"+
		"\u0000\u02a1\u02c5\u00058\u0000\u0000\u02a2\u02a3\n\b\u0000\u0000\u02a3"+
		"\u02a4\u00057\u0000\u0000\u02a4\u02a6\u0005\"\u0000\u0000\u02a5\u02a7"+
		"\u0003t:\u0000\u02a6\u02a5\u0001\u0000\u0000\u0000\u02a6\u02a7\u0001\u0000"+
		"\u0000\u0000\u02a7\u02a8\u0001\u0000\u0000\u0000\u02a8\u02a9\u00030\u0018"+
		"\u0000\u02a9\u02aa\u00058\u0000\u0000\u02aa\u02c5\u0001\u0000\u0000\u0000"+
		"\u02ab\u02ac\n\u0007\u0000\u0000\u02ac\u02ad\u00057\u0000\u0000\u02ad"+
		"\u02ae\u0003t:\u0000\u02ae\u02af\u0005\"\u0000\u0000\u02af\u02b0\u0003"+
		"0\u0018\u0000\u02b0\u02b1\u00058\u0000\u0000\u02b1\u02c5\u0001\u0000\u0000"+
		"\u0000\u02b2\u02b3\n\u0006\u0000\u0000\u02b3\u02b5\u00057\u0000\u0000"+
		"\u02b4\u02b6\u0003t:\u0000\u02b5\u02b4\u0001\u0000\u0000\u0000\u02b5\u02b6"+
		"\u0001\u0000\u0000\u0000\u02b6\u02b7\u0001\u0000\u0000\u0000\u02b7\u02b8"+
		"\u0005E\u0000\u0000\u02b8\u02c5\u00058\u0000\u0000\u02b9\u02ba\n\u0005"+
		"\u0000\u0000\u02ba\u02bb\u00055\u0000\u0000\u02bb\u02bc\u0003v;\u0000"+
		"\u02bc\u02bd\u00056\u0000\u0000\u02bd\u02c5\u0001\u0000\u0000\u0000\u02be"+
		"\u02bf\n\u0004\u0000\u0000\u02bf\u02c1\u00055\u0000\u0000\u02c0\u02c2"+
		"\u0003|>\u0000\u02c1\u02c0\u0001\u0000\u0000\u0000\u02c1\u02c2\u0001\u0000"+
		"\u0000\u0000\u02c2\u02c3\u0001\u0000\u0000\u0000\u02c3\u02c5\u00056\u0000"+
		"\u0000\u02c4\u0299\u0001\u0000\u0000\u0000\u02c4\u02a2\u0001\u0000\u0000"+
		"\u0000\u02c4\u02ab\u0001\u0000\u0000\u0000\u02c4\u02b2\u0001\u0000\u0000"+
		"\u0000\u02c4\u02b9\u0001\u0000\u0000\u0000\u02c4\u02be\u0001\u0000\u0000"+
		"\u0000\u02c5\u02c8\u0001\u0000\u0000\u0000\u02c6\u02c4\u0001\u0000\u0000"+
		"\u0000\u02c6\u02c7\u0001\u0000\u0000\u0000\u02c7e\u0001\u0000\u0000\u0000"+
		"\u02c8\u02c6\u0001\u0000\u0000\u0000\u02c9\u02ca\u0007\u000e\u0000\u0000"+
		"\u02cag\u0001\u0000\u0000\u0000\u02cb\u02cc\u0005w\u0000\u0000\u02cc\u02ce"+
		"\u00055\u0000\u0000\u02cd\u02cf\u0005}\u0000\u0000\u02ce\u02cd\u0001\u0000"+
		"\u0000\u0000\u02cf\u02d0\u0001\u0000\u0000\u0000\u02d0\u02ce\u0001\u0000"+
		"\u0000\u0000\u02d0\u02d1\u0001\u0000\u0000\u0000\u02d1\u02d2\u0001\u0000"+
		"\u0000\u0000\u02d2\u02d5\u00056\u0000\u0000\u02d3\u02d5\u0003j5\u0000"+
		"\u02d4\u02cb\u0001\u0000\u0000\u0000\u02d4\u02d3\u0001\u0000\u0000\u0000"+
		"\u02d5i\u0001\u0000\u0000\u0000\u02d6\u02d7\u0005y\u0000\u0000\u02d7\u02d8"+
		"\u00055\u0000\u0000\u02d8\u02d9\u00055\u0000\u0000\u02d9\u02da\u0003l"+
		"6\u0000\u02da\u02db\u00056\u0000\u0000\u02db\u02dc\u00056\u0000\u0000"+
		"\u02dck\u0001\u0000\u0000\u0000\u02dd\u02df\u0003n7\u0000\u02de\u02dd"+
		"\u0001\u0000\u0000\u0000\u02de\u02df\u0001\u0000\u0000\u0000\u02df\u02e6"+
		"\u0001\u0000\u0000\u0000\u02e0\u02e2\u0005R\u0000\u0000\u02e1\u02e3\u0003"+
		"n7\u0000\u02e2\u02e1\u0001\u0000\u0000\u0000\u02e2\u02e3\u0001\u0000\u0000"+
		"\u0000\u02e3\u02e5\u0001\u0000\u0000\u0000\u02e4\u02e0\u0001\u0000\u0000"+
		"\u0000\u02e5\u02e8\u0001\u0000\u0000\u0000\u02e6\u02e4\u0001\u0000\u0000"+
		"\u0000\u02e6\u02e7\u0001\u0000\u0000\u0000\u02e7m\u0001\u0000\u0000\u0000"+
		"\u02e8\u02e6\u0001\u0000\u0000\u0000\u02e9\u02ef\b\u000f\u0000\u0000\u02ea"+
		"\u02ec\u00055\u0000\u0000\u02eb\u02ed\u0003\u0010\b\u0000\u02ec\u02eb"+
		"\u0001\u0000\u0000\u0000\u02ec\u02ed\u0001\u0000\u0000\u0000\u02ed\u02ee"+
		"\u0001\u0000\u0000\u0000\u02ee\u02f0\u00056\u0000\u0000\u02ef\u02ea\u0001"+
		"\u0000\u0000\u0000\u02ef\u02f0\u0001\u0000\u0000\u0000\u02f0o\u0001\u0000"+
		"\u0000\u0000\u02f1\u02f7\b\u0010\u0000\u0000\u02f2\u02f3\u00055\u0000"+
		"\u0000\u02f3\u02f4\u0003p8\u0000\u02f4\u02f5\u00056\u0000\u0000\u02f5"+
		"\u02f7\u0001\u0000\u0000\u0000\u02f6\u02f1\u0001\u0000\u0000\u0000\u02f6"+
		"\u02f2\u0001\u0000\u0000\u0000\u02f7\u02fa\u0001\u0000\u0000\u0000\u02f8"+
		"\u02f6\u0001\u0000\u0000\u0000\u02f8\u02f9\u0001\u0000\u0000\u0000\u02f9"+
		"q\u0001\u0000\u0000\u0000\u02fa\u02f8\u0001\u0000\u0000\u0000\u02fb\u02fd"+
		"\u0007\u0011\u0000\u0000\u02fc\u02fe\u0003t:\u0000\u02fd\u02fc\u0001\u0000"+
		"\u0000\u0000\u02fd\u02fe\u0001\u0000\u0000\u0000\u02fe\u0300\u0001\u0000"+
		"\u0000\u0000\u02ff\u02fb\u0001\u0000\u0000\u0000\u0300\u0301\u0001\u0000"+
		"\u0000\u0000\u0301\u02ff\u0001\u0000\u0000\u0000\u0301\u0302\u0001\u0000"+
		"\u0000\u0000\u0302s\u0001\u0000\u0000\u0000\u0303\u0305\u0003\\.\u0000"+
		"\u0304\u0303\u0001\u0000\u0000\u0000\u0305\u0306\u0001\u0000\u0000\u0000"+
		"\u0306\u0304\u0001\u0000\u0000\u0000\u0306\u0307\u0001\u0000\u0000\u0000"+
		"\u0307u\u0001\u0000\u0000\u0000\u0308\u030b\u0003x<\u0000\u0309\u030a"+
		"\u0005R\u0000\u0000\u030a\u030c\u0005b\u0000\u0000\u030b\u0309\u0001\u0000"+
		"\u0000\u0000\u030b\u030c\u0001\u0000\u0000\u0000\u030cw\u0001\u0000\u0000"+
		"\u0000\u030d\u0312\u0003z=\u0000\u030e\u030f\u0005R\u0000\u0000\u030f"+
		"\u0311\u0003z=\u0000\u0310\u030e\u0001\u0000\u0000\u0000\u0311\u0314\u0001"+
		"\u0000\u0000\u0000\u0312\u0310\u0001\u0000\u0000\u0000\u0312\u0313\u0001"+
		"\u0000\u0000\u0000\u0313y\u0001\u0000\u0000\u0000\u0314\u0312\u0001\u0000"+
		"\u0000\u0000\u0315\u0317\u0003:\u001d\u0000\u0316\u0315\u0001\u0000\u0000"+
		"\u0000\u0317\u0318\u0001\u0000\u0000\u0000\u0318\u0316\u0001\u0000\u0000"+
		"\u0000\u0318\u0319\u0001\u0000\u0000\u0000\u0319\u031a\u0001\u0000\u0000"+
		"\u0000\u031a\u031b\u0003b1\u0000\u031b\u0325\u0001\u0000\u0000\u0000\u031c"+
		"\u031e\u0003:\u001d\u0000\u031d\u031c\u0001\u0000\u0000\u0000\u031e\u031f"+
		"\u0001\u0000\u0000\u0000\u031f\u031d\u0001\u0000\u0000\u0000\u031f\u0320"+
		"\u0001\u0000\u0000\u0000\u0320\u0322\u0001\u0000\u0000\u0000\u0321\u0323"+
		"\u0003\u0080@\u0000\u0322\u0321\u0001\u0000\u0000\u0000\u0322\u0323\u0001"+
		"\u0000\u0000\u0000\u0323\u0325\u0001\u0000\u0000\u0000\u0324\u0316\u0001"+
		"\u0000\u0000\u0000\u0324\u031d\u0001\u0000\u0000\u0000\u0325{\u0001\u0000"+
		"\u0000\u0000\u0326\u032b\u0005{\u0000\u0000\u0327\u0328\u0005R\u0000\u0000"+
		"\u0328\u032a\u0005{\u0000\u0000\u0329\u0327\u0001\u0000\u0000\u0000\u032a"+
		"\u032d\u0001\u0000\u0000\u0000\u032b\u0329\u0001\u0000\u0000\u0000\u032b"+
		"\u032c\u0001\u0000\u0000\u0000\u032c}\u0001\u0000\u0000\u0000\u032d\u032b"+
		"\u0001\u0000\u0000\u0000\u032e\u0330\u0003L&\u0000\u032f\u0331\u0003\u0080"+
		"@\u0000\u0330\u032f\u0001\u0000\u0000\u0000\u0330\u0331\u0001\u0000\u0000"+
		"\u0000\u0331\u007f\u0001\u0000\u0000\u0000\u0332\u033e\u0003r9\u0000\u0333"+
		"\u0335\u0003r9\u0000\u0334\u0333\u0001\u0000\u0000\u0000\u0334\u0335\u0001"+
		"\u0000\u0000\u0000\u0335\u0336\u0001\u0000\u0000\u0000\u0336\u033a\u0003"+
		"\u0082A\u0000\u0337\u0339\u0003h4\u0000\u0338\u0337\u0001\u0000\u0000"+
		"\u0000\u0339\u033c\u0001\u0000\u0000\u0000\u033a\u0338\u0001\u0000\u0000"+
		"\u0000\u033a\u033b\u0001\u0000\u0000\u0000\u033b\u033e\u0001\u0000\u0000"+
		"\u0000\u033c\u033a\u0001\u0000\u0000\u0000\u033d\u0332\u0001\u0000\u0000"+
		"\u0000\u033d\u0334\u0001\u0000\u0000\u0000\u033e\u0081\u0001\u0000\u0000"+
		"\u0000\u033f\u0340\u0006A\uffff\uffff\u0000\u0340\u0341\u00055\u0000\u0000"+
		"\u0341\u0342\u0003\u0080@\u0000\u0342\u0346\u00056\u0000\u0000\u0343\u0345"+
		"\u0003h4\u0000\u0344\u0343\u0001\u0000\u0000\u0000\u0345\u0348\u0001\u0000"+
		"\u0000\u0000\u0346\u0344\u0001\u0000\u0000\u0000\u0346\u0347\u0001\u0000"+
		"\u0000\u0000\u0347\u036e\u0001\u0000\u0000\u0000\u0348\u0346\u0001\u0000"+
		"\u0000\u0000\u0349\u034b\u00057\u0000\u0000\u034a\u034c\u0003t:\u0000"+
		"\u034b\u034a\u0001\u0000\u0000\u0000\u034b\u034c\u0001\u0000\u0000\u0000"+
		"\u034c\u034e\u0001\u0000\u0000\u0000\u034d\u034f\u00030\u0018\u0000\u034e"+
		"\u034d\u0001\u0000\u0000\u0000\u034e\u034f\u0001\u0000\u0000\u0000\u034f"+
		"\u0350\u0001\u0000\u0000\u0000\u0350\u036e\u00058\u0000\u0000\u0351\u0352"+
		"\u00057\u0000\u0000\u0352\u0354\u0005\"\u0000\u0000\u0353\u0355\u0003"+
		"t:\u0000\u0354\u0353\u0001\u0000\u0000\u0000\u0354\u0355\u0001\u0000\u0000"+
		"\u0000\u0355\u0356\u0001\u0000\u0000\u0000\u0356\u0357\u00030\u0018\u0000"+
		"\u0357\u0358\u00058\u0000\u0000\u0358\u036e\u0001\u0000\u0000\u0000\u0359"+
		"\u035a\u00057\u0000\u0000\u035a\u035b\u0003t:\u0000\u035b\u035c\u0005"+
		"\"\u0000\u0000\u035c\u035d\u00030\u0018\u0000\u035d\u035e\u00058\u0000"+
		"\u0000\u035e\u036e\u0001\u0000\u0000\u0000\u035f\u0360\u00057\u0000\u0000"+
		"\u0360\u0361\u0005E\u0000\u0000\u0361\u036e\u00058\u0000\u0000\u0362\u0364"+
		"\u00055\u0000\u0000\u0363\u0365\u0003v;\u0000\u0364\u0363\u0001\u0000"+
		"\u0000\u0000\u0364\u0365\u0001\u0000\u0000\u0000\u0365\u0366\u0001\u0000"+
		"\u0000\u0000\u0366\u036a\u00056\u0000\u0000\u0367\u0369\u0003h4\u0000"+
		"\u0368\u0367\u0001\u0000\u0000\u0000\u0369\u036c\u0001\u0000\u0000\u0000"+
		"\u036a\u0368\u0001\u0000\u0000\u0000\u036a\u036b\u0001\u0000\u0000\u0000"+
		"\u036b\u036e\u0001\u0000\u0000\u0000\u036c\u036a\u0001\u0000\u0000\u0000"+
		"\u036d\u033f\u0001\u0000\u0000\u0000\u036d\u0349\u0001\u0000\u0000\u0000"+
		"\u036d\u0351\u0001\u0000\u0000\u0000\u036d\u0359\u0001\u0000\u0000\u0000"+
		"\u036d\u035f\u0001\u0000\u0000\u0000\u036d\u0362\u0001\u0000\u0000\u0000"+
		"\u036e\u039a\u0001\u0000\u0000\u0000\u036f\u0370\n\u0005\u0000\u0000\u0370"+
		"\u0372\u00057\u0000\u0000\u0371\u0373\u0003t:\u0000\u0372\u0371\u0001"+
		"\u0000\u0000\u0000\u0372\u0373\u0001\u0000\u0000\u0000\u0373\u0375\u0001"+
		"\u0000\u0000\u0000\u0374\u0376\u00030\u0018\u0000\u0375\u0374\u0001\u0000"+
		"\u0000\u0000\u0375\u0376\u0001\u0000\u0000\u0000\u0376\u0377\u0001\u0000"+
		"\u0000\u0000\u0377\u0399\u00058\u0000\u0000\u0378\u0379\n\u0004\u0000"+
		"\u0000\u0379\u037a\u00057\u0000\u0000\u037a\u037c\u0005\"\u0000\u0000"+
		"\u037b\u037d\u0003t:\u0000\u037c\u037b\u0001\u0000\u0000\u0000\u037c\u037d"+
		"\u0001\u0000\u0000\u0000\u037d\u037e\u0001\u0000\u0000\u0000\u037e\u037f"+
		"\u00030\u0018\u0000\u037f\u0380\u00058\u0000\u0000\u0380\u0399\u0001\u0000"+
		"\u0000\u0000\u0381\u0382\n\u0003\u0000\u0000\u0382\u0383\u00057\u0000"+
		"\u0000\u0383\u0384\u0003t:\u0000\u0384\u0385\u0005\"\u0000\u0000\u0385"+
		"\u0386\u00030\u0018\u0000\u0386\u0387\u00058\u0000\u0000\u0387\u0399\u0001"+
		"\u0000\u0000\u0000\u0388\u0389\n\u0002\u0000\u0000\u0389\u038a\u00057"+
		"\u0000\u0000\u038a\u038b\u0005E\u0000\u0000\u038b\u0399\u00058\u0000\u0000"+
		"\u038c\u038d\n\u0001\u0000\u0000\u038d\u038f\u00055\u0000\u0000\u038e"+
		"\u0390\u0003v;\u0000\u038f\u038e\u0001\u0000\u0000\u0000\u038f\u0390\u0001"+
		"\u0000\u0000\u0000\u0390\u0391\u0001\u0000\u0000\u0000\u0391\u0395\u0005"+
		"6\u0000\u0000\u0392\u0394\u0003h4\u0000\u0393\u0392\u0001\u0000\u0000"+
		"\u0000\u0394\u0397\u0001\u0000\u0000\u0000\u0395\u0393\u0001\u0000\u0000"+
		"\u0000\u0395\u0396\u0001\u0000\u0000\u0000\u0396\u0399\u0001\u0000\u0000"+
		"\u0000\u0397\u0395\u0001\u0000\u0000\u0000\u0398\u036f\u0001\u0000\u0000"+
		"\u0000\u0398\u0378\u0001\u0000\u0000\u0000\u0398\u0381\u0001\u0000\u0000"+
		"\u0000\u0398\u0388\u0001\u0000\u0000\u0000\u0398\u038c\u0001\u0000\u0000"+
		"\u0000\u0399\u039c\u0001\u0000\u0000\u0000\u039a\u0398\u0001\u0000\u0000"+
		"\u0000\u039a\u039b\u0001\u0000\u0000\u0000\u039b\u0083\u0001\u0000\u0000"+
		"\u0000\u039c\u039a\u0001\u0000\u0000\u0000\u039d\u039e\u0005{\u0000\u0000"+
		"\u039e\u0085\u0001\u0000\u0000\u0000\u039f\u03a8\u00030\u0018\u0000\u03a0"+
		"\u03a1\u00059\u0000\u0000\u03a1\u03a3\u0003\u0088D\u0000\u03a2\u03a4\u0005"+
		"R\u0000\u0000\u03a3\u03a2\u0001\u0000\u0000\u0000\u03a3\u03a4\u0001\u0000"+
		"\u0000\u0000\u03a4\u03a5\u0001\u0000\u0000\u0000\u03a5\u03a6\u0005:\u0000"+
		"\u0000\u03a6\u03a8\u0001\u0000\u0000\u0000\u03a7\u039f\u0001\u0000\u0000"+
		"\u0000\u03a7\u03a0\u0001\u0000\u0000\u0000\u03a8\u0087\u0001\u0000\u0000"+
		"\u0000\u03a9\u03ab\u0003\u008aE\u0000\u03aa\u03a9\u0001\u0000\u0000\u0000"+
		"\u03aa\u03ab\u0001\u0000\u0000\u0000\u03ab\u03ac\u0001\u0000\u0000\u0000"+
		"\u03ac\u03b4\u0003\u0086C\u0000\u03ad\u03af\u0005R\u0000\u0000\u03ae\u03b0"+
		"\u0003\u008aE\u0000\u03af\u03ae\u0001\u0000\u0000\u0000\u03af\u03b0\u0001"+
		"\u0000\u0000\u0000\u03b0\u03b1\u0001\u0000\u0000\u0000\u03b1\u03b3\u0003"+
		"\u0086C\u0000\u03b2\u03ad\u0001\u0000\u0000\u0000\u03b3\u03b6\u0001\u0000"+
		"\u0000\u0000\u03b4\u03b2\u0001\u0000\u0000\u0000\u03b4\u03b5\u0001\u0000"+
		"\u0000\u0000\u03b5\u0089\u0001\u0000\u0000\u0000\u03b6\u03b4\u0001\u0000"+
		"\u0000\u0000\u03b7\u03b8\u0003\u008cF\u0000\u03b8\u03b9\u0005S\u0000\u0000"+
		"\u03b9\u03bc\u0001\u0000\u0000\u0000\u03ba\u03bc\u0003d2\u0000\u03bb\u03b7"+
		"\u0001\u0000\u0000\u0000\u03bb\u03ba\u0001\u0000\u0000\u0000\u03bc\u008b"+
		"\u0001\u0000\u0000\u0000\u03bd\u03bf\u0003\u008eG\u0000\u03be\u03bd\u0001"+
		"\u0000\u0000\u0000\u03bf\u03c0\u0001\u0000\u0000\u0000\u03c0\u03be\u0001"+
		"\u0000\u0000\u0000\u03c0\u03c1\u0001\u0000\u0000\u0000\u03c1\u008d\u0001"+
		"\u0000\u0000\u0000\u03c2\u03c3\u00057\u0000\u0000\u03c3\u03c4\u00036\u001b"+
		"\u0000\u03c4\u03c5\u00058\u0000\u0000\u03c5\u03c9\u0001\u0000\u0000\u0000"+
		"\u03c6\u03c7\u0005a\u0000\u0000\u03c7\u03c9\u0005{\u0000\u0000\u03c8\u03c2"+
		"\u0001\u0000\u0000\u0000\u03c8\u03c6\u0001\u0000\u0000\u0000\u03c9\u008f"+
		"\u0001\u0000\u0000\u0000\u03ca\u03cb\u00053\u0000\u0000\u03cb\u03cc\u0005"+
		"5\u0000\u0000\u03cc\u03cd\u00036\u001b\u0000\u03cd\u03cf\u0005R\u0000"+
		"\u0000\u03ce\u03d0\u0005}\u0000\u0000\u03cf\u03ce\u0001\u0000\u0000\u0000"+
		"\u03d0\u03d1\u0001\u0000\u0000\u0000\u03d1\u03cf\u0001\u0000\u0000\u0000"+
		"\u03d1\u03d2\u0001\u0000\u0000\u0000\u03d2\u03d3\u0001\u0000\u0000\u0000"+
		"\u03d3\u03d4\u00056\u0000\u0000\u03d4\u03d5\u0005Q\u0000\u0000\u03d5\u0091"+
		"\u0001\u0000\u0000\u0000\u03d6\u03d7\u0003\u0094J\u0000\u03d7\u0093\u0001"+
		"\u0000\u0000\u0000\u03d8\u03e4\u0003\u009aM\u0000\u03d9\u03e4\u0003\u009c"+
		"N\u0000\u03da\u03e4\u0003\u00a2Q\u0000\u03db\u03e4\u0003\u00a4R\u0000"+
		"\u03dc\u03e4\u0003\u00a6S\u0000\u03dd\u03e4\u0003\u00aeW\u0000\u03de\u03e0"+
		"\u0007\u0012\u0000\u0000\u03df\u03e1\u0007\u0013\u0000\u0000\u03e0\u03df"+
		"\u0001\u0000\u0000\u0000\u03e0\u03e1\u0001\u0000\u0000\u0000\u03e1\u03e2"+
		"\u0001\u0000\u0000\u0000\u03e2\u03e4\u0003\u0096K\u0000\u03e3\u03d8\u0001"+
		"\u0000\u0000\u0000\u03e3\u03d9\u0001\u0000\u0000\u0000\u03e3\u03da\u0001"+
		"\u0000\u0000\u0000\u03e3\u03db\u0001\u0000\u0000\u0000\u03e3\u03dc\u0001"+
		"\u0000\u0000\u0000\u03e3\u03dd\u0001\u0000\u0000\u0000\u03e3\u03de\u0001"+
		"\u0000\u0000\u0000\u03e4\u0095\u0001\u0000\u0000\u0000\u03e5\u03e7\u0005"+
		"5\u0000\u0000\u03e6\u03e8\u0003\u0098L\u0000\u03e7\u03e6\u0001\u0000\u0000"+
		"\u0000\u03e7\u03e8\u0001\u0000\u0000\u0000\u03e8\u03ef\u0001\u0000\u0000"+
		"\u0000\u03e9\u03eb\u0005P\u0000\u0000\u03ea\u03ec\u0003\u0098L\u0000\u03eb"+
		"\u03ea\u0001\u0000\u0000\u0000\u03eb\u03ec\u0001\u0000\u0000\u0000\u03ec"+
		"\u03ee\u0001\u0000\u0000\u0000\u03ed\u03e9\u0001\u0000\u0000\u0000\u03ee"+
		"\u03f1\u0001\u0000\u0000\u0000\u03ef\u03ed\u0001\u0000\u0000\u0000\u03ef"+
		"\u03f0\u0001\u0000\u0000\u0000\u03f0\u03f2\u0001\u0000\u0000\u0000\u03f1"+
		"\u03ef\u0001\u0000\u0000\u0000\u03f2\u03f4\u00056\u0000\u0000\u03f3\u03f5"+
		"\u0005Q\u0000\u0000\u03f4\u03f3\u0001\u0000\u0000\u0000\u03f4\u03f5\u0001"+
		"\u0000\u0000\u0000\u03f5\u03fa\u0001\u0000\u0000\u0000\u03f6\u03f7\u0003"+
		"B!\u0000\u03f7\u03f8\u00034\u001a\u0000\u03f8\u03fa\u0001\u0000\u0000"+
		"\u0000\u03f9\u03e5\u0001\u0000\u0000\u0000\u03f9\u03f6\u0001\u0000\u0000"+
		"\u0000\u03fa\u0097\u0001\u0000\u0000\u0000\u03fb\u0400\u0003,\u0016\u0000"+
		"\u03fc\u03fd\u0005R\u0000\u0000\u03fd\u03ff\u0003,\u0016\u0000\u03fe\u03fc"+
		"\u0001\u0000\u0000\u0000\u03ff\u0402\u0001\u0000\u0000\u0000\u0400\u03fe"+
		"\u0001\u0000\u0000\u0000\u0400\u0401\u0001\u0000\u0000\u0000\u0401\u0099"+
		"\u0001\u0000\u0000\u0000\u0402\u0400\u0001\u0000\u0000\u0000\u0403\u0404"+
		"\u0005{\u0000\u0000\u0404\u0406\u0005P\u0000\u0000\u0405\u0407\u0003\u0092"+
		"I\u0000\u0406\u0405\u0001\u0000\u0000\u0000\u0406\u0407\u0001\u0000\u0000"+
		"\u0000\u0407\u0411\u0001\u0000\u0000\u0000\u0408\u0409\u0005\u000b\u0000"+
		"\u0000\u0409\u040a\u00036\u001b\u0000\u040a\u040b\u0005P\u0000\u0000\u040b"+
		"\u040c\u0003\u0092I\u0000\u040c\u0411\u0001\u0000\u0000\u0000\u040d\u040e"+
		"\u0005\u000f\u0000\u0000\u040e\u040f\u0005P\u0000\u0000\u040f\u0411\u0003"+
		"\u0092I\u0000\u0410\u0403\u0001\u0000\u0000\u0000\u0410\u0408\u0001\u0000"+
		"\u0000\u0000\u0410\u040d\u0001\u0000\u0000\u0000\u0411\u009b\u0001\u0000"+
		"\u0000\u0000\u0412\u0414\u00059\u0000\u0000\u0413\u0415\u0003\u009eO\u0000"+
		"\u0414\u0413\u0001\u0000\u0000\u0000\u0414\u0415\u0001\u0000\u0000\u0000"+
		"\u0415\u0416\u0001\u0000\u0000\u0000\u0416\u0417\u0005:\u0000\u0000\u0417"+
		"\u009d\u0001\u0000\u0000\u0000\u0418\u041a\u0003\u00a0P\u0000\u0419\u0418"+
		"\u0001\u0000\u0000\u0000\u041a\u041b\u0001\u0000\u0000\u0000\u041b\u0419"+
		"\u0001\u0000\u0000\u0000\u041b\u041c\u0001\u0000\u0000\u0000\u041c\u009f"+
		"\u0001\u0000\u0000\u0000\u041d\u0420\u0003\u0092I\u0000\u041e\u0420\u0003"+
		"8\u001c\u0000\u041f\u041d\u0001\u0000\u0000\u0000\u041f\u041e\u0001\u0000"+
		"\u0000\u0000\u0420\u00a1\u0001\u0000\u0000\u0000\u0421\u0423\u00034\u001a"+
		"\u0000\u0422\u0421\u0001\u0000\u0000\u0000\u0422\u0423\u0001\u0000\u0000"+
		"\u0000\u0423\u0424\u0001\u0000\u0000\u0000\u0424\u042a\u0005Q\u0000\u0000"+
		"\u0425\u0427\u00034\u001a\u0000\u0426\u0428\u0005Q\u0000\u0000\u0427\u0426"+
		"\u0001\u0000\u0000\u0000\u0427\u0428\u0001\u0000\u0000\u0000\u0428\u042a"+
		"\u0001\u0000\u0000\u0000\u0429\u0422\u0001\u0000\u0000\u0000\u0429\u0425"+
		"\u0001\u0000\u0000\u0000\u042a\u00a3\u0001\u0000\u0000\u0000\u042b\u042c"+
		"\u0005\u0018\u0000\u0000\u042c\u042d\u00055\u0000\u0000\u042d\u042e\u0003"+
		"4\u001a\u0000\u042e\u0430\u00056\u0000\u0000\u042f\u0431\u0003\u0092I"+
		"\u0000\u0430\u042f\u0001\u0000\u0000\u0000\u0430\u0431\u0001\u0000\u0000"+
		"\u0000\u0431\u0434\u0001\u0000\u0000\u0000\u0432\u0433\u0005\u0012\u0000"+
		"\u0000\u0433\u0435\u0003\u0092I\u0000\u0434\u0432\u0001\u0000\u0000\u0000"+
		"\u0434\u0435\u0001\u0000\u0000\u0000\u0435\u043d\u0001\u0000\u0000\u0000"+
		"\u0436\u0437\u0005$\u0000\u0000\u0437\u0438\u00055\u0000\u0000\u0438\u0439"+
		"\u00034\u001a\u0000\u0439\u043a\u00056\u0000\u0000\u043a\u043b\u0003\u0092"+
		"I\u0000\u043b\u043d\u0001\u0000\u0000\u0000\u043c\u042b\u0001\u0000\u0000"+
		"\u0000\u043c\u0436\u0001\u0000\u0000\u0000\u043d\u00a5\u0001\u0000\u0000"+
		"\u0000\u043e\u043f\u0005*\u0000\u0000\u043f\u0440\u00055\u0000\u0000\u0440"+
		"\u0441\u00034\u001a\u0000\u0441\u0442\u00056\u0000\u0000\u0442\u0443\u0003"+
		"\u0092I\u0000\u0443\u0453\u0001\u0000\u0000\u0000\u0444\u0445\u0005\u0010"+
		"\u0000\u0000\u0445\u0446\u0003\u0092I\u0000\u0446\u0447\u0005*\u0000\u0000"+
		"\u0447\u0448\u00055\u0000\u0000\u0448\u0449\u00034\u001a\u0000\u0449\u044a"+
		"\u00056\u0000\u0000\u044a\u044b\u0005Q\u0000\u0000\u044b\u0453\u0001\u0000"+
		"\u0000\u0000\u044c\u044d\u0005\u0016\u0000\u0000\u044d\u044e\u00055\u0000"+
		"\u0000\u044e\u044f\u0003\u00a8T\u0000\u044f\u0450\u00056\u0000\u0000\u0450"+
		"\u0451\u0003\u0092I\u0000\u0451\u0453\u0001\u0000\u0000\u0000\u0452\u043e"+
		"\u0001\u0000\u0000\u0000\u0452\u0444\u0001\u0000\u0000\u0000\u0452\u044c"+
		"\u0001\u0000\u0000\u0000\u0453\u00a7\u0001\u0000\u0000\u0000\u0454\u0459"+
		"\u0003\u00aaU\u0000\u0455\u0457\u00034\u001a\u0000\u0456\u0455\u0001\u0000"+
		"\u0000\u0000\u0456\u0457\u0001\u0000\u0000\u0000\u0457\u0459\u0001\u0000"+
		"\u0000\u0000\u0458\u0454\u0001\u0000\u0000\u0000\u0458\u0456\u0001\u0000"+
		"\u0000\u0000\u0459\u045a\u0001\u0000\u0000\u0000\u045a\u045c\u0005Q\u0000"+
		"\u0000\u045b\u045d\u0003\u00acV\u0000\u045c\u045b\u0001\u0000\u0000\u0000"+
		"\u045c\u045d\u0001\u0000\u0000\u0000\u045d\u045e\u0001\u0000\u0000\u0000"+
		"\u045e\u0460\u0005Q\u0000\u0000\u045f\u0461\u0003\u00acV\u0000\u0460\u045f"+
		"\u0001\u0000\u0000\u0000\u0460\u0461\u0001\u0000\u0000\u0000\u0461\u00a9"+
		"\u0001\u0000\u0000\u0000\u0462\u0464\u0003:\u001d\u0000\u0463\u0462\u0001"+
		"\u0000\u0000\u0000\u0464\u0465\u0001\u0000\u0000\u0000\u0465\u0463\u0001"+
		"\u0000\u0000\u0000\u0465\u0466\u0001\u0000\u0000\u0000\u0466\u0468\u0001"+
		"\u0000\u0000\u0000\u0467\u0469\u0003<\u001e\u0000\u0468\u0467\u0001\u0000"+
		"\u0000\u0000\u0468\u0469\u0001\u0000\u0000\u0000\u0469\u00ab\u0001\u0000"+
		"\u0000\u0000\u046a\u046f\u00030\u0018\u0000\u046b\u046c\u0005R\u0000\u0000"+
		"\u046c\u046e\u00030\u0018\u0000\u046d\u046b\u0001\u0000\u0000\u0000\u046e"+
		"\u0471\u0001\u0000\u0000\u0000\u046f\u046d\u0001\u0000\u0000\u0000\u046f"+
		"\u0470\u0001\u0000\u0000\u0000\u0470\u00ad\u0001\u0000\u0000\u0000\u0471"+
		"\u046f\u0001\u0000\u0000\u0000\u0472\u0473\u0005\u0017\u0000\u0000\u0473"+
		"\u047d\u0005{\u0000\u0000\u0474\u047d\u0005\u000e\u0000\u0000\u0475\u047d"+
		"\u0005\n\u0000\u0000\u0476\u0478\u0005\u001e\u0000\u0000\u0477\u0479\u0003"+
		"4\u001a\u0000\u0478\u0477\u0001\u0000\u0000\u0000\u0478\u0479\u0001\u0000"+
		"\u0000\u0000\u0479\u047d\u0001\u0000\u0000\u0000\u047a\u047b\u0005\u0017"+
		"\u0000\u0000\u047b\u047d\u0003\u0012\t\u0000\u047c\u0472\u0001\u0000\u0000"+
		"\u0000\u047c\u0474\u0001\u0000\u0000\u0000\u047c\u0475\u0001\u0000\u0000"+
		"\u0000\u047c\u0476\u0001\u0000\u0000\u0000\u047c\u047a\u0001\u0000\u0000"+
		"\u0000\u047d\u047e\u0001\u0000\u0000\u0000\u047e\u047f\u0005Q\u0000\u0000"+
		"\u047f\u00af\u0001\u0000\u0000\u0000\u0480\u0484\u0003\u00b2Y\u0000\u0481"+
		"\u0484\u00038\u001c\u0000\u0482\u0484\u0005Q\u0000\u0000\u0483\u0480\u0001"+
		"\u0000\u0000\u0000\u0483\u0481\u0001\u0000\u0000\u0000\u0483\u0482\u0001"+
		"\u0000\u0000\u0000\u0484\u00b1\u0001\u0000\u0000\u0000\u0485\u0487\u0003"+
		":\u001d\u0000\u0486\u0485\u0001\u0000\u0000\u0000\u0487\u0488\u0001\u0000"+
		"\u0000\u0000\u0488\u0486\u0001\u0000\u0000\u0000\u0488\u0489\u0001\u0000"+
		"\u0000\u0000\u0489\u048b\u0001\u0000\u0000\u0000\u048a\u0486\u0001\u0000"+
		"\u0000\u0000\u048a\u048b\u0001\u0000\u0000\u0000\u048b\u048c\u0001\u0000"+
		"\u0000\u0000\u048c\u048e\u0003b1\u0000\u048d\u048f\u0003\u00b4Z\u0000"+
		"\u048e\u048d\u0001\u0000\u0000\u0000\u048e\u048f\u0001\u0000\u0000\u0000"+
		"\u048f\u0490\u0001\u0000\u0000\u0000\u0490\u0491\u0003\u009cN\u0000\u0491"+
		"\u00b3\u0001\u0000\u0000\u0000\u0492\u0494\u00038\u001c\u0000\u0493\u0492"+
		"\u0001\u0000\u0000\u0000\u0494\u0495\u0001\u0000\u0000\u0000\u0495\u0493"+
		"\u0001\u0000\u0000\u0000\u0495\u0496\u0001\u0000\u0000\u0000\u0496\u00b5"+
		"\u0001\u0000\u0000\u0000\u0497\u0498\u0007\u0014\u0000\u0000\u0498\u00b7"+
		"\u0001\u0000\u0000\u0000\u0499\u049a\u0007\u0015\u0000\u0000\u049a\u00b9"+
		"\u0001\u0000\u0000\u0000\u0097\u00bd\u00c7\u00cf\u00e7\u00eb\u00ed\u00fb"+
		"\u0100\u0107\u010c\u010e\u0112\u011a\u0124\u0127\u012c\u0133\u0139\u0147"+
		"\u014c\u0155\u015c\u0164\u016c\u0175\u017f\u0187\u018f\u0197\u019f\u01a7"+
		"\u01b0\u01b8\u01c1\u01c5\u01ca\u01cf\u01d2\u01d7\u01de\u01e5\u01eb\u020b"+
		"\u020f\u0218\u021f\u0223\u0228\u022c\u022f\u0236\u023b\u023f\u0243\u0248"+
		"\u024e\u0255\u025b\u026f\u0275\u027a\u0280\u0291\u0297\u029c\u029f\u02a6"+
		"\u02b5\u02c1\u02c4\u02c6\u02d0\u02d4\u02de\u02e2\u02e6\u02ec\u02ef\u02f6"+
		"\u02f8\u02fd\u0301\u0306\u030b\u0312\u0318\u031f\u0322\u0324\u032b\u0330"+
		"\u0334\u033a\u033d\u0346\u034b\u034e\u0354\u0364\u036a\u036d\u0372\u0375"+
		"\u037c\u038f\u0395\u0398\u039a\u03a3\u03a7\u03aa\u03af\u03b4\u03bb\u03c0"+
		"\u03c8\u03d1\u03e0\u03e3\u03e7\u03eb\u03ef\u03f4\u03f9\u0400\u0406\u0410"+
		"\u0414\u041b\u041f\u0422\u0427\u0429\u0430\u0434\u043c\u0452\u0456\u0458"+
		"\u045c\u0460\u0465\u0468\u046f\u0478\u047c\u0483\u0488\u048a\u048e\u0495";
	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 - 2024 Weber Informatics LLC | Privacy Policy