From 88585337defcb2df5a783eef995b22d138d48481 Mon Sep 17 00:00:00 2001 From: Mariano Aguero Date: Tue, 27 Nov 2018 14:31:54 -0300 Subject: [PATCH 01/27] Add version from package --- solhint.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/solhint.js b/solhint.js index f4dd64b6..8b86482b 100755 --- a/solhint.js +++ b/solhint.js @@ -5,9 +5,11 @@ const _ = require('lodash') const fs = require('fs') const process = require('process') const linter = require('./lib/index') +const packageJson = require('./package.json') function init() { - program.version('1.1.10') + const version = packageJson.version || '1.1.10' + program.version(version) program .usage('[options] [...other_files]') From fb50546b70ac9624ff4fb21b1defa66cbf6a74c5 Mon Sep 17 00:00:00 2001 From: Mariano Aguero Date: Tue, 27 Nov 2018 14:57:36 -0300 Subject: [PATCH 02/27] Add file to manage internal errors --- lib/common/errors.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 lib/common/errors.js diff --git a/lib/common/errors.js b/lib/common/errors.js new file mode 100644 index 00000000..9c86ac15 --- /dev/null +++ b/lib/common/errors.js @@ -0,0 +1,15 @@ +class FileNotExistsError extends Error { + constructor(message, status) { + super(message) + + this.name = this.constructor.name + + Error.captureStackTrace(this, this.constructor) + + this.status = status || 500 + } +} + +module.exports = { + FileNotExistsError +} From d099cbc83a9960761d0e64ba77e94ed3844c4757 Mon Sep 17 00:00:00 2001 From: Mariano Aguero Date: Tue, 27 Nov 2018 14:58:30 -0300 Subject: [PATCH 03/27] Add config-path option --- solhint.js | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/solhint.js b/solhint.js index 8b86482b..9fe6d777 100755 --- a/solhint.js +++ b/solhint.js @@ -6,6 +6,7 @@ const fs = require('fs') const process = require('process') const linter = require('./lib/index') const packageJson = require('./package.json') +const { FileNotExistsError } = require('./lib/common/errors') function init() { const version = packageJson.version || '1.1.10' @@ -18,6 +19,7 @@ function init() { '-w, --max-warnings [maxWarningsNumber]', 'number of warnings to trigger nonzero exit code' ) + .option('-c, --config-path [file_name]', 'file to use as your .solhint.json') .option('-q, --quiet', 'report errors only - default: false') .option('--ignore-path [file_name]', 'file to use as your .solhintignore') .description('Linter for Solidity programming language') @@ -130,13 +132,30 @@ const readConfig = _.memoize(() => { let config = {} try { - const configStr = fs.readFileSync('.solhint.json').toString() + let configStr + + if (program.configPath && !fs.existsSync(program.configPath)) { + throw new FileNotExistsError('The config file doesnt exist') + } + + if (program.configPath && fs.existsSync(program.configPath)) { + configStr = fs.readFileSync(program.configPath).toString() + } + + if (!program.configPath) { + configStr = fs.readFileSync('.solhint.json').toString() + } + config = JSON.parse(configStr) } catch (e) { if (e instanceof SyntaxError) { console.log('ERROR: Configuration file [.solhint.json] is not a valid JSON!\n') process.exit(0) } + if (e instanceof FileNotExistsError) { + console.log('ERROR: Configuration file [' + program.configPath + '] doesnt exist!\n') + process.exit(0) + } } const configExcludeFiles = _.flatten(config.excludedFiles) From 5332bf691df86ad2bf9883cba408f4ff3429a8cf Mon Sep 17 00:00:00 2001 From: Mariano Aguero Date: Tue, 27 Nov 2018 18:19:09 -0300 Subject: [PATCH 04/27] Change config-path to config, Fix typo, Remove fallback version, Refactor errors file, Exit process with error code --- lib/common/errors.js | 9 ++------- solhint.js | 22 ++++++++-------------- 2 files changed, 10 insertions(+), 21 deletions(-) diff --git a/lib/common/errors.js b/lib/common/errors.js index 9c86ac15..01b4221a 100644 --- a/lib/common/errors.js +++ b/lib/common/errors.js @@ -1,12 +1,7 @@ class FileNotExistsError extends Error { - constructor(message, status) { + constructor(data) { + const { message } = data super(message) - - this.name = this.constructor.name - - Error.captureStackTrace(this, this.constructor) - - this.status = status || 500 } } diff --git a/solhint.js b/solhint.js index 9fe6d777..0c5dc119 100755 --- a/solhint.js +++ b/solhint.js @@ -9,7 +9,7 @@ const packageJson = require('./package.json') const { FileNotExistsError } = require('./lib/common/errors') function init() { - const version = packageJson.version || '1.1.10' + const version = packageJson.version program.version(version) program @@ -19,7 +19,7 @@ function init() { '-w, --max-warnings [maxWarningsNumber]', 'number of warnings to trigger nonzero exit code' ) - .option('-c, --config-path [file_name]', 'file to use as your .solhint.json') + .option('-c, --config [file_name]', 'file to use as your .solhint.json') .option('-q, --quiet', 'report errors only - default: false') .option('--ignore-path [file_name]', 'file to use as your .solhintignore') .description('Linter for Solidity programming language') @@ -132,29 +132,23 @@ const readConfig = _.memoize(() => { let config = {} try { - let configStr + const configFile = program.config || '.solhint.json' - if (program.configPath && !fs.existsSync(program.configPath)) { + if (!fs.existsSync(configFile)) { throw new FileNotExistsError('The config file doesnt exist') } - if (program.configPath && fs.existsSync(program.configPath)) { - configStr = fs.readFileSync(program.configPath).toString() - } - - if (!program.configPath) { - configStr = fs.readFileSync('.solhint.json').toString() - } + const configStr = fs.readFileSync(configFile).toString() config = JSON.parse(configStr) } catch (e) { if (e instanceof SyntaxError) { console.log('ERROR: Configuration file [.solhint.json] is not a valid JSON!\n') - process.exit(0) + process.exit(1) } if (e instanceof FileNotExistsError) { - console.log('ERROR: Configuration file [' + program.configPath + '] doesnt exist!\n') - process.exit(0) + console.log(`ERROR: Configuration file [${program.config}] doesn't exist!\n`) + process.exit(1) } } From 5ca23abf91f410be2ce8f2130ca4fd169ca8f282 Mon Sep 17 00:00:00 2001 From: Mariano Aguero Date: Thu, 29 Nov 2018 08:41:05 -0300 Subject: [PATCH 05/27] Update to one process exit --- solhint.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/solhint.js b/solhint.js index 0c5dc119..4d170f52 100755 --- a/solhint.js +++ b/solhint.js @@ -144,12 +144,11 @@ const readConfig = _.memoize(() => { } catch (e) { if (e instanceof SyntaxError) { console.log('ERROR: Configuration file [.solhint.json] is not a valid JSON!\n') - process.exit(1) } if (e instanceof FileNotExistsError) { console.log(`ERROR: Configuration file [${program.config}] doesn't exist!\n`) - process.exit(1) } + process.exit(1) } const configExcludeFiles = _.flatten(config.excludedFiles) From ea5307bdc9aaf9b3a9c543c218a77a6a31a277c5 Mon Sep 17 00:00:00 2001 From: Pablo Fullana Date: Mon, 3 Dec 2018 09:34:17 -0300 Subject: [PATCH 06/27] Upgrade grammar (#79) * Update solidity-antlr4 submodule * Fix build grammar script * Update grammar --- lib/grammar/Solidity.tokens | 32 +- lib/grammar/SolidityLexer.js | 1547 +++++++++++------------ lib/grammar/SolidityLexer.tokens | 32 +- lib/grammar/SolidityListener.js | 2 +- lib/grammar/SolidityParser.js | 2024 +++++++++++++++--------------- package.json | 2 +- scripts/build-grammar.sh | 10 +- solidity-antlr4 | 2 +- 8 files changed, 1831 insertions(+), 1820 deletions(-) diff --git a/lib/grammar/Solidity.tokens b/lib/grammar/Solidity.tokens index 0ba9b97d..9164f31b 100644 --- a/lib/grammar/Solidity.tokens +++ b/lib/grammar/Solidity.tokens @@ -150,22 +150,22 @@ LINE_COMMENT=119 'enum'=31 '['=32 ']'=33 -'.'=34 -'mapping'=35 -'=>'=36 -'memory'=37 -'storage'=38 -'calldata'=39 -'if'=40 -'else'=41 -'while'=42 -'assembly'=43 -'do'=44 -'return'=45 -'throw'=46 -'emit'=47 -'var'=48 -'address'=49 +'address'=34 +'.'=35 +'mapping'=36 +'=>'=37 +'memory'=38 +'storage'=39 +'calldata'=40 +'if'=41 +'else'=42 +'while'=43 +'assembly'=44 +'do'=45 +'return'=46 +'throw'=47 +'emit'=48 +'var'=49 'bool'=50 'string'=51 'byte'=52 diff --git a/lib/grammar/SolidityLexer.js b/lib/grammar/SolidityLexer.js index cc1e7289..f7784a4e 100644 --- a/lib/grammar/SolidityLexer.js +++ b/lib/grammar/SolidityLexer.js @@ -1,10 +1,10 @@ -// Generated from Solidity.g4 by ANTLR 4.7 +// Generated from ./Solidity.g4 by ANTLR 4.7.1 // jshint ignore: start var antlr4 = require('antlr4/index'); var serializedATN = ["\u0003\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964", - "\u0002y\u06b5\b\u0001\u0004\u0002\t\u0002\u0004\u0003\t\u0003\u0004", + "\u0002y\u06b4\b\u0001\u0004\u0002\t\u0002\u0004\u0003\t\u0003\u0004", "\u0004\t\u0004\u0004\u0005\t\u0005\u0004\u0006\t\u0006\u0004\u0007\t", "\u0007\u0004\b\t\b\u0004\t\t\t\u0004\n\t\n\u0004\u000b\t\u000b\u0004", "\f\t\f\u0004\r\t\r\u0004\u000e\t\u000e\u0004\u000f\t\u000f\u0004\u0010", @@ -50,16 +50,16 @@ var serializedATN = ["\u0003\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964", "\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e", "\u0003\u001e\u0003\u001f\u0003\u001f\u0003\u001f\u0003\u001f\u0003\u001f", "\u0003\u001f\u0003 \u0003 \u0003 \u0003 \u0003 \u0003!\u0003!\u0003", - "\"\u0003\"\u0003#\u0003#\u0003$\u0003$\u0003$\u0003$\u0003$\u0003$\u0003", - "$\u0003$\u0003%\u0003%\u0003%\u0003&\u0003&\u0003&\u0003&\u0003&\u0003", - "&\u0003&\u0003\'\u0003\'\u0003\'\u0003\'\u0003\'\u0003\'\u0003\'\u0003", - "\'\u0003(\u0003(\u0003(\u0003(\u0003(\u0003(\u0003(\u0003(\u0003(\u0003", - ")\u0003)\u0003)\u0003*\u0003*\u0003*\u0003*\u0003*\u0003+\u0003+\u0003", - "+\u0003+\u0003+\u0003+\u0003,\u0003,\u0003,\u0003,\u0003,\u0003,\u0003", - ",\u0003,\u0003,\u0003-\u0003-\u0003-\u0003.\u0003.\u0003.\u0003.\u0003", - ".\u0003.\u0003.\u0003/\u0003/\u0003/\u0003/\u0003/\u0003/\u00030\u0003", - "0\u00030\u00030\u00030\u00031\u00031\u00031\u00031\u00032\u00032\u0003", - "2\u00032\u00032\u00032\u00032\u00032\u00033\u00033\u00033\u00033\u0003", + "\"\u0003\"\u0003#\u0003#\u0003#\u0003#\u0003#\u0003#\u0003#\u0003#\u0003", + "$\u0003$\u0003%\u0003%\u0003%\u0003%\u0003%\u0003%\u0003%\u0003%\u0003", + "&\u0003&\u0003&\u0003\'\u0003\'\u0003\'\u0003\'\u0003\'\u0003\'\u0003", + "\'\u0003(\u0003(\u0003(\u0003(\u0003(\u0003(\u0003(\u0003(\u0003)\u0003", + ")\u0003)\u0003)\u0003)\u0003)\u0003)\u0003)\u0003)\u0003*\u0003*\u0003", + "*\u0003+\u0003+\u0003+\u0003+\u0003+\u0003,\u0003,\u0003,\u0003,\u0003", + ",\u0003,\u0003-\u0003-\u0003-\u0003-\u0003-\u0003-\u0003-\u0003-\u0003", + "-\u0003.\u0003.\u0003.\u0003/\u0003/\u0003/\u0003/\u0003/\u0003/\u0003", + "/\u00030\u00030\u00030\u00030\u00030\u00030\u00031\u00031\u00031\u0003", + "1\u00031\u00032\u00032\u00032\u00032\u00033\u00033\u00033\u00033\u0003", "3\u00034\u00034\u00034\u00034\u00034\u00034\u00034\u00035\u00035\u0003", "5\u00035\u00035\u00036\u00036\u00036\u00037\u00037\u00037\u00038\u0003", "8\u00038\u00038\u00039\u00039\u0003:\u0003:\u0003;\u0003;\u0003;\u0003", @@ -150,15 +150,15 @@ var serializedATN = ["\u0003\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964", "\nc\rc\u000ec\u0542\u0003c\u0007c\u0546\nc\fc\u000ec\u0549\u000bc\u0003", "c\u0003c\u0006c\u054d\nc\rc\u000ec\u054e\u0005c\u0551\nc\u0003c\u0003", "c\u0006c\u0555\nc\rc\u000ec\u0556\u0005c\u0559\nc\u0003d\u0003d\u0003", - "d\u0003d\u0006d\u055f\nd\rd\u000ed\u0560\u0003e\u0003e\u0003e\u0003", + "d\u0006d\u055e\nd\rd\u000ed\u055f\u0003e\u0003e\u0003e\u0003e\u0003", "e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003", "e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003", "e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003", "e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003", - "e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0005e\u0597", - "\ne\u0003f\u0003f\u0003f\u0003f\u0003f\u0003f\u0007f\u059f\nf\ff\u000e", - "f\u05a2\u000bf\u0003f\u0003f\u0003f\u0007f\u05a7\nf\ff\u000ef\u05aa", - "\u000bf\u0003f\u0005f\u05ad\nf\u0003g\u0003g\u0003g\u0003h\u0003h\u0003", + "e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0005e\u0596\ne\u0003", + "f\u0003f\u0003f\u0003f\u0003f\u0003f\u0007f\u059e\nf\ff\u000ef\u05a1", + "\u000bf\u0003f\u0003f\u0003f\u0007f\u05a6\nf\ff\u000ef\u05a9\u000bf", + "\u0003f\u0005f\u05ac\nf\u0003g\u0003g\u0003g\u0003h\u0003h\u0003i\u0003", "i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003", "i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003", "i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003", @@ -168,553 +168,553 @@ var serializedATN = ["\u0003\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964", "i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003", "i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003", "i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003", - "i\u0003i\u0005i\u0610\ni\u0003j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003", - "j\u0003j\u0003j\u0003j\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003", - "l\u0003l\u0003l\u0003l\u0003l\u0003l\u0003l\u0003l\u0003l\u0003m\u0003", - "m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003n\u0003n\u0003", - "n\u0003n\u0003n\u0003n\u0003n\u0003n\u0003n\u0003o\u0003o\u0003o\u0003", - "o\u0003o\u0003o\u0003o\u0003o\u0003p\u0003p\u0003p\u0003p\u0003p\u0003", - "p\u0003p\u0003p\u0003p\u0003q\u0003q\u0003q\u0003q\u0003q\u0003q\u0003", - "q\u0003q\u0003r\u0003r\u0003r\u0003r\u0003r\u0003r\u0003r\u0003r\u0003", - "s\u0003s\u0003s\u0003s\u0003s\u0003s\u0003s\u0003t\u0003t\u0003t\u0003", - "t\u0003t\u0003u\u0003u\u0003u\u0003u\u0003u\u0003v\u0003v\u0007v\u0671", - "\nv\fv\u000ev\u0674\u000bv\u0003w\u0003w\u0003x\u0003x\u0003y\u0003", - "y\u0007y\u067c\ny\fy\u000ey\u067f\u000by\u0003y\u0003y\u0003y\u0007", - "y\u0684\ny\fy\u000ey\u0687\u000by\u0003y\u0005y\u068a\ny\u0003z\u0003", - "z\u0003z\u0005z\u068f\nz\u0003{\u0003{\u0003{\u0005{\u0694\n{\u0003", - "|\u0006|\u0697\n|\r|\u000e|\u0698\u0003|\u0003|\u0003}\u0003}\u0003", - "}\u0003}\u0007}\u06a1\n}\f}\u000e}\u06a4\u000b}\u0003}\u0003}\u0003", - "}\u0003}\u0003}\u0003~\u0003~\u0003~\u0003~\u0007~\u06af\n~\f~\u000e", - "~\u06b2\u000b~\u0003~\u0003~\u0003\u06a2\u0002\u007f\u0003\u0003\u0005", - "\u0004\u0007\u0005\t\u0006\u000b\u0007\r\b\u000f\t\u0011\n\u0013\u000b", - "\u0015\f\u0017\r\u0019\u000e\u001b\u000f\u001d\u0010\u001f\u0011!\u0012", - "#\u0013%\u0014\'\u0015)\u0016+\u0017-\u0018/\u00191\u001a3\u001b5\u001c", - "7\u001d9\u001e;\u001f= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]0_1a2c3e4g5", - "i6k7m8o9q:s;u{?}@\u007fA\u0081B\u0083C\u0085D\u0087E\u0089F\u008b", - "G\u008dH\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009bO\u009dP\u009f", - "Q\u00a1R\u00a3S\u00a5T\u00a7U\u00a9V\u00abW\u00adX\u00afY\u00b1Z\u00b3", - "[\u00b5\\\u00b7]\u00b9^\u00bb_\u00bd`\u00bfa\u00c1b\u00c3c\u00c5d\u00c7", - "e\u00c9f\u00cbg\u00cd\u0002\u00cf\u0002\u00d1h\u00d3i\u00d5j\u00d7k", - "\u00d9l\u00dbm\u00ddn\u00dfo\u00e1p\u00e3q\u00e5r\u00e7s\u00e9t\u00eb", - "u\u00ed\u0002\u00ef\u0002\u00f1v\u00f3\u0002\u00f5\u0002\u00f7w\u00f9", - "x\u00fby\u0003\u0002\u000b\u0003\u00022;\u0004\u0002GGgg\u0005\u0002", - "2;CHch\u0006\u0002&&C\\aac|\u0007\u0002&&2;C\\aac|\u0006\u0002\f\f\u000f", - "\u000f$$^^\u0006\u0002\f\f\u000f\u000f))^^\u0005\u0002\u000b\f\u000e", - "\u000f\"\"\u0004\u0002\f\f\u000f\u000f\u0002\u0745\u0002\u0003\u0003", - "\u0002\u0002\u0002\u0002\u0005\u0003\u0002\u0002\u0002\u0002\u0007\u0003", - "\u0002\u0002\u0002\u0002\t\u0003\u0002\u0002\u0002\u0002\u000b\u0003", - "\u0002\u0002\u0002\u0002\r\u0003\u0002\u0002\u0002\u0002\u000f\u0003", - "\u0002\u0002\u0002\u0002\u0011\u0003\u0002\u0002\u0002\u0002\u0013\u0003", - "\u0002\u0002\u0002\u0002\u0015\u0003\u0002\u0002\u0002\u0002\u0017\u0003", - "\u0002\u0002\u0002\u0002\u0019\u0003\u0002\u0002\u0002\u0002\u001b\u0003", - "\u0002\u0002\u0002\u0002\u001d\u0003\u0002\u0002\u0002\u0002\u001f\u0003", - "\u0002\u0002\u0002\u0002!\u0003\u0002\u0002\u0002\u0002#\u0003\u0002", - "\u0002\u0002\u0002%\u0003\u0002\u0002\u0002\u0002\'\u0003\u0002\u0002", - "\u0002\u0002)\u0003\u0002\u0002\u0002\u0002+\u0003\u0002\u0002\u0002", - "\u0002-\u0003\u0002\u0002\u0002\u0002/\u0003\u0002\u0002\u0002\u0002", - "1\u0003\u0002\u0002\u0002\u00023\u0003\u0002\u0002\u0002\u00025\u0003", - "\u0002\u0002\u0002\u00027\u0003\u0002\u0002\u0002\u00029\u0003\u0002", - "\u0002\u0002\u0002;\u0003\u0002\u0002\u0002\u0002=\u0003\u0002\u0002", - "\u0002\u0002?\u0003\u0002\u0002\u0002\u0002A\u0003\u0002\u0002\u0002", - "\u0002C\u0003\u0002\u0002\u0002\u0002E\u0003\u0002\u0002\u0002\u0002", - "G\u0003\u0002\u0002\u0002\u0002I\u0003\u0002\u0002\u0002\u0002K\u0003", - "\u0002\u0002\u0002\u0002M\u0003\u0002\u0002\u0002\u0002O\u0003\u0002", - "\u0002\u0002\u0002Q\u0003\u0002\u0002\u0002\u0002S\u0003\u0002\u0002", - "\u0002\u0002U\u0003\u0002\u0002\u0002\u0002W\u0003\u0002\u0002\u0002", - "\u0002Y\u0003\u0002\u0002\u0002\u0002[\u0003\u0002\u0002\u0002\u0002", - "]\u0003\u0002\u0002\u0002\u0002_\u0003\u0002\u0002\u0002\u0002a\u0003", - "\u0002\u0002\u0002\u0002c\u0003\u0002\u0002\u0002\u0002e\u0003\u0002", - "\u0002\u0002\u0002g\u0003\u0002\u0002\u0002\u0002i\u0003\u0002\u0002", - "\u0002\u0002k\u0003\u0002\u0002\u0002\u0002m\u0003\u0002\u0002\u0002", - "\u0002o\u0003\u0002\u0002\u0002\u0002q\u0003\u0002\u0002\u0002\u0002", - "s\u0003\u0002\u0002\u0002\u0002u\u0003\u0002\u0002\u0002\u0002w\u0003", - "\u0002\u0002\u0002\u0002y\u0003\u0002\u0002\u0002\u0002{\u0003\u0002", - "\u0002\u0002\u0002}\u0003\u0002\u0002\u0002\u0002\u007f\u0003\u0002", - "\u0002\u0002\u0002\u0081\u0003\u0002\u0002\u0002\u0002\u0083\u0003\u0002", - "\u0002\u0002\u0002\u0085\u0003\u0002\u0002\u0002\u0002\u0087\u0003\u0002", - "\u0002\u0002\u0002\u0089\u0003\u0002\u0002\u0002\u0002\u008b\u0003\u0002", - "\u0002\u0002\u0002\u008d\u0003\u0002\u0002\u0002\u0002\u008f\u0003\u0002", - "\u0002\u0002\u0002\u0091\u0003\u0002\u0002\u0002\u0002\u0093\u0003\u0002", - "\u0002\u0002\u0002\u0095\u0003\u0002\u0002\u0002\u0002\u0097\u0003\u0002", - "\u0002\u0002\u0002\u0099\u0003\u0002\u0002\u0002\u0002\u009b\u0003\u0002", - "\u0002\u0002\u0002\u009d\u0003\u0002\u0002\u0002\u0002\u009f\u0003\u0002", - "\u0002\u0002\u0002\u00a1\u0003\u0002\u0002\u0002\u0002\u00a3\u0003\u0002", - "\u0002\u0002\u0002\u00a5\u0003\u0002\u0002\u0002\u0002\u00a7\u0003\u0002", - "\u0002\u0002\u0002\u00a9\u0003\u0002\u0002\u0002\u0002\u00ab\u0003\u0002", - "\u0002\u0002\u0002\u00ad\u0003\u0002\u0002\u0002\u0002\u00af\u0003\u0002", - "\u0002\u0002\u0002\u00b1\u0003\u0002\u0002\u0002\u0002\u00b3\u0003\u0002", - "\u0002\u0002\u0002\u00b5\u0003\u0002\u0002\u0002\u0002\u00b7\u0003\u0002", - "\u0002\u0002\u0002\u00b9\u0003\u0002\u0002\u0002\u0002\u00bb\u0003\u0002", - "\u0002\u0002\u0002\u00bd\u0003\u0002\u0002\u0002\u0002\u00bf\u0003\u0002", - "\u0002\u0002\u0002\u00c1\u0003\u0002\u0002\u0002\u0002\u00c3\u0003\u0002", - "\u0002\u0002\u0002\u00c5\u0003\u0002\u0002\u0002\u0002\u00c7\u0003\u0002", - "\u0002\u0002\u0002\u00c9\u0003\u0002\u0002\u0002\u0002\u00cb\u0003\u0002", - "\u0002\u0002\u0002\u00d1\u0003\u0002\u0002\u0002\u0002\u00d3\u0003\u0002", - "\u0002\u0002\u0002\u00d5\u0003\u0002\u0002\u0002\u0002\u00d7\u0003\u0002", - "\u0002\u0002\u0002\u00d9\u0003\u0002\u0002\u0002\u0002\u00db\u0003\u0002", - "\u0002\u0002\u0002\u00dd\u0003\u0002\u0002\u0002\u0002\u00df\u0003\u0002", - "\u0002\u0002\u0002\u00e1\u0003\u0002\u0002\u0002\u0002\u00e3\u0003\u0002", - "\u0002\u0002\u0002\u00e5\u0003\u0002\u0002\u0002\u0002\u00e7\u0003\u0002", - "\u0002\u0002\u0002\u00e9\u0003\u0002\u0002\u0002\u0002\u00eb\u0003\u0002", - "\u0002\u0002\u0002\u00f1\u0003\u0002\u0002\u0002\u0002\u00f7\u0003\u0002", - "\u0002\u0002\u0002\u00f9\u0003\u0002\u0002\u0002\u0002\u00fb\u0003\u0002", - "\u0002\u0002\u0003\u00fd\u0003\u0002\u0002\u0002\u0005\u0104\u0003\u0002", - "\u0002\u0002\u0007\u0106\u0003\u0002\u0002\u0002\t\u0108\u0003\u0002", - "\u0002\u0002\u000b\u010a\u0003\u0002\u0002\u0002\r\u010d\u0003\u0002", - "\u0002\u0002\u000f\u010f\u0003\u0002\u0002\u0002\u0011\u0111\u0003\u0002", - "\u0002\u0002\u0013\u0114\u0003\u0002\u0002\u0002\u0015\u0116\u0003\u0002", - "\u0002\u0002\u0017\u0119\u0003\u0002\u0002\u0002\u0019\u0120\u0003\u0002", - "\u0002\u0002\u001b\u0122\u0003\u0002\u0002\u0002\u001d\u0127\u0003\u0002", - "\u0002\u0002\u001f\u0129\u0003\u0002\u0002\u0002!\u012b\u0003\u0002", - "\u0002\u0002#\u012d\u0003\u0002\u0002\u0002%\u0136\u0003\u0002\u0002", - "\u0002\'\u0140\u0003\u0002\u0002\u0002)\u0148\u0003\u0002\u0002\u0002", - "+\u014b\u0003\u0002\u0002\u0002-\u014d\u0003\u0002\u0002\u0002/\u014f", - "\u0003\u0002\u0002\u00021\u0155\u0003\u0002\u0002\u00023\u0159\u0003", - "\u0002\u0002\u00025\u0160\u0003\u0002\u0002\u00027\u016c\u0003\u0002", - "\u0002\u00029\u0175\u0003\u0002\u0002\u0002;\u017e\u0003\u0002\u0002", - "\u0002=\u0186\u0003\u0002\u0002\u0002?\u018c\u0003\u0002\u0002\u0002", - "A\u0191\u0003\u0002\u0002\u0002C\u0193\u0003\u0002\u0002\u0002E\u0195", - "\u0003\u0002\u0002\u0002G\u0197\u0003\u0002\u0002\u0002I\u019f\u0003", - "\u0002\u0002\u0002K\u01a2\u0003\u0002\u0002\u0002M\u01a9\u0003\u0002", - "\u0002\u0002O\u01b1\u0003\u0002\u0002\u0002Q\u01ba\u0003\u0002\u0002", - "\u0002S\u01bd\u0003\u0002\u0002\u0002U\u01c2\u0003\u0002\u0002\u0002", - "W\u01c8\u0003\u0002\u0002\u0002Y\u01d1\u0003\u0002\u0002\u0002[\u01d4", - "\u0003\u0002\u0002\u0002]\u01db\u0003\u0002\u0002\u0002_\u01e1\u0003", - "\u0002\u0002\u0002a\u01e6\u0003\u0002\u0002\u0002c\u01ea\u0003\u0002", - "\u0002\u0002e\u01f2\u0003\u0002\u0002\u0002g\u01f7\u0003\u0002\u0002", - "\u0002i\u01fe\u0003\u0002\u0002\u0002k\u0203\u0003\u0002\u0002\u0002", - "m\u0206\u0003\u0002\u0002\u0002o\u0209\u0003\u0002\u0002\u0002q\u020d", - "\u0003\u0002\u0002\u0002s\u020f\u0003\u0002\u0002\u0002u\u0211\u0003", - "\u0002\u0002\u0002w\u0217\u0003\u0002\u0002\u0002y\u021e\u0003\u0002", - "\u0002\u0002{\u0220\u0003\u0002\u0002\u0002}\u0223\u0003\u0002\u0002", - "\u0002\u007f\u0225\u0003\u0002\u0002\u0002\u0081\u0227\u0003\u0002\u0002", - "\u0002\u0083\u022a\u0003\u0002\u0002\u0002\u0085\u022d\u0003\u0002\u0002", - "\u0002\u0087\u022f\u0003\u0002\u0002\u0002\u0089\u0231\u0003\u0002\u0002", - "\u0002\u008b\u0234\u0003\u0002\u0002\u0002\u008d\u0237\u0003\u0002\u0002", - "\u0002\u008f\u023a\u0003\u0002\u0002\u0002\u0091\u023d\u0003\u0002\u0002", - "\u0002\u0093\u023f\u0003\u0002\u0002\u0002\u0095\u0241\u0003\u0002\u0002", - "\u0002\u0097\u0244\u0003\u0002\u0002\u0002\u0099\u0247\u0003\u0002\u0002", - "\u0002\u009b\u024a\u0003\u0002\u0002\u0002\u009d\u024e\u0003\u0002\u0002", - "\u0002\u009f\u0252\u0003\u0002\u0002\u0002\u00a1\u0255\u0003\u0002\u0002", - "\u0002\u00a3\u0258\u0003\u0002\u0002\u0002\u00a5\u025b\u0003\u0002\u0002", - "\u0002\u00a7\u025e\u0003\u0002\u0002\u0002\u00a9\u0261\u0003\u0002\u0002", - "\u0002\u00ab\u0265\u0003\u0002\u0002\u0002\u00ad\u0268\u0003\u0002\u0002", - "\u0002\u00af\u026b\u0003\u0002\u0002\u0002\u00b1\u0272\u0003\u0002\u0002", - "\u0002\u00b3\u0277\u0003\u0002\u0002\u0002\u00b5\u027f\u0003\u0002\u0002", - "\u0002\u00b7\u0338\u0003\u0002\u0002\u0002\u00b9\u0411\u0003\u0002\u0002", - "\u0002\u00bb\u04ef\u0003\u0002\u0002\u0002\u00bd\u0507\u0003\u0002\u0002", - "\u0002\u00bf\u0521\u0003\u0002\u0002\u0002\u00c1\u0524\u0003\u0002\u0002", - "\u0002\u00c3\u053d\u0003\u0002\u0002\u0002\u00c5\u0550\u0003\u0002\u0002", - "\u0002\u00c7\u055a\u0003\u0002\u0002\u0002\u00c9\u0596\u0003\u0002\u0002", - "\u0002\u00cb\u0598\u0003\u0002\u0002\u0002\u00cd\u05ae\u0003\u0002\u0002", - "\u0002\u00cf\u05b1\u0003\u0002\u0002\u0002\u00d1\u060f\u0003\u0002\u0002", - "\u0002\u00d3\u0611\u0003\u0002\u0002\u0002\u00d5\u061b\u0003\u0002\u0002", - "\u0002\u00d7\u0621\u0003\u0002\u0002\u0002\u00d9\u062a\u0003\u0002\u0002", - "\u0002\u00db\u0633\u0003\u0002\u0002\u0002\u00dd\u063c\u0003\u0002\u0002", - "\u0002\u00df\u0644\u0003\u0002\u0002\u0002\u00e1\u064d\u0003\u0002\u0002", - "\u0002\u00e3\u0655\u0003\u0002\u0002\u0002\u00e5\u065d\u0003\u0002\u0002", - "\u0002\u00e7\u0664\u0003\u0002\u0002\u0002\u00e9\u0669\u0003\u0002\u0002", - "\u0002\u00eb\u066e\u0003\u0002\u0002\u0002\u00ed\u0675\u0003\u0002\u0002", - "\u0002\u00ef\u0677\u0003\u0002\u0002\u0002\u00f1\u0689\u0003\u0002\u0002", - "\u0002\u00f3\u068e\u0003\u0002\u0002\u0002\u00f5\u0693\u0003\u0002\u0002", - "\u0002\u00f7\u0696\u0003\u0002\u0002\u0002\u00f9\u069c\u0003\u0002\u0002", - "\u0002\u00fb\u06aa\u0003\u0002\u0002\u0002\u00fd\u00fe\u0007r\u0002", - "\u0002\u00fe\u00ff\u0007t\u0002\u0002\u00ff\u0100\u0007c\u0002\u0002", - "\u0100\u0101\u0007i\u0002\u0002\u0101\u0102\u0007o\u0002\u0002\u0102", - "\u0103\u0007c\u0002\u0002\u0103\u0004\u0003\u0002\u0002\u0002\u0104", - "\u0105\u0007=\u0002\u0002\u0105\u0006\u0003\u0002\u0002\u0002\u0106", - "\u0107\u0007`\u0002\u0002\u0107\b\u0003\u0002\u0002\u0002\u0108\u0109", - "\u0007\u0080\u0002\u0002\u0109\n\u0003\u0002\u0002\u0002\u010a\u010b", - "\u0007@\u0002\u0002\u010b\u010c\u0007?\u0002\u0002\u010c\f\u0003\u0002", - "\u0002\u0002\u010d\u010e\u0007@\u0002\u0002\u010e\u000e\u0003\u0002", - "\u0002\u0002\u010f\u0110\u0007>\u0002\u0002\u0110\u0010\u0003\u0002", - "\u0002\u0002\u0111\u0112\u0007>\u0002\u0002\u0112\u0113\u0007?\u0002", - "\u0002\u0113\u0012\u0003\u0002\u0002\u0002\u0114\u0115\u0007?\u0002", - "\u0002\u0115\u0014\u0003\u0002\u0002\u0002\u0116\u0117\u0007c\u0002", - "\u0002\u0117\u0118\u0007u\u0002\u0002\u0118\u0016\u0003\u0002\u0002", - "\u0002\u0119\u011a\u0007k\u0002\u0002\u011a\u011b\u0007o\u0002\u0002", - "\u011b\u011c\u0007r\u0002\u0002\u011c\u011d\u0007q\u0002\u0002\u011d", - "\u011e\u0007t\u0002\u0002\u011e\u011f\u0007v\u0002\u0002\u011f\u0018", - "\u0003\u0002\u0002\u0002\u0120\u0121\u0007,\u0002\u0002\u0121\u001a", - "\u0003\u0002\u0002\u0002\u0122\u0123\u0007h\u0002\u0002\u0123\u0124", - "\u0007t\u0002\u0002\u0124\u0125\u0007q\u0002\u0002\u0125\u0126\u0007", - "o\u0002\u0002\u0126\u001c\u0003\u0002\u0002\u0002\u0127\u0128\u0007", - "}\u0002\u0002\u0128\u001e\u0003\u0002\u0002\u0002\u0129\u012a\u0007", - ".\u0002\u0002\u012a \u0003\u0002\u0002\u0002\u012b\u012c\u0007\u007f", - "\u0002\u0002\u012c\"\u0003\u0002\u0002\u0002\u012d\u012e\u0007e\u0002", - "\u0002\u012e\u012f\u0007q\u0002\u0002\u012f\u0130\u0007p\u0002\u0002", - "\u0130\u0131\u0007v\u0002\u0002\u0131\u0132\u0007t\u0002\u0002\u0132", - "\u0133\u0007c\u0002\u0002\u0133\u0134\u0007e\u0002\u0002\u0134\u0135", - "\u0007v\u0002\u0002\u0135$\u0003\u0002\u0002\u0002\u0136\u0137\u0007", - "k\u0002\u0002\u0137\u0138\u0007p\u0002\u0002\u0138\u0139\u0007v\u0002", - "\u0002\u0139\u013a\u0007g\u0002\u0002\u013a\u013b\u0007t\u0002\u0002", - "\u013b\u013c\u0007h\u0002\u0002\u013c\u013d\u0007c\u0002\u0002\u013d", - "\u013e\u0007e\u0002\u0002\u013e\u013f\u0007g\u0002\u0002\u013f&\u0003", - "\u0002\u0002\u0002\u0140\u0141\u0007n\u0002\u0002\u0141\u0142\u0007", - "k\u0002\u0002\u0142\u0143\u0007d\u0002\u0002\u0143\u0144\u0007t\u0002", - "\u0002\u0144\u0145\u0007c\u0002\u0002\u0145\u0146\u0007t\u0002\u0002", - "\u0146\u0147\u0007{\u0002\u0002\u0147(\u0003\u0002\u0002\u0002\u0148", - "\u0149\u0007k\u0002\u0002\u0149\u014a\u0007u\u0002\u0002\u014a*\u0003", - "\u0002\u0002\u0002\u014b\u014c\u0007*\u0002\u0002\u014c,\u0003\u0002", - "\u0002\u0002\u014d\u014e\u0007+\u0002\u0002\u014e.\u0003\u0002\u0002", - "\u0002\u014f\u0150\u0007w\u0002\u0002\u0150\u0151\u0007u\u0002\u0002", - "\u0151\u0152\u0007k\u0002\u0002\u0152\u0153\u0007p\u0002\u0002\u0153", - "\u0154\u0007i\u0002\u0002\u01540\u0003\u0002\u0002\u0002\u0155\u0156", - "\u0007h\u0002\u0002\u0156\u0157\u0007q\u0002\u0002\u0157\u0158\u0007", - "t\u0002\u0002\u01582\u0003\u0002\u0002\u0002\u0159\u015a\u0007u\u0002", - "\u0002\u015a\u015b\u0007v\u0002\u0002\u015b\u015c\u0007t\u0002\u0002", - "\u015c\u015d\u0007w\u0002\u0002\u015d\u015e\u0007e\u0002\u0002\u015e", - "\u015f\u0007v\u0002\u0002\u015f4\u0003\u0002\u0002\u0002\u0160\u0161", - "\u0007e\u0002\u0002\u0161\u0162\u0007q\u0002\u0002\u0162\u0163\u0007", - "p\u0002\u0002\u0163\u0164\u0007u\u0002\u0002\u0164\u0165\u0007v\u0002", - "\u0002\u0165\u0166\u0007t\u0002\u0002\u0166\u0167\u0007w\u0002\u0002", - "\u0167\u0168\u0007e\u0002\u0002\u0168\u0169\u0007v\u0002\u0002\u0169", - "\u016a\u0007q\u0002\u0002\u016a\u016b\u0007t\u0002\u0002\u016b6\u0003", - "\u0002\u0002\u0002\u016c\u016d\u0007o\u0002\u0002\u016d\u016e\u0007", - "q\u0002\u0002\u016e\u016f\u0007f\u0002\u0002\u016f\u0170\u0007k\u0002", - "\u0002\u0170\u0171\u0007h\u0002\u0002\u0171\u0172\u0007k\u0002\u0002", - "\u0172\u0173\u0007g\u0002\u0002\u0173\u0174\u0007t\u0002\u0002\u0174", - "8\u0003\u0002\u0002\u0002\u0175\u0176\u0007h\u0002\u0002\u0176\u0177", - "\u0007w\u0002\u0002\u0177\u0178\u0007p\u0002\u0002\u0178\u0179\u0007", - "e\u0002\u0002\u0179\u017a\u0007v\u0002\u0002\u017a\u017b\u0007k\u0002", - "\u0002\u017b\u017c\u0007q\u0002\u0002\u017c\u017d\u0007p\u0002\u0002", - "\u017d:\u0003\u0002\u0002\u0002\u017e\u017f\u0007t\u0002\u0002\u017f", - "\u0180\u0007g\u0002\u0002\u0180\u0181\u0007v\u0002\u0002\u0181\u0182", - "\u0007w\u0002\u0002\u0182\u0183\u0007t\u0002\u0002\u0183\u0184\u0007", - "p\u0002\u0002\u0184\u0185\u0007u\u0002\u0002\u0185<\u0003\u0002\u0002", - "\u0002\u0186\u0187\u0007g\u0002\u0002\u0187\u0188\u0007x\u0002\u0002", - "\u0188\u0189\u0007g\u0002\u0002\u0189\u018a\u0007p\u0002\u0002\u018a", - "\u018b\u0007v\u0002\u0002\u018b>\u0003\u0002\u0002\u0002\u018c\u018d", - "\u0007g\u0002\u0002\u018d\u018e\u0007p\u0002\u0002\u018e\u018f\u0007", - "w\u0002\u0002\u018f\u0190\u0007o\u0002\u0002\u0190@\u0003\u0002\u0002", - "\u0002\u0191\u0192\u0007]\u0002\u0002\u0192B\u0003\u0002\u0002\u0002", - "\u0193\u0194\u0007_\u0002\u0002\u0194D\u0003\u0002\u0002\u0002\u0195", - "\u0196\u00070\u0002\u0002\u0196F\u0003\u0002\u0002\u0002\u0197\u0198", - "\u0007o\u0002\u0002\u0198\u0199\u0007c\u0002\u0002\u0199\u019a\u0007", - "r\u0002\u0002\u019a\u019b\u0007r\u0002\u0002\u019b\u019c\u0007k\u0002", - "\u0002\u019c\u019d\u0007p\u0002\u0002\u019d\u019e\u0007i\u0002\u0002", - "\u019eH\u0003\u0002\u0002\u0002\u019f\u01a0\u0007?\u0002\u0002\u01a0", - "\u01a1\u0007@\u0002\u0002\u01a1J\u0003\u0002\u0002\u0002\u01a2\u01a3", - "\u0007o\u0002\u0002\u01a3\u01a4\u0007g\u0002\u0002\u01a4\u01a5\u0007", - "o\u0002\u0002\u01a5\u01a6\u0007q\u0002\u0002\u01a6\u01a7\u0007t\u0002", - "\u0002\u01a7\u01a8\u0007{\u0002\u0002\u01a8L\u0003\u0002\u0002\u0002", - "\u01a9\u01aa\u0007u\u0002\u0002\u01aa\u01ab\u0007v\u0002\u0002\u01ab", - "\u01ac\u0007q\u0002\u0002\u01ac\u01ad\u0007t\u0002\u0002\u01ad\u01ae", - "\u0007c\u0002\u0002\u01ae\u01af\u0007i\u0002\u0002\u01af\u01b0\u0007", - "g\u0002\u0002\u01b0N\u0003\u0002\u0002\u0002\u01b1\u01b2\u0007e\u0002", - "\u0002\u01b2\u01b3\u0007c\u0002\u0002\u01b3\u01b4\u0007n\u0002\u0002", - "\u01b4\u01b5\u0007n\u0002\u0002\u01b5\u01b6\u0007f\u0002\u0002\u01b6", - "\u01b7\u0007c\u0002\u0002\u01b7\u01b8\u0007v\u0002\u0002\u01b8\u01b9", - "\u0007c\u0002\u0002\u01b9P\u0003\u0002\u0002\u0002\u01ba\u01bb\u0007", - "k\u0002\u0002\u01bb\u01bc\u0007h\u0002\u0002\u01bcR\u0003\u0002\u0002", - "\u0002\u01bd\u01be\u0007g\u0002\u0002\u01be\u01bf\u0007n\u0002\u0002", - "\u01bf\u01c0\u0007u\u0002\u0002\u01c0\u01c1\u0007g\u0002\u0002\u01c1", - "T\u0003\u0002\u0002\u0002\u01c2\u01c3\u0007y\u0002\u0002\u01c3\u01c4", - "\u0007j\u0002\u0002\u01c4\u01c5\u0007k\u0002\u0002\u01c5\u01c6\u0007", - "n\u0002\u0002\u01c6\u01c7\u0007g\u0002\u0002\u01c7V\u0003\u0002\u0002", - "\u0002\u01c8\u01c9\u0007c\u0002\u0002\u01c9\u01ca\u0007u\u0002\u0002", - "\u01ca\u01cb\u0007u\u0002\u0002\u01cb\u01cc\u0007g\u0002\u0002\u01cc", - "\u01cd\u0007o\u0002\u0002\u01cd\u01ce\u0007d\u0002\u0002\u01ce\u01cf", - "\u0007n\u0002\u0002\u01cf\u01d0\u0007{\u0002\u0002\u01d0X\u0003\u0002", - "\u0002\u0002\u01d1\u01d2\u0007f\u0002\u0002\u01d2\u01d3\u0007q\u0002", - "\u0002\u01d3Z\u0003\u0002\u0002\u0002\u01d4\u01d5\u0007t\u0002\u0002", - "\u01d5\u01d6\u0007g\u0002\u0002\u01d6\u01d7\u0007v\u0002\u0002\u01d7", - "\u01d8\u0007w\u0002\u0002\u01d8\u01d9\u0007t\u0002\u0002\u01d9\u01da", - "\u0007p\u0002\u0002\u01da\\\u0003\u0002\u0002\u0002\u01db\u01dc\u0007", - "v\u0002\u0002\u01dc\u01dd\u0007j\u0002\u0002\u01dd\u01de\u0007t\u0002", - "\u0002\u01de\u01df\u0007q\u0002\u0002\u01df\u01e0\u0007y\u0002\u0002", - "\u01e0^\u0003\u0002\u0002\u0002\u01e1\u01e2\u0007g\u0002\u0002\u01e2", - "\u01e3\u0007o\u0002\u0002\u01e3\u01e4\u0007k\u0002\u0002\u01e4\u01e5", - "\u0007v\u0002\u0002\u01e5`\u0003\u0002\u0002\u0002\u01e6\u01e7\u0007", - "x\u0002\u0002\u01e7\u01e8\u0007c\u0002\u0002\u01e8\u01e9\u0007t\u0002", - "\u0002\u01e9b\u0003\u0002\u0002\u0002\u01ea\u01eb\u0007c\u0002\u0002", - "\u01eb\u01ec\u0007f\u0002\u0002\u01ec\u01ed\u0007f\u0002\u0002\u01ed", - "\u01ee\u0007t\u0002\u0002\u01ee\u01ef\u0007g\u0002\u0002\u01ef\u01f0", - "\u0007u\u0002\u0002\u01f0\u01f1\u0007u\u0002\u0002\u01f1d\u0003\u0002", - "\u0002\u0002\u01f2\u01f3\u0007d\u0002\u0002\u01f3\u01f4\u0007q\u0002", - "\u0002\u01f4\u01f5\u0007q\u0002\u0002\u01f5\u01f6\u0007n\u0002\u0002", - "\u01f6f\u0003\u0002\u0002\u0002\u01f7\u01f8\u0007u\u0002\u0002\u01f8", - "\u01f9\u0007v\u0002\u0002\u01f9\u01fa\u0007t\u0002\u0002\u01fa\u01fb", - "\u0007k\u0002\u0002\u01fb\u01fc\u0007p\u0002\u0002\u01fc\u01fd\u0007", - "i\u0002\u0002\u01fdh\u0003\u0002\u0002\u0002\u01fe\u01ff\u0007d\u0002", - "\u0002\u01ff\u0200\u0007{\u0002\u0002\u0200\u0201\u0007v\u0002\u0002", - "\u0201\u0202\u0007g\u0002\u0002\u0202j\u0003\u0002\u0002\u0002\u0203", - "\u0204\u0007-\u0002\u0002\u0204\u0205\u0007-\u0002\u0002\u0205l\u0003", - "\u0002\u0002\u0002\u0206\u0207\u0007/\u0002\u0002\u0207\u0208\u0007", - "/\u0002\u0002\u0208n\u0003\u0002\u0002\u0002\u0209\u020a\u0007p\u0002", - "\u0002\u020a\u020b\u0007g\u0002\u0002\u020b\u020c\u0007y\u0002\u0002", - "\u020cp\u0003\u0002\u0002\u0002\u020d\u020e\u0007-\u0002\u0002\u020e", - "r\u0003\u0002\u0002\u0002\u020f\u0210\u0007/\u0002\u0002\u0210t\u0003", - "\u0002\u0002\u0002\u0211\u0212\u0007c\u0002\u0002\u0212\u0213\u0007", - "h\u0002\u0002\u0213\u0214\u0007v\u0002\u0002\u0214\u0215\u0007g\u0002", - "\u0002\u0215\u0216\u0007t\u0002\u0002\u0216v\u0003\u0002\u0002\u0002", - "\u0217\u0218\u0007f\u0002\u0002\u0218\u0219\u0007g\u0002\u0002\u0219", - "\u021a\u0007n\u0002\u0002\u021a\u021b\u0007g\u0002\u0002\u021b\u021c", - "\u0007v\u0002\u0002\u021c\u021d\u0007g\u0002\u0002\u021dx\u0003\u0002", - "\u0002\u0002\u021e\u021f\u0007#\u0002\u0002\u021fz\u0003\u0002\u0002", - "\u0002\u0220\u0221\u0007,\u0002\u0002\u0221\u0222\u0007,\u0002\u0002", - "\u0222|\u0003\u0002\u0002\u0002\u0223\u0224\u00071\u0002\u0002\u0224", - "~\u0003\u0002\u0002\u0002\u0225\u0226\u0007\'\u0002\u0002\u0226\u0080", - "\u0003\u0002\u0002\u0002\u0227\u0228\u0007>\u0002\u0002\u0228\u0229", - "\u0007>\u0002\u0002\u0229\u0082\u0003\u0002\u0002\u0002\u022a\u022b", - "\u0007@\u0002\u0002\u022b\u022c\u0007@\u0002\u0002\u022c\u0084\u0003", - "\u0002\u0002\u0002\u022d\u022e\u0007(\u0002\u0002\u022e\u0086\u0003", - "\u0002\u0002\u0002\u022f\u0230\u0007~\u0002\u0002\u0230\u0088\u0003", - "\u0002\u0002\u0002\u0231\u0232\u0007?\u0002\u0002\u0232\u0233\u0007", - "?\u0002\u0002\u0233\u008a\u0003\u0002\u0002\u0002\u0234\u0235\u0007", - "#\u0002\u0002\u0235\u0236\u0007?\u0002\u0002\u0236\u008c\u0003\u0002", - "\u0002\u0002\u0237\u0238\u0007(\u0002\u0002\u0238\u0239\u0007(\u0002", - "\u0002\u0239\u008e\u0003\u0002\u0002\u0002\u023a\u023b\u0007~\u0002", - "\u0002\u023b\u023c\u0007~\u0002\u0002\u023c\u0090\u0003\u0002\u0002", - "\u0002\u023d\u023e\u0007A\u0002\u0002\u023e\u0092\u0003\u0002\u0002", - "\u0002\u023f\u0240\u0007<\u0002\u0002\u0240\u0094\u0003\u0002\u0002", - "\u0002\u0241\u0242\u0007~\u0002\u0002\u0242\u0243\u0007?\u0002\u0002", - "\u0243\u0096\u0003\u0002\u0002\u0002\u0244\u0245\u0007`\u0002\u0002", - "\u0245\u0246\u0007?\u0002\u0002\u0246\u0098\u0003\u0002\u0002\u0002", - "\u0247\u0248\u0007(\u0002\u0002\u0248\u0249\u0007?\u0002\u0002\u0249", - "\u009a\u0003\u0002\u0002\u0002\u024a\u024b\u0007>\u0002\u0002\u024b", - "\u024c\u0007>\u0002\u0002\u024c\u024d\u0007?\u0002\u0002\u024d\u009c", - "\u0003\u0002\u0002\u0002\u024e\u024f\u0007@\u0002\u0002\u024f\u0250", - "\u0007@\u0002\u0002\u0250\u0251\u0007?\u0002\u0002\u0251\u009e\u0003", - "\u0002\u0002\u0002\u0252\u0253\u0007-\u0002\u0002\u0253\u0254\u0007", - "?\u0002\u0002\u0254\u00a0\u0003\u0002\u0002\u0002\u0255\u0256\u0007", - "/\u0002\u0002\u0256\u0257\u0007?\u0002\u0002\u0257\u00a2\u0003\u0002", - "\u0002\u0002\u0258\u0259\u0007,\u0002\u0002\u0259\u025a\u0007?\u0002", - "\u0002\u025a\u00a4\u0003\u0002\u0002\u0002\u025b\u025c\u00071\u0002", - "\u0002\u025c\u025d\u0007?\u0002\u0002\u025d\u00a6\u0003\u0002\u0002", - "\u0002\u025e\u025f\u0007\'\u0002\u0002\u025f\u0260\u0007?\u0002\u0002", - "\u0260\u00a8\u0003\u0002\u0002\u0002\u0261\u0262\u0007n\u0002\u0002", - "\u0262\u0263\u0007g\u0002\u0002\u0263\u0264\u0007v\u0002\u0002\u0264", - "\u00aa\u0003\u0002\u0002\u0002\u0265\u0266\u0007<\u0002\u0002\u0266", - "\u0267\u0007?\u0002\u0002\u0267\u00ac\u0003\u0002\u0002\u0002\u0268", - "\u0269\u0007?\u0002\u0002\u0269\u026a\u0007<\u0002\u0002\u026a\u00ae", - "\u0003\u0002\u0002\u0002\u026b\u026c\u0007u\u0002\u0002\u026c\u026d", - "\u0007y\u0002\u0002\u026d\u026e\u0007k\u0002\u0002\u026e\u026f\u0007", - "v\u0002\u0002\u026f\u0270\u0007e\u0002\u0002\u0270\u0271\u0007j\u0002", - "\u0002\u0271\u00b0\u0003\u0002\u0002\u0002\u0272\u0273\u0007e\u0002", - "\u0002\u0273\u0274\u0007c\u0002\u0002\u0274\u0275\u0007u\u0002\u0002", - "\u0275\u0276\u0007g\u0002\u0002\u0276\u00b2\u0003\u0002\u0002\u0002", - "\u0277\u0278\u0007f\u0002\u0002\u0278\u0279\u0007g\u0002\u0002\u0279", - "\u027a\u0007h\u0002\u0002\u027a\u027b\u0007c\u0002\u0002\u027b\u027c", - "\u0007w\u0002\u0002\u027c\u027d\u0007n\u0002\u0002\u027d\u027e\u0007", - "v\u0002\u0002\u027e\u00b4\u0003\u0002\u0002\u0002\u027f\u0280\u0007", - "/\u0002\u0002\u0280\u0281\u0007@\u0002\u0002\u0281\u00b6\u0003\u0002", - "\u0002\u0002\u0282\u0283\u0007k\u0002\u0002\u0283\u0284\u0007p\u0002", - "\u0002\u0284\u0339\u0007v\u0002\u0002\u0285\u0286\u0007k\u0002\u0002", - "\u0286\u0287\u0007p\u0002\u0002\u0287\u0288\u0007v\u0002\u0002\u0288", - "\u0339\u0007:\u0002\u0002\u0289\u028a\u0007k\u0002\u0002\u028a\u028b", - "\u0007p\u0002\u0002\u028b\u028c\u0007v\u0002\u0002\u028c\u028d\u0007", - "3\u0002\u0002\u028d\u0339\u00078\u0002\u0002\u028e\u028f\u0007k\u0002", - "\u0002\u028f\u0290\u0007p\u0002\u0002\u0290\u0291\u0007v\u0002\u0002", - "\u0291\u0292\u00074\u0002\u0002\u0292\u0339\u00076\u0002\u0002\u0293", - "\u0294\u0007k\u0002\u0002\u0294\u0295\u0007p\u0002\u0002\u0295\u0296", - "\u0007v\u0002\u0002\u0296\u0297\u00075\u0002\u0002\u0297\u0339\u0007", - "4\u0002\u0002\u0298\u0299\u0007k\u0002\u0002\u0299\u029a\u0007p\u0002", - "\u0002\u029a\u029b\u0007v\u0002\u0002\u029b\u029c\u00076\u0002\u0002", - "\u029c\u0339\u00072\u0002\u0002\u029d\u029e\u0007k\u0002\u0002\u029e", - "\u029f\u0007p\u0002\u0002\u029f\u02a0\u0007v\u0002\u0002\u02a0\u02a1", - "\u00076\u0002\u0002\u02a1\u0339\u0007:\u0002\u0002\u02a2\u02a3\u0007", - "k\u0002\u0002\u02a3\u02a4\u0007p\u0002\u0002\u02a4\u02a5\u0007v\u0002", - "\u0002\u02a5\u02a6\u00077\u0002\u0002\u02a6\u0339\u00078\u0002\u0002", - "\u02a7\u02a8\u0007k\u0002\u0002\u02a8\u02a9\u0007p\u0002\u0002\u02a9", - "\u02aa\u0007v\u0002\u0002\u02aa\u02ab\u00078\u0002\u0002\u02ab\u0339", - "\u00076\u0002\u0002\u02ac\u02ad\u0007k\u0002\u0002\u02ad\u02ae\u0007", - "p\u0002\u0002\u02ae\u02af\u0007v\u0002\u0002\u02af\u02b0\u00079\u0002", - "\u0002\u02b0\u0339\u00074\u0002\u0002\u02b1\u02b2\u0007k\u0002\u0002", - "\u02b2\u02b3\u0007p\u0002\u0002\u02b3\u02b4\u0007v\u0002\u0002\u02b4", - "\u02b5\u0007:\u0002\u0002\u02b5\u0339\u00072\u0002\u0002\u02b6\u02b7", - "\u0007k\u0002\u0002\u02b7\u02b8\u0007p\u0002\u0002\u02b8\u02b9\u0007", - "v\u0002\u0002\u02b9\u02ba\u0007:\u0002\u0002\u02ba\u0339\u0007:\u0002", - "\u0002\u02bb\u02bc\u0007k\u0002\u0002\u02bc\u02bd\u0007p\u0002\u0002", - "\u02bd\u02be\u0007v\u0002\u0002\u02be\u02bf\u0007;\u0002\u0002\u02bf", - "\u0339\u00078\u0002\u0002\u02c0\u02c1\u0007k\u0002\u0002\u02c1\u02c2", - "\u0007p\u0002\u0002\u02c2\u02c3\u0007v\u0002\u0002\u02c3\u02c4\u0007", - "3\u0002\u0002\u02c4\u02c5\u00072\u0002\u0002\u02c5\u0339\u00076\u0002", - "\u0002\u02c6\u02c7\u0007k\u0002\u0002\u02c7\u02c8\u0007p\u0002\u0002", - "\u02c8\u02c9\u0007v\u0002\u0002\u02c9\u02ca\u00073\u0002\u0002\u02ca", - "\u02cb\u00073\u0002\u0002\u02cb\u0339\u00074\u0002\u0002\u02cc\u02cd", - "\u0007k\u0002\u0002\u02cd\u02ce\u0007p\u0002\u0002\u02ce\u02cf\u0007", - "v\u0002\u0002\u02cf\u02d0\u00073\u0002\u0002\u02d0\u02d1\u00074\u0002", - "\u0002\u02d1\u0339\u00072\u0002\u0002\u02d2\u02d3\u0007k\u0002\u0002", - "\u02d3\u02d4\u0007p\u0002\u0002\u02d4\u02d5\u0007v\u0002\u0002\u02d5", - "\u02d6\u00073\u0002\u0002\u02d6\u02d7\u00074\u0002\u0002\u02d7\u0339", - "\u0007:\u0002\u0002\u02d8\u02d9\u0007k\u0002\u0002\u02d9\u02da\u0007", - "p\u0002\u0002\u02da\u02db\u0007v\u0002\u0002\u02db\u02dc\u00073\u0002", - "\u0002\u02dc\u02dd\u00075\u0002\u0002\u02dd\u0339\u00078\u0002\u0002", - "\u02de\u02df\u0007k\u0002\u0002\u02df\u02e0\u0007p\u0002\u0002\u02e0", - "\u02e1\u0007v\u0002\u0002\u02e1\u02e2\u00073\u0002\u0002\u02e2\u02e3", - "\u00076\u0002\u0002\u02e3\u0339\u00076\u0002\u0002\u02e4\u02e5\u0007", - "k\u0002\u0002\u02e5\u02e6\u0007p\u0002\u0002\u02e6\u02e7\u0007v\u0002", - "\u0002\u02e7\u02e8\u00073\u0002\u0002\u02e8\u02e9\u00077\u0002\u0002", - "\u02e9\u0339\u00074\u0002\u0002\u02ea\u02eb\u0007k\u0002\u0002\u02eb", - "\u02ec\u0007p\u0002\u0002\u02ec\u02ed\u0007v\u0002\u0002\u02ed\u02ee", - "\u00073\u0002\u0002\u02ee\u02ef\u00078\u0002\u0002\u02ef\u0339\u0007", - "2\u0002\u0002\u02f0\u02f1\u0007k\u0002\u0002\u02f1\u02f2\u0007p\u0002", - "\u0002\u02f2\u02f3\u0007v\u0002\u0002\u02f3\u02f4\u00073\u0002\u0002", - "\u02f4\u02f5\u00078\u0002\u0002\u02f5\u0339\u0007:\u0002\u0002\u02f6", - "\u02f7\u0007k\u0002\u0002\u02f7\u02f8\u0007p\u0002\u0002\u02f8\u02f9", - "\u0007v\u0002\u0002\u02f9\u02fa\u00073\u0002\u0002\u02fa\u02fb\u0007", - "9\u0002\u0002\u02fb\u0339\u00078\u0002\u0002\u02fc\u02fd\u0007k\u0002", - "\u0002\u02fd\u02fe\u0007p\u0002\u0002\u02fe\u02ff\u0007v\u0002\u0002", - "\u02ff\u0300\u00073\u0002\u0002\u0300\u0301\u0007:\u0002\u0002\u0301", - "\u0339\u00076\u0002\u0002\u0302\u0303\u0007k\u0002\u0002\u0303\u0304", - "\u0007p\u0002\u0002\u0304\u0305\u0007v\u0002\u0002\u0305\u0306\u0007", - "3\u0002\u0002\u0306\u0307\u0007;\u0002\u0002\u0307\u0339\u00074\u0002", - "\u0002\u0308\u0309\u0007k\u0002\u0002\u0309\u030a\u0007p\u0002\u0002", - "\u030a\u030b\u0007v\u0002\u0002\u030b\u030c\u00074\u0002\u0002\u030c", - "\u030d\u00072\u0002\u0002\u030d\u0339\u00072\u0002\u0002\u030e\u030f", - "\u0007k\u0002\u0002\u030f\u0310\u0007p\u0002\u0002\u0310\u0311\u0007", - "v\u0002\u0002\u0311\u0312\u00074\u0002\u0002\u0312\u0313\u00072\u0002", - "\u0002\u0313\u0339\u0007:\u0002\u0002\u0314\u0315\u0007k\u0002\u0002", - "\u0315\u0316\u0007p\u0002\u0002\u0316\u0317\u0007v\u0002\u0002\u0317", - "\u0318\u00074\u0002\u0002\u0318\u0319\u00073\u0002\u0002\u0319\u0339", - "\u00078\u0002\u0002\u031a\u031b\u0007k\u0002\u0002\u031b\u031c\u0007", - "p\u0002\u0002\u031c\u031d\u0007v\u0002\u0002\u031d\u031e\u00074\u0002", - "\u0002\u031e\u031f\u00074\u0002\u0002\u031f\u0339\u00076\u0002\u0002", - "\u0320\u0321\u0007k\u0002\u0002\u0321\u0322\u0007p\u0002\u0002\u0322", - "\u0323\u0007v\u0002\u0002\u0323\u0324\u00074\u0002\u0002\u0324\u0325", - "\u00075\u0002\u0002\u0325\u0339\u00074\u0002\u0002\u0326\u0327\u0007", - "k\u0002\u0002\u0327\u0328\u0007p\u0002\u0002\u0328\u0329\u0007v\u0002", - "\u0002\u0329\u032a\u00074\u0002\u0002\u032a\u032b\u00076\u0002\u0002", - "\u032b\u0339\u00072\u0002\u0002\u032c\u032d\u0007k\u0002\u0002\u032d", - "\u032e\u0007p\u0002\u0002\u032e\u032f\u0007v\u0002\u0002\u032f\u0330", - "\u00074\u0002\u0002\u0330\u0331\u00076\u0002\u0002\u0331\u0339\u0007", - ":\u0002\u0002\u0332\u0333\u0007k\u0002\u0002\u0333\u0334\u0007p\u0002", - "\u0002\u0334\u0335\u0007v\u0002\u0002\u0335\u0336\u00074\u0002\u0002", - "\u0336\u0337\u00077\u0002\u0002\u0337\u0339\u00078\u0002\u0002\u0338", - "\u0282\u0003\u0002\u0002\u0002\u0338\u0285\u0003\u0002\u0002\u0002\u0338", - "\u0289\u0003\u0002\u0002\u0002\u0338\u028e\u0003\u0002\u0002\u0002\u0338", - "\u0293\u0003\u0002\u0002\u0002\u0338\u0298\u0003\u0002\u0002\u0002\u0338", - "\u029d\u0003\u0002\u0002\u0002\u0338\u02a2\u0003\u0002\u0002\u0002\u0338", - "\u02a7\u0003\u0002\u0002\u0002\u0338\u02ac\u0003\u0002\u0002\u0002\u0338", - "\u02b1\u0003\u0002\u0002\u0002\u0338\u02b6\u0003\u0002\u0002\u0002\u0338", - "\u02bb\u0003\u0002\u0002\u0002\u0338\u02c0\u0003\u0002\u0002\u0002\u0338", - "\u02c6\u0003\u0002\u0002\u0002\u0338\u02cc\u0003\u0002\u0002\u0002\u0338", - "\u02d2\u0003\u0002\u0002\u0002\u0338\u02d8\u0003\u0002\u0002\u0002\u0338", - "\u02de\u0003\u0002\u0002\u0002\u0338\u02e4\u0003\u0002\u0002\u0002\u0338", - "\u02ea\u0003\u0002\u0002\u0002\u0338\u02f0\u0003\u0002\u0002\u0002\u0338", - "\u02f6\u0003\u0002\u0002\u0002\u0338\u02fc\u0003\u0002\u0002\u0002\u0338", - "\u0302\u0003\u0002\u0002\u0002\u0338\u0308\u0003\u0002\u0002\u0002\u0338", - "\u030e\u0003\u0002\u0002\u0002\u0338\u0314\u0003\u0002\u0002\u0002\u0338", - "\u031a\u0003\u0002\u0002\u0002\u0338\u0320\u0003\u0002\u0002\u0002\u0338", - "\u0326\u0003\u0002\u0002\u0002\u0338\u032c\u0003\u0002\u0002\u0002\u0338", - "\u0332\u0003\u0002\u0002\u0002\u0339\u00b8\u0003\u0002\u0002\u0002\u033a", - "\u033b\u0007w\u0002\u0002\u033b\u033c\u0007k\u0002\u0002\u033c\u033d", - "\u0007p\u0002\u0002\u033d\u0412\u0007v\u0002\u0002\u033e\u033f\u0007", - "w\u0002\u0002\u033f\u0340\u0007k\u0002\u0002\u0340\u0341\u0007p\u0002", - "\u0002\u0341\u0342\u0007v\u0002\u0002\u0342\u0412\u0007:\u0002\u0002", - "\u0343\u0344\u0007w\u0002\u0002\u0344\u0345\u0007k\u0002\u0002\u0345", - "\u0346\u0007p\u0002\u0002\u0346\u0347\u0007v\u0002\u0002\u0347\u0348", - "\u00073\u0002\u0002\u0348\u0412\u00078\u0002\u0002\u0349\u034a\u0007", - "w\u0002\u0002\u034a\u034b\u0007k\u0002\u0002\u034b\u034c\u0007p\u0002", - "\u0002\u034c\u034d\u0007v\u0002\u0002\u034d\u034e\u00074\u0002\u0002", - "\u034e\u0412\u00076\u0002\u0002\u034f\u0350\u0007w\u0002\u0002\u0350", - "\u0351\u0007k\u0002\u0002\u0351\u0352\u0007p\u0002\u0002\u0352\u0353", - "\u0007v\u0002\u0002\u0353\u0354\u00075\u0002\u0002\u0354\u0412\u0007", - "4\u0002\u0002\u0355\u0356\u0007w\u0002\u0002\u0356\u0357\u0007k\u0002", - "\u0002\u0357\u0358\u0007p\u0002\u0002\u0358\u0359\u0007v\u0002\u0002", - "\u0359\u035a\u00076\u0002\u0002\u035a\u0412\u00072\u0002\u0002\u035b", - "\u035c\u0007w\u0002\u0002\u035c\u035d\u0007k\u0002\u0002\u035d\u035e", - "\u0007p\u0002\u0002\u035e\u035f\u0007v\u0002\u0002\u035f\u0360\u0007", - "6\u0002\u0002\u0360\u0412\u0007:\u0002\u0002\u0361\u0362\u0007w\u0002", - "\u0002\u0362\u0363\u0007k\u0002\u0002\u0363\u0364\u0007p\u0002\u0002", - "\u0364\u0365\u0007v\u0002\u0002\u0365\u0366\u00077\u0002\u0002\u0366", - "\u0412\u00078\u0002\u0002\u0367\u0368\u0007w\u0002\u0002\u0368\u0369", - "\u0007k\u0002\u0002\u0369\u036a\u0007p\u0002\u0002\u036a\u036b\u0007", - "v\u0002\u0002\u036b\u036c\u00078\u0002\u0002\u036c\u0412\u00076\u0002", - "\u0002\u036d\u036e\u0007w\u0002\u0002\u036e\u036f\u0007k\u0002\u0002", - "\u036f\u0370\u0007p\u0002\u0002\u0370\u0371\u0007v\u0002\u0002\u0371", - "\u0372\u00079\u0002\u0002\u0372\u0412\u00074\u0002\u0002\u0373\u0374", - "\u0007w\u0002\u0002\u0374\u0375\u0007k\u0002\u0002\u0375\u0376\u0007", - "p\u0002\u0002\u0376\u0377\u0007v\u0002\u0002\u0377\u0378\u0007:\u0002", - "\u0002\u0378\u0412\u00072\u0002\u0002\u0379\u037a\u0007w\u0002\u0002", - "\u037a\u037b\u0007k\u0002\u0002\u037b\u037c\u0007p\u0002\u0002\u037c", - "\u037d\u0007v\u0002\u0002\u037d\u037e\u0007:\u0002\u0002\u037e\u0412", - "\u0007:\u0002\u0002\u037f\u0380\u0007w\u0002\u0002\u0380\u0381\u0007", - "k\u0002\u0002\u0381\u0382\u0007p\u0002\u0002\u0382\u0383\u0007v\u0002", - "\u0002\u0383\u0384\u0007;\u0002\u0002\u0384\u0412\u00078\u0002\u0002", - "\u0385\u0386\u0007w\u0002\u0002\u0386\u0387\u0007k\u0002\u0002\u0387", - "\u0388\u0007p\u0002\u0002\u0388\u0389\u0007v\u0002\u0002\u0389\u038a", - "\u00073\u0002\u0002\u038a\u038b\u00072\u0002\u0002\u038b\u0412\u0007", - "6\u0002\u0002\u038c\u038d\u0007w\u0002\u0002\u038d\u038e\u0007k\u0002", - "\u0002\u038e\u038f\u0007p\u0002\u0002\u038f\u0390\u0007v\u0002\u0002", - "\u0390\u0391\u00073\u0002\u0002\u0391\u0392\u00073\u0002\u0002\u0392", - "\u0412\u00074\u0002\u0002\u0393\u0394\u0007w\u0002\u0002\u0394\u0395", - "\u0007k\u0002\u0002\u0395\u0396\u0007p\u0002\u0002\u0396\u0397\u0007", - "v\u0002\u0002\u0397\u0398\u00073\u0002\u0002\u0398\u0399\u00074\u0002", - "\u0002\u0399\u0412\u00072\u0002\u0002\u039a\u039b\u0007w\u0002\u0002", - "\u039b\u039c\u0007k\u0002\u0002\u039c\u039d\u0007p\u0002\u0002\u039d", - "\u039e\u0007v\u0002\u0002\u039e\u039f\u00073\u0002\u0002\u039f\u03a0", - "\u00074\u0002\u0002\u03a0\u0412\u0007:\u0002\u0002\u03a1\u03a2\u0007", - "w\u0002\u0002\u03a2\u03a3\u0007k\u0002\u0002\u03a3\u03a4\u0007p\u0002", - "\u0002\u03a4\u03a5\u0007v\u0002\u0002\u03a5\u03a6\u00073\u0002\u0002", - "\u03a6\u03a7\u00075\u0002\u0002\u03a7\u0412\u00078\u0002\u0002\u03a8", - "\u03a9\u0007w\u0002\u0002\u03a9\u03aa\u0007k\u0002\u0002\u03aa\u03ab", - "\u0007p\u0002\u0002\u03ab\u03ac\u0007v\u0002\u0002\u03ac\u03ad\u0007", - "3\u0002\u0002\u03ad\u03ae\u00076\u0002\u0002\u03ae\u0412\u00076\u0002", - "\u0002\u03af\u03b0\u0007w\u0002\u0002\u03b0\u03b1\u0007k\u0002\u0002", - "\u03b1\u03b2\u0007p\u0002\u0002\u03b2\u03b3\u0007v\u0002\u0002\u03b3", - "\u03b4\u00073\u0002\u0002\u03b4\u03b5\u00077\u0002\u0002\u03b5\u0412", - "\u00074\u0002\u0002\u03b6\u03b7\u0007w\u0002\u0002\u03b7\u03b8\u0007", - "k\u0002\u0002\u03b8\u03b9\u0007p\u0002\u0002\u03b9\u03ba\u0007v\u0002", - "\u0002\u03ba\u03bb\u00073\u0002\u0002\u03bb\u03bc\u00078\u0002\u0002", - "\u03bc\u0412\u00072\u0002\u0002\u03bd\u03be\u0007w\u0002\u0002\u03be", - "\u03bf\u0007k\u0002\u0002\u03bf\u03c0\u0007p\u0002\u0002\u03c0\u03c1", - "\u0007v\u0002\u0002\u03c1\u03c2\u00073\u0002\u0002\u03c2\u03c3\u0007", - "8\u0002\u0002\u03c3\u0412\u0007:\u0002\u0002\u03c4\u03c5\u0007w\u0002", - "\u0002\u03c5\u03c6\u0007k\u0002\u0002\u03c6\u03c7\u0007p\u0002\u0002", - "\u03c7\u03c8\u0007v\u0002\u0002\u03c8\u03c9\u00073\u0002\u0002\u03c9", - "\u03ca\u00079\u0002\u0002\u03ca\u0412\u00078\u0002\u0002\u03cb\u03cc", - "\u0007w\u0002\u0002\u03cc\u03cd\u0007k\u0002\u0002\u03cd\u03ce\u0007", - "p\u0002\u0002\u03ce\u03cf\u0007v\u0002\u0002\u03cf\u03d0\u00073\u0002", - "\u0002\u03d0\u03d1\u0007:\u0002\u0002\u03d1\u0412\u00076\u0002\u0002", - "\u03d2\u03d3\u0007w\u0002\u0002\u03d3\u03d4\u0007k\u0002\u0002\u03d4", - "\u03d5\u0007p\u0002\u0002\u03d5\u03d6\u0007v\u0002\u0002\u03d6\u03d7", - "\u00073\u0002\u0002\u03d7\u03d8\u0007;\u0002\u0002\u03d8\u0412\u0007", - "4\u0002\u0002\u03d9\u03da\u0007w\u0002\u0002\u03da\u03db\u0007k\u0002", - "\u0002\u03db\u03dc\u0007p\u0002\u0002\u03dc\u03dd\u0007v\u0002\u0002", - "\u03dd\u03de\u00074\u0002\u0002\u03de\u03df\u00072\u0002\u0002\u03df", - "\u0412\u00072\u0002\u0002\u03e0\u03e1\u0007w\u0002\u0002\u03e1\u03e2", - "\u0007k\u0002\u0002\u03e2\u03e3\u0007p\u0002\u0002\u03e3\u03e4\u0007", - "v\u0002\u0002\u03e4\u03e5\u00074\u0002\u0002\u03e5\u03e6\u00072\u0002", - "\u0002\u03e6\u0412\u0007:\u0002\u0002\u03e7\u03e8\u0007w\u0002\u0002", - "\u03e8\u03e9\u0007k\u0002\u0002\u03e9\u03ea\u0007p\u0002\u0002\u03ea", - "\u03eb\u0007v\u0002\u0002\u03eb\u03ec\u00074\u0002\u0002\u03ec\u03ed", - "\u00073\u0002\u0002\u03ed\u0412\u00078\u0002\u0002\u03ee\u03ef\u0007", - "w\u0002\u0002\u03ef\u03f0\u0007k\u0002\u0002\u03f0\u03f1\u0007p\u0002", - "\u0002\u03f1\u03f2\u0007v\u0002\u0002\u03f2\u03f3\u00074\u0002\u0002", - "\u03f3\u03f4\u00074\u0002\u0002\u03f4\u0412\u00076\u0002\u0002\u03f5", - "\u03f6\u0007w\u0002\u0002\u03f6\u03f7\u0007k\u0002\u0002\u03f7\u03f8", - "\u0007p\u0002\u0002\u03f8\u03f9\u0007v\u0002\u0002\u03f9\u03fa\u0007", - "4\u0002\u0002\u03fa\u03fb\u00075\u0002\u0002\u03fb\u0412\u00074\u0002", - "\u0002\u03fc\u03fd\u0007w\u0002\u0002\u03fd\u03fe\u0007k\u0002\u0002", - "\u03fe\u03ff\u0007p\u0002\u0002\u03ff\u0400\u0007v\u0002\u0002\u0400", - "\u0401\u00074\u0002\u0002\u0401\u0402\u00076\u0002\u0002\u0402\u0412", - "\u00072\u0002\u0002\u0403\u0404\u0007w\u0002\u0002\u0404\u0405\u0007", - "k\u0002\u0002\u0405\u0406\u0007p\u0002\u0002\u0406\u0407\u0007v\u0002", - "\u0002\u0407\u0408\u00074\u0002\u0002\u0408\u0409\u00076\u0002\u0002", - "\u0409\u0412\u0007:\u0002\u0002\u040a\u040b\u0007w\u0002\u0002\u040b", - "\u040c\u0007k\u0002\u0002\u040c\u040d\u0007p\u0002\u0002\u040d\u040e", - "\u0007v\u0002\u0002\u040e\u040f\u00074\u0002\u0002\u040f\u0410\u0007", - "7\u0002\u0002\u0410\u0412\u00078\u0002\u0002\u0411\u033a\u0003\u0002", - "\u0002\u0002\u0411\u033e\u0003\u0002\u0002\u0002\u0411\u0343\u0003\u0002", - "\u0002\u0002\u0411\u0349\u0003\u0002\u0002\u0002\u0411\u034f\u0003\u0002", - "\u0002\u0002\u0411\u0355\u0003\u0002\u0002\u0002\u0411\u035b\u0003\u0002", - "\u0002\u0002\u0411\u0361\u0003\u0002\u0002\u0002\u0411\u0367\u0003\u0002", - "\u0002\u0002\u0411\u036d\u0003\u0002\u0002\u0002\u0411\u0373\u0003\u0002", - "\u0002\u0002\u0411\u0379\u0003\u0002\u0002\u0002\u0411\u037f\u0003\u0002", - "\u0002\u0002\u0411\u0385\u0003\u0002\u0002\u0002\u0411\u038c\u0003\u0002", - "\u0002\u0002\u0411\u0393\u0003\u0002\u0002\u0002\u0411\u039a\u0003\u0002", - "\u0002\u0002\u0411\u03a1\u0003\u0002\u0002\u0002\u0411\u03a8\u0003\u0002", - "\u0002\u0002\u0411\u03af\u0003\u0002\u0002\u0002\u0411\u03b6\u0003\u0002", - "\u0002\u0002\u0411\u03bd\u0003\u0002\u0002\u0002\u0411\u03c4\u0003\u0002", - "\u0002\u0002\u0411\u03cb\u0003\u0002\u0002\u0002\u0411\u03d2\u0003\u0002", - "\u0002\u0002\u0411\u03d9\u0003\u0002\u0002\u0002\u0411\u03e0\u0003\u0002", - "\u0002\u0002\u0411\u03e7\u0003\u0002\u0002\u0002\u0411\u03ee\u0003\u0002", - "\u0002\u0002\u0411\u03f5\u0003\u0002\u0002\u0002\u0411\u03fc\u0003\u0002", - "\u0002\u0002\u0411\u0403\u0003\u0002\u0002\u0002\u0411\u040a\u0003\u0002", - "\u0002\u0002\u0412\u00ba\u0003\u0002\u0002\u0002\u0413\u0414\u0007d", - "\u0002\u0002\u0414\u0415\u0007{\u0002\u0002\u0415\u0416\u0007v\u0002", + "i\u0005i\u060f\ni\u0003j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003", + "j\u0003j\u0003j\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003l\u0003", + "l\u0003l\u0003l\u0003l\u0003l\u0003l\u0003l\u0003l\u0003m\u0003m\u0003", + "m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003m\u0003n\u0003n\u0003n\u0003", + "n\u0003n\u0003n\u0003n\u0003n\u0003n\u0003o\u0003o\u0003o\u0003o\u0003", + "o\u0003o\u0003o\u0003o\u0003p\u0003p\u0003p\u0003p\u0003p\u0003p\u0003", + "p\u0003p\u0003p\u0003q\u0003q\u0003q\u0003q\u0003q\u0003q\u0003q\u0003", + "q\u0003r\u0003r\u0003r\u0003r\u0003r\u0003r\u0003r\u0003r\u0003s\u0003", + "s\u0003s\u0003s\u0003s\u0003s\u0003s\u0003t\u0003t\u0003t\u0003t\u0003", + "t\u0003u\u0003u\u0003u\u0003u\u0003u\u0003v\u0003v\u0007v\u0670\nv\f", + "v\u000ev\u0673\u000bv\u0003w\u0003w\u0003x\u0003x\u0003y\u0003y\u0007", + "y\u067b\ny\fy\u000ey\u067e\u000by\u0003y\u0003y\u0003y\u0007y\u0683", + "\ny\fy\u000ey\u0686\u000by\u0003y\u0005y\u0689\ny\u0003z\u0003z\u0003", + "z\u0005z\u068e\nz\u0003{\u0003{\u0003{\u0005{\u0693\n{\u0003|\u0006", + "|\u0696\n|\r|\u000e|\u0697\u0003|\u0003|\u0003}\u0003}\u0003}\u0003", + "}\u0007}\u06a0\n}\f}\u000e}\u06a3\u000b}\u0003}\u0003}\u0003}\u0003", + "}\u0003}\u0003~\u0003~\u0003~\u0003~\u0007~\u06ae\n~\f~\u000e~\u06b1", + "\u000b~\u0003~\u0003~\u0003\u06a1\u0002\u007f\u0003\u0003\u0005\u0004", + "\u0007\u0005\t\u0006\u000b\u0007\r\b\u000f\t\u0011\n\u0013\u000b\u0015", + "\f\u0017\r\u0019\u000e\u001b\u000f\u001d\u0010\u001f\u0011!\u0012#\u0013", + "%\u0014\'\u0015)\u0016+\u0017-\u0018/\u00191\u001a3\u001b5\u001c7\u001d", + "9\u001e;\u001f= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]0_1a2c3e4g5i6k7m8o", + "9q:s;u{?}@\u007fA\u0081B\u0083C\u0085D\u0087E\u0089F\u008bG\u008d", + "H\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009bO\u009dP\u009fQ\u00a1", + "R\u00a3S\u00a5T\u00a7U\u00a9V\u00abW\u00adX\u00afY\u00b1Z\u00b3[\u00b5", + "\\\u00b7]\u00b9^\u00bb_\u00bd`\u00bfa\u00c1b\u00c3c\u00c5d\u00c7e\u00c9", + "f\u00cbg\u00cd\u0002\u00cf\u0002\u00d1h\u00d3i\u00d5j\u00d7k\u00d9l", + "\u00dbm\u00ddn\u00dfo\u00e1p\u00e3q\u00e5r\u00e7s\u00e9t\u00ebu\u00ed", + "\u0002\u00ef\u0002\u00f1v\u00f3\u0002\u00f5\u0002\u00f7w\u00f9x\u00fb", + "y\u0003\u0002\f\u0003\u00022;\u0004\u0002GGgg\u0004\u0002ZZzz\u0005", + "\u00022;CHch\u0006\u0002&&C\\aac|\u0007\u0002&&2;C\\aac|\u0006\u0002", + "\f\f\u000f\u000f$$^^\u0006\u0002\f\f\u000f\u000f))^^\u0005\u0002\u000b", + "\f\u000e\u000f\"\"\u0004\u0002\f\f\u000f\u000f\u0002\u0744\u0002\u0003", + "\u0003\u0002\u0002\u0002\u0002\u0005\u0003\u0002\u0002\u0002\u0002\u0007", + "\u0003\u0002\u0002\u0002\u0002\t\u0003\u0002\u0002\u0002\u0002\u000b", + "\u0003\u0002\u0002\u0002\u0002\r\u0003\u0002\u0002\u0002\u0002\u000f", + "\u0003\u0002\u0002\u0002\u0002\u0011\u0003\u0002\u0002\u0002\u0002\u0013", + "\u0003\u0002\u0002\u0002\u0002\u0015\u0003\u0002\u0002\u0002\u0002\u0017", + "\u0003\u0002\u0002\u0002\u0002\u0019\u0003\u0002\u0002\u0002\u0002\u001b", + "\u0003\u0002\u0002\u0002\u0002\u001d\u0003\u0002\u0002\u0002\u0002\u001f", + "\u0003\u0002\u0002\u0002\u0002!\u0003\u0002\u0002\u0002\u0002#\u0003", + "\u0002\u0002\u0002\u0002%\u0003\u0002\u0002\u0002\u0002\'\u0003\u0002", + "\u0002\u0002\u0002)\u0003\u0002\u0002\u0002\u0002+\u0003\u0002\u0002", + "\u0002\u0002-\u0003\u0002\u0002\u0002\u0002/\u0003\u0002\u0002\u0002", + "\u00021\u0003\u0002\u0002\u0002\u00023\u0003\u0002\u0002\u0002\u0002", + "5\u0003\u0002\u0002\u0002\u00027\u0003\u0002\u0002\u0002\u00029\u0003", + "\u0002\u0002\u0002\u0002;\u0003\u0002\u0002\u0002\u0002=\u0003\u0002", + "\u0002\u0002\u0002?\u0003\u0002\u0002\u0002\u0002A\u0003\u0002\u0002", + "\u0002\u0002C\u0003\u0002\u0002\u0002\u0002E\u0003\u0002\u0002\u0002", + "\u0002G\u0003\u0002\u0002\u0002\u0002I\u0003\u0002\u0002\u0002\u0002", + "K\u0003\u0002\u0002\u0002\u0002M\u0003\u0002\u0002\u0002\u0002O\u0003", + "\u0002\u0002\u0002\u0002Q\u0003\u0002\u0002\u0002\u0002S\u0003\u0002", + "\u0002\u0002\u0002U\u0003\u0002\u0002\u0002\u0002W\u0003\u0002\u0002", + "\u0002\u0002Y\u0003\u0002\u0002\u0002\u0002[\u0003\u0002\u0002\u0002", + "\u0002]\u0003\u0002\u0002\u0002\u0002_\u0003\u0002\u0002\u0002\u0002", + "a\u0003\u0002\u0002\u0002\u0002c\u0003\u0002\u0002\u0002\u0002e\u0003", + "\u0002\u0002\u0002\u0002g\u0003\u0002\u0002\u0002\u0002i\u0003\u0002", + "\u0002\u0002\u0002k\u0003\u0002\u0002\u0002\u0002m\u0003\u0002\u0002", + "\u0002\u0002o\u0003\u0002\u0002\u0002\u0002q\u0003\u0002\u0002\u0002", + "\u0002s\u0003\u0002\u0002\u0002\u0002u\u0003\u0002\u0002\u0002\u0002", + "w\u0003\u0002\u0002\u0002\u0002y\u0003\u0002\u0002\u0002\u0002{\u0003", + "\u0002\u0002\u0002\u0002}\u0003\u0002\u0002\u0002\u0002\u007f\u0003", + "\u0002\u0002\u0002\u0002\u0081\u0003\u0002\u0002\u0002\u0002\u0083\u0003", + "\u0002\u0002\u0002\u0002\u0085\u0003\u0002\u0002\u0002\u0002\u0087\u0003", + "\u0002\u0002\u0002\u0002\u0089\u0003\u0002\u0002\u0002\u0002\u008b\u0003", + "\u0002\u0002\u0002\u0002\u008d\u0003\u0002\u0002\u0002\u0002\u008f\u0003", + "\u0002\u0002\u0002\u0002\u0091\u0003\u0002\u0002\u0002\u0002\u0093\u0003", + "\u0002\u0002\u0002\u0002\u0095\u0003\u0002\u0002\u0002\u0002\u0097\u0003", + "\u0002\u0002\u0002\u0002\u0099\u0003\u0002\u0002\u0002\u0002\u009b\u0003", + "\u0002\u0002\u0002\u0002\u009d\u0003\u0002\u0002\u0002\u0002\u009f\u0003", + "\u0002\u0002\u0002\u0002\u00a1\u0003\u0002\u0002\u0002\u0002\u00a3\u0003", + "\u0002\u0002\u0002\u0002\u00a5\u0003\u0002\u0002\u0002\u0002\u00a7\u0003", + "\u0002\u0002\u0002\u0002\u00a9\u0003\u0002\u0002\u0002\u0002\u00ab\u0003", + "\u0002\u0002\u0002\u0002\u00ad\u0003\u0002\u0002\u0002\u0002\u00af\u0003", + "\u0002\u0002\u0002\u0002\u00b1\u0003\u0002\u0002\u0002\u0002\u00b3\u0003", + "\u0002\u0002\u0002\u0002\u00b5\u0003\u0002\u0002\u0002\u0002\u00b7\u0003", + "\u0002\u0002\u0002\u0002\u00b9\u0003\u0002\u0002\u0002\u0002\u00bb\u0003", + "\u0002\u0002\u0002\u0002\u00bd\u0003\u0002\u0002\u0002\u0002\u00bf\u0003", + "\u0002\u0002\u0002\u0002\u00c1\u0003\u0002\u0002\u0002\u0002\u00c3\u0003", + "\u0002\u0002\u0002\u0002\u00c5\u0003\u0002\u0002\u0002\u0002\u00c7\u0003", + "\u0002\u0002\u0002\u0002\u00c9\u0003\u0002\u0002\u0002\u0002\u00cb\u0003", + "\u0002\u0002\u0002\u0002\u00d1\u0003\u0002\u0002\u0002\u0002\u00d3\u0003", + "\u0002\u0002\u0002\u0002\u00d5\u0003\u0002\u0002\u0002\u0002\u00d7\u0003", + "\u0002\u0002\u0002\u0002\u00d9\u0003\u0002\u0002\u0002\u0002\u00db\u0003", + "\u0002\u0002\u0002\u0002\u00dd\u0003\u0002\u0002\u0002\u0002\u00df\u0003", + "\u0002\u0002\u0002\u0002\u00e1\u0003\u0002\u0002\u0002\u0002\u00e3\u0003", + "\u0002\u0002\u0002\u0002\u00e5\u0003\u0002\u0002\u0002\u0002\u00e7\u0003", + "\u0002\u0002\u0002\u0002\u00e9\u0003\u0002\u0002\u0002\u0002\u00eb\u0003", + "\u0002\u0002\u0002\u0002\u00f1\u0003\u0002\u0002\u0002\u0002\u00f7\u0003", + "\u0002\u0002\u0002\u0002\u00f9\u0003\u0002\u0002\u0002\u0002\u00fb\u0003", + "\u0002\u0002\u0002\u0003\u00fd\u0003\u0002\u0002\u0002\u0005\u0104\u0003", + "\u0002\u0002\u0002\u0007\u0106\u0003\u0002\u0002\u0002\t\u0108\u0003", + "\u0002\u0002\u0002\u000b\u010a\u0003\u0002\u0002\u0002\r\u010d\u0003", + "\u0002\u0002\u0002\u000f\u010f\u0003\u0002\u0002\u0002\u0011\u0111\u0003", + "\u0002\u0002\u0002\u0013\u0114\u0003\u0002\u0002\u0002\u0015\u0116\u0003", + "\u0002\u0002\u0002\u0017\u0119\u0003\u0002\u0002\u0002\u0019\u0120\u0003", + "\u0002\u0002\u0002\u001b\u0122\u0003\u0002\u0002\u0002\u001d\u0127\u0003", + "\u0002\u0002\u0002\u001f\u0129\u0003\u0002\u0002\u0002!\u012b\u0003", + "\u0002\u0002\u0002#\u012d\u0003\u0002\u0002\u0002%\u0136\u0003\u0002", + "\u0002\u0002\'\u0140\u0003\u0002\u0002\u0002)\u0148\u0003\u0002\u0002", + "\u0002+\u014b\u0003\u0002\u0002\u0002-\u014d\u0003\u0002\u0002\u0002", + "/\u014f\u0003\u0002\u0002\u00021\u0155\u0003\u0002\u0002\u00023\u0159", + "\u0003\u0002\u0002\u00025\u0160\u0003\u0002\u0002\u00027\u016c\u0003", + "\u0002\u0002\u00029\u0175\u0003\u0002\u0002\u0002;\u017e\u0003\u0002", + "\u0002\u0002=\u0186\u0003\u0002\u0002\u0002?\u018c\u0003\u0002\u0002", + "\u0002A\u0191\u0003\u0002\u0002\u0002C\u0193\u0003\u0002\u0002\u0002", + "E\u0195\u0003\u0002\u0002\u0002G\u019d\u0003\u0002\u0002\u0002I\u019f", + "\u0003\u0002\u0002\u0002K\u01a7\u0003\u0002\u0002\u0002M\u01aa\u0003", + "\u0002\u0002\u0002O\u01b1\u0003\u0002\u0002\u0002Q\u01b9\u0003\u0002", + "\u0002\u0002S\u01c2\u0003\u0002\u0002\u0002U\u01c5\u0003\u0002\u0002", + "\u0002W\u01ca\u0003\u0002\u0002\u0002Y\u01d0\u0003\u0002\u0002\u0002", + "[\u01d9\u0003\u0002\u0002\u0002]\u01dc\u0003\u0002\u0002\u0002_\u01e3", + "\u0003\u0002\u0002\u0002a\u01e9\u0003\u0002\u0002\u0002c\u01ee\u0003", + "\u0002\u0002\u0002e\u01f2\u0003\u0002\u0002\u0002g\u01f7\u0003\u0002", + "\u0002\u0002i\u01fe\u0003\u0002\u0002\u0002k\u0203\u0003\u0002\u0002", + "\u0002m\u0206\u0003\u0002\u0002\u0002o\u0209\u0003\u0002\u0002\u0002", + "q\u020d\u0003\u0002\u0002\u0002s\u020f\u0003\u0002\u0002\u0002u\u0211", + "\u0003\u0002\u0002\u0002w\u0217\u0003\u0002\u0002\u0002y\u021e\u0003", + "\u0002\u0002\u0002{\u0220\u0003\u0002\u0002\u0002}\u0223\u0003\u0002", + "\u0002\u0002\u007f\u0225\u0003\u0002\u0002\u0002\u0081\u0227\u0003\u0002", + "\u0002\u0002\u0083\u022a\u0003\u0002\u0002\u0002\u0085\u022d\u0003\u0002", + "\u0002\u0002\u0087\u022f\u0003\u0002\u0002\u0002\u0089\u0231\u0003\u0002", + "\u0002\u0002\u008b\u0234\u0003\u0002\u0002\u0002\u008d\u0237\u0003\u0002", + "\u0002\u0002\u008f\u023a\u0003\u0002\u0002\u0002\u0091\u023d\u0003\u0002", + "\u0002\u0002\u0093\u023f\u0003\u0002\u0002\u0002\u0095\u0241\u0003\u0002", + "\u0002\u0002\u0097\u0244\u0003\u0002\u0002\u0002\u0099\u0247\u0003\u0002", + "\u0002\u0002\u009b\u024a\u0003\u0002\u0002\u0002\u009d\u024e\u0003\u0002", + "\u0002\u0002\u009f\u0252\u0003\u0002\u0002\u0002\u00a1\u0255\u0003\u0002", + "\u0002\u0002\u00a3\u0258\u0003\u0002\u0002\u0002\u00a5\u025b\u0003\u0002", + "\u0002\u0002\u00a7\u025e\u0003\u0002\u0002\u0002\u00a9\u0261\u0003\u0002", + "\u0002\u0002\u00ab\u0265\u0003\u0002\u0002\u0002\u00ad\u0268\u0003\u0002", + "\u0002\u0002\u00af\u026b\u0003\u0002\u0002\u0002\u00b1\u0272\u0003\u0002", + "\u0002\u0002\u00b3\u0277\u0003\u0002\u0002\u0002\u00b5\u027f\u0003\u0002", + "\u0002\u0002\u00b7\u0338\u0003\u0002\u0002\u0002\u00b9\u0411\u0003\u0002", + "\u0002\u0002\u00bb\u04ef\u0003\u0002\u0002\u0002\u00bd\u0507\u0003\u0002", + "\u0002\u0002\u00bf\u0521\u0003\u0002\u0002\u0002\u00c1\u0524\u0003\u0002", + "\u0002\u0002\u00c3\u053d\u0003\u0002\u0002\u0002\u00c5\u0550\u0003\u0002", + "\u0002\u0002\u00c7\u055a\u0003\u0002\u0002\u0002\u00c9\u0595\u0003\u0002", + "\u0002\u0002\u00cb\u0597\u0003\u0002\u0002\u0002\u00cd\u05ad\u0003\u0002", + "\u0002\u0002\u00cf\u05b0\u0003\u0002\u0002\u0002\u00d1\u060e\u0003\u0002", + "\u0002\u0002\u00d3\u0610\u0003\u0002\u0002\u0002\u00d5\u061a\u0003\u0002", + "\u0002\u0002\u00d7\u0620\u0003\u0002\u0002\u0002\u00d9\u0629\u0003\u0002", + "\u0002\u0002\u00db\u0632\u0003\u0002\u0002\u0002\u00dd\u063b\u0003\u0002", + "\u0002\u0002\u00df\u0643\u0003\u0002\u0002\u0002\u00e1\u064c\u0003\u0002", + "\u0002\u0002\u00e3\u0654\u0003\u0002\u0002\u0002\u00e5\u065c\u0003\u0002", + "\u0002\u0002\u00e7\u0663\u0003\u0002\u0002\u0002\u00e9\u0668\u0003\u0002", + "\u0002\u0002\u00eb\u066d\u0003\u0002\u0002\u0002\u00ed\u0674\u0003\u0002", + "\u0002\u0002\u00ef\u0676\u0003\u0002\u0002\u0002\u00f1\u0688\u0003\u0002", + "\u0002\u0002\u00f3\u068d\u0003\u0002\u0002\u0002\u00f5\u0692\u0003\u0002", + "\u0002\u0002\u00f7\u0695\u0003\u0002\u0002\u0002\u00f9\u069b\u0003\u0002", + "\u0002\u0002\u00fb\u06a9\u0003\u0002\u0002\u0002\u00fd\u00fe\u0007r", + "\u0002\u0002\u00fe\u00ff\u0007t\u0002\u0002\u00ff\u0100\u0007c\u0002", + "\u0002\u0100\u0101\u0007i\u0002\u0002\u0101\u0102\u0007o\u0002\u0002", + "\u0102\u0103\u0007c\u0002\u0002\u0103\u0004\u0003\u0002\u0002\u0002", + "\u0104\u0105\u0007=\u0002\u0002\u0105\u0006\u0003\u0002\u0002\u0002", + "\u0106\u0107\u0007`\u0002\u0002\u0107\b\u0003\u0002\u0002\u0002\u0108", + "\u0109\u0007\u0080\u0002\u0002\u0109\n\u0003\u0002\u0002\u0002\u010a", + "\u010b\u0007@\u0002\u0002\u010b\u010c\u0007?\u0002\u0002\u010c\f\u0003", + "\u0002\u0002\u0002\u010d\u010e\u0007@\u0002\u0002\u010e\u000e\u0003", + "\u0002\u0002\u0002\u010f\u0110\u0007>\u0002\u0002\u0110\u0010\u0003", + "\u0002\u0002\u0002\u0111\u0112\u0007>\u0002\u0002\u0112\u0113\u0007", + "?\u0002\u0002\u0113\u0012\u0003\u0002\u0002\u0002\u0114\u0115\u0007", + "?\u0002\u0002\u0115\u0014\u0003\u0002\u0002\u0002\u0116\u0117\u0007", + "c\u0002\u0002\u0117\u0118\u0007u\u0002\u0002\u0118\u0016\u0003\u0002", + "\u0002\u0002\u0119\u011a\u0007k\u0002\u0002\u011a\u011b\u0007o\u0002", + "\u0002\u011b\u011c\u0007r\u0002\u0002\u011c\u011d\u0007q\u0002\u0002", + "\u011d\u011e\u0007t\u0002\u0002\u011e\u011f\u0007v\u0002\u0002\u011f", + "\u0018\u0003\u0002\u0002\u0002\u0120\u0121\u0007,\u0002\u0002\u0121", + "\u001a\u0003\u0002\u0002\u0002\u0122\u0123\u0007h\u0002\u0002\u0123", + "\u0124\u0007t\u0002\u0002\u0124\u0125\u0007q\u0002\u0002\u0125\u0126", + "\u0007o\u0002\u0002\u0126\u001c\u0003\u0002\u0002\u0002\u0127\u0128", + "\u0007}\u0002\u0002\u0128\u001e\u0003\u0002\u0002\u0002\u0129\u012a", + "\u0007.\u0002\u0002\u012a \u0003\u0002\u0002\u0002\u012b\u012c\u0007", + "\u007f\u0002\u0002\u012c\"\u0003\u0002\u0002\u0002\u012d\u012e\u0007", + "e\u0002\u0002\u012e\u012f\u0007q\u0002\u0002\u012f\u0130\u0007p\u0002", + "\u0002\u0130\u0131\u0007v\u0002\u0002\u0131\u0132\u0007t\u0002\u0002", + "\u0132\u0133\u0007c\u0002\u0002\u0133\u0134\u0007e\u0002\u0002\u0134", + "\u0135\u0007v\u0002\u0002\u0135$\u0003\u0002\u0002\u0002\u0136\u0137", + "\u0007k\u0002\u0002\u0137\u0138\u0007p\u0002\u0002\u0138\u0139\u0007", + "v\u0002\u0002\u0139\u013a\u0007g\u0002\u0002\u013a\u013b\u0007t\u0002", + "\u0002\u013b\u013c\u0007h\u0002\u0002\u013c\u013d\u0007c\u0002\u0002", + "\u013d\u013e\u0007e\u0002\u0002\u013e\u013f\u0007g\u0002\u0002\u013f", + "&\u0003\u0002\u0002\u0002\u0140\u0141\u0007n\u0002\u0002\u0141\u0142", + "\u0007k\u0002\u0002\u0142\u0143\u0007d\u0002\u0002\u0143\u0144\u0007", + "t\u0002\u0002\u0144\u0145\u0007c\u0002\u0002\u0145\u0146\u0007t\u0002", + "\u0002\u0146\u0147\u0007{\u0002\u0002\u0147(\u0003\u0002\u0002\u0002", + "\u0148\u0149\u0007k\u0002\u0002\u0149\u014a\u0007u\u0002\u0002\u014a", + "*\u0003\u0002\u0002\u0002\u014b\u014c\u0007*\u0002\u0002\u014c,\u0003", + "\u0002\u0002\u0002\u014d\u014e\u0007+\u0002\u0002\u014e.\u0003\u0002", + "\u0002\u0002\u014f\u0150\u0007w\u0002\u0002\u0150\u0151\u0007u\u0002", + "\u0002\u0151\u0152\u0007k\u0002\u0002\u0152\u0153\u0007p\u0002\u0002", + "\u0153\u0154\u0007i\u0002\u0002\u01540\u0003\u0002\u0002\u0002\u0155", + "\u0156\u0007h\u0002\u0002\u0156\u0157\u0007q\u0002\u0002\u0157\u0158", + "\u0007t\u0002\u0002\u01582\u0003\u0002\u0002\u0002\u0159\u015a\u0007", + "u\u0002\u0002\u015a\u015b\u0007v\u0002\u0002\u015b\u015c\u0007t\u0002", + "\u0002\u015c\u015d\u0007w\u0002\u0002\u015d\u015e\u0007e\u0002\u0002", + "\u015e\u015f\u0007v\u0002\u0002\u015f4\u0003\u0002\u0002\u0002\u0160", + "\u0161\u0007e\u0002\u0002\u0161\u0162\u0007q\u0002\u0002\u0162\u0163", + "\u0007p\u0002\u0002\u0163\u0164\u0007u\u0002\u0002\u0164\u0165\u0007", + "v\u0002\u0002\u0165\u0166\u0007t\u0002\u0002\u0166\u0167\u0007w\u0002", + "\u0002\u0167\u0168\u0007e\u0002\u0002\u0168\u0169\u0007v\u0002\u0002", + "\u0169\u016a\u0007q\u0002\u0002\u016a\u016b\u0007t\u0002\u0002\u016b", + "6\u0003\u0002\u0002\u0002\u016c\u016d\u0007o\u0002\u0002\u016d\u016e", + "\u0007q\u0002\u0002\u016e\u016f\u0007f\u0002\u0002\u016f\u0170\u0007", + "k\u0002\u0002\u0170\u0171\u0007h\u0002\u0002\u0171\u0172\u0007k\u0002", + "\u0002\u0172\u0173\u0007g\u0002\u0002\u0173\u0174\u0007t\u0002\u0002", + "\u01748\u0003\u0002\u0002\u0002\u0175\u0176\u0007h\u0002\u0002\u0176", + "\u0177\u0007w\u0002\u0002\u0177\u0178\u0007p\u0002\u0002\u0178\u0179", + "\u0007e\u0002\u0002\u0179\u017a\u0007v\u0002\u0002\u017a\u017b\u0007", + "k\u0002\u0002\u017b\u017c\u0007q\u0002\u0002\u017c\u017d\u0007p\u0002", + "\u0002\u017d:\u0003\u0002\u0002\u0002\u017e\u017f\u0007t\u0002\u0002", + "\u017f\u0180\u0007g\u0002\u0002\u0180\u0181\u0007v\u0002\u0002\u0181", + "\u0182\u0007w\u0002\u0002\u0182\u0183\u0007t\u0002\u0002\u0183\u0184", + "\u0007p\u0002\u0002\u0184\u0185\u0007u\u0002\u0002\u0185<\u0003\u0002", + "\u0002\u0002\u0186\u0187\u0007g\u0002\u0002\u0187\u0188\u0007x\u0002", + "\u0002\u0188\u0189\u0007g\u0002\u0002\u0189\u018a\u0007p\u0002\u0002", + "\u018a\u018b\u0007v\u0002\u0002\u018b>\u0003\u0002\u0002\u0002\u018c", + "\u018d\u0007g\u0002\u0002\u018d\u018e\u0007p\u0002\u0002\u018e\u018f", + "\u0007w\u0002\u0002\u018f\u0190\u0007o\u0002\u0002\u0190@\u0003\u0002", + "\u0002\u0002\u0191\u0192\u0007]\u0002\u0002\u0192B\u0003\u0002\u0002", + "\u0002\u0193\u0194\u0007_\u0002\u0002\u0194D\u0003\u0002\u0002\u0002", + "\u0195\u0196\u0007c\u0002\u0002\u0196\u0197\u0007f\u0002\u0002\u0197", + "\u0198\u0007f\u0002\u0002\u0198\u0199\u0007t\u0002\u0002\u0199\u019a", + "\u0007g\u0002\u0002\u019a\u019b\u0007u\u0002\u0002\u019b\u019c\u0007", + "u\u0002\u0002\u019cF\u0003\u0002\u0002\u0002\u019d\u019e\u00070\u0002", + "\u0002\u019eH\u0003\u0002\u0002\u0002\u019f\u01a0\u0007o\u0002\u0002", + "\u01a0\u01a1\u0007c\u0002\u0002\u01a1\u01a2\u0007r\u0002\u0002\u01a2", + "\u01a3\u0007r\u0002\u0002\u01a3\u01a4\u0007k\u0002\u0002\u01a4\u01a5", + "\u0007p\u0002\u0002\u01a5\u01a6\u0007i\u0002\u0002\u01a6J\u0003\u0002", + "\u0002\u0002\u01a7\u01a8\u0007?\u0002\u0002\u01a8\u01a9\u0007@\u0002", + "\u0002\u01a9L\u0003\u0002\u0002\u0002\u01aa\u01ab\u0007o\u0002\u0002", + "\u01ab\u01ac\u0007g\u0002\u0002\u01ac\u01ad\u0007o\u0002\u0002\u01ad", + "\u01ae\u0007q\u0002\u0002\u01ae\u01af\u0007t\u0002\u0002\u01af\u01b0", + "\u0007{\u0002\u0002\u01b0N\u0003\u0002\u0002\u0002\u01b1\u01b2\u0007", + "u\u0002\u0002\u01b2\u01b3\u0007v\u0002\u0002\u01b3\u01b4\u0007q\u0002", + "\u0002\u01b4\u01b5\u0007t\u0002\u0002\u01b5\u01b6\u0007c\u0002\u0002", + "\u01b6\u01b7\u0007i\u0002\u0002\u01b7\u01b8\u0007g\u0002\u0002\u01b8", + "P\u0003\u0002\u0002\u0002\u01b9\u01ba\u0007e\u0002\u0002\u01ba\u01bb", + "\u0007c\u0002\u0002\u01bb\u01bc\u0007n\u0002\u0002\u01bc\u01bd\u0007", + "n\u0002\u0002\u01bd\u01be\u0007f\u0002\u0002\u01be\u01bf\u0007c\u0002", + "\u0002\u01bf\u01c0\u0007v\u0002\u0002\u01c0\u01c1\u0007c\u0002\u0002", + "\u01c1R\u0003\u0002\u0002\u0002\u01c2\u01c3\u0007k\u0002\u0002\u01c3", + "\u01c4\u0007h\u0002\u0002\u01c4T\u0003\u0002\u0002\u0002\u01c5\u01c6", + "\u0007g\u0002\u0002\u01c6\u01c7\u0007n\u0002\u0002\u01c7\u01c8\u0007", + "u\u0002\u0002\u01c8\u01c9\u0007g\u0002\u0002\u01c9V\u0003\u0002\u0002", + "\u0002\u01ca\u01cb\u0007y\u0002\u0002\u01cb\u01cc\u0007j\u0002\u0002", + "\u01cc\u01cd\u0007k\u0002\u0002\u01cd\u01ce\u0007n\u0002\u0002\u01ce", + "\u01cf\u0007g\u0002\u0002\u01cfX\u0003\u0002\u0002\u0002\u01d0\u01d1", + "\u0007c\u0002\u0002\u01d1\u01d2\u0007u\u0002\u0002\u01d2\u01d3\u0007", + "u\u0002\u0002\u01d3\u01d4\u0007g\u0002\u0002\u01d4\u01d5\u0007o\u0002", + "\u0002\u01d5\u01d6\u0007d\u0002\u0002\u01d6\u01d7\u0007n\u0002\u0002", + "\u01d7\u01d8\u0007{\u0002\u0002\u01d8Z\u0003\u0002\u0002\u0002\u01d9", + "\u01da\u0007f\u0002\u0002\u01da\u01db\u0007q\u0002\u0002\u01db\\\u0003", + "\u0002\u0002\u0002\u01dc\u01dd\u0007t\u0002\u0002\u01dd\u01de\u0007", + "g\u0002\u0002\u01de\u01df\u0007v\u0002\u0002\u01df\u01e0\u0007w\u0002", + "\u0002\u01e0\u01e1\u0007t\u0002\u0002\u01e1\u01e2\u0007p\u0002\u0002", + "\u01e2^\u0003\u0002\u0002\u0002\u01e3\u01e4\u0007v\u0002\u0002\u01e4", + "\u01e5\u0007j\u0002\u0002\u01e5\u01e6\u0007t\u0002\u0002\u01e6\u01e7", + "\u0007q\u0002\u0002\u01e7\u01e8\u0007y\u0002\u0002\u01e8`\u0003\u0002", + "\u0002\u0002\u01e9\u01ea\u0007g\u0002\u0002\u01ea\u01eb\u0007o\u0002", + "\u0002\u01eb\u01ec\u0007k\u0002\u0002\u01ec\u01ed\u0007v\u0002\u0002", + "\u01edb\u0003\u0002\u0002\u0002\u01ee\u01ef\u0007x\u0002\u0002\u01ef", + "\u01f0\u0007c\u0002\u0002\u01f0\u01f1\u0007t\u0002\u0002\u01f1d\u0003", + "\u0002\u0002\u0002\u01f2\u01f3\u0007d\u0002\u0002\u01f3\u01f4\u0007", + "q\u0002\u0002\u01f4\u01f5\u0007q\u0002\u0002\u01f5\u01f6\u0007n\u0002", + "\u0002\u01f6f\u0003\u0002\u0002\u0002\u01f7\u01f8\u0007u\u0002\u0002", + "\u01f8\u01f9\u0007v\u0002\u0002\u01f9\u01fa\u0007t\u0002\u0002\u01fa", + "\u01fb\u0007k\u0002\u0002\u01fb\u01fc\u0007p\u0002\u0002\u01fc\u01fd", + "\u0007i\u0002\u0002\u01fdh\u0003\u0002\u0002\u0002\u01fe\u01ff\u0007", + "d\u0002\u0002\u01ff\u0200\u0007{\u0002\u0002\u0200\u0201\u0007v\u0002", + "\u0002\u0201\u0202\u0007g\u0002\u0002\u0202j\u0003\u0002\u0002\u0002", + "\u0203\u0204\u0007-\u0002\u0002\u0204\u0205\u0007-\u0002\u0002\u0205", + "l\u0003\u0002\u0002\u0002\u0206\u0207\u0007/\u0002\u0002\u0207\u0208", + "\u0007/\u0002\u0002\u0208n\u0003\u0002\u0002\u0002\u0209\u020a\u0007", + "p\u0002\u0002\u020a\u020b\u0007g\u0002\u0002\u020b\u020c\u0007y\u0002", + "\u0002\u020cp\u0003\u0002\u0002\u0002\u020d\u020e\u0007-\u0002\u0002", + "\u020er\u0003\u0002\u0002\u0002\u020f\u0210\u0007/\u0002\u0002\u0210", + "t\u0003\u0002\u0002\u0002\u0211\u0212\u0007c\u0002\u0002\u0212\u0213", + "\u0007h\u0002\u0002\u0213\u0214\u0007v\u0002\u0002\u0214\u0215\u0007", + "g\u0002\u0002\u0215\u0216\u0007t\u0002\u0002\u0216v\u0003\u0002\u0002", + "\u0002\u0217\u0218\u0007f\u0002\u0002\u0218\u0219\u0007g\u0002\u0002", + "\u0219\u021a\u0007n\u0002\u0002\u021a\u021b\u0007g\u0002\u0002\u021b", + "\u021c\u0007v\u0002\u0002\u021c\u021d\u0007g\u0002\u0002\u021dx\u0003", + "\u0002\u0002\u0002\u021e\u021f\u0007#\u0002\u0002\u021fz\u0003\u0002", + "\u0002\u0002\u0220\u0221\u0007,\u0002\u0002\u0221\u0222\u0007,\u0002", + "\u0002\u0222|\u0003\u0002\u0002\u0002\u0223\u0224\u00071\u0002\u0002", + "\u0224~\u0003\u0002\u0002\u0002\u0225\u0226\u0007\'\u0002\u0002\u0226", + "\u0080\u0003\u0002\u0002\u0002\u0227\u0228\u0007>\u0002\u0002\u0228", + "\u0229\u0007>\u0002\u0002\u0229\u0082\u0003\u0002\u0002\u0002\u022a", + "\u022b\u0007@\u0002\u0002\u022b\u022c\u0007@\u0002\u0002\u022c\u0084", + "\u0003\u0002\u0002\u0002\u022d\u022e\u0007(\u0002\u0002\u022e\u0086", + "\u0003\u0002\u0002\u0002\u022f\u0230\u0007~\u0002\u0002\u0230\u0088", + "\u0003\u0002\u0002\u0002\u0231\u0232\u0007?\u0002\u0002\u0232\u0233", + "\u0007?\u0002\u0002\u0233\u008a\u0003\u0002\u0002\u0002\u0234\u0235", + "\u0007#\u0002\u0002\u0235\u0236\u0007?\u0002\u0002\u0236\u008c\u0003", + "\u0002\u0002\u0002\u0237\u0238\u0007(\u0002\u0002\u0238\u0239\u0007", + "(\u0002\u0002\u0239\u008e\u0003\u0002\u0002\u0002\u023a\u023b\u0007", + "~\u0002\u0002\u023b\u023c\u0007~\u0002\u0002\u023c\u0090\u0003\u0002", + "\u0002\u0002\u023d\u023e\u0007A\u0002\u0002\u023e\u0092\u0003\u0002", + "\u0002\u0002\u023f\u0240\u0007<\u0002\u0002\u0240\u0094\u0003\u0002", + "\u0002\u0002\u0241\u0242\u0007~\u0002\u0002\u0242\u0243\u0007?\u0002", + "\u0002\u0243\u0096\u0003\u0002\u0002\u0002\u0244\u0245\u0007`\u0002", + "\u0002\u0245\u0246\u0007?\u0002\u0002\u0246\u0098\u0003\u0002\u0002", + "\u0002\u0247\u0248\u0007(\u0002\u0002\u0248\u0249\u0007?\u0002\u0002", + "\u0249\u009a\u0003\u0002\u0002\u0002\u024a\u024b\u0007>\u0002\u0002", + "\u024b\u024c\u0007>\u0002\u0002\u024c\u024d\u0007?\u0002\u0002\u024d", + "\u009c\u0003\u0002\u0002\u0002\u024e\u024f\u0007@\u0002\u0002\u024f", + "\u0250\u0007@\u0002\u0002\u0250\u0251\u0007?\u0002\u0002\u0251\u009e", + "\u0003\u0002\u0002\u0002\u0252\u0253\u0007-\u0002\u0002\u0253\u0254", + "\u0007?\u0002\u0002\u0254\u00a0\u0003\u0002\u0002\u0002\u0255\u0256", + "\u0007/\u0002\u0002\u0256\u0257\u0007?\u0002\u0002\u0257\u00a2\u0003", + "\u0002\u0002\u0002\u0258\u0259\u0007,\u0002\u0002\u0259\u025a\u0007", + "?\u0002\u0002\u025a\u00a4\u0003\u0002\u0002\u0002\u025b\u025c\u0007", + "1\u0002\u0002\u025c\u025d\u0007?\u0002\u0002\u025d\u00a6\u0003\u0002", + "\u0002\u0002\u025e\u025f\u0007\'\u0002\u0002\u025f\u0260\u0007?\u0002", + "\u0002\u0260\u00a8\u0003\u0002\u0002\u0002\u0261\u0262\u0007n\u0002", + "\u0002\u0262\u0263\u0007g\u0002\u0002\u0263\u0264\u0007v\u0002\u0002", + "\u0264\u00aa\u0003\u0002\u0002\u0002\u0265\u0266\u0007<\u0002\u0002", + "\u0266\u0267\u0007?\u0002\u0002\u0267\u00ac\u0003\u0002\u0002\u0002", + "\u0268\u0269\u0007?\u0002\u0002\u0269\u026a\u0007<\u0002\u0002\u026a", + "\u00ae\u0003\u0002\u0002\u0002\u026b\u026c\u0007u\u0002\u0002\u026c", + "\u026d\u0007y\u0002\u0002\u026d\u026e\u0007k\u0002\u0002\u026e\u026f", + "\u0007v\u0002\u0002\u026f\u0270\u0007e\u0002\u0002\u0270\u0271\u0007", + "j\u0002\u0002\u0271\u00b0\u0003\u0002\u0002\u0002\u0272\u0273\u0007", + "e\u0002\u0002\u0273\u0274\u0007c\u0002\u0002\u0274\u0275\u0007u\u0002", + "\u0002\u0275\u0276\u0007g\u0002\u0002\u0276\u00b2\u0003\u0002\u0002", + "\u0002\u0277\u0278\u0007f\u0002\u0002\u0278\u0279\u0007g\u0002\u0002", + "\u0279\u027a\u0007h\u0002\u0002\u027a\u027b\u0007c\u0002\u0002\u027b", + "\u027c\u0007w\u0002\u0002\u027c\u027d\u0007n\u0002\u0002\u027d\u027e", + "\u0007v\u0002\u0002\u027e\u00b4\u0003\u0002\u0002\u0002\u027f\u0280", + "\u0007/\u0002\u0002\u0280\u0281\u0007@\u0002\u0002\u0281\u00b6\u0003", + "\u0002\u0002\u0002\u0282\u0283\u0007k\u0002\u0002\u0283\u0284\u0007", + "p\u0002\u0002\u0284\u0339\u0007v\u0002\u0002\u0285\u0286\u0007k\u0002", + "\u0002\u0286\u0287\u0007p\u0002\u0002\u0287\u0288\u0007v\u0002\u0002", + "\u0288\u0339\u0007:\u0002\u0002\u0289\u028a\u0007k\u0002\u0002\u028a", + "\u028b\u0007p\u0002\u0002\u028b\u028c\u0007v\u0002\u0002\u028c\u028d", + "\u00073\u0002\u0002\u028d\u0339\u00078\u0002\u0002\u028e\u028f\u0007", + "k\u0002\u0002\u028f\u0290\u0007p\u0002\u0002\u0290\u0291\u0007v\u0002", + "\u0002\u0291\u0292\u00074\u0002\u0002\u0292\u0339\u00076\u0002\u0002", + "\u0293\u0294\u0007k\u0002\u0002\u0294\u0295\u0007p\u0002\u0002\u0295", + "\u0296\u0007v\u0002\u0002\u0296\u0297\u00075\u0002\u0002\u0297\u0339", + "\u00074\u0002\u0002\u0298\u0299\u0007k\u0002\u0002\u0299\u029a\u0007", + "p\u0002\u0002\u029a\u029b\u0007v\u0002\u0002\u029b\u029c\u00076\u0002", + "\u0002\u029c\u0339\u00072\u0002\u0002\u029d\u029e\u0007k\u0002\u0002", + "\u029e\u029f\u0007p\u0002\u0002\u029f\u02a0\u0007v\u0002\u0002\u02a0", + "\u02a1\u00076\u0002\u0002\u02a1\u0339\u0007:\u0002\u0002\u02a2\u02a3", + "\u0007k\u0002\u0002\u02a3\u02a4\u0007p\u0002\u0002\u02a4\u02a5\u0007", + "v\u0002\u0002\u02a5\u02a6\u00077\u0002\u0002\u02a6\u0339\u00078\u0002", + "\u0002\u02a7\u02a8\u0007k\u0002\u0002\u02a8\u02a9\u0007p\u0002\u0002", + "\u02a9\u02aa\u0007v\u0002\u0002\u02aa\u02ab\u00078\u0002\u0002\u02ab", + "\u0339\u00076\u0002\u0002\u02ac\u02ad\u0007k\u0002\u0002\u02ad\u02ae", + "\u0007p\u0002\u0002\u02ae\u02af\u0007v\u0002\u0002\u02af\u02b0\u0007", + "9\u0002\u0002\u02b0\u0339\u00074\u0002\u0002\u02b1\u02b2\u0007k\u0002", + "\u0002\u02b2\u02b3\u0007p\u0002\u0002\u02b3\u02b4\u0007v\u0002\u0002", + "\u02b4\u02b5\u0007:\u0002\u0002\u02b5\u0339\u00072\u0002\u0002\u02b6", + "\u02b7\u0007k\u0002\u0002\u02b7\u02b8\u0007p\u0002\u0002\u02b8\u02b9", + "\u0007v\u0002\u0002\u02b9\u02ba\u0007:\u0002\u0002\u02ba\u0339\u0007", + ":\u0002\u0002\u02bb\u02bc\u0007k\u0002\u0002\u02bc\u02bd\u0007p\u0002", + "\u0002\u02bd\u02be\u0007v\u0002\u0002\u02be\u02bf\u0007;\u0002\u0002", + "\u02bf\u0339\u00078\u0002\u0002\u02c0\u02c1\u0007k\u0002\u0002\u02c1", + "\u02c2\u0007p\u0002\u0002\u02c2\u02c3\u0007v\u0002\u0002\u02c3\u02c4", + "\u00073\u0002\u0002\u02c4\u02c5\u00072\u0002\u0002\u02c5\u0339\u0007", + "6\u0002\u0002\u02c6\u02c7\u0007k\u0002\u0002\u02c7\u02c8\u0007p\u0002", + "\u0002\u02c8\u02c9\u0007v\u0002\u0002\u02c9\u02ca\u00073\u0002\u0002", + "\u02ca\u02cb\u00073\u0002\u0002\u02cb\u0339\u00074\u0002\u0002\u02cc", + "\u02cd\u0007k\u0002\u0002\u02cd\u02ce\u0007p\u0002\u0002\u02ce\u02cf", + "\u0007v\u0002\u0002\u02cf\u02d0\u00073\u0002\u0002\u02d0\u02d1\u0007", + "4\u0002\u0002\u02d1\u0339\u00072\u0002\u0002\u02d2\u02d3\u0007k\u0002", + "\u0002\u02d3\u02d4\u0007p\u0002\u0002\u02d4\u02d5\u0007v\u0002\u0002", + "\u02d5\u02d6\u00073\u0002\u0002\u02d6\u02d7\u00074\u0002\u0002\u02d7", + "\u0339\u0007:\u0002\u0002\u02d8\u02d9\u0007k\u0002\u0002\u02d9\u02da", + "\u0007p\u0002\u0002\u02da\u02db\u0007v\u0002\u0002\u02db\u02dc\u0007", + "3\u0002\u0002\u02dc\u02dd\u00075\u0002\u0002\u02dd\u0339\u00078\u0002", + "\u0002\u02de\u02df\u0007k\u0002\u0002\u02df\u02e0\u0007p\u0002\u0002", + "\u02e0\u02e1\u0007v\u0002\u0002\u02e1\u02e2\u00073\u0002\u0002\u02e2", + "\u02e3\u00076\u0002\u0002\u02e3\u0339\u00076\u0002\u0002\u02e4\u02e5", + "\u0007k\u0002\u0002\u02e5\u02e6\u0007p\u0002\u0002\u02e6\u02e7\u0007", + "v\u0002\u0002\u02e7\u02e8\u00073\u0002\u0002\u02e8\u02e9\u00077\u0002", + "\u0002\u02e9\u0339\u00074\u0002\u0002\u02ea\u02eb\u0007k\u0002\u0002", + "\u02eb\u02ec\u0007p\u0002\u0002\u02ec\u02ed\u0007v\u0002\u0002\u02ed", + "\u02ee\u00073\u0002\u0002\u02ee\u02ef\u00078\u0002\u0002\u02ef\u0339", + "\u00072\u0002\u0002\u02f0\u02f1\u0007k\u0002\u0002\u02f1\u02f2\u0007", + "p\u0002\u0002\u02f2\u02f3\u0007v\u0002\u0002\u02f3\u02f4\u00073\u0002", + "\u0002\u02f4\u02f5\u00078\u0002\u0002\u02f5\u0339\u0007:\u0002\u0002", + "\u02f6\u02f7\u0007k\u0002\u0002\u02f7\u02f8\u0007p\u0002\u0002\u02f8", + "\u02f9\u0007v\u0002\u0002\u02f9\u02fa\u00073\u0002\u0002\u02fa\u02fb", + "\u00079\u0002\u0002\u02fb\u0339\u00078\u0002\u0002\u02fc\u02fd\u0007", + "k\u0002\u0002\u02fd\u02fe\u0007p\u0002\u0002\u02fe\u02ff\u0007v\u0002", + "\u0002\u02ff\u0300\u00073\u0002\u0002\u0300\u0301\u0007:\u0002\u0002", + "\u0301\u0339\u00076\u0002\u0002\u0302\u0303\u0007k\u0002\u0002\u0303", + "\u0304\u0007p\u0002\u0002\u0304\u0305\u0007v\u0002\u0002\u0305\u0306", + "\u00073\u0002\u0002\u0306\u0307\u0007;\u0002\u0002\u0307\u0339\u0007", + "4\u0002\u0002\u0308\u0309\u0007k\u0002\u0002\u0309\u030a\u0007p\u0002", + "\u0002\u030a\u030b\u0007v\u0002\u0002\u030b\u030c\u00074\u0002\u0002", + "\u030c\u030d\u00072\u0002\u0002\u030d\u0339\u00072\u0002\u0002\u030e", + "\u030f\u0007k\u0002\u0002\u030f\u0310\u0007p\u0002\u0002\u0310\u0311", + "\u0007v\u0002\u0002\u0311\u0312\u00074\u0002\u0002\u0312\u0313\u0007", + "2\u0002\u0002\u0313\u0339\u0007:\u0002\u0002\u0314\u0315\u0007k\u0002", + "\u0002\u0315\u0316\u0007p\u0002\u0002\u0316\u0317\u0007v\u0002\u0002", + "\u0317\u0318\u00074\u0002\u0002\u0318\u0319\u00073\u0002\u0002\u0319", + "\u0339\u00078\u0002\u0002\u031a\u031b\u0007k\u0002\u0002\u031b\u031c", + "\u0007p\u0002\u0002\u031c\u031d\u0007v\u0002\u0002\u031d\u031e\u0007", + "4\u0002\u0002\u031e\u031f\u00074\u0002\u0002\u031f\u0339\u00076\u0002", + "\u0002\u0320\u0321\u0007k\u0002\u0002\u0321\u0322\u0007p\u0002\u0002", + "\u0322\u0323\u0007v\u0002\u0002\u0323\u0324\u00074\u0002\u0002\u0324", + "\u0325\u00075\u0002\u0002\u0325\u0339\u00074\u0002\u0002\u0326\u0327", + "\u0007k\u0002\u0002\u0327\u0328\u0007p\u0002\u0002\u0328\u0329\u0007", + "v\u0002\u0002\u0329\u032a\u00074\u0002\u0002\u032a\u032b\u00076\u0002", + "\u0002\u032b\u0339\u00072\u0002\u0002\u032c\u032d\u0007k\u0002\u0002", + "\u032d\u032e\u0007p\u0002\u0002\u032e\u032f\u0007v\u0002\u0002\u032f", + "\u0330\u00074\u0002\u0002\u0330\u0331\u00076\u0002\u0002\u0331\u0339", + "\u0007:\u0002\u0002\u0332\u0333\u0007k\u0002\u0002\u0333\u0334\u0007", + "p\u0002\u0002\u0334\u0335\u0007v\u0002\u0002\u0335\u0336\u00074\u0002", + "\u0002\u0336\u0337\u00077\u0002\u0002\u0337\u0339\u00078\u0002\u0002", + "\u0338\u0282\u0003\u0002\u0002\u0002\u0338\u0285\u0003\u0002\u0002\u0002", + "\u0338\u0289\u0003\u0002\u0002\u0002\u0338\u028e\u0003\u0002\u0002\u0002", + "\u0338\u0293\u0003\u0002\u0002\u0002\u0338\u0298\u0003\u0002\u0002\u0002", + "\u0338\u029d\u0003\u0002\u0002\u0002\u0338\u02a2\u0003\u0002\u0002\u0002", + "\u0338\u02a7\u0003\u0002\u0002\u0002\u0338\u02ac\u0003\u0002\u0002\u0002", + "\u0338\u02b1\u0003\u0002\u0002\u0002\u0338\u02b6\u0003\u0002\u0002\u0002", + "\u0338\u02bb\u0003\u0002\u0002\u0002\u0338\u02c0\u0003\u0002\u0002\u0002", + "\u0338\u02c6\u0003\u0002\u0002\u0002\u0338\u02cc\u0003\u0002\u0002\u0002", + "\u0338\u02d2\u0003\u0002\u0002\u0002\u0338\u02d8\u0003\u0002\u0002\u0002", + "\u0338\u02de\u0003\u0002\u0002\u0002\u0338\u02e4\u0003\u0002\u0002\u0002", + "\u0338\u02ea\u0003\u0002\u0002\u0002\u0338\u02f0\u0003\u0002\u0002\u0002", + "\u0338\u02f6\u0003\u0002\u0002\u0002\u0338\u02fc\u0003\u0002\u0002\u0002", + "\u0338\u0302\u0003\u0002\u0002\u0002\u0338\u0308\u0003\u0002\u0002\u0002", + "\u0338\u030e\u0003\u0002\u0002\u0002\u0338\u0314\u0003\u0002\u0002\u0002", + "\u0338\u031a\u0003\u0002\u0002\u0002\u0338\u0320\u0003\u0002\u0002\u0002", + "\u0338\u0326\u0003\u0002\u0002\u0002\u0338\u032c\u0003\u0002\u0002\u0002", + "\u0338\u0332\u0003\u0002\u0002\u0002\u0339\u00b8\u0003\u0002\u0002\u0002", + "\u033a\u033b\u0007w\u0002\u0002\u033b\u033c\u0007k\u0002\u0002\u033c", + "\u033d\u0007p\u0002\u0002\u033d\u0412\u0007v\u0002\u0002\u033e\u033f", + "\u0007w\u0002\u0002\u033f\u0340\u0007k\u0002\u0002\u0340\u0341\u0007", + "p\u0002\u0002\u0341\u0342\u0007v\u0002\u0002\u0342\u0412\u0007:\u0002", + "\u0002\u0343\u0344\u0007w\u0002\u0002\u0344\u0345\u0007k\u0002\u0002", + "\u0345\u0346\u0007p\u0002\u0002\u0346\u0347\u0007v\u0002\u0002\u0347", + "\u0348\u00073\u0002\u0002\u0348\u0412\u00078\u0002\u0002\u0349\u034a", + "\u0007w\u0002\u0002\u034a\u034b\u0007k\u0002\u0002\u034b\u034c\u0007", + "p\u0002\u0002\u034c\u034d\u0007v\u0002\u0002\u034d\u034e\u00074\u0002", + "\u0002\u034e\u0412\u00076\u0002\u0002\u034f\u0350\u0007w\u0002\u0002", + "\u0350\u0351\u0007k\u0002\u0002\u0351\u0352\u0007p\u0002\u0002\u0352", + "\u0353\u0007v\u0002\u0002\u0353\u0354\u00075\u0002\u0002\u0354\u0412", + "\u00074\u0002\u0002\u0355\u0356\u0007w\u0002\u0002\u0356\u0357\u0007", + "k\u0002\u0002\u0357\u0358\u0007p\u0002\u0002\u0358\u0359\u0007v\u0002", + "\u0002\u0359\u035a\u00076\u0002\u0002\u035a\u0412\u00072\u0002\u0002", + "\u035b\u035c\u0007w\u0002\u0002\u035c\u035d\u0007k\u0002\u0002\u035d", + "\u035e\u0007p\u0002\u0002\u035e\u035f\u0007v\u0002\u0002\u035f\u0360", + "\u00076\u0002\u0002\u0360\u0412\u0007:\u0002\u0002\u0361\u0362\u0007", + "w\u0002\u0002\u0362\u0363\u0007k\u0002\u0002\u0363\u0364\u0007p\u0002", + "\u0002\u0364\u0365\u0007v\u0002\u0002\u0365\u0366\u00077\u0002\u0002", + "\u0366\u0412\u00078\u0002\u0002\u0367\u0368\u0007w\u0002\u0002\u0368", + "\u0369\u0007k\u0002\u0002\u0369\u036a\u0007p\u0002\u0002\u036a\u036b", + "\u0007v\u0002\u0002\u036b\u036c\u00078\u0002\u0002\u036c\u0412\u0007", + "6\u0002\u0002\u036d\u036e\u0007w\u0002\u0002\u036e\u036f\u0007k\u0002", + "\u0002\u036f\u0370\u0007p\u0002\u0002\u0370\u0371\u0007v\u0002\u0002", + "\u0371\u0372\u00079\u0002\u0002\u0372\u0412\u00074\u0002\u0002\u0373", + "\u0374\u0007w\u0002\u0002\u0374\u0375\u0007k\u0002\u0002\u0375\u0376", + "\u0007p\u0002\u0002\u0376\u0377\u0007v\u0002\u0002\u0377\u0378\u0007", + ":\u0002\u0002\u0378\u0412\u00072\u0002\u0002\u0379\u037a\u0007w\u0002", + "\u0002\u037a\u037b\u0007k\u0002\u0002\u037b\u037c\u0007p\u0002\u0002", + "\u037c\u037d\u0007v\u0002\u0002\u037d\u037e\u0007:\u0002\u0002\u037e", + "\u0412\u0007:\u0002\u0002\u037f\u0380\u0007w\u0002\u0002\u0380\u0381", + "\u0007k\u0002\u0002\u0381\u0382\u0007p\u0002\u0002\u0382\u0383\u0007", + "v\u0002\u0002\u0383\u0384\u0007;\u0002\u0002\u0384\u0412\u00078\u0002", + "\u0002\u0385\u0386\u0007w\u0002\u0002\u0386\u0387\u0007k\u0002\u0002", + "\u0387\u0388\u0007p\u0002\u0002\u0388\u0389\u0007v\u0002\u0002\u0389", + "\u038a\u00073\u0002\u0002\u038a\u038b\u00072\u0002\u0002\u038b\u0412", + "\u00076\u0002\u0002\u038c\u038d\u0007w\u0002\u0002\u038d\u038e\u0007", + "k\u0002\u0002\u038e\u038f\u0007p\u0002\u0002\u038f\u0390\u0007v\u0002", + "\u0002\u0390\u0391\u00073\u0002\u0002\u0391\u0392\u00073\u0002\u0002", + "\u0392\u0412\u00074\u0002\u0002\u0393\u0394\u0007w\u0002\u0002\u0394", + "\u0395\u0007k\u0002\u0002\u0395\u0396\u0007p\u0002\u0002\u0396\u0397", + "\u0007v\u0002\u0002\u0397\u0398\u00073\u0002\u0002\u0398\u0399\u0007", + "4\u0002\u0002\u0399\u0412\u00072\u0002\u0002\u039a\u039b\u0007w\u0002", + "\u0002\u039b\u039c\u0007k\u0002\u0002\u039c\u039d\u0007p\u0002\u0002", + "\u039d\u039e\u0007v\u0002\u0002\u039e\u039f\u00073\u0002\u0002\u039f", + "\u03a0\u00074\u0002\u0002\u03a0\u0412\u0007:\u0002\u0002\u03a1\u03a2", + "\u0007w\u0002\u0002\u03a2\u03a3\u0007k\u0002\u0002\u03a3\u03a4\u0007", + "p\u0002\u0002\u03a4\u03a5\u0007v\u0002\u0002\u03a5\u03a6\u00073\u0002", + "\u0002\u03a6\u03a7\u00075\u0002\u0002\u03a7\u0412\u00078\u0002\u0002", + "\u03a8\u03a9\u0007w\u0002\u0002\u03a9\u03aa\u0007k\u0002\u0002\u03aa", + "\u03ab\u0007p\u0002\u0002\u03ab\u03ac\u0007v\u0002\u0002\u03ac\u03ad", + "\u00073\u0002\u0002\u03ad\u03ae\u00076\u0002\u0002\u03ae\u0412\u0007", + "6\u0002\u0002\u03af\u03b0\u0007w\u0002\u0002\u03b0\u03b1\u0007k\u0002", + "\u0002\u03b1\u03b2\u0007p\u0002\u0002\u03b2\u03b3\u0007v\u0002\u0002", + "\u03b3\u03b4\u00073\u0002\u0002\u03b4\u03b5\u00077\u0002\u0002\u03b5", + "\u0412\u00074\u0002\u0002\u03b6\u03b7\u0007w\u0002\u0002\u03b7\u03b8", + "\u0007k\u0002\u0002\u03b8\u03b9\u0007p\u0002\u0002\u03b9\u03ba\u0007", + "v\u0002\u0002\u03ba\u03bb\u00073\u0002\u0002\u03bb\u03bc\u00078\u0002", + "\u0002\u03bc\u0412\u00072\u0002\u0002\u03bd\u03be\u0007w\u0002\u0002", + "\u03be\u03bf\u0007k\u0002\u0002\u03bf\u03c0\u0007p\u0002\u0002\u03c0", + "\u03c1\u0007v\u0002\u0002\u03c1\u03c2\u00073\u0002\u0002\u03c2\u03c3", + "\u00078\u0002\u0002\u03c3\u0412\u0007:\u0002\u0002\u03c4\u03c5\u0007", + "w\u0002\u0002\u03c5\u03c6\u0007k\u0002\u0002\u03c6\u03c7\u0007p\u0002", + "\u0002\u03c7\u03c8\u0007v\u0002\u0002\u03c8\u03c9\u00073\u0002\u0002", + "\u03c9\u03ca\u00079\u0002\u0002\u03ca\u0412\u00078\u0002\u0002\u03cb", + "\u03cc\u0007w\u0002\u0002\u03cc\u03cd\u0007k\u0002\u0002\u03cd\u03ce", + "\u0007p\u0002\u0002\u03ce\u03cf\u0007v\u0002\u0002\u03cf\u03d0\u0007", + "3\u0002\u0002\u03d0\u03d1\u0007:\u0002\u0002\u03d1\u0412\u00076\u0002", + "\u0002\u03d2\u03d3\u0007w\u0002\u0002\u03d3\u03d4\u0007k\u0002\u0002", + "\u03d4\u03d5\u0007p\u0002\u0002\u03d5\u03d6\u0007v\u0002\u0002\u03d6", + "\u03d7\u00073\u0002\u0002\u03d7\u03d8\u0007;\u0002\u0002\u03d8\u0412", + "\u00074\u0002\u0002\u03d9\u03da\u0007w\u0002\u0002\u03da\u03db\u0007", + "k\u0002\u0002\u03db\u03dc\u0007p\u0002\u0002\u03dc\u03dd\u0007v\u0002", + "\u0002\u03dd\u03de\u00074\u0002\u0002\u03de\u03df\u00072\u0002\u0002", + "\u03df\u0412\u00072\u0002\u0002\u03e0\u03e1\u0007w\u0002\u0002\u03e1", + "\u03e2\u0007k\u0002\u0002\u03e2\u03e3\u0007p\u0002\u0002\u03e3\u03e4", + "\u0007v\u0002\u0002\u03e4\u03e5\u00074\u0002\u0002\u03e5\u03e6\u0007", + "2\u0002\u0002\u03e6\u0412\u0007:\u0002\u0002\u03e7\u03e8\u0007w\u0002", + "\u0002\u03e8\u03e9\u0007k\u0002\u0002\u03e9\u03ea\u0007p\u0002\u0002", + "\u03ea\u03eb\u0007v\u0002\u0002\u03eb\u03ec\u00074\u0002\u0002\u03ec", + "\u03ed\u00073\u0002\u0002\u03ed\u0412\u00078\u0002\u0002\u03ee\u03ef", + "\u0007w\u0002\u0002\u03ef\u03f0\u0007k\u0002\u0002\u03f0\u03f1\u0007", + "p\u0002\u0002\u03f1\u03f2\u0007v\u0002\u0002\u03f2\u03f3\u00074\u0002", + "\u0002\u03f3\u03f4\u00074\u0002\u0002\u03f4\u0412\u00076\u0002\u0002", + "\u03f5\u03f6\u0007w\u0002\u0002\u03f6\u03f7\u0007k\u0002\u0002\u03f7", + "\u03f8\u0007p\u0002\u0002\u03f8\u03f9\u0007v\u0002\u0002\u03f9\u03fa", + "\u00074\u0002\u0002\u03fa\u03fb\u00075\u0002\u0002\u03fb\u0412\u0007", + "4\u0002\u0002\u03fc\u03fd\u0007w\u0002\u0002\u03fd\u03fe\u0007k\u0002", + "\u0002\u03fe\u03ff\u0007p\u0002\u0002\u03ff\u0400\u0007v\u0002\u0002", + "\u0400\u0401\u00074\u0002\u0002\u0401\u0402\u00076\u0002\u0002\u0402", + "\u0412\u00072\u0002\u0002\u0403\u0404\u0007w\u0002\u0002\u0404\u0405", + "\u0007k\u0002\u0002\u0405\u0406\u0007p\u0002\u0002\u0406\u0407\u0007", + "v\u0002\u0002\u0407\u0408\u00074\u0002\u0002\u0408\u0409\u00076\u0002", + "\u0002\u0409\u0412\u0007:\u0002\u0002\u040a\u040b\u0007w\u0002\u0002", + "\u040b\u040c\u0007k\u0002\u0002\u040c\u040d\u0007p\u0002\u0002\u040d", + "\u040e\u0007v\u0002\u0002\u040e\u040f\u00074\u0002\u0002\u040f\u0410", + "\u00077\u0002\u0002\u0410\u0412\u00078\u0002\u0002\u0411\u033a\u0003", + "\u0002\u0002\u0002\u0411\u033e\u0003\u0002\u0002\u0002\u0411\u0343\u0003", + "\u0002\u0002\u0002\u0411\u0349\u0003\u0002\u0002\u0002\u0411\u034f\u0003", + "\u0002\u0002\u0002\u0411\u0355\u0003\u0002\u0002\u0002\u0411\u035b\u0003", + "\u0002\u0002\u0002\u0411\u0361\u0003\u0002\u0002\u0002\u0411\u0367\u0003", + "\u0002\u0002\u0002\u0411\u036d\u0003\u0002\u0002\u0002\u0411\u0373\u0003", + "\u0002\u0002\u0002\u0411\u0379\u0003\u0002\u0002\u0002\u0411\u037f\u0003", + "\u0002\u0002\u0002\u0411\u0385\u0003\u0002\u0002\u0002\u0411\u038c\u0003", + "\u0002\u0002\u0002\u0411\u0393\u0003\u0002\u0002\u0002\u0411\u039a\u0003", + "\u0002\u0002\u0002\u0411\u03a1\u0003\u0002\u0002\u0002\u0411\u03a8\u0003", + "\u0002\u0002\u0002\u0411\u03af\u0003\u0002\u0002\u0002\u0411\u03b6\u0003", + "\u0002\u0002\u0002\u0411\u03bd\u0003\u0002\u0002\u0002\u0411\u03c4\u0003", + "\u0002\u0002\u0002\u0411\u03cb\u0003\u0002\u0002\u0002\u0411\u03d2\u0003", + "\u0002\u0002\u0002\u0411\u03d9\u0003\u0002\u0002\u0002\u0411\u03e0\u0003", + "\u0002\u0002\u0002\u0411\u03e7\u0003\u0002\u0002\u0002\u0411\u03ee\u0003", + "\u0002\u0002\u0002\u0411\u03f5\u0003\u0002\u0002\u0002\u0411\u03fc\u0003", + "\u0002\u0002\u0002\u0411\u0403\u0003\u0002\u0002\u0002\u0411\u040a\u0003", + "\u0002\u0002\u0002\u0412\u00ba\u0003\u0002\u0002\u0002\u0413\u0414\u0007", + "d\u0002\u0002\u0414\u0415\u0007{\u0002\u0002\u0415\u0416\u0007v\u0002", "\u0002\u0416\u0417\u0007g\u0002\u0002\u0417\u04f0\u0007u\u0002\u0002", "\u0418\u0419\u0007d\u0002\u0002\u0419\u041a\u0007{\u0002\u0002\u041a", "\u041b\u0007v\u0002\u0002\u041b\u041c\u0007g\u0002\u0002\u041c\u041d", @@ -890,192 +890,192 @@ var serializedATN = ["\u0003\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964", "\u0002\u0002\u0556\u0557\u0003\u0002\u0002\u0002\u0557\u0559\u0003\u0002", "\u0002\u0002\u0558\u0552\u0003\u0002\u0002\u0002\u0558\u0559\u0003\u0002", "\u0002\u0002\u0559\u00c6\u0003\u0002\u0002\u0002\u055a\u055b\u00072", - "\u0002\u0002\u055b\u055c\u0007z\u0002\u0002\u055c\u055e\u0003\u0002", - "\u0002\u0002\u055d\u055f\u0005\u00cfh\u0002\u055e\u055d\u0003\u0002", - "\u0002\u0002\u055f\u0560\u0003\u0002\u0002\u0002\u0560\u055e\u0003\u0002", - "\u0002\u0002\u0560\u0561\u0003\u0002\u0002\u0002\u0561\u00c8\u0003\u0002", - "\u0002\u0002\u0562\u0563\u0007y\u0002\u0002\u0563\u0564\u0007g\u0002", - "\u0002\u0564\u0597\u0007k\u0002\u0002\u0565\u0566\u0007u\u0002\u0002", - "\u0566\u0567\u0007|\u0002\u0002\u0567\u0568\u0007c\u0002\u0002\u0568", - "\u0569\u0007d\u0002\u0002\u0569\u0597\u0007q\u0002\u0002\u056a\u056b", - "\u0007h\u0002\u0002\u056b\u056c\u0007k\u0002\u0002\u056c\u056d\u0007", - "p\u0002\u0002\u056d\u056e\u0007p\u0002\u0002\u056e\u056f\u0007g\u0002", - "\u0002\u056f\u0597\u0007{\u0002\u0002\u0570\u0571\u0007g\u0002\u0002", - "\u0571\u0572\u0007v\u0002\u0002\u0572\u0573\u0007j\u0002\u0002\u0573", - "\u0574\u0007g\u0002\u0002\u0574\u0597\u0007t\u0002\u0002\u0575\u0576", - "\u0007u\u0002\u0002\u0576\u0577\u0007g\u0002\u0002\u0577\u0578\u0007", - "e\u0002\u0002\u0578\u0579\u0007q\u0002\u0002\u0579\u057a\u0007p\u0002", - "\u0002\u057a\u057b\u0007f\u0002\u0002\u057b\u0597\u0007u\u0002\u0002", - "\u057c\u057d\u0007o\u0002\u0002\u057d\u057e\u0007k\u0002\u0002\u057e", - "\u057f\u0007p\u0002\u0002\u057f\u0580\u0007w\u0002\u0002\u0580\u0581", - "\u0007v\u0002\u0002\u0581\u0582\u0007g\u0002\u0002\u0582\u0597\u0007", - "u\u0002\u0002\u0583\u0584\u0007j\u0002\u0002\u0584\u0585\u0007q\u0002", - "\u0002\u0585\u0586\u0007w\u0002\u0002\u0586\u0587\u0007t\u0002\u0002", - "\u0587\u0597\u0007u\u0002\u0002\u0588\u0589\u0007f\u0002\u0002\u0589", - "\u058a\u0007c\u0002\u0002\u058a\u058b\u0007{\u0002\u0002\u058b\u0597", - "\u0007u\u0002\u0002\u058c\u058d\u0007y\u0002\u0002\u058d\u058e\u0007", - "g\u0002\u0002\u058e\u058f\u0007g\u0002\u0002\u058f\u0590\u0007m\u0002", - "\u0002\u0590\u0597\u0007u\u0002\u0002\u0591\u0592\u0007{\u0002\u0002", - "\u0592\u0593\u0007g\u0002\u0002\u0593\u0594\u0007c\u0002\u0002\u0594", - "\u0595\u0007t\u0002\u0002\u0595\u0597\u0007u\u0002\u0002\u0596\u0562", - "\u0003\u0002\u0002\u0002\u0596\u0565\u0003\u0002\u0002\u0002\u0596\u056a", - "\u0003\u0002\u0002\u0002\u0596\u0570\u0003\u0002\u0002\u0002\u0596\u0575", - "\u0003\u0002\u0002\u0002\u0596\u057c\u0003\u0002\u0002\u0002\u0596\u0583", - "\u0003\u0002\u0002\u0002\u0596\u0588\u0003\u0002\u0002\u0002\u0596\u058c", - "\u0003\u0002\u0002\u0002\u0596\u0591\u0003\u0002\u0002\u0002\u0597\u00ca", - "\u0003\u0002\u0002\u0002\u0598\u0599\u0007j\u0002\u0002\u0599\u059a", - "\u0007g\u0002\u0002\u059a\u059b\u0007z\u0002\u0002\u059b\u05ac\u0003", - "\u0002\u0002\u0002\u059c\u05a0\u0007$\u0002\u0002\u059d\u059f\u0005", - "\u00cdg\u0002\u059e\u059d\u0003\u0002\u0002\u0002\u059f\u05a2\u0003", - "\u0002\u0002\u0002\u05a0\u059e\u0003\u0002\u0002\u0002\u05a0\u05a1\u0003", - "\u0002\u0002\u0002\u05a1\u05a3\u0003\u0002\u0002\u0002\u05a2\u05a0\u0003", - "\u0002\u0002\u0002\u05a3\u05ad\u0007$\u0002\u0002\u05a4\u05a8\u0007", - ")\u0002\u0002\u05a5\u05a7\u0005\u00cdg\u0002\u05a6\u05a5\u0003\u0002", - "\u0002\u0002\u05a7\u05aa\u0003\u0002\u0002\u0002\u05a8\u05a6\u0003\u0002", - "\u0002\u0002\u05a8\u05a9\u0003\u0002\u0002\u0002\u05a9\u05ab\u0003\u0002", - "\u0002\u0002\u05aa\u05a8\u0003\u0002\u0002\u0002\u05ab\u05ad\u0007)", - "\u0002\u0002\u05ac\u059c\u0003\u0002\u0002\u0002\u05ac\u05a4\u0003\u0002", - "\u0002\u0002\u05ad\u00cc\u0003\u0002\u0002\u0002\u05ae\u05af\u0005\u00cf", - "h\u0002\u05af\u05b0\u0005\u00cfh\u0002\u05b0\u00ce\u0003\u0002\u0002", - "\u0002\u05b1\u05b2\t\u0004\u0002\u0002\u05b2\u00d0\u0003\u0002\u0002", - "\u0002\u05b3\u05b4\u0007c\u0002\u0002\u05b4\u05b5\u0007d\u0002\u0002", - "\u05b5\u05b6\u0007u\u0002\u0002\u05b6\u05b7\u0007v\u0002\u0002\u05b7", - "\u05b8\u0007t\u0002\u0002\u05b8\u05b9\u0007c\u0002\u0002\u05b9\u05ba", - "\u0007e\u0002\u0002\u05ba\u0610\u0007v\u0002\u0002\u05bb\u05bc\u0007", - "c\u0002\u0002\u05bc\u05bd\u0007h\u0002\u0002\u05bd\u05be\u0007v\u0002", - "\u0002\u05be\u05bf\u0007g\u0002\u0002\u05bf\u0610\u0007t\u0002\u0002", - "\u05c0\u05c1\u0007e\u0002\u0002\u05c1\u05c2\u0007c\u0002\u0002\u05c2", - "\u05c3\u0007u\u0002\u0002\u05c3\u0610\u0007g\u0002\u0002\u05c4\u05c5", - "\u0007e\u0002\u0002\u05c5\u05c6\u0007c\u0002\u0002\u05c6\u05c7\u0007", - "v\u0002\u0002\u05c7\u05c8\u0007e\u0002\u0002\u05c8\u0610\u0007j\u0002", - "\u0002\u05c9\u05ca\u0007f\u0002\u0002\u05ca\u05cb\u0007g\u0002\u0002", - "\u05cb\u05cc\u0007h\u0002\u0002\u05cc\u05cd\u0007c\u0002\u0002\u05cd", - "\u05ce\u0007w\u0002\u0002\u05ce\u05cf\u0007n\u0002\u0002\u05cf\u0610", - "\u0007v\u0002\u0002\u05d0\u05d1\u0007h\u0002\u0002\u05d1\u05d2\u0007", - "k\u0002\u0002\u05d2\u05d3\u0007p\u0002\u0002\u05d3\u05d4\u0007c\u0002", - "\u0002\u05d4\u0610\u0007n\u0002\u0002\u05d5\u05d6\u0007k\u0002\u0002", - "\u05d6\u0610\u0007p\u0002\u0002\u05d7\u05d8\u0007k\u0002\u0002\u05d8", - "\u05d9\u0007p\u0002\u0002\u05d9\u05da\u0007n\u0002\u0002\u05da\u05db", - "\u0007k\u0002\u0002\u05db\u05dc\u0007p\u0002\u0002\u05dc\u0610\u0007", - "g\u0002\u0002\u05dd\u05de\u0007n\u0002\u0002\u05de\u05df\u0007g\u0002", - "\u0002\u05df\u0610\u0007v\u0002\u0002\u05e0\u05e1\u0007o\u0002\u0002", - "\u05e1\u05e2\u0007c\u0002\u0002\u05e2\u05e3\u0007v\u0002\u0002\u05e3", - "\u05e4\u0007e\u0002\u0002\u05e4\u0610\u0007j\u0002\u0002\u05e5\u05e6", - "\u0007p\u0002\u0002\u05e6\u05e7\u0007w\u0002\u0002\u05e7\u05e8\u0007", - "n\u0002\u0002\u05e8\u0610\u0007n\u0002\u0002\u05e9\u05ea\u0007q\u0002", - "\u0002\u05ea\u0610\u0007h\u0002\u0002\u05eb\u05ec\u0007t\u0002\u0002", - "\u05ec\u05ed\u0007g\u0002\u0002\u05ed\u05ee\u0007n\u0002\u0002\u05ee", - "\u05ef\u0007q\u0002\u0002\u05ef\u05f0\u0007e\u0002\u0002\u05f0\u05f1", - "\u0007c\u0002\u0002\u05f1\u05f2\u0007v\u0002\u0002\u05f2\u05f3\u0007", - "c\u0002\u0002\u05f3\u05f4\u0007d\u0002\u0002\u05f4\u05f5\u0007n\u0002", - "\u0002\u05f5\u0610\u0007g\u0002\u0002\u05f6\u05f7\u0007u\u0002\u0002", - "\u05f7\u05f8\u0007v\u0002\u0002\u05f8\u05f9\u0007c\u0002\u0002\u05f9", - "\u05fa\u0007v\u0002\u0002\u05fa\u05fb\u0007k\u0002\u0002\u05fb\u0610", - "\u0007e\u0002\u0002\u05fc\u05fd\u0007u\u0002\u0002\u05fd\u05fe\u0007", - "y\u0002\u0002\u05fe\u05ff\u0007k\u0002\u0002\u05ff\u0600\u0007v\u0002", - "\u0002\u0600\u0601\u0007e\u0002\u0002\u0601\u0610\u0007j\u0002\u0002", - "\u0602\u0603\u0007v\u0002\u0002\u0603\u0604\u0007t\u0002\u0002\u0604", - "\u0610\u0007{\u0002\u0002\u0605\u0606\u0007v\u0002\u0002\u0606\u0607", - "\u0007{\u0002\u0002\u0607\u0608\u0007r\u0002\u0002\u0608\u0610\u0007", - "g\u0002\u0002\u0609\u060a\u0007v\u0002\u0002\u060a\u060b\u0007{\u0002", - "\u0002\u060b\u060c\u0007r\u0002\u0002\u060c\u060d\u0007g\u0002\u0002", - "\u060d\u060e\u0007q\u0002\u0002\u060e\u0610\u0007h\u0002\u0002\u060f", - "\u05b3\u0003\u0002\u0002\u0002\u060f\u05bb\u0003\u0002\u0002\u0002\u060f", - "\u05c0\u0003\u0002\u0002\u0002\u060f\u05c4\u0003\u0002\u0002\u0002\u060f", - "\u05c9\u0003\u0002\u0002\u0002\u060f\u05d0\u0003\u0002\u0002\u0002\u060f", - "\u05d5\u0003\u0002\u0002\u0002\u060f\u05d7\u0003\u0002\u0002\u0002\u060f", - "\u05dd\u0003\u0002\u0002\u0002\u060f\u05e0\u0003\u0002\u0002\u0002\u060f", - "\u05e5\u0003\u0002\u0002\u0002\u060f\u05e9\u0003\u0002\u0002\u0002\u060f", - "\u05eb\u0003\u0002\u0002\u0002\u060f\u05f6\u0003\u0002\u0002\u0002\u060f", - "\u05fc\u0003\u0002\u0002\u0002\u060f\u0602\u0003\u0002\u0002\u0002\u060f", - "\u0605\u0003\u0002\u0002\u0002\u060f\u0609\u0003\u0002\u0002\u0002\u0610", - "\u00d2\u0003\u0002\u0002\u0002\u0611\u0612\u0007c\u0002\u0002\u0612", - "\u0613\u0007p\u0002\u0002\u0613\u0614\u0007q\u0002\u0002\u0614\u0615", - "\u0007p\u0002\u0002\u0615\u0616\u0007{\u0002\u0002\u0616\u0617\u0007", - "o\u0002\u0002\u0617\u0618\u0007q\u0002\u0002\u0618\u0619\u0007w\u0002", - "\u0002\u0619\u061a\u0007u\u0002\u0002\u061a\u00d4\u0003\u0002\u0002", - "\u0002\u061b\u061c\u0007d\u0002\u0002\u061c\u061d\u0007t\u0002\u0002", - "\u061d\u061e\u0007g\u0002\u0002\u061e\u061f\u0007c\u0002\u0002\u061f", - "\u0620\u0007m\u0002\u0002\u0620\u00d6\u0003\u0002\u0002\u0002\u0621", - "\u0622\u0007e\u0002\u0002\u0622\u0623\u0007q\u0002\u0002\u0623\u0624", - "\u0007p\u0002\u0002\u0624\u0625\u0007u\u0002\u0002\u0625\u0626\u0007", - "v\u0002\u0002\u0626\u0627\u0007c\u0002\u0002\u0627\u0628\u0007p\u0002", - "\u0002\u0628\u0629\u0007v\u0002\u0002\u0629\u00d8\u0003\u0002\u0002", - "\u0002\u062a\u062b\u0007e\u0002\u0002\u062b\u062c\u0007q\u0002\u0002", - "\u062c\u062d\u0007p\u0002\u0002\u062d\u062e\u0007v\u0002\u0002\u062e", - "\u062f\u0007k\u0002\u0002\u062f\u0630\u0007p\u0002\u0002\u0630\u0631", - "\u0007w\u0002\u0002\u0631\u0632\u0007g\u0002\u0002\u0632\u00da\u0003", - "\u0002\u0002\u0002\u0633\u0634\u0007g\u0002\u0002\u0634\u0635\u0007", - "z\u0002\u0002\u0635\u0636\u0007v\u0002\u0002\u0636\u0637\u0007g\u0002", - "\u0002\u0637\u0638\u0007t\u0002\u0002\u0638\u0639\u0007p\u0002\u0002", - "\u0639\u063a\u0007c\u0002\u0002\u063a\u063b\u0007n\u0002\u0002\u063b", - "\u00dc\u0003\u0002\u0002\u0002\u063c\u063d\u0007k\u0002\u0002\u063d", - "\u063e\u0007p\u0002\u0002\u063e\u063f\u0007f\u0002\u0002\u063f\u0640", - "\u0007g\u0002\u0002\u0640\u0641\u0007z\u0002\u0002\u0641\u0642\u0007", - "g\u0002\u0002\u0642\u0643\u0007f\u0002\u0002\u0643\u00de\u0003\u0002", - "\u0002\u0002\u0644\u0645\u0007k\u0002\u0002\u0645\u0646\u0007p\u0002", - "\u0002\u0646\u0647\u0007v\u0002\u0002\u0647\u0648\u0007g\u0002\u0002", - "\u0648\u0649\u0007t\u0002\u0002\u0649\u064a\u0007p\u0002\u0002\u064a", - "\u064b\u0007c\u0002\u0002\u064b\u064c\u0007n\u0002\u0002\u064c\u00e0", - "\u0003\u0002\u0002\u0002\u064d\u064e\u0007r\u0002\u0002\u064e\u064f", - "\u0007c\u0002\u0002\u064f\u0650\u0007{\u0002\u0002\u0650\u0651\u0007", - "c\u0002\u0002\u0651\u0652\u0007d\u0002\u0002\u0652\u0653\u0007n\u0002", - "\u0002\u0653\u0654\u0007g\u0002\u0002\u0654\u00e2\u0003\u0002\u0002", - "\u0002\u0655\u0656\u0007r\u0002\u0002\u0656\u0657\u0007t\u0002\u0002", - "\u0657\u0658\u0007k\u0002\u0002\u0658\u0659\u0007x\u0002\u0002\u0659", - "\u065a\u0007c\u0002\u0002\u065a\u065b\u0007v\u0002\u0002\u065b\u065c", - "\u0007g\u0002\u0002\u065c\u00e4\u0003\u0002\u0002\u0002\u065d\u065e", - "\u0007r\u0002\u0002\u065e\u065f\u0007w\u0002\u0002\u065f\u0660\u0007", - "d\u0002\u0002\u0660\u0661\u0007n\u0002\u0002\u0661\u0662\u0007k\u0002", - "\u0002\u0662\u0663\u0007e\u0002\u0002\u0663\u00e6\u0003\u0002\u0002", - "\u0002\u0664\u0665\u0007r\u0002\u0002\u0665\u0666\u0007w\u0002\u0002", - "\u0666\u0667\u0007t\u0002\u0002\u0667\u0668\u0007g\u0002\u0002\u0668", - "\u00e8\u0003\u0002\u0002\u0002\u0669\u066a\u0007x\u0002\u0002\u066a", - "\u066b\u0007k\u0002\u0002\u066b\u066c\u0007g\u0002\u0002\u066c\u066d", - "\u0007y\u0002\u0002\u066d\u00ea\u0003\u0002\u0002\u0002\u066e\u0672", - "\u0005\u00edw\u0002\u066f\u0671\u0005\u00efx\u0002\u0670\u066f\u0003", - "\u0002\u0002\u0002\u0671\u0674\u0003\u0002\u0002\u0002\u0672\u0670\u0003", - "\u0002\u0002\u0002\u0672\u0673\u0003\u0002\u0002\u0002\u0673\u00ec\u0003", - "\u0002\u0002\u0002\u0674\u0672\u0003\u0002\u0002\u0002\u0675\u0676\t", - "\u0005\u0002\u0002\u0676\u00ee\u0003\u0002\u0002\u0002\u0677\u0678\t", - "\u0006\u0002\u0002\u0678\u00f0\u0003\u0002\u0002\u0002\u0679\u067d\u0007", - "$\u0002\u0002\u067a\u067c\u0005\u00f3z\u0002\u067b\u067a\u0003\u0002", - "\u0002\u0002\u067c\u067f\u0003\u0002\u0002\u0002\u067d\u067b\u0003\u0002", - "\u0002\u0002\u067d\u067e\u0003\u0002\u0002\u0002\u067e\u0680\u0003\u0002", - "\u0002\u0002\u067f\u067d\u0003\u0002\u0002\u0002\u0680\u068a\u0007$", - "\u0002\u0002\u0681\u0685\u0007)\u0002\u0002\u0682\u0684\u0005\u00f5", - "{\u0002\u0683\u0682\u0003\u0002\u0002\u0002\u0684\u0687\u0003\u0002", - "\u0002\u0002\u0685\u0683\u0003\u0002\u0002\u0002\u0685\u0686\u0003\u0002", - "\u0002\u0002\u0686\u0688\u0003\u0002\u0002\u0002\u0687\u0685\u0003\u0002", - "\u0002\u0002\u0688\u068a\u0007)\u0002\u0002\u0689\u0679\u0003\u0002", - "\u0002\u0002\u0689\u0681\u0003\u0002\u0002\u0002\u068a\u00f2\u0003\u0002", - "\u0002\u0002\u068b\u068f\n\u0007\u0002\u0002\u068c\u068d\u0007^\u0002", - "\u0002\u068d\u068f\u000b\u0002\u0002\u0002\u068e\u068b\u0003\u0002\u0002", - "\u0002\u068e\u068c\u0003\u0002\u0002\u0002\u068f\u00f4\u0003\u0002\u0002", - "\u0002\u0690\u0694\n\b\u0002\u0002\u0691\u0692\u0007^\u0002\u0002\u0692", - "\u0694\u000b\u0002\u0002\u0002\u0693\u0690\u0003\u0002\u0002\u0002\u0693", - "\u0691\u0003\u0002\u0002\u0002\u0694\u00f6\u0003\u0002\u0002\u0002\u0695", - "\u0697\t\t\u0002\u0002\u0696\u0695\u0003\u0002\u0002\u0002\u0697\u0698", - "\u0003\u0002\u0002\u0002\u0698\u0696\u0003\u0002\u0002\u0002\u0698\u0699", - "\u0003\u0002\u0002\u0002\u0699\u069a\u0003\u0002\u0002\u0002\u069a\u069b", - "\b|\u0002\u0002\u069b\u00f8\u0003\u0002\u0002\u0002\u069c\u069d\u0007", - "1\u0002\u0002\u069d\u069e\u0007,\u0002\u0002\u069e\u06a2\u0003\u0002", - "\u0002\u0002\u069f\u06a1\u000b\u0002\u0002\u0002\u06a0\u069f\u0003\u0002", - "\u0002\u0002\u06a1\u06a4\u0003\u0002\u0002\u0002\u06a2\u06a3\u0003\u0002", - "\u0002\u0002\u06a2\u06a0\u0003\u0002\u0002\u0002\u06a3\u06a5\u0003\u0002", - "\u0002\u0002\u06a4\u06a2\u0003\u0002\u0002\u0002\u06a5\u06a6\u0007,", - "\u0002\u0002\u06a6\u06a7\u00071\u0002\u0002\u06a7\u06a8\u0003\u0002", - "\u0002\u0002\u06a8\u06a9\b}\u0003\u0002\u06a9\u00fa\u0003\u0002\u0002", - "\u0002\u06aa\u06ab\u00071\u0002\u0002\u06ab\u06ac\u00071\u0002\u0002", - "\u06ac\u06b0\u0003\u0002\u0002\u0002\u06ad\u06af\n\n\u0002\u0002\u06ae", - "\u06ad\u0003\u0002\u0002\u0002\u06af\u06b2\u0003\u0002\u0002\u0002\u06b0", - "\u06ae\u0003\u0002\u0002\u0002\u06b0\u06b1\u0003\u0002\u0002\u0002\u06b1", - "\u06b3\u0003\u0002\u0002\u0002\u06b2\u06b0\u0003\u0002\u0002\u0002\u06b3", - "\u06b4\b~\u0003\u0002\u06b4\u00fc\u0003\u0002\u0002\u0002%\u0002\u0338", - "\u0411\u04ef\u04ff\u0505\u0507\u0519\u051f\u0521\u0526\u052c\u0532\u053d", - "\u0542\u0547\u054e\u0550\u0556\u0558\u0560\u0596\u05a0\u05a8\u05ac\u060f", - "\u0672\u067d\u0685\u0689\u068e\u0693\u0698\u06a2\u06b0\u0004\b\u0002", - "\u0002\u0002\u0003\u0002"].join(""); + "\u0002\u0002\u055b\u055d\t\u0004\u0002\u0002\u055c\u055e\u0005\u00cf", + "h\u0002\u055d\u055c\u0003\u0002\u0002\u0002\u055e\u055f\u0003\u0002", + "\u0002\u0002\u055f\u055d\u0003\u0002\u0002\u0002\u055f\u0560\u0003\u0002", + "\u0002\u0002\u0560\u00c8\u0003\u0002\u0002\u0002\u0561\u0562\u0007y", + "\u0002\u0002\u0562\u0563\u0007g\u0002\u0002\u0563\u0596\u0007k\u0002", + "\u0002\u0564\u0565\u0007u\u0002\u0002\u0565\u0566\u0007|\u0002\u0002", + "\u0566\u0567\u0007c\u0002\u0002\u0567\u0568\u0007d\u0002\u0002\u0568", + "\u0596\u0007q\u0002\u0002\u0569\u056a\u0007h\u0002\u0002\u056a\u056b", + "\u0007k\u0002\u0002\u056b\u056c\u0007p\u0002\u0002\u056c\u056d\u0007", + "p\u0002\u0002\u056d\u056e\u0007g\u0002\u0002\u056e\u0596\u0007{\u0002", + "\u0002\u056f\u0570\u0007g\u0002\u0002\u0570\u0571\u0007v\u0002\u0002", + "\u0571\u0572\u0007j\u0002\u0002\u0572\u0573\u0007g\u0002\u0002\u0573", + "\u0596\u0007t\u0002\u0002\u0574\u0575\u0007u\u0002\u0002\u0575\u0576", + "\u0007g\u0002\u0002\u0576\u0577\u0007e\u0002\u0002\u0577\u0578\u0007", + "q\u0002\u0002\u0578\u0579\u0007p\u0002\u0002\u0579\u057a\u0007f\u0002", + "\u0002\u057a\u0596\u0007u\u0002\u0002\u057b\u057c\u0007o\u0002\u0002", + "\u057c\u057d\u0007k\u0002\u0002\u057d\u057e\u0007p\u0002\u0002\u057e", + "\u057f\u0007w\u0002\u0002\u057f\u0580\u0007v\u0002\u0002\u0580\u0581", + "\u0007g\u0002\u0002\u0581\u0596\u0007u\u0002\u0002\u0582\u0583\u0007", + "j\u0002\u0002\u0583\u0584\u0007q\u0002\u0002\u0584\u0585\u0007w\u0002", + "\u0002\u0585\u0586\u0007t\u0002\u0002\u0586\u0596\u0007u\u0002\u0002", + "\u0587\u0588\u0007f\u0002\u0002\u0588\u0589\u0007c\u0002\u0002\u0589", + "\u058a\u0007{\u0002\u0002\u058a\u0596\u0007u\u0002\u0002\u058b\u058c", + "\u0007y\u0002\u0002\u058c\u058d\u0007g\u0002\u0002\u058d\u058e\u0007", + "g\u0002\u0002\u058e\u058f\u0007m\u0002\u0002\u058f\u0596\u0007u\u0002", + "\u0002\u0590\u0591\u0007{\u0002\u0002\u0591\u0592\u0007g\u0002\u0002", + "\u0592\u0593\u0007c\u0002\u0002\u0593\u0594\u0007t\u0002\u0002\u0594", + "\u0596\u0007u\u0002\u0002\u0595\u0561\u0003\u0002\u0002\u0002\u0595", + "\u0564\u0003\u0002\u0002\u0002\u0595\u0569\u0003\u0002\u0002\u0002\u0595", + "\u056f\u0003\u0002\u0002\u0002\u0595\u0574\u0003\u0002\u0002\u0002\u0595", + "\u057b\u0003\u0002\u0002\u0002\u0595\u0582\u0003\u0002\u0002\u0002\u0595", + "\u0587\u0003\u0002\u0002\u0002\u0595\u058b\u0003\u0002\u0002\u0002\u0595", + "\u0590\u0003\u0002\u0002\u0002\u0596\u00ca\u0003\u0002\u0002\u0002\u0597", + "\u0598\u0007j\u0002\u0002\u0598\u0599\u0007g\u0002\u0002\u0599\u059a", + "\u0007z\u0002\u0002\u059a\u05ab\u0003\u0002\u0002\u0002\u059b\u059f", + "\u0007$\u0002\u0002\u059c\u059e\u0005\u00cdg\u0002\u059d\u059c\u0003", + "\u0002\u0002\u0002\u059e\u05a1\u0003\u0002\u0002\u0002\u059f\u059d\u0003", + "\u0002\u0002\u0002\u059f\u05a0\u0003\u0002\u0002\u0002\u05a0\u05a2\u0003", + "\u0002\u0002\u0002\u05a1\u059f\u0003\u0002\u0002\u0002\u05a2\u05ac\u0007", + "$\u0002\u0002\u05a3\u05a7\u0007)\u0002\u0002\u05a4\u05a6\u0005\u00cd", + "g\u0002\u05a5\u05a4\u0003\u0002\u0002\u0002\u05a6\u05a9\u0003\u0002", + "\u0002\u0002\u05a7\u05a5\u0003\u0002\u0002\u0002\u05a7\u05a8\u0003\u0002", + "\u0002\u0002\u05a8\u05aa\u0003\u0002\u0002\u0002\u05a9\u05a7\u0003\u0002", + "\u0002\u0002\u05aa\u05ac\u0007)\u0002\u0002\u05ab\u059b\u0003\u0002", + "\u0002\u0002\u05ab\u05a3\u0003\u0002\u0002\u0002\u05ac\u00cc\u0003\u0002", + "\u0002\u0002\u05ad\u05ae\u0005\u00cfh\u0002\u05ae\u05af\u0005\u00cf", + "h\u0002\u05af\u00ce\u0003\u0002\u0002\u0002\u05b0\u05b1\t\u0005\u0002", + "\u0002\u05b1\u00d0\u0003\u0002\u0002\u0002\u05b2\u05b3\u0007c\u0002", + "\u0002\u05b3\u05b4\u0007d\u0002\u0002\u05b4\u05b5\u0007u\u0002\u0002", + "\u05b5\u05b6\u0007v\u0002\u0002\u05b6\u05b7\u0007t\u0002\u0002\u05b7", + "\u05b8\u0007c\u0002\u0002\u05b8\u05b9\u0007e\u0002\u0002\u05b9\u060f", + "\u0007v\u0002\u0002\u05ba\u05bb\u0007c\u0002\u0002\u05bb\u05bc\u0007", + "h\u0002\u0002\u05bc\u05bd\u0007v\u0002\u0002\u05bd\u05be\u0007g\u0002", + "\u0002\u05be\u060f\u0007t\u0002\u0002\u05bf\u05c0\u0007e\u0002\u0002", + "\u05c0\u05c1\u0007c\u0002\u0002\u05c1\u05c2\u0007u\u0002\u0002\u05c2", + "\u060f\u0007g\u0002\u0002\u05c3\u05c4\u0007e\u0002\u0002\u05c4\u05c5", + "\u0007c\u0002\u0002\u05c5\u05c6\u0007v\u0002\u0002\u05c6\u05c7\u0007", + "e\u0002\u0002\u05c7\u060f\u0007j\u0002\u0002\u05c8\u05c9\u0007f\u0002", + "\u0002\u05c9\u05ca\u0007g\u0002\u0002\u05ca\u05cb\u0007h\u0002\u0002", + "\u05cb\u05cc\u0007c\u0002\u0002\u05cc\u05cd\u0007w\u0002\u0002\u05cd", + "\u05ce\u0007n\u0002\u0002\u05ce\u060f\u0007v\u0002\u0002\u05cf\u05d0", + "\u0007h\u0002\u0002\u05d0\u05d1\u0007k\u0002\u0002\u05d1\u05d2\u0007", + "p\u0002\u0002\u05d2\u05d3\u0007c\u0002\u0002\u05d3\u060f\u0007n\u0002", + "\u0002\u05d4\u05d5\u0007k\u0002\u0002\u05d5\u060f\u0007p\u0002\u0002", + "\u05d6\u05d7\u0007k\u0002\u0002\u05d7\u05d8\u0007p\u0002\u0002\u05d8", + "\u05d9\u0007n\u0002\u0002\u05d9\u05da\u0007k\u0002\u0002\u05da\u05db", + "\u0007p\u0002\u0002\u05db\u060f\u0007g\u0002\u0002\u05dc\u05dd\u0007", + "n\u0002\u0002\u05dd\u05de\u0007g\u0002\u0002\u05de\u060f\u0007v\u0002", + "\u0002\u05df\u05e0\u0007o\u0002\u0002\u05e0\u05e1\u0007c\u0002\u0002", + "\u05e1\u05e2\u0007v\u0002\u0002\u05e2\u05e3\u0007e\u0002\u0002\u05e3", + "\u060f\u0007j\u0002\u0002\u05e4\u05e5\u0007p\u0002\u0002\u05e5\u05e6", + "\u0007w\u0002\u0002\u05e6\u05e7\u0007n\u0002\u0002\u05e7\u060f\u0007", + "n\u0002\u0002\u05e8\u05e9\u0007q\u0002\u0002\u05e9\u060f\u0007h\u0002", + "\u0002\u05ea\u05eb\u0007t\u0002\u0002\u05eb\u05ec\u0007g\u0002\u0002", + "\u05ec\u05ed\u0007n\u0002\u0002\u05ed\u05ee\u0007q\u0002\u0002\u05ee", + "\u05ef\u0007e\u0002\u0002\u05ef\u05f0\u0007c\u0002\u0002\u05f0\u05f1", + "\u0007v\u0002\u0002\u05f1\u05f2\u0007c\u0002\u0002\u05f2\u05f3\u0007", + "d\u0002\u0002\u05f3\u05f4\u0007n\u0002\u0002\u05f4\u060f\u0007g\u0002", + "\u0002\u05f5\u05f6\u0007u\u0002\u0002\u05f6\u05f7\u0007v\u0002\u0002", + "\u05f7\u05f8\u0007c\u0002\u0002\u05f8\u05f9\u0007v\u0002\u0002\u05f9", + "\u05fa\u0007k\u0002\u0002\u05fa\u060f\u0007e\u0002\u0002\u05fb\u05fc", + "\u0007u\u0002\u0002\u05fc\u05fd\u0007y\u0002\u0002\u05fd\u05fe\u0007", + "k\u0002\u0002\u05fe\u05ff\u0007v\u0002\u0002\u05ff\u0600\u0007e\u0002", + "\u0002\u0600\u060f\u0007j\u0002\u0002\u0601\u0602\u0007v\u0002\u0002", + "\u0602\u0603\u0007t\u0002\u0002\u0603\u060f\u0007{\u0002\u0002\u0604", + "\u0605\u0007v\u0002\u0002\u0605\u0606\u0007{\u0002\u0002\u0606\u0607", + "\u0007r\u0002\u0002\u0607\u060f\u0007g\u0002\u0002\u0608\u0609\u0007", + "v\u0002\u0002\u0609\u060a\u0007{\u0002\u0002\u060a\u060b\u0007r\u0002", + "\u0002\u060b\u060c\u0007g\u0002\u0002\u060c\u060d\u0007q\u0002\u0002", + "\u060d\u060f\u0007h\u0002\u0002\u060e\u05b2\u0003\u0002\u0002\u0002", + "\u060e\u05ba\u0003\u0002\u0002\u0002\u060e\u05bf\u0003\u0002\u0002\u0002", + "\u060e\u05c3\u0003\u0002\u0002\u0002\u060e\u05c8\u0003\u0002\u0002\u0002", + "\u060e\u05cf\u0003\u0002\u0002\u0002\u060e\u05d4\u0003\u0002\u0002\u0002", + "\u060e\u05d6\u0003\u0002\u0002\u0002\u060e\u05dc\u0003\u0002\u0002\u0002", + "\u060e\u05df\u0003\u0002\u0002\u0002\u060e\u05e4\u0003\u0002\u0002\u0002", + "\u060e\u05e8\u0003\u0002\u0002\u0002\u060e\u05ea\u0003\u0002\u0002\u0002", + "\u060e\u05f5\u0003\u0002\u0002\u0002\u060e\u05fb\u0003\u0002\u0002\u0002", + "\u060e\u0601\u0003\u0002\u0002\u0002\u060e\u0604\u0003\u0002\u0002\u0002", + "\u060e\u0608\u0003\u0002\u0002\u0002\u060f\u00d2\u0003\u0002\u0002\u0002", + "\u0610\u0611\u0007c\u0002\u0002\u0611\u0612\u0007p\u0002\u0002\u0612", + "\u0613\u0007q\u0002\u0002\u0613\u0614\u0007p\u0002\u0002\u0614\u0615", + "\u0007{\u0002\u0002\u0615\u0616\u0007o\u0002\u0002\u0616\u0617\u0007", + "q\u0002\u0002\u0617\u0618\u0007w\u0002\u0002\u0618\u0619\u0007u\u0002", + "\u0002\u0619\u00d4\u0003\u0002\u0002\u0002\u061a\u061b\u0007d\u0002", + "\u0002\u061b\u061c\u0007t\u0002\u0002\u061c\u061d\u0007g\u0002\u0002", + "\u061d\u061e\u0007c\u0002\u0002\u061e\u061f\u0007m\u0002\u0002\u061f", + "\u00d6\u0003\u0002\u0002\u0002\u0620\u0621\u0007e\u0002\u0002\u0621", + "\u0622\u0007q\u0002\u0002\u0622\u0623\u0007p\u0002\u0002\u0623\u0624", + "\u0007u\u0002\u0002\u0624\u0625\u0007v\u0002\u0002\u0625\u0626\u0007", + "c\u0002\u0002\u0626\u0627\u0007p\u0002\u0002\u0627\u0628\u0007v\u0002", + "\u0002\u0628\u00d8\u0003\u0002\u0002\u0002\u0629\u062a\u0007e\u0002", + "\u0002\u062a\u062b\u0007q\u0002\u0002\u062b\u062c\u0007p\u0002\u0002", + "\u062c\u062d\u0007v\u0002\u0002\u062d\u062e\u0007k\u0002\u0002\u062e", + "\u062f\u0007p\u0002\u0002\u062f\u0630\u0007w\u0002\u0002\u0630\u0631", + "\u0007g\u0002\u0002\u0631\u00da\u0003\u0002\u0002\u0002\u0632\u0633", + "\u0007g\u0002\u0002\u0633\u0634\u0007z\u0002\u0002\u0634\u0635\u0007", + "v\u0002\u0002\u0635\u0636\u0007g\u0002\u0002\u0636\u0637\u0007t\u0002", + "\u0002\u0637\u0638\u0007p\u0002\u0002\u0638\u0639\u0007c\u0002\u0002", + "\u0639\u063a\u0007n\u0002\u0002\u063a\u00dc\u0003\u0002\u0002\u0002", + "\u063b\u063c\u0007k\u0002\u0002\u063c\u063d\u0007p\u0002\u0002\u063d", + "\u063e\u0007f\u0002\u0002\u063e\u063f\u0007g\u0002\u0002\u063f\u0640", + "\u0007z\u0002\u0002\u0640\u0641\u0007g\u0002\u0002\u0641\u0642\u0007", + "f\u0002\u0002\u0642\u00de\u0003\u0002\u0002\u0002\u0643\u0644\u0007", + "k\u0002\u0002\u0644\u0645\u0007p\u0002\u0002\u0645\u0646\u0007v\u0002", + "\u0002\u0646\u0647\u0007g\u0002\u0002\u0647\u0648\u0007t\u0002\u0002", + "\u0648\u0649\u0007p\u0002\u0002\u0649\u064a\u0007c\u0002\u0002\u064a", + "\u064b\u0007n\u0002\u0002\u064b\u00e0\u0003\u0002\u0002\u0002\u064c", + "\u064d\u0007r\u0002\u0002\u064d\u064e\u0007c\u0002\u0002\u064e\u064f", + "\u0007{\u0002\u0002\u064f\u0650\u0007c\u0002\u0002\u0650\u0651\u0007", + "d\u0002\u0002\u0651\u0652\u0007n\u0002\u0002\u0652\u0653\u0007g\u0002", + "\u0002\u0653\u00e2\u0003\u0002\u0002\u0002\u0654\u0655\u0007r\u0002", + "\u0002\u0655\u0656\u0007t\u0002\u0002\u0656\u0657\u0007k\u0002\u0002", + "\u0657\u0658\u0007x\u0002\u0002\u0658\u0659\u0007c\u0002\u0002\u0659", + "\u065a\u0007v\u0002\u0002\u065a\u065b\u0007g\u0002\u0002\u065b\u00e4", + "\u0003\u0002\u0002\u0002\u065c\u065d\u0007r\u0002\u0002\u065d\u065e", + "\u0007w\u0002\u0002\u065e\u065f\u0007d\u0002\u0002\u065f\u0660\u0007", + "n\u0002\u0002\u0660\u0661\u0007k\u0002\u0002\u0661\u0662\u0007e\u0002", + "\u0002\u0662\u00e6\u0003\u0002\u0002\u0002\u0663\u0664\u0007r\u0002", + "\u0002\u0664\u0665\u0007w\u0002\u0002\u0665\u0666\u0007t\u0002\u0002", + "\u0666\u0667\u0007g\u0002\u0002\u0667\u00e8\u0003\u0002\u0002\u0002", + "\u0668\u0669\u0007x\u0002\u0002\u0669\u066a\u0007k\u0002\u0002\u066a", + "\u066b\u0007g\u0002\u0002\u066b\u066c\u0007y\u0002\u0002\u066c\u00ea", + "\u0003\u0002\u0002\u0002\u066d\u0671\u0005\u00edw\u0002\u066e\u0670", + "\u0005\u00efx\u0002\u066f\u066e\u0003\u0002\u0002\u0002\u0670\u0673", + "\u0003\u0002\u0002\u0002\u0671\u066f\u0003\u0002\u0002\u0002\u0671\u0672", + "\u0003\u0002\u0002\u0002\u0672\u00ec\u0003\u0002\u0002\u0002\u0673\u0671", + "\u0003\u0002\u0002\u0002\u0674\u0675\t\u0006\u0002\u0002\u0675\u00ee", + "\u0003\u0002\u0002\u0002\u0676\u0677\t\u0007\u0002\u0002\u0677\u00f0", + "\u0003\u0002\u0002\u0002\u0678\u067c\u0007$\u0002\u0002\u0679\u067b", + "\u0005\u00f3z\u0002\u067a\u0679\u0003\u0002\u0002\u0002\u067b\u067e", + "\u0003\u0002\u0002\u0002\u067c\u067a\u0003\u0002\u0002\u0002\u067c\u067d", + "\u0003\u0002\u0002\u0002\u067d\u067f\u0003\u0002\u0002\u0002\u067e\u067c", + "\u0003\u0002\u0002\u0002\u067f\u0689\u0007$\u0002\u0002\u0680\u0684", + "\u0007)\u0002\u0002\u0681\u0683\u0005\u00f5{\u0002\u0682\u0681\u0003", + "\u0002\u0002\u0002\u0683\u0686\u0003\u0002\u0002\u0002\u0684\u0682\u0003", + "\u0002\u0002\u0002\u0684\u0685\u0003\u0002\u0002\u0002\u0685\u0687\u0003", + "\u0002\u0002\u0002\u0686\u0684\u0003\u0002\u0002\u0002\u0687\u0689\u0007", + ")\u0002\u0002\u0688\u0678\u0003\u0002\u0002\u0002\u0688\u0680\u0003", + "\u0002\u0002\u0002\u0689\u00f2\u0003\u0002\u0002\u0002\u068a\u068e\n", + "\b\u0002\u0002\u068b\u068c\u0007^\u0002\u0002\u068c\u068e\u000b\u0002", + "\u0002\u0002\u068d\u068a\u0003\u0002\u0002\u0002\u068d\u068b\u0003\u0002", + "\u0002\u0002\u068e\u00f4\u0003\u0002\u0002\u0002\u068f\u0693\n\t\u0002", + "\u0002\u0690\u0691\u0007^\u0002\u0002\u0691\u0693\u000b\u0002\u0002", + "\u0002\u0692\u068f\u0003\u0002\u0002\u0002\u0692\u0690\u0003\u0002\u0002", + "\u0002\u0693\u00f6\u0003\u0002\u0002\u0002\u0694\u0696\t\n\u0002\u0002", + "\u0695\u0694\u0003\u0002\u0002\u0002\u0696\u0697\u0003\u0002\u0002\u0002", + "\u0697\u0695\u0003\u0002\u0002\u0002\u0697\u0698\u0003\u0002\u0002\u0002", + "\u0698\u0699\u0003\u0002\u0002\u0002\u0699\u069a\b|\u0002\u0002\u069a", + "\u00f8\u0003\u0002\u0002\u0002\u069b\u069c\u00071\u0002\u0002\u069c", + "\u069d\u0007,\u0002\u0002\u069d\u06a1\u0003\u0002\u0002\u0002\u069e", + "\u06a0\u000b\u0002\u0002\u0002\u069f\u069e\u0003\u0002\u0002\u0002\u06a0", + "\u06a3\u0003\u0002\u0002\u0002\u06a1\u06a2\u0003\u0002\u0002\u0002\u06a1", + "\u069f\u0003\u0002\u0002\u0002\u06a2\u06a4\u0003\u0002\u0002\u0002\u06a3", + "\u06a1\u0003\u0002\u0002\u0002\u06a4\u06a5\u0007,\u0002\u0002\u06a5", + "\u06a6\u00071\u0002\u0002\u06a6\u06a7\u0003\u0002\u0002\u0002\u06a7", + "\u06a8\b}\u0003\u0002\u06a8\u00fa\u0003\u0002\u0002\u0002\u06a9\u06aa", + "\u00071\u0002\u0002\u06aa\u06ab\u00071\u0002\u0002\u06ab\u06af\u0003", + "\u0002\u0002\u0002\u06ac\u06ae\n\u000b\u0002\u0002\u06ad\u06ac\u0003", + "\u0002\u0002\u0002\u06ae\u06b1\u0003\u0002\u0002\u0002\u06af\u06ad\u0003", + "\u0002\u0002\u0002\u06af\u06b0\u0003\u0002\u0002\u0002\u06b0\u06b2\u0003", + "\u0002\u0002\u0002\u06b1\u06af\u0003\u0002\u0002\u0002\u06b2\u06b3\b", + "~\u0003\u0002\u06b3\u00fc\u0003\u0002\u0002\u0002%\u0002\u0338\u0411", + "\u04ef\u04ff\u0505\u0507\u0519\u051f\u0521\u0526\u052c\u0532\u053d\u0542", + "\u0547\u054e\u0550\u0556\u0558\u055f\u0595\u059f\u05a7\u05ab\u060e\u0671", + "\u067c\u0684\u0688\u068d\u0692\u0697\u06a1\u06af\u0004\b\u0002\u0002", + "\u0002\u0003\u0002"].join(""); var atn = new antlr4.atn.ATNDeserializer().deserialize(serializedATN); @@ -1091,6 +1091,12 @@ function SolidityLexer(input) { SolidityLexer.prototype = Object.create(antlr4.Lexer.prototype); SolidityLexer.prototype.constructor = SolidityLexer; +Object.defineProperty(SolidityLexer.prototype, "atn", { + get : function() { + return atn; + } +}); + SolidityLexer.EOF = antlr4.Token.EOF; SolidityLexer.T__0 = 1; SolidityLexer.T__1 = 2; @@ -1225,27 +1231,28 @@ SolidityLexer.prototype.literalNames = [ null, "'pragma'", "';'", "'^'", "'for'", "'struct'", "'constructor'", "'modifier'", "'function'", "'returns'", "'event'", "'enum'", "'['", "']'", - "'.'", "'mapping'", "'=>'", "'memory'", - "'storage'", "'calldata'", "'if'", - "'else'", "'while'", "'assembly'", - "'do'", "'return'", "'throw'", - "'emit'", "'var'", "'address'", - "'bool'", "'string'", "'byte'", - "'++'", "'--'", "'new'", "'+'", - "'-'", "'after'", "'delete'", "'!'", - "'**'", "'/'", "'%'", "'<<'", "'>>'", - "'&'", "'|'", "'=='", "'!='", "'&&'", - "'||'", "'?'", "':'", "'|='", "'^='", - "'&='", "'<<='", "'>>='", "'+='", - "'-='", "'*='", "'/='", "'%='", - "'let'", "':='", "'=:'", "'switch'", - "'case'", "'default'", "'->'", - null, null, null, null, null, null, + "'address'", "'.'", "'mapping'", + "'=>'", "'memory'", "'storage'", + "'calldata'", "'if'", "'else'", + "'while'", "'assembly'", "'do'", + "'return'", "'throw'", "'emit'", + "'var'", "'bool'", "'string'", + "'byte'", "'++'", "'--'", "'new'", + "'+'", "'-'", "'after'", "'delete'", + "'!'", "'**'", "'/'", "'%'", "'<<'", + "'>>'", "'&'", "'|'", "'=='", "'!='", + "'&&'", "'||'", "'?'", "':'", "'|='", + "'^='", "'&='", "'<<='", "'>>='", + "'+='", "'-='", "'*='", "'/='", + "'%='", "'let'", "':='", "'=:'", + "'switch'", "'case'", "'default'", + "'->'", null, null, null, null, null, null, null, null, null, null, - "'anonymous'", "'break'", "'constant'", - "'continue'", "'external'", "'indexed'", - "'internal'", "'payable'", "'private'", - "'public'", "'pure'", "'view'" ]; + null, null, "'anonymous'", "'break'", + "'constant'", "'continue'", "'external'", + "'indexed'", "'internal'", "'payable'", + "'private'", "'public'", "'pure'", + "'view'" ]; SolidityLexer.prototype.symbolicNames = [ null, null, null, null, null, null, null, null, null, null, diff --git a/lib/grammar/SolidityLexer.tokens b/lib/grammar/SolidityLexer.tokens index 0ba9b97d..9164f31b 100644 --- a/lib/grammar/SolidityLexer.tokens +++ b/lib/grammar/SolidityLexer.tokens @@ -150,22 +150,22 @@ LINE_COMMENT=119 'enum'=31 '['=32 ']'=33 -'.'=34 -'mapping'=35 -'=>'=36 -'memory'=37 -'storage'=38 -'calldata'=39 -'if'=40 -'else'=41 -'while'=42 -'assembly'=43 -'do'=44 -'return'=45 -'throw'=46 -'emit'=47 -'var'=48 -'address'=49 +'address'=34 +'.'=35 +'mapping'=36 +'=>'=37 +'memory'=38 +'storage'=39 +'calldata'=40 +'if'=41 +'else'=42 +'while'=43 +'assembly'=44 +'do'=45 +'return'=46 +'throw'=47 +'emit'=48 +'var'=49 'bool'=50 'string'=51 'byte'=52 diff --git a/lib/grammar/SolidityListener.js b/lib/grammar/SolidityListener.js index 9ad08eb5..088deaa1 100644 --- a/lib/grammar/SolidityListener.js +++ b/lib/grammar/SolidityListener.js @@ -1,4 +1,4 @@ -// Generated from Solidity.g4 by ANTLR 4.7 +// Generated from ./Solidity.g4 by ANTLR 4.7.1 // jshint ignore: start var antlr4 = require('antlr4/index'); diff --git a/lib/grammar/SolidityParser.js b/lib/grammar/SolidityParser.js index 9603b8b3..f790663a 100644 --- a/lib/grammar/SolidityParser.js +++ b/lib/grammar/SolidityParser.js @@ -1,11 +1,11 @@ -// Generated from Solidity.g4 by ANTLR 4.7 +// Generated from ./Solidity.g4 by ANTLR 4.7.1 // jshint ignore: start var antlr4 = require('antlr4/index'); var SolidityListener = require('./SolidityListener').SolidityListener; var grammarFileName = "Solidity.g4"; var serializedATN = ["\u0003\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964", - "\u0003y\u03bb\u0004\u0002\t\u0002\u0004\u0003\t\u0003\u0004\u0004\t", + "\u0003y\u03bd\u0004\u0002\t\u0002\u0004\u0003\t\u0003\u0004\u0004\t", "\u0004\u0004\u0005\t\u0005\u0004\u0006\t\u0006\u0004\u0007\t\u0007\u0004", "\b\t\b\u0004\t\t\t\u0004\n\t\n\u0004\u000b\t\u000b\u0004\f\t\f\u0004", "\r\t\r\u0004\u000e\t\u000e\u0004\u000f\t\u000f\u0004\u0010\t\u0010\u0004", @@ -69,573 +69,575 @@ var serializedATN = ["\u0003\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964", "\u001e\f\u001e\u000e\u001e\u01c1\u000b\u001e\u0005\u001e\u01c3\n\u001e", "\u0003\u001e\u0003\u001e\u0003\u001f\u0003\u001f\u0005\u001f\u01c9\n", "\u001f\u0003 \u0003 \u0005 \u01cd\n \u0003 \u0003 \u0003!\u0003!\u0003", - "!\u0003!\u0003!\u0005!\u01d6\n!\u0003!\u0003!\u0003!\u0005!\u01db\n", - "!\u0003!\u0007!\u01de\n!\f!\u000e!\u01e1\u000b!\u0003\"\u0003\"\u0003", - "\"\u0007\"\u01e6\n\"\f\"\u000e\"\u01e9\u000b\"\u0003#\u0003#\u0003#", - "\u0003#\u0003#\u0003#\u0003#\u0003$\u0003$\u0003$\u0003$\u0003$\u0007", - "$\u01f7\n$\f$\u000e$\u01fa\u000b$\u0003$\u0003$\u0005$\u01fe\n$\u0003", - "%\u0003%\u0003&\u0003&\u0003\'\u0003\'\u0007\'\u0206\n\'\f\'\u000e\'", - "\u0209\u000b\'\u0003\'\u0003\'\u0003(\u0003(\u0003(\u0003(\u0003(\u0003", - "(\u0003(\u0003(\u0003(\u0003(\u0003(\u0003(\u0005(\u0219\n(\u0003)\u0003", - ")\u0003)\u0003*\u0003*\u0003*\u0003*\u0003*\u0003*\u0003*\u0005*\u0225", - "\n*\u0003+\u0003+\u0003+\u0003+\u0003+\u0003+\u0003,\u0003,\u0005,\u022f", - "\n,\u0003-\u0003-\u0003-\u0003-\u0005-\u0235\n-\u0003-\u0005-\u0238", - "\n-\u0003-\u0003-\u0005-\u023c\n-\u0003-\u0003-\u0003-\u0003.\u0003", - ".\u0005.\u0243\n.\u0003.\u0003.\u0003/\u0003/\u0003/\u0003/\u0003/\u0003", - "/\u0003/\u0003/\u00030\u00030\u00030\u00031\u00031\u00031\u00032\u0003", - "2\u00052\u0257\n2\u00032\u00032\u00033\u00033\u00033\u00034\u00034\u0003", - "4\u00034\u00035\u00035\u00035\u00035\u00035\u00035\u00035\u00055\u0269", - "\n5\u00035\u00035\u00055\u026d\n5\u00035\u00035\u00036\u00056\u0272", - "\n6\u00036\u00036\u00056\u0276\n6\u00076\u0278\n6\f6\u000e6\u027b\u000b", - "6\u00037\u00037\u00057\u027f\n7\u00037\u00077\u0282\n7\f7\u000e7\u0285", - "\u000b7\u00037\u00057\u0288\n7\u00037\u00037\u00038\u00038\u00039\u0003", + "!\u0003!\u0003!\u0003!\u0003!\u0005!\u01d8\n!\u0003!\u0003!\u0003!\u0005", + "!\u01dd\n!\u0003!\u0007!\u01e0\n!\f!\u000e!\u01e3\u000b!\u0003\"\u0003", + "\"\u0003\"\u0007\"\u01e8\n\"\f\"\u000e\"\u01eb\u000b\"\u0003#\u0003", + "#\u0003#\u0003#\u0003#\u0003#\u0003#\u0003$\u0003$\u0003$\u0003$\u0003", + "$\u0007$\u01f9\n$\f$\u000e$\u01fc\u000b$\u0003$\u0003$\u0005$\u0200", + "\n$\u0003%\u0003%\u0003&\u0003&\u0003\'\u0003\'\u0007\'\u0208\n\'\f", + "\'\u000e\'\u020b\u000b\'\u0003\'\u0003\'\u0003(\u0003(\u0003(\u0003", + "(\u0003(\u0003(\u0003(\u0003(\u0003(\u0003(\u0003(\u0003(\u0005(\u021b", + "\n(\u0003)\u0003)\u0003)\u0003*\u0003*\u0003*\u0003*\u0003*\u0003*\u0003", + "*\u0005*\u0227\n*\u0003+\u0003+\u0003+\u0003+\u0003+\u0003+\u0003,\u0003", + ",\u0005,\u0231\n,\u0003-\u0003-\u0003-\u0003-\u0005-\u0237\n-\u0003", + "-\u0005-\u023a\n-\u0003-\u0003-\u0005-\u023e\n-\u0003-\u0003-\u0003", + "-\u0003.\u0003.\u0005.\u0245\n.\u0003.\u0003.\u0003/\u0003/\u0003/\u0003", + "/\u0003/\u0003/\u0003/\u0003/\u00030\u00030\u00030\u00031\u00031\u0003", + "1\u00032\u00032\u00052\u0259\n2\u00032\u00032\u00033\u00033\u00033\u0003", + "4\u00034\u00034\u00034\u00035\u00035\u00035\u00035\u00035\u00035\u0003", + "5\u00055\u026b\n5\u00035\u00035\u00055\u026f\n5\u00035\u00035\u0003", + "6\u00056\u0274\n6\u00036\u00036\u00056\u0278\n6\u00076\u027a\n6\f6\u000e", + "6\u027d\u000b6\u00037\u00037\u00057\u0281\n7\u00037\u00077\u0284\n7", + "\f7\u000e7\u0287\u000b7\u00037\u00057\u028a\n7\u00037\u00037\u00038", + "\u00038\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u0003", + "9\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u0005", + "9\u02a2\n9\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u0003", "9\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u0003", - "9\u00039\u00039\u00039\u00039\u00039\u00039\u00059\u02a0\n9\u00039\u0003", "9\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u0003", "9\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u0003", "9\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u0003", - "9\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u0003", - "9\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u0003", - "9\u00039\u00039\u00039\u00039\u00039\u00079\u02db\n9\f9\u000e9\u02de", - "\u000b9\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0005:\u02e7", - "\n:\u0003;\u0003;\u0003;\u0007;\u02ec\n;\f;\u000e;\u02ef\u000b;\u0003", - "<\u0003<\u0003<\u0007<\u02f4\n<\f<\u000e<\u02f7\u000b<\u0003<\u0005", - "<\u02fa\n<\u0003=\u0003=\u0003=\u0003=\u0003>\u0003>\u0005>\u0302\n", - ">\u0003>\u0003>\u0005>\u0306\n>\u0005>\u0308\n>\u0003?\u0003?\u0003", - "?\u0003?\u0003?\u0003@\u0003@\u0007@\u0311\n@\f@\u000e@\u0314\u000b", - "@\u0003@\u0003@\u0003A\u0003A\u0003A\u0003A\u0003A\u0003A\u0003A\u0003", - "A\u0003A\u0003A\u0003A\u0003A\u0003A\u0003A\u0003A\u0003A\u0003A\u0005", - "A\u0329\nA\u0003B\u0003B\u0005B\u032d\nB\u0003C\u0003C\u0003C\u0003", - "C\u0005C\u0333\nC\u0003C\u0003C\u0005C\u0337\nC\u0003C\u0003C\u0007", - "C\u033b\nC\fC\u000eC\u033e\u000bC\u0003C\u0005C\u0341\nC\u0003D\u0003", - "D\u0003D\u0003D\u0005D\u0347\nD\u0003E\u0003E\u0003E\u0003E\u0003F\u0003", - "F\u0003F\u0003F\u0003F\u0005F\u0352\nF\u0003G\u0003G\u0003G\u0007G\u0357", - "\nG\fG\u000eG\u035a\u000bG\u0003H\u0003H\u0003H\u0003I\u0003I\u0003", - "I\u0003J\u0003J\u0003J\u0007J\u0365\nJ\fJ\u000eJ\u0368\u000bJ\u0003", - "K\u0003K\u0003K\u0003K\u0003K\u0003K\u0005K\u0370\nK\u0003L\u0003L\u0003", - "L\u0003L\u0005L\u0376\nL\u0003L\u0003L\u0005L\u037a\nL\u0003L\u0003", - "L\u0003M\u0003M\u0003M\u0003N\u0003N\u0003N\u0005N\u0384\nN\u0003N\u0003", - "N\u0003N\u0005N\u0389\nN\u0003N\u0003N\u0003O\u0003O\u0003O\u0003O\u0003", - "P\u0003P\u0003Q\u0003Q\u0003Q\u0003Q\u0003R\u0003R\u0005R\u0399\nR\u0003", - "R\u0003R\u0005R\u039d\nR\u0007R\u039f\nR\fR\u000eR\u03a2\u000bR\u0003", - "R\u0003R\u0003R\u0003R\u0003R\u0007R\u03a9\nR\fR\u000eR\u03ac\u000b", - "R\u0005R\u03ae\nR\u0003R\u0005R\u03b1\nR\u0003S\u0003S\u0003T\u0003", - "T\u0005T\u03b7\nT\u0003U\u0003U\u0003U\u0002\u0004@pV\u0002\u0004\u0006", - "\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a\u001c\u001e \"$&(*", - ",.02468:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082\u0084\u0086", - "\u0088\u008a\u008c\u008e\u0090\u0092\u0094\u0096\u0098\u009a\u009c\u009e", - "\u00a0\u00a2\u00a4\u00a6\u00a8\u0002\u0013\u0003\u0002\u0005\u000b\u0003", - "\u0002\u0013\u0015\u0005\u0002kkooqr\u0003\u0002\')\u0005\u0002kkpp", - "st\u0004\u000226]a\u0003\u000278\u0003\u0002:;\u0003\u0002<=\u0004\u0002", - "\u000e\u000e@A\u0003\u0002BC\u0003\u0002\u0007\n\u0003\u0002FG\u0004", - "\u0002\u000b\u000bLU\u0005\u0002deggvv\u0003\u0002de\u0004\u0002\u000f", - "\u000fuu\u0002\u0411\u0002\u00af\u0003\u0002\u0002\u0002\u0004\u00b4", - "\u0003\u0002\u0002\u0002\u0006\u00b9\u0003\u0002\u0002\u0002\b\u00bd", - "\u0003\u0002\u0002\u0002\n\u00bf\u0003\u0002\u0002\u0002\f\u00c3\u0003", - "\u0002\u0002\u0002\u000e\u00c6\u0003\u0002\u0002\u0002\u0010\u00ca\u0003", - "\u0002\u0002\u0002\u0012\u00f1\u0003\u0002\u0002\u0002\u0014\u00f3\u0003", - "\u0002\u0002\u0002\u0016\u0109\u0003\u0002\u0002\u0002\u0018\u011f\u0003", - "\u0002\u0002\u0002\u001a\u0121\u0003\u0002\u0002\u0002\u001c\u012f\u0003", - "\u0002\u0002\u0002\u001e\u0138\u0003\u0002\u0002\u0002 \u0149\u0003", - "\u0002\u0002\u0002\"\u014e\u0003\u0002\u0002\u0002$\u0155\u0003\u0002", - "\u0002\u0002&\u015d\u0003\u0002\u0002\u0002(\u016a\u0003\u0002\u0002", - "\u0002*\u0175\u0003\u0002\u0002\u0002,\u0178\u0003\u0002\u0002\u0002", - ".\u0180\u0003\u0002\u0002\u00020\u0182\u0003\u0002\u0002\u00022\u0191", - "\u0003\u0002\u0002\u00024\u019e\u0003\u0002\u0002\u00026\u01a5\u0003", - "\u0002\u0002\u00028\u01b2\u0003\u0002\u0002\u0002:\u01b9\u0003\u0002", - "\u0002\u0002<\u01c6\u0003\u0002\u0002\u0002>\u01ca\u0003\u0002\u0002", - "\u0002@\u01d5\u0003\u0002\u0002\u0002B\u01e2\u0003\u0002\u0002\u0002", - "D\u01ea\u0003\u0002\u0002\u0002F\u01f1\u0003\u0002\u0002\u0002H\u01ff", - "\u0003\u0002\u0002\u0002J\u0201\u0003\u0002\u0002\u0002L\u0203\u0003", - "\u0002\u0002\u0002N\u0218\u0003\u0002\u0002\u0002P\u021a\u0003\u0002", - "\u0002\u0002R\u021d\u0003\u0002\u0002\u0002T\u0226\u0003\u0002\u0002", - "\u0002V\u022e\u0003\u0002\u0002\u0002X\u0230\u0003\u0002\u0002\u0002", - "Z\u0240\u0003\u0002\u0002\u0002\\\u0246\u0003\u0002\u0002\u0002^\u024e", - "\u0003\u0002\u0002\u0002`\u0251\u0003\u0002\u0002\u0002b\u0254\u0003", - "\u0002\u0002\u0002d\u025a\u0003\u0002\u0002\u0002f\u025d\u0003\u0002", - "\u0002\u0002h\u0268\u0003\u0002\u0002\u0002j\u0271\u0003\u0002\u0002", - "\u0002l\u027c\u0003\u0002\u0002\u0002n\u028b\u0003\u0002\u0002\u0002", - "p\u029f\u0003\u0002\u0002\u0002r\u02e6\u0003\u0002\u0002\u0002t\u02e8", - "\u0003\u0002\u0002\u0002v\u02f0\u0003\u0002\u0002\u0002x\u02fb\u0003", - "\u0002\u0002\u0002z\u0307\u0003\u0002\u0002\u0002|\u0309\u0003\u0002", - "\u0002\u0002~\u030e\u0003\u0002\u0002\u0002\u0080\u0328\u0003\u0002", - "\u0002\u0002\u0082\u032c\u0003\u0002\u0002\u0002\u0084\u0332\u0003\u0002", - "\u0002\u0002\u0086\u0342\u0003\u0002\u0002\u0002\u0088\u0348\u0003\u0002", - "\u0002\u0002\u008a\u0351\u0003\u0002\u0002\u0002\u008c\u0353\u0003\u0002", - "\u0002\u0002\u008e\u035b\u0003\u0002\u0002\u0002\u0090\u035e\u0003\u0002", - "\u0002\u0002\u0092\u0361\u0003\u0002\u0002\u0002\u0094\u036f\u0003\u0002", - "\u0002\u0002\u0096\u0371\u0003\u0002\u0002\u0002\u0098\u037d\u0003\u0002", - "\u0002\u0002\u009a\u0380\u0003\u0002\u0002\u0002\u009c\u038c\u0003\u0002", - "\u0002\u0002\u009e\u0390\u0003\u0002\u0002\u0002\u00a0\u0392\u0003\u0002", - "\u0002\u0002\u00a2\u03b0\u0003\u0002\u0002\u0002\u00a4\u03b2\u0003\u0002", - "\u0002\u0002\u00a6\u03b4\u0003\u0002\u0002\u0002\u00a8\u03b8\u0003\u0002", - "\u0002\u0002\u00aa\u00ae\u0005\u0004\u0003\u0002\u00ab\u00ae\u0005\u0012", - "\n\u0002\u00ac\u00ae\u0005\u0014\u000b\u0002\u00ad\u00aa\u0003\u0002", - "\u0002\u0002\u00ad\u00ab\u0003\u0002\u0002\u0002\u00ad\u00ac\u0003\u0002", - "\u0002\u0002\u00ae\u00b1\u0003\u0002\u0002\u0002\u00af\u00ad\u0003\u0002", - "\u0002\u0002\u00af\u00b0\u0003\u0002\u0002\u0002\u00b0\u00b2\u0003\u0002", - "\u0002\u0002\u00b1\u00af\u0003\u0002\u0002\u0002\u00b2\u00b3\u0007\u0002", - "\u0002\u0003\u00b3\u0003\u0003\u0002\u0002\u0002\u00b4\u00b5\u0007\u0003", - "\u0002\u0002\u00b5\u00b6\u0005\u0006\u0004\u0002\u00b6\u00b7\u0005\b", - "\u0005\u0002\u00b7\u00b8\u0007\u0004\u0002\u0002\u00b8\u0005\u0003\u0002", - "\u0002\u0002\u00b9\u00ba\u0005\u00a8U\u0002\u00ba\u0007\u0003\u0002", - "\u0002\u0002\u00bb\u00be\u0005\n\u0006\u0002\u00bc\u00be\u0005p9\u0002", - "\u00bd\u00bb\u0003\u0002\u0002\u0002\u00bd\u00bc\u0003\u0002\u0002\u0002", - "\u00be\t\u0003\u0002\u0002\u0002\u00bf\u00c1\u0005\u000e\b\u0002\u00c0", - "\u00c2\u0005\u000e\b\u0002\u00c1\u00c0\u0003\u0002\u0002\u0002\u00c1", - "\u00c2\u0003\u0002\u0002\u0002\u00c2\u000b\u0003\u0002\u0002\u0002\u00c3", - "\u00c4\t\u0002\u0002\u0002\u00c4\r\u0003\u0002\u0002\u0002\u00c5\u00c7", - "\u0005\f\u0007\u0002\u00c6\u00c5\u0003\u0002\u0002\u0002\u00c6\u00c7", - "\u0003\u0002\u0002\u0002\u00c7\u00c8\u0003\u0002\u0002\u0002\u00c8\u00c9", - "\u0007b\u0002\u0002\u00c9\u000f\u0003\u0002\u0002\u0002\u00ca\u00cd", - "\u0005\u00a8U\u0002\u00cb\u00cc\u0007\f\u0002\u0002\u00cc\u00ce\u0005", - "\u00a8U\u0002\u00cd\u00cb\u0003\u0002\u0002\u0002\u00cd\u00ce\u0003", - "\u0002\u0002\u0002\u00ce\u0011\u0003\u0002\u0002\u0002\u00cf\u00d0\u0007", - "\r\u0002\u0002\u00d0\u00d3\u0007v\u0002\u0002\u00d1\u00d2\u0007\f\u0002", - "\u0002\u00d2\u00d4\u0005\u00a8U\u0002\u00d3\u00d1\u0003\u0002\u0002", - "\u0002\u00d3\u00d4\u0003\u0002\u0002\u0002\u00d4\u00d5\u0003\u0002\u0002", - "\u0002\u00d5\u00f2\u0007\u0004\u0002\u0002\u00d6\u00d9\u0007\r\u0002", - "\u0002\u00d7\u00da\u0007\u000e\u0002\u0002\u00d8\u00da\u0005\u00a8U", - "\u0002\u00d9\u00d7\u0003\u0002\u0002\u0002\u00d9\u00d8\u0003\u0002\u0002", - "\u0002\u00da\u00dd\u0003\u0002\u0002\u0002\u00db\u00dc\u0007\f\u0002", - "\u0002\u00dc\u00de\u0005\u00a8U\u0002\u00dd\u00db\u0003\u0002\u0002", - "\u0002\u00dd\u00de\u0003\u0002\u0002\u0002\u00de\u00df\u0003\u0002\u0002", - "\u0002\u00df\u00e0\u0007\u000f\u0002\u0002\u00e0\u00e1\u0007v\u0002", - "\u0002\u00e1\u00f2\u0007\u0004\u0002\u0002\u00e2\u00e3\u0007\r\u0002", - "\u0002\u00e3\u00e4\u0007\u0010\u0002\u0002\u00e4\u00e9\u0005\u0010\t", - "\u0002\u00e5\u00e6\u0007\u0011\u0002\u0002\u00e6\u00e8\u0005\u0010\t", - "\u0002\u00e7\u00e5\u0003\u0002\u0002\u0002\u00e8\u00eb\u0003\u0002\u0002", - "\u0002\u00e9\u00e7\u0003\u0002\u0002\u0002\u00e9\u00ea\u0003\u0002\u0002", - "\u0002\u00ea\u00ec\u0003\u0002\u0002\u0002\u00eb\u00e9\u0003\u0002\u0002", - "\u0002\u00ec\u00ed\u0007\u0012\u0002\u0002\u00ed\u00ee\u0007\u000f\u0002", - "\u0002\u00ee\u00ef\u0007v\u0002\u0002\u00ef\u00f0\u0007\u0004\u0002", - "\u0002\u00f0\u00f2\u0003\u0002\u0002\u0002\u00f1\u00cf\u0003\u0002\u0002", - "\u0002\u00f1\u00d6\u0003\u0002\u0002\u0002\u00f1\u00e2\u0003\u0002\u0002", - "\u0002\u00f2\u0013\u0003\u0002\u0002\u0002\u00f3\u00f4\t\u0003\u0002", - "\u0002\u00f4\u00fe\u0005\u00a8U\u0002\u00f5\u00f6\u0007\u0016\u0002", - "\u0002\u00f6\u00fb\u0005\u0016\f\u0002\u00f7\u00f8\u0007\u0011\u0002", - "\u0002\u00f8\u00fa\u0005\u0016\f\u0002\u00f9\u00f7\u0003\u0002\u0002", - "\u0002\u00fa\u00fd\u0003\u0002\u0002\u0002\u00fb\u00f9\u0003\u0002\u0002", - "\u0002\u00fb\u00fc\u0003\u0002\u0002\u0002\u00fc\u00ff\u0003\u0002\u0002", - "\u0002\u00fd\u00fb\u0003\u0002\u0002\u0002\u00fe\u00f5\u0003\u0002\u0002", - "\u0002\u00fe\u00ff\u0003\u0002\u0002\u0002\u00ff\u0100\u0003\u0002\u0002", - "\u0002\u0100\u0104\u0007\u0010\u0002\u0002\u0101\u0103\u0005\u0018\r", - "\u0002\u0102\u0101\u0003\u0002\u0002\u0002\u0103\u0106\u0003\u0002\u0002", - "\u0002\u0104\u0102\u0003\u0002\u0002\u0002\u0104\u0105\u0003\u0002\u0002", - "\u0002\u0105\u0107\u0003\u0002\u0002\u0002\u0106\u0104\u0003\u0002\u0002", - "\u0002\u0107\u0108\u0007\u0012\u0002\u0002\u0108\u0015\u0003\u0002\u0002", - "\u0002\u0109\u0115\u0005B\"\u0002\u010a\u010b\u0007\u0017\u0002\u0002", - "\u010b\u0110\u0005p9\u0002\u010c\u010d\u0007\u0011\u0002\u0002\u010d", - "\u010f\u0005p9\u0002\u010e\u010c\u0003\u0002\u0002\u0002\u010f\u0112", - "\u0003\u0002\u0002\u0002\u0110\u010e\u0003\u0002\u0002\u0002\u0110\u0111", - "\u0003\u0002\u0002\u0002\u0111\u0113\u0003\u0002\u0002\u0002\u0112\u0110", - "\u0003\u0002\u0002\u0002\u0113\u0114\u0007\u0018\u0002\u0002\u0114\u0116", - "\u0003\u0002\u0002\u0002\u0115\u010a\u0003\u0002\u0002\u0002\u0115\u0116", - "\u0003\u0002\u0002\u0002\u0116\u0017\u0003\u0002\u0002\u0002\u0117\u0120", - "\u0005\u001a\u000e\u0002\u0118\u0120\u0005\u001c\u000f\u0002\u0119\u0120", - "\u0005\u001e\u0010\u0002\u011a\u0120\u0005 \u0011\u0002\u011b\u0120", - "\u0005\"\u0012\u0002\u011c\u0120\u0005&\u0014\u0002\u011d\u0120\u0005", - ",\u0017\u0002\u011e\u0120\u00050\u0019\u0002\u011f\u0117\u0003\u0002", - "\u0002\u0002\u011f\u0118\u0003\u0002\u0002\u0002\u011f\u0119\u0003\u0002", - "\u0002\u0002\u011f\u011a\u0003\u0002\u0002\u0002\u011f\u011b\u0003\u0002", - "\u0002\u0002\u011f\u011c\u0003\u0002\u0002\u0002\u011f\u011d\u0003\u0002", - "\u0002\u0002\u011f\u011e\u0003\u0002\u0002\u0002\u0120\u0019\u0003\u0002", - "\u0002\u0002\u0121\u0125\u0005@!\u0002\u0122\u0124\t\u0004\u0002\u0002", - "\u0123\u0122\u0003\u0002\u0002\u0002\u0124\u0127\u0003\u0002\u0002\u0002", - "\u0125\u0123\u0003\u0002\u0002\u0002\u0125\u0126\u0003\u0002\u0002\u0002", - "\u0126\u0128\u0003\u0002\u0002\u0002\u0127\u0125\u0003\u0002\u0002\u0002", - "\u0128\u012b\u0005\u00a8U\u0002\u0129\u012a\u0007\u000b\u0002\u0002", - "\u012a\u012c\u0005p9\u0002\u012b\u0129\u0003\u0002\u0002\u0002\u012b", - "\u012c\u0003\u0002\u0002\u0002\u012c\u012d\u0003\u0002\u0002\u0002\u012d", - "\u012e\u0007\u0004\u0002\u0002\u012e\u001b\u0003\u0002\u0002\u0002\u012f", - "\u0130\u0007\u0019\u0002\u0002\u0130\u0131\u0005\u00a8U\u0002\u0131", - "\u0134\u0007\u001a\u0002\u0002\u0132\u0135\u0007\u000e\u0002\u0002\u0133", - "\u0135\u0005@!\u0002\u0134\u0132\u0003\u0002\u0002\u0002\u0134\u0133", - "\u0003\u0002\u0002\u0002\u0135\u0136\u0003\u0002\u0002\u0002\u0136\u0137", - "\u0007\u0004\u0002\u0002\u0137\u001d\u0003\u0002\u0002\u0002\u0138\u0139", - "\u0007\u001b\u0002\u0002\u0139\u013a\u0005\u00a8U\u0002\u013a\u0145", - "\u0007\u0010\u0002\u0002\u013b\u013c\u0005> \u0002\u013c\u0142\u0007", - "\u0004\u0002\u0002\u013d\u013e\u0005> \u0002\u013e\u013f\u0007\u0004", - "\u0002\u0002\u013f\u0141\u0003\u0002\u0002\u0002\u0140\u013d\u0003\u0002", - "\u0002\u0002\u0141\u0144\u0003\u0002\u0002\u0002\u0142\u0140\u0003\u0002", - "\u0002\u0002\u0142\u0143\u0003\u0002\u0002\u0002\u0143\u0146\u0003\u0002", - "\u0002\u0002\u0144\u0142\u0003\u0002\u0002\u0002\u0145\u013b\u0003\u0002", - "\u0002\u0002\u0145\u0146\u0003\u0002\u0002\u0002\u0146\u0147\u0003\u0002", - "\u0002\u0002\u0147\u0148\u0007\u0012\u0002\u0002\u0148\u001f\u0003\u0002", - "\u0002\u0002\u0149\u014a\u0007\u001c\u0002\u0002\u014a\u014b\u00052", - "\u001a\u0002\u014b\u014c\u0005*\u0016\u0002\u014c\u014d\u0005L\'\u0002", - "\u014d!\u0003\u0002\u0002\u0002\u014e\u014f\u0007\u001d\u0002\u0002", - "\u014f\u0151\u0005\u00a8U\u0002\u0150\u0152\u00052\u001a\u0002\u0151", - "\u0150\u0003\u0002\u0002\u0002\u0151\u0152\u0003\u0002\u0002\u0002\u0152", - "\u0153\u0003\u0002\u0002\u0002\u0153\u0154\u0005L\'\u0002\u0154#\u0003", - "\u0002\u0002\u0002\u0155\u015b\u0005\u00a8U\u0002\u0156\u0158\u0007", - "\u0017\u0002\u0002\u0157\u0159\u0005t;\u0002\u0158\u0157\u0003\u0002", - "\u0002\u0002\u0158\u0159\u0003\u0002\u0002\u0002\u0159\u015a\u0003\u0002", - "\u0002\u0002\u015a\u015c\u0007\u0018\u0002\u0002\u015b\u0156\u0003\u0002", - "\u0002\u0002\u015b\u015c\u0003\u0002\u0002\u0002\u015c%\u0003\u0002", - "\u0002\u0002\u015d\u015f\u0007\u001e\u0002\u0002\u015e\u0160\u0005\u00a8", - "U\u0002\u015f\u015e\u0003\u0002\u0002\u0002\u015f\u0160\u0003\u0002", - "\u0002\u0002\u0160\u0161\u0003\u0002\u0002\u0002\u0161\u0162\u00052", - "\u001a\u0002\u0162\u0164\u0005*\u0016\u0002\u0163\u0165\u0005(\u0015", - "\u0002\u0164\u0163\u0003\u0002\u0002\u0002\u0164\u0165\u0003\u0002\u0002", - "\u0002\u0165\u0168\u0003\u0002\u0002\u0002\u0166\u0169\u0007\u0004\u0002", - "\u0002\u0167\u0169\u0005L\'\u0002\u0168\u0166\u0003\u0002\u0002\u0002", - "\u0168\u0167\u0003\u0002\u0002\u0002\u0169\'\u0003\u0002\u0002\u0002", - "\u016a\u016b\u0007\u001f\u0002\u0002\u016b\u016c\u00052\u001a\u0002", - "\u016c)\u0003\u0002\u0002\u0002\u016d\u0174\u0005$\u0013\u0002\u016e", - "\u0174\u0005J&\u0002\u016f\u0174\u0007m\u0002\u0002\u0170\u0174\u0007", - "r\u0002\u0002\u0171\u0174\u0007o\u0002\u0002\u0172\u0174\u0007q\u0002", - "\u0002\u0173\u016d\u0003\u0002\u0002\u0002\u0173\u016e\u0003\u0002\u0002", - "\u0002\u0173\u016f\u0003\u0002\u0002\u0002\u0173\u0170\u0003\u0002\u0002", - "\u0002\u0173\u0171\u0003\u0002\u0002\u0002\u0173\u0172\u0003\u0002\u0002", - "\u0002\u0174\u0177\u0003\u0002\u0002\u0002\u0175\u0173\u0003\u0002\u0002", - "\u0002\u0175\u0176\u0003\u0002\u0002\u0002\u0176+\u0003\u0002\u0002", - "\u0002\u0177\u0175\u0003\u0002\u0002\u0002\u0178\u0179\u0007 \u0002", - "\u0002\u0179\u017a\u0005\u00a8U\u0002\u017a\u017c\u00056\u001c\u0002", - "\u017b\u017d\u0007i\u0002\u0002\u017c\u017b\u0003\u0002\u0002\u0002", - "\u017c\u017d\u0003\u0002\u0002\u0002\u017d\u017e\u0003\u0002\u0002\u0002", - "\u017e\u017f\u0007\u0004\u0002\u0002\u017f-\u0003\u0002\u0002\u0002", - "\u0180\u0181\u0005\u00a8U\u0002\u0181/\u0003\u0002\u0002\u0002\u0182", - "\u0183\u0007!\u0002\u0002\u0183\u0184\u0005\u00a8U\u0002\u0184\u0186", - "\u0007\u0010\u0002\u0002\u0185\u0187\u0005.\u0018\u0002\u0186\u0185", - "\u0003\u0002\u0002\u0002\u0186\u0187\u0003\u0002\u0002\u0002\u0187\u018c", - "\u0003\u0002\u0002\u0002\u0188\u0189\u0007\u0011\u0002\u0002\u0189\u018b", - "\u0005.\u0018\u0002\u018a\u0188\u0003\u0002\u0002\u0002\u018b\u018e", - "\u0003\u0002\u0002\u0002\u018c\u018a\u0003\u0002\u0002\u0002\u018c\u018d", - "\u0003\u0002\u0002\u0002\u018d\u018f\u0003\u0002\u0002\u0002\u018e\u018c", - "\u0003\u0002\u0002\u0002\u018f\u0190\u0007\u0012\u0002\u0002\u01901", - "\u0003\u0002\u0002\u0002\u0191\u019a\u0007\u0017\u0002\u0002\u0192\u0197", - "\u00054\u001b\u0002\u0193\u0194\u0007\u0011\u0002\u0002\u0194\u0196", - "\u00054\u001b\u0002\u0195\u0193\u0003\u0002\u0002\u0002\u0196\u0199", - "\u0003\u0002\u0002\u0002\u0197\u0195\u0003\u0002\u0002\u0002\u0197\u0198", - "\u0003\u0002\u0002\u0002\u0198\u019b\u0003\u0002\u0002\u0002\u0199\u0197", - "\u0003\u0002\u0002\u0002\u019a\u0192\u0003\u0002\u0002\u0002\u019a\u019b", - "\u0003\u0002\u0002\u0002\u019b\u019c\u0003\u0002\u0002\u0002\u019c\u019d", - "\u0007\u0018\u0002\u0002\u019d3\u0003\u0002\u0002\u0002\u019e\u01a0", - "\u0005@!\u0002\u019f\u01a1\u0005H%\u0002\u01a0\u019f\u0003\u0002\u0002", - "\u0002\u01a0\u01a1\u0003\u0002\u0002\u0002\u01a1\u01a3\u0003\u0002\u0002", - "\u0002\u01a2\u01a4\u0005\u00a8U\u0002\u01a3\u01a2\u0003\u0002\u0002", - "\u0002\u01a3\u01a4\u0003\u0002\u0002\u0002\u01a45\u0003\u0002\u0002", - "\u0002\u01a5\u01ae\u0007\u0017\u0002\u0002\u01a6\u01ab\u00058\u001d", - "\u0002\u01a7\u01a8\u0007\u0011\u0002\u0002\u01a8\u01aa\u00058\u001d", - "\u0002\u01a9\u01a7\u0003\u0002\u0002\u0002\u01aa\u01ad\u0003\u0002\u0002", - "\u0002\u01ab\u01a9\u0003\u0002\u0002\u0002\u01ab\u01ac\u0003\u0002\u0002", - "\u0002\u01ac\u01af\u0003\u0002\u0002\u0002\u01ad\u01ab\u0003\u0002\u0002", - "\u0002\u01ae\u01a6\u0003\u0002\u0002\u0002\u01ae\u01af\u0003\u0002\u0002", - "\u0002\u01af\u01b0\u0003\u0002\u0002\u0002\u01b0\u01b1\u0007\u0018\u0002", - "\u0002\u01b17\u0003\u0002\u0002\u0002\u01b2\u01b4\u0005@!\u0002\u01b3", - "\u01b5\u0007n\u0002\u0002\u01b4\u01b3\u0003\u0002\u0002\u0002\u01b4", - "\u01b5\u0003\u0002\u0002\u0002\u01b5\u01b7\u0003\u0002\u0002\u0002\u01b6", - "\u01b8\u0005\u00a8U\u0002\u01b7\u01b6\u0003\u0002\u0002\u0002\u01b7", - "\u01b8\u0003\u0002\u0002\u0002\u01b89\u0003\u0002\u0002\u0002\u01b9", - "\u01c2\u0007\u0017\u0002\u0002\u01ba\u01bf\u0005<\u001f\u0002\u01bb", - "\u01bc\u0007\u0011\u0002\u0002\u01bc\u01be\u0005<\u001f\u0002\u01bd", - "\u01bb\u0003\u0002\u0002\u0002\u01be\u01c1\u0003\u0002\u0002\u0002\u01bf", - "\u01bd\u0003\u0002\u0002\u0002\u01bf\u01c0\u0003\u0002\u0002\u0002\u01c0", - "\u01c3\u0003\u0002\u0002\u0002\u01c1\u01bf\u0003\u0002\u0002\u0002\u01c2", - "\u01ba\u0003\u0002\u0002\u0002\u01c2\u01c3\u0003\u0002\u0002\u0002\u01c3", - "\u01c4\u0003\u0002\u0002\u0002\u01c4\u01c5\u0007\u0018\u0002\u0002\u01c5", - ";\u0003\u0002\u0002\u0002\u01c6\u01c8\u0005@!\u0002\u01c7\u01c9\u0005", - "H%\u0002\u01c8\u01c7\u0003\u0002\u0002\u0002\u01c8\u01c9\u0003\u0002", - "\u0002\u0002\u01c9=\u0003\u0002\u0002\u0002\u01ca\u01cc\u0005@!\u0002", - "\u01cb\u01cd\u0005H%\u0002\u01cc\u01cb\u0003\u0002\u0002\u0002\u01cc", - "\u01cd\u0003\u0002\u0002\u0002\u01cd\u01ce\u0003\u0002\u0002\u0002\u01ce", - "\u01cf\u0005\u00a8U\u0002\u01cf?\u0003\u0002\u0002\u0002\u01d0\u01d1", - "\b!\u0001\u0002\u01d1\u01d6\u0005n8\u0002\u01d2\u01d6\u0005B\"\u0002", - "\u01d3\u01d6\u0005D#\u0002\u01d4\u01d6\u0005F$\u0002\u01d5\u01d0\u0003", - "\u0002\u0002\u0002\u01d5\u01d2\u0003\u0002\u0002\u0002\u01d5\u01d3\u0003", - "\u0002\u0002\u0002\u01d5\u01d4\u0003\u0002\u0002\u0002\u01d6\u01df\u0003", - "\u0002\u0002\u0002\u01d7\u01d8\f\u0004\u0002\u0002\u01d8\u01da\u0007", - "\"\u0002\u0002\u01d9\u01db\u0005p9\u0002\u01da\u01d9\u0003\u0002\u0002", - "\u0002\u01da\u01db\u0003\u0002\u0002\u0002\u01db\u01dc\u0003\u0002\u0002", - "\u0002\u01dc\u01de\u0007#\u0002\u0002\u01dd\u01d7\u0003\u0002\u0002", - "\u0002\u01de\u01e1\u0003\u0002\u0002\u0002\u01df\u01dd\u0003\u0002\u0002", - "\u0002\u01df\u01e0\u0003\u0002\u0002\u0002\u01e0A\u0003\u0002\u0002", - "\u0002\u01e1\u01df\u0003\u0002\u0002\u0002\u01e2\u01e7\u0005\u00a8U", - "\u0002\u01e3\u01e4\u0007$\u0002\u0002\u01e4\u01e6\u0005\u00a8U\u0002", - "\u01e5\u01e3\u0003\u0002\u0002\u0002\u01e6\u01e9\u0003\u0002\u0002\u0002", - "\u01e7\u01e5\u0003\u0002\u0002\u0002\u01e7\u01e8\u0003\u0002\u0002\u0002", - "\u01e8C\u0003\u0002\u0002\u0002\u01e9\u01e7\u0003\u0002\u0002\u0002", - "\u01ea\u01eb\u0007%\u0002\u0002\u01eb\u01ec\u0007\u0017\u0002\u0002", - "\u01ec\u01ed\u0005n8\u0002\u01ed\u01ee\u0007&\u0002\u0002\u01ee\u01ef", - "\u0005@!\u0002\u01ef\u01f0\u0007\u0018\u0002\u0002\u01f0E\u0003\u0002", - "\u0002\u0002\u01f1\u01f2\u0007\u001e\u0002\u0002\u01f2\u01f8\u0005:", - "\u001e\u0002\u01f3\u01f7\u0007o\u0002\u0002\u01f4\u01f7\u0007m\u0002", - "\u0002\u01f5\u01f7\u0005J&\u0002\u01f6\u01f3\u0003\u0002\u0002\u0002", - "\u01f6\u01f4\u0003\u0002\u0002\u0002\u01f6\u01f5\u0003\u0002\u0002\u0002", - "\u01f7\u01fa\u0003\u0002\u0002\u0002\u01f8\u01f6\u0003\u0002\u0002\u0002", - "\u01f8\u01f9\u0003\u0002\u0002\u0002\u01f9\u01fd\u0003\u0002\u0002\u0002", - "\u01fa\u01f8\u0003\u0002\u0002\u0002\u01fb\u01fc\u0007\u001f\u0002\u0002", - "\u01fc\u01fe\u0005:\u001e\u0002\u01fd\u01fb\u0003\u0002\u0002\u0002", - "\u01fd\u01fe\u0003\u0002\u0002\u0002\u01feG\u0003\u0002\u0002\u0002", - "\u01ff\u0200\t\u0005\u0002\u0002\u0200I\u0003\u0002\u0002\u0002\u0201", - "\u0202\t\u0006\u0002\u0002\u0202K\u0003\u0002\u0002\u0002\u0203\u0207", - "\u0007\u0010\u0002\u0002\u0204\u0206\u0005N(\u0002\u0205\u0204\u0003", - "\u0002\u0002\u0002\u0206\u0209\u0003\u0002\u0002\u0002\u0207\u0205\u0003", - "\u0002\u0002\u0002\u0207\u0208\u0003\u0002\u0002\u0002\u0208\u020a\u0003", - "\u0002\u0002\u0002\u0209\u0207\u0003\u0002\u0002\u0002\u020a\u020b\u0007", - "\u0012\u0002\u0002\u020bM\u0003\u0002\u0002\u0002\u020c\u0219\u0005", - "R*\u0002\u020d\u0219\u0005T+\u0002\u020e\u0219\u0005X-\u0002\u020f\u0219", - "\u0005L\'\u0002\u0210\u0219\u0005Z.\u0002\u0211\u0219\u0005\\/\u0002", - "\u0212\u0219\u0005^0\u0002\u0213\u0219\u0005`1\u0002\u0214\u0219\u0005", - "b2\u0002\u0215\u0219\u0005d3\u0002\u0216\u0219\u0005f4\u0002\u0217\u0219", - "\u0005V,\u0002\u0218\u020c\u0003\u0002\u0002\u0002\u0218\u020d\u0003", - "\u0002\u0002\u0002\u0218\u020e\u0003\u0002\u0002\u0002\u0218\u020f\u0003", - "\u0002\u0002\u0002\u0218\u0210\u0003\u0002\u0002\u0002\u0218\u0211\u0003", - "\u0002\u0002\u0002\u0218\u0212\u0003\u0002\u0002\u0002\u0218\u0213\u0003", - "\u0002\u0002\u0002\u0218\u0214\u0003\u0002\u0002\u0002\u0218\u0215\u0003", - "\u0002\u0002\u0002\u0218\u0216\u0003\u0002\u0002\u0002\u0218\u0217\u0003", - "\u0002\u0002\u0002\u0219O\u0003\u0002\u0002\u0002\u021a\u021b\u0005", - "p9\u0002\u021b\u021c\u0007\u0004\u0002\u0002\u021cQ\u0003\u0002\u0002", - "\u0002\u021d\u021e\u0007*\u0002\u0002\u021e\u021f\u0007\u0017\u0002", - "\u0002\u021f\u0220\u0005p9\u0002\u0220\u0221\u0007\u0018\u0002\u0002", - "\u0221\u0224\u0005N(\u0002\u0222\u0223\u0007+\u0002\u0002\u0223\u0225", - "\u0005N(\u0002\u0224\u0222\u0003\u0002\u0002\u0002\u0224\u0225\u0003", - "\u0002\u0002\u0002\u0225S\u0003\u0002\u0002\u0002\u0226\u0227\u0007", - ",\u0002\u0002\u0227\u0228\u0007\u0017\u0002\u0002\u0228\u0229\u0005", - "p9\u0002\u0229\u022a\u0007\u0018\u0002\u0002\u022a\u022b\u0005N(\u0002", - "\u022bU\u0003\u0002\u0002\u0002\u022c\u022f\u0005h5\u0002\u022d\u022f", - "\u0005P)\u0002\u022e\u022c\u0003\u0002\u0002\u0002\u022e\u022d\u0003", - "\u0002\u0002\u0002\u022fW\u0003\u0002\u0002\u0002\u0230\u0231\u0007", - "\u001a\u0002\u0002\u0231\u0234\u0007\u0017\u0002\u0002\u0232\u0235\u0005", - "V,\u0002\u0233\u0235\u0007\u0004\u0002\u0002\u0234\u0232\u0003\u0002", - "\u0002\u0002\u0234\u0233\u0003\u0002\u0002\u0002\u0235\u0237\u0003\u0002", - "\u0002\u0002\u0236\u0238\u0005p9\u0002\u0237\u0236\u0003\u0002\u0002", - "\u0002\u0237\u0238\u0003\u0002\u0002\u0002\u0238\u0239\u0003\u0002\u0002", - "\u0002\u0239\u023b\u0007\u0004\u0002\u0002\u023a\u023c\u0005p9\u0002", - "\u023b\u023a\u0003\u0002\u0002\u0002\u023b\u023c\u0003\u0002\u0002\u0002", - "\u023c\u023d\u0003\u0002\u0002\u0002\u023d\u023e\u0007\u0018\u0002\u0002", - "\u023e\u023f\u0005N(\u0002\u023fY\u0003\u0002\u0002\u0002\u0240\u0242", - "\u0007-\u0002\u0002\u0241\u0243\u0007v\u0002\u0002\u0242\u0241\u0003", - "\u0002\u0002\u0002\u0242\u0243\u0003\u0002\u0002\u0002\u0243\u0244\u0003", - "\u0002\u0002\u0002\u0244\u0245\u0005~@\u0002\u0245[\u0003\u0002\u0002", - "\u0002\u0246\u0247\u0007.\u0002\u0002\u0247\u0248\u0005N(\u0002\u0248", - "\u0249\u0007,\u0002\u0002\u0249\u024a\u0007\u0017\u0002\u0002\u024a", - "\u024b\u0005p9\u0002\u024b\u024c\u0007\u0018\u0002\u0002\u024c\u024d", - "\u0007\u0004\u0002\u0002\u024d]\u0003\u0002\u0002\u0002\u024e\u024f", - "\u0007l\u0002\u0002\u024f\u0250\u0007\u0004\u0002\u0002\u0250_\u0003", - "\u0002\u0002\u0002\u0251\u0252\u0007j\u0002\u0002\u0252\u0253\u0007", - "\u0004\u0002\u0002\u0253a\u0003\u0002\u0002\u0002\u0254\u0256\u0007", - "/\u0002\u0002\u0255\u0257\u0005p9\u0002\u0256\u0255\u0003\u0002\u0002", - "\u0002\u0256\u0257\u0003\u0002\u0002\u0002\u0257\u0258\u0003\u0002\u0002", - "\u0002\u0258\u0259\u0007\u0004\u0002\u0002\u0259c\u0003\u0002\u0002", - "\u0002\u025a\u025b\u00070\u0002\u0002\u025b\u025c\u0007\u0004\u0002", - "\u0002\u025ce\u0003\u0002\u0002\u0002\u025d\u025e\u00071\u0002\u0002", - "\u025e\u025f\u0005|?\u0002\u025f\u0260\u0007\u0004\u0002\u0002\u0260", - "g\u0003\u0002\u0002\u0002\u0261\u0262\u00072\u0002\u0002\u0262\u0269", - "\u0005l7\u0002\u0263\u0269\u0005> \u0002\u0264\u0265\u0007\u0017\u0002", - "\u0002\u0265\u0266\u0005j6\u0002\u0266\u0267\u0007\u0018\u0002\u0002", - "\u0267\u0269\u0003\u0002\u0002\u0002\u0268\u0261\u0003\u0002\u0002\u0002", - "\u0268\u0263\u0003\u0002\u0002\u0002\u0268\u0264\u0003\u0002\u0002\u0002", - "\u0269\u026c\u0003\u0002\u0002\u0002\u026a\u026b\u0007\u000b\u0002\u0002", - "\u026b\u026d\u0005p9\u0002\u026c\u026a\u0003\u0002\u0002\u0002\u026c", - "\u026d\u0003\u0002\u0002\u0002\u026d\u026e\u0003\u0002\u0002\u0002\u026e", - "\u026f\u0007\u0004\u0002\u0002\u026fi\u0003\u0002\u0002\u0002\u0270", - "\u0272\u0005> \u0002\u0271\u0270\u0003\u0002\u0002\u0002\u0271\u0272", - "\u0003\u0002\u0002\u0002\u0272\u0279\u0003\u0002\u0002\u0002\u0273\u0275", - "\u0007\u0011\u0002\u0002\u0274\u0276\u0005> \u0002\u0275\u0274\u0003", - "\u0002\u0002\u0002\u0275\u0276\u0003\u0002\u0002\u0002\u0276\u0278\u0003", - "\u0002\u0002\u0002\u0277\u0273\u0003\u0002\u0002\u0002\u0278\u027b\u0003", - "\u0002\u0002\u0002\u0279\u0277\u0003\u0002\u0002\u0002\u0279\u027a\u0003", - "\u0002\u0002\u0002\u027ak\u0003\u0002\u0002\u0002\u027b\u0279\u0003", - "\u0002\u0002\u0002\u027c\u0283\u0007\u0017\u0002\u0002\u027d\u027f\u0005", - "\u00a8U\u0002\u027e\u027d\u0003\u0002\u0002\u0002\u027e\u027f\u0003", - "\u0002\u0002\u0002\u027f\u0280\u0003\u0002\u0002\u0002\u0280\u0282\u0007", - "\u0011\u0002\u0002\u0281\u027e\u0003\u0002\u0002\u0002\u0282\u0285\u0003", - "\u0002\u0002\u0002\u0283\u0281\u0003\u0002\u0002\u0002\u0283\u0284\u0003", - "\u0002\u0002\u0002\u0284\u0287\u0003\u0002\u0002\u0002\u0285\u0283\u0003", - "\u0002\u0002\u0002\u0286\u0288\u0005\u00a8U\u0002\u0287\u0286\u0003", - "\u0002\u0002\u0002\u0287\u0288\u0003\u0002\u0002\u0002\u0288\u0289\u0003", - "\u0002\u0002\u0002\u0289\u028a\u0007\u0018\u0002\u0002\u028am\u0003", - "\u0002\u0002\u0002\u028b\u028c\t\u0007\u0002\u0002\u028co\u0003\u0002", - "\u0002\u0002\u028d\u028e\b9\u0001\u0002\u028e\u028f\u00079\u0002\u0002", - "\u028f\u02a0\u0005@!\u0002\u0290\u0291\u0007\u0017\u0002\u0002\u0291", - "\u0292\u0005p9\u0002\u0292\u0293\u0007\u0018\u0002\u0002\u0293\u02a0", - "\u0003\u0002\u0002\u0002\u0294\u0295\t\b\u0002\u0002\u0295\u02a0\u0005", - "p9\u0015\u0296\u0297\t\t\u0002\u0002\u0297\u02a0\u0005p9\u0014\u0298", - "\u0299\t\n\u0002\u0002\u0299\u02a0\u0005p9\u0013\u029a\u029b\u0007>", - "\u0002\u0002\u029b\u02a0\u0005p9\u0012\u029c\u029d\u0007\u0006\u0002", - "\u0002\u029d\u02a0\u0005p9\u0011\u029e\u02a0\u0005r:\u0002\u029f\u028d", - "\u0003\u0002\u0002\u0002\u029f\u0290\u0003\u0002\u0002\u0002\u029f\u0294", - "\u0003\u0002\u0002\u0002\u029f\u0296\u0003\u0002\u0002\u0002\u029f\u0298", - "\u0003\u0002\u0002\u0002\u029f\u029a\u0003\u0002\u0002\u0002\u029f\u029c", - "\u0003\u0002\u0002\u0002\u029f\u029e\u0003\u0002\u0002\u0002\u02a0\u02dc", - "\u0003\u0002\u0002\u0002\u02a1\u02a2\f\u0010\u0002\u0002\u02a2\u02a3", - "\u0007?\u0002\u0002\u02a3\u02db\u0005p9\u0011\u02a4\u02a5\f\u000f\u0002", - "\u0002\u02a5\u02a6\t\u000b\u0002\u0002\u02a6\u02db\u0005p9\u0010\u02a7", - "\u02a8\f\u000e\u0002\u0002\u02a8\u02a9\t\t\u0002\u0002\u02a9\u02db\u0005", - "p9\u000f\u02aa\u02ab\f\r\u0002\u0002\u02ab\u02ac\t\f\u0002\u0002\u02ac", - "\u02db\u0005p9\u000e\u02ad\u02ae\f\f\u0002\u0002\u02ae\u02af\u0007D", - "\u0002\u0002\u02af\u02db\u0005p9\r\u02b0\u02b1\f\u000b\u0002\u0002\u02b1", - "\u02b2\u0007\u0005\u0002\u0002\u02b2\u02db\u0005p9\f\u02b3\u02b4\f\n", - "\u0002\u0002\u02b4\u02b5\u0007E\u0002\u0002\u02b5\u02db\u0005p9\u000b", - "\u02b6\u02b7\f\t\u0002\u0002\u02b7\u02b8\t\r\u0002\u0002\u02b8\u02db", - "\u0005p9\n\u02b9\u02ba\f\b\u0002\u0002\u02ba\u02bb\t\u000e\u0002\u0002", - "\u02bb\u02db\u0005p9\t\u02bc\u02bd\f\u0007\u0002\u0002\u02bd\u02be\u0007", - "H\u0002\u0002\u02be\u02db\u0005p9\b\u02bf\u02c0\f\u0006\u0002\u0002", - "\u02c0\u02c1\u0007I\u0002\u0002\u02c1\u02db\u0005p9\u0007\u02c2\u02c3", - "\f\u0005\u0002\u0002\u02c3\u02c4\u0007J\u0002\u0002\u02c4\u02c5\u0005", - "p9\u0002\u02c5\u02c6\u0007K\u0002\u0002\u02c6\u02c7\u0005p9\u0006\u02c7", - "\u02db\u0003\u0002\u0002\u0002\u02c8\u02c9\f\u0004\u0002\u0002\u02c9", - "\u02ca\t\u000f\u0002\u0002\u02ca\u02db\u0005p9\u0005\u02cb\u02cc\f\u001b", - "\u0002\u0002\u02cc\u02db\t\b\u0002\u0002\u02cd\u02ce\f\u0019\u0002\u0002", - "\u02ce\u02cf\u0007\"\u0002\u0002\u02cf\u02d0\u0005p9\u0002\u02d0\u02d1", - "\u0007#\u0002\u0002\u02d1\u02db\u0003\u0002\u0002\u0002\u02d2\u02d3", - "\f\u0018\u0002\u0002\u02d3\u02d4\u0007\u0017\u0002\u0002\u02d4\u02d5", - "\u0005z>\u0002\u02d5\u02d6\u0007\u0018\u0002\u0002\u02d6\u02db\u0003", - "\u0002\u0002\u0002\u02d7\u02d8\f\u0017\u0002\u0002\u02d8\u02d9\u0007", - "$\u0002\u0002\u02d9\u02db\u0005\u00a8U\u0002\u02da\u02a1\u0003\u0002", - "\u0002\u0002\u02da\u02a4\u0003\u0002\u0002\u0002\u02da\u02a7\u0003\u0002", - "\u0002\u0002\u02da\u02aa\u0003\u0002\u0002\u0002\u02da\u02ad\u0003\u0002", - "\u0002\u0002\u02da\u02b0\u0003\u0002\u0002\u0002\u02da\u02b3\u0003\u0002", - "\u0002\u0002\u02da\u02b6\u0003\u0002\u0002\u0002\u02da\u02b9\u0003\u0002", - "\u0002\u0002\u02da\u02bc\u0003\u0002\u0002\u0002\u02da\u02bf\u0003\u0002", - "\u0002\u0002\u02da\u02c2\u0003\u0002\u0002\u0002\u02da\u02c8\u0003\u0002", - "\u0002\u0002\u02da\u02cb\u0003\u0002\u0002\u0002\u02da\u02cd\u0003\u0002", - "\u0002\u0002\u02da\u02d2\u0003\u0002\u0002\u0002\u02da\u02d7\u0003\u0002", - "\u0002\u0002\u02db\u02de\u0003\u0002\u0002\u0002\u02dc\u02da\u0003\u0002", - "\u0002\u0002\u02dc\u02dd\u0003\u0002\u0002\u0002\u02ddq\u0003\u0002", - "\u0002\u0002\u02de\u02dc\u0003\u0002\u0002\u0002\u02df\u02e7\u0007c", - "\u0002\u0002\u02e0\u02e7\u0005\u00a6T\u0002\u02e1\u02e7\u0007g\u0002", - "\u0002\u02e2\u02e7\u0007v\u0002\u0002\u02e3\u02e7\u0005\u00a8U\u0002", - "\u02e4\u02e7\u0005\u00a2R\u0002\u02e5\u02e7\u0005\u00a4S\u0002\u02e6", - "\u02df\u0003\u0002\u0002\u0002\u02e6\u02e0\u0003\u0002\u0002\u0002\u02e6", - "\u02e1\u0003\u0002\u0002\u0002\u02e6\u02e2\u0003\u0002\u0002\u0002\u02e6", - "\u02e3\u0003\u0002\u0002\u0002\u02e6\u02e4\u0003\u0002\u0002\u0002\u02e6", - "\u02e5\u0003\u0002\u0002\u0002\u02e7s\u0003\u0002\u0002\u0002\u02e8", - "\u02ed\u0005p9\u0002\u02e9\u02ea\u0007\u0011\u0002\u0002\u02ea\u02ec", - "\u0005p9\u0002\u02eb\u02e9\u0003\u0002\u0002\u0002\u02ec\u02ef\u0003", - "\u0002\u0002\u0002\u02ed\u02eb\u0003\u0002\u0002\u0002\u02ed\u02ee\u0003", - "\u0002\u0002\u0002\u02eeu\u0003\u0002\u0002\u0002\u02ef\u02ed\u0003", - "\u0002\u0002\u0002\u02f0\u02f5\u0005x=\u0002\u02f1\u02f2\u0007\u0011", - "\u0002\u0002\u02f2\u02f4\u0005x=\u0002\u02f3\u02f1\u0003\u0002\u0002", - "\u0002\u02f4\u02f7\u0003\u0002\u0002\u0002\u02f5\u02f3\u0003\u0002\u0002", - "\u0002\u02f5\u02f6\u0003\u0002\u0002\u0002\u02f6\u02f9\u0003\u0002\u0002", - "\u0002\u02f7\u02f5\u0003\u0002\u0002\u0002\u02f8\u02fa\u0007\u0011\u0002", - "\u0002\u02f9\u02f8\u0003\u0002\u0002\u0002\u02f9\u02fa\u0003\u0002\u0002", - "\u0002\u02faw\u0003\u0002\u0002\u0002\u02fb\u02fc\u0005\u00a8U\u0002", - "\u02fc\u02fd\u0007K\u0002\u0002\u02fd\u02fe\u0005p9\u0002\u02fey\u0003", - "\u0002\u0002\u0002\u02ff\u0301\u0007\u0010\u0002\u0002\u0300\u0302\u0005", - "v<\u0002\u0301\u0300\u0003\u0002\u0002\u0002\u0301\u0302\u0003\u0002", - "\u0002\u0002\u0302\u0303\u0003\u0002\u0002\u0002\u0303\u0308\u0007\u0012", - "\u0002\u0002\u0304\u0306\u0005t;\u0002\u0305\u0304\u0003\u0002\u0002", - "\u0002\u0305\u0306\u0003\u0002\u0002\u0002\u0306\u0308\u0003\u0002\u0002", - "\u0002\u0307\u02ff\u0003\u0002\u0002\u0002\u0307\u0305\u0003\u0002\u0002", - "\u0002\u0308{\u0003\u0002\u0002\u0002\u0309\u030a\u0005p9\u0002\u030a", - "\u030b\u0007\u0017\u0002\u0002\u030b\u030c\u0005z>\u0002\u030c\u030d", - "\u0007\u0018\u0002\u0002\u030d}\u0003\u0002\u0002\u0002\u030e\u0312", - "\u0007\u0010\u0002\u0002\u030f\u0311\u0005\u0080A\u0002\u0310\u030f", - "\u0003\u0002\u0002\u0002\u0311\u0314\u0003\u0002\u0002\u0002\u0312\u0310", - "\u0003\u0002\u0002\u0002\u0312\u0313\u0003\u0002\u0002\u0002\u0313\u0315", - "\u0003\u0002\u0002\u0002\u0314\u0312\u0003\u0002\u0002\u0002\u0315\u0316", - "\u0007\u0012\u0002\u0002\u0316\u007f\u0003\u0002\u0002\u0002\u0317\u0329", - "\u0005\u00a8U\u0002\u0318\u0329\u0005~@\u0002\u0319\u0329\u0005\u0082", - "B\u0002\u031a\u0329\u0005\u0086D\u0002\u031b\u0329\u0005\u0088E\u0002", - "\u031c\u0329\u0005\u008eH\u0002\u031d\u0329\u0005\u0090I\u0002\u031e", - "\u0329\u0005\u0092J\u0002\u031f\u0329\u0005\u0096L\u0002\u0320\u0329", - "\u0005\u009aN\u0002\u0321\u0329\u0005\u009cO\u0002\u0322\u0329\u0007", - "j\u0002\u0002\u0323\u0329\u0007l\u0002\u0002\u0324\u0329\u0005\u00a0", - "Q\u0002\u0325\u0329\u0005\u00a6T\u0002\u0326\u0329\u0007v\u0002\u0002", - "\u0327\u0329\u0007g\u0002\u0002\u0328\u0317\u0003\u0002\u0002\u0002", - "\u0328\u0318\u0003\u0002\u0002\u0002\u0328\u0319\u0003\u0002\u0002\u0002", - "\u0328\u031a\u0003\u0002\u0002\u0002\u0328\u031b\u0003\u0002\u0002\u0002", - "\u0328\u031c\u0003\u0002\u0002\u0002\u0328\u031d\u0003\u0002\u0002\u0002", - "\u0328\u031e\u0003\u0002\u0002\u0002\u0328\u031f\u0003\u0002\u0002\u0002", - "\u0328\u0320\u0003\u0002\u0002\u0002\u0328\u0321\u0003\u0002\u0002\u0002", - "\u0328\u0322\u0003\u0002\u0002\u0002\u0328\u0323\u0003\u0002\u0002\u0002", - "\u0328\u0324\u0003\u0002\u0002\u0002\u0328\u0325\u0003\u0002\u0002\u0002", - "\u0328\u0326\u0003\u0002\u0002\u0002\u0328\u0327\u0003\u0002\u0002\u0002", - "\u0329\u0081\u0003\u0002\u0002\u0002\u032a\u032d\u0005\u0084C\u0002", - "\u032b\u032d\u0005\u009eP\u0002\u032c\u032a\u0003\u0002\u0002\u0002", - "\u032c\u032b\u0003\u0002\u0002\u0002\u032d\u0083\u0003\u0002\u0002\u0002", - "\u032e\u0333\u0007/\u0002\u0002\u032f\u0333\u00073\u0002\u0002\u0330", - "\u0333\u00076\u0002\u0002\u0331\u0333\u0005\u00a8U\u0002\u0332\u032e", - "\u0003\u0002\u0002\u0002\u0332\u032f\u0003\u0002\u0002\u0002\u0332\u0330", - "\u0003\u0002\u0002\u0002\u0332\u0331\u0003\u0002\u0002\u0002\u0333\u0340", - "\u0003\u0002\u0002\u0002\u0334\u0336\u0007\u0017\u0002\u0002\u0335\u0337", - "\u0005\u0082B\u0002\u0336\u0335\u0003\u0002\u0002\u0002\u0336\u0337", - "\u0003\u0002\u0002\u0002\u0337\u033c\u0003\u0002\u0002\u0002\u0338\u0339", - "\u0007\u0011\u0002\u0002\u0339\u033b\u0005\u0082B\u0002\u033a\u0338", - "\u0003\u0002\u0002\u0002\u033b\u033e\u0003\u0002\u0002\u0002\u033c\u033a", - "\u0003\u0002\u0002\u0002\u033c\u033d\u0003\u0002\u0002\u0002\u033d\u033f", - "\u0003\u0002\u0002\u0002\u033e\u033c\u0003\u0002\u0002\u0002\u033f\u0341", - "\u0007\u0018\u0002\u0002\u0340\u0334\u0003\u0002\u0002\u0002\u0340\u0341", - "\u0003\u0002\u0002\u0002\u0341\u0085\u0003\u0002\u0002\u0002\u0342\u0343", - "\u0007V\u0002\u0002\u0343\u0346\u0005\u008aF\u0002\u0344\u0345\u0007", - "W\u0002\u0002\u0345\u0347\u0005\u0082B\u0002\u0346\u0344\u0003\u0002", - "\u0002\u0002\u0346\u0347\u0003\u0002\u0002\u0002\u0347\u0087\u0003\u0002", - "\u0002\u0002\u0348\u0349\u0005\u008aF\u0002\u0349\u034a\u0007W\u0002", - "\u0002\u034a\u034b\u0005\u0082B\u0002\u034b\u0089\u0003\u0002\u0002", - "\u0002\u034c\u0352\u0005\u00a8U\u0002\u034d\u034e\u0007\u0017\u0002", - "\u0002\u034e\u034f\u0005\u008cG\u0002\u034f\u0350\u0007\u0018\u0002", - "\u0002\u0350\u0352\u0003\u0002\u0002\u0002\u0351\u034c\u0003\u0002\u0002", - "\u0002\u0351\u034d\u0003\u0002\u0002\u0002\u0352\u008b\u0003\u0002\u0002", - "\u0002\u0353\u0358\u0005\u00a8U\u0002\u0354\u0355\u0007\u0011\u0002", - "\u0002\u0355\u0357\u0005\u00a8U\u0002\u0356\u0354\u0003\u0002\u0002", - "\u0002\u0357\u035a\u0003\u0002\u0002\u0002\u0358\u0356\u0003\u0002\u0002", - "\u0002\u0358\u0359\u0003\u0002\u0002\u0002\u0359\u008d\u0003\u0002\u0002", - "\u0002\u035a\u0358\u0003\u0002\u0002\u0002\u035b\u035c\u0007X\u0002", - "\u0002\u035c\u035d\u0005\u00a8U\u0002\u035d\u008f\u0003\u0002\u0002", - "\u0002\u035e\u035f\u0005\u00a8U\u0002\u035f\u0360\u0007K\u0002\u0002", - "\u0360\u0091\u0003\u0002\u0002\u0002\u0361\u0362\u0007Y\u0002\u0002", - "\u0362\u0366\u0005\u0082B\u0002\u0363\u0365\u0005\u0094K\u0002\u0364", - "\u0363\u0003\u0002\u0002\u0002\u0365\u0368\u0003\u0002\u0002\u0002\u0366", - "\u0364\u0003\u0002\u0002\u0002\u0366\u0367\u0003\u0002\u0002\u0002\u0367", - "\u0093\u0003\u0002\u0002\u0002\u0368\u0366\u0003\u0002\u0002\u0002\u0369", - "\u036a\u0007Z\u0002\u0002\u036a\u036b\u0005\u009eP\u0002\u036b\u036c", - "\u0005~@\u0002\u036c\u0370\u0003\u0002\u0002\u0002\u036d\u036e\u0007", - "[\u0002\u0002\u036e\u0370\u0005~@\u0002\u036f\u0369\u0003\u0002\u0002", - "\u0002\u036f\u036d\u0003\u0002\u0002\u0002\u0370\u0095\u0003\u0002\u0002", - "\u0002\u0371\u0372\u0007\u001e\u0002\u0002\u0372\u0373\u0005\u00a8U", - "\u0002\u0373\u0375\u0007\u0017\u0002\u0002\u0374\u0376\u0005\u008cG", - "\u0002\u0375\u0374\u0003\u0002\u0002\u0002\u0375\u0376\u0003\u0002\u0002", - "\u0002\u0376\u0377\u0003\u0002\u0002\u0002\u0377\u0379\u0007\u0018\u0002", - "\u0002\u0378\u037a\u0005\u0098M\u0002\u0379\u0378\u0003\u0002\u0002", - "\u0002\u0379\u037a\u0003\u0002\u0002\u0002\u037a\u037b\u0003\u0002\u0002", - "\u0002\u037b\u037c\u0005~@\u0002\u037c\u0097\u0003\u0002\u0002\u0002", - "\u037d\u037e\u0007\\\u0002\u0002\u037e\u037f\u0005\u008cG\u0002\u037f", - "\u0099\u0003\u0002\u0002\u0002\u0380\u0383\u0007\u001a\u0002\u0002\u0381", - "\u0384\u0005~@\u0002\u0382\u0384\u0005\u0082B\u0002\u0383\u0381\u0003", - "\u0002\u0002\u0002\u0383\u0382\u0003\u0002\u0002\u0002\u0384\u0385\u0003", - "\u0002\u0002\u0002\u0385\u0388\u0005\u0082B\u0002\u0386\u0389\u0005", - "~@\u0002\u0387\u0389\u0005\u0082B\u0002\u0388\u0386\u0003\u0002\u0002", - "\u0002\u0388\u0387\u0003\u0002\u0002\u0002\u0389\u038a\u0003\u0002\u0002", - "\u0002\u038a\u038b\u0005~@\u0002\u038b\u009b\u0003\u0002\u0002\u0002", - "\u038c\u038d\u0007*\u0002\u0002\u038d\u038e\u0005\u0082B\u0002\u038e", - "\u038f\u0005~@\u0002\u038f\u009d\u0003\u0002\u0002\u0002\u0390\u0391", - "\t\u0010\u0002\u0002\u0391\u009f\u0003\u0002\u0002\u0002\u0392\u0393", - "\u0007-\u0002\u0002\u0393\u0394\u0005\u00a8U\u0002\u0394\u0395\u0005", - "~@\u0002\u0395\u00a1\u0003\u0002\u0002\u0002\u0396\u0398\u0007\u0017", - "\u0002\u0002\u0397\u0399\u0005p9\u0002\u0398\u0397\u0003\u0002\u0002", - "\u0002\u0398\u0399\u0003\u0002\u0002\u0002\u0399\u03a0\u0003\u0002\u0002", - "\u0002\u039a\u039c\u0007\u0011\u0002\u0002\u039b\u039d\u0005p9\u0002", - "\u039c\u039b\u0003\u0002\u0002\u0002\u039c\u039d\u0003\u0002\u0002\u0002", - "\u039d\u039f\u0003\u0002\u0002\u0002\u039e\u039a\u0003\u0002\u0002\u0002", - "\u039f\u03a2\u0003\u0002\u0002\u0002\u03a0\u039e\u0003\u0002\u0002\u0002", - "\u03a0\u03a1\u0003\u0002\u0002\u0002\u03a1\u03a3\u0003\u0002\u0002\u0002", - "\u03a2\u03a0\u0003\u0002\u0002\u0002\u03a3\u03b1\u0007\u0018\u0002\u0002", - "\u03a4\u03ad\u0007\"\u0002\u0002\u03a5\u03aa\u0005p9\u0002\u03a6\u03a7", - "\u0007\u0011\u0002\u0002\u03a7\u03a9\u0005p9\u0002\u03a8\u03a6\u0003", - "\u0002\u0002\u0002\u03a9\u03ac\u0003\u0002\u0002\u0002\u03aa\u03a8\u0003", - "\u0002\u0002\u0002\u03aa\u03ab\u0003\u0002\u0002\u0002\u03ab\u03ae\u0003", - "\u0002\u0002\u0002\u03ac\u03aa\u0003\u0002\u0002\u0002\u03ad\u03a5\u0003", - "\u0002\u0002\u0002\u03ad\u03ae\u0003\u0002\u0002\u0002\u03ae\u03af\u0003", - "\u0002\u0002\u0002\u03af\u03b1\u0007#\u0002\u0002\u03b0\u0396\u0003", - "\u0002\u0002\u0002\u03b0\u03a4\u0003\u0002\u0002\u0002\u03b1\u00a3\u0003", - "\u0002\u0002\u0002\u03b2\u03b3\u0005n8\u0002\u03b3\u00a5\u0003\u0002", - "\u0002\u0002\u03b4\u03b6\t\u0011\u0002\u0002\u03b5\u03b7\u0007f\u0002", - "\u0002\u03b6\u03b5\u0003\u0002\u0002\u0002\u03b6\u03b7\u0003\u0002\u0002", - "\u0002\u03b7\u00a7\u0003\u0002\u0002\u0002\u03b8\u03b9\t\u0012\u0002", - "\u0002\u03b9\u00a9\u0003\u0002\u0002\u0002h\u00ad\u00af\u00bd\u00c1", + "9\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00079\u02dd", + "\n9\f9\u000e9\u02e0\u000b9\u0003:\u0003:\u0003:\u0003:\u0003:\u0003", + ":\u0003:\u0005:\u02e9\n:\u0003;\u0003;\u0003;\u0007;\u02ee\n;\f;\u000e", + ";\u02f1\u000b;\u0003<\u0003<\u0003<\u0007<\u02f6\n<\f<\u000e<\u02f9", + "\u000b<\u0003<\u0005<\u02fc\n<\u0003=\u0003=\u0003=\u0003=\u0003>\u0003", + ">\u0005>\u0304\n>\u0003>\u0003>\u0005>\u0308\n>\u0005>\u030a\n>\u0003", + "?\u0003?\u0003?\u0003?\u0003?\u0003@\u0003@\u0007@\u0313\n@\f@\u000e", + "@\u0316\u000b@\u0003@\u0003@\u0003A\u0003A\u0003A\u0003A\u0003A\u0003", + "A\u0003A\u0003A\u0003A\u0003A\u0003A\u0003A\u0003A\u0003A\u0003A\u0003", + "A\u0003A\u0005A\u032b\nA\u0003B\u0003B\u0005B\u032f\nB\u0003C\u0003", + "C\u0003C\u0003C\u0005C\u0335\nC\u0003C\u0003C\u0005C\u0339\nC\u0003", + "C\u0003C\u0007C\u033d\nC\fC\u000eC\u0340\u000bC\u0003C\u0005C\u0343", + "\nC\u0003D\u0003D\u0003D\u0003D\u0005D\u0349\nD\u0003E\u0003E\u0003", + "E\u0003E\u0003F\u0003F\u0003F\u0003F\u0003F\u0005F\u0354\nF\u0003G\u0003", + "G\u0003G\u0007G\u0359\nG\fG\u000eG\u035c\u000bG\u0003H\u0003H\u0003", + "H\u0003I\u0003I\u0003I\u0003J\u0003J\u0003J\u0007J\u0367\nJ\fJ\u000e", + "J\u036a\u000bJ\u0003K\u0003K\u0003K\u0003K\u0003K\u0003K\u0005K\u0372", + "\nK\u0003L\u0003L\u0003L\u0003L\u0005L\u0378\nL\u0003L\u0003L\u0005", + "L\u037c\nL\u0003L\u0003L\u0003M\u0003M\u0003M\u0003N\u0003N\u0003N\u0005", + "N\u0386\nN\u0003N\u0003N\u0003N\u0005N\u038b\nN\u0003N\u0003N\u0003", + "O\u0003O\u0003O\u0003O\u0003P\u0003P\u0003Q\u0003Q\u0003Q\u0003Q\u0003", + "R\u0003R\u0005R\u039b\nR\u0003R\u0003R\u0005R\u039f\nR\u0007R\u03a1", + "\nR\fR\u000eR\u03a4\u000bR\u0003R\u0003R\u0003R\u0003R\u0003R\u0007", + "R\u03ab\nR\fR\u000eR\u03ae\u000bR\u0005R\u03b0\nR\u0003R\u0005R\u03b3", + "\nR\u0003S\u0003S\u0003T\u0003T\u0005T\u03b9\nT\u0003U\u0003U\u0003", + "U\u0002\u0004@pV\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016", + "\u0018\u001a\u001c\u001e \"$&(*,.02468:<>@BDFHJLNPRTVXZ\\^`bdfhjlnp", + "rtvxz|~\u0080\u0082\u0084\u0086\u0088\u008a\u008c\u008e\u0090\u0092", + "\u0094\u0096\u0098\u009a\u009c\u009e\u00a0\u00a2\u00a4\u00a6\u00a8\u0002", + "\u0013\u0003\u0002\u0005\u000b\u0003\u0002\u0013\u0015\u0005\u0002k", + "kooqr\u0003\u0002(*\u0005\u0002kkppst\u0005\u0002$$36]a\u0003\u0002", + "78\u0003\u0002:;\u0003\u0002<=\u0004\u0002\u000e\u000e@A\u0003\u0002", + "BC\u0003\u0002\u0007\n\u0003\u0002FG\u0004\u0002\u000b\u000bLU\u0005", + "\u0002deggvv\u0003\u0002de\u0004\u0002\u000f\u000fuu\u0002\u0414\u0002", + "\u00af\u0003\u0002\u0002\u0002\u0004\u00b4\u0003\u0002\u0002\u0002\u0006", + "\u00b9\u0003\u0002\u0002\u0002\b\u00bd\u0003\u0002\u0002\u0002\n\u00bf", + "\u0003\u0002\u0002\u0002\f\u00c3\u0003\u0002\u0002\u0002\u000e\u00c6", + "\u0003\u0002\u0002\u0002\u0010\u00ca\u0003\u0002\u0002\u0002\u0012\u00f1", + "\u0003\u0002\u0002\u0002\u0014\u00f3\u0003\u0002\u0002\u0002\u0016\u0109", + "\u0003\u0002\u0002\u0002\u0018\u011f\u0003\u0002\u0002\u0002\u001a\u0121", + "\u0003\u0002\u0002\u0002\u001c\u012f\u0003\u0002\u0002\u0002\u001e\u0138", + "\u0003\u0002\u0002\u0002 \u0149\u0003\u0002\u0002\u0002\"\u014e\u0003", + "\u0002\u0002\u0002$\u0155\u0003\u0002\u0002\u0002&\u015d\u0003\u0002", + "\u0002\u0002(\u016a\u0003\u0002\u0002\u0002*\u0175\u0003\u0002\u0002", + "\u0002,\u0178\u0003\u0002\u0002\u0002.\u0180\u0003\u0002\u0002\u0002", + "0\u0182\u0003\u0002\u0002\u00022\u0191\u0003\u0002\u0002\u00024\u019e", + "\u0003\u0002\u0002\u00026\u01a5\u0003\u0002\u0002\u00028\u01b2\u0003", + "\u0002\u0002\u0002:\u01b9\u0003\u0002\u0002\u0002<\u01c6\u0003\u0002", + "\u0002\u0002>\u01ca\u0003\u0002\u0002\u0002@\u01d7\u0003\u0002\u0002", + "\u0002B\u01e4\u0003\u0002\u0002\u0002D\u01ec\u0003\u0002\u0002\u0002", + "F\u01f3\u0003\u0002\u0002\u0002H\u0201\u0003\u0002\u0002\u0002J\u0203", + "\u0003\u0002\u0002\u0002L\u0205\u0003\u0002\u0002\u0002N\u021a\u0003", + "\u0002\u0002\u0002P\u021c\u0003\u0002\u0002\u0002R\u021f\u0003\u0002", + "\u0002\u0002T\u0228\u0003\u0002\u0002\u0002V\u0230\u0003\u0002\u0002", + "\u0002X\u0232\u0003\u0002\u0002\u0002Z\u0242\u0003\u0002\u0002\u0002", + "\\\u0248\u0003\u0002\u0002\u0002^\u0250\u0003\u0002\u0002\u0002`\u0253", + "\u0003\u0002\u0002\u0002b\u0256\u0003\u0002\u0002\u0002d\u025c\u0003", + "\u0002\u0002\u0002f\u025f\u0003\u0002\u0002\u0002h\u026a\u0003\u0002", + "\u0002\u0002j\u0273\u0003\u0002\u0002\u0002l\u027e\u0003\u0002\u0002", + "\u0002n\u028d\u0003\u0002\u0002\u0002p\u02a1\u0003\u0002\u0002\u0002", + "r\u02e8\u0003\u0002\u0002\u0002t\u02ea\u0003\u0002\u0002\u0002v\u02f2", + "\u0003\u0002\u0002\u0002x\u02fd\u0003\u0002\u0002\u0002z\u0309\u0003", + "\u0002\u0002\u0002|\u030b\u0003\u0002\u0002\u0002~\u0310\u0003\u0002", + "\u0002\u0002\u0080\u032a\u0003\u0002\u0002\u0002\u0082\u032e\u0003\u0002", + "\u0002\u0002\u0084\u0334\u0003\u0002\u0002\u0002\u0086\u0344\u0003\u0002", + "\u0002\u0002\u0088\u034a\u0003\u0002\u0002\u0002\u008a\u0353\u0003\u0002", + "\u0002\u0002\u008c\u0355\u0003\u0002\u0002\u0002\u008e\u035d\u0003\u0002", + "\u0002\u0002\u0090\u0360\u0003\u0002\u0002\u0002\u0092\u0363\u0003\u0002", + "\u0002\u0002\u0094\u0371\u0003\u0002\u0002\u0002\u0096\u0373\u0003\u0002", + "\u0002\u0002\u0098\u037f\u0003\u0002\u0002\u0002\u009a\u0382\u0003\u0002", + "\u0002\u0002\u009c\u038e\u0003\u0002\u0002\u0002\u009e\u0392\u0003\u0002", + "\u0002\u0002\u00a0\u0394\u0003\u0002\u0002\u0002\u00a2\u03b2\u0003\u0002", + "\u0002\u0002\u00a4\u03b4\u0003\u0002\u0002\u0002\u00a6\u03b6\u0003\u0002", + "\u0002\u0002\u00a8\u03ba\u0003\u0002\u0002\u0002\u00aa\u00ae\u0005\u0004", + "\u0003\u0002\u00ab\u00ae\u0005\u0012\n\u0002\u00ac\u00ae\u0005\u0014", + "\u000b\u0002\u00ad\u00aa\u0003\u0002\u0002\u0002\u00ad\u00ab\u0003\u0002", + "\u0002\u0002\u00ad\u00ac\u0003\u0002\u0002\u0002\u00ae\u00b1\u0003\u0002", + "\u0002\u0002\u00af\u00ad\u0003\u0002\u0002\u0002\u00af\u00b0\u0003\u0002", + "\u0002\u0002\u00b0\u00b2\u0003\u0002\u0002\u0002\u00b1\u00af\u0003\u0002", + "\u0002\u0002\u00b2\u00b3\u0007\u0002\u0002\u0003\u00b3\u0003\u0003\u0002", + "\u0002\u0002\u00b4\u00b5\u0007\u0003\u0002\u0002\u00b5\u00b6\u0005\u0006", + "\u0004\u0002\u00b6\u00b7\u0005\b\u0005\u0002\u00b7\u00b8\u0007\u0004", + "\u0002\u0002\u00b8\u0005\u0003\u0002\u0002\u0002\u00b9\u00ba\u0005\u00a8", + "U\u0002\u00ba\u0007\u0003\u0002\u0002\u0002\u00bb\u00be\u0005\n\u0006", + "\u0002\u00bc\u00be\u0005p9\u0002\u00bd\u00bb\u0003\u0002\u0002\u0002", + "\u00bd\u00bc\u0003\u0002\u0002\u0002\u00be\t\u0003\u0002\u0002\u0002", + "\u00bf\u00c1\u0005\u000e\b\u0002\u00c0\u00c2\u0005\u000e\b\u0002\u00c1", + "\u00c0\u0003\u0002\u0002\u0002\u00c1\u00c2\u0003\u0002\u0002\u0002\u00c2", + "\u000b\u0003\u0002\u0002\u0002\u00c3\u00c4\t\u0002\u0002\u0002\u00c4", + "\r\u0003\u0002\u0002\u0002\u00c5\u00c7\u0005\f\u0007\u0002\u00c6\u00c5", + "\u0003\u0002\u0002\u0002\u00c6\u00c7\u0003\u0002\u0002\u0002\u00c7\u00c8", + "\u0003\u0002\u0002\u0002\u00c8\u00c9\u0007b\u0002\u0002\u00c9\u000f", + "\u0003\u0002\u0002\u0002\u00ca\u00cd\u0005\u00a8U\u0002\u00cb\u00cc", + "\u0007\f\u0002\u0002\u00cc\u00ce\u0005\u00a8U\u0002\u00cd\u00cb\u0003", + "\u0002\u0002\u0002\u00cd\u00ce\u0003\u0002\u0002\u0002\u00ce\u0011\u0003", + "\u0002\u0002\u0002\u00cf\u00d0\u0007\r\u0002\u0002\u00d0\u00d3\u0007", + "v\u0002\u0002\u00d1\u00d2\u0007\f\u0002\u0002\u00d2\u00d4\u0005\u00a8", + "U\u0002\u00d3\u00d1\u0003\u0002\u0002\u0002\u00d3\u00d4\u0003\u0002", + "\u0002\u0002\u00d4\u00d5\u0003\u0002\u0002\u0002\u00d5\u00f2\u0007\u0004", + "\u0002\u0002\u00d6\u00d9\u0007\r\u0002\u0002\u00d7\u00da\u0007\u000e", + "\u0002\u0002\u00d8\u00da\u0005\u00a8U\u0002\u00d9\u00d7\u0003\u0002", + "\u0002\u0002\u00d9\u00d8\u0003\u0002\u0002\u0002\u00da\u00dd\u0003\u0002", + "\u0002\u0002\u00db\u00dc\u0007\f\u0002\u0002\u00dc\u00de\u0005\u00a8", + "U\u0002\u00dd\u00db\u0003\u0002\u0002\u0002\u00dd\u00de\u0003\u0002", + "\u0002\u0002\u00de\u00df\u0003\u0002\u0002\u0002\u00df\u00e0\u0007\u000f", + "\u0002\u0002\u00e0\u00e1\u0007v\u0002\u0002\u00e1\u00f2\u0007\u0004", + "\u0002\u0002\u00e2\u00e3\u0007\r\u0002\u0002\u00e3\u00e4\u0007\u0010", + "\u0002\u0002\u00e4\u00e9\u0005\u0010\t\u0002\u00e5\u00e6\u0007\u0011", + "\u0002\u0002\u00e6\u00e8\u0005\u0010\t\u0002\u00e7\u00e5\u0003\u0002", + "\u0002\u0002\u00e8\u00eb\u0003\u0002\u0002\u0002\u00e9\u00e7\u0003\u0002", + "\u0002\u0002\u00e9\u00ea\u0003\u0002\u0002\u0002\u00ea\u00ec\u0003\u0002", + "\u0002\u0002\u00eb\u00e9\u0003\u0002\u0002\u0002\u00ec\u00ed\u0007\u0012", + "\u0002\u0002\u00ed\u00ee\u0007\u000f\u0002\u0002\u00ee\u00ef\u0007v", + "\u0002\u0002\u00ef\u00f0\u0007\u0004\u0002\u0002\u00f0\u00f2\u0003\u0002", + "\u0002\u0002\u00f1\u00cf\u0003\u0002\u0002\u0002\u00f1\u00d6\u0003\u0002", + "\u0002\u0002\u00f1\u00e2\u0003\u0002\u0002\u0002\u00f2\u0013\u0003\u0002", + "\u0002\u0002\u00f3\u00f4\t\u0003\u0002\u0002\u00f4\u00fe\u0005\u00a8", + "U\u0002\u00f5\u00f6\u0007\u0016\u0002\u0002\u00f6\u00fb\u0005\u0016", + "\f\u0002\u00f7\u00f8\u0007\u0011\u0002\u0002\u00f8\u00fa\u0005\u0016", + "\f\u0002\u00f9\u00f7\u0003\u0002\u0002\u0002\u00fa\u00fd\u0003\u0002", + "\u0002\u0002\u00fb\u00f9\u0003\u0002\u0002\u0002\u00fb\u00fc\u0003\u0002", + "\u0002\u0002\u00fc\u00ff\u0003\u0002\u0002\u0002\u00fd\u00fb\u0003\u0002", + "\u0002\u0002\u00fe\u00f5\u0003\u0002\u0002\u0002\u00fe\u00ff\u0003\u0002", + "\u0002\u0002\u00ff\u0100\u0003\u0002\u0002\u0002\u0100\u0104\u0007\u0010", + "\u0002\u0002\u0101\u0103\u0005\u0018\r\u0002\u0102\u0101\u0003\u0002", + "\u0002\u0002\u0103\u0106\u0003\u0002\u0002\u0002\u0104\u0102\u0003\u0002", + "\u0002\u0002\u0104\u0105\u0003\u0002\u0002\u0002\u0105\u0107\u0003\u0002", + "\u0002\u0002\u0106\u0104\u0003\u0002\u0002\u0002\u0107\u0108\u0007\u0012", + "\u0002\u0002\u0108\u0015\u0003\u0002\u0002\u0002\u0109\u0115\u0005B", + "\"\u0002\u010a\u010b\u0007\u0017\u0002\u0002\u010b\u0110\u0005p9\u0002", + "\u010c\u010d\u0007\u0011\u0002\u0002\u010d\u010f\u0005p9\u0002\u010e", + "\u010c\u0003\u0002\u0002\u0002\u010f\u0112\u0003\u0002\u0002\u0002\u0110", + "\u010e\u0003\u0002\u0002\u0002\u0110\u0111\u0003\u0002\u0002\u0002\u0111", + "\u0113\u0003\u0002\u0002\u0002\u0112\u0110\u0003\u0002\u0002\u0002\u0113", + "\u0114\u0007\u0018\u0002\u0002\u0114\u0116\u0003\u0002\u0002\u0002\u0115", + "\u010a\u0003\u0002\u0002\u0002\u0115\u0116\u0003\u0002\u0002\u0002\u0116", + "\u0017\u0003\u0002\u0002\u0002\u0117\u0120\u0005\u001a\u000e\u0002\u0118", + "\u0120\u0005\u001c\u000f\u0002\u0119\u0120\u0005\u001e\u0010\u0002\u011a", + "\u0120\u0005 \u0011\u0002\u011b\u0120\u0005\"\u0012\u0002\u011c\u0120", + "\u0005&\u0014\u0002\u011d\u0120\u0005,\u0017\u0002\u011e\u0120\u0005", + "0\u0019\u0002\u011f\u0117\u0003\u0002\u0002\u0002\u011f\u0118\u0003", + "\u0002\u0002\u0002\u011f\u0119\u0003\u0002\u0002\u0002\u011f\u011a\u0003", + "\u0002\u0002\u0002\u011f\u011b\u0003\u0002\u0002\u0002\u011f\u011c\u0003", + "\u0002\u0002\u0002\u011f\u011d\u0003\u0002\u0002\u0002\u011f\u011e\u0003", + "\u0002\u0002\u0002\u0120\u0019\u0003\u0002\u0002\u0002\u0121\u0125\u0005", + "@!\u0002\u0122\u0124\t\u0004\u0002\u0002\u0123\u0122\u0003\u0002\u0002", + "\u0002\u0124\u0127\u0003\u0002\u0002\u0002\u0125\u0123\u0003\u0002\u0002", + "\u0002\u0125\u0126\u0003\u0002\u0002\u0002\u0126\u0128\u0003\u0002\u0002", + "\u0002\u0127\u0125\u0003\u0002\u0002\u0002\u0128\u012b\u0005\u00a8U", + "\u0002\u0129\u012a\u0007\u000b\u0002\u0002\u012a\u012c\u0005p9\u0002", + "\u012b\u0129\u0003\u0002\u0002\u0002\u012b\u012c\u0003\u0002\u0002\u0002", + "\u012c\u012d\u0003\u0002\u0002\u0002\u012d\u012e\u0007\u0004\u0002\u0002", + "\u012e\u001b\u0003\u0002\u0002\u0002\u012f\u0130\u0007\u0019\u0002\u0002", + "\u0130\u0131\u0005\u00a8U\u0002\u0131\u0134\u0007\u001a\u0002\u0002", + "\u0132\u0135\u0007\u000e\u0002\u0002\u0133\u0135\u0005@!\u0002\u0134", + "\u0132\u0003\u0002\u0002\u0002\u0134\u0133\u0003\u0002\u0002\u0002\u0135", + "\u0136\u0003\u0002\u0002\u0002\u0136\u0137\u0007\u0004\u0002\u0002\u0137", + "\u001d\u0003\u0002\u0002\u0002\u0138\u0139\u0007\u001b\u0002\u0002\u0139", + "\u013a\u0005\u00a8U\u0002\u013a\u0145\u0007\u0010\u0002\u0002\u013b", + "\u013c\u0005> \u0002\u013c\u0142\u0007\u0004\u0002\u0002\u013d\u013e", + "\u0005> \u0002\u013e\u013f\u0007\u0004\u0002\u0002\u013f\u0141\u0003", + "\u0002\u0002\u0002\u0140\u013d\u0003\u0002\u0002\u0002\u0141\u0144\u0003", + "\u0002\u0002\u0002\u0142\u0140\u0003\u0002\u0002\u0002\u0142\u0143\u0003", + "\u0002\u0002\u0002\u0143\u0146\u0003\u0002\u0002\u0002\u0144\u0142\u0003", + "\u0002\u0002\u0002\u0145\u013b\u0003\u0002\u0002\u0002\u0145\u0146\u0003", + "\u0002\u0002\u0002\u0146\u0147\u0003\u0002\u0002\u0002\u0147\u0148\u0007", + "\u0012\u0002\u0002\u0148\u001f\u0003\u0002\u0002\u0002\u0149\u014a\u0007", + "\u001c\u0002\u0002\u014a\u014b\u00052\u001a\u0002\u014b\u014c\u0005", + "*\u0016\u0002\u014c\u014d\u0005L\'\u0002\u014d!\u0003\u0002\u0002\u0002", + "\u014e\u014f\u0007\u001d\u0002\u0002\u014f\u0151\u0005\u00a8U\u0002", + "\u0150\u0152\u00052\u001a\u0002\u0151\u0150\u0003\u0002\u0002\u0002", + "\u0151\u0152\u0003\u0002\u0002\u0002\u0152\u0153\u0003\u0002\u0002\u0002", + "\u0153\u0154\u0005L\'\u0002\u0154#\u0003\u0002\u0002\u0002\u0155\u015b", + "\u0005\u00a8U\u0002\u0156\u0158\u0007\u0017\u0002\u0002\u0157\u0159", + "\u0005t;\u0002\u0158\u0157\u0003\u0002\u0002\u0002\u0158\u0159\u0003", + "\u0002\u0002\u0002\u0159\u015a\u0003\u0002\u0002\u0002\u015a\u015c\u0007", + "\u0018\u0002\u0002\u015b\u0156\u0003\u0002\u0002\u0002\u015b\u015c\u0003", + "\u0002\u0002\u0002\u015c%\u0003\u0002\u0002\u0002\u015d\u015f\u0007", + "\u001e\u0002\u0002\u015e\u0160\u0005\u00a8U\u0002\u015f\u015e\u0003", + "\u0002\u0002\u0002\u015f\u0160\u0003\u0002\u0002\u0002\u0160\u0161\u0003", + "\u0002\u0002\u0002\u0161\u0162\u00052\u001a\u0002\u0162\u0164\u0005", + "*\u0016\u0002\u0163\u0165\u0005(\u0015\u0002\u0164\u0163\u0003\u0002", + "\u0002\u0002\u0164\u0165\u0003\u0002\u0002\u0002\u0165\u0168\u0003\u0002", + "\u0002\u0002\u0166\u0169\u0007\u0004\u0002\u0002\u0167\u0169\u0005L", + "\'\u0002\u0168\u0166\u0003\u0002\u0002\u0002\u0168\u0167\u0003\u0002", + "\u0002\u0002\u0169\'\u0003\u0002\u0002\u0002\u016a\u016b\u0007\u001f", + "\u0002\u0002\u016b\u016c\u00052\u001a\u0002\u016c)\u0003\u0002\u0002", + "\u0002\u016d\u0174\u0005$\u0013\u0002\u016e\u0174\u0005J&\u0002\u016f", + "\u0174\u0007m\u0002\u0002\u0170\u0174\u0007r\u0002\u0002\u0171\u0174", + "\u0007o\u0002\u0002\u0172\u0174\u0007q\u0002\u0002\u0173\u016d\u0003", + "\u0002\u0002\u0002\u0173\u016e\u0003\u0002\u0002\u0002\u0173\u016f\u0003", + "\u0002\u0002\u0002\u0173\u0170\u0003\u0002\u0002\u0002\u0173\u0171\u0003", + "\u0002\u0002\u0002\u0173\u0172\u0003\u0002\u0002\u0002\u0174\u0177\u0003", + "\u0002\u0002\u0002\u0175\u0173\u0003\u0002\u0002\u0002\u0175\u0176\u0003", + "\u0002\u0002\u0002\u0176+\u0003\u0002\u0002\u0002\u0177\u0175\u0003", + "\u0002\u0002\u0002\u0178\u0179\u0007 \u0002\u0002\u0179\u017a\u0005", + "\u00a8U\u0002\u017a\u017c\u00056\u001c\u0002\u017b\u017d\u0007i\u0002", + "\u0002\u017c\u017b\u0003\u0002\u0002\u0002\u017c\u017d\u0003\u0002\u0002", + "\u0002\u017d\u017e\u0003\u0002\u0002\u0002\u017e\u017f\u0007\u0004\u0002", + "\u0002\u017f-\u0003\u0002\u0002\u0002\u0180\u0181\u0005\u00a8U\u0002", + "\u0181/\u0003\u0002\u0002\u0002\u0182\u0183\u0007!\u0002\u0002\u0183", + "\u0184\u0005\u00a8U\u0002\u0184\u0186\u0007\u0010\u0002\u0002\u0185", + "\u0187\u0005.\u0018\u0002\u0186\u0185\u0003\u0002\u0002\u0002\u0186", + "\u0187\u0003\u0002\u0002\u0002\u0187\u018c\u0003\u0002\u0002\u0002\u0188", + "\u0189\u0007\u0011\u0002\u0002\u0189\u018b\u0005.\u0018\u0002\u018a", + "\u0188\u0003\u0002\u0002\u0002\u018b\u018e\u0003\u0002\u0002\u0002\u018c", + "\u018a\u0003\u0002\u0002\u0002\u018c\u018d\u0003\u0002\u0002\u0002\u018d", + "\u018f\u0003\u0002\u0002\u0002\u018e\u018c\u0003\u0002\u0002\u0002\u018f", + "\u0190\u0007\u0012\u0002\u0002\u01901\u0003\u0002\u0002\u0002\u0191", + "\u019a\u0007\u0017\u0002\u0002\u0192\u0197\u00054\u001b\u0002\u0193", + "\u0194\u0007\u0011\u0002\u0002\u0194\u0196\u00054\u001b\u0002\u0195", + "\u0193\u0003\u0002\u0002\u0002\u0196\u0199\u0003\u0002\u0002\u0002\u0197", + "\u0195\u0003\u0002\u0002\u0002\u0197\u0198\u0003\u0002\u0002\u0002\u0198", + "\u019b\u0003\u0002\u0002\u0002\u0199\u0197\u0003\u0002\u0002\u0002\u019a", + "\u0192\u0003\u0002\u0002\u0002\u019a\u019b\u0003\u0002\u0002\u0002\u019b", + "\u019c\u0003\u0002\u0002\u0002\u019c\u019d\u0007\u0018\u0002\u0002\u019d", + "3\u0003\u0002\u0002\u0002\u019e\u01a0\u0005@!\u0002\u019f\u01a1\u0005", + "H%\u0002\u01a0\u019f\u0003\u0002\u0002\u0002\u01a0\u01a1\u0003\u0002", + "\u0002\u0002\u01a1\u01a3\u0003\u0002\u0002\u0002\u01a2\u01a4\u0005\u00a8", + "U\u0002\u01a3\u01a2\u0003\u0002\u0002\u0002\u01a3\u01a4\u0003\u0002", + "\u0002\u0002\u01a45\u0003\u0002\u0002\u0002\u01a5\u01ae\u0007\u0017", + "\u0002\u0002\u01a6\u01ab\u00058\u001d\u0002\u01a7\u01a8\u0007\u0011", + "\u0002\u0002\u01a8\u01aa\u00058\u001d\u0002\u01a9\u01a7\u0003\u0002", + "\u0002\u0002\u01aa\u01ad\u0003\u0002\u0002\u0002\u01ab\u01a9\u0003\u0002", + "\u0002\u0002\u01ab\u01ac\u0003\u0002\u0002\u0002\u01ac\u01af\u0003\u0002", + "\u0002\u0002\u01ad\u01ab\u0003\u0002\u0002\u0002\u01ae\u01a6\u0003\u0002", + "\u0002\u0002\u01ae\u01af\u0003\u0002\u0002\u0002\u01af\u01b0\u0003\u0002", + "\u0002\u0002\u01b0\u01b1\u0007\u0018\u0002\u0002\u01b17\u0003\u0002", + "\u0002\u0002\u01b2\u01b4\u0005@!\u0002\u01b3\u01b5\u0007n\u0002\u0002", + "\u01b4\u01b3\u0003\u0002\u0002\u0002\u01b4\u01b5\u0003\u0002\u0002\u0002", + "\u01b5\u01b7\u0003\u0002\u0002\u0002\u01b6\u01b8\u0005\u00a8U\u0002", + "\u01b7\u01b6\u0003\u0002\u0002\u0002\u01b7\u01b8\u0003\u0002\u0002\u0002", + "\u01b89\u0003\u0002\u0002\u0002\u01b9\u01c2\u0007\u0017\u0002\u0002", + "\u01ba\u01bf\u0005<\u001f\u0002\u01bb\u01bc\u0007\u0011\u0002\u0002", + "\u01bc\u01be\u0005<\u001f\u0002\u01bd\u01bb\u0003\u0002\u0002\u0002", + "\u01be\u01c1\u0003\u0002\u0002\u0002\u01bf\u01bd\u0003\u0002\u0002\u0002", + "\u01bf\u01c0\u0003\u0002\u0002\u0002\u01c0\u01c3\u0003\u0002\u0002\u0002", + "\u01c1\u01bf\u0003\u0002\u0002\u0002\u01c2\u01ba\u0003\u0002\u0002\u0002", + "\u01c2\u01c3\u0003\u0002\u0002\u0002\u01c3\u01c4\u0003\u0002\u0002\u0002", + "\u01c4\u01c5\u0007\u0018\u0002\u0002\u01c5;\u0003\u0002\u0002\u0002", + "\u01c6\u01c8\u0005@!\u0002\u01c7\u01c9\u0005H%\u0002\u01c8\u01c7\u0003", + "\u0002\u0002\u0002\u01c8\u01c9\u0003\u0002\u0002\u0002\u01c9=\u0003", + "\u0002\u0002\u0002\u01ca\u01cc\u0005@!\u0002\u01cb\u01cd\u0005H%\u0002", + "\u01cc\u01cb\u0003\u0002\u0002\u0002\u01cc\u01cd\u0003\u0002\u0002\u0002", + "\u01cd\u01ce\u0003\u0002\u0002\u0002\u01ce\u01cf\u0005\u00a8U\u0002", + "\u01cf?\u0003\u0002\u0002\u0002\u01d0\u01d1\b!\u0001\u0002\u01d1\u01d8", + "\u0005n8\u0002\u01d2\u01d8\u0005B\"\u0002\u01d3\u01d8\u0005D#\u0002", + "\u01d4\u01d8\u0005F$\u0002\u01d5\u01d6\u0007$\u0002\u0002\u01d6\u01d8", + "\u0007p\u0002\u0002\u01d7\u01d0\u0003\u0002\u0002\u0002\u01d7\u01d2", + "\u0003\u0002\u0002\u0002\u01d7\u01d3\u0003\u0002\u0002\u0002\u01d7\u01d4", + "\u0003\u0002\u0002\u0002\u01d7\u01d5\u0003\u0002\u0002\u0002\u01d8\u01e1", + "\u0003\u0002\u0002\u0002\u01d9\u01da\f\u0005\u0002\u0002\u01da\u01dc", + "\u0007\"\u0002\u0002\u01db\u01dd\u0005p9\u0002\u01dc\u01db\u0003\u0002", + "\u0002\u0002\u01dc\u01dd\u0003\u0002\u0002\u0002\u01dd\u01de\u0003\u0002", + "\u0002\u0002\u01de\u01e0\u0007#\u0002\u0002\u01df\u01d9\u0003\u0002", + "\u0002\u0002\u01e0\u01e3\u0003\u0002\u0002\u0002\u01e1\u01df\u0003\u0002", + "\u0002\u0002\u01e1\u01e2\u0003\u0002\u0002\u0002\u01e2A\u0003\u0002", + "\u0002\u0002\u01e3\u01e1\u0003\u0002\u0002\u0002\u01e4\u01e9\u0005\u00a8", + "U\u0002\u01e5\u01e6\u0007%\u0002\u0002\u01e6\u01e8\u0005\u00a8U\u0002", + "\u01e7\u01e5\u0003\u0002\u0002\u0002\u01e8\u01eb\u0003\u0002\u0002\u0002", + "\u01e9\u01e7\u0003\u0002\u0002\u0002\u01e9\u01ea\u0003\u0002\u0002\u0002", + "\u01eaC\u0003\u0002\u0002\u0002\u01eb\u01e9\u0003\u0002\u0002\u0002", + "\u01ec\u01ed\u0007&\u0002\u0002\u01ed\u01ee\u0007\u0017\u0002\u0002", + "\u01ee\u01ef\u0005n8\u0002\u01ef\u01f0\u0007\'\u0002\u0002\u01f0\u01f1", + "\u0005@!\u0002\u01f1\u01f2\u0007\u0018\u0002\u0002\u01f2E\u0003\u0002", + "\u0002\u0002\u01f3\u01f4\u0007\u001e\u0002\u0002\u01f4\u01fa\u0005:", + "\u001e\u0002\u01f5\u01f9\u0007o\u0002\u0002\u01f6\u01f9\u0007m\u0002", + "\u0002\u01f7\u01f9\u0005J&\u0002\u01f8\u01f5\u0003\u0002\u0002\u0002", + "\u01f8\u01f6\u0003\u0002\u0002\u0002\u01f8\u01f7\u0003\u0002\u0002\u0002", + "\u01f9\u01fc\u0003\u0002\u0002\u0002\u01fa\u01f8\u0003\u0002\u0002\u0002", + "\u01fa\u01fb\u0003\u0002\u0002\u0002\u01fb\u01ff\u0003\u0002\u0002\u0002", + "\u01fc\u01fa\u0003\u0002\u0002\u0002\u01fd\u01fe\u0007\u001f\u0002\u0002", + "\u01fe\u0200\u0005:\u001e\u0002\u01ff\u01fd\u0003\u0002\u0002\u0002", + "\u01ff\u0200\u0003\u0002\u0002\u0002\u0200G\u0003\u0002\u0002\u0002", + "\u0201\u0202\t\u0005\u0002\u0002\u0202I\u0003\u0002\u0002\u0002\u0203", + "\u0204\t\u0006\u0002\u0002\u0204K\u0003\u0002\u0002\u0002\u0205\u0209", + "\u0007\u0010\u0002\u0002\u0206\u0208\u0005N(\u0002\u0207\u0206\u0003", + "\u0002\u0002\u0002\u0208\u020b\u0003\u0002\u0002\u0002\u0209\u0207\u0003", + "\u0002\u0002\u0002\u0209\u020a\u0003\u0002\u0002\u0002\u020a\u020c\u0003", + "\u0002\u0002\u0002\u020b\u0209\u0003\u0002\u0002\u0002\u020c\u020d\u0007", + "\u0012\u0002\u0002\u020dM\u0003\u0002\u0002\u0002\u020e\u021b\u0005", + "R*\u0002\u020f\u021b\u0005T+\u0002\u0210\u021b\u0005X-\u0002\u0211\u021b", + "\u0005L\'\u0002\u0212\u021b\u0005Z.\u0002\u0213\u021b\u0005\\/\u0002", + "\u0214\u021b\u0005^0\u0002\u0215\u021b\u0005`1\u0002\u0216\u021b\u0005", + "b2\u0002\u0217\u021b\u0005d3\u0002\u0218\u021b\u0005f4\u0002\u0219\u021b", + "\u0005V,\u0002\u021a\u020e\u0003\u0002\u0002\u0002\u021a\u020f\u0003", + "\u0002\u0002\u0002\u021a\u0210\u0003\u0002\u0002\u0002\u021a\u0211\u0003", + "\u0002\u0002\u0002\u021a\u0212\u0003\u0002\u0002\u0002\u021a\u0213\u0003", + "\u0002\u0002\u0002\u021a\u0214\u0003\u0002\u0002\u0002\u021a\u0215\u0003", + "\u0002\u0002\u0002\u021a\u0216\u0003\u0002\u0002\u0002\u021a\u0217\u0003", + "\u0002\u0002\u0002\u021a\u0218\u0003\u0002\u0002\u0002\u021a\u0219\u0003", + "\u0002\u0002\u0002\u021bO\u0003\u0002\u0002\u0002\u021c\u021d\u0005", + "p9\u0002\u021d\u021e\u0007\u0004\u0002\u0002\u021eQ\u0003\u0002\u0002", + "\u0002\u021f\u0220\u0007+\u0002\u0002\u0220\u0221\u0007\u0017\u0002", + "\u0002\u0221\u0222\u0005p9\u0002\u0222\u0223\u0007\u0018\u0002\u0002", + "\u0223\u0226\u0005N(\u0002\u0224\u0225\u0007,\u0002\u0002\u0225\u0227", + "\u0005N(\u0002\u0226\u0224\u0003\u0002\u0002\u0002\u0226\u0227\u0003", + "\u0002\u0002\u0002\u0227S\u0003\u0002\u0002\u0002\u0228\u0229\u0007", + "-\u0002\u0002\u0229\u022a\u0007\u0017\u0002\u0002\u022a\u022b\u0005", + "p9\u0002\u022b\u022c\u0007\u0018\u0002\u0002\u022c\u022d\u0005N(\u0002", + "\u022dU\u0003\u0002\u0002\u0002\u022e\u0231\u0005h5\u0002\u022f\u0231", + "\u0005P)\u0002\u0230\u022e\u0003\u0002\u0002\u0002\u0230\u022f\u0003", + "\u0002\u0002\u0002\u0231W\u0003\u0002\u0002\u0002\u0232\u0233\u0007", + "\u001a\u0002\u0002\u0233\u0236\u0007\u0017\u0002\u0002\u0234\u0237\u0005", + "V,\u0002\u0235\u0237\u0007\u0004\u0002\u0002\u0236\u0234\u0003\u0002", + "\u0002\u0002\u0236\u0235\u0003\u0002\u0002\u0002\u0237\u0239\u0003\u0002", + "\u0002\u0002\u0238\u023a\u0005p9\u0002\u0239\u0238\u0003\u0002\u0002", + "\u0002\u0239\u023a\u0003\u0002\u0002\u0002\u023a\u023b\u0003\u0002\u0002", + "\u0002\u023b\u023d\u0007\u0004\u0002\u0002\u023c\u023e\u0005p9\u0002", + "\u023d\u023c\u0003\u0002\u0002\u0002\u023d\u023e\u0003\u0002\u0002\u0002", + "\u023e\u023f\u0003\u0002\u0002\u0002\u023f\u0240\u0007\u0018\u0002\u0002", + "\u0240\u0241\u0005N(\u0002\u0241Y\u0003\u0002\u0002\u0002\u0242\u0244", + "\u0007.\u0002\u0002\u0243\u0245\u0007v\u0002\u0002\u0244\u0243\u0003", + "\u0002\u0002\u0002\u0244\u0245\u0003\u0002\u0002\u0002\u0245\u0246\u0003", + "\u0002\u0002\u0002\u0246\u0247\u0005~@\u0002\u0247[\u0003\u0002\u0002", + "\u0002\u0248\u0249\u0007/\u0002\u0002\u0249\u024a\u0005N(\u0002\u024a", + "\u024b\u0007-\u0002\u0002\u024b\u024c\u0007\u0017\u0002\u0002\u024c", + "\u024d\u0005p9\u0002\u024d\u024e\u0007\u0018\u0002\u0002\u024e\u024f", + "\u0007\u0004\u0002\u0002\u024f]\u0003\u0002\u0002\u0002\u0250\u0251", + "\u0007l\u0002\u0002\u0251\u0252\u0007\u0004\u0002\u0002\u0252_\u0003", + "\u0002\u0002\u0002\u0253\u0254\u0007j\u0002\u0002\u0254\u0255\u0007", + "\u0004\u0002\u0002\u0255a\u0003\u0002\u0002\u0002\u0256\u0258\u0007", + "0\u0002\u0002\u0257\u0259\u0005p9\u0002\u0258\u0257\u0003\u0002\u0002", + "\u0002\u0258\u0259\u0003\u0002\u0002\u0002\u0259\u025a\u0003\u0002\u0002", + "\u0002\u025a\u025b\u0007\u0004\u0002\u0002\u025bc\u0003\u0002\u0002", + "\u0002\u025c\u025d\u00071\u0002\u0002\u025d\u025e\u0007\u0004\u0002", + "\u0002\u025ee\u0003\u0002\u0002\u0002\u025f\u0260\u00072\u0002\u0002", + "\u0260\u0261\u0005|?\u0002\u0261\u0262\u0007\u0004\u0002\u0002\u0262", + "g\u0003\u0002\u0002\u0002\u0263\u0264\u00073\u0002\u0002\u0264\u026b", + "\u0005l7\u0002\u0265\u026b\u0005> \u0002\u0266\u0267\u0007\u0017\u0002", + "\u0002\u0267\u0268\u0005j6\u0002\u0268\u0269\u0007\u0018\u0002\u0002", + "\u0269\u026b\u0003\u0002\u0002\u0002\u026a\u0263\u0003\u0002\u0002\u0002", + "\u026a\u0265\u0003\u0002\u0002\u0002\u026a\u0266\u0003\u0002\u0002\u0002", + "\u026b\u026e\u0003\u0002\u0002\u0002\u026c\u026d\u0007\u000b\u0002\u0002", + "\u026d\u026f\u0005p9\u0002\u026e\u026c\u0003\u0002\u0002\u0002\u026e", + "\u026f\u0003\u0002\u0002\u0002\u026f\u0270\u0003\u0002\u0002\u0002\u0270", + "\u0271\u0007\u0004\u0002\u0002\u0271i\u0003\u0002\u0002\u0002\u0272", + "\u0274\u0005> \u0002\u0273\u0272\u0003\u0002\u0002\u0002\u0273\u0274", + "\u0003\u0002\u0002\u0002\u0274\u027b\u0003\u0002\u0002\u0002\u0275\u0277", + "\u0007\u0011\u0002\u0002\u0276\u0278\u0005> \u0002\u0277\u0276\u0003", + "\u0002\u0002\u0002\u0277\u0278\u0003\u0002\u0002\u0002\u0278\u027a\u0003", + "\u0002\u0002\u0002\u0279\u0275\u0003\u0002\u0002\u0002\u027a\u027d\u0003", + "\u0002\u0002\u0002\u027b\u0279\u0003\u0002\u0002\u0002\u027b\u027c\u0003", + "\u0002\u0002\u0002\u027ck\u0003\u0002\u0002\u0002\u027d\u027b\u0003", + "\u0002\u0002\u0002\u027e\u0285\u0007\u0017\u0002\u0002\u027f\u0281\u0005", + "\u00a8U\u0002\u0280\u027f\u0003\u0002\u0002\u0002\u0280\u0281\u0003", + "\u0002\u0002\u0002\u0281\u0282\u0003\u0002\u0002\u0002\u0282\u0284\u0007", + "\u0011\u0002\u0002\u0283\u0280\u0003\u0002\u0002\u0002\u0284\u0287\u0003", + "\u0002\u0002\u0002\u0285\u0283\u0003\u0002\u0002\u0002\u0285\u0286\u0003", + "\u0002\u0002\u0002\u0286\u0289\u0003\u0002\u0002\u0002\u0287\u0285\u0003", + "\u0002\u0002\u0002\u0288\u028a\u0005\u00a8U\u0002\u0289\u0288\u0003", + "\u0002\u0002\u0002\u0289\u028a\u0003\u0002\u0002\u0002\u028a\u028b\u0003", + "\u0002\u0002\u0002\u028b\u028c\u0007\u0018\u0002\u0002\u028cm\u0003", + "\u0002\u0002\u0002\u028d\u028e\t\u0007\u0002\u0002\u028eo\u0003\u0002", + "\u0002\u0002\u028f\u0290\b9\u0001\u0002\u0290\u0291\u00079\u0002\u0002", + "\u0291\u02a2\u0005@!\u0002\u0292\u0293\u0007\u0017\u0002\u0002\u0293", + "\u0294\u0005p9\u0002\u0294\u0295\u0007\u0018\u0002\u0002\u0295\u02a2", + "\u0003\u0002\u0002\u0002\u0296\u0297\t\b\u0002\u0002\u0297\u02a2\u0005", + "p9\u0015\u0298\u0299\t\t\u0002\u0002\u0299\u02a2\u0005p9\u0014\u029a", + "\u029b\t\n\u0002\u0002\u029b\u02a2\u0005p9\u0013\u029c\u029d\u0007>", + "\u0002\u0002\u029d\u02a2\u0005p9\u0012\u029e\u029f\u0007\u0006\u0002", + "\u0002\u029f\u02a2\u0005p9\u0011\u02a0\u02a2\u0005r:\u0002\u02a1\u028f", + "\u0003\u0002\u0002\u0002\u02a1\u0292\u0003\u0002\u0002\u0002\u02a1\u0296", + "\u0003\u0002\u0002\u0002\u02a1\u0298\u0003\u0002\u0002\u0002\u02a1\u029a", + "\u0003\u0002\u0002\u0002\u02a1\u029c\u0003\u0002\u0002\u0002\u02a1\u029e", + "\u0003\u0002\u0002\u0002\u02a1\u02a0\u0003\u0002\u0002\u0002\u02a2\u02de", + "\u0003\u0002\u0002\u0002\u02a3\u02a4\f\u0010\u0002\u0002\u02a4\u02a5", + "\u0007?\u0002\u0002\u02a5\u02dd\u0005p9\u0011\u02a6\u02a7\f\u000f\u0002", + "\u0002\u02a7\u02a8\t\u000b\u0002\u0002\u02a8\u02dd\u0005p9\u0010\u02a9", + "\u02aa\f\u000e\u0002\u0002\u02aa\u02ab\t\t\u0002\u0002\u02ab\u02dd\u0005", + "p9\u000f\u02ac\u02ad\f\r\u0002\u0002\u02ad\u02ae\t\f\u0002\u0002\u02ae", + "\u02dd\u0005p9\u000e\u02af\u02b0\f\f\u0002\u0002\u02b0\u02b1\u0007D", + "\u0002\u0002\u02b1\u02dd\u0005p9\r\u02b2\u02b3\f\u000b\u0002\u0002\u02b3", + "\u02b4\u0007\u0005\u0002\u0002\u02b4\u02dd\u0005p9\f\u02b5\u02b6\f\n", + "\u0002\u0002\u02b6\u02b7\u0007E\u0002\u0002\u02b7\u02dd\u0005p9\u000b", + "\u02b8\u02b9\f\t\u0002\u0002\u02b9\u02ba\t\r\u0002\u0002\u02ba\u02dd", + "\u0005p9\n\u02bb\u02bc\f\b\u0002\u0002\u02bc\u02bd\t\u000e\u0002\u0002", + "\u02bd\u02dd\u0005p9\t\u02be\u02bf\f\u0007\u0002\u0002\u02bf\u02c0\u0007", + "H\u0002\u0002\u02c0\u02dd\u0005p9\b\u02c1\u02c2\f\u0006\u0002\u0002", + "\u02c2\u02c3\u0007I\u0002\u0002\u02c3\u02dd\u0005p9\u0007\u02c4\u02c5", + "\f\u0005\u0002\u0002\u02c5\u02c6\u0007J\u0002\u0002\u02c6\u02c7\u0005", + "p9\u0002\u02c7\u02c8\u0007K\u0002\u0002\u02c8\u02c9\u0005p9\u0006\u02c9", + "\u02dd\u0003\u0002\u0002\u0002\u02ca\u02cb\f\u0004\u0002\u0002\u02cb", + "\u02cc\t\u000f\u0002\u0002\u02cc\u02dd\u0005p9\u0005\u02cd\u02ce\f\u001b", + "\u0002\u0002\u02ce\u02dd\t\b\u0002\u0002\u02cf\u02d0\f\u0019\u0002\u0002", + "\u02d0\u02d1\u0007\"\u0002\u0002\u02d1\u02d2\u0005p9\u0002\u02d2\u02d3", + "\u0007#\u0002\u0002\u02d3\u02dd\u0003\u0002\u0002\u0002\u02d4\u02d5", + "\f\u0018\u0002\u0002\u02d5\u02d6\u0007\u0017\u0002\u0002\u02d6\u02d7", + "\u0005z>\u0002\u02d7\u02d8\u0007\u0018\u0002\u0002\u02d8\u02dd\u0003", + "\u0002\u0002\u0002\u02d9\u02da\f\u0017\u0002\u0002\u02da\u02db\u0007", + "%\u0002\u0002\u02db\u02dd\u0005\u00a8U\u0002\u02dc\u02a3\u0003\u0002", + "\u0002\u0002\u02dc\u02a6\u0003\u0002\u0002\u0002\u02dc\u02a9\u0003\u0002", + "\u0002\u0002\u02dc\u02ac\u0003\u0002\u0002\u0002\u02dc\u02af\u0003\u0002", + "\u0002\u0002\u02dc\u02b2\u0003\u0002\u0002\u0002\u02dc\u02b5\u0003\u0002", + "\u0002\u0002\u02dc\u02b8\u0003\u0002\u0002\u0002\u02dc\u02bb\u0003\u0002", + "\u0002\u0002\u02dc\u02be\u0003\u0002\u0002\u0002\u02dc\u02c1\u0003\u0002", + "\u0002\u0002\u02dc\u02c4\u0003\u0002\u0002\u0002\u02dc\u02ca\u0003\u0002", + "\u0002\u0002\u02dc\u02cd\u0003\u0002\u0002\u0002\u02dc\u02cf\u0003\u0002", + "\u0002\u0002\u02dc\u02d4\u0003\u0002\u0002\u0002\u02dc\u02d9\u0003\u0002", + "\u0002\u0002\u02dd\u02e0\u0003\u0002\u0002\u0002\u02de\u02dc\u0003\u0002", + "\u0002\u0002\u02de\u02df\u0003\u0002\u0002\u0002\u02dfq\u0003\u0002", + "\u0002\u0002\u02e0\u02de\u0003\u0002\u0002\u0002\u02e1\u02e9\u0007c", + "\u0002\u0002\u02e2\u02e9\u0005\u00a6T\u0002\u02e3\u02e9\u0007g\u0002", + "\u0002\u02e4\u02e9\u0007v\u0002\u0002\u02e5\u02e9\u0005\u00a8U\u0002", + "\u02e6\u02e9\u0005\u00a2R\u0002\u02e7\u02e9\u0005\u00a4S\u0002\u02e8", + "\u02e1\u0003\u0002\u0002\u0002\u02e8\u02e2\u0003\u0002\u0002\u0002\u02e8", + "\u02e3\u0003\u0002\u0002\u0002\u02e8\u02e4\u0003\u0002\u0002\u0002\u02e8", + "\u02e5\u0003\u0002\u0002\u0002\u02e8\u02e6\u0003\u0002\u0002\u0002\u02e8", + "\u02e7\u0003\u0002\u0002\u0002\u02e9s\u0003\u0002\u0002\u0002\u02ea", + "\u02ef\u0005p9\u0002\u02eb\u02ec\u0007\u0011\u0002\u0002\u02ec\u02ee", + "\u0005p9\u0002\u02ed\u02eb\u0003\u0002\u0002\u0002\u02ee\u02f1\u0003", + "\u0002\u0002\u0002\u02ef\u02ed\u0003\u0002\u0002\u0002\u02ef\u02f0\u0003", + "\u0002\u0002\u0002\u02f0u\u0003\u0002\u0002\u0002\u02f1\u02ef\u0003", + "\u0002\u0002\u0002\u02f2\u02f7\u0005x=\u0002\u02f3\u02f4\u0007\u0011", + "\u0002\u0002\u02f4\u02f6\u0005x=\u0002\u02f5\u02f3\u0003\u0002\u0002", + "\u0002\u02f6\u02f9\u0003\u0002\u0002\u0002\u02f7\u02f5\u0003\u0002\u0002", + "\u0002\u02f7\u02f8\u0003\u0002\u0002\u0002\u02f8\u02fb\u0003\u0002\u0002", + "\u0002\u02f9\u02f7\u0003\u0002\u0002\u0002\u02fa\u02fc\u0007\u0011\u0002", + "\u0002\u02fb\u02fa\u0003\u0002\u0002\u0002\u02fb\u02fc\u0003\u0002\u0002", + "\u0002\u02fcw\u0003\u0002\u0002\u0002\u02fd\u02fe\u0005\u00a8U\u0002", + "\u02fe\u02ff\u0007K\u0002\u0002\u02ff\u0300\u0005p9\u0002\u0300y\u0003", + "\u0002\u0002\u0002\u0301\u0303\u0007\u0010\u0002\u0002\u0302\u0304\u0005", + "v<\u0002\u0303\u0302\u0003\u0002\u0002\u0002\u0303\u0304\u0003\u0002", + "\u0002\u0002\u0304\u0305\u0003\u0002\u0002\u0002\u0305\u030a\u0007\u0012", + "\u0002\u0002\u0306\u0308\u0005t;\u0002\u0307\u0306\u0003\u0002\u0002", + "\u0002\u0307\u0308\u0003\u0002\u0002\u0002\u0308\u030a\u0003\u0002\u0002", + "\u0002\u0309\u0301\u0003\u0002\u0002\u0002\u0309\u0307\u0003\u0002\u0002", + "\u0002\u030a{\u0003\u0002\u0002\u0002\u030b\u030c\u0005p9\u0002\u030c", + "\u030d\u0007\u0017\u0002\u0002\u030d\u030e\u0005z>\u0002\u030e\u030f", + "\u0007\u0018\u0002\u0002\u030f}\u0003\u0002\u0002\u0002\u0310\u0314", + "\u0007\u0010\u0002\u0002\u0311\u0313\u0005\u0080A\u0002\u0312\u0311", + "\u0003\u0002\u0002\u0002\u0313\u0316\u0003\u0002\u0002\u0002\u0314\u0312", + "\u0003\u0002\u0002\u0002\u0314\u0315\u0003\u0002\u0002\u0002\u0315\u0317", + "\u0003\u0002\u0002\u0002\u0316\u0314\u0003\u0002\u0002\u0002\u0317\u0318", + "\u0007\u0012\u0002\u0002\u0318\u007f\u0003\u0002\u0002\u0002\u0319\u032b", + "\u0005\u00a8U\u0002\u031a\u032b\u0005~@\u0002\u031b\u032b\u0005\u0082", + "B\u0002\u031c\u032b\u0005\u0086D\u0002\u031d\u032b\u0005\u0088E\u0002", + "\u031e\u032b\u0005\u008eH\u0002\u031f\u032b\u0005\u0090I\u0002\u0320", + "\u032b\u0005\u0092J\u0002\u0321\u032b\u0005\u0096L\u0002\u0322\u032b", + "\u0005\u009aN\u0002\u0323\u032b\u0005\u009cO\u0002\u0324\u032b\u0007", + "j\u0002\u0002\u0325\u032b\u0007l\u0002\u0002\u0326\u032b\u0005\u00a0", + "Q\u0002\u0327\u032b\u0005\u00a6T\u0002\u0328\u032b\u0007v\u0002\u0002", + "\u0329\u032b\u0007g\u0002\u0002\u032a\u0319\u0003\u0002\u0002\u0002", + "\u032a\u031a\u0003\u0002\u0002\u0002\u032a\u031b\u0003\u0002\u0002\u0002", + "\u032a\u031c\u0003\u0002\u0002\u0002\u032a\u031d\u0003\u0002\u0002\u0002", + "\u032a\u031e\u0003\u0002\u0002\u0002\u032a\u031f\u0003\u0002\u0002\u0002", + "\u032a\u0320\u0003\u0002\u0002\u0002\u032a\u0321\u0003\u0002\u0002\u0002", + "\u032a\u0322\u0003\u0002\u0002\u0002\u032a\u0323\u0003\u0002\u0002\u0002", + "\u032a\u0324\u0003\u0002\u0002\u0002\u032a\u0325\u0003\u0002\u0002\u0002", + "\u032a\u0326\u0003\u0002\u0002\u0002\u032a\u0327\u0003\u0002\u0002\u0002", + "\u032a\u0328\u0003\u0002\u0002\u0002\u032a\u0329\u0003\u0002\u0002\u0002", + "\u032b\u0081\u0003\u0002\u0002\u0002\u032c\u032f\u0005\u0084C\u0002", + "\u032d\u032f\u0005\u009eP\u0002\u032e\u032c\u0003\u0002\u0002\u0002", + "\u032e\u032d\u0003\u0002\u0002\u0002\u032f\u0083\u0003\u0002\u0002\u0002", + "\u0330\u0335\u00070\u0002\u0002\u0331\u0335\u0007$\u0002\u0002\u0332", + "\u0335\u00076\u0002\u0002\u0333\u0335\u0005\u00a8U\u0002\u0334\u0330", + "\u0003\u0002\u0002\u0002\u0334\u0331\u0003\u0002\u0002\u0002\u0334\u0332", + "\u0003\u0002\u0002\u0002\u0334\u0333\u0003\u0002\u0002\u0002\u0335\u0342", + "\u0003\u0002\u0002\u0002\u0336\u0338\u0007\u0017\u0002\u0002\u0337\u0339", + "\u0005\u0082B\u0002\u0338\u0337\u0003\u0002\u0002\u0002\u0338\u0339", + "\u0003\u0002\u0002\u0002\u0339\u033e\u0003\u0002\u0002\u0002\u033a\u033b", + "\u0007\u0011\u0002\u0002\u033b\u033d\u0005\u0082B\u0002\u033c\u033a", + "\u0003\u0002\u0002\u0002\u033d\u0340\u0003\u0002\u0002\u0002\u033e\u033c", + "\u0003\u0002\u0002\u0002\u033e\u033f\u0003\u0002\u0002\u0002\u033f\u0341", + "\u0003\u0002\u0002\u0002\u0340\u033e\u0003\u0002\u0002\u0002\u0341\u0343", + "\u0007\u0018\u0002\u0002\u0342\u0336\u0003\u0002\u0002\u0002\u0342\u0343", + "\u0003\u0002\u0002\u0002\u0343\u0085\u0003\u0002\u0002\u0002\u0344\u0345", + "\u0007V\u0002\u0002\u0345\u0348\u0005\u008aF\u0002\u0346\u0347\u0007", + "W\u0002\u0002\u0347\u0349\u0005\u0082B\u0002\u0348\u0346\u0003\u0002", + "\u0002\u0002\u0348\u0349\u0003\u0002\u0002\u0002\u0349\u0087\u0003\u0002", + "\u0002\u0002\u034a\u034b\u0005\u008aF\u0002\u034b\u034c\u0007W\u0002", + "\u0002\u034c\u034d\u0005\u0082B\u0002\u034d\u0089\u0003\u0002\u0002", + "\u0002\u034e\u0354\u0005\u00a8U\u0002\u034f\u0350\u0007\u0017\u0002", + "\u0002\u0350\u0351\u0005\u008cG\u0002\u0351\u0352\u0007\u0018\u0002", + "\u0002\u0352\u0354\u0003\u0002\u0002\u0002\u0353\u034e\u0003\u0002\u0002", + "\u0002\u0353\u034f\u0003\u0002\u0002\u0002\u0354\u008b\u0003\u0002\u0002", + "\u0002\u0355\u035a\u0005\u00a8U\u0002\u0356\u0357\u0007\u0011\u0002", + "\u0002\u0357\u0359\u0005\u00a8U\u0002\u0358\u0356\u0003\u0002\u0002", + "\u0002\u0359\u035c\u0003\u0002\u0002\u0002\u035a\u0358\u0003\u0002\u0002", + "\u0002\u035a\u035b\u0003\u0002\u0002\u0002\u035b\u008d\u0003\u0002\u0002", + "\u0002\u035c\u035a\u0003\u0002\u0002\u0002\u035d\u035e\u0007X\u0002", + "\u0002\u035e\u035f\u0005\u00a8U\u0002\u035f\u008f\u0003\u0002\u0002", + "\u0002\u0360\u0361\u0005\u00a8U\u0002\u0361\u0362\u0007K\u0002\u0002", + "\u0362\u0091\u0003\u0002\u0002\u0002\u0363\u0364\u0007Y\u0002\u0002", + "\u0364\u0368\u0005\u0082B\u0002\u0365\u0367\u0005\u0094K\u0002\u0366", + "\u0365\u0003\u0002\u0002\u0002\u0367\u036a\u0003\u0002\u0002\u0002\u0368", + "\u0366\u0003\u0002\u0002\u0002\u0368\u0369\u0003\u0002\u0002\u0002\u0369", + "\u0093\u0003\u0002\u0002\u0002\u036a\u0368\u0003\u0002\u0002\u0002\u036b", + "\u036c\u0007Z\u0002\u0002\u036c\u036d\u0005\u009eP\u0002\u036d\u036e", + "\u0005~@\u0002\u036e\u0372\u0003\u0002\u0002\u0002\u036f\u0370\u0007", + "[\u0002\u0002\u0370\u0372\u0005~@\u0002\u0371\u036b\u0003\u0002\u0002", + "\u0002\u0371\u036f\u0003\u0002\u0002\u0002\u0372\u0095\u0003\u0002\u0002", + "\u0002\u0373\u0374\u0007\u001e\u0002\u0002\u0374\u0375\u0005\u00a8U", + "\u0002\u0375\u0377\u0007\u0017\u0002\u0002\u0376\u0378\u0005\u008cG", + "\u0002\u0377\u0376\u0003\u0002\u0002\u0002\u0377\u0378\u0003\u0002\u0002", + "\u0002\u0378\u0379\u0003\u0002\u0002\u0002\u0379\u037b\u0007\u0018\u0002", + "\u0002\u037a\u037c\u0005\u0098M\u0002\u037b\u037a\u0003\u0002\u0002", + "\u0002\u037b\u037c\u0003\u0002\u0002\u0002\u037c\u037d\u0003\u0002\u0002", + "\u0002\u037d\u037e\u0005~@\u0002\u037e\u0097\u0003\u0002\u0002\u0002", + "\u037f\u0380\u0007\\\u0002\u0002\u0380\u0381\u0005\u008cG\u0002\u0381", + "\u0099\u0003\u0002\u0002\u0002\u0382\u0385\u0007\u001a\u0002\u0002\u0383", + "\u0386\u0005~@\u0002\u0384\u0386\u0005\u0082B\u0002\u0385\u0383\u0003", + "\u0002\u0002\u0002\u0385\u0384\u0003\u0002\u0002\u0002\u0386\u0387\u0003", + "\u0002\u0002\u0002\u0387\u038a\u0005\u0082B\u0002\u0388\u038b\u0005", + "~@\u0002\u0389\u038b\u0005\u0082B\u0002\u038a\u0388\u0003\u0002\u0002", + "\u0002\u038a\u0389\u0003\u0002\u0002\u0002\u038b\u038c\u0003\u0002\u0002", + "\u0002\u038c\u038d\u0005~@\u0002\u038d\u009b\u0003\u0002\u0002\u0002", + "\u038e\u038f\u0007+\u0002\u0002\u038f\u0390\u0005\u0082B\u0002\u0390", + "\u0391\u0005~@\u0002\u0391\u009d\u0003\u0002\u0002\u0002\u0392\u0393", + "\t\u0010\u0002\u0002\u0393\u009f\u0003\u0002\u0002\u0002\u0394\u0395", + "\u0007.\u0002\u0002\u0395\u0396\u0005\u00a8U\u0002\u0396\u0397\u0005", + "~@\u0002\u0397\u00a1\u0003\u0002\u0002\u0002\u0398\u039a\u0007\u0017", + "\u0002\u0002\u0399\u039b\u0005p9\u0002\u039a\u0399\u0003\u0002\u0002", + "\u0002\u039a\u039b\u0003\u0002\u0002\u0002\u039b\u03a2\u0003\u0002\u0002", + "\u0002\u039c\u039e\u0007\u0011\u0002\u0002\u039d\u039f\u0005p9\u0002", + "\u039e\u039d\u0003\u0002\u0002\u0002\u039e\u039f\u0003\u0002\u0002\u0002", + "\u039f\u03a1\u0003\u0002\u0002\u0002\u03a0\u039c\u0003\u0002\u0002\u0002", + "\u03a1\u03a4\u0003\u0002\u0002\u0002\u03a2\u03a0\u0003\u0002\u0002\u0002", + "\u03a2\u03a3\u0003\u0002\u0002\u0002\u03a3\u03a5\u0003\u0002\u0002\u0002", + "\u03a4\u03a2\u0003\u0002\u0002\u0002\u03a5\u03b3\u0007\u0018\u0002\u0002", + "\u03a6\u03af\u0007\"\u0002\u0002\u03a7\u03ac\u0005p9\u0002\u03a8\u03a9", + "\u0007\u0011\u0002\u0002\u03a9\u03ab\u0005p9\u0002\u03aa\u03a8\u0003", + "\u0002\u0002\u0002\u03ab\u03ae\u0003\u0002\u0002\u0002\u03ac\u03aa\u0003", + "\u0002\u0002\u0002\u03ac\u03ad\u0003\u0002\u0002\u0002\u03ad\u03b0\u0003", + "\u0002\u0002\u0002\u03ae\u03ac\u0003\u0002\u0002\u0002\u03af\u03a7\u0003", + "\u0002\u0002\u0002\u03af\u03b0\u0003\u0002\u0002\u0002\u03b0\u03b1\u0003", + "\u0002\u0002\u0002\u03b1\u03b3\u0007#\u0002\u0002\u03b2\u0398\u0003", + "\u0002\u0002\u0002\u03b2\u03a6\u0003\u0002\u0002\u0002\u03b3\u00a3\u0003", + "\u0002\u0002\u0002\u03b4\u03b5\u0005n8\u0002\u03b5\u00a5\u0003\u0002", + "\u0002\u0002\u03b6\u03b8\t\u0011\u0002\u0002\u03b7\u03b9\u0007f\u0002", + "\u0002\u03b8\u03b7\u0003\u0002\u0002\u0002\u03b8\u03b9\u0003\u0002\u0002", + "\u0002\u03b9\u00a7\u0003\u0002\u0002\u0002\u03ba\u03bb\t\u0012\u0002", + "\u0002\u03bb\u00a9\u0003\u0002\u0002\u0002h\u00ad\u00af\u00bd\u00c1", "\u00c6\u00cd\u00d3\u00d9\u00dd\u00e9\u00f1\u00fb\u00fe\u0104\u0110\u0115", "\u011f\u0125\u012b\u0134\u0142\u0145\u0151\u0158\u015b\u015f\u0164\u0168", "\u0173\u0175\u017c\u0186\u018c\u0197\u019a\u01a0\u01a3\u01ab\u01ae\u01b4", - "\u01b7\u01bf\u01c2\u01c8\u01cc\u01d5\u01da\u01df\u01e7\u01f6\u01f8\u01fd", - "\u0207\u0218\u0224\u022e\u0234\u0237\u023b\u0242\u0256\u0268\u026c\u0271", - "\u0275\u0279\u027e\u0283\u0287\u029f\u02da\u02dc\u02e6\u02ed\u02f5\u02f9", - "\u0301\u0305\u0307\u0312\u0328\u032c\u0332\u0336\u033c\u0340\u0346\u0351", - "\u0358\u0366\u036f\u0375\u0379\u0383\u0388\u0398\u039c\u03a0\u03aa\u03ad", - "\u03b0\u03b6"].join(""); + "\u01b7\u01bf\u01c2\u01c8\u01cc\u01d7\u01dc\u01e1\u01e9\u01f8\u01fa\u01ff", + "\u0209\u021a\u0226\u0230\u0236\u0239\u023d\u0244\u0258\u026a\u026e\u0273", + "\u0277\u027b\u0280\u0285\u0289\u02a1\u02dc\u02de\u02e8\u02ef\u02f7\u02fb", + "\u0303\u0307\u0309\u0314\u032a\u032e\u0334\u0338\u033e\u0342\u0348\u0353", + "\u035a\u0368\u0371\u0377\u037b\u0385\u038a\u039a\u039e\u03a2\u03ac\u03af", + "\u03b2\u03b8"].join(""); var atn = new antlr4.atn.ATNDeserializer().deserialize(serializedATN); @@ -649,10 +651,10 @@ var literalNames = [ null, "'pragma'", "';'", "'^'", "'~'", "'>='", "'>'", "'{'", "','", "'}'", "'contract'", "'interface'", "'library'", "'is'", "'('", "')'", "'using'", "'for'", "'struct'", "'constructor'", "'modifier'", "'function'", "'returns'", - "'event'", "'enum'", "'['", "']'", "'.'", "'mapping'", - "'=>'", "'memory'", "'storage'", "'calldata'", "'if'", - "'else'", "'while'", "'assembly'", "'do'", "'return'", - "'throw'", "'emit'", "'var'", "'address'", "'bool'", + "'event'", "'enum'", "'['", "']'", "'address'", "'.'", + "'mapping'", "'=>'", "'memory'", "'storage'", "'calldata'", + "'if'", "'else'", "'while'", "'assembly'", "'do'", + "'return'", "'throw'", "'emit'", "'var'", "'bool'", "'string'", "'byte'", "'++'", "'--'", "'new'", "'+'", "'-'", "'after'", "'delete'", "'!'", "'**'", "'/'", "'%'", "'<<'", "'>>'", "'&'", "'|'", "'=='", "'!='", @@ -1824,7 +1826,7 @@ SolidityParser.prototype.contractDefinition = function() { this.state = 258; this._errHandler.sync(this); _la = this._input.LA(1); - while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__12) | (1 << SolidityParser.T__22) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__25) | (1 << SolidityParser.T__26) | (1 << SolidityParser.T__27) | (1 << SolidityParser.T__29) | (1 << SolidityParser.T__30))) !== 0) || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (SolidityParser.T__34 - 35)) | (1 << (SolidityParser.T__47 - 35)) | (1 << (SolidityParser.T__48 - 35)) | (1 << (SolidityParser.T__49 - 35)) | (1 << (SolidityParser.T__50 - 35)) | (1 << (SolidityParser.T__51 - 35)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) !== 0)) { + while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__12) | (1 << SolidityParser.T__22) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__25) | (1 << SolidityParser.T__26) | (1 << SolidityParser.T__27) | (1 << SolidityParser.T__29) | (1 << SolidityParser.T__30))) !== 0) || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) !== 0)) { this.state = 255; this.contractPart(); this.state = 260; @@ -2288,8 +2290,8 @@ SolidityParser.prototype.usingForDeclaration = function() { break; case SolidityParser.T__12: case SolidityParser.T__27: - case SolidityParser.T__34: - case SolidityParser.T__47: + case SolidityParser.T__33: + case SolidityParser.T__35: case SolidityParser.T__48: case SolidityParser.T__49: case SolidityParser.T__50: @@ -2386,7 +2388,7 @@ SolidityParser.prototype.structDefinition = function() { this.state = 323; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (SolidityParser.T__34 - 35)) | (1 << (SolidityParser.T__47 - 35)) | (1 << (SolidityParser.T__48 - 35)) | (1 << (SolidityParser.T__49 - 35)) | (1 << (SolidityParser.T__50 - 35)) | (1 << (SolidityParser.T__51 - 35)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) !== 0)) { + if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) !== 0)) { this.state = 313; this.variableDeclaration(); this.state = 314; @@ -2394,7 +2396,7 @@ SolidityParser.prototype.structDefinition = function() { this.state = 320; this._errHandler.sync(this); _la = this._input.LA(1); - while(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (SolidityParser.T__34 - 35)) | (1 << (SolidityParser.T__47 - 35)) | (1 << (SolidityParser.T__48 - 35)) | (1 << (SolidityParser.T__49 - 35)) | (1 << (SolidityParser.T__50 - 35)) | (1 << (SolidityParser.T__51 - 35)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) !== 0)) { + while(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) !== 0)) { this.state = 315; this.variableDeclaration(); this.state = 316; @@ -2633,7 +2635,7 @@ SolidityParser.prototype.modifierInvocation = function() { this.state = 342; this._errHandler.sync(this); _la = this._input.LA(1); - if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__47 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { + if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { this.state = 341; this.expressionList(); } @@ -3287,7 +3289,7 @@ SolidityParser.prototype.parameterList = function() { this.state = 408; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (SolidityParser.T__34 - 35)) | (1 << (SolidityParser.T__47 - 35)) | (1 << (SolidityParser.T__48 - 35)) | (1 << (SolidityParser.T__49 - 35)) | (1 << (SolidityParser.T__50 - 35)) | (1 << (SolidityParser.T__51 - 35)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) !== 0)) { + if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) !== 0)) { this.state = 400; this.parameter(); this.state = 405; @@ -3377,7 +3379,7 @@ SolidityParser.prototype.parameter = function() { this.state = 414; this._errHandler.sync(this); _la = this._input.LA(1); - if(((((_la - 37)) & ~0x1f) == 0 && ((1 << (_la - 37)) & ((1 << (SolidityParser.T__36 - 37)) | (1 << (SolidityParser.T__37 - 37)) | (1 << (SolidityParser.T__38 - 37)))) !== 0)) { + if(((((_la - 38)) & ~0x1f) == 0 && ((1 << (_la - 38)) & ((1 << (SolidityParser.T__37 - 38)) | (1 << (SolidityParser.T__38 - 38)) | (1 << (SolidityParser.T__39 - 38)))) !== 0)) { this.state = 413; this.storageLocation(); } @@ -3460,7 +3462,7 @@ SolidityParser.prototype.eventParameterList = function() { this.state = 428; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (SolidityParser.T__34 - 35)) | (1 << (SolidityParser.T__47 - 35)) | (1 << (SolidityParser.T__48 - 35)) | (1 << (SolidityParser.T__49 - 35)) | (1 << (SolidityParser.T__50 - 35)) | (1 << (SolidityParser.T__51 - 35)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) !== 0)) { + if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) !== 0)) { this.state = 420; this.eventParameter(); this.state = 425; @@ -3633,7 +3635,7 @@ SolidityParser.prototype.functionTypeParameterList = function() { this.state = 448; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (SolidityParser.T__34 - 35)) | (1 << (SolidityParser.T__47 - 35)) | (1 << (SolidityParser.T__48 - 35)) | (1 << (SolidityParser.T__49 - 35)) | (1 << (SolidityParser.T__50 - 35)) | (1 << (SolidityParser.T__51 - 35)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) !== 0)) { + if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) !== 0)) { this.state = 440; this.functionTypeParameter(); this.state = 445; @@ -3719,7 +3721,7 @@ SolidityParser.prototype.functionTypeParameter = function() { this.state = 454; this._errHandler.sync(this); _la = this._input.LA(1); - if(((((_la - 37)) & ~0x1f) == 0 && ((1 << (_la - 37)) & ((1 << (SolidityParser.T__36 - 37)) | (1 << (SolidityParser.T__37 - 37)) | (1 << (SolidityParser.T__38 - 37)))) !== 0)) { + if(((((_la - 38)) & ~0x1f) == 0 && ((1 << (_la - 38)) & ((1 << (SolidityParser.T__37 - 38)) | (1 << (SolidityParser.T__38 - 38)) | (1 << (SolidityParser.T__39 - 38)))) !== 0)) { this.state = 453; this.storageLocation(); } @@ -3795,7 +3797,7 @@ SolidityParser.prototype.variableDeclaration = function() { this.state = 458; this._errHandler.sync(this); _la = this._input.LA(1); - if(((((_la - 37)) & ~0x1f) == 0 && ((1 << (_la - 37)) & ((1 << (SolidityParser.T__36 - 37)) | (1 << (SolidityParser.T__37 - 37)) | (1 << (SolidityParser.T__38 - 37)))) !== 0)) { + if(((((_la - 38)) & ~0x1f) == 0 && ((1 << (_la - 38)) & ((1 << (SolidityParser.T__37 - 38)) | (1 << (SolidityParser.T__38 - 38)) | (1 << (SolidityParser.T__39 - 38)))) !== 0)) { this.state = 457; this.storageLocation(); } @@ -3883,40 +3885,40 @@ SolidityParser.prototype.typeName = function(_p) { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 467; + this.state = 469; this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SolidityParser.T__47: - case SolidityParser.T__48: - case SolidityParser.T__49: - case SolidityParser.T__50: - case SolidityParser.T__51: - case SolidityParser.Int: - case SolidityParser.Uint: - case SolidityParser.Byte: - case SolidityParser.Fixed: - case SolidityParser.Ufixed: + var la_ = this._interp.adaptivePredict(this._input,45,this._ctx); + switch(la_) { + case 1: this.state = 463; this.elementaryTypeName(); break; - case SolidityParser.T__12: - case SolidityParser.Identifier: + + case 2: this.state = 464; this.userDefinedTypeName(); break; - case SolidityParser.T__34: + + case 3: this.state = 465; this.mapping(); break; - case SolidityParser.T__27: + + case 4: this.state = 466; this.functionTypeName(); break; - default: - throw new antlr4.error.NoViableAltException(this); + + case 5: + this.state = 467; + this.match(SolidityParser.T__33); + this.state = 468; + this.match(SolidityParser.PayableKeyword); + break; + } this._ctx.stop = this._input.LT(-1); - this.state = 477; + this.state = 479; this._errHandler.sync(this); var _alt = this._interp.adaptivePredict(this._input,47,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { @@ -3927,24 +3929,24 @@ SolidityParser.prototype.typeName = function(_p) { _prevctx = localctx; localctx = new TypeNameContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_typeName); - this.state = 469; - if (!( this.precpred(this._ctx, 2))) { - throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)"); + this.state = 471; + if (!( this.precpred(this._ctx, 3))) { + throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)"); } - this.state = 470; - this.match(SolidityParser.T__31); this.state = 472; + this.match(SolidityParser.T__31); + this.state = 474; this._errHandler.sync(this); _la = this._input.LA(1); - if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__47 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { - this.state = 471; + if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { + this.state = 473; this.expression(0); } - this.state = 474; + this.state = 476; this.match(SolidityParser.T__32); } - this.state = 479; + this.state = 481; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input,47,this._ctx); } @@ -4013,19 +4015,19 @@ SolidityParser.prototype.userDefinedTypeName = function() { this.enterRule(localctx, 64, SolidityParser.RULE_userDefinedTypeName); try { this.enterOuterAlt(localctx, 1); - this.state = 480; + this.state = 482; this.identifier(); - this.state = 485; + this.state = 487; this._errHandler.sync(this); var _alt = this._interp.adaptivePredict(this._input,48,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { - this.state = 481; - this.match(SolidityParser.T__33); - this.state = 482; + this.state = 483; + this.match(SolidityParser.T__34); + this.state = 484; this.identifier(); } - this.state = 487; + this.state = 489; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input,48,this._ctx); } @@ -4091,17 +4093,17 @@ SolidityParser.prototype.mapping = function() { this.enterRule(localctx, 66, SolidityParser.RULE_mapping); try { this.enterOuterAlt(localctx, 1); - this.state = 488; - this.match(SolidityParser.T__34); - this.state = 489; - this.match(SolidityParser.T__20); this.state = 490; - this.elementaryTypeName(); - this.state = 491; this.match(SolidityParser.T__35); + this.state = 491; + this.match(SolidityParser.T__20); this.state = 492; - this.typeName(0); + this.elementaryTypeName(); this.state = 493; + this.match(SolidityParser.T__36); + this.state = 494; + this.typeName(0); + this.state = 495; this.match(SolidityParser.T__21); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -4202,49 +4204,49 @@ SolidityParser.prototype.functionTypeName = function() { this.enterRule(localctx, 68, SolidityParser.RULE_functionTypeName); try { this.enterOuterAlt(localctx, 1); - this.state = 495; + this.state = 497; this.match(SolidityParser.T__27); - this.state = 496; + this.state = 498; this.functionTypeParameterList(); - this.state = 502; + this.state = 504; this._errHandler.sync(this); var _alt = this._interp.adaptivePredict(this._input,50,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { - this.state = 500; + this.state = 502; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.InternalKeyword: - this.state = 497; + this.state = 499; this.match(SolidityParser.InternalKeyword); break; case SolidityParser.ExternalKeyword: - this.state = 498; + this.state = 500; this.match(SolidityParser.ExternalKeyword); break; case SolidityParser.ConstantKeyword: case SolidityParser.PayableKeyword: case SolidityParser.PureKeyword: case SolidityParser.ViewKeyword: - this.state = 499; + this.state = 501; this.stateMutability(); break; default: throw new antlr4.error.NoViableAltException(this); } } - this.state = 504; + this.state = 506; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input,50,this._ctx); } - this.state = 507; + this.state = 509; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,51,this._ctx); if(la_===1) { - this.state = 505; + this.state = 507; this.match(SolidityParser.T__28); - this.state = 506; + this.state = 508; this.functionTypeParameterList(); } @@ -4303,9 +4305,9 @@ SolidityParser.prototype.storageLocation = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 509; + this.state = 511; _la = this._input.LA(1); - if(!(((((_la - 37)) & ~0x1f) == 0 && ((1 << (_la - 37)) & ((1 << (SolidityParser.T__36 - 37)) | (1 << (SolidityParser.T__37 - 37)) | (1 << (SolidityParser.T__38 - 37)))) !== 0))) { + if(!(((((_la - 38)) & ~0x1f) == 0 && ((1 << (_la - 38)) & ((1 << (SolidityParser.T__37 - 38)) | (1 << (SolidityParser.T__38 - 38)) | (1 << (SolidityParser.T__39 - 38)))) !== 0))) { this._errHandler.recoverInline(this); } else { @@ -4382,7 +4384,7 @@ SolidityParser.prototype.stateMutability = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 511; + this.state = 513; _la = this._input.LA(1); if(!(((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (SolidityParser.ConstantKeyword - 105)) | (1 << (SolidityParser.PayableKeyword - 105)) | (1 << (SolidityParser.PureKeyword - 105)) | (1 << (SolidityParser.ViewKeyword - 105)))) !== 0))) { this._errHandler.recoverInline(this); @@ -4456,19 +4458,19 @@ SolidityParser.prototype.block = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 513; + this.state = 515; this.match(SolidityParser.T__13); - this.state = 517; + this.state = 519; this._errHandler.sync(this); _la = this._input.LA(1); - while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__13) | (1 << SolidityParser.T__20) | (1 << SolidityParser.T__23) | (1 << SolidityParser.T__27))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__34 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__41 - 32)) | (1 << (SolidityParser.T__42 - 32)) | (1 << (SolidityParser.T__43 - 32)) | (1 << (SolidityParser.T__44 - 32)) | (1 << (SolidityParser.T__45 - 32)) | (1 << (SolidityParser.T__46 - 32)) | (1 << (SolidityParser.T__47 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.BreakKeyword - 91)) | (1 << (SolidityParser.ContinueKeyword - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { - this.state = 514; + while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__13) | (1 << SolidityParser.T__20) | (1 << SolidityParser.T__23) | (1 << SolidityParser.T__27))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__35 - 32)) | (1 << (SolidityParser.T__40 - 32)) | (1 << (SolidityParser.T__42 - 32)) | (1 << (SolidityParser.T__43 - 32)) | (1 << (SolidityParser.T__44 - 32)) | (1 << (SolidityParser.T__45 - 32)) | (1 << (SolidityParser.T__46 - 32)) | (1 << (SolidityParser.T__47 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.BreakKeyword - 91)) | (1 << (SolidityParser.ContinueKeyword - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { + this.state = 516; this.statement(); - this.state = 519; + this.state = 521; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 520; + this.state = 522; this.match(SolidityParser.T__15); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -4570,62 +4572,62 @@ SolidityParser.prototype.statement = function() { var localctx = new StatementContext(this, this._ctx, this.state); this.enterRule(localctx, 76, SolidityParser.RULE_statement); try { - this.state = 534; + this.state = 536; this._errHandler.sync(this); switch(this._input.LA(1)) { - case SolidityParser.T__39: + case SolidityParser.T__40: this.enterOuterAlt(localctx, 1); - this.state = 522; + this.state = 524; this.ifStatement(); break; - case SolidityParser.T__41: + case SolidityParser.T__42: this.enterOuterAlt(localctx, 2); - this.state = 523; + this.state = 525; this.whileStatement(); break; case SolidityParser.T__23: this.enterOuterAlt(localctx, 3); - this.state = 524; + this.state = 526; this.forStatement(); break; case SolidityParser.T__13: this.enterOuterAlt(localctx, 4); - this.state = 525; + this.state = 527; this.block(); break; - case SolidityParser.T__42: + case SolidityParser.T__43: this.enterOuterAlt(localctx, 5); - this.state = 526; + this.state = 528; this.inlineAssemblyStatement(); break; - case SolidityParser.T__43: + case SolidityParser.T__44: this.enterOuterAlt(localctx, 6); - this.state = 527; + this.state = 529; this.doWhileStatement(); break; case SolidityParser.ContinueKeyword: this.enterOuterAlt(localctx, 7); - this.state = 528; + this.state = 530; this.continueStatement(); break; case SolidityParser.BreakKeyword: this.enterOuterAlt(localctx, 8); - this.state = 529; + this.state = 531; this.breakStatement(); break; - case SolidityParser.T__44: + case SolidityParser.T__45: this.enterOuterAlt(localctx, 9); - this.state = 530; + this.state = 532; this.returnStatement(); break; - case SolidityParser.T__45: + case SolidityParser.T__46: this.enterOuterAlt(localctx, 10); - this.state = 531; + this.state = 533; this.throwStatement(); break; - case SolidityParser.T__46: + case SolidityParser.T__47: this.enterOuterAlt(localctx, 11); - this.state = 532; + this.state = 534; this.emitStatement(); break; case SolidityParser.T__3: @@ -4633,8 +4635,8 @@ SolidityParser.prototype.statement = function() { case SolidityParser.T__20: case SolidityParser.T__27: case SolidityParser.T__31: - case SolidityParser.T__34: - case SolidityParser.T__47: + case SolidityParser.T__33: + case SolidityParser.T__35: case SolidityParser.T__48: case SolidityParser.T__49: case SolidityParser.T__50: @@ -4659,7 +4661,7 @@ SolidityParser.prototype.statement = function() { case SolidityParser.Identifier: case SolidityParser.StringLiteral: this.enterOuterAlt(localctx, 12); - this.state = 533; + this.state = 535; this.simpleStatement(); break; default: @@ -4722,9 +4724,9 @@ SolidityParser.prototype.expressionStatement = function() { this.enterRule(localctx, 78, SolidityParser.RULE_expressionStatement); try { this.enterOuterAlt(localctx, 1); - this.state = 536; + this.state = 538; this.expression(0); - this.state = 537; + this.state = 539; this.match(SolidityParser.T__1); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -4794,23 +4796,23 @@ SolidityParser.prototype.ifStatement = function() { this.enterRule(localctx, 80, SolidityParser.RULE_ifStatement); try { this.enterOuterAlt(localctx, 1); - this.state = 539; - this.match(SolidityParser.T__39); - this.state = 540; - this.match(SolidityParser.T__20); this.state = 541; - this.expression(0); + this.match(SolidityParser.T__40); this.state = 542; - this.match(SolidityParser.T__21); + this.match(SolidityParser.T__20); this.state = 543; + this.expression(0); + this.state = 544; + this.match(SolidityParser.T__21); + this.state = 545; this.statement(); - this.state = 546; + this.state = 548; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,54,this._ctx); if(la_===1) { - this.state = 544; - this.match(SolidityParser.T__40); - this.state = 545; + this.state = 546; + this.match(SolidityParser.T__41); + this.state = 547; this.statement(); } @@ -4875,15 +4877,15 @@ SolidityParser.prototype.whileStatement = function() { this.enterRule(localctx, 82, SolidityParser.RULE_whileStatement); try { this.enterOuterAlt(localctx, 1); - this.state = 548; - this.match(SolidityParser.T__41); - this.state = 549; - this.match(SolidityParser.T__20); this.state = 550; - this.expression(0); + this.match(SolidityParser.T__42); this.state = 551; - this.match(SolidityParser.T__21); + this.match(SolidityParser.T__20); this.state = 552; + this.expression(0); + this.state = 553; + this.match(SolidityParser.T__21); + this.state = 554; this.statement(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -4946,17 +4948,17 @@ SolidityParser.prototype.simpleStatement = function() { this.enterRule(localctx, 84, SolidityParser.RULE_simpleStatement); try { this.enterOuterAlt(localctx, 1); - this.state = 556; + this.state = 558; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,55,this._ctx); switch(la_) { case 1: - this.state = 554; + this.state = 556; this.variableDeclarationStatement(); break; case 2: - this.state = 555; + this.state = 557; this.expressionStatement(); break; @@ -5034,11 +5036,11 @@ SolidityParser.prototype.forStatement = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 558; + this.state = 560; this.match(SolidityParser.T__23); - this.state = 559; + this.state = 561; this.match(SolidityParser.T__20); - this.state = 562; + this.state = 564; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.T__3: @@ -5046,8 +5048,8 @@ SolidityParser.prototype.forStatement = function() { case SolidityParser.T__20: case SolidityParser.T__27: case SolidityParser.T__31: - case SolidityParser.T__34: - case SolidityParser.T__47: + case SolidityParser.T__33: + case SolidityParser.T__35: case SolidityParser.T__48: case SolidityParser.T__49: case SolidityParser.T__50: @@ -5071,37 +5073,37 @@ SolidityParser.prototype.forStatement = function() { case SolidityParser.HexLiteral: case SolidityParser.Identifier: case SolidityParser.StringLiteral: - this.state = 560; + this.state = 562; this.simpleStatement(); break; case SolidityParser.T__1: - this.state = 561; + this.state = 563; this.match(SolidityParser.T__1); break; default: throw new antlr4.error.NoViableAltException(this); } - this.state = 565; + this.state = 567; this._errHandler.sync(this); _la = this._input.LA(1); - if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__47 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { - this.state = 564; + if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { + this.state = 566; this.expression(0); } - this.state = 567; - this.match(SolidityParser.T__1); this.state = 569; + this.match(SolidityParser.T__1); + this.state = 571; this._errHandler.sync(this); _la = this._input.LA(1); - if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__47 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { - this.state = 568; + if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { + this.state = 570; this.expression(0); } - this.state = 571; + this.state = 573; this.match(SolidityParser.T__21); - this.state = 572; + this.state = 574; this.statement(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5165,17 +5167,17 @@ SolidityParser.prototype.inlineAssemblyStatement = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 574; - this.match(SolidityParser.T__42); this.state = 576; + this.match(SolidityParser.T__43); + this.state = 578; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.StringLiteral) { - this.state = 575; + this.state = 577; this.match(SolidityParser.StringLiteral); } - this.state = 578; + this.state = 580; this.assemblyBlock(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5238,19 +5240,19 @@ SolidityParser.prototype.doWhileStatement = function() { this.enterRule(localctx, 90, SolidityParser.RULE_doWhileStatement); try { this.enterOuterAlt(localctx, 1); - this.state = 580; - this.match(SolidityParser.T__43); - this.state = 581; - this.statement(); this.state = 582; - this.match(SolidityParser.T__41); + this.match(SolidityParser.T__44); this.state = 583; - this.match(SolidityParser.T__20); + this.statement(); this.state = 584; - this.expression(0); + this.match(SolidityParser.T__42); this.state = 585; - this.match(SolidityParser.T__21); + this.match(SolidityParser.T__20); this.state = 586; + this.expression(0); + this.state = 587; + this.match(SolidityParser.T__21); + this.state = 588; this.match(SolidityParser.T__1); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5306,9 +5308,9 @@ SolidityParser.prototype.continueStatement = function() { this.enterRule(localctx, 92, SolidityParser.RULE_continueStatement); try { this.enterOuterAlt(localctx, 1); - this.state = 588; + this.state = 590; this.match(SolidityParser.ContinueKeyword); - this.state = 589; + this.state = 591; this.match(SolidityParser.T__1); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5364,9 +5366,9 @@ SolidityParser.prototype.breakStatement = function() { this.enterRule(localctx, 94, SolidityParser.RULE_breakStatement); try { this.enterOuterAlt(localctx, 1); - this.state = 591; + this.state = 593; this.match(SolidityParser.BreakKeyword); - this.state = 592; + this.state = 594; this.match(SolidityParser.T__1); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5426,17 +5428,17 @@ SolidityParser.prototype.returnStatement = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 594; - this.match(SolidityParser.T__44); this.state = 596; + this.match(SolidityParser.T__45); + this.state = 598; this._errHandler.sync(this); _la = this._input.LA(1); - if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__47 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { - this.state = 595; + if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { + this.state = 597; this.expression(0); } - this.state = 598; + this.state = 600; this.match(SolidityParser.T__1); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5492,9 +5494,9 @@ SolidityParser.prototype.throwStatement = function() { this.enterRule(localctx, 98, SolidityParser.RULE_throwStatement); try { this.enterOuterAlt(localctx, 1); - this.state = 600; - this.match(SolidityParser.T__45); - this.state = 601; + this.state = 602; + this.match(SolidityParser.T__46); + this.state = 603; this.match(SolidityParser.T__1); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5553,11 +5555,11 @@ SolidityParser.prototype.emitStatement = function() { this.enterRule(localctx, 100, SolidityParser.RULE_emitStatement); try { this.enterOuterAlt(localctx, 1); - this.state = 603; - this.match(SolidityParser.T__46); - this.state = 604; - this.functionCall(); this.state = 605; + this.match(SolidityParser.T__47); + this.state = 606; + this.functionCall(); + this.state = 607; this.match(SolidityParser.T__1); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5629,43 +5631,43 @@ SolidityParser.prototype.variableDeclarationStatement = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 614; + this.state = 616; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,61,this._ctx); switch(la_) { case 1: - this.state = 607; - this.match(SolidityParser.T__47); - this.state = 608; + this.state = 609; + this.match(SolidityParser.T__48); + this.state = 610; this.identifierList(); break; case 2: - this.state = 609; + this.state = 611; this.variableDeclaration(); break; case 3: - this.state = 610; + this.state = 612; this.match(SolidityParser.T__20); - this.state = 611; + this.state = 613; this.variableDeclarationList(); - this.state = 612; + this.state = 614; this.match(SolidityParser.T__21); break; } - this.state = 618; + this.state = 620; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__8) { - this.state = 616; + this.state = 618; this.match(SolidityParser.T__8); - this.state = 617; + this.state = 619; this.expression(0); } - this.state = 620; + this.state = 622; this.match(SolidityParser.T__1); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5732,29 +5734,29 @@ SolidityParser.prototype.variableDeclarationList = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 623; + this.state = 625; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (SolidityParser.T__34 - 35)) | (1 << (SolidityParser.T__47 - 35)) | (1 << (SolidityParser.T__48 - 35)) | (1 << (SolidityParser.T__49 - 35)) | (1 << (SolidityParser.T__50 - 35)) | (1 << (SolidityParser.T__51 - 35)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) !== 0)) { - this.state = 622; + if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) !== 0)) { + this.state = 624; this.variableDeclaration(); } - this.state = 631; + this.state = 633; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===SolidityParser.T__14) { - this.state = 625; - this.match(SolidityParser.T__14); this.state = 627; + this.match(SolidityParser.T__14); + this.state = 629; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 35)) & ~0x1f) == 0 && ((1 << (_la - 35)) & ((1 << (SolidityParser.T__34 - 35)) | (1 << (SolidityParser.T__47 - 35)) | (1 << (SolidityParser.T__48 - 35)) | (1 << (SolidityParser.T__49 - 35)) | (1 << (SolidityParser.T__50 - 35)) | (1 << (SolidityParser.T__51 - 35)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) !== 0)) { - this.state = 626; + if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) !== 0)) { + this.state = 628; this.variableDeclaration(); } - this.state = 633; + this.state = 635; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -5823,38 +5825,38 @@ SolidityParser.prototype.identifierList = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 634; + this.state = 636; this.match(SolidityParser.T__20); - this.state = 641; + this.state = 643; this._errHandler.sync(this); var _alt = this._interp.adaptivePredict(this._input,67,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { - this.state = 636; + this.state = 638; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__12 || _la===SolidityParser.Identifier) { - this.state = 635; + this.state = 637; this.identifier(); } - this.state = 638; + this.state = 640; this.match(SolidityParser.T__14); } - this.state = 643; + this.state = 645; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input,67,this._ctx); } - this.state = 645; + this.state = 647; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__12 || _la===SolidityParser.Identifier) { - this.state = 644; + this.state = 646; this.identifier(); } - this.state = 647; + this.state = 649; this.match(SolidityParser.T__21); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5930,9 +5932,9 @@ SolidityParser.prototype.elementaryTypeName = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 649; + this.state = 651; _la = this._input.LA(1); - if(!(((((_la - 48)) & ~0x1f) == 0 && ((1 << (_la - 48)) & ((1 << (SolidityParser.T__47 - 48)) | (1 << (SolidityParser.T__48 - 48)) | (1 << (SolidityParser.T__49 - 48)) | (1 << (SolidityParser.T__50 - 48)) | (1 << (SolidityParser.T__51 - 48)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)))) !== 0))) { + if(!(((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)))) !== 0))) { this._errHandler.recoverInline(this); } else { @@ -6023,28 +6025,28 @@ SolidityParser.prototype.expression = function(_p) { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 669; + this.state = 671; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,69,this._ctx); switch(la_) { case 1: - this.state = 652; + this.state = 654; this.match(SolidityParser.T__54); - this.state = 653; + this.state = 655; this.typeName(0); break; case 2: - this.state = 654; + this.state = 656; this.match(SolidityParser.T__20); - this.state = 655; + this.state = 657; this.expression(0); - this.state = 656; + this.state = 658; this.match(SolidityParser.T__21); break; case 3: - this.state = 658; + this.state = 660; _la = this._input.LA(1); if(!(_la===SolidityParser.T__52 || _la===SolidityParser.T__53)) { this._errHandler.recoverInline(this); @@ -6053,12 +6055,12 @@ SolidityParser.prototype.expression = function(_p) { this._errHandler.reportMatch(this); this.consume(); } - this.state = 659; + this.state = 661; this.expression(19); break; case 4: - this.state = 660; + this.state = 662; _la = this._input.LA(1); if(!(_la===SolidityParser.T__55 || _la===SolidityParser.T__56)) { this._errHandler.recoverInline(this); @@ -6067,12 +6069,12 @@ SolidityParser.prototype.expression = function(_p) { this._errHandler.reportMatch(this); this.consume(); } - this.state = 661; + this.state = 663; this.expression(18); break; case 5: - this.state = 662; + this.state = 664; _la = this._input.LA(1); if(!(_la===SolidityParser.T__57 || _la===SolidityParser.T__58)) { this._errHandler.recoverInline(this); @@ -6081,32 +6083,32 @@ SolidityParser.prototype.expression = function(_p) { this._errHandler.reportMatch(this); this.consume(); } - this.state = 663; + this.state = 665; this.expression(17); break; case 6: - this.state = 664; + this.state = 666; this.match(SolidityParser.T__59); - this.state = 665; + this.state = 667; this.expression(16); break; case 7: - this.state = 666; + this.state = 668; this.match(SolidityParser.T__3); - this.state = 667; + this.state = 669; this.expression(15); break; case 8: - this.state = 668; + this.state = 670; this.primaryExpression(); break; } this._ctx.stop = this._input.LT(-1); - this.state = 730; + this.state = 732; this._errHandler.sync(this); var _alt = this._interp.adaptivePredict(this._input,71,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { @@ -6115,31 +6117,31 @@ SolidityParser.prototype.expression = function(_p) { this.triggerExitRuleEvent(); } _prevctx = localctx; - this.state = 728; + this.state = 730; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,70,this._ctx); switch(la_) { case 1: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 671; + this.state = 673; if (!( this.precpred(this._ctx, 14))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 14)"); } - this.state = 672; + this.state = 674; this.match(SolidityParser.T__60); - this.state = 673; + this.state = 675; this.expression(15); break; case 2: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 674; + this.state = 676; if (!( this.precpred(this._ctx, 13))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 13)"); } - this.state = 675; + this.state = 677; _la = this._input.LA(1); if(!(_la===SolidityParser.T__11 || _la===SolidityParser.T__61 || _la===SolidityParser.T__62)) { this._errHandler.recoverInline(this); @@ -6148,18 +6150,18 @@ SolidityParser.prototype.expression = function(_p) { this._errHandler.reportMatch(this); this.consume(); } - this.state = 676; + this.state = 678; this.expression(14); break; case 3: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 677; + this.state = 679; if (!( this.precpred(this._ctx, 12))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 12)"); } - this.state = 678; + this.state = 680; _la = this._input.LA(1); if(!(_la===SolidityParser.T__55 || _la===SolidityParser.T__56)) { this._errHandler.recoverInline(this); @@ -6168,18 +6170,18 @@ SolidityParser.prototype.expression = function(_p) { this._errHandler.reportMatch(this); this.consume(); } - this.state = 679; + this.state = 681; this.expression(13); break; case 4: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 680; + this.state = 682; if (!( this.precpred(this._ctx, 11))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 11)"); } - this.state = 681; + this.state = 683; _la = this._input.LA(1); if(!(_la===SolidityParser.T__63 || _la===SolidityParser.T__64)) { this._errHandler.recoverInline(this); @@ -6188,57 +6190,57 @@ SolidityParser.prototype.expression = function(_p) { this._errHandler.reportMatch(this); this.consume(); } - this.state = 682; + this.state = 684; this.expression(12); break; case 5: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 683; + this.state = 685; if (!( this.precpred(this._ctx, 10))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 10)"); } - this.state = 684; + this.state = 686; this.match(SolidityParser.T__65); - this.state = 685; + this.state = 687; this.expression(11); break; case 6: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 686; + this.state = 688; if (!( this.precpred(this._ctx, 9))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 9)"); } - this.state = 687; + this.state = 689; this.match(SolidityParser.T__2); - this.state = 688; + this.state = 690; this.expression(10); break; case 7: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 689; + this.state = 691; if (!( this.precpred(this._ctx, 8))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 8)"); } - this.state = 690; + this.state = 692; this.match(SolidityParser.T__66); - this.state = 691; + this.state = 693; this.expression(9); break; case 8: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 692; + this.state = 694; if (!( this.precpred(this._ctx, 7))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 7)"); } - this.state = 693; + this.state = 695; _la = this._input.LA(1); if(!((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7))) !== 0))) { this._errHandler.recoverInline(this); @@ -6247,18 +6249,18 @@ SolidityParser.prototype.expression = function(_p) { this._errHandler.reportMatch(this); this.consume(); } - this.state = 694; + this.state = 696; this.expression(8); break; case 9: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 695; + this.state = 697; if (!( this.precpred(this._ctx, 6))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 6)"); } - this.state = 696; + this.state = 698; _la = this._input.LA(1); if(!(_la===SolidityParser.T__67 || _la===SolidityParser.T__68)) { this._errHandler.recoverInline(this); @@ -6267,61 +6269,61 @@ SolidityParser.prototype.expression = function(_p) { this._errHandler.reportMatch(this); this.consume(); } - this.state = 697; + this.state = 699; this.expression(7); break; case 10: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 698; + this.state = 700; if (!( this.precpred(this._ctx, 5))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 5)"); } - this.state = 699; + this.state = 701; this.match(SolidityParser.T__69); - this.state = 700; + this.state = 702; this.expression(6); break; case 11: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 701; + this.state = 703; if (!( this.precpred(this._ctx, 4))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 4)"); } - this.state = 702; + this.state = 704; this.match(SolidityParser.T__70); - this.state = 703; + this.state = 705; this.expression(5); break; case 12: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 704; + this.state = 706; if (!( this.precpred(this._ctx, 3))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)"); } - this.state = 705; + this.state = 707; this.match(SolidityParser.T__71); - this.state = 706; + this.state = 708; this.expression(0); - this.state = 707; + this.state = 709; this.match(SolidityParser.T__72); - this.state = 708; + this.state = 710; this.expression(4); break; case 13: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 710; + this.state = 712; if (!( this.precpred(this._ctx, 2))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)"); } - this.state = 711; + this.state = 713; _la = this._input.LA(1); if(!(_la===SolidityParser.T__8 || ((((_la - 74)) & ~0x1f) == 0 && ((1 << (_la - 74)) & ((1 << (SolidityParser.T__73 - 74)) | (1 << (SolidityParser.T__74 - 74)) | (1 << (SolidityParser.T__75 - 74)) | (1 << (SolidityParser.T__76 - 74)) | (1 << (SolidityParser.T__77 - 74)) | (1 << (SolidityParser.T__78 - 74)) | (1 << (SolidityParser.T__79 - 74)) | (1 << (SolidityParser.T__80 - 74)) | (1 << (SolidityParser.T__81 - 74)) | (1 << (SolidityParser.T__82 - 74)))) !== 0))) { this._errHandler.recoverInline(this); @@ -6330,18 +6332,18 @@ SolidityParser.prototype.expression = function(_p) { this._errHandler.reportMatch(this); this.consume(); } - this.state = 712; + this.state = 714; this.expression(3); break; case 14: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 713; + this.state = 715; if (!( this.precpred(this._ctx, 25))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 25)"); } - this.state = 714; + this.state = 716; _la = this._input.LA(1); if(!(_la===SolidityParser.T__52 || _la===SolidityParser.T__53)) { this._errHandler.recoverInline(this); @@ -6355,49 +6357,49 @@ SolidityParser.prototype.expression = function(_p) { case 15: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 715; + this.state = 717; if (!( this.precpred(this._ctx, 23))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 23)"); } - this.state = 716; + this.state = 718; this.match(SolidityParser.T__31); - this.state = 717; + this.state = 719; this.expression(0); - this.state = 718; + this.state = 720; this.match(SolidityParser.T__32); break; case 16: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 720; + this.state = 722; if (!( this.precpred(this._ctx, 22))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 22)"); } - this.state = 721; + this.state = 723; this.match(SolidityParser.T__20); - this.state = 722; + this.state = 724; this.functionCallArguments(); - this.state = 723; + this.state = 725; this.match(SolidityParser.T__21); break; case 17: localctx = new ExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression); - this.state = 725; + this.state = 727; if (!( this.precpred(this._ctx, 21))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 21)"); } - this.state = 726; - this.match(SolidityParser.T__33); - this.state = 727; + this.state = 728; + this.match(SolidityParser.T__34); + this.state = 729; this.identifier(); break; } } - this.state = 732; + this.state = 734; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input,71,this._ctx); } @@ -6482,43 +6484,43 @@ SolidityParser.prototype.primaryExpression = function() { var localctx = new PrimaryExpressionContext(this, this._ctx, this.state); this.enterRule(localctx, 112, SolidityParser.RULE_primaryExpression); try { - this.state = 740; + this.state = 742; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.BooleanLiteral: this.enterOuterAlt(localctx, 1); - this.state = 733; + this.state = 735; this.match(SolidityParser.BooleanLiteral); break; case SolidityParser.DecimalNumber: case SolidityParser.HexNumber: this.enterOuterAlt(localctx, 2); - this.state = 734; + this.state = 736; this.numberLiteral(); break; case SolidityParser.HexLiteral: this.enterOuterAlt(localctx, 3); - this.state = 735; + this.state = 737; this.match(SolidityParser.HexLiteral); break; case SolidityParser.StringLiteral: this.enterOuterAlt(localctx, 4); - this.state = 736; + this.state = 738; this.match(SolidityParser.StringLiteral); break; case SolidityParser.T__12: case SolidityParser.Identifier: this.enterOuterAlt(localctx, 5); - this.state = 737; + this.state = 739; this.identifier(); break; case SolidityParser.T__20: case SolidityParser.T__31: this.enterOuterAlt(localctx, 6); - this.state = 738; + this.state = 740; this.tupleExpression(); break; - case SolidityParser.T__47: + case SolidityParser.T__33: case SolidityParser.T__48: case SolidityParser.T__49: case SolidityParser.T__50: @@ -6529,7 +6531,7 @@ SolidityParser.prototype.primaryExpression = function() { case SolidityParser.Fixed: case SolidityParser.Ufixed: this.enterOuterAlt(localctx, 7); - this.state = 739; + this.state = 741; this.elementaryTypeNameExpression(); break; default: @@ -6600,17 +6602,17 @@ SolidityParser.prototype.expressionList = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 742; + this.state = 744; this.expression(0); - this.state = 747; + this.state = 749; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===SolidityParser.T__14) { - this.state = 743; + this.state = 745; this.match(SolidityParser.T__14); - this.state = 744; + this.state = 746; this.expression(0); - this.state = 749; + this.state = 751; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -6679,28 +6681,28 @@ SolidityParser.prototype.nameValueList = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 750; + this.state = 752; this.nameValue(); - this.state = 755; + this.state = 757; this._errHandler.sync(this); var _alt = this._interp.adaptivePredict(this._input,74,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { - this.state = 751; + this.state = 753; this.match(SolidityParser.T__14); - this.state = 752; + this.state = 754; this.nameValue(); } - this.state = 757; + this.state = 759; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input,74,this._ctx); } - this.state = 759; + this.state = 761; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__14) { - this.state = 758; + this.state = 760; this.match(SolidityParser.T__14); } @@ -6765,11 +6767,11 @@ SolidityParser.prototype.nameValue = function() { this.enterRule(localctx, 118, SolidityParser.RULE_nameValue); try { this.enterOuterAlt(localctx, 1); - this.state = 761; + this.state = 763; this.identifier(); - this.state = 762; + this.state = 764; this.match(SolidityParser.T__72); - this.state = 763; + this.state = 765; this.expression(0); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -6832,22 +6834,22 @@ SolidityParser.prototype.functionCallArguments = function() { this.enterRule(localctx, 120, SolidityParser.RULE_functionCallArguments); var _la = 0; // Token type try { - this.state = 773; + this.state = 775; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.T__13: this.enterOuterAlt(localctx, 1); - this.state = 765; - this.match(SolidityParser.T__13); this.state = 767; + this.match(SolidityParser.T__13); + this.state = 769; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__12 || _la===SolidityParser.Identifier) { - this.state = 766; + this.state = 768; this.nameValueList(); } - this.state = 769; + this.state = 771; this.match(SolidityParser.T__15); break; case SolidityParser.T__3: @@ -6855,7 +6857,7 @@ SolidityParser.prototype.functionCallArguments = function() { case SolidityParser.T__20: case SolidityParser.T__21: case SolidityParser.T__31: - case SolidityParser.T__47: + case SolidityParser.T__33: case SolidityParser.T__48: case SolidityParser.T__49: case SolidityParser.T__50: @@ -6880,11 +6882,11 @@ SolidityParser.prototype.functionCallArguments = function() { case SolidityParser.Identifier: case SolidityParser.StringLiteral: this.enterOuterAlt(localctx, 2); - this.state = 771; + this.state = 773; this._errHandler.sync(this); _la = this._input.LA(1); - if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__47 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { - this.state = 770; + if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { + this.state = 772; this.expressionList(); } @@ -6953,13 +6955,13 @@ SolidityParser.prototype.functionCall = function() { this.enterRule(localctx, 122, SolidityParser.RULE_functionCall); try { this.enterOuterAlt(localctx, 1); - this.state = 775; + this.state = 777; this.expression(0); - this.state = 776; + this.state = 778; this.match(SolidityParser.T__20); - this.state = 777; + this.state = 779; this.functionCallArguments(); - this.state = 778; + this.state = 780; this.match(SolidityParser.T__21); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -7026,19 +7028,19 @@ SolidityParser.prototype.assemblyBlock = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 780; + this.state = 782; this.match(SolidityParser.T__13); - this.state = 784; + this.state = 786; this._errHandler.sync(this); _la = this._input.LA(1); - while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__12) | (1 << SolidityParser.T__13) | (1 << SolidityParser.T__20) | (1 << SolidityParser.T__23) | (1 << SolidityParser.T__27))) !== 0) || ((((_la - 40)) & ~0x1f) == 0 && ((1 << (_la - 40)) & ((1 << (SolidityParser.T__39 - 40)) | (1 << (SolidityParser.T__42 - 40)) | (1 << (SolidityParser.T__44 - 40)) | (1 << (SolidityParser.T__48 - 40)) | (1 << (SolidityParser.T__51 - 40)))) !== 0) || ((((_la - 84)) & ~0x1f) == 0 && ((1 << (_la - 84)) & ((1 << (SolidityParser.T__83 - 84)) | (1 << (SolidityParser.T__85 - 84)) | (1 << (SolidityParser.T__86 - 84)) | (1 << (SolidityParser.DecimalNumber - 84)) | (1 << (SolidityParser.HexNumber - 84)) | (1 << (SolidityParser.HexLiteral - 84)) | (1 << (SolidityParser.BreakKeyword - 84)) | (1 << (SolidityParser.ContinueKeyword - 84)) | (1 << (SolidityParser.Identifier - 84)))) !== 0) || _la===SolidityParser.StringLiteral) { - this.state = 781; + while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__12) | (1 << SolidityParser.T__13) | (1 << SolidityParser.T__20) | (1 << SolidityParser.T__23) | (1 << SolidityParser.T__27))) !== 0) || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__40 - 34)) | (1 << (SolidityParser.T__43 - 34)) | (1 << (SolidityParser.T__45 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 84)) & ~0x1f) == 0 && ((1 << (_la - 84)) & ((1 << (SolidityParser.T__83 - 84)) | (1 << (SolidityParser.T__85 - 84)) | (1 << (SolidityParser.T__86 - 84)) | (1 << (SolidityParser.DecimalNumber - 84)) | (1 << (SolidityParser.HexNumber - 84)) | (1 << (SolidityParser.HexLiteral - 84)) | (1 << (SolidityParser.BreakKeyword - 84)) | (1 << (SolidityParser.ContinueKeyword - 84)) | (1 << (SolidityParser.Identifier - 84)))) !== 0) || _la===SolidityParser.StringLiteral) { + this.state = 783; this.assemblyItem(); - this.state = 786; + this.state = 788; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 787; + this.state = 789; this.match(SolidityParser.T__15); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -7160,109 +7162,109 @@ SolidityParser.prototype.assemblyItem = function() { var localctx = new AssemblyItemContext(this, this._ctx, this.state); this.enterRule(localctx, 126, SolidityParser.RULE_assemblyItem); try { - this.state = 806; + this.state = 808; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,80,this._ctx); switch(la_) { case 1: this.enterOuterAlt(localctx, 1); - this.state = 789; + this.state = 791; this.identifier(); break; case 2: this.enterOuterAlt(localctx, 2); - this.state = 790; + this.state = 792; this.assemblyBlock(); break; case 3: this.enterOuterAlt(localctx, 3); - this.state = 791; + this.state = 793; this.assemblyExpression(); break; case 4: this.enterOuterAlt(localctx, 4); - this.state = 792; + this.state = 794; this.assemblyLocalDefinition(); break; case 5: this.enterOuterAlt(localctx, 5); - this.state = 793; + this.state = 795; this.assemblyAssignment(); break; case 6: this.enterOuterAlt(localctx, 6); - this.state = 794; + this.state = 796; this.assemblyStackAssignment(); break; case 7: this.enterOuterAlt(localctx, 7); - this.state = 795; + this.state = 797; this.labelDefinition(); break; case 8: this.enterOuterAlt(localctx, 8); - this.state = 796; + this.state = 798; this.assemblySwitch(); break; case 9: this.enterOuterAlt(localctx, 9); - this.state = 797; + this.state = 799; this.assemblyFunctionDefinition(); break; case 10: this.enterOuterAlt(localctx, 10); - this.state = 798; + this.state = 800; this.assemblyFor(); break; case 11: this.enterOuterAlt(localctx, 11); - this.state = 799; + this.state = 801; this.assemblyIf(); break; case 12: this.enterOuterAlt(localctx, 12); - this.state = 800; + this.state = 802; this.match(SolidityParser.BreakKeyword); break; case 13: this.enterOuterAlt(localctx, 13); - this.state = 801; + this.state = 803; this.match(SolidityParser.ContinueKeyword); break; case 14: this.enterOuterAlt(localctx, 14); - this.state = 802; + this.state = 804; this.subAssembly(); break; case 15: this.enterOuterAlt(localctx, 15); - this.state = 803; + this.state = 805; this.numberLiteral(); break; case 16: this.enterOuterAlt(localctx, 16); - this.state = 804; + this.state = 806; this.match(SolidityParser.StringLiteral); break; case 17: this.enterOuterAlt(localctx, 17); - this.state = 805; + this.state = 807; this.match(SolidityParser.HexLiteral); break; @@ -7327,16 +7329,16 @@ SolidityParser.prototype.assemblyExpression = function() { var localctx = new AssemblyExpressionContext(this, this._ctx, this.state); this.enterRule(localctx, 128, SolidityParser.RULE_assemblyExpression); try { - this.state = 810; + this.state = 812; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.T__12: - case SolidityParser.T__44: - case SolidityParser.T__48: + case SolidityParser.T__33: + case SolidityParser.T__45: case SolidityParser.T__51: case SolidityParser.Identifier: this.enterOuterAlt(localctx, 1); - this.state = 808; + this.state = 810; this.assemblyCall(); break; case SolidityParser.DecimalNumber: @@ -7344,7 +7346,7 @@ SolidityParser.prototype.assemblyExpression = function() { case SolidityParser.HexLiteral: case SolidityParser.StringLiteral: this.enterOuterAlt(localctx, 2); - this.state = 809; + this.state = 811; this.assemblyLiteral(); break; default: @@ -7419,56 +7421,56 @@ SolidityParser.prototype.assemblyCall = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 816; + this.state = 818; this._errHandler.sync(this); switch(this._input.LA(1)) { - case SolidityParser.T__44: - this.state = 812; - this.match(SolidityParser.T__44); + case SolidityParser.T__45: + this.state = 814; + this.match(SolidityParser.T__45); break; - case SolidityParser.T__48: - this.state = 813; - this.match(SolidityParser.T__48); + case SolidityParser.T__33: + this.state = 815; + this.match(SolidityParser.T__33); break; case SolidityParser.T__51: - this.state = 814; + this.state = 816; this.match(SolidityParser.T__51); break; case SolidityParser.T__12: case SolidityParser.Identifier: - this.state = 815; + this.state = 817; this.identifier(); break; default: throw new antlr4.error.NoViableAltException(this); } - this.state = 830; + this.state = 832; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,85,this._ctx); if(la_===1) { - this.state = 818; - this.match(SolidityParser.T__20); this.state = 820; + this.match(SolidityParser.T__20); + this.state = 822; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===SolidityParser.T__12 || ((((_la - 45)) & ~0x1f) == 0 && ((1 << (_la - 45)) & ((1 << (SolidityParser.T__44 - 45)) | (1 << (SolidityParser.T__48 - 45)) | (1 << (SolidityParser.T__51 - 45)))) !== 0) || ((((_la - 98)) & ~0x1f) == 0 && ((1 << (_la - 98)) & ((1 << (SolidityParser.DecimalNumber - 98)) | (1 << (SolidityParser.HexNumber - 98)) | (1 << (SolidityParser.HexLiteral - 98)) | (1 << (SolidityParser.Identifier - 98)) | (1 << (SolidityParser.StringLiteral - 98)))) !== 0)) { - this.state = 819; + if(_la===SolidityParser.T__12 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__45 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 98)) & ~0x1f) == 0 && ((1 << (_la - 98)) & ((1 << (SolidityParser.DecimalNumber - 98)) | (1 << (SolidityParser.HexNumber - 98)) | (1 << (SolidityParser.HexLiteral - 98)) | (1 << (SolidityParser.Identifier - 98)) | (1 << (SolidityParser.StringLiteral - 98)))) !== 0)) { + this.state = 821; this.assemblyExpression(); } - this.state = 826; + this.state = 828; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===SolidityParser.T__14) { - this.state = 822; + this.state = 824; this.match(SolidityParser.T__14); - this.state = 823; + this.state = 825; this.assemblyExpression(); - this.state = 828; + this.state = 830; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 829; + this.state = 831; this.match(SolidityParser.T__21); } @@ -7534,17 +7536,17 @@ SolidityParser.prototype.assemblyLocalDefinition = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 832; + this.state = 834; this.match(SolidityParser.T__83); - this.state = 833; + this.state = 835; this.assemblyIdentifierOrList(); - this.state = 836; + this.state = 838; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__84) { - this.state = 834; + this.state = 836; this.match(SolidityParser.T__84); - this.state = 835; + this.state = 837; this.assemblyExpression(); } @@ -7609,11 +7611,11 @@ SolidityParser.prototype.assemblyAssignment = function() { this.enterRule(localctx, 134, SolidityParser.RULE_assemblyAssignment); try { this.enterOuterAlt(localctx, 1); - this.state = 838; + this.state = 840; this.assemblyIdentifierOrList(); - this.state = 839; + this.state = 841; this.match(SolidityParser.T__84); - this.state = 840; + this.state = 842; this.assemblyExpression(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -7675,22 +7677,22 @@ SolidityParser.prototype.assemblyIdentifierOrList = function() { var localctx = new AssemblyIdentifierOrListContext(this, this._ctx, this.state); this.enterRule(localctx, 136, SolidityParser.RULE_assemblyIdentifierOrList); try { - this.state = 847; + this.state = 849; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.T__12: case SolidityParser.Identifier: this.enterOuterAlt(localctx, 1); - this.state = 842; + this.state = 844; this.identifier(); break; case SolidityParser.T__20: this.enterOuterAlt(localctx, 2); - this.state = 843; + this.state = 845; this.match(SolidityParser.T__20); - this.state = 844; + this.state = 846; this.assemblyIdentifierList(); - this.state = 845; + this.state = 847; this.match(SolidityParser.T__21); break; default: @@ -7761,17 +7763,17 @@ SolidityParser.prototype.assemblyIdentifierList = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 849; + this.state = 851; this.identifier(); - this.state = 854; + this.state = 856; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===SolidityParser.T__14) { - this.state = 850; + this.state = 852; this.match(SolidityParser.T__14); - this.state = 851; + this.state = 853; this.identifier(); - this.state = 856; + this.state = 858; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -7832,9 +7834,9 @@ SolidityParser.prototype.assemblyStackAssignment = function() { this.enterRule(localctx, 140, SolidityParser.RULE_assemblyStackAssignment); try { this.enterOuterAlt(localctx, 1); - this.state = 857; + this.state = 859; this.match(SolidityParser.T__85); - this.state = 858; + this.state = 860; this.identifier(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -7893,9 +7895,9 @@ SolidityParser.prototype.labelDefinition = function() { this.enterRule(localctx, 142, SolidityParser.RULE_labelDefinition); try { this.enterOuterAlt(localctx, 1); - this.state = 860; + this.state = 862; this.identifier(); - this.state = 861; + this.state = 863; this.match(SolidityParser.T__72); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -7966,17 +7968,17 @@ SolidityParser.prototype.assemblySwitch = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 863; + this.state = 865; this.match(SolidityParser.T__86); - this.state = 864; + this.state = 866; this.assemblyExpression(); - this.state = 868; + this.state = 870; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===SolidityParser.T__87 || _la===SolidityParser.T__88) { - this.state = 865; + this.state = 867; this.assemblyCase(); - this.state = 870; + this.state = 872; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -8040,23 +8042,23 @@ SolidityParser.prototype.assemblyCase = function() { var localctx = new AssemblyCaseContext(this, this._ctx, this.state); this.enterRule(localctx, 146, SolidityParser.RULE_assemblyCase); try { - this.state = 877; + this.state = 879; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.T__87: this.enterOuterAlt(localctx, 1); - this.state = 871; + this.state = 873; this.match(SolidityParser.T__87); - this.state = 872; + this.state = 874; this.assemblyLiteral(); - this.state = 873; + this.state = 875; this.assemblyBlock(); break; case SolidityParser.T__88: this.enterOuterAlt(localctx, 2); - this.state = 875; + this.state = 877; this.match(SolidityParser.T__88); - this.state = 876; + this.state = 878; this.assemblyBlock(); break; default: @@ -8132,31 +8134,31 @@ SolidityParser.prototype.assemblyFunctionDefinition = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 879; + this.state = 881; this.match(SolidityParser.T__27); - this.state = 880; + this.state = 882; this.identifier(); - this.state = 881; - this.match(SolidityParser.T__20); this.state = 883; + this.match(SolidityParser.T__20); + this.state = 885; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__12 || _la===SolidityParser.Identifier) { - this.state = 882; + this.state = 884; this.assemblyIdentifierList(); } - this.state = 885; - this.match(SolidityParser.T__21); this.state = 887; + this.match(SolidityParser.T__21); + this.state = 889; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===SolidityParser.T__89) { - this.state = 886; + this.state = 888; this.assemblyFunctionReturns(); } - this.state = 889; + this.state = 891; this.assemblyBlock(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -8215,9 +8217,9 @@ SolidityParser.prototype.assemblyFunctionReturns = function() { this.enterRule(localctx, 150, SolidityParser.RULE_assemblyFunctionReturns); try { this.enterOuterAlt(localctx, 1); - this.state = 891; + this.state = 893; this.match(SolidityParser.T__89); - this.state = 892; + this.state = 894; this.assemblyIdentifierList(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -8294,55 +8296,55 @@ SolidityParser.prototype.assemblyFor = function() { this.enterRule(localctx, 152, SolidityParser.RULE_assemblyFor); try { this.enterOuterAlt(localctx, 1); - this.state = 894; + this.state = 896; this.match(SolidityParser.T__23); - this.state = 897; + this.state = 899; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.T__13: - this.state = 895; + this.state = 897; this.assemblyBlock(); break; case SolidityParser.T__12: - case SolidityParser.T__44: - case SolidityParser.T__48: + case SolidityParser.T__33: + case SolidityParser.T__45: case SolidityParser.T__51: case SolidityParser.DecimalNumber: case SolidityParser.HexNumber: case SolidityParser.HexLiteral: case SolidityParser.Identifier: case SolidityParser.StringLiteral: - this.state = 896; + this.state = 898; this.assemblyExpression(); break; default: throw new antlr4.error.NoViableAltException(this); } - this.state = 899; + this.state = 901; this.assemblyExpression(); - this.state = 902; + this.state = 904; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.T__13: - this.state = 900; + this.state = 902; this.assemblyBlock(); break; case SolidityParser.T__12: - case SolidityParser.T__44: - case SolidityParser.T__48: + case SolidityParser.T__33: + case SolidityParser.T__45: case SolidityParser.T__51: case SolidityParser.DecimalNumber: case SolidityParser.HexNumber: case SolidityParser.HexLiteral: case SolidityParser.Identifier: case SolidityParser.StringLiteral: - this.state = 901; + this.state = 903; this.assemblyExpression(); break; default: throw new antlr4.error.NoViableAltException(this); } - this.state = 904; + this.state = 906; this.assemblyBlock(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -8405,11 +8407,11 @@ SolidityParser.prototype.assemblyIf = function() { this.enterRule(localctx, 154, SolidityParser.RULE_assemblyIf); try { this.enterOuterAlt(localctx, 1); - this.state = 906; - this.match(SolidityParser.T__39); - this.state = 907; - this.assemblyExpression(); this.state = 908; + this.match(SolidityParser.T__40); + this.state = 909; + this.assemblyExpression(); + this.state = 910; this.assemblyBlock(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -8481,7 +8483,7 @@ SolidityParser.prototype.assemblyLiteral = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 910; + this.state = 912; _la = this._input.LA(1); if(!(((((_la - 98)) & ~0x1f) == 0 && ((1 << (_la - 98)) & ((1 << (SolidityParser.DecimalNumber - 98)) | (1 << (SolidityParser.HexNumber - 98)) | (1 << (SolidityParser.HexLiteral - 98)) | (1 << (SolidityParser.StringLiteral - 98)))) !== 0))) { this._errHandler.recoverInline(this); @@ -8551,11 +8553,11 @@ SolidityParser.prototype.subAssembly = function() { this.enterRule(localctx, 158, SolidityParser.RULE_subAssembly); try { this.enterOuterAlt(localctx, 1); - this.state = 912; - this.match(SolidityParser.T__42); - this.state = 913; - this.identifier(); this.state = 914; + this.match(SolidityParser.T__43); + this.state = 915; + this.identifier(); + this.state = 916; this.assemblyBlock(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -8621,68 +8623,68 @@ SolidityParser.prototype.tupleExpression = function() { this.enterRule(localctx, 160, SolidityParser.RULE_tupleExpression); var _la = 0; // Token type try { - this.state = 942; + this.state = 944; this._errHandler.sync(this); switch(this._input.LA(1)) { case SolidityParser.T__20: this.enterOuterAlt(localctx, 1); - this.state = 916; + this.state = 918; this.match(SolidityParser.T__20); - this.state = 918; + this.state = 920; this._errHandler.sync(this); _la = this._input.LA(1); - if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__47 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { - this.state = 917; + if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { + this.state = 919; this.expression(0); } - this.state = 926; + this.state = 928; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===SolidityParser.T__14) { - this.state = 920; - this.match(SolidityParser.T__14); this.state = 922; + this.match(SolidityParser.T__14); + this.state = 924; this._errHandler.sync(this); _la = this._input.LA(1); - if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__47 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { - this.state = 921; + if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { + this.state = 923; this.expression(0); } - this.state = 928; + this.state = 930; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 929; + this.state = 931; this.match(SolidityParser.T__21); break; case SolidityParser.T__31: this.enterOuterAlt(localctx, 2); - this.state = 930; + this.state = 932; this.match(SolidityParser.T__31); - this.state = 939; + this.state = 941; this._errHandler.sync(this); _la = this._input.LA(1); - if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__47 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { - this.state = 931; + if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) { + this.state = 933; this.expression(0); - this.state = 936; + this.state = 938; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===SolidityParser.T__14) { - this.state = 932; + this.state = 934; this.match(SolidityParser.T__14); - this.state = 933; + this.state = 935; this.expression(0); - this.state = 938; + this.state = 940; this._errHandler.sync(this); _la = this._input.LA(1); } } - this.state = 941; + this.state = 943; this.match(SolidityParser.T__32); break; default: @@ -8745,7 +8747,7 @@ SolidityParser.prototype.elementaryTypeNameExpression = function() { this.enterRule(localctx, 162, SolidityParser.RULE_elementaryTypeNameExpression); try { this.enterOuterAlt(localctx, 1); - this.state = 944; + this.state = 946; this.elementaryTypeName(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -8813,7 +8815,7 @@ SolidityParser.prototype.numberLiteral = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 946; + this.state = 948; _la = this._input.LA(1); if(!(_la===SolidityParser.DecimalNumber || _la===SolidityParser.HexNumber)) { this._errHandler.recoverInline(this); @@ -8822,11 +8824,11 @@ SolidityParser.prototype.numberLiteral = function() { this._errHandler.reportMatch(this); this.consume(); } - this.state = 948; + this.state = 950; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,101,this._ctx); if(la_===1) { - this.state = 947; + this.state = 949; this.match(SolidityParser.NumberUnit); } @@ -8888,7 +8890,7 @@ SolidityParser.prototype.identifier = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 950; + this.state = 952; _la = this._input.LA(1); if(!(_la===SolidityParser.T__12 || _la===SolidityParser.Identifier)) { this._errHandler.recoverInline(this); @@ -8926,7 +8928,7 @@ SolidityParser.prototype.sempred = function(localctx, ruleIndex, predIndex) { SolidityParser.prototype.typeName_sempred = function(localctx, predIndex) { switch(predIndex) { case 0: - return this.precpred(this._ctx, 2); + return this.precpred(this._ctx, 3); default: throw "No predicate with index:" + predIndex; } diff --git a/package.json b/package.json index 7ae5d08b..35bfb549 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "exec-tests": "nyc -x \"**/grammar/**\" mocha && nyc report --reporter=text-lcov | coveralls", "test": "npm run exec-tests", "test-only": "mocha", - "generate": "(cd ./solidity-antlr4; java org.antlr.v4.Tool ./Solidity.g4 -Dlanguage=JavaScript -o ../lib/grammar)", + "generate": "scripts/build-grammar.sh", "lint": "eslint ." }, "bin": { diff --git a/scripts/build-grammar.sh b/scripts/build-grammar.sh index 5faf2442..d63a9faa 100755 --- a/scripts/build-grammar.sh +++ b/scripts/build-grammar.sh @@ -1,11 +1,13 @@ #!/usr/bin/env sh +# download antlr4 ANTLR_JAR="antlr4.jar" - if [ ! -e "$ANTLR_JAR" ]; then - curl http://www.antlr.org/download/antlr-4.7-complete.jar -o "$ANTLR_JAR" + curl https://www.antlr.org/download/antlr-4.7.1-complete.jar -o "$ANTLR_JAR" fi -java -jar $ANTLR_JAR -Dlanguage=JavaScript lib/grammar/Solidity.g4 +# build grammar based on solidity-antlr4 submodule +cd ./solidity-antlr4; java -jar ../$ANTLR_JAR ./Solidity.g4 -Dlanguage=JavaScript -o ../lib/grammar; cd - > /dev/null -find lib/grammar/ -name '*interp' -delete +# cleanup +rm lib/grammar/*.interp antlr4.jar diff --git a/solidity-antlr4 b/solidity-antlr4 index ea3b1b08..f4b1b9a9 160000 --- a/solidity-antlr4 +++ b/solidity-antlr4 @@ -1 +1 @@ -Subproject commit ea3b1b081f4b8e2f85d0269745d2fdbca093557a +Subproject commit f4b1b9a98348f5ec0dc525854a9ad7aee2a47f64 From 608ca291933307bdd2aff3864c8c9fccf56cc4f4 Mon Sep 17 00:00:00 2001 From: Mariano Aguero Date: Wed, 5 Dec 2018 16:14:02 -0300 Subject: [PATCH 07/27] (Feature) Add roadmap and changelog (#81) * Add roadmap file * Add changelog file * Update readme file --- CHANGELOG.md | 19 +++++++++++++++++++ README.md | 5 +++++ ROADMAP.md | 23 +++++++++++++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 CHANGELOG.md create mode 100644 ROADMAP.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..6e18510c --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,19 @@ +## [1.4.0] - 2018-10-10 +### Added +- Support prettier-solidity [#72](https://github.com/protofire/solhint/pull/72) + +## [1.3.0] - 2018-09-25 +### Added +- Add "Projects that use solhint" to README.md file [#64](https://github.com/protofire/solhint/issues/63) +- Add prettier and airbnb [#59](https://github.com/protofire/solhint/issues/59) +- Add new feature --ignore-path option [#58](https://github.com/protofire/solhint/issues/58) +- Add contribution formatter parameter validation [#54](https://github.com/protofire/solhint/pull/54) +- Add --max-warnings [int] option [#56](https://github.com/protofire/solhint/issues/56) +- Add --quiet option [#55](https://github.com/protofire/solhint/pull/55) + +### Changed +- Move rules sections out from README.md [#65](https://github.com/protofire/solhint/issues/65) +- Complete docs and readme [#61](https://github.com/protofire/solhint/issues/61) + +### Fixed +- Unable to satisfy indentation rules for functions with multiple return values [#49](https://github.com/protofire/solhint/issues/49) \ No newline at end of file diff --git a/README.md b/README.md index 78f3b1df..a1bfa961 100644 --- a/README.md +++ b/README.md @@ -162,6 +162,11 @@ Related documentation you may find [there](https://protofire.github.io/solhint/) - **[VS Code: Solidity Language Support by CodeChain.io]( https://marketplace.visualstudio.com/items?itemName=kodebox.solidity-language-server)** +## Table of Contents + +* [Roadmap](ROADMAP.md): The core project's roadmap - what the core team is looking to work on in the near future. +* [Contributing](CONTRIBUTING.md): The core Solhint team :heart: contributions. This describes how you can contribute to the Solhint Project. + ## Acknowledgements The grammar used by solhint was created and is maintained by [Federico Bond](https://github.com/federicobond). diff --git a/ROADMAP.md b/ROADMAP.md new file mode 100644 index 00000000..fbb31c3b --- /dev/null +++ b/ROADMAP.md @@ -0,0 +1,23 @@ +# Roadmap + +An overview of what the core Solhint team is looking to work on over the next few months. + +As a caveat - this is a living doc, and will evolve as priorities grow and shift. The Solhint project will always be adapting to new use-cases and evolutions in the blockchain world - this roadmap is more of a "North Star" of what we're looking to work on than a strict timeline. + +Please feel free to fill issues on this repository if you have questions, concerns, or suggestions. + + +## What's next? + +So, what will that new chapter hold? We see a few major themes... + +This is our next releases plan: + +- 1.4.0 [released on Oct 10, 2018] + - Support prettier-solidity [#72] +- 2.0.0 + - Switch from Blacklisting to Rulesets + Whitelisting [#73] + - Plugins support [#70] + - Support prettier-solidity as a plugin +- 2.1.0 + - Separate core library from CLI app [#69] \ No newline at end of file From 038b257ae22c42d522227c5bb15241110a590c69 Mon Sep 17 00:00:00 2001 From: Pablo Fullana Date: Wed, 5 Dec 2018 16:31:48 -0300 Subject: [PATCH 08/27] Update github.io static page * Update badges * Add table of contents with references to Roadmap and Contributing files --- docs/index.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/docs/index.md b/docs/index.md index 4136d990..3ec67936 100644 --- a/docs/index.md +++ b/docs/index.md @@ -9,10 +9,12 @@ description: This is an open source project for validating Solidity code. ## Solhint Project [![Build Status](https://travis-ci.org/protofire/solhint.svg?branch=master)](https://travis-ci.org/protofire/solhint) -[![npm version](http://img.shields.io/npm/v/solhint.svg?style=flat)](https://npmjs.org/package/solhint -"View this project on npm") +[![NPM version](https://badge.fury.io/js/solhint.svg)](https://npmjs.org/package/solhint) [![Coverage Status](https://coveralls.io/repos/github/protofire/solhint/badge.svg?branch=master)]( https://coveralls.io/github/protofire/solhint?branch=master) +[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/protofire/solhint/master/LICENSE) +[![dependencies Status](https://david-dm.org/protofire/solhint/status.svg)](https://david-dm.org/protofire/solhint) +[![devDependencies Status](https://david-dm.org/protofire/solhint/dev-status.svg)](https://david-dm.org/protofire/solhint?type=dev) This is an open source project for linting [solidity](http://solidity.readthedocs.io/en/develop/) code. This project provide both **security** and **style guide** validations. @@ -83,14 +85,17 @@ See EsLint docs about formatters [here](https://eslint.org/docs/user-guide/forma - unix - visualstudio - - ### Docs - [List of Rules](./rules.html) - [Configuration](./configuration.html) - [Use Solhint in Your Application](./use-in-app.html) +### Table of Contents + +* [Roadmap](../ROADMAP.md): The core project's roadmap - what the core team is looking to work on in the near future. +* [Contributing](../CONTRIBUTING.md): The core Solhint team :heart: contributions. This describes how you can contribute to the Solhint Project. + ### IDE Integrations - [Sublime Text 3](https://packagecontrol.io/search/solhint) From eca42b64337e4900ec0b7cb860e7a51e6e17074a Mon Sep 17 00:00:00 2001 From: Mariano Aguero Date: Thu, 6 Dec 2018 10:29:08 -0300 Subject: [PATCH 09/27] Update github.io static page --- docs/contributing.md | 81 ++++++++++++++++++++++++++++++++++++++++++++ docs/index.md | 4 +-- docs/roadmap.md | 23 +++++++++++++ 3 files changed, 106 insertions(+), 2 deletions(-) create mode 100644 docs/contributing.md create mode 100644 docs/roadmap.md diff --git a/docs/contributing.md b/docs/contributing.md new file mode 100644 index 00000000..c8697cee --- /dev/null +++ b/docs/contributing.md @@ -0,0 +1,81 @@ +Contributing to Solhint +======================= + +_Thanks for considering contributing to Solhint!_ + +The following is a set of guidelines for contributions. Feel free to suggest +improvements to this document in a pull request. + +Issues and feature requests +--------------------------- + +If you have any issues to report or features to request, please use the +[issue tracker](https://github.com/protofire/solhint/issues). + +Development +----------- + +### Requirements + +In order to develop Solhint, you'll need: + +- [Git](https://git-scm.com/) +- [Node.js](https://nodejs.org/) + +### Getting Started + +Clone this repository and install npm dependencies: + + $ git clone git@github.com:protofire/solhint.git + $ cd solhint + $ npm install + +### Testing changes without re-installing + +Since `solhint` is a CLI tool, the best way to test new changes immediately +after they are done is to globally link the module. Go to the repository and +run: + + $ npm link + +This will create a symbolic link to `solhint`'s directory. Any changes you make +will be available when you use `solhint` in any terminal. + +### Running tests + +If you make changes to the existing code, please make sure that all tests are +passing. If you contribute with a new feature, please add tests for it. To run the tests: + + $ npm test + +Grammar modifications +--------------------- + +Solhint uses [ANTLR4](http://www.antlr.org/) to generate the Solidity parser. +The grammar description is taken from +[solidity-antlr4](https://github.com/solidityj/solidity-antlr4). If there is +some language feature that Solhint doesn't support, the first step is to check +if the `Solidity.g4` fil is out of sync with the one in that repo. If that's the +case, the steps to update it are: + +1. Copy the `Solidity.g4` file and replace the one in this repo +(`lib/grammar/Solidity.g4`). +2. From the root of the project, execute `scripts/build-grammar.sh`. You will +need to have the Java Runtime Environment (7 or later) installed for this to +work. + +Pull Requests +------------- + +All code changes happen through pull requests. To create one: + +1. Fork the repo and create your branch from `master`. +2. Make the changes you want to do. +3. Ensure the tests are still passing. Please remember to add tests for new features. +4. Create the pull request. + + +License +------- + +By contributing, you agree that your contributions will be licensed under its MIT License. diff --git a/docs/index.md b/docs/index.md index 3ec67936..2a753b2a 100644 --- a/docs/index.md +++ b/docs/index.md @@ -93,8 +93,8 @@ See EsLint docs about formatters [here](https://eslint.org/docs/user-guide/forma ### Table of Contents -* [Roadmap](../ROADMAP.md): The core project's roadmap - what the core team is looking to work on in the near future. -* [Contributing](../CONTRIBUTING.md): The core Solhint team :heart: contributions. This describes how you can contribute to the Solhint Project. +* [Roadmap](./roadmap.html): The core project's roadmap - what the core team is looking to work on in the near future. +* [Contributing](./contributing.html): The core Solhint team :heart: contributions. This describes how you can contribute to the Solhint Project. ### IDE Integrations diff --git a/docs/roadmap.md b/docs/roadmap.md new file mode 100644 index 00000000..fbb31c3b --- /dev/null +++ b/docs/roadmap.md @@ -0,0 +1,23 @@ +# Roadmap + +An overview of what the core Solhint team is looking to work on over the next few months. + +As a caveat - this is a living doc, and will evolve as priorities grow and shift. The Solhint project will always be adapting to new use-cases and evolutions in the blockchain world - this roadmap is more of a "North Star" of what we're looking to work on than a strict timeline. + +Please feel free to fill issues on this repository if you have questions, concerns, or suggestions. + + +## What's next? + +So, what will that new chapter hold? We see a few major themes... + +This is our next releases plan: + +- 1.4.0 [released on Oct 10, 2018] + - Support prettier-solidity [#72] +- 2.0.0 + - Switch from Blacklisting to Rulesets + Whitelisting [#73] + - Plugins support [#70] + - Support prettier-solidity as a plugin +- 2.1.0 + - Separate core library from CLI app [#69] \ No newline at end of file From 3a9e9e0c1c0e57b5f7f3021b4f46ce9aee1a555d Mon Sep 17 00:00:00 2001 From: Mariano Aguero Date: Mon, 10 Dec 2018 12:39:55 -0300 Subject: [PATCH 10/27] 1.4.1 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8294b7a7..69ea7cd1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "solhint", - "version": "1.4.0", + "version": "1.4.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 35bfb549..3cfeed72 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "solhint", - "version": "1.4.0", + "version": "1.4.1", "description": "Solidity Code Linter", "main": "solhint.js", "keywords": [ From fe95df258ab5174cbc3b8675f90a3e0cf1880dff Mon Sep 17 00:00:00 2001 From: Mariano Aguero Date: Tue, 11 Dec 2018 09:46:34 -0300 Subject: [PATCH 11/27] Update readme --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a1bfa961..90f120ac 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,8 @@ Options: -V, --version output the version number -f, --formatter [name] report formatter name (stylish, table, tap, unix) -w, --max-warnings [maxWarningsNumber] number of warnings to trigger nonzero - -q --quiet report errors only - default: false + -c, --config [file_name] file to use as your .solhint.json + -q, --quiet report errors only - default: false --ignore-path [file_name] file to use as your .solhintignore -h, --help output usage information From 81b5da39000ba9b3c158f1f50f4dbe222fb904fb Mon Sep 17 00:00:00 2001 From: Mariano Aguero Date: Tue, 11 Dec 2018 09:46:45 -0300 Subject: [PATCH 12/27] Update changelog --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e18510c..9c042cae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +## [1.4.1] - 2018-12-10 +### Added +- Allow to specify the path to the config file [#78](https://github.com/protofire/solhint/issues/78) +- Roadmap and changelog [#81](https://github.com/protofire/solhint/issues/81) + +### Changed +- Upgrade grammar [#79](https://github.com/protofire/solhint/pull/79) + ## [1.4.0] - 2018-10-10 ### Added - Support prettier-solidity [#72](https://github.com/protofire/solhint/pull/72) From 313057ddd4e63c8e864df3c0c9b7ff1675511308 Mon Sep 17 00:00:00 2001 From: Pablo Fullana Date: Tue, 11 Dec 2018 11:37:02 -0300 Subject: [PATCH 13/27] Add gitter.im badge --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 90f120ac..f77ab0dc 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # Solhint Project +[![Gitter chat](https://badges.gitter.im/gitterHQ/gitter.svg)](https://gitter.im/solhint/Lobby) [![Build Status](https://travis-ci.org/protofire/solhint.svg?branch=master)](https://travis-ci.org/protofire/solhint) [![NPM version](https://badge.fury.io/js/solhint.svg)](https://npmjs.org/package/solhint) [![Coverage Status](https://coveralls.io/repos/github/protofire/solhint/badge.svg?branch=master)]( From ba89fc26ca6627601971783133d06ead44650d41 Mon Sep 17 00:00:00 2001 From: Pablo Fullana Date: Tue, 11 Dec 2018 11:47:55 -0300 Subject: [PATCH 14/27] Add gitter.im badge to static page --- docs/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/index.md b/docs/index.md index 2a753b2a..3887a120 100644 --- a/docs/index.md +++ b/docs/index.md @@ -8,6 +8,7 @@ description: This is an open source project for validating Solidity code. ## Solhint Project +[![Gitter chat](https://badges.gitter.im/gitterHQ/gitter.svg)](https://gitter.im/solhint/Lobby) [![Build Status](https://travis-ci.org/protofire/solhint.svg?branch=master)](https://travis-ci.org/protofire/solhint) [![NPM version](https://badge.fury.io/js/solhint.svg)](https://npmjs.org/package/solhint) [![Coverage Status](https://coveralls.io/repos/github/protofire/solhint/badge.svg?branch=master)]( From 476749f295f39ea0a85f67cfcd3f198dc672c639 Mon Sep 17 00:00:00 2001 From: Pablo Fullana Date: Wed, 19 Dec 2018 13:01:01 -0300 Subject: [PATCH 15/27] Add ETH donation badge --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index f77ab0dc..c06f4dc9 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # Solhint Project +[![Donate with Ethereum](https://en.cryptobadges.io/badge/micro/0xe8cdf02efd8ab0a490d7b2cb13553389c9bc932e)](https://en.cryptobadges.io/donate/0xe8cdf02efd8ab0a490d7b2cb13553389c9bc932e) [![Gitter chat](https://badges.gitter.im/gitterHQ/gitter.svg)](https://gitter.im/solhint/Lobby) [![Build Status](https://travis-ci.org/protofire/solhint.svg?branch=master)](https://travis-ci.org/protofire/solhint) @@ -178,6 +179,11 @@ You can find it [here](https://github.com/solidityj/solidity-antlr4). MIT +## Back us +Solhint is free to use and open-sourced. If you value our effort and feel like helping us to keep pushing this tool forward, you can send us a small donation. We'll highly appreciate it :) + +[![Donate with Ethereum](https://en.cryptobadges.io/badge/micro/0xe8cdf02efd8ab0a490d7b2cb13553389c9bc932e)](https://en.cryptobadges.io/donate/0xe8cdf02efd8ab0a490d7b2cb13553389c9bc932e) + ## Who uses solhint? [POA Network - Public EVM Sidechain](https://github.com/poanetwork) [0x](https://github.com/0xProject) [GNOSIS](https://github.com/gnosis) From fd36d6564598ae0c210239ad62011864c8625415 Mon Sep 17 00:00:00 2001 From: Pablo Fullana Date: Wed, 19 Dec 2018 13:03:26 -0300 Subject: [PATCH 16/27] Add ETH donation badge --- docs/index.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/index.md b/docs/index.md index 3887a120..974cbff6 100644 --- a/docs/index.md +++ b/docs/index.md @@ -7,6 +7,7 @@ description: This is an open source project for validating Solidity code. --- ## Solhint Project +[![Donate with Ethereum](https://en.cryptobadges.io/badge/micro/0xe8cdf02efd8ab0a490d7b2cb13553389c9bc932e)](https://en.cryptobadges.io/donate/0xe8cdf02efd8ab0a490d7b2cb13553389c9bc932e) [![Gitter chat](https://badges.gitter.im/gitterHQ/gitter.svg)](https://gitter.im/solhint/Lobby) [![Build Status](https://travis-ci.org/protofire/solhint.svg?branch=master)](https://travis-ci.org/protofire/solhint) @@ -111,3 +112,8 @@ See EsLint docs about formatters [here](https://eslint.org/docs/user-guide/forma ### Licence MIT + +## Back us +Solhint is free to use and open-sourced. If you value our effort and feel like helping us to keep pushing this tool forward, you can send us a small donation. We'll highly appreciate it :) + +[![Donate with Ethereum](https://en.cryptobadges.io/badge/micro/0xe8cdf02efd8ab0a490d7b2cb13553389c9bc932e)](https://en.cryptobadges.io/donate/0xe8cdf02efd8ab0a490d7b2cb13553389c9bc932e) From 8726e308cfa3046e32eeb6a3fde29aee2f230b57 Mon Sep 17 00:00:00 2001 From: Pablo Fullana Date: Wed, 19 Dec 2018 14:39:40 -0300 Subject: [PATCH 17/27] Update 'Back Us' section indentation --- docs/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/index.md b/docs/index.md index 974cbff6..66c15a3d 100644 --- a/docs/index.md +++ b/docs/index.md @@ -113,7 +113,7 @@ See EsLint docs about formatters [here](https://eslint.org/docs/user-guide/forma MIT -## Back us +### Back Us Solhint is free to use and open-sourced. If you value our effort and feel like helping us to keep pushing this tool forward, you can send us a small donation. We'll highly appreciate it :) [![Donate with Ethereum](https://en.cryptobadges.io/badge/micro/0xe8cdf02efd8ab0a490d7b2cb13553389c9bc932e)](https://en.cryptobadges.io/donate/0xe8cdf02efd8ab0a490d7b2cb13553389c9bc932e) From 391f70e1aa65a58bd4d4033e77fcc673ee9b4016 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Venturo?= Date: Wed, 19 Dec 2018 17:04:32 -0300 Subject: [PATCH 18/27] Update solhint.js --- solhint.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/solhint.js b/solhint.js index 4d170f52..3b03a217 100755 --- a/solhint.js +++ b/solhint.js @@ -17,7 +17,7 @@ function init() { .option('-f, --formatter [name]', 'report formatter name (stylish, table, tap, unix)') .option( '-w, --max-warnings [maxWarningsNumber]', - 'number of warnings to trigger nonzero exit code' + 'number of allowed warnings to not trigger nonzero exit code' ) .option('-c, --config [file_name]', 'file to use as your .solhint.json') .option('-q, --quiet', 'report errors only - default: false') @@ -57,7 +57,7 @@ function execMainAction() { const reportLists = program.args.filter(_.isString).map(processPath) const reports = _.flatten(reportLists) const warningsNumberExceeded = - program.maxWarnings >= 0 && reports[0].warningCount >= program.maxWarnings + program.maxWarnings >= 0 && reports[0].warningCount > program.maxWarnings if (program.quiet) { // filter the list of reports, to set errors only. From d8092630cf480c280fa3f48c12a11c363f72e246 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Venturo?= Date: Wed, 19 Dec 2018 17:29:07 -0300 Subject: [PATCH 19/27] Update rules.md (#88) --- docs/rules.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/rules.md b/docs/rules.md index 4e11123e..4fa0f78b 100644 --- a/docs/rules.md +++ b/docs/rules.md @@ -38,6 +38,7 @@ description: List of validation rules for Solhint - Solidity security, style gui | **avoid-tx-origin** | Avoid to use tx.origin | *[default](#options)* | | **no-inline-assembly** | Avoid to use inline assembly. It is acceptable only in rare cases | *[default](#options)* | | **not-rely-on-block-hash** | Do not rely on "block.blockhash". Miners can influence its value. | *[default](#options)* | + | **not-rely-on-time** | Avoid to make time-based decisions in your business logic | *[default](#options)* | | **avoid-low-level-calls** | Avoid to use low level calls. | *[default](#options)* | \* \- All security rules implemented according [ConsenSys Guide for Smart Contracts](https://consensys.github.io/smart-contract-best-practices/recommendations/) From 77e1f6849f79372675d12d0eadea7775210f170d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Venturo?= Date: Wed, 19 Dec 2018 21:01:13 -0300 Subject: [PATCH 20/27] Update solhint.js --- solhint.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solhint.js b/solhint.js index 3b03a217..3e338e9a 100755 --- a/solhint.js +++ b/solhint.js @@ -17,7 +17,7 @@ function init() { .option('-f, --formatter [name]', 'report formatter name (stylish, table, tap, unix)') .option( '-w, --max-warnings [maxWarningsNumber]', - 'number of allowed warnings to not trigger nonzero exit code' + 'number of allowed warnings' ) .option('-c, --config [file_name]', 'file to use as your .solhint.json') .option('-q, --quiet', 'report errors only - default: false') From f1743456b112ccb8b9366833ba4edfc8588ced58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Venturo?= Date: Thu, 20 Dec 2018 11:01:09 -0300 Subject: [PATCH 21/27] Added disable-previous-line. --- lib/comment-directive-parser.js | 10 ++++++++++ test/comment-directives.js | 29 +++++++++++++++++++++-------- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/lib/comment-directive-parser.js b/lib/comment-directive-parser.js index 37f2f3b3..34a743a2 100644 --- a/lib/comment-directive-parser.js +++ b/lib/comment-directive-parser.js @@ -34,6 +34,16 @@ class CommentDirectiveParser { return } + if (text.includes('solhint-disable-previous-line')) { + const rules = this.parseRuleIds(text, 'solhint-disable-previous-line') + + if (curLine > 0) { + ruleStore.disableRules(curLine - 1, rules) + } + + return + } + if (text.includes('solhint-disable')) { const rules = this.parseRuleIds(text, 'solhint-disable') diff --git a/test/comment-directives.js b/test/comment-directives.js index e70b320e..98d616df 100644 --- a/test/comment-directives.js +++ b/test/comment-directives.js @@ -21,11 +21,24 @@ describe('Linter', () => { assertNoErrors(report) }) - it('should disable only one compiler error', () => { + it('should disable only one compiler error on next line', () => { const report = linter.processStr( ` // solhint-disable-next-line - pragma solidity ^0.4.4; + pragma solidity ^0.4.4; + pragma solidity 0.3.4; + `, + noIndent() + ) + + assertErrorCount(report, 1) + }) + + it('should disable only one compiler error on previous line', () => { + const report = linter.processStr( + ` + pragma solidity ^0.4.4; + // solhint-disable-previous-line pragma solidity 0.3.4; `, noIndent() @@ -38,7 +51,7 @@ describe('Linter', () => { const report = linter.processStr( ` /* solhint-disable-next-line */ - pragma solidity ^0.4.4; + pragma solidity ^0.4.4; pragma solidity 0.3.4; `, noIndent() @@ -51,7 +64,7 @@ describe('Linter', () => { const report = linter.processStr( ` // solhint-disable compiler-gt-0_4 - pragma solidity ^0.4.4; + pragma solidity ^0.4.4; pragma solidity 0.3.4; // disabled error: Compiler version must be greater that 0.4 `, noIndent() @@ -67,7 +80,7 @@ describe('Linter', () => { /* solhint-disable compiler-gt-0_4 */ pragma solidity 0.3.4; /* solhint-enable compiler-gt-0_4 */ - pragma solidity 0.3.4; + pragma solidity 0.3.4; `, noIndent() ) @@ -82,7 +95,7 @@ describe('Linter', () => { /* solhint-disable compiler-gt-0_4 */ pragma solidity ^0.4.4; /* solhint-enable compiler-gt-0_4 */ - pragma solidity ^0.4.4; + pragma solidity ^0.4.4; `, noIndent() ) @@ -96,7 +109,7 @@ describe('Linter', () => { ` /* solhint-disable */ pragma solidity ^0.4.4; - pragma solidity 0.3.4; + pragma solidity 0.3.4; `, noIndent() ) @@ -110,7 +123,7 @@ describe('Linter', () => { /* solhint-disable */ pragma solidity ^0.4.4; /* solhint-enable */ - pragma solidity ^0.4.4; + pragma solidity ^0.4.4; `, noIndent() ) From b963b98e77924dde0e6e95d3b166c04098e8f236 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Venturo?= Date: Thu, 20 Dec 2018 11:25:37 -0300 Subject: [PATCH 22/27] Fixed some comment directive tests. --- test/comment-directives.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/comment-directives.js b/test/comment-directives.js index e70b320e..fb74baef 100644 --- a/test/comment-directives.js +++ b/test/comment-directives.js @@ -25,7 +25,7 @@ describe('Linter', () => { const report = linter.processStr( ` // solhint-disable-next-line - pragma solidity ^0.4.4; + pragma solidity 0.3.4; pragma solidity 0.3.4; `, noIndent() @@ -38,7 +38,7 @@ describe('Linter', () => { const report = linter.processStr( ` /* solhint-disable-next-line */ - pragma solidity ^0.4.4; + pragma solidity 0.3.4; pragma solidity 0.3.4; `, noIndent() From 3c0bb6c35d34528b551dda85ff5efc5c13bb412b Mon Sep 17 00:00:00 2001 From: fvictorio Date: Thu, 20 Dec 2018 12:19:02 -0300 Subject: [PATCH 23/27] Add test for multiline disable-previous-line comment --- test/comment-directives.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/test/comment-directives.js b/test/comment-directives.js index 98d616df..156e4ba0 100644 --- a/test/comment-directives.js +++ b/test/comment-directives.js @@ -47,7 +47,7 @@ describe('Linter', () => { assertErrorCount(report, 1) }) - it('should disable only one compiler error using multiline comment', () => { + it('should disable only one compiler error on next line using multiline comment', () => { const report = linter.processStr( ` /* solhint-disable-next-line */ @@ -60,6 +60,19 @@ describe('Linter', () => { assertErrorCount(report, 1) }) + it('should disable only one compiler error on previous line using multiline comment', () => { + const report = linter.processStr( + ` + pragma solidity ^0.4.4; + /* solhint-disable-previous-line */ + pragma solidity 0.3.4; + `, + noIndent() + ) + + assertErrorCount(report, 1) + }) + it('should disable only compiler version error', () => { const report = linter.processStr( ` From f985588c357711a9c80ed13820e6cbe4bf5a8724 Mon Sep 17 00:00:00 2001 From: Pablo Fullana Date: Fri, 21 Dec 2018 14:30:29 -0300 Subject: [PATCH 24/27] Update CONTRIBUTING.md (#95) This PR enhances the contribution guide, by: - Adding a reference to project roadmap - Adding considerations about commit messages and self-documented code --- CONTRIBUTING.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c8697cee..b426e436 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -12,6 +12,14 @@ Issues and feature requests If you have any issues to report or features to request, please use the [issue tracker](https://github.com/protofire/solhint/issues). +### Roadmap + +There's a (tentative) [roadmap](ROADMAP.md) in which we've put down what we envision to be the best-next functionalities. + +Since the project is constantly evolving and new features are requested/discovered as we go, this roadmap is open for discussions and we expect it to change over time. + +Roadmap-wise contributions via new issues are always welcomed. + Development ----------- @@ -74,6 +82,9 @@ All code changes happen through pull requests. To create one: 3. Ensure the tests are still passing. Please remember to add tests for new features. 4. Create the pull request. +### Considerations +- It is highly encouraged to follow [The seven rules of a great Git commit message](https://chris.beams.io/posts/git-commit/#seven-rules) +- Code should be self-documented. But, in case there is any code that may be hard to understand, it must include some comments to make it easier to review and maintain later on. License ------- From e3aa88f6aedc69be57035da1fd27f70a89d09816 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Venturo?= Date: Fri, 21 Dec 2018 16:31:45 -0300 Subject: [PATCH 25/27] Snake case now allows for a (single) leading underscore. (#93) * Snake case now allows for a (single) leading underscore * The snake case check now allows for up to two leading underscores. --- lib/common/identifier-naming.js | 2 +- test/naming-rules.js | 29 +++++++++++++++++++++++++++-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/lib/common/identifier-naming.js b/lib/common/identifier-naming.js index 6fe2424f..fef51802 100644 --- a/lib/common/identifier-naming.js +++ b/lib/common/identifier-naming.js @@ -20,7 +20,7 @@ module.exports = { }, isUpperSnakeCase(text) { - return match(text, /[A-Z0-9]+[_A-Z0-9]*/) + return match(text, /_{0,2}[A-Z0-9]+[_A-Z0-9]*/) }, isNotUpperSnakeCase(text) { diff --git a/test/naming-rules.js b/test/naming-rules.js index 54e8ff6a..8d30e112 100644 --- a/test/naming-rules.js +++ b/test/naming-rules.js @@ -59,14 +59,39 @@ describe('Linter', () => { assert.ok(report.messages[0].message.includes('Variable name')) }) - it('should not raise var name error for constants', () => { - const code = contractWith('uint32 private constant D = 10;') + it('should not raise var name error for constants in snake case', () => { + const code = contractWith('uint32 private constant THE_CONSTANT = 10;') const report = linter.processStr(code, noIndent()) assert.equal(report.errorCount, 0) }) + it('should not raise var name error for constants in snake case with single leading underscore', () => { + const code = contractWith('uint32 private constant _THE_CONSTANT = 10;') + + const report = linter.processStr(code, noIndent()) + + assert.equal(report.errorCount, 0) + }) + + it('should not raise var name error for constants in snake case with double leading underscore', () => { + const code = contractWith('uint32 private constant __THE_CONSTANT = 10;') + + const report = linter.processStr(code, noIndent()) + + assert.equal(report.errorCount, 0) + }) + + it('should raise var name error for constants in snake case with more than two leading underscores', () => { + const code = contractWith('uint32 private constant ___THE_CONSTANT = 10;') + + const report = linter.processStr(code, noIndent()) + + assert.equal(report.errorCount, 1) + assert.ok(report.messages[0].message.includes('SNAKE_CASE')) + }) + it('should raise var name error for event arguments illegal styling', () => { const code = contractWith('event Event1(uint B);') From 416aff7c50356a6ef0744886582a82e20a8c3e7d Mon Sep 17 00:00:00 2001 From: Mariano Aguero Date: Wed, 26 Dec 2018 15:21:45 -0300 Subject: [PATCH 26/27] Update changelog --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c042cae..9463efd9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +## [1.5.0] - 2018-12-26 +### Added +- Add not-rely-on-time to rules documentation [#88](https://github.com/protofire/solhint/pull/88) +- Have --max-warnings better reflect its name [#89](https://github.com/protofire/solhint/pull/89) +- Added disable-previous-line [#91](https://github.com/protofire/solhint/pull/91) +- Snake case now allows for a (single) leading underscore [#93](https://github.com/protofire/solhint/pull/93) + +### Fixed +- Fixed some comment directive tests [#92](https://github.com/protofire/solhint/pull/92) + ## [1.4.1] - 2018-12-10 ### Added - Allow to specify the path to the config file [#78](https://github.com/protofire/solhint/issues/78) From 79feec304080672e7abb4c44c56193f8c4df4d1c Mon Sep 17 00:00:00 2001 From: Mariano Aguero Date: Wed, 26 Dec 2018 15:36:51 -0300 Subject: [PATCH 27/27] Add version 1.5.0 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 69ea7cd1..a71ae568 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "solhint", - "version": "1.4.1", + "version": "1.5.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 3cfeed72..0b59161e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "solhint", - "version": "1.4.1", + "version": "1.5.0", "description": "Solidity Code Linter", "main": "solhint.js", "keywords": [