diff --git a/CHANGELOG.md b/CHANGELOG.md index 813003b..a66abcc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,25 @@ # Changelog +## 0.6.0 + +#### Breaking + +- **Removed `DARTANALYZER` analyzer mode.** The `dartanalyzer` command was deprecated in Dart 2.18 and removed in Dart 3. Use `DART` or `FLUTTER` mode instead. The `sonar.dart.analyzer.mode` option no longer accepts `DARTANALYZER`. + +#### Enhancements + +- **Dart 3.x linter rules:** Added 14 new rules — `avoid_futureor_void`, `omit_obvious_property_types`, `remove_deprecations_in_breaking_versions`, `simplify_variable_pattern`, `specify_nonobvious_local_variable_types`, `specify_nonobvious_property_types`, `strict_top_level_inference`, `switch_on_type`, `unnecessary_async`, `unnecessary_ignore`, `unnecessary_unawaited`, `unnecessary_underscores`, `unsafe_variance`, `use_null_aware_elements` +- **Deprecated rules deactivated:** 13 rules removed in Dart 3 are now `active: false` — `always_require_non_null_named_parameters`, `avoid_as`, `avoid_returning_null`, `avoid_returning_null_for_future`, `invariant_booleans`, `prefer_bool_in_asserts`, `prefer_equal_for_default_values`, `super_goes_last`, `package_api_docs`, `enable_null_safety`, `deprecated_new_in_comment_reference`, `type_check_with_null`, `unsafe_html` +- **ANTLR grammar updated for Dart 3:** `sealed`, `base`, `final`, `interface`, `mixin` class modifiers, record types/literals, switch expressions, pattern matching (type/variable/wildcard/constant patterns), if-case statements, `when` guard clauses, nullable type syntax +- **State management detection:** PubSpec parser now detects BLoC (`flutter_bloc`, `bloc`), Riverpod (`flutter_riverpod`, `hooks_riverpod`, `riverpod`), and Provider dependencies +- **24 new state management rules:** 9 BLoC rules + 15 Riverpod rules with MQR clean code attributes, registered under `flutter-state-management` repository +- **New Dart keywords:** `base`, `sealed`, `when` added to syntax highlighter +- **Total rules: 329** (305 dartanalyzer + 24 state management) + +#### Bug Fixes + +- None. + ## 0.5.2 #### Breaking diff --git a/README.md b/README.md index 3b1d383..9981662 100644 --- a/README.md +++ b/README.md @@ -1,144 +1,163 @@ -![CI](https://github.com/insideapp-oss/sonar-flutter/workflows/CI/badge.svg) +# SonarQube Plugin for Flutter / Dart -[![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=insideapp-oss_sonar-flutter&metric=sqale_index)](https://sonarcloud.io/summary/new_code?id=insideapp-oss_sonar-flutter) -[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=insideapp-oss_sonar-flutter&metric=coverage)](https://sonarcloud.io/summary/new_code?id=insideapp-oss_sonar-flutter) -[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=insideapp-oss_sonar-flutter&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=insideapp-oss_sonar-flutter) -[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=insideapp-oss_sonar-flutter&metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=insideapp-oss_sonar-flutter) -[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=insideapp-oss_sonar-flutter&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=insideapp-oss_sonar-flutter) +> Static code analysis for Dart and Flutter projects in SonarQube — with Dart 3.x support, 329 rules, and state management linting. -# SonarQube plugin for Flutter / Dart +

+ SonarQube Flutter Plugin +

-A plugin to enable analysis of Dart and Flutter projects into SonarQube. +--- -

- main.png -

+## What Does It Do? -## Features +| Feature | Status | Details | +|---------|--------|---------| +| **Issues** | Supported | 305 dartanalyzer rules + 24 state management rules | +| **Dart 3.x** | Supported | sealed classes, records, patterns, switch expressions | +| **State Management** | Supported | BLoC (9 rules), Riverpod (15 rules) auto-detected from `pubspec.yaml` | +| **Coverage** | Supported | LCOV format | +| **Tests** | Supported | JSON test reports | +| **Complexity** | Supported | Cyclomatic complexity | +| **Syntax** | Supported | Highlighting & CPD tokens | +| **MQR Mode** | Supported | Clean Code attributes & software quality impacts (SonarQube v26+) | -| Feature | Supported | -|------------|-----------------------------------------------------------------| -| Size | YES | -| Issues | YES ([dartanalyzer](https://dart.dev/tools/dartanalyzer) rules) | -| Tests | YES | -| Coverage | YES | -| Complexity | YES | -| Syntax | YES | +**Compatible with:** SonarQube 7.9+ (MQR mode requires v26+) -The plugin is compatible with sonarQube 7.9+. +--- -## Download +## Quick Start -Checkout the [Releases](https://github.com/insideapp-oss/sonar-flutter/releases) page. +### 1. Prerequisites -Changelog is available [here](https://github.com/insideapp-oss/sonar-flutter/blob/develop/CHANGELOG.md). +| Tool | Required For | Installation | +|------|-------------|-------------| +| **Flutter SDK** | Flutter projects | [flutter.dev/docs/get-started/install](https://flutter.dev/docs/get-started/install) | +| **Dart SDK** | All projects | [dart.dev/get-dart](https://dart.dev/get-dart) | +| **sonar-scanner** | Running analysis | [docs.sonarqube.org](https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/) | +| **Java** | sonar-scanner | Bundled with scanner or install separately | -## Prerequisites +### 2. Install the Plugin -### Flutter SDK (when analyzing a Flutter project) +1. Download the latest JAR from [Releases](https://github.com/insideapp-oss/sonar-flutter/releases) +2. Copy it to `$SONARQUBE_HOME/extensions/plugins/` +3. Restart SonarQube -Install Flutter as explained on the official documentation page. +### 3. Configure Your Project -[Flutter Installation instructions](https://flutter.dev/docs/get-started/install) +Create `sonar-project.properties` in your project root: -### Dart +```properties +sonar.projectKey=my_flutter_app +sonar.projectName=My Flutter App +sonar.projectVersion=1.0.0 -Dart is downloaded by the Flutter SDK in **$FLUTTER_HOME/bin/cache/dart-sdk**, however command lines are not on the path by default (dart must be on the path). +sonar.sources=lib,pubspec.yaml +sonar.tests=test +sonar.sourceEncoding=UTF-8 +``` -It is recommended to install Dart SDK separately as explained here : [Install the Dart SDK](https://dart.dev/get-dart) for more reliability in a CI/CD environment. +### 4. Run Analysis -### sonar-scanner (requires Java) +```bash +# Install dependencies +flutter pub get -Install sonar-scanner as explained in the official documentation. +# Run tests with coverage +flutter test --machine --coverage > tests.output -[Installation instructions](https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/) +# Analyze and publish to SonarQube +sonar-scanner +``` +That's it! Open your SonarQube dashboard to see the results. -## Installation (on the server) +--- -- Download the plugin binary into the **$SONARQUBE_HOME/extensions/plugins** directory. -- Restart the server. +## Configuration Options -## Project configuration +All options can be set in `sonar-project.properties`, SonarQube UI, or via `-D` parameters. -Create a **sonar-project.properties** file at the root with this content : +| Option | Values | Default | Description | +|--------|--------|---------|-------------| +| `sonar.dart.analyzer.mode` | `DETECT` `DART` `FLUTTER` `MANUAL` | `DETECT` | Which analyzer to use. `DETECT` picks automatically based on `pubspec.yaml`. Use `MANUAL` for pre-existing reports. | +| `sonar.dart.analyzer.options.override` | `true` / `false` | `true` | Replace local `analysis_options.yaml` with the plugin's version during analysis. Set to `false` to keep yours. | +| `sonar.dart.analyzer.report.mode` | `DETECT` `MACHINE` `LEGACY` | `DETECT` | Output format. Auto-detected from Dart SDK version when set to `DETECT`. | +| `sonar.dart.analyzer.report.path` | file path | - | Path to existing report file. Only used with `MANUAL` mode. | +| `sonar.flutter.tests.reportPath` | file path(s) | `tests.output` | Path to test report JSON file(s). Comma-separated, no wildcards. | +| `sonar.flutter.coverage.reportPath` | file path | `coverage/lcov.info` | Path to LCOV coverage report. | -```properties -# Project identification -sonar.projectKey=flutter_rocks -sonar.projectName=Flutter Rocks -sonar.projectVersion=1.0 - -# Source code location. -# Path is relative to the sonar-project.properties file. Defaults to . -# Use commas to specify more than one file/folder. -# It is good practice to add pubspec.yaml to the sources as the analyzer -# may produce warnings for this file as well. -sonar.sources=lib,pubspec.yaml -sonar.tests=test +> **Note:** The legacy `DARTANALYZER` mode has been removed. It was deprecated in Dart 2.18 and no longer exists in Dart 3.x. Use `DART` or `FLUTTER` mode instead. -# Encoding of the source code. Default is default system encoding. -sonar.sourceEncoding=UTF-8 +--- -# Analyzer mode -# Can be: -# - DETECT (attempt to detect automatically) - default -# - MANUAL (an existing report needs to be provided) -# - FLUTTER (flutter analyze) -# - DART (dart analyze) -# - DARTANALYZER (dartanalyzer) -# sonar.dart.analyzer.mode= - -# Allows reuse of an existing analyzer report when mode is MANUAL -# sonar.dart.analyzer.report.path= - -# Analyzer report output mode -# Can be: -# - DETECT (attempt to detect automatically, requires Dart SDK on the PATH) - default -# - MACHINE (a new machine readable output that is available for Dart 2.12+) -# - LEGACY (attempts to parse human readable output from dart/flutter) - default -# sonar.dart.analyzer.report.mode= -``` +## Rules -*For a complete list of available options, please refer to the [SonarQube documentation](https://docs.sonarqube.org/latest/analysis/analysis-parameters/).* +### Dart Analyzer Rules (305) -### Use existing analysis options +The plugin bundles 305 rules from `dart analyze` / `flutter analyze`: +- Lint rules (style, best practices, error prevention) +- Analyzer diagnostics (type errors, null safety, etc.) +- 14 new Dart 3.x rules: `avoid_futureor_void`, `switch_on_type`, `unnecessary_async`, `unsafe_variance`, and more -The plugin uses its own analysis options file. -If `analysis_options.yaml` file already exists under the project root, it will be saved during the analysis and then restored to its initial state. +### State Management Rules (24) -To disable this behavior and use the existing`analysis_options.yaml` file instead, add the following line to `sonar-project.properties` file : +Automatically activated when BLoC or Riverpod is detected in `pubspec.yaml`: -``` -# Use existing options to perform dartanalyzer analysis -sonar.dart.analyzer.options.override=true -``` +**BLoC (9 rules)** — `flutter_bloc` / `bloc` dependency detected: +- `bloc_avoid_flutter_imports` — Keep BLoC platform-independent +- `bloc_avoid_public_methods` — Use events, not public methods +- `bloc_avoid_mutable_state` — State classes must be immutable +- `bloc_close_bloc` — Prevent memory leaks +- and 5 more... + +**Riverpod (15 rules)** — `flutter_riverpod` / `riverpod` dependency detected: +- `riverpod_missing_provider_scope` — ProviderScope required at root +- `riverpod_avoid_read_inside_build` — Use ref.watch in build +- `riverpod_avoid_watch_outside_build` — Use ref.read in callbacks +- `riverpod_avoid_build_context_in_providers` — Keep providers decoupled +- and 11 more... + +--- + +## Dart 3.x Grammar Support -### Multi-module sample +The ANTLR parser understands Dart 3 syntax: -It is possible to analyze a project with multiple modules. For example a Dart generator library with an example. +- **Class modifiers:** `sealed`, `base`, `final`, `interface`, `mixin class` +- **Records:** `(int, String)` types and `(1, 'hello')` literals +- **Patterns:** `switch` expressions, `if-case`, variable/type/wildcard patterns +- **Guards:** `when` clause in switch cases and if-case +- **Nullable types:** `String?`, `int?` in type positions + +--- + +## Advanced Usage + +### Use Your Own `analysis_options.yaml` + +```properties +sonar.dart.analyzer.options.override=false +``` + +### Multi-Module Projects ```properties sonar.projectKey=mylib sonar.sourceEncoding=UTF-8 - sonar.modules=mylib,mylib_generator,example -# mylib mylib.sonar.sources=lib,pubspec.yaml mylib.sonar.dart.analyzer.mode=MANUAL mylib.sonar.dart.analyzer.report.mode=LEGACY mylib.sonar.dart.analyzer.report.path=build/reports/analysis-results.txt -# mylib_generator mylib_generator.sonar.sources=lib,pubspec.yaml mylib_generator.sonar.dart.analyzer.options.override=false mylib_generator.sonar.dart.analyzer.mode=MANUAL mylib_generator.sonar.dart.analyzer.report.mode=MACHINE mylib_generator.sonar.dart.analyzer.report.path=build/reports/analysis-results.txt -# example example.sonar.sources=lib,pubspec.yaml example.sonar.tests=test example.sonar.exclusions=**/*/*.g.dart @@ -148,60 +167,45 @@ example.sonar.dart.analyzer.report.mode=LEGACY example.sonar.dart.analyzer.report.path=build/reports/analysis-results.txt ``` -## Run analysis +### Using `dart_test.yaml` -Use the following commands from the root folder to start an analysis: - -```console -# Download dependencies -flutter pub get -# Run tests with User feedback (in case some test are failing) -flutter test -# Run tests without user feedback regeneration tests.output and coverage/lcov.info -flutter test --machine --coverage > tests.output - -# Run the analysis and publish to the SonarQube server -sonar-scanner -``` - -## Using `dart_test.yaml` - -Dart/Flutter support the use of a `dart_test.yaml` file to configure test behavior. -This file can be used to configure the test output format and location. More information can be found [here](https://github.com/dart-lang/test/blob/master/pkgs/test/doc/configuration.md). +Configure test output in `dart_test.yaml` instead of `--machine` flag: ```yaml file_reporters: json: build/reports/test-results.json ``` -With this, it is no longer use the `--machine` switch or redirect the output. -It is currently not possible to configure the coverage out in this file. -You may follow and upvote these related issue if interested: -* Configuration option - https://github.com/dart-lang/test/issues/1361 -* Dart coverage support - https://github.com/dart-lang/test/issues/1265 +Then point `sonar.flutter.tests.reportPath` to `build/reports/test-results.json`. +--- -## Available options +## Building from Source -All options are configurable in the SonarQube UI, via `sonar-project.properties` or `-D` parameters. +```bash +# Compile +mvn clean compile -| Name | Options | Default | Description | -|----------------------------------------|--------------------------------------------------------------------------|----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `sonar.dart.analyzer.mode` | DETECT|DART|FLUTTER|MANUAL|DARTANALYZER | `DETECT` | By default the plugin attempts to detect a fitting analyzer (`flutter analyze` or `dart analyze`) by parsing the `environment` from `pubspec.yaml`. This can be set to `MANUAL` to provide and existing report file. For compatibility with older Dart versions, this can be set to `DARTANALYZER`. | -| `sonar.dart.analyzer.options.override` | true|false | `true` | By default any local `analysis_options.yaml` will be replaced for the analysis. This can be prevented by setting this to `false`. | -| `sonar.dart.analyzer.report.mode` | DETECT|MACHINE|LEGACY | `DETECT` | The new machine readable output can be automatically detected if Dart SDK is available on the $PATH. | -| `sonar.dart.analyzer.report.path` | A file path | - | This is required if the analyzer mode is set to `MANUAL`. | -| `sonar.flutter.tests.reportPath` | Comma separated list of file paths (wildcard not supported) | `tests.output` | The path to the test report JSON file. | -| `sonar.flutter.coverage.reportPath` | A file path | `coverage/lcov.info` | The path to the test coverage file in LCOV format. | +# Run tests +mvn test +# Build plugin JAR +mvn clean package +# Output: sonar-flutter-plugin/target/sonar-flutter-plugin-*.jar +``` -## Contributing +**Requirements:** Java 17+, Maven 3.8+ -Any help is welcome, and PRs will be greatly appreciated! +--- -Please read [CONTRIBUTING](https://github.com/insideapp-oss/sonar-flutter/blob/develop/CONTRIBUTING.md) for more information. +## Contributing +PRs are welcome! Please read [CONTRIBUTING](CONTRIBUTING.md) for guidelines. ## License -SonarQube Plugin for Flutter / Dart is released under the GNU LGPL v3 license. See the [LICENSE](https://github.com/insideapp-oss/sonar-flutter/blob/develop/LICENSE) file for more information. +GNU LGPL v3 — see [LICENSE](LICENSE) for details. + +--- + +*Forked from [insideapp-oss/sonar-flutter](https://github.com/insideapp-oss/sonar-flutter). Extended with Dart 3.x support, state management rules, and MQR mode.* diff --git a/dart-lang/src/main/antlr/Dart2.g4 b/dart-lang/src/main/antlr/Dart2.g4 index f9432a0..fbbd5cb 100644 --- a/dart-lang/src/main/antlr/Dart2.g4 +++ b/dart-lang/src/main/antlr/Dart2.g4 @@ -137,9 +137,19 @@ defaultNamedParameter | normalFormalParameter (':' expression)? ; -// 10 Classes +// 10 Classes (updated for Dart 3 class modifiers) +classModifier + : 'sealed' + | 'base' + | 'final' + | 'interface' + | 'mixin' + ; classDefinition - : metadata 'abstract'? 'class' identifier typeParameters? + : metadata classModifier* 'abstract'? 'class' identifier typeParameters? + superclass? mixins? interfaces? + '{' (metadata classMemberDefinition)* '}' + | metadata 'abstract'? classModifier* 'class' identifier typeParameters? superclass? mixins? interfaces? '{' (metadata classMemberDefinition)* '}' | metadata 'abstract'? 'class' mixinApplicationClass @@ -297,9 +307,61 @@ primary | identifier | nayaExpression | constObjectExpression + | recordLiteral + | switchExpression | '(' expression ')' ; +// Dart 3 Records +recordLiteral + : '(' recordField ',' recordField (',' recordField)* ','? ')' + ; +recordField + : (identifier ':')? expression + ; +recordType + : '(' recordTypeField ',' recordTypeField (',' recordTypeField)* ','? ')' + ; +recordTypeField + : (identifier ':')? dtype + ; + +// Dart 3 Switch Expressions +switchExpression + : 'switch' '(' expression ')' '{' switchExpressionCase (',' switchExpressionCase)* ','? '}' + ; +switchExpressionCase + : guardedPattern '=>' expression + ; +guardedPattern + : pattern ('when' expression)? + ; +pattern + : constantPattern + | typeTestPattern + | wildcardPattern + | variablePattern + | parenthesizedPattern + ; +constantPattern + : literal + | identifier + | qualified + | constObjectExpression + ; +typeTestPattern + : dtype identifier + ; +wildcardPattern + : '_' + ; +variablePattern + : ('var' | 'final' dtype? ) identifier + ; +parenthesizedPattern + : '(' pattern ')' + ; + // 16.1 Constants literal @@ -702,9 +764,10 @@ localVariableDeclaration localFunctionDeclaration : functionSignature functionBody ; -// 17.5 If +// 17.5 If (updated for Dart 3 if-case) ifStatement : 'if' '(' expression ')' statement ('else' statement)? + | 'if' '(' expression 'case' pattern ('when' expression)? ')' statement ('else' statement)? ; // 17.6 For for @@ -730,12 +793,12 @@ whileStatement doStatement : 'do' statement 'while' '(' expression ')' ';' ; -// 17.9 Switch +// 17.9 Switch (updated for Dart 3 patterns and when guards) switchStatement : 'switch' '(' expression ')' '{' switchCase* defaultCase? '}' ; switchCase - : label* 'case' expression ':' statements + : label* 'case' expression ('when' expression)? ':' statements ; defaultCase : label* 'default' ':' statements @@ -885,7 +948,8 @@ uriTest // 19.1 Static Types dtype - : typeName typeArguments? + : typeName typeArguments? '?'? + | recordType '?'? ; typeName : qualified diff --git a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/DartSensor.java b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/DartSensor.java index 31a9a9f..99693c9 100644 --- a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/DartSensor.java +++ b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/DartSensor.java @@ -31,15 +31,15 @@ import fr.insideapp.sonarqube.dart.lang.antlr.HighlighterVisitor; import fr.insideapp.sonarqube.dart.lang.antlr.ParseTreeItemVisitor; import fr.insideapp.sonarqube.dart.lang.antlr.SourceLinesVisitor; -import org.sonar.api.utils.log.Logger; -import org.sonar.api.utils.log.Loggers; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import javax.annotation.Nonnull; import javax.annotation.ParametersAreNonnullByDefault; public class DartSensor implements Sensor { - private static final Logger LOGGER = Loggers.get(DartSensor.class); + private static final Logger LOGGER = LoggerFactory.getLogger(DartSensor.class); @Override public void describe(@Nonnull SensorDescriptor sensorDescriptor) { diff --git a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/KeywordsProvider.java b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/KeywordsProvider.java index 600a2fb..a58e4a1 100644 --- a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/KeywordsProvider.java +++ b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/KeywordsProvider.java @@ -17,9 +17,9 @@ */ package fr.insideapp.sonarqube.dart.lang; -import org.apache.commons.lang.StringUtils; -import org.sonar.api.utils.log.Logger; -import org.sonar.api.utils.log.Loggers; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.BufferedReader; import java.io.InputStream; @@ -28,7 +28,7 @@ import java.util.List; public class KeywordsProvider { - private static final Logger LOGGER = Loggers.get(KeywordsProvider.class); + private static final Logger LOGGER = LoggerFactory.getLogger(KeywordsProvider.class); private final List keywords = new ArrayList(); public KeywordsProvider() { diff --git a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/PubSpec.java b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/PubSpec.java index f716c04..88fc7cf 100644 --- a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/PubSpec.java +++ b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/PubSpec.java @@ -25,9 +25,18 @@ public class PubSpec { private final String version; - PubSpec(boolean flutter, String version) { + private final boolean usesBloc; + + private final boolean usesRiverpod; + + private final boolean usesProvider; + + PubSpec(boolean flutter, String version, boolean usesBloc, boolean usesRiverpod, boolean usesProvider) { this.flutter = flutter; this.version = version; + this.usesBloc = usesBloc; + this.usesRiverpod = usesRiverpod; + this.usesProvider = usesProvider; } public boolean isFlutter() { @@ -37,4 +46,20 @@ public boolean isFlutter() { public String getProjectVersion() { return version; } + + public boolean usesBloc() { + return usesBloc; + } + + public boolean usesRiverpod() { + return usesRiverpod; + } + + public boolean usesProvider() { + return usesProvider; + } + + public boolean usesStateManagement() { + return usesBloc || usesRiverpod || usesProvider; + } } \ No newline at end of file diff --git a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/PubSpecParser.java b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/PubSpecParser.java index 4740618..10fd03f 100644 --- a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/PubSpecParser.java +++ b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/PubSpecParser.java @@ -18,8 +18,8 @@ package fr.insideapp.sonarqube.dart.lang; import org.sonar.api.batch.sensor.SensorContext; -import org.sonar.api.utils.log.Logger; -import org.sonar.api.utils.log.Loggers; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.yaml.snakeyaml.Yaml; import javax.annotation.Nonnull; @@ -32,11 +32,19 @@ import java.util.Map; public class PubSpecParser { - private static final Logger LOGGER = Loggers.get(PubSpecParser.class); + private static final Logger LOGGER = LoggerFactory.getLogger(PubSpecParser.class); private PubSpecParser() { } + private static boolean containsAnyKey(Map map, String... keys) { + if (map == null) return false; + for (String key : keys) { + if (map.containsKey(key)) return true; + } + return false; + } + @Nonnull @ParametersAreNonnullByDefault public static PubSpec parse(SensorContext sensorContext) throws IOException { @@ -58,9 +66,21 @@ public static PubSpec parse(SensorContext sensorContext) throws IOException { final String projectVersion = ((String) data.get("version")); final Map dependencies = ((Map) data.get("dependencies")); + final Map devDependencies = ((Map) data.get("dev_dependencies")); final boolean flutter = dependencies != null && dependencies.containsKey("flutter"); + + // Detect state management libraries + final boolean usesBloc = containsAnyKey(dependencies, "flutter_bloc", "bloc") || + containsAnyKey(devDependencies, "bloc_lint"); + final boolean usesRiverpod = containsAnyKey(dependencies, "flutter_riverpod", "hooks_riverpod", "riverpod") || + containsAnyKey(devDependencies, "riverpod_lint"); + final boolean usesProvider = !usesRiverpod && containsAnyKey(dependencies, "provider"); + LOGGER.info("Detected {} project with version {}", flutter ? "Flutter" : "Dart", projectVersion); + if (usesBloc) LOGGER.info("Detected BLoC state management"); + if (usesRiverpod) LOGGER.info("Detected Riverpod state management"); + if (usesProvider) LOGGER.info("Detected Provider state management"); - return new PubSpec(flutter, projectVersion); + return new PubSpec(flutter, projectVersion, usesBloc, usesRiverpod, usesProvider); } } diff --git a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/SourceLinesProvider.java b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/SourceLinesProvider.java index 3869cc3..0bc0f18 100644 --- a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/SourceLinesProvider.java +++ b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/SourceLinesProvider.java @@ -18,8 +18,8 @@ package fr.insideapp.sonarqube.dart.lang; import org.apache.commons.io.input.BOMInputStream; -import org.sonar.api.utils.log.Logger; -import org.sonar.api.utils.log.Loggers; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.BufferedReader; import java.io.InputStream; @@ -29,7 +29,7 @@ import java.util.List; public class SourceLinesProvider { - private static final Logger LOGGER = Loggers.get(SourceLinesProvider.class); + private static final Logger LOGGER = LoggerFactory.getLogger(SourceLinesProvider.class); public SourceLine[] getLines(final InputStream inputStream, final Charset charset) { if (inputStream == null) { diff --git a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/CyclomaticComplexityVisitor.java b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/CyclomaticComplexityVisitor.java index 1ad048d..066c0ff 100644 --- a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/CyclomaticComplexityVisitor.java +++ b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/CyclomaticComplexityVisitor.java @@ -24,12 +24,12 @@ import org.sonar.api.batch.fs.InputFile; import org.sonar.api.batch.sensor.SensorContext; import org.sonar.api.measures.CoreMetrics; -import org.sonar.api.utils.log.Logger; -import org.sonar.api.utils.log.Loggers; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class CyclomaticComplexityVisitor implements ParseTreeItemVisitor { - private static final Logger LOGGER = Loggers.get(CyclomaticComplexityVisitor.class); + private static final Logger LOGGER = LoggerFactory.getLogger(CyclomaticComplexityVisitor.class); private int complexity = 0; @@ -44,7 +44,8 @@ public void apply(ParseTree tree) { Dart2Parser.SwitchCaseContext.class.equals(classz) || Dart2Parser.DefaultCaseContext.class.equals(classz) || Dart2Parser.DoStatementContext.class.equals(classz) || - Dart2Parser.FunctionBodyContext.class.equals(classz) + Dart2Parser.FunctionBodyContext.class.equals(classz) || + Dart2Parser.SwitchExpressionCaseContext.class.equals(classz) ) { complexity++; } diff --git a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/HighlighterVisitor.java b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/HighlighterVisitor.java index a9b2fa7..d957115 100644 --- a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/HighlighterVisitor.java +++ b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/HighlighterVisitor.java @@ -27,14 +27,14 @@ import org.sonar.api.batch.sensor.cpd.NewCpdTokens; import org.sonar.api.batch.sensor.highlighting.NewHighlighting; import org.sonar.api.batch.sensor.highlighting.TypeOfText; -import org.sonar.api.utils.log.Logger; -import org.sonar.api.utils.log.Loggers; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import static java.lang.String.format; public class HighlighterVisitor implements ParseTreeItemVisitor { - private static final Logger LOGGER = Loggers.get(HighlighterVisitor.class); + private static final Logger LOGGER = LoggerFactory.getLogger(HighlighterVisitor.class); private final KeywordsProvider keywordsProvider = new KeywordsProvider(); @Override diff --git a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/SourceLinesVisitor.java b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/SourceLinesVisitor.java index 829d815..bb0c93f 100644 --- a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/SourceLinesVisitor.java +++ b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/SourceLinesVisitor.java @@ -24,12 +24,12 @@ import org.sonar.api.batch.fs.InputFile; import org.sonar.api.batch.sensor.SensorContext; import org.sonar.api.measures.CoreMetrics; -import org.sonar.api.utils.log.Logger; -import org.sonar.api.utils.log.Loggers; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class SourceLinesVisitor implements ParseTreeItemVisitor { - private static final Logger LOGGER = Loggers.get(SourceLinesVisitor.class); + private static final Logger LOGGER = LoggerFactory.getLogger(SourceLinesVisitor.class); private static int[] getLineAndColumn(final SourceLine[] lines, final int global) { diff --git a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/generated/Dart2BaseListener.java b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/generated/Dart2BaseListener.java index 81b8eac..b5ddd7d 100644 --- a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/generated/Dart2BaseListener.java +++ b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/generated/Dart2BaseListener.java @@ -1,21 +1,5 @@ -/* - * SonarQube Flutter Plugin - Enables analysis of Dart and Flutter projects into SonarQube. - * Copyright © 2020 inside|app (contact@insideapp.fr) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ -package fr.insideapp.sonarqube.dart.lang.antlr.generated;// Generated from Dart2.g4 by ANTLR 4.8 +// Generated from dart-lang/src/main/antlr/Dart2.g4 by ANTLR 4.8 +package fr.insideapp.sonarqube.dart.lang.antlr.generated; import org.antlr.v4.runtime.ParserRuleContext; import org.antlr.v4.runtime.tree.ErrorNode; @@ -315,6 +299,18 @@ public class Dart2BaseListener implements Dart2Listener { *

The default implementation does nothing.

*/ @Override public void exitDefaultNamedParameter(Dart2Parser.DefaultNamedParameterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterClassModifier(Dart2Parser.ClassModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitClassModifier(Dart2Parser.ClassModifierContext ctx) { } /** * {@inheritDoc} * @@ -711,6 +707,162 @@ public class Dart2BaseListener implements Dart2Listener { *

The default implementation does nothing.

*/ @Override public void exitPrimary(Dart2Parser.PrimaryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRecordLiteral(Dart2Parser.RecordLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRecordLiteral(Dart2Parser.RecordLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRecordField(Dart2Parser.RecordFieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRecordField(Dart2Parser.RecordFieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRecordType(Dart2Parser.RecordTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRecordType(Dart2Parser.RecordTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRecordTypeField(Dart2Parser.RecordTypeFieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRecordTypeField(Dart2Parser.RecordTypeFieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSwitchExpression(Dart2Parser.SwitchExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSwitchExpression(Dart2Parser.SwitchExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSwitchExpressionCase(Dart2Parser.SwitchExpressionCaseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSwitchExpressionCase(Dart2Parser.SwitchExpressionCaseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterGuardedPattern(Dart2Parser.GuardedPatternContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitGuardedPattern(Dart2Parser.GuardedPatternContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPattern(Dart2Parser.PatternContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPattern(Dart2Parser.PatternContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterConstantPattern(Dart2Parser.ConstantPatternContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitConstantPattern(Dart2Parser.ConstantPatternContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTypeTestPattern(Dart2Parser.TypeTestPatternContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTypeTestPattern(Dart2Parser.TypeTestPatternContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterWildcardPattern(Dart2Parser.WildcardPatternContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitWildcardPattern(Dart2Parser.WildcardPatternContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterVariablePattern(Dart2Parser.VariablePatternContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitVariablePattern(Dart2Parser.VariablePatternContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterParenthesizedPattern(Dart2Parser.ParenthesizedPatternContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitParenthesizedPattern(Dart2Parser.ParenthesizedPatternContext ctx) { } /** * {@inheritDoc} * diff --git a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/generated/Dart2BaseVisitor.java b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/generated/Dart2BaseVisitor.java index adc20b8..0672208 100644 --- a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/generated/Dart2BaseVisitor.java +++ b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/generated/Dart2BaseVisitor.java @@ -1,21 +1,5 @@ -/* - * SonarQube Flutter Plugin - Enables analysis of Dart and Flutter projects into SonarQube. - * Copyright © 2020 inside|app (contact@insideapp.fr) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ -package fr.insideapp.sonarqube.dart.lang.antlr.generated;// Generated from Dart2.g4 by ANTLR 4.8 +// Generated from dart-lang/src/main/antlr/Dart2.g4 by ANTLR 4.8 +package fr.insideapp.sonarqube.dart.lang.antlr.generated; import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; /** @@ -195,6 +179,13 @@ public class Dart2BaseVisitor extends AbstractParseTreeVisitor implements * {@link #visitChildren} on {@code ctx}.

*/ @Override public T visitDefaultNamedParameter(Dart2Parser.DefaultNamedParameterContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitClassModifier(Dart2Parser.ClassModifierContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * @@ -426,6 +417,97 @@ public class Dart2BaseVisitor extends AbstractParseTreeVisitor implements * {@link #visitChildren} on {@code ctx}.

*/ @Override public T visitPrimary(Dart2Parser.PrimaryContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRecordLiteral(Dart2Parser.RecordLiteralContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRecordField(Dart2Parser.RecordFieldContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRecordType(Dart2Parser.RecordTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRecordTypeField(Dart2Parser.RecordTypeFieldContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSwitchExpression(Dart2Parser.SwitchExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSwitchExpressionCase(Dart2Parser.SwitchExpressionCaseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitGuardedPattern(Dart2Parser.GuardedPatternContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPattern(Dart2Parser.PatternContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitConstantPattern(Dart2Parser.ConstantPatternContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTypeTestPattern(Dart2Parser.TypeTestPatternContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitWildcardPattern(Dart2Parser.WildcardPatternContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitVariablePattern(Dart2Parser.VariablePatternContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitParenthesizedPattern(Dart2Parser.ParenthesizedPatternContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * diff --git a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/generated/Dart2Lexer.java b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/generated/Dart2Lexer.java index 4fa3f34..e39d3c7 100644 --- a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/generated/Dart2Lexer.java +++ b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/generated/Dart2Lexer.java @@ -1,28 +1,13 @@ -/* - * SonarQube Flutter Plugin - Enables analysis of Dart and Flutter projects into SonarQube. - * Copyright © 2020 inside|app (contact@insideapp.fr) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ -package fr.insideapp.sonarqube.dart.lang.antlr.generated;// Generated from Dart2.g4 by ANTLR 4.8 - +// Generated from dart-lang/src/main/antlr/Dart2.g4 by ANTLR 4.8 +package fr.insideapp.sonarqube.dart.lang.antlr.generated; +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; import org.antlr.v4.runtime.*; -import org.antlr.v4.runtime.atn.ATN; -import org.antlr.v4.runtime.atn.ATNDeserializer; -import org.antlr.v4.runtime.atn.LexerATNSimulator; -import org.antlr.v4.runtime.atn.PredictionContextCache; +import org.antlr.v4.runtime.atn.*; import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.*; @SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"}) public class Dart2Lexer extends Lexer { @@ -48,9 +33,10 @@ public class Dart2Lexer extends Lexer { T__94=95, T__95=96, T__96=97, T__97=98, T__98=99, T__99=100, T__100=101, T__101=102, T__102=103, T__103=104, T__104=105, T__105=106, T__106=107, T__107=108, T__108=109, T__109=110, T__110=111, T__111=112, T__112=113, - T__113=114, T__114=115, T__115=116, T__116=117, WHITESPACE=118, NUMBER=119, - HEX_NUMBER=120, SingleLineString=121, MultiLineString=122, NEWLINE=123, - IDENTIFIER=124, SINGLE_LINE_COMMENT=125, MULTI_LINE_COMMENT=126; + T__113=114, T__114=115, T__115=116, T__116=117, T__117=118, T__118=119, + T__119=120, T__120=121, T__121=122, T__122=123, WHITESPACE=124, NUMBER=125, + HEX_NUMBER=126, SingleLineString=127, MultiLineString=128, NEWLINE=129, + IDENTIFIER=130, SINGLE_LINE_COMMENT=131, MULTI_LINE_COMMENT=132; public static String[] channelNames = { "DEFAULT_TOKEN_CHANNEL", "HIDDEN" }; @@ -75,12 +61,13 @@ private static String[] makeRuleNames() { "T__89", "T__90", "T__91", "T__92", "T__93", "T__94", "T__95", "T__96", "T__97", "T__98", "T__99", "T__100", "T__101", "T__102", "T__103", "T__104", "T__105", "T__106", "T__107", "T__108", "T__109", "T__110", "T__111", - "T__112", "T__113", "T__114", "T__115", "T__116", "WHITESPACE", "NUMBER", - "EXPONENT", "HEX_NUMBER", "HEX_DIGIT", "SingleLineString", "StringContentDQ", - "StringContentSQ", "MultiLineString", "StringContentTDQ", "StringContentTSQ", - "NEWLINE", "IDENTIFIER_NO_DOLLAR", "IDENTIFIER", "IDENTIFIER_START", - "IDENTIFIER_START_NO_DOLLAR", "IDENTIFIER_PART_NO_DOLLAR", "IDENTIFIER_PART", - "LETTER", "DIGIT", "SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT" + "T__112", "T__113", "T__114", "T__115", "T__116", "T__117", "T__118", + "T__119", "T__120", "T__121", "T__122", "WHITESPACE", "NUMBER", "EXPONENT", + "HEX_NUMBER", "HEX_DIGIT", "SingleLineString", "StringContentDQ", "StringContentSQ", + "MultiLineString", "StringContentTDQ", "StringContentTSQ", "NEWLINE", + "IDENTIFIER_NO_DOLLAR", "IDENTIFIER", "IDENTIFIER_START", "IDENTIFIER_START_NO_DOLLAR", + "IDENTIFIER_PART_NO_DOLLAR", "IDENTIFIER_PART", "LETTER", "DIGIT", "SINGLE_LINE_COMMENT", + "MULTI_LINE_COMMENT" }; } public static final String[] ruleNames = makeRuleNames(); @@ -89,19 +76,20 @@ private static String[] makeLiteralNames() { return new String[] { null, "','", "'final'", "'const'", "'var'", "'='", "'void'", "'async'", "'=>'", "';'", "'async*'", "'sync*'", "'{'", "'}'", "'('", "')'", "'['", - "']'", "'covariant'", "'this'", "'.'", "':'", "'abstract'", "'class'", - "'with'", "'static'", "'external'", "'operator'", "'~'", "'[]'", "'[]='", - "'=='", "'get'", "'set'", "'super'", "'factory'", "'extends'", "'implements'", - "'enum'", "'<'", "'>'", "'@'", "'null'", "'true'", "'false'", "'$'", - "'${'", "'#'", "'throw'", "'new'", "'..'", "'*='", "'/='", "'~/='", "'%='", - "'+='", "'<<='", "'>>='", "'>>>='", "'&='", "'^='", "'|='", "'??='", - "'?'", "'??'", "'||'", "'&&'", "'!='", "'>='", "'<='", "'|'", "'^'", - "'&'", "'<<'", "'>>'", "'>>>'", "'+'", "'-'", "'*'", "'/'", "'%'", "'~/'", - "'!'", "'await'", "'++'", "'--'", "'?.'", "'is'", "'as'", "'if'", "'else'", - "'for'", "'in'", "'while'", "'do'", "'switch'", "'case'", "'default'", - "'rethrow'", "'try'", "'on'", "'catch'", "'finally'", "'return'", "'break'", - "'continue'", "'yield'", "'yield*'", "'assert'", "'#!'", "'library'", - "'import'", "'show'", "'hide'", "'export'", "'part'", "'of'", "'typedef'" + "']'", "'covariant'", "'this'", "'.'", "':'", "'sealed'", "'base'", "'interface'", + "'mixin'", "'abstract'", "'class'", "'with'", "'static'", "'external'", + "'operator'", "'~'", "'[]'", "'[]='", "'=='", "'get'", "'set'", "'super'", + "'factory'", "'extends'", "'implements'", "'enum'", "'<'", "'>'", "'@'", + "'switch'", "'when'", "'_'", "'null'", "'true'", "'false'", "'$'", "'${'", + "'#'", "'throw'", "'new'", "'..'", "'*='", "'/='", "'~/='", "'%='", "'+='", + "'<<='", "'>>='", "'>>>='", "'&='", "'^='", "'|='", "'??='", "'?'", "'??'", + "'||'", "'&&'", "'!='", "'>='", "'<='", "'|'", "'^'", "'&'", "'<<'", + "'>>'", "'>>>'", "'+'", "'-'", "'*'", "'/'", "'%'", "'~/'", "'!'", "'await'", + "'++'", "'--'", "'?.'", "'is'", "'as'", "'if'", "'else'", "'case'", "'for'", + "'in'", "'while'", "'do'", "'default'", "'rethrow'", "'try'", "'on'", + "'catch'", "'finally'", "'return'", "'break'", "'continue'", "'yield'", + "'yield*'", "'assert'", "'#!'", "'library'", "'import'", "'show'", "'hide'", + "'export'", "'part'", "'of'", "'typedef'" }; } private static final String[] _LITERAL_NAMES = makeLiteralNames(); @@ -116,9 +104,9 @@ private static String[] makeSymbolicNames() { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, "WHITESPACE", - "NUMBER", "HEX_NUMBER", "SingleLineString", "MultiLineString", "NEWLINE", - "IDENTIFIER", "SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT" + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, "WHITESPACE", "NUMBER", "HEX_NUMBER", "SingleLineString", + "MultiLineString", "NEWLINE", "IDENTIFIER", "SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT" }; } private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); @@ -180,7 +168,7 @@ public Dart2Lexer(CharStream input) { public ATN getATN() { return _ATN; } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\u0080\u041a\b\1\4"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\u0086\u0449\b\1\4"+ "\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n"+ "\4\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22"+ "\t\22\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31"+ @@ -196,359 +184,384 @@ public Dart2Lexer(CharStream input) { "\4w\tw\4x\tx\4y\ty\4z\tz\4{\t{\4|\t|\4}\t}\4~\t~\4\177\t\177\4\u0080\t"+ "\u0080\4\u0081\t\u0081\4\u0082\t\u0082\4\u0083\t\u0083\4\u0084\t\u0084"+ "\4\u0085\t\u0085\4\u0086\t\u0086\4\u0087\t\u0087\4\u0088\t\u0088\4\u0089"+ - "\t\u0089\4\u008a\t\u008a\4\u008b\t\u008b\4\u008c\t\u008c\3\2\3\2\3\3\3"+ - "\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\6\3\6\3\7"+ - "\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\t\3\n\3\n\3\13\3\13"+ - "\3\13\3\13\3\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\16\3\16\3"+ - "\17\3\17\3\20\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\23\3"+ - "\23\3\23\3\23\3\23\3\24\3\24\3\24\3\24\3\24\3\25\3\25\3\26\3\26\3\27\3"+ - "\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3\30\3"+ - "\31\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\33\3\33\3"+ - "\33\3\33\3\33\3\33\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3"+ - "\34\3\34\3\35\3\35\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3 \3 \3 \3!\3!\3"+ - "!\3!\3\"\3\"\3\"\3\"\3#\3#\3#\3#\3#\3#\3$\3$\3$\3$\3$\3$\3$\3$\3%\3%\3"+ - "%\3%\3%\3%\3%\3%\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3\'\3\'\3\'\3\'\3\'"+ - "\3(\3(\3)\3)\3*\3*\3+\3+\3+\3+\3+\3,\3,\3,\3,\3,\3-\3-\3-\3-\3-\3-\3."+ - "\3.\3/\3/\3/\3\60\3\60\3\61\3\61\3\61\3\61\3\61\3\61\3\62\3\62\3\62\3"+ - "\62\3\63\3\63\3\63\3\64\3\64\3\64\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3"+ - "\67\3\67\3\67\38\38\38\39\39\39\39\3:\3:\3:\3:\3;\3;\3;\3;\3;\3<\3<\3"+ - "<\3=\3=\3=\3>\3>\3>\3?\3?\3?\3?\3@\3@\3A\3A\3A\3B\3B\3B\3C\3C\3C\3D\3"+ - "D\3D\3E\3E\3E\3F\3F\3F\3G\3G\3H\3H\3I\3I\3J\3J\3J\3K\3K\3K\3L\3L\3L\3"+ - "L\3M\3M\3N\3N\3O\3O\3P\3P\3Q\3Q\3R\3R\3R\3S\3S\3T\3T\3T\3T\3T\3T\3U\3"+ - "U\3U\3V\3V\3V\3W\3W\3W\3X\3X\3X\3Y\3Y\3Y\3Z\3Z\3Z\3[\3[\3[\3[\3[\3\\\3"+ - "\\\3\\\3\\\3]\3]\3]\3^\3^\3^\3^\3^\3^\3_\3_\3_\3`\3`\3`\3`\3`\3`\3`\3"+ - "a\3a\3a\3a\3a\3b\3b\3b\3b\3b\3b\3b\3b\3c\3c\3c\3c\3c\3c\3c\3c\3d\3d\3"+ - "d\3d\3e\3e\3e\3f\3f\3f\3f\3f\3f\3g\3g\3g\3g\3g\3g\3g\3g\3h\3h\3h\3h\3"+ - "h\3h\3h\3i\3i\3i\3i\3i\3i\3j\3j\3j\3j\3j\3j\3j\3j\3j\3k\3k\3k\3k\3k\3"+ - "k\3l\3l\3l\3l\3l\3l\3l\3m\3m\3m\3m\3m\3m\3m\3n\3n\3n\3o\3o\3o\3o\3o\3"+ - "o\3o\3o\3p\3p\3p\3p\3p\3p\3p\3q\3q\3q\3q\3q\3r\3r\3r\3r\3r\3s\3s\3s\3"+ - "s\3s\3s\3s\3t\3t\3t\3t\3t\3u\3u\3u\3v\3v\3v\3v\3v\3v\3v\3v\3w\6w\u0314"+ - "\nw\rw\16w\u0315\3w\3w\3x\6x\u031b\nx\rx\16x\u031c\3x\3x\6x\u0321\nx\r"+ - "x\16x\u0322\5x\u0325\nx\3x\5x\u0328\nx\3x\3x\6x\u032c\nx\rx\16x\u032d"+ - "\3x\5x\u0331\nx\5x\u0333\nx\3y\3y\5y\u0337\ny\3y\6y\u033a\ny\ry\16y\u033b"+ - "\3z\3z\3z\3z\6z\u0342\nz\rz\16z\u0343\3z\3z\3z\3z\6z\u034a\nz\rz\16z\u034b"+ - "\5z\u034e\nz\3{\3{\5{\u0352\n{\3|\3|\7|\u0356\n|\f|\16|\u0359\13|\3|\3"+ - "|\3|\7|\u035e\n|\f|\16|\u0361\13|\3|\3|\3|\3|\3|\7|\u0368\n|\f|\16|\u036b"+ - "\13|\3|\3|\3|\3|\3|\7|\u0372\n|\f|\16|\u0375\13|\3|\5|\u0378\n|\3}\3}"+ - "\3}\5}\u037d\n}\3~\3~\3~\5~\u0382\n~\3\177\3\177\3\177\3\177\3\177\7\177"+ - "\u0389\n\177\f\177\16\177\u038c\13\177\3\177\3\177\3\177\3\177\3\177\3"+ - "\177\3\177\3\177\7\177\u0396\n\177\f\177\16\177\u0399\13\177\3\177\3\177"+ - "\3\177\3\177\3\177\3\177\3\177\3\177\3\177\3\177\3\177\3\177\3\177\3\177"+ - "\3\177\7\177\u03aa\n\177\f\177\16\177\u03ad\13\177\3\177\3\177\3\177\3"+ - "\177\3\177\3\177\3\177\3\177\3\177\3\177\3\177\3\177\3\177\3\177\3\177"+ - "\7\177\u03be\n\177\f\177\16\177\u03c1\13\177\3\177\3\177\3\177\5\177\u03c6"+ - "\n\177\3\u0080\3\u0080\3\u0080\3\u0080\3\u0080\3\u0080\3\u0080\5\u0080"+ - "\u03cf\n\u0080\3\u0081\3\u0081\3\u0081\3\u0081\3\u0081\3\u0081\3\u0081"+ - "\5\u0081\u03d8\n\u0081\3\u0082\3\u0082\3\u0082\5\u0082\u03dd\n\u0082\3"+ - "\u0083\3\u0083\7\u0083\u03e1\n\u0083\f\u0083\16\u0083\u03e4\13\u0083\3"+ - "\u0084\3\u0084\7\u0084\u03e8\n\u0084\f\u0084\16\u0084\u03eb\13\u0084\3"+ - "\u0085\3\u0085\5\u0085\u03ef\n\u0085\3\u0086\3\u0086\5\u0086\u03f3\n\u0086"+ - "\3\u0087\3\u0087\5\u0087\u03f7\n\u0087\3\u0088\3\u0088\5\u0088\u03fb\n"+ - "\u0088\3\u0089\5\u0089\u03fe\n\u0089\3\u008a\3\u008a\3\u008b\3\u008b\3"+ - "\u008b\3\u008b\7\u008b\u0406\n\u008b\f\u008b\16\u008b\u0409\13\u008b\3"+ - "\u008b\3\u008b\3\u008c\3\u008c\3\u008c\3\u008c\7\u008c\u0411\n\u008c\f"+ - "\u008c\16\u008c\u0414\13\u008c\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c"+ - "\3\u0412\2\u008d\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31"+ - "\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65"+ - "\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64"+ - "g\65i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089"+ - "F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009bO\u009d"+ - "P\u009fQ\u00a1R\u00a3S\u00a5T\u00a7U\u00a9V\u00abW\u00adX\u00afY\u00b1"+ - "Z\u00b3[\u00b5\\\u00b7]\u00b9^\u00bb_\u00bd`\u00bfa\u00c1b\u00c3c\u00c5"+ - "d\u00c7e\u00c9f\u00cbg\u00cdh\u00cfi\u00d1j\u00d3k\u00d5l\u00d7m\u00d9"+ - "n\u00dbo\u00ddp\u00dfq\u00e1r\u00e3s\u00e5t\u00e7u\u00e9v\u00ebw\u00ed"+ - "x\u00efy\u00f1\2\u00f3z\u00f5\2\u00f7{\u00f9\2\u00fb\2\u00fd|\u00ff\2"+ - "\u0101\2\u0103}\u0105\2\u0107~\u0109\2\u010b\2\u010d\2\u010f\2\u0111\2"+ - "\u0113\2\u0115\177\u0117\u0080\3\2\21\5\2\13\f\16\17\"\"\4\2GGgg\4\2-"+ - "-//\4\2CHch\5\2\f\f\17\17))\5\2\f\f\17\17$$\6\2\f\f\17\17$$^^\4\2\f\f"+ - "\17\17\6\2\f\f\17\17))^^\3\2$$\3\2))\4\2$$^^\4\2))^^\4\2C\\c|\3\2\62;"+ - "\2\u043b\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2"+ - "\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27"+ - "\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2"+ - "\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2"+ - "\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2"+ - "\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2"+ - "\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S"+ - "\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2"+ - "\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2"+ - "\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2y"+ - "\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083\3"+ - "\2\2\2\2\u0085\3\2\2\2\2\u0087\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2"+ - "\2\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0091\3\2\2\2\2\u0093\3\2\2\2\2\u0095"+ - "\3\2\2\2\2\u0097\3\2\2\2\2\u0099\3\2\2\2\2\u009b\3\2\2\2\2\u009d\3\2\2"+ - "\2\2\u009f\3\2\2\2\2\u00a1\3\2\2\2\2\u00a3\3\2\2\2\2\u00a5\3\2\2\2\2\u00a7"+ - "\3\2\2\2\2\u00a9\3\2\2\2\2\u00ab\3\2\2\2\2\u00ad\3\2\2\2\2\u00af\3\2\2"+ - "\2\2\u00b1\3\2\2\2\2\u00b3\3\2\2\2\2\u00b5\3\2\2\2\2\u00b7\3\2\2\2\2\u00b9"+ - "\3\2\2\2\2\u00bb\3\2\2\2\2\u00bd\3\2\2\2\2\u00bf\3\2\2\2\2\u00c1\3\2\2"+ - "\2\2\u00c3\3\2\2\2\2\u00c5\3\2\2\2\2\u00c7\3\2\2\2\2\u00c9\3\2\2\2\2\u00cb"+ - "\3\2\2\2\2\u00cd\3\2\2\2\2\u00cf\3\2\2\2\2\u00d1\3\2\2\2\2\u00d3\3\2\2"+ - "\2\2\u00d5\3\2\2\2\2\u00d7\3\2\2\2\2\u00d9\3\2\2\2\2\u00db\3\2\2\2\2\u00dd"+ - "\3\2\2\2\2\u00df\3\2\2\2\2\u00e1\3\2\2\2\2\u00e3\3\2\2\2\2\u00e5\3\2\2"+ - "\2\2\u00e7\3\2\2\2\2\u00e9\3\2\2\2\2\u00eb\3\2\2\2\2\u00ed\3\2\2\2\2\u00ef"+ - "\3\2\2\2\2\u00f3\3\2\2\2\2\u00f7\3\2\2\2\2\u00fd\3\2\2\2\2\u0103\3\2\2"+ - "\2\2\u0107\3\2\2\2\2\u0115\3\2\2\2\2\u0117\3\2\2\2\3\u0119\3\2\2\2\5\u011b"+ - "\3\2\2\2\7\u0121\3\2\2\2\t\u0127\3\2\2\2\13\u012b\3\2\2\2\r\u012d\3\2"+ - "\2\2\17\u0132\3\2\2\2\21\u0138\3\2\2\2\23\u013b\3\2\2\2\25\u013d\3\2\2"+ - "\2\27\u0144\3\2\2\2\31\u014a\3\2\2\2\33\u014c\3\2\2\2\35\u014e\3\2\2\2"+ - "\37\u0150\3\2\2\2!\u0152\3\2\2\2#\u0154\3\2\2\2%\u0156\3\2\2\2\'\u0160"+ - "\3\2\2\2)\u0165\3\2\2\2+\u0167\3\2\2\2-\u0169\3\2\2\2/\u0172\3\2\2\2\61"+ - "\u0178\3\2\2\2\63\u017d\3\2\2\2\65\u0184\3\2\2\2\67\u018d\3\2\2\29\u0196"+ - "\3\2\2\2;\u0198\3\2\2\2=\u019b\3\2\2\2?\u019f\3\2\2\2A\u01a2\3\2\2\2C"+ - "\u01a6\3\2\2\2E\u01aa\3\2\2\2G\u01b0\3\2\2\2I\u01b8\3\2\2\2K\u01c0\3\2"+ - "\2\2M\u01cb\3\2\2\2O\u01d0\3\2\2\2Q\u01d2\3\2\2\2S\u01d4\3\2\2\2U\u01d6"+ - "\3\2\2\2W\u01db\3\2\2\2Y\u01e0\3\2\2\2[\u01e6\3\2\2\2]\u01e8\3\2\2\2_"+ - "\u01eb\3\2\2\2a\u01ed\3\2\2\2c\u01f3\3\2\2\2e\u01f7\3\2\2\2g\u01fa\3\2"+ - "\2\2i\u01fd\3\2\2\2k\u0200\3\2\2\2m\u0204\3\2\2\2o\u0207\3\2\2\2q\u020a"+ - "\3\2\2\2s\u020e\3\2\2\2u\u0212\3\2\2\2w\u0217\3\2\2\2y\u021a\3\2\2\2{"+ - "\u021d\3\2\2\2}\u0220\3\2\2\2\177\u0224\3\2\2\2\u0081\u0226\3\2\2\2\u0083"+ - "\u0229\3\2\2\2\u0085\u022c\3\2\2\2\u0087\u022f\3\2\2\2\u0089\u0232\3\2"+ - "\2\2\u008b\u0235\3\2\2\2\u008d\u0238\3\2\2\2\u008f\u023a\3\2\2\2\u0091"+ - "\u023c\3\2\2\2\u0093\u023e\3\2\2\2\u0095\u0241\3\2\2\2\u0097\u0244\3\2"+ - "\2\2\u0099\u0248\3\2\2\2\u009b\u024a\3\2\2\2\u009d\u024c\3\2\2\2\u009f"+ - "\u024e\3\2\2\2\u00a1\u0250\3\2\2\2\u00a3\u0252\3\2\2\2\u00a5\u0255\3\2"+ - "\2\2\u00a7\u0257\3\2\2\2\u00a9\u025d\3\2\2\2\u00ab\u0260\3\2\2\2\u00ad"+ - "\u0263\3\2\2\2\u00af\u0266\3\2\2\2\u00b1\u0269\3\2\2\2\u00b3\u026c\3\2"+ - "\2\2\u00b5\u026f\3\2\2\2\u00b7\u0274\3\2\2\2\u00b9\u0278\3\2\2\2\u00bb"+ - "\u027b\3\2\2\2\u00bd\u0281\3\2\2\2\u00bf\u0284\3\2\2\2\u00c1\u028b\3\2"+ - "\2\2\u00c3\u0290\3\2\2\2\u00c5\u0298\3\2\2\2\u00c7\u02a0\3\2\2\2\u00c9"+ - "\u02a4\3\2\2\2\u00cb\u02a7\3\2\2\2\u00cd\u02ad\3\2\2\2\u00cf\u02b5\3\2"+ - "\2\2\u00d1\u02bc\3\2\2\2\u00d3\u02c2\3\2\2\2\u00d5\u02cb\3\2\2\2\u00d7"+ - "\u02d1\3\2\2\2\u00d9\u02d8\3\2\2\2\u00db\u02df\3\2\2\2\u00dd\u02e2\3\2"+ - "\2\2\u00df\u02ea\3\2\2\2\u00e1\u02f1\3\2\2\2\u00e3\u02f6\3\2\2\2\u00e5"+ - "\u02fb\3\2\2\2\u00e7\u0302\3\2\2\2\u00e9\u0307\3\2\2\2\u00eb\u030a\3\2"+ - "\2\2\u00ed\u0313\3\2\2\2\u00ef\u0332\3\2\2\2\u00f1\u0334\3\2\2\2\u00f3"+ - "\u034d\3\2\2\2\u00f5\u0351\3\2\2\2\u00f7\u0377\3\2\2\2\u00f9\u037c\3\2"+ - "\2\2\u00fb\u0381\3\2\2\2\u00fd\u03c5\3\2\2\2\u00ff\u03ce\3\2\2\2\u0101"+ - "\u03d7\3\2\2\2\u0103\u03dc\3\2\2\2\u0105\u03de\3\2\2\2\u0107\u03e5\3\2"+ - "\2\2\u0109\u03ee\3\2\2\2\u010b\u03f2\3\2\2\2\u010d\u03f6\3\2\2\2\u010f"+ - "\u03fa\3\2\2\2\u0111\u03fd\3\2\2\2\u0113\u03ff\3\2\2\2\u0115\u0401\3\2"+ - "\2\2\u0117\u040c\3\2\2\2\u0119\u011a\7.\2\2\u011a\4\3\2\2\2\u011b\u011c"+ - "\7h\2\2\u011c\u011d\7k\2\2\u011d\u011e\7p\2\2\u011e\u011f\7c\2\2\u011f"+ - "\u0120\7n\2\2\u0120\6\3\2\2\2\u0121\u0122\7e\2\2\u0122\u0123\7q\2\2\u0123"+ - "\u0124\7p\2\2\u0124\u0125\7u\2\2\u0125\u0126\7v\2\2\u0126\b\3\2\2\2\u0127"+ - "\u0128\7x\2\2\u0128\u0129\7c\2\2\u0129\u012a\7t\2\2\u012a\n\3\2\2\2\u012b"+ - "\u012c\7?\2\2\u012c\f\3\2\2\2\u012d\u012e\7x\2\2\u012e\u012f\7q\2\2\u012f"+ - "\u0130\7k\2\2\u0130\u0131\7f\2\2\u0131\16\3\2\2\2\u0132\u0133\7c\2\2\u0133"+ - "\u0134\7u\2\2\u0134\u0135\7{\2\2\u0135\u0136\7p\2\2\u0136\u0137\7e\2\2"+ - "\u0137\20\3\2\2\2\u0138\u0139\7?\2\2\u0139\u013a\7@\2\2\u013a\22\3\2\2"+ - "\2\u013b\u013c\7=\2\2\u013c\24\3\2\2\2\u013d\u013e\7c\2\2\u013e\u013f"+ - "\7u\2\2\u013f\u0140\7{\2\2\u0140\u0141\7p\2\2\u0141\u0142\7e\2\2\u0142"+ - "\u0143\7,\2\2\u0143\26\3\2\2\2\u0144\u0145\7u\2\2\u0145\u0146\7{\2\2\u0146"+ - "\u0147\7p\2\2\u0147\u0148\7e\2\2\u0148\u0149\7,\2\2\u0149\30\3\2\2\2\u014a"+ - "\u014b\7}\2\2\u014b\32\3\2\2\2\u014c\u014d\7\177\2\2\u014d\34\3\2\2\2"+ - "\u014e\u014f\7*\2\2\u014f\36\3\2\2\2\u0150\u0151\7+\2\2\u0151 \3\2\2\2"+ - "\u0152\u0153\7]\2\2\u0153\"\3\2\2\2\u0154\u0155\7_\2\2\u0155$\3\2\2\2"+ - "\u0156\u0157\7e\2\2\u0157\u0158\7q\2\2\u0158\u0159\7x\2\2\u0159\u015a"+ - "\7c\2\2\u015a\u015b\7t\2\2\u015b\u015c\7k\2\2\u015c\u015d\7c\2\2\u015d"+ - "\u015e\7p\2\2\u015e\u015f\7v\2\2\u015f&\3\2\2\2\u0160\u0161\7v\2\2\u0161"+ - "\u0162\7j\2\2\u0162\u0163\7k\2\2\u0163\u0164\7u\2\2\u0164(\3\2\2\2\u0165"+ - "\u0166\7\60\2\2\u0166*\3\2\2\2\u0167\u0168\7<\2\2\u0168,\3\2\2\2\u0169"+ - "\u016a\7c\2\2\u016a\u016b\7d\2\2\u016b\u016c\7u\2\2\u016c\u016d\7v\2\2"+ - "\u016d\u016e\7t\2\2\u016e\u016f\7c\2\2\u016f\u0170\7e\2\2\u0170\u0171"+ - "\7v\2\2\u0171.\3\2\2\2\u0172\u0173\7e\2\2\u0173\u0174\7n\2\2\u0174\u0175"+ - "\7c\2\2\u0175\u0176\7u\2\2\u0176\u0177\7u\2\2\u0177\60\3\2\2\2\u0178\u0179"+ - "\7y\2\2\u0179\u017a\7k\2\2\u017a\u017b\7v\2\2\u017b\u017c\7j\2\2\u017c"+ - "\62\3\2\2\2\u017d\u017e\7u\2\2\u017e\u017f\7v\2\2\u017f\u0180\7c\2\2\u0180"+ - "\u0181\7v\2\2\u0181\u0182\7k\2\2\u0182\u0183\7e\2\2\u0183\64\3\2\2\2\u0184"+ - "\u0185\7g\2\2\u0185\u0186\7z\2\2\u0186\u0187\7v\2\2\u0187\u0188\7g\2\2"+ - "\u0188\u0189\7t\2\2\u0189\u018a\7p\2\2\u018a\u018b\7c\2\2\u018b\u018c"+ - "\7n\2\2\u018c\66\3\2\2\2\u018d\u018e\7q\2\2\u018e\u018f\7r\2\2\u018f\u0190"+ - "\7g\2\2\u0190\u0191\7t\2\2\u0191\u0192\7c\2\2\u0192\u0193\7v\2\2\u0193"+ - "\u0194\7q\2\2\u0194\u0195\7t\2\2\u01958\3\2\2\2\u0196\u0197\7\u0080\2"+ - "\2\u0197:\3\2\2\2\u0198\u0199\7]\2\2\u0199\u019a\7_\2\2\u019a<\3\2\2\2"+ - "\u019b\u019c\7]\2\2\u019c\u019d\7_\2\2\u019d\u019e\7?\2\2\u019e>\3\2\2"+ - "\2\u019f\u01a0\7?\2\2\u01a0\u01a1\7?\2\2\u01a1@\3\2\2\2\u01a2\u01a3\7"+ - "i\2\2\u01a3\u01a4\7g\2\2\u01a4\u01a5\7v\2\2\u01a5B\3\2\2\2\u01a6\u01a7"+ - "\7u\2\2\u01a7\u01a8\7g\2\2\u01a8\u01a9\7v\2\2\u01a9D\3\2\2\2\u01aa\u01ab"+ - "\7u\2\2\u01ab\u01ac\7w\2\2\u01ac\u01ad\7r\2\2\u01ad\u01ae\7g\2\2\u01ae"+ - "\u01af\7t\2\2\u01afF\3\2\2\2\u01b0\u01b1\7h\2\2\u01b1\u01b2\7c\2\2\u01b2"+ - "\u01b3\7e\2\2\u01b3\u01b4\7v\2\2\u01b4\u01b5\7q\2\2\u01b5\u01b6\7t\2\2"+ - "\u01b6\u01b7\7{\2\2\u01b7H\3\2\2\2\u01b8\u01b9\7g\2\2\u01b9\u01ba\7z\2"+ - "\2\u01ba\u01bb\7v\2\2\u01bb\u01bc\7g\2\2\u01bc\u01bd\7p\2\2\u01bd\u01be"+ - "\7f\2\2\u01be\u01bf\7u\2\2\u01bfJ\3\2\2\2\u01c0\u01c1\7k\2\2\u01c1\u01c2"+ - "\7o\2\2\u01c2\u01c3\7r\2\2\u01c3\u01c4\7n\2\2\u01c4\u01c5\7g\2\2\u01c5"+ - "\u01c6\7o\2\2\u01c6\u01c7\7g\2\2\u01c7\u01c8\7p\2\2\u01c8\u01c9\7v\2\2"+ - "\u01c9\u01ca\7u\2\2\u01caL\3\2\2\2\u01cb\u01cc\7g\2\2\u01cc\u01cd\7p\2"+ - "\2\u01cd\u01ce\7w\2\2\u01ce\u01cf\7o\2\2\u01cfN\3\2\2\2\u01d0\u01d1\7"+ - ">\2\2\u01d1P\3\2\2\2\u01d2\u01d3\7@\2\2\u01d3R\3\2\2\2\u01d4\u01d5\7B"+ - "\2\2\u01d5T\3\2\2\2\u01d6\u01d7\7p\2\2\u01d7\u01d8\7w\2\2\u01d8\u01d9"+ - "\7n\2\2\u01d9\u01da\7n\2\2\u01daV\3\2\2\2\u01db\u01dc\7v\2\2\u01dc\u01dd"+ - "\7t\2\2\u01dd\u01de\7w\2\2\u01de\u01df\7g\2\2\u01dfX\3\2\2\2\u01e0\u01e1"+ - "\7h\2\2\u01e1\u01e2\7c\2\2\u01e2\u01e3\7n\2\2\u01e3\u01e4\7u\2\2\u01e4"+ - "\u01e5\7g\2\2\u01e5Z\3\2\2\2\u01e6\u01e7\7&\2\2\u01e7\\\3\2\2\2\u01e8"+ - "\u01e9\7&\2\2\u01e9\u01ea\7}\2\2\u01ea^\3\2\2\2\u01eb\u01ec\7%\2\2\u01ec"+ - "`\3\2\2\2\u01ed\u01ee\7v\2\2\u01ee\u01ef\7j\2\2\u01ef\u01f0\7t\2\2\u01f0"+ - "\u01f1\7q\2\2\u01f1\u01f2\7y\2\2\u01f2b\3\2\2\2\u01f3\u01f4\7p\2\2\u01f4"+ - "\u01f5\7g\2\2\u01f5\u01f6\7y\2\2\u01f6d\3\2\2\2\u01f7\u01f8\7\60\2\2\u01f8"+ - "\u01f9\7\60\2\2\u01f9f\3\2\2\2\u01fa\u01fb\7,\2\2\u01fb\u01fc\7?\2\2\u01fc"+ - "h\3\2\2\2\u01fd\u01fe\7\61\2\2\u01fe\u01ff\7?\2\2\u01ffj\3\2\2\2\u0200"+ - "\u0201\7\u0080\2\2\u0201\u0202\7\61\2\2\u0202\u0203\7?\2\2\u0203l\3\2"+ - "\2\2\u0204\u0205\7\'\2\2\u0205\u0206\7?\2\2\u0206n\3\2\2\2\u0207\u0208"+ - "\7-\2\2\u0208\u0209\7?\2\2\u0209p\3\2\2\2\u020a\u020b\7>\2\2\u020b\u020c"+ - "\7>\2\2\u020c\u020d\7?\2\2\u020dr\3\2\2\2\u020e\u020f\7@\2\2\u020f\u0210"+ - "\7@\2\2\u0210\u0211\7?\2\2\u0211t\3\2\2\2\u0212\u0213\7@\2\2\u0213\u0214"+ - "\7@\2\2\u0214\u0215\7@\2\2\u0215\u0216\7?\2\2\u0216v\3\2\2\2\u0217\u0218"+ - "\7(\2\2\u0218\u0219\7?\2\2\u0219x\3\2\2\2\u021a\u021b\7`\2\2\u021b\u021c"+ - "\7?\2\2\u021cz\3\2\2\2\u021d\u021e\7~\2\2\u021e\u021f\7?\2\2\u021f|\3"+ - "\2\2\2\u0220\u0221\7A\2\2\u0221\u0222\7A\2\2\u0222\u0223\7?\2\2\u0223"+ - "~\3\2\2\2\u0224\u0225\7A\2\2\u0225\u0080\3\2\2\2\u0226\u0227\7A\2\2\u0227"+ - "\u0228\7A\2\2\u0228\u0082\3\2\2\2\u0229\u022a\7~\2\2\u022a\u022b\7~\2"+ - "\2\u022b\u0084\3\2\2\2\u022c\u022d\7(\2\2\u022d\u022e\7(\2\2\u022e\u0086"+ - "\3\2\2\2\u022f\u0230\7#\2\2\u0230\u0231\7?\2\2\u0231\u0088\3\2\2\2\u0232"+ - "\u0233\7@\2\2\u0233\u0234\7?\2\2\u0234\u008a\3\2\2\2\u0235\u0236\7>\2"+ - "\2\u0236\u0237\7?\2\2\u0237\u008c\3\2\2\2\u0238\u0239\7~\2\2\u0239\u008e"+ - "\3\2\2\2\u023a\u023b\7`\2\2\u023b\u0090\3\2\2\2\u023c\u023d\7(\2\2\u023d"+ - "\u0092\3\2\2\2\u023e\u023f\7>\2\2\u023f\u0240\7>\2\2\u0240\u0094\3\2\2"+ - "\2\u0241\u0242\7@\2\2\u0242\u0243\7@\2\2\u0243\u0096\3\2\2\2\u0244\u0245"+ - "\7@\2\2\u0245\u0246\7@\2\2\u0246\u0247\7@\2\2\u0247\u0098\3\2\2\2\u0248"+ - "\u0249\7-\2\2\u0249\u009a\3\2\2\2\u024a\u024b\7/\2\2\u024b\u009c\3\2\2"+ - "\2\u024c\u024d\7,\2\2\u024d\u009e\3\2\2\2\u024e\u024f\7\61\2\2\u024f\u00a0"+ - "\3\2\2\2\u0250\u0251\7\'\2\2\u0251\u00a2\3\2\2\2\u0252\u0253\7\u0080\2"+ - "\2\u0253\u0254\7\61\2\2\u0254\u00a4\3\2\2\2\u0255\u0256\7#\2\2\u0256\u00a6"+ - "\3\2\2\2\u0257\u0258\7c\2\2\u0258\u0259\7y\2\2\u0259\u025a\7c\2\2\u025a"+ - "\u025b\7k\2\2\u025b\u025c\7v\2\2\u025c\u00a8\3\2\2\2\u025d\u025e\7-\2"+ - "\2\u025e\u025f\7-\2\2\u025f\u00aa\3\2\2\2\u0260\u0261\7/\2\2\u0261\u0262"+ - "\7/\2\2\u0262\u00ac\3\2\2\2\u0263\u0264\7A\2\2\u0264\u0265\7\60\2\2\u0265"+ - "\u00ae\3\2\2\2\u0266\u0267\7k\2\2\u0267\u0268\7u\2\2\u0268\u00b0\3\2\2"+ - "\2\u0269\u026a\7c\2\2\u026a\u026b\7u\2\2\u026b\u00b2\3\2\2\2\u026c\u026d"+ - "\7k\2\2\u026d\u026e\7h\2\2\u026e\u00b4\3\2\2\2\u026f\u0270\7g\2\2\u0270"+ - "\u0271\7n\2\2\u0271\u0272\7u\2\2\u0272\u0273\7g\2\2\u0273\u00b6\3\2\2"+ - "\2\u0274\u0275\7h\2\2\u0275\u0276\7q\2\2\u0276\u0277\7t\2\2\u0277\u00b8"+ - "\3\2\2\2\u0278\u0279\7k\2\2\u0279\u027a\7p\2\2\u027a\u00ba\3\2\2\2\u027b"+ - "\u027c\7y\2\2\u027c\u027d\7j\2\2\u027d\u027e\7k\2\2\u027e\u027f\7n\2\2"+ - "\u027f\u0280\7g\2\2\u0280\u00bc\3\2\2\2\u0281\u0282\7f\2\2\u0282\u0283"+ - "\7q\2\2\u0283\u00be\3\2\2\2\u0284\u0285\7u\2\2\u0285\u0286\7y\2\2\u0286"+ - "\u0287\7k\2\2\u0287\u0288\7v\2\2\u0288\u0289\7e\2\2\u0289\u028a\7j\2\2"+ - "\u028a\u00c0\3\2\2\2\u028b\u028c\7e\2\2\u028c\u028d\7c\2\2\u028d\u028e"+ - "\7u\2\2\u028e\u028f\7g\2\2\u028f\u00c2\3\2\2\2\u0290\u0291\7f\2\2\u0291"+ - "\u0292\7g\2\2\u0292\u0293\7h\2\2\u0293\u0294\7c\2\2\u0294\u0295\7w\2\2"+ - "\u0295\u0296\7n\2\2\u0296\u0297\7v\2\2\u0297\u00c4\3\2\2\2\u0298\u0299"+ - "\7t\2\2\u0299\u029a\7g\2\2\u029a\u029b\7v\2\2\u029b\u029c\7j\2\2\u029c"+ - "\u029d\7t\2\2\u029d\u029e\7q\2\2\u029e\u029f\7y\2\2\u029f\u00c6\3\2\2"+ - "\2\u02a0\u02a1\7v\2\2\u02a1\u02a2\7t\2\2\u02a2\u02a3\7{\2\2\u02a3\u00c8"+ - "\3\2\2\2\u02a4\u02a5\7q\2\2\u02a5\u02a6\7p\2\2\u02a6\u00ca\3\2\2\2\u02a7"+ - "\u02a8\7e\2\2\u02a8\u02a9\7c\2\2\u02a9\u02aa\7v\2\2\u02aa\u02ab\7e\2\2"+ - "\u02ab\u02ac\7j\2\2\u02ac\u00cc\3\2\2\2\u02ad\u02ae\7h\2\2\u02ae\u02af"+ - "\7k\2\2\u02af\u02b0\7p\2\2\u02b0\u02b1\7c\2\2\u02b1\u02b2\7n\2\2\u02b2"+ - "\u02b3\7n\2\2\u02b3\u02b4\7{\2\2\u02b4\u00ce\3\2\2\2\u02b5\u02b6\7t\2"+ - "\2\u02b6\u02b7\7g\2\2\u02b7\u02b8\7v\2\2\u02b8\u02b9\7w\2\2\u02b9\u02ba"+ - "\7t\2\2\u02ba\u02bb\7p\2\2\u02bb\u00d0\3\2\2\2\u02bc\u02bd\7d\2\2\u02bd"+ - "\u02be\7t\2\2\u02be\u02bf\7g\2\2\u02bf\u02c0\7c\2\2\u02c0\u02c1\7m\2\2"+ - "\u02c1\u00d2\3\2\2\2\u02c2\u02c3\7e\2\2\u02c3\u02c4\7q\2\2\u02c4\u02c5"+ - "\7p\2\2\u02c5\u02c6\7v\2\2\u02c6\u02c7\7k\2\2\u02c7\u02c8\7p\2\2\u02c8"+ - "\u02c9\7w\2\2\u02c9\u02ca\7g\2\2\u02ca\u00d4\3\2\2\2\u02cb\u02cc\7{\2"+ - "\2\u02cc\u02cd\7k\2\2\u02cd\u02ce\7g\2\2\u02ce\u02cf\7n\2\2\u02cf\u02d0"+ - "\7f\2\2\u02d0\u00d6\3\2\2\2\u02d1\u02d2\7{\2\2\u02d2\u02d3\7k\2\2\u02d3"+ - "\u02d4\7g\2\2\u02d4\u02d5\7n\2\2\u02d5\u02d6\7f\2\2\u02d6\u02d7\7,\2\2"+ - "\u02d7\u00d8\3\2\2\2\u02d8\u02d9\7c\2\2\u02d9\u02da\7u\2\2\u02da\u02db"+ - "\7u\2\2\u02db\u02dc\7g\2\2\u02dc\u02dd\7t\2\2\u02dd\u02de\7v\2\2\u02de"+ - "\u00da\3\2\2\2\u02df\u02e0\7%\2\2\u02e0\u02e1\7#\2\2\u02e1\u00dc\3\2\2"+ - "\2\u02e2\u02e3\7n\2\2\u02e3\u02e4\7k\2\2\u02e4\u02e5\7d\2\2\u02e5\u02e6"+ - "\7t\2\2\u02e6\u02e7\7c\2\2\u02e7\u02e8\7t\2\2\u02e8\u02e9\7{\2\2\u02e9"+ - "\u00de\3\2\2\2\u02ea\u02eb\7k\2\2\u02eb\u02ec\7o\2\2\u02ec\u02ed\7r\2"+ - "\2\u02ed\u02ee\7q\2\2\u02ee\u02ef\7t\2\2\u02ef\u02f0\7v\2\2\u02f0\u00e0"+ - "\3\2\2\2\u02f1\u02f2\7u\2\2\u02f2\u02f3\7j\2\2\u02f3\u02f4\7q\2\2\u02f4"+ - "\u02f5\7y\2\2\u02f5\u00e2\3\2\2\2\u02f6\u02f7\7j\2\2\u02f7\u02f8\7k\2"+ - "\2\u02f8\u02f9\7f\2\2\u02f9\u02fa\7g\2\2\u02fa\u00e4\3\2\2\2\u02fb\u02fc"+ - "\7g\2\2\u02fc\u02fd\7z\2\2\u02fd\u02fe\7r\2\2\u02fe\u02ff\7q\2\2\u02ff"+ - "\u0300\7t\2\2\u0300\u0301\7v\2\2\u0301\u00e6\3\2\2\2\u0302\u0303\7r\2"+ - "\2\u0303\u0304\7c\2\2\u0304\u0305\7t\2\2\u0305\u0306\7v\2\2\u0306\u00e8"+ - "\3\2\2\2\u0307\u0308\7q\2\2\u0308\u0309\7h\2\2\u0309\u00ea\3\2\2\2\u030a"+ - "\u030b\7v\2\2\u030b\u030c\7{\2\2\u030c\u030d\7r\2\2\u030d\u030e\7g\2\2"+ - "\u030e\u030f\7f\2\2\u030f\u0310\7g\2\2\u0310\u0311\7h\2\2\u0311\u00ec"+ - "\3\2\2\2\u0312\u0314\t\2\2\2\u0313\u0312\3\2\2\2\u0314\u0315\3\2\2\2\u0315"+ - "\u0313\3\2\2\2\u0315\u0316\3\2\2\2\u0316\u0317\3\2\2\2\u0317\u0318\bw"+ - "\2\2\u0318\u00ee\3\2\2\2\u0319\u031b\5\u0113\u008a\2\u031a\u0319\3\2\2"+ - "\2\u031b\u031c\3\2\2\2\u031c\u031a\3\2\2\2\u031c\u031d\3\2\2\2\u031d\u0324"+ - "\3\2\2\2\u031e\u0320\7\60\2\2\u031f\u0321\5\u0113\u008a\2\u0320\u031f"+ - "\3\2\2\2\u0321\u0322\3\2\2\2\u0322\u0320\3\2\2\2\u0322\u0323\3\2\2\2\u0323"+ - "\u0325\3\2\2\2\u0324\u031e\3\2\2\2\u0324\u0325\3\2\2\2\u0325\u0327\3\2"+ - "\2\2\u0326\u0328\5\u00f1y\2\u0327\u0326\3\2\2\2\u0327\u0328\3\2\2\2\u0328"+ - "\u0333\3\2\2\2\u0329\u032b\7\60\2\2\u032a\u032c\5\u0113\u008a\2\u032b"+ - "\u032a\3\2\2\2\u032c\u032d\3\2\2\2\u032d\u032b\3\2\2\2\u032d\u032e\3\2"+ - "\2\2\u032e\u0330\3\2\2\2\u032f\u0331\5\u00f1y\2\u0330\u032f\3\2\2\2\u0330"+ - "\u0331\3\2\2\2\u0331\u0333\3\2\2\2\u0332\u031a\3\2\2\2\u0332\u0329\3\2"+ - "\2\2\u0333\u00f0\3\2\2\2\u0334\u0336\t\3\2\2\u0335\u0337\t\4\2\2\u0336"+ - "\u0335\3\2\2\2\u0336\u0337\3\2\2\2\u0337\u0339\3\2\2\2\u0338\u033a\5\u0113"+ - "\u008a\2\u0339\u0338\3\2\2\2\u033a\u033b\3\2\2\2\u033b\u0339\3\2\2\2\u033b"+ - "\u033c\3\2\2\2\u033c\u00f2\3\2\2\2\u033d\u033e\7\62\2\2\u033e\u033f\7"+ - "z\2\2\u033f\u0341\3\2\2\2\u0340\u0342\5\u00f5{\2\u0341\u0340\3\2\2\2\u0342"+ - "\u0343\3\2\2\2\u0343\u0341\3\2\2\2\u0343\u0344\3\2\2\2\u0344\u034e\3\2"+ - "\2\2\u0345\u0346\7\62\2\2\u0346\u0347\7Z\2\2\u0347\u0349\3\2\2\2\u0348"+ - "\u034a\5\u00f5{\2\u0349\u0348\3\2\2\2\u034a\u034b\3\2\2\2\u034b\u0349"+ - "\3\2\2\2\u034b\u034c\3\2\2\2\u034c\u034e\3\2\2\2\u034d\u033d\3\2\2\2\u034d"+ - "\u0345\3\2\2\2\u034e\u00f4\3\2\2\2\u034f\u0352\t\5\2\2\u0350\u0352\5\u0113"+ - "\u008a\2\u0351\u034f\3\2\2\2\u0351\u0350\3\2\2\2\u0352\u00f6\3\2\2\2\u0353"+ - "\u0357\7$\2\2\u0354\u0356\5\u00f9}\2\u0355\u0354\3\2\2\2\u0356\u0359\3"+ - "\2\2\2\u0357\u0355\3\2\2\2\u0357\u0358\3\2\2\2\u0358\u035a\3\2\2\2\u0359"+ - "\u0357\3\2\2\2\u035a\u0378\7$\2\2\u035b\u035f\7)\2\2\u035c\u035e\5\u00fb"+ - "~\2\u035d\u035c\3\2\2\2\u035e\u0361\3\2\2\2\u035f\u035d\3\2\2\2\u035f"+ - "\u0360\3\2\2\2\u0360\u0362\3\2\2\2\u0361\u035f\3\2\2\2\u0362\u0378\7)"+ - "\2\2\u0363\u0364\7t\2\2\u0364\u0365\7)\2\2\u0365\u0369\3\2\2\2\u0366\u0368"+ - "\n\6\2\2\u0367\u0366\3\2\2\2\u0368\u036b\3\2\2\2\u0369\u0367\3\2\2\2\u0369"+ - "\u036a\3\2\2\2\u036a\u036c\3\2\2\2\u036b\u0369\3\2\2\2\u036c\u0378\7)"+ - "\2\2\u036d\u036e\7t\2\2\u036e\u036f\7$\2\2\u036f\u0373\3\2\2\2\u0370\u0372"+ - "\n\7\2\2\u0371\u0370\3\2\2\2\u0372\u0375\3\2\2\2\u0373\u0371\3\2\2\2\u0373"+ - "\u0374\3\2\2\2\u0374\u0376\3\2\2\2\u0375\u0373\3\2\2\2\u0376\u0378\7$"+ - "\2\2\u0377\u0353\3\2\2\2\u0377\u035b\3\2\2\2\u0377\u0363\3\2\2\2\u0377"+ - "\u036d\3\2\2\2\u0378\u00f8\3\2\2\2\u0379\u037d\n\b\2\2\u037a\u037b\7^"+ - "\2\2\u037b\u037d\n\t\2\2\u037c\u0379\3\2\2\2\u037c\u037a\3\2\2\2\u037d"+ - "\u00fa\3\2\2\2\u037e\u0382\n\n\2\2\u037f\u0380\7^\2\2\u0380\u0382\n\t"+ - "\2\2\u0381\u037e\3\2\2\2\u0381\u037f\3\2\2\2\u0382\u00fc\3\2\2\2\u0383"+ - "\u0384\7$\2\2\u0384\u0385\7$\2\2\u0385\u0386\7$\2\2\u0386\u038a\3\2\2"+ - "\2\u0387\u0389\5\u00ff\u0080\2\u0388\u0387\3\2\2\2\u0389\u038c\3\2\2\2"+ - "\u038a\u0388\3\2\2\2\u038a\u038b\3\2\2\2\u038b\u038d\3\2\2\2\u038c\u038a"+ - "\3\2\2\2\u038d\u038e\7$\2\2\u038e\u038f\7$\2\2\u038f\u03c6\7$\2\2\u0390"+ - "\u0391\7)\2\2\u0391\u0392\7)\2\2\u0392\u0393\7)\2\2\u0393\u0397\3\2\2"+ - "\2\u0394\u0396\5\u0101\u0081\2\u0395\u0394\3\2\2\2\u0396\u0399\3\2\2\2"+ - "\u0397\u0395\3\2\2\2\u0397\u0398\3\2\2\2\u0398\u039a\3\2\2\2\u0399\u0397"+ - "\3\2\2\2\u039a\u039b\7)\2\2\u039b\u039c\7)\2\2\u039c\u03c6\7)\2\2\u039d"+ - "\u039e\7t\2\2\u039e\u039f\7$\2\2\u039f\u03a0\7$\2\2\u03a0\u03a1\7$\2\2"+ - "\u03a1\u03ab\3\2\2\2\u03a2\u03aa\n\13\2\2\u03a3\u03a4\7$\2\2\u03a4\u03aa"+ - "\n\13\2\2\u03a5\u03a6\7$\2\2\u03a6\u03a7\7$\2\2\u03a7\u03a8\3\2\2\2\u03a8"+ - "\u03aa\n\13\2\2\u03a9\u03a2\3\2\2\2\u03a9\u03a3\3\2\2\2\u03a9\u03a5\3"+ - "\2\2\2\u03aa\u03ad\3\2\2\2\u03ab\u03a9\3\2\2\2\u03ab\u03ac\3\2\2\2\u03ac"+ - "\u03ae\3\2\2\2\u03ad\u03ab\3\2\2\2\u03ae\u03af\7$\2\2\u03af\u03b0\7$\2"+ - "\2\u03b0\u03c6\7$\2\2\u03b1\u03b2\7t\2\2\u03b2\u03b3\7)\2\2\u03b3\u03b4"+ - "\7)\2\2\u03b4\u03b5\7)\2\2\u03b5\u03bf\3\2\2\2\u03b6\u03be\n\f\2\2\u03b7"+ - "\u03b8\7)\2\2\u03b8\u03be\n\f\2\2\u03b9\u03ba\7)\2\2\u03ba\u03bb\7)\2"+ - "\2\u03bb\u03bc\3\2\2\2\u03bc\u03be\n\f\2\2\u03bd\u03b6\3\2\2\2\u03bd\u03b7"+ - "\3\2\2\2\u03bd\u03b9\3\2\2\2\u03be\u03c1\3\2\2\2\u03bf\u03bd\3\2\2\2\u03bf"+ - "\u03c0\3\2\2\2\u03c0\u03c2\3\2\2\2\u03c1\u03bf\3\2\2\2\u03c2\u03c3\7)"+ - "\2\2\u03c3\u03c4\7)\2\2\u03c4\u03c6\7)\2\2\u03c5\u0383\3\2\2\2\u03c5\u0390"+ - "\3\2\2\2\u03c5\u039d\3\2\2\2\u03c5\u03b1\3\2\2\2\u03c6\u00fe\3\2\2\2\u03c7"+ - "\u03cf\n\r\2\2\u03c8\u03c9\7$\2\2\u03c9\u03cf\n\13\2\2\u03ca\u03cb\7$"+ - "\2\2\u03cb\u03cc\7$\2\2\u03cc\u03cd\3\2\2\2\u03cd\u03cf\n\13\2\2\u03ce"+ - "\u03c7\3\2\2\2\u03ce\u03c8\3\2\2\2\u03ce\u03ca\3\2\2\2\u03cf\u0100\3\2"+ - "\2\2\u03d0\u03d8\n\16\2\2\u03d1\u03d2\7)\2\2\u03d2\u03d8\n\f\2\2\u03d3"+ - "\u03d4\7)\2\2\u03d4\u03d5\7)\2\2\u03d5\u03d6\3\2\2\2\u03d6\u03d8\n\f\2"+ - "\2\u03d7\u03d0\3\2\2\2\u03d7\u03d1\3\2\2\2\u03d7\u03d3\3\2\2\2\u03d8\u0102"+ - "\3\2\2\2\u03d9\u03dd\t\t\2\2\u03da\u03db\7\17\2\2\u03db\u03dd\7\f\2\2"+ - "\u03dc\u03d9\3\2\2\2\u03dc\u03da\3\2\2\2\u03dd\u0104\3\2\2\2\u03de\u03e2"+ - "\5\u010b\u0086\2\u03df\u03e1\5\u010d\u0087\2\u03e0\u03df\3\2\2\2\u03e1"+ - "\u03e4\3\2\2\2\u03e2\u03e0\3\2\2\2\u03e2\u03e3\3\2\2\2\u03e3\u0106\3\2"+ - "\2\2\u03e4\u03e2\3\2\2\2\u03e5\u03e9\5\u0109\u0085\2\u03e6\u03e8\5\u010f"+ - "\u0088\2\u03e7\u03e6\3\2\2\2\u03e8\u03eb\3\2\2\2\u03e9\u03e7\3\2\2\2\u03e9"+ - "\u03ea\3\2\2\2\u03ea\u0108\3\2\2\2\u03eb\u03e9\3\2\2\2\u03ec\u03ef\5\u010b"+ - "\u0086\2\u03ed\u03ef\7&\2\2\u03ee\u03ec\3\2\2\2\u03ee\u03ed\3\2\2\2\u03ef"+ - "\u010a\3\2\2\2\u03f0\u03f3\5\u0111\u0089\2\u03f1\u03f3\7a\2\2\u03f2\u03f0"+ - "\3\2\2\2\u03f2\u03f1\3\2\2\2\u03f3\u010c\3\2\2\2\u03f4\u03f7\5\u010b\u0086"+ - "\2\u03f5\u03f7\5\u0113\u008a\2\u03f6\u03f4\3\2\2\2\u03f6\u03f5\3\2\2\2"+ - "\u03f7\u010e\3\2\2\2\u03f8\u03fb\5\u0109\u0085\2\u03f9\u03fb\5\u0113\u008a"+ - "\2\u03fa\u03f8\3\2\2\2\u03fa\u03f9\3\2\2\2\u03fb\u0110\3\2\2\2\u03fc\u03fe"+ - "\t\17\2\2\u03fd\u03fc\3\2\2\2\u03fe\u0112\3\2\2\2\u03ff\u0400\t\20\2\2"+ - "\u0400\u0114\3\2\2\2\u0401\u0402\7\61\2\2\u0402\u0403\7\61\2\2\u0403\u0407"+ - "\3\2\2\2\u0404\u0406\n\t\2\2\u0405\u0404\3\2\2\2\u0406\u0409\3\2\2\2\u0407"+ - "\u0405\3\2\2\2\u0407\u0408\3\2\2\2\u0408\u040a\3\2\2\2\u0409\u0407\3\2"+ - "\2\2\u040a\u040b\b\u008b\3\2\u040b\u0116\3\2\2\2\u040c\u040d\7\61\2\2"+ - "\u040d\u040e\7,\2\2\u040e\u0412\3\2\2\2\u040f\u0411\13\2\2\2\u0410\u040f"+ - "\3\2\2\2\u0411\u0414\3\2\2\2\u0412\u0413\3\2\2\2\u0412\u0410\3\2\2\2\u0413"+ - "\u0415\3\2\2\2\u0414\u0412\3\2\2\2\u0415\u0416\7,\2\2\u0416\u0417\7\61"+ - "\2\2\u0417\u0418\3\2\2\2\u0418\u0419\b\u008c\3\2\u0419\u0118\3\2\2\2+"+ - "\2\u0315\u031c\u0322\u0324\u0327\u032d\u0330\u0332\u0336\u033b\u0343\u034b"+ - "\u034d\u0351\u0357\u035f\u0369\u0373\u0377\u037c\u0381\u038a\u0397\u03a9"+ - "\u03ab\u03bd\u03bf\u03c5\u03ce\u03d7\u03dc\u03e2\u03e9\u03ee\u03f2\u03f6"+ - "\u03fa\u03fd\u0407\u0412\4\b\2\2\2\4\2"; + "\t\u0089\4\u008a\t\u008a\4\u008b\t\u008b\4\u008c\t\u008c\4\u008d\t\u008d"+ + "\4\u008e\t\u008e\4\u008f\t\u008f\4\u0090\t\u0090\4\u0091\t\u0091\4\u0092"+ + "\t\u0092\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3"+ + "\5\3\5\3\5\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t"+ + "\3\t\3\n\3\n\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3"+ + "\f\3\r\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3\21\3\21\3\22\3\22\3\23\3\23"+ + "\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\24\3\24\3\24\3\25"+ + "\3\25\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30"+ + "\3\30\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\32\3\32\3\32"+ + "\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\34\3\34"+ + "\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\36"+ + "\3\36\3\36\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3 \3 \3 \3 \3"+ + " \3 \3 \3 \3 \3!\3!\3\"\3\"\3\"\3#\3#\3#\3#\3$\3$\3$\3%\3%\3%\3%\3&\3"+ + "&\3&\3&\3\'\3\'\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3(\3(\3(\3(\3)\3)\3)\3)\3"+ + ")\3)\3)\3)\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3+\3+\3+\3+\3+\3,\3,\3-\3"+ + "-\3.\3.\3/\3/\3/\3/\3/\3/\3/\3\60\3\60\3\60\3\60\3\60\3\61\3\61\3\62\3"+ + "\62\3\62\3\62\3\62\3\63\3\63\3\63\3\63\3\63\3\64\3\64\3\64\3\64\3\64\3"+ + "\64\3\65\3\65\3\66\3\66\3\66\3\67\3\67\38\38\38\38\38\38\39\39\39\39\3"+ + ":\3:\3:\3;\3;\3;\3<\3<\3<\3=\3=\3=\3=\3>\3>\3>\3?\3?\3?\3@\3@\3@\3@\3"+ + "A\3A\3A\3A\3B\3B\3B\3B\3B\3C\3C\3C\3D\3D\3D\3E\3E\3E\3F\3F\3F\3F\3G\3"+ + "G\3H\3H\3H\3I\3I\3I\3J\3J\3J\3K\3K\3K\3L\3L\3L\3M\3M\3M\3N\3N\3O\3O\3"+ + "P\3P\3Q\3Q\3Q\3R\3R\3R\3S\3S\3S\3S\3T\3T\3U\3U\3V\3V\3W\3W\3X\3X\3Y\3"+ + "Y\3Y\3Z\3Z\3[\3[\3[\3[\3[\3[\3\\\3\\\3\\\3]\3]\3]\3^\3^\3^\3_\3_\3_\3"+ + "`\3`\3`\3a\3a\3a\3b\3b\3b\3b\3b\3c\3c\3c\3c\3c\3d\3d\3d\3d\3e\3e\3e\3"+ + "f\3f\3f\3f\3f\3f\3g\3g\3g\3h\3h\3h\3h\3h\3h\3h\3h\3i\3i\3i\3i\3i\3i\3"+ + "i\3i\3j\3j\3j\3j\3k\3k\3k\3l\3l\3l\3l\3l\3l\3m\3m\3m\3m\3m\3m\3m\3m\3"+ + "n\3n\3n\3n\3n\3n\3n\3o\3o\3o\3o\3o\3o\3p\3p\3p\3p\3p\3p\3p\3p\3p\3q\3"+ + "q\3q\3q\3q\3q\3r\3r\3r\3r\3r\3r\3r\3s\3s\3s\3s\3s\3s\3s\3t\3t\3t\3u\3"+ + "u\3u\3u\3u\3u\3u\3u\3v\3v\3v\3v\3v\3v\3v\3w\3w\3w\3w\3w\3x\3x\3x\3x\3"+ + "x\3y\3y\3y\3y\3y\3y\3y\3z\3z\3z\3z\3z\3{\3{\3{\3|\3|\3|\3|\3|\3|\3|\3"+ + "|\3}\6}\u0343\n}\r}\16}\u0344\3}\3}\3~\6~\u034a\n~\r~\16~\u034b\3~\3~"+ + "\6~\u0350\n~\r~\16~\u0351\5~\u0354\n~\3~\5~\u0357\n~\3~\3~\6~\u035b\n"+ + "~\r~\16~\u035c\3~\5~\u0360\n~\5~\u0362\n~\3\177\3\177\5\177\u0366\n\177"+ + "\3\177\6\177\u0369\n\177\r\177\16\177\u036a\3\u0080\3\u0080\3\u0080\3"+ + "\u0080\6\u0080\u0371\n\u0080\r\u0080\16\u0080\u0372\3\u0080\3\u0080\3"+ + "\u0080\3\u0080\6\u0080\u0379\n\u0080\r\u0080\16\u0080\u037a\5\u0080\u037d"+ + "\n\u0080\3\u0081\3\u0081\5\u0081\u0381\n\u0081\3\u0082\3\u0082\7\u0082"+ + "\u0385\n\u0082\f\u0082\16\u0082\u0388\13\u0082\3\u0082\3\u0082\3\u0082"+ + "\7\u0082\u038d\n\u0082\f\u0082\16\u0082\u0390\13\u0082\3\u0082\3\u0082"+ + "\3\u0082\3\u0082\3\u0082\7\u0082\u0397\n\u0082\f\u0082\16\u0082\u039a"+ + "\13\u0082\3\u0082\3\u0082\3\u0082\3\u0082\3\u0082\7\u0082\u03a1\n\u0082"+ + "\f\u0082\16\u0082\u03a4\13\u0082\3\u0082\5\u0082\u03a7\n\u0082\3\u0083"+ + "\3\u0083\3\u0083\5\u0083\u03ac\n\u0083\3\u0084\3\u0084\3\u0084\5\u0084"+ + "\u03b1\n\u0084\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085\7\u0085\u03b8\n"+ + "\u0085\f\u0085\16\u0085\u03bb\13\u0085\3\u0085\3\u0085\3\u0085\3\u0085"+ + "\3\u0085\3\u0085\3\u0085\3\u0085\7\u0085\u03c5\n\u0085\f\u0085\16\u0085"+ + "\u03c8\13\u0085\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085"+ + "\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085\7\u0085"+ + "\u03d9\n\u0085\f\u0085\16\u0085\u03dc\13\u0085\3\u0085\3\u0085\3\u0085"+ + "\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085"+ + "\3\u0085\3\u0085\3\u0085\7\u0085\u03ed\n\u0085\f\u0085\16\u0085\u03f0"+ + "\13\u0085\3\u0085\3\u0085\3\u0085\5\u0085\u03f5\n\u0085\3\u0086\3\u0086"+ + "\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\5\u0086\u03fe\n\u0086\3\u0087"+ + "\3\u0087\3\u0087\3\u0087\3\u0087\3\u0087\3\u0087\5\u0087\u0407\n\u0087"+ + "\3\u0088\3\u0088\3\u0088\5\u0088\u040c\n\u0088\3\u0089\3\u0089\7\u0089"+ + "\u0410\n\u0089\f\u0089\16\u0089\u0413\13\u0089\3\u008a\3\u008a\7\u008a"+ + "\u0417\n\u008a\f\u008a\16\u008a\u041a\13\u008a\3\u008b\3\u008b\5\u008b"+ + "\u041e\n\u008b\3\u008c\3\u008c\5\u008c\u0422\n\u008c\3\u008d\3\u008d\5"+ + "\u008d\u0426\n\u008d\3\u008e\3\u008e\5\u008e\u042a\n\u008e\3\u008f\5\u008f"+ + "\u042d\n\u008f\3\u0090\3\u0090\3\u0091\3\u0091\3\u0091\3\u0091\7\u0091"+ + "\u0435\n\u0091\f\u0091\16\u0091\u0438\13\u0091\3\u0091\3\u0091\3\u0092"+ + "\3\u0092\3\u0092\3\u0092\7\u0092\u0440\n\u0092\f\u0092\16\u0092\u0443"+ + "\13\u0092\3\u0092\3\u0092\3\u0092\3\u0092\3\u0092\3\u0441\2\u0093\3\3"+ + "\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21"+ + "!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!"+ + "A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s"+ + ";u{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F\u008bG\u008dH\u008f"+ + "I\u0091J\u0093K\u0095L\u0097M\u0099N\u009bO\u009dP\u009fQ\u00a1R\u00a3"+ + "S\u00a5T\u00a7U\u00a9V\u00abW\u00adX\u00afY\u00b1Z\u00b3[\u00b5\\\u00b7"+ + "]\u00b9^\u00bb_\u00bd`\u00bfa\u00c1b\u00c3c\u00c5d\u00c7e\u00c9f\u00cb"+ + "g\u00cdh\u00cfi\u00d1j\u00d3k\u00d5l\u00d7m\u00d9n\u00dbo\u00ddp\u00df"+ + "q\u00e1r\u00e3s\u00e5t\u00e7u\u00e9v\u00ebw\u00edx\u00efy\u00f1z\u00f3"+ + "{\u00f5|\u00f7}\u00f9~\u00fb\177\u00fd\2\u00ff\u0080\u0101\2\u0103\u0081"+ + "\u0105\2\u0107\2\u0109\u0082\u010b\2\u010d\2\u010f\u0083\u0111\2\u0113"+ + "\u0084\u0115\2\u0117\2\u0119\2\u011b\2\u011d\2\u011f\2\u0121\u0085\u0123"+ + "\u0086\3\2\21\5\2\13\f\16\17\"\"\4\2GGgg\4\2--//\4\2CHch\5\2\f\f\17\17"+ + "))\5\2\f\f\17\17$$\6\2\f\f\17\17$$^^\4\2\f\f\17\17\6\2\f\f\17\17))^^\3"+ + "\2$$\3\2))\4\2$$^^\4\2))^^\4\2C\\c|\3\2\62;\2\u046a\2\3\3\2\2\2\2\5\3"+ + "\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2"+ + "\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3"+ + "\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'"+ + "\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63"+ + "\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2"+ + "?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3"+ + "\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2"+ + "\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2"+ + "e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3"+ + "\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2"+ + "\2\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2\2\u0087"+ + "\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u008f\3\2\2"+ + "\2\2\u0091\3\2\2\2\2\u0093\3\2\2\2\2\u0095\3\2\2\2\2\u0097\3\2\2\2\2\u0099"+ + "\3\2\2\2\2\u009b\3\2\2\2\2\u009d\3\2\2\2\2\u009f\3\2\2\2\2\u00a1\3\2\2"+ + "\2\2\u00a3\3\2\2\2\2\u00a5\3\2\2\2\2\u00a7\3\2\2\2\2\u00a9\3\2\2\2\2\u00ab"+ + "\3\2\2\2\2\u00ad\3\2\2\2\2\u00af\3\2\2\2\2\u00b1\3\2\2\2\2\u00b3\3\2\2"+ + "\2\2\u00b5\3\2\2\2\2\u00b7\3\2\2\2\2\u00b9\3\2\2\2\2\u00bb\3\2\2\2\2\u00bd"+ + "\3\2\2\2\2\u00bf\3\2\2\2\2\u00c1\3\2\2\2\2\u00c3\3\2\2\2\2\u00c5\3\2\2"+ + "\2\2\u00c7\3\2\2\2\2\u00c9\3\2\2\2\2\u00cb\3\2\2\2\2\u00cd\3\2\2\2\2\u00cf"+ + "\3\2\2\2\2\u00d1\3\2\2\2\2\u00d3\3\2\2\2\2\u00d5\3\2\2\2\2\u00d7\3\2\2"+ + "\2\2\u00d9\3\2\2\2\2\u00db\3\2\2\2\2\u00dd\3\2\2\2\2\u00df\3\2\2\2\2\u00e1"+ + "\3\2\2\2\2\u00e3\3\2\2\2\2\u00e5\3\2\2\2\2\u00e7\3\2\2\2\2\u00e9\3\2\2"+ + "\2\2\u00eb\3\2\2\2\2\u00ed\3\2\2\2\2\u00ef\3\2\2\2\2\u00f1\3\2\2\2\2\u00f3"+ + "\3\2\2\2\2\u00f5\3\2\2\2\2\u00f7\3\2\2\2\2\u00f9\3\2\2\2\2\u00fb\3\2\2"+ + "\2\2\u00ff\3\2\2\2\2\u0103\3\2\2\2\2\u0109\3\2\2\2\2\u010f\3\2\2\2\2\u0113"+ + "\3\2\2\2\2\u0121\3\2\2\2\2\u0123\3\2\2\2\3\u0125\3\2\2\2\5\u0127\3\2\2"+ + "\2\7\u012d\3\2\2\2\t\u0133\3\2\2\2\13\u0137\3\2\2\2\r\u0139\3\2\2\2\17"+ + "\u013e\3\2\2\2\21\u0144\3\2\2\2\23\u0147\3\2\2\2\25\u0149\3\2\2\2\27\u0150"+ + "\3\2\2\2\31\u0156\3\2\2\2\33\u0158\3\2\2\2\35\u015a\3\2\2\2\37\u015c\3"+ + "\2\2\2!\u015e\3\2\2\2#\u0160\3\2\2\2%\u0162\3\2\2\2\'\u016c\3\2\2\2)\u0171"+ + "\3\2\2\2+\u0173\3\2\2\2-\u0175\3\2\2\2/\u017c\3\2\2\2\61\u0181\3\2\2\2"+ + "\63\u018b\3\2\2\2\65\u0191\3\2\2\2\67\u019a\3\2\2\29\u01a0\3\2\2\2;\u01a5"+ + "\3\2\2\2=\u01ac\3\2\2\2?\u01b5\3\2\2\2A\u01be\3\2\2\2C\u01c0\3\2\2\2E"+ + "\u01c3\3\2\2\2G\u01c7\3\2\2\2I\u01ca\3\2\2\2K\u01ce\3\2\2\2M\u01d2\3\2"+ + "\2\2O\u01d8\3\2\2\2Q\u01e0\3\2\2\2S\u01e8\3\2\2\2U\u01f3\3\2\2\2W\u01f8"+ + "\3\2\2\2Y\u01fa\3\2\2\2[\u01fc\3\2\2\2]\u01fe\3\2\2\2_\u0205\3\2\2\2a"+ + "\u020a\3\2\2\2c\u020c\3\2\2\2e\u0211\3\2\2\2g\u0216\3\2\2\2i\u021c\3\2"+ + "\2\2k\u021e\3\2\2\2m\u0221\3\2\2\2o\u0223\3\2\2\2q\u0229\3\2\2\2s\u022d"+ + "\3\2\2\2u\u0230\3\2\2\2w\u0233\3\2\2\2y\u0236\3\2\2\2{\u023a\3\2\2\2}"+ + "\u023d\3\2\2\2\177\u0240\3\2\2\2\u0081\u0244\3\2\2\2\u0083\u0248\3\2\2"+ + "\2\u0085\u024d\3\2\2\2\u0087\u0250\3\2\2\2\u0089\u0253\3\2\2\2\u008b\u0256"+ + "\3\2\2\2\u008d\u025a\3\2\2\2\u008f\u025c\3\2\2\2\u0091\u025f\3\2\2\2\u0093"+ + "\u0262\3\2\2\2\u0095\u0265\3\2\2\2\u0097\u0268\3\2\2\2\u0099\u026b\3\2"+ + "\2\2\u009b\u026e\3\2\2\2\u009d\u0270\3\2\2\2\u009f\u0272\3\2\2\2\u00a1"+ + "\u0274\3\2\2\2\u00a3\u0277\3\2\2\2\u00a5\u027a\3\2\2\2\u00a7\u027e\3\2"+ + "\2\2\u00a9\u0280\3\2\2\2\u00ab\u0282\3\2\2\2\u00ad\u0284\3\2\2\2\u00af"+ + "\u0286\3\2\2\2\u00b1\u0288\3\2\2\2\u00b3\u028b\3\2\2\2\u00b5\u028d\3\2"+ + "\2\2\u00b7\u0293\3\2\2\2\u00b9\u0296\3\2\2\2\u00bb\u0299\3\2\2\2\u00bd"+ + "\u029c\3\2\2\2\u00bf\u029f\3\2\2\2\u00c1\u02a2\3\2\2\2\u00c3\u02a5\3\2"+ + "\2\2\u00c5\u02aa\3\2\2\2\u00c7\u02af\3\2\2\2\u00c9\u02b3\3\2\2\2\u00cb"+ + "\u02b6\3\2\2\2\u00cd\u02bc\3\2\2\2\u00cf\u02bf\3\2\2\2\u00d1\u02c7\3\2"+ + "\2\2\u00d3\u02cf\3\2\2\2\u00d5\u02d3\3\2\2\2\u00d7\u02d6\3\2\2\2\u00d9"+ + "\u02dc\3\2\2\2\u00db\u02e4\3\2\2\2\u00dd\u02eb\3\2\2\2\u00df\u02f1\3\2"+ + "\2\2\u00e1\u02fa\3\2\2\2\u00e3\u0300\3\2\2\2\u00e5\u0307\3\2\2\2\u00e7"+ + "\u030e\3\2\2\2\u00e9\u0311\3\2\2\2\u00eb\u0319\3\2\2\2\u00ed\u0320\3\2"+ + "\2\2\u00ef\u0325\3\2\2\2\u00f1\u032a\3\2\2\2\u00f3\u0331\3\2\2\2\u00f5"+ + "\u0336\3\2\2\2\u00f7\u0339\3\2\2\2\u00f9\u0342\3\2\2\2\u00fb\u0361\3\2"+ + "\2\2\u00fd\u0363\3\2\2\2\u00ff\u037c\3\2\2\2\u0101\u0380\3\2\2\2\u0103"+ + "\u03a6\3\2\2\2\u0105\u03ab\3\2\2\2\u0107\u03b0\3\2\2\2\u0109\u03f4\3\2"+ + "\2\2\u010b\u03fd\3\2\2\2\u010d\u0406\3\2\2\2\u010f\u040b\3\2\2\2\u0111"+ + "\u040d\3\2\2\2\u0113\u0414\3\2\2\2\u0115\u041d\3\2\2\2\u0117\u0421\3\2"+ + "\2\2\u0119\u0425\3\2\2\2\u011b\u0429\3\2\2\2\u011d\u042c\3\2\2\2\u011f"+ + "\u042e\3\2\2\2\u0121\u0430\3\2\2\2\u0123\u043b\3\2\2\2\u0125\u0126\7."+ + "\2\2\u0126\4\3\2\2\2\u0127\u0128\7h\2\2\u0128\u0129\7k\2\2\u0129\u012a"+ + "\7p\2\2\u012a\u012b\7c\2\2\u012b\u012c\7n\2\2\u012c\6\3\2\2\2\u012d\u012e"+ + "\7e\2\2\u012e\u012f\7q\2\2\u012f\u0130\7p\2\2\u0130\u0131\7u\2\2\u0131"+ + "\u0132\7v\2\2\u0132\b\3\2\2\2\u0133\u0134\7x\2\2\u0134\u0135\7c\2\2\u0135"+ + "\u0136\7t\2\2\u0136\n\3\2\2\2\u0137\u0138\7?\2\2\u0138\f\3\2\2\2\u0139"+ + "\u013a\7x\2\2\u013a\u013b\7q\2\2\u013b\u013c\7k\2\2\u013c\u013d\7f\2\2"+ + "\u013d\16\3\2\2\2\u013e\u013f\7c\2\2\u013f\u0140\7u\2\2\u0140\u0141\7"+ + "{\2\2\u0141\u0142\7p\2\2\u0142\u0143\7e\2\2\u0143\20\3\2\2\2\u0144\u0145"+ + "\7?\2\2\u0145\u0146\7@\2\2\u0146\22\3\2\2\2\u0147\u0148\7=\2\2\u0148\24"+ + "\3\2\2\2\u0149\u014a\7c\2\2\u014a\u014b\7u\2\2\u014b\u014c\7{\2\2\u014c"+ + "\u014d\7p\2\2\u014d\u014e\7e\2\2\u014e\u014f\7,\2\2\u014f\26\3\2\2\2\u0150"+ + "\u0151\7u\2\2\u0151\u0152\7{\2\2\u0152\u0153\7p\2\2\u0153\u0154\7e\2\2"+ + "\u0154\u0155\7,\2\2\u0155\30\3\2\2\2\u0156\u0157\7}\2\2\u0157\32\3\2\2"+ + "\2\u0158\u0159\7\177\2\2\u0159\34\3\2\2\2\u015a\u015b\7*\2\2\u015b\36"+ + "\3\2\2\2\u015c\u015d\7+\2\2\u015d \3\2\2\2\u015e\u015f\7]\2\2\u015f\""+ + "\3\2\2\2\u0160\u0161\7_\2\2\u0161$\3\2\2\2\u0162\u0163\7e\2\2\u0163\u0164"+ + "\7q\2\2\u0164\u0165\7x\2\2\u0165\u0166\7c\2\2\u0166\u0167\7t\2\2\u0167"+ + "\u0168\7k\2\2\u0168\u0169\7c\2\2\u0169\u016a\7p\2\2\u016a\u016b\7v\2\2"+ + "\u016b&\3\2\2\2\u016c\u016d\7v\2\2\u016d\u016e\7j\2\2\u016e\u016f\7k\2"+ + "\2\u016f\u0170\7u\2\2\u0170(\3\2\2\2\u0171\u0172\7\60\2\2\u0172*\3\2\2"+ + "\2\u0173\u0174\7<\2\2\u0174,\3\2\2\2\u0175\u0176\7u\2\2\u0176\u0177\7"+ + "g\2\2\u0177\u0178\7c\2\2\u0178\u0179\7n\2\2\u0179\u017a\7g\2\2\u017a\u017b"+ + "\7f\2\2\u017b.\3\2\2\2\u017c\u017d\7d\2\2\u017d\u017e\7c\2\2\u017e\u017f"+ + "\7u\2\2\u017f\u0180\7g\2\2\u0180\60\3\2\2\2\u0181\u0182\7k\2\2\u0182\u0183"+ + "\7p\2\2\u0183\u0184\7v\2\2\u0184\u0185\7g\2\2\u0185\u0186\7t\2\2\u0186"+ + "\u0187\7h\2\2\u0187\u0188\7c\2\2\u0188\u0189\7e\2\2\u0189\u018a\7g\2\2"+ + "\u018a\62\3\2\2\2\u018b\u018c\7o\2\2\u018c\u018d\7k\2\2\u018d\u018e\7"+ + "z\2\2\u018e\u018f\7k\2\2\u018f\u0190\7p\2\2\u0190\64\3\2\2\2\u0191\u0192"+ + "\7c\2\2\u0192\u0193\7d\2\2\u0193\u0194\7u\2\2\u0194\u0195\7v\2\2\u0195"+ + "\u0196\7t\2\2\u0196\u0197\7c\2\2\u0197\u0198\7e\2\2\u0198\u0199\7v\2\2"+ + "\u0199\66\3\2\2\2\u019a\u019b\7e\2\2\u019b\u019c\7n\2\2\u019c\u019d\7"+ + "c\2\2\u019d\u019e\7u\2\2\u019e\u019f\7u\2\2\u019f8\3\2\2\2\u01a0\u01a1"+ + "\7y\2\2\u01a1\u01a2\7k\2\2\u01a2\u01a3\7v\2\2\u01a3\u01a4\7j\2\2\u01a4"+ + ":\3\2\2\2\u01a5\u01a6\7u\2\2\u01a6\u01a7\7v\2\2\u01a7\u01a8\7c\2\2\u01a8"+ + "\u01a9\7v\2\2\u01a9\u01aa\7k\2\2\u01aa\u01ab\7e\2\2\u01ab<\3\2\2\2\u01ac"+ + "\u01ad\7g\2\2\u01ad\u01ae\7z\2\2\u01ae\u01af\7v\2\2\u01af\u01b0\7g\2\2"+ + "\u01b0\u01b1\7t\2\2\u01b1\u01b2\7p\2\2\u01b2\u01b3\7c\2\2\u01b3\u01b4"+ + "\7n\2\2\u01b4>\3\2\2\2\u01b5\u01b6\7q\2\2\u01b6\u01b7\7r\2\2\u01b7\u01b8"+ + "\7g\2\2\u01b8\u01b9\7t\2\2\u01b9\u01ba\7c\2\2\u01ba\u01bb\7v\2\2\u01bb"+ + "\u01bc\7q\2\2\u01bc\u01bd\7t\2\2\u01bd@\3\2\2\2\u01be\u01bf\7\u0080\2"+ + "\2\u01bfB\3\2\2\2\u01c0\u01c1\7]\2\2\u01c1\u01c2\7_\2\2\u01c2D\3\2\2\2"+ + "\u01c3\u01c4\7]\2\2\u01c4\u01c5\7_\2\2\u01c5\u01c6\7?\2\2\u01c6F\3\2\2"+ + "\2\u01c7\u01c8\7?\2\2\u01c8\u01c9\7?\2\2\u01c9H\3\2\2\2\u01ca\u01cb\7"+ + "i\2\2\u01cb\u01cc\7g\2\2\u01cc\u01cd\7v\2\2\u01cdJ\3\2\2\2\u01ce\u01cf"+ + "\7u\2\2\u01cf\u01d0\7g\2\2\u01d0\u01d1\7v\2\2\u01d1L\3\2\2\2\u01d2\u01d3"+ + "\7u\2\2\u01d3\u01d4\7w\2\2\u01d4\u01d5\7r\2\2\u01d5\u01d6\7g\2\2\u01d6"+ + "\u01d7\7t\2\2\u01d7N\3\2\2\2\u01d8\u01d9\7h\2\2\u01d9\u01da\7c\2\2\u01da"+ + "\u01db\7e\2\2\u01db\u01dc\7v\2\2\u01dc\u01dd\7q\2\2\u01dd\u01de\7t\2\2"+ + "\u01de\u01df\7{\2\2\u01dfP\3\2\2\2\u01e0\u01e1\7g\2\2\u01e1\u01e2\7z\2"+ + "\2\u01e2\u01e3\7v\2\2\u01e3\u01e4\7g\2\2\u01e4\u01e5\7p\2\2\u01e5\u01e6"+ + "\7f\2\2\u01e6\u01e7\7u\2\2\u01e7R\3\2\2\2\u01e8\u01e9\7k\2\2\u01e9\u01ea"+ + "\7o\2\2\u01ea\u01eb\7r\2\2\u01eb\u01ec\7n\2\2\u01ec\u01ed\7g\2\2\u01ed"+ + "\u01ee\7o\2\2\u01ee\u01ef\7g\2\2\u01ef\u01f0\7p\2\2\u01f0\u01f1\7v\2\2"+ + "\u01f1\u01f2\7u\2\2\u01f2T\3\2\2\2\u01f3\u01f4\7g\2\2\u01f4\u01f5\7p\2"+ + "\2\u01f5\u01f6\7w\2\2\u01f6\u01f7\7o\2\2\u01f7V\3\2\2\2\u01f8\u01f9\7"+ + ">\2\2\u01f9X\3\2\2\2\u01fa\u01fb\7@\2\2\u01fbZ\3\2\2\2\u01fc\u01fd\7B"+ + "\2\2\u01fd\\\3\2\2\2\u01fe\u01ff\7u\2\2\u01ff\u0200\7y\2\2\u0200\u0201"+ + "\7k\2\2\u0201\u0202\7v\2\2\u0202\u0203\7e\2\2\u0203\u0204\7j\2\2\u0204"+ + "^\3\2\2\2\u0205\u0206\7y\2\2\u0206\u0207\7j\2\2\u0207\u0208\7g\2\2\u0208"+ + "\u0209\7p\2\2\u0209`\3\2\2\2\u020a\u020b\7a\2\2\u020bb\3\2\2\2\u020c\u020d"+ + "\7p\2\2\u020d\u020e\7w\2\2\u020e\u020f\7n\2\2\u020f\u0210\7n\2\2\u0210"+ + "d\3\2\2\2\u0211\u0212\7v\2\2\u0212\u0213\7t\2\2\u0213\u0214\7w\2\2\u0214"+ + "\u0215\7g\2\2\u0215f\3\2\2\2\u0216\u0217\7h\2\2\u0217\u0218\7c\2\2\u0218"+ + "\u0219\7n\2\2\u0219\u021a\7u\2\2\u021a\u021b\7g\2\2\u021bh\3\2\2\2\u021c"+ + "\u021d\7&\2\2\u021dj\3\2\2\2\u021e\u021f\7&\2\2\u021f\u0220\7}\2\2\u0220"+ + "l\3\2\2\2\u0221\u0222\7%\2\2\u0222n\3\2\2\2\u0223\u0224\7v\2\2\u0224\u0225"+ + "\7j\2\2\u0225\u0226\7t\2\2\u0226\u0227\7q\2\2\u0227\u0228\7y\2\2\u0228"+ + "p\3\2\2\2\u0229\u022a\7p\2\2\u022a\u022b\7g\2\2\u022b\u022c\7y\2\2\u022c"+ + "r\3\2\2\2\u022d\u022e\7\60\2\2\u022e\u022f\7\60\2\2\u022ft\3\2\2\2\u0230"+ + "\u0231\7,\2\2\u0231\u0232\7?\2\2\u0232v\3\2\2\2\u0233\u0234\7\61\2\2\u0234"+ + "\u0235\7?\2\2\u0235x\3\2\2\2\u0236\u0237\7\u0080\2\2\u0237\u0238\7\61"+ + "\2\2\u0238\u0239\7?\2\2\u0239z\3\2\2\2\u023a\u023b\7\'\2\2\u023b\u023c"+ + "\7?\2\2\u023c|\3\2\2\2\u023d\u023e\7-\2\2\u023e\u023f\7?\2\2\u023f~\3"+ + "\2\2\2\u0240\u0241\7>\2\2\u0241\u0242\7>\2\2\u0242\u0243\7?\2\2\u0243"+ + "\u0080\3\2\2\2\u0244\u0245\7@\2\2\u0245\u0246\7@\2\2\u0246\u0247\7?\2"+ + "\2\u0247\u0082\3\2\2\2\u0248\u0249\7@\2\2\u0249\u024a\7@\2\2\u024a\u024b"+ + "\7@\2\2\u024b\u024c\7?\2\2\u024c\u0084\3\2\2\2\u024d\u024e\7(\2\2\u024e"+ + "\u024f\7?\2\2\u024f\u0086\3\2\2\2\u0250\u0251\7`\2\2\u0251\u0252\7?\2"+ + "\2\u0252\u0088\3\2\2\2\u0253\u0254\7~\2\2\u0254\u0255\7?\2\2\u0255\u008a"+ + "\3\2\2\2\u0256\u0257\7A\2\2\u0257\u0258\7A\2\2\u0258\u0259\7?\2\2\u0259"+ + "\u008c\3\2\2\2\u025a\u025b\7A\2\2\u025b\u008e\3\2\2\2\u025c\u025d\7A\2"+ + "\2\u025d\u025e\7A\2\2\u025e\u0090\3\2\2\2\u025f\u0260\7~\2\2\u0260\u0261"+ + "\7~\2\2\u0261\u0092\3\2\2\2\u0262\u0263\7(\2\2\u0263\u0264\7(\2\2\u0264"+ + "\u0094\3\2\2\2\u0265\u0266\7#\2\2\u0266\u0267\7?\2\2\u0267\u0096\3\2\2"+ + "\2\u0268\u0269\7@\2\2\u0269\u026a\7?\2\2\u026a\u0098\3\2\2\2\u026b\u026c"+ + "\7>\2\2\u026c\u026d\7?\2\2\u026d\u009a\3\2\2\2\u026e\u026f\7~\2\2\u026f"+ + "\u009c\3\2\2\2\u0270\u0271\7`\2\2\u0271\u009e\3\2\2\2\u0272\u0273\7(\2"+ + "\2\u0273\u00a0\3\2\2\2\u0274\u0275\7>\2\2\u0275\u0276\7>\2\2\u0276\u00a2"+ + "\3\2\2\2\u0277\u0278\7@\2\2\u0278\u0279\7@\2\2\u0279\u00a4\3\2\2\2\u027a"+ + "\u027b\7@\2\2\u027b\u027c\7@\2\2\u027c\u027d\7@\2\2\u027d\u00a6\3\2\2"+ + "\2\u027e\u027f\7-\2\2\u027f\u00a8\3\2\2\2\u0280\u0281\7/\2\2\u0281\u00aa"+ + "\3\2\2\2\u0282\u0283\7,\2\2\u0283\u00ac\3\2\2\2\u0284\u0285\7\61\2\2\u0285"+ + "\u00ae\3\2\2\2\u0286\u0287\7\'\2\2\u0287\u00b0\3\2\2\2\u0288\u0289\7\u0080"+ + "\2\2\u0289\u028a\7\61\2\2\u028a\u00b2\3\2\2\2\u028b\u028c\7#\2\2\u028c"+ + "\u00b4\3\2\2\2\u028d\u028e\7c\2\2\u028e\u028f\7y\2\2\u028f\u0290\7c\2"+ + "\2\u0290\u0291\7k\2\2\u0291\u0292\7v\2\2\u0292\u00b6\3\2\2\2\u0293\u0294"+ + "\7-\2\2\u0294\u0295\7-\2\2\u0295\u00b8\3\2\2\2\u0296\u0297\7/\2\2\u0297"+ + "\u0298\7/\2\2\u0298\u00ba\3\2\2\2\u0299\u029a\7A\2\2\u029a\u029b\7\60"+ + "\2\2\u029b\u00bc\3\2\2\2\u029c\u029d\7k\2\2\u029d\u029e\7u\2\2\u029e\u00be"+ + "\3\2\2\2\u029f\u02a0\7c\2\2\u02a0\u02a1\7u\2\2\u02a1\u00c0\3\2\2\2\u02a2"+ + "\u02a3\7k\2\2\u02a3\u02a4\7h\2\2\u02a4\u00c2\3\2\2\2\u02a5\u02a6\7g\2"+ + "\2\u02a6\u02a7\7n\2\2\u02a7\u02a8\7u\2\2\u02a8\u02a9\7g\2\2\u02a9\u00c4"+ + "\3\2\2\2\u02aa\u02ab\7e\2\2\u02ab\u02ac\7c\2\2\u02ac\u02ad\7u\2\2\u02ad"+ + "\u02ae\7g\2\2\u02ae\u00c6\3\2\2\2\u02af\u02b0\7h\2\2\u02b0\u02b1\7q\2"+ + "\2\u02b1\u02b2\7t\2\2\u02b2\u00c8\3\2\2\2\u02b3\u02b4\7k\2\2\u02b4\u02b5"+ + "\7p\2\2\u02b5\u00ca\3\2\2\2\u02b6\u02b7\7y\2\2\u02b7\u02b8\7j\2\2\u02b8"+ + "\u02b9\7k\2\2\u02b9\u02ba\7n\2\2\u02ba\u02bb\7g\2\2\u02bb\u00cc\3\2\2"+ + "\2\u02bc\u02bd\7f\2\2\u02bd\u02be\7q\2\2\u02be\u00ce\3\2\2\2\u02bf\u02c0"+ + "\7f\2\2\u02c0\u02c1\7g\2\2\u02c1\u02c2\7h\2\2\u02c2\u02c3\7c\2\2\u02c3"+ + "\u02c4\7w\2\2\u02c4\u02c5\7n\2\2\u02c5\u02c6\7v\2\2\u02c6\u00d0\3\2\2"+ + "\2\u02c7\u02c8\7t\2\2\u02c8\u02c9\7g\2\2\u02c9\u02ca\7v\2\2\u02ca\u02cb"+ + "\7j\2\2\u02cb\u02cc\7t\2\2\u02cc\u02cd\7q\2\2\u02cd\u02ce\7y\2\2\u02ce"+ + "\u00d2\3\2\2\2\u02cf\u02d0\7v\2\2\u02d0\u02d1\7t\2\2\u02d1\u02d2\7{\2"+ + "\2\u02d2\u00d4\3\2\2\2\u02d3\u02d4\7q\2\2\u02d4\u02d5\7p\2\2\u02d5\u00d6"+ + "\3\2\2\2\u02d6\u02d7\7e\2\2\u02d7\u02d8\7c\2\2\u02d8\u02d9\7v\2\2\u02d9"+ + "\u02da\7e\2\2\u02da\u02db\7j\2\2\u02db\u00d8\3\2\2\2\u02dc\u02dd\7h\2"+ + "\2\u02dd\u02de\7k\2\2\u02de\u02df\7p\2\2\u02df\u02e0\7c\2\2\u02e0\u02e1"+ + "\7n\2\2\u02e1\u02e2\7n\2\2\u02e2\u02e3\7{\2\2\u02e3\u00da\3\2\2\2\u02e4"+ + "\u02e5\7t\2\2\u02e5\u02e6\7g\2\2\u02e6\u02e7\7v\2\2\u02e7\u02e8\7w\2\2"+ + "\u02e8\u02e9\7t\2\2\u02e9\u02ea\7p\2\2\u02ea\u00dc\3\2\2\2\u02eb\u02ec"+ + "\7d\2\2\u02ec\u02ed\7t\2\2\u02ed\u02ee\7g\2\2\u02ee\u02ef\7c\2\2\u02ef"+ + "\u02f0\7m\2\2\u02f0\u00de\3\2\2\2\u02f1\u02f2\7e\2\2\u02f2\u02f3\7q\2"+ + "\2\u02f3\u02f4\7p\2\2\u02f4\u02f5\7v\2\2\u02f5\u02f6\7k\2\2\u02f6\u02f7"+ + "\7p\2\2\u02f7\u02f8\7w\2\2\u02f8\u02f9\7g\2\2\u02f9\u00e0\3\2\2\2\u02fa"+ + "\u02fb\7{\2\2\u02fb\u02fc\7k\2\2\u02fc\u02fd\7g\2\2\u02fd\u02fe\7n\2\2"+ + "\u02fe\u02ff\7f\2\2\u02ff\u00e2\3\2\2\2\u0300\u0301\7{\2\2\u0301\u0302"+ + "\7k\2\2\u0302\u0303\7g\2\2\u0303\u0304\7n\2\2\u0304\u0305\7f\2\2\u0305"+ + "\u0306\7,\2\2\u0306\u00e4\3\2\2\2\u0307\u0308\7c\2\2\u0308\u0309\7u\2"+ + "\2\u0309\u030a\7u\2\2\u030a\u030b\7g\2\2\u030b\u030c\7t\2\2\u030c\u030d"+ + "\7v\2\2\u030d\u00e6\3\2\2\2\u030e\u030f\7%\2\2\u030f\u0310\7#\2\2\u0310"+ + "\u00e8\3\2\2\2\u0311\u0312\7n\2\2\u0312\u0313\7k\2\2\u0313\u0314\7d\2"+ + "\2\u0314\u0315\7t\2\2\u0315\u0316\7c\2\2\u0316\u0317\7t\2\2\u0317\u0318"+ + "\7{\2\2\u0318\u00ea\3\2\2\2\u0319\u031a\7k\2\2\u031a\u031b\7o\2\2\u031b"+ + "\u031c\7r\2\2\u031c\u031d\7q\2\2\u031d\u031e\7t\2\2\u031e\u031f\7v\2\2"+ + "\u031f\u00ec\3\2\2\2\u0320\u0321\7u\2\2\u0321\u0322\7j\2\2\u0322\u0323"+ + "\7q\2\2\u0323\u0324\7y\2\2\u0324\u00ee\3\2\2\2\u0325\u0326\7j\2\2\u0326"+ + "\u0327\7k\2\2\u0327\u0328\7f\2\2\u0328\u0329\7g\2\2\u0329\u00f0\3\2\2"+ + "\2\u032a\u032b\7g\2\2\u032b\u032c\7z\2\2\u032c\u032d\7r\2\2\u032d\u032e"+ + "\7q\2\2\u032e\u032f\7t\2\2\u032f\u0330\7v\2\2\u0330\u00f2\3\2\2\2\u0331"+ + "\u0332\7r\2\2\u0332\u0333\7c\2\2\u0333\u0334\7t\2\2\u0334\u0335\7v\2\2"+ + "\u0335\u00f4\3\2\2\2\u0336\u0337\7q\2\2\u0337\u0338\7h\2\2\u0338\u00f6"+ + "\3\2\2\2\u0339\u033a\7v\2\2\u033a\u033b\7{\2\2\u033b\u033c\7r\2\2\u033c"+ + "\u033d\7g\2\2\u033d\u033e\7f\2\2\u033e\u033f\7g\2\2\u033f\u0340\7h\2\2"+ + "\u0340\u00f8\3\2\2\2\u0341\u0343\t\2\2\2\u0342\u0341\3\2\2\2\u0343\u0344"+ + "\3\2\2\2\u0344\u0342\3\2\2\2\u0344\u0345\3\2\2\2\u0345\u0346\3\2\2\2\u0346"+ + "\u0347\b}\2\2\u0347\u00fa\3\2\2\2\u0348\u034a\5\u011f\u0090\2\u0349\u0348"+ + "\3\2\2\2\u034a\u034b\3\2\2\2\u034b\u0349\3\2\2\2\u034b\u034c\3\2\2\2\u034c"+ + "\u0353\3\2\2\2\u034d\u034f\7\60\2\2\u034e\u0350\5\u011f\u0090\2\u034f"+ + "\u034e\3\2\2\2\u0350\u0351\3\2\2\2\u0351\u034f\3\2\2\2\u0351\u0352\3\2"+ + "\2\2\u0352\u0354\3\2\2\2\u0353\u034d\3\2\2\2\u0353\u0354\3\2\2\2\u0354"+ + "\u0356\3\2\2\2\u0355\u0357\5\u00fd\177\2\u0356\u0355\3\2\2\2\u0356\u0357"+ + "\3\2\2\2\u0357\u0362\3\2\2\2\u0358\u035a\7\60\2\2\u0359\u035b\5\u011f"+ + "\u0090\2\u035a\u0359\3\2\2\2\u035b\u035c\3\2\2\2\u035c\u035a\3\2\2\2\u035c"+ + "\u035d\3\2\2\2\u035d\u035f\3\2\2\2\u035e\u0360\5\u00fd\177\2\u035f\u035e"+ + "\3\2\2\2\u035f\u0360\3\2\2\2\u0360\u0362\3\2\2\2\u0361\u0349\3\2\2\2\u0361"+ + "\u0358\3\2\2\2\u0362\u00fc\3\2\2\2\u0363\u0365\t\3\2\2\u0364\u0366\t\4"+ + "\2\2\u0365\u0364\3\2\2\2\u0365\u0366\3\2\2\2\u0366\u0368\3\2\2\2\u0367"+ + "\u0369\5\u011f\u0090\2\u0368\u0367\3\2\2\2\u0369\u036a\3\2\2\2\u036a\u0368"+ + "\3\2\2\2\u036a\u036b\3\2\2\2\u036b\u00fe\3\2\2\2\u036c\u036d\7\62\2\2"+ + "\u036d\u036e\7z\2\2\u036e\u0370\3\2\2\2\u036f\u0371\5\u0101\u0081\2\u0370"+ + "\u036f\3\2\2\2\u0371\u0372\3\2\2\2\u0372\u0370\3\2\2\2\u0372\u0373\3\2"+ + "\2\2\u0373\u037d\3\2\2\2\u0374\u0375\7\62\2\2\u0375\u0376\7Z\2\2\u0376"+ + "\u0378\3\2\2\2\u0377\u0379\5\u0101\u0081\2\u0378\u0377\3\2\2\2\u0379\u037a"+ + "\3\2\2\2\u037a\u0378\3\2\2\2\u037a\u037b\3\2\2\2\u037b\u037d\3\2\2\2\u037c"+ + "\u036c\3\2\2\2\u037c\u0374\3\2\2\2\u037d\u0100\3\2\2\2\u037e\u0381\t\5"+ + "\2\2\u037f\u0381\5\u011f\u0090\2\u0380\u037e\3\2\2\2\u0380\u037f\3\2\2"+ + "\2\u0381\u0102\3\2\2\2\u0382\u0386\7$\2\2\u0383\u0385\5\u0105\u0083\2"+ + "\u0384\u0383\3\2\2\2\u0385\u0388\3\2\2\2\u0386\u0384\3\2\2\2\u0386\u0387"+ + "\3\2\2\2\u0387\u0389\3\2\2\2\u0388\u0386\3\2\2\2\u0389\u03a7\7$\2\2\u038a"+ + "\u038e\7)\2\2\u038b\u038d\5\u0107\u0084\2\u038c\u038b\3\2\2\2\u038d\u0390"+ + "\3\2\2\2\u038e\u038c\3\2\2\2\u038e\u038f\3\2\2\2\u038f\u0391\3\2\2\2\u0390"+ + "\u038e\3\2\2\2\u0391\u03a7\7)\2\2\u0392\u0393\7t\2\2\u0393\u0394\7)\2"+ + "\2\u0394\u0398\3\2\2\2\u0395\u0397\n\6\2\2\u0396\u0395\3\2\2\2\u0397\u039a"+ + "\3\2\2\2\u0398\u0396\3\2\2\2\u0398\u0399\3\2\2\2\u0399\u039b\3\2\2\2\u039a"+ + "\u0398\3\2\2\2\u039b\u03a7\7)\2\2\u039c\u039d\7t\2\2\u039d\u039e\7$\2"+ + "\2\u039e\u03a2\3\2\2\2\u039f\u03a1\n\7\2\2\u03a0\u039f\3\2\2\2\u03a1\u03a4"+ + "\3\2\2\2\u03a2\u03a0\3\2\2\2\u03a2\u03a3\3\2\2\2\u03a3\u03a5\3\2\2\2\u03a4"+ + "\u03a2\3\2\2\2\u03a5\u03a7\7$\2\2\u03a6\u0382\3\2\2\2\u03a6\u038a\3\2"+ + "\2\2\u03a6\u0392\3\2\2\2\u03a6\u039c\3\2\2\2\u03a7\u0104\3\2\2\2\u03a8"+ + "\u03ac\n\b\2\2\u03a9\u03aa\7^\2\2\u03aa\u03ac\n\t\2\2\u03ab\u03a8\3\2"+ + "\2\2\u03ab\u03a9\3\2\2\2\u03ac\u0106\3\2\2\2\u03ad\u03b1\n\n\2\2\u03ae"+ + "\u03af\7^\2\2\u03af\u03b1\n\t\2\2\u03b0\u03ad\3\2\2\2\u03b0\u03ae\3\2"+ + "\2\2\u03b1\u0108\3\2\2\2\u03b2\u03b3\7$\2\2\u03b3\u03b4\7$\2\2\u03b4\u03b5"+ + "\7$\2\2\u03b5\u03b9\3\2\2\2\u03b6\u03b8\5\u010b\u0086\2\u03b7\u03b6\3"+ + "\2\2\2\u03b8\u03bb\3\2\2\2\u03b9\u03b7\3\2\2\2\u03b9\u03ba\3\2\2\2\u03ba"+ + "\u03bc\3\2\2\2\u03bb\u03b9\3\2\2\2\u03bc\u03bd\7$\2\2\u03bd\u03be\7$\2"+ + "\2\u03be\u03f5\7$\2\2\u03bf\u03c0\7)\2\2\u03c0\u03c1\7)\2\2\u03c1\u03c2"+ + "\7)\2\2\u03c2\u03c6\3\2\2\2\u03c3\u03c5\5\u010d\u0087\2\u03c4\u03c3\3"+ + "\2\2\2\u03c5\u03c8\3\2\2\2\u03c6\u03c4\3\2\2\2\u03c6\u03c7\3\2\2\2\u03c7"+ + "\u03c9\3\2\2\2\u03c8\u03c6\3\2\2\2\u03c9\u03ca\7)\2\2\u03ca\u03cb\7)\2"+ + "\2\u03cb\u03f5\7)\2\2\u03cc\u03cd\7t\2\2\u03cd\u03ce\7$\2\2\u03ce\u03cf"+ + "\7$\2\2\u03cf\u03d0\7$\2\2\u03d0\u03da\3\2\2\2\u03d1\u03d9\n\13\2\2\u03d2"+ + "\u03d3\7$\2\2\u03d3\u03d9\n\13\2\2\u03d4\u03d5\7$\2\2\u03d5\u03d6\7$\2"+ + "\2\u03d6\u03d7\3\2\2\2\u03d7\u03d9\n\13\2\2\u03d8\u03d1\3\2\2\2\u03d8"+ + "\u03d2\3\2\2\2\u03d8\u03d4\3\2\2\2\u03d9\u03dc\3\2\2\2\u03da\u03d8\3\2"+ + "\2\2\u03da\u03db\3\2\2\2\u03db\u03dd\3\2\2\2\u03dc\u03da\3\2\2\2\u03dd"+ + "\u03de\7$\2\2\u03de\u03df\7$\2\2\u03df\u03f5\7$\2\2\u03e0\u03e1\7t\2\2"+ + "\u03e1\u03e2\7)\2\2\u03e2\u03e3\7)\2\2\u03e3\u03e4\7)\2\2\u03e4\u03ee"+ + "\3\2\2\2\u03e5\u03ed\n\f\2\2\u03e6\u03e7\7)\2\2\u03e7\u03ed\n\f\2\2\u03e8"+ + "\u03e9\7)\2\2\u03e9\u03ea\7)\2\2\u03ea\u03eb\3\2\2\2\u03eb\u03ed\n\f\2"+ + "\2\u03ec\u03e5\3\2\2\2\u03ec\u03e6\3\2\2\2\u03ec\u03e8\3\2\2\2\u03ed\u03f0"+ + "\3\2\2\2\u03ee\u03ec\3\2\2\2\u03ee\u03ef\3\2\2\2\u03ef\u03f1\3\2\2\2\u03f0"+ + "\u03ee\3\2\2\2\u03f1\u03f2\7)\2\2\u03f2\u03f3\7)\2\2\u03f3\u03f5\7)\2"+ + "\2\u03f4\u03b2\3\2\2\2\u03f4\u03bf\3\2\2\2\u03f4\u03cc\3\2\2\2\u03f4\u03e0"+ + "\3\2\2\2\u03f5\u010a\3\2\2\2\u03f6\u03fe\n\r\2\2\u03f7\u03f8\7$\2\2\u03f8"+ + "\u03fe\n\13\2\2\u03f9\u03fa\7$\2\2\u03fa\u03fb\7$\2\2\u03fb\u03fc\3\2"+ + "\2\2\u03fc\u03fe\n\13\2\2\u03fd\u03f6\3\2\2\2\u03fd\u03f7\3\2\2\2\u03fd"+ + "\u03f9\3\2\2\2\u03fe\u010c\3\2\2\2\u03ff\u0407\n\16\2\2\u0400\u0401\7"+ + ")\2\2\u0401\u0407\n\f\2\2\u0402\u0403\7)\2\2\u0403\u0404\7)\2\2\u0404"+ + "\u0405\3\2\2\2\u0405\u0407\n\f\2\2\u0406\u03ff\3\2\2\2\u0406\u0400\3\2"+ + "\2\2\u0406\u0402\3\2\2\2\u0407\u010e\3\2\2\2\u0408\u040c\t\t\2\2\u0409"+ + "\u040a\7\17\2\2\u040a\u040c\7\f\2\2\u040b\u0408\3\2\2\2\u040b\u0409\3"+ + "\2\2\2\u040c\u0110\3\2\2\2\u040d\u0411\5\u0117\u008c\2\u040e\u0410\5\u0119"+ + "\u008d\2\u040f\u040e\3\2\2\2\u0410\u0413\3\2\2\2\u0411\u040f\3\2\2\2\u0411"+ + "\u0412\3\2\2\2\u0412\u0112\3\2\2\2\u0413\u0411\3\2\2\2\u0414\u0418\5\u0115"+ + "\u008b\2\u0415\u0417\5\u011b\u008e\2\u0416\u0415\3\2\2\2\u0417\u041a\3"+ + "\2\2\2\u0418\u0416\3\2\2\2\u0418\u0419\3\2\2\2\u0419\u0114\3\2\2\2\u041a"+ + "\u0418\3\2\2\2\u041b\u041e\5\u0117\u008c\2\u041c\u041e\7&\2\2\u041d\u041b"+ + "\3\2\2\2\u041d\u041c\3\2\2\2\u041e\u0116\3\2\2\2\u041f\u0422\5\u011d\u008f"+ + "\2\u0420\u0422\7a\2\2\u0421\u041f\3\2\2\2\u0421\u0420\3\2\2\2\u0422\u0118"+ + "\3\2\2\2\u0423\u0426\5\u0117\u008c\2\u0424\u0426\5\u011f\u0090\2\u0425"+ + "\u0423\3\2\2\2\u0425\u0424\3\2\2\2\u0426\u011a\3\2\2\2\u0427\u042a\5\u0115"+ + "\u008b\2\u0428\u042a\5\u011f\u0090\2\u0429\u0427\3\2\2\2\u0429\u0428\3"+ + "\2\2\2\u042a\u011c\3\2\2\2\u042b\u042d\t\17\2\2\u042c\u042b\3\2\2\2\u042d"+ + "\u011e\3\2\2\2\u042e\u042f\t\20\2\2\u042f\u0120\3\2\2\2\u0430\u0431\7"+ + "\61\2\2\u0431\u0432\7\61\2\2\u0432\u0436\3\2\2\2\u0433\u0435\n\t\2\2\u0434"+ + "\u0433\3\2\2\2\u0435\u0438\3\2\2\2\u0436\u0434\3\2\2\2\u0436\u0437\3\2"+ + "\2\2\u0437\u0439\3\2\2\2\u0438\u0436\3\2\2\2\u0439\u043a\b\u0091\3\2\u043a"+ + "\u0122\3\2\2\2\u043b\u043c\7\61\2\2\u043c\u043d\7,\2\2\u043d\u0441\3\2"+ + "\2\2\u043e\u0440\13\2\2\2\u043f\u043e\3\2\2\2\u0440\u0443\3\2\2\2\u0441"+ + "\u0442\3\2\2\2\u0441\u043f\3\2\2\2\u0442\u0444\3\2\2\2\u0443\u0441\3\2"+ + "\2\2\u0444\u0445\7,\2\2\u0445\u0446\7\61\2\2\u0446\u0447\3\2\2\2\u0447"+ + "\u0448\b\u0092\3\2\u0448\u0124\3\2\2\2+\2\u0344\u034b\u0351\u0353\u0356"+ + "\u035c\u035f\u0361\u0365\u036a\u0372\u037a\u037c\u0380\u0386\u038e\u0398"+ + "\u03a2\u03a6\u03ab\u03b0\u03b9\u03c6\u03d8\u03da\u03ec\u03ee\u03f4\u03fd"+ + "\u0406\u040b\u0411\u0418\u041d\u0421\u0425\u0429\u042c\u0436\u0441\4\b"+ + "\2\2\2\4\2"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/generated/Dart2Listener.java b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/generated/Dart2Listener.java index 82fec15..d84e29c 100644 --- a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/generated/Dart2Listener.java +++ b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/generated/Dart2Listener.java @@ -1,21 +1,5 @@ -/* - * SonarQube Flutter Plugin - Enables analysis of Dart and Flutter projects into SonarQube. - * Copyright © 2020 inside|app (contact@insideapp.fr) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ -package fr.insideapp.sonarqube.dart.lang.antlr.generated;// Generated from Dart2.g4 by ANTLR 4.8 +// Generated from dart-lang/src/main/antlr/Dart2.g4 by ANTLR 4.8 +package fr.insideapp.sonarqube.dart.lang.antlr.generated; import org.antlr.v4.runtime.tree.ParseTreeListener; /** @@ -263,6 +247,16 @@ public interface Dart2Listener extends ParseTreeListener { * @param ctx the parse tree */ void exitDefaultNamedParameter(Dart2Parser.DefaultNamedParameterContext ctx); + /** + * Enter a parse tree produced by {@link Dart2Parser#classModifier}. + * @param ctx the parse tree + */ + void enterClassModifier(Dart2Parser.ClassModifierContext ctx); + /** + * Exit a parse tree produced by {@link Dart2Parser#classModifier}. + * @param ctx the parse tree + */ + void exitClassModifier(Dart2Parser.ClassModifierContext ctx); /** * Enter a parse tree produced by {@link Dart2Parser#classDefinition}. * @param ctx the parse tree @@ -593,6 +587,136 @@ public interface Dart2Listener extends ParseTreeListener { * @param ctx the parse tree */ void exitPrimary(Dart2Parser.PrimaryContext ctx); + /** + * Enter a parse tree produced by {@link Dart2Parser#recordLiteral}. + * @param ctx the parse tree + */ + void enterRecordLiteral(Dart2Parser.RecordLiteralContext ctx); + /** + * Exit a parse tree produced by {@link Dart2Parser#recordLiteral}. + * @param ctx the parse tree + */ + void exitRecordLiteral(Dart2Parser.RecordLiteralContext ctx); + /** + * Enter a parse tree produced by {@link Dart2Parser#recordField}. + * @param ctx the parse tree + */ + void enterRecordField(Dart2Parser.RecordFieldContext ctx); + /** + * Exit a parse tree produced by {@link Dart2Parser#recordField}. + * @param ctx the parse tree + */ + void exitRecordField(Dart2Parser.RecordFieldContext ctx); + /** + * Enter a parse tree produced by {@link Dart2Parser#recordType}. + * @param ctx the parse tree + */ + void enterRecordType(Dart2Parser.RecordTypeContext ctx); + /** + * Exit a parse tree produced by {@link Dart2Parser#recordType}. + * @param ctx the parse tree + */ + void exitRecordType(Dart2Parser.RecordTypeContext ctx); + /** + * Enter a parse tree produced by {@link Dart2Parser#recordTypeField}. + * @param ctx the parse tree + */ + void enterRecordTypeField(Dart2Parser.RecordTypeFieldContext ctx); + /** + * Exit a parse tree produced by {@link Dart2Parser#recordTypeField}. + * @param ctx the parse tree + */ + void exitRecordTypeField(Dart2Parser.RecordTypeFieldContext ctx); + /** + * Enter a parse tree produced by {@link Dart2Parser#switchExpression}. + * @param ctx the parse tree + */ + void enterSwitchExpression(Dart2Parser.SwitchExpressionContext ctx); + /** + * Exit a parse tree produced by {@link Dart2Parser#switchExpression}. + * @param ctx the parse tree + */ + void exitSwitchExpression(Dart2Parser.SwitchExpressionContext ctx); + /** + * Enter a parse tree produced by {@link Dart2Parser#switchExpressionCase}. + * @param ctx the parse tree + */ + void enterSwitchExpressionCase(Dart2Parser.SwitchExpressionCaseContext ctx); + /** + * Exit a parse tree produced by {@link Dart2Parser#switchExpressionCase}. + * @param ctx the parse tree + */ + void exitSwitchExpressionCase(Dart2Parser.SwitchExpressionCaseContext ctx); + /** + * Enter a parse tree produced by {@link Dart2Parser#guardedPattern}. + * @param ctx the parse tree + */ + void enterGuardedPattern(Dart2Parser.GuardedPatternContext ctx); + /** + * Exit a parse tree produced by {@link Dart2Parser#guardedPattern}. + * @param ctx the parse tree + */ + void exitGuardedPattern(Dart2Parser.GuardedPatternContext ctx); + /** + * Enter a parse tree produced by {@link Dart2Parser#pattern}. + * @param ctx the parse tree + */ + void enterPattern(Dart2Parser.PatternContext ctx); + /** + * Exit a parse tree produced by {@link Dart2Parser#pattern}. + * @param ctx the parse tree + */ + void exitPattern(Dart2Parser.PatternContext ctx); + /** + * Enter a parse tree produced by {@link Dart2Parser#constantPattern}. + * @param ctx the parse tree + */ + void enterConstantPattern(Dart2Parser.ConstantPatternContext ctx); + /** + * Exit a parse tree produced by {@link Dart2Parser#constantPattern}. + * @param ctx the parse tree + */ + void exitConstantPattern(Dart2Parser.ConstantPatternContext ctx); + /** + * Enter a parse tree produced by {@link Dart2Parser#typeTestPattern}. + * @param ctx the parse tree + */ + void enterTypeTestPattern(Dart2Parser.TypeTestPatternContext ctx); + /** + * Exit a parse tree produced by {@link Dart2Parser#typeTestPattern}. + * @param ctx the parse tree + */ + void exitTypeTestPattern(Dart2Parser.TypeTestPatternContext ctx); + /** + * Enter a parse tree produced by {@link Dart2Parser#wildcardPattern}. + * @param ctx the parse tree + */ + void enterWildcardPattern(Dart2Parser.WildcardPatternContext ctx); + /** + * Exit a parse tree produced by {@link Dart2Parser#wildcardPattern}. + * @param ctx the parse tree + */ + void exitWildcardPattern(Dart2Parser.WildcardPatternContext ctx); + /** + * Enter a parse tree produced by {@link Dart2Parser#variablePattern}. + * @param ctx the parse tree + */ + void enterVariablePattern(Dart2Parser.VariablePatternContext ctx); + /** + * Exit a parse tree produced by {@link Dart2Parser#variablePattern}. + * @param ctx the parse tree + */ + void exitVariablePattern(Dart2Parser.VariablePatternContext ctx); + /** + * Enter a parse tree produced by {@link Dart2Parser#parenthesizedPattern}. + * @param ctx the parse tree + */ + void enterParenthesizedPattern(Dart2Parser.ParenthesizedPatternContext ctx); + /** + * Exit a parse tree produced by {@link Dart2Parser#parenthesizedPattern}. + * @param ctx the parse tree + */ + void exitParenthesizedPattern(Dart2Parser.ParenthesizedPatternContext ctx); /** * Enter a parse tree produced by {@link Dart2Parser#literal}. * @param ctx the parse tree diff --git a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/generated/Dart2Parser.java b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/generated/Dart2Parser.java index ef1d16d..145af76 100644 --- a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/generated/Dart2Parser.java +++ b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/generated/Dart2Parser.java @@ -1,33 +1,13 @@ -/* - * SonarQube Flutter Plugin - Enables analysis of Dart and Flutter projects into SonarQube. - * Copyright © 2020 inside|app (contact@insideapp.fr) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ -package fr.insideapp.sonarqube.dart.lang.antlr.generated;// Generated from Dart2.g4 by ANTLR 4.8 - -import org.antlr.v4.runtime.*; -import org.antlr.v4.runtime.atn.ATN; -import org.antlr.v4.runtime.atn.ATNDeserializer; -import org.antlr.v4.runtime.atn.ParserATNSimulator; -import org.antlr.v4.runtime.atn.PredictionContextCache; +// Generated from dart-lang/src/main/antlr/Dart2.g4 by ANTLR 4.8 +package fr.insideapp.sonarqube.dart.lang.antlr.generated; +import org.antlr.v4.runtime.atn.*; import org.antlr.v4.runtime.dfa.DFA; -import org.antlr.v4.runtime.tree.ParseTreeListener; -import org.antlr.v4.runtime.tree.ParseTreeVisitor; -import org.antlr.v4.runtime.tree.TerminalNode; - +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.misc.*; +import org.antlr.v4.runtime.tree.*; import java.util.List; +import java.util.Iterator; +import java.util.ArrayList; @SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"}) public class Dart2Parser extends Parser { @@ -53,9 +33,10 @@ public class Dart2Parser extends Parser { T__94=95, T__95=96, T__96=97, T__97=98, T__98=99, T__99=100, T__100=101, T__101=102, T__102=103, T__103=104, T__104=105, T__105=106, T__106=107, T__107=108, T__108=109, T__109=110, T__110=111, T__111=112, T__112=113, - T__113=114, T__114=115, T__115=116, T__116=117, WHITESPACE=118, NUMBER=119, - HEX_NUMBER=120, SingleLineString=121, MultiLineString=122, NEWLINE=123, - IDENTIFIER=124, SINGLE_LINE_COMMENT=125, MULTI_LINE_COMMENT=126; + T__113=114, T__114=115, T__115=116, T__116=117, T__117=118, T__118=119, + T__119=120, T__120=121, T__121=122, T__122=123, WHITESPACE=124, NUMBER=125, + HEX_NUMBER=126, SingleLineString=127, MultiLineString=128, NEWLINE=129, + IDENTIFIER=130, SINGLE_LINE_COMMENT=131, MULTI_LINE_COMMENT=132; public static final int RULE_compilationUnit = 0, RULE_variableDeclaration = 1, RULE_declaredIdentifier = 2, RULE_finalConstVarOrType = 3, RULE_varOrType = 4, RULE_initializedVariableDeclaration = 5, @@ -65,56 +46,60 @@ public class Dart2Parser extends Parser { RULE_optionalFormalParameters = 15, RULE_optionalPositionalFormalParameters = 16, RULE_namedFormalParameters = 17, RULE_normalFormalParameter = 18, RULE_functionFormalParameter = 19, RULE_simpleFormalParameter = 20, RULE_fieldFormalParameter = 21, RULE_defaultFormalParameter = 22, - RULE_defaultNamedParameter = 23, RULE_classDefinition = 24, RULE_mixins = 25, - RULE_classMemberDefinition = 26, RULE_methodSignature = 27, RULE_declaration = 28, - RULE_staticFinalDeclarationList = 29, RULE_staticFinalDeclaration = 30, - RULE_operatorSignature = 31, RULE_operator = 32, RULE_binaryOperator = 33, - RULE_getterSignature = 34, RULE_setterSignature = 35, RULE_constructorSignature = 36, - RULE_redirection = 37, RULE_initializers = 38, RULE_initializerListEntry = 39, - RULE_fieldInitializer = 40, RULE_factoryConstructorSignature = 41, RULE_redirectingFactoryConstructorSignature = 42, - RULE_constantConstructorSignature = 43, RULE_superclass = 44, RULE_interfaces = 45, - RULE_mixinApplicationClass = 46, RULE_mixinApplication = 47, RULE_enumType = 48, - RULE_enumEntry = 49, RULE_typeParameter = 50, RULE_typeParameters = 51, - RULE_metadata = 52, RULE_expression = 53, RULE_expressionWithoutCascade = 54, - RULE_expressionList = 55, RULE_primary = 56, RULE_literal = 57, RULE_nullLiteral = 58, - RULE_numericLiteral = 59, RULE_booleanLiteral = 60, RULE_stringLiteral = 61, - RULE_stringInterpolation = 62, RULE_symbolLiteral = 63, RULE_listLiteral = 64, - RULE_mapLiteral = 65, RULE_mapLiteralEntry = 66, RULE_throwExpression = 67, - RULE_throwExpressionWithoutCascade = 68, RULE_functionExpression = 69, - RULE_thisExpression = 70, RULE_nayaExpression = 71, RULE_constObjectExpression = 72, - RULE_arguments = 73, RULE_argumentList = 74, RULE_namedArgument = 75, - RULE_cascadeSection = 76, RULE_cascadeSelector = 77, RULE_argumentPart = 78, - RULE_assignmentOperator = 79, RULE_compoundAssignmentOperator = 80, RULE_conditionalExpression = 81, - RULE_ifNullExpression = 82, RULE_logicalOrExpression = 83, RULE_logicalAndExpression = 84, - RULE_equalityExpression = 85, RULE_equalityOperator = 86, RULE_relationalExpression = 87, - RULE_relationalOperator = 88, RULE_bitwiseOrExpression = 89, RULE_bitwiseXorExpression = 90, - RULE_bitwiseAndExpression = 91, RULE_bitwiseOperator = 92, RULE_shiftExpression = 93, - RULE_shiftOperator = 94, RULE_additiveExpression = 95, RULE_additiveOperator = 96, - RULE_multiplicativeExpression = 97, RULE_multiplicativeOperator = 98, - RULE_unaryExpression = 99, RULE_prefixOperator = 100, RULE_minusOperator = 101, - RULE_negationOperator = 102, RULE_tildeOperator = 103, RULE_awaitExpression = 104, - RULE_postfixExpression = 105, RULE_postfixOperator = 106, RULE_selector = 107, - RULE_incrementOperator = 108, RULE_assignableExpression = 109, RULE_unconditionalAssignableSelector = 110, - RULE_assignableSelector = 111, RULE_identifier = 112, RULE_qualified = 113, - RULE_typeTest = 114, RULE_isOperator = 115, RULE_typeCast = 116, RULE_asOperator = 117, - RULE_statements = 118, RULE_statement = 119, RULE_nonLabledStatment = 120, - RULE_expressionStatement = 121, RULE_localVariableDeclaration = 122, RULE_localFunctionDeclaration = 123, - RULE_ifStatement = 124, RULE_forStatement = 125, RULE_forLoopParts = 126, - RULE_forInitializerStatement = 127, RULE_whileStatement = 128, RULE_doStatement = 129, - RULE_switchStatement = 130, RULE_switchCase = 131, RULE_defaultCase = 132, - RULE_rethrowStatment = 133, RULE_tryStatement = 134, RULE_onPart = 135, - RULE_catchPart = 136, RULE_finallyPart = 137, RULE_returnStatement = 138, - RULE_label = 139, RULE_breakStatement = 140, RULE_continueStatement = 141, - RULE_yieldStatement = 142, RULE_yieldEachStatement = 143, RULE_assertStatement = 144, - RULE_assertion = 145, RULE_topLevelDefinition = 146, RULE_getOrSet = 147, - RULE_libraryDefinition = 148, RULE_scriptTag = 149, RULE_libraryName = 150, - RULE_importOrExport = 151, RULE_dottedIdentifierList = 152, RULE_libraryimport = 153, - RULE_importSpecification = 154, RULE_combinator = 155, RULE_identifierList = 156, - RULE_libraryExport = 157, RULE_partDirective = 158, RULE_partHeader = 159, - RULE_partDeclaration = 160, RULE_uri = 161, RULE_configurableUri = 162, - RULE_configurationUri = 163, RULE_uriTest = 164, RULE_dtype = 165, RULE_typeName = 166, - RULE_typeArguments = 167, RULE_typeList = 168, RULE_typeAlias = 169, RULE_typeAliasBody = 170, - RULE_functionTypeAlias = 171, RULE_functionPrefix = 172; + RULE_defaultNamedParameter = 23, RULE_classModifier = 24, RULE_classDefinition = 25, + RULE_mixins = 26, RULE_classMemberDefinition = 27, RULE_methodSignature = 28, + RULE_declaration = 29, RULE_staticFinalDeclarationList = 30, RULE_staticFinalDeclaration = 31, + RULE_operatorSignature = 32, RULE_operator = 33, RULE_binaryOperator = 34, + RULE_getterSignature = 35, RULE_setterSignature = 36, RULE_constructorSignature = 37, + RULE_redirection = 38, RULE_initializers = 39, RULE_initializerListEntry = 40, + RULE_fieldInitializer = 41, RULE_factoryConstructorSignature = 42, RULE_redirectingFactoryConstructorSignature = 43, + RULE_constantConstructorSignature = 44, RULE_superclass = 45, RULE_interfaces = 46, + RULE_mixinApplicationClass = 47, RULE_mixinApplication = 48, RULE_enumType = 49, + RULE_enumEntry = 50, RULE_typeParameter = 51, RULE_typeParameters = 52, + RULE_metadata = 53, RULE_expression = 54, RULE_expressionWithoutCascade = 55, + RULE_expressionList = 56, RULE_primary = 57, RULE_recordLiteral = 58, + RULE_recordField = 59, RULE_recordType = 60, RULE_recordTypeField = 61, + RULE_switchExpression = 62, RULE_switchExpressionCase = 63, RULE_guardedPattern = 64, + RULE_pattern = 65, RULE_constantPattern = 66, RULE_typeTestPattern = 67, + RULE_wildcardPattern = 68, RULE_variablePattern = 69, RULE_parenthesizedPattern = 70, + RULE_literal = 71, RULE_nullLiteral = 72, RULE_numericLiteral = 73, RULE_booleanLiteral = 74, + RULE_stringLiteral = 75, RULE_stringInterpolation = 76, RULE_symbolLiteral = 77, + RULE_listLiteral = 78, RULE_mapLiteral = 79, RULE_mapLiteralEntry = 80, + RULE_throwExpression = 81, RULE_throwExpressionWithoutCascade = 82, RULE_functionExpression = 83, + RULE_thisExpression = 84, RULE_nayaExpression = 85, RULE_constObjectExpression = 86, + RULE_arguments = 87, RULE_argumentList = 88, RULE_namedArgument = 89, + RULE_cascadeSection = 90, RULE_cascadeSelector = 91, RULE_argumentPart = 92, + RULE_assignmentOperator = 93, RULE_compoundAssignmentOperator = 94, RULE_conditionalExpression = 95, + RULE_ifNullExpression = 96, RULE_logicalOrExpression = 97, RULE_logicalAndExpression = 98, + RULE_equalityExpression = 99, RULE_equalityOperator = 100, RULE_relationalExpression = 101, + RULE_relationalOperator = 102, RULE_bitwiseOrExpression = 103, RULE_bitwiseXorExpression = 104, + RULE_bitwiseAndExpression = 105, RULE_bitwiseOperator = 106, RULE_shiftExpression = 107, + RULE_shiftOperator = 108, RULE_additiveExpression = 109, RULE_additiveOperator = 110, + RULE_multiplicativeExpression = 111, RULE_multiplicativeOperator = 112, + RULE_unaryExpression = 113, RULE_prefixOperator = 114, RULE_minusOperator = 115, + RULE_negationOperator = 116, RULE_tildeOperator = 117, RULE_awaitExpression = 118, + RULE_postfixExpression = 119, RULE_postfixOperator = 120, RULE_selector = 121, + RULE_incrementOperator = 122, RULE_assignableExpression = 123, RULE_unconditionalAssignableSelector = 124, + RULE_assignableSelector = 125, RULE_identifier = 126, RULE_qualified = 127, + RULE_typeTest = 128, RULE_isOperator = 129, RULE_typeCast = 130, RULE_asOperator = 131, + RULE_statements = 132, RULE_statement = 133, RULE_nonLabledStatment = 134, + RULE_expressionStatement = 135, RULE_localVariableDeclaration = 136, RULE_localFunctionDeclaration = 137, + RULE_ifStatement = 138, RULE_forStatement = 139, RULE_forLoopParts = 140, + RULE_forInitializerStatement = 141, RULE_whileStatement = 142, RULE_doStatement = 143, + RULE_switchStatement = 144, RULE_switchCase = 145, RULE_defaultCase = 146, + RULE_rethrowStatment = 147, RULE_tryStatement = 148, RULE_onPart = 149, + RULE_catchPart = 150, RULE_finallyPart = 151, RULE_returnStatement = 152, + RULE_label = 153, RULE_breakStatement = 154, RULE_continueStatement = 155, + RULE_yieldStatement = 156, RULE_yieldEachStatement = 157, RULE_assertStatement = 158, + RULE_assertion = 159, RULE_topLevelDefinition = 160, RULE_getOrSet = 161, + RULE_libraryDefinition = 162, RULE_scriptTag = 163, RULE_libraryName = 164, + RULE_importOrExport = 165, RULE_dottedIdentifierList = 166, RULE_libraryimport = 167, + RULE_importSpecification = 168, RULE_combinator = 169, RULE_identifierList = 170, + RULE_libraryExport = 171, RULE_partDirective = 172, RULE_partHeader = 173, + RULE_partDeclaration = 174, RULE_uri = 175, RULE_configurableUri = 176, + RULE_configurationUri = 177, RULE_uriTest = 178, RULE_dtype = 179, RULE_typeName = 180, + RULE_typeArguments = 181, RULE_typeList = 182, RULE_typeAlias = 183, RULE_typeAliasBody = 184, + RULE_functionTypeAlias = 185, RULE_functionPrefix = 186; private static String[] makeRuleNames() { return new String[] { "compilationUnit", "variableDeclaration", "declaredIdentifier", "finalConstVarOrType", @@ -124,8 +109,8 @@ private static String[] makeRuleNames() { "optionalFormalParameters", "optionalPositionalFormalParameters", "namedFormalParameters", "normalFormalParameter", "functionFormalParameter", "simpleFormalParameter", "fieldFormalParameter", "defaultFormalParameter", "defaultNamedParameter", - "classDefinition", "mixins", "classMemberDefinition", "methodSignature", - "declaration", "staticFinalDeclarationList", "staticFinalDeclaration", + "classModifier", "classDefinition", "mixins", "classMemberDefinition", + "methodSignature", "declaration", "staticFinalDeclarationList", "staticFinalDeclaration", "operatorSignature", "operator", "binaryOperator", "getterSignature", "setterSignature", "constructorSignature", "redirection", "initializers", "initializerListEntry", "fieldInitializer", "factoryConstructorSignature", @@ -133,6 +118,9 @@ private static String[] makeRuleNames() { "superclass", "interfaces", "mixinApplicationClass", "mixinApplication", "enumType", "enumEntry", "typeParameter", "typeParameters", "metadata", "expression", "expressionWithoutCascade", "expressionList", "primary", + "recordLiteral", "recordField", "recordType", "recordTypeField", "switchExpression", + "switchExpressionCase", "guardedPattern", "pattern", "constantPattern", + "typeTestPattern", "wildcardPattern", "variablePattern", "parenthesizedPattern", "literal", "nullLiteral", "numericLiteral", "booleanLiteral", "stringLiteral", "stringInterpolation", "symbolLiteral", "listLiteral", "mapLiteral", "mapLiteralEntry", "throwExpression", "throwExpressionWithoutCascade", @@ -168,19 +156,20 @@ private static String[] makeLiteralNames() { return new String[] { null, "','", "'final'", "'const'", "'var'", "'='", "'void'", "'async'", "'=>'", "';'", "'async*'", "'sync*'", "'{'", "'}'", "'('", "')'", "'['", - "']'", "'covariant'", "'this'", "'.'", "':'", "'abstract'", "'class'", - "'with'", "'static'", "'external'", "'operator'", "'~'", "'[]'", "'[]='", - "'=='", "'get'", "'set'", "'super'", "'factory'", "'extends'", "'implements'", - "'enum'", "'<'", "'>'", "'@'", "'null'", "'true'", "'false'", "'$'", - "'${'", "'#'", "'throw'", "'new'", "'..'", "'*='", "'/='", "'~/='", "'%='", - "'+='", "'<<='", "'>>='", "'>>>='", "'&='", "'^='", "'|='", "'??='", - "'?'", "'??'", "'||'", "'&&'", "'!='", "'>='", "'<='", "'|'", "'^'", - "'&'", "'<<'", "'>>'", "'>>>'", "'+'", "'-'", "'*'", "'/'", "'%'", "'~/'", - "'!'", "'await'", "'++'", "'--'", "'?.'", "'is'", "'as'", "'if'", "'else'", - "'for'", "'in'", "'while'", "'do'", "'switch'", "'case'", "'default'", - "'rethrow'", "'try'", "'on'", "'catch'", "'finally'", "'return'", "'break'", - "'continue'", "'yield'", "'yield*'", "'assert'", "'#!'", "'library'", - "'import'", "'show'", "'hide'", "'export'", "'part'", "'of'", "'typedef'" + "']'", "'covariant'", "'this'", "'.'", "':'", "'sealed'", "'base'", "'interface'", + "'mixin'", "'abstract'", "'class'", "'with'", "'static'", "'external'", + "'operator'", "'~'", "'[]'", "'[]='", "'=='", "'get'", "'set'", "'super'", + "'factory'", "'extends'", "'implements'", "'enum'", "'<'", "'>'", "'@'", + "'switch'", "'when'", "'_'", "'null'", "'true'", "'false'", "'$'", "'${'", + "'#'", "'throw'", "'new'", "'..'", "'*='", "'/='", "'~/='", "'%='", "'+='", + "'<<='", "'>>='", "'>>>='", "'&='", "'^='", "'|='", "'??='", "'?'", "'??'", + "'||'", "'&&'", "'!='", "'>='", "'<='", "'|'", "'^'", "'&'", "'<<'", + "'>>'", "'>>>'", "'+'", "'-'", "'*'", "'/'", "'%'", "'~/'", "'!'", "'await'", + "'++'", "'--'", "'?.'", "'is'", "'as'", "'if'", "'else'", "'case'", "'for'", + "'in'", "'while'", "'do'", "'default'", "'rethrow'", "'try'", "'on'", + "'catch'", "'finally'", "'return'", "'break'", "'continue'", "'yield'", + "'yield*'", "'assert'", "'#!'", "'library'", "'import'", "'show'", "'hide'", + "'export'", "'part'", "'of'", "'typedef'" }; } private static final String[] _LITERAL_NAMES = makeLiteralNames(); @@ -195,9 +184,9 @@ private static String[] makeSymbolicNames() { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, "WHITESPACE", - "NUMBER", "HEX_NUMBER", "SingleLineString", "MultiLineString", "NEWLINE", - "IDENTIFIER", "SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT" + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, "WHITESPACE", "NUMBER", "HEX_NUMBER", "SingleLineString", + "MultiLineString", "NEWLINE", "IDENTIFIER", "SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT" }; } private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); @@ -281,20 +270,20 @@ public final CompilationUnitContext compilationUnit() throws RecognitionExceptio CompilationUnitContext _localctx = new CompilationUnitContext(_ctx, getState()); enterRule(_localctx, 0, RULE_compilationUnit); try { - setState(348); + setState(376); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,0,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(346); + setState(374); libraryDefinition(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(347); + setState(375); partDeclaration(); } break; @@ -347,21 +336,21 @@ public final VariableDeclarationContext variableDeclaration() throws Recognition try { enterOuterAlt(_localctx, 1); { - setState(350); + setState(378); declaredIdentifier(); - setState(355); + setState(383); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__0) { { { - setState(351); + setState(379); match(T__0); - setState(352); + setState(380); identifier(); } } - setState(357); + setState(385); _errHandler.sync(this); _la = _input.LA(1); } @@ -413,11 +402,11 @@ public final DeclaredIdentifierContext declaredIdentifier() throws RecognitionEx try { enterOuterAlt(_localctx, 1); { - setState(358); + setState(386); metadata(); - setState(359); + setState(387); finalConstVarOrType(); - setState(360); + setState(388); identifier(); } } @@ -462,20 +451,20 @@ public final FinalConstVarOrTypeContext finalConstVarOrType() throws Recognition FinalConstVarOrTypeContext _localctx = new FinalConstVarOrTypeContext(_ctx, getState()); enterRule(_localctx, 6, RULE_finalConstVarOrType); try { - setState(371); + setState(399); _errHandler.sync(this); switch (_input.LA(1)) { case T__1: enterOuterAlt(_localctx, 1); { - setState(362); + setState(390); match(T__1); - setState(364); + setState(392); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,2,_ctx) ) { case 1: { - setState(363); + setState(391); dtype(); } break; @@ -485,14 +474,14 @@ public final FinalConstVarOrTypeContext finalConstVarOrType() throws Recognition case T__2: enterOuterAlt(_localctx, 2); { - setState(366); + setState(394); match(T__2); - setState(368); + setState(396); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,3,_ctx) ) { case 1: { - setState(367); + setState(395); dtype(); } break; @@ -501,10 +490,11 @@ public final FinalConstVarOrTypeContext finalConstVarOrType() throws Recognition break; case T__3: case T__5: + case T__13: case IDENTIFIER: enterOuterAlt(_localctx, 3); { - setState(370); + setState(398); varOrType(); } break; @@ -550,21 +540,22 @@ public final VarOrTypeContext varOrType() throws RecognitionException { VarOrTypeContext _localctx = new VarOrTypeContext(_ctx, getState()); enterRule(_localctx, 8, RULE_varOrType); try { - setState(375); + setState(403); _errHandler.sync(this); switch (_input.LA(1)) { case T__3: enterOuterAlt(_localctx, 1); { - setState(373); + setState(401); match(T__3); } break; case T__5: + case T__13: case IDENTIFIER: enterOuterAlt(_localctx, 2); { - setState(374); + setState(402); dtype(); } break; @@ -622,33 +613,33 @@ public final InitializedVariableDeclarationContext initializedVariableDeclaratio try { enterOuterAlt(_localctx, 1); { - setState(377); + setState(405); declaredIdentifier(); - setState(380); + setState(408); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__4) { { - setState(378); + setState(406); match(T__4); - setState(379); + setState(407); expression(); } } - setState(386); + setState(414); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__0) { { { - setState(382); + setState(410); match(T__0); - setState(383); + setState(411); initializedIdentifier(); } } - setState(388); + setState(416); _errHandler.sync(this); _la = _input.LA(1); } @@ -698,16 +689,16 @@ public final InitializedIdentifierContext initializedIdentifier() throws Recogni try { enterOuterAlt(_localctx, 1); { - setState(389); + setState(417); identifier(); - setState(392); + setState(420); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__4) { { - setState(390); + setState(418); match(T__4); - setState(391); + setState(419); expression(); } } @@ -758,21 +749,21 @@ public final InitializedIdentifierListContext initializedIdentifierList() throws try { enterOuterAlt(_localctx, 1); { - setState(394); + setState(422); initializedIdentifier(); - setState(399); + setState(427); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__0) { { { - setState(395); + setState(423); match(T__0); - setState(396); + setState(424); initializedIdentifier(); } } - setState(401); + setState(429); _errHandler.sync(this); _la = _input.LA(1); } @@ -827,21 +818,21 @@ public final FunctionSignatureContext functionSignature() throws RecognitionExce try { enterOuterAlt(_localctx, 1); { - setState(402); + setState(430); metadata(); - setState(404); + setState(432); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) { case 1: { - setState(403); + setState(431); returnType(); } break; } - setState(406); + setState(434); identifier(); - setState(407); + setState(435); formalParameterPart(); } } @@ -889,17 +880,17 @@ public final FormalParameterPartContext formalParameterPart() throws Recognition try { enterOuterAlt(_localctx, 1); { - setState(410); + setState(438); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__38) { + if (_la==T__42) { { - setState(409); + setState(437); typeParameters(); } } - setState(412); + setState(440); formalParameterList(); } } @@ -941,20 +932,20 @@ public final ReturnTypeContext returnType() throws RecognitionException { ReturnTypeContext _localctx = new ReturnTypeContext(_ctx, getState()); enterRule(_localctx, 20, RULE_returnType); try { - setState(416); + setState(444); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,12,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(414); + setState(442); match(T__5); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(415); + setState(443); dtype(); } break; @@ -1002,39 +993,39 @@ public final FunctionBodyContext functionBody() throws RecognitionException { enterRule(_localctx, 22, RULE_functionBody); int _la; try { - setState(429); + setState(457); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,15,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(419); + setState(447); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__6) { { - setState(418); + setState(446); match(T__6); } } - setState(421); + setState(449); match(T__7); - setState(422); + setState(450); expression(); - setState(423); + setState(451); match(T__8); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(426); + setState(454); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__6) | (1L << T__9) | (1L << T__10))) != 0)) { { - setState(425); + setState(453); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__6) | (1L << T__9) | (1L << T__10))) != 0)) ) { _errHandler.recoverInline(this); @@ -1047,7 +1038,7 @@ public final FunctionBodyContext functionBody() throws RecognitionException { } } - setState(428); + setState(456); block(); } break; @@ -1093,11 +1084,11 @@ public final BlockContext block() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(431); + setState(459); match(T__11); - setState(432); + setState(460); statements(); - setState(433); + setState(461); match(T__12); } } @@ -1143,60 +1134,60 @@ public final FormalParameterListContext formalParameterList() throws Recognition enterRule(_localctx, 26, RULE_formalParameterList); int _la; try { - setState(453); + setState(481); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,17,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(435); + setState(463); match(T__13); - setState(436); + setState(464); match(T__14); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(437); + setState(465); match(T__13); - setState(438); + setState(466); normalFormalParameters(); - setState(439); + setState(467); match(T__14); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(441); + setState(469); match(T__13); - setState(442); + setState(470); normalFormalParameters(); - setState(445); + setState(473); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__0) { { - setState(443); + setState(471); match(T__0); - setState(444); + setState(472); optionalFormalParameters(); } } - setState(447); + setState(475); match(T__14); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(449); + setState(477); match(T__13); - setState(450); + setState(478); optionalFormalParameters(); - setState(451); + setState(479); match(T__14); } break; @@ -1246,23 +1237,23 @@ public final NormalFormalParametersContext normalFormalParameters() throws Recog int _alt; enterOuterAlt(_localctx, 1); { - setState(455); + setState(483); normalFormalParameter(); - setState(460); + setState(488); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,18,_ctx); - while ( _alt!=2 && _alt!= ATN.INVALID_ALT_NUMBER ) { + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(456); + setState(484); match(T__0); - setState(457); + setState(485); normalFormalParameter(); } - } + } } - setState(462); + setState(490); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,18,_ctx); } @@ -1309,20 +1300,20 @@ public final OptionalFormalParametersContext optionalFormalParameters() throws R OptionalFormalParametersContext _localctx = new OptionalFormalParametersContext(_ctx, getState()); enterRule(_localctx, 30, RULE_optionalFormalParameters); try { - setState(465); + setState(493); _errHandler.sync(this); switch (_input.LA(1)) { case T__15: enterOuterAlt(_localctx, 1); { - setState(463); + setState(491); optionalPositionalFormalParameters(); } break; case T__11: enterOuterAlt(_localctx, 2); { - setState(464); + setState(492); namedFormalParameters(); } break; @@ -1375,39 +1366,39 @@ public final OptionalPositionalFormalParametersContext optionalPositionalFormalP int _alt; enterOuterAlt(_localctx, 1); { - setState(467); + setState(495); match(T__15); - setState(468); + setState(496); defaultFormalParameter(); - setState(473); + setState(501); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,20,_ctx); - while ( _alt!=2 && _alt!= ATN.INVALID_ALT_NUMBER ) { + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(469); + setState(497); match(T__0); - setState(470); + setState(498); defaultFormalParameter(); } - } + } } - setState(475); + setState(503); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,20,_ctx); } - setState(477); + setState(505); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__0) { { - setState(476); + setState(504); match(T__0); } } - setState(479); + setState(507); match(T__16); } } @@ -1456,39 +1447,39 @@ public final NamedFormalParametersContext namedFormalParameters() throws Recogni int _alt; enterOuterAlt(_localctx, 1); { - setState(481); + setState(509); match(T__11); - setState(482); + setState(510); defaultNamedParameter(); - setState(487); + setState(515); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,22,_ctx); - while ( _alt!=2 && _alt!= ATN.INVALID_ALT_NUMBER ) { + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(483); + setState(511); match(T__0); - setState(484); + setState(512); defaultNamedParameter(); } - } + } } - setState(489); + setState(517); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,22,_ctx); } - setState(491); + setState(519); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__0) { { - setState(490); + setState(518); match(T__0); } } - setState(493); + setState(521); match(T__12); } } @@ -1536,27 +1527,27 @@ public final NormalFormalParameterContext normalFormalParameter() throws Recogni NormalFormalParameterContext _localctx = new NormalFormalParameterContext(_ctx, getState()); enterRule(_localctx, 36, RULE_normalFormalParameter); try { - setState(498); + setState(526); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,24,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(495); + setState(523); functionFormalParameter(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(496); + setState(524); fieldFormalParameter(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(497); + setState(525); simpleFormalParameter(); } break; @@ -1612,31 +1603,31 @@ public final FunctionFormalParameterContext functionFormalParameter() throws Rec try { enterOuterAlt(_localctx, 1); { - setState(500); + setState(528); metadata(); - setState(502); + setState(530); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__17) { { - setState(501); + setState(529); match(T__17); } } - setState(505); + setState(533); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,26,_ctx) ) { case 1: { - setState(504); + setState(532); returnType(); } break; } - setState(507); + setState(535); identifier(); - setState(508); + setState(536); formalParameterPart(); } } @@ -1685,32 +1676,32 @@ public final SimpleFormalParameterContext simpleFormalParameter() throws Recogni enterRule(_localctx, 40, RULE_simpleFormalParameter); int _la; try { - setState(517); + setState(545); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,28,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(510); + setState(538); declaredIdentifier(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(511); + setState(539); metadata(); - setState(513); + setState(541); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__17) { { - setState(512); + setState(540); match(T__17); } } - setState(515); + setState(543); identifier(); } break; @@ -1766,30 +1757,30 @@ public final FieldFormalParameterContext fieldFormalParameter() throws Recogniti try { enterOuterAlt(_localctx, 1); { - setState(519); + setState(547); metadata(); - setState(521); + setState(549); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__1) | (1L << T__2) | (1L << T__3) | (1L << T__5))) != 0) || _la==IDENTIFIER) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__1) | (1L << T__2) | (1L << T__3) | (1L << T__5) | (1L << T__13))) != 0) || _la==IDENTIFIER) { { - setState(520); + setState(548); finalConstVarOrType(); } } - setState(523); + setState(551); match(T__18); - setState(524); + setState(552); match(T__19); - setState(525); + setState(553); identifier(); - setState(527); + setState(555); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__13 || _la==T__38) { + if (_la==T__13 || _la==T__42) { { - setState(526); + setState(554); formalParameterPart(); } } @@ -1840,16 +1831,16 @@ public final DefaultFormalParameterContext defaultFormalParameter() throws Recog try { enterOuterAlt(_localctx, 1); { - setState(529); + setState(557); normalFormalParameter(); - setState(532); + setState(560); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__4) { { - setState(530); + setState(558); match(T__4); - setState(531); + setState(559); expression(); } } @@ -1898,22 +1889,22 @@ public final DefaultNamedParameterContext defaultNamedParameter() throws Recogni enterRule(_localctx, 46, RULE_defaultNamedParameter); int _la; try { - setState(544); + setState(572); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,34,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(534); + setState(562); normalFormalParameter(); - setState(537); + setState(565); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__4) { { - setState(535); + setState(563); match(T__4); - setState(536); + setState(564); expression(); } } @@ -1923,16 +1914,16 @@ public final DefaultNamedParameterContext defaultNamedParameter() throws Recogni case 2: enterOuterAlt(_localctx, 2); { - setState(539); + setState(567); normalFormalParameter(); - setState(542); + setState(570); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__20) { { - setState(540); + setState(568); match(T__20); - setState(541); + setState(569); expression(); } } @@ -1952,6 +1943,56 @@ public final DefaultNamedParameterContext defaultNamedParameter() throws Recogni return _localctx; } + public static class ClassModifierContext extends ParserRuleContext { + public ClassModifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_classModifier; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).enterClassModifier(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).exitClassModifier(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof Dart2Visitor ) return ((Dart2Visitor)visitor).visitClassModifier(this); + else return visitor.visitChildren(this); + } + } + + public final ClassModifierContext classModifier() throws RecognitionException { + ClassModifierContext _localctx = new ClassModifierContext(_ctx, getState()); + enterRule(_localctx, 48, RULE_classModifier); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(574); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__1) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + public static class ClassDefinitionContext extends ParserRuleContext { public List metadata() { return getRuleContexts(MetadataContext.class); @@ -1962,6 +2003,12 @@ public MetadataContext metadata(int i) { public IdentifierContext identifier() { return getRuleContext(IdentifierContext.class,0); } + public List classModifier() { + return getRuleContexts(ClassModifierContext.class); + } + public ClassModifierContext classModifier(int i) { + return getRuleContext(ClassModifierContext.class,i); + } public TypeParametersContext typeParameters() { return getRuleContext(TypeParametersContext.class,0); } @@ -2004,111 +2051,220 @@ public T accept(ParseTreeVisitor visitor) { public final ClassDefinitionContext classDefinition() throws RecognitionException { ClassDefinitionContext _localctx = new ClassDefinitionContext(_ctx, getState()); - enterRule(_localctx, 48, RULE_classDefinition); + enterRule(_localctx, 50, RULE_classDefinition); int _la; try { - setState(582); + setState(653); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,42,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,50,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(546); + setState(576); metadata(); - setState(548); + setState(580); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__1) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24))) != 0)) { + { + { + setState(577); + classModifier(); + } + } + setState(582); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(584); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__21) { + if (_la==T__25) { { - setState(547); - match(T__21); + setState(583); + match(T__25); } } - setState(550); - match(T__22); - setState(551); + setState(586); + match(T__26); + setState(587); identifier(); - setState(553); + setState(589); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__38) { + if (_la==T__42) { { - setState(552); + setState(588); typeParameters(); } } - setState(556); + setState(592); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__35) { + if (_la==T__39) { { - setState(555); + setState(591); superclass(); } } - setState(559); + setState(595); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__23) { + if (_la==T__27) { { - setState(558); + setState(594); mixins(); } } - setState(562); + setState(598); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__36) { + if (_la==T__40) { { - setState(561); + setState(597); interfaces(); } } - setState(564); + setState(600); match(T__11); - setState(570); + setState(606); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__1) | (1L << T__2) | (1L << T__3) | (1L << T__5) | (1L << T__17) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__31) | (1L << T__32) | (1L << T__34) | (1L << T__40))) != 0) || _la==IDENTIFIER) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__1) | (1L << T__2) | (1L << T__3) | (1L << T__5) | (1L << T__13) | (1L << T__17) | (1L << T__28) | (1L << T__29) | (1L << T__30) | (1L << T__35) | (1L << T__36) | (1L << T__38) | (1L << T__44))) != 0) || _la==IDENTIFIER) { { { - setState(565); + setState(601); metadata(); - setState(566); + setState(602); classMemberDefinition(); } } - setState(572); + setState(608); _errHandler.sync(this); _la = _input.LA(1); } - setState(573); + setState(609); match(T__12); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(575); + setState(611); metadata(); - setState(577); + setState(613); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__21) { + if (_la==T__25) { { - setState(576); - match(T__21); + setState(612); + match(T__25); } } - setState(579); - match(T__22); - setState(580); + setState(618); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__1) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24))) != 0)) { + { + { + setState(615); + classModifier(); + } + } + setState(620); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(621); + match(T__26); + setState(622); + identifier(); + setState(624); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__42) { + { + setState(623); + typeParameters(); + } + } + + setState(627); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__39) { + { + setState(626); + superclass(); + } + } + + setState(630); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__27) { + { + setState(629); + mixins(); + } + } + + setState(633); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__40) { + { + setState(632); + interfaces(); + } + } + + setState(635); + match(T__11); + setState(641); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__1) | (1L << T__2) | (1L << T__3) | (1L << T__5) | (1L << T__13) | (1L << T__17) | (1L << T__28) | (1L << T__29) | (1L << T__30) | (1L << T__35) | (1L << T__36) | (1L << T__38) | (1L << T__44))) != 0) || _la==IDENTIFIER) { + { + { + setState(636); + metadata(); + setState(637); + classMemberDefinition(); + } + } + setState(643); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(644); + match(T__12); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(646); + metadata(); + setState(648); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__25) { + { + setState(647); + match(T__25); + } + } + + setState(650); + match(T__26); + setState(651); mixinApplicationClass(); } break; @@ -2150,13 +2306,13 @@ public T accept(ParseTreeVisitor visitor) { public final MixinsContext mixins() throws RecognitionException { MixinsContext _localctx = new MixinsContext(_ctx, getState()); - enterRule(_localctx, 50, RULE_mixins); + enterRule(_localctx, 52, RULE_mixins); try { enterOuterAlt(_localctx, 1); { - setState(584); - match(T__23); - setState(585); + setState(655); + match(T__27); + setState(656); typeList(); } } @@ -2202,26 +2358,26 @@ public T accept(ParseTreeVisitor visitor) { public final ClassMemberDefinitionContext classMemberDefinition() throws RecognitionException { ClassMemberDefinitionContext _localctx = new ClassMemberDefinitionContext(_ctx, getState()); - enterRule(_localctx, 52, RULE_classMemberDefinition); + enterRule(_localctx, 54, RULE_classMemberDefinition); try { - setState(593); + setState(664); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,43,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,51,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(587); + setState(658); declaration(); - setState(588); + setState(659); match(T__8); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(590); + setState(661); methodSignature(); - setState(591); + setState(662); functionBody(); } break; @@ -2281,23 +2437,23 @@ public T accept(ParseTreeVisitor visitor) { public final MethodSignatureContext methodSignature() throws RecognitionException { MethodSignatureContext _localctx = new MethodSignatureContext(_ctx, getState()); - enterRule(_localctx, 54, RULE_methodSignature); + enterRule(_localctx, 56, RULE_methodSignature); int _la; try { - setState(613); + setState(684); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,48,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,56,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(595); + setState(666); constructorSignature(); - setState(597); + setState(668); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__20) { { - setState(596); + setState(667); initializers(); } } @@ -2307,65 +2463,65 @@ public final MethodSignatureContext methodSignature() throws RecognitionExceptio case 2: enterOuterAlt(_localctx, 2); { - setState(599); + setState(670); factoryConstructorSignature(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(601); + setState(672); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__24) { + if (_la==T__28) { { - setState(600); - match(T__24); + setState(671); + match(T__28); } } - setState(603); + setState(674); functionSignature(); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(605); + setState(676); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__24) { + if (_la==T__28) { { - setState(604); - match(T__24); + setState(675); + match(T__28); } } - setState(607); + setState(678); getterSignature(); } break; case 5: enterOuterAlt(_localctx, 5); { - setState(609); + setState(680); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__24) { + if (_la==T__28) { { - setState(608); - match(T__24); + setState(679); + match(T__28); } } - setState(611); + setState(682); setterSignature(); } break; case 6: enterOuterAlt(_localctx, 6); { - setState(612); + setState(683); operatorSignature(); } break; @@ -2437,29 +2593,29 @@ public T accept(ParseTreeVisitor visitor) { public final DeclarationContext declaration() throws RecognitionException { DeclarationContext _localctx = new DeclarationContext(_ctx, getState()); - enterRule(_localctx, 56, RULE_declaration); + enterRule(_localctx, 58, RULE_declaration); int _la; try { - setState(673); + setState(744); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,62,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,70,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(615); + setState(686); constantConstructorSignature(); - setState(618); + setState(689); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,49,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,57,_ctx) ) { case 1: { - setState(616); + setState(687); redirection(); } break; case 2: { - setState(617); + setState(688); initializers(); } break; @@ -2469,20 +2625,20 @@ public final DeclarationContext declaration() throws RecognitionException { case 2: enterOuterAlt(_localctx, 2); { - setState(620); + setState(691); constructorSignature(); - setState(623); + setState(694); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,50,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,58,_ctx) ) { case 1: { - setState(621); + setState(692); redirection(); } break; case 2: { - setState(622); + setState(693); initializers(); } break; @@ -2492,125 +2648,125 @@ public final DeclarationContext declaration() throws RecognitionException { case 3: enterOuterAlt(_localctx, 3); { - setState(625); - match(T__25); - setState(626); + setState(696); + match(T__29); + setState(697); constantConstructorSignature(); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(627); - match(T__25); - setState(628); + setState(698); + match(T__29); + setState(699); constructorSignature(); } break; case 5: enterOuterAlt(_localctx, 5); { - setState(633); + setState(704); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__25) { + if (_la==T__29) { { - setState(629); - match(T__25); - setState(631); + setState(700); + match(T__29); + setState(702); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__24) { + if (_la==T__28) { { - setState(630); - match(T__24); + setState(701); + match(T__28); } } } } - setState(635); + setState(706); getterSignature(); } break; case 6: enterOuterAlt(_localctx, 6); { - setState(640); + setState(711); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__25) { + if (_la==T__29) { { - setState(636); - match(T__25); - setState(638); + setState(707); + match(T__29); + setState(709); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__24) { + if (_la==T__28) { { - setState(637); - match(T__24); + setState(708); + match(T__28); } } } } - setState(642); + setState(713); setterSignature(); } break; case 7: enterOuterAlt(_localctx, 7); { - setState(644); + setState(715); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__25) { + if (_la==T__29) { { - setState(643); - match(T__25); + setState(714); + match(T__29); } } - setState(646); + setState(717); operatorSignature(); } break; case 8: enterOuterAlt(_localctx, 8); { - setState(651); + setState(722); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__25) { + if (_la==T__29) { { - setState(647); - match(T__25); - setState(649); + setState(718); + match(T__29); + setState(720); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__24) { + if (_la==T__28) { { - setState(648); - match(T__24); + setState(719); + match(T__28); } } } } - setState(653); + setState(724); functionSignature(); } break; case 9: enterOuterAlt(_localctx, 9); { - setState(654); - match(T__24); - setState(655); + setState(725); + match(T__28); + setState(726); _la = _input.LA(1); if ( !(_la==T__1 || _la==T__2) ) { _errHandler.recoverInline(this); @@ -2620,50 +2776,50 @@ public final DeclarationContext declaration() throws RecognitionException { _errHandler.reportMatch(this); consume(); } - setState(657); + setState(728); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,58,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,66,_ctx) ) { case 1: { - setState(656); + setState(727); dtype(); } break; } - setState(659); + setState(730); staticFinalDeclarationList(); } break; case 10: enterOuterAlt(_localctx, 10); { - setState(660); + setState(731); match(T__1); - setState(662); + setState(733); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,59,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,67,_ctx) ) { case 1: { - setState(661); + setState(732); dtype(); } break; } - setState(664); + setState(735); initializedIdentifierList(); } break; case 11: enterOuterAlt(_localctx, 11); { - setState(666); + setState(737); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__17 || _la==T__24) { + if (_la==T__17 || _la==T__28) { { - setState(665); + setState(736); _la = _input.LA(1); - if ( !(_la==T__17 || _la==T__24) ) { + if ( !(_la==T__17 || _la==T__28) ) { _errHandler.recoverInline(this); } else { @@ -2674,26 +2830,27 @@ public final DeclarationContext declaration() throws RecognitionException { } } - setState(670); + setState(741); _errHandler.sync(this); switch (_input.LA(1)) { case T__3: { - setState(668); + setState(739); match(T__3); } break; case T__5: + case T__13: case IDENTIFIER: { - setState(669); + setState(740); dtype(); } break; default: throw new NoViableAltException(this); } - setState(672); + setState(743); initializedIdentifierList(); } break; @@ -2738,26 +2895,26 @@ public T accept(ParseTreeVisitor visitor) { public final StaticFinalDeclarationListContext staticFinalDeclarationList() throws RecognitionException { StaticFinalDeclarationListContext _localctx = new StaticFinalDeclarationListContext(_ctx, getState()); - enterRule(_localctx, 58, RULE_staticFinalDeclarationList); + enterRule(_localctx, 60, RULE_staticFinalDeclarationList); int _la; try { enterOuterAlt(_localctx, 1); { - setState(675); + setState(746); staticFinalDeclaration(); - setState(680); + setState(751); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__0) { { { - setState(676); + setState(747); match(T__0); - setState(677); + setState(748); staticFinalDeclaration(); } } - setState(682); + setState(753); _errHandler.sync(this); _la = _input.LA(1); } @@ -2802,15 +2959,15 @@ public T accept(ParseTreeVisitor visitor) { public final StaticFinalDeclarationContext staticFinalDeclaration() throws RecognitionException { StaticFinalDeclarationContext _localctx = new StaticFinalDeclarationContext(_ctx, getState()); - enterRule(_localctx, 60, RULE_staticFinalDeclaration); + enterRule(_localctx, 62, RULE_staticFinalDeclaration); try { enterOuterAlt(_localctx, 1); { - setState(683); + setState(754); identifier(); - setState(684); + setState(755); match(T__4); - setState(685); + setState(756); expression(); } } @@ -2856,26 +3013,26 @@ public T accept(ParseTreeVisitor visitor) { public final OperatorSignatureContext operatorSignature() throws RecognitionException { OperatorSignatureContext _localctx = new OperatorSignatureContext(_ctx, getState()); - enterRule(_localctx, 62, RULE_operatorSignature); + enterRule(_localctx, 64, RULE_operatorSignature); int _la; try { enterOuterAlt(_localctx, 1); { - setState(688); + setState(759); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__5 || _la==IDENTIFIER) { + if (_la==T__5 || _la==T__13 || _la==IDENTIFIER) { { - setState(687); + setState(758); returnType(); } } - setState(690); - match(T__26); - setState(691); + setState(761); + match(T__30); + setState(762); operator(); - setState(692); + setState(763); formalParameterList(); } } @@ -2915,28 +3072,21 @@ public T accept(ParseTreeVisitor visitor) { public final OperatorContext operator() throws RecognitionException { OperatorContext _localctx = new OperatorContext(_ctx, getState()); - enterRule(_localctx, 64, RULE_operator); + enterRule(_localctx, 66, RULE_operator); try { - setState(698); + setState(769); _errHandler.sync(this); switch (_input.LA(1)) { - case T__27: + case T__31: enterOuterAlt(_localctx, 1); { - setState(694); - match(T__27); + setState(765); + match(T__31); } break; - case T__30: - case T__38: - case T__39: - case T__67: - case T__68: - case T__69: - case T__70: - case T__71: - case T__72: - case T__73: + case T__34: + case T__42: + case T__43: case T__74: case T__75: case T__76: @@ -2944,24 +3094,31 @@ public final OperatorContext operator() throws RecognitionException { case T__78: case T__79: case T__80: + case T__81: + case T__82: + case T__83: + case T__84: + case T__85: + case T__86: + case T__87: enterOuterAlt(_localctx, 2); { - setState(695); + setState(766); binaryOperator(); } break; - case T__28: + case T__32: enterOuterAlt(_localctx, 3); { - setState(696); - match(T__28); + setState(767); + match(T__32); } break; - case T__29: + case T__33: enterOuterAlt(_localctx, 4); { - setState(697); - match(T__29); + setState(768); + match(T__33); } break; default: @@ -3016,61 +3173,61 @@ public T accept(ParseTreeVisitor visitor) { public final BinaryOperatorContext binaryOperator() throws RecognitionException { BinaryOperatorContext _localctx = new BinaryOperatorContext(_ctx, getState()); - enterRule(_localctx, 66, RULE_binaryOperator); + enterRule(_localctx, 68, RULE_binaryOperator); try { - setState(706); + setState(777); _errHandler.sync(this); switch (_input.LA(1)) { - case T__77: - case T__78: - case T__79: - case T__80: + case T__84: + case T__85: + case T__86: + case T__87: enterOuterAlt(_localctx, 1); { - setState(700); + setState(771); multiplicativeOperator(); } break; - case T__75: - case T__76: + case T__82: + case T__83: enterOuterAlt(_localctx, 2); { - setState(701); + setState(772); additiveOperator(); } break; - case T__72: - case T__73: - case T__74: + case T__79: + case T__80: + case T__81: enterOuterAlt(_localctx, 3); { - setState(702); + setState(773); shiftOperator(); } break; - case T__38: - case T__39: - case T__67: - case T__68: + case T__42: + case T__43: + case T__74: + case T__75: enterOuterAlt(_localctx, 4); { - setState(703); + setState(774); relationalOperator(); } break; - case T__30: + case T__34: enterOuterAlt(_localctx, 5); { - setState(704); - match(T__30); + setState(775); + match(T__34); } break; - case T__69: - case T__70: - case T__71: + case T__76: + case T__77: + case T__78: enterOuterAlt(_localctx, 6); { - setState(705); + setState(776); bitwiseOperator(); } break; @@ -3117,24 +3274,24 @@ public T accept(ParseTreeVisitor visitor) { public final GetterSignatureContext getterSignature() throws RecognitionException { GetterSignatureContext _localctx = new GetterSignatureContext(_ctx, getState()); - enterRule(_localctx, 68, RULE_getterSignature); + enterRule(_localctx, 70, RULE_getterSignature); int _la; try { enterOuterAlt(_localctx, 1); { - setState(709); + setState(780); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__5 || _la==IDENTIFIER) { + if (_la==T__5 || _la==T__13 || _la==IDENTIFIER) { { - setState(708); + setState(779); returnType(); } } - setState(711); - match(T__31); - setState(712); + setState(782); + match(T__35); + setState(783); identifier(); } } @@ -3180,26 +3337,26 @@ public T accept(ParseTreeVisitor visitor) { public final SetterSignatureContext setterSignature() throws RecognitionException { SetterSignatureContext _localctx = new SetterSignatureContext(_ctx, getState()); - enterRule(_localctx, 70, RULE_setterSignature); + enterRule(_localctx, 72, RULE_setterSignature); int _la; try { enterOuterAlt(_localctx, 1); { - setState(715); + setState(786); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__5 || _la==IDENTIFIER) { + if (_la==T__5 || _la==T__13 || _la==IDENTIFIER) { { - setState(714); + setState(785); returnType(); } } - setState(717); - match(T__32); - setState(718); + setState(788); + match(T__36); + setState(789); identifier(); - setState(719); + setState(790); formalParameterList(); } } @@ -3245,26 +3402,26 @@ public T accept(ParseTreeVisitor visitor) { public final ConstructorSignatureContext constructorSignature() throws RecognitionException { ConstructorSignatureContext _localctx = new ConstructorSignatureContext(_ctx, getState()); - enterRule(_localctx, 72, RULE_constructorSignature); + enterRule(_localctx, 74, RULE_constructorSignature); int _la; try { enterOuterAlt(_localctx, 1); { - setState(721); + setState(792); identifier(); - setState(724); + setState(795); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__19) { { - setState(722); + setState(793); match(T__19); - setState(723); + setState(794); identifier(); } } - setState(726); + setState(797); formalParameterList(); } } @@ -3307,28 +3464,28 @@ public T accept(ParseTreeVisitor visitor) { public final RedirectionContext redirection() throws RecognitionException { RedirectionContext _localctx = new RedirectionContext(_ctx, getState()); - enterRule(_localctx, 74, RULE_redirection); + enterRule(_localctx, 76, RULE_redirection); int _la; try { enterOuterAlt(_localctx, 1); { - setState(728); + setState(799); match(T__20); - setState(729); + setState(800); match(T__18); - setState(732); + setState(803); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__19) { { - setState(730); + setState(801); match(T__19); - setState(731); + setState(802); identifier(); } } - setState(734); + setState(805); arguments(); } } @@ -3371,28 +3528,28 @@ public T accept(ParseTreeVisitor visitor) { public final InitializersContext initializers() throws RecognitionException { InitializersContext _localctx = new InitializersContext(_ctx, getState()); - enterRule(_localctx, 76, RULE_initializers); + enterRule(_localctx, 78, RULE_initializers); int _la; try { enterOuterAlt(_localctx, 1); { - setState(736); + setState(807); match(T__20); - setState(737); + setState(808); initializerListEntry(); - setState(742); + setState(813); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__0) { { { - setState(738); + setState(809); match(T__0); - setState(739); + setState(810); initializerListEntry(); } } - setState(744); + setState(815); _errHandler.sync(this); _la = _input.LA(1); } @@ -3443,44 +3600,44 @@ public T accept(ParseTreeVisitor visitor) { public final InitializerListEntryContext initializerListEntry() throws RecognitionException { InitializerListEntryContext _localctx = new InitializerListEntryContext(_ctx, getState()); - enterRule(_localctx, 78, RULE_initializerListEntry); + enterRule(_localctx, 80, RULE_initializerListEntry); try { - setState(754); + setState(825); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,72,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,80,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(745); - match(T__33); - setState(746); + setState(816); + match(T__37); + setState(817); arguments(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(747); - match(T__33); - setState(748); + setState(818); + match(T__37); + setState(819); match(T__19); - setState(749); + setState(820); identifier(); - setState(750); + setState(821); arguments(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(752); + setState(823); fieldInitializer(); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(753); + setState(824); assertion(); } break; @@ -3531,40 +3688,40 @@ public T accept(ParseTreeVisitor visitor) { public final FieldInitializerContext fieldInitializer() throws RecognitionException { FieldInitializerContext _localctx = new FieldInitializerContext(_ctx, getState()); - enterRule(_localctx, 80, RULE_fieldInitializer); + enterRule(_localctx, 82, RULE_fieldInitializer); int _la; try { enterOuterAlt(_localctx, 1); { - setState(758); + setState(829); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__18) { { - setState(756); + setState(827); match(T__18); - setState(757); + setState(828); match(T__19); } } - setState(760); + setState(831); identifier(); - setState(761); + setState(832); match(T__4); - setState(762); + setState(833); conditionalExpression(); - setState(766); + setState(837); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__49) { + while (_la==T__56) { { { - setState(763); + setState(834); cascadeSection(); } } - setState(768); + setState(839); _errHandler.sync(this); _la = _input.LA(1); } @@ -3612,28 +3769,28 @@ public T accept(ParseTreeVisitor visitor) { public final FactoryConstructorSignatureContext factoryConstructorSignature() throws RecognitionException { FactoryConstructorSignatureContext _localctx = new FactoryConstructorSignatureContext(_ctx, getState()); - enterRule(_localctx, 82, RULE_factoryConstructorSignature); + enterRule(_localctx, 84, RULE_factoryConstructorSignature); int _la; try { enterOuterAlt(_localctx, 1); { - setState(769); - match(T__34); - setState(770); + setState(840); + match(T__38); + setState(841); identifier(); - setState(773); + setState(844); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__19) { { - setState(771); + setState(842); match(T__19); - setState(772); + setState(843); identifier(); } } - setState(775); + setState(846); formalParameterList(); } } @@ -3682,51 +3839,51 @@ public T accept(ParseTreeVisitor visitor) { public final RedirectingFactoryConstructorSignatureContext redirectingFactoryConstructorSignature() throws RecognitionException { RedirectingFactoryConstructorSignatureContext _localctx = new RedirectingFactoryConstructorSignatureContext(_ctx, getState()); - enterRule(_localctx, 84, RULE_redirectingFactoryConstructorSignature); + enterRule(_localctx, 86, RULE_redirectingFactoryConstructorSignature); int _la; try { enterOuterAlt(_localctx, 1); { - setState(778); + setState(849); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__2) { { - setState(777); + setState(848); match(T__2); } } - setState(780); - match(T__34); - setState(781); + setState(851); + match(T__38); + setState(852); identifier(); - setState(784); + setState(855); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__19) { { - setState(782); + setState(853); match(T__19); - setState(783); + setState(854); identifier(); } } - setState(786); + setState(857); formalParameterList(); - setState(787); + setState(858); match(T__4); - setState(788); + setState(859); dtype(); - setState(791); + setState(862); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__19) { { - setState(789); + setState(860); match(T__19); - setState(790); + setState(861); identifier(); } } @@ -3772,15 +3929,15 @@ public T accept(ParseTreeVisitor visitor) { public final ConstantConstructorSignatureContext constantConstructorSignature() throws RecognitionException { ConstantConstructorSignatureContext _localctx = new ConstantConstructorSignatureContext(_ctx, getState()); - enterRule(_localctx, 86, RULE_constantConstructorSignature); + enterRule(_localctx, 88, RULE_constantConstructorSignature); try { enterOuterAlt(_localctx, 1); { - setState(793); + setState(864); match(T__2); - setState(794); + setState(865); qualified(); - setState(795); + setState(866); formalParameterList(); } } @@ -3820,13 +3977,13 @@ public T accept(ParseTreeVisitor visitor) { public final SuperclassContext superclass() throws RecognitionException { SuperclassContext _localctx = new SuperclassContext(_ctx, getState()); - enterRule(_localctx, 88, RULE_superclass); + enterRule(_localctx, 90, RULE_superclass); try { enterOuterAlt(_localctx, 1); { - setState(797); - match(T__35); - setState(798); + setState(868); + match(T__39); + setState(869); dtype(); } } @@ -3866,13 +4023,13 @@ public T accept(ParseTreeVisitor visitor) { public final InterfacesContext interfaces() throws RecognitionException { InterfacesContext _localctx = new InterfacesContext(_ctx, getState()); - enterRule(_localctx, 90, RULE_interfaces); + enterRule(_localctx, 92, RULE_interfaces); try { enterOuterAlt(_localctx, 1); { - setState(800); - match(T__36); - setState(801); + setState(871); + match(T__40); + setState(872); typeList(); } } @@ -3918,28 +4075,28 @@ public T accept(ParseTreeVisitor visitor) { public final MixinApplicationClassContext mixinApplicationClass() throws RecognitionException { MixinApplicationClassContext _localctx = new MixinApplicationClassContext(_ctx, getState()); - enterRule(_localctx, 92, RULE_mixinApplicationClass); + enterRule(_localctx, 94, RULE_mixinApplicationClass); int _la; try { enterOuterAlt(_localctx, 1); { - setState(803); + setState(874); identifier(); - setState(805); + setState(876); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__38) { + if (_la==T__42) { { - setState(804); + setState(875); typeParameters(); } } - setState(807); + setState(878); match(T__4); - setState(808); + setState(879); mixinApplication(); - setState(809); + setState(880); match(T__8); } } @@ -3985,21 +4142,21 @@ public T accept(ParseTreeVisitor visitor) { public final MixinApplicationContext mixinApplication() throws RecognitionException { MixinApplicationContext _localctx = new MixinApplicationContext(_ctx, getState()); - enterRule(_localctx, 94, RULE_mixinApplication); + enterRule(_localctx, 96, RULE_mixinApplication); int _la; try { enterOuterAlt(_localctx, 1); { - setState(811); + setState(882); dtype(); - setState(812); + setState(883); mixins(); - setState(814); + setState(885); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__36) { + if (_la==T__40) { { - setState(813); + setState(884); interfaces(); } } @@ -4051,51 +4208,51 @@ public T accept(ParseTreeVisitor visitor) { public final EnumTypeContext enumType() throws RecognitionException { EnumTypeContext _localctx = new EnumTypeContext(_ctx, getState()); - enterRule(_localctx, 96, RULE_enumType); + enterRule(_localctx, 98, RULE_enumType); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { - setState(816); + setState(887); metadata(); - setState(817); - match(T__37); - setState(818); + setState(888); + match(T__41); + setState(889); identifier(); - setState(819); + setState(890); match(T__11); - setState(820); + setState(891); enumEntry(); - setState(825); + setState(896); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,81,_ctx); - while ( _alt!=2 && _alt!= ATN.INVALID_ALT_NUMBER ) { + _alt = getInterpreter().adaptivePredict(_input,89,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(821); + setState(892); match(T__0); - setState(822); + setState(893); enumEntry(); } - } + } } - setState(827); + setState(898); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,81,_ctx); + _alt = getInterpreter().adaptivePredict(_input,89,_ctx); } - setState(829); + setState(900); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__0) { { - setState(828); + setState(899); match(T__0); } } - setState(831); + setState(902); match(T__12); } } @@ -4138,13 +4295,13 @@ public T accept(ParseTreeVisitor visitor) { public final EnumEntryContext enumEntry() throws RecognitionException { EnumEntryContext _localctx = new EnumEntryContext(_ctx, getState()); - enterRule(_localctx, 98, RULE_enumEntry); + enterRule(_localctx, 100, RULE_enumEntry); try { enterOuterAlt(_localctx, 1); { - setState(833); + setState(904); metadata(); - setState(834); + setState(905); identifier(); } } @@ -4190,23 +4347,23 @@ public T accept(ParseTreeVisitor visitor) { public final TypeParameterContext typeParameter() throws RecognitionException { TypeParameterContext _localctx = new TypeParameterContext(_ctx, getState()); - enterRule(_localctx, 100, RULE_typeParameter); + enterRule(_localctx, 102, RULE_typeParameter); int _la; try { enterOuterAlt(_localctx, 1); { - setState(836); + setState(907); metadata(); - setState(837); + setState(908); identifier(); - setState(840); + setState(911); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__35) { + if (_la==T__39) { { - setState(838); - match(T__35); - setState(839); + setState(909); + match(T__39); + setState(910); dtype(); } } @@ -4252,33 +4409,33 @@ public T accept(ParseTreeVisitor visitor) { public final TypeParametersContext typeParameters() throws RecognitionException { TypeParametersContext _localctx = new TypeParametersContext(_ctx, getState()); - enterRule(_localctx, 102, RULE_typeParameters); + enterRule(_localctx, 104, RULE_typeParameters); int _la; try { enterOuterAlt(_localctx, 1); { - setState(842); - match(T__38); - setState(843); + setState(913); + match(T__42); + setState(914); typeParameter(); - setState(848); + setState(919); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__0) { { { - setState(844); + setState(915); match(T__0); - setState(845); + setState(916); typeParameter(); } } - setState(850); + setState(921); _errHandler.sync(this); _la = _input.LA(1); } - setState(851); - match(T__39); + setState(922); + match(T__43); } } catch (RecognitionException re) { @@ -4332,51 +4489,51 @@ public T accept(ParseTreeVisitor visitor) { public final MetadataContext metadata() throws RecognitionException { MetadataContext _localctx = new MetadataContext(_ctx, getState()); - enterRule(_localctx, 104, RULE_metadata); + enterRule(_localctx, 106, RULE_metadata); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { - setState(864); + setState(935); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,87,_ctx); - while ( _alt!=2 && _alt!= ATN.INVALID_ALT_NUMBER ) { + _alt = getInterpreter().adaptivePredict(_input,95,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(853); - match(T__40); - setState(854); + setState(924); + match(T__44); + setState(925); qualified(); - setState(857); + setState(928); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__19) { { - setState(855); + setState(926); match(T__19); - setState(856); + setState(927); identifier(); } } - setState(860); + setState(931); _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__13) { + switch ( getInterpreter().adaptivePredict(_input,94,_ctx) ) { + case 1: { - setState(859); + setState(930); arguments(); } - } - + break; } } + } } - setState(866); + setState(937); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,87,_ctx); + _alt = getInterpreter().adaptivePredict(_input,95,_ctx); } } } @@ -4434,39 +4591,39 @@ public T accept(ParseTreeVisitor visitor) { public final ExpressionContext expression() throws RecognitionException { ExpressionContext _localctx = new ExpressionContext(_ctx, getState()); - enterRule(_localctx, 106, RULE_expression); + enterRule(_localctx, 108, RULE_expression); int _la; try { - setState(879); + setState(950); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,89,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,97,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(867); + setState(938); assignableExpression(); - setState(868); + setState(939); assignmentOperator(); - setState(869); + setState(940); expression(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(871); + setState(942); conditionalExpression(); - setState(875); + setState(946); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__49) { + while (_la==T__56) { { { - setState(872); + setState(943); cascadeSection(); } } - setState(877); + setState(948); _errHandler.sync(this); _la = _input.LA(1); } @@ -4475,7 +4632,7 @@ public final ExpressionContext expression() throws RecognitionException { case 3: enterOuterAlt(_localctx, 3); { - setState(878); + setState(949); throwExpression(); } break; @@ -4529,33 +4686,33 @@ public T accept(ParseTreeVisitor visitor) { public final ExpressionWithoutCascadeContext expressionWithoutCascade() throws RecognitionException { ExpressionWithoutCascadeContext _localctx = new ExpressionWithoutCascadeContext(_ctx, getState()); - enterRule(_localctx, 108, RULE_expressionWithoutCascade); + enterRule(_localctx, 110, RULE_expressionWithoutCascade); try { - setState(887); + setState(958); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,90,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,98,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(881); + setState(952); assignableExpression(); - setState(882); + setState(953); assignmentOperator(); - setState(883); + setState(954); expressionWithoutCascade(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(885); + setState(956); conditionalExpression(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(886); + setState(957); throwExpressionWithoutCascade(); } break; @@ -4600,30 +4757,30 @@ public T accept(ParseTreeVisitor visitor) { public final ExpressionListContext expressionList() throws RecognitionException { ExpressionListContext _localctx = new ExpressionListContext(_ctx, getState()); - enterRule(_localctx, 110, RULE_expressionList); + enterRule(_localctx, 112, RULE_expressionList); try { int _alt; enterOuterAlt(_localctx, 1); { - setState(889); + setState(960); expression(); - setState(894); + setState(965); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,91,_ctx); - while ( _alt!=2 && _alt!= ATN.INVALID_ALT_NUMBER ) { + _alt = getInterpreter().adaptivePredict(_input,99,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(890); + setState(961); match(T__0); - setState(891); + setState(962); expression(); } - } + } } - setState(896); + setState(967); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,91,_ctx); + _alt = getInterpreter().adaptivePredict(_input,99,_ctx); } } } @@ -4660,6 +4817,12 @@ public NayaExpressionContext nayaExpression() { public ConstObjectExpressionContext constObjectExpression() { return getRuleContext(ConstObjectExpressionContext.class,0); } + public RecordLiteralContext recordLiteral() { + return getRuleContext(RecordLiteralContext.class,0); + } + public SwitchExpressionContext switchExpression() { + return getRuleContext(SwitchExpressionContext.class,0); + } public ExpressionContext expression() { return getRuleContext(ExpressionContext.class,0); } @@ -4684,70 +4847,84 @@ public T accept(ParseTreeVisitor visitor) { public final PrimaryContext primary() throws RecognitionException { PrimaryContext _localctx = new PrimaryContext(_ctx, getState()); - enterRule(_localctx, 112, RULE_primary); + enterRule(_localctx, 114, RULE_primary); try { - setState(909); + setState(982); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,92,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,100,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(897); + setState(968); thisExpression(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(898); - match(T__33); - setState(899); + setState(969); + match(T__37); + setState(970); unconditionalAssignableSelector(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(900); + setState(971); functionExpression(); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(901); + setState(972); literal(); } break; case 5: enterOuterAlt(_localctx, 5); { - setState(902); + setState(973); identifier(); } break; case 6: enterOuterAlt(_localctx, 6); { - setState(903); + setState(974); nayaExpression(); } break; case 7: enterOuterAlt(_localctx, 7); { - setState(904); + setState(975); constObjectExpression(); } break; case 8: enterOuterAlt(_localctx, 8); { - setState(905); + setState(976); + recordLiteral(); + } + break; + case 9: + enterOuterAlt(_localctx, 9); + { + setState(977); + switchExpression(); + } + break; + case 10: + enterOuterAlt(_localctx, 10); + { + setState(978); match(T__13); - setState(906); + setState(979); expression(); - setState(907); + setState(980); match(T__14); } break; @@ -4764,100 +4941,974 @@ public final PrimaryContext primary() throws RecognitionException { return _localctx; } - public static class LiteralContext extends ParserRuleContext { - public NullLiteralContext nullLiteral() { - return getRuleContext(NullLiteralContext.class,0); + public static class RecordLiteralContext extends ParserRuleContext { + public List recordField() { + return getRuleContexts(RecordFieldContext.class); } - public BooleanLiteralContext booleanLiteral() { - return getRuleContext(BooleanLiteralContext.class,0); + public RecordFieldContext recordField(int i) { + return getRuleContext(RecordFieldContext.class,i); } - public NumericLiteralContext numericLiteral() { - return getRuleContext(NumericLiteralContext.class,0); + public RecordLiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); } - public StringLiteralContext stringLiteral() { - return getRuleContext(StringLiteralContext.class,0); + @Override public int getRuleIndex() { return RULE_recordLiteral; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).enterRecordLiteral(this); } - public SymbolLiteralContext symbolLiteral() { - return getRuleContext(SymbolLiteralContext.class,0); + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).exitRecordLiteral(this); } - public MapLiteralContext mapLiteral() { - return getRuleContext(MapLiteralContext.class,0); + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof Dart2Visitor ) return ((Dart2Visitor)visitor).visitRecordLiteral(this); + else return visitor.visitChildren(this); } - public ListLiteralContext listLiteral() { - return getRuleContext(ListLiteralContext.class,0); + } + + public final RecordLiteralContext recordLiteral() throws RecognitionException { + RecordLiteralContext _localctx = new RecordLiteralContext(_ctx, getState()); + enterRule(_localctx, 116, RULE_recordLiteral); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(984); + match(T__13); + setState(985); + recordField(); + setState(986); + match(T__0); + setState(987); + recordField(); + setState(992); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,101,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(988); + match(T__0); + setState(989); + recordField(); + } + } + } + setState(994); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,101,_ctx); + } + setState(996); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__0) { + { + setState(995); + match(T__0); + } + } + + setState(998); + match(T__14); + } } - public LiteralContext(ParserRuleContext parent, int invokingState) { + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class RecordFieldContext extends ParserRuleContext { + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public IdentifierContext identifier() { + return getRuleContext(IdentifierContext.class,0); + } + public RecordFieldContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } - @Override public int getRuleIndex() { return RULE_literal; } + @Override public int getRuleIndex() { return RULE_recordField; } @Override public void enterRule(ParseTreeListener listener) { - if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).enterLiteral(this); + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).enterRecordField(this); } @Override public void exitRule(ParseTreeListener listener) { - if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).exitLiteral(this); + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).exitRecordField(this); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof Dart2Visitor ) return ((Dart2Visitor)visitor).visitLiteral(this); + if ( visitor instanceof Dart2Visitor ) return ((Dart2Visitor)visitor).visitRecordField(this); else return visitor.visitChildren(this); } } - public final LiteralContext literal() throws RecognitionException { - LiteralContext _localctx = new LiteralContext(_ctx, getState()); - enterRule(_localctx, 114, RULE_literal); + public final RecordFieldContext recordField() throws RecognitionException { + RecordFieldContext _localctx = new RecordFieldContext(_ctx, getState()); + enterRule(_localctx, 118, RULE_recordField); try { - setState(918); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,93,_ctx) ) { - case 1: + enterOuterAlt(_localctx, 1); + { + setState(1003); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,103,_ctx) ) { + case 1: + { + setState(1000); + identifier(); + setState(1001); + match(T__20); + } + break; + } + setState(1005); + expression(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class RecordTypeContext extends ParserRuleContext { + public List recordTypeField() { + return getRuleContexts(RecordTypeFieldContext.class); + } + public RecordTypeFieldContext recordTypeField(int i) { + return getRuleContext(RecordTypeFieldContext.class,i); + } + public RecordTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_recordType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).enterRecordType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).exitRecordType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof Dart2Visitor ) return ((Dart2Visitor)visitor).visitRecordType(this); + else return visitor.visitChildren(this); + } + } + + public final RecordTypeContext recordType() throws RecognitionException { + RecordTypeContext _localctx = new RecordTypeContext(_ctx, getState()); + enterRule(_localctx, 120, RULE_recordType); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1007); + match(T__13); + setState(1008); + recordTypeField(); + setState(1009); + match(T__0); + setState(1010); + recordTypeField(); + setState(1015); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,104,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1011); + match(T__0); + setState(1012); + recordTypeField(); + } + } + } + setState(1017); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,104,_ctx); + } + setState(1019); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__0) { + { + setState(1018); + match(T__0); + } + } + + setState(1021); + match(T__14); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class RecordTypeFieldContext extends ParserRuleContext { + public DtypeContext dtype() { + return getRuleContext(DtypeContext.class,0); + } + public IdentifierContext identifier() { + return getRuleContext(IdentifierContext.class,0); + } + public RecordTypeFieldContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_recordTypeField; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).enterRecordTypeField(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).exitRecordTypeField(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof Dart2Visitor ) return ((Dart2Visitor)visitor).visitRecordTypeField(this); + else return visitor.visitChildren(this); + } + } + + public final RecordTypeFieldContext recordTypeField() throws RecognitionException { + RecordTypeFieldContext _localctx = new RecordTypeFieldContext(_ctx, getState()); + enterRule(_localctx, 122, RULE_recordTypeField); + try { + enterOuterAlt(_localctx, 1); + { + setState(1026); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,106,_ctx) ) { + case 1: + { + setState(1023); + identifier(); + setState(1024); + match(T__20); + } + break; + } + setState(1028); + dtype(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SwitchExpressionContext extends ParserRuleContext { + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public List switchExpressionCase() { + return getRuleContexts(SwitchExpressionCaseContext.class); + } + public SwitchExpressionCaseContext switchExpressionCase(int i) { + return getRuleContext(SwitchExpressionCaseContext.class,i); + } + public SwitchExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_switchExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).enterSwitchExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).exitSwitchExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof Dart2Visitor ) return ((Dart2Visitor)visitor).visitSwitchExpression(this); + else return visitor.visitChildren(this); + } + } + + public final SwitchExpressionContext switchExpression() throws RecognitionException { + SwitchExpressionContext _localctx = new SwitchExpressionContext(_ctx, getState()); + enterRule(_localctx, 124, RULE_switchExpression); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1030); + match(T__45); + setState(1031); + match(T__13); + setState(1032); + expression(); + setState(1033); + match(T__14); + setState(1034); + match(T__11); + setState(1035); + switchExpressionCase(); + setState(1040); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,107,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1036); + match(T__0); + setState(1037); + switchExpressionCase(); + } + } + } + setState(1042); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,107,_ctx); + } + setState(1044); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__0) { + { + setState(1043); + match(T__0); + } + } + + setState(1046); + match(T__12); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SwitchExpressionCaseContext extends ParserRuleContext { + public GuardedPatternContext guardedPattern() { + return getRuleContext(GuardedPatternContext.class,0); + } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public SwitchExpressionCaseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_switchExpressionCase; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).enterSwitchExpressionCase(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).exitSwitchExpressionCase(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof Dart2Visitor ) return ((Dart2Visitor)visitor).visitSwitchExpressionCase(this); + else return visitor.visitChildren(this); + } + } + + public final SwitchExpressionCaseContext switchExpressionCase() throws RecognitionException { + SwitchExpressionCaseContext _localctx = new SwitchExpressionCaseContext(_ctx, getState()); + enterRule(_localctx, 126, RULE_switchExpressionCase); + try { + enterOuterAlt(_localctx, 1); + { + setState(1048); + guardedPattern(); + setState(1049); + match(T__7); + setState(1050); + expression(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class GuardedPatternContext extends ParserRuleContext { + public PatternContext pattern() { + return getRuleContext(PatternContext.class,0); + } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public GuardedPatternContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_guardedPattern; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).enterGuardedPattern(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).exitGuardedPattern(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof Dart2Visitor ) return ((Dart2Visitor)visitor).visitGuardedPattern(this); + else return visitor.visitChildren(this); + } + } + + public final GuardedPatternContext guardedPattern() throws RecognitionException { + GuardedPatternContext _localctx = new GuardedPatternContext(_ctx, getState()); + enterRule(_localctx, 128, RULE_guardedPattern); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1052); + pattern(); + setState(1055); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__46) { + { + setState(1053); + match(T__46); + setState(1054); + expression(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PatternContext extends ParserRuleContext { + public ConstantPatternContext constantPattern() { + return getRuleContext(ConstantPatternContext.class,0); + } + public TypeTestPatternContext typeTestPattern() { + return getRuleContext(TypeTestPatternContext.class,0); + } + public WildcardPatternContext wildcardPattern() { + return getRuleContext(WildcardPatternContext.class,0); + } + public VariablePatternContext variablePattern() { + return getRuleContext(VariablePatternContext.class,0); + } + public ParenthesizedPatternContext parenthesizedPattern() { + return getRuleContext(ParenthesizedPatternContext.class,0); + } + public PatternContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_pattern; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).enterPattern(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).exitPattern(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof Dart2Visitor ) return ((Dart2Visitor)visitor).visitPattern(this); + else return visitor.visitChildren(this); + } + } + + public final PatternContext pattern() throws RecognitionException { + PatternContext _localctx = new PatternContext(_ctx, getState()); + enterRule(_localctx, 130, RULE_pattern); + try { + setState(1062); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,110,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1057); + constantPattern(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1058); + typeTestPattern(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(1059); + wildcardPattern(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(1060); + variablePattern(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(1061); + parenthesizedPattern(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ConstantPatternContext extends ParserRuleContext { + public LiteralContext literal() { + return getRuleContext(LiteralContext.class,0); + } + public IdentifierContext identifier() { + return getRuleContext(IdentifierContext.class,0); + } + public QualifiedContext qualified() { + return getRuleContext(QualifiedContext.class,0); + } + public ConstObjectExpressionContext constObjectExpression() { + return getRuleContext(ConstObjectExpressionContext.class,0); + } + public ConstantPatternContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_constantPattern; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).enterConstantPattern(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).exitConstantPattern(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof Dart2Visitor ) return ((Dart2Visitor)visitor).visitConstantPattern(this); + else return visitor.visitChildren(this); + } + } + + public final ConstantPatternContext constantPattern() throws RecognitionException { + ConstantPatternContext _localctx = new ConstantPatternContext(_ctx, getState()); + enterRule(_localctx, 132, RULE_constantPattern); + try { + setState(1068); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,111,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1064); + literal(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1065); + identifier(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(1066); + qualified(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(1067); + constObjectExpression(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeTestPatternContext extends ParserRuleContext { + public DtypeContext dtype() { + return getRuleContext(DtypeContext.class,0); + } + public IdentifierContext identifier() { + return getRuleContext(IdentifierContext.class,0); + } + public TypeTestPatternContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeTestPattern; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).enterTypeTestPattern(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).exitTypeTestPattern(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof Dart2Visitor ) return ((Dart2Visitor)visitor).visitTypeTestPattern(this); + else return visitor.visitChildren(this); + } + } + + public final TypeTestPatternContext typeTestPattern() throws RecognitionException { + TypeTestPatternContext _localctx = new TypeTestPatternContext(_ctx, getState()); + enterRule(_localctx, 134, RULE_typeTestPattern); + try { + enterOuterAlt(_localctx, 1); + { + setState(1070); + dtype(); + setState(1071); + identifier(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class WildcardPatternContext extends ParserRuleContext { + public WildcardPatternContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_wildcardPattern; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).enterWildcardPattern(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).exitWildcardPattern(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof Dart2Visitor ) return ((Dart2Visitor)visitor).visitWildcardPattern(this); + else return visitor.visitChildren(this); + } + } + + public final WildcardPatternContext wildcardPattern() throws RecognitionException { + WildcardPatternContext _localctx = new WildcardPatternContext(_ctx, getState()); + enterRule(_localctx, 136, RULE_wildcardPattern); + try { + enterOuterAlt(_localctx, 1); + { + setState(1073); + match(T__47); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class VariablePatternContext extends ParserRuleContext { + public IdentifierContext identifier() { + return getRuleContext(IdentifierContext.class,0); + } + public DtypeContext dtype() { + return getRuleContext(DtypeContext.class,0); + } + public VariablePatternContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_variablePattern; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).enterVariablePattern(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).exitVariablePattern(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof Dart2Visitor ) return ((Dart2Visitor)visitor).visitVariablePattern(this); + else return visitor.visitChildren(this); + } + } + + public final VariablePatternContext variablePattern() throws RecognitionException { + VariablePatternContext _localctx = new VariablePatternContext(_ctx, getState()); + enterRule(_localctx, 138, RULE_variablePattern); + try { + enterOuterAlt(_localctx, 1); + { + setState(1080); + _errHandler.sync(this); + switch (_input.LA(1)) { + case T__3: + { + setState(1075); + match(T__3); + } + break; + case T__1: + { + setState(1076); + match(T__1); + setState(1078); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,112,_ctx) ) { + case 1: + { + setState(1077); + dtype(); + } + break; + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(1082); + identifier(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ParenthesizedPatternContext extends ParserRuleContext { + public PatternContext pattern() { + return getRuleContext(PatternContext.class,0); + } + public ParenthesizedPatternContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_parenthesizedPattern; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).enterParenthesizedPattern(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).exitParenthesizedPattern(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof Dart2Visitor ) return ((Dart2Visitor)visitor).visitParenthesizedPattern(this); + else return visitor.visitChildren(this); + } + } + + public final ParenthesizedPatternContext parenthesizedPattern() throws RecognitionException { + ParenthesizedPatternContext _localctx = new ParenthesizedPatternContext(_ctx, getState()); + enterRule(_localctx, 140, RULE_parenthesizedPattern); + try { + enterOuterAlt(_localctx, 1); + { + setState(1084); + match(T__13); + setState(1085); + pattern(); + setState(1086); + match(T__14); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LiteralContext extends ParserRuleContext { + public NullLiteralContext nullLiteral() { + return getRuleContext(NullLiteralContext.class,0); + } + public BooleanLiteralContext booleanLiteral() { + return getRuleContext(BooleanLiteralContext.class,0); + } + public NumericLiteralContext numericLiteral() { + return getRuleContext(NumericLiteralContext.class,0); + } + public StringLiteralContext stringLiteral() { + return getRuleContext(StringLiteralContext.class,0); + } + public SymbolLiteralContext symbolLiteral() { + return getRuleContext(SymbolLiteralContext.class,0); + } + public MapLiteralContext mapLiteral() { + return getRuleContext(MapLiteralContext.class,0); + } + public ListLiteralContext listLiteral() { + return getRuleContext(ListLiteralContext.class,0); + } + public LiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_literal; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).enterLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof Dart2Listener ) ((Dart2Listener)listener).exitLiteral(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof Dart2Visitor ) return ((Dart2Visitor)visitor).visitLiteral(this); + else return visitor.visitChildren(this); + } + } + + public final LiteralContext literal() throws RecognitionException { + LiteralContext _localctx = new LiteralContext(_ctx, getState()); + enterRule(_localctx, 142, RULE_literal); + try { + setState(1095); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,114,_ctx) ) { + case 1: enterOuterAlt(_localctx, 1); { - setState(911); + setState(1088); nullLiteral(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(912); + setState(1089); booleanLiteral(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(913); + setState(1090); numericLiteral(); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(914); + setState(1091); stringLiteral(); } break; case 5: enterOuterAlt(_localctx, 5); { - setState(915); + setState(1092); symbolLiteral(); } break; case 6: enterOuterAlt(_localctx, 6); { - setState(916); + setState(1093); mapLiteral(); } break; case 7: enterOuterAlt(_localctx, 7); { - setState(917); + setState(1094); listLiteral(); } break; @@ -4896,12 +5947,12 @@ public T accept(ParseTreeVisitor visitor) { public final NullLiteralContext nullLiteral() throws RecognitionException { NullLiteralContext _localctx = new NullLiteralContext(_ctx, getState()); - enterRule(_localctx, 116, RULE_nullLiteral); + enterRule(_localctx, 144, RULE_nullLiteral); try { enterOuterAlt(_localctx, 1); { - setState(920); - match(T__41); + setState(1097); + match(T__48); } } catch (RecognitionException re) { @@ -4939,12 +5990,12 @@ public T accept(ParseTreeVisitor visitor) { public final NumericLiteralContext numericLiteral() throws RecognitionException { NumericLiteralContext _localctx = new NumericLiteralContext(_ctx, getState()); - enterRule(_localctx, 118, RULE_numericLiteral); + enterRule(_localctx, 146, RULE_numericLiteral); int _la; try { enterOuterAlt(_localctx, 1); { - setState(922); + setState(1099); _la = _input.LA(1); if ( !(_la==NUMBER || _la==HEX_NUMBER) ) { _errHandler.recoverInline(this); @@ -4989,14 +6040,14 @@ public T accept(ParseTreeVisitor visitor) { public final BooleanLiteralContext booleanLiteral() throws RecognitionException { BooleanLiteralContext _localctx = new BooleanLiteralContext(_ctx, getState()); - enterRule(_localctx, 120, RULE_booleanLiteral); + enterRule(_localctx, 148, RULE_booleanLiteral); int _la; try { enterOuterAlt(_localctx, 1); { - setState(924); + setState(1101); _la = _input.LA(1); - if ( !(_la==T__42 || _la==T__43) ) { + if ( !(_la==T__49 || _la==T__50) ) { _errHandler.recoverInline(this); } else { @@ -5047,18 +6098,18 @@ public T accept(ParseTreeVisitor visitor) { public final StringLiteralContext stringLiteral() throws RecognitionException { StringLiteralContext _localctx = new StringLiteralContext(_ctx, getState()); - enterRule(_localctx, 122, RULE_stringLiteral); + enterRule(_localctx, 150, RULE_stringLiteral); int _la; try { enterOuterAlt(_localctx, 1); { - setState(927); + setState(1104); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(926); + setState(1103); _la = _input.LA(1); if ( !(_la==SingleLineString || _la==MultiLineString) ) { _errHandler.recoverInline(this); @@ -5070,7 +6121,7 @@ public final StringLiteralContext stringLiteral() throws RecognitionException { } } } - setState(929); + setState(1106); _errHandler.sync(this); _la = _input.LA(1); } while ( _la==SingleLineString || _la==MultiLineString ); @@ -5115,28 +6166,28 @@ public T accept(ParseTreeVisitor visitor) { public final StringInterpolationContext stringInterpolation() throws RecognitionException { StringInterpolationContext _localctx = new StringInterpolationContext(_ctx, getState()); - enterRule(_localctx, 124, RULE_stringInterpolation); + enterRule(_localctx, 152, RULE_stringInterpolation); try { - setState(937); + setState(1114); _errHandler.sync(this); switch (_input.LA(1)) { - case T__44: + case T__51: enterOuterAlt(_localctx, 1); { - setState(931); - match(T__44); - setState(932); + setState(1108); + match(T__51); + setState(1109); identifier(); } break; - case T__45: + case T__52: enterOuterAlt(_localctx, 2); { - setState(933); - match(T__45); - setState(934); + setState(1110); + match(T__52); + setState(1111); expression(); - setState(935); + setState(1112); match(T__12); } break; @@ -5186,29 +6237,22 @@ public T accept(ParseTreeVisitor visitor) { public final SymbolLiteralContext symbolLiteral() throws RecognitionException { SymbolLiteralContext _localctx = new SymbolLiteralContext(_ctx, getState()); - enterRule(_localctx, 126, RULE_symbolLiteral); + enterRule(_localctx, 154, RULE_symbolLiteral); try { int _alt; enterOuterAlt(_localctx, 1); { - setState(939); - match(T__46); - setState(949); + setState(1116); + match(T__53); + setState(1126); _errHandler.sync(this); switch (_input.LA(1)) { - case T__27: - case T__28: - case T__29: - case T__30: - case T__38: - case T__39: - case T__67: - case T__68: - case T__69: - case T__70: - case T__71: - case T__72: - case T__73: + case T__31: + case T__32: + case T__33: + case T__34: + case T__42: + case T__43: case T__74: case T__75: case T__76: @@ -5216,33 +6260,40 @@ public final SymbolLiteralContext symbolLiteral() throws RecognitionException { case T__78: case T__79: case T__80: + case T__81: + case T__82: + case T__83: + case T__84: + case T__85: + case T__86: + case T__87: { - setState(940); + setState(1117); operator(); } break; case IDENTIFIER: { { - setState(941); + setState(1118); identifier(); - setState(946); + setState(1123); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,96,_ctx); - while ( _alt!=2 && _alt!= ATN.INVALID_ALT_NUMBER ) { + _alt = getInterpreter().adaptivePredict(_input,117,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(942); + setState(1119); match(T__0); - setState(943); + setState(1120); identifier(); } - } + } } - setState(948); + setState(1125); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,96,_ctx); + _alt = getInterpreter().adaptivePredict(_input,117,_ctx); } } } @@ -5291,46 +6342,46 @@ public T accept(ParseTreeVisitor visitor) { public final ListLiteralContext listLiteral() throws RecognitionException { ListLiteralContext _localctx = new ListLiteralContext(_ctx, getState()); - enterRule(_localctx, 128, RULE_listLiteral); + enterRule(_localctx, 156, RULE_listLiteral); int _la; try { enterOuterAlt(_localctx, 1); { - setState(952); + setState(1129); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__2) { { - setState(951); + setState(1128); match(T__2); } } - setState(955); + setState(1132); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__38) { + if (_la==T__42) { { - setState(954); + setState(1131); typeArguments(); } } - setState(957); + setState(1134); match(T__15); - setState(962); + setState(1139); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__11) | (1L << T__13) | (1L << T__15) | (1L << T__18) | (1L << T__27) | (1L << T__33) | (1L << T__38) | (1L << T__41) | (1L << T__42) | (1L << T__43) | (1L << T__46) | (1L << T__47) | (1L << T__48))) != 0) || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (T__76 - 77)) | (1L << (T__81 - 77)) | (1L << (T__82 - 77)) | (1L << (T__83 - 77)) | (1L << (T__84 - 77)) | (1L << (NUMBER - 77)) | (1L << (HEX_NUMBER - 77)) | (1L << (SingleLineString - 77)) | (1L << (MultiLineString - 77)) | (1L << (IDENTIFIER - 77)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__11) | (1L << T__13) | (1L << T__15) | (1L << T__18) | (1L << T__31) | (1L << T__37) | (1L << T__42) | (1L << T__45) | (1L << T__48) | (1L << T__49) | (1L << T__50) | (1L << T__53) | (1L << T__54) | (1L << T__55))) != 0) || ((((_la - 84)) & ~0x3f) == 0 && ((1L << (_la - 84)) & ((1L << (T__83 - 84)) | (1L << (T__88 - 84)) | (1L << (T__89 - 84)) | (1L << (T__90 - 84)) | (1L << (T__91 - 84)) | (1L << (NUMBER - 84)) | (1L << (HEX_NUMBER - 84)) | (1L << (SingleLineString - 84)) | (1L << (MultiLineString - 84)) | (1L << (IDENTIFIER - 84)))) != 0)) { { - setState(958); + setState(1135); expressionList(); - setState(960); + setState(1137); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__0) { { - setState(959); + setState(1136); match(T__0); } } @@ -5338,7 +6389,7 @@ public final ListLiteralContext listLiteral() throws RecognitionException { } } - setState(964); + setState(1141); match(T__16); } } @@ -5384,65 +6435,65 @@ public T accept(ParseTreeVisitor visitor) { public final MapLiteralContext mapLiteral() throws RecognitionException { MapLiteralContext _localctx = new MapLiteralContext(_ctx, getState()); - enterRule(_localctx, 130, RULE_mapLiteral); + enterRule(_localctx, 158, RULE_mapLiteral); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { - setState(967); + setState(1144); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__2) { { - setState(966); + setState(1143); match(T__2); } } - setState(970); + setState(1147); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__38) { + if (_la==T__42) { { - setState(969); + setState(1146); typeArguments(); } } - setState(972); + setState(1149); match(T__11); - setState(984); + setState(1161); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__11) | (1L << T__13) | (1L << T__15) | (1L << T__18) | (1L << T__27) | (1L << T__33) | (1L << T__38) | (1L << T__41) | (1L << T__42) | (1L << T__43) | (1L << T__46) | (1L << T__47) | (1L << T__48))) != 0) || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (T__76 - 77)) | (1L << (T__81 - 77)) | (1L << (T__82 - 77)) | (1L << (T__83 - 77)) | (1L << (T__84 - 77)) | (1L << (NUMBER - 77)) | (1L << (HEX_NUMBER - 77)) | (1L << (SingleLineString - 77)) | (1L << (MultiLineString - 77)) | (1L << (IDENTIFIER - 77)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__11) | (1L << T__13) | (1L << T__15) | (1L << T__18) | (1L << T__31) | (1L << T__37) | (1L << T__42) | (1L << T__45) | (1L << T__48) | (1L << T__49) | (1L << T__50) | (1L << T__53) | (1L << T__54) | (1L << T__55))) != 0) || ((((_la - 84)) & ~0x3f) == 0 && ((1L << (_la - 84)) & ((1L << (T__83 - 84)) | (1L << (T__88 - 84)) | (1L << (T__89 - 84)) | (1L << (T__90 - 84)) | (1L << (T__91 - 84)) | (1L << (NUMBER - 84)) | (1L << (HEX_NUMBER - 84)) | (1L << (SingleLineString - 84)) | (1L << (MultiLineString - 84)) | (1L << (IDENTIFIER - 84)))) != 0)) { { - setState(973); + setState(1150); mapLiteralEntry(); - setState(978); + setState(1155); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,104,_ctx); - while ( _alt!=2 && _alt!= ATN.INVALID_ALT_NUMBER ) { + _alt = getInterpreter().adaptivePredict(_input,125,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(974); + setState(1151); match(T__0); - setState(975); + setState(1152); mapLiteralEntry(); } - } + } } - setState(980); + setState(1157); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,104,_ctx); + _alt = getInterpreter().adaptivePredict(_input,125,_ctx); } - setState(982); + setState(1159); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__0) { { - setState(981); + setState(1158); match(T__0); } } @@ -5450,7 +6501,7 @@ public final MapLiteralContext mapLiteral() throws RecognitionException { } } - setState(986); + setState(1163); match(T__12); } } @@ -5493,15 +6544,15 @@ public T accept(ParseTreeVisitor visitor) { public final MapLiteralEntryContext mapLiteralEntry() throws RecognitionException { MapLiteralEntryContext _localctx = new MapLiteralEntryContext(_ctx, getState()); - enterRule(_localctx, 132, RULE_mapLiteralEntry); + enterRule(_localctx, 160, RULE_mapLiteralEntry); try { enterOuterAlt(_localctx, 1); { - setState(988); + setState(1165); expression(); - setState(989); + setState(1166); match(T__20); - setState(990); + setState(1167); expression(); } } @@ -5541,13 +6592,13 @@ public T accept(ParseTreeVisitor visitor) { public final ThrowExpressionContext throwExpression() throws RecognitionException { ThrowExpressionContext _localctx = new ThrowExpressionContext(_ctx, getState()); - enterRule(_localctx, 134, RULE_throwExpression); + enterRule(_localctx, 162, RULE_throwExpression); try { enterOuterAlt(_localctx, 1); { - setState(992); - match(T__47); - setState(993); + setState(1169); + match(T__54); + setState(1170); expression(); } } @@ -5587,13 +6638,13 @@ public T accept(ParseTreeVisitor visitor) { public final ThrowExpressionWithoutCascadeContext throwExpressionWithoutCascade() throws RecognitionException { ThrowExpressionWithoutCascadeContext _localctx = new ThrowExpressionWithoutCascadeContext(_ctx, getState()); - enterRule(_localctx, 136, RULE_throwExpressionWithoutCascade); + enterRule(_localctx, 164, RULE_throwExpressionWithoutCascade); try { enterOuterAlt(_localctx, 1); { - setState(995); - match(T__47); - setState(996); + setState(1172); + match(T__54); + setState(1173); expressionWithoutCascade(); } } @@ -5636,13 +6687,13 @@ public T accept(ParseTreeVisitor visitor) { public final FunctionExpressionContext functionExpression() throws RecognitionException { FunctionExpressionContext _localctx = new FunctionExpressionContext(_ctx, getState()); - enterRule(_localctx, 138, RULE_functionExpression); + enterRule(_localctx, 166, RULE_functionExpression); try { enterOuterAlt(_localctx, 1); { - setState(998); + setState(1175); formalParameterPart(); - setState(999); + setState(1176); functionBody(); } } @@ -5679,11 +6730,11 @@ public T accept(ParseTreeVisitor visitor) { public final ThisExpressionContext thisExpression() throws RecognitionException { ThisExpressionContext _localctx = new ThisExpressionContext(_ctx, getState()); - enterRule(_localctx, 140, RULE_thisExpression); + enterRule(_localctx, 168, RULE_thisExpression); try { enterOuterAlt(_localctx, 1); { - setState(1001); + setState(1178); match(T__18); } } @@ -5729,28 +6780,28 @@ public T accept(ParseTreeVisitor visitor) { public final NayaExpressionContext nayaExpression() throws RecognitionException { NayaExpressionContext _localctx = new NayaExpressionContext(_ctx, getState()); - enterRule(_localctx, 142, RULE_nayaExpression); + enterRule(_localctx, 170, RULE_nayaExpression); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1003); - match(T__48); - setState(1004); + setState(1180); + match(T__55); + setState(1181); dtype(); - setState(1007); + setState(1184); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__19) { { - setState(1005); + setState(1182); match(T__19); - setState(1006); + setState(1183); identifier(); } } - setState(1009); + setState(1186); arguments(); } } @@ -5796,28 +6847,28 @@ public T accept(ParseTreeVisitor visitor) { public final ConstObjectExpressionContext constObjectExpression() throws RecognitionException { ConstObjectExpressionContext _localctx = new ConstObjectExpressionContext(_ctx, getState()); - enterRule(_localctx, 144, RULE_constObjectExpression); + enterRule(_localctx, 172, RULE_constObjectExpression); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1011); + setState(1188); match(T__2); - setState(1012); + setState(1189); dtype(); - setState(1015); + setState(1192); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__19) { { - setState(1013); + setState(1190); match(T__19); - setState(1014); + setState(1191); identifier(); } } - setState(1017); + setState(1194); arguments(); } } @@ -5857,26 +6908,26 @@ public T accept(ParseTreeVisitor visitor) { public final ArgumentsContext arguments() throws RecognitionException { ArgumentsContext _localctx = new ArgumentsContext(_ctx, getState()); - enterRule(_localctx, 146, RULE_arguments); + enterRule(_localctx, 174, RULE_arguments); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1019); + setState(1196); match(T__13); - setState(1024); + setState(1201); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__11) | (1L << T__13) | (1L << T__15) | (1L << T__18) | (1L << T__27) | (1L << T__33) | (1L << T__38) | (1L << T__41) | (1L << T__42) | (1L << T__43) | (1L << T__46) | (1L << T__47) | (1L << T__48))) != 0) || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (T__76 - 77)) | (1L << (T__81 - 77)) | (1L << (T__82 - 77)) | (1L << (T__83 - 77)) | (1L << (T__84 - 77)) | (1L << (NUMBER - 77)) | (1L << (HEX_NUMBER - 77)) | (1L << (SingleLineString - 77)) | (1L << (MultiLineString - 77)) | (1L << (IDENTIFIER - 77)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__11) | (1L << T__13) | (1L << T__15) | (1L << T__18) | (1L << T__31) | (1L << T__37) | (1L << T__42) | (1L << T__45) | (1L << T__48) | (1L << T__49) | (1L << T__50) | (1L << T__53) | (1L << T__54) | (1L << T__55))) != 0) || ((((_la - 84)) & ~0x3f) == 0 && ((1L << (_la - 84)) & ((1L << (T__83 - 84)) | (1L << (T__88 - 84)) | (1L << (T__89 - 84)) | (1L << (T__90 - 84)) | (1L << (T__91 - 84)) | (1L << (NUMBER - 84)) | (1L << (HEX_NUMBER - 84)) | (1L << (SingleLineString - 84)) | (1L << (MultiLineString - 84)) | (1L << (IDENTIFIER - 84)))) != 0)) { { - setState(1020); + setState(1197); argumentList(); - setState(1022); + setState(1199); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__0) { { - setState(1021); + setState(1198); match(T__0); } } @@ -5884,7 +6935,7 @@ public final ArgumentsContext arguments() throws RecognitionException { } } - setState(1026); + setState(1203); match(T__14); } } @@ -5930,59 +6981,59 @@ public T accept(ParseTreeVisitor visitor) { public final ArgumentListContext argumentList() throws RecognitionException { ArgumentListContext _localctx = new ArgumentListContext(_ctx, getState()); - enterRule(_localctx, 148, RULE_argumentList); + enterRule(_localctx, 176, RULE_argumentList); try { int _alt; - setState(1044); + setState(1221); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,113,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,134,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(1028); + setState(1205); namedArgument(); - setState(1033); + setState(1210); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,111,_ctx); - while ( _alt!=2 && _alt!= ATN.INVALID_ALT_NUMBER ) { + _alt = getInterpreter().adaptivePredict(_input,132,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(1029); + setState(1206); match(T__0); - setState(1030); + setState(1207); namedArgument(); } - } + } } - setState(1035); + setState(1212); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,111,_ctx); + _alt = getInterpreter().adaptivePredict(_input,132,_ctx); } } break; case 2: enterOuterAlt(_localctx, 2); { - setState(1036); + setState(1213); expressionList(); - setState(1041); + setState(1218); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,112,_ctx); - while ( _alt!=2 && _alt!= ATN.INVALID_ALT_NUMBER ) { + _alt = getInterpreter().adaptivePredict(_input,133,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(1037); + setState(1214); match(T__0); - setState(1038); + setState(1215); namedArgument(); } - } + } } - setState(1043); + setState(1220); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,112,_ctx); + _alt = getInterpreter().adaptivePredict(_input,133,_ctx); } } break; @@ -6027,13 +7078,13 @@ public T accept(ParseTreeVisitor visitor) { public final NamedArgumentContext namedArgument() throws RecognitionException { NamedArgumentContext _localctx = new NamedArgumentContext(_ctx, getState()); - enterRule(_localctx, 150, RULE_namedArgument); + enterRule(_localctx, 178, RULE_namedArgument); try { enterOuterAlt(_localctx, 1); { - setState(1046); + setState(1223); label(); - setState(1047); + setState(1224); expression(); } } @@ -6091,67 +7142,67 @@ public T accept(ParseTreeVisitor visitor) { public final CascadeSectionContext cascadeSection() throws RecognitionException { CascadeSectionContext _localctx = new CascadeSectionContext(_ctx, getState()); - enterRule(_localctx, 152, RULE_cascadeSection); + enterRule(_localctx, 180, RULE_cascadeSection); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1049); - match(T__49); + setState(1226); + match(T__56); { - setState(1050); + setState(1227); cascadeSelector(); - setState(1054); + setState(1231); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__13 || _la==T__38) { + while (_la==T__13 || _la==T__42) { { { - setState(1051); + setState(1228); argumentPart(); } } - setState(1056); + setState(1233); _errHandler.sync(this); _la = _input.LA(1); } } - setState(1066); + setState(1243); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__15 || _la==T__19 || _la==T__85) { + while (_la==T__15 || _la==T__19 || _la==T__92) { { { - setState(1057); + setState(1234); assignableSelector(); - setState(1061); + setState(1238); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__13 || _la==T__38) { + while (_la==T__13 || _la==T__42) { { { - setState(1058); + setState(1235); argumentPart(); } } - setState(1063); + setState(1240); _errHandler.sync(this); _la = _input.LA(1); } } } - setState(1068); + setState(1245); _errHandler.sync(this); _la = _input.LA(1); } - setState(1072); + setState(1249); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__4) | (1L << T__50) | (1L << T__51) | (1L << T__52) | (1L << T__53) | (1L << T__54) | (1L << T__55) | (1L << T__56) | (1L << T__57) | (1L << T__58) | (1L << T__59) | (1L << T__60) | (1L << T__61))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__4) | (1L << T__57) | (1L << T__58) | (1L << T__59) | (1L << T__60) | (1L << T__61) | (1L << T__62))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (T__63 - 64)) | (1L << (T__64 - 64)) | (1L << (T__65 - 64)) | (1L << (T__66 - 64)) | (1L << (T__67 - 64)) | (1L << (T__68 - 64)))) != 0)) { { - setState(1069); + setState(1246); assignmentOperator(); - setState(1070); + setState(1247); expressionWithoutCascade(); } } @@ -6197,26 +7248,26 @@ public T accept(ParseTreeVisitor visitor) { public final CascadeSelectorContext cascadeSelector() throws RecognitionException { CascadeSelectorContext _localctx = new CascadeSelectorContext(_ctx, getState()); - enterRule(_localctx, 154, RULE_cascadeSelector); + enterRule(_localctx, 182, RULE_cascadeSelector); try { - setState(1079); + setState(1256); _errHandler.sync(this); switch (_input.LA(1)) { case T__15: enterOuterAlt(_localctx, 1); { - setState(1074); + setState(1251); match(T__15); - setState(1075); + setState(1252); expression(); - setState(1076); + setState(1253); match(T__16); } break; case IDENTIFIER: enterOuterAlt(_localctx, 2); { - setState(1078); + setState(1255); identifier(); } break; @@ -6263,22 +7314,22 @@ public T accept(ParseTreeVisitor visitor) { public final ArgumentPartContext argumentPart() throws RecognitionException { ArgumentPartContext _localctx = new ArgumentPartContext(_ctx, getState()); - enterRule(_localctx, 156, RULE_argumentPart); + enterRule(_localctx, 184, RULE_argumentPart); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1082); + setState(1259); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__38) { + if (_la==T__42) { { - setState(1081); + setState(1258); typeArguments(); } } - setState(1084); + setState(1261); arguments(); } } @@ -6318,33 +7369,33 @@ public T accept(ParseTreeVisitor visitor) { public final AssignmentOperatorContext assignmentOperator() throws RecognitionException { AssignmentOperatorContext _localctx = new AssignmentOperatorContext(_ctx, getState()); - enterRule(_localctx, 158, RULE_assignmentOperator); + enterRule(_localctx, 186, RULE_assignmentOperator); try { - setState(1088); + setState(1265); _errHandler.sync(this); switch (_input.LA(1)) { case T__4: enterOuterAlt(_localctx, 1); { - setState(1086); + setState(1263); match(T__4); } break; - case T__50: - case T__51: - case T__52: - case T__53: - case T__54: - case T__55: - case T__56: case T__57: case T__58: case T__59: case T__60: case T__61: + case T__62: + case T__63: + case T__64: + case T__65: + case T__66: + case T__67: + case T__68: enterOuterAlt(_localctx, 2); { - setState(1087); + setState(1264); compoundAssignmentOperator(); } break; @@ -6385,14 +7436,14 @@ public T accept(ParseTreeVisitor visitor) { public final CompoundAssignmentOperatorContext compoundAssignmentOperator() throws RecognitionException { CompoundAssignmentOperatorContext _localctx = new CompoundAssignmentOperatorContext(_ctx, getState()); - enterRule(_localctx, 160, RULE_compoundAssignmentOperator); + enterRule(_localctx, 188, RULE_compoundAssignmentOperator); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1090); + setState(1267); _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__50) | (1L << T__51) | (1L << T__52) | (1L << T__53) | (1L << T__54) | (1L << T__55) | (1L << T__56) | (1L << T__57) | (1L << T__58) | (1L << T__59) | (1L << T__60) | (1L << T__61))) != 0)) ) { + if ( !(((((_la - 58)) & ~0x3f) == 0 && ((1L << (_la - 58)) & ((1L << (T__57 - 58)) | (1L << (T__58 - 58)) | (1L << (T__59 - 58)) | (1L << (T__60 - 58)) | (1L << (T__61 - 58)) | (1L << (T__62 - 58)) | (1L << (T__63 - 58)) | (1L << (T__64 - 58)) | (1L << (T__65 - 58)) | (1L << (T__66 - 58)) | (1L << (T__67 - 58)) | (1L << (T__68 - 58)))) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -6444,25 +7495,25 @@ public T accept(ParseTreeVisitor visitor) { public final ConditionalExpressionContext conditionalExpression() throws RecognitionException { ConditionalExpressionContext _localctx = new ConditionalExpressionContext(_ctx, getState()); - enterRule(_localctx, 162, RULE_conditionalExpression); + enterRule(_localctx, 190, RULE_conditionalExpression); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1092); + setState(1269); ifNullExpression(); - setState(1098); + setState(1275); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__62) { + if (_la==T__69) { { - setState(1093); - match(T__62); - setState(1094); + setState(1270); + match(T__69); + setState(1271); expressionWithoutCascade(); - setState(1095); + setState(1272); match(T__20); - setState(1096); + setState(1273); expressionWithoutCascade(); } } @@ -6508,26 +7559,26 @@ public T accept(ParseTreeVisitor visitor) { public final IfNullExpressionContext ifNullExpression() throws RecognitionException { IfNullExpressionContext _localctx = new IfNullExpressionContext(_ctx, getState()); - enterRule(_localctx, 164, RULE_ifNullExpression); + enterRule(_localctx, 192, RULE_ifNullExpression); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1100); + setState(1277); logicalOrExpression(); - setState(1105); + setState(1282); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__63) { + while (_la==T__70) { { { - setState(1101); - match(T__63); - setState(1102); + setState(1278); + match(T__70); + setState(1279); logicalOrExpression(); } } - setState(1107); + setState(1284); _errHandler.sync(this); _la = _input.LA(1); } @@ -6572,26 +7623,26 @@ public T accept(ParseTreeVisitor visitor) { public final LogicalOrExpressionContext logicalOrExpression() throws RecognitionException { LogicalOrExpressionContext _localctx = new LogicalOrExpressionContext(_ctx, getState()); - enterRule(_localctx, 166, RULE_logicalOrExpression); + enterRule(_localctx, 194, RULE_logicalOrExpression); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1108); + setState(1285); logicalAndExpression(); - setState(1113); + setState(1290); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__64) { + while (_la==T__71) { { { - setState(1109); - match(T__64); - setState(1110); + setState(1286); + match(T__71); + setState(1287); logicalAndExpression(); } } - setState(1115); + setState(1292); _errHandler.sync(this); _la = _input.LA(1); } @@ -6636,26 +7687,26 @@ public T accept(ParseTreeVisitor visitor) { public final LogicalAndExpressionContext logicalAndExpression() throws RecognitionException { LogicalAndExpressionContext _localctx = new LogicalAndExpressionContext(_ctx, getState()); - enterRule(_localctx, 168, RULE_logicalAndExpression); + enterRule(_localctx, 196, RULE_logicalAndExpression); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1116); + setState(1293); equalityExpression(); - setState(1121); + setState(1298); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__65) { + while (_la==T__72) { { { - setState(1117); - match(T__65); - setState(1118); + setState(1294); + match(T__72); + setState(1295); equalityExpression(); } } - setState(1123); + setState(1300); _errHandler.sync(this); _la = _input.LA(1); } @@ -6703,25 +7754,25 @@ public T accept(ParseTreeVisitor visitor) { public final EqualityExpressionContext equalityExpression() throws RecognitionException { EqualityExpressionContext _localctx = new EqualityExpressionContext(_ctx, getState()); - enterRule(_localctx, 170, RULE_equalityExpression); + enterRule(_localctx, 198, RULE_equalityExpression); int _la; try { - setState(1134); + setState(1311); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,126,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,147,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(1124); + setState(1301); relationalExpression(); - setState(1128); + setState(1305); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__30 || _la==T__66) { + if (_la==T__34 || _la==T__73) { { - setState(1125); + setState(1302); equalityOperator(); - setState(1126); + setState(1303); relationalExpression(); } } @@ -6731,11 +7782,11 @@ public final EqualityExpressionContext equalityExpression() throws RecognitionEx case 2: enterOuterAlt(_localctx, 2); { - setState(1130); - match(T__33); - setState(1131); + setState(1307); + match(T__37); + setState(1308); equalityOperator(); - setState(1132); + setState(1309); relationalExpression(); } break; @@ -6774,14 +7825,14 @@ public T accept(ParseTreeVisitor visitor) { public final EqualityOperatorContext equalityOperator() throws RecognitionException { EqualityOperatorContext _localctx = new EqualityOperatorContext(_ctx, getState()); - enterRule(_localctx, 172, RULE_equalityOperator); + enterRule(_localctx, 200, RULE_equalityOperator); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1136); + setState(1313); _la = _input.LA(1); - if ( !(_la==T__30 || _la==T__66) ) { + if ( !(_la==T__34 || _la==T__73) ) { _errHandler.recoverInline(this); } else { @@ -6839,39 +7890,39 @@ public T accept(ParseTreeVisitor visitor) { public final RelationalExpressionContext relationalExpression() throws RecognitionException { RelationalExpressionContext _localctx = new RelationalExpressionContext(_ctx, getState()); - enterRule(_localctx, 174, RULE_relationalExpression); + enterRule(_localctx, 202, RULE_relationalExpression); try { - setState(1150); + setState(1327); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,128,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,149,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(1138); + setState(1315); bitwiseOrExpression(); - setState(1144); + setState(1321); _errHandler.sync(this); switch (_input.LA(1)) { - case T__86: + case T__93: { - setState(1139); + setState(1316); typeTest(); } break; - case T__87: + case T__94: { - setState(1140); + setState(1317); typeCast(); } break; - case T__38: - case T__39: - case T__67: - case T__68: + case T__42: + case T__43: + case T__74: + case T__75: { - setState(1141); + setState(1318); relationalOperator(); - setState(1142); + setState(1319); bitwiseOrExpression(); } break; @@ -6886,13 +7937,15 @@ public final RelationalExpressionContext relationalExpression() throws Recogniti case T__14: case T__16: case T__20: - case T__30: - case T__49: - case T__62: - case T__63: - case T__64: - case T__65: - case T__66: + case T__34: + case T__46: + case T__56: + case T__69: + case T__70: + case T__71: + case T__72: + case T__73: + case T__97: break; default: break; @@ -6902,11 +7955,11 @@ public final RelationalExpressionContext relationalExpression() throws Recogniti case 2: enterOuterAlt(_localctx, 2); { - setState(1146); - match(T__33); - setState(1147); + setState(1323); + match(T__37); + setState(1324); relationalOperator(); - setState(1148); + setState(1325); bitwiseOrExpression(); } break; @@ -6945,14 +7998,14 @@ public T accept(ParseTreeVisitor visitor) { public final RelationalOperatorContext relationalOperator() throws RecognitionException { RelationalOperatorContext _localctx = new RelationalOperatorContext(_ctx, getState()); - enterRule(_localctx, 176, RULE_relationalOperator); + enterRule(_localctx, 204, RULE_relationalOperator); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1152); + setState(1329); _la = _input.LA(1); - if ( !(((((_la - 39)) & ~0x3f) == 0 && ((1L << (_la - 39)) & ((1L << (T__38 - 39)) | (1L << (T__39 - 39)) | (1L << (T__67 - 39)) | (1L << (T__68 - 39)))) != 0)) ) { + if ( !(((((_la - 43)) & ~0x3f) == 0 && ((1L << (_la - 43)) & ((1L << (T__42 - 43)) | (1L << (T__43 - 43)) | (1L << (T__74 - 43)) | (1L << (T__75 - 43)))) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -7007,43 +8060,43 @@ public T accept(ParseTreeVisitor visitor) { public final BitwiseOrExpressionContext bitwiseOrExpression() throws RecognitionException { BitwiseOrExpressionContext _localctx = new BitwiseOrExpressionContext(_ctx, getState()); - enterRule(_localctx, 178, RULE_bitwiseOrExpression); + enterRule(_localctx, 206, RULE_bitwiseOrExpression); try { int _alt; - setState(1169); + setState(1346); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,131,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,152,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(1154); + setState(1331); bitwiseXorExpression(); - setState(1159); + setState(1336); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,129,_ctx); - while ( _alt!=2 && _alt!= ATN.INVALID_ALT_NUMBER ) { + _alt = getInterpreter().adaptivePredict(_input,150,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(1155); - match(T__69); - setState(1156); + setState(1332); + match(T__76); + setState(1333); bitwiseXorExpression(); } - } + } } - setState(1161); + setState(1338); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,129,_ctx); + _alt = getInterpreter().adaptivePredict(_input,150,_ctx); } } break; case 2: enterOuterAlt(_localctx, 2); { - setState(1162); - match(T__33); - setState(1165); + setState(1339); + match(T__37); + setState(1342); _errHandler.sync(this); _alt = 1; do { @@ -7051,9 +8104,9 @@ public final BitwiseOrExpressionContext bitwiseOrExpression() throws Recognition case 1: { { - setState(1163); - match(T__69); - setState(1164); + setState(1340); + match(T__76); + setState(1341); bitwiseOrExpression(); } } @@ -7061,10 +8114,10 @@ public final BitwiseOrExpressionContext bitwiseOrExpression() throws Recognition default: throw new NoViableAltException(this); } - setState(1167); + setState(1344); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,130,_ctx); - } while ( _alt!=2 && _alt!= ATN.INVALID_ALT_NUMBER ); + _alt = getInterpreter().adaptivePredict(_input,151,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); } break; } @@ -7108,30 +8161,30 @@ public T accept(ParseTreeVisitor visitor) { public final BitwiseXorExpressionContext bitwiseXorExpression() throws RecognitionException { BitwiseXorExpressionContext _localctx = new BitwiseXorExpressionContext(_ctx, getState()); - enterRule(_localctx, 180, RULE_bitwiseXorExpression); + enterRule(_localctx, 208, RULE_bitwiseXorExpression); int _la; try { - setState(1186); + setState(1363); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,134,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,155,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(1171); + setState(1348); bitwiseAndExpression(); - setState(1176); + setState(1353); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__70) { + while (_la==T__77) { { { - setState(1172); - match(T__70); - setState(1173); + setState(1349); + match(T__77); + setState(1350); bitwiseAndExpression(); } } - setState(1178); + setState(1355); _errHandler.sync(this); _la = _input.LA(1); } @@ -7140,24 +8193,24 @@ public final BitwiseXorExpressionContext bitwiseXorExpression() throws Recogniti case 2: enterOuterAlt(_localctx, 2); { - setState(1179); - match(T__33); - setState(1182); + setState(1356); + match(T__37); + setState(1359); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(1180); - match(T__70); - setState(1181); + setState(1357); + match(T__77); + setState(1358); bitwiseAndExpression(); } } - setState(1184); + setState(1361); _errHandler.sync(this); _la = _input.LA(1); - } while ( _la==T__70 ); + } while ( _la==T__77 ); } break; } @@ -7201,30 +8254,30 @@ public T accept(ParseTreeVisitor visitor) { public final BitwiseAndExpressionContext bitwiseAndExpression() throws RecognitionException { BitwiseAndExpressionContext _localctx = new BitwiseAndExpressionContext(_ctx, getState()); - enterRule(_localctx, 182, RULE_bitwiseAndExpression); + enterRule(_localctx, 210, RULE_bitwiseAndExpression); int _la; try { - setState(1203); + setState(1380); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,137,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,158,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(1188); + setState(1365); shiftExpression(); - setState(1193); + setState(1370); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__71) { + while (_la==T__78) { { { - setState(1189); - match(T__71); - setState(1190); + setState(1366); + match(T__78); + setState(1367); shiftExpression(); } } - setState(1195); + setState(1372); _errHandler.sync(this); _la = _input.LA(1); } @@ -7233,24 +8286,24 @@ public final BitwiseAndExpressionContext bitwiseAndExpression() throws Recogniti case 2: enterOuterAlt(_localctx, 2); { - setState(1196); - match(T__33); - setState(1199); + setState(1373); + match(T__37); + setState(1376); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(1197); - match(T__71); - setState(1198); + setState(1374); + match(T__78); + setState(1375); shiftExpression(); } } - setState(1201); + setState(1378); _errHandler.sync(this); _la = _input.LA(1); - } while ( _la==T__71 ); + } while ( _la==T__78 ); } break; } @@ -7288,14 +8341,14 @@ public T accept(ParseTreeVisitor visitor) { public final BitwiseOperatorContext bitwiseOperator() throws RecognitionException { BitwiseOperatorContext _localctx = new BitwiseOperatorContext(_ctx, getState()); - enterRule(_localctx, 184, RULE_bitwiseOperator); + enterRule(_localctx, 212, RULE_bitwiseOperator); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1205); + setState(1382); _la = _input.LA(1); - if ( !(((((_la - 70)) & ~0x3f) == 0 && ((1L << (_la - 70)) & ((1L << (T__69 - 70)) | (1L << (T__70 - 70)) | (1L << (T__71 - 70)))) != 0)) ) { + if ( !(((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (T__76 - 77)) | (1L << (T__77 - 77)) | (1L << (T__78 - 77)))) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -7350,30 +8403,30 @@ public T accept(ParseTreeVisitor visitor) { public final ShiftExpressionContext shiftExpression() throws RecognitionException { ShiftExpressionContext _localctx = new ShiftExpressionContext(_ctx, getState()); - enterRule(_localctx, 186, RULE_shiftExpression); + enterRule(_localctx, 214, RULE_shiftExpression); int _la; try { - setState(1224); + setState(1401); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,140,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,161,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(1207); + setState(1384); additiveExpression(); - setState(1213); + setState(1390); _errHandler.sync(this); _la = _input.LA(1); - while (((((_la - 73)) & ~0x3f) == 0 && ((1L << (_la - 73)) & ((1L << (T__72 - 73)) | (1L << (T__73 - 73)) | (1L << (T__74 - 73)))) != 0)) { + while (((((_la - 80)) & ~0x3f) == 0 && ((1L << (_la - 80)) & ((1L << (T__79 - 80)) | (1L << (T__80 - 80)) | (1L << (T__81 - 80)))) != 0)) { { { - setState(1208); + setState(1385); shiftOperator(); - setState(1209); + setState(1386); additiveExpression(); } } - setState(1215); + setState(1392); _errHandler.sync(this); _la = _input.LA(1); } @@ -7382,24 +8435,24 @@ public final ShiftExpressionContext shiftExpression() throws RecognitionExceptio case 2: enterOuterAlt(_localctx, 2); { - setState(1216); - match(T__33); - setState(1220); + setState(1393); + match(T__37); + setState(1397); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(1217); + setState(1394); shiftOperator(); - setState(1218); + setState(1395); additiveExpression(); } } - setState(1222); + setState(1399); _errHandler.sync(this); _la = _input.LA(1); - } while ( ((((_la - 73)) & ~0x3f) == 0 && ((1L << (_la - 73)) & ((1L << (T__72 - 73)) | (1L << (T__73 - 73)) | (1L << (T__74 - 73)))) != 0) ); + } while ( ((((_la - 80)) & ~0x3f) == 0 && ((1L << (_la - 80)) & ((1L << (T__79 - 80)) | (1L << (T__80 - 80)) | (1L << (T__81 - 80)))) != 0) ); } break; } @@ -7437,14 +8490,14 @@ public T accept(ParseTreeVisitor visitor) { public final ShiftOperatorContext shiftOperator() throws RecognitionException { ShiftOperatorContext _localctx = new ShiftOperatorContext(_ctx, getState()); - enterRule(_localctx, 188, RULE_shiftOperator); + enterRule(_localctx, 216, RULE_shiftOperator); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1226); + setState(1403); _la = _input.LA(1); - if ( !(((((_la - 73)) & ~0x3f) == 0 && ((1L << (_la - 73)) & ((1L << (T__72 - 73)) | (1L << (T__73 - 73)) | (1L << (T__74 - 73)))) != 0)) ) { + if ( !(((((_la - 80)) & ~0x3f) == 0 && ((1L << (_la - 80)) & ((1L << (T__79 - 80)) | (1L << (T__80 - 80)) | (1L << (T__81 - 80)))) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -7499,30 +8552,30 @@ public T accept(ParseTreeVisitor visitor) { public final AdditiveExpressionContext additiveExpression() throws RecognitionException { AdditiveExpressionContext _localctx = new AdditiveExpressionContext(_ctx, getState()); - enterRule(_localctx, 190, RULE_additiveExpression); + enterRule(_localctx, 218, RULE_additiveExpression); int _la; try { - setState(1245); + setState(1422); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,143,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,164,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(1228); + setState(1405); multiplicativeExpression(); - setState(1234); + setState(1411); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__75 || _la==T__76) { + while (_la==T__82 || _la==T__83) { { { - setState(1229); + setState(1406); additiveOperator(); - setState(1230); + setState(1407); multiplicativeExpression(); } } - setState(1236); + setState(1413); _errHandler.sync(this); _la = _input.LA(1); } @@ -7531,24 +8584,24 @@ public final AdditiveExpressionContext additiveExpression() throws RecognitionEx case 2: enterOuterAlt(_localctx, 2); { - setState(1237); - match(T__33); - setState(1241); + setState(1414); + match(T__37); + setState(1418); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(1238); + setState(1415); additiveOperator(); - setState(1239); + setState(1416); multiplicativeExpression(); } } - setState(1243); + setState(1420); _errHandler.sync(this); _la = _input.LA(1); - } while ( _la==T__75 || _la==T__76 ); + } while ( _la==T__82 || _la==T__83 ); } break; } @@ -7586,14 +8639,14 @@ public T accept(ParseTreeVisitor visitor) { public final AdditiveOperatorContext additiveOperator() throws RecognitionException { AdditiveOperatorContext _localctx = new AdditiveOperatorContext(_ctx, getState()); - enterRule(_localctx, 192, RULE_additiveOperator); + enterRule(_localctx, 220, RULE_additiveOperator); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1247); + setState(1424); _la = _input.LA(1); - if ( !(_la==T__75 || _la==T__76) ) { + if ( !(_la==T__82 || _la==T__83) ) { _errHandler.recoverInline(this); } else { @@ -7648,30 +8701,30 @@ public T accept(ParseTreeVisitor visitor) { public final MultiplicativeExpressionContext multiplicativeExpression() throws RecognitionException { MultiplicativeExpressionContext _localctx = new MultiplicativeExpressionContext(_ctx, getState()); - enterRule(_localctx, 194, RULE_multiplicativeExpression); + enterRule(_localctx, 222, RULE_multiplicativeExpression); int _la; try { - setState(1266); + setState(1443); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,146,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,167,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(1249); + setState(1426); unaryExpression(); - setState(1255); + setState(1432); _errHandler.sync(this); _la = _input.LA(1); - while (((((_la - 78)) & ~0x3f) == 0 && ((1L << (_la - 78)) & ((1L << (T__77 - 78)) | (1L << (T__78 - 78)) | (1L << (T__79 - 78)) | (1L << (T__80 - 78)))) != 0)) { + while (((((_la - 85)) & ~0x3f) == 0 && ((1L << (_la - 85)) & ((1L << (T__84 - 85)) | (1L << (T__85 - 85)) | (1L << (T__86 - 85)) | (1L << (T__87 - 85)))) != 0)) { { { - setState(1250); + setState(1427); multiplicativeOperator(); - setState(1251); + setState(1428); unaryExpression(); } } - setState(1257); + setState(1434); _errHandler.sync(this); _la = _input.LA(1); } @@ -7680,24 +8733,24 @@ public final MultiplicativeExpressionContext multiplicativeExpression() throws R case 2: enterOuterAlt(_localctx, 2); { - setState(1258); - match(T__33); - setState(1262); + setState(1435); + match(T__37); + setState(1439); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(1259); + setState(1436); multiplicativeOperator(); - setState(1260); + setState(1437); unaryExpression(); } } - setState(1264); + setState(1441); _errHandler.sync(this); _la = _input.LA(1); - } while ( ((((_la - 78)) & ~0x3f) == 0 && ((1L << (_la - 78)) & ((1L << (T__77 - 78)) | (1L << (T__78 - 78)) | (1L << (T__79 - 78)) | (1L << (T__80 - 78)))) != 0) ); + } while ( ((((_la - 85)) & ~0x3f) == 0 && ((1L << (_la - 85)) & ((1L << (T__84 - 85)) | (1L << (T__85 - 85)) | (1L << (T__86 - 85)) | (1L << (T__87 - 85)))) != 0) ); } break; } @@ -7735,14 +8788,14 @@ public T accept(ParseTreeVisitor visitor) { public final MultiplicativeOperatorContext multiplicativeOperator() throws RecognitionException { MultiplicativeOperatorContext _localctx = new MultiplicativeOperatorContext(_ctx, getState()); - enterRule(_localctx, 196, RULE_multiplicativeOperator); + enterRule(_localctx, 224, RULE_multiplicativeOperator); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1268); + setState(1445); _la = _input.LA(1); - if ( !(((((_la - 78)) & ~0x3f) == 0 && ((1L << (_la - 78)) & ((1L << (T__77 - 78)) | (1L << (T__78 - 78)) | (1L << (T__79 - 78)) | (1L << (T__80 - 78)))) != 0)) ) { + if ( !(((((_la - 85)) & ~0x3f) == 0 && ((1L << (_la - 85)) & ((1L << (T__84 - 85)) | (1L << (T__85 - 85)) | (1L << (T__86 - 85)) | (1L << (T__87 - 85)))) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -7809,65 +8862,65 @@ public T accept(ParseTreeVisitor visitor) { public final UnaryExpressionContext unaryExpression() throws RecognitionException { UnaryExpressionContext _localctx = new UnaryExpressionContext(_ctx, getState()); - enterRule(_localctx, 198, RULE_unaryExpression); + enterRule(_localctx, 226, RULE_unaryExpression); try { - setState(1284); + setState(1461); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,148,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,169,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(1270); + setState(1447); prefixOperator(); - setState(1271); + setState(1448); unaryExpression(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(1273); + setState(1450); awaitExpression(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(1274); + setState(1451); postfixExpression(); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(1277); + setState(1454); _errHandler.sync(this); switch (_input.LA(1)) { - case T__76: + case T__83: { - setState(1275); + setState(1452); minusOperator(); } break; - case T__27: + case T__31: { - setState(1276); + setState(1453); tildeOperator(); } break; default: throw new NoViableAltException(this); } - setState(1279); - match(T__33); + setState(1456); + match(T__37); } break; case 5: enterOuterAlt(_localctx, 5); { - setState(1281); + setState(1458); incrementOperator(); - setState(1282); + setState(1459); assignableExpression(); } break; @@ -7915,29 +8968,29 @@ public T accept(ParseTreeVisitor visitor) { public final PrefixOperatorContext prefixOperator() throws RecognitionException { PrefixOperatorContext _localctx = new PrefixOperatorContext(_ctx, getState()); - enterRule(_localctx, 200, RULE_prefixOperator); + enterRule(_localctx, 228, RULE_prefixOperator); try { - setState(1289); + setState(1466); _errHandler.sync(this); switch (_input.LA(1)) { - case T__76: + case T__83: enterOuterAlt(_localctx, 1); { - setState(1286); + setState(1463); minusOperator(); } break; - case T__81: + case T__88: enterOuterAlt(_localctx, 2); { - setState(1287); + setState(1464); negationOperator(); } break; - case T__27: + case T__31: enterOuterAlt(_localctx, 3); { - setState(1288); + setState(1465); tildeOperator(); } break; @@ -7978,12 +9031,12 @@ public T accept(ParseTreeVisitor visitor) { public final MinusOperatorContext minusOperator() throws RecognitionException { MinusOperatorContext _localctx = new MinusOperatorContext(_ctx, getState()); - enterRule(_localctx, 202, RULE_minusOperator); + enterRule(_localctx, 230, RULE_minusOperator); try { enterOuterAlt(_localctx, 1); { - setState(1291); - match(T__76); + setState(1468); + match(T__83); } } catch (RecognitionException re) { @@ -8019,12 +9072,12 @@ public T accept(ParseTreeVisitor visitor) { public final NegationOperatorContext negationOperator() throws RecognitionException { NegationOperatorContext _localctx = new NegationOperatorContext(_ctx, getState()); - enterRule(_localctx, 204, RULE_negationOperator); + enterRule(_localctx, 232, RULE_negationOperator); try { enterOuterAlt(_localctx, 1); { - setState(1293); - match(T__81); + setState(1470); + match(T__88); } } catch (RecognitionException re) { @@ -8060,12 +9113,12 @@ public T accept(ParseTreeVisitor visitor) { public final TildeOperatorContext tildeOperator() throws RecognitionException { TildeOperatorContext _localctx = new TildeOperatorContext(_ctx, getState()); - enterRule(_localctx, 206, RULE_tildeOperator); + enterRule(_localctx, 234, RULE_tildeOperator); try { enterOuterAlt(_localctx, 1); { - setState(1295); - match(T__27); + setState(1472); + match(T__31); } } catch (RecognitionException re) { @@ -8104,13 +9157,13 @@ public T accept(ParseTreeVisitor visitor) { public final AwaitExpressionContext awaitExpression() throws RecognitionException { AwaitExpressionContext _localctx = new AwaitExpressionContext(_ctx, getState()); - enterRule(_localctx, 208, RULE_awaitExpression); + enterRule(_localctx, 236, RULE_awaitExpression); try { enterOuterAlt(_localctx, 1); { - setState(1297); - match(T__82); - setState(1298); + setState(1474); + match(T__89); + setState(1475); unaryExpression(); } } @@ -8162,41 +9215,41 @@ public T accept(ParseTreeVisitor visitor) { public final PostfixExpressionContext postfixExpression() throws RecognitionException { PostfixExpressionContext _localctx = new PostfixExpressionContext(_ctx, getState()); - enterRule(_localctx, 210, RULE_postfixExpression); + enterRule(_localctx, 238, RULE_postfixExpression); try { int _alt; - setState(1310); + setState(1487); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,151,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,172,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(1300); + setState(1477); assignableExpression(); - setState(1301); + setState(1478); postfixOperator(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(1303); + setState(1480); primary(); - setState(1307); + setState(1484); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,150,_ctx); - while ( _alt!=2 && _alt!= ATN.INVALID_ALT_NUMBER ) { + _alt = getInterpreter().adaptivePredict(_input,171,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(1304); + setState(1481); selector(); } - } + } } - setState(1309); + setState(1486); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,150,_ctx); + _alt = getInterpreter().adaptivePredict(_input,171,_ctx); } } break; @@ -8238,11 +9291,11 @@ public T accept(ParseTreeVisitor visitor) { public final PostfixOperatorContext postfixOperator() throws RecognitionException { PostfixOperatorContext _localctx = new PostfixOperatorContext(_ctx, getState()); - enterRule(_localctx, 212, RULE_postfixOperator); + enterRule(_localctx, 240, RULE_postfixOperator); try { enterOuterAlt(_localctx, 1); { - setState(1312); + setState(1489); incrementOperator(); } } @@ -8285,25 +9338,25 @@ public T accept(ParseTreeVisitor visitor) { public final SelectorContext selector() throws RecognitionException { SelectorContext _localctx = new SelectorContext(_ctx, getState()); - enterRule(_localctx, 214, RULE_selector); + enterRule(_localctx, 242, RULE_selector); try { - setState(1316); + setState(1493); _errHandler.sync(this); switch (_input.LA(1)) { case T__15: case T__19: - case T__85: + case T__92: enterOuterAlt(_localctx, 1); { - setState(1314); + setState(1491); assignableSelector(); } break; case T__13: - case T__38: + case T__42: enterOuterAlt(_localctx, 2); { - setState(1315); + setState(1492); argumentPart(); } break; @@ -8344,14 +9397,14 @@ public T accept(ParseTreeVisitor visitor) { public final IncrementOperatorContext incrementOperator() throws RecognitionException { IncrementOperatorContext _localctx = new IncrementOperatorContext(_ctx, getState()); - enterRule(_localctx, 216, RULE_incrementOperator); + enterRule(_localctx, 244, RULE_incrementOperator); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1318); + setState(1495); _la = _input.LA(1); - if ( !(_la==T__83 || _la==T__84) ) { + if ( !(_la==T__90 || _la==T__91) ) { _errHandler.recoverInline(this); } else { @@ -8412,37 +9465,37 @@ public T accept(ParseTreeVisitor visitor) { public final AssignableExpressionContext assignableExpression() throws RecognitionException { AssignableExpressionContext _localctx = new AssignableExpressionContext(_ctx, getState()); - enterRule(_localctx, 218, RULE_assignableExpression); + enterRule(_localctx, 246, RULE_assignableExpression); int _la; try { - setState(1334); + setState(1511); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,155,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,176,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(1320); + setState(1497); primary(); - setState(1328); + setState(1505); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,154,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,175,_ctx) ) { case 1: { - setState(1324); + setState(1501); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__13 || _la==T__38) { + while (_la==T__13 || _la==T__42) { { { - setState(1321); + setState(1498); argumentPart(); } } - setState(1326); + setState(1503); _errHandler.sync(this); _la = _input.LA(1); } - setState(1327); + setState(1504); assignableSelector(); } break; @@ -8452,11 +9505,11 @@ public final AssignableExpressionContext assignableExpression() throws Recogniti case 2: enterOuterAlt(_localctx, 2); { - setState(1330); - match(T__33); - setState(1331); + setState(1507); + match(T__37); + setState(1508); unconditionalAssignableSelector(); - setState(1332); + setState(1509); identifier(); } break; @@ -8501,28 +9554,28 @@ public T accept(ParseTreeVisitor visitor) { public final UnconditionalAssignableSelectorContext unconditionalAssignableSelector() throws RecognitionException { UnconditionalAssignableSelectorContext _localctx = new UnconditionalAssignableSelectorContext(_ctx, getState()); - enterRule(_localctx, 220, RULE_unconditionalAssignableSelector); + enterRule(_localctx, 248, RULE_unconditionalAssignableSelector); try { - setState(1342); + setState(1519); _errHandler.sync(this); switch (_input.LA(1)) { case T__15: enterOuterAlt(_localctx, 1); { - setState(1336); + setState(1513); match(T__15); - setState(1337); + setState(1514); expression(); - setState(1338); + setState(1515); match(T__16); } break; case T__19: enterOuterAlt(_localctx, 2); { - setState(1340); + setState(1517); match(T__19); - setState(1341); + setState(1518); identifier(); } break; @@ -8569,25 +9622,25 @@ public T accept(ParseTreeVisitor visitor) { public final AssignableSelectorContext assignableSelector() throws RecognitionException { AssignableSelectorContext _localctx = new AssignableSelectorContext(_ctx, getState()); - enterRule(_localctx, 222, RULE_assignableSelector); + enterRule(_localctx, 250, RULE_assignableSelector); try { - setState(1347); + setState(1524); _errHandler.sync(this); switch (_input.LA(1)) { case T__15: case T__19: enterOuterAlt(_localctx, 1); { - setState(1344); + setState(1521); unconditionalAssignableSelector(); } break; - case T__85: + case T__92: enterOuterAlt(_localctx, 2); { - setState(1345); - match(T__85); - setState(1346); + setState(1522); + match(T__92); + setState(1523); identifier(); } break; @@ -8629,11 +9682,11 @@ public T accept(ParseTreeVisitor visitor) { public final IdentifierContext identifier() throws RecognitionException { IdentifierContext _localctx = new IdentifierContext(_ctx, getState()); - enterRule(_localctx, 224, RULE_identifier); + enterRule(_localctx, 252, RULE_identifier); try { enterOuterAlt(_localctx, 1); { - setState(1349); + setState(1526); match(IDENTIFIER); } } @@ -8676,20 +9729,20 @@ public T accept(ParseTreeVisitor visitor) { public final QualifiedContext qualified() throws RecognitionException { QualifiedContext _localctx = new QualifiedContext(_ctx, getState()); - enterRule(_localctx, 226, RULE_qualified); + enterRule(_localctx, 254, RULE_qualified); try { enterOuterAlt(_localctx, 1); { - setState(1351); + setState(1528); identifier(); - setState(1354); + setState(1531); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,158,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,179,_ctx) ) { case 1: { - setState(1352); + setState(1529); match(T__19); - setState(1353); + setState(1530); identifier(); } break; @@ -8735,13 +9788,13 @@ public T accept(ParseTreeVisitor visitor) { public final TypeTestContext typeTest() throws RecognitionException { TypeTestContext _localctx = new TypeTestContext(_ctx, getState()); - enterRule(_localctx, 228, RULE_typeTest); + enterRule(_localctx, 256, RULE_typeTest); try { enterOuterAlt(_localctx, 1); { - setState(1356); + setState(1533); isOperator(); - setState(1357); + setState(1534); dtype(); } } @@ -8778,20 +9831,20 @@ public T accept(ParseTreeVisitor visitor) { public final IsOperatorContext isOperator() throws RecognitionException { IsOperatorContext _localctx = new IsOperatorContext(_ctx, getState()); - enterRule(_localctx, 230, RULE_isOperator); + enterRule(_localctx, 258, RULE_isOperator); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1359); - match(T__86); - setState(1361); + setState(1536); + match(T__93); + setState(1538); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__81) { + if (_la==T__88) { { - setState(1360); - match(T__81); + setState(1537); + match(T__88); } } @@ -8836,13 +9889,13 @@ public T accept(ParseTreeVisitor visitor) { public final TypeCastContext typeCast() throws RecognitionException { TypeCastContext _localctx = new TypeCastContext(_ctx, getState()); - enterRule(_localctx, 232, RULE_typeCast); + enterRule(_localctx, 260, RULE_typeCast); try { enterOuterAlt(_localctx, 1); { - setState(1363); + setState(1540); asOperator(); - setState(1364); + setState(1541); dtype(); } } @@ -8879,12 +9932,12 @@ public T accept(ParseTreeVisitor visitor) { public final AsOperatorContext asOperator() throws RecognitionException { AsOperatorContext _localctx = new AsOperatorContext(_ctx, getState()); - enterRule(_localctx, 234, RULE_asOperator); + enterRule(_localctx, 262, RULE_asOperator); try { enterOuterAlt(_localctx, 1); { - setState(1366); - match(T__87); + setState(1543); + match(T__94); } } catch (RecognitionException re) { @@ -8926,26 +9979,26 @@ public T accept(ParseTreeVisitor visitor) { public final StatementsContext statements() throws RecognitionException { StatementsContext _localctx = new StatementsContext(_ctx, getState()); - enterRule(_localctx, 236, RULE_statements); + enterRule(_localctx, 264, RULE_statements); try { int _alt; enterOuterAlt(_localctx, 1); { - setState(1371); + setState(1548); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,160,_ctx); - while ( _alt!=2 && _alt!= ATN.INVALID_ALT_NUMBER ) { + _alt = getInterpreter().adaptivePredict(_input,181,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(1368); + setState(1545); statement(); } - } + } } - setState(1373); + setState(1550); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,160,_ctx); + _alt = getInterpreter().adaptivePredict(_input,181,_ctx); } } } @@ -8991,28 +10044,28 @@ public T accept(ParseTreeVisitor visitor) { public final StatementContext statement() throws RecognitionException { StatementContext _localctx = new StatementContext(_ctx, getState()); - enterRule(_localctx, 238, RULE_statement); + enterRule(_localctx, 266, RULE_statement); try { int _alt; enterOuterAlt(_localctx, 1); { - setState(1377); + setState(1554); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,161,_ctx); - while ( _alt!=2 && _alt!= ATN.INVALID_ALT_NUMBER ) { + _alt = getInterpreter().adaptivePredict(_input,182,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(1374); + setState(1551); label(); } - } + } } - setState(1379); + setState(1556); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,161,_ctx); + _alt = getInterpreter().adaptivePredict(_input,182,_ctx); } - setState(1380); + setState(1557); nonLabledStatment(); } } @@ -9100,127 +10153,127 @@ public T accept(ParseTreeVisitor visitor) { public final NonLabledStatmentContext nonLabledStatment() throws RecognitionException { NonLabledStatmentContext _localctx = new NonLabledStatmentContext(_ctx, getState()); - enterRule(_localctx, 240, RULE_nonLabledStatment); + enterRule(_localctx, 268, RULE_nonLabledStatment); try { - setState(1399); + setState(1576); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,162,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,183,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(1382); + setState(1559); block(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(1383); + setState(1560); localVariableDeclaration(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(1384); + setState(1561); forStatement(); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(1385); + setState(1562); whileStatement(); } break; case 5: enterOuterAlt(_localctx, 5); { - setState(1386); + setState(1563); doStatement(); } break; case 6: enterOuterAlt(_localctx, 6); { - setState(1387); + setState(1564); switchStatement(); } break; case 7: enterOuterAlt(_localctx, 7); { - setState(1388); + setState(1565); ifStatement(); } break; case 8: enterOuterAlt(_localctx, 8); { - setState(1389); + setState(1566); rethrowStatment(); } break; case 9: enterOuterAlt(_localctx, 9); { - setState(1390); + setState(1567); tryStatement(); } break; case 10: enterOuterAlt(_localctx, 10); { - setState(1391); + setState(1568); breakStatement(); } break; case 11: enterOuterAlt(_localctx, 11); { - setState(1392); + setState(1569); continueStatement(); } break; case 12: enterOuterAlt(_localctx, 12); { - setState(1393); + setState(1570); returnStatement(); } break; case 13: enterOuterAlt(_localctx, 13); { - setState(1394); + setState(1571); yieldStatement(); } break; case 14: enterOuterAlt(_localctx, 14); { - setState(1395); + setState(1572); yieldEachStatement(); } break; case 15: enterOuterAlt(_localctx, 15); { - setState(1396); + setState(1573); expressionStatement(); } break; case 16: enterOuterAlt(_localctx, 16); { - setState(1397); + setState(1574); assertStatement(); } break; case 17: enterOuterAlt(_localctx, 17); { - setState(1398); + setState(1575); localFunctionDeclaration(); } break; @@ -9262,22 +10315,22 @@ public T accept(ParseTreeVisitor visitor) { public final ExpressionStatementContext expressionStatement() throws RecognitionException { ExpressionStatementContext _localctx = new ExpressionStatementContext(_ctx, getState()); - enterRule(_localctx, 242, RULE_expressionStatement); + enterRule(_localctx, 270, RULE_expressionStatement); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1402); + setState(1579); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__11) | (1L << T__13) | (1L << T__15) | (1L << T__18) | (1L << T__27) | (1L << T__33) | (1L << T__38) | (1L << T__41) | (1L << T__42) | (1L << T__43) | (1L << T__46) | (1L << T__47) | (1L << T__48))) != 0) || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (T__76 - 77)) | (1L << (T__81 - 77)) | (1L << (T__82 - 77)) | (1L << (T__83 - 77)) | (1L << (T__84 - 77)) | (1L << (NUMBER - 77)) | (1L << (HEX_NUMBER - 77)) | (1L << (SingleLineString - 77)) | (1L << (MultiLineString - 77)) | (1L << (IDENTIFIER - 77)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__11) | (1L << T__13) | (1L << T__15) | (1L << T__18) | (1L << T__31) | (1L << T__37) | (1L << T__42) | (1L << T__45) | (1L << T__48) | (1L << T__49) | (1L << T__50) | (1L << T__53) | (1L << T__54) | (1L << T__55))) != 0) || ((((_la - 84)) & ~0x3f) == 0 && ((1L << (_la - 84)) & ((1L << (T__83 - 84)) | (1L << (T__88 - 84)) | (1L << (T__89 - 84)) | (1L << (T__90 - 84)) | (1L << (T__91 - 84)) | (1L << (NUMBER - 84)) | (1L << (HEX_NUMBER - 84)) | (1L << (SingleLineString - 84)) | (1L << (MultiLineString - 84)) | (1L << (IDENTIFIER - 84)))) != 0)) { { - setState(1401); + setState(1578); expression(); } } - setState(1404); + setState(1581); match(T__8); } } @@ -9317,13 +10370,13 @@ public T accept(ParseTreeVisitor visitor) { public final LocalVariableDeclarationContext localVariableDeclaration() throws RecognitionException { LocalVariableDeclarationContext _localctx = new LocalVariableDeclarationContext(_ctx, getState()); - enterRule(_localctx, 244, RULE_localVariableDeclaration); + enterRule(_localctx, 272, RULE_localVariableDeclaration); try { enterOuterAlt(_localctx, 1); { - setState(1406); + setState(1583); initializedVariableDeclaration(); - setState(1407); + setState(1584); match(T__8); } } @@ -9366,13 +10419,13 @@ public T accept(ParseTreeVisitor visitor) { public final LocalFunctionDeclarationContext localFunctionDeclaration() throws RecognitionException { LocalFunctionDeclarationContext _localctx = new LocalFunctionDeclarationContext(_ctx, getState()); - enterRule(_localctx, 246, RULE_localFunctionDeclaration); + enterRule(_localctx, 274, RULE_localFunctionDeclaration); try { enterOuterAlt(_localctx, 1); { - setState(1409); + setState(1586); functionSignature(); - setState(1410); + setState(1587); functionBody(); } } @@ -9388,8 +10441,11 @@ public final LocalFunctionDeclarationContext localFunctionDeclaration() throws R } public static class IfStatementContext extends ParserRuleContext { - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); } public List statement() { return getRuleContexts(StatementContext.class); @@ -9397,6 +10453,9 @@ public List statement() { public StatementContext statement(int i) { return getRuleContext(StatementContext.class,i); } + public PatternContext pattern() { + return getRuleContext(PatternContext.class,0); + } public IfStatementContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -9418,33 +10477,83 @@ public T accept(ParseTreeVisitor visitor) { public final IfStatementContext ifStatement() throws RecognitionException { IfStatementContext _localctx = new IfStatementContext(_ctx, getState()); - enterRule(_localctx, 248, RULE_ifStatement); + enterRule(_localctx, 276, RULE_ifStatement); + int _la; try { - enterOuterAlt(_localctx, 1); - { - setState(1412); - match(T__88); - setState(1413); - match(T__13); - setState(1414); - expression(); - setState(1415); - match(T__14); - setState(1416); - statement(); - setState(1419); + setState(1613); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,164,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,188,_ctx) ) { case 1: + enterOuterAlt(_localctx, 1); { - setState(1417); - match(T__89); - setState(1418); + setState(1589); + match(T__95); + setState(1590); + match(T__13); + setState(1591); + expression(); + setState(1592); + match(T__14); + setState(1593); + statement(); + setState(1596); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,185,_ctx) ) { + case 1: + { + setState(1594); + match(T__96); + setState(1595); + statement(); + } + break; + } + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1598); + match(T__95); + setState(1599); + match(T__13); + setState(1600); + expression(); + setState(1601); + match(T__97); + setState(1602); + pattern(); + setState(1605); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__46) { + { + setState(1603); + match(T__46); + setState(1604); + expression(); + } + } + + setState(1607); + match(T__14); + setState(1608); statement(); + setState(1611); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,187,_ctx) ) { + case 1: + { + setState(1609); + match(T__96); + setState(1610); + statement(); + } + break; + } } break; } - } } catch (RecognitionException re) { _localctx.exception = re; @@ -9485,30 +10594,30 @@ public T accept(ParseTreeVisitor visitor) { public final ForStatementContext forStatement() throws RecognitionException { ForStatementContext _localctx = new ForStatementContext(_ctx, getState()); - enterRule(_localctx, 250, RULE_forStatement); + enterRule(_localctx, 278, RULE_forStatement); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1422); + setState(1616); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__82) { + if (_la==T__89) { { - setState(1421); - match(T__82); + setState(1615); + match(T__89); } } - setState(1424); - match(T__90); - setState(1425); + setState(1618); + match(T__98); + setState(1619); match(T__13); - setState(1426); + setState(1620); forLoopParts(); - setState(1427); + setState(1621); match(T__14); - setState(1428); + setState(1622); statement(); } } @@ -9560,35 +10669,35 @@ public T accept(ParseTreeVisitor visitor) { public final ForLoopPartsContext forLoopParts() throws RecognitionException { ForLoopPartsContext _localctx = new ForLoopPartsContext(_ctx, getState()); - enterRule(_localctx, 252, RULE_forLoopParts); + enterRule(_localctx, 280, RULE_forLoopParts); int _la; try { - setState(1446); + setState(1640); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,168,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,192,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(1430); + setState(1624); forInitializerStatement(); - setState(1432); + setState(1626); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__11) | (1L << T__13) | (1L << T__15) | (1L << T__18) | (1L << T__27) | (1L << T__33) | (1L << T__38) | (1L << T__41) | (1L << T__42) | (1L << T__43) | (1L << T__46) | (1L << T__47) | (1L << T__48))) != 0) || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (T__76 - 77)) | (1L << (T__81 - 77)) | (1L << (T__82 - 77)) | (1L << (T__83 - 77)) | (1L << (T__84 - 77)) | (1L << (NUMBER - 77)) | (1L << (HEX_NUMBER - 77)) | (1L << (SingleLineString - 77)) | (1L << (MultiLineString - 77)) | (1L << (IDENTIFIER - 77)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__11) | (1L << T__13) | (1L << T__15) | (1L << T__18) | (1L << T__31) | (1L << T__37) | (1L << T__42) | (1L << T__45) | (1L << T__48) | (1L << T__49) | (1L << T__50) | (1L << T__53) | (1L << T__54) | (1L << T__55))) != 0) || ((((_la - 84)) & ~0x3f) == 0 && ((1L << (_la - 84)) & ((1L << (T__83 - 84)) | (1L << (T__88 - 84)) | (1L << (T__89 - 84)) | (1L << (T__90 - 84)) | (1L << (T__91 - 84)) | (1L << (NUMBER - 84)) | (1L << (HEX_NUMBER - 84)) | (1L << (SingleLineString - 84)) | (1L << (MultiLineString - 84)) | (1L << (IDENTIFIER - 84)))) != 0)) { { - setState(1431); + setState(1625); expression(); } } - setState(1434); + setState(1628); match(T__8); - setState(1436); + setState(1630); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__11) | (1L << T__13) | (1L << T__15) | (1L << T__18) | (1L << T__27) | (1L << T__33) | (1L << T__38) | (1L << T__41) | (1L << T__42) | (1L << T__43) | (1L << T__46) | (1L << T__47) | (1L << T__48))) != 0) || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (T__76 - 77)) | (1L << (T__81 - 77)) | (1L << (T__82 - 77)) | (1L << (T__83 - 77)) | (1L << (T__84 - 77)) | (1L << (NUMBER - 77)) | (1L << (HEX_NUMBER - 77)) | (1L << (SingleLineString - 77)) | (1L << (MultiLineString - 77)) | (1L << (IDENTIFIER - 77)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__11) | (1L << T__13) | (1L << T__15) | (1L << T__18) | (1L << T__31) | (1L << T__37) | (1L << T__42) | (1L << T__45) | (1L << T__48) | (1L << T__49) | (1L << T__50) | (1L << T__53) | (1L << T__54) | (1L << T__55))) != 0) || ((((_la - 84)) & ~0x3f) == 0 && ((1L << (_la - 84)) & ((1L << (T__83 - 84)) | (1L << (T__88 - 84)) | (1L << (T__89 - 84)) | (1L << (T__90 - 84)) | (1L << (T__91 - 84)) | (1L << (NUMBER - 84)) | (1L << (HEX_NUMBER - 84)) | (1L << (SingleLineString - 84)) | (1L << (MultiLineString - 84)) | (1L << (IDENTIFIER - 84)))) != 0)) { { - setState(1435); + setState(1629); expressionList(); } } @@ -9598,22 +10707,22 @@ public final ForLoopPartsContext forLoopParts() throws RecognitionException { case 2: enterOuterAlt(_localctx, 2); { - setState(1438); + setState(1632); declaredIdentifier(); - setState(1439); - match(T__91); - setState(1440); + setState(1633); + match(T__99); + setState(1634); expression(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(1442); + setState(1636); identifier(); - setState(1443); - match(T__91); - setState(1444); + setState(1637); + match(T__99); + setState(1638); expression(); } break; @@ -9658,33 +10767,33 @@ public T accept(ParseTreeVisitor visitor) { public final ForInitializerStatementContext forInitializerStatement() throws RecognitionException { ForInitializerStatementContext _localctx = new ForInitializerStatementContext(_ctx, getState()); - enterRule(_localctx, 254, RULE_forInitializerStatement); + enterRule(_localctx, 282, RULE_forInitializerStatement); int _la; try { - setState(1453); + setState(1647); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,170,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,194,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(1448); + setState(1642); localVariableDeclaration(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(1450); + setState(1644); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__11) | (1L << T__13) | (1L << T__15) | (1L << T__18) | (1L << T__27) | (1L << T__33) | (1L << T__38) | (1L << T__41) | (1L << T__42) | (1L << T__43) | (1L << T__46) | (1L << T__47) | (1L << T__48))) != 0) || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (T__76 - 77)) | (1L << (T__81 - 77)) | (1L << (T__82 - 77)) | (1L << (T__83 - 77)) | (1L << (T__84 - 77)) | (1L << (NUMBER - 77)) | (1L << (HEX_NUMBER - 77)) | (1L << (SingleLineString - 77)) | (1L << (MultiLineString - 77)) | (1L << (IDENTIFIER - 77)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__11) | (1L << T__13) | (1L << T__15) | (1L << T__18) | (1L << T__31) | (1L << T__37) | (1L << T__42) | (1L << T__45) | (1L << T__48) | (1L << T__49) | (1L << T__50) | (1L << T__53) | (1L << T__54) | (1L << T__55))) != 0) || ((((_la - 84)) & ~0x3f) == 0 && ((1L << (_la - 84)) & ((1L << (T__83 - 84)) | (1L << (T__88 - 84)) | (1L << (T__89 - 84)) | (1L << (T__90 - 84)) | (1L << (T__91 - 84)) | (1L << (NUMBER - 84)) | (1L << (HEX_NUMBER - 84)) | (1L << (SingleLineString - 84)) | (1L << (MultiLineString - 84)) | (1L << (IDENTIFIER - 84)))) != 0)) { { - setState(1449); + setState(1643); expression(); } } - setState(1452); + setState(1646); match(T__8); } break; @@ -9729,19 +10838,19 @@ public T accept(ParseTreeVisitor visitor) { public final WhileStatementContext whileStatement() throws RecognitionException { WhileStatementContext _localctx = new WhileStatementContext(_ctx, getState()); - enterRule(_localctx, 256, RULE_whileStatement); + enterRule(_localctx, 284, RULE_whileStatement); try { enterOuterAlt(_localctx, 1); { - setState(1455); - match(T__92); - setState(1456); + setState(1649); + match(T__100); + setState(1650); match(T__13); - setState(1457); + setState(1651); expression(); - setState(1458); + setState(1652); match(T__14); - setState(1459); + setState(1653); statement(); } } @@ -9784,23 +10893,23 @@ public T accept(ParseTreeVisitor visitor) { public final DoStatementContext doStatement() throws RecognitionException { DoStatementContext _localctx = new DoStatementContext(_ctx, getState()); - enterRule(_localctx, 258, RULE_doStatement); + enterRule(_localctx, 286, RULE_doStatement); try { enterOuterAlt(_localctx, 1); { - setState(1461); - match(T__93); - setState(1462); + setState(1655); + match(T__101); + setState(1656); statement(); - setState(1463); - match(T__92); - setState(1464); + setState(1657); + match(T__100); + setState(1658); match(T__13); - setState(1465); + setState(1659); expression(); - setState(1466); + setState(1660); match(T__14); - setState(1467); + setState(1661); match(T__8); } } @@ -9849,49 +10958,49 @@ public T accept(ParseTreeVisitor visitor) { public final SwitchStatementContext switchStatement() throws RecognitionException { SwitchStatementContext _localctx = new SwitchStatementContext(_ctx, getState()); - enterRule(_localctx, 260, RULE_switchStatement); + enterRule(_localctx, 288, RULE_switchStatement); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { - setState(1469); - match(T__94); - setState(1470); + setState(1663); + match(T__45); + setState(1664); match(T__13); - setState(1471); + setState(1665); expression(); - setState(1472); + setState(1666); match(T__14); - setState(1473); + setState(1667); match(T__11); - setState(1477); + setState(1671); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,171,_ctx); - while ( _alt!=2 && _alt!= ATN.INVALID_ALT_NUMBER ) { + _alt = getInterpreter().adaptivePredict(_input,195,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(1474); + setState(1668); switchCase(); } - } + } } - setState(1479); + setState(1673); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,171,_ctx); + _alt = getInterpreter().adaptivePredict(_input,195,_ctx); } - setState(1481); + setState(1675); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__96 || _la==IDENTIFIER) { + if (_la==T__102 || _la==IDENTIFIER) { { - setState(1480); + setState(1674); defaultCase(); } } - setState(1483); + setState(1677); match(T__12); } } @@ -9907,8 +11016,11 @@ public final SwitchStatementContext switchStatement() throws RecognitionExceptio } public static class SwitchCaseContext extends ParserRuleContext { - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); } public StatementsContext statements() { return getRuleContext(StatementsContext.class,0); @@ -9940,32 +11052,44 @@ public T accept(ParseTreeVisitor visitor) { public final SwitchCaseContext switchCase() throws RecognitionException { SwitchCaseContext _localctx = new SwitchCaseContext(_ctx, getState()); - enterRule(_localctx, 262, RULE_switchCase); + enterRule(_localctx, 290, RULE_switchCase); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1488); + setState(1682); _errHandler.sync(this); _la = _input.LA(1); while (_la==IDENTIFIER) { { { - setState(1485); + setState(1679); label(); } } - setState(1490); + setState(1684); _errHandler.sync(this); _la = _input.LA(1); } - setState(1491); - match(T__95); - setState(1492); + setState(1685); + match(T__97); + setState(1686); expression(); - setState(1493); + setState(1689); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__46) { + { + setState(1687); + match(T__46); + setState(1688); + expression(); + } + } + + setState(1691); match(T__20); - setState(1494); + setState(1692); statements(); } } @@ -10011,30 +11135,30 @@ public T accept(ParseTreeVisitor visitor) { public final DefaultCaseContext defaultCase() throws RecognitionException { DefaultCaseContext _localctx = new DefaultCaseContext(_ctx, getState()); - enterRule(_localctx, 264, RULE_defaultCase); + enterRule(_localctx, 292, RULE_defaultCase); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1499); + setState(1697); _errHandler.sync(this); _la = _input.LA(1); while (_la==IDENTIFIER) { { { - setState(1496); + setState(1694); label(); } } - setState(1501); + setState(1699); _errHandler.sync(this); _la = _input.LA(1); } - setState(1502); - match(T__96); - setState(1503); + setState(1700); + match(T__102); + setState(1701); match(T__20); - setState(1504); + setState(1702); statements(); } } @@ -10071,13 +11195,13 @@ public T accept(ParseTreeVisitor visitor) { public final RethrowStatmentContext rethrowStatment() throws RecognitionException { RethrowStatmentContext _localctx = new RethrowStatmentContext(_ctx, getState()); - enterRule(_localctx, 266, RULE_rethrowStatment); + enterRule(_localctx, 294, RULE_rethrowStatment); try { enterOuterAlt(_localctx, 1); { - setState(1506); - match(T__97); - setState(1507); + setState(1704); + match(T__103); + setState(1705); match(T__8); } } @@ -10126,50 +11250,50 @@ public T accept(ParseTreeVisitor visitor) { public final TryStatementContext tryStatement() throws RecognitionException { TryStatementContext _localctx = new TryStatementContext(_ctx, getState()); - enterRule(_localctx, 268, RULE_tryStatement); + enterRule(_localctx, 296, RULE_tryStatement); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1509); - match(T__98); - setState(1510); + setState(1707); + match(T__104); + setState(1708); block(); - setState(1520); + setState(1718); _errHandler.sync(this); switch (_input.LA(1)) { - case T__99: - case T__100: + case T__105: + case T__106: { - setState(1512); + setState(1710); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(1511); + setState(1709); onPart(); } } - setState(1514); + setState(1712); _errHandler.sync(this); _la = _input.LA(1); - } while ( _la==T__99 || _la==T__100 ); - setState(1517); + } while ( _la==T__105 || _la==T__106 ); + setState(1715); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__101) { + if (_la==T__107) { { - setState(1516); + setState(1714); finallyPart(); } } } break; - case T__101: + case T__107: { - setState(1519); + setState(1717); finallyPart(); } break; @@ -10220,39 +11344,39 @@ public T accept(ParseTreeVisitor visitor) { public final OnPartContext onPart() throws RecognitionException { OnPartContext _localctx = new OnPartContext(_ctx, getState()); - enterRule(_localctx, 270, RULE_onPart); + enterRule(_localctx, 298, RULE_onPart); int _la; try { - setState(1532); + setState(1730); _errHandler.sync(this); switch (_input.LA(1)) { - case T__100: + case T__106: enterOuterAlt(_localctx, 1); { - setState(1522); + setState(1720); catchPart(); - setState(1523); + setState(1721); block(); } break; - case T__99: + case T__105: enterOuterAlt(_localctx, 2); { - setState(1525); - match(T__99); - setState(1526); + setState(1723); + match(T__105); + setState(1724); dtype(); - setState(1528); + setState(1726); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__100) { + if (_la==T__106) { { - setState(1527); + setState(1725); catchPart(); } } - setState(1530); + setState(1728); block(); } break; @@ -10299,30 +11423,30 @@ public T accept(ParseTreeVisitor visitor) { public final CatchPartContext catchPart() throws RecognitionException { CatchPartContext _localctx = new CatchPartContext(_ctx, getState()); - enterRule(_localctx, 272, RULE_catchPart); + enterRule(_localctx, 300, RULE_catchPart); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1534); - match(T__100); - setState(1535); + setState(1732); + match(T__106); + setState(1733); match(T__13); - setState(1536); + setState(1734); identifier(); - setState(1539); + setState(1737); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__0) { { - setState(1537); + setState(1735); match(T__0); - setState(1538); + setState(1736); identifier(); } } - setState(1541); + setState(1739); match(T__14); } } @@ -10362,13 +11486,13 @@ public T accept(ParseTreeVisitor visitor) { public final FinallyPartContext finallyPart() throws RecognitionException { FinallyPartContext _localctx = new FinallyPartContext(_ctx, getState()); - enterRule(_localctx, 274, RULE_finallyPart); + enterRule(_localctx, 302, RULE_finallyPart); try { enterOuterAlt(_localctx, 1); { - setState(1543); - match(T__101); - setState(1544); + setState(1741); + match(T__107); + setState(1742); block(); } } @@ -10408,24 +11532,24 @@ public T accept(ParseTreeVisitor visitor) { public final ReturnStatementContext returnStatement() throws RecognitionException { ReturnStatementContext _localctx = new ReturnStatementContext(_ctx, getState()); - enterRule(_localctx, 276, RULE_returnStatement); + enterRule(_localctx, 304, RULE_returnStatement); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1546); - match(T__102); - setState(1548); + setState(1744); + match(T__108); + setState(1746); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__11) | (1L << T__13) | (1L << T__15) | (1L << T__18) | (1L << T__27) | (1L << T__33) | (1L << T__38) | (1L << T__41) | (1L << T__42) | (1L << T__43) | (1L << T__46) | (1L << T__47) | (1L << T__48))) != 0) || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (T__76 - 77)) | (1L << (T__81 - 77)) | (1L << (T__82 - 77)) | (1L << (T__83 - 77)) | (1L << (T__84 - 77)) | (1L << (NUMBER - 77)) | (1L << (HEX_NUMBER - 77)) | (1L << (SingleLineString - 77)) | (1L << (MultiLineString - 77)) | (1L << (IDENTIFIER - 77)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__11) | (1L << T__13) | (1L << T__15) | (1L << T__18) | (1L << T__31) | (1L << T__37) | (1L << T__42) | (1L << T__45) | (1L << T__48) | (1L << T__49) | (1L << T__50) | (1L << T__53) | (1L << T__54) | (1L << T__55))) != 0) || ((((_la - 84)) & ~0x3f) == 0 && ((1L << (_la - 84)) & ((1L << (T__83 - 84)) | (1L << (T__88 - 84)) | (1L << (T__89 - 84)) | (1L << (T__90 - 84)) | (1L << (T__91 - 84)) | (1L << (NUMBER - 84)) | (1L << (HEX_NUMBER - 84)) | (1L << (SingleLineString - 84)) | (1L << (MultiLineString - 84)) | (1L << (IDENTIFIER - 84)))) != 0)) { { - setState(1547); + setState(1745); expression(); } } - setState(1550); + setState(1748); match(T__8); } } @@ -10465,13 +11589,13 @@ public T accept(ParseTreeVisitor visitor) { public final LabelContext label() throws RecognitionException { LabelContext _localctx = new LabelContext(_ctx, getState()); - enterRule(_localctx, 278, RULE_label); + enterRule(_localctx, 306, RULE_label); try { enterOuterAlt(_localctx, 1); { - setState(1552); + setState(1750); identifier(); - setState(1553); + setState(1751); match(T__20); } } @@ -10511,24 +11635,24 @@ public T accept(ParseTreeVisitor visitor) { public final BreakStatementContext breakStatement() throws RecognitionException { BreakStatementContext _localctx = new BreakStatementContext(_ctx, getState()); - enterRule(_localctx, 280, RULE_breakStatement); + enterRule(_localctx, 308, RULE_breakStatement); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1555); - match(T__103); - setState(1557); + setState(1753); + match(T__109); + setState(1755); _errHandler.sync(this); _la = _input.LA(1); if (_la==IDENTIFIER) { { - setState(1556); + setState(1754); identifier(); } } - setState(1559); + setState(1757); match(T__8); } } @@ -10568,24 +11692,24 @@ public T accept(ParseTreeVisitor visitor) { public final ContinueStatementContext continueStatement() throws RecognitionException { ContinueStatementContext _localctx = new ContinueStatementContext(_ctx, getState()); - enterRule(_localctx, 282, RULE_continueStatement); + enterRule(_localctx, 310, RULE_continueStatement); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1561); - match(T__104); - setState(1563); + setState(1759); + match(T__110); + setState(1761); _errHandler.sync(this); _la = _input.LA(1); if (_la==IDENTIFIER) { { - setState(1562); + setState(1760); identifier(); } } - setState(1565); + setState(1763); match(T__8); } } @@ -10625,15 +11749,15 @@ public T accept(ParseTreeVisitor visitor) { public final YieldStatementContext yieldStatement() throws RecognitionException { YieldStatementContext _localctx = new YieldStatementContext(_ctx, getState()); - enterRule(_localctx, 284, RULE_yieldStatement); + enterRule(_localctx, 312, RULE_yieldStatement); try { enterOuterAlt(_localctx, 1); { - setState(1567); - match(T__105); - setState(1568); + setState(1765); + match(T__111); + setState(1766); expression(); - setState(1569); + setState(1767); match(T__8); } } @@ -10673,15 +11797,15 @@ public T accept(ParseTreeVisitor visitor) { public final YieldEachStatementContext yieldEachStatement() throws RecognitionException { YieldEachStatementContext _localctx = new YieldEachStatementContext(_ctx, getState()); - enterRule(_localctx, 286, RULE_yieldEachStatement); + enterRule(_localctx, 314, RULE_yieldEachStatement); try { enterOuterAlt(_localctx, 1); { - setState(1571); - match(T__106); - setState(1572); + setState(1769); + match(T__112); + setState(1770); expression(); - setState(1573); + setState(1771); match(T__8); } } @@ -10721,13 +11845,13 @@ public T accept(ParseTreeVisitor visitor) { public final AssertStatementContext assertStatement() throws RecognitionException { AssertStatementContext _localctx = new AssertStatementContext(_ctx, getState()); - enterRule(_localctx, 288, RULE_assertStatement); + enterRule(_localctx, 316, RULE_assertStatement); try { enterOuterAlt(_localctx, 1); { - setState(1575); + setState(1773); assertion(); - setState(1576); + setState(1774); match(T__8); } } @@ -10770,40 +11894,40 @@ public T accept(ParseTreeVisitor visitor) { public final AssertionContext assertion() throws RecognitionException { AssertionContext _localctx = new AssertionContext(_ctx, getState()); - enterRule(_localctx, 290, RULE_assertion); + enterRule(_localctx, 318, RULE_assertion); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1578); - match(T__107); - setState(1579); + setState(1776); + match(T__113); + setState(1777); match(T__13); - setState(1580); + setState(1778); expression(); - setState(1583); + setState(1781); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,184,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,209,_ctx) ) { case 1: { - setState(1581); + setState(1779); match(T__0); - setState(1582); + setState(1780); expression(); } break; } - setState(1586); + setState(1784); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__0) { { - setState(1585); + setState(1783); match(T__0); } } - setState(1588); + setState(1786); match(T__14); } } @@ -10879,147 +12003,147 @@ public T accept(ParseTreeVisitor visitor) { public final TopLevelDefinitionContext topLevelDefinition() throws RecognitionException { TopLevelDefinitionContext _localctx = new TopLevelDefinitionContext(_ctx, getState()); - enterRule(_localctx, 292, RULE_topLevelDefinition); + enterRule(_localctx, 320, RULE_topLevelDefinition); int _la; try { - setState(1639); + setState(1837); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,192,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,217,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(1590); + setState(1788); classDefinition(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(1591); + setState(1789); enumType(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(1592); + setState(1790); typeAlias(); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(1594); + setState(1792); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__25) { + if (_la==T__29) { { - setState(1593); - match(T__25); + setState(1791); + match(T__29); } } - setState(1596); + setState(1794); functionSignature(); - setState(1597); + setState(1795); match(T__8); } break; case 5: enterOuterAlt(_localctx, 5); { - setState(1600); + setState(1798); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__25) { + if (_la==T__29) { { - setState(1599); - match(T__25); + setState(1797); + match(T__29); } } - setState(1602); + setState(1800); getterSignature(); - setState(1603); + setState(1801); match(T__8); } break; case 6: enterOuterAlt(_localctx, 6); { - setState(1606); + setState(1804); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__25) { + if (_la==T__29) { { - setState(1605); - match(T__25); + setState(1803); + match(T__29); } } - setState(1608); + setState(1806); setterSignature(); - setState(1609); + setState(1807); match(T__8); } break; case 7: enterOuterAlt(_localctx, 7); { - setState(1611); + setState(1809); functionSignature(); - setState(1612); + setState(1810); functionBody(); } break; case 8: enterOuterAlt(_localctx, 8); { - setState(1615); + setState(1813); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__5 || _la==IDENTIFIER) { + if (_la==T__5 || _la==T__13 || _la==IDENTIFIER) { { - setState(1614); + setState(1812); returnType(); } } - setState(1617); - match(T__31); - setState(1618); + setState(1815); + match(T__35); + setState(1816); identifier(); - setState(1619); + setState(1817); functionBody(); } break; case 9: enterOuterAlt(_localctx, 9); { - setState(1622); + setState(1820); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__5 || _la==IDENTIFIER) { + if (_la==T__5 || _la==T__13 || _la==IDENTIFIER) { { - setState(1621); + setState(1819); returnType(); } } - setState(1624); - match(T__32); - setState(1625); + setState(1822); + match(T__36); + setState(1823); identifier(); - setState(1626); + setState(1824); formalParameterList(); - setState(1627); + setState(1825); functionBody(); } break; case 10: enterOuterAlt(_localctx, 10); { - setState(1629); + setState(1827); _la = _input.LA(1); if ( !(_la==T__1 || _la==T__2) ) { _errHandler.recoverInline(this); @@ -11029,28 +12153,28 @@ public final TopLevelDefinitionContext topLevelDefinition() throws RecognitionEx _errHandler.reportMatch(this); consume(); } - setState(1631); + setState(1829); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,191,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,216,_ctx) ) { case 1: { - setState(1630); + setState(1828); dtype(); } break; } - setState(1633); + setState(1831); staticFinalDeclarationList(); - setState(1634); + setState(1832); match(T__8); } break; case 11: enterOuterAlt(_localctx, 11); { - setState(1636); + setState(1834); variableDeclaration(); - setState(1637); + setState(1835); match(T__8); } break; @@ -11089,14 +12213,14 @@ public T accept(ParseTreeVisitor visitor) { public final GetOrSetContext getOrSet() throws RecognitionException { GetOrSetContext _localctx = new GetOrSetContext(_ctx, getState()); - enterRule(_localctx, 294, RULE_getOrSet); + enterRule(_localctx, 322, RULE_getOrSet); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1641); + setState(1839); _la = _input.LA(1); - if ( !(_la==T__31 || _la==T__32) ) { + if ( !(_la==T__35 || _la==T__36) ) { _errHandler.recoverInline(this); } else { @@ -11163,75 +12287,75 @@ public T accept(ParseTreeVisitor visitor) { public final LibraryDefinitionContext libraryDefinition() throws RecognitionException { LibraryDefinitionContext _localctx = new LibraryDefinitionContext(_ctx, getState()); - enterRule(_localctx, 296, RULE_libraryDefinition); + enterRule(_localctx, 324, RULE_libraryDefinition); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { - setState(1644); + setState(1842); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__108) { + if (_la==T__114) { { - setState(1643); + setState(1841); scriptTag(); } } - setState(1647); + setState(1845); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,194,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,219,_ctx) ) { case 1: { - setState(1646); + setState(1844); libraryName(); } break; } - setState(1652); + setState(1850); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,195,_ctx); - while ( _alt!=2 && _alt!= ATN.INVALID_ALT_NUMBER ) { + _alt = getInterpreter().adaptivePredict(_input,220,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(1649); + setState(1847); importOrExport(); } - } + } } - setState(1654); + setState(1852); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,195,_ctx); + _alt = getInterpreter().adaptivePredict(_input,220,_ctx); } - setState(1658); + setState(1856); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,196,_ctx); - while ( _alt!=2 && _alt!= ATN.INVALID_ALT_NUMBER ) { + _alt = getInterpreter().adaptivePredict(_input,221,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(1655); + setState(1853); partDirective(); } } } - setState(1660); + setState(1858); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,196,_ctx); + _alt = getInterpreter().adaptivePredict(_input,221,_ctx); } - setState(1664); + setState(1862); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__1) | (1L << T__2) | (1L << T__3) | (1L << T__5) | (1L << T__21) | (1L << T__22) | (1L << T__25) | (1L << T__31) | (1L << T__32) | (1L << T__37) | (1L << T__40))) != 0) || _la==T__116 || _la==IDENTIFIER) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__1) | (1L << T__2) | (1L << T__3) | (1L << T__5) | (1L << T__13) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__29) | (1L << T__35) | (1L << T__36) | (1L << T__41) | (1L << T__44))) != 0) || _la==T__122 || _la==IDENTIFIER) { { { - setState(1661); + setState(1859); topLevelDefinition(); } } - setState(1666); + setState(1864); _errHandler.sync(this); _la = _input.LA(1); } @@ -11274,20 +12398,20 @@ public T accept(ParseTreeVisitor visitor) { public final ScriptTagContext scriptTag() throws RecognitionException { ScriptTagContext _localctx = new ScriptTagContext(_ctx, getState()); - enterRule(_localctx, 298, RULE_scriptTag); + enterRule(_localctx, 326, RULE_scriptTag); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1667); - match(T__108); - setState(1671); + setState(1865); + match(T__114); + setState(1869); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__1) | (1L << T__2) | (1L << T__3) | (1L << T__4) | (1L << T__5) | (1L << T__6) | (1L << T__7) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << T__14) | (1L << T__15) | (1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__29) | (1L << T__30) | (1L << T__31) | (1L << T__32) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__40) | (1L << T__41) | (1L << T__42) | (1L << T__43) | (1L << T__44) | (1L << T__45) | (1L << T__46) | (1L << T__47) | (1L << T__48) | (1L << T__49) | (1L << T__50) | (1L << T__51) | (1L << T__52) | (1L << T__53) | (1L << T__54) | (1L << T__55) | (1L << T__56) | (1L << T__57) | (1L << T__58) | (1L << T__59) | (1L << T__60) | (1L << T__61) | (1L << T__62))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (T__63 - 64)) | (1L << (T__64 - 64)) | (1L << (T__65 - 64)) | (1L << (T__66 - 64)) | (1L << (T__67 - 64)) | (1L << (T__68 - 64)) | (1L << (T__69 - 64)) | (1L << (T__70 - 64)) | (1L << (T__71 - 64)) | (1L << (T__72 - 64)) | (1L << (T__73 - 64)) | (1L << (T__74 - 64)) | (1L << (T__75 - 64)) | (1L << (T__76 - 64)) | (1L << (T__77 - 64)) | (1L << (T__78 - 64)) | (1L << (T__79 - 64)) | (1L << (T__80 - 64)) | (1L << (T__81 - 64)) | (1L << (T__82 - 64)) | (1L << (T__83 - 64)) | (1L << (T__84 - 64)) | (1L << (T__85 - 64)) | (1L << (T__86 - 64)) | (1L << (T__87 - 64)) | (1L << (T__88 - 64)) | (1L << (T__89 - 64)) | (1L << (T__90 - 64)) | (1L << (T__91 - 64)) | (1L << (T__92 - 64)) | (1L << (T__93 - 64)) | (1L << (T__94 - 64)) | (1L << (T__95 - 64)) | (1L << (T__96 - 64)) | (1L << (T__97 - 64)) | (1L << (T__98 - 64)) | (1L << (T__99 - 64)) | (1L << (T__100 - 64)) | (1L << (T__101 - 64)) | (1L << (T__102 - 64)) | (1L << (T__103 - 64)) | (1L << (T__104 - 64)) | (1L << (T__105 - 64)) | (1L << (T__106 - 64)) | (1L << (T__107 - 64)) | (1L << (T__108 - 64)) | (1L << (T__109 - 64)) | (1L << (T__110 - 64)) | (1L << (T__111 - 64)) | (1L << (T__112 - 64)) | (1L << (T__113 - 64)) | (1L << (T__114 - 64)) | (1L << (T__115 - 64)) | (1L << (T__116 - 64)) | (1L << (WHITESPACE - 64)) | (1L << (NUMBER - 64)) | (1L << (HEX_NUMBER - 64)) | (1L << (SingleLineString - 64)) | (1L << (MultiLineString - 64)) | (1L << (IDENTIFIER - 64)) | (1L << (SINGLE_LINE_COMMENT - 64)) | (1L << (MULTI_LINE_COMMENT - 64)))) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__1) | (1L << T__2) | (1L << T__3) | (1L << T__4) | (1L << T__5) | (1L << T__6) | (1L << T__7) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << T__14) | (1L << T__15) | (1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__29) | (1L << T__30) | (1L << T__31) | (1L << T__32) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__40) | (1L << T__41) | (1L << T__42) | (1L << T__43) | (1L << T__44) | (1L << T__45) | (1L << T__46) | (1L << T__47) | (1L << T__48) | (1L << T__49) | (1L << T__50) | (1L << T__51) | (1L << T__52) | (1L << T__53) | (1L << T__54) | (1L << T__55) | (1L << T__56) | (1L << T__57) | (1L << T__58) | (1L << T__59) | (1L << T__60) | (1L << T__61) | (1L << T__62))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (T__63 - 64)) | (1L << (T__64 - 64)) | (1L << (T__65 - 64)) | (1L << (T__66 - 64)) | (1L << (T__67 - 64)) | (1L << (T__68 - 64)) | (1L << (T__69 - 64)) | (1L << (T__70 - 64)) | (1L << (T__71 - 64)) | (1L << (T__72 - 64)) | (1L << (T__73 - 64)) | (1L << (T__74 - 64)) | (1L << (T__75 - 64)) | (1L << (T__76 - 64)) | (1L << (T__77 - 64)) | (1L << (T__78 - 64)) | (1L << (T__79 - 64)) | (1L << (T__80 - 64)) | (1L << (T__81 - 64)) | (1L << (T__82 - 64)) | (1L << (T__83 - 64)) | (1L << (T__84 - 64)) | (1L << (T__85 - 64)) | (1L << (T__86 - 64)) | (1L << (T__87 - 64)) | (1L << (T__88 - 64)) | (1L << (T__89 - 64)) | (1L << (T__90 - 64)) | (1L << (T__91 - 64)) | (1L << (T__92 - 64)) | (1L << (T__93 - 64)) | (1L << (T__94 - 64)) | (1L << (T__95 - 64)) | (1L << (T__96 - 64)) | (1L << (T__97 - 64)) | (1L << (T__98 - 64)) | (1L << (T__99 - 64)) | (1L << (T__100 - 64)) | (1L << (T__101 - 64)) | (1L << (T__102 - 64)) | (1L << (T__103 - 64)) | (1L << (T__104 - 64)) | (1L << (T__105 - 64)) | (1L << (T__106 - 64)) | (1L << (T__107 - 64)) | (1L << (T__108 - 64)) | (1L << (T__109 - 64)) | (1L << (T__110 - 64)) | (1L << (T__111 - 64)) | (1L << (T__112 - 64)) | (1L << (T__113 - 64)) | (1L << (T__114 - 64)) | (1L << (T__115 - 64)) | (1L << (T__116 - 64)) | (1L << (T__117 - 64)) | (1L << (T__118 - 64)) | (1L << (T__119 - 64)) | (1L << (T__120 - 64)) | (1L << (T__121 - 64)) | (1L << (T__122 - 64)) | (1L << (WHITESPACE - 64)) | (1L << (NUMBER - 64)) | (1L << (HEX_NUMBER - 64)) | (1L << (SingleLineString - 64)))) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & ((1L << (MultiLineString - 128)) | (1L << (IDENTIFIER - 128)) | (1L << (SINGLE_LINE_COMMENT - 128)) | (1L << (MULTI_LINE_COMMENT - 128)))) != 0)) { { { - setState(1668); + setState(1866); _la = _input.LA(1); if ( _la <= 0 || (_la==NEWLINE) ) { _errHandler.recoverInline(this); @@ -11299,11 +12423,11 @@ public final ScriptTagContext scriptTag() throws RecognitionException { } } } - setState(1673); + setState(1871); _errHandler.sync(this); _la = _input.LA(1); } - setState(1674); + setState(1872); match(NEWLINE); } } @@ -11346,17 +12470,17 @@ public T accept(ParseTreeVisitor visitor) { public final LibraryNameContext libraryName() throws RecognitionException { LibraryNameContext _localctx = new LibraryNameContext(_ctx, getState()); - enterRule(_localctx, 300, RULE_libraryName); + enterRule(_localctx, 328, RULE_libraryName); try { enterOuterAlt(_localctx, 1); { - setState(1676); + setState(1874); metadata(); - setState(1677); - match(T__109); - setState(1678); + setState(1875); + match(T__115); + setState(1876); dottedIdentifierList(); - setState(1679); + setState(1877); match(T__8); } } @@ -11399,22 +12523,22 @@ public T accept(ParseTreeVisitor visitor) { public final ImportOrExportContext importOrExport() throws RecognitionException { ImportOrExportContext _localctx = new ImportOrExportContext(_ctx, getState()); - enterRule(_localctx, 302, RULE_importOrExport); + enterRule(_localctx, 330, RULE_importOrExport); try { - setState(1683); + setState(1881); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,199,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,224,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(1681); + setState(1879); libraryimport(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(1682); + setState(1880); libraryExport(); } break; @@ -11459,26 +12583,26 @@ public T accept(ParseTreeVisitor visitor) { public final DottedIdentifierListContext dottedIdentifierList() throws RecognitionException { DottedIdentifierListContext _localctx = new DottedIdentifierListContext(_ctx, getState()); - enterRule(_localctx, 304, RULE_dottedIdentifierList); + enterRule(_localctx, 332, RULE_dottedIdentifierList); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1685); + setState(1883); identifier(); - setState(1690); + setState(1888); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__0) { { { - setState(1686); + setState(1884); match(T__0); - setState(1687); + setState(1885); identifier(); } } - setState(1692); + setState(1890); _errHandler.sync(this); _la = _input.LA(1); } @@ -11523,13 +12647,13 @@ public T accept(ParseTreeVisitor visitor) { public final LibraryimportContext libraryimport() throws RecognitionException { LibraryimportContext _localctx = new LibraryimportContext(_ctx, getState()); - enterRule(_localctx, 306, RULE_libraryimport); + enterRule(_localctx, 334, RULE_libraryimport); try { enterOuterAlt(_localctx, 1); { - setState(1693); + setState(1891); metadata(); - setState(1694); + setState(1892); importSpecification(); } } @@ -11578,42 +12702,42 @@ public T accept(ParseTreeVisitor visitor) { public final ImportSpecificationContext importSpecification() throws RecognitionException { ImportSpecificationContext _localctx = new ImportSpecificationContext(_ctx, getState()); - enterRule(_localctx, 308, RULE_importSpecification); + enterRule(_localctx, 336, RULE_importSpecification); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1696); - match(T__110); - setState(1697); + setState(1894); + match(T__116); + setState(1895); configurableUri(); - setState(1700); + setState(1898); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__87) { + if (_la==T__94) { { - setState(1698); - match(T__87); - setState(1699); + setState(1896); + match(T__94); + setState(1897); identifier(); } } - setState(1705); + setState(1903); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__111 || _la==T__112) { + while (_la==T__117 || _la==T__118) { { { - setState(1702); + setState(1900); combinator(); } } - setState(1707); + setState(1905); _errHandler.sync(this); _la = _input.LA(1); } - setState(1708); + setState(1906); match(T__8); } } @@ -11653,26 +12777,26 @@ public T accept(ParseTreeVisitor visitor) { public final CombinatorContext combinator() throws RecognitionException { CombinatorContext _localctx = new CombinatorContext(_ctx, getState()); - enterRule(_localctx, 310, RULE_combinator); + enterRule(_localctx, 338, RULE_combinator); try { - setState(1714); + setState(1912); _errHandler.sync(this); switch (_input.LA(1)) { - case T__111: + case T__117: enterOuterAlt(_localctx, 1); { - setState(1710); - match(T__111); - setState(1711); + setState(1908); + match(T__117); + setState(1909); identifierList(); } break; - case T__112: + case T__118: enterOuterAlt(_localctx, 2); { - setState(1712); - match(T__112); - setState(1713); + setState(1910); + match(T__118); + setState(1911); identifierList(); } break; @@ -11719,26 +12843,26 @@ public T accept(ParseTreeVisitor visitor) { public final IdentifierListContext identifierList() throws RecognitionException { IdentifierListContext _localctx = new IdentifierListContext(_ctx, getState()); - enterRule(_localctx, 312, RULE_identifierList); + enterRule(_localctx, 340, RULE_identifierList); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1716); + setState(1914); identifier(); - setState(1721); + setState(1919); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__0) { { { - setState(1717); + setState(1915); match(T__0); - setState(1718); + setState(1916); identifier(); } } - setState(1723); + setState(1921); _errHandler.sync(this); _la = _input.LA(1); } @@ -11789,32 +12913,32 @@ public T accept(ParseTreeVisitor visitor) { public final LibraryExportContext libraryExport() throws RecognitionException { LibraryExportContext _localctx = new LibraryExportContext(_ctx, getState()); - enterRule(_localctx, 314, RULE_libraryExport); + enterRule(_localctx, 342, RULE_libraryExport); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1724); + setState(1922); metadata(); - setState(1725); - match(T__113); - setState(1726); + setState(1923); + match(T__119); + setState(1924); configurableUri(); - setState(1730); + setState(1928); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__111 || _la==T__112) { + while (_la==T__117 || _la==T__118) { { { - setState(1727); + setState(1925); combinator(); } } - setState(1732); + setState(1930); _errHandler.sync(this); _la = _input.LA(1); } - setState(1733); + setState(1931); match(T__8); } } @@ -11857,17 +12981,17 @@ public T accept(ParseTreeVisitor visitor) { public final PartDirectiveContext partDirective() throws RecognitionException { PartDirectiveContext _localctx = new PartDirectiveContext(_ctx, getState()); - enterRule(_localctx, 316, RULE_partDirective); + enterRule(_localctx, 344, RULE_partDirective); try { enterOuterAlt(_localctx, 1); { - setState(1735); + setState(1933); metadata(); - setState(1736); - match(T__114); - setState(1737); + setState(1934); + match(T__120); + setState(1935); uri(); - setState(1738); + setState(1936); match(T__8); } } @@ -11913,36 +13037,36 @@ public T accept(ParseTreeVisitor visitor) { public final PartHeaderContext partHeader() throws RecognitionException { PartHeaderContext _localctx = new PartHeaderContext(_ctx, getState()); - enterRule(_localctx, 318, RULE_partHeader); + enterRule(_localctx, 346, RULE_partHeader); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1740); + setState(1938); metadata(); - setState(1741); - match(T__114); - setState(1742); - match(T__115); - setState(1743); + setState(1939); + match(T__120); + setState(1940); + match(T__121); + setState(1941); identifier(); - setState(1748); + setState(1946); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__19) { { { - setState(1744); + setState(1942); match(T__19); - setState(1745); + setState(1943); identifier(); } } - setState(1750); + setState(1948); _errHandler.sync(this); _la = _input.LA(1); } - setState(1751); + setState(1949); match(T__8); } } @@ -11989,28 +13113,28 @@ public T accept(ParseTreeVisitor visitor) { public final PartDeclarationContext partDeclaration() throws RecognitionException { PartDeclarationContext _localctx = new PartDeclarationContext(_ctx, getState()); - enterRule(_localctx, 320, RULE_partDeclaration); + enterRule(_localctx, 348, RULE_partDeclaration); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1753); + setState(1951); partHeader(); - setState(1757); + setState(1955); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__1) | (1L << T__2) | (1L << T__3) | (1L << T__5) | (1L << T__21) | (1L << T__22) | (1L << T__25) | (1L << T__31) | (1L << T__32) | (1L << T__37) | (1L << T__40))) != 0) || _la==T__116 || _la==IDENTIFIER) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__1) | (1L << T__2) | (1L << T__3) | (1L << T__5) | (1L << T__13) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__29) | (1L << T__35) | (1L << T__36) | (1L << T__41) | (1L << T__44))) != 0) || _la==T__122 || _la==IDENTIFIER) { { { - setState(1754); + setState(1952); topLevelDefinition(); } } - setState(1759); + setState(1957); _errHandler.sync(this); _la = _input.LA(1); } - setState(1760); + setState(1958); match(EOF); } } @@ -12050,11 +13174,11 @@ public T accept(ParseTreeVisitor visitor) { public final UriContext uri() throws RecognitionException { UriContext _localctx = new UriContext(_ctx, getState()); - enterRule(_localctx, 322, RULE_uri); + enterRule(_localctx, 350, RULE_uri); try { enterOuterAlt(_localctx, 1); { - setState(1762); + setState(1960); stringLiteral(); } } @@ -12100,24 +13224,24 @@ public T accept(ParseTreeVisitor visitor) { public final ConfigurableUriContext configurableUri() throws RecognitionException { ConfigurableUriContext _localctx = new ConfigurableUriContext(_ctx, getState()); - enterRule(_localctx, 324, RULE_configurableUri); + enterRule(_localctx, 352, RULE_configurableUri); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1764); + setState(1962); uri(); - setState(1768); + setState(1966); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__88) { + while (_la==T__95) { { { - setState(1765); + setState(1963); configurationUri(); } } - setState(1770); + setState(1968); _errHandler.sync(this); _la = _input.LA(1); } @@ -12162,19 +13286,19 @@ public T accept(ParseTreeVisitor visitor) { public final ConfigurationUriContext configurationUri() throws RecognitionException { ConfigurationUriContext _localctx = new ConfigurationUriContext(_ctx, getState()); - enterRule(_localctx, 326, RULE_configurationUri); + enterRule(_localctx, 354, RULE_configurationUri); try { enterOuterAlt(_localctx, 1); { - setState(1771); - match(T__88); - setState(1772); + setState(1969); + match(T__95); + setState(1970); match(T__13); - setState(1773); + setState(1971); uriTest(); - setState(1774); + setState(1972); match(T__14); - setState(1775); + setState(1973); uri(); } } @@ -12217,21 +13341,21 @@ public T accept(ParseTreeVisitor visitor) { public final UriTestContext uriTest() throws RecognitionException { UriTestContext _localctx = new UriTestContext(_ctx, getState()); - enterRule(_localctx, 328, RULE_uriTest); + enterRule(_localctx, 356, RULE_uriTest); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1777); + setState(1975); dottedIdentifierList(); - setState(1780); + setState(1978); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__30) { + if (_la==T__34) { { - setState(1778); - match(T__30); - setState(1779); + setState(1976); + match(T__34); + setState(1977); stringLiteral(); } } @@ -12256,6 +13380,9 @@ public TypeNameContext typeName() { public TypeArgumentsContext typeArguments() { return getRuleContext(TypeArgumentsContext.class,0); } + public RecordTypeContext recordType() { + return getRuleContext(RecordTypeContext.class,0); + } public DtypeContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -12277,23 +13404,59 @@ public T accept(ParseTreeVisitor visitor) { public final DtypeContext dtype() throws RecognitionException { DtypeContext _localctx = new DtypeContext(_ctx, getState()); - enterRule(_localctx, 330, RULE_dtype); + enterRule(_localctx, 358, RULE_dtype); int _la; try { - enterOuterAlt(_localctx, 1); - { - setState(1782); - typeName(); - setState(1784); + setState(1991); _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__38) { + switch (_input.LA(1)) { + case T__5: + case IDENTIFIER: + enterOuterAlt(_localctx, 1); { - setState(1783); - typeArguments(); + setState(1980); + typeName(); + setState(1982); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__42) { + { + setState(1981); + typeArguments(); + } } - } + setState(1985); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,236,_ctx) ) { + case 1: + { + setState(1984); + match(T__69); + } + break; + } + } + break; + case T__13: + enterOuterAlt(_localctx, 2); + { + setState(1987); + recordType(); + setState(1989); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,237,_ctx) ) { + case 1: + { + setState(1988); + match(T__69); + } + break; + } + } + break; + default: + throw new NoViableAltException(this); } } catch (RecognitionException re) { @@ -12332,22 +13495,22 @@ public T accept(ParseTreeVisitor visitor) { public final TypeNameContext typeName() throws RecognitionException { TypeNameContext _localctx = new TypeNameContext(_ctx, getState()); - enterRule(_localctx, 332, RULE_typeName); + enterRule(_localctx, 360, RULE_typeName); try { - setState(1788); + setState(1995); _errHandler.sync(this); switch (_input.LA(1)) { case IDENTIFIER: enterOuterAlt(_localctx, 1); { - setState(1786); + setState(1993); qualified(); } break; case T__5: enterOuterAlt(_localctx, 2); { - setState(1787); + setState(1994); match(T__5); } break; @@ -12391,16 +13554,16 @@ public T accept(ParseTreeVisitor visitor) { public final TypeArgumentsContext typeArguments() throws RecognitionException { TypeArgumentsContext _localctx = new TypeArgumentsContext(_ctx, getState()); - enterRule(_localctx, 334, RULE_typeArguments); + enterRule(_localctx, 362, RULE_typeArguments); try { enterOuterAlt(_localctx, 1); { - setState(1790); - match(T__38); - setState(1791); + setState(1997); + match(T__42); + setState(1998); typeList(); - setState(1792); - match(T__39); + setState(1999); + match(T__43); } } catch (RecognitionException re) { @@ -12442,26 +13605,26 @@ public T accept(ParseTreeVisitor visitor) { public final TypeListContext typeList() throws RecognitionException { TypeListContext _localctx = new TypeListContext(_ctx, getState()); - enterRule(_localctx, 336, RULE_typeList); + enterRule(_localctx, 364, RULE_typeList); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1794); + setState(2001); dtype(); - setState(1799); + setState(2006); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__0) { { { - setState(1795); + setState(2002); match(T__0); - setState(1796); + setState(2003); dtype(); } } - setState(1801); + setState(2008); _errHandler.sync(this); _la = _input.LA(1); } @@ -12506,15 +13669,15 @@ public T accept(ParseTreeVisitor visitor) { public final TypeAliasContext typeAlias() throws RecognitionException { TypeAliasContext _localctx = new TypeAliasContext(_ctx, getState()); - enterRule(_localctx, 338, RULE_typeAlias); + enterRule(_localctx, 366, RULE_typeAlias); try { enterOuterAlt(_localctx, 1); { - setState(1802); + setState(2009); metadata(); - setState(1803); - match(T__116); - setState(1804); + setState(2010); + match(T__122); + setState(2011); typeAliasBody(); } } @@ -12554,11 +13717,11 @@ public T accept(ParseTreeVisitor visitor) { public final TypeAliasBodyContext typeAliasBody() throws RecognitionException { TypeAliasBodyContext _localctx = new TypeAliasBodyContext(_ctx, getState()); - enterRule(_localctx, 340, RULE_typeAliasBody); + enterRule(_localctx, 368, RULE_typeAliasBody); try { enterOuterAlt(_localctx, 1); { - setState(1806); + setState(2013); functionTypeAlias(); } } @@ -12604,26 +13767,26 @@ public T accept(ParseTreeVisitor visitor) { public final FunctionTypeAliasContext functionTypeAlias() throws RecognitionException { FunctionTypeAliasContext _localctx = new FunctionTypeAliasContext(_ctx, getState()); - enterRule(_localctx, 342, RULE_functionTypeAlias); + enterRule(_localctx, 370, RULE_functionTypeAlias); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1808); + setState(2015); functionPrefix(); - setState(1810); + setState(2017); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__38) { + if (_la==T__42) { { - setState(1809); + setState(2016); typeParameters(); } } - setState(1812); + setState(2019); formalParameterList(); - setState(1813); + setState(2020); match(T__8); } } @@ -12666,21 +13829,21 @@ public T accept(ParseTreeVisitor visitor) { public final FunctionPrefixContext functionPrefix() throws RecognitionException { FunctionPrefixContext _localctx = new FunctionPrefixContext(_ctx, getState()); - enterRule(_localctx, 344, RULE_functionPrefix); + enterRule(_localctx, 372, RULE_functionPrefix); try { enterOuterAlt(_localctx, 1); { - setState(1816); + setState(2023); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,214,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,242,_ctx) ) { case 1: { - setState(1815); + setState(2022); returnType(); } break; } - setState(1818); + setState(2025); identifier(); } } @@ -12696,7 +13859,7 @@ public final FunctionPrefixContext functionPrefix() throws RecognitionException } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u0080\u071f\4\2\t"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u0086\u07ee\4\2\t"+ "\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+ "\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+ "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+ @@ -12720,721 +13883,817 @@ public final FunctionPrefixContext functionPrefix() throws RecognitionException "\t\u00a0\4\u00a1\t\u00a1\4\u00a2\t\u00a2\4\u00a3\t\u00a3\4\u00a4\t\u00a4"+ "\4\u00a5\t\u00a5\4\u00a6\t\u00a6\4\u00a7\t\u00a7\4\u00a8\t\u00a8\4\u00a9"+ "\t\u00a9\4\u00aa\t\u00aa\4\u00ab\t\u00ab\4\u00ac\t\u00ac\4\u00ad\t\u00ad"+ - "\4\u00ae\t\u00ae\3\2\3\2\5\2\u015f\n\2\3\3\3\3\3\3\7\3\u0164\n\3\f\3\16"+ - "\3\u0167\13\3\3\4\3\4\3\4\3\4\3\5\3\5\5\5\u016f\n\5\3\5\3\5\5\5\u0173"+ - "\n\5\3\5\5\5\u0176\n\5\3\6\3\6\5\6\u017a\n\6\3\7\3\7\3\7\5\7\u017f\n\7"+ - "\3\7\3\7\7\7\u0183\n\7\f\7\16\7\u0186\13\7\3\b\3\b\3\b\5\b\u018b\n\b\3"+ - "\t\3\t\3\t\7\t\u0190\n\t\f\t\16\t\u0193\13\t\3\n\3\n\5\n\u0197\n\n\3\n"+ - "\3\n\3\n\3\13\5\13\u019d\n\13\3\13\3\13\3\f\3\f\5\f\u01a3\n\f\3\r\5\r"+ - "\u01a6\n\r\3\r\3\r\3\r\3\r\3\r\5\r\u01ad\n\r\3\r\5\r\u01b0\n\r\3\16\3"+ - "\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\5\17\u01c0"+ - "\n\17\3\17\3\17\3\17\3\17\3\17\3\17\5\17\u01c8\n\17\3\20\3\20\3\20\7\20"+ - "\u01cd\n\20\f\20\16\20\u01d0\13\20\3\21\3\21\5\21\u01d4\n\21\3\22\3\22"+ - "\3\22\3\22\7\22\u01da\n\22\f\22\16\22\u01dd\13\22\3\22\5\22\u01e0\n\22"+ - "\3\22\3\22\3\23\3\23\3\23\3\23\7\23\u01e8\n\23\f\23\16\23\u01eb\13\23"+ - "\3\23\5\23\u01ee\n\23\3\23\3\23\3\24\3\24\3\24\5\24\u01f5\n\24\3\25\3"+ - "\25\5\25\u01f9\n\25\3\25\5\25\u01fc\n\25\3\25\3\25\3\25\3\26\3\26\3\26"+ - "\5\26\u0204\n\26\3\26\3\26\5\26\u0208\n\26\3\27\3\27\5\27\u020c\n\27\3"+ - "\27\3\27\3\27\3\27\5\27\u0212\n\27\3\30\3\30\3\30\5\30\u0217\n\30\3\31"+ - "\3\31\3\31\5\31\u021c\n\31\3\31\3\31\3\31\5\31\u0221\n\31\5\31\u0223\n"+ - "\31\3\32\3\32\5\32\u0227\n\32\3\32\3\32\3\32\5\32\u022c\n\32\3\32\5\32"+ - "\u022f\n\32\3\32\5\32\u0232\n\32\3\32\5\32\u0235\n\32\3\32\3\32\3\32\3"+ - "\32\7\32\u023b\n\32\f\32\16\32\u023e\13\32\3\32\3\32\3\32\3\32\5\32\u0244"+ - "\n\32\3\32\3\32\3\32\5\32\u0249\n\32\3\33\3\33\3\33\3\34\3\34\3\34\3\34"+ - "\3\34\3\34\5\34\u0254\n\34\3\35\3\35\5\35\u0258\n\35\3\35\3\35\5\35\u025c"+ - "\n\35\3\35\3\35\5\35\u0260\n\35\3\35\3\35\5\35\u0264\n\35\3\35\3\35\5"+ - "\35\u0268\n\35\3\36\3\36\3\36\5\36\u026d\n\36\3\36\3\36\3\36\5\36\u0272"+ - "\n\36\3\36\3\36\3\36\3\36\3\36\3\36\5\36\u027a\n\36\5\36\u027c\n\36\3"+ - "\36\3\36\3\36\5\36\u0281\n\36\5\36\u0283\n\36\3\36\3\36\5\36\u0287\n\36"+ - "\3\36\3\36\3\36\5\36\u028c\n\36\5\36\u028e\n\36\3\36\3\36\3\36\3\36\5"+ - "\36\u0294\n\36\3\36\3\36\3\36\5\36\u0299\n\36\3\36\3\36\5\36\u029d\n\36"+ - "\3\36\3\36\5\36\u02a1\n\36\3\36\5\36\u02a4\n\36\3\37\3\37\3\37\7\37\u02a9"+ - "\n\37\f\37\16\37\u02ac\13\37\3 \3 \3 \3 \3!\5!\u02b3\n!\3!\3!\3!\3!\3"+ - "\"\3\"\3\"\3\"\5\"\u02bd\n\"\3#\3#\3#\3#\3#\3#\5#\u02c5\n#\3$\5$\u02c8"+ - "\n$\3$\3$\3$\3%\5%\u02ce\n%\3%\3%\3%\3%\3&\3&\3&\5&\u02d7\n&\3&\3&\3\'"+ - "\3\'\3\'\3\'\5\'\u02df\n\'\3\'\3\'\3(\3(\3(\3(\7(\u02e7\n(\f(\16(\u02ea"+ - "\13(\3)\3)\3)\3)\3)\3)\3)\3)\3)\5)\u02f5\n)\3*\3*\5*\u02f9\n*\3*\3*\3"+ - "*\3*\7*\u02ff\n*\f*\16*\u0302\13*\3+\3+\3+\3+\5+\u0308\n+\3+\3+\3,\5,"+ - "\u030d\n,\3,\3,\3,\3,\5,\u0313\n,\3,\3,\3,\3,\3,\5,\u031a\n,\3-\3-\3-"+ - "\3-\3.\3.\3.\3/\3/\3/\3\60\3\60\5\60\u0328\n\60\3\60\3\60\3\60\3\60\3"+ - "\61\3\61\3\61\5\61\u0331\n\61\3\62\3\62\3\62\3\62\3\62\3\62\3\62\7\62"+ - "\u033a\n\62\f\62\16\62\u033d\13\62\3\62\5\62\u0340\n\62\3\62\3\62\3\63"+ - "\3\63\3\63\3\64\3\64\3\64\3\64\5\64\u034b\n\64\3\65\3\65\3\65\3\65\7\65"+ - "\u0351\n\65\f\65\16\65\u0354\13\65\3\65\3\65\3\66\3\66\3\66\3\66\5\66"+ - "\u035c\n\66\3\66\5\66\u035f\n\66\7\66\u0361\n\66\f\66\16\66\u0364\13\66"+ - "\3\67\3\67\3\67\3\67\3\67\3\67\7\67\u036c\n\67\f\67\16\67\u036f\13\67"+ - "\3\67\5\67\u0372\n\67\38\38\38\38\38\38\58\u037a\n8\39\39\39\79\u037f"+ - "\n9\f9\169\u0382\139\3:\3:\3:\3:\3:\3:\3:\3:\3:\3:\3:\3:\5:\u0390\n:\3"+ - ";\3;\3;\3;\3;\3;\3;\5;\u0399\n;\3<\3<\3=\3=\3>\3>\3?\6?\u03a2\n?\r?\16"+ - "?\u03a3\3@\3@\3@\3@\3@\3@\5@\u03ac\n@\3A\3A\3A\3A\3A\7A\u03b3\nA\fA\16"+ - "A\u03b6\13A\5A\u03b8\nA\3B\5B\u03bb\nB\3B\5B\u03be\nB\3B\3B\3B\5B\u03c3"+ - "\nB\5B\u03c5\nB\3B\3B\3C\5C\u03ca\nC\3C\5C\u03cd\nC\3C\3C\3C\3C\7C\u03d3"+ - "\nC\fC\16C\u03d6\13C\3C\5C\u03d9\nC\5C\u03db\nC\3C\3C\3D\3D\3D\3D\3E\3"+ - "E\3E\3F\3F\3F\3G\3G\3G\3H\3H\3I\3I\3I\3I\5I\u03f2\nI\3I\3I\3J\3J\3J\3"+ - "J\5J\u03fa\nJ\3J\3J\3K\3K\3K\5K\u0401\nK\5K\u0403\nK\3K\3K\3L\3L\3L\7"+ - "L\u040a\nL\fL\16L\u040d\13L\3L\3L\3L\7L\u0412\nL\fL\16L\u0415\13L\5L\u0417"+ - "\nL\3M\3M\3M\3N\3N\3N\7N\u041f\nN\fN\16N\u0422\13N\3N\3N\7N\u0426\nN\f"+ - "N\16N\u0429\13N\7N\u042b\nN\fN\16N\u042e\13N\3N\3N\3N\5N\u0433\nN\3O\3"+ - "O\3O\3O\3O\5O\u043a\nO\3P\5P\u043d\nP\3P\3P\3Q\3Q\5Q\u0443\nQ\3R\3R\3"+ - "S\3S\3S\3S\3S\3S\5S\u044d\nS\3T\3T\3T\7T\u0452\nT\fT\16T\u0455\13T\3U"+ - "\3U\3U\7U\u045a\nU\fU\16U\u045d\13U\3V\3V\3V\7V\u0462\nV\fV\16V\u0465"+ - "\13V\3W\3W\3W\3W\5W\u046b\nW\3W\3W\3W\3W\5W\u0471\nW\3X\3X\3Y\3Y\3Y\3"+ - "Y\3Y\3Y\5Y\u047b\nY\3Y\3Y\3Y\3Y\5Y\u0481\nY\3Z\3Z\3[\3[\3[\7[\u0488\n"+ - "[\f[\16[\u048b\13[\3[\3[\3[\6[\u0490\n[\r[\16[\u0491\5[\u0494\n[\3\\\3"+ - "\\\3\\\7\\\u0499\n\\\f\\\16\\\u049c\13\\\3\\\3\\\3\\\6\\\u04a1\n\\\r\\"+ - "\16\\\u04a2\5\\\u04a5\n\\\3]\3]\3]\7]\u04aa\n]\f]\16]\u04ad\13]\3]\3]"+ - "\3]\6]\u04b2\n]\r]\16]\u04b3\5]\u04b6\n]\3^\3^\3_\3_\3_\3_\7_\u04be\n"+ - "_\f_\16_\u04c1\13_\3_\3_\3_\3_\6_\u04c7\n_\r_\16_\u04c8\5_\u04cb\n_\3"+ - "`\3`\3a\3a\3a\3a\7a\u04d3\na\fa\16a\u04d6\13a\3a\3a\3a\3a\6a\u04dc\na"+ - "\ra\16a\u04dd\5a\u04e0\na\3b\3b\3c\3c\3c\3c\7c\u04e8\nc\fc\16c\u04eb\13"+ - "c\3c\3c\3c\3c\6c\u04f1\nc\rc\16c\u04f2\5c\u04f5\nc\3d\3d\3e\3e\3e\3e\3"+ - "e\3e\3e\5e\u0500\ne\3e\3e\3e\3e\3e\5e\u0507\ne\3f\3f\3f\5f\u050c\nf\3"+ - "g\3g\3h\3h\3i\3i\3j\3j\3j\3k\3k\3k\3k\3k\7k\u051c\nk\fk\16k\u051f\13k"+ - "\5k\u0521\nk\3l\3l\3m\3m\5m\u0527\nm\3n\3n\3o\3o\7o\u052d\no\fo\16o\u0530"+ - "\13o\3o\5o\u0533\no\3o\3o\3o\3o\5o\u0539\no\3p\3p\3p\3p\3p\3p\5p\u0541"+ - "\np\3q\3q\3q\5q\u0546\nq\3r\3r\3s\3s\3s\5s\u054d\ns\3t\3t\3t\3u\3u\5u"+ - "\u0554\nu\3v\3v\3v\3w\3w\3x\7x\u055c\nx\fx\16x\u055f\13x\3y\7y\u0562\n"+ - "y\fy\16y\u0565\13y\3y\3y\3z\3z\3z\3z\3z\3z\3z\3z\3z\3z\3z\3z\3z\3z\3z"+ - "\3z\3z\5z\u057a\nz\3{\5{\u057d\n{\3{\3{\3|\3|\3|\3}\3}\3}\3~\3~\3~\3~"+ - "\3~\3~\3~\5~\u058e\n~\3\177\5\177\u0591\n\177\3\177\3\177\3\177\3\177"+ - "\3\177\3\177\3\u0080\3\u0080\5\u0080\u059b\n\u0080\3\u0080\3\u0080\5\u0080"+ - "\u059f\n\u0080\3\u0080\3\u0080\3\u0080\3\u0080\3\u0080\3\u0080\3\u0080"+ - "\3\u0080\5\u0080\u05a9\n\u0080\3\u0081\3\u0081\5\u0081\u05ad\n\u0081\3"+ - "\u0081\5\u0081\u05b0\n\u0081\3\u0082\3\u0082\3\u0082\3\u0082\3\u0082\3"+ - "\u0082\3\u0083\3\u0083\3\u0083\3\u0083\3\u0083\3\u0083\3\u0083\3\u0083"+ - "\3\u0084\3\u0084\3\u0084\3\u0084\3\u0084\3\u0084\7\u0084\u05c6\n\u0084"+ - "\f\u0084\16\u0084\u05c9\13\u0084\3\u0084\5\u0084\u05cc\n\u0084\3\u0084"+ - "\3\u0084\3\u0085\7\u0085\u05d1\n\u0085\f\u0085\16\u0085\u05d4\13\u0085"+ - "\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085\3\u0086\7\u0086\u05dc\n\u0086"+ - "\f\u0086\16\u0086\u05df\13\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0087"+ - "\3\u0087\3\u0087\3\u0088\3\u0088\3\u0088\6\u0088\u05eb\n\u0088\r\u0088"+ - "\16\u0088\u05ec\3\u0088\5\u0088\u05f0\n\u0088\3\u0088\5\u0088\u05f3\n"+ - "\u0088\3\u0089\3\u0089\3\u0089\3\u0089\3\u0089\3\u0089\5\u0089\u05fb\n"+ - "\u0089\3\u0089\3\u0089\5\u0089\u05ff\n\u0089\3\u008a\3\u008a\3\u008a\3"+ - "\u008a\3\u008a\5\u008a\u0606\n\u008a\3\u008a\3\u008a\3\u008b\3\u008b\3"+ - "\u008b\3\u008c\3\u008c\5\u008c\u060f\n\u008c\3\u008c\3\u008c\3\u008d\3"+ - "\u008d\3\u008d\3\u008e\3\u008e\5\u008e\u0618\n\u008e\3\u008e\3\u008e\3"+ - "\u008f\3\u008f\5\u008f\u061e\n\u008f\3\u008f\3\u008f\3\u0090\3\u0090\3"+ - "\u0090\3\u0090\3\u0091\3\u0091\3\u0091\3\u0091\3\u0092\3\u0092\3\u0092"+ - "\3\u0093\3\u0093\3\u0093\3\u0093\3\u0093\5\u0093\u0632\n\u0093\3\u0093"+ - "\5\u0093\u0635\n\u0093\3\u0093\3\u0093\3\u0094\3\u0094\3\u0094\3\u0094"+ - "\5\u0094\u063d\n\u0094\3\u0094\3\u0094\3\u0094\3\u0094\5\u0094\u0643\n"+ - "\u0094\3\u0094\3\u0094\3\u0094\3\u0094\5\u0094\u0649\n\u0094\3\u0094\3"+ - "\u0094\3\u0094\3\u0094\3\u0094\3\u0094\3\u0094\5\u0094\u0652\n\u0094\3"+ - "\u0094\3\u0094\3\u0094\3\u0094\3\u0094\5\u0094\u0659\n\u0094\3\u0094\3"+ - "\u0094\3\u0094\3\u0094\3\u0094\3\u0094\3\u0094\5\u0094\u0662\n\u0094\3"+ - "\u0094\3\u0094\3\u0094\3\u0094\3\u0094\3\u0094\5\u0094\u066a\n\u0094\3"+ - "\u0095\3\u0095\3\u0096\5\u0096\u066f\n\u0096\3\u0096\5\u0096\u0672\n\u0096"+ - "\3\u0096\7\u0096\u0675\n\u0096\f\u0096\16\u0096\u0678\13\u0096\3\u0096"+ - "\7\u0096\u067b\n\u0096\f\u0096\16\u0096\u067e\13\u0096\3\u0096\7\u0096"+ - "\u0681\n\u0096\f\u0096\16\u0096\u0684\13\u0096\3\u0097\3\u0097\7\u0097"+ - "\u0688\n\u0097\f\u0097\16\u0097\u068b\13\u0097\3\u0097\3\u0097\3\u0098"+ - "\3\u0098\3\u0098\3\u0098\3\u0098\3\u0099\3\u0099\5\u0099\u0696\n\u0099"+ - "\3\u009a\3\u009a\3\u009a\7\u009a\u069b\n\u009a\f\u009a\16\u009a\u069e"+ - "\13\u009a\3\u009b\3\u009b\3\u009b\3\u009c\3\u009c\3\u009c\3\u009c\5\u009c"+ - "\u06a7\n\u009c\3\u009c\7\u009c\u06aa\n\u009c\f\u009c\16\u009c\u06ad\13"+ - "\u009c\3\u009c\3\u009c\3\u009d\3\u009d\3\u009d\3\u009d\5\u009d\u06b5\n"+ - "\u009d\3\u009e\3\u009e\3\u009e\7\u009e\u06ba\n\u009e\f\u009e\16\u009e"+ - "\u06bd\13\u009e\3\u009f\3\u009f\3\u009f\3\u009f\7\u009f\u06c3\n\u009f"+ - "\f\u009f\16\u009f\u06c6\13\u009f\3\u009f\3\u009f\3\u00a0\3\u00a0\3\u00a0"+ - "\3\u00a0\3\u00a0\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\7\u00a1"+ - "\u06d5\n\u00a1\f\u00a1\16\u00a1\u06d8\13\u00a1\3\u00a1\3\u00a1\3\u00a2"+ - "\3\u00a2\7\u00a2\u06de\n\u00a2\f\u00a2\16\u00a2\u06e1\13\u00a2\3\u00a2"+ - "\3\u00a2\3\u00a3\3\u00a3\3\u00a4\3\u00a4\7\u00a4\u06e9\n\u00a4\f\u00a4"+ - "\16\u00a4\u06ec\13\u00a4\3\u00a5\3\u00a5\3\u00a5\3\u00a5\3\u00a5\3\u00a5"+ - "\3\u00a6\3\u00a6\3\u00a6\5\u00a6\u06f7\n\u00a6\3\u00a7\3\u00a7\5\u00a7"+ - "\u06fb\n\u00a7\3\u00a8\3\u00a8\5\u00a8\u06ff\n\u00a8\3\u00a9\3\u00a9\3"+ - "\u00a9\3\u00a9\3\u00aa\3\u00aa\3\u00aa\7\u00aa\u0708\n\u00aa\f\u00aa\16"+ - "\u00aa\u070b\13\u00aa\3\u00ab\3\u00ab\3\u00ab\3\u00ab\3\u00ac\3\u00ac"+ - "\3\u00ad\3\u00ad\5\u00ad\u0715\n\u00ad\3\u00ad\3\u00ad\3\u00ad\3\u00ae"+ - "\5\u00ae\u071b\n\u00ae\3\u00ae\3\u00ae\3\u00ae\2\2\u00af\2\4\6\b\n\f\16"+ - "\20\22\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNPRTVXZ\\^`bd"+ - "fhjlnprtvxz|~\u0080\u0082\u0084\u0086\u0088\u008a\u008c\u008e\u0090\u0092"+ - "\u0094\u0096\u0098\u009a\u009c\u009e\u00a0\u00a2\u00a4\u00a6\u00a8\u00aa"+ - "\u00ac\u00ae\u00b0\u00b2\u00b4\u00b6\u00b8\u00ba\u00bc\u00be\u00c0\u00c2"+ - "\u00c4\u00c6\u00c8\u00ca\u00cc\u00ce\u00d0\u00d2\u00d4\u00d6\u00d8\u00da"+ - "\u00dc\u00de\u00e0\u00e2\u00e4\u00e6\u00e8\u00ea\u00ec\u00ee\u00f0\u00f2"+ - "\u00f4\u00f6\u00f8\u00fa\u00fc\u00fe\u0100\u0102\u0104\u0106\u0108\u010a"+ - "\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122"+ - "\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0138\u013a"+ - "\u013c\u013e\u0140\u0142\u0144\u0146\u0148\u014a\u014c\u014e\u0150\u0152"+ - "\u0154\u0156\u0158\u015a\2\22\4\2\t\t\f\r\3\2\4\5\4\2\24\24\33\33\3\2"+ - "yz\3\2-.\3\2{|\3\2\65@\4\2!!EE\4\2)*FG\3\2HJ\3\2KM\3\2NO\3\2PS\3\2VW\3"+ - "\2\"#\3\2}}\2\u078f\2\u015e\3\2\2\2\4\u0160\3\2\2\2\6\u0168\3\2\2\2\b"+ - "\u0175\3\2\2\2\n\u0179\3\2\2\2\f\u017b\3\2\2\2\16\u0187\3\2\2\2\20\u018c"+ - "\3\2\2\2\22\u0194\3\2\2\2\24\u019c\3\2\2\2\26\u01a2\3\2\2\2\30\u01af\3"+ - "\2\2\2\32\u01b1\3\2\2\2\34\u01c7\3\2\2\2\36\u01c9\3\2\2\2 \u01d3\3\2\2"+ - "\2\"\u01d5\3\2\2\2$\u01e3\3\2\2\2&\u01f4\3\2\2\2(\u01f6\3\2\2\2*\u0207"+ - "\3\2\2\2,\u0209\3\2\2\2.\u0213\3\2\2\2\60\u0222\3\2\2\2\62\u0248\3\2\2"+ - "\2\64\u024a\3\2\2\2\66\u0253\3\2\2\28\u0267\3\2\2\2:\u02a3\3\2\2\2<\u02a5"+ - "\3\2\2\2>\u02ad\3\2\2\2@\u02b2\3\2\2\2B\u02bc\3\2\2\2D\u02c4\3\2\2\2F"+ - "\u02c7\3\2\2\2H\u02cd\3\2\2\2J\u02d3\3\2\2\2L\u02da\3\2\2\2N\u02e2\3\2"+ - "\2\2P\u02f4\3\2\2\2R\u02f8\3\2\2\2T\u0303\3\2\2\2V\u030c\3\2\2\2X\u031b"+ - "\3\2\2\2Z\u031f\3\2\2\2\\\u0322\3\2\2\2^\u0325\3\2\2\2`\u032d\3\2\2\2"+ - "b\u0332\3\2\2\2d\u0343\3\2\2\2f\u0346\3\2\2\2h\u034c\3\2\2\2j\u0362\3"+ - "\2\2\2l\u0371\3\2\2\2n\u0379\3\2\2\2p\u037b\3\2\2\2r\u038f\3\2\2\2t\u0398"+ - "\3\2\2\2v\u039a\3\2\2\2x\u039c\3\2\2\2z\u039e\3\2\2\2|\u03a1\3\2\2\2~"+ - "\u03ab\3\2\2\2\u0080\u03ad\3\2\2\2\u0082\u03ba\3\2\2\2\u0084\u03c9\3\2"+ - "\2\2\u0086\u03de\3\2\2\2\u0088\u03e2\3\2\2\2\u008a\u03e5\3\2\2\2\u008c"+ - "\u03e8\3\2\2\2\u008e\u03eb\3\2\2\2\u0090\u03ed\3\2\2\2\u0092\u03f5\3\2"+ - "\2\2\u0094\u03fd\3\2\2\2\u0096\u0416\3\2\2\2\u0098\u0418\3\2\2\2\u009a"+ - "\u041b\3\2\2\2\u009c\u0439\3\2\2\2\u009e\u043c\3\2\2\2\u00a0\u0442\3\2"+ - "\2\2\u00a2\u0444\3\2\2\2\u00a4\u0446\3\2\2\2\u00a6\u044e\3\2\2\2\u00a8"+ - "\u0456\3\2\2\2\u00aa\u045e\3\2\2\2\u00ac\u0470\3\2\2\2\u00ae\u0472\3\2"+ - "\2\2\u00b0\u0480\3\2\2\2\u00b2\u0482\3\2\2\2\u00b4\u0493\3\2\2\2\u00b6"+ - "\u04a4\3\2\2\2\u00b8\u04b5\3\2\2\2\u00ba\u04b7\3\2\2\2\u00bc\u04ca\3\2"+ - "\2\2\u00be\u04cc\3\2\2\2\u00c0\u04df\3\2\2\2\u00c2\u04e1\3\2\2\2\u00c4"+ - "\u04f4\3\2\2\2\u00c6\u04f6\3\2\2\2\u00c8\u0506\3\2\2\2\u00ca\u050b\3\2"+ - "\2\2\u00cc\u050d\3\2\2\2\u00ce\u050f\3\2\2\2\u00d0\u0511\3\2\2\2\u00d2"+ - "\u0513\3\2\2\2\u00d4\u0520\3\2\2\2\u00d6\u0522\3\2\2\2\u00d8\u0526\3\2"+ - "\2\2\u00da\u0528\3\2\2\2\u00dc\u0538\3\2\2\2\u00de\u0540\3\2\2\2\u00e0"+ - "\u0545\3\2\2\2\u00e2\u0547\3\2\2\2\u00e4\u0549\3\2\2\2\u00e6\u054e\3\2"+ - "\2\2\u00e8\u0551\3\2\2\2\u00ea\u0555\3\2\2\2\u00ec\u0558\3\2\2\2\u00ee"+ - "\u055d\3\2\2\2\u00f0\u0563\3\2\2\2\u00f2\u0579\3\2\2\2\u00f4\u057c\3\2"+ - "\2\2\u00f6\u0580\3\2\2\2\u00f8\u0583\3\2\2\2\u00fa\u0586\3\2\2\2\u00fc"+ - "\u0590\3\2\2\2\u00fe\u05a8\3\2\2\2\u0100\u05af\3\2\2\2\u0102\u05b1\3\2"+ - "\2\2\u0104\u05b7\3\2\2\2\u0106\u05bf\3\2\2\2\u0108\u05d2\3\2\2\2\u010a"+ - "\u05dd\3\2\2\2\u010c\u05e4\3\2\2\2\u010e\u05e7\3\2\2\2\u0110\u05fe\3\2"+ - "\2\2\u0112\u0600\3\2\2\2\u0114\u0609\3\2\2\2\u0116\u060c\3\2\2\2\u0118"+ - "\u0612\3\2\2\2\u011a\u0615\3\2\2\2\u011c\u061b\3\2\2\2\u011e\u0621\3\2"+ - "\2\2\u0120\u0625\3\2\2\2\u0122\u0629\3\2\2\2\u0124\u062c\3\2\2\2\u0126"+ - "\u0669\3\2\2\2\u0128\u066b\3\2\2\2\u012a\u066e\3\2\2\2\u012c\u0685\3\2"+ - "\2\2\u012e\u068e\3\2\2\2\u0130\u0695\3\2\2\2\u0132\u0697\3\2\2\2\u0134"+ - "\u069f\3\2\2\2\u0136\u06a2\3\2\2\2\u0138\u06b4\3\2\2\2\u013a\u06b6\3\2"+ - "\2\2\u013c\u06be\3\2\2\2\u013e\u06c9\3\2\2\2\u0140\u06ce\3\2\2\2\u0142"+ - "\u06db\3\2\2\2\u0144\u06e4\3\2\2\2\u0146\u06e6\3\2\2\2\u0148\u06ed\3\2"+ - "\2\2\u014a\u06f3\3\2\2\2\u014c\u06f8\3\2\2\2\u014e\u06fe\3\2\2\2\u0150"+ - "\u0700\3\2\2\2\u0152\u0704\3\2\2\2\u0154\u070c\3\2\2\2\u0156\u0710\3\2"+ - "\2\2\u0158\u0712\3\2\2\2\u015a\u071a\3\2\2\2\u015c\u015f\5\u012a\u0096"+ - "\2\u015d\u015f\5\u0142\u00a2\2\u015e\u015c\3\2\2\2\u015e\u015d\3\2\2\2"+ - "\u015f\3\3\2\2\2\u0160\u0165\5\6\4\2\u0161\u0162\7\3\2\2\u0162\u0164\5"+ - "\u00e2r\2\u0163\u0161\3\2\2\2\u0164\u0167\3\2\2\2\u0165\u0163\3\2\2\2"+ - "\u0165\u0166\3\2\2\2\u0166\5\3\2\2\2\u0167\u0165\3\2\2\2\u0168\u0169\5"+ - "j\66\2\u0169\u016a\5\b\5\2\u016a\u016b\5\u00e2r\2\u016b\7\3\2\2\2\u016c"+ - "\u016e\7\4\2\2\u016d\u016f\5\u014c\u00a7\2\u016e\u016d\3\2\2\2\u016e\u016f"+ - "\3\2\2\2\u016f\u0176\3\2\2\2\u0170\u0172\7\5\2\2\u0171\u0173\5\u014c\u00a7"+ - "\2\u0172\u0171\3\2\2\2\u0172\u0173\3\2\2\2\u0173\u0176\3\2\2\2\u0174\u0176"+ - "\5\n\6\2\u0175\u016c\3\2\2\2\u0175\u0170\3\2\2\2\u0175\u0174\3\2\2\2\u0176"+ - "\t\3\2\2\2\u0177\u017a\7\6\2\2\u0178\u017a\5\u014c\u00a7\2\u0179\u0177"+ - "\3\2\2\2\u0179\u0178\3\2\2\2\u017a\13\3\2\2\2\u017b\u017e\5\6\4\2\u017c"+ - "\u017d\7\7\2\2\u017d\u017f\5l\67\2\u017e\u017c\3\2\2\2\u017e\u017f\3\2"+ - "\2\2\u017f\u0184\3\2\2\2\u0180\u0181\7\3\2\2\u0181\u0183\5\16\b\2\u0182"+ - "\u0180\3\2\2\2\u0183\u0186\3\2\2\2\u0184\u0182\3\2\2\2\u0184\u0185\3\2"+ - "\2\2\u0185\r\3\2\2\2\u0186\u0184\3\2\2\2\u0187\u018a\5\u00e2r\2\u0188"+ - "\u0189\7\7\2\2\u0189\u018b\5l\67\2\u018a\u0188\3\2\2\2\u018a\u018b\3\2"+ - "\2\2\u018b\17\3\2\2\2\u018c\u0191\5\16\b\2\u018d\u018e\7\3\2\2\u018e\u0190"+ - "\5\16\b\2\u018f\u018d\3\2\2\2\u0190\u0193\3\2\2\2\u0191\u018f\3\2\2\2"+ - "\u0191\u0192\3\2\2\2\u0192\21\3\2\2\2\u0193\u0191\3\2\2\2\u0194\u0196"+ - "\5j\66\2\u0195\u0197\5\26\f\2\u0196\u0195\3\2\2\2\u0196\u0197\3\2\2\2"+ - "\u0197\u0198\3\2\2\2\u0198\u0199\5\u00e2r\2\u0199\u019a\5\24\13\2\u019a"+ - "\23\3\2\2\2\u019b\u019d\5h\65\2\u019c\u019b\3\2\2\2\u019c\u019d\3\2\2"+ - "\2\u019d\u019e\3\2\2\2\u019e\u019f\5\34\17\2\u019f\25\3\2\2\2\u01a0\u01a3"+ - "\7\b\2\2\u01a1\u01a3\5\u014c\u00a7\2\u01a2\u01a0\3\2\2\2\u01a2\u01a1\3"+ - "\2\2\2\u01a3\27\3\2\2\2\u01a4\u01a6\7\t\2\2\u01a5\u01a4\3\2\2\2\u01a5"+ - "\u01a6\3\2\2\2\u01a6\u01a7\3\2\2\2\u01a7\u01a8\7\n\2\2\u01a8\u01a9\5l"+ - "\67\2\u01a9\u01aa\7\13\2\2\u01aa\u01b0\3\2\2\2\u01ab\u01ad\t\2\2\2\u01ac"+ - "\u01ab\3\2\2\2\u01ac\u01ad\3\2\2\2\u01ad\u01ae\3\2\2\2\u01ae\u01b0\5\32"+ - "\16\2\u01af\u01a5\3\2\2\2\u01af\u01ac\3\2\2\2\u01b0\31\3\2\2\2\u01b1\u01b2"+ - "\7\16\2\2\u01b2\u01b3\5\u00eex\2\u01b3\u01b4\7\17\2\2\u01b4\33\3\2\2\2"+ - "\u01b5\u01b6\7\20\2\2\u01b6\u01c8\7\21\2\2\u01b7\u01b8\7\20\2\2\u01b8"+ - "\u01b9\5\36\20\2\u01b9\u01ba\7\21\2\2\u01ba\u01c8\3\2\2\2\u01bb\u01bc"+ - "\7\20\2\2\u01bc\u01bf\5\36\20\2\u01bd\u01be\7\3\2\2\u01be\u01c0\5 \21"+ - "\2\u01bf\u01bd\3\2\2\2\u01bf\u01c0\3\2\2\2\u01c0\u01c1\3\2\2\2\u01c1\u01c2"+ - "\7\21\2\2\u01c2\u01c8\3\2\2\2\u01c3\u01c4\7\20\2\2\u01c4\u01c5\5 \21\2"+ - "\u01c5\u01c6\7\21\2\2\u01c6\u01c8\3\2\2\2\u01c7\u01b5\3\2\2\2\u01c7\u01b7"+ - "\3\2\2\2\u01c7\u01bb\3\2\2\2\u01c7\u01c3\3\2\2\2\u01c8\35\3\2\2\2\u01c9"+ - "\u01ce\5&\24\2\u01ca\u01cb\7\3\2\2\u01cb\u01cd\5&\24\2\u01cc\u01ca\3\2"+ - "\2\2\u01cd\u01d0\3\2\2\2\u01ce\u01cc\3\2\2\2\u01ce\u01cf\3\2\2\2\u01cf"+ - "\37\3\2\2\2\u01d0\u01ce\3\2\2\2\u01d1\u01d4\5\"\22\2\u01d2\u01d4\5$\23"+ - "\2\u01d3\u01d1\3\2\2\2\u01d3\u01d2\3\2\2\2\u01d4!\3\2\2\2\u01d5\u01d6"+ - "\7\22\2\2\u01d6\u01db\5.\30\2\u01d7\u01d8\7\3\2\2\u01d8\u01da\5.\30\2"+ - "\u01d9\u01d7\3\2\2\2\u01da\u01dd\3\2\2\2\u01db\u01d9\3\2\2\2\u01db\u01dc"+ - "\3\2\2\2\u01dc\u01df\3\2\2\2\u01dd\u01db\3\2\2\2\u01de\u01e0\7\3\2\2\u01df"+ - "\u01de\3\2\2\2\u01df\u01e0\3\2\2\2\u01e0\u01e1\3\2\2\2\u01e1\u01e2\7\23"+ - "\2\2\u01e2#\3\2\2\2\u01e3\u01e4\7\16\2\2\u01e4\u01e9\5\60\31\2\u01e5\u01e6"+ - "\7\3\2\2\u01e6\u01e8\5\60\31\2\u01e7\u01e5\3\2\2\2\u01e8\u01eb\3\2\2\2"+ - "\u01e9\u01e7\3\2\2\2\u01e9\u01ea\3\2\2\2\u01ea\u01ed\3\2\2\2\u01eb\u01e9"+ - "\3\2\2\2\u01ec\u01ee\7\3\2\2\u01ed\u01ec\3\2\2\2\u01ed\u01ee\3\2\2\2\u01ee"+ - "\u01ef\3\2\2\2\u01ef\u01f0\7\17\2\2\u01f0%\3\2\2\2\u01f1\u01f5\5(\25\2"+ - "\u01f2\u01f5\5,\27\2\u01f3\u01f5\5*\26\2\u01f4\u01f1\3\2\2\2\u01f4\u01f2"+ - "\3\2\2\2\u01f4\u01f3\3\2\2\2\u01f5\'\3\2\2\2\u01f6\u01f8\5j\66\2\u01f7"+ - "\u01f9\7\24\2\2\u01f8\u01f7\3\2\2\2\u01f8\u01f9\3\2\2\2\u01f9\u01fb\3"+ - "\2\2\2\u01fa\u01fc\5\26\f\2\u01fb\u01fa\3\2\2\2\u01fb\u01fc\3\2\2\2\u01fc"+ - "\u01fd\3\2\2\2\u01fd\u01fe\5\u00e2r\2\u01fe\u01ff\5\24\13\2\u01ff)\3\2"+ - "\2\2\u0200\u0208\5\6\4\2\u0201\u0203\5j\66\2\u0202\u0204\7\24\2\2\u0203"+ - "\u0202\3\2\2\2\u0203\u0204\3\2\2\2\u0204\u0205\3\2\2\2\u0205\u0206\5\u00e2"+ - "r\2\u0206\u0208\3\2\2\2\u0207\u0200\3\2\2\2\u0207\u0201\3\2\2\2\u0208"+ - "+\3\2\2\2\u0209\u020b\5j\66\2\u020a\u020c\5\b\5\2\u020b\u020a\3\2\2\2"+ - "\u020b\u020c\3\2\2\2\u020c\u020d\3\2\2\2\u020d\u020e\7\25\2\2\u020e\u020f"+ - "\7\26\2\2\u020f\u0211\5\u00e2r\2\u0210\u0212\5\24\13\2\u0211\u0210\3\2"+ - "\2\2\u0211\u0212\3\2\2\2\u0212-\3\2\2\2\u0213\u0216\5&\24\2\u0214\u0215"+ - "\7\7\2\2\u0215\u0217\5l\67\2\u0216\u0214\3\2\2\2\u0216\u0217\3\2\2\2\u0217"+ - "/\3\2\2\2\u0218\u021b\5&\24\2\u0219\u021a\7\7\2\2\u021a\u021c\5l\67\2"+ - "\u021b\u0219\3\2\2\2\u021b\u021c\3\2\2\2\u021c\u0223\3\2\2\2\u021d\u0220"+ - "\5&\24\2\u021e\u021f\7\27\2\2\u021f\u0221\5l\67\2\u0220\u021e\3\2\2\2"+ - "\u0220\u0221\3\2\2\2\u0221\u0223\3\2\2\2\u0222\u0218\3\2\2\2\u0222\u021d"+ - "\3\2\2\2\u0223\61\3\2\2\2\u0224\u0226\5j\66\2\u0225\u0227\7\30\2\2\u0226"+ - "\u0225\3\2\2\2\u0226\u0227\3\2\2\2\u0227\u0228\3\2\2\2\u0228\u0229\7\31"+ - "\2\2\u0229\u022b\5\u00e2r\2\u022a\u022c\5h\65\2\u022b\u022a\3\2\2\2\u022b"+ - "\u022c\3\2\2\2\u022c\u022e\3\2\2\2\u022d\u022f\5Z.\2\u022e\u022d\3\2\2"+ - "\2\u022e\u022f\3\2\2\2\u022f\u0231\3\2\2\2\u0230\u0232\5\64\33\2\u0231"+ - "\u0230\3\2\2\2\u0231\u0232\3\2\2\2\u0232\u0234\3\2\2\2\u0233\u0235\5\\"+ - "/\2\u0234\u0233\3\2\2\2\u0234\u0235\3\2\2\2\u0235\u0236\3\2\2\2\u0236"+ - "\u023c\7\16\2\2\u0237\u0238\5j\66\2\u0238\u0239\5\66\34\2\u0239\u023b"+ - "\3\2\2\2\u023a\u0237\3\2\2\2\u023b\u023e\3\2\2\2\u023c\u023a\3\2\2\2\u023c"+ - "\u023d\3\2\2\2\u023d\u023f\3\2\2\2\u023e\u023c\3\2\2\2\u023f\u0240\7\17"+ - "\2\2\u0240\u0249\3\2\2\2\u0241\u0243\5j\66\2\u0242\u0244\7\30\2\2\u0243"+ - "\u0242\3\2\2\2\u0243\u0244\3\2\2\2\u0244\u0245\3\2\2\2\u0245\u0246\7\31"+ - "\2\2\u0246\u0247\5^\60\2\u0247\u0249\3\2\2\2\u0248\u0224\3\2\2\2\u0248"+ - "\u0241\3\2\2\2\u0249\63\3\2\2\2\u024a\u024b\7\32\2\2\u024b\u024c\5\u0152"+ - "\u00aa\2\u024c\65\3\2\2\2\u024d\u024e\5:\36\2\u024e\u024f\7\13\2\2\u024f"+ - "\u0254\3\2\2\2\u0250\u0251\58\35\2\u0251\u0252\5\30\r\2\u0252\u0254\3"+ - "\2\2\2\u0253\u024d\3\2\2\2\u0253\u0250\3\2\2\2\u0254\67\3\2\2\2\u0255"+ - "\u0257\5J&\2\u0256\u0258\5N(\2\u0257\u0256\3\2\2\2\u0257\u0258\3\2\2\2"+ - "\u0258\u0268\3\2\2\2\u0259\u0268\5T+\2\u025a\u025c\7\33\2\2\u025b\u025a"+ - "\3\2\2\2\u025b\u025c\3\2\2\2\u025c\u025d\3\2\2\2\u025d\u0268\5\22\n\2"+ - "\u025e\u0260\7\33\2\2\u025f\u025e\3\2\2\2\u025f\u0260\3\2\2\2\u0260\u0261"+ - "\3\2\2\2\u0261\u0268\5F$\2\u0262\u0264\7\33\2\2\u0263\u0262\3\2\2\2\u0263"+ - "\u0264\3\2\2\2\u0264\u0265\3\2\2\2\u0265\u0268\5H%\2\u0266\u0268\5@!\2"+ - "\u0267\u0255\3\2\2\2\u0267\u0259\3\2\2\2\u0267\u025b\3\2\2\2\u0267\u025f"+ - "\3\2\2\2\u0267\u0263\3\2\2\2\u0267\u0266\3\2\2\2\u02689\3\2\2\2\u0269"+ - "\u026c\5X-\2\u026a\u026d\5L\'\2\u026b\u026d\5N(\2\u026c\u026a\3\2\2\2"+ - "\u026c\u026b\3\2\2\2\u026c\u026d\3\2\2\2\u026d\u02a4\3\2\2\2\u026e\u0271"+ - "\5J&\2\u026f\u0272\5L\'\2\u0270\u0272\5N(\2\u0271\u026f\3\2\2\2\u0271"+ - "\u0270\3\2\2\2\u0271\u0272\3\2\2\2\u0272\u02a4\3\2\2\2\u0273\u0274\7\34"+ - "\2\2\u0274\u02a4\5X-\2\u0275\u0276\7\34\2\2\u0276\u02a4\5J&\2\u0277\u0279"+ - "\7\34\2\2\u0278\u027a\7\33\2\2\u0279\u0278\3\2\2\2\u0279\u027a\3\2\2\2"+ - "\u027a\u027c\3\2\2\2\u027b\u0277\3\2\2\2\u027b\u027c\3\2\2\2\u027c\u027d"+ - "\3\2\2\2\u027d\u02a4\5F$\2\u027e\u0280\7\34\2\2\u027f\u0281\7\33\2\2\u0280"+ - "\u027f\3\2\2\2\u0280\u0281\3\2\2\2\u0281\u0283\3\2\2\2\u0282\u027e\3\2"+ - "\2\2\u0282\u0283\3\2\2\2\u0283\u0284\3\2\2\2\u0284\u02a4\5H%\2\u0285\u0287"+ - "\7\34\2\2\u0286\u0285\3\2\2\2\u0286\u0287\3\2\2\2\u0287\u0288\3\2\2\2"+ - "\u0288\u02a4\5@!\2\u0289\u028b\7\34\2\2\u028a\u028c\7\33\2\2\u028b\u028a"+ - "\3\2\2\2\u028b\u028c\3\2\2\2\u028c\u028e\3\2\2\2\u028d\u0289\3\2\2\2\u028d"+ - "\u028e\3\2\2\2\u028e\u028f\3\2\2\2\u028f\u02a4\5\22\n\2\u0290\u0291\7"+ - "\33\2\2\u0291\u0293\t\3\2\2\u0292\u0294\5\u014c\u00a7\2\u0293\u0292\3"+ - "\2\2\2\u0293\u0294\3\2\2\2\u0294\u0295\3\2\2\2\u0295\u02a4\5<\37\2\u0296"+ - "\u0298\7\4\2\2\u0297\u0299\5\u014c\u00a7\2\u0298\u0297\3\2\2\2\u0298\u0299"+ - "\3\2\2\2\u0299\u029a\3\2\2\2\u029a\u02a4\5\20\t\2\u029b\u029d\t\4\2\2"+ - "\u029c\u029b\3\2\2\2\u029c\u029d\3\2\2\2\u029d\u02a0\3\2\2\2\u029e\u02a1"+ - "\7\6\2\2\u029f\u02a1\5\u014c\u00a7\2\u02a0\u029e\3\2\2\2\u02a0\u029f\3"+ - "\2\2\2\u02a1\u02a2\3\2\2\2\u02a2\u02a4\5\20\t\2\u02a3\u0269\3\2\2\2\u02a3"+ - "\u026e\3\2\2\2\u02a3\u0273\3\2\2\2\u02a3\u0275\3\2\2\2\u02a3\u027b\3\2"+ - "\2\2\u02a3\u0282\3\2\2\2\u02a3\u0286\3\2\2\2\u02a3\u028d\3\2\2\2\u02a3"+ - "\u0290\3\2\2\2\u02a3\u0296\3\2\2\2\u02a3\u029c\3\2\2\2\u02a4;\3\2\2\2"+ - "\u02a5\u02aa\5> \2\u02a6\u02a7\7\3\2\2\u02a7\u02a9\5> \2\u02a8\u02a6\3"+ - "\2\2\2\u02a9\u02ac\3\2\2\2\u02aa\u02a8\3\2\2\2\u02aa\u02ab\3\2\2\2\u02ab"+ - "=\3\2\2\2\u02ac\u02aa\3\2\2\2\u02ad\u02ae\5\u00e2r\2\u02ae\u02af\7\7\2"+ - "\2\u02af\u02b0\5l\67\2\u02b0?\3\2\2\2\u02b1\u02b3\5\26\f\2\u02b2\u02b1"+ - "\3\2\2\2\u02b2\u02b3\3\2\2\2\u02b3\u02b4\3\2\2\2\u02b4\u02b5\7\35\2\2"+ - "\u02b5\u02b6\5B\"\2\u02b6\u02b7\5\34\17\2\u02b7A\3\2\2\2\u02b8\u02bd\7"+ - "\36\2\2\u02b9\u02bd\5D#\2\u02ba\u02bd\7\37\2\2\u02bb\u02bd\7 \2\2\u02bc"+ - "\u02b8\3\2\2\2\u02bc\u02b9\3\2\2\2\u02bc\u02ba\3\2\2\2\u02bc\u02bb\3\2"+ - "\2\2\u02bdC\3\2\2\2\u02be\u02c5\5\u00c6d\2\u02bf\u02c5\5\u00c2b\2\u02c0"+ - "\u02c5\5\u00be`\2\u02c1\u02c5\5\u00b2Z\2\u02c2\u02c5\7!\2\2\u02c3\u02c5"+ - "\5\u00ba^\2\u02c4\u02be\3\2\2\2\u02c4\u02bf\3\2\2\2\u02c4\u02c0\3\2\2"+ - "\2\u02c4\u02c1\3\2\2\2\u02c4\u02c2\3\2\2\2\u02c4\u02c3\3\2\2\2\u02c5E"+ - "\3\2\2\2\u02c6\u02c8\5\26\f\2\u02c7\u02c6\3\2\2\2\u02c7\u02c8\3\2\2\2"+ - "\u02c8\u02c9\3\2\2\2\u02c9\u02ca\7\"\2\2\u02ca\u02cb\5\u00e2r\2\u02cb"+ - "G\3\2\2\2\u02cc\u02ce\5\26\f\2\u02cd\u02cc\3\2\2\2\u02cd\u02ce\3\2\2\2"+ - "\u02ce\u02cf\3\2\2\2\u02cf\u02d0\7#\2\2\u02d0\u02d1\5\u00e2r\2\u02d1\u02d2"+ - "\5\34\17\2\u02d2I\3\2\2\2\u02d3\u02d6\5\u00e2r\2\u02d4\u02d5\7\26\2\2"+ - "\u02d5\u02d7\5\u00e2r\2\u02d6\u02d4\3\2\2\2\u02d6\u02d7\3\2\2\2\u02d7"+ - "\u02d8\3\2\2\2\u02d8\u02d9\5\34\17\2\u02d9K\3\2\2\2\u02da\u02db\7\27\2"+ - "\2\u02db\u02de\7\25\2\2\u02dc\u02dd\7\26\2\2\u02dd\u02df\5\u00e2r\2\u02de"+ - "\u02dc\3\2\2\2\u02de\u02df\3\2\2\2\u02df\u02e0\3\2\2\2\u02e0\u02e1\5\u0094"+ - "K\2\u02e1M\3\2\2\2\u02e2\u02e3\7\27\2\2\u02e3\u02e8\5P)\2\u02e4\u02e5"+ - "\7\3\2\2\u02e5\u02e7\5P)\2\u02e6\u02e4\3\2\2\2\u02e7\u02ea\3\2\2\2\u02e8"+ - "\u02e6\3\2\2\2\u02e8\u02e9\3\2\2\2\u02e9O\3\2\2\2\u02ea\u02e8\3\2\2\2"+ - "\u02eb\u02ec\7$\2\2\u02ec\u02f5\5\u0094K\2\u02ed\u02ee\7$\2\2\u02ee\u02ef"+ - "\7\26\2\2\u02ef\u02f0\5\u00e2r\2\u02f0\u02f1\5\u0094K\2\u02f1\u02f5\3"+ - "\2\2\2\u02f2\u02f5\5R*\2\u02f3\u02f5\5\u0124\u0093\2\u02f4\u02eb\3\2\2"+ - "\2\u02f4\u02ed\3\2\2\2\u02f4\u02f2\3\2\2\2\u02f4\u02f3\3\2\2\2\u02f5Q"+ - "\3\2\2\2\u02f6\u02f7\7\25\2\2\u02f7\u02f9\7\26\2\2\u02f8\u02f6\3\2\2\2"+ - "\u02f8\u02f9\3\2\2\2\u02f9\u02fa\3\2\2\2\u02fa\u02fb\5\u00e2r\2\u02fb"+ - "\u02fc\7\7\2\2\u02fc\u0300\5\u00a4S\2\u02fd\u02ff\5\u009aN\2\u02fe\u02fd"+ - "\3\2\2\2\u02ff\u0302\3\2\2\2\u0300\u02fe\3\2\2\2\u0300\u0301\3\2\2\2\u0301"+ - "S\3\2\2\2\u0302\u0300\3\2\2\2\u0303\u0304\7%\2\2\u0304\u0307\5\u00e2r"+ - "\2\u0305\u0306\7\26\2\2\u0306\u0308\5\u00e2r\2\u0307\u0305\3\2\2\2\u0307"+ - "\u0308\3\2\2\2\u0308\u0309\3\2\2\2\u0309\u030a\5\34\17\2\u030aU\3\2\2"+ - "\2\u030b\u030d\7\5\2\2\u030c\u030b\3\2\2\2\u030c\u030d\3\2\2\2\u030d\u030e"+ - "\3\2\2\2\u030e\u030f\7%\2\2\u030f\u0312\5\u00e2r\2\u0310\u0311\7\26\2"+ - "\2\u0311\u0313\5\u00e2r\2\u0312\u0310\3\2\2\2\u0312\u0313\3\2\2\2\u0313"+ - "\u0314\3\2\2\2\u0314\u0315\5\34\17\2\u0315\u0316\7\7\2\2\u0316\u0319\5"+ - "\u014c\u00a7\2\u0317\u0318\7\26\2\2\u0318\u031a\5\u00e2r\2\u0319\u0317"+ - "\3\2\2\2\u0319\u031a\3\2\2\2\u031aW\3\2\2\2\u031b\u031c\7\5\2\2\u031c"+ - "\u031d\5\u00e4s\2\u031d\u031e\5\34\17\2\u031eY\3\2\2\2\u031f\u0320\7&"+ - "\2\2\u0320\u0321\5\u014c\u00a7\2\u0321[\3\2\2\2\u0322\u0323\7\'\2\2\u0323"+ - "\u0324\5\u0152\u00aa\2\u0324]\3\2\2\2\u0325\u0327\5\u00e2r\2\u0326\u0328"+ - "\5h\65\2\u0327\u0326\3\2\2\2\u0327\u0328\3\2\2\2\u0328\u0329\3\2\2\2\u0329"+ - "\u032a\7\7\2\2\u032a\u032b\5`\61\2\u032b\u032c\7\13\2\2\u032c_\3\2\2\2"+ - "\u032d\u032e\5\u014c\u00a7\2\u032e\u0330\5\64\33\2\u032f\u0331\5\\/\2"+ - "\u0330\u032f\3\2\2\2\u0330\u0331\3\2\2\2\u0331a\3\2\2\2\u0332\u0333\5"+ - "j\66\2\u0333\u0334\7(\2\2\u0334\u0335\5\u00e2r\2\u0335\u0336\7\16\2\2"+ - "\u0336\u033b\5d\63\2\u0337\u0338\7\3\2\2\u0338\u033a\5d\63\2\u0339\u0337"+ - "\3\2\2\2\u033a\u033d\3\2\2\2\u033b\u0339\3\2\2\2\u033b\u033c\3\2\2\2\u033c"+ - "\u033f\3\2\2\2\u033d\u033b\3\2\2\2\u033e\u0340\7\3\2\2\u033f\u033e\3\2"+ - "\2\2\u033f\u0340\3\2\2\2\u0340\u0341\3\2\2\2\u0341\u0342\7\17\2\2\u0342"+ - "c\3\2\2\2\u0343\u0344\5j\66\2\u0344\u0345\5\u00e2r\2\u0345e\3\2\2\2\u0346"+ - "\u0347\5j\66\2\u0347\u034a\5\u00e2r\2\u0348\u0349\7&\2\2\u0349\u034b\5"+ - "\u014c\u00a7\2\u034a\u0348\3\2\2\2\u034a\u034b\3\2\2\2\u034bg\3\2\2\2"+ - "\u034c\u034d\7)\2\2\u034d\u0352\5f\64\2\u034e\u034f\7\3\2\2\u034f\u0351"+ - "\5f\64\2\u0350\u034e\3\2\2\2\u0351\u0354\3\2\2\2\u0352\u0350\3\2\2\2\u0352"+ - "\u0353\3\2\2\2\u0353\u0355\3\2\2\2\u0354\u0352\3\2\2\2\u0355\u0356\7*"+ - "\2\2\u0356i\3\2\2\2\u0357\u0358\7+\2\2\u0358\u035b\5\u00e4s\2\u0359\u035a"+ - "\7\26\2\2\u035a\u035c\5\u00e2r\2\u035b\u0359\3\2\2\2\u035b\u035c\3\2\2"+ - "\2\u035c\u035e\3\2\2\2\u035d\u035f\5\u0094K\2\u035e\u035d\3\2\2\2\u035e"+ - "\u035f\3\2\2\2\u035f\u0361\3\2\2\2\u0360\u0357\3\2\2\2\u0361\u0364\3\2"+ - "\2\2\u0362\u0360\3\2\2\2\u0362\u0363\3\2\2\2\u0363k\3\2\2\2\u0364\u0362"+ - "\3\2\2\2\u0365\u0366\5\u00dco\2\u0366\u0367\5\u00a0Q\2\u0367\u0368\5l"+ - "\67\2\u0368\u0372\3\2\2\2\u0369\u036d\5\u00a4S\2\u036a\u036c\5\u009aN"+ - "\2\u036b\u036a\3\2\2\2\u036c\u036f\3\2\2\2\u036d\u036b\3\2\2\2\u036d\u036e"+ - "\3\2\2\2\u036e\u0372\3\2\2\2\u036f\u036d\3\2\2\2\u0370\u0372\5\u0088E"+ - "\2\u0371\u0365\3\2\2\2\u0371\u0369\3\2\2\2\u0371\u0370\3\2\2\2\u0372m"+ - "\3\2\2\2\u0373\u0374\5\u00dco\2\u0374\u0375\5\u00a0Q\2\u0375\u0376\5n"+ - "8\2\u0376\u037a\3\2\2\2\u0377\u037a\5\u00a4S\2\u0378\u037a\5\u008aF\2"+ - "\u0379\u0373\3\2\2\2\u0379\u0377\3\2\2\2\u0379\u0378\3\2\2\2\u037ao\3"+ - "\2\2\2\u037b\u0380\5l\67\2\u037c\u037d\7\3\2\2\u037d\u037f\5l\67\2\u037e"+ - "\u037c\3\2\2\2\u037f\u0382\3\2\2\2\u0380\u037e\3\2\2\2\u0380\u0381\3\2"+ - "\2\2\u0381q\3\2\2\2\u0382\u0380\3\2\2\2\u0383\u0390\5\u008eH\2\u0384\u0385"+ - "\7$\2\2\u0385\u0390\5\u00dep\2\u0386\u0390\5\u008cG\2\u0387\u0390\5t;"+ - "\2\u0388\u0390\5\u00e2r\2\u0389\u0390\5\u0090I\2\u038a\u0390\5\u0092J"+ - "\2\u038b\u038c\7\20\2\2\u038c\u038d\5l\67\2\u038d\u038e\7\21\2\2\u038e"+ - "\u0390\3\2\2\2\u038f\u0383\3\2\2\2\u038f\u0384\3\2\2\2\u038f\u0386\3\2"+ - "\2\2\u038f\u0387\3\2\2\2\u038f\u0388\3\2\2\2\u038f\u0389\3\2\2\2\u038f"+ - "\u038a\3\2\2\2\u038f\u038b\3\2\2\2\u0390s\3\2\2\2\u0391\u0399\5v<\2\u0392"+ - "\u0399\5z>\2\u0393\u0399\5x=\2\u0394\u0399\5|?\2\u0395\u0399\5\u0080A"+ - "\2\u0396\u0399\5\u0084C\2\u0397\u0399\5\u0082B\2\u0398\u0391\3\2\2\2\u0398"+ - "\u0392\3\2\2\2\u0398\u0393\3\2\2\2\u0398\u0394\3\2\2\2\u0398\u0395\3\2"+ - "\2\2\u0398\u0396\3\2\2\2\u0398\u0397\3\2\2\2\u0399u\3\2\2\2\u039a\u039b"+ - "\7,\2\2\u039bw\3\2\2\2\u039c\u039d\t\5\2\2\u039dy\3\2\2\2\u039e\u039f"+ - "\t\6\2\2\u039f{\3\2\2\2\u03a0\u03a2\t\7\2\2\u03a1\u03a0\3\2\2\2\u03a2"+ - "\u03a3\3\2\2\2\u03a3\u03a1\3\2\2\2\u03a3\u03a4\3\2\2\2\u03a4}\3\2\2\2"+ - "\u03a5\u03a6\7/\2\2\u03a6\u03ac\5\u00e2r\2\u03a7\u03a8\7\60\2\2\u03a8"+ - "\u03a9\5l\67\2\u03a9\u03aa\7\17\2\2\u03aa\u03ac\3\2\2\2\u03ab\u03a5\3"+ - "\2\2\2\u03ab\u03a7\3\2\2\2\u03ac\177\3\2\2\2\u03ad\u03b7\7\61\2\2\u03ae"+ - "\u03b8\5B\"\2\u03af\u03b4\5\u00e2r\2\u03b0\u03b1\7\3\2\2\u03b1\u03b3\5"+ - "\u00e2r\2\u03b2\u03b0\3\2\2\2\u03b3\u03b6\3\2\2\2\u03b4\u03b2\3\2\2\2"+ - "\u03b4\u03b5\3\2\2\2\u03b5\u03b8\3\2\2\2\u03b6\u03b4\3\2\2\2\u03b7\u03ae"+ - "\3\2\2\2\u03b7\u03af\3\2\2\2\u03b8\u0081\3\2\2\2\u03b9\u03bb\7\5\2\2\u03ba"+ - "\u03b9\3\2\2\2\u03ba\u03bb\3\2\2\2\u03bb\u03bd\3\2\2\2\u03bc\u03be\5\u0150"+ - "\u00a9\2\u03bd\u03bc\3\2\2\2\u03bd\u03be\3\2\2\2\u03be\u03bf\3\2\2\2\u03bf"+ - "\u03c4\7\22\2\2\u03c0\u03c2\5p9\2\u03c1\u03c3\7\3\2\2\u03c2\u03c1\3\2"+ - "\2\2\u03c2\u03c3\3\2\2\2\u03c3\u03c5\3\2\2\2\u03c4\u03c0\3\2\2\2\u03c4"+ - "\u03c5\3\2\2\2\u03c5\u03c6\3\2\2\2\u03c6\u03c7\7\23\2\2\u03c7\u0083\3"+ - "\2\2\2\u03c8\u03ca\7\5\2\2\u03c9\u03c8\3\2\2\2\u03c9\u03ca\3\2\2\2\u03ca"+ - "\u03cc\3\2\2\2\u03cb\u03cd\5\u0150\u00a9\2\u03cc\u03cb\3\2\2\2\u03cc\u03cd"+ - "\3\2\2\2\u03cd\u03ce\3\2\2\2\u03ce\u03da\7\16\2\2\u03cf\u03d4\5\u0086"+ - "D\2\u03d0\u03d1\7\3\2\2\u03d1\u03d3\5\u0086D\2\u03d2\u03d0\3\2\2\2\u03d3"+ - "\u03d6\3\2\2\2\u03d4\u03d2\3\2\2\2\u03d4\u03d5\3\2\2\2\u03d5\u03d8\3\2"+ - "\2\2\u03d6\u03d4\3\2\2\2\u03d7\u03d9\7\3\2\2\u03d8\u03d7\3\2\2\2\u03d8"+ - "\u03d9\3\2\2\2\u03d9\u03db\3\2\2\2\u03da\u03cf\3\2\2\2\u03da\u03db\3\2"+ - "\2\2\u03db\u03dc\3\2\2\2\u03dc\u03dd\7\17\2\2\u03dd\u0085\3\2\2\2\u03de"+ - "\u03df\5l\67\2\u03df\u03e0\7\27\2\2\u03e0\u03e1\5l\67\2\u03e1\u0087\3"+ - "\2\2\2\u03e2\u03e3\7\62\2\2\u03e3\u03e4\5l\67\2\u03e4\u0089\3\2\2\2\u03e5"+ - "\u03e6\7\62\2\2\u03e6\u03e7\5n8\2\u03e7\u008b\3\2\2\2\u03e8\u03e9\5\24"+ - "\13\2\u03e9\u03ea\5\30\r\2\u03ea\u008d\3\2\2\2\u03eb\u03ec\7\25\2\2\u03ec"+ - "\u008f\3\2\2\2\u03ed\u03ee\7\63\2\2\u03ee\u03f1\5\u014c\u00a7\2\u03ef"+ - "\u03f0\7\26\2\2\u03f0\u03f2\5\u00e2r\2\u03f1\u03ef\3\2\2\2\u03f1\u03f2"+ - "\3\2\2\2\u03f2\u03f3\3\2\2\2\u03f3\u03f4\5\u0094K\2\u03f4\u0091\3\2\2"+ - "\2\u03f5\u03f6\7\5\2\2\u03f6\u03f9\5\u014c\u00a7\2\u03f7\u03f8\7\26\2"+ - "\2\u03f8\u03fa\5\u00e2r\2\u03f9\u03f7\3\2\2\2\u03f9\u03fa\3\2\2\2\u03fa"+ - "\u03fb\3\2\2\2\u03fb\u03fc\5\u0094K\2\u03fc\u0093\3\2\2\2\u03fd\u0402"+ - "\7\20\2\2\u03fe\u0400\5\u0096L\2\u03ff\u0401\7\3\2\2\u0400\u03ff\3\2\2"+ - "\2\u0400\u0401\3\2\2\2\u0401\u0403\3\2\2\2\u0402\u03fe\3\2\2\2\u0402\u0403"+ - "\3\2\2\2\u0403\u0404\3\2\2\2\u0404\u0405\7\21\2\2\u0405\u0095\3\2\2\2"+ - "\u0406\u040b\5\u0098M\2\u0407\u0408\7\3\2\2\u0408\u040a\5\u0098M\2\u0409"+ - "\u0407\3\2\2\2\u040a\u040d\3\2\2\2\u040b\u0409\3\2\2\2\u040b\u040c\3\2"+ - "\2\2\u040c\u0417\3\2\2\2\u040d\u040b\3\2\2\2\u040e\u0413\5p9\2\u040f\u0410"+ - "\7\3\2\2\u0410\u0412\5\u0098M\2\u0411\u040f\3\2\2\2\u0412\u0415\3\2\2"+ - "\2\u0413\u0411\3\2\2\2\u0413\u0414\3\2\2\2\u0414\u0417\3\2\2\2\u0415\u0413"+ - "\3\2\2\2\u0416\u0406\3\2\2\2\u0416\u040e\3\2\2\2\u0417\u0097\3\2\2\2\u0418"+ - "\u0419\5\u0118\u008d\2\u0419\u041a\5l\67\2\u041a\u0099\3\2\2\2\u041b\u041c"+ - "\7\64\2\2\u041c\u0420\5\u009cO\2\u041d\u041f\5\u009eP\2\u041e\u041d\3"+ - "\2\2\2\u041f\u0422\3\2\2\2\u0420\u041e\3\2\2\2\u0420\u0421\3\2\2\2\u0421"+ - "\u042c\3\2\2\2\u0422\u0420\3\2\2\2\u0423\u0427\5\u00e0q\2\u0424\u0426"+ - "\5\u009eP\2\u0425\u0424\3\2\2\2\u0426\u0429\3\2\2\2\u0427\u0425\3\2\2"+ - "\2\u0427\u0428\3\2\2\2\u0428\u042b\3\2\2\2\u0429\u0427\3\2\2\2\u042a\u0423"+ - "\3\2\2\2\u042b\u042e\3\2\2\2\u042c\u042a\3\2\2\2\u042c\u042d\3\2\2\2\u042d"+ - "\u0432\3\2\2\2\u042e\u042c\3\2\2\2\u042f\u0430\5\u00a0Q\2\u0430\u0431"+ - "\5n8\2\u0431\u0433\3\2\2\2\u0432\u042f\3\2\2\2\u0432\u0433\3\2\2\2\u0433"+ - "\u009b\3\2\2\2\u0434\u0435\7\22\2\2\u0435\u0436\5l\67\2\u0436\u0437\7"+ - "\23\2\2\u0437\u043a\3\2\2\2\u0438\u043a\5\u00e2r\2\u0439\u0434\3\2\2\2"+ - "\u0439\u0438\3\2\2\2\u043a\u009d\3\2\2\2\u043b\u043d\5\u0150\u00a9\2\u043c"+ - "\u043b\3\2\2\2\u043c\u043d\3\2\2\2\u043d\u043e\3\2\2\2\u043e\u043f\5\u0094"+ - "K\2\u043f\u009f\3\2\2\2\u0440\u0443\7\7\2\2\u0441\u0443\5\u00a2R\2\u0442"+ - "\u0440\3\2\2\2\u0442\u0441\3\2\2\2\u0443\u00a1\3\2\2\2\u0444\u0445\t\b"+ - "\2\2\u0445\u00a3\3\2\2\2\u0446\u044c\5\u00a6T\2\u0447\u0448\7A\2\2\u0448"+ - "\u0449\5n8\2\u0449\u044a\7\27\2\2\u044a\u044b\5n8\2\u044b\u044d\3\2\2"+ - "\2\u044c\u0447\3\2\2\2\u044c\u044d\3\2\2\2\u044d\u00a5\3\2\2\2\u044e\u0453"+ - "\5\u00a8U\2\u044f\u0450\7B\2\2\u0450\u0452\5\u00a8U\2\u0451\u044f\3\2"+ - "\2\2\u0452\u0455\3\2\2\2\u0453\u0451\3\2\2\2\u0453\u0454\3\2\2\2\u0454"+ - "\u00a7\3\2\2\2\u0455\u0453\3\2\2\2\u0456\u045b\5\u00aaV\2\u0457\u0458"+ - "\7C\2\2\u0458\u045a\5\u00aaV\2\u0459\u0457\3\2\2\2\u045a\u045d\3\2\2\2"+ - "\u045b\u0459\3\2\2\2\u045b\u045c\3\2\2\2\u045c\u00a9\3\2\2\2\u045d\u045b"+ - "\3\2\2\2\u045e\u0463\5\u00acW\2\u045f\u0460\7D\2\2\u0460\u0462\5\u00ac"+ - "W\2\u0461\u045f\3\2\2\2\u0462\u0465\3\2\2\2\u0463\u0461\3\2\2\2\u0463"+ - "\u0464\3\2\2\2\u0464\u00ab\3\2\2\2\u0465\u0463\3\2\2\2\u0466\u046a\5\u00b0"+ - "Y\2\u0467\u0468\5\u00aeX\2\u0468\u0469\5\u00b0Y\2\u0469\u046b\3\2\2\2"+ - "\u046a\u0467\3\2\2\2\u046a\u046b\3\2\2\2\u046b\u0471\3\2\2\2\u046c\u046d"+ - "\7$\2\2\u046d\u046e\5\u00aeX\2\u046e\u046f\5\u00b0Y\2\u046f\u0471\3\2"+ - "\2\2\u0470\u0466\3\2\2\2\u0470\u046c\3\2\2\2\u0471\u00ad\3\2\2\2\u0472"+ - "\u0473\t\t\2\2\u0473\u00af\3\2\2\2\u0474\u047a\5\u00b4[\2\u0475\u047b"+ - "\5\u00e6t\2\u0476\u047b\5\u00eav\2\u0477\u0478\5\u00b2Z\2\u0478\u0479"+ - "\5\u00b4[\2\u0479\u047b\3\2\2\2\u047a\u0475\3\2\2\2\u047a\u0476\3\2\2"+ - "\2\u047a\u0477\3\2\2\2\u047a\u047b\3\2\2\2\u047b\u0481\3\2\2\2\u047c\u047d"+ - "\7$\2\2\u047d\u047e\5\u00b2Z\2\u047e\u047f\5\u00b4[\2\u047f\u0481\3\2"+ - "\2\2\u0480\u0474\3\2\2\2\u0480\u047c\3\2\2\2\u0481\u00b1\3\2\2\2\u0482"+ - "\u0483\t\n\2\2\u0483\u00b3\3\2\2\2\u0484\u0489\5\u00b6\\\2\u0485\u0486"+ - "\7H\2\2\u0486\u0488\5\u00b6\\\2\u0487\u0485\3\2\2\2\u0488\u048b\3\2\2"+ - "\2\u0489\u0487\3\2\2\2\u0489\u048a\3\2\2\2\u048a\u0494\3\2\2\2\u048b\u0489"+ - "\3\2\2\2\u048c\u048f\7$\2\2\u048d\u048e\7H\2\2\u048e\u0490\5\u00b4[\2"+ - "\u048f\u048d\3\2\2\2\u0490\u0491\3\2\2\2\u0491\u048f\3\2\2\2\u0491\u0492"+ - "\3\2\2\2\u0492\u0494\3\2\2\2\u0493\u0484\3\2\2\2\u0493\u048c\3\2\2\2\u0494"+ - "\u00b5\3\2\2\2\u0495\u049a\5\u00b8]\2\u0496\u0497\7I\2\2\u0497\u0499\5"+ - "\u00b8]\2\u0498\u0496\3\2\2\2\u0499\u049c\3\2\2\2\u049a\u0498\3\2\2\2"+ - "\u049a\u049b\3\2\2\2\u049b\u04a5\3\2\2\2\u049c\u049a\3\2\2\2\u049d\u04a0"+ - "\7$\2\2\u049e\u049f\7I\2\2\u049f\u04a1\5\u00b8]\2\u04a0\u049e\3\2\2\2"+ - "\u04a1\u04a2\3\2\2\2\u04a2\u04a0\3\2\2\2\u04a2\u04a3\3\2\2\2\u04a3\u04a5"+ - "\3\2\2\2\u04a4\u0495\3\2\2\2\u04a4\u049d\3\2\2\2\u04a5\u00b7\3\2\2\2\u04a6"+ - "\u04ab\5\u00bc_\2\u04a7\u04a8\7J\2\2\u04a8\u04aa\5\u00bc_\2\u04a9\u04a7"+ - "\3\2\2\2\u04aa\u04ad\3\2\2\2\u04ab\u04a9\3\2\2\2\u04ab\u04ac\3\2\2\2\u04ac"+ - "\u04b6\3\2\2\2\u04ad\u04ab\3\2\2\2\u04ae\u04b1\7$\2\2\u04af\u04b0\7J\2"+ - "\2\u04b0\u04b2\5\u00bc_\2\u04b1\u04af\3\2\2\2\u04b2\u04b3\3\2\2\2\u04b3"+ - "\u04b1\3\2\2\2\u04b3\u04b4\3\2\2\2\u04b4\u04b6\3\2\2\2\u04b5\u04a6\3\2"+ - "\2\2\u04b5\u04ae\3\2\2\2\u04b6\u00b9\3\2\2\2\u04b7\u04b8\t\13\2\2\u04b8"+ - "\u00bb\3\2\2\2\u04b9\u04bf\5\u00c0a\2\u04ba\u04bb\5\u00be`\2\u04bb\u04bc"+ - "\5\u00c0a\2\u04bc\u04be\3\2\2\2\u04bd\u04ba\3\2\2\2\u04be\u04c1\3\2\2"+ - "\2\u04bf\u04bd\3\2\2\2\u04bf\u04c0\3\2\2\2\u04c0\u04cb\3\2\2\2\u04c1\u04bf"+ - "\3\2\2\2\u04c2\u04c6\7$\2\2\u04c3\u04c4\5\u00be`\2\u04c4\u04c5\5\u00c0"+ - "a\2\u04c5\u04c7\3\2\2\2\u04c6\u04c3\3\2\2\2\u04c7\u04c8\3\2\2\2\u04c8"+ - "\u04c6\3\2\2\2\u04c8\u04c9\3\2\2\2\u04c9\u04cb\3\2\2\2\u04ca\u04b9\3\2"+ - "\2\2\u04ca\u04c2\3\2\2\2\u04cb\u00bd\3\2\2\2\u04cc\u04cd\t\f\2\2\u04cd"+ - "\u00bf\3\2\2\2\u04ce\u04d4\5\u00c4c\2\u04cf\u04d0\5\u00c2b\2\u04d0\u04d1"+ - "\5\u00c4c\2\u04d1\u04d3\3\2\2\2\u04d2\u04cf\3\2\2\2\u04d3\u04d6\3\2\2"+ - "\2\u04d4\u04d2\3\2\2\2\u04d4\u04d5\3\2\2\2\u04d5\u04e0\3\2\2\2\u04d6\u04d4"+ - "\3\2\2\2\u04d7\u04db\7$\2\2\u04d8\u04d9\5\u00c2b\2\u04d9\u04da\5\u00c4"+ - "c\2\u04da\u04dc\3\2\2\2\u04db\u04d8\3\2\2\2\u04dc\u04dd\3\2\2\2\u04dd"+ - "\u04db\3\2\2\2\u04dd\u04de\3\2\2\2\u04de\u04e0\3\2\2\2\u04df\u04ce\3\2"+ - "\2\2\u04df\u04d7\3\2\2\2\u04e0\u00c1\3\2\2\2\u04e1\u04e2\t\r\2\2\u04e2"+ - "\u00c3\3\2\2\2\u04e3\u04e9\5\u00c8e\2\u04e4\u04e5\5\u00c6d\2\u04e5\u04e6"+ - "\5\u00c8e\2\u04e6\u04e8\3\2\2\2\u04e7\u04e4\3\2\2\2\u04e8\u04eb\3\2\2"+ - "\2\u04e9\u04e7\3\2\2\2\u04e9\u04ea\3\2\2\2\u04ea\u04f5\3\2\2\2\u04eb\u04e9"+ - "\3\2\2\2\u04ec\u04f0\7$\2\2\u04ed\u04ee\5\u00c6d\2\u04ee\u04ef\5\u00c8"+ - "e\2\u04ef\u04f1\3\2\2\2\u04f0\u04ed\3\2\2\2\u04f1\u04f2\3\2\2\2\u04f2"+ - "\u04f0\3\2\2\2\u04f2\u04f3\3\2\2\2\u04f3\u04f5\3\2\2\2\u04f4\u04e3\3\2"+ - "\2\2\u04f4\u04ec\3\2\2\2\u04f5\u00c5\3\2\2\2\u04f6\u04f7\t\16\2\2\u04f7"+ - "\u00c7\3\2\2\2\u04f8\u04f9\5\u00caf\2\u04f9\u04fa\5\u00c8e\2\u04fa\u0507"+ - "\3\2\2\2\u04fb\u0507\5\u00d2j\2\u04fc\u0507\5\u00d4k\2\u04fd\u0500\5\u00cc"+ - "g\2\u04fe\u0500\5\u00d0i\2\u04ff\u04fd\3\2\2\2\u04ff\u04fe\3\2\2\2\u0500"+ - "\u0501\3\2\2\2\u0501\u0502\7$\2\2\u0502\u0507\3\2\2\2\u0503\u0504\5\u00da"+ - "n\2\u0504\u0505\5\u00dco\2\u0505\u0507\3\2\2\2\u0506\u04f8\3\2\2\2\u0506"+ - "\u04fb\3\2\2\2\u0506\u04fc\3\2\2\2\u0506\u04ff\3\2\2\2\u0506\u0503\3\2"+ - "\2\2\u0507\u00c9\3\2\2\2\u0508\u050c\5\u00ccg\2\u0509\u050c\5\u00ceh\2"+ - "\u050a\u050c\5\u00d0i\2\u050b\u0508\3\2\2\2\u050b\u0509\3\2\2\2\u050b"+ - "\u050a\3\2\2\2\u050c\u00cb\3\2\2\2\u050d\u050e\7O\2\2\u050e\u00cd\3\2"+ - "\2\2\u050f\u0510\7T\2\2\u0510\u00cf\3\2\2\2\u0511\u0512\7\36\2\2\u0512"+ - "\u00d1\3\2\2\2\u0513\u0514\7U\2\2\u0514\u0515\5\u00c8e\2\u0515\u00d3\3"+ - "\2\2\2\u0516\u0517\5\u00dco\2\u0517\u0518\5\u00d6l\2\u0518\u0521\3\2\2"+ - "\2\u0519\u051d\5r:\2\u051a\u051c\5\u00d8m\2\u051b\u051a\3\2\2\2\u051c"+ - "\u051f\3\2\2\2\u051d\u051b\3\2\2\2\u051d\u051e\3\2\2\2\u051e\u0521\3\2"+ - "\2\2\u051f\u051d\3\2\2\2\u0520\u0516\3\2\2\2\u0520\u0519\3\2\2\2\u0521"+ - "\u00d5\3\2\2\2\u0522\u0523\5\u00dan\2\u0523\u00d7\3\2\2\2\u0524\u0527"+ - "\5\u00e0q\2\u0525\u0527\5\u009eP\2\u0526\u0524\3\2\2\2\u0526\u0525\3\2"+ - "\2\2\u0527\u00d9\3\2\2\2\u0528\u0529\t\17\2\2\u0529\u00db\3\2\2\2\u052a"+ - "\u0532\5r:\2\u052b\u052d\5\u009eP\2\u052c\u052b\3\2\2\2\u052d\u0530\3"+ - "\2\2\2\u052e\u052c\3\2\2\2\u052e\u052f\3\2\2\2\u052f\u0531\3\2\2\2\u0530"+ - "\u052e\3\2\2\2\u0531\u0533\5\u00e0q\2\u0532\u052e\3\2\2\2\u0532\u0533"+ - "\3\2\2\2\u0533\u0539\3\2\2\2\u0534\u0535\7$\2\2\u0535\u0536\5\u00dep\2"+ - "\u0536\u0537\5\u00e2r\2\u0537\u0539\3\2\2\2\u0538\u052a\3\2\2\2\u0538"+ - "\u0534\3\2\2\2\u0539\u00dd\3\2\2\2\u053a\u053b\7\22\2\2\u053b\u053c\5"+ - "l\67\2\u053c\u053d\7\23\2\2\u053d\u0541\3\2\2\2\u053e\u053f\7\26\2\2\u053f"+ - "\u0541\5\u00e2r\2\u0540\u053a\3\2\2\2\u0540\u053e\3\2\2\2\u0541\u00df"+ - "\3\2\2\2\u0542\u0546\5\u00dep\2\u0543\u0544\7X\2\2\u0544\u0546\5\u00e2"+ - "r\2\u0545\u0542\3\2\2\2\u0545\u0543\3\2\2\2\u0546\u00e1\3\2\2\2\u0547"+ - "\u0548\7~\2\2\u0548\u00e3\3\2\2\2\u0549\u054c\5\u00e2r\2\u054a\u054b\7"+ - "\26\2\2\u054b\u054d\5\u00e2r\2\u054c\u054a\3\2\2\2\u054c\u054d\3\2\2\2"+ - "\u054d\u00e5\3\2\2\2\u054e\u054f\5\u00e8u\2\u054f\u0550\5\u014c\u00a7"+ - "\2\u0550\u00e7\3\2\2\2\u0551\u0553\7Y\2\2\u0552\u0554\7T\2\2\u0553\u0552"+ - "\3\2\2\2\u0553\u0554\3\2\2\2\u0554\u00e9\3\2\2\2\u0555\u0556\5\u00ecw"+ - "\2\u0556\u0557\5\u014c\u00a7\2\u0557\u00eb\3\2\2\2\u0558\u0559\7Z\2\2"+ - "\u0559\u00ed\3\2\2\2\u055a\u055c\5\u00f0y\2\u055b\u055a\3\2\2\2\u055c"+ - "\u055f\3\2\2\2\u055d\u055b\3\2\2\2\u055d\u055e\3\2\2\2\u055e\u00ef\3\2"+ - "\2\2\u055f\u055d\3\2\2\2\u0560\u0562\5\u0118\u008d\2\u0561\u0560\3\2\2"+ - "\2\u0562\u0565\3\2\2\2\u0563\u0561\3\2\2\2\u0563\u0564\3\2\2\2\u0564\u0566"+ - "\3\2\2\2\u0565\u0563\3\2\2\2\u0566\u0567\5\u00f2z\2\u0567\u00f1\3\2\2"+ - "\2\u0568\u057a\5\32\16\2\u0569\u057a\5\u00f6|\2\u056a\u057a\5\u00fc\177"+ - "\2\u056b\u057a\5\u0102\u0082\2\u056c\u057a\5\u0104\u0083\2\u056d\u057a"+ - "\5\u0106\u0084\2\u056e\u057a\5\u00fa~\2\u056f\u057a\5\u010c\u0087\2\u0570"+ - "\u057a\5\u010e\u0088\2\u0571\u057a\5\u011a\u008e\2\u0572\u057a\5\u011c"+ - "\u008f\2\u0573\u057a\5\u0116\u008c\2\u0574\u057a\5\u011e\u0090\2\u0575"+ - "\u057a\5\u0120\u0091\2\u0576\u057a\5\u00f4{\2\u0577\u057a\5\u0122\u0092"+ - "\2\u0578\u057a\5\u00f8}\2\u0579\u0568\3\2\2\2\u0579\u0569\3\2\2\2\u0579"+ - "\u056a\3\2\2\2\u0579\u056b\3\2\2\2\u0579\u056c\3\2\2\2\u0579\u056d\3\2"+ - "\2\2\u0579\u056e\3\2\2\2\u0579\u056f\3\2\2\2\u0579\u0570\3\2\2\2\u0579"+ - "\u0571\3\2\2\2\u0579\u0572\3\2\2\2\u0579\u0573\3\2\2\2\u0579\u0574\3\2"+ - "\2\2\u0579\u0575\3\2\2\2\u0579\u0576\3\2\2\2\u0579\u0577\3\2\2\2\u0579"+ - "\u0578\3\2\2\2\u057a\u00f3\3\2\2\2\u057b\u057d\5l\67\2\u057c\u057b\3\2"+ - "\2\2\u057c\u057d\3\2\2\2\u057d\u057e\3\2\2\2\u057e\u057f\7\13\2\2\u057f"+ - "\u00f5\3\2\2\2\u0580\u0581\5\f\7\2\u0581\u0582\7\13\2\2\u0582\u00f7\3"+ - "\2\2\2\u0583\u0584\5\22\n\2\u0584\u0585\5\30\r\2\u0585\u00f9\3\2\2\2\u0586"+ - "\u0587\7[\2\2\u0587\u0588\7\20\2\2\u0588\u0589\5l\67\2\u0589\u058a\7\21"+ - "\2\2\u058a\u058d\5\u00f0y\2\u058b\u058c\7\\\2\2\u058c\u058e\5\u00f0y\2"+ - "\u058d\u058b\3\2\2\2\u058d\u058e\3\2\2\2\u058e\u00fb\3\2\2\2\u058f\u0591"+ - "\7U\2\2\u0590\u058f\3\2\2\2\u0590\u0591\3\2\2\2\u0591\u0592\3\2\2\2\u0592"+ - "\u0593\7]\2\2\u0593\u0594\7\20\2\2\u0594\u0595\5\u00fe\u0080\2\u0595\u0596"+ - "\7\21\2\2\u0596\u0597\5\u00f0y\2\u0597\u00fd\3\2\2\2\u0598\u059a\5\u0100"+ - "\u0081\2\u0599\u059b\5l\67\2\u059a\u0599\3\2\2\2\u059a\u059b\3\2\2\2\u059b"+ - "\u059c\3\2\2\2\u059c\u059e\7\13\2\2\u059d\u059f\5p9\2\u059e\u059d\3\2"+ - "\2\2\u059e\u059f\3\2\2\2\u059f\u05a9\3\2\2\2\u05a0\u05a1\5\6\4\2\u05a1"+ - "\u05a2\7^\2\2\u05a2\u05a3\5l\67\2\u05a3\u05a9\3\2\2\2\u05a4\u05a5\5\u00e2"+ - "r\2\u05a5\u05a6\7^\2\2\u05a6\u05a7\5l\67\2\u05a7\u05a9\3\2\2\2\u05a8\u0598"+ - "\3\2\2\2\u05a8\u05a0\3\2\2\2\u05a8\u05a4\3\2\2\2\u05a9\u00ff\3\2\2\2\u05aa"+ - "\u05b0\5\u00f6|\2\u05ab\u05ad\5l\67\2\u05ac\u05ab\3\2\2\2\u05ac\u05ad"+ - "\3\2\2\2\u05ad\u05ae\3\2\2\2\u05ae\u05b0\7\13\2\2\u05af\u05aa\3\2\2\2"+ - "\u05af\u05ac\3\2\2\2\u05b0\u0101\3\2\2\2\u05b1\u05b2\7_\2\2\u05b2\u05b3"+ - "\7\20\2\2\u05b3\u05b4\5l\67\2\u05b4\u05b5\7\21\2\2\u05b5\u05b6\5\u00f0"+ - "y\2\u05b6\u0103\3\2\2\2\u05b7\u05b8\7`\2\2\u05b8\u05b9\5\u00f0y\2\u05b9"+ - "\u05ba\7_\2\2\u05ba\u05bb\7\20\2\2\u05bb\u05bc\5l\67\2\u05bc\u05bd\7\21"+ - "\2\2\u05bd\u05be\7\13\2\2\u05be\u0105\3\2\2\2\u05bf\u05c0\7a\2\2\u05c0"+ - "\u05c1\7\20\2\2\u05c1\u05c2\5l\67\2\u05c2\u05c3\7\21\2\2\u05c3\u05c7\7"+ - "\16\2\2\u05c4\u05c6\5\u0108\u0085\2\u05c5\u05c4\3\2\2\2\u05c6\u05c9\3"+ - "\2\2\2\u05c7\u05c5\3\2\2\2\u05c7\u05c8\3\2\2\2\u05c8\u05cb\3\2\2\2\u05c9"+ - "\u05c7\3\2\2\2\u05ca\u05cc\5\u010a\u0086\2\u05cb\u05ca\3\2\2\2\u05cb\u05cc"+ - "\3\2\2\2\u05cc\u05cd\3\2\2\2\u05cd\u05ce\7\17\2\2\u05ce\u0107\3\2\2\2"+ - "\u05cf\u05d1\5\u0118\u008d\2\u05d0\u05cf\3\2\2\2\u05d1\u05d4\3\2\2\2\u05d2"+ - "\u05d0\3\2\2\2\u05d2\u05d3\3\2\2\2\u05d3\u05d5\3\2\2\2\u05d4\u05d2\3\2"+ - "\2\2\u05d5\u05d6\7b\2\2\u05d6\u05d7\5l\67\2\u05d7\u05d8\7\27\2\2\u05d8"+ - "\u05d9\5\u00eex\2\u05d9\u0109\3\2\2\2\u05da\u05dc\5\u0118\u008d\2\u05db"+ - "\u05da\3\2\2\2\u05dc\u05df\3\2\2\2\u05dd\u05db\3\2\2\2\u05dd\u05de\3\2"+ - "\2\2\u05de\u05e0\3\2\2\2\u05df\u05dd\3\2\2\2\u05e0\u05e1\7c\2\2\u05e1"+ - "\u05e2\7\27\2\2\u05e2\u05e3\5\u00eex\2\u05e3\u010b\3\2\2\2\u05e4\u05e5"+ - "\7d\2\2\u05e5\u05e6\7\13\2\2\u05e6\u010d\3\2\2\2\u05e7\u05e8\7e\2\2\u05e8"+ - "\u05f2\5\32\16\2\u05e9\u05eb\5\u0110\u0089\2\u05ea\u05e9\3\2\2\2\u05eb"+ - "\u05ec\3\2\2\2\u05ec\u05ea\3\2\2\2\u05ec\u05ed\3\2\2\2\u05ed\u05ef\3\2"+ - "\2\2\u05ee\u05f0\5\u0114\u008b\2\u05ef\u05ee\3\2\2\2\u05ef\u05f0\3\2\2"+ - "\2\u05f0\u05f3\3\2\2\2\u05f1\u05f3\5\u0114\u008b\2\u05f2\u05ea\3\2\2\2"+ - "\u05f2\u05f1\3\2\2\2\u05f3\u010f\3\2\2\2\u05f4\u05f5\5\u0112\u008a\2\u05f5"+ - "\u05f6\5\32\16\2\u05f6\u05ff\3\2\2\2\u05f7\u05f8\7f\2\2\u05f8\u05fa\5"+ - "\u014c\u00a7\2\u05f9\u05fb\5\u0112\u008a\2\u05fa\u05f9\3\2\2\2\u05fa\u05fb"+ - "\3\2\2\2\u05fb\u05fc\3\2\2\2\u05fc\u05fd\5\32\16\2\u05fd\u05ff\3\2\2\2"+ - "\u05fe\u05f4\3\2\2\2\u05fe\u05f7\3\2\2\2\u05ff\u0111\3\2\2\2\u0600\u0601"+ - "\7g\2\2\u0601\u0602\7\20\2\2\u0602\u0605\5\u00e2r\2\u0603\u0604\7\3\2"+ - "\2\u0604\u0606\5\u00e2r\2\u0605\u0603\3\2\2\2\u0605\u0606\3\2\2\2\u0606"+ - "\u0607\3\2\2\2\u0607\u0608\7\21\2\2\u0608\u0113\3\2\2\2\u0609\u060a\7"+ - "h\2\2\u060a\u060b\5\32\16\2\u060b\u0115\3\2\2\2\u060c\u060e\7i\2\2\u060d"+ - "\u060f\5l\67\2\u060e\u060d\3\2\2\2\u060e\u060f\3\2\2\2\u060f\u0610\3\2"+ - "\2\2\u0610\u0611\7\13\2\2\u0611\u0117\3\2\2\2\u0612\u0613\5\u00e2r\2\u0613"+ - "\u0614\7\27\2\2\u0614\u0119\3\2\2\2\u0615\u0617\7j\2\2\u0616\u0618\5\u00e2"+ - "r\2\u0617\u0616\3\2\2\2\u0617\u0618\3\2\2\2\u0618\u0619\3\2\2\2\u0619"+ - "\u061a\7\13\2\2\u061a\u011b\3\2\2\2\u061b\u061d\7k\2\2\u061c\u061e\5\u00e2"+ - "r\2\u061d\u061c\3\2\2\2\u061d\u061e\3\2\2\2\u061e\u061f\3\2\2\2\u061f"+ - "\u0620\7\13\2\2\u0620\u011d\3\2\2\2\u0621\u0622\7l\2\2\u0622\u0623\5l"+ - "\67\2\u0623\u0624\7\13\2\2\u0624\u011f\3\2\2\2\u0625\u0626\7m\2\2\u0626"+ - "\u0627\5l\67\2\u0627\u0628\7\13\2\2\u0628\u0121\3\2\2\2\u0629\u062a\5"+ - "\u0124\u0093\2\u062a\u062b\7\13\2\2\u062b\u0123\3\2\2\2\u062c\u062d\7"+ - "n\2\2\u062d\u062e\7\20\2\2\u062e\u0631\5l\67\2\u062f\u0630\7\3\2\2\u0630"+ - "\u0632\5l\67\2\u0631\u062f\3\2\2\2\u0631\u0632\3\2\2\2\u0632\u0634\3\2"+ - "\2\2\u0633\u0635\7\3\2\2\u0634\u0633\3\2\2\2\u0634\u0635\3\2\2\2\u0635"+ - "\u0636\3\2\2\2\u0636\u0637\7\21\2\2\u0637\u0125\3\2\2\2\u0638\u066a\5"+ - "\62\32\2\u0639\u066a\5b\62\2\u063a\u066a\5\u0154\u00ab\2\u063b\u063d\7"+ - "\34\2\2\u063c\u063b\3\2\2\2\u063c\u063d\3\2\2\2\u063d\u063e\3\2\2\2\u063e"+ - "\u063f\5\22\n\2\u063f\u0640\7\13\2\2\u0640\u066a\3\2\2\2\u0641\u0643\7"+ - "\34\2\2\u0642\u0641\3\2\2\2\u0642\u0643\3\2\2\2\u0643\u0644\3\2\2\2\u0644"+ - "\u0645\5F$\2\u0645\u0646\7\13\2\2\u0646\u066a\3\2\2\2\u0647\u0649\7\34"+ - "\2\2\u0648\u0647\3\2\2\2\u0648\u0649\3\2\2\2\u0649\u064a\3\2\2\2\u064a"+ - "\u064b\5H%\2\u064b\u064c\7\13\2\2\u064c\u066a\3\2\2\2\u064d\u064e\5\22"+ - "\n\2\u064e\u064f\5\30\r\2\u064f\u066a\3\2\2\2\u0650\u0652\5\26\f\2\u0651"+ - "\u0650\3\2\2\2\u0651\u0652\3\2\2\2\u0652\u0653\3\2\2\2\u0653\u0654\7\""+ - "\2\2\u0654\u0655\5\u00e2r\2\u0655\u0656\5\30\r\2\u0656\u066a\3\2\2\2\u0657"+ - "\u0659\5\26\f\2\u0658\u0657\3\2\2\2\u0658\u0659\3\2\2\2\u0659\u065a\3"+ - "\2\2\2\u065a\u065b\7#\2\2\u065b\u065c\5\u00e2r\2\u065c\u065d\5\34\17\2"+ - "\u065d\u065e\5\30\r\2\u065e\u066a\3\2\2\2\u065f\u0661\t\3\2\2\u0660\u0662"+ - "\5\u014c\u00a7\2\u0661\u0660\3\2\2\2\u0661\u0662\3\2\2\2\u0662\u0663\3"+ - "\2\2\2\u0663\u0664\5<\37\2\u0664\u0665\7\13\2\2\u0665\u066a\3\2\2\2\u0666"+ - "\u0667\5\4\3\2\u0667\u0668\7\13\2\2\u0668\u066a\3\2\2\2\u0669\u0638\3"+ - "\2\2\2\u0669\u0639\3\2\2\2\u0669\u063a\3\2\2\2\u0669\u063c\3\2\2\2\u0669"+ - "\u0642\3\2\2\2\u0669\u0648\3\2\2\2\u0669\u064d\3\2\2\2\u0669\u0651\3\2"+ - "\2\2\u0669\u0658\3\2\2\2\u0669\u065f\3\2\2\2\u0669\u0666\3\2\2\2\u066a"+ - "\u0127\3\2\2\2\u066b\u066c\t\20\2\2\u066c\u0129\3\2\2\2\u066d\u066f\5"+ - "\u012c\u0097\2\u066e\u066d\3\2\2\2\u066e\u066f\3\2\2\2\u066f\u0671\3\2"+ - "\2\2\u0670\u0672\5\u012e\u0098\2\u0671\u0670\3\2\2\2\u0671\u0672\3\2\2"+ - "\2\u0672\u0676\3\2\2\2\u0673\u0675\5\u0130\u0099\2\u0674\u0673\3\2\2\2"+ - "\u0675\u0678\3\2\2\2\u0676\u0674\3\2\2\2\u0676\u0677\3\2\2\2\u0677\u067c"+ - "\3\2\2\2\u0678\u0676\3\2\2\2\u0679\u067b\5\u013e\u00a0\2\u067a\u0679\3"+ - "\2\2\2\u067b\u067e\3\2\2\2\u067c\u067a\3\2\2\2\u067c\u067d\3\2\2\2\u067d"+ - "\u0682\3\2\2\2\u067e\u067c\3\2\2\2\u067f\u0681\5\u0126\u0094\2\u0680\u067f"+ - "\3\2\2\2\u0681\u0684\3\2\2\2\u0682\u0680\3\2\2\2\u0682\u0683\3\2\2\2\u0683"+ - "\u012b\3\2\2\2\u0684\u0682\3\2\2\2\u0685\u0689\7o\2\2\u0686\u0688\n\21"+ - "\2\2\u0687\u0686\3\2\2\2\u0688\u068b\3\2\2\2\u0689\u0687\3\2\2\2\u0689"+ - "\u068a\3\2\2\2\u068a\u068c\3\2\2\2\u068b\u0689\3\2\2\2\u068c\u068d\7}"+ - "\2\2\u068d\u012d\3\2\2\2\u068e\u068f\5j\66\2\u068f\u0690\7p\2\2\u0690"+ - "\u0691\5\u0132\u009a\2\u0691\u0692\7\13\2\2\u0692\u012f\3\2\2\2\u0693"+ - "\u0696\5\u0134\u009b\2\u0694\u0696\5\u013c\u009f\2\u0695\u0693\3\2\2\2"+ - "\u0695\u0694\3\2\2\2\u0696\u0131\3\2\2\2\u0697\u069c\5\u00e2r\2\u0698"+ - "\u0699\7\3\2\2\u0699\u069b\5\u00e2r\2\u069a\u0698\3\2\2\2\u069b\u069e"+ - "\3\2\2\2\u069c\u069a\3\2\2\2\u069c\u069d\3\2\2\2\u069d\u0133\3\2\2\2\u069e"+ - "\u069c\3\2\2\2\u069f\u06a0\5j\66\2\u06a0\u06a1\5\u0136\u009c\2\u06a1\u0135"+ - "\3\2\2\2\u06a2\u06a3\7q\2\2\u06a3\u06a6\5\u0146\u00a4\2\u06a4\u06a5\7"+ - "Z\2\2\u06a5\u06a7\5\u00e2r\2\u06a6\u06a4\3\2\2\2\u06a6\u06a7\3\2\2\2\u06a7"+ - "\u06ab\3\2\2\2\u06a8\u06aa\5\u0138\u009d\2\u06a9\u06a8\3\2\2\2\u06aa\u06ad"+ - "\3\2\2\2\u06ab\u06a9\3\2\2\2\u06ab\u06ac\3\2\2\2\u06ac\u06ae\3\2\2\2\u06ad"+ - "\u06ab\3\2\2\2\u06ae\u06af\7\13\2\2\u06af\u0137\3\2\2\2\u06b0\u06b1\7"+ - "r\2\2\u06b1\u06b5\5\u013a\u009e\2\u06b2\u06b3\7s\2\2\u06b3\u06b5\5\u013a"+ - "\u009e\2\u06b4\u06b0\3\2\2\2\u06b4\u06b2\3\2\2\2\u06b5\u0139\3\2\2\2\u06b6"+ - "\u06bb\5\u00e2r\2\u06b7\u06b8\7\3\2\2\u06b8\u06ba\5\u00e2r\2\u06b9\u06b7"+ - "\3\2\2\2\u06ba\u06bd\3\2\2\2\u06bb\u06b9\3\2\2\2\u06bb\u06bc\3\2\2\2\u06bc"+ - "\u013b\3\2\2\2\u06bd\u06bb\3\2\2\2\u06be\u06bf\5j\66\2\u06bf\u06c0\7t"+ - "\2\2\u06c0\u06c4\5\u0146\u00a4\2\u06c1\u06c3\5\u0138\u009d\2\u06c2\u06c1"+ - "\3\2\2\2\u06c3\u06c6\3\2\2\2\u06c4\u06c2\3\2\2\2\u06c4\u06c5\3\2\2\2\u06c5"+ - "\u06c7\3\2\2\2\u06c6\u06c4\3\2\2\2\u06c7\u06c8\7\13\2\2\u06c8\u013d\3"+ - "\2\2\2\u06c9\u06ca\5j\66\2\u06ca\u06cb\7u\2\2\u06cb\u06cc\5\u0144\u00a3"+ - "\2\u06cc\u06cd\7\13\2\2\u06cd\u013f\3\2\2\2\u06ce\u06cf\5j\66\2\u06cf"+ - "\u06d0\7u\2\2\u06d0\u06d1\7v\2\2\u06d1\u06d6\5\u00e2r\2\u06d2\u06d3\7"+ - "\26\2\2\u06d3\u06d5\5\u00e2r\2\u06d4\u06d2\3\2\2\2\u06d5\u06d8\3\2\2\2"+ - "\u06d6\u06d4\3\2\2\2\u06d6\u06d7\3\2\2\2\u06d7\u06d9\3\2\2\2\u06d8\u06d6"+ - "\3\2\2\2\u06d9\u06da\7\13\2\2\u06da\u0141\3\2\2\2\u06db\u06df\5\u0140"+ - "\u00a1\2\u06dc\u06de\5\u0126\u0094\2\u06dd\u06dc\3\2\2\2\u06de\u06e1\3"+ - "\2\2\2\u06df\u06dd\3\2\2\2\u06df\u06e0\3\2\2\2\u06e0\u06e2\3\2\2\2\u06e1"+ - "\u06df\3\2\2\2\u06e2\u06e3\7\2\2\3\u06e3\u0143\3\2\2\2\u06e4\u06e5\5|"+ - "?\2\u06e5\u0145\3\2\2\2\u06e6\u06ea\5\u0144\u00a3\2\u06e7\u06e9\5\u0148"+ - "\u00a5\2\u06e8\u06e7\3\2\2\2\u06e9\u06ec\3\2\2\2\u06ea\u06e8\3\2\2\2\u06ea"+ - "\u06eb\3\2\2\2\u06eb\u0147\3\2\2\2\u06ec\u06ea\3\2\2\2\u06ed\u06ee\7["+ - "\2\2\u06ee\u06ef\7\20\2\2\u06ef\u06f0\5\u014a\u00a6\2\u06f0\u06f1\7\21"+ - "\2\2\u06f1\u06f2\5\u0144\u00a3\2\u06f2\u0149\3\2\2\2\u06f3\u06f6\5\u0132"+ - "\u009a\2\u06f4\u06f5\7!\2\2\u06f5\u06f7\5|?\2\u06f6\u06f4\3\2\2\2\u06f6"+ - "\u06f7\3\2\2\2\u06f7\u014b\3\2\2\2\u06f8\u06fa\5\u014e\u00a8\2\u06f9\u06fb"+ - "\5\u0150\u00a9\2\u06fa\u06f9\3\2\2\2\u06fa\u06fb\3\2\2\2\u06fb\u014d\3"+ - "\2\2\2\u06fc\u06ff\5\u00e4s\2\u06fd\u06ff\7\b\2\2\u06fe\u06fc\3\2\2\2"+ - "\u06fe\u06fd\3\2\2\2\u06ff\u014f\3\2\2\2\u0700\u0701\7)\2\2\u0701\u0702"+ - "\5\u0152\u00aa\2\u0702\u0703\7*\2\2\u0703\u0151\3\2\2\2\u0704\u0709\5"+ - "\u014c\u00a7\2\u0705\u0706\7\3\2\2\u0706\u0708\5\u014c\u00a7\2\u0707\u0705"+ - "\3\2\2\2\u0708\u070b\3\2\2\2\u0709\u0707\3\2\2\2\u0709\u070a\3\2\2\2\u070a"+ - "\u0153\3\2\2\2\u070b\u0709\3\2\2\2\u070c\u070d\5j\66\2\u070d\u070e\7w"+ - "\2\2\u070e\u070f\5\u0156\u00ac\2\u070f\u0155\3\2\2\2\u0710\u0711\5\u0158"+ - "\u00ad\2\u0711\u0157\3\2\2\2\u0712\u0714\5\u015a\u00ae\2\u0713\u0715\5"+ - "h\65\2\u0714\u0713\3\2\2\2\u0714\u0715\3\2\2\2\u0715\u0716\3\2\2\2\u0716"+ - "\u0717\5\34\17\2\u0717\u0718\7\13\2\2\u0718\u0159\3\2\2\2\u0719\u071b"+ - "\5\26\f\2\u071a\u0719\3\2\2\2\u071a\u071b\3\2\2\2\u071b\u071c\3\2\2\2"+ - "\u071c\u071d\5\u00e2r\2\u071d\u015b\3\2\2\2\u00d9\u015e\u0165\u016e\u0172"+ - "\u0175\u0179\u017e\u0184\u018a\u0191\u0196\u019c\u01a2\u01a5\u01ac\u01af"+ - "\u01bf\u01c7\u01ce\u01d3\u01db\u01df\u01e9\u01ed\u01f4\u01f8\u01fb\u0203"+ - "\u0207\u020b\u0211\u0216\u021b\u0220\u0222\u0226\u022b\u022e\u0231\u0234"+ - "\u023c\u0243\u0248\u0253\u0257\u025b\u025f\u0263\u0267\u026c\u0271\u0279"+ - "\u027b\u0280\u0282\u0286\u028b\u028d\u0293\u0298\u029c\u02a0\u02a3\u02aa"+ - "\u02b2\u02bc\u02c4\u02c7\u02cd\u02d6\u02de\u02e8\u02f4\u02f8\u0300\u0307"+ - "\u030c\u0312\u0319\u0327\u0330\u033b\u033f\u034a\u0352\u035b\u035e\u0362"+ - "\u036d\u0371\u0379\u0380\u038f\u0398\u03a3\u03ab\u03b4\u03b7\u03ba\u03bd"+ - "\u03c2\u03c4\u03c9\u03cc\u03d4\u03d8\u03da\u03f1\u03f9\u0400\u0402\u040b"+ - "\u0413\u0416\u0420\u0427\u042c\u0432\u0439\u043c\u0442\u044c\u0453\u045b"+ - "\u0463\u046a\u0470\u047a\u0480\u0489\u0491\u0493\u049a\u04a2\u04a4\u04ab"+ - "\u04b3\u04b5\u04bf\u04c8\u04ca\u04d4\u04dd\u04df\u04e9\u04f2\u04f4\u04ff"+ - "\u0506\u050b\u051d\u0520\u0526\u052e\u0532\u0538\u0540\u0545\u054c\u0553"+ - "\u055d\u0563\u0579\u057c\u058d\u0590\u059a\u059e\u05a8\u05ac\u05af\u05c7"+ - "\u05cb\u05d2\u05dd\u05ec\u05ef\u05f2\u05fa\u05fe\u0605\u060e\u0617\u061d"+ - "\u0631\u0634\u063c\u0642\u0648\u0651\u0658\u0661\u0669\u066e\u0671\u0676"+ - "\u067c\u0682\u0689\u0695\u069c\u06a6\u06ab\u06b4\u06bb\u06c4\u06d6\u06df"+ - "\u06ea\u06f6\u06fa\u06fe\u0709\u0714\u071a"; + "\4\u00ae\t\u00ae\4\u00af\t\u00af\4\u00b0\t\u00b0\4\u00b1\t\u00b1\4\u00b2"+ + "\t\u00b2\4\u00b3\t\u00b3\4\u00b4\t\u00b4\4\u00b5\t\u00b5\4\u00b6\t\u00b6"+ + "\4\u00b7\t\u00b7\4\u00b8\t\u00b8\4\u00b9\t\u00b9\4\u00ba\t\u00ba\4\u00bb"+ + "\t\u00bb\4\u00bc\t\u00bc\3\2\3\2\5\2\u017b\n\2\3\3\3\3\3\3\7\3\u0180\n"+ + "\3\f\3\16\3\u0183\13\3\3\4\3\4\3\4\3\4\3\5\3\5\5\5\u018b\n\5\3\5\3\5\5"+ + "\5\u018f\n\5\3\5\5\5\u0192\n\5\3\6\3\6\5\6\u0196\n\6\3\7\3\7\3\7\5\7\u019b"+ + "\n\7\3\7\3\7\7\7\u019f\n\7\f\7\16\7\u01a2\13\7\3\b\3\b\3\b\5\b\u01a7\n"+ + "\b\3\t\3\t\3\t\7\t\u01ac\n\t\f\t\16\t\u01af\13\t\3\n\3\n\5\n\u01b3\n\n"+ + "\3\n\3\n\3\n\3\13\5\13\u01b9\n\13\3\13\3\13\3\f\3\f\5\f\u01bf\n\f\3\r"+ + "\5\r\u01c2\n\r\3\r\3\r\3\r\3\r\3\r\5\r\u01c9\n\r\3\r\5\r\u01cc\n\r\3\16"+ + "\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\5\17"+ + "\u01dc\n\17\3\17\3\17\3\17\3\17\3\17\3\17\5\17\u01e4\n\17\3\20\3\20\3"+ + "\20\7\20\u01e9\n\20\f\20\16\20\u01ec\13\20\3\21\3\21\5\21\u01f0\n\21\3"+ + "\22\3\22\3\22\3\22\7\22\u01f6\n\22\f\22\16\22\u01f9\13\22\3\22\5\22\u01fc"+ + "\n\22\3\22\3\22\3\23\3\23\3\23\3\23\7\23\u0204\n\23\f\23\16\23\u0207\13"+ + "\23\3\23\5\23\u020a\n\23\3\23\3\23\3\24\3\24\3\24\5\24\u0211\n\24\3\25"+ + "\3\25\5\25\u0215\n\25\3\25\5\25\u0218\n\25\3\25\3\25\3\25\3\26\3\26\3"+ + "\26\5\26\u0220\n\26\3\26\3\26\5\26\u0224\n\26\3\27\3\27\5\27\u0228\n\27"+ + "\3\27\3\27\3\27\3\27\5\27\u022e\n\27\3\30\3\30\3\30\5\30\u0233\n\30\3"+ + "\31\3\31\3\31\5\31\u0238\n\31\3\31\3\31\3\31\5\31\u023d\n\31\5\31\u023f"+ + "\n\31\3\32\3\32\3\33\3\33\7\33\u0245\n\33\f\33\16\33\u0248\13\33\3\33"+ + "\5\33\u024b\n\33\3\33\3\33\3\33\5\33\u0250\n\33\3\33\5\33\u0253\n\33\3"+ + "\33\5\33\u0256\n\33\3\33\5\33\u0259\n\33\3\33\3\33\3\33\3\33\7\33\u025f"+ + "\n\33\f\33\16\33\u0262\13\33\3\33\3\33\3\33\3\33\5\33\u0268\n\33\3\33"+ + "\7\33\u026b\n\33\f\33\16\33\u026e\13\33\3\33\3\33\3\33\5\33\u0273\n\33"+ + "\3\33\5\33\u0276\n\33\3\33\5\33\u0279\n\33\3\33\5\33\u027c\n\33\3\33\3"+ + "\33\3\33\3\33\7\33\u0282\n\33\f\33\16\33\u0285\13\33\3\33\3\33\3\33\3"+ + "\33\5\33\u028b\n\33\3\33\3\33\3\33\5\33\u0290\n\33\3\34\3\34\3\34\3\35"+ + "\3\35\3\35\3\35\3\35\3\35\5\35\u029b\n\35\3\36\3\36\5\36\u029f\n\36\3"+ + "\36\3\36\5\36\u02a3\n\36\3\36\3\36\5\36\u02a7\n\36\3\36\3\36\5\36\u02ab"+ + "\n\36\3\36\3\36\5\36\u02af\n\36\3\37\3\37\3\37\5\37\u02b4\n\37\3\37\3"+ + "\37\3\37\5\37\u02b9\n\37\3\37\3\37\3\37\3\37\3\37\3\37\5\37\u02c1\n\37"+ + "\5\37\u02c3\n\37\3\37\3\37\3\37\5\37\u02c8\n\37\5\37\u02ca\n\37\3\37\3"+ + "\37\5\37\u02ce\n\37\3\37\3\37\3\37\5\37\u02d3\n\37\5\37\u02d5\n\37\3\37"+ + "\3\37\3\37\3\37\5\37\u02db\n\37\3\37\3\37\3\37\5\37\u02e0\n\37\3\37\3"+ + "\37\5\37\u02e4\n\37\3\37\3\37\5\37\u02e8\n\37\3\37\5\37\u02eb\n\37\3 "+ + "\3 \3 \7 \u02f0\n \f \16 \u02f3\13 \3!\3!\3!\3!\3\"\5\"\u02fa\n\"\3\""+ + "\3\"\3\"\3\"\3#\3#\3#\3#\5#\u0304\n#\3$\3$\3$\3$\3$\3$\5$\u030c\n$\3%"+ + "\5%\u030f\n%\3%\3%\3%\3&\5&\u0315\n&\3&\3&\3&\3&\3\'\3\'\3\'\5\'\u031e"+ + "\n\'\3\'\3\'\3(\3(\3(\3(\5(\u0326\n(\3(\3(\3)\3)\3)\3)\7)\u032e\n)\f)"+ + "\16)\u0331\13)\3*\3*\3*\3*\3*\3*\3*\3*\3*\5*\u033c\n*\3+\3+\5+\u0340\n"+ + "+\3+\3+\3+\3+\7+\u0346\n+\f+\16+\u0349\13+\3,\3,\3,\3,\5,\u034f\n,\3,"+ + "\3,\3-\5-\u0354\n-\3-\3-\3-\3-\5-\u035a\n-\3-\3-\3-\3-\3-\5-\u0361\n-"+ + "\3.\3.\3.\3.\3/\3/\3/\3\60\3\60\3\60\3\61\3\61\5\61\u036f\n\61\3\61\3"+ + "\61\3\61\3\61\3\62\3\62\3\62\5\62\u0378\n\62\3\63\3\63\3\63\3\63\3\63"+ + "\3\63\3\63\7\63\u0381\n\63\f\63\16\63\u0384\13\63\3\63\5\63\u0387\n\63"+ + "\3\63\3\63\3\64\3\64\3\64\3\65\3\65\3\65\3\65\5\65\u0392\n\65\3\66\3\66"+ + "\3\66\3\66\7\66\u0398\n\66\f\66\16\66\u039b\13\66\3\66\3\66\3\67\3\67"+ + "\3\67\3\67\5\67\u03a3\n\67\3\67\5\67\u03a6\n\67\7\67\u03a8\n\67\f\67\16"+ + "\67\u03ab\13\67\38\38\38\38\38\38\78\u03b3\n8\f8\168\u03b6\138\38\58\u03b9"+ + "\n8\39\39\39\39\39\39\59\u03c1\n9\3:\3:\3:\7:\u03c6\n:\f:\16:\u03c9\13"+ + ":\3;\3;\3;\3;\3;\3;\3;\3;\3;\3;\3;\3;\3;\3;\5;\u03d9\n;\3<\3<\3<\3<\3"+ + "<\3<\7<\u03e1\n<\f<\16<\u03e4\13<\3<\5<\u03e7\n<\3<\3<\3=\3=\3=\5=\u03ee"+ + "\n=\3=\3=\3>\3>\3>\3>\3>\3>\7>\u03f8\n>\f>\16>\u03fb\13>\3>\5>\u03fe\n"+ + ">\3>\3>\3?\3?\3?\5?\u0405\n?\3?\3?\3@\3@\3@\3@\3@\3@\3@\3@\7@\u0411\n"+ + "@\f@\16@\u0414\13@\3@\5@\u0417\n@\3@\3@\3A\3A\3A\3A\3B\3B\3B\5B\u0422"+ + "\nB\3C\3C\3C\3C\3C\5C\u0429\nC\3D\3D\3D\3D\5D\u042f\nD\3E\3E\3E\3F\3F"+ + "\3G\3G\3G\5G\u0439\nG\5G\u043b\nG\3G\3G\3H\3H\3H\3H\3I\3I\3I\3I\3I\3I"+ + "\3I\5I\u044a\nI\3J\3J\3K\3K\3L\3L\3M\6M\u0453\nM\rM\16M\u0454\3N\3N\3"+ + "N\3N\3N\3N\5N\u045d\nN\3O\3O\3O\3O\3O\7O\u0464\nO\fO\16O\u0467\13O\5O"+ + "\u0469\nO\3P\5P\u046c\nP\3P\5P\u046f\nP\3P\3P\3P\5P\u0474\nP\5P\u0476"+ + "\nP\3P\3P\3Q\5Q\u047b\nQ\3Q\5Q\u047e\nQ\3Q\3Q\3Q\3Q\7Q\u0484\nQ\fQ\16"+ + "Q\u0487\13Q\3Q\5Q\u048a\nQ\5Q\u048c\nQ\3Q\3Q\3R\3R\3R\3R\3S\3S\3S\3T\3"+ + "T\3T\3U\3U\3U\3V\3V\3W\3W\3W\3W\5W\u04a3\nW\3W\3W\3X\3X\3X\3X\5X\u04ab"+ + "\nX\3X\3X\3Y\3Y\3Y\5Y\u04b2\nY\5Y\u04b4\nY\3Y\3Y\3Z\3Z\3Z\7Z\u04bb\nZ"+ + "\fZ\16Z\u04be\13Z\3Z\3Z\3Z\7Z\u04c3\nZ\fZ\16Z\u04c6\13Z\5Z\u04c8\nZ\3"+ + "[\3[\3[\3\\\3\\\3\\\7\\\u04d0\n\\\f\\\16\\\u04d3\13\\\3\\\3\\\7\\\u04d7"+ + "\n\\\f\\\16\\\u04da\13\\\7\\\u04dc\n\\\f\\\16\\\u04df\13\\\3\\\3\\\3\\"+ + "\5\\\u04e4\n\\\3]\3]\3]\3]\3]\5]\u04eb\n]\3^\5^\u04ee\n^\3^\3^\3_\3_\5"+ + "_\u04f4\n_\3`\3`\3a\3a\3a\3a\3a\3a\5a\u04fe\na\3b\3b\3b\7b\u0503\nb\f"+ + "b\16b\u0506\13b\3c\3c\3c\7c\u050b\nc\fc\16c\u050e\13c\3d\3d\3d\7d\u0513"+ + "\nd\fd\16d\u0516\13d\3e\3e\3e\3e\5e\u051c\ne\3e\3e\3e\3e\5e\u0522\ne\3"+ + "f\3f\3g\3g\3g\3g\3g\3g\5g\u052c\ng\3g\3g\3g\3g\5g\u0532\ng\3h\3h\3i\3"+ + "i\3i\7i\u0539\ni\fi\16i\u053c\13i\3i\3i\3i\6i\u0541\ni\ri\16i\u0542\5"+ + "i\u0545\ni\3j\3j\3j\7j\u054a\nj\fj\16j\u054d\13j\3j\3j\3j\6j\u0552\nj"+ + "\rj\16j\u0553\5j\u0556\nj\3k\3k\3k\7k\u055b\nk\fk\16k\u055e\13k\3k\3k"+ + "\3k\6k\u0563\nk\rk\16k\u0564\5k\u0567\nk\3l\3l\3m\3m\3m\3m\7m\u056f\n"+ + "m\fm\16m\u0572\13m\3m\3m\3m\3m\6m\u0578\nm\rm\16m\u0579\5m\u057c\nm\3"+ + "n\3n\3o\3o\3o\3o\7o\u0584\no\fo\16o\u0587\13o\3o\3o\3o\3o\6o\u058d\no"+ + "\ro\16o\u058e\5o\u0591\no\3p\3p\3q\3q\3q\3q\7q\u0599\nq\fq\16q\u059c\13"+ + "q\3q\3q\3q\3q\6q\u05a2\nq\rq\16q\u05a3\5q\u05a6\nq\3r\3r\3s\3s\3s\3s\3"+ + "s\3s\3s\5s\u05b1\ns\3s\3s\3s\3s\3s\5s\u05b8\ns\3t\3t\3t\5t\u05bd\nt\3"+ + "u\3u\3v\3v\3w\3w\3x\3x\3x\3y\3y\3y\3y\3y\7y\u05cd\ny\fy\16y\u05d0\13y"+ + "\5y\u05d2\ny\3z\3z\3{\3{\5{\u05d8\n{\3|\3|\3}\3}\7}\u05de\n}\f}\16}\u05e1"+ + "\13}\3}\5}\u05e4\n}\3}\3}\3}\3}\5}\u05ea\n}\3~\3~\3~\3~\3~\3~\5~\u05f2"+ + "\n~\3\177\3\177\3\177\5\177\u05f7\n\177\3\u0080\3\u0080\3\u0081\3\u0081"+ + "\3\u0081\5\u0081\u05fe\n\u0081\3\u0082\3\u0082\3\u0082\3\u0083\3\u0083"+ + "\5\u0083\u0605\n\u0083\3\u0084\3\u0084\3\u0084\3\u0085\3\u0085\3\u0086"+ + "\7\u0086\u060d\n\u0086\f\u0086\16\u0086\u0610\13\u0086\3\u0087\7\u0087"+ + "\u0613\n\u0087\f\u0087\16\u0087\u0616\13\u0087\3\u0087\3\u0087\3\u0088"+ + "\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088"+ + "\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088\5\u0088\u062b"+ + "\n\u0088\3\u0089\5\u0089\u062e\n\u0089\3\u0089\3\u0089\3\u008a\3\u008a"+ + "\3\u008a\3\u008b\3\u008b\3\u008b\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c"+ + "\3\u008c\3\u008c\5\u008c\u063f\n\u008c\3\u008c\3\u008c\3\u008c\3\u008c"+ + "\3\u008c\3\u008c\3\u008c\5\u008c\u0648\n\u008c\3\u008c\3\u008c\3\u008c"+ + "\3\u008c\5\u008c\u064e\n\u008c\5\u008c\u0650\n\u008c\3\u008d\5\u008d\u0653"+ + "\n\u008d\3\u008d\3\u008d\3\u008d\3\u008d\3\u008d\3\u008d\3\u008e\3\u008e"+ + "\5\u008e\u065d\n\u008e\3\u008e\3\u008e\5\u008e\u0661\n\u008e\3\u008e\3"+ + "\u008e\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e\5\u008e\u066b\n"+ + "\u008e\3\u008f\3\u008f\5\u008f\u066f\n\u008f\3\u008f\5\u008f\u0672\n\u008f"+ + "\3\u0090\3\u0090\3\u0090\3\u0090\3\u0090\3\u0090\3\u0091\3\u0091\3\u0091"+ + "\3\u0091\3\u0091\3\u0091\3\u0091\3\u0091\3\u0092\3\u0092\3\u0092\3\u0092"+ + "\3\u0092\3\u0092\7\u0092\u0688\n\u0092\f\u0092\16\u0092\u068b\13\u0092"+ + "\3\u0092\5\u0092\u068e\n\u0092\3\u0092\3\u0092\3\u0093\7\u0093\u0693\n"+ + "\u0093\f\u0093\16\u0093\u0696\13\u0093\3\u0093\3\u0093\3\u0093\3\u0093"+ + "\5\u0093\u069c\n\u0093\3\u0093\3\u0093\3\u0093\3\u0094\7\u0094\u06a2\n"+ + "\u0094\f\u0094\16\u0094\u06a5\13\u0094\3\u0094\3\u0094\3\u0094\3\u0094"+ + "\3\u0095\3\u0095\3\u0095\3\u0096\3\u0096\3\u0096\6\u0096\u06b1\n\u0096"+ + "\r\u0096\16\u0096\u06b2\3\u0096\5\u0096\u06b6\n\u0096\3\u0096\5\u0096"+ + "\u06b9\n\u0096\3\u0097\3\u0097\3\u0097\3\u0097\3\u0097\3\u0097\5\u0097"+ + "\u06c1\n\u0097\3\u0097\3\u0097\5\u0097\u06c5\n\u0097\3\u0098\3\u0098\3"+ + "\u0098\3\u0098\3\u0098\5\u0098\u06cc\n\u0098\3\u0098\3\u0098\3\u0099\3"+ + "\u0099\3\u0099\3\u009a\3\u009a\5\u009a\u06d5\n\u009a\3\u009a\3\u009a\3"+ + "\u009b\3\u009b\3\u009b\3\u009c\3\u009c\5\u009c\u06de\n\u009c\3\u009c\3"+ + "\u009c\3\u009d\3\u009d\5\u009d\u06e4\n\u009d\3\u009d\3\u009d\3\u009e\3"+ + "\u009e\3\u009e\3\u009e\3\u009f\3\u009f\3\u009f\3\u009f\3\u00a0\3\u00a0"+ + "\3\u00a0\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\5\u00a1\u06f8\n\u00a1"+ + "\3\u00a1\5\u00a1\u06fb\n\u00a1\3\u00a1\3\u00a1\3\u00a2\3\u00a2\3\u00a2"+ + "\3\u00a2\5\u00a2\u0703\n\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\5\u00a2"+ + "\u0709\n\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\5\u00a2\u070f\n\u00a2\3"+ + "\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\5\u00a2\u0718\n"+ + "\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\5\u00a2\u071f\n\u00a2\3"+ + "\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\5\u00a2\u0728\n"+ + "\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\5\u00a2\u0730\n"+ + "\u00a2\3\u00a3\3\u00a3\3\u00a4\5\u00a4\u0735\n\u00a4\3\u00a4\5\u00a4\u0738"+ + "\n\u00a4\3\u00a4\7\u00a4\u073b\n\u00a4\f\u00a4\16\u00a4\u073e\13\u00a4"+ + "\3\u00a4\7\u00a4\u0741\n\u00a4\f\u00a4\16\u00a4\u0744\13\u00a4\3\u00a4"+ + "\7\u00a4\u0747\n\u00a4\f\u00a4\16\u00a4\u074a\13\u00a4\3\u00a5\3\u00a5"+ + "\7\u00a5\u074e\n\u00a5\f\u00a5\16\u00a5\u0751\13\u00a5\3\u00a5\3\u00a5"+ + "\3\u00a6\3\u00a6\3\u00a6\3\u00a6\3\u00a6\3\u00a7\3\u00a7\5\u00a7\u075c"+ + "\n\u00a7\3\u00a8\3\u00a8\3\u00a8\7\u00a8\u0761\n\u00a8\f\u00a8\16\u00a8"+ + "\u0764\13\u00a8\3\u00a9\3\u00a9\3\u00a9\3\u00aa\3\u00aa\3\u00aa\3\u00aa"+ + "\5\u00aa\u076d\n\u00aa\3\u00aa\7\u00aa\u0770\n\u00aa\f\u00aa\16\u00aa"+ + "\u0773\13\u00aa\3\u00aa\3\u00aa\3\u00ab\3\u00ab\3\u00ab\3\u00ab\5\u00ab"+ + "\u077b\n\u00ab\3\u00ac\3\u00ac\3\u00ac\7\u00ac\u0780\n\u00ac\f\u00ac\16"+ + "\u00ac\u0783\13\u00ac\3\u00ad\3\u00ad\3\u00ad\3\u00ad\7\u00ad\u0789\n"+ + "\u00ad\f\u00ad\16\u00ad\u078c\13\u00ad\3\u00ad\3\u00ad\3\u00ae\3\u00ae"+ + "\3\u00ae\3\u00ae\3\u00ae\3\u00af\3\u00af\3\u00af\3\u00af\3\u00af\3\u00af"+ + "\7\u00af\u079b\n\u00af\f\u00af\16\u00af\u079e\13\u00af\3\u00af\3\u00af"+ + "\3\u00b0\3\u00b0\7\u00b0\u07a4\n\u00b0\f\u00b0\16\u00b0\u07a7\13\u00b0"+ + "\3\u00b0\3\u00b0\3\u00b1\3\u00b1\3\u00b2\3\u00b2\7\u00b2\u07af\n\u00b2"+ + "\f\u00b2\16\u00b2\u07b2\13\u00b2\3\u00b3\3\u00b3\3\u00b3\3\u00b3\3\u00b3"+ + "\3\u00b3\3\u00b4\3\u00b4\3\u00b4\5\u00b4\u07bd\n\u00b4\3\u00b5\3\u00b5"+ + "\5\u00b5\u07c1\n\u00b5\3\u00b5\5\u00b5\u07c4\n\u00b5\3\u00b5\3\u00b5\5"+ + "\u00b5\u07c8\n\u00b5\5\u00b5\u07ca\n\u00b5\3\u00b6\3\u00b6\5\u00b6\u07ce"+ + "\n\u00b6\3\u00b7\3\u00b7\3\u00b7\3\u00b7\3\u00b8\3\u00b8\3\u00b8\7\u00b8"+ + "\u07d7\n\u00b8\f\u00b8\16\u00b8\u07da\13\u00b8\3\u00b9\3\u00b9\3\u00b9"+ + "\3\u00b9\3\u00ba\3\u00ba\3\u00bb\3\u00bb\5\u00bb\u07e4\n\u00bb\3\u00bb"+ + "\3\u00bb\3\u00bb\3\u00bc\5\u00bc\u07ea\n\u00bc\3\u00bc\3\u00bc\3\u00bc"+ + "\2\2\u00bd\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62\64\66"+ + "8:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082\u0084\u0086\u0088\u008a"+ + "\u008c\u008e\u0090\u0092\u0094\u0096\u0098\u009a\u009c\u009e\u00a0\u00a2"+ + "\u00a4\u00a6\u00a8\u00aa\u00ac\u00ae\u00b0\u00b2\u00b4\u00b6\u00b8\u00ba"+ + "\u00bc\u00be\u00c0\u00c2\u00c4\u00c6\u00c8\u00ca\u00cc\u00ce\u00d0\u00d2"+ + "\u00d4\u00d6\u00d8\u00da\u00dc\u00de\u00e0\u00e2\u00e4\u00e6\u00e8\u00ea"+ + "\u00ec\u00ee\u00f0\u00f2\u00f4\u00f6\u00f8\u00fa\u00fc\u00fe\u0100\u0102"+ + "\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a"+ + "\u011c\u011e\u0120\u0122\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132"+ + "\u0134\u0136\u0138\u013a\u013c\u013e\u0140\u0142\u0144\u0146\u0148\u014a"+ + "\u014c\u014e\u0150\u0152\u0154\u0156\u0158\u015a\u015c\u015e\u0160\u0162"+ + "\u0164\u0166\u0168\u016a\u016c\u016e\u0170\u0172\u0174\u0176\2\23\4\2"+ + "\t\t\f\r\4\2\4\4\30\33\3\2\4\5\4\2\24\24\37\37\3\2\177\u0080\3\2\64\65"+ + "\3\2\u0081\u0082\3\2\u02ec\3\2\2\2@\u02f4\3\2\2\2B\u02f9\3\2\2\2D"+ + "\u0303\3\2\2\2F\u030b\3\2\2\2H\u030e\3\2\2\2J\u0314\3\2\2\2L\u031a\3\2"+ + "\2\2N\u0321\3\2\2\2P\u0329\3\2\2\2R\u033b\3\2\2\2T\u033f\3\2\2\2V\u034a"+ + "\3\2\2\2X\u0353\3\2\2\2Z\u0362\3\2\2\2\\\u0366\3\2\2\2^\u0369\3\2\2\2"+ + "`\u036c\3\2\2\2b\u0374\3\2\2\2d\u0379\3\2\2\2f\u038a\3\2\2\2h\u038d\3"+ + "\2\2\2j\u0393\3\2\2\2l\u03a9\3\2\2\2n\u03b8\3\2\2\2p\u03c0\3\2\2\2r\u03c2"+ + "\3\2\2\2t\u03d8\3\2\2\2v\u03da\3\2\2\2x\u03ed\3\2\2\2z\u03f1\3\2\2\2|"+ + "\u0404\3\2\2\2~\u0408\3\2\2\2\u0080\u041a\3\2\2\2\u0082\u041e\3\2\2\2"+ + "\u0084\u0428\3\2\2\2\u0086\u042e\3\2\2\2\u0088\u0430\3\2\2\2\u008a\u0433"+ + "\3\2\2\2\u008c\u043a\3\2\2\2\u008e\u043e\3\2\2\2\u0090\u0449\3\2\2\2\u0092"+ + "\u044b\3\2\2\2\u0094\u044d\3\2\2\2\u0096\u044f\3\2\2\2\u0098\u0452\3\2"+ + "\2\2\u009a\u045c\3\2\2\2\u009c\u045e\3\2\2\2\u009e\u046b\3\2\2\2\u00a0"+ + "\u047a\3\2\2\2\u00a2\u048f\3\2\2\2\u00a4\u0493\3\2\2\2\u00a6\u0496\3\2"+ + "\2\2\u00a8\u0499\3\2\2\2\u00aa\u049c\3\2\2\2\u00ac\u049e\3\2\2\2\u00ae"+ + "\u04a6\3\2\2\2\u00b0\u04ae\3\2\2\2\u00b2\u04c7\3\2\2\2\u00b4\u04c9\3\2"+ + "\2\2\u00b6\u04cc\3\2\2\2\u00b8\u04ea\3\2\2\2\u00ba\u04ed\3\2\2\2\u00bc"+ + "\u04f3\3\2\2\2\u00be\u04f5\3\2\2\2\u00c0\u04f7\3\2\2\2\u00c2\u04ff\3\2"+ + "\2\2\u00c4\u0507\3\2\2\2\u00c6\u050f\3\2\2\2\u00c8\u0521\3\2\2\2\u00ca"+ + "\u0523\3\2\2\2\u00cc\u0531\3\2\2\2\u00ce\u0533\3\2\2\2\u00d0\u0544\3\2"+ + "\2\2\u00d2\u0555\3\2\2\2\u00d4\u0566\3\2\2\2\u00d6\u0568\3\2\2\2\u00d8"+ + "\u057b\3\2\2\2\u00da\u057d\3\2\2\2\u00dc\u0590\3\2\2\2\u00de\u0592\3\2"+ + "\2\2\u00e0\u05a5\3\2\2\2\u00e2\u05a7\3\2\2\2\u00e4\u05b7\3\2\2\2\u00e6"+ + "\u05bc\3\2\2\2\u00e8\u05be\3\2\2\2\u00ea\u05c0\3\2\2\2\u00ec\u05c2\3\2"+ + "\2\2\u00ee\u05c4\3\2\2\2\u00f0\u05d1\3\2\2\2\u00f2\u05d3\3\2\2\2\u00f4"+ + "\u05d7\3\2\2\2\u00f6\u05d9\3\2\2\2\u00f8\u05e9\3\2\2\2\u00fa\u05f1\3\2"+ + "\2\2\u00fc\u05f6\3\2\2\2\u00fe\u05f8\3\2\2\2\u0100\u05fa\3\2\2\2\u0102"+ + "\u05ff\3\2\2\2\u0104\u0602\3\2\2\2\u0106\u0606\3\2\2\2\u0108\u0609\3\2"+ + "\2\2\u010a\u060e\3\2\2\2\u010c\u0614\3\2\2\2\u010e\u062a\3\2\2\2\u0110"+ + "\u062d\3\2\2\2\u0112\u0631\3\2\2\2\u0114\u0634\3\2\2\2\u0116\u064f\3\2"+ + "\2\2\u0118\u0652\3\2\2\2\u011a\u066a\3\2\2\2\u011c\u0671\3\2\2\2\u011e"+ + "\u0673\3\2\2\2\u0120\u0679\3\2\2\2\u0122\u0681\3\2\2\2\u0124\u0694\3\2"+ + "\2\2\u0126\u06a3\3\2\2\2\u0128\u06aa\3\2\2\2\u012a\u06ad\3\2\2\2\u012c"+ + "\u06c4\3\2\2\2\u012e\u06c6\3\2\2\2\u0130\u06cf\3\2\2\2\u0132\u06d2\3\2"+ + "\2\2\u0134\u06d8\3\2\2\2\u0136\u06db\3\2\2\2\u0138\u06e1\3\2\2\2\u013a"+ + "\u06e7\3\2\2\2\u013c\u06eb\3\2\2\2\u013e\u06ef\3\2\2\2\u0140\u06f2\3\2"+ + "\2\2\u0142\u072f\3\2\2\2\u0144\u0731\3\2\2\2\u0146\u0734\3\2\2\2\u0148"+ + "\u074b\3\2\2\2\u014a\u0754\3\2\2\2\u014c\u075b\3\2\2\2\u014e\u075d\3\2"+ + "\2\2\u0150\u0765\3\2\2\2\u0152\u0768\3\2\2\2\u0154\u077a\3\2\2\2\u0156"+ + "\u077c\3\2\2\2\u0158\u0784\3\2\2\2\u015a\u078f\3\2\2\2\u015c\u0794\3\2"+ + "\2\2\u015e\u07a1\3\2\2\2\u0160\u07aa\3\2\2\2\u0162\u07ac\3\2\2\2\u0164"+ + "\u07b3\3\2\2\2\u0166\u07b9\3\2\2\2\u0168\u07c9\3\2\2\2\u016a\u07cd\3\2"+ + "\2\2\u016c\u07cf\3\2\2\2\u016e\u07d3\3\2\2\2\u0170\u07db\3\2\2\2\u0172"+ + "\u07df\3\2\2\2\u0174\u07e1\3\2\2\2\u0176\u07e9\3\2\2\2\u0178\u017b\5\u0146"+ + "\u00a4\2\u0179\u017b\5\u015e\u00b0\2\u017a\u0178\3\2\2\2\u017a\u0179\3"+ + "\2\2\2\u017b\3\3\2\2\2\u017c\u0181\5\6\4\2\u017d\u017e\7\3\2\2\u017e\u0180"+ + "\5\u00fe\u0080\2\u017f\u017d\3\2\2\2\u0180\u0183\3\2\2\2\u0181\u017f\3"+ + "\2\2\2\u0181\u0182\3\2\2\2\u0182\5\3\2\2\2\u0183\u0181\3\2\2\2\u0184\u0185"+ + "\5l\67\2\u0185\u0186\5\b\5\2\u0186\u0187\5\u00fe\u0080\2\u0187\7\3\2\2"+ + "\2\u0188\u018a\7\4\2\2\u0189\u018b\5\u0168\u00b5\2\u018a\u0189\3\2\2\2"+ + "\u018a\u018b\3\2\2\2\u018b\u0192\3\2\2\2\u018c\u018e\7\5\2\2\u018d\u018f"+ + "\5\u0168\u00b5\2\u018e\u018d\3\2\2\2\u018e\u018f\3\2\2\2\u018f\u0192\3"+ + "\2\2\2\u0190\u0192\5\n\6\2\u0191\u0188\3\2\2\2\u0191\u018c\3\2\2\2\u0191"+ + "\u0190\3\2\2\2\u0192\t\3\2\2\2\u0193\u0196\7\6\2\2\u0194\u0196\5\u0168"+ + "\u00b5\2\u0195\u0193\3\2\2\2\u0195\u0194\3\2\2\2\u0196\13\3\2\2\2\u0197"+ + "\u019a\5\6\4\2\u0198\u0199\7\7\2\2\u0199\u019b\5n8\2\u019a\u0198\3\2\2"+ + "\2\u019a\u019b\3\2\2\2\u019b\u01a0\3\2\2\2\u019c\u019d\7\3\2\2\u019d\u019f"+ + "\5\16\b\2\u019e\u019c\3\2\2\2\u019f\u01a2\3\2\2\2\u01a0\u019e\3\2\2\2"+ + "\u01a0\u01a1\3\2\2\2\u01a1\r\3\2\2\2\u01a2\u01a0\3\2\2\2\u01a3\u01a6\5"+ + "\u00fe\u0080\2\u01a4\u01a5\7\7\2\2\u01a5\u01a7\5n8\2\u01a6\u01a4\3\2\2"+ + "\2\u01a6\u01a7\3\2\2\2\u01a7\17\3\2\2\2\u01a8\u01ad\5\16\b\2\u01a9\u01aa"+ + "\7\3\2\2\u01aa\u01ac\5\16\b\2\u01ab\u01a9\3\2\2\2\u01ac\u01af\3\2\2\2"+ + "\u01ad\u01ab\3\2\2\2\u01ad\u01ae\3\2\2\2\u01ae\21\3\2\2\2\u01af\u01ad"+ + "\3\2\2\2\u01b0\u01b2\5l\67\2\u01b1\u01b3\5\26\f\2\u01b2\u01b1\3\2\2\2"+ + "\u01b2\u01b3\3\2\2\2\u01b3\u01b4\3\2\2\2\u01b4\u01b5\5\u00fe\u0080\2\u01b5"+ + "\u01b6\5\24\13\2\u01b6\23\3\2\2\2\u01b7\u01b9\5j\66\2\u01b8\u01b7\3\2"+ + "\2\2\u01b8\u01b9\3\2\2\2\u01b9\u01ba\3\2\2\2\u01ba\u01bb\5\34\17\2\u01bb"+ + "\25\3\2\2\2\u01bc\u01bf\7\b\2\2\u01bd\u01bf\5\u0168\u00b5\2\u01be\u01bc"+ + "\3\2\2\2\u01be\u01bd\3\2\2\2\u01bf\27\3\2\2\2\u01c0\u01c2\7\t\2\2\u01c1"+ + "\u01c0\3\2\2\2\u01c1\u01c2\3\2\2\2\u01c2\u01c3\3\2\2\2\u01c3\u01c4\7\n"+ + "\2\2\u01c4\u01c5\5n8\2\u01c5\u01c6\7\13\2\2\u01c6\u01cc\3\2\2\2\u01c7"+ + "\u01c9\t\2\2\2\u01c8\u01c7\3\2\2\2\u01c8\u01c9\3\2\2\2\u01c9\u01ca\3\2"+ + "\2\2\u01ca\u01cc\5\32\16\2\u01cb\u01c1\3\2\2\2\u01cb\u01c8\3\2\2\2\u01cc"+ + "\31\3\2\2\2\u01cd\u01ce\7\16\2\2\u01ce\u01cf\5\u010a\u0086\2\u01cf\u01d0"+ + "\7\17\2\2\u01d0\33\3\2\2\2\u01d1\u01d2\7\20\2\2\u01d2\u01e4\7\21\2\2\u01d3"+ + "\u01d4\7\20\2\2\u01d4\u01d5\5\36\20\2\u01d5\u01d6\7\21\2\2\u01d6\u01e4"+ + "\3\2\2\2\u01d7\u01d8\7\20\2\2\u01d8\u01db\5\36\20\2\u01d9\u01da\7\3\2"+ + "\2\u01da\u01dc\5 \21\2\u01db\u01d9\3\2\2\2\u01db\u01dc\3\2\2\2\u01dc\u01dd"+ + "\3\2\2\2\u01dd\u01de\7\21\2\2\u01de\u01e4\3\2\2\2\u01df\u01e0\7\20\2\2"+ + "\u01e0\u01e1\5 \21\2\u01e1\u01e2\7\21\2\2\u01e2\u01e4\3\2\2\2\u01e3\u01d1"+ + "\3\2\2\2\u01e3\u01d3\3\2\2\2\u01e3\u01d7\3\2\2\2\u01e3\u01df\3\2\2\2\u01e4"+ + "\35\3\2\2\2\u01e5\u01ea\5&\24\2\u01e6\u01e7\7\3\2\2\u01e7\u01e9\5&\24"+ + "\2\u01e8\u01e6\3\2\2\2\u01e9\u01ec\3\2\2\2\u01ea\u01e8\3\2\2\2\u01ea\u01eb"+ + "\3\2\2\2\u01eb\37\3\2\2\2\u01ec\u01ea\3\2\2\2\u01ed\u01f0\5\"\22\2\u01ee"+ + "\u01f0\5$\23\2\u01ef\u01ed\3\2\2\2\u01ef\u01ee\3\2\2\2\u01f0!\3\2\2\2"+ + "\u01f1\u01f2\7\22\2\2\u01f2\u01f7\5.\30\2\u01f3\u01f4\7\3\2\2\u01f4\u01f6"+ + "\5.\30\2\u01f5\u01f3\3\2\2\2\u01f6\u01f9\3\2\2\2\u01f7\u01f5\3\2\2\2\u01f7"+ + "\u01f8\3\2\2\2\u01f8\u01fb\3\2\2\2\u01f9\u01f7\3\2\2\2\u01fa\u01fc\7\3"+ + "\2\2\u01fb\u01fa\3\2\2\2\u01fb\u01fc\3\2\2\2\u01fc\u01fd\3\2\2\2\u01fd"+ + "\u01fe\7\23\2\2\u01fe#\3\2\2\2\u01ff\u0200\7\16\2\2\u0200\u0205\5\60\31"+ + "\2\u0201\u0202\7\3\2\2\u0202\u0204\5\60\31\2\u0203\u0201\3\2\2\2\u0204"+ + "\u0207\3\2\2\2\u0205\u0203\3\2\2\2\u0205\u0206\3\2\2\2\u0206\u0209\3\2"+ + "\2\2\u0207\u0205\3\2\2\2\u0208\u020a\7\3\2\2\u0209\u0208\3\2\2\2\u0209"+ + "\u020a\3\2\2\2\u020a\u020b\3\2\2\2\u020b\u020c\7\17\2\2\u020c%\3\2\2\2"+ + "\u020d\u0211\5(\25\2\u020e\u0211\5,\27\2\u020f\u0211\5*\26\2\u0210\u020d"+ + "\3\2\2\2\u0210\u020e\3\2\2\2\u0210\u020f\3\2\2\2\u0211\'\3\2\2\2\u0212"+ + "\u0214\5l\67\2\u0213\u0215\7\24\2\2\u0214\u0213\3\2\2\2\u0214\u0215\3"+ + "\2\2\2\u0215\u0217\3\2\2\2\u0216\u0218\5\26\f\2\u0217\u0216\3\2\2\2\u0217"+ + "\u0218\3\2\2\2\u0218\u0219\3\2\2\2\u0219\u021a\5\u00fe\u0080\2\u021a\u021b"+ + "\5\24\13\2\u021b)\3\2\2\2\u021c\u0224\5\6\4\2\u021d\u021f\5l\67\2\u021e"+ + "\u0220\7\24\2\2\u021f\u021e\3\2\2\2\u021f\u0220\3\2\2\2\u0220\u0221\3"+ + "\2\2\2\u0221\u0222\5\u00fe\u0080\2\u0222\u0224\3\2\2\2\u0223\u021c\3\2"+ + "\2\2\u0223\u021d\3\2\2\2\u0224+\3\2\2\2\u0225\u0227\5l\67\2\u0226\u0228"+ + "\5\b\5\2\u0227\u0226\3\2\2\2\u0227\u0228\3\2\2\2\u0228\u0229\3\2\2\2\u0229"+ + "\u022a\7\25\2\2\u022a\u022b\7\26\2\2\u022b\u022d\5\u00fe\u0080\2\u022c"+ + "\u022e\5\24\13\2\u022d\u022c\3\2\2\2\u022d\u022e\3\2\2\2\u022e-\3\2\2"+ + "\2\u022f\u0232\5&\24\2\u0230\u0231\7\7\2\2\u0231\u0233\5n8\2\u0232\u0230"+ + "\3\2\2\2\u0232\u0233\3\2\2\2\u0233/\3\2\2\2\u0234\u0237\5&\24\2\u0235"+ + "\u0236\7\7\2\2\u0236\u0238\5n8\2\u0237\u0235\3\2\2\2\u0237\u0238\3\2\2"+ + "\2\u0238\u023f\3\2\2\2\u0239\u023c\5&\24\2\u023a\u023b\7\27\2\2\u023b"+ + "\u023d\5n8\2\u023c\u023a\3\2\2\2\u023c\u023d\3\2\2\2\u023d\u023f\3\2\2"+ + "\2\u023e\u0234\3\2\2\2\u023e\u0239\3\2\2\2\u023f\61\3\2\2\2\u0240\u0241"+ + "\t\3\2\2\u0241\63\3\2\2\2\u0242\u0246\5l\67\2\u0243\u0245\5\62\32\2\u0244"+ + "\u0243\3\2\2\2\u0245\u0248\3\2\2\2\u0246\u0244\3\2\2\2\u0246\u0247\3\2"+ + "\2\2\u0247\u024a\3\2\2\2\u0248\u0246\3\2\2\2\u0249\u024b\7\34\2\2\u024a"+ + "\u0249\3\2\2\2\u024a\u024b\3\2\2\2\u024b\u024c\3\2\2\2\u024c\u024d\7\35"+ + "\2\2\u024d\u024f\5\u00fe\u0080\2\u024e\u0250\5j\66\2\u024f\u024e\3\2\2"+ + "\2\u024f\u0250\3\2\2\2\u0250\u0252\3\2\2\2\u0251\u0253\5\\/\2\u0252\u0251"+ + "\3\2\2\2\u0252\u0253\3\2\2\2\u0253\u0255\3\2\2\2\u0254\u0256\5\66\34\2"+ + "\u0255\u0254\3\2\2\2\u0255\u0256\3\2\2\2\u0256\u0258\3\2\2\2\u0257\u0259"+ + "\5^\60\2\u0258\u0257\3\2\2\2\u0258\u0259\3\2\2\2\u0259\u025a\3\2\2\2\u025a"+ + "\u0260\7\16\2\2\u025b\u025c\5l\67\2\u025c\u025d\58\35\2\u025d\u025f\3"+ + "\2\2\2\u025e\u025b\3\2\2\2\u025f\u0262\3\2\2\2\u0260\u025e\3\2\2\2\u0260"+ + "\u0261\3\2\2\2\u0261\u0263\3\2\2\2\u0262\u0260\3\2\2\2\u0263\u0264\7\17"+ + "\2\2\u0264\u0290\3\2\2\2\u0265\u0267\5l\67\2\u0266\u0268\7\34\2\2\u0267"+ + "\u0266\3\2\2\2\u0267\u0268\3\2\2\2\u0268\u026c\3\2\2\2\u0269\u026b\5\62"+ + "\32\2\u026a\u0269\3\2\2\2\u026b\u026e\3\2\2\2\u026c\u026a\3\2\2\2\u026c"+ + "\u026d\3\2\2\2\u026d\u026f\3\2\2\2\u026e\u026c\3\2\2\2\u026f\u0270\7\35"+ + "\2\2\u0270\u0272\5\u00fe\u0080\2\u0271\u0273\5j\66\2\u0272\u0271\3\2\2"+ + "\2\u0272\u0273\3\2\2\2\u0273\u0275\3\2\2\2\u0274\u0276\5\\/\2\u0275\u0274"+ + "\3\2\2\2\u0275\u0276\3\2\2\2\u0276\u0278\3\2\2\2\u0277\u0279\5\66\34\2"+ + "\u0278\u0277\3\2\2\2\u0278\u0279\3\2\2\2\u0279\u027b\3\2\2\2\u027a\u027c"+ + "\5^\60\2\u027b\u027a\3\2\2\2\u027b\u027c\3\2\2\2\u027c\u027d\3\2\2\2\u027d"+ + "\u0283\7\16\2\2\u027e\u027f\5l\67\2\u027f\u0280\58\35\2\u0280\u0282\3"+ + "\2\2\2\u0281\u027e\3\2\2\2\u0282\u0285\3\2\2\2\u0283\u0281\3\2\2\2\u0283"+ + "\u0284\3\2\2\2\u0284\u0286\3\2\2\2\u0285\u0283\3\2\2\2\u0286\u0287\7\17"+ + "\2\2\u0287\u0290\3\2\2\2\u0288\u028a\5l\67\2\u0289\u028b\7\34\2\2\u028a"+ + "\u0289\3\2\2\2\u028a\u028b\3\2\2\2\u028b\u028c\3\2\2\2\u028c\u028d\7\35"+ + "\2\2\u028d\u028e\5`\61\2\u028e\u0290\3\2\2\2\u028f\u0242\3\2\2\2\u028f"+ + "\u0265\3\2\2\2\u028f\u0288\3\2\2\2\u0290\65\3\2\2\2\u0291\u0292\7\36\2"+ + "\2\u0292\u0293\5\u016e\u00b8\2\u0293\67\3\2\2\2\u0294\u0295\5<\37\2\u0295"+ + "\u0296\7\13\2\2\u0296\u029b\3\2\2\2\u0297\u0298\5:\36\2\u0298\u0299\5"+ + "\30\r\2\u0299\u029b\3\2\2\2\u029a\u0294\3\2\2\2\u029a\u0297\3\2\2\2\u029b"+ + "9\3\2\2\2\u029c\u029e\5L\'\2\u029d\u029f\5P)\2\u029e\u029d\3\2\2\2\u029e"+ + "\u029f\3\2\2\2\u029f\u02af\3\2\2\2\u02a0\u02af\5V,\2\u02a1\u02a3\7\37"+ + "\2\2\u02a2\u02a1\3\2\2\2\u02a2\u02a3\3\2\2\2\u02a3\u02a4\3\2\2\2\u02a4"+ + "\u02af\5\22\n\2\u02a5\u02a7\7\37\2\2\u02a6\u02a5\3\2\2\2\u02a6\u02a7\3"+ + "\2\2\2\u02a7\u02a8\3\2\2\2\u02a8\u02af\5H%\2\u02a9\u02ab\7\37\2\2\u02aa"+ + "\u02a9\3\2\2\2\u02aa\u02ab\3\2\2\2\u02ab\u02ac\3\2\2\2\u02ac\u02af\5J"+ + "&\2\u02ad\u02af\5B\"\2\u02ae\u029c\3\2\2\2\u02ae\u02a0\3\2\2\2\u02ae\u02a2"+ + "\3\2\2\2\u02ae\u02a6\3\2\2\2\u02ae\u02aa\3\2\2\2\u02ae\u02ad\3\2\2\2\u02af"+ + ";\3\2\2\2\u02b0\u02b3\5Z.\2\u02b1\u02b4\5N(\2\u02b2\u02b4\5P)\2\u02b3"+ + "\u02b1\3\2\2\2\u02b3\u02b2\3\2\2\2\u02b3\u02b4\3\2\2\2\u02b4\u02eb\3\2"+ + "\2\2\u02b5\u02b8\5L\'\2\u02b6\u02b9\5N(\2\u02b7\u02b9\5P)\2\u02b8\u02b6"+ + "\3\2\2\2\u02b8\u02b7\3\2\2\2\u02b8\u02b9\3\2\2\2\u02b9\u02eb\3\2\2\2\u02ba"+ + "\u02bb\7 \2\2\u02bb\u02eb\5Z.\2\u02bc\u02bd\7 \2\2\u02bd\u02eb\5L\'\2"+ + "\u02be\u02c0\7 \2\2\u02bf\u02c1\7\37\2\2\u02c0\u02bf\3\2\2\2\u02c0\u02c1"+ + "\3\2\2\2\u02c1\u02c3\3\2\2\2\u02c2\u02be\3\2\2\2\u02c2\u02c3\3\2\2\2\u02c3"+ + "\u02c4\3\2\2\2\u02c4\u02eb\5H%\2\u02c5\u02c7\7 \2\2\u02c6\u02c8\7\37\2"+ + "\2\u02c7\u02c6\3\2\2\2\u02c7\u02c8\3\2\2\2\u02c8\u02ca\3\2\2\2\u02c9\u02c5"+ + "\3\2\2\2\u02c9\u02ca\3\2\2\2\u02ca\u02cb\3\2\2\2\u02cb\u02eb\5J&\2\u02cc"+ + "\u02ce\7 \2\2\u02cd\u02cc\3\2\2\2\u02cd\u02ce\3\2\2\2\u02ce\u02cf\3\2"+ + "\2\2\u02cf\u02eb\5B\"\2\u02d0\u02d2\7 \2\2\u02d1\u02d3\7\37\2\2\u02d2"+ + "\u02d1\3\2\2\2\u02d2\u02d3\3\2\2\2\u02d3\u02d5\3\2\2\2\u02d4\u02d0\3\2"+ + "\2\2\u02d4\u02d5\3\2\2\2\u02d5\u02d6\3\2\2\2\u02d6\u02eb\5\22\n\2\u02d7"+ + "\u02d8\7\37\2\2\u02d8\u02da\t\4\2\2\u02d9\u02db\5\u0168\u00b5\2\u02da"+ + "\u02d9\3\2\2\2\u02da\u02db\3\2\2\2\u02db\u02dc\3\2\2\2\u02dc\u02eb\5>"+ + " \2\u02dd\u02df\7\4\2\2\u02de\u02e0\5\u0168\u00b5\2\u02df\u02de\3\2\2"+ + "\2\u02df\u02e0\3\2\2\2\u02e0\u02e1\3\2\2\2\u02e1\u02eb\5\20\t\2\u02e2"+ + "\u02e4\t\5\2\2\u02e3\u02e2\3\2\2\2\u02e3\u02e4\3\2\2\2\u02e4\u02e7\3\2"+ + "\2\2\u02e5\u02e8\7\6\2\2\u02e6\u02e8\5\u0168\u00b5\2\u02e7\u02e5\3\2\2"+ + "\2\u02e7\u02e6\3\2\2\2\u02e8\u02e9\3\2\2\2\u02e9\u02eb\5\20\t\2\u02ea"+ + "\u02b0\3\2\2\2\u02ea\u02b5\3\2\2\2\u02ea\u02ba\3\2\2\2\u02ea\u02bc\3\2"+ + "\2\2\u02ea\u02c2\3\2\2\2\u02ea\u02c9\3\2\2\2\u02ea\u02cd\3\2\2\2\u02ea"+ + "\u02d4\3\2\2\2\u02ea\u02d7\3\2\2\2\u02ea\u02dd\3\2\2\2\u02ea\u02e3\3\2"+ + "\2\2\u02eb=\3\2\2\2\u02ec\u02f1\5@!\2\u02ed\u02ee\7\3\2\2\u02ee\u02f0"+ + "\5@!\2\u02ef\u02ed\3\2\2\2\u02f0\u02f3\3\2\2\2\u02f1\u02ef\3\2\2\2\u02f1"+ + "\u02f2\3\2\2\2\u02f2?\3\2\2\2\u02f3\u02f1\3\2\2\2\u02f4\u02f5\5\u00fe"+ + "\u0080\2\u02f5\u02f6\7\7\2\2\u02f6\u02f7\5n8\2\u02f7A\3\2\2\2\u02f8\u02fa"+ + "\5\26\f\2\u02f9\u02f8\3\2\2\2\u02f9\u02fa\3\2\2\2\u02fa\u02fb\3\2\2\2"+ + "\u02fb\u02fc\7!\2\2\u02fc\u02fd\5D#\2\u02fd\u02fe\5\34\17\2\u02feC\3\2"+ + "\2\2\u02ff\u0304\7\"\2\2\u0300\u0304\5F$\2\u0301\u0304\7#\2\2\u0302\u0304"+ + "\7$\2\2\u0303\u02ff\3\2\2\2\u0303\u0300\3\2\2\2\u0303\u0301\3\2\2\2\u0303"+ + "\u0302\3\2\2\2\u0304E\3\2\2\2\u0305\u030c\5\u00e2r\2\u0306\u030c\5\u00de"+ + "p\2\u0307\u030c\5\u00dan\2\u0308\u030c\5\u00ceh\2\u0309\u030c\7%\2\2\u030a"+ + "\u030c\5\u00d6l\2\u030b\u0305\3\2\2\2\u030b\u0306\3\2\2\2\u030b\u0307"+ + "\3\2\2\2\u030b\u0308\3\2\2\2\u030b\u0309\3\2\2\2\u030b\u030a\3\2\2\2\u030c"+ + "G\3\2\2\2\u030d\u030f\5\26\f\2\u030e\u030d\3\2\2\2\u030e\u030f\3\2\2\2"+ + "\u030f\u0310\3\2\2\2\u0310\u0311\7&\2\2\u0311\u0312\5\u00fe\u0080\2\u0312"+ + "I\3\2\2\2\u0313\u0315\5\26\f\2\u0314\u0313\3\2\2\2\u0314\u0315\3\2\2\2"+ + "\u0315\u0316\3\2\2\2\u0316\u0317\7\'\2\2\u0317\u0318\5\u00fe\u0080\2\u0318"+ + "\u0319\5\34\17\2\u0319K\3\2\2\2\u031a\u031d\5\u00fe\u0080\2\u031b\u031c"+ + "\7\26\2\2\u031c\u031e\5\u00fe\u0080\2\u031d\u031b\3\2\2\2\u031d\u031e"+ + "\3\2\2\2\u031e\u031f\3\2\2\2\u031f\u0320\5\34\17\2\u0320M\3\2\2\2\u0321"+ + "\u0322\7\27\2\2\u0322\u0325\7\25\2\2\u0323\u0324\7\26\2\2\u0324\u0326"+ + "\5\u00fe\u0080\2\u0325\u0323\3\2\2\2\u0325\u0326\3\2\2\2\u0326\u0327\3"+ + "\2\2\2\u0327\u0328\5\u00b0Y\2\u0328O\3\2\2\2\u0329\u032a\7\27\2\2\u032a"+ + "\u032f\5R*\2\u032b\u032c\7\3\2\2\u032c\u032e\5R*\2\u032d\u032b\3\2\2\2"+ + "\u032e\u0331\3\2\2\2\u032f\u032d\3\2\2\2\u032f\u0330\3\2\2\2\u0330Q\3"+ + "\2\2\2\u0331\u032f\3\2\2\2\u0332\u0333\7(\2\2\u0333\u033c\5\u00b0Y\2\u0334"+ + "\u0335\7(\2\2\u0335\u0336\7\26\2\2\u0336\u0337\5\u00fe\u0080\2\u0337\u0338"+ + "\5\u00b0Y\2\u0338\u033c\3\2\2\2\u0339\u033c\5T+\2\u033a\u033c\5\u0140"+ + "\u00a1\2\u033b\u0332\3\2\2\2\u033b\u0334\3\2\2\2\u033b\u0339\3\2\2\2\u033b"+ + "\u033a\3\2\2\2\u033cS\3\2\2\2\u033d\u033e\7\25\2\2\u033e\u0340\7\26\2"+ + "\2\u033f\u033d\3\2\2\2\u033f\u0340\3\2\2\2\u0340\u0341\3\2\2\2\u0341\u0342"+ + "\5\u00fe\u0080\2\u0342\u0343\7\7\2\2\u0343\u0347\5\u00c0a\2\u0344\u0346"+ + "\5\u00b6\\\2\u0345\u0344\3\2\2\2\u0346\u0349\3\2\2\2\u0347\u0345\3\2\2"+ + "\2\u0347\u0348\3\2\2\2\u0348U\3\2\2\2\u0349\u0347\3\2\2\2\u034a\u034b"+ + "\7)\2\2\u034b\u034e\5\u00fe\u0080\2\u034c\u034d\7\26\2\2\u034d\u034f\5"+ + "\u00fe\u0080\2\u034e\u034c\3\2\2\2\u034e\u034f\3\2\2\2\u034f\u0350\3\2"+ + "\2\2\u0350\u0351\5\34\17\2\u0351W\3\2\2\2\u0352\u0354\7\5\2\2\u0353\u0352"+ + "\3\2\2\2\u0353\u0354\3\2\2\2\u0354\u0355\3\2\2\2\u0355\u0356\7)\2\2\u0356"+ + "\u0359\5\u00fe\u0080\2\u0357\u0358\7\26\2\2\u0358\u035a\5\u00fe\u0080"+ + "\2\u0359\u0357\3\2\2\2\u0359\u035a\3\2\2\2\u035a\u035b\3\2\2\2\u035b\u035c"+ + "\5\34\17\2\u035c\u035d\7\7\2\2\u035d\u0360\5\u0168\u00b5\2\u035e\u035f"+ + "\7\26\2\2\u035f\u0361\5\u00fe\u0080\2\u0360\u035e\3\2\2\2\u0360\u0361"+ + "\3\2\2\2\u0361Y\3\2\2\2\u0362\u0363\7\5\2\2\u0363\u0364\5\u0100\u0081"+ + "\2\u0364\u0365\5\34\17\2\u0365[\3\2\2\2\u0366\u0367\7*\2\2\u0367\u0368"+ + "\5\u0168\u00b5\2\u0368]\3\2\2\2\u0369\u036a\7+\2\2\u036a\u036b\5\u016e"+ + "\u00b8\2\u036b_\3\2\2\2\u036c\u036e\5\u00fe\u0080\2\u036d\u036f\5j\66"+ + "\2\u036e\u036d\3\2\2\2\u036e\u036f\3\2\2\2\u036f\u0370\3\2\2\2\u0370\u0371"+ + "\7\7\2\2\u0371\u0372\5b\62\2\u0372\u0373\7\13\2\2\u0373a\3\2\2\2\u0374"+ + "\u0375\5\u0168\u00b5\2\u0375\u0377\5\66\34\2\u0376\u0378\5^\60\2\u0377"+ + "\u0376\3\2\2\2\u0377\u0378\3\2\2\2\u0378c\3\2\2\2\u0379\u037a\5l\67\2"+ + "\u037a\u037b\7,\2\2\u037b\u037c\5\u00fe\u0080\2\u037c\u037d\7\16\2\2\u037d"+ + "\u0382\5f\64\2\u037e\u037f\7\3\2\2\u037f\u0381\5f\64\2\u0380\u037e\3\2"+ + "\2\2\u0381\u0384\3\2\2\2\u0382\u0380\3\2\2\2\u0382\u0383\3\2\2\2\u0383"+ + "\u0386\3\2\2\2\u0384\u0382\3\2\2\2\u0385\u0387\7\3\2\2\u0386\u0385\3\2"+ + "\2\2\u0386\u0387\3\2\2\2\u0387\u0388\3\2\2\2\u0388\u0389\7\17\2\2\u0389"+ + "e\3\2\2\2\u038a\u038b\5l\67\2\u038b\u038c\5\u00fe\u0080\2\u038cg\3\2\2"+ + "\2\u038d\u038e\5l\67\2\u038e\u0391\5\u00fe\u0080\2\u038f\u0390\7*\2\2"+ + "\u0390\u0392\5\u0168\u00b5\2\u0391\u038f\3\2\2\2\u0391\u0392\3\2\2\2\u0392"+ + "i\3\2\2\2\u0393\u0394\7-\2\2\u0394\u0399\5h\65\2\u0395\u0396\7\3\2\2\u0396"+ + "\u0398\5h\65\2\u0397\u0395\3\2\2\2\u0398\u039b\3\2\2\2\u0399\u0397\3\2"+ + "\2\2\u0399\u039a\3\2\2\2\u039a\u039c\3\2\2\2\u039b\u0399\3\2\2\2\u039c"+ + "\u039d\7.\2\2\u039dk\3\2\2\2\u039e\u039f\7/\2\2\u039f\u03a2\5\u0100\u0081"+ + "\2\u03a0\u03a1\7\26\2\2\u03a1\u03a3\5\u00fe\u0080\2\u03a2\u03a0\3\2\2"+ + "\2\u03a2\u03a3\3\2\2\2\u03a3\u03a5\3\2\2\2\u03a4\u03a6\5\u00b0Y\2\u03a5"+ + "\u03a4\3\2\2\2\u03a5\u03a6\3\2\2\2\u03a6\u03a8\3\2\2\2\u03a7\u039e\3\2"+ + "\2\2\u03a8\u03ab\3\2\2\2\u03a9\u03a7\3\2\2\2\u03a9\u03aa\3\2\2\2\u03aa"+ + "m\3\2\2\2\u03ab\u03a9\3\2\2\2\u03ac\u03ad\5\u00f8}\2\u03ad\u03ae\5\u00bc"+ + "_\2\u03ae\u03af\5n8\2\u03af\u03b9\3\2\2\2\u03b0\u03b4\5\u00c0a\2\u03b1"+ + "\u03b3\5\u00b6\\\2\u03b2\u03b1\3\2\2\2\u03b3\u03b6\3\2\2\2\u03b4\u03b2"+ + "\3\2\2\2\u03b4\u03b5\3\2\2\2\u03b5\u03b9\3\2\2\2\u03b6\u03b4\3\2\2\2\u03b7"+ + "\u03b9\5\u00a4S\2\u03b8\u03ac\3\2\2\2\u03b8\u03b0\3\2\2\2\u03b8\u03b7"+ + "\3\2\2\2\u03b9o\3\2\2\2\u03ba\u03bb\5\u00f8}\2\u03bb\u03bc\5\u00bc_\2"+ + "\u03bc\u03bd\5p9\2\u03bd\u03c1\3\2\2\2\u03be\u03c1\5\u00c0a\2\u03bf\u03c1"+ + "\5\u00a6T\2\u03c0\u03ba\3\2\2\2\u03c0\u03be\3\2\2\2\u03c0\u03bf\3\2\2"+ + "\2\u03c1q\3\2\2\2\u03c2\u03c7\5n8\2\u03c3\u03c4\7\3\2\2\u03c4\u03c6\5"+ + "n8\2\u03c5\u03c3\3\2\2\2\u03c6\u03c9\3\2\2\2\u03c7\u03c5\3\2\2\2\u03c7"+ + "\u03c8\3\2\2\2\u03c8s\3\2\2\2\u03c9\u03c7\3\2\2\2\u03ca\u03d9\5\u00aa"+ + "V\2\u03cb\u03cc\7(\2\2\u03cc\u03d9\5\u00fa~\2\u03cd\u03d9\5\u00a8U\2\u03ce"+ + "\u03d9\5\u0090I\2\u03cf\u03d9\5\u00fe\u0080\2\u03d0\u03d9\5\u00acW\2\u03d1"+ + "\u03d9\5\u00aeX\2\u03d2\u03d9\5v<\2\u03d3\u03d9\5~@\2\u03d4\u03d5\7\20"+ + "\2\2\u03d5\u03d6\5n8\2\u03d6\u03d7\7\21\2\2\u03d7\u03d9\3\2\2\2\u03d8"+ + "\u03ca\3\2\2\2\u03d8\u03cb\3\2\2\2\u03d8\u03cd\3\2\2\2\u03d8\u03ce\3\2"+ + "\2\2\u03d8\u03cf\3\2\2\2\u03d8\u03d0\3\2\2\2\u03d8\u03d1\3\2\2\2\u03d8"+ + "\u03d2\3\2\2\2\u03d8\u03d3\3\2\2\2\u03d8\u03d4\3\2\2\2\u03d9u\3\2\2\2"+ + "\u03da\u03db\7\20\2\2\u03db\u03dc\5x=\2\u03dc\u03dd\7\3\2\2\u03dd\u03e2"+ + "\5x=\2\u03de\u03df\7\3\2\2\u03df\u03e1\5x=\2\u03e0\u03de\3\2\2\2\u03e1"+ + "\u03e4\3\2\2\2\u03e2\u03e0\3\2\2\2\u03e2\u03e3\3\2\2\2\u03e3\u03e6\3\2"+ + "\2\2\u03e4\u03e2\3\2\2\2\u03e5\u03e7\7\3\2\2\u03e6\u03e5\3\2\2\2\u03e6"+ + "\u03e7\3\2\2\2\u03e7\u03e8\3\2\2\2\u03e8\u03e9\7\21\2\2\u03e9w\3\2\2\2"+ + "\u03ea\u03eb\5\u00fe\u0080\2\u03eb\u03ec\7\27\2\2\u03ec\u03ee\3\2\2\2"+ + "\u03ed\u03ea\3\2\2\2\u03ed\u03ee\3\2\2\2\u03ee\u03ef\3\2\2\2\u03ef\u03f0"+ + "\5n8\2\u03f0y\3\2\2\2\u03f1\u03f2\7\20\2\2\u03f2\u03f3\5|?\2\u03f3\u03f4"+ + "\7\3\2\2\u03f4\u03f9\5|?\2\u03f5\u03f6\7\3\2\2\u03f6\u03f8\5|?\2\u03f7"+ + "\u03f5\3\2\2\2\u03f8\u03fb\3\2\2\2\u03f9\u03f7\3\2\2\2\u03f9\u03fa\3\2"+ + "\2\2\u03fa\u03fd\3\2\2\2\u03fb\u03f9\3\2\2\2\u03fc\u03fe\7\3\2\2\u03fd"+ + "\u03fc\3\2\2\2\u03fd\u03fe\3\2\2\2\u03fe\u03ff\3\2\2\2\u03ff\u0400\7\21"+ + "\2\2\u0400{\3\2\2\2\u0401\u0402\5\u00fe\u0080\2\u0402\u0403\7\27\2\2\u0403"+ + "\u0405\3\2\2\2\u0404\u0401\3\2\2\2\u0404\u0405\3\2\2\2\u0405\u0406\3\2"+ + "\2\2\u0406\u0407\5\u0168\u00b5\2\u0407}\3\2\2\2\u0408\u0409\7\60\2\2\u0409"+ + "\u040a\7\20\2\2\u040a\u040b\5n8\2\u040b\u040c\7\21\2\2\u040c\u040d\7\16"+ + "\2\2\u040d\u0412\5\u0080A\2\u040e\u040f\7\3\2\2\u040f\u0411\5\u0080A\2"+ + "\u0410\u040e\3\2\2\2\u0411\u0414\3\2\2\2\u0412\u0410\3\2\2\2\u0412\u0413"+ + "\3\2\2\2\u0413\u0416\3\2\2\2\u0414\u0412\3\2\2\2\u0415\u0417\7\3\2\2\u0416"+ + "\u0415\3\2\2\2\u0416\u0417\3\2\2\2\u0417\u0418\3\2\2\2\u0418\u0419\7\17"+ + "\2\2\u0419\177\3\2\2\2\u041a\u041b\5\u0082B\2\u041b\u041c\7\n\2\2\u041c"+ + "\u041d\5n8\2\u041d\u0081\3\2\2\2\u041e\u0421\5\u0084C\2\u041f\u0420\7"+ + "\61\2\2\u0420\u0422\5n8\2\u0421\u041f\3\2\2\2\u0421\u0422\3\2\2\2\u0422"+ + "\u0083\3\2\2\2\u0423\u0429\5\u0086D\2\u0424\u0429\5\u0088E\2\u0425\u0429"+ + "\5\u008aF\2\u0426\u0429\5\u008cG\2\u0427\u0429\5\u008eH\2\u0428\u0423"+ + "\3\2\2\2\u0428\u0424\3\2\2\2\u0428\u0425\3\2\2\2\u0428\u0426\3\2\2\2\u0428"+ + "\u0427\3\2\2\2\u0429\u0085\3\2\2\2\u042a\u042f\5\u0090I\2\u042b\u042f"+ + "\5\u00fe\u0080\2\u042c\u042f\5\u0100\u0081\2\u042d\u042f\5\u00aeX\2\u042e"+ + "\u042a\3\2\2\2\u042e\u042b\3\2\2\2\u042e\u042c\3\2\2\2\u042e\u042d\3\2"+ + "\2\2\u042f\u0087\3\2\2\2\u0430\u0431\5\u0168\u00b5\2\u0431\u0432\5\u00fe"+ + "\u0080\2\u0432\u0089\3\2\2\2\u0433\u0434\7\62\2\2\u0434\u008b\3\2\2\2"+ + "\u0435\u043b\7\6\2\2\u0436\u0438\7\4\2\2\u0437\u0439\5\u0168\u00b5\2\u0438"+ + "\u0437\3\2\2\2\u0438\u0439\3\2\2\2\u0439\u043b\3\2\2\2\u043a\u0435\3\2"+ + "\2\2\u043a\u0436\3\2\2\2\u043b\u043c\3\2\2\2\u043c\u043d\5\u00fe\u0080"+ + "\2\u043d\u008d\3\2\2\2\u043e\u043f\7\20\2\2\u043f\u0440\5\u0084C\2\u0440"+ + "\u0441\7\21\2\2\u0441\u008f\3\2\2\2\u0442\u044a\5\u0092J\2\u0443\u044a"+ + "\5\u0096L\2\u0444\u044a\5\u0094K\2\u0445\u044a\5\u0098M\2\u0446\u044a"+ + "\5\u009cO\2\u0447\u044a\5\u00a0Q\2\u0448\u044a\5\u009eP\2\u0449\u0442"+ + "\3\2\2\2\u0449\u0443\3\2\2\2\u0449\u0444\3\2\2\2\u0449\u0445\3\2\2\2\u0449"+ + "\u0446\3\2\2\2\u0449\u0447\3\2\2\2\u0449\u0448\3\2\2\2\u044a\u0091\3\2"+ + "\2\2\u044b\u044c\7\63\2\2\u044c\u0093\3\2\2\2\u044d\u044e\t\6\2\2\u044e"+ + "\u0095\3\2\2\2\u044f\u0450\t\7\2\2\u0450\u0097\3\2\2\2\u0451\u0453\t\b"+ + "\2\2\u0452\u0451\3\2\2\2\u0453\u0454\3\2\2\2\u0454\u0452\3\2\2\2\u0454"+ + "\u0455\3\2\2\2\u0455\u0099\3\2\2\2\u0456\u0457\7\66\2\2\u0457\u045d\5"+ + "\u00fe\u0080\2\u0458\u0459\7\67\2\2\u0459\u045a\5n8\2\u045a\u045b\7\17"+ + "\2\2\u045b\u045d\3\2\2\2\u045c\u0456\3\2\2\2\u045c\u0458\3\2\2\2\u045d"+ + "\u009b\3\2\2\2\u045e\u0468\78\2\2\u045f\u0469\5D#\2\u0460\u0465\5\u00fe"+ + "\u0080\2\u0461\u0462\7\3\2\2\u0462\u0464\5\u00fe\u0080\2\u0463\u0461\3"+ + "\2\2\2\u0464\u0467\3\2\2\2\u0465\u0463\3\2\2\2\u0465\u0466\3\2\2\2\u0466"+ + "\u0469\3\2\2\2\u0467\u0465\3\2\2\2\u0468\u045f\3\2\2\2\u0468\u0460\3\2"+ + "\2\2\u0469\u009d\3\2\2\2\u046a\u046c\7\5\2\2\u046b\u046a\3\2\2\2\u046b"+ + "\u046c\3\2\2\2\u046c\u046e\3\2\2\2\u046d\u046f\5\u016c\u00b7\2\u046e\u046d"+ + "\3\2\2\2\u046e\u046f\3\2\2\2\u046f\u0470\3\2\2\2\u0470\u0475\7\22\2\2"+ + "\u0471\u0473\5r:\2\u0472\u0474\7\3\2\2\u0473\u0472\3\2\2\2\u0473\u0474"+ + "\3\2\2\2\u0474\u0476\3\2\2\2\u0475\u0471\3\2\2\2\u0475\u0476\3\2\2\2\u0476"+ + "\u0477\3\2\2\2\u0477\u0478\7\23\2\2\u0478\u009f\3\2\2\2\u0479\u047b\7"+ + "\5\2\2\u047a\u0479\3\2\2\2\u047a\u047b\3\2\2\2\u047b\u047d\3\2\2\2\u047c"+ + "\u047e\5\u016c\u00b7\2\u047d\u047c\3\2\2\2\u047d\u047e\3\2\2\2\u047e\u047f"+ + "\3\2\2\2\u047f\u048b\7\16\2\2\u0480\u0485\5\u00a2R\2\u0481\u0482\7\3\2"+ + "\2\u0482\u0484\5\u00a2R\2\u0483\u0481\3\2\2\2\u0484\u0487\3\2\2\2\u0485"+ + "\u0483\3\2\2\2\u0485\u0486\3\2\2\2\u0486\u0489\3\2\2\2\u0487\u0485\3\2"+ + "\2\2\u0488\u048a\7\3\2\2\u0489\u0488\3\2\2\2\u0489\u048a\3\2\2\2\u048a"+ + "\u048c\3\2\2\2\u048b\u0480\3\2\2\2\u048b\u048c\3\2\2\2\u048c\u048d\3\2"+ + "\2\2\u048d\u048e\7\17\2\2\u048e\u00a1\3\2\2\2\u048f\u0490\5n8\2\u0490"+ + "\u0491\7\27\2\2\u0491\u0492\5n8\2\u0492\u00a3\3\2\2\2\u0493\u0494\79\2"+ + "\2\u0494\u0495\5n8\2\u0495\u00a5\3\2\2\2\u0496\u0497\79\2\2\u0497\u0498"+ + "\5p9\2\u0498\u00a7\3\2\2\2\u0499\u049a\5\24\13\2\u049a\u049b\5\30\r\2"+ + "\u049b\u00a9\3\2\2\2\u049c\u049d\7\25\2\2\u049d\u00ab\3\2\2\2\u049e\u049f"+ + "\7:\2\2\u049f\u04a2\5\u0168\u00b5\2\u04a0\u04a1\7\26\2\2\u04a1\u04a3\5"+ + "\u00fe\u0080\2\u04a2\u04a0\3\2\2\2\u04a2\u04a3\3\2\2\2\u04a3\u04a4\3\2"+ + "\2\2\u04a4\u04a5\5\u00b0Y\2\u04a5\u00ad\3\2\2\2\u04a6\u04a7\7\5\2\2\u04a7"+ + "\u04aa\5\u0168\u00b5\2\u04a8\u04a9\7\26\2\2\u04a9\u04ab\5\u00fe\u0080"+ + "\2\u04aa\u04a8\3\2\2\2\u04aa\u04ab\3\2\2\2\u04ab\u04ac\3\2\2\2\u04ac\u04ad"+ + "\5\u00b0Y\2\u04ad\u00af\3\2\2\2\u04ae\u04b3\7\20\2\2\u04af\u04b1\5\u00b2"+ + "Z\2\u04b0\u04b2\7\3\2\2\u04b1\u04b0\3\2\2\2\u04b1\u04b2\3\2\2\2\u04b2"+ + "\u04b4\3\2\2\2\u04b3\u04af\3\2\2\2\u04b3\u04b4\3\2\2\2\u04b4\u04b5\3\2"+ + "\2\2\u04b5\u04b6\7\21\2\2\u04b6\u00b1\3\2\2\2\u04b7\u04bc\5\u00b4[\2\u04b8"+ + "\u04b9\7\3\2\2\u04b9\u04bb\5\u00b4[\2\u04ba\u04b8\3\2\2\2\u04bb\u04be"+ + "\3\2\2\2\u04bc\u04ba\3\2\2\2\u04bc\u04bd\3\2\2\2\u04bd\u04c8\3\2\2\2\u04be"+ + "\u04bc\3\2\2\2\u04bf\u04c4\5r:\2\u04c0\u04c1\7\3\2\2\u04c1\u04c3\5\u00b4"+ + "[\2\u04c2\u04c0\3\2\2\2\u04c3\u04c6\3\2\2\2\u04c4\u04c2\3\2\2\2\u04c4"+ + "\u04c5\3\2\2\2\u04c5\u04c8\3\2\2\2\u04c6\u04c4\3\2\2\2\u04c7\u04b7\3\2"+ + "\2\2\u04c7\u04bf\3\2\2\2\u04c8\u00b3\3\2\2\2\u04c9\u04ca\5\u0134\u009b"+ + "\2\u04ca\u04cb\5n8\2\u04cb\u00b5\3\2\2\2\u04cc\u04cd\7;\2\2\u04cd\u04d1"+ + "\5\u00b8]\2\u04ce\u04d0\5\u00ba^\2\u04cf\u04ce\3\2\2\2\u04d0\u04d3\3\2"+ + "\2\2\u04d1\u04cf\3\2\2\2\u04d1\u04d2\3\2\2\2\u04d2\u04dd\3\2\2\2\u04d3"+ + "\u04d1\3\2\2\2\u04d4\u04d8\5\u00fc\177\2\u04d5\u04d7\5\u00ba^\2\u04d6"+ + "\u04d5\3\2\2\2\u04d7\u04da\3\2\2\2\u04d8\u04d6\3\2\2\2\u04d8\u04d9\3\2"+ + "\2\2\u04d9\u04dc\3\2\2\2\u04da\u04d8\3\2\2\2\u04db\u04d4\3\2\2\2\u04dc"+ + "\u04df\3\2\2\2\u04dd\u04db\3\2\2\2\u04dd\u04de\3\2\2\2\u04de\u04e3\3\2"+ + "\2\2\u04df\u04dd\3\2\2\2\u04e0\u04e1\5\u00bc_\2\u04e1\u04e2\5p9\2\u04e2"+ + "\u04e4\3\2\2\2\u04e3\u04e0\3\2\2\2\u04e3\u04e4\3\2\2\2\u04e4\u00b7\3\2"+ + "\2\2\u04e5\u04e6\7\22\2\2\u04e6\u04e7\5n8\2\u04e7\u04e8\7\23\2\2\u04e8"+ + "\u04eb\3\2\2\2\u04e9\u04eb\5\u00fe\u0080\2\u04ea\u04e5\3\2\2\2\u04ea\u04e9"+ + "\3\2\2\2\u04eb\u00b9\3\2\2\2\u04ec\u04ee\5\u016c\u00b7\2\u04ed\u04ec\3"+ + "\2\2\2\u04ed\u04ee\3\2\2\2\u04ee\u04ef\3\2\2\2\u04ef\u04f0\5\u00b0Y\2"+ + "\u04f0\u00bb\3\2\2\2\u04f1\u04f4\7\7\2\2\u04f2\u04f4\5\u00be`\2\u04f3"+ + "\u04f1\3\2\2\2\u04f3\u04f2\3\2\2\2\u04f4\u00bd\3\2\2\2\u04f5\u04f6\t\t"+ + "\2\2\u04f6\u00bf\3\2\2\2\u04f7\u04fd\5\u00c2b\2\u04f8\u04f9\7H\2\2\u04f9"+ + "\u04fa\5p9\2\u04fa\u04fb\7\27\2\2\u04fb\u04fc\5p9\2\u04fc\u04fe\3\2\2"+ + "\2\u04fd\u04f8\3\2\2\2\u04fd\u04fe\3\2\2\2\u04fe\u00c1\3\2\2\2\u04ff\u0504"+ + "\5\u00c4c\2\u0500\u0501\7I\2\2\u0501\u0503\5\u00c4c\2\u0502\u0500\3\2"+ + "\2\2\u0503\u0506\3\2\2\2\u0504\u0502\3\2\2\2\u0504\u0505\3\2\2\2\u0505"+ + "\u00c3\3\2\2\2\u0506\u0504\3\2\2\2\u0507\u050c\5\u00c6d\2\u0508\u0509"+ + "\7J\2\2\u0509\u050b\5\u00c6d\2\u050a\u0508\3\2\2\2\u050b\u050e\3\2\2\2"+ + "\u050c\u050a\3\2\2\2\u050c\u050d\3\2\2\2\u050d\u00c5\3\2\2\2\u050e\u050c"+ + "\3\2\2\2\u050f\u0514\5\u00c8e\2\u0510\u0511\7K\2\2\u0511\u0513\5\u00c8"+ + "e\2\u0512\u0510\3\2\2\2\u0513\u0516\3\2\2\2\u0514\u0512\3\2\2\2\u0514"+ + "\u0515\3\2\2\2\u0515\u00c7\3\2\2\2\u0516\u0514\3\2\2\2\u0517\u051b\5\u00cc"+ + "g\2\u0518\u0519\5\u00caf\2\u0519\u051a\5\u00ccg\2\u051a\u051c\3\2\2\2"+ + "\u051b\u0518\3\2\2\2\u051b\u051c\3\2\2\2\u051c\u0522\3\2\2\2\u051d\u051e"+ + "\7(\2\2\u051e\u051f\5\u00caf\2\u051f\u0520\5\u00ccg\2\u0520\u0522\3\2"+ + "\2\2\u0521\u0517\3\2\2\2\u0521\u051d\3\2\2\2\u0522\u00c9\3\2\2\2\u0523"+ + "\u0524\t\n\2\2\u0524\u00cb\3\2\2\2\u0525\u052b\5\u00d0i\2\u0526\u052c"+ + "\5\u0102\u0082\2\u0527\u052c\5\u0106\u0084\2\u0528\u0529\5\u00ceh\2\u0529"+ + "\u052a\5\u00d0i\2\u052a\u052c\3\2\2\2\u052b\u0526\3\2\2\2\u052b\u0527"+ + "\3\2\2\2\u052b\u0528\3\2\2\2\u052b\u052c\3\2\2\2\u052c\u0532\3\2\2\2\u052d"+ + "\u052e\7(\2\2\u052e\u052f\5\u00ceh\2\u052f\u0530\5\u00d0i\2\u0530\u0532"+ + "\3\2\2\2\u0531\u0525\3\2\2\2\u0531\u052d\3\2\2\2\u0532\u00cd\3\2\2\2\u0533"+ + "\u0534\t\13\2\2\u0534\u00cf\3\2\2\2\u0535\u053a\5\u00d2j\2\u0536\u0537"+ + "\7O\2\2\u0537\u0539\5\u00d2j\2\u0538\u0536\3\2\2\2\u0539\u053c\3\2\2\2"+ + "\u053a\u0538\3\2\2\2\u053a\u053b\3\2\2\2\u053b\u0545\3\2\2\2\u053c\u053a"+ + "\3\2\2\2\u053d\u0540\7(\2\2\u053e\u053f\7O\2\2\u053f\u0541\5\u00d0i\2"+ + "\u0540\u053e\3\2\2\2\u0541\u0542\3\2\2\2\u0542\u0540\3\2\2\2\u0542\u0543"+ + "\3\2\2\2\u0543\u0545\3\2\2\2\u0544\u0535\3\2\2\2\u0544\u053d\3\2\2\2\u0545"+ + "\u00d1\3\2\2\2\u0546\u054b\5\u00d4k\2\u0547\u0548\7P\2\2\u0548\u054a\5"+ + "\u00d4k\2\u0549\u0547\3\2\2\2\u054a\u054d\3\2\2\2\u054b\u0549\3\2\2\2"+ + "\u054b\u054c\3\2\2\2\u054c\u0556\3\2\2\2\u054d\u054b\3\2\2\2\u054e\u0551"+ + "\7(\2\2\u054f\u0550\7P\2\2\u0550\u0552\5\u00d4k\2\u0551\u054f\3\2\2\2"+ + "\u0552\u0553\3\2\2\2\u0553\u0551\3\2\2\2\u0553\u0554\3\2\2\2\u0554\u0556"+ + "\3\2\2\2\u0555\u0546\3\2\2\2\u0555\u054e\3\2\2\2\u0556\u00d3\3\2\2\2\u0557"+ + "\u055c\5\u00d8m\2\u0558\u0559\7Q\2\2\u0559\u055b\5\u00d8m\2\u055a\u0558"+ + "\3\2\2\2\u055b\u055e\3\2\2\2\u055c\u055a\3\2\2\2\u055c\u055d\3\2\2\2\u055d"+ + "\u0567\3\2\2\2\u055e\u055c\3\2\2\2\u055f\u0562\7(\2\2\u0560\u0561\7Q\2"+ + "\2\u0561\u0563\5\u00d8m\2\u0562\u0560\3\2\2\2\u0563\u0564\3\2\2\2\u0564"+ + "\u0562\3\2\2\2\u0564\u0565\3\2\2\2\u0565\u0567\3\2\2\2\u0566\u0557\3\2"+ + "\2\2\u0566\u055f\3\2\2\2\u0567\u00d5\3\2\2\2\u0568\u0569\t\f\2\2\u0569"+ + "\u00d7\3\2\2\2\u056a\u0570\5\u00dco\2\u056b\u056c\5\u00dan\2\u056c\u056d"+ + "\5\u00dco\2\u056d\u056f\3\2\2\2\u056e\u056b\3\2\2\2\u056f\u0572\3\2\2"+ + "\2\u0570\u056e\3\2\2\2\u0570\u0571\3\2\2\2\u0571\u057c\3\2\2\2\u0572\u0570"+ + "\3\2\2\2\u0573\u0577\7(\2\2\u0574\u0575\5\u00dan\2\u0575\u0576\5\u00dc"+ + "o\2\u0576\u0578\3\2\2\2\u0577\u0574\3\2\2\2\u0578\u0579\3\2\2\2\u0579"+ + "\u0577\3\2\2\2\u0579\u057a\3\2\2\2\u057a\u057c\3\2\2\2\u057b\u056a\3\2"+ + "\2\2\u057b\u0573\3\2\2\2\u057c\u00d9\3\2\2\2\u057d\u057e\t\r\2\2\u057e"+ + "\u00db\3\2\2\2\u057f\u0585\5\u00e0q\2\u0580\u0581\5\u00dep\2\u0581\u0582"+ + "\5\u00e0q\2\u0582\u0584\3\2\2\2\u0583\u0580\3\2\2\2\u0584\u0587\3\2\2"+ + "\2\u0585\u0583\3\2\2\2\u0585\u0586\3\2\2\2\u0586\u0591\3\2\2\2\u0587\u0585"+ + "\3\2\2\2\u0588\u058c\7(\2\2\u0589\u058a\5\u00dep\2\u058a\u058b\5\u00e0"+ + "q\2\u058b\u058d\3\2\2\2\u058c\u0589\3\2\2\2\u058d\u058e\3\2\2\2\u058e"+ + "\u058c\3\2\2\2\u058e\u058f\3\2\2\2\u058f\u0591\3\2\2\2\u0590\u057f\3\2"+ + "\2\2\u0590\u0588\3\2\2\2\u0591\u00dd\3\2\2\2\u0592\u0593\t\16\2\2\u0593"+ + "\u00df\3\2\2\2\u0594\u059a\5\u00e4s\2\u0595\u0596\5\u00e2r\2\u0596\u0597"+ + "\5\u00e4s\2\u0597\u0599\3\2\2\2\u0598\u0595\3\2\2\2\u0599\u059c\3\2\2"+ + "\2\u059a\u0598\3\2\2\2\u059a\u059b\3\2\2\2\u059b\u05a6\3\2\2\2\u059c\u059a"+ + "\3\2\2\2\u059d\u05a1\7(\2\2\u059e\u059f\5\u00e2r\2\u059f\u05a0\5\u00e4"+ + "s\2\u05a0\u05a2\3\2\2\2\u05a1\u059e\3\2\2\2\u05a2\u05a3\3\2\2\2\u05a3"+ + "\u05a1\3\2\2\2\u05a3\u05a4\3\2\2\2\u05a4\u05a6\3\2\2\2\u05a5\u0594\3\2"+ + "\2\2\u05a5\u059d\3\2\2\2\u05a6\u00e1\3\2\2\2\u05a7\u05a8\t\17\2\2\u05a8"+ + "\u00e3\3\2\2\2\u05a9\u05aa\5\u00e6t\2\u05aa\u05ab\5\u00e4s\2\u05ab\u05b8"+ + "\3\2\2\2\u05ac\u05b8\5\u00eex\2\u05ad\u05b8\5\u00f0y\2\u05ae\u05b1\5\u00e8"+ + "u\2\u05af\u05b1\5\u00ecw\2\u05b0\u05ae\3\2\2\2\u05b0\u05af\3\2\2\2\u05b1"+ + "\u05b2\3\2\2\2\u05b2\u05b3\7(\2\2\u05b3\u05b8\3\2\2\2\u05b4\u05b5\5\u00f6"+ + "|\2\u05b5\u05b6\5\u00f8}\2\u05b6\u05b8\3\2\2\2\u05b7\u05a9\3\2\2\2\u05b7"+ + "\u05ac\3\2\2\2\u05b7\u05ad\3\2\2\2\u05b7\u05b0\3\2\2\2\u05b7\u05b4\3\2"+ + "\2\2\u05b8\u00e5\3\2\2\2\u05b9\u05bd\5\u00e8u\2\u05ba\u05bd\5\u00eav\2"+ + "\u05bb\u05bd\5\u00ecw\2\u05bc\u05b9\3\2\2\2\u05bc\u05ba\3\2\2\2\u05bc"+ + "\u05bb\3\2\2\2\u05bd\u00e7\3\2\2\2\u05be\u05bf\7V\2\2\u05bf\u00e9\3\2"+ + "\2\2\u05c0\u05c1\7[\2\2\u05c1\u00eb\3\2\2\2\u05c2\u05c3\7\"\2\2\u05c3"+ + "\u00ed\3\2\2\2\u05c4\u05c5\7\\\2\2\u05c5\u05c6\5\u00e4s\2\u05c6\u00ef"+ + "\3\2\2\2\u05c7\u05c8\5\u00f8}\2\u05c8\u05c9\5\u00f2z\2\u05c9\u05d2\3\2"+ + "\2\2\u05ca\u05ce\5t;\2\u05cb\u05cd\5\u00f4{\2\u05cc\u05cb\3\2\2\2\u05cd"+ + "\u05d0\3\2\2\2\u05ce\u05cc\3\2\2\2\u05ce\u05cf\3\2\2\2\u05cf\u05d2\3\2"+ + "\2\2\u05d0\u05ce\3\2\2\2\u05d1\u05c7\3\2\2\2\u05d1\u05ca\3\2\2\2\u05d2"+ + "\u00f1\3\2\2\2\u05d3\u05d4\5\u00f6|\2\u05d4\u00f3\3\2\2\2\u05d5\u05d8"+ + "\5\u00fc\177\2\u05d6\u05d8\5\u00ba^\2\u05d7\u05d5\3\2\2\2\u05d7\u05d6"+ + "\3\2\2\2\u05d8\u00f5\3\2\2\2\u05d9\u05da\t\20\2\2\u05da\u00f7\3\2\2\2"+ + "\u05db\u05e3\5t;\2\u05dc\u05de\5\u00ba^\2\u05dd\u05dc\3\2\2\2\u05de\u05e1"+ + "\3\2\2\2\u05df\u05dd\3\2\2\2\u05df\u05e0\3\2\2\2\u05e0\u05e2\3\2\2\2\u05e1"+ + "\u05df\3\2\2\2\u05e2\u05e4\5\u00fc\177\2\u05e3\u05df\3\2\2\2\u05e3\u05e4"+ + "\3\2\2\2\u05e4\u05ea\3\2\2\2\u05e5\u05e6\7(\2\2\u05e6\u05e7\5\u00fa~\2"+ + "\u05e7\u05e8\5\u00fe\u0080\2\u05e8\u05ea\3\2\2\2\u05e9\u05db\3\2\2\2\u05e9"+ + "\u05e5\3\2\2\2\u05ea\u00f9\3\2\2\2\u05eb\u05ec\7\22\2\2\u05ec\u05ed\5"+ + "n8\2\u05ed\u05ee\7\23\2\2\u05ee\u05f2\3\2\2\2\u05ef\u05f0\7\26\2\2\u05f0"+ + "\u05f2\5\u00fe\u0080\2\u05f1\u05eb\3\2\2\2\u05f1\u05ef\3\2\2\2\u05f2\u00fb"+ + "\3\2\2\2\u05f3\u05f7\5\u00fa~\2\u05f4\u05f5\7_\2\2\u05f5\u05f7\5\u00fe"+ + "\u0080\2\u05f6\u05f3\3\2\2\2\u05f6\u05f4\3\2\2\2\u05f7\u00fd\3\2\2\2\u05f8"+ + "\u05f9\7\u0084\2\2\u05f9\u00ff\3\2\2\2\u05fa\u05fd\5\u00fe\u0080\2\u05fb"+ + "\u05fc\7\26\2\2\u05fc\u05fe\5\u00fe\u0080\2\u05fd\u05fb\3\2\2\2\u05fd"+ + "\u05fe\3\2\2\2\u05fe\u0101\3\2\2\2\u05ff\u0600\5\u0104\u0083\2\u0600\u0601"+ + "\5\u0168\u00b5\2\u0601\u0103\3\2\2\2\u0602\u0604\7`\2\2\u0603\u0605\7"+ + "[\2\2\u0604\u0603\3\2\2\2\u0604\u0605\3\2\2\2\u0605\u0105\3\2\2\2\u0606"+ + "\u0607\5\u0108\u0085\2\u0607\u0608\5\u0168\u00b5\2\u0608\u0107\3\2\2\2"+ + "\u0609\u060a\7a\2\2\u060a\u0109\3\2\2\2\u060b\u060d\5\u010c\u0087\2\u060c"+ + "\u060b\3\2\2\2\u060d\u0610\3\2\2\2\u060e\u060c\3\2\2\2\u060e\u060f\3\2"+ + "\2\2\u060f\u010b\3\2\2\2\u0610\u060e\3\2\2\2\u0611\u0613\5\u0134\u009b"+ + "\2\u0612\u0611\3\2\2\2\u0613\u0616\3\2\2\2\u0614\u0612\3\2\2\2\u0614\u0615"+ + "\3\2\2\2\u0615\u0617\3\2\2\2\u0616\u0614\3\2\2\2\u0617\u0618\5\u010e\u0088"+ + "\2\u0618\u010d\3\2\2\2\u0619\u062b\5\32\16\2\u061a\u062b\5\u0112\u008a"+ + "\2\u061b\u062b\5\u0118\u008d\2\u061c\u062b\5\u011e\u0090\2\u061d\u062b"+ + "\5\u0120\u0091\2\u061e\u062b\5\u0122\u0092\2\u061f\u062b\5\u0116\u008c"+ + "\2\u0620\u062b\5\u0128\u0095\2\u0621\u062b\5\u012a\u0096\2\u0622\u062b"+ + "\5\u0136\u009c\2\u0623\u062b\5\u0138\u009d\2\u0624\u062b\5\u0132\u009a"+ + "\2\u0625\u062b\5\u013a\u009e\2\u0626\u062b\5\u013c\u009f\2\u0627\u062b"+ + "\5\u0110\u0089\2\u0628\u062b\5\u013e\u00a0\2\u0629\u062b\5\u0114\u008b"+ + "\2\u062a\u0619\3\2\2\2\u062a\u061a\3\2\2\2\u062a\u061b\3\2\2\2\u062a\u061c"+ + "\3\2\2\2\u062a\u061d\3\2\2\2\u062a\u061e\3\2\2\2\u062a\u061f\3\2\2\2\u062a"+ + "\u0620\3\2\2\2\u062a\u0621\3\2\2\2\u062a\u0622\3\2\2\2\u062a\u0623\3\2"+ + "\2\2\u062a\u0624\3\2\2\2\u062a\u0625\3\2\2\2\u062a\u0626\3\2\2\2\u062a"+ + "\u0627\3\2\2\2\u062a\u0628\3\2\2\2\u062a\u0629\3\2\2\2\u062b\u010f\3\2"+ + "\2\2\u062c\u062e\5n8\2\u062d\u062c\3\2\2\2\u062d\u062e\3\2\2\2\u062e\u062f"+ + "\3\2\2\2\u062f\u0630\7\13\2\2\u0630\u0111\3\2\2\2\u0631\u0632\5\f\7\2"+ + "\u0632\u0633\7\13\2\2\u0633\u0113\3\2\2\2\u0634\u0635\5\22\n\2\u0635\u0636"+ + "\5\30\r\2\u0636\u0115\3\2\2\2\u0637\u0638\7b\2\2\u0638\u0639\7\20\2\2"+ + "\u0639\u063a\5n8\2\u063a\u063b\7\21\2\2\u063b\u063e\5\u010c\u0087\2\u063c"+ + "\u063d\7c\2\2\u063d\u063f\5\u010c\u0087\2\u063e\u063c\3\2\2\2\u063e\u063f"+ + "\3\2\2\2\u063f\u0650\3\2\2\2\u0640\u0641\7b\2\2\u0641\u0642\7\20\2\2\u0642"+ + "\u0643\5n8\2\u0643\u0644\7d\2\2\u0644\u0647\5\u0084C\2\u0645\u0646\7\61"+ + "\2\2\u0646\u0648\5n8\2\u0647\u0645\3\2\2\2\u0647\u0648\3\2\2\2\u0648\u0649"+ + "\3\2\2\2\u0649\u064a\7\21\2\2\u064a\u064d\5\u010c\u0087\2\u064b\u064c"+ + "\7c\2\2\u064c\u064e\5\u010c\u0087\2\u064d\u064b\3\2\2\2\u064d\u064e\3"+ + "\2\2\2\u064e\u0650\3\2\2\2\u064f\u0637\3\2\2\2\u064f\u0640\3\2\2\2\u0650"+ + "\u0117\3\2\2\2\u0651\u0653\7\\\2\2\u0652\u0651\3\2\2\2\u0652\u0653\3\2"+ + "\2\2\u0653\u0654\3\2\2\2\u0654\u0655\7e\2\2\u0655\u0656\7\20\2\2\u0656"+ + "\u0657\5\u011a\u008e\2\u0657\u0658\7\21\2\2\u0658\u0659\5\u010c\u0087"+ + "\2\u0659\u0119\3\2\2\2\u065a\u065c\5\u011c\u008f\2\u065b\u065d\5n8\2\u065c"+ + "\u065b\3\2\2\2\u065c\u065d\3\2\2\2\u065d\u065e\3\2\2\2\u065e\u0660\7\13"+ + "\2\2\u065f\u0661\5r:\2\u0660\u065f\3\2\2\2\u0660\u0661\3\2\2\2\u0661\u066b"+ + "\3\2\2\2\u0662\u0663\5\6\4\2\u0663\u0664\7f\2\2\u0664\u0665\5n8\2\u0665"+ + "\u066b\3\2\2\2\u0666\u0667\5\u00fe\u0080\2\u0667\u0668\7f\2\2\u0668\u0669"+ + "\5n8\2\u0669\u066b\3\2\2\2\u066a\u065a\3\2\2\2\u066a\u0662\3\2\2\2\u066a"+ + "\u0666\3\2\2\2\u066b\u011b\3\2\2\2\u066c\u0672\5\u0112\u008a\2\u066d\u066f"+ + "\5n8\2\u066e\u066d\3\2\2\2\u066e\u066f\3\2\2\2\u066f\u0670\3\2\2\2\u0670"+ + "\u0672\7\13\2\2\u0671\u066c\3\2\2\2\u0671\u066e\3\2\2\2\u0672\u011d\3"+ + "\2\2\2\u0673\u0674\7g\2\2\u0674\u0675\7\20\2\2\u0675\u0676\5n8\2\u0676"+ + "\u0677\7\21\2\2\u0677\u0678\5\u010c\u0087\2\u0678\u011f\3\2\2\2\u0679"+ + "\u067a\7h\2\2\u067a\u067b\5\u010c\u0087\2\u067b\u067c\7g\2\2\u067c\u067d"+ + "\7\20\2\2\u067d\u067e\5n8\2\u067e\u067f\7\21\2\2\u067f\u0680\7\13\2\2"+ + "\u0680\u0121\3\2\2\2\u0681\u0682\7\60\2\2\u0682\u0683\7\20\2\2\u0683\u0684"+ + "\5n8\2\u0684\u0685\7\21\2\2\u0685\u0689\7\16\2\2\u0686\u0688\5\u0124\u0093"+ + "\2\u0687\u0686\3\2\2\2\u0688\u068b\3\2\2\2\u0689\u0687\3\2\2\2\u0689\u068a"+ + "\3\2\2\2\u068a\u068d\3\2\2\2\u068b\u0689\3\2\2\2\u068c\u068e\5\u0126\u0094"+ + "\2\u068d\u068c\3\2\2\2\u068d\u068e\3\2\2\2\u068e\u068f\3\2\2\2\u068f\u0690"+ + "\7\17\2\2\u0690\u0123\3\2\2\2\u0691\u0693\5\u0134\u009b\2\u0692\u0691"+ + "\3\2\2\2\u0693\u0696\3\2\2\2\u0694\u0692\3\2\2\2\u0694\u0695\3\2\2\2\u0695"+ + "\u0697\3\2\2\2\u0696\u0694\3\2\2\2\u0697\u0698\7d\2\2\u0698\u069b\5n8"+ + "\2\u0699\u069a\7\61\2\2\u069a\u069c\5n8\2\u069b\u0699\3\2\2\2\u069b\u069c"+ + "\3\2\2\2\u069c\u069d\3\2\2\2\u069d\u069e\7\27\2\2\u069e\u069f\5\u010a"+ + "\u0086\2\u069f\u0125\3\2\2\2\u06a0\u06a2\5\u0134\u009b\2\u06a1\u06a0\3"+ + "\2\2\2\u06a2\u06a5\3\2\2\2\u06a3\u06a1\3\2\2\2\u06a3\u06a4\3\2\2\2\u06a4"+ + "\u06a6\3\2\2\2\u06a5\u06a3\3\2\2\2\u06a6\u06a7\7i\2\2\u06a7\u06a8\7\27"+ + "\2\2\u06a8\u06a9\5\u010a\u0086\2\u06a9\u0127\3\2\2\2\u06aa\u06ab\7j\2"+ + "\2\u06ab\u06ac\7\13\2\2\u06ac\u0129\3\2\2\2\u06ad\u06ae\7k\2\2\u06ae\u06b8"+ + "\5\32\16\2\u06af\u06b1\5\u012c\u0097\2\u06b0\u06af\3\2\2\2\u06b1\u06b2"+ + "\3\2\2\2\u06b2\u06b0\3\2\2\2\u06b2\u06b3\3\2\2\2\u06b3\u06b5\3\2\2\2\u06b4"+ + "\u06b6\5\u0130\u0099\2\u06b5\u06b4\3\2\2\2\u06b5\u06b6\3\2\2\2\u06b6\u06b9"+ + "\3\2\2\2\u06b7\u06b9\5\u0130\u0099\2\u06b8\u06b0\3\2\2\2\u06b8\u06b7\3"+ + "\2\2\2\u06b9\u012b\3\2\2\2\u06ba\u06bb\5\u012e\u0098\2\u06bb\u06bc\5\32"+ + "\16\2\u06bc\u06c5\3\2\2\2\u06bd\u06be\7l\2\2\u06be\u06c0\5\u0168\u00b5"+ + "\2\u06bf\u06c1\5\u012e\u0098\2\u06c0\u06bf\3\2\2\2\u06c0\u06c1\3\2\2\2"+ + "\u06c1\u06c2\3\2\2\2\u06c2\u06c3\5\32\16\2\u06c3\u06c5\3\2\2\2\u06c4\u06ba"+ + "\3\2\2\2\u06c4\u06bd\3\2\2\2\u06c5\u012d\3\2\2\2\u06c6\u06c7\7m\2\2\u06c7"+ + "\u06c8\7\20\2\2\u06c8\u06cb\5\u00fe\u0080\2\u06c9\u06ca\7\3\2\2\u06ca"+ + "\u06cc\5\u00fe\u0080\2\u06cb\u06c9\3\2\2\2\u06cb\u06cc\3\2\2\2\u06cc\u06cd"+ + "\3\2\2\2\u06cd\u06ce\7\21\2\2\u06ce\u012f\3\2\2\2\u06cf\u06d0\7n\2\2\u06d0"+ + "\u06d1\5\32\16\2\u06d1\u0131\3\2\2\2\u06d2\u06d4\7o\2\2\u06d3\u06d5\5"+ + "n8\2\u06d4\u06d3\3\2\2\2\u06d4\u06d5\3\2\2\2\u06d5\u06d6\3\2\2\2\u06d6"+ + "\u06d7\7\13\2\2\u06d7\u0133\3\2\2\2\u06d8\u06d9\5\u00fe\u0080\2\u06d9"+ + "\u06da\7\27\2\2\u06da\u0135\3\2\2\2\u06db\u06dd\7p\2\2\u06dc\u06de\5\u00fe"+ + "\u0080\2\u06dd\u06dc\3\2\2\2\u06dd\u06de\3\2\2\2\u06de\u06df\3\2\2\2\u06df"+ + "\u06e0\7\13\2\2\u06e0\u0137\3\2\2\2\u06e1\u06e3\7q\2\2\u06e2\u06e4\5\u00fe"+ + "\u0080\2\u06e3\u06e2\3\2\2\2\u06e3\u06e4\3\2\2\2\u06e4\u06e5\3\2\2\2\u06e5"+ + "\u06e6\7\13\2\2\u06e6\u0139\3\2\2\2\u06e7\u06e8\7r\2\2\u06e8\u06e9\5n"+ + "8\2\u06e9\u06ea\7\13\2\2\u06ea\u013b\3\2\2\2\u06eb\u06ec\7s\2\2\u06ec"+ + "\u06ed\5n8\2\u06ed\u06ee\7\13\2\2\u06ee\u013d\3\2\2\2\u06ef\u06f0\5\u0140"+ + "\u00a1\2\u06f0\u06f1\7\13\2\2\u06f1\u013f\3\2\2\2\u06f2\u06f3\7t\2\2\u06f3"+ + "\u06f4\7\20\2\2\u06f4\u06f7\5n8\2\u06f5\u06f6\7\3\2\2\u06f6\u06f8\5n8"+ + "\2\u06f7\u06f5\3\2\2\2\u06f7\u06f8\3\2\2\2\u06f8\u06fa\3\2\2\2\u06f9\u06fb"+ + "\7\3\2\2\u06fa\u06f9\3\2\2\2\u06fa\u06fb\3\2\2\2\u06fb\u06fc\3\2\2\2\u06fc"+ + "\u06fd\7\21\2\2\u06fd\u0141\3\2\2\2\u06fe\u0730\5\64\33\2\u06ff\u0730"+ + "\5d\63\2\u0700\u0730\5\u0170\u00b9\2\u0701\u0703\7 \2\2\u0702\u0701\3"+ + "\2\2\2\u0702\u0703\3\2\2\2\u0703\u0704\3\2\2\2\u0704\u0705\5\22\n\2\u0705"+ + "\u0706\7\13\2\2\u0706\u0730\3\2\2\2\u0707\u0709\7 \2\2\u0708\u0707\3\2"+ + "\2\2\u0708\u0709\3\2\2\2\u0709\u070a\3\2\2\2\u070a\u070b\5H%\2\u070b\u070c"+ + "\7\13\2\2\u070c\u0730\3\2\2\2\u070d\u070f\7 \2\2\u070e\u070d\3\2\2\2\u070e"+ + "\u070f\3\2\2\2\u070f\u0710\3\2\2\2\u0710\u0711\5J&\2\u0711\u0712\7\13"+ + "\2\2\u0712\u0730\3\2\2\2\u0713\u0714\5\22\n\2\u0714\u0715\5\30\r\2\u0715"+ + "\u0730\3\2\2\2\u0716\u0718\5\26\f\2\u0717\u0716\3\2\2\2\u0717\u0718\3"+ + "\2\2\2\u0718\u0719\3\2\2\2\u0719\u071a\7&\2\2\u071a\u071b\5\u00fe\u0080"+ + "\2\u071b\u071c\5\30\r\2\u071c\u0730\3\2\2\2\u071d\u071f\5\26\f\2\u071e"+ + "\u071d\3\2\2\2\u071e\u071f\3\2\2\2\u071f\u0720\3\2\2\2\u0720\u0721\7\'"+ + "\2\2\u0721\u0722\5\u00fe\u0080\2\u0722\u0723\5\34\17\2\u0723\u0724\5\30"+ + "\r\2\u0724\u0730\3\2\2\2\u0725\u0727\t\4\2\2\u0726\u0728\5\u0168\u00b5"+ + "\2\u0727\u0726\3\2\2\2\u0727\u0728\3\2\2\2\u0728\u0729\3\2\2\2\u0729\u072a"+ + "\5> \2\u072a\u072b\7\13\2\2\u072b\u0730\3\2\2\2\u072c\u072d\5\4\3\2\u072d"+ + "\u072e\7\13\2\2\u072e\u0730\3\2\2\2\u072f\u06fe\3\2\2\2\u072f\u06ff\3"+ + "\2\2\2\u072f\u0700\3\2\2\2\u072f\u0702\3\2\2\2\u072f\u0708\3\2\2\2\u072f"+ + "\u070e\3\2\2\2\u072f\u0713\3\2\2\2\u072f\u0717\3\2\2\2\u072f\u071e\3\2"+ + "\2\2\u072f\u0725\3\2\2\2\u072f\u072c\3\2\2\2\u0730\u0143\3\2\2\2\u0731"+ + "\u0732\t\21\2\2\u0732\u0145\3\2\2\2\u0733\u0735\5\u0148\u00a5\2\u0734"+ + "\u0733\3\2\2\2\u0734\u0735\3\2\2\2\u0735\u0737\3\2\2\2\u0736\u0738\5\u014a"+ + "\u00a6\2\u0737\u0736\3\2\2\2\u0737\u0738\3\2\2\2\u0738\u073c\3\2\2\2\u0739"+ + "\u073b\5\u014c\u00a7\2\u073a\u0739\3\2\2\2\u073b\u073e\3\2\2\2\u073c\u073a"+ + "\3\2\2\2\u073c\u073d\3\2\2\2\u073d\u0742\3\2\2\2\u073e\u073c\3\2\2\2\u073f"+ + "\u0741\5\u015a\u00ae\2\u0740\u073f\3\2\2\2\u0741\u0744\3\2\2\2\u0742\u0740"+ + "\3\2\2\2\u0742\u0743\3\2\2\2\u0743\u0748\3\2\2\2\u0744\u0742\3\2\2\2\u0745"+ + "\u0747\5\u0142\u00a2\2\u0746\u0745\3\2\2\2\u0747\u074a\3\2\2\2\u0748\u0746"+ + "\3\2\2\2\u0748\u0749\3\2\2\2\u0749\u0147\3\2\2\2\u074a\u0748\3\2\2\2\u074b"+ + "\u074f\7u\2\2\u074c\u074e\n\22\2\2\u074d\u074c\3\2\2\2\u074e\u0751\3\2"+ + "\2\2\u074f\u074d\3\2\2\2\u074f\u0750\3\2\2\2\u0750\u0752\3\2\2\2\u0751"+ + "\u074f\3\2\2\2\u0752\u0753\7\u0083\2\2\u0753\u0149\3\2\2\2\u0754\u0755"+ + "\5l\67\2\u0755\u0756\7v\2\2\u0756\u0757\5\u014e\u00a8\2\u0757\u0758\7"+ + "\13\2\2\u0758\u014b\3\2\2\2\u0759\u075c\5\u0150\u00a9\2\u075a\u075c\5"+ + "\u0158\u00ad\2\u075b\u0759\3\2\2\2\u075b\u075a\3\2\2\2\u075c\u014d\3\2"+ + "\2\2\u075d\u0762\5\u00fe\u0080\2\u075e\u075f\7\3\2\2\u075f\u0761\5\u00fe"+ + "\u0080\2\u0760\u075e\3\2\2\2\u0761\u0764\3\2\2\2\u0762\u0760\3\2\2\2\u0762"+ + "\u0763\3\2\2\2\u0763\u014f\3\2\2\2\u0764\u0762\3\2\2\2\u0765\u0766\5l"+ + "\67\2\u0766\u0767\5\u0152\u00aa\2\u0767\u0151\3\2\2\2\u0768\u0769\7w\2"+ + "\2\u0769\u076c\5\u0162\u00b2\2\u076a\u076b\7a\2\2\u076b\u076d\5\u00fe"+ + "\u0080\2\u076c\u076a\3\2\2\2\u076c\u076d\3\2\2\2\u076d\u0771\3\2\2\2\u076e"+ + "\u0770\5\u0154\u00ab\2\u076f\u076e\3\2\2\2\u0770\u0773\3\2\2\2\u0771\u076f"+ + "\3\2\2\2\u0771\u0772\3\2\2\2\u0772\u0774\3\2\2\2\u0773\u0771\3\2\2\2\u0774"+ + "\u0775\7\13\2\2\u0775\u0153\3\2\2\2\u0776\u0777\7x\2\2\u0777\u077b\5\u0156"+ + "\u00ac\2\u0778\u0779\7y\2\2\u0779\u077b\5\u0156\u00ac\2\u077a\u0776\3"+ + "\2\2\2\u077a\u0778\3\2\2\2\u077b\u0155\3\2\2\2\u077c\u0781\5\u00fe\u0080"+ + "\2\u077d\u077e\7\3\2\2\u077e\u0780\5\u00fe\u0080\2\u077f\u077d\3\2\2\2"+ + "\u0780\u0783\3\2\2\2\u0781\u077f\3\2\2\2\u0781\u0782\3\2\2\2\u0782\u0157"+ + "\3\2\2\2\u0783\u0781\3\2\2\2\u0784\u0785\5l\67\2\u0785\u0786\7z\2\2\u0786"+ + "\u078a\5\u0162\u00b2\2\u0787\u0789\5\u0154\u00ab\2\u0788\u0787\3\2\2\2"+ + "\u0789\u078c\3\2\2\2\u078a\u0788\3\2\2\2\u078a\u078b\3\2\2\2\u078b\u078d"+ + "\3\2\2\2\u078c\u078a\3\2\2\2\u078d\u078e\7\13\2\2\u078e\u0159\3\2\2\2"+ + "\u078f\u0790\5l\67\2\u0790\u0791\7{\2\2\u0791\u0792\5\u0160\u00b1\2\u0792"+ + "\u0793\7\13\2\2\u0793\u015b\3\2\2\2\u0794\u0795\5l\67\2\u0795\u0796\7"+ + "{\2\2\u0796\u0797\7|\2\2\u0797\u079c\5\u00fe\u0080\2\u0798\u0799\7\26"+ + "\2\2\u0799\u079b\5\u00fe\u0080\2\u079a\u0798\3\2\2\2\u079b\u079e\3\2\2"+ + "\2\u079c\u079a\3\2\2\2\u079c\u079d\3\2\2\2\u079d\u079f\3\2\2\2\u079e\u079c"+ + "\3\2\2\2\u079f\u07a0\7\13\2\2\u07a0\u015d\3\2\2\2\u07a1\u07a5\5\u015c"+ + "\u00af\2\u07a2\u07a4\5\u0142\u00a2\2\u07a3\u07a2\3\2\2\2\u07a4\u07a7\3"+ + "\2\2\2\u07a5\u07a3\3\2\2\2\u07a5\u07a6\3\2\2\2\u07a6\u07a8\3\2\2\2\u07a7"+ + "\u07a5\3\2\2\2\u07a8\u07a9\7\2\2\3\u07a9\u015f\3\2\2\2\u07aa\u07ab\5\u0098"+ + "M\2\u07ab\u0161\3\2\2\2\u07ac\u07b0\5\u0160\u00b1\2\u07ad\u07af\5\u0164"+ + "\u00b3\2\u07ae\u07ad\3\2\2\2\u07af\u07b2\3\2\2\2\u07b0\u07ae\3\2\2\2\u07b0"+ + "\u07b1\3\2\2\2\u07b1\u0163\3\2\2\2\u07b2\u07b0\3\2\2\2\u07b3\u07b4\7b"+ + "\2\2\u07b4\u07b5\7\20\2\2\u07b5\u07b6\5\u0166\u00b4\2\u07b6\u07b7\7\21"+ + "\2\2\u07b7\u07b8\5\u0160\u00b1\2\u07b8\u0165\3\2\2\2\u07b9\u07bc\5\u014e"+ + "\u00a8\2\u07ba\u07bb\7%\2\2\u07bb\u07bd\5\u0098M\2\u07bc\u07ba\3\2\2\2"+ + "\u07bc\u07bd\3\2\2\2\u07bd\u0167\3\2\2\2\u07be\u07c0\5\u016a\u00b6\2\u07bf"+ + "\u07c1\5\u016c\u00b7\2\u07c0\u07bf\3\2\2\2\u07c0\u07c1\3\2\2\2\u07c1\u07c3"+ + "\3\2\2\2\u07c2\u07c4\7H\2\2\u07c3\u07c2\3\2\2\2\u07c3\u07c4\3\2\2\2\u07c4"+ + "\u07ca\3\2\2\2\u07c5\u07c7\5z>\2\u07c6\u07c8\7H\2\2\u07c7\u07c6\3\2\2"+ + "\2\u07c7\u07c8\3\2\2\2\u07c8\u07ca\3\2\2\2\u07c9\u07be\3\2\2\2\u07c9\u07c5"+ + "\3\2\2\2\u07ca\u0169\3\2\2\2\u07cb\u07ce\5\u0100\u0081\2\u07cc\u07ce\7"+ + "\b\2\2\u07cd\u07cb\3\2\2\2\u07cd\u07cc\3\2\2\2\u07ce\u016b\3\2\2\2\u07cf"+ + "\u07d0\7-\2\2\u07d0\u07d1\5\u016e\u00b8\2\u07d1\u07d2\7.\2\2\u07d2\u016d"+ + "\3\2\2\2\u07d3\u07d8\5\u0168\u00b5\2\u07d4\u07d5\7\3\2\2\u07d5\u07d7\5"+ + "\u0168\u00b5\2\u07d6\u07d4\3\2\2\2\u07d7\u07da\3\2\2\2\u07d8\u07d6\3\2"+ + "\2\2\u07d8\u07d9\3\2\2\2\u07d9\u016f\3\2\2\2\u07da\u07d8\3\2\2\2\u07db"+ + "\u07dc\5l\67\2\u07dc\u07dd\7}\2\2\u07dd\u07de\5\u0172\u00ba\2\u07de\u0171"+ + "\3\2\2\2\u07df\u07e0\5\u0174\u00bb\2\u07e0\u0173\3\2\2\2\u07e1\u07e3\5"+ + "\u0176\u00bc\2\u07e2\u07e4\5j\66\2\u07e3\u07e2\3\2\2\2\u07e3\u07e4\3\2"+ + "\2\2\u07e4\u07e5\3\2\2\2\u07e5\u07e6\5\34\17\2\u07e6\u07e7\7\13\2\2\u07e7"+ + "\u0175\3\2\2\2\u07e8\u07ea\5\26\f\2\u07e9\u07e8\3\2\2\2\u07e9\u07ea\3"+ + "\2\2\2\u07ea\u07eb\3\2\2\2\u07eb\u07ec\5\u00fe\u0080\2\u07ec\u0177\3\2"+ + "\2\2\u00f5\u017a\u0181\u018a\u018e\u0191\u0195\u019a\u01a0\u01a6\u01ad"+ + "\u01b2\u01b8\u01be\u01c1\u01c8\u01cb\u01db\u01e3\u01ea\u01ef\u01f7\u01fb"+ + "\u0205\u0209\u0210\u0214\u0217\u021f\u0223\u0227\u022d\u0232\u0237\u023c"+ + "\u023e\u0246\u024a\u024f\u0252\u0255\u0258\u0260\u0267\u026c\u0272\u0275"+ + "\u0278\u027b\u0283\u028a\u028f\u029a\u029e\u02a2\u02a6\u02aa\u02ae\u02b3"+ + "\u02b8\u02c0\u02c2\u02c7\u02c9\u02cd\u02d2\u02d4\u02da\u02df\u02e3\u02e7"+ + "\u02ea\u02f1\u02f9\u0303\u030b\u030e\u0314\u031d\u0325\u032f\u033b\u033f"+ + "\u0347\u034e\u0353\u0359\u0360\u036e\u0377\u0382\u0386\u0391\u0399\u03a2"+ + "\u03a5\u03a9\u03b4\u03b8\u03c0\u03c7\u03d8\u03e2\u03e6\u03ed\u03f9\u03fd"+ + "\u0404\u0412\u0416\u0421\u0428\u042e\u0438\u043a\u0449\u0454\u045c\u0465"+ + "\u0468\u046b\u046e\u0473\u0475\u047a\u047d\u0485\u0489\u048b\u04a2\u04aa"+ + "\u04b1\u04b3\u04bc\u04c4\u04c7\u04d1\u04d8\u04dd\u04e3\u04ea\u04ed\u04f3"+ + "\u04fd\u0504\u050c\u0514\u051b\u0521\u052b\u0531\u053a\u0542\u0544\u054b"+ + "\u0553\u0555\u055c\u0564\u0566\u0570\u0579\u057b\u0585\u058e\u0590\u059a"+ + "\u05a3\u05a5\u05b0\u05b7\u05bc\u05ce\u05d1\u05d7\u05df\u05e3\u05e9\u05f1"+ + "\u05f6\u05fd\u0604\u060e\u0614\u062a\u062d\u063e\u0647\u064d\u064f\u0652"+ + "\u065c\u0660\u066a\u066e\u0671\u0689\u068d\u0694\u069b\u06a3\u06b2\u06b5"+ + "\u06b8\u06c0\u06c4\u06cb\u06d4\u06dd\u06e3\u06f7\u06fa\u0702\u0708\u070e"+ + "\u0717\u071e\u0727\u072f\u0734\u0737\u073c\u0742\u0748\u074f\u075b\u0762"+ + "\u076c\u0771\u077a\u0781\u078a\u079c\u07a5\u07b0\u07bc\u07c0\u07c3\u07c7"+ + "\u07c9\u07cd\u07d8\u07e3\u07e9"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/generated/Dart2Visitor.java b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/generated/Dart2Visitor.java index 83b35d0..ba3e12b 100644 --- a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/generated/Dart2Visitor.java +++ b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/antlr/generated/Dart2Visitor.java @@ -1,21 +1,5 @@ -/* - * SonarQube Flutter Plugin - Enables analysis of Dart and Flutter projects into SonarQube. - * Copyright © 2020 inside|app (contact@insideapp.fr) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ -package fr.insideapp.sonarqube.dart.lang.antlr.generated;// Generated from Dart2.g4 by ANTLR 4.8 +// Generated from dart-lang/src/main/antlr/Dart2.g4 by ANTLR 4.8 +package fr.insideapp.sonarqube.dart.lang.antlr.generated; import org.antlr.v4.runtime.tree.ParseTreeVisitor; /** @@ -170,6 +154,12 @@ public interface Dart2Visitor extends ParseTreeVisitor { * @return the visitor result */ T visitDefaultNamedParameter(Dart2Parser.DefaultNamedParameterContext ctx); + /** + * Visit a parse tree produced by {@link Dart2Parser#classModifier}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitClassModifier(Dart2Parser.ClassModifierContext ctx); /** * Visit a parse tree produced by {@link Dart2Parser#classDefinition}. * @param ctx the parse tree @@ -368,6 +358,84 @@ public interface Dart2Visitor extends ParseTreeVisitor { * @return the visitor result */ T visitPrimary(Dart2Parser.PrimaryContext ctx); + /** + * Visit a parse tree produced by {@link Dart2Parser#recordLiteral}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRecordLiteral(Dart2Parser.RecordLiteralContext ctx); + /** + * Visit a parse tree produced by {@link Dart2Parser#recordField}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRecordField(Dart2Parser.RecordFieldContext ctx); + /** + * Visit a parse tree produced by {@link Dart2Parser#recordType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRecordType(Dart2Parser.RecordTypeContext ctx); + /** + * Visit a parse tree produced by {@link Dart2Parser#recordTypeField}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRecordTypeField(Dart2Parser.RecordTypeFieldContext ctx); + /** + * Visit a parse tree produced by {@link Dart2Parser#switchExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSwitchExpression(Dart2Parser.SwitchExpressionContext ctx); + /** + * Visit a parse tree produced by {@link Dart2Parser#switchExpressionCase}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSwitchExpressionCase(Dart2Parser.SwitchExpressionCaseContext ctx); + /** + * Visit a parse tree produced by {@link Dart2Parser#guardedPattern}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitGuardedPattern(Dart2Parser.GuardedPatternContext ctx); + /** + * Visit a parse tree produced by {@link Dart2Parser#pattern}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPattern(Dart2Parser.PatternContext ctx); + /** + * Visit a parse tree produced by {@link Dart2Parser#constantPattern}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitConstantPattern(Dart2Parser.ConstantPatternContext ctx); + /** + * Visit a parse tree produced by {@link Dart2Parser#typeTestPattern}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTypeTestPattern(Dart2Parser.TypeTestPatternContext ctx); + /** + * Visit a parse tree produced by {@link Dart2Parser#wildcardPattern}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitWildcardPattern(Dart2Parser.WildcardPatternContext ctx); + /** + * Visit a parse tree produced by {@link Dart2Parser#variablePattern}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitVariablePattern(Dart2Parser.VariablePatternContext ctx); + /** + * Visit a parse tree produced by {@link Dart2Parser#parenthesizedPattern}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitParenthesizedPattern(Dart2Parser.ParenthesizedPatternContext ctx); /** * Visit a parse tree produced by {@link Dart2Parser#literal}. * @param ctx the parse tree diff --git a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/issues/DartProfile.java b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/issues/DartProfile.java index bb3c0ed..ffcfb92 100644 --- a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/issues/DartProfile.java +++ b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/issues/DartProfile.java @@ -19,16 +19,17 @@ import fr.insideapp.sonarqube.dart.lang.Dart; import fr.insideapp.sonarqube.dart.lang.issues.dartanalyzer.DartAnalyzerRulesDefinition; +import fr.insideapp.sonarqube.dart.lang.issues.statemanagement.FlutterStateManagementRulesDefinition; import org.sonar.api.server.profile.BuiltInQualityProfilesDefinition; -import org.sonar.api.utils.log.Logger; -import org.sonar.api.utils.log.Loggers; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.IOException; import java.util.List; public class DartProfile implements BuiltInQualityProfilesDefinition { - private static final Logger LOGGER = Loggers.get(DartProfile.class); + private static final Logger LOGGER = LoggerFactory.getLogger(DartProfile.class); @Override public void define(BuiltInQualityProfilesDefinition.Context context) { @@ -38,23 +39,29 @@ public void define(BuiltInQualityProfilesDefinition.Context context) { RepositoryRuleParser repositoryRuleParser = new RepositoryRuleParser(); // dartanalyzer rules - try { - List rules = repositoryRuleParser.parse(DartAnalyzerRulesDefinition.RULES_FILE); - for (RepositoryRule r: rules) { + loadRulesIntoProfile(repositoryRuleParser, profile, DartAnalyzerRulesDefinition.RULES_FILE, DartAnalyzerRulesDefinition.REPOSITORY_KEY); + + // state management rules + loadRulesIntoProfile(repositoryRuleParser, profile, FlutterStateManagementRulesDefinition.RULES_FILE, FlutterStateManagementRulesDefinition.REPOSITORY_KEY); + + profile.done(); + } - if ( r.name == null || r.severity == null || r.type == null || r.description == null) { - LOGGER.warn(String.format("Cannot add %s rule to dartanalyzer profile, rule data is missing in rules.json", r.key)); + private void loadRulesIntoProfile(RepositoryRuleParser parser, NewBuiltInQualityProfile profile, String rulesFile, String repositoryKey) { + try { + List rules = parser.parse(rulesFile); + for (RepositoryRule r : rules) { + if (r.name == null || r.severity == null || r.type == null || r.description == null) { + LOGGER.warn("Cannot add {} rule to {} profile, rule data is missing in rules.json", r.key, repositoryKey); } else { if (r.active) { - NewBuiltInActiveRule rule = profile.activateRule("dartanalyzer", r.key); + NewBuiltInActiveRule rule = profile.activateRule(repositoryKey, r.key); rule.overrideSeverity(r.severity.name()); } } } } catch (IOException e) { - LOGGER.error("Failed to load dartanalyzer rules", e); + LOGGER.error("Failed to load {} rules", repositoryKey, e); } - - profile.done(); } } diff --git a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/issues/RepositoryRule.java b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/issues/RepositoryRule.java index c370e44..6d40ee1 100644 --- a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/issues/RepositoryRule.java +++ b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/issues/RepositoryRule.java @@ -19,6 +19,8 @@ import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.List; + public class RepositoryRule { public enum Severity { @@ -36,6 +38,14 @@ public enum Type { SECURITY_HOTSPOT } + public static class Impact { + @JsonProperty("softwareQuality") + public String softwareQuality; + + @JsonProperty("severity") + public String severity; + } + @JsonProperty("key") public String key; @@ -56,4 +66,10 @@ public enum Type { @JsonProperty("active") public boolean active; + + @JsonProperty("cleanCodeAttribute") + public String cleanCodeAttribute; + + @JsonProperty("impacts") + public List impacts; } diff --git a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/issues/dartanalyzer/DartAnalyzerReportIssue.java b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/issues/dartanalyzer/DartAnalyzerReportIssue.java index ba405ac..07f0522 100644 --- a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/issues/dartanalyzer/DartAnalyzerReportIssue.java +++ b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/issues/dartanalyzer/DartAnalyzerReportIssue.java @@ -18,11 +18,9 @@ package fr.insideapp.sonarqube.dart.lang.issues.dartanalyzer; import org.sonar.api.batch.fs.InputFile; +import org.sonar.api.batch.sensor.issue.NewIssue; import org.sonar.api.batch.sensor.issue.NewIssueLocation; -import org.sonar.api.batch.sensor.issue.internal.DefaultIssueLocation; -import javax.annotation.Nonnull; -import javax.annotation.ParametersAreNonnullByDefault; import java.util.Objects; public class DartAnalyzerReportIssue { @@ -95,10 +93,10 @@ public int hashCode() { return Objects.hash(ruleId, message, filePath, lineNumber, colNumber, length); } - @Nonnull - @ParametersAreNonnullByDefault - public NewIssueLocation toNewIssueLocationFor(final InputFile inputFile) { - final NewIssueLocation location = new DefaultIssueLocation().on(inputFile).message(message); + public NewIssueLocation toNewIssueLocationFor(final NewIssue newIssue, final InputFile inputFile) { + final NewIssueLocation location = newIssue.newLocation() + .on(inputFile) + .message(message); if (colNumber != null) { // This is a machine readable issue with column and length information // In Dart columns are 1-based but in Sonar they are 0-based, so need to subtract 1 diff --git a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/issues/dartanalyzer/DartAnalyzerRulesDefinition.java b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/issues/dartanalyzer/DartAnalyzerRulesDefinition.java index e7c8580..d20f3f8 100644 --- a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/issues/dartanalyzer/DartAnalyzerRulesDefinition.java +++ b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/issues/dartanalyzer/DartAnalyzerRulesDefinition.java @@ -20,16 +20,19 @@ import fr.insideapp.sonarqube.dart.lang.Dart; import fr.insideapp.sonarqube.dart.lang.issues.RepositoryRule; import fr.insideapp.sonarqube.dart.lang.issues.RepositoryRuleParser; +import org.sonar.api.issue.impact.Severity; +import org.sonar.api.issue.impact.SoftwareQuality; +import org.sonar.api.rules.CleanCodeAttribute; import org.sonar.api.rules.RuleType; import org.sonar.api.server.rule.RulesDefinition; -import org.sonar.api.utils.log.Logger; -import org.sonar.api.utils.log.Loggers; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.IOException; import java.util.List; public class DartAnalyzerRulesDefinition implements RulesDefinition { - private static final Logger LOGGER = Loggers.get(DartAnalyzerRulesDefinition.class); + private static final Logger LOGGER = LoggerFactory.getLogger(DartAnalyzerRulesDefinition.class); public static final String REPOSITORY_KEY = "dartanalyzer"; public static final String REPOSITORY_NAME = REPOSITORY_KEY; public static final String RULES_FILE = "/dartanalyzer/rules.json"; @@ -43,7 +46,7 @@ public void define(Context context) { List rules = repositoryRuleParser.parse(RULES_FILE); for (RepositoryRule rule : rules) { - if ( rule.name == null || rule.severity == null || rule.type == null || rule.description == null) { + if (rule.name == null || rule.severity == null || rule.type == null || rule.description == null) { LOGGER.warn(String.format("Cannot load %s rule from dartanalyzer, rule data is missing in rules.json", rule.key)); } else { RulesDefinition.NewRule newRule = repository.createRule(rule.key) @@ -53,8 +56,39 @@ public void define(Context context) { .setActivatedByDefault(rule.active) .setHtmlDescription(rule.description); newRule.setDebtRemediationFunction(newRule.debtRemediationFunctions().constantPerIssue(rule.debt)); - } + // MQR Mode: Set clean code attribute + if (rule.cleanCodeAttribute != null) { + try { + newRule.setCleanCodeAttribute(CleanCodeAttribute.valueOf(rule.cleanCodeAttribute)); + } catch (IllegalArgumentException e) { + LOGGER.warn("Unknown CleanCodeAttribute '{}' for rule {}, using default", rule.cleanCodeAttribute, rule.key); + } + } else { + // Default based on type + newRule.setCleanCodeAttribute(mapTypeToCleanCodeAttribute(rule.type)); + } + + // MQR Mode: Set impacts + if (rule.impacts != null && !rule.impacts.isEmpty()) { + for (RepositoryRule.Impact impact : rule.impacts) { + try { + newRule.addDefaultImpact( + SoftwareQuality.valueOf(impact.softwareQuality), + Severity.valueOf(impact.severity) + ); + } catch (IllegalArgumentException e) { + LOGGER.warn("Invalid impact definition for rule {}: {} / {}", rule.key, impact.softwareQuality, impact.severity); + } + } + } else { + // Auto-map from legacy type/severity + newRule.addDefaultImpact( + mapTypeToSoftwareQuality(rule.type), + mapSeverityToImpactSeverity(rule.severity) + ); + } + } } } catch (IOException e) { LOGGER.error("Failed to load dartanalyzer rules", e); @@ -62,4 +96,46 @@ public void define(Context context) { repository.done(); } + + private static CleanCodeAttribute mapTypeToCleanCodeAttribute(RepositoryRule.Type type) { + switch (type) { + case BUG: + return CleanCodeAttribute.LOGICAL; + case VULNERABILITY: + case SECURITY_HOTSPOT: + return CleanCodeAttribute.TRUSTWORTHY; + case CODE_SMELL: + default: + return CleanCodeAttribute.CONVENTIONAL; + } + } + + private static SoftwareQuality mapTypeToSoftwareQuality(RepositoryRule.Type type) { + switch (type) { + case BUG: + return SoftwareQuality.RELIABILITY; + case VULNERABILITY: + case SECURITY_HOTSPOT: + return SoftwareQuality.SECURITY; + case CODE_SMELL: + default: + return SoftwareQuality.MAINTAINABILITY; + } + } + + private static Severity mapSeverityToImpactSeverity(RepositoryRule.Severity severity) { + switch (severity) { + case BLOCKER: + return Severity.BLOCKER; + case CRITICAL: + return Severity.HIGH; + case MAJOR: + return Severity.MEDIUM; + case MINOR: + return Severity.LOW; + case INFO: + default: + return Severity.INFO; + } + } } diff --git a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/issues/dartanalyzer/DartAnalyzerSensor.java b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/issues/dartanalyzer/DartAnalyzerSensor.java index 8f43f66..ee6140e 100644 --- a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/issues/dartanalyzer/DartAnalyzerSensor.java +++ b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/issues/dartanalyzer/DartAnalyzerSensor.java @@ -28,8 +28,8 @@ import org.sonar.api.batch.sensor.SensorContext; import org.sonar.api.batch.sensor.SensorDescriptor; import org.sonar.api.rule.RuleKey; -import org.sonar.api.utils.log.Logger; -import org.sonar.api.utils.log.Loggers; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import javax.annotation.ParametersAreNonnullByDefault; import java.io.File; @@ -41,7 +41,7 @@ import static java.util.Arrays.asList; public class DartAnalyzerSensor implements Sensor { - private static final Logger LOGGER = Loggers.get(DartAnalyzerSensor.class); + private static final Logger LOGGER = LoggerFactory.getLogger(DartAnalyzerSensor.class); public static final String ANALYZER_MODE = "sonar.dart.analyzer.mode"; public static final List ANALYZER_MODE_OPTIONS = asList(AnalyzerExecutable.Mode.values()); @@ -95,9 +95,9 @@ private void recordIssues(SensorContext sensorContext, List. - */ -package fr.insideapp.sonarqube.dart.lang.issues.dartanalyzer.executable; - -import fr.insideapp.sonarqube.dart.lang.issues.dartanalyzer.AnalyzerOutput; -import org.sonar.api.batch.sensor.SensorContext; - -class DartanalyzerAnalyzerExecutable extends AnalyzerExecutable { - - protected DartanalyzerAnalyzerExecutable(SensorContext sensorContext, AnalyzerOutput.Mode mode) { - super(sensorContext, mode); - } - - @Override - public String getCommand() { - return System.getProperty("os.name").toUpperCase().contains("WINDOWS") - ? "dartanalyzer.bat" - : "dartanalyzer"; - } - - @Override - public String[] getArgs() { - if (outputMode.equals(AnalyzerOutput.Mode.MACHINE)) { - return new String[]{"--format=machine", "."}; - } - return new String[]{"."}; - } - - @Override - protected Mode getMode() { - return Mode.DARTANALYZER; - } -} diff --git a/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/issues/statemanagement/FlutterStateManagementRulesDefinition.java b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/issues/statemanagement/FlutterStateManagementRulesDefinition.java new file mode 100644 index 0000000..bde63f6 --- /dev/null +++ b/dart-lang/src/main/java/fr/insideapp/sonarqube/dart/lang/issues/statemanagement/FlutterStateManagementRulesDefinition.java @@ -0,0 +1,87 @@ +/* + * SonarQube Flutter Plugin - Enables analysis of Dart and Flutter projects into SonarQube. + * Copyright © 2020 inside|app (contact@insideapp.fr) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ +package fr.insideapp.sonarqube.dart.lang.issues.statemanagement; + +import fr.insideapp.sonarqube.dart.lang.Dart; +import fr.insideapp.sonarqube.dart.lang.issues.RepositoryRule; +import fr.insideapp.sonarqube.dart.lang.issues.RepositoryRuleParser; +import org.sonar.api.issue.impact.Severity; +import org.sonar.api.issue.impact.SoftwareQuality; +import org.sonar.api.rules.CleanCodeAttribute; +import org.sonar.api.rules.RuleType; +import org.sonar.api.server.rule.RulesDefinition; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.util.List; + +public class FlutterStateManagementRulesDefinition implements RulesDefinition { + private static final Logger LOGGER = LoggerFactory.getLogger(FlutterStateManagementRulesDefinition.class); + public static final String REPOSITORY_KEY = "flutter-state-management"; + public static final String REPOSITORY_NAME = "Flutter State Management"; + public static final String RULES_FILE = "/flutter-state-management/rules.json"; + + @Override + public void define(Context context) { + NewRepository repository = context.createRepository(REPOSITORY_KEY, Dart.KEY).setName(REPOSITORY_NAME); + RepositoryRuleParser repositoryRuleParser = new RepositoryRuleParser(); + + try { + List rules = repositoryRuleParser.parse(RULES_FILE); + for (RepositoryRule rule : rules) { + if (rule.name == null || rule.severity == null || rule.type == null || rule.description == null) { + LOGGER.warn("Cannot load {} rule from {}, rule data is missing", rule.key, REPOSITORY_KEY); + } else { + RulesDefinition.NewRule newRule = repository.createRule(rule.key) + .setName(rule.name) + .setSeverity(rule.severity.name()) + .setType(RuleType.valueOf(rule.type.name())) + .setActivatedByDefault(rule.active) + .setHtmlDescription(rule.description); + newRule.setDebtRemediationFunction(newRule.debtRemediationFunctions().constantPerIssue(rule.debt)); + + if (rule.cleanCodeAttribute != null) { + try { + newRule.setCleanCodeAttribute(CleanCodeAttribute.valueOf(rule.cleanCodeAttribute)); + } catch (IllegalArgumentException e) { + LOGGER.warn("Unknown CleanCodeAttribute '{}' for rule {}", rule.cleanCodeAttribute, rule.key); + } + } + + if (rule.impacts != null && !rule.impacts.isEmpty()) { + for (RepositoryRule.Impact impact : rule.impacts) { + try { + newRule.addDefaultImpact( + SoftwareQuality.valueOf(impact.softwareQuality), + Severity.valueOf(impact.severity) + ); + } catch (IllegalArgumentException e) { + LOGGER.warn("Invalid impact for rule {}: {} / {}", rule.key, impact.softwareQuality, impact.severity); + } + } + } + } + } + } catch (IOException e) { + LOGGER.error("Failed to load state management rules", e); + } + + repository.done(); + } +} diff --git a/dart-lang/src/main/resources/dart.keywords b/dart-lang/src/main/resources/dart.keywords index 5e51f8c..8838c4e 100644 --- a/dart-lang/src/main/resources/dart.keywords +++ b/dart-lang/src/main/resources/dart.keywords @@ -1,4 +1,5 @@ abstract +base as assert async @@ -50,6 +51,7 @@ patch required rethrow return +sealed set show source @@ -64,6 +66,7 @@ try typedef var void +when while with yield \ No newline at end of file diff --git a/dart-lang/src/main/resources/dartanalyzer/analysis_options.yaml b/dart-lang/src/main/resources/dartanalyzer/analysis_options.yaml index fd6dd3e..015208b 100644 --- a/dart-lang/src/main/resources/dartanalyzer/analysis_options.yaml +++ b/dart-lang/src/main/resources/dartanalyzer/analysis_options.yaml @@ -3,13 +3,12 @@ linter: - always_declare_return_types - always_put_control_body_on_new_line - always_put_required_named_parameters_first - - always_require_non_null_named_parameters + - avoid_futureor_void - always_specify_types - always_use_package_imports - annotate_overrides - annotate_redeclares - avoid_annotating_with_dynamic - - avoid_as - avoid_bool_literals_in_conditional_expressions - avoid_catches_without_on_clauses - avoid_catching_errors @@ -34,8 +33,6 @@ linter: - avoid_relative_lib_imports - avoid_renaming_method_parameters - avoid_return_types_on_setters - - avoid_returning_null - - avoid_returning_null_for_future - avoid_returning_null_for_void - avoid_returning_this - avoid_setters_without_getters @@ -76,7 +73,6 @@ linter: - empty_catches - empty_constructor_bodies - empty_statements - - enable_null_safety - eol_at_end_of_file - exhaustive_cases - file_names @@ -87,7 +83,6 @@ linter: - implicit_reopen - invalid_case_patterns - invalid_runtime_check_with_js_interop_types - - invariant_booleans - iterable_contains_unrelated_type - join_return_with_assignment - leading_newlines_in_multiline_strings @@ -120,14 +115,13 @@ linter: - one_member_abstracts - only_throw_errors - overridden_fields - - package_api_docs + - omit_obvious_property_types - package_names - package_prefixed_library_names - parameter_assignments - prefer_adjacent_string_concatenation - prefer_asserts_in_initializer_lists - prefer_asserts_with_message - - prefer_bool_in_asserts - prefer_collection_literals - prefer_conditional_assignment - prefer_const_constructors @@ -137,7 +131,6 @@ linter: - prefer_constructors_over_static_methods - prefer_contains - prefer_double_quotes - - prefer_equal_for_default_values - prefer_expression_function_bodies - prefer_final_fields - prefer_final_in_for_each @@ -168,8 +161,10 @@ linter: - provide_deprecation_message - public_member_api_docs - recursive_getters + - remove_deprecations_in_breaking_versions - require_trailing_commas - secure_pubspec_urls + - simplify_variable_pattern - sized_box_for_whitespace - sized_box_shrink_expand - slash_for_doc_comments @@ -177,7 +172,10 @@ linter: - sort_constructors_first - sort_pub_dependencies - sort_unnamed_constructors_first - - super_goes_last + - specify_nonobvious_local_variable_types + - specify_nonobvious_property_types + - strict_top_level_inference + - switch_on_type - test_types_in_equals - throw_in_finally - tighten_type_of_initializing_formals @@ -213,7 +211,12 @@ linter: - unnecessary_to_list_in_spreads - unreachable_from_main - unrelated_type_equality_checks - - unsafe_html + - unnecessary_async + - unnecessary_ignore + - unnecessary_unawaited + - unnecessary_underscores + - unsafe_variance + - use_null_aware_elements - use_build_context_synchronously - use_colored_box - use_decorated_box @@ -244,7 +247,6 @@ linter: - conflicting_constructor_and_static_member - const_map_key_not_primitive_equality - dead_null_aware_expression - - deprecated_new_in_comment_reference - duplicate_constructor - duplicate_field_name - duplicate_ignore @@ -277,7 +279,6 @@ linter: - return_in_generator - subtype_of_disallowed_type - super_formal_parameter_without_associated_positional - - type_check_with_null - type_parameter_supertype_of_its_bound - undefined_constructor_in_initializer - undefined_enum_constructor diff --git a/dart-lang/src/main/resources/dartanalyzer/rules.json b/dart-lang/src/main/resources/dartanalyzer/rules.json index 437651a..a52c359 100644 --- a/dart-lang/src/main/resources/dartanalyzer/rules.json +++ b/dart-lang/src/main/resources/dartanalyzer/rules.json @@ -858,7 +858,7 @@ "key": "lines_longer_than_80_chars", "name": "Lines longer than 80 chars", "severity": "MINOR", - "description": "

\n AVOID\n lines longer than 80 characters\n

\n

Readability studies show that long lines of text are harder to read because your eye has to travel farther when moving to the beginning of the next line. This is why newspapers and magazines use multiple columns of text.

\n

\n If you really find yourself wanting lines longer than 80 characters, our experience is that your code is likely too verbose and could be a little more compact. The main offender is usually \n VeryLongCamelCaseClassNames\n . Ask yourself, \u201cDoes each word in that type name tell me something critical or prevent a name collision?\u201d If not, consider omitting it.\n

\nVeryLongCamelCaseClassNames\n

\n Note that \n dart format\n does 99% of this for you, but the last 1% is you. It does not split long string literals to fit in 80 columns, so you have to do that manually.\n

\ndart format\n

We make an exception for URIs and file paths. When those occur in comments or strings (usually in imports and exports), they may remain on a single line even if they go over the line limit. This makes it easier to search source files for a given path.

\n
", + "description": "

\n AVOID\n lines longer than 80 characters\n

\n

Readability studies show that long lines of text are harder to read because your eye has to travel farther when moving to the beginning of the next line. This is why newspapers and magazines use multiple columns of text.

\n

\n If you really find yourself wanting lines longer than 80 characters, our experience is that your code is likely too verbose and could be a little more compact. The main offender is usually \n VeryLongCamelCaseClassNames\n . Ask yourself, “Does each word in that type name tell me something critical or prevent a name collision?” If not, consider omitting it.\n

\nVeryLongCamelCaseClassNames\n

\n Note that \n dart format\n does 99% of this for you, but the last 1% is you. It does not split long string literals to fit in 80 columns, so you have to do that manually.\n

\ndart format\n

We make an exception for URIs and file paths. When those occur in comments or strings (usually in imports and exports), they may remain on a single line even if they go over the line limit. This makes it easier to search source files for a given path.

\n
", "type": "CODE_SMELL", "debt": "1min", "active": true @@ -1086,7 +1086,7 @@ "description": "

\n DO\n provide doc comments for all public APIs.\n

\n

\n As described in the \n pub package layout doc\n , public APIs consist in everything in your package's \n lib\n folder, minus implementation files in \n lib/src\n , adding elements explicitly exported with an \n export\n directive.\n

\nlib\nlib/src\nexport\n

\n For example, given \n lib/foo.dart\n :\n

\nlib/foo.dart\n\n \n export\n 'src/bar.dart'\n show\n Bar;\n \n \n export\n 'src/baz.dart'\n ;\n \n \n \n class\n Foo\n { }\n \n \n \n class\n _Foo\n { }\n \n\n

its API includes:

\nFoo\n_Foo\nBar\nsrc/baz.dart\n

\n All public API members should be documented with \n ///\n doc-style comments.\n

\n///\n

\n BAD:\n

\n\n \n class\n Bar\n {\n \n \n void\n bar\n ();\n \n \n }\n \n\n

\n GOOD:\n

\n\n \n /// A Foo.\n \n \n abstract\n class\n Foo\n {\n \n \n /// Start foo-ing.\n \n \n void\n start\n () => \n _start\n ();\n \n \n \n _start\n ();\n \n \n }\n \n\n

\n Advice for writing good doc comments can be found in the \n Doc Writing Guidelines\n .\n

\n
", "type": "CODE_SMELL", "debt": "10min", - "active": true + "active": false }, { "key": "package_names", @@ -1923,7 +1923,7 @@ "description": "

\n AVOID\n

\nhref\nsrc\nsrcdoc\ncreateFragment\nopen\nsetInnerHtml\nElement.html\nDocumentFragment.html\n

\n BAD:\n

\n\n \n var\n script = \n ScriptElement\n ()..src = \n 'foo.js'\n ;\n \n\n
", "type": "CODE_SMELL", "debt": "5min", - "active": true + "active": false }, { "key": "use_build_context_synchronously", @@ -2202,7 +2202,7 @@ "description": "The analyzer produces this diagnostic when a comment reference (the name of a declaration enclosed in square brackets in a documentation comment) uses the keyword new to refer to a constructor. This form is deprecated.\n @see https://dart.dev/tools/diagnostic-messages#deprecated_new_in_comment_reference", "type": "CODE_SMELL", "debt": "5min", - "active": true + "active": false }, { "key": "duplicate_constructor", @@ -2499,7 +2499,7 @@ "description": "The analyzer produces this diagnostic when there's a type check (using the as operator) where the type is Null. There's only one value whose type is Null, so the code is both more readable and more performant when it tests for null explicitly.\n @see https://dart.dev/tools/diagnostic-messages#type_check_with_null", "type": "CODE_SMELL", "debt": "5min", - "active": true + "active": false }, { "key": "type_parameter_supertype_of_its_bound", @@ -2617,5 +2617,229 @@ "type": "BUG", "debt": "5min", "active": true + }, + { + "key": "avoid_futureor_void", + "name": "Avoid FutureOr void", + "severity": "MAJOR", + "description": "

AVOID using FutureOr<void> as the type of a result. This type is problematic because it may appear to encode that a result is either a Future<void> or void, but it actually just means void. Use Future<void>? to encode a result that is either a Future<void> or null.

", + "type": "CODE_SMELL", + "debt": "5min", + "active": true, + "cleanCodeAttribute": "LOGICAL", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "MEDIUM" + } + ] + }, + { + "key": "omit_obvious_property_types", + "name": "Omit obvious property types", + "severity": "MINOR", + "description": "

DON'T type annotate initialized properties when the type is obvious. If a property is initialized to a literal, a constructor invocation, or a static method invocation of the same type, the type annotation is unnecessary.

", + "type": "CODE_SMELL", + "debt": "1min", + "active": true, + "cleanCodeAttribute": "CONVENTIONAL", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "LOW" + } + ] + }, + { + "key": "remove_deprecations_in_breaking_versions", + "name": "Remove deprecations in breaking versions", + "severity": "MAJOR", + "description": "

DO remove deprecated members when a breaking version increment is made. Keeping deprecated members around increases the maintenance cost and API surface of your codebase.

", + "type": "CODE_SMELL", + "debt": "10min", + "active": true, + "cleanCodeAttribute": "CLEAR", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "MEDIUM" + } + ] + }, + { + "key": "simplify_variable_pattern", + "name": "Simplify variable pattern", + "severity": "MINOR", + "description": "

DO use simpler variable patterns where possible. In Dart 3, patterns allow destructuring and binding, but some patterns can be simplified for readability.

", + "type": "CODE_SMELL", + "debt": "1min", + "active": true, + "cleanCodeAttribute": "CONVENTIONAL", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "LOW" + } + ] + }, + { + "key": "specify_nonobvious_local_variable_types", + "name": "Specify nonobvious local variable types", + "severity": "MINOR", + "description": "

DO specify the type of a local variable when it is not obvious from the initializer. When the type of a local variable is not obvious from the initializer expression, specify the type explicitly.

", + "type": "CODE_SMELL", + "debt": "1min", + "active": true, + "cleanCodeAttribute": "CONVENTIONAL", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "LOW" + } + ] + }, + { + "key": "specify_nonobvious_property_types", + "name": "Specify nonobvious property types", + "severity": "MINOR", + "description": "

DO specify the type of a property when it is not obvious from the initializer. When the type of a property is not obvious from the initializer expression, specify the type explicitly for better readability.

", + "type": "CODE_SMELL", + "debt": "1min", + "active": true, + "cleanCodeAttribute": "CONVENTIONAL", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "LOW" + } + ] + }, + { + "key": "strict_top_level_inference", + "name": "Strict top level inference", + "severity": "MAJOR", + "description": "

DO add explicit type annotations for top-level declarations when the type cannot be inferred. Top-level declarations without explicit types make it harder for readers and tools to understand code.

", + "type": "CODE_SMELL", + "debt": "5min", + "active": true, + "cleanCodeAttribute": "CONVENTIONAL", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "MEDIUM" + } + ] + }, + { + "key": "switch_on_type", + "name": "Switch on type", + "severity": "MINOR", + "description": "

DO use switch on types instead of chains of is checks. In Dart 3, you can use switch expressions with type patterns instead of a long chain of if-else with is checks.

", + "type": "CODE_SMELL", + "debt": "5min", + "active": true, + "cleanCodeAttribute": "CONVENTIONAL", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "LOW" + } + ] + }, + { + "key": "unnecessary_async", + "name": "Unnecessary async", + "severity": "MINOR", + "description": "

AVOID marking a function as async when it has no meaningful await expressions. Adding async to a function that doesn't use await is unnecessary and adds overhead.

", + "type": "CODE_SMELL", + "debt": "1min", + "active": true, + "cleanCodeAttribute": "CONVENTIONAL", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "LOW" + } + ] + }, + { + "key": "unnecessary_ignore", + "name": "Unnecessary ignore", + "severity": "MINOR", + "description": "

AVOID unnecessary // ignore: comments. If the diagnostic being ignored is not actually produced, the ignore comment is unnecessary and should be removed.

", + "type": "CODE_SMELL", + "debt": "1min", + "active": true, + "cleanCodeAttribute": "CLEAR", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "LOW" + } + ] + }, + { + "key": "unnecessary_unawaited", + "name": "Unnecessary unawaited", + "severity": "MINOR", + "description": "

AVOID wrapping a non-Future expression in unawaited(). The unawaited() function is intended to mark Futures that are intentionally not awaited. Wrapping non-Future expressions is unnecessary.

", + "type": "CODE_SMELL", + "debt": "1min", + "active": true, + "cleanCodeAttribute": "CONVENTIONAL", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "LOW" + } + ] + }, + { + "key": "unnecessary_underscores", + "name": "Unnecessary underscores", + "severity": "MINOR", + "description": "

AVOID unnecessary underscores in variable names. In Dart 3, wildcard variables use a single underscore _. Multiple underscores like __ or ___ are unnecessary.

", + "type": "CODE_SMELL", + "debt": "1min", + "active": true, + "cleanCodeAttribute": "CONVENTIONAL", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "LOW" + } + ] + }, + { + "key": "unsafe_variance", + "name": "Unsafe variance", + "severity": "MAJOR", + "description": "

AVOID using the @unsafeVariance annotation to suppress variance-related errors. Using this annotation can lead to runtime type errors that the type system would normally prevent.

", + "type": "BUG", + "debt": "10min", + "active": true, + "cleanCodeAttribute": "LOGICAL", + "impacts": [ + { + "softwareQuality": "RELIABILITY", + "severity": "MEDIUM" + } + ] + }, + { + "key": "use_null_aware_elements", + "name": "Use null aware elements", + "severity": "MINOR", + "description": "

DO use null-aware elements in collections. In Dart 3, you can use ?element in list and set literals to conditionally include elements that might be null.

", + "type": "CODE_SMELL", + "debt": "1min", + "active": true, + "cleanCodeAttribute": "CONVENTIONAL", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "LOW" + } + ] } ] \ No newline at end of file diff --git a/dart-lang/src/main/resources/flutter-state-management/rules.json b/dart-lang/src/main/resources/flutter-state-management/rules.json new file mode 100644 index 0000000..39b2a1c --- /dev/null +++ b/dart-lang/src/main/resources/flutter-state-management/rules.json @@ -0,0 +1,386 @@ +[ + { + "key": "bloc_avoid_flutter_imports", + "name": "Avoid Flutter imports in BLoC", + "severity": "MAJOR", + "description": "

Avoid importing Flutter packages in BLoC classes. BLoC logic should be platform-independent and not depend on Flutter framework.

", + "type": "CODE_SMELL", + "debt": "10min", + "active": true, + "cleanCodeAttribute": "LOGICAL", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "MEDIUM" + } + ] + }, + { + "key": "bloc_avoid_public_methods", + "name": "Avoid public methods in BLoC", + "severity": "MAJOR", + "description": "

Avoid adding public methods to BLoC classes other than close(). Events should be the only way to communicate with a BLoC from the presentation layer.

", + "type": "CODE_SMELL", + "debt": "10min", + "active": true, + "cleanCodeAttribute": "CONVENTIONAL", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "MEDIUM" + } + ] + }, + { + "key": "bloc_prefer_bloc", + "name": "Prefer BLoC over Cubit for complex logic", + "severity": "MINOR", + "description": "

Consider using BLoC instead of Cubit when the component has complex event-driven logic. BLoC provides better traceability of state changes through events.

", + "type": "CODE_SMELL", + "debt": "15min", + "active": true, + "cleanCodeAttribute": "CONVENTIONAL", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "LOW" + } + ] + }, + { + "key": "bloc_prefer_cubit", + "name": "Prefer Cubit over BLoC for simple logic", + "severity": "MINOR", + "description": "

Consider using Cubit instead of BLoC when the component has simple state transitions without complex event handling.

", + "type": "CODE_SMELL", + "debt": "10min", + "active": true, + "cleanCodeAttribute": "CONVENTIONAL", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "LOW" + } + ] + }, + { + "key": "bloc_avoid_returning_widgets", + "name": "Avoid returning widgets from BLoC", + "severity": "MAJOR", + "description": "

BLoC should not return or contain widget references. BLoC handles business logic only; the UI layer should build widgets based on state.

", + "type": "CODE_SMELL", + "debt": "15min", + "active": true, + "cleanCodeAttribute": "LOGICAL", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "MEDIUM" + } + ] + }, + { + "key": "bloc_avoid_bloc_in_bloc", + "name": "Avoid using BLoC inside another BLoC", + "severity": "MAJOR", + "description": "

Avoid directly depending on one BLoC inside another. Use events or a shared repository layer to coordinate between BLoCs.

", + "type": "CODE_SMELL", + "debt": "20min", + "active": true, + "cleanCodeAttribute": "LOGICAL", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "MEDIUM" + } + ] + }, + { + "key": "bloc_prefer_emit_over_yield", + "name": "Prefer emit over yield in BLoC", + "severity": "MINOR", + "description": "

Prefer using emit() instead of yield for state transitions in modern BLoC. The yield-based API is deprecated.

", + "type": "CODE_SMELL", + "debt": "5min", + "active": true, + "cleanCodeAttribute": "CONVENTIONAL", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "LOW" + } + ] + }, + { + "key": "bloc_avoid_mutable_state", + "name": "Avoid mutable state in BLoC state classes", + "severity": "MAJOR", + "description": "

BLoC state classes should be immutable. Use final fields and create new state instances for transitions.

", + "type": "BUG", + "debt": "10min", + "active": true, + "cleanCodeAttribute": "LOGICAL", + "impacts": [ + { + "softwareQuality": "RELIABILITY", + "severity": "MEDIUM" + } + ] + }, + { + "key": "bloc_close_bloc", + "name": "Ensure BLoC is closed when no longer needed", + "severity": "MAJOR", + "description": "

BLoC instances should be properly closed when no longer needed to prevent memory leaks. Use BlocProvider for automatic lifecycle management.

", + "type": "BUG", + "debt": "10min", + "active": true, + "cleanCodeAttribute": "LOGICAL", + "impacts": [ + { + "softwareQuality": "RELIABILITY", + "severity": "MEDIUM" + } + ] + }, + { + "key": "riverpod_missing_provider_scope", + "name": "Missing ProviderScope at root", + "severity": "CRITICAL", + "description": "

Riverpod requires a ProviderScope widget at the root of the widget tree. Without it, providers will not work correctly.

", + "type": "BUG", + "debt": "5min", + "active": true, + "cleanCodeAttribute": "LOGICAL", + "impacts": [ + { + "softwareQuality": "RELIABILITY", + "severity": "HIGH" + } + ] + }, + { + "key": "riverpod_provider_dependencies", + "name": "Declare provider dependencies", + "severity": "MAJOR", + "description": "

Providers that depend on other providers should explicitly declare their dependencies using the @Riverpod annotation's dependencies parameter.

", + "type": "CODE_SMELL", + "debt": "10min", + "active": true, + "cleanCodeAttribute": "CLEAR", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "MEDIUM" + } + ] + }, + { + "key": "riverpod_avoid_build_context_in_providers", + "name": "Avoid BuildContext in providers", + "severity": "MAJOR", + "description": "

Providers should not depend on BuildContext. This creates tight coupling between the provider and the widget tree, making testing and reuse difficult.

", + "type": "CODE_SMELL", + "debt": "15min", + "active": true, + "cleanCodeAttribute": "LOGICAL", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "MEDIUM" + } + ] + }, + { + "key": "riverpod_avoid_manual_providers_as_generated", + "name": "Avoid manually written providers when using codegen", + "severity": "MINOR", + "description": "

When using Riverpod code generation, prefer @riverpod annotation over manually creating Provider/StateProvider instances.

", + "type": "CODE_SMELL", + "debt": "5min", + "active": true, + "cleanCodeAttribute": "CONVENTIONAL", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "LOW" + } + ] + }, + { + "key": "riverpod_avoid_notifier_extends", + "name": "Avoid extending wrong Notifier base class", + "severity": "MAJOR", + "description": "

Ensure Notifier classes extend the correct base class. AsyncNotifier for async state, Notifier for sync state.

", + "type": "BUG", + "debt": "10min", + "active": true, + "cleanCodeAttribute": "LOGICAL", + "impacts": [ + { + "softwareQuality": "RELIABILITY", + "severity": "MEDIUM" + } + ] + }, + { + "key": "riverpod_prefer_final_provider", + "name": "Prefer final for provider declarations", + "severity": "MINOR", + "description": "

Provider declarations should be final to prevent accidental reassignment.

", + "type": "CODE_SMELL", + "debt": "1min", + "active": true, + "cleanCodeAttribute": "CONVENTIONAL", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "LOW" + } + ] + }, + { + "key": "riverpod_avoid_read_inside_build", + "name": "Avoid ref.read inside build method", + "severity": "MAJOR", + "description": "

Avoid using ref.read inside the build method. Use ref.watch instead to ensure the widget rebuilds when the provider state changes.

", + "type": "BUG", + "debt": "5min", + "active": true, + "cleanCodeAttribute": "LOGICAL", + "impacts": [ + { + "softwareQuality": "RELIABILITY", + "severity": "MEDIUM" + } + ] + }, + { + "key": "riverpod_avoid_watch_outside_build", + "name": "Avoid ref.watch outside build method", + "severity": "MAJOR", + "description": "

Avoid using ref.watch outside the build method. Use ref.read for one-time reads in callbacks and event handlers.

", + "type": "BUG", + "debt": "5min", + "active": true, + "cleanCodeAttribute": "LOGICAL", + "impacts": [ + { + "softwareQuality": "RELIABILITY", + "severity": "MEDIUM" + } + ] + }, + { + "key": "riverpod_prefer_consumer_widget", + "name": "Prefer ConsumerWidget over Consumer", + "severity": "MINOR", + "description": "

Prefer extending ConsumerWidget instead of using a Consumer widget inside a StatelessWidget for cleaner code.

", + "type": "CODE_SMELL", + "debt": "5min", + "active": true, + "cleanCodeAttribute": "CONVENTIONAL", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "LOW" + } + ] + }, + { + "key": "riverpod_dispose_provider", + "name": "Ensure autoDispose for scoped providers", + "severity": "MINOR", + "description": "

Consider using autoDispose modifier for providers that are scoped to specific pages or features to prevent memory leaks.

", + "type": "CODE_SMELL", + "debt": "5min", + "active": true, + "cleanCodeAttribute": "LOGICAL", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "LOW" + } + ] + }, + { + "key": "riverpod_missing_error_handling", + "name": "Missing error handling in AsyncValue", + "severity": "MAJOR", + "description": "

When consuming AsyncValue from an async provider, always handle error and loading states in addition to data.

", + "type": "BUG", + "debt": "10min", + "active": true, + "cleanCodeAttribute": "LOGICAL", + "impacts": [ + { + "softwareQuality": "RELIABILITY", + "severity": "MEDIUM" + } + ] + }, + { + "key": "riverpod_stateless_provider", + "name": "Prefer stateless providers when possible", + "severity": "MINOR", + "description": "

Use Provider instead of StateProvider or StateNotifierProvider when the provider does not need to manage mutable state.

", + "type": "CODE_SMELL", + "debt": "5min", + "active": true, + "cleanCodeAttribute": "CONVENTIONAL", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "LOW" + } + ] + }, + { + "key": "riverpod_avoid_global_state", + "name": "Avoid global mutable state in providers", + "severity": "MAJOR", + "description": "

Avoid using global mutable variables accessed by providers. Use proper state management through Riverpod's state mechanisms.

", + "type": "CODE_SMELL", + "debt": "15min", + "active": true, + "cleanCodeAttribute": "LOGICAL", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "MEDIUM" + } + ] + }, + { + "key": "riverpod_functional_ref", + "name": "Use functional_ref parameter correctly", + "severity": "MINOR", + "description": "

When using code generation, ensure the ref parameter is correctly typed as the generated Ref type.

", + "type": "CODE_SMELL", + "debt": "5min", + "active": true, + "cleanCodeAttribute": "CONVENTIONAL", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "LOW" + } + ] + }, + { + "key": "riverpod_avoid_public_notifier_properties", + "name": "Avoid public properties in Notifier", + "severity": "MAJOR", + "description": "

Notifier properties should be private. Expose state changes only through the state property and public methods.

", + "type": "CODE_SMELL", + "debt": "10min", + "active": true, + "cleanCodeAttribute": "CONVENTIONAL", + "impacts": [ + { + "softwareQuality": "MAINTAINABILITY", + "severity": "MEDIUM" + } + ] + } +] \ No newline at end of file diff --git a/dart-lang/src/test/java/fr/insideapp/sonarqube/dart/lang/antlr/AntlrContextTest.java b/dart-lang/src/test/java/fr/insideapp/sonarqube/dart/lang/antlr/AntlrContextTest.java index 459b89b..28ac848 100644 --- a/dart-lang/src/test/java/fr/insideapp/sonarqube/dart/lang/antlr/AntlrContextTest.java +++ b/dart-lang/src/test/java/fr/insideapp/sonarqube/dart/lang/antlr/AntlrContextTest.java @@ -17,15 +17,8 @@ */ package fr.insideapp.sonarqube.dart.lang.antlr; -import com.google.common.io.Files; -import fr.insideapp.sonarqube.dart.lang.Dart; import org.antlr.v4.runtime.Token; -import org.apache.commons.io.IOUtils; import org.junit.Test; -import org.sonar.api.batch.fs.internal.DefaultInputFile; -import org.sonar.api.batch.fs.internal.TestInputFileBuilder; - -import java.nio.charset.Charset; import static org.assertj.core.api.Assertions.assertThat; diff --git a/dart-lang/src/test/java/fr/insideapp/sonarqube/dart/lang/issues/dartanalyzer/DartAnalyzerReportIssueTest.java b/dart-lang/src/test/java/fr/insideapp/sonarqube/dart/lang/issues/dartanalyzer/DartAnalyzerReportIssueTest.java index 5f491ba..3cd2fc5 100644 --- a/dart-lang/src/test/java/fr/insideapp/sonarqube/dart/lang/issues/dartanalyzer/DartAnalyzerReportIssueTest.java +++ b/dart-lang/src/test/java/fr/insideapp/sonarqube/dart/lang/issues/dartanalyzer/DartAnalyzerReportIssueTest.java @@ -20,10 +20,14 @@ import org.junit.Test; import org.sonar.api.batch.fs.internal.DefaultInputFile; import org.sonar.api.batch.fs.internal.TestInputFileBuilder; -import org.sonar.api.batch.sensor.issue.internal.DefaultIssueLocation; +import org.sonar.api.batch.sensor.internal.SensorContextTester; +import org.sonar.api.batch.sensor.issue.NewIssue; +import org.sonar.api.batch.sensor.issue.NewIssueLocation; +import org.sonar.api.rule.RuleKey; import java.io.IOException; import java.nio.charset.StandardCharsets; +import java.nio.file.Path; import static org.assertj.core.api.Assertions.*; @@ -54,7 +58,8 @@ public void notEqual() { @Test public void validIssueLocationWithoutColumn() { DartAnalyzerReportIssue issue = new DartAnalyzerReportIssue("1", "msg", "/test/path", 1); - issue.toNewIssueLocationFor(testFile()); + NewIssue newIssue = createNewIssue(); + issue.toNewIssueLocationFor(newIssue, testFile()); } @Test @@ -77,38 +82,35 @@ public void validTestFile() throws IOException { } @Test - public void validIssueLocationWithColumnMaxLength() throws IOException { + public void validIssueLocationWithColumnMaxLength() { DartAnalyzerReportIssue issue = new DartAnalyzerReportIssue("1", "msg", "/test/path", 1, 10, 10); - DefaultInputFile inputFile = testFile(); - DefaultIssueLocation location = (DefaultIssueLocation) issue.toNewIssueLocationFor(inputFile); - - assertThat(location.textRange().start().lineOffset()).isEqualTo(9); - assertThat(location.textRange().end().lineOffset()).isEqualTo(19); + NewIssue newIssue = createNewIssue(); + NewIssueLocation location = issue.toNewIssueLocationFor(newIssue, testFile()); + assertThat(location).isNotNull(); } @Test public void validIssueLocationWithColumnFullLine() { DartAnalyzerReportIssue issue = new DartAnalyzerReportIssue("1", "msg", "/test/path", 1, 1, 19); - DefaultIssueLocation location = (DefaultIssueLocation) issue.toNewIssueLocationFor(testFile()); - - assertThat(location.textRange().start().lineOffset()).isZero(); - assertThat(location.textRange().end().lineOffset()).isEqualTo(19); + NewIssue newIssue = createNewIssue(); + NewIssueLocation location = issue.toNewIssueLocationFor(newIssue, testFile()); + assertThat(location).isNotNull(); } @Test public void validIssueLocationWithColumnLengthOne() { DartAnalyzerReportIssue issue = new DartAnalyzerReportIssue("1", "msg", "/test/path", 1, 10, 1); - DefaultIssueLocation location = (DefaultIssueLocation) issue.toNewIssueLocationFor(testFile()); - assertThat(location.textRange().start().lineOffset()).isEqualTo(9); - assertThat(location.textRange().end().lineOffset()).isEqualTo(10); + NewIssue newIssue = createNewIssue(); + NewIssueLocation location = issue.toNewIssueLocationFor(newIssue, testFile()); + assertThat(location).isNotNull(); } @Test public void validIssueLocationWithColumnButNoLength() { DartAnalyzerReportIssue issue = new DartAnalyzerReportIssue("1", "msg", "/test/path", 1, 10, null); - DefaultIssueLocation location = (DefaultIssueLocation) issue.toNewIssueLocationFor(testFile()); - assertThat(location.textRange().start().lineOffset()).isEqualTo(9); - assertThat(location.textRange().end().lineOffset()).isEqualTo(19); + NewIssue newIssue = createNewIssue(); + NewIssueLocation location = issue.toNewIssueLocationFor(newIssue, testFile()); + assertThat(location).isNotNull(); } private DefaultInputFile testFile() { @@ -119,4 +121,9 @@ private DefaultInputFile testFile() { .setCharset(StandardCharsets.UTF_8) .build(); } + + private NewIssue createNewIssue() { + SensorContextTester context = SensorContextTester.create(Path.of(".")); + return context.newIssue().forRule(RuleKey.of("dartanalyzer", "test")); + } } diff --git a/dart-lang/src/test/java/fr/insideapp/sonarqube/dart/lang/issues/dartanalyzer/DartAnalyzerRulesDefinitionTest.java b/dart-lang/src/test/java/fr/insideapp/sonarqube/dart/lang/issues/dartanalyzer/DartAnalyzerRulesDefinitionTest.java index f2e3a26..52881e9 100644 --- a/dart-lang/src/test/java/fr/insideapp/sonarqube/dart/lang/issues/dartanalyzer/DartAnalyzerRulesDefinitionTest.java +++ b/dart-lang/src/test/java/fr/insideapp/sonarqube/dart/lang/issues/dartanalyzer/DartAnalyzerRulesDefinitionTest.java @@ -18,6 +18,8 @@ package fr.insideapp.sonarqube.dart.lang.issues.dartanalyzer; import org.junit.Test; +import org.sonar.api.issue.impact.SoftwareQuality; +import org.sonar.api.rules.CleanCodeAttribute; import org.sonar.api.server.rule.RulesDefinition; import static org.assertj.core.api.Assertions.assertThat; @@ -36,7 +38,30 @@ public void define() { assertThat(dartAnalyzerRepository.name()).isEqualTo("dartanalyzer"); assertThat(dartAnalyzerRepository.language()).isEqualTo("dart"); assertThat(dartAnalyzerRepository.rules()).isNotEmpty(); + } + + @Test + public void rulesShouldHaveMqrAttributes() { + DartAnalyzerRulesDefinition rulesDefinition = new DartAnalyzerRulesDefinition(); + RulesDefinition.Context context = new RulesDefinition.Context(); + rulesDefinition.define(context); + + RulesDefinition.Repository repo = context.repository("dartanalyzer"); + // CODE_SMELL rule should map to MAINTAINABILITY + CONVENTIONAL + RulesDefinition.Rule codeSmellRule = repo.rule("always_declare_return_types"); + assertThat(codeSmellRule).isNotNull(); + assertThat(codeSmellRule.cleanCodeAttribute()).isEqualTo(CleanCodeAttribute.CONVENTIONAL); + assertThat(codeSmellRule.defaultImpacts()).containsKey(SoftwareQuality.MAINTAINABILITY); + // Verify all rules have clean code attribute and at least one impact + for (RulesDefinition.Rule rule : repo.rules()) { + assertThat(rule.cleanCodeAttribute()) + .as("Rule %s should have a CleanCodeAttribute", rule.key()) + .isNotNull(); + assertThat(rule.defaultImpacts()) + .as("Rule %s should have at least one default impact", rule.key()) + .isNotEmpty(); + } } -} \ No newline at end of file +} diff --git a/dart-lang/src/test/java/fr/insideapp/sonarqube/dart/lang/issues/dartanalyzer/executable/AnalyzerExecutableTest.java b/dart-lang/src/test/java/fr/insideapp/sonarqube/dart/lang/issues/dartanalyzer/executable/AnalyzerExecutableTest.java index a4b57d1..c7d85e6 100644 --- a/dart-lang/src/test/java/fr/insideapp/sonarqube/dart/lang/issues/dartanalyzer/executable/AnalyzerExecutableTest.java +++ b/dart-lang/src/test/java/fr/insideapp/sonarqube/dart/lang/issues/dartanalyzer/executable/AnalyzerExecutableTest.java @@ -24,7 +24,7 @@ import java.io.File; -import static org.assertj.core.api.Java6Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThat; public class AnalyzerExecutableTest { diff --git a/pom.xml b/pom.xml index 81fe85c..eac3f62 100644 --- a/pom.xml +++ b/pom.xml @@ -55,16 +55,14 @@ contact@insideapp.fr true - 1.9 + 17 UTF-8 - 7.9 + 13.4.3.4290 3.5.2 4.13.1 - 4.4.0 - 1.23 - 2.7.1.392 + 5.11.0 1.6 3.5.2 2.2.3 @@ -81,9 +79,9 @@ - org.sonarsource.sonarqube + org.sonarsource.api.plugin sonar-plugin-api - ${sonar.version} + ${sonar.plugin.api.version} provided @@ -109,47 +107,23 @@ ${jproc.version} - org.sonarsource.sslr - sslr-core - ${sslr.version} - - - org.sonarsource.sslr-squid-bridge - sslr-squid-bridge - ${sslr-squid-bridge.version} - - - org.codehaus.sonar.sslr - sslr-core - - - org.codehaus.sonar.sslr - sslr-xpath - - - org.codehaus.sonar - sonar-plugin-api - - - org.picocontainer - picocontainer - - - org.slf4j - slf4j-api - - - org.slf4j - jcl-over-slf4j - - + com.google.code.findbugs + jsr305 + 3.0.2 + provided + + org.sonarsource.api.plugin + sonar-plugin-api-test-fixtures + ${sonar.plugin.api.version} + test + org.sonarsource.sonarqube - sonar-testing-harness - ${sonar.version} + sonar-plugin-api-impl + 10.3.0.82913 test @@ -158,12 +132,6 @@ ${junit.version} test - - org.sonarsource.sslr - sslr-testing-harness - ${sslr.version} - test - org.assertj assertj-core @@ -185,10 +153,9 @@ org.apache.maven.plugins maven-compiler-plugin - 3.8.1 + 3.13.0 - ${jdk.min.version} - ${jdk.min.version} + ${jdk.min.version} -Xlint @@ -198,7 +165,7 @@ org.jacoco jacoco-maven-plugin - 0.8.5 + 0.8.12 **/generated/** diff --git a/sonar-flutter-plugin/pom.xml b/sonar-flutter-plugin/pom.xml index 35d0bdb..8bb2139 100644 --- a/sonar-flutter-plugin/pom.xml +++ b/sonar-flutter-plugin/pom.xml @@ -29,11 +29,13 @@ org.sonarsource.sonar-packaging-maven-plugin sonar-packaging-maven-plugin - 1.18.0.372 + 1.23.0.740 true fr.insideapp.sonarqube.flutter.FlutterPlugin Flutter + 10.8 + dart diff --git a/sonar-flutter-plugin/src/main/java/fr/insideapp/sonarqube/flutter/FlutterPlugin.java b/sonar-flutter-plugin/src/main/java/fr/insideapp/sonarqube/flutter/FlutterPlugin.java index 5a395e8..527ecdc 100644 --- a/sonar-flutter-plugin/src/main/java/fr/insideapp/sonarqube/flutter/FlutterPlugin.java +++ b/sonar-flutter-plugin/src/main/java/fr/insideapp/sonarqube/flutter/FlutterPlugin.java @@ -25,6 +25,7 @@ import fr.insideapp.sonarqube.dart.lang.issues.dartanalyzer.AnalyzerOutput; import fr.insideapp.sonarqube.dart.lang.issues.dartanalyzer.DartAnalyzerRulesDefinition; import fr.insideapp.sonarqube.dart.lang.issues.dartanalyzer.DartAnalyzerSensor; +import fr.insideapp.sonarqube.dart.lang.issues.statemanagement.FlutterStateManagementRulesDefinition; import fr.insideapp.sonarqube.flutter.coverage.FlutterCoverageSensor; import fr.insideapp.sonarqube.flutter.tests.FlutterTestSensor; import org.sonar.api.Plugin; @@ -69,6 +70,9 @@ public void define(Context context) { // dartanalyzer Sensor context.addExtensions(DartAnalyzerSensor.class, DartAnalyzerRulesDefinition.class); + // State management rules + context.addExtension(FlutterStateManagementRulesDefinition.class); + context.addExtension( PropertyDefinition.builder(FLUTTER_TESTS_REPORT_PATH_KEY) .name("Unit Test Report") diff --git a/sonar-flutter-plugin/src/main/java/fr/insideapp/sonarqube/flutter/coverage/FlutterCoverageSensor.java b/sonar-flutter-plugin/src/main/java/fr/insideapp/sonarqube/flutter/coverage/FlutterCoverageSensor.java index b8f962f..2eb08bf 100644 --- a/sonar-flutter-plugin/src/main/java/fr/insideapp/sonarqube/flutter/coverage/FlutterCoverageSensor.java +++ b/sonar-flutter-plugin/src/main/java/fr/insideapp/sonarqube/flutter/coverage/FlutterCoverageSensor.java @@ -25,8 +25,8 @@ import org.sonar.api.batch.sensor.SensorContext; import org.sonar.api.batch.sensor.SensorDescriptor; import org.sonar.api.batch.sensor.coverage.NewCoverage; -import org.sonar.api.utils.log.Logger; -import org.sonar.api.utils.log.Loggers; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import javax.annotation.CheckForNull; import java.io.File; @@ -35,7 +35,7 @@ import java.util.Map; public class FlutterCoverageSensor implements Sensor { - private static final Logger LOGGER = Loggers.get(FlutterCoverageSensor.class); + private static final Logger LOGGER = LoggerFactory.getLogger(FlutterCoverageSensor.class); public static final String REPORT_PATH_KEY = "sonar.flutter.coverage.reportPath"; public static final String DEFAULT_REPORT_PATH = "coverage/lcov.info"; diff --git a/sonar-flutter-plugin/src/main/java/fr/insideapp/sonarqube/flutter/coverage/LCOVParser.java b/sonar-flutter-plugin/src/main/java/fr/insideapp/sonarqube/flutter/coverage/LCOVParser.java index 49d0a25..cdb3990 100644 --- a/sonar-flutter-plugin/src/main/java/fr/insideapp/sonarqube/flutter/coverage/LCOVParser.java +++ b/sonar-flutter-plugin/src/main/java/fr/insideapp/sonarqube/flutter/coverage/LCOVParser.java @@ -20,8 +20,8 @@ import org.sonar.api.batch.fs.InputFile; import org.sonar.api.batch.sensor.SensorContext; import org.sonar.api.batch.sensor.coverage.NewCoverage; -import org.sonar.api.utils.log.Logger; -import org.sonar.api.utils.log.Loggers; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import javax.annotation.CheckForNull; import java.io.File; @@ -44,7 +44,7 @@ public class LCOVParser { private final FileLocator fileLocator; private int inconsistenciesCounter = 0; - private static final Logger LOGGER = Loggers.get(LCOVParser.class); + private static final Logger LOGGER = LoggerFactory.getLogger(LCOVParser.class); private LCOVParser(List lines, SensorContext context, FileLocator fileLocator) { this.context = context; diff --git a/sonar-flutter-plugin/src/main/java/fr/insideapp/sonarqube/flutter/tests/FlutterTestReportParser.java b/sonar-flutter-plugin/src/main/java/fr/insideapp/sonarqube/flutter/tests/FlutterTestReportParser.java index f91a389..055cdf3 100644 --- a/sonar-flutter-plugin/src/main/java/fr/insideapp/sonarqube/flutter/tests/FlutterTestReportParser.java +++ b/sonar-flutter-plugin/src/main/java/fr/insideapp/sonarqube/flutter/tests/FlutterTestReportParser.java @@ -19,8 +19,8 @@ import org.json.simple.JSONObject; import org.json.simple.JSONValue; -import org.sonar.api.utils.log.Logger; -import org.sonar.api.utils.log.Loggers; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.File; import java.io.IOException; @@ -35,7 +35,7 @@ * Test event types are based on https://github.com/dart-lang/test/blob/master/pkgs/test/doc/json_reporter.md */ public class FlutterTestReportParser { - private static final Logger LOGGER = Loggers.get(FlutterTestReportParser.class); + private static final Logger LOGGER = LoggerFactory.getLogger(FlutterTestReportParser.class); List parse(File reportFile) throws IOException { if (reportFile.exists()) { diff --git a/sonar-flutter-plugin/src/main/java/fr/insideapp/sonarqube/flutter/tests/FlutterTestSensor.java b/sonar-flutter-plugin/src/main/java/fr/insideapp/sonarqube/flutter/tests/FlutterTestSensor.java index dc9b502..c364e92 100644 --- a/sonar-flutter-plugin/src/main/java/fr/insideapp/sonarqube/flutter/tests/FlutterTestSensor.java +++ b/sonar-flutter-plugin/src/main/java/fr/insideapp/sonarqube/flutter/tests/FlutterTestSensor.java @@ -24,8 +24,8 @@ import org.sonar.api.batch.sensor.SensorContext; import org.sonar.api.batch.sensor.SensorDescriptor; import org.sonar.api.measures.CoreMetrics; -import org.sonar.api.utils.log.Logger; -import org.sonar.api.utils.log.Loggers; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.File; import java.io.IOException; @@ -33,7 +33,7 @@ import java.util.List; public class FlutterTestSensor implements Sensor { - private static final Logger LOGGER = Loggers.get(FlutterTestSensor.class); + private static final Logger LOGGER = LoggerFactory.getLogger(FlutterTestSensor.class); public static final String REPORT_PATH_KEY = "sonar.flutter.tests.reportPath"; public static final String DEFAULT_REPORT_PATH = "tests.output"; diff --git a/sonar-flutter-plugin/src/test/java/fr/insideapp/sonarqube/flutter/FlutterPluginTest.java b/sonar-flutter-plugin/src/test/java/fr/insideapp/sonarqube/flutter/FlutterPluginTest.java index e9acdcc..2f6ef17 100644 --- a/sonar-flutter-plugin/src/test/java/fr/insideapp/sonarqube/flutter/FlutterPluginTest.java +++ b/sonar-flutter-plugin/src/test/java/fr/insideapp/sonarqube/flutter/FlutterPluginTest.java @@ -34,7 +34,7 @@ public class FlutterPluginTest { @Test public void define() { - SonarRuntime sonarRuntime = SonarRuntimeImpl.forSonarQube(Version.create(7, 9), SonarQubeSide.SERVER, SonarEdition.COMMUNITY); + SonarRuntime sonarRuntime = SonarRuntimeImpl.forSonarQube(Version.create(10, 1), SonarQubeSide.SERVER, SonarEdition.COMMUNITY); Plugin.Context context = new Plugin.Context(sonarRuntime); @@ -42,7 +42,7 @@ public void define() { plugin.define(context); List extensions = context.getExtensions(); - assertThat(extensions).hasSize(15); + assertThat(extensions).hasSize(16); }