From 48fc55eb34a9fe7bb8aedcba1d36c2aac8297665 Mon Sep 17 00:00:00 2001
From: Ruslan Iushchenko
Date: Wed, 17 Apr 2024 12:02:20 +0200
Subject: [PATCH] #669 Allow 'V' to be at the end of scaled PICs.
For example, '9(7)PPPV' is the same as '9(7)PPP'.
---
.../cobol/parser/antlr/ParserVisitor.scala | 22 +-
.../cobol/parser/antlr/copybookLexer.g4 | 3 +-
.../cobol/parser/antlr/copybookLexer.java | 1388 +++++++++--------
.../cobol/parser/antlr/copybookParser.g4 | 1 +
.../cobol/parser/antlr/copybookParser.java | 516 +++---
.../antlr/copybookParserBaseVisitor.java | 7 +
.../parser/antlr/copybookParserVisitor.java | 9 +-
.../cobol/parser/parse/DataSizeSpec.scala | 5 +
data/test24_copybook.cob | 2 +-
9 files changed, 1007 insertions(+), 946 deletions(-)
diff --git a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/ParserVisitor.scala b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/ParserVisitor.scala
index be55dbc6..7b102647 100644
--- a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/ParserVisitor.scala
+++ b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/ParserVisitor.scala
@@ -73,6 +73,11 @@ class ParserVisitor(enc: Encoding,
+ genericLengthRegex('9')
+ genericLengthRegex('P', optional = true)
).r
+ val numericSPicRegexScaledWithV: Regex = ("(S?)"
+ + genericLengthRegex('9')
+ + genericLengthRegex('P', optional = true)
+ + "V"
+ ).r
val numericSPicRegexExplicitDot: Regex = ("(S?)"
+ genericLengthRegex('9', optional = true)
+ "."
@@ -680,13 +685,13 @@ class ParserVisitor(enc: Encoding,
override def visitPrecision9Ss(ctx: copybookParser.Precision9SsContext): PicExpr = {
ctx.getText match {
case numericSPicRegexDecimalScaled(s, nine1, scale, nine2) => PicExpr(
- fromNumericSPicRegexDecimalScaled(s, nine1, scale, nine2)
+ fromNumericSPicRegexDecimalScaled(s, nine1, scale, nine2).copy(originalPic = Some(ctx.getText))
)
case numericSPicRegexScaled(z, nine, scale) => PicExpr(
- fromNumericSPicRegexScaled(z, nine, scale)
+ fromNumericSPicRegexScaled(z, nine, scale).copy(originalPic = Some(ctx.getText))
)
case numericSPicRegexDecimalScaledLead(s, scale, nine) => PicExpr(
- fromNumericSPicRegexDecimalScaledLead(s, scale, nine)
+ fromNumericSPicRegexDecimalScaledLead(s, scale, nine).copy(originalPic = Some(ctx.getText))
)
case _ => throw new RuntimeException("Error reading PIC " + ctx.getText)
}
@@ -695,14 +700,14 @@ class ParserVisitor(enc: Encoding,
override def visitPrecision9Ps(ctx: copybookParser.Precision9PsContext): PicExpr = {
val numericSPicRegexDecimalScaledLead(s, scale, nine) = ctx.getText
PicExpr(
- fromNumericSPicRegexDecimalScaledLead(s, scale, nine)
+ fromNumericSPicRegexDecimalScaledLead(s, scale, nine).copy(originalPic = Some(ctx.getText))
)
}
override def visitPrecision9Vs(ctx: copybookParser.Precision9VsContext): PicExpr = {
ctx.getText match {
case numericSPicRegexDecimalScaled(s, nine1, scale, nine2) => PicExpr(
- fromNumericSPicRegexDecimalScaled(s, nine1, scale, nine2)
+ fromNumericSPicRegexDecimalScaled(s, nine1, scale, nine2).copy(originalPic = Some(ctx.getText))
)
case _ => throw new RuntimeException("Error reading PIC " + ctx.getText)
}
@@ -734,6 +739,13 @@ class ParserVisitor(enc: Encoding,
)
}
+ override def visitPrecision9DecimalScaledWithV(ctx: copybookParser.Precision9DecimalScaledWithVContext): PicExpr = {
+ val numericSPicRegexScaledWithV(s, nine1, scale) = ctx.getText
+ PicExpr(
+ fromNumericSPicRegexScaled(s, nine1, scale).copy(originalPic = Some(ctx.getText))
+ )
+ }
+
override def visitPrecision9Scaled(ctx: copybookParser.Precision9ScaledContext): PicExpr = {
val numericSPicRegexScaled(s, text, scale) = ctx.getText
PicExpr(
diff --git a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookLexer.g4 b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookLexer.g4
index b2eb55a9..57ee3c5a 100644
--- a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookLexer.g4
+++ b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookLexer.g4
@@ -123,7 +123,7 @@ A_S: A+;
P_S: P+ '9'*;
X_S: X+;
N_S: N+;
-S_S: S '9'+ V? P* '9'* | S '9'* V? P* '9'+;
+S_S: S '9'+ V? P* '9'* | S '9'* V? P* '9'*;
Z_S: Z+ '9'* P* | Z+ '9'* V P* '9'*;
V_S: V+ '9'+;
@@ -136,6 +136,7 @@ V_NS: V+ '9'*;
// numbers
PRECISION_9_EXPLICIT_DOT: S? LENGTH_TYPE_9? (DOT | COMMACHAR) LENGTH_TYPE_9;
PRECISION_9_DECIMAL_SCALED: S? LENGTH_TYPE_9? V ((LENGTH_TYPE_P LENGTH_TYPE_9)? | LENGTH_TYPE_9?);
+PRECISION_9_DECIMAL_WITH_V: S? LENGTH_TYPE_9 LENGTH_TYPE_P? V;
PRECISION_9_SCALED: S? LENGTH_TYPE_9 LENGTH_TYPE_P?;
PRECISION_9_SCALED_LEAD: S? LENGTH_TYPE_P LENGTH_TYPE_9;
PRECISION_Z_EXPLICIT_DOT: LENGTH_TYPE_Z LENGTH_TYPE_9? (DOT | COMMACHAR) ((LENGTH_TYPE_9 LENGTH_TYPE_Z?) | LENGTH_TYPE_Z);
diff --git a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookLexer.java b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookLexer.java
index 7bde767a..e0fce173 100644
--- a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookLexer.java
+++ b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookLexer.java
@@ -47,15 +47,15 @@ public class copybookLexer extends Lexer {
PLUSCHAR=86, RPARENCHAR=87, SINGLEQUOTE=88, SLASHCHAR=89, TERMINAL=90,
COMMENT=91, NINES=92, A_S=93, P_S=94, X_S=95, N_S=96, S_S=97, Z_S=98,
V_S=99, P_NS=100, S_NS=101, Z_NS=102, V_NS=103, PRECISION_9_EXPLICIT_DOT=104,
- PRECISION_9_DECIMAL_SCALED=105, PRECISION_9_SCALED=106, PRECISION_9_SCALED_LEAD=107,
- PRECISION_Z_EXPLICIT_DOT=108, PRECISION_Z_DECIMAL_SCALED=109, PRECISION_Z_SCALED=110,
- LENGTH_TYPE_9=111, LENGTH_TYPE_9_1=112, LENGTH_TYPE_A=113, LENGTH_TYPE_A_1=114,
- LENGTH_TYPE_P=115, LENGTH_TYPE_P_1=116, LENGTH_TYPE_X=117, LENGTH_TYPE_X_1=118,
- LENGTH_TYPE_N=119, LENGTH_TYPE_N_1=120, LENGTH_TYPE_Z=121, LENGTH_TYPE_Z_1=122,
- STRINGLITERAL=123, LEVEL_ROOT=124, LEVEL_REGULAR=125, LEVEL_NUMBER_66=126,
- LEVEL_NUMBER_77=127, LEVEL_NUMBER_88=128, INTEGERLITERAL=129, POSITIVELITERAL=130,
- NUMERICLITERAL=131, SINGLE_QUOTED_IDENTIFIER=132, IDENTIFIER=133, CONTROL_Z=134,
- WS=135;
+ PRECISION_9_DECIMAL_SCALED=105, PRECISION_9_DECIMAL_WITH_V=106, PRECISION_9_SCALED=107,
+ PRECISION_9_SCALED_LEAD=108, PRECISION_Z_EXPLICIT_DOT=109, PRECISION_Z_DECIMAL_SCALED=110,
+ PRECISION_Z_SCALED=111, LENGTH_TYPE_9=112, LENGTH_TYPE_9_1=113, LENGTH_TYPE_A=114,
+ LENGTH_TYPE_A_1=115, LENGTH_TYPE_P=116, LENGTH_TYPE_P_1=117, LENGTH_TYPE_X=118,
+ LENGTH_TYPE_X_1=119, LENGTH_TYPE_N=120, LENGTH_TYPE_N_1=121, LENGTH_TYPE_Z=122,
+ LENGTH_TYPE_Z_1=123, STRINGLITERAL=124, LEVEL_ROOT=125, LEVEL_REGULAR=126,
+ LEVEL_NUMBER_66=127, LEVEL_NUMBER_77=128, LEVEL_NUMBER_88=129, INTEGERLITERAL=130,
+ POSITIVELITERAL=131, NUMERICLITERAL=132, SINGLE_QUOTED_IDENTIFIER=133,
+ IDENTIFIER=134, CONTROL_Z=135, WS=136;
public static String[] channelNames = {
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
};
@@ -81,14 +81,14 @@ private static String[] makeRuleNames() {
"DOT", "LPARENCHAR", "MINUSCHAR", "PLUSCHAR", "RPARENCHAR", "SINGLEQUOTE",
"SLASHCHAR", "TERMINAL", "COMMENT", "NINES", "A_S", "P_S", "X_S", "N_S",
"S_S", "Z_S", "V_S", "P_NS", "S_NS", "Z_NS", "V_NS", "PRECISION_9_EXPLICIT_DOT",
- "PRECISION_9_DECIMAL_SCALED", "PRECISION_9_SCALED", "PRECISION_9_SCALED_LEAD",
- "PRECISION_Z_EXPLICIT_DOT", "PRECISION_Z_DECIMAL_SCALED", "PRECISION_Z_SCALED",
- "LENGTH_TYPE_9", "LENGTH_TYPE_9_1", "LENGTH_TYPE_A", "LENGTH_TYPE_A_1",
- "LENGTH_TYPE_P", "LENGTH_TYPE_P_1", "LENGTH_TYPE_X", "LENGTH_TYPE_X_1",
- "LENGTH_TYPE_N", "LENGTH_TYPE_N_1", "LENGTH_TYPE_Z", "LENGTH_TYPE_Z_1",
- "STRINGLITERAL", "HEXNUMBER", "QUOTEDLITERAL", "LEVEL_ROOT", "LEVEL_REGULAR",
- "LEVEL_NUMBER_66", "LEVEL_NUMBER_77", "LEVEL_NUMBER_88", "INTEGERLITERAL",
- "POSITIVELITERAL", "NUMERICLITERAL", "SIGN_CHAR", "SINGLE_QUOTED_IDENTIFIER",
+ "PRECISION_9_DECIMAL_SCALED", "PRECISION_9_DECIMAL_WITH_V", "PRECISION_9_SCALED",
+ "PRECISION_9_SCALED_LEAD", "PRECISION_Z_EXPLICIT_DOT", "PRECISION_Z_DECIMAL_SCALED",
+ "PRECISION_Z_SCALED", "LENGTH_TYPE_9", "LENGTH_TYPE_9_1", "LENGTH_TYPE_A",
+ "LENGTH_TYPE_A_1", "LENGTH_TYPE_P", "LENGTH_TYPE_P_1", "LENGTH_TYPE_X",
+ "LENGTH_TYPE_X_1", "LENGTH_TYPE_N", "LENGTH_TYPE_N_1", "LENGTH_TYPE_Z",
+ "LENGTH_TYPE_Z_1", "STRINGLITERAL", "HEXNUMBER", "QUOTEDLITERAL", "LEVEL_ROOT",
+ "LEVEL_REGULAR", "LEVEL_NUMBER_66", "LEVEL_NUMBER_77", "LEVEL_NUMBER_88",
+ "INTEGERLITERAL", "POSITIVELITERAL", "NUMERICLITERAL", "SIGN_CHAR", "SINGLE_QUOTED_IDENTIFIER",
"IDENTIFIER", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K",
"L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y",
"Z", "CONTROL_Z", "WS"
@@ -108,8 +108,8 @@ private static String[] makeLiteralNames() {
"'.'", "'('", "'-'", "'+'", "')'", "'''", "'/'", null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, null, null, "'01'", null, "'66'", "'77'", "'88'",
- null, null, null, null, null, "'\u001A'"
+ null, null, null, null, null, null, null, "'01'", null, "'66'", "'77'",
+ "'88'", null, null, null, null, null, "'\u001A'"
};
}
private static final String[] _LITERAL_NAMES = makeLiteralNames();
@@ -130,14 +130,15 @@ private static String[] makeSymbolicNames() {
"DOT", "LPARENCHAR", "MINUSCHAR", "PLUSCHAR", "RPARENCHAR", "SINGLEQUOTE",
"SLASHCHAR", "TERMINAL", "COMMENT", "NINES", "A_S", "P_S", "X_S", "N_S",
"S_S", "Z_S", "V_S", "P_NS", "S_NS", "Z_NS", "V_NS", "PRECISION_9_EXPLICIT_DOT",
- "PRECISION_9_DECIMAL_SCALED", "PRECISION_9_SCALED", "PRECISION_9_SCALED_LEAD",
- "PRECISION_Z_EXPLICIT_DOT", "PRECISION_Z_DECIMAL_SCALED", "PRECISION_Z_SCALED",
- "LENGTH_TYPE_9", "LENGTH_TYPE_9_1", "LENGTH_TYPE_A", "LENGTH_TYPE_A_1",
- "LENGTH_TYPE_P", "LENGTH_TYPE_P_1", "LENGTH_TYPE_X", "LENGTH_TYPE_X_1",
- "LENGTH_TYPE_N", "LENGTH_TYPE_N_1", "LENGTH_TYPE_Z", "LENGTH_TYPE_Z_1",
- "STRINGLITERAL", "LEVEL_ROOT", "LEVEL_REGULAR", "LEVEL_NUMBER_66", "LEVEL_NUMBER_77",
- "LEVEL_NUMBER_88", "INTEGERLITERAL", "POSITIVELITERAL", "NUMERICLITERAL",
- "SINGLE_QUOTED_IDENTIFIER", "IDENTIFIER", "CONTROL_Z", "WS"
+ "PRECISION_9_DECIMAL_SCALED", "PRECISION_9_DECIMAL_WITH_V", "PRECISION_9_SCALED",
+ "PRECISION_9_SCALED_LEAD", "PRECISION_Z_EXPLICIT_DOT", "PRECISION_Z_DECIMAL_SCALED",
+ "PRECISION_Z_SCALED", "LENGTH_TYPE_9", "LENGTH_TYPE_9_1", "LENGTH_TYPE_A",
+ "LENGTH_TYPE_A_1", "LENGTH_TYPE_P", "LENGTH_TYPE_P_1", "LENGTH_TYPE_X",
+ "LENGTH_TYPE_X_1", "LENGTH_TYPE_N", "LENGTH_TYPE_N_1", "LENGTH_TYPE_Z",
+ "LENGTH_TYPE_Z_1", "STRINGLITERAL", "LEVEL_ROOT", "LEVEL_REGULAR", "LEVEL_NUMBER_66",
+ "LEVEL_NUMBER_77", "LEVEL_NUMBER_88", "INTEGERLITERAL", "POSITIVELITERAL",
+ "NUMERICLITERAL", "SINGLE_QUOTED_IDENTIFIER", "IDENTIFIER", "CONTROL_Z",
+ "WS"
};
}
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
@@ -199,7 +200,7 @@ public copybookLexer(CharStream input) {
public ATN getATN() { return _ATN; }
public static final String _serializedATN =
- "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\u0089\u066d\b\1\4"+
+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\u008a\u0679\b\1\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\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22"+
"\t\22\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31"+
@@ -221,667 +222,674 @@ public copybookLexer(CharStream input) {
"\4\u0097\t\u0097\4\u0098\t\u0098\4\u0099\t\u0099\4\u009a\t\u009a\4\u009b"+
"\t\u009b\4\u009c\t\u009c\4\u009d\t\u009d\4\u009e\t\u009e\4\u009f\t\u009f"+
"\4\u00a0\t\u00a0\4\u00a1\t\u00a1\4\u00a2\t\u00a2\4\u00a3\t\u00a3\4\u00a4"+
- "\t\u00a4\4\u00a5\t\u00a5\3\2\3\2\5\2\u014e\n\2\3\3\3\3\3\3\3\3\3\4\3\4"+
- "\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\6\3\6\3"+
- "\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\t\3\t\3\t\3\t\3\t\3\t\3\t"+
- "\3\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\3\13\3\13\3\13"+
- "\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\16"+
- "\3\16\3\16\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\20"+
- "\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\21\3\21"+
- "\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\23\3\23"+
- "\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24"+
- "\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25"+
- "\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26"+
- "\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27"+
- "\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30"+
- "\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\31\3\31\3\31\3\31"+
- "\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\32\3\32\3\32"+
- "\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\33"+
- "\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33"+
- "\3\33\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34"+
- "\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\36\3\36"+
- "\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37"+
- "\3\37\3 \3 \3 \3 \3 \3 \3 \3 \3!\3!\3!\3!\3!\3!\3!\3!\3!\3\"\3\"\3\"\3"+
- "\"\3\"\3\"\3#\3#\3#\3#\3#\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3%\3%\3%\3"+
- "%\3%\3%\3%\3%\3%\3%\3%\3%\3&\3&\3&\3&\3&\3&\3&\3&\3\'\3\'\3\'\3(\3(\3"+
- "(\3(\3(\3)\3)\3)\3)\3)\3)\3)\3)\3)\3)\3*\3*\3*\3*\3+\3+\3+\3+\3+\3+\3"+
- "+\3+\3,\3,\3,\3,\3,\3-\3-\3-\3-\3-\3-\3-\3-\3-\3-\3.\3.\3.\3.\3.\3.\3"+
- ".\3.\3.\3.\3.\3/\3/\3/\3/\3/\3\60\3\60\3\60\3\60\3\60\3\60\3\61\3\61\3"+
- "\61\3\61\3\61\3\61\3\61\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\63\3"+
- "\63\3\63\3\63\3\63\3\63\3\63\3\64\3\64\3\64\3\65\3\65\3\65\3\65\3\65\3"+
- "\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3"+
- "\67\3\67\3\67\3\67\3\67\3\67\3\67\3\67\38\38\38\38\38\38\39\39\39\39\3"+
- "9\39\39\3:\3:\3:\3:\3:\3:\3:\3:\3:\3:\3;\3;\3;\3;\3;\3;\3;\3;\3<\3<\3"+
- "<\3<\3<\3<\3=\3=\3=\3=\3=\3=\3=\3=\3=\3>\3>\3>\3>\3>\3>\6>\u0354\n>\r"+
- ">\16>\u0355\3>\3>\3?\3?\3?\3?\3?\3?\6?\u0360\n?\r?\16?\u0361\3?\3?\3@"+
- "\3@\3@\3@\3@\3@\6@\u036c\n@\r@\16@\u036d\3@\3@\3A\3A\3A\3A\3A\3B\3B\3"+
- "B\3B\3B\3B\3C\3C\3C\3C\3C\3C\3C\3D\3D\3D\3D\3D\3D\3D\3D\3E\3E\3E\3E\3"+
- "E\3F\3F\3F\3F\3F\3F\3G\3G\3G\3H\3H\3H\3H\3H\3H\3H\3H\3H\3I\3I\3I\3I\3"+
- "I\3J\3J\3J\3J\3J\3J\3K\3K\3K\3K\3K\3K\3L\3L\3L\3L\3L\3L\3M\3M\3M\3M\3"+
- "M\3M\3M\3N\3N\3N\3N\3N\3O\3O\3O\3O\3O\3P\3P\3P\3P\3P\3P\3Q\3Q\3Q\3Q\3"+
- "Q\3Q\3Q\3R\3R\3S\3S\3T\3T\3U\3U\3V\3V\3W\3W\3X\3X\3Y\3Y\3Z\3Z\3[\3[\6"+
- "[\u03ec\n[\r[\16[\u03ed\3[\3[\5[\u03f2\n[\3[\5[\u03f5\n[\3\\\3\\\7\\\u03f9"+
- "\n\\\f\\\16\\\u03fc\13\\\3\\\3\\\3]\6]\u0401\n]\r]\16]\u0402\3^\6^\u0406"+
- "\n^\r^\16^\u0407\3_\6_\u040b\n_\r_\16_\u040c\3_\7_\u0410\n_\f_\16_\u0413"+
- "\13_\3`\6`\u0416\n`\r`\16`\u0417\3a\6a\u041b\na\ra\16a\u041c\3b\3b\6b"+
- "\u0421\nb\rb\16b\u0422\3b\5b\u0426\nb\3b\7b\u0429\nb\fb\16b\u042c\13b"+
- "\3b\7b\u042f\nb\fb\16b\u0432\13b\3b\3b\7b\u0436\nb\fb\16b\u0439\13b\3"+
- "b\5b\u043c\nb\3b\7b\u043f\nb\fb\16b\u0442\13b\3b\6b\u0445\nb\rb\16b\u0446"+
- "\5b\u0449\nb\3c\6c\u044c\nc\rc\16c\u044d\3c\7c\u0451\nc\fc\16c\u0454\13"+
- "c\3c\7c\u0457\nc\fc\16c\u045a\13c\3c\6c\u045d\nc\rc\16c\u045e\3c\7c\u0462"+
- "\nc\fc\16c\u0465\13c\3c\3c\7c\u0469\nc\fc\16c\u046c\13c\3c\7c\u046f\n"+
- "c\fc\16c\u0472\13c\5c\u0474\nc\3d\6d\u0477\nd\rd\16d\u0478\3d\6d\u047c"+
- "\nd\rd\16d\u047d\3e\6e\u0481\ne\re\16e\u0482\3e\7e\u0486\ne\fe\16e\u0489"+
- "\13e\3f\3f\7f\u048d\nf\ff\16f\u0490\13f\3f\5f\u0493\nf\3f\7f\u0496\nf"+
- "\ff\16f\u0499\13f\3f\7f\u049c\nf\ff\16f\u049f\13f\3g\6g\u04a2\ng\rg\16"+
- "g\u04a3\3g\7g\u04a7\ng\fg\16g\u04aa\13g\3g\7g\u04ad\ng\fg\16g\u04b0\13"+
- "g\3g\6g\u04b3\ng\rg\16g\u04b4\3g\7g\u04b8\ng\fg\16g\u04bb\13g\3g\3g\7"+
- "g\u04bf\ng\fg\16g\u04c2\13g\3g\7g\u04c5\ng\fg\16g\u04c8\13g\5g\u04ca\n"+
- "g\3h\6h\u04cd\nh\rh\16h\u04ce\3h\7h\u04d2\nh\fh\16h\u04d5\13h\3i\5i\u04d8"+
- "\ni\3i\5i\u04db\ni\3i\3i\5i\u04df\ni\3i\3i\3j\5j\u04e4\nj\3j\5j\u04e7"+
- "\nj\3j\3j\3j\3j\5j\u04ed\nj\3j\5j\u04f0\nj\5j\u04f2\nj\3k\5k\u04f5\nk"+
- "\3k\3k\5k\u04f9\nk\3l\5l\u04fc\nl\3l\3l\3l\3m\3m\5m\u0503\nm\3m\3m\5m"+
- "\u0507\nm\3m\3m\5m\u050b\nm\3m\5m\u050e\nm\3n\3n\5n\u0512\nn\3n\3n\3n"+
- "\3n\5n\u0518\nn\5n\u051a\nn\3n\5n\u051d\nn\3n\5n\u0520\nn\5n\u0522\nn"+
- "\3o\3o\5o\u0526\no\3o\5o\u0529\no\3p\6p\u052c\np\rp\16p\u052d\3q\3q\3"+
- "q\3q\3q\3q\6q\u0536\nq\rq\16q\u0537\5q\u053a\nq\3r\6r\u053d\nr\rr\16r"+
- "\u053e\3s\3s\3s\3s\3s\3s\6s\u0547\ns\rs\16s\u0548\5s\u054b\ns\3t\6t\u054e"+
- "\nt\rt\16t\u054f\3u\3u\3u\3u\3u\3u\6u\u0558\nu\ru\16u\u0559\5u\u055c\n"+
- "u\3v\6v\u055f\nv\rv\16v\u0560\3w\3w\3w\3w\3w\3w\6w\u0569\nw\rw\16w\u056a"+
- "\5w\u056d\nw\3x\6x\u0570\nx\rx\16x\u0571\3y\3y\3y\3y\3y\3y\6y\u057a\n"+
- "y\ry\16y\u057b\5y\u057e\ny\3z\6z\u0581\nz\rz\16z\u0582\3{\3{\3{\3{\3{"+
- "\3{\6{\u058b\n{\r{\16{\u058c\5{\u058f\n{\3|\3|\5|\u0593\n|\3}\3}\3}\6"+
- "}\u0598\n}\r}\16}\u0599\3}\3}\3}\3}\3}\6}\u05a1\n}\r}\16}\u05a2\3}\3}"+
- "\3}\3}\3}\6}\u05aa\n}\r}\16}\u05ab\3}\3}\3}\3}\3}\6}\u05b3\n}\r}\16}\u05b4"+
- "\3}\3}\5}\u05b9\n}\3~\3~\3~\3~\3~\7~\u05c0\n~\f~\16~\u05c3\13~\3~\3~\3"+
- "~\3~\3~\3~\7~\u05cb\n~\f~\16~\u05ce\13~\3~\5~\u05d1\n~\3\177\3\177\3\177"+
- "\3\u0080\3\u0080\3\u0080\3\u0080\5\u0080\u05da\n\u0080\3\u0081\3\u0081"+
- "\3\u0081\3\u0082\3\u0082\3\u0082\3\u0083\3\u0083\3\u0083\3\u0084\6\u0084"+
- "\u05e6\n\u0084\r\u0084\16\u0084\u05e7\3\u0085\7\u0085\u05eb\n\u0085\f"+
- "\u0085\16\u0085\u05ee\13\u0085\3\u0085\3\u0085\7\u0085\u05f2\n\u0085\f"+
- "\u0085\16\u0085\u05f5\13\u0085\3\u0086\7\u0086\u05f8\n\u0086\f\u0086\16"+
- "\u0086\u05fb\13\u0086\3\u0086\5\u0086\u05fe\n\u0086\3\u0086\6\u0086\u0601"+
- "\n\u0086\r\u0086\16\u0086\u0602\3\u0086\3\u0086\5\u0086\u0607\n\u0086"+
- "\3\u0086\6\u0086\u060a\n\u0086\r\u0086\16\u0086\u060b\5\u0086\u060e\n"+
- "\u0086\3\u0087\3\u0087\5\u0087\u0612\n\u0087\3\u0088\3\u0088\3\u0088\3"+
- "\u0088\7\u0088\u0618\n\u0088\f\u0088\16\u0088\u061b\13\u0088\3\u0088\6"+
- "\u0088\u061e\n\u0088\r\u0088\16\u0088\u061f\6\u0088\u0622\n\u0088\r\u0088"+
- "\16\u0088\u0623\3\u0089\6\u0089\u0627\n\u0089\r\u0089\16\u0089\u0628\3"+
- "\u0089\7\u0089\u062c\n\u0089\f\u0089\16\u0089\u062f\13\u0089\3\u008a\3"+
- "\u008a\3\u008b\3\u008b\3\u008c\3\u008c\3\u008d\3\u008d\3\u008e\3\u008e"+
- "\3\u008f\3\u008f\3\u0090\3\u0090\3\u0091\3\u0091\3\u0092\3\u0092\3\u0093"+
- "\3\u0093\3\u0094\3\u0094\3\u0095\3\u0095\3\u0096\3\u0096\3\u0097\3\u0097"+
- "\3\u0098\3\u0098\3\u0099\3\u0099\3\u009a\3\u009a\3\u009b\3\u009b\3\u009c"+
- "\3\u009c\3\u009d\3\u009d\3\u009e\3\u009e\3\u009f\3\u009f\3\u00a0\3\u00a0"+
- "\3\u00a1\3\u00a1\3\u00a2\3\u00a2\3\u00a3\3\u00a3\3\u00a4\3\u00a4\3\u00a5"+
- "\6\u00a5\u0668\n\u00a5\r\u00a5\16\u00a5\u0669\3\u00a5\3\u00a5\2\2\u00a6"+
- "\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20"+
- "\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37"+
- "= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o"+
- "9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F\u008bG\u008dH"+
- "\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009bO\u009dP\u009fQ\u00a1"+
- "R\u00a3S\u00a5T\u00a7U\u00a9V\u00abW\u00adX\u00afY\u00b1Z\u00b3[\u00b5"+
- "\\\u00b7]\u00b9^\u00bb_\u00bd`\u00bfa\u00c1b\u00c3c\u00c5d\u00c7e\u00c9"+
- "f\u00cbg\u00cdh\u00cfi\u00d1j\u00d3k\u00d5l\u00d7m\u00d9n\u00dbo\u00dd"+
- "p\u00dfq\u00e1r\u00e3s\u00e5t\u00e7u\u00e9v\u00ebw\u00edx\u00efy\u00f1"+
- "z\u00f3{\u00f5|\u00f7}\u00f9\2\u00fb\2\u00fd~\u00ff\177\u0101\u0080\u0103"+
- "\u0081\u0105\u0082\u0107\u0083\u0109\u0084\u010b\u0085\u010d\2\u010f\u0086"+
- "\u0111\u0087\u0113\2\u0115\2\u0117\2\u0119\2\u011b\2\u011d\2\u011f\2\u0121"+
- "\2\u0123\2\u0125\2\u0127\2\u0129\2\u012b\2\u012d\2\u012f\2\u0131\2\u0133"+
- "\2\u0135\2\u0137\2\u0139\2\u013b\2\u013d\2\u013f\2\u0141\2\u0143\2\u0145"+
- "\2\u0147\u0088\u0149\u0089\3\2*\5\2\13\f\16\17\"\"\4\2\f\f\17\17\4\2\62"+
- ";CH\5\2\f\f\17\17$$\5\2\f\f\17\17))\3\2\64;\3\2\63\66\3\2\62;\3\2\63;"+
- "\4\2//aa\5\2\62;C\\c|\5\2\62\3\2\2\2\u026d\u026e\5\u0119\u008d"+
- "\2\u026e\u026f\5\u0123\u0092\2\u026f\u0270\5\u0137\u009c\2\u0270\u0271"+
- "\5\u0131\u0099\2\u0271\u0272\5\u0129\u0095\2\u0272\u0273\5\u0113\u008a"+
- "\2\u0273\u0274\5\u0143\u00a2\2\u0274@\3\2\2\2\u0275\u0276\5\u011b\u008e"+
- "\2\u0276\u0277\5\u0141\u00a1\2\u0277\u0278\5\u0139\u009d\2\u0278\u0279"+
- "\5\u011b\u008e\2\u0279\u027a\5\u0135\u009b\2\u027a\u027b\5\u012d\u0097"+
- "\2\u027b\u027c\5\u0113\u008a\2\u027c\u027d\5\u0129\u0095\2\u027dB\3\2"+
- "\2\2\u027e\u027f\5\u011d\u008f\2\u027f\u0280\5\u0113\u008a\2\u0280\u0281"+
- "\5\u0129\u0095\2\u0281\u0282\5\u0137\u009c\2\u0282\u0283\5\u011b\u008e"+
- "\2\u0283D\3\2\2\2\u0284\u0285\5\u011d\u008f\2\u0285\u0286\5\u0135\u009b"+
- "\2\u0286\u0287\5\u012f\u0098\2\u0287\u0288\5\u012b\u0096\2\u0288F\3\2"+
- "\2\2\u0289\u028a\5\u0121\u0091\2\u028a\u028b\5\u0123\u0092\2\u028b\u028c"+
- "\5\u011f\u0090\2\u028c\u028d\5\u0121\u0091\2\u028d\u028e\5\u00abV\2\u028e"+
- "\u028f\5\u013d\u009f\2\u028f\u0290\5\u0113\u008a\2\u0290\u0291\5\u0129"+
- "\u0095\2\u0291\u0292\5\u013b\u009e\2\u0292\u0293\5\u011b\u008e\2\u0293"+
- "H\3\2\2\2\u0294\u0295\5\u0121\u0091\2\u0295\u0296\5\u0123\u0092\2\u0296"+
- "\u0297\5\u011f\u0090\2\u0297\u0298\5\u0121\u0091\2\u0298\u0299\5\u00ab"+
- "V\2\u0299\u029a\5\u013d\u009f\2\u029a\u029b\5\u0113\u008a\2\u029b\u029c"+
- "\5\u0129\u0095\2\u029c\u029d\5\u013b\u009e\2\u029d\u029e\5\u011b\u008e"+
- "\2\u029e\u029f\5\u0137\u009c\2\u029fJ\3\2\2\2\u02a0\u02a1\5\u0123\u0092"+
- "\2\u02a1\u02a2\5\u012d\u0097\2\u02a2\u02a3\5\u0119\u008d\2\u02a3\u02a4"+
- "\5\u011b\u008e\2\u02a4\u02a5\5\u0141\u00a1\2\u02a5\u02a6\5\u011b\u008e"+
- "\2\u02a6\u02a7\5\u0119\u008d\2\u02a7L\3\2\2\2\u02a8\u02a9\5\u0123\u0092"+
- "\2\u02a9\u02aa\5\u0137\u009c\2\u02aaN\3\2\2\2\u02ab\u02ac\5\u0125\u0093"+
- "\2\u02ac\u02ad\5\u013b\u009e\2\u02ad\u02ae\5\u0137\u009c\2\u02ae\u02af"+
- "\5\u0139\u009d\2\u02afP\3\2\2\2\u02b0\u02b1\5\u0125\u0093\2\u02b1\u02b2"+
- "\5\u013b\u009e\2\u02b2\u02b3\5\u0137\u009c\2\u02b3\u02b4\5\u0139\u009d"+
- "\2\u02b4\u02b5\5\u0123\u0092\2\u02b5\u02b6\5\u011d\u008f\2\u02b6\u02b7"+
- "\5\u0123\u0092\2\u02b7\u02b8\5\u011b\u008e\2\u02b8\u02b9\5\u0119\u008d"+
- "\2\u02b9R\3\2\2\2\u02ba\u02bb\5\u0127\u0094\2\u02bb\u02bc\5\u011b\u008e"+
- "\2\u02bc\u02bd\5\u0143\u00a2\2\u02bdT\3\2\2\2\u02be\u02bf\5\u0129\u0095"+
- "\2\u02bf\u02c0\5\u011b\u008e\2\u02c0\u02c1\5\u0113\u008a\2\u02c1\u02c2"+
- "\5\u0119\u008d\2\u02c2\u02c3\5\u0123\u0092\2\u02c3\u02c4\5\u012d\u0097"+
- "\2\u02c4\u02c5\5\u011f\u0090\2\u02c5V\3\2\2\2\u02c6\u02c7\5\u0129\u0095"+
- "\2\u02c7\u02c8\5\u011b\u008e\2\u02c8\u02c9\5\u011d\u008f\2\u02c9\u02ca"+
- "\5\u0139\u009d\2\u02caX\3\2\2\2\u02cb\u02cc\5\u0129\u0095\2\u02cc\u02cd"+
- "\5\u012f\u0098\2\u02cd\u02ce\5\u013f\u00a0\2\u02ce\u02cf\5\u00abV\2\u02cf"+
- "\u02d0\5\u013d\u009f\2\u02d0\u02d1\5\u0113\u008a\2\u02d1\u02d2\5\u0129"+
- "\u0095\2\u02d2\u02d3\5\u013b\u009e\2\u02d3\u02d4\5\u011b\u008e\2\u02d4"+
- "Z\3\2\2\2\u02d5\u02d6\5\u0129\u0095\2\u02d6\u02d7\5\u012f\u0098\2\u02d7"+
- "\u02d8\5\u013f\u00a0\2\u02d8\u02d9\5\u00abV\2\u02d9\u02da\5\u013d\u009f"+
- "\2\u02da\u02db\5\u0113\u008a\2\u02db\u02dc\5\u0129\u0095\2\u02dc\u02dd"+
- "\5\u013b\u009e\2\u02dd\u02de\5\u011b\u008e\2\u02de\u02df\5\u0137\u009c"+
- "\2\u02df\\\3\2\2\2\u02e0\u02e1\5\u012d\u0097\2\u02e1\u02e2\5\u013b\u009e"+
- "\2\u02e2\u02e3\5\u0129\u0095\2\u02e3\u02e4\5\u0129\u0095\2\u02e4^\3\2"+
- "\2\2\u02e5\u02e6\5\u012d\u0097\2\u02e6\u02e7\5\u013b\u009e\2\u02e7\u02e8"+
- "\5\u0129\u0095\2\u02e8\u02e9\5\u0129\u0095\2\u02e9\u02ea\5\u0137\u009c"+
- "\2\u02ea`\3\2\2\2\u02eb\u02ec\5\u012d\u0097\2\u02ec\u02ed\5\u013b\u009e"+
- "\2\u02ed\u02ee\5\u012b\u0096\2\u02ee\u02ef\5\u0115\u008b\2\u02ef\u02f0"+
- "\5\u011b\u008e\2\u02f0\u02f1\5\u0135\u009b\2\u02f1b\3\2\2\2\u02f2\u02f3"+
- "\5\u012d\u0097\2\u02f3\u02f4\5\u013b\u009e\2\u02f4\u02f5\5\u012b\u0096"+
- "\2\u02f5\u02f6\5\u011b\u008e\2\u02f6\u02f7\5\u0135\u009b\2\u02f7\u02f8"+
- "\5\u0123\u0092\2\u02f8\u02f9\5\u0117\u008c\2\u02f9d\3\2\2\2\u02fa\u02fb"+
- "\5\u012f\u0098\2\u02fb\u02fc\5\u0117\u008c\2\u02fc\u02fd\5\u0117\u008c"+
- "\2\u02fd\u02fe\5\u013b\u009e\2\u02fe\u02ff\5\u0135\u009b\2\u02ff\u0300"+
- "\5\u0137\u009c\2\u0300f\3\2\2\2\u0301\u0302\5\u012f\u0098\2\u0302\u0303"+
- "\5\u012d\u0097\2\u0303h\3\2\2\2\u0304\u0305\5\u0131\u0099\2\u0305\u0306"+
- "\5\u0113\u008a\2\u0306\u0307\5\u0117\u008c\2\u0307\u0308\5\u0127\u0094"+
- "\2\u0308\u0309\5\u011b\u008e\2\u0309\u030a\5\u0119\u008d\2\u030a\u030b"+
- "\5\u00abV\2\u030b\u030c\5\u0119\u008d\2\u030c\u030d\5\u011b\u008e\2\u030d"+
- "\u030e\5\u0117\u008c\2\u030e\u030f\5\u0123\u0092\2\u030f\u0310\5\u012b"+
- "\u0096\2\u0310\u0311\5\u0113\u008a\2\u0311\u0312\5\u0129\u0095\2\u0312"+
- "j\3\2\2\2\u0313\u0314\5\u0131\u0099\2\u0314\u0315\5\u0123\u0092\2\u0315"+
- "\u0316\5\u0117\u008c\2\u0316l\3\2\2\2\u0317\u0318\5\u0131\u0099\2\u0318"+
- "\u0319\5\u0123\u0092\2\u0319\u031a\5\u0117\u008c\2\u031a\u031b\5\u0139"+
- "\u009d\2\u031b\u031c\5\u013b\u009e\2\u031c\u031d\5\u0135\u009b\2\u031d"+
- "\u031e\5\u011b\u008e\2\u031en\3\2\2\2\u031f\u0320\5\u0133\u009a\2\u0320"+
- "\u0321\5\u013b\u009e\2\u0321\u0322\5\u012f\u0098\2\u0322\u0323\5\u0139"+
- "\u009d\2\u0323\u0324\5\u011b\u008e\2\u0324p\3\2\2\2\u0325\u0326\5\u0133"+
- "\u009a\2\u0326\u0327\5\u013b\u009e\2\u0327\u0328\5\u012f\u0098\2\u0328"+
- "\u0329\5\u0139\u009d\2\u0329\u032a\5\u011b\u008e\2\u032a\u032b\5\u0137"+
- "\u009c\2\u032br\3\2\2\2\u032c\u032d\5\u0135\u009b\2\u032d\u032e\5\u011b"+
- "\u008e\2\u032e\u032f\5\u0119\u008d\2\u032f\u0330\5\u011b\u008e\2\u0330"+
- "\u0331\5\u011d\u008f\2\u0331\u0332\5\u0123\u0092\2\u0332\u0333\5\u012d"+
- "\u0097\2\u0333\u0334\5\u011b\u008e\2\u0334\u0335\5\u0137\u009c\2\u0335"+
- "t\3\2\2\2\u0336\u0337\5\u0135\u009b\2\u0337\u0338\5\u011b\u008e\2\u0338"+
- "\u0339\5\u012d\u0097\2\u0339\u033a\5\u0113\u008a\2\u033a\u033b\5\u012b"+
- "\u0096\2\u033b\u033c\5\u011b\u008e\2\u033c\u033d\5\u0137\u009c\2\u033d"+
- "v\3\2\2\2\u033e\u033f\5\u0135\u009b\2\u033f\u0340\5\u0123\u0092\2\u0340"+
- "\u0341\5\u011f\u0090\2\u0341\u0342\5\u0121\u0091\2\u0342\u0343\5\u0139"+
- "\u009d\2\u0343x\3\2\2\2\u0344\u0345\5\u0137\u009c\2\u0345\u0346\5\u011b"+
- "\u008e\2\u0346\u0347\5\u0131\u0099\2\u0347\u0348\5\u0113\u008a\2\u0348"+
- "\u0349\5\u0135\u009b\2\u0349\u034a\5\u0113\u008a\2\u034a\u034b\5\u0139"+
- "\u009d\2\u034b\u034c\5\u011b\u008e\2\u034cz\3\2\2\2\u034d\u034e\5\u0137"+
- "\u009c\2\u034e\u034f\5\u0127\u0094\2\u034f\u0350\5\u0123\u0092\2\u0350"+
- "\u0351\5\u0131\u0099\2\u0351\u0353\7\63\2\2\u0352\u0354\t\2\2\2\u0353"+
- "\u0352\3\2\2\2\u0354\u0355\3\2\2\2\u0355\u0353\3\2\2\2\u0355\u0356\3\2"+
- "\2\2\u0356\u0357\3\2\2\2\u0357\u0358\b>\2\2\u0358|\3\2\2\2\u0359\u035a"+
- "\5\u0137\u009c\2\u035a\u035b\5\u0127\u0094\2\u035b\u035c\5\u0123\u0092"+
- "\2\u035c\u035d\5\u0131\u0099\2\u035d\u035f\7\64\2\2\u035e\u0360\t\2\2"+
- "\2\u035f\u035e\3\2\2\2\u0360\u0361\3\2\2\2\u0361\u035f\3\2\2\2\u0361\u0362"+
- "\3\2\2\2\u0362\u0363\3\2\2\2\u0363\u0364\b?\2\2\u0364~\3\2\2\2\u0365\u0366"+
- "\5\u0137\u009c\2\u0366\u0367\5\u0127\u0094\2\u0367\u0368\5\u0123\u0092"+
- "\2\u0368\u0369\5\u0131\u0099\2\u0369\u036b\7\65\2\2\u036a\u036c\t\2\2"+
- "\2\u036b\u036a\3\2\2\2\u036c\u036d\3\2\2\2\u036d\u036b\3\2\2\2\u036d\u036e"+
- "\3\2\2\2\u036e\u036f\3\2\2\2\u036f\u0370\b@\2\2\u0370\u0080\3\2\2\2\u0371"+
- "\u0372\5\u0137\u009c\2\u0372\u0373\5\u0123\u0092\2\u0373\u0374\5\u011f"+
- "\u0090\2\u0374\u0375\5\u012d\u0097\2\u0375\u0082\3\2\2\2\u0376\u0377\5"+
- "\u0137\u009c\2\u0377\u0378\5\u0131\u0099\2\u0378\u0379\5\u0113\u008a\2"+
- "\u0379\u037a\5\u0117\u008c\2\u037a\u037b\5\u011b\u008e\2\u037b\u0084\3"+
- "\2\2\2\u037c\u037d\5\u0137\u009c\2\u037d\u037e\5\u0131\u0099\2\u037e\u037f"+
- "\5\u0113\u008a\2\u037f\u0380\5\u0117\u008c\2\u0380\u0381\5\u011b\u008e"+
- "\2\u0381\u0382\5\u0137\u009c\2\u0382\u0086\3\2\2\2\u0383\u0384\5\u0139"+
- "\u009d\2\u0384\u0385\5\u0121\u0091\2\u0385\u0386\5\u0135\u009b\2\u0386"+
- "\u0387\5\u012f\u0098\2\u0387\u0388\5\u013b\u009e\2\u0388\u0389\5\u011f"+
- "\u0090\2\u0389\u038a\5\u0121\u0091\2\u038a\u0088\3\2\2\2\u038b\u038c\5"+
- "\u0139\u009d\2\u038c\u038d\5\u0121\u0091\2\u038d\u038e\5\u0135\u009b\2"+
- "\u038e\u038f\5\u013b\u009e\2\u038f\u008a\3\2\2\2\u0390\u0391\5\u0139\u009d"+
- "\2\u0391\u0392\5\u0123\u0092\2\u0392\u0393\5\u012b\u0096\2\u0393\u0394"+
- "\5\u011b\u008e\2\u0394\u0395\5\u0137\u009c\2\u0395\u008c\3\2\2\2\u0396"+
- "\u0397\5\u0139\u009d\2\u0397\u0398\5\u012f\u0098\2\u0398\u008e\3\2\2\2"+
- "\u0399\u039a\5\u0139\u009d\2\u039a\u039b\5\u0135\u009b\2\u039b\u039c\5"+
- "\u0113\u008a\2\u039c\u039d\5\u0123\u0092\2\u039d\u039e\5\u0129\u0095\2"+
- "\u039e\u039f\5\u0123\u0092\2\u039f\u03a0\5\u012d\u0097\2\u03a0\u03a1\5"+
- "\u011f\u0090\2\u03a1\u0090\3\2\2\2\u03a2\u03a3\5\u0139\u009d\2\u03a3\u03a4"+
- "\5\u0135\u009b\2\u03a4\u03a5\5\u013b\u009e\2\u03a5\u03a6\5\u011b\u008e"+
- "\2\u03a6\u0092\3\2\2\2\u03a7\u03a8\5\u013b\u009e\2\u03a8\u03a9\5\u0137"+
- "\u009c\2\u03a9\u03aa\5\u0113\u008a\2\u03aa\u03ab\5\u011f\u0090\2\u03ab"+
- "\u03ac\5\u011b\u008e\2\u03ac\u0094\3\2\2\2\u03ad\u03ae\5\u013b\u009e\2"+
- "\u03ae\u03af\5\u0137\u009c\2\u03af\u03b0\5\u0123\u0092\2\u03b0\u03b1\5"+
- "\u012d\u0097\2\u03b1\u03b2\5\u011f\u0090\2\u03b2\u0096\3\2\2\2\u03b3\u03b4"+
- "\5\u013d\u009f\2\u03b4\u03b5\5\u0113\u008a\2\u03b5\u03b6\5\u0129\u0095"+
- "\2\u03b6\u03b7\5\u013b\u009e\2\u03b7\u03b8\5\u011b\u008e\2\u03b8\u0098"+
- "\3\2\2\2\u03b9\u03ba\5\u013d\u009f\2\u03ba\u03bb\5\u0113\u008a\2\u03bb"+
- "\u03bc\5\u0129\u0095\2\u03bc\u03bd\5\u013b\u009e\2\u03bd\u03be\5\u011b"+
- "\u008e\2\u03be\u03bf\5\u0137\u009c\2\u03bf\u009a\3\2\2\2\u03c0\u03c1\5"+
- "\u013f\u00a0\2\u03c1\u03c2\5\u0121\u0091\2\u03c2\u03c3\5\u011b\u008e\2"+
- "\u03c3\u03c4\5\u012d\u0097\2\u03c4\u009c\3\2\2\2\u03c5\u03c6\5\u0145\u00a3"+
- "\2\u03c6\u03c7\5\u011b\u008e\2\u03c7\u03c8\5\u0135\u009b\2\u03c8\u03c9"+
- "\5\u012f\u0098\2\u03c9\u009e\3\2\2\2\u03ca\u03cb\5\u0145\u00a3\2\u03cb"+
- "\u03cc\5\u011b\u008e\2\u03cc\u03cd\5\u0135\u009b\2\u03cd\u03ce\5\u012f"+
- "\u0098\2\u03ce\u03cf\5\u0137\u009c\2\u03cf\u00a0\3\2\2\2\u03d0\u03d1\5"+
- "\u0145\u00a3\2\u03d1\u03d2\5\u011b\u008e\2\u03d2\u03d3\5\u0135\u009b\2"+
- "\u03d3\u03d4\5\u012f\u0098\2\u03d4\u03d5\5\u011b\u008e\2\u03d5\u03d6\5"+
- "\u0137\u009c\2\u03d6\u00a2\3\2\2\2\u03d7\u03d8\7$\2\2\u03d8\u00a4\3\2"+
- "\2\2\u03d9\u03da\7.\2\2\u03da\u00a6\3\2\2\2\u03db\u03dc\7\60\2\2\u03dc"+
- "\u00a8\3\2\2\2\u03dd\u03de\7*\2\2\u03de\u00aa\3\2\2\2\u03df\u03e0\7/\2"+
- "\2\u03e0\u00ac\3\2\2\2\u03e1\u03e2\7-\2\2\u03e2\u00ae\3\2\2\2\u03e3\u03e4"+
- "\7+\2\2\u03e4\u00b0\3\2\2\2\u03e5\u03e6\7)\2\2\u03e6\u00b2\3\2\2\2\u03e7"+
- "\u03e8\7\61\2\2\u03e8\u00b4\3\2\2\2\u03e9\u03eb\7\60\2\2\u03ea\u03ec\t"+
- "\2\2\2\u03eb\u03ea\3\2\2\2\u03ec\u03ed\3\2\2\2\u03ed\u03eb\3\2\2\2\u03ed"+
- "\u03ee\3\2\2\2\u03ee\u03f5\3\2\2\2\u03ef\u03f1\7\60\2\2\u03f0\u03f2\5"+
- "\u0147\u00a4\2\u03f1\u03f0\3\2\2\2\u03f1\u03f2\3\2\2\2\u03f2\u03f3\3\2"+
- "\2\2\u03f3\u03f5\7\2\2\3\u03f4\u03e9\3\2\2\2\u03f4\u03ef\3\2\2\2\u03f5"+
- "\u00b6\3\2\2\2\u03f6\u03fa\7,\2\2\u03f7\u03f9\n\3\2\2\u03f8\u03f7\3\2"+
- "\2\2\u03f9\u03fc\3\2\2\2\u03fa\u03f8\3\2\2\2\u03fa\u03fb\3\2\2\2\u03fb"+
- "\u03fd\3\2\2\2\u03fc\u03fa\3\2\2\2\u03fd\u03fe\b\\\2\2\u03fe\u00b8\3\2"+
- "\2\2\u03ff\u0401\7;\2\2\u0400\u03ff\3\2\2\2\u0401\u0402\3\2\2\2\u0402"+
- "\u0400\3\2\2\2\u0402\u0403\3\2\2\2\u0403\u00ba\3\2\2\2\u0404\u0406\5\u0113"+
- "\u008a\2\u0405\u0404\3\2\2\2\u0406\u0407\3\2\2\2\u0407\u0405\3\2\2\2\u0407"+
- "\u0408\3\2\2\2\u0408\u00bc\3\2\2\2\u0409\u040b\5\u0131\u0099\2\u040a\u0409"+
- "\3\2\2\2\u040b\u040c\3\2\2\2\u040c\u040a\3\2\2\2\u040c\u040d\3\2\2\2\u040d"+
- "\u0411\3\2\2\2\u040e\u0410\7;\2\2\u040f\u040e\3\2\2\2\u0410\u0413\3\2"+
- "\2\2\u0411\u040f\3\2\2\2\u0411\u0412\3\2\2\2\u0412\u00be\3\2\2\2\u0413"+
- "\u0411\3\2\2\2\u0414\u0416\5\u0141\u00a1\2\u0415\u0414\3\2\2\2\u0416\u0417"+
- "\3\2\2\2\u0417\u0415\3\2\2\2\u0417\u0418\3\2\2\2\u0418\u00c0\3\2\2\2\u0419"+
- "\u041b\5\u012d\u0097\2\u041a\u0419\3\2\2\2\u041b\u041c\3\2\2\2\u041c\u041a"+
- "\3\2\2\2\u041c\u041d\3\2\2\2\u041d\u00c2\3\2\2\2\u041e\u0420\5\u0137\u009c"+
- "\2\u041f\u0421\7;\2\2\u0420\u041f\3\2\2\2\u0421\u0422\3\2\2\2\u0422\u0420"+
- "\3\2\2\2\u0422\u0423\3\2\2\2\u0423\u0425\3\2\2\2\u0424\u0426\5\u013d\u009f"+
- "\2\u0425\u0424\3\2\2\2\u0425\u0426\3\2\2\2\u0426\u042a\3\2\2\2\u0427\u0429"+
- "\5\u0131\u0099\2\u0428\u0427\3\2\2\2\u0429\u042c\3\2\2\2\u042a\u0428\3"+
- "\2\2\2\u042a\u042b\3\2\2\2\u042b\u0430\3\2\2\2\u042c\u042a\3\2\2\2\u042d"+
- "\u042f\7;\2\2\u042e\u042d\3\2\2\2\u042f\u0432\3\2\2\2\u0430\u042e\3\2"+
- "\2\2\u0430\u0431\3\2\2\2\u0431\u0449\3\2\2\2\u0432\u0430\3\2\2\2\u0433"+
- "\u0437\5\u0137\u009c\2\u0434\u0436\7;\2\2\u0435\u0434\3\2\2\2\u0436\u0439"+
- "\3\2\2\2\u0437\u0435\3\2\2\2\u0437\u0438\3\2\2\2\u0438\u043b\3\2\2\2\u0439"+
- "\u0437\3\2\2\2\u043a\u043c\5\u013d\u009f\2\u043b\u043a\3\2\2\2\u043b\u043c"+
- "\3\2\2\2\u043c\u0440\3\2\2\2\u043d\u043f\5\u0131\u0099\2\u043e\u043d\3"+
- "\2\2\2\u043f\u0442\3\2\2\2\u0440\u043e\3\2\2\2\u0440\u0441\3\2\2\2\u0441"+
- "\u0444\3\2\2\2\u0442\u0440\3\2\2\2\u0443\u0445\7;\2\2\u0444\u0443\3\2"+
- "\2\2\u0445\u0446\3\2\2\2\u0446\u0444\3\2\2\2\u0446\u0447\3\2\2\2\u0447"+
- "\u0449\3\2\2\2\u0448\u041e\3\2\2\2\u0448\u0433\3\2\2\2\u0449\u00c4\3\2"+
- "\2\2\u044a\u044c\5\u0145\u00a3\2\u044b\u044a\3\2\2\2\u044c\u044d\3\2\2"+
- "\2\u044d\u044b\3\2\2\2\u044d\u044e\3\2\2\2\u044e\u0452\3\2\2\2\u044f\u0451"+
- "\7;\2\2\u0450\u044f\3\2\2\2\u0451\u0454\3\2\2\2\u0452\u0450\3\2\2\2\u0452"+
- "\u0453\3\2\2\2\u0453\u0458\3\2\2\2\u0454\u0452\3\2\2\2\u0455\u0457\5\u0131"+
- "\u0099\2\u0456\u0455\3\2\2\2\u0457\u045a\3\2\2\2\u0458\u0456\3\2\2\2\u0458"+
- "\u0459\3\2\2\2\u0459\u0474\3\2\2\2\u045a\u0458\3\2\2\2\u045b\u045d\5\u0145"+
- "\u00a3\2\u045c\u045b\3\2\2\2\u045d\u045e\3\2\2\2\u045e\u045c\3\2\2\2\u045e"+
- "\u045f\3\2\2\2\u045f\u0463\3\2\2\2\u0460\u0462\7;\2\2\u0461\u0460\3\2"+
- "\2\2\u0462\u0465\3\2\2\2\u0463\u0461\3\2\2\2\u0463\u0464\3\2\2\2\u0464"+
- "\u0466\3\2\2\2\u0465\u0463\3\2\2\2\u0466\u046a\5\u013d\u009f\2\u0467\u0469"+
- "\5\u0131\u0099\2\u0468\u0467\3\2\2\2\u0469\u046c\3\2\2\2\u046a\u0468\3"+
- "\2\2\2\u046a\u046b\3\2\2\2\u046b\u0470\3\2\2\2\u046c\u046a\3\2\2\2\u046d"+
- "\u046f\7;\2\2\u046e\u046d\3\2\2\2\u046f\u0472\3\2\2\2\u0470\u046e\3\2"+
- "\2\2\u0470\u0471\3\2\2\2\u0471\u0474\3\2\2\2\u0472\u0470\3\2\2\2\u0473"+
- "\u044b\3\2\2\2\u0473\u045c\3\2\2\2\u0474\u00c6\3\2\2\2\u0475\u0477\5\u013d"+
- "\u009f\2\u0476\u0475\3\2\2\2\u0477\u0478\3\2\2\2\u0478\u0476\3\2\2\2\u0478"+
- "\u0479\3\2\2\2\u0479\u047b\3\2\2\2\u047a\u047c\7;\2\2\u047b\u047a\3\2"+
- "\2\2\u047c\u047d\3\2\2\2\u047d\u047b\3\2\2\2\u047d\u047e\3\2\2\2\u047e"+
- "\u00c8\3\2\2\2\u047f\u0481\5\u0131\u0099\2\u0480\u047f\3\2\2\2\u0481\u0482"+
- "\3\2\2\2\u0482\u0480\3\2\2\2\u0482\u0483\3\2\2\2\u0483\u0487\3\2\2\2\u0484"+
- "\u0486\7;\2\2\u0485\u0484\3\2\2\2\u0486\u0489\3\2\2\2\u0487\u0485\3\2"+
- "\2\2\u0487\u0488\3\2\2\2\u0488\u00ca\3\2\2\2\u0489\u0487\3\2\2\2\u048a"+
- "\u048e\5\u0137\u009c\2\u048b\u048d\7;\2\2\u048c\u048b\3\2\2\2\u048d\u0490"+
- "\3\2\2\2\u048e\u048c\3\2\2\2\u048e\u048f\3\2\2\2\u048f\u0492\3\2\2\2\u0490"+
- "\u048e\3\2\2\2\u0491\u0493\5\u013d\u009f\2\u0492\u0491\3\2\2\2\u0492\u0493"+
- "\3\2\2\2\u0493\u0497\3\2\2\2\u0494\u0496\5\u0131\u0099\2\u0495\u0494\3"+
- "\2\2\2\u0496\u0499\3\2\2\2\u0497\u0495\3\2\2\2\u0497\u0498\3\2\2\2\u0498"+
- "\u049d\3\2\2\2\u0499\u0497\3\2\2\2\u049a\u049c\7;\2\2\u049b\u049a\3\2"+
- "\2\2\u049c\u049f\3\2\2\2\u049d\u049b\3\2\2\2\u049d\u049e\3\2\2\2\u049e"+
- "\u00cc\3\2\2\2\u049f\u049d\3\2\2\2\u04a0\u04a2\5\u0145\u00a3\2\u04a1\u04a0"+
- "\3\2\2\2\u04a2\u04a3\3\2\2\2\u04a3\u04a1\3\2\2\2\u04a3\u04a4\3\2\2\2\u04a4"+
- "\u04a8\3\2\2\2\u04a5\u04a7\7;\2\2\u04a6\u04a5\3\2\2\2\u04a7\u04aa\3\2"+
- "\2\2\u04a8\u04a6\3\2\2\2\u04a8\u04a9\3\2\2\2\u04a9\u04ae\3\2\2\2\u04aa"+
- "\u04a8\3\2\2\2\u04ab\u04ad\5\u0131\u0099\2\u04ac\u04ab\3\2\2\2\u04ad\u04b0"+
- "\3\2\2\2\u04ae\u04ac\3\2\2\2\u04ae\u04af\3\2\2\2\u04af\u04ca\3\2\2\2\u04b0"+
- "\u04ae\3\2\2\2\u04b1\u04b3\5\u0145\u00a3\2\u04b2\u04b1\3\2\2\2\u04b3\u04b4"+
- "\3\2\2\2\u04b4\u04b2\3\2\2\2\u04b4\u04b5\3\2\2\2\u04b5\u04b9\3\2\2\2\u04b6"+
- "\u04b8\7;\2\2\u04b7\u04b6\3\2\2\2\u04b8\u04bb\3\2\2\2\u04b9\u04b7\3\2"+
- "\2\2\u04b9\u04ba\3\2\2\2\u04ba\u04bc\3\2\2\2\u04bb\u04b9\3\2\2\2\u04bc"+
- "\u04c0\5\u013d\u009f\2\u04bd\u04bf\5\u0131\u0099\2\u04be\u04bd\3\2\2\2"+
- "\u04bf\u04c2\3\2\2\2\u04c0\u04be\3\2\2\2\u04c0\u04c1\3\2\2\2\u04c1\u04c6"+
- "\3\2\2\2\u04c2\u04c0\3\2\2\2\u04c3\u04c5\7;\2\2\u04c4\u04c3\3\2\2\2\u04c5"+
- "\u04c8\3\2\2\2\u04c6\u04c4\3\2\2\2\u04c6\u04c7\3\2\2\2\u04c7\u04ca\3\2"+
- "\2\2\u04c8\u04c6\3\2\2\2\u04c9\u04a1\3\2\2\2\u04c9\u04b2\3\2\2\2\u04ca"+
- "\u00ce\3\2\2\2\u04cb\u04cd\5\u013d\u009f\2\u04cc\u04cb\3\2\2\2\u04cd\u04ce"+
- "\3\2\2\2\u04ce\u04cc\3\2\2\2\u04ce\u04cf\3\2\2\2\u04cf\u04d3\3\2\2\2\u04d0"+
- "\u04d2\7;\2\2\u04d1\u04d0\3\2\2\2\u04d2\u04d5\3\2\2\2\u04d3\u04d1\3\2"+
- "\2\2\u04d3\u04d4\3\2\2\2\u04d4\u00d0\3\2\2\2\u04d5\u04d3\3\2\2\2\u04d6"+
- "\u04d8\5\u0137\u009c\2\u04d7\u04d6\3\2\2\2\u04d7\u04d8\3\2\2\2\u04d8\u04da"+
- "\3\2\2\2\u04d9\u04db\5\u00dfp\2\u04da\u04d9\3\2\2\2\u04da\u04db\3\2\2"+
- "\2\u04db\u04de\3\2\2\2\u04dc\u04df\5\u00a7T\2\u04dd\u04df\5\u00a5S\2\u04de"+
- "\u04dc\3\2\2\2\u04de\u04dd\3\2\2\2\u04df\u04e0\3\2\2\2\u04e0\u04e1\5\u00df"+
- "p\2\u04e1\u00d2\3\2\2\2\u04e2\u04e4\5\u0137\u009c\2\u04e3\u04e2\3\2\2"+
- "\2\u04e3\u04e4\3\2\2\2\u04e4\u04e6\3\2\2\2\u04e5\u04e7\5\u00dfp\2\u04e6"+
- "\u04e5\3\2\2\2\u04e6\u04e7\3\2\2\2\u04e7\u04e8\3\2\2\2\u04e8\u04f1\5\u013d"+
- "\u009f\2\u04e9\u04ea\5\u00e7t\2\u04ea\u04eb\5\u00dfp\2\u04eb\u04ed\3\2"+
- "\2\2\u04ec\u04e9\3\2\2\2\u04ec\u04ed\3\2\2\2\u04ed\u04f2\3\2\2\2\u04ee"+
- "\u04f0\5\u00dfp\2\u04ef\u04ee\3\2\2\2\u04ef\u04f0\3\2\2\2\u04f0\u04f2"+
- "\3\2\2\2\u04f1\u04ec\3\2\2\2\u04f1\u04ef\3\2\2\2\u04f2\u00d4\3\2\2\2\u04f3"+
- "\u04f5\5\u0137\u009c\2\u04f4\u04f3\3\2\2\2\u04f4\u04f5\3\2\2\2\u04f5\u04f6"+
- "\3\2\2\2\u04f6\u04f8\5\u00dfp\2\u04f7\u04f9\5\u00e7t\2\u04f8\u04f7\3\2"+
- "\2\2\u04f8\u04f9\3\2\2\2\u04f9\u00d6\3\2\2\2\u04fa\u04fc\5\u0137\u009c"+
- "\2\u04fb\u04fa\3\2\2\2\u04fb\u04fc\3\2\2\2\u04fc\u04fd\3\2\2\2\u04fd\u04fe"+
- "\5\u00e7t\2\u04fe\u04ff\5\u00dfp\2\u04ff\u00d8\3\2\2\2\u0500\u0502\5\u00f3"+
- "z\2\u0501\u0503\5\u00dfp\2\u0502\u0501\3\2\2\2\u0502\u0503\3\2\2\2\u0503"+
- "\u0506\3\2\2\2\u0504\u0507\5\u00a7T\2\u0505\u0507\5\u00a5S\2\u0506\u0504"+
- "\3\2\2\2\u0506\u0505\3\2\2\2\u0507\u050d\3\2\2\2\u0508\u050a\5\u00dfp"+
- "\2\u0509\u050b\5\u00f3z\2\u050a\u0509\3\2\2\2\u050a\u050b\3\2\2\2\u050b"+
- "\u050e\3\2\2\2\u050c\u050e\5\u00f3z\2\u050d\u0508\3\2\2\2\u050d\u050c"+
- "\3\2\2\2\u050e\u00da\3\2\2\2\u050f\u0511\5\u00f3z\2\u0510\u0512\5\u00df"+
- "p\2\u0511\u0510\3\2\2\2\u0511\u0512\3\2\2\2\u0512\u0513\3\2\2\2\u0513"+
- "\u0521\5\u013d\u009f\2\u0514\u0517\5\u00e7t\2\u0515\u0518\5\u00dfp\2\u0516"+
- "\u0518\5\u00f3z\2\u0517\u0515\3\2\2\2\u0517\u0516\3\2\2\2\u0518\u051a"+
- "\3\2\2\2\u0519\u0514\3\2\2\2\u0519\u051a\3\2\2\2\u051a\u0522\3\2\2\2\u051b"+
- "\u051d\5\u00dfp\2\u051c\u051b\3\2\2\2\u051c\u051d\3\2\2\2\u051d\u051f"+
- "\3\2\2\2\u051e\u0520\5\u00f3z\2\u051f\u051e\3\2\2\2\u051f\u0520\3\2\2"+
- "\2\u0520\u0522\3\2\2\2\u0521\u0519\3\2\2\2\u0521\u051c\3\2\2\2\u0522\u00dc"+
- "\3\2\2\2\u0523\u0525\5\u00f3z\2\u0524\u0526\5\u00dfp\2\u0525\u0524\3\2"+
- "\2\2\u0525\u0526\3\2\2\2\u0526\u0528\3\2\2\2\u0527\u0529\5\u00e7t\2\u0528"+
- "\u0527\3\2\2\2\u0528\u0529\3\2\2\2\u0529\u00de\3\2\2\2\u052a\u052c\5\u00e1"+
- "q\2\u052b\u052a\3\2\2\2\u052c\u052d\3\2\2\2\u052d\u052b\3\2\2\2\u052d"+
- "\u052e\3\2\2\2\u052e\u00e0\3\2\2\2\u052f\u0530\7;\2\2\u0530\u0531\5\u00a9"+
- "U\2\u0531\u0532\5\u0109\u0085\2\u0532\u0533\5\u00afX\2\u0533\u053a\3\2"+
- "\2\2\u0534\u0536\7;\2\2\u0535\u0534\3\2\2\2\u0536\u0537\3\2\2\2\u0537"+
- "\u0535\3\2\2\2\u0537\u0538\3\2\2\2\u0538\u053a\3\2\2\2\u0539\u052f\3\2"+
- "\2\2\u0539\u0535\3\2\2\2\u053a\u00e2\3\2\2\2\u053b\u053d\5\u00e5s\2\u053c"+
- "\u053b\3\2\2\2\u053d\u053e\3\2\2\2\u053e\u053c\3\2\2\2\u053e\u053f\3\2"+
- "\2\2\u053f\u00e4\3\2\2\2\u0540\u0541\5\u0113\u008a\2\u0541\u0542\5\u00a9"+
- "U\2\u0542\u0543\5\u0109\u0085\2\u0543\u0544\5\u00afX\2\u0544\u054b\3\2"+
- "\2\2\u0545\u0547\5\u0113\u008a\2\u0546\u0545\3\2\2\2\u0547\u0548\3\2\2"+
- "\2\u0548\u0546\3\2\2\2\u0548\u0549\3\2\2\2\u0549\u054b\3\2\2\2\u054a\u0540"+
- "\3\2\2\2\u054a\u0546\3\2\2\2\u054b\u00e6\3\2\2\2\u054c\u054e\5\u00e9u"+
- "\2\u054d\u054c\3\2\2\2\u054e\u054f\3\2\2\2\u054f\u054d\3\2\2\2\u054f\u0550"+
- "\3\2\2\2\u0550\u00e8\3\2\2\2\u0551\u0552\5\u0131\u0099\2\u0552\u0553\5"+
- "\u00a9U\2\u0553\u0554\5\u0109\u0085\2\u0554\u0555\5\u00afX\2\u0555\u055c"+
- "\3\2\2\2\u0556\u0558\5\u0131\u0099\2\u0557\u0556\3\2\2\2\u0558\u0559\3"+
- "\2\2\2\u0559\u0557\3\2\2\2\u0559\u055a\3\2\2\2\u055a\u055c\3\2\2\2\u055b"+
- "\u0551\3\2\2\2\u055b\u0557\3\2\2\2\u055c\u00ea\3\2\2\2\u055d\u055f\5\u00ed"+
- "w\2\u055e\u055d\3\2\2\2\u055f\u0560\3\2\2\2\u0560\u055e\3\2\2\2\u0560"+
- "\u0561\3\2\2\2\u0561\u00ec\3\2\2\2\u0562\u0563\5\u0141\u00a1\2\u0563\u0564"+
- "\5\u00a9U\2\u0564\u0565\5\u0109\u0085\2\u0565\u0566\5\u00afX\2\u0566\u056d"+
- "\3\2\2\2\u0567\u0569\5\u0141\u00a1\2\u0568\u0567\3\2\2\2\u0569\u056a\3"+
- "\2\2\2\u056a\u0568\3\2\2\2\u056a\u056b\3\2\2\2\u056b\u056d\3\2\2\2\u056c"+
- "\u0562\3\2\2\2\u056c\u0568\3\2\2\2\u056d\u00ee\3\2\2\2\u056e\u0570\5\u00f1"+
- "y\2\u056f\u056e\3\2\2\2\u0570\u0571\3\2\2\2\u0571\u056f\3\2\2\2\u0571"+
- "\u0572\3\2\2\2\u0572\u00f0\3\2\2\2\u0573\u0574\5\u012d\u0097\2\u0574\u0575"+
- "\5\u00a9U\2\u0575\u0576\5\u0109\u0085\2\u0576\u0577\5\u00afX\2\u0577\u057e"+
- "\3\2\2\2\u0578\u057a\5\u012d\u0097\2\u0579\u0578\3\2\2\2\u057a\u057b\3"+
- "\2\2\2\u057b\u0579\3\2\2\2\u057b\u057c\3\2\2\2\u057c\u057e\3\2\2\2\u057d"+
- "\u0573\3\2\2\2\u057d\u0579\3\2\2\2\u057e\u00f2\3\2\2\2\u057f\u0581\5\u00f5"+
- "{\2\u0580\u057f\3\2\2\2\u0581\u0582\3\2\2\2\u0582\u0580\3\2\2\2\u0582"+
- "\u0583\3\2\2\2\u0583\u00f4\3\2\2\2\u0584\u0585\5\u0145\u00a3\2\u0585\u0586"+
- "\5\u00a9U\2\u0586\u0587\5\u0109\u0085\2\u0587\u0588\5\u00afX\2\u0588\u058f"+
- "\3\2\2\2\u0589\u058b\5\u0145\u00a3\2\u058a\u0589\3\2\2\2\u058b\u058c\3"+
- "\2\2\2\u058c\u058a\3\2\2\2\u058c\u058d\3\2\2\2\u058d\u058f\3\2\2\2\u058e"+
- "\u0584\3\2\2\2\u058e\u058a\3\2\2\2\u058f\u00f6\3\2\2\2\u0590\u0593\5\u00fb"+
- "~\2\u0591\u0593\5\u00f9}\2\u0592\u0590\3\2\2\2\u0592\u0591\3\2\2\2\u0593"+
- "\u00f8\3\2\2\2\u0594\u0595\5\u0141\u00a1\2\u0595\u0597\7$\2\2\u0596\u0598"+
- "\t\4\2\2\u0597\u0596\3\2\2\2\u0598\u0599\3\2\2\2\u0599\u0597\3\2\2\2\u0599"+
- "\u059a\3\2\2\2\u059a\u059b\3\2\2\2\u059b\u059c\7$\2\2\u059c\u05b9\3\2"+
- "\2\2\u059d\u059e\5\u0141\u00a1\2\u059e\u05a0\7)\2\2\u059f\u05a1\t\4\2"+
- "\2\u05a0\u059f\3\2\2\2\u05a1\u05a2\3\2\2\2\u05a2\u05a0\3\2\2\2\u05a2\u05a3"+
- "\3\2\2\2\u05a3\u05a4\3\2\2\2\u05a4\u05a5\7)\2\2\u05a5\u05b9\3\2\2\2\u05a6"+
- "\u05a7\5\u012d\u0097\2\u05a7\u05a9\7$\2\2\u05a8\u05aa\t\4\2\2\u05a9\u05a8"+
- "\3\2\2\2\u05aa\u05ab\3\2\2\2\u05ab\u05a9\3\2\2\2\u05ab\u05ac\3\2\2\2\u05ac"+
- "\u05ad\3\2\2\2\u05ad\u05ae\7$\2\2\u05ae\u05b9\3\2\2\2\u05af\u05b0\5\u012d"+
- "\u0097\2\u05b0\u05b2\7)\2\2\u05b1\u05b3\t\4\2\2\u05b2\u05b1\3\2\2\2\u05b3"+
- "\u05b4\3\2\2\2\u05b4\u05b2\3\2\2\2\u05b4\u05b5\3\2\2\2\u05b5\u05b6\3\2"+
- "\2\2\u05b6\u05b7\7)\2\2\u05b7\u05b9\3\2\2\2\u05b8\u0594\3\2\2\2\u05b8"+
- "\u059d\3\2\2\2\u05b8\u05a6\3\2\2\2\u05b8\u05af\3\2\2\2\u05b9\u00fa\3\2"+
- "\2\2\u05ba\u05c1\7$\2\2\u05bb\u05c0\n\5\2\2\u05bc\u05bd\7$\2\2\u05bd\u05c0"+
- "\7$\2\2\u05be\u05c0\7)\2\2\u05bf\u05bb\3\2\2\2\u05bf\u05bc\3\2\2\2\u05bf"+
- "\u05be\3\2\2\2\u05c0\u05c3\3\2\2\2\u05c1\u05bf\3\2\2\2\u05c1\u05c2\3\2"+
- "\2\2\u05c2\u05c4\3\2\2\2\u05c3\u05c1\3\2\2\2\u05c4\u05d1\7$\2\2\u05c5"+
- "\u05cc\7)\2\2\u05c6\u05cb\n\6\2\2\u05c7\u05c8\7)\2\2\u05c8\u05cb\7)\2"+
- "\2\u05c9\u05cb\7$\2\2\u05ca\u05c6\3\2\2\2\u05ca\u05c7\3\2\2\2\u05ca\u05c9"+
- "\3\2\2\2\u05cb\u05ce\3\2\2\2\u05cc\u05ca\3\2\2\2\u05cc\u05cd\3\2\2\2\u05cd"+
- "\u05cf\3\2\2\2\u05ce\u05cc\3\2\2\2\u05cf\u05d1\7)\2\2\u05d0\u05ba\3\2"+
- "\2\2\u05d0\u05c5\3\2\2\2\u05d1\u00fc\3\2\2\2\u05d2\u05d3\7\62\2\2\u05d3"+
- "\u05d4\7\63\2\2\u05d4\u00fe\3\2\2\2\u05d5\u05d6\7\62\2\2\u05d6\u05da\t"+
- "\7\2\2\u05d7\u05d8\t\b\2\2\u05d8\u05da\t\t\2\2\u05d9\u05d5\3\2\2\2\u05d9"+
- "\u05d7\3\2\2\2\u05da\u0100\3\2\2\2\u05db\u05dc\78\2\2\u05dc\u05dd\78\2"+
- "\2\u05dd\u0102\3\2\2\2\u05de\u05df\79\2\2\u05df\u05e0\79\2\2\u05e0\u0104"+
- "\3\2\2\2\u05e1\u05e2\7:\2\2\u05e2\u05e3\7:\2\2\u05e3\u0106\3\2\2\2\u05e4"+
- "\u05e6\t\t\2\2\u05e5\u05e4\3\2\2\2\u05e6\u05e7\3\2\2\2\u05e7\u05e5\3\2"+
- "\2\2\u05e7\u05e8\3\2\2\2\u05e8\u0108\3\2\2\2\u05e9\u05eb\7\62\2\2\u05ea"+
- "\u05e9\3\2\2\2\u05eb\u05ee\3\2\2\2\u05ec\u05ea\3\2\2\2\u05ec\u05ed\3\2"+
- "\2\2\u05ed\u05ef\3\2\2\2\u05ee\u05ec\3\2\2\2\u05ef\u05f3\t\n\2\2\u05f0"+
- "\u05f2\t\t\2\2\u05f1\u05f0\3\2\2\2\u05f2\u05f5\3\2\2\2\u05f3\u05f1\3\2"+
- "\2\2\u05f3\u05f4\3\2\2\2\u05f4\u010a\3\2\2\2\u05f5\u05f3\3\2\2\2\u05f6"+
- "\u05f8\t\t\2\2\u05f7\u05f6\3\2\2\2\u05f8\u05fb\3\2\2\2\u05f9\u05f7\3\2"+
- "\2\2\u05f9\u05fa\3\2\2\2\u05fa\u05fd\3\2\2\2\u05fb\u05f9\3\2\2\2\u05fc"+
- "\u05fe\5\u00a7T\2\u05fd\u05fc\3\2\2\2\u05fd\u05fe\3\2\2\2\u05fe\u0600"+
- "\3\2\2\2\u05ff\u0601\t\t\2\2\u0600\u05ff\3\2\2\2\u0601\u0602\3\2\2\2\u0602"+
- "\u0600\3\2\2\2\u0602\u0603\3\2\2\2\u0603\u060d\3\2\2\2\u0604\u0606\5\u011b"+
- "\u008e\2\u0605\u0607\5\u010d\u0087\2\u0606\u0605\3\2\2\2\u0606\u0607\3"+
- "\2\2\2\u0607\u0609\3\2\2\2\u0608\u060a\t\t\2\2\u0609\u0608\3\2\2\2\u060a"+
- "\u060b\3\2\2\2\u060b\u0609\3\2\2\2\u060b\u060c\3\2\2\2\u060c\u060e\3\2"+
- "\2\2\u060d\u0604\3\2\2\2\u060d\u060e\3\2\2\2\u060e\u010c\3\2\2\2\u060f"+
- "\u0612\5\u00adW\2\u0610\u0612\5\u00abV\2\u0611\u060f\3\2\2\2\u0611\u0610"+
- "\3\2\2\2\u0612\u010e\3\2\2\2\u0613\u0614\7)\2\2\u0614\u0615\5\u0111\u0089"+
- "\2\u0615\u0621\7)\2\2\u0616\u0618\t\13\2\2\u0617\u0616\3\2\2\2\u0618\u061b"+
- "\3\2\2\2\u0619\u0617\3\2\2\2\u0619\u061a\3\2\2\2\u061a\u061d\3\2\2\2\u061b"+
- "\u0619\3\2\2\2\u061c\u061e\t\f\2\2\u061d\u061c\3\2\2\2\u061e\u061f\3\2"+
- "\2\2\u061f\u061d\3\2\2\2\u061f\u0620\3\2\2\2\u0620\u0622\3\2\2\2\u0621"+
- "\u0619\3\2\2\2\u0622\u0623\3\2\2\2\u0623\u0621\3\2\2\2\u0623\u0624\3\2"+
- "\2\2\u0624\u0110\3\2\2\2\u0625\u0627\t\r\2\2\u0626\u0625\3\2\2\2\u0627"+
- "\u0628\3\2\2\2\u0628\u0626\3\2\2\2\u0628\u0629\3\2\2\2\u0629\u062d\3\2"+
- "\2\2\u062a\u062c\t\16\2\2\u062b\u062a\3\2\2\2\u062c\u062f\3\2\2\2\u062d"+
- "\u062b\3\2\2\2\u062d\u062e\3\2\2\2\u062e\u0112\3\2\2\2\u062f\u062d\3\2"+
- "\2\2\u0630\u0631\t\17\2\2\u0631\u0114\3\2\2\2\u0632\u0633\t\20\2\2\u0633"+
- "\u0116\3\2\2\2\u0634\u0635\t\21\2\2\u0635\u0118\3\2\2\2\u0636\u0637\t"+
- "\22\2\2\u0637\u011a\3\2\2\2\u0638\u0639\t\23\2\2\u0639\u011c\3\2\2\2\u063a"+
- "\u063b\t\24\2\2\u063b\u011e\3\2\2\2\u063c\u063d\t\25\2\2\u063d\u0120\3"+
- "\2\2\2\u063e\u063f\t\26\2\2\u063f\u0122\3\2\2\2\u0640\u0641\t\27\2\2\u0641"+
- "\u0124\3\2\2\2\u0642\u0643\t\30\2\2\u0643\u0126\3\2\2\2\u0644\u0645\t"+
- "\31\2\2\u0645\u0128\3\2\2\2\u0646\u0647\t\32\2\2\u0647\u012a\3\2\2\2\u0648"+
- "\u0649\t\33\2\2\u0649\u012c\3\2\2\2\u064a\u064b\t\34\2\2\u064b\u012e\3"+
- "\2\2\2\u064c\u064d\t\35\2\2\u064d\u0130\3\2\2\2\u064e\u064f\t\36\2\2\u064f"+
- "\u0132\3\2\2\2\u0650\u0651\t\37\2\2\u0651\u0134\3\2\2\2\u0652\u0653\t"+
- " \2\2\u0653\u0136\3\2\2\2\u0654\u0655\t!\2\2\u0655\u0138\3\2\2\2\u0656"+
- "\u0657\t\"\2\2\u0657\u013a\3\2\2\2\u0658\u0659\t#\2\2\u0659\u013c\3\2"+
- "\2\2\u065a\u065b\t$\2\2\u065b\u013e\3\2\2\2\u065c\u065d\t%\2\2\u065d\u0140"+
- "\3\2\2\2\u065e\u065f\t&\2\2\u065f\u0142\3\2\2\2\u0660\u0661\t\'\2\2\u0661"+
- "\u0144\3\2\2\2\u0662\u0663\t(\2\2\u0663\u0146\3\2\2\2\u0664\u0665\7\34"+
- "\2\2\u0665\u0148\3\2\2\2\u0666\u0668\t)\2\2\u0667\u0666\3\2\2\2\u0668"+
- "\u0669\3\2\2\2\u0669\u0667\3\2\2\2\u0669\u066a\3\2\2\2\u066a\u066b\3\2"+
- "\2\2\u066b\u066c\b\u00a5\2\2\u066c\u014a\3\2\2\2y\2\u014d\u0355\u0361"+
- "\u036d\u03ed\u03f1\u03f4\u03fa\u0402\u0407\u040c\u0411\u0417\u041c\u0422"+
- "\u0425\u042a\u0430\u0437\u043b\u0440\u0446\u0448\u044d\u0452\u0458\u045e"+
- "\u0463\u046a\u0470\u0473\u0478\u047d\u0482\u0487\u048e\u0492\u0497\u049d"+
- "\u04a3\u04a8\u04ae\u04b4\u04b9\u04c0\u04c6\u04c9\u04ce\u04d3\u04d7\u04da"+
- "\u04de\u04e3\u04e6\u04ec\u04ef\u04f1\u04f4\u04f8\u04fb\u0502\u0506\u050a"+
- "\u050d\u0511\u0517\u0519\u051c\u051f\u0521\u0525\u0528\u052d\u0537\u0539"+
- "\u053e\u0548\u054a\u054f\u0559\u055b\u0560\u056a\u056c\u0571\u057b\u057d"+
- "\u0582\u058c\u058e\u0592\u0599\u05a2\u05ab\u05b4\u05b8\u05bf\u05c1\u05ca"+
- "\u05cc\u05d0\u05d9\u05e7\u05ec\u05f3\u05f9\u05fd\u0602\u0606\u060b\u060d"+
- "\u0611\u0619\u061f\u0623\u0628\u062d\u0669\3\b\2\2";
+ "\t\u00a4\4\u00a5\t\u00a5\4\u00a6\t\u00a6\3\2\3\2\5\2\u0150\n\2\3\3\3\3"+
+ "\3\3\3\3\3\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3"+
+ "\6\3\6\3\6\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\t\3\t\3\t"+
+ "\3\t\3\t\3\t\3\t\3\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\3\13\3\13\3\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3"+
+ "\r\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17"+
+ "\3\17\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\21\3\21\3\21"+
+ "\3\21\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\23\3\23\3\23"+
+ "\3\23\3\23\3\23\3\23\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24"+
+ "\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25"+
+ "\3\25\3\25\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26"+
+ "\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\27"+
+ "\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30"+
+ "\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\31\3\31"+
+ "\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31"+
+ "\3\31\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32"+
+ "\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33"+
+ "\3\33\3\33\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34"+
+ "\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\36\3\36"+
+ "\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37\3\37"+
+ "\3\37\3\37\3\37\3\37\3\37\3 \3 \3 \3 \3 \3 \3 \3 \3!\3!\3!\3!\3!\3!\3"+
+ "!\3!\3!\3\"\3\"\3\"\3\"\3\"\3\"\3#\3#\3#\3#\3#\3$\3$\3$\3$\3$\3$\3$\3"+
+ "$\3$\3$\3$\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3&\3&\3&\3&\3&\3&\3&\3"+
+ "&\3\'\3\'\3\'\3(\3(\3(\3(\3(\3)\3)\3)\3)\3)\3)\3)\3)\3)\3)\3*\3*\3*\3"+
+ "*\3+\3+\3+\3+\3+\3+\3+\3+\3,\3,\3,\3,\3,\3-\3-\3-\3-\3-\3-\3-\3-\3-\3"+
+ "-\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3/\3/\3/\3/\3/\3\60\3\60\3\60\3\60"+
+ "\3\60\3\60\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\62\3\62\3\62\3\62\3\62"+
+ "\3\62\3\62\3\62\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\64\3\64\3\64\3\65"+
+ "\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65"+
+ "\3\66\3\66\3\66\3\66\3\67\3\67\3\67\3\67\3\67\3\67\3\67\3\67\38\38\38"+
+ "\38\38\38\39\39\39\39\39\39\39\3:\3:\3:\3:\3:\3:\3:\3:\3:\3:\3;\3;\3;"+
+ "\3;\3;\3;\3;\3;\3<\3<\3<\3<\3<\3<\3=\3=\3=\3=\3=\3=\3=\3=\3=\3>\3>\3>"+
+ "\3>\3>\3>\6>\u0356\n>\r>\16>\u0357\3>\3>\3?\3?\3?\3?\3?\3?\6?\u0362\n"+
+ "?\r?\16?\u0363\3?\3?\3@\3@\3@\3@\3@\3@\6@\u036e\n@\r@\16@\u036f\3@\3@"+
+ "\3A\3A\3A\3A\3A\3B\3B\3B\3B\3B\3B\3C\3C\3C\3C\3C\3C\3C\3D\3D\3D\3D\3D"+
+ "\3D\3D\3D\3E\3E\3E\3E\3E\3F\3F\3F\3F\3F\3F\3G\3G\3G\3H\3H\3H\3H\3H\3H"+
+ "\3H\3H\3H\3I\3I\3I\3I\3I\3J\3J\3J\3J\3J\3J\3K\3K\3K\3K\3K\3K\3L\3L\3L"+
+ "\3L\3L\3L\3M\3M\3M\3M\3M\3M\3M\3N\3N\3N\3N\3N\3O\3O\3O\3O\3O\3P\3P\3P"+
+ "\3P\3P\3P\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3R\3R\3S\3S\3T\3T\3U\3U\3V\3V\3W\3W\3X"+
+ "\3X\3Y\3Y\3Z\3Z\3[\3[\6[\u03ee\n[\r[\16[\u03ef\3[\3[\5[\u03f4\n[\3[\5"+
+ "[\u03f7\n[\3\\\3\\\7\\\u03fb\n\\\f\\\16\\\u03fe\13\\\3\\\3\\\3]\6]\u0403"+
+ "\n]\r]\16]\u0404\3^\6^\u0408\n^\r^\16^\u0409\3_\6_\u040d\n_\r_\16_\u040e"+
+ "\3_\7_\u0412\n_\f_\16_\u0415\13_\3`\6`\u0418\n`\r`\16`\u0419\3a\6a\u041d"+
+ "\na\ra\16a\u041e\3b\3b\6b\u0423\nb\rb\16b\u0424\3b\5b\u0428\nb\3b\7b\u042b"+
+ "\nb\fb\16b\u042e\13b\3b\7b\u0431\nb\fb\16b\u0434\13b\3b\3b\7b\u0438\n"+
+ "b\fb\16b\u043b\13b\3b\5b\u043e\nb\3b\7b\u0441\nb\fb\16b\u0444\13b\3b\7"+
+ "b\u0447\nb\fb\16b\u044a\13b\5b\u044c\nb\3c\6c\u044f\nc\rc\16c\u0450\3"+
+ "c\7c\u0454\nc\fc\16c\u0457\13c\3c\7c\u045a\nc\fc\16c\u045d\13c\3c\6c\u0460"+
+ "\nc\rc\16c\u0461\3c\7c\u0465\nc\fc\16c\u0468\13c\3c\3c\7c\u046c\nc\fc"+
+ "\16c\u046f\13c\3c\7c\u0472\nc\fc\16c\u0475\13c\5c\u0477\nc\3d\6d\u047a"+
+ "\nd\rd\16d\u047b\3d\6d\u047f\nd\rd\16d\u0480\3e\6e\u0484\ne\re\16e\u0485"+
+ "\3e\7e\u0489\ne\fe\16e\u048c\13e\3f\3f\7f\u0490\nf\ff\16f\u0493\13f\3"+
+ "f\5f\u0496\nf\3f\7f\u0499\nf\ff\16f\u049c\13f\3f\7f\u049f\nf\ff\16f\u04a2"+
+ "\13f\3g\6g\u04a5\ng\rg\16g\u04a6\3g\7g\u04aa\ng\fg\16g\u04ad\13g\3g\7"+
+ "g\u04b0\ng\fg\16g\u04b3\13g\3g\6g\u04b6\ng\rg\16g\u04b7\3g\7g\u04bb\n"+
+ "g\fg\16g\u04be\13g\3g\3g\7g\u04c2\ng\fg\16g\u04c5\13g\3g\7g\u04c8\ng\f"+
+ "g\16g\u04cb\13g\5g\u04cd\ng\3h\6h\u04d0\nh\rh\16h\u04d1\3h\7h\u04d5\n"+
+ "h\fh\16h\u04d8\13h\3i\5i\u04db\ni\3i\5i\u04de\ni\3i\3i\5i\u04e2\ni\3i"+
+ "\3i\3j\5j\u04e7\nj\3j\5j\u04ea\nj\3j\3j\3j\3j\5j\u04f0\nj\3j\5j\u04f3"+
+ "\nj\5j\u04f5\nj\3k\5k\u04f8\nk\3k\3k\5k\u04fc\nk\3k\3k\3l\5l\u0501\nl"+
+ "\3l\3l\5l\u0505\nl\3m\5m\u0508\nm\3m\3m\3m\3n\3n\5n\u050f\nn\3n\3n\5n"+
+ "\u0513\nn\3n\3n\5n\u0517\nn\3n\5n\u051a\nn\3o\3o\5o\u051e\no\3o\3o\3o"+
+ "\3o\5o\u0524\no\5o\u0526\no\3o\5o\u0529\no\3o\5o\u052c\no\5o\u052e\no"+
+ "\3p\3p\5p\u0532\np\3p\5p\u0535\np\3q\6q\u0538\nq\rq\16q\u0539\3r\3r\3"+
+ "r\3r\3r\3r\6r\u0542\nr\rr\16r\u0543\5r\u0546\nr\3s\6s\u0549\ns\rs\16s"+
+ "\u054a\3t\3t\3t\3t\3t\3t\6t\u0553\nt\rt\16t\u0554\5t\u0557\nt\3u\6u\u055a"+
+ "\nu\ru\16u\u055b\3v\3v\3v\3v\3v\3v\6v\u0564\nv\rv\16v\u0565\5v\u0568\n"+
+ "v\3w\6w\u056b\nw\rw\16w\u056c\3x\3x\3x\3x\3x\3x\6x\u0575\nx\rx\16x\u0576"+
+ "\5x\u0579\nx\3y\6y\u057c\ny\ry\16y\u057d\3z\3z\3z\3z\3z\3z\6z\u0586\n"+
+ "z\rz\16z\u0587\5z\u058a\nz\3{\6{\u058d\n{\r{\16{\u058e\3|\3|\3|\3|\3|"+
+ "\3|\6|\u0597\n|\r|\16|\u0598\5|\u059b\n|\3}\3}\5}\u059f\n}\3~\3~\3~\6"+
+ "~\u05a4\n~\r~\16~\u05a5\3~\3~\3~\3~\3~\6~\u05ad\n~\r~\16~\u05ae\3~\3~"+
+ "\3~\3~\3~\6~\u05b6\n~\r~\16~\u05b7\3~\3~\3~\3~\3~\6~\u05bf\n~\r~\16~\u05c0"+
+ "\3~\3~\5~\u05c5\n~\3\177\3\177\3\177\3\177\3\177\7\177\u05cc\n\177\f\177"+
+ "\16\177\u05cf\13\177\3\177\3\177\3\177\3\177\3\177\3\177\7\177\u05d7\n"+
+ "\177\f\177\16\177\u05da\13\177\3\177\5\177\u05dd\n\177\3\u0080\3\u0080"+
+ "\3\u0080\3\u0081\3\u0081\3\u0081\3\u0081\5\u0081\u05e6\n\u0081\3\u0082"+
+ "\3\u0082\3\u0082\3\u0083\3\u0083\3\u0083\3\u0084\3\u0084\3\u0084\3\u0085"+
+ "\6\u0085\u05f2\n\u0085\r\u0085\16\u0085\u05f3\3\u0086\7\u0086\u05f7\n"+
+ "\u0086\f\u0086\16\u0086\u05fa\13\u0086\3\u0086\3\u0086\7\u0086\u05fe\n"+
+ "\u0086\f\u0086\16\u0086\u0601\13\u0086\3\u0087\7\u0087\u0604\n\u0087\f"+
+ "\u0087\16\u0087\u0607\13\u0087\3\u0087\5\u0087\u060a\n\u0087\3\u0087\6"+
+ "\u0087\u060d\n\u0087\r\u0087\16\u0087\u060e\3\u0087\3\u0087\5\u0087\u0613"+
+ "\n\u0087\3\u0087\6\u0087\u0616\n\u0087\r\u0087\16\u0087\u0617\5\u0087"+
+ "\u061a\n\u0087\3\u0088\3\u0088\5\u0088\u061e\n\u0088\3\u0089\3\u0089\3"+
+ "\u0089\3\u0089\7\u0089\u0624\n\u0089\f\u0089\16\u0089\u0627\13\u0089\3"+
+ "\u0089\6\u0089\u062a\n\u0089\r\u0089\16\u0089\u062b\6\u0089\u062e\n\u0089"+
+ "\r\u0089\16\u0089\u062f\3\u008a\6\u008a\u0633\n\u008a\r\u008a\16\u008a"+
+ "\u0634\3\u008a\7\u008a\u0638\n\u008a\f\u008a\16\u008a\u063b\13\u008a\3"+
+ "\u008b\3\u008b\3\u008c\3\u008c\3\u008d\3\u008d\3\u008e\3\u008e\3\u008f"+
+ "\3\u008f\3\u0090\3\u0090\3\u0091\3\u0091\3\u0092\3\u0092\3\u0093\3\u0093"+
+ "\3\u0094\3\u0094\3\u0095\3\u0095\3\u0096\3\u0096\3\u0097\3\u0097\3\u0098"+
+ "\3\u0098\3\u0099\3\u0099\3\u009a\3\u009a\3\u009b\3\u009b\3\u009c\3\u009c"+
+ "\3\u009d\3\u009d\3\u009e\3\u009e\3\u009f\3\u009f\3\u00a0\3\u00a0\3\u00a1"+
+ "\3\u00a1\3\u00a2\3\u00a2\3\u00a3\3\u00a3\3\u00a4\3\u00a4\3\u00a5\3\u00a5"+
+ "\3\u00a6\6\u00a6\u0674\n\u00a6\r\u00a6\16\u00a6\u0675\3\u00a6\3\u00a6"+
+ "\2\2\u00a7\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33"+
+ "\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67"+
+ "\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65"+
+ "i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F\u008b"+
+ "G\u008dH\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009bO\u009dP\u009f"+
+ "Q\u00a1R\u00a3S\u00a5T\u00a7U\u00a9V\u00abW\u00adX\u00afY\u00b1Z\u00b3"+
+ "[\u00b5\\\u00b7]\u00b9^\u00bb_\u00bd`\u00bfa\u00c1b\u00c3c\u00c5d\u00c7"+
+ "e\u00c9f\u00cbg\u00cdh\u00cfi\u00d1j\u00d3k\u00d5l\u00d7m\u00d9n\u00db"+
+ "o\u00ddp\u00dfq\u00e1r\u00e3s\u00e5t\u00e7u\u00e9v\u00ebw\u00edx\u00ef"+
+ "y\u00f1z\u00f3{\u00f5|\u00f7}\u00f9~\u00fb\2\u00fd\2\u00ff\177\u0101\u0080"+
+ "\u0103\u0081\u0105\u0082\u0107\u0083\u0109\u0084\u010b\u0085\u010d\u0086"+
+ "\u010f\2\u0111\u0087\u0113\u0088\u0115\2\u0117\2\u0119\2\u011b\2\u011d"+
+ "\2\u011f\2\u0121\2\u0123\2\u0125\2\u0127\2\u0129\2\u012b\2\u012d\2\u012f"+
+ "\2\u0131\2\u0133\2\u0135\2\u0137\2\u0139\2\u013b\2\u013d\2\u013f\2\u0141"+
+ "\2\u0143\2\u0145\2\u0147\2\u0149\u0089\u014b\u008a\3\2*\5\2\13\f\16\17"+
+ "\"\"\4\2\f\f\17\17\4\2\62;CH\5\2\f\f\17\17$$\5\2\f\f\17\17))\3\2\64;\3"+
+ "\2\63\66\3\2\62;\3\2\63;\4\2//aa\5\2\62;C\\c|\5\2\62\3\2\2\2\u026f\u0270\5\u011b\u008e\2\u0270\u0271\5\u0125\u0093"+
+ "\2\u0271\u0272\5\u0139\u009d\2\u0272\u0273\5\u0133\u009a\2\u0273\u0274"+
+ "\5\u012b\u0096\2\u0274\u0275\5\u0115\u008b\2\u0275\u0276\5\u0145\u00a3"+
+ "\2\u0276@\3\2\2\2\u0277\u0278\5\u011d\u008f\2\u0278\u0279\5\u0143\u00a2"+
+ "\2\u0279\u027a\5\u013b\u009e\2\u027a\u027b\5\u011d\u008f\2\u027b\u027c"+
+ "\5\u0137\u009c\2\u027c\u027d\5\u012f\u0098\2\u027d\u027e\5\u0115\u008b"+
+ "\2\u027e\u027f\5\u012b\u0096\2\u027fB\3\2\2\2\u0280\u0281\5\u011f\u0090"+
+ "\2\u0281\u0282\5\u0115\u008b\2\u0282\u0283\5\u012b\u0096\2\u0283\u0284"+
+ "\5\u0139\u009d\2\u0284\u0285\5\u011d\u008f\2\u0285D\3\2\2\2\u0286\u0287"+
+ "\5\u011f\u0090\2\u0287\u0288\5\u0137\u009c\2\u0288\u0289\5\u0131\u0099"+
+ "\2\u0289\u028a\5\u012d\u0097\2\u028aF\3\2\2\2\u028b\u028c\5\u0123\u0092"+
+ "\2\u028c\u028d\5\u0125\u0093\2\u028d\u028e\5\u0121\u0091\2\u028e\u028f"+
+ "\5\u0123\u0092\2\u028f\u0290\5\u00abV\2\u0290\u0291\5\u013f\u00a0\2\u0291"+
+ "\u0292\5\u0115\u008b\2\u0292\u0293\5\u012b\u0096\2\u0293\u0294\5\u013d"+
+ "\u009f\2\u0294\u0295\5\u011d\u008f\2\u0295H\3\2\2\2\u0296\u0297\5\u0123"+
+ "\u0092\2\u0297\u0298\5\u0125\u0093\2\u0298\u0299\5\u0121\u0091\2\u0299"+
+ "\u029a\5\u0123\u0092\2\u029a\u029b\5\u00abV\2\u029b\u029c\5\u013f\u00a0"+
+ "\2\u029c\u029d\5\u0115\u008b\2\u029d\u029e\5\u012b\u0096\2\u029e\u029f"+
+ "\5\u013d\u009f\2\u029f\u02a0\5\u011d\u008f\2\u02a0\u02a1\5\u0139\u009d"+
+ "\2\u02a1J\3\2\2\2\u02a2\u02a3\5\u0125\u0093\2\u02a3\u02a4\5\u012f\u0098"+
+ "\2\u02a4\u02a5\5\u011b\u008e\2\u02a5\u02a6\5\u011d\u008f\2\u02a6\u02a7"+
+ "\5\u0143\u00a2\2\u02a7\u02a8\5\u011d\u008f\2\u02a8\u02a9\5\u011b\u008e"+
+ "\2\u02a9L\3\2\2\2\u02aa\u02ab\5\u0125\u0093\2\u02ab\u02ac\5\u0139\u009d"+
+ "\2\u02acN\3\2\2\2\u02ad\u02ae\5\u0127\u0094\2\u02ae\u02af\5\u013d\u009f"+
+ "\2\u02af\u02b0\5\u0139\u009d\2\u02b0\u02b1\5\u013b\u009e\2\u02b1P\3\2"+
+ "\2\2\u02b2\u02b3\5\u0127\u0094\2\u02b3\u02b4\5\u013d\u009f\2\u02b4\u02b5"+
+ "\5\u0139\u009d\2\u02b5\u02b6\5\u013b\u009e\2\u02b6\u02b7\5\u0125\u0093"+
+ "\2\u02b7\u02b8\5\u011f\u0090\2\u02b8\u02b9\5\u0125\u0093\2\u02b9\u02ba"+
+ "\5\u011d\u008f\2\u02ba\u02bb\5\u011b\u008e\2\u02bbR\3\2\2\2\u02bc\u02bd"+
+ "\5\u0129\u0095\2\u02bd\u02be\5\u011d\u008f\2\u02be\u02bf\5\u0145\u00a3"+
+ "\2\u02bfT\3\2\2\2\u02c0\u02c1\5\u012b\u0096\2\u02c1\u02c2\5\u011d\u008f"+
+ "\2\u02c2\u02c3\5\u0115\u008b\2\u02c3\u02c4\5\u011b\u008e\2\u02c4\u02c5"+
+ "\5\u0125\u0093\2\u02c5\u02c6\5\u012f\u0098\2\u02c6\u02c7\5\u0121\u0091"+
+ "\2\u02c7V\3\2\2\2\u02c8\u02c9\5\u012b\u0096\2\u02c9\u02ca\5\u011d\u008f"+
+ "\2\u02ca\u02cb\5\u011f\u0090\2\u02cb\u02cc\5\u013b\u009e\2\u02ccX\3\2"+
+ "\2\2\u02cd\u02ce\5\u012b\u0096\2\u02ce\u02cf\5\u0131\u0099\2\u02cf\u02d0"+
+ "\5\u0141\u00a1\2\u02d0\u02d1\5\u00abV\2\u02d1\u02d2\5\u013f\u00a0\2\u02d2"+
+ "\u02d3\5\u0115\u008b\2\u02d3\u02d4\5\u012b\u0096\2\u02d4\u02d5\5\u013d"+
+ "\u009f\2\u02d5\u02d6\5\u011d\u008f\2\u02d6Z\3\2\2\2\u02d7\u02d8\5\u012b"+
+ "\u0096\2\u02d8\u02d9\5\u0131\u0099\2\u02d9\u02da\5\u0141\u00a1\2\u02da"+
+ "\u02db\5\u00abV\2\u02db\u02dc\5\u013f\u00a0\2\u02dc\u02dd\5\u0115\u008b"+
+ "\2\u02dd\u02de\5\u012b\u0096\2\u02de\u02df\5\u013d\u009f\2\u02df\u02e0"+
+ "\5\u011d\u008f\2\u02e0\u02e1\5\u0139\u009d\2\u02e1\\\3\2\2\2\u02e2\u02e3"+
+ "\5\u012f\u0098\2\u02e3\u02e4\5\u013d\u009f\2\u02e4\u02e5\5\u012b\u0096"+
+ "\2\u02e5\u02e6\5\u012b\u0096\2\u02e6^\3\2\2\2\u02e7\u02e8\5\u012f\u0098"+
+ "\2\u02e8\u02e9\5\u013d\u009f\2\u02e9\u02ea\5\u012b\u0096\2\u02ea\u02eb"+
+ "\5\u012b\u0096\2\u02eb\u02ec\5\u0139\u009d\2\u02ec`\3\2\2\2\u02ed\u02ee"+
+ "\5\u012f\u0098\2\u02ee\u02ef\5\u013d\u009f\2\u02ef\u02f0\5\u012d\u0097"+
+ "\2\u02f0\u02f1\5\u0117\u008c\2\u02f1\u02f2\5\u011d\u008f\2\u02f2\u02f3"+
+ "\5\u0137\u009c\2\u02f3b\3\2\2\2\u02f4\u02f5\5\u012f\u0098\2\u02f5\u02f6"+
+ "\5\u013d\u009f\2\u02f6\u02f7\5\u012d\u0097\2\u02f7\u02f8\5\u011d\u008f"+
+ "\2\u02f8\u02f9\5\u0137\u009c\2\u02f9\u02fa\5\u0125\u0093\2\u02fa\u02fb"+
+ "\5\u0119\u008d\2\u02fbd\3\2\2\2\u02fc\u02fd\5\u0131\u0099\2\u02fd\u02fe"+
+ "\5\u0119\u008d\2\u02fe\u02ff\5\u0119\u008d\2\u02ff\u0300\5\u013d\u009f"+
+ "\2\u0300\u0301\5\u0137\u009c\2\u0301\u0302\5\u0139\u009d\2\u0302f\3\2"+
+ "\2\2\u0303\u0304\5\u0131\u0099\2\u0304\u0305\5\u012f\u0098\2\u0305h\3"+
+ "\2\2\2\u0306\u0307\5\u0133\u009a\2\u0307\u0308\5\u0115\u008b\2\u0308\u0309"+
+ "\5\u0119\u008d\2\u0309\u030a\5\u0129\u0095\2\u030a\u030b\5\u011d\u008f"+
+ "\2\u030b\u030c\5\u011b\u008e\2\u030c\u030d\5\u00abV\2\u030d\u030e\5\u011b"+
+ "\u008e\2\u030e\u030f\5\u011d\u008f\2\u030f\u0310\5\u0119\u008d\2\u0310"+
+ "\u0311\5\u0125\u0093\2\u0311\u0312\5\u012d\u0097\2\u0312\u0313\5\u0115"+
+ "\u008b\2\u0313\u0314\5\u012b\u0096\2\u0314j\3\2\2\2\u0315\u0316\5\u0133"+
+ "\u009a\2\u0316\u0317\5\u0125\u0093\2\u0317\u0318\5\u0119\u008d\2\u0318"+
+ "l\3\2\2\2\u0319\u031a\5\u0133\u009a\2\u031a\u031b\5\u0125\u0093\2\u031b"+
+ "\u031c\5\u0119\u008d\2\u031c\u031d\5\u013b\u009e\2\u031d\u031e\5\u013d"+
+ "\u009f\2\u031e\u031f\5\u0137\u009c\2\u031f\u0320\5\u011d\u008f\2\u0320"+
+ "n\3\2\2\2\u0321\u0322\5\u0135\u009b\2\u0322\u0323\5\u013d\u009f\2\u0323"+
+ "\u0324\5\u0131\u0099\2\u0324\u0325\5\u013b\u009e\2\u0325\u0326\5\u011d"+
+ "\u008f\2\u0326p\3\2\2\2\u0327\u0328\5\u0135\u009b\2\u0328\u0329\5\u013d"+
+ "\u009f\2\u0329\u032a\5\u0131\u0099\2\u032a\u032b\5\u013b\u009e\2\u032b"+
+ "\u032c\5\u011d\u008f\2\u032c\u032d\5\u0139\u009d\2\u032dr\3\2\2\2\u032e"+
+ "\u032f\5\u0137\u009c\2\u032f\u0330\5\u011d\u008f\2\u0330\u0331\5\u011b"+
+ "\u008e\2\u0331\u0332\5\u011d\u008f\2\u0332\u0333\5\u011f\u0090\2\u0333"+
+ "\u0334\5\u0125\u0093\2\u0334\u0335\5\u012f\u0098\2\u0335\u0336\5\u011d"+
+ "\u008f\2\u0336\u0337\5\u0139\u009d\2\u0337t\3\2\2\2\u0338\u0339\5\u0137"+
+ "\u009c\2\u0339\u033a\5\u011d\u008f\2\u033a\u033b\5\u012f\u0098\2\u033b"+
+ "\u033c\5\u0115\u008b\2\u033c\u033d\5\u012d\u0097\2\u033d\u033e\5\u011d"+
+ "\u008f\2\u033e\u033f\5\u0139\u009d\2\u033fv\3\2\2\2\u0340\u0341\5\u0137"+
+ "\u009c\2\u0341\u0342\5\u0125\u0093\2\u0342\u0343\5\u0121\u0091\2\u0343"+
+ "\u0344\5\u0123\u0092\2\u0344\u0345\5\u013b\u009e\2\u0345x\3\2\2\2\u0346"+
+ "\u0347\5\u0139\u009d\2\u0347\u0348\5\u011d\u008f\2\u0348\u0349\5\u0133"+
+ "\u009a\2\u0349\u034a\5\u0115\u008b\2\u034a\u034b\5\u0137\u009c\2\u034b"+
+ "\u034c\5\u0115\u008b\2\u034c\u034d\5\u013b\u009e\2\u034d\u034e\5\u011d"+
+ "\u008f\2\u034ez\3\2\2\2\u034f\u0350\5\u0139\u009d\2\u0350\u0351\5\u0129"+
+ "\u0095\2\u0351\u0352\5\u0125\u0093\2\u0352\u0353\5\u0133\u009a\2\u0353"+
+ "\u0355\7\63\2\2\u0354\u0356\t\2\2\2\u0355\u0354\3\2\2\2\u0356\u0357\3"+
+ "\2\2\2\u0357\u0355\3\2\2\2\u0357\u0358\3\2\2\2\u0358\u0359\3\2\2\2\u0359"+
+ "\u035a\b>\2\2\u035a|\3\2\2\2\u035b\u035c\5\u0139\u009d\2\u035c\u035d\5"+
+ "\u0129\u0095\2\u035d\u035e\5\u0125\u0093\2\u035e\u035f\5\u0133\u009a\2"+
+ "\u035f\u0361\7\64\2\2\u0360\u0362\t\2\2\2\u0361\u0360\3\2\2\2\u0362\u0363"+
+ "\3\2\2\2\u0363\u0361\3\2\2\2\u0363\u0364\3\2\2\2\u0364\u0365\3\2\2\2\u0365"+
+ "\u0366\b?\2\2\u0366~\3\2\2\2\u0367\u0368\5\u0139\u009d\2\u0368\u0369\5"+
+ "\u0129\u0095\2\u0369\u036a\5\u0125\u0093\2\u036a\u036b\5\u0133\u009a\2"+
+ "\u036b\u036d\7\65\2\2\u036c\u036e\t\2\2\2\u036d\u036c\3\2\2\2\u036e\u036f"+
+ "\3\2\2\2\u036f\u036d\3\2\2\2\u036f\u0370\3\2\2\2\u0370\u0371\3\2\2\2\u0371"+
+ "\u0372\b@\2\2\u0372\u0080\3\2\2\2\u0373\u0374\5\u0139\u009d\2\u0374\u0375"+
+ "\5\u0125\u0093\2\u0375\u0376\5\u0121\u0091\2\u0376\u0377\5\u012f\u0098"+
+ "\2\u0377\u0082\3\2\2\2\u0378\u0379\5\u0139\u009d\2\u0379\u037a\5\u0133"+
+ "\u009a\2\u037a\u037b\5\u0115\u008b\2\u037b\u037c\5\u0119\u008d\2\u037c"+
+ "\u037d\5\u011d\u008f\2\u037d\u0084\3\2\2\2\u037e\u037f\5\u0139\u009d\2"+
+ "\u037f\u0380\5\u0133\u009a\2\u0380\u0381\5\u0115\u008b\2\u0381\u0382\5"+
+ "\u0119\u008d\2\u0382\u0383\5\u011d\u008f\2\u0383\u0384\5\u0139\u009d\2"+
+ "\u0384\u0086\3\2\2\2\u0385\u0386\5\u013b\u009e\2\u0386\u0387\5\u0123\u0092"+
+ "\2\u0387\u0388\5\u0137\u009c\2\u0388\u0389\5\u0131\u0099\2\u0389\u038a"+
+ "\5\u013d\u009f\2\u038a\u038b\5\u0121\u0091\2\u038b\u038c\5\u0123\u0092"+
+ "\2\u038c\u0088\3\2\2\2\u038d\u038e\5\u013b\u009e\2\u038e\u038f\5\u0123"+
+ "\u0092\2\u038f\u0390\5\u0137\u009c\2\u0390\u0391\5\u013d\u009f\2\u0391"+
+ "\u008a\3\2\2\2\u0392\u0393\5\u013b\u009e\2\u0393\u0394\5\u0125\u0093\2"+
+ "\u0394\u0395\5\u012d\u0097\2\u0395\u0396\5\u011d\u008f\2\u0396\u0397\5"+
+ "\u0139\u009d\2\u0397\u008c\3\2\2\2\u0398\u0399\5\u013b\u009e\2\u0399\u039a"+
+ "\5\u0131\u0099\2\u039a\u008e\3\2\2\2\u039b\u039c\5\u013b\u009e\2\u039c"+
+ "\u039d\5\u0137\u009c\2\u039d\u039e\5\u0115\u008b\2\u039e\u039f\5\u0125"+
+ "\u0093\2\u039f\u03a0\5\u012b\u0096\2\u03a0\u03a1\5\u0125\u0093\2\u03a1"+
+ "\u03a2\5\u012f\u0098\2\u03a2\u03a3\5\u0121\u0091\2\u03a3\u0090\3\2\2\2"+
+ "\u03a4\u03a5\5\u013b\u009e\2\u03a5\u03a6\5\u0137\u009c\2\u03a6\u03a7\5"+
+ "\u013d\u009f\2\u03a7\u03a8\5\u011d\u008f\2\u03a8\u0092\3\2\2\2\u03a9\u03aa"+
+ "\5\u013d\u009f\2\u03aa\u03ab\5\u0139\u009d\2\u03ab\u03ac\5\u0115\u008b"+
+ "\2\u03ac\u03ad\5\u0121\u0091\2\u03ad\u03ae\5\u011d\u008f\2\u03ae\u0094"+
+ "\3\2\2\2\u03af\u03b0\5\u013d\u009f\2\u03b0\u03b1\5\u0139\u009d\2\u03b1"+
+ "\u03b2\5\u0125\u0093\2\u03b2\u03b3\5\u012f\u0098\2\u03b3\u03b4\5\u0121"+
+ "\u0091\2\u03b4\u0096\3\2\2\2\u03b5\u03b6\5\u013f\u00a0\2\u03b6\u03b7\5"+
+ "\u0115\u008b\2\u03b7\u03b8\5\u012b\u0096\2\u03b8\u03b9\5\u013d\u009f\2"+
+ "\u03b9\u03ba\5\u011d\u008f\2\u03ba\u0098\3\2\2\2\u03bb\u03bc\5\u013f\u00a0"+
+ "\2\u03bc\u03bd\5\u0115\u008b\2\u03bd\u03be\5\u012b\u0096\2\u03be\u03bf"+
+ "\5\u013d\u009f\2\u03bf\u03c0\5\u011d\u008f\2\u03c0\u03c1\5\u0139\u009d"+
+ "\2\u03c1\u009a\3\2\2\2\u03c2\u03c3\5\u0141\u00a1\2\u03c3\u03c4\5\u0123"+
+ "\u0092\2\u03c4\u03c5\5\u011d\u008f\2\u03c5\u03c6\5\u012f\u0098\2\u03c6"+
+ "\u009c\3\2\2\2\u03c7\u03c8\5\u0147\u00a4\2\u03c8\u03c9\5\u011d\u008f\2"+
+ "\u03c9\u03ca\5\u0137\u009c\2\u03ca\u03cb\5\u0131\u0099\2\u03cb\u009e\3"+
+ "\2\2\2\u03cc\u03cd\5\u0147\u00a4\2\u03cd\u03ce\5\u011d\u008f\2\u03ce\u03cf"+
+ "\5\u0137\u009c\2\u03cf\u03d0\5\u0131\u0099\2\u03d0\u03d1\5\u0139\u009d"+
+ "\2\u03d1\u00a0\3\2\2\2\u03d2\u03d3\5\u0147\u00a4\2\u03d3\u03d4\5\u011d"+
+ "\u008f\2\u03d4\u03d5\5\u0137\u009c\2\u03d5\u03d6\5\u0131\u0099\2\u03d6"+
+ "\u03d7\5\u011d\u008f\2\u03d7\u03d8\5\u0139\u009d\2\u03d8\u00a2\3\2\2\2"+
+ "\u03d9\u03da\7$\2\2\u03da\u00a4\3\2\2\2\u03db\u03dc\7.\2\2\u03dc\u00a6"+
+ "\3\2\2\2\u03dd\u03de\7\60\2\2\u03de\u00a8\3\2\2\2\u03df\u03e0\7*\2\2\u03e0"+
+ "\u00aa\3\2\2\2\u03e1\u03e2\7/\2\2\u03e2\u00ac\3\2\2\2\u03e3\u03e4\7-\2"+
+ "\2\u03e4\u00ae\3\2\2\2\u03e5\u03e6\7+\2\2\u03e6\u00b0\3\2\2\2\u03e7\u03e8"+
+ "\7)\2\2\u03e8\u00b2\3\2\2\2\u03e9\u03ea\7\61\2\2\u03ea\u00b4\3\2\2\2\u03eb"+
+ "\u03ed\7\60\2\2\u03ec\u03ee\t\2\2\2\u03ed\u03ec\3\2\2\2\u03ee\u03ef\3"+
+ "\2\2\2\u03ef\u03ed\3\2\2\2\u03ef\u03f0\3\2\2\2\u03f0\u03f7\3\2\2\2\u03f1"+
+ "\u03f3\7\60\2\2\u03f2\u03f4\5\u0149\u00a5\2\u03f3\u03f2\3\2\2\2\u03f3"+
+ "\u03f4\3\2\2\2\u03f4\u03f5\3\2\2\2\u03f5\u03f7\7\2\2\3\u03f6\u03eb\3\2"+
+ "\2\2\u03f6\u03f1\3\2\2\2\u03f7\u00b6\3\2\2\2\u03f8\u03fc\7,\2\2\u03f9"+
+ "\u03fb\n\3\2\2\u03fa\u03f9\3\2\2\2\u03fb\u03fe\3\2\2\2\u03fc\u03fa\3\2"+
+ "\2\2\u03fc\u03fd\3\2\2\2\u03fd\u03ff\3\2\2\2\u03fe\u03fc\3\2\2\2\u03ff"+
+ "\u0400\b\\\2\2\u0400\u00b8\3\2\2\2\u0401\u0403\7;\2\2\u0402\u0401\3\2"+
+ "\2\2\u0403\u0404\3\2\2\2\u0404\u0402\3\2\2\2\u0404\u0405\3\2\2\2\u0405"+
+ "\u00ba\3\2\2\2\u0406\u0408\5\u0115\u008b\2\u0407\u0406\3\2\2\2\u0408\u0409"+
+ "\3\2\2\2\u0409\u0407\3\2\2\2\u0409\u040a\3\2\2\2\u040a\u00bc\3\2\2\2\u040b"+
+ "\u040d\5\u0133\u009a\2\u040c\u040b\3\2\2\2\u040d\u040e\3\2\2\2\u040e\u040c"+
+ "\3\2\2\2\u040e\u040f\3\2\2\2\u040f\u0413\3\2\2\2\u0410\u0412\7;\2\2\u0411"+
+ "\u0410\3\2\2\2\u0412\u0415\3\2\2\2\u0413\u0411\3\2\2\2\u0413\u0414\3\2"+
+ "\2\2\u0414\u00be\3\2\2\2\u0415\u0413\3\2\2\2\u0416\u0418\5\u0143\u00a2"+
+ "\2\u0417\u0416\3\2\2\2\u0418\u0419\3\2\2\2\u0419\u0417\3\2\2\2\u0419\u041a"+
+ "\3\2\2\2\u041a\u00c0\3\2\2\2\u041b\u041d\5\u012f\u0098\2\u041c\u041b\3"+
+ "\2\2\2\u041d\u041e\3\2\2\2\u041e\u041c\3\2\2\2\u041e\u041f\3\2\2\2\u041f"+
+ "\u00c2\3\2\2\2\u0420\u0422\5\u0139\u009d\2\u0421\u0423\7;\2\2\u0422\u0421"+
+ "\3\2\2\2\u0423\u0424\3\2\2\2\u0424\u0422\3\2\2\2\u0424\u0425\3\2\2\2\u0425"+
+ "\u0427\3\2\2\2\u0426\u0428\5\u013f\u00a0\2\u0427\u0426\3\2\2\2\u0427\u0428"+
+ "\3\2\2\2\u0428\u042c\3\2\2\2\u0429\u042b\5\u0133\u009a\2\u042a\u0429\3"+
+ "\2\2\2\u042b\u042e\3\2\2\2\u042c\u042a\3\2\2\2\u042c\u042d\3\2\2\2\u042d"+
+ "\u0432\3\2\2\2\u042e\u042c\3\2\2\2\u042f\u0431\7;\2\2\u0430\u042f\3\2"+
+ "\2\2\u0431\u0434\3\2\2\2\u0432\u0430\3\2\2\2\u0432\u0433\3\2\2\2\u0433"+
+ "\u044c\3\2\2\2\u0434\u0432\3\2\2\2\u0435\u0439\5\u0139\u009d\2\u0436\u0438"+
+ "\7;\2\2\u0437\u0436\3\2\2\2\u0438\u043b\3\2\2\2\u0439\u0437\3\2\2\2\u0439"+
+ "\u043a\3\2\2\2\u043a\u043d\3\2\2\2\u043b\u0439\3\2\2\2\u043c\u043e\5\u013f"+
+ "\u00a0\2\u043d\u043c\3\2\2\2\u043d\u043e\3\2\2\2\u043e\u0442\3\2\2\2\u043f"+
+ "\u0441\5\u0133\u009a\2\u0440\u043f\3\2\2\2\u0441\u0444\3\2\2\2\u0442\u0440"+
+ "\3\2\2\2\u0442\u0443\3\2\2\2\u0443\u0448\3\2\2\2\u0444\u0442\3\2\2\2\u0445"+
+ "\u0447\7;\2\2\u0446\u0445\3\2\2\2\u0447\u044a\3\2\2\2\u0448\u0446\3\2"+
+ "\2\2\u0448\u0449\3\2\2\2\u0449\u044c\3\2\2\2\u044a\u0448\3\2\2\2\u044b"+
+ "\u0420\3\2\2\2\u044b\u0435\3\2\2\2\u044c\u00c4\3\2\2\2\u044d\u044f\5\u0147"+
+ "\u00a4\2\u044e\u044d\3\2\2\2\u044f\u0450\3\2\2\2\u0450\u044e\3\2\2\2\u0450"+
+ "\u0451\3\2\2\2\u0451\u0455\3\2\2\2\u0452\u0454\7;\2\2\u0453\u0452\3\2"+
+ "\2\2\u0454\u0457\3\2\2\2\u0455\u0453\3\2\2\2\u0455\u0456\3\2\2\2\u0456"+
+ "\u045b\3\2\2\2\u0457\u0455\3\2\2\2\u0458\u045a\5\u0133\u009a\2\u0459\u0458"+
+ "\3\2\2\2\u045a\u045d\3\2\2\2\u045b\u0459\3\2\2\2\u045b\u045c\3\2\2\2\u045c"+
+ "\u0477\3\2\2\2\u045d\u045b\3\2\2\2\u045e\u0460\5\u0147\u00a4\2\u045f\u045e"+
+ "\3\2\2\2\u0460\u0461\3\2\2\2\u0461\u045f\3\2\2\2\u0461\u0462\3\2\2\2\u0462"+
+ "\u0466\3\2\2\2\u0463\u0465\7;\2\2\u0464\u0463\3\2\2\2\u0465\u0468\3\2"+
+ "\2\2\u0466\u0464\3\2\2\2\u0466\u0467\3\2\2\2\u0467\u0469\3\2\2\2\u0468"+
+ "\u0466\3\2\2\2\u0469\u046d\5\u013f\u00a0\2\u046a\u046c\5\u0133\u009a\2"+
+ "\u046b\u046a\3\2\2\2\u046c\u046f\3\2\2\2\u046d\u046b\3\2\2\2\u046d\u046e"+
+ "\3\2\2\2\u046e\u0473\3\2\2\2\u046f\u046d\3\2\2\2\u0470\u0472\7;\2\2\u0471"+
+ "\u0470\3\2\2\2\u0472\u0475\3\2\2\2\u0473\u0471\3\2\2\2\u0473\u0474\3\2"+
+ "\2\2\u0474\u0477\3\2\2\2\u0475\u0473\3\2\2\2\u0476\u044e\3\2\2\2\u0476"+
+ "\u045f\3\2\2\2\u0477\u00c6\3\2\2\2\u0478\u047a\5\u013f\u00a0\2\u0479\u0478"+
+ "\3\2\2\2\u047a\u047b\3\2\2\2\u047b\u0479\3\2\2\2\u047b\u047c\3\2\2\2\u047c"+
+ "\u047e\3\2\2\2\u047d\u047f\7;\2\2\u047e\u047d\3\2\2\2\u047f\u0480\3\2"+
+ "\2\2\u0480\u047e\3\2\2\2\u0480\u0481\3\2\2\2\u0481\u00c8\3\2\2\2\u0482"+
+ "\u0484\5\u0133\u009a\2\u0483\u0482\3\2\2\2\u0484\u0485\3\2\2\2\u0485\u0483"+
+ "\3\2\2\2\u0485\u0486\3\2\2\2\u0486\u048a\3\2\2\2\u0487\u0489\7;\2\2\u0488"+
+ "\u0487\3\2\2\2\u0489\u048c\3\2\2\2\u048a\u0488\3\2\2\2\u048a\u048b\3\2"+
+ "\2\2\u048b\u00ca\3\2\2\2\u048c\u048a\3\2\2\2\u048d\u0491\5\u0139\u009d"+
+ "\2\u048e\u0490\7;\2\2\u048f\u048e\3\2\2\2\u0490\u0493\3\2\2\2\u0491\u048f"+
+ "\3\2\2\2\u0491\u0492\3\2\2\2\u0492\u0495\3\2\2\2\u0493\u0491\3\2\2\2\u0494"+
+ "\u0496\5\u013f\u00a0\2\u0495\u0494\3\2\2\2\u0495\u0496\3\2\2\2\u0496\u049a"+
+ "\3\2\2\2\u0497\u0499\5\u0133\u009a\2\u0498\u0497\3\2\2\2\u0499\u049c\3"+
+ "\2\2\2\u049a\u0498\3\2\2\2\u049a\u049b\3\2\2\2\u049b\u04a0\3\2\2\2\u049c"+
+ "\u049a\3\2\2\2\u049d\u049f\7;\2\2\u049e\u049d\3\2\2\2\u049f\u04a2\3\2"+
+ "\2\2\u04a0\u049e\3\2\2\2\u04a0\u04a1\3\2\2\2\u04a1\u00cc\3\2\2\2\u04a2"+
+ "\u04a0\3\2\2\2\u04a3\u04a5\5\u0147\u00a4\2\u04a4\u04a3\3\2\2\2\u04a5\u04a6"+
+ "\3\2\2\2\u04a6\u04a4\3\2\2\2\u04a6\u04a7\3\2\2\2\u04a7\u04ab\3\2\2\2\u04a8"+
+ "\u04aa\7;\2\2\u04a9\u04a8\3\2\2\2\u04aa\u04ad\3\2\2\2\u04ab\u04a9\3\2"+
+ "\2\2\u04ab\u04ac\3\2\2\2\u04ac\u04b1\3\2\2\2\u04ad\u04ab\3\2\2\2\u04ae"+
+ "\u04b0\5\u0133\u009a\2\u04af\u04ae\3\2\2\2\u04b0\u04b3\3\2\2\2\u04b1\u04af"+
+ "\3\2\2\2\u04b1\u04b2\3\2\2\2\u04b2\u04cd\3\2\2\2\u04b3\u04b1\3\2\2\2\u04b4"+
+ "\u04b6\5\u0147\u00a4\2\u04b5\u04b4\3\2\2\2\u04b6\u04b7\3\2\2\2\u04b7\u04b5"+
+ "\3\2\2\2\u04b7\u04b8\3\2\2\2\u04b8\u04bc\3\2\2\2\u04b9\u04bb\7;\2\2\u04ba"+
+ "\u04b9\3\2\2\2\u04bb\u04be\3\2\2\2\u04bc\u04ba\3\2\2\2\u04bc\u04bd\3\2"+
+ "\2\2\u04bd\u04bf\3\2\2\2\u04be\u04bc\3\2\2\2\u04bf\u04c3\5\u013f\u00a0"+
+ "\2\u04c0\u04c2\5\u0133\u009a\2\u04c1\u04c0\3\2\2\2\u04c2\u04c5\3\2\2\2"+
+ "\u04c3\u04c1\3\2\2\2\u04c3\u04c4\3\2\2\2\u04c4\u04c9\3\2\2\2\u04c5\u04c3"+
+ "\3\2\2\2\u04c6\u04c8\7;\2\2\u04c7\u04c6\3\2\2\2\u04c8\u04cb\3\2\2\2\u04c9"+
+ "\u04c7\3\2\2\2\u04c9\u04ca\3\2\2\2\u04ca\u04cd\3\2\2\2\u04cb\u04c9\3\2"+
+ "\2\2\u04cc\u04a4\3\2\2\2\u04cc\u04b5\3\2\2\2\u04cd\u00ce\3\2\2\2\u04ce"+
+ "\u04d0\5\u013f\u00a0\2\u04cf\u04ce\3\2\2\2\u04d0\u04d1\3\2\2\2\u04d1\u04cf"+
+ "\3\2\2\2\u04d1\u04d2\3\2\2\2\u04d2\u04d6\3\2\2\2\u04d3\u04d5\7;\2\2\u04d4"+
+ "\u04d3\3\2\2\2\u04d5\u04d8\3\2\2\2\u04d6\u04d4\3\2\2\2\u04d6\u04d7\3\2"+
+ "\2\2\u04d7\u00d0\3\2\2\2\u04d8\u04d6\3\2\2\2\u04d9\u04db\5\u0139\u009d"+
+ "\2\u04da\u04d9\3\2\2\2\u04da\u04db\3\2\2\2\u04db\u04dd\3\2\2\2\u04dc\u04de"+
+ "\5\u00e1q\2\u04dd\u04dc\3\2\2\2\u04dd\u04de\3\2\2\2\u04de\u04e1\3\2\2"+
+ "\2\u04df\u04e2\5\u00a7T\2\u04e0\u04e2\5\u00a5S\2\u04e1\u04df\3\2\2\2\u04e1"+
+ "\u04e0\3\2\2\2\u04e2\u04e3\3\2\2\2\u04e3\u04e4\5\u00e1q\2\u04e4\u00d2"+
+ "\3\2\2\2\u04e5\u04e7\5\u0139\u009d\2\u04e6\u04e5\3\2\2\2\u04e6\u04e7\3"+
+ "\2\2\2\u04e7\u04e9\3\2\2\2\u04e8\u04ea\5\u00e1q\2\u04e9\u04e8\3\2\2\2"+
+ "\u04e9\u04ea\3\2\2\2\u04ea\u04eb\3\2\2\2\u04eb\u04f4\5\u013f\u00a0\2\u04ec"+
+ "\u04ed\5\u00e9u\2\u04ed\u04ee\5\u00e1q\2\u04ee\u04f0\3\2\2\2\u04ef\u04ec"+
+ "\3\2\2\2\u04ef\u04f0\3\2\2\2\u04f0\u04f5\3\2\2\2\u04f1\u04f3\5\u00e1q"+
+ "\2\u04f2\u04f1\3\2\2\2\u04f2\u04f3\3\2\2\2\u04f3\u04f5\3\2\2\2\u04f4\u04ef"+
+ "\3\2\2\2\u04f4\u04f2\3\2\2\2\u04f5\u00d4\3\2\2\2\u04f6\u04f8\5\u0139\u009d"+
+ "\2\u04f7\u04f6\3\2\2\2\u04f7\u04f8\3\2\2\2\u04f8\u04f9\3\2\2\2\u04f9\u04fb"+
+ "\5\u00e1q\2\u04fa\u04fc\5\u00e9u\2\u04fb\u04fa\3\2\2\2\u04fb\u04fc\3\2"+
+ "\2\2\u04fc\u04fd\3\2\2\2\u04fd\u04fe\5\u013f\u00a0\2\u04fe\u00d6\3\2\2"+
+ "\2\u04ff\u0501\5\u0139\u009d\2\u0500\u04ff\3\2\2\2\u0500\u0501\3\2\2\2"+
+ "\u0501\u0502\3\2\2\2\u0502\u0504\5\u00e1q\2\u0503\u0505\5\u00e9u\2\u0504"+
+ "\u0503\3\2\2\2\u0504\u0505\3\2\2\2\u0505\u00d8\3\2\2\2\u0506\u0508\5\u0139"+
+ "\u009d\2\u0507\u0506\3\2\2\2\u0507\u0508\3\2\2\2\u0508\u0509\3\2\2\2\u0509"+
+ "\u050a\5\u00e9u\2\u050a\u050b\5\u00e1q\2\u050b\u00da\3\2\2\2\u050c\u050e"+
+ "\5\u00f5{\2\u050d\u050f\5\u00e1q\2\u050e\u050d\3\2\2\2\u050e\u050f\3\2"+
+ "\2\2\u050f\u0512\3\2\2\2\u0510\u0513\5\u00a7T\2\u0511\u0513\5\u00a5S\2"+
+ "\u0512\u0510\3\2\2\2\u0512\u0511\3\2\2\2\u0513\u0519\3\2\2\2\u0514\u0516"+
+ "\5\u00e1q\2\u0515\u0517\5\u00f5{\2\u0516\u0515\3\2\2\2\u0516\u0517\3\2"+
+ "\2\2\u0517\u051a\3\2\2\2\u0518\u051a\5\u00f5{\2\u0519\u0514\3\2\2\2\u0519"+
+ "\u0518\3\2\2\2\u051a\u00dc\3\2\2\2\u051b\u051d\5\u00f5{\2\u051c\u051e"+
+ "\5\u00e1q\2\u051d\u051c\3\2\2\2\u051d\u051e\3\2\2\2\u051e\u051f\3\2\2"+
+ "\2\u051f\u052d\5\u013f\u00a0\2\u0520\u0523\5\u00e9u\2\u0521\u0524\5\u00e1"+
+ "q\2\u0522\u0524\5\u00f5{\2\u0523\u0521\3\2\2\2\u0523\u0522\3\2\2\2\u0524"+
+ "\u0526\3\2\2\2\u0525\u0520\3\2\2\2\u0525\u0526\3\2\2\2\u0526\u052e\3\2"+
+ "\2\2\u0527\u0529\5\u00e1q\2\u0528\u0527\3\2\2\2\u0528\u0529\3\2\2\2\u0529"+
+ "\u052b\3\2\2\2\u052a\u052c\5\u00f5{\2\u052b\u052a\3\2\2\2\u052b\u052c"+
+ "\3\2\2\2\u052c\u052e\3\2\2\2\u052d\u0525\3\2\2\2\u052d\u0528\3\2\2\2\u052e"+
+ "\u00de\3\2\2\2\u052f\u0531\5\u00f5{\2\u0530\u0532\5\u00e1q\2\u0531\u0530"+
+ "\3\2\2\2\u0531\u0532\3\2\2\2\u0532\u0534\3\2\2\2\u0533\u0535\5\u00e9u"+
+ "\2\u0534\u0533\3\2\2\2\u0534\u0535\3\2\2\2\u0535\u00e0\3\2\2\2\u0536\u0538"+
+ "\5\u00e3r\2\u0537\u0536\3\2\2\2\u0538\u0539\3\2\2\2\u0539\u0537\3\2\2"+
+ "\2\u0539\u053a\3\2\2\2\u053a\u00e2\3\2\2\2\u053b\u053c\7;\2\2\u053c\u053d"+
+ "\5\u00a9U\2\u053d\u053e\5\u010b\u0086\2\u053e\u053f\5\u00afX\2\u053f\u0546"+
+ "\3\2\2\2\u0540\u0542\7;\2\2\u0541\u0540\3\2\2\2\u0542\u0543\3\2\2\2\u0543"+
+ "\u0541\3\2\2\2\u0543\u0544\3\2\2\2\u0544\u0546\3\2\2\2\u0545\u053b\3\2"+
+ "\2\2\u0545\u0541\3\2\2\2\u0546\u00e4\3\2\2\2\u0547\u0549\5\u00e7t\2\u0548"+
+ "\u0547\3\2\2\2\u0549\u054a\3\2\2\2\u054a\u0548\3\2\2\2\u054a\u054b\3\2"+
+ "\2\2\u054b\u00e6\3\2\2\2\u054c\u054d\5\u0115\u008b\2\u054d\u054e\5\u00a9"+
+ "U\2\u054e\u054f\5\u010b\u0086\2\u054f\u0550\5\u00afX\2\u0550\u0557\3\2"+
+ "\2\2\u0551\u0553\5\u0115\u008b\2\u0552\u0551\3\2\2\2\u0553\u0554\3\2\2"+
+ "\2\u0554\u0552\3\2\2\2\u0554\u0555\3\2\2\2\u0555\u0557\3\2\2\2\u0556\u054c"+
+ "\3\2\2\2\u0556\u0552\3\2\2\2\u0557\u00e8\3\2\2\2\u0558\u055a\5\u00ebv"+
+ "\2\u0559\u0558\3\2\2\2\u055a\u055b\3\2\2\2\u055b\u0559\3\2\2\2\u055b\u055c"+
+ "\3\2\2\2\u055c\u00ea\3\2\2\2\u055d\u055e\5\u0133\u009a\2\u055e\u055f\5"+
+ "\u00a9U\2\u055f\u0560\5\u010b\u0086\2\u0560\u0561\5\u00afX\2\u0561\u0568"+
+ "\3\2\2\2\u0562\u0564\5\u0133\u009a\2\u0563\u0562\3\2\2\2\u0564\u0565\3"+
+ "\2\2\2\u0565\u0563\3\2\2\2\u0565\u0566\3\2\2\2\u0566\u0568\3\2\2\2\u0567"+
+ "\u055d\3\2\2\2\u0567\u0563\3\2\2\2\u0568\u00ec\3\2\2\2\u0569\u056b\5\u00ef"+
+ "x\2\u056a\u0569\3\2\2\2\u056b\u056c\3\2\2\2\u056c\u056a\3\2\2\2\u056c"+
+ "\u056d\3\2\2\2\u056d\u00ee\3\2\2\2\u056e\u056f\5\u0143\u00a2\2\u056f\u0570"+
+ "\5\u00a9U\2\u0570\u0571\5\u010b\u0086\2\u0571\u0572\5\u00afX\2\u0572\u0579"+
+ "\3\2\2\2\u0573\u0575\5\u0143\u00a2\2\u0574\u0573\3\2\2\2\u0575\u0576\3"+
+ "\2\2\2\u0576\u0574\3\2\2\2\u0576\u0577\3\2\2\2\u0577\u0579\3\2\2\2\u0578"+
+ "\u056e\3\2\2\2\u0578\u0574\3\2\2\2\u0579\u00f0\3\2\2\2\u057a\u057c\5\u00f3"+
+ "z\2\u057b\u057a\3\2\2\2\u057c\u057d\3\2\2\2\u057d\u057b\3\2\2\2\u057d"+
+ "\u057e\3\2\2\2\u057e\u00f2\3\2\2\2\u057f\u0580\5\u012f\u0098\2\u0580\u0581"+
+ "\5\u00a9U\2\u0581\u0582\5\u010b\u0086\2\u0582\u0583\5\u00afX\2\u0583\u058a"+
+ "\3\2\2\2\u0584\u0586\5\u012f\u0098\2\u0585\u0584\3\2\2\2\u0586\u0587\3"+
+ "\2\2\2\u0587\u0585\3\2\2\2\u0587\u0588\3\2\2\2\u0588\u058a\3\2\2\2\u0589"+
+ "\u057f\3\2\2\2\u0589\u0585\3\2\2\2\u058a\u00f4\3\2\2\2\u058b\u058d\5\u00f7"+
+ "|\2\u058c\u058b\3\2\2\2\u058d\u058e\3\2\2\2\u058e\u058c\3\2\2\2\u058e"+
+ "\u058f\3\2\2\2\u058f\u00f6\3\2\2\2\u0590\u0591\5\u0147\u00a4\2\u0591\u0592"+
+ "\5\u00a9U\2\u0592\u0593\5\u010b\u0086\2\u0593\u0594\5\u00afX\2\u0594\u059b"+
+ "\3\2\2\2\u0595\u0597\5\u0147\u00a4\2\u0596\u0595\3\2\2\2\u0597\u0598\3"+
+ "\2\2\2\u0598\u0596\3\2\2\2\u0598\u0599\3\2\2\2\u0599\u059b\3\2\2\2\u059a"+
+ "\u0590\3\2\2\2\u059a\u0596\3\2\2\2\u059b\u00f8\3\2\2\2\u059c\u059f\5\u00fd"+
+ "\177\2\u059d\u059f\5\u00fb~\2\u059e\u059c\3\2\2\2\u059e\u059d\3\2\2\2"+
+ "\u059f\u00fa\3\2\2\2\u05a0\u05a1\5\u0143\u00a2\2\u05a1\u05a3\7$\2\2\u05a2"+
+ "\u05a4\t\4\2\2\u05a3\u05a2\3\2\2\2\u05a4\u05a5\3\2\2\2\u05a5\u05a3\3\2"+
+ "\2\2\u05a5\u05a6\3\2\2\2\u05a6\u05a7\3\2\2\2\u05a7\u05a8\7$\2\2\u05a8"+
+ "\u05c5\3\2\2\2\u05a9\u05aa\5\u0143\u00a2\2\u05aa\u05ac\7)\2\2\u05ab\u05ad"+
+ "\t\4\2\2\u05ac\u05ab\3\2\2\2\u05ad\u05ae\3\2\2\2\u05ae\u05ac\3\2\2\2\u05ae"+
+ "\u05af\3\2\2\2\u05af\u05b0\3\2\2\2\u05b0\u05b1\7)\2\2\u05b1\u05c5\3\2"+
+ "\2\2\u05b2\u05b3\5\u012f\u0098\2\u05b3\u05b5\7$\2\2\u05b4\u05b6\t\4\2"+
+ "\2\u05b5\u05b4\3\2\2\2\u05b6\u05b7\3\2\2\2\u05b7\u05b5\3\2\2\2\u05b7\u05b8"+
+ "\3\2\2\2\u05b8\u05b9\3\2\2\2\u05b9\u05ba\7$\2\2\u05ba\u05c5\3\2\2\2\u05bb"+
+ "\u05bc\5\u012f\u0098\2\u05bc\u05be\7)\2\2\u05bd\u05bf\t\4\2\2\u05be\u05bd"+
+ "\3\2\2\2\u05bf\u05c0\3\2\2\2\u05c0\u05be\3\2\2\2\u05c0\u05c1\3\2\2\2\u05c1"+
+ "\u05c2\3\2\2\2\u05c2\u05c3\7)\2\2\u05c3\u05c5\3\2\2\2\u05c4\u05a0\3\2"+
+ "\2\2\u05c4\u05a9\3\2\2\2\u05c4\u05b2\3\2\2\2\u05c4\u05bb\3\2\2\2\u05c5"+
+ "\u00fc\3\2\2\2\u05c6\u05cd\7$\2\2\u05c7\u05cc\n\5\2\2\u05c8\u05c9\7$\2"+
+ "\2\u05c9\u05cc\7$\2\2\u05ca\u05cc\7)\2\2\u05cb\u05c7\3\2\2\2\u05cb\u05c8"+
+ "\3\2\2\2\u05cb\u05ca\3\2\2\2\u05cc\u05cf\3\2\2\2\u05cd\u05cb\3\2\2\2\u05cd"+
+ "\u05ce\3\2\2\2\u05ce\u05d0\3\2\2\2\u05cf\u05cd\3\2\2\2\u05d0\u05dd\7$"+
+ "\2\2\u05d1\u05d8\7)\2\2\u05d2\u05d7\n\6\2\2\u05d3\u05d4\7)\2\2\u05d4\u05d7"+
+ "\7)\2\2\u05d5\u05d7\7$\2\2\u05d6\u05d2\3\2\2\2\u05d6\u05d3\3\2\2\2\u05d6"+
+ "\u05d5\3\2\2\2\u05d7\u05da\3\2\2\2\u05d8\u05d6\3\2\2\2\u05d8\u05d9\3\2"+
+ "\2\2\u05d9\u05db\3\2\2\2\u05da\u05d8\3\2\2\2\u05db\u05dd\7)\2\2\u05dc"+
+ "\u05c6\3\2\2\2\u05dc\u05d1\3\2\2\2\u05dd\u00fe\3\2\2\2\u05de\u05df\7\62"+
+ "\2\2\u05df\u05e0\7\63\2\2\u05e0\u0100\3\2\2\2\u05e1\u05e2\7\62\2\2\u05e2"+
+ "\u05e6\t\7\2\2\u05e3\u05e4\t\b\2\2\u05e4\u05e6\t\t\2\2\u05e5\u05e1\3\2"+
+ "\2\2\u05e5\u05e3\3\2\2\2\u05e6\u0102\3\2\2\2\u05e7\u05e8\78\2\2\u05e8"+
+ "\u05e9\78\2\2\u05e9\u0104\3\2\2\2\u05ea\u05eb\79\2\2\u05eb\u05ec\79\2"+
+ "\2\u05ec\u0106\3\2\2\2\u05ed\u05ee\7:\2\2\u05ee\u05ef\7:\2\2\u05ef\u0108"+
+ "\3\2\2\2\u05f0\u05f2\t\t\2\2\u05f1\u05f0\3\2\2\2\u05f2\u05f3\3\2\2\2\u05f3"+
+ "\u05f1\3\2\2\2\u05f3\u05f4\3\2\2\2\u05f4\u010a\3\2\2\2\u05f5\u05f7\7\62"+
+ "\2\2\u05f6\u05f5\3\2\2\2\u05f7\u05fa\3\2\2\2\u05f8\u05f6\3\2\2\2\u05f8"+
+ "\u05f9\3\2\2\2\u05f9\u05fb\3\2\2\2\u05fa\u05f8\3\2\2\2\u05fb\u05ff\t\n"+
+ "\2\2\u05fc\u05fe\t\t\2\2\u05fd\u05fc\3\2\2\2\u05fe\u0601\3\2\2\2\u05ff"+
+ "\u05fd\3\2\2\2\u05ff\u0600\3\2\2\2\u0600\u010c\3\2\2\2\u0601\u05ff\3\2"+
+ "\2\2\u0602\u0604\t\t\2\2\u0603\u0602\3\2\2\2\u0604\u0607\3\2\2\2\u0605"+
+ "\u0603\3\2\2\2\u0605\u0606\3\2\2\2\u0606\u0609\3\2\2\2\u0607\u0605\3\2"+
+ "\2\2\u0608\u060a\5\u00a7T\2\u0609\u0608\3\2\2\2\u0609\u060a\3\2\2\2\u060a"+
+ "\u060c\3\2\2\2\u060b\u060d\t\t\2\2\u060c\u060b\3\2\2\2\u060d\u060e\3\2"+
+ "\2\2\u060e\u060c\3\2\2\2\u060e\u060f\3\2\2\2\u060f\u0619\3\2\2\2\u0610"+
+ "\u0612\5\u011d\u008f\2\u0611\u0613\5\u010f\u0088\2\u0612\u0611\3\2\2\2"+
+ "\u0612\u0613\3\2\2\2\u0613\u0615\3\2\2\2\u0614\u0616\t\t\2\2\u0615\u0614"+
+ "\3\2\2\2\u0616\u0617\3\2\2\2\u0617\u0615\3\2\2\2\u0617\u0618\3\2\2\2\u0618"+
+ "\u061a\3\2\2\2\u0619\u0610\3\2\2\2\u0619\u061a\3\2\2\2\u061a\u010e\3\2"+
+ "\2\2\u061b\u061e\5\u00adW\2\u061c\u061e\5\u00abV\2\u061d\u061b\3\2\2\2"+
+ "\u061d\u061c\3\2\2\2\u061e\u0110\3\2\2\2\u061f\u0620\7)\2\2\u0620\u0621"+
+ "\5\u0113\u008a\2\u0621\u062d\7)\2\2\u0622\u0624\t\13\2\2\u0623\u0622\3"+
+ "\2\2\2\u0624\u0627\3\2\2\2\u0625\u0623\3\2\2\2\u0625\u0626\3\2\2\2\u0626"+
+ "\u0629\3\2\2\2\u0627\u0625\3\2\2\2\u0628\u062a\t\f\2\2\u0629\u0628\3\2"+
+ "\2\2\u062a\u062b\3\2\2\2\u062b\u0629\3\2\2\2\u062b\u062c\3\2\2\2\u062c"+
+ "\u062e\3\2\2\2\u062d\u0625\3\2\2\2\u062e\u062f\3\2\2\2\u062f\u062d\3\2"+
+ "\2\2\u062f\u0630\3\2\2\2\u0630\u0112\3\2\2\2\u0631\u0633\t\r\2\2\u0632"+
+ "\u0631\3\2\2\2\u0633\u0634\3\2\2\2\u0634\u0632\3\2\2\2\u0634\u0635\3\2"+
+ "\2\2\u0635\u0639\3\2\2\2\u0636\u0638\t\16\2\2\u0637\u0636\3\2\2\2\u0638"+
+ "\u063b\3\2\2\2\u0639\u0637\3\2\2\2\u0639\u063a\3\2\2\2\u063a\u0114\3\2"+
+ "\2\2\u063b\u0639\3\2\2\2\u063c\u063d\t\17\2\2\u063d\u0116\3\2\2\2\u063e"+
+ "\u063f\t\20\2\2\u063f\u0118\3\2\2\2\u0640\u0641\t\21\2\2\u0641\u011a\3"+
+ "\2\2\2\u0642\u0643\t\22\2\2\u0643\u011c\3\2\2\2\u0644\u0645\t\23\2\2\u0645"+
+ "\u011e\3\2\2\2\u0646\u0647\t\24\2\2\u0647\u0120\3\2\2\2\u0648\u0649\t"+
+ "\25\2\2\u0649\u0122\3\2\2\2\u064a\u064b\t\26\2\2\u064b\u0124\3\2\2\2\u064c"+
+ "\u064d\t\27\2\2\u064d\u0126\3\2\2\2\u064e\u064f\t\30\2\2\u064f\u0128\3"+
+ "\2\2\2\u0650\u0651\t\31\2\2\u0651\u012a\3\2\2\2\u0652\u0653\t\32\2\2\u0653"+
+ "\u012c\3\2\2\2\u0654\u0655\t\33\2\2\u0655\u012e\3\2\2\2\u0656\u0657\t"+
+ "\34\2\2\u0657\u0130\3\2\2\2\u0658\u0659\t\35\2\2\u0659\u0132\3\2\2\2\u065a"+
+ "\u065b\t\36\2\2\u065b\u0134\3\2\2\2\u065c\u065d\t\37\2\2\u065d\u0136\3"+
+ "\2\2\2\u065e\u065f\t \2\2\u065f\u0138\3\2\2\2\u0660\u0661\t!\2\2\u0661"+
+ "\u013a\3\2\2\2\u0662\u0663\t\"\2\2\u0663\u013c\3\2\2\2\u0664\u0665\t#"+
+ "\2\2\u0665\u013e\3\2\2\2\u0666\u0667\t$\2\2\u0667\u0140\3\2\2\2\u0668"+
+ "\u0669\t%\2\2\u0669\u0142\3\2\2\2\u066a\u066b\t&\2\2\u066b\u0144\3\2\2"+
+ "\2\u066c\u066d\t\'\2\2\u066d\u0146\3\2\2\2\u066e\u066f\t(\2\2\u066f\u0148"+
+ "\3\2\2\2\u0670\u0671\7\34\2\2\u0671\u014a\3\2\2\2\u0672\u0674\t)\2\2\u0673"+
+ "\u0672\3\2\2\2\u0674\u0675\3\2\2\2\u0675\u0673\3\2\2\2\u0675\u0676\3\2"+
+ "\2\2\u0676\u0677\3\2\2\2\u0677\u0678\b\u00a6\2\2\u0678\u014c\3\2\2\2{"+
+ "\2\u014f\u0357\u0363\u036f\u03ef\u03f3\u03f6\u03fc\u0404\u0409\u040e\u0413"+
+ "\u0419\u041e\u0424\u0427\u042c\u0432\u0439\u043d\u0442\u0448\u044b\u0450"+
+ "\u0455\u045b\u0461\u0466\u046d\u0473\u0476\u047b\u0480\u0485\u048a\u0491"+
+ "\u0495\u049a\u04a0\u04a6\u04ab\u04b1\u04b7\u04bc\u04c3\u04c9\u04cc\u04d1"+
+ "\u04d6\u04da\u04dd\u04e1\u04e6\u04e9\u04ef\u04f2\u04f4\u04f7\u04fb\u0500"+
+ "\u0504\u0507\u050e\u0512\u0516\u0519\u051d\u0523\u0525\u0528\u052b\u052d"+
+ "\u0531\u0534\u0539\u0543\u0545\u054a\u0554\u0556\u055b\u0565\u0567\u056c"+
+ "\u0576\u0578\u057d\u0587\u0589\u058e\u0598\u059a\u059e\u05a5\u05ae\u05b7"+
+ "\u05c0\u05c4\u05cb\u05cd\u05d6\u05d8\u05dc\u05e5\u05f3\u05f8\u05ff\u0605"+
+ "\u0609\u060e\u0612\u0617\u0619\u061d\u0625\u062b\u062f\u0634\u0639\u0675"+
+ "\3\b\2\2";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
@@ -890,4 +898,4 @@ public copybookLexer(CharStream input) {
_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
}
}
-}
\ No newline at end of file
+}
diff --git a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParser.g4 b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParser.g4
index 2665dba2..61a677b8 100644
--- a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParser.g4
+++ b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParser.g4
@@ -161,6 +161,7 @@ precision9:
| V_S #precision9Vs
| PRECISION_9_EXPLICIT_DOT #precision9ExplicitDot
| PRECISION_9_DECIMAL_SCALED #precision9DecimalScaled
+ | PRECISION_9_DECIMAL_WITH_V #precision9DecimalScaledWithV
| PRECISION_9_SCALED #precision9Scaled
| PRECISION_9_SCALED_LEAD #precision9ScaledLead
| PRECISION_Z_EXPLICIT_DOT #precisionZExplicitDot
diff --git a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParser.java b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParser.java
index bcd61a61..e03e6867 100644
--- a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParser.java
+++ b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParser.java
@@ -47,15 +47,15 @@ public class copybookParser extends Parser {
PLUSCHAR=86, RPARENCHAR=87, SINGLEQUOTE=88, SLASHCHAR=89, TERMINAL=90,
COMMENT=91, NINES=92, A_S=93, P_S=94, X_S=95, N_S=96, S_S=97, Z_S=98,
V_S=99, P_NS=100, S_NS=101, Z_NS=102, V_NS=103, PRECISION_9_EXPLICIT_DOT=104,
- PRECISION_9_DECIMAL_SCALED=105, PRECISION_9_SCALED=106, PRECISION_9_SCALED_LEAD=107,
- PRECISION_Z_EXPLICIT_DOT=108, PRECISION_Z_DECIMAL_SCALED=109, PRECISION_Z_SCALED=110,
- LENGTH_TYPE_9=111, LENGTH_TYPE_9_1=112, LENGTH_TYPE_A=113, LENGTH_TYPE_A_1=114,
- LENGTH_TYPE_P=115, LENGTH_TYPE_P_1=116, LENGTH_TYPE_X=117, LENGTH_TYPE_X_1=118,
- LENGTH_TYPE_N=119, LENGTH_TYPE_N_1=120, LENGTH_TYPE_Z=121, LENGTH_TYPE_Z_1=122,
- STRINGLITERAL=123, LEVEL_ROOT=124, LEVEL_REGULAR=125, LEVEL_NUMBER_66=126,
- LEVEL_NUMBER_77=127, LEVEL_NUMBER_88=128, INTEGERLITERAL=129, POSITIVELITERAL=130,
- NUMERICLITERAL=131, SINGLE_QUOTED_IDENTIFIER=132, IDENTIFIER=133, CONTROL_Z=134,
- WS=135;
+ PRECISION_9_DECIMAL_SCALED=105, PRECISION_9_DECIMAL_WITH_V=106, PRECISION_9_SCALED=107,
+ PRECISION_9_SCALED_LEAD=108, PRECISION_Z_EXPLICIT_DOT=109, PRECISION_Z_DECIMAL_SCALED=110,
+ PRECISION_Z_SCALED=111, LENGTH_TYPE_9=112, LENGTH_TYPE_9_1=113, LENGTH_TYPE_A=114,
+ LENGTH_TYPE_A_1=115, LENGTH_TYPE_P=116, LENGTH_TYPE_P_1=117, LENGTH_TYPE_X=118,
+ LENGTH_TYPE_X_1=119, LENGTH_TYPE_N=120, LENGTH_TYPE_N_1=121, LENGTH_TYPE_Z=122,
+ LENGTH_TYPE_Z_1=123, STRINGLITERAL=124, LEVEL_ROOT=125, LEVEL_REGULAR=126,
+ LEVEL_NUMBER_66=127, LEVEL_NUMBER_77=128, LEVEL_NUMBER_88=129, INTEGERLITERAL=130,
+ POSITIVELITERAL=131, NUMERICLITERAL=132, SINGLE_QUOTED_IDENTIFIER=133,
+ IDENTIFIER=134, CONTROL_Z=135, WS=136;
public static final int
RULE_main = 0, RULE_literal = 1, RULE_numericLiteral = 2, RULE_integerLiteral = 3,
RULE_booleanLiteral = 4, RULE_identifier = 5, RULE_thru = 6, RULE_values = 7,
@@ -94,8 +94,8 @@ private static String[] makeLiteralNames() {
"'.'", "'('", "'-'", "'+'", "')'", "'''", "'/'", null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, null, null, "'01'", null, "'66'", "'77'", "'88'",
- null, null, null, null, null, "'\u001A'"
+ null, null, null, null, null, null, null, "'01'", null, "'66'", "'77'",
+ "'88'", null, null, null, null, null, "'\u001A'"
};
}
private static final String[] _LITERAL_NAMES = makeLiteralNames();
@@ -116,14 +116,15 @@ private static String[] makeSymbolicNames() {
"DOT", "LPARENCHAR", "MINUSCHAR", "PLUSCHAR", "RPARENCHAR", "SINGLEQUOTE",
"SLASHCHAR", "TERMINAL", "COMMENT", "NINES", "A_S", "P_S", "X_S", "N_S",
"S_S", "Z_S", "V_S", "P_NS", "S_NS", "Z_NS", "V_NS", "PRECISION_9_EXPLICIT_DOT",
- "PRECISION_9_DECIMAL_SCALED", "PRECISION_9_SCALED", "PRECISION_9_SCALED_LEAD",
- "PRECISION_Z_EXPLICIT_DOT", "PRECISION_Z_DECIMAL_SCALED", "PRECISION_Z_SCALED",
- "LENGTH_TYPE_9", "LENGTH_TYPE_9_1", "LENGTH_TYPE_A", "LENGTH_TYPE_A_1",
- "LENGTH_TYPE_P", "LENGTH_TYPE_P_1", "LENGTH_TYPE_X", "LENGTH_TYPE_X_1",
- "LENGTH_TYPE_N", "LENGTH_TYPE_N_1", "LENGTH_TYPE_Z", "LENGTH_TYPE_Z_1",
- "STRINGLITERAL", "LEVEL_ROOT", "LEVEL_REGULAR", "LEVEL_NUMBER_66", "LEVEL_NUMBER_77",
- "LEVEL_NUMBER_88", "INTEGERLITERAL", "POSITIVELITERAL", "NUMERICLITERAL",
- "SINGLE_QUOTED_IDENTIFIER", "IDENTIFIER", "CONTROL_Z", "WS"
+ "PRECISION_9_DECIMAL_SCALED", "PRECISION_9_DECIMAL_WITH_V", "PRECISION_9_SCALED",
+ "PRECISION_9_SCALED_LEAD", "PRECISION_Z_EXPLICIT_DOT", "PRECISION_Z_DECIMAL_SCALED",
+ "PRECISION_Z_SCALED", "LENGTH_TYPE_9", "LENGTH_TYPE_9_1", "LENGTH_TYPE_A",
+ "LENGTH_TYPE_A_1", "LENGTH_TYPE_P", "LENGTH_TYPE_P_1", "LENGTH_TYPE_X",
+ "LENGTH_TYPE_X_1", "LENGTH_TYPE_N", "LENGTH_TYPE_N_1", "LENGTH_TYPE_Z",
+ "LENGTH_TYPE_Z_1", "STRINGLITERAL", "LEVEL_ROOT", "LEVEL_REGULAR", "LEVEL_NUMBER_66",
+ "LEVEL_NUMBER_77", "LEVEL_NUMBER_88", "INTEGERLITERAL", "POSITIVELITERAL",
+ "NUMERICLITERAL", "SINGLE_QUOTED_IDENTIFIER", "IDENTIFIER", "CONTROL_Z",
+ "WS"
};
}
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
@@ -747,7 +748,7 @@ public final ValuesContext values() throws RecognitionException {
setState(149);
_errHandler.sync(this);
_la = _input.LA(1);
- while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ALL) | (1L << FALSE) | (1L << HIGH_VALUE) | (1L << HIGH_VALUES) | (1L << LOW_VALUE) | (1L << LOW_VALUES) | (1L << NULL) | (1L << NULLS) | (1L << QUOTE) | (1L << QUOTES))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (SPACE - 65)) | (1L << (SPACES - 65)) | (1L << (TRUE - 65)) | (1L << (ZERO - 65)) | (1L << (ZEROS - 65)) | (1L << (ZEROES - 65)) | (1L << (COMMACHAR - 65)) | (1L << (MINUSCHAR - 65)) | (1L << (PLUSCHAR - 65)) | (1L << (NINES - 65)) | (1L << (STRINGLITERAL - 65)) | (1L << (LEVEL_ROOT - 65)) | (1L << (LEVEL_REGULAR - 65)) | (1L << (LEVEL_NUMBER_66 - 65)) | (1L << (LEVEL_NUMBER_77 - 65)) | (1L << (LEVEL_NUMBER_88 - 65)))) != 0) || _la==INTEGERLITERAL || _la==NUMERICLITERAL) {
+ while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ALL) | (1L << FALSE) | (1L << HIGH_VALUE) | (1L << HIGH_VALUES) | (1L << LOW_VALUE) | (1L << LOW_VALUES) | (1L << NULL) | (1L << NULLS) | (1L << QUOTE) | (1L << QUOTES))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (SPACE - 65)) | (1L << (SPACES - 65)) | (1L << (TRUE - 65)) | (1L << (ZERO - 65)) | (1L << (ZEROS - 65)) | (1L << (ZEROES - 65)) | (1L << (COMMACHAR - 65)) | (1L << (MINUSCHAR - 65)) | (1L << (PLUSCHAR - 65)) | (1L << (NINES - 65)) | (1L << (STRINGLITERAL - 65)) | (1L << (LEVEL_ROOT - 65)) | (1L << (LEVEL_REGULAR - 65)) | (1L << (LEVEL_NUMBER_66 - 65)) | (1L << (LEVEL_NUMBER_77 - 65)))) != 0) || ((((_la - 129)) & ~0x3f) == 0 && ((1L << (_la - 129)) & ((1L << (LEVEL_NUMBER_88 - 129)) | (1L << (INTEGERLITERAL - 129)) | (1L << (NUMERICLITERAL - 129)))) != 0)) {
{
{
setState(144);
@@ -1991,15 +1992,6 @@ public void copyFrom(Precision9Context ctx) {
super.copyFrom(ctx);
}
}
- public static class Precision9ZsContext extends Precision9Context {
- public TerminalNode Z_S() { return getToken(copybookParser.Z_S, 0); }
- public Precision9ZsContext(Precision9Context ctx) { copyFrom(ctx); }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof copybookParserVisitor ) return ((copybookParserVisitor extends T>)visitor).visitPrecision9Zs(this);
- else return visitor.visitChildren(this);
- }
- }
public static class Precision9ScaledLeadContext extends Precision9Context {
public TerminalNode PRECISION_9_SCALED_LEAD() { return getToken(copybookParser.PRECISION_9_SCALED_LEAD, 0); }
public Precision9ScaledLeadContext(Precision9Context ctx) { copyFrom(ctx); }
@@ -2018,21 +2010,57 @@ public T accept(ParseTreeVisitor extends T> visitor) {
else return visitor.visitChildren(this);
}
}
- public static class Precision9NinesContext extends Precision9Context {
- public TerminalNode NINES() { return getToken(copybookParser.NINES, 0); }
- public Precision9NinesContext(Precision9Context ctx) { copyFrom(ctx); }
+ public static class Precision9ExplicitDotContext extends Precision9Context {
+ public TerminalNode PRECISION_9_EXPLICIT_DOT() { return getToken(copybookParser.PRECISION_9_EXPLICIT_DOT, 0); }
+ public Precision9ExplicitDotContext(Precision9Context ctx) { copyFrom(ctx); }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof copybookParserVisitor ) return ((copybookParserVisitor extends T>)visitor).visitPrecision9Nines(this);
+ if ( visitor instanceof copybookParserVisitor ) return ((copybookParserVisitor extends T>)visitor).visitPrecision9ExplicitDot(this);
else return visitor.visitChildren(this);
}
}
- public static class Precision9ExplicitDotContext extends Precision9Context {
- public TerminalNode PRECISION_9_EXPLICIT_DOT() { return getToken(copybookParser.PRECISION_9_EXPLICIT_DOT, 0); }
- public Precision9ExplicitDotContext(Precision9Context ctx) { copyFrom(ctx); }
+ public static class Precision9DecimalScaledWithVContext extends Precision9Context {
+ public TerminalNode PRECISION_9_DECIMAL_WITH_V() { return getToken(copybookParser.PRECISION_9_DECIMAL_WITH_V, 0); }
+ public Precision9DecimalScaledWithVContext(Precision9Context ctx) { copyFrom(ctx); }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof copybookParserVisitor ) return ((copybookParserVisitor extends T>)visitor).visitPrecision9ExplicitDot(this);
+ if ( visitor instanceof copybookParserVisitor ) return ((copybookParserVisitor extends T>)visitor).visitPrecision9DecimalScaledWithV(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+ public static class Precision9ScaledContext extends Precision9Context {
+ public TerminalNode PRECISION_9_SCALED() { return getToken(copybookParser.PRECISION_9_SCALED, 0); }
+ public Precision9ScaledContext(Precision9Context ctx) { copyFrom(ctx); }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof copybookParserVisitor ) return ((copybookParserVisitor extends T>)visitor).visitPrecision9Scaled(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+ public static class Precision9DecimalScaledContext extends Precision9Context {
+ public TerminalNode PRECISION_9_DECIMAL_SCALED() { return getToken(copybookParser.PRECISION_9_DECIMAL_SCALED, 0); }
+ public Precision9DecimalScaledContext(Precision9Context ctx) { copyFrom(ctx); }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof copybookParserVisitor ) return ((copybookParserVisitor extends T>)visitor).visitPrecision9DecimalScaled(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+ public static class Precision9ZsContext extends Precision9Context {
+ public TerminalNode Z_S() { return getToken(copybookParser.Z_S, 0); }
+ public Precision9ZsContext(Precision9Context ctx) { copyFrom(ctx); }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof copybookParserVisitor ) return ((copybookParserVisitor extends T>)visitor).visitPrecision9Zs(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+ public static class Precision9NinesContext extends Precision9Context {
+ public TerminalNode NINES() { return getToken(copybookParser.NINES, 0); }
+ public Precision9NinesContext(Precision9Context ctx) { copyFrom(ctx); }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof copybookParserVisitor ) return ((copybookParserVisitor extends T>)visitor).visitPrecision9Nines(this);
else return visitor.visitChildren(this);
}
}
@@ -2054,15 +2082,6 @@ public T accept(ParseTreeVisitor extends T> visitor) {
else return visitor.visitChildren(this);
}
}
- public static class Precision9ScaledContext extends Precision9Context {
- public TerminalNode PRECISION_9_SCALED() { return getToken(copybookParser.PRECISION_9_SCALED, 0); }
- public Precision9ScaledContext(Precision9Context ctx) { copyFrom(ctx); }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof copybookParserVisitor ) return ((copybookParserVisitor extends T>)visitor).visitPrecision9Scaled(this);
- else return visitor.visitChildren(this);
- }
- }
public static class Precision9VsContext extends Precision9Context {
public TerminalNode V_S() { return getToken(copybookParser.V_S, 0); }
public Precision9VsContext(Precision9Context ctx) { copyFrom(ctx); }
@@ -2072,15 +2091,6 @@ public T accept(ParseTreeVisitor extends T> visitor) {
else return visitor.visitChildren(this);
}
}
- public static class Precision9DecimalScaledContext extends Precision9Context {
- public TerminalNode PRECISION_9_DECIMAL_SCALED() { return getToken(copybookParser.PRECISION_9_DECIMAL_SCALED, 0); }
- public Precision9DecimalScaledContext(Precision9Context ctx) { copyFrom(ctx); }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof copybookParserVisitor ) return ((copybookParserVisitor extends T>)visitor).visitPrecision9DecimalScaled(this);
- else return visitor.visitChildren(this);
- }
- }
public static class PrecisionZDecimalScaledContext extends Precision9Context {
public TerminalNode PRECISION_Z_DECIMAL_SCALED() { return getToken(copybookParser.PRECISION_Z_DECIMAL_SCALED, 0); }
public PrecisionZDecimalScaledContext(Precision9Context ctx) { copyFrom(ctx); }
@@ -2104,7 +2114,7 @@ public final Precision9Context precision9() throws RecognitionException {
Precision9Context _localctx = new Precision9Context(_ctx, getState());
enterRule(_localctx, 54, RULE_precision9);
try {
- setState(290);
+ setState(291);
_errHandler.sync(this);
switch (_input.LA(1)) {
case NINES:
@@ -2163,43 +2173,51 @@ public final Precision9Context precision9() throws RecognitionException {
match(PRECISION_9_DECIMAL_SCALED);
}
break;
- case PRECISION_9_SCALED:
- _localctx = new Precision9ScaledContext(_localctx);
+ case PRECISION_9_DECIMAL_WITH_V:
+ _localctx = new Precision9DecimalScaledWithVContext(_localctx);
enterOuterAlt(_localctx, 8);
{
setState(285);
+ match(PRECISION_9_DECIMAL_WITH_V);
+ }
+ break;
+ case PRECISION_9_SCALED:
+ _localctx = new Precision9ScaledContext(_localctx);
+ enterOuterAlt(_localctx, 9);
+ {
+ setState(286);
match(PRECISION_9_SCALED);
}
break;
case PRECISION_9_SCALED_LEAD:
_localctx = new Precision9ScaledLeadContext(_localctx);
- enterOuterAlt(_localctx, 9);
+ enterOuterAlt(_localctx, 10);
{
- setState(286);
+ setState(287);
match(PRECISION_9_SCALED_LEAD);
}
break;
case PRECISION_Z_EXPLICIT_DOT:
_localctx = new PrecisionZExplicitDotContext(_localctx);
- enterOuterAlt(_localctx, 10);
+ enterOuterAlt(_localctx, 11);
{
- setState(287);
+ setState(288);
match(PRECISION_Z_EXPLICIT_DOT);
}
break;
case PRECISION_Z_DECIMAL_SCALED:
_localctx = new PrecisionZDecimalScaledContext(_localctx);
- enterOuterAlt(_localctx, 11);
+ enterOuterAlt(_localctx, 12);
{
- setState(288);
+ setState(289);
match(PRECISION_Z_DECIMAL_SCALED);
}
break;
case PRECISION_Z_SCALED:
_localctx = new PrecisionZScaledContext(_localctx);
- enterOuterAlt(_localctx, 12);
+ enterOuterAlt(_localctx, 13);
{
- setState(289);
+ setState(290);
match(PRECISION_Z_SCALED);
}
break;
@@ -2263,7 +2281,7 @@ public final SignPrecision9Context signPrecision9() throws RecognitionException
enterRule(_localctx, 56, RULE_signPrecision9);
int _la;
try {
- setState(299);
+ setState(300);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,37,_ctx) ) {
case 1:
@@ -2271,17 +2289,17 @@ public final SignPrecision9Context signPrecision9() throws RecognitionException
enterOuterAlt(_localctx, 1);
{
{
- setState(293);
+ setState(294);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==MINUSCHAR || _la==PLUSCHAR) {
{
- setState(292);
+ setState(293);
plusMinus();
}
}
- setState(295);
+ setState(296);
precision9();
}
}
@@ -2291,9 +2309,9 @@ public final SignPrecision9Context signPrecision9() throws RecognitionException
enterOuterAlt(_localctx, 2);
{
{
- setState(296);
- precision9();
setState(297);
+ precision9();
+ setState(298);
plusMinus();
}
}
@@ -2332,7 +2350,7 @@ public final AlphaXContext alphaX() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(301);
+ setState(302);
_la = _input.LA(1);
if ( !(_la==X_S || _la==LENGTH_TYPE_X) ) {
_errHandler.recoverInline(this);
@@ -2376,7 +2394,7 @@ public final AlphaNContext alphaN() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(303);
+ setState(304);
_la = _input.LA(1);
if ( !(_la==N_S || _la==LENGTH_TYPE_N) ) {
_errHandler.recoverInline(this);
@@ -2420,7 +2438,7 @@ public final AlphaAContext alphaA() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(305);
+ setState(306);
_la = _input.LA(1);
if ( !(_la==A_S || _la==LENGTH_TYPE_A) ) {
_errHandler.recoverInline(this);
@@ -2464,7 +2482,7 @@ public final PictureLiteralContext pictureLiteral() throws RecognitionException
try {
enterOuterAlt(_localctx, 1);
{
- setState(307);
+ setState(308);
_la = _input.LA(1);
if ( !(_la==PIC || _la==PICTURE) ) {
_errHandler.recoverInline(this);
@@ -2526,35 +2544,35 @@ public final PicContext pic() throws RecognitionException {
enterRule(_localctx, 66, RULE_pic);
int _la;
try {
- setState(339);
+ setState(340);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,46,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(309);
+ setState(310);
pictureLiteral();
- setState(323);
+ setState(324);
_errHandler.sync(this);
switch (_input.LA(1)) {
case X_S:
case LENGTH_TYPE_X:
{
- setState(310);
+ setState(311);
alphaX();
}
break;
case A_S:
case LENGTH_TYPE_A:
{
- setState(311);
+ setState(312);
alphaA();
}
break;
case N_S:
case LENGTH_TYPE_N:
{
- setState(312);
+ setState(313);
alphaN();
}
break;
@@ -2589,25 +2607,26 @@ public final PicContext pic() throws RecognitionException {
case V_S:
case PRECISION_9_EXPLICIT_DOT:
case PRECISION_9_DECIMAL_SCALED:
+ case PRECISION_9_DECIMAL_WITH_V:
case PRECISION_9_SCALED:
case PRECISION_9_SCALED_LEAD:
case PRECISION_Z_EXPLICIT_DOT:
case PRECISION_Z_DECIMAL_SCALED:
case PRECISION_Z_SCALED:
{
- setState(321);
+ setState(322);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,40,_ctx) ) {
case 1:
{
- setState(313);
+ setState(314);
signPrecision9();
- setState(315);
+ setState(316);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,38,_ctx) ) {
case 1:
{
- setState(314);
+ setState(315);
usage();
}
break;
@@ -2616,17 +2635,17 @@ public final PicContext pic() throws RecognitionException {
break;
case 2:
{
- setState(318);
+ setState(319);
_errHandler.sync(this);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BINARY) | (1L << COMP) | (1L << COMP_0) | (1L << COMP_1) | (1L << COMP_2) | (1L << COMP_3) | (1L << COMP_3U) | (1L << COMP_4) | (1L << COMP_5) | (1L << COMP_9) | (1L << COMPUTATIONAL) | (1L << COMPUTATIONAL_0) | (1L << COMPUTATIONAL_1) | (1L << COMPUTATIONAL_2) | (1L << COMPUTATIONAL_3) | (1L << COMPUTATIONAL_3U) | (1L << COMPUTATIONAL_4) | (1L << COMPUTATIONAL_5) | (1L << COMPUTATIONAL_9) | (1L << DISPLAY) | (1L << PACKED_DECIMAL))) != 0) || _la==USAGE) {
{
- setState(317);
+ setState(318);
usage();
}
}
- setState(320);
+ setState(321);
signPrecision9();
}
break;
@@ -2641,19 +2660,19 @@ public final PicContext pic() throws RecognitionException {
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(329);
+ setState(330);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==USAGE) {
{
- setState(325);
+ setState(326);
match(USAGE);
- setState(327);
+ setState(328);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==IS) {
{
- setState(326);
+ setState(327);
match(IS);
}
}
@@ -2661,26 +2680,26 @@ public final PicContext pic() throws RecognitionException {
}
}
- setState(331);
+ setState(332);
match(COMP_1);
}
break;
case 3:
enterOuterAlt(_localctx, 3);
{
- setState(336);
+ setState(337);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==USAGE) {
{
- setState(332);
+ setState(333);
match(USAGE);
- setState(334);
+ setState(335);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==IS) {
{
- setState(333);
+ setState(334);
match(IS);
}
}
@@ -2688,7 +2707,7 @@ public final PicContext pic() throws RecognitionException {
}
}
- setState(338);
+ setState(339);
match(COMP_2);
}
break;
@@ -2726,7 +2745,7 @@ public final SectionContext section() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(341);
+ setState(342);
_la = _input.LA(1);
if ( !(_la==LEVEL_ROOT || _la==LEVEL_REGULAR) ) {
_errHandler.recoverInline(this);
@@ -2771,7 +2790,7 @@ public final SkipLiteralContext skipLiteral() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(343);
+ setState(344);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << SKIP1) | (1L << SKIP2) | (1L << SKIP3))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -2846,21 +2865,21 @@ public final GroupContext group() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(345);
- section();
setState(346);
+ section();
+ setState(347);
identifier();
- setState(353);
+ setState(354);
_errHandler.sync(this);
_la = _input.LA(1);
while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BINARY) | (1L << COMP) | (1L << COMP_0) | (1L << COMP_3) | (1L << COMP_3U) | (1L << COMP_4) | (1L << COMP_5) | (1L << COMP_9) | (1L << COMPUTATIONAL) | (1L << COMPUTATIONAL_0) | (1L << COMPUTATIONAL_3) | (1L << COMPUTATIONAL_3U) | (1L << COMPUTATIONAL_4) | (1L << COMPUTATIONAL_5) | (1L << COMPUTATIONAL_9) | (1L << DISPLAY) | (1L << OCCURS) | (1L << PACKED_DECIMAL) | (1L << REDEFINES))) != 0) || ((((_la - 73)) & ~0x3f) == 0 && ((1L << (_la - 73)) & ((1L << (USAGE - 73)) | (1L << (VALUE - 73)) | (1L << (VALUES - 73)))) != 0)) {
{
- setState(351);
+ setState(352);
_errHandler.sync(this);
switch (_input.LA(1)) {
case REDEFINES:
{
- setState(347);
+ setState(348);
redefines();
}
break;
@@ -2883,20 +2902,20 @@ public final GroupContext group() throws RecognitionException {
case PACKED_DECIMAL:
case USAGE:
{
- setState(348);
+ setState(349);
usageGroup();
}
break;
case OCCURS:
{
- setState(349);
+ setState(350);
occurs();
}
break;
case VALUE:
case VALUES:
{
- setState(350);
+ setState(351);
values();
}
break;
@@ -2904,11 +2923,11 @@ public final GroupContext group() throws RecognitionException {
throw new NoViableAltException(this);
}
}
- setState(355);
+ setState(356);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(356);
+ setState(357);
term();
}
}
@@ -2996,89 +3015,89 @@ public final PrimitiveContext primitive() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(358);
- section();
setState(359);
+ section();
+ setState(360);
identifier();
- setState(369);
+ setState(370);
_errHandler.sync(this);
_la = _input.LA(1);
while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BINARY) | (1L << COMP) | (1L << COMP_0) | (1L << COMP_1) | (1L << COMP_2) | (1L << COMP_3) | (1L << COMP_3U) | (1L << COMP_4) | (1L << COMP_5) | (1L << COMP_9) | (1L << COMPUTATIONAL) | (1L << COMPUTATIONAL_0) | (1L << COMPUTATIONAL_1) | (1L << COMPUTATIONAL_2) | (1L << COMPUTATIONAL_3) | (1L << COMPUTATIONAL_3U) | (1L << COMPUTATIONAL_4) | (1L << COMPUTATIONAL_5) | (1L << COMPUTATIONAL_9) | (1L << DISPLAY) | (1L << JUST) | (1L << JUSTIFIED) | (1L << OCCURS) | (1L << PACKED_DECIMAL) | (1L << PIC) | (1L << PICTURE) | (1L << REDEFINES))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (SIGN - 64)) | (1L << (USAGE - 64)) | (1L << (VALUE - 64)) | (1L << (VALUES - 64)))) != 0)) {
{
- setState(367);
+ setState(368);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,49,_ctx) ) {
case 1:
{
- setState(360);
+ setState(361);
justified();
}
break;
case 2:
{
- setState(361);
+ setState(362);
occurs();
}
break;
case 3:
{
- setState(362);
+ setState(363);
pic();
}
break;
case 4:
{
- setState(363);
+ setState(364);
redefines();
}
break;
case 5:
{
- setState(364);
+ setState(365);
usage();
}
break;
case 6:
{
- setState(365);
+ setState(366);
values();
}
break;
case 7:
{
- setState(366);
+ setState(367);
separateSign();
}
break;
}
}
- setState(371);
+ setState(372);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(377);
+ setState(378);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==BLANK) {
{
- setState(372);
+ setState(373);
match(BLANK);
- setState(374);
+ setState(375);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==WHEN) {
{
- setState(373);
+ setState(374);
match(WHEN);
}
}
- setState(376);
+ setState(377);
match(ZERO);
}
}
- setState(379);
+ setState(380);
term();
}
}
@@ -3121,13 +3140,13 @@ public final Level66statementContext level66statement() throws RecognitionExcept
try {
enterOuterAlt(_localctx, 1);
{
- setState(381);
- match(LEVEL_NUMBER_66);
setState(382);
- identifier();
+ match(LEVEL_NUMBER_66);
setState(383);
- renames();
+ identifier();
setState(384);
+ renames();
+ setState(385);
term();
}
}
@@ -3170,13 +3189,13 @@ public final Level88statementContext level88statement() throws RecognitionExcept
try {
enterOuterAlt(_localctx, 1);
{
- setState(386);
- match(LEVEL_NUMBER_88);
setState(387);
- identifier();
+ match(LEVEL_NUMBER_88);
setState(388);
- values();
+ identifier();
setState(389);
+ values();
+ setState(390);
term();
}
}
@@ -3226,55 +3245,55 @@ public final ItemContext item() throws RecognitionException {
ItemContext _localctx = new ItemContext(_ctx, getState());
enterRule(_localctx, 80, RULE_item);
try {
- setState(398);
+ setState(399);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,53,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(391);
+ setState(392);
match(COMMENT);
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(392);
+ setState(393);
group();
}
break;
case 3:
enterOuterAlt(_localctx, 3);
{
- setState(393);
+ setState(394);
primitive();
}
break;
case 4:
enterOuterAlt(_localctx, 4);
{
- setState(394);
+ setState(395);
level66statement();
}
break;
case 5:
enterOuterAlt(_localctx, 5);
{
- setState(395);
+ setState(396);
level88statement();
}
break;
case 6:
enterOuterAlt(_localctx, 6);
{
- setState(396);
+ setState(397);
skipLiteral();
}
break;
case 7:
enterOuterAlt(_localctx, 7);
{
- setState(397);
+ setState(398);
term();
}
break;
@@ -3292,7 +3311,7 @@ public final ItemContext item() throws RecognitionException {
}
public static final String _serializedATN =
- "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u0089\u0193\4\2\t"+
+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u008a\u0194\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\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
@@ -3314,55 +3333,55 @@ public final ItemContext item() throws RecognitionException {
"\30\5\30\u0100\n\30\3\30\3\30\3\31\3\31\5\31\u0106\n\31\3\31\3\31\5\31"+
"\u010a\n\31\3\31\5\31\u010d\n\31\3\32\3\32\5\32\u0111\n\32\3\33\3\33\3"+
"\34\3\34\5\34\u0117\n\34\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35"+
- "\3\35\3\35\3\35\5\35\u0125\n\35\3\36\5\36\u0128\n\36\3\36\3\36\3\36\3"+
- "\36\5\36\u012e\n\36\3\37\3\37\3 \3 \3!\3!\3\"\3\"\3#\3#\3#\3#\3#\3#\5"+
- "#\u013e\n#\3#\5#\u0141\n#\3#\5#\u0144\n#\5#\u0146\n#\3#\3#\5#\u014a\n"+
- "#\5#\u014c\n#\3#\3#\3#\5#\u0151\n#\5#\u0153\n#\3#\5#\u0156\n#\3$\3$\3"+
- "%\3%\3&\3&\3&\3&\3&\3&\7&\u0162\n&\f&\16&\u0165\13&\3&\3&\3\'\3\'\3\'"+
- "\3\'\3\'\3\'\3\'\3\'\3\'\7\'\u0172\n\'\f\'\16\'\u0175\13\'\3\'\3\'\5\'"+
- "\u0179\n\'\3\'\5\'\u017c\n\'\3\'\3\'\3(\3(\3(\3(\3(\3)\3)\3)\3)\3)\3*"+
- "\3*\3*\3*\3*\3*\3*\5*\u0191\n*\3*\2\2+\2\4\6\b\n\f\16\20\22\24\26\30\32"+
- "\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNPR\2\17\4\2^^~\u0083\4\2##JJ\4"+
- "\2\6\6 \6\2\7\7\f\35!!\66\66\b\2\7\7\f\r\20\26\31\35!!\66\66\4\2,,II"+
- "\3\2)*\4\2aaww\4\2bbyy\4\2__ss\3\2\678\3\2~\177\3\2?A\2\u01d4\2U\3\2\2"+
- "\2\4b\3\2\2\2\6m\3\2\2\2\bo\3\2\2\2\nq\3\2\2\2\f\u0082\3\2\2\2\16\u0084"+
- "\3\2\2\2\20\u008e\3\2\2\2\22\u009a\3\2\2\2\24\u009e\3\2\2\2\26\u00a0\3"+
- "\2\2\2\30\u00b2\3\2\2\2\32\u00b4\3\2\2\2\34\u00bd\3\2\2\2\36\u00c0\3\2"+
- "\2\2 \u00c6\3\2\2\2\"\u00d4\3\2\2\2$\u00e5\3\2\2\2&\u00e8\3\2\2\2(\u00ef"+
- "\3\2\2\2*\u00f1\3\2\2\2,\u00f7\3\2\2\2.\u00ff\3\2\2\2\60\u0103\3\2\2\2"+
- "\62\u010e\3\2\2\2\64\u0112\3\2\2\2\66\u0116\3\2\2\28\u0124\3\2\2\2:\u012d"+
- "\3\2\2\2<\u012f\3\2\2\2>\u0131\3\2\2\2@\u0133\3\2\2\2B\u0135\3\2\2\2D"+
- "\u0155\3\2\2\2F\u0157\3\2\2\2H\u0159\3\2\2\2J\u015b\3\2\2\2L\u0168\3\2"+
- "\2\2N\u017f\3\2\2\2P\u0184\3\2\2\2R\u0190\3\2\2\2TV\5R*\2UT\3\2\2\2VW"+
- "\3\2\2\2WU\3\2\2\2WX\3\2\2\2XZ\3\2\2\2Y[\7\u0088\2\2ZY\3\2\2\2Z[\3\2\2"+
- "\2[\\\3\2\2\2\\]\7\2\2\3]\3\3\2\2\2^c\7}\2\2_c\5\6\4\2`c\5\n\6\2ac\5\30"+
- "\r\2b^\3\2\2\2b_\3\2\2\2b`\3\2\2\2ba\3\2\2\2c\5\3\2\2\2df\5\66\34\2ed"+
- "\3\2\2\2ef\3\2\2\2fg\3\2\2\2gn\7\u0085\2\2hn\7P\2\2ik\5\66\34\2ji\3\2"+
- "\2\2jk\3\2\2\2kl\3\2\2\2ln\5\b\5\2me\3\2\2\2mh\3\2\2\2mj\3\2\2\2n\7\3"+
- "\2\2\2op\t\2\2\2p\t\3\2\2\2qr\t\3\2\2r\13\3\2\2\2s\u0083\7\u0087\2\2t"+
- "\u0083\7\3\2\2u\u0083\7_\2\2v\u0083\7`\2\2w\u0083\7f\2\2x\u0083\7a\2\2"+
- "y\u0083\3\2\2\2z\u0083\7b\2\2{\u0083\7c\2\2|\u0083\7g\2\2}\u0083\7d\2"+
- "\2~\u0083\7h\2\2\177\u0083\7e\2\2\u0080\u0083\7i\2\2\u0081\u0083\7\u0086"+
- "\2\2\u0082s\3\2\2\2\u0082t\3\2\2\2\u0082u\3\2\2\2\u0082v\3\2\2\2\u0082"+
- "w\3\2\2\2\u0082x\3\2\2\2\u0082y\3\2\2\2\u0082z\3\2\2\2\u0082{\3\2\2\2"+
- "\u0082|\3\2\2\2\u0082}\3\2\2\2\u0082~\3\2\2\2\u0082\177\3\2\2\2\u0082"+
- "\u0080\3\2\2\2\u0082\u0081\3\2\2\2\u0083\r\3\2\2\2\u0084\u0085\7\3\2\2"+
- "\u0085\17\3\2\2\2\u0086\u0088\7M\2\2\u0087\u0089\7(\2\2\u0088\u0087\3"+
- "\2\2\2\u0088\u0089\3\2\2\2\u0089\u008f\3\2\2\2\u008a\u008c\7N\2\2\u008b"+
- "\u008d\7\5\2\2\u008c\u008b\3\2\2\2\u008c\u008d\3\2\2\2\u008d\u008f\3\2"+
- "\2\2\u008e\u0086\3\2\2\2\u008e\u008a\3\2\2\2\u008f\u0090\3\2\2\2\u0090"+
- "\u0097\5\22\n\2\u0091\u0093\7T\2\2\u0092\u0091\3\2\2\2\u0092\u0093\3\2"+
- "\2\2\u0093\u0094\3\2\2\2\u0094\u0096\5\22\n\2\u0095\u0092\3\2\2\2\u0096"+
- "\u0099\3\2\2\2\u0097\u0095\3\2\2\2\u0097\u0098\3\2\2\2\u0098\21\3\2\2"+
- "\2\u0099\u0097\3\2\2\2\u009a\u009c\5\24\13\2\u009b\u009d\5\26\f\2\u009c"+
- "\u009b\3\2\2\2\u009c\u009d\3\2\2\2\u009d\23\3\2\2\2\u009e\u009f\5\4\3"+
- "\2\u009f\25\3\2\2\2\u00a0\u00a1\5\16\b\2\u00a1\u00a2\5\4\3\2\u00a2\27"+
- "\3\2\2\2\u00a3\u00a4\7\4\2\2\u00a4\u00b3\5\4\3\2\u00a5\u00b3\7%\2\2\u00a6"+
- "\u00b3\7&\2\2\u00a7\u00b3\7.\2\2\u00a8\u00b3\7/\2\2\u00a9\u00b3\7\60\2"+
- "\2\u00aa\u00b3\7\61\2\2\u00ab\u00b3\79\2\2\u00ac\u00b3\7:\2\2\u00ad\u00b3"+
- "\7C\2\2\u00ae\u00b3\7D\2\2\u00af\u00b3\7P\2\2\u00b0\u00b3\7Q\2\2\u00b1"+
- "\u00b3\7R\2\2\u00b2\u00a3\3\2\2\2\u00b2\u00a5\3\2\2\2\u00b2\u00a6\3\2"+
- "\2\2\u00b2\u00a7\3\2\2\2\u00b2\u00a8\3\2\2\2\u00b2\u00a9\3\2\2\2\u00b2"+
+ "\3\35\3\35\3\35\3\35\5\35\u0126\n\35\3\36\5\36\u0129\n\36\3\36\3\36\3"+
+ "\36\3\36\5\36\u012f\n\36\3\37\3\37\3 \3 \3!\3!\3\"\3\"\3#\3#\3#\3#\3#"+
+ "\3#\5#\u013f\n#\3#\5#\u0142\n#\3#\5#\u0145\n#\5#\u0147\n#\3#\3#\5#\u014b"+
+ "\n#\5#\u014d\n#\3#\3#\3#\5#\u0152\n#\5#\u0154\n#\3#\5#\u0157\n#\3$\3$"+
+ "\3%\3%\3&\3&\3&\3&\3&\3&\7&\u0163\n&\f&\16&\u0166\13&\3&\3&\3\'\3\'\3"+
+ "\'\3\'\3\'\3\'\3\'\3\'\3\'\7\'\u0173\n\'\f\'\16\'\u0176\13\'\3\'\3\'\5"+
+ "\'\u017a\n\'\3\'\5\'\u017d\n\'\3\'\3\'\3(\3(\3(\3(\3(\3)\3)\3)\3)\3)\3"+
+ "*\3*\3*\3*\3*\3*\3*\5*\u0192\n*\3*\2\2+\2\4\6\b\n\f\16\20\22\24\26\30"+
+ "\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNPR\2\17\4\2^^\177\u0084\4\2"+
+ "##JJ\4\2\6\6 \6\2\7\7\f\35!!\66\66\b\2\7\7\f\r\20\26\31\35!!\66\66\4"+
+ "\2,,II\3\2)*\4\2aaxx\4\2bbzz\4\2__tt\3\2\678\3\2\177\u0080\3\2?A\2\u01d6"+
+ "\2U\3\2\2\2\4b\3\2\2\2\6m\3\2\2\2\bo\3\2\2\2\nq\3\2\2\2\f\u0082\3\2\2"+
+ "\2\16\u0084\3\2\2\2\20\u008e\3\2\2\2\22\u009a\3\2\2\2\24\u009e\3\2\2\2"+
+ "\26\u00a0\3\2\2\2\30\u00b2\3\2\2\2\32\u00b4\3\2\2\2\34\u00bd\3\2\2\2\36"+
+ "\u00c0\3\2\2\2 \u00c6\3\2\2\2\"\u00d4\3\2\2\2$\u00e5\3\2\2\2&\u00e8\3"+
+ "\2\2\2(\u00ef\3\2\2\2*\u00f1\3\2\2\2,\u00f7\3\2\2\2.\u00ff\3\2\2\2\60"+
+ "\u0103\3\2\2\2\62\u010e\3\2\2\2\64\u0112\3\2\2\2\66\u0116\3\2\2\28\u0125"+
+ "\3\2\2\2:\u012e\3\2\2\2<\u0130\3\2\2\2>\u0132\3\2\2\2@\u0134\3\2\2\2B"+
+ "\u0136\3\2\2\2D\u0156\3\2\2\2F\u0158\3\2\2\2H\u015a\3\2\2\2J\u015c\3\2"+
+ "\2\2L\u0169\3\2\2\2N\u0180\3\2\2\2P\u0185\3\2\2\2R\u0191\3\2\2\2TV\5R"+
+ "*\2UT\3\2\2\2VW\3\2\2\2WU\3\2\2\2WX\3\2\2\2XZ\3\2\2\2Y[\7\u0089\2\2ZY"+
+ "\3\2\2\2Z[\3\2\2\2[\\\3\2\2\2\\]\7\2\2\3]\3\3\2\2\2^c\7~\2\2_c\5\6\4\2"+
+ "`c\5\n\6\2ac\5\30\r\2b^\3\2\2\2b_\3\2\2\2b`\3\2\2\2ba\3\2\2\2c\5\3\2\2"+
+ "\2df\5\66\34\2ed\3\2\2\2ef\3\2\2\2fg\3\2\2\2gn\7\u0086\2\2hn\7P\2\2ik"+
+ "\5\66\34\2ji\3\2\2\2jk\3\2\2\2kl\3\2\2\2ln\5\b\5\2me\3\2\2\2mh\3\2\2\2"+
+ "mj\3\2\2\2n\7\3\2\2\2op\t\2\2\2p\t\3\2\2\2qr\t\3\2\2r\13\3\2\2\2s\u0083"+
+ "\7\u0088\2\2t\u0083\7\3\2\2u\u0083\7_\2\2v\u0083\7`\2\2w\u0083\7f\2\2"+
+ "x\u0083\7a\2\2y\u0083\3\2\2\2z\u0083\7b\2\2{\u0083\7c\2\2|\u0083\7g\2"+
+ "\2}\u0083\7d\2\2~\u0083\7h\2\2\177\u0083\7e\2\2\u0080\u0083\7i\2\2\u0081"+
+ "\u0083\7\u0087\2\2\u0082s\3\2\2\2\u0082t\3\2\2\2\u0082u\3\2\2\2\u0082"+
+ "v\3\2\2\2\u0082w\3\2\2\2\u0082x\3\2\2\2\u0082y\3\2\2\2\u0082z\3\2\2\2"+
+ "\u0082{\3\2\2\2\u0082|\3\2\2\2\u0082}\3\2\2\2\u0082~\3\2\2\2\u0082\177"+
+ "\3\2\2\2\u0082\u0080\3\2\2\2\u0082\u0081\3\2\2\2\u0083\r\3\2\2\2\u0084"+
+ "\u0085\7\3\2\2\u0085\17\3\2\2\2\u0086\u0088\7M\2\2\u0087\u0089\7(\2\2"+
+ "\u0088\u0087\3\2\2\2\u0088\u0089\3\2\2\2\u0089\u008f\3\2\2\2\u008a\u008c"+
+ "\7N\2\2\u008b\u008d\7\5\2\2\u008c\u008b\3\2\2\2\u008c\u008d\3\2\2\2\u008d"+
+ "\u008f\3\2\2\2\u008e\u0086\3\2\2\2\u008e\u008a\3\2\2\2\u008f\u0090\3\2"+
+ "\2\2\u0090\u0097\5\22\n\2\u0091\u0093\7T\2\2\u0092\u0091\3\2\2\2\u0092"+
+ "\u0093\3\2\2\2\u0093\u0094\3\2\2\2\u0094\u0096\5\22\n\2\u0095\u0092\3"+
+ "\2\2\2\u0096\u0099\3\2\2\2\u0097\u0095\3\2\2\2\u0097\u0098\3\2\2\2\u0098"+
+ "\21\3\2\2\2\u0099\u0097\3\2\2\2\u009a\u009c\5\24\13\2\u009b\u009d\5\26"+
+ "\f\2\u009c\u009b\3\2\2\2\u009c\u009d\3\2\2\2\u009d\23\3\2\2\2\u009e\u009f"+
+ "\5\4\3\2\u009f\25\3\2\2\2\u00a0\u00a1\5\16\b\2\u00a1\u00a2\5\4\3\2\u00a2"+
+ "\27\3\2\2\2\u00a3\u00a4\7\4\2\2\u00a4\u00b3\5\4\3\2\u00a5\u00b3\7%\2\2"+
+ "\u00a6\u00b3\7&\2\2\u00a7\u00b3\7.\2\2\u00a8\u00b3\7/\2\2\u00a9\u00b3"+
+ "\7\60\2\2\u00aa\u00b3\7\61\2\2\u00ab\u00b3\79\2\2\u00ac\u00b3\7:\2\2\u00ad"+
+ "\u00b3\7C\2\2\u00ae\u00b3\7D\2\2\u00af\u00b3\7P\2\2\u00b0\u00b3\7Q\2\2"+
+ "\u00b1\u00b3\7R\2\2\u00b2\u00a3\3\2\2\2\u00b2\u00a5\3\2\2\2\u00b2\u00a6"+
+ "\3\2\2\2\u00b2\u00a7\3\2\2\2\u00b2\u00a8\3\2\2\2\u00b2\u00a9\3\2\2\2\u00b2"+
"\u00aa\3\2\2\2\u00b2\u00ab\3\2\2\2\u00b2\u00ac\3\2\2\2\u00b2\u00ad\3\2"+
"\2\2\u00b2\u00ae\3\2\2\2\u00b2\u00af\3\2\2\2\u00b2\u00b0\3\2\2\2\u00b2"+
"\u00b1\3\2\2\2\u00b3\31\3\2\2\2\u00b4\u00b6\t\4\2\2\u00b5\u00b7\7+\2\2"+
@@ -3374,7 +3393,7 @@ public final ItemContext item() throws RecognitionException {
"\37\3\2\2\2\u00c6\u00c8\7\'\2\2\u00c7\u00c9\7\t\2\2\u00c8\u00c7\3\2\2"+
"\2\u00c8\u00c9\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca\u00d1\5\f\7\2\u00cb\u00cd"+
"\7T\2\2\u00cc\u00cb\3\2\2\2\u00cc\u00cd\3\2\2\2\u00cd\u00ce\3\2\2\2\u00ce"+
- "\u00d0\7\u0087\2\2\u00cf\u00cc\3\2\2\2\u00d0\u00d3\3\2\2\2\u00d1\u00cf"+
+ "\u00d0\7\u0088\2\2\u00cf\u00cc\3\2\2\2\u00d0\u00d3\3\2\2\2\u00d1\u00cf"+
"\3\2\2\2\u00d1\u00d2\3\2\2\2\u00d2!\3\2\2\2\u00d3\u00d1\3\2\2\2\u00d4"+
"\u00d5\7\64\2\2\u00d5\u00d7\5\b\5\2\u00d6\u00d8\5\34\17\2\u00d7\u00d6"+
"\3\2\2\2\u00d7\u00d8\3\2\2\2\u00d8\u00da\3\2\2\2\u00d9\u00db\7G\2\2\u00da"+
@@ -3398,57 +3417,58 @@ public final ItemContext item() throws RecognitionException {
"\u010d\3\2\2\2\u010d\61\3\2\2\2\u010e\u0110\t\b\2\2\u010f\u0111\7=\2\2"+
"\u0110\u010f\3\2\2\2\u0110\u0111\3\2\2\2\u0111\63\3\2\2\2\u0112\u0113"+
"\7\\\2\2\u0113\65\3\2\2\2\u0114\u0117\7X\2\2\u0115\u0117\7W\2\2\u0116"+
- "\u0114\3\2\2\2\u0116\u0115\3\2\2\2\u0117\67\3\2\2\2\u0118\u0125\7^\2\2"+
- "\u0119\u0125\7c\2\2\u011a\u0125\7`\2\2\u011b\u0125\7d\2\2\u011c\u0125"+
- "\7e\2\2\u011d\u0125\7j\2\2\u011e\u0125\7k\2\2\u011f\u0125\7l\2\2\u0120"+
- "\u0125\7m\2\2\u0121\u0125\7n\2\2\u0122\u0125\7o\2\2\u0123\u0125\7p\2\2"+
- "\u0124\u0118\3\2\2\2\u0124\u0119\3\2\2\2\u0124\u011a\3\2\2\2\u0124\u011b"+
- "\3\2\2\2\u0124\u011c\3\2\2\2\u0124\u011d\3\2\2\2\u0124\u011e\3\2\2\2\u0124"+
- "\u011f\3\2\2\2\u0124\u0120\3\2\2\2\u0124\u0121\3\2\2\2\u0124\u0122\3\2"+
- "\2\2\u0124\u0123\3\2\2\2\u01259\3\2\2\2\u0126\u0128\5\66\34\2\u0127\u0126"+
- "\3\2\2\2\u0127\u0128\3\2\2\2\u0128\u0129\3\2\2\2\u0129\u012e\58\35\2\u012a"+
- "\u012b\58\35\2\u012b\u012c\5\66\34\2\u012c\u012e\3\2\2\2\u012d\u0127\3"+
- "\2\2\2\u012d\u012a\3\2\2\2\u012e;\3\2\2\2\u012f\u0130\t\t\2\2\u0130=\3"+
- "\2\2\2\u0131\u0132\t\n\2\2\u0132?\3\2\2\2\u0133\u0134\t\13\2\2\u0134A"+
- "\3\2\2\2\u0135\u0136\t\f\2\2\u0136C\3\2\2\2\u0137\u0145\5B\"\2\u0138\u0146"+
- "\5<\37\2\u0139\u0146\5@!\2\u013a\u0146\5> \2\u013b\u013d\5:\36\2\u013c"+
- "\u013e\5,\27\2\u013d\u013c\3\2\2\2\u013d\u013e\3\2\2\2\u013e\u0144\3\2"+
- "\2\2\u013f\u0141\5,\27\2\u0140\u013f\3\2\2\2\u0140\u0141\3\2\2\2\u0141"+
- "\u0142\3\2\2\2\u0142\u0144\5:\36\2\u0143\u013b\3\2\2\2\u0143\u0140\3\2"+
- "\2\2\u0144\u0146\3\2\2\2\u0145\u0138\3\2\2\2\u0145\u0139\3\2\2\2\u0145"+
- "\u013a\3\2\2\2\u0145\u0143\3\2\2\2\u0146\u0156\3\2\2\2\u0147\u0149\7K"+
- "\2\2\u0148\u014a\7(\2\2\u0149\u0148\3\2\2\2\u0149\u014a\3\2\2\2\u014a"+
- "\u014c\3\2\2\2\u014b\u0147\3\2\2\2\u014b\u014c\3\2\2\2\u014c\u014d\3\2"+
- "\2\2\u014d\u0156\7\16\2\2\u014e\u0150\7K\2\2\u014f\u0151\7(\2\2\u0150"+
- "\u014f\3\2\2\2\u0150\u0151\3\2\2\2\u0151\u0153\3\2\2\2\u0152\u014e\3\2"+
- "\2\2\u0152\u0153\3\2\2\2\u0153\u0154\3\2\2\2\u0154\u0156\7\17\2\2\u0155"+
- "\u0137\3\2\2\2\u0155\u014b\3\2\2\2\u0155\u0152\3\2\2\2\u0156E\3\2\2\2"+
- "\u0157\u0158\t\r\2\2\u0158G\3\2\2\2\u0159\u015a\t\16\2\2\u015aI\3\2\2"+
- "\2\u015b\u015c\5F$\2\u015c\u0163\5\f\7\2\u015d\u0162\5$\23\2\u015e\u0162"+
- "\5.\30\2\u015f\u0162\5\"\22\2\u0160\u0162\5\20\t\2\u0161\u015d\3\2\2\2"+
- "\u0161\u015e\3\2\2\2\u0161\u015f\3\2\2\2\u0161\u0160\3\2\2\2\u0162\u0165"+
- "\3\2\2\2\u0163\u0161\3\2\2\2\u0163\u0164\3\2\2\2\u0164\u0166\3\2\2\2\u0165"+
- "\u0163\3\2\2\2\u0166\u0167\5\64\33\2\u0167K\3\2\2\2\u0168\u0169\5F$\2"+
- "\u0169\u0173\5\f\7\2\u016a\u0172\5\62\32\2\u016b\u0172\5\"\22\2\u016c"+
- "\u0172\5D#\2\u016d\u0172\5$\23\2\u016e\u0172\5,\27\2\u016f\u0172\5\20"+
- "\t\2\u0170\u0172\5\60\31\2\u0171\u016a\3\2\2\2\u0171\u016b\3\2\2\2\u0171"+
- "\u016c\3\2\2\2\u0171\u016d\3\2\2\2\u0171\u016e\3\2\2\2\u0171\u016f\3\2"+
- "\2\2\u0171\u0170\3\2\2\2\u0172\u0175\3\2\2\2\u0173\u0171\3\2\2\2\u0173"+
- "\u0174\3\2\2\2\u0174\u017b\3\2\2\2\u0175\u0173\3\2\2\2\u0176\u0178\7\b"+
- "\2\2\u0177\u0179\7O\2\2\u0178\u0177\3\2\2\2\u0178\u0179\3\2\2\2\u0179"+
- "\u017a\3\2\2\2\u017a\u017c\7P\2\2\u017b\u0176\3\2\2\2\u017b\u017c\3\2"+
- "\2\2\u017c\u017d\3\2\2\2\u017d\u017e\5\64\33\2\u017eM\3\2\2\2\u017f\u0180"+
- "\7\u0080\2\2\u0180\u0181\5\f\7\2\u0181\u0182\5&\24\2\u0182\u0183\5\64"+
- "\33\2\u0183O\3\2\2\2\u0184\u0185\7\u0082\2\2\u0185\u0186\5\f\7\2\u0186"+
- "\u0187\5\20\t\2\u0187\u0188\5\64\33\2\u0188Q\3\2\2\2\u0189\u0191\7]\2"+
- "\2\u018a\u0191\5J&\2\u018b\u0191\5L\'\2\u018c\u0191\5N(\2\u018d\u0191"+
- "\5P)\2\u018e\u0191\5H%\2\u018f\u0191\5\64\33\2\u0190\u0189\3\2\2\2\u0190"+
- "\u018a\3\2\2\2\u0190\u018b\3\2\2\2\u0190\u018c\3\2\2\2\u0190\u018d\3\2"+
- "\2\2\u0190\u018e\3\2\2\2\u0190\u018f\3\2\2\2\u0191S\3\2\2\28WZbejm\u0082"+
- "\u0088\u008c\u008e\u0092\u0097\u009c\u00b2\u00b6\u00b9\u00c2\u00c8\u00cc"+
- "\u00d1\u00d7\u00da\u00dd\u00e0\u00e3\u00ed\u00f5\u00f7\u00fd\u00ff\u0105"+
- "\u0109\u010c\u0110\u0116\u0124\u0127\u012d\u013d\u0140\u0143\u0145\u0149"+
- "\u014b\u0150\u0152\u0155\u0161\u0163\u0171\u0173\u0178\u017b\u0190";
+ "\u0114\3\2\2\2\u0116\u0115\3\2\2\2\u0117\67\3\2\2\2\u0118\u0126\7^\2\2"+
+ "\u0119\u0126\7c\2\2\u011a\u0126\7`\2\2\u011b\u0126\7d\2\2\u011c\u0126"+
+ "\7e\2\2\u011d\u0126\7j\2\2\u011e\u0126\7k\2\2\u011f\u0126\7l\2\2\u0120"+
+ "\u0126\7m\2\2\u0121\u0126\7n\2\2\u0122\u0126\7o\2\2\u0123\u0126\7p\2\2"+
+ "\u0124\u0126\7q\2\2\u0125\u0118\3\2\2\2\u0125\u0119\3\2\2\2\u0125\u011a"+
+ "\3\2\2\2\u0125\u011b\3\2\2\2\u0125\u011c\3\2\2\2\u0125\u011d\3\2\2\2\u0125"+
+ "\u011e\3\2\2\2\u0125\u011f\3\2\2\2\u0125\u0120\3\2\2\2\u0125\u0121\3\2"+
+ "\2\2\u0125\u0122\3\2\2\2\u0125\u0123\3\2\2\2\u0125\u0124\3\2\2\2\u0126"+
+ "9\3\2\2\2\u0127\u0129\5\66\34\2\u0128\u0127\3\2\2\2\u0128\u0129\3\2\2"+
+ "\2\u0129\u012a\3\2\2\2\u012a\u012f\58\35\2\u012b\u012c\58\35\2\u012c\u012d"+
+ "\5\66\34\2\u012d\u012f\3\2\2\2\u012e\u0128\3\2\2\2\u012e\u012b\3\2\2\2"+
+ "\u012f;\3\2\2\2\u0130\u0131\t\t\2\2\u0131=\3\2\2\2\u0132\u0133\t\n\2\2"+
+ "\u0133?\3\2\2\2\u0134\u0135\t\13\2\2\u0135A\3\2\2\2\u0136\u0137\t\f\2"+
+ "\2\u0137C\3\2\2\2\u0138\u0146\5B\"\2\u0139\u0147\5<\37\2\u013a\u0147\5"+
+ "@!\2\u013b\u0147\5> \2\u013c\u013e\5:\36\2\u013d\u013f\5,\27\2\u013e\u013d"+
+ "\3\2\2\2\u013e\u013f\3\2\2\2\u013f\u0145\3\2\2\2\u0140\u0142\5,\27\2\u0141"+
+ "\u0140\3\2\2\2\u0141\u0142\3\2\2\2\u0142\u0143\3\2\2\2\u0143\u0145\5:"+
+ "\36\2\u0144\u013c\3\2\2\2\u0144\u0141\3\2\2\2\u0145\u0147\3\2\2\2\u0146"+
+ "\u0139\3\2\2\2\u0146\u013a\3\2\2\2\u0146\u013b\3\2\2\2\u0146\u0144\3\2"+
+ "\2\2\u0147\u0157\3\2\2\2\u0148\u014a\7K\2\2\u0149\u014b\7(\2\2\u014a\u0149"+
+ "\3\2\2\2\u014a\u014b\3\2\2\2\u014b\u014d\3\2\2\2\u014c\u0148\3\2\2\2\u014c"+
+ "\u014d\3\2\2\2\u014d\u014e\3\2\2\2\u014e\u0157\7\16\2\2\u014f\u0151\7"+
+ "K\2\2\u0150\u0152\7(\2\2\u0151\u0150\3\2\2\2\u0151\u0152\3\2\2\2\u0152"+
+ "\u0154\3\2\2\2\u0153\u014f\3\2\2\2\u0153\u0154\3\2\2\2\u0154\u0155\3\2"+
+ "\2\2\u0155\u0157\7\17\2\2\u0156\u0138\3\2\2\2\u0156\u014c\3\2\2\2\u0156"+
+ "\u0153\3\2\2\2\u0157E\3\2\2\2\u0158\u0159\t\r\2\2\u0159G\3\2\2\2\u015a"+
+ "\u015b\t\16\2\2\u015bI\3\2\2\2\u015c\u015d\5F$\2\u015d\u0164\5\f\7\2\u015e"+
+ "\u0163\5$\23\2\u015f\u0163\5.\30\2\u0160\u0163\5\"\22\2\u0161\u0163\5"+
+ "\20\t\2\u0162\u015e\3\2\2\2\u0162\u015f\3\2\2\2\u0162\u0160\3\2\2\2\u0162"+
+ "\u0161\3\2\2\2\u0163\u0166\3\2\2\2\u0164\u0162\3\2\2\2\u0164\u0165\3\2"+
+ "\2\2\u0165\u0167\3\2\2\2\u0166\u0164\3\2\2\2\u0167\u0168\5\64\33\2\u0168"+
+ "K\3\2\2\2\u0169\u016a\5F$\2\u016a\u0174\5\f\7\2\u016b\u0173\5\62\32\2"+
+ "\u016c\u0173\5\"\22\2\u016d\u0173\5D#\2\u016e\u0173\5$\23\2\u016f\u0173"+
+ "\5,\27\2\u0170\u0173\5\20\t\2\u0171\u0173\5\60\31\2\u0172\u016b\3\2\2"+
+ "\2\u0172\u016c\3\2\2\2\u0172\u016d\3\2\2\2\u0172\u016e\3\2\2\2\u0172\u016f"+
+ "\3\2\2\2\u0172\u0170\3\2\2\2\u0172\u0171\3\2\2\2\u0173\u0176\3\2\2\2\u0174"+
+ "\u0172\3\2\2\2\u0174\u0175\3\2\2\2\u0175\u017c\3\2\2\2\u0176\u0174\3\2"+
+ "\2\2\u0177\u0179\7\b\2\2\u0178\u017a\7O\2\2\u0179\u0178\3\2\2\2\u0179"+
+ "\u017a\3\2\2\2\u017a\u017b\3\2\2\2\u017b\u017d\7P\2\2\u017c\u0177\3\2"+
+ "\2\2\u017c\u017d\3\2\2\2\u017d\u017e\3\2\2\2\u017e\u017f\5\64\33\2\u017f"+
+ "M\3\2\2\2\u0180\u0181\7\u0081\2\2\u0181\u0182\5\f\7\2\u0182\u0183\5&\24"+
+ "\2\u0183\u0184\5\64\33\2\u0184O\3\2\2\2\u0185\u0186\7\u0083\2\2\u0186"+
+ "\u0187\5\f\7\2\u0187\u0188\5\20\t\2\u0188\u0189\5\64\33\2\u0189Q\3\2\2"+
+ "\2\u018a\u0192\7]\2\2\u018b\u0192\5J&\2\u018c\u0192\5L\'\2\u018d\u0192"+
+ "\5N(\2\u018e\u0192\5P)\2\u018f\u0192\5H%\2\u0190\u0192\5\64\33\2\u0191"+
+ "\u018a\3\2\2\2\u0191\u018b\3\2\2\2\u0191\u018c\3\2\2\2\u0191\u018d\3\2"+
+ "\2\2\u0191\u018e\3\2\2\2\u0191\u018f\3\2\2\2\u0191\u0190\3\2\2\2\u0192"+
+ "S\3\2\2\28WZbejm\u0082\u0088\u008c\u008e\u0092\u0097\u009c\u00b2\u00b6"+
+ "\u00b9\u00c2\u00c8\u00cc\u00d1\u00d7\u00da\u00dd\u00e0\u00e3\u00ed\u00f5"+
+ "\u00f7\u00fd\u00ff\u0105\u0109\u010c\u0110\u0116\u0125\u0128\u012e\u013e"+
+ "\u0141\u0144\u0146\u014a\u014c\u0151\u0153\u0156\u0162\u0164\u0172\u0174"+
+ "\u0179\u017c\u0191";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
@@ -3457,4 +3477,4 @@ public final ItemContext item() throws RecognitionException {
_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
}
}
-}
\ No newline at end of file
+}
diff --git a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParserBaseVisitor.java b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParserBaseVisitor.java
index a2be7694..6f9fa230 100644
--- a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParserBaseVisitor.java
+++ b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParserBaseVisitor.java
@@ -272,6 +272,13 @@ public class copybookParserBaseVisitor extends AbstractParseTreeVisitor im
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitPrecision9DecimalScaled(copybookParser.Precision9DecimalScaledContext ctx) { return visitChildren(ctx); }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.
+ */
+ @Override public T visitPrecision9DecimalScaledWithV(copybookParser.Precision9DecimalScaledWithVContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
diff --git a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParserVisitor.java b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParserVisitor.java
index edbe0721..93ef1e7e 100644
--- a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParserVisitor.java
+++ b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParserVisitor.java
@@ -70,7 +70,7 @@ public interface copybookParserVisitor extends ParseTreeVisitor {
T visitThru(copybookParser.ThruContext ctx);
/**
* Visit a parse tree produced by the {@code values}
- * labeled alternative in {@link copybookParser#plusMinusplusMinusprecision9precision9precision9precision9precision9precision9precision9precision9precision9precision9precision9precision9signPrecision9signPrecision9}.
+ * labeled alternative in {@link copybookParser#plusMinusplusMinusprecision9precision9precision9precision9precision9precision9precision9precision9precision9precision9precision9precision9precision9signPrecision9signPrecision9}.
* @param ctx the parse tree
* @return the visitor result
*/
@@ -246,6 +246,13 @@ public interface copybookParserVisitor extends ParseTreeVisitor {
* @return the visitor result
*/
T visitPrecision9DecimalScaled(copybookParser.Precision9DecimalScaledContext ctx);
+ /**
+ * Visit a parse tree produced by the {@code precision9DecimalScaledWithV}
+ * labeled alternative in {@link copybookParser#precision9}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ T visitPrecision9DecimalScaledWithV(copybookParser.Precision9DecimalScaledWithVContext ctx);
/**
* Visit a parse tree produced by the {@code precision9Scaled}
* labeled alternative in {@link copybookParser#precision9}.
diff --git a/cobol-parser/src/test/scala/za/co/absa/cobrix/cobol/parser/parse/DataSizeSpec.scala b/cobol-parser/src/test/scala/za/co/absa/cobrix/cobol/parser/parse/DataSizeSpec.scala
index 8ed60ac8..083ca342 100644
--- a/cobol-parser/src/test/scala/za/co/absa/cobrix/cobol/parser/parse/DataSizeSpec.scala
+++ b/cobol-parser/src/test/scala/za/co/absa/cobrix/cobol/parser/parse/DataSizeSpec.scala
@@ -115,6 +115,11 @@ class DataSizeSpec extends AnyFunSuite {
assert(decimalLength("ZZZ99(5)") == (9, 0, 0))
assert(decimalLength("ZZZ999") == (6, 0, 0))
assert(decimalLength("ZZZ999PPP") == (6, 0, 3))
+ assert(decimalLength("9(7)PPP") == (7, 0, 3))
+ assert(decimalLength("9(7)VPPP999") == (7, 3, -3))
+ assert(decimalLength("9(7)PPPV") == (7, 0, 3))
+ assert(decimalLength("S9(7)PPP") == (7, 0, 3))
+ assert(decimalLength("S9(7)PPPV") == (7, 0, 3))
assert(decimalLength("ZZZ999V99") == (6, 2, 0))
assert(decimalLength("ZZZ999VPP99") == (6, 2, -2))
assert(decimalLength("ZZZ999.99") == (6, 2, 0))
diff --git a/data/test24_copybook.cob b/data/test24_copybook.cob
index fd4ca862..669fb2f4 100644
--- a/data/test24_copybook.cob
+++ b/data/test24_copybook.cob
@@ -238,7 +238,7 @@
10 COMMON-UPI5DISP PIC S9(5)PPP.
10 COMMON-UPC1BIN PIC SPPP9 COMP.
- 10 COMMON-UPI1BIN PIC S9PPP COMP.
+ 10 COMMON-UPI1BIN PIC S9PPPV COMP.
10 COMMON-UPC3BIN PIC SPPP9(3) COMP.
10 COMMON-UPI3BIN PIC S9(3)PPP COMP.
10 COMMON-UPC5BIN PIC SPPP9(5) COMP.