diff --git a/src/main/antlr4/GobraLexer.g4 b/src/main/antlr4/GobraLexer.g4
index bdd27a857..1ab36cbf9 100644
--- a/src/main/antlr4/GobraLexer.g4
+++ b/src/main/antlr4/GobraLexer.g4
@@ -73,6 +73,7 @@ NONE : 'none' -> mode(NLSEMI);
PRED : 'pred';
TYPE_OF : 'typeOf'-> mode(NLSEMI);
IS_COMPARABLE: 'isComparable'-> mode(NLSEMI);
+LOW : 'low'-> mode(NLSEMI);
SHARE : 'share';
ADDR_MOD : '@'-> mode(NLSEMI);
DOT_DOT : '..';
diff --git a/src/main/antlr4/GobraParser.g4 b/src/main/antlr4/GobraParser.g4
index 3f08a2fcb..8fe817d16 100644
--- a/src/main/antlr4/GobraParser.g4
+++ b/src/main/antlr4/GobraParser.g4
@@ -78,6 +78,7 @@ ghostPrimaryExpr: range
| typeOf
| typeExpr
| isComparable
+ | low
| old
| before
| sConversion
@@ -122,6 +123,8 @@ before: BEFORE L_PAREN expression R_PAREN;
isComparable: IS_COMPARABLE L_PAREN expression R_PAREN;
+low: LOW L_PAREN expression R_PAREN;
+
typeOf: TYPE_OF L_PAREN expression R_PAREN;
access: ACCESS L_PAREN expression (COMMA expression)? R_PAREN;
@@ -433,13 +436,13 @@ implicitArray: L_BRACKET ELLIPSIS R_BRACKET elementType;
// distinguish low,high cap
slice_:
L_BRACKET (
- low? COLON high?
- | low? COLON high COLON cap
+ lowSliceArgument? COLON highSliceArgument?
+ | lowSliceArgument? COLON highSliceArgument COLON capSliceArgument
) R_BRACKET;
-low : expression;
-high: expression;
-cap: expression;
+lowSliceArgument : expression;
+highSliceArgument: expression;
+capSliceArgument: expression;
diff --git a/src/main/java/viper/gobra/frontend/GobraLexer.java b/src/main/java/viper/gobra/frontend/GobraLexer.java
index 0d4c2dd0e..f177cedb8 100644
--- a/src/main/java/viper/gobra/frontend/GobraLexer.java
+++ b/src/main/java/viper/gobra/frontend/GobraLexer.java
@@ -1,3 +1,4 @@
+// Generated from src/main/antlr4/GobraLexer.g4 by ANTLR 4.9.2
package viper.gobra.frontend;
import org.antlr.v4.runtime.Lexer;
import org.antlr.v4.runtime.CharStream;
@@ -10,7 +11,7 @@
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class GobraLexer extends Lexer {
- static { RuntimeMetaData.checkVersion("4.9.1", RuntimeMetaData.VERSION); }
+ static { RuntimeMetaData.checkVersion("4.9.2", RuntimeMetaData.VERSION); }
protected static final DFA[] _decisionToDFA;
protected static final PredictionContextCache _sharedContextCache =
@@ -23,25 +24,25 @@ public class GobraLexer extends Lexer {
UNION=31, INTERSECTION=32, SETMINUS=33, IMPLIES=34, WAND=35, APPLY=36,
QMARK=37, L_PRED=38, R_PRED=39, SEQ=40, SET=41, MSET=42, DICT=43, OPT=44,
LEN=45, NEW=46, MAKE=47, CAP=48, SOME=49, GET=50, DOM=51, AXIOM=52, ADT=53,
- MATCH=54, NONE=55, PRED=56, TYPE_OF=57, IS_COMPARABLE=58, SHARE=59, ADDR_MOD=60,
- DOT_DOT=61, SHARED=62, EXCLUSIVE=63, PREDICATE=64, WRITEPERM=65, NOPERM=66,
- TRUSTED=67, OUTLINE=68, INIT_POST=69, IMPORT_PRE=70, PROOF=71, GHOST_EQUALS=72,
- GHOST_NOT_EQUALS=73, WITH=74, BREAK=75, DEFAULT=76, FUNC=77, INTERFACE=78,
- SELECT=79, CASE=80, DEFER=81, GO=82, MAP=83, STRUCT=84, CHAN=85, ELSE=86,
- GOTO=87, PACKAGE=88, SWITCH=89, CONST=90, FALLTHROUGH=91, IF=92, RANGE=93,
- TYPE=94, CONTINUE=95, FOR=96, IMPORT=97, RETURN=98, VAR=99, NIL_LIT=100,
- IDENTIFIER=101, L_PAREN=102, R_PAREN=103, L_CURLY=104, R_CURLY=105, L_BRACKET=106,
- R_BRACKET=107, ASSIGN=108, COMMA=109, SEMI=110, COLON=111, DOT=112, PLUS_PLUS=113,
- MINUS_MINUS=114, DECLARE_ASSIGN=115, ELLIPSIS=116, LOGICAL_OR=117, LOGICAL_AND=118,
- EQUALS=119, NOT_EQUALS=120, LESS=121, LESS_OR_EQUALS=122, GREATER=123,
- GREATER_OR_EQUALS=124, OR=125, DIV=126, MOD=127, LSHIFT=128, RSHIFT=129,
- BIT_CLEAR=130, EXCLAMATION=131, PLUS=132, MINUS=133, CARET=134, STAR=135,
- AMPERSAND=136, RECEIVE=137, DECIMAL_LIT=138, BINARY_LIT=139, OCTAL_LIT=140,
- HEX_LIT=141, HEX_FLOAT_LIT=142, IMAGINARY_LIT=143, RUNE_LIT=144, BYTE_VALUE=145,
- OCTAL_BYTE_VALUE=146, HEX_BYTE_VALUE=147, LITTLE_U_VALUE=148, BIG_U_VALUE=149,
- RAW_STRING_LIT=150, INTERPRETED_STRING_LIT=151, WS=152, COMMENT=153, TERMINATOR=154,
- LINE_COMMENT=155, WS_NLSEMI=156, COMMENT_NLSEMI=157, LINE_COMMENT_NLSEMI=158,
- EOS=159, OTHER=160;
+ MATCH=54, NONE=55, PRED=56, TYPE_OF=57, IS_COMPARABLE=58, LOW=59, SHARE=60,
+ ADDR_MOD=61, DOT_DOT=62, SHARED=63, EXCLUSIVE=64, PREDICATE=65, WRITEPERM=66,
+ NOPERM=67, TRUSTED=68, OUTLINE=69, INIT_POST=70, IMPORT_PRE=71, PROOF=72,
+ GHOST_EQUALS=73, GHOST_NOT_EQUALS=74, WITH=75, BREAK=76, DEFAULT=77, FUNC=78,
+ INTERFACE=79, SELECT=80, CASE=81, DEFER=82, GO=83, MAP=84, STRUCT=85,
+ CHAN=86, ELSE=87, GOTO=88, PACKAGE=89, SWITCH=90, CONST=91, FALLTHROUGH=92,
+ IF=93, RANGE=94, TYPE=95, CONTINUE=96, FOR=97, IMPORT=98, RETURN=99, VAR=100,
+ NIL_LIT=101, IDENTIFIER=102, L_PAREN=103, R_PAREN=104, L_CURLY=105, R_CURLY=106,
+ L_BRACKET=107, R_BRACKET=108, ASSIGN=109, COMMA=110, SEMI=111, COLON=112,
+ DOT=113, PLUS_PLUS=114, MINUS_MINUS=115, DECLARE_ASSIGN=116, ELLIPSIS=117,
+ LOGICAL_OR=118, LOGICAL_AND=119, EQUALS=120, NOT_EQUALS=121, LESS=122,
+ LESS_OR_EQUALS=123, GREATER=124, GREATER_OR_EQUALS=125, OR=126, DIV=127,
+ MOD=128, LSHIFT=129, RSHIFT=130, BIT_CLEAR=131, EXCLAMATION=132, PLUS=133,
+ MINUS=134, CARET=135, STAR=136, AMPERSAND=137, RECEIVE=138, DECIMAL_LIT=139,
+ BINARY_LIT=140, OCTAL_LIT=141, HEX_LIT=142, HEX_FLOAT_LIT=143, IMAGINARY_LIT=144,
+ RUNE_LIT=145, BYTE_VALUE=146, OCTAL_BYTE_VALUE=147, HEX_BYTE_VALUE=148,
+ LITTLE_U_VALUE=149, BIG_U_VALUE=150, RAW_STRING_LIT=151, INTERPRETED_STRING_LIT=152,
+ WS=153, COMMENT=154, TERMINATOR=155, LINE_COMMENT=156, WS_NLSEMI=157,
+ COMMENT_NLSEMI=158, LINE_COMMENT_NLSEMI=159, EOS=160, OTHER=161;
public static final int
NLSEMI=1;
public static String[] channelNames = {
@@ -61,7 +62,7 @@ private static String[] makeRuleNames() {
"INTERSECTION", "SETMINUS", "IMPLIES", "WAND", "APPLY", "QMARK", "L_PRED",
"R_PRED", "SEQ", "SET", "MSET", "DICT", "OPT", "LEN", "NEW", "MAKE",
"CAP", "SOME", "GET", "DOM", "AXIOM", "ADT", "MATCH", "NONE", "PRED",
- "TYPE_OF", "IS_COMPARABLE", "SHARE", "ADDR_MOD", "DOT_DOT", "SHARED",
+ "TYPE_OF", "IS_COMPARABLE", "LOW", "SHARE", "ADDR_MOD", "DOT_DOT", "SHARED",
"EXCLUSIVE", "PREDICATE", "WRITEPERM", "NOPERM", "TRUSTED", "OUTLINE",
"INIT_POST", "IMPORT_PRE", "PROOF", "GHOST_EQUALS", "GHOST_NOT_EQUALS",
"WITH", "BREAK", "DEFAULT", "FUNC", "INTERFACE", "SELECT", "CASE", "DEFER",
@@ -95,12 +96,12 @@ private static String[] makeLiteralNames() {
"'setminus'", "'==>'", "'--*'", "'apply'", "'?'", "'!<'", "'!>'", "'seq'",
"'set'", "'mset'", "'dict'", "'option'", "'len'", "'new'", "'make'",
"'cap'", "'some'", "'get'", "'domain'", "'axiom'", "'adt'", "'match'",
- "'none'", "'pred'", "'typeOf'", "'isComparable'", "'share'", "'@'", "'..'",
- "'shared'", "'exclusive'", "'predicate'", "'writePerm'", "'noPerm'",
- "'trusted'", "'outline'", "'initEnsures'", "'importRequires'", "'proof'",
- "'==='", "'!=='", "'with'", "'break'", "'default'", "'func'", "'interface'",
- "'select'", "'case'", "'defer'", "'go'", "'map'", "'struct'", "'chan'",
- "'else'", "'goto'", "'package'", "'switch'", "'const'", "'fallthrough'",
+ "'none'", "'pred'", "'typeOf'", "'isComparable'", "'low'", "'share'",
+ "'@'", "'..'", "'shared'", "'exclusive'", "'predicate'", "'writePerm'",
+ "'noPerm'", "'trusted'", "'outline'", "'initEnsures'", "'importRequires'",
+ "'proof'", "'==='", "'!=='", "'with'", "'break'", "'default'", "'func'",
+ "'interface'", "'select'", "'case'", "'defer'", "'go'", "'map'", "'struct'",
+ "'chan'", "'else'", "'goto'", "'package'", "'switch'", "'const'", "'fallthrough'",
"'if'", "'range'", "'type'", "'continue'", "'for'", "'import'", "'return'",
"'var'", "'nil'", null, "'('", "')'", "'{'", "'}'", "'['", "']'", "'='",
"','", "';'", "':'", "'.'", "'++'", "'--'", "':='", "'...'", "'||'",
@@ -118,7 +119,7 @@ private static String[] makeSymbolicNames() {
"INTERSECTION", "SETMINUS", "IMPLIES", "WAND", "APPLY", "QMARK", "L_PRED",
"R_PRED", "SEQ", "SET", "MSET", "DICT", "OPT", "LEN", "NEW", "MAKE",
"CAP", "SOME", "GET", "DOM", "AXIOM", "ADT", "MATCH", "NONE", "PRED",
- "TYPE_OF", "IS_COMPARABLE", "SHARE", "ADDR_MOD", "DOT_DOT", "SHARED",
+ "TYPE_OF", "IS_COMPARABLE", "LOW", "SHARE", "ADDR_MOD", "DOT_DOT", "SHARED",
"EXCLUSIVE", "PREDICATE", "WRITEPERM", "NOPERM", "TRUSTED", "OUTLINE",
"INIT_POST", "IMPORT_PRE", "PROOF", "GHOST_EQUALS", "GHOST_NOT_EQUALS",
"WITH", "BREAK", "DEFAULT", "FUNC", "INTERFACE", "SELECT", "CASE", "DEFER",
@@ -214,7 +215,7 @@ private boolean DECIMAL_FLOAT_LIT_sempred(RuleContext _localctx, int predIndex)
}
public static final String _serializedATN =
- "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\u00a2\u05db\b\1\b"+
+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\u00a3\u05e3\b\1\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"+
@@ -238,676 +239,679 @@ private boolean DECIMAL_FLOAT_LIT_sempred(RuleContext _localctx, int predIndex)
"\4\u00a0\t\u00a0\4\u00a1\t\u00a1\4\u00a2\t\u00a2\4\u00a3\t\u00a3\4\u00a4"+
"\t\u00a4\4\u00a5\t\u00a5\4\u00a6\t\u00a6\4\u00a7\t\u00a7\4\u00a8\t\u00a8"+
"\4\u00a9\t\u00a9\4\u00aa\t\u00aa\4\u00ab\t\u00ab\4\u00ac\t\u00ac\4\u00ad"+
- "\t\u00ad\4\u00ae\t\u00ae\3\2\3\2\5\2\u0161\n\2\3\2\3\2\3\3\3\3\3\3\3\3"+
- "\5\3\u0169\n\3\3\3\5\3\u016c\n\3\3\3\5\3\u016f\n\3\3\3\3\3\3\3\3\3\5\3"+
- "\u0175\n\3\5\3\u0177\n\3\3\4\3\4\3\4\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\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\7"+
- "\3\b\3\b\3\b\3\b\3\b\3\b\3\b\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\13\3\13\3\13\3\13\3\13\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\f\3\r\3\r\3\r\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\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\20\3\20\3\20\3\21\3\21\3\21\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\23\3\23\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\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\30\3\30\3\30\3\30\3\30\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\33\3\33"+
- "\3\33\3\33\3\34\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\36\3\36\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\60\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\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\64\3\64\3\64\3"+
- "\64\3\64\3\64\3\64\3\64\3\64\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\66\3\66\3\67\3\67\3\67\3\67\3\67\3\67\3\67\3\67\3"+
- "8\38\38\38\38\38\38\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?\3?\3?\3?\3?\3?\3@\3@\3@\3@\3@\3@\3@\3@\3@\3@\3A\3A\3A\3"+
- "A\3A\3A\3A\3A\3A\3A\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3C\3C\3C\3C\3"+
- "C\3C\3C\3C\3C\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3E\3E\3E\3E\3E\3E\3E\3E\3"+
- "F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3"+
- "G\3G\3G\3G\3H\3H\3H\3H\3H\3H\3I\3I\3I\3I\3J\3J\3J\3J\3K\3K\3K\3K\3K\3"+
- "L\3L\3L\3L\3L\3L\3L\3L\3M\3M\3M\3M\3M\3M\3M\3M\3N\3N\3N\3N\3N\3O\3O\3"+
- "O\3O\3O\3O\3O\3O\3O\3O\3P\3P\3P\3P\3P\3P\3P\3Q\3Q\3Q\3Q\3Q\3R\3R\3R\3"+
- "R\3R\3R\3S\3S\3S\3T\3T\3T\3T\3U\3U\3U\3U\3U\3U\3U\3V\3V\3V\3V\3V\3W\3"+
- "W\3W\3W\3W\3X\3X\3X\3X\3X\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Z\3Z\3Z\3Z\3Z\3Z\3"+
- "Z\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`\3a\3a\3a\3a\3b\3b\3b\3b\3b\3b\3b\3c\3c\3c\3c\3c\3c\3c\3c"+
- "\3c\3d\3d\3d\3d\3e\3e\3e\3e\3e\3e\3f\3f\3f\7f\u0426\nf\ff\16f\u0429\13"+
- "f\3f\3f\3g\3g\3h\3h\3h\3h\3i\3i\3j\3j\3j\3j\3k\3k\3l\3l\3l\3l\3m\3m\3"+
- "n\3n\3o\3o\3p\3p\3q\3q\3r\3r\3r\3r\3r\3s\3s\3s\3s\3s\3t\3t\3t\3u\3u\3"+
- "u\3u\3v\3v\3v\3w\3w\3w\3x\3x\3x\3y\3y\3y\3z\3z\3{\3{\3{\3|\3|\3}\3}\3"+
- "}\3~\3~\3\177\3\177\3\u0080\3\u0080\3\u0081\3\u0081\3\u0081\3\u0082\3"+
- "\u0082\3\u0082\3\u0083\3\u0083\3\u0083\3\u0084\3\u0084\3\u0085\3\u0085"+
- "\3\u0086\3\u0086\3\u0087\3\u0087\3\u0088\3\u0088\3\u0089\3\u0089\3\u008a"+
- "\3\u008a\3\u008a\3\u008b\3\u008b\3\u008b\5\u008b\u0491\n\u008b\3\u008b"+
- "\7\u008b\u0494\n\u008b\f\u008b\16\u008b\u0497\13\u008b\5\u008b\u0499\n"+
- "\u008b\3\u008b\3\u008b\3\u008c\3\u008c\3\u008c\5\u008c\u04a0\n\u008c\3"+
- "\u008c\6\u008c\u04a3\n\u008c\r\u008c\16\u008c\u04a4\3\u008c\3\u008c\3"+
- "\u008d\3\u008d\5\u008d\u04ab\n\u008d\3\u008d\5\u008d\u04ae\n\u008d\3\u008d"+
- "\6\u008d\u04b1\n\u008d\r\u008d\16\u008d\u04b2\3\u008d\3\u008d\3\u008e"+
- "\3\u008e\3\u008e\5\u008e\u04ba\n\u008e\3\u008e\6\u008e\u04bd\n\u008e\r"+
- "\u008e\16\u008e\u04be\3\u008e\3\u008e\3\u008f\3\u008f\3\u008f\3\u008f"+
- "\3\u008f\3\u0090\5\u0090\u04c9\n\u0090\3\u0090\6\u0090\u04cc\n\u0090\r"+
- "\u0090\16\u0090\u04cd\3\u0090\3\u0090\5\u0090\u04d2\n\u0090\3\u0090\7"+
- "\u0090\u04d5\n\u0090\f\u0090\16\u0090\u04d8\13\u0090\5\u0090\u04da\n\u0090"+
- "\3\u0090\3\u0090\3\u0090\5\u0090\u04df\n\u0090\3\u0090\7\u0090\u04e2\n"+
- "\u0090\f\u0090\16\u0090\u04e5\13\u0090\5\u0090\u04e7\n\u0090\3\u0091\3"+
- "\u0091\3\u0091\3\u0091\3\u0092\3\u0092\3\u0092\3\u0092\3\u0092\5\u0092"+
- "\u04f2\n\u0092\3\u0092\3\u0092\3\u0092\3\u0092\3\u0093\3\u0093\3\u0093"+
- "\5\u0093\u04fb\n\u0093\3\u0093\3\u0093\3\u0094\3\u0094\3\u0094\3\u0094"+
- "\3\u0095\3\u0095\5\u0095\u0505\n\u0095\3\u0096\3\u0096\3\u0096\3\u0096"+
- "\3\u0096\3\u0097\3\u0097\3\u0097\3\u0097\3\u0097\3\u0098\3\u0098\3\u0098"+
- "\3\u0098\3\u0098\3\u0098\3\u0098\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099"+
- "\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099\3\u009a\3\u009a\7\u009a"+
- "\u0525\n\u009a\f\u009a\16\u009a\u0528\13\u009a\3\u009a\3\u009a\3\u009a"+
- "\3\u009a\3\u009b\3\u009b\3\u009b\7\u009b\u0531\n\u009b\f\u009b\16\u009b"+
- "\u0534\13\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009c\6\u009c\u053b"+
- "\n\u009c\r\u009c\16\u009c\u053c\3\u009c\3\u009c\3\u009d\3\u009d\3\u009d"+
- "\3\u009d\7\u009d\u0545\n\u009d\f\u009d\16\u009d\u0548\13\u009d\3\u009d"+
- "\3\u009d\3\u009d\3\u009d\3\u009d\3\u009e\6\u009e\u0550\n\u009e\r\u009e"+
- "\16\u009e\u0551\3\u009e\3\u009e\3\u009f\3\u009f\3\u009f\3\u009f\7\u009f"+
- "\u055a\n\u009f\f\u009f\16\u009f\u055d\13\u009f\3\u009f\3\u009f\3\u00a0"+
- "\3\u00a0\3\u00a0\3\u00a0\5\u00a0\u0565\n\u00a0\3\u00a1\3\u00a1\3\u00a1"+
- "\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1"+
- "\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1"+
- "\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\5\u00a1\u0581\n\u00a1\3\u00a2"+
- "\3\u00a2\5\u00a2\u0585\n\u00a2\3\u00a2\7\u00a2\u0588\n\u00a2\f\u00a2\16"+
- "\u00a2\u058b\13\u00a2\3\u00a3\3\u00a3\3\u00a4\3\u00a4\3\u00a5\3\u00a5"+
- "\3\u00a6\3\u00a6\5\u00a6\u0595\n\u00a6\3\u00a6\3\u00a6\3\u00a7\3\u00a7"+
- "\5\u00a7\u059b\n\u00a7\3\u00a8\3\u00a8\3\u00a9\3\u00a9\3\u00aa\6\u00aa"+
- "\u05a2\n\u00aa\r\u00aa\16\u00aa\u05a3\3\u00aa\3\u00aa\3\u00ab\3\u00ab"+
- "\3\u00ab\3\u00ab\7\u00ab\u05ac\n\u00ab\f\u00ab\16\u00ab\u05af\13\u00ab"+
- "\3\u00ab\3\u00ab\3\u00ab\3\u00ab\3\u00ab\3\u00ac\3\u00ac\3\u00ac\3\u00ac"+
- "\7\u00ac\u05ba\n\u00ac\f\u00ac\16\u00ac\u05bd\13\u00ac\3\u00ac\3\u00ac"+
- "\3\u00ad\6\u00ad\u05c2\n\u00ad\r\u00ad\16\u00ad\u05c3\3\u00ad\3\u00ad"+
- "\3\u00ad\3\u00ad\3\u00ad\7\u00ad\u05cb\n\u00ad\f\u00ad\16\u00ad\u05ce"+
- "\13\u00ad\3\u00ad\3\u00ad\3\u00ad\5\u00ad\u05d3\n\u00ad\3\u00ad\3\u00ad"+
- "\3\u00ae\3\u00ae\3\u00ae\3\u00ae\3\u00ae\5\u0546\u05ad\u05cc\2\u00af\4"+
- "\3\6\4\b\5\n\6\f\7\16\b\20\t\22\n\24\13\26\f\30\r\32\16\34\17\36\20 \21"+
- "\"\22$\23&\24(\25*\26,\27.\30\60\31\62\32\64\33\66\348\35:\36<\37> @!"+
- "B\"D#F$H%J&L\'N(P)R*T+V,X-Z.\\/^\60`\61b\62d\63f\64h\65j\66l\67n8p9r:"+
- "t;v|?~@\u0080A\u0082B\u0084C\u0086D\u0088E\u008aF\u008cG\u008eH\u0090"+
- "I\u0092J\u0094K\u0096L\u0098M\u009aN\u009cO\u009eP\u00a0Q\u00a2R\u00a4"+
- "S\u00a6T\u00a8U\u00aaV\u00acW\u00aeX\u00b0Y\u00b2Z\u00b4[\u00b6\\\u00b8"+
- "]\u00ba^\u00bc_\u00be`\u00c0a\u00c2b\u00c4c\u00c6d\u00c8e\u00caf\u00cc"+
- "g\u00ceh\u00d0i\u00d2j\u00d4k\u00d6l\u00d8m\u00dan\u00dco\u00dep\u00e0"+
- "q\u00e2r\u00e4s\u00e6t\u00e8u\u00eav\u00ecw\u00eex\u00f0y\u00f2z\u00f4"+
- "{\u00f6|\u00f8}\u00fa~\u00fc\177\u00fe\u0080\u0100\u0081\u0102\u0082\u0104"+
- "\u0083\u0106\u0084\u0108\u0085\u010a\u0086\u010c\u0087\u010e\u0088\u0110"+
- "\u0089\u0112\u008a\u0114\u008b\u0116\u008c\u0118\u008d\u011a\u008e\u011c"+
- "\u008f\u011e\u0090\u0120\2\u0122\2\u0124\u0091\u0126\2\u0128\u0092\u012a"+
- "\u0093\u012c\u0094\u012e\u0095\u0130\u0096\u0132\u0097\u0134\u0098\u0136"+
- "\u0099\u0138\u009a\u013a\u009b\u013c\u009c\u013e\u009d\u0140\2\u0142\2"+
- "\u0144\2\u0146\2\u0148\2\u014a\2\u014c\2\u014e\2\u0150\2\u0152\2\u0154"+
- "\u009e\u0156\u009f\u0158\u00a0\u015a\u00a1\u015c\u00a2\4\2\3\23\3\2\63"+
- ";\3\2\62;\4\2DDdd\4\2QQqq\4\2ZZzz\4\2RRrr\4\2--//\3\2bb\4\2$$^^\4\2\13"+
- "\13\"\"\4\2\f\f\17\17\5\2\f\f\17\17))\13\2$$))^^cdhhppttvvxx\3\2\629\5"+
- "\2\62;CHch\3\2\62\63\4\2GGgg\49\2\62\2;\2\u0662\2\u066b\2\u06f2\2\u06fb"+
- "\2\u07c2\2\u07cb\2\u0968\2\u0971\2\u09e8\2\u09f1\2\u0a68\2\u0a71\2\u0ae8"+
- "\2\u0af1\2\u0b68\2\u0b71\2\u0be8\2\u0bf1\2\u0c68\2\u0c71\2\u0ce8\2\u0cf1"+
- "\2\u0d68\2\u0d71\2\u0de8\2\u0df1\2\u0e52\2\u0e5b\2\u0ed2\2\u0edb\2\u0f22"+
- "\2\u0f2b\2\u1042\2\u104b\2\u1092\2\u109b\2\u17e2\2\u17eb\2\u1812\2\u181b"+
- "\2\u1948\2\u1951\2\u19d2\2\u19db\2\u1a82\2\u1a8b\2\u1a92\2\u1a9b\2\u1b52"+
- "\2\u1b5b\2\u1bb2\2\u1bbb\2\u1c42\2\u1c4b\2\u1c52\2\u1c5b\2\ua622\2\ua62b"+
- "\2\ua8d2\2\ua8db\2\ua902\2\ua90b\2\ua9d2\2\ua9db\2\ua9f2\2\ua9fb\2\uaa52"+
- "\2\uaa5b\2\uabf2\2\uabfb\2\uff12\2\uff1b\2\u04a2\3\u04ab\3\u1068\3\u1071"+
- "\3\u10f2\3\u10fb\3\u1138\3\u1141\3\u11d2\3\u11db\3\u12f2\3\u12fb\3\u1452"+
- "\3\u145b\3\u14d2\3\u14db\3\u1652\3\u165b\3\u16c2\3\u16cb\3\u1732\3\u173b"+
- "\3\u18e2\3\u18eb\3\u1c52\3\u1c5b\3\u1d52\3\u1d5b\3\u6a62\3\u6a6b\3\u6b52"+
- "\3\u6b5b\3\ud7d0\3\ud801\3\ue952\3\ue95b\3\u024b\2C\2\\\2c\2|\2\u00ac"+
- "\2\u00ac\2\u00b7\2\u00b7\2\u00bc\2\u00bc\2\u00c2\2\u00d8\2\u00da\2\u00f8"+
- "\2\u00fa\2\u02c3\2\u02c8\2\u02d3\2\u02e2\2\u02e6\2\u02ee\2\u02ee\2\u02f0"+
- "\2\u02f0\2\u0372\2\u0376\2\u0378\2\u0379\2\u037c\2\u037f\2\u0381\2\u0381"+
- "\2\u0388\2\u0388\2\u038a\2\u038c\2\u038e\2\u038e\2\u0390\2\u03a3\2\u03a5"+
- "\2\u03f7\2\u03f9\2\u0483\2\u048c\2\u0531\2\u0533\2\u0558\2\u055b\2\u055b"+
- "\2\u0563\2\u0589\2\u05d2\2\u05ec\2\u05f2\2\u05f4\2\u0622\2\u064c\2\u0670"+
- "\2\u0671\2\u0673\2\u06d5\2\u06d7\2\u06d7\2\u06e7\2\u06e8\2\u06f0\2\u06f1"+
- "\2\u06fc\2\u06fe\2\u0701\2\u0701\2\u0712\2\u0712\2\u0714\2\u0731\2\u074f"+
- "\2\u07a7\2\u07b3\2\u07b3\2\u07cc\2\u07ec\2\u07f6\2\u07f7\2\u07fc\2\u07fc"+
- "\2\u0802\2\u0817\2\u081c\2\u081c\2\u0826\2\u0826\2\u082a\2\u082a\2\u0842"+
- "\2\u085a\2\u0862\2\u086c\2\u08a2\2\u08b6\2\u08b8\2\u08bf\2\u0906\2\u093b"+
- "\2\u093f\2\u093f\2\u0952\2\u0952\2\u095a\2\u0963\2\u0973\2\u0982\2\u0987"+
- "\2\u098e\2\u0991\2\u0992\2\u0995\2\u09aa\2\u09ac\2\u09b2\2\u09b4\2\u09b4"+
- "\2\u09b8\2\u09bb\2\u09bf\2\u09bf\2\u09d0\2\u09d0\2\u09de\2\u09df\2\u09e1"+
- "\2\u09e3\2\u09f2\2\u09f3\2\u09fe\2\u09fe\2\u0a07\2\u0a0c\2\u0a11\2\u0a12"+
- "\2\u0a15\2\u0a2a\2\u0a2c\2\u0a32\2\u0a34\2\u0a35\2\u0a37\2\u0a38\2\u0a3a"+
- "\2\u0a3b\2\u0a5b\2\u0a5e\2\u0a60\2\u0a60\2\u0a74\2\u0a76\2\u0a87\2\u0a8f"+
- "\2\u0a91\2\u0a93\2\u0a95\2\u0aaa\2\u0aac\2\u0ab2\2\u0ab4\2\u0ab5\2\u0ab7"+
- "\2\u0abb\2\u0abf\2\u0abf\2\u0ad2\2\u0ad2\2\u0ae2\2\u0ae3\2\u0afb\2\u0afb"+
- "\2\u0b07\2\u0b0e\2\u0b11\2\u0b12\2\u0b15\2\u0b2a\2\u0b2c\2\u0b32\2\u0b34"+
- "\2\u0b35\2\u0b37\2\u0b3b\2\u0b3f\2\u0b3f\2\u0b5e\2\u0b5f\2\u0b61\2\u0b63"+
- "\2\u0b73\2\u0b73\2\u0b85\2\u0b85\2\u0b87\2\u0b8c\2\u0b90\2\u0b92\2\u0b94"+
- "\2\u0b97\2\u0b9b\2\u0b9c\2\u0b9e\2\u0b9e\2\u0ba0\2\u0ba1\2\u0ba5\2\u0ba6"+
- "\2\u0baa\2\u0bac\2\u0bb0\2\u0bbb\2\u0bd2\2\u0bd2\2\u0c07\2\u0c0e\2\u0c10"+
- "\2\u0c12\2\u0c14\2\u0c2a\2\u0c2c\2\u0c3b\2\u0c3f\2\u0c3f\2\u0c5a\2\u0c5c"+
- "\2\u0c62\2\u0c63\2\u0c82\2\u0c82\2\u0c87\2\u0c8e\2\u0c90\2\u0c92\2\u0c94"+
- "\2\u0caa\2\u0cac\2\u0cb5\2\u0cb7\2\u0cbb\2\u0cbf\2\u0cbf\2\u0ce0\2\u0ce0"+
- "\2\u0ce2\2\u0ce3\2\u0cf3\2\u0cf4\2\u0d07\2\u0d0e\2\u0d10\2\u0d12\2\u0d14"+
- "\2\u0d3c\2\u0d3f\2\u0d3f\2\u0d50\2\u0d50\2\u0d56\2\u0d58\2\u0d61\2\u0d63"+
- "\2\u0d7c\2\u0d81\2\u0d87\2\u0d98\2\u0d9c\2\u0db3\2\u0db5\2\u0dbd\2\u0dbf"+
- "\2\u0dbf\2\u0dc2\2\u0dc8\2\u0e03\2\u0e32\2\u0e34\2\u0e35\2\u0e42\2\u0e48"+
- "\2\u0e83\2\u0e84\2\u0e86\2\u0e86\2\u0e89\2\u0e8a\2\u0e8c\2\u0e8c\2\u0e8f"+
- "\2\u0e8f\2\u0e96\2\u0e99\2\u0e9b\2\u0ea1\2\u0ea3\2\u0ea5\2\u0ea7\2\u0ea7"+
- "\2\u0ea9\2\u0ea9\2\u0eac\2\u0ead\2\u0eaf\2\u0eb2\2\u0eb4\2\u0eb5\2\u0ebf"+
- "\2\u0ebf\2\u0ec2\2\u0ec6\2\u0ec8\2\u0ec8\2\u0ede\2\u0ee1\2\u0f02\2\u0f02"+
- "\2\u0f42\2\u0f49\2\u0f4b\2\u0f6e\2\u0f8a\2\u0f8e\2\u1002\2\u102c\2\u1041"+
- "\2\u1041\2\u1052\2\u1057\2\u105c\2\u105f\2\u1063\2\u1063\2\u1067\2\u1068"+
- "\2\u1070\2\u1072\2\u1077\2\u1083\2\u1090\2\u1090\2\u10a2\2\u10c7\2\u10c9"+
- "\2\u10c9\2\u10cf\2\u10cf\2\u10d2\2\u10fc\2\u10fe\2\u124a\2\u124c\2\u124f"+
- "\2\u1252\2\u1258\2\u125a\2\u125a\2\u125c\2\u125f\2\u1262\2\u128a\2\u128c"+
- "\2\u128f\2\u1292\2\u12b2\2\u12b4\2\u12b7\2\u12ba\2\u12c0\2\u12c2\2\u12c2"+
- "\2\u12c4\2\u12c7\2\u12ca\2\u12d8\2\u12da\2\u1312\2\u1314\2\u1317\2\u131a"+
- "\2\u135c\2\u1382\2\u1391\2\u13a2\2\u13f7\2\u13fa\2\u13ff\2\u1403\2\u166e"+
- "\2\u1671\2\u1681\2\u1683\2\u169c\2\u16a2\2\u16ec\2\u16f3\2\u16fa\2\u1702"+
- "\2\u170e\2\u1710\2\u1713\2\u1722\2\u1733\2\u1742\2\u1753\2\u1762\2\u176e"+
- "\2\u1770\2\u1772\2\u1782\2\u17b5\2\u17d9\2\u17d9\2\u17de\2\u17de\2\u1822"+
- "\2\u1879\2\u1882\2\u1886\2\u1889\2\u18aa\2\u18ac\2\u18ac\2\u18b2\2\u18f7"+
- "\2\u1902\2\u1920\2\u1952\2\u196f\2\u1972\2\u1976\2\u1982\2\u19ad\2\u19b2"+
- "\2\u19cb\2\u1a02\2\u1a18\2\u1a22\2\u1a56\2\u1aa9\2\u1aa9\2\u1b07\2\u1b35"+
- "\2\u1b47\2\u1b4d\2\u1b85\2\u1ba2\2\u1bb0\2\u1bb1\2\u1bbc\2\u1be7\2\u1c02"+
- "\2\u1c25\2\u1c4f\2\u1c51\2\u1c5c\2\u1c7f\2\u1c82\2\u1c8a\2\u1ceb\2\u1cee"+
- "\2\u1cf0\2\u1cf3\2\u1cf7\2\u1cf8\2\u1d02\2\u1dc1\2\u1e02\2\u1f17\2\u1f1a"+
- "\2\u1f1f\2\u1f22\2\u1f47\2\u1f4a\2\u1f4f\2\u1f52\2\u1f59\2\u1f5b\2\u1f5b"+
- "\2\u1f5d\2\u1f5d\2\u1f5f\2\u1f5f\2\u1f61\2\u1f7f\2\u1f82\2\u1fb6\2\u1fb8"+
- "\2\u1fbe\2\u1fc0\2\u1fc0\2\u1fc4\2\u1fc6\2\u1fc8\2\u1fce\2\u1fd2\2\u1fd5"+
- "\2\u1fd8\2\u1fdd\2\u1fe2\2\u1fee\2\u1ff4\2\u1ff6\2\u1ff8\2\u1ffe\2\u2073"+
- "\2\u2073\2\u2081\2\u2081\2\u2092\2\u209e\2\u2104\2\u2104\2\u2109\2\u2109"+
- "\2\u210c\2\u2115\2\u2117\2\u2117\2\u211b\2\u211f\2\u2126\2\u2126\2\u2128"+
- "\2\u2128\2\u212a\2\u212a\2\u212c\2\u212f\2\u2131\2\u213b\2\u213e\2\u2141"+
- "\2\u2147\2\u214b\2\u2150\2\u2150\2\u2185\2\u2186\2\u2c02\2\u2c30\2\u2c32"+
- "\2\u2c60\2\u2c62\2\u2ce6\2\u2ced\2\u2cf0\2\u2cf4\2\u2cf5\2\u2d02\2\u2d27"+
- "\2\u2d29\2\u2d29\2\u2d2f\2\u2d2f\2\u2d32\2\u2d69\2\u2d71\2\u2d71\2\u2d82"+
- "\2\u2d98\2\u2da2\2\u2da8\2\u2daa\2\u2db0\2\u2db2\2\u2db8\2\u2dba\2\u2dc0"+
- "\2\u2dc2\2\u2dc8\2\u2dca\2\u2dd0\2\u2dd2\2\u2dd8\2\u2dda\2\u2de0\2\u2e31"+
- "\2\u2e31\2\u3007\2\u3008\2\u3033\2\u3037\2\u303d\2\u303e\2\u3043\2\u3098"+
- "\2\u309f\2\u30a1\2\u30a3\2\u30fc\2\u30fe\2\u3101\2\u3107\2\u3130\2\u3133"+
- "\2\u3190\2\u31a2\2\u31bc\2\u31f2\2\u3201\2\u3402\2\u4db7\2\u4e02\2\u9fec"+
- "\2\ua002\2\ua48e\2\ua4d2\2\ua4ff\2\ua502\2\ua60e\2\ua612\2\ua621\2\ua62c"+
- "\2\ua62d\2\ua642\2\ua670\2\ua681\2\ua69f\2\ua6a2\2\ua6e7\2\ua719\2\ua721"+
- "\2\ua724\2\ua78a\2\ua78d\2\ua7b0\2\ua7b2\2\ua7b9\2\ua7f9\2\ua803\2\ua805"+
- "\2\ua807\2\ua809\2\ua80c\2\ua80e\2\ua824\2\ua842\2\ua875\2\ua884\2\ua8b5"+
- "\2\ua8f4\2\ua8f9\2\ua8fd\2\ua8fd\2\ua8ff\2\ua8ff\2\ua90c\2\ua927\2\ua932"+
- "\2\ua948\2\ua962\2\ua97e\2\ua986\2\ua9b4\2\ua9d1\2\ua9d1\2\ua9e2\2\ua9e6"+
- "\2\ua9e8\2\ua9f1\2\ua9fc\2\uaa00\2\uaa02\2\uaa2a\2\uaa42\2\uaa44\2\uaa46"+
- "\2\uaa4d\2\uaa62\2\uaa78\2\uaa7c\2\uaa7c\2\uaa80\2\uaab1\2\uaab3\2\uaab3"+
- "\2\uaab7\2\uaab8\2\uaabb\2\uaabf\2\uaac2\2\uaac2\2\uaac4\2\uaac4\2\uaadd"+
- "\2\uaadf\2\uaae2\2\uaaec\2\uaaf4\2\uaaf6\2\uab03\2\uab08\2\uab0b\2\uab10"+
- "\2\uab13\2\uab18\2\uab22\2\uab28\2\uab2a\2\uab30\2\uab32\2\uab5c\2\uab5e"+
- "\2\uab67\2\uab72\2\uabe4\2\uac02\2\ud7a5\2\ud7b2\2\ud7c8\2\ud7cd\2\ud7fd"+
- "\2\uf902\2\ufa6f\2\ufa72\2\ufadb\2\ufb02\2\ufb08\2\ufb15\2\ufb19\2\ufb1f"+
- "\2\ufb1f\2\ufb21\2\ufb2a\2\ufb2c\2\ufb38\2\ufb3a\2\ufb3e\2\ufb40\2\ufb40"+
- "\2\ufb42\2\ufb43\2\ufb45\2\ufb46\2\ufb48\2\ufbb3\2\ufbd5\2\ufd3f\2\ufd52"+
- "\2\ufd91\2\ufd94\2\ufdc9\2\ufdf2\2\ufdfd\2\ufe72\2\ufe76\2\ufe78\2\ufefe"+
- "\2\uff23\2\uff3c\2\uff43\2\uff5c\2\uff68\2\uffc0\2\uffc4\2\uffc9\2\uffcc"+
- "\2\uffd1\2\uffd4\2\uffd9\2\uffdc\2\uffde\2\2\3\r\3\17\3(\3*\3<\3>\3?\3"+
- "A\3O\3R\3_\3\u0082\3\u00fc\3\u0282\3\u029e\3\u02a2\3\u02d2\3\u0302\3\u0321"+
- "\3\u032f\3\u0342\3\u0344\3\u034b\3\u0352\3\u0377\3\u0382\3\u039f\3\u03a2"+
- "\3\u03c5\3\u03ca\3\u03d1\3\u0402\3\u049f\3\u04b2\3\u04d5\3\u04da\3\u04fd"+
- "\3\u0502\3\u0529\3\u0532\3\u0565\3\u0602\3\u0738\3\u0742\3\u0757\3\u0762"+
- "\3\u0769\3\u0802\3\u0807\3\u080a\3\u080a\3\u080c\3\u0837\3\u0839\3\u083a"+
- "\3\u083e\3\u083e\3\u0841\3\u0857\3\u0862\3\u0878\3\u0882\3\u08a0\3\u08e2"+
- "\3\u08f4\3\u08f6\3\u08f7\3\u0902\3\u0917\3\u0922\3\u093b\3\u0982\3\u09b9"+
- "\3\u09c0\3\u09c1\3\u0a02\3\u0a02\3\u0a12\3\u0a15\3\u0a17\3\u0a19\3\u0a1b"+
- "\3\u0a35\3\u0a62\3\u0a7e\3\u0a82\3\u0a9e\3\u0ac2\3\u0ac9\3\u0acb\3\u0ae6"+
- "\3\u0b02\3\u0b37\3\u0b42\3\u0b57\3\u0b62\3\u0b74\3\u0b82\3\u0b93\3\u0c02"+
- "\3\u0c4a\3\u0c82\3\u0cb4\3\u0cc2\3\u0cf4\3\u1005\3\u1039\3\u1085\3\u10b1"+
- "\3\u10d2\3\u10ea\3\u1105\3\u1128\3\u1152\3\u1174\3\u1178\3\u1178\3\u1185"+
- "\3\u11b4\3\u11c3\3\u11c6\3\u11dc\3\u11dc\3\u11de\3\u11de\3\u1202\3\u1213"+
- "\3\u1215\3\u122d\3\u1282\3\u1288\3\u128a\3\u128a\3\u128c\3\u128f\3\u1291"+
- "\3\u129f\3\u12a1\3\u12aa\3\u12b2\3\u12e0\3\u1307\3\u130e\3\u1311\3\u1312"+
- "\3\u1315\3\u132a\3\u132c\3\u1332\3\u1334\3\u1335\3\u1337\3\u133b\3\u133f"+
- "\3\u133f\3\u1352\3\u1352\3\u135f\3\u1363\3\u1402\3\u1436\3\u1449\3\u144c"+
- "\3\u1482\3\u14b1\3\u14c6\3\u14c7\3\u14c9\3\u14c9\3\u1582\3\u15b0\3\u15da"+
- "\3\u15dd\3\u1602\3\u1631\3\u1646\3\u1646\3\u1682\3\u16ac\3\u1702\3\u171b"+
- "\3\u18a2\3\u18e1\3\u1901\3\u1901\3\u1a02\3\u1a02\3\u1a0d\3\u1a34\3\u1a3c"+
- "\3\u1a3c\3\u1a52\3\u1a52\3\u1a5e\3\u1a85\3\u1a88\3\u1a8b\3\u1ac2\3\u1afa"+
- "\3\u1c02\3\u1c0a\3\u1c0c\3\u1c30\3\u1c42\3\u1c42\3\u1c74\3\u1c91\3\u1d02"+
- "\3\u1d08\3\u1d0a\3\u1d0b\3\u1d0d\3\u1d32\3\u1d48\3\u1d48\3\u2002\3\u239b"+
- "\3\u2482\3\u2545\3\u3002\3\u3430\3\u4402\3\u4648\3\u6802\3\u6a3a\3\u6a42"+
- "\3\u6a60\3\u6ad2\3\u6aef\3\u6b02\3\u6b31\3\u6b42\3\u6b45\3\u6b65\3\u6b79"+
- "\3\u6b7f\3\u6b91\3\u6f02\3\u6f46\3\u6f52\3\u6f52\3\u6f95\3\u6fa1\3\u6fe2"+
- "\3\u6fe3\3\u7002\3\u87ee\3\u8802\3\u8af4\3\ub002\3\ub120\3\ub172\3\ub2fd"+
- "\3\ubc02\3\ubc6c\3\ubc72\3\ubc7e\3\ubc82\3\ubc8a\3\ubc92\3\ubc9b\3\ud402"+
- "\3\ud456\3\ud458\3\ud49e\3\ud4a0\3\ud4a1\3\ud4a4\3\ud4a4\3\ud4a7\3\ud4a8"+
- "\3\ud4ab\3\ud4ae\3\ud4b0\3\ud4bb\3\ud4bd\3\ud4bd\3\ud4bf\3\ud4c5\3\ud4c7"+
- "\3\ud507\3\ud509\3\ud50c\3\ud50f\3\ud516\3\ud518\3\ud51e\3\ud520\3\ud53b"+
- "\3\ud53d\3\ud540\3\ud542\3\ud546\3\ud548\3\ud548\3\ud54c\3\ud552\3\ud554"+
- "\3\ud6a7\3\ud6aa\3\ud6c2\3\ud6c4\3\ud6dc\3\ud6de\3\ud6fc\3\ud6fe\3\ud716"+
- "\3\ud718\3\ud736\3\ud738\3\ud750\3\ud752\3\ud770\3\ud772\3\ud78a\3\ud78c"+
- "\3\ud7aa\3\ud7ac\3\ud7c4\3\ud7c6\3\ud7cd\3\ue802\3\ue8c6\3\ue902\3\ue945"+
- "\3\uee02\3\uee05\3\uee07\3\uee21\3\uee23\3\uee24\3\uee26\3\uee26\3\uee29"+
- "\3\uee29\3\uee2b\3\uee34\3\uee36\3\uee39\3\uee3b\3\uee3b\3\uee3d\3\uee3d"+
- "\3\uee44\3\uee44\3\uee49\3\uee49\3\uee4b\3\uee4b\3\uee4d\3\uee4d\3\uee4f"+
- "\3\uee51\3\uee53\3\uee54\3\uee56\3\uee56\3\uee59\3\uee59\3\uee5b\3\uee5b"+
- "\3\uee5d\3\uee5d\3\uee5f\3\uee5f\3\uee61\3\uee61\3\uee63\3\uee64\3\uee66"+
- "\3\uee66\3\uee69\3\uee6c\3\uee6e\3\uee74\3\uee76\3\uee79\3\uee7b\3\uee7e"+
- "\3\uee80\3\uee80\3\uee82\3\uee8b\3\uee8d\3\uee9d\3\ueea3\3\ueea5\3\ueea7"+
- "\3\ueeab\3\ueead\3\ueebd\3\2\4\ua6d8\4\ua702\4\ub736\4\ub742\4\ub81f\4"+
- "\ub822\4\ucea3\4\uceb2\4\uebe2\4\uf802\4\ufa1f\4\u0606\2\4\3\2\2\2\2\6"+
- "\3\2\2\2\2\b\3\2\2\2\2\n\3\2\2\2\2\f\3\2\2\2\2\16\3\2\2\2\2\20\3\2\2\2"+
- "\2\22\3\2\2\2\2\24\3\2\2\2\2\26\3\2\2\2\2\30\3\2\2\2\2\32\3\2\2\2\2\34"+
- "\3\2\2\2\2\36\3\2\2\2\2 \3\2\2\2\2\"\3\2\2\2\2$\3\2\2\2\2&\3\2\2\2\2("+
- "\3\2\2\2\2*\3\2\2\2\2,\3\2\2\2\2.\3\2\2\2\2\60\3\2\2\2\2\62\3\2\2\2\2"+
- "\64\3\2\2\2\2\66\3\2\2\2\28\3\2\2\2\2:\3\2\2\2\2<\3\2\2\2\2>\3\2\2\2\2"+
- "@\3\2\2\2\2B\3\2\2\2\2D\3\2\2\2\2F\3\2\2\2\2H\3\2\2\2\2J\3\2\2\2\2L\3"+
- "\2\2\2\2N\3\2\2\2\2P\3\2\2\2\2R\3\2\2\2\2T\3\2\2\2\2V\3\2\2\2\2X\3\2\2"+
- "\2\2Z\3\2\2\2\2\\\3\2\2\2\2^\3\2\2\2\2`\3\2\2\2\2b\3\2\2\2\2d\3\2\2\2"+
- "\2f\3\2\2\2\2h\3\2\2\2\2j\3\2\2\2\2l\3\2\2\2\2n\3\2\2\2\2p\3\2\2\2\2r"+
- "\3\2\2\2\2t\3\2\2\2\2v\3\2\2\2\2x\3\2\2\2\2z\3\2\2\2\2|\3\2\2\2\2~\3\2"+
- "\2\2\2\u0080\3\2\2\2\2\u0082\3\2\2\2\2\u0084\3\2\2\2\2\u0086\3\2\2\2\2"+
- "\u0088\3\2\2\2\2\u008a\3\2\2\2\2\u008c\3\2\2\2\2\u008e\3\2\2\2\2\u0090"+
- "\3\2\2\2\2\u0092\3\2\2\2\2\u0094\3\2\2\2\2\u0096\3\2\2\2\2\u0098\3\2\2"+
- "\2\2\u009a\3\2\2\2\2\u009c\3\2\2\2\2\u009e\3\2\2\2\2\u00a0\3\2\2\2\2\u00a2"+
- "\3\2\2\2\2\u00a4\3\2\2\2\2\u00a6\3\2\2\2\2\u00a8\3\2\2\2\2\u00aa\3\2\2"+
- "\2\2\u00ac\3\2\2\2\2\u00ae\3\2\2\2\2\u00b0\3\2\2\2\2\u00b2\3\2\2\2\2\u00b4"+
- "\3\2\2\2\2\u00b6\3\2\2\2\2\u00b8\3\2\2\2\2\u00ba\3\2\2\2\2\u00bc\3\2\2"+
- "\2\2\u00be\3\2\2\2\2\u00c0\3\2\2\2\2\u00c2\3\2\2\2\2\u00c4\3\2\2\2\2\u00c6"+
- "\3\2\2\2\2\u00c8\3\2\2\2\2\u00ca\3\2\2\2\2\u00cc\3\2\2\2\2\u00ce\3\2\2"+
- "\2\2\u00d0\3\2\2\2\2\u00d2\3\2\2\2\2\u00d4\3\2\2\2\2\u00d6\3\2\2\2\2\u00d8"+
- "\3\2\2\2\2\u00da\3\2\2\2\2\u00dc\3\2\2\2\2\u00de\3\2\2\2\2\u00e0\3\2\2"+
- "\2\2\u00e2\3\2\2\2\2\u00e4\3\2\2\2\2\u00e6\3\2\2\2\2\u00e8\3\2\2\2\2\u00ea"+
- "\3\2\2\2\2\u00ec\3\2\2\2\2\u00ee\3\2\2\2\2\u00f0\3\2\2\2\2\u00f2\3\2\2"+
- "\2\2\u00f4\3\2\2\2\2\u00f6\3\2\2\2\2\u00f8\3\2\2\2\2\u00fa\3\2\2\2\2\u00fc"+
- "\3\2\2\2\2\u00fe\3\2\2\2\2\u0100\3\2\2\2\2\u0102\3\2\2\2\2\u0104\3\2\2"+
- "\2\2\u0106\3\2\2\2\2\u0108\3\2\2\2\2\u010a\3\2\2\2\2\u010c\3\2\2\2\2\u010e"+
- "\3\2\2\2\2\u0110\3\2\2\2\2\u0112\3\2\2\2\2\u0114\3\2\2\2\2\u0116\3\2\2"+
- "\2\2\u0118\3\2\2\2\2\u011a\3\2\2\2\2\u011c\3\2\2\2\2\u011e\3\2\2\2\2\u0124"+
- "\3\2\2\2\2\u0128\3\2\2\2\2\u012a\3\2\2\2\2\u012c\3\2\2\2\2\u012e\3\2\2"+
- "\2\2\u0130\3\2\2\2\2\u0132\3\2\2\2\2\u0134\3\2\2\2\2\u0136\3\2\2\2\2\u0138"+
- "\3\2\2\2\2\u013a\3\2\2\2\2\u013c\3\2\2\2\2\u013e\3\2\2\2\3\u0154\3\2\2"+
- "\2\3\u0156\3\2\2\2\3\u0158\3\2\2\2\3\u015a\3\2\2\2\3\u015c\3\2\2\2\4\u0160"+
- "\3\2\2\2\6\u0176\3\2\2\2\b\u0178\3\2\2\2\n\u017f\3\2\2\2\f\u0187\3\2\2"+
- "\2\16\u018e\3\2\2\2\20\u0195\3\2\2\2\22\u019c\3\2\2\2\24\u01a3\3\2\2\2"+
- "\26\u01ac\3\2\2\2\30\u01b6\3\2\2\2\32\u01be\3\2\2\2\34\u01c8\3\2\2\2\36"+
- "\u01d4\3\2\2\2 \u01db\3\2\2\2\"\u01e6\3\2\2\2$\u01e9\3\2\2\2&\u01ef\3"+
- "\2\2\2(\u01f8\3\2\2\2*\u01fd\3\2\2\2,\u0204\3\2\2\2.\u020b\3\2\2\2\60"+
- "\u0211\3\2\2\2\62\u0216\3\2\2\2\64\u021d\3\2\2\2\66\u0227\3\2\2\28\u022b"+
- "\3\2\2\2:\u0231\3\2\2\2<\u0234\3\2\2\2>\u0236\3\2\2\2@\u023d\3\2\2\2B"+
- "\u0243\3\2\2\2D\u0250\3\2\2\2F\u0259\3\2\2\2H\u025d\3\2\2\2J\u0261\3\2"+
- "\2\2L\u0267\3\2\2\2N\u0269\3\2\2\2P\u026c\3\2\2\2R\u0271\3\2\2\2T\u0277"+
- "\3\2\2\2V\u027d\3\2\2\2X\u0284\3\2\2\2Z\u028b\3\2\2\2\\\u0294\3\2\2\2"+
- "^\u029a\3\2\2\2`\u02a0\3\2\2\2b\u02a7\3\2\2\2d\u02ad\3\2\2\2f\u02b4\3"+
- "\2\2\2h\u02ba\3\2\2\2j\u02c3\3\2\2\2l\u02cb\3\2\2\2n\u02d1\3\2\2\2p\u02d9"+
- "\3\2\2\2r\u02e0\3\2\2\2t\u02e5\3\2\2\2v\u02ee\3\2\2\2x\u02fd\3\2\2\2z"+
- "\u0303\3\2\2\2|\u0307\3\2\2\2~\u030a\3\2\2\2\u0080\u0311\3\2\2\2\u0082"+
- "\u031b\3\2\2\2\u0084\u0325\3\2\2\2\u0086\u0331\3\2\2\2\u0088\u033a\3\2"+
- "\2\2\u008a\u0344\3\2\2\2\u008c\u034c\3\2\2\2\u008e\u0358\3\2\2\2\u0090"+
- "\u0367\3\2\2\2\u0092\u036d\3\2\2\2\u0094\u0371\3\2\2\2\u0096\u0375\3\2"+
- "\2\2\u0098\u037a\3\2\2\2\u009a\u0382\3\2\2\2\u009c\u038a\3\2\2\2\u009e"+
- "\u038f\3\2\2\2\u00a0\u0399\3\2\2\2\u00a2\u03a0\3\2\2\2\u00a4\u03a5\3\2"+
- "\2\2\u00a6\u03ab\3\2\2\2\u00a8\u03ae\3\2\2\2\u00aa\u03b2\3\2\2\2\u00ac"+
- "\u03b9\3\2\2\2\u00ae\u03be\3\2\2\2\u00b0\u03c3\3\2\2\2\u00b2\u03c8\3\2"+
- "\2\2\u00b4\u03d0\3\2\2\2\u00b6\u03d7\3\2\2\2\u00b8\u03dd\3\2\2\2\u00ba"+
- "\u03eb\3\2\2\2\u00bc\u03ee\3\2\2\2\u00be\u03f4\3\2\2\2\u00c0\u03f9\3\2"+
- "\2\2\u00c2\u0404\3\2\2\2\u00c4\u0408\3\2\2\2\u00c6\u040f\3\2\2\2\u00c8"+
- "\u0418\3\2\2\2\u00ca\u041c\3\2\2\2\u00cc\u0422\3\2\2\2\u00ce\u042c\3\2"+
- "\2\2\u00d0\u042e\3\2\2\2\u00d2\u0432\3\2\2\2\u00d4\u0434\3\2\2\2\u00d6"+
- "\u0438\3\2\2\2\u00d8\u043a\3\2\2\2\u00da\u043e\3\2\2\2\u00dc\u0440\3\2"+
- "\2\2\u00de\u0442\3\2\2\2\u00e0\u0444\3\2\2\2\u00e2\u0446\3\2\2\2\u00e4"+
- "\u0448\3\2\2\2\u00e6\u044d\3\2\2\2\u00e8\u0452\3\2\2\2\u00ea\u0455\3\2"+
- "\2\2\u00ec\u0459\3\2\2\2\u00ee\u045c\3\2\2\2\u00f0\u045f\3\2\2\2\u00f2"+
- "\u0462\3\2\2\2\u00f4\u0465\3\2\2\2\u00f6\u0467\3\2\2\2\u00f8\u046a\3\2"+
- "\2\2\u00fa\u046c\3\2\2\2\u00fc\u046f\3\2\2\2\u00fe\u0471\3\2\2\2\u0100"+
- "\u0473\3\2\2\2\u0102\u0475\3\2\2\2\u0104\u0478\3\2\2\2\u0106\u047b\3\2"+
- "\2\2\u0108\u047e\3\2\2\2\u010a\u0480\3\2\2\2\u010c\u0482\3\2\2\2\u010e"+
- "\u0484\3\2\2\2\u0110\u0486\3\2\2\2\u0112\u0488\3\2\2\2\u0114\u048a\3\2"+
- "\2\2\u0116\u0498\3\2\2\2\u0118\u049c\3\2\2\2\u011a\u04a8\3\2\2\2\u011c"+
- "\u04b6\3\2\2\2\u011e\u04c2\3\2\2\2\u0120\u04e6\3\2\2\2\u0122\u04e8\3\2"+
- "\2\2\u0124\u04f1\3\2\2\2\u0126\u04f7\3\2\2\2\u0128\u04fe\3\2\2\2\u012a"+
- "\u0504\3\2\2\2\u012c\u0506\3\2\2\2\u012e\u050b\3\2\2\2\u0130\u0510\3\2"+
- "\2\2\u0132\u0517\3\2\2\2\u0134\u0522\3\2\2\2\u0136\u052d\3\2\2\2\u0138"+
- "\u053a\3\2\2\2\u013a\u0540\3\2\2\2\u013c\u054f\3\2\2\2\u013e\u0555\3\2"+
- "\2\2\u0140\u0564\3\2\2\2\u0142\u0566\3\2\2\2\u0144\u0582\3\2\2\2\u0146"+
- "\u058c\3\2\2\2\u0148\u058e\3\2\2\2\u014a\u0590\3\2\2\2\u014c\u0592\3\2"+
- "\2\2\u014e\u059a\3\2\2\2\u0150\u059c\3\2\2\2\u0152\u059e\3\2\2\2\u0154"+
- "\u05a1\3\2\2\2\u0156\u05a7\3\2\2\2\u0158\u05b5\3\2\2\2\u015a\u05d2\3\2"+
- "\2\2\u015c\u05d6\3\2\2\2\u015e\u0161\5\6\3\2\u015f\u0161\5\u011e\u008f"+
- "\2\u0160\u015e\3\2\2\2\u0160\u015f\3\2\2\2\u0161\u0162\3\2\2\2\u0162\u0163"+
- "\b\2\2\2\u0163\5\3\2\2\2\u0164\u016e\5\u0144\u00a2\2\u0165\u0166\7\60"+
- "\2\2\u0166\u0168\6\3\2\2\u0167\u0169\5\u0144\u00a2\2\u0168\u0167\3\2\2"+
- "\2\u0168\u0169\3\2\2\2\u0169\u016b\3\2\2\2\u016a\u016c\5\u014c\u00a6\2"+
- "\u016b\u016a\3\2\2\2\u016b\u016c\3\2\2\2\u016c\u016f\3\2\2\2\u016d\u016f"+
- "\5\u014c\u00a6\2\u016e\u0165\3\2\2\2\u016e\u016d\3\2\2\2\u016f\u0177\3"+
- "\2\2\2\u0170\u0171\7\60\2\2\u0171\u0172\6\3\3\2\u0172\u0174\5\u0144\u00a2"+
- "\2\u0173\u0175\5\u014c\u00a6\2\u0174\u0173\3\2\2\2\u0174\u0175\3\2\2\2"+
- "\u0175\u0177\3\2\2\2\u0176\u0164\3\2\2\2\u0176\u0170\3\2\2\2\u0177\7\3"+
- "\2\2\2\u0178\u0179\7v\2\2\u0179\u017a\7t\2\2\u017a\u017b\7w\2\2\u017b"+
- "\u017c\7g\2\2\u017c\u017d\3\2\2\2\u017d\u017e\b\4\2\2\u017e\t\3\2\2\2"+
- "\u017f\u0180\7h\2\2\u0180\u0181\7c\2\2\u0181\u0182\7n\2\2\u0182\u0183"+
- "\7u\2\2\u0183\u0184\7g\2\2\u0184\u0185\3\2\2\2\u0185\u0186\b\5\2\2\u0186"+
- "\13\3\2\2\2\u0187\u0188\7c\2\2\u0188\u0189\7u\2\2\u0189\u018a\7u\2\2\u018a"+
- "\u018b\7g\2\2\u018b\u018c\7t\2\2\u018c\u018d\7v\2\2\u018d\r\3\2\2\2\u018e"+
- "\u018f\7c\2\2\u018f\u0190\7u\2\2\u0190\u0191\7u\2\2\u0191\u0192\7w\2\2"+
- "\u0192\u0193\7o\2\2\u0193\u0194\7g\2\2\u0194\17\3\2\2\2\u0195\u0196\7"+
- "k\2\2\u0196\u0197\7p\2\2\u0197\u0198\7j\2\2\u0198\u0199\7c\2\2\u0199\u019a"+
- "\7n\2\2\u019a\u019b\7g\2\2\u019b\21\3\2\2\2\u019c\u019d\7g\2\2\u019d\u019e"+
- "\7z\2\2\u019e\u019f\7j\2\2\u019f\u01a0\7c\2\2\u01a0\u01a1\7n\2\2\u01a1"+
- "\u01a2\7g\2\2\u01a2\23\3\2\2\2\u01a3\u01a4\7t\2\2\u01a4\u01a5\7g\2\2\u01a5"+
- "\u01a6\7s\2\2\u01a6\u01a7\7w\2\2\u01a7\u01a8\7k\2\2\u01a8\u01a9\7t\2\2"+
- "\u01a9\u01aa\7g\2\2\u01aa\u01ab\7u\2\2\u01ab\25\3\2\2\2\u01ac\u01ad\7"+
- "r\2\2\u01ad\u01ae\7t\2\2\u01ae\u01af\7g\2\2\u01af\u01b0\7u\2\2\u01b0\u01b1"+
- "\7g\2\2\u01b1\u01b2\7t\2\2\u01b2\u01b3\7x\2\2\u01b3\u01b4\7g\2\2\u01b4"+
- "\u01b5\7u\2\2\u01b5\27\3\2\2\2\u01b6\u01b7\7g\2\2\u01b7\u01b8\7p\2\2\u01b8"+
- "\u01b9\7u\2\2\u01b9\u01ba\7w\2\2\u01ba\u01bb\7t\2\2\u01bb\u01bc\7g\2\2"+
- "\u01bc\u01bd\7u\2\2\u01bd\31\3\2\2\2\u01be\u01bf\7k\2\2\u01bf\u01c0\7"+
- "p\2\2\u01c0\u01c1\7x\2\2\u01c1\u01c2\7c\2\2\u01c2\u01c3\7t\2\2\u01c3\u01c4"+
- "\7k\2\2\u01c4\u01c5\7c\2\2\u01c5\u01c6\7p\2\2\u01c6\u01c7\7v\2\2\u01c7"+
- "\33\3\2\2\2\u01c8\u01c9\7f\2\2\u01c9\u01ca\7g\2\2\u01ca\u01cb\7e\2\2\u01cb"+
- "\u01cc\7t\2\2\u01cc\u01cd\7g\2\2\u01cd\u01ce\7c\2\2\u01ce\u01cf\7u\2\2"+
- "\u01cf\u01d0\7g\2\2\u01d0\u01d1\7u\2\2\u01d1\u01d2\3\2\2\2\u01d2\u01d3"+
- "\b\16\2\2\u01d3\35\3\2\2\2\u01d4\u01d5\7r\2\2\u01d5\u01d6\7w\2\2\u01d6"+
- "\u01d7\7t\2\2\u01d7\u01d8\7g\2\2\u01d8\u01d9\3\2\2\2\u01d9\u01da\b\17"+
- "\2\2\u01da\37\3\2\2\2\u01db\u01dc\7k\2\2\u01dc\u01dd\7o\2\2\u01dd\u01de"+
- "\7r\2\2\u01de\u01df\7n\2\2\u01df\u01e0\7g\2\2\u01e0\u01e1\7o\2\2\u01e1"+
- "\u01e2\7g\2\2\u01e2\u01e3\7p\2\2\u01e3\u01e4\7v\2\2\u01e4\u01e5\7u\2\2"+
- "\u01e5!\3\2\2\2\u01e6\u01e7\7c\2\2\u01e7\u01e8\7u\2\2\u01e8#\3\2\2\2\u01e9"+
- "\u01ea\7q\2\2\u01ea\u01eb\7n\2\2\u01eb\u01ec\7f\2\2\u01ec\u01ed\3\2\2"+
- "\2\u01ed\u01ee\b\22\2\2\u01ee%\3\2\2\2\u01ef\u01f0\7d\2\2\u01f0\u01f1"+
- "\7g\2\2\u01f1\u01f2\7h\2\2\u01f2\u01f3\7q\2\2\u01f3\u01f4\7t\2\2\u01f4"+
- "\u01f5\7g\2\2\u01f5\u01f6\3\2\2\2\u01f6\u01f7\b\23\2\2\u01f7\'\3\2\2\2"+
- "\u01f8\u01f9\7%\2\2\u01f9\u01fa\7n\2\2\u01fa\u01fb\7j\2\2\u01fb\u01fc"+
- "\7u\2\2\u01fc)\3\2\2\2\u01fd\u01fe\7h\2\2\u01fe\u01ff\7q\2\2\u01ff\u0200"+
- "\7t\2\2\u0200\u0201\7c\2\2\u0201\u0202\7n\2\2\u0202\u0203\7n\2\2\u0203"+
- "+\3\2\2\2\u0204\u0205\7g\2\2\u0205\u0206\7z\2\2\u0206\u0207\7k\2\2\u0207"+
- "\u0208\7u\2\2\u0208\u0209\7v\2\2\u0209\u020a\7u\2\2\u020a-\3\2\2\2\u020b"+
- "\u020c\7c\2\2\u020c\u020d\7e\2\2\u020d\u020e\7e\2\2\u020e\u020f\3\2\2"+
- "\2\u020f\u0210\b\27\2\2\u0210/\3\2\2\2\u0211\u0212\7h\2\2\u0212\u0213"+
- "\7q\2\2\u0213\u0214\7n\2\2\u0214\u0215\7f\2\2\u0215\61\3\2\2\2\u0216\u0217"+
- "\7w\2\2\u0217\u0218\7p\2\2\u0218\u0219\7h\2\2\u0219\u021a\7q\2\2\u021a"+
- "\u021b\7n\2\2\u021b\u021c\7f\2\2\u021c\63\3\2\2\2\u021d\u021e\7w\2\2\u021e"+
- "\u021f\7p\2\2\u021f\u0220\7h\2\2\u0220\u0221\7q\2\2\u0221\u0222\7n\2\2"+
- "\u0222\u0223\7f\2\2\u0223\u0224\7k\2\2\u0224\u0225\7p\2\2\u0225\u0226"+
- "\7i\2\2\u0226\65\3\2\2\2\u0227\u0228\7n\2\2\u0228\u0229\7g\2\2\u0229\u022a"+
- "\7v\2\2\u022a\67\3\2\2\2\u022b\u022c\7i\2\2\u022c\u022d\7j\2\2\u022d\u022e"+
- "\7q\2\2\u022e\u022f\7u\2\2\u022f\u0230\7v\2\2\u02309\3\2\2\2\u0231\u0232"+
- "\7k\2\2\u0232\u0233\7p\2\2\u0233;\3\2\2\2\u0234\u0235\7%\2\2\u0235=\3"+
- "\2\2\2\u0236\u0237\7u\2\2\u0237\u0238\7w\2\2\u0238\u0239\7d\2\2\u0239"+
- "\u023a\7u\2\2\u023a\u023b\7g\2\2\u023b\u023c\7v\2\2\u023c?\3\2\2\2\u023d"+
- "\u023e\7w\2\2\u023e\u023f\7p\2\2\u023f\u0240\7k\2\2\u0240\u0241\7q\2\2"+
- "\u0241\u0242\7p\2\2\u0242A\3\2\2\2\u0243\u0244\7k\2\2\u0244\u0245\7p\2"+
- "\2\u0245\u0246\7v\2\2\u0246\u0247\7g\2\2\u0247\u0248\7t\2\2\u0248\u0249"+
- "\7u\2\2\u0249\u024a\7g\2\2\u024a\u024b\7e\2\2\u024b\u024c\7v\2\2\u024c"+
- "\u024d\7k\2\2\u024d\u024e\7q\2\2\u024e\u024f\7p\2\2\u024fC\3\2\2\2\u0250"+
- "\u0251\7u\2\2\u0251\u0252\7g\2\2\u0252\u0253\7v\2\2\u0253\u0254\7o\2\2"+
- "\u0254\u0255\7k\2\2\u0255\u0256\7p\2\2\u0256\u0257\7w\2\2\u0257\u0258"+
- "\7u\2\2\u0258E\3\2\2\2\u0259\u025a\7?\2\2\u025a\u025b\7?\2\2\u025b\u025c"+
- "\7@\2\2\u025cG\3\2\2\2\u025d\u025e\7/\2\2\u025e\u025f\7/\2\2\u025f\u0260"+
- "\7,\2\2\u0260I\3\2\2\2\u0261\u0262\7c\2\2\u0262\u0263\7r\2\2\u0263\u0264"+
- "\7r\2\2\u0264\u0265\7n\2\2\u0265\u0266\7{\2\2\u0266K\3\2\2\2\u0267\u0268"+
- "\7A\2\2\u0268M\3\2\2\2\u0269\u026a\7#\2\2\u026a\u026b\7>\2\2\u026bO\3"+
- "\2\2\2\u026c\u026d\7#\2\2\u026d\u026e\7@\2\2\u026e\u026f\3\2\2\2\u026f"+
- "\u0270\b(\2\2\u0270Q\3\2\2\2\u0271\u0272\7u\2\2\u0272\u0273\7g\2\2\u0273"+
- "\u0274\7s\2\2\u0274\u0275\3\2\2\2\u0275\u0276\b)\2\2\u0276S\3\2\2\2\u0277"+
- "\u0278\7u\2\2\u0278\u0279\7g\2\2\u0279\u027a\7v\2\2\u027a\u027b\3\2\2"+
- "\2\u027b\u027c\b*\2\2\u027cU\3\2\2\2\u027d\u027e\7o\2\2\u027e\u027f\7"+
- "u\2\2\u027f\u0280\7g\2\2\u0280\u0281\7v\2\2\u0281\u0282\3\2\2\2\u0282"+
- "\u0283\b+\2\2\u0283W\3\2\2\2\u0284\u0285\7f\2\2\u0285\u0286\7k\2\2\u0286"+
- "\u0287\7e\2\2\u0287\u0288\7v\2\2\u0288\u0289\3\2\2\2\u0289\u028a\b,\2"+
- "\2\u028aY\3\2\2\2\u028b\u028c\7q\2\2\u028c\u028d\7r\2\2\u028d\u028e\7"+
- "v\2\2\u028e\u028f\7k\2\2\u028f\u0290\7q\2\2\u0290\u0291\7p\2\2\u0291\u0292"+
- "\3\2\2\2\u0292\u0293\b-\2\2\u0293[\3\2\2\2\u0294\u0295\7n\2\2\u0295\u0296"+
- "\7g\2\2\u0296\u0297\7p\2\2\u0297\u0298\3\2\2\2\u0298\u0299\b.\2\2\u0299"+
- "]\3\2\2\2\u029a\u029b\7p\2\2\u029b\u029c\7g\2\2\u029c\u029d\7y\2\2\u029d"+
- "\u029e\3\2\2\2\u029e\u029f\b/\2\2\u029f_\3\2\2\2\u02a0\u02a1\7o\2\2\u02a1"+
- "\u02a2\7c\2\2\u02a2\u02a3\7m\2\2\u02a3\u02a4\7g\2\2\u02a4\u02a5\3\2\2"+
- "\2\u02a5\u02a6\b\60\2\2\u02a6a\3\2\2\2\u02a7\u02a8\7e\2\2\u02a8\u02a9"+
- "\7c\2\2\u02a9\u02aa\7r\2\2\u02aa\u02ab\3\2\2\2\u02ab\u02ac\b\61\2\2\u02ac"+
- "c\3\2\2\2\u02ad\u02ae\7u\2\2\u02ae\u02af\7q\2\2\u02af\u02b0\7o\2\2\u02b0"+
- "\u02b1\7g\2\2\u02b1\u02b2\3\2\2\2\u02b2\u02b3\b\62\2\2\u02b3e\3\2\2\2"+
- "\u02b4\u02b5\7i\2\2\u02b5\u02b6\7g\2\2\u02b6\u02b7\7v\2\2\u02b7\u02b8"+
- "\3\2\2\2\u02b8\u02b9\b\63\2\2\u02b9g\3\2\2\2\u02ba\u02bb\7f\2\2\u02bb"+
- "\u02bc\7q\2\2\u02bc\u02bd\7o\2\2\u02bd\u02be\7c\2\2\u02be\u02bf\7k\2\2"+
- "\u02bf\u02c0\7p\2\2\u02c0\u02c1\3\2\2\2\u02c1\u02c2\b\64\2\2\u02c2i\3"+
- "\2\2\2\u02c3\u02c4\7c\2\2\u02c4\u02c5\7z\2\2\u02c5\u02c6\7k\2\2\u02c6"+
- "\u02c7\7q\2\2\u02c7\u02c8\7o\2\2\u02c8\u02c9\3\2\2\2\u02c9\u02ca\b\65"+
- "\2\2\u02cak\3\2\2\2\u02cb\u02cc\7c\2\2\u02cc\u02cd\7f\2\2\u02cd\u02ce"+
- "\7v\2\2\u02ce\u02cf\3\2\2\2\u02cf\u02d0\b\66\2\2\u02d0m\3\2\2\2\u02d1"+
- "\u02d2\7o\2\2\u02d2\u02d3\7c\2\2\u02d3\u02d4\7v\2\2\u02d4\u02d5\7e\2\2"+
- "\u02d5\u02d6\7j\2\2\u02d6\u02d7\3\2\2\2\u02d7\u02d8\b\67\2\2\u02d8o\3"+
- "\2\2\2\u02d9\u02da\7p\2\2\u02da\u02db\7q\2\2\u02db\u02dc\7p\2\2\u02dc"+
- "\u02dd\7g\2\2\u02dd\u02de\3\2\2\2\u02de\u02df\b8\2\2\u02dfq\3\2\2\2\u02e0"+
- "\u02e1\7r\2\2\u02e1\u02e2\7t\2\2\u02e2\u02e3\7g\2\2\u02e3\u02e4\7f\2\2"+
- "\u02e4s\3\2\2\2\u02e5\u02e6\7v\2\2\u02e6\u02e7\7{\2\2\u02e7\u02e8\7r\2"+
- "\2\u02e8\u02e9\7g\2\2\u02e9\u02ea\7Q\2\2\u02ea\u02eb\7h\2\2\u02eb\u02ec"+
- "\3\2\2\2\u02ec\u02ed\b:\2\2\u02edu\3\2\2\2\u02ee\u02ef\7k\2\2\u02ef\u02f0"+
- "\7u\2\2\u02f0\u02f1\7E\2\2\u02f1\u02f2\7q\2\2\u02f2\u02f3\7o\2\2\u02f3"+
- "\u02f4\7r\2\2\u02f4\u02f5\7c\2\2\u02f5\u02f6\7t\2\2\u02f6\u02f7\7c\2\2"+
- "\u02f7\u02f8\7d\2\2\u02f8\u02f9\7n\2\2\u02f9\u02fa\7g\2\2\u02fa\u02fb"+
- "\3\2\2\2\u02fb\u02fc\b;\2\2\u02fcw\3\2\2\2\u02fd\u02fe\7u\2\2\u02fe\u02ff"+
- "\7j\2\2\u02ff\u0300\7c\2\2\u0300\u0301\7t\2\2\u0301\u0302\7g\2\2\u0302"+
- "y\3\2\2\2\u0303\u0304\7B\2\2\u0304\u0305\3\2\2\2\u0305\u0306\b=\2\2\u0306"+
- "{\3\2\2\2\u0307\u0308\7\60\2\2\u0308\u0309\7\60\2\2\u0309}\3\2\2\2\u030a"+
- "\u030b\7u\2\2\u030b\u030c\7j\2\2\u030c\u030d\7c\2\2\u030d\u030e\7t\2\2"+
- "\u030e\u030f\7g\2\2\u030f\u0310\7f\2\2\u0310\177\3\2\2\2\u0311\u0312\7"+
- "g\2\2\u0312\u0313\7z\2\2\u0313\u0314\7e\2\2\u0314\u0315\7n\2\2\u0315\u0316"+
- "\7w\2\2\u0316\u0317\7u\2\2\u0317\u0318\7k\2\2\u0318\u0319\7x\2\2\u0319"+
- "\u031a\7g\2\2\u031a\u0081\3\2\2\2\u031b\u031c\7r\2\2\u031c\u031d\7t\2"+
- "\2\u031d\u031e\7g\2\2\u031e\u031f\7f\2\2\u031f\u0320\7k\2\2\u0320\u0321"+
- "\7e\2\2\u0321\u0322\7c\2\2\u0322\u0323\7v\2\2\u0323\u0324\7g\2\2\u0324"+
- "\u0083\3\2\2\2\u0325\u0326\7y\2\2\u0326\u0327\7t\2\2\u0327\u0328\7k\2"+
- "\2\u0328\u0329\7v\2\2\u0329\u032a\7g\2\2\u032a\u032b\7R\2\2\u032b\u032c"+
- "\7g\2\2\u032c\u032d\7t\2\2\u032d\u032e\7o\2\2\u032e\u032f\3\2\2\2\u032f"+
- "\u0330\bB\2\2\u0330\u0085\3\2\2\2\u0331\u0332\7p\2\2\u0332\u0333\7q\2"+
- "\2\u0333\u0334\7R\2\2\u0334\u0335\7g\2\2\u0335\u0336\7t\2\2\u0336\u0337"+
- "\7o\2\2\u0337\u0338\3\2\2\2\u0338\u0339\bC\2\2\u0339\u0087\3\2\2\2\u033a"+
- "\u033b\7v\2\2\u033b\u033c\7t\2\2\u033c\u033d\7w\2\2\u033d\u033e\7u\2\2"+
- "\u033e\u033f\7v\2\2\u033f\u0340\7g\2\2\u0340\u0341\7f\2\2\u0341\u0342"+
- "\3\2\2\2\u0342\u0343\bD\2\2\u0343\u0089\3\2\2\2\u0344\u0345\7q\2\2\u0345"+
- "\u0346\7w\2\2\u0346\u0347\7v\2\2\u0347\u0348\7n\2\2\u0348\u0349\7k\2\2"+
- "\u0349\u034a\7p\2\2\u034a\u034b\7g\2\2\u034b\u008b\3\2\2\2\u034c\u034d"+
- "\7k\2\2\u034d\u034e\7p\2\2\u034e\u034f\7k\2\2\u034f\u0350\7v\2\2\u0350"+
- "\u0351\7G\2\2\u0351\u0352\7p\2\2\u0352\u0353\7u\2\2\u0353\u0354\7w\2\2"+
- "\u0354\u0355\7t\2\2\u0355\u0356\7g\2\2\u0356\u0357\7u\2\2\u0357\u008d"+
- "\3\2\2\2\u0358\u0359\7k\2\2\u0359\u035a\7o\2\2\u035a\u035b\7r\2\2\u035b"+
- "\u035c\7q\2\2\u035c\u035d\7t\2\2\u035d\u035e\7v\2\2\u035e\u035f\7T\2\2"+
- "\u035f\u0360\7g\2\2\u0360\u0361\7s\2\2\u0361\u0362\7w\2\2\u0362\u0363"+
- "\7k\2\2\u0363\u0364\7t\2\2\u0364\u0365\7g\2\2\u0365\u0366\7u\2\2\u0366"+
- "\u008f\3\2\2\2\u0367\u0368\7r\2\2\u0368\u0369\7t\2\2\u0369\u036a\7q\2"+
- "\2\u036a\u036b\7q\2\2\u036b\u036c\7h\2\2\u036c\u0091\3\2\2\2\u036d\u036e"+
- "\7?\2\2\u036e\u036f\7?\2\2\u036f\u0370\7?\2\2\u0370\u0093\3\2\2\2\u0371"+
- "\u0372\7#\2\2\u0372\u0373\7?\2\2\u0373\u0374\7?\2\2\u0374\u0095\3\2\2"+
- "\2\u0375\u0376\7y\2\2\u0376\u0377\7k\2\2\u0377\u0378\7v\2\2\u0378\u0379"+
- "\7j\2\2\u0379\u0097\3\2\2\2\u037a\u037b\7d\2\2\u037b\u037c\7t\2\2\u037c"+
- "\u037d\7g\2\2\u037d\u037e\7c\2\2\u037e\u037f\7m\2\2\u037f\u0380\3\2\2"+
- "\2\u0380\u0381\bL\2\2\u0381\u0099\3\2\2\2\u0382\u0383\7f\2\2\u0383\u0384"+
- "\7g\2\2\u0384\u0385\7h\2\2\u0385\u0386\7c\2\2\u0386\u0387\7w\2\2\u0387"+
- "\u0388\7n\2\2\u0388\u0389\7v\2\2\u0389\u009b\3\2\2\2\u038a\u038b\7h\2"+
- "\2\u038b\u038c\7w\2\2\u038c\u038d\7p\2\2\u038d\u038e\7e\2\2\u038e\u009d"+
- "\3\2\2\2\u038f\u0390\7k\2\2\u0390\u0391\7p\2\2\u0391\u0392\7v\2\2\u0392"+
- "\u0393\7g\2\2\u0393\u0394\7t\2\2\u0394\u0395\7h\2\2\u0395\u0396\7c\2\2"+
- "\u0396\u0397\7e\2\2\u0397\u0398\7g\2\2\u0398\u009f\3\2\2\2\u0399\u039a"+
- "\7u\2\2\u039a\u039b\7g\2\2\u039b\u039c\7n\2\2\u039c\u039d\7g\2\2\u039d"+
- "\u039e\7e\2\2\u039e\u039f\7v\2\2\u039f\u00a1\3\2\2\2\u03a0\u03a1\7e\2"+
- "\2\u03a1\u03a2\7c\2\2\u03a2\u03a3\7u\2\2\u03a3\u03a4\7g\2\2\u03a4\u00a3"+
- "\3\2\2\2\u03a5\u03a6\7f\2\2\u03a6\u03a7\7g\2\2\u03a7\u03a8\7h\2\2\u03a8"+
- "\u03a9\7g\2\2\u03a9\u03aa\7t\2\2\u03aa\u00a5\3\2\2\2\u03ab\u03ac\7i\2"+
- "\2\u03ac\u03ad\7q\2\2\u03ad\u00a7\3\2\2\2\u03ae\u03af\7o\2\2\u03af\u03b0"+
- "\7c\2\2\u03b0\u03b1\7r\2\2\u03b1\u00a9\3\2\2\2\u03b2\u03b3\7u\2\2\u03b3"+
- "\u03b4\7v\2\2\u03b4\u03b5\7t\2\2\u03b5\u03b6\7w\2\2\u03b6\u03b7\7e\2\2"+
- "\u03b7\u03b8\7v\2\2\u03b8\u00ab\3\2\2\2\u03b9\u03ba\7e\2\2\u03ba\u03bb"+
- "\7j\2\2\u03bb\u03bc\7c\2\2\u03bc\u03bd\7p\2\2\u03bd\u00ad\3\2\2\2\u03be"+
- "\u03bf\7g\2\2\u03bf\u03c0\7n\2\2\u03c0\u03c1\7u\2\2\u03c1\u03c2\7g\2\2"+
- "\u03c2\u00af\3\2\2\2\u03c3\u03c4\7i\2\2\u03c4\u03c5\7q\2\2\u03c5\u03c6"+
- "\7v\2\2\u03c6\u03c7\7q\2\2\u03c7\u00b1\3\2\2\2\u03c8\u03c9\7r\2\2\u03c9"+
- "\u03ca\7c\2\2\u03ca\u03cb\7e\2\2\u03cb\u03cc\7m\2\2\u03cc\u03cd\7c\2\2"+
- "\u03cd\u03ce\7i\2\2\u03ce\u03cf\7g\2\2\u03cf\u00b3\3\2\2\2\u03d0\u03d1"+
- "\7u\2\2\u03d1\u03d2\7y\2\2\u03d2\u03d3\7k\2\2\u03d3\u03d4\7v\2\2\u03d4"+
- "\u03d5\7e\2\2\u03d5\u03d6\7j\2\2\u03d6\u00b5\3\2\2\2\u03d7\u03d8\7e\2"+
- "\2\u03d8\u03d9\7q\2\2\u03d9\u03da\7p\2\2\u03da\u03db\7u\2\2\u03db\u03dc"+
- "\7v\2\2\u03dc\u00b7\3\2\2\2\u03dd\u03de\7h\2\2\u03de\u03df\7c\2\2\u03df"+
- "\u03e0\7n\2\2\u03e0\u03e1\7n\2\2\u03e1\u03e2\7v\2\2\u03e2\u03e3\7j\2\2"+
- "\u03e3\u03e4\7t\2\2\u03e4\u03e5\7q\2\2\u03e5\u03e6\7w\2\2\u03e6\u03e7"+
- "\7i\2\2\u03e7\u03e8\7j\2\2\u03e8\u03e9\3\2\2\2\u03e9\u03ea\b\\\2\2\u03ea"+
- "\u00b9\3\2\2\2\u03eb\u03ec\7k\2\2\u03ec\u03ed\7h\2\2\u03ed\u00bb\3\2\2"+
- "\2\u03ee\u03ef\7t\2\2\u03ef\u03f0\7c\2\2\u03f0\u03f1\7p\2\2\u03f1\u03f2"+
- "\7i\2\2\u03f2\u03f3\7g\2\2\u03f3\u00bd\3\2\2\2\u03f4\u03f5\7v\2\2\u03f5"+
- "\u03f6\7{\2\2\u03f6\u03f7\7r\2\2\u03f7\u03f8\7g\2\2\u03f8\u00bf\3\2\2"+
- "\2\u03f9\u03fa\7e\2\2\u03fa\u03fb\7q\2\2\u03fb\u03fc\7p\2\2\u03fc\u03fd"+
- "\7v\2\2\u03fd\u03fe\7k\2\2\u03fe\u03ff\7p\2\2\u03ff\u0400\7w\2\2\u0400"+
- "\u0401\7g\2\2\u0401\u0402\3\2\2\2\u0402\u0403\b`\2\2\u0403\u00c1\3\2\2"+
- "\2\u0404\u0405\7h\2\2\u0405\u0406\7q\2\2\u0406\u0407\7t\2\2\u0407\u00c3"+
- "\3\2\2\2\u0408\u0409\7k\2\2\u0409\u040a\7o\2\2\u040a\u040b\7r\2\2\u040b"+
- "\u040c\7q\2\2\u040c\u040d\7t\2\2\u040d\u040e\7v\2\2\u040e\u00c5\3\2\2"+
- "\2\u040f\u0410\7t\2\2\u0410\u0411\7g\2\2\u0411\u0412\7v\2\2\u0412\u0413"+
- "\7w\2\2\u0413\u0414\7t\2\2\u0414\u0415\7p\2\2\u0415\u0416\3\2\2\2\u0416"+
- "\u0417\bc\2\2\u0417\u00c7\3\2\2\2\u0418\u0419\7x\2\2\u0419\u041a\7c\2"+
- "\2\u041a\u041b\7t\2\2\u041b\u00c9\3\2\2\2\u041c\u041d\7p\2\2\u041d\u041e"+
- "\7k\2\2\u041e\u041f\7n\2\2\u041f\u0420\3\2\2\2\u0420\u0421\be\2\2\u0421"+
- "\u00cb\3\2\2\2\u0422\u0427\5\u014e\u00a7\2\u0423\u0426\5\u014e\u00a7\2"+
- "\u0424\u0426\5\u0150\u00a8\2\u0425\u0423\3\2\2\2\u0425\u0424\3\2\2\2\u0426"+
- "\u0429\3\2\2\2\u0427\u0425\3\2\2\2\u0427\u0428\3\2\2\2\u0428\u042a\3\2"+
- "\2\2\u0429\u0427\3\2\2\2\u042a\u042b\bf\2\2\u042b\u00cd\3\2\2\2\u042c"+
- "\u042d\7*\2\2\u042d\u00cf\3\2\2\2\u042e\u042f\7+\2\2\u042f\u0430\3\2\2"+
- "\2\u0430\u0431\bh\2\2\u0431\u00d1\3\2\2\2\u0432\u0433\7}\2\2\u0433\u00d3"+
- "\3\2\2\2\u0434\u0435\7\177\2\2\u0435\u0436\3\2\2\2\u0436\u0437\bj\2\2"+
- "\u0437\u00d5\3\2\2\2\u0438\u0439\7]\2\2\u0439\u00d7\3\2\2\2\u043a\u043b"+
- "\7_\2\2\u043b\u043c\3\2\2\2\u043c\u043d\bl\2\2\u043d\u00d9\3\2\2\2\u043e"+
- "\u043f\7?\2\2\u043f\u00db\3\2\2\2\u0440\u0441\7.\2\2\u0441\u00dd\3\2\2"+
- "\2\u0442\u0443\7=\2\2\u0443\u00df\3\2\2\2\u0444\u0445\7<\2\2\u0445\u00e1"+
- "\3\2\2\2\u0446\u0447\7\60\2\2\u0447\u00e3\3\2\2\2\u0448\u0449\7-\2\2\u0449"+
- "\u044a\7-\2\2\u044a\u044b\3\2\2\2\u044b\u044c\br\2\2\u044c\u00e5\3\2\2"+
- "\2\u044d\u044e\7/\2\2\u044e\u044f\7/\2\2\u044f\u0450\3\2\2\2\u0450\u0451"+
- "\bs\2\2\u0451\u00e7\3\2\2\2\u0452\u0453\7<\2\2\u0453\u0454\7?\2\2\u0454"+
- "\u00e9\3\2\2\2\u0455\u0456\7\60\2\2\u0456\u0457\7\60\2\2\u0457\u0458\7"+
- "\60\2\2\u0458\u00eb\3\2\2\2\u0459\u045a\7~\2\2\u045a\u045b\7~\2\2\u045b"+
- "\u00ed\3\2\2\2\u045c\u045d\7(\2\2\u045d\u045e\7(\2\2\u045e\u00ef\3\2\2"+
- "\2\u045f\u0460\7?\2\2\u0460\u0461\7?\2\2\u0461\u00f1\3\2\2\2\u0462\u0463"+
- "\7#\2\2\u0463\u0464\7?\2\2\u0464\u00f3\3\2\2\2\u0465\u0466\7>\2\2\u0466"+
- "\u00f5\3\2\2\2\u0467\u0468\7>\2\2\u0468\u0469\7?\2\2\u0469\u00f7\3\2\2"+
- "\2\u046a\u046b\7@\2\2\u046b\u00f9\3\2\2\2\u046c\u046d\7@\2\2\u046d\u046e"+
- "\7?\2\2\u046e\u00fb\3\2\2\2\u046f\u0470\7~\2\2\u0470\u00fd\3\2\2\2\u0471"+
- "\u0472\7\61\2\2\u0472\u00ff\3\2\2\2\u0473\u0474\7\'\2\2\u0474\u0101\3"+
- "\2\2\2\u0475\u0476\7>\2\2\u0476\u0477\7>\2\2\u0477\u0103\3\2\2\2\u0478"+
- "\u0479\7@\2\2\u0479\u047a\7@\2\2\u047a\u0105\3\2\2\2\u047b\u047c\7(\2"+
- "\2\u047c\u047d\7`\2\2\u047d\u0107\3\2\2\2\u047e\u047f\7#\2\2\u047f\u0109"+
- "\3\2\2\2\u0480\u0481\7-\2\2\u0481\u010b\3\2\2\2\u0482\u0483\7/\2\2\u0483"+
- "\u010d\3\2\2\2\u0484\u0485\7`\2\2\u0485\u010f\3\2\2\2\u0486\u0487\7,\2"+
- "\2\u0487\u0111\3\2\2\2\u0488\u0489\7(\2\2\u0489\u0113\3\2\2\2\u048a\u048b"+
- "\7>\2\2\u048b\u048c\7/\2\2\u048c\u0115\3\2\2\2\u048d\u0499\7\62\2\2\u048e"+
- "\u0495\t\2\2\2\u048f\u0491\7a\2\2\u0490\u048f\3\2\2\2\u0490\u0491\3\2"+
- "\2\2\u0491\u0492\3\2\2\2\u0492\u0494\t\3\2\2\u0493\u0490\3\2\2\2\u0494"+
- "\u0497\3\2\2\2\u0495\u0493\3\2\2\2\u0495\u0496\3\2\2\2\u0496\u0499\3\2"+
- "\2\2\u0497\u0495\3\2\2\2\u0498\u048d\3\2\2\2\u0498\u048e\3\2\2\2\u0499"+
- "\u049a\3\2\2\2\u049a\u049b\b\u008b\2\2\u049b\u0117\3\2\2\2\u049c\u049d"+
- "\7\62\2\2\u049d\u04a2\t\4\2\2\u049e\u04a0\7a\2\2\u049f\u049e\3\2\2\2\u049f"+
- "\u04a0\3\2\2\2\u04a0\u04a1\3\2\2\2\u04a1\u04a3\5\u014a\u00a5\2\u04a2\u049f"+
- "\3\2\2\2\u04a3\u04a4\3\2\2\2\u04a4\u04a2\3\2\2\2\u04a4\u04a5\3\2\2\2\u04a5"+
- "\u04a6\3\2\2\2\u04a6\u04a7\b\u008c\2\2\u04a7\u0119\3\2\2\2\u04a8\u04aa"+
- "\7\62\2\2\u04a9\u04ab\t\5\2\2\u04aa\u04a9\3\2\2\2\u04aa\u04ab\3\2\2\2"+
- "\u04ab\u04b0\3\2\2\2\u04ac\u04ae\7a\2\2\u04ad\u04ac\3\2\2\2\u04ad\u04ae"+
- "\3\2\2\2\u04ae\u04af\3\2\2\2\u04af\u04b1\5\u0146\u00a3\2\u04b0\u04ad\3"+
- "\2\2\2\u04b1\u04b2\3\2\2\2\u04b2\u04b0\3\2\2\2\u04b2\u04b3\3\2\2\2\u04b3"+
- "\u04b4\3\2\2\2\u04b4\u04b5\b\u008d\2\2\u04b5\u011b\3\2\2\2\u04b6\u04b7"+
- "\7\62\2\2\u04b7\u04bc\t\6\2\2\u04b8\u04ba\7a\2\2\u04b9\u04b8\3\2\2\2\u04b9"+
- "\u04ba\3\2\2\2\u04ba\u04bb\3\2\2\2\u04bb\u04bd\5\u0148\u00a4\2\u04bc\u04b9"+
- "\3\2\2\2\u04bd\u04be\3\2\2\2\u04be\u04bc\3\2\2\2\u04be\u04bf\3\2\2\2\u04bf"+
- "\u04c0\3\2\2\2\u04c0\u04c1\b\u008e\2\2\u04c1\u011d\3\2\2\2\u04c2\u04c3"+
- "\7\62\2\2\u04c3\u04c4\t\6\2\2\u04c4\u04c5\5\u0120\u0090\2\u04c5\u04c6"+
- "\5\u0122\u0091\2\u04c6\u011f\3\2\2\2\u04c7\u04c9\7a\2\2\u04c8\u04c7\3"+
- "\2\2\2\u04c8\u04c9\3\2\2\2\u04c9\u04ca\3\2\2\2\u04ca\u04cc\5\u0148\u00a4"+
- "\2\u04cb\u04c8\3\2\2\2\u04cc\u04cd\3\2\2\2\u04cd\u04cb\3\2\2\2\u04cd\u04ce"+
- "\3\2\2\2\u04ce\u04d9\3\2\2\2\u04cf\u04d6\7\60\2\2\u04d0\u04d2\7a\2\2\u04d1"+
- "\u04d0\3\2\2\2\u04d1\u04d2\3\2\2\2\u04d2\u04d3\3\2\2\2\u04d3\u04d5\5\u0148"+
- "\u00a4\2\u04d4\u04d1\3\2\2\2\u04d5\u04d8\3\2\2\2\u04d6\u04d4\3\2\2\2\u04d6"+
- "\u04d7\3\2\2\2\u04d7\u04da\3\2\2\2\u04d8\u04d6\3\2\2\2\u04d9\u04cf\3\2"+
- "\2\2\u04d9\u04da\3\2\2\2\u04da\u04e7\3\2\2\2\u04db\u04dc\7\60\2\2\u04dc"+
- "\u04e3\5\u0148\u00a4\2\u04dd\u04df\7a\2\2\u04de\u04dd\3\2\2\2\u04de\u04df"+
- "\3\2\2\2\u04df\u04e0\3\2\2\2\u04e0\u04e2\5\u0148\u00a4\2\u04e1\u04de\3"+
- "\2\2\2\u04e2\u04e5\3\2\2\2\u04e3\u04e1\3\2\2\2\u04e3\u04e4\3\2\2\2\u04e4"+
- "\u04e7\3\2\2\2\u04e5\u04e3\3\2\2\2\u04e6\u04cb\3\2\2\2\u04e6\u04db\3\2"+
- "\2\2\u04e7\u0121\3\2\2\2\u04e8\u04e9\t\7\2\2\u04e9\u04ea\t\b\2\2\u04ea"+
- "\u04eb\5\u0144\u00a2\2\u04eb\u0123\3\2\2\2\u04ec\u04f2\5\u0116\u008b\2"+
- "\u04ed\u04f2\5\u0118\u008c\2\u04ee\u04f2\5\u011a\u008d\2\u04ef\u04f2\5"+
- "\u011c\u008e\2\u04f0\u04f2\5\4\2\2\u04f1\u04ec\3\2\2\2\u04f1\u04ed\3\2"+
- "\2\2\u04f1\u04ee\3\2\2\2\u04f1\u04ef\3\2\2\2\u04f1\u04f0\3\2\2\2\u04f2"+
- "\u04f3\3\2\2\2\u04f3\u04f4\7k\2\2\u04f4\u04f5\3\2\2\2\u04f5\u04f6\b\u0092"+
- "\2\2\u04f6\u0125\3\2\2\2\u04f7\u04fa\7)\2\2\u04f8\u04fb\5\u0140\u00a0"+
- "\2\u04f9\u04fb\5\u012a\u0095\2\u04fa\u04f8\3\2\2\2\u04fa\u04f9\3\2\2\2"+
- "\u04fb\u04fc\3\2\2\2\u04fc\u04fd\7)\2\2\u04fd\u0127\3\2\2\2\u04fe\u04ff"+
- "\5\u0126\u0093\2\u04ff\u0500\3\2\2\2\u0500\u0501\b\u0094\2\2\u0501\u0129"+
- "\3\2\2\2\u0502\u0505\5\u012c\u0096\2\u0503\u0505\5\u012e\u0097\2\u0504"+
- "\u0502\3\2\2\2\u0504\u0503\3\2\2\2\u0505\u012b\3\2\2\2\u0506\u0507\7^"+
- "\2\2\u0507\u0508\5\u0146\u00a3\2\u0508\u0509\5\u0146\u00a3\2\u0509\u050a"+
- "\5\u0146\u00a3\2\u050a\u012d\3\2\2\2\u050b\u050c\7^\2\2\u050c\u050d\7"+
- "z\2\2\u050d\u050e\5\u0148\u00a4\2\u050e\u050f\5\u0148\u00a4\2\u050f\u012f"+
- "\3\2\2\2\u0510\u0511\7^\2\2\u0511\u0512\7w\2\2\u0512\u0513\5\u0148\u00a4"+
- "\2\u0513\u0514\5\u0148\u00a4\2\u0514\u0515\5\u0148\u00a4\2\u0515\u0516"+
- "\5\u0148\u00a4\2\u0516\u0131\3\2\2\2\u0517\u0518\7^\2\2\u0518\u0519\7"+
- "W\2\2\u0519\u051a\5\u0148\u00a4\2\u051a\u051b\5\u0148\u00a4\2\u051b\u051c"+
- "\5\u0148\u00a4\2\u051c\u051d\5\u0148\u00a4\2\u051d\u051e\5\u0148\u00a4"+
- "\2\u051e\u051f\5\u0148\u00a4\2\u051f\u0520\5\u0148\u00a4\2\u0520\u0521"+
- "\5\u0148\u00a4\2\u0521\u0133\3\2\2\2\u0522\u0526\7b\2\2\u0523\u0525\n"+
- "\t\2\2\u0524\u0523\3\2\2\2\u0525\u0528\3\2\2\2\u0526\u0524\3\2\2\2\u0526"+
- "\u0527\3\2\2\2\u0527\u0529\3\2\2\2\u0528\u0526\3\2\2\2\u0529\u052a\7b"+
- "\2\2\u052a\u052b\3\2\2\2\u052b\u052c\b\u009a\2\2\u052c\u0135\3\2\2\2\u052d"+
- "\u0532\7$\2\2\u052e\u0531\n\n\2\2\u052f\u0531\5\u0142\u00a1\2\u0530\u052e"+
- "\3\2\2\2\u0530\u052f\3\2\2\2\u0531\u0534\3\2\2\2\u0532\u0530\3\2\2\2\u0532"+
- "\u0533\3\2\2\2\u0533\u0535\3\2\2\2\u0534\u0532\3\2\2\2\u0535\u0536\7$"+
- "\2\2\u0536\u0537\3\2\2\2\u0537\u0538\b\u009b\2\2\u0538\u0137\3\2\2\2\u0539"+
- "\u053b\t\13\2\2\u053a\u0539\3\2\2\2\u053b\u053c\3\2\2\2\u053c\u053a\3"+
- "\2\2\2\u053c\u053d\3\2\2\2\u053d\u053e\3\2\2\2\u053e\u053f\b\u009c\3\2"+
- "\u053f\u0139\3\2\2\2\u0540\u0541\7\61\2\2\u0541\u0542\7,\2\2\u0542\u0546"+
- "\3\2\2\2\u0543\u0545\13\2\2\2\u0544\u0543\3\2\2\2\u0545\u0548\3\2\2\2"+
- "\u0546\u0547\3\2\2\2\u0546\u0544\3\2\2\2\u0547\u0549\3\2\2\2\u0548\u0546"+
- "\3\2\2\2\u0549\u054a\7,\2\2\u054a\u054b\7\61\2\2\u054b\u054c\3\2\2\2\u054c"+
- "\u054d\b\u009d\3\2\u054d\u013b\3\2\2\2\u054e\u0550\t\f\2\2\u054f\u054e"+
- "\3\2\2\2\u0550\u0551\3\2\2\2\u0551\u054f\3\2\2\2\u0551\u0552\3\2\2\2\u0552"+
- "\u0553\3\2\2\2\u0553\u0554\b\u009e\3\2\u0554\u013d\3\2\2\2\u0555\u0556"+
- "\7\61\2\2\u0556\u0557\7\61\2\2\u0557\u055b\3\2\2\2\u0558\u055a\n\f\2\2"+
- "\u0559\u0558\3\2\2\2\u055a\u055d\3\2\2\2\u055b\u0559\3\2\2\2\u055b\u055c"+
- "\3\2\2\2\u055c\u055e\3\2\2\2\u055d\u055b\3\2\2\2\u055e\u055f\b\u009f\3"+
- "\2\u055f\u013f\3\2\2\2\u0560\u0565\n\r\2\2\u0561\u0565\5\u0130\u0098\2"+
- "\u0562\u0565\5\u0132\u0099\2\u0563\u0565\5\u0142\u00a1\2\u0564\u0560\3"+
- "\2\2\2\u0564\u0561\3\2\2\2\u0564\u0562\3\2\2\2\u0564\u0563\3\2\2\2\u0565"+
- "\u0141\3\2\2\2\u0566\u0580\7^\2\2\u0567\u0568\7w\2\2\u0568\u0569\5\u0148"+
- "\u00a4\2\u0569\u056a\5\u0148\u00a4\2\u056a\u056b\5\u0148\u00a4\2\u056b"+
- "\u056c\5\u0148\u00a4\2\u056c\u0581\3\2\2\2\u056d\u056e\7W\2\2\u056e\u056f"+
- "\5\u0148\u00a4\2\u056f\u0570\5\u0148\u00a4\2\u0570\u0571\5\u0148\u00a4"+
- "\2\u0571\u0572\5\u0148\u00a4\2\u0572\u0573\5\u0148\u00a4\2\u0573\u0574"+
- "\5\u0148\u00a4\2\u0574\u0575\5\u0148\u00a4\2\u0575\u0576\5\u0148\u00a4"+
- "\2\u0576\u0581\3\2\2\2\u0577\u0581\t\16\2\2\u0578\u0579\5\u0146\u00a3"+
- "\2\u0579\u057a\5\u0146\u00a3\2\u057a\u057b\5\u0146\u00a3\2\u057b\u0581"+
- "\3\2\2\2\u057c\u057d\7z\2\2\u057d\u057e\5\u0148\u00a4\2\u057e\u057f\5"+
- "\u0148\u00a4\2\u057f\u0581\3\2\2\2\u0580\u0567\3\2\2\2\u0580\u056d\3\2"+
- "\2\2\u0580\u0577\3\2\2\2\u0580\u0578\3\2\2\2\u0580\u057c\3\2\2\2\u0581"+
- "\u0143\3\2\2\2\u0582\u0589\t\3\2\2\u0583\u0585\7a\2\2\u0584\u0583\3\2"+
- "\2\2\u0584\u0585\3\2\2\2\u0585\u0586\3\2\2\2\u0586\u0588\t\3\2\2\u0587"+
- "\u0584\3\2\2\2\u0588\u058b\3\2\2\2\u0589\u0587\3\2\2\2\u0589\u058a\3\2"+
- "\2\2\u058a\u0145\3\2\2\2\u058b\u0589\3\2\2\2\u058c\u058d\t\17\2\2\u058d"+
- "\u0147\3\2\2\2\u058e\u058f\t\20\2\2\u058f\u0149\3\2\2\2\u0590\u0591\t"+
- "\21\2\2\u0591\u014b\3\2\2\2\u0592\u0594\t\22\2\2\u0593\u0595\t\b\2\2\u0594"+
- "\u0593\3\2\2\2\u0594\u0595\3\2\2\2\u0595\u0596\3\2\2\2\u0596\u0597\5\u0144"+
- "\u00a2\2\u0597\u014d\3\2\2\2\u0598\u059b\5\u0152\u00a9\2\u0599\u059b\7"+
- "a\2\2\u059a\u0598\3\2\2\2\u059a\u0599\3\2\2\2\u059b\u014f\3\2\2\2\u059c"+
- "\u059d\t\23\2\2\u059d\u0151\3\2\2\2\u059e\u059f\t\24\2\2\u059f\u0153\3"+
- "\2\2\2\u05a0\u05a2\t\13\2\2\u05a1\u05a0\3\2\2\2\u05a2\u05a3\3\2\2\2\u05a3"+
- "\u05a1\3\2\2\2\u05a3\u05a4\3\2\2\2\u05a4\u05a5\3\2\2\2\u05a5\u05a6\b\u00aa"+
- "\3\2\u05a6\u0155\3\2\2\2\u05a7\u05a8\7\61\2\2\u05a8\u05a9\7,\2\2\u05a9"+
- "\u05ad\3\2\2\2\u05aa\u05ac\n\f\2\2\u05ab\u05aa\3\2\2\2\u05ac\u05af\3\2"+
- "\2\2\u05ad\u05ae\3\2\2\2\u05ad\u05ab\3\2\2\2\u05ae\u05b0\3\2\2\2\u05af"+
- "\u05ad\3\2\2\2\u05b0\u05b1\7,\2\2\u05b1\u05b2\7\61\2\2\u05b2\u05b3\3\2"+
- "\2\2\u05b3\u05b4\b\u00ab\3\2\u05b4\u0157\3\2\2\2\u05b5\u05b6\7\61\2\2"+
- "\u05b6\u05b7\7\61\2\2\u05b7\u05bb\3\2\2\2\u05b8\u05ba\n\f\2\2\u05b9\u05b8"+
- "\3\2\2\2\u05ba\u05bd\3\2\2\2\u05bb\u05b9\3\2\2\2\u05bb\u05bc\3\2\2\2\u05bc"+
- "\u05be\3\2\2\2\u05bd\u05bb\3\2\2\2\u05be\u05bf\b\u00ac\3\2\u05bf\u0159"+
- "\3\2\2\2\u05c0\u05c2\t\f\2\2\u05c1\u05c0\3\2\2\2\u05c2\u05c3\3\2\2\2\u05c3"+
- "\u05c1\3\2\2\2\u05c3\u05c4\3\2\2\2\u05c4\u05d3\3\2\2\2\u05c5\u05d3\7="+
- "\2\2\u05c6\u05c7\7\61\2\2\u05c7\u05c8\7,\2\2\u05c8\u05cc\3\2\2\2\u05c9"+
- "\u05cb\13\2\2\2\u05ca\u05c9\3\2\2\2\u05cb\u05ce\3\2\2\2\u05cc\u05cd\3"+
- "\2\2\2\u05cc\u05ca\3\2\2\2\u05cd\u05cf\3\2\2\2\u05ce\u05cc\3\2\2\2\u05cf"+
- "\u05d0\7,\2\2\u05d0\u05d3\7\61\2\2\u05d1\u05d3\7\2\2\3\u05d2\u05c1\3\2"+
- "\2\2\u05d2\u05c5\3\2\2\2\u05d2\u05c6\3\2\2\2\u05d2\u05d1\3\2\2\2\u05d3"+
- "\u05d4\3\2\2\2\u05d4\u05d5\b\u00ad\4\2\u05d5\u015b\3\2\2\2\u05d6\u05d7"+
- "\3\2\2\2\u05d7\u05d8\3\2\2\2\u05d8\u05d9\b\u00ae\4\2\u05d9\u05da\b\u00ae"+
- "\3\2\u05da\u015d\3\2\2\2\64\2\3\u0160\u0168\u016b\u016e\u0174\u0176\u0425"+
- "\u0427\u0490\u0495\u0498\u049f\u04a4\u04aa\u04ad\u04b2\u04b9\u04be\u04c8"+
- "\u04cd\u04d1\u04d6\u04d9\u04de\u04e3\u04e6\u04f1\u04fa\u0504\u0526\u0530"+
- "\u0532\u053c\u0546\u0551\u055b\u0564\u0580\u0584\u0589\u0594\u059a\u05a3"+
- "\u05ad\u05bb\u05c3\u05cc\u05d2\5\4\3\2\2\3\2\4\2\2";
+ "\t\u00ad\4\u00ae\t\u00ae\4\u00af\t\u00af\3\2\3\2\5\2\u0163\n\2\3\2\3\2"+
+ "\3\3\3\3\3\3\3\3\5\3\u016b\n\3\3\3\5\3\u016e\n\3\3\3\5\3\u0171\n\3\3\3"+
+ "\3\3\3\3\3\3\5\3\u0177\n\3\5\3\u0179\n\3\3\4\3\4\3\4\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\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\7\3\b\3\b\3\b\3\b\3\b\3\b\3\b\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\13\3\13\3\13\3\13\3\13\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\f\3\r\3\r\3\r\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\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\20\3\20\3\20\3\21\3\21\3\21\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\23\3\23\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\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\30\3\30\3\30\3\30\3\30\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\33\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35"+
+ "\3\36\3\36\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\60\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\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\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\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\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\38\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>\3>\3?\3?\3?\3@\3@\3@\3@\3@\3@\3@\3A\3A"+
+ "\3A\3A\3A\3A\3A\3A\3A\3A\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3C\3C\3C\3C\3C"+
+ "\3C\3C\3C\3C\3C\3C\3C\3D\3D\3D\3D\3D\3D\3D\3D\3D\3E\3E\3E\3E\3E\3E\3E"+
+ "\3E\3E\3E\3F\3F\3F\3F\3F\3F\3F\3F\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G"+
+ "\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3I\3I\3I\3I\3I\3I\3J\3J"+
+ "\3J\3J\3K\3K\3K\3K\3L\3L\3L\3L\3L\3M\3M\3M\3M\3M\3M\3M\3M\3N\3N\3N\3N"+
+ "\3N\3N\3N\3N\3O\3O\3O\3O\3O\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3Q\3Q\3Q\3Q"+
+ "\3Q\3Q\3Q\3R\3R\3R\3R\3R\3S\3S\3S\3S\3S\3S\3T\3T\3T\3U\3U\3U\3U\3V\3V"+
+ "\3V\3V\3V\3V\3V\3W\3W\3W\3W\3W\3X\3X\3X\3X\3X\3Y\3Y\3Y\3Y\3Y\3Z\3Z\3Z"+
+ "\3Z\3Z\3Z\3Z\3Z\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`\3a\3a\3a\3a\3a\3a\3a\3a\3a\3a\3a\3b\3b\3b\3b\3c\3c\3c\3c\3c\3c"+
+ "\3c\3d\3d\3d\3d\3d\3d\3d\3d\3d\3e\3e\3e\3e\3f\3f\3f\3f\3f\3f\3g\3g\3g"+
+ "\7g\u042e\ng\fg\16g\u0431\13g\3g\3g\3h\3h\3i\3i\3i\3i\3j\3j\3k\3k\3k\3"+
+ "k\3l\3l\3m\3m\3m\3m\3n\3n\3o\3o\3p\3p\3q\3q\3r\3r\3s\3s\3s\3s\3s\3t\3"+
+ "t\3t\3t\3t\3u\3u\3u\3v\3v\3v\3v\3w\3w\3w\3x\3x\3x\3y\3y\3y\3z\3z\3z\3"+
+ "{\3{\3|\3|\3|\3}\3}\3~\3~\3~\3\177\3\177\3\u0080\3\u0080\3\u0081\3\u0081"+
+ "\3\u0082\3\u0082\3\u0082\3\u0083\3\u0083\3\u0083\3\u0084\3\u0084\3\u0084"+
+ "\3\u0085\3\u0085\3\u0086\3\u0086\3\u0087\3\u0087\3\u0088\3\u0088\3\u0089"+
+ "\3\u0089\3\u008a\3\u008a\3\u008b\3\u008b\3\u008b\3\u008c\3\u008c\3\u008c"+
+ "\5\u008c\u0499\n\u008c\3\u008c\7\u008c\u049c\n\u008c\f\u008c\16\u008c"+
+ "\u049f\13\u008c\5\u008c\u04a1\n\u008c\3\u008c\3\u008c\3\u008d\3\u008d"+
+ "\3\u008d\5\u008d\u04a8\n\u008d\3\u008d\6\u008d\u04ab\n\u008d\r\u008d\16"+
+ "\u008d\u04ac\3\u008d\3\u008d\3\u008e\3\u008e\5\u008e\u04b3\n\u008e\3\u008e"+
+ "\5\u008e\u04b6\n\u008e\3\u008e\6\u008e\u04b9\n\u008e\r\u008e\16\u008e"+
+ "\u04ba\3\u008e\3\u008e\3\u008f\3\u008f\3\u008f\5\u008f\u04c2\n\u008f\3"+
+ "\u008f\6\u008f\u04c5\n\u008f\r\u008f\16\u008f\u04c6\3\u008f\3\u008f\3"+
+ "\u0090\3\u0090\3\u0090\3\u0090\3\u0090\3\u0091\5\u0091\u04d1\n\u0091\3"+
+ "\u0091\6\u0091\u04d4\n\u0091\r\u0091\16\u0091\u04d5\3\u0091\3\u0091\5"+
+ "\u0091\u04da\n\u0091\3\u0091\7\u0091\u04dd\n\u0091\f\u0091\16\u0091\u04e0"+
+ "\13\u0091\5\u0091\u04e2\n\u0091\3\u0091\3\u0091\3\u0091\5\u0091\u04e7"+
+ "\n\u0091\3\u0091\7\u0091\u04ea\n\u0091\f\u0091\16\u0091\u04ed\13\u0091"+
+ "\5\u0091\u04ef\n\u0091\3\u0092\3\u0092\3\u0092\3\u0092\3\u0093\3\u0093"+
+ "\3\u0093\3\u0093\3\u0093\5\u0093\u04fa\n\u0093\3\u0093\3\u0093\3\u0093"+
+ "\3\u0093\3\u0094\3\u0094\3\u0094\5\u0094\u0503\n\u0094\3\u0094\3\u0094"+
+ "\3\u0095\3\u0095\3\u0095\3\u0095\3\u0096\3\u0096\5\u0096\u050d\n\u0096"+
+ "\3\u0097\3\u0097\3\u0097\3\u0097\3\u0097\3\u0098\3\u0098\3\u0098\3\u0098"+
+ "\3\u0098\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099\3\u009a"+
+ "\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a"+
+ "\3\u009a\3\u009b\3\u009b\7\u009b\u052d\n\u009b\f\u009b\16\u009b\u0530"+
+ "\13\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009c\3\u009c\3\u009c\7\u009c"+
+ "\u0539\n\u009c\f\u009c\16\u009c\u053c\13\u009c\3\u009c\3\u009c\3\u009c"+
+ "\3\u009c\3\u009d\6\u009d\u0543\n\u009d\r\u009d\16\u009d\u0544\3\u009d"+
+ "\3\u009d\3\u009e\3\u009e\3\u009e\3\u009e\7\u009e\u054d\n\u009e\f\u009e"+
+ "\16\u009e\u0550\13\u009e\3\u009e\3\u009e\3\u009e\3\u009e\3\u009e\3\u009f"+
+ "\6\u009f\u0558\n\u009f\r\u009f\16\u009f\u0559\3\u009f\3\u009f\3\u00a0"+
+ "\3\u00a0\3\u00a0\3\u00a0\7\u00a0\u0562\n\u00a0\f\u00a0\16\u00a0\u0565"+
+ "\13\u00a0\3\u00a0\3\u00a0\3\u00a1\3\u00a1\3\u00a1\3\u00a1\5\u00a1\u056d"+
+ "\n\u00a1\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2"+
+ "\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2"+
+ "\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2"+
+ "\5\u00a2\u0589\n\u00a2\3\u00a3\3\u00a3\5\u00a3\u058d\n\u00a3\3\u00a3\7"+
+ "\u00a3\u0590\n\u00a3\f\u00a3\16\u00a3\u0593\13\u00a3\3\u00a4\3\u00a4\3"+
+ "\u00a5\3\u00a5\3\u00a6\3\u00a6\3\u00a7\3\u00a7\5\u00a7\u059d\n\u00a7\3"+
+ "\u00a7\3\u00a7\3\u00a8\3\u00a8\5\u00a8\u05a3\n\u00a8\3\u00a9\3\u00a9\3"+
+ "\u00aa\3\u00aa\3\u00ab\6\u00ab\u05aa\n\u00ab\r\u00ab\16\u00ab\u05ab\3"+
+ "\u00ab\3\u00ab\3\u00ac\3\u00ac\3\u00ac\3\u00ac\7\u00ac\u05b4\n\u00ac\f"+
+ "\u00ac\16\u00ac\u05b7\13\u00ac\3\u00ac\3\u00ac\3\u00ac\3\u00ac\3\u00ac"+
+ "\3\u00ad\3\u00ad\3\u00ad\3\u00ad\7\u00ad\u05c2\n\u00ad\f\u00ad\16\u00ad"+
+ "\u05c5\13\u00ad\3\u00ad\3\u00ad\3\u00ae\6\u00ae\u05ca\n\u00ae\r\u00ae"+
+ "\16\u00ae\u05cb\3\u00ae\3\u00ae\3\u00ae\3\u00ae\3\u00ae\7\u00ae\u05d3"+
+ "\n\u00ae\f\u00ae\16\u00ae\u05d6\13\u00ae\3\u00ae\3\u00ae\3\u00ae\5\u00ae"+
+ "\u05db\n\u00ae\3\u00ae\3\u00ae\3\u00af\3\u00af\3\u00af\3\u00af\3\u00af"+
+ "\5\u054e\u05b5\u05d4\2\u00b0\4\3\6\4\b\5\n\6\f\7\16\b\20\t\22\n\24\13"+
+ "\26\f\30\r\32\16\34\17\36\20 \21\"\22$\23&\24(\25*\26,\27.\30\60\31\62"+
+ "\32\64\33\66\348\35:\36<\37> @!B\"D#F$H%J&L\'N(P)R*T+V,X-Z.\\/^\60`\61"+
+ "b\62d\63f\64h\65j\66l\67n8p9r:t;v|?~@\u0080A\u0082B\u0084C\u0086"+
+ "D\u0088E\u008aF\u008cG\u008eH\u0090I\u0092J\u0094K\u0096L\u0098M\u009a"+
+ "N\u009cO\u009eP\u00a0Q\u00a2R\u00a4S\u00a6T\u00a8U\u00aaV\u00acW\u00ae"+
+ "X\u00b0Y\u00b2Z\u00b4[\u00b6\\\u00b8]\u00ba^\u00bc_\u00be`\u00c0a\u00c2"+
+ "b\u00c4c\u00c6d\u00c8e\u00caf\u00ccg\u00ceh\u00d0i\u00d2j\u00d4k\u00d6"+
+ "l\u00d8m\u00dan\u00dco\u00dep\u00e0q\u00e2r\u00e4s\u00e6t\u00e8u\u00ea"+
+ "v\u00ecw\u00eex\u00f0y\u00f2z\u00f4{\u00f6|\u00f8}\u00fa~\u00fc\177\u00fe"+
+ "\u0080\u0100\u0081\u0102\u0082\u0104\u0083\u0106\u0084\u0108\u0085\u010a"+
+ "\u0086\u010c\u0087\u010e\u0088\u0110\u0089\u0112\u008a\u0114\u008b\u0116"+
+ "\u008c\u0118\u008d\u011a\u008e\u011c\u008f\u011e\u0090\u0120\u0091\u0122"+
+ "\2\u0124\2\u0126\u0092\u0128\2\u012a\u0093\u012c\u0094\u012e\u0095\u0130"+
+ "\u0096\u0132\u0097\u0134\u0098\u0136\u0099\u0138\u009a\u013a\u009b\u013c"+
+ "\u009c\u013e\u009d\u0140\u009e\u0142\2\u0144\2\u0146\2\u0148\2\u014a\2"+
+ "\u014c\2\u014e\2\u0150\2\u0152\2\u0154\2\u0156\u009f\u0158\u00a0\u015a"+
+ "\u00a1\u015c\u00a2\u015e\u00a3\4\2\3\23\3\2\63;\3\2\62;\4\2DDdd\4\2QQ"+
+ "qq\4\2ZZzz\4\2RRrr\4\2--//\3\2bb\4\2$$^^\4\2\13\13\"\"\4\2\f\f\17\17\5"+
+ "\2\f\f\17\17))\13\2$$))^^cdhhppttvvxx\3\2\629\5\2\62;CHch\3\2\62\63\4"+
+ "\2GGgg\49\2\62\2;\2\u0662\2\u066b\2\u06f2\2\u06fb\2\u07c2\2\u07cb\2\u0968"+
+ "\2\u0971\2\u09e8\2\u09f1\2\u0a68\2\u0a71\2\u0ae8\2\u0af1\2\u0b68\2\u0b71"+
+ "\2\u0be8\2\u0bf1\2\u0c68\2\u0c71\2\u0ce8\2\u0cf1\2\u0d68\2\u0d71\2\u0de8"+
+ "\2\u0df1\2\u0e52\2\u0e5b\2\u0ed2\2\u0edb\2\u0f22\2\u0f2b\2\u1042\2\u104b"+
+ "\2\u1092\2\u109b\2\u17e2\2\u17eb\2\u1812\2\u181b\2\u1948\2\u1951\2\u19d2"+
+ "\2\u19db\2\u1a82\2\u1a8b\2\u1a92\2\u1a9b\2\u1b52\2\u1b5b\2\u1bb2\2\u1bbb"+
+ "\2\u1c42\2\u1c4b\2\u1c52\2\u1c5b\2\ua622\2\ua62b\2\ua8d2\2\ua8db\2\ua902"+
+ "\2\ua90b\2\ua9d2\2\ua9db\2\ua9f2\2\ua9fb\2\uaa52\2\uaa5b\2\uabf2\2\uabfb"+
+ "\2\uff12\2\uff1b\2\u04a2\3\u04ab\3\u1068\3\u1071\3\u10f2\3\u10fb\3\u1138"+
+ "\3\u1141\3\u11d2\3\u11db\3\u12f2\3\u12fb\3\u1452\3\u145b\3\u14d2\3\u14db"+
+ "\3\u1652\3\u165b\3\u16c2\3\u16cb\3\u1732\3\u173b\3\u18e2\3\u18eb\3\u1c52"+
+ "\3\u1c5b\3\u1d52\3\u1d5b\3\u6a62\3\u6a6b\3\u6b52\3\u6b5b\3\ud7d0\3\ud801"+
+ "\3\ue952\3\ue95b\3\u024b\2C\2\\\2c\2|\2\u00ac\2\u00ac\2\u00b7\2\u00b7"+
+ "\2\u00bc\2\u00bc\2\u00c2\2\u00d8\2\u00da\2\u00f8\2\u00fa\2\u02c3\2\u02c8"+
+ "\2\u02d3\2\u02e2\2\u02e6\2\u02ee\2\u02ee\2\u02f0\2\u02f0\2\u0372\2\u0376"+
+ "\2\u0378\2\u0379\2\u037c\2\u037f\2\u0381\2\u0381\2\u0388\2\u0388\2\u038a"+
+ "\2\u038c\2\u038e\2\u038e\2\u0390\2\u03a3\2\u03a5\2\u03f7\2\u03f9\2\u0483"+
+ "\2\u048c\2\u0531\2\u0533\2\u0558\2\u055b\2\u055b\2\u0563\2\u0589\2\u05d2"+
+ "\2\u05ec\2\u05f2\2\u05f4\2\u0622\2\u064c\2\u0670\2\u0671\2\u0673\2\u06d5"+
+ "\2\u06d7\2\u06d7\2\u06e7\2\u06e8\2\u06f0\2\u06f1\2\u06fc\2\u06fe\2\u0701"+
+ "\2\u0701\2\u0712\2\u0712\2\u0714\2\u0731\2\u074f\2\u07a7\2\u07b3\2\u07b3"+
+ "\2\u07cc\2\u07ec\2\u07f6\2\u07f7\2\u07fc\2\u07fc\2\u0802\2\u0817\2\u081c"+
+ "\2\u081c\2\u0826\2\u0826\2\u082a\2\u082a\2\u0842\2\u085a\2\u0862\2\u086c"+
+ "\2\u08a2\2\u08b6\2\u08b8\2\u08bf\2\u0906\2\u093b\2\u093f\2\u093f\2\u0952"+
+ "\2\u0952\2\u095a\2\u0963\2\u0973\2\u0982\2\u0987\2\u098e\2\u0991\2\u0992"+
+ "\2\u0995\2\u09aa\2\u09ac\2\u09b2\2\u09b4\2\u09b4\2\u09b8\2\u09bb\2\u09bf"+
+ "\2\u09bf\2\u09d0\2\u09d0\2\u09de\2\u09df\2\u09e1\2\u09e3\2\u09f2\2\u09f3"+
+ "\2\u09fe\2\u09fe\2\u0a07\2\u0a0c\2\u0a11\2\u0a12\2\u0a15\2\u0a2a\2\u0a2c"+
+ "\2\u0a32\2\u0a34\2\u0a35\2\u0a37\2\u0a38\2\u0a3a\2\u0a3b\2\u0a5b\2\u0a5e"+
+ "\2\u0a60\2\u0a60\2\u0a74\2\u0a76\2\u0a87\2\u0a8f\2\u0a91\2\u0a93\2\u0a95"+
+ "\2\u0aaa\2\u0aac\2\u0ab2\2\u0ab4\2\u0ab5\2\u0ab7\2\u0abb\2\u0abf\2\u0abf"+
+ "\2\u0ad2\2\u0ad2\2\u0ae2\2\u0ae3\2\u0afb\2\u0afb\2\u0b07\2\u0b0e\2\u0b11"+
+ "\2\u0b12\2\u0b15\2\u0b2a\2\u0b2c\2\u0b32\2\u0b34\2\u0b35\2\u0b37\2\u0b3b"+
+ "\2\u0b3f\2\u0b3f\2\u0b5e\2\u0b5f\2\u0b61\2\u0b63\2\u0b73\2\u0b73\2\u0b85"+
+ "\2\u0b85\2\u0b87\2\u0b8c\2\u0b90\2\u0b92\2\u0b94\2\u0b97\2\u0b9b\2\u0b9c"+
+ "\2\u0b9e\2\u0b9e\2\u0ba0\2\u0ba1\2\u0ba5\2\u0ba6\2\u0baa\2\u0bac\2\u0bb0"+
+ "\2\u0bbb\2\u0bd2\2\u0bd2\2\u0c07\2\u0c0e\2\u0c10\2\u0c12\2\u0c14\2\u0c2a"+
+ "\2\u0c2c\2\u0c3b\2\u0c3f\2\u0c3f\2\u0c5a\2\u0c5c\2\u0c62\2\u0c63\2\u0c82"+
+ "\2\u0c82\2\u0c87\2\u0c8e\2\u0c90\2\u0c92\2\u0c94\2\u0caa\2\u0cac\2\u0cb5"+
+ "\2\u0cb7\2\u0cbb\2\u0cbf\2\u0cbf\2\u0ce0\2\u0ce0\2\u0ce2\2\u0ce3\2\u0cf3"+
+ "\2\u0cf4\2\u0d07\2\u0d0e\2\u0d10\2\u0d12\2\u0d14\2\u0d3c\2\u0d3f\2\u0d3f"+
+ "\2\u0d50\2\u0d50\2\u0d56\2\u0d58\2\u0d61\2\u0d63\2\u0d7c\2\u0d81\2\u0d87"+
+ "\2\u0d98\2\u0d9c\2\u0db3\2\u0db5\2\u0dbd\2\u0dbf\2\u0dbf\2\u0dc2\2\u0dc8"+
+ "\2\u0e03\2\u0e32\2\u0e34\2\u0e35\2\u0e42\2\u0e48\2\u0e83\2\u0e84\2\u0e86"+
+ "\2\u0e86\2\u0e89\2\u0e8a\2\u0e8c\2\u0e8c\2\u0e8f\2\u0e8f\2\u0e96\2\u0e99"+
+ "\2\u0e9b\2\u0ea1\2\u0ea3\2\u0ea5\2\u0ea7\2\u0ea7\2\u0ea9\2\u0ea9\2\u0eac"+
+ "\2\u0ead\2\u0eaf\2\u0eb2\2\u0eb4\2\u0eb5\2\u0ebf\2\u0ebf\2\u0ec2\2\u0ec6"+
+ "\2\u0ec8\2\u0ec8\2\u0ede\2\u0ee1\2\u0f02\2\u0f02\2\u0f42\2\u0f49\2\u0f4b"+
+ "\2\u0f6e\2\u0f8a\2\u0f8e\2\u1002\2\u102c\2\u1041\2\u1041\2\u1052\2\u1057"+
+ "\2\u105c\2\u105f\2\u1063\2\u1063\2\u1067\2\u1068\2\u1070\2\u1072\2\u1077"+
+ "\2\u1083\2\u1090\2\u1090\2\u10a2\2\u10c7\2\u10c9\2\u10c9\2\u10cf\2\u10cf"+
+ "\2\u10d2\2\u10fc\2\u10fe\2\u124a\2\u124c\2\u124f\2\u1252\2\u1258\2\u125a"+
+ "\2\u125a\2\u125c\2\u125f\2\u1262\2\u128a\2\u128c\2\u128f\2\u1292\2\u12b2"+
+ "\2\u12b4\2\u12b7\2\u12ba\2\u12c0\2\u12c2\2\u12c2\2\u12c4\2\u12c7\2\u12ca"+
+ "\2\u12d8\2\u12da\2\u1312\2\u1314\2\u1317\2\u131a\2\u135c\2\u1382\2\u1391"+
+ "\2\u13a2\2\u13f7\2\u13fa\2\u13ff\2\u1403\2\u166e\2\u1671\2\u1681\2\u1683"+
+ "\2\u169c\2\u16a2\2\u16ec\2\u16f3\2\u16fa\2\u1702\2\u170e\2\u1710\2\u1713"+
+ "\2\u1722\2\u1733\2\u1742\2\u1753\2\u1762\2\u176e\2\u1770\2\u1772\2\u1782"+
+ "\2\u17b5\2\u17d9\2\u17d9\2\u17de\2\u17de\2\u1822\2\u1879\2\u1882\2\u1886"+
+ "\2\u1889\2\u18aa\2\u18ac\2\u18ac\2\u18b2\2\u18f7\2\u1902\2\u1920\2\u1952"+
+ "\2\u196f\2\u1972\2\u1976\2\u1982\2\u19ad\2\u19b2\2\u19cb\2\u1a02\2\u1a18"+
+ "\2\u1a22\2\u1a56\2\u1aa9\2\u1aa9\2\u1b07\2\u1b35\2\u1b47\2\u1b4d\2\u1b85"+
+ "\2\u1ba2\2\u1bb0\2\u1bb1\2\u1bbc\2\u1be7\2\u1c02\2\u1c25\2\u1c4f\2\u1c51"+
+ "\2\u1c5c\2\u1c7f\2\u1c82\2\u1c8a\2\u1ceb\2\u1cee\2\u1cf0\2\u1cf3\2\u1cf7"+
+ "\2\u1cf8\2\u1d02\2\u1dc1\2\u1e02\2\u1f17\2\u1f1a\2\u1f1f\2\u1f22\2\u1f47"+
+ "\2\u1f4a\2\u1f4f\2\u1f52\2\u1f59\2\u1f5b\2\u1f5b\2\u1f5d\2\u1f5d\2\u1f5f"+
+ "\2\u1f5f\2\u1f61\2\u1f7f\2\u1f82\2\u1fb6\2\u1fb8\2\u1fbe\2\u1fc0\2\u1fc0"+
+ "\2\u1fc4\2\u1fc6\2\u1fc8\2\u1fce\2\u1fd2\2\u1fd5\2\u1fd8\2\u1fdd\2\u1fe2"+
+ "\2\u1fee\2\u1ff4\2\u1ff6\2\u1ff8\2\u1ffe\2\u2073\2\u2073\2\u2081\2\u2081"+
+ "\2\u2092\2\u209e\2\u2104\2\u2104\2\u2109\2\u2109\2\u210c\2\u2115\2\u2117"+
+ "\2\u2117\2\u211b\2\u211f\2\u2126\2\u2126\2\u2128\2\u2128\2\u212a\2\u212a"+
+ "\2\u212c\2\u212f\2\u2131\2\u213b\2\u213e\2\u2141\2\u2147\2\u214b\2\u2150"+
+ "\2\u2150\2\u2185\2\u2186\2\u2c02\2\u2c30\2\u2c32\2\u2c60\2\u2c62\2\u2ce6"+
+ "\2\u2ced\2\u2cf0\2\u2cf4\2\u2cf5\2\u2d02\2\u2d27\2\u2d29\2\u2d29\2\u2d2f"+
+ "\2\u2d2f\2\u2d32\2\u2d69\2\u2d71\2\u2d71\2\u2d82\2\u2d98\2\u2da2\2\u2da8"+
+ "\2\u2daa\2\u2db0\2\u2db2\2\u2db8\2\u2dba\2\u2dc0\2\u2dc2\2\u2dc8\2\u2dca"+
+ "\2\u2dd0\2\u2dd2\2\u2dd8\2\u2dda\2\u2de0\2\u2e31\2\u2e31\2\u3007\2\u3008"+
+ "\2\u3033\2\u3037\2\u303d\2\u303e\2\u3043\2\u3098\2\u309f\2\u30a1\2\u30a3"+
+ "\2\u30fc\2\u30fe\2\u3101\2\u3107\2\u3130\2\u3133\2\u3190\2\u31a2\2\u31bc"+
+ "\2\u31f2\2\u3201\2\u3402\2\u4db7\2\u4e02\2\u9fec\2\ua002\2\ua48e\2\ua4d2"+
+ "\2\ua4ff\2\ua502\2\ua60e\2\ua612\2\ua621\2\ua62c\2\ua62d\2\ua642\2\ua670"+
+ "\2\ua681\2\ua69f\2\ua6a2\2\ua6e7\2\ua719\2\ua721\2\ua724\2\ua78a\2\ua78d"+
+ "\2\ua7b0\2\ua7b2\2\ua7b9\2\ua7f9\2\ua803\2\ua805\2\ua807\2\ua809\2\ua80c"+
+ "\2\ua80e\2\ua824\2\ua842\2\ua875\2\ua884\2\ua8b5\2\ua8f4\2\ua8f9\2\ua8fd"+
+ "\2\ua8fd\2\ua8ff\2\ua8ff\2\ua90c\2\ua927\2\ua932\2\ua948\2\ua962\2\ua97e"+
+ "\2\ua986\2\ua9b4\2\ua9d1\2\ua9d1\2\ua9e2\2\ua9e6\2\ua9e8\2\ua9f1\2\ua9fc"+
+ "\2\uaa00\2\uaa02\2\uaa2a\2\uaa42\2\uaa44\2\uaa46\2\uaa4d\2\uaa62\2\uaa78"+
+ "\2\uaa7c\2\uaa7c\2\uaa80\2\uaab1\2\uaab3\2\uaab3\2\uaab7\2\uaab8\2\uaabb"+
+ "\2\uaabf\2\uaac2\2\uaac2\2\uaac4\2\uaac4\2\uaadd\2\uaadf\2\uaae2\2\uaaec"+
+ "\2\uaaf4\2\uaaf6\2\uab03\2\uab08\2\uab0b\2\uab10\2\uab13\2\uab18\2\uab22"+
+ "\2\uab28\2\uab2a\2\uab30\2\uab32\2\uab5c\2\uab5e\2\uab67\2\uab72\2\uabe4"+
+ "\2\uac02\2\ud7a5\2\ud7b2\2\ud7c8\2\ud7cd\2\ud7fd\2\uf902\2\ufa6f\2\ufa72"+
+ "\2\ufadb\2\ufb02\2\ufb08\2\ufb15\2\ufb19\2\ufb1f\2\ufb1f\2\ufb21\2\ufb2a"+
+ "\2\ufb2c\2\ufb38\2\ufb3a\2\ufb3e\2\ufb40\2\ufb40\2\ufb42\2\ufb43\2\ufb45"+
+ "\2\ufb46\2\ufb48\2\ufbb3\2\ufbd5\2\ufd3f\2\ufd52\2\ufd91\2\ufd94\2\ufdc9"+
+ "\2\ufdf2\2\ufdfd\2\ufe72\2\ufe76\2\ufe78\2\ufefe\2\uff23\2\uff3c\2\uff43"+
+ "\2\uff5c\2\uff68\2\uffc0\2\uffc4\2\uffc9\2\uffcc\2\uffd1\2\uffd4\2\uffd9"+
+ "\2\uffdc\2\uffde\2\2\3\r\3\17\3(\3*\3<\3>\3?\3A\3O\3R\3_\3\u0082\3\u00fc"+
+ "\3\u0282\3\u029e\3\u02a2\3\u02d2\3\u0302\3\u0321\3\u032f\3\u0342\3\u0344"+
+ "\3\u034b\3\u0352\3\u0377\3\u0382\3\u039f\3\u03a2\3\u03c5\3\u03ca\3\u03d1"+
+ "\3\u0402\3\u049f\3\u04b2\3\u04d5\3\u04da\3\u04fd\3\u0502\3\u0529\3\u0532"+
+ "\3\u0565\3\u0602\3\u0738\3\u0742\3\u0757\3\u0762\3\u0769\3\u0802\3\u0807"+
+ "\3\u080a\3\u080a\3\u080c\3\u0837\3\u0839\3\u083a\3\u083e\3\u083e\3\u0841"+
+ "\3\u0857\3\u0862\3\u0878\3\u0882\3\u08a0\3\u08e2\3\u08f4\3\u08f6\3\u08f7"+
+ "\3\u0902\3\u0917\3\u0922\3\u093b\3\u0982\3\u09b9\3\u09c0\3\u09c1\3\u0a02"+
+ "\3\u0a02\3\u0a12\3\u0a15\3\u0a17\3\u0a19\3\u0a1b\3\u0a35\3\u0a62\3\u0a7e"+
+ "\3\u0a82\3\u0a9e\3\u0ac2\3\u0ac9\3\u0acb\3\u0ae6\3\u0b02\3\u0b37\3\u0b42"+
+ "\3\u0b57\3\u0b62\3\u0b74\3\u0b82\3\u0b93\3\u0c02\3\u0c4a\3\u0c82\3\u0cb4"+
+ "\3\u0cc2\3\u0cf4\3\u1005\3\u1039\3\u1085\3\u10b1\3\u10d2\3\u10ea\3\u1105"+
+ "\3\u1128\3\u1152\3\u1174\3\u1178\3\u1178\3\u1185\3\u11b4\3\u11c3\3\u11c6"+
+ "\3\u11dc\3\u11dc\3\u11de\3\u11de\3\u1202\3\u1213\3\u1215\3\u122d\3\u1282"+
+ "\3\u1288\3\u128a\3\u128a\3\u128c\3\u128f\3\u1291\3\u129f\3\u12a1\3\u12aa"+
+ "\3\u12b2\3\u12e0\3\u1307\3\u130e\3\u1311\3\u1312\3\u1315\3\u132a\3\u132c"+
+ "\3\u1332\3\u1334\3\u1335\3\u1337\3\u133b\3\u133f\3\u133f\3\u1352\3\u1352"+
+ "\3\u135f\3\u1363\3\u1402\3\u1436\3\u1449\3\u144c\3\u1482\3\u14b1\3\u14c6"+
+ "\3\u14c7\3\u14c9\3\u14c9\3\u1582\3\u15b0\3\u15da\3\u15dd\3\u1602\3\u1631"+
+ "\3\u1646\3\u1646\3\u1682\3\u16ac\3\u1702\3\u171b\3\u18a2\3\u18e1\3\u1901"+
+ "\3\u1901\3\u1a02\3\u1a02\3\u1a0d\3\u1a34\3\u1a3c\3\u1a3c\3\u1a52\3\u1a52"+
+ "\3\u1a5e\3\u1a85\3\u1a88\3\u1a8b\3\u1ac2\3\u1afa\3\u1c02\3\u1c0a\3\u1c0c"+
+ "\3\u1c30\3\u1c42\3\u1c42\3\u1c74\3\u1c91\3\u1d02\3\u1d08\3\u1d0a\3\u1d0b"+
+ "\3\u1d0d\3\u1d32\3\u1d48\3\u1d48\3\u2002\3\u239b\3\u2482\3\u2545\3\u3002"+
+ "\3\u3430\3\u4402\3\u4648\3\u6802\3\u6a3a\3\u6a42\3\u6a60\3\u6ad2\3\u6aef"+
+ "\3\u6b02\3\u6b31\3\u6b42\3\u6b45\3\u6b65\3\u6b79\3\u6b7f\3\u6b91\3\u6f02"+
+ "\3\u6f46\3\u6f52\3\u6f52\3\u6f95\3\u6fa1\3\u6fe2\3\u6fe3\3\u7002\3\u87ee"+
+ "\3\u8802\3\u8af4\3\ub002\3\ub120\3\ub172\3\ub2fd\3\ubc02\3\ubc6c\3\ubc72"+
+ "\3\ubc7e\3\ubc82\3\ubc8a\3\ubc92\3\ubc9b\3\ud402\3\ud456\3\ud458\3\ud49e"+
+ "\3\ud4a0\3\ud4a1\3\ud4a4\3\ud4a4\3\ud4a7\3\ud4a8\3\ud4ab\3\ud4ae\3\ud4b0"+
+ "\3\ud4bb\3\ud4bd\3\ud4bd\3\ud4bf\3\ud4c5\3\ud4c7\3\ud507\3\ud509\3\ud50c"+
+ "\3\ud50f\3\ud516\3\ud518\3\ud51e\3\ud520\3\ud53b\3\ud53d\3\ud540\3\ud542"+
+ "\3\ud546\3\ud548\3\ud548\3\ud54c\3\ud552\3\ud554\3\ud6a7\3\ud6aa\3\ud6c2"+
+ "\3\ud6c4\3\ud6dc\3\ud6de\3\ud6fc\3\ud6fe\3\ud716\3\ud718\3\ud736\3\ud738"+
+ "\3\ud750\3\ud752\3\ud770\3\ud772\3\ud78a\3\ud78c\3\ud7aa\3\ud7ac\3\ud7c4"+
+ "\3\ud7c6\3\ud7cd\3\ue802\3\ue8c6\3\ue902\3\ue945\3\uee02\3\uee05\3\uee07"+
+ "\3\uee21\3\uee23\3\uee24\3\uee26\3\uee26\3\uee29\3\uee29\3\uee2b\3\uee34"+
+ "\3\uee36\3\uee39\3\uee3b\3\uee3b\3\uee3d\3\uee3d\3\uee44\3\uee44\3\uee49"+
+ "\3\uee49\3\uee4b\3\uee4b\3\uee4d\3\uee4d\3\uee4f\3\uee51\3\uee53\3\uee54"+
+ "\3\uee56\3\uee56\3\uee59\3\uee59\3\uee5b\3\uee5b\3\uee5d\3\uee5d\3\uee5f"+
+ "\3\uee5f\3\uee61\3\uee61\3\uee63\3\uee64\3\uee66\3\uee66\3\uee69\3\uee6c"+
+ "\3\uee6e\3\uee74\3\uee76\3\uee79\3\uee7b\3\uee7e\3\uee80\3\uee80\3\uee82"+
+ "\3\uee8b\3\uee8d\3\uee9d\3\ueea3\3\ueea5\3\ueea7\3\ueeab\3\ueead\3\ueebd"+
+ "\3\2\4\ua6d8\4\ua702\4\ub736\4\ub742\4\ub81f\4\ub822\4\ucea3\4\uceb2\4"+
+ "\uebe2\4\uf802\4\ufa1f\4\u060e\2\4\3\2\2\2\2\6\3\2\2\2\2\b\3\2\2\2\2\n"+
+ "\3\2\2\2\2\f\3\2\2\2\2\16\3\2\2\2\2\20\3\2\2\2\2\22\3\2\2\2\2\24\3\2\2"+
+ "\2\2\26\3\2\2\2\2\30\3\2\2\2\2\32\3\2\2\2\2\34\3\2\2\2\2\36\3\2\2\2\2"+
+ " \3\2\2\2\2\"\3\2\2\2\2$\3\2\2\2\2&\3\2\2\2\2(\3\2\2\2\2*\3\2\2\2\2,\3"+
+ "\2\2\2\2.\3\2\2\2\2\60\3\2\2\2\2\62\3\2\2\2\2\64\3\2\2\2\2\66\3\2\2\2"+
+ "\28\3\2\2\2\2:\3\2\2\2\2<\3\2\2\2\2>\3\2\2\2\2@\3\2\2\2\2B\3\2\2\2\2D"+
+ "\3\2\2\2\2F\3\2\2\2\2H\3\2\2\2\2J\3\2\2\2\2L\3\2\2\2\2N\3\2\2\2\2P\3\2"+
+ "\2\2\2R\3\2\2\2\2T\3\2\2\2\2V\3\2\2\2\2X\3\2\2\2\2Z\3\2\2\2\2\\\3\2\2"+
+ "\2\2^\3\2\2\2\2`\3\2\2\2\2b\3\2\2\2\2d\3\2\2\2\2f\3\2\2\2\2h\3\2\2\2\2"+
+ "j\3\2\2\2\2l\3\2\2\2\2n\3\2\2\2\2p\3\2\2\2\2r\3\2\2\2\2t\3\2\2\2\2v\3"+
+ "\2\2\2\2x\3\2\2\2\2z\3\2\2\2\2|\3\2\2\2\2~\3\2\2\2\2\u0080\3\2\2\2\2\u0082"+
+ "\3\2\2\2\2\u0084\3\2\2\2\2\u0086\3\2\2\2\2\u0088\3\2\2\2\2\u008a\3\2\2"+
+ "\2\2\u008c\3\2\2\2\2\u008e\3\2\2\2\2\u0090\3\2\2\2\2\u0092\3\2\2\2\2\u0094"+
+ "\3\2\2\2\2\u0096\3\2\2\2\2\u0098\3\2\2\2\2\u009a\3\2\2\2\2\u009c\3\2\2"+
+ "\2\2\u009e\3\2\2\2\2\u00a0\3\2\2\2\2\u00a2\3\2\2\2\2\u00a4\3\2\2\2\2\u00a6"+
+ "\3\2\2\2\2\u00a8\3\2\2\2\2\u00aa\3\2\2\2\2\u00ac\3\2\2\2\2\u00ae\3\2\2"+
+ "\2\2\u00b0\3\2\2\2\2\u00b2\3\2\2\2\2\u00b4\3\2\2\2\2\u00b6\3\2\2\2\2\u00b8"+
+ "\3\2\2\2\2\u00ba\3\2\2\2\2\u00bc\3\2\2\2\2\u00be\3\2\2\2\2\u00c0\3\2\2"+
+ "\2\2\u00c2\3\2\2\2\2\u00c4\3\2\2\2\2\u00c6\3\2\2\2\2\u00c8\3\2\2\2\2\u00ca"+
+ "\3\2\2\2\2\u00cc\3\2\2\2\2\u00ce\3\2\2\2\2\u00d0\3\2\2\2\2\u00d2\3\2\2"+
+ "\2\2\u00d4\3\2\2\2\2\u00d6\3\2\2\2\2\u00d8\3\2\2\2\2\u00da\3\2\2\2\2\u00dc"+
+ "\3\2\2\2\2\u00de\3\2\2\2\2\u00e0\3\2\2\2\2\u00e2\3\2\2\2\2\u00e4\3\2\2"+
+ "\2\2\u00e6\3\2\2\2\2\u00e8\3\2\2\2\2\u00ea\3\2\2\2\2\u00ec\3\2\2\2\2\u00ee"+
+ "\3\2\2\2\2\u00f0\3\2\2\2\2\u00f2\3\2\2\2\2\u00f4\3\2\2\2\2\u00f6\3\2\2"+
+ "\2\2\u00f8\3\2\2\2\2\u00fa\3\2\2\2\2\u00fc\3\2\2\2\2\u00fe\3\2\2\2\2\u0100"+
+ "\3\2\2\2\2\u0102\3\2\2\2\2\u0104\3\2\2\2\2\u0106\3\2\2\2\2\u0108\3\2\2"+
+ "\2\2\u010a\3\2\2\2\2\u010c\3\2\2\2\2\u010e\3\2\2\2\2\u0110\3\2\2\2\2\u0112"+
+ "\3\2\2\2\2\u0114\3\2\2\2\2\u0116\3\2\2\2\2\u0118\3\2\2\2\2\u011a\3\2\2"+
+ "\2\2\u011c\3\2\2\2\2\u011e\3\2\2\2\2\u0120\3\2\2\2\2\u0126\3\2\2\2\2\u012a"+
+ "\3\2\2\2\2\u012c\3\2\2\2\2\u012e\3\2\2\2\2\u0130\3\2\2\2\2\u0132\3\2\2"+
+ "\2\2\u0134\3\2\2\2\2\u0136\3\2\2\2\2\u0138\3\2\2\2\2\u013a\3\2\2\2\2\u013c"+
+ "\3\2\2\2\2\u013e\3\2\2\2\2\u0140\3\2\2\2\3\u0156\3\2\2\2\3\u0158\3\2\2"+
+ "\2\3\u015a\3\2\2\2\3\u015c\3\2\2\2\3\u015e\3\2\2\2\4\u0162\3\2\2\2\6\u0178"+
+ "\3\2\2\2\b\u017a\3\2\2\2\n\u0181\3\2\2\2\f\u0189\3\2\2\2\16\u0190\3\2"+
+ "\2\2\20\u0197\3\2\2\2\22\u019e\3\2\2\2\24\u01a5\3\2\2\2\26\u01ae\3\2\2"+
+ "\2\30\u01b8\3\2\2\2\32\u01c0\3\2\2\2\34\u01ca\3\2\2\2\36\u01d6\3\2\2\2"+
+ " \u01dd\3\2\2\2\"\u01e8\3\2\2\2$\u01eb\3\2\2\2&\u01f1\3\2\2\2(\u01fa\3"+
+ "\2\2\2*\u01ff\3\2\2\2,\u0206\3\2\2\2.\u020d\3\2\2\2\60\u0213\3\2\2\2\62"+
+ "\u0218\3\2\2\2\64\u021f\3\2\2\2\66\u0229\3\2\2\28\u022d\3\2\2\2:\u0233"+
+ "\3\2\2\2<\u0236\3\2\2\2>\u0238\3\2\2\2@\u023f\3\2\2\2B\u0245\3\2\2\2D"+
+ "\u0252\3\2\2\2F\u025b\3\2\2\2H\u025f\3\2\2\2J\u0263\3\2\2\2L\u0269\3\2"+
+ "\2\2N\u026b\3\2\2\2P\u026e\3\2\2\2R\u0273\3\2\2\2T\u0279\3\2\2\2V\u027f"+
+ "\3\2\2\2X\u0286\3\2\2\2Z\u028d\3\2\2\2\\\u0296\3\2\2\2^\u029c\3\2\2\2"+
+ "`\u02a2\3\2\2\2b\u02a9\3\2\2\2d\u02af\3\2\2\2f\u02b6\3\2\2\2h\u02bc\3"+
+ "\2\2\2j\u02c5\3\2\2\2l\u02cd\3\2\2\2n\u02d3\3\2\2\2p\u02db\3\2\2\2r\u02e2"+
+ "\3\2\2\2t\u02e7\3\2\2\2v\u02f0\3\2\2\2x\u02ff\3\2\2\2z\u0305\3\2\2\2|"+
+ "\u030b\3\2\2\2~\u030f\3\2\2\2\u0080\u0312\3\2\2\2\u0082\u0319\3\2\2\2"+
+ "\u0084\u0323\3\2\2\2\u0086\u032d\3\2\2\2\u0088\u0339\3\2\2\2\u008a\u0342"+
+ "\3\2\2\2\u008c\u034c\3\2\2\2\u008e\u0354\3\2\2\2\u0090\u0360\3\2\2\2\u0092"+
+ "\u036f\3\2\2\2\u0094\u0375\3\2\2\2\u0096\u0379\3\2\2\2\u0098\u037d\3\2"+
+ "\2\2\u009a\u0382\3\2\2\2\u009c\u038a\3\2\2\2\u009e\u0392\3\2\2\2\u00a0"+
+ "\u0397\3\2\2\2\u00a2\u03a1\3\2\2\2\u00a4\u03a8\3\2\2\2\u00a6\u03ad\3\2"+
+ "\2\2\u00a8\u03b3\3\2\2\2\u00aa\u03b6\3\2\2\2\u00ac\u03ba\3\2\2\2\u00ae"+
+ "\u03c1\3\2\2\2\u00b0\u03c6\3\2\2\2\u00b2\u03cb\3\2\2\2\u00b4\u03d0\3\2"+
+ "\2\2\u00b6\u03d8\3\2\2\2\u00b8\u03df\3\2\2\2\u00ba\u03e5\3\2\2\2\u00bc"+
+ "\u03f3\3\2\2\2\u00be\u03f6\3\2\2\2\u00c0\u03fc\3\2\2\2\u00c2\u0401\3\2"+
+ "\2\2\u00c4\u040c\3\2\2\2\u00c6\u0410\3\2\2\2\u00c8\u0417\3\2\2\2\u00ca"+
+ "\u0420\3\2\2\2\u00cc\u0424\3\2\2\2\u00ce\u042a\3\2\2\2\u00d0\u0434\3\2"+
+ "\2\2\u00d2\u0436\3\2\2\2\u00d4\u043a\3\2\2\2\u00d6\u043c\3\2\2\2\u00d8"+
+ "\u0440\3\2\2\2\u00da\u0442\3\2\2\2\u00dc\u0446\3\2\2\2\u00de\u0448\3\2"+
+ "\2\2\u00e0\u044a\3\2\2\2\u00e2\u044c\3\2\2\2\u00e4\u044e\3\2\2\2\u00e6"+
+ "\u0450\3\2\2\2\u00e8\u0455\3\2\2\2\u00ea\u045a\3\2\2\2\u00ec\u045d\3\2"+
+ "\2\2\u00ee\u0461\3\2\2\2\u00f0\u0464\3\2\2\2\u00f2\u0467\3\2\2\2\u00f4"+
+ "\u046a\3\2\2\2\u00f6\u046d\3\2\2\2\u00f8\u046f\3\2\2\2\u00fa\u0472\3\2"+
+ "\2\2\u00fc\u0474\3\2\2\2\u00fe\u0477\3\2\2\2\u0100\u0479\3\2\2\2\u0102"+
+ "\u047b\3\2\2\2\u0104\u047d\3\2\2\2\u0106\u0480\3\2\2\2\u0108\u0483\3\2"+
+ "\2\2\u010a\u0486\3\2\2\2\u010c\u0488\3\2\2\2\u010e\u048a\3\2\2\2\u0110"+
+ "\u048c\3\2\2\2\u0112\u048e\3\2\2\2\u0114\u0490\3\2\2\2\u0116\u0492\3\2"+
+ "\2\2\u0118\u04a0\3\2\2\2\u011a\u04a4\3\2\2\2\u011c\u04b0\3\2\2\2\u011e"+
+ "\u04be\3\2\2\2\u0120\u04ca\3\2\2\2\u0122\u04ee\3\2\2\2\u0124\u04f0\3\2"+
+ "\2\2\u0126\u04f9\3\2\2\2\u0128\u04ff\3\2\2\2\u012a\u0506\3\2\2\2\u012c"+
+ "\u050c\3\2\2\2\u012e\u050e\3\2\2\2\u0130\u0513\3\2\2\2\u0132\u0518\3\2"+
+ "\2\2\u0134\u051f\3\2\2\2\u0136\u052a\3\2\2\2\u0138\u0535\3\2\2\2\u013a"+
+ "\u0542\3\2\2\2\u013c\u0548\3\2\2\2\u013e\u0557\3\2\2\2\u0140\u055d\3\2"+
+ "\2\2\u0142\u056c\3\2\2\2\u0144\u056e\3\2\2\2\u0146\u058a\3\2\2\2\u0148"+
+ "\u0594\3\2\2\2\u014a\u0596\3\2\2\2\u014c\u0598\3\2\2\2\u014e\u059a\3\2"+
+ "\2\2\u0150\u05a2\3\2\2\2\u0152\u05a4\3\2\2\2\u0154\u05a6\3\2\2\2\u0156"+
+ "\u05a9\3\2\2\2\u0158\u05af\3\2\2\2\u015a\u05bd\3\2\2\2\u015c\u05da\3\2"+
+ "\2\2\u015e\u05de\3\2\2\2\u0160\u0163\5\6\3\2\u0161\u0163\5\u0120\u0090"+
+ "\2\u0162\u0160\3\2\2\2\u0162\u0161\3\2\2\2\u0163\u0164\3\2\2\2\u0164\u0165"+
+ "\b\2\2\2\u0165\5\3\2\2\2\u0166\u0170\5\u0146\u00a3\2\u0167\u0168\7\60"+
+ "\2\2\u0168\u016a\6\3\2\2\u0169\u016b\5\u0146\u00a3\2\u016a\u0169\3\2\2"+
+ "\2\u016a\u016b\3\2\2\2\u016b\u016d\3\2\2\2\u016c\u016e\5\u014e\u00a7\2"+
+ "\u016d\u016c\3\2\2\2\u016d\u016e\3\2\2\2\u016e\u0171\3\2\2\2\u016f\u0171"+
+ "\5\u014e\u00a7\2\u0170\u0167\3\2\2\2\u0170\u016f\3\2\2\2\u0171\u0179\3"+
+ "\2\2\2\u0172\u0173\7\60\2\2\u0173\u0174\6\3\3\2\u0174\u0176\5\u0146\u00a3"+
+ "\2\u0175\u0177\5\u014e\u00a7\2\u0176\u0175\3\2\2\2\u0176\u0177\3\2\2\2"+
+ "\u0177\u0179\3\2\2\2\u0178\u0166\3\2\2\2\u0178\u0172\3\2\2\2\u0179\7\3"+
+ "\2\2\2\u017a\u017b\7v\2\2\u017b\u017c\7t\2\2\u017c\u017d\7w\2\2\u017d"+
+ "\u017e\7g\2\2\u017e\u017f\3\2\2\2\u017f\u0180\b\4\2\2\u0180\t\3\2\2\2"+
+ "\u0181\u0182\7h\2\2\u0182\u0183\7c\2\2\u0183\u0184\7n\2\2\u0184\u0185"+
+ "\7u\2\2\u0185\u0186\7g\2\2\u0186\u0187\3\2\2\2\u0187\u0188\b\5\2\2\u0188"+
+ "\13\3\2\2\2\u0189\u018a\7c\2\2\u018a\u018b\7u\2\2\u018b\u018c\7u\2\2\u018c"+
+ "\u018d\7g\2\2\u018d\u018e\7t\2\2\u018e\u018f\7v\2\2\u018f\r\3\2\2\2\u0190"+
+ "\u0191\7c\2\2\u0191\u0192\7u\2\2\u0192\u0193\7u\2\2\u0193\u0194\7w\2\2"+
+ "\u0194\u0195\7o\2\2\u0195\u0196\7g\2\2\u0196\17\3\2\2\2\u0197\u0198\7"+
+ "k\2\2\u0198\u0199\7p\2\2\u0199\u019a\7j\2\2\u019a\u019b\7c\2\2\u019b\u019c"+
+ "\7n\2\2\u019c\u019d\7g\2\2\u019d\21\3\2\2\2\u019e\u019f\7g\2\2\u019f\u01a0"+
+ "\7z\2\2\u01a0\u01a1\7j\2\2\u01a1\u01a2\7c\2\2\u01a2\u01a3\7n\2\2\u01a3"+
+ "\u01a4\7g\2\2\u01a4\23\3\2\2\2\u01a5\u01a6\7t\2\2\u01a6\u01a7\7g\2\2\u01a7"+
+ "\u01a8\7s\2\2\u01a8\u01a9\7w\2\2\u01a9\u01aa\7k\2\2\u01aa\u01ab\7t\2\2"+
+ "\u01ab\u01ac\7g\2\2\u01ac\u01ad\7u\2\2\u01ad\25\3\2\2\2\u01ae\u01af\7"+
+ "r\2\2\u01af\u01b0\7t\2\2\u01b0\u01b1\7g\2\2\u01b1\u01b2\7u\2\2\u01b2\u01b3"+
+ "\7g\2\2\u01b3\u01b4\7t\2\2\u01b4\u01b5\7x\2\2\u01b5\u01b6\7g\2\2\u01b6"+
+ "\u01b7\7u\2\2\u01b7\27\3\2\2\2\u01b8\u01b9\7g\2\2\u01b9\u01ba\7p\2\2\u01ba"+
+ "\u01bb\7u\2\2\u01bb\u01bc\7w\2\2\u01bc\u01bd\7t\2\2\u01bd\u01be\7g\2\2"+
+ "\u01be\u01bf\7u\2\2\u01bf\31\3\2\2\2\u01c0\u01c1\7k\2\2\u01c1\u01c2\7"+
+ "p\2\2\u01c2\u01c3\7x\2\2\u01c3\u01c4\7c\2\2\u01c4\u01c5\7t\2\2\u01c5\u01c6"+
+ "\7k\2\2\u01c6\u01c7\7c\2\2\u01c7\u01c8\7p\2\2\u01c8\u01c9\7v\2\2\u01c9"+
+ "\33\3\2\2\2\u01ca\u01cb\7f\2\2\u01cb\u01cc\7g\2\2\u01cc\u01cd\7e\2\2\u01cd"+
+ "\u01ce\7t\2\2\u01ce\u01cf\7g\2\2\u01cf\u01d0\7c\2\2\u01d0\u01d1\7u\2\2"+
+ "\u01d1\u01d2\7g\2\2\u01d2\u01d3\7u\2\2\u01d3\u01d4\3\2\2\2\u01d4\u01d5"+
+ "\b\16\2\2\u01d5\35\3\2\2\2\u01d6\u01d7\7r\2\2\u01d7\u01d8\7w\2\2\u01d8"+
+ "\u01d9\7t\2\2\u01d9\u01da\7g\2\2\u01da\u01db\3\2\2\2\u01db\u01dc\b\17"+
+ "\2\2\u01dc\37\3\2\2\2\u01dd\u01de\7k\2\2\u01de\u01df\7o\2\2\u01df\u01e0"+
+ "\7r\2\2\u01e0\u01e1\7n\2\2\u01e1\u01e2\7g\2\2\u01e2\u01e3\7o\2\2\u01e3"+
+ "\u01e4\7g\2\2\u01e4\u01e5\7p\2\2\u01e5\u01e6\7v\2\2\u01e6\u01e7\7u\2\2"+
+ "\u01e7!\3\2\2\2\u01e8\u01e9\7c\2\2\u01e9\u01ea\7u\2\2\u01ea#\3\2\2\2\u01eb"+
+ "\u01ec\7q\2\2\u01ec\u01ed\7n\2\2\u01ed\u01ee\7f\2\2\u01ee\u01ef\3\2\2"+
+ "\2\u01ef\u01f0\b\22\2\2\u01f0%\3\2\2\2\u01f1\u01f2\7d\2\2\u01f2\u01f3"+
+ "\7g\2\2\u01f3\u01f4\7h\2\2\u01f4\u01f5\7q\2\2\u01f5\u01f6\7t\2\2\u01f6"+
+ "\u01f7\7g\2\2\u01f7\u01f8\3\2\2\2\u01f8\u01f9\b\23\2\2\u01f9\'\3\2\2\2"+
+ "\u01fa\u01fb\7%\2\2\u01fb\u01fc\7n\2\2\u01fc\u01fd\7j\2\2\u01fd\u01fe"+
+ "\7u\2\2\u01fe)\3\2\2\2\u01ff\u0200\7h\2\2\u0200\u0201\7q\2\2\u0201\u0202"+
+ "\7t\2\2\u0202\u0203\7c\2\2\u0203\u0204\7n\2\2\u0204\u0205\7n\2\2\u0205"+
+ "+\3\2\2\2\u0206\u0207\7g\2\2\u0207\u0208\7z\2\2\u0208\u0209\7k\2\2\u0209"+
+ "\u020a\7u\2\2\u020a\u020b\7v\2\2\u020b\u020c\7u\2\2\u020c-\3\2\2\2\u020d"+
+ "\u020e\7c\2\2\u020e\u020f\7e\2\2\u020f\u0210\7e\2\2\u0210\u0211\3\2\2"+
+ "\2\u0211\u0212\b\27\2\2\u0212/\3\2\2\2\u0213\u0214\7h\2\2\u0214\u0215"+
+ "\7q\2\2\u0215\u0216\7n\2\2\u0216\u0217\7f\2\2\u0217\61\3\2\2\2\u0218\u0219"+
+ "\7w\2\2\u0219\u021a\7p\2\2\u021a\u021b\7h\2\2\u021b\u021c\7q\2\2\u021c"+
+ "\u021d\7n\2\2\u021d\u021e\7f\2\2\u021e\63\3\2\2\2\u021f\u0220\7w\2\2\u0220"+
+ "\u0221\7p\2\2\u0221\u0222\7h\2\2\u0222\u0223\7q\2\2\u0223\u0224\7n\2\2"+
+ "\u0224\u0225\7f\2\2\u0225\u0226\7k\2\2\u0226\u0227\7p\2\2\u0227\u0228"+
+ "\7i\2\2\u0228\65\3\2\2\2\u0229\u022a\7n\2\2\u022a\u022b\7g\2\2\u022b\u022c"+
+ "\7v\2\2\u022c\67\3\2\2\2\u022d\u022e\7i\2\2\u022e\u022f\7j\2\2\u022f\u0230"+
+ "\7q\2\2\u0230\u0231\7u\2\2\u0231\u0232\7v\2\2\u02329\3\2\2\2\u0233\u0234"+
+ "\7k\2\2\u0234\u0235\7p\2\2\u0235;\3\2\2\2\u0236\u0237\7%\2\2\u0237=\3"+
+ "\2\2\2\u0238\u0239\7u\2\2\u0239\u023a\7w\2\2\u023a\u023b\7d\2\2\u023b"+
+ "\u023c\7u\2\2\u023c\u023d\7g\2\2\u023d\u023e\7v\2\2\u023e?\3\2\2\2\u023f"+
+ "\u0240\7w\2\2\u0240\u0241\7p\2\2\u0241\u0242\7k\2\2\u0242\u0243\7q\2\2"+
+ "\u0243\u0244\7p\2\2\u0244A\3\2\2\2\u0245\u0246\7k\2\2\u0246\u0247\7p\2"+
+ "\2\u0247\u0248\7v\2\2\u0248\u0249\7g\2\2\u0249\u024a\7t\2\2\u024a\u024b"+
+ "\7u\2\2\u024b\u024c\7g\2\2\u024c\u024d\7e\2\2\u024d\u024e\7v\2\2\u024e"+
+ "\u024f\7k\2\2\u024f\u0250\7q\2\2\u0250\u0251\7p\2\2\u0251C\3\2\2\2\u0252"+
+ "\u0253\7u\2\2\u0253\u0254\7g\2\2\u0254\u0255\7v\2\2\u0255\u0256\7o\2\2"+
+ "\u0256\u0257\7k\2\2\u0257\u0258\7p\2\2\u0258\u0259\7w\2\2\u0259\u025a"+
+ "\7u\2\2\u025aE\3\2\2\2\u025b\u025c\7?\2\2\u025c\u025d\7?\2\2\u025d\u025e"+
+ "\7@\2\2\u025eG\3\2\2\2\u025f\u0260\7/\2\2\u0260\u0261\7/\2\2\u0261\u0262"+
+ "\7,\2\2\u0262I\3\2\2\2\u0263\u0264\7c\2\2\u0264\u0265\7r\2\2\u0265\u0266"+
+ "\7r\2\2\u0266\u0267\7n\2\2\u0267\u0268\7{\2\2\u0268K\3\2\2\2\u0269\u026a"+
+ "\7A\2\2\u026aM\3\2\2\2\u026b\u026c\7#\2\2\u026c\u026d\7>\2\2\u026dO\3"+
+ "\2\2\2\u026e\u026f\7#\2\2\u026f\u0270\7@\2\2\u0270\u0271\3\2\2\2\u0271"+
+ "\u0272\b(\2\2\u0272Q\3\2\2\2\u0273\u0274\7u\2\2\u0274\u0275\7g\2\2\u0275"+
+ "\u0276\7s\2\2\u0276\u0277\3\2\2\2\u0277\u0278\b)\2\2\u0278S\3\2\2\2\u0279"+
+ "\u027a\7u\2\2\u027a\u027b\7g\2\2\u027b\u027c\7v\2\2\u027c\u027d\3\2\2"+
+ "\2\u027d\u027e\b*\2\2\u027eU\3\2\2\2\u027f\u0280\7o\2\2\u0280\u0281\7"+
+ "u\2\2\u0281\u0282\7g\2\2\u0282\u0283\7v\2\2\u0283\u0284\3\2\2\2\u0284"+
+ "\u0285\b+\2\2\u0285W\3\2\2\2\u0286\u0287\7f\2\2\u0287\u0288\7k\2\2\u0288"+
+ "\u0289\7e\2\2\u0289\u028a\7v\2\2\u028a\u028b\3\2\2\2\u028b\u028c\b,\2"+
+ "\2\u028cY\3\2\2\2\u028d\u028e\7q\2\2\u028e\u028f\7r\2\2\u028f\u0290\7"+
+ "v\2\2\u0290\u0291\7k\2\2\u0291\u0292\7q\2\2\u0292\u0293\7p\2\2\u0293\u0294"+
+ "\3\2\2\2\u0294\u0295\b-\2\2\u0295[\3\2\2\2\u0296\u0297\7n\2\2\u0297\u0298"+
+ "\7g\2\2\u0298\u0299\7p\2\2\u0299\u029a\3\2\2\2\u029a\u029b\b.\2\2\u029b"+
+ "]\3\2\2\2\u029c\u029d\7p\2\2\u029d\u029e\7g\2\2\u029e\u029f\7y\2\2\u029f"+
+ "\u02a0\3\2\2\2\u02a0\u02a1\b/\2\2\u02a1_\3\2\2\2\u02a2\u02a3\7o\2\2\u02a3"+
+ "\u02a4\7c\2\2\u02a4\u02a5\7m\2\2\u02a5\u02a6\7g\2\2\u02a6\u02a7\3\2\2"+
+ "\2\u02a7\u02a8\b\60\2\2\u02a8a\3\2\2\2\u02a9\u02aa\7e\2\2\u02aa\u02ab"+
+ "\7c\2\2\u02ab\u02ac\7r\2\2\u02ac\u02ad\3\2\2\2\u02ad\u02ae\b\61\2\2\u02ae"+
+ "c\3\2\2\2\u02af\u02b0\7u\2\2\u02b0\u02b1\7q\2\2\u02b1\u02b2\7o\2\2\u02b2"+
+ "\u02b3\7g\2\2\u02b3\u02b4\3\2\2\2\u02b4\u02b5\b\62\2\2\u02b5e\3\2\2\2"+
+ "\u02b6\u02b7\7i\2\2\u02b7\u02b8\7g\2\2\u02b8\u02b9\7v\2\2\u02b9\u02ba"+
+ "\3\2\2\2\u02ba\u02bb\b\63\2\2\u02bbg\3\2\2\2\u02bc\u02bd\7f\2\2\u02bd"+
+ "\u02be\7q\2\2\u02be\u02bf\7o\2\2\u02bf\u02c0\7c\2\2\u02c0\u02c1\7k\2\2"+
+ "\u02c1\u02c2\7p\2\2\u02c2\u02c3\3\2\2\2\u02c3\u02c4\b\64\2\2\u02c4i\3"+
+ "\2\2\2\u02c5\u02c6\7c\2\2\u02c6\u02c7\7z\2\2\u02c7\u02c8\7k\2\2\u02c8"+
+ "\u02c9\7q\2\2\u02c9\u02ca\7o\2\2\u02ca\u02cb\3\2\2\2\u02cb\u02cc\b\65"+
+ "\2\2\u02cck\3\2\2\2\u02cd\u02ce\7c\2\2\u02ce\u02cf\7f\2\2\u02cf\u02d0"+
+ "\7v\2\2\u02d0\u02d1\3\2\2\2\u02d1\u02d2\b\66\2\2\u02d2m\3\2\2\2\u02d3"+
+ "\u02d4\7o\2\2\u02d4\u02d5\7c\2\2\u02d5\u02d6\7v\2\2\u02d6\u02d7\7e\2\2"+
+ "\u02d7\u02d8\7j\2\2\u02d8\u02d9\3\2\2\2\u02d9\u02da\b\67\2\2\u02dao\3"+
+ "\2\2\2\u02db\u02dc\7p\2\2\u02dc\u02dd\7q\2\2\u02dd\u02de\7p\2\2\u02de"+
+ "\u02df\7g\2\2\u02df\u02e0\3\2\2\2\u02e0\u02e1\b8\2\2\u02e1q\3\2\2\2\u02e2"+
+ "\u02e3\7r\2\2\u02e3\u02e4\7t\2\2\u02e4\u02e5\7g\2\2\u02e5\u02e6\7f\2\2"+
+ "\u02e6s\3\2\2\2\u02e7\u02e8\7v\2\2\u02e8\u02e9\7{\2\2\u02e9\u02ea\7r\2"+
+ "\2\u02ea\u02eb\7g\2\2\u02eb\u02ec\7Q\2\2\u02ec\u02ed\7h\2\2\u02ed\u02ee"+
+ "\3\2\2\2\u02ee\u02ef\b:\2\2\u02efu\3\2\2\2\u02f0\u02f1\7k\2\2\u02f1\u02f2"+
+ "\7u\2\2\u02f2\u02f3\7E\2\2\u02f3\u02f4\7q\2\2\u02f4\u02f5\7o\2\2\u02f5"+
+ "\u02f6\7r\2\2\u02f6\u02f7\7c\2\2\u02f7\u02f8\7t\2\2\u02f8\u02f9\7c\2\2"+
+ "\u02f9\u02fa\7d\2\2\u02fa\u02fb\7n\2\2\u02fb\u02fc\7g\2\2\u02fc\u02fd"+
+ "\3\2\2\2\u02fd\u02fe\b;\2\2\u02few\3\2\2\2\u02ff\u0300\7n\2\2\u0300\u0301"+
+ "\7q\2\2\u0301\u0302\7y\2\2\u0302\u0303\3\2\2\2\u0303\u0304\b<\2\2\u0304"+
+ "y\3\2\2\2\u0305\u0306\7u\2\2\u0306\u0307\7j\2\2\u0307\u0308\7c\2\2\u0308"+
+ "\u0309\7t\2\2\u0309\u030a\7g\2\2\u030a{\3\2\2\2\u030b\u030c\7B\2\2\u030c"+
+ "\u030d\3\2\2\2\u030d\u030e\b>\2\2\u030e}\3\2\2\2\u030f\u0310\7\60\2\2"+
+ "\u0310\u0311\7\60\2\2\u0311\177\3\2\2\2\u0312\u0313\7u\2\2\u0313\u0314"+
+ "\7j\2\2\u0314\u0315\7c\2\2\u0315\u0316\7t\2\2\u0316\u0317\7g\2\2\u0317"+
+ "\u0318\7f\2\2\u0318\u0081\3\2\2\2\u0319\u031a\7g\2\2\u031a\u031b\7z\2"+
+ "\2\u031b\u031c\7e\2\2\u031c\u031d\7n\2\2\u031d\u031e\7w\2\2\u031e\u031f"+
+ "\7u\2\2\u031f\u0320\7k\2\2\u0320\u0321\7x\2\2\u0321\u0322\7g\2\2\u0322"+
+ "\u0083\3\2\2\2\u0323\u0324\7r\2\2\u0324\u0325\7t\2\2\u0325\u0326\7g\2"+
+ "\2\u0326\u0327\7f\2\2\u0327\u0328\7k\2\2\u0328\u0329\7e\2\2\u0329\u032a"+
+ "\7c\2\2\u032a\u032b\7v\2\2\u032b\u032c\7g\2\2\u032c\u0085\3\2\2\2\u032d"+
+ "\u032e\7y\2\2\u032e\u032f\7t\2\2\u032f\u0330\7k\2\2\u0330\u0331\7v\2\2"+
+ "\u0331\u0332\7g\2\2\u0332\u0333\7R\2\2\u0333\u0334\7g\2\2\u0334\u0335"+
+ "\7t\2\2\u0335\u0336\7o\2\2\u0336\u0337\3\2\2\2\u0337\u0338\bC\2\2\u0338"+
+ "\u0087\3\2\2\2\u0339\u033a\7p\2\2\u033a\u033b\7q\2\2\u033b\u033c\7R\2"+
+ "\2\u033c\u033d\7g\2\2\u033d\u033e\7t\2\2\u033e\u033f\7o\2\2\u033f\u0340"+
+ "\3\2\2\2\u0340\u0341\bD\2\2\u0341\u0089\3\2\2\2\u0342\u0343\7v\2\2\u0343"+
+ "\u0344\7t\2\2\u0344\u0345\7w\2\2\u0345\u0346\7u\2\2\u0346\u0347\7v\2\2"+
+ "\u0347\u0348\7g\2\2\u0348\u0349\7f\2\2\u0349\u034a\3\2\2\2\u034a\u034b"+
+ "\bE\2\2\u034b\u008b\3\2\2\2\u034c\u034d\7q\2\2\u034d\u034e\7w\2\2\u034e"+
+ "\u034f\7v\2\2\u034f\u0350\7n\2\2\u0350\u0351\7k\2\2\u0351\u0352\7p\2\2"+
+ "\u0352\u0353\7g\2\2\u0353\u008d\3\2\2\2\u0354\u0355\7k\2\2\u0355\u0356"+
+ "\7p\2\2\u0356\u0357\7k\2\2\u0357\u0358\7v\2\2\u0358\u0359\7G\2\2\u0359"+
+ "\u035a\7p\2\2\u035a\u035b\7u\2\2\u035b\u035c\7w\2\2\u035c\u035d\7t\2\2"+
+ "\u035d\u035e\7g\2\2\u035e\u035f\7u\2\2\u035f\u008f\3\2\2\2\u0360\u0361"+
+ "\7k\2\2\u0361\u0362\7o\2\2\u0362\u0363\7r\2\2\u0363\u0364\7q\2\2\u0364"+
+ "\u0365\7t\2\2\u0365\u0366\7v\2\2\u0366\u0367\7T\2\2\u0367\u0368\7g\2\2"+
+ "\u0368\u0369\7s\2\2\u0369\u036a\7w\2\2\u036a\u036b\7k\2\2\u036b\u036c"+
+ "\7t\2\2\u036c\u036d\7g\2\2\u036d\u036e\7u\2\2\u036e\u0091\3\2\2\2\u036f"+
+ "\u0370\7r\2\2\u0370\u0371\7t\2\2\u0371\u0372\7q\2\2\u0372\u0373\7q\2\2"+
+ "\u0373\u0374\7h\2\2\u0374\u0093\3\2\2\2\u0375\u0376\7?\2\2\u0376\u0377"+
+ "\7?\2\2\u0377\u0378\7?\2\2\u0378\u0095\3\2\2\2\u0379\u037a\7#\2\2\u037a"+
+ "\u037b\7?\2\2\u037b\u037c\7?\2\2\u037c\u0097\3\2\2\2\u037d\u037e\7y\2"+
+ "\2\u037e\u037f\7k\2\2\u037f\u0380\7v\2\2\u0380\u0381\7j\2\2\u0381\u0099"+
+ "\3\2\2\2\u0382\u0383\7d\2\2\u0383\u0384\7t\2\2\u0384\u0385\7g\2\2\u0385"+
+ "\u0386\7c\2\2\u0386\u0387\7m\2\2\u0387\u0388\3\2\2\2\u0388\u0389\bM\2"+
+ "\2\u0389\u009b\3\2\2\2\u038a\u038b\7f\2\2\u038b\u038c\7g\2\2\u038c\u038d"+
+ "\7h\2\2\u038d\u038e\7c\2\2\u038e\u038f\7w\2\2\u038f\u0390\7n\2\2\u0390"+
+ "\u0391\7v\2\2\u0391\u009d\3\2\2\2\u0392\u0393\7h\2\2\u0393\u0394\7w\2"+
+ "\2\u0394\u0395\7p\2\2\u0395\u0396\7e\2\2\u0396\u009f\3\2\2\2\u0397\u0398"+
+ "\7k\2\2\u0398\u0399\7p\2\2\u0399\u039a\7v\2\2\u039a\u039b\7g\2\2\u039b"+
+ "\u039c\7t\2\2\u039c\u039d\7h\2\2\u039d\u039e\7c\2\2\u039e\u039f\7e\2\2"+
+ "\u039f\u03a0\7g\2\2\u03a0\u00a1\3\2\2\2\u03a1\u03a2\7u\2\2\u03a2\u03a3"+
+ "\7g\2\2\u03a3\u03a4\7n\2\2\u03a4\u03a5\7g\2\2\u03a5\u03a6\7e\2\2\u03a6"+
+ "\u03a7\7v\2\2\u03a7\u00a3\3\2\2\2\u03a8\u03a9\7e\2\2\u03a9\u03aa\7c\2"+
+ "\2\u03aa\u03ab\7u\2\2\u03ab\u03ac\7g\2\2\u03ac\u00a5\3\2\2\2\u03ad\u03ae"+
+ "\7f\2\2\u03ae\u03af\7g\2\2\u03af\u03b0\7h\2\2\u03b0\u03b1\7g\2\2\u03b1"+
+ "\u03b2\7t\2\2\u03b2\u00a7\3\2\2\2\u03b3\u03b4\7i\2\2\u03b4\u03b5\7q\2"+
+ "\2\u03b5\u00a9\3\2\2\2\u03b6\u03b7\7o\2\2\u03b7\u03b8\7c\2\2\u03b8\u03b9"+
+ "\7r\2\2\u03b9\u00ab\3\2\2\2\u03ba\u03bb\7u\2\2\u03bb\u03bc\7v\2\2\u03bc"+
+ "\u03bd\7t\2\2\u03bd\u03be\7w\2\2\u03be\u03bf\7e\2\2\u03bf\u03c0\7v\2\2"+
+ "\u03c0\u00ad\3\2\2\2\u03c1\u03c2\7e\2\2\u03c2\u03c3\7j\2\2\u03c3\u03c4"+
+ "\7c\2\2\u03c4\u03c5\7p\2\2\u03c5\u00af\3\2\2\2\u03c6\u03c7\7g\2\2\u03c7"+
+ "\u03c8\7n\2\2\u03c8\u03c9\7u\2\2\u03c9\u03ca\7g\2\2\u03ca\u00b1\3\2\2"+
+ "\2\u03cb\u03cc\7i\2\2\u03cc\u03cd\7q\2\2\u03cd\u03ce\7v\2\2\u03ce\u03cf"+
+ "\7q\2\2\u03cf\u00b3\3\2\2\2\u03d0\u03d1\7r\2\2\u03d1\u03d2\7c\2\2\u03d2"+
+ "\u03d3\7e\2\2\u03d3\u03d4\7m\2\2\u03d4\u03d5\7c\2\2\u03d5\u03d6\7i\2\2"+
+ "\u03d6\u03d7\7g\2\2\u03d7\u00b5\3\2\2\2\u03d8\u03d9\7u\2\2\u03d9\u03da"+
+ "\7y\2\2\u03da\u03db\7k\2\2\u03db\u03dc\7v\2\2\u03dc\u03dd\7e\2\2\u03dd"+
+ "\u03de\7j\2\2\u03de\u00b7\3\2\2\2\u03df\u03e0\7e\2\2\u03e0\u03e1\7q\2"+
+ "\2\u03e1\u03e2\7p\2\2\u03e2\u03e3\7u\2\2\u03e3\u03e4\7v\2\2\u03e4\u00b9"+
+ "\3\2\2\2\u03e5\u03e6\7h\2\2\u03e6\u03e7\7c\2\2\u03e7\u03e8\7n\2\2\u03e8"+
+ "\u03e9\7n\2\2\u03e9\u03ea\7v\2\2\u03ea\u03eb\7j\2\2\u03eb\u03ec\7t\2\2"+
+ "\u03ec\u03ed\7q\2\2\u03ed\u03ee\7w\2\2\u03ee\u03ef\7i\2\2\u03ef\u03f0"+
+ "\7j\2\2\u03f0\u03f1\3\2\2\2\u03f1\u03f2\b]\2\2\u03f2\u00bb\3\2\2\2\u03f3"+
+ "\u03f4\7k\2\2\u03f4\u03f5\7h\2\2\u03f5\u00bd\3\2\2\2\u03f6\u03f7\7t\2"+
+ "\2\u03f7\u03f8\7c\2\2\u03f8\u03f9\7p\2\2\u03f9\u03fa\7i\2\2\u03fa\u03fb"+
+ "\7g\2\2\u03fb\u00bf\3\2\2\2\u03fc\u03fd\7v\2\2\u03fd\u03fe\7{\2\2\u03fe"+
+ "\u03ff\7r\2\2\u03ff\u0400\7g\2\2\u0400\u00c1\3\2\2\2\u0401\u0402\7e\2"+
+ "\2\u0402\u0403\7q\2\2\u0403\u0404\7p\2\2\u0404\u0405\7v\2\2\u0405\u0406"+
+ "\7k\2\2\u0406\u0407\7p\2\2\u0407\u0408\7w\2\2\u0408\u0409\7g\2\2\u0409"+
+ "\u040a\3\2\2\2\u040a\u040b\ba\2\2\u040b\u00c3\3\2\2\2\u040c\u040d\7h\2"+
+ "\2\u040d\u040e\7q\2\2\u040e\u040f\7t\2\2\u040f\u00c5\3\2\2\2\u0410\u0411"+
+ "\7k\2\2\u0411\u0412\7o\2\2\u0412\u0413\7r\2\2\u0413\u0414\7q\2\2\u0414"+
+ "\u0415\7t\2\2\u0415\u0416\7v\2\2\u0416\u00c7\3\2\2\2\u0417\u0418\7t\2"+
+ "\2\u0418\u0419\7g\2\2\u0419\u041a\7v\2\2\u041a\u041b\7w\2\2\u041b\u041c"+
+ "\7t\2\2\u041c\u041d\7p\2\2\u041d\u041e\3\2\2\2\u041e\u041f\bd\2\2\u041f"+
+ "\u00c9\3\2\2\2\u0420\u0421\7x\2\2\u0421\u0422\7c\2\2\u0422\u0423\7t\2"+
+ "\2\u0423\u00cb\3\2\2\2\u0424\u0425\7p\2\2\u0425\u0426\7k\2\2\u0426\u0427"+
+ "\7n\2\2\u0427\u0428\3\2\2\2\u0428\u0429\bf\2\2\u0429\u00cd\3\2\2\2\u042a"+
+ "\u042f\5\u0150\u00a8\2\u042b\u042e\5\u0150\u00a8\2\u042c\u042e\5\u0152"+
+ "\u00a9\2\u042d\u042b\3\2\2\2\u042d\u042c\3\2\2\2\u042e\u0431\3\2\2\2\u042f"+
+ "\u042d\3\2\2\2\u042f\u0430\3\2\2\2\u0430\u0432\3\2\2\2\u0431\u042f\3\2"+
+ "\2\2\u0432\u0433\bg\2\2\u0433\u00cf\3\2\2\2\u0434\u0435\7*\2\2\u0435\u00d1"+
+ "\3\2\2\2\u0436\u0437\7+\2\2\u0437\u0438\3\2\2\2\u0438\u0439\bi\2\2\u0439"+
+ "\u00d3\3\2\2\2\u043a\u043b\7}\2\2\u043b\u00d5\3\2\2\2\u043c\u043d\7\177"+
+ "\2\2\u043d\u043e\3\2\2\2\u043e\u043f\bk\2\2\u043f\u00d7\3\2\2\2\u0440"+
+ "\u0441\7]\2\2\u0441\u00d9\3\2\2\2\u0442\u0443\7_\2\2\u0443\u0444\3\2\2"+
+ "\2\u0444\u0445\bm\2\2\u0445\u00db\3\2\2\2\u0446\u0447\7?\2\2\u0447\u00dd"+
+ "\3\2\2\2\u0448\u0449\7.\2\2\u0449\u00df\3\2\2\2\u044a\u044b\7=\2\2\u044b"+
+ "\u00e1\3\2\2\2\u044c\u044d\7<\2\2\u044d\u00e3\3\2\2\2\u044e\u044f\7\60"+
+ "\2\2\u044f\u00e5\3\2\2\2\u0450\u0451\7-\2\2\u0451\u0452\7-\2\2\u0452\u0453"+
+ "\3\2\2\2\u0453\u0454\bs\2\2\u0454\u00e7\3\2\2\2\u0455\u0456\7/\2\2\u0456"+
+ "\u0457\7/\2\2\u0457\u0458\3\2\2\2\u0458\u0459\bt\2\2\u0459\u00e9\3\2\2"+
+ "\2\u045a\u045b\7<\2\2\u045b\u045c\7?\2\2\u045c\u00eb\3\2\2\2\u045d\u045e"+
+ "\7\60\2\2\u045e\u045f\7\60\2\2\u045f\u0460\7\60\2\2\u0460\u00ed\3\2\2"+
+ "\2\u0461\u0462\7~\2\2\u0462\u0463\7~\2\2\u0463\u00ef\3\2\2\2\u0464\u0465"+
+ "\7(\2\2\u0465\u0466\7(\2\2\u0466\u00f1\3\2\2\2\u0467\u0468\7?\2\2\u0468"+
+ "\u0469\7?\2\2\u0469\u00f3\3\2\2\2\u046a\u046b\7#\2\2\u046b\u046c\7?\2"+
+ "\2\u046c\u00f5\3\2\2\2\u046d\u046e\7>\2\2\u046e\u00f7\3\2\2\2\u046f\u0470"+
+ "\7>\2\2\u0470\u0471\7?\2\2\u0471\u00f9\3\2\2\2\u0472\u0473\7@\2\2\u0473"+
+ "\u00fb\3\2\2\2\u0474\u0475\7@\2\2\u0475\u0476\7?\2\2\u0476\u00fd\3\2\2"+
+ "\2\u0477\u0478\7~\2\2\u0478\u00ff\3\2\2\2\u0479\u047a\7\61\2\2\u047a\u0101"+
+ "\3\2\2\2\u047b\u047c\7\'\2\2\u047c\u0103\3\2\2\2\u047d\u047e\7>\2\2\u047e"+
+ "\u047f\7>\2\2\u047f\u0105\3\2\2\2\u0480\u0481\7@\2\2\u0481\u0482\7@\2"+
+ "\2\u0482\u0107\3\2\2\2\u0483\u0484\7(\2\2\u0484\u0485\7`\2\2\u0485\u0109"+
+ "\3\2\2\2\u0486\u0487\7#\2\2\u0487\u010b\3\2\2\2\u0488\u0489\7-\2\2\u0489"+
+ "\u010d\3\2\2\2\u048a\u048b\7/\2\2\u048b\u010f\3\2\2\2\u048c\u048d\7`\2"+
+ "\2\u048d\u0111\3\2\2\2\u048e\u048f\7,\2\2\u048f\u0113\3\2\2\2\u0490\u0491"+
+ "\7(\2\2\u0491\u0115\3\2\2\2\u0492\u0493\7>\2\2\u0493\u0494\7/\2\2\u0494"+
+ "\u0117\3\2\2\2\u0495\u04a1\7\62\2\2\u0496\u049d\t\2\2\2\u0497\u0499\7"+
+ "a\2\2\u0498\u0497\3\2\2\2\u0498\u0499\3\2\2\2\u0499\u049a\3\2\2\2\u049a"+
+ "\u049c\t\3\2\2\u049b\u0498\3\2\2\2\u049c\u049f\3\2\2\2\u049d\u049b\3\2"+
+ "\2\2\u049d\u049e\3\2\2\2\u049e\u04a1\3\2\2\2\u049f\u049d\3\2\2\2\u04a0"+
+ "\u0495\3\2\2\2\u04a0\u0496\3\2\2\2\u04a1\u04a2\3\2\2\2\u04a2\u04a3\b\u008c"+
+ "\2\2\u04a3\u0119\3\2\2\2\u04a4\u04a5\7\62\2\2\u04a5\u04aa\t\4\2\2\u04a6"+
+ "\u04a8\7a\2\2\u04a7\u04a6\3\2\2\2\u04a7\u04a8\3\2\2\2\u04a8\u04a9\3\2"+
+ "\2\2\u04a9\u04ab\5\u014c\u00a6\2\u04aa\u04a7\3\2\2\2\u04ab\u04ac\3\2\2"+
+ "\2\u04ac\u04aa\3\2\2\2\u04ac\u04ad\3\2\2\2\u04ad\u04ae\3\2\2\2\u04ae\u04af"+
+ "\b\u008d\2\2\u04af\u011b\3\2\2\2\u04b0\u04b2\7\62\2\2\u04b1\u04b3\t\5"+
+ "\2\2\u04b2\u04b1\3\2\2\2\u04b2\u04b3\3\2\2\2\u04b3\u04b8\3\2\2\2\u04b4"+
+ "\u04b6\7a\2\2\u04b5\u04b4\3\2\2\2\u04b5\u04b6\3\2\2\2\u04b6\u04b7\3\2"+
+ "\2\2\u04b7\u04b9\5\u0148\u00a4\2\u04b8\u04b5\3\2\2\2\u04b9\u04ba\3\2\2"+
+ "\2\u04ba\u04b8\3\2\2\2\u04ba\u04bb\3\2\2\2\u04bb\u04bc\3\2\2\2\u04bc\u04bd"+
+ "\b\u008e\2\2\u04bd\u011d\3\2\2\2\u04be\u04bf\7\62\2\2\u04bf\u04c4\t\6"+
+ "\2\2\u04c0\u04c2\7a\2\2\u04c1\u04c0\3\2\2\2\u04c1\u04c2\3\2\2\2\u04c2"+
+ "\u04c3\3\2\2\2\u04c3\u04c5\5\u014a\u00a5\2\u04c4\u04c1\3\2\2\2\u04c5\u04c6"+
+ "\3\2\2\2\u04c6\u04c4\3\2\2\2\u04c6\u04c7\3\2\2\2\u04c7\u04c8\3\2\2\2\u04c8"+
+ "\u04c9\b\u008f\2\2\u04c9\u011f\3\2\2\2\u04ca\u04cb\7\62\2\2\u04cb\u04cc"+
+ "\t\6\2\2\u04cc\u04cd\5\u0122\u0091\2\u04cd\u04ce\5\u0124\u0092\2\u04ce"+
+ "\u0121\3\2\2\2\u04cf\u04d1\7a\2\2\u04d0\u04cf\3\2\2\2\u04d0\u04d1\3\2"+
+ "\2\2\u04d1\u04d2\3\2\2\2\u04d2\u04d4\5\u014a\u00a5\2\u04d3\u04d0\3\2\2"+
+ "\2\u04d4\u04d5\3\2\2\2\u04d5\u04d3\3\2\2\2\u04d5\u04d6\3\2\2\2\u04d6\u04e1"+
+ "\3\2\2\2\u04d7\u04de\7\60\2\2\u04d8\u04da\7a\2\2\u04d9\u04d8\3\2\2\2\u04d9"+
+ "\u04da\3\2\2\2\u04da\u04db\3\2\2\2\u04db\u04dd\5\u014a\u00a5\2\u04dc\u04d9"+
+ "\3\2\2\2\u04dd\u04e0\3\2\2\2\u04de\u04dc\3\2\2\2\u04de\u04df\3\2\2\2\u04df"+
+ "\u04e2\3\2\2\2\u04e0\u04de\3\2\2\2\u04e1\u04d7\3\2\2\2\u04e1\u04e2\3\2"+
+ "\2\2\u04e2\u04ef\3\2\2\2\u04e3\u04e4\7\60\2\2\u04e4\u04eb\5\u014a\u00a5"+
+ "\2\u04e5\u04e7\7a\2\2\u04e6\u04e5\3\2\2\2\u04e6\u04e7\3\2\2\2\u04e7\u04e8"+
+ "\3\2\2\2\u04e8\u04ea\5\u014a\u00a5\2\u04e9\u04e6\3\2\2\2\u04ea\u04ed\3"+
+ "\2\2\2\u04eb\u04e9\3\2\2\2\u04eb\u04ec\3\2\2\2\u04ec\u04ef\3\2\2\2\u04ed"+
+ "\u04eb\3\2\2\2\u04ee\u04d3\3\2\2\2\u04ee\u04e3\3\2\2\2\u04ef\u0123\3\2"+
+ "\2\2\u04f0\u04f1\t\7\2\2\u04f1\u04f2\t\b\2\2\u04f2\u04f3\5\u0146\u00a3"+
+ "\2\u04f3\u0125\3\2\2\2\u04f4\u04fa\5\u0118\u008c\2\u04f5\u04fa\5\u011a"+
+ "\u008d\2\u04f6\u04fa\5\u011c\u008e\2\u04f7\u04fa\5\u011e\u008f\2\u04f8"+
+ "\u04fa\5\4\2\2\u04f9\u04f4\3\2\2\2\u04f9\u04f5\3\2\2\2\u04f9\u04f6\3\2"+
+ "\2\2\u04f9\u04f7\3\2\2\2\u04f9\u04f8\3\2\2\2\u04fa\u04fb\3\2\2\2\u04fb"+
+ "\u04fc\7k\2\2\u04fc\u04fd\3\2\2\2\u04fd\u04fe\b\u0093\2\2\u04fe\u0127"+
+ "\3\2\2\2\u04ff\u0502\7)\2\2\u0500\u0503\5\u0142\u00a1\2\u0501\u0503\5"+
+ "\u012c\u0096\2\u0502\u0500\3\2\2\2\u0502\u0501\3\2\2\2\u0503\u0504\3\2"+
+ "\2\2\u0504\u0505\7)\2\2\u0505\u0129\3\2\2\2\u0506\u0507\5\u0128\u0094"+
+ "\2\u0507\u0508\3\2\2\2\u0508\u0509\b\u0095\2\2\u0509\u012b\3\2\2\2\u050a"+
+ "\u050d\5\u012e\u0097\2\u050b\u050d\5\u0130\u0098\2\u050c\u050a\3\2\2\2"+
+ "\u050c\u050b\3\2\2\2\u050d\u012d\3\2\2\2\u050e\u050f\7^\2\2\u050f\u0510"+
+ "\5\u0148\u00a4\2\u0510\u0511\5\u0148\u00a4\2\u0511\u0512\5\u0148\u00a4"+
+ "\2\u0512\u012f\3\2\2\2\u0513\u0514\7^\2\2\u0514\u0515\7z\2\2\u0515\u0516"+
+ "\5\u014a\u00a5\2\u0516\u0517\5\u014a\u00a5\2\u0517\u0131\3\2\2\2\u0518"+
+ "\u0519\7^\2\2\u0519\u051a\7w\2\2\u051a\u051b\5\u014a\u00a5\2\u051b\u051c"+
+ "\5\u014a\u00a5\2\u051c\u051d\5\u014a\u00a5\2\u051d\u051e\5\u014a\u00a5"+
+ "\2\u051e\u0133\3\2\2\2\u051f\u0520\7^\2\2\u0520\u0521\7W\2\2\u0521\u0522"+
+ "\5\u014a\u00a5\2\u0522\u0523\5\u014a\u00a5\2\u0523\u0524\5\u014a\u00a5"+
+ "\2\u0524\u0525\5\u014a\u00a5\2\u0525\u0526\5\u014a\u00a5\2\u0526\u0527"+
+ "\5\u014a\u00a5\2\u0527\u0528\5\u014a\u00a5\2\u0528\u0529\5\u014a\u00a5"+
+ "\2\u0529\u0135\3\2\2\2\u052a\u052e\7b\2\2\u052b\u052d\n\t\2\2\u052c\u052b"+
+ "\3\2\2\2\u052d\u0530\3\2\2\2\u052e\u052c\3\2\2\2\u052e\u052f\3\2\2\2\u052f"+
+ "\u0531\3\2\2\2\u0530\u052e\3\2\2\2\u0531\u0532\7b\2\2\u0532\u0533\3\2"+
+ "\2\2\u0533\u0534\b\u009b\2\2\u0534\u0137\3\2\2\2\u0535\u053a\7$\2\2\u0536"+
+ "\u0539\n\n\2\2\u0537\u0539\5\u0144\u00a2\2\u0538\u0536\3\2\2\2\u0538\u0537"+
+ "\3\2\2\2\u0539\u053c\3\2\2\2\u053a\u0538\3\2\2\2\u053a\u053b\3\2\2\2\u053b"+
+ "\u053d\3\2\2\2\u053c\u053a\3\2\2\2\u053d\u053e\7$\2\2\u053e\u053f\3\2"+
+ "\2\2\u053f\u0540\b\u009c\2\2\u0540\u0139\3\2\2\2\u0541\u0543\t\13\2\2"+
+ "\u0542\u0541\3\2\2\2\u0543\u0544\3\2\2\2\u0544\u0542\3\2\2\2\u0544\u0545"+
+ "\3\2\2\2\u0545\u0546\3\2\2\2\u0546\u0547\b\u009d\3\2\u0547\u013b\3\2\2"+
+ "\2\u0548\u0549\7\61\2\2\u0549\u054a\7,\2\2\u054a\u054e\3\2\2\2\u054b\u054d"+
+ "\13\2\2\2\u054c\u054b\3\2\2\2\u054d\u0550\3\2\2\2\u054e\u054f\3\2\2\2"+
+ "\u054e\u054c\3\2\2\2\u054f\u0551\3\2\2\2\u0550\u054e\3\2\2\2\u0551\u0552"+
+ "\7,\2\2\u0552\u0553\7\61\2\2\u0553\u0554\3\2\2\2\u0554\u0555\b\u009e\3"+
+ "\2\u0555\u013d\3\2\2\2\u0556\u0558\t\f\2\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\u055b\3\2\2\2\u055b"+
+ "\u055c\b\u009f\3\2\u055c\u013f\3\2\2\2\u055d\u055e\7\61\2\2\u055e\u055f"+
+ "\7\61\2\2\u055f\u0563\3\2\2\2\u0560\u0562\n\f\2\2\u0561\u0560\3\2\2\2"+
+ "\u0562\u0565\3\2\2\2\u0563\u0561\3\2\2\2\u0563\u0564\3\2\2\2\u0564\u0566"+
+ "\3\2\2\2\u0565\u0563\3\2\2\2\u0566\u0567\b\u00a0\3\2\u0567\u0141\3\2\2"+
+ "\2\u0568\u056d\n\r\2\2\u0569\u056d\5\u0132\u0099\2\u056a\u056d\5\u0134"+
+ "\u009a\2\u056b\u056d\5\u0144\u00a2\2\u056c\u0568\3\2\2\2\u056c\u0569\3"+
+ "\2\2\2\u056c\u056a\3\2\2\2\u056c\u056b\3\2\2\2\u056d\u0143\3\2\2\2\u056e"+
+ "\u0588\7^\2\2\u056f\u0570\7w\2\2\u0570\u0571\5\u014a\u00a5\2\u0571\u0572"+
+ "\5\u014a\u00a5\2\u0572\u0573\5\u014a\u00a5\2\u0573\u0574\5\u014a\u00a5"+
+ "\2\u0574\u0589\3\2\2\2\u0575\u0576\7W\2\2\u0576\u0577\5\u014a\u00a5\2"+
+ "\u0577\u0578\5\u014a\u00a5\2\u0578\u0579\5\u014a\u00a5\2\u0579\u057a\5"+
+ "\u014a\u00a5\2\u057a\u057b\5\u014a\u00a5\2\u057b\u057c\5\u014a\u00a5\2"+
+ "\u057c\u057d\5\u014a\u00a5\2\u057d\u057e\5\u014a\u00a5\2\u057e\u0589\3"+
+ "\2\2\2\u057f\u0589\t\16\2\2\u0580\u0581\5\u0148\u00a4\2\u0581\u0582\5"+
+ "\u0148\u00a4\2\u0582\u0583\5\u0148\u00a4\2\u0583\u0589\3\2\2\2\u0584\u0585"+
+ "\7z\2\2\u0585\u0586\5\u014a\u00a5\2\u0586\u0587\5\u014a\u00a5\2\u0587"+
+ "\u0589\3\2\2\2\u0588\u056f\3\2\2\2\u0588\u0575\3\2\2\2\u0588\u057f\3\2"+
+ "\2\2\u0588\u0580\3\2\2\2\u0588\u0584\3\2\2\2\u0589\u0145\3\2\2\2\u058a"+
+ "\u0591\t\3\2\2\u058b\u058d\7a\2\2\u058c\u058b\3\2\2\2\u058c\u058d\3\2"+
+ "\2\2\u058d\u058e\3\2\2\2\u058e\u0590\t\3\2\2\u058f\u058c\3\2\2\2\u0590"+
+ "\u0593\3\2\2\2\u0591\u058f\3\2\2\2\u0591\u0592\3\2\2\2\u0592\u0147\3\2"+
+ "\2\2\u0593\u0591\3\2\2\2\u0594\u0595\t\17\2\2\u0595\u0149\3\2\2\2\u0596"+
+ "\u0597\t\20\2\2\u0597\u014b\3\2\2\2\u0598\u0599\t\21\2\2\u0599\u014d\3"+
+ "\2\2\2\u059a\u059c\t\22\2\2\u059b\u059d\t\b\2\2\u059c\u059b\3\2\2\2\u059c"+
+ "\u059d\3\2\2\2\u059d\u059e\3\2\2\2\u059e\u059f\5\u0146\u00a3\2\u059f\u014f"+
+ "\3\2\2\2\u05a0\u05a3\5\u0154\u00aa\2\u05a1\u05a3\7a\2\2\u05a2\u05a0\3"+
+ "\2\2\2\u05a2\u05a1\3\2\2\2\u05a3\u0151\3\2\2\2\u05a4\u05a5\t\23\2\2\u05a5"+
+ "\u0153\3\2\2\2\u05a6\u05a7\t\24\2\2\u05a7\u0155\3\2\2\2\u05a8\u05aa\t"+
+ "\13\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\b\u00ab\3\2\u05ae\u0157"+
+ "\3\2\2\2\u05af\u05b0\7\61\2\2\u05b0\u05b1\7,\2\2\u05b1\u05b5\3\2\2\2\u05b2"+
+ "\u05b4\n\f\2\2\u05b3\u05b2\3\2\2\2\u05b4\u05b7\3\2\2\2\u05b5\u05b6\3\2"+
+ "\2\2\u05b5\u05b3\3\2\2\2\u05b6\u05b8\3\2\2\2\u05b7\u05b5\3\2\2\2\u05b8"+
+ "\u05b9\7,\2\2\u05b9\u05ba\7\61\2\2\u05ba\u05bb\3\2\2\2\u05bb\u05bc\b\u00ac"+
+ "\3\2\u05bc\u0159\3\2\2\2\u05bd\u05be\7\61\2\2\u05be\u05bf\7\61\2\2\u05bf"+
+ "\u05c3\3\2\2\2\u05c0\u05c2\n\f\2\2\u05c1\u05c0\3\2\2\2\u05c2\u05c5\3\2"+
+ "\2\2\u05c3\u05c1\3\2\2\2\u05c3\u05c4\3\2\2\2\u05c4\u05c6\3\2\2\2\u05c5"+
+ "\u05c3\3\2\2\2\u05c6\u05c7\b\u00ad\3\2\u05c7\u015b\3\2\2\2\u05c8\u05ca"+
+ "\t\f\2\2\u05c9\u05c8\3\2\2\2\u05ca\u05cb\3\2\2\2\u05cb\u05c9\3\2\2\2\u05cb"+
+ "\u05cc\3\2\2\2\u05cc\u05db\3\2\2\2\u05cd\u05db\7=\2\2\u05ce\u05cf\7\61"+
+ "\2\2\u05cf\u05d0\7,\2\2\u05d0\u05d4\3\2\2\2\u05d1\u05d3\13\2\2\2\u05d2"+
+ "\u05d1\3\2\2\2\u05d3\u05d6\3\2\2\2\u05d4\u05d5\3\2\2\2\u05d4\u05d2\3\2"+
+ "\2\2\u05d5\u05d7\3\2\2\2\u05d6\u05d4\3\2\2\2\u05d7\u05d8\7,\2\2\u05d8"+
+ "\u05db\7\61\2\2\u05d9\u05db\7\2\2\3\u05da\u05c9\3\2\2\2\u05da\u05cd\3"+
+ "\2\2\2\u05da\u05ce\3\2\2\2\u05da\u05d9\3\2\2\2\u05db\u05dc\3\2\2\2\u05dc"+
+ "\u05dd\b\u00ae\4\2\u05dd\u015d\3\2\2\2\u05de\u05df\3\2\2\2\u05df\u05e0"+
+ "\3\2\2\2\u05e0\u05e1\b\u00af\4\2\u05e1\u05e2\b\u00af\3\2\u05e2\u015f\3"+
+ "\2\2\2\64\2\3\u0162\u016a\u016d\u0170\u0176\u0178\u042d\u042f\u0498\u049d"+
+ "\u04a0\u04a7\u04ac\u04b2\u04b5\u04ba\u04c1\u04c6\u04d0\u04d5\u04d9\u04de"+
+ "\u04e1\u04e6\u04eb\u04ee\u04f9\u0502\u050c\u052e\u0538\u053a\u0544\u054e"+
+ "\u0559\u0563\u056c\u0588\u058c\u0591\u059c\u05a2\u05ab\u05b5\u05c3\u05cb"+
+ "\u05d4\u05da\5\4\3\2\2\3\2\4\2\2";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
@@ -916,4 +920,4 @@ private boolean DECIMAL_FLOAT_LIT_sempred(RuleContext _localctx, int predIndex)
_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
}
}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/viper/gobra/frontend/GobraParser.java b/src/main/java/viper/gobra/frontend/GobraParser.java
index 5771a622b..004639a85 100644
--- a/src/main/java/viper/gobra/frontend/GobraParser.java
+++ b/src/main/java/viper/gobra/frontend/GobraParser.java
@@ -1,3 +1,4 @@
+// Generated from src/main/antlr4/GobraParser.g4 by ANTLR 4.9.2
package viper.gobra.frontend;
import org.antlr.v4.runtime.atn.*;
import org.antlr.v4.runtime.dfa.DFA;
@@ -10,7 +11,7 @@
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class GobraParser extends GobraParserBase {
- static { RuntimeMetaData.checkVersion("4.9.1", RuntimeMetaData.VERSION); }
+ static { RuntimeMetaData.checkVersion("4.9.2", RuntimeMetaData.VERSION); }
protected static final DFA[] _decisionToDFA;
protected static final PredictionContextCache _sharedContextCache =
@@ -23,25 +24,25 @@ public class GobraParser extends GobraParserBase {
UNION=31, INTERSECTION=32, SETMINUS=33, IMPLIES=34, WAND=35, APPLY=36,
QMARK=37, L_PRED=38, R_PRED=39, SEQ=40, SET=41, MSET=42, DICT=43, OPT=44,
LEN=45, NEW=46, MAKE=47, CAP=48, SOME=49, GET=50, DOM=51, AXIOM=52, ADT=53,
- MATCH=54, NONE=55, PRED=56, TYPE_OF=57, IS_COMPARABLE=58, SHARE=59, ADDR_MOD=60,
- DOT_DOT=61, SHARED=62, EXCLUSIVE=63, PREDICATE=64, WRITEPERM=65, NOPERM=66,
- TRUSTED=67, OUTLINE=68, INIT_POST=69, IMPORT_PRE=70, PROOF=71, GHOST_EQUALS=72,
- GHOST_NOT_EQUALS=73, WITH=74, BREAK=75, DEFAULT=76, FUNC=77, INTERFACE=78,
- SELECT=79, CASE=80, DEFER=81, GO=82, MAP=83, STRUCT=84, CHAN=85, ELSE=86,
- GOTO=87, PACKAGE=88, SWITCH=89, CONST=90, FALLTHROUGH=91, IF=92, RANGE=93,
- TYPE=94, CONTINUE=95, FOR=96, IMPORT=97, RETURN=98, VAR=99, NIL_LIT=100,
- IDENTIFIER=101, L_PAREN=102, R_PAREN=103, L_CURLY=104, R_CURLY=105, L_BRACKET=106,
- R_BRACKET=107, ASSIGN=108, COMMA=109, SEMI=110, COLON=111, DOT=112, PLUS_PLUS=113,
- MINUS_MINUS=114, DECLARE_ASSIGN=115, ELLIPSIS=116, LOGICAL_OR=117, LOGICAL_AND=118,
- EQUALS=119, NOT_EQUALS=120, LESS=121, LESS_OR_EQUALS=122, GREATER=123,
- GREATER_OR_EQUALS=124, OR=125, DIV=126, MOD=127, LSHIFT=128, RSHIFT=129,
- BIT_CLEAR=130, EXCLAMATION=131, PLUS=132, MINUS=133, CARET=134, STAR=135,
- AMPERSAND=136, RECEIVE=137, DECIMAL_LIT=138, BINARY_LIT=139, OCTAL_LIT=140,
- HEX_LIT=141, HEX_FLOAT_LIT=142, IMAGINARY_LIT=143, RUNE_LIT=144, BYTE_VALUE=145,
- OCTAL_BYTE_VALUE=146, HEX_BYTE_VALUE=147, LITTLE_U_VALUE=148, BIG_U_VALUE=149,
- RAW_STRING_LIT=150, INTERPRETED_STRING_LIT=151, WS=152, COMMENT=153, TERMINATOR=154,
- LINE_COMMENT=155, WS_NLSEMI=156, COMMENT_NLSEMI=157, LINE_COMMENT_NLSEMI=158,
- EOS=159, OTHER=160;
+ MATCH=54, NONE=55, PRED=56, TYPE_OF=57, IS_COMPARABLE=58, LOW=59, SHARE=60,
+ ADDR_MOD=61, DOT_DOT=62, SHARED=63, EXCLUSIVE=64, PREDICATE=65, WRITEPERM=66,
+ NOPERM=67, TRUSTED=68, OUTLINE=69, INIT_POST=70, IMPORT_PRE=71, PROOF=72,
+ GHOST_EQUALS=73, GHOST_NOT_EQUALS=74, WITH=75, BREAK=76, DEFAULT=77, FUNC=78,
+ INTERFACE=79, SELECT=80, CASE=81, DEFER=82, GO=83, MAP=84, STRUCT=85,
+ CHAN=86, ELSE=87, GOTO=88, PACKAGE=89, SWITCH=90, CONST=91, FALLTHROUGH=92,
+ IF=93, RANGE=94, TYPE=95, CONTINUE=96, FOR=97, IMPORT=98, RETURN=99, VAR=100,
+ NIL_LIT=101, IDENTIFIER=102, L_PAREN=103, R_PAREN=104, L_CURLY=105, R_CURLY=106,
+ L_BRACKET=107, R_BRACKET=108, ASSIGN=109, COMMA=110, SEMI=111, COLON=112,
+ DOT=113, PLUS_PLUS=114, MINUS_MINUS=115, DECLARE_ASSIGN=116, ELLIPSIS=117,
+ LOGICAL_OR=118, LOGICAL_AND=119, EQUALS=120, NOT_EQUALS=121, LESS=122,
+ LESS_OR_EQUALS=123, GREATER=124, GREATER_OR_EQUALS=125, OR=126, DIV=127,
+ MOD=128, LSHIFT=129, RSHIFT=130, BIT_CLEAR=131, EXCLAMATION=132, PLUS=133,
+ MINUS=134, CARET=135, STAR=136, AMPERSAND=137, RECEIVE=138, DECIMAL_LIT=139,
+ BINARY_LIT=140, OCTAL_LIT=141, HEX_LIT=142, HEX_FLOAT_LIT=143, IMAGINARY_LIT=144,
+ RUNE_LIT=145, BYTE_VALUE=146, OCTAL_BYTE_VALUE=147, HEX_BYTE_VALUE=148,
+ LITTLE_U_VALUE=149, BIG_U_VALUE=150, RAW_STRING_LIT=151, INTERPRETED_STRING_LIT=152,
+ WS=153, COMMENT=154, TERMINATOR=155, LINE_COMMENT=156, WS_NLSEMI=157,
+ COMMENT_NLSEMI=158, LINE_COMMENT_NLSEMI=159, EOS=160, OTHER=161;
public static final int
RULE_exprOnly = 0, RULE_stmtOnly = 1, RULE_typeOnly = 2, RULE_maybeAddressableIdentifierList = 3,
RULE_maybeAddressableIdentifier = 4, RULE_sourceFile = 5, RULE_initPost = 6,
@@ -52,50 +53,50 @@ public class GobraParser extends GobraParserBase {
RULE_triggers = 20, RULE_trigger = 21, RULE_predicateAccess = 22, RULE_optionSome = 23,
RULE_optionNone = 24, RULE_optionGet = 25, RULE_sConversion = 26, RULE_old = 27,
RULE_oldLabelUse = 28, RULE_labelUse = 29, RULE_before = 30, RULE_isComparable = 31,
- RULE_typeOf = 32, RULE_access = 33, RULE_range = 34, RULE_matchExpr = 35,
- RULE_matchExprClause = 36, RULE_seqUpdExp = 37, RULE_seqUpdClause = 38,
- RULE_ghostTypeLit = 39, RULE_domainType = 40, RULE_domainClause = 41,
- RULE_adtType = 42, RULE_adtClause = 43, RULE_ghostSliceType = 44, RULE_sqType = 45,
- RULE_specification = 46, RULE_specStatement = 47, RULE_terminationMeasure = 48,
- RULE_assertion = 49, RULE_matchStmt = 50, RULE_matchStmtClause = 51, RULE_matchCase = 52,
- RULE_matchPattern = 53, RULE_matchPatternList = 54, RULE_blockWithBodyParameterInfo = 55,
- RULE_closureSpecInstance = 56, RULE_closureSpecParams = 57, RULE_closureSpecParam = 58,
- RULE_closureImplProofStmt = 59, RULE_implementationProof = 60, RULE_methodImplementationProof = 61,
- RULE_nonLocalReceiver = 62, RULE_selection = 63, RULE_implementationProofPredicateAlias = 64,
- RULE_make = 65, RULE_new_ = 66, RULE_specMember = 67, RULE_functionDecl = 68,
- RULE_methodDecl = 69, RULE_explicitGhostMember = 70, RULE_fpredicateDecl = 71,
- RULE_predicateBody = 72, RULE_mpredicateDecl = 73, RULE_varSpec = 74,
- RULE_shortVarDecl = 75, RULE_receiver = 76, RULE_parameterDecl = 77, RULE_actualParameterDecl = 78,
- RULE_ghostParameterDecl = 79, RULE_parameterType = 80, RULE_expression = 81,
- RULE_statement = 82, RULE_applyStmt = 83, RULE_packageStmt = 84, RULE_specForStmt = 85,
- RULE_loopSpec = 86, RULE_deferStmt = 87, RULE_basicLit = 88, RULE_primaryExpr = 89,
- RULE_functionLit = 90, RULE_closureDecl = 91, RULE_predConstructArgs = 92,
- RULE_interfaceType = 93, RULE_predicateSpec = 94, RULE_methodSpec = 95,
- RULE_type_ = 96, RULE_typeLit = 97, RULE_predType = 98, RULE_predTypeParams = 99,
- RULE_literalType = 100, RULE_implicitArray = 101, RULE_slice_ = 102, RULE_low = 103,
- RULE_high = 104, RULE_cap = 105, RULE_assign_op = 106, RULE_rangeClause = 107,
- RULE_packageClause = 108, RULE_importPath = 109, RULE_declaration = 110,
- RULE_constDecl = 111, RULE_constSpec = 112, RULE_identifierList = 113,
- RULE_expressionList = 114, RULE_typeDecl = 115, RULE_typeSpec = 116, RULE_varDecl = 117,
- RULE_block = 118, RULE_statementList = 119, RULE_simpleStmt = 120, RULE_expressionStmt = 121,
- RULE_sendStmt = 122, RULE_incDecStmt = 123, RULE_assignment = 124, RULE_emptyStmt = 125,
- RULE_labeledStmt = 126, RULE_returnStmt = 127, RULE_breakStmt = 128, RULE_continueStmt = 129,
- RULE_gotoStmt = 130, RULE_fallthroughStmt = 131, RULE_ifStmt = 132, RULE_switchStmt = 133,
- RULE_exprSwitchStmt = 134, RULE_exprCaseClause = 135, RULE_exprSwitchCase = 136,
- RULE_typeSwitchStmt = 137, RULE_typeSwitchGuard = 138, RULE_typeCaseClause = 139,
- RULE_typeSwitchCase = 140, RULE_typeList = 141, RULE_selectStmt = 142,
- RULE_commClause = 143, RULE_commCase = 144, RULE_recvStmt = 145, RULE_forStmt = 146,
- RULE_forClause = 147, RULE_goStmt = 148, RULE_typeName = 149, RULE_arrayType = 150,
- RULE_arrayLength = 151, RULE_elementType = 152, RULE_pointerType = 153,
- RULE_sliceType = 154, RULE_mapType = 155, RULE_channelType = 156, RULE_functionType = 157,
- RULE_signature = 158, RULE_result = 159, RULE_parameters = 160, RULE_conversion = 161,
- RULE_nonNamedType = 162, RULE_operand = 163, RULE_literal = 164, RULE_integer = 165,
- RULE_operandName = 166, RULE_qualifiedIdent = 167, RULE_compositeLit = 168,
- RULE_literalValue = 169, RULE_elementList = 170, RULE_keyedElement = 171,
- RULE_key = 172, RULE_element = 173, RULE_structType = 174, RULE_fieldDecl = 175,
- RULE_string_ = 176, RULE_embeddedField = 177, RULE_index = 178, RULE_typeAssertion = 179,
- RULE_arguments = 180, RULE_methodExpr = 181, RULE_receiverType = 182,
- RULE_eos = 183;
+ RULE_low = 32, RULE_typeOf = 33, RULE_access = 34, RULE_range = 35, RULE_matchExpr = 36,
+ RULE_matchExprClause = 37, RULE_seqUpdExp = 38, RULE_seqUpdClause = 39,
+ RULE_ghostTypeLit = 40, RULE_domainType = 41, RULE_domainClause = 42,
+ RULE_adtType = 43, RULE_adtClause = 44, RULE_ghostSliceType = 45, RULE_sqType = 46,
+ RULE_specification = 47, RULE_specStatement = 48, RULE_terminationMeasure = 49,
+ RULE_assertion = 50, RULE_matchStmt = 51, RULE_matchStmtClause = 52, RULE_matchCase = 53,
+ RULE_matchPattern = 54, RULE_matchPatternList = 55, RULE_blockWithBodyParameterInfo = 56,
+ RULE_closureSpecInstance = 57, RULE_closureSpecParams = 58, RULE_closureSpecParam = 59,
+ RULE_closureImplProofStmt = 60, RULE_implementationProof = 61, RULE_methodImplementationProof = 62,
+ RULE_nonLocalReceiver = 63, RULE_selection = 64, RULE_implementationProofPredicateAlias = 65,
+ RULE_make = 66, RULE_new_ = 67, RULE_specMember = 68, RULE_functionDecl = 69,
+ RULE_methodDecl = 70, RULE_explicitGhostMember = 71, RULE_fpredicateDecl = 72,
+ RULE_predicateBody = 73, RULE_mpredicateDecl = 74, RULE_varSpec = 75,
+ RULE_shortVarDecl = 76, RULE_receiver = 77, RULE_parameterDecl = 78, RULE_actualParameterDecl = 79,
+ RULE_ghostParameterDecl = 80, RULE_parameterType = 81, RULE_expression = 82,
+ RULE_statement = 83, RULE_applyStmt = 84, RULE_packageStmt = 85, RULE_specForStmt = 86,
+ RULE_loopSpec = 87, RULE_deferStmt = 88, RULE_basicLit = 89, RULE_primaryExpr = 90,
+ RULE_functionLit = 91, RULE_closureDecl = 92, RULE_predConstructArgs = 93,
+ RULE_interfaceType = 94, RULE_predicateSpec = 95, RULE_methodSpec = 96,
+ RULE_type_ = 97, RULE_typeLit = 98, RULE_predType = 99, RULE_predTypeParams = 100,
+ RULE_literalType = 101, RULE_implicitArray = 102, RULE_slice_ = 103, RULE_lowSliceArgument = 104,
+ RULE_highSliceArgument = 105, RULE_capSliceArgument = 106, RULE_assign_op = 107,
+ RULE_rangeClause = 108, RULE_packageClause = 109, RULE_importPath = 110,
+ RULE_declaration = 111, RULE_constDecl = 112, RULE_constSpec = 113, RULE_identifierList = 114,
+ RULE_expressionList = 115, RULE_typeDecl = 116, RULE_typeSpec = 117, RULE_varDecl = 118,
+ RULE_block = 119, RULE_statementList = 120, RULE_simpleStmt = 121, RULE_expressionStmt = 122,
+ RULE_sendStmt = 123, RULE_incDecStmt = 124, RULE_assignment = 125, RULE_emptyStmt = 126,
+ RULE_labeledStmt = 127, RULE_returnStmt = 128, RULE_breakStmt = 129, RULE_continueStmt = 130,
+ RULE_gotoStmt = 131, RULE_fallthroughStmt = 132, RULE_ifStmt = 133, RULE_switchStmt = 134,
+ RULE_exprSwitchStmt = 135, RULE_exprCaseClause = 136, RULE_exprSwitchCase = 137,
+ RULE_typeSwitchStmt = 138, RULE_typeSwitchGuard = 139, RULE_typeCaseClause = 140,
+ RULE_typeSwitchCase = 141, RULE_typeList = 142, RULE_selectStmt = 143,
+ RULE_commClause = 144, RULE_commCase = 145, RULE_recvStmt = 146, RULE_forStmt = 147,
+ RULE_forClause = 148, RULE_goStmt = 149, RULE_typeName = 150, RULE_arrayType = 151,
+ RULE_arrayLength = 152, RULE_elementType = 153, RULE_pointerType = 154,
+ RULE_sliceType = 155, RULE_mapType = 156, RULE_channelType = 157, RULE_functionType = 158,
+ RULE_signature = 159, RULE_result = 160, RULE_parameters = 161, RULE_conversion = 162,
+ RULE_nonNamedType = 163, RULE_operand = 164, RULE_literal = 165, RULE_integer = 166,
+ RULE_operandName = 167, RULE_qualifiedIdent = 168, RULE_compositeLit = 169,
+ RULE_literalValue = 170, RULE_elementList = 171, RULE_keyedElement = 172,
+ RULE_key = 173, RULE_element = 174, RULE_structType = 175, RULE_fieldDecl = 176,
+ RULE_string_ = 177, RULE_embeddedField = 178, RULE_index = 179, RULE_typeAssertion = 180,
+ RULE_arguments = 181, RULE_methodExpr = 182, RULE_receiverType = 183,
+ RULE_eos = 184;
private static String[] makeRuleNames() {
return new String[] {
"exprOnly", "stmtOnly", "typeOnly", "maybeAddressableIdentifierList",
@@ -104,7 +105,7 @@ private static String[] makeRuleNames() {
"statementWithSpec", "outlineStatement", "ghostPrimaryExpr", "permission",
"typeExpr", "boundVariables", "boundVariableDecl", "triggers", "trigger",
"predicateAccess", "optionSome", "optionNone", "optionGet", "sConversion",
- "old", "oldLabelUse", "labelUse", "before", "isComparable", "typeOf",
+ "old", "oldLabelUse", "labelUse", "before", "isComparable", "low", "typeOf",
"access", "range", "matchExpr", "matchExprClause", "seqUpdExp", "seqUpdClause",
"ghostTypeLit", "domainType", "domainClause", "adtType", "adtClause",
"ghostSliceType", "sqType", "specification", "specStatement", "terminationMeasure",
@@ -119,11 +120,11 @@ private static String[] makeRuleNames() {
"specForStmt", "loopSpec", "deferStmt", "basicLit", "primaryExpr", "functionLit",
"closureDecl", "predConstructArgs", "interfaceType", "predicateSpec",
"methodSpec", "type_", "typeLit", "predType", "predTypeParams", "literalType",
- "implicitArray", "slice_", "low", "high", "cap", "assign_op", "rangeClause",
- "packageClause", "importPath", "declaration", "constDecl", "constSpec",
- "identifierList", "expressionList", "typeDecl", "typeSpec", "varDecl",
- "block", "statementList", "simpleStmt", "expressionStmt", "sendStmt",
- "incDecStmt", "assignment", "emptyStmt", "labeledStmt", "returnStmt",
+ "implicitArray", "slice_", "lowSliceArgument", "highSliceArgument", "capSliceArgument",
+ "assign_op", "rangeClause", "packageClause", "importPath", "declaration",
+ "constDecl", "constSpec", "identifierList", "expressionList", "typeDecl",
+ "typeSpec", "varDecl", "block", "statementList", "simpleStmt", "expressionStmt",
+ "sendStmt", "incDecStmt", "assignment", "emptyStmt", "labeledStmt", "returnStmt",
"breakStmt", "continueStmt", "gotoStmt", "fallthroughStmt", "ifStmt",
"switchStmt", "exprSwitchStmt", "exprCaseClause", "exprSwitchCase", "typeSwitchStmt",
"typeSwitchGuard", "typeCaseClause", "typeSwitchCase", "typeList", "selectStmt",
@@ -149,12 +150,12 @@ private static String[] makeLiteralNames() {
"'setminus'", "'==>'", "'--*'", "'apply'", "'?'", "'!<'", "'!>'", "'seq'",
"'set'", "'mset'", "'dict'", "'option'", "'len'", "'new'", "'make'",
"'cap'", "'some'", "'get'", "'domain'", "'axiom'", "'adt'", "'match'",
- "'none'", "'pred'", "'typeOf'", "'isComparable'", "'share'", "'@'", "'..'",
- "'shared'", "'exclusive'", "'predicate'", "'writePerm'", "'noPerm'",
- "'trusted'", "'outline'", "'initEnsures'", "'importRequires'", "'proof'",
- "'==='", "'!=='", "'with'", "'break'", "'default'", "'func'", "'interface'",
- "'select'", "'case'", "'defer'", "'go'", "'map'", "'struct'", "'chan'",
- "'else'", "'goto'", "'package'", "'switch'", "'const'", "'fallthrough'",
+ "'none'", "'pred'", "'typeOf'", "'isComparable'", "'low'", "'share'",
+ "'@'", "'..'", "'shared'", "'exclusive'", "'predicate'", "'writePerm'",
+ "'noPerm'", "'trusted'", "'outline'", "'initEnsures'", "'importRequires'",
+ "'proof'", "'==='", "'!=='", "'with'", "'break'", "'default'", "'func'",
+ "'interface'", "'select'", "'case'", "'defer'", "'go'", "'map'", "'struct'",
+ "'chan'", "'else'", "'goto'", "'package'", "'switch'", "'const'", "'fallthrough'",
"'if'", "'range'", "'type'", "'continue'", "'for'", "'import'", "'return'",
"'var'", "'nil'", null, "'('", "')'", "'{'", "'}'", "'['", "']'", "'='",
"','", "';'", "':'", "'.'", "'++'", "'--'", "':='", "'...'", "'||'",
@@ -172,7 +173,7 @@ private static String[] makeSymbolicNames() {
"INTERSECTION", "SETMINUS", "IMPLIES", "WAND", "APPLY", "QMARK", "L_PRED",
"R_PRED", "SEQ", "SET", "MSET", "DICT", "OPT", "LEN", "NEW", "MAKE",
"CAP", "SOME", "GET", "DOM", "AXIOM", "ADT", "MATCH", "NONE", "PRED",
- "TYPE_OF", "IS_COMPARABLE", "SHARE", "ADDR_MOD", "DOT_DOT", "SHARED",
+ "TYPE_OF", "IS_COMPARABLE", "LOW", "SHARE", "ADDR_MOD", "DOT_DOT", "SHARED",
"EXCLUSIVE", "PREDICATE", "WRITEPERM", "NOPERM", "TRUSTED", "OUTLINE",
"INIT_POST", "IMPORT_PRE", "PROOF", "GHOST_EQUALS", "GHOST_NOT_EQUALS",
"WITH", "BREAK", "DEFAULT", "FUNC", "INTERFACE", "SELECT", "CASE", "DEFER",
@@ -265,9 +266,9 @@ public final ExprOnlyContext exprOnly() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(368);
+ setState(370);
expression(0);
- setState(369);
+ setState(371);
match(EOF);
}
}
@@ -304,9 +305,9 @@ public final StmtOnlyContext stmtOnly() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(371);
+ setState(373);
statement();
- setState(372);
+ setState(374);
match(EOF);
}
}
@@ -343,9 +344,9 @@ public final TypeOnlyContext typeOnly() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(374);
+ setState(376);
type_();
- setState(375);
+ setState(377);
match(EOF);
}
}
@@ -389,21 +390,21 @@ public final MaybeAddressableIdentifierListContext maybeAddressableIdentifierLis
try {
enterOuterAlt(_localctx, 1);
{
- setState(377);
+ setState(379);
maybeAddressableIdentifier();
- setState(382);
+ setState(384);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==COMMA) {
{
{
- setState(378);
+ setState(380);
match(COMMA);
- setState(379);
+ setState(381);
maybeAddressableIdentifier();
}
}
- setState(384);
+ setState(386);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -441,14 +442,14 @@ public final MaybeAddressableIdentifierContext maybeAddressableIdentifier() thro
try {
enterOuterAlt(_localctx, 1);
{
- setState(385);
- match(IDENTIFIER);
setState(387);
+ match(IDENTIFIER);
+ setState(389);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==ADDR_MOD) {
{
- setState(386);
+ setState(388);
match(ADDR_MOD);
}
}
@@ -525,79 +526,79 @@ public final SourceFileContext sourceFile() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(394);
+ setState(396);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==INIT_POST) {
{
{
- setState(389);
+ setState(391);
initPost();
- setState(390);
+ setState(392);
eos();
}
}
- setState(396);
+ setState(398);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(397);
+ setState(399);
packageClause();
- setState(398);
+ setState(400);
eos();
- setState(404);
+ setState(406);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==IMPORT_PRE || _la==IMPORT) {
{
{
- setState(399);
+ setState(401);
importDecl();
- setState(400);
+ setState(402);
eos();
}
}
- setState(406);
+ setState(408);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(416);
+ setState(418);
_errHandler.sync(this);
_la = _input.LA(1);
- while (((((_la - 9)) & ~0x3f) == 0 && ((1L << (_la - 9)) & ((1L << (PRE - 9)) | (1L << (PRESERVES - 9)) | (1L << (POST - 9)) | (1L << (DEC - 9)) | (1L << (PURE - 9)) | (1L << (GHOST - 9)) | (1L << (SEQ - 9)) | (1L << (SET - 9)) | (1L << (MSET - 9)) | (1L << (DICT - 9)) | (1L << (OPT - 9)) | (1L << (DOM - 9)) | (1L << (ADT - 9)) | (1L << (PRED - 9)) | (1L << (TRUSTED - 9)))) != 0) || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (FUNC - 77)) | (1L << (INTERFACE - 77)) | (1L << (MAP - 77)) | (1L << (STRUCT - 77)) | (1L << (CHAN - 77)) | (1L << (CONST - 77)) | (1L << (TYPE - 77)) | (1L << (VAR - 77)) | (1L << (IDENTIFIER - 77)) | (1L << (L_PAREN - 77)) | (1L << (L_BRACKET - 77)) | (1L << (STAR - 77)) | (1L << (RECEIVE - 77)))) != 0)) {
+ while (((((_la - 9)) & ~0x3f) == 0 && ((1L << (_la - 9)) & ((1L << (PRE - 9)) | (1L << (PRESERVES - 9)) | (1L << (POST - 9)) | (1L << (DEC - 9)) | (1L << (PURE - 9)) | (1L << (GHOST - 9)) | (1L << (SEQ - 9)) | (1L << (SET - 9)) | (1L << (MSET - 9)) | (1L << (DICT - 9)) | (1L << (OPT - 9)) | (1L << (DOM - 9)) | (1L << (ADT - 9)) | (1L << (PRED - 9)) | (1L << (TRUSTED - 9)))) != 0) || ((((_la - 78)) & ~0x3f) == 0 && ((1L << (_la - 78)) & ((1L << (FUNC - 78)) | (1L << (INTERFACE - 78)) | (1L << (MAP - 78)) | (1L << (STRUCT - 78)) | (1L << (CHAN - 78)) | (1L << (CONST - 78)) | (1L << (TYPE - 78)) | (1L << (VAR - 78)) | (1L << (IDENTIFIER - 78)) | (1L << (L_PAREN - 78)) | (1L << (L_BRACKET - 78)) | (1L << (STAR - 78)) | (1L << (RECEIVE - 78)))) != 0)) {
{
{
- setState(410);
+ setState(412);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,4,_ctx) ) {
case 1:
{
- setState(407);
+ setState(409);
specMember();
}
break;
case 2:
{
- setState(408);
+ setState(410);
declaration();
}
break;
case 3:
{
- setState(409);
+ setState(411);
ghostMember();
}
break;
}
- setState(412);
+ setState(414);
eos();
}
}
- setState(418);
+ setState(420);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(419);
+ setState(421);
match(EOF);
}
}
@@ -634,9 +635,9 @@ public final InitPostContext initPost() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(421);
+ setState(423);
match(INIT_POST);
- setState(422);
+ setState(424);
expression(0);
}
}
@@ -673,9 +674,9 @@ public final ImportPreContext importPre() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(424);
+ setState(426);
match(IMPORT_PRE);
- setState(425);
+ setState(427);
expression(0);
}
}
@@ -727,28 +728,28 @@ public final ImportSpecContext importSpec() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(432);
+ setState(434);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==IMPORT_PRE) {
{
{
- setState(427);
+ setState(429);
importPre();
- setState(428);
+ setState(430);
eos();
}
}
- setState(434);
+ setState(436);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(436);
+ setState(438);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==IDENTIFIER || _la==DOT) {
{
- setState(435);
+ setState(437);
((ImportSpecContext)_localctx).alias = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==IDENTIFIER || _la==DOT) ) {
@@ -762,7 +763,7 @@ public final ImportSpecContext importSpec() throws RecognitionException {
}
}
- setState(438);
+ setState(440);
importPath();
}
}
@@ -817,56 +818,56 @@ public final ImportDeclContext importDecl() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(445);
+ setState(447);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==IMPORT_PRE) {
{
{
- setState(440);
+ setState(442);
importPre();
- setState(441);
+ setState(443);
eos();
}
}
- setState(447);
+ setState(449);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(461);
+ setState(463);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) {
case 1:
{
- setState(448);
+ setState(450);
match(IMPORT);
- setState(449);
+ setState(451);
importSpec();
}
break;
case 2:
{
- setState(450);
+ setState(452);
match(IMPORT);
- setState(451);
+ setState(453);
match(L_PAREN);
- setState(457);
+ setState(459);
_errHandler.sync(this);
_la = _input.LA(1);
- while (((((_la - 70)) & ~0x3f) == 0 && ((1L << (_la - 70)) & ((1L << (IMPORT_PRE - 70)) | (1L << (IDENTIFIER - 70)) | (1L << (DOT - 70)))) != 0) || _la==RAW_STRING_LIT || _la==INTERPRETED_STRING_LIT) {
+ while (((((_la - 71)) & ~0x3f) == 0 && ((1L << (_la - 71)) & ((1L << (IMPORT_PRE - 71)) | (1L << (IDENTIFIER - 71)) | (1L << (DOT - 71)))) != 0) || _la==RAW_STRING_LIT || _la==INTERPRETED_STRING_LIT) {
{
{
- setState(452);
+ setState(454);
importSpec();
- setState(453);
+ setState(455);
eos();
}
}
- setState(459);
+ setState(461);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(460);
+ setState(462);
match(R_PAREN);
}
break;
@@ -912,34 +913,34 @@ public final GhostMemberContext ghostMember() throws RecognitionException {
GhostMemberContext _localctx = new GhostMemberContext(_ctx, getState());
enterRule(_localctx, 20, RULE_ghostMember);
try {
- setState(467);
+ setState(469);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,11,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(463);
+ setState(465);
implementationProof();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(464);
+ setState(466);
fpredicateDecl();
}
break;
case 3:
enterOuterAlt(_localctx, 3);
{
- setState(465);
+ setState(467);
mpredicateDecl();
}
break;
case 4:
enterOuterAlt(_localctx, 4);
{
- setState(466);
+ setState(468);
explicitGhostMember();
}
break;
@@ -1026,16 +1027,16 @@ public final GhostStatementContext ghostStatement() throws RecognitionException
enterRule(_localctx, 22, RULE_ghostStatement);
int _la;
try {
- setState(476);
+ setState(478);
_errHandler.sync(this);
switch (_input.LA(1)) {
case GHOST:
_localctx = new ExplicitGhostStatementContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(469);
+ setState(471);
match(GHOST);
- setState(470);
+ setState(472);
statement();
}
break;
@@ -1044,7 +1045,7 @@ public final GhostStatementContext ghostStatement() throws RecognitionException
_localctx = new FoldStatementContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(471);
+ setState(473);
((FoldStatementContext)_localctx).fold_stmt = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==FOLD || _la==UNFOLD) ) {
@@ -1055,7 +1056,7 @@ public final GhostStatementContext ghostStatement() throws RecognitionException
_errHandler.reportMatch(this);
consume();
}
- setState(472);
+ setState(474);
predicateAccess();
}
break;
@@ -1066,7 +1067,7 @@ public final GhostStatementContext ghostStatement() throws RecognitionException
_localctx = new ProofStatementContext(_localctx);
enterOuterAlt(_localctx, 3);
{
- setState(473);
+ setState(475);
((ProofStatementContext)_localctx).kind = _input.LT(1);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ASSERT) | (1L << ASSUME) | (1L << INHALE) | (1L << EXHALE))) != 0)) ) {
@@ -1077,7 +1078,7 @@ public final GhostStatementContext ghostStatement() throws RecognitionException
_errHandler.reportMatch(this);
consume();
}
- setState(474);
+ setState(476);
expression(0);
}
break;
@@ -1085,7 +1086,7 @@ public final GhostStatementContext ghostStatement() throws RecognitionException
_localctx = new MatchStmt_Context(_localctx);
enterOuterAlt(_localctx, 4);
{
- setState(475);
+ setState(477);
matchStmt();
}
break;
@@ -1125,7 +1126,7 @@ public final AuxiliaryStatementContext auxiliaryStatement() throws RecognitionEx
try {
enterOuterAlt(_localctx, 1);
{
- setState(478);
+ setState(480);
statementWithSpec();
}
}
@@ -1165,10 +1166,10 @@ public final StatementWithSpecContext statementWithSpec() throws RecognitionExce
try {
enterOuterAlt(_localctx, 1);
{
- setState(480);
+ setState(482);
((StatementWithSpecContext)_localctx).specification = specification();
{
- setState(481);
+ setState(483);
outlineStatement(((StatementWithSpecContext)_localctx).specification.trusted, ((StatementWithSpecContext)_localctx).specification.pure);
}
}
@@ -1213,21 +1214,21 @@ public final OutlineStatementContext outlineStatement(boolean trusted,boolean pu
try {
enterOuterAlt(_localctx, 1);
{
- setState(483);
+ setState(485);
match(OUTLINE);
- setState(484);
- match(L_PAREN);
setState(486);
+ match(L_PAREN);
+ setState(488);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,13,_ctx) ) {
case 1:
{
- setState(485);
+ setState(487);
statementList();
}
break;
}
- setState(488);
+ setState(490);
match(R_PAREN);
}
}
@@ -1258,6 +1259,9 @@ public TypeExprContext typeExpr() {
public IsComparableContext isComparable() {
return getRuleContext(IsComparableContext.class,0);
}
+ public LowContext low() {
+ return getRuleContext(LowContext.class,0);
+ }
public OldContext old() {
return getRuleContext(OldContext.class,0);
}
@@ -1297,97 +1301,104 @@ public final GhostPrimaryExprContext ghostPrimaryExpr() throws RecognitionExcept
GhostPrimaryExprContext _localctx = new GhostPrimaryExprContext(_ctx, getState());
enterRule(_localctx, 30, RULE_ghostPrimaryExpr);
try {
- setState(503);
+ setState(506);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(490);
+ setState(492);
range();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(491);
+ setState(493);
access();
}
break;
case 3:
enterOuterAlt(_localctx, 3);
{
- setState(492);
+ setState(494);
typeOf();
}
break;
case 4:
enterOuterAlt(_localctx, 4);
{
- setState(493);
+ setState(495);
typeExpr();
}
break;
case 5:
enterOuterAlt(_localctx, 5);
{
- setState(494);
+ setState(496);
isComparable();
}
break;
case 6:
enterOuterAlt(_localctx, 6);
{
- setState(495);
- old();
+ setState(497);
+ low();
}
break;
case 7:
enterOuterAlt(_localctx, 7);
{
- setState(496);
- before();
+ setState(498);
+ old();
}
break;
case 8:
enterOuterAlt(_localctx, 8);
{
- setState(497);
- sConversion();
+ setState(499);
+ before();
}
break;
case 9:
enterOuterAlt(_localctx, 9);
{
- setState(498);
- optionNone();
+ setState(500);
+ sConversion();
}
break;
case 10:
enterOuterAlt(_localctx, 10);
{
- setState(499);
- optionSome();
+ setState(501);
+ optionNone();
}
break;
case 11:
enterOuterAlt(_localctx, 11);
{
- setState(500);
- optionGet();
+ setState(502);
+ optionSome();
}
break;
case 12:
enterOuterAlt(_localctx, 12);
{
- setState(501);
- permission();
+ setState(503);
+ optionGet();
}
break;
case 13:
enterOuterAlt(_localctx, 13);
{
- setState(502);
+ setState(504);
+ permission();
+ }
+ break;
+ case 14:
+ enterOuterAlt(_localctx, 14);
+ {
+ setState(505);
matchExpr();
}
break;
@@ -1425,7 +1436,7 @@ public final PermissionContext permission() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(505);
+ setState(508);
_la = _input.LA(1);
if ( !(_la==WRITEPERM || _la==NOPERM) ) {
_errHandler.recoverInline(this);
@@ -1472,13 +1483,13 @@ public final TypeExprContext typeExpr() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(507);
+ setState(510);
match(TYPE);
- setState(508);
+ setState(511);
match(L_BRACKET);
- setState(509);
+ setState(512);
type_();
- setState(510);
+ setState(513);
match(R_BRACKET);
}
}
@@ -1523,32 +1534,32 @@ public final BoundVariablesContext boundVariables() throws RecognitionException
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(512);
+ setState(515);
boundVariableDecl();
- setState(517);
+ setState(520);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,15,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(513);
+ setState(516);
match(COMMA);
- setState(514);
+ setState(517);
boundVariableDecl();
}
}
}
- setState(519);
+ setState(522);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,15,_ctx);
}
- setState(521);
+ setState(524);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==COMMA) {
{
- setState(520);
+ setState(523);
match(COMMA);
}
}
@@ -1596,25 +1607,25 @@ public final BoundVariableDeclContext boundVariableDecl() throws RecognitionExce
try {
enterOuterAlt(_localctx, 1);
{
- setState(523);
+ setState(526);
match(IDENTIFIER);
- setState(528);
+ setState(531);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==COMMA) {
{
{
- setState(524);
+ setState(527);
match(COMMA);
- setState(525);
+ setState(528);
match(IDENTIFIER);
}
}
- setState(530);
+ setState(533);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(531);
+ setState(534);
elementType();
}
}
@@ -1654,17 +1665,17 @@ public final TriggersContext triggers() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(536);
+ setState(539);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==L_CURLY) {
{
{
- setState(533);
+ setState(536);
trigger();
}
}
- setState(538);
+ setState(541);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -1712,27 +1723,27 @@ public final TriggerContext trigger() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(539);
+ setState(542);
match(L_CURLY);
- setState(540);
+ setState(543);
expression(0);
- setState(545);
+ setState(548);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==COMMA) {
{
{
- setState(541);
+ setState(544);
match(COMMA);
- setState(542);
+ setState(545);
expression(0);
}
}
- setState(547);
+ setState(550);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(548);
+ setState(551);
match(R_CURLY);
}
}
@@ -1768,7 +1779,7 @@ public final PredicateAccessContext predicateAccess() throws RecognitionExceptio
try {
enterOuterAlt(_localctx, 1);
{
- setState(550);
+ setState(553);
primaryExpr(0);
}
}
@@ -1807,13 +1818,13 @@ public final OptionSomeContext optionSome() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(552);
+ setState(555);
match(SOME);
- setState(553);
+ setState(556);
match(L_PAREN);
- setState(554);
+ setState(557);
expression(0);
- setState(555);
+ setState(558);
match(R_PAREN);
}
}
@@ -1852,13 +1863,13 @@ public final OptionNoneContext optionNone() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(557);
+ setState(560);
match(NONE);
- setState(558);
+ setState(561);
match(L_BRACKET);
- setState(559);
+ setState(562);
type_();
- setState(560);
+ setState(563);
match(R_BRACKET);
}
}
@@ -1897,13 +1908,13 @@ public final OptionGetContext optionGet() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(562);
+ setState(565);
match(GET);
- setState(563);
+ setState(566);
match(L_PAREN);
- setState(564);
+ setState(567);
expression(0);
- setState(565);
+ setState(568);
match(R_PAREN);
}
}
@@ -1946,7 +1957,7 @@ public final SConversionContext sConversion() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(567);
+ setState(570);
((SConversionContext)_localctx).kind = _input.LT(1);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << SEQ) | (1L << SET) | (1L << MSET))) != 0)) ) {
@@ -1957,11 +1968,11 @@ public final SConversionContext sConversion() throws RecognitionException {
_errHandler.reportMatch(this);
consume();
}
- setState(568);
+ setState(571);
match(L_PAREN);
- setState(569);
+ setState(572);
expression(0);
- setState(570);
+ setState(573);
match(R_PAREN);
}
}
@@ -2006,27 +2017,27 @@ public final OldContext old() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(572);
+ setState(575);
match(OLD);
- setState(577);
+ setState(580);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==L_BRACKET) {
{
- setState(573);
+ setState(576);
match(L_BRACKET);
- setState(574);
+ setState(577);
oldLabelUse();
- setState(575);
+ setState(578);
match(R_BRACKET);
}
}
- setState(579);
+ setState(582);
match(L_PAREN);
- setState(580);
+ setState(583);
expression(0);
- setState(581);
+ setState(584);
match(R_PAREN);
}
}
@@ -2061,20 +2072,20 @@ public final OldLabelUseContext oldLabelUse() throws RecognitionException {
OldLabelUseContext _localctx = new OldLabelUseContext(_ctx, getState());
enterRule(_localctx, 56, RULE_oldLabelUse);
try {
- setState(585);
+ setState(588);
_errHandler.sync(this);
switch (_input.LA(1)) {
case IDENTIFIER:
enterOuterAlt(_localctx, 1);
{
- setState(583);
+ setState(586);
labelUse();
}
break;
case LHS:
enterOuterAlt(_localctx, 2);
{
- setState(584);
+ setState(587);
match(LHS);
}
break;
@@ -2112,7 +2123,7 @@ public final LabelUseContext labelUse() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(587);
+ setState(590);
match(IDENTIFIER);
}
}
@@ -2151,13 +2162,13 @@ public final BeforeContext before() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(589);
+ setState(592);
match(BEFORE);
- setState(590);
+ setState(593);
match(L_PAREN);
- setState(591);
+ setState(594);
expression(0);
- setState(592);
+ setState(595);
match(R_PAREN);
}
}
@@ -2196,13 +2207,58 @@ public final IsComparableContext isComparable() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(594);
+ setState(597);
match(IS_COMPARABLE);
- setState(595);
+ setState(598);
match(L_PAREN);
- setState(596);
+ setState(599);
expression(0);
- setState(597);
+ setState(600);
+ match(R_PAREN);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class LowContext extends ParserRuleContext {
+ public TerminalNode LOW() { return getToken(GobraParser.LOW, 0); }
+ public TerminalNode L_PAREN() { return getToken(GobraParser.L_PAREN, 0); }
+ public ExpressionContext expression() {
+ return getRuleContext(ExpressionContext.class,0);
+ }
+ public TerminalNode R_PAREN() { return getToken(GobraParser.R_PAREN, 0); }
+ public LowContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_low; }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GobraParserVisitor ) return ((GobraParserVisitor extends T>)visitor).visitLow(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final LowContext low() throws RecognitionException {
+ LowContext _localctx = new LowContext(_ctx, getState());
+ enterRule(_localctx, 64, RULE_low);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(602);
+ match(LOW);
+ setState(603);
+ match(L_PAREN);
+ setState(604);
+ expression(0);
+ setState(605);
match(R_PAREN);
}
}
@@ -2237,17 +2293,17 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final TypeOfContext typeOf() throws RecognitionException {
TypeOfContext _localctx = new TypeOfContext(_ctx, getState());
- enterRule(_localctx, 64, RULE_typeOf);
+ enterRule(_localctx, 66, RULE_typeOf);
try {
enterOuterAlt(_localctx, 1);
{
- setState(599);
+ setState(607);
match(TYPE_OF);
- setState(600);
+ setState(608);
match(L_PAREN);
- setState(601);
+ setState(609);
expression(0);
- setState(602);
+ setState(610);
match(R_PAREN);
}
}
@@ -2286,30 +2342,30 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final AccessContext access() throws RecognitionException {
AccessContext _localctx = new AccessContext(_ctx, getState());
- enterRule(_localctx, 66, RULE_access);
+ enterRule(_localctx, 68, RULE_access);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(604);
+ setState(612);
match(ACCESS);
- setState(605);
+ setState(613);
match(L_PAREN);
- setState(606);
+ setState(614);
expression(0);
- setState(609);
+ setState(617);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==COMMA) {
{
- setState(607);
+ setState(615);
match(COMMA);
- setState(608);
+ setState(616);
expression(0);
}
}
- setState(611);
+ setState(619);
match(R_PAREN);
}
}
@@ -2351,12 +2407,12 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final RangeContext range() throws RecognitionException {
RangeContext _localctx = new RangeContext(_ctx, getState());
- enterRule(_localctx, 68, RULE_range);
+ enterRule(_localctx, 70, RULE_range);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(613);
+ setState(621);
((RangeContext)_localctx).kind = _input.LT(1);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << SEQ) | (1L << SET) | (1L << MSET))) != 0)) ) {
@@ -2367,15 +2423,15 @@ public final RangeContext range() throws RecognitionException {
_errHandler.reportMatch(this);
consume();
}
- setState(614);
+ setState(622);
match(L_BRACKET);
- setState(615);
+ setState(623);
expression(0);
- setState(616);
+ setState(624);
match(DOT_DOT);
- setState(617);
+ setState(625);
expression(0);
- setState(618);
+ setState(626);
match(R_BRACKET);
}
}
@@ -2422,34 +2478,34 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final MatchExprContext matchExpr() throws RecognitionException {
MatchExprContext _localctx = new MatchExprContext(_ctx, getState());
- enterRule(_localctx, 70, RULE_matchExpr);
+ enterRule(_localctx, 72, RULE_matchExpr);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(620);
+ setState(628);
match(MATCH);
- setState(621);
+ setState(629);
expression(0);
- setState(622);
+ setState(630);
match(L_CURLY);
- setState(628);
+ setState(636);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==DEFAULT || _la==CASE) {
{
{
- setState(623);
+ setState(631);
matchExprClause();
- setState(624);
+ setState(632);
eos();
}
}
- setState(630);
+ setState(638);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(631);
+ setState(639);
match(R_CURLY);
}
}
@@ -2485,15 +2541,15 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final MatchExprClauseContext matchExprClause() throws RecognitionException {
MatchExprClauseContext _localctx = new MatchExprClauseContext(_ctx, getState());
- enterRule(_localctx, 72, RULE_matchExprClause);
+ enterRule(_localctx, 74, RULE_matchExprClause);
try {
enterOuterAlt(_localctx, 1);
{
- setState(633);
+ setState(641);
matchCase();
- setState(634);
+ setState(642);
match(COLON);
- setState(635);
+ setState(643);
expression(0);
}
}
@@ -2534,34 +2590,34 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final SeqUpdExpContext seqUpdExp() throws RecognitionException {
SeqUpdExpContext _localctx = new SeqUpdExpContext(_ctx, getState());
- enterRule(_localctx, 74, RULE_seqUpdExp);
+ enterRule(_localctx, 76, RULE_seqUpdExp);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(637);
+ setState(645);
match(L_BRACKET);
{
- setState(638);
+ setState(646);
seqUpdClause();
- setState(643);
+ setState(651);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==COMMA) {
{
{
- setState(639);
+ setState(647);
match(COMMA);
- setState(640);
+ setState(648);
seqUpdClause();
}
}
- setState(645);
+ setState(653);
_errHandler.sync(this);
_la = _input.LA(1);
}
}
- setState(646);
+ setState(654);
match(R_BRACKET);
}
}
@@ -2597,15 +2653,15 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final SeqUpdClauseContext seqUpdClause() throws RecognitionException {
SeqUpdClauseContext _localctx = new SeqUpdClauseContext(_ctx, getState());
- enterRule(_localctx, 76, RULE_seqUpdClause);
+ enterRule(_localctx, 78, RULE_seqUpdClause);
try {
enterOuterAlt(_localctx, 1);
{
- setState(648);
+ setState(656);
expression(0);
- setState(649);
+ setState(657);
match(ASSIGN);
- setState(650);
+ setState(658);
expression(0);
}
}
@@ -2646,9 +2702,9 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final GhostTypeLitContext ghostTypeLit() throws RecognitionException {
GhostTypeLitContext _localctx = new GhostTypeLitContext(_ctx, getState());
- enterRule(_localctx, 78, RULE_ghostTypeLit);
+ enterRule(_localctx, 80, RULE_ghostTypeLit);
try {
- setState(656);
+ setState(664);
_errHandler.sync(this);
switch (_input.LA(1)) {
case SEQ:
@@ -2658,28 +2714,28 @@ public final GhostTypeLitContext ghostTypeLit() throws RecognitionException {
case OPT:
enterOuterAlt(_localctx, 1);
{
- setState(652);
+ setState(660);
sqType();
}
break;
case GHOST:
enterOuterAlt(_localctx, 2);
{
- setState(653);
+ setState(661);
ghostSliceType();
}
break;
case DOM:
enterOuterAlt(_localctx, 3);
{
- setState(654);
+ setState(662);
domainType();
}
break;
case ADT:
enterOuterAlt(_localctx, 4);
{
- setState(655);
+ setState(663);
adtType();
}
break;
@@ -2727,32 +2783,32 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final DomainTypeContext domainType() throws RecognitionException {
DomainTypeContext _localctx = new DomainTypeContext(_ctx, getState());
- enterRule(_localctx, 80, RULE_domainType);
+ enterRule(_localctx, 82, RULE_domainType);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(658);
+ setState(666);
match(DOM);
- setState(659);
+ setState(667);
match(L_CURLY);
- setState(665);
+ setState(673);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==AXIOM || _la==FUNC) {
{
{
- setState(660);
+ setState(668);
domainClause();
- setState(661);
+ setState(669);
eos();
}
}
- setState(667);
+ setState(675);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(668);
+ setState(676);
match(R_CURLY);
}
}
@@ -2795,34 +2851,34 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final DomainClauseContext domainClause() throws RecognitionException {
DomainClauseContext _localctx = new DomainClauseContext(_ctx, getState());
- enterRule(_localctx, 82, RULE_domainClause);
+ enterRule(_localctx, 84, RULE_domainClause);
try {
- setState(679);
+ setState(687);
_errHandler.sync(this);
switch (_input.LA(1)) {
case FUNC:
enterOuterAlt(_localctx, 1);
{
- setState(670);
+ setState(678);
match(FUNC);
- setState(671);
+ setState(679);
match(IDENTIFIER);
- setState(672);
+ setState(680);
signature();
}
break;
case AXIOM:
enterOuterAlt(_localctx, 2);
{
- setState(673);
+ setState(681);
match(AXIOM);
- setState(674);
+ setState(682);
match(L_CURLY);
- setState(675);
+ setState(683);
expression(0);
- setState(676);
+ setState(684);
eos();
- setState(677);
+ setState(685);
match(R_CURLY);
}
break;
@@ -2870,32 +2926,32 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final AdtTypeContext adtType() throws RecognitionException {
AdtTypeContext _localctx = new AdtTypeContext(_ctx, getState());
- enterRule(_localctx, 84, RULE_adtType);
+ enterRule(_localctx, 86, RULE_adtType);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(681);
+ setState(689);
match(ADT);
- setState(682);
+ setState(690);
match(L_CURLY);
- setState(688);
+ setState(696);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==IDENTIFIER) {
{
{
- setState(683);
+ setState(691);
adtClause();
- setState(684);
+ setState(692);
eos();
}
}
- setState(690);
+ setState(698);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(691);
+ setState(699);
match(R_CURLY);
}
}
@@ -2939,32 +2995,32 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final AdtClauseContext adtClause() throws RecognitionException {
AdtClauseContext _localctx = new AdtClauseContext(_ctx, getState());
- enterRule(_localctx, 86, RULE_adtClause);
+ enterRule(_localctx, 88, RULE_adtClause);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(693);
+ setState(701);
match(IDENTIFIER);
- setState(694);
+ setState(702);
match(L_CURLY);
- setState(700);
+ setState(708);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==IDENTIFIER || _la==STAR) {
{
{
- setState(695);
+ setState(703);
fieldDecl();
- setState(696);
+ setState(704);
eos();
}
}
- setState(702);
+ setState(710);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(703);
+ setState(711);
match(R_CURLY);
}
}
@@ -2999,17 +3055,17 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final GhostSliceTypeContext ghostSliceType() throws RecognitionException {
GhostSliceTypeContext _localctx = new GhostSliceTypeContext(_ctx, getState());
- enterRule(_localctx, 88, RULE_ghostSliceType);
+ enterRule(_localctx, 90, RULE_ghostSliceType);
try {
enterOuterAlt(_localctx, 1);
{
- setState(705);
+ setState(713);
match(GHOST);
- setState(706);
+ setState(714);
match(L_BRACKET);
- setState(707);
+ setState(715);
match(R_BRACKET);
- setState(708);
+ setState(716);
elementType();
}
}
@@ -3052,10 +3108,10 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final SqTypeContext sqType() throws RecognitionException {
SqTypeContext _localctx = new SqTypeContext(_ctx, getState());
- enterRule(_localctx, 90, RULE_sqType);
+ enterRule(_localctx, 92, RULE_sqType);
int _la;
try {
- setState(721);
+ setState(729);
_errHandler.sync(this);
switch (_input.LA(1)) {
case SEQ:
@@ -3065,7 +3121,7 @@ public final SqTypeContext sqType() throws RecognitionException {
enterOuterAlt(_localctx, 1);
{
{
- setState(710);
+ setState(718);
((SqTypeContext)_localctx).kind = _input.LT(1);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << OPT))) != 0)) ) {
@@ -3076,11 +3132,11 @@ public final SqTypeContext sqType() throws RecognitionException {
_errHandler.reportMatch(this);
consume();
}
- setState(711);
+ setState(719);
match(L_BRACKET);
- setState(712);
+ setState(720);
type_();
- setState(713);
+ setState(721);
match(R_BRACKET);
}
}
@@ -3088,15 +3144,15 @@ public final SqTypeContext sqType() throws RecognitionException {
case DICT:
enterOuterAlt(_localctx, 2);
{
- setState(715);
+ setState(723);
((SqTypeContext)_localctx).kind = match(DICT);
- setState(716);
+ setState(724);
match(L_BRACKET);
- setState(717);
+ setState(725);
type_();
- setState(718);
+ setState(726);
match(R_BRACKET);
- setState(719);
+ setState(727);
type_();
}
break;
@@ -3151,20 +3207,20 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final SpecificationContext specification() throws RecognitionException {
SpecificationContext _localctx = new SpecificationContext(_ctx, getState());
- enterRule(_localctx, 92, RULE_specification);
+ enterRule(_localctx, 94, RULE_specification);
int _la;
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(733);
+ setState(741);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,32,_ctx);
while ( _alt!=1 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1+1 ) {
{
{
- setState(728);
+ setState(736);
_errHandler.sync(this);
switch (_input.LA(1)) {
case PRE:
@@ -3172,20 +3228,20 @@ public final SpecificationContext specification() throws RecognitionException {
case POST:
case DEC:
{
- setState(723);
+ setState(731);
specStatement();
}
break;
case PURE:
{
- setState(724);
+ setState(732);
match(PURE);
((SpecificationContext)_localctx).pure = true;
}
break;
case TRUSTED:
{
- setState(726);
+ setState(734);
match(TRUSTED);
((SpecificationContext)_localctx).trusted = true;
}
@@ -3193,21 +3249,21 @@ public final SpecificationContext specification() throws RecognitionException {
default:
throw new NoViableAltException(this);
}
- setState(730);
+ setState(738);
eos();
}
}
}
- setState(735);
+ setState(743);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,32,_ctx);
}
- setState(738);
+ setState(746);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==PURE) {
{
- setState(736);
+ setState(744);
match(PURE);
((SpecificationContext)_localctx).pure = true;
}
@@ -3251,44 +3307,44 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final SpecStatementContext specStatement() throws RecognitionException {
SpecStatementContext _localctx = new SpecStatementContext(_ctx, getState());
- enterRule(_localctx, 94, RULE_specStatement);
+ enterRule(_localctx, 96, RULE_specStatement);
try {
- setState(748);
+ setState(756);
_errHandler.sync(this);
switch (_input.LA(1)) {
case PRE:
enterOuterAlt(_localctx, 1);
{
- setState(740);
+ setState(748);
((SpecStatementContext)_localctx).kind = match(PRE);
- setState(741);
+ setState(749);
assertion();
}
break;
case PRESERVES:
enterOuterAlt(_localctx, 2);
{
- setState(742);
+ setState(750);
((SpecStatementContext)_localctx).kind = match(PRESERVES);
- setState(743);
+ setState(751);
assertion();
}
break;
case POST:
enterOuterAlt(_localctx, 3);
{
- setState(744);
+ setState(752);
((SpecStatementContext)_localctx).kind = match(POST);
- setState(745);
+ setState(753);
assertion();
}
break;
case DEC:
enterOuterAlt(_localctx, 4);
{
- setState(746);
+ setState(754);
((SpecStatementContext)_localctx).kind = match(DEC);
- setState(747);
+ setState(755);
terminationMeasure();
}
break;
@@ -3328,28 +3384,28 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final TerminationMeasureContext terminationMeasure() throws RecognitionException {
TerminationMeasureContext _localctx = new TerminationMeasureContext(_ctx, getState());
- enterRule(_localctx, 96, RULE_terminationMeasure);
+ enterRule(_localctx, 98, RULE_terminationMeasure);
try {
enterOuterAlt(_localctx, 1);
{
- setState(751);
+ setState(759);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,35,_ctx) ) {
case 1:
{
- setState(750);
+ setState(758);
expressionList();
}
break;
}
- setState(755);
+ setState(763);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,36,_ctx) ) {
case 1:
{
- setState(753);
+ setState(761);
match(IF);
- setState(754);
+ setState(762);
expression(0);
}
break;
@@ -3384,9 +3440,9 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final AssertionContext assertion() throws RecognitionException {
AssertionContext _localctx = new AssertionContext(_ctx, getState());
- enterRule(_localctx, 98, RULE_assertion);
+ enterRule(_localctx, 100, RULE_assertion);
try {
- setState(759);
+ setState(767);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,37,_ctx) ) {
case 1:
@@ -3397,7 +3453,7 @@ public final AssertionContext assertion() throws RecognitionException {
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(758);
+ setState(766);
expression(0);
}
break;
@@ -3440,32 +3496,32 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final MatchStmtContext matchStmt() throws RecognitionException {
MatchStmtContext _localctx = new MatchStmtContext(_ctx, getState());
- enterRule(_localctx, 100, RULE_matchStmt);
+ enterRule(_localctx, 102, RULE_matchStmt);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(761);
+ setState(769);
match(MATCH);
- setState(762);
+ setState(770);
expression(0);
- setState(763);
+ setState(771);
match(L_CURLY);
- setState(767);
+ setState(775);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==DEFAULT || _la==CASE) {
{
{
- setState(764);
+ setState(772);
matchStmtClause();
}
}
- setState(769);
+ setState(777);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(770);
+ setState(778);
match(R_CURLY);
}
}
@@ -3501,20 +3557,20 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final MatchStmtClauseContext matchStmtClause() throws RecognitionException {
MatchStmtClauseContext _localctx = new MatchStmtClauseContext(_ctx, getState());
- enterRule(_localctx, 102, RULE_matchStmtClause);
+ enterRule(_localctx, 104, RULE_matchStmtClause);
try {
enterOuterAlt(_localctx, 1);
{
- setState(772);
+ setState(780);
matchCase();
- setState(773);
+ setState(781);
match(COLON);
- setState(775);
+ setState(783);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,39,_ctx) ) {
case 1:
{
- setState(774);
+ setState(782);
statementList();
}
break;
@@ -3551,24 +3607,24 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final MatchCaseContext matchCase() throws RecognitionException {
MatchCaseContext _localctx = new MatchCaseContext(_ctx, getState());
- enterRule(_localctx, 104, RULE_matchCase);
+ enterRule(_localctx, 106, RULE_matchCase);
try {
- setState(780);
+ setState(788);
_errHandler.sync(this);
switch (_input.LA(1)) {
case CASE:
enterOuterAlt(_localctx, 1);
{
- setState(777);
+ setState(785);
match(CASE);
- setState(778);
+ setState(786);
matchPattern();
}
break;
case DEFAULT:
enterOuterAlt(_localctx, 2);
{
- setState(779);
+ setState(787);
match(DEFAULT);
}
break;
@@ -3639,19 +3695,19 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final MatchPatternContext matchPattern() throws RecognitionException {
MatchPatternContext _localctx = new MatchPatternContext(_ctx, getState());
- enterRule(_localctx, 106, RULE_matchPattern);
+ enterRule(_localctx, 108, RULE_matchPattern);
int _la;
try {
- setState(795);
+ setState(803);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,43,_ctx) ) {
case 1:
_localctx = new MatchPatternBindContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(782);
+ setState(790);
match(QMARK);
- setState(783);
+ setState(791);
match(IDENTIFIER);
}
break;
@@ -3659,23 +3715,23 @@ public final MatchPatternContext matchPattern() throws RecognitionException {
_localctx = new MatchPatternCompositeContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(784);
+ setState(792);
literalType();
- setState(785);
+ setState(793);
match(L_CURLY);
- setState(790);
+ setState(798);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FLOAT_LIT) | (1L << TRUE) | (1L << FALSE) | (1L << PRE) | (1L << PRESERVES) | (1L << POST) | (1L << DEC) | (1L << PURE) | (1L << OLD) | (1L << BEFORE) | (1L << FORALL) | (1L << EXISTS) | (1L << ACCESS) | (1L << UNFOLDING) | (1L << LET) | (1L << GHOST) | (1L << QMARK) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << LEN) | (1L << NEW) | (1L << MAKE) | (1L << CAP) | (1L << SOME) | (1L << GET) | (1L << DOM) | (1L << ADT) | (1L << MATCH) | (1L << NONE) | (1L << PRED) | (1L << TYPE_OF) | (1L << IS_COMPARABLE))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (WRITEPERM - 65)) | (1L << (NOPERM - 65)) | (1L << (TRUSTED - 65)) | (1L << (FUNC - 65)) | (1L << (INTERFACE - 65)) | (1L << (MAP - 65)) | (1L << (STRUCT - 65)) | (1L << (CHAN - 65)) | (1L << (RANGE - 65)) | (1L << (TYPE - 65)) | (1L << (NIL_LIT - 65)) | (1L << (IDENTIFIER - 65)) | (1L << (L_PAREN - 65)) | (1L << (L_BRACKET - 65)))) != 0) || ((((_la - 131)) & ~0x3f) == 0 && ((1L << (_la - 131)) & ((1L << (EXCLAMATION - 131)) | (1L << (PLUS - 131)) | (1L << (MINUS - 131)) | (1L << (CARET - 131)) | (1L << (STAR - 131)) | (1L << (AMPERSAND - 131)) | (1L << (RECEIVE - 131)) | (1L << (DECIMAL_LIT - 131)) | (1L << (BINARY_LIT - 131)) | (1L << (OCTAL_LIT - 131)) | (1L << (HEX_LIT - 131)) | (1L << (IMAGINARY_LIT - 131)) | (1L << (RUNE_LIT - 131)) | (1L << (RAW_STRING_LIT - 131)) | (1L << (INTERPRETED_STRING_LIT - 131)))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FLOAT_LIT) | (1L << TRUE) | (1L << FALSE) | (1L << PRE) | (1L << PRESERVES) | (1L << POST) | (1L << DEC) | (1L << PURE) | (1L << OLD) | (1L << BEFORE) | (1L << FORALL) | (1L << EXISTS) | (1L << ACCESS) | (1L << UNFOLDING) | (1L << LET) | (1L << GHOST) | (1L << QMARK) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << LEN) | (1L << NEW) | (1L << MAKE) | (1L << CAP) | (1L << SOME) | (1L << GET) | (1L << DOM) | (1L << ADT) | (1L << MATCH) | (1L << NONE) | (1L << PRED) | (1L << TYPE_OF) | (1L << IS_COMPARABLE) | (1L << LOW))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (WRITEPERM - 66)) | (1L << (NOPERM - 66)) | (1L << (TRUSTED - 66)) | (1L << (FUNC - 66)) | (1L << (INTERFACE - 66)) | (1L << (MAP - 66)) | (1L << (STRUCT - 66)) | (1L << (CHAN - 66)) | (1L << (RANGE - 66)) | (1L << (TYPE - 66)) | (1L << (NIL_LIT - 66)) | (1L << (IDENTIFIER - 66)) | (1L << (L_PAREN - 66)) | (1L << (L_BRACKET - 66)))) != 0) || ((((_la - 132)) & ~0x3f) == 0 && ((1L << (_la - 132)) & ((1L << (EXCLAMATION - 132)) | (1L << (PLUS - 132)) | (1L << (MINUS - 132)) | (1L << (CARET - 132)) | (1L << (STAR - 132)) | (1L << (AMPERSAND - 132)) | (1L << (RECEIVE - 132)) | (1L << (DECIMAL_LIT - 132)) | (1L << (BINARY_LIT - 132)) | (1L << (OCTAL_LIT - 132)) | (1L << (HEX_LIT - 132)) | (1L << (IMAGINARY_LIT - 132)) | (1L << (RUNE_LIT - 132)) | (1L << (RAW_STRING_LIT - 132)) | (1L << (INTERPRETED_STRING_LIT - 132)))) != 0)) {
{
- setState(786);
+ setState(794);
matchPatternList();
- setState(788);
+ setState(796);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==COMMA) {
{
- setState(787);
+ setState(795);
match(COMMA);
}
}
@@ -3683,7 +3739,7 @@ public final MatchPatternContext matchPattern() throws RecognitionException {
}
}
- setState(792);
+ setState(800);
match(R_CURLY);
}
break;
@@ -3691,7 +3747,7 @@ public final MatchPatternContext matchPattern() throws RecognitionException {
_localctx = new MatchPatternValueContext(_localctx);
enterOuterAlt(_localctx, 3);
{
- setState(794);
+ setState(802);
expression(0);
}
break;
@@ -3732,28 +3788,28 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final MatchPatternListContext matchPatternList() throws RecognitionException {
MatchPatternListContext _localctx = new MatchPatternListContext(_ctx, getState());
- enterRule(_localctx, 108, RULE_matchPatternList);
+ enterRule(_localctx, 110, RULE_matchPatternList);
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(797);
+ setState(805);
matchPattern();
- setState(802);
+ setState(810);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,44,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(798);
+ setState(806);
match(COMMA);
- setState(799);
+ setState(807);
matchPattern();
}
}
}
- setState(804);
+ setState(812);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,44,_ctx);
}
@@ -3796,37 +3852,37 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final BlockWithBodyParameterInfoContext blockWithBodyParameterInfo() throws RecognitionException {
BlockWithBodyParameterInfoContext _localctx = new BlockWithBodyParameterInfoContext(_ctx, getState());
- enterRule(_localctx, 110, RULE_blockWithBodyParameterInfo);
+ enterRule(_localctx, 112, RULE_blockWithBodyParameterInfo);
try {
enterOuterAlt(_localctx, 1);
{
- setState(805);
+ setState(813);
match(L_CURLY);
- setState(810);
+ setState(818);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,45,_ctx) ) {
case 1:
{
- setState(806);
+ setState(814);
match(SHARE);
- setState(807);
+ setState(815);
identifierList();
- setState(808);
+ setState(816);
eos();
}
break;
}
- setState(813);
+ setState(821);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,46,_ctx) ) {
case 1:
{
- setState(812);
+ setState(820);
statementList();
}
break;
}
- setState(815);
+ setState(823);
match(R_CURLY);
}
}
@@ -3865,47 +3921,47 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ClosureSpecInstanceContext closureSpecInstance() throws RecognitionException {
ClosureSpecInstanceContext _localctx = new ClosureSpecInstanceContext(_ctx, getState());
- enterRule(_localctx, 112, RULE_closureSpecInstance);
+ enterRule(_localctx, 114, RULE_closureSpecInstance);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(819);
+ setState(827);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,47,_ctx) ) {
case 1:
{
- setState(817);
+ setState(825);
qualifiedIdent();
}
break;
case 2:
{
- setState(818);
+ setState(826);
match(IDENTIFIER);
}
break;
}
- setState(829);
+ setState(837);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,50,_ctx) ) {
case 1:
{
- setState(821);
+ setState(829);
match(L_CURLY);
- setState(826);
+ setState(834);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FLOAT_LIT) | (1L << TRUE) | (1L << FALSE) | (1L << PRE) | (1L << PRESERVES) | (1L << POST) | (1L << DEC) | (1L << PURE) | (1L << OLD) | (1L << BEFORE) | (1L << FORALL) | (1L << EXISTS) | (1L << ACCESS) | (1L << UNFOLDING) | (1L << LET) | (1L << GHOST) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << LEN) | (1L << NEW) | (1L << MAKE) | (1L << CAP) | (1L << SOME) | (1L << GET) | (1L << DOM) | (1L << ADT) | (1L << MATCH) | (1L << NONE) | (1L << PRED) | (1L << TYPE_OF) | (1L << IS_COMPARABLE))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (WRITEPERM - 65)) | (1L << (NOPERM - 65)) | (1L << (TRUSTED - 65)) | (1L << (FUNC - 65)) | (1L << (INTERFACE - 65)) | (1L << (MAP - 65)) | (1L << (STRUCT - 65)) | (1L << (CHAN - 65)) | (1L << (RANGE - 65)) | (1L << (TYPE - 65)) | (1L << (NIL_LIT - 65)) | (1L << (IDENTIFIER - 65)) | (1L << (L_PAREN - 65)) | (1L << (L_BRACKET - 65)))) != 0) || ((((_la - 131)) & ~0x3f) == 0 && ((1L << (_la - 131)) & ((1L << (EXCLAMATION - 131)) | (1L << (PLUS - 131)) | (1L << (MINUS - 131)) | (1L << (CARET - 131)) | (1L << (STAR - 131)) | (1L << (AMPERSAND - 131)) | (1L << (RECEIVE - 131)) | (1L << (DECIMAL_LIT - 131)) | (1L << (BINARY_LIT - 131)) | (1L << (OCTAL_LIT - 131)) | (1L << (HEX_LIT - 131)) | (1L << (IMAGINARY_LIT - 131)) | (1L << (RUNE_LIT - 131)) | (1L << (RAW_STRING_LIT - 131)) | (1L << (INTERPRETED_STRING_LIT - 131)))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FLOAT_LIT) | (1L << TRUE) | (1L << FALSE) | (1L << PRE) | (1L << PRESERVES) | (1L << POST) | (1L << DEC) | (1L << PURE) | (1L << OLD) | (1L << BEFORE) | (1L << FORALL) | (1L << EXISTS) | (1L << ACCESS) | (1L << UNFOLDING) | (1L << LET) | (1L << GHOST) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << LEN) | (1L << NEW) | (1L << MAKE) | (1L << CAP) | (1L << SOME) | (1L << GET) | (1L << DOM) | (1L << ADT) | (1L << MATCH) | (1L << NONE) | (1L << PRED) | (1L << TYPE_OF) | (1L << IS_COMPARABLE) | (1L << LOW))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (WRITEPERM - 66)) | (1L << (NOPERM - 66)) | (1L << (TRUSTED - 66)) | (1L << (FUNC - 66)) | (1L << (INTERFACE - 66)) | (1L << (MAP - 66)) | (1L << (STRUCT - 66)) | (1L << (CHAN - 66)) | (1L << (RANGE - 66)) | (1L << (TYPE - 66)) | (1L << (NIL_LIT - 66)) | (1L << (IDENTIFIER - 66)) | (1L << (L_PAREN - 66)) | (1L << (L_BRACKET - 66)))) != 0) || ((((_la - 132)) & ~0x3f) == 0 && ((1L << (_la - 132)) & ((1L << (EXCLAMATION - 132)) | (1L << (PLUS - 132)) | (1L << (MINUS - 132)) | (1L << (CARET - 132)) | (1L << (STAR - 132)) | (1L << (AMPERSAND - 132)) | (1L << (RECEIVE - 132)) | (1L << (DECIMAL_LIT - 132)) | (1L << (BINARY_LIT - 132)) | (1L << (OCTAL_LIT - 132)) | (1L << (HEX_LIT - 132)) | (1L << (IMAGINARY_LIT - 132)) | (1L << (RUNE_LIT - 132)) | (1L << (RAW_STRING_LIT - 132)) | (1L << (INTERPRETED_STRING_LIT - 132)))) != 0)) {
{
- setState(822);
+ setState(830);
closureSpecParams();
- setState(824);
+ setState(832);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==COMMA) {
{
- setState(823);
+ setState(831);
match(COMMA);
}
}
@@ -3913,7 +3969,7 @@ public final ClosureSpecInstanceContext closureSpecInstance() throws Recognition
}
}
- setState(828);
+ setState(836);
match(R_CURLY);
}
break;
@@ -3955,28 +4011,28 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ClosureSpecParamsContext closureSpecParams() throws RecognitionException {
ClosureSpecParamsContext _localctx = new ClosureSpecParamsContext(_ctx, getState());
- enterRule(_localctx, 114, RULE_closureSpecParams);
+ enterRule(_localctx, 116, RULE_closureSpecParams);
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(831);
+ setState(839);
closureSpecParam();
- setState(836);
+ setState(844);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,51,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(832);
+ setState(840);
match(COMMA);
- setState(833);
+ setState(841);
closureSpecParam();
}
}
}
- setState(838);
+ setState(846);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,51,_ctx);
}
@@ -4012,23 +4068,23 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ClosureSpecParamContext closureSpecParam() throws RecognitionException {
ClosureSpecParamContext _localctx = new ClosureSpecParamContext(_ctx, getState());
- enterRule(_localctx, 116, RULE_closureSpecParam);
+ enterRule(_localctx, 118, RULE_closureSpecParam);
try {
enterOuterAlt(_localctx, 1);
{
- setState(841);
+ setState(849);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,52,_ctx) ) {
case 1:
{
- setState(839);
+ setState(847);
match(IDENTIFIER);
- setState(840);
+ setState(848);
match(COLON);
}
break;
}
- setState(843);
+ setState(851);
expression(0);
}
}
@@ -4068,19 +4124,19 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ClosureImplProofStmtContext closureImplProofStmt() throws RecognitionException {
ClosureImplProofStmtContext _localctx = new ClosureImplProofStmtContext(_ctx, getState());
- enterRule(_localctx, 118, RULE_closureImplProofStmt);
+ enterRule(_localctx, 120, RULE_closureImplProofStmt);
try {
enterOuterAlt(_localctx, 1);
{
- setState(845);
+ setState(853);
match(PROOF);
- setState(846);
+ setState(854);
expression(0);
- setState(847);
+ setState(855);
match(IMPL);
- setState(848);
+ setState(856);
closureSpecInstance();
- setState(849);
+ setState(857);
block();
}
}
@@ -4136,57 +4192,57 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ImplementationProofContext implementationProof() throws RecognitionException {
ImplementationProofContext _localctx = new ImplementationProofContext(_ctx, getState());
- enterRule(_localctx, 120, RULE_implementationProof);
+ enterRule(_localctx, 122, RULE_implementationProof);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(851);
+ setState(859);
type_();
- setState(852);
+ setState(860);
match(IMPL);
- setState(853);
+ setState(861);
type_();
- setState(872);
+ setState(880);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,55,_ctx) ) {
case 1:
{
- setState(854);
+ setState(862);
match(L_CURLY);
- setState(860);
+ setState(868);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==PRED) {
{
{
- setState(855);
+ setState(863);
implementationProofPredicateAlias();
- setState(856);
+ setState(864);
eos();
}
}
- setState(862);
+ setState(870);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(868);
+ setState(876);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==PURE || _la==L_PAREN) {
{
{
- setState(863);
+ setState(871);
methodImplementationProof();
- setState(864);
+ setState(872);
eos();
}
}
- setState(870);
+ setState(878);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(871);
+ setState(879);
match(R_CURLY);
}
break;
@@ -4229,33 +4285,33 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final MethodImplementationProofContext methodImplementationProof() throws RecognitionException {
MethodImplementationProofContext _localctx = new MethodImplementationProofContext(_ctx, getState());
- enterRule(_localctx, 122, RULE_methodImplementationProof);
+ enterRule(_localctx, 124, RULE_methodImplementationProof);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(875);
+ setState(883);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==PURE) {
{
- setState(874);
+ setState(882);
match(PURE);
}
}
- setState(877);
+ setState(885);
nonLocalReceiver();
- setState(878);
+ setState(886);
match(IDENTIFIER);
- setState(879);
+ setState(887);
signature();
- setState(881);
+ setState(889);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,57,_ctx) ) {
case 1:
{
- setState(880);
+ setState(888);
block();
}
break;
@@ -4294,36 +4350,36 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final NonLocalReceiverContext nonLocalReceiver() throws RecognitionException {
NonLocalReceiverContext _localctx = new NonLocalReceiverContext(_ctx, getState());
- enterRule(_localctx, 124, RULE_nonLocalReceiver);
+ enterRule(_localctx, 126, RULE_nonLocalReceiver);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(883);
+ setState(891);
match(L_PAREN);
- setState(885);
+ setState(893);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,58,_ctx) ) {
case 1:
{
- setState(884);
+ setState(892);
match(IDENTIFIER);
}
break;
}
- setState(888);
+ setState(896);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==STAR) {
{
- setState(887);
+ setState(895);
match(STAR);
}
}
- setState(890);
+ setState(898);
typeName();
- setState(891);
+ setState(899);
match(R_PAREN);
}
}
@@ -4360,26 +4416,26 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final SelectionContext selection() throws RecognitionException {
SelectionContext _localctx = new SelectionContext(_ctx, getState());
- enterRule(_localctx, 126, RULE_selection);
+ enterRule(_localctx, 128, RULE_selection);
try {
- setState(898);
+ setState(906);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,60,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(893);
+ setState(901);
primaryExpr(0);
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(894);
+ setState(902);
type_();
- setState(895);
+ setState(903);
match(DOT);
- setState(896);
+ setState(904);
match(IDENTIFIER);
}
break;
@@ -4419,28 +4475,28 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ImplementationProofPredicateAliasContext implementationProofPredicateAlias() throws RecognitionException {
ImplementationProofPredicateAliasContext _localctx = new ImplementationProofPredicateAliasContext(_ctx, getState());
- enterRule(_localctx, 128, RULE_implementationProofPredicateAlias);
+ enterRule(_localctx, 130, RULE_implementationProofPredicateAlias);
try {
enterOuterAlt(_localctx, 1);
{
- setState(900);
+ setState(908);
match(PRED);
- setState(901);
+ setState(909);
match(IDENTIFIER);
- setState(902);
+ setState(910);
match(DECLARE_ASSIGN);
- setState(905);
+ setState(913);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,61,_ctx) ) {
case 1:
{
- setState(903);
+ setState(911);
selection();
}
break;
case 2:
{
- setState(904);
+ setState(912);
operandName();
}
break;
@@ -4482,30 +4538,30 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final MakeContext make() throws RecognitionException {
MakeContext _localctx = new MakeContext(_ctx, getState());
- enterRule(_localctx, 130, RULE_make);
+ enterRule(_localctx, 132, RULE_make);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(907);
+ setState(915);
match(MAKE);
- setState(908);
+ setState(916);
match(L_PAREN);
- setState(909);
+ setState(917);
type_();
- setState(912);
+ setState(920);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==COMMA) {
{
- setState(910);
+ setState(918);
match(COMMA);
- setState(911);
+ setState(919);
expressionList();
}
}
- setState(914);
+ setState(922);
match(R_PAREN);
}
}
@@ -4540,17 +4596,17 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final New_Context new_() throws RecognitionException {
New_Context _localctx = new New_Context(_ctx, getState());
- enterRule(_localctx, 132, RULE_new_);
+ enterRule(_localctx, 134, RULE_new_);
try {
enterOuterAlt(_localctx, 1);
{
- setState(916);
+ setState(924);
match(NEW);
- setState(917);
+ setState(925);
match(L_PAREN);
- setState(918);
+ setState(926);
type_();
- setState(919);
+ setState(927);
match(R_PAREN);
}
}
@@ -4589,24 +4645,24 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final SpecMemberContext specMember() throws RecognitionException {
SpecMemberContext _localctx = new SpecMemberContext(_ctx, getState());
- enterRule(_localctx, 134, RULE_specMember);
+ enterRule(_localctx, 136, RULE_specMember);
try {
enterOuterAlt(_localctx, 1);
{
- setState(921);
+ setState(929);
((SpecMemberContext)_localctx).specification = specification();
- setState(924);
+ setState(932);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,63,_ctx) ) {
case 1:
{
- setState(922);
+ setState(930);
functionDecl(((SpecMemberContext)_localctx).specification.trusted, ((SpecMemberContext)_localctx).specification.pure);
}
break;
case 2:
{
- setState(923);
+ setState(931);
methodDecl(((SpecMemberContext)_localctx).specification.trusted, ((SpecMemberContext)_localctx).specification.pure);
}
break;
@@ -4651,23 +4707,23 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final FunctionDeclContext functionDecl(boolean trusted,boolean pure) throws RecognitionException {
FunctionDeclContext _localctx = new FunctionDeclContext(_ctx, getState(), trusted, pure);
- enterRule(_localctx, 136, RULE_functionDecl);
+ enterRule(_localctx, 138, RULE_functionDecl);
try {
enterOuterAlt(_localctx, 1);
{
- setState(926);
+ setState(934);
match(FUNC);
- setState(927);
+ setState(935);
match(IDENTIFIER);
{
- setState(928);
+ setState(936);
signature();
- setState(930);
+ setState(938);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,64,_ctx) ) {
case 1:
{
- setState(929);
+ setState(937);
blockWithBodyParameterInfo();
}
break;
@@ -4716,25 +4772,25 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final MethodDeclContext methodDecl(boolean trusted,boolean pure) throws RecognitionException {
MethodDeclContext _localctx = new MethodDeclContext(_ctx, getState(), trusted, pure);
- enterRule(_localctx, 138, RULE_methodDecl);
+ enterRule(_localctx, 140, RULE_methodDecl);
try {
enterOuterAlt(_localctx, 1);
{
- setState(932);
+ setState(940);
match(FUNC);
- setState(933);
+ setState(941);
receiver();
- setState(934);
+ setState(942);
match(IDENTIFIER);
{
- setState(935);
+ setState(943);
signature();
- setState(937);
+ setState(945);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,65,_ctx) ) {
case 1:
{
- setState(936);
+ setState(944);
blockWithBodyParameterInfo();
}
break;
@@ -4774,13 +4830,13 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ExplicitGhostMemberContext explicitGhostMember() throws RecognitionException {
ExplicitGhostMemberContext _localctx = new ExplicitGhostMemberContext(_ctx, getState());
- enterRule(_localctx, 140, RULE_explicitGhostMember);
+ enterRule(_localctx, 142, RULE_explicitGhostMember);
try {
enterOuterAlt(_localctx, 1);
{
- setState(939);
+ setState(947);
match(GHOST);
- setState(942);
+ setState(950);
_errHandler.sync(this);
switch (_input.LA(1)) {
case PRE:
@@ -4791,7 +4847,7 @@ public final ExplicitGhostMemberContext explicitGhostMember() throws Recognition
case TRUSTED:
case FUNC:
{
- setState(940);
+ setState(948);
specMember();
}
break;
@@ -4799,7 +4855,7 @@ public final ExplicitGhostMemberContext explicitGhostMember() throws Recognition
case TYPE:
case VAR:
{
- setState(941);
+ setState(949);
declaration();
}
break;
@@ -4841,22 +4897,22 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final FpredicateDeclContext fpredicateDecl() throws RecognitionException {
FpredicateDeclContext _localctx = new FpredicateDeclContext(_ctx, getState());
- enterRule(_localctx, 142, RULE_fpredicateDecl);
+ enterRule(_localctx, 144, RULE_fpredicateDecl);
try {
enterOuterAlt(_localctx, 1);
{
- setState(944);
+ setState(952);
match(PRED);
- setState(945);
+ setState(953);
match(IDENTIFIER);
- setState(946);
+ setState(954);
parameters();
- setState(948);
+ setState(956);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,67,_ctx) ) {
case 1:
{
- setState(947);
+ setState(955);
predicateBody();
}
break;
@@ -4896,17 +4952,17 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final PredicateBodyContext predicateBody() throws RecognitionException {
PredicateBodyContext _localctx = new PredicateBodyContext(_ctx, getState());
- enterRule(_localctx, 144, RULE_predicateBody);
+ enterRule(_localctx, 146, RULE_predicateBody);
try {
enterOuterAlt(_localctx, 1);
{
- setState(950);
+ setState(958);
match(L_CURLY);
- setState(951);
+ setState(959);
expression(0);
- setState(952);
+ setState(960);
eos();
- setState(953);
+ setState(961);
match(R_CURLY);
}
}
@@ -4946,24 +5002,24 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final MpredicateDeclContext mpredicateDecl() throws RecognitionException {
MpredicateDeclContext _localctx = new MpredicateDeclContext(_ctx, getState());
- enterRule(_localctx, 146, RULE_mpredicateDecl);
+ enterRule(_localctx, 148, RULE_mpredicateDecl);
try {
enterOuterAlt(_localctx, 1);
{
- setState(955);
+ setState(963);
match(PRED);
- setState(956);
+ setState(964);
receiver();
- setState(957);
+ setState(965);
match(IDENTIFIER);
- setState(958);
+ setState(966);
parameters();
- setState(960);
+ setState(968);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,68,_ctx) ) {
case 1:
{
- setState(959);
+ setState(967);
predicateBody();
}
break;
@@ -5005,13 +5061,13 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final VarSpecContext varSpec() throws RecognitionException {
VarSpecContext _localctx = new VarSpecContext(_ctx, getState());
- enterRule(_localctx, 148, RULE_varSpec);
+ enterRule(_localctx, 150, RULE_varSpec);
try {
enterOuterAlt(_localctx, 1);
{
- setState(962);
- maybeAddressableIdentifierList();
setState(970);
+ maybeAddressableIdentifierList();
+ setState(978);
_errHandler.sync(this);
switch (_input.LA(1)) {
case GHOST:
@@ -5034,16 +5090,16 @@ public final VarSpecContext varSpec() throws RecognitionException {
case STAR:
case RECEIVE:
{
- setState(963);
+ setState(971);
type_();
- setState(966);
+ setState(974);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,69,_ctx) ) {
case 1:
{
- setState(964);
+ setState(972);
match(ASSIGN);
- setState(965);
+ setState(973);
expressionList();
}
break;
@@ -5052,9 +5108,9 @@ public final VarSpecContext varSpec() throws RecognitionException {
break;
case ASSIGN:
{
- setState(968);
+ setState(976);
match(ASSIGN);
- setState(969);
+ setState(977);
expressionList();
}
break;
@@ -5095,15 +5151,15 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ShortVarDeclContext shortVarDecl() throws RecognitionException {
ShortVarDeclContext _localctx = new ShortVarDeclContext(_ctx, getState());
- enterRule(_localctx, 150, RULE_shortVarDecl);
+ enterRule(_localctx, 152, RULE_shortVarDecl);
try {
enterOuterAlt(_localctx, 1);
{
- setState(972);
+ setState(980);
maybeAddressableIdentifierList();
- setState(973);
+ setState(981);
match(DECLARE_ASSIGN);
- setState(974);
+ setState(982);
expressionList();
}
}
@@ -5141,36 +5197,36 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ReceiverContext receiver() throws RecognitionException {
ReceiverContext _localctx = new ReceiverContext(_ctx, getState());
- enterRule(_localctx, 152, RULE_receiver);
+ enterRule(_localctx, 154, RULE_receiver);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(976);
+ setState(984);
match(L_PAREN);
- setState(978);
+ setState(986);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,71,_ctx) ) {
case 1:
{
- setState(977);
+ setState(985);
maybeAddressableIdentifier();
}
break;
}
- setState(980);
+ setState(988);
type_();
- setState(982);
+ setState(990);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==COMMA) {
{
- setState(981);
+ setState(989);
match(COMMA);
}
}
- setState(984);
+ setState(992);
match(R_PAREN);
}
}
@@ -5205,22 +5261,22 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ParameterDeclContext parameterDecl() throws RecognitionException {
ParameterDeclContext _localctx = new ParameterDeclContext(_ctx, getState());
- enterRule(_localctx, 154, RULE_parameterDecl);
+ enterRule(_localctx, 156, RULE_parameterDecl);
try {
- setState(988);
+ setState(996);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,73,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(986);
+ setState(994);
actualParameterDecl();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(987);
+ setState(995);
ghostParameterDecl();
}
break;
@@ -5257,21 +5313,21 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ActualParameterDeclContext actualParameterDecl() throws RecognitionException {
ActualParameterDeclContext _localctx = new ActualParameterDeclContext(_ctx, getState());
- enterRule(_localctx, 156, RULE_actualParameterDecl);
+ enterRule(_localctx, 158, RULE_actualParameterDecl);
try {
enterOuterAlt(_localctx, 1);
{
- setState(991);
+ setState(999);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,74,_ctx) ) {
case 1:
{
- setState(990);
+ setState(998);
identifierList();
}
break;
}
- setState(993);
+ setState(1001);
parameterType();
}
}
@@ -5307,23 +5363,23 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final GhostParameterDeclContext ghostParameterDecl() throws RecognitionException {
GhostParameterDeclContext _localctx = new GhostParameterDeclContext(_ctx, getState());
- enterRule(_localctx, 158, RULE_ghostParameterDecl);
+ enterRule(_localctx, 160, RULE_ghostParameterDecl);
try {
enterOuterAlt(_localctx, 1);
{
- setState(995);
+ setState(1003);
match(GHOST);
- setState(997);
+ setState(1005);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,75,_ctx) ) {
case 1:
{
- setState(996);
+ setState(1004);
identifierList();
}
break;
}
- setState(999);
+ setState(1007);
parameterType();
}
}
@@ -5356,22 +5412,22 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ParameterTypeContext parameterType() throws RecognitionException {
ParameterTypeContext _localctx = new ParameterTypeContext(_ctx, getState());
- enterRule(_localctx, 160, RULE_parameterType);
+ enterRule(_localctx, 162, RULE_parameterType);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(1002);
+ setState(1010);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==ELLIPSIS) {
{
- setState(1001);
+ setState(1009);
match(ELLIPSIS);
}
}
- setState(1004);
+ setState(1012);
type_();
}
}
@@ -5670,14 +5726,14 @@ private ExpressionContext expression(int _p) throws RecognitionException {
int _parentState = getState();
ExpressionContext _localctx = new ExpressionContext(_ctx, _parentState);
ExpressionContext _prevctx = _localctx;
- int _startState = 162;
- enterRecursionRule(_localctx, 162, RULE_expression, _p);
+ int _startState = 164;
+ enterRecursionRule(_localctx, 164, RULE_expression, _p);
int _la;
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(1027);
+ setState(1035);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,77,_ctx) ) {
case 1:
@@ -5686,10 +5742,10 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_ctx = _localctx;
_prevctx = _localctx;
- setState(1007);
+ setState(1015);
((UnaryExprContext)_localctx).unary_op = _input.LT(1);
_la = _input.LA(1);
- if ( !(((((_la - 131)) & ~0x3f) == 0 && ((1L << (_la - 131)) & ((1L << (EXCLAMATION - 131)) | (1L << (PLUS - 131)) | (1L << (MINUS - 131)) | (1L << (CARET - 131)) | (1L << (STAR - 131)) | (1L << (AMPERSAND - 131)) | (1L << (RECEIVE - 131)))) != 0)) ) {
+ if ( !(((((_la - 132)) & ~0x3f) == 0 && ((1L << (_la - 132)) & ((1L << (EXCLAMATION - 132)) | (1L << (PLUS - 132)) | (1L << (MINUS - 132)) | (1L << (CARET - 132)) | (1L << (STAR - 132)) | (1L << (AMPERSAND - 132)) | (1L << (RECEIVE - 132)))) != 0)) ) {
((UnaryExprContext)_localctx).unary_op = (Token)_errHandler.recoverInline(this);
}
else {
@@ -5697,7 +5753,7 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_errHandler.reportMatch(this);
consume();
}
- setState(1008);
+ setState(1016);
expression(15);
}
break;
@@ -5706,7 +5762,7 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_localctx = new PrimaryExpr_Context(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(1009);
+ setState(1017);
primaryExpr(0);
}
break;
@@ -5715,13 +5771,13 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_localctx = new UnfoldingContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(1010);
+ setState(1018);
match(UNFOLDING);
- setState(1011);
+ setState(1019);
predicateAccess();
- setState(1012);
+ setState(1020);
match(IN);
- setState(1013);
+ setState(1021);
expression(3);
}
break;
@@ -5730,13 +5786,13 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_localctx = new LetContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(1015);
+ setState(1023);
match(LET);
- setState(1016);
+ setState(1024);
shortVarDecl();
- setState(1017);
+ setState(1025);
match(IN);
- setState(1018);
+ setState(1026);
expression(2);
}
break;
@@ -5745,7 +5801,7 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_localctx = new QuantificationContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(1020);
+ setState(1028);
_la = _input.LA(1);
if ( !(_la==FORALL || _la==EXISTS) ) {
_errHandler.recoverInline(this);
@@ -5755,21 +5811,21 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_errHandler.reportMatch(this);
consume();
}
- setState(1021);
+ setState(1029);
boundVariables();
- setState(1022);
+ setState(1030);
match(COLON);
- setState(1023);
+ setState(1031);
match(COLON);
- setState(1024);
+ setState(1032);
triggers();
- setState(1025);
+ setState(1033);
expression(1);
}
break;
}
_ctx.stop = _input.LT(-1);
- setState(1064);
+ setState(1072);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,79,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
@@ -5777,19 +5833,19 @@ private ExpressionContext expression(int _p) throws RecognitionException {
if ( _parseListeners!=null ) triggerExitRuleEvent();
_prevctx = _localctx;
{
- setState(1062);
+ setState(1070);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,78,_ctx) ) {
case 1:
{
_localctx = new MulExprContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(1029);
+ setState(1037);
if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)");
- setState(1030);
+ setState(1038);
((MulExprContext)_localctx).mul_op = _input.LT(1);
_la = _input.LA(1);
- if ( !(((((_la - 126)) & ~0x3f) == 0 && ((1L << (_la - 126)) & ((1L << (DIV - 126)) | (1L << (MOD - 126)) | (1L << (LSHIFT - 126)) | (1L << (RSHIFT - 126)) | (1L << (BIT_CLEAR - 126)) | (1L << (STAR - 126)) | (1L << (AMPERSAND - 126)))) != 0)) ) {
+ if ( !(((((_la - 127)) & ~0x3f) == 0 && ((1L << (_la - 127)) & ((1L << (DIV - 127)) | (1L << (MOD - 127)) | (1L << (LSHIFT - 127)) | (1L << (RSHIFT - 127)) | (1L << (BIT_CLEAR - 127)) | (1L << (STAR - 127)) | (1L << (AMPERSAND - 127)))) != 0)) ) {
((MulExprContext)_localctx).mul_op = (Token)_errHandler.recoverInline(this);
}
else {
@@ -5797,7 +5853,7 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_errHandler.reportMatch(this);
consume();
}
- setState(1031);
+ setState(1039);
expression(14);
}
break;
@@ -5805,12 +5861,12 @@ private ExpressionContext expression(int _p) throws RecognitionException {
{
_localctx = new AddExprContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(1032);
+ setState(1040);
if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)");
- setState(1033);
+ setState(1041);
((AddExprContext)_localctx).add_op = _input.LT(1);
_la = _input.LA(1);
- if ( !(_la==WAND || ((((_la - 113)) & ~0x3f) == 0 && ((1L << (_la - 113)) & ((1L << (PLUS_PLUS - 113)) | (1L << (OR - 113)) | (1L << (PLUS - 113)) | (1L << (MINUS - 113)) | (1L << (CARET - 113)))) != 0)) ) {
+ if ( !(_la==WAND || ((((_la - 114)) & ~0x3f) == 0 && ((1L << (_la - 114)) & ((1L << (PLUS_PLUS - 114)) | (1L << (OR - 114)) | (1L << (PLUS - 114)) | (1L << (MINUS - 114)) | (1L << (CARET - 114)))) != 0)) ) {
((AddExprContext)_localctx).add_op = (Token)_errHandler.recoverInline(this);
}
else {
@@ -5818,7 +5874,7 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_errHandler.reportMatch(this);
consume();
}
- setState(1034);
+ setState(1042);
expression(13);
}
break;
@@ -5826,9 +5882,9 @@ private ExpressionContext expression(int _p) throws RecognitionException {
{
_localctx = new P42ExprContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(1035);
+ setState(1043);
if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)");
- setState(1036);
+ setState(1044);
((P42ExprContext)_localctx).p42_op = _input.LT(1);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << UNION) | (1L << INTERSECTION) | (1L << SETMINUS))) != 0)) ) {
@@ -5839,7 +5895,7 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_errHandler.reportMatch(this);
consume();
}
- setState(1037);
+ setState(1045);
expression(12);
}
break;
@@ -5847,9 +5903,9 @@ private ExpressionContext expression(int _p) throws RecognitionException {
{
_localctx = new P41ExprContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(1038);
+ setState(1046);
if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)");
- setState(1039);
+ setState(1047);
((P41ExprContext)_localctx).p41_op = _input.LT(1);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << IN) | (1L << MULTI) | (1L << SUBSET))) != 0)) ) {
@@ -5860,7 +5916,7 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_errHandler.reportMatch(this);
consume();
}
- setState(1040);
+ setState(1048);
expression(11);
}
break;
@@ -5868,12 +5924,12 @@ private ExpressionContext expression(int _p) throws RecognitionException {
{
_localctx = new RelExprContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(1041);
+ setState(1049);
if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)");
- setState(1042);
+ setState(1050);
((RelExprContext)_localctx).rel_op = _input.LT(1);
_la = _input.LA(1);
- if ( !(((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & ((1L << (GHOST_EQUALS - 72)) | (1L << (GHOST_NOT_EQUALS - 72)) | (1L << (EQUALS - 72)) | (1L << (NOT_EQUALS - 72)) | (1L << (LESS - 72)) | (1L << (LESS_OR_EQUALS - 72)) | (1L << (GREATER - 72)) | (1L << (GREATER_OR_EQUALS - 72)))) != 0)) ) {
+ if ( !(((((_la - 73)) & ~0x3f) == 0 && ((1L << (_la - 73)) & ((1L << (GHOST_EQUALS - 73)) | (1L << (GHOST_NOT_EQUALS - 73)) | (1L << (EQUALS - 73)) | (1L << (NOT_EQUALS - 73)) | (1L << (LESS - 73)) | (1L << (LESS_OR_EQUALS - 73)) | (1L << (GREATER - 73)) | (1L << (GREATER_OR_EQUALS - 73)))) != 0)) ) {
((RelExprContext)_localctx).rel_op = (Token)_errHandler.recoverInline(this);
}
else {
@@ -5881,7 +5937,7 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_errHandler.reportMatch(this);
consume();
}
- setState(1043);
+ setState(1051);
expression(10);
}
break;
@@ -5889,11 +5945,11 @@ private ExpressionContext expression(int _p) throws RecognitionException {
{
_localctx = new AndExprContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(1044);
+ setState(1052);
if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
- setState(1045);
+ setState(1053);
match(LOGICAL_AND);
- setState(1046);
+ setState(1054);
expression(8);
}
break;
@@ -5901,11 +5957,11 @@ private ExpressionContext expression(int _p) throws RecognitionException {
{
_localctx = new OrExprContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(1047);
+ setState(1055);
if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
- setState(1048);
+ setState(1056);
match(LOGICAL_OR);
- setState(1049);
+ setState(1057);
expression(7);
}
break;
@@ -5913,11 +5969,11 @@ private ExpressionContext expression(int _p) throws RecognitionException {
{
_localctx = new ImplicationContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(1050);
+ setState(1058);
if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)");
- setState(1051);
+ setState(1059);
match(IMPLIES);
- setState(1052);
+ setState(1060);
expression(5);
}
break;
@@ -5925,15 +5981,15 @@ private ExpressionContext expression(int _p) throws RecognitionException {
{
_localctx = new TernaryExprContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(1053);
+ setState(1061);
if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)");
- setState(1054);
+ setState(1062);
match(QMARK);
- setState(1055);
+ setState(1063);
expression(0);
- setState(1056);
+ setState(1064);
match(COLON);
- setState(1057);
+ setState(1065);
expression(4);
}
break;
@@ -5941,18 +5997,18 @@ private ExpressionContext expression(int _p) throws RecognitionException {
{
_localctx = new ClosureImplSpecExprContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(1059);
+ setState(1067);
if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)");
- setState(1060);
+ setState(1068);
match(IMPL);
- setState(1061);
+ setState(1069);
closureSpecInstance();
}
break;
}
}
}
- setState(1066);
+ setState(1074);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,79,_ctx);
}
@@ -6043,148 +6099,148 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final StatementContext statement() throws RecognitionException {
StatementContext _localctx = new StatementContext(_ctx, getState());
- enterRule(_localctx, 164, RULE_statement);
+ enterRule(_localctx, 166, RULE_statement);
try {
- setState(1087);
+ setState(1095);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,80,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(1067);
+ setState(1075);
ghostStatement();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(1068);
+ setState(1076);
auxiliaryStatement();
}
break;
case 3:
enterOuterAlt(_localctx, 3);
{
- setState(1069);
+ setState(1077);
packageStmt();
}
break;
case 4:
enterOuterAlt(_localctx, 4);
{
- setState(1070);
+ setState(1078);
applyStmt();
}
break;
case 5:
enterOuterAlt(_localctx, 5);
{
- setState(1071);
+ setState(1079);
declaration();
}
break;
case 6:
enterOuterAlt(_localctx, 6);
{
- setState(1072);
+ setState(1080);
labeledStmt();
}
break;
case 7:
enterOuterAlt(_localctx, 7);
{
- setState(1073);
+ setState(1081);
simpleStmt();
}
break;
case 8:
enterOuterAlt(_localctx, 8);
{
- setState(1074);
+ setState(1082);
goStmt();
}
break;
case 9:
enterOuterAlt(_localctx, 9);
{
- setState(1075);
+ setState(1083);
returnStmt();
}
break;
case 10:
enterOuterAlt(_localctx, 10);
{
- setState(1076);
+ setState(1084);
breakStmt();
}
break;
case 11:
enterOuterAlt(_localctx, 11);
{
- setState(1077);
+ setState(1085);
continueStmt();
}
break;
case 12:
enterOuterAlt(_localctx, 12);
{
- setState(1078);
+ setState(1086);
gotoStmt();
}
break;
case 13:
enterOuterAlt(_localctx, 13);
{
- setState(1079);
+ setState(1087);
fallthroughStmt();
}
break;
case 14:
enterOuterAlt(_localctx, 14);
{
- setState(1080);
+ setState(1088);
block();
}
break;
case 15:
enterOuterAlt(_localctx, 15);
{
- setState(1081);
+ setState(1089);
ifStmt();
}
break;
case 16:
enterOuterAlt(_localctx, 16);
{
- setState(1082);
+ setState(1090);
switchStmt();
}
break;
case 17:
enterOuterAlt(_localctx, 17);
{
- setState(1083);
+ setState(1091);
selectStmt();
}
break;
case 18:
enterOuterAlt(_localctx, 18);
{
- setState(1084);
+ setState(1092);
specForStmt();
}
break;
case 19:
enterOuterAlt(_localctx, 19);
{
- setState(1085);
+ setState(1093);
deferStmt();
}
break;
case 20:
enterOuterAlt(_localctx, 20);
{
- setState(1086);
+ setState(1094);
closureImplProofStmt();
}
break;
@@ -6219,13 +6275,13 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ApplyStmtContext applyStmt() throws RecognitionException {
ApplyStmtContext _localctx = new ApplyStmtContext(_ctx, getState());
- enterRule(_localctx, 166, RULE_applyStmt);
+ enterRule(_localctx, 168, RULE_applyStmt);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1089);
+ setState(1097);
match(APPLY);
- setState(1090);
+ setState(1098);
expression(0);
}
}
@@ -6261,20 +6317,20 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final PackageStmtContext packageStmt() throws RecognitionException {
PackageStmtContext _localctx = new PackageStmtContext(_ctx, getState());
- enterRule(_localctx, 168, RULE_packageStmt);
+ enterRule(_localctx, 170, RULE_packageStmt);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1092);
+ setState(1100);
match(PACKAGE);
- setState(1093);
+ setState(1101);
expression(0);
- setState(1095);
+ setState(1103);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,81,_ctx) ) {
case 1:
{
- setState(1094);
+ setState(1102);
block();
}
break;
@@ -6312,13 +6368,13 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final SpecForStmtContext specForStmt() throws RecognitionException {
SpecForStmtContext _localctx = new SpecForStmtContext(_ctx, getState());
- enterRule(_localctx, 170, RULE_specForStmt);
+ enterRule(_localctx, 172, RULE_specForStmt);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1097);
+ setState(1105);
loopSpec();
- setState(1098);
+ setState(1106);
forStmt();
}
}
@@ -6367,39 +6423,39 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final LoopSpecContext loopSpec() throws RecognitionException {
LoopSpecContext _localctx = new LoopSpecContext(_ctx, getState());
- enterRule(_localctx, 172, RULE_loopSpec);
+ enterRule(_localctx, 174, RULE_loopSpec);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(1106);
+ setState(1114);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==INV) {
{
{
- setState(1100);
+ setState(1108);
match(INV);
- setState(1101);
+ setState(1109);
expression(0);
- setState(1102);
+ setState(1110);
eos();
}
}
- setState(1108);
+ setState(1116);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(1113);
+ setState(1121);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==DEC) {
{
- setState(1109);
+ setState(1117);
match(DEC);
- setState(1110);
+ setState(1118);
terminationMeasure();
- setState(1111);
+ setState(1119);
eos();
}
}
@@ -6441,27 +6497,27 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final DeferStmtContext deferStmt() throws RecognitionException {
DeferStmtContext _localctx = new DeferStmtContext(_ctx, getState());
- enterRule(_localctx, 174, RULE_deferStmt);
+ enterRule(_localctx, 176, RULE_deferStmt);
int _la;
try {
- setState(1120);
+ setState(1128);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,84,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(1115);
+ setState(1123);
match(DEFER);
- setState(1116);
+ setState(1124);
expression(0);
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(1117);
+ setState(1125);
match(DEFER);
- setState(1118);
+ setState(1126);
((DeferStmtContext)_localctx).fold_stmt = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==FOLD || _la==UNFOLD) ) {
@@ -6472,7 +6528,7 @@ public final DeferStmtContext deferStmt() throws RecognitionException {
_errHandler.reportMatch(this);
consume();
}
- setState(1119);
+ setState(1127);
predicateAccess();
}
break;
@@ -6515,64 +6571,64 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final BasicLitContext basicLit() throws RecognitionException {
BasicLitContext _localctx = new BasicLitContext(_ctx, getState());
- enterRule(_localctx, 176, RULE_basicLit);
+ enterRule(_localctx, 178, RULE_basicLit);
try {
- setState(1130);
+ setState(1138);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,85,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(1122);
+ setState(1130);
match(TRUE);
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(1123);
+ setState(1131);
match(FALSE);
}
break;
case 3:
enterOuterAlt(_localctx, 3);
{
- setState(1124);
+ setState(1132);
match(NIL_LIT);
}
break;
case 4:
enterOuterAlt(_localctx, 4);
{
- setState(1125);
+ setState(1133);
integer();
}
break;
case 5:
enterOuterAlt(_localctx, 5);
{
- setState(1126);
+ setState(1134);
string_();
}
break;
case 6:
enterOuterAlt(_localctx, 6);
{
- setState(1127);
+ setState(1135);
match(FLOAT_LIT);
}
break;
case 7:
enterOuterAlt(_localctx, 7);
{
- setState(1128);
+ setState(1136);
match(IMAGINARY_LIT);
}
break;
case 8:
enterOuterAlt(_localctx, 8);
{
- setState(1129);
+ setState(1137);
match(RUNE_LIT);
}
break;
@@ -6809,14 +6865,14 @@ private PrimaryExprContext primaryExpr(int _p) throws RecognitionException {
int _parentState = getState();
PrimaryExprContext _localctx = new PrimaryExprContext(_ctx, _parentState);
PrimaryExprContext _prevctx = _localctx;
- int _startState = 178;
- enterRecursionRule(_localctx, 178, RULE_primaryExpr, _p);
+ int _startState = 180;
+ enterRecursionRule(_localctx, 180, RULE_primaryExpr, _p);
int _la;
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(1144);
+ setState(1152);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,86,_ctx) ) {
case 1:
@@ -6825,7 +6881,7 @@ private PrimaryExprContext primaryExpr(int _p) throws RecognitionException {
_ctx = _localctx;
_prevctx = _localctx;
- setState(1133);
+ setState(1141);
operand();
}
break;
@@ -6834,7 +6890,7 @@ private PrimaryExprContext primaryExpr(int _p) throws RecognitionException {
_localctx = new ConversionPrimaryExprContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(1134);
+ setState(1142);
conversion();
}
break;
@@ -6843,7 +6899,7 @@ private PrimaryExprContext primaryExpr(int _p) throws RecognitionException {
_localctx = new MethodPrimaryExprContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(1135);
+ setState(1143);
methodExpr();
}
break;
@@ -6852,7 +6908,7 @@ private PrimaryExprContext primaryExpr(int _p) throws RecognitionException {
_localctx = new GhostPrimaryExpr_Context(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(1136);
+ setState(1144);
ghostPrimaryExpr();
}
break;
@@ -6861,7 +6917,7 @@ private PrimaryExprContext primaryExpr(int _p) throws RecognitionException {
_localctx = new NewExprContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(1137);
+ setState(1145);
new_();
}
break;
@@ -6870,7 +6926,7 @@ private PrimaryExprContext primaryExpr(int _p) throws RecognitionException {
_localctx = new MakeExprContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(1138);
+ setState(1146);
make();
}
break;
@@ -6879,7 +6935,7 @@ private PrimaryExprContext primaryExpr(int _p) throws RecognitionException {
_localctx = new BuiltInCallExprContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(1139);
+ setState(1147);
((BuiltInCallExprContext)_localctx).call_op = _input.LT(1);
_la = _input.LA(1);
if ( !(((((_la - 45)) & ~0x3f) == 0 && ((1L << (_la - 45)) & ((1L << (LEN - 45)) | (1L << (CAP - 45)) | (1L << (DOM - 45)) | (1L << (RANGE - 45)))) != 0)) ) {
@@ -6890,17 +6946,17 @@ private PrimaryExprContext primaryExpr(int _p) throws RecognitionException {
_errHandler.reportMatch(this);
consume();
}
- setState(1140);
+ setState(1148);
match(L_PAREN);
- setState(1141);
+ setState(1149);
expression(0);
- setState(1142);
+ setState(1150);
match(R_PAREN);
}
break;
}
_ctx.stop = _input.LT(-1);
- setState(1168);
+ setState(1176);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,88,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
@@ -6908,18 +6964,18 @@ private PrimaryExprContext primaryExpr(int _p) throws RecognitionException {
if ( _parseListeners!=null ) triggerExitRuleEvent();
_prevctx = _localctx;
{
- setState(1166);
+ setState(1174);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,87,_ctx) ) {
case 1:
{
_localctx = new SelectorPrimaryExprContext(new PrimaryExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_primaryExpr);
- setState(1146);
+ setState(1154);
if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)");
- setState(1147);
+ setState(1155);
match(DOT);
- setState(1148);
+ setState(1156);
match(IDENTIFIER);
}
break;
@@ -6927,9 +6983,9 @@ private PrimaryExprContext primaryExpr(int _p) throws RecognitionException {
{
_localctx = new IndexPrimaryExprContext(new PrimaryExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_primaryExpr);
- setState(1149);
+ setState(1157);
if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)");
- setState(1150);
+ setState(1158);
index();
}
break;
@@ -6937,9 +6993,9 @@ private PrimaryExprContext primaryExpr(int _p) throws RecognitionException {
{
_localctx = new SlicePrimaryExprContext(new PrimaryExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_primaryExpr);
- setState(1151);
+ setState(1159);
if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
- setState(1152);
+ setState(1160);
slice_();
}
break;
@@ -6947,9 +7003,9 @@ private PrimaryExprContext primaryExpr(int _p) throws RecognitionException {
{
_localctx = new SeqUpdPrimaryExprContext(new PrimaryExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_primaryExpr);
- setState(1153);
+ setState(1161);
if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
- setState(1154);
+ setState(1162);
seqUpdExp();
}
break;
@@ -6957,9 +7013,9 @@ private PrimaryExprContext primaryExpr(int _p) throws RecognitionException {
{
_localctx = new TypeAssertionPrimaryExprContext(new PrimaryExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_primaryExpr);
- setState(1155);
+ setState(1163);
if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)");
- setState(1156);
+ setState(1164);
typeAssertion();
}
break;
@@ -6967,9 +7023,9 @@ private PrimaryExprContext primaryExpr(int _p) throws RecognitionException {
{
_localctx = new InvokePrimaryExprContext(new PrimaryExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_primaryExpr);
- setState(1157);
+ setState(1165);
if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)");
- setState(1158);
+ setState(1166);
arguments();
}
break;
@@ -6977,13 +7033,13 @@ private PrimaryExprContext primaryExpr(int _p) throws RecognitionException {
{
_localctx = new InvokePrimaryExprWithSpecContext(new PrimaryExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_primaryExpr);
- setState(1159);
+ setState(1167);
if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)");
- setState(1160);
+ setState(1168);
arguments();
- setState(1161);
+ setState(1169);
match(AS);
- setState(1162);
+ setState(1170);
closureSpecInstance();
}
break;
@@ -6991,16 +7047,16 @@ private PrimaryExprContext primaryExpr(int _p) throws RecognitionException {
{
_localctx = new PredConstrPrimaryExprContext(new PrimaryExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_primaryExpr);
- setState(1164);
+ setState(1172);
if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)");
- setState(1165);
+ setState(1173);
predConstructArgs();
}
break;
}
}
}
- setState(1170);
+ setState(1178);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,88,_ctx);
}
@@ -7038,13 +7094,13 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final FunctionLitContext functionLit() throws RecognitionException {
FunctionLitContext _localctx = new FunctionLitContext(_ctx, getState());
- enterRule(_localctx, 180, RULE_functionLit);
+ enterRule(_localctx, 182, RULE_functionLit);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1171);
+ setState(1179);
((FunctionLitContext)_localctx).specification = specification();
- setState(1172);
+ setState(1180);
closureDecl(((FunctionLitContext)_localctx).specification.trusted, ((FunctionLitContext)_localctx).specification.pure);
}
}
@@ -7086,32 +7142,32 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ClosureDeclContext closureDecl(boolean trusted,boolean pure) throws RecognitionException {
ClosureDeclContext _localctx = new ClosureDeclContext(_ctx, getState(), trusted, pure);
- enterRule(_localctx, 182, RULE_closureDecl);
+ enterRule(_localctx, 184, RULE_closureDecl);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(1174);
+ setState(1182);
match(FUNC);
- setState(1176);
+ setState(1184);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==IDENTIFIER) {
{
- setState(1175);
+ setState(1183);
match(IDENTIFIER);
}
}
{
- setState(1178);
+ setState(1186);
signature();
- setState(1180);
+ setState(1188);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,90,_ctx) ) {
case 1:
{
- setState(1179);
+ setState(1187);
blockWithBodyParameterInfo();
}
break;
@@ -7150,34 +7206,34 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final PredConstructArgsContext predConstructArgs() throws RecognitionException {
PredConstructArgsContext _localctx = new PredConstructArgsContext(_ctx, getState());
- enterRule(_localctx, 184, RULE_predConstructArgs);
+ enterRule(_localctx, 186, RULE_predConstructArgs);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(1182);
+ setState(1190);
match(L_PRED);
- setState(1184);
+ setState(1192);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FLOAT_LIT) | (1L << TRUE) | (1L << FALSE) | (1L << PRE) | (1L << PRESERVES) | (1L << POST) | (1L << DEC) | (1L << PURE) | (1L << OLD) | (1L << BEFORE) | (1L << FORALL) | (1L << EXISTS) | (1L << ACCESS) | (1L << UNFOLDING) | (1L << LET) | (1L << GHOST) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << LEN) | (1L << NEW) | (1L << MAKE) | (1L << CAP) | (1L << SOME) | (1L << GET) | (1L << DOM) | (1L << ADT) | (1L << MATCH) | (1L << NONE) | (1L << PRED) | (1L << TYPE_OF) | (1L << IS_COMPARABLE))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (WRITEPERM - 65)) | (1L << (NOPERM - 65)) | (1L << (TRUSTED - 65)) | (1L << (FUNC - 65)) | (1L << (INTERFACE - 65)) | (1L << (MAP - 65)) | (1L << (STRUCT - 65)) | (1L << (CHAN - 65)) | (1L << (RANGE - 65)) | (1L << (TYPE - 65)) | (1L << (NIL_LIT - 65)) | (1L << (IDENTIFIER - 65)) | (1L << (L_PAREN - 65)) | (1L << (L_BRACKET - 65)))) != 0) || ((((_la - 131)) & ~0x3f) == 0 && ((1L << (_la - 131)) & ((1L << (EXCLAMATION - 131)) | (1L << (PLUS - 131)) | (1L << (MINUS - 131)) | (1L << (CARET - 131)) | (1L << (STAR - 131)) | (1L << (AMPERSAND - 131)) | (1L << (RECEIVE - 131)) | (1L << (DECIMAL_LIT - 131)) | (1L << (BINARY_LIT - 131)) | (1L << (OCTAL_LIT - 131)) | (1L << (HEX_LIT - 131)) | (1L << (IMAGINARY_LIT - 131)) | (1L << (RUNE_LIT - 131)) | (1L << (RAW_STRING_LIT - 131)) | (1L << (INTERPRETED_STRING_LIT - 131)))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FLOAT_LIT) | (1L << TRUE) | (1L << FALSE) | (1L << PRE) | (1L << PRESERVES) | (1L << POST) | (1L << DEC) | (1L << PURE) | (1L << OLD) | (1L << BEFORE) | (1L << FORALL) | (1L << EXISTS) | (1L << ACCESS) | (1L << UNFOLDING) | (1L << LET) | (1L << GHOST) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << LEN) | (1L << NEW) | (1L << MAKE) | (1L << CAP) | (1L << SOME) | (1L << GET) | (1L << DOM) | (1L << ADT) | (1L << MATCH) | (1L << NONE) | (1L << PRED) | (1L << TYPE_OF) | (1L << IS_COMPARABLE) | (1L << LOW))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (WRITEPERM - 66)) | (1L << (NOPERM - 66)) | (1L << (TRUSTED - 66)) | (1L << (FUNC - 66)) | (1L << (INTERFACE - 66)) | (1L << (MAP - 66)) | (1L << (STRUCT - 66)) | (1L << (CHAN - 66)) | (1L << (RANGE - 66)) | (1L << (TYPE - 66)) | (1L << (NIL_LIT - 66)) | (1L << (IDENTIFIER - 66)) | (1L << (L_PAREN - 66)) | (1L << (L_BRACKET - 66)))) != 0) || ((((_la - 132)) & ~0x3f) == 0 && ((1L << (_la - 132)) & ((1L << (EXCLAMATION - 132)) | (1L << (PLUS - 132)) | (1L << (MINUS - 132)) | (1L << (CARET - 132)) | (1L << (STAR - 132)) | (1L << (AMPERSAND - 132)) | (1L << (RECEIVE - 132)) | (1L << (DECIMAL_LIT - 132)) | (1L << (BINARY_LIT - 132)) | (1L << (OCTAL_LIT - 132)) | (1L << (HEX_LIT - 132)) | (1L << (IMAGINARY_LIT - 132)) | (1L << (RUNE_LIT - 132)) | (1L << (RAW_STRING_LIT - 132)) | (1L << (INTERPRETED_STRING_LIT - 132)))) != 0)) {
{
- setState(1183);
+ setState(1191);
expressionList();
}
}
- setState(1187);
+ setState(1195);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==COMMA) {
{
- setState(1186);
+ setState(1194);
match(COMMA);
}
}
- setState(1189);
+ setState(1197);
match(R_PRED);
}
}
@@ -7233,52 +7289,52 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final InterfaceTypeContext interfaceType() throws RecognitionException {
InterfaceTypeContext _localctx = new InterfaceTypeContext(_ctx, getState());
- enterRule(_localctx, 186, RULE_interfaceType);
+ enterRule(_localctx, 188, RULE_interfaceType);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(1191);
+ setState(1199);
match(INTERFACE);
- setState(1192);
+ setState(1200);
match(L_CURLY);
- setState(1202);
+ setState(1210);
_errHandler.sync(this);
_la = _input.LA(1);
while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << PRE) | (1L << PRESERVES) | (1L << POST) | (1L << DEC) | (1L << PURE) | (1L << GHOST) | (1L << PRED))) != 0) || _la==TRUSTED || _la==IDENTIFIER) {
{
{
- setState(1196);
+ setState(1204);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,93,_ctx) ) {
case 1:
{
- setState(1193);
+ setState(1201);
methodSpec();
}
break;
case 2:
{
- setState(1194);
+ setState(1202);
typeName();
}
break;
case 3:
{
- setState(1195);
+ setState(1203);
predicateSpec();
}
break;
}
- setState(1198);
+ setState(1206);
eos();
}
}
- setState(1204);
+ setState(1212);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(1205);
+ setState(1213);
match(R_CURLY);
}
}
@@ -7312,15 +7368,15 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final PredicateSpecContext predicateSpec() throws RecognitionException {
PredicateSpecContext _localctx = new PredicateSpecContext(_ctx, getState());
- enterRule(_localctx, 188, RULE_predicateSpec);
+ enterRule(_localctx, 190, RULE_predicateSpec);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1207);
+ setState(1215);
match(PRED);
- setState(1208);
+ setState(1216);
match(IDENTIFIER);
- setState(1209);
+ setState(1217);
parameters();
}
}
@@ -7360,53 +7416,53 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final MethodSpecContext methodSpec() throws RecognitionException {
MethodSpecContext _localctx = new MethodSpecContext(_ctx, getState());
- enterRule(_localctx, 190, RULE_methodSpec);
+ enterRule(_localctx, 192, RULE_methodSpec);
int _la;
try {
- setState(1226);
+ setState(1234);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,97,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(1212);
+ setState(1220);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==GHOST) {
{
- setState(1211);
+ setState(1219);
match(GHOST);
}
}
- setState(1214);
+ setState(1222);
specification();
- setState(1215);
+ setState(1223);
match(IDENTIFIER);
- setState(1216);
+ setState(1224);
parameters();
- setState(1217);
+ setState(1225);
result();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(1220);
+ setState(1228);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==GHOST) {
{
- setState(1219);
+ setState(1227);
match(GHOST);
}
}
- setState(1222);
+ setState(1230);
specification();
- setState(1223);
+ setState(1231);
match(IDENTIFIER);
- setState(1224);
+ setState(1232);
parameters();
}
break;
@@ -7451,15 +7507,15 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final Type_Context type_() throws RecognitionException {
Type_Context _localctx = new Type_Context(_ctx, getState());
- enterRule(_localctx, 192, RULE_type_);
+ enterRule(_localctx, 194, RULE_type_);
try {
- setState(1235);
+ setState(1243);
_errHandler.sync(this);
switch (_input.LA(1)) {
case IDENTIFIER:
enterOuterAlt(_localctx, 1);
{
- setState(1228);
+ setState(1236);
typeName();
}
break;
@@ -7474,7 +7530,7 @@ public final Type_Context type_() throws RecognitionException {
case RECEIVE:
enterOuterAlt(_localctx, 2);
{
- setState(1229);
+ setState(1237);
typeLit();
}
break;
@@ -7488,18 +7544,18 @@ public final Type_Context type_() throws RecognitionException {
case ADT:
enterOuterAlt(_localctx, 3);
{
- setState(1230);
+ setState(1238);
ghostTypeLit();
}
break;
case L_PAREN:
enterOuterAlt(_localctx, 4);
{
- setState(1231);
+ setState(1239);
match(L_PAREN);
- setState(1232);
+ setState(1240);
type_();
- setState(1233);
+ setState(1241);
match(R_PAREN);
}
break;
@@ -7559,71 +7615,71 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final TypeLitContext typeLit() throws RecognitionException {
TypeLitContext _localctx = new TypeLitContext(_ctx, getState());
- enterRule(_localctx, 194, RULE_typeLit);
+ enterRule(_localctx, 196, RULE_typeLit);
try {
- setState(1246);
+ setState(1254);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,99,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(1237);
+ setState(1245);
arrayType();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(1238);
+ setState(1246);
structType();
}
break;
case 3:
enterOuterAlt(_localctx, 3);
{
- setState(1239);
+ setState(1247);
pointerType();
}
break;
case 4:
enterOuterAlt(_localctx, 4);
{
- setState(1240);
+ setState(1248);
functionType();
}
break;
case 5:
enterOuterAlt(_localctx, 5);
{
- setState(1241);
+ setState(1249);
interfaceType();
}
break;
case 6:
enterOuterAlt(_localctx, 6);
{
- setState(1242);
+ setState(1250);
sliceType();
}
break;
case 7:
enterOuterAlt(_localctx, 7);
{
- setState(1243);
+ setState(1251);
mapType();
}
break;
case 8:
enterOuterAlt(_localctx, 8);
{
- setState(1244);
+ setState(1252);
channelType();
}
break;
case 9:
enterOuterAlt(_localctx, 9);
{
- setState(1245);
+ setState(1253);
predType();
}
break;
@@ -7658,13 +7714,13 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final PredTypeContext predType() throws RecognitionException {
PredTypeContext _localctx = new PredTypeContext(_ctx, getState());
- enterRule(_localctx, 196, RULE_predType);
+ enterRule(_localctx, 198, RULE_predType);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1248);
+ setState(1256);
match(PRED);
- setState(1249);
+ setState(1257);
predTypeParams();
}
}
@@ -7705,45 +7761,45 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final PredTypeParamsContext predTypeParams() throws RecognitionException {
PredTypeParamsContext _localctx = new PredTypeParamsContext(_ctx, getState());
- enterRule(_localctx, 198, RULE_predTypeParams);
+ enterRule(_localctx, 200, RULE_predTypeParams);
int _la;
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(1251);
+ setState(1259);
match(L_PAREN);
- setState(1263);
+ setState(1271);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << GHOST) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << DOM) | (1L << ADT) | (1L << PRED))) != 0) || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (FUNC - 77)) | (1L << (INTERFACE - 77)) | (1L << (MAP - 77)) | (1L << (STRUCT - 77)) | (1L << (CHAN - 77)) | (1L << (IDENTIFIER - 77)) | (1L << (L_PAREN - 77)) | (1L << (L_BRACKET - 77)) | (1L << (STAR - 77)) | (1L << (RECEIVE - 77)))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << GHOST) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << DOM) | (1L << ADT) | (1L << PRED))) != 0) || ((((_la - 78)) & ~0x3f) == 0 && ((1L << (_la - 78)) & ((1L << (FUNC - 78)) | (1L << (INTERFACE - 78)) | (1L << (MAP - 78)) | (1L << (STRUCT - 78)) | (1L << (CHAN - 78)) | (1L << (IDENTIFIER - 78)) | (1L << (L_PAREN - 78)) | (1L << (L_BRACKET - 78)) | (1L << (STAR - 78)) | (1L << (RECEIVE - 78)))) != 0)) {
{
- setState(1252);
+ setState(1260);
type_();
- setState(1257);
+ setState(1265);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,100,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(1253);
+ setState(1261);
match(COMMA);
- setState(1254);
+ setState(1262);
type_();
}
}
}
- setState(1259);
+ setState(1267);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,100,_ctx);
}
- setState(1261);
+ setState(1269);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==COMMA) {
{
- setState(1260);
+ setState(1268);
match(COMMA);
}
}
@@ -7751,7 +7807,7 @@ public final PredTypeParamsContext predTypeParams() throws RecognitionException
}
}
- setState(1265);
+ setState(1273);
match(R_PAREN);
}
}
@@ -7801,57 +7857,57 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final LiteralTypeContext literalType() throws RecognitionException {
LiteralTypeContext _localctx = new LiteralTypeContext(_ctx, getState());
- enterRule(_localctx, 200, RULE_literalType);
+ enterRule(_localctx, 202, RULE_literalType);
try {
- setState(1274);
+ setState(1282);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,103,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(1267);
+ setState(1275);
structType();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(1268);
+ setState(1276);
arrayType();
}
break;
case 3:
enterOuterAlt(_localctx, 3);
{
- setState(1269);
+ setState(1277);
implicitArray();
}
break;
case 4:
enterOuterAlt(_localctx, 4);
{
- setState(1270);
+ setState(1278);
sliceType();
}
break;
case 5:
enterOuterAlt(_localctx, 5);
{
- setState(1271);
+ setState(1279);
mapType();
}
break;
case 6:
enterOuterAlt(_localctx, 6);
{
- setState(1272);
+ setState(1280);
ghostTypeLit();
}
break;
case 7:
enterOuterAlt(_localctx, 7);
{
- setState(1273);
+ setState(1281);
typeName();
}
break;
@@ -7888,17 +7944,17 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ImplicitArrayContext implicitArray() throws RecognitionException {
ImplicitArrayContext _localctx = new ImplicitArrayContext(_ctx, getState());
- enterRule(_localctx, 202, RULE_implicitArray);
+ enterRule(_localctx, 204, RULE_implicitArray);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1276);
+ setState(1284);
match(L_BRACKET);
- setState(1277);
+ setState(1285);
match(ELLIPSIS);
- setState(1278);
+ setState(1286);
match(R_BRACKET);
- setState(1279);
+ setState(1287);
elementType();
}
}
@@ -7920,14 +7976,14 @@ public static class Slice_Context extends ParserRuleContext {
public TerminalNode COLON(int i) {
return getToken(GobraParser.COLON, i);
}
- public HighContext high() {
- return getRuleContext(HighContext.class,0);
+ public HighSliceArgumentContext highSliceArgument() {
+ return getRuleContext(HighSliceArgumentContext.class,0);
}
- public CapContext cap() {
- return getRuleContext(CapContext.class,0);
+ public CapSliceArgumentContext capSliceArgument() {
+ return getRuleContext(CapSliceArgumentContext.class,0);
}
- public LowContext low() {
- return getRuleContext(LowContext.class,0);
+ public LowSliceArgumentContext lowSliceArgument() {
+ return getRuleContext(LowSliceArgumentContext.class,0);
}
public Slice_Context(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
@@ -7942,37 +7998,37 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final Slice_Context slice_() throws RecognitionException {
Slice_Context _localctx = new Slice_Context(_ctx, getState());
- enterRule(_localctx, 204, RULE_slice_);
+ enterRule(_localctx, 206, RULE_slice_);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(1281);
+ setState(1289);
match(L_BRACKET);
- setState(1297);
+ setState(1305);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,107,_ctx) ) {
case 1:
{
- setState(1283);
+ setState(1291);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FLOAT_LIT) | (1L << TRUE) | (1L << FALSE) | (1L << PRE) | (1L << PRESERVES) | (1L << POST) | (1L << DEC) | (1L << PURE) | (1L << OLD) | (1L << BEFORE) | (1L << FORALL) | (1L << EXISTS) | (1L << ACCESS) | (1L << UNFOLDING) | (1L << LET) | (1L << GHOST) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << LEN) | (1L << NEW) | (1L << MAKE) | (1L << CAP) | (1L << SOME) | (1L << GET) | (1L << DOM) | (1L << ADT) | (1L << MATCH) | (1L << NONE) | (1L << PRED) | (1L << TYPE_OF) | (1L << IS_COMPARABLE))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (WRITEPERM - 65)) | (1L << (NOPERM - 65)) | (1L << (TRUSTED - 65)) | (1L << (FUNC - 65)) | (1L << (INTERFACE - 65)) | (1L << (MAP - 65)) | (1L << (STRUCT - 65)) | (1L << (CHAN - 65)) | (1L << (RANGE - 65)) | (1L << (TYPE - 65)) | (1L << (NIL_LIT - 65)) | (1L << (IDENTIFIER - 65)) | (1L << (L_PAREN - 65)) | (1L << (L_BRACKET - 65)))) != 0) || ((((_la - 131)) & ~0x3f) == 0 && ((1L << (_la - 131)) & ((1L << (EXCLAMATION - 131)) | (1L << (PLUS - 131)) | (1L << (MINUS - 131)) | (1L << (CARET - 131)) | (1L << (STAR - 131)) | (1L << (AMPERSAND - 131)) | (1L << (RECEIVE - 131)) | (1L << (DECIMAL_LIT - 131)) | (1L << (BINARY_LIT - 131)) | (1L << (OCTAL_LIT - 131)) | (1L << (HEX_LIT - 131)) | (1L << (IMAGINARY_LIT - 131)) | (1L << (RUNE_LIT - 131)) | (1L << (RAW_STRING_LIT - 131)) | (1L << (INTERPRETED_STRING_LIT - 131)))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FLOAT_LIT) | (1L << TRUE) | (1L << FALSE) | (1L << PRE) | (1L << PRESERVES) | (1L << POST) | (1L << DEC) | (1L << PURE) | (1L << OLD) | (1L << BEFORE) | (1L << FORALL) | (1L << EXISTS) | (1L << ACCESS) | (1L << UNFOLDING) | (1L << LET) | (1L << GHOST) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << LEN) | (1L << NEW) | (1L << MAKE) | (1L << CAP) | (1L << SOME) | (1L << GET) | (1L << DOM) | (1L << ADT) | (1L << MATCH) | (1L << NONE) | (1L << PRED) | (1L << TYPE_OF) | (1L << IS_COMPARABLE) | (1L << LOW))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (WRITEPERM - 66)) | (1L << (NOPERM - 66)) | (1L << (TRUSTED - 66)) | (1L << (FUNC - 66)) | (1L << (INTERFACE - 66)) | (1L << (MAP - 66)) | (1L << (STRUCT - 66)) | (1L << (CHAN - 66)) | (1L << (RANGE - 66)) | (1L << (TYPE - 66)) | (1L << (NIL_LIT - 66)) | (1L << (IDENTIFIER - 66)) | (1L << (L_PAREN - 66)) | (1L << (L_BRACKET - 66)))) != 0) || ((((_la - 132)) & ~0x3f) == 0 && ((1L << (_la - 132)) & ((1L << (EXCLAMATION - 132)) | (1L << (PLUS - 132)) | (1L << (MINUS - 132)) | (1L << (CARET - 132)) | (1L << (STAR - 132)) | (1L << (AMPERSAND - 132)) | (1L << (RECEIVE - 132)) | (1L << (DECIMAL_LIT - 132)) | (1L << (BINARY_LIT - 132)) | (1L << (OCTAL_LIT - 132)) | (1L << (HEX_LIT - 132)) | (1L << (IMAGINARY_LIT - 132)) | (1L << (RUNE_LIT - 132)) | (1L << (RAW_STRING_LIT - 132)) | (1L << (INTERPRETED_STRING_LIT - 132)))) != 0)) {
{
- setState(1282);
- low();
+ setState(1290);
+ lowSliceArgument();
}
}
- setState(1285);
+ setState(1293);
match(COLON);
- setState(1287);
+ setState(1295);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FLOAT_LIT) | (1L << TRUE) | (1L << FALSE) | (1L << PRE) | (1L << PRESERVES) | (1L << POST) | (1L << DEC) | (1L << PURE) | (1L << OLD) | (1L << BEFORE) | (1L << FORALL) | (1L << EXISTS) | (1L << ACCESS) | (1L << UNFOLDING) | (1L << LET) | (1L << GHOST) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << LEN) | (1L << NEW) | (1L << MAKE) | (1L << CAP) | (1L << SOME) | (1L << GET) | (1L << DOM) | (1L << ADT) | (1L << MATCH) | (1L << NONE) | (1L << PRED) | (1L << TYPE_OF) | (1L << IS_COMPARABLE))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (WRITEPERM - 65)) | (1L << (NOPERM - 65)) | (1L << (TRUSTED - 65)) | (1L << (FUNC - 65)) | (1L << (INTERFACE - 65)) | (1L << (MAP - 65)) | (1L << (STRUCT - 65)) | (1L << (CHAN - 65)) | (1L << (RANGE - 65)) | (1L << (TYPE - 65)) | (1L << (NIL_LIT - 65)) | (1L << (IDENTIFIER - 65)) | (1L << (L_PAREN - 65)) | (1L << (L_BRACKET - 65)))) != 0) || ((((_la - 131)) & ~0x3f) == 0 && ((1L << (_la - 131)) & ((1L << (EXCLAMATION - 131)) | (1L << (PLUS - 131)) | (1L << (MINUS - 131)) | (1L << (CARET - 131)) | (1L << (STAR - 131)) | (1L << (AMPERSAND - 131)) | (1L << (RECEIVE - 131)) | (1L << (DECIMAL_LIT - 131)) | (1L << (BINARY_LIT - 131)) | (1L << (OCTAL_LIT - 131)) | (1L << (HEX_LIT - 131)) | (1L << (IMAGINARY_LIT - 131)) | (1L << (RUNE_LIT - 131)) | (1L << (RAW_STRING_LIT - 131)) | (1L << (INTERPRETED_STRING_LIT - 131)))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FLOAT_LIT) | (1L << TRUE) | (1L << FALSE) | (1L << PRE) | (1L << PRESERVES) | (1L << POST) | (1L << DEC) | (1L << PURE) | (1L << OLD) | (1L << BEFORE) | (1L << FORALL) | (1L << EXISTS) | (1L << ACCESS) | (1L << UNFOLDING) | (1L << LET) | (1L << GHOST) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << LEN) | (1L << NEW) | (1L << MAKE) | (1L << CAP) | (1L << SOME) | (1L << GET) | (1L << DOM) | (1L << ADT) | (1L << MATCH) | (1L << NONE) | (1L << PRED) | (1L << TYPE_OF) | (1L << IS_COMPARABLE) | (1L << LOW))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (WRITEPERM - 66)) | (1L << (NOPERM - 66)) | (1L << (TRUSTED - 66)) | (1L << (FUNC - 66)) | (1L << (INTERFACE - 66)) | (1L << (MAP - 66)) | (1L << (STRUCT - 66)) | (1L << (CHAN - 66)) | (1L << (RANGE - 66)) | (1L << (TYPE - 66)) | (1L << (NIL_LIT - 66)) | (1L << (IDENTIFIER - 66)) | (1L << (L_PAREN - 66)) | (1L << (L_BRACKET - 66)))) != 0) || ((((_la - 132)) & ~0x3f) == 0 && ((1L << (_la - 132)) & ((1L << (EXCLAMATION - 132)) | (1L << (PLUS - 132)) | (1L << (MINUS - 132)) | (1L << (CARET - 132)) | (1L << (STAR - 132)) | (1L << (AMPERSAND - 132)) | (1L << (RECEIVE - 132)) | (1L << (DECIMAL_LIT - 132)) | (1L << (BINARY_LIT - 132)) | (1L << (OCTAL_LIT - 132)) | (1L << (HEX_LIT - 132)) | (1L << (IMAGINARY_LIT - 132)) | (1L << (RUNE_LIT - 132)) | (1L << (RAW_STRING_LIT - 132)) | (1L << (INTERPRETED_STRING_LIT - 132)))) != 0)) {
{
- setState(1286);
- high();
+ setState(1294);
+ highSliceArgument();
}
}
@@ -7980,28 +8036,28 @@ public final Slice_Context slice_() throws RecognitionException {
break;
case 2:
{
- setState(1290);
+ setState(1298);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FLOAT_LIT) | (1L << TRUE) | (1L << FALSE) | (1L << PRE) | (1L << PRESERVES) | (1L << POST) | (1L << DEC) | (1L << PURE) | (1L << OLD) | (1L << BEFORE) | (1L << FORALL) | (1L << EXISTS) | (1L << ACCESS) | (1L << UNFOLDING) | (1L << LET) | (1L << GHOST) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << LEN) | (1L << NEW) | (1L << MAKE) | (1L << CAP) | (1L << SOME) | (1L << GET) | (1L << DOM) | (1L << ADT) | (1L << MATCH) | (1L << NONE) | (1L << PRED) | (1L << TYPE_OF) | (1L << IS_COMPARABLE))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (WRITEPERM - 65)) | (1L << (NOPERM - 65)) | (1L << (TRUSTED - 65)) | (1L << (FUNC - 65)) | (1L << (INTERFACE - 65)) | (1L << (MAP - 65)) | (1L << (STRUCT - 65)) | (1L << (CHAN - 65)) | (1L << (RANGE - 65)) | (1L << (TYPE - 65)) | (1L << (NIL_LIT - 65)) | (1L << (IDENTIFIER - 65)) | (1L << (L_PAREN - 65)) | (1L << (L_BRACKET - 65)))) != 0) || ((((_la - 131)) & ~0x3f) == 0 && ((1L << (_la - 131)) & ((1L << (EXCLAMATION - 131)) | (1L << (PLUS - 131)) | (1L << (MINUS - 131)) | (1L << (CARET - 131)) | (1L << (STAR - 131)) | (1L << (AMPERSAND - 131)) | (1L << (RECEIVE - 131)) | (1L << (DECIMAL_LIT - 131)) | (1L << (BINARY_LIT - 131)) | (1L << (OCTAL_LIT - 131)) | (1L << (HEX_LIT - 131)) | (1L << (IMAGINARY_LIT - 131)) | (1L << (RUNE_LIT - 131)) | (1L << (RAW_STRING_LIT - 131)) | (1L << (INTERPRETED_STRING_LIT - 131)))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FLOAT_LIT) | (1L << TRUE) | (1L << FALSE) | (1L << PRE) | (1L << PRESERVES) | (1L << POST) | (1L << DEC) | (1L << PURE) | (1L << OLD) | (1L << BEFORE) | (1L << FORALL) | (1L << EXISTS) | (1L << ACCESS) | (1L << UNFOLDING) | (1L << LET) | (1L << GHOST) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << LEN) | (1L << NEW) | (1L << MAKE) | (1L << CAP) | (1L << SOME) | (1L << GET) | (1L << DOM) | (1L << ADT) | (1L << MATCH) | (1L << NONE) | (1L << PRED) | (1L << TYPE_OF) | (1L << IS_COMPARABLE) | (1L << LOW))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (WRITEPERM - 66)) | (1L << (NOPERM - 66)) | (1L << (TRUSTED - 66)) | (1L << (FUNC - 66)) | (1L << (INTERFACE - 66)) | (1L << (MAP - 66)) | (1L << (STRUCT - 66)) | (1L << (CHAN - 66)) | (1L << (RANGE - 66)) | (1L << (TYPE - 66)) | (1L << (NIL_LIT - 66)) | (1L << (IDENTIFIER - 66)) | (1L << (L_PAREN - 66)) | (1L << (L_BRACKET - 66)))) != 0) || ((((_la - 132)) & ~0x3f) == 0 && ((1L << (_la - 132)) & ((1L << (EXCLAMATION - 132)) | (1L << (PLUS - 132)) | (1L << (MINUS - 132)) | (1L << (CARET - 132)) | (1L << (STAR - 132)) | (1L << (AMPERSAND - 132)) | (1L << (RECEIVE - 132)) | (1L << (DECIMAL_LIT - 132)) | (1L << (BINARY_LIT - 132)) | (1L << (OCTAL_LIT - 132)) | (1L << (HEX_LIT - 132)) | (1L << (IMAGINARY_LIT - 132)) | (1L << (RUNE_LIT - 132)) | (1L << (RAW_STRING_LIT - 132)) | (1L << (INTERPRETED_STRING_LIT - 132)))) != 0)) {
{
- setState(1289);
- low();
+ setState(1297);
+ lowSliceArgument();
}
}
- setState(1292);
+ setState(1300);
match(COLON);
- setState(1293);
- high();
- setState(1294);
+ setState(1301);
+ highSliceArgument();
+ setState(1302);
match(COLON);
- setState(1295);
- cap();
+ setState(1303);
+ capSliceArgument();
}
break;
}
- setState(1299);
+ setState(1307);
match(R_BRACKET);
}
}
@@ -8016,28 +8072,28 @@ public final Slice_Context slice_() throws RecognitionException {
return _localctx;
}
- public static class LowContext extends ParserRuleContext {
+ public static class LowSliceArgumentContext extends ParserRuleContext {
public ExpressionContext expression() {
return getRuleContext(ExpressionContext.class,0);
}
- public LowContext(ParserRuleContext parent, int invokingState) {
+ public LowSliceArgumentContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
}
- @Override public int getRuleIndex() { return RULE_low; }
+ @Override public int getRuleIndex() { return RULE_lowSliceArgument; }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof GobraParserVisitor ) return ((GobraParserVisitor extends T>)visitor).visitLow(this);
+ if ( visitor instanceof GobraParserVisitor ) return ((GobraParserVisitor extends T>)visitor).visitLowSliceArgument(this);
else return visitor.visitChildren(this);
}
}
- public final LowContext low() throws RecognitionException {
- LowContext _localctx = new LowContext(_ctx, getState());
- enterRule(_localctx, 206, RULE_low);
+ public final LowSliceArgumentContext lowSliceArgument() throws RecognitionException {
+ LowSliceArgumentContext _localctx = new LowSliceArgumentContext(_ctx, getState());
+ enterRule(_localctx, 208, RULE_lowSliceArgument);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1301);
+ setState(1309);
expression(0);
}
}
@@ -8052,28 +8108,28 @@ public final LowContext low() throws RecognitionException {
return _localctx;
}
- public static class HighContext extends ParserRuleContext {
+ public static class HighSliceArgumentContext extends ParserRuleContext {
public ExpressionContext expression() {
return getRuleContext(ExpressionContext.class,0);
}
- public HighContext(ParserRuleContext parent, int invokingState) {
+ public HighSliceArgumentContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
}
- @Override public int getRuleIndex() { return RULE_high; }
+ @Override public int getRuleIndex() { return RULE_highSliceArgument; }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof GobraParserVisitor ) return ((GobraParserVisitor extends T>)visitor).visitHigh(this);
+ if ( visitor instanceof GobraParserVisitor ) return ((GobraParserVisitor extends T>)visitor).visitHighSliceArgument(this);
else return visitor.visitChildren(this);
}
}
- public final HighContext high() throws RecognitionException {
- HighContext _localctx = new HighContext(_ctx, getState());
- enterRule(_localctx, 208, RULE_high);
+ public final HighSliceArgumentContext highSliceArgument() throws RecognitionException {
+ HighSliceArgumentContext _localctx = new HighSliceArgumentContext(_ctx, getState());
+ enterRule(_localctx, 210, RULE_highSliceArgument);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1303);
+ setState(1311);
expression(0);
}
}
@@ -8088,28 +8144,28 @@ public final HighContext high() throws RecognitionException {
return _localctx;
}
- public static class CapContext extends ParserRuleContext {
+ public static class CapSliceArgumentContext extends ParserRuleContext {
public ExpressionContext expression() {
return getRuleContext(ExpressionContext.class,0);
}
- public CapContext(ParserRuleContext parent, int invokingState) {
+ public CapSliceArgumentContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
}
- @Override public int getRuleIndex() { return RULE_cap; }
+ @Override public int getRuleIndex() { return RULE_capSliceArgument; }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof GobraParserVisitor ) return ((GobraParserVisitor extends T>)visitor).visitCap(this);
+ if ( visitor instanceof GobraParserVisitor ) return ((GobraParserVisitor extends T>)visitor).visitCapSliceArgument(this);
else return visitor.visitChildren(this);
}
}
- public final CapContext cap() throws RecognitionException {
- CapContext _localctx = new CapContext(_ctx, getState());
- enterRule(_localctx, 210, RULE_cap);
+ public final CapSliceArgumentContext capSliceArgument() throws RecognitionException {
+ CapSliceArgumentContext _localctx = new CapSliceArgumentContext(_ctx, getState());
+ enterRule(_localctx, 212, RULE_capSliceArgument);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1305);
+ setState(1313);
expression(0);
}
}
@@ -8151,20 +8207,20 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final Assign_opContext assign_op() throws RecognitionException {
Assign_opContext _localctx = new Assign_opContext(_ctx, getState());
- enterRule(_localctx, 212, RULE_assign_op);
+ enterRule(_localctx, 214, RULE_assign_op);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(1308);
+ setState(1316);
_errHandler.sync(this);
_la = _input.LA(1);
- if (((((_la - 125)) & ~0x3f) == 0 && ((1L << (_la - 125)) & ((1L << (OR - 125)) | (1L << (DIV - 125)) | (1L << (MOD - 125)) | (1L << (LSHIFT - 125)) | (1L << (RSHIFT - 125)) | (1L << (BIT_CLEAR - 125)) | (1L << (PLUS - 125)) | (1L << (MINUS - 125)) | (1L << (CARET - 125)) | (1L << (STAR - 125)) | (1L << (AMPERSAND - 125)))) != 0)) {
+ if (((((_la - 126)) & ~0x3f) == 0 && ((1L << (_la - 126)) & ((1L << (OR - 126)) | (1L << (DIV - 126)) | (1L << (MOD - 126)) | (1L << (LSHIFT - 126)) | (1L << (RSHIFT - 126)) | (1L << (BIT_CLEAR - 126)) | (1L << (PLUS - 126)) | (1L << (MINUS - 126)) | (1L << (CARET - 126)) | (1L << (STAR - 126)) | (1L << (AMPERSAND - 126)))) != 0)) {
{
- setState(1307);
+ setState(1315);
((Assign_opContext)_localctx).ass_op = _input.LT(1);
_la = _input.LA(1);
- if ( !(((((_la - 125)) & ~0x3f) == 0 && ((1L << (_la - 125)) & ((1L << (OR - 125)) | (1L << (DIV - 125)) | (1L << (MOD - 125)) | (1L << (LSHIFT - 125)) | (1L << (RSHIFT - 125)) | (1L << (BIT_CLEAR - 125)) | (1L << (PLUS - 125)) | (1L << (MINUS - 125)) | (1L << (CARET - 125)) | (1L << (STAR - 125)) | (1L << (AMPERSAND - 125)))) != 0)) ) {
+ if ( !(((((_la - 126)) & ~0x3f) == 0 && ((1L << (_la - 126)) & ((1L << (OR - 126)) | (1L << (DIV - 126)) | (1L << (MOD - 126)) | (1L << (LSHIFT - 126)) | (1L << (RSHIFT - 126)) | (1L << (BIT_CLEAR - 126)) | (1L << (PLUS - 126)) | (1L << (MINUS - 126)) | (1L << (CARET - 126)) | (1L << (STAR - 126)) | (1L << (AMPERSAND - 126)))) != 0)) ) {
((Assign_opContext)_localctx).ass_op = (Token)_errHandler.recoverInline(this);
}
else {
@@ -8175,7 +8231,7 @@ public final Assign_opContext assign_op() throws RecognitionException {
}
}
- setState(1310);
+ setState(1318);
match(ASSIGN);
}
}
@@ -8218,48 +8274,48 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final RangeClauseContext rangeClause() throws RecognitionException {
RangeClauseContext _localctx = new RangeClauseContext(_ctx, getState());
- enterRule(_localctx, 214, RULE_rangeClause);
+ enterRule(_localctx, 216, RULE_rangeClause);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(1318);
+ setState(1326);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,109,_ctx) ) {
case 1:
{
- setState(1312);
+ setState(1320);
expressionList();
- setState(1313);
+ setState(1321);
match(ASSIGN);
}
break;
case 2:
{
- setState(1315);
+ setState(1323);
maybeAddressableIdentifierList();
- setState(1316);
+ setState(1324);
match(DECLARE_ASSIGN);
}
break;
}
- setState(1320);
+ setState(1328);
match(RANGE);
- setState(1321);
+ setState(1329);
expression(0);
- setState(1326);
+ setState(1334);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==WITH) {
{
- setState(1322);
+ setState(1330);
match(WITH);
- setState(1324);
+ setState(1332);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==IDENTIFIER) {
{
- setState(1323);
+ setState(1331);
match(IDENTIFIER);
}
}
@@ -8297,13 +8353,13 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final PackageClauseContext packageClause() throws RecognitionException {
PackageClauseContext _localctx = new PackageClauseContext(_ctx, getState());
- enterRule(_localctx, 216, RULE_packageClause);
+ enterRule(_localctx, 218, RULE_packageClause);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1328);
+ setState(1336);
match(PACKAGE);
- setState(1329);
+ setState(1337);
((PackageClauseContext)_localctx).packageName = match(IDENTIFIER);
}
}
@@ -8335,11 +8391,11 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ImportPathContext importPath() throws RecognitionException {
ImportPathContext _localctx = new ImportPathContext(_ctx, getState());
- enterRule(_localctx, 218, RULE_importPath);
+ enterRule(_localctx, 220, RULE_importPath);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1331);
+ setState(1339);
string_();
}
}
@@ -8377,29 +8433,29 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final DeclarationContext declaration() throws RecognitionException {
DeclarationContext _localctx = new DeclarationContext(_ctx, getState());
- enterRule(_localctx, 220, RULE_declaration);
+ enterRule(_localctx, 222, RULE_declaration);
try {
- setState(1336);
+ setState(1344);
_errHandler.sync(this);
switch (_input.LA(1)) {
case CONST:
enterOuterAlt(_localctx, 1);
{
- setState(1333);
+ setState(1341);
constDecl();
}
break;
case TYPE:
enterOuterAlt(_localctx, 2);
{
- setState(1334);
+ setState(1342);
typeDecl();
}
break;
case VAR:
enterOuterAlt(_localctx, 3);
{
- setState(1335);
+ setState(1343);
varDecl();
}
break;
@@ -8447,43 +8503,43 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ConstDeclContext constDecl() throws RecognitionException {
ConstDeclContext _localctx = new ConstDeclContext(_ctx, getState());
- enterRule(_localctx, 222, RULE_constDecl);
+ enterRule(_localctx, 224, RULE_constDecl);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(1338);
+ setState(1346);
match(CONST);
- setState(1350);
+ setState(1358);
_errHandler.sync(this);
switch (_input.LA(1)) {
case IDENTIFIER:
{
- setState(1339);
+ setState(1347);
constSpec();
}
break;
case L_PAREN:
{
- setState(1340);
+ setState(1348);
match(L_PAREN);
- setState(1346);
+ setState(1354);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==IDENTIFIER) {
{
{
- setState(1341);
+ setState(1349);
constSpec();
- setState(1342);
+ setState(1350);
eos();
}
}
- setState(1348);
+ setState(1356);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(1349);
+ setState(1357);
match(R_PAREN);
}
break;
@@ -8527,31 +8583,31 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ConstSpecContext constSpec() throws RecognitionException {
ConstSpecContext _localctx = new ConstSpecContext(_ctx, getState());
- enterRule(_localctx, 224, RULE_constSpec);
+ enterRule(_localctx, 226, RULE_constSpec);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(1352);
+ setState(1360);
identifierList();
- setState(1358);
+ setState(1366);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,116,_ctx) ) {
case 1:
{
- setState(1354);
+ setState(1362);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << GHOST) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << DOM) | (1L << ADT) | (1L << PRED))) != 0) || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (FUNC - 77)) | (1L << (INTERFACE - 77)) | (1L << (MAP - 77)) | (1L << (STRUCT - 77)) | (1L << (CHAN - 77)) | (1L << (IDENTIFIER - 77)) | (1L << (L_PAREN - 77)) | (1L << (L_BRACKET - 77)) | (1L << (STAR - 77)) | (1L << (RECEIVE - 77)))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << GHOST) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << DOM) | (1L << ADT) | (1L << PRED))) != 0) || ((((_la - 78)) & ~0x3f) == 0 && ((1L << (_la - 78)) & ((1L << (FUNC - 78)) | (1L << (INTERFACE - 78)) | (1L << (MAP - 78)) | (1L << (STRUCT - 78)) | (1L << (CHAN - 78)) | (1L << (IDENTIFIER - 78)) | (1L << (L_PAREN - 78)) | (1L << (L_BRACKET - 78)) | (1L << (STAR - 78)) | (1L << (RECEIVE - 78)))) != 0)) {
{
- setState(1353);
+ setState(1361);
type_();
}
}
- setState(1356);
+ setState(1364);
match(ASSIGN);
- setState(1357);
+ setState(1365);
expressionList();
}
break;
@@ -8591,28 +8647,28 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final IdentifierListContext identifierList() throws RecognitionException {
IdentifierListContext _localctx = new IdentifierListContext(_ctx, getState());
- enterRule(_localctx, 226, RULE_identifierList);
+ enterRule(_localctx, 228, RULE_identifierList);
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(1360);
+ setState(1368);
match(IDENTIFIER);
- setState(1365);
+ setState(1373);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,117,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(1361);
+ setState(1369);
match(COMMA);
- setState(1362);
+ setState(1370);
match(IDENTIFIER);
}
}
}
- setState(1367);
+ setState(1375);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,117,_ctx);
}
@@ -8653,28 +8709,28 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ExpressionListContext expressionList() throws RecognitionException {
ExpressionListContext _localctx = new ExpressionListContext(_ctx, getState());
- enterRule(_localctx, 228, RULE_expressionList);
+ enterRule(_localctx, 230, RULE_expressionList);
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(1368);
+ setState(1376);
expression(0);
- setState(1373);
+ setState(1381);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,118,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(1369);
+ setState(1377);
match(COMMA);
- setState(1370);
+ setState(1378);
expression(0);
}
}
}
- setState(1375);
+ setState(1383);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,118,_ctx);
}
@@ -8720,43 +8776,43 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final TypeDeclContext typeDecl() throws RecognitionException {
TypeDeclContext _localctx = new TypeDeclContext(_ctx, getState());
- enterRule(_localctx, 230, RULE_typeDecl);
+ enterRule(_localctx, 232, RULE_typeDecl);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(1376);
+ setState(1384);
match(TYPE);
- setState(1388);
+ setState(1396);
_errHandler.sync(this);
switch (_input.LA(1)) {
case IDENTIFIER:
{
- setState(1377);
+ setState(1385);
typeSpec();
}
break;
case L_PAREN:
{
- setState(1378);
+ setState(1386);
match(L_PAREN);
- setState(1384);
+ setState(1392);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==IDENTIFIER) {
{
{
- setState(1379);
+ setState(1387);
typeSpec();
- setState(1380);
+ setState(1388);
eos();
}
}
- setState(1386);
+ setState(1394);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(1387);
+ setState(1395);
match(R_PAREN);
}
break;
@@ -8795,24 +8851,24 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final TypeSpecContext typeSpec() throws RecognitionException {
TypeSpecContext _localctx = new TypeSpecContext(_ctx, getState());
- enterRule(_localctx, 232, RULE_typeSpec);
+ enterRule(_localctx, 234, RULE_typeSpec);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(1390);
+ setState(1398);
match(IDENTIFIER);
- setState(1392);
+ setState(1400);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==ASSIGN) {
{
- setState(1391);
+ setState(1399);
match(ASSIGN);
}
}
- setState(1394);
+ setState(1402);
type_();
}
}
@@ -8856,43 +8912,43 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final VarDeclContext varDecl() throws RecognitionException {
VarDeclContext _localctx = new VarDeclContext(_ctx, getState());
- enterRule(_localctx, 234, RULE_varDecl);
+ enterRule(_localctx, 236, RULE_varDecl);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(1396);
+ setState(1404);
match(VAR);
- setState(1408);
+ setState(1416);
_errHandler.sync(this);
switch (_input.LA(1)) {
case IDENTIFIER:
{
- setState(1397);
+ setState(1405);
varSpec();
}
break;
case L_PAREN:
{
- setState(1398);
+ setState(1406);
match(L_PAREN);
- setState(1404);
+ setState(1412);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==IDENTIFIER) {
{
{
- setState(1399);
+ setState(1407);
varSpec();
- setState(1400);
+ setState(1408);
eos();
}
}
- setState(1406);
+ setState(1414);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(1407);
+ setState(1415);
match(R_PAREN);
}
break;
@@ -8931,23 +8987,23 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final BlockContext block() throws RecognitionException {
BlockContext _localctx = new BlockContext(_ctx, getState());
- enterRule(_localctx, 236, RULE_block);
+ enterRule(_localctx, 238, RULE_block);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1410);
+ setState(1418);
match(L_CURLY);
- setState(1412);
+ setState(1420);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,124,_ctx) ) {
case 1:
{
- setState(1411);
+ setState(1419);
statementList();
}
break;
}
- setState(1414);
+ setState(1422);
match(R_CURLY);
}
}
@@ -8988,12 +9044,12 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final StatementListContext statementList() throws RecognitionException {
StatementListContext _localctx = new StatementListContext(_ctx, getState());
- enterRule(_localctx, 238, RULE_statementList);
+ enterRule(_localctx, 240, RULE_statementList);
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(1422);
+ setState(1430);
_errHandler.sync(this);
_alt = 1;
do {
@@ -9001,19 +9057,19 @@ public final StatementListContext statementList() throws RecognitionException {
case 1:
{
{
- setState(1417);
+ setState(1425);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,125,_ctx) ) {
case 1:
{
- setState(1416);
+ setState(1424);
eos();
}
break;
}
- setState(1419);
+ setState(1427);
statement();
- setState(1420);
+ setState(1428);
eos();
}
}
@@ -9021,7 +9077,7 @@ public final StatementListContext statementList() throws RecognitionException {
default:
throw new NoViableAltException(this);
}
- setState(1424);
+ setState(1432);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,126,_ctx);
} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
@@ -9067,43 +9123,43 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final SimpleStmtContext simpleStmt() throws RecognitionException {
SimpleStmtContext _localctx = new SimpleStmtContext(_ctx, getState());
- enterRule(_localctx, 240, RULE_simpleStmt);
+ enterRule(_localctx, 242, RULE_simpleStmt);
try {
- setState(1431);
+ setState(1439);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,127,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(1426);
+ setState(1434);
sendStmt();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(1427);
+ setState(1435);
incDecStmt();
}
break;
case 3:
enterOuterAlt(_localctx, 3);
{
- setState(1428);
+ setState(1436);
assignment();
}
break;
case 4:
enterOuterAlt(_localctx, 4);
{
- setState(1429);
+ setState(1437);
expressionStmt();
}
break;
case 5:
enterOuterAlt(_localctx, 5);
{
- setState(1430);
+ setState(1438);
shortVarDecl();
}
break;
@@ -9137,11 +9193,11 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ExpressionStmtContext expressionStmt() throws RecognitionException {
ExpressionStmtContext _localctx = new ExpressionStmtContext(_ctx, getState());
- enterRule(_localctx, 242, RULE_expressionStmt);
+ enterRule(_localctx, 244, RULE_expressionStmt);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1433);
+ setState(1441);
expression(0);
}
}
@@ -9178,15 +9234,15 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final SendStmtContext sendStmt() throws RecognitionException {
SendStmtContext _localctx = new SendStmtContext(_ctx, getState());
- enterRule(_localctx, 244, RULE_sendStmt);
+ enterRule(_localctx, 246, RULE_sendStmt);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1435);
+ setState(1443);
((SendStmtContext)_localctx).channel = expression(0);
- setState(1436);
+ setState(1444);
match(RECEIVE);
- setState(1437);
+ setState(1445);
expression(0);
}
}
@@ -9220,14 +9276,14 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final IncDecStmtContext incDecStmt() throws RecognitionException {
IncDecStmtContext _localctx = new IncDecStmtContext(_ctx, getState());
- enterRule(_localctx, 246, RULE_incDecStmt);
+ enterRule(_localctx, 248, RULE_incDecStmt);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(1439);
+ setState(1447);
expression(0);
- setState(1440);
+ setState(1448);
_la = _input.LA(1);
if ( !(_la==PLUS_PLUS || _la==MINUS_MINUS) ) {
_errHandler.recoverInline(this);
@@ -9273,15 +9329,15 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final AssignmentContext assignment() throws RecognitionException {
AssignmentContext _localctx = new AssignmentContext(_ctx, getState());
- enterRule(_localctx, 248, RULE_assignment);
+ enterRule(_localctx, 250, RULE_assignment);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1442);
+ setState(1450);
expressionList();
- setState(1443);
+ setState(1451);
assign_op();
- setState(1444);
+ setState(1452);
expressionList();
}
}
@@ -9312,12 +9368,12 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final EmptyStmtContext emptyStmt() throws RecognitionException {
EmptyStmtContext _localctx = new EmptyStmtContext(_ctx, getState());
- enterRule(_localctx, 250, RULE_emptyStmt);
+ enterRule(_localctx, 252, RULE_emptyStmt);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(1446);
+ setState(1454);
_la = _input.LA(1);
if ( !(_la==SEMI || _la==EOS) ) {
_errHandler.recoverInline(this);
@@ -9359,20 +9415,20 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final LabeledStmtContext labeledStmt() throws RecognitionException {
LabeledStmtContext _localctx = new LabeledStmtContext(_ctx, getState());
- enterRule(_localctx, 252, RULE_labeledStmt);
+ enterRule(_localctx, 254, RULE_labeledStmt);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1448);
+ setState(1456);
match(IDENTIFIER);
- setState(1449);
+ setState(1457);
match(COLON);
- setState(1451);
+ setState(1459);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,128,_ctx) ) {
case 1:
{
- setState(1450);
+ setState(1458);
statement();
}
break;
@@ -9408,18 +9464,18 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ReturnStmtContext returnStmt() throws RecognitionException {
ReturnStmtContext _localctx = new ReturnStmtContext(_ctx, getState());
- enterRule(_localctx, 254, RULE_returnStmt);
+ enterRule(_localctx, 256, RULE_returnStmt);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1453);
+ setState(1461);
match(RETURN);
- setState(1455);
+ setState(1463);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,129,_ctx) ) {
case 1:
{
- setState(1454);
+ setState(1462);
expressionList();
}
break;
@@ -9453,18 +9509,18 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final BreakStmtContext breakStmt() throws RecognitionException {
BreakStmtContext _localctx = new BreakStmtContext(_ctx, getState());
- enterRule(_localctx, 256, RULE_breakStmt);
+ enterRule(_localctx, 258, RULE_breakStmt);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1457);
+ setState(1465);
match(BREAK);
- setState(1459);
+ setState(1467);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,130,_ctx) ) {
case 1:
{
- setState(1458);
+ setState(1466);
match(IDENTIFIER);
}
break;
@@ -9498,18 +9554,18 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ContinueStmtContext continueStmt() throws RecognitionException {
ContinueStmtContext _localctx = new ContinueStmtContext(_ctx, getState());
- enterRule(_localctx, 258, RULE_continueStmt);
+ enterRule(_localctx, 260, RULE_continueStmt);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1461);
+ setState(1469);
match(CONTINUE);
- setState(1463);
+ setState(1471);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,131,_ctx) ) {
case 1:
{
- setState(1462);
+ setState(1470);
match(IDENTIFIER);
}
break;
@@ -9543,13 +9599,13 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final GotoStmtContext gotoStmt() throws RecognitionException {
GotoStmtContext _localctx = new GotoStmtContext(_ctx, getState());
- enterRule(_localctx, 260, RULE_gotoStmt);
+ enterRule(_localctx, 262, RULE_gotoStmt);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1465);
+ setState(1473);
match(GOTO);
- setState(1466);
+ setState(1474);
match(IDENTIFIER);
}
}
@@ -9579,11 +9635,11 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final FallthroughStmtContext fallthroughStmt() throws RecognitionException {
FallthroughStmtContext _localctx = new FallthroughStmtContext(_ctx, getState());
- enterRule(_localctx, 262, RULE_fallthroughStmt);
+ enterRule(_localctx, 264, RULE_fallthroughStmt);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1468);
+ setState(1476);
match(FALLTHROUGH);
}
}
@@ -9632,61 +9688,61 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final IfStmtContext ifStmt() throws RecognitionException {
IfStmtContext _localctx = new IfStmtContext(_ctx, getState());
- enterRule(_localctx, 264, RULE_ifStmt);
+ enterRule(_localctx, 266, RULE_ifStmt);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1470);
+ setState(1478);
match(IF);
- setState(1479);
+ setState(1487);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,132,_ctx) ) {
case 1:
{
- setState(1471);
+ setState(1479);
expression(0);
}
break;
case 2:
{
- setState(1472);
+ setState(1480);
eos();
- setState(1473);
+ setState(1481);
expression(0);
}
break;
case 3:
{
- setState(1475);
+ setState(1483);
simpleStmt();
- setState(1476);
+ setState(1484);
eos();
- setState(1477);
+ setState(1485);
expression(0);
}
break;
}
- setState(1481);
+ setState(1489);
block();
- setState(1487);
+ setState(1495);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,134,_ctx) ) {
case 1:
{
- setState(1482);
+ setState(1490);
match(ELSE);
- setState(1485);
+ setState(1493);
_errHandler.sync(this);
switch (_input.LA(1)) {
case IF:
{
- setState(1483);
+ setState(1491);
ifStmt();
}
break;
case L_CURLY:
{
- setState(1484);
+ setState(1492);
block();
}
break;
@@ -9729,22 +9785,22 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final SwitchStmtContext switchStmt() throws RecognitionException {
SwitchStmtContext _localctx = new SwitchStmtContext(_ctx, getState());
- enterRule(_localctx, 266, RULE_switchStmt);
+ enterRule(_localctx, 268, RULE_switchStmt);
try {
- setState(1491);
+ setState(1499);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,135,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(1489);
+ setState(1497);
exprSwitchStmt();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(1490);
+ setState(1498);
typeSwitchStmt();
}
break;
@@ -9793,24 +9849,24 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ExprSwitchStmtContext exprSwitchStmt() throws RecognitionException {
ExprSwitchStmtContext _localctx = new ExprSwitchStmtContext(_ctx, getState());
- enterRule(_localctx, 268, RULE_exprSwitchStmt);
+ enterRule(_localctx, 270, RULE_exprSwitchStmt);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(1493);
+ setState(1501);
match(SWITCH);
- setState(1504);
+ setState(1512);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,139,_ctx) ) {
case 1:
{
- setState(1495);
+ setState(1503);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FLOAT_LIT) | (1L << TRUE) | (1L << FALSE) | (1L << PRE) | (1L << PRESERVES) | (1L << POST) | (1L << DEC) | (1L << PURE) | (1L << OLD) | (1L << BEFORE) | (1L << FORALL) | (1L << EXISTS) | (1L << ACCESS) | (1L << UNFOLDING) | (1L << LET) | (1L << GHOST) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << LEN) | (1L << NEW) | (1L << MAKE) | (1L << CAP) | (1L << SOME) | (1L << GET) | (1L << DOM) | (1L << ADT) | (1L << MATCH) | (1L << NONE) | (1L << PRED) | (1L << TYPE_OF) | (1L << IS_COMPARABLE))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (WRITEPERM - 65)) | (1L << (NOPERM - 65)) | (1L << (TRUSTED - 65)) | (1L << (FUNC - 65)) | (1L << (INTERFACE - 65)) | (1L << (MAP - 65)) | (1L << (STRUCT - 65)) | (1L << (CHAN - 65)) | (1L << (RANGE - 65)) | (1L << (TYPE - 65)) | (1L << (NIL_LIT - 65)) | (1L << (IDENTIFIER - 65)) | (1L << (L_PAREN - 65)) | (1L << (L_BRACKET - 65)))) != 0) || ((((_la - 131)) & ~0x3f) == 0 && ((1L << (_la - 131)) & ((1L << (EXCLAMATION - 131)) | (1L << (PLUS - 131)) | (1L << (MINUS - 131)) | (1L << (CARET - 131)) | (1L << (STAR - 131)) | (1L << (AMPERSAND - 131)) | (1L << (RECEIVE - 131)) | (1L << (DECIMAL_LIT - 131)) | (1L << (BINARY_LIT - 131)) | (1L << (OCTAL_LIT - 131)) | (1L << (HEX_LIT - 131)) | (1L << (IMAGINARY_LIT - 131)) | (1L << (RUNE_LIT - 131)) | (1L << (RAW_STRING_LIT - 131)) | (1L << (INTERPRETED_STRING_LIT - 131)))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FLOAT_LIT) | (1L << TRUE) | (1L << FALSE) | (1L << PRE) | (1L << PRESERVES) | (1L << POST) | (1L << DEC) | (1L << PURE) | (1L << OLD) | (1L << BEFORE) | (1L << FORALL) | (1L << EXISTS) | (1L << ACCESS) | (1L << UNFOLDING) | (1L << LET) | (1L << GHOST) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << LEN) | (1L << NEW) | (1L << MAKE) | (1L << CAP) | (1L << SOME) | (1L << GET) | (1L << DOM) | (1L << ADT) | (1L << MATCH) | (1L << NONE) | (1L << PRED) | (1L << TYPE_OF) | (1L << IS_COMPARABLE) | (1L << LOW))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (WRITEPERM - 66)) | (1L << (NOPERM - 66)) | (1L << (TRUSTED - 66)) | (1L << (FUNC - 66)) | (1L << (INTERFACE - 66)) | (1L << (MAP - 66)) | (1L << (STRUCT - 66)) | (1L << (CHAN - 66)) | (1L << (RANGE - 66)) | (1L << (TYPE - 66)) | (1L << (NIL_LIT - 66)) | (1L << (IDENTIFIER - 66)) | (1L << (L_PAREN - 66)) | (1L << (L_BRACKET - 66)))) != 0) || ((((_la - 132)) & ~0x3f) == 0 && ((1L << (_la - 132)) & ((1L << (EXCLAMATION - 132)) | (1L << (PLUS - 132)) | (1L << (MINUS - 132)) | (1L << (CARET - 132)) | (1L << (STAR - 132)) | (1L << (AMPERSAND - 132)) | (1L << (RECEIVE - 132)) | (1L << (DECIMAL_LIT - 132)) | (1L << (BINARY_LIT - 132)) | (1L << (OCTAL_LIT - 132)) | (1L << (HEX_LIT - 132)) | (1L << (IMAGINARY_LIT - 132)) | (1L << (RUNE_LIT - 132)) | (1L << (RAW_STRING_LIT - 132)) | (1L << (INTERPRETED_STRING_LIT - 132)))) != 0)) {
{
- setState(1494);
+ setState(1502);
expression(0);
}
}
@@ -9819,24 +9875,24 @@ public final ExprSwitchStmtContext exprSwitchStmt() throws RecognitionException
break;
case 2:
{
- setState(1498);
+ setState(1506);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,137,_ctx) ) {
case 1:
{
- setState(1497);
+ setState(1505);
simpleStmt();
}
break;
}
- setState(1500);
+ setState(1508);
eos();
- setState(1502);
+ setState(1510);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FLOAT_LIT) | (1L << TRUE) | (1L << FALSE) | (1L << PRE) | (1L << PRESERVES) | (1L << POST) | (1L << DEC) | (1L << PURE) | (1L << OLD) | (1L << BEFORE) | (1L << FORALL) | (1L << EXISTS) | (1L << ACCESS) | (1L << UNFOLDING) | (1L << LET) | (1L << GHOST) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << LEN) | (1L << NEW) | (1L << MAKE) | (1L << CAP) | (1L << SOME) | (1L << GET) | (1L << DOM) | (1L << ADT) | (1L << MATCH) | (1L << NONE) | (1L << PRED) | (1L << TYPE_OF) | (1L << IS_COMPARABLE))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (WRITEPERM - 65)) | (1L << (NOPERM - 65)) | (1L << (TRUSTED - 65)) | (1L << (FUNC - 65)) | (1L << (INTERFACE - 65)) | (1L << (MAP - 65)) | (1L << (STRUCT - 65)) | (1L << (CHAN - 65)) | (1L << (RANGE - 65)) | (1L << (TYPE - 65)) | (1L << (NIL_LIT - 65)) | (1L << (IDENTIFIER - 65)) | (1L << (L_PAREN - 65)) | (1L << (L_BRACKET - 65)))) != 0) || ((((_la - 131)) & ~0x3f) == 0 && ((1L << (_la - 131)) & ((1L << (EXCLAMATION - 131)) | (1L << (PLUS - 131)) | (1L << (MINUS - 131)) | (1L << (CARET - 131)) | (1L << (STAR - 131)) | (1L << (AMPERSAND - 131)) | (1L << (RECEIVE - 131)) | (1L << (DECIMAL_LIT - 131)) | (1L << (BINARY_LIT - 131)) | (1L << (OCTAL_LIT - 131)) | (1L << (HEX_LIT - 131)) | (1L << (IMAGINARY_LIT - 131)) | (1L << (RUNE_LIT - 131)) | (1L << (RAW_STRING_LIT - 131)) | (1L << (INTERPRETED_STRING_LIT - 131)))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FLOAT_LIT) | (1L << TRUE) | (1L << FALSE) | (1L << PRE) | (1L << PRESERVES) | (1L << POST) | (1L << DEC) | (1L << PURE) | (1L << OLD) | (1L << BEFORE) | (1L << FORALL) | (1L << EXISTS) | (1L << ACCESS) | (1L << UNFOLDING) | (1L << LET) | (1L << GHOST) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << LEN) | (1L << NEW) | (1L << MAKE) | (1L << CAP) | (1L << SOME) | (1L << GET) | (1L << DOM) | (1L << ADT) | (1L << MATCH) | (1L << NONE) | (1L << PRED) | (1L << TYPE_OF) | (1L << IS_COMPARABLE) | (1L << LOW))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (WRITEPERM - 66)) | (1L << (NOPERM - 66)) | (1L << (TRUSTED - 66)) | (1L << (FUNC - 66)) | (1L << (INTERFACE - 66)) | (1L << (MAP - 66)) | (1L << (STRUCT - 66)) | (1L << (CHAN - 66)) | (1L << (RANGE - 66)) | (1L << (TYPE - 66)) | (1L << (NIL_LIT - 66)) | (1L << (IDENTIFIER - 66)) | (1L << (L_PAREN - 66)) | (1L << (L_BRACKET - 66)))) != 0) || ((((_la - 132)) & ~0x3f) == 0 && ((1L << (_la - 132)) & ((1L << (EXCLAMATION - 132)) | (1L << (PLUS - 132)) | (1L << (MINUS - 132)) | (1L << (CARET - 132)) | (1L << (STAR - 132)) | (1L << (AMPERSAND - 132)) | (1L << (RECEIVE - 132)) | (1L << (DECIMAL_LIT - 132)) | (1L << (BINARY_LIT - 132)) | (1L << (OCTAL_LIT - 132)) | (1L << (HEX_LIT - 132)) | (1L << (IMAGINARY_LIT - 132)) | (1L << (RUNE_LIT - 132)) | (1L << (RAW_STRING_LIT - 132)) | (1L << (INTERPRETED_STRING_LIT - 132)))) != 0)) {
{
- setState(1501);
+ setState(1509);
expression(0);
}
}
@@ -9844,23 +9900,23 @@ public final ExprSwitchStmtContext exprSwitchStmt() throws RecognitionException
}
break;
}
- setState(1506);
+ setState(1514);
match(L_CURLY);
- setState(1510);
+ setState(1518);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==DEFAULT || _la==CASE) {
{
{
- setState(1507);
+ setState(1515);
exprCaseClause();
}
}
- setState(1512);
+ setState(1520);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(1513);
+ setState(1521);
match(R_CURLY);
}
}
@@ -9896,20 +9952,20 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ExprCaseClauseContext exprCaseClause() throws RecognitionException {
ExprCaseClauseContext _localctx = new ExprCaseClauseContext(_ctx, getState());
- enterRule(_localctx, 270, RULE_exprCaseClause);
+ enterRule(_localctx, 272, RULE_exprCaseClause);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1515);
+ setState(1523);
exprSwitchCase();
- setState(1516);
+ setState(1524);
match(COLON);
- setState(1518);
+ setState(1526);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,141,_ctx) ) {
case 1:
{
- setState(1517);
+ setState(1525);
statementList();
}
break;
@@ -9946,24 +10002,24 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ExprSwitchCaseContext exprSwitchCase() throws RecognitionException {
ExprSwitchCaseContext _localctx = new ExprSwitchCaseContext(_ctx, getState());
- enterRule(_localctx, 272, RULE_exprSwitchCase);
+ enterRule(_localctx, 274, RULE_exprSwitchCase);
try {
- setState(1523);
+ setState(1531);
_errHandler.sync(this);
switch (_input.LA(1)) {
case CASE:
enterOuterAlt(_localctx, 1);
{
- setState(1520);
+ setState(1528);
match(CASE);
- setState(1521);
+ setState(1529);
expressionList();
}
break;
case DEFAULT:
enterOuterAlt(_localctx, 2);
{
- setState(1522);
+ setState(1530);
match(DEFAULT);
}
break;
@@ -10014,58 +10070,58 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final TypeSwitchStmtContext typeSwitchStmt() throws RecognitionException {
TypeSwitchStmtContext _localctx = new TypeSwitchStmtContext(_ctx, getState());
- enterRule(_localctx, 274, RULE_typeSwitchStmt);
+ enterRule(_localctx, 276, RULE_typeSwitchStmt);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(1525);
+ setState(1533);
match(SWITCH);
- setState(1534);
+ setState(1542);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,143,_ctx) ) {
case 1:
{
- setState(1526);
+ setState(1534);
typeSwitchGuard();
}
break;
case 2:
{
- setState(1527);
+ setState(1535);
eos();
- setState(1528);
+ setState(1536);
typeSwitchGuard();
}
break;
case 3:
{
- setState(1530);
+ setState(1538);
simpleStmt();
- setState(1531);
+ setState(1539);
eos();
- setState(1532);
+ setState(1540);
typeSwitchGuard();
}
break;
}
- setState(1536);
+ setState(1544);
match(L_CURLY);
- setState(1540);
+ setState(1548);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==DEFAULT || _la==CASE) {
{
{
- setState(1537);
+ setState(1545);
typeCaseClause();
}
}
- setState(1542);
+ setState(1550);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(1543);
+ setState(1551);
match(R_CURLY);
}
}
@@ -10103,31 +10159,31 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final TypeSwitchGuardContext typeSwitchGuard() throws RecognitionException {
TypeSwitchGuardContext _localctx = new TypeSwitchGuardContext(_ctx, getState());
- enterRule(_localctx, 276, RULE_typeSwitchGuard);
+ enterRule(_localctx, 278, RULE_typeSwitchGuard);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1547);
+ setState(1555);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,145,_ctx) ) {
case 1:
{
- setState(1545);
+ setState(1553);
match(IDENTIFIER);
- setState(1546);
+ setState(1554);
match(DECLARE_ASSIGN);
}
break;
}
- setState(1549);
+ setState(1557);
primaryExpr(0);
- setState(1550);
+ setState(1558);
match(DOT);
- setState(1551);
+ setState(1559);
match(L_PAREN);
- setState(1552);
+ setState(1560);
match(TYPE);
- setState(1553);
+ setState(1561);
match(R_PAREN);
}
}
@@ -10163,20 +10219,20 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final TypeCaseClauseContext typeCaseClause() throws RecognitionException {
TypeCaseClauseContext _localctx = new TypeCaseClauseContext(_ctx, getState());
- enterRule(_localctx, 278, RULE_typeCaseClause);
+ enterRule(_localctx, 280, RULE_typeCaseClause);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1555);
+ setState(1563);
typeSwitchCase();
- setState(1556);
+ setState(1564);
match(COLON);
- setState(1558);
+ setState(1566);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,146,_ctx) ) {
case 1:
{
- setState(1557);
+ setState(1565);
statementList();
}
break;
@@ -10213,24 +10269,24 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final TypeSwitchCaseContext typeSwitchCase() throws RecognitionException {
TypeSwitchCaseContext _localctx = new TypeSwitchCaseContext(_ctx, getState());
- enterRule(_localctx, 280, RULE_typeSwitchCase);
+ enterRule(_localctx, 282, RULE_typeSwitchCase);
try {
- setState(1563);
+ setState(1571);
_errHandler.sync(this);
switch (_input.LA(1)) {
case CASE:
enterOuterAlt(_localctx, 1);
{
- setState(1560);
+ setState(1568);
match(CASE);
- setState(1561);
+ setState(1569);
typeList();
}
break;
case DEFAULT:
enterOuterAlt(_localctx, 2);
{
- setState(1562);
+ setState(1570);
match(DEFAULT);
}
break;
@@ -10277,12 +10333,12 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final TypeListContext typeList() throws RecognitionException {
TypeListContext _localctx = new TypeListContext(_ctx, getState());
- enterRule(_localctx, 282, RULE_typeList);
+ enterRule(_localctx, 284, RULE_typeList);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(1567);
+ setState(1575);
_errHandler.sync(this);
switch (_input.LA(1)) {
case GHOST:
@@ -10305,28 +10361,28 @@ public final TypeListContext typeList() throws RecognitionException {
case STAR:
case RECEIVE:
{
- setState(1565);
+ setState(1573);
type_();
}
break;
case NIL_LIT:
{
- setState(1566);
+ setState(1574);
match(NIL_LIT);
}
break;
default:
throw new NoViableAltException(this);
}
- setState(1576);
+ setState(1584);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==COMMA) {
{
{
- setState(1569);
+ setState(1577);
match(COMMA);
- setState(1572);
+ setState(1580);
_errHandler.sync(this);
switch (_input.LA(1)) {
case GHOST:
@@ -10349,13 +10405,13 @@ public final TypeListContext typeList() throws RecognitionException {
case STAR:
case RECEIVE:
{
- setState(1570);
+ setState(1578);
type_();
}
break;
case NIL_LIT:
{
- setState(1571);
+ setState(1579);
match(NIL_LIT);
}
break;
@@ -10364,7 +10420,7 @@ public final TypeListContext typeList() throws RecognitionException {
}
}
}
- setState(1578);
+ setState(1586);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -10404,30 +10460,30 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final SelectStmtContext selectStmt() throws RecognitionException {
SelectStmtContext _localctx = new SelectStmtContext(_ctx, getState());
- enterRule(_localctx, 284, RULE_selectStmt);
+ enterRule(_localctx, 286, RULE_selectStmt);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(1579);
+ setState(1587);
match(SELECT);
- setState(1580);
+ setState(1588);
match(L_CURLY);
- setState(1584);
+ setState(1592);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==DEFAULT || _la==CASE) {
{
{
- setState(1581);
+ setState(1589);
commClause();
}
}
- setState(1586);
+ setState(1594);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(1587);
+ setState(1595);
match(R_CURLY);
}
}
@@ -10463,20 +10519,20 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final CommClauseContext commClause() throws RecognitionException {
CommClauseContext _localctx = new CommClauseContext(_ctx, getState());
- enterRule(_localctx, 286, RULE_commClause);
+ enterRule(_localctx, 288, RULE_commClause);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1589);
+ setState(1597);
commCase();
- setState(1590);
+ setState(1598);
match(COLON);
- setState(1592);
+ setState(1600);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,152,_ctx) ) {
case 1:
{
- setState(1591);
+ setState(1599);
statementList();
}
break;
@@ -10516,28 +10572,28 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final CommCaseContext commCase() throws RecognitionException {
CommCaseContext _localctx = new CommCaseContext(_ctx, getState());
- enterRule(_localctx, 288, RULE_commCase);
+ enterRule(_localctx, 290, RULE_commCase);
try {
- setState(1600);
+ setState(1608);
_errHandler.sync(this);
switch (_input.LA(1)) {
case CASE:
enterOuterAlt(_localctx, 1);
{
- setState(1594);
+ setState(1602);
match(CASE);
- setState(1597);
+ setState(1605);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,153,_ctx) ) {
case 1:
{
- setState(1595);
+ setState(1603);
sendStmt();
}
break;
case 2:
{
- setState(1596);
+ setState(1604);
recvStmt();
}
break;
@@ -10547,7 +10603,7 @@ public final CommCaseContext commCase() throws RecognitionException {
case DEFAULT:
enterOuterAlt(_localctx, 2);
{
- setState(1599);
+ setState(1607);
match(DEFAULT);
}
break;
@@ -10592,31 +10648,31 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final RecvStmtContext recvStmt() throws RecognitionException {
RecvStmtContext _localctx = new RecvStmtContext(_ctx, getState());
- enterRule(_localctx, 290, RULE_recvStmt);
+ enterRule(_localctx, 292, RULE_recvStmt);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1608);
+ setState(1616);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,155,_ctx) ) {
case 1:
{
- setState(1602);
+ setState(1610);
expressionList();
- setState(1603);
+ setState(1611);
match(ASSIGN);
}
break;
case 2:
{
- setState(1605);
+ setState(1613);
identifierList();
- setState(1606);
+ setState(1614);
match(DECLARE_ASSIGN);
}
break;
}
- setState(1610);
+ setState(1618);
((RecvStmtContext)_localctx).recvExpr = expression(0);
}
}
@@ -10658,35 +10714,35 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ForStmtContext forStmt() throws RecognitionException {
ForStmtContext _localctx = new ForStmtContext(_ctx, getState());
- enterRule(_localctx, 292, RULE_forStmt);
+ enterRule(_localctx, 294, RULE_forStmt);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1612);
+ setState(1620);
match(FOR);
- setState(1616);
+ setState(1624);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,156,_ctx) ) {
case 1:
{
- setState(1613);
+ setState(1621);
expression(0);
}
break;
case 2:
{
- setState(1614);
+ setState(1622);
forClause();
}
break;
case 3:
{
- setState(1615);
+ setState(1623);
rangeClause();
}
break;
}
- setState(1618);
+ setState(1626);
block();
}
}
@@ -10732,41 +10788,41 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ForClauseContext forClause() throws RecognitionException {
ForClauseContext _localctx = new ForClauseContext(_ctx, getState());
- enterRule(_localctx, 294, RULE_forClause);
+ enterRule(_localctx, 296, RULE_forClause);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(1621);
+ setState(1629);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,157,_ctx) ) {
case 1:
{
- setState(1620);
+ setState(1628);
((ForClauseContext)_localctx).initStmt = simpleStmt();
}
break;
}
- setState(1623);
+ setState(1631);
eos();
- setState(1625);
+ setState(1633);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,158,_ctx) ) {
case 1:
{
- setState(1624);
+ setState(1632);
expression(0);
}
break;
}
- setState(1627);
+ setState(1635);
eos();
- setState(1629);
+ setState(1637);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FLOAT_LIT) | (1L << TRUE) | (1L << FALSE) | (1L << PRE) | (1L << PRESERVES) | (1L << POST) | (1L << DEC) | (1L << PURE) | (1L << OLD) | (1L << BEFORE) | (1L << FORALL) | (1L << EXISTS) | (1L << ACCESS) | (1L << UNFOLDING) | (1L << LET) | (1L << GHOST) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << LEN) | (1L << NEW) | (1L << MAKE) | (1L << CAP) | (1L << SOME) | (1L << GET) | (1L << DOM) | (1L << ADT) | (1L << MATCH) | (1L << NONE) | (1L << PRED) | (1L << TYPE_OF) | (1L << IS_COMPARABLE))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (WRITEPERM - 65)) | (1L << (NOPERM - 65)) | (1L << (TRUSTED - 65)) | (1L << (FUNC - 65)) | (1L << (INTERFACE - 65)) | (1L << (MAP - 65)) | (1L << (STRUCT - 65)) | (1L << (CHAN - 65)) | (1L << (RANGE - 65)) | (1L << (TYPE - 65)) | (1L << (NIL_LIT - 65)) | (1L << (IDENTIFIER - 65)) | (1L << (L_PAREN - 65)) | (1L << (L_BRACKET - 65)))) != 0) || ((((_la - 131)) & ~0x3f) == 0 && ((1L << (_la - 131)) & ((1L << (EXCLAMATION - 131)) | (1L << (PLUS - 131)) | (1L << (MINUS - 131)) | (1L << (CARET - 131)) | (1L << (STAR - 131)) | (1L << (AMPERSAND - 131)) | (1L << (RECEIVE - 131)) | (1L << (DECIMAL_LIT - 131)) | (1L << (BINARY_LIT - 131)) | (1L << (OCTAL_LIT - 131)) | (1L << (HEX_LIT - 131)) | (1L << (IMAGINARY_LIT - 131)) | (1L << (RUNE_LIT - 131)) | (1L << (RAW_STRING_LIT - 131)) | (1L << (INTERPRETED_STRING_LIT - 131)))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FLOAT_LIT) | (1L << TRUE) | (1L << FALSE) | (1L << PRE) | (1L << PRESERVES) | (1L << POST) | (1L << DEC) | (1L << PURE) | (1L << OLD) | (1L << BEFORE) | (1L << FORALL) | (1L << EXISTS) | (1L << ACCESS) | (1L << UNFOLDING) | (1L << LET) | (1L << GHOST) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << LEN) | (1L << NEW) | (1L << MAKE) | (1L << CAP) | (1L << SOME) | (1L << GET) | (1L << DOM) | (1L << ADT) | (1L << MATCH) | (1L << NONE) | (1L << PRED) | (1L << TYPE_OF) | (1L << IS_COMPARABLE) | (1L << LOW))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (WRITEPERM - 66)) | (1L << (NOPERM - 66)) | (1L << (TRUSTED - 66)) | (1L << (FUNC - 66)) | (1L << (INTERFACE - 66)) | (1L << (MAP - 66)) | (1L << (STRUCT - 66)) | (1L << (CHAN - 66)) | (1L << (RANGE - 66)) | (1L << (TYPE - 66)) | (1L << (NIL_LIT - 66)) | (1L << (IDENTIFIER - 66)) | (1L << (L_PAREN - 66)) | (1L << (L_BRACKET - 66)))) != 0) || ((((_la - 132)) & ~0x3f) == 0 && ((1L << (_la - 132)) & ((1L << (EXCLAMATION - 132)) | (1L << (PLUS - 132)) | (1L << (MINUS - 132)) | (1L << (CARET - 132)) | (1L << (STAR - 132)) | (1L << (AMPERSAND - 132)) | (1L << (RECEIVE - 132)) | (1L << (DECIMAL_LIT - 132)) | (1L << (BINARY_LIT - 132)) | (1L << (OCTAL_LIT - 132)) | (1L << (HEX_LIT - 132)) | (1L << (IMAGINARY_LIT - 132)) | (1L << (RUNE_LIT - 132)) | (1L << (RAW_STRING_LIT - 132)) | (1L << (INTERPRETED_STRING_LIT - 132)))) != 0)) {
{
- setState(1628);
+ setState(1636);
((ForClauseContext)_localctx).postStmt = simpleStmt();
}
}
@@ -10802,13 +10858,13 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final GoStmtContext goStmt() throws RecognitionException {
GoStmtContext _localctx = new GoStmtContext(_ctx, getState());
- enterRule(_localctx, 296, RULE_goStmt);
+ enterRule(_localctx, 298, RULE_goStmt);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1631);
+ setState(1639);
match(GO);
- setState(1632);
+ setState(1640);
expression(0);
}
}
@@ -10841,22 +10897,22 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final TypeNameContext typeName() throws RecognitionException {
TypeNameContext _localctx = new TypeNameContext(_ctx, getState());
- enterRule(_localctx, 298, RULE_typeName);
+ enterRule(_localctx, 300, RULE_typeName);
try {
- setState(1636);
+ setState(1644);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,160,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(1634);
+ setState(1642);
qualifiedIdent();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(1635);
+ setState(1643);
match(IDENTIFIER);
}
break;
@@ -10895,17 +10951,17 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ArrayTypeContext arrayType() throws RecognitionException {
ArrayTypeContext _localctx = new ArrayTypeContext(_ctx, getState());
- enterRule(_localctx, 300, RULE_arrayType);
+ enterRule(_localctx, 302, RULE_arrayType);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1638);
+ setState(1646);
match(L_BRACKET);
- setState(1639);
+ setState(1647);
arrayLength();
- setState(1640);
+ setState(1648);
match(R_BRACKET);
- setState(1641);
+ setState(1649);
elementType();
}
}
@@ -10937,11 +10993,11 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ArrayLengthContext arrayLength() throws RecognitionException {
ArrayLengthContext _localctx = new ArrayLengthContext(_ctx, getState());
- enterRule(_localctx, 302, RULE_arrayLength);
+ enterRule(_localctx, 304, RULE_arrayLength);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1643);
+ setState(1651);
expression(0);
}
}
@@ -10973,11 +11029,11 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ElementTypeContext elementType() throws RecognitionException {
ElementTypeContext _localctx = new ElementTypeContext(_ctx, getState());
- enterRule(_localctx, 304, RULE_elementType);
+ enterRule(_localctx, 306, RULE_elementType);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1645);
+ setState(1653);
type_();
}
}
@@ -11010,13 +11066,13 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final PointerTypeContext pointerType() throws RecognitionException {
PointerTypeContext _localctx = new PointerTypeContext(_ctx, getState());
- enterRule(_localctx, 306, RULE_pointerType);
+ enterRule(_localctx, 308, RULE_pointerType);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1647);
+ setState(1655);
match(STAR);
- setState(1648);
+ setState(1656);
type_();
}
}
@@ -11050,15 +11106,15 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final SliceTypeContext sliceType() throws RecognitionException {
SliceTypeContext _localctx = new SliceTypeContext(_ctx, getState());
- enterRule(_localctx, 308, RULE_sliceType);
+ enterRule(_localctx, 310, RULE_sliceType);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1650);
+ setState(1658);
match(L_BRACKET);
- setState(1651);
+ setState(1659);
match(R_BRACKET);
- setState(1652);
+ setState(1660);
elementType();
}
}
@@ -11096,19 +11152,19 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final MapTypeContext mapType() throws RecognitionException {
MapTypeContext _localctx = new MapTypeContext(_ctx, getState());
- enterRule(_localctx, 310, RULE_mapType);
+ enterRule(_localctx, 312, RULE_mapType);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1654);
+ setState(1662);
match(MAP);
- setState(1655);
+ setState(1663);
match(L_BRACKET);
- setState(1656);
+ setState(1664);
type_();
- setState(1657);
+ setState(1665);
match(R_BRACKET);
- setState(1658);
+ setState(1666);
elementType();
}
}
@@ -11142,37 +11198,37 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ChannelTypeContext channelType() throws RecognitionException {
ChannelTypeContext _localctx = new ChannelTypeContext(_ctx, getState());
- enterRule(_localctx, 312, RULE_channelType);
+ enterRule(_localctx, 314, RULE_channelType);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1665);
+ setState(1673);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,161,_ctx) ) {
case 1:
{
- setState(1660);
+ setState(1668);
match(CHAN);
}
break;
case 2:
{
- setState(1661);
+ setState(1669);
match(CHAN);
- setState(1662);
+ setState(1670);
match(RECEIVE);
}
break;
case 3:
{
- setState(1663);
+ setState(1671);
match(RECEIVE);
- setState(1664);
+ setState(1672);
match(CHAN);
}
break;
}
- setState(1667);
+ setState(1675);
elementType();
}
}
@@ -11205,13 +11261,13 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final FunctionTypeContext functionType() throws RecognitionException {
FunctionTypeContext _localctx = new FunctionTypeContext(_ctx, getState());
- enterRule(_localctx, 314, RULE_functionType);
+ enterRule(_localctx, 316, RULE_functionType);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1669);
+ setState(1677);
match(FUNC);
- setState(1670);
+ setState(1678);
signature();
}
}
@@ -11246,24 +11302,24 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final SignatureContext signature() throws RecognitionException {
SignatureContext _localctx = new SignatureContext(_ctx, getState());
- enterRule(_localctx, 316, RULE_signature);
+ enterRule(_localctx, 318, RULE_signature);
try {
- setState(1676);
+ setState(1684);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,162,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(1672);
+ setState(1680);
parameters();
- setState(1673);
+ setState(1681);
result();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(1675);
+ setState(1683);
parameters();
}
break;
@@ -11300,22 +11356,22 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ResultContext result() throws RecognitionException {
ResultContext _localctx = new ResultContext(_ctx, getState());
- enterRule(_localctx, 318, RULE_result);
+ enterRule(_localctx, 320, RULE_result);
try {
- setState(1680);
+ setState(1688);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,163,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(1678);
+ setState(1686);
parameters();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(1679);
+ setState(1687);
type_();
}
break;
@@ -11358,45 +11414,45 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ParametersContext parameters() throws RecognitionException {
ParametersContext _localctx = new ParametersContext(_ctx, getState());
- enterRule(_localctx, 320, RULE_parameters);
+ enterRule(_localctx, 322, RULE_parameters);
int _la;
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(1682);
+ setState(1690);
match(L_PAREN);
- setState(1694);
+ setState(1702);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << GHOST) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << DOM) | (1L << ADT) | (1L << PRED))) != 0) || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (FUNC - 77)) | (1L << (INTERFACE - 77)) | (1L << (MAP - 77)) | (1L << (STRUCT - 77)) | (1L << (CHAN - 77)) | (1L << (IDENTIFIER - 77)) | (1L << (L_PAREN - 77)) | (1L << (L_BRACKET - 77)) | (1L << (ELLIPSIS - 77)) | (1L << (STAR - 77)) | (1L << (RECEIVE - 77)))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << GHOST) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << DOM) | (1L << ADT) | (1L << PRED))) != 0) || ((((_la - 78)) & ~0x3f) == 0 && ((1L << (_la - 78)) & ((1L << (FUNC - 78)) | (1L << (INTERFACE - 78)) | (1L << (MAP - 78)) | (1L << (STRUCT - 78)) | (1L << (CHAN - 78)) | (1L << (IDENTIFIER - 78)) | (1L << (L_PAREN - 78)) | (1L << (L_BRACKET - 78)) | (1L << (ELLIPSIS - 78)) | (1L << (STAR - 78)) | (1L << (RECEIVE - 78)))) != 0)) {
{
- setState(1683);
+ setState(1691);
parameterDecl();
- setState(1688);
+ setState(1696);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,164,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(1684);
+ setState(1692);
match(COMMA);
- setState(1685);
+ setState(1693);
parameterDecl();
}
}
}
- setState(1690);
+ setState(1698);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,164,_ctx);
}
- setState(1692);
+ setState(1700);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==COMMA) {
{
- setState(1691);
+ setState(1699);
match(COMMA);
}
}
@@ -11404,7 +11460,7 @@ public final ParametersContext parameters() throws RecognitionException {
}
}
- setState(1696);
+ setState(1704);
match(R_PAREN);
}
}
@@ -11442,28 +11498,28 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ConversionContext conversion() throws RecognitionException {
ConversionContext _localctx = new ConversionContext(_ctx, getState());
- enterRule(_localctx, 322, RULE_conversion);
+ enterRule(_localctx, 324, RULE_conversion);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(1698);
+ setState(1706);
nonNamedType();
- setState(1699);
+ setState(1707);
match(L_PAREN);
- setState(1700);
+ setState(1708);
expression(0);
- setState(1702);
+ setState(1710);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==COMMA) {
{
- setState(1701);
+ setState(1709);
match(COMMA);
}
}
- setState(1704);
+ setState(1712);
match(R_PAREN);
}
}
@@ -11500,9 +11556,9 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final NonNamedTypeContext nonNamedType() throws RecognitionException {
NonNamedTypeContext _localctx = new NonNamedTypeContext(_ctx, getState());
- enterRule(_localctx, 324, RULE_nonNamedType);
+ enterRule(_localctx, 326, RULE_nonNamedType);
try {
- setState(1711);
+ setState(1719);
_errHandler.sync(this);
switch (_input.LA(1)) {
case PRED:
@@ -11516,18 +11572,18 @@ public final NonNamedTypeContext nonNamedType() throws RecognitionException {
case RECEIVE:
enterOuterAlt(_localctx, 1);
{
- setState(1706);
+ setState(1714);
typeLit();
}
break;
case L_PAREN:
enterOuterAlt(_localctx, 2);
{
- setState(1707);
+ setState(1715);
match(L_PAREN);
- setState(1708);
+ setState(1716);
nonNamedType();
- setState(1709);
+ setState(1717);
match(R_PAREN);
}
break;
@@ -11571,33 +11627,33 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final OperandContext operand() throws RecognitionException {
OperandContext _localctx = new OperandContext(_ctx, getState());
- enterRule(_localctx, 326, RULE_operand);
+ enterRule(_localctx, 328, RULE_operand);
try {
- setState(1719);
+ setState(1727);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,169,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(1713);
+ setState(1721);
literal();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(1714);
+ setState(1722);
operandName();
}
break;
case 3:
enterOuterAlt(_localctx, 3);
{
- setState(1715);
+ setState(1723);
match(L_PAREN);
- setState(1716);
+ setState(1724);
expression(0);
- setState(1717);
+ setState(1725);
match(R_PAREN);
}
break;
@@ -11637,9 +11693,9 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final LiteralContext literal() throws RecognitionException {
LiteralContext _localctx = new LiteralContext(_ctx, getState());
- enterRule(_localctx, 328, RULE_literal);
+ enterRule(_localctx, 330, RULE_literal);
try {
- setState(1724);
+ setState(1732);
_errHandler.sync(this);
switch (_input.LA(1)) {
case FLOAT_LIT:
@@ -11656,7 +11712,7 @@ public final LiteralContext literal() throws RecognitionException {
case INTERPRETED_STRING_LIT:
enterOuterAlt(_localctx, 1);
{
- setState(1721);
+ setState(1729);
basicLit();
}
break;
@@ -11674,7 +11730,7 @@ public final LiteralContext literal() throws RecognitionException {
case L_BRACKET:
enterOuterAlt(_localctx, 2);
{
- setState(1722);
+ setState(1730);
compositeLit();
}
break;
@@ -11687,7 +11743,7 @@ public final LiteralContext literal() throws RecognitionException {
case FUNC:
enterOuterAlt(_localctx, 3);
{
- setState(1723);
+ setState(1731);
functionLit();
}
break;
@@ -11726,14 +11782,14 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final IntegerContext integer() throws RecognitionException {
IntegerContext _localctx = new IntegerContext(_ctx, getState());
- enterRule(_localctx, 330, RULE_integer);
+ enterRule(_localctx, 332, RULE_integer);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(1726);
+ setState(1734);
_la = _input.LA(1);
- if ( !(((((_la - 138)) & ~0x3f) == 0 && ((1L << (_la - 138)) & ((1L << (DECIMAL_LIT - 138)) | (1L << (BINARY_LIT - 138)) | (1L << (OCTAL_LIT - 138)) | (1L << (HEX_LIT - 138)) | (1L << (IMAGINARY_LIT - 138)) | (1L << (RUNE_LIT - 138)))) != 0)) ) {
+ if ( !(((((_la - 139)) & ~0x3f) == 0 && ((1L << (_la - 139)) & ((1L << (DECIMAL_LIT - 139)) | (1L << (BINARY_LIT - 139)) | (1L << (OCTAL_LIT - 139)) | (1L << (HEX_LIT - 139)) | (1L << (IMAGINARY_LIT - 139)) | (1L << (RUNE_LIT - 139)))) != 0)) ) {
_errHandler.recoverInline(this);
}
else {
@@ -11769,11 +11825,11 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final OperandNameContext operandName() throws RecognitionException {
OperandNameContext _localctx = new OperandNameContext(_ctx, getState());
- enterRule(_localctx, 332, RULE_operandName);
+ enterRule(_localctx, 334, RULE_operandName);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1728);
+ setState(1736);
match(IDENTIFIER);
}
}
@@ -11807,15 +11863,15 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final QualifiedIdentContext qualifiedIdent() throws RecognitionException {
QualifiedIdentContext _localctx = new QualifiedIdentContext(_ctx, getState());
- enterRule(_localctx, 334, RULE_qualifiedIdent);
+ enterRule(_localctx, 336, RULE_qualifiedIdent);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1730);
+ setState(1738);
match(IDENTIFIER);
- setState(1731);
+ setState(1739);
match(DOT);
- setState(1732);
+ setState(1740);
match(IDENTIFIER);
}
}
@@ -11850,13 +11906,13 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final CompositeLitContext compositeLit() throws RecognitionException {
CompositeLitContext _localctx = new CompositeLitContext(_ctx, getState());
- enterRule(_localctx, 336, RULE_compositeLit);
+ enterRule(_localctx, 338, RULE_compositeLit);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1734);
+ setState(1742);
literalType();
- setState(1735);
+ setState(1743);
literalValue();
}
}
@@ -11891,26 +11947,26 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final LiteralValueContext literalValue() throws RecognitionException {
LiteralValueContext _localctx = new LiteralValueContext(_ctx, getState());
- enterRule(_localctx, 338, RULE_literalValue);
+ enterRule(_localctx, 340, RULE_literalValue);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(1737);
+ setState(1745);
match(L_CURLY);
- setState(1742);
+ setState(1750);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FLOAT_LIT) | (1L << TRUE) | (1L << FALSE) | (1L << PRE) | (1L << PRESERVES) | (1L << POST) | (1L << DEC) | (1L << PURE) | (1L << OLD) | (1L << BEFORE) | (1L << FORALL) | (1L << EXISTS) | (1L << ACCESS) | (1L << UNFOLDING) | (1L << LET) | (1L << GHOST) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << LEN) | (1L << NEW) | (1L << MAKE) | (1L << CAP) | (1L << SOME) | (1L << GET) | (1L << DOM) | (1L << ADT) | (1L << MATCH) | (1L << NONE) | (1L << PRED) | (1L << TYPE_OF) | (1L << IS_COMPARABLE))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (WRITEPERM - 65)) | (1L << (NOPERM - 65)) | (1L << (TRUSTED - 65)) | (1L << (FUNC - 65)) | (1L << (INTERFACE - 65)) | (1L << (MAP - 65)) | (1L << (STRUCT - 65)) | (1L << (CHAN - 65)) | (1L << (RANGE - 65)) | (1L << (TYPE - 65)) | (1L << (NIL_LIT - 65)) | (1L << (IDENTIFIER - 65)) | (1L << (L_PAREN - 65)) | (1L << (L_CURLY - 65)) | (1L << (L_BRACKET - 65)))) != 0) || ((((_la - 131)) & ~0x3f) == 0 && ((1L << (_la - 131)) & ((1L << (EXCLAMATION - 131)) | (1L << (PLUS - 131)) | (1L << (MINUS - 131)) | (1L << (CARET - 131)) | (1L << (STAR - 131)) | (1L << (AMPERSAND - 131)) | (1L << (RECEIVE - 131)) | (1L << (DECIMAL_LIT - 131)) | (1L << (BINARY_LIT - 131)) | (1L << (OCTAL_LIT - 131)) | (1L << (HEX_LIT - 131)) | (1L << (IMAGINARY_LIT - 131)) | (1L << (RUNE_LIT - 131)) | (1L << (RAW_STRING_LIT - 131)) | (1L << (INTERPRETED_STRING_LIT - 131)))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FLOAT_LIT) | (1L << TRUE) | (1L << FALSE) | (1L << PRE) | (1L << PRESERVES) | (1L << POST) | (1L << DEC) | (1L << PURE) | (1L << OLD) | (1L << BEFORE) | (1L << FORALL) | (1L << EXISTS) | (1L << ACCESS) | (1L << UNFOLDING) | (1L << LET) | (1L << GHOST) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << LEN) | (1L << NEW) | (1L << MAKE) | (1L << CAP) | (1L << SOME) | (1L << GET) | (1L << DOM) | (1L << ADT) | (1L << MATCH) | (1L << NONE) | (1L << PRED) | (1L << TYPE_OF) | (1L << IS_COMPARABLE) | (1L << LOW))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (WRITEPERM - 66)) | (1L << (NOPERM - 66)) | (1L << (TRUSTED - 66)) | (1L << (FUNC - 66)) | (1L << (INTERFACE - 66)) | (1L << (MAP - 66)) | (1L << (STRUCT - 66)) | (1L << (CHAN - 66)) | (1L << (RANGE - 66)) | (1L << (TYPE - 66)) | (1L << (NIL_LIT - 66)) | (1L << (IDENTIFIER - 66)) | (1L << (L_PAREN - 66)) | (1L << (L_CURLY - 66)) | (1L << (L_BRACKET - 66)))) != 0) || ((((_la - 132)) & ~0x3f) == 0 && ((1L << (_la - 132)) & ((1L << (EXCLAMATION - 132)) | (1L << (PLUS - 132)) | (1L << (MINUS - 132)) | (1L << (CARET - 132)) | (1L << (STAR - 132)) | (1L << (AMPERSAND - 132)) | (1L << (RECEIVE - 132)) | (1L << (DECIMAL_LIT - 132)) | (1L << (BINARY_LIT - 132)) | (1L << (OCTAL_LIT - 132)) | (1L << (HEX_LIT - 132)) | (1L << (IMAGINARY_LIT - 132)) | (1L << (RUNE_LIT - 132)) | (1L << (RAW_STRING_LIT - 132)) | (1L << (INTERPRETED_STRING_LIT - 132)))) != 0)) {
{
- setState(1738);
+ setState(1746);
elementList();
- setState(1740);
+ setState(1748);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==COMMA) {
{
- setState(1739);
+ setState(1747);
match(COMMA);
}
}
@@ -11918,7 +11974,7 @@ public final LiteralValueContext literalValue() throws RecognitionException {
}
}
- setState(1744);
+ setState(1752);
match(R_CURLY);
}
}
@@ -11957,28 +12013,28 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ElementListContext elementList() throws RecognitionException {
ElementListContext _localctx = new ElementListContext(_ctx, getState());
- enterRule(_localctx, 340, RULE_elementList);
+ enterRule(_localctx, 342, RULE_elementList);
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(1746);
+ setState(1754);
keyedElement();
- setState(1751);
+ setState(1759);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,173,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(1747);
+ setState(1755);
match(COMMA);
- setState(1748);
+ setState(1756);
keyedElement();
}
}
}
- setState(1753);
+ setState(1761);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,173,_ctx);
}
@@ -12016,23 +12072,23 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final KeyedElementContext keyedElement() throws RecognitionException {
KeyedElementContext _localctx = new KeyedElementContext(_ctx, getState());
- enterRule(_localctx, 342, RULE_keyedElement);
+ enterRule(_localctx, 344, RULE_keyedElement);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1757);
+ setState(1765);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,174,_ctx) ) {
case 1:
{
- setState(1754);
+ setState(1762);
key();
- setState(1755);
+ setState(1763);
match(COLON);
}
break;
}
- setState(1759);
+ setState(1767);
element();
}
}
@@ -12067,9 +12123,9 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final KeyContext key() throws RecognitionException {
KeyContext _localctx = new KeyContext(_ctx, getState());
- enterRule(_localctx, 344, RULE_key);
+ enterRule(_localctx, 346, RULE_key);
try {
- setState(1763);
+ setState(1771);
_errHandler.sync(this);
switch (_input.LA(1)) {
case FLOAT_LIT:
@@ -12106,6 +12162,7 @@ public final KeyContext key() throws RecognitionException {
case PRED:
case TYPE_OF:
case IS_COMPARABLE:
+ case LOW:
case WRITEPERM:
case NOPERM:
case TRUSTED:
@@ -12137,14 +12194,14 @@ public final KeyContext key() throws RecognitionException {
case INTERPRETED_STRING_LIT:
enterOuterAlt(_localctx, 1);
{
- setState(1761);
+ setState(1769);
expression(0);
}
break;
case L_CURLY:
enterOuterAlt(_localctx, 2);
{
- setState(1762);
+ setState(1770);
literalValue();
}
break;
@@ -12183,9 +12240,9 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ElementContext element() throws RecognitionException {
ElementContext _localctx = new ElementContext(_ctx, getState());
- enterRule(_localctx, 346, RULE_element);
+ enterRule(_localctx, 348, RULE_element);
try {
- setState(1767);
+ setState(1775);
_errHandler.sync(this);
switch (_input.LA(1)) {
case FLOAT_LIT:
@@ -12222,6 +12279,7 @@ public final ElementContext element() throws RecognitionException {
case PRED:
case TYPE_OF:
case IS_COMPARABLE:
+ case LOW:
case WRITEPERM:
case NOPERM:
case TRUSTED:
@@ -12253,14 +12311,14 @@ public final ElementContext element() throws RecognitionException {
case INTERPRETED_STRING_LIT:
enterOuterAlt(_localctx, 1);
{
- setState(1765);
+ setState(1773);
expression(0);
}
break;
case L_CURLY:
enterOuterAlt(_localctx, 2);
{
- setState(1766);
+ setState(1774);
literalValue();
}
break;
@@ -12308,32 +12366,32 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final StructTypeContext structType() throws RecognitionException {
StructTypeContext _localctx = new StructTypeContext(_ctx, getState());
- enterRule(_localctx, 348, RULE_structType);
+ enterRule(_localctx, 350, RULE_structType);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(1769);
+ setState(1777);
match(STRUCT);
- setState(1770);
+ setState(1778);
match(L_CURLY);
- setState(1776);
+ setState(1784);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==IDENTIFIER || _la==STAR) {
{
{
- setState(1771);
+ setState(1779);
fieldDecl();
- setState(1772);
+ setState(1780);
eos();
}
}
- setState(1778);
+ setState(1786);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(1779);
+ setState(1787);
match(R_CURLY);
}
}
@@ -12375,34 +12433,34 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final FieldDeclContext fieldDecl() throws RecognitionException {
FieldDeclContext _localctx = new FieldDeclContext(_ctx, getState());
- enterRule(_localctx, 350, RULE_fieldDecl);
+ enterRule(_localctx, 352, RULE_fieldDecl);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1785);
+ setState(1793);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,178,_ctx) ) {
case 1:
{
- setState(1781);
+ setState(1789);
identifierList();
- setState(1782);
+ setState(1790);
type_();
}
break;
case 2:
{
- setState(1784);
+ setState(1792);
embeddedField();
}
break;
}
- setState(1788);
+ setState(1796);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,179,_ctx) ) {
case 1:
{
- setState(1787);
+ setState(1795);
((FieldDeclContext)_localctx).tag = string_();
}
break;
@@ -12436,12 +12494,12 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final String_Context string_() throws RecognitionException {
String_Context _localctx = new String_Context(_ctx, getState());
- enterRule(_localctx, 352, RULE_string_);
+ enterRule(_localctx, 354, RULE_string_);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(1790);
+ setState(1798);
_la = _input.LA(1);
if ( !(_la==RAW_STRING_LIT || _la==INTERPRETED_STRING_LIT) ) {
_errHandler.recoverInline(this);
@@ -12482,22 +12540,22 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final EmbeddedFieldContext embeddedField() throws RecognitionException {
EmbeddedFieldContext _localctx = new EmbeddedFieldContext(_ctx, getState());
- enterRule(_localctx, 354, RULE_embeddedField);
+ enterRule(_localctx, 356, RULE_embeddedField);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(1793);
+ setState(1801);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==STAR) {
{
- setState(1792);
+ setState(1800);
match(STAR);
}
}
- setState(1795);
+ setState(1803);
typeName();
}
}
@@ -12531,15 +12589,15 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final IndexContext index() throws RecognitionException {
IndexContext _localctx = new IndexContext(_ctx, getState());
- enterRule(_localctx, 356, RULE_index);
+ enterRule(_localctx, 358, RULE_index);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1797);
+ setState(1805);
match(L_BRACKET);
- setState(1798);
+ setState(1806);
expression(0);
- setState(1799);
+ setState(1807);
match(R_BRACKET);
}
}
@@ -12574,17 +12632,17 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final TypeAssertionContext typeAssertion() throws RecognitionException {
TypeAssertionContext _localctx = new TypeAssertionContext(_ctx, getState());
- enterRule(_localctx, 358, RULE_typeAssertion);
+ enterRule(_localctx, 360, RULE_typeAssertion);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1801);
+ setState(1809);
match(DOT);
- setState(1802);
+ setState(1810);
match(L_PAREN);
- setState(1803);
+ setState(1811);
type_();
- setState(1804);
+ setState(1812);
match(R_PAREN);
}
}
@@ -12626,39 +12684,39 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ArgumentsContext arguments() throws RecognitionException {
ArgumentsContext _localctx = new ArgumentsContext(_ctx, getState());
- enterRule(_localctx, 360, RULE_arguments);
+ enterRule(_localctx, 362, RULE_arguments);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(1806);
+ setState(1814);
match(L_PAREN);
- setState(1821);
+ setState(1829);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FLOAT_LIT) | (1L << TRUE) | (1L << FALSE) | (1L << PRE) | (1L << PRESERVES) | (1L << POST) | (1L << DEC) | (1L << PURE) | (1L << OLD) | (1L << BEFORE) | (1L << FORALL) | (1L << EXISTS) | (1L << ACCESS) | (1L << UNFOLDING) | (1L << LET) | (1L << GHOST) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << LEN) | (1L << NEW) | (1L << MAKE) | (1L << CAP) | (1L << SOME) | (1L << GET) | (1L << DOM) | (1L << ADT) | (1L << MATCH) | (1L << NONE) | (1L << PRED) | (1L << TYPE_OF) | (1L << IS_COMPARABLE))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (WRITEPERM - 65)) | (1L << (NOPERM - 65)) | (1L << (TRUSTED - 65)) | (1L << (FUNC - 65)) | (1L << (INTERFACE - 65)) | (1L << (MAP - 65)) | (1L << (STRUCT - 65)) | (1L << (CHAN - 65)) | (1L << (RANGE - 65)) | (1L << (TYPE - 65)) | (1L << (NIL_LIT - 65)) | (1L << (IDENTIFIER - 65)) | (1L << (L_PAREN - 65)) | (1L << (L_BRACKET - 65)))) != 0) || ((((_la - 131)) & ~0x3f) == 0 && ((1L << (_la - 131)) & ((1L << (EXCLAMATION - 131)) | (1L << (PLUS - 131)) | (1L << (MINUS - 131)) | (1L << (CARET - 131)) | (1L << (STAR - 131)) | (1L << (AMPERSAND - 131)) | (1L << (RECEIVE - 131)) | (1L << (DECIMAL_LIT - 131)) | (1L << (BINARY_LIT - 131)) | (1L << (OCTAL_LIT - 131)) | (1L << (HEX_LIT - 131)) | (1L << (IMAGINARY_LIT - 131)) | (1L << (RUNE_LIT - 131)) | (1L << (RAW_STRING_LIT - 131)) | (1L << (INTERPRETED_STRING_LIT - 131)))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FLOAT_LIT) | (1L << TRUE) | (1L << FALSE) | (1L << PRE) | (1L << PRESERVES) | (1L << POST) | (1L << DEC) | (1L << PURE) | (1L << OLD) | (1L << BEFORE) | (1L << FORALL) | (1L << EXISTS) | (1L << ACCESS) | (1L << UNFOLDING) | (1L << LET) | (1L << GHOST) | (1L << SEQ) | (1L << SET) | (1L << MSET) | (1L << DICT) | (1L << OPT) | (1L << LEN) | (1L << NEW) | (1L << MAKE) | (1L << CAP) | (1L << SOME) | (1L << GET) | (1L << DOM) | (1L << ADT) | (1L << MATCH) | (1L << NONE) | (1L << PRED) | (1L << TYPE_OF) | (1L << IS_COMPARABLE) | (1L << LOW))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (WRITEPERM - 66)) | (1L << (NOPERM - 66)) | (1L << (TRUSTED - 66)) | (1L << (FUNC - 66)) | (1L << (INTERFACE - 66)) | (1L << (MAP - 66)) | (1L << (STRUCT - 66)) | (1L << (CHAN - 66)) | (1L << (RANGE - 66)) | (1L << (TYPE - 66)) | (1L << (NIL_LIT - 66)) | (1L << (IDENTIFIER - 66)) | (1L << (L_PAREN - 66)) | (1L << (L_BRACKET - 66)))) != 0) || ((((_la - 132)) & ~0x3f) == 0 && ((1L << (_la - 132)) & ((1L << (EXCLAMATION - 132)) | (1L << (PLUS - 132)) | (1L << (MINUS - 132)) | (1L << (CARET - 132)) | (1L << (STAR - 132)) | (1L << (AMPERSAND - 132)) | (1L << (RECEIVE - 132)) | (1L << (DECIMAL_LIT - 132)) | (1L << (BINARY_LIT - 132)) | (1L << (OCTAL_LIT - 132)) | (1L << (HEX_LIT - 132)) | (1L << (IMAGINARY_LIT - 132)) | (1L << (RUNE_LIT - 132)) | (1L << (RAW_STRING_LIT - 132)) | (1L << (INTERPRETED_STRING_LIT - 132)))) != 0)) {
{
- setState(1813);
+ setState(1821);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,182,_ctx) ) {
case 1:
{
- setState(1807);
+ setState(1815);
expressionList();
}
break;
case 2:
{
- setState(1808);
+ setState(1816);
nonNamedType();
- setState(1811);
+ setState(1819);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,181,_ctx) ) {
case 1:
{
- setState(1809);
+ setState(1817);
match(COMMA);
- setState(1810);
+ setState(1818);
expressionList();
}
break;
@@ -12666,22 +12724,22 @@ public final ArgumentsContext arguments() throws RecognitionException {
}
break;
}
- setState(1816);
+ setState(1824);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==ELLIPSIS) {
{
- setState(1815);
+ setState(1823);
match(ELLIPSIS);
}
}
- setState(1819);
+ setState(1827);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==COMMA) {
{
- setState(1818);
+ setState(1826);
match(COMMA);
}
}
@@ -12689,7 +12747,7 @@ public final ArgumentsContext arguments() throws RecognitionException {
}
}
- setState(1823);
+ setState(1831);
match(R_PAREN);
}
}
@@ -12723,15 +12781,15 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final MethodExprContext methodExpr() throws RecognitionException {
MethodExprContext _localctx = new MethodExprContext(_ctx, getState());
- enterRule(_localctx, 362, RULE_methodExpr);
+ enterRule(_localctx, 364, RULE_methodExpr);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1825);
+ setState(1833);
nonNamedType();
- setState(1826);
+ setState(1834);
match(DOT);
- setState(1827);
+ setState(1835);
match(IDENTIFIER);
}
}
@@ -12763,11 +12821,11 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ReceiverTypeContext receiverType() throws RecognitionException {
ReceiverTypeContext _localctx = new ReceiverTypeContext(_ctx, getState());
- enterRule(_localctx, 364, RULE_receiverType);
+ enterRule(_localctx, 366, RULE_receiverType);
try {
enterOuterAlt(_localctx, 1);
{
- setState(1829);
+ setState(1837);
type_();
}
}
@@ -12799,36 +12857,36 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final EosContext eos() throws RecognitionException {
EosContext _localctx = new EosContext(_ctx, getState());
- enterRule(_localctx, 366, RULE_eos);
+ enterRule(_localctx, 368, RULE_eos);
try {
- setState(1835);
+ setState(1843);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,186,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(1831);
+ setState(1839);
match(SEMI);
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(1832);
+ setState(1840);
match(EOF);
}
break;
case 3:
enterOuterAlt(_localctx, 3);
{
- setState(1833);
+ setState(1841);
match(EOS);
}
break;
case 4:
enterOuterAlt(_localctx, 4);
{
- setState(1834);
+ setState(1842);
if (!(closingBracket())) throw new FailedPredicateException(this, "closingBracket()");
}
break;
@@ -12847,11 +12905,11 @@ public final EosContext eos() throws RecognitionException {
public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
switch (ruleIndex) {
- case 81:
+ case 82:
return expression_sempred((ExpressionContext)_localctx, predIndex);
- case 89:
+ case 90:
return primaryExpr_sempred((PrimaryExprContext)_localctx, predIndex);
- case 183:
+ case 184:
return eos_sempred((EosContext)_localctx, predIndex);
}
return true;
@@ -12911,7 +12969,7 @@ private boolean eos_sempred(EosContext _localctx, int predIndex) {
}
public static final String _serializedATN =
- "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u00a2\u0730\4\2\t"+
+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u00a3\u0738\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"+
@@ -12937,716 +12995,720 @@ private boolean eos_sempred(EosContext _localctx, int predIndex) {
"\t\u00a9\4\u00aa\t\u00aa\4\u00ab\t\u00ab\4\u00ac\t\u00ac\4\u00ad\t\u00ad"+
"\4\u00ae\t\u00ae\4\u00af\t\u00af\4\u00b0\t\u00b0\4\u00b1\t\u00b1\4\u00b2"+
"\t\u00b2\4\u00b3\t\u00b3\4\u00b4\t\u00b4\4\u00b5\t\u00b5\4\u00b6\t\u00b6"+
- "\4\u00b7\t\u00b7\4\u00b8\t\u00b8\4\u00b9\t\u00b9\3\2\3\2\3\2\3\3\3\3\3"+
- "\3\3\4\3\4\3\4\3\5\3\5\3\5\7\5\u017f\n\5\f\5\16\5\u0182\13\5\3\6\3\6\5"+
- "\6\u0186\n\6\3\7\3\7\3\7\7\7\u018b\n\7\f\7\16\7\u018e\13\7\3\7\3\7\3\7"+
- "\3\7\3\7\7\7\u0195\n\7\f\7\16\7\u0198\13\7\3\7\3\7\3\7\5\7\u019d\n\7\3"+
- "\7\3\7\7\7\u01a1\n\7\f\7\16\7\u01a4\13\7\3\7\3\7\3\b\3\b\3\b\3\t\3\t\3"+
- "\t\3\n\3\n\3\n\7\n\u01b1\n\n\f\n\16\n\u01b4\13\n\3\n\5\n\u01b7\n\n\3\n"+
- "\3\n\3\13\3\13\3\13\7\13\u01be\n\13\f\13\16\13\u01c1\13\13\3\13\3\13\3"+
- "\13\3\13\3\13\3\13\3\13\7\13\u01ca\n\13\f\13\16\13\u01cd\13\13\3\13\5"+
- "\13\u01d0\n\13\3\f\3\f\3\f\3\f\5\f\u01d6\n\f\3\r\3\r\3\r\3\r\3\r\3\r\3"+
- "\r\5\r\u01df\n\r\3\16\3\16\3\17\3\17\3\17\3\20\3\20\3\20\5\20\u01e9\n"+
- "\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3"+
- "\21\3\21\5\21\u01fa\n\21\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\24\3\24"+
- "\3\24\7\24\u0206\n\24\f\24\16\24\u0209\13\24\3\24\5\24\u020c\n\24\3\25"+
- "\3\25\3\25\7\25\u0211\n\25\f\25\16\25\u0214\13\25\3\25\3\25\3\26\7\26"+
- "\u0219\n\26\f\26\16\26\u021c\13\26\3\27\3\27\3\27\3\27\7\27\u0222\n\27"+
- "\f\27\16\27\u0225\13\27\3\27\3\27\3\30\3\30\3\31\3\31\3\31\3\31\3\31\3"+
- "\32\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3"+
- "\34\3\35\3\35\3\35\3\35\3\35\5\35\u0244\n\35\3\35\3\35\3\35\3\35\3\36"+
- "\3\36\5\36\u024c\n\36\3\37\3\37\3 \3 \3 \3 \3 \3!\3!\3!\3!\3!\3\"\3\""+
- "\3\"\3\"\3\"\3#\3#\3#\3#\3#\5#\u0264\n#\3#\3#\3$\3$\3$\3$\3$\3$\3$\3%"+
- "\3%\3%\3%\3%\3%\7%\u0275\n%\f%\16%\u0278\13%\3%\3%\3&\3&\3&\3&\3\'\3\'"+
- "\3\'\3\'\7\'\u0284\n\'\f\'\16\'\u0287\13\'\3\'\3\'\3(\3(\3(\3(\3)\3)\3"+
- ")\3)\5)\u0293\n)\3*\3*\3*\3*\3*\7*\u029a\n*\f*\16*\u029d\13*\3*\3*\3+"+
- "\3+\3+\3+\3+\3+\3+\3+\3+\5+\u02aa\n+\3,\3,\3,\3,\3,\7,\u02b1\n,\f,\16"+
- ",\u02b4\13,\3,\3,\3-\3-\3-\3-\3-\7-\u02bd\n-\f-\16-\u02c0\13-\3-\3-\3"+
- ".\3.\3.\3.\3.\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\5/\u02d4\n/\3\60\3\60\3"+
- "\60\3\60\3\60\5\60\u02db\n\60\3\60\7\60\u02de\n\60\f\60\16\60\u02e1\13"+
- "\60\3\60\3\60\5\60\u02e5\n\60\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61"+
- "\5\61\u02ef\n\61\3\62\5\62\u02f2\n\62\3\62\3\62\5\62\u02f6\n\62\3\63\3"+
- "\63\5\63\u02fa\n\63\3\64\3\64\3\64\3\64\7\64\u0300\n\64\f\64\16\64\u0303"+
- "\13\64\3\64\3\64\3\65\3\65\3\65\5\65\u030a\n\65\3\66\3\66\3\66\5\66\u030f"+
- "\n\66\3\67\3\67\3\67\3\67\3\67\3\67\5\67\u0317\n\67\5\67\u0319\n\67\3"+
- "\67\3\67\3\67\5\67\u031e\n\67\38\38\38\78\u0323\n8\f8\168\u0326\138\3"+
- "9\39\39\39\39\59\u032d\n9\39\59\u0330\n9\39\39\3:\3:\5:\u0336\n:\3:\3"+
- ":\3:\5:\u033b\n:\5:\u033d\n:\3:\5:\u0340\n:\3;\3;\3;\7;\u0345\n;\f;\16"+
- ";\u0348\13;\3<\3<\5<\u034c\n<\3<\3<\3=\3=\3=\3=\3=\3=\3>\3>\3>\3>\3>\3"+
- ">\3>\7>\u035d\n>\f>\16>\u0360\13>\3>\3>\3>\7>\u0365\n>\f>\16>\u0368\13"+
- ">\3>\5>\u036b\n>\3?\5?\u036e\n?\3?\3?\3?\3?\5?\u0374\n?\3@\3@\5@\u0378"+
- "\n@\3@\5@\u037b\n@\3@\3@\3@\3A\3A\3A\3A\3A\5A\u0385\nA\3B\3B\3B\3B\3B"+
- "\5B\u038c\nB\3C\3C\3C\3C\3C\5C\u0393\nC\3C\3C\3D\3D\3D\3D\3D\3E\3E\3E"+
- "\5E\u039f\nE\3F\3F\3F\3F\5F\u03a5\nF\3G\3G\3G\3G\3G\5G\u03ac\nG\3H\3H"+
- "\3H\5H\u03b1\nH\3I\3I\3I\3I\5I\u03b7\nI\3J\3J\3J\3J\3J\3K\3K\3K\3K\3K"+
- "\5K\u03c3\nK\3L\3L\3L\3L\5L\u03c9\nL\3L\3L\5L\u03cd\nL\3M\3M\3M\3M\3N"+
- "\3N\5N\u03d5\nN\3N\3N\5N\u03d9\nN\3N\3N\3O\3O\5O\u03df\nO\3P\5P\u03e2"+
- "\nP\3P\3P\3Q\3Q\5Q\u03e8\nQ\3Q\3Q\3R\5R\u03ed\nR\3R\3R\3S\3S\3S\3S\3S"+
- "\3S\3S\3S\3S\3S\3S\3S\3S\3S\3S\3S\3S\3S\3S\3S\3S\5S\u0406\nS\3S\3S\3S"+
- "\3S\3S\3S\3S\3S\3S\3S\3S\3S\3S\3S\3S\3S\3S\3S\3S\3S\3S\3S\3S\3S\3S\3S"+
- "\3S\3S\3S\3S\3S\3S\3S\7S\u0429\nS\fS\16S\u042c\13S\3T\3T\3T\3T\3T\3T\3"+
- "T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\5T\u0442\nT\3U\3U\3U\3V\3V\3"+
- "V\5V\u044a\nV\3W\3W\3W\3X\3X\3X\3X\7X\u0453\nX\fX\16X\u0456\13X\3X\3X"+
- "\3X\3X\5X\u045c\nX\3Y\3Y\3Y\3Y\3Y\5Y\u0463\nY\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z"+
- "\5Z\u046d\nZ\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\5[\u047b\n[\3[\3[\3["+
- "\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\7[\u0491\n[\f[\16"+
- "[\u0494\13[\3\\\3\\\3\\\3]\3]\5]\u049b\n]\3]\3]\5]\u049f\n]\3^\3^\5^\u04a3"+
- "\n^\3^\5^\u04a6\n^\3^\3^\3_\3_\3_\3_\3_\5_\u04af\n_\3_\3_\7_\u04b3\n_"+
- "\f_\16_\u04b6\13_\3_\3_\3`\3`\3`\3`\3a\5a\u04bf\na\3a\3a\3a\3a\3a\3a\5"+
- "a\u04c7\na\3a\3a\3a\3a\5a\u04cd\na\3b\3b\3b\3b\3b\3b\3b\5b\u04d6\nb\3"+
- "c\3c\3c\3c\3c\3c\3c\3c\3c\5c\u04e1\nc\3d\3d\3d\3e\3e\3e\3e\7e\u04ea\n"+
- "e\fe\16e\u04ed\13e\3e\5e\u04f0\ne\5e\u04f2\ne\3e\3e\3f\3f\3f\3f\3f\3f"+
- "\3f\5f\u04fd\nf\3g\3g\3g\3g\3g\3h\3h\5h\u0506\nh\3h\3h\5h\u050a\nh\3h"+
- "\5h\u050d\nh\3h\3h\3h\3h\3h\5h\u0514\nh\3h\3h\3i\3i\3j\3j\3k\3k\3l\5l"+
- "\u051f\nl\3l\3l\3m\3m\3m\3m\3m\3m\5m\u0529\nm\3m\3m\3m\3m\5m\u052f\nm"+
- "\5m\u0531\nm\3n\3n\3n\3o\3o\3p\3p\3p\5p\u053b\np\3q\3q\3q\3q\3q\3q\7q"+
- "\u0543\nq\fq\16q\u0546\13q\3q\5q\u0549\nq\3r\3r\5r\u054d\nr\3r\3r\5r\u0551"+
- "\nr\3s\3s\3s\7s\u0556\ns\fs\16s\u0559\13s\3t\3t\3t\7t\u055e\nt\ft\16t"+
- "\u0561\13t\3u\3u\3u\3u\3u\3u\7u\u0569\nu\fu\16u\u056c\13u\3u\5u\u056f"+
- "\nu\3v\3v\5v\u0573\nv\3v\3v\3w\3w\3w\3w\3w\3w\7w\u057d\nw\fw\16w\u0580"+
- "\13w\3w\5w\u0583\nw\3x\3x\5x\u0587\nx\3x\3x\3y\5y\u058c\ny\3y\3y\3y\6"+
- "y\u0591\ny\ry\16y\u0592\3z\3z\3z\3z\3z\5z\u059a\nz\3{\3{\3|\3|\3|\3|\3"+
- "}\3}\3}\3~\3~\3~\3~\3\177\3\177\3\u0080\3\u0080\3\u0080\5\u0080\u05ae"+
- "\n\u0080\3\u0081\3\u0081\5\u0081\u05b2\n\u0081\3\u0082\3\u0082\5\u0082"+
- "\u05b6\n\u0082\3\u0083\3\u0083\5\u0083\u05ba\n\u0083\3\u0084\3\u0084\3"+
- "\u0084\3\u0085\3\u0085\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086"+
- "\3\u0086\3\u0086\3\u0086\5\u0086\u05ca\n\u0086\3\u0086\3\u0086\3\u0086"+
- "\3\u0086\5\u0086\u05d0\n\u0086\5\u0086\u05d2\n\u0086\3\u0087\3\u0087\5"+
- "\u0087\u05d6\n\u0087\3\u0088\3\u0088\5\u0088\u05da\n\u0088\3\u0088\5\u0088"+
- "\u05dd\n\u0088\3\u0088\3\u0088\5\u0088\u05e1\n\u0088\5\u0088\u05e3\n\u0088"+
- "\3\u0088\3\u0088\7\u0088\u05e7\n\u0088\f\u0088\16\u0088\u05ea\13\u0088"+
- "\3\u0088\3\u0088\3\u0089\3\u0089\3\u0089\5\u0089\u05f1\n\u0089\3\u008a"+
- "\3\u008a\3\u008a\5\u008a\u05f6\n\u008a\3\u008b\3\u008b\3\u008b\3\u008b"+
- "\3\u008b\3\u008b\3\u008b\3\u008b\3\u008b\5\u008b\u0601\n\u008b\3\u008b"+
- "\3\u008b\7\u008b\u0605\n\u008b\f\u008b\16\u008b\u0608\13\u008b\3\u008b"+
- "\3\u008b\3\u008c\3\u008c\5\u008c\u060e\n\u008c\3\u008c\3\u008c\3\u008c"+
- "\3\u008c\3\u008c\3\u008c\3\u008d\3\u008d\3\u008d\5\u008d\u0619\n\u008d"+
- "\3\u008e\3\u008e\3\u008e\5\u008e\u061e\n\u008e\3\u008f\3\u008f\5\u008f"+
- "\u0622\n\u008f\3\u008f\3\u008f\3\u008f\5\u008f\u0627\n\u008f\7\u008f\u0629"+
- "\n\u008f\f\u008f\16\u008f\u062c\13\u008f\3\u0090\3\u0090\3\u0090\7\u0090"+
- "\u0631\n\u0090\f\u0090\16\u0090\u0634\13\u0090\3\u0090\3\u0090\3\u0091"+
- "\3\u0091\3\u0091\5\u0091\u063b\n\u0091\3\u0092\3\u0092\3\u0092\5\u0092"+
- "\u0640\n\u0092\3\u0092\5\u0092\u0643\n\u0092\3\u0093\3\u0093\3\u0093\3"+
- "\u0093\3\u0093\3\u0093\5\u0093\u064b\n\u0093\3\u0093\3\u0093\3\u0094\3"+
- "\u0094\3\u0094\3\u0094\5\u0094\u0653\n\u0094\3\u0094\3\u0094\3\u0095\5"+
- "\u0095\u0658\n\u0095\3\u0095\3\u0095\5\u0095\u065c\n\u0095\3\u0095\3\u0095"+
- "\5\u0095\u0660\n\u0095\3\u0096\3\u0096\3\u0096\3\u0097\3\u0097\5\u0097"+
- "\u0667\n\u0097\3\u0098\3\u0098\3\u0098\3\u0098\3\u0098\3\u0099\3\u0099"+
- "\3\u009a\3\u009a\3\u009b\3\u009b\3\u009b\3\u009c\3\u009c\3\u009c\3\u009c"+
- "\3\u009d\3\u009d\3\u009d\3\u009d\3\u009d\3\u009d\3\u009e\3\u009e\3\u009e"+
- "\3\u009e\3\u009e\5\u009e\u0684\n\u009e\3\u009e\3\u009e\3\u009f\3\u009f"+
- "\3\u009f\3\u00a0\3\u00a0\3\u00a0\3\u00a0\5\u00a0\u068f\n\u00a0\3\u00a1"+
- "\3\u00a1\5\u00a1\u0693\n\u00a1\3\u00a2\3\u00a2\3\u00a2\3\u00a2\7\u00a2"+
- "\u0699\n\u00a2\f\u00a2\16\u00a2\u069c\13\u00a2\3\u00a2\5\u00a2\u069f\n"+
- "\u00a2\5\u00a2\u06a1\n\u00a2\3\u00a2\3\u00a2\3\u00a3\3\u00a3\3\u00a3\3"+
- "\u00a3\5\u00a3\u06a9\n\u00a3\3\u00a3\3\u00a3\3\u00a4\3\u00a4\3\u00a4\3"+
- "\u00a4\3\u00a4\5\u00a4\u06b2\n\u00a4\3\u00a5\3\u00a5\3\u00a5\3\u00a5\3"+
- "\u00a5\3\u00a5\5\u00a5\u06ba\n\u00a5\3\u00a6\3\u00a6\3\u00a6\5\u00a6\u06bf"+
- "\n\u00a6\3\u00a7\3\u00a7\3\u00a8\3\u00a8\3\u00a9\3\u00a9\3\u00a9\3\u00a9"+
- "\3\u00aa\3\u00aa\3\u00aa\3\u00ab\3\u00ab\3\u00ab\5\u00ab\u06cf\n\u00ab"+
- "\5\u00ab\u06d1\n\u00ab\3\u00ab\3\u00ab\3\u00ac\3\u00ac\3\u00ac\7\u00ac"+
- "\u06d8\n\u00ac\f\u00ac\16\u00ac\u06db\13\u00ac\3\u00ad\3\u00ad\3\u00ad"+
- "\5\u00ad\u06e0\n\u00ad\3\u00ad\3\u00ad\3\u00ae\3\u00ae\5\u00ae\u06e6\n"+
- "\u00ae\3\u00af\3\u00af\5\u00af\u06ea\n\u00af\3\u00b0\3\u00b0\3\u00b0\3"+
- "\u00b0\3\u00b0\7\u00b0\u06f1\n\u00b0\f\u00b0\16\u00b0\u06f4\13\u00b0\3"+
- "\u00b0\3\u00b0\3\u00b1\3\u00b1\3\u00b1\3\u00b1\5\u00b1\u06fc\n\u00b1\3"+
- "\u00b1\5\u00b1\u06ff\n\u00b1\3\u00b2\3\u00b2\3\u00b3\5\u00b3\u0704\n\u00b3"+
- "\3\u00b3\3\u00b3\3\u00b4\3\u00b4\3\u00b4\3\u00b4\3\u00b5\3\u00b5\3\u00b5"+
- "\3\u00b5\3\u00b5\3\u00b6\3\u00b6\3\u00b6\3\u00b6\3\u00b6\5\u00b6\u0716"+
- "\n\u00b6\5\u00b6\u0718\n\u00b6\3\u00b6\5\u00b6\u071b\n\u00b6\3\u00b6\5"+
- "\u00b6\u071e\n\u00b6\5\u00b6\u0720\n\u00b6\3\u00b6\3\u00b6\3\u00b7\3\u00b7"+
- "\3\u00b7\3\u00b7\3\u00b8\3\u00b8\3\u00b9\3\u00b9\3\u00b9\3\u00b9\5\u00b9"+
- "\u072e\n\u00b9\3\u00b9\3\u02df\4\u00a4\u00b4\u00ba\2\4\6\b\n\f\16\20\22"+
- "\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNPRTVXZ\\^`bdfhjlnp"+
- "rtvxz|~\u0080\u0082\u0084\u0086\u0088\u008a\u008c\u008e\u0090\u0092\u0094"+
- "\u0096\u0098\u009a\u009c\u009e\u00a0\u00a2\u00a4\u00a6\u00a8\u00aa\u00ac"+
- "\u00ae\u00b0\u00b2\u00b4\u00b6\u00b8\u00ba\u00bc\u00be\u00c0\u00c2\u00c4"+
- "\u00c6\u00c8\u00ca\u00cc\u00ce\u00d0\u00d2\u00d4\u00d6\u00d8\u00da\u00dc"+
- "\u00de\u00e0\u00e2\u00e4\u00e6\u00e8\u00ea\u00ec\u00ee\u00f0\u00f2\u00f4"+
- "\u00f6\u00f8\u00fa\u00fc\u00fe\u0100\u0102\u0104\u0106\u0108\u010a\u010c"+
- "\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122\u0124"+
- "\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0138\u013a\u013c"+
- "\u013e\u0140\u0142\u0144\u0146\u0148\u014a\u014c\u014e\u0150\u0152\u0154"+
- "\u0156\u0158\u015a\u015c\u015e\u0160\u0162\u0164\u0166\u0168\u016a\u016c"+
- "\u016e\u0170\2\25\4\2ggrr\3\2\31\32\3\2\7\n\3\2CD\3\2*,\4\2*,..\3\2\u0085"+
- "\u008b\3\2\26\27\4\2\u0080\u0084\u0089\u008a\6\2%%ss\177\177\u0086\u0088"+
- "\3\2!#\3\2\36 \4\2JKy~\6\2//\62\62\65\65__\4\2\177\u0084\u0086\u008a\3"+
- "\2st\4\2pp\u00a1\u00a1\4\2\u008c\u008f\u0091\u0092\3\2\u0098\u0099\2\u0794"+
- "\2\u0172\3\2\2\2\4\u0175\3\2\2\2\6\u0178\3\2\2\2\b\u017b\3\2\2\2\n\u0183"+
- "\3\2\2\2\f\u018c\3\2\2\2\16\u01a7\3\2\2\2\20\u01aa\3\2\2\2\22\u01b2\3"+
- "\2\2\2\24\u01bf\3\2\2\2\26\u01d5\3\2\2\2\30\u01de\3\2\2\2\32\u01e0\3\2"+
- "\2\2\34\u01e2\3\2\2\2\36\u01e5\3\2\2\2 \u01f9\3\2\2\2\"\u01fb\3\2\2\2"+
- "$\u01fd\3\2\2\2&\u0202\3\2\2\2(\u020d\3\2\2\2*\u021a\3\2\2\2,\u021d\3"+
- "\2\2\2.\u0228\3\2\2\2\60\u022a\3\2\2\2\62\u022f\3\2\2\2\64\u0234\3\2\2"+
- "\2\66\u0239\3\2\2\28\u023e\3\2\2\2:\u024b\3\2\2\2<\u024d\3\2\2\2>\u024f"+
- "\3\2\2\2@\u0254\3\2\2\2B\u0259\3\2\2\2D\u025e\3\2\2\2F\u0267\3\2\2\2H"+
- "\u026e\3\2\2\2J\u027b\3\2\2\2L\u027f\3\2\2\2N\u028a\3\2\2\2P\u0292\3\2"+
- "\2\2R\u0294\3\2\2\2T\u02a9\3\2\2\2V\u02ab\3\2\2\2X\u02b7\3\2\2\2Z\u02c3"+
- "\3\2\2\2\\\u02d3\3\2\2\2^\u02df\3\2\2\2`\u02ee\3\2\2\2b\u02f1\3\2\2\2"+
- "d\u02f9\3\2\2\2f\u02fb\3\2\2\2h\u0306\3\2\2\2j\u030e\3\2\2\2l\u031d\3"+
- "\2\2\2n\u031f\3\2\2\2p\u0327\3\2\2\2r\u0335\3\2\2\2t\u0341\3\2\2\2v\u034b"+
- "\3\2\2\2x\u034f\3\2\2\2z\u0355\3\2\2\2|\u036d\3\2\2\2~\u0375\3\2\2\2\u0080"+
- "\u0384\3\2\2\2\u0082\u0386\3\2\2\2\u0084\u038d\3\2\2\2\u0086\u0396\3\2"+
- "\2\2\u0088\u039b\3\2\2\2\u008a\u03a0\3\2\2\2\u008c\u03a6\3\2\2\2\u008e"+
- "\u03ad\3\2\2\2\u0090\u03b2\3\2\2\2\u0092\u03b8\3\2\2\2\u0094\u03bd\3\2"+
- "\2\2\u0096\u03c4\3\2\2\2\u0098\u03ce\3\2\2\2\u009a\u03d2\3\2\2\2\u009c"+
- "\u03de\3\2\2\2\u009e\u03e1\3\2\2\2\u00a0\u03e5\3\2\2\2\u00a2\u03ec\3\2"+
- "\2\2\u00a4\u0405\3\2\2\2\u00a6\u0441\3\2\2\2\u00a8\u0443\3\2\2\2\u00aa"+
- "\u0446\3\2\2\2\u00ac\u044b\3\2\2\2\u00ae\u0454\3\2\2\2\u00b0\u0462\3\2"+
- "\2\2\u00b2\u046c\3\2\2\2\u00b4\u047a\3\2\2\2\u00b6\u0495\3\2\2\2\u00b8"+
- "\u0498\3\2\2\2\u00ba\u04a0\3\2\2\2\u00bc\u04a9\3\2\2\2\u00be\u04b9\3\2"+
- "\2\2\u00c0\u04cc\3\2\2\2\u00c2\u04d5\3\2\2\2\u00c4\u04e0\3\2\2\2\u00c6"+
- "\u04e2\3\2\2\2\u00c8\u04e5\3\2\2\2\u00ca\u04fc\3\2\2\2\u00cc\u04fe\3\2"+
- "\2\2\u00ce\u0503\3\2\2\2\u00d0\u0517\3\2\2\2\u00d2\u0519\3\2\2\2\u00d4"+
- "\u051b\3\2\2\2\u00d6\u051e\3\2\2\2\u00d8\u0528\3\2\2\2\u00da\u0532\3\2"+
- "\2\2\u00dc\u0535\3\2\2\2\u00de\u053a\3\2\2\2\u00e0\u053c\3\2\2\2\u00e2"+
- "\u054a\3\2\2\2\u00e4\u0552\3\2\2\2\u00e6\u055a\3\2\2\2\u00e8\u0562\3\2"+
- "\2\2\u00ea\u0570\3\2\2\2\u00ec\u0576\3\2\2\2\u00ee\u0584\3\2\2\2\u00f0"+
- "\u0590\3\2\2\2\u00f2\u0599\3\2\2\2\u00f4\u059b\3\2\2\2\u00f6\u059d\3\2"+
- "\2\2\u00f8\u05a1\3\2\2\2\u00fa\u05a4\3\2\2\2\u00fc\u05a8\3\2\2\2\u00fe"+
- "\u05aa\3\2\2\2\u0100\u05af\3\2\2\2\u0102\u05b3\3\2\2\2\u0104\u05b7\3\2"+
- "\2\2\u0106\u05bb\3\2\2\2\u0108\u05be\3\2\2\2\u010a\u05c0\3\2\2\2\u010c"+
- "\u05d5\3\2\2\2\u010e\u05d7\3\2\2\2\u0110\u05ed\3\2\2\2\u0112\u05f5\3\2"+
- "\2\2\u0114\u05f7\3\2\2\2\u0116\u060d\3\2\2\2\u0118\u0615\3\2\2\2\u011a"+
- "\u061d\3\2\2\2\u011c\u0621\3\2\2\2\u011e\u062d\3\2\2\2\u0120\u0637\3\2"+
- "\2\2\u0122\u0642\3\2\2\2\u0124\u064a\3\2\2\2\u0126\u064e\3\2\2\2\u0128"+
- "\u0657\3\2\2\2\u012a\u0661\3\2\2\2\u012c\u0666\3\2\2\2\u012e\u0668\3\2"+
- "\2\2\u0130\u066d\3\2\2\2\u0132\u066f\3\2\2\2\u0134\u0671\3\2\2\2\u0136"+
- "\u0674\3\2\2\2\u0138\u0678\3\2\2\2\u013a\u0683\3\2\2\2\u013c\u0687\3\2"+
- "\2\2\u013e\u068e\3\2\2\2\u0140\u0692\3\2\2\2\u0142\u0694\3\2\2\2\u0144"+
- "\u06a4\3\2\2\2\u0146\u06b1\3\2\2\2\u0148\u06b9\3\2\2\2\u014a\u06be\3\2"+
- "\2\2\u014c\u06c0\3\2\2\2\u014e\u06c2\3\2\2\2\u0150\u06c4\3\2\2\2\u0152"+
- "\u06c8\3\2\2\2\u0154\u06cb\3\2\2\2\u0156\u06d4\3\2\2\2\u0158\u06df\3\2"+
- "\2\2\u015a\u06e5\3\2\2\2\u015c\u06e9\3\2\2\2\u015e\u06eb\3\2\2\2\u0160"+
- "\u06fb\3\2\2\2\u0162\u0700\3\2\2\2\u0164\u0703\3\2\2\2\u0166\u0707\3\2"+
- "\2\2\u0168\u070b\3\2\2\2\u016a\u0710\3\2\2\2\u016c\u0723\3\2\2\2\u016e"+
- "\u0727\3\2\2\2\u0170\u072d\3\2\2\2\u0172\u0173\5\u00a4S\2\u0173\u0174"+
- "\7\2\2\3\u0174\3\3\2\2\2\u0175\u0176\5\u00a6T\2\u0176\u0177\7\2\2\3\u0177"+
- "\5\3\2\2\2\u0178\u0179\5\u00c2b\2\u0179\u017a\7\2\2\3\u017a\7\3\2\2\2"+
- "\u017b\u0180\5\n\6\2\u017c\u017d\7o\2\2\u017d\u017f\5\n\6\2\u017e\u017c"+
- "\3\2\2\2\u017f\u0182\3\2\2\2\u0180\u017e\3\2\2\2\u0180\u0181\3\2\2\2\u0181"+
- "\t\3\2\2\2\u0182\u0180\3\2\2\2\u0183\u0185\7g\2\2\u0184\u0186\7>\2\2\u0185"+
- "\u0184\3\2\2\2\u0185\u0186\3\2\2\2\u0186\13\3\2\2\2\u0187\u0188\5\16\b"+
- "\2\u0188\u0189\5\u0170\u00b9\2\u0189\u018b\3\2\2\2\u018a\u0187\3\2\2\2"+
- "\u018b\u018e\3\2\2\2\u018c\u018a\3\2\2\2\u018c\u018d\3\2\2\2\u018d\u018f"+
- "\3\2\2\2\u018e\u018c\3\2\2\2\u018f\u0190\5\u00dan\2\u0190\u0196\5\u0170"+
- "\u00b9\2\u0191\u0192\5\24\13\2\u0192\u0193\5\u0170\u00b9\2\u0193\u0195"+
- "\3\2\2\2\u0194\u0191\3\2\2\2\u0195\u0198\3\2\2\2\u0196\u0194\3\2\2\2\u0196"+
- "\u0197\3\2\2\2\u0197\u01a2\3\2\2\2\u0198\u0196\3\2\2\2\u0199\u019d\5\u0088"+
- "E\2\u019a\u019d\5\u00dep\2\u019b\u019d\5\26\f\2\u019c\u0199\3\2\2\2\u019c"+
- "\u019a\3\2\2\2\u019c\u019b\3\2\2\2\u019d\u019e\3\2\2\2\u019e\u019f\5\u0170"+
- "\u00b9\2\u019f\u01a1\3\2\2\2\u01a0\u019c\3\2\2\2\u01a1\u01a4\3\2\2\2\u01a2"+
- "\u01a0\3\2\2\2\u01a2\u01a3\3\2\2\2\u01a3\u01a5\3\2\2\2\u01a4\u01a2\3\2"+
- "\2\2\u01a5\u01a6\7\2\2\3\u01a6\r\3\2\2\2\u01a7\u01a8\7G\2\2\u01a8\u01a9"+
- "\5\u00a4S\2\u01a9\17\3\2\2\2\u01aa\u01ab\7H\2\2\u01ab\u01ac\5\u00a4S\2"+
- "\u01ac\21\3\2\2\2\u01ad\u01ae\5\20\t\2\u01ae\u01af\5\u0170\u00b9\2\u01af"+
- "\u01b1\3\2\2\2\u01b0\u01ad\3\2\2\2\u01b1\u01b4\3\2\2\2\u01b2\u01b0\3\2"+
- "\2\2\u01b2\u01b3\3\2\2\2\u01b3\u01b6\3\2\2\2\u01b4\u01b2\3\2\2\2\u01b5"+
- "\u01b7\t\2\2\2\u01b6\u01b5\3\2\2\2\u01b6\u01b7\3\2\2\2\u01b7\u01b8\3\2"+
- "\2\2\u01b8\u01b9\5\u00dco\2\u01b9\23\3\2\2\2\u01ba\u01bb\5\20\t\2\u01bb"+
- "\u01bc\5\u0170\u00b9\2\u01bc\u01be\3\2\2\2\u01bd\u01ba\3\2\2\2\u01be\u01c1"+
- "\3\2\2\2\u01bf\u01bd\3\2\2\2\u01bf\u01c0\3\2\2\2\u01c0\u01cf\3\2\2\2\u01c1"+
- "\u01bf\3\2\2\2\u01c2\u01c3\7c\2\2\u01c3\u01d0\5\22\n\2\u01c4\u01c5\7c"+
- "\2\2\u01c5\u01cb\7h\2\2\u01c6\u01c7\5\22\n\2\u01c7\u01c8\5\u0170\u00b9"+
- "\2\u01c8\u01ca\3\2\2\2\u01c9\u01c6\3\2\2\2\u01ca\u01cd\3\2\2\2\u01cb\u01c9"+
- "\3\2\2\2\u01cb\u01cc\3\2\2\2\u01cc\u01ce\3\2\2\2\u01cd\u01cb\3\2\2\2\u01ce"+
- "\u01d0\7i\2\2\u01cf\u01c2\3\2\2\2\u01cf\u01c4\3\2\2\2\u01d0\25\3\2\2\2"+
- "\u01d1\u01d6\5z>\2\u01d2\u01d6\5\u0090I\2\u01d3\u01d6\5\u0094K\2\u01d4"+
- "\u01d6\5\u008eH\2\u01d5\u01d1\3\2\2\2\u01d5\u01d2\3\2\2\2\u01d5\u01d3"+
- "\3\2\2\2\u01d5\u01d4\3\2\2\2\u01d6\27\3\2\2\2\u01d7\u01d8\7\35\2\2\u01d8"+
- "\u01df\5\u00a6T\2\u01d9\u01da\t\3\2\2\u01da\u01df\5.\30\2\u01db\u01dc"+
- "\t\4\2\2\u01dc\u01df\5\u00a4S\2\u01dd\u01df\5f\64\2\u01de\u01d7\3\2\2"+
- "\2\u01de\u01d9\3\2\2\2\u01de\u01db\3\2\2\2\u01de\u01dd\3\2\2\2\u01df\31"+
- "\3\2\2\2\u01e0\u01e1\5\34\17\2\u01e1\33\3\2\2\2\u01e2\u01e3\5^\60\2\u01e3"+
- "\u01e4\5\36\20\2\u01e4\35\3\2\2\2\u01e5\u01e6\7F\2\2\u01e6\u01e8\7h\2"+
- "\2\u01e7\u01e9\5\u00f0y\2\u01e8\u01e7\3\2\2\2\u01e8\u01e9\3\2\2\2\u01e9"+
- "\u01ea\3\2\2\2\u01ea\u01eb\7i\2\2\u01eb\37\3\2\2\2\u01ec\u01fa\5F$\2\u01ed"+
- "\u01fa\5D#\2\u01ee\u01fa\5B\"\2\u01ef\u01fa\5$\23\2\u01f0\u01fa\5@!\2"+
- "\u01f1\u01fa\58\35\2\u01f2\u01fa\5> \2\u01f3\u01fa\5\66\34\2\u01f4\u01fa"+
- "\5\62\32\2\u01f5\u01fa\5\60\31\2\u01f6\u01fa\5\64\33\2\u01f7\u01fa\5\""+
- "\22\2\u01f8\u01fa\5H%\2\u01f9\u01ec\3\2\2\2\u01f9\u01ed\3\2\2\2\u01f9"+
- "\u01ee\3\2\2\2\u01f9\u01ef\3\2\2\2\u01f9\u01f0\3\2\2\2\u01f9\u01f1\3\2"+
- "\2\2\u01f9\u01f2\3\2\2\2\u01f9\u01f3\3\2\2\2\u01f9\u01f4\3\2\2\2\u01f9"+
- "\u01f5\3\2\2\2\u01f9\u01f6\3\2\2\2\u01f9\u01f7\3\2\2\2\u01f9\u01f8\3\2"+
- "\2\2\u01fa!\3\2\2\2\u01fb\u01fc\t\5\2\2\u01fc#\3\2\2\2\u01fd\u01fe\7`"+
- "\2\2\u01fe\u01ff\7l\2\2\u01ff\u0200\5\u00c2b\2\u0200\u0201\7m\2\2\u0201"+
- "%\3\2\2\2\u0202\u0207\5(\25\2\u0203\u0204\7o\2\2\u0204\u0206\5(\25\2\u0205"+
- "\u0203\3\2\2\2\u0206\u0209\3\2\2\2\u0207\u0205\3\2\2\2\u0207\u0208\3\2"+
- "\2\2\u0208\u020b\3\2\2\2\u0209\u0207\3\2\2\2\u020a\u020c\7o\2\2\u020b"+
- "\u020a\3\2\2\2\u020b\u020c\3\2\2\2\u020c\'\3\2\2\2\u020d\u0212\7g\2\2"+
- "\u020e\u020f\7o\2\2\u020f\u0211\7g\2\2\u0210\u020e\3\2\2\2\u0211\u0214"+
- "\3\2\2\2\u0212\u0210\3\2\2\2\u0212\u0213\3\2\2\2\u0213\u0215\3\2\2\2\u0214"+
- "\u0212\3\2\2\2\u0215\u0216\5\u0132\u009a\2\u0216)\3\2\2\2\u0217\u0219"+
- "\5,\27\2\u0218\u0217\3\2\2\2\u0219\u021c\3\2\2\2\u021a\u0218\3\2\2\2\u021a"+
- "\u021b\3\2\2\2\u021b+\3\2\2\2\u021c\u021a\3\2\2\2\u021d\u021e\7j\2\2\u021e"+
- "\u0223\5\u00a4S\2\u021f\u0220\7o\2\2\u0220\u0222\5\u00a4S\2\u0221\u021f"+
- "\3\2\2\2\u0222\u0225\3\2\2\2\u0223\u0221\3\2\2\2\u0223\u0224\3\2\2\2\u0224"+
- "\u0226\3\2\2\2\u0225\u0223\3\2\2\2\u0226\u0227\7k\2\2\u0227-\3\2\2\2\u0228"+
- "\u0229\5\u00b4[\2\u0229/\3\2\2\2\u022a\u022b\7\63\2\2\u022b\u022c\7h\2"+
- "\2\u022c\u022d\5\u00a4S\2\u022d\u022e\7i\2\2\u022e\61\3\2\2\2\u022f\u0230"+
- "\79\2\2\u0230\u0231\7l\2\2\u0231\u0232\5\u00c2b\2\u0232\u0233\7m\2\2\u0233"+
- "\63\3\2\2\2\u0234\u0235\7\64\2\2\u0235\u0236\7h\2\2\u0236\u0237\5\u00a4"+
- "S\2\u0237\u0238\7i\2\2\u0238\65\3\2\2\2\u0239\u023a\t\6\2\2\u023a\u023b"+
- "\7h\2\2\u023b\u023c\5\u00a4S\2\u023c\u023d\7i\2\2\u023d\67\3\2\2\2\u023e"+
- "\u0243\7\23\2\2\u023f\u0240\7l\2\2\u0240\u0241\5:\36\2\u0241\u0242\7m"+
- "\2\2\u0242\u0244\3\2\2\2\u0243\u023f\3\2\2\2\u0243\u0244\3\2\2\2\u0244"+
- "\u0245\3\2\2\2\u0245\u0246\7h\2\2\u0246\u0247\5\u00a4S\2\u0247\u0248\7"+
- "i\2\2\u02489\3\2\2\2\u0249\u024c\5<\37\2\u024a\u024c\7\25\2\2\u024b\u0249"+
- "\3\2\2\2\u024b\u024a\3\2\2\2\u024c;\3\2\2\2\u024d\u024e\7g\2\2\u024e="+
- "\3\2\2\2\u024f\u0250\7\24\2\2\u0250\u0251\7h\2\2\u0251\u0252\5\u00a4S"+
- "\2\u0252\u0253\7i\2\2\u0253?\3\2\2\2\u0254\u0255\7<\2\2\u0255\u0256\7"+
- "h\2\2\u0256\u0257\5\u00a4S\2\u0257\u0258\7i\2\2\u0258A\3\2\2\2\u0259\u025a"+
- "\7;\2\2\u025a\u025b\7h\2\2\u025b\u025c\5\u00a4S\2\u025c\u025d\7i\2\2\u025d"+
- "C\3\2\2\2\u025e\u025f\7\30\2\2\u025f\u0260\7h\2\2\u0260\u0263\5\u00a4"+
- "S\2\u0261\u0262\7o\2\2\u0262\u0264\5\u00a4S\2\u0263\u0261\3\2\2\2\u0263"+
- "\u0264\3\2\2\2\u0264\u0265\3\2\2\2\u0265\u0266\7i\2\2\u0266E\3\2\2\2\u0267"+
- "\u0268\t\6\2\2\u0268\u0269\7l\2\2\u0269\u026a\5\u00a4S\2\u026a\u026b\7"+
- "?\2\2\u026b\u026c\5\u00a4S\2\u026c\u026d\7m\2\2\u026dG\3\2\2\2\u026e\u026f"+
- "\78\2\2\u026f\u0270\5\u00a4S\2\u0270\u0276\7j\2\2\u0271\u0272\5J&\2\u0272"+
- "\u0273\5\u0170\u00b9\2\u0273\u0275\3\2\2\2\u0274\u0271\3\2\2\2\u0275\u0278"+
- "\3\2\2\2\u0276\u0274\3\2\2\2\u0276\u0277\3\2\2\2\u0277\u0279\3\2\2\2\u0278"+
- "\u0276\3\2\2\2\u0279\u027a\7k\2\2\u027aI\3\2\2\2\u027b\u027c\5j\66\2\u027c"+
- "\u027d\7q\2\2\u027d\u027e\5\u00a4S\2\u027eK\3\2\2\2\u027f\u0280\7l\2\2"+
- "\u0280\u0285\5N(\2\u0281\u0282\7o\2\2\u0282\u0284\5N(\2\u0283\u0281\3"+
- "\2\2\2\u0284\u0287\3\2\2\2\u0285\u0283\3\2\2\2\u0285\u0286\3\2\2\2\u0286"+
- "\u0288\3\2\2\2\u0287\u0285\3\2\2\2\u0288\u0289\7m\2\2\u0289M\3\2\2\2\u028a"+
- "\u028b\5\u00a4S\2\u028b\u028c\7n\2\2\u028c\u028d\5\u00a4S\2\u028dO\3\2"+
- "\2\2\u028e\u0293\5\\/\2\u028f\u0293\5Z.\2\u0290\u0293\5R*\2\u0291\u0293"+
- "\5V,\2\u0292\u028e\3\2\2\2\u0292\u028f\3\2\2\2\u0292\u0290\3\2\2\2\u0292"+
- "\u0291\3\2\2\2\u0293Q\3\2\2\2\u0294\u0295\7\65\2\2\u0295\u029b\7j\2\2"+
- "\u0296\u0297\5T+\2\u0297\u0298\5\u0170\u00b9\2\u0298\u029a\3\2\2\2\u0299"+
- "\u0296\3\2\2\2\u029a\u029d\3\2\2\2\u029b\u0299\3\2\2\2\u029b\u029c\3\2"+
- "\2\2\u029c\u029e\3\2\2\2\u029d\u029b\3\2\2\2\u029e\u029f\7k\2\2\u029f"+
- "S\3\2\2\2\u02a0\u02a1\7O\2\2\u02a1\u02a2\7g\2\2\u02a2\u02aa\5\u013e\u00a0"+
- "\2\u02a3\u02a4\7\66\2\2\u02a4\u02a5\7j\2\2\u02a5\u02a6\5\u00a4S\2\u02a6"+
- "\u02a7\5\u0170\u00b9\2\u02a7\u02a8\7k\2\2\u02a8\u02aa\3\2\2\2\u02a9\u02a0"+
- "\3\2\2\2\u02a9\u02a3\3\2\2\2\u02aaU\3\2\2\2\u02ab\u02ac\7\67\2\2\u02ac"+
- "\u02b2\7j\2\2\u02ad\u02ae\5X-\2\u02ae\u02af\5\u0170\u00b9\2\u02af\u02b1"+
- "\3\2\2\2\u02b0\u02ad\3\2\2\2\u02b1\u02b4\3\2\2\2\u02b2\u02b0\3\2\2\2\u02b2"+
- "\u02b3\3\2\2\2\u02b3\u02b5\3\2\2\2\u02b4\u02b2\3\2\2\2\u02b5\u02b6\7k"+
- "\2\2\u02b6W\3\2\2\2\u02b7\u02b8\7g\2\2\u02b8\u02be\7j\2\2\u02b9\u02ba"+
- "\5\u0160\u00b1\2\u02ba\u02bb\5\u0170\u00b9\2\u02bb\u02bd\3\2\2\2\u02bc"+
- "\u02b9\3\2\2\2\u02bd\u02c0\3\2\2\2\u02be\u02bc\3\2\2\2\u02be\u02bf\3\2"+
- "\2\2\u02bf\u02c1\3\2\2\2\u02c0\u02be\3\2\2\2\u02c1\u02c2\7k\2\2\u02c2"+
- "Y\3\2\2\2\u02c3\u02c4\7\35\2\2\u02c4\u02c5\7l\2\2\u02c5\u02c6\7m\2\2\u02c6"+
- "\u02c7\5\u0132\u009a\2\u02c7[\3\2\2\2\u02c8\u02c9\t\7\2\2\u02c9\u02ca"+
- "\7l\2\2\u02ca\u02cb\5\u00c2b\2\u02cb\u02cc\7m\2\2\u02cc\u02d4\3\2\2\2"+
- "\u02cd\u02ce\7-\2\2\u02ce\u02cf\7l\2\2\u02cf\u02d0\5\u00c2b\2\u02d0\u02d1"+
- "\7m\2\2\u02d1\u02d2\5\u00c2b\2\u02d2\u02d4\3\2\2\2\u02d3\u02c8\3\2\2\2"+
- "\u02d3\u02cd\3\2\2\2\u02d4]\3\2\2\2\u02d5\u02db\5`\61\2\u02d6\u02d7\7"+
- "\20\2\2\u02d7\u02db\b\60\1\2\u02d8\u02d9\7E\2\2\u02d9\u02db\b\60\1\2\u02da"+
- "\u02d5\3\2\2\2\u02da\u02d6\3\2\2\2\u02da\u02d8\3\2\2\2\u02db\u02dc\3\2"+
- "\2\2\u02dc\u02de\5\u0170\u00b9\2\u02dd\u02da\3\2\2\2\u02de\u02e1\3\2\2"+
- "\2\u02df\u02e0\3\2\2\2\u02df\u02dd\3\2\2\2\u02e0\u02e4\3\2\2\2\u02e1\u02df"+
- "\3\2\2\2\u02e2\u02e3\7\20\2\2\u02e3\u02e5\b\60\1\2\u02e4\u02e2\3\2\2\2"+
- "\u02e4\u02e5\3\2\2\2\u02e5_\3\2\2\2\u02e6\u02e7\7\13\2\2\u02e7\u02ef\5"+
- "d\63\2\u02e8\u02e9\7\f\2\2\u02e9\u02ef\5d\63\2\u02ea\u02eb\7\r\2\2\u02eb"+
- "\u02ef\5d\63\2\u02ec\u02ed\7\17\2\2\u02ed\u02ef\5b\62\2\u02ee\u02e6\3"+
- "\2\2\2\u02ee\u02e8\3\2\2\2\u02ee\u02ea\3\2\2\2\u02ee\u02ec\3\2\2\2\u02ef"+
- "a\3\2\2\2\u02f0\u02f2\5\u00e6t\2\u02f1\u02f0\3\2\2\2\u02f1\u02f2\3\2\2"+
- "\2\u02f2\u02f5\3\2\2\2\u02f3\u02f4\7^\2\2\u02f4\u02f6\5\u00a4S\2\u02f5"+
- "\u02f3\3\2\2\2\u02f5\u02f6\3\2\2\2\u02f6c\3\2\2\2\u02f7\u02fa\3\2\2\2"+
- "\u02f8\u02fa\5\u00a4S\2\u02f9\u02f7\3\2\2\2\u02f9\u02f8\3\2\2\2\u02fa"+
- "e\3\2\2\2\u02fb\u02fc\78\2\2\u02fc\u02fd\5\u00a4S\2\u02fd\u0301\7j\2\2"+
- "\u02fe\u0300\5h\65\2\u02ff\u02fe\3\2\2\2\u0300\u0303\3\2\2\2\u0301\u02ff"+
- "\3\2\2\2\u0301\u0302\3\2\2\2\u0302\u0304\3\2\2\2\u0303\u0301\3\2\2\2\u0304"+
- "\u0305\7k\2\2\u0305g\3\2\2\2\u0306\u0307\5j\66\2\u0307\u0309\7q\2\2\u0308"+
- "\u030a\5\u00f0y\2\u0309\u0308\3\2\2\2\u0309\u030a\3\2\2\2\u030ai\3\2\2"+
- "\2\u030b\u030c\7R\2\2\u030c\u030f\5l\67\2\u030d\u030f\7N\2\2\u030e\u030b"+
- "\3\2\2\2\u030e\u030d\3\2\2\2\u030fk\3\2\2\2\u0310\u0311\7\'\2\2\u0311"+
- "\u031e\7g\2\2\u0312\u0313\5\u00caf\2\u0313\u0318\7j\2\2\u0314\u0316\5"+
- "n8\2\u0315\u0317\7o\2\2\u0316\u0315\3\2\2\2\u0316\u0317\3\2\2\2\u0317"+
- "\u0319\3\2\2\2\u0318\u0314\3\2\2\2\u0318\u0319\3\2\2\2\u0319\u031a\3\2"+
- "\2\2\u031a\u031b\7k\2\2\u031b\u031e\3\2\2\2\u031c\u031e\5\u00a4S\2\u031d"+
- "\u0310\3\2\2\2\u031d\u0312\3\2\2\2\u031d\u031c\3\2\2\2\u031em\3\2\2\2"+
- "\u031f\u0324\5l\67\2\u0320\u0321\7o\2\2\u0321\u0323\5l\67\2\u0322\u0320"+
- "\3\2\2\2\u0323\u0326\3\2\2\2\u0324\u0322\3\2\2\2\u0324\u0325\3\2\2\2\u0325"+
- "o\3\2\2\2\u0326\u0324\3\2\2\2\u0327\u032c\7j\2\2\u0328\u0329\7=\2\2\u0329"+
- "\u032a\5\u00e4s\2\u032a\u032b\5\u0170\u00b9\2\u032b\u032d\3\2\2\2\u032c"+
- "\u0328\3\2\2\2\u032c\u032d\3\2\2\2\u032d\u032f\3\2\2\2\u032e\u0330\5\u00f0"+
- "y\2\u032f\u032e\3\2\2\2\u032f\u0330\3\2\2\2\u0330\u0331\3\2\2\2\u0331"+
- "\u0332\7k\2\2\u0332q\3\2\2\2\u0333\u0336\5\u0150\u00a9\2\u0334\u0336\7"+
- "g\2\2\u0335\u0333\3\2\2\2\u0335\u0334\3\2\2\2\u0336\u033f\3\2\2\2\u0337"+
- "\u033c\7j\2\2\u0338\u033a\5t;\2\u0339\u033b\7o\2\2\u033a\u0339\3\2\2\2"+
- "\u033a\u033b\3\2\2\2\u033b\u033d\3\2\2\2\u033c\u0338\3\2\2\2\u033c\u033d"+
- "\3\2\2\2\u033d\u033e\3\2\2\2\u033e\u0340\7k\2\2\u033f\u0337\3\2\2\2\u033f"+
- "\u0340\3\2\2\2\u0340s\3\2\2\2\u0341\u0346\5v<\2\u0342\u0343\7o\2\2\u0343"+
- "\u0345\5v<\2\u0344\u0342\3\2\2\2\u0345\u0348\3\2\2\2\u0346\u0344\3\2\2"+
- "\2\u0346\u0347\3\2\2\2\u0347u\3\2\2\2\u0348\u0346\3\2\2\2\u0349\u034a"+
- "\7g\2\2\u034a\u034c\7q\2\2\u034b\u0349\3\2\2\2\u034b\u034c\3\2\2\2\u034c"+
- "\u034d\3\2\2\2\u034d\u034e\5\u00a4S\2\u034ew\3\2\2\2\u034f\u0350\7I\2"+
- "\2\u0350\u0351\5\u00a4S\2\u0351\u0352\7\21\2\2\u0352\u0353\5r:\2\u0353"+
- "\u0354\5\u00eex\2\u0354y\3\2\2\2\u0355\u0356\5\u00c2b\2\u0356\u0357\7"+
- "\21\2\2\u0357\u036a\5\u00c2b\2\u0358\u035e\7j\2\2\u0359\u035a\5\u0082"+
- "B\2\u035a\u035b\5\u0170\u00b9\2\u035b\u035d\3\2\2\2\u035c\u0359\3\2\2"+
- "\2\u035d\u0360\3\2\2\2\u035e\u035c\3\2\2\2\u035e\u035f\3\2\2\2\u035f\u0366"+
- "\3\2\2\2\u0360\u035e\3\2\2\2\u0361\u0362\5|?\2\u0362\u0363\5\u0170\u00b9"+
- "\2\u0363\u0365\3\2\2\2\u0364\u0361\3\2\2\2\u0365\u0368\3\2\2\2\u0366\u0364"+
- "\3\2\2\2\u0366\u0367\3\2\2\2\u0367\u0369\3\2\2\2\u0368\u0366\3\2\2\2\u0369"+
- "\u036b\7k\2\2\u036a\u0358\3\2\2\2\u036a\u036b\3\2\2\2\u036b{\3\2\2\2\u036c"+
- "\u036e\7\20\2\2\u036d\u036c\3\2\2\2\u036d\u036e\3\2\2\2\u036e\u036f\3"+
- "\2\2\2\u036f\u0370\5~@\2\u0370\u0371\7g\2\2\u0371\u0373\5\u013e\u00a0"+
- "\2\u0372\u0374\5\u00eex\2\u0373\u0372\3\2\2\2\u0373\u0374\3\2\2\2\u0374"+
- "}\3\2\2\2\u0375\u0377\7h\2\2\u0376\u0378\7g\2\2\u0377\u0376\3\2\2\2\u0377"+
- "\u0378\3\2\2\2\u0378\u037a\3\2\2\2\u0379\u037b\7\u0089\2\2\u037a\u0379"+
- "\3\2\2\2\u037a\u037b\3\2\2\2\u037b\u037c\3\2\2\2\u037c\u037d\5\u012c\u0097"+
- "\2\u037d\u037e\7i\2\2\u037e\177\3\2\2\2\u037f\u0385\5\u00b4[\2\u0380\u0381"+
- "\5\u00c2b\2\u0381\u0382\7r\2\2\u0382\u0383\7g\2\2\u0383\u0385\3\2\2\2"+
- "\u0384\u037f\3\2\2\2\u0384\u0380\3\2\2\2\u0385\u0081\3\2\2\2\u0386\u0387"+
- "\7:\2\2\u0387\u0388\7g\2\2\u0388\u038b\7u\2\2\u0389\u038c\5\u0080A\2\u038a"+
- "\u038c\5\u014e\u00a8\2\u038b\u0389\3\2\2\2\u038b\u038a\3\2\2\2\u038c\u0083"+
- "\3\2\2\2\u038d\u038e\7\61\2\2\u038e\u038f\7h\2\2\u038f\u0392\5\u00c2b"+
- "\2\u0390\u0391\7o\2\2\u0391\u0393\5\u00e6t\2\u0392\u0390\3\2\2\2\u0392"+
- "\u0393\3\2\2\2\u0393\u0394\3\2\2\2\u0394\u0395\7i\2\2\u0395\u0085\3\2"+
- "\2\2\u0396\u0397\7\60\2\2\u0397\u0398\7h\2\2\u0398\u0399\5\u00c2b\2\u0399"+
- "\u039a\7i\2\2\u039a\u0087\3\2\2\2\u039b\u039e\5^\60\2\u039c\u039f\5\u008a"+
- "F\2\u039d\u039f\5\u008cG\2\u039e\u039c\3\2\2\2\u039e\u039d\3\2\2\2\u039f"+
- "\u0089\3\2\2\2\u03a0\u03a1\7O\2\2\u03a1\u03a2\7g\2\2\u03a2\u03a4\5\u013e"+
- "\u00a0\2\u03a3\u03a5\5p9\2\u03a4\u03a3\3\2\2\2\u03a4\u03a5\3\2\2\2\u03a5"+
- "\u008b\3\2\2\2\u03a6\u03a7\7O\2\2\u03a7\u03a8\5\u009aN\2\u03a8\u03a9\7"+
- "g\2\2\u03a9\u03ab\5\u013e\u00a0\2\u03aa\u03ac\5p9\2\u03ab\u03aa\3\2\2"+
- "\2\u03ab\u03ac\3\2\2\2\u03ac\u008d\3\2\2\2\u03ad\u03b0\7\35\2\2\u03ae"+
- "\u03b1\5\u0088E\2\u03af\u03b1\5\u00dep\2\u03b0\u03ae\3\2\2\2\u03b0\u03af"+
- "\3\2\2\2\u03b1\u008f\3\2\2\2\u03b2\u03b3\7:\2\2\u03b3\u03b4\7g\2\2\u03b4"+
- "\u03b6\5\u0142\u00a2\2\u03b5\u03b7\5\u0092J\2\u03b6\u03b5\3\2\2\2\u03b6"+
- "\u03b7\3\2\2\2\u03b7\u0091\3\2\2\2\u03b8\u03b9\7j\2\2\u03b9\u03ba\5\u00a4"+
- "S\2\u03ba\u03bb\5\u0170\u00b9\2\u03bb\u03bc\7k\2\2\u03bc\u0093\3\2\2\2"+
- "\u03bd\u03be\7:\2\2\u03be\u03bf\5\u009aN\2\u03bf\u03c0\7g\2\2\u03c0\u03c2"+
- "\5\u0142\u00a2\2\u03c1\u03c3\5\u0092J\2\u03c2\u03c1\3\2\2\2\u03c2\u03c3"+
- "\3\2\2\2\u03c3\u0095\3\2\2\2\u03c4\u03cc\5\b\5\2\u03c5\u03c8\5\u00c2b"+
- "\2\u03c6\u03c7\7n\2\2\u03c7\u03c9\5\u00e6t\2\u03c8\u03c6\3\2\2\2\u03c8"+
- "\u03c9\3\2\2\2\u03c9\u03cd\3\2\2\2\u03ca\u03cb\7n\2\2\u03cb\u03cd\5\u00e6"+
- "t\2\u03cc\u03c5\3\2\2\2\u03cc\u03ca\3\2\2\2\u03cd\u0097\3\2\2\2\u03ce"+
- "\u03cf\5\b\5\2\u03cf\u03d0\7u\2\2\u03d0\u03d1\5\u00e6t\2\u03d1\u0099\3"+
- "\2\2\2\u03d2\u03d4\7h\2\2\u03d3\u03d5\5\n\6\2\u03d4\u03d3\3\2\2\2\u03d4"+
- "\u03d5\3\2\2\2\u03d5\u03d6\3\2\2\2\u03d6\u03d8\5\u00c2b\2\u03d7\u03d9"+
- "\7o\2\2\u03d8\u03d7\3\2\2\2\u03d8\u03d9\3\2\2\2\u03d9\u03da\3\2\2\2\u03da"+
- "\u03db\7i\2\2\u03db\u009b\3\2\2\2\u03dc\u03df\5\u009eP\2\u03dd\u03df\5"+
- "\u00a0Q\2\u03de\u03dc\3\2\2\2\u03de\u03dd\3\2\2\2\u03df\u009d\3\2\2\2"+
- "\u03e0\u03e2\5\u00e4s\2\u03e1\u03e0\3\2\2\2\u03e1\u03e2\3\2\2\2\u03e2"+
- "\u03e3\3\2\2\2\u03e3\u03e4\5\u00a2R\2\u03e4\u009f\3\2\2\2\u03e5\u03e7"+
- "\7\35\2\2\u03e6\u03e8\5\u00e4s\2\u03e7\u03e6\3\2\2\2\u03e7\u03e8\3\2\2"+
- "\2\u03e8\u03e9\3\2\2\2\u03e9\u03ea\5\u00a2R\2\u03ea\u00a1\3\2\2\2\u03eb"+
- "\u03ed\7v\2\2\u03ec\u03eb\3\2\2\2\u03ec\u03ed\3\2\2\2\u03ed\u03ee\3\2"+
- "\2\2\u03ee\u03ef\5\u00c2b\2\u03ef\u00a3\3\2\2\2\u03f0\u03f1\bS\1\2\u03f1"+
- "\u03f2\t\b\2\2\u03f2\u0406\5\u00a4S\21\u03f3\u0406\5\u00b4[\2\u03f4\u03f5"+
- "\7\33\2\2\u03f5\u03f6\5.\30\2\u03f6\u03f7\7\36\2\2\u03f7\u03f8\5\u00a4"+
- "S\5\u03f8\u0406\3\2\2\2\u03f9\u03fa\7\34\2\2\u03fa\u03fb\5\u0098M\2\u03fb"+
- "\u03fc\7\36\2\2\u03fc\u03fd\5\u00a4S\4\u03fd\u0406\3\2\2\2\u03fe\u03ff"+
- "\t\t\2\2\u03ff\u0400\5&\24\2\u0400\u0401\7q\2\2\u0401\u0402\7q\2\2\u0402"+
- "\u0403\5*\26\2\u0403\u0404\5\u00a4S\3\u0404\u0406\3\2\2\2\u0405\u03f0"+
- "\3\2\2\2\u0405\u03f3\3\2\2\2\u0405\u03f4\3\2\2\2\u0405\u03f9\3\2\2\2\u0405"+
- "\u03fe\3\2\2\2\u0406\u042a\3\2\2\2\u0407\u0408\f\17\2\2\u0408\u0409\t"+
- "\n\2\2\u0409\u0429\5\u00a4S\20\u040a\u040b\f\16\2\2\u040b\u040c\t\13\2"+
- "\2\u040c\u0429\5\u00a4S\17\u040d\u040e\f\r\2\2\u040e\u040f\t\f\2\2\u040f"+
- "\u0429\5\u00a4S\16\u0410\u0411\f\f\2\2\u0411\u0412\t\r\2\2\u0412\u0429"+
- "\5\u00a4S\r\u0413\u0414\f\13\2\2\u0414\u0415\t\16\2\2\u0415\u0429\5\u00a4"+
- "S\f\u0416\u0417\f\t\2\2\u0417\u0418\7x\2\2\u0418\u0429\5\u00a4S\n\u0419"+
- "\u041a\f\b\2\2\u041a\u041b\7w\2\2\u041b\u0429\5\u00a4S\t\u041c\u041d\f"+
- "\7\2\2\u041d\u041e\7$\2\2\u041e\u0429\5\u00a4S\7\u041f\u0420\f\6\2\2\u0420"+
- "\u0421\7\'\2\2\u0421\u0422\5\u00a4S\2\u0422\u0423\7q\2\2\u0423\u0424\5"+
- "\u00a4S\6\u0424\u0429\3\2\2\2\u0425\u0426\f\n\2\2\u0426\u0427\7\21\2\2"+
- "\u0427\u0429\5r:\2\u0428\u0407\3\2\2\2\u0428\u040a\3\2\2\2\u0428\u040d"+
- "\3\2\2\2\u0428\u0410\3\2\2\2\u0428\u0413\3\2\2\2\u0428\u0416\3\2\2\2\u0428"+
- "\u0419\3\2\2\2\u0428\u041c\3\2\2\2\u0428\u041f\3\2\2\2\u0428\u0425\3\2"+
- "\2\2\u0429\u042c\3\2\2\2\u042a\u0428\3\2\2\2\u042a\u042b\3\2\2\2\u042b"+
- "\u00a5\3\2\2\2\u042c\u042a\3\2\2\2\u042d\u0442\5\30\r\2\u042e\u0442\5"+
- "\32\16\2\u042f\u0442\5\u00aaV\2\u0430\u0442\5\u00a8U\2\u0431\u0442\5\u00de"+
- "p\2\u0432\u0442\5\u00fe\u0080\2\u0433\u0442\5\u00f2z\2\u0434\u0442\5\u012a"+
- "\u0096\2\u0435\u0442\5\u0100\u0081\2\u0436\u0442\5\u0102\u0082\2\u0437"+
- "\u0442\5\u0104\u0083\2\u0438\u0442\5\u0106\u0084\2\u0439\u0442\5\u0108"+
- "\u0085\2\u043a\u0442\5\u00eex\2\u043b\u0442\5\u010a\u0086\2\u043c\u0442"+
- "\5\u010c\u0087\2\u043d\u0442\5\u011e\u0090\2\u043e\u0442\5\u00acW\2\u043f"+
- "\u0442\5\u00b0Y\2\u0440\u0442\5x=\2\u0441\u042d\3\2\2\2\u0441\u042e\3"+
- "\2\2\2\u0441\u042f\3\2\2\2\u0441\u0430\3\2\2\2\u0441\u0431\3\2\2\2\u0441"+
- "\u0432\3\2\2\2\u0441\u0433\3\2\2\2\u0441\u0434\3\2\2\2\u0441\u0435\3\2"+
- "\2\2\u0441\u0436\3\2\2\2\u0441\u0437\3\2\2\2\u0441\u0438\3\2\2\2\u0441"+
- "\u0439\3\2\2\2\u0441\u043a\3\2\2\2\u0441\u043b\3\2\2\2\u0441\u043c\3\2"+
- "\2\2\u0441\u043d\3\2\2\2\u0441\u043e\3\2\2\2\u0441\u043f\3\2\2\2\u0441"+
- "\u0440\3\2\2\2\u0442\u00a7\3\2\2\2\u0443\u0444\7&\2\2\u0444\u0445\5\u00a4"+
- "S\2\u0445\u00a9\3\2\2\2\u0446\u0447\7Z\2\2\u0447\u0449\5\u00a4S\2\u0448"+
- "\u044a\5\u00eex\2\u0449\u0448\3\2\2\2\u0449\u044a\3\2\2\2\u044a\u00ab"+
- "\3\2\2\2\u044b\u044c\5\u00aeX\2\u044c\u044d\5\u0126\u0094\2\u044d\u00ad"+
- "\3\2\2\2\u044e\u044f\7\16\2\2\u044f\u0450\5\u00a4S\2\u0450\u0451\5\u0170"+
- "\u00b9\2\u0451\u0453\3\2\2\2\u0452\u044e\3\2\2\2\u0453\u0456\3\2\2\2\u0454"+
- "\u0452\3\2\2\2\u0454\u0455\3\2\2\2\u0455\u045b\3\2\2\2\u0456\u0454\3\2"+
- "\2\2\u0457\u0458\7\17\2\2\u0458\u0459\5b\62\2\u0459\u045a\5\u0170\u00b9"+
- "\2\u045a\u045c\3\2\2\2\u045b\u0457\3\2\2\2\u045b\u045c\3\2\2\2\u045c\u00af"+
- "\3\2\2\2\u045d\u045e\7S\2\2\u045e\u0463\5\u00a4S\2\u045f\u0460\7S\2\2"+
- "\u0460\u0461\t\3\2\2\u0461\u0463\5.\30\2\u0462\u045d\3\2\2\2\u0462\u045f"+
- "\3\2\2\2\u0463\u00b1\3\2\2\2\u0464\u046d\7\5\2\2\u0465\u046d\7\6\2\2\u0466"+
- "\u046d\7f\2\2\u0467\u046d\5\u014c\u00a7\2\u0468\u046d\5\u0162\u00b2\2"+
- "\u0469\u046d\7\3\2\2\u046a\u046d\7\u0091\2\2\u046b\u046d\7\u0092\2\2\u046c"+
- "\u0464\3\2\2\2\u046c\u0465\3\2\2\2\u046c\u0466\3\2\2\2\u046c\u0467\3\2"+
- "\2\2\u046c\u0468\3\2\2\2\u046c\u0469\3\2\2\2\u046c\u046a\3\2\2\2\u046c"+
- "\u046b\3\2\2\2\u046d\u00b3\3\2\2\2\u046e\u046f\b[\1\2\u046f\u047b\5\u0148"+
- "\u00a5\2\u0470\u047b\5\u0144\u00a3\2\u0471\u047b\5\u016c\u00b7\2\u0472"+
- "\u047b\5 \21\2\u0473\u047b\5\u0086D\2\u0474\u047b\5\u0084C\2\u0475\u0476"+
- "\t\17\2\2\u0476\u0477\7h\2\2\u0477\u0478\5\u00a4S\2\u0478\u0479\7i\2\2"+
- "\u0479\u047b\3\2\2\2\u047a\u046e\3\2\2\2\u047a\u0470\3\2\2\2\u047a\u0471"+
- "\3\2\2\2\u047a\u0472\3\2\2\2\u047a\u0473\3\2\2\2\u047a\u0474\3\2\2\2\u047a"+
- "\u0475\3\2\2\2\u047b\u0492\3\2\2\2\u047c\u047d\f\13\2\2\u047d\u047e\7"+
- "r\2\2\u047e\u0491\7g\2\2\u047f\u0480\f\n\2\2\u0480\u0491\5\u0166\u00b4"+
- "\2\u0481\u0482\f\t\2\2\u0482\u0491\5\u00ceh\2\u0483\u0484\f\b\2\2\u0484"+
- "\u0491\5L\'\2\u0485\u0486\f\7\2\2\u0486\u0491\5\u0168\u00b5\2\u0487\u0488"+
- "\f\6\2\2\u0488\u0491\5\u016a\u00b6\2\u0489\u048a\f\5\2\2\u048a\u048b\5"+
- "\u016a\u00b6\2\u048b\u048c\7\22\2\2\u048c\u048d\5r:\2\u048d\u0491\3\2"+
- "\2\2\u048e\u048f\f\4\2\2\u048f\u0491\5\u00ba^\2\u0490\u047c\3\2\2\2\u0490"+
- "\u047f\3\2\2\2\u0490\u0481\3\2\2\2\u0490\u0483\3\2\2\2\u0490\u0485\3\2"+
- "\2\2\u0490\u0487\3\2\2\2\u0490\u0489\3\2\2\2\u0490\u048e\3\2\2\2\u0491"+
- "\u0494\3\2\2\2\u0492\u0490\3\2\2\2\u0492\u0493\3\2\2\2\u0493\u00b5\3\2"+
- "\2\2\u0494\u0492\3\2\2\2\u0495\u0496\5^\60\2\u0496\u0497\5\u00b8]\2\u0497"+
- "\u00b7\3\2\2\2\u0498\u049a\7O\2\2\u0499\u049b\7g\2\2\u049a\u0499\3\2\2"+
- "\2\u049a\u049b\3\2\2\2\u049b\u049c\3\2\2\2\u049c\u049e\5\u013e\u00a0\2"+
- "\u049d\u049f\5p9\2\u049e\u049d\3\2\2\2\u049e\u049f\3\2\2\2\u049f\u00b9"+
- "\3\2\2\2\u04a0\u04a2\7(\2\2\u04a1\u04a3\5\u00e6t\2\u04a2\u04a1\3\2\2\2"+
- "\u04a2\u04a3\3\2\2\2\u04a3\u04a5\3\2\2\2\u04a4\u04a6\7o\2\2\u04a5\u04a4"+
- "\3\2\2\2\u04a5\u04a6\3\2\2\2\u04a6\u04a7\3\2\2\2\u04a7\u04a8\7)\2\2\u04a8"+
- "\u00bb\3\2\2\2\u04a9\u04aa\7P\2\2\u04aa\u04b4\7j\2\2\u04ab\u04af\5\u00c0"+
- "a\2\u04ac\u04af\5\u012c\u0097\2\u04ad\u04af\5\u00be`\2\u04ae\u04ab\3\2"+
- "\2\2\u04ae\u04ac\3\2\2\2\u04ae\u04ad\3\2\2\2\u04af\u04b0\3\2\2\2\u04b0"+
- "\u04b1\5\u0170\u00b9\2\u04b1\u04b3\3\2\2\2\u04b2\u04ae\3\2\2\2\u04b3\u04b6"+
- "\3\2\2\2\u04b4\u04b2\3\2\2\2\u04b4\u04b5\3\2\2\2\u04b5\u04b7\3\2\2\2\u04b6"+
- "\u04b4\3\2\2\2\u04b7\u04b8\7k\2\2\u04b8\u00bd\3\2\2\2\u04b9\u04ba\7:\2"+
- "\2\u04ba\u04bb\7g\2\2\u04bb\u04bc\5\u0142\u00a2\2\u04bc\u00bf\3\2\2\2"+
- "\u04bd\u04bf\7\35\2\2\u04be\u04bd\3\2\2\2\u04be\u04bf\3\2\2\2\u04bf\u04c0"+
- "\3\2\2\2\u04c0\u04c1\5^\60\2\u04c1\u04c2\7g\2\2\u04c2\u04c3\5\u0142\u00a2"+
- "\2\u04c3\u04c4\5\u0140\u00a1\2\u04c4\u04cd\3\2\2\2\u04c5\u04c7\7\35\2"+
+ "\4\u00b7\t\u00b7\4\u00b8\t\u00b8\4\u00b9\t\u00b9\4\u00ba\t\u00ba\3\2\3"+
+ "\2\3\2\3\3\3\3\3\3\3\4\3\4\3\4\3\5\3\5\3\5\7\5\u0181\n\5\f\5\16\5\u0184"+
+ "\13\5\3\6\3\6\5\6\u0188\n\6\3\7\3\7\3\7\7\7\u018d\n\7\f\7\16\7\u0190\13"+
+ "\7\3\7\3\7\3\7\3\7\3\7\7\7\u0197\n\7\f\7\16\7\u019a\13\7\3\7\3\7\3\7\5"+
+ "\7\u019f\n\7\3\7\3\7\7\7\u01a3\n\7\f\7\16\7\u01a6\13\7\3\7\3\7\3\b\3\b"+
+ "\3\b\3\t\3\t\3\t\3\n\3\n\3\n\7\n\u01b3\n\n\f\n\16\n\u01b6\13\n\3\n\5\n"+
+ "\u01b9\n\n\3\n\3\n\3\13\3\13\3\13\7\13\u01c0\n\13\f\13\16\13\u01c3\13"+
+ "\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\7\13\u01cc\n\13\f\13\16\13\u01cf"+
+ "\13\13\3\13\5\13\u01d2\n\13\3\f\3\f\3\f\3\f\5\f\u01d8\n\f\3\r\3\r\3\r"+
+ "\3\r\3\r\3\r\3\r\5\r\u01e1\n\r\3\16\3\16\3\17\3\17\3\17\3\20\3\20\3\20"+
+ "\5\20\u01eb\n\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21"+
+ "\3\21\3\21\3\21\3\21\3\21\5\21\u01fd\n\21\3\22\3\22\3\23\3\23\3\23\3\23"+
+ "\3\23\3\24\3\24\3\24\7\24\u0209\n\24\f\24\16\24\u020c\13\24\3\24\5\24"+
+ "\u020f\n\24\3\25\3\25\3\25\7\25\u0214\n\25\f\25\16\25\u0217\13\25\3\25"+
+ "\3\25\3\26\7\26\u021c\n\26\f\26\16\26\u021f\13\26\3\27\3\27\3\27\3\27"+
+ "\7\27\u0225\n\27\f\27\16\27\u0228\13\27\3\27\3\27\3\30\3\30\3\31\3\31"+
+ "\3\31\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\33\3\34"+
+ "\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\5\35\u0247\n\35\3\35\3\35"+
+ "\3\35\3\35\3\36\3\36\5\36\u024f\n\36\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$\5$\u026c\n$"+
+ "\3$\3$\3%\3%\3%\3%\3%\3%\3%\3&\3&\3&\3&\3&\3&\7&\u027d\n&\f&\16&\u0280"+
+ "\13&\3&\3&\3\'\3\'\3\'\3\'\3(\3(\3(\3(\7(\u028c\n(\f(\16(\u028f\13(\3"+
+ "(\3(\3)\3)\3)\3)\3*\3*\3*\3*\5*\u029b\n*\3+\3+\3+\3+\3+\7+\u02a2\n+\f"+
+ "+\16+\u02a5\13+\3+\3+\3,\3,\3,\3,\3,\3,\3,\3,\3,\5,\u02b2\n,\3-\3-\3-"+
+ "\3-\3-\7-\u02b9\n-\f-\16-\u02bc\13-\3-\3-\3.\3.\3.\3.\3.\7.\u02c5\n.\f"+
+ ".\16.\u02c8\13.\3.\3.\3/\3/\3/\3/\3/\3\60\3\60\3\60\3\60\3\60\3\60\3\60"+
+ "\3\60\3\60\3\60\3\60\5\60\u02dc\n\60\3\61\3\61\3\61\3\61\3\61\5\61\u02e3"+
+ "\n\61\3\61\7\61\u02e6\n\61\f\61\16\61\u02e9\13\61\3\61\3\61\5\61\u02ed"+
+ "\n\61\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\5\62\u02f7\n\62\3\63\5\63"+
+ "\u02fa\n\63\3\63\3\63\5\63\u02fe\n\63\3\64\3\64\5\64\u0302\n\64\3\65\3"+
+ "\65\3\65\3\65\7\65\u0308\n\65\f\65\16\65\u030b\13\65\3\65\3\65\3\66\3"+
+ "\66\3\66\5\66\u0312\n\66\3\67\3\67\3\67\5\67\u0317\n\67\38\38\38\38\3"+
+ "8\38\58\u031f\n8\58\u0321\n8\38\38\38\58\u0326\n8\39\39\39\79\u032b\n"+
+ "9\f9\169\u032e\139\3:\3:\3:\3:\3:\5:\u0335\n:\3:\5:\u0338\n:\3:\3:\3;"+
+ "\3;\5;\u033e\n;\3;\3;\3;\5;\u0343\n;\5;\u0345\n;\3;\5;\u0348\n;\3<\3<"+
+ "\3<\7<\u034d\n<\f<\16<\u0350\13<\3=\3=\5=\u0354\n=\3=\3=\3>\3>\3>\3>\3"+
+ ">\3>\3?\3?\3?\3?\3?\3?\3?\7?\u0365\n?\f?\16?\u0368\13?\3?\3?\3?\7?\u036d"+
+ "\n?\f?\16?\u0370\13?\3?\5?\u0373\n?\3@\5@\u0376\n@\3@\3@\3@\3@\5@\u037c"+
+ "\n@\3A\3A\5A\u0380\nA\3A\5A\u0383\nA\3A\3A\3A\3B\3B\3B\3B\3B\5B\u038d"+
+ "\nB\3C\3C\3C\3C\3C\5C\u0394\nC\3D\3D\3D\3D\3D\5D\u039b\nD\3D\3D\3E\3E"+
+ "\3E\3E\3E\3F\3F\3F\5F\u03a7\nF\3G\3G\3G\3G\5G\u03ad\nG\3H\3H\3H\3H\3H"+
+ "\5H\u03b4\nH\3I\3I\3I\5I\u03b9\nI\3J\3J\3J\3J\5J\u03bf\nJ\3K\3K\3K\3K"+
+ "\3K\3L\3L\3L\3L\3L\5L\u03cb\nL\3M\3M\3M\3M\5M\u03d1\nM\3M\3M\5M\u03d5"+
+ "\nM\3N\3N\3N\3N\3O\3O\5O\u03dd\nO\3O\3O\5O\u03e1\nO\3O\3O\3P\3P\5P\u03e7"+
+ "\nP\3Q\5Q\u03ea\nQ\3Q\3Q\3R\3R\5R\u03f0\nR\3R\3R\3S\5S\u03f5\nS\3S\3S"+
+ "\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\5T\u040e"+
+ "\nT\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T"+
+ "\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\3T\7T\u0431\nT\fT\16T\u0434\13T\3U\3U\3"+
+ "U\3U\3U\3U\3U\3U\3U\3U\3U\3U\3U\3U\3U\3U\3U\3U\3U\3U\5U\u044a\nU\3V\3"+
+ "V\3V\3W\3W\3W\5W\u0452\nW\3X\3X\3X\3Y\3Y\3Y\3Y\7Y\u045b\nY\fY\16Y\u045e"+
+ "\13Y\3Y\3Y\3Y\3Y\5Y\u0464\nY\3Z\3Z\3Z\3Z\3Z\5Z\u046b\nZ\3[\3[\3[\3[\3"+
+ "[\3[\3[\3[\5[\u0475\n[\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\"+
+ "\5\\\u0483\n\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3\\"+
+ "\3\\\3\\\3\\\3\\\3\\\3\\\7\\\u0499\n\\\f\\\16\\\u049c\13\\\3]\3]\3]\3"+
+ "^\3^\5^\u04a3\n^\3^\3^\5^\u04a7\n^\3_\3_\5_\u04ab\n_\3_\5_\u04ae\n_\3"+
+ "_\3_\3`\3`\3`\3`\3`\5`\u04b7\n`\3`\3`\7`\u04bb\n`\f`\16`\u04be\13`\3`"+
+ "\3`\3a\3a\3a\3a\3b\5b\u04c7\nb\3b\3b\3b\3b\3b\3b\5b\u04cf\nb\3b\3b\3b"+
+ "\3b\5b\u04d5\nb\3c\3c\3c\3c\3c\3c\3c\5c\u04de\nc\3d\3d\3d\3d\3d\3d\3d"+
+ "\3d\3d\5d\u04e9\nd\3e\3e\3e\3f\3f\3f\3f\7f\u04f2\nf\ff\16f\u04f5\13f\3"+
+ "f\5f\u04f8\nf\5f\u04fa\nf\3f\3f\3g\3g\3g\3g\3g\3g\3g\5g\u0505\ng\3h\3"+
+ "h\3h\3h\3h\3i\3i\5i\u050e\ni\3i\3i\5i\u0512\ni\3i\5i\u0515\ni\3i\3i\3"+
+ "i\3i\3i\5i\u051c\ni\3i\3i\3j\3j\3k\3k\3l\3l\3m\5m\u0527\nm\3m\3m\3n\3"+
+ "n\3n\3n\3n\3n\5n\u0531\nn\3n\3n\3n\3n\5n\u0537\nn\5n\u0539\nn\3o\3o\3"+
+ "o\3p\3p\3q\3q\3q\5q\u0543\nq\3r\3r\3r\3r\3r\3r\7r\u054b\nr\fr\16r\u054e"+
+ "\13r\3r\5r\u0551\nr\3s\3s\5s\u0555\ns\3s\3s\5s\u0559\ns\3t\3t\3t\7t\u055e"+
+ "\nt\ft\16t\u0561\13t\3u\3u\3u\7u\u0566\nu\fu\16u\u0569\13u\3v\3v\3v\3"+
+ "v\3v\3v\7v\u0571\nv\fv\16v\u0574\13v\3v\5v\u0577\nv\3w\3w\5w\u057b\nw"+
+ "\3w\3w\3x\3x\3x\3x\3x\3x\7x\u0585\nx\fx\16x\u0588\13x\3x\5x\u058b\nx\3"+
+ "y\3y\5y\u058f\ny\3y\3y\3z\5z\u0594\nz\3z\3z\3z\6z\u0599\nz\rz\16z\u059a"+
+ "\3{\3{\3{\3{\3{\5{\u05a2\n{\3|\3|\3}\3}\3}\3}\3~\3~\3~\3\177\3\177\3\177"+
+ "\3\177\3\u0080\3\u0080\3\u0081\3\u0081\3\u0081\5\u0081\u05b6\n\u0081\3"+
+ "\u0082\3\u0082\5\u0082\u05ba\n\u0082\3\u0083\3\u0083\5\u0083\u05be\n\u0083"+
+ "\3\u0084\3\u0084\5\u0084\u05c2\n\u0084\3\u0085\3\u0085\3\u0085\3\u0086"+
+ "\3\u0086\3\u0087\3\u0087\3\u0087\3\u0087\3\u0087\3\u0087\3\u0087\3\u0087"+
+ "\3\u0087\5\u0087\u05d2\n\u0087\3\u0087\3\u0087\3\u0087\3\u0087\5\u0087"+
+ "\u05d8\n\u0087\5\u0087\u05da\n\u0087\3\u0088\3\u0088\5\u0088\u05de\n\u0088"+
+ "\3\u0089\3\u0089\5\u0089\u05e2\n\u0089\3\u0089\5\u0089\u05e5\n\u0089\3"+
+ "\u0089\3\u0089\5\u0089\u05e9\n\u0089\5\u0089\u05eb\n\u0089\3\u0089\3\u0089"+
+ "\7\u0089\u05ef\n\u0089\f\u0089\16\u0089\u05f2\13\u0089\3\u0089\3\u0089"+
+ "\3\u008a\3\u008a\3\u008a\5\u008a\u05f9\n\u008a\3\u008b\3\u008b\3\u008b"+
+ "\5\u008b\u05fe\n\u008b\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c"+
+ "\3\u008c\3\u008c\3\u008c\5\u008c\u0609\n\u008c\3\u008c\3\u008c\7\u008c"+
+ "\u060d\n\u008c\f\u008c\16\u008c\u0610\13\u008c\3\u008c\3\u008c\3\u008d"+
+ "\3\u008d\5\u008d\u0616\n\u008d\3\u008d\3\u008d\3\u008d\3\u008d\3\u008d"+
+ "\3\u008d\3\u008e\3\u008e\3\u008e\5\u008e\u0621\n\u008e\3\u008f\3\u008f"+
+ "\3\u008f\5\u008f\u0626\n\u008f\3\u0090\3\u0090\5\u0090\u062a\n\u0090\3"+
+ "\u0090\3\u0090\3\u0090\5\u0090\u062f\n\u0090\7\u0090\u0631\n\u0090\f\u0090"+
+ "\16\u0090\u0634\13\u0090\3\u0091\3\u0091\3\u0091\7\u0091\u0639\n\u0091"+
+ "\f\u0091\16\u0091\u063c\13\u0091\3\u0091\3\u0091\3\u0092\3\u0092\3\u0092"+
+ "\5\u0092\u0643\n\u0092\3\u0093\3\u0093\3\u0093\5\u0093\u0648\n\u0093\3"+
+ "\u0093\5\u0093\u064b\n\u0093\3\u0094\3\u0094\3\u0094\3\u0094\3\u0094\3"+
+ "\u0094\5\u0094\u0653\n\u0094\3\u0094\3\u0094\3\u0095\3\u0095\3\u0095\3"+
+ "\u0095\5\u0095\u065b\n\u0095\3\u0095\3\u0095\3\u0096\5\u0096\u0660\n\u0096"+
+ "\3\u0096\3\u0096\5\u0096\u0664\n\u0096\3\u0096\3\u0096\5\u0096\u0668\n"+
+ "\u0096\3\u0097\3\u0097\3\u0097\3\u0098\3\u0098\5\u0098\u066f\n\u0098\3"+
+ "\u0099\3\u0099\3\u0099\3\u0099\3\u0099\3\u009a\3\u009a\3\u009b\3\u009b"+
+ "\3\u009c\3\u009c\3\u009c\3\u009d\3\u009d\3\u009d\3\u009d\3\u009e\3\u009e"+
+ "\3\u009e\3\u009e\3\u009e\3\u009e\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f"+
+ "\5\u009f\u068c\n\u009f\3\u009f\3\u009f\3\u00a0\3\u00a0\3\u00a0\3\u00a1"+
+ "\3\u00a1\3\u00a1\3\u00a1\5\u00a1\u0697\n\u00a1\3\u00a2\3\u00a2\5\u00a2"+
+ "\u069b\n\u00a2\3\u00a3\3\u00a3\3\u00a3\3\u00a3\7\u00a3\u06a1\n\u00a3\f"+
+ "\u00a3\16\u00a3\u06a4\13\u00a3\3\u00a3\5\u00a3\u06a7\n\u00a3\5\u00a3\u06a9"+
+ "\n\u00a3\3\u00a3\3\u00a3\3\u00a4\3\u00a4\3\u00a4\3\u00a4\5\u00a4\u06b1"+
+ "\n\u00a4\3\u00a4\3\u00a4\3\u00a5\3\u00a5\3\u00a5\3\u00a5\3\u00a5\5\u00a5"+
+ "\u06ba\n\u00a5\3\u00a6\3\u00a6\3\u00a6\3\u00a6\3\u00a6\3\u00a6\5\u00a6"+
+ "\u06c2\n\u00a6\3\u00a7\3\u00a7\3\u00a7\5\u00a7\u06c7\n\u00a7\3\u00a8\3"+
+ "\u00a8\3\u00a9\3\u00a9\3\u00aa\3\u00aa\3\u00aa\3\u00aa\3\u00ab\3\u00ab"+
+ "\3\u00ab\3\u00ac\3\u00ac\3\u00ac\5\u00ac\u06d7\n\u00ac\5\u00ac\u06d9\n"+
+ "\u00ac\3\u00ac\3\u00ac\3\u00ad\3\u00ad\3\u00ad\7\u00ad\u06e0\n\u00ad\f"+
+ "\u00ad\16\u00ad\u06e3\13\u00ad\3\u00ae\3\u00ae\3\u00ae\5\u00ae\u06e8\n"+
+ "\u00ae\3\u00ae\3\u00ae\3\u00af\3\u00af\5\u00af\u06ee\n\u00af\3\u00b0\3"+
+ "\u00b0\5\u00b0\u06f2\n\u00b0\3\u00b1\3\u00b1\3\u00b1\3\u00b1\3\u00b1\7"+
+ "\u00b1\u06f9\n\u00b1\f\u00b1\16\u00b1\u06fc\13\u00b1\3\u00b1\3\u00b1\3"+
+ "\u00b2\3\u00b2\3\u00b2\3\u00b2\5\u00b2\u0704\n\u00b2\3\u00b2\5\u00b2\u0707"+
+ "\n\u00b2\3\u00b3\3\u00b3\3\u00b4\5\u00b4\u070c\n\u00b4\3\u00b4\3\u00b4"+
+ "\3\u00b5\3\u00b5\3\u00b5\3\u00b5\3\u00b6\3\u00b6\3\u00b6\3\u00b6\3\u00b6"+
+ "\3\u00b7\3\u00b7\3\u00b7\3\u00b7\3\u00b7\5\u00b7\u071e\n\u00b7\5\u00b7"+
+ "\u0720\n\u00b7\3\u00b7\5\u00b7\u0723\n\u00b7\3\u00b7\5\u00b7\u0726\n\u00b7"+
+ "\5\u00b7\u0728\n\u00b7\3\u00b7\3\u00b7\3\u00b8\3\u00b8\3\u00b8\3\u00b8"+
+ "\3\u00b9\3\u00b9\3\u00ba\3\u00ba\3\u00ba\3\u00ba\5\u00ba\u0736\n\u00ba"+
+ "\3\u00ba\3\u02e7\4\u00a6\u00b6\u00bb\2\4\6\b\n\f\16\20\22\24\26\30\32"+
+ "\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0080"+
+ "\u0082\u0084\u0086\u0088\u008a\u008c\u008e\u0090\u0092\u0094\u0096\u0098"+
+ "\u009a\u009c\u009e\u00a0\u00a2\u00a4\u00a6\u00a8\u00aa\u00ac\u00ae\u00b0"+
+ "\u00b2\u00b4\u00b6\u00b8\u00ba\u00bc\u00be\u00c0\u00c2\u00c4\u00c6\u00c8"+
+ "\u00ca\u00cc\u00ce\u00d0\u00d2\u00d4\u00d6\u00d8\u00da\u00dc\u00de\u00e0"+
+ "\u00e2\u00e4\u00e6\u00e8\u00ea\u00ec\u00ee\u00f0\u00f2\u00f4\u00f6\u00f8"+
+ "\u00fa\u00fc\u00fe\u0100\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110"+
+ "\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128"+
+ "\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0138\u013a\u013c\u013e\u0140"+
+ "\u0142\u0144\u0146\u0148\u014a\u014c\u014e\u0150\u0152\u0154\u0156\u0158"+
+ "\u015a\u015c\u015e\u0160\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170"+
+ "\u0172\2\25\4\2hhss\3\2\31\32\3\2\7\n\3\2DE\3\2*,\4\2*,..\3\2\u0086\u008c"+
+ "\3\2\26\27\4\2\u0081\u0085\u008a\u008b\6\2%%tt\u0080\u0080\u0087\u0089"+
+ "\3\2!#\3\2\36 \4\2KLz\177\6\2//\62\62\65\65``\4\2\u0080\u0085\u0087\u008b"+
+ "\3\2tu\4\2qq\u00a2\u00a2\4\2\u008d\u0090\u0092\u0093\3\2\u0099\u009a\2"+
+ "\u079c\2\u0174\3\2\2\2\4\u0177\3\2\2\2\6\u017a\3\2\2\2\b\u017d\3\2\2\2"+
+ "\n\u0185\3\2\2\2\f\u018e\3\2\2\2\16\u01a9\3\2\2\2\20\u01ac\3\2\2\2\22"+
+ "\u01b4\3\2\2\2\24\u01c1\3\2\2\2\26\u01d7\3\2\2\2\30\u01e0\3\2\2\2\32\u01e2"+
+ "\3\2\2\2\34\u01e4\3\2\2\2\36\u01e7\3\2\2\2 \u01fc\3\2\2\2\"\u01fe\3\2"+
+ "\2\2$\u0200\3\2\2\2&\u0205\3\2\2\2(\u0210\3\2\2\2*\u021d\3\2\2\2,\u0220"+
+ "\3\2\2\2.\u022b\3\2\2\2\60\u022d\3\2\2\2\62\u0232\3\2\2\2\64\u0237\3\2"+
+ "\2\2\66\u023c\3\2\2\28\u0241\3\2\2\2:\u024e\3\2\2\2<\u0250\3\2\2\2>\u0252"+
+ "\3\2\2\2@\u0257\3\2\2\2B\u025c\3\2\2\2D\u0261\3\2\2\2F\u0266\3\2\2\2H"+
+ "\u026f\3\2\2\2J\u0276\3\2\2\2L\u0283\3\2\2\2N\u0287\3\2\2\2P\u0292\3\2"+
+ "\2\2R\u029a\3\2\2\2T\u029c\3\2\2\2V\u02b1\3\2\2\2X\u02b3\3\2\2\2Z\u02bf"+
+ "\3\2\2\2\\\u02cb\3\2\2\2^\u02db\3\2\2\2`\u02e7\3\2\2\2b\u02f6\3\2\2\2"+
+ "d\u02f9\3\2\2\2f\u0301\3\2\2\2h\u0303\3\2\2\2j\u030e\3\2\2\2l\u0316\3"+
+ "\2\2\2n\u0325\3\2\2\2p\u0327\3\2\2\2r\u032f\3\2\2\2t\u033d\3\2\2\2v\u0349"+
+ "\3\2\2\2x\u0353\3\2\2\2z\u0357\3\2\2\2|\u035d\3\2\2\2~\u0375\3\2\2\2\u0080"+
+ "\u037d\3\2\2\2\u0082\u038c\3\2\2\2\u0084\u038e\3\2\2\2\u0086\u0395\3\2"+
+ "\2\2\u0088\u039e\3\2\2\2\u008a\u03a3\3\2\2\2\u008c\u03a8\3\2\2\2\u008e"+
+ "\u03ae\3\2\2\2\u0090\u03b5\3\2\2\2\u0092\u03ba\3\2\2\2\u0094\u03c0\3\2"+
+ "\2\2\u0096\u03c5\3\2\2\2\u0098\u03cc\3\2\2\2\u009a\u03d6\3\2\2\2\u009c"+
+ "\u03da\3\2\2\2\u009e\u03e6\3\2\2\2\u00a0\u03e9\3\2\2\2\u00a2\u03ed\3\2"+
+ "\2\2\u00a4\u03f4\3\2\2\2\u00a6\u040d\3\2\2\2\u00a8\u0449\3\2\2\2\u00aa"+
+ "\u044b\3\2\2\2\u00ac\u044e\3\2\2\2\u00ae\u0453\3\2\2\2\u00b0\u045c\3\2"+
+ "\2\2\u00b2\u046a\3\2\2\2\u00b4\u0474\3\2\2\2\u00b6\u0482\3\2\2\2\u00b8"+
+ "\u049d\3\2\2\2\u00ba\u04a0\3\2\2\2\u00bc\u04a8\3\2\2\2\u00be\u04b1\3\2"+
+ "\2\2\u00c0\u04c1\3\2\2\2\u00c2\u04d4\3\2\2\2\u00c4\u04dd\3\2\2\2\u00c6"+
+ "\u04e8\3\2\2\2\u00c8\u04ea\3\2\2\2\u00ca\u04ed\3\2\2\2\u00cc\u0504\3\2"+
+ "\2\2\u00ce\u0506\3\2\2\2\u00d0\u050b\3\2\2\2\u00d2\u051f\3\2\2\2\u00d4"+
+ "\u0521\3\2\2\2\u00d6\u0523\3\2\2\2\u00d8\u0526\3\2\2\2\u00da\u0530\3\2"+
+ "\2\2\u00dc\u053a\3\2\2\2\u00de\u053d\3\2\2\2\u00e0\u0542\3\2\2\2\u00e2"+
+ "\u0544\3\2\2\2\u00e4\u0552\3\2\2\2\u00e6\u055a\3\2\2\2\u00e8\u0562\3\2"+
+ "\2\2\u00ea\u056a\3\2\2\2\u00ec\u0578\3\2\2\2\u00ee\u057e\3\2\2\2\u00f0"+
+ "\u058c\3\2\2\2\u00f2\u0598\3\2\2\2\u00f4\u05a1\3\2\2\2\u00f6\u05a3\3\2"+
+ "\2\2\u00f8\u05a5\3\2\2\2\u00fa\u05a9\3\2\2\2\u00fc\u05ac\3\2\2\2\u00fe"+
+ "\u05b0\3\2\2\2\u0100\u05b2\3\2\2\2\u0102\u05b7\3\2\2\2\u0104\u05bb\3\2"+
+ "\2\2\u0106\u05bf\3\2\2\2\u0108\u05c3\3\2\2\2\u010a\u05c6\3\2\2\2\u010c"+
+ "\u05c8\3\2\2\2\u010e\u05dd\3\2\2\2\u0110\u05df\3\2\2\2\u0112\u05f5\3\2"+
+ "\2\2\u0114\u05fd\3\2\2\2\u0116\u05ff\3\2\2\2\u0118\u0615\3\2\2\2\u011a"+
+ "\u061d\3\2\2\2\u011c\u0625\3\2\2\2\u011e\u0629\3\2\2\2\u0120\u0635\3\2"+
+ "\2\2\u0122\u063f\3\2\2\2\u0124\u064a\3\2\2\2\u0126\u0652\3\2\2\2\u0128"+
+ "\u0656\3\2\2\2\u012a\u065f\3\2\2\2\u012c\u0669\3\2\2\2\u012e\u066e\3\2"+
+ "\2\2\u0130\u0670\3\2\2\2\u0132\u0675\3\2\2\2\u0134\u0677\3\2\2\2\u0136"+
+ "\u0679\3\2\2\2\u0138\u067c\3\2\2\2\u013a\u0680\3\2\2\2\u013c\u068b\3\2"+
+ "\2\2\u013e\u068f\3\2\2\2\u0140\u0696\3\2\2\2\u0142\u069a\3\2\2\2\u0144"+
+ "\u069c\3\2\2\2\u0146\u06ac\3\2\2\2\u0148\u06b9\3\2\2\2\u014a\u06c1\3\2"+
+ "\2\2\u014c\u06c6\3\2\2\2\u014e\u06c8\3\2\2\2\u0150\u06ca\3\2\2\2\u0152"+
+ "\u06cc\3\2\2\2\u0154\u06d0\3\2\2\2\u0156\u06d3\3\2\2\2\u0158\u06dc\3\2"+
+ "\2\2\u015a\u06e7\3\2\2\2\u015c\u06ed\3\2\2\2\u015e\u06f1\3\2\2\2\u0160"+
+ "\u06f3\3\2\2\2\u0162\u0703\3\2\2\2\u0164\u0708\3\2\2\2\u0166\u070b\3\2"+
+ "\2\2\u0168\u070f\3\2\2\2\u016a\u0713\3\2\2\2\u016c\u0718\3\2\2\2\u016e"+
+ "\u072b\3\2\2\2\u0170\u072f\3\2\2\2\u0172\u0735\3\2\2\2\u0174\u0175\5\u00a6"+
+ "T\2\u0175\u0176\7\2\2\3\u0176\3\3\2\2\2\u0177\u0178\5\u00a8U\2\u0178\u0179"+
+ "\7\2\2\3\u0179\5\3\2\2\2\u017a\u017b\5\u00c4c\2\u017b\u017c\7\2\2\3\u017c"+
+ "\7\3\2\2\2\u017d\u0182\5\n\6\2\u017e\u017f\7p\2\2\u017f\u0181\5\n\6\2"+
+ "\u0180\u017e\3\2\2\2\u0181\u0184\3\2\2\2\u0182\u0180\3\2\2\2\u0182\u0183"+
+ "\3\2\2\2\u0183\t\3\2\2\2\u0184\u0182\3\2\2\2\u0185\u0187\7h\2\2\u0186"+
+ "\u0188\7?\2\2\u0187\u0186\3\2\2\2\u0187\u0188\3\2\2\2\u0188\13\3\2\2\2"+
+ "\u0189\u018a\5\16\b\2\u018a\u018b\5\u0172\u00ba\2\u018b\u018d\3\2\2\2"+
+ "\u018c\u0189\3\2\2\2\u018d\u0190\3\2\2\2\u018e\u018c\3\2\2\2\u018e\u018f"+
+ "\3\2\2\2\u018f\u0191\3\2\2\2\u0190\u018e\3\2\2\2\u0191\u0192\5\u00dco"+
+ "\2\u0192\u0198\5\u0172\u00ba\2\u0193\u0194\5\24\13\2\u0194\u0195\5\u0172"+
+ "\u00ba\2\u0195\u0197\3\2\2\2\u0196\u0193\3\2\2\2\u0197\u019a\3\2\2\2\u0198"+
+ "\u0196\3\2\2\2\u0198\u0199\3\2\2\2\u0199\u01a4\3\2\2\2\u019a\u0198\3\2"+
+ "\2\2\u019b\u019f\5\u008aF\2\u019c\u019f\5\u00e0q\2\u019d\u019f\5\26\f"+
+ "\2\u019e\u019b\3\2\2\2\u019e\u019c\3\2\2\2\u019e\u019d\3\2\2\2\u019f\u01a0"+
+ "\3\2\2\2\u01a0\u01a1\5\u0172\u00ba\2\u01a1\u01a3\3\2\2\2\u01a2\u019e\3"+
+ "\2\2\2\u01a3\u01a6\3\2\2\2\u01a4\u01a2\3\2\2\2\u01a4\u01a5\3\2\2\2\u01a5"+
+ "\u01a7\3\2\2\2\u01a6\u01a4\3\2\2\2\u01a7\u01a8\7\2\2\3\u01a8\r\3\2\2\2"+
+ "\u01a9\u01aa\7H\2\2\u01aa\u01ab\5\u00a6T\2\u01ab\17\3\2\2\2\u01ac\u01ad"+
+ "\7I\2\2\u01ad\u01ae\5\u00a6T\2\u01ae\21\3\2\2\2\u01af\u01b0\5\20\t\2\u01b0"+
+ "\u01b1\5\u0172\u00ba\2\u01b1\u01b3\3\2\2\2\u01b2\u01af\3\2\2\2\u01b3\u01b6"+
+ "\3\2\2\2\u01b4\u01b2\3\2\2\2\u01b4\u01b5\3\2\2\2\u01b5\u01b8\3\2\2\2\u01b6"+
+ "\u01b4\3\2\2\2\u01b7\u01b9\t\2\2\2\u01b8\u01b7\3\2\2\2\u01b8\u01b9\3\2"+
+ "\2\2\u01b9\u01ba\3\2\2\2\u01ba\u01bb\5\u00dep\2\u01bb\23\3\2\2\2\u01bc"+
+ "\u01bd\5\20\t\2\u01bd\u01be\5\u0172\u00ba\2\u01be\u01c0\3\2\2\2\u01bf"+
+ "\u01bc\3\2\2\2\u01c0\u01c3\3\2\2\2\u01c1\u01bf\3\2\2\2\u01c1\u01c2\3\2"+
+ "\2\2\u01c2\u01d1\3\2\2\2\u01c3\u01c1\3\2\2\2\u01c4\u01c5\7d\2\2\u01c5"+
+ "\u01d2\5\22\n\2\u01c6\u01c7\7d\2\2\u01c7\u01cd\7i\2\2\u01c8\u01c9\5\22"+
+ "\n\2\u01c9\u01ca\5\u0172\u00ba\2\u01ca\u01cc\3\2\2\2\u01cb\u01c8\3\2\2"+
+ "\2\u01cc\u01cf\3\2\2\2\u01cd\u01cb\3\2\2\2\u01cd\u01ce\3\2\2\2\u01ce\u01d0"+
+ "\3\2\2\2\u01cf\u01cd\3\2\2\2\u01d0\u01d2\7j\2\2\u01d1\u01c4\3\2\2\2\u01d1"+
+ "\u01c6\3\2\2\2\u01d2\25\3\2\2\2\u01d3\u01d8\5|?\2\u01d4\u01d8\5\u0092"+
+ "J\2\u01d5\u01d8\5\u0096L\2\u01d6\u01d8\5\u0090I\2\u01d7\u01d3\3\2\2\2"+
+ "\u01d7\u01d4\3\2\2\2\u01d7\u01d5\3\2\2\2\u01d7\u01d6\3\2\2\2\u01d8\27"+
+ "\3\2\2\2\u01d9\u01da\7\35\2\2\u01da\u01e1\5\u00a8U\2\u01db\u01dc\t\3\2"+
+ "\2\u01dc\u01e1\5.\30\2\u01dd\u01de\t\4\2\2\u01de\u01e1\5\u00a6T\2\u01df"+
+ "\u01e1\5h\65\2\u01e0\u01d9\3\2\2\2\u01e0\u01db\3\2\2\2\u01e0\u01dd\3\2"+
+ "\2\2\u01e0\u01df\3\2\2\2\u01e1\31\3\2\2\2\u01e2\u01e3\5\34\17\2\u01e3"+
+ "\33\3\2\2\2\u01e4\u01e5\5`\61\2\u01e5\u01e6\5\36\20\2\u01e6\35\3\2\2\2"+
+ "\u01e7\u01e8\7G\2\2\u01e8\u01ea\7i\2\2\u01e9\u01eb\5\u00f2z\2\u01ea\u01e9"+
+ "\3\2\2\2\u01ea\u01eb\3\2\2\2\u01eb\u01ec\3\2\2\2\u01ec\u01ed\7j\2\2\u01ed"+
+ "\37\3\2\2\2\u01ee\u01fd\5H%\2\u01ef\u01fd\5F$\2\u01f0\u01fd\5D#\2\u01f1"+
+ "\u01fd\5$\23\2\u01f2\u01fd\5@!\2\u01f3\u01fd\5B\"\2\u01f4\u01fd\58\35"+
+ "\2\u01f5\u01fd\5> \2\u01f6\u01fd\5\66\34\2\u01f7\u01fd\5\62\32\2\u01f8"+
+ "\u01fd\5\60\31\2\u01f9\u01fd\5\64\33\2\u01fa\u01fd\5\"\22\2\u01fb\u01fd"+
+ "\5J&\2\u01fc\u01ee\3\2\2\2\u01fc\u01ef\3\2\2\2\u01fc\u01f0\3\2\2\2\u01fc"+
+ "\u01f1\3\2\2\2\u01fc\u01f2\3\2\2\2\u01fc\u01f3\3\2\2\2\u01fc\u01f4\3\2"+
+ "\2\2\u01fc\u01f5\3\2\2\2\u01fc\u01f6\3\2\2\2\u01fc\u01f7\3\2\2\2\u01fc"+
+ "\u01f8\3\2\2\2\u01fc\u01f9\3\2\2\2\u01fc\u01fa\3\2\2\2\u01fc\u01fb\3\2"+
+ "\2\2\u01fd!\3\2\2\2\u01fe\u01ff\t\5\2\2\u01ff#\3\2\2\2\u0200\u0201\7a"+
+ "\2\2\u0201\u0202\7m\2\2\u0202\u0203\5\u00c4c\2\u0203\u0204\7n\2\2\u0204"+
+ "%\3\2\2\2\u0205\u020a\5(\25\2\u0206\u0207\7p\2\2\u0207\u0209\5(\25\2\u0208"+
+ "\u0206\3\2\2\2\u0209\u020c\3\2\2\2\u020a\u0208\3\2\2\2\u020a\u020b\3\2"+
+ "\2\2\u020b\u020e\3\2\2\2\u020c\u020a\3\2\2\2\u020d\u020f\7p\2\2\u020e"+
+ "\u020d\3\2\2\2\u020e\u020f\3\2\2\2\u020f\'\3\2\2\2\u0210\u0215\7h\2\2"+
+ "\u0211\u0212\7p\2\2\u0212\u0214\7h\2\2\u0213\u0211\3\2\2\2\u0214\u0217"+
+ "\3\2\2\2\u0215\u0213\3\2\2\2\u0215\u0216\3\2\2\2\u0216\u0218\3\2\2\2\u0217"+
+ "\u0215\3\2\2\2\u0218\u0219\5\u0134\u009b\2\u0219)\3\2\2\2\u021a\u021c"+
+ "\5,\27\2\u021b\u021a\3\2\2\2\u021c\u021f\3\2\2\2\u021d\u021b\3\2\2\2\u021d"+
+ "\u021e\3\2\2\2\u021e+\3\2\2\2\u021f\u021d\3\2\2\2\u0220\u0221\7k\2\2\u0221"+
+ "\u0226\5\u00a6T\2\u0222\u0223\7p\2\2\u0223\u0225\5\u00a6T\2\u0224\u0222"+
+ "\3\2\2\2\u0225\u0228\3\2\2\2\u0226\u0224\3\2\2\2\u0226\u0227\3\2\2\2\u0227"+
+ "\u0229\3\2\2\2\u0228\u0226\3\2\2\2\u0229\u022a\7l\2\2\u022a-\3\2\2\2\u022b"+
+ "\u022c\5\u00b6\\\2\u022c/\3\2\2\2\u022d\u022e\7\63\2\2\u022e\u022f\7i"+
+ "\2\2\u022f\u0230\5\u00a6T\2\u0230\u0231\7j\2\2\u0231\61\3\2\2\2\u0232"+
+ "\u0233\79\2\2\u0233\u0234\7m\2\2\u0234\u0235\5\u00c4c\2\u0235\u0236\7"+
+ "n\2\2\u0236\63\3\2\2\2\u0237\u0238\7\64\2\2\u0238\u0239\7i\2\2\u0239\u023a"+
+ "\5\u00a6T\2\u023a\u023b\7j\2\2\u023b\65\3\2\2\2\u023c\u023d\t\6\2\2\u023d"+
+ "\u023e\7i\2\2\u023e\u023f\5\u00a6T\2\u023f\u0240\7j\2\2\u0240\67\3\2\2"+
+ "\2\u0241\u0246\7\23\2\2\u0242\u0243\7m\2\2\u0243\u0244\5:\36\2\u0244\u0245"+
+ "\7n\2\2\u0245\u0247\3\2\2\2\u0246\u0242\3\2\2\2\u0246\u0247\3\2\2\2\u0247"+
+ "\u0248\3\2\2\2\u0248\u0249\7i\2\2\u0249\u024a\5\u00a6T\2\u024a\u024b\7"+
+ "j\2\2\u024b9\3\2\2\2\u024c\u024f\5<\37\2\u024d\u024f\7\25\2\2\u024e\u024c"+
+ "\3\2\2\2\u024e\u024d\3\2\2\2\u024f;\3\2\2\2\u0250\u0251\7h\2\2\u0251="+
+ "\3\2\2\2\u0252\u0253\7\24\2\2\u0253\u0254\7i\2\2\u0254\u0255\5\u00a6T"+
+ "\2\u0255\u0256\7j\2\2\u0256?\3\2\2\2\u0257\u0258\7<\2\2\u0258\u0259\7"+
+ "i\2\2\u0259\u025a\5\u00a6T\2\u025a\u025b\7j\2\2\u025bA\3\2\2\2\u025c\u025d"+
+ "\7=\2\2\u025d\u025e\7i\2\2\u025e\u025f\5\u00a6T\2\u025f\u0260\7j\2\2\u0260"+
+ "C\3\2\2\2\u0261\u0262\7;\2\2\u0262\u0263\7i\2\2\u0263\u0264\5\u00a6T\2"+
+ "\u0264\u0265\7j\2\2\u0265E\3\2\2\2\u0266\u0267\7\30\2\2\u0267\u0268\7"+
+ "i\2\2\u0268\u026b\5\u00a6T\2\u0269\u026a\7p\2\2\u026a\u026c\5\u00a6T\2"+
+ "\u026b\u0269\3\2\2\2\u026b\u026c\3\2\2\2\u026c\u026d\3\2\2\2\u026d\u026e"+
+ "\7j\2\2\u026eG\3\2\2\2\u026f\u0270\t\6\2\2\u0270\u0271\7m\2\2\u0271\u0272"+
+ "\5\u00a6T\2\u0272\u0273\7@\2\2\u0273\u0274\5\u00a6T\2\u0274\u0275\7n\2"+
+ "\2\u0275I\3\2\2\2\u0276\u0277\78\2\2\u0277\u0278\5\u00a6T\2\u0278\u027e"+
+ "\7k\2\2\u0279\u027a\5L\'\2\u027a\u027b\5\u0172\u00ba\2\u027b\u027d\3\2"+
+ "\2\2\u027c\u0279\3\2\2\2\u027d\u0280\3\2\2\2\u027e\u027c\3\2\2\2\u027e"+
+ "\u027f\3\2\2\2\u027f\u0281\3\2\2\2\u0280\u027e\3\2\2\2\u0281\u0282\7l"+
+ "\2\2\u0282K\3\2\2\2\u0283\u0284\5l\67\2\u0284\u0285\7r\2\2\u0285\u0286"+
+ "\5\u00a6T\2\u0286M\3\2\2\2\u0287\u0288\7m\2\2\u0288\u028d\5P)\2\u0289"+
+ "\u028a\7p\2\2\u028a\u028c\5P)\2\u028b\u0289\3\2\2\2\u028c\u028f\3\2\2"+
+ "\2\u028d\u028b\3\2\2\2\u028d\u028e\3\2\2\2\u028e\u0290\3\2\2\2\u028f\u028d"+
+ "\3\2\2\2\u0290\u0291\7n\2\2\u0291O\3\2\2\2\u0292\u0293\5\u00a6T\2\u0293"+
+ "\u0294\7o\2\2\u0294\u0295\5\u00a6T\2\u0295Q\3\2\2\2\u0296\u029b\5^\60"+
+ "\2\u0297\u029b\5\\/\2\u0298\u029b\5T+\2\u0299\u029b\5X-\2\u029a\u0296"+
+ "\3\2\2\2\u029a\u0297\3\2\2\2\u029a\u0298\3\2\2\2\u029a\u0299\3\2\2\2\u029b"+
+ "S\3\2\2\2\u029c\u029d\7\65\2\2\u029d\u02a3\7k\2\2\u029e\u029f\5V,\2\u029f"+
+ "\u02a0\5\u0172\u00ba\2\u02a0\u02a2\3\2\2\2\u02a1\u029e\3\2\2\2\u02a2\u02a5"+
+ "\3\2\2\2\u02a3\u02a1\3\2\2\2\u02a3\u02a4\3\2\2\2\u02a4\u02a6\3\2\2\2\u02a5"+
+ "\u02a3\3\2\2\2\u02a6\u02a7\7l\2\2\u02a7U\3\2\2\2\u02a8\u02a9\7P\2\2\u02a9"+
+ "\u02aa\7h\2\2\u02aa\u02b2\5\u0140\u00a1\2\u02ab\u02ac\7\66\2\2\u02ac\u02ad"+
+ "\7k\2\2\u02ad\u02ae\5\u00a6T\2\u02ae\u02af\5\u0172\u00ba\2\u02af\u02b0"+
+ "\7l\2\2\u02b0\u02b2\3\2\2\2\u02b1\u02a8\3\2\2\2\u02b1\u02ab\3\2\2\2\u02b2"+
+ "W\3\2\2\2\u02b3\u02b4\7\67\2\2\u02b4\u02ba\7k\2\2\u02b5\u02b6\5Z.\2\u02b6"+
+ "\u02b7\5\u0172\u00ba\2\u02b7\u02b9\3\2\2\2\u02b8\u02b5\3\2\2\2\u02b9\u02bc"+
+ "\3\2\2\2\u02ba\u02b8\3\2\2\2\u02ba\u02bb\3\2\2\2\u02bb\u02bd\3\2\2\2\u02bc"+
+ "\u02ba\3\2\2\2\u02bd\u02be\7l\2\2\u02beY\3\2\2\2\u02bf\u02c0\7h\2\2\u02c0"+
+ "\u02c6\7k\2\2\u02c1\u02c2\5\u0162\u00b2\2\u02c2\u02c3\5\u0172\u00ba\2"+
+ "\u02c3\u02c5\3\2\2\2\u02c4\u02c1\3\2\2\2\u02c5\u02c8\3\2\2\2\u02c6\u02c4"+
+ "\3\2\2\2\u02c6\u02c7\3\2\2\2\u02c7\u02c9\3\2\2\2\u02c8\u02c6\3\2\2\2\u02c9"+
+ "\u02ca\7l\2\2\u02ca[\3\2\2\2\u02cb\u02cc\7\35\2\2\u02cc\u02cd\7m\2\2\u02cd"+
+ "\u02ce\7n\2\2\u02ce\u02cf\5\u0134\u009b\2\u02cf]\3\2\2\2\u02d0\u02d1\t"+
+ "\7\2\2\u02d1\u02d2\7m\2\2\u02d2\u02d3\5\u00c4c\2\u02d3\u02d4\7n\2\2\u02d4"+
+ "\u02dc\3\2\2\2\u02d5\u02d6\7-\2\2\u02d6\u02d7\7m\2\2\u02d7\u02d8\5\u00c4"+
+ "c\2\u02d8\u02d9\7n\2\2\u02d9\u02da\5\u00c4c\2\u02da\u02dc\3\2\2\2\u02db"+
+ "\u02d0\3\2\2\2\u02db\u02d5\3\2\2\2\u02dc_\3\2\2\2\u02dd\u02e3\5b\62\2"+
+ "\u02de\u02df\7\20\2\2\u02df\u02e3\b\61\1\2\u02e0\u02e1\7F\2\2\u02e1\u02e3"+
+ "\b\61\1\2\u02e2\u02dd\3\2\2\2\u02e2\u02de\3\2\2\2\u02e2\u02e0\3\2\2\2"+
+ "\u02e3\u02e4\3\2\2\2\u02e4\u02e6\5\u0172\u00ba\2\u02e5\u02e2\3\2\2\2\u02e6"+
+ "\u02e9\3\2\2\2\u02e7\u02e8\3\2\2\2\u02e7\u02e5\3\2\2\2\u02e8\u02ec\3\2"+
+ "\2\2\u02e9\u02e7\3\2\2\2\u02ea\u02eb\7\20\2\2\u02eb\u02ed\b\61\1\2\u02ec"+
+ "\u02ea\3\2\2\2\u02ec\u02ed\3\2\2\2\u02eda\3\2\2\2\u02ee\u02ef\7\13\2\2"+
+ "\u02ef\u02f7\5f\64\2\u02f0\u02f1\7\f\2\2\u02f1\u02f7\5f\64\2\u02f2\u02f3"+
+ "\7\r\2\2\u02f3\u02f7\5f\64\2\u02f4\u02f5\7\17\2\2\u02f5\u02f7\5d\63\2"+
+ "\u02f6\u02ee\3\2\2\2\u02f6\u02f0\3\2\2\2\u02f6\u02f2\3\2\2\2\u02f6\u02f4"+
+ "\3\2\2\2\u02f7c\3\2\2\2\u02f8\u02fa\5\u00e8u\2\u02f9\u02f8\3\2\2\2\u02f9"+
+ "\u02fa\3\2\2\2\u02fa\u02fd\3\2\2\2\u02fb\u02fc\7_\2\2\u02fc\u02fe\5\u00a6"+
+ "T\2\u02fd\u02fb\3\2\2\2\u02fd\u02fe\3\2\2\2\u02fee\3\2\2\2\u02ff\u0302"+
+ "\3\2\2\2\u0300\u0302\5\u00a6T\2\u0301\u02ff\3\2\2\2\u0301\u0300\3\2\2"+
+ "\2\u0302g\3\2\2\2\u0303\u0304\78\2\2\u0304\u0305\5\u00a6T\2\u0305\u0309"+
+ "\7k\2\2\u0306\u0308\5j\66\2\u0307\u0306\3\2\2\2\u0308\u030b\3\2\2\2\u0309"+
+ "\u0307\3\2\2\2\u0309\u030a\3\2\2\2\u030a\u030c\3\2\2\2\u030b\u0309\3\2"+
+ "\2\2\u030c\u030d\7l\2\2\u030di\3\2\2\2\u030e\u030f\5l\67\2\u030f\u0311"+
+ "\7r\2\2\u0310\u0312\5\u00f2z\2\u0311\u0310\3\2\2\2\u0311\u0312\3\2\2\2"+
+ "\u0312k\3\2\2\2\u0313\u0314\7S\2\2\u0314\u0317\5n8\2\u0315\u0317\7O\2"+
+ "\2\u0316\u0313\3\2\2\2\u0316\u0315\3\2\2\2\u0317m\3\2\2\2\u0318\u0319"+
+ "\7\'\2\2\u0319\u0326\7h\2\2\u031a\u031b\5\u00ccg\2\u031b\u0320\7k\2\2"+
+ "\u031c\u031e\5p9\2\u031d\u031f\7p\2\2\u031e\u031d\3\2\2\2\u031e\u031f"+
+ "\3\2\2\2\u031f\u0321\3\2\2\2\u0320\u031c\3\2\2\2\u0320\u0321\3\2\2\2\u0321"+
+ "\u0322\3\2\2\2\u0322\u0323\7l\2\2\u0323\u0326\3\2\2\2\u0324\u0326\5\u00a6"+
+ "T\2\u0325\u0318\3\2\2\2\u0325\u031a\3\2\2\2\u0325\u0324\3\2\2\2\u0326"+
+ "o\3\2\2\2\u0327\u032c\5n8\2\u0328\u0329\7p\2\2\u0329\u032b\5n8\2\u032a"+
+ "\u0328\3\2\2\2\u032b\u032e\3\2\2\2\u032c\u032a\3\2\2\2\u032c\u032d\3\2"+
+ "\2\2\u032dq\3\2\2\2\u032e\u032c\3\2\2\2\u032f\u0334\7k\2\2\u0330\u0331"+
+ "\7>\2\2\u0331\u0332\5\u00e6t\2\u0332\u0333\5\u0172\u00ba\2\u0333\u0335"+
+ "\3\2\2\2\u0334\u0330\3\2\2\2\u0334\u0335\3\2\2\2\u0335\u0337\3\2\2\2\u0336"+
+ "\u0338\5\u00f2z\2\u0337\u0336\3\2\2\2\u0337\u0338\3\2\2\2\u0338\u0339"+
+ "\3\2\2\2\u0339\u033a\7l\2\2\u033as\3\2\2\2\u033b\u033e\5\u0152\u00aa\2"+
+ "\u033c\u033e\7h\2\2\u033d\u033b\3\2\2\2\u033d\u033c\3\2\2\2\u033e\u0347"+
+ "\3\2\2\2\u033f\u0344\7k\2\2\u0340\u0342\5v<\2\u0341\u0343\7p\2\2\u0342"+
+ "\u0341\3\2\2\2\u0342\u0343\3\2\2\2\u0343\u0345\3\2\2\2\u0344\u0340\3\2"+
+ "\2\2\u0344\u0345\3\2\2\2\u0345\u0346\3\2\2\2\u0346\u0348\7l\2\2\u0347"+
+ "\u033f\3\2\2\2\u0347\u0348\3\2\2\2\u0348u\3\2\2\2\u0349\u034e\5x=\2\u034a"+
+ "\u034b\7p\2\2\u034b\u034d\5x=\2\u034c\u034a\3\2\2\2\u034d\u0350\3\2\2"+
+ "\2\u034e\u034c\3\2\2\2\u034e\u034f\3\2\2\2\u034fw\3\2\2\2\u0350\u034e"+
+ "\3\2\2\2\u0351\u0352\7h\2\2\u0352\u0354\7r\2\2\u0353\u0351\3\2\2\2\u0353"+
+ "\u0354\3\2\2\2\u0354\u0355\3\2\2\2\u0355\u0356\5\u00a6T\2\u0356y\3\2\2"+
+ "\2\u0357\u0358\7J\2\2\u0358\u0359\5\u00a6T\2\u0359\u035a\7\21\2\2\u035a"+
+ "\u035b\5t;\2\u035b\u035c\5\u00f0y\2\u035c{\3\2\2\2\u035d\u035e\5\u00c4"+
+ "c\2\u035e\u035f\7\21\2\2\u035f\u0372\5\u00c4c\2\u0360\u0366\7k\2\2\u0361"+
+ "\u0362\5\u0084C\2\u0362\u0363\5\u0172\u00ba\2\u0363\u0365\3\2\2\2\u0364"+
+ "\u0361\3\2\2\2\u0365\u0368\3\2\2\2\u0366\u0364\3\2\2\2\u0366\u0367\3\2"+
+ "\2\2\u0367\u036e\3\2\2\2\u0368\u0366\3\2\2\2\u0369\u036a\5~@\2\u036a\u036b"+
+ "\5\u0172\u00ba\2\u036b\u036d\3\2\2\2\u036c\u0369\3\2\2\2\u036d\u0370\3"+
+ "\2\2\2\u036e\u036c\3\2\2\2\u036e\u036f\3\2\2\2\u036f\u0371\3\2\2\2\u0370"+
+ "\u036e\3\2\2\2\u0371\u0373\7l\2\2\u0372\u0360\3\2\2\2\u0372\u0373\3\2"+
+ "\2\2\u0373}\3\2\2\2\u0374\u0376\7\20\2\2\u0375\u0374\3\2\2\2\u0375\u0376"+
+ "\3\2\2\2\u0376\u0377\3\2\2\2\u0377\u0378\5\u0080A\2\u0378\u0379\7h\2\2"+
+ "\u0379\u037b\5\u0140\u00a1\2\u037a\u037c\5\u00f0y\2\u037b\u037a\3\2\2"+
+ "\2\u037b\u037c\3\2\2\2\u037c\177\3\2\2\2\u037d\u037f\7i\2\2\u037e\u0380"+
+ "\7h\2\2\u037f\u037e\3\2\2\2\u037f\u0380\3\2\2\2\u0380\u0382\3\2\2\2\u0381"+
+ "\u0383\7\u008a\2\2\u0382\u0381\3\2\2\2\u0382\u0383\3\2\2\2\u0383\u0384"+
+ "\3\2\2\2\u0384\u0385\5\u012e\u0098\2\u0385\u0386\7j\2\2\u0386\u0081\3"+
+ "\2\2\2\u0387\u038d\5\u00b6\\\2\u0388\u0389\5\u00c4c\2\u0389\u038a\7s\2"+
+ "\2\u038a\u038b\7h\2\2\u038b\u038d\3\2\2\2\u038c\u0387\3\2\2\2\u038c\u0388"+
+ "\3\2\2\2\u038d\u0083\3\2\2\2\u038e\u038f\7:\2\2\u038f\u0390\7h\2\2\u0390"+
+ "\u0393\7v\2\2\u0391\u0394\5\u0082B\2\u0392\u0394\5\u0150\u00a9\2\u0393"+
+ "\u0391\3\2\2\2\u0393\u0392\3\2\2\2\u0394\u0085\3\2\2\2\u0395\u0396\7\61"+
+ "\2\2\u0396\u0397\7i\2\2\u0397\u039a\5\u00c4c\2\u0398\u0399\7p\2\2\u0399"+
+ "\u039b\5\u00e8u\2\u039a\u0398\3\2\2\2\u039a\u039b\3\2\2\2\u039b\u039c"+
+ "\3\2\2\2\u039c\u039d\7j\2\2\u039d\u0087\3\2\2\2\u039e\u039f\7\60\2\2\u039f"+
+ "\u03a0\7i\2\2\u03a0\u03a1\5\u00c4c\2\u03a1\u03a2\7j\2\2\u03a2\u0089\3"+
+ "\2\2\2\u03a3\u03a6\5`\61\2\u03a4\u03a7\5\u008cG\2\u03a5\u03a7\5\u008e"+
+ "H\2\u03a6\u03a4\3\2\2\2\u03a6\u03a5\3\2\2\2\u03a7\u008b\3\2\2\2\u03a8"+
+ "\u03a9\7P\2\2\u03a9\u03aa\7h\2\2\u03aa\u03ac\5\u0140\u00a1\2\u03ab\u03ad"+
+ "\5r:\2\u03ac\u03ab\3\2\2\2\u03ac\u03ad\3\2\2\2\u03ad\u008d\3\2\2\2\u03ae"+
+ "\u03af\7P\2\2\u03af\u03b0\5\u009cO\2\u03b0\u03b1\7h\2\2\u03b1\u03b3\5"+
+ "\u0140\u00a1\2\u03b2\u03b4\5r:\2\u03b3\u03b2\3\2\2\2\u03b3\u03b4\3\2\2"+
+ "\2\u03b4\u008f\3\2\2\2\u03b5\u03b8\7\35\2\2\u03b6\u03b9\5\u008aF\2\u03b7"+
+ "\u03b9\5\u00e0q\2\u03b8\u03b6\3\2\2\2\u03b8\u03b7\3\2\2\2\u03b9\u0091"+
+ "\3\2\2\2\u03ba\u03bb\7:\2\2\u03bb\u03bc\7h\2\2\u03bc\u03be\5\u0144\u00a3"+
+ "\2\u03bd\u03bf\5\u0094K\2\u03be\u03bd\3\2\2\2\u03be\u03bf\3\2\2\2\u03bf"+
+ "\u0093\3\2\2\2\u03c0\u03c1\7k\2\2\u03c1\u03c2\5\u00a6T\2\u03c2\u03c3\5"+
+ "\u0172\u00ba\2\u03c3\u03c4\7l\2\2\u03c4\u0095\3\2\2\2\u03c5\u03c6\7:\2"+
+ "\2\u03c6\u03c7\5\u009cO\2\u03c7\u03c8\7h\2\2\u03c8\u03ca\5\u0144\u00a3"+
+ "\2\u03c9\u03cb\5\u0094K\2\u03ca\u03c9\3\2\2\2\u03ca\u03cb\3\2\2\2\u03cb"+
+ "\u0097\3\2\2\2\u03cc\u03d4\5\b\5\2\u03cd\u03d0\5\u00c4c\2\u03ce\u03cf"+
+ "\7o\2\2\u03cf\u03d1\5\u00e8u\2\u03d0\u03ce\3\2\2\2\u03d0\u03d1\3\2\2\2"+
+ "\u03d1\u03d5\3\2\2\2\u03d2\u03d3\7o\2\2\u03d3\u03d5\5\u00e8u\2\u03d4\u03cd"+
+ "\3\2\2\2\u03d4\u03d2\3\2\2\2\u03d5\u0099\3\2\2\2\u03d6\u03d7\5\b\5\2\u03d7"+
+ "\u03d8\7v\2\2\u03d8\u03d9\5\u00e8u\2\u03d9\u009b\3\2\2\2\u03da\u03dc\7"+
+ "i\2\2\u03db\u03dd\5\n\6\2\u03dc\u03db\3\2\2\2\u03dc\u03dd\3\2\2\2\u03dd"+
+ "\u03de\3\2\2\2\u03de\u03e0\5\u00c4c\2\u03df\u03e1\7p\2\2\u03e0\u03df\3"+
+ "\2\2\2\u03e0\u03e1\3\2\2\2\u03e1\u03e2\3\2\2\2\u03e2\u03e3\7j\2\2\u03e3"+
+ "\u009d\3\2\2\2\u03e4\u03e7\5\u00a0Q\2\u03e5\u03e7\5\u00a2R\2\u03e6\u03e4"+
+ "\3\2\2\2\u03e6\u03e5\3\2\2\2\u03e7\u009f\3\2\2\2\u03e8\u03ea\5\u00e6t"+
+ "\2\u03e9\u03e8\3\2\2\2\u03e9\u03ea\3\2\2\2\u03ea\u03eb\3\2\2\2\u03eb\u03ec"+
+ "\5\u00a4S\2\u03ec\u00a1\3\2\2\2\u03ed\u03ef\7\35\2\2\u03ee\u03f0\5\u00e6"+
+ "t\2\u03ef\u03ee\3\2\2\2\u03ef\u03f0\3\2\2\2\u03f0\u03f1\3\2\2\2\u03f1"+
+ "\u03f2\5\u00a4S\2\u03f2\u00a3\3\2\2\2\u03f3\u03f5\7w\2\2\u03f4\u03f3\3"+
+ "\2\2\2\u03f4\u03f5\3\2\2\2\u03f5\u03f6\3\2\2\2\u03f6\u03f7\5\u00c4c\2"+
+ "\u03f7\u00a5\3\2\2\2\u03f8\u03f9\bT\1\2\u03f9\u03fa\t\b\2\2\u03fa\u040e"+
+ "\5\u00a6T\21\u03fb\u040e\5\u00b6\\\2\u03fc\u03fd\7\33\2\2\u03fd\u03fe"+
+ "\5.\30\2\u03fe\u03ff\7\36\2\2\u03ff\u0400\5\u00a6T\5\u0400\u040e\3\2\2"+
+ "\2\u0401\u0402\7\34\2\2\u0402\u0403\5\u009aN\2\u0403\u0404\7\36\2\2\u0404"+
+ "\u0405\5\u00a6T\4\u0405\u040e\3\2\2\2\u0406\u0407\t\t\2\2\u0407\u0408"+
+ "\5&\24\2\u0408\u0409\7r\2\2\u0409\u040a\7r\2\2\u040a\u040b\5*\26\2\u040b"+
+ "\u040c\5\u00a6T\3\u040c\u040e\3\2\2\2\u040d\u03f8\3\2\2\2\u040d\u03fb"+
+ "\3\2\2\2\u040d\u03fc\3\2\2\2\u040d\u0401\3\2\2\2\u040d\u0406\3\2\2\2\u040e"+
+ "\u0432\3\2\2\2\u040f\u0410\f\17\2\2\u0410\u0411\t\n\2\2\u0411\u0431\5"+
+ "\u00a6T\20\u0412\u0413\f\16\2\2\u0413\u0414\t\13\2\2\u0414\u0431\5\u00a6"+
+ "T\17\u0415\u0416\f\r\2\2\u0416\u0417\t\f\2\2\u0417\u0431\5\u00a6T\16\u0418"+
+ "\u0419\f\f\2\2\u0419\u041a\t\r\2\2\u041a\u0431\5\u00a6T\r\u041b\u041c"+
+ "\f\13\2\2\u041c\u041d\t\16\2\2\u041d\u0431\5\u00a6T\f\u041e\u041f\f\t"+
+ "\2\2\u041f\u0420\7y\2\2\u0420\u0431\5\u00a6T\n\u0421\u0422\f\b\2\2\u0422"+
+ "\u0423\7x\2\2\u0423\u0431\5\u00a6T\t\u0424\u0425\f\7\2\2\u0425\u0426\7"+
+ "$\2\2\u0426\u0431\5\u00a6T\7\u0427\u0428\f\6\2\2\u0428\u0429\7\'\2\2\u0429"+
+ "\u042a\5\u00a6T\2\u042a\u042b\7r\2\2\u042b\u042c\5\u00a6T\6\u042c\u0431"+
+ "\3\2\2\2\u042d\u042e\f\n\2\2\u042e\u042f\7\21\2\2\u042f\u0431\5t;\2\u0430"+
+ "\u040f\3\2\2\2\u0430\u0412\3\2\2\2\u0430\u0415\3\2\2\2\u0430\u0418\3\2"+
+ "\2\2\u0430\u041b\3\2\2\2\u0430\u041e\3\2\2\2\u0430\u0421\3\2\2\2\u0430"+
+ "\u0424\3\2\2\2\u0430\u0427\3\2\2\2\u0430\u042d\3\2\2\2\u0431\u0434\3\2"+
+ "\2\2\u0432\u0430\3\2\2\2\u0432\u0433\3\2\2\2\u0433\u00a7\3\2\2\2\u0434"+
+ "\u0432\3\2\2\2\u0435\u044a\5\30\r\2\u0436\u044a\5\32\16\2\u0437\u044a"+
+ "\5\u00acW\2\u0438\u044a\5\u00aaV\2\u0439\u044a\5\u00e0q\2\u043a\u044a"+
+ "\5\u0100\u0081\2\u043b\u044a\5\u00f4{\2\u043c\u044a\5\u012c\u0097\2\u043d"+
+ "\u044a\5\u0102\u0082\2\u043e\u044a\5\u0104\u0083\2\u043f\u044a\5\u0106"+
+ "\u0084\2\u0440\u044a\5\u0108\u0085\2\u0441\u044a\5\u010a\u0086\2\u0442"+
+ "\u044a\5\u00f0y\2\u0443\u044a\5\u010c\u0087\2\u0444\u044a\5\u010e\u0088"+
+ "\2\u0445\u044a\5\u0120\u0091\2\u0446\u044a\5\u00aeX\2\u0447\u044a\5\u00b2"+
+ "Z\2\u0448\u044a\5z>\2\u0449\u0435\3\2\2\2\u0449\u0436\3\2\2\2\u0449\u0437"+
+ "\3\2\2\2\u0449\u0438\3\2\2\2\u0449\u0439\3\2\2\2\u0449\u043a\3\2\2\2\u0449"+
+ "\u043b\3\2\2\2\u0449\u043c\3\2\2\2\u0449\u043d\3\2\2\2\u0449\u043e\3\2"+
+ "\2\2\u0449\u043f\3\2\2\2\u0449\u0440\3\2\2\2\u0449\u0441\3\2\2\2\u0449"+
+ "\u0442\3\2\2\2\u0449\u0443\3\2\2\2\u0449\u0444\3\2\2\2\u0449\u0445\3\2"+
+ "\2\2\u0449\u0446\3\2\2\2\u0449\u0447\3\2\2\2\u0449\u0448\3\2\2\2\u044a"+
+ "\u00a9\3\2\2\2\u044b\u044c\7&\2\2\u044c\u044d\5\u00a6T\2\u044d\u00ab\3"+
+ "\2\2\2\u044e\u044f\7[\2\2\u044f\u0451\5\u00a6T\2\u0450\u0452\5\u00f0y"+
+ "\2\u0451\u0450\3\2\2\2\u0451\u0452\3\2\2\2\u0452\u00ad\3\2\2\2\u0453\u0454"+
+ "\5\u00b0Y\2\u0454\u0455\5\u0128\u0095\2\u0455\u00af\3\2\2\2\u0456\u0457"+
+ "\7\16\2\2\u0457\u0458\5\u00a6T\2\u0458\u0459\5\u0172\u00ba\2\u0459\u045b"+
+ "\3\2\2\2\u045a\u0456\3\2\2\2\u045b\u045e\3\2\2\2\u045c\u045a\3\2\2\2\u045c"+
+ "\u045d\3\2\2\2\u045d\u0463\3\2\2\2\u045e\u045c\3\2\2\2\u045f\u0460\7\17"+
+ "\2\2\u0460\u0461\5d\63\2\u0461\u0462\5\u0172\u00ba\2\u0462\u0464\3\2\2"+
+ "\2\u0463\u045f\3\2\2\2\u0463\u0464\3\2\2\2\u0464\u00b1\3\2\2\2\u0465\u0466"+
+ "\7T\2\2\u0466\u046b\5\u00a6T\2\u0467\u0468\7T\2\2\u0468\u0469\t\3\2\2"+
+ "\u0469\u046b\5.\30\2\u046a\u0465\3\2\2\2\u046a\u0467\3\2\2\2\u046b\u00b3"+
+ "\3\2\2\2\u046c\u0475\7\5\2\2\u046d\u0475\7\6\2\2\u046e\u0475\7g\2\2\u046f"+
+ "\u0475\5\u014e\u00a8\2\u0470\u0475\5\u0164\u00b3\2\u0471\u0475\7\3\2\2"+
+ "\u0472\u0475\7\u0092\2\2\u0473\u0475\7\u0093\2\2\u0474\u046c\3\2\2\2\u0474"+
+ "\u046d\3\2\2\2\u0474\u046e\3\2\2\2\u0474\u046f\3\2\2\2\u0474\u0470\3\2"+
+ "\2\2\u0474\u0471\3\2\2\2\u0474\u0472\3\2\2\2\u0474\u0473\3\2\2\2\u0475"+
+ "\u00b5\3\2\2\2\u0476\u0477\b\\\1\2\u0477\u0483\5\u014a\u00a6\2\u0478\u0483"+
+ "\5\u0146\u00a4\2\u0479\u0483\5\u016e\u00b8\2\u047a\u0483\5 \21\2\u047b"+
+ "\u0483\5\u0088E\2\u047c\u0483\5\u0086D\2\u047d\u047e\t\17\2\2\u047e\u047f"+
+ "\7i\2\2\u047f\u0480\5\u00a6T\2\u0480\u0481\7j\2\2\u0481\u0483\3\2\2\2"+
+ "\u0482\u0476\3\2\2\2\u0482\u0478\3\2\2\2\u0482\u0479\3\2\2\2\u0482\u047a"+
+ "\3\2\2\2\u0482\u047b\3\2\2\2\u0482\u047c\3\2\2\2\u0482\u047d\3\2\2\2\u0483"+
+ "\u049a\3\2\2\2\u0484\u0485\f\13\2\2\u0485\u0486\7s\2\2\u0486\u0499\7h"+
+ "\2\2\u0487\u0488\f\n\2\2\u0488\u0499\5\u0168\u00b5\2\u0489\u048a\f\t\2"+
+ "\2\u048a\u0499\5\u00d0i\2\u048b\u048c\f\b\2\2\u048c\u0499\5N(\2\u048d"+
+ "\u048e\f\7\2\2\u048e\u0499\5\u016a\u00b6\2\u048f\u0490\f\6\2\2\u0490\u0499"+
+ "\5\u016c\u00b7\2\u0491\u0492\f\5\2\2\u0492\u0493\5\u016c\u00b7\2\u0493"+
+ "\u0494\7\22\2\2\u0494\u0495\5t;\2\u0495\u0499\3\2\2\2\u0496\u0497\f\4"+
+ "\2\2\u0497\u0499\5\u00bc_\2\u0498\u0484\3\2\2\2\u0498\u0487\3\2\2\2\u0498"+
+ "\u0489\3\2\2\2\u0498\u048b\3\2\2\2\u0498\u048d\3\2\2\2\u0498\u048f\3\2"+
+ "\2\2\u0498\u0491\3\2\2\2\u0498\u0496\3\2\2\2\u0499\u049c\3\2\2\2\u049a"+
+ "\u0498\3\2\2\2\u049a\u049b\3\2\2\2\u049b\u00b7\3\2\2\2\u049c\u049a\3\2"+
+ "\2\2\u049d\u049e\5`\61\2\u049e\u049f\5\u00ba^\2\u049f\u00b9\3\2\2\2\u04a0"+
+ "\u04a2\7P\2\2\u04a1\u04a3\7h\2\2\u04a2\u04a1\3\2\2\2\u04a2\u04a3\3\2\2"+
+ "\2\u04a3\u04a4\3\2\2\2\u04a4\u04a6\5\u0140\u00a1\2\u04a5\u04a7\5r:\2\u04a6"+
+ "\u04a5\3\2\2\2\u04a6\u04a7\3\2\2\2\u04a7\u00bb\3\2\2\2\u04a8\u04aa\7("+
+ "\2\2\u04a9\u04ab\5\u00e8u\2\u04aa\u04a9\3\2\2\2\u04aa\u04ab\3\2\2\2\u04ab"+
+ "\u04ad\3\2\2\2\u04ac\u04ae\7p\2\2\u04ad\u04ac\3\2\2\2\u04ad\u04ae\3\2"+
+ "\2\2\u04ae\u04af\3\2\2\2\u04af\u04b0\7)\2\2\u04b0\u00bd\3\2\2\2\u04b1"+
+ "\u04b2\7Q\2\2\u04b2\u04bc\7k\2\2\u04b3\u04b7\5\u00c2b\2\u04b4\u04b7\5"+
+ "\u012e\u0098\2\u04b5\u04b7\5\u00c0a\2\u04b6\u04b3\3\2\2\2\u04b6\u04b4"+
+ "\3\2\2\2\u04b6\u04b5\3\2\2\2\u04b7\u04b8\3\2\2\2\u04b8\u04b9\5\u0172\u00ba"+
+ "\2\u04b9\u04bb\3\2\2\2\u04ba\u04b6\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"+
+ "\u04c0\7l\2\2\u04c0\u00bf\3\2\2\2\u04c1\u04c2\7:\2\2\u04c2\u04c3\7h\2"+
+ "\2\u04c3\u04c4\5\u0144\u00a3\2\u04c4\u00c1\3\2\2\2\u04c5\u04c7\7\35\2"+
"\2\u04c6\u04c5\3\2\2\2\u04c6\u04c7\3\2\2\2\u04c7\u04c8\3\2\2\2\u04c8\u04c9"+
- "\5^\60\2\u04c9\u04ca\7g\2\2\u04ca\u04cb\5\u0142\u00a2\2\u04cb\u04cd\3"+
- "\2\2\2\u04cc\u04be\3\2\2\2\u04cc\u04c6\3\2\2\2\u04cd\u00c1\3\2\2\2\u04ce"+
- "\u04d6\5\u012c\u0097\2\u04cf\u04d6\5\u00c4c\2\u04d0\u04d6\5P)\2\u04d1"+
- "\u04d2\7h\2\2\u04d2\u04d3\5\u00c2b\2\u04d3\u04d4\7i\2\2\u04d4\u04d6\3"+
- "\2\2\2\u04d5\u04ce\3\2\2\2\u04d5\u04cf\3\2\2\2\u04d5\u04d0\3\2\2\2\u04d5"+
- "\u04d1\3\2\2\2\u04d6\u00c3\3\2\2\2\u04d7\u04e1\5\u012e\u0098\2\u04d8\u04e1"+
- "\5\u015e\u00b0\2\u04d9\u04e1\5\u0134\u009b\2\u04da\u04e1\5\u013c\u009f"+
- "\2\u04db\u04e1\5\u00bc_\2\u04dc\u04e1\5\u0136\u009c\2\u04dd\u04e1\5\u0138"+
- "\u009d\2\u04de\u04e1\5\u013a\u009e\2\u04df\u04e1\5\u00c6d\2\u04e0\u04d7"+
- "\3\2\2\2\u04e0\u04d8\3\2\2\2\u04e0\u04d9\3\2\2\2\u04e0\u04da\3\2\2\2\u04e0"+
- "\u04db\3\2\2\2\u04e0\u04dc\3\2\2\2\u04e0\u04dd\3\2\2\2\u04e0\u04de\3\2"+
- "\2\2\u04e0\u04df\3\2\2\2\u04e1\u00c5\3\2\2\2\u04e2\u04e3\7:\2\2\u04e3"+
- "\u04e4\5\u00c8e\2\u04e4\u00c7\3\2\2\2\u04e5\u04f1\7h\2\2\u04e6\u04eb\5"+
- "\u00c2b\2\u04e7\u04e8\7o\2\2\u04e8\u04ea\5\u00c2b\2\u04e9\u04e7\3\2\2"+
- "\2\u04ea\u04ed\3\2\2\2\u04eb\u04e9\3\2\2\2\u04eb\u04ec\3\2\2\2\u04ec\u04ef"+
- "\3\2\2\2\u04ed\u04eb\3\2\2\2\u04ee\u04f0\7o\2\2\u04ef\u04ee\3\2\2\2\u04ef"+
- "\u04f0\3\2\2\2\u04f0\u04f2\3\2\2\2\u04f1\u04e6\3\2\2\2\u04f1\u04f2\3\2"+
- "\2\2\u04f2\u04f3\3\2\2\2\u04f3\u04f4\7i\2\2\u04f4\u00c9\3\2\2\2\u04f5"+
- "\u04fd\5\u015e\u00b0\2\u04f6\u04fd\5\u012e\u0098\2\u04f7\u04fd\5\u00cc"+
- "g\2\u04f8\u04fd\5\u0136\u009c\2\u04f9\u04fd\5\u0138\u009d\2\u04fa\u04fd"+
- "\5P)\2\u04fb\u04fd\5\u012c\u0097\2\u04fc\u04f5\3\2\2\2\u04fc\u04f6\3\2"+
- "\2\2\u04fc\u04f7\3\2\2\2\u04fc\u04f8\3\2\2\2\u04fc\u04f9\3\2\2\2\u04fc"+
- "\u04fa\3\2\2\2\u04fc\u04fb\3\2\2\2\u04fd\u00cb\3\2\2\2\u04fe\u04ff\7l"+
- "\2\2\u04ff\u0500\7v\2\2\u0500\u0501\7m\2\2\u0501\u0502\5\u0132\u009a\2"+
- "\u0502\u00cd\3\2\2\2\u0503\u0513\7l\2\2\u0504\u0506\5\u00d0i\2\u0505\u0504"+
- "\3\2\2\2\u0505\u0506\3\2\2\2\u0506\u0507\3\2\2\2\u0507\u0509\7q\2\2\u0508"+
- "\u050a\5\u00d2j\2\u0509\u0508\3\2\2\2\u0509\u050a\3\2\2\2\u050a\u0514"+
- "\3\2\2\2\u050b\u050d\5\u00d0i\2\u050c\u050b\3\2\2\2\u050c\u050d\3\2\2"+
- "\2\u050d\u050e\3\2\2\2\u050e\u050f\7q\2\2\u050f\u0510\5\u00d2j\2\u0510"+
- "\u0511\7q\2\2\u0511\u0512\5\u00d4k\2\u0512\u0514\3\2\2\2\u0513\u0505\3"+
- "\2\2\2\u0513\u050c\3\2\2\2\u0514\u0515\3\2\2\2\u0515\u0516\7m\2\2\u0516"+
- "\u00cf\3\2\2\2\u0517\u0518\5\u00a4S\2\u0518\u00d1\3\2\2\2\u0519\u051a"+
- "\5\u00a4S\2\u051a\u00d3\3\2\2\2\u051b\u051c\5\u00a4S\2\u051c\u00d5\3\2"+
- "\2\2\u051d\u051f\t\20\2\2\u051e\u051d\3\2\2\2\u051e\u051f\3\2\2\2\u051f"+
- "\u0520\3\2\2\2\u0520\u0521\7n\2\2\u0521\u00d7\3\2\2\2\u0522\u0523\5\u00e6"+
- "t\2\u0523\u0524\7n\2\2\u0524\u0529\3\2\2\2\u0525\u0526\5\b\5\2\u0526\u0527"+
- "\7u\2\2\u0527\u0529\3\2\2\2\u0528\u0522\3\2\2\2\u0528\u0525\3\2\2\2\u0528"+
- "\u0529\3\2\2\2\u0529\u052a\3\2\2\2\u052a\u052b\7_\2\2\u052b\u0530\5\u00a4"+
- "S\2\u052c\u052e\7L\2\2\u052d\u052f\7g\2\2\u052e\u052d\3\2\2\2\u052e\u052f"+
- "\3\2\2\2\u052f\u0531\3\2\2\2\u0530\u052c\3\2\2\2\u0530\u0531\3\2\2\2\u0531"+
- "\u00d9\3\2\2\2\u0532\u0533\7Z\2\2\u0533\u0534\7g\2\2\u0534\u00db\3\2\2"+
- "\2\u0535\u0536\5\u0162\u00b2\2\u0536\u00dd\3\2\2\2\u0537\u053b\5\u00e0"+
- "q\2\u0538\u053b\5\u00e8u\2\u0539\u053b\5\u00ecw\2\u053a\u0537\3\2\2\2"+
- "\u053a\u0538\3\2\2\2\u053a\u0539\3\2\2\2\u053b\u00df\3\2\2\2\u053c\u0548"+
- "\7\\\2\2\u053d\u0549\5\u00e2r\2\u053e\u0544\7h\2\2\u053f\u0540\5\u00e2"+
- "r\2\u0540\u0541\5\u0170\u00b9\2\u0541\u0543\3\2\2\2\u0542\u053f\3\2\2"+
- "\2\u0543\u0546\3\2\2\2\u0544\u0542\3\2\2\2\u0544\u0545\3\2\2\2\u0545\u0547"+
- "\3\2\2\2\u0546\u0544\3\2\2\2\u0547\u0549\7i\2\2\u0548\u053d\3\2\2\2\u0548"+
- "\u053e\3\2\2\2\u0549\u00e1\3\2\2\2\u054a\u0550\5\u00e4s\2\u054b\u054d"+
- "\5\u00c2b\2\u054c\u054b\3\2\2\2\u054c\u054d\3\2\2\2\u054d\u054e\3\2\2"+
- "\2\u054e\u054f\7n\2\2\u054f\u0551\5\u00e6t\2\u0550\u054c\3\2\2\2\u0550"+
- "\u0551\3\2\2\2\u0551\u00e3\3\2\2\2\u0552\u0557\7g\2\2\u0553\u0554\7o\2"+
- "\2\u0554\u0556\7g\2\2\u0555\u0553\3\2\2\2\u0556\u0559\3\2\2\2\u0557\u0555"+
- "\3\2\2\2\u0557\u0558\3\2\2\2\u0558\u00e5\3\2\2\2\u0559\u0557\3\2\2\2\u055a"+
- "\u055f\5\u00a4S\2\u055b\u055c\7o\2\2\u055c\u055e\5\u00a4S\2\u055d\u055b"+
+ "\5`\61\2\u04c9\u04ca\7h\2\2\u04ca\u04cb\5\u0144\u00a3\2\u04cb\u04cc\5"+
+ "\u0142\u00a2\2\u04cc\u04d5\3\2\2\2\u04cd\u04cf\7\35\2\2\u04ce\u04cd\3"+
+ "\2\2\2\u04ce\u04cf\3\2\2\2\u04cf\u04d0\3\2\2\2\u04d0\u04d1\5`\61\2\u04d1"+
+ "\u04d2\7h\2\2\u04d2\u04d3\5\u0144\u00a3\2\u04d3\u04d5\3\2\2\2\u04d4\u04c6"+
+ "\3\2\2\2\u04d4\u04ce\3\2\2\2\u04d5\u00c3\3\2\2\2\u04d6\u04de\5\u012e\u0098"+
+ "\2\u04d7\u04de\5\u00c6d\2\u04d8\u04de\5R*\2\u04d9\u04da\7i\2\2\u04da\u04db"+
+ "\5\u00c4c\2\u04db\u04dc\7j\2\2\u04dc\u04de\3\2\2\2\u04dd\u04d6\3\2\2\2"+
+ "\u04dd\u04d7\3\2\2\2\u04dd\u04d8\3\2\2\2\u04dd\u04d9\3\2\2\2\u04de\u00c5"+
+ "\3\2\2\2\u04df\u04e9\5\u0130\u0099\2\u04e0\u04e9\5\u0160\u00b1\2\u04e1"+
+ "\u04e9\5\u0136\u009c\2\u04e2\u04e9\5\u013e\u00a0\2\u04e3\u04e9\5\u00be"+
+ "`\2\u04e4\u04e9\5\u0138\u009d\2\u04e5\u04e9\5\u013a\u009e\2\u04e6\u04e9"+
+ "\5\u013c\u009f\2\u04e7\u04e9\5\u00c8e\2\u04e8\u04df\3\2\2\2\u04e8\u04e0"+
+ "\3\2\2\2\u04e8\u04e1\3\2\2\2\u04e8\u04e2\3\2\2\2\u04e8\u04e3\3\2\2\2\u04e8"+
+ "\u04e4\3\2\2\2\u04e8\u04e5\3\2\2\2\u04e8\u04e6\3\2\2\2\u04e8\u04e7\3\2"+
+ "\2\2\u04e9\u00c7\3\2\2\2\u04ea\u04eb\7:\2\2\u04eb\u04ec\5\u00caf\2\u04ec"+
+ "\u00c9\3\2\2\2\u04ed\u04f9\7i\2\2\u04ee\u04f3\5\u00c4c\2\u04ef\u04f0\7"+
+ "p\2\2\u04f0\u04f2\5\u00c4c\2\u04f1\u04ef\3\2\2\2\u04f2\u04f5\3\2\2\2\u04f3"+
+ "\u04f1\3\2\2\2\u04f3\u04f4\3\2\2\2\u04f4\u04f7\3\2\2\2\u04f5\u04f3\3\2"+
+ "\2\2\u04f6\u04f8\7p\2\2\u04f7\u04f6\3\2\2\2\u04f7\u04f8\3\2\2\2\u04f8"+
+ "\u04fa\3\2\2\2\u04f9\u04ee\3\2\2\2\u04f9\u04fa\3\2\2\2\u04fa\u04fb\3\2"+
+ "\2\2\u04fb\u04fc\7j\2\2\u04fc\u00cb\3\2\2\2\u04fd\u0505\5\u0160\u00b1"+
+ "\2\u04fe\u0505\5\u0130\u0099\2\u04ff\u0505\5\u00ceh\2\u0500\u0505\5\u0138"+
+ "\u009d\2\u0501\u0505\5\u013a\u009e\2\u0502\u0505\5R*\2\u0503\u0505\5\u012e"+
+ "\u0098\2\u0504\u04fd\3\2\2\2\u0504\u04fe\3\2\2\2\u0504\u04ff\3\2\2\2\u0504"+
+ "\u0500\3\2\2\2\u0504\u0501\3\2\2\2\u0504\u0502\3\2\2\2\u0504\u0503\3\2"+
+ "\2\2\u0505\u00cd\3\2\2\2\u0506\u0507\7m\2\2\u0507\u0508\7w\2\2\u0508\u0509"+
+ "\7n\2\2\u0509\u050a\5\u0134\u009b\2\u050a\u00cf\3\2\2\2\u050b\u051b\7"+
+ "m\2\2\u050c\u050e\5\u00d2j\2\u050d\u050c\3\2\2\2\u050d\u050e\3\2\2\2\u050e"+
+ "\u050f\3\2\2\2\u050f\u0511\7r\2\2\u0510\u0512\5\u00d4k\2\u0511\u0510\3"+
+ "\2\2\2\u0511\u0512\3\2\2\2\u0512\u051c\3\2\2\2\u0513\u0515\5\u00d2j\2"+
+ "\u0514\u0513\3\2\2\2\u0514\u0515\3\2\2\2\u0515\u0516\3\2\2\2\u0516\u0517"+
+ "\7r\2\2\u0517\u0518\5\u00d4k\2\u0518\u0519\7r\2\2\u0519\u051a\5\u00d6"+
+ "l\2\u051a\u051c\3\2\2\2\u051b\u050d\3\2\2\2\u051b\u0514\3\2\2\2\u051c"+
+ "\u051d\3\2\2\2\u051d\u051e\7n\2\2\u051e\u00d1\3\2\2\2\u051f\u0520\5\u00a6"+
+ "T\2\u0520\u00d3\3\2\2\2\u0521\u0522\5\u00a6T\2\u0522\u00d5\3\2\2\2\u0523"+
+ "\u0524\5\u00a6T\2\u0524\u00d7\3\2\2\2\u0525\u0527\t\20\2\2\u0526\u0525"+
+ "\3\2\2\2\u0526\u0527\3\2\2\2\u0527\u0528\3\2\2\2\u0528\u0529\7o\2\2\u0529"+
+ "\u00d9\3\2\2\2\u052a\u052b\5\u00e8u\2\u052b\u052c\7o\2\2\u052c\u0531\3"+
+ "\2\2\2\u052d\u052e\5\b\5\2\u052e\u052f\7v\2\2\u052f\u0531\3\2\2\2\u0530"+
+ "\u052a\3\2\2\2\u0530\u052d\3\2\2\2\u0530\u0531\3\2\2\2\u0531\u0532\3\2"+
+ "\2\2\u0532\u0533\7`\2\2\u0533\u0538\5\u00a6T\2\u0534\u0536\7M\2\2\u0535"+
+ "\u0537\7h\2\2\u0536\u0535\3\2\2\2\u0536\u0537\3\2\2\2\u0537\u0539\3\2"+
+ "\2\2\u0538\u0534\3\2\2\2\u0538\u0539\3\2\2\2\u0539\u00db\3\2\2\2\u053a"+
+ "\u053b\7[\2\2\u053b\u053c\7h\2\2\u053c\u00dd\3\2\2\2\u053d\u053e\5\u0164"+
+ "\u00b3\2\u053e\u00df\3\2\2\2\u053f\u0543\5\u00e2r\2\u0540\u0543\5\u00ea"+
+ "v\2\u0541\u0543\5\u00eex\2\u0542\u053f\3\2\2\2\u0542\u0540\3\2\2\2\u0542"+
+ "\u0541\3\2\2\2\u0543\u00e1\3\2\2\2\u0544\u0550\7]\2\2\u0545\u0551\5\u00e4"+
+ "s\2\u0546\u054c\7i\2\2\u0547\u0548\5\u00e4s\2\u0548\u0549\5\u0172\u00ba"+
+ "\2\u0549\u054b\3\2\2\2\u054a\u0547\3\2\2\2\u054b\u054e\3\2\2\2\u054c\u054a"+
+ "\3\2\2\2\u054c\u054d\3\2\2\2\u054d\u054f\3\2\2\2\u054e\u054c\3\2\2\2\u054f"+
+ "\u0551\7j\2\2\u0550\u0545\3\2\2\2\u0550\u0546\3\2\2\2\u0551\u00e3\3\2"+
+ "\2\2\u0552\u0558\5\u00e6t\2\u0553\u0555\5\u00c4c\2\u0554\u0553\3\2\2\2"+
+ "\u0554\u0555\3\2\2\2\u0555\u0556\3\2\2\2\u0556\u0557\7o\2\2\u0557\u0559"+
+ "\5\u00e8u\2\u0558\u0554\3\2\2\2\u0558\u0559\3\2\2\2\u0559\u00e5\3\2\2"+
+ "\2\u055a\u055f\7h\2\2\u055b\u055c\7p\2\2\u055c\u055e\7h\2\2\u055d\u055b"+
"\3\2\2\2\u055e\u0561\3\2\2\2\u055f\u055d\3\2\2\2\u055f\u0560\3\2\2\2\u0560"+
- "\u00e7\3\2\2\2\u0561\u055f\3\2\2\2\u0562\u056e\7`\2\2\u0563\u056f\5\u00ea"+
- "v\2\u0564\u056a\7h\2\2\u0565\u0566\5\u00eav\2\u0566\u0567\5\u0170\u00b9"+
- "\2\u0567\u0569\3\2\2\2\u0568\u0565\3\2\2\2\u0569\u056c\3\2\2\2\u056a\u0568"+
- "\3\2\2\2\u056a\u056b\3\2\2\2\u056b\u056d\3\2\2\2\u056c\u056a\3\2\2\2\u056d"+
- "\u056f\7i\2\2\u056e\u0563\3\2\2\2\u056e\u0564\3\2\2\2\u056f\u00e9\3\2"+
- "\2\2\u0570\u0572\7g\2\2\u0571\u0573\7n\2\2\u0572\u0571\3\2\2\2\u0572\u0573"+
- "\3\2\2\2\u0573\u0574\3\2\2\2\u0574\u0575\5\u00c2b\2\u0575\u00eb\3\2\2"+
- "\2\u0576\u0582\7e\2\2\u0577\u0583\5\u0096L\2\u0578\u057e\7h\2\2\u0579"+
- "\u057a\5\u0096L\2\u057a\u057b\5\u0170\u00b9\2\u057b\u057d\3\2\2\2\u057c"+
- "\u0579\3\2\2\2\u057d\u0580\3\2\2\2\u057e\u057c\3\2\2\2\u057e\u057f\3\2"+
- "\2\2\u057f\u0581\3\2\2\2\u0580\u057e\3\2\2\2\u0581\u0583\7i\2\2\u0582"+
- "\u0577\3\2\2\2\u0582\u0578\3\2\2\2\u0583\u00ed\3\2\2\2\u0584\u0586\7j"+
- "\2\2\u0585\u0587\5\u00f0y\2\u0586\u0585\3\2\2\2\u0586\u0587\3\2\2\2\u0587"+
- "\u0588\3\2\2\2\u0588\u0589\7k\2\2\u0589\u00ef\3\2\2\2\u058a\u058c\5\u0170"+
- "\u00b9\2\u058b\u058a\3\2\2\2\u058b\u058c\3\2\2\2\u058c\u058d\3\2\2\2\u058d"+
- "\u058e\5\u00a6T\2\u058e\u058f\5\u0170\u00b9\2\u058f\u0591\3\2\2\2\u0590"+
- "\u058b\3\2\2\2\u0591\u0592\3\2\2\2\u0592\u0590\3\2\2\2\u0592\u0593\3\2"+
- "\2\2\u0593\u00f1\3\2\2\2\u0594\u059a\5\u00f6|\2\u0595\u059a\5\u00f8}\2"+
- "\u0596\u059a\5\u00fa~\2\u0597\u059a\5\u00f4{\2\u0598\u059a\5\u0098M\2"+
- "\u0599\u0594\3\2\2\2\u0599\u0595\3\2\2\2\u0599\u0596\3\2\2\2\u0599\u0597"+
- "\3\2\2\2\u0599\u0598\3\2\2\2\u059a\u00f3\3\2\2\2\u059b\u059c\5\u00a4S"+
- "\2\u059c\u00f5\3\2\2\2\u059d\u059e\5\u00a4S\2\u059e\u059f\7\u008b\2\2"+
- "\u059f\u05a0\5\u00a4S\2\u05a0\u00f7\3\2\2\2\u05a1\u05a2\5\u00a4S\2\u05a2"+
- "\u05a3\t\21\2\2\u05a3\u00f9\3\2\2\2\u05a4\u05a5\5\u00e6t\2\u05a5\u05a6"+
- "\5\u00d6l\2\u05a6\u05a7\5\u00e6t\2\u05a7\u00fb\3\2\2\2\u05a8\u05a9\t\22"+
- "\2\2\u05a9\u00fd\3\2\2\2\u05aa\u05ab\7g\2\2\u05ab\u05ad\7q\2\2\u05ac\u05ae"+
- "\5\u00a6T\2\u05ad\u05ac\3\2\2\2\u05ad\u05ae\3\2\2\2\u05ae\u00ff\3\2\2"+
- "\2\u05af\u05b1\7d\2\2\u05b0\u05b2\5\u00e6t\2\u05b1\u05b0\3\2\2\2\u05b1"+
- "\u05b2\3\2\2\2\u05b2\u0101\3\2\2\2\u05b3\u05b5\7M\2\2\u05b4\u05b6\7g\2"+
- "\2\u05b5\u05b4\3\2\2\2\u05b5\u05b6\3\2\2\2\u05b6\u0103\3\2\2\2\u05b7\u05b9"+
- "\7a\2\2\u05b8\u05ba\7g\2\2\u05b9\u05b8\3\2\2\2\u05b9\u05ba\3\2\2\2\u05ba"+
- "\u0105\3\2\2\2\u05bb\u05bc\7Y\2\2\u05bc\u05bd\7g\2\2\u05bd\u0107\3\2\2"+
- "\2\u05be\u05bf\7]\2\2\u05bf\u0109\3\2\2\2\u05c0\u05c9\7^\2\2\u05c1\u05ca"+
- "\5\u00a4S\2\u05c2\u05c3\5\u0170\u00b9\2\u05c3\u05c4\5\u00a4S\2\u05c4\u05ca"+
- "\3\2\2\2\u05c5\u05c6\5\u00f2z\2\u05c6\u05c7\5\u0170\u00b9\2\u05c7\u05c8"+
- "\5\u00a4S\2\u05c8\u05ca\3\2\2\2\u05c9\u05c1\3\2\2\2\u05c9\u05c2\3\2\2"+
- "\2\u05c9\u05c5\3\2\2\2\u05ca\u05cb\3\2\2\2\u05cb\u05d1\5\u00eex\2\u05cc"+
- "\u05cf\7X\2\2\u05cd\u05d0\5\u010a\u0086\2\u05ce\u05d0\5\u00eex\2\u05cf"+
- "\u05cd\3\2\2\2\u05cf\u05ce\3\2\2\2\u05d0\u05d2\3\2\2\2\u05d1\u05cc\3\2"+
- "\2\2\u05d1\u05d2\3\2\2\2\u05d2\u010b\3\2\2\2\u05d3\u05d6\5\u010e\u0088"+
- "\2\u05d4\u05d6\5\u0114\u008b\2\u05d5\u05d3\3\2\2\2\u05d5\u05d4\3\2\2\2"+
- "\u05d6\u010d\3\2\2\2\u05d7\u05e2\7[\2\2\u05d8\u05da\5\u00a4S\2\u05d9\u05d8"+
- "\3\2\2\2\u05d9\u05da\3\2\2\2\u05da\u05e3\3\2\2\2\u05db\u05dd\5\u00f2z"+
- "\2\u05dc\u05db\3\2\2\2\u05dc\u05dd\3\2\2\2\u05dd\u05de\3\2\2\2\u05de\u05e0"+
- "\5\u0170\u00b9\2\u05df\u05e1\5\u00a4S\2\u05e0\u05df\3\2\2\2\u05e0\u05e1"+
- "\3\2\2\2\u05e1\u05e3\3\2\2\2\u05e2\u05d9\3\2\2\2\u05e2\u05dc\3\2\2\2\u05e3"+
- "\u05e4\3\2\2\2\u05e4\u05e8\7j\2\2\u05e5\u05e7\5\u0110\u0089\2\u05e6\u05e5"+
- "\3\2\2\2\u05e7\u05ea\3\2\2\2\u05e8\u05e6\3\2\2\2\u05e8\u05e9\3\2\2\2\u05e9"+
- "\u05eb\3\2\2\2\u05ea\u05e8\3\2\2\2\u05eb\u05ec\7k\2\2\u05ec\u010f\3\2"+
- "\2\2\u05ed\u05ee\5\u0112\u008a\2\u05ee\u05f0\7q\2\2\u05ef\u05f1\5\u00f0"+
- "y\2\u05f0\u05ef\3\2\2\2\u05f0\u05f1\3\2\2\2\u05f1\u0111\3\2\2\2\u05f2"+
- "\u05f3\7R\2\2\u05f3\u05f6\5\u00e6t\2\u05f4\u05f6\7N\2\2\u05f5\u05f2\3"+
- "\2\2\2\u05f5\u05f4\3\2\2\2\u05f6\u0113\3\2\2\2\u05f7\u0600\7[\2\2\u05f8"+
- "\u0601\5\u0116\u008c\2\u05f9\u05fa\5\u0170\u00b9\2\u05fa\u05fb\5\u0116"+
- "\u008c\2\u05fb\u0601\3\2\2\2\u05fc\u05fd\5\u00f2z\2\u05fd\u05fe\5\u0170"+
- "\u00b9\2\u05fe\u05ff\5\u0116\u008c\2\u05ff\u0601\3\2\2\2\u0600\u05f8\3"+
- "\2\2\2\u0600\u05f9\3\2\2\2\u0600\u05fc\3\2\2\2\u0601\u0602\3\2\2\2\u0602"+
- "\u0606\7j\2\2\u0603\u0605\5\u0118\u008d\2\u0604\u0603\3\2\2\2\u0605\u0608"+
- "\3\2\2\2\u0606\u0604\3\2\2\2\u0606\u0607\3\2\2\2\u0607\u0609\3\2\2\2\u0608"+
- "\u0606\3\2\2\2\u0609\u060a\7k\2\2\u060a\u0115\3\2\2\2\u060b\u060c\7g\2"+
- "\2\u060c\u060e\7u\2\2\u060d\u060b\3\2\2\2\u060d\u060e\3\2\2\2\u060e\u060f"+
- "\3\2\2\2\u060f\u0610\5\u00b4[\2\u0610\u0611\7r\2\2\u0611\u0612\7h\2\2"+
- "\u0612\u0613\7`\2\2\u0613\u0614\7i\2\2\u0614\u0117\3\2\2\2\u0615\u0616"+
- "\5\u011a\u008e\2\u0616\u0618\7q\2\2\u0617\u0619\5\u00f0y\2\u0618\u0617"+
- "\3\2\2\2\u0618\u0619\3\2\2\2\u0619\u0119\3\2\2\2\u061a\u061b\7R\2\2\u061b"+
- "\u061e\5\u011c\u008f\2\u061c\u061e\7N\2\2\u061d\u061a\3\2\2\2\u061d\u061c"+
- "\3\2\2\2\u061e\u011b\3\2\2\2\u061f\u0622\5\u00c2b\2\u0620\u0622\7f\2\2"+
- "\u0621\u061f\3\2\2\2\u0621\u0620\3\2\2\2\u0622\u062a\3\2\2\2\u0623\u0626"+
- "\7o\2\2\u0624\u0627\5\u00c2b\2\u0625\u0627\7f\2\2\u0626\u0624\3\2\2\2"+
- "\u0626\u0625\3\2\2\2\u0627\u0629\3\2\2\2\u0628\u0623\3\2\2\2\u0629\u062c"+
- "\3\2\2\2\u062a\u0628\3\2\2\2\u062a\u062b\3\2\2\2\u062b\u011d\3\2\2\2\u062c"+
- "\u062a\3\2\2\2\u062d\u062e\7Q\2\2\u062e\u0632\7j\2\2\u062f\u0631\5\u0120"+
- "\u0091\2\u0630\u062f\3\2\2\2\u0631\u0634\3\2\2\2\u0632\u0630\3\2\2\2\u0632"+
- "\u0633\3\2\2\2\u0633\u0635\3\2\2\2\u0634\u0632\3\2\2\2\u0635\u0636\7k"+
- "\2\2\u0636\u011f\3\2\2\2\u0637\u0638\5\u0122\u0092\2\u0638\u063a\7q\2"+
- "\2\u0639\u063b\5\u00f0y\2\u063a\u0639\3\2\2\2\u063a\u063b\3\2\2\2\u063b"+
- "\u0121\3\2\2\2\u063c\u063f\7R\2\2\u063d\u0640\5\u00f6|\2\u063e\u0640\5"+
- "\u0124\u0093\2\u063f\u063d\3\2\2\2\u063f\u063e\3\2\2\2\u0640\u0643\3\2"+
- "\2\2\u0641\u0643\7N\2\2\u0642\u063c\3\2\2\2\u0642\u0641\3\2\2\2\u0643"+
- "\u0123\3\2\2\2\u0644\u0645\5\u00e6t\2\u0645\u0646\7n\2\2\u0646\u064b\3"+
- "\2\2\2\u0647\u0648\5\u00e4s\2\u0648\u0649\7u\2\2\u0649\u064b\3\2\2\2\u064a"+
- "\u0644\3\2\2\2\u064a\u0647\3\2\2\2\u064a\u064b\3\2\2\2\u064b\u064c\3\2"+
- "\2\2\u064c\u064d\5\u00a4S\2\u064d\u0125\3\2\2\2\u064e\u0652\7b\2\2\u064f"+
- "\u0653\5\u00a4S\2\u0650\u0653\5\u0128\u0095\2\u0651\u0653\5\u00d8m\2\u0652"+
- "\u064f\3\2\2\2\u0652\u0650\3\2\2\2\u0652\u0651\3\2\2\2\u0652\u0653\3\2"+
- "\2\2\u0653\u0654\3\2\2\2\u0654\u0655\5\u00eex\2\u0655\u0127\3\2\2\2\u0656"+
- "\u0658\5\u00f2z\2\u0657\u0656\3\2\2\2\u0657\u0658\3\2\2\2\u0658\u0659"+
- "\3\2\2\2\u0659\u065b\5\u0170\u00b9\2\u065a\u065c\5\u00a4S\2\u065b\u065a"+
- "\3\2\2\2\u065b\u065c\3\2\2\2\u065c\u065d\3\2\2\2\u065d\u065f\5\u0170\u00b9"+
- "\2\u065e\u0660\5\u00f2z\2\u065f\u065e\3\2\2\2\u065f\u0660\3\2\2\2\u0660"+
- "\u0129\3\2\2\2\u0661\u0662\7T\2\2\u0662\u0663\5\u00a4S\2\u0663\u012b\3"+
- "\2\2\2\u0664\u0667\5\u0150\u00a9\2\u0665\u0667\7g\2\2\u0666\u0664\3\2"+
- "\2\2\u0666\u0665\3\2\2\2\u0667\u012d\3\2\2\2\u0668\u0669\7l\2\2\u0669"+
- "\u066a\5\u0130\u0099\2\u066a\u066b\7m\2\2\u066b\u066c\5\u0132\u009a\2"+
- "\u066c\u012f\3\2\2\2\u066d\u066e\5\u00a4S\2\u066e\u0131\3\2\2\2\u066f"+
- "\u0670\5\u00c2b\2\u0670\u0133\3\2\2\2\u0671\u0672\7\u0089\2\2\u0672\u0673"+
- "\5\u00c2b\2\u0673\u0135\3\2\2\2\u0674\u0675\7l\2\2\u0675\u0676\7m\2\2"+
- "\u0676\u0677\5\u0132\u009a\2\u0677\u0137\3\2\2\2\u0678\u0679\7U\2\2\u0679"+
- "\u067a\7l\2\2\u067a\u067b\5\u00c2b\2\u067b\u067c\7m\2\2\u067c\u067d\5"+
- "\u0132\u009a\2\u067d\u0139\3\2\2\2\u067e\u0684\7W\2\2\u067f\u0680\7W\2"+
- "\2\u0680\u0684\7\u008b\2\2\u0681\u0682\7\u008b\2\2\u0682\u0684\7W\2\2"+
- "\u0683\u067e\3\2\2\2\u0683\u067f\3\2\2\2\u0683\u0681\3\2\2\2\u0684\u0685"+
- "\3\2\2\2\u0685\u0686\5\u0132\u009a\2\u0686\u013b\3\2\2\2\u0687\u0688\7"+
- "O\2\2\u0688\u0689\5\u013e\u00a0\2\u0689\u013d\3\2\2\2\u068a\u068b\5\u0142"+
- "\u00a2\2\u068b\u068c\5\u0140\u00a1\2\u068c\u068f\3\2\2\2\u068d\u068f\5"+
- "\u0142\u00a2\2\u068e\u068a\3\2\2\2\u068e\u068d\3\2\2\2\u068f\u013f\3\2"+
- "\2\2\u0690\u0693\5\u0142\u00a2\2\u0691\u0693\5\u00c2b\2\u0692\u0690\3"+
- "\2\2\2\u0692\u0691\3\2\2\2\u0693\u0141\3\2\2\2\u0694\u06a0\7h\2\2\u0695"+
- "\u069a\5\u009cO\2\u0696\u0697\7o\2\2\u0697\u0699\5\u009cO\2\u0698\u0696"+
- "\3\2\2\2\u0699\u069c\3\2\2\2\u069a\u0698\3\2\2\2\u069a\u069b\3\2\2\2\u069b"+
- "\u069e\3\2\2\2\u069c\u069a\3\2\2\2\u069d\u069f\7o\2\2\u069e\u069d\3\2"+
- "\2\2\u069e\u069f\3\2\2\2\u069f\u06a1\3\2\2\2\u06a0\u0695\3\2\2\2\u06a0"+
- "\u06a1\3\2\2\2\u06a1\u06a2\3\2\2\2\u06a2\u06a3\7i\2\2\u06a3\u0143\3\2"+
- "\2\2\u06a4\u06a5\5\u0146\u00a4\2\u06a5\u06a6\7h\2\2\u06a6\u06a8\5\u00a4"+
- "S\2\u06a7\u06a9\7o\2\2\u06a8\u06a7\3\2\2\2\u06a8\u06a9\3\2\2\2\u06a9\u06aa"+
- "\3\2\2\2\u06aa\u06ab\7i\2\2\u06ab\u0145\3\2\2\2\u06ac\u06b2\5\u00c4c\2"+
- "\u06ad\u06ae\7h\2\2\u06ae\u06af\5\u0146\u00a4\2\u06af\u06b0\7i\2\2\u06b0"+
- "\u06b2\3\2\2\2\u06b1\u06ac\3\2\2\2\u06b1\u06ad\3\2\2\2\u06b2\u0147\3\2"+
- "\2\2\u06b3\u06ba\5\u014a\u00a6\2\u06b4\u06ba\5\u014e\u00a8\2\u06b5\u06b6"+
- "\7h\2\2\u06b6\u06b7\5\u00a4S\2\u06b7\u06b8\7i\2\2\u06b8\u06ba\3\2\2\2"+
- "\u06b9\u06b3\3\2\2\2\u06b9\u06b4\3\2\2\2\u06b9\u06b5\3\2\2\2\u06ba\u0149"+
- "\3\2\2\2\u06bb\u06bf\5\u00b2Z\2\u06bc\u06bf\5\u0152\u00aa\2\u06bd\u06bf"+
- "\5\u00b6\\\2\u06be\u06bb\3\2\2\2\u06be\u06bc\3\2\2\2\u06be\u06bd\3\2\2"+
- "\2\u06bf\u014b\3\2\2\2\u06c0\u06c1\t\23\2\2\u06c1\u014d\3\2\2\2\u06c2"+
- "\u06c3\7g\2\2\u06c3\u014f\3\2\2\2\u06c4\u06c5\7g\2\2\u06c5\u06c6\7r\2"+
- "\2\u06c6\u06c7\7g\2\2\u06c7\u0151\3\2\2\2\u06c8\u06c9\5\u00caf\2\u06c9"+
- "\u06ca\5\u0154\u00ab\2\u06ca\u0153\3\2\2\2\u06cb\u06d0\7j\2\2\u06cc\u06ce"+
- "\5\u0156\u00ac\2\u06cd\u06cf\7o\2\2\u06ce\u06cd\3\2\2\2\u06ce\u06cf\3"+
- "\2\2\2\u06cf\u06d1\3\2\2\2\u06d0\u06cc\3\2\2\2\u06d0\u06d1\3\2\2\2\u06d1"+
- "\u06d2\3\2\2\2\u06d2\u06d3\7k\2\2\u06d3\u0155\3\2\2\2\u06d4\u06d9\5\u0158"+
- "\u00ad\2\u06d5\u06d6\7o\2\2\u06d6\u06d8\5\u0158\u00ad\2\u06d7\u06d5\3"+
- "\2\2\2\u06d8\u06db\3\2\2\2\u06d9\u06d7\3\2\2\2\u06d9\u06da\3\2\2\2\u06da"+
- "\u0157\3\2\2\2\u06db\u06d9\3\2\2\2\u06dc\u06dd\5\u015a\u00ae\2\u06dd\u06de"+
- "\7q\2\2\u06de\u06e0\3\2\2\2\u06df\u06dc\3\2\2\2\u06df\u06e0\3\2\2\2\u06e0"+
- "\u06e1\3\2\2\2\u06e1\u06e2\5\u015c\u00af\2\u06e2\u0159\3\2\2\2\u06e3\u06e6"+
- "\5\u00a4S\2\u06e4\u06e6\5\u0154\u00ab\2\u06e5\u06e3\3\2\2\2\u06e5\u06e4"+
- "\3\2\2\2\u06e6\u015b\3\2\2\2\u06e7\u06ea\5\u00a4S\2\u06e8\u06ea\5\u0154"+
- "\u00ab\2\u06e9\u06e7\3\2\2\2\u06e9\u06e8\3\2\2\2\u06ea\u015d\3\2\2\2\u06eb"+
- "\u06ec\7V\2\2\u06ec\u06f2\7j\2\2\u06ed\u06ee\5\u0160\u00b1\2\u06ee\u06ef"+
- "\5\u0170\u00b9\2\u06ef\u06f1\3\2\2\2\u06f0\u06ed\3\2\2\2\u06f1\u06f4\3"+
- "\2\2\2\u06f2\u06f0\3\2\2\2\u06f2\u06f3\3\2\2\2\u06f3\u06f5\3\2\2\2\u06f4"+
- "\u06f2\3\2\2\2\u06f5\u06f6\7k\2\2\u06f6\u015f\3\2\2\2\u06f7\u06f8\5\u00e4"+
- "s\2\u06f8\u06f9\5\u00c2b\2\u06f9\u06fc\3\2\2\2\u06fa\u06fc\5\u0164\u00b3"+
- "\2\u06fb\u06f7\3\2\2\2\u06fb\u06fa\3\2\2\2\u06fc\u06fe\3\2\2\2\u06fd\u06ff"+
- "\5\u0162\u00b2\2\u06fe\u06fd\3\2\2\2\u06fe\u06ff\3\2\2\2\u06ff\u0161\3"+
- "\2\2\2\u0700\u0701\t\24\2\2\u0701\u0163\3\2\2\2\u0702\u0704\7\u0089\2"+
- "\2\u0703\u0702\3\2\2\2\u0703\u0704\3\2\2\2\u0704\u0705\3\2\2\2\u0705\u0706"+
- "\5\u012c\u0097\2\u0706\u0165\3\2\2\2\u0707\u0708\7l\2\2\u0708\u0709\5"+
- "\u00a4S\2\u0709\u070a\7m\2\2\u070a\u0167\3\2\2\2\u070b\u070c\7r\2\2\u070c"+
- "\u070d\7h\2\2\u070d\u070e\5\u00c2b\2\u070e\u070f\7i\2\2\u070f\u0169\3"+
- "\2\2\2\u0710\u071f\7h\2\2\u0711\u0718\5\u00e6t\2\u0712\u0715\5\u0146\u00a4"+
- "\2\u0713\u0714\7o\2\2\u0714\u0716\5\u00e6t\2\u0715\u0713\3\2\2\2\u0715"+
- "\u0716\3\2\2\2\u0716\u0718\3\2\2\2\u0717\u0711\3\2\2\2\u0717\u0712\3\2"+
- "\2\2\u0718\u071a\3\2\2\2\u0719\u071b\7v\2\2\u071a\u0719\3\2\2\2\u071a"+
- "\u071b\3\2\2\2\u071b\u071d\3\2\2\2\u071c\u071e\7o\2\2\u071d\u071c\3\2"+
- "\2\2\u071d\u071e\3\2\2\2\u071e\u0720\3\2\2\2\u071f\u0717\3\2\2\2\u071f"+
- "\u0720\3\2\2\2\u0720\u0721\3\2\2\2\u0721\u0722\7i\2\2\u0722\u016b\3\2"+
- "\2\2\u0723\u0724\5\u0146\u00a4\2\u0724\u0725\7r\2\2\u0725\u0726\7g\2\2"+
- "\u0726\u016d\3\2\2\2\u0727\u0728\5\u00c2b\2\u0728\u016f\3\2\2\2\u0729"+
- "\u072e\7p\2\2\u072a\u072e\7\2\2\3\u072b\u072e\7\u00a1\2\2\u072c\u072e"+
- "\6\u00b9\24\2\u072d\u0729\3\2\2\2\u072d\u072a\3\2\2\2\u072d\u072b\3\2"+
- "\2\2\u072d\u072c\3\2\2\2\u072e\u0171\3\2\2\2\u00bd\u0180\u0185\u018c\u0196"+
- "\u019c\u01a2\u01b2\u01b6\u01bf\u01cb\u01cf\u01d5\u01de\u01e8\u01f9\u0207"+
- "\u020b\u0212\u021a\u0223\u0243\u024b\u0263\u0276\u0285\u0292\u029b\u02a9"+
- "\u02b2\u02be\u02d3\u02da\u02df\u02e4\u02ee\u02f1\u02f5\u02f9\u0301\u0309"+
- "\u030e\u0316\u0318\u031d\u0324\u032c\u032f\u0335\u033a\u033c\u033f\u0346"+
- "\u034b\u035e\u0366\u036a\u036d\u0373\u0377\u037a\u0384\u038b\u0392\u039e"+
- "\u03a4\u03ab\u03b0\u03b6\u03c2\u03c8\u03cc\u03d4\u03d8\u03de\u03e1\u03e7"+
- "\u03ec\u0405\u0428\u042a\u0441\u0449\u0454\u045b\u0462\u046c\u047a\u0490"+
- "\u0492\u049a\u049e\u04a2\u04a5\u04ae\u04b4\u04be\u04c6\u04cc\u04d5\u04e0"+
- "\u04eb\u04ef\u04f1\u04fc\u0505\u0509\u050c\u0513\u051e\u0528\u052e\u0530"+
- "\u053a\u0544\u0548\u054c\u0550\u0557\u055f\u056a\u056e\u0572\u057e\u0582"+
- "\u0586\u058b\u0592\u0599\u05ad\u05b1\u05b5\u05b9\u05c9\u05cf\u05d1\u05d5"+
- "\u05d9\u05dc\u05e0\u05e2\u05e8\u05f0\u05f5\u0600\u0606\u060d\u0618\u061d"+
- "\u0621\u0626\u062a\u0632\u063a\u063f\u0642\u064a\u0652\u0657\u065b\u065f"+
- "\u0666\u0683\u068e\u0692\u069a\u069e\u06a0\u06a8\u06b1\u06b9\u06be\u06ce"+
- "\u06d0\u06d9\u06df\u06e5\u06e9\u06f2\u06fb\u06fe\u0703\u0715\u0717\u071a"+
- "\u071d\u071f\u072d";
+ "\u00e7\3\2\2\2\u0561\u055f\3\2\2\2\u0562\u0567\5\u00a6T\2\u0563\u0564"+
+ "\7p\2\2\u0564\u0566\5\u00a6T\2\u0565\u0563\3\2\2\2\u0566\u0569\3\2\2\2"+
+ "\u0567\u0565\3\2\2\2\u0567\u0568\3\2\2\2\u0568\u00e9\3\2\2\2\u0569\u0567"+
+ "\3\2\2\2\u056a\u0576\7a\2\2\u056b\u0577\5\u00ecw\2\u056c\u0572\7i\2\2"+
+ "\u056d\u056e\5\u00ecw\2\u056e\u056f\5\u0172\u00ba\2\u056f\u0571\3\2\2"+
+ "\2\u0570\u056d\3\2\2\2\u0571\u0574\3\2\2\2\u0572\u0570\3\2\2\2\u0572\u0573"+
+ "\3\2\2\2\u0573\u0575\3\2\2\2\u0574\u0572\3\2\2\2\u0575\u0577\7j\2\2\u0576"+
+ "\u056b\3\2\2\2\u0576\u056c\3\2\2\2\u0577\u00eb\3\2\2\2\u0578\u057a\7h"+
+ "\2\2\u0579\u057b\7o\2\2\u057a\u0579\3\2\2\2\u057a\u057b\3\2\2\2\u057b"+
+ "\u057c\3\2\2\2\u057c\u057d\5\u00c4c\2\u057d\u00ed\3\2\2\2\u057e\u058a"+
+ "\7f\2\2\u057f\u058b\5\u0098M\2\u0580\u0586\7i\2\2\u0581\u0582\5\u0098"+
+ "M\2\u0582\u0583\5\u0172\u00ba\2\u0583\u0585\3\2\2\2\u0584\u0581\3\2\2"+
+ "\2\u0585\u0588\3\2\2\2\u0586\u0584\3\2\2\2\u0586\u0587\3\2\2\2\u0587\u0589"+
+ "\3\2\2\2\u0588\u0586\3\2\2\2\u0589\u058b\7j\2\2\u058a\u057f\3\2\2\2\u058a"+
+ "\u0580\3\2\2\2\u058b\u00ef\3\2\2\2\u058c\u058e\7k\2\2\u058d\u058f\5\u00f2"+
+ "z\2\u058e\u058d\3\2\2\2\u058e\u058f\3\2\2\2\u058f\u0590\3\2\2\2\u0590"+
+ "\u0591\7l\2\2\u0591\u00f1\3\2\2\2\u0592\u0594\5\u0172\u00ba\2\u0593\u0592"+
+ "\3\2\2\2\u0593\u0594\3\2\2\2\u0594\u0595\3\2\2\2\u0595\u0596\5\u00a8U"+
+ "\2\u0596\u0597\5\u0172\u00ba\2\u0597\u0599\3\2\2\2\u0598\u0593\3\2\2\2"+
+ "\u0599\u059a\3\2\2\2\u059a\u0598\3\2\2\2\u059a\u059b\3\2\2\2\u059b\u00f3"+
+ "\3\2\2\2\u059c\u05a2\5\u00f8}\2\u059d\u05a2\5\u00fa~\2\u059e\u05a2\5\u00fc"+
+ "\177\2\u059f\u05a2\5\u00f6|\2\u05a0\u05a2\5\u009aN\2\u05a1\u059c\3\2\2"+
+ "\2\u05a1\u059d\3\2\2\2\u05a1\u059e\3\2\2\2\u05a1\u059f\3\2\2\2\u05a1\u05a0"+
+ "\3\2\2\2\u05a2\u00f5\3\2\2\2\u05a3\u05a4\5\u00a6T\2\u05a4\u00f7\3\2\2"+
+ "\2\u05a5\u05a6\5\u00a6T\2\u05a6\u05a7\7\u008c\2\2\u05a7\u05a8\5\u00a6"+
+ "T\2\u05a8\u00f9\3\2\2\2\u05a9\u05aa\5\u00a6T\2\u05aa\u05ab\t\21\2\2\u05ab"+
+ "\u00fb\3\2\2\2\u05ac\u05ad\5\u00e8u\2\u05ad\u05ae\5\u00d8m\2\u05ae\u05af"+
+ "\5\u00e8u\2\u05af\u00fd\3\2\2\2\u05b0\u05b1\t\22\2\2\u05b1\u00ff\3\2\2"+
+ "\2\u05b2\u05b3\7h\2\2\u05b3\u05b5\7r\2\2\u05b4\u05b6\5\u00a8U\2\u05b5"+
+ "\u05b4\3\2\2\2\u05b5\u05b6\3\2\2\2\u05b6\u0101\3\2\2\2\u05b7\u05b9\7e"+
+ "\2\2\u05b8\u05ba\5\u00e8u\2\u05b9\u05b8\3\2\2\2\u05b9\u05ba\3\2\2\2\u05ba"+
+ "\u0103\3\2\2\2\u05bb\u05bd\7N\2\2\u05bc\u05be\7h\2\2\u05bd\u05bc\3\2\2"+
+ "\2\u05bd\u05be\3\2\2\2\u05be\u0105\3\2\2\2\u05bf\u05c1\7b\2\2\u05c0\u05c2"+
+ "\7h\2\2\u05c1\u05c0\3\2\2\2\u05c1\u05c2\3\2\2\2\u05c2\u0107\3\2\2\2\u05c3"+
+ "\u05c4\7Z\2\2\u05c4\u05c5\7h\2\2\u05c5\u0109\3\2\2\2\u05c6\u05c7\7^\2"+
+ "\2\u05c7\u010b\3\2\2\2\u05c8\u05d1\7_\2\2\u05c9\u05d2\5\u00a6T\2\u05ca"+
+ "\u05cb\5\u0172\u00ba\2\u05cb\u05cc\5\u00a6T\2\u05cc\u05d2\3\2\2\2\u05cd"+
+ "\u05ce\5\u00f4{\2\u05ce\u05cf\5\u0172\u00ba\2\u05cf\u05d0\5\u00a6T\2\u05d0"+
+ "\u05d2\3\2\2\2\u05d1\u05c9\3\2\2\2\u05d1\u05ca\3\2\2\2\u05d1\u05cd\3\2"+
+ "\2\2\u05d2\u05d3\3\2\2\2\u05d3\u05d9\5\u00f0y\2\u05d4\u05d7\7Y\2\2\u05d5"+
+ "\u05d8\5\u010c\u0087\2\u05d6\u05d8\5\u00f0y\2\u05d7\u05d5\3\2\2\2\u05d7"+
+ "\u05d6\3\2\2\2\u05d8\u05da\3\2\2\2\u05d9\u05d4\3\2\2\2\u05d9\u05da\3\2"+
+ "\2\2\u05da\u010d\3\2\2\2\u05db\u05de\5\u0110\u0089\2\u05dc\u05de\5\u0116"+
+ "\u008c\2\u05dd\u05db\3\2\2\2\u05dd\u05dc\3\2\2\2\u05de\u010f\3\2\2\2\u05df"+
+ "\u05ea\7\\\2\2\u05e0\u05e2\5\u00a6T\2\u05e1\u05e0\3\2\2\2\u05e1\u05e2"+
+ "\3\2\2\2\u05e2\u05eb\3\2\2\2\u05e3\u05e5\5\u00f4{\2\u05e4\u05e3\3\2\2"+
+ "\2\u05e4\u05e5\3\2\2\2\u05e5\u05e6\3\2\2\2\u05e6\u05e8\5\u0172\u00ba\2"+
+ "\u05e7\u05e9\5\u00a6T\2\u05e8\u05e7\3\2\2\2\u05e8\u05e9\3\2\2\2\u05e9"+
+ "\u05eb\3\2\2\2\u05ea\u05e1\3\2\2\2\u05ea\u05e4\3\2\2\2\u05eb\u05ec\3\2"+
+ "\2\2\u05ec\u05f0\7k\2\2\u05ed\u05ef\5\u0112\u008a\2\u05ee\u05ed\3\2\2"+
+ "\2\u05ef\u05f2\3\2\2\2\u05f0\u05ee\3\2\2\2\u05f0\u05f1\3\2\2\2\u05f1\u05f3"+
+ "\3\2\2\2\u05f2\u05f0\3\2\2\2\u05f3\u05f4\7l\2\2\u05f4\u0111\3\2\2\2\u05f5"+
+ "\u05f6\5\u0114\u008b\2\u05f6\u05f8\7r\2\2\u05f7\u05f9\5\u00f2z\2\u05f8"+
+ "\u05f7\3\2\2\2\u05f8\u05f9\3\2\2\2\u05f9\u0113\3\2\2\2\u05fa\u05fb\7S"+
+ "\2\2\u05fb\u05fe\5\u00e8u\2\u05fc\u05fe\7O\2\2\u05fd\u05fa\3\2\2\2\u05fd"+
+ "\u05fc\3\2\2\2\u05fe\u0115\3\2\2\2\u05ff\u0608\7\\\2\2\u0600\u0609\5\u0118"+
+ "\u008d\2\u0601\u0602\5\u0172\u00ba\2\u0602\u0603\5\u0118\u008d\2\u0603"+
+ "\u0609\3\2\2\2\u0604\u0605\5\u00f4{\2\u0605\u0606\5\u0172\u00ba\2\u0606"+
+ "\u0607\5\u0118\u008d\2\u0607\u0609\3\2\2\2\u0608\u0600\3\2\2\2\u0608\u0601"+
+ "\3\2\2\2\u0608\u0604\3\2\2\2\u0609\u060a\3\2\2\2\u060a\u060e\7k\2\2\u060b"+
+ "\u060d\5\u011a\u008e\2\u060c\u060b\3\2\2\2\u060d\u0610\3\2\2\2\u060e\u060c"+
+ "\3\2\2\2\u060e\u060f\3\2\2\2\u060f\u0611\3\2\2\2\u0610\u060e\3\2\2\2\u0611"+
+ "\u0612\7l\2\2\u0612\u0117\3\2\2\2\u0613\u0614\7h\2\2\u0614\u0616\7v\2"+
+ "\2\u0615\u0613\3\2\2\2\u0615\u0616\3\2\2\2\u0616\u0617\3\2\2\2\u0617\u0618"+
+ "\5\u00b6\\\2\u0618\u0619\7s\2\2\u0619\u061a\7i\2\2\u061a\u061b\7a\2\2"+
+ "\u061b\u061c\7j\2\2\u061c\u0119\3\2\2\2\u061d\u061e\5\u011c\u008f\2\u061e"+
+ "\u0620\7r\2\2\u061f\u0621\5\u00f2z\2\u0620\u061f\3\2\2\2\u0620\u0621\3"+
+ "\2\2\2\u0621\u011b\3\2\2\2\u0622\u0623\7S\2\2\u0623\u0626\5\u011e\u0090"+
+ "\2\u0624\u0626\7O\2\2\u0625\u0622\3\2\2\2\u0625\u0624\3\2\2\2\u0626\u011d"+
+ "\3\2\2\2\u0627\u062a\5\u00c4c\2\u0628\u062a\7g\2\2\u0629\u0627\3\2\2\2"+
+ "\u0629\u0628\3\2\2\2\u062a\u0632\3\2\2\2\u062b\u062e\7p\2\2\u062c\u062f"+
+ "\5\u00c4c\2\u062d\u062f\7g\2\2\u062e\u062c\3\2\2\2\u062e\u062d\3\2\2\2"+
+ "\u062f\u0631\3\2\2\2\u0630\u062b\3\2\2\2\u0631\u0634\3\2\2\2\u0632\u0630"+
+ "\3\2\2\2\u0632\u0633\3\2\2\2\u0633\u011f\3\2\2\2\u0634\u0632\3\2\2\2\u0635"+
+ "\u0636\7R\2\2\u0636\u063a\7k\2\2\u0637\u0639\5\u0122\u0092\2\u0638\u0637"+
+ "\3\2\2\2\u0639\u063c\3\2\2\2\u063a\u0638\3\2\2\2\u063a\u063b\3\2\2\2\u063b"+
+ "\u063d\3\2\2\2\u063c\u063a\3\2\2\2\u063d\u063e\7l\2\2\u063e\u0121\3\2"+
+ "\2\2\u063f\u0640\5\u0124\u0093\2\u0640\u0642\7r\2\2\u0641\u0643\5\u00f2"+
+ "z\2\u0642\u0641\3\2\2\2\u0642\u0643\3\2\2\2\u0643\u0123\3\2\2\2\u0644"+
+ "\u0647\7S\2\2\u0645\u0648\5\u00f8}\2\u0646\u0648\5\u0126\u0094\2\u0647"+
+ "\u0645\3\2\2\2\u0647\u0646\3\2\2\2\u0648\u064b\3\2\2\2\u0649\u064b\7O"+
+ "\2\2\u064a\u0644\3\2\2\2\u064a\u0649\3\2\2\2\u064b\u0125\3\2\2\2\u064c"+
+ "\u064d\5\u00e8u\2\u064d\u064e\7o\2\2\u064e\u0653\3\2\2\2\u064f\u0650\5"+
+ "\u00e6t\2\u0650\u0651\7v\2\2\u0651\u0653\3\2\2\2\u0652\u064c\3\2\2\2\u0652"+
+ "\u064f\3\2\2\2\u0652\u0653\3\2\2\2\u0653\u0654\3\2\2\2\u0654\u0655\5\u00a6"+
+ "T\2\u0655\u0127\3\2\2\2\u0656\u065a\7c\2\2\u0657\u065b\5\u00a6T\2\u0658"+
+ "\u065b\5\u012a\u0096\2\u0659\u065b\5\u00dan\2\u065a\u0657\3\2\2\2\u065a"+
+ "\u0658\3\2\2\2\u065a\u0659\3\2\2\2\u065a\u065b\3\2\2\2\u065b\u065c\3\2"+
+ "\2\2\u065c\u065d\5\u00f0y\2\u065d\u0129\3\2\2\2\u065e\u0660\5\u00f4{\2"+
+ "\u065f\u065e\3\2\2\2\u065f\u0660\3\2\2\2\u0660\u0661\3\2\2\2\u0661\u0663"+
+ "\5\u0172\u00ba\2\u0662\u0664\5\u00a6T\2\u0663\u0662\3\2\2\2\u0663\u0664"+
+ "\3\2\2\2\u0664\u0665\3\2\2\2\u0665\u0667\5\u0172\u00ba\2\u0666\u0668\5"+
+ "\u00f4{\2\u0667\u0666\3\2\2\2\u0667\u0668\3\2\2\2\u0668\u012b\3\2\2\2"+
+ "\u0669\u066a\7U\2\2\u066a\u066b\5\u00a6T\2\u066b\u012d\3\2\2\2\u066c\u066f"+
+ "\5\u0152\u00aa\2\u066d\u066f\7h\2\2\u066e\u066c\3\2\2\2\u066e\u066d\3"+
+ "\2\2\2\u066f\u012f\3\2\2\2\u0670\u0671\7m\2\2\u0671\u0672\5\u0132\u009a"+
+ "\2\u0672\u0673\7n\2\2\u0673\u0674\5\u0134\u009b\2\u0674\u0131\3\2\2\2"+
+ "\u0675\u0676\5\u00a6T\2\u0676\u0133\3\2\2\2\u0677\u0678\5\u00c4c\2\u0678"+
+ "\u0135\3\2\2\2\u0679\u067a\7\u008a\2\2\u067a\u067b\5\u00c4c\2\u067b\u0137"+
+ "\3\2\2\2\u067c\u067d\7m\2\2\u067d\u067e\7n\2\2\u067e\u067f\5\u0134\u009b"+
+ "\2\u067f\u0139\3\2\2\2\u0680\u0681\7V\2\2\u0681\u0682\7m\2\2\u0682\u0683"+
+ "\5\u00c4c\2\u0683\u0684\7n\2\2\u0684\u0685\5\u0134\u009b\2\u0685\u013b"+
+ "\3\2\2\2\u0686\u068c\7X\2\2\u0687\u0688\7X\2\2\u0688\u068c\7\u008c\2\2"+
+ "\u0689\u068a\7\u008c\2\2\u068a\u068c\7X\2\2\u068b\u0686\3\2\2\2\u068b"+
+ "\u0687\3\2\2\2\u068b\u0689\3\2\2\2\u068c\u068d\3\2\2\2\u068d\u068e\5\u0134"+
+ "\u009b\2\u068e\u013d\3\2\2\2\u068f\u0690\7P\2\2\u0690\u0691\5\u0140\u00a1"+
+ "\2\u0691\u013f\3\2\2\2\u0692\u0693\5\u0144\u00a3\2\u0693\u0694\5\u0142"+
+ "\u00a2\2\u0694\u0697\3\2\2\2\u0695\u0697\5\u0144\u00a3\2\u0696\u0692\3"+
+ "\2\2\2\u0696\u0695\3\2\2\2\u0697\u0141\3\2\2\2\u0698\u069b\5\u0144\u00a3"+
+ "\2\u0699\u069b\5\u00c4c\2\u069a\u0698\3\2\2\2\u069a\u0699\3\2\2\2\u069b"+
+ "\u0143\3\2\2\2\u069c\u06a8\7i\2\2\u069d\u06a2\5\u009eP\2\u069e\u069f\7"+
+ "p\2\2\u069f\u06a1\5\u009eP\2\u06a0\u069e\3\2\2\2\u06a1\u06a4\3\2\2\2\u06a2"+
+ "\u06a0\3\2\2\2\u06a2\u06a3\3\2\2\2\u06a3\u06a6\3\2\2\2\u06a4\u06a2\3\2"+
+ "\2\2\u06a5\u06a7\7p\2\2\u06a6\u06a5\3\2\2\2\u06a6\u06a7\3\2\2\2\u06a7"+
+ "\u06a9\3\2\2\2\u06a8\u069d\3\2\2\2\u06a8\u06a9\3\2\2\2\u06a9\u06aa\3\2"+
+ "\2\2\u06aa\u06ab\7j\2\2\u06ab\u0145\3\2\2\2\u06ac\u06ad\5\u0148\u00a5"+
+ "\2\u06ad\u06ae\7i\2\2\u06ae\u06b0\5\u00a6T\2\u06af\u06b1\7p\2\2\u06b0"+
+ "\u06af\3\2\2\2\u06b0\u06b1\3\2\2\2\u06b1\u06b2\3\2\2\2\u06b2\u06b3\7j"+
+ "\2\2\u06b3\u0147\3\2\2\2\u06b4\u06ba\5\u00c6d\2\u06b5\u06b6\7i\2\2\u06b6"+
+ "\u06b7\5\u0148\u00a5\2\u06b7\u06b8\7j\2\2\u06b8\u06ba\3\2\2\2\u06b9\u06b4"+
+ "\3\2\2\2\u06b9\u06b5\3\2\2\2\u06ba\u0149\3\2\2\2\u06bb\u06c2\5\u014c\u00a7"+
+ "\2\u06bc\u06c2\5\u0150\u00a9\2\u06bd\u06be\7i\2\2\u06be\u06bf\5\u00a6"+
+ "T\2\u06bf\u06c0\7j\2\2\u06c0\u06c2\3\2\2\2\u06c1\u06bb\3\2\2\2\u06c1\u06bc"+
+ "\3\2\2\2\u06c1\u06bd\3\2\2\2\u06c2\u014b\3\2\2\2\u06c3\u06c7\5\u00b4["+
+ "\2\u06c4\u06c7\5\u0154\u00ab\2\u06c5\u06c7\5\u00b8]\2\u06c6\u06c3\3\2"+
+ "\2\2\u06c6\u06c4\3\2\2\2\u06c6\u06c5\3\2\2\2\u06c7\u014d\3\2\2\2\u06c8"+
+ "\u06c9\t\23\2\2\u06c9\u014f\3\2\2\2\u06ca\u06cb\7h\2\2\u06cb\u0151\3\2"+
+ "\2\2\u06cc\u06cd\7h\2\2\u06cd\u06ce\7s\2\2\u06ce\u06cf\7h\2\2\u06cf\u0153"+
+ "\3\2\2\2\u06d0\u06d1\5\u00ccg\2\u06d1\u06d2\5\u0156\u00ac\2\u06d2\u0155"+
+ "\3\2\2\2\u06d3\u06d8\7k\2\2\u06d4\u06d6\5\u0158\u00ad\2\u06d5\u06d7\7"+
+ "p\2\2\u06d6\u06d5\3\2\2\2\u06d6\u06d7\3\2\2\2\u06d7\u06d9\3\2\2\2\u06d8"+
+ "\u06d4\3\2\2\2\u06d8\u06d9\3\2\2\2\u06d9\u06da\3\2\2\2\u06da\u06db\7l"+
+ "\2\2\u06db\u0157\3\2\2\2\u06dc\u06e1\5\u015a\u00ae\2\u06dd\u06de\7p\2"+
+ "\2\u06de\u06e0\5\u015a\u00ae\2\u06df\u06dd\3\2\2\2\u06e0\u06e3\3\2\2\2"+
+ "\u06e1\u06df\3\2\2\2\u06e1\u06e2\3\2\2\2\u06e2\u0159\3\2\2\2\u06e3\u06e1"+
+ "\3\2\2\2\u06e4\u06e5\5\u015c\u00af\2\u06e5\u06e6\7r\2\2\u06e6\u06e8\3"+
+ "\2\2\2\u06e7\u06e4\3\2\2\2\u06e7\u06e8\3\2\2\2\u06e8\u06e9\3\2\2\2\u06e9"+
+ "\u06ea\5\u015e\u00b0\2\u06ea\u015b\3\2\2\2\u06eb\u06ee\5\u00a6T\2\u06ec"+
+ "\u06ee\5\u0156\u00ac\2\u06ed\u06eb\3\2\2\2\u06ed\u06ec\3\2\2\2\u06ee\u015d"+
+ "\3\2\2\2\u06ef\u06f2\5\u00a6T\2\u06f0\u06f2\5\u0156\u00ac\2\u06f1\u06ef"+
+ "\3\2\2\2\u06f1\u06f0\3\2\2\2\u06f2\u015f\3\2\2\2\u06f3\u06f4\7W\2\2\u06f4"+
+ "\u06fa\7k\2\2\u06f5\u06f6\5\u0162\u00b2\2\u06f6\u06f7\5\u0172\u00ba\2"+
+ "\u06f7\u06f9\3\2\2\2\u06f8\u06f5\3\2\2\2\u06f9\u06fc\3\2\2\2\u06fa\u06f8"+
+ "\3\2\2\2\u06fa\u06fb\3\2\2\2\u06fb\u06fd\3\2\2\2\u06fc\u06fa\3\2\2\2\u06fd"+
+ "\u06fe\7l\2\2\u06fe\u0161\3\2\2\2\u06ff\u0700\5\u00e6t\2\u0700\u0701\5"+
+ "\u00c4c\2\u0701\u0704\3\2\2\2\u0702\u0704\5\u0166\u00b4\2\u0703\u06ff"+
+ "\3\2\2\2\u0703\u0702\3\2\2\2\u0704\u0706\3\2\2\2\u0705\u0707\5\u0164\u00b3"+
+ "\2\u0706\u0705\3\2\2\2\u0706\u0707\3\2\2\2\u0707\u0163\3\2\2\2\u0708\u0709"+
+ "\t\24\2\2\u0709\u0165\3\2\2\2\u070a\u070c\7\u008a\2\2\u070b\u070a\3\2"+
+ "\2\2\u070b\u070c\3\2\2\2\u070c\u070d\3\2\2\2\u070d\u070e\5\u012e\u0098"+
+ "\2\u070e\u0167\3\2\2\2\u070f\u0710\7m\2\2\u0710\u0711\5\u00a6T\2\u0711"+
+ "\u0712\7n\2\2\u0712\u0169\3\2\2\2\u0713\u0714\7s\2\2\u0714\u0715\7i\2"+
+ "\2\u0715\u0716\5\u00c4c\2\u0716\u0717\7j\2\2\u0717\u016b\3\2\2\2\u0718"+
+ "\u0727\7i\2\2\u0719\u0720\5\u00e8u\2\u071a\u071d\5\u0148\u00a5\2\u071b"+
+ "\u071c\7p\2\2\u071c\u071e\5\u00e8u\2\u071d\u071b\3\2\2\2\u071d\u071e\3"+
+ "\2\2\2\u071e\u0720\3\2\2\2\u071f\u0719\3\2\2\2\u071f\u071a\3\2\2\2\u0720"+
+ "\u0722\3\2\2\2\u0721\u0723\7w\2\2\u0722\u0721\3\2\2\2\u0722\u0723\3\2"+
+ "\2\2\u0723\u0725\3\2\2\2\u0724\u0726\7p\2\2\u0725\u0724\3\2\2\2\u0725"+
+ "\u0726\3\2\2\2\u0726\u0728\3\2\2\2\u0727\u071f\3\2\2\2\u0727\u0728\3\2"+
+ "\2\2\u0728\u0729\3\2\2\2\u0729\u072a\7j\2\2\u072a\u016d\3\2\2\2\u072b"+
+ "\u072c\5\u0148\u00a5\2\u072c\u072d\7s\2\2\u072d\u072e\7h\2\2\u072e\u016f"+
+ "\3\2\2\2\u072f\u0730\5\u00c4c\2\u0730\u0171\3\2\2\2\u0731\u0736\7q\2\2"+
+ "\u0732\u0736\7\2\2\3\u0733\u0736\7\u00a2\2\2\u0734\u0736\6\u00ba\24\2"+
+ "\u0735\u0731\3\2\2\2\u0735\u0732\3\2\2\2\u0735\u0733\3\2\2\2\u0735\u0734"+
+ "\3\2\2\2\u0736\u0173\3\2\2\2\u00bd\u0182\u0187\u018e\u0198\u019e\u01a4"+
+ "\u01b4\u01b8\u01c1\u01cd\u01d1\u01d7\u01e0\u01ea\u01fc\u020a\u020e\u0215"+
+ "\u021d\u0226\u0246\u024e\u026b\u027e\u028d\u029a\u02a3\u02b1\u02ba\u02c6"+
+ "\u02db\u02e2\u02e7\u02ec\u02f6\u02f9\u02fd\u0301\u0309\u0311\u0316\u031e"+
+ "\u0320\u0325\u032c\u0334\u0337\u033d\u0342\u0344\u0347\u034e\u0353\u0366"+
+ "\u036e\u0372\u0375\u037b\u037f\u0382\u038c\u0393\u039a\u03a6\u03ac\u03b3"+
+ "\u03b8\u03be\u03ca\u03d0\u03d4\u03dc\u03e0\u03e6\u03e9\u03ef\u03f4\u040d"+
+ "\u0430\u0432\u0449\u0451\u045c\u0463\u046a\u0474\u0482\u0498\u049a\u04a2"+
+ "\u04a6\u04aa\u04ad\u04b6\u04bc\u04c6\u04ce\u04d4\u04dd\u04e8\u04f3\u04f7"+
+ "\u04f9\u0504\u050d\u0511\u0514\u051b\u0526\u0530\u0536\u0538\u0542\u054c"+
+ "\u0550\u0554\u0558\u055f\u0567\u0572\u0576\u057a\u0586\u058a\u058e\u0593"+
+ "\u059a\u05a1\u05b5\u05b9\u05bd\u05c1\u05d1\u05d7\u05d9\u05dd\u05e1\u05e4"+
+ "\u05e8\u05ea\u05f0\u05f8\u05fd\u0608\u060e\u0615\u0620\u0625\u0629\u062e"+
+ "\u0632\u063a\u0642\u0647\u064a\u0652\u065a\u065f\u0663\u0667\u066e\u068b"+
+ "\u0696\u069a\u06a2\u06a6\u06a8\u06b0\u06b9\u06c1\u06c6\u06d6\u06d8\u06e1"+
+ "\u06e7\u06ed\u06f1\u06fa\u0703\u0706\u070b\u071d\u071f\u0722\u0725\u0727"+
+ "\u0735";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
@@ -13655,4 +13717,4 @@ private boolean eos_sempred(EosContext _localctx, int predIndex) {
_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
}
}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/viper/gobra/frontend/GobraParserBaseVisitor.java b/src/main/java/viper/gobra/frontend/GobraParserBaseVisitor.java
index 27688feeb..0f25a2c9e 100644
--- a/src/main/java/viper/gobra/frontend/GobraParserBaseVisitor.java
+++ b/src/main/java/viper/gobra/frontend/GobraParserBaseVisitor.java
@@ -1,3 +1,4 @@
+// Generated from src/main/antlr4/GobraParser.g4 by ANTLR 4.9.2
package viper.gobra.frontend;
import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
@@ -255,6 +256,13 @@ public class GobraParserBaseVisitor extends AbstractParseTreeVisitor imple
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitIsComparable(GobraParser.IsComparableContext ctx) { return visitChildren(ctx); }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.
+ */
+ @Override public T visitLow(GobraParser.LowContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
@@ -968,21 +976,21 @@ public class GobraParserBaseVisitor extends AbstractParseTreeVisitor imple
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
- @Override public T visitLow(GobraParser.LowContext ctx) { return visitChildren(ctx); }
+ @Override public T visitLowSliceArgument(GobraParser.LowSliceArgumentContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
- @Override public T visitHigh(GobraParser.HighContext ctx) { return visitChildren(ctx); }
+ @Override public T visitHighSliceArgument(GobraParser.HighSliceArgumentContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
- @Override public T visitCap(GobraParser.CapContext ctx) { return visitChildren(ctx); }
+ @Override public T visitCapSliceArgument(GobraParser.CapSliceArgumentContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
@@ -1529,4 +1537,4 @@ public class GobraParserBaseVisitor extends AbstractParseTreeVisitor imple
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitEos(GobraParser.EosContext ctx) { return visitChildren(ctx); }
-}
+}
\ No newline at end of file
diff --git a/src/main/java/viper/gobra/frontend/GobraParserVisitor.java b/src/main/java/viper/gobra/frontend/GobraParserVisitor.java
index 79f5cf002..017cadc53 100644
--- a/src/main/java/viper/gobra/frontend/GobraParserVisitor.java
+++ b/src/main/java/viper/gobra/frontend/GobraParserVisitor.java
@@ -1,3 +1,4 @@
+// Generated from src/main/antlr4/GobraParser.g4 by ANTLR 4.9.2
package viper.gobra.frontend;
import org.antlr.v4.runtime.tree.ParseTreeVisitor;
@@ -223,6 +224,12 @@ public interface GobraParserVisitor extends ParseTreeVisitor {
* @return the visitor result
*/
T visitIsComparable(GobraParser.IsComparableContext ctx);
+ /**
+ * Visit a parse tree produced by {@link GobraParser#low}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ T visitLow(GobraParser.LowContext ctx);
/**
* Visit a parse tree produced by {@link GobraParser#typeOf}.
* @param ctx the parse tree
@@ -863,23 +870,23 @@ public interface GobraParserVisitor extends ParseTreeVisitor {
*/
T visitSlice_(GobraParser.Slice_Context ctx);
/**
- * Visit a parse tree produced by {@link GobraParser#low}.
+ * Visit a parse tree produced by {@link GobraParser#lowSliceArgument}.
* @param ctx the parse tree
* @return the visitor result
*/
- T visitLow(GobraParser.LowContext ctx);
+ T visitLowSliceArgument(GobraParser.LowSliceArgumentContext ctx);
/**
- * Visit a parse tree produced by {@link GobraParser#high}.
+ * Visit a parse tree produced by {@link GobraParser#highSliceArgument}.
* @param ctx the parse tree
* @return the visitor result
*/
- T visitHigh(GobraParser.HighContext ctx);
+ T visitHighSliceArgument(GobraParser.HighSliceArgumentContext ctx);
/**
- * Visit a parse tree produced by {@link GobraParser#cap}.
+ * Visit a parse tree produced by {@link GobraParser#capSliceArgument}.
* @param ctx the parse tree
* @return the visitor result
*/
- T visitCap(GobraParser.CapContext ctx);
+ T visitCapSliceArgument(GobraParser.CapSliceArgumentContext ctx);
/**
* Visit a parse tree produced by {@link GobraParser#assign_op}.
* @param ctx the parse tree
@@ -1348,4 +1355,4 @@ public interface GobraParserVisitor extends ParseTreeVisitor {
* @return the visitor result
*/
T visitEos(GobraParser.EosContext ctx);
-}
+}
\ No newline at end of file
diff --git a/src/main/scala/viper/gobra/ast/frontend/Ast.scala b/src/main/scala/viper/gobra/ast/frontend/Ast.scala
index dcc5c3a65..0db5c8724 100644
--- a/src/main/scala/viper/gobra/ast/frontend/Ast.scala
+++ b/src/main/scala/viper/gobra/ast/frontend/Ast.scala
@@ -1031,6 +1031,8 @@ case class PTypeExpr(typ: PType) extends PGhostExpression
case class PIsComparable(exp: PExpressionOrType) extends PGhostExpression
+case class PLow(exp: PExpression) extends PGhostExpression
+
case class PMagicWand(left: PExpression, right: PExpression) extends PGhostExpression
/* ** Option types */
diff --git a/src/main/scala/viper/gobra/ast/frontend/PrettyPrinter.scala b/src/main/scala/viper/gobra/ast/frontend/PrettyPrinter.scala
index eaddcec2b..dbc6ed205 100644
--- a/src/main/scala/viper/gobra/ast/frontend/PrettyPrinter.scala
+++ b/src/main/scala/viper/gobra/ast/frontend/PrettyPrinter.scala
@@ -516,6 +516,8 @@ class DefaultPrettyPrinter extends PrettyPrinter with kiama.output.PrettyPrinter
case PTypeExpr(typ) => "type" <> brackets(showType(typ))
case PIsComparable(exp) => "isComparable" <> parens(showExprOrType(exp))
+ case PLow(exp) => "low" <> parens(showExpr(exp))
+
case POptionNone(t) => "none" <> brackets(showType(t))
case POptionSome(e) => "some" <> parens(showExpr(e))
case POptionGet(e) => "get" <> parens(showExpr(e))
diff --git a/src/main/scala/viper/gobra/ast/internal/PrettyPrinter.scala b/src/main/scala/viper/gobra/ast/internal/PrettyPrinter.scala
index 4d0cc0040..0eee9c1a8 100644
--- a/src/main/scala/viper/gobra/ast/internal/PrettyPrinter.scala
+++ b/src/main/scala/viper/gobra/ast/internal/PrettyPrinter.scala
@@ -562,6 +562,8 @@ class DefaultPrettyPrinter extends PrettyPrinter with kiama.output.PrettyPrinter
case TupleTExpr(elem) => parens(showExprList(elem))
case DefinedTExpr(name) => name
+ case Low(exp) => "low" <> parens(showExpr(exp))
+
case DfltVal(typ) => "dflt" <> brackets(showType(typ))
case Tuple(args) => parens(showExprList(args))
case Deref(exp, _) => "*" <> showExpr(exp)
diff --git a/src/main/scala/viper/gobra/ast/internal/Program.scala b/src/main/scala/viper/gobra/ast/internal/Program.scala
index a23f14046..5921bfcd2 100644
--- a/src/main/scala/viper/gobra/ast/internal/Program.scala
+++ b/src/main/scala/viper/gobra/ast/internal/Program.scala
@@ -640,7 +640,11 @@ case class MathMapTExpr(keys: Expr, elems: Expr)(val info: Source.Parser.Info) e
case class OptionTExpr(elems: Expr)(val info: Source.Parser.Info) extends TypeExpr
case class TupleTExpr(elems: Vector[Expr])(val info: Source.Parser.Info) extends TypeExpr
+/* ** Information Flow */
+case class Low(exp: Expr)(val info: Source.Parser.Info) extends Expr {
+ override val typ: Type = BoolT(Addressability.rValue)
+}
/* ** Higher-order predicate expressions */
diff --git a/src/main/scala/viper/gobra/frontend/Desugar.scala b/src/main/scala/viper/gobra/frontend/Desugar.scala
index 0eff086cd..9bb0eecb5 100644
--- a/src/main/scala/viper/gobra/frontend/Desugar.scala
+++ b/src/main/scala/viper/gobra/frontend/Desugar.scala
@@ -4265,6 +4265,8 @@ object Desugar {
case t => Violation.violation(s"Expected interface or sort type, but got $t")
}
+ case PLow(exp) => for { wExp <- go(exp) } yield in.Low(wExp)(src)
+
case PIn(left, right) => for {
dleft <- go(left)
dright <- go(right)
diff --git a/src/main/scala/viper/gobra/frontend/InformativeErrorListener.scala b/src/main/scala/viper/gobra/frontend/InformativeErrorListener.scala
index 9a9a69ae0..471f0e521 100644
--- a/src/main/scala/viper/gobra/frontend/InformativeErrorListener.scala
+++ b/src/main/scala/viper/gobra/frontend/InformativeErrorListener.scala
@@ -110,7 +110,7 @@ class InformativeErrorListener(val messages: ListBuffer[ParserError], val source
case (GobraParser.DECLARE_ASSIGN, _ : TypeSpecContext) => GotAssignErrorType()
// We expected more tokens inside a slice expression but got a closing bracket: One of the
// limits must be missing.
- case (GobraParser.R_BRACKET, expr : ExpressionContext) if expr.parent.isInstanceOf[CapContext] => SliceMissingIndex(3)
+ case (GobraParser.R_BRACKET, expr : ExpressionContext) if expr.parent.isInstanceOf[CapSliceArgumentContext] => SliceMissingIndex(3)
case _ => DefaultExtraneous()
}
}
@@ -128,7 +128,7 @@ class InformativeErrorListener(val messages: ListBuffer[ParserError], val source
case (Token.EOF, _) => DefaultMismatch()
// Again, we have an unexpected :=, so suggest using a =
case (GobraParser.DECLARE_ASSIGN, _) => GotAssignErrorType()
- case (GobraParser.R_BRACKET, e : ExpressionContext) if e.parent.isInstanceOf[CapContext] => SliceMissingIndex(3)
+ case (GobraParser.R_BRACKET, e : ExpressionContext) if e.parent.isInstanceOf[CapSliceArgumentContext] => SliceMissingIndex(3)
case _ => DefaultMismatch()
}
}
@@ -156,7 +156,7 @@ class InformativeErrorListener(val messages: ListBuffer[ParserError], val source
case _ => DefaultNoViable(exception)
}
}
- case e: ExpressionContext if e.parent.isInstanceOf[CapContext] => SliceMissingIndex(3)
+ case e: ExpressionContext if e.parent.isInstanceOf[CapSliceArgumentContext] => SliceMissingIndex(3)
case _ if new_reserved.contains(context.offendingSymbol.getType) => ReservedWord()
case _ => DefaultNoViable(exception)
}
diff --git a/src/main/scala/viper/gobra/frontend/ParseTreeTranslator.scala b/src/main/scala/viper/gobra/frontend/ParseTreeTranslator.scala
index 73425dd07..5faf838b8 100644
--- a/src/main/scala/viper/gobra/frontend/ParseTreeTranslator.scala
+++ b/src/main/scala/viper/gobra/frontend/ParseTreeTranslator.scala
@@ -1318,9 +1318,9 @@ class ParseTreeTranslator(pom: PositionManager, source: Source, specOnly : Boole
* @param ctx the parse tree
*/
override def visitSlice_(ctx: Slice_Context): (Option[PExpression], Option[PExpression], Option[PExpression]) = {
- val low = if (ctx.low() != null) Some(visitNode[PExpression](ctx.low().expression())).pos() else None
- val high = if (ctx.high() != null) Some(visitNode[PExpression](ctx.high().expression())).pos() else None
- val cap = if (ctx.cap() != null) Some(visitNode[PExpression](ctx.cap().expression())).pos() else None
+ val low = if (ctx.lowSliceArgument() != null) Some(visitNode[PExpression](ctx.lowSliceArgument().expression())).pos() else None
+ val high = if (ctx.highSliceArgument() != null) Some(visitNode[PExpression](ctx.highSliceArgument().expression())).pos() else None
+ val cap = if (ctx.capSliceArgument() != null) Some(visitNode[PExpression](ctx.capSliceArgument().expression())).pos() else None
(low, high, cap)
}
@@ -1383,6 +1383,14 @@ class ParseTreeTranslator(pom: PositionManager, source: Source, specOnly : Boole
case Vector("isComparable", "(", e : PExpression, ")") => PIsComparable(e)
}
+ /**
+ * Visits the rule
+ * typeOf: LOW L_PAREN expression R_PAREN;
+ */
+ override def visitLow(ctx: LowContext): AnyRef = super.visitLow(ctx) match {
+ case Vector("low", "(", expr: PExpression, ")") => PLow(expr)
+ }
+
/**
* Visits the rule
diff --git a/src/main/scala/viper/gobra/frontend/info/implementation/property/Addressability.scala b/src/main/scala/viper/gobra/frontend/info/implementation/property/Addressability.scala
index 30ade529b..e9d5f9012 100644
--- a/src/main/scala/viper/gobra/frontend/info/implementation/property/Addressability.scala
+++ b/src/main/scala/viper/gobra/frontend/info/implementation/property/Addressability.scala
@@ -102,7 +102,7 @@ trait Addressability extends BaseProperty { this: TypeInfoImpl =>
case _: PConditional | _: PImplication | _: PForall | _: PExists => AddrMod.rValue
case _: PAccess | _: PPredicateAccess | _: PMagicWand => AddrMod.rValue
case _: PClosureImplements => AddrMod.rValue
- case _: PTypeOf | _: PIsComparable => AddrMod.rValue
+ case _: PTypeOf | _: PIsComparable | _: PLow => AddrMod.rValue
case _: PIn | _: PMultiplicity | _: PSequenceAppend |
_: PGhostCollectionExp | _: PRangeSequence | _: PUnion | _: PIntersection |
_: PSetMinus | _: PSubset | _: PMapKeys | _: PMapValues => AddrMod.rValue
diff --git a/src/main/scala/viper/gobra/frontend/info/implementation/typing/ghost/GhostExprTyping.scala b/src/main/scala/viper/gobra/frontend/info/implementation/typing/ghost/GhostExprTyping.scala
index a49c58c22..9cd674439 100644
--- a/src/main/scala/viper/gobra/frontend/info/implementation/typing/ghost/GhostExprTyping.scala
+++ b/src/main/scala/viper/gobra/frontend/info/implementation/typing/ghost/GhostExprTyping.scala
@@ -107,6 +107,8 @@ trait GhostExprTyping extends BaseTyping { this: TypeInfoImpl =>
case t => error(n, s"expected interface or type, but got an expression of type $t")
}
+ case PLow(e) => isExpr(e).out
+
case n: PGhostEquals =>
val lType = typ(n.left)
val rType = typ(n.right)
@@ -248,6 +250,8 @@ trait GhostExprTyping extends BaseTyping { this: TypeInfoImpl =>
case _: PTypeOf => SortT
case _: PTypeExpr => SortT
case _: PIsComparable => BooleanT
+
+ case _: PLow => BooleanT
case _: PGhostEquals | _: PGhostUnequals => BooleanT
case POptionNone(t) => OptionT(typeSymbType(t))
@@ -448,6 +452,8 @@ trait GhostExprTyping extends BaseTyping { this: TypeInfoImpl =>
case _: PTypeExpr => true
case n: PIsComparable => asExpr(n.exp).forall(go)
+ case n: PLow => go(n.exp)
+
case PCompositeLit(typ, _) => typ match {
case _: PArrayType | _: PImplicitSizeArrayType => !strong
case _ => true
diff --git a/src/main/scala/viper/gobra/translator/Translator.scala b/src/main/scala/viper/gobra/translator/Translator.scala
index 537b7d94f..e235071f9 100644
--- a/src/main/scala/viper/gobra/translator/Translator.scala
+++ b/src/main/scala/viper/gobra/translator/Translator.scala
@@ -13,6 +13,7 @@ import viper.gobra.frontend.{Config, PackageInfo}
import viper.gobra.reporting.GeneratedViperMessage
import viper.gobra.translator.context.DfltTranslatorConfig
import viper.gobra.translator.encodings.programs.ProgramsImpl
+import viper.gobra.translator.transformers.hyper.SIFTransformer
import viper.gobra.translator.transformers.{AssumeTransformer, TerminationTransformer, ViperTransformer}
import viper.gobra.util.Violation
import viper.silver.ast.pretty.FastPrettyPrinter
@@ -27,7 +28,8 @@ object Translator {
val transformers: Seq[ViperTransformer] = Seq(
new AssumeTransformer,
- new TerminationTransformer
+ new TerminationTransformer,
+ // new SIFTransformer
)
val transformedTask = transformers.foldLeft(task) {
diff --git a/src/main/scala/viper/gobra/translator/encodings/typeless/AssertionEncoding.scala b/src/main/scala/viper/gobra/translator/encodings/typeless/AssertionEncoding.scala
index 46c9b13d6..6d319ad37 100644
--- a/src/main/scala/viper/gobra/translator/encodings/typeless/AssertionEncoding.scala
+++ b/src/main/scala/viper/gobra/translator/encodings/typeless/AssertionEncoding.scala
@@ -10,6 +10,7 @@ import org.bitbucket.inkytonik.kiama.==>
import viper.gobra.ast.{internal => in}
import viper.gobra.translator.encodings.combinators.Encoding
import viper.gobra.translator.context.Context
+import viper.gobra.translator.transformers.hyper.SIFLowExp
import viper.gobra.translator.util.ViperWriter.CodeWriter
import viper.gobra.util.Violation
import viper.gobra.translator.util.{ViperUtil => vu}
@@ -61,6 +62,8 @@ class AssertionEncoding extends Encoding {
l = ctx.variable(let.left)
r <- ctx.expression(let.right)
} yield withSrc(vpr.Let(l, r, exp), let)
+
+ case n@ in.Low(e) => for {arg <- ctx.expression(e) } yield withSrc(SIFLowExp(arg), n)
}
override def assertion(ctx: Context): in.Assertion ==> CodeWriter[vpr.Exp] = {
diff --git a/src/main/scala/viper/gobra/translator/transformers/hyper/SIFAstExtensions.scala b/src/main/scala/viper/gobra/translator/transformers/hyper/SIFAstExtensions.scala
new file mode 100644
index 000000000..e4c4bf210
--- /dev/null
+++ b/src/main/scala/viper/gobra/translator/transformers/hyper/SIFAstExtensions.scala
@@ -0,0 +1,181 @@
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+//
+// Copyright (c) 2011-2023 ETH Zurich.
+
+package viper.gobra.translator.transformers.hyper
+
+import viper.silver.ast.pretty.PrettyPrintPrimitives
+import viper.silver.ast.pretty.FastPrettyPrinter.{ContOps, nil, parens, show, showBlock, text}
+import viper.silver.ast._
+import viper.silver.verifier.VerificationResult
+
+case class SIFReturnStmt(exp: Option[Exp], resVar: Option[LocalVar])
+ (val pos: Position = NoPosition,
+ val info: Info = NoInfo,
+ val errT: ErrorTrafo = NoTrafos) extends ExtensionStmt {
+ override def extensionSubnodes: Seq[Node] = Seq(exp, resVar).collect({case Some(x) => x})
+
+ override def prettyPrint: PrettyPrintPrimitives#Cont = text("return") <+> (exp match {
+ case Some(x) => show(x)
+ case None => nil
+ })
+}
+
+case class SIFBreakStmt()(val pos: Position = NoPosition,
+ val info: Info = NoInfo,
+ val errT: ErrorTrafo = NoTrafos) extends ExtensionStmt {
+ override def extensionSubnodes: Seq[Node] = Seq()
+
+ override def prettyPrint: PrettyPrintPrimitives#Cont = text("break")
+}
+
+case class SIFContinueStmt()(val pos: Position = NoPosition,
+ val info: Info = NoInfo,
+ val errT: ErrorTrafo = NoTrafos) extends ExtensionStmt {
+ override def extensionSubnodes: Seq[Node] = Seq()
+
+ override def prettyPrint: PrettyPrintPrimitives#Cont = text("continue")
+}
+
+case class SIFRaiseStmt(assignment: Option[LocalVarAssign])
+ (val pos: Position = NoPosition,
+ val info: Info = NoInfo,
+ val errT: ErrorTrafo = NoTrafos) extends ExtensionStmt {
+ override def extensionSubnodes: Seq[Node] = assignment match {
+ case Some(a) => Seq(a)
+ case None => Seq()
+ }
+
+ override def prettyPrint: PrettyPrintPrimitives#Cont = text("raise") <+>
+ (assignment match {case Some(a) => show(a) case None => nil})
+}
+
+case class SIFExceptionHandler(errVar: LocalVar, exception: Exp, body: Seqn)
+ (val pos: Position = NoPosition,
+ val info: Info = NoInfo,
+ val errT: ErrorTrafo = NoTrafos) extends ExtensionStmt {
+ override def extensionSubnodes: Seq[Node] = Seq(errVar, exception, body)
+
+ override def prettyPrint: PrettyPrintPrimitives#Cont = text("catch") <+> parens(show(exception)) <+>
+ showBlock(body)
+}
+
+case class SIFTryCatchStmt(body: Seqn,
+ catchBlocks: Seq[SIFExceptionHandler],
+ elseBlock: Option[Seqn],
+ finallyBlock: Option[Seqn])
+ (val pos: Position = NoPosition,
+ val info: Info = NoInfo,
+ val errT: ErrorTrafo = NoTrafos) extends ExtensionStmt {
+ override def extensionSubnodes: Seq[Node] = Seq(body) ++
+ Seq(elseBlock, finallyBlock).collect({case Some(x) => x}) ++
+ catchBlocks.flatMap(h => h.subnodes)
+
+ override def prettyPrint: PrettyPrintPrimitives#Cont = {
+ text("try") <+> showBlock(body) <>
+ catchBlocks.map(h => h.prettyPrint)
+ .fold(nil)((l, r) => l <+> r) <+>
+ (elseBlock match {case Some(x) => text("else") <+> showBlock(x) case None => nil}) <+>
+ (finallyBlock match {case Some(x) => text("finally") <+> showBlock(x) case None => nil})
+ }
+}
+
+case class SIFDeclassifyStmt(exp: Exp)
+ (val pos: Position = NoPosition,
+ val info: Info = NoInfo,
+ val errT: ErrorTrafo = NoTrafos) extends ExtensionStmt {
+ override def extensionSubnodes: Seq[Node] = Seq(exp)
+
+ override def prettyPrint: PrettyPrintPrimitives#Cont = text("declassify") <+> show(exp)
+}
+
+case class SIFInlinedCallStmt(stmts: Seqn)
+ (val pos: Position = NoPosition,
+ val info: Info = NoInfo,
+ val errT: ErrorTrafo = NoTrafos) extends ExtensionStmt {
+ override def extensionSubnodes: Seq[Node] = Seq(stmts)
+
+ override def prettyPrint: PrettyPrintPrimitives#Cont = text("inlined call") <> show(stmts)
+}
+
+case class SIFAssertNoException()(val pos: Position = NoPosition,
+ val info: Info = NoInfo,
+ val errT: ErrorTrafo = NoTrafos) extends ExtensionStmt {
+ override def extensionSubnodes: Seq[Node] = Seq()
+
+ override def prettyPrint: PrettyPrintPrimitives#Cont = text("assert no exception")
+}
+
+case class SIFLowExp(exp: Exp, comparator: Option[String] = None, typVarMap: Map[TypeVar, Type] = Map())
+ (val pos: Position = NoPosition,
+ val info: Info = NoInfo,
+ val errT: ErrorTrafo = NoTrafos) extends ExtensionExp {
+ override def extensionSubnodes: Seq[Node] = Seq(exp)
+
+ override def typ: Type = Bool
+
+ override def verifyExtExp(): VerificationResult = ???
+
+ override def prettyPrint: PrettyPrintPrimitives#Cont = (if (comparator.isDefined) text("lowVal")
+ else text("low")) <> parens(show(exp))
+
+ override val extensionIsPure: Boolean = exp.isPure
+}
+
+case class SIFLowEventExp()(val pos: Position = NoPosition,
+ val info: Info = NoInfo,
+ val errT: ErrorTrafo = NoTrafos) extends ExtensionExp {
+ override def extensionSubnodes: Seq[Node] = Nil
+
+ override def typ: Type = Bool
+
+ override def verifyExtExp(): VerificationResult = ???
+
+ override def prettyPrint: PrettyPrintPrimitives#Cont = text("lowEvent")
+
+ override val extensionIsPure: Boolean = true
+
+}
+
+case class SIFLowExitExp()(val pos: Position = NoPosition,
+ val info: Info = NoInfo,
+ val errT: ErrorTrafo = NoTrafos) extends ExtensionExp {
+ override def extensionSubnodes: Seq[Node] = Nil
+
+ override def typ: Type = Bool
+
+ override def verifyExtExp(): VerificationResult = ???
+
+ override def prettyPrint: PrettyPrintPrimitives#Cont = text("lowExit")
+
+ override val extensionIsPure: Boolean = false
+}
+
+case class SIFTerminatesExp(cond: Exp)(val pos: Position = NoPosition,
+ val info: Info = NoInfo,
+ val errT: ErrorTrafo = NoTrafos) extends ExtensionExp {
+ override def extensionSubnodes: Seq[Node] = Seq(cond)
+
+ override def typ: Type = Bool
+
+ override def verifyExtExp(): VerificationResult = ???
+
+ override def prettyPrint: PrettyPrintPrimitives#Cont =
+ text("terminates under condition") <+> show(cond)
+
+ override def extensionIsPure: Boolean = cond.isPure
+}
+
+case class SIFInfo(comment: Seq[String],
+ continueUnaware: Boolean = false,
+ obligationVar: Boolean = false) extends Info{
+ lazy val isCached = false
+}
+
+case class SIFDynCheckInfo(comment: Seq[String],
+ dynCheck: Exp,
+ onlyDynVersion: Boolean = false) extends Info{
+ lazy val isCached = false
+}
diff --git a/src/main/scala/viper/gobra/translator/transformers/hyper/SIFError.scala b/src/main/scala/viper/gobra/translator/transformers/hyper/SIFError.scala
new file mode 100644
index 000000000..18c8562ca
--- /dev/null
+++ b/src/main/scala/viper/gobra/translator/transformers/hyper/SIFError.scala
@@ -0,0 +1,63 @@
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+//
+// Copyright (c) 2011-2023 ETH Zurich.
+
+package viper.gobra.translator.transformers.hyper
+
+import viper.silver.ast.{Fold, Unfold}
+import viper.silver.verifier.errors.ErrorNode
+import viper.silver.verifier._
+
+
+case class SIFTerminationChannelCheckFailed(offendingNode: ErrorNode, reason: ErrorReason,
+ override val cached: Boolean = false) extends AbstractVerificationError {
+ val id: String = "termination_channel_check.failed"
+ val text: String = "Termination channel might exist."
+ override def withNode(offendingNode: ErrorNode = this.offendingNode): ErrorMessage =
+ SIFTerminationChannelCheckFailed(offendingNode, this.reason)
+
+ override def withReason(r: ErrorReason): AbstractVerificationError = SIFTerminationChannelCheckFailed(offendingNode, r)
+}
+
+case class SIFFoldNotLow(offendingNode: Fold) extends AbstractErrorReason {
+ val id: String = "sif.fold"
+ val readableMessage: String = s"The low parts of predicate ${offendingNode.acc.loc.predicateName} might not hold."
+
+ override def withNode(offendingNode: ErrorNode = this.offendingNode): ErrorMessage =
+ SIFFoldNotLow(offendingNode.asInstanceOf[Fold])
+}
+
+case class SIFUnfoldNotLow(offendingNode: Unfold) extends AbstractErrorReason {
+ val id: String = "sif.unfold"
+ val readableMessage: String = s"The low parts of predicate ${offendingNode.acc.loc.predicateName} might not hold."
+
+ override def withNode(offendingNode: ErrorNode = this.offendingNode): ErrorMessage =
+ SIFUnfoldNotLow(offendingNode.asInstanceOf[Unfold])
+}
+
+case class SIFTermCondNotLow(offendingNode: SIFTerminatesExp) extends AbstractErrorReason {
+ val id: String = "sif_termination.condition_not_low"
+ val readableMessage: String = s"Termination condition ${offendingNode.cond} might not be low."
+
+ override def withNode(offendingNode: ErrorNode = this.offendingNode): ErrorMessage =
+ SIFTermCondNotLow(offendingNode.asInstanceOf[SIFTerminatesExp])
+}
+
+case class SIFTermCondLowEvent(offendingNode: SIFTerminatesExp) extends AbstractErrorReason {
+ val id: String = "sif_termination.not_lowevent"
+ val readableMessage: String =
+ s"Termination condition ${offendingNode.cond} evaluating to false might not imply both executions don't terminate."
+
+ override def withNode(offendingNode: ErrorNode = this.offendingNode): ErrorMessage =
+ SIFTermCondLowEvent(offendingNode.asInstanceOf[SIFTerminatesExp])
+}
+
+case class SIFTermCondNotTight(offendingNode: SIFTerminatesExp) extends AbstractErrorReason {
+ val id: String = "sif_termination.condition_not_tight"
+ val readableMessage: String = s"Termination condition ${offendingNode.cond} might not be tight."
+
+ override def withNode(offendingNode: ErrorNode = this.offendingNode): ErrorMessage =
+ SIFTermCondNotTight(offendingNode.asInstanceOf[SIFTerminatesExp])
+}
diff --git a/src/main/scala/viper/gobra/translator/transformers/hyper/SIFExtendedTransformer.scala b/src/main/scala/viper/gobra/translator/transformers/hyper/SIFExtendedTransformer.scala
new file mode 100644
index 000000000..55f5cc1de
--- /dev/null
+++ b/src/main/scala/viper/gobra/translator/transformers/hyper/SIFExtendedTransformer.scala
@@ -0,0 +1,1728 @@
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+//
+// Copyright (c) 2011-2023 ETH Zurich.
+
+package viper.gobra.translator.transformers.hyper
+
+import viper.gobra.backend.BackendVerifier
+import viper.gobra.translator.transformers.ViperTransformer
+import viper.silver.ast._
+import viper.silver.ast.utility.Simplifier
+import viper.silver.verifier.{AbstractError, errors}
+import viper.silver.verifier.errors.{AssertFailed, ErrorNode}
+
+import scala.collection.immutable.HashSet
+import scala.collection.mutable
+import scala.collection.mutable.ListBuffer
+
+trait SIFExtendedTransformer {
+ object Config {
+ /** If true, don't generate all the control flow variables, just the ones needed for each method. */
+ var optimizeControlFlow: Boolean = true
+ /** If true, try to bunch as many statements into a single if statement which was introduced for checking active
+ * executions, instead of having one if stmt per original statement. */
+ var optimizeSequential: Boolean = true
+ /** If true, add an 'assume p1' at the beginning of each method, to cut down on redundant paths the
+ * verification could consider */
+ var optimizeRestrictActVars: Boolean = true
+ /** Applications of the functions which have an entry here, will be replaced by the expression
+ * determined by the entry in the second execution. */
+ var primedFuncAppReplacements: mutable.HashMap[String, (FuncApp, Exp, Exp) => Exp] = new mutable.HashMap
+ /** Set this to only transform methods that contain relational assertions somewhere in their spec or body.
+ * May lead to invalid programs when such a method calls another methods that does contain such specs.
+ */
+ var onlyTransformMethodsWithRelationalSpecs: Boolean = false
+ var generateAllLowFuncs: Boolean = true
+ }
+ def optimizeControlFlow(v: Boolean): Unit = {
+ Config.optimizeControlFlow = v
+ }
+ def optimizeSequential(v: Boolean): Unit = {
+ Config.optimizeSequential = v
+ }
+ def optimizeRestrictActVars(v: Boolean): Unit = {
+ Config.optimizeRestrictActVars = v
+ }
+ def generateAllLowFuncs(v: Boolean): Unit = {
+ Config.generateAllLowFuncs = v
+ }
+ def onlyTransformMethodsWithRelationalSpecs(v: Boolean): Unit = {
+ Config.onlyTransformMethodsWithRelationalSpecs = v
+ }
+ def addPrimedFuncAppReplacement(name: String, strategy: String): Unit = {
+ strategy match {
+ case "first_arg" => Config.primedFuncAppReplacements.put(name,
+ (func, p1, p2) => translatePrime(func.args.head, p1, p2))
+ case "true" => Config.primedFuncAppReplacements.put(name, (func, _, _) =>
+ TrueLit()(func.pos, func.info, func.errT))
+ case _ => new IllegalArgumentException(
+ s"""Unknown strategy "$strategy" for primed function application replacement.""")
+ }
+ }
+ def clearPrimedFuncAppReplacement(): Unit = {
+ Config.primedFuncAppReplacements.clear()
+ }
+
+ val primedNamesPerMethod = new mutable.HashMap[String, Map[String, String]]
+ val primedNames = new mutable.HashMap[String, String]
+ val relationalPredicates = new mutable.HashSet[Predicate]
+ val predLowFuncs = new mutable.HashMap[String, Option[Function]]
+ val predLowFuncInfo = new mutable.HashMap[String, Option[(String, Seq[LocalVarDecl], Seq[LocalVarDecl])]]
+ val predAllLowFuncs = new mutable.HashMap[String, Option[Function]]()
+ val predAllLowFuncInfo = new mutable.HashMap[String, Option[(String, Seq[LocalVarDecl], Seq[LocalVarDecl])]]
+ val usedNames = new mutable.HashSet[String]
+ var newFields : List[Field] = Nil
+ var newPredicates: Seq[Predicate] = Nil
+ var _program : Program = null
+ var getArgFunc : DomainFunc = null
+ var getOldFunc : DomainFunc = null
+ var getArgPFunc : DomainFunc = null
+ var getOldPFunc : DomainFunc = null
+
+ private var _allLowMethods: Set[String] = HashSet[String]()
+ def allLowMethods: Set[String] = _allLowMethods
+ def setAllLowMethods(value: Set[String]): Unit = _allLowMethods = value
+
+ private var _preservesLowMethods: Set[String] = HashSet[String]()
+ def preservesLowMethods: Set[String] = _preservesLowMethods
+ def setPreservesLowMethods(value: Set[String]): Unit =_preservesLowMethods = value
+
+ private val _domainFuncsToDuplicate = new mutable.HashSet[DomainFunc]()
+ def domainFuncsToDuplicate: mutable.Set[DomainFunc] = _domainFuncsToDuplicate
+ def addDomainFuncToDuplicate(funcs: DomainFunc*): Unit = _domainFuncsToDuplicate ++= funcs
+
+ var timing = false
+ var time : Option[LocalVar] = None
+
+ val skip: Seqn = Seqn(Seq(), Seq())()
+
+ def transform(p: Program, enableTiming: Boolean) : Program = {
+ primedNames.clear()
+ predLowFuncs.clear()
+ predLowFuncInfo.clear()
+ predAllLowFuncInfo.clear()
+ usedNames.clear()
+ newFields = Nil
+ newPredicates = Nil
+ timing = enableTiming
+ _program = p
+
+ val allNames = p.collect({
+ case d: Declaration => d.name
+ })
+ usedNames ++= allNames
+
+ collectRelationalPredicates(_program, relationalPredicates)
+ createNewNames(p)
+ newFields = p.fields.toList.flatMap(f => List(f, f.copy(name=primedNames(f.name))(f.pos, f.info, f.errT)))
+ var newFunctions: Seq[Function] = p.functions.flatMap(f => translateFunction(f))
+ newPredicates = Seq()
+ for (pred <- p.predicates) {
+ val (newPs, predFuncs) = translatePredicate(pred, p)
+ newPredicates ++= newPs
+ newFunctions ++= predFuncs.collect{case f if f.isDefined => f.get}
+ }
+ val newDomains: Seq[Domain] = p.domains.map(d => translateDomain(d))
+
+ val newMethods: Seq[Method] = if (Config.onlyTransformMethodsWithRelationalSpecs) {
+ val relationalMethods = p.methods.filter(m => m.existsDefined({
+ case e: Exp if !isUnary(e) => true
+ }))
+ val unaryMethods = p.methods.filter(m => !relationalMethods.contains(m))
+ relationalMethods.map(m => translateMethod(m)) ++ unaryMethods
+ }else{
+ p.methods.map(m => translateMethod(m))
+ }
+
+ p.copy(domains = newDomains, fields = newFields, functions = newFunctions, predicates = newPredicates,
+ methods = newMethods)(p.pos, p.info, p.errT)
+ }
+
+ def getName(orig: String) : String = {
+ if (usedNames.contains(orig)){
+ var index = 0
+ while (usedNames.contains(orig + "_" + index)){
+ index += 1
+ }
+ val result = orig + "_" + index
+ usedNames.add(result)
+ return result
+ }else{
+ usedNames.add(orig)
+ return orig
+ }
+ }
+
+ /** Create the new names for the programs variables, functions (those which depend on the heap),
+ * and predicates, which are used for the second execution. Updates [[primedNames]].
+ * @param p The program being encoded.
+ */
+ def createNewNames(p: Program): Unit = {
+ // duplicate domain func names where needed
+ for (df <- domainFuncsToDuplicate) {
+ primedNames.update(df.name, getName(df.name))
+ }
+ // duplicate field names
+ for (f <- p.fields) {
+ val newName = getName(f.name + 'p')
+ primedNames.update(f.name, newName)
+ }
+ // duplicate names for functions which depend on the heap
+ for (f <- p.functions) {
+ if (isHeapDependent(f, p)) primedNames.update(f.name, getName(f.name))
+ }
+ // duplicate names for predicates
+ for (pred <- p.predicates) {
+ primedNames.update(pred.name, getName(pred.name))
+ val duplicatedArgs = pred.formalArgs.map{a =>
+ val newName = getName(a.name)
+ a.copy(name = newName)(a.pos, a.info, a.errT)
+ }
+ predLowFuncInfo.update(pred.name, if (relationalPredicates.contains(pred) && pred.body.isDefined)
+ Some(getName(pred.name + "_low"), pred.formalArgs, duplicatedArgs)
+ else None
+ )
+ predAllLowFuncInfo.update(pred.name, pred.body match {
+ case Some(_) =>
+ Some(getName(pred.name + "_all_low"), pred.formalArgs, duplicatedArgs)
+ case None => None
+ })
+ }
+ }
+
+ private def isHeapDependent(f: Function, p: Program): Boolean = {
+ f.pres.exists(pre => pre.isHeapDependent(p))
+ }
+
+ def collectRelationalPredicates(p: Program, relPreds: mutable.HashSet[Predicate]): Unit = {
+ def directlyRelational(pred: Predicate): Boolean = {
+ pred.body.isDefined && !isUnary(pred.body.get)
+ }
+
+ relPreds.clear()
+ relPreds ++= p.predicates.filter(pred => directlyRelational(pred))
+ val dependencies = mutable.HashMap[String, Seq[String]]()
+
+ relPreds.foreach(pred =>
+ // put the name of this as depending on all referenced predicates
+ pred.body.collect{
+ case pap: PredicateAccessPredicate => pap
+ }.foreach(pap =>
+ dependencies.update(pap.loc.predicateName, dependencies.getOrElse(pap.loc.predicateName, Seq()) :+ pred.name)
+ )
+ )
+ // go through dependent predicates to add them to relationals
+ val queue = mutable.Queue[String](relPreds.toSeq.map(rp => rp.name): _*)
+ while (queue.nonEmpty) {
+ val head: String = queue.dequeue()
+ for (dep <- dependencies.getOrElse(head, Seq())) {
+ if (relPreds.add(p.findPredicate(dep))) queue.enqueue(dep)
+ }
+ }
+ }
+
+ def translateDomain(d: Domain): Domain = {
+ val newFunctions: Seq[DomainFunc] = d.functions.flatMap{df =>
+ val duplicate: Option[DomainFunc] = if (domainFuncsToDuplicate.contains(df)) {
+ Some(df.copy(name = primedNames(df.name))(df.pos, df.info, df.domainName, df.errT))
+ } else None
+ Seq(df) ++ Seq(duplicate).collect{case Some(x) => x}
+ }
+ d.copy(functions = newFunctions)(d.pos, d.info, d.errT)
+ }
+
+ def translateMethod(m: Method) : Method = {
+ val primedBefore = primedNames.clone()
+ val (p1d, p1r) = getNewBool("p1")
+ val (p2d, p2r) = getNewBool("p2")
+ var toAdd = Seq(p1d, p2d)
+ val (t1d, t1r) = getNewVar("t1", Int)
+ val (t2d, t2r) = getNewVar("t2", Int)
+ if (timing){
+ toAdd = Seq(p1d, p2d, t1d, t2d)
+ primedNames.update(t1d.name, t2d.name)
+ time = Some(t1r)
+ }
+
+ val newArgs = toAdd ++ m.formalArgs.flatMap{a =>
+ val newName = getName(a.name)
+ primedNames.update(a.name, newName)
+ val primedArg = a.copy(name = newName)(a.pos, a.info, a.errT)
+ Seq(a, primedArg)
+ }
+ var toAddRet : Seq[LocalVarDecl] = Seq()
+ val (t1dr, t1rr) = getNewVar("t1", Int)
+ val (t2dr, t2rr) = getNewVar("t2", Int)
+ if (timing){
+ toAddRet = Seq(t1dr, t2dr)
+ primedNames.update(t1dr.name, t2dr.name)
+ time = Some(t1rr)
+ }
+ val newReturns = toAddRet ++ m.formalReturns.flatMap{r =>
+ val newName = getName(r.name)
+ primedNames.update(r.name, newName)
+ val primedRet = r.copy(name = newName)(r.pos, r.info, r.errT)
+ Seq(r, primedRet)
+ }
+
+ var (newPres, newPosts) = addLownessConditions(m, m.pres, m.posts)
+ val condCtx = TranslationContext(p1r, p2r, EmptyControlFlowVars(), m)
+ newPres = newPres.map{e => translateSIFAss(e, condCtx.copy(translatingPrecond = true))}
+ newPosts = newPosts.map{e => translateSIFAss(e, condCtx)}
+ // Termination channels
+ var terminates: Option[SIFTerminatesExp] = None
+ m.pres.foreach(pre => pre.visit{
+ case t: SIFTerminatesExp => terminates = Some(t)
+ })
+ if (terminates.isDefined) {
+ newPres = simplifyConditions(newPres ++
+ terminationChannelsLowChecks(terminates.get, condCtx))
+ newPosts :+= translateSIFAss(Old(terminates.get.cond)(
+ terminates.get.cond.pos, terminates.get.cond.info,
+ ErrTrafo({case _ => SIFTerminationChannelCheckFailed(terminates.get.cond, SIFTermCondNotTight(terminates.get))})
+ ), condCtx)
+ }
+
+ if (timing){
+ val timeUnchanged1 = Implies(Not(p1r)(), EqCmp(t1r, t1rr)())()
+ val timeUnchanged2 = Implies(Not(p2r)(), EqCmp(t2r, t2rr)())()
+ newPosts ++= Seq(timeUnchanged1, timeUnchanged2)
+ }
+
+ var firstStatements : Seq[Stmt] = Seq()
+ if (Config.optimizeRestrictActVars) firstStatements :+= Inhale(p1r)()
+ if (timing){
+ val assignTime1 = LocalVarAssign(t1rr, t1r)()
+ val assignTime2 = LocalVarAssign(t2rr, t2r)()
+ firstStatements ++= Seq(assignTime1, assignTime2)
+ time = Some(t1rr)
+ }
+
+ var newBody: Option[Seqn] = None
+ if (m.body.isDefined) {
+ var body: Seqn = m.body.get
+ if (allLowMethods.contains(m.name) || preservesLowMethods.contains(m.name)) {
+ body = inferLowLoopInvariants(m, preservesOnly = preservesLowMethods.contains(m.name))
+ }
+
+ // find which control variables the method requires
+ val ctrlVars: MethodControlFlowVars = createControlFlowVars(body)
+ val ctx: TranslationContext = TranslationContext(p1r, p2r, ctrlVars, m)
+
+ newBody = Some(Seqn(firstStatements ++ ctrlVars.initAssigns() ++
+ Seq(translateStatement(body, ctx).asInstanceOf[Seqn]), ctrlVars.declarations())())
+ }
+
+ time = None
+ primedNamesPerMethod.update(m.name, primedNames.toMap)
+ primedNames.clear()
+ primedNames ++= primedBefore
+ Method(m.name, newArgs, newReturns, newPres, newPosts, newBody)(m.pos)
+ }
+
+ def _conjoinOptions(in: Seq[Option[Exp]]): Exp = {
+ val defined = in.filter(x => x.isDefined).map(x => x.get)
+ defined.size match {
+ case 0 => TrueLit()()
+ case _ => defined.reduceRight((a, b) => And(a, b)(a.pos))
+ }
+ }
+
+ /** Takes a sequence of LocalVarDecls and produces an expression saying each pair of adjacent variables are equal.
+ */
+ def _varDeclsToAllLow(in: Seq[LocalVarDecl]): Exp = {
+ in.map(decl => decl.localVar)
+ .map(v => SIFLowExp(v, None)())
+ .reduceRight[Exp]((v, e) => And(v, e)())
+ }
+
+ def allReachableStateLow(m: Method, old: Boolean, predicateSrc: Seq[Exp]): Option[Exp] = {
+ var lowExpressions: Seq[Exp] = Seq()
+
+ // all accs to fields in preconditions
+ val allFieldAccesses: Seq[FieldAccess] = m.pres.flatMap(e => e.deepCollect({
+ case FieldAccessPredicate(loc, _) => Seq(loc)
+ })).flatten.distinct
+ for (fieldAcc <- allFieldAccesses) {
+ val eq = SIFLowExp(fieldAcc, None)(m.pos)
+ if (old)
+ lowExpressions :+= Old(eq)(m.pos)
+ else
+ lowExpressions :+= eq
+ }
+
+ // all accs we get via predicates
+ lowExpressions ++= predicateSrc.flatMap(e => e.deepCollect{
+ case PredicateAccessPredicate(loc, _) =>
+ val funcApp = FuncApp(predAllLowFuncs(loc.predicateName).get,
+ loc.args ++ loc.args.map(a => translatePrime(a, null, null)))()
+ if (old)
+ Old(funcApp)(m.pos)
+ else
+ funcApp
+ })
+
+ if (lowExpressions.nonEmpty)
+ Some(lowExpressions.reduceRight[Exp]((a, b) => And(a, b)(m.pos)))
+ else
+ None
+ }
+
+ def allVarsAndStateLow(m: Method, vars: Seq[LocalVarDecl], old: Boolean, predicateSrc: Seq[Exp]): Exp = {
+ val nonObligationVars = vars.filterNot(isObligationVar)
+ val allArgsLow: Option[Exp] = if (nonObligationVars.isEmpty) None else Some(_varDeclsToAllLow(nonObligationVars))
+ val allStateLow: Option[Exp] = allReachableStateLow(m, old, predicateSrc)
+ _conjoinOptions(Seq(allArgsLow, allStateLow))
+ }
+
+ def addLownessConditions(m: Method, pres: Seq[Exp], posts: Seq[Exp]): (Seq[Exp], Seq[Exp]) = {
+ var newPres = pres
+ if (allLowMethods.contains(m.name)) newPres :+= allVarsAndStateLow(m, m.formalArgs, old = false, predicateSrc = m.pres)
+ var newPosts = posts
+ if (allLowMethods.contains(m.name)) newPosts :+= allVarsAndStateLow(m, m.formalReturns, old = false, predicateSrc = m.posts)
+ if (preservesLowMethods.contains(m.name)) newPosts :+= Implies(
+ allVarsAndStateLow(m, m.formalArgs, old = true, predicateSrc = m.pres),
+ allVarsAndStateLow(m, m.formalReturns, old = false, predicateSrc = m.posts))(m.pos)
+ (newPres, newPosts)
+ }
+
+ def inferLowLoopInvariants(m: Method, preservesOnly: Boolean): Seqn = {
+ val _obligationVars: Seq[String] = obligationVars(m)
+ m.body.get.transform{
+ case w@While(cond, invs, body) =>
+ val targets: Seq[LocalVar] = w.deepCollect({
+ case LocalVarAssign(lhs, _) => Seq(lhs)
+ case MethodCall(_, _, ts) => ts
+ case NewStmt(t, _) => Seq(t)
+ }).flatten
+ .distinct
+ .filterNot(v => _obligationVars.contains(v.name))
+ var additionalInvs: Seq[Exp] = targets.map(lv => SIFLowExp(lv, None)()) ++
+ allReachableStateLow(m, old = false, predicateSrc = m.pres)
+ if (preservesOnly) {
+ additionalInvs = additionalInvs.map(
+ i => Implies(allVarsAndStateLow(m, m.formalArgs, old=true, predicateSrc = m.pres), i)())
+ }
+ val newInvs: Seq[Exp] = invs ++ additionalInvs
+ While(cond, newInvs, body)(w.pos, w.info, w.errT)
+ }
+ }
+
+ def isObligationVar(v: LocalVarDecl): Boolean = {
+ val vi = v.info.getUniqueInfo[SIFInfo]
+ vi match {
+ case Some(info) => info.obligationVar
+ case _ => false
+ }
+ }
+
+ def obligationVars(m: Method): Seq[String] = {
+ m.deepCollect[LocalVarDecl]({
+ case d: LocalVarDecl if isObligationVar(d) => d
+ }).map(v => v.name)
+ }
+
+ def createControlFlowVars(methodBody: Seqn): MethodControlFlowVars = {
+ val gotos = methodBody.collect({case Goto(l) => l}).toSet
+ val labels = methodBody.collect({case l@Label(n, _) if gotos.contains(n) => l}).toSet
+ if (!Config.optimizeControlFlow) return new MethodControlFlowVars(true, true, true, true, labels)
+ var hasRet, hasBreak, hasCont, hasExcept: Boolean = false
+ methodBody.visit({
+ case _: SIFReturnStmt => hasRet = true
+ case _: SIFBreakStmt => hasBreak = true
+ case _: SIFContinueStmt => hasCont = true
+ case _: SIFRaiseStmt => hasExcept = true
+ case _: SIFTryCatchStmt => hasExcept = true
+ })
+ if (labels.nonEmpty && (hasRet || hasBreak || hasCont || hasExcept))
+ throw new IllegalArgumentException
+ new MethodControlFlowVars(hasRet, hasBreak, hasCont, hasExcept, labels)
+ }
+
+ def incrementTime(p1: Exp, p2: Exp) : Seqn = {
+ if (timing){
+ val timeInc1 = If(p1, Seqn(Seq(LocalVarAssign(time.get, Add(time.get, IntLit(1)())())()), Seq())(), skip)()
+ val timeInc2 = If(p2, Seqn(Seq(LocalVarAssign(translatePrime(time.get, p1, p2), translatePrime(Add(time.get, IntLit(1)())(), p1, p2))()), Seq())(), skip)()
+ Seqn(Seq(timeInc1, timeInc2), Seq())()
+ }else{
+ skip
+ }
+
+ }
+
+ private def terminationChannelsLowChecks(terminates: SIFTerminatesExp,
+ ctx: TranslationContext): Seq[Exp] = {
+ val condLowEventReasonTrafo = ErrTrafo({case _ =>
+ SIFTerminationChannelCheckFailed(terminates, SIFTermCondLowEvent(terminates))}) +
+ ReTrafo({case _ => SIFTermCondLowEvent(terminates)})
+ val condLowReasonTrafo = ErrTrafo({case _ =>
+ SIFTerminationChannelCheckFailed(terminates, SIFTermCondNotLow(terminates))}) +
+ ReTrafo({case _ => SIFTermCondNotLow(terminates)})
+ val pos = terminates.pos
+ val info = terminates.info
+ Seq(
+ // Note: cast here is not very elegant, maybe there's a better way to attach the error reason
+ // to result of translateSIFAss
+ translateSIFAss(Implies(Not(terminates.cond)(pos, info, condLowEventReasonTrafo),
+ SIFLowEventExp()(pos, info, condLowEventReasonTrafo))(pos, info, condLowEventReasonTrafo), ctx)
+ .asInstanceOf[Implies].copy()(pos, info, condLowEventReasonTrafo),
+ translateSIFAss(SIFLowExp(terminates.cond)(pos, info, condLowReasonTrafo), ctx)
+ .asInstanceOf[Implies].copy()(pos, info, condLowReasonTrafo)
+ )
+ }
+
+ /** Translate a function into MPP. Create two versions (one per execution) if it is heap dependent.
+ * @param f The function to translate.
+ * @return A list of either the original function or the two versions.
+ */
+ def translateFunction(f: Function): Seq[Function] = {
+ if (!primedNames.isDefinedAt(f.name)) return Seq(f)
+
+ // create one function for each execution using different field versions
+ val newPres1 = f.pres.map(p => translateNormal(p, null, null))
+ val newPres2 = f.pres.map(p => translatePrime(p, null, null))
+ val newPosts1 = f.posts.map(p => translateNormal(p, null, null))
+ val newPosts2 = f.posts.map(p => translatePrime(p, null, null))
+
+ val newBody1: Option[Exp] = f.body.collect{case x => translateNormal(x, null, null)}
+ val newBody2: Option[Exp] = f.body.collect{case x => translatePrime(x, null, null)}
+
+ val f1 = f.copy(pres = newPres1, posts = newPosts1, body = newBody1)(f.pos, f.info, f.errT)
+ val f2 = f.copy(name = primedNames(f.name), pres = newPres2, posts = newPosts2,
+ body = newBody2)(f.pos, f.info, f.errT)
+ Seq(f1, f2)
+ }
+
+ /** Translate a predicate into MPP. Creates two copies of the predicate: one version for first execution,
+ * one for the second. The predicates only contain the unary expressions of the original predicate.
+ * Generates a function containing all the relational expressions in the predicates body.
+ * @param pred The predicate to translate.
+ * @param p The surrounding program.
+ * @return List of the new predicates, plus the low-function.
+ */
+ def translatePredicate(pred: Predicate, p: Program): (Seq[Predicate], Seq[Option[Function]]) = {
+ val unaryBody: Option[Exp] = translateToUnary(pred.body)
+ val newBody1: Option[Exp] = unaryBody.collect({case x => translateNormal(x, null, null)})
+ val newBody2: Option[Exp] = unaryBody.collect({case x => translatePrime(x, null, null)})
+
+ val pred1 = pred.copy(body = newBody1)(pred.pos, pred.info, pred.errT)
+ val pred2 = pred.copy(name = primedNames(pred.name), body = newBody2)(pred.pos, pred.info, pred.errT)
+
+ var lowF: Option[Function] = None
+ var allLowF: Option[Function] = None
+ if (pred.body.isDefined) {
+ val (allLowFName, formalArgs, duplicatedFormalArgs) = predAllLowFuncInfo(pred.name).get
+
+ val access1 = PredicateAccess(formalArgs.map{a => a.localVar}, pred1.name)(pred.pos)
+ val access2 = PredicateAccess(duplicatedFormalArgs.map{a => a.localVar}, pred2.name)(pred.pos)
+ val fPres: Seq[Exp] = Seq(And(PredicateAccessPredicate(access1, WildcardPerm()())(),
+ PredicateAccessPredicate(access2, WildcardPerm()())())())
+ val lowFFormalArgs = pred.formalArgs ++ duplicatedFormalArgs
+ val primedBefore = primedNames.clone()
+ formalArgs.zip(duplicatedFormalArgs).foreach(t => primedNames.update(t._1.name, t._2.name))
+
+ def unfoldingPredicates(body: Exp): Exp = {
+ Unfolding(PredicateAccessPredicate(access1, WildcardPerm()())(),
+ Unfolding(PredicateAccessPredicate(access2, WildcardPerm()())(),
+ body)())()
+ }
+ if (relationalPredicates.contains(pred)) {
+ val (lowFName, _, _) = predLowFuncInfo(pred.name).get
+ val fBody: Exp = unfoldingPredicates(translatePredLowFuncBody(pred.body.get))
+ lowF = Some(Function(lowFName, lowFFormalArgs, Bool, fPres, Seq(), Some(fBody))
+ (pred.pos, pred.info, pred.errT))
+ }
+
+ val allLowBody: Exp = unfoldingPredicates(translatePredAllLowFuncBody(pred.body.get))
+ allLowF = Some(Function(allLowFName, lowFFormalArgs, Bool, fPres, Seq(), Some(allLowBody))
+ (pred.pos, pred.info, pred.errT))
+
+ primedNames.clear()
+ primedNames ++= primedBefore
+ }
+
+ predLowFuncs.update(pred.name, lowF)
+ predAllLowFuncs.update(pred.name, allLowF)
+ if (Config.generateAllLowFuncs)
+ (Seq(pred1, pred2), Seq(lowF, allLowF))
+ else
+ (Seq(pred1, pred2), Seq(lowF, None))
+ }
+
+ private def bypassPreamble(p1: Exp, p2: Exp, ctrlVars: MethodControlFlowVars,
+ bypass1r: LocalVar, bypass2r: LocalVar): Seq[Stmt] = {
+ Seq(LocalVarAssign(bypass1r,
+ Not(ctrlVars.activeExecNormal(Some(p1)))())(),
+ LocalVarAssign(bypass2r, Not(ctrlVars.activeExecPrime(Some(p2)))())())
+ }
+
+ /** Translate a while statement into MPP.
+ */
+ private def translateWhileStmt(w: While, ctx: TranslationContext): Seqn = {
+ val p1 = ctx.p1; val p2 = ctx.p2; val ctrlVars = ctx.ctrlVars
+
+ // check if we need to do a reconstruction of this loop (iff it has ret/break/except stmt or we don't optimize)
+ val recNeeded: Boolean = {
+ var rn = !Config.optimizeControlFlow
+ w.body.visit({
+ case _: SIFReturnStmt => rn = true
+ case _: SIFBreakStmt => rn = true
+ case _: SIFRaiseStmt => rn = true
+ case _: SIFTryCatchStmt => rn = true
+ })
+ rn
+ }
+
+ var newVarDecls = Seq[LocalVarDecl]()
+ //var targetValRefs = Seq[LocalVar]()
+ var targetValAssigns = Seq[Stmt]()
+ var targetValEqualities1 = Set[Exp]()
+ var targetValEqualities2 = Set[Exp]()
+
+ val (bypass1d, bypass1r) = getNewBool("bypass1")
+ val (bypass2d, bypass2r) = getNewBool("bypass2")
+ newVarDecls ++= Seq(bypass1d, bypass2d)
+ var stmts: Seq[Stmt] = bypassPreamble(p1, p2, ctrlVars, bypass1r, bypass2r)
+
+ def targetCollectF: PartialFunction[Node, Seq[LocalVar]] = {
+ case LocalVarAssign(lhs, _) => Seq(lhs)
+ case MethodCall(_, _, ts) => ts
+ case NewStmt(t, _) => Seq(t)
+ case SIFReturnStmt(_, _) => Seq(ctrlVars.ret1r.get)
+ case SIFRaiseStmt(_) => Seq(ctrlVars.except1r.get)
+ case SIFTryCatchStmt(body, handlers, elseBlock, finallyBlock) =>
+ (body.deepCollect(targetCollectF).distinct.flatten ++
+ handlers.map(h => h.body.deepCollect(targetCollectF).flatten).distinct.flatten ++ (elseBlock match {
+ case Some(eb) => eb.deepCollect(targetCollectF).distinct.flatten
+ case None => Seq()
+ }) ++ (finallyBlock match {
+ case Some(fb) => fb.deepCollect(targetCollectF).distinct.flatten
+ case None => Seq()
+ })).distinct
+ }
+
+ // continue and break control variables will be assigned even if there is no continue in this loop -> add to targets
+ val targets = w.deepCollect(targetCollectF).flatten.distinct ++ (if (ctrlVars.cont1r.isDefined)
+ Seq(ctrlVars.cont1r.get, ctrlVars.cont2r.get) else Seq()) ++ (if (ctrlVars.break1r.isDefined)
+ Seq(ctrlVars.break1r.get, ctrlVars.break2r.get) else Seq())
+
+ var tmpAssigns1 = Seq[LocalVarAssign]()
+ var tmpAssigns2 = Seq[LocalVarAssign]()
+ for (t <- targets) {
+ // make sure the variable is defined outside the loop
+ if (primedNames.contains(t.name)){
+ val (tmp1d, tmp1r) = getNewVar("tmp1", t.typ)
+ val (tmp2d, tmp2r) = getNewVar("tmp2", t.typ)
+ newVarDecls ++= Seq(tmp1d, tmp2d)
+ //targetValRefs ++= Seq(tmp1r, tmp2r)
+ tmpAssigns1 :+= LocalVarAssign(tmp1r, t)()
+ tmpAssigns2 :+= LocalVarAssign(tmp2r, translatePrime(t, p1, p2))()
+ val eq1 = EqCmp(tmp1r, t)()
+ val eq2 = EqCmp(tmp2r, translatePrime(t, p1, p2))()
+ targetValEqualities1 ++= Seq(eq1)
+ targetValEqualities2 ++= Seq(eq2)
+ }
+ }
+ if (tmpAssigns1.nonEmpty) targetValAssigns :+= If(bypass1r, Seqn(tmpAssigns1, Seq())(), skip)()
+ if (tmpAssigns2.nonEmpty) targetValAssigns :+= If(bypass2r, Seqn(tmpAssigns2, Seq())(), skip)()
+
+ /*if (timing){
+ val (tmp1d, tmp1r) = getNewVar("tmp1", Int)
+ val (tmp2d, tmp2r) = getNewVar("tmp2", Int)
+ newVarDecls ++= Seq(tmp1d, tmp2d)
+ val assign1 = LocalVarAssign(tmp1r, time.get)()
+ val assign2 = LocalVarAssign(tmp2r, translatePrime(time.get, p1, p2))()
+ targetValAssigns ++= Seq(assign1, assign2)
+ val eq1 = EqCmp(tmp1r, time.get)()
+ val eq2 = EqCmp(tmp2r, translatePrime(time.get, p1, p2))()
+ targetValEqualities1 ++= Seq(eq1)
+ targetValEqualities2 ++= Seq(eq2)
+ }*/
+ stmts ++= targetValAssigns
+
+ // tmp assigns for all ctrlVars
+ var ctrlVarToOldMap: Map[LocalVar, LocalVar] = Map()
+ if (recNeeded) {
+ var ctrlFlowTmpAssigns = Seq[Stmt]()
+ for (v <- ctrlVars.declarations().map(d => d.localVar)) {
+ val (tmp1d, tmp1r) = getNewBool("old" + v.name)
+ ctrlVarToOldMap += (v -> tmp1r)
+ newVarDecls :+= tmp1d
+ stmts :+= LocalVarAssign(tmp1r, v)()
+ ctrlFlowTmpAssigns :+= LocalVarAssign(v, tmp1r)()
+ }
+ }
+
+ val newCond = Or(And(And(ctrlVars.activeExecNoContNormal(Some(p1)), Not(bypass1r)())(), w.cond)(),
+ And(And(ctrlVars.activeExecNoContPrime(Some(p2)), Not(bypass2r)())(), translatePrime(w.cond, p1, p2))())()
+ var bodyPreamble: Seq[Stmt] = Seq()
+ if (ctrlVars.cont1r.isDefined) bodyPreamble = bodyPreamble :+
+ LocalVarAssign(ctrlVars.cont1r.get, FalseLit()())() :+
+ LocalVarAssign(ctrlVars.cont2r.get, FalseLit()())()
+ val (p1d, p1r) = getNewBool("p1")
+ val (p2d, p2r) = getNewBool("p2")
+ newVarDecls ++= Seq(p1d, p2d)
+ val p1Assign = LocalVarAssign(p1r, And(ctrlVars.activeExecNormal(Some(p1)), w.cond)())()
+ val p2Assign = LocalVarAssign(p2r, And(ctrlVars.activeExecPrime(Some(p2)), translatePrime(w.cond, p1, p2))())()
+ bodyPreamble ++= Seq(p1Assign, p2Assign)
+
+ var newStdInvs = w.invs
+ // check if there is an InhaleExhaleExp in invariants
+ if (w.invs.exists(inv => inv.contains[InhaleExhaleExp])) {
+ val (idle1d, idle1r) = getNewBool("idle1")
+ val (idle2d, idle2r) = getNewBool("idle2")
+ primedNames.update(idle1r.name, idle2r.name)
+ newVarDecls ++= Seq(idle1d, idle2d)
+ // assign false before the loop
+ stmts ++= Seq(LocalVarAssign(idle1r, FalseLit()())(),
+ LocalVarAssign(idle2r, FalseLit()())())
+ // assign inside loop body that the execution is idling
+ val idle1Assign = LocalVarAssign(idle1r,
+ And(ctrlVars.activeExecNormal(Some(p1)), Not(w.cond)())())()
+ val idle2Assign = LocalVarAssign(idle2r,
+ And(ctrlVars.activeExecPrime(Some(p2)), Not(translatePrime(w.cond, p1, p2))())())()
+ bodyPreamble ++= Seq(idle1Assign, idle2Assign)
+ // make all exhales of InhaleExhales dependent on not idling
+ newStdInvs = newStdInvs.map(inv => inv.transform{
+ case ie@InhaleExhaleExp(in, ex) => InhaleExhaleExp(in,
+ Implies(Not(idle1r)(), ex)())(ie.pos, ie.info, ie.errT)
+ })
+ }
+
+ // --- Terminates ---
+ var terminates: Option[SIFTerminatesExp] = None
+ w.invs.foreach(inv => inv.visit{
+ case t: SIFTerminatesExp => terminates = Some(t)
+ })
+ if (terminates.isDefined) {
+ stmts ++= terminationChannelsLowChecks(terminates.get, ctx)
+ .map(tc => Assert(tc)(tc.pos, tc.info, tc.errT))
+ val (cond1d, cond1r) = getNewBool("cond")
+ val (cond2d, cond2r) = getNewBool("cond")
+ primedNames.update(cond1r.name, cond2r.name)
+ newVarDecls ++= Seq(cond1d, cond2d)
+ stmts ++= Seq(If(p1, Seqn(Seq(LocalVarAssign(cond1r, terminates.get.cond)()), Seq())(), skip)(),
+ If(p2, Seqn(Seq(LocalVarAssign(cond2r, translatePrime(terminates.get.cond, p1, p2))()), Seq())(), skip)())
+ newStdInvs :+= Implies(Not(cond1r)(), w.cond)(
+ terminates.get.pos, terminates.get.info, ErrTrafo({
+ case _ => SIFTerminationChannelCheckFailed(terminates.get, SIFTermCondNotTight(terminates.get))
+ }))
+ }
+
+ val invCtx = ctx.copy(
+ p1 = And(p1, Not(bypass1r)())(),
+ p2 = And(p2, Not(bypass2r)())()
+ )
+ /*
+ val invCtx = ctx.copy(
+ p1 = ctrlVars.activeExecNoContNormal(Some(p1)),
+ p2 = ctrlVars.activeExecNoContPrime(Some(p2))
+ )
+ */
+ newStdInvs = simplifyConditions(newStdInvs.map(e => translateSIFAss(e, invCtx, invCtx)))
+ val newInvs: Seq[Exp] = newStdInvs ++
+ targetValEqualities1.map(e => Implies(bypass1r, e)()) ++
+ targetValEqualities2.map(e => Implies(bypass2r, e)())
+
+ val bodyRes = translateStatement(w.body, ctx.copy(p1 = p1r, p2 = p2r))
+ /*val bodyPostamble = Seq(
+ Inhale(Or(Not(p1)(), ctrlVars.activeExecNoContNormal(None))())(),
+ Inhale(Or(Not(p2)(), ctrlVars.activeExecNoContPrime(None))())()
+ )*/
+ stmts :+= While(newCond, newInvs, Seqn(bodyPreamble ++ Seq(bodyRes), Seq())())()
+
+ // loop reconstruction
+ if (recNeeded) {
+ val recCond1 = And(Not(bypass1r)(), Seq(ctrlVars.ret1r, ctrlVars.break1r, ctrlVars.except1r)
+ .collect({ case Some(x) => x })
+ .reduceRight[Exp]((x, y) => Or(x, y)())
+ )()
+ val recCond2 = And(Not(bypass2r)(), Seq(ctrlVars.ret2r, ctrlVars.break2r, ctrlVars.except2r)
+ .collect({ case Some(x) => x })
+ .reduceRight[Exp]((x, y) => Or(x, y)()))()
+ val recCond = Or(recCond1, recCond2)()
+ val ctrlVarAssigns: Seq[Stmt] = ctrlVars.declarations()
+ .map(d => d.localVar)
+ .map(v => LocalVarAssign(v, ctrlVarToOldMap(v))())
+ val recInhales: Seq[Stmt] = Seq() :+ //newStdInvs.map(i => Inhale(i)()) :+
+ Inhale(Implies(ctrlVars.activeExecNoContNormal(Some(p1)), w.cond)())() :+
+ Inhale(Implies(ctrlVars.activeExecNoContNormal(Some(p2)), translatePrime(w.cond, p1, p2))())()
+ val recKillInhales: Seq[Stmt] = Seq(
+ Inhale(Or(Not(p1r)(), Not(ctrlVars.activeExecNoContNormal(None))())())(),
+ Inhale(Or(Not(p2r)(), Not(ctrlVars.activeExecNoContPrime(None))())())()
+ )
+ val recThn = Seqn(
+ (ctrlVarAssigns ++ recInhales ++ bodyPreamble ++ Seq(bodyRes) ++ recKillInhales),
+ Seq())()
+ stmts :+= If(recCond, recThn, skip)(info=SimpleInfo(Seq("Loop Reconstruction.\n ")))
+ }
+ if (Seq(ctrlVars.break1r, ctrlVars.cont1r).collect({case Some(x) => x}).nonEmpty) {
+ stmts ++= Seq(
+ If(Not(bypass1r)(), Seqn(Seq(ctrlVars.break1r, ctrlVars.cont1r)
+ .collect({ case Some(x) => x })
+ .map(v => LocalVarAssign(v, FalseLit()())()),
+ Seq())(), skip)(),
+ If(Not(bypass2r)(), Seqn(Seq(ctrlVars.break2r, ctrlVars.cont2r)
+ .collect({ case Some(x) => x })
+ .map(v => LocalVarAssign(v, FalseLit()())()),
+ Seq())(), skip)()
+ )
+ }
+ Seqn(stmts, newVarDecls)()
+ }
+
+ /** Translate a try/catch block into MPP.
+ */
+ private def translateTryCatchStmt(tryStmt: SIFTryCatchStmt, ctx: TranslationContext): Seqn = {
+ val p1 = ctx.p1; val p2 = ctx.p2; val ctrlVars = ctx.ctrlVars
+ var stmts: Seq[Stmt] = Seq()
+ var newVarDecls: Seq[LocalVarDecl] = Seq()
+ val hasFinally: Boolean = tryStmt.finallyBlock.isDefined
+ // bypass preamble
+ val (bypass1d, bypass1r) = getNewBool("bypass1")
+ val (bypass2d, bypass2r) = getNewBool("bypass2")
+ newVarDecls ++= Seq(bypass1d, bypass2d)
+ val bypassAssigns: Seq[Stmt] = bypassPreamble(p1, p2, ctrlVars, bypass1r, bypass2r)
+ stmts ++= bypassAssigns
+ // assigning old values of ret and except flags
+ def oldAssign(ctrl: Option[LocalVar], name: String): Option[LocalVar] = {
+ if (ctrl.isEmpty) return None
+ val (decl, v) = getNewBool(name)
+ newVarDecls :+= decl
+ stmts :+= LocalVarAssign(v, ctrl.get)()
+ Some(v)
+ }
+ var oldret1r, oldret2r, oldbreak1r, oldbreak2r, oldcont1r, oldcont2r,
+ oldexcept1r, oldexcept2r: Option[LocalVar] = None
+ if (hasFinally) {
+ oldret1r = oldAssign(ctrlVars.ret1r, name = "oldret1")
+ oldret2r = oldAssign(ctrlVars.ret2r, name = "oldret2")
+ oldbreak1r = oldAssign(ctrlVars.break1r, name = "oldbreak1")
+ oldbreak2r = oldAssign(ctrlVars.break2r, name = "oldbreak2")
+ oldcont1r = oldAssign(ctrlVars.cont1r, name = "oldcont1")
+ oldcont2r = oldAssign(ctrlVars.cont2r, name = "oldcont2")
+ oldexcept1r = oldAssign(ctrlVars.except1r, name = "oldexcept1")
+ oldexcept2r = oldAssign(ctrlVars.except2r, name = "oldexcept2")
+ }
+ // translate try body
+ stmts :+= translateStatement(tryStmt.body, ctx)
+ // create variable 'thisexcept', to express that we had an exception in this tryblock
+ val (thisexcept1d, thisexcept1r) = getNewBool("thisexcept1")
+ val (thisexcept2d, thisexcept2r) = getNewBool("thisexcept2")
+ newVarDecls ++= Seq(thisexcept1d, thisexcept2d)
+ stmts :+= LocalVarAssign(thisexcept1r, And(ctrlVars.except1r.get, Not(bypass1r)())())()
+ stmts :+= LocalVarAssign(thisexcept2r, And(ctrlVars.except2r.get, Not(bypass2r)())())()
+ // translate the exception handlers
+ for (handler <- tryStmt.catchBlocks) {
+ val (p1d, p1r) = getNewBool("p1")
+ val (p2d, p2r) = getNewBool("p2")
+ newVarDecls ++= Seq(p1d, p2d)
+ stmts = stmts :+
+ LocalVarAssign(p1r, And(p1, And(thisexcept1r, translateNormal(handler.exception, p1, p2))())())() :+
+ LocalVarAssign(p2r, And(p2, And(thisexcept2r, translatePrime(handler.exception, p1, p2))())())() :+
+ If(p1r, Seqn(Seq(LocalVarAssign(ctrlVars.except1r.get, FalseLit()())()), Seq())(), skip)() :+
+ If(p2r, Seqn(Seq(LocalVarAssign(ctrlVars.except2r.get, FalseLit()())()), Seq())(), skip)()
+ stmts :+= translateStatement(handler.body, TranslationContext(p1r, p2r, ctrlVars, ctx.currentMethod))
+ // assign null to error variable if exception was caught
+ stmts :+= translateStatement(LocalVarAssign(handler.errVar, NullLit()())(), ctx)
+ }
+ // translate the else block
+ if (tryStmt.elseBlock.isDefined) {
+ val (p1d2, p1r2) = getNewBool("p1")
+ val (p2d2, p2r2) = getNewBool("p2")
+ newVarDecls ++= Seq(p1d2, p2d2)
+ stmts :+= LocalVarAssign(p1r2, And(p1, Not(thisexcept1r)())())()
+ stmts :+= LocalVarAssign(p2r2, And(p2, Not(thisexcept2r)())())()
+ stmts :+= translateStatement(tryStmt.elseBlock.get, TranslationContext(p1r2, p2r2, ctrlVars, ctx.currentMethod))
+ }
+ // translate the finally block
+ if (hasFinally) {
+ def tmpAssigns(tuples: (LocalVar, Option[LocalVar], Option[LocalVar])*): Seq[Stmt] = {
+ tuples
+ .filter(tuple => tuple._2.isDefined)
+ .flatMap{
+ case (tmp: LocalVar, ctrl: Option[LocalVar], old: Option[LocalVar]) =>
+ Seq(LocalVarAssign(tmp, ctrl.get)(),
+ LocalVarAssign(ctrl.get, old.get)())
+ }
+ }
+ def tmpReAssigns(tuples: (LocalVar, Option[LocalVar], Option[Seq[Option[LocalVar]]])*): Seq[Stmt] = {
+ tuples
+ .filter(tuple => tuple._2.isDefined)
+ .flatMap{
+ case (tmp: LocalVar, ctrl: Option[LocalVar], None) =>
+ Seq(LocalVarAssign(ctrl.get, Or(ctrl.get, tmp)())())
+ case (tmp: LocalVar, ctrl: Option[LocalVar], Some(unless)) =>
+ val negatedUnless = unless.map{
+ case Some(v) => Some(Not(v)())
+ case None => None
+ }
+ Seq(LocalVarAssign(ctrl.get, Or(ctrl.get, And(tmp, _conjoinOptions(negatedUnless))())())())
+ }
+ }
+
+ // store ret and except in tmp variables
+ val (tmpret1d, tmpret1r) = getNewBool("tmp_ret1")
+ val (tmpret2d, tmpret2r) = getNewBool("tmp_ret2")
+ val (tmpbreak1d, tmpbreak1r) = getNewBool("tmp_break1")
+ val (tmpbreak2d, tmpbreak2r) = getNewBool("tmp_break2")
+ val (tmpcont1d, tmpcont1r) = getNewBool("tmp_cont1")
+ val (tmpcont2d, tmpcont2r) = getNewBool("tmp_cont2")
+ val (tmpexcept1d, tmpexcept1r) = getNewBool("tmp_except1")
+ val (tmpexcept2d, tmpexcept2r) = getNewBool("tmp_except2")
+ newVarDecls ++= Seq(tmpret1d, tmpret2d, tmpbreak1d, tmpbreak2d, tmpcont1d, tmpcont2d,
+ tmpexcept1d, tmpexcept2d)
+ val tmpAssigns1: Seq[Stmt] = tmpAssigns(
+ (tmpret1r, ctrlVars.ret1r, oldret1r),
+ (tmpbreak1r, ctrlVars.break1r, oldbreak1r),
+ (tmpcont1r, ctrlVars.cont1r, oldcont1r),
+ (tmpexcept1r, ctrlVars.except1r, oldexcept1r)
+ )
+ val tmpAssigns2: Seq[Stmt] = tmpAssigns(
+ (tmpret2r, ctrlVars.ret2r, oldret2r),
+ (tmpbreak2r, ctrlVars.break2r, oldbreak2r),
+ (tmpcont2r, ctrlVars.cont2r, oldcont2r),
+ (tmpexcept2r, ctrlVars.except2r, oldexcept2r)
+ )
+ stmts :+= If(p1, Seqn(tmpAssigns1, Seq())(), skip)()
+ stmts :+= If(p2, Seqn(tmpAssigns2, Seq())(), skip)()
+ stmts :+= translateStatement(tryStmt.finallyBlock.get, ctx)
+ val tmpReAssigns1 = tmpReAssigns(
+ (tmpexcept1r, ctrlVars.except1r, Some(Seq(ctrlVars.ret1r, ctrlVars.break1r))),
+ (tmpret1r, ctrlVars.ret1r, None),
+ (tmpbreak1r, ctrlVars.break1r, None),
+ (tmpcont1r, ctrlVars.cont1r, None)
+ )
+ val tmpReAssigns2 = tmpReAssigns(
+ (tmpexcept2r, ctrlVars.except2r, Some(Seq(ctrlVars.ret2r, ctrlVars.break2r))),
+ (tmpret2r, ctrlVars.ret2r, None),
+ (tmpbreak2r, ctrlVars.break2r, None),
+ (tmpcont2r, ctrlVars.cont2r, None)
+ )
+ stmts :+= If(p1, Seqn(tmpReAssigns1, Seq())(), skip)()
+ stmts :+= If(p2, Seqn(tmpReAssigns2, Seq())(), skip)()
+ }
+ Seqn(stmts, newVarDecls)(info = SimpleInfo(Seq("Try/catch block\n ")))
+ }
+
+ def translateStatement(s: Stmt, ctx: TranslationContext) : Stmt = {
+ val p1 = ctx.p1
+ val p2 = ctx.p2
+ val ctrlVars = ctx.ctrlVars
+ lazy val act1: Exp = ctx.ctrlVars.activeExecNormal(Some(p1))
+ lazy val act2: Exp = ctx.ctrlVars.activeExecPrime(Some(p2))
+ lazy val isInPreservesLow: Boolean = preservesLowMethods.contains(ctx.currentMethod.name)
+
+ def executeConditionally(ift1: Seqn, ift2: Seqn): Stmt = {
+ val a1 = If(act1, ift1, skip)()
+ val a2 = If(act2, ift2, skip)()
+ Seqn(Seq(a1, a2, incrementTime(p1, p2)), Seq())()
+ }
+ def translateAssignment(to1: LocalVar, v1: Exp, to2: LocalVar, v2: Exp, orig: Stmt) : Stmt = {
+ executeConditionally(
+ Seqn(Seq(LocalVarAssign(to1, v1)(orig.pos, orig.info, orig.errT)), Seq())(),
+ Seqn(Seq(LocalVarAssign(to2, v2)(orig.pos, orig.info, orig.errT)), Seq())()
+ )
+ }
+
+ /** Return true if the statement can be bunched together with others, without doing the interleaving of the
+ * two executions, thus saving on the number of if-statements generated.
+ */
+ def isCompressible(s: Stmt): Boolean = {
+ s match {
+ case _: LocalVarAssign => true
+ case Inhale(e) => isUnary(e)
+ case Exhale(e) => isUnary(e)
+ case _: SIFReturnStmt => true
+ case _: SIFBreakStmt => true
+ case _: SIFContinueStmt => true
+ case _: Goto => false
+ case _: Label => false
+ case _ => false
+ }
+ }
+
+ /** Do the translation of a statement without wrapping it in an if statement. Just returns the two versions in a
+ * tuple, to allow putting multiple statements in an if block. Requires [[isCompressible(s)]].
+ */
+ def translateStmtPartial(s: Stmt): (Stmt, Stmt) = {
+ assert(isCompressible(s))
+ s match {
+ case l@LocalVarAssign(lhs, rhs) => (LocalVarAssign(translateNormal(lhs, p1, p2),
+ translateNormal(rhs, p1, p2))(l.pos, l.info, l.errT),
+ LocalVarAssign(translatePrime(lhs, p1, p2), translatePrime(rhs, p1, p2))(l.pos, l.info, l.errT))
+ case a@FieldAssign(lhs, rhs) => (a, FieldAssign(translatePrime(lhs, p1, p2),
+ translatePrime(rhs, p1, p2))(a.pos, a.info, a.errT))
+ case i@Inhale(e) => (Inhale(translateNormal(e, p1, p2))(i.pos, i.info, i.errT),
+ Inhale(translatePrime(e, p1, p2))(i.pos, i.info, i.errT))
+ case ex@Exhale(e) => (Exhale(translateNormal(e, p1, p2))(ex.pos, ex.info, ex.errT),
+ Exhale(translatePrime(e, p1, p2))(ex.pos, ex.info, ex.errT))
+ case b: SIFBreakStmt => {
+ // TODO
+ (LocalVarAssign(ctrlVars.break1r.get, TrueLit()())(b.pos, b.info, b.errT),
+ LocalVarAssign(ctrlVars.break2r.get, TrueLit()())(b.pos, b.info, b.errT))
+ }
+ case c: SIFContinueStmt => (LocalVarAssign(ctrlVars.cont1r.get, TrueLit()())(c.pos, c.info, c.errT),
+ LocalVarAssign(ctrlVars.cont2r.get, TrueLit()())(c.pos, c.info, c.errT))
+ case r@SIFReturnStmt(e, resVar) =>
+ {
+ // TODO
+ val assign1 = resVar match {
+ case Some(rv) => Seq(LocalVarAssign(translateNormal(rv, p1, p2),
+ translateNormal(e.get, p1, p2))(r.pos, r.info, r.errT))
+ case None => Seq()
+ }
+ val assign2 = resVar match {
+ case Some(rv) => Seq(LocalVarAssign(translatePrime(rv, p1, p2),
+ translatePrime(e.get, p1, p2))(r.pos, r.info, r.errT))
+ case None => Seq()
+ }
+ (Seqn(assign1 :+ LocalVarAssign(ctrlVars.ret1r.get, TrueLit()())(), Seq())(),
+ Seqn(assign2 :+ LocalVarAssign(ctrlVars.ret2r.get, TrueLit()())(), Seq())())
+ }
+
+ case _ => throw new IllegalArgumentException(s"The statement $s can't be translated partially")
+ }
+ }
+
+ def optimizeSequential(s: Seqn): Seq[Stmt] = {
+ def sequenceSplit(in: Seq[Stmt]): (Seq[Stmt], Seq[Stmt]) = {
+ // ensure that we make a split after return, break, continue, raise, because the ctrlVars will have changed
+ var stop: Boolean = false
+ def keepGoing(stmt: Stmt): Boolean = {
+ val oldStop = stop
+ stmt match {
+ case _: SIFReturnStmt => stop = true
+ case _: SIFBreakStmt => stop = true
+ case _: SIFContinueStmt => stop = true
+ case _: SIFRaiseStmt => stop = true
+ case _ =>
+ }
+ !oldStop && isCompressible(stmt)
+ }
+ in.span(stmt => keepGoing(stmt))
+ }
+
+ var newStmts = Seq[Stmt]()
+ var (comp, rest) = sequenceSplit(s.ss)
+ // println("optimizing compressible statements:")
+ while (comp.nonEmpty || rest.nonEmpty) {
+ // println(s"split into comp: $comp and rest: $rest")
+ // collect all compressible statements we have until here
+ if (comp.nonEmpty) {
+ val (fstExComp, secExComp): (Seq[Stmt], Seq[Stmt]) = comp.map(stmt => translateStmtPartial(stmt)).unzip
+ newStmts :+= executeConditionally(Seqn(fstExComp, Seq())(), Seqn(secExComp, Seq())())
+ }
+ // translate all non-compressible statements
+ var split = rest.span(stmt => !isCompressible(stmt))
+ val nonComp = split._1
+ rest = split._2
+ // println(s"split into non-comp: $nonComp and rest: $rest")
+ nonComp.foreach(stmt => newStmts :+= translateStatement(stmt, ctx))
+ // start anew
+ split = sequenceSplit(rest)
+ comp = split._1
+ rest = split._2
+ }
+ newStmts
+ }
+
+ s match {
+ case l@LocalVarAssign(lhs, rhs) => translateAssignment(translateNormal(lhs, p1, p2),
+ translateNormal(rhs, p1, p2), translatePrime(lhs, p1, p2), translatePrime(rhs, p1, p2), l)
+ case a@FieldAssign(lhs, rhs) => executeConditionally(Seqn(Seq(a), Seq())(),
+ Seqn(Seq(FieldAssign(translatePrime(lhs, p1, p2),
+ translatePrime(rhs, p1, p2))(a.pos, a.info, a.errT)), Seq())())
+ case n@NewStmt(lhs, fields) => {
+ val allFields = fields ++ fields.map{f => newFields.find(f2 => f2.name == primedNames(f.name)).get}
+ val (tmpd, tmpr) = getNewVar("tmp", Ref)
+ val newNew = NewStmt(tmpr, allFields)()
+ /*val allFieldAssigns = allFields.map { f =>
+ val (hd, hr) = getNewVar("havoc", f.typ)
+ val fieldAcc = FieldAccess(tmpr, f)()
+ Seqn(Seq(FieldAssign(fieldAcc, hr)()), Seq(hd))()
+ }*/
+ val assign1 = If(act1, Seqn(Seq(LocalVarAssign(lhs, tmpr)()), Seq())(), skip)()
+ val assign2 = If(act2, Seqn(Seq(LocalVarAssign(translatePrime(lhs, p1, p2), tmpr)()),
+ Seq())(), skip)()
+ Seqn(Seq(newNew) ++ /*allFieldAssigns ++*/ Seq(assign1, assign2, incrementTime(p1, p2)), Seq(tmpd))()
+ }
+ case i@If(cond, thn, els) => {
+ val (p1d, p1r) = getNewBool("p1")
+ val (p2d, p2r) = getNewBool("p2")
+ val (p3d, p3r) = getNewBool("p3")
+ val (p4d, p4r) = getNewBool("p4")
+
+ val p1Assign = LocalVarAssign(p1r, And(act1, cond)())(i.pos)
+ val p2Assign = LocalVarAssign(p2r, And(act2, translatePrime(cond, p1, p2))())(i.pos)
+ val p3Assign = LocalVarAssign(p3r, And(act1, Not(cond)())())(i.pos)
+ val p4Assign = LocalVarAssign(p4r, And(act2, Not(translatePrime(cond, p1, p2))())())(i.pos)
+
+ val thnRes = translateStatement(thn, TranslationContext(p1r, p2r, ctrlVars, ctx.currentMethod))
+ val elsRes = translateStatement(els, TranslationContext(p3r, p4r, ctrlVars, ctx.currentMethod))
+ Seqn(Seq(p1Assign, p2Assign, p3Assign, p4Assign, incrementTime(p1, p2), thnRes, elsRes), Seq(p1d, p2d, p3d, p4d))()
+ }
+ case w: While => translateWhileStmt(w, ctx)
+ case mc@MethodCall(name, args, targets) => {
+ var argDecls = Seq[LocalVarDecl]()
+ var newArgs = Seq[Exp](act1, act2)
+ var argAssigns1 = Seq[LocalVarAssign]()
+ var argAssigns2 = Seq[LocalVarAssign]()
+
+ if (timing){
+ newArgs ++= Seq(time.get, translatePrime(time.get, p1, p2))
+ }
+
+ for (a <- args){
+ val (tmp1d, tmp1r) = getNewVar("tmp1", a.typ)
+ val (tmp2d, tmp2r) = getNewVar("tmp2", a.typ)
+ argDecls ++= Seq(tmp1d, tmp2d)
+ newArgs ++= Seq(tmp1r, tmp2r)
+ argAssigns1 :+= LocalVarAssign(tmp1r, a)()
+ argAssigns2 :+= LocalVarAssign(tmp2r, translatePrime(a, p1, p2))()
+ }
+ val argAssignsConditional: Seq[Stmt] = Seq(
+ If(act1, Seqn(argAssigns1, Seq())(), skip)(),
+ If(act2, Seqn(argAssigns2, Seq())(), skip)()
+ )
+
+ var targetDecls = Seq[LocalVarDecl]()
+ var newTargets = Seq[LocalVar]()
+ var targetAssigns1 = Seq[LocalVarAssign]()
+ var targetAssigns2 = Seq[LocalVarAssign]()
+
+ if (timing){
+ newTargets ++= Seq(time.get, translatePrime(time.get, p1, p2))
+ }
+
+ for (t <- targets){
+ val (tmp1d, tmp1r) = getNewVar("tmp1", t.typ)
+ val (tmp2d, tmp2r) = getNewVar("tmp2", t.typ)
+ targetDecls ++= Seq(tmp1d, tmp2d)
+ newTargets ++= Seq(tmp1r, tmp2r)
+ targetAssigns1 :+= LocalVarAssign(t, tmp1r)()
+ targetAssigns2 :+= LocalVarAssign(translatePrime(t, p1, p2), tmp2r)()
+ }
+ val targetAssignsConditional = if (targets.nonEmpty) Seq[Stmt](
+ If(act1, Seqn(targetAssigns1, Seq())(), skip)(),
+ If(act2, Seqn(targetAssigns2, Seq())(), skip)()
+ ) else Seq()
+
+ val call = MethodCall(name, newArgs, newTargets)(mc.pos, mc.info, mc.errT)
+ If(Or(act1, act2)(),
+ Seqn(argAssignsConditional ++ Seq(call) ++ targetAssignsConditional, argDecls ++ targetDecls)(),
+ skip
+ )(info = SimpleInfo(Seq(s"Method call: $name\n ")))
+ }
+ case s: Seqn => {
+ val seq = if (Config.optimizeSequential) flattenSeqn(s) else s
+ var newDecls = Seq[Declaration]()
+ for (d <- seq.scopedDecls.filter(d => d.isInstanceOf[LocalVarDecl])){
+ val newName = getName(d.name)
+ primedNames.update(d.name, newName)
+ val newD = LocalVarDecl(newName, d.asInstanceOf[LocalVarDecl].typ)()
+ newDecls ++= Seq(d, newD)
+ }
+ newDecls ++= seq.scopedDecls.filter(d => d.isInstanceOf[Label])
+ val newStmts = if (Config.optimizeSequential) optimizeSequential(seq)
+ else seq.ss.map{stmt => translateStatement(stmt, ctx)}
+ Seqn(newStmts, newDecls)()
+ }
+ case a@Assert(e1) =>
+ val newCtx = a.info.getUniqueInfo[SIFInfo] match {
+ case Some(info) if info.continueUnaware => ctx.copy(p1 = ctrlVars.activeExecNoContNormal(Some(p1)),
+ p2 = ctrlVars.activeExecNoContPrime(Some(p2)))
+ case _ => ctx.copy(p1 = act1, p2 = act2)
+ }
+ Assert(translateSIFAss(e1, newCtx))(s.pos, errT= fwTs(s, s))
+ case i@Inhale(FalseLit()) => i
+ case Assume(e1) => Assume(translateSIFAss(e1, ctx.copy(p1 = act1, p2 = act2)))(s.pos, errT= fwTs(s, s))
+ case Inhale(e1) => Inhale(translateSIFAss(e1, ctx.copy(p1 = act1, p2 = act2)))(s.pos, errT= fwTs(s, s))
+ case Exhale(e1) => Exhale(translateSIFAss(e1, ctx.copy(p1 = act1, p2 = act2)))(s.pos, errT= fwTs(s, s))
+ case d : LocalVarDeclStmt => d
+ case u@Unfold(acc) =>
+ val predicate2 = PredicateAccess(acc.loc.args.map(a => translatePrime(a, p1, p2)),
+ primedNames(acc.loc.predicateName))()
+ val (lowFunc, lhs) = getPredicateLowFuncExp(acc.loc.predicateName, ctx)
+ val assert = lowFunc match {
+ case Some(f) =>
+ val et = ErrTrafo({case _: AssertFailed => errors.UnfoldFailed(u, SIFUnfoldNotLow(u))})
+ Assert(Implies(
+ lhs,
+ Implies(
+ And(
+ PermGeCmp(CurrentPerm(acc.loc)(), FullPerm()())(),
+ PermGeCmp(CurrentPerm(predicate2)(), FullPerm()())()
+ )(),
+ FuncApp(f, acc.loc.args ++ acc.loc.args.map(a => translatePrime(a, p1, p2)))()
+ )())()
+ )(u.pos, u.info, errT = et)
+ case None => skip
+ }
+ val if1 = If(act1, Seqn(Seq(u), Seq())(), skip)()
+ val if2 = If(act2, Seqn(Seq(
+ Unfold(PredicateAccessPredicate(predicate2, translatePrime(acc.perm, p1, p2))())(u.pos, u.info, u.errT)
+ ), Seq())(), skip)()
+ Seqn(Seq(assert, if1, if2), Seq())()
+ case f@Fold(acc) =>
+ val if1 = If(act1, Seqn(Seq(f), Seq())(), skip)()
+ val if2 = If(act2, Seqn(Seq(
+ Fold(PredicateAccessPredicate(
+ PredicateAccess(acc.loc.args.map(a => translatePrime(a, p1, p2)),
+ primedNames(acc.loc.predicateName))(), translatePrime(acc.perm, p1, p2))())(f.pos, f.info, f.errT)
+ ), Seq())(), skip)()
+ val (lowFunc, lhs) = getPredicateLowFuncExp(acc.loc.predicateName, ctx)
+ val assert: Stmt = lowFunc match {
+ case Some(func) =>
+ val et = ErrTrafo({case AssertFailed(_,_,_) => errors.FoldFailed(f, SIFFoldNotLow(f))})
+ Assert(Implies(
+ lhs,
+ FuncApp(func.copy()(func.pos, func.info, errT = et),
+ acc.loc.args ++ acc.loc.args.map(a => translatePrime(a, p1, p2)))()
+ )())(f.pos, f.info, errT = et)
+ case None => skip
+ }
+ Seqn(Seq(if1, if2, assert), Seq())()
+ case r: SIFReturnStmt => {
+ // TODO
+ val (first, second) = translateStmtPartial(r).asInstanceOf[(Seqn, Seqn)]
+ val r1 = If(act1, first, skip)()
+ val r2 = If(act2, second, skip)()
+ Seqn(Seq(r1, r2, incrementTime(p1, p2)), Seq())()
+ }
+ case b@SIFBreakStmt() => {
+ // TODO
+ translateAssignment(ctrlVars.break1r.get, TrueLit()(),
+ ctrlVars.break2r.get, TrueLit()(), b)
+ }
+ case c@SIFContinueStmt() => translateAssignment(ctrlVars.cont1r.get, TrueLit()(),
+ ctrlVars.cont2r.get, TrueLit()(), c)
+ case tryCatch: SIFTryCatchStmt => translateTryCatchStmt(tryCatch, ctx)
+ case SIFRaiseStmt(assignment) =>
+ var stmts = Seq[Stmt]()
+ val assign1 = assignment match {
+ case Some(a) => Some(LocalVarAssign(translateNormal(a.lhs, p1, p2),
+ translateNormal(a.rhs, p1, p2))())
+ case None => None
+ }
+ val assign2 = assignment match {
+ case Some(a) => Some(LocalVarAssign(translatePrime(a.lhs, p1, p2),
+ translatePrime(a.rhs, p1, p2))())
+ case None => None
+ }
+ stmts :+= If(act1,
+ Seqn(Seq(assign1, Some(LocalVarAssign(ctrlVars.except1r.get, TrueLit()())()))
+ .collect({case Some(x) => x}), Seq())(),
+ skip)()
+ stmts :+= If(act2,
+ Seqn(Seq(assign2, Some(LocalVarAssign(ctrlVars.except2r.get, TrueLit()())()))
+ .collect({case Some(x) => x}), Seq())(),
+ skip)()
+ Seqn(stmts, Seq())()
+ case d@SIFDeclassifyStmt(e) => Inhale(Implies(
+ And(act1, act2)(), EqCmp(translateNormal(e, p1, p2), translatePrime(e, p1, p2))()
+ )())(d.pos, d.info, d.errT)
+ case SIFAssertNoException() =>
+ val exp: Exp = if (ctrlVars.except1r.isDefined) And(
+ Implies(p1, Not(ctrlVars.except1r.get)())(s.pos, s.info, s.errT),
+ Implies(p2, Not(ctrlVars.except2r.get)())(s.pos, s.info, s.errT)
+ )(s.pos, s.info, s.errT)
+ else TrueLit()()
+ Exhale(exp)(s.pos, s.info, s.errT)
+ case SIFInlinedCallStmt(stmts) =>
+ val newCtrlVars = createControlFlowVars(stmts)
+ val inlinedCtx = TranslationContext(p1, p2, newCtrlVars, ctx.currentMethod)
+ Seqn(newCtrlVars.initAssigns() :+ translateStatement(stmts, inlinedCtx), newCtrlVars.declarations())()
+ case g@Goto(l) => {
+ val varName1 = ctrlVars.labelNames.get(l).get
+ val varName2 = primedNames.get(varName1).get
+ val assign1 = If(act1, Seqn(Seq(LocalVarAssign(LocalVar(varName1, Bool)(), TrueLit()())()), Seq())(), Seqn(Seq(), Seq())())()
+ val assign2 = If(act2, Seqn(Seq(LocalVarAssign(LocalVar(varName2, Bool)(), TrueLit()())()), Seq())(), Seqn(Seq(), Seq())())()
+ Seqn(Seq(assign1, assign2), Seq())()
+ }
+ case lb@Label(l, _) if ctrlVars.labelNames.contains(l) => {
+ val varName1 = ctrlVars.labelNames.get(l).get
+ val varName2 = primedNames.get(varName1).get
+ val thisAct1 = ctx.ctrlVars.activeExecNormalExceptLabel(Some(p1), varName1)
+ val thisAct2 = ctx.ctrlVars.activeExecPrimeExceptLabel(Some(p2), varName2)
+ val assign1 = If(thisAct1, Seqn(Seq(LocalVarAssign(LocalVar(varName1, Bool)(), FalseLit()())()), Seq())(), Seqn(Seq(), Seq())())()
+ val assign2 = If(thisAct2, Seqn(Seq(LocalVarAssign(LocalVar(varName2, Bool)(), FalseLit()())()), Seq())(), Seqn(Seq(), Seq())())()
+ Seqn(Seq(lb, assign1, assign2), Seq())()
+ }
+ case lb : Label => lb
+ case other => throw new IllegalArgumentException("unexpected: " + other)
+ }
+ }
+
+ def getNewVar(name: String, typ: Type) : (LocalVarDecl, LocalVar) = {
+ val newName = getName(name)
+ (LocalVarDecl(newName, typ)(), LocalVar(newName, typ)())
+ }
+
+ def getNewBool(name: String) : (LocalVarDecl, LocalVar) = {
+ getNewVar(name, Bool)
+ }
+
+ def isRelational(e: Exp): Boolean = {
+ !isUnary(e)
+ }
+
+ def isUnary(e: Exp): Boolean = {
+ val relVars = e.filter{
+ case _: SIFLowExp => true
+ case _: SIFLowEventExp => true
+ case f@DomainFuncApp("Low", args, _) => true
+ case _ => false
+ }
+ relVars.isEmpty
+ }
+
+ def translateSIFExp1(e: Exp, p1: Exp, p2: Exp): Exp = {
+ e match {
+ case re if isRelational(e) => Implies(And(p1, p2)(), translateNormal(e, p1, p2))(e.pos, errT = fwTs(re, re))
+ case re if isUnary(e) => translateNormal(e, p1, p2)
+ }
+ }
+
+ def translateSIFExp2(e: Exp, p1: Exp, p2: Exp): Exp = {
+ e match {
+ case re if isRelational(e) => TrueLit()(e. pos, errT = fwTs(re, re))
+ case _ => translatePrime(e, p1, p2)
+ }
+ }
+
+ def translateSIFLowExpComparison(l: SIFLowExp, p1: Exp, p2: Exp): Exp = {
+ val primedExp = translatePrime(l.exp, p1, p2)
+ l.comparator match {
+ case None => EqCmp(l.exp, primedExp)(l.pos, errT = fwTs(l, l))
+ case Some(str) =>
+ _program.findDomainFunctionOptionally(str) match {
+ case Some(df) => DomainFuncApp(df, Seq(l.exp, primedExp), l.typVarMap)(l.pos, l.info, errT = fwTs(l, l))
+ case None => _program.findFunctionOptionally(str) match {
+ case Some(f) => FuncApp(f, Seq(l.exp, primedExp))(l.pos, l.info, errT = fwTs(l, l))
+ case None => sys.error(s"Unknown comparator $str.")
+ }
+ }
+ }
+ }
+
+ def translateAssDefault(e: Exp, p1: Exp, p2: Exp): And = {
+ And(Implies(p1, translateSIFExp1(e, p1, p2))(e.pos, errT = fwTs(e, e)),
+ Implies(p2, translateSIFExp2(e, p1, p2))(e.pos, errT = fwTs(e, e)))(e.pos, errT = fwTs(e, e))
+ }
+
+ def fwTs(t: TransformableErrors, node: ErrorNode) = {
+ Trafos(t.errT.eTransformations, t.errT.rTransformations, Some(node))
+ }
+
+ def translateSIFAss(e: Exp, ctx: TranslationContext, relAssertCtx: TranslationContext = null): Exp = {
+ val p1 = ctx.p1
+ val p2 = ctx.p2
+ val relCtx = if (relAssertCtx == null) ctx else relAssertCtx
+ def bothExecutions(e: Exp, pos: Position = NoPosition, info: Info = NoInfo,
+ errT: ErrorTrafo = NoTrafos): Exp = {
+ Implies(And(relCtx.p1, relCtx.p2)(), e)(pos, info, errT)
+ }
+
+ e match {
+ case And(e1, e2) => And(translateSIFAss(e1, ctx, relAssertCtx), translateSIFAss(e2, ctx, relAssertCtx))(e.pos, errT = fwTs(e, e))
+ case i@Implies(e1, e2) if !isUnary(i) => {
+ Implies(translateSIFAss(e1, ctx, relAssertCtx), translateSIFAss(e2, ctx, relAssertCtx))(e.pos, errT = fwTs(e, e))
+ }
+ case Implies(e1, e2) if e2.exists({
+ case PredicateAccess(_, name) => predLowFuncs(name).isDefined
+ case _ => false
+ }) =>
+ And(translateAssDefault(e, p1, p2), Implies(
+ translateSIFAss(e1, ctx, relAssertCtx),
+ translatePredLowFuncOnly(e2, p1, p2)
+ )())(e.pos, e.info, e.errT)
+ case fa@Forall(vars, triggers, exp) => {
+ if (fa.isPure){
+ for (v <- vars){
+ if (primedNames.contains(v.name)){
+ primedNames.remove(v.name)
+ }
+ }
+ /*var varEqs: Exp = TrueLit()()
+ val pvars = vars.map { v =>
+ val primeName = getName(v.name)
+ primedNames.update(v.name, primeName)
+ varEqs = And(varEqs, EqCmp(v.localVar, LocalVar(primeName)(v.typ))())()
+ LocalVarDecl(primedNames.get(v.name).get, v.typ)()
+ }*/
+ val newTriggers = triggers.map{t => Trigger(t.exps.map{e => translatePrime(e, p1, p2)})()}
+ //val res = Forall(vars ++ pvars, newTriggers, Implies(varEqs, translateSIFAss(exp, p1, p2))(e.pos, errT = NodeTrafo(e)))(e.pos, errT = NodeTrafo(e))
+ val res = Forall(vars, triggers ++ newTriggers,
+ translateSIFAss(exp, ctx, relAssertCtx))(e.pos, errT = fwTs(e, e)).autoTrigger
+ res
+ } else {
+ val normal = translateNormal(fa, p1, p2)
+ val prime = translatePrime(fa, p1, p2)
+ And(Implies(p1, normal)(e.pos, errT = fwTs(e, e)), Implies(p2, prime)(e.pos, errT = fwTs(e, e)))(e.pos, errT = fwTs(e, e))
+ }
+ }
+ case l: SIFLowEventExp =>
+ val act1 = ctx.ctrlVars.activeExecNormal(Some(p1))
+ val act2 = ctx.ctrlVars.activeExecPrime(Some(p2))
+ val dynCheckInfo = l.info.getUniqueInfo[SIFDynCheckInfo]
+ dynCheckInfo match {
+ case None => EqCmp(act1, act2)(e.pos, errT = fwTs(e, e))
+ case Some(dci) => And(EqCmp(act1, act2)(e.pos, errT = fwTs(e, e)), Implies(act1,
+ EqCmp(translateNormal(dci.dynCheck, p1, p2),
+ translatePrime(dci.dynCheck, p1, p2))())())(e.pos, errT = fwTs(e, e))
+ }
+ case l: SIFLowExitExp =>
+ val act1 = ctx.ctrlVars.activeExecNoContNormal(None)
+ val act2 = ctx.ctrlVars.activeExecNoContPrime(None)
+ Implies(And(relCtx.p1, relCtx.p2)(), EqCmp(act1, act2)(e.pos, errT = fwTs(e, e)))(e.pos, errT = fwTs(e, e))
+ case l@SIFLowExp(_, _, _) =>
+ val comparison = translateSIFLowExpComparison(l, relCtx.p1, relCtx.p2)
+ val dynCheckInfo = l.info.getUniqueInfo[SIFDynCheckInfo]
+ dynCheckInfo match {
+ case None => bothExecutions(comparison, e.pos)
+ case Some(dci) =>
+ val inhalePart = bothExecutions(Implies(
+ EqCmp(translateNormal(dci.dynCheck, relCtx.p1, relCtx.p2), translatePrime(dci.dynCheck, relCtx.p1, relCtx.p2))(), comparison
+ )(), e.pos)
+ if (dci.onlyDynVersion) {
+ inhalePart
+ } else {
+ InhaleExhaleExp(inhalePart, bothExecutions(comparison, e.pos)
+ )(l.pos, l.info, errT = fwTs(l, l))
+ }
+ }
+ // for the domain method low, used e.g. for list resource
+ case f@DomainFuncApp("Low", args, _) => translateSIFAss(
+ SIFLowExp(args.head, None)(f.pos, f.info, f.errT), ctx, relAssertCtx)
+ case pap@PredicateAccessPredicate(pred, _) =>
+ val (lowFunc, lhs) = getPredicateLowFuncExp(pred.predicateName, ctx)
+ lowFunc match {
+ case Some(f: Function) =>
+ val lowFuncApp = Implies(lhs,
+ FuncApp(f, pred.args ++ pred.args.map(a => translatePrime(a, p1, p2)))(pap.pos, pap.info, pap.errT)
+ )()
+ val dynCheckInfo = pap.info.getUniqueInfo[SIFDynCheckInfo]
+ val lowPart: Exp = dynCheckInfo match {
+ case Some(dfi) =>
+ val inhalePart = Implies(
+ EqCmp(translateNormal(dfi.dynCheck, p1, p2), translatePrime(dfi.dynCheck, p1, p2))(),
+ lowFuncApp
+ )(e.pos, e.info, e.errT)
+ if (dfi.onlyDynVersion) inhalePart
+ else InhaleExhaleExp(inhalePart, lowFuncApp)(e.pos, e.info, e.errT)
+ case None => lowFuncApp
+ }
+ And(translateAssDefault(pap, p1, p2), lowPart)(e.pos, errT = fwTs(e, e))
+ case None => translateAssDefault(pap, p1, p2)
+ }
+ case o@Old(oldExp) => Old(translateSIFAss(oldExp, ctx, relAssertCtx))(o.pos, o.info, o.errT)
+ case FuncApp(name, _) if predAllLowFuncs.values.exists(v => v.isDefined && v.get.name == name) =>
+ bothExecutions(e)
+ case Unfolding(predAcc, body) if !isUnary(body) => bothExecutions(Unfolding(
+ translateNormal(predAcc, relCtx.p1, relCtx.p2),
+ Unfolding(translatePrime(predAcc, relCtx.p1, relCtx.p2),
+ translateSIFAss(body, ctx, relAssertCtx))(e.pos, e.info, e.errT))(e.pos, e.info, e.errT),
+ e.pos, e.info, e.errT)
+ case _: SIFTerminatesExp => TrueLit()()
+ case _ => translateAssDefault(e, p1, p2)
+ }
+ }
+
+ def translatePrime[T <: Exp](e: T, p1: Exp, p2: Exp) : T = {
+ e.transform{
+ case d: LocalVarDecl if primedNames.contains(d.name) =>
+ d.copy(name = primedNames(d.name))(d.pos, d.info, d.errT)
+ case l: LocalVar if primedNames.contains(l.name) =>
+ l.copy(name = primedNames(l.name))(l.pos, l.info, l.errT)
+ case l: LocalVar if !primedNames.contains(l.name) => l
+ case FieldAccess(rcv, field) =>
+ FieldAccess(translatePrime(rcv, p1, p2), newFields.find(f => f.name == primedNames(field.name)).get)(e.pos)
+ case f@FuncApp(name, _) if Config.primedFuncAppReplacements.keySet.contains(name) =>
+ Config.primedFuncAppReplacements(name)(f, p1, p2)
+ case f@FuncApp(name, args) if primedNames.contains(name) => FuncApp(primedNames(name),
+ args.map(a => translatePrime(a, p1, p2)))(f.pos, f.info, f.typ, f.errT)
+ case df@DomainFuncApp(name, args, typVarMap) if primedNames.contains(name) =>
+ DomainFuncApp(
+ primedNames(name), args.map(a => translatePrime(a, p1, p2)), typVarMap)(
+ df.pos, df.info, df.typ, df.domainName, df.errT)
+ case pa@PredicateAccess(args, "MayJoin") => PredicateAccess(args.map(a => translatePrime(a, p1, p2)), "MayJoinP")(pa.pos, pa.info, pa.errT)
+ case pa@PredicateAccess(args, name) => PredicateAccess(args.map(a => translatePrime(a, p1, p2)),
+ primedNames(name))(pa.pos, pa.info, pa.errT)
+ case l: SIFLowExp => Implies(And(p1, p2)(), translateSIFLowExpComparison(l, p1, p2))()
+ case f@DomainFuncApp("Low", args, _) => TrueLit()()
+ case f@ForPerm(vars, location, body) => ForPerm(vars,
+ translateResourceAccess(location),
+ translatePrime(body, p1, p2))(f.pos, f.info, f.errT)
+ }
+ }
+
+ def translateNormal[T <: Exp](e: T, p1: Exp, p2: Exp): T = {
+ e.transform{
+ case l: SIFLowExp => Implies(And(p1, p2)(), translateSIFLowExpComparison(l, p1, p2))()
+ case f@DomainFuncApp("Low", args, _) => Implies(And(p1, p2)(), translateSIFLowExpComparison(SIFLowExp(args.head)(), p1, p2))()
+ }
+ }
+
+ def translateToUnary(e: Option[Exp]): Option[Exp] = {
+ e match {
+ case Some(x) => Some(translateToUnary(x))
+ case None => None
+ }
+ }
+
+ /** Translate an expression getting rid of all the relational parts. */
+ def translateToUnary(e: Exp): Exp = {
+ val transformed = e.transform{
+ case _: SIFLowExp => TrueLit()()
+ case f@DomainFuncApp("Low", args, _) => TrueLit()()
+ case Implies(_: SIFLowExp, _: SIFLowExp) => TrueLit()()
+ case i@Implies(lhs, rhs) => Implies(lhs, translateToUnary(rhs))(i.pos, i.info, i.errT)
+ }
+ Simplifier.simplify(transformed)
+ }
+
+ /** Translate only the relational parts of an expression. All unary parts are translated to True.
+ * @param e The expression to translate.
+ * @return The translation of the relational parts of `e`.
+ */
+ def translatePredLowFuncBody(e: Exp): Exp = {
+ val translated = e match {
+ case l: SIFLowExp => translateSIFLowExpComparison(l, null, null)
+ case p@PredicateAccessPredicate(loc, _) =>
+ val (lowFName, formalArgs, duplicatedFormalArgs) = predLowFuncInfo(loc.predicateName).get
+ FuncApp(lowFName,
+ loc.args ++ loc.args.map(a => translatePrime(a, null, null)))(
+ p.pos, NoInfo, Bool, p.errT)
+ case a@And(left, right) => And(translatePredLowFuncBody(left),
+ translatePredLowFuncBody(right))(a.pos, a.info, a.errT)
+ case o@Or(left, right) => Or(translatePredLowFuncBody(left),
+ translatePredLowFuncBody(right))(o.pos, o.info, o.errT)
+ case i@Implies(left, right) => Implies(And(translateNormal(left, null, null),
+ translatePrime(left, null, null))(),
+ translatePredLowFuncBody(right)
+ )(i.pos, i.info, i.errT)
+ case _ => TrueLit()()
+ }
+ Simplifier.simplify(translated)
+ }
+
+ def translatePredAllLowFuncBody(e: Exp): Exp = {
+ val translated = e match {
+ case FieldAccessPredicate(loc, _) => EqCmp(loc, translatePrime(loc, null, null))()
+ case p@PredicateAccessPredicate(loc, _) =>
+ if (predAllLowFuncInfo(loc.predicateName).isDefined){
+ val (lowFName, formalArgs, duplicatedFormalArgs) = predAllLowFuncInfo(loc.predicateName).get
+ FuncApp(lowFName,
+ loc.args ++ loc.args.map(a => translatePrime(a, null, null)))(
+ p.pos, NoInfo, Bool, p.errT)
+ }else{
+ TrueLit()()
+ }
+
+ case a@And(left, right) => And(translatePredAllLowFuncBody(left),
+ translatePredAllLowFuncBody(right))(a.pos, a.info, a.errT)
+ case o@Or(left, right) => Or(translatePredAllLowFuncBody(left),
+ translatePredAllLowFuncBody(right))(o.pos, o.info, o.errT)
+ case i@Implies(left, right) => Implies(And(translateNormal(left, null, null),
+ translatePrime(left, null, null))(),
+ translatePredAllLowFuncBody(right)
+ )(i.pos, i.info, i.errT)
+ case _ => TrueLit()()
+ }
+ Simplifier.simplify(translated)
+ }
+
+ def translatePredLowFuncOnly(e: Exp, p1: Exp, p2: Exp): Exp = {
+ val translated: Exp = e match {
+ case PredicateAccessPredicate(pred, _) =>
+ predLowFuncs(pred.predicateName) match {
+ case Some(f: Function) => Implies(And(p1, p2)(),
+ FuncApp(f, pred.args ++ pred.args.map(a => translatePrime(a, p1, p2)))(e.pos, e.info, e.errT)
+ )()
+ case None => TrueLit()()
+ }
+ case a@And(left, right) => And(translatePredLowFuncOnly(left, p1, p2),
+ translatePredLowFuncOnly(right, p1, p2))(a.pos, a.info, a.errT)
+ case o@Or(left, right) => Or(translatePredLowFuncOnly(left, p1, p2),
+ translatePredLowFuncOnly(right, p1, p2))(o.pos, o.info, o.errT)
+ case i@Implies(left, right) => Implies(And(translateNormal(left, null, null),
+ translatePrime(left, null, null))(),
+ translatePredLowFuncOnly(right, p1, p2)
+ )(i.pos, i.info, i.errT)
+ case _ => TrueLit()()
+ }
+ Simplifier.simplify(translated)
+ }
+
+ def translateResourceAccess(ra: ResourceAccess): ResourceAccess = {
+ ra match {
+ case FieldAccess(rcv, field) => {
+ val primedName = primedNames.getOrElse(field.name, field.name)
+ val newField = newFields.find(f => f.name == primedName).getOrElse(field)
+ FieldAccess(rcv, newField)(ra.pos, ra.info, ra.errT)
+ }
+ case PredicateAccess(args, name) => {
+ val primedName = primedNames.getOrElse(name, name)
+ PredicateAccess(args, primedName)(ra.pos, ra.info, ra.errT)
+ }
+ case _ => sys.error("Unsupported")
+ }
+ }
+
+ def getPredicateLowFunction(predName: String, m: Method): Option[Function] = {
+ if (allLowMethods.contains(m.name) || preservesLowMethods.contains(m.name))
+ predAllLowFuncs(predName)
+ else
+ predLowFuncs(predName)
+ }
+
+ def getPredicateLowFuncExp(predName: String, ctx: TranslationContext): (Option[Function], Exp) = {
+ val lowFunc = getPredicateLowFunction(predName, ctx.currentMethod)
+ lazy val act1: Exp = ctx.ctrlVars.activeExecNormal(Some(ctx.p1))
+ lazy val act2: Exp = ctx.ctrlVars.activeExecPrime(Some(ctx.p2))
+ lazy val isInPreservesLow: Boolean = preservesLowMethods.contains(ctx.currentMethod.name)
+ lowFunc match {
+ case Some(f) =>
+ var lhs = And(act1, act2)()
+ if (isInPreservesLow) {
+ val allStateLow = translateSIFAss(allVarsAndStateLow(ctx.currentMethod, ctx.currentMethod.formalArgs,
+ old = !ctx.translatingPrecond, predicateSrc = ctx.currentMethod.pres), ctx)
+ lhs = And(lhs, allStateLow)()
+ }
+ (Some(f), lhs)
+ case None => (None, TrueLit()())
+ }
+ }
+
+ def simplifyConditions(in: Seq[Exp]): Seq[Exp] = {
+ val simplified = in.map(e => e.transform{
+ case x: Exp if x.isPure => Simplifier.simplify(x)
+ })
+ simplified.filter(e => !e.isInstanceOf[TrueLit])
+ }
+
+ def flattenSeqn(in: Seqn): Seqn = {
+ var newDecls: Seq[Declaration] = in.scopedDecls
+ val newSS: Seq[Stmt] = in.ss.flatMap({
+ case s: Seqn =>
+ val innerFlat = flattenSeqn(s)
+ newDecls ++= innerFlat.scopedDecls
+ innerFlat.ss
+ case x: Stmt => Seq(x)
+ })
+ Seqn(newSS, newDecls)(in.pos, in.info, in.errT)
+ }
+
+ case class TranslationContext(p1: Exp, p2: Exp,
+ ctrlVars: MethodControlFlowVars,
+ currentMethod: Method,
+ translatingPrecond: Boolean = false
+ ) {}
+
+ class MethodControlFlowVars(hasRet: Boolean, hasBreak: Boolean, hasCont: Boolean, hasExcept: Boolean, labels: Set[Label]) {
+ var ret1d, ret2d, break1d, break2d, cont1d, cont2d, except1d, except2d: Option[LocalVarDecl] = None
+ var ret1r, ret2r, break1r, break2r, cont1r, cont2r, except1r, except2r: Option[LocalVar] = None
+ val labelRefs1 : ListBuffer[LocalVar] = new ListBuffer[LocalVar]()
+ val labelDecls1 : ListBuffer[LocalVarDecl] = new ListBuffer[LocalVarDecl]()
+ val labelRefs2 : ListBuffer[LocalVar] = new ListBuffer[LocalVar]()
+ val labelDecls2 : ListBuffer[LocalVarDecl] = new ListBuffer[LocalVarDecl]()
+ val labelNames : mutable.HashMap[String, String] = new mutable.HashMap[String, String]()
+
+ if (hasRet) {val t = getNewBool("ret1"); ret1d = Some(t._1); ret1r = Some(t._2)}
+ if (hasRet) {val t = getNewBool("ret2"); ret2d = Some(t._1); ret2r = Some(t._2)}
+ if (hasBreak) {val t = getNewBool("break1"); break1d = Some(t._1); break1r = Some(t._2)}
+ if (hasBreak) {val t = getNewBool("break2"); break2d = Some(t._1); break2r = Some(t._2)}
+ if (hasCont) {val t = getNewBool("cont1"); cont1d = Some(t._1); cont1r = Some(t._2)}
+ if (hasCont) {val t = getNewBool("cont2"); cont2d = Some(t._1); cont2r = Some(t._2)}
+ if (hasExcept) {val t = getNewBool("except1"); except1d = Some(t._1); except1r = Some(t._2)}
+ if (hasExcept) {val t = getNewBool("except2"); except2d = Some(t._1); except2r = Some(t._2)}
+ if (hasRet) primedNames.update(ret1r.get.name, ret2r.get.name)
+ if (hasBreak) primedNames.update(break1r.get.name, break2r.get.name)
+ if (hasCont) primedNames.update(cont1r.get.name, cont2r.get.name)
+ if (hasExcept) primedNames.update(except1r.get.name, except2r.get.name)
+ for (label <- labels){
+ val t1 = getNewBool(label.name + "1")
+ labelRefs1.append(t1._2)
+ labelDecls1.append(t1._1)
+ labelNames.update(label.name, t1._2.name)
+ val t2 = getNewBool(label.name + "2")
+ labelRefs2.append(t2._2)
+ labelDecls2.append(t2._1)
+ primedNames.update(t1._2.name, t2._2.name)
+ }
+
+ def declarations(): Seq[LocalVarDecl] = {
+ Seq(ret1d, ret2d, break1d, break2d, cont1d, cont2d, except1d, except2d)
+ .filter(v => v.isDefined)
+ .map(v => v.get) ++ labelDecls1 ++ labelDecls2
+ }
+
+ def initAssigns(): Seq[Stmt] = {
+ (Seq(ret1r, ret2r, break1r, break2r, cont1r, cont2r, except1r, except2r)
+ .filter(v => v.isDefined)
+ .map(v => LocalVarAssign(v.get, FalseLit()())())) ++
+ (labelRefs1 ++ labelRefs2).map(v => LocalVarAssign(v, FalseLit()())())
+ }
+
+ private def conjoinVars(s: Seq[Exp]): Option[Exp] = {
+ val negations: Seq[Exp] = s.map(x => Not(x)())
+ if (negations.nonEmpty)
+ Some(negations.reduceRight[Exp]((x, y) => And(x, y)()))
+ else
+ None
+ }
+
+ private def activeExecHelper(p: Option[Exp], s: Seq[Exp]): Exp = {
+ val controls: Option[Exp] = conjoinVars(s)
+ val expressions: Seq[Exp] = Seq(p, controls).collect({case Some(x) => x})
+ expressions match {
+ case Nil => TrueLit()()
+ case Seq(head) => head
+ case _ => expressions.reduceRight[Exp]((x, y) => And(x, y)())
+ }
+ }
+
+ def removeOptions(s: Seq[Option[Exp]]) : Seq[Exp] = {
+ s.filter(v => v.isDefined).map(v => v.get)
+ }
+
+ def activeExecNormalExceptLabel(p1: Option[Exp], labelName: String): Exp = {
+ activeExecHelper(p1, removeOptions(Seq(ret1r, break1r, cont1r, except1r)) ++ labelRefs1.filter(v => !v.name.equals(labelName)))
+ }
+
+ def activeExecPrimeExceptLabel(p2: Option[Exp], labelNamePrime: String): Exp = {
+ activeExecHelper(p2, removeOptions(Seq(ret2r, break2r, cont2r, except2r)) ++ labelRefs2.filter(v => !v.name.equals(labelNamePrime)))
+ }
+
+ def activeExecNormal(p1: Option[Exp]): Exp = {
+ activeExecHelper(p1, removeOptions(Seq(ret1r, break1r, cont1r, except1r)) ++ labelRefs1)
+ }
+ def activeExecPrime(p2: Option[Exp]): Exp = {
+ activeExecHelper(p2, removeOptions(Seq(ret2r, break2r, cont2r, except2r)) ++ labelRefs2)
+ }
+
+ def activeExecNoContNormal(p1: Option[Exp]): Exp = {
+ activeExecHelper(p1, removeOptions(Seq(ret1r, break1r, except1r)) ++ labelRefs1)
+ }
+ def activeExecNoContPrime(p2: Option[Exp]): Exp = {
+ activeExecHelper(p2, removeOptions(Seq(ret2r, break2r, except2r)) ++ labelRefs2)
+ }
+ }
+
+ object EmptyControlFlowVars {
+ def apply(): MethodControlFlowVars = {
+ new MethodControlFlowVars(false, false, false, false, Set())
+ }
+ }
+}
+
+object SIFExtendedTransformer extends SIFExtendedTransformer
+
+class SIFTransformer extends ViperTransformer {
+ override def transform(task: BackendVerifier.Task): Either[Seq[AbstractError], BackendVerifier.Task] = {
+ Right(BackendVerifier.Task(SIFExtendedTransformer.transform(task.program, false), task.backtrack))
+ }
+}
diff --git a/src/test/resources/regressions/examples/swap.gobra b/src/test/resources/regressions/examples/swap.gobra
index 1e9298f73..03209ca68 100644
--- a/src/test/resources/regressions/examples/swap.gobra
+++ b/src/test/resources/regressions/examples/swap.gobra
@@ -7,21 +7,15 @@ type cell struct{
val int;
};
-requires acc(&x.val) && acc(&y.val);
-requires x.val == a && y.val == b;
-ensures acc(&x.val) && acc(&y.val);
-ensures x.val == b && y.val == a;
-func swap1(x, y *cell, ghost a, b int) {
- x.val, y.val = y.val, x.val;
-};
-
-
-requires acc(&x.val) && acc(&y.val);
-ensures acc(&x.val) && acc(&y.val);
-ensures x.val == old(y.val) && y.val == old(x.val);
-func swap2(x, y *cell) {
- x.val, y.val = y.val, x.val;
-};
+requires low(x) && low(y)
+ensures low(z)
+func foo(x, y int) (z int) {
+ if x < y {
+ z = 3
+ } else {
+ z = 4
+ }
+}
requires acc(&self.val) && acc(&other.val);
ensures acc(&self.val) && acc(&other.val);
@@ -35,17 +29,8 @@ func client() {
x@ := cell{42};
y@ := cell{17};
- swap1(&x, &y, 42, 17);
- assert x == cell{17} && y.val == 42;
-
- swap2(&x, &y);
- assert x == cell{42} && y == cell{17};
-
(&x).swap3(&y);
assert x == cell{17} && y == cell{42};
-
- //:: ExpectedOutput(assert_error:assertion_error)
- assert false;
};