diff --git a/pom.xml b/pom.xml
index e02bdec..d85be75 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
com.github.odiszapc
nginxparser
0.9.6
- jar
+ bundle
${project.groupId}:${project.artifactId}
Parses Nginx configuration files with JavaCC grammar based parser
@@ -84,6 +84,12 @@
+
+ org.apache.felix
+ maven-bundle-plugin
+ 2.5.4
+ true
+
org.apache.maven.plugins
maven-compiler-plugin
diff --git a/src/main/java/com/github/odiszapc/nginxparser/antlr/NginxParser.java b/src/main/java/com/github/odiszapc/nginxparser/antlr/NginxParser.java
index 7610218..2d6d479 100644
--- a/src/main/java/com/github/odiszapc/nginxparser/antlr/NginxParser.java
+++ b/src/main/java/com/github/odiszapc/nginxparser/antlr/NginxParser.java
@@ -270,11 +270,16 @@ public final StatementContext statement() throws RecognitionException {
public static class GenericStatementContext extends ParserRuleContext {
public NgxParam ret;
public Token Value;
- public RegexpContext r;
+ public Token REGEXP_PREFIXED;
+ public RegexpContext regexp;
public List Value() { return getTokens(NginxParser.Value); }
public TerminalNode Value(int i) {
return getToken(NginxParser.Value, i);
}
+ public List REGEXP_PREFIXED() { return getTokens(NginxParser.REGEXP_PREFIXED); }
+ public TerminalNode REGEXP_PREFIXED(int i) {
+ return getToken(NginxParser.REGEXP_PREFIXED, i);
+ }
public List regexp() {
return getRuleContexts(RegexpContext.class);
}
@@ -311,12 +316,12 @@ public final GenericStatementContext genericStatement() throws RecognitionExcept
setState(47);
((GenericStatementContext)_localctx).Value = match(Value);
_localctx.ret.addValue((((GenericStatementContext)_localctx).Value!=null?((GenericStatementContext)_localctx).Value.getText():null));
- setState(56);
+ setState(58);
_errHandler.sync(this);
_la = _input.LA(1);
- while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__4) | (1L << T__6) | (1L << T__7) | (1L << Value))) != 0)) {
+ while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__4) | (1L << T__6) | (1L << T__7) | (1L << Value) | (1L << REGEXP_PREFIXED))) != 0)) {
{
- setState(54);
+ setState(56);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,3,_ctx) ) {
case 1:
@@ -329,13 +334,20 @@ public final GenericStatementContext genericStatement() throws RecognitionExcept
case 2:
{
setState(51);
- ((GenericStatementContext)_localctx).r = regexp();
- _localctx.ret.addValue(((GenericStatementContext)_localctx).r.ret);
+ ((GenericStatementContext)_localctx).REGEXP_PREFIXED = match(REGEXP_PREFIXED);
+ _localctx.ret.addValue((((GenericStatementContext)_localctx).REGEXP_PREFIXED!=null?((GenericStatementContext)_localctx).REGEXP_PREFIXED.getText():null));
+ }
+ break;
+ case 3:
+ {
+ setState(53);
+ ((GenericStatementContext)_localctx).regexp = regexp();
+ _localctx.ret.addValue(((GenericStatementContext)_localctx).regexp.ret);
}
break;
}
}
- setState(58);
+ setState(60);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -384,10 +396,10 @@ public final RegexHeaderStatementContext regexHeaderStatement() throws Recogniti
try {
enterOuterAlt(_localctx, 1);
{
- setState(59);
+ setState(61);
((RegexHeaderStatementContext)_localctx).REGEXP_PREFIXED = match(REGEXP_PREFIXED);
_localctx.ret.addValue((((RegexHeaderStatementContext)_localctx).REGEXP_PREFIXED!=null?((RegexHeaderStatementContext)_localctx).REGEXP_PREFIXED.getText():null));
- setState(61);
+ setState(63);
((RegexHeaderStatementContext)_localctx).Value = match(Value);
_localctx.ret.addValue((((RegexHeaderStatementContext)_localctx).Value!=null?((RegexHeaderStatementContext)_localctx).Value.getText():null));
}
@@ -466,18 +478,18 @@ public final BlockContext block() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(70);
+ setState(72);
switch (_input.LA(1)) {
case T__8:
{
- setState(64);
+ setState(66);
((BlockContext)_localctx).locationBlockHeader = locationBlockHeader();
_localctx.ret.getTokens().addAll(((BlockContext)_localctx).locationBlockHeader.ret);
}
break;
case Value:
{
- setState(67);
+ setState(69);
((BlockContext)_localctx).genericBlockHeader = genericBlockHeader();
_localctx.ret.getTokens().addAll(((BlockContext)_localctx).genericBlockHeader.ret);
}
@@ -485,60 +497,60 @@ public final BlockContext block() throws RecognitionException {
default:
throw new NoViableAltException(this);
}
- setState(73);
+ setState(75);
_la = _input.LA(1);
if (_la==Comment) {
{
- setState(72);
+ setState(74);
((BlockContext)_localctx).Comment = match(Comment);
}
}
- setState(75);
+ setState(77);
match(T__1);
- setState(89);
+ setState(91);
_errHandler.sync(this);
_la = _input.LA(1);
while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__8) | (1L << T__9) | (1L << Value) | (1L << Comment) | (1L << REGEXP_PREFIXED))) != 0)) {
{
- setState(87);
+ setState(89);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,7,_ctx) ) {
case 1:
{
- setState(76);
+ setState(78);
((BlockContext)_localctx).statement = statement();
_localctx.ret.addEntry(((BlockContext)_localctx).statement.ret);
}
break;
case 2:
{
- setState(79);
+ setState(81);
((BlockContext)_localctx).b = block();
_localctx.ret.addEntry(((BlockContext)_localctx).b.ret);
}
break;
case 3:
{
- setState(82);
+ setState(84);
((BlockContext)_localctx).if_statement = if_statement();
_localctx.ret.addEntry(((BlockContext)_localctx).if_statement.ret);
}
break;
case 4:
{
- setState(85);
+ setState(87);
((BlockContext)_localctx).Comment = match(Comment);
_localctx.ret.addEntry(new NgxComment((((BlockContext)_localctx).Comment!=null?((BlockContext)_localctx).Comment.getText():null)));
}
break;
}
}
- setState(91);
+ setState(93);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(92);
+ setState(94);
match(T__2);
}
}
@@ -594,34 +606,34 @@ public final GenericBlockHeaderContext genericBlockHeader() throws RecognitionEx
try {
enterOuterAlt(_localctx, 1);
{
- setState(94);
+ setState(96);
((GenericBlockHeaderContext)_localctx).Value = match(Value);
_localctx.ret.add(new NgxToken((((GenericBlockHeaderContext)_localctx).Value!=null?((GenericBlockHeaderContext)_localctx).Value.getText():null)));
- setState(103);
+ setState(105);
_errHandler.sync(this);
_la = _input.LA(1);
while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__4) | (1L << T__6) | (1L << T__7) | (1L << Value))) != 0)) {
{
- setState(101);
+ setState(103);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,9,_ctx) ) {
case 1:
{
- setState(96);
+ setState(98);
((GenericBlockHeaderContext)_localctx).Value = match(Value);
_localctx.ret.add(new NgxToken((((GenericBlockHeaderContext)_localctx).Value!=null?((GenericBlockHeaderContext)_localctx).Value.getText():null)));
}
break;
case 2:
{
- setState(98);
+ setState(100);
((GenericBlockHeaderContext)_localctx).regexp = regexp();
_localctx.ret.add(new NgxToken(((GenericBlockHeaderContext)_localctx).regexp.ret));
}
break;
}
}
- setState(105);
+ setState(107);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -680,39 +692,39 @@ public final If_statementContext if_statement() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(106);
+ setState(108);
((If_statementContext)_localctx).id = match(T__3);
_localctx.ret.addValue(new NgxToken((((If_statementContext)_localctx).id!=null?((If_statementContext)_localctx).id.getText():null)));
- setState(108);
+ setState(110);
((If_statementContext)_localctx).if_body = if_body();
_localctx.ret.getTokens().addAll(((If_statementContext)_localctx).if_body.ret);
- setState(111);
+ setState(113);
_la = _input.LA(1);
if (_la==Comment) {
{
- setState(110);
+ setState(112);
match(Comment);
}
}
- setState(113);
+ setState(115);
match(T__1);
- setState(119);
+ setState(121);
_errHandler.sync(this);
_la = _input.LA(1);
while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__9) | (1L << Value) | (1L << REGEXP_PREFIXED))) != 0)) {
{
{
- setState(114);
+ setState(116);
((If_statementContext)_localctx).statement = statement();
_localctx.ret.addEntry(((If_statementContext)_localctx).statement.ret);
}
}
- setState(121);
+ setState(123);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(122);
+ setState(124);
match(T__2);
}
}
@@ -764,41 +776,41 @@ public final If_bodyContext if_body() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(124);
+ setState(126);
match(T__4);
- setState(125);
+ setState(127);
((If_bodyContext)_localctx).Value = match(Value);
_localctx.ret.add(new NgxToken((((If_bodyContext)_localctx).Value!=null?((If_bodyContext)_localctx).Value.getText():null)));
- setState(129);
+ setState(131);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,13,_ctx) ) {
case 1:
{
- setState(127);
+ setState(129);
((If_bodyContext)_localctx).Value = match(Value);
_localctx.ret.add(new NgxToken((((If_bodyContext)_localctx).Value!=null?((If_bodyContext)_localctx).Value.getText():null)));
}
break;
}
- setState(136);
+ setState(138);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) {
case 1:
{
- setState(131);
+ setState(133);
((If_bodyContext)_localctx).Value = match(Value);
_localctx.ret.add(new NgxToken((((If_bodyContext)_localctx).Value!=null?((If_bodyContext)_localctx).Value.getText():null)));
}
break;
case 2:
{
- setState(133);
+ setState(135);
((If_bodyContext)_localctx).regexp = regexp();
_localctx.ret.add(new NgxToken(((If_bodyContext)_localctx).regexp.ret));
}
break;
}
- setState(138);
+ setState(140);
match(T__5);
}
}
@@ -855,44 +867,44 @@ public final RegexpContext regexp() throws RecognitionException {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(151);
+ setState(153);
_errHandler.sync(this);
_alt = 1;
do {
switch (_alt) {
case 1:
{
- setState(151);
+ setState(153);
switch (_input.LA(1)) {
case T__6:
{
- setState(140);
+ setState(142);
((RegexpContext)_localctx).id = match(T__6);
_localctx.ret += (((RegexpContext)_localctx).id!=null?((RegexpContext)_localctx).id.getText():null);
}
break;
case T__7:
{
- setState(142);
+ setState(144);
((RegexpContext)_localctx).id = match(T__7);
_localctx.ret += (((RegexpContext)_localctx).id!=null?((RegexpContext)_localctx).id.getText():null);
}
break;
case Value:
{
- setState(144);
+ setState(146);
((RegexpContext)_localctx).Value = match(Value);
_localctx.ret += (((RegexpContext)_localctx).Value!=null?((RegexpContext)_localctx).Value.getText():null);
}
break;
case T__4:
{
- setState(146);
+ setState(148);
match(T__4);
- setState(147);
+ setState(149);
((RegexpContext)_localctx).r = regexp();
_localctx.ret += "(".concat(((RegexpContext)_localctx).r.ret).concat(")");
- setState(149);
+ setState(151);
match(T__5);
}
break;
@@ -904,7 +916,7 @@ public final RegexpContext regexp() throws RecognitionException {
default:
throw new NoViableAltException(this);
}
- setState(153);
+ setState(155);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,16,_ctx);
} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
@@ -959,33 +971,33 @@ public final LocationBlockHeaderContext locationBlockHeader() throws Recognition
try {
enterOuterAlt(_localctx, 1);
{
- setState(155);
+ setState(157);
((LocationBlockHeaderContext)_localctx).id = match(T__8);
_localctx.ret.add(new NgxToken((((LocationBlockHeaderContext)_localctx).id!=null?((LocationBlockHeaderContext)_localctx).id.getText():null)));
- setState(159);
+ setState(161);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,17,_ctx) ) {
case 1:
{
- setState(157);
+ setState(159);
((LocationBlockHeaderContext)_localctx).Value = match(Value);
_localctx.ret.add(new NgxToken((((LocationBlockHeaderContext)_localctx).Value!=null?((LocationBlockHeaderContext)_localctx).Value.getText():null)));
}
break;
}
- setState(166);
+ setState(168);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,18,_ctx) ) {
case 1:
{
- setState(161);
+ setState(163);
((LocationBlockHeaderContext)_localctx).Value = match(Value);
_localctx.ret.add(new NgxToken((((LocationBlockHeaderContext)_localctx).Value!=null?((LocationBlockHeaderContext)_localctx).Value.getText():null)));
}
break;
case 2:
{
- setState(163);
+ setState(165);
((LocationBlockHeaderContext)_localctx).regexp = regexp();
_localctx.ret.add(new NgxToken(((LocationBlockHeaderContext)_localctx).regexp.ret));
}
@@ -1044,35 +1056,35 @@ public final RewriteStatementContext rewriteStatement() throws RecognitionExcept
try {
enterOuterAlt(_localctx, 1);
{
- setState(168);
+ setState(170);
((RewriteStatementContext)_localctx).id = match(T__9);
_localctx.ret.addValue((((RewriteStatementContext)_localctx).id!=null?((RewriteStatementContext)_localctx).id.getText():null));
- setState(175);
+ setState(177);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,19,_ctx) ) {
case 1:
{
- setState(170);
+ setState(172);
((RewriteStatementContext)_localctx).Value = match(Value);
_localctx.ret.addValue((((RewriteStatementContext)_localctx).Value!=null?((RewriteStatementContext)_localctx).Value.getText():null));
}
break;
case 2:
{
- setState(172);
+ setState(174);
((RewriteStatementContext)_localctx).regexp = regexp();
_localctx.ret.addValue(((RewriteStatementContext)_localctx).regexp.ret);
}
break;
}
- setState(177);
+ setState(179);
((RewriteStatementContext)_localctx).Value = match(Value);
_localctx.ret.addValue((((RewriteStatementContext)_localctx).Value!=null?((RewriteStatementContext)_localctx).Value.getText():null));
- setState(181);
+ setState(183);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13))) != 0)) {
{
- setState(179);
+ setState(181);
((RewriteStatementContext)_localctx).opt = _input.LT(1);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13))) != 0)) ) {
@@ -1098,61 +1110,62 @@ public final RewriteStatementContext rewriteStatement() throws RecognitionExcept
}
public static final String _serializedATN =
- "\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\3\27\u00ba\4\2\t\2"+
+ "\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\3\27\u00bc\4\2\t\2"+
"\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+
"\t\13\4\f\t\f\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2\6\2!\n\2\r\2\16\2\"\3\3"+
"\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\5\3.\n\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4"+
- "\3\4\3\4\7\49\n\4\f\4\16\4<\13\4\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\6\3"+
- "\6\3\6\5\6I\n\6\3\6\5\6L\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3"+
- "\6\3\6\7\6Z\n\6\f\6\16\6]\13\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3\7\7\7"+
- "h\n\7\f\7\16\7k\13\7\3\b\3\b\3\b\3\b\3\b\5\br\n\b\3\b\3\b\3\b\3\b\7\b"+
- "x\n\b\f\b\16\b{\13\b\3\b\3\b\3\t\3\t\3\t\3\t\3\t\5\t\u0084\n\t\3\t\3\t"+
- "\3\t\3\t\3\t\5\t\u008b\n\t\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n"+
- "\3\n\3\n\6\n\u009a\n\n\r\n\16\n\u009b\3\13\3\13\3\13\3\13\5\13\u00a2\n"+
- "\13\3\13\3\13\3\13\3\13\3\13\5\13\u00a9\n\13\3\f\3\f\3\f\3\f\3\f\3\f\3"+
- "\f\5\f\u00b2\n\f\3\f\3\f\3\f\3\f\5\f\u00b8\n\f\3\f\2\2\r\2\4\6\b\n\f\16"+
- "\20\22\24\26\2\3\3\2\r\20\u00ca\2 \3\2\2\2\4-\3\2\2\2\6\61\3\2\2\2\b="+
- "\3\2\2\2\nH\3\2\2\2\f`\3\2\2\2\16l\3\2\2\2\20~\3\2\2\2\22\u0099\3\2\2"+
- "\2\24\u009d\3\2\2\2\26\u00aa\3\2\2\2\30\31\5\4\3\2\31\32\b\2\1\2\32!\3"+
- "\2\2\2\33\34\5\n\6\2\34\35\b\2\1\2\35!\3\2\2\2\36\37\7\23\2\2\37!\b\2"+
- "\1\2 \30\3\2\2\2 \33\3\2\2\2 \36\3\2\2\2!\"\3\2\2\2\" \3\2\2\2\"#\3\2"+
- "\2\2#\3\3\2\2\2$%\5\26\f\2%&\b\3\1\2&.\3\2\2\2\'(\5\6\4\2()\b\3\1\2)."+
- "\3\2\2\2*+\5\b\5\2+,\b\3\1\2,.\3\2\2\2-$\3\2\2\2-\'\3\2\2\2-*\3\2\2\2"+
- "./\3\2\2\2/\60\7\3\2\2\60\5\3\2\2\2\61\62\7\21\2\2\62:\b\4\1\2\63\64\7"+
- "\21\2\2\649\b\4\1\2\65\66\5\22\n\2\66\67\b\4\1\2\679\3\2\2\28\63\3\2\2"+
- "\28\65\3\2\2\29<\3\2\2\2:8\3\2\2\2:;\3\2\2\2;\7\3\2\2\2<:\3\2\2\2=>\7"+
- "\24\2\2>?\b\5\1\2?@\7\21\2\2@A\b\5\1\2A\t\3\2\2\2BC\5\24\13\2CD\b\6\1"+
- "\2DI\3\2\2\2EF\5\f\7\2FG\b\6\1\2GI\3\2\2\2HB\3\2\2\2HE\3\2\2\2IK\3\2\2"+
- "\2JL\7\23\2\2KJ\3\2\2\2KL\3\2\2\2LM\3\2\2\2M[\7\4\2\2NO\5\4\3\2OP\b\6"+
- "\1\2PZ\3\2\2\2QR\5\n\6\2RS\b\6\1\2SZ\3\2\2\2TU\5\16\b\2UV\b\6\1\2VZ\3"+
- "\2\2\2WX\7\23\2\2XZ\b\6\1\2YN\3\2\2\2YQ\3\2\2\2YT\3\2\2\2YW\3\2\2\2Z]"+
- "\3\2\2\2[Y\3\2\2\2[\\\3\2\2\2\\^\3\2\2\2][\3\2\2\2^_\7\5\2\2_\13\3\2\2"+
- "\2`a\7\21\2\2ai\b\7\1\2bc\7\21\2\2ch\b\7\1\2de\5\22\n\2ef\b\7\1\2fh\3"+
- "\2\2\2gb\3\2\2\2gd\3\2\2\2hk\3\2\2\2ig\3\2\2\2ij\3\2\2\2j\r\3\2\2\2ki"+
- "\3\2\2\2lm\7\6\2\2mn\b\b\1\2no\5\20\t\2oq\b\b\1\2pr\7\23\2\2qp\3\2\2\2"+
- "qr\3\2\2\2rs\3\2\2\2sy\7\4\2\2tu\5\4\3\2uv\b\b\1\2vx\3\2\2\2wt\3\2\2\2"+
- "x{\3\2\2\2yw\3\2\2\2yz\3\2\2\2z|\3\2\2\2{y\3\2\2\2|}\7\5\2\2}\17\3\2\2"+
- "\2~\177\7\7\2\2\177\u0080\7\21\2\2\u0080\u0083\b\t\1\2\u0081\u0082\7\21"+
- "\2\2\u0082\u0084\b\t\1\2\u0083\u0081\3\2\2\2\u0083\u0084\3\2\2\2\u0084"+
- "\u008a\3\2\2\2\u0085\u0086\7\21\2\2\u0086\u008b\b\t\1\2\u0087\u0088\5"+
- "\22\n\2\u0088\u0089\b\t\1\2\u0089\u008b\3\2\2\2\u008a\u0085\3\2\2\2\u008a"+
- "\u0087\3\2\2\2\u008a\u008b\3\2\2\2\u008b\u008c\3\2\2\2\u008c\u008d\7\b"+
- "\2\2\u008d\21\3\2\2\2\u008e\u008f\7\t\2\2\u008f\u009a\b\n\1\2\u0090\u0091"+
- "\7\n\2\2\u0091\u009a\b\n\1\2\u0092\u0093\7\21\2\2\u0093\u009a\b\n\1\2"+
- "\u0094\u0095\7\7\2\2\u0095\u0096\5\22\n\2\u0096\u0097\b\n\1\2\u0097\u0098"+
- "\7\b\2\2\u0098\u009a\3\2\2\2\u0099\u008e\3\2\2\2\u0099\u0090\3\2\2\2\u0099"+
- "\u0092\3\2\2\2\u0099\u0094\3\2\2\2\u009a\u009b\3\2\2\2\u009b\u0099\3\2"+
- "\2\2\u009b\u009c\3\2\2\2\u009c\23\3\2\2\2\u009d\u009e\7\13\2\2\u009e\u00a1"+
- "\b\13\1\2\u009f\u00a0\7\21\2\2\u00a0\u00a2\b\13\1\2\u00a1\u009f\3\2\2"+
- "\2\u00a1\u00a2\3\2\2\2\u00a2\u00a8\3\2\2\2\u00a3\u00a4\7\21\2\2\u00a4"+
- "\u00a9\b\13\1\2\u00a5\u00a6\5\22\n\2\u00a6\u00a7\b\13\1\2\u00a7\u00a9"+
- "\3\2\2\2\u00a8\u00a3\3\2\2\2\u00a8\u00a5\3\2\2\2\u00a9\25\3\2\2\2\u00aa"+
- "\u00ab\7\f\2\2\u00ab\u00b1\b\f\1\2\u00ac\u00ad\7\21\2\2\u00ad\u00b2\b"+
- "\f\1\2\u00ae\u00af\5\22\n\2\u00af\u00b0\b\f\1\2\u00b0\u00b2\3\2\2\2\u00b1"+
- "\u00ac\3\2\2\2\u00b1\u00ae\3\2\2\2\u00b2\u00b3\3\2\2\2\u00b3\u00b4\7\21"+
- "\2\2\u00b4\u00b7\b\f\1\2\u00b5\u00b6\t\2\2\2\u00b6\u00b8\b\f\1\2\u00b7"+
- "\u00b5\3\2\2\2\u00b7\u00b8\3\2\2\2\u00b8\27\3\2\2\2\27 \"-8:HKY[giqy\u0083"+
- "\u008a\u0099\u009b\u00a1\u00a8\u00b1\u00b7";
+ "\3\4\3\4\3\4\3\4\7\4;\n\4\f\4\16\4>\13\4\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3"+
+ "\6\3\6\3\6\3\6\5\6K\n\6\3\6\5\6N\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3"+
+ "\6\3\6\3\6\3\6\7\6\\\n\6\f\6\16\6_\13\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3"+
+ "\7\3\7\7\7j\n\7\f\7\16\7m\13\7\3\b\3\b\3\b\3\b\3\b\5\bt\n\b\3\b\3\b\3"+
+ "\b\3\b\7\bz\n\b\f\b\16\b}\13\b\3\b\3\b\3\t\3\t\3\t\3\t\3\t\5\t\u0086\n"+
+ "\t\3\t\3\t\3\t\3\t\3\t\5\t\u008d\n\t\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3"+
+ "\n\3\n\3\n\3\n\3\n\6\n\u009c\n\n\r\n\16\n\u009d\3\13\3\13\3\13\3\13\5"+
+ "\13\u00a4\n\13\3\13\3\13\3\13\3\13\3\13\5\13\u00ab\n\13\3\f\3\f\3\f\3"+
+ "\f\3\f\3\f\3\f\5\f\u00b4\n\f\3\f\3\f\3\f\3\f\5\f\u00ba\n\f\3\f\2\2\r\2"+
+ "\4\6\b\n\f\16\20\22\24\26\2\3\3\2\r\20\u00cd\2 \3\2\2\2\4-\3\2\2\2\6\61"+
+ "\3\2\2\2\b?\3\2\2\2\nJ\3\2\2\2\fb\3\2\2\2\16n\3\2\2\2\20\u0080\3\2\2\2"+
+ "\22\u009b\3\2\2\2\24\u009f\3\2\2\2\26\u00ac\3\2\2\2\30\31\5\4\3\2\31\32"+
+ "\b\2\1\2\32!\3\2\2\2\33\34\5\n\6\2\34\35\b\2\1\2\35!\3\2\2\2\36\37\7\23"+
+ "\2\2\37!\b\2\1\2 \30\3\2\2\2 \33\3\2\2\2 \36\3\2\2\2!\"\3\2\2\2\" \3\2"+
+ "\2\2\"#\3\2\2\2#\3\3\2\2\2$%\5\26\f\2%&\b\3\1\2&.\3\2\2\2\'(\5\6\4\2("+
+ ")\b\3\1\2).\3\2\2\2*+\5\b\5\2+,\b\3\1\2,.\3\2\2\2-$\3\2\2\2-\'\3\2\2\2"+
+ "-*\3\2\2\2./\3\2\2\2/\60\7\3\2\2\60\5\3\2\2\2\61\62\7\21\2\2\62<\b\4\1"+
+ "\2\63\64\7\21\2\2\64;\b\4\1\2\65\66\7\24\2\2\66;\b\4\1\2\678\5\22\n\2"+
+ "89\b\4\1\29;\3\2\2\2:\63\3\2\2\2:\65\3\2\2\2:\67\3\2\2\2;>\3\2\2\2<:\3"+
+ "\2\2\2<=\3\2\2\2=\7\3\2\2\2><\3\2\2\2?@\7\24\2\2@A\b\5\1\2AB\7\21\2\2"+
+ "BC\b\5\1\2C\t\3\2\2\2DE\5\24\13\2EF\b\6\1\2FK\3\2\2\2GH\5\f\7\2HI\b\6"+
+ "\1\2IK\3\2\2\2JD\3\2\2\2JG\3\2\2\2KM\3\2\2\2LN\7\23\2\2ML\3\2\2\2MN\3"+
+ "\2\2\2NO\3\2\2\2O]\7\4\2\2PQ\5\4\3\2QR\b\6\1\2R\\\3\2\2\2ST\5\n\6\2TU"+
+ "\b\6\1\2U\\\3\2\2\2VW\5\16\b\2WX\b\6\1\2X\\\3\2\2\2YZ\7\23\2\2Z\\\b\6"+
+ "\1\2[P\3\2\2\2[S\3\2\2\2[V\3\2\2\2[Y\3\2\2\2\\_\3\2\2\2][\3\2\2\2]^\3"+
+ "\2\2\2^`\3\2\2\2_]\3\2\2\2`a\7\5\2\2a\13\3\2\2\2bc\7\21\2\2ck\b\7\1\2"+
+ "de\7\21\2\2ej\b\7\1\2fg\5\22\n\2gh\b\7\1\2hj\3\2\2\2id\3\2\2\2if\3\2\2"+
+ "\2jm\3\2\2\2ki\3\2\2\2kl\3\2\2\2l\r\3\2\2\2mk\3\2\2\2no\7\6\2\2op\b\b"+
+ "\1\2pq\5\20\t\2qs\b\b\1\2rt\7\23\2\2sr\3\2\2\2st\3\2\2\2tu\3\2\2\2u{\7"+
+ "\4\2\2vw\5\4\3\2wx\b\b\1\2xz\3\2\2\2yv\3\2\2\2z}\3\2\2\2{y\3\2\2\2{|\3"+
+ "\2\2\2|~\3\2\2\2}{\3\2\2\2~\177\7\5\2\2\177\17\3\2\2\2\u0080\u0081\7\7"+
+ "\2\2\u0081\u0082\7\21\2\2\u0082\u0085\b\t\1\2\u0083\u0084\7\21\2\2\u0084"+
+ "\u0086\b\t\1\2\u0085\u0083\3\2\2\2\u0085\u0086\3\2\2\2\u0086\u008c\3\2"+
+ "\2\2\u0087\u0088\7\21\2\2\u0088\u008d\b\t\1\2\u0089\u008a\5\22\n\2\u008a"+
+ "\u008b\b\t\1\2\u008b\u008d\3\2\2\2\u008c\u0087\3\2\2\2\u008c\u0089\3\2"+
+ "\2\2\u008c\u008d\3\2\2\2\u008d\u008e\3\2\2\2\u008e\u008f\7\b\2\2\u008f"+
+ "\21\3\2\2\2\u0090\u0091\7\t\2\2\u0091\u009c\b\n\1\2\u0092\u0093\7\n\2"+
+ "\2\u0093\u009c\b\n\1\2\u0094\u0095\7\21\2\2\u0095\u009c\b\n\1\2\u0096"+
+ "\u0097\7\7\2\2\u0097\u0098\5\22\n\2\u0098\u0099\b\n\1\2\u0099\u009a\7"+
+ "\b\2\2\u009a\u009c\3\2\2\2\u009b\u0090\3\2\2\2\u009b\u0092\3\2\2\2\u009b"+
+ "\u0094\3\2\2\2\u009b\u0096\3\2\2\2\u009c\u009d\3\2\2\2\u009d\u009b\3\2"+
+ "\2\2\u009d\u009e\3\2\2\2\u009e\23\3\2\2\2\u009f\u00a0\7\13\2\2\u00a0\u00a3"+
+ "\b\13\1\2\u00a1\u00a2\7\21\2\2\u00a2\u00a4\b\13\1\2\u00a3\u00a1\3\2\2"+
+ "\2\u00a3\u00a4\3\2\2\2\u00a4\u00aa\3\2\2\2\u00a5\u00a6\7\21\2\2\u00a6"+
+ "\u00ab\b\13\1\2\u00a7\u00a8\5\22\n\2\u00a8\u00a9\b\13\1\2\u00a9\u00ab"+
+ "\3\2\2\2\u00aa\u00a5\3\2\2\2\u00aa\u00a7\3\2\2\2\u00ab\25\3\2\2\2\u00ac"+
+ "\u00ad\7\f\2\2\u00ad\u00b3\b\f\1\2\u00ae\u00af\7\21\2\2\u00af\u00b4\b"+
+ "\f\1\2\u00b0\u00b1\5\22\n\2\u00b1\u00b2\b\f\1\2\u00b2\u00b4\3\2\2\2\u00b3"+
+ "\u00ae\3\2\2\2\u00b3\u00b0\3\2\2\2\u00b4\u00b5\3\2\2\2\u00b5\u00b6\7\21"+
+ "\2\2\u00b6\u00b9\b\f\1\2\u00b7\u00b8\t\2\2\2\u00b8\u00ba\b\f\1\2\u00b9"+
+ "\u00b7\3\2\2\2\u00b9\u00ba\3\2\2\2\u00ba\27\3\2\2\2\27 \"-: