From 4a3bf350fae71c7f19167b5bbafde081de12181a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 25 Jul 2024 18:40:39 +0000 Subject: [PATCH] [2.x][Manual Backport ] Back port main to 2.x (#7477) * Bump OUI to 1.8.0 (#7363) Signed-off-by: Miki (cherry picked from commit c1bae75097f0718187fc2b3334eb1e93201703dc) * [Auto Suggest] OpenSearch SQL autosuggest with ANTLR (#7336) * cherry pick Signed-off-by: Eric * SQL keyword suggestion Signed-off-by: Eric * column and values suggestions Signed-off-by: Eric * adjust values suggestions and ignored token Signed-off-by: Eric * suggestion type casting Signed-off-by: Eric * ignore functions Signed-off-by: Eric * case insensitive Signed-off-by: Eric * change to use grammar for insensitive case Signed-off-by: Eric * fix multi-line issue Signed-off-by: Eric * code cleanup Signed-off-by: Eric * move ppl out of scope Signed-off-by: Eric * rename folder and add ignoring rules Signed-off-by: Eric * resolve type issue Signed-off-by: Eric * fix ppl suggestion provider issue Signed-off-by: Eric * remove function suggestion Signed-off-by: Eric * some code clean up and adding tests Signed-off-by: Eric * cursor tests Signed-off-by: Eric * remove testing setup Signed-off-by: Eric * add changelog Signed-off-by: Eric * update yarn file Signed-off-by: Eric * add missing testing library Signed-off-by: Eric * MDS integration Signed-off-by: Eric * minor interface change and disable word based suggestion Signed-off-by: Eric * update ID_LITERAL and recompile grammar Signed-off-by: Eric * column suggest for agg function Signed-off-by: Eric * revert version Signed-off-by: Eric * opensearch sql syntax highlighting Signed-off-by: Eric * add utility tests Signed-off-by: Eric * symbol table test Signed-off-by: Eric * error listener test Signed-off-by: Eric * parse test Signed-off-by: Eric * add suggestion provider to single line query editor Signed-off-by: Eric * remove one test Signed-off-by: Eric * add connection service type Signed-off-by: Eric --------- Signed-off-by: Eric (cherry picked from commit 9348bd4276a6daf4a719f3709c3d854e002350e0) * Move TopNavLinks to new Nav Bar Discover (#7326) This PR aims to introduce a new Nav bar in Discover that would contain the Date Picker as well as the Navigation links that are currently part of headers. The Navigation Links have been replaced with the corresponding Icons to provide a modern UX. These setting are currently controlled by query:enhancements:enabled Advanced Setting Flag and would be visible when the above flag is turned on. Signed-off-by: Suchit Sahoo (cherry picked from commit e46e54a85fac05684c4a052325331e4f7331b6ce) * [navigation-next]fix: breadcrumb issue found in data source management and other similar cases. (#7401) * feat: add scoped breadcrumbs Signed-off-by: SuZhou-Joe * Changeset file for PR #7401 created/updated * feat: move data source management register logic up a little bit Signed-off-by: SuZhou-Joe * feat: add unit test Signed-off-by: SuZhou-Joe * feat: revert the home related change Signed-off-by: SuZhou-Joe * fix: overview error in all use case when workspace is enabled Signed-off-by: SuZhou-Joe * fix: update snapshot Signed-off-by: SuZhou-Joe * Changeset file for PR #7401 created/updated * fix: hide nav groups that should be displayed Signed-off-by: SuZhou-Joe * feat: hide expand icon in left navigation Signed-off-by: SuZhou-Joe * feat: update Signed-off-by: SuZhou-Joe --------- Signed-off-by: SuZhou-Joe Co-authored-by: opensearch-changeset-bot[bot] <154024398+opensearch-changeset-bot[bot]@users.noreply.github.com> Co-authored-by: ZilongX <99905560+ZilongX@users.noreply.github.com> (cherry picked from commit 3f78c94e640209027d9e7cc5cd349403f70dea18) * [Bug][Data Source] Move data source manageable feature flag to DSM plugin (#7440) * Move data source manageable feature flag to DSM plugin Signed-off-by: yubonluo * Changeset file for PR #7440 created/updated --------- Signed-off-by: yubonluo Co-authored-by: opensearch-changeset-bot[bot] <154024398+opensearch-changeset-bot[bot]@users.noreply.github.com> (cherry picked from commit dfcd2e15d06e2db57c55c4a48e1d5abe68d28395) * [Discover-next] data set picker (#7426) * update using query manager Signed-off-by: Kawika Avilla * aggs not working Signed-off-by: Kawika Avilla * almost there Signed-off-by: Kawika Avilla * stablish Signed-off-by: Kawika Avilla * thanks ashwin Signed-off-by: Kawika Avilla * update ref name Signed-off-by: Kawika Avilla * fix timefields Signed-off-by: Kawika Avilla * clean up some console logs Signed-off-by: Kawika Avilla * go safer route of setting language Signed-off-by: Kawika Avilla * its working again Signed-off-by: Kawika Avilla * fix names Signed-off-by: Kawika Avilla * restore code editor and indices Signed-off-by: Kawika Avilla * sql df Signed-off-by: Kawika Avilla * fix external datasources again Signed-off-by: Kawika Avilla --------- Signed-off-by: Kawika Avilla (cherry picked from commit 6a079d3eb61e9e229457eba7d26213b50ee7a7c6) * Fix add filter for numeric scripted field (#7022) * Fix add filter for scripted field Signed-off-by: abbyhu2000 * add unit test Signed-off-by: abbyhu2000 * change from nested ternary to if else Signed-off-by: abbyhu2000 * add more unit tests Signed-off-by: abbyhu2000 * change unit tests Signed-off-by: abbyhu2000 * fix typo Signed-off-by: abbyhu2000 --------- Signed-off-by: abbyhu2000 (cherry picked from commit 7c1f8fc18c5dada2cb1d6787262baf40e4d1e4eb) * [Bug][Workspace] Add permission validation at workspace detail page (#7435) * [Bug][Workspace] Add permission validate at workspace detail page Signed-off-by: yubonluo * Changeset file for PR #7435 created/updated --------- Signed-off-by: yubonluo Co-authored-by: opensearch-changeset-bot[bot] <154024398+opensearch-changeset-bot[bot]@users.noreply.github.com> (cherry picked from commit 45d34b5516d06d673c2a445ee8e254988369b15b) * Revert "[Discover-next] data set picker (#7426)" (#7479) This reverts commit 6a079d3eb61e9e229457eba7d26213b50ee7a7c6. --------- Co-authored-by: Miki Co-authored-by: Eric Wei Co-authored-by: SuZhou-Joe Co-authored-by: yuboluo Co-authored-by: Kawika Avilla Co-authored-by: Qingyang(Abby) Hu Co-authored-by: Sean Li (cherry picked from commit 0515fb237403b1a756b878ee9c415f75ef279c64) Signed-off-by: github-actions[bot] --- .eslintignore | 4 + .eslintrc.js | 9 + changelogs/fragments/7336.yml | 2 + changelogs/fragments/7363.yml | 2 + config/opensearch_dashboards.yml | 2 +- package.json | 19 +- packages/osd-babel-preset/webpack_preset.js | 6 + .../osd-monaco/src/xjson/lexer_rules/index.ts | 3 + .../src/xjson/lexer_rules/opensearchsql.ts | 157 + .../src/worker/webpack.config.ts | 10 + packages/osd-ui-framework/package.json | 2 +- packages/osd-ui-shared-deps/package.json | 2 +- src/core/public/application/types.ts | 2 + .../.generated/OpenSearchSQLLexer.interp | 1085 ++ .../.generated/OpenSearchSQLLexer.tokens | 689 + .../.generated/OpenSearchSQLLexer.ts | 2027 +++ .../.generated/OpenSearchSQLParser.interp | 829 + .../.generated/OpenSearchSQLParser.tokens | 689 + .../.generated/OpenSearchSQLParser.ts | 12612 ++++++++++++++++ .../.generated/OpenSearchSQLParserVisitor.ts | 1121 ++ .../antlr/opensearch_sql/code_completion.ts | 214 + .../public/antlr/opensearch_sql/constants.ts | 21 + .../grammar/.antlr/OpenSearchSQLLexer.interp | 1085 ++ .../grammar/.antlr/OpenSearchSQLLexer.java | 2836 ++++ .../grammar/.antlr/OpenSearchSQLLexer.tokens | 689 + .../grammar/.antlr/OpenSearchSQLParser.interp | 829 + .../grammar/.antlr/OpenSearchSQLParser.java | 11122 ++++++++++++++ .../grammar/.antlr/OpenSearchSQLParser.tokens | 689 + .../OpenSearchSQLParserBaseListener.java | 1851 +++ .../.antlr/OpenSearchSQLParserListener.java | 1613 ++ .../grammar/OpenSearchSQLLexer.g4 | 489 + .../grammar/OpenSearchSQLParser.g4 | 849 ++ .../opensearch_sql_autocomplete.ts | 272 + .../public/antlr/opensearch_sql/parse.test.ts | 84 + .../data/public/antlr/opensearch_sql/parse.ts | 55 + .../opensearch_sql/sql_error_listener.test.ts | 71 + .../opensearch_sql/sql_error_listerner.ts | 47 + .../antlr/opensearch_sql/symbol_table.test.ts | 95 + .../antlr/opensearch_sql/symbol_table.ts | 68 + .../public/antlr/opensearch_sql/table.test.ts | 120 + .../data/public/antlr/opensearch_sql/table.ts | 320 + .../data/public/antlr/shared/cursor.test.ts | 65 + .../data/public/antlr/shared/cursor.ts | 119 + src/plugins/data/public/antlr/shared/types.ts | 124 + .../data/public/antlr/shared/utils.test.ts | 159 + src/plugins/data/public/antlr/shared/utils.ts | 118 + .../providers/query_suggestion_provider.ts | 3 + src/plugins/data/public/plugin.ts | 4 + .../ui/filter_bar/_global_filter_group.scss | 1 + .../filter_editor/value_input_type.test.tsx | 80 + .../filter_editor/value_input_type.tsx | 13 +- .../ui/query_editor/_language_switcher.scss | 8 + .../ui/query_editor/language_switcher.tsx | 102 + .../public/ui/query_editor/query_editor.tsx | 70 +- .../ui/query_editor/query_editor_top_row.tsx | 20 +- .../query_string_input/query_bar_top_row.tsx | 10 +- .../query_string_input/query_string_input.tsx | 2 - .../ui/search_bar/create_search_bar.tsx | 1 + .../data/public/ui/search_bar/search_bar.tsx | 3 + src/plugins/data/public/ui/types.ts | 1 + .../__snapshots__/app_container.test.tsx.snap | 10 +- .../public/components/app_container.scss | 10 + .../public/components/app_container.tsx | 108 +- .../public/components/constants.ts | 6 + src/plugins/discover/common/index.ts | 1 + .../components/top_nav/get_top_nav_links.tsx | 28 +- .../canvas/discover_canvas.scss | 6 + .../view_components/canvas/index.tsx | 12 +- .../view_components/canvas/top_nav.tsx | 69 +- .../public/top_nav_menu/top_nav_menu.tsx | 1 + .../public/top_nav_menu/top_nav_menu_data.tsx | 1 - .../query_enhancements/public/plugin.tsx | 3 + .../plugins/osd_tp_run_pipeline/package.json | 2 +- .../osd_sample_panel_action/package.json | 2 +- .../osd_tp_custom_visualizations/package.json | 2 +- yarn.lock | 292 +- 76 files changed, 44032 insertions(+), 115 deletions(-) create mode 100644 changelogs/fragments/7336.yml create mode 100644 changelogs/fragments/7363.yml create mode 100644 packages/osd-monaco/src/xjson/lexer_rules/opensearchsql.ts create mode 100644 src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLLexer.interp create mode 100644 src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLLexer.tokens create mode 100644 src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLLexer.ts create mode 100644 src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLParser.interp create mode 100644 src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLParser.tokens create mode 100644 src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLParser.ts create mode 100644 src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLParserVisitor.ts create mode 100644 src/plugins/data/public/antlr/opensearch_sql/code_completion.ts create mode 100644 src/plugins/data/public/antlr/opensearch_sql/constants.ts create mode 100644 src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLLexer.interp create mode 100644 src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLLexer.java create mode 100644 src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLLexer.tokens create mode 100644 src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLParser.interp create mode 100644 src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLParser.java create mode 100644 src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLParser.tokens create mode 100644 src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLParserBaseListener.java create mode 100644 src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLParserListener.java create mode 100644 src/plugins/data/public/antlr/opensearch_sql/grammar/OpenSearchSQLLexer.g4 create mode 100644 src/plugins/data/public/antlr/opensearch_sql/grammar/OpenSearchSQLParser.g4 create mode 100644 src/plugins/data/public/antlr/opensearch_sql/opensearch_sql_autocomplete.ts create mode 100644 src/plugins/data/public/antlr/opensearch_sql/parse.test.ts create mode 100644 src/plugins/data/public/antlr/opensearch_sql/parse.ts create mode 100644 src/plugins/data/public/antlr/opensearch_sql/sql_error_listener.test.ts create mode 100644 src/plugins/data/public/antlr/opensearch_sql/sql_error_listerner.ts create mode 100644 src/plugins/data/public/antlr/opensearch_sql/symbol_table.test.ts create mode 100644 src/plugins/data/public/antlr/opensearch_sql/symbol_table.ts create mode 100644 src/plugins/data/public/antlr/opensearch_sql/table.test.ts create mode 100644 src/plugins/data/public/antlr/opensearch_sql/table.ts create mode 100644 src/plugins/data/public/antlr/shared/cursor.test.ts create mode 100644 src/plugins/data/public/antlr/shared/cursor.ts create mode 100644 src/plugins/data/public/antlr/shared/types.ts create mode 100644 src/plugins/data/public/antlr/shared/utils.test.ts create mode 100644 src/plugins/data/public/antlr/shared/utils.ts create mode 100644 src/plugins/data/public/ui/filter_bar/filter_editor/value_input_type.test.tsx create mode 100644 src/plugins/data/public/ui/query_editor/_language_switcher.scss create mode 100644 src/plugins/data/public/ui/query_editor/language_switcher.tsx create mode 100644 src/plugins/data_explorer/public/components/constants.ts diff --git a/.eslintignore b/.eslintignore index f5df2d394adf..f460657cb3b8 100644 --- a/.eslintignore +++ b/.eslintignore @@ -30,3 +30,7 @@ target /packages/osd-test/src/functional_test_runner/lib/config/__tests__/fixtures/ /packages/osd-ui-framework/dist /packages/osd-ui-shared-deps/flot_charts + +# antlr overrides +/src/plugins/data/public/antlr/opensearch_sql/.generated/* +/src/plugins/data/public/antlr/opensearch_sql/grammar/**/* diff --git a/.eslintrc.js b/.eslintrc.js index a78ddeca7813..5ab6fdc41483 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -751,5 +751,14 @@ module.exports = { 'no-undef': 'off', }, }, + { + files: [ + 'src/plugins/data/public/antlr/opensearch_sql/.generated/*', + 'src/plugins/data/public/antlr/opensearch_sql/grammar/**/*', + ], + rules: { + 'filenames/match-regex': 'off', + }, + }, ], }; diff --git a/changelogs/fragments/7336.yml b/changelogs/fragments/7336.yml new file mode 100644 index 000000000000..4bd17f0155e8 --- /dev/null +++ b/changelogs/fragments/7336.yml @@ -0,0 +1,2 @@ +feat: +- [Auto Suggest] OpenSearch SQL autosuggest with ANTLR ([#7336](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/7336)) \ No newline at end of file diff --git a/changelogs/fragments/7363.yml b/changelogs/fragments/7363.yml new file mode 100644 index 000000000000..29e27d719da3 --- /dev/null +++ b/changelogs/fragments/7363.yml @@ -0,0 +1,2 @@ +feat: +- Bump OUI to 1.8.0 ([#7363](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/7363)) diff --git a/config/opensearch_dashboards.yml b/config/opensearch_dashboards.yml index 38c5e24a5835..5e09c2359aa4 100644 --- a/config/opensearch_dashboards.yml +++ b/config/opensearch_dashboards.yml @@ -362,4 +362,4 @@ # Set the backend roles in groups or users, whoever has the backend roles or exactly match the user ids defined in this config will be regard as dashboard admin. # Dashboard admin will have the access to all the workspaces(workspace.enabled: true) and objects inside OpenSearch Dashboards. # opensearchDashboards.dashboardAdmin.groups: ["dashboard_admin"] -# opensearchDashboards.dashboardAdmin.users: ["dashboard_admin"] +# opensearchDashboards.dashboardAdmin.users: ["dashboard_admin"] \ No newline at end of file diff --git a/package.json b/package.json index b24c09ea6a67..30cc500cdb66 100644 --- a/package.json +++ b/package.json @@ -77,7 +77,12 @@ "osd:bootstrap": "scripts/use_node scripts/build_ts_refs && scripts/use_node scripts/register_git_hook", "spec_to_console": "scripts/use_node scripts/spec_to_console", "pkg-version": "scripts/use_node -e \"console.log(require('./package.json').version)\"", - "release_note:generate": "scripts/use_node scripts/generate_release_note" + "release_note:generate": "scripts/use_node scripts/generate_release_note", + "cypress:run-without-security": "env TZ=America/Los_Angeles NO_COLOR=1 cypress run --headless --env SECURITY_ENABLED=false", + "cypress:run-with-security": "env TZ=America/Los_Angeles NO_COLOR=1 cypress run --headless --env SECURITY_ENABLED=true,openSearchUrl=https://localhost:9200,WAIT_FOR_LOADER_BUFFER_MS=500", + "osd:ciGroup10": "echo \"dashboard_sanity_test_spec.js\"", + "osd:ciGroup11": "echo \"apps/vis_builder/*.js\"", + "generate:opensearchsqlantlr": "./node_modules/antlr4ng-cli/index.js -Dlanguage=TypeScript -o ./src/plugins/data/public/antlr/opensearch_sql/.generated -visitor -no-listener -Xexact-output-dir ./src/plugins/data/public/antlr/opensearch_sql/grammar/OpenSearchSQLLexer.g4 ./src/plugins/data/public/antlr/opensearch_sql/grammar/OpenSearchSQLParser.g4" }, "repository": { "type": "git", @@ -109,7 +114,7 @@ "**/qs": "^6.11.0", "**/semver": "^7.5.3", "**/set-value": "^4.1.0", - "**/tar":"^6.2.1", + "**/tar": "^6.2.1", "**/topo/hoek": "npm:@amoo-miki/hoek@6.1.3", "**/trim": "^0.0.3", "**/typescript": "4.0.2", @@ -140,7 +145,7 @@ "dependencies": { "@aws-crypto/client-node": "^3.1.1", "@elastic/datemath": "5.0.3", - "@elastic/eui": "npm:@opensearch-project/oui@1.7.0", + "@elastic/eui": "npm:@opensearch-project/oui@1.8.0", "@elastic/good": "^9.0.1-kibana3", "@elastic/numeral": "npm:@amoo-miki/numeral@2.6.0", "@elastic/request-crypto": "2.0.0", @@ -177,6 +182,8 @@ "JSONStream": "1.3.5", "abortcontroller-polyfill": "^1.4.0", "ajv": "^8.11.0", + "antlr4-c3": "^3.4.1", + "antlr4ng": "^3.0.4", "bluebird": "3.5.5", "chalk": "^4.1.0", "chokidar": "^3.4.2", @@ -242,11 +249,13 @@ "type-detect": "^4.0.8", "uuid": "3.3.2", "whatwg-fetch": "^3.0.0", - "yauzl": "^2.10.0" + "yauzl": "^2.10.0", + "@opensearch-dashboards-test/opensearch-dashboards-test-library": "https://github.com/opensearch-project/opensearch-dashboards-test-library/archive/refs/tags/1.0.6.tar.gz" }, "devDependencies": { "@babel/core": "^7.22.9", "@babel/parser": "^7.22.9", + "@babel/plugin-transform-class-static-block": "^7.24.4", "@babel/register": "^7.22.9", "@babel/types": "^7.22.9", "@elastic/apm-rum": "^5.6.1", @@ -361,6 +370,7 @@ "@types/zen-observable": "^0.8.0", "@typescript-eslint/eslint-plugin": "^3.10.0", "@typescript-eslint/parser": "^3.10.0", + "antlr4ng-cli": "^2.0.0", "archiver": "^5.3.0", "axe-core": "^4.0.2", "babel-eslint": "^10.0.3", @@ -461,6 +471,7 @@ "regenerate": "^1.4.0", "reselect": "^4.0.0", "resize-observer-polyfill": "^1.5.1", + "rimraf": "^5.0.7", "selenium-webdriver": "^4.0.0-alpha.7", "simple-git": "^3.16.0", "sinon": "^7.4.2", diff --git a/packages/osd-babel-preset/webpack_preset.js b/packages/osd-babel-preset/webpack_preset.js index 9d0a75a042c5..62b764f82941 100644 --- a/packages/osd-babel-preset/webpack_preset.js +++ b/packages/osd-babel-preset/webpack_preset.js @@ -55,6 +55,12 @@ module.exports = () => { fileName: false, }, ], + [ + require.resolve('@babel/plugin-transform-class-static-block'), + { + fileName: false, + }, + ], ], env: { production: { diff --git a/packages/osd-monaco/src/xjson/lexer_rules/index.ts b/packages/osd-monaco/src/xjson/lexer_rules/index.ts index b0ed41a63801..496769020e55 100644 --- a/packages/osd-monaco/src/xjson/lexer_rules/index.ts +++ b/packages/osd-monaco/src/xjson/lexer_rules/index.ts @@ -33,6 +33,7 @@ import * as monaco from 'monaco-editor/esm/vs/editor/editor.api'; import * as xJson from './xjson'; import * as opensearchql from './opensearchql'; import * as painless from './painless'; +import * as opensearchsql from './opensearchsql'; export const registerLexerRules = (m: typeof monaco) => { m.languages.register({ id: xJson.ID }); @@ -41,4 +42,6 @@ export const registerLexerRules = (m: typeof monaco) => { m.languages.setMonarchTokensProvider(painless.ID, painless.lexerRules); m.languages.register({ id: opensearchql.ID }); m.languages.setMonarchTokensProvider(opensearchql.ID, opensearchql.lexerRules); + m.languages.register({ id: opensearchsql.ID }); + m.languages.setMonarchTokensProvider(opensearchsql.ID, opensearchsql.lexerRules); }; diff --git a/packages/osd-monaco/src/xjson/lexer_rules/opensearchsql.ts b/packages/osd-monaco/src/xjson/lexer_rules/opensearchsql.ts new file mode 100644 index 000000000000..b204c63e83c4 --- /dev/null +++ b/packages/osd-monaco/src/xjson/lexer_rules/opensearchsql.ts @@ -0,0 +1,157 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { monaco } from '../../monaco'; + +export const ID = 'SQL'; + +const keywords = [ + 'ALL', + 'AND', + 'AS', + 'ASC', + 'BOOLEAN', + 'BETWEEN', + 'BY', + 'CASE', + 'CAST', + 'CROSS', + 'COLUMNS', + 'DATETIME', + 'DELETE', + 'DESC', + 'DESCRIBE', + 'DISTINCT', + 'DOUBLE', + 'ELSE', + 'EXISTS', + 'FALSE', + 'FLOAT', + 'FIRST', + 'FROM', + 'GROUP', + 'HAVING', + 'IN', + 'INNER', + 'INT', + 'INTEGER', + 'IS', + 'JOIN', + 'LAST', + 'LEFT', + 'LIKE', + 'LIMIT', + 'LONG', + 'MATCH', + 'NATURAL', + 'NOT', + 'NULL', + 'NULLS', + 'ON', + 'OR', + 'ORDER', + 'OUTER', + 'OVER', + 'PARTITION', + 'REGEXP', + 'RIGHT', + 'SELECT', + 'SHOW', + 'STRING', + 'THEN', + 'TRUE', + 'UNION', + 'USING', + 'WHEN', + 'WHERE', + 'EXCEPT', +]; + +const functions = [ + 'AVG', + 'COUNT', + 'MAX', + 'MIN', + 'SUM', + 'VAR_POP', + 'VAR_SAMP', + 'VARIANCE', + 'STD', + 'STDDEV', + 'STDDEV_POP', + 'STDDEV_SAMP', + 'SUBSTRING', + 'TRIM', +]; + +const operators = [ + '=', + '>', + '<', + '!', + '~', + '\\|', + '&', + '\\^', + '\\*', + '/', + '%', + '\\+', + '-', + 'DIV', + 'MOD', +]; + +const brackets = [ + { open: '(', close: ')', token: 'delimiter.parenthesis' }, + { open: '[', close: ']', token: 'delimiter.square' }, +]; + +export const lexerRules = { + defaultToken: 'invalid', + ignoreCase: true, + tokenPostfix: '', + keywords, + functions, + operators, + brackets, + tokenizer: { + root: [ + [ + /[a-zA-Z_$][a-zA-Z0-9_$]*/, + { + cases: { + '@keywords': 'keyword', + '@functions': 'function', + '@default': 'identifier', + }, + }, + ], + { include: '@whitespace' }, + [/[()]/, '@brackets'], + [new RegExp(operators.join('|')), 'operator'], + [/[0-9]+(\.[0-9]+)?/, 'number'], + [/'([^'\\]|\\.)*$/, 'string.invalid'], // non-terminated string + [/'/, 'string', '@string'], + [/"/, 'string', '@string'], + ], + whitespace: [ + [/[ \t\r\n]+/, 'white'], + [/\/\*/, 'comment', '@comment'], + [/--.*$/, 'comment'], + ], + string: [ + [/[^'\\]+/, 'string'], + [/\\./, 'string.escape'], + [/'/, 'string', '@pop'], + [/"/, 'string', '@pop'], + ], + comment: [ + [/[^/*]+/, 'comment'], + [/\*\//, 'comment', '@pop'], + [/[\/*]/, 'comment'], + ], + }, +} as monaco.languages.IMonarchLanguage; diff --git a/packages/osd-optimizer/src/worker/webpack.config.ts b/packages/osd-optimizer/src/worker/webpack.config.ts index 1bfb1f186af7..4c3ba9291ee5 100644 --- a/packages/osd-optimizer/src/worker/webpack.config.ts +++ b/packages/osd-optimizer/src/worker/webpack.config.ts @@ -256,6 +256,16 @@ export function getWebpackConfig(bundle: Bundle, bundleRefs: BundleRefs, worker: loader: 'raw-loader', }, }, + { + test: /\.cjs$/, + include: /node_modules/, + use: { + loader: 'babel-loader', + options: { + presets: [BABEL_PRESET_PATH], + }, + }, + }, ], }, diff --git a/packages/osd-ui-framework/package.json b/packages/osd-ui-framework/package.json index 860a50d39c49..48b5a4155bdf 100644 --- a/packages/osd-ui-framework/package.json +++ b/packages/osd-ui-framework/package.json @@ -23,7 +23,7 @@ "enzyme-adapter-react-16": "^1.9.1" }, "devDependencies": { - "@elastic/eui": "npm:@opensearch-project/oui@1.7.0", + "@elastic/eui": "npm:@opensearch-project/oui@1.8.0", "@osd/babel-preset": "1.0.0", "@osd/optimizer": "1.0.0", "comment-stripper": "^0.0.4", diff --git a/packages/osd-ui-shared-deps/package.json b/packages/osd-ui-shared-deps/package.json index 1d4092f7df5e..55c948bf9b08 100644 --- a/packages/osd-ui-shared-deps/package.json +++ b/packages/osd-ui-shared-deps/package.json @@ -10,7 +10,7 @@ }, "dependencies": { "@elastic/charts": "31.1.0", - "@elastic/eui": "npm:@opensearch-project/oui@1.7.0", + "@elastic/eui": "npm:@opensearch-project/oui@1.8.0", "@elastic/numeral": "npm:@amoo-miki/numeral@2.6.0", "@opensearch/datemath": "5.0.3", "@osd/i18n": "1.0.0", diff --git a/src/core/public/application/types.ts b/src/core/public/application/types.ts index 1e84ae309bda..7546b49620a4 100644 --- a/src/core/public/application/types.ts +++ b/src/core/public/application/types.ts @@ -539,6 +539,8 @@ export interface AppMountParameters { * Optional datasource id to pass while mounting app */ dataSourceId?: string; + + optionalRef?: Record>; } /** diff --git a/src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLLexer.interp b/src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLLexer.interp new file mode 100644 index 000000000000..655cf595429d --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLLexer.interp @@ -0,0 +1,1085 @@ +token literal names: +null +null +null +null +null +'ALL' +'AND' +'AS' +'ASC' +'BOOLEAN' +'BETWEEN' +'BY' +'CASE' +'CAST' +'CROSS' +'COLUMNS' +'DATETIME' +'DELETE' +'DESC' +'DESCRIBE' +'DISTINCT' +'DOUBLE' +'ELSE' +'EXISTS' +'FALSE' +'FLOAT' +'FIRST' +'FROM' +'GROUP' +'HAVING' +'IN' +'INNER' +'INT' +'INTEGER' +'IS' +'JOIN' +'LAST' +'LEFT' +'LIKE' +'LIMIT' +'LONG' +'MATCH' +'NATURAL' +'MISSING' +'NOT' +'NULL' +'NULLS' +'ON' +'OR' +'ORDER' +'OUTER' +'OVER' +'PARTITION' +'REGEXP' +'RIGHT' +'SELECT' +'SHOW' +'STRING' +'THEN' +'TRUE' +'UNION' +'USING' +'WHEN' +'WHERE' +'MINUS' +'AVG' +'COUNT' +'MAX' +'MIN' +'SUM' +'VAR_POP' +'VAR_SAMP' +'VARIANCE' +'STD' +'STDDEV' +'STDDEV_POP' +'STDDEV_SAMP' +'SUBSTRING' +'TRIM' +'END' +'FULL' +'OFFSET' +'INTERVAL' +'MICROSECOND' +'SECOND' +'MINUTE' +'HOUR' +'DAY' +'WEEK' +'MONTH' +'QUARTER' +'YEAR' +'SECOND_MICROSECOND' +'MINUTE_MICROSECOND' +'MINUTE_SECOND' +'HOUR_MICROSECOND' +'HOUR_SECOND' +'HOUR_MINUTE' +'DAY_MICROSECOND' +'DAY_SECOND' +'DAY_MINUTE' +'DAY_HOUR' +'YEAR_MONTH' +'TABLES' +'ABS' +'ACOS' +'ADD' +'ADDTIME' +'ASCII' +'ASIN' +'ATAN' +'ATAN2' +'CBRT' +'CEIL' +'CEILING' +'CONCAT' +'CONCAT_WS' +'CONV' +'CONVERT_TZ' +'COS' +'COSH' +'COT' +'CRC32' +'CURDATE' +'CURTIME' +'CURRENT_DATE' +'CURRENT_TIME' +'CURRENT_TIMESTAMP' +'DATE' +'DATE_ADD' +'DATE_FORMAT' +'DATE_SUB' +'DATEDIFF' +'DAYNAME' +'DAYOFMONTH' +'DAYOFWEEK' +'DAYOFYEAR' +'DEGREES' +'DIVIDE' +'E' +'EXP' +'EXPM1' +'EXTRACT' +'FLOOR' +'FROM_DAYS' +'FROM_UNIXTIME' +'GET_FORMAT' +'IF' +'IFNULL' +'ISNULL' +'LAST_DAY' +'LENGTH' +'LN' +'LOCALTIME' +'LOCALTIMESTAMP' +'LOCATE' +'LOG' +'LOG10' +'LOG2' +'LOWER' +'LTRIM' +'MAKEDATE' +'MAKETIME' +'MODULUS' +'MONTHNAME' +'MULTIPLY' +'NOW' +'NULLIF' +'PERIOD_ADD' +'PERIOD_DIFF' +'PI' +'POSITION' +'POW' +'POWER' +'RADIANS' +'RAND' +'REPLACE' +'RINT' +'ROUND' +'RTRIM' +'REVERSE' +'SEC_TO_TIME' +'SIGN' +'SIGNUM' +'SIN' +'SINH' +'SQRT' +'STR_TO_DATE' +'SUBDATE' +'SUBTIME' +'SUBTRACT' +'SYSDATE' +'TAN' +'TIME' +'TIMEDIFF' +'TIME_FORMAT' +'TIME_TO_SEC' +'TIMESTAMP' +'TRUNCATE' +'TO_DAYS' +'TO_SECONDS' +'UNIX_TIMESTAMP' +'UPPER' +'UTC_DATE' +'UTC_TIME' +'UTC_TIMESTAMP' +'D' +'T' +'TS' +'{' +'}' +'DENSE_RANK' +'RANK' +'ROW_NUMBER' +'DATE_HISTOGRAM' +'DAY_OF_MONTH' +'DAY_OF_YEAR' +'DAY_OF_WEEK' +'EXCLUDE' +'EXTENDED_STATS' +'FIELD' +'FILTER' +'GEO_BOUNDING_BOX' +'GEO_CELL' +'GEO_DISTANCE' +'GEO_DISTANCE_RANGE' +'GEO_INTERSECTS' +'GEO_POLYGON' +'HISTOGRAM' +'HOUR_OF_DAY' +'INCLUDE' +'IN_TERMS' +'MATCHPHRASE' +'MATCH_PHRASE' +'MATCHPHRASEQUERY' +'SIMPLE_QUERY_STRING' +'QUERY_STRING' +'MATCH_PHRASE_PREFIX' +'MATCHQUERY' +'MATCH_QUERY' +'MINUTE_OF_DAY' +'MINUTE_OF_HOUR' +'MONTH_OF_YEAR' +'MULTIMATCH' +'MULTI_MATCH' +'MULTIMATCHQUERY' +'NESTED' +'PERCENTILES' +'PERCENTILE' +'PERCENTILE_APPROX' +'REGEXP_QUERY' +'REVERSE_NESTED' +'QUERY' +'RANGE' +'SCORE' +'SCOREQUERY' +'SCORE_QUERY' +'SECOND_OF_MINUTE' +'STATS' +'TERM' +'TERMS' +'TIMESTAMPADD' +'TIMESTAMPDIFF' +'TOPHITS' +'TYPEOF' +'WEEK_OF_YEAR' +'WEEKOFYEAR' +'WEEKDAY' +'WILDCARDQUERY' +'WILDCARD_QUERY' +'SUBSTR' +'STRCMP' +'ADDDATE' +'YEARWEEK' +'ALLOW_LEADING_WILDCARD' +'ANALYZER' +'ANALYZE_WILDCARD' +'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY' +'BOOST' +'CASE_INSENSITIVE' +'CUTOFF_FREQUENCY' +'DEFAULT_FIELD' +'DEFAULT_OPERATOR' +'ESCAPE' +'ENABLE_POSITION_INCREMENTS' +'FIELDS' +'FLAGS' +'FUZZINESS' +'FUZZY_MAX_EXPANSIONS' +'FUZZY_PREFIX_LENGTH' +'FUZZY_REWRITE' +'FUZZY_TRANSPOSITIONS' +'LENIENT' +'LOW_FREQ_OPERATOR' +'MAX_DETERMINIZED_STATES' +'MAX_EXPANSIONS' +'MINIMUM_SHOULD_MATCH' +'OPERATOR' +'PHRASE_SLOP' +'PREFIX_LENGTH' +'QUOTE_ANALYZER' +'QUOTE_FIELD_SUFFIX' +'REWRITE' +'SLOP' +'TIE_BREAKER' +'TIME_ZONE' +'TYPE' +'ZERO_TERMS_QUERY' +'HIGHLIGHT' +'PRE_TAGS' +'POST_TAGS' +'MATCH_BOOL_PREFIX' +'*' +'/' +'%' +'+' +'-' +'DIV' +'MOD' +'=' +'>' +'<' +'!' +'~' +'|' +'&' +'^' +'.' +'(' +')' +'[' +']' +',' +';' +'@' +'0' +'1' +'2' +'\'' +'"' +'`' +':' +null +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +SPACE +SPEC_SQL_COMMENT +COMMENT_INPUT +LINE_COMMENT +ALL +AND +AS +ASC +BOOLEAN +BETWEEN +BY +CASE +CAST +CROSS +COLUMNS +DATETIME +DELETE +DESC +DESCRIBE +DISTINCT +DOUBLE +ELSE +EXISTS +FALSE +FLOAT +FIRST +FROM +GROUP +HAVING +IN +INNER +INT +INTEGER +IS +JOIN +LAST +LEFT +LIKE +LIMIT +LONG +MATCH +NATURAL +MISSING_LITERAL +NOT +NULL_LITERAL +NULLS +ON +OR +ORDER +OUTER +OVER +PARTITION +REGEXP +RIGHT +SELECT +SHOW +STRING +THEN +TRUE +UNION +USING +WHEN +WHERE +EXCEPT +AVG +COUNT +MAX +MIN +SUM +VAR_POP +VAR_SAMP +VARIANCE +STD +STDDEV +STDDEV_POP +STDDEV_SAMP +SUBSTRING +TRIM +END +FULL +OFFSET +INTERVAL +MICROSECOND +SECOND +MINUTE +HOUR +DAY +WEEK +MONTH +QUARTER +YEAR +SECOND_MICROSECOND +MINUTE_MICROSECOND +MINUTE_SECOND +HOUR_MICROSECOND +HOUR_SECOND +HOUR_MINUTE +DAY_MICROSECOND +DAY_SECOND +DAY_MINUTE +DAY_HOUR +YEAR_MONTH +TABLES +ABS +ACOS +ADD +ADDTIME +ASCII +ASIN +ATAN +ATAN2 +CBRT +CEIL +CEILING +CONCAT +CONCAT_WS +CONV +CONVERT_TZ +COS +COSH +COT +CRC32 +CURDATE +CURTIME +CURRENT_DATE +CURRENT_TIME +CURRENT_TIMESTAMP +DATE +DATE_ADD +DATE_FORMAT +DATE_SUB +DATEDIFF +DAYNAME +DAYOFMONTH +DAYOFWEEK +DAYOFYEAR +DEGREES +DIVIDE +E +EXP +EXPM1 +EXTRACT +FLOOR +FROM_DAYS +FROM_UNIXTIME +GET_FORMAT +IF +IFNULL +ISNULL +LAST_DAY +LENGTH +LN +LOCALTIME +LOCALTIMESTAMP +LOCATE +LOG +LOG10 +LOG2 +LOWER +LTRIM +MAKEDATE +MAKETIME +MODULUS +MONTHNAME +MULTIPLY +NOW +NULLIF +PERIOD_ADD +PERIOD_DIFF +PI +POSITION +POW +POWER +RADIANS +RAND +REPLACE +RINT +ROUND +RTRIM +REVERSE +SEC_TO_TIME +SIGN +SIGNUM +SIN +SINH +SQRT +STR_TO_DATE +SUBDATE +SUBTIME +SUBTRACT +SYSDATE +TAN +TIME +TIMEDIFF +TIME_FORMAT +TIME_TO_SEC +TIMESTAMP +TRUNCATE +TO_DAYS +TO_SECONDS +UNIX_TIMESTAMP +UPPER +UTC_DATE +UTC_TIME +UTC_TIMESTAMP +D +T +TS +LEFT_BRACE +RIGHT_BRACE +DENSE_RANK +RANK +ROW_NUMBER +DATE_HISTOGRAM +DAY_OF_MONTH +DAY_OF_YEAR +DAY_OF_WEEK +EXCLUDE +EXTENDED_STATS +FIELD +FILTER +GEO_BOUNDING_BOX +GEO_CELL +GEO_DISTANCE +GEO_DISTANCE_RANGE +GEO_INTERSECTS +GEO_POLYGON +HISTOGRAM +HOUR_OF_DAY +INCLUDE +IN_TERMS +MATCHPHRASE +MATCH_PHRASE +MATCHPHRASEQUERY +SIMPLE_QUERY_STRING +QUERY_STRING +MATCH_PHRASE_PREFIX +MATCHQUERY +MATCH_QUERY +MINUTE_OF_DAY +MINUTE_OF_HOUR +MONTH_OF_YEAR +MULTIMATCH +MULTI_MATCH +MULTIMATCHQUERY +NESTED +PERCENTILES +PERCENTILE +PERCENTILE_APPROX +REGEXP_QUERY +REVERSE_NESTED +QUERY +RANGE +SCORE +SCOREQUERY +SCORE_QUERY +SECOND_OF_MINUTE +STATS +TERM +TERMS +TIMESTAMPADD +TIMESTAMPDIFF +TOPHITS +TYPEOF +WEEK_OF_YEAR +WEEKOFYEAR +WEEKDAY +WILDCARDQUERY +WILDCARD_QUERY +SUBSTR +STRCMP +ADDDATE +YEARWEEK +ALLOW_LEADING_WILDCARD +ANALYZER +ANALYZE_WILDCARD +AUTO_GENERATE_SYNONYMS_PHRASE_QUERY +BOOST +CASE_INSENSITIVE +CUTOFF_FREQUENCY +DEFAULT_FIELD +DEFAULT_OPERATOR +ESCAPE +ENABLE_POSITION_INCREMENTS +FIELDS +FLAGS +FUZZINESS +FUZZY_MAX_EXPANSIONS +FUZZY_PREFIX_LENGTH +FUZZY_REWRITE +FUZZY_TRANSPOSITIONS +LENIENT +LOW_FREQ_OPERATOR +MAX_DETERMINIZED_STATES +MAX_EXPANSIONS +MINIMUM_SHOULD_MATCH +OPERATOR +PHRASE_SLOP +PREFIX_LENGTH +QUOTE_ANALYZER +QUOTE_FIELD_SUFFIX +REWRITE +SLOP +TIE_BREAKER +TIME_ZONE +TYPE +ZERO_TERMS_QUERY +HIGHLIGHT +HIGHLIGHT_PRE_TAGS +HIGHLIGHT_POST_TAGS +MATCH_BOOL_PREFIX +STAR +SLASH +MODULE +PLUS +MINUS +DIV +MOD +EQUAL_SYMBOL +GREATER_SYMBOL +LESS_SYMBOL +EXCLAMATION_SYMBOL +BIT_NOT_OP +BIT_OR_OP +BIT_AND_OP +BIT_XOR_OP +DOT +LR_BRACKET +RR_BRACKET +LT_SQR_PRTHS +RT_SQR_PRTHS +COMMA +SEMI +AT_SIGN +ZERO_DECIMAL +ONE_DECIMAL +TWO_DECIMAL +SINGLE_QUOTE_SYMB +DOUBLE_QUOTE_SYMB +REVERSE_QUOTE_SYMB +COLON_SYMB +START_NATIONAL_STRING_LITERAL +STRING_LITERAL +DECIMAL_LITERAL +HEXADECIMAL_LITERAL +REAL_LITERAL +NULL_SPEC_LITERAL +BIT_STRING +ID +DOUBLE_QUOTE_ID +BACKTICK_QUOTE_ID +ERROR_RECOGNITION + +rule names: +SPACE +SPEC_SQL_COMMENT +COMMENT_INPUT +LINE_COMMENT +ALL +AND +AS +ASC +BOOLEAN +BETWEEN +BY +CASE +CAST +CROSS +COLUMNS +DATETIME +DELETE +DESC +DESCRIBE +DISTINCT +DOUBLE +ELSE +EXISTS +FALSE +FLOAT +FIRST +FROM +GROUP +HAVING +IN +INNER +INT +INTEGER +IS +JOIN +LAST +LEFT +LIKE +LIMIT +LONG +MATCH +NATURAL +MISSING_LITERAL +NOT +NULL_LITERAL +NULLS +ON +OR +ORDER +OUTER +OVER +PARTITION +REGEXP +RIGHT +SELECT +SHOW +STRING +THEN +TRUE +UNION +USING +WHEN +WHERE +EXCEPT +AVG +COUNT +MAX +MIN +SUM +VAR_POP +VAR_SAMP +VARIANCE +STD +STDDEV +STDDEV_POP +STDDEV_SAMP +SUBSTRING +TRIM +END +FULL +OFFSET +INTERVAL +MICROSECOND +SECOND +MINUTE +HOUR +DAY +WEEK +MONTH +QUARTER +YEAR +SECOND_MICROSECOND +MINUTE_MICROSECOND +MINUTE_SECOND +HOUR_MICROSECOND +HOUR_SECOND +HOUR_MINUTE +DAY_MICROSECOND +DAY_SECOND +DAY_MINUTE +DAY_HOUR +YEAR_MONTH +TABLES +ABS +ACOS +ADD +ADDTIME +ASCII +ASIN +ATAN +ATAN2 +CBRT +CEIL +CEILING +CONCAT +CONCAT_WS +CONV +CONVERT_TZ +COS +COSH +COT +CRC32 +CURDATE +CURTIME +CURRENT_DATE +CURRENT_TIME +CURRENT_TIMESTAMP +DATE +DATE_ADD +DATE_FORMAT +DATE_SUB +DATEDIFF +DAYNAME +DAYOFMONTH +DAYOFWEEK +DAYOFYEAR +DEGREES +DIVIDE +E +EXP +EXPM1 +EXTRACT +FLOOR +FROM_DAYS +FROM_UNIXTIME +GET_FORMAT +IF +IFNULL +ISNULL +LAST_DAY +LENGTH +LN +LOCALTIME +LOCALTIMESTAMP +LOCATE +LOG +LOG10 +LOG2 +LOWER +LTRIM +MAKEDATE +MAKETIME +MODULUS +MONTHNAME +MULTIPLY +NOW +NULLIF +PERIOD_ADD +PERIOD_DIFF +PI +POSITION +POW +POWER +RADIANS +RAND +REPLACE +RINT +ROUND +RTRIM +REVERSE +SEC_TO_TIME +SIGN +SIGNUM +SIN +SINH +SQRT +STR_TO_DATE +SUBDATE +SUBTIME +SUBTRACT +SYSDATE +TAN +TIME +TIMEDIFF +TIME_FORMAT +TIME_TO_SEC +TIMESTAMP +TRUNCATE +TO_DAYS +TO_SECONDS +UNIX_TIMESTAMP +UPPER +UTC_DATE +UTC_TIME +UTC_TIMESTAMP +D +T +TS +LEFT_BRACE +RIGHT_BRACE +DENSE_RANK +RANK +ROW_NUMBER +DATE_HISTOGRAM +DAY_OF_MONTH +DAY_OF_YEAR +DAY_OF_WEEK +EXCLUDE +EXTENDED_STATS +FIELD +FILTER +GEO_BOUNDING_BOX +GEO_CELL +GEO_DISTANCE +GEO_DISTANCE_RANGE +GEO_INTERSECTS +GEO_POLYGON +HISTOGRAM +HOUR_OF_DAY +INCLUDE +IN_TERMS +MATCHPHRASE +MATCH_PHRASE +MATCHPHRASEQUERY +SIMPLE_QUERY_STRING +QUERY_STRING +MATCH_PHRASE_PREFIX +MATCHQUERY +MATCH_QUERY +MINUTE_OF_DAY +MINUTE_OF_HOUR +MONTH_OF_YEAR +MULTIMATCH +MULTI_MATCH +MULTIMATCHQUERY +NESTED +PERCENTILES +PERCENTILE +PERCENTILE_APPROX +REGEXP_QUERY +REVERSE_NESTED +QUERY +RANGE +SCORE +SCOREQUERY +SCORE_QUERY +SECOND_OF_MINUTE +STATS +TERM +TERMS +TIMESTAMPADD +TIMESTAMPDIFF +TOPHITS +TYPEOF +WEEK_OF_YEAR +WEEKOFYEAR +WEEKDAY +WILDCARDQUERY +WILDCARD_QUERY +SUBSTR +STRCMP +ADDDATE +YEARWEEK +ALLOW_LEADING_WILDCARD +ANALYZER +ANALYZE_WILDCARD +AUTO_GENERATE_SYNONYMS_PHRASE_QUERY +BOOST +CASE_INSENSITIVE +CUTOFF_FREQUENCY +DEFAULT_FIELD +DEFAULT_OPERATOR +ESCAPE +ENABLE_POSITION_INCREMENTS +FIELDS +FLAGS +FUZZINESS +FUZZY_MAX_EXPANSIONS +FUZZY_PREFIX_LENGTH +FUZZY_REWRITE +FUZZY_TRANSPOSITIONS +LENIENT +LOW_FREQ_OPERATOR +MAX_DETERMINIZED_STATES +MAX_EXPANSIONS +MINIMUM_SHOULD_MATCH +OPERATOR +PHRASE_SLOP +PREFIX_LENGTH +QUOTE_ANALYZER +QUOTE_FIELD_SUFFIX +REWRITE +SLOP +TIE_BREAKER +TIME_ZONE +TYPE +ZERO_TERMS_QUERY +HIGHLIGHT +HIGHLIGHT_PRE_TAGS +HIGHLIGHT_POST_TAGS +MATCH_BOOL_PREFIX +STAR +SLASH +MODULE +PLUS +MINUS +DIV +MOD +EQUAL_SYMBOL +GREATER_SYMBOL +LESS_SYMBOL +EXCLAMATION_SYMBOL +BIT_NOT_OP +BIT_OR_OP +BIT_AND_OP +BIT_XOR_OP +DOT +LR_BRACKET +RR_BRACKET +LT_SQR_PRTHS +RT_SQR_PRTHS +COMMA +SEMI +AT_SIGN +ZERO_DECIMAL +ONE_DECIMAL +TWO_DECIMAL +SINGLE_QUOTE_SYMB +DOUBLE_QUOTE_SYMB +REVERSE_QUOTE_SYMB +COLON_SYMB +START_NATIONAL_STRING_LITERAL +STRING_LITERAL +DECIMAL_LITERAL +HEXADECIMAL_LITERAL +REAL_LITERAL +NULL_SPEC_LITERAL +BIT_STRING +ID +DOUBLE_QUOTE_ID +BACKTICK_QUOTE_ID +EXPONENT_NUM_PART +ID_LITERAL +DQUOTA_STRING +SQUOTA_STRING +BQUOTA_STRING +HEX_DIGIT +DEC_DIGIT +BIT_STRING_L +ERROR_RECOGNITION + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN +null +null +SQLCOMMENT +ERRORCHANNEL + +mode names: +DEFAULT_MODE + +atn: +[4, 0, 352, 3776, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, 234, 7, 234, 2, 235, 7, 235, 2, 236, 7, 236, 2, 237, 7, 237, 2, 238, 7, 238, 2, 239, 7, 239, 2, 240, 7, 240, 2, 241, 7, 241, 2, 242, 7, 242, 2, 243, 7, 243, 2, 244, 7, 244, 2, 245, 7, 245, 2, 246, 7, 246, 2, 247, 7, 247, 2, 248, 7, 248, 2, 249, 7, 249, 2, 250, 7, 250, 2, 251, 7, 251, 2, 252, 7, 252, 2, 253, 7, 253, 2, 254, 7, 254, 2, 255, 7, 255, 2, 256, 7, 256, 2, 257, 7, 257, 2, 258, 7, 258, 2, 259, 7, 259, 2, 260, 7, 260, 2, 261, 7, 261, 2, 262, 7, 262, 2, 263, 7, 263, 2, 264, 7, 264, 2, 265, 7, 265, 2, 266, 7, 266, 2, 267, 7, 267, 2, 268, 7, 268, 2, 269, 7, 269, 2, 270, 7, 270, 2, 271, 7, 271, 2, 272, 7, 272, 2, 273, 7, 273, 2, 274, 7, 274, 2, 275, 7, 275, 2, 276, 7, 276, 2, 277, 7, 277, 2, 278, 7, 278, 2, 279, 7, 279, 2, 280, 7, 280, 2, 281, 7, 281, 2, 282, 7, 282, 2, 283, 7, 283, 2, 284, 7, 284, 2, 285, 7, 285, 2, 286, 7, 286, 2, 287, 7, 287, 2, 288, 7, 288, 2, 289, 7, 289, 2, 290, 7, 290, 2, 291, 7, 291, 2, 292, 7, 292, 2, 293, 7, 293, 2, 294, 7, 294, 2, 295, 7, 295, 2, 296, 7, 296, 2, 297, 7, 297, 2, 298, 7, 298, 2, 299, 7, 299, 2, 300, 7, 300, 2, 301, 7, 301, 2, 302, 7, 302, 2, 303, 7, 303, 2, 304, 7, 304, 2, 305, 7, 305, 2, 306, 7, 306, 2, 307, 7, 307, 2, 308, 7, 308, 2, 309, 7, 309, 2, 310, 7, 310, 2, 311, 7, 311, 2, 312, 7, 312, 2, 313, 7, 313, 2, 314, 7, 314, 2, 315, 7, 315, 2, 316, 7, 316, 2, 317, 7, 317, 2, 318, 7, 318, 2, 319, 7, 319, 2, 320, 7, 320, 2, 321, 7, 321, 2, 322, 7, 322, 2, 323, 7, 323, 2, 324, 7, 324, 2, 325, 7, 325, 2, 326, 7, 326, 2, 327, 7, 327, 2, 328, 7, 328, 2, 329, 7, 329, 2, 330, 7, 330, 2, 331, 7, 331, 2, 332, 7, 332, 2, 333, 7, 333, 2, 334, 7, 334, 2, 335, 7, 335, 2, 336, 7, 336, 2, 337, 7, 337, 2, 338, 7, 338, 2, 339, 7, 339, 2, 340, 7, 340, 2, 341, 7, 341, 2, 342, 7, 342, 2, 343, 7, 343, 2, 344, 7, 344, 2, 345, 7, 345, 2, 346, 7, 346, 2, 347, 7, 347, 2, 348, 7, 348, 2, 349, 7, 349, 2, 350, 7, 350, 2, 351, 7, 351, 2, 352, 7, 352, 2, 353, 7, 353, 2, 354, 7, 354, 2, 355, 7, 355, 2, 356, 7, 356, 2, 357, 7, 357, 2, 358, 7, 358, 2, 359, 7, 359, 1, 0, 4, 0, 723, 8, 0, 11, 0, 12, 0, 724, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 734, 8, 1, 11, 1, 12, 1, 735, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 747, 8, 2, 10, 2, 12, 2, 750, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 761, 8, 3, 1, 3, 5, 3, 764, 8, 3, 10, 3, 12, 3, 767, 9, 3, 1, 3, 3, 3, 770, 8, 3, 1, 3, 1, 3, 3, 3, 774, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 780, 8, 3, 1, 3, 1, 3, 3, 3, 784, 8, 3, 3, 3, 786, 8, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 183, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 205, 1, 205, 1, 206, 1, 206, 1, 207, 1, 207, 1, 207, 1, 208, 1, 208, 1, 209, 1, 209, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 311, 1, 311, 1, 312, 1, 312, 1, 313, 1, 313, 1, 314, 1, 314, 1, 315, 1, 315, 1, 316, 1, 316, 1, 316, 1, 316, 1, 317, 1, 317, 1, 317, 1, 317, 1, 318, 1, 318, 1, 319, 1, 319, 1, 320, 1, 320, 1, 321, 1, 321, 1, 322, 1, 322, 1, 323, 1, 323, 1, 324, 1, 324, 1, 325, 1, 325, 1, 326, 1, 326, 1, 327, 1, 327, 1, 328, 1, 328, 1, 329, 1, 329, 1, 330, 1, 330, 1, 331, 1, 331, 1, 332, 1, 332, 1, 333, 1, 333, 1, 334, 1, 334, 1, 335, 1, 335, 1, 336, 1, 336, 1, 337, 1, 337, 1, 338, 1, 338, 1, 339, 1, 339, 1, 340, 1, 340, 1, 341, 1, 341, 1, 341, 1, 342, 1, 342, 1, 343, 4, 343, 3620, 8, 343, 11, 343, 12, 343, 3621, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 4, 344, 3629, 8, 344, 11, 344, 12, 344, 3630, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 4, 344, 3639, 8, 344, 11, 344, 12, 344, 3640, 3, 344, 3643, 8, 344, 1, 345, 4, 345, 3646, 8, 345, 11, 345, 12, 345, 3647, 3, 345, 3650, 8, 345, 1, 345, 1, 345, 4, 345, 3654, 8, 345, 11, 345, 12, 345, 3655, 1, 345, 4, 345, 3659, 8, 345, 11, 345, 12, 345, 3660, 1, 345, 1, 345, 1, 345, 1, 345, 4, 345, 3667, 8, 345, 11, 345, 12, 345, 3668, 3, 345, 3671, 8, 345, 1, 345, 1, 345, 4, 345, 3675, 8, 345, 11, 345, 12, 345, 3676, 1, 345, 1, 345, 1, 345, 4, 345, 3682, 8, 345, 11, 345, 12, 345, 3683, 1, 345, 1, 345, 3, 345, 3688, 8, 345, 1, 346, 1, 346, 1, 346, 1, 347, 1, 347, 1, 348, 1, 348, 1, 349, 1, 349, 1, 350, 1, 350, 1, 351, 1, 351, 3, 351, 3703, 8, 351, 1, 351, 4, 351, 3706, 8, 351, 11, 351, 12, 351, 3707, 1, 352, 4, 352, 3711, 8, 352, 11, 352, 12, 352, 3712, 1, 352, 5, 352, 3716, 8, 352, 10, 352, 12, 352, 3719, 9, 352, 1, 353, 1, 353, 1, 353, 1, 353, 1, 353, 1, 353, 5, 353, 3727, 8, 353, 10, 353, 12, 353, 3730, 9, 353, 1, 353, 1, 353, 1, 354, 1, 354, 1, 354, 1, 354, 1, 354, 1, 354, 5, 354, 3740, 8, 354, 10, 354, 12, 354, 3743, 9, 354, 1, 354, 1, 354, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 5, 355, 3753, 8, 355, 10, 355, 12, 355, 3756, 9, 355, 1, 355, 1, 355, 1, 356, 1, 356, 1, 357, 1, 357, 1, 358, 1, 358, 1, 358, 4, 358, 3767, 8, 358, 11, 358, 12, 358, 3768, 1, 358, 1, 358, 1, 359, 1, 359, 1, 359, 1, 359, 2, 735, 748, 0, 360, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 113, 227, 114, 229, 115, 231, 116, 233, 117, 235, 118, 237, 119, 239, 120, 241, 121, 243, 122, 245, 123, 247, 124, 249, 125, 251, 126, 253, 127, 255, 128, 257, 129, 259, 130, 261, 131, 263, 132, 265, 133, 267, 134, 269, 135, 271, 136, 273, 137, 275, 138, 277, 139, 279, 140, 281, 141, 283, 142, 285, 143, 287, 144, 289, 145, 291, 146, 293, 147, 295, 148, 297, 149, 299, 150, 301, 151, 303, 152, 305, 153, 307, 154, 309, 155, 311, 156, 313, 157, 315, 158, 317, 159, 319, 160, 321, 161, 323, 162, 325, 163, 327, 164, 329, 165, 331, 166, 333, 167, 335, 168, 337, 169, 339, 170, 341, 171, 343, 172, 345, 173, 347, 174, 349, 175, 351, 176, 353, 177, 355, 178, 357, 179, 359, 180, 361, 181, 363, 182, 365, 183, 367, 184, 369, 185, 371, 186, 373, 187, 375, 188, 377, 189, 379, 190, 381, 191, 383, 192, 385, 193, 387, 194, 389, 195, 391, 196, 393, 197, 395, 198, 397, 199, 399, 200, 401, 201, 403, 202, 405, 203, 407, 204, 409, 205, 411, 206, 413, 207, 415, 208, 417, 209, 419, 210, 421, 211, 423, 212, 425, 213, 427, 214, 429, 215, 431, 216, 433, 217, 435, 218, 437, 219, 439, 220, 441, 221, 443, 222, 445, 223, 447, 224, 449, 225, 451, 226, 453, 227, 455, 228, 457, 229, 459, 230, 461, 231, 463, 232, 465, 233, 467, 234, 469, 235, 471, 236, 473, 237, 475, 238, 477, 239, 479, 240, 481, 241, 483, 242, 485, 243, 487, 244, 489, 245, 491, 246, 493, 247, 495, 248, 497, 249, 499, 250, 501, 251, 503, 252, 505, 253, 507, 254, 509, 255, 511, 256, 513, 257, 515, 258, 517, 259, 519, 260, 521, 261, 523, 262, 525, 263, 527, 264, 529, 265, 531, 266, 533, 267, 535, 268, 537, 269, 539, 270, 541, 271, 543, 272, 545, 273, 547, 274, 549, 275, 551, 276, 553, 277, 555, 278, 557, 279, 559, 280, 561, 281, 563, 282, 565, 283, 567, 284, 569, 285, 571, 286, 573, 287, 575, 288, 577, 289, 579, 290, 581, 291, 583, 292, 585, 293, 587, 294, 589, 295, 591, 296, 593, 297, 595, 298, 597, 299, 599, 300, 601, 301, 603, 302, 605, 303, 607, 304, 609, 305, 611, 306, 613, 307, 615, 308, 617, 309, 619, 310, 621, 311, 623, 312, 625, 313, 627, 314, 629, 315, 631, 316, 633, 317, 635, 318, 637, 319, 639, 320, 641, 321, 643, 322, 645, 323, 647, 324, 649, 325, 651, 326, 653, 327, 655, 328, 657, 329, 659, 330, 661, 331, 663, 332, 665, 333, 667, 334, 669, 335, 671, 336, 673, 337, 675, 338, 677, 339, 679, 340, 681, 341, 683, 342, 685, 343, 687, 344, 689, 345, 691, 346, 693, 347, 695, 348, 697, 349, 699, 350, 701, 351, 703, 0, 705, 0, 707, 0, 709, 0, 711, 0, 713, 0, 715, 0, 717, 0, 719, 352, 1, 0, 37, 3, 0, 9, 10, 13, 13, 32, 32, 2, 0, 10, 10, 13, 13, 2, 0, 65, 65, 97, 97, 2, 0, 76, 76, 108, 108, 2, 0, 78, 78, 110, 110, 2, 0, 68, 68, 100, 100, 2, 0, 83, 83, 115, 115, 2, 0, 67, 67, 99, 99, 2, 0, 66, 66, 98, 98, 2, 0, 79, 79, 111, 111, 2, 0, 69, 69, 101, 101, 2, 0, 84, 84, 116, 116, 2, 0, 87, 87, 119, 119, 2, 0, 89, 89, 121, 121, 2, 0, 82, 82, 114, 114, 2, 0, 85, 85, 117, 117, 2, 0, 77, 77, 109, 109, 2, 0, 73, 73, 105, 105, 2, 0, 88, 88, 120, 120, 2, 0, 70, 70, 102, 102, 2, 0, 71, 71, 103, 103, 2, 0, 80, 80, 112, 112, 2, 0, 72, 72, 104, 104, 2, 0, 86, 86, 118, 118, 2, 0, 74, 74, 106, 106, 2, 0, 75, 75, 107, 107, 2, 0, 81, 81, 113, 113, 2, 0, 90, 90, 122, 122, 2, 0, 43, 43, 45, 45, 4, 0, 42, 42, 64, 90, 95, 95, 97, 122, 6, 0, 42, 42, 45, 45, 48, 57, 65, 90, 95, 95, 97, 122, 2, 0, 34, 34, 92, 92, 2, 0, 39, 39, 92, 92, 2, 0, 92, 92, 96, 96, 3, 0, 48, 57, 65, 70, 97, 102, 1, 0, 48, 57, 1, 0, 48, 49, 3806, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 0, 267, 1, 0, 0, 0, 0, 269, 1, 0, 0, 0, 0, 271, 1, 0, 0, 0, 0, 273, 1, 0, 0, 0, 0, 275, 1, 0, 0, 0, 0, 277, 1, 0, 0, 0, 0, 279, 1, 0, 0, 0, 0, 281, 1, 0, 0, 0, 0, 283, 1, 0, 0, 0, 0, 285, 1, 0, 0, 0, 0, 287, 1, 0, 0, 0, 0, 289, 1, 0, 0, 0, 0, 291, 1, 0, 0, 0, 0, 293, 1, 0, 0, 0, 0, 295, 1, 0, 0, 0, 0, 297, 1, 0, 0, 0, 0, 299, 1, 0, 0, 0, 0, 301, 1, 0, 0, 0, 0, 303, 1, 0, 0, 0, 0, 305, 1, 0, 0, 0, 0, 307, 1, 0, 0, 0, 0, 309, 1, 0, 0, 0, 0, 311, 1, 0, 0, 0, 0, 313, 1, 0, 0, 0, 0, 315, 1, 0, 0, 0, 0, 317, 1, 0, 0, 0, 0, 319, 1, 0, 0, 0, 0, 321, 1, 0, 0, 0, 0, 323, 1, 0, 0, 0, 0, 325, 1, 0, 0, 0, 0, 327, 1, 0, 0, 0, 0, 329, 1, 0, 0, 0, 0, 331, 1, 0, 0, 0, 0, 333, 1, 0, 0, 0, 0, 335, 1, 0, 0, 0, 0, 337, 1, 0, 0, 0, 0, 339, 1, 0, 0, 0, 0, 341, 1, 0, 0, 0, 0, 343, 1, 0, 0, 0, 0, 345, 1, 0, 0, 0, 0, 347, 1, 0, 0, 0, 0, 349, 1, 0, 0, 0, 0, 351, 1, 0, 0, 0, 0, 353, 1, 0, 0, 0, 0, 355, 1, 0, 0, 0, 0, 357, 1, 0, 0, 0, 0, 359, 1, 0, 0, 0, 0, 361, 1, 0, 0, 0, 0, 363, 1, 0, 0, 0, 0, 365, 1, 0, 0, 0, 0, 367, 1, 0, 0, 0, 0, 369, 1, 0, 0, 0, 0, 371, 1, 0, 0, 0, 0, 373, 1, 0, 0, 0, 0, 375, 1, 0, 0, 0, 0, 377, 1, 0, 0, 0, 0, 379, 1, 0, 0, 0, 0, 381, 1, 0, 0, 0, 0, 383, 1, 0, 0, 0, 0, 385, 1, 0, 0, 0, 0, 387, 1, 0, 0, 0, 0, 389, 1, 0, 0, 0, 0, 391, 1, 0, 0, 0, 0, 393, 1, 0, 0, 0, 0, 395, 1, 0, 0, 0, 0, 397, 1, 0, 0, 0, 0, 399, 1, 0, 0, 0, 0, 401, 1, 0, 0, 0, 0, 403, 1, 0, 0, 0, 0, 405, 1, 0, 0, 0, 0, 407, 1, 0, 0, 0, 0, 409, 1, 0, 0, 0, 0, 411, 1, 0, 0, 0, 0, 413, 1, 0, 0, 0, 0, 415, 1, 0, 0, 0, 0, 417, 1, 0, 0, 0, 0, 419, 1, 0, 0, 0, 0, 421, 1, 0, 0, 0, 0, 423, 1, 0, 0, 0, 0, 425, 1, 0, 0, 0, 0, 427, 1, 0, 0, 0, 0, 429, 1, 0, 0, 0, 0, 431, 1, 0, 0, 0, 0, 433, 1, 0, 0, 0, 0, 435, 1, 0, 0, 0, 0, 437, 1, 0, 0, 0, 0, 439, 1, 0, 0, 0, 0, 441, 1, 0, 0, 0, 0, 443, 1, 0, 0, 0, 0, 445, 1, 0, 0, 0, 0, 447, 1, 0, 0, 0, 0, 449, 1, 0, 0, 0, 0, 451, 1, 0, 0, 0, 0, 453, 1, 0, 0, 0, 0, 455, 1, 0, 0, 0, 0, 457, 1, 0, 0, 0, 0, 459, 1, 0, 0, 0, 0, 461, 1, 0, 0, 0, 0, 463, 1, 0, 0, 0, 0, 465, 1, 0, 0, 0, 0, 467, 1, 0, 0, 0, 0, 469, 1, 0, 0, 0, 0, 471, 1, 0, 0, 0, 0, 473, 1, 0, 0, 0, 0, 475, 1, 0, 0, 0, 0, 477, 1, 0, 0, 0, 0, 479, 1, 0, 0, 0, 0, 481, 1, 0, 0, 0, 0, 483, 1, 0, 0, 0, 0, 485, 1, 0, 0, 0, 0, 487, 1, 0, 0, 0, 0, 489, 1, 0, 0, 0, 0, 491, 1, 0, 0, 0, 0, 493, 1, 0, 0, 0, 0, 495, 1, 0, 0, 0, 0, 497, 1, 0, 0, 0, 0, 499, 1, 0, 0, 0, 0, 501, 1, 0, 0, 0, 0, 503, 1, 0, 0, 0, 0, 505, 1, 0, 0, 0, 0, 507, 1, 0, 0, 0, 0, 509, 1, 0, 0, 0, 0, 511, 1, 0, 0, 0, 0, 513, 1, 0, 0, 0, 0, 515, 1, 0, 0, 0, 0, 517, 1, 0, 0, 0, 0, 519, 1, 0, 0, 0, 0, 521, 1, 0, 0, 0, 0, 523, 1, 0, 0, 0, 0, 525, 1, 0, 0, 0, 0, 527, 1, 0, 0, 0, 0, 529, 1, 0, 0, 0, 0, 531, 1, 0, 0, 0, 0, 533, 1, 0, 0, 0, 0, 535, 1, 0, 0, 0, 0, 537, 1, 0, 0, 0, 0, 539, 1, 0, 0, 0, 0, 541, 1, 0, 0, 0, 0, 543, 1, 0, 0, 0, 0, 545, 1, 0, 0, 0, 0, 547, 1, 0, 0, 0, 0, 549, 1, 0, 0, 0, 0, 551, 1, 0, 0, 0, 0, 553, 1, 0, 0, 0, 0, 555, 1, 0, 0, 0, 0, 557, 1, 0, 0, 0, 0, 559, 1, 0, 0, 0, 0, 561, 1, 0, 0, 0, 0, 563, 1, 0, 0, 0, 0, 565, 1, 0, 0, 0, 0, 567, 1, 0, 0, 0, 0, 569, 1, 0, 0, 0, 0, 571, 1, 0, 0, 0, 0, 573, 1, 0, 0, 0, 0, 575, 1, 0, 0, 0, 0, 577, 1, 0, 0, 0, 0, 579, 1, 0, 0, 0, 0, 581, 1, 0, 0, 0, 0, 583, 1, 0, 0, 0, 0, 585, 1, 0, 0, 0, 0, 587, 1, 0, 0, 0, 0, 589, 1, 0, 0, 0, 0, 591, 1, 0, 0, 0, 0, 593, 1, 0, 0, 0, 0, 595, 1, 0, 0, 0, 0, 597, 1, 0, 0, 0, 0, 599, 1, 0, 0, 0, 0, 601, 1, 0, 0, 0, 0, 603, 1, 0, 0, 0, 0, 605, 1, 0, 0, 0, 0, 607, 1, 0, 0, 0, 0, 609, 1, 0, 0, 0, 0, 611, 1, 0, 0, 0, 0, 613, 1, 0, 0, 0, 0, 615, 1, 0, 0, 0, 0, 617, 1, 0, 0, 0, 0, 619, 1, 0, 0, 0, 0, 621, 1, 0, 0, 0, 0, 623, 1, 0, 0, 0, 0, 625, 1, 0, 0, 0, 0, 627, 1, 0, 0, 0, 0, 629, 1, 0, 0, 0, 0, 631, 1, 0, 0, 0, 0, 633, 1, 0, 0, 0, 0, 635, 1, 0, 0, 0, 0, 637, 1, 0, 0, 0, 0, 639, 1, 0, 0, 0, 0, 641, 1, 0, 0, 0, 0, 643, 1, 0, 0, 0, 0, 645, 1, 0, 0, 0, 0, 647, 1, 0, 0, 0, 0, 649, 1, 0, 0, 0, 0, 651, 1, 0, 0, 0, 0, 653, 1, 0, 0, 0, 0, 655, 1, 0, 0, 0, 0, 657, 1, 0, 0, 0, 0, 659, 1, 0, 0, 0, 0, 661, 1, 0, 0, 0, 0, 663, 1, 0, 0, 0, 0, 665, 1, 0, 0, 0, 0, 667, 1, 0, 0, 0, 0, 669, 1, 0, 0, 0, 0, 671, 1, 0, 0, 0, 0, 673, 1, 0, 0, 0, 0, 675, 1, 0, 0, 0, 0, 677, 1, 0, 0, 0, 0, 679, 1, 0, 0, 0, 0, 681, 1, 0, 0, 0, 0, 683, 1, 0, 0, 0, 0, 685, 1, 0, 0, 0, 0, 687, 1, 0, 0, 0, 0, 689, 1, 0, 0, 0, 0, 691, 1, 0, 0, 0, 0, 693, 1, 0, 0, 0, 0, 695, 1, 0, 0, 0, 0, 697, 1, 0, 0, 0, 0, 699, 1, 0, 0, 0, 0, 701, 1, 0, 0, 0, 0, 719, 1, 0, 0, 0, 1, 722, 1, 0, 0, 0, 3, 728, 1, 0, 0, 0, 5, 742, 1, 0, 0, 0, 7, 785, 1, 0, 0, 0, 9, 789, 1, 0, 0, 0, 11, 793, 1, 0, 0, 0, 13, 797, 1, 0, 0, 0, 15, 800, 1, 0, 0, 0, 17, 804, 1, 0, 0, 0, 19, 812, 1, 0, 0, 0, 21, 820, 1, 0, 0, 0, 23, 823, 1, 0, 0, 0, 25, 828, 1, 0, 0, 0, 27, 833, 1, 0, 0, 0, 29, 839, 1, 0, 0, 0, 31, 847, 1, 0, 0, 0, 33, 856, 1, 0, 0, 0, 35, 863, 1, 0, 0, 0, 37, 868, 1, 0, 0, 0, 39, 877, 1, 0, 0, 0, 41, 886, 1, 0, 0, 0, 43, 893, 1, 0, 0, 0, 45, 898, 1, 0, 0, 0, 47, 905, 1, 0, 0, 0, 49, 911, 1, 0, 0, 0, 51, 917, 1, 0, 0, 0, 53, 923, 1, 0, 0, 0, 55, 928, 1, 0, 0, 0, 57, 934, 1, 0, 0, 0, 59, 941, 1, 0, 0, 0, 61, 944, 1, 0, 0, 0, 63, 950, 1, 0, 0, 0, 65, 954, 1, 0, 0, 0, 67, 962, 1, 0, 0, 0, 69, 965, 1, 0, 0, 0, 71, 970, 1, 0, 0, 0, 73, 975, 1, 0, 0, 0, 75, 980, 1, 0, 0, 0, 77, 985, 1, 0, 0, 0, 79, 991, 1, 0, 0, 0, 81, 996, 1, 0, 0, 0, 83, 1002, 1, 0, 0, 0, 85, 1010, 1, 0, 0, 0, 87, 1018, 1, 0, 0, 0, 89, 1022, 1, 0, 0, 0, 91, 1027, 1, 0, 0, 0, 93, 1033, 1, 0, 0, 0, 95, 1036, 1, 0, 0, 0, 97, 1039, 1, 0, 0, 0, 99, 1045, 1, 0, 0, 0, 101, 1051, 1, 0, 0, 0, 103, 1056, 1, 0, 0, 0, 105, 1066, 1, 0, 0, 0, 107, 1073, 1, 0, 0, 0, 109, 1079, 1, 0, 0, 0, 111, 1086, 1, 0, 0, 0, 113, 1091, 1, 0, 0, 0, 115, 1098, 1, 0, 0, 0, 117, 1103, 1, 0, 0, 0, 119, 1108, 1, 0, 0, 0, 121, 1114, 1, 0, 0, 0, 123, 1120, 1, 0, 0, 0, 125, 1125, 1, 0, 0, 0, 127, 1131, 1, 0, 0, 0, 129, 1137, 1, 0, 0, 0, 131, 1141, 1, 0, 0, 0, 133, 1147, 1, 0, 0, 0, 135, 1151, 1, 0, 0, 0, 137, 1155, 1, 0, 0, 0, 139, 1159, 1, 0, 0, 0, 141, 1167, 1, 0, 0, 0, 143, 1176, 1, 0, 0, 0, 145, 1185, 1, 0, 0, 0, 147, 1189, 1, 0, 0, 0, 149, 1196, 1, 0, 0, 0, 151, 1207, 1, 0, 0, 0, 153, 1219, 1, 0, 0, 0, 155, 1229, 1, 0, 0, 0, 157, 1234, 1, 0, 0, 0, 159, 1238, 1, 0, 0, 0, 161, 1243, 1, 0, 0, 0, 163, 1250, 1, 0, 0, 0, 165, 1259, 1, 0, 0, 0, 167, 1271, 1, 0, 0, 0, 169, 1278, 1, 0, 0, 0, 171, 1285, 1, 0, 0, 0, 173, 1290, 1, 0, 0, 0, 175, 1294, 1, 0, 0, 0, 177, 1299, 1, 0, 0, 0, 179, 1305, 1, 0, 0, 0, 181, 1313, 1, 0, 0, 0, 183, 1318, 1, 0, 0, 0, 185, 1337, 1, 0, 0, 0, 187, 1356, 1, 0, 0, 0, 189, 1370, 1, 0, 0, 0, 191, 1387, 1, 0, 0, 0, 193, 1399, 1, 0, 0, 0, 195, 1411, 1, 0, 0, 0, 197, 1427, 1, 0, 0, 0, 199, 1438, 1, 0, 0, 0, 201, 1449, 1, 0, 0, 0, 203, 1458, 1, 0, 0, 0, 205, 1469, 1, 0, 0, 0, 207, 1476, 1, 0, 0, 0, 209, 1480, 1, 0, 0, 0, 211, 1485, 1, 0, 0, 0, 213, 1489, 1, 0, 0, 0, 215, 1497, 1, 0, 0, 0, 217, 1503, 1, 0, 0, 0, 219, 1508, 1, 0, 0, 0, 221, 1513, 1, 0, 0, 0, 223, 1519, 1, 0, 0, 0, 225, 1524, 1, 0, 0, 0, 227, 1529, 1, 0, 0, 0, 229, 1537, 1, 0, 0, 0, 231, 1544, 1, 0, 0, 0, 233, 1554, 1, 0, 0, 0, 235, 1559, 1, 0, 0, 0, 237, 1570, 1, 0, 0, 0, 239, 1574, 1, 0, 0, 0, 241, 1579, 1, 0, 0, 0, 243, 1583, 1, 0, 0, 0, 245, 1589, 1, 0, 0, 0, 247, 1597, 1, 0, 0, 0, 249, 1605, 1, 0, 0, 0, 251, 1618, 1, 0, 0, 0, 253, 1631, 1, 0, 0, 0, 255, 1649, 1, 0, 0, 0, 257, 1654, 1, 0, 0, 0, 259, 1663, 1, 0, 0, 0, 261, 1675, 1, 0, 0, 0, 263, 1684, 1, 0, 0, 0, 265, 1693, 1, 0, 0, 0, 267, 1701, 1, 0, 0, 0, 269, 1712, 1, 0, 0, 0, 271, 1722, 1, 0, 0, 0, 273, 1732, 1, 0, 0, 0, 275, 1740, 1, 0, 0, 0, 277, 1747, 1, 0, 0, 0, 279, 1749, 1, 0, 0, 0, 281, 1753, 1, 0, 0, 0, 283, 1759, 1, 0, 0, 0, 285, 1767, 1, 0, 0, 0, 287, 1773, 1, 0, 0, 0, 289, 1783, 1, 0, 0, 0, 291, 1797, 1, 0, 0, 0, 293, 1808, 1, 0, 0, 0, 295, 1811, 1, 0, 0, 0, 297, 1818, 1, 0, 0, 0, 299, 1825, 1, 0, 0, 0, 301, 1834, 1, 0, 0, 0, 303, 1841, 1, 0, 0, 0, 305, 1844, 1, 0, 0, 0, 307, 1854, 1, 0, 0, 0, 309, 1869, 1, 0, 0, 0, 311, 1876, 1, 0, 0, 0, 313, 1880, 1, 0, 0, 0, 315, 1886, 1, 0, 0, 0, 317, 1891, 1, 0, 0, 0, 319, 1897, 1, 0, 0, 0, 321, 1903, 1, 0, 0, 0, 323, 1912, 1, 0, 0, 0, 325, 1921, 1, 0, 0, 0, 327, 1929, 1, 0, 0, 0, 329, 1939, 1, 0, 0, 0, 331, 1948, 1, 0, 0, 0, 333, 1952, 1, 0, 0, 0, 335, 1959, 1, 0, 0, 0, 337, 1970, 1, 0, 0, 0, 339, 1982, 1, 0, 0, 0, 341, 1985, 1, 0, 0, 0, 343, 1994, 1, 0, 0, 0, 345, 1998, 1, 0, 0, 0, 347, 2004, 1, 0, 0, 0, 349, 2012, 1, 0, 0, 0, 351, 2017, 1, 0, 0, 0, 353, 2025, 1, 0, 0, 0, 355, 2030, 1, 0, 0, 0, 357, 2036, 1, 0, 0, 0, 359, 2042, 1, 0, 0, 0, 361, 2050, 1, 0, 0, 0, 363, 2062, 1, 0, 0, 0, 365, 2067, 1, 0, 0, 0, 367, 2074, 1, 0, 0, 0, 369, 2078, 1, 0, 0, 0, 371, 2083, 1, 0, 0, 0, 373, 2088, 1, 0, 0, 0, 375, 2100, 1, 0, 0, 0, 377, 2108, 1, 0, 0, 0, 379, 2116, 1, 0, 0, 0, 381, 2125, 1, 0, 0, 0, 383, 2133, 1, 0, 0, 0, 385, 2137, 1, 0, 0, 0, 387, 2142, 1, 0, 0, 0, 389, 2151, 1, 0, 0, 0, 391, 2163, 1, 0, 0, 0, 393, 2175, 1, 0, 0, 0, 395, 2185, 1, 0, 0, 0, 397, 2194, 1, 0, 0, 0, 399, 2202, 1, 0, 0, 0, 401, 2213, 1, 0, 0, 0, 403, 2228, 1, 0, 0, 0, 405, 2234, 1, 0, 0, 0, 407, 2243, 1, 0, 0, 0, 409, 2252, 1, 0, 0, 0, 411, 2266, 1, 0, 0, 0, 413, 2268, 1, 0, 0, 0, 415, 2270, 1, 0, 0, 0, 417, 2273, 1, 0, 0, 0, 419, 2275, 1, 0, 0, 0, 421, 2277, 1, 0, 0, 0, 423, 2288, 1, 0, 0, 0, 425, 2293, 1, 0, 0, 0, 427, 2304, 1, 0, 0, 0, 429, 2319, 1, 0, 0, 0, 431, 2332, 1, 0, 0, 0, 433, 2344, 1, 0, 0, 0, 435, 2356, 1, 0, 0, 0, 437, 2364, 1, 0, 0, 0, 439, 2379, 1, 0, 0, 0, 441, 2385, 1, 0, 0, 0, 443, 2392, 1, 0, 0, 0, 445, 2409, 1, 0, 0, 0, 447, 2418, 1, 0, 0, 0, 449, 2431, 1, 0, 0, 0, 451, 2450, 1, 0, 0, 0, 453, 2465, 1, 0, 0, 0, 455, 2477, 1, 0, 0, 0, 457, 2487, 1, 0, 0, 0, 459, 2499, 1, 0, 0, 0, 461, 2507, 1, 0, 0, 0, 463, 2516, 1, 0, 0, 0, 465, 2528, 1, 0, 0, 0, 467, 2541, 1, 0, 0, 0, 469, 2558, 1, 0, 0, 0, 471, 2578, 1, 0, 0, 0, 473, 2591, 1, 0, 0, 0, 475, 2611, 1, 0, 0, 0, 477, 2622, 1, 0, 0, 0, 479, 2634, 1, 0, 0, 0, 481, 2648, 1, 0, 0, 0, 483, 2663, 1, 0, 0, 0, 485, 2677, 1, 0, 0, 0, 487, 2688, 1, 0, 0, 0, 489, 2700, 1, 0, 0, 0, 491, 2716, 1, 0, 0, 0, 493, 2723, 1, 0, 0, 0, 495, 2735, 1, 0, 0, 0, 497, 2746, 1, 0, 0, 0, 499, 2764, 1, 0, 0, 0, 501, 2777, 1, 0, 0, 0, 503, 2792, 1, 0, 0, 0, 505, 2798, 1, 0, 0, 0, 507, 2804, 1, 0, 0, 0, 509, 2810, 1, 0, 0, 0, 511, 2821, 1, 0, 0, 0, 513, 2833, 1, 0, 0, 0, 515, 2850, 1, 0, 0, 0, 517, 2856, 1, 0, 0, 0, 519, 2861, 1, 0, 0, 0, 521, 2867, 1, 0, 0, 0, 523, 2880, 1, 0, 0, 0, 525, 2894, 1, 0, 0, 0, 527, 2902, 1, 0, 0, 0, 529, 2909, 1, 0, 0, 0, 531, 2922, 1, 0, 0, 0, 533, 2933, 1, 0, 0, 0, 535, 2941, 1, 0, 0, 0, 537, 2955, 1, 0, 0, 0, 539, 2970, 1, 0, 0, 0, 541, 2977, 1, 0, 0, 0, 543, 2984, 1, 0, 0, 0, 545, 2992, 1, 0, 0, 0, 547, 3001, 1, 0, 0, 0, 549, 3024, 1, 0, 0, 0, 551, 3033, 1, 0, 0, 0, 553, 3050, 1, 0, 0, 0, 555, 3086, 1, 0, 0, 0, 557, 3092, 1, 0, 0, 0, 559, 3109, 1, 0, 0, 0, 561, 3126, 1, 0, 0, 0, 563, 3140, 1, 0, 0, 0, 565, 3157, 1, 0, 0, 0, 567, 3164, 1, 0, 0, 0, 569, 3191, 1, 0, 0, 0, 571, 3198, 1, 0, 0, 0, 573, 3204, 1, 0, 0, 0, 575, 3214, 1, 0, 0, 0, 577, 3235, 1, 0, 0, 0, 579, 3255, 1, 0, 0, 0, 581, 3269, 1, 0, 0, 0, 583, 3290, 1, 0, 0, 0, 585, 3298, 1, 0, 0, 0, 587, 3316, 1, 0, 0, 0, 589, 3340, 1, 0, 0, 0, 591, 3355, 1, 0, 0, 0, 593, 3376, 1, 0, 0, 0, 595, 3385, 1, 0, 0, 0, 597, 3397, 1, 0, 0, 0, 599, 3411, 1, 0, 0, 0, 601, 3426, 1, 0, 0, 0, 603, 3445, 1, 0, 0, 0, 605, 3453, 1, 0, 0, 0, 607, 3458, 1, 0, 0, 0, 609, 3470, 1, 0, 0, 0, 611, 3480, 1, 0, 0, 0, 613, 3485, 1, 0, 0, 0, 615, 3502, 1, 0, 0, 0, 617, 3512, 1, 0, 0, 0, 619, 3521, 1, 0, 0, 0, 621, 3531, 1, 0, 0, 0, 623, 3549, 1, 0, 0, 0, 625, 3551, 1, 0, 0, 0, 627, 3553, 1, 0, 0, 0, 629, 3555, 1, 0, 0, 0, 631, 3557, 1, 0, 0, 0, 633, 3559, 1, 0, 0, 0, 635, 3563, 1, 0, 0, 0, 637, 3567, 1, 0, 0, 0, 639, 3569, 1, 0, 0, 0, 641, 3571, 1, 0, 0, 0, 643, 3573, 1, 0, 0, 0, 645, 3575, 1, 0, 0, 0, 647, 3577, 1, 0, 0, 0, 649, 3579, 1, 0, 0, 0, 651, 3581, 1, 0, 0, 0, 653, 3583, 1, 0, 0, 0, 655, 3585, 1, 0, 0, 0, 657, 3587, 1, 0, 0, 0, 659, 3589, 1, 0, 0, 0, 661, 3591, 1, 0, 0, 0, 663, 3593, 1, 0, 0, 0, 665, 3595, 1, 0, 0, 0, 667, 3597, 1, 0, 0, 0, 669, 3599, 1, 0, 0, 0, 671, 3601, 1, 0, 0, 0, 673, 3603, 1, 0, 0, 0, 675, 3605, 1, 0, 0, 0, 677, 3607, 1, 0, 0, 0, 679, 3609, 1, 0, 0, 0, 681, 3611, 1, 0, 0, 0, 683, 3613, 1, 0, 0, 0, 685, 3616, 1, 0, 0, 0, 687, 3619, 1, 0, 0, 0, 689, 3642, 1, 0, 0, 0, 691, 3687, 1, 0, 0, 0, 693, 3689, 1, 0, 0, 0, 695, 3692, 1, 0, 0, 0, 697, 3694, 1, 0, 0, 0, 699, 3696, 1, 0, 0, 0, 701, 3698, 1, 0, 0, 0, 703, 3700, 1, 0, 0, 0, 705, 3710, 1, 0, 0, 0, 707, 3720, 1, 0, 0, 0, 709, 3733, 1, 0, 0, 0, 711, 3746, 1, 0, 0, 0, 713, 3759, 1, 0, 0, 0, 715, 3761, 1, 0, 0, 0, 717, 3763, 1, 0, 0, 0, 719, 3772, 1, 0, 0, 0, 721, 723, 7, 0, 0, 0, 722, 721, 1, 0, 0, 0, 723, 724, 1, 0, 0, 0, 724, 722, 1, 0, 0, 0, 724, 725, 1, 0, 0, 0, 725, 726, 1, 0, 0, 0, 726, 727, 6, 0, 0, 0, 727, 2, 1, 0, 0, 0, 728, 729, 5, 47, 0, 0, 729, 730, 5, 42, 0, 0, 730, 731, 5, 33, 0, 0, 731, 733, 1, 0, 0, 0, 732, 734, 9, 0, 0, 0, 733, 732, 1, 0, 0, 0, 734, 735, 1, 0, 0, 0, 735, 736, 1, 0, 0, 0, 735, 733, 1, 0, 0, 0, 736, 737, 1, 0, 0, 0, 737, 738, 5, 42, 0, 0, 738, 739, 5, 47, 0, 0, 739, 740, 1, 0, 0, 0, 740, 741, 6, 1, 1, 0, 741, 4, 1, 0, 0, 0, 742, 743, 5, 47, 0, 0, 743, 744, 5, 42, 0, 0, 744, 748, 1, 0, 0, 0, 745, 747, 9, 0, 0, 0, 746, 745, 1, 0, 0, 0, 747, 750, 1, 0, 0, 0, 748, 749, 1, 0, 0, 0, 748, 746, 1, 0, 0, 0, 749, 751, 1, 0, 0, 0, 750, 748, 1, 0, 0, 0, 751, 752, 5, 42, 0, 0, 752, 753, 5, 47, 0, 0, 753, 754, 1, 0, 0, 0, 754, 755, 6, 2, 0, 0, 755, 6, 1, 0, 0, 0, 756, 757, 5, 45, 0, 0, 757, 758, 5, 45, 0, 0, 758, 761, 5, 32, 0, 0, 759, 761, 5, 35, 0, 0, 760, 756, 1, 0, 0, 0, 760, 759, 1, 0, 0, 0, 761, 765, 1, 0, 0, 0, 762, 764, 8, 1, 0, 0, 763, 762, 1, 0, 0, 0, 764, 767, 1, 0, 0, 0, 765, 763, 1, 0, 0, 0, 765, 766, 1, 0, 0, 0, 766, 773, 1, 0, 0, 0, 767, 765, 1, 0, 0, 0, 768, 770, 5, 13, 0, 0, 769, 768, 1, 0, 0, 0, 769, 770, 1, 0, 0, 0, 770, 771, 1, 0, 0, 0, 771, 774, 5, 10, 0, 0, 772, 774, 5, 0, 0, 1, 773, 769, 1, 0, 0, 0, 773, 772, 1, 0, 0, 0, 774, 786, 1, 0, 0, 0, 775, 776, 5, 45, 0, 0, 776, 777, 5, 45, 0, 0, 777, 783, 1, 0, 0, 0, 778, 780, 5, 13, 0, 0, 779, 778, 1, 0, 0, 0, 779, 780, 1, 0, 0, 0, 780, 781, 1, 0, 0, 0, 781, 784, 5, 10, 0, 0, 782, 784, 5, 0, 0, 1, 783, 779, 1, 0, 0, 0, 783, 782, 1, 0, 0, 0, 784, 786, 1, 0, 0, 0, 785, 760, 1, 0, 0, 0, 785, 775, 1, 0, 0, 0, 786, 787, 1, 0, 0, 0, 787, 788, 6, 3, 0, 0, 788, 8, 1, 0, 0, 0, 789, 790, 7, 2, 0, 0, 790, 791, 7, 3, 0, 0, 791, 792, 7, 3, 0, 0, 792, 10, 1, 0, 0, 0, 793, 794, 7, 2, 0, 0, 794, 795, 7, 4, 0, 0, 795, 796, 7, 5, 0, 0, 796, 12, 1, 0, 0, 0, 797, 798, 7, 2, 0, 0, 798, 799, 7, 6, 0, 0, 799, 14, 1, 0, 0, 0, 800, 801, 7, 2, 0, 0, 801, 802, 7, 6, 0, 0, 802, 803, 7, 7, 0, 0, 803, 16, 1, 0, 0, 0, 804, 805, 7, 8, 0, 0, 805, 806, 7, 9, 0, 0, 806, 807, 7, 9, 0, 0, 807, 808, 7, 3, 0, 0, 808, 809, 7, 10, 0, 0, 809, 810, 7, 2, 0, 0, 810, 811, 7, 4, 0, 0, 811, 18, 1, 0, 0, 0, 812, 813, 7, 8, 0, 0, 813, 814, 7, 10, 0, 0, 814, 815, 7, 11, 0, 0, 815, 816, 7, 12, 0, 0, 816, 817, 7, 10, 0, 0, 817, 818, 7, 10, 0, 0, 818, 819, 7, 4, 0, 0, 819, 20, 1, 0, 0, 0, 820, 821, 7, 8, 0, 0, 821, 822, 7, 13, 0, 0, 822, 22, 1, 0, 0, 0, 823, 824, 7, 7, 0, 0, 824, 825, 7, 2, 0, 0, 825, 826, 7, 6, 0, 0, 826, 827, 7, 10, 0, 0, 827, 24, 1, 0, 0, 0, 828, 829, 7, 7, 0, 0, 829, 830, 7, 2, 0, 0, 830, 831, 7, 6, 0, 0, 831, 832, 7, 11, 0, 0, 832, 26, 1, 0, 0, 0, 833, 834, 7, 7, 0, 0, 834, 835, 7, 14, 0, 0, 835, 836, 7, 9, 0, 0, 836, 837, 7, 6, 0, 0, 837, 838, 7, 6, 0, 0, 838, 28, 1, 0, 0, 0, 839, 840, 7, 7, 0, 0, 840, 841, 7, 9, 0, 0, 841, 842, 7, 3, 0, 0, 842, 843, 7, 15, 0, 0, 843, 844, 7, 16, 0, 0, 844, 845, 7, 4, 0, 0, 845, 846, 7, 6, 0, 0, 846, 30, 1, 0, 0, 0, 847, 848, 7, 5, 0, 0, 848, 849, 7, 2, 0, 0, 849, 850, 7, 11, 0, 0, 850, 851, 7, 10, 0, 0, 851, 852, 7, 11, 0, 0, 852, 853, 7, 17, 0, 0, 853, 854, 7, 16, 0, 0, 854, 855, 7, 10, 0, 0, 855, 32, 1, 0, 0, 0, 856, 857, 7, 5, 0, 0, 857, 858, 7, 10, 0, 0, 858, 859, 7, 3, 0, 0, 859, 860, 7, 10, 0, 0, 860, 861, 7, 11, 0, 0, 861, 862, 7, 10, 0, 0, 862, 34, 1, 0, 0, 0, 863, 864, 7, 5, 0, 0, 864, 865, 7, 10, 0, 0, 865, 866, 7, 6, 0, 0, 866, 867, 7, 7, 0, 0, 867, 36, 1, 0, 0, 0, 868, 869, 7, 5, 0, 0, 869, 870, 7, 10, 0, 0, 870, 871, 7, 6, 0, 0, 871, 872, 7, 7, 0, 0, 872, 873, 7, 14, 0, 0, 873, 874, 7, 17, 0, 0, 874, 875, 7, 8, 0, 0, 875, 876, 7, 10, 0, 0, 876, 38, 1, 0, 0, 0, 877, 878, 7, 5, 0, 0, 878, 879, 7, 17, 0, 0, 879, 880, 7, 6, 0, 0, 880, 881, 7, 11, 0, 0, 881, 882, 7, 17, 0, 0, 882, 883, 7, 4, 0, 0, 883, 884, 7, 7, 0, 0, 884, 885, 7, 11, 0, 0, 885, 40, 1, 0, 0, 0, 886, 887, 7, 5, 0, 0, 887, 888, 7, 9, 0, 0, 888, 889, 7, 15, 0, 0, 889, 890, 7, 8, 0, 0, 890, 891, 7, 3, 0, 0, 891, 892, 7, 10, 0, 0, 892, 42, 1, 0, 0, 0, 893, 894, 7, 10, 0, 0, 894, 895, 7, 3, 0, 0, 895, 896, 7, 6, 0, 0, 896, 897, 7, 10, 0, 0, 897, 44, 1, 0, 0, 0, 898, 899, 7, 10, 0, 0, 899, 900, 7, 18, 0, 0, 900, 901, 7, 17, 0, 0, 901, 902, 7, 6, 0, 0, 902, 903, 7, 11, 0, 0, 903, 904, 7, 6, 0, 0, 904, 46, 1, 0, 0, 0, 905, 906, 7, 19, 0, 0, 906, 907, 7, 2, 0, 0, 907, 908, 7, 3, 0, 0, 908, 909, 7, 6, 0, 0, 909, 910, 7, 10, 0, 0, 910, 48, 1, 0, 0, 0, 911, 912, 7, 19, 0, 0, 912, 913, 7, 3, 0, 0, 913, 914, 7, 9, 0, 0, 914, 915, 7, 2, 0, 0, 915, 916, 7, 11, 0, 0, 916, 50, 1, 0, 0, 0, 917, 918, 7, 19, 0, 0, 918, 919, 7, 17, 0, 0, 919, 920, 7, 14, 0, 0, 920, 921, 7, 6, 0, 0, 921, 922, 7, 11, 0, 0, 922, 52, 1, 0, 0, 0, 923, 924, 7, 19, 0, 0, 924, 925, 7, 14, 0, 0, 925, 926, 7, 9, 0, 0, 926, 927, 7, 16, 0, 0, 927, 54, 1, 0, 0, 0, 928, 929, 7, 20, 0, 0, 929, 930, 7, 14, 0, 0, 930, 931, 7, 9, 0, 0, 931, 932, 7, 15, 0, 0, 932, 933, 7, 21, 0, 0, 933, 56, 1, 0, 0, 0, 934, 935, 7, 22, 0, 0, 935, 936, 7, 2, 0, 0, 936, 937, 7, 23, 0, 0, 937, 938, 7, 17, 0, 0, 938, 939, 7, 4, 0, 0, 939, 940, 7, 20, 0, 0, 940, 58, 1, 0, 0, 0, 941, 942, 7, 17, 0, 0, 942, 943, 7, 4, 0, 0, 943, 60, 1, 0, 0, 0, 944, 945, 7, 17, 0, 0, 945, 946, 7, 4, 0, 0, 946, 947, 7, 4, 0, 0, 947, 948, 7, 10, 0, 0, 948, 949, 7, 14, 0, 0, 949, 62, 1, 0, 0, 0, 950, 951, 7, 17, 0, 0, 951, 952, 7, 4, 0, 0, 952, 953, 7, 11, 0, 0, 953, 64, 1, 0, 0, 0, 954, 955, 7, 17, 0, 0, 955, 956, 7, 4, 0, 0, 956, 957, 7, 11, 0, 0, 957, 958, 7, 10, 0, 0, 958, 959, 7, 20, 0, 0, 959, 960, 7, 10, 0, 0, 960, 961, 7, 14, 0, 0, 961, 66, 1, 0, 0, 0, 962, 963, 7, 17, 0, 0, 963, 964, 7, 6, 0, 0, 964, 68, 1, 0, 0, 0, 965, 966, 7, 24, 0, 0, 966, 967, 7, 9, 0, 0, 967, 968, 7, 17, 0, 0, 968, 969, 7, 4, 0, 0, 969, 70, 1, 0, 0, 0, 970, 971, 7, 3, 0, 0, 971, 972, 7, 2, 0, 0, 972, 973, 7, 6, 0, 0, 973, 974, 7, 11, 0, 0, 974, 72, 1, 0, 0, 0, 975, 976, 7, 3, 0, 0, 976, 977, 7, 10, 0, 0, 977, 978, 7, 19, 0, 0, 978, 979, 7, 11, 0, 0, 979, 74, 1, 0, 0, 0, 980, 981, 7, 3, 0, 0, 981, 982, 7, 17, 0, 0, 982, 983, 7, 25, 0, 0, 983, 984, 7, 10, 0, 0, 984, 76, 1, 0, 0, 0, 985, 986, 7, 3, 0, 0, 986, 987, 7, 17, 0, 0, 987, 988, 7, 16, 0, 0, 988, 989, 7, 17, 0, 0, 989, 990, 7, 11, 0, 0, 990, 78, 1, 0, 0, 0, 991, 992, 7, 3, 0, 0, 992, 993, 7, 9, 0, 0, 993, 994, 7, 4, 0, 0, 994, 995, 7, 20, 0, 0, 995, 80, 1, 0, 0, 0, 996, 997, 7, 16, 0, 0, 997, 998, 7, 2, 0, 0, 998, 999, 7, 11, 0, 0, 999, 1000, 7, 7, 0, 0, 1000, 1001, 7, 22, 0, 0, 1001, 82, 1, 0, 0, 0, 1002, 1003, 7, 4, 0, 0, 1003, 1004, 7, 2, 0, 0, 1004, 1005, 7, 11, 0, 0, 1005, 1006, 7, 15, 0, 0, 1006, 1007, 7, 14, 0, 0, 1007, 1008, 7, 2, 0, 0, 1008, 1009, 7, 3, 0, 0, 1009, 84, 1, 0, 0, 0, 1010, 1011, 7, 16, 0, 0, 1011, 1012, 7, 17, 0, 0, 1012, 1013, 7, 6, 0, 0, 1013, 1014, 7, 6, 0, 0, 1014, 1015, 7, 17, 0, 0, 1015, 1016, 7, 4, 0, 0, 1016, 1017, 7, 20, 0, 0, 1017, 86, 1, 0, 0, 0, 1018, 1019, 7, 4, 0, 0, 1019, 1020, 7, 9, 0, 0, 1020, 1021, 7, 11, 0, 0, 1021, 88, 1, 0, 0, 0, 1022, 1023, 7, 4, 0, 0, 1023, 1024, 7, 15, 0, 0, 1024, 1025, 7, 3, 0, 0, 1025, 1026, 7, 3, 0, 0, 1026, 90, 1, 0, 0, 0, 1027, 1028, 7, 4, 0, 0, 1028, 1029, 7, 15, 0, 0, 1029, 1030, 7, 3, 0, 0, 1030, 1031, 7, 3, 0, 0, 1031, 1032, 7, 6, 0, 0, 1032, 92, 1, 0, 0, 0, 1033, 1034, 7, 9, 0, 0, 1034, 1035, 7, 4, 0, 0, 1035, 94, 1, 0, 0, 0, 1036, 1037, 7, 9, 0, 0, 1037, 1038, 7, 14, 0, 0, 1038, 96, 1, 0, 0, 0, 1039, 1040, 7, 9, 0, 0, 1040, 1041, 7, 14, 0, 0, 1041, 1042, 7, 5, 0, 0, 1042, 1043, 7, 10, 0, 0, 1043, 1044, 7, 14, 0, 0, 1044, 98, 1, 0, 0, 0, 1045, 1046, 7, 9, 0, 0, 1046, 1047, 7, 15, 0, 0, 1047, 1048, 7, 11, 0, 0, 1048, 1049, 7, 10, 0, 0, 1049, 1050, 7, 14, 0, 0, 1050, 100, 1, 0, 0, 0, 1051, 1052, 7, 9, 0, 0, 1052, 1053, 7, 23, 0, 0, 1053, 1054, 7, 10, 0, 0, 1054, 1055, 7, 14, 0, 0, 1055, 102, 1, 0, 0, 0, 1056, 1057, 7, 21, 0, 0, 1057, 1058, 7, 2, 0, 0, 1058, 1059, 7, 14, 0, 0, 1059, 1060, 7, 11, 0, 0, 1060, 1061, 7, 17, 0, 0, 1061, 1062, 7, 11, 0, 0, 1062, 1063, 7, 17, 0, 0, 1063, 1064, 7, 9, 0, 0, 1064, 1065, 7, 4, 0, 0, 1065, 104, 1, 0, 0, 0, 1066, 1067, 7, 14, 0, 0, 1067, 1068, 7, 10, 0, 0, 1068, 1069, 7, 20, 0, 0, 1069, 1070, 7, 10, 0, 0, 1070, 1071, 7, 18, 0, 0, 1071, 1072, 7, 21, 0, 0, 1072, 106, 1, 0, 0, 0, 1073, 1074, 7, 14, 0, 0, 1074, 1075, 7, 17, 0, 0, 1075, 1076, 7, 20, 0, 0, 1076, 1077, 7, 22, 0, 0, 1077, 1078, 7, 11, 0, 0, 1078, 108, 1, 0, 0, 0, 1079, 1080, 7, 6, 0, 0, 1080, 1081, 7, 10, 0, 0, 1081, 1082, 7, 3, 0, 0, 1082, 1083, 7, 10, 0, 0, 1083, 1084, 7, 7, 0, 0, 1084, 1085, 7, 11, 0, 0, 1085, 110, 1, 0, 0, 0, 1086, 1087, 7, 6, 0, 0, 1087, 1088, 7, 22, 0, 0, 1088, 1089, 7, 9, 0, 0, 1089, 1090, 7, 12, 0, 0, 1090, 112, 1, 0, 0, 0, 1091, 1092, 7, 6, 0, 0, 1092, 1093, 7, 11, 0, 0, 1093, 1094, 7, 14, 0, 0, 1094, 1095, 7, 17, 0, 0, 1095, 1096, 7, 4, 0, 0, 1096, 1097, 7, 20, 0, 0, 1097, 114, 1, 0, 0, 0, 1098, 1099, 7, 11, 0, 0, 1099, 1100, 7, 22, 0, 0, 1100, 1101, 7, 10, 0, 0, 1101, 1102, 7, 4, 0, 0, 1102, 116, 1, 0, 0, 0, 1103, 1104, 7, 11, 0, 0, 1104, 1105, 7, 14, 0, 0, 1105, 1106, 7, 15, 0, 0, 1106, 1107, 7, 10, 0, 0, 1107, 118, 1, 0, 0, 0, 1108, 1109, 7, 15, 0, 0, 1109, 1110, 7, 4, 0, 0, 1110, 1111, 7, 17, 0, 0, 1111, 1112, 7, 9, 0, 0, 1112, 1113, 7, 4, 0, 0, 1113, 120, 1, 0, 0, 0, 1114, 1115, 7, 15, 0, 0, 1115, 1116, 7, 6, 0, 0, 1116, 1117, 7, 17, 0, 0, 1117, 1118, 7, 4, 0, 0, 1118, 1119, 7, 20, 0, 0, 1119, 122, 1, 0, 0, 0, 1120, 1121, 7, 12, 0, 0, 1121, 1122, 7, 22, 0, 0, 1122, 1123, 7, 10, 0, 0, 1123, 1124, 7, 4, 0, 0, 1124, 124, 1, 0, 0, 0, 1125, 1126, 7, 12, 0, 0, 1126, 1127, 7, 22, 0, 0, 1127, 1128, 7, 10, 0, 0, 1128, 1129, 7, 14, 0, 0, 1129, 1130, 7, 10, 0, 0, 1130, 126, 1, 0, 0, 0, 1131, 1132, 7, 16, 0, 0, 1132, 1133, 7, 17, 0, 0, 1133, 1134, 7, 4, 0, 0, 1134, 1135, 7, 15, 0, 0, 1135, 1136, 7, 6, 0, 0, 1136, 128, 1, 0, 0, 0, 1137, 1138, 7, 2, 0, 0, 1138, 1139, 7, 23, 0, 0, 1139, 1140, 7, 20, 0, 0, 1140, 130, 1, 0, 0, 0, 1141, 1142, 7, 7, 0, 0, 1142, 1143, 7, 9, 0, 0, 1143, 1144, 7, 15, 0, 0, 1144, 1145, 7, 4, 0, 0, 1145, 1146, 7, 11, 0, 0, 1146, 132, 1, 0, 0, 0, 1147, 1148, 7, 16, 0, 0, 1148, 1149, 7, 2, 0, 0, 1149, 1150, 7, 18, 0, 0, 1150, 134, 1, 0, 0, 0, 1151, 1152, 7, 16, 0, 0, 1152, 1153, 7, 17, 0, 0, 1153, 1154, 7, 4, 0, 0, 1154, 136, 1, 0, 0, 0, 1155, 1156, 7, 6, 0, 0, 1156, 1157, 7, 15, 0, 0, 1157, 1158, 7, 16, 0, 0, 1158, 138, 1, 0, 0, 0, 1159, 1160, 7, 23, 0, 0, 1160, 1161, 7, 2, 0, 0, 1161, 1162, 7, 14, 0, 0, 1162, 1163, 5, 95, 0, 0, 1163, 1164, 7, 21, 0, 0, 1164, 1165, 7, 9, 0, 0, 1165, 1166, 7, 21, 0, 0, 1166, 140, 1, 0, 0, 0, 1167, 1168, 7, 23, 0, 0, 1168, 1169, 7, 2, 0, 0, 1169, 1170, 7, 14, 0, 0, 1170, 1171, 5, 95, 0, 0, 1171, 1172, 7, 6, 0, 0, 1172, 1173, 7, 2, 0, 0, 1173, 1174, 7, 16, 0, 0, 1174, 1175, 7, 21, 0, 0, 1175, 142, 1, 0, 0, 0, 1176, 1177, 7, 23, 0, 0, 1177, 1178, 7, 2, 0, 0, 1178, 1179, 7, 14, 0, 0, 1179, 1180, 7, 17, 0, 0, 1180, 1181, 7, 2, 0, 0, 1181, 1182, 7, 4, 0, 0, 1182, 1183, 7, 7, 0, 0, 1183, 1184, 7, 10, 0, 0, 1184, 144, 1, 0, 0, 0, 1185, 1186, 7, 6, 0, 0, 1186, 1187, 7, 11, 0, 0, 1187, 1188, 7, 5, 0, 0, 1188, 146, 1, 0, 0, 0, 1189, 1190, 7, 6, 0, 0, 1190, 1191, 7, 11, 0, 0, 1191, 1192, 7, 5, 0, 0, 1192, 1193, 7, 5, 0, 0, 1193, 1194, 7, 10, 0, 0, 1194, 1195, 7, 23, 0, 0, 1195, 148, 1, 0, 0, 0, 1196, 1197, 7, 6, 0, 0, 1197, 1198, 7, 11, 0, 0, 1198, 1199, 7, 5, 0, 0, 1199, 1200, 7, 5, 0, 0, 1200, 1201, 7, 10, 0, 0, 1201, 1202, 7, 23, 0, 0, 1202, 1203, 5, 95, 0, 0, 1203, 1204, 7, 21, 0, 0, 1204, 1205, 7, 9, 0, 0, 1205, 1206, 7, 21, 0, 0, 1206, 150, 1, 0, 0, 0, 1207, 1208, 7, 6, 0, 0, 1208, 1209, 7, 11, 0, 0, 1209, 1210, 7, 5, 0, 0, 1210, 1211, 7, 5, 0, 0, 1211, 1212, 7, 10, 0, 0, 1212, 1213, 7, 23, 0, 0, 1213, 1214, 5, 95, 0, 0, 1214, 1215, 7, 6, 0, 0, 1215, 1216, 7, 2, 0, 0, 1216, 1217, 7, 16, 0, 0, 1217, 1218, 7, 21, 0, 0, 1218, 152, 1, 0, 0, 0, 1219, 1220, 7, 6, 0, 0, 1220, 1221, 7, 15, 0, 0, 1221, 1222, 7, 8, 0, 0, 1222, 1223, 7, 6, 0, 0, 1223, 1224, 7, 11, 0, 0, 1224, 1225, 7, 14, 0, 0, 1225, 1226, 7, 17, 0, 0, 1226, 1227, 7, 4, 0, 0, 1227, 1228, 7, 20, 0, 0, 1228, 154, 1, 0, 0, 0, 1229, 1230, 7, 11, 0, 0, 1230, 1231, 7, 14, 0, 0, 1231, 1232, 7, 17, 0, 0, 1232, 1233, 7, 16, 0, 0, 1233, 156, 1, 0, 0, 0, 1234, 1235, 7, 10, 0, 0, 1235, 1236, 7, 4, 0, 0, 1236, 1237, 7, 5, 0, 0, 1237, 158, 1, 0, 0, 0, 1238, 1239, 7, 19, 0, 0, 1239, 1240, 7, 15, 0, 0, 1240, 1241, 7, 3, 0, 0, 1241, 1242, 7, 3, 0, 0, 1242, 160, 1, 0, 0, 0, 1243, 1244, 7, 9, 0, 0, 1244, 1245, 7, 19, 0, 0, 1245, 1246, 7, 19, 0, 0, 1246, 1247, 7, 6, 0, 0, 1247, 1248, 7, 10, 0, 0, 1248, 1249, 7, 11, 0, 0, 1249, 162, 1, 0, 0, 0, 1250, 1251, 7, 17, 0, 0, 1251, 1252, 7, 4, 0, 0, 1252, 1253, 7, 11, 0, 0, 1253, 1254, 7, 10, 0, 0, 1254, 1255, 7, 14, 0, 0, 1255, 1256, 7, 23, 0, 0, 1256, 1257, 7, 2, 0, 0, 1257, 1258, 7, 3, 0, 0, 1258, 164, 1, 0, 0, 0, 1259, 1260, 7, 16, 0, 0, 1260, 1261, 7, 17, 0, 0, 1261, 1262, 7, 7, 0, 0, 1262, 1263, 7, 14, 0, 0, 1263, 1264, 7, 9, 0, 0, 1264, 1265, 7, 6, 0, 0, 1265, 1266, 7, 10, 0, 0, 1266, 1267, 7, 7, 0, 0, 1267, 1268, 7, 9, 0, 0, 1268, 1269, 7, 4, 0, 0, 1269, 1270, 7, 5, 0, 0, 1270, 166, 1, 0, 0, 0, 1271, 1272, 7, 6, 0, 0, 1272, 1273, 7, 10, 0, 0, 1273, 1274, 7, 7, 0, 0, 1274, 1275, 7, 9, 0, 0, 1275, 1276, 7, 4, 0, 0, 1276, 1277, 7, 5, 0, 0, 1277, 168, 1, 0, 0, 0, 1278, 1279, 7, 16, 0, 0, 1279, 1280, 7, 17, 0, 0, 1280, 1281, 7, 4, 0, 0, 1281, 1282, 7, 15, 0, 0, 1282, 1283, 7, 11, 0, 0, 1283, 1284, 7, 10, 0, 0, 1284, 170, 1, 0, 0, 0, 1285, 1286, 7, 22, 0, 0, 1286, 1287, 7, 9, 0, 0, 1287, 1288, 7, 15, 0, 0, 1288, 1289, 7, 14, 0, 0, 1289, 172, 1, 0, 0, 0, 1290, 1291, 7, 5, 0, 0, 1291, 1292, 7, 2, 0, 0, 1292, 1293, 7, 13, 0, 0, 1293, 174, 1, 0, 0, 0, 1294, 1295, 7, 12, 0, 0, 1295, 1296, 7, 10, 0, 0, 1296, 1297, 7, 10, 0, 0, 1297, 1298, 7, 25, 0, 0, 1298, 176, 1, 0, 0, 0, 1299, 1300, 7, 16, 0, 0, 1300, 1301, 7, 9, 0, 0, 1301, 1302, 7, 4, 0, 0, 1302, 1303, 7, 11, 0, 0, 1303, 1304, 7, 22, 0, 0, 1304, 178, 1, 0, 0, 0, 1305, 1306, 7, 26, 0, 0, 1306, 1307, 7, 15, 0, 0, 1307, 1308, 7, 2, 0, 0, 1308, 1309, 7, 14, 0, 0, 1309, 1310, 7, 11, 0, 0, 1310, 1311, 7, 10, 0, 0, 1311, 1312, 7, 14, 0, 0, 1312, 180, 1, 0, 0, 0, 1313, 1314, 7, 13, 0, 0, 1314, 1315, 7, 10, 0, 0, 1315, 1316, 7, 2, 0, 0, 1316, 1317, 7, 14, 0, 0, 1317, 182, 1, 0, 0, 0, 1318, 1319, 7, 6, 0, 0, 1319, 1320, 7, 10, 0, 0, 1320, 1321, 7, 7, 0, 0, 1321, 1322, 7, 9, 0, 0, 1322, 1323, 7, 4, 0, 0, 1323, 1324, 7, 5, 0, 0, 1324, 1325, 5, 95, 0, 0, 1325, 1326, 7, 16, 0, 0, 1326, 1327, 7, 17, 0, 0, 1327, 1328, 7, 7, 0, 0, 1328, 1329, 7, 14, 0, 0, 1329, 1330, 7, 9, 0, 0, 1330, 1331, 7, 6, 0, 0, 1331, 1332, 7, 10, 0, 0, 1332, 1333, 7, 7, 0, 0, 1333, 1334, 7, 9, 0, 0, 1334, 1335, 7, 4, 0, 0, 1335, 1336, 7, 5, 0, 0, 1336, 184, 1, 0, 0, 0, 1337, 1338, 7, 16, 0, 0, 1338, 1339, 7, 17, 0, 0, 1339, 1340, 7, 4, 0, 0, 1340, 1341, 7, 15, 0, 0, 1341, 1342, 7, 11, 0, 0, 1342, 1343, 7, 10, 0, 0, 1343, 1344, 5, 95, 0, 0, 1344, 1345, 7, 16, 0, 0, 1345, 1346, 7, 17, 0, 0, 1346, 1347, 7, 7, 0, 0, 1347, 1348, 7, 14, 0, 0, 1348, 1349, 7, 9, 0, 0, 1349, 1350, 7, 6, 0, 0, 1350, 1351, 7, 10, 0, 0, 1351, 1352, 7, 7, 0, 0, 1352, 1353, 7, 9, 0, 0, 1353, 1354, 7, 4, 0, 0, 1354, 1355, 7, 5, 0, 0, 1355, 186, 1, 0, 0, 0, 1356, 1357, 7, 16, 0, 0, 1357, 1358, 7, 17, 0, 0, 1358, 1359, 7, 4, 0, 0, 1359, 1360, 7, 15, 0, 0, 1360, 1361, 7, 11, 0, 0, 1361, 1362, 7, 10, 0, 0, 1362, 1363, 5, 95, 0, 0, 1363, 1364, 7, 6, 0, 0, 1364, 1365, 7, 10, 0, 0, 1365, 1366, 7, 7, 0, 0, 1366, 1367, 7, 9, 0, 0, 1367, 1368, 7, 4, 0, 0, 1368, 1369, 7, 5, 0, 0, 1369, 188, 1, 0, 0, 0, 1370, 1371, 7, 22, 0, 0, 1371, 1372, 7, 9, 0, 0, 1372, 1373, 7, 15, 0, 0, 1373, 1374, 7, 14, 0, 0, 1374, 1375, 5, 95, 0, 0, 1375, 1376, 7, 16, 0, 0, 1376, 1377, 7, 17, 0, 0, 1377, 1378, 7, 7, 0, 0, 1378, 1379, 7, 14, 0, 0, 1379, 1380, 7, 9, 0, 0, 1380, 1381, 7, 6, 0, 0, 1381, 1382, 7, 10, 0, 0, 1382, 1383, 7, 7, 0, 0, 1383, 1384, 7, 9, 0, 0, 1384, 1385, 7, 4, 0, 0, 1385, 1386, 7, 5, 0, 0, 1386, 190, 1, 0, 0, 0, 1387, 1388, 7, 22, 0, 0, 1388, 1389, 7, 9, 0, 0, 1389, 1390, 7, 15, 0, 0, 1390, 1391, 7, 14, 0, 0, 1391, 1392, 5, 95, 0, 0, 1392, 1393, 7, 6, 0, 0, 1393, 1394, 7, 10, 0, 0, 1394, 1395, 7, 7, 0, 0, 1395, 1396, 7, 9, 0, 0, 1396, 1397, 7, 4, 0, 0, 1397, 1398, 7, 5, 0, 0, 1398, 192, 1, 0, 0, 0, 1399, 1400, 7, 22, 0, 0, 1400, 1401, 7, 9, 0, 0, 1401, 1402, 7, 15, 0, 0, 1402, 1403, 7, 14, 0, 0, 1403, 1404, 5, 95, 0, 0, 1404, 1405, 7, 16, 0, 0, 1405, 1406, 7, 17, 0, 0, 1406, 1407, 7, 4, 0, 0, 1407, 1408, 7, 15, 0, 0, 1408, 1409, 7, 11, 0, 0, 1409, 1410, 7, 10, 0, 0, 1410, 194, 1, 0, 0, 0, 1411, 1412, 7, 5, 0, 0, 1412, 1413, 7, 2, 0, 0, 1413, 1414, 7, 13, 0, 0, 1414, 1415, 5, 95, 0, 0, 1415, 1416, 7, 16, 0, 0, 1416, 1417, 7, 17, 0, 0, 1417, 1418, 7, 7, 0, 0, 1418, 1419, 7, 14, 0, 0, 1419, 1420, 7, 9, 0, 0, 1420, 1421, 7, 6, 0, 0, 1421, 1422, 7, 10, 0, 0, 1422, 1423, 7, 7, 0, 0, 1423, 1424, 7, 9, 0, 0, 1424, 1425, 7, 4, 0, 0, 1425, 1426, 7, 5, 0, 0, 1426, 196, 1, 0, 0, 0, 1427, 1428, 7, 5, 0, 0, 1428, 1429, 7, 2, 0, 0, 1429, 1430, 7, 13, 0, 0, 1430, 1431, 5, 95, 0, 0, 1431, 1432, 7, 6, 0, 0, 1432, 1433, 7, 10, 0, 0, 1433, 1434, 7, 7, 0, 0, 1434, 1435, 7, 9, 0, 0, 1435, 1436, 7, 4, 0, 0, 1436, 1437, 7, 5, 0, 0, 1437, 198, 1, 0, 0, 0, 1438, 1439, 7, 5, 0, 0, 1439, 1440, 7, 2, 0, 0, 1440, 1441, 7, 13, 0, 0, 1441, 1442, 5, 95, 0, 0, 1442, 1443, 7, 16, 0, 0, 1443, 1444, 7, 17, 0, 0, 1444, 1445, 7, 4, 0, 0, 1445, 1446, 7, 15, 0, 0, 1446, 1447, 7, 11, 0, 0, 1447, 1448, 7, 10, 0, 0, 1448, 200, 1, 0, 0, 0, 1449, 1450, 7, 5, 0, 0, 1450, 1451, 7, 2, 0, 0, 1451, 1452, 7, 13, 0, 0, 1452, 1453, 5, 95, 0, 0, 1453, 1454, 7, 22, 0, 0, 1454, 1455, 7, 9, 0, 0, 1455, 1456, 7, 15, 0, 0, 1456, 1457, 7, 14, 0, 0, 1457, 202, 1, 0, 0, 0, 1458, 1459, 7, 13, 0, 0, 1459, 1460, 7, 10, 0, 0, 1460, 1461, 7, 2, 0, 0, 1461, 1462, 7, 14, 0, 0, 1462, 1463, 5, 95, 0, 0, 1463, 1464, 7, 16, 0, 0, 1464, 1465, 7, 9, 0, 0, 1465, 1466, 7, 4, 0, 0, 1466, 1467, 7, 11, 0, 0, 1467, 1468, 7, 22, 0, 0, 1468, 204, 1, 0, 0, 0, 1469, 1470, 7, 11, 0, 0, 1470, 1471, 7, 2, 0, 0, 1471, 1472, 7, 8, 0, 0, 1472, 1473, 7, 3, 0, 0, 1473, 1474, 7, 10, 0, 0, 1474, 1475, 7, 6, 0, 0, 1475, 206, 1, 0, 0, 0, 1476, 1477, 7, 2, 0, 0, 1477, 1478, 7, 8, 0, 0, 1478, 1479, 7, 6, 0, 0, 1479, 208, 1, 0, 0, 0, 1480, 1481, 7, 2, 0, 0, 1481, 1482, 7, 7, 0, 0, 1482, 1483, 7, 9, 0, 0, 1483, 1484, 7, 6, 0, 0, 1484, 210, 1, 0, 0, 0, 1485, 1486, 7, 2, 0, 0, 1486, 1487, 7, 5, 0, 0, 1487, 1488, 7, 5, 0, 0, 1488, 212, 1, 0, 0, 0, 1489, 1490, 7, 2, 0, 0, 1490, 1491, 7, 5, 0, 0, 1491, 1492, 7, 5, 0, 0, 1492, 1493, 7, 11, 0, 0, 1493, 1494, 7, 17, 0, 0, 1494, 1495, 7, 16, 0, 0, 1495, 1496, 7, 10, 0, 0, 1496, 214, 1, 0, 0, 0, 1497, 1498, 7, 2, 0, 0, 1498, 1499, 7, 6, 0, 0, 1499, 1500, 7, 7, 0, 0, 1500, 1501, 7, 17, 0, 0, 1501, 1502, 7, 17, 0, 0, 1502, 216, 1, 0, 0, 0, 1503, 1504, 7, 2, 0, 0, 1504, 1505, 7, 6, 0, 0, 1505, 1506, 7, 17, 0, 0, 1506, 1507, 7, 4, 0, 0, 1507, 218, 1, 0, 0, 0, 1508, 1509, 7, 2, 0, 0, 1509, 1510, 7, 11, 0, 0, 1510, 1511, 7, 2, 0, 0, 1511, 1512, 7, 4, 0, 0, 1512, 220, 1, 0, 0, 0, 1513, 1514, 7, 2, 0, 0, 1514, 1515, 7, 11, 0, 0, 1515, 1516, 7, 2, 0, 0, 1516, 1517, 7, 4, 0, 0, 1517, 1518, 5, 50, 0, 0, 1518, 222, 1, 0, 0, 0, 1519, 1520, 7, 7, 0, 0, 1520, 1521, 7, 8, 0, 0, 1521, 1522, 7, 14, 0, 0, 1522, 1523, 7, 11, 0, 0, 1523, 224, 1, 0, 0, 0, 1524, 1525, 7, 7, 0, 0, 1525, 1526, 7, 10, 0, 0, 1526, 1527, 7, 17, 0, 0, 1527, 1528, 7, 3, 0, 0, 1528, 226, 1, 0, 0, 0, 1529, 1530, 7, 7, 0, 0, 1530, 1531, 7, 10, 0, 0, 1531, 1532, 7, 17, 0, 0, 1532, 1533, 7, 3, 0, 0, 1533, 1534, 7, 17, 0, 0, 1534, 1535, 7, 4, 0, 0, 1535, 1536, 7, 20, 0, 0, 1536, 228, 1, 0, 0, 0, 1537, 1538, 7, 7, 0, 0, 1538, 1539, 7, 9, 0, 0, 1539, 1540, 7, 4, 0, 0, 1540, 1541, 7, 7, 0, 0, 1541, 1542, 7, 2, 0, 0, 1542, 1543, 7, 11, 0, 0, 1543, 230, 1, 0, 0, 0, 1544, 1545, 7, 7, 0, 0, 1545, 1546, 7, 9, 0, 0, 1546, 1547, 7, 4, 0, 0, 1547, 1548, 7, 7, 0, 0, 1548, 1549, 7, 2, 0, 0, 1549, 1550, 7, 11, 0, 0, 1550, 1551, 5, 95, 0, 0, 1551, 1552, 7, 12, 0, 0, 1552, 1553, 7, 6, 0, 0, 1553, 232, 1, 0, 0, 0, 1554, 1555, 7, 7, 0, 0, 1555, 1556, 7, 9, 0, 0, 1556, 1557, 7, 4, 0, 0, 1557, 1558, 7, 23, 0, 0, 1558, 234, 1, 0, 0, 0, 1559, 1560, 7, 7, 0, 0, 1560, 1561, 7, 9, 0, 0, 1561, 1562, 7, 4, 0, 0, 1562, 1563, 7, 23, 0, 0, 1563, 1564, 7, 10, 0, 0, 1564, 1565, 7, 14, 0, 0, 1565, 1566, 7, 11, 0, 0, 1566, 1567, 5, 95, 0, 0, 1567, 1568, 7, 11, 0, 0, 1568, 1569, 7, 27, 0, 0, 1569, 236, 1, 0, 0, 0, 1570, 1571, 7, 7, 0, 0, 1571, 1572, 7, 9, 0, 0, 1572, 1573, 7, 6, 0, 0, 1573, 238, 1, 0, 0, 0, 1574, 1575, 7, 7, 0, 0, 1575, 1576, 7, 9, 0, 0, 1576, 1577, 7, 6, 0, 0, 1577, 1578, 7, 22, 0, 0, 1578, 240, 1, 0, 0, 0, 1579, 1580, 7, 7, 0, 0, 1580, 1581, 7, 9, 0, 0, 1581, 1582, 7, 11, 0, 0, 1582, 242, 1, 0, 0, 0, 1583, 1584, 7, 7, 0, 0, 1584, 1585, 7, 14, 0, 0, 1585, 1586, 7, 7, 0, 0, 1586, 1587, 5, 51, 0, 0, 1587, 1588, 5, 50, 0, 0, 1588, 244, 1, 0, 0, 0, 1589, 1590, 7, 7, 0, 0, 1590, 1591, 7, 15, 0, 0, 1591, 1592, 7, 14, 0, 0, 1592, 1593, 7, 5, 0, 0, 1593, 1594, 7, 2, 0, 0, 1594, 1595, 7, 11, 0, 0, 1595, 1596, 7, 10, 0, 0, 1596, 246, 1, 0, 0, 0, 1597, 1598, 7, 7, 0, 0, 1598, 1599, 7, 15, 0, 0, 1599, 1600, 7, 14, 0, 0, 1600, 1601, 7, 11, 0, 0, 1601, 1602, 7, 17, 0, 0, 1602, 1603, 7, 16, 0, 0, 1603, 1604, 7, 10, 0, 0, 1604, 248, 1, 0, 0, 0, 1605, 1606, 7, 7, 0, 0, 1606, 1607, 7, 15, 0, 0, 1607, 1608, 7, 14, 0, 0, 1608, 1609, 7, 14, 0, 0, 1609, 1610, 7, 10, 0, 0, 1610, 1611, 7, 4, 0, 0, 1611, 1612, 7, 11, 0, 0, 1612, 1613, 5, 95, 0, 0, 1613, 1614, 7, 5, 0, 0, 1614, 1615, 7, 2, 0, 0, 1615, 1616, 7, 11, 0, 0, 1616, 1617, 7, 10, 0, 0, 1617, 250, 1, 0, 0, 0, 1618, 1619, 7, 7, 0, 0, 1619, 1620, 7, 15, 0, 0, 1620, 1621, 7, 14, 0, 0, 1621, 1622, 7, 14, 0, 0, 1622, 1623, 7, 10, 0, 0, 1623, 1624, 7, 4, 0, 0, 1624, 1625, 7, 11, 0, 0, 1625, 1626, 5, 95, 0, 0, 1626, 1627, 7, 11, 0, 0, 1627, 1628, 7, 17, 0, 0, 1628, 1629, 7, 16, 0, 0, 1629, 1630, 7, 10, 0, 0, 1630, 252, 1, 0, 0, 0, 1631, 1632, 7, 7, 0, 0, 1632, 1633, 7, 15, 0, 0, 1633, 1634, 7, 14, 0, 0, 1634, 1635, 7, 14, 0, 0, 1635, 1636, 7, 10, 0, 0, 1636, 1637, 7, 4, 0, 0, 1637, 1638, 7, 11, 0, 0, 1638, 1639, 5, 95, 0, 0, 1639, 1640, 7, 11, 0, 0, 1640, 1641, 7, 17, 0, 0, 1641, 1642, 7, 16, 0, 0, 1642, 1643, 7, 10, 0, 0, 1643, 1644, 7, 6, 0, 0, 1644, 1645, 7, 11, 0, 0, 1645, 1646, 7, 2, 0, 0, 1646, 1647, 7, 16, 0, 0, 1647, 1648, 7, 21, 0, 0, 1648, 254, 1, 0, 0, 0, 1649, 1650, 7, 5, 0, 0, 1650, 1651, 7, 2, 0, 0, 1651, 1652, 7, 11, 0, 0, 1652, 1653, 7, 10, 0, 0, 1653, 256, 1, 0, 0, 0, 1654, 1655, 7, 5, 0, 0, 1655, 1656, 7, 2, 0, 0, 1656, 1657, 7, 11, 0, 0, 1657, 1658, 7, 10, 0, 0, 1658, 1659, 5, 95, 0, 0, 1659, 1660, 7, 2, 0, 0, 1660, 1661, 7, 5, 0, 0, 1661, 1662, 7, 5, 0, 0, 1662, 258, 1, 0, 0, 0, 1663, 1664, 7, 5, 0, 0, 1664, 1665, 7, 2, 0, 0, 1665, 1666, 7, 11, 0, 0, 1666, 1667, 7, 10, 0, 0, 1667, 1668, 5, 95, 0, 0, 1668, 1669, 7, 19, 0, 0, 1669, 1670, 7, 9, 0, 0, 1670, 1671, 7, 14, 0, 0, 1671, 1672, 7, 16, 0, 0, 1672, 1673, 7, 2, 0, 0, 1673, 1674, 7, 11, 0, 0, 1674, 260, 1, 0, 0, 0, 1675, 1676, 7, 5, 0, 0, 1676, 1677, 7, 2, 0, 0, 1677, 1678, 7, 11, 0, 0, 1678, 1679, 7, 10, 0, 0, 1679, 1680, 5, 95, 0, 0, 1680, 1681, 7, 6, 0, 0, 1681, 1682, 7, 15, 0, 0, 1682, 1683, 7, 8, 0, 0, 1683, 262, 1, 0, 0, 0, 1684, 1685, 7, 5, 0, 0, 1685, 1686, 7, 2, 0, 0, 1686, 1687, 7, 11, 0, 0, 1687, 1688, 7, 10, 0, 0, 1688, 1689, 7, 5, 0, 0, 1689, 1690, 7, 17, 0, 0, 1690, 1691, 7, 19, 0, 0, 1691, 1692, 7, 19, 0, 0, 1692, 264, 1, 0, 0, 0, 1693, 1694, 7, 5, 0, 0, 1694, 1695, 7, 2, 0, 0, 1695, 1696, 7, 13, 0, 0, 1696, 1697, 7, 4, 0, 0, 1697, 1698, 7, 2, 0, 0, 1698, 1699, 7, 16, 0, 0, 1699, 1700, 7, 10, 0, 0, 1700, 266, 1, 0, 0, 0, 1701, 1702, 7, 5, 0, 0, 1702, 1703, 7, 2, 0, 0, 1703, 1704, 7, 13, 0, 0, 1704, 1705, 7, 9, 0, 0, 1705, 1706, 7, 19, 0, 0, 1706, 1707, 7, 16, 0, 0, 1707, 1708, 7, 9, 0, 0, 1708, 1709, 7, 4, 0, 0, 1709, 1710, 7, 11, 0, 0, 1710, 1711, 7, 22, 0, 0, 1711, 268, 1, 0, 0, 0, 1712, 1713, 7, 5, 0, 0, 1713, 1714, 7, 2, 0, 0, 1714, 1715, 7, 13, 0, 0, 1715, 1716, 7, 9, 0, 0, 1716, 1717, 7, 19, 0, 0, 1717, 1718, 7, 12, 0, 0, 1718, 1719, 7, 10, 0, 0, 1719, 1720, 7, 10, 0, 0, 1720, 1721, 7, 25, 0, 0, 1721, 270, 1, 0, 0, 0, 1722, 1723, 7, 5, 0, 0, 1723, 1724, 7, 2, 0, 0, 1724, 1725, 7, 13, 0, 0, 1725, 1726, 7, 9, 0, 0, 1726, 1727, 7, 19, 0, 0, 1727, 1728, 7, 13, 0, 0, 1728, 1729, 7, 10, 0, 0, 1729, 1730, 7, 2, 0, 0, 1730, 1731, 7, 14, 0, 0, 1731, 272, 1, 0, 0, 0, 1732, 1733, 7, 5, 0, 0, 1733, 1734, 7, 10, 0, 0, 1734, 1735, 7, 20, 0, 0, 1735, 1736, 7, 14, 0, 0, 1736, 1737, 7, 10, 0, 0, 1737, 1738, 7, 10, 0, 0, 1738, 1739, 7, 6, 0, 0, 1739, 274, 1, 0, 0, 0, 1740, 1741, 7, 5, 0, 0, 1741, 1742, 7, 17, 0, 0, 1742, 1743, 7, 23, 0, 0, 1743, 1744, 7, 17, 0, 0, 1744, 1745, 7, 5, 0, 0, 1745, 1746, 7, 10, 0, 0, 1746, 276, 1, 0, 0, 0, 1747, 1748, 7, 10, 0, 0, 1748, 278, 1, 0, 0, 0, 1749, 1750, 7, 10, 0, 0, 1750, 1751, 7, 18, 0, 0, 1751, 1752, 7, 21, 0, 0, 1752, 280, 1, 0, 0, 0, 1753, 1754, 7, 10, 0, 0, 1754, 1755, 7, 18, 0, 0, 1755, 1756, 7, 21, 0, 0, 1756, 1757, 7, 16, 0, 0, 1757, 1758, 5, 49, 0, 0, 1758, 282, 1, 0, 0, 0, 1759, 1760, 7, 10, 0, 0, 1760, 1761, 7, 18, 0, 0, 1761, 1762, 7, 11, 0, 0, 1762, 1763, 7, 14, 0, 0, 1763, 1764, 7, 2, 0, 0, 1764, 1765, 7, 7, 0, 0, 1765, 1766, 7, 11, 0, 0, 1766, 284, 1, 0, 0, 0, 1767, 1768, 7, 19, 0, 0, 1768, 1769, 7, 3, 0, 0, 1769, 1770, 7, 9, 0, 0, 1770, 1771, 7, 9, 0, 0, 1771, 1772, 7, 14, 0, 0, 1772, 286, 1, 0, 0, 0, 1773, 1774, 7, 19, 0, 0, 1774, 1775, 7, 14, 0, 0, 1775, 1776, 7, 9, 0, 0, 1776, 1777, 7, 16, 0, 0, 1777, 1778, 5, 95, 0, 0, 1778, 1779, 7, 5, 0, 0, 1779, 1780, 7, 2, 0, 0, 1780, 1781, 7, 13, 0, 0, 1781, 1782, 7, 6, 0, 0, 1782, 288, 1, 0, 0, 0, 1783, 1784, 7, 19, 0, 0, 1784, 1785, 7, 14, 0, 0, 1785, 1786, 7, 9, 0, 0, 1786, 1787, 7, 16, 0, 0, 1787, 1788, 5, 95, 0, 0, 1788, 1789, 7, 15, 0, 0, 1789, 1790, 7, 4, 0, 0, 1790, 1791, 7, 17, 0, 0, 1791, 1792, 7, 18, 0, 0, 1792, 1793, 7, 11, 0, 0, 1793, 1794, 7, 17, 0, 0, 1794, 1795, 7, 16, 0, 0, 1795, 1796, 7, 10, 0, 0, 1796, 290, 1, 0, 0, 0, 1797, 1798, 7, 20, 0, 0, 1798, 1799, 7, 10, 0, 0, 1799, 1800, 7, 11, 0, 0, 1800, 1801, 5, 95, 0, 0, 1801, 1802, 7, 19, 0, 0, 1802, 1803, 7, 9, 0, 0, 1803, 1804, 7, 14, 0, 0, 1804, 1805, 7, 16, 0, 0, 1805, 1806, 7, 2, 0, 0, 1806, 1807, 7, 11, 0, 0, 1807, 292, 1, 0, 0, 0, 1808, 1809, 7, 17, 0, 0, 1809, 1810, 7, 19, 0, 0, 1810, 294, 1, 0, 0, 0, 1811, 1812, 7, 17, 0, 0, 1812, 1813, 7, 19, 0, 0, 1813, 1814, 7, 4, 0, 0, 1814, 1815, 7, 15, 0, 0, 1815, 1816, 7, 3, 0, 0, 1816, 1817, 7, 3, 0, 0, 1817, 296, 1, 0, 0, 0, 1818, 1819, 7, 17, 0, 0, 1819, 1820, 7, 6, 0, 0, 1820, 1821, 7, 4, 0, 0, 1821, 1822, 7, 15, 0, 0, 1822, 1823, 7, 3, 0, 0, 1823, 1824, 7, 3, 0, 0, 1824, 298, 1, 0, 0, 0, 1825, 1826, 7, 3, 0, 0, 1826, 1827, 7, 2, 0, 0, 1827, 1828, 7, 6, 0, 0, 1828, 1829, 7, 11, 0, 0, 1829, 1830, 5, 95, 0, 0, 1830, 1831, 7, 5, 0, 0, 1831, 1832, 7, 2, 0, 0, 1832, 1833, 7, 13, 0, 0, 1833, 300, 1, 0, 0, 0, 1834, 1835, 7, 3, 0, 0, 1835, 1836, 7, 10, 0, 0, 1836, 1837, 7, 4, 0, 0, 1837, 1838, 7, 20, 0, 0, 1838, 1839, 7, 11, 0, 0, 1839, 1840, 7, 22, 0, 0, 1840, 302, 1, 0, 0, 0, 1841, 1842, 7, 3, 0, 0, 1842, 1843, 7, 4, 0, 0, 1843, 304, 1, 0, 0, 0, 1844, 1845, 7, 3, 0, 0, 1845, 1846, 7, 9, 0, 0, 1846, 1847, 7, 7, 0, 0, 1847, 1848, 7, 2, 0, 0, 1848, 1849, 7, 3, 0, 0, 1849, 1850, 7, 11, 0, 0, 1850, 1851, 7, 17, 0, 0, 1851, 1852, 7, 16, 0, 0, 1852, 1853, 7, 10, 0, 0, 1853, 306, 1, 0, 0, 0, 1854, 1855, 7, 3, 0, 0, 1855, 1856, 7, 9, 0, 0, 1856, 1857, 7, 7, 0, 0, 1857, 1858, 7, 2, 0, 0, 1858, 1859, 7, 3, 0, 0, 1859, 1860, 7, 11, 0, 0, 1860, 1861, 7, 17, 0, 0, 1861, 1862, 7, 16, 0, 0, 1862, 1863, 7, 10, 0, 0, 1863, 1864, 7, 6, 0, 0, 1864, 1865, 7, 11, 0, 0, 1865, 1866, 7, 2, 0, 0, 1866, 1867, 7, 16, 0, 0, 1867, 1868, 7, 21, 0, 0, 1868, 308, 1, 0, 0, 0, 1869, 1870, 7, 3, 0, 0, 1870, 1871, 7, 9, 0, 0, 1871, 1872, 7, 7, 0, 0, 1872, 1873, 7, 2, 0, 0, 1873, 1874, 7, 11, 0, 0, 1874, 1875, 7, 10, 0, 0, 1875, 310, 1, 0, 0, 0, 1876, 1877, 7, 3, 0, 0, 1877, 1878, 7, 9, 0, 0, 1878, 1879, 7, 20, 0, 0, 1879, 312, 1, 0, 0, 0, 1880, 1881, 7, 3, 0, 0, 1881, 1882, 7, 9, 0, 0, 1882, 1883, 7, 20, 0, 0, 1883, 1884, 5, 49, 0, 0, 1884, 1885, 5, 48, 0, 0, 1885, 314, 1, 0, 0, 0, 1886, 1887, 7, 3, 0, 0, 1887, 1888, 7, 9, 0, 0, 1888, 1889, 7, 20, 0, 0, 1889, 1890, 5, 50, 0, 0, 1890, 316, 1, 0, 0, 0, 1891, 1892, 7, 3, 0, 0, 1892, 1893, 7, 9, 0, 0, 1893, 1894, 7, 12, 0, 0, 1894, 1895, 7, 10, 0, 0, 1895, 1896, 7, 14, 0, 0, 1896, 318, 1, 0, 0, 0, 1897, 1898, 7, 3, 0, 0, 1898, 1899, 7, 11, 0, 0, 1899, 1900, 7, 14, 0, 0, 1900, 1901, 7, 17, 0, 0, 1901, 1902, 7, 16, 0, 0, 1902, 320, 1, 0, 0, 0, 1903, 1904, 7, 16, 0, 0, 1904, 1905, 7, 2, 0, 0, 1905, 1906, 7, 25, 0, 0, 1906, 1907, 7, 10, 0, 0, 1907, 1908, 7, 5, 0, 0, 1908, 1909, 7, 2, 0, 0, 1909, 1910, 7, 11, 0, 0, 1910, 1911, 7, 10, 0, 0, 1911, 322, 1, 0, 0, 0, 1912, 1913, 7, 16, 0, 0, 1913, 1914, 7, 2, 0, 0, 1914, 1915, 7, 25, 0, 0, 1915, 1916, 7, 10, 0, 0, 1916, 1917, 7, 11, 0, 0, 1917, 1918, 7, 17, 0, 0, 1918, 1919, 7, 16, 0, 0, 1919, 1920, 7, 10, 0, 0, 1920, 324, 1, 0, 0, 0, 1921, 1922, 7, 16, 0, 0, 1922, 1923, 7, 9, 0, 0, 1923, 1924, 7, 5, 0, 0, 1924, 1925, 7, 15, 0, 0, 1925, 1926, 7, 3, 0, 0, 1926, 1927, 7, 15, 0, 0, 1927, 1928, 7, 6, 0, 0, 1928, 326, 1, 0, 0, 0, 1929, 1930, 7, 16, 0, 0, 1930, 1931, 7, 9, 0, 0, 1931, 1932, 7, 4, 0, 0, 1932, 1933, 7, 11, 0, 0, 1933, 1934, 7, 22, 0, 0, 1934, 1935, 7, 4, 0, 0, 1935, 1936, 7, 2, 0, 0, 1936, 1937, 7, 16, 0, 0, 1937, 1938, 7, 10, 0, 0, 1938, 328, 1, 0, 0, 0, 1939, 1940, 7, 16, 0, 0, 1940, 1941, 7, 15, 0, 0, 1941, 1942, 7, 3, 0, 0, 1942, 1943, 7, 11, 0, 0, 1943, 1944, 7, 17, 0, 0, 1944, 1945, 7, 21, 0, 0, 1945, 1946, 7, 3, 0, 0, 1946, 1947, 7, 13, 0, 0, 1947, 330, 1, 0, 0, 0, 1948, 1949, 7, 4, 0, 0, 1949, 1950, 7, 9, 0, 0, 1950, 1951, 7, 12, 0, 0, 1951, 332, 1, 0, 0, 0, 1952, 1953, 7, 4, 0, 0, 1953, 1954, 7, 15, 0, 0, 1954, 1955, 7, 3, 0, 0, 1955, 1956, 7, 3, 0, 0, 1956, 1957, 7, 17, 0, 0, 1957, 1958, 7, 19, 0, 0, 1958, 334, 1, 0, 0, 0, 1959, 1960, 7, 21, 0, 0, 1960, 1961, 7, 10, 0, 0, 1961, 1962, 7, 14, 0, 0, 1962, 1963, 7, 17, 0, 0, 1963, 1964, 7, 9, 0, 0, 1964, 1965, 7, 5, 0, 0, 1965, 1966, 5, 95, 0, 0, 1966, 1967, 7, 2, 0, 0, 1967, 1968, 7, 5, 0, 0, 1968, 1969, 7, 5, 0, 0, 1969, 336, 1, 0, 0, 0, 1970, 1971, 7, 21, 0, 0, 1971, 1972, 7, 10, 0, 0, 1972, 1973, 7, 14, 0, 0, 1973, 1974, 7, 17, 0, 0, 1974, 1975, 7, 9, 0, 0, 1975, 1976, 7, 5, 0, 0, 1976, 1977, 5, 95, 0, 0, 1977, 1978, 7, 5, 0, 0, 1978, 1979, 7, 17, 0, 0, 1979, 1980, 7, 19, 0, 0, 1980, 1981, 7, 19, 0, 0, 1981, 338, 1, 0, 0, 0, 1982, 1983, 7, 21, 0, 0, 1983, 1984, 7, 17, 0, 0, 1984, 340, 1, 0, 0, 0, 1985, 1986, 7, 21, 0, 0, 1986, 1987, 7, 9, 0, 0, 1987, 1988, 7, 6, 0, 0, 1988, 1989, 7, 17, 0, 0, 1989, 1990, 7, 11, 0, 0, 1990, 1991, 7, 17, 0, 0, 1991, 1992, 7, 9, 0, 0, 1992, 1993, 7, 4, 0, 0, 1993, 342, 1, 0, 0, 0, 1994, 1995, 7, 21, 0, 0, 1995, 1996, 7, 9, 0, 0, 1996, 1997, 7, 12, 0, 0, 1997, 344, 1, 0, 0, 0, 1998, 1999, 7, 21, 0, 0, 1999, 2000, 7, 9, 0, 0, 2000, 2001, 7, 12, 0, 0, 2001, 2002, 7, 10, 0, 0, 2002, 2003, 7, 14, 0, 0, 2003, 346, 1, 0, 0, 0, 2004, 2005, 7, 14, 0, 0, 2005, 2006, 7, 2, 0, 0, 2006, 2007, 7, 5, 0, 0, 2007, 2008, 7, 17, 0, 0, 2008, 2009, 7, 2, 0, 0, 2009, 2010, 7, 4, 0, 0, 2010, 2011, 7, 6, 0, 0, 2011, 348, 1, 0, 0, 0, 2012, 2013, 7, 14, 0, 0, 2013, 2014, 7, 2, 0, 0, 2014, 2015, 7, 4, 0, 0, 2015, 2016, 7, 5, 0, 0, 2016, 350, 1, 0, 0, 0, 2017, 2018, 7, 14, 0, 0, 2018, 2019, 7, 10, 0, 0, 2019, 2020, 7, 21, 0, 0, 2020, 2021, 7, 3, 0, 0, 2021, 2022, 7, 2, 0, 0, 2022, 2023, 7, 7, 0, 0, 2023, 2024, 7, 10, 0, 0, 2024, 352, 1, 0, 0, 0, 2025, 2026, 7, 14, 0, 0, 2026, 2027, 7, 17, 0, 0, 2027, 2028, 7, 4, 0, 0, 2028, 2029, 7, 11, 0, 0, 2029, 354, 1, 0, 0, 0, 2030, 2031, 7, 14, 0, 0, 2031, 2032, 7, 9, 0, 0, 2032, 2033, 7, 15, 0, 0, 2033, 2034, 7, 4, 0, 0, 2034, 2035, 7, 5, 0, 0, 2035, 356, 1, 0, 0, 0, 2036, 2037, 7, 14, 0, 0, 2037, 2038, 7, 11, 0, 0, 2038, 2039, 7, 14, 0, 0, 2039, 2040, 7, 17, 0, 0, 2040, 2041, 7, 16, 0, 0, 2041, 358, 1, 0, 0, 0, 2042, 2043, 7, 14, 0, 0, 2043, 2044, 7, 10, 0, 0, 2044, 2045, 7, 23, 0, 0, 2045, 2046, 7, 10, 0, 0, 2046, 2047, 7, 14, 0, 0, 2047, 2048, 7, 6, 0, 0, 2048, 2049, 7, 10, 0, 0, 2049, 360, 1, 0, 0, 0, 2050, 2051, 7, 6, 0, 0, 2051, 2052, 7, 10, 0, 0, 2052, 2053, 7, 7, 0, 0, 2053, 2054, 5, 95, 0, 0, 2054, 2055, 7, 11, 0, 0, 2055, 2056, 7, 9, 0, 0, 2056, 2057, 5, 95, 0, 0, 2057, 2058, 7, 11, 0, 0, 2058, 2059, 7, 17, 0, 0, 2059, 2060, 7, 16, 0, 0, 2060, 2061, 7, 10, 0, 0, 2061, 362, 1, 0, 0, 0, 2062, 2063, 7, 6, 0, 0, 2063, 2064, 7, 17, 0, 0, 2064, 2065, 7, 20, 0, 0, 2065, 2066, 7, 4, 0, 0, 2066, 364, 1, 0, 0, 0, 2067, 2068, 7, 6, 0, 0, 2068, 2069, 7, 17, 0, 0, 2069, 2070, 7, 20, 0, 0, 2070, 2071, 7, 4, 0, 0, 2071, 2072, 7, 15, 0, 0, 2072, 2073, 7, 16, 0, 0, 2073, 366, 1, 0, 0, 0, 2074, 2075, 7, 6, 0, 0, 2075, 2076, 7, 17, 0, 0, 2076, 2077, 7, 4, 0, 0, 2077, 368, 1, 0, 0, 0, 2078, 2079, 7, 6, 0, 0, 2079, 2080, 7, 17, 0, 0, 2080, 2081, 7, 4, 0, 0, 2081, 2082, 7, 22, 0, 0, 2082, 370, 1, 0, 0, 0, 2083, 2084, 7, 6, 0, 0, 2084, 2085, 7, 26, 0, 0, 2085, 2086, 7, 14, 0, 0, 2086, 2087, 7, 11, 0, 0, 2087, 372, 1, 0, 0, 0, 2088, 2089, 7, 6, 0, 0, 2089, 2090, 7, 11, 0, 0, 2090, 2091, 7, 14, 0, 0, 2091, 2092, 5, 95, 0, 0, 2092, 2093, 7, 11, 0, 0, 2093, 2094, 7, 9, 0, 0, 2094, 2095, 5, 95, 0, 0, 2095, 2096, 7, 5, 0, 0, 2096, 2097, 7, 2, 0, 0, 2097, 2098, 7, 11, 0, 0, 2098, 2099, 7, 10, 0, 0, 2099, 374, 1, 0, 0, 0, 2100, 2101, 7, 6, 0, 0, 2101, 2102, 7, 15, 0, 0, 2102, 2103, 7, 8, 0, 0, 2103, 2104, 7, 5, 0, 0, 2104, 2105, 7, 2, 0, 0, 2105, 2106, 7, 11, 0, 0, 2106, 2107, 7, 10, 0, 0, 2107, 376, 1, 0, 0, 0, 2108, 2109, 7, 6, 0, 0, 2109, 2110, 7, 15, 0, 0, 2110, 2111, 7, 8, 0, 0, 2111, 2112, 7, 11, 0, 0, 2112, 2113, 7, 17, 0, 0, 2113, 2114, 7, 16, 0, 0, 2114, 2115, 7, 10, 0, 0, 2115, 378, 1, 0, 0, 0, 2116, 2117, 7, 6, 0, 0, 2117, 2118, 7, 15, 0, 0, 2118, 2119, 7, 8, 0, 0, 2119, 2120, 7, 11, 0, 0, 2120, 2121, 7, 14, 0, 0, 2121, 2122, 7, 2, 0, 0, 2122, 2123, 7, 7, 0, 0, 2123, 2124, 7, 11, 0, 0, 2124, 380, 1, 0, 0, 0, 2125, 2126, 7, 6, 0, 0, 2126, 2127, 7, 13, 0, 0, 2127, 2128, 7, 6, 0, 0, 2128, 2129, 7, 5, 0, 0, 2129, 2130, 7, 2, 0, 0, 2130, 2131, 7, 11, 0, 0, 2131, 2132, 7, 10, 0, 0, 2132, 382, 1, 0, 0, 0, 2133, 2134, 7, 11, 0, 0, 2134, 2135, 7, 2, 0, 0, 2135, 2136, 7, 4, 0, 0, 2136, 384, 1, 0, 0, 0, 2137, 2138, 7, 11, 0, 0, 2138, 2139, 7, 17, 0, 0, 2139, 2140, 7, 16, 0, 0, 2140, 2141, 7, 10, 0, 0, 2141, 386, 1, 0, 0, 0, 2142, 2143, 7, 11, 0, 0, 2143, 2144, 7, 17, 0, 0, 2144, 2145, 7, 16, 0, 0, 2145, 2146, 7, 10, 0, 0, 2146, 2147, 7, 5, 0, 0, 2147, 2148, 7, 17, 0, 0, 2148, 2149, 7, 19, 0, 0, 2149, 2150, 7, 19, 0, 0, 2150, 388, 1, 0, 0, 0, 2151, 2152, 7, 11, 0, 0, 2152, 2153, 7, 17, 0, 0, 2153, 2154, 7, 16, 0, 0, 2154, 2155, 7, 10, 0, 0, 2155, 2156, 5, 95, 0, 0, 2156, 2157, 7, 19, 0, 0, 2157, 2158, 7, 9, 0, 0, 2158, 2159, 7, 14, 0, 0, 2159, 2160, 7, 16, 0, 0, 2160, 2161, 7, 2, 0, 0, 2161, 2162, 7, 11, 0, 0, 2162, 390, 1, 0, 0, 0, 2163, 2164, 7, 11, 0, 0, 2164, 2165, 7, 17, 0, 0, 2165, 2166, 7, 16, 0, 0, 2166, 2167, 7, 10, 0, 0, 2167, 2168, 5, 95, 0, 0, 2168, 2169, 7, 11, 0, 0, 2169, 2170, 7, 9, 0, 0, 2170, 2171, 5, 95, 0, 0, 2171, 2172, 7, 6, 0, 0, 2172, 2173, 7, 10, 0, 0, 2173, 2174, 7, 7, 0, 0, 2174, 392, 1, 0, 0, 0, 2175, 2176, 7, 11, 0, 0, 2176, 2177, 7, 17, 0, 0, 2177, 2178, 7, 16, 0, 0, 2178, 2179, 7, 10, 0, 0, 2179, 2180, 7, 6, 0, 0, 2180, 2181, 7, 11, 0, 0, 2181, 2182, 7, 2, 0, 0, 2182, 2183, 7, 16, 0, 0, 2183, 2184, 7, 21, 0, 0, 2184, 394, 1, 0, 0, 0, 2185, 2186, 7, 11, 0, 0, 2186, 2187, 7, 14, 0, 0, 2187, 2188, 7, 15, 0, 0, 2188, 2189, 7, 4, 0, 0, 2189, 2190, 7, 7, 0, 0, 2190, 2191, 7, 2, 0, 0, 2191, 2192, 7, 11, 0, 0, 2192, 2193, 7, 10, 0, 0, 2193, 396, 1, 0, 0, 0, 2194, 2195, 7, 11, 0, 0, 2195, 2196, 7, 9, 0, 0, 2196, 2197, 5, 95, 0, 0, 2197, 2198, 7, 5, 0, 0, 2198, 2199, 7, 2, 0, 0, 2199, 2200, 7, 13, 0, 0, 2200, 2201, 7, 6, 0, 0, 2201, 398, 1, 0, 0, 0, 2202, 2203, 7, 11, 0, 0, 2203, 2204, 7, 9, 0, 0, 2204, 2205, 5, 95, 0, 0, 2205, 2206, 7, 6, 0, 0, 2206, 2207, 7, 10, 0, 0, 2207, 2208, 7, 7, 0, 0, 2208, 2209, 7, 9, 0, 0, 2209, 2210, 7, 4, 0, 0, 2210, 2211, 7, 5, 0, 0, 2211, 2212, 7, 6, 0, 0, 2212, 400, 1, 0, 0, 0, 2213, 2214, 7, 15, 0, 0, 2214, 2215, 7, 4, 0, 0, 2215, 2216, 7, 17, 0, 0, 2216, 2217, 7, 18, 0, 0, 2217, 2218, 5, 95, 0, 0, 2218, 2219, 7, 11, 0, 0, 2219, 2220, 7, 17, 0, 0, 2220, 2221, 7, 16, 0, 0, 2221, 2222, 7, 10, 0, 0, 2222, 2223, 7, 6, 0, 0, 2223, 2224, 7, 11, 0, 0, 2224, 2225, 7, 2, 0, 0, 2225, 2226, 7, 16, 0, 0, 2226, 2227, 7, 21, 0, 0, 2227, 402, 1, 0, 0, 0, 2228, 2229, 7, 15, 0, 0, 2229, 2230, 7, 21, 0, 0, 2230, 2231, 7, 21, 0, 0, 2231, 2232, 7, 10, 0, 0, 2232, 2233, 7, 14, 0, 0, 2233, 404, 1, 0, 0, 0, 2234, 2235, 7, 15, 0, 0, 2235, 2236, 7, 11, 0, 0, 2236, 2237, 7, 7, 0, 0, 2237, 2238, 5, 95, 0, 0, 2238, 2239, 7, 5, 0, 0, 2239, 2240, 7, 2, 0, 0, 2240, 2241, 7, 11, 0, 0, 2241, 2242, 7, 10, 0, 0, 2242, 406, 1, 0, 0, 0, 2243, 2244, 7, 15, 0, 0, 2244, 2245, 7, 11, 0, 0, 2245, 2246, 7, 7, 0, 0, 2246, 2247, 5, 95, 0, 0, 2247, 2248, 7, 11, 0, 0, 2248, 2249, 7, 17, 0, 0, 2249, 2250, 7, 16, 0, 0, 2250, 2251, 7, 10, 0, 0, 2251, 408, 1, 0, 0, 0, 2252, 2253, 7, 15, 0, 0, 2253, 2254, 7, 11, 0, 0, 2254, 2255, 7, 7, 0, 0, 2255, 2256, 5, 95, 0, 0, 2256, 2257, 7, 11, 0, 0, 2257, 2258, 7, 17, 0, 0, 2258, 2259, 7, 16, 0, 0, 2259, 2260, 7, 10, 0, 0, 2260, 2261, 7, 6, 0, 0, 2261, 2262, 7, 11, 0, 0, 2262, 2263, 7, 2, 0, 0, 2263, 2264, 7, 16, 0, 0, 2264, 2265, 7, 21, 0, 0, 2265, 410, 1, 0, 0, 0, 2266, 2267, 7, 5, 0, 0, 2267, 412, 1, 0, 0, 0, 2268, 2269, 7, 11, 0, 0, 2269, 414, 1, 0, 0, 0, 2270, 2271, 7, 11, 0, 0, 2271, 2272, 7, 6, 0, 0, 2272, 416, 1, 0, 0, 0, 2273, 2274, 5, 123, 0, 0, 2274, 418, 1, 0, 0, 0, 2275, 2276, 5, 125, 0, 0, 2276, 420, 1, 0, 0, 0, 2277, 2278, 7, 5, 0, 0, 2278, 2279, 7, 10, 0, 0, 2279, 2280, 7, 4, 0, 0, 2280, 2281, 7, 6, 0, 0, 2281, 2282, 7, 10, 0, 0, 2282, 2283, 5, 95, 0, 0, 2283, 2284, 7, 14, 0, 0, 2284, 2285, 7, 2, 0, 0, 2285, 2286, 7, 4, 0, 0, 2286, 2287, 7, 25, 0, 0, 2287, 422, 1, 0, 0, 0, 2288, 2289, 7, 14, 0, 0, 2289, 2290, 7, 2, 0, 0, 2290, 2291, 7, 4, 0, 0, 2291, 2292, 7, 25, 0, 0, 2292, 424, 1, 0, 0, 0, 2293, 2294, 7, 14, 0, 0, 2294, 2295, 7, 9, 0, 0, 2295, 2296, 7, 12, 0, 0, 2296, 2297, 5, 95, 0, 0, 2297, 2298, 7, 4, 0, 0, 2298, 2299, 7, 15, 0, 0, 2299, 2300, 7, 16, 0, 0, 2300, 2301, 7, 8, 0, 0, 2301, 2302, 7, 10, 0, 0, 2302, 2303, 7, 14, 0, 0, 2303, 426, 1, 0, 0, 0, 2304, 2305, 7, 5, 0, 0, 2305, 2306, 7, 2, 0, 0, 2306, 2307, 7, 11, 0, 0, 2307, 2308, 7, 10, 0, 0, 2308, 2309, 5, 95, 0, 0, 2309, 2310, 7, 22, 0, 0, 2310, 2311, 7, 17, 0, 0, 2311, 2312, 7, 6, 0, 0, 2312, 2313, 7, 11, 0, 0, 2313, 2314, 7, 9, 0, 0, 2314, 2315, 7, 20, 0, 0, 2315, 2316, 7, 14, 0, 0, 2316, 2317, 7, 2, 0, 0, 2317, 2318, 7, 16, 0, 0, 2318, 428, 1, 0, 0, 0, 2319, 2320, 7, 5, 0, 0, 2320, 2321, 7, 2, 0, 0, 2321, 2322, 7, 13, 0, 0, 2322, 2323, 5, 95, 0, 0, 2323, 2324, 7, 9, 0, 0, 2324, 2325, 7, 19, 0, 0, 2325, 2326, 5, 95, 0, 0, 2326, 2327, 7, 16, 0, 0, 2327, 2328, 7, 9, 0, 0, 2328, 2329, 7, 4, 0, 0, 2329, 2330, 7, 11, 0, 0, 2330, 2331, 7, 22, 0, 0, 2331, 430, 1, 0, 0, 0, 2332, 2333, 7, 5, 0, 0, 2333, 2334, 7, 2, 0, 0, 2334, 2335, 7, 13, 0, 0, 2335, 2336, 5, 95, 0, 0, 2336, 2337, 7, 9, 0, 0, 2337, 2338, 7, 19, 0, 0, 2338, 2339, 5, 95, 0, 0, 2339, 2340, 7, 13, 0, 0, 2340, 2341, 7, 10, 0, 0, 2341, 2342, 7, 2, 0, 0, 2342, 2343, 7, 14, 0, 0, 2343, 432, 1, 0, 0, 0, 2344, 2345, 7, 5, 0, 0, 2345, 2346, 7, 2, 0, 0, 2346, 2347, 7, 13, 0, 0, 2347, 2348, 5, 95, 0, 0, 2348, 2349, 7, 9, 0, 0, 2349, 2350, 7, 19, 0, 0, 2350, 2351, 5, 95, 0, 0, 2351, 2352, 7, 12, 0, 0, 2352, 2353, 7, 10, 0, 0, 2353, 2354, 7, 10, 0, 0, 2354, 2355, 7, 25, 0, 0, 2355, 434, 1, 0, 0, 0, 2356, 2357, 7, 10, 0, 0, 2357, 2358, 7, 18, 0, 0, 2358, 2359, 7, 7, 0, 0, 2359, 2360, 7, 3, 0, 0, 2360, 2361, 7, 15, 0, 0, 2361, 2362, 7, 5, 0, 0, 2362, 2363, 7, 10, 0, 0, 2363, 436, 1, 0, 0, 0, 2364, 2365, 7, 10, 0, 0, 2365, 2366, 7, 18, 0, 0, 2366, 2367, 7, 11, 0, 0, 2367, 2368, 7, 10, 0, 0, 2368, 2369, 7, 4, 0, 0, 2369, 2370, 7, 5, 0, 0, 2370, 2371, 7, 10, 0, 0, 2371, 2372, 7, 5, 0, 0, 2372, 2373, 5, 95, 0, 0, 2373, 2374, 7, 6, 0, 0, 2374, 2375, 7, 11, 0, 0, 2375, 2376, 7, 2, 0, 0, 2376, 2377, 7, 11, 0, 0, 2377, 2378, 7, 6, 0, 0, 2378, 438, 1, 0, 0, 0, 2379, 2380, 7, 19, 0, 0, 2380, 2381, 7, 17, 0, 0, 2381, 2382, 7, 10, 0, 0, 2382, 2383, 7, 3, 0, 0, 2383, 2384, 7, 5, 0, 0, 2384, 440, 1, 0, 0, 0, 2385, 2386, 7, 19, 0, 0, 2386, 2387, 7, 17, 0, 0, 2387, 2388, 7, 3, 0, 0, 2388, 2389, 7, 11, 0, 0, 2389, 2390, 7, 10, 0, 0, 2390, 2391, 7, 14, 0, 0, 2391, 442, 1, 0, 0, 0, 2392, 2393, 7, 20, 0, 0, 2393, 2394, 7, 10, 0, 0, 2394, 2395, 7, 9, 0, 0, 2395, 2396, 5, 95, 0, 0, 2396, 2397, 7, 8, 0, 0, 2397, 2398, 7, 9, 0, 0, 2398, 2399, 7, 15, 0, 0, 2399, 2400, 7, 4, 0, 0, 2400, 2401, 7, 5, 0, 0, 2401, 2402, 7, 17, 0, 0, 2402, 2403, 7, 4, 0, 0, 2403, 2404, 7, 20, 0, 0, 2404, 2405, 5, 95, 0, 0, 2405, 2406, 7, 8, 0, 0, 2406, 2407, 7, 9, 0, 0, 2407, 2408, 7, 18, 0, 0, 2408, 444, 1, 0, 0, 0, 2409, 2410, 7, 20, 0, 0, 2410, 2411, 7, 10, 0, 0, 2411, 2412, 7, 9, 0, 0, 2412, 2413, 5, 95, 0, 0, 2413, 2414, 7, 7, 0, 0, 2414, 2415, 7, 10, 0, 0, 2415, 2416, 7, 3, 0, 0, 2416, 2417, 7, 3, 0, 0, 2417, 446, 1, 0, 0, 0, 2418, 2419, 7, 20, 0, 0, 2419, 2420, 7, 10, 0, 0, 2420, 2421, 7, 9, 0, 0, 2421, 2422, 5, 95, 0, 0, 2422, 2423, 7, 5, 0, 0, 2423, 2424, 7, 17, 0, 0, 2424, 2425, 7, 6, 0, 0, 2425, 2426, 7, 11, 0, 0, 2426, 2427, 7, 2, 0, 0, 2427, 2428, 7, 4, 0, 0, 2428, 2429, 7, 7, 0, 0, 2429, 2430, 7, 10, 0, 0, 2430, 448, 1, 0, 0, 0, 2431, 2432, 7, 20, 0, 0, 2432, 2433, 7, 10, 0, 0, 2433, 2434, 7, 9, 0, 0, 2434, 2435, 5, 95, 0, 0, 2435, 2436, 7, 5, 0, 0, 2436, 2437, 7, 17, 0, 0, 2437, 2438, 7, 6, 0, 0, 2438, 2439, 7, 11, 0, 0, 2439, 2440, 7, 2, 0, 0, 2440, 2441, 7, 4, 0, 0, 2441, 2442, 7, 7, 0, 0, 2442, 2443, 7, 10, 0, 0, 2443, 2444, 5, 95, 0, 0, 2444, 2445, 7, 14, 0, 0, 2445, 2446, 7, 2, 0, 0, 2446, 2447, 7, 4, 0, 0, 2447, 2448, 7, 20, 0, 0, 2448, 2449, 7, 10, 0, 0, 2449, 450, 1, 0, 0, 0, 2450, 2451, 7, 20, 0, 0, 2451, 2452, 7, 10, 0, 0, 2452, 2453, 7, 9, 0, 0, 2453, 2454, 5, 95, 0, 0, 2454, 2455, 7, 17, 0, 0, 2455, 2456, 7, 4, 0, 0, 2456, 2457, 7, 11, 0, 0, 2457, 2458, 7, 10, 0, 0, 2458, 2459, 7, 14, 0, 0, 2459, 2460, 7, 6, 0, 0, 2460, 2461, 7, 10, 0, 0, 2461, 2462, 7, 7, 0, 0, 2462, 2463, 7, 11, 0, 0, 2463, 2464, 7, 6, 0, 0, 2464, 452, 1, 0, 0, 0, 2465, 2466, 7, 20, 0, 0, 2466, 2467, 7, 10, 0, 0, 2467, 2468, 7, 9, 0, 0, 2468, 2469, 5, 95, 0, 0, 2469, 2470, 7, 21, 0, 0, 2470, 2471, 7, 9, 0, 0, 2471, 2472, 7, 3, 0, 0, 2472, 2473, 7, 13, 0, 0, 2473, 2474, 7, 20, 0, 0, 2474, 2475, 7, 9, 0, 0, 2475, 2476, 7, 4, 0, 0, 2476, 454, 1, 0, 0, 0, 2477, 2478, 7, 22, 0, 0, 2478, 2479, 7, 17, 0, 0, 2479, 2480, 7, 6, 0, 0, 2480, 2481, 7, 11, 0, 0, 2481, 2482, 7, 9, 0, 0, 2482, 2483, 7, 20, 0, 0, 2483, 2484, 7, 14, 0, 0, 2484, 2485, 7, 2, 0, 0, 2485, 2486, 7, 16, 0, 0, 2486, 456, 1, 0, 0, 0, 2487, 2488, 7, 22, 0, 0, 2488, 2489, 7, 9, 0, 0, 2489, 2490, 7, 15, 0, 0, 2490, 2491, 7, 14, 0, 0, 2491, 2492, 5, 95, 0, 0, 2492, 2493, 7, 9, 0, 0, 2493, 2494, 7, 19, 0, 0, 2494, 2495, 5, 95, 0, 0, 2495, 2496, 7, 5, 0, 0, 2496, 2497, 7, 2, 0, 0, 2497, 2498, 7, 13, 0, 0, 2498, 458, 1, 0, 0, 0, 2499, 2500, 7, 17, 0, 0, 2500, 2501, 7, 4, 0, 0, 2501, 2502, 7, 7, 0, 0, 2502, 2503, 7, 3, 0, 0, 2503, 2504, 7, 15, 0, 0, 2504, 2505, 7, 5, 0, 0, 2505, 2506, 7, 10, 0, 0, 2506, 460, 1, 0, 0, 0, 2507, 2508, 7, 17, 0, 0, 2508, 2509, 7, 4, 0, 0, 2509, 2510, 5, 95, 0, 0, 2510, 2511, 7, 11, 0, 0, 2511, 2512, 7, 10, 0, 0, 2512, 2513, 7, 14, 0, 0, 2513, 2514, 7, 16, 0, 0, 2514, 2515, 7, 6, 0, 0, 2515, 462, 1, 0, 0, 0, 2516, 2517, 7, 16, 0, 0, 2517, 2518, 7, 2, 0, 0, 2518, 2519, 7, 11, 0, 0, 2519, 2520, 7, 7, 0, 0, 2520, 2521, 7, 22, 0, 0, 2521, 2522, 7, 21, 0, 0, 2522, 2523, 7, 22, 0, 0, 2523, 2524, 7, 14, 0, 0, 2524, 2525, 7, 2, 0, 0, 2525, 2526, 7, 6, 0, 0, 2526, 2527, 7, 10, 0, 0, 2527, 464, 1, 0, 0, 0, 2528, 2529, 7, 16, 0, 0, 2529, 2530, 7, 2, 0, 0, 2530, 2531, 7, 11, 0, 0, 2531, 2532, 7, 7, 0, 0, 2532, 2533, 7, 22, 0, 0, 2533, 2534, 5, 95, 0, 0, 2534, 2535, 7, 21, 0, 0, 2535, 2536, 7, 22, 0, 0, 2536, 2537, 7, 14, 0, 0, 2537, 2538, 7, 2, 0, 0, 2538, 2539, 7, 6, 0, 0, 2539, 2540, 7, 10, 0, 0, 2540, 466, 1, 0, 0, 0, 2541, 2542, 7, 16, 0, 0, 2542, 2543, 7, 2, 0, 0, 2543, 2544, 7, 11, 0, 0, 2544, 2545, 7, 7, 0, 0, 2545, 2546, 7, 22, 0, 0, 2546, 2547, 7, 21, 0, 0, 2547, 2548, 7, 22, 0, 0, 2548, 2549, 7, 14, 0, 0, 2549, 2550, 7, 2, 0, 0, 2550, 2551, 7, 6, 0, 0, 2551, 2552, 7, 10, 0, 0, 2552, 2553, 7, 26, 0, 0, 2553, 2554, 7, 15, 0, 0, 2554, 2555, 7, 10, 0, 0, 2555, 2556, 7, 14, 0, 0, 2556, 2557, 7, 13, 0, 0, 2557, 468, 1, 0, 0, 0, 2558, 2559, 7, 6, 0, 0, 2559, 2560, 7, 17, 0, 0, 2560, 2561, 7, 16, 0, 0, 2561, 2562, 7, 21, 0, 0, 2562, 2563, 7, 3, 0, 0, 2563, 2564, 7, 10, 0, 0, 2564, 2565, 5, 95, 0, 0, 2565, 2566, 7, 26, 0, 0, 2566, 2567, 7, 15, 0, 0, 2567, 2568, 7, 10, 0, 0, 2568, 2569, 7, 14, 0, 0, 2569, 2570, 7, 13, 0, 0, 2570, 2571, 5, 95, 0, 0, 2571, 2572, 7, 6, 0, 0, 2572, 2573, 7, 11, 0, 0, 2573, 2574, 7, 14, 0, 0, 2574, 2575, 7, 17, 0, 0, 2575, 2576, 7, 4, 0, 0, 2576, 2577, 7, 20, 0, 0, 2577, 470, 1, 0, 0, 0, 2578, 2579, 7, 26, 0, 0, 2579, 2580, 7, 15, 0, 0, 2580, 2581, 7, 10, 0, 0, 2581, 2582, 7, 14, 0, 0, 2582, 2583, 7, 13, 0, 0, 2583, 2584, 5, 95, 0, 0, 2584, 2585, 7, 6, 0, 0, 2585, 2586, 7, 11, 0, 0, 2586, 2587, 7, 14, 0, 0, 2587, 2588, 7, 17, 0, 0, 2588, 2589, 7, 4, 0, 0, 2589, 2590, 7, 20, 0, 0, 2590, 472, 1, 0, 0, 0, 2591, 2592, 7, 16, 0, 0, 2592, 2593, 7, 2, 0, 0, 2593, 2594, 7, 11, 0, 0, 2594, 2595, 7, 7, 0, 0, 2595, 2596, 7, 22, 0, 0, 2596, 2597, 5, 95, 0, 0, 2597, 2598, 7, 21, 0, 0, 2598, 2599, 7, 22, 0, 0, 2599, 2600, 7, 14, 0, 0, 2600, 2601, 7, 2, 0, 0, 2601, 2602, 7, 6, 0, 0, 2602, 2603, 7, 10, 0, 0, 2603, 2604, 5, 95, 0, 0, 2604, 2605, 7, 21, 0, 0, 2605, 2606, 7, 14, 0, 0, 2606, 2607, 7, 10, 0, 0, 2607, 2608, 7, 19, 0, 0, 2608, 2609, 7, 17, 0, 0, 2609, 2610, 7, 18, 0, 0, 2610, 474, 1, 0, 0, 0, 2611, 2612, 7, 16, 0, 0, 2612, 2613, 7, 2, 0, 0, 2613, 2614, 7, 11, 0, 0, 2614, 2615, 7, 7, 0, 0, 2615, 2616, 7, 22, 0, 0, 2616, 2617, 7, 26, 0, 0, 2617, 2618, 7, 15, 0, 0, 2618, 2619, 7, 10, 0, 0, 2619, 2620, 7, 14, 0, 0, 2620, 2621, 7, 13, 0, 0, 2621, 476, 1, 0, 0, 0, 2622, 2623, 7, 16, 0, 0, 2623, 2624, 7, 2, 0, 0, 2624, 2625, 7, 11, 0, 0, 2625, 2626, 7, 7, 0, 0, 2626, 2627, 7, 22, 0, 0, 2627, 2628, 5, 95, 0, 0, 2628, 2629, 7, 26, 0, 0, 2629, 2630, 7, 15, 0, 0, 2630, 2631, 7, 10, 0, 0, 2631, 2632, 7, 14, 0, 0, 2632, 2633, 7, 13, 0, 0, 2633, 478, 1, 0, 0, 0, 2634, 2635, 7, 16, 0, 0, 2635, 2636, 7, 17, 0, 0, 2636, 2637, 7, 4, 0, 0, 2637, 2638, 7, 15, 0, 0, 2638, 2639, 7, 11, 0, 0, 2639, 2640, 7, 10, 0, 0, 2640, 2641, 5, 95, 0, 0, 2641, 2642, 7, 9, 0, 0, 2642, 2643, 7, 19, 0, 0, 2643, 2644, 5, 95, 0, 0, 2644, 2645, 7, 5, 0, 0, 2645, 2646, 7, 2, 0, 0, 2646, 2647, 7, 13, 0, 0, 2647, 480, 1, 0, 0, 0, 2648, 2649, 7, 16, 0, 0, 2649, 2650, 7, 17, 0, 0, 2650, 2651, 7, 4, 0, 0, 2651, 2652, 7, 15, 0, 0, 2652, 2653, 7, 11, 0, 0, 2653, 2654, 7, 10, 0, 0, 2654, 2655, 5, 95, 0, 0, 2655, 2656, 7, 9, 0, 0, 2656, 2657, 7, 19, 0, 0, 2657, 2658, 5, 95, 0, 0, 2658, 2659, 7, 22, 0, 0, 2659, 2660, 7, 9, 0, 0, 2660, 2661, 7, 15, 0, 0, 2661, 2662, 7, 14, 0, 0, 2662, 482, 1, 0, 0, 0, 2663, 2664, 7, 16, 0, 0, 2664, 2665, 7, 9, 0, 0, 2665, 2666, 7, 4, 0, 0, 2666, 2667, 7, 11, 0, 0, 2667, 2668, 7, 22, 0, 0, 2668, 2669, 5, 95, 0, 0, 2669, 2670, 7, 9, 0, 0, 2670, 2671, 7, 19, 0, 0, 2671, 2672, 5, 95, 0, 0, 2672, 2673, 7, 13, 0, 0, 2673, 2674, 7, 10, 0, 0, 2674, 2675, 7, 2, 0, 0, 2675, 2676, 7, 14, 0, 0, 2676, 484, 1, 0, 0, 0, 2677, 2678, 7, 16, 0, 0, 2678, 2679, 7, 15, 0, 0, 2679, 2680, 7, 3, 0, 0, 2680, 2681, 7, 11, 0, 0, 2681, 2682, 7, 17, 0, 0, 2682, 2683, 7, 16, 0, 0, 2683, 2684, 7, 2, 0, 0, 2684, 2685, 7, 11, 0, 0, 2685, 2686, 7, 7, 0, 0, 2686, 2687, 7, 22, 0, 0, 2687, 486, 1, 0, 0, 0, 2688, 2689, 7, 16, 0, 0, 2689, 2690, 7, 15, 0, 0, 2690, 2691, 7, 3, 0, 0, 2691, 2692, 7, 11, 0, 0, 2692, 2693, 7, 17, 0, 0, 2693, 2694, 5, 95, 0, 0, 2694, 2695, 7, 16, 0, 0, 2695, 2696, 7, 2, 0, 0, 2696, 2697, 7, 11, 0, 0, 2697, 2698, 7, 7, 0, 0, 2698, 2699, 7, 22, 0, 0, 2699, 488, 1, 0, 0, 0, 2700, 2701, 7, 16, 0, 0, 2701, 2702, 7, 15, 0, 0, 2702, 2703, 7, 3, 0, 0, 2703, 2704, 7, 11, 0, 0, 2704, 2705, 7, 17, 0, 0, 2705, 2706, 7, 16, 0, 0, 2706, 2707, 7, 2, 0, 0, 2707, 2708, 7, 11, 0, 0, 2708, 2709, 7, 7, 0, 0, 2709, 2710, 7, 22, 0, 0, 2710, 2711, 7, 26, 0, 0, 2711, 2712, 7, 15, 0, 0, 2712, 2713, 7, 10, 0, 0, 2713, 2714, 7, 14, 0, 0, 2714, 2715, 7, 13, 0, 0, 2715, 490, 1, 0, 0, 0, 2716, 2717, 7, 4, 0, 0, 2717, 2718, 7, 10, 0, 0, 2718, 2719, 7, 6, 0, 0, 2719, 2720, 7, 11, 0, 0, 2720, 2721, 7, 10, 0, 0, 2721, 2722, 7, 5, 0, 0, 2722, 492, 1, 0, 0, 0, 2723, 2724, 7, 21, 0, 0, 2724, 2725, 7, 10, 0, 0, 2725, 2726, 7, 14, 0, 0, 2726, 2727, 7, 7, 0, 0, 2727, 2728, 7, 10, 0, 0, 2728, 2729, 7, 4, 0, 0, 2729, 2730, 7, 11, 0, 0, 2730, 2731, 7, 17, 0, 0, 2731, 2732, 7, 3, 0, 0, 2732, 2733, 7, 10, 0, 0, 2733, 2734, 7, 6, 0, 0, 2734, 494, 1, 0, 0, 0, 2735, 2736, 7, 21, 0, 0, 2736, 2737, 7, 10, 0, 0, 2737, 2738, 7, 14, 0, 0, 2738, 2739, 7, 7, 0, 0, 2739, 2740, 7, 10, 0, 0, 2740, 2741, 7, 4, 0, 0, 2741, 2742, 7, 11, 0, 0, 2742, 2743, 7, 17, 0, 0, 2743, 2744, 7, 3, 0, 0, 2744, 2745, 7, 10, 0, 0, 2745, 496, 1, 0, 0, 0, 2746, 2747, 7, 21, 0, 0, 2747, 2748, 7, 10, 0, 0, 2748, 2749, 7, 14, 0, 0, 2749, 2750, 7, 7, 0, 0, 2750, 2751, 7, 10, 0, 0, 2751, 2752, 7, 4, 0, 0, 2752, 2753, 7, 11, 0, 0, 2753, 2754, 7, 17, 0, 0, 2754, 2755, 7, 3, 0, 0, 2755, 2756, 7, 10, 0, 0, 2756, 2757, 5, 95, 0, 0, 2757, 2758, 7, 2, 0, 0, 2758, 2759, 7, 21, 0, 0, 2759, 2760, 7, 21, 0, 0, 2760, 2761, 7, 14, 0, 0, 2761, 2762, 7, 9, 0, 0, 2762, 2763, 7, 18, 0, 0, 2763, 498, 1, 0, 0, 0, 2764, 2765, 7, 14, 0, 0, 2765, 2766, 7, 10, 0, 0, 2766, 2767, 7, 20, 0, 0, 2767, 2768, 7, 10, 0, 0, 2768, 2769, 7, 18, 0, 0, 2769, 2770, 7, 21, 0, 0, 2770, 2771, 5, 95, 0, 0, 2771, 2772, 7, 26, 0, 0, 2772, 2773, 7, 15, 0, 0, 2773, 2774, 7, 10, 0, 0, 2774, 2775, 7, 14, 0, 0, 2775, 2776, 7, 13, 0, 0, 2776, 500, 1, 0, 0, 0, 2777, 2778, 7, 14, 0, 0, 2778, 2779, 7, 10, 0, 0, 2779, 2780, 7, 23, 0, 0, 2780, 2781, 7, 10, 0, 0, 2781, 2782, 7, 14, 0, 0, 2782, 2783, 7, 6, 0, 0, 2783, 2784, 7, 10, 0, 0, 2784, 2785, 5, 95, 0, 0, 2785, 2786, 7, 4, 0, 0, 2786, 2787, 7, 10, 0, 0, 2787, 2788, 7, 6, 0, 0, 2788, 2789, 7, 11, 0, 0, 2789, 2790, 7, 10, 0, 0, 2790, 2791, 7, 5, 0, 0, 2791, 502, 1, 0, 0, 0, 2792, 2793, 7, 26, 0, 0, 2793, 2794, 7, 15, 0, 0, 2794, 2795, 7, 10, 0, 0, 2795, 2796, 7, 14, 0, 0, 2796, 2797, 7, 13, 0, 0, 2797, 504, 1, 0, 0, 0, 2798, 2799, 7, 14, 0, 0, 2799, 2800, 7, 2, 0, 0, 2800, 2801, 7, 4, 0, 0, 2801, 2802, 7, 20, 0, 0, 2802, 2803, 7, 10, 0, 0, 2803, 506, 1, 0, 0, 0, 2804, 2805, 7, 6, 0, 0, 2805, 2806, 7, 7, 0, 0, 2806, 2807, 7, 9, 0, 0, 2807, 2808, 7, 14, 0, 0, 2808, 2809, 7, 10, 0, 0, 2809, 508, 1, 0, 0, 0, 2810, 2811, 7, 6, 0, 0, 2811, 2812, 7, 7, 0, 0, 2812, 2813, 7, 9, 0, 0, 2813, 2814, 7, 14, 0, 0, 2814, 2815, 7, 10, 0, 0, 2815, 2816, 7, 26, 0, 0, 2816, 2817, 7, 15, 0, 0, 2817, 2818, 7, 10, 0, 0, 2818, 2819, 7, 14, 0, 0, 2819, 2820, 7, 13, 0, 0, 2820, 510, 1, 0, 0, 0, 2821, 2822, 7, 6, 0, 0, 2822, 2823, 7, 7, 0, 0, 2823, 2824, 7, 9, 0, 0, 2824, 2825, 7, 14, 0, 0, 2825, 2826, 7, 10, 0, 0, 2826, 2827, 5, 95, 0, 0, 2827, 2828, 7, 26, 0, 0, 2828, 2829, 7, 15, 0, 0, 2829, 2830, 7, 10, 0, 0, 2830, 2831, 7, 14, 0, 0, 2831, 2832, 7, 13, 0, 0, 2832, 512, 1, 0, 0, 0, 2833, 2834, 7, 6, 0, 0, 2834, 2835, 7, 10, 0, 0, 2835, 2836, 7, 7, 0, 0, 2836, 2837, 7, 9, 0, 0, 2837, 2838, 7, 4, 0, 0, 2838, 2839, 7, 5, 0, 0, 2839, 2840, 5, 95, 0, 0, 2840, 2841, 7, 9, 0, 0, 2841, 2842, 7, 19, 0, 0, 2842, 2843, 5, 95, 0, 0, 2843, 2844, 7, 16, 0, 0, 2844, 2845, 7, 17, 0, 0, 2845, 2846, 7, 4, 0, 0, 2846, 2847, 7, 15, 0, 0, 2847, 2848, 7, 11, 0, 0, 2848, 2849, 7, 10, 0, 0, 2849, 514, 1, 0, 0, 0, 2850, 2851, 7, 6, 0, 0, 2851, 2852, 7, 11, 0, 0, 2852, 2853, 7, 2, 0, 0, 2853, 2854, 7, 11, 0, 0, 2854, 2855, 7, 6, 0, 0, 2855, 516, 1, 0, 0, 0, 2856, 2857, 7, 11, 0, 0, 2857, 2858, 7, 10, 0, 0, 2858, 2859, 7, 14, 0, 0, 2859, 2860, 7, 16, 0, 0, 2860, 518, 1, 0, 0, 0, 2861, 2862, 7, 11, 0, 0, 2862, 2863, 7, 10, 0, 0, 2863, 2864, 7, 14, 0, 0, 2864, 2865, 7, 16, 0, 0, 2865, 2866, 7, 6, 0, 0, 2866, 520, 1, 0, 0, 0, 2867, 2868, 7, 11, 0, 0, 2868, 2869, 7, 17, 0, 0, 2869, 2870, 7, 16, 0, 0, 2870, 2871, 7, 10, 0, 0, 2871, 2872, 7, 6, 0, 0, 2872, 2873, 7, 11, 0, 0, 2873, 2874, 7, 2, 0, 0, 2874, 2875, 7, 16, 0, 0, 2875, 2876, 7, 21, 0, 0, 2876, 2877, 7, 2, 0, 0, 2877, 2878, 7, 5, 0, 0, 2878, 2879, 7, 5, 0, 0, 2879, 522, 1, 0, 0, 0, 2880, 2881, 7, 11, 0, 0, 2881, 2882, 7, 17, 0, 0, 2882, 2883, 7, 16, 0, 0, 2883, 2884, 7, 10, 0, 0, 2884, 2885, 7, 6, 0, 0, 2885, 2886, 7, 11, 0, 0, 2886, 2887, 7, 2, 0, 0, 2887, 2888, 7, 16, 0, 0, 2888, 2889, 7, 21, 0, 0, 2889, 2890, 7, 5, 0, 0, 2890, 2891, 7, 17, 0, 0, 2891, 2892, 7, 19, 0, 0, 2892, 2893, 7, 19, 0, 0, 2893, 524, 1, 0, 0, 0, 2894, 2895, 7, 11, 0, 0, 2895, 2896, 7, 9, 0, 0, 2896, 2897, 7, 21, 0, 0, 2897, 2898, 7, 22, 0, 0, 2898, 2899, 7, 17, 0, 0, 2899, 2900, 7, 11, 0, 0, 2900, 2901, 7, 6, 0, 0, 2901, 526, 1, 0, 0, 0, 2902, 2903, 7, 11, 0, 0, 2903, 2904, 7, 13, 0, 0, 2904, 2905, 7, 21, 0, 0, 2905, 2906, 7, 10, 0, 0, 2906, 2907, 7, 9, 0, 0, 2907, 2908, 7, 19, 0, 0, 2908, 528, 1, 0, 0, 0, 2909, 2910, 7, 12, 0, 0, 2910, 2911, 7, 10, 0, 0, 2911, 2912, 7, 10, 0, 0, 2912, 2913, 7, 25, 0, 0, 2913, 2914, 5, 95, 0, 0, 2914, 2915, 7, 9, 0, 0, 2915, 2916, 7, 19, 0, 0, 2916, 2917, 5, 95, 0, 0, 2917, 2918, 7, 13, 0, 0, 2918, 2919, 7, 10, 0, 0, 2919, 2920, 7, 2, 0, 0, 2920, 2921, 7, 14, 0, 0, 2921, 530, 1, 0, 0, 0, 2922, 2923, 7, 12, 0, 0, 2923, 2924, 7, 10, 0, 0, 2924, 2925, 7, 10, 0, 0, 2925, 2926, 7, 25, 0, 0, 2926, 2927, 7, 9, 0, 0, 2927, 2928, 7, 19, 0, 0, 2928, 2929, 7, 13, 0, 0, 2929, 2930, 7, 10, 0, 0, 2930, 2931, 7, 2, 0, 0, 2931, 2932, 7, 14, 0, 0, 2932, 532, 1, 0, 0, 0, 2933, 2934, 7, 12, 0, 0, 2934, 2935, 7, 10, 0, 0, 2935, 2936, 7, 10, 0, 0, 2936, 2937, 7, 25, 0, 0, 2937, 2938, 7, 5, 0, 0, 2938, 2939, 7, 2, 0, 0, 2939, 2940, 7, 13, 0, 0, 2940, 534, 1, 0, 0, 0, 2941, 2942, 7, 12, 0, 0, 2942, 2943, 7, 17, 0, 0, 2943, 2944, 7, 3, 0, 0, 2944, 2945, 7, 5, 0, 0, 2945, 2946, 7, 7, 0, 0, 2946, 2947, 7, 2, 0, 0, 2947, 2948, 7, 14, 0, 0, 2948, 2949, 7, 5, 0, 0, 2949, 2950, 7, 26, 0, 0, 2950, 2951, 7, 15, 0, 0, 2951, 2952, 7, 10, 0, 0, 2952, 2953, 7, 14, 0, 0, 2953, 2954, 7, 13, 0, 0, 2954, 536, 1, 0, 0, 0, 2955, 2956, 7, 12, 0, 0, 2956, 2957, 7, 17, 0, 0, 2957, 2958, 7, 3, 0, 0, 2958, 2959, 7, 5, 0, 0, 2959, 2960, 7, 7, 0, 0, 2960, 2961, 7, 2, 0, 0, 2961, 2962, 7, 14, 0, 0, 2962, 2963, 7, 5, 0, 0, 2963, 2964, 5, 95, 0, 0, 2964, 2965, 7, 26, 0, 0, 2965, 2966, 7, 15, 0, 0, 2966, 2967, 7, 10, 0, 0, 2967, 2968, 7, 14, 0, 0, 2968, 2969, 7, 13, 0, 0, 2969, 538, 1, 0, 0, 0, 2970, 2971, 7, 6, 0, 0, 2971, 2972, 7, 15, 0, 0, 2972, 2973, 7, 8, 0, 0, 2973, 2974, 7, 6, 0, 0, 2974, 2975, 7, 11, 0, 0, 2975, 2976, 7, 14, 0, 0, 2976, 540, 1, 0, 0, 0, 2977, 2978, 7, 6, 0, 0, 2978, 2979, 7, 11, 0, 0, 2979, 2980, 7, 14, 0, 0, 2980, 2981, 7, 7, 0, 0, 2981, 2982, 7, 16, 0, 0, 2982, 2983, 7, 21, 0, 0, 2983, 542, 1, 0, 0, 0, 2984, 2985, 7, 2, 0, 0, 2985, 2986, 7, 5, 0, 0, 2986, 2987, 7, 5, 0, 0, 2987, 2988, 7, 5, 0, 0, 2988, 2989, 7, 2, 0, 0, 2989, 2990, 7, 11, 0, 0, 2990, 2991, 7, 10, 0, 0, 2991, 544, 1, 0, 0, 0, 2992, 2993, 7, 13, 0, 0, 2993, 2994, 7, 10, 0, 0, 2994, 2995, 7, 2, 0, 0, 2995, 2996, 7, 14, 0, 0, 2996, 2997, 7, 12, 0, 0, 2997, 2998, 7, 10, 0, 0, 2998, 2999, 7, 10, 0, 0, 2999, 3000, 7, 25, 0, 0, 3000, 546, 1, 0, 0, 0, 3001, 3002, 7, 2, 0, 0, 3002, 3003, 7, 3, 0, 0, 3003, 3004, 7, 3, 0, 0, 3004, 3005, 7, 9, 0, 0, 3005, 3006, 7, 12, 0, 0, 3006, 3007, 5, 95, 0, 0, 3007, 3008, 7, 3, 0, 0, 3008, 3009, 7, 10, 0, 0, 3009, 3010, 7, 2, 0, 0, 3010, 3011, 7, 5, 0, 0, 3011, 3012, 7, 17, 0, 0, 3012, 3013, 7, 4, 0, 0, 3013, 3014, 7, 20, 0, 0, 3014, 3015, 5, 95, 0, 0, 3015, 3016, 7, 12, 0, 0, 3016, 3017, 7, 17, 0, 0, 3017, 3018, 7, 3, 0, 0, 3018, 3019, 7, 5, 0, 0, 3019, 3020, 7, 7, 0, 0, 3020, 3021, 7, 2, 0, 0, 3021, 3022, 7, 14, 0, 0, 3022, 3023, 7, 5, 0, 0, 3023, 548, 1, 0, 0, 0, 3024, 3025, 7, 2, 0, 0, 3025, 3026, 7, 4, 0, 0, 3026, 3027, 7, 2, 0, 0, 3027, 3028, 7, 3, 0, 0, 3028, 3029, 7, 13, 0, 0, 3029, 3030, 7, 27, 0, 0, 3030, 3031, 7, 10, 0, 0, 3031, 3032, 7, 14, 0, 0, 3032, 550, 1, 0, 0, 0, 3033, 3034, 7, 2, 0, 0, 3034, 3035, 7, 4, 0, 0, 3035, 3036, 7, 2, 0, 0, 3036, 3037, 7, 3, 0, 0, 3037, 3038, 7, 13, 0, 0, 3038, 3039, 7, 27, 0, 0, 3039, 3040, 7, 10, 0, 0, 3040, 3041, 5, 95, 0, 0, 3041, 3042, 7, 12, 0, 0, 3042, 3043, 7, 17, 0, 0, 3043, 3044, 7, 3, 0, 0, 3044, 3045, 7, 5, 0, 0, 3045, 3046, 7, 7, 0, 0, 3046, 3047, 7, 2, 0, 0, 3047, 3048, 7, 14, 0, 0, 3048, 3049, 7, 5, 0, 0, 3049, 552, 1, 0, 0, 0, 3050, 3051, 7, 2, 0, 0, 3051, 3052, 7, 15, 0, 0, 3052, 3053, 7, 11, 0, 0, 3053, 3054, 7, 9, 0, 0, 3054, 3055, 5, 95, 0, 0, 3055, 3056, 7, 20, 0, 0, 3056, 3057, 7, 10, 0, 0, 3057, 3058, 7, 4, 0, 0, 3058, 3059, 7, 10, 0, 0, 3059, 3060, 7, 14, 0, 0, 3060, 3061, 7, 2, 0, 0, 3061, 3062, 7, 11, 0, 0, 3062, 3063, 7, 10, 0, 0, 3063, 3064, 5, 95, 0, 0, 3064, 3065, 7, 6, 0, 0, 3065, 3066, 7, 13, 0, 0, 3066, 3067, 7, 4, 0, 0, 3067, 3068, 7, 9, 0, 0, 3068, 3069, 7, 4, 0, 0, 3069, 3070, 7, 13, 0, 0, 3070, 3071, 7, 16, 0, 0, 3071, 3072, 7, 6, 0, 0, 3072, 3073, 5, 95, 0, 0, 3073, 3074, 7, 21, 0, 0, 3074, 3075, 7, 22, 0, 0, 3075, 3076, 7, 14, 0, 0, 3076, 3077, 7, 2, 0, 0, 3077, 3078, 7, 6, 0, 0, 3078, 3079, 7, 10, 0, 0, 3079, 3080, 5, 95, 0, 0, 3080, 3081, 7, 26, 0, 0, 3081, 3082, 7, 15, 0, 0, 3082, 3083, 7, 10, 0, 0, 3083, 3084, 7, 14, 0, 0, 3084, 3085, 7, 13, 0, 0, 3085, 554, 1, 0, 0, 0, 3086, 3087, 7, 8, 0, 0, 3087, 3088, 7, 9, 0, 0, 3088, 3089, 7, 9, 0, 0, 3089, 3090, 7, 6, 0, 0, 3090, 3091, 7, 11, 0, 0, 3091, 556, 1, 0, 0, 0, 3092, 3093, 7, 7, 0, 0, 3093, 3094, 7, 2, 0, 0, 3094, 3095, 7, 6, 0, 0, 3095, 3096, 7, 10, 0, 0, 3096, 3097, 5, 95, 0, 0, 3097, 3098, 7, 17, 0, 0, 3098, 3099, 7, 4, 0, 0, 3099, 3100, 7, 6, 0, 0, 3100, 3101, 7, 10, 0, 0, 3101, 3102, 7, 4, 0, 0, 3102, 3103, 7, 6, 0, 0, 3103, 3104, 7, 17, 0, 0, 3104, 3105, 7, 11, 0, 0, 3105, 3106, 7, 17, 0, 0, 3106, 3107, 7, 23, 0, 0, 3107, 3108, 7, 10, 0, 0, 3108, 558, 1, 0, 0, 0, 3109, 3110, 7, 7, 0, 0, 3110, 3111, 7, 15, 0, 0, 3111, 3112, 7, 11, 0, 0, 3112, 3113, 7, 9, 0, 0, 3113, 3114, 7, 19, 0, 0, 3114, 3115, 7, 19, 0, 0, 3115, 3116, 5, 95, 0, 0, 3116, 3117, 7, 19, 0, 0, 3117, 3118, 7, 14, 0, 0, 3118, 3119, 7, 10, 0, 0, 3119, 3120, 7, 26, 0, 0, 3120, 3121, 7, 15, 0, 0, 3121, 3122, 7, 10, 0, 0, 3122, 3123, 7, 4, 0, 0, 3123, 3124, 7, 7, 0, 0, 3124, 3125, 7, 13, 0, 0, 3125, 560, 1, 0, 0, 0, 3126, 3127, 7, 5, 0, 0, 3127, 3128, 7, 10, 0, 0, 3128, 3129, 7, 19, 0, 0, 3129, 3130, 7, 2, 0, 0, 3130, 3131, 7, 15, 0, 0, 3131, 3132, 7, 3, 0, 0, 3132, 3133, 7, 11, 0, 0, 3133, 3134, 5, 95, 0, 0, 3134, 3135, 7, 19, 0, 0, 3135, 3136, 7, 17, 0, 0, 3136, 3137, 7, 10, 0, 0, 3137, 3138, 7, 3, 0, 0, 3138, 3139, 7, 5, 0, 0, 3139, 562, 1, 0, 0, 0, 3140, 3141, 7, 5, 0, 0, 3141, 3142, 7, 10, 0, 0, 3142, 3143, 7, 19, 0, 0, 3143, 3144, 7, 2, 0, 0, 3144, 3145, 7, 15, 0, 0, 3145, 3146, 7, 3, 0, 0, 3146, 3147, 7, 11, 0, 0, 3147, 3148, 5, 95, 0, 0, 3148, 3149, 7, 9, 0, 0, 3149, 3150, 7, 21, 0, 0, 3150, 3151, 7, 10, 0, 0, 3151, 3152, 7, 14, 0, 0, 3152, 3153, 7, 2, 0, 0, 3153, 3154, 7, 11, 0, 0, 3154, 3155, 7, 9, 0, 0, 3155, 3156, 7, 14, 0, 0, 3156, 564, 1, 0, 0, 0, 3157, 3158, 7, 10, 0, 0, 3158, 3159, 7, 6, 0, 0, 3159, 3160, 7, 7, 0, 0, 3160, 3161, 7, 2, 0, 0, 3161, 3162, 7, 21, 0, 0, 3162, 3163, 7, 10, 0, 0, 3163, 566, 1, 0, 0, 0, 3164, 3165, 7, 10, 0, 0, 3165, 3166, 7, 4, 0, 0, 3166, 3167, 7, 2, 0, 0, 3167, 3168, 7, 8, 0, 0, 3168, 3169, 7, 3, 0, 0, 3169, 3170, 7, 10, 0, 0, 3170, 3171, 5, 95, 0, 0, 3171, 3172, 7, 21, 0, 0, 3172, 3173, 7, 9, 0, 0, 3173, 3174, 7, 6, 0, 0, 3174, 3175, 7, 17, 0, 0, 3175, 3176, 7, 11, 0, 0, 3176, 3177, 7, 17, 0, 0, 3177, 3178, 7, 9, 0, 0, 3178, 3179, 7, 4, 0, 0, 3179, 3180, 5, 95, 0, 0, 3180, 3181, 7, 17, 0, 0, 3181, 3182, 7, 4, 0, 0, 3182, 3183, 7, 7, 0, 0, 3183, 3184, 7, 14, 0, 0, 3184, 3185, 7, 10, 0, 0, 3185, 3186, 7, 16, 0, 0, 3186, 3187, 7, 10, 0, 0, 3187, 3188, 7, 4, 0, 0, 3188, 3189, 7, 11, 0, 0, 3189, 3190, 7, 6, 0, 0, 3190, 568, 1, 0, 0, 0, 3191, 3192, 7, 19, 0, 0, 3192, 3193, 7, 17, 0, 0, 3193, 3194, 7, 10, 0, 0, 3194, 3195, 7, 3, 0, 0, 3195, 3196, 7, 5, 0, 0, 3196, 3197, 7, 6, 0, 0, 3197, 570, 1, 0, 0, 0, 3198, 3199, 7, 19, 0, 0, 3199, 3200, 7, 3, 0, 0, 3200, 3201, 7, 2, 0, 0, 3201, 3202, 7, 20, 0, 0, 3202, 3203, 7, 6, 0, 0, 3203, 572, 1, 0, 0, 0, 3204, 3205, 7, 19, 0, 0, 3205, 3206, 7, 15, 0, 0, 3206, 3207, 7, 27, 0, 0, 3207, 3208, 7, 27, 0, 0, 3208, 3209, 7, 17, 0, 0, 3209, 3210, 7, 4, 0, 0, 3210, 3211, 7, 10, 0, 0, 3211, 3212, 7, 6, 0, 0, 3212, 3213, 7, 6, 0, 0, 3213, 574, 1, 0, 0, 0, 3214, 3215, 7, 19, 0, 0, 3215, 3216, 7, 15, 0, 0, 3216, 3217, 7, 27, 0, 0, 3217, 3218, 7, 27, 0, 0, 3218, 3219, 7, 13, 0, 0, 3219, 3220, 5, 95, 0, 0, 3220, 3221, 7, 16, 0, 0, 3221, 3222, 7, 2, 0, 0, 3222, 3223, 7, 18, 0, 0, 3223, 3224, 5, 95, 0, 0, 3224, 3225, 7, 10, 0, 0, 3225, 3226, 7, 18, 0, 0, 3226, 3227, 7, 21, 0, 0, 3227, 3228, 7, 2, 0, 0, 3228, 3229, 7, 4, 0, 0, 3229, 3230, 7, 6, 0, 0, 3230, 3231, 7, 17, 0, 0, 3231, 3232, 7, 9, 0, 0, 3232, 3233, 7, 4, 0, 0, 3233, 3234, 7, 6, 0, 0, 3234, 576, 1, 0, 0, 0, 3235, 3236, 7, 19, 0, 0, 3236, 3237, 7, 15, 0, 0, 3237, 3238, 7, 27, 0, 0, 3238, 3239, 7, 27, 0, 0, 3239, 3240, 7, 13, 0, 0, 3240, 3241, 5, 95, 0, 0, 3241, 3242, 7, 21, 0, 0, 3242, 3243, 7, 14, 0, 0, 3243, 3244, 7, 10, 0, 0, 3244, 3245, 7, 19, 0, 0, 3245, 3246, 7, 17, 0, 0, 3246, 3247, 7, 18, 0, 0, 3247, 3248, 5, 95, 0, 0, 3248, 3249, 7, 3, 0, 0, 3249, 3250, 7, 10, 0, 0, 3250, 3251, 7, 4, 0, 0, 3251, 3252, 7, 20, 0, 0, 3252, 3253, 7, 11, 0, 0, 3253, 3254, 7, 22, 0, 0, 3254, 578, 1, 0, 0, 0, 3255, 3256, 7, 19, 0, 0, 3256, 3257, 7, 15, 0, 0, 3257, 3258, 7, 27, 0, 0, 3258, 3259, 7, 27, 0, 0, 3259, 3260, 7, 13, 0, 0, 3260, 3261, 5, 95, 0, 0, 3261, 3262, 7, 14, 0, 0, 3262, 3263, 7, 10, 0, 0, 3263, 3264, 7, 12, 0, 0, 3264, 3265, 7, 14, 0, 0, 3265, 3266, 7, 17, 0, 0, 3266, 3267, 7, 11, 0, 0, 3267, 3268, 7, 10, 0, 0, 3268, 580, 1, 0, 0, 0, 3269, 3270, 7, 19, 0, 0, 3270, 3271, 7, 15, 0, 0, 3271, 3272, 7, 27, 0, 0, 3272, 3273, 7, 27, 0, 0, 3273, 3274, 7, 13, 0, 0, 3274, 3275, 5, 95, 0, 0, 3275, 3276, 7, 11, 0, 0, 3276, 3277, 7, 14, 0, 0, 3277, 3278, 7, 2, 0, 0, 3278, 3279, 7, 4, 0, 0, 3279, 3280, 7, 6, 0, 0, 3280, 3281, 7, 21, 0, 0, 3281, 3282, 7, 9, 0, 0, 3282, 3283, 7, 6, 0, 0, 3283, 3284, 7, 17, 0, 0, 3284, 3285, 7, 11, 0, 0, 3285, 3286, 7, 17, 0, 0, 3286, 3287, 7, 9, 0, 0, 3287, 3288, 7, 4, 0, 0, 3288, 3289, 7, 6, 0, 0, 3289, 582, 1, 0, 0, 0, 3290, 3291, 7, 3, 0, 0, 3291, 3292, 7, 10, 0, 0, 3292, 3293, 7, 4, 0, 0, 3293, 3294, 7, 17, 0, 0, 3294, 3295, 7, 10, 0, 0, 3295, 3296, 7, 4, 0, 0, 3296, 3297, 7, 11, 0, 0, 3297, 584, 1, 0, 0, 0, 3298, 3299, 7, 3, 0, 0, 3299, 3300, 7, 9, 0, 0, 3300, 3301, 7, 12, 0, 0, 3301, 3302, 5, 95, 0, 0, 3302, 3303, 7, 19, 0, 0, 3303, 3304, 7, 14, 0, 0, 3304, 3305, 7, 10, 0, 0, 3305, 3306, 7, 26, 0, 0, 3306, 3307, 5, 95, 0, 0, 3307, 3308, 7, 9, 0, 0, 3308, 3309, 7, 21, 0, 0, 3309, 3310, 7, 10, 0, 0, 3310, 3311, 7, 14, 0, 0, 3311, 3312, 7, 2, 0, 0, 3312, 3313, 7, 11, 0, 0, 3313, 3314, 7, 9, 0, 0, 3314, 3315, 7, 14, 0, 0, 3315, 586, 1, 0, 0, 0, 3316, 3317, 7, 16, 0, 0, 3317, 3318, 7, 2, 0, 0, 3318, 3319, 7, 18, 0, 0, 3319, 3320, 5, 95, 0, 0, 3320, 3321, 7, 5, 0, 0, 3321, 3322, 7, 10, 0, 0, 3322, 3323, 7, 11, 0, 0, 3323, 3324, 7, 10, 0, 0, 3324, 3325, 7, 14, 0, 0, 3325, 3326, 7, 16, 0, 0, 3326, 3327, 7, 17, 0, 0, 3327, 3328, 7, 4, 0, 0, 3328, 3329, 7, 17, 0, 0, 3329, 3330, 7, 27, 0, 0, 3330, 3331, 7, 10, 0, 0, 3331, 3332, 7, 5, 0, 0, 3332, 3333, 5, 95, 0, 0, 3333, 3334, 7, 6, 0, 0, 3334, 3335, 7, 11, 0, 0, 3335, 3336, 7, 2, 0, 0, 3336, 3337, 7, 11, 0, 0, 3337, 3338, 7, 10, 0, 0, 3338, 3339, 7, 6, 0, 0, 3339, 588, 1, 0, 0, 0, 3340, 3341, 7, 16, 0, 0, 3341, 3342, 7, 2, 0, 0, 3342, 3343, 7, 18, 0, 0, 3343, 3344, 5, 95, 0, 0, 3344, 3345, 7, 10, 0, 0, 3345, 3346, 7, 18, 0, 0, 3346, 3347, 7, 21, 0, 0, 3347, 3348, 7, 2, 0, 0, 3348, 3349, 7, 4, 0, 0, 3349, 3350, 7, 6, 0, 0, 3350, 3351, 7, 17, 0, 0, 3351, 3352, 7, 9, 0, 0, 3352, 3353, 7, 4, 0, 0, 3353, 3354, 7, 6, 0, 0, 3354, 590, 1, 0, 0, 0, 3355, 3356, 7, 16, 0, 0, 3356, 3357, 7, 17, 0, 0, 3357, 3358, 7, 4, 0, 0, 3358, 3359, 7, 17, 0, 0, 3359, 3360, 7, 16, 0, 0, 3360, 3361, 7, 15, 0, 0, 3361, 3362, 7, 16, 0, 0, 3362, 3363, 5, 95, 0, 0, 3363, 3364, 7, 6, 0, 0, 3364, 3365, 7, 22, 0, 0, 3365, 3366, 7, 9, 0, 0, 3366, 3367, 7, 15, 0, 0, 3367, 3368, 7, 3, 0, 0, 3368, 3369, 7, 5, 0, 0, 3369, 3370, 5, 95, 0, 0, 3370, 3371, 7, 16, 0, 0, 3371, 3372, 7, 2, 0, 0, 3372, 3373, 7, 11, 0, 0, 3373, 3374, 7, 7, 0, 0, 3374, 3375, 7, 22, 0, 0, 3375, 592, 1, 0, 0, 0, 3376, 3377, 7, 9, 0, 0, 3377, 3378, 7, 21, 0, 0, 3378, 3379, 7, 10, 0, 0, 3379, 3380, 7, 14, 0, 0, 3380, 3381, 7, 2, 0, 0, 3381, 3382, 7, 11, 0, 0, 3382, 3383, 7, 9, 0, 0, 3383, 3384, 7, 14, 0, 0, 3384, 594, 1, 0, 0, 0, 3385, 3386, 7, 21, 0, 0, 3386, 3387, 7, 22, 0, 0, 3387, 3388, 7, 14, 0, 0, 3388, 3389, 7, 2, 0, 0, 3389, 3390, 7, 6, 0, 0, 3390, 3391, 7, 10, 0, 0, 3391, 3392, 5, 95, 0, 0, 3392, 3393, 7, 6, 0, 0, 3393, 3394, 7, 3, 0, 0, 3394, 3395, 7, 9, 0, 0, 3395, 3396, 7, 21, 0, 0, 3396, 596, 1, 0, 0, 0, 3397, 3398, 7, 21, 0, 0, 3398, 3399, 7, 14, 0, 0, 3399, 3400, 7, 10, 0, 0, 3400, 3401, 7, 19, 0, 0, 3401, 3402, 7, 17, 0, 0, 3402, 3403, 7, 18, 0, 0, 3403, 3404, 5, 95, 0, 0, 3404, 3405, 7, 3, 0, 0, 3405, 3406, 7, 10, 0, 0, 3406, 3407, 7, 4, 0, 0, 3407, 3408, 7, 20, 0, 0, 3408, 3409, 7, 11, 0, 0, 3409, 3410, 7, 22, 0, 0, 3410, 598, 1, 0, 0, 0, 3411, 3412, 7, 26, 0, 0, 3412, 3413, 7, 15, 0, 0, 3413, 3414, 7, 9, 0, 0, 3414, 3415, 7, 11, 0, 0, 3415, 3416, 7, 10, 0, 0, 3416, 3417, 5, 95, 0, 0, 3417, 3418, 7, 2, 0, 0, 3418, 3419, 7, 4, 0, 0, 3419, 3420, 7, 2, 0, 0, 3420, 3421, 7, 3, 0, 0, 3421, 3422, 7, 13, 0, 0, 3422, 3423, 7, 27, 0, 0, 3423, 3424, 7, 10, 0, 0, 3424, 3425, 7, 14, 0, 0, 3425, 600, 1, 0, 0, 0, 3426, 3427, 7, 26, 0, 0, 3427, 3428, 7, 15, 0, 0, 3428, 3429, 7, 9, 0, 0, 3429, 3430, 7, 11, 0, 0, 3430, 3431, 7, 10, 0, 0, 3431, 3432, 5, 95, 0, 0, 3432, 3433, 7, 19, 0, 0, 3433, 3434, 7, 17, 0, 0, 3434, 3435, 7, 10, 0, 0, 3435, 3436, 7, 3, 0, 0, 3436, 3437, 7, 5, 0, 0, 3437, 3438, 5, 95, 0, 0, 3438, 3439, 7, 6, 0, 0, 3439, 3440, 7, 15, 0, 0, 3440, 3441, 7, 19, 0, 0, 3441, 3442, 7, 19, 0, 0, 3442, 3443, 7, 17, 0, 0, 3443, 3444, 7, 18, 0, 0, 3444, 602, 1, 0, 0, 0, 3445, 3446, 7, 14, 0, 0, 3446, 3447, 7, 10, 0, 0, 3447, 3448, 7, 12, 0, 0, 3448, 3449, 7, 14, 0, 0, 3449, 3450, 7, 17, 0, 0, 3450, 3451, 7, 11, 0, 0, 3451, 3452, 7, 10, 0, 0, 3452, 604, 1, 0, 0, 0, 3453, 3454, 7, 6, 0, 0, 3454, 3455, 7, 3, 0, 0, 3455, 3456, 7, 9, 0, 0, 3456, 3457, 7, 21, 0, 0, 3457, 606, 1, 0, 0, 0, 3458, 3459, 7, 11, 0, 0, 3459, 3460, 7, 17, 0, 0, 3460, 3461, 7, 10, 0, 0, 3461, 3462, 5, 95, 0, 0, 3462, 3463, 7, 8, 0, 0, 3463, 3464, 7, 14, 0, 0, 3464, 3465, 7, 10, 0, 0, 3465, 3466, 7, 2, 0, 0, 3466, 3467, 7, 25, 0, 0, 3467, 3468, 7, 10, 0, 0, 3468, 3469, 7, 14, 0, 0, 3469, 608, 1, 0, 0, 0, 3470, 3471, 7, 11, 0, 0, 3471, 3472, 7, 17, 0, 0, 3472, 3473, 7, 16, 0, 0, 3473, 3474, 7, 10, 0, 0, 3474, 3475, 5, 95, 0, 0, 3475, 3476, 7, 27, 0, 0, 3476, 3477, 7, 9, 0, 0, 3477, 3478, 7, 4, 0, 0, 3478, 3479, 7, 10, 0, 0, 3479, 610, 1, 0, 0, 0, 3480, 3481, 7, 11, 0, 0, 3481, 3482, 7, 13, 0, 0, 3482, 3483, 7, 21, 0, 0, 3483, 3484, 7, 10, 0, 0, 3484, 612, 1, 0, 0, 0, 3485, 3486, 7, 27, 0, 0, 3486, 3487, 7, 10, 0, 0, 3487, 3488, 7, 14, 0, 0, 3488, 3489, 7, 9, 0, 0, 3489, 3490, 5, 95, 0, 0, 3490, 3491, 7, 11, 0, 0, 3491, 3492, 7, 10, 0, 0, 3492, 3493, 7, 14, 0, 0, 3493, 3494, 7, 16, 0, 0, 3494, 3495, 7, 6, 0, 0, 3495, 3496, 5, 95, 0, 0, 3496, 3497, 7, 26, 0, 0, 3497, 3498, 7, 15, 0, 0, 3498, 3499, 7, 10, 0, 0, 3499, 3500, 7, 14, 0, 0, 3500, 3501, 7, 13, 0, 0, 3501, 614, 1, 0, 0, 0, 3502, 3503, 7, 22, 0, 0, 3503, 3504, 7, 17, 0, 0, 3504, 3505, 7, 20, 0, 0, 3505, 3506, 7, 22, 0, 0, 3506, 3507, 7, 3, 0, 0, 3507, 3508, 7, 17, 0, 0, 3508, 3509, 7, 20, 0, 0, 3509, 3510, 7, 22, 0, 0, 3510, 3511, 7, 11, 0, 0, 3511, 616, 1, 0, 0, 0, 3512, 3513, 7, 21, 0, 0, 3513, 3514, 7, 14, 0, 0, 3514, 3515, 7, 10, 0, 0, 3515, 3516, 5, 95, 0, 0, 3516, 3517, 7, 11, 0, 0, 3517, 3518, 7, 2, 0, 0, 3518, 3519, 7, 20, 0, 0, 3519, 3520, 7, 6, 0, 0, 3520, 618, 1, 0, 0, 0, 3521, 3522, 7, 21, 0, 0, 3522, 3523, 7, 9, 0, 0, 3523, 3524, 7, 6, 0, 0, 3524, 3525, 7, 11, 0, 0, 3525, 3526, 5, 95, 0, 0, 3526, 3527, 7, 11, 0, 0, 3527, 3528, 7, 2, 0, 0, 3528, 3529, 7, 20, 0, 0, 3529, 3530, 7, 6, 0, 0, 3530, 620, 1, 0, 0, 0, 3531, 3532, 7, 16, 0, 0, 3532, 3533, 7, 2, 0, 0, 3533, 3534, 7, 11, 0, 0, 3534, 3535, 7, 7, 0, 0, 3535, 3536, 7, 22, 0, 0, 3536, 3537, 5, 95, 0, 0, 3537, 3538, 7, 8, 0, 0, 3538, 3539, 7, 9, 0, 0, 3539, 3540, 7, 9, 0, 0, 3540, 3541, 7, 3, 0, 0, 3541, 3542, 5, 95, 0, 0, 3542, 3543, 7, 21, 0, 0, 3543, 3544, 7, 14, 0, 0, 3544, 3545, 7, 10, 0, 0, 3545, 3546, 7, 19, 0, 0, 3546, 3547, 7, 17, 0, 0, 3547, 3548, 7, 18, 0, 0, 3548, 622, 1, 0, 0, 0, 3549, 3550, 5, 42, 0, 0, 3550, 624, 1, 0, 0, 0, 3551, 3552, 5, 47, 0, 0, 3552, 626, 1, 0, 0, 0, 3553, 3554, 5, 37, 0, 0, 3554, 628, 1, 0, 0, 0, 3555, 3556, 5, 43, 0, 0, 3556, 630, 1, 0, 0, 0, 3557, 3558, 5, 45, 0, 0, 3558, 632, 1, 0, 0, 0, 3559, 3560, 7, 5, 0, 0, 3560, 3561, 7, 17, 0, 0, 3561, 3562, 7, 23, 0, 0, 3562, 634, 1, 0, 0, 0, 3563, 3564, 7, 16, 0, 0, 3564, 3565, 7, 9, 0, 0, 3565, 3566, 7, 5, 0, 0, 3566, 636, 1, 0, 0, 0, 3567, 3568, 5, 61, 0, 0, 3568, 638, 1, 0, 0, 0, 3569, 3570, 5, 62, 0, 0, 3570, 640, 1, 0, 0, 0, 3571, 3572, 5, 60, 0, 0, 3572, 642, 1, 0, 0, 0, 3573, 3574, 5, 33, 0, 0, 3574, 644, 1, 0, 0, 0, 3575, 3576, 5, 126, 0, 0, 3576, 646, 1, 0, 0, 0, 3577, 3578, 5, 124, 0, 0, 3578, 648, 1, 0, 0, 0, 3579, 3580, 5, 38, 0, 0, 3580, 650, 1, 0, 0, 0, 3581, 3582, 5, 94, 0, 0, 3582, 652, 1, 0, 0, 0, 3583, 3584, 5, 46, 0, 0, 3584, 654, 1, 0, 0, 0, 3585, 3586, 5, 40, 0, 0, 3586, 656, 1, 0, 0, 0, 3587, 3588, 5, 41, 0, 0, 3588, 658, 1, 0, 0, 0, 3589, 3590, 5, 91, 0, 0, 3590, 660, 1, 0, 0, 0, 3591, 3592, 5, 93, 0, 0, 3592, 662, 1, 0, 0, 0, 3593, 3594, 5, 44, 0, 0, 3594, 664, 1, 0, 0, 0, 3595, 3596, 5, 59, 0, 0, 3596, 666, 1, 0, 0, 0, 3597, 3598, 5, 64, 0, 0, 3598, 668, 1, 0, 0, 0, 3599, 3600, 5, 48, 0, 0, 3600, 670, 1, 0, 0, 0, 3601, 3602, 5, 49, 0, 0, 3602, 672, 1, 0, 0, 0, 3603, 3604, 5, 50, 0, 0, 3604, 674, 1, 0, 0, 0, 3605, 3606, 5, 39, 0, 0, 3606, 676, 1, 0, 0, 0, 3607, 3608, 5, 34, 0, 0, 3608, 678, 1, 0, 0, 0, 3609, 3610, 5, 96, 0, 0, 3610, 680, 1, 0, 0, 0, 3611, 3612, 5, 58, 0, 0, 3612, 682, 1, 0, 0, 0, 3613, 3614, 7, 4, 0, 0, 3614, 3615, 3, 709, 354, 0, 3615, 684, 1, 0, 0, 0, 3616, 3617, 3, 709, 354, 0, 3617, 686, 1, 0, 0, 0, 3618, 3620, 3, 715, 357, 0, 3619, 3618, 1, 0, 0, 0, 3620, 3621, 1, 0, 0, 0, 3621, 3619, 1, 0, 0, 0, 3621, 3622, 1, 0, 0, 0, 3622, 688, 1, 0, 0, 0, 3623, 3624, 7, 18, 0, 0, 3624, 3628, 5, 39, 0, 0, 3625, 3626, 3, 713, 356, 0, 3626, 3627, 3, 713, 356, 0, 3627, 3629, 1, 0, 0, 0, 3628, 3625, 1, 0, 0, 0, 3629, 3630, 1, 0, 0, 0, 3630, 3628, 1, 0, 0, 0, 3630, 3631, 1, 0, 0, 0, 3631, 3632, 1, 0, 0, 0, 3632, 3633, 5, 39, 0, 0, 3633, 3643, 1, 0, 0, 0, 3634, 3635, 5, 48, 0, 0, 3635, 3636, 7, 18, 0, 0, 3636, 3638, 1, 0, 0, 0, 3637, 3639, 3, 713, 356, 0, 3638, 3637, 1, 0, 0, 0, 3639, 3640, 1, 0, 0, 0, 3640, 3638, 1, 0, 0, 0, 3640, 3641, 1, 0, 0, 0, 3641, 3643, 1, 0, 0, 0, 3642, 3623, 1, 0, 0, 0, 3642, 3634, 1, 0, 0, 0, 3643, 690, 1, 0, 0, 0, 3644, 3646, 3, 715, 357, 0, 3645, 3644, 1, 0, 0, 0, 3646, 3647, 1, 0, 0, 0, 3647, 3645, 1, 0, 0, 0, 3647, 3648, 1, 0, 0, 0, 3648, 3650, 1, 0, 0, 0, 3649, 3645, 1, 0, 0, 0, 3649, 3650, 1, 0, 0, 0, 3650, 3651, 1, 0, 0, 0, 3651, 3653, 5, 46, 0, 0, 3652, 3654, 3, 715, 357, 0, 3653, 3652, 1, 0, 0, 0, 3654, 3655, 1, 0, 0, 0, 3655, 3653, 1, 0, 0, 0, 3655, 3656, 1, 0, 0, 0, 3656, 3688, 1, 0, 0, 0, 3657, 3659, 3, 715, 357, 0, 3658, 3657, 1, 0, 0, 0, 3659, 3660, 1, 0, 0, 0, 3660, 3658, 1, 0, 0, 0, 3660, 3661, 1, 0, 0, 0, 3661, 3662, 1, 0, 0, 0, 3662, 3663, 5, 46, 0, 0, 3663, 3664, 3, 703, 351, 0, 3664, 3688, 1, 0, 0, 0, 3665, 3667, 3, 715, 357, 0, 3666, 3665, 1, 0, 0, 0, 3667, 3668, 1, 0, 0, 0, 3668, 3666, 1, 0, 0, 0, 3668, 3669, 1, 0, 0, 0, 3669, 3671, 1, 0, 0, 0, 3670, 3666, 1, 0, 0, 0, 3670, 3671, 1, 0, 0, 0, 3671, 3672, 1, 0, 0, 0, 3672, 3674, 5, 46, 0, 0, 3673, 3675, 3, 715, 357, 0, 3674, 3673, 1, 0, 0, 0, 3675, 3676, 1, 0, 0, 0, 3676, 3674, 1, 0, 0, 0, 3676, 3677, 1, 0, 0, 0, 3677, 3678, 1, 0, 0, 0, 3678, 3679, 3, 703, 351, 0, 3679, 3688, 1, 0, 0, 0, 3680, 3682, 3, 715, 357, 0, 3681, 3680, 1, 0, 0, 0, 3682, 3683, 1, 0, 0, 0, 3683, 3681, 1, 0, 0, 0, 3683, 3684, 1, 0, 0, 0, 3684, 3685, 1, 0, 0, 0, 3685, 3686, 3, 703, 351, 0, 3686, 3688, 1, 0, 0, 0, 3687, 3649, 1, 0, 0, 0, 3687, 3658, 1, 0, 0, 0, 3687, 3670, 1, 0, 0, 0, 3687, 3681, 1, 0, 0, 0, 3688, 692, 1, 0, 0, 0, 3689, 3690, 5, 92, 0, 0, 3690, 3691, 7, 4, 0, 0, 3691, 694, 1, 0, 0, 0, 3692, 3693, 3, 717, 358, 0, 3693, 696, 1, 0, 0, 0, 3694, 3695, 3, 705, 352, 0, 3695, 698, 1, 0, 0, 0, 3696, 3697, 3, 707, 353, 0, 3697, 700, 1, 0, 0, 0, 3698, 3699, 3, 711, 355, 0, 3699, 702, 1, 0, 0, 0, 3700, 3702, 7, 10, 0, 0, 3701, 3703, 7, 28, 0, 0, 3702, 3701, 1, 0, 0, 0, 3702, 3703, 1, 0, 0, 0, 3703, 3705, 1, 0, 0, 0, 3704, 3706, 3, 715, 357, 0, 3705, 3704, 1, 0, 0, 0, 3706, 3707, 1, 0, 0, 0, 3707, 3705, 1, 0, 0, 0, 3707, 3708, 1, 0, 0, 0, 3708, 704, 1, 0, 0, 0, 3709, 3711, 7, 29, 0, 0, 3710, 3709, 1, 0, 0, 0, 3711, 3712, 1, 0, 0, 0, 3712, 3710, 1, 0, 0, 0, 3712, 3713, 1, 0, 0, 0, 3713, 3717, 1, 0, 0, 0, 3714, 3716, 7, 30, 0, 0, 3715, 3714, 1, 0, 0, 0, 3716, 3719, 1, 0, 0, 0, 3717, 3715, 1, 0, 0, 0, 3717, 3718, 1, 0, 0, 0, 3718, 706, 1, 0, 0, 0, 3719, 3717, 1, 0, 0, 0, 3720, 3728, 5, 34, 0, 0, 3721, 3722, 5, 92, 0, 0, 3722, 3727, 9, 0, 0, 0, 3723, 3724, 5, 34, 0, 0, 3724, 3727, 5, 34, 0, 0, 3725, 3727, 8, 31, 0, 0, 3726, 3721, 1, 0, 0, 0, 3726, 3723, 1, 0, 0, 0, 3726, 3725, 1, 0, 0, 0, 3727, 3730, 1, 0, 0, 0, 3728, 3726, 1, 0, 0, 0, 3728, 3729, 1, 0, 0, 0, 3729, 3731, 1, 0, 0, 0, 3730, 3728, 1, 0, 0, 0, 3731, 3732, 5, 34, 0, 0, 3732, 708, 1, 0, 0, 0, 3733, 3741, 5, 39, 0, 0, 3734, 3735, 5, 92, 0, 0, 3735, 3740, 9, 0, 0, 0, 3736, 3737, 5, 39, 0, 0, 3737, 3740, 5, 39, 0, 0, 3738, 3740, 8, 32, 0, 0, 3739, 3734, 1, 0, 0, 0, 3739, 3736, 1, 0, 0, 0, 3739, 3738, 1, 0, 0, 0, 3740, 3743, 1, 0, 0, 0, 3741, 3739, 1, 0, 0, 0, 3741, 3742, 1, 0, 0, 0, 3742, 3744, 1, 0, 0, 0, 3743, 3741, 1, 0, 0, 0, 3744, 3745, 5, 39, 0, 0, 3745, 710, 1, 0, 0, 0, 3746, 3754, 5, 96, 0, 0, 3747, 3748, 5, 92, 0, 0, 3748, 3753, 9, 0, 0, 0, 3749, 3750, 5, 96, 0, 0, 3750, 3753, 5, 96, 0, 0, 3751, 3753, 8, 33, 0, 0, 3752, 3747, 1, 0, 0, 0, 3752, 3749, 1, 0, 0, 0, 3752, 3751, 1, 0, 0, 0, 3753, 3756, 1, 0, 0, 0, 3754, 3752, 1, 0, 0, 0, 3754, 3755, 1, 0, 0, 0, 3755, 3757, 1, 0, 0, 0, 3756, 3754, 1, 0, 0, 0, 3757, 3758, 5, 96, 0, 0, 3758, 712, 1, 0, 0, 0, 3759, 3760, 7, 34, 0, 0, 3760, 714, 1, 0, 0, 0, 3761, 3762, 7, 35, 0, 0, 3762, 716, 1, 0, 0, 0, 3763, 3764, 7, 8, 0, 0, 3764, 3766, 5, 39, 0, 0, 3765, 3767, 7, 36, 0, 0, 3766, 3765, 1, 0, 0, 0, 3767, 3768, 1, 0, 0, 0, 3768, 3766, 1, 0, 0, 0, 3768, 3769, 1, 0, 0, 0, 3769, 3770, 1, 0, 0, 0, 3770, 3771, 5, 39, 0, 0, 3771, 718, 1, 0, 0, 0, 3772, 3773, 9, 0, 0, 0, 3773, 3774, 1, 0, 0, 0, 3774, 3775, 6, 359, 2, 0, 3775, 720, 1, 0, 0, 0, 35, 0, 724, 735, 748, 760, 765, 769, 773, 779, 783, 785, 3621, 3630, 3640, 3642, 3647, 3649, 3655, 3660, 3668, 3670, 3676, 3683, 3687, 3702, 3707, 3712, 3717, 3726, 3728, 3739, 3741, 3752, 3754, 3768, 3, 0, 1, 0, 0, 2, 0, 0, 3, 0] \ No newline at end of file diff --git a/src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLLexer.tokens b/src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLLexer.tokens new file mode 100644 index 000000000000..80703f8b9ac0 --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLLexer.tokens @@ -0,0 +1,689 @@ +SPACE=1 +SPEC_SQL_COMMENT=2 +COMMENT_INPUT=3 +LINE_COMMENT=4 +ALL=5 +AND=6 +AS=7 +ASC=8 +BOOLEAN=9 +BETWEEN=10 +BY=11 +CASE=12 +CAST=13 +CROSS=14 +COLUMNS=15 +DATETIME=16 +DELETE=17 +DESC=18 +DESCRIBE=19 +DISTINCT=20 +DOUBLE=21 +ELSE=22 +EXISTS=23 +FALSE=24 +FLOAT=25 +FIRST=26 +FROM=27 +GROUP=28 +HAVING=29 +IN=30 +INNER=31 +INT=32 +INTEGER=33 +IS=34 +JOIN=35 +LAST=36 +LEFT=37 +LIKE=38 +LIMIT=39 +LONG=40 +MATCH=41 +NATURAL=42 +MISSING_LITERAL=43 +NOT=44 +NULL_LITERAL=45 +NULLS=46 +ON=47 +OR=48 +ORDER=49 +OUTER=50 +OVER=51 +PARTITION=52 +REGEXP=53 +RIGHT=54 +SELECT=55 +SHOW=56 +STRING=57 +THEN=58 +TRUE=59 +UNION=60 +USING=61 +WHEN=62 +WHERE=63 +EXCEPT=64 +AVG=65 +COUNT=66 +MAX=67 +MIN=68 +SUM=69 +VAR_POP=70 +VAR_SAMP=71 +VARIANCE=72 +STD=73 +STDDEV=74 +STDDEV_POP=75 +STDDEV_SAMP=76 +SUBSTRING=77 +TRIM=78 +END=79 +FULL=80 +OFFSET=81 +INTERVAL=82 +MICROSECOND=83 +SECOND=84 +MINUTE=85 +HOUR=86 +DAY=87 +WEEK=88 +MONTH=89 +QUARTER=90 +YEAR=91 +SECOND_MICROSECOND=92 +MINUTE_MICROSECOND=93 +MINUTE_SECOND=94 +HOUR_MICROSECOND=95 +HOUR_SECOND=96 +HOUR_MINUTE=97 +DAY_MICROSECOND=98 +DAY_SECOND=99 +DAY_MINUTE=100 +DAY_HOUR=101 +YEAR_MONTH=102 +TABLES=103 +ABS=104 +ACOS=105 +ADD=106 +ADDTIME=107 +ASCII=108 +ASIN=109 +ATAN=110 +ATAN2=111 +CBRT=112 +CEIL=113 +CEILING=114 +CONCAT=115 +CONCAT_WS=116 +CONV=117 +CONVERT_TZ=118 +COS=119 +COSH=120 +COT=121 +CRC32=122 +CURDATE=123 +CURTIME=124 +CURRENT_DATE=125 +CURRENT_TIME=126 +CURRENT_TIMESTAMP=127 +DATE=128 +DATE_ADD=129 +DATE_FORMAT=130 +DATE_SUB=131 +DATEDIFF=132 +DAYNAME=133 +DAYOFMONTH=134 +DAYOFWEEK=135 +DAYOFYEAR=136 +DEGREES=137 +DIVIDE=138 +E=139 +EXP=140 +EXPM1=141 +EXTRACT=142 +FLOOR=143 +FROM_DAYS=144 +FROM_UNIXTIME=145 +GET_FORMAT=146 +IF=147 +IFNULL=148 +ISNULL=149 +LAST_DAY=150 +LENGTH=151 +LN=152 +LOCALTIME=153 +LOCALTIMESTAMP=154 +LOCATE=155 +LOG=156 +LOG10=157 +LOG2=158 +LOWER=159 +LTRIM=160 +MAKEDATE=161 +MAKETIME=162 +MODULUS=163 +MONTHNAME=164 +MULTIPLY=165 +NOW=166 +NULLIF=167 +PERIOD_ADD=168 +PERIOD_DIFF=169 +PI=170 +POSITION=171 +POW=172 +POWER=173 +RADIANS=174 +RAND=175 +REPLACE=176 +RINT=177 +ROUND=178 +RTRIM=179 +REVERSE=180 +SEC_TO_TIME=181 +SIGN=182 +SIGNUM=183 +SIN=184 +SINH=185 +SQRT=186 +STR_TO_DATE=187 +SUBDATE=188 +SUBTIME=189 +SUBTRACT=190 +SYSDATE=191 +TAN=192 +TIME=193 +TIMEDIFF=194 +TIME_FORMAT=195 +TIME_TO_SEC=196 +TIMESTAMP=197 +TRUNCATE=198 +TO_DAYS=199 +TO_SECONDS=200 +UNIX_TIMESTAMP=201 +UPPER=202 +UTC_DATE=203 +UTC_TIME=204 +UTC_TIMESTAMP=205 +D=206 +T=207 +TS=208 +LEFT_BRACE=209 +RIGHT_BRACE=210 +DENSE_RANK=211 +RANK=212 +ROW_NUMBER=213 +DATE_HISTOGRAM=214 +DAY_OF_MONTH=215 +DAY_OF_YEAR=216 +DAY_OF_WEEK=217 +EXCLUDE=218 +EXTENDED_STATS=219 +FIELD=220 +FILTER=221 +GEO_BOUNDING_BOX=222 +GEO_CELL=223 +GEO_DISTANCE=224 +GEO_DISTANCE_RANGE=225 +GEO_INTERSECTS=226 +GEO_POLYGON=227 +HISTOGRAM=228 +HOUR_OF_DAY=229 +INCLUDE=230 +IN_TERMS=231 +MATCHPHRASE=232 +MATCH_PHRASE=233 +MATCHPHRASEQUERY=234 +SIMPLE_QUERY_STRING=235 +QUERY_STRING=236 +MATCH_PHRASE_PREFIX=237 +MATCHQUERY=238 +MATCH_QUERY=239 +MINUTE_OF_DAY=240 +MINUTE_OF_HOUR=241 +MONTH_OF_YEAR=242 +MULTIMATCH=243 +MULTI_MATCH=244 +MULTIMATCHQUERY=245 +NESTED=246 +PERCENTILES=247 +PERCENTILE=248 +PERCENTILE_APPROX=249 +REGEXP_QUERY=250 +REVERSE_NESTED=251 +QUERY=252 +RANGE=253 +SCORE=254 +SCOREQUERY=255 +SCORE_QUERY=256 +SECOND_OF_MINUTE=257 +STATS=258 +TERM=259 +TERMS=260 +TIMESTAMPADD=261 +TIMESTAMPDIFF=262 +TOPHITS=263 +TYPEOF=264 +WEEK_OF_YEAR=265 +WEEKOFYEAR=266 +WEEKDAY=267 +WILDCARDQUERY=268 +WILDCARD_QUERY=269 +SUBSTR=270 +STRCMP=271 +ADDDATE=272 +YEARWEEK=273 +ALLOW_LEADING_WILDCARD=274 +ANALYZER=275 +ANALYZE_WILDCARD=276 +AUTO_GENERATE_SYNONYMS_PHRASE_QUERY=277 +BOOST=278 +CASE_INSENSITIVE=279 +CUTOFF_FREQUENCY=280 +DEFAULT_FIELD=281 +DEFAULT_OPERATOR=282 +ESCAPE=283 +ENABLE_POSITION_INCREMENTS=284 +FIELDS=285 +FLAGS=286 +FUZZINESS=287 +FUZZY_MAX_EXPANSIONS=288 +FUZZY_PREFIX_LENGTH=289 +FUZZY_REWRITE=290 +FUZZY_TRANSPOSITIONS=291 +LENIENT=292 +LOW_FREQ_OPERATOR=293 +MAX_DETERMINIZED_STATES=294 +MAX_EXPANSIONS=295 +MINIMUM_SHOULD_MATCH=296 +OPERATOR=297 +PHRASE_SLOP=298 +PREFIX_LENGTH=299 +QUOTE_ANALYZER=300 +QUOTE_FIELD_SUFFIX=301 +REWRITE=302 +SLOP=303 +TIE_BREAKER=304 +TIME_ZONE=305 +TYPE=306 +ZERO_TERMS_QUERY=307 +HIGHLIGHT=308 +HIGHLIGHT_PRE_TAGS=309 +HIGHLIGHT_POST_TAGS=310 +MATCH_BOOL_PREFIX=311 +STAR=312 +SLASH=313 +MODULE=314 +PLUS=315 +MINUS=316 +DIV=317 +MOD=318 +EQUAL_SYMBOL=319 +GREATER_SYMBOL=320 +LESS_SYMBOL=321 +EXCLAMATION_SYMBOL=322 +BIT_NOT_OP=323 +BIT_OR_OP=324 +BIT_AND_OP=325 +BIT_XOR_OP=326 +DOT=327 +LR_BRACKET=328 +RR_BRACKET=329 +LT_SQR_PRTHS=330 +RT_SQR_PRTHS=331 +COMMA=332 +SEMI=333 +AT_SIGN=334 +ZERO_DECIMAL=335 +ONE_DECIMAL=336 +TWO_DECIMAL=337 +SINGLE_QUOTE_SYMB=338 +DOUBLE_QUOTE_SYMB=339 +REVERSE_QUOTE_SYMB=340 +COLON_SYMB=341 +START_NATIONAL_STRING_LITERAL=342 +STRING_LITERAL=343 +DECIMAL_LITERAL=344 +HEXADECIMAL_LITERAL=345 +REAL_LITERAL=346 +NULL_SPEC_LITERAL=347 +BIT_STRING=348 +ID=349 +DOUBLE_QUOTE_ID=350 +BACKTICK_QUOTE_ID=351 +ERROR_RECOGNITION=352 +'ALL'=5 +'AND'=6 +'AS'=7 +'ASC'=8 +'BOOLEAN'=9 +'BETWEEN'=10 +'BY'=11 +'CASE'=12 +'CAST'=13 +'CROSS'=14 +'COLUMNS'=15 +'DATETIME'=16 +'DELETE'=17 +'DESC'=18 +'DESCRIBE'=19 +'DISTINCT'=20 +'DOUBLE'=21 +'ELSE'=22 +'EXISTS'=23 +'FALSE'=24 +'FLOAT'=25 +'FIRST'=26 +'FROM'=27 +'GROUP'=28 +'HAVING'=29 +'IN'=30 +'INNER'=31 +'INT'=32 +'INTEGER'=33 +'IS'=34 +'JOIN'=35 +'LAST'=36 +'LEFT'=37 +'LIKE'=38 +'LIMIT'=39 +'LONG'=40 +'MATCH'=41 +'NATURAL'=42 +'MISSING'=43 +'NOT'=44 +'NULL'=45 +'NULLS'=46 +'ON'=47 +'OR'=48 +'ORDER'=49 +'OUTER'=50 +'OVER'=51 +'PARTITION'=52 +'REGEXP'=53 +'RIGHT'=54 +'SELECT'=55 +'SHOW'=56 +'STRING'=57 +'THEN'=58 +'TRUE'=59 +'UNION'=60 +'USING'=61 +'WHEN'=62 +'WHERE'=63 +'MINUS'=64 +'AVG'=65 +'COUNT'=66 +'MAX'=67 +'MIN'=68 +'SUM'=69 +'VAR_POP'=70 +'VAR_SAMP'=71 +'VARIANCE'=72 +'STD'=73 +'STDDEV'=74 +'STDDEV_POP'=75 +'STDDEV_SAMP'=76 +'SUBSTRING'=77 +'TRIM'=78 +'END'=79 +'FULL'=80 +'OFFSET'=81 +'INTERVAL'=82 +'MICROSECOND'=83 +'SECOND'=84 +'MINUTE'=85 +'HOUR'=86 +'DAY'=87 +'WEEK'=88 +'MONTH'=89 +'QUARTER'=90 +'YEAR'=91 +'SECOND_MICROSECOND'=92 +'MINUTE_MICROSECOND'=93 +'MINUTE_SECOND'=94 +'HOUR_MICROSECOND'=95 +'HOUR_SECOND'=96 +'HOUR_MINUTE'=97 +'DAY_MICROSECOND'=98 +'DAY_SECOND'=99 +'DAY_MINUTE'=100 +'DAY_HOUR'=101 +'YEAR_MONTH'=102 +'TABLES'=103 +'ABS'=104 +'ACOS'=105 +'ADD'=106 +'ADDTIME'=107 +'ASCII'=108 +'ASIN'=109 +'ATAN'=110 +'ATAN2'=111 +'CBRT'=112 +'CEIL'=113 +'CEILING'=114 +'CONCAT'=115 +'CONCAT_WS'=116 +'CONV'=117 +'CONVERT_TZ'=118 +'COS'=119 +'COSH'=120 +'COT'=121 +'CRC32'=122 +'CURDATE'=123 +'CURTIME'=124 +'CURRENT_DATE'=125 +'CURRENT_TIME'=126 +'CURRENT_TIMESTAMP'=127 +'DATE'=128 +'DATE_ADD'=129 +'DATE_FORMAT'=130 +'DATE_SUB'=131 +'DATEDIFF'=132 +'DAYNAME'=133 +'DAYOFMONTH'=134 +'DAYOFWEEK'=135 +'DAYOFYEAR'=136 +'DEGREES'=137 +'DIVIDE'=138 +'E'=139 +'EXP'=140 +'EXPM1'=141 +'EXTRACT'=142 +'FLOOR'=143 +'FROM_DAYS'=144 +'FROM_UNIXTIME'=145 +'GET_FORMAT'=146 +'IF'=147 +'IFNULL'=148 +'ISNULL'=149 +'LAST_DAY'=150 +'LENGTH'=151 +'LN'=152 +'LOCALTIME'=153 +'LOCALTIMESTAMP'=154 +'LOCATE'=155 +'LOG'=156 +'LOG10'=157 +'LOG2'=158 +'LOWER'=159 +'LTRIM'=160 +'MAKEDATE'=161 +'MAKETIME'=162 +'MODULUS'=163 +'MONTHNAME'=164 +'MULTIPLY'=165 +'NOW'=166 +'NULLIF'=167 +'PERIOD_ADD'=168 +'PERIOD_DIFF'=169 +'PI'=170 +'POSITION'=171 +'POW'=172 +'POWER'=173 +'RADIANS'=174 +'RAND'=175 +'REPLACE'=176 +'RINT'=177 +'ROUND'=178 +'RTRIM'=179 +'REVERSE'=180 +'SEC_TO_TIME'=181 +'SIGN'=182 +'SIGNUM'=183 +'SIN'=184 +'SINH'=185 +'SQRT'=186 +'STR_TO_DATE'=187 +'SUBDATE'=188 +'SUBTIME'=189 +'SUBTRACT'=190 +'SYSDATE'=191 +'TAN'=192 +'TIME'=193 +'TIMEDIFF'=194 +'TIME_FORMAT'=195 +'TIME_TO_SEC'=196 +'TIMESTAMP'=197 +'TRUNCATE'=198 +'TO_DAYS'=199 +'TO_SECONDS'=200 +'UNIX_TIMESTAMP'=201 +'UPPER'=202 +'UTC_DATE'=203 +'UTC_TIME'=204 +'UTC_TIMESTAMP'=205 +'D'=206 +'T'=207 +'TS'=208 +'{'=209 +'}'=210 +'DENSE_RANK'=211 +'RANK'=212 +'ROW_NUMBER'=213 +'DATE_HISTOGRAM'=214 +'DAY_OF_MONTH'=215 +'DAY_OF_YEAR'=216 +'DAY_OF_WEEK'=217 +'EXCLUDE'=218 +'EXTENDED_STATS'=219 +'FIELD'=220 +'FILTER'=221 +'GEO_BOUNDING_BOX'=222 +'GEO_CELL'=223 +'GEO_DISTANCE'=224 +'GEO_DISTANCE_RANGE'=225 +'GEO_INTERSECTS'=226 +'GEO_POLYGON'=227 +'HISTOGRAM'=228 +'HOUR_OF_DAY'=229 +'INCLUDE'=230 +'IN_TERMS'=231 +'MATCHPHRASE'=232 +'MATCH_PHRASE'=233 +'MATCHPHRASEQUERY'=234 +'SIMPLE_QUERY_STRING'=235 +'QUERY_STRING'=236 +'MATCH_PHRASE_PREFIX'=237 +'MATCHQUERY'=238 +'MATCH_QUERY'=239 +'MINUTE_OF_DAY'=240 +'MINUTE_OF_HOUR'=241 +'MONTH_OF_YEAR'=242 +'MULTIMATCH'=243 +'MULTI_MATCH'=244 +'MULTIMATCHQUERY'=245 +'NESTED'=246 +'PERCENTILES'=247 +'PERCENTILE'=248 +'PERCENTILE_APPROX'=249 +'REGEXP_QUERY'=250 +'REVERSE_NESTED'=251 +'QUERY'=252 +'RANGE'=253 +'SCORE'=254 +'SCOREQUERY'=255 +'SCORE_QUERY'=256 +'SECOND_OF_MINUTE'=257 +'STATS'=258 +'TERM'=259 +'TERMS'=260 +'TIMESTAMPADD'=261 +'TIMESTAMPDIFF'=262 +'TOPHITS'=263 +'TYPEOF'=264 +'WEEK_OF_YEAR'=265 +'WEEKOFYEAR'=266 +'WEEKDAY'=267 +'WILDCARDQUERY'=268 +'WILDCARD_QUERY'=269 +'SUBSTR'=270 +'STRCMP'=271 +'ADDDATE'=272 +'YEARWEEK'=273 +'ALLOW_LEADING_WILDCARD'=274 +'ANALYZER'=275 +'ANALYZE_WILDCARD'=276 +'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY'=277 +'BOOST'=278 +'CASE_INSENSITIVE'=279 +'CUTOFF_FREQUENCY'=280 +'DEFAULT_FIELD'=281 +'DEFAULT_OPERATOR'=282 +'ESCAPE'=283 +'ENABLE_POSITION_INCREMENTS'=284 +'FIELDS'=285 +'FLAGS'=286 +'FUZZINESS'=287 +'FUZZY_MAX_EXPANSIONS'=288 +'FUZZY_PREFIX_LENGTH'=289 +'FUZZY_REWRITE'=290 +'FUZZY_TRANSPOSITIONS'=291 +'LENIENT'=292 +'LOW_FREQ_OPERATOR'=293 +'MAX_DETERMINIZED_STATES'=294 +'MAX_EXPANSIONS'=295 +'MINIMUM_SHOULD_MATCH'=296 +'OPERATOR'=297 +'PHRASE_SLOP'=298 +'PREFIX_LENGTH'=299 +'QUOTE_ANALYZER'=300 +'QUOTE_FIELD_SUFFIX'=301 +'REWRITE'=302 +'SLOP'=303 +'TIE_BREAKER'=304 +'TIME_ZONE'=305 +'TYPE'=306 +'ZERO_TERMS_QUERY'=307 +'HIGHLIGHT'=308 +'PRE_TAGS'=309 +'POST_TAGS'=310 +'MATCH_BOOL_PREFIX'=311 +'*'=312 +'/'=313 +'%'=314 +'+'=315 +'-'=316 +'DIV'=317 +'MOD'=318 +'='=319 +'>'=320 +'<'=321 +'!'=322 +'~'=323 +'|'=324 +'&'=325 +'^'=326 +'.'=327 +'('=328 +')'=329 +'['=330 +']'=331 +','=332 +';'=333 +'@'=334 +'0'=335 +'1'=336 +'2'=337 +'\''=338 +'"'=339 +'`'=340 +':'=341 diff --git a/src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLLexer.ts b/src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLLexer.ts new file mode 100644 index 000000000000..04d34c005292 --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLLexer.ts @@ -0,0 +1,2027 @@ +// Generated from ./src/plugins/data/public/antlr/opensearch_sql/grammar/OpenSearchSQLLexer.g4 by ANTLR 4.13.1 + +import * as antlr from "antlr4ng"; +import { Token } from "antlr4ng"; + + +export class OpenSearchSQLLexer extends antlr.Lexer { + public static readonly SPACE = 1; + public static readonly SPEC_SQL_COMMENT = 2; + public static readonly COMMENT_INPUT = 3; + public static readonly LINE_COMMENT = 4; + public static readonly ALL = 5; + public static readonly AND = 6; + public static readonly AS = 7; + public static readonly ASC = 8; + public static readonly BOOLEAN = 9; + public static readonly BETWEEN = 10; + public static readonly BY = 11; + public static readonly CASE = 12; + public static readonly CAST = 13; + public static readonly CROSS = 14; + public static readonly COLUMNS = 15; + public static readonly DATETIME = 16; + public static readonly DELETE = 17; + public static readonly DESC = 18; + public static readonly DESCRIBE = 19; + public static readonly DISTINCT = 20; + public static readonly DOUBLE = 21; + public static readonly ELSE = 22; + public static readonly EXISTS = 23; + public static readonly FALSE = 24; + public static readonly FLOAT = 25; + public static readonly FIRST = 26; + public static readonly FROM = 27; + public static readonly GROUP = 28; + public static readonly HAVING = 29; + public static readonly IN = 30; + public static readonly INNER = 31; + public static readonly INT = 32; + public static readonly INTEGER = 33; + public static readonly IS = 34; + public static readonly JOIN = 35; + public static readonly LAST = 36; + public static readonly LEFT = 37; + public static readonly LIKE = 38; + public static readonly LIMIT = 39; + public static readonly LONG = 40; + public static readonly MATCH = 41; + public static readonly NATURAL = 42; + public static readonly MISSING_LITERAL = 43; + public static readonly NOT = 44; + public static readonly NULL_LITERAL = 45; + public static readonly NULLS = 46; + public static readonly ON = 47; + public static readonly OR = 48; + public static readonly ORDER = 49; + public static readonly OUTER = 50; + public static readonly OVER = 51; + public static readonly PARTITION = 52; + public static readonly REGEXP = 53; + public static readonly RIGHT = 54; + public static readonly SELECT = 55; + public static readonly SHOW = 56; + public static readonly STRING = 57; + public static readonly THEN = 58; + public static readonly TRUE = 59; + public static readonly UNION = 60; + public static readonly USING = 61; + public static readonly WHEN = 62; + public static readonly WHERE = 63; + public static readonly EXCEPT = 64; + public static readonly AVG = 65; + public static readonly COUNT = 66; + public static readonly MAX = 67; + public static readonly MIN = 68; + public static readonly SUM = 69; + public static readonly VAR_POP = 70; + public static readonly VAR_SAMP = 71; + public static readonly VARIANCE = 72; + public static readonly STD = 73; + public static readonly STDDEV = 74; + public static readonly STDDEV_POP = 75; + public static readonly STDDEV_SAMP = 76; + public static readonly SUBSTRING = 77; + public static readonly TRIM = 78; + public static readonly END = 79; + public static readonly FULL = 80; + public static readonly OFFSET = 81; + public static readonly INTERVAL = 82; + public static readonly MICROSECOND = 83; + public static readonly SECOND = 84; + public static readonly MINUTE = 85; + public static readonly HOUR = 86; + public static readonly DAY = 87; + public static readonly WEEK = 88; + public static readonly MONTH = 89; + public static readonly QUARTER = 90; + public static readonly YEAR = 91; + public static readonly SECOND_MICROSECOND = 92; + public static readonly MINUTE_MICROSECOND = 93; + public static readonly MINUTE_SECOND = 94; + public static readonly HOUR_MICROSECOND = 95; + public static readonly HOUR_SECOND = 96; + public static readonly HOUR_MINUTE = 97; + public static readonly DAY_MICROSECOND = 98; + public static readonly DAY_SECOND = 99; + public static readonly DAY_MINUTE = 100; + public static readonly DAY_HOUR = 101; + public static readonly YEAR_MONTH = 102; + public static readonly TABLES = 103; + public static readonly ABS = 104; + public static readonly ACOS = 105; + public static readonly ADD = 106; + public static readonly ADDTIME = 107; + public static readonly ASCII = 108; + public static readonly ASIN = 109; + public static readonly ATAN = 110; + public static readonly ATAN2 = 111; + public static readonly CBRT = 112; + public static readonly CEIL = 113; + public static readonly CEILING = 114; + public static readonly CONCAT = 115; + public static readonly CONCAT_WS = 116; + public static readonly CONV = 117; + public static readonly CONVERT_TZ = 118; + public static readonly COS = 119; + public static readonly COSH = 120; + public static readonly COT = 121; + public static readonly CRC32 = 122; + public static readonly CURDATE = 123; + public static readonly CURTIME = 124; + public static readonly CURRENT_DATE = 125; + public static readonly CURRENT_TIME = 126; + public static readonly CURRENT_TIMESTAMP = 127; + public static readonly DATE = 128; + public static readonly DATE_ADD = 129; + public static readonly DATE_FORMAT = 130; + public static readonly DATE_SUB = 131; + public static readonly DATEDIFF = 132; + public static readonly DAYNAME = 133; + public static readonly DAYOFMONTH = 134; + public static readonly DAYOFWEEK = 135; + public static readonly DAYOFYEAR = 136; + public static readonly DEGREES = 137; + public static readonly DIVIDE = 138; + public static readonly E = 139; + public static readonly EXP = 140; + public static readonly EXPM1 = 141; + public static readonly EXTRACT = 142; + public static readonly FLOOR = 143; + public static readonly FROM_DAYS = 144; + public static readonly FROM_UNIXTIME = 145; + public static readonly GET_FORMAT = 146; + public static readonly IF = 147; + public static readonly IFNULL = 148; + public static readonly ISNULL = 149; + public static readonly LAST_DAY = 150; + public static readonly LENGTH = 151; + public static readonly LN = 152; + public static readonly LOCALTIME = 153; + public static readonly LOCALTIMESTAMP = 154; + public static readonly LOCATE = 155; + public static readonly LOG = 156; + public static readonly LOG10 = 157; + public static readonly LOG2 = 158; + public static readonly LOWER = 159; + public static readonly LTRIM = 160; + public static readonly MAKEDATE = 161; + public static readonly MAKETIME = 162; + public static readonly MODULUS = 163; + public static readonly MONTHNAME = 164; + public static readonly MULTIPLY = 165; + public static readonly NOW = 166; + public static readonly NULLIF = 167; + public static readonly PERIOD_ADD = 168; + public static readonly PERIOD_DIFF = 169; + public static readonly PI = 170; + public static readonly POSITION = 171; + public static readonly POW = 172; + public static readonly POWER = 173; + public static readonly RADIANS = 174; + public static readonly RAND = 175; + public static readonly REPLACE = 176; + public static readonly RINT = 177; + public static readonly ROUND = 178; + public static readonly RTRIM = 179; + public static readonly REVERSE = 180; + public static readonly SEC_TO_TIME = 181; + public static readonly SIGN = 182; + public static readonly SIGNUM = 183; + public static readonly SIN = 184; + public static readonly SINH = 185; + public static readonly SQRT = 186; + public static readonly STR_TO_DATE = 187; + public static readonly SUBDATE = 188; + public static readonly SUBTIME = 189; + public static readonly SUBTRACT = 190; + public static readonly SYSDATE = 191; + public static readonly TAN = 192; + public static readonly TIME = 193; + public static readonly TIMEDIFF = 194; + public static readonly TIME_FORMAT = 195; + public static readonly TIME_TO_SEC = 196; + public static readonly TIMESTAMP = 197; + public static readonly TRUNCATE = 198; + public static readonly TO_DAYS = 199; + public static readonly TO_SECONDS = 200; + public static readonly UNIX_TIMESTAMP = 201; + public static readonly UPPER = 202; + public static readonly UTC_DATE = 203; + public static readonly UTC_TIME = 204; + public static readonly UTC_TIMESTAMP = 205; + public static readonly D = 206; + public static readonly T = 207; + public static readonly TS = 208; + public static readonly LEFT_BRACE = 209; + public static readonly RIGHT_BRACE = 210; + public static readonly DENSE_RANK = 211; + public static readonly RANK = 212; + public static readonly ROW_NUMBER = 213; + public static readonly DATE_HISTOGRAM = 214; + public static readonly DAY_OF_MONTH = 215; + public static readonly DAY_OF_YEAR = 216; + public static readonly DAY_OF_WEEK = 217; + public static readonly EXCLUDE = 218; + public static readonly EXTENDED_STATS = 219; + public static readonly FIELD = 220; + public static readonly FILTER = 221; + public static readonly GEO_BOUNDING_BOX = 222; + public static readonly GEO_CELL = 223; + public static readonly GEO_DISTANCE = 224; + public static readonly GEO_DISTANCE_RANGE = 225; + public static readonly GEO_INTERSECTS = 226; + public static readonly GEO_POLYGON = 227; + public static readonly HISTOGRAM = 228; + public static readonly HOUR_OF_DAY = 229; + public static readonly INCLUDE = 230; + public static readonly IN_TERMS = 231; + public static readonly MATCHPHRASE = 232; + public static readonly MATCH_PHRASE = 233; + public static readonly MATCHPHRASEQUERY = 234; + public static readonly SIMPLE_QUERY_STRING = 235; + public static readonly QUERY_STRING = 236; + public static readonly MATCH_PHRASE_PREFIX = 237; + public static readonly MATCHQUERY = 238; + public static readonly MATCH_QUERY = 239; + public static readonly MINUTE_OF_DAY = 240; + public static readonly MINUTE_OF_HOUR = 241; + public static readonly MONTH_OF_YEAR = 242; + public static readonly MULTIMATCH = 243; + public static readonly MULTI_MATCH = 244; + public static readonly MULTIMATCHQUERY = 245; + public static readonly NESTED = 246; + public static readonly PERCENTILES = 247; + public static readonly PERCENTILE = 248; + public static readonly PERCENTILE_APPROX = 249; + public static readonly REGEXP_QUERY = 250; + public static readonly REVERSE_NESTED = 251; + public static readonly QUERY = 252; + public static readonly RANGE = 253; + public static readonly SCORE = 254; + public static readonly SCOREQUERY = 255; + public static readonly SCORE_QUERY = 256; + public static readonly SECOND_OF_MINUTE = 257; + public static readonly STATS = 258; + public static readonly TERM = 259; + public static readonly TERMS = 260; + public static readonly TIMESTAMPADD = 261; + public static readonly TIMESTAMPDIFF = 262; + public static readonly TOPHITS = 263; + public static readonly TYPEOF = 264; + public static readonly WEEK_OF_YEAR = 265; + public static readonly WEEKOFYEAR = 266; + public static readonly WEEKDAY = 267; + public static readonly WILDCARDQUERY = 268; + public static readonly WILDCARD_QUERY = 269; + public static readonly SUBSTR = 270; + public static readonly STRCMP = 271; + public static readonly ADDDATE = 272; + public static readonly YEARWEEK = 273; + public static readonly ALLOW_LEADING_WILDCARD = 274; + public static readonly ANALYZER = 275; + public static readonly ANALYZE_WILDCARD = 276; + public static readonly AUTO_GENERATE_SYNONYMS_PHRASE_QUERY = 277; + public static readonly BOOST = 278; + public static readonly CASE_INSENSITIVE = 279; + public static readonly CUTOFF_FREQUENCY = 280; + public static readonly DEFAULT_FIELD = 281; + public static readonly DEFAULT_OPERATOR = 282; + public static readonly ESCAPE = 283; + public static readonly ENABLE_POSITION_INCREMENTS = 284; + public static readonly FIELDS = 285; + public static readonly FLAGS = 286; + public static readonly FUZZINESS = 287; + public static readonly FUZZY_MAX_EXPANSIONS = 288; + public static readonly FUZZY_PREFIX_LENGTH = 289; + public static readonly FUZZY_REWRITE = 290; + public static readonly FUZZY_TRANSPOSITIONS = 291; + public static readonly LENIENT = 292; + public static readonly LOW_FREQ_OPERATOR = 293; + public static readonly MAX_DETERMINIZED_STATES = 294; + public static readonly MAX_EXPANSIONS = 295; + public static readonly MINIMUM_SHOULD_MATCH = 296; + public static readonly OPERATOR = 297; + public static readonly PHRASE_SLOP = 298; + public static readonly PREFIX_LENGTH = 299; + public static readonly QUOTE_ANALYZER = 300; + public static readonly QUOTE_FIELD_SUFFIX = 301; + public static readonly REWRITE = 302; + public static readonly SLOP = 303; + public static readonly TIE_BREAKER = 304; + public static readonly TIME_ZONE = 305; + public static readonly TYPE = 306; + public static readonly ZERO_TERMS_QUERY = 307; + public static readonly HIGHLIGHT = 308; + public static readonly HIGHLIGHT_PRE_TAGS = 309; + public static readonly HIGHLIGHT_POST_TAGS = 310; + public static readonly MATCH_BOOL_PREFIX = 311; + public static readonly STAR = 312; + public static readonly SLASH = 313; + public static readonly MODULE = 314; + public static readonly PLUS = 315; + public static readonly MINUS = 316; + public static readonly DIV = 317; + public static readonly MOD = 318; + public static readonly EQUAL_SYMBOL = 319; + public static readonly GREATER_SYMBOL = 320; + public static readonly LESS_SYMBOL = 321; + public static readonly EXCLAMATION_SYMBOL = 322; + public static readonly BIT_NOT_OP = 323; + public static readonly BIT_OR_OP = 324; + public static readonly BIT_AND_OP = 325; + public static readonly BIT_XOR_OP = 326; + public static readonly DOT = 327; + public static readonly LR_BRACKET = 328; + public static readonly RR_BRACKET = 329; + public static readonly LT_SQR_PRTHS = 330; + public static readonly RT_SQR_PRTHS = 331; + public static readonly COMMA = 332; + public static readonly SEMI = 333; + public static readonly AT_SIGN = 334; + public static readonly ZERO_DECIMAL = 335; + public static readonly ONE_DECIMAL = 336; + public static readonly TWO_DECIMAL = 337; + public static readonly SINGLE_QUOTE_SYMB = 338; + public static readonly DOUBLE_QUOTE_SYMB = 339; + public static readonly REVERSE_QUOTE_SYMB = 340; + public static readonly COLON_SYMB = 341; + public static readonly START_NATIONAL_STRING_LITERAL = 342; + public static readonly STRING_LITERAL = 343; + public static readonly DECIMAL_LITERAL = 344; + public static readonly HEXADECIMAL_LITERAL = 345; + public static readonly REAL_LITERAL = 346; + public static readonly NULL_SPEC_LITERAL = 347; + public static readonly BIT_STRING = 348; + public static readonly ID = 349; + public static readonly DOUBLE_QUOTE_ID = 350; + public static readonly BACKTICK_QUOTE_ID = 351; + public static readonly ERROR_RECOGNITION = 352; + + public static readonly channelNames = [ + "DEFAULT_TOKEN_CHANNEL", "HIDDEN", "SQLCOMMENT", "ERRORCHANNEL" + ]; + + public static readonly literalNames = [ + null, null, null, null, null, "'ALL'", "'AND'", "'AS'", "'ASC'", + "'BOOLEAN'", "'BETWEEN'", "'BY'", "'CASE'", "'CAST'", "'CROSS'", + "'COLUMNS'", "'DATETIME'", "'DELETE'", "'DESC'", "'DESCRIBE'", "'DISTINCT'", + "'DOUBLE'", "'ELSE'", "'EXISTS'", "'FALSE'", "'FLOAT'", "'FIRST'", + "'FROM'", "'GROUP'", "'HAVING'", "'IN'", "'INNER'", "'INT'", "'INTEGER'", + "'IS'", "'JOIN'", "'LAST'", "'LEFT'", "'LIKE'", "'LIMIT'", "'LONG'", + "'MATCH'", "'NATURAL'", "'MISSING'", "'NOT'", "'NULL'", "'NULLS'", + "'ON'", "'OR'", "'ORDER'", "'OUTER'", "'OVER'", "'PARTITION'", "'REGEXP'", + "'RIGHT'", "'SELECT'", "'SHOW'", "'STRING'", "'THEN'", "'TRUE'", + "'UNION'", "'USING'", "'WHEN'", "'WHERE'", "'MINUS'", "'AVG'", "'COUNT'", + "'MAX'", "'MIN'", "'SUM'", "'VAR_POP'", "'VAR_SAMP'", "'VARIANCE'", + "'STD'", "'STDDEV'", "'STDDEV_POP'", "'STDDEV_SAMP'", "'SUBSTRING'", + "'TRIM'", "'END'", "'FULL'", "'OFFSET'", "'INTERVAL'", "'MICROSECOND'", + "'SECOND'", "'MINUTE'", "'HOUR'", "'DAY'", "'WEEK'", "'MONTH'", + "'QUARTER'", "'YEAR'", "'SECOND_MICROSECOND'", "'MINUTE_MICROSECOND'", + "'MINUTE_SECOND'", "'HOUR_MICROSECOND'", "'HOUR_SECOND'", "'HOUR_MINUTE'", + "'DAY_MICROSECOND'", "'DAY_SECOND'", "'DAY_MINUTE'", "'DAY_HOUR'", + "'YEAR_MONTH'", "'TABLES'", "'ABS'", "'ACOS'", "'ADD'", "'ADDTIME'", + "'ASCII'", "'ASIN'", "'ATAN'", "'ATAN2'", "'CBRT'", "'CEIL'", "'CEILING'", + "'CONCAT'", "'CONCAT_WS'", "'CONV'", "'CONVERT_TZ'", "'COS'", "'COSH'", + "'COT'", "'CRC32'", "'CURDATE'", "'CURTIME'", "'CURRENT_DATE'", + "'CURRENT_TIME'", "'CURRENT_TIMESTAMP'", "'DATE'", "'DATE_ADD'", + "'DATE_FORMAT'", "'DATE_SUB'", "'DATEDIFF'", "'DAYNAME'", "'DAYOFMONTH'", + "'DAYOFWEEK'", "'DAYOFYEAR'", "'DEGREES'", "'DIVIDE'", "'E'", "'EXP'", + "'EXPM1'", "'EXTRACT'", "'FLOOR'", "'FROM_DAYS'", "'FROM_UNIXTIME'", + "'GET_FORMAT'", "'IF'", "'IFNULL'", "'ISNULL'", "'LAST_DAY'", "'LENGTH'", + "'LN'", "'LOCALTIME'", "'LOCALTIMESTAMP'", "'LOCATE'", "'LOG'", + "'LOG10'", "'LOG2'", "'LOWER'", "'LTRIM'", "'MAKEDATE'", "'MAKETIME'", + "'MODULUS'", "'MONTHNAME'", "'MULTIPLY'", "'NOW'", "'NULLIF'", "'PERIOD_ADD'", + "'PERIOD_DIFF'", "'PI'", "'POSITION'", "'POW'", "'POWER'", "'RADIANS'", + "'RAND'", "'REPLACE'", "'RINT'", "'ROUND'", "'RTRIM'", "'REVERSE'", + "'SEC_TO_TIME'", "'SIGN'", "'SIGNUM'", "'SIN'", "'SINH'", "'SQRT'", + "'STR_TO_DATE'", "'SUBDATE'", "'SUBTIME'", "'SUBTRACT'", "'SYSDATE'", + "'TAN'", "'TIME'", "'TIMEDIFF'", "'TIME_FORMAT'", "'TIME_TO_SEC'", + "'TIMESTAMP'", "'TRUNCATE'", "'TO_DAYS'", "'TO_SECONDS'", "'UNIX_TIMESTAMP'", + "'UPPER'", "'UTC_DATE'", "'UTC_TIME'", "'UTC_TIMESTAMP'", "'D'", + "'T'", "'TS'", "'{'", "'}'", "'DENSE_RANK'", "'RANK'", "'ROW_NUMBER'", + "'DATE_HISTOGRAM'", "'DAY_OF_MONTH'", "'DAY_OF_YEAR'", "'DAY_OF_WEEK'", + "'EXCLUDE'", "'EXTENDED_STATS'", "'FIELD'", "'FILTER'", "'GEO_BOUNDING_BOX'", + "'GEO_CELL'", "'GEO_DISTANCE'", "'GEO_DISTANCE_RANGE'", "'GEO_INTERSECTS'", + "'GEO_POLYGON'", "'HISTOGRAM'", "'HOUR_OF_DAY'", "'INCLUDE'", "'IN_TERMS'", + "'MATCHPHRASE'", "'MATCH_PHRASE'", "'MATCHPHRASEQUERY'", "'SIMPLE_QUERY_STRING'", + "'QUERY_STRING'", "'MATCH_PHRASE_PREFIX'", "'MATCHQUERY'", "'MATCH_QUERY'", + "'MINUTE_OF_DAY'", "'MINUTE_OF_HOUR'", "'MONTH_OF_YEAR'", "'MULTIMATCH'", + "'MULTI_MATCH'", "'MULTIMATCHQUERY'", "'NESTED'", "'PERCENTILES'", + "'PERCENTILE'", "'PERCENTILE_APPROX'", "'REGEXP_QUERY'", "'REVERSE_NESTED'", + "'QUERY'", "'RANGE'", "'SCORE'", "'SCOREQUERY'", "'SCORE_QUERY'", + "'SECOND_OF_MINUTE'", "'STATS'", "'TERM'", "'TERMS'", "'TIMESTAMPADD'", + "'TIMESTAMPDIFF'", "'TOPHITS'", "'TYPEOF'", "'WEEK_OF_YEAR'", "'WEEKOFYEAR'", + "'WEEKDAY'", "'WILDCARDQUERY'", "'WILDCARD_QUERY'", "'SUBSTR'", + "'STRCMP'", "'ADDDATE'", "'YEARWEEK'", "'ALLOW_LEADING_WILDCARD'", + "'ANALYZER'", "'ANALYZE_WILDCARD'", "'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY'", + "'BOOST'", "'CASE_INSENSITIVE'", "'CUTOFF_FREQUENCY'", "'DEFAULT_FIELD'", + "'DEFAULT_OPERATOR'", "'ESCAPE'", "'ENABLE_POSITION_INCREMENTS'", + "'FIELDS'", "'FLAGS'", "'FUZZINESS'", "'FUZZY_MAX_EXPANSIONS'", + "'FUZZY_PREFIX_LENGTH'", "'FUZZY_REWRITE'", "'FUZZY_TRANSPOSITIONS'", + "'LENIENT'", "'LOW_FREQ_OPERATOR'", "'MAX_DETERMINIZED_STATES'", + "'MAX_EXPANSIONS'", "'MINIMUM_SHOULD_MATCH'", "'OPERATOR'", "'PHRASE_SLOP'", + "'PREFIX_LENGTH'", "'QUOTE_ANALYZER'", "'QUOTE_FIELD_SUFFIX'", "'REWRITE'", + "'SLOP'", "'TIE_BREAKER'", "'TIME_ZONE'", "'TYPE'", "'ZERO_TERMS_QUERY'", + "'HIGHLIGHT'", "'PRE_TAGS'", "'POST_TAGS'", "'MATCH_BOOL_PREFIX'", + "'*'", "'/'", "'%'", "'+'", "'-'", "'DIV'", "'MOD'", "'='", "'>'", + "'<'", "'!'", "'~'", "'|'", "'&'", "'^'", "'.'", "'('", "')'", "'['", + "']'", "','", "';'", "'@'", "'0'", "'1'", "'2'", "'''", "'\"'", + "'`'", "':'" + ]; + + public static readonly symbolicNames = [ + null, "SPACE", "SPEC_SQL_COMMENT", "COMMENT_INPUT", "LINE_COMMENT", + "ALL", "AND", "AS", "ASC", "BOOLEAN", "BETWEEN", "BY", "CASE", "CAST", + "CROSS", "COLUMNS", "DATETIME", "DELETE", "DESC", "DESCRIBE", "DISTINCT", + "DOUBLE", "ELSE", "EXISTS", "FALSE", "FLOAT", "FIRST", "FROM", "GROUP", + "HAVING", "IN", "INNER", "INT", "INTEGER", "IS", "JOIN", "LAST", + "LEFT", "LIKE", "LIMIT", "LONG", "MATCH", "NATURAL", "MISSING_LITERAL", + "NOT", "NULL_LITERAL", "NULLS", "ON", "OR", "ORDER", "OUTER", "OVER", + "PARTITION", "REGEXP", "RIGHT", "SELECT", "SHOW", "STRING", "THEN", + "TRUE", "UNION", "USING", "WHEN", "WHERE", "EXCEPT", "AVG", "COUNT", + "MAX", "MIN", "SUM", "VAR_POP", "VAR_SAMP", "VARIANCE", "STD", "STDDEV", + "STDDEV_POP", "STDDEV_SAMP", "SUBSTRING", "TRIM", "END", "FULL", + "OFFSET", "INTERVAL", "MICROSECOND", "SECOND", "MINUTE", "HOUR", + "DAY", "WEEK", "MONTH", "QUARTER", "YEAR", "SECOND_MICROSECOND", + "MINUTE_MICROSECOND", "MINUTE_SECOND", "HOUR_MICROSECOND", "HOUR_SECOND", + "HOUR_MINUTE", "DAY_MICROSECOND", "DAY_SECOND", "DAY_MINUTE", "DAY_HOUR", + "YEAR_MONTH", "TABLES", "ABS", "ACOS", "ADD", "ADDTIME", "ASCII", + "ASIN", "ATAN", "ATAN2", "CBRT", "CEIL", "CEILING", "CONCAT", "CONCAT_WS", + "CONV", "CONVERT_TZ", "COS", "COSH", "COT", "CRC32", "CURDATE", + "CURTIME", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP", + "DATE", "DATE_ADD", "DATE_FORMAT", "DATE_SUB", "DATEDIFF", "DAYNAME", + "DAYOFMONTH", "DAYOFWEEK", "DAYOFYEAR", "DEGREES", "DIVIDE", "E", + "EXP", "EXPM1", "EXTRACT", "FLOOR", "FROM_DAYS", "FROM_UNIXTIME", + "GET_FORMAT", "IF", "IFNULL", "ISNULL", "LAST_DAY", "LENGTH", "LN", + "LOCALTIME", "LOCALTIMESTAMP", "LOCATE", "LOG", "LOG10", "LOG2", + "LOWER", "LTRIM", "MAKEDATE", "MAKETIME", "MODULUS", "MONTHNAME", + "MULTIPLY", "NOW", "NULLIF", "PERIOD_ADD", "PERIOD_DIFF", "PI", + "POSITION", "POW", "POWER", "RADIANS", "RAND", "REPLACE", "RINT", + "ROUND", "RTRIM", "REVERSE", "SEC_TO_TIME", "SIGN", "SIGNUM", "SIN", + "SINH", "SQRT", "STR_TO_DATE", "SUBDATE", "SUBTIME", "SUBTRACT", + "SYSDATE", "TAN", "TIME", "TIMEDIFF", "TIME_FORMAT", "TIME_TO_SEC", + "TIMESTAMP", "TRUNCATE", "TO_DAYS", "TO_SECONDS", "UNIX_TIMESTAMP", + "UPPER", "UTC_DATE", "UTC_TIME", "UTC_TIMESTAMP", "D", "T", "TS", + "LEFT_BRACE", "RIGHT_BRACE", "DENSE_RANK", "RANK", "ROW_NUMBER", + "DATE_HISTOGRAM", "DAY_OF_MONTH", "DAY_OF_YEAR", "DAY_OF_WEEK", + "EXCLUDE", "EXTENDED_STATS", "FIELD", "FILTER", "GEO_BOUNDING_BOX", + "GEO_CELL", "GEO_DISTANCE", "GEO_DISTANCE_RANGE", "GEO_INTERSECTS", + "GEO_POLYGON", "HISTOGRAM", "HOUR_OF_DAY", "INCLUDE", "IN_TERMS", + "MATCHPHRASE", "MATCH_PHRASE", "MATCHPHRASEQUERY", "SIMPLE_QUERY_STRING", + "QUERY_STRING", "MATCH_PHRASE_PREFIX", "MATCHQUERY", "MATCH_QUERY", + "MINUTE_OF_DAY", "MINUTE_OF_HOUR", "MONTH_OF_YEAR", "MULTIMATCH", + "MULTI_MATCH", "MULTIMATCHQUERY", "NESTED", "PERCENTILES", "PERCENTILE", + "PERCENTILE_APPROX", "REGEXP_QUERY", "REVERSE_NESTED", "QUERY", + "RANGE", "SCORE", "SCOREQUERY", "SCORE_QUERY", "SECOND_OF_MINUTE", + "STATS", "TERM", "TERMS", "TIMESTAMPADD", "TIMESTAMPDIFF", "TOPHITS", + "TYPEOF", "WEEK_OF_YEAR", "WEEKOFYEAR", "WEEKDAY", "WILDCARDQUERY", + "WILDCARD_QUERY", "SUBSTR", "STRCMP", "ADDDATE", "YEARWEEK", "ALLOW_LEADING_WILDCARD", + "ANALYZER", "ANALYZE_WILDCARD", "AUTO_GENERATE_SYNONYMS_PHRASE_QUERY", + "BOOST", "CASE_INSENSITIVE", "CUTOFF_FREQUENCY", "DEFAULT_FIELD", + "DEFAULT_OPERATOR", "ESCAPE", "ENABLE_POSITION_INCREMENTS", "FIELDS", + "FLAGS", "FUZZINESS", "FUZZY_MAX_EXPANSIONS", "FUZZY_PREFIX_LENGTH", + "FUZZY_REWRITE", "FUZZY_TRANSPOSITIONS", "LENIENT", "LOW_FREQ_OPERATOR", + "MAX_DETERMINIZED_STATES", "MAX_EXPANSIONS", "MINIMUM_SHOULD_MATCH", + "OPERATOR", "PHRASE_SLOP", "PREFIX_LENGTH", "QUOTE_ANALYZER", "QUOTE_FIELD_SUFFIX", + "REWRITE", "SLOP", "TIE_BREAKER", "TIME_ZONE", "TYPE", "ZERO_TERMS_QUERY", + "HIGHLIGHT", "HIGHLIGHT_PRE_TAGS", "HIGHLIGHT_POST_TAGS", "MATCH_BOOL_PREFIX", + "STAR", "SLASH", "MODULE", "PLUS", "MINUS", "DIV", "MOD", "EQUAL_SYMBOL", + "GREATER_SYMBOL", "LESS_SYMBOL", "EXCLAMATION_SYMBOL", "BIT_NOT_OP", + "BIT_OR_OP", "BIT_AND_OP", "BIT_XOR_OP", "DOT", "LR_BRACKET", "RR_BRACKET", + "LT_SQR_PRTHS", "RT_SQR_PRTHS", "COMMA", "SEMI", "AT_SIGN", "ZERO_DECIMAL", + "ONE_DECIMAL", "TWO_DECIMAL", "SINGLE_QUOTE_SYMB", "DOUBLE_QUOTE_SYMB", + "REVERSE_QUOTE_SYMB", "COLON_SYMB", "START_NATIONAL_STRING_LITERAL", + "STRING_LITERAL", "DECIMAL_LITERAL", "HEXADECIMAL_LITERAL", "REAL_LITERAL", + "NULL_SPEC_LITERAL", "BIT_STRING", "ID", "DOUBLE_QUOTE_ID", "BACKTICK_QUOTE_ID", + "ERROR_RECOGNITION" + ]; + + public static readonly modeNames = [ + "DEFAULT_MODE", + ]; + + public static readonly ruleNames = [ + "SPACE", "SPEC_SQL_COMMENT", "COMMENT_INPUT", "LINE_COMMENT", "ALL", + "AND", "AS", "ASC", "BOOLEAN", "BETWEEN", "BY", "CASE", "CAST", + "CROSS", "COLUMNS", "DATETIME", "DELETE", "DESC", "DESCRIBE", "DISTINCT", + "DOUBLE", "ELSE", "EXISTS", "FALSE", "FLOAT", "FIRST", "FROM", "GROUP", + "HAVING", "IN", "INNER", "INT", "INTEGER", "IS", "JOIN", "LAST", + "LEFT", "LIKE", "LIMIT", "LONG", "MATCH", "NATURAL", "MISSING_LITERAL", + "NOT", "NULL_LITERAL", "NULLS", "ON", "OR", "ORDER", "OUTER", "OVER", + "PARTITION", "REGEXP", "RIGHT", "SELECT", "SHOW", "STRING", "THEN", + "TRUE", "UNION", "USING", "WHEN", "WHERE", "EXCEPT", "AVG", "COUNT", + "MAX", "MIN", "SUM", "VAR_POP", "VAR_SAMP", "VARIANCE", "STD", "STDDEV", + "STDDEV_POP", "STDDEV_SAMP", "SUBSTRING", "TRIM", "END", "FULL", + "OFFSET", "INTERVAL", "MICROSECOND", "SECOND", "MINUTE", "HOUR", + "DAY", "WEEK", "MONTH", "QUARTER", "YEAR", "SECOND_MICROSECOND", + "MINUTE_MICROSECOND", "MINUTE_SECOND", "HOUR_MICROSECOND", "HOUR_SECOND", + "HOUR_MINUTE", "DAY_MICROSECOND", "DAY_SECOND", "DAY_MINUTE", "DAY_HOUR", + "YEAR_MONTH", "TABLES", "ABS", "ACOS", "ADD", "ADDTIME", "ASCII", + "ASIN", "ATAN", "ATAN2", "CBRT", "CEIL", "CEILING", "CONCAT", "CONCAT_WS", + "CONV", "CONVERT_TZ", "COS", "COSH", "COT", "CRC32", "CURDATE", + "CURTIME", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP", + "DATE", "DATE_ADD", "DATE_FORMAT", "DATE_SUB", "DATEDIFF", "DAYNAME", + "DAYOFMONTH", "DAYOFWEEK", "DAYOFYEAR", "DEGREES", "DIVIDE", "E", + "EXP", "EXPM1", "EXTRACT", "FLOOR", "FROM_DAYS", "FROM_UNIXTIME", + "GET_FORMAT", "IF", "IFNULL", "ISNULL", "LAST_DAY", "LENGTH", "LN", + "LOCALTIME", "LOCALTIMESTAMP", "LOCATE", "LOG", "LOG10", "LOG2", + "LOWER", "LTRIM", "MAKEDATE", "MAKETIME", "MODULUS", "MONTHNAME", + "MULTIPLY", "NOW", "NULLIF", "PERIOD_ADD", "PERIOD_DIFF", "PI", + "POSITION", "POW", "POWER", "RADIANS", "RAND", "REPLACE", "RINT", + "ROUND", "RTRIM", "REVERSE", "SEC_TO_TIME", "SIGN", "SIGNUM", "SIN", + "SINH", "SQRT", "STR_TO_DATE", "SUBDATE", "SUBTIME", "SUBTRACT", + "SYSDATE", "TAN", "TIME", "TIMEDIFF", "TIME_FORMAT", "TIME_TO_SEC", + "TIMESTAMP", "TRUNCATE", "TO_DAYS", "TO_SECONDS", "UNIX_TIMESTAMP", + "UPPER", "UTC_DATE", "UTC_TIME", "UTC_TIMESTAMP", "D", "T", "TS", + "LEFT_BRACE", "RIGHT_BRACE", "DENSE_RANK", "RANK", "ROW_NUMBER", + "DATE_HISTOGRAM", "DAY_OF_MONTH", "DAY_OF_YEAR", "DAY_OF_WEEK", + "EXCLUDE", "EXTENDED_STATS", "FIELD", "FILTER", "GEO_BOUNDING_BOX", + "GEO_CELL", "GEO_DISTANCE", "GEO_DISTANCE_RANGE", "GEO_INTERSECTS", + "GEO_POLYGON", "HISTOGRAM", "HOUR_OF_DAY", "INCLUDE", "IN_TERMS", + "MATCHPHRASE", "MATCH_PHRASE", "MATCHPHRASEQUERY", "SIMPLE_QUERY_STRING", + "QUERY_STRING", "MATCH_PHRASE_PREFIX", "MATCHQUERY", "MATCH_QUERY", + "MINUTE_OF_DAY", "MINUTE_OF_HOUR", "MONTH_OF_YEAR", "MULTIMATCH", + "MULTI_MATCH", "MULTIMATCHQUERY", "NESTED", "PERCENTILES", "PERCENTILE", + "PERCENTILE_APPROX", "REGEXP_QUERY", "REVERSE_NESTED", "QUERY", + "RANGE", "SCORE", "SCOREQUERY", "SCORE_QUERY", "SECOND_OF_MINUTE", + "STATS", "TERM", "TERMS", "TIMESTAMPADD", "TIMESTAMPDIFF", "TOPHITS", + "TYPEOF", "WEEK_OF_YEAR", "WEEKOFYEAR", "WEEKDAY", "WILDCARDQUERY", + "WILDCARD_QUERY", "SUBSTR", "STRCMP", "ADDDATE", "YEARWEEK", "ALLOW_LEADING_WILDCARD", + "ANALYZER", "ANALYZE_WILDCARD", "AUTO_GENERATE_SYNONYMS_PHRASE_QUERY", + "BOOST", "CASE_INSENSITIVE", "CUTOFF_FREQUENCY", "DEFAULT_FIELD", + "DEFAULT_OPERATOR", "ESCAPE", "ENABLE_POSITION_INCREMENTS", "FIELDS", + "FLAGS", "FUZZINESS", "FUZZY_MAX_EXPANSIONS", "FUZZY_PREFIX_LENGTH", + "FUZZY_REWRITE", "FUZZY_TRANSPOSITIONS", "LENIENT", "LOW_FREQ_OPERATOR", + "MAX_DETERMINIZED_STATES", "MAX_EXPANSIONS", "MINIMUM_SHOULD_MATCH", + "OPERATOR", "PHRASE_SLOP", "PREFIX_LENGTH", "QUOTE_ANALYZER", "QUOTE_FIELD_SUFFIX", + "REWRITE", "SLOP", "TIE_BREAKER", "TIME_ZONE", "TYPE", "ZERO_TERMS_QUERY", + "HIGHLIGHT", "HIGHLIGHT_PRE_TAGS", "HIGHLIGHT_POST_TAGS", "MATCH_BOOL_PREFIX", + "STAR", "SLASH", "MODULE", "PLUS", "MINUS", "DIV", "MOD", "EQUAL_SYMBOL", + "GREATER_SYMBOL", "LESS_SYMBOL", "EXCLAMATION_SYMBOL", "BIT_NOT_OP", + "BIT_OR_OP", "BIT_AND_OP", "BIT_XOR_OP", "DOT", "LR_BRACKET", "RR_BRACKET", + "LT_SQR_PRTHS", "RT_SQR_PRTHS", "COMMA", "SEMI", "AT_SIGN", "ZERO_DECIMAL", + "ONE_DECIMAL", "TWO_DECIMAL", "SINGLE_QUOTE_SYMB", "DOUBLE_QUOTE_SYMB", + "REVERSE_QUOTE_SYMB", "COLON_SYMB", "START_NATIONAL_STRING_LITERAL", + "STRING_LITERAL", "DECIMAL_LITERAL", "HEXADECIMAL_LITERAL", "REAL_LITERAL", + "NULL_SPEC_LITERAL", "BIT_STRING", "ID", "DOUBLE_QUOTE_ID", "BACKTICK_QUOTE_ID", + "EXPONENT_NUM_PART", "ID_LITERAL", "DQUOTA_STRING", "SQUOTA_STRING", + "BQUOTA_STRING", "HEX_DIGIT", "DEC_DIGIT", "BIT_STRING_L", "ERROR_RECOGNITION", + ]; + + + public constructor(input: antlr.CharStream) { + super(input); + this.interpreter = new antlr.LexerATNSimulator(this, OpenSearchSQLLexer._ATN, OpenSearchSQLLexer.decisionsToDFA, new antlr.PredictionContextCache()); + } + + public get grammarFileName(): string { return "OpenSearchSQLLexer.g4"; } + + public get literalNames(): (string | null)[] { return OpenSearchSQLLexer.literalNames; } + public get symbolicNames(): (string | null)[] { return OpenSearchSQLLexer.symbolicNames; } + public get ruleNames(): string[] { return OpenSearchSQLLexer.ruleNames; } + + public get serializedATN(): number[] { return OpenSearchSQLLexer._serializedATN; } + + public get channelNames(): string[] { return OpenSearchSQLLexer.channelNames; } + + public get modeNames(): string[] { return OpenSearchSQLLexer.modeNames; } + + public static readonly _serializedATN: number[] = [ + 4,0,352,3776,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7, + 5,2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12, + 2,13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19, + 7,19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25, + 2,26,7,26,2,27,7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32, + 7,32,2,33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,2,38,7,38, + 2,39,7,39,2,40,7,40,2,41,7,41,2,42,7,42,2,43,7,43,2,44,7,44,2,45, + 7,45,2,46,7,46,2,47,7,47,2,48,7,48,2,49,7,49,2,50,7,50,2,51,7,51, + 2,52,7,52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,7,56,2,57,7,57,2,58, + 7,58,2,59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,7,63,2,64,7,64, + 2,65,7,65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70,7,70,2,71, + 7,71,2,72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77,7,77, + 2,78,7,78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,2,83,7,83,2,84, + 7,84,2,85,7,85,2,86,7,86,2,87,7,87,2,88,7,88,2,89,7,89,2,90,7,90, + 2,91,7,91,2,92,7,92,2,93,7,93,2,94,7,94,2,95,7,95,2,96,7,96,2,97, + 7,97,2,98,7,98,2,99,7,99,2,100,7,100,2,101,7,101,2,102,7,102,2,103, + 7,103,2,104,7,104,2,105,7,105,2,106,7,106,2,107,7,107,2,108,7,108, + 2,109,7,109,2,110,7,110,2,111,7,111,2,112,7,112,2,113,7,113,2,114, + 7,114,2,115,7,115,2,116,7,116,2,117,7,117,2,118,7,118,2,119,7,119, + 2,120,7,120,2,121,7,121,2,122,7,122,2,123,7,123,2,124,7,124,2,125, + 7,125,2,126,7,126,2,127,7,127,2,128,7,128,2,129,7,129,2,130,7,130, + 2,131,7,131,2,132,7,132,2,133,7,133,2,134,7,134,2,135,7,135,2,136, + 7,136,2,137,7,137,2,138,7,138,2,139,7,139,2,140,7,140,2,141,7,141, + 2,142,7,142,2,143,7,143,2,144,7,144,2,145,7,145,2,146,7,146,2,147, + 7,147,2,148,7,148,2,149,7,149,2,150,7,150,2,151,7,151,2,152,7,152, + 2,153,7,153,2,154,7,154,2,155,7,155,2,156,7,156,2,157,7,157,2,158, + 7,158,2,159,7,159,2,160,7,160,2,161,7,161,2,162,7,162,2,163,7,163, + 2,164,7,164,2,165,7,165,2,166,7,166,2,167,7,167,2,168,7,168,2,169, + 7,169,2,170,7,170,2,171,7,171,2,172,7,172,2,173,7,173,2,174,7,174, + 2,175,7,175,2,176,7,176,2,177,7,177,2,178,7,178,2,179,7,179,2,180, + 7,180,2,181,7,181,2,182,7,182,2,183,7,183,2,184,7,184,2,185,7,185, + 2,186,7,186,2,187,7,187,2,188,7,188,2,189,7,189,2,190,7,190,2,191, + 7,191,2,192,7,192,2,193,7,193,2,194,7,194,2,195,7,195,2,196,7,196, + 2,197,7,197,2,198,7,198,2,199,7,199,2,200,7,200,2,201,7,201,2,202, + 7,202,2,203,7,203,2,204,7,204,2,205,7,205,2,206,7,206,2,207,7,207, + 2,208,7,208,2,209,7,209,2,210,7,210,2,211,7,211,2,212,7,212,2,213, + 7,213,2,214,7,214,2,215,7,215,2,216,7,216,2,217,7,217,2,218,7,218, + 2,219,7,219,2,220,7,220,2,221,7,221,2,222,7,222,2,223,7,223,2,224, + 7,224,2,225,7,225,2,226,7,226,2,227,7,227,2,228,7,228,2,229,7,229, + 2,230,7,230,2,231,7,231,2,232,7,232,2,233,7,233,2,234,7,234,2,235, + 7,235,2,236,7,236,2,237,7,237,2,238,7,238,2,239,7,239,2,240,7,240, + 2,241,7,241,2,242,7,242,2,243,7,243,2,244,7,244,2,245,7,245,2,246, + 7,246,2,247,7,247,2,248,7,248,2,249,7,249,2,250,7,250,2,251,7,251, + 2,252,7,252,2,253,7,253,2,254,7,254,2,255,7,255,2,256,7,256,2,257, + 7,257,2,258,7,258,2,259,7,259,2,260,7,260,2,261,7,261,2,262,7,262, + 2,263,7,263,2,264,7,264,2,265,7,265,2,266,7,266,2,267,7,267,2,268, + 7,268,2,269,7,269,2,270,7,270,2,271,7,271,2,272,7,272,2,273,7,273, + 2,274,7,274,2,275,7,275,2,276,7,276,2,277,7,277,2,278,7,278,2,279, + 7,279,2,280,7,280,2,281,7,281,2,282,7,282,2,283,7,283,2,284,7,284, + 2,285,7,285,2,286,7,286,2,287,7,287,2,288,7,288,2,289,7,289,2,290, + 7,290,2,291,7,291,2,292,7,292,2,293,7,293,2,294,7,294,2,295,7,295, + 2,296,7,296,2,297,7,297,2,298,7,298,2,299,7,299,2,300,7,300,2,301, + 7,301,2,302,7,302,2,303,7,303,2,304,7,304,2,305,7,305,2,306,7,306, + 2,307,7,307,2,308,7,308,2,309,7,309,2,310,7,310,2,311,7,311,2,312, + 7,312,2,313,7,313,2,314,7,314,2,315,7,315,2,316,7,316,2,317,7,317, + 2,318,7,318,2,319,7,319,2,320,7,320,2,321,7,321,2,322,7,322,2,323, + 7,323,2,324,7,324,2,325,7,325,2,326,7,326,2,327,7,327,2,328,7,328, + 2,329,7,329,2,330,7,330,2,331,7,331,2,332,7,332,2,333,7,333,2,334, + 7,334,2,335,7,335,2,336,7,336,2,337,7,337,2,338,7,338,2,339,7,339, + 2,340,7,340,2,341,7,341,2,342,7,342,2,343,7,343,2,344,7,344,2,345, + 7,345,2,346,7,346,2,347,7,347,2,348,7,348,2,349,7,349,2,350,7,350, + 2,351,7,351,2,352,7,352,2,353,7,353,2,354,7,354,2,355,7,355,2,356, + 7,356,2,357,7,357,2,358,7,358,2,359,7,359,1,0,4,0,723,8,0,11,0,12, + 0,724,1,0,1,0,1,1,1,1,1,1,1,1,1,1,4,1,734,8,1,11,1,12,1,735,1,1, + 1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2,5,2,747,8,2,10,2,12,2,750,9,2,1, + 2,1,2,1,2,1,2,1,2,1,3,1,3,1,3,1,3,3,3,761,8,3,1,3,5,3,764,8,3,10, + 3,12,3,767,9,3,1,3,3,3,770,8,3,1,3,1,3,3,3,774,8,3,1,3,1,3,1,3,1, + 3,3,3,780,8,3,1,3,1,3,3,3,784,8,3,3,3,786,8,3,1,3,1,3,1,4,1,4,1, + 4,1,4,1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1, + 8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,10,1,10,1,10, + 1,11,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,12,1,13,1,13,1,13, + 1,13,1,13,1,13,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,15,1,15, + 1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,16,1,16,1,16, + 1,16,1,17,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,18,1,18,1,18,1,18, + 1,18,1,18,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,20,1,20, + 1,20,1,20,1,20,1,20,1,20,1,21,1,21,1,21,1,21,1,21,1,22,1,22,1,22, + 1,22,1,22,1,22,1,22,1,23,1,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24, + 1,24,1,24,1,24,1,25,1,25,1,25,1,25,1,25,1,25,1,26,1,26,1,26,1,26, + 1,26,1,27,1,27,1,27,1,27,1,27,1,27,1,28,1,28,1,28,1,28,1,28,1,28, + 1,28,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,30,1,30,1,31,1,31,1,31, + 1,31,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,33,1,33,1,33,1,34, + 1,34,1,34,1,34,1,34,1,35,1,35,1,35,1,35,1,35,1,36,1,36,1,36,1,36, + 1,36,1,37,1,37,1,37,1,37,1,37,1,38,1,38,1,38,1,38,1,38,1,38,1,39, + 1,39,1,39,1,39,1,39,1,40,1,40,1,40,1,40,1,40,1,40,1,41,1,41,1,41, + 1,41,1,41,1,41,1,41,1,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42, + 1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45, + 1,45,1,45,1,46,1,46,1,46,1,47,1,47,1,47,1,48,1,48,1,48,1,48,1,48, + 1,48,1,49,1,49,1,49,1,49,1,49,1,49,1,50,1,50,1,50,1,50,1,50,1,51, + 1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,52,1,52, + 1,52,1,52,1,52,1,53,1,53,1,53,1,53,1,53,1,53,1,54,1,54,1,54,1,54, + 1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,55,1,56,1,56,1,56,1,56,1,56, + 1,56,1,56,1,57,1,57,1,57,1,57,1,57,1,58,1,58,1,58,1,58,1,58,1,59, + 1,59,1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1,60,1,60,1,61,1,61, + 1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,63, + 1,63,1,63,1,64,1,64,1,64,1,64,1,65,1,65,1,65,1,65,1,65,1,65,1,66, + 1,66,1,66,1,66,1,67,1,67,1,67,1,67,1,68,1,68,1,68,1,68,1,69,1,69, + 1,69,1,69,1,69,1,69,1,69,1,69,1,70,1,70,1,70,1,70,1,70,1,70,1,70, + 1,70,1,70,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,72,1,72, + 1,72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,74,1,74,1,74,1,74, + 1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,75,1,75,1,75,1,75,1,75,1,75, + 1,75,1,75,1,75,1,75,1,75,1,75,1,76,1,76,1,76,1,76,1,76,1,76,1,76, + 1,76,1,76,1,76,1,77,1,77,1,77,1,77,1,77,1,78,1,78,1,78,1,78,1,79, + 1,79,1,79,1,79,1,79,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,81,1,81, + 1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,82,1,82, + 1,82,1,82,1,82,1,82,1,82,1,82,1,83,1,83,1,83,1,83,1,83,1,83,1,83, + 1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,85,1,85,1,85,1,85,1,85,1,86, + 1,86,1,86,1,86,1,87,1,87,1,87,1,87,1,87,1,88,1,88,1,88,1,88,1,88, + 1,88,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,90,1,90,1,90,1,90, + 1,90,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91, + 1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,92,1,92,1,92,1,92,1,92,1,92, + 1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92, + 1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93, + 1,93,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94, + 1,94,1,94,1,94,1,94,1,94,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95, + 1,95,1,95,1,95,1,95,1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,96, + 1,96,1,96,1,96,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97, + 1,97,1,97,1,97,1,97,1,97,1,97,1,98,1,98,1,98,1,98,1,98,1,98,1,98, + 1,98,1,98,1,98,1,98,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1,99, + 1,99,1,99,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100, + 1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101, + 1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,103,1,103,1,103,1,103, + 1,104,1,104,1,104,1,104,1,104,1,105,1,105,1,105,1,105,1,106,1,106, + 1,106,1,106,1,106,1,106,1,106,1,106,1,107,1,107,1,107,1,107,1,107, + 1,107,1,108,1,108,1,108,1,108,1,108,1,109,1,109,1,109,1,109,1,109, + 1,110,1,110,1,110,1,110,1,110,1,110,1,111,1,111,1,111,1,111,1,111, + 1,112,1,112,1,112,1,112,1,112,1,113,1,113,1,113,1,113,1,113,1,113, + 1,113,1,113,1,114,1,114,1,114,1,114,1,114,1,114,1,114,1,115,1,115, + 1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,116,1,116,1,116, + 1,116,1,116,1,117,1,117,1,117,1,117,1,117,1,117,1,117,1,117,1,117, + 1,117,1,117,1,118,1,118,1,118,1,118,1,119,1,119,1,119,1,119,1,119, + 1,120,1,120,1,120,1,120,1,121,1,121,1,121,1,121,1,121,1,121,1,122, + 1,122,1,122,1,122,1,122,1,122,1,122,1,122,1,123,1,123,1,123,1,123, + 1,123,1,123,1,123,1,123,1,124,1,124,1,124,1,124,1,124,1,124,1,124, + 1,124,1,124,1,124,1,124,1,124,1,124,1,125,1,125,1,125,1,125,1,125, + 1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,126,1,126,1,126, + 1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126, + 1,126,1,126,1,126,1,126,1,127,1,127,1,127,1,127,1,127,1,128,1,128, + 1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,129,1,129,1,129,1,129, + 1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,130,1,130,1,130, + 1,130,1,130,1,130,1,130,1,130,1,130,1,131,1,131,1,131,1,131,1,131, + 1,131,1,131,1,131,1,131,1,132,1,132,1,132,1,132,1,132,1,132,1,132, + 1,132,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133, + 1,133,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134, + 1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,136, + 1,136,1,136,1,136,1,136,1,136,1,136,1,136,1,137,1,137,1,137,1,137, + 1,137,1,137,1,137,1,138,1,138,1,139,1,139,1,139,1,139,1,140,1,140, + 1,140,1,140,1,140,1,140,1,141,1,141,1,141,1,141,1,141,1,141,1,141, + 1,141,1,142,1,142,1,142,1,142,1,142,1,142,1,143,1,143,1,143,1,143, + 1,143,1,143,1,143,1,143,1,143,1,143,1,144,1,144,1,144,1,144,1,144, + 1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,145,1,145, + 1,145,1,145,1,145,1,145,1,145,1,145,1,145,1,145,1,145,1,146,1,146, + 1,146,1,147,1,147,1,147,1,147,1,147,1,147,1,147,1,148,1,148,1,148, + 1,148,1,148,1,148,1,148,1,149,1,149,1,149,1,149,1,149,1,149,1,149, + 1,149,1,149,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,151,1,151, + 1,151,1,152,1,152,1,152,1,152,1,152,1,152,1,152,1,152,1,152,1,152, + 1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153, + 1,153,1,153,1,153,1,153,1,154,1,154,1,154,1,154,1,154,1,154,1,154, + 1,155,1,155,1,155,1,155,1,156,1,156,1,156,1,156,1,156,1,156,1,157, + 1,157,1,157,1,157,1,157,1,158,1,158,1,158,1,158,1,158,1,158,1,159, + 1,159,1,159,1,159,1,159,1,159,1,160,1,160,1,160,1,160,1,160,1,160, + 1,160,1,160,1,160,1,161,1,161,1,161,1,161,1,161,1,161,1,161,1,161, + 1,161,1,162,1,162,1,162,1,162,1,162,1,162,1,162,1,162,1,163,1,163, + 1,163,1,163,1,163,1,163,1,163,1,163,1,163,1,163,1,164,1,164,1,164, + 1,164,1,164,1,164,1,164,1,164,1,164,1,165,1,165,1,165,1,165,1,166, + 1,166,1,166,1,166,1,166,1,166,1,166,1,167,1,167,1,167,1,167,1,167, + 1,167,1,167,1,167,1,167,1,167,1,167,1,168,1,168,1,168,1,168,1,168, + 1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,169,1,169,1,169,1,170, + 1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,171,1,171,1,171, + 1,171,1,172,1,172,1,172,1,172,1,172,1,172,1,173,1,173,1,173,1,173, + 1,173,1,173,1,173,1,173,1,174,1,174,1,174,1,174,1,174,1,175,1,175, + 1,175,1,175,1,175,1,175,1,175,1,175,1,176,1,176,1,176,1,176,1,176, + 1,177,1,177,1,177,1,177,1,177,1,177,1,178,1,178,1,178,1,178,1,178, + 1,178,1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,180,1,180, + 1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,181, + 1,181,1,181,1,181,1,181,1,182,1,182,1,182,1,182,1,182,1,182,1,182, + 1,183,1,183,1,183,1,183,1,184,1,184,1,184,1,184,1,184,1,185,1,185, + 1,185,1,185,1,185,1,186,1,186,1,186,1,186,1,186,1,186,1,186,1,186, + 1,186,1,186,1,186,1,186,1,187,1,187,1,187,1,187,1,187,1,187,1,187, + 1,187,1,188,1,188,1,188,1,188,1,188,1,188,1,188,1,188,1,189,1,189, + 1,189,1,189,1,189,1,189,1,189,1,189,1,189,1,190,1,190,1,190,1,190, + 1,190,1,190,1,190,1,190,1,191,1,191,1,191,1,191,1,192,1,192,1,192, + 1,192,1,192,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193, + 1,194,1,194,1,194,1,194,1,194,1,194,1,194,1,194,1,194,1,194,1,194, + 1,194,1,195,1,195,1,195,1,195,1,195,1,195,1,195,1,195,1,195,1,195, + 1,195,1,195,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196, + 1,196,1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,198, + 1,198,1,198,1,198,1,198,1,198,1,198,1,198,1,199,1,199,1,199,1,199, + 1,199,1,199,1,199,1,199,1,199,1,199,1,199,1,200,1,200,1,200,1,200, + 1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,200, + 1,201,1,201,1,201,1,201,1,201,1,201,1,202,1,202,1,202,1,202,1,202, + 1,202,1,202,1,202,1,202,1,203,1,203,1,203,1,203,1,203,1,203,1,203, + 1,203,1,203,1,204,1,204,1,204,1,204,1,204,1,204,1,204,1,204,1,204, + 1,204,1,204,1,204,1,204,1,204,1,205,1,205,1,206,1,206,1,207,1,207, + 1,207,1,208,1,208,1,209,1,209,1,210,1,210,1,210,1,210,1,210,1,210, + 1,210,1,210,1,210,1,210,1,210,1,211,1,211,1,211,1,211,1,211,1,212, + 1,212,1,212,1,212,1,212,1,212,1,212,1,212,1,212,1,212,1,212,1,213, + 1,213,1,213,1,213,1,213,1,213,1,213,1,213,1,213,1,213,1,213,1,213, + 1,213,1,213,1,213,1,214,1,214,1,214,1,214,1,214,1,214,1,214,1,214, + 1,214,1,214,1,214,1,214,1,214,1,215,1,215,1,215,1,215,1,215,1,215, + 1,215,1,215,1,215,1,215,1,215,1,215,1,216,1,216,1,216,1,216,1,216, + 1,216,1,216,1,216,1,216,1,216,1,216,1,216,1,217,1,217,1,217,1,217, + 1,217,1,217,1,217,1,217,1,218,1,218,1,218,1,218,1,218,1,218,1,218, + 1,218,1,218,1,218,1,218,1,218,1,218,1,218,1,218,1,219,1,219,1,219, + 1,219,1,219,1,219,1,220,1,220,1,220,1,220,1,220,1,220,1,220,1,221, + 1,221,1,221,1,221,1,221,1,221,1,221,1,221,1,221,1,221,1,221,1,221, + 1,221,1,221,1,221,1,221,1,221,1,222,1,222,1,222,1,222,1,222,1,222, + 1,222,1,222,1,222,1,223,1,223,1,223,1,223,1,223,1,223,1,223,1,223, + 1,223,1,223,1,223,1,223,1,223,1,224,1,224,1,224,1,224,1,224,1,224, + 1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,224, + 1,224,1,224,1,225,1,225,1,225,1,225,1,225,1,225,1,225,1,225,1,225, + 1,225,1,225,1,225,1,225,1,225,1,225,1,226,1,226,1,226,1,226,1,226, + 1,226,1,226,1,226,1,226,1,226,1,226,1,226,1,227,1,227,1,227,1,227, + 1,227,1,227,1,227,1,227,1,227,1,227,1,228,1,228,1,228,1,228,1,228, + 1,228,1,228,1,228,1,228,1,228,1,228,1,228,1,229,1,229,1,229,1,229, + 1,229,1,229,1,229,1,229,1,230,1,230,1,230,1,230,1,230,1,230,1,230, + 1,230,1,230,1,231,1,231,1,231,1,231,1,231,1,231,1,231,1,231,1,231, + 1,231,1,231,1,231,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232, + 1,232,1,232,1,232,1,232,1,232,1,233,1,233,1,233,1,233,1,233,1,233, + 1,233,1,233,1,233,1,233,1,233,1,233,1,233,1,233,1,233,1,233,1,233, + 1,234,1,234,1,234,1,234,1,234,1,234,1,234,1,234,1,234,1,234,1,234, + 1,234,1,234,1,234,1,234,1,234,1,234,1,234,1,234,1,234,1,235,1,235, + 1,235,1,235,1,235,1,235,1,235,1,235,1,235,1,235,1,235,1,235,1,235, + 1,236,1,236,1,236,1,236,1,236,1,236,1,236,1,236,1,236,1,236,1,236, + 1,236,1,236,1,236,1,236,1,236,1,236,1,236,1,236,1,236,1,237,1,237, + 1,237,1,237,1,237,1,237,1,237,1,237,1,237,1,237,1,237,1,238,1,238, + 1,238,1,238,1,238,1,238,1,238,1,238,1,238,1,238,1,238,1,238,1,239, + 1,239,1,239,1,239,1,239,1,239,1,239,1,239,1,239,1,239,1,239,1,239, + 1,239,1,239,1,240,1,240,1,240,1,240,1,240,1,240,1,240,1,240,1,240, + 1,240,1,240,1,240,1,240,1,240,1,240,1,241,1,241,1,241,1,241,1,241, + 1,241,1,241,1,241,1,241,1,241,1,241,1,241,1,241,1,241,1,242,1,242, + 1,242,1,242,1,242,1,242,1,242,1,242,1,242,1,242,1,242,1,243,1,243, + 1,243,1,243,1,243,1,243,1,243,1,243,1,243,1,243,1,243,1,243,1,244, + 1,244,1,244,1,244,1,244,1,244,1,244,1,244,1,244,1,244,1,244,1,244, + 1,244,1,244,1,244,1,244,1,245,1,245,1,245,1,245,1,245,1,245,1,245, + 1,246,1,246,1,246,1,246,1,246,1,246,1,246,1,246,1,246,1,246,1,246, + 1,246,1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,247, + 1,247,1,248,1,248,1,248,1,248,1,248,1,248,1,248,1,248,1,248,1,248, + 1,248,1,248,1,248,1,248,1,248,1,248,1,248,1,248,1,249,1,249,1,249, + 1,249,1,249,1,249,1,249,1,249,1,249,1,249,1,249,1,249,1,249,1,250, + 1,250,1,250,1,250,1,250,1,250,1,250,1,250,1,250,1,250,1,250,1,250, + 1,250,1,250,1,250,1,251,1,251,1,251,1,251,1,251,1,251,1,252,1,252, + 1,252,1,252,1,252,1,252,1,253,1,253,1,253,1,253,1,253,1,253,1,254, + 1,254,1,254,1,254,1,254,1,254,1,254,1,254,1,254,1,254,1,254,1,255, + 1,255,1,255,1,255,1,255,1,255,1,255,1,255,1,255,1,255,1,255,1,255, + 1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256, + 1,256,1,256,1,256,1,256,1,256,1,256,1,257,1,257,1,257,1,257,1,257, + 1,257,1,258,1,258,1,258,1,258,1,258,1,259,1,259,1,259,1,259,1,259, + 1,259,1,260,1,260,1,260,1,260,1,260,1,260,1,260,1,260,1,260,1,260, + 1,260,1,260,1,260,1,261,1,261,1,261,1,261,1,261,1,261,1,261,1,261, + 1,261,1,261,1,261,1,261,1,261,1,261,1,262,1,262,1,262,1,262,1,262, + 1,262,1,262,1,262,1,263,1,263,1,263,1,263,1,263,1,263,1,263,1,264, + 1,264,1,264,1,264,1,264,1,264,1,264,1,264,1,264,1,264,1,264,1,264, + 1,264,1,265,1,265,1,265,1,265,1,265,1,265,1,265,1,265,1,265,1,265, + 1,265,1,266,1,266,1,266,1,266,1,266,1,266,1,266,1,266,1,267,1,267, + 1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267, + 1,267,1,268,1,268,1,268,1,268,1,268,1,268,1,268,1,268,1,268,1,268, + 1,268,1,268,1,268,1,268,1,268,1,269,1,269,1,269,1,269,1,269,1,269, + 1,269,1,270,1,270,1,270,1,270,1,270,1,270,1,270,1,271,1,271,1,271, + 1,271,1,271,1,271,1,271,1,271,1,272,1,272,1,272,1,272,1,272,1,272, + 1,272,1,272,1,272,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273, + 1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273, + 1,273,1,273,1,273,1,273,1,274,1,274,1,274,1,274,1,274,1,274,1,274, + 1,274,1,274,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,276,1,276,1,276, + 1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276, + 1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276, + 1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276, + 1,277,1,277,1,277,1,277,1,277,1,277,1,278,1,278,1,278,1,278,1,278, + 1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278, + 1,278,1,279,1,279,1,279,1,279,1,279,1,279,1,279,1,279,1,279,1,279, + 1,279,1,279,1,279,1,279,1,279,1,279,1,279,1,280,1,280,1,280,1,280, + 1,280,1,280,1,280,1,280,1,280,1,280,1,280,1,280,1,280,1,280,1,281, + 1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,281, + 1,281,1,281,1,281,1,281,1,281,1,282,1,282,1,282,1,282,1,282,1,282, + 1,282,1,283,1,283,1,283,1,283,1,283,1,283,1,283,1,283,1,283,1,283, + 1,283,1,283,1,283,1,283,1,283,1,283,1,283,1,283,1,283,1,283,1,283, + 1,283,1,283,1,283,1,283,1,283,1,283,1,284,1,284,1,284,1,284,1,284, + 1,284,1,284,1,285,1,285,1,285,1,285,1,285,1,285,1,286,1,286,1,286, + 1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,287,1,287,1,287,1,287, + 1,287,1,287,1,287,1,287,1,287,1,287,1,287,1,287,1,287,1,287,1,287, + 1,287,1,287,1,287,1,287,1,287,1,287,1,288,1,288,1,288,1,288,1,288, + 1,288,1,288,1,288,1,288,1,288,1,288,1,288,1,288,1,288,1,288,1,288, + 1,288,1,288,1,288,1,288,1,289,1,289,1,289,1,289,1,289,1,289,1,289, + 1,289,1,289,1,289,1,289,1,289,1,289,1,289,1,290,1,290,1,290,1,290, + 1,290,1,290,1,290,1,290,1,290,1,290,1,290,1,290,1,290,1,290,1,290, + 1,290,1,290,1,290,1,290,1,290,1,290,1,291,1,291,1,291,1,291,1,291, + 1,291,1,291,1,291,1,292,1,292,1,292,1,292,1,292,1,292,1,292,1,292, + 1,292,1,292,1,292,1,292,1,292,1,292,1,292,1,292,1,292,1,292,1,293, + 1,293,1,293,1,293,1,293,1,293,1,293,1,293,1,293,1,293,1,293,1,293, + 1,293,1,293,1,293,1,293,1,293,1,293,1,293,1,293,1,293,1,293,1,293, + 1,293,1,294,1,294,1,294,1,294,1,294,1,294,1,294,1,294,1,294,1,294, + 1,294,1,294,1,294,1,294,1,294,1,295,1,295,1,295,1,295,1,295,1,295, + 1,295,1,295,1,295,1,295,1,295,1,295,1,295,1,295,1,295,1,295,1,295, + 1,295,1,295,1,295,1,295,1,296,1,296,1,296,1,296,1,296,1,296,1,296, + 1,296,1,296,1,297,1,297,1,297,1,297,1,297,1,297,1,297,1,297,1,297, + 1,297,1,297,1,297,1,298,1,298,1,298,1,298,1,298,1,298,1,298,1,298, + 1,298,1,298,1,298,1,298,1,298,1,298,1,299,1,299,1,299,1,299,1,299, + 1,299,1,299,1,299,1,299,1,299,1,299,1,299,1,299,1,299,1,299,1,300, + 1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300, + 1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,301,1,301,1,301,1,301, + 1,301,1,301,1,301,1,301,1,302,1,302,1,302,1,302,1,302,1,303,1,303, + 1,303,1,303,1,303,1,303,1,303,1,303,1,303,1,303,1,303,1,303,1,304, + 1,304,1,304,1,304,1,304,1,304,1,304,1,304,1,304,1,304,1,305,1,305, + 1,305,1,305,1,305,1,306,1,306,1,306,1,306,1,306,1,306,1,306,1,306, + 1,306,1,306,1,306,1,306,1,306,1,306,1,306,1,306,1,306,1,307,1,307, + 1,307,1,307,1,307,1,307,1,307,1,307,1,307,1,307,1,308,1,308,1,308, + 1,308,1,308,1,308,1,308,1,308,1,308,1,309,1,309,1,309,1,309,1,309, + 1,309,1,309,1,309,1,309,1,309,1,310,1,310,1,310,1,310,1,310,1,310, + 1,310,1,310,1,310,1,310,1,310,1,310,1,310,1,310,1,310,1,310,1,310, + 1,310,1,311,1,311,1,312,1,312,1,313,1,313,1,314,1,314,1,315,1,315, + 1,316,1,316,1,316,1,316,1,317,1,317,1,317,1,317,1,318,1,318,1,319, + 1,319,1,320,1,320,1,321,1,321,1,322,1,322,1,323,1,323,1,324,1,324, + 1,325,1,325,1,326,1,326,1,327,1,327,1,328,1,328,1,329,1,329,1,330, + 1,330,1,331,1,331,1,332,1,332,1,333,1,333,1,334,1,334,1,335,1,335, + 1,336,1,336,1,337,1,337,1,338,1,338,1,339,1,339,1,340,1,340,1,341, + 1,341,1,341,1,342,1,342,1,343,4,343,3620,8,343,11,343,12,343,3621, + 1,344,1,344,1,344,1,344,1,344,4,344,3629,8,344,11,344,12,344,3630, + 1,344,1,344,1,344,1,344,1,344,1,344,4,344,3639,8,344,11,344,12,344, + 3640,3,344,3643,8,344,1,345,4,345,3646,8,345,11,345,12,345,3647, + 3,345,3650,8,345,1,345,1,345,4,345,3654,8,345,11,345,12,345,3655, + 1,345,4,345,3659,8,345,11,345,12,345,3660,1,345,1,345,1,345,1,345, + 4,345,3667,8,345,11,345,12,345,3668,3,345,3671,8,345,1,345,1,345, + 4,345,3675,8,345,11,345,12,345,3676,1,345,1,345,1,345,4,345,3682, + 8,345,11,345,12,345,3683,1,345,1,345,3,345,3688,8,345,1,346,1,346, + 1,346,1,347,1,347,1,348,1,348,1,349,1,349,1,350,1,350,1,351,1,351, + 3,351,3703,8,351,1,351,4,351,3706,8,351,11,351,12,351,3707,1,352, + 4,352,3711,8,352,11,352,12,352,3712,1,352,5,352,3716,8,352,10,352, + 12,352,3719,9,352,1,353,1,353,1,353,1,353,1,353,1,353,5,353,3727, + 8,353,10,353,12,353,3730,9,353,1,353,1,353,1,354,1,354,1,354,1,354, + 1,354,1,354,5,354,3740,8,354,10,354,12,354,3743,9,354,1,354,1,354, + 1,355,1,355,1,355,1,355,1,355,1,355,5,355,3753,8,355,10,355,12,355, + 3756,9,355,1,355,1,355,1,356,1,356,1,357,1,357,1,358,1,358,1,358, + 4,358,3767,8,358,11,358,12,358,3768,1,358,1,358,1,359,1,359,1,359, + 1,359,2,735,748,0,360,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19, + 10,21,11,23,12,25,13,27,14,29,15,31,16,33,17,35,18,37,19,39,20,41, + 21,43,22,45,23,47,24,49,25,51,26,53,27,55,28,57,29,59,30,61,31,63, + 32,65,33,67,34,69,35,71,36,73,37,75,38,77,39,79,40,81,41,83,42,85, + 43,87,44,89,45,91,46,93,47,95,48,97,49,99,50,101,51,103,52,105,53, + 107,54,109,55,111,56,113,57,115,58,117,59,119,60,121,61,123,62,125, + 63,127,64,129,65,131,66,133,67,135,68,137,69,139,70,141,71,143,72, + 145,73,147,74,149,75,151,76,153,77,155,78,157,79,159,80,161,81,163, + 82,165,83,167,84,169,85,171,86,173,87,175,88,177,89,179,90,181,91, + 183,92,185,93,187,94,189,95,191,96,193,97,195,98,197,99,199,100, + 201,101,203,102,205,103,207,104,209,105,211,106,213,107,215,108, + 217,109,219,110,221,111,223,112,225,113,227,114,229,115,231,116, + 233,117,235,118,237,119,239,120,241,121,243,122,245,123,247,124, + 249,125,251,126,253,127,255,128,257,129,259,130,261,131,263,132, + 265,133,267,134,269,135,271,136,273,137,275,138,277,139,279,140, + 281,141,283,142,285,143,287,144,289,145,291,146,293,147,295,148, + 297,149,299,150,301,151,303,152,305,153,307,154,309,155,311,156, + 313,157,315,158,317,159,319,160,321,161,323,162,325,163,327,164, + 329,165,331,166,333,167,335,168,337,169,339,170,341,171,343,172, + 345,173,347,174,349,175,351,176,353,177,355,178,357,179,359,180, + 361,181,363,182,365,183,367,184,369,185,371,186,373,187,375,188, + 377,189,379,190,381,191,383,192,385,193,387,194,389,195,391,196, + 393,197,395,198,397,199,399,200,401,201,403,202,405,203,407,204, + 409,205,411,206,413,207,415,208,417,209,419,210,421,211,423,212, + 425,213,427,214,429,215,431,216,433,217,435,218,437,219,439,220, + 441,221,443,222,445,223,447,224,449,225,451,226,453,227,455,228, + 457,229,459,230,461,231,463,232,465,233,467,234,469,235,471,236, + 473,237,475,238,477,239,479,240,481,241,483,242,485,243,487,244, + 489,245,491,246,493,247,495,248,497,249,499,250,501,251,503,252, + 505,253,507,254,509,255,511,256,513,257,515,258,517,259,519,260, + 521,261,523,262,525,263,527,264,529,265,531,266,533,267,535,268, + 537,269,539,270,541,271,543,272,545,273,547,274,549,275,551,276, + 553,277,555,278,557,279,559,280,561,281,563,282,565,283,567,284, + 569,285,571,286,573,287,575,288,577,289,579,290,581,291,583,292, + 585,293,587,294,589,295,591,296,593,297,595,298,597,299,599,300, + 601,301,603,302,605,303,607,304,609,305,611,306,613,307,615,308, + 617,309,619,310,621,311,623,312,625,313,627,314,629,315,631,316, + 633,317,635,318,637,319,639,320,641,321,643,322,645,323,647,324, + 649,325,651,326,653,327,655,328,657,329,659,330,661,331,663,332, + 665,333,667,334,669,335,671,336,673,337,675,338,677,339,679,340, + 681,341,683,342,685,343,687,344,689,345,691,346,693,347,695,348, + 697,349,699,350,701,351,703,0,705,0,707,0,709,0,711,0,713,0,715, + 0,717,0,719,352,1,0,37,3,0,9,10,13,13,32,32,2,0,10,10,13,13,2,0, + 65,65,97,97,2,0,76,76,108,108,2,0,78,78,110,110,2,0,68,68,100,100, + 2,0,83,83,115,115,2,0,67,67,99,99,2,0,66,66,98,98,2,0,79,79,111, + 111,2,0,69,69,101,101,2,0,84,84,116,116,2,0,87,87,119,119,2,0,89, + 89,121,121,2,0,82,82,114,114,2,0,85,85,117,117,2,0,77,77,109,109, + 2,0,73,73,105,105,2,0,88,88,120,120,2,0,70,70,102,102,2,0,71,71, + 103,103,2,0,80,80,112,112,2,0,72,72,104,104,2,0,86,86,118,118,2, + 0,74,74,106,106,2,0,75,75,107,107,2,0,81,81,113,113,2,0,90,90,122, + 122,2,0,43,43,45,45,4,0,42,42,64,90,95,95,97,122,6,0,42,42,45,45, + 48,57,65,90,95,95,97,122,2,0,34,34,92,92,2,0,39,39,92,92,2,0,92, + 92,96,96,3,0,48,57,65,70,97,102,1,0,48,57,1,0,48,49,3806,0,1,1,0, + 0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0, + 0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,0,0, + 0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,1,0,0,0, + 0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0,0,41,1,0,0,0, + 0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,0, + 0,53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,0, + 0,63,1,0,0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0, + 0,73,1,0,0,0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0, + 0,83,1,0,0,0,0,85,1,0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0,0, + 0,93,1,0,0,0,0,95,1,0,0,0,0,97,1,0,0,0,0,99,1,0,0,0,0,101,1,0,0, + 0,0,103,1,0,0,0,0,105,1,0,0,0,0,107,1,0,0,0,0,109,1,0,0,0,0,111, + 1,0,0,0,0,113,1,0,0,0,0,115,1,0,0,0,0,117,1,0,0,0,0,119,1,0,0,0, + 0,121,1,0,0,0,0,123,1,0,0,0,0,125,1,0,0,0,0,127,1,0,0,0,0,129,1, + 0,0,0,0,131,1,0,0,0,0,133,1,0,0,0,0,135,1,0,0,0,0,137,1,0,0,0,0, + 139,1,0,0,0,0,141,1,0,0,0,0,143,1,0,0,0,0,145,1,0,0,0,0,147,1,0, + 0,0,0,149,1,0,0,0,0,151,1,0,0,0,0,153,1,0,0,0,0,155,1,0,0,0,0,157, + 1,0,0,0,0,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,0,165,1,0,0,0, + 0,167,1,0,0,0,0,169,1,0,0,0,0,171,1,0,0,0,0,173,1,0,0,0,0,175,1, + 0,0,0,0,177,1,0,0,0,0,179,1,0,0,0,0,181,1,0,0,0,0,183,1,0,0,0,0, + 185,1,0,0,0,0,187,1,0,0,0,0,189,1,0,0,0,0,191,1,0,0,0,0,193,1,0, + 0,0,0,195,1,0,0,0,0,197,1,0,0,0,0,199,1,0,0,0,0,201,1,0,0,0,0,203, + 1,0,0,0,0,205,1,0,0,0,0,207,1,0,0,0,0,209,1,0,0,0,0,211,1,0,0,0, + 0,213,1,0,0,0,0,215,1,0,0,0,0,217,1,0,0,0,0,219,1,0,0,0,0,221,1, + 0,0,0,0,223,1,0,0,0,0,225,1,0,0,0,0,227,1,0,0,0,0,229,1,0,0,0,0, + 231,1,0,0,0,0,233,1,0,0,0,0,235,1,0,0,0,0,237,1,0,0,0,0,239,1,0, + 0,0,0,241,1,0,0,0,0,243,1,0,0,0,0,245,1,0,0,0,0,247,1,0,0,0,0,249, + 1,0,0,0,0,251,1,0,0,0,0,253,1,0,0,0,0,255,1,0,0,0,0,257,1,0,0,0, + 0,259,1,0,0,0,0,261,1,0,0,0,0,263,1,0,0,0,0,265,1,0,0,0,0,267,1, + 0,0,0,0,269,1,0,0,0,0,271,1,0,0,0,0,273,1,0,0,0,0,275,1,0,0,0,0, + 277,1,0,0,0,0,279,1,0,0,0,0,281,1,0,0,0,0,283,1,0,0,0,0,285,1,0, + 0,0,0,287,1,0,0,0,0,289,1,0,0,0,0,291,1,0,0,0,0,293,1,0,0,0,0,295, + 1,0,0,0,0,297,1,0,0,0,0,299,1,0,0,0,0,301,1,0,0,0,0,303,1,0,0,0, + 0,305,1,0,0,0,0,307,1,0,0,0,0,309,1,0,0,0,0,311,1,0,0,0,0,313,1, + 0,0,0,0,315,1,0,0,0,0,317,1,0,0,0,0,319,1,0,0,0,0,321,1,0,0,0,0, + 323,1,0,0,0,0,325,1,0,0,0,0,327,1,0,0,0,0,329,1,0,0,0,0,331,1,0, + 0,0,0,333,1,0,0,0,0,335,1,0,0,0,0,337,1,0,0,0,0,339,1,0,0,0,0,341, + 1,0,0,0,0,343,1,0,0,0,0,345,1,0,0,0,0,347,1,0,0,0,0,349,1,0,0,0, + 0,351,1,0,0,0,0,353,1,0,0,0,0,355,1,0,0,0,0,357,1,0,0,0,0,359,1, + 0,0,0,0,361,1,0,0,0,0,363,1,0,0,0,0,365,1,0,0,0,0,367,1,0,0,0,0, + 369,1,0,0,0,0,371,1,0,0,0,0,373,1,0,0,0,0,375,1,0,0,0,0,377,1,0, + 0,0,0,379,1,0,0,0,0,381,1,0,0,0,0,383,1,0,0,0,0,385,1,0,0,0,0,387, + 1,0,0,0,0,389,1,0,0,0,0,391,1,0,0,0,0,393,1,0,0,0,0,395,1,0,0,0, + 0,397,1,0,0,0,0,399,1,0,0,0,0,401,1,0,0,0,0,403,1,0,0,0,0,405,1, + 0,0,0,0,407,1,0,0,0,0,409,1,0,0,0,0,411,1,0,0,0,0,413,1,0,0,0,0, + 415,1,0,0,0,0,417,1,0,0,0,0,419,1,0,0,0,0,421,1,0,0,0,0,423,1,0, + 0,0,0,425,1,0,0,0,0,427,1,0,0,0,0,429,1,0,0,0,0,431,1,0,0,0,0,433, + 1,0,0,0,0,435,1,0,0,0,0,437,1,0,0,0,0,439,1,0,0,0,0,441,1,0,0,0, + 0,443,1,0,0,0,0,445,1,0,0,0,0,447,1,0,0,0,0,449,1,0,0,0,0,451,1, + 0,0,0,0,453,1,0,0,0,0,455,1,0,0,0,0,457,1,0,0,0,0,459,1,0,0,0,0, + 461,1,0,0,0,0,463,1,0,0,0,0,465,1,0,0,0,0,467,1,0,0,0,0,469,1,0, + 0,0,0,471,1,0,0,0,0,473,1,0,0,0,0,475,1,0,0,0,0,477,1,0,0,0,0,479, + 1,0,0,0,0,481,1,0,0,0,0,483,1,0,0,0,0,485,1,0,0,0,0,487,1,0,0,0, + 0,489,1,0,0,0,0,491,1,0,0,0,0,493,1,0,0,0,0,495,1,0,0,0,0,497,1, + 0,0,0,0,499,1,0,0,0,0,501,1,0,0,0,0,503,1,0,0,0,0,505,1,0,0,0,0, + 507,1,0,0,0,0,509,1,0,0,0,0,511,1,0,0,0,0,513,1,0,0,0,0,515,1,0, + 0,0,0,517,1,0,0,0,0,519,1,0,0,0,0,521,1,0,0,0,0,523,1,0,0,0,0,525, + 1,0,0,0,0,527,1,0,0,0,0,529,1,0,0,0,0,531,1,0,0,0,0,533,1,0,0,0, + 0,535,1,0,0,0,0,537,1,0,0,0,0,539,1,0,0,0,0,541,1,0,0,0,0,543,1, + 0,0,0,0,545,1,0,0,0,0,547,1,0,0,0,0,549,1,0,0,0,0,551,1,0,0,0,0, + 553,1,0,0,0,0,555,1,0,0,0,0,557,1,0,0,0,0,559,1,0,0,0,0,561,1,0, + 0,0,0,563,1,0,0,0,0,565,1,0,0,0,0,567,1,0,0,0,0,569,1,0,0,0,0,571, + 1,0,0,0,0,573,1,0,0,0,0,575,1,0,0,0,0,577,1,0,0,0,0,579,1,0,0,0, + 0,581,1,0,0,0,0,583,1,0,0,0,0,585,1,0,0,0,0,587,1,0,0,0,0,589,1, + 0,0,0,0,591,1,0,0,0,0,593,1,0,0,0,0,595,1,0,0,0,0,597,1,0,0,0,0, + 599,1,0,0,0,0,601,1,0,0,0,0,603,1,0,0,0,0,605,1,0,0,0,0,607,1,0, + 0,0,0,609,1,0,0,0,0,611,1,0,0,0,0,613,1,0,0,0,0,615,1,0,0,0,0,617, + 1,0,0,0,0,619,1,0,0,0,0,621,1,0,0,0,0,623,1,0,0,0,0,625,1,0,0,0, + 0,627,1,0,0,0,0,629,1,0,0,0,0,631,1,0,0,0,0,633,1,0,0,0,0,635,1, + 0,0,0,0,637,1,0,0,0,0,639,1,0,0,0,0,641,1,0,0,0,0,643,1,0,0,0,0, + 645,1,0,0,0,0,647,1,0,0,0,0,649,1,0,0,0,0,651,1,0,0,0,0,653,1,0, + 0,0,0,655,1,0,0,0,0,657,1,0,0,0,0,659,1,0,0,0,0,661,1,0,0,0,0,663, + 1,0,0,0,0,665,1,0,0,0,0,667,1,0,0,0,0,669,1,0,0,0,0,671,1,0,0,0, + 0,673,1,0,0,0,0,675,1,0,0,0,0,677,1,0,0,0,0,679,1,0,0,0,0,681,1, + 0,0,0,0,683,1,0,0,0,0,685,1,0,0,0,0,687,1,0,0,0,0,689,1,0,0,0,0, + 691,1,0,0,0,0,693,1,0,0,0,0,695,1,0,0,0,0,697,1,0,0,0,0,699,1,0, + 0,0,0,701,1,0,0,0,0,719,1,0,0,0,1,722,1,0,0,0,3,728,1,0,0,0,5,742, + 1,0,0,0,7,785,1,0,0,0,9,789,1,0,0,0,11,793,1,0,0,0,13,797,1,0,0, + 0,15,800,1,0,0,0,17,804,1,0,0,0,19,812,1,0,0,0,21,820,1,0,0,0,23, + 823,1,0,0,0,25,828,1,0,0,0,27,833,1,0,0,0,29,839,1,0,0,0,31,847, + 1,0,0,0,33,856,1,0,0,0,35,863,1,0,0,0,37,868,1,0,0,0,39,877,1,0, + 0,0,41,886,1,0,0,0,43,893,1,0,0,0,45,898,1,0,0,0,47,905,1,0,0,0, + 49,911,1,0,0,0,51,917,1,0,0,0,53,923,1,0,0,0,55,928,1,0,0,0,57,934, + 1,0,0,0,59,941,1,0,0,0,61,944,1,0,0,0,63,950,1,0,0,0,65,954,1,0, + 0,0,67,962,1,0,0,0,69,965,1,0,0,0,71,970,1,0,0,0,73,975,1,0,0,0, + 75,980,1,0,0,0,77,985,1,0,0,0,79,991,1,0,0,0,81,996,1,0,0,0,83,1002, + 1,0,0,0,85,1010,1,0,0,0,87,1018,1,0,0,0,89,1022,1,0,0,0,91,1027, + 1,0,0,0,93,1033,1,0,0,0,95,1036,1,0,0,0,97,1039,1,0,0,0,99,1045, + 1,0,0,0,101,1051,1,0,0,0,103,1056,1,0,0,0,105,1066,1,0,0,0,107,1073, + 1,0,0,0,109,1079,1,0,0,0,111,1086,1,0,0,0,113,1091,1,0,0,0,115,1098, + 1,0,0,0,117,1103,1,0,0,0,119,1108,1,0,0,0,121,1114,1,0,0,0,123,1120, + 1,0,0,0,125,1125,1,0,0,0,127,1131,1,0,0,0,129,1137,1,0,0,0,131,1141, + 1,0,0,0,133,1147,1,0,0,0,135,1151,1,0,0,0,137,1155,1,0,0,0,139,1159, + 1,0,0,0,141,1167,1,0,0,0,143,1176,1,0,0,0,145,1185,1,0,0,0,147,1189, + 1,0,0,0,149,1196,1,0,0,0,151,1207,1,0,0,0,153,1219,1,0,0,0,155,1229, + 1,0,0,0,157,1234,1,0,0,0,159,1238,1,0,0,0,161,1243,1,0,0,0,163,1250, + 1,0,0,0,165,1259,1,0,0,0,167,1271,1,0,0,0,169,1278,1,0,0,0,171,1285, + 1,0,0,0,173,1290,1,0,0,0,175,1294,1,0,0,0,177,1299,1,0,0,0,179,1305, + 1,0,0,0,181,1313,1,0,0,0,183,1318,1,0,0,0,185,1337,1,0,0,0,187,1356, + 1,0,0,0,189,1370,1,0,0,0,191,1387,1,0,0,0,193,1399,1,0,0,0,195,1411, + 1,0,0,0,197,1427,1,0,0,0,199,1438,1,0,0,0,201,1449,1,0,0,0,203,1458, + 1,0,0,0,205,1469,1,0,0,0,207,1476,1,0,0,0,209,1480,1,0,0,0,211,1485, + 1,0,0,0,213,1489,1,0,0,0,215,1497,1,0,0,0,217,1503,1,0,0,0,219,1508, + 1,0,0,0,221,1513,1,0,0,0,223,1519,1,0,0,0,225,1524,1,0,0,0,227,1529, + 1,0,0,0,229,1537,1,0,0,0,231,1544,1,0,0,0,233,1554,1,0,0,0,235,1559, + 1,0,0,0,237,1570,1,0,0,0,239,1574,1,0,0,0,241,1579,1,0,0,0,243,1583, + 1,0,0,0,245,1589,1,0,0,0,247,1597,1,0,0,0,249,1605,1,0,0,0,251,1618, + 1,0,0,0,253,1631,1,0,0,0,255,1649,1,0,0,0,257,1654,1,0,0,0,259,1663, + 1,0,0,0,261,1675,1,0,0,0,263,1684,1,0,0,0,265,1693,1,0,0,0,267,1701, + 1,0,0,0,269,1712,1,0,0,0,271,1722,1,0,0,0,273,1732,1,0,0,0,275,1740, + 1,0,0,0,277,1747,1,0,0,0,279,1749,1,0,0,0,281,1753,1,0,0,0,283,1759, + 1,0,0,0,285,1767,1,0,0,0,287,1773,1,0,0,0,289,1783,1,0,0,0,291,1797, + 1,0,0,0,293,1808,1,0,0,0,295,1811,1,0,0,0,297,1818,1,0,0,0,299,1825, + 1,0,0,0,301,1834,1,0,0,0,303,1841,1,0,0,0,305,1844,1,0,0,0,307,1854, + 1,0,0,0,309,1869,1,0,0,0,311,1876,1,0,0,0,313,1880,1,0,0,0,315,1886, + 1,0,0,0,317,1891,1,0,0,0,319,1897,1,0,0,0,321,1903,1,0,0,0,323,1912, + 1,0,0,0,325,1921,1,0,0,0,327,1929,1,0,0,0,329,1939,1,0,0,0,331,1948, + 1,0,0,0,333,1952,1,0,0,0,335,1959,1,0,0,0,337,1970,1,0,0,0,339,1982, + 1,0,0,0,341,1985,1,0,0,0,343,1994,1,0,0,0,345,1998,1,0,0,0,347,2004, + 1,0,0,0,349,2012,1,0,0,0,351,2017,1,0,0,0,353,2025,1,0,0,0,355,2030, + 1,0,0,0,357,2036,1,0,0,0,359,2042,1,0,0,0,361,2050,1,0,0,0,363,2062, + 1,0,0,0,365,2067,1,0,0,0,367,2074,1,0,0,0,369,2078,1,0,0,0,371,2083, + 1,0,0,0,373,2088,1,0,0,0,375,2100,1,0,0,0,377,2108,1,0,0,0,379,2116, + 1,0,0,0,381,2125,1,0,0,0,383,2133,1,0,0,0,385,2137,1,0,0,0,387,2142, + 1,0,0,0,389,2151,1,0,0,0,391,2163,1,0,0,0,393,2175,1,0,0,0,395,2185, + 1,0,0,0,397,2194,1,0,0,0,399,2202,1,0,0,0,401,2213,1,0,0,0,403,2228, + 1,0,0,0,405,2234,1,0,0,0,407,2243,1,0,0,0,409,2252,1,0,0,0,411,2266, + 1,0,0,0,413,2268,1,0,0,0,415,2270,1,0,0,0,417,2273,1,0,0,0,419,2275, + 1,0,0,0,421,2277,1,0,0,0,423,2288,1,0,0,0,425,2293,1,0,0,0,427,2304, + 1,0,0,0,429,2319,1,0,0,0,431,2332,1,0,0,0,433,2344,1,0,0,0,435,2356, + 1,0,0,0,437,2364,1,0,0,0,439,2379,1,0,0,0,441,2385,1,0,0,0,443,2392, + 1,0,0,0,445,2409,1,0,0,0,447,2418,1,0,0,0,449,2431,1,0,0,0,451,2450, + 1,0,0,0,453,2465,1,0,0,0,455,2477,1,0,0,0,457,2487,1,0,0,0,459,2499, + 1,0,0,0,461,2507,1,0,0,0,463,2516,1,0,0,0,465,2528,1,0,0,0,467,2541, + 1,0,0,0,469,2558,1,0,0,0,471,2578,1,0,0,0,473,2591,1,0,0,0,475,2611, + 1,0,0,0,477,2622,1,0,0,0,479,2634,1,0,0,0,481,2648,1,0,0,0,483,2663, + 1,0,0,0,485,2677,1,0,0,0,487,2688,1,0,0,0,489,2700,1,0,0,0,491,2716, + 1,0,0,0,493,2723,1,0,0,0,495,2735,1,0,0,0,497,2746,1,0,0,0,499,2764, + 1,0,0,0,501,2777,1,0,0,0,503,2792,1,0,0,0,505,2798,1,0,0,0,507,2804, + 1,0,0,0,509,2810,1,0,0,0,511,2821,1,0,0,0,513,2833,1,0,0,0,515,2850, + 1,0,0,0,517,2856,1,0,0,0,519,2861,1,0,0,0,521,2867,1,0,0,0,523,2880, + 1,0,0,0,525,2894,1,0,0,0,527,2902,1,0,0,0,529,2909,1,0,0,0,531,2922, + 1,0,0,0,533,2933,1,0,0,0,535,2941,1,0,0,0,537,2955,1,0,0,0,539,2970, + 1,0,0,0,541,2977,1,0,0,0,543,2984,1,0,0,0,545,2992,1,0,0,0,547,3001, + 1,0,0,0,549,3024,1,0,0,0,551,3033,1,0,0,0,553,3050,1,0,0,0,555,3086, + 1,0,0,0,557,3092,1,0,0,0,559,3109,1,0,0,0,561,3126,1,0,0,0,563,3140, + 1,0,0,0,565,3157,1,0,0,0,567,3164,1,0,0,0,569,3191,1,0,0,0,571,3198, + 1,0,0,0,573,3204,1,0,0,0,575,3214,1,0,0,0,577,3235,1,0,0,0,579,3255, + 1,0,0,0,581,3269,1,0,0,0,583,3290,1,0,0,0,585,3298,1,0,0,0,587,3316, + 1,0,0,0,589,3340,1,0,0,0,591,3355,1,0,0,0,593,3376,1,0,0,0,595,3385, + 1,0,0,0,597,3397,1,0,0,0,599,3411,1,0,0,0,601,3426,1,0,0,0,603,3445, + 1,0,0,0,605,3453,1,0,0,0,607,3458,1,0,0,0,609,3470,1,0,0,0,611,3480, + 1,0,0,0,613,3485,1,0,0,0,615,3502,1,0,0,0,617,3512,1,0,0,0,619,3521, + 1,0,0,0,621,3531,1,0,0,0,623,3549,1,0,0,0,625,3551,1,0,0,0,627,3553, + 1,0,0,0,629,3555,1,0,0,0,631,3557,1,0,0,0,633,3559,1,0,0,0,635,3563, + 1,0,0,0,637,3567,1,0,0,0,639,3569,1,0,0,0,641,3571,1,0,0,0,643,3573, + 1,0,0,0,645,3575,1,0,0,0,647,3577,1,0,0,0,649,3579,1,0,0,0,651,3581, + 1,0,0,0,653,3583,1,0,0,0,655,3585,1,0,0,0,657,3587,1,0,0,0,659,3589, + 1,0,0,0,661,3591,1,0,0,0,663,3593,1,0,0,0,665,3595,1,0,0,0,667,3597, + 1,0,0,0,669,3599,1,0,0,0,671,3601,1,0,0,0,673,3603,1,0,0,0,675,3605, + 1,0,0,0,677,3607,1,0,0,0,679,3609,1,0,0,0,681,3611,1,0,0,0,683,3613, + 1,0,0,0,685,3616,1,0,0,0,687,3619,1,0,0,0,689,3642,1,0,0,0,691,3687, + 1,0,0,0,693,3689,1,0,0,0,695,3692,1,0,0,0,697,3694,1,0,0,0,699,3696, + 1,0,0,0,701,3698,1,0,0,0,703,3700,1,0,0,0,705,3710,1,0,0,0,707,3720, + 1,0,0,0,709,3733,1,0,0,0,711,3746,1,0,0,0,713,3759,1,0,0,0,715,3761, + 1,0,0,0,717,3763,1,0,0,0,719,3772,1,0,0,0,721,723,7,0,0,0,722,721, + 1,0,0,0,723,724,1,0,0,0,724,722,1,0,0,0,724,725,1,0,0,0,725,726, + 1,0,0,0,726,727,6,0,0,0,727,2,1,0,0,0,728,729,5,47,0,0,729,730,5, + 42,0,0,730,731,5,33,0,0,731,733,1,0,0,0,732,734,9,0,0,0,733,732, + 1,0,0,0,734,735,1,0,0,0,735,736,1,0,0,0,735,733,1,0,0,0,736,737, + 1,0,0,0,737,738,5,42,0,0,738,739,5,47,0,0,739,740,1,0,0,0,740,741, + 6,1,1,0,741,4,1,0,0,0,742,743,5,47,0,0,743,744,5,42,0,0,744,748, + 1,0,0,0,745,747,9,0,0,0,746,745,1,0,0,0,747,750,1,0,0,0,748,749, + 1,0,0,0,748,746,1,0,0,0,749,751,1,0,0,0,750,748,1,0,0,0,751,752, + 5,42,0,0,752,753,5,47,0,0,753,754,1,0,0,0,754,755,6,2,0,0,755,6, + 1,0,0,0,756,757,5,45,0,0,757,758,5,45,0,0,758,761,5,32,0,0,759,761, + 5,35,0,0,760,756,1,0,0,0,760,759,1,0,0,0,761,765,1,0,0,0,762,764, + 8,1,0,0,763,762,1,0,0,0,764,767,1,0,0,0,765,763,1,0,0,0,765,766, + 1,0,0,0,766,773,1,0,0,0,767,765,1,0,0,0,768,770,5,13,0,0,769,768, + 1,0,0,0,769,770,1,0,0,0,770,771,1,0,0,0,771,774,5,10,0,0,772,774, + 5,0,0,1,773,769,1,0,0,0,773,772,1,0,0,0,774,786,1,0,0,0,775,776, + 5,45,0,0,776,777,5,45,0,0,777,783,1,0,0,0,778,780,5,13,0,0,779,778, + 1,0,0,0,779,780,1,0,0,0,780,781,1,0,0,0,781,784,5,10,0,0,782,784, + 5,0,0,1,783,779,1,0,0,0,783,782,1,0,0,0,784,786,1,0,0,0,785,760, + 1,0,0,0,785,775,1,0,0,0,786,787,1,0,0,0,787,788,6,3,0,0,788,8,1, + 0,0,0,789,790,7,2,0,0,790,791,7,3,0,0,791,792,7,3,0,0,792,10,1,0, + 0,0,793,794,7,2,0,0,794,795,7,4,0,0,795,796,7,5,0,0,796,12,1,0,0, + 0,797,798,7,2,0,0,798,799,7,6,0,0,799,14,1,0,0,0,800,801,7,2,0,0, + 801,802,7,6,0,0,802,803,7,7,0,0,803,16,1,0,0,0,804,805,7,8,0,0,805, + 806,7,9,0,0,806,807,7,9,0,0,807,808,7,3,0,0,808,809,7,10,0,0,809, + 810,7,2,0,0,810,811,7,4,0,0,811,18,1,0,0,0,812,813,7,8,0,0,813,814, + 7,10,0,0,814,815,7,11,0,0,815,816,7,12,0,0,816,817,7,10,0,0,817, + 818,7,10,0,0,818,819,7,4,0,0,819,20,1,0,0,0,820,821,7,8,0,0,821, + 822,7,13,0,0,822,22,1,0,0,0,823,824,7,7,0,0,824,825,7,2,0,0,825, + 826,7,6,0,0,826,827,7,10,0,0,827,24,1,0,0,0,828,829,7,7,0,0,829, + 830,7,2,0,0,830,831,7,6,0,0,831,832,7,11,0,0,832,26,1,0,0,0,833, + 834,7,7,0,0,834,835,7,14,0,0,835,836,7,9,0,0,836,837,7,6,0,0,837, + 838,7,6,0,0,838,28,1,0,0,0,839,840,7,7,0,0,840,841,7,9,0,0,841,842, + 7,3,0,0,842,843,7,15,0,0,843,844,7,16,0,0,844,845,7,4,0,0,845,846, + 7,6,0,0,846,30,1,0,0,0,847,848,7,5,0,0,848,849,7,2,0,0,849,850,7, + 11,0,0,850,851,7,10,0,0,851,852,7,11,0,0,852,853,7,17,0,0,853,854, + 7,16,0,0,854,855,7,10,0,0,855,32,1,0,0,0,856,857,7,5,0,0,857,858, + 7,10,0,0,858,859,7,3,0,0,859,860,7,10,0,0,860,861,7,11,0,0,861,862, + 7,10,0,0,862,34,1,0,0,0,863,864,7,5,0,0,864,865,7,10,0,0,865,866, + 7,6,0,0,866,867,7,7,0,0,867,36,1,0,0,0,868,869,7,5,0,0,869,870,7, + 10,0,0,870,871,7,6,0,0,871,872,7,7,0,0,872,873,7,14,0,0,873,874, + 7,17,0,0,874,875,7,8,0,0,875,876,7,10,0,0,876,38,1,0,0,0,877,878, + 7,5,0,0,878,879,7,17,0,0,879,880,7,6,0,0,880,881,7,11,0,0,881,882, + 7,17,0,0,882,883,7,4,0,0,883,884,7,7,0,0,884,885,7,11,0,0,885,40, + 1,0,0,0,886,887,7,5,0,0,887,888,7,9,0,0,888,889,7,15,0,0,889,890, + 7,8,0,0,890,891,7,3,0,0,891,892,7,10,0,0,892,42,1,0,0,0,893,894, + 7,10,0,0,894,895,7,3,0,0,895,896,7,6,0,0,896,897,7,10,0,0,897,44, + 1,0,0,0,898,899,7,10,0,0,899,900,7,18,0,0,900,901,7,17,0,0,901,902, + 7,6,0,0,902,903,7,11,0,0,903,904,7,6,0,0,904,46,1,0,0,0,905,906, + 7,19,0,0,906,907,7,2,0,0,907,908,7,3,0,0,908,909,7,6,0,0,909,910, + 7,10,0,0,910,48,1,0,0,0,911,912,7,19,0,0,912,913,7,3,0,0,913,914, + 7,9,0,0,914,915,7,2,0,0,915,916,7,11,0,0,916,50,1,0,0,0,917,918, + 7,19,0,0,918,919,7,17,0,0,919,920,7,14,0,0,920,921,7,6,0,0,921,922, + 7,11,0,0,922,52,1,0,0,0,923,924,7,19,0,0,924,925,7,14,0,0,925,926, + 7,9,0,0,926,927,7,16,0,0,927,54,1,0,0,0,928,929,7,20,0,0,929,930, + 7,14,0,0,930,931,7,9,0,0,931,932,7,15,0,0,932,933,7,21,0,0,933,56, + 1,0,0,0,934,935,7,22,0,0,935,936,7,2,0,0,936,937,7,23,0,0,937,938, + 7,17,0,0,938,939,7,4,0,0,939,940,7,20,0,0,940,58,1,0,0,0,941,942, + 7,17,0,0,942,943,7,4,0,0,943,60,1,0,0,0,944,945,7,17,0,0,945,946, + 7,4,0,0,946,947,7,4,0,0,947,948,7,10,0,0,948,949,7,14,0,0,949,62, + 1,0,0,0,950,951,7,17,0,0,951,952,7,4,0,0,952,953,7,11,0,0,953,64, + 1,0,0,0,954,955,7,17,0,0,955,956,7,4,0,0,956,957,7,11,0,0,957,958, + 7,10,0,0,958,959,7,20,0,0,959,960,7,10,0,0,960,961,7,14,0,0,961, + 66,1,0,0,0,962,963,7,17,0,0,963,964,7,6,0,0,964,68,1,0,0,0,965,966, + 7,24,0,0,966,967,7,9,0,0,967,968,7,17,0,0,968,969,7,4,0,0,969,70, + 1,0,0,0,970,971,7,3,0,0,971,972,7,2,0,0,972,973,7,6,0,0,973,974, + 7,11,0,0,974,72,1,0,0,0,975,976,7,3,0,0,976,977,7,10,0,0,977,978, + 7,19,0,0,978,979,7,11,0,0,979,74,1,0,0,0,980,981,7,3,0,0,981,982, + 7,17,0,0,982,983,7,25,0,0,983,984,7,10,0,0,984,76,1,0,0,0,985,986, + 7,3,0,0,986,987,7,17,0,0,987,988,7,16,0,0,988,989,7,17,0,0,989,990, + 7,11,0,0,990,78,1,0,0,0,991,992,7,3,0,0,992,993,7,9,0,0,993,994, + 7,4,0,0,994,995,7,20,0,0,995,80,1,0,0,0,996,997,7,16,0,0,997,998, + 7,2,0,0,998,999,7,11,0,0,999,1000,7,7,0,0,1000,1001,7,22,0,0,1001, + 82,1,0,0,0,1002,1003,7,4,0,0,1003,1004,7,2,0,0,1004,1005,7,11,0, + 0,1005,1006,7,15,0,0,1006,1007,7,14,0,0,1007,1008,7,2,0,0,1008,1009, + 7,3,0,0,1009,84,1,0,0,0,1010,1011,7,16,0,0,1011,1012,7,17,0,0,1012, + 1013,7,6,0,0,1013,1014,7,6,0,0,1014,1015,7,17,0,0,1015,1016,7,4, + 0,0,1016,1017,7,20,0,0,1017,86,1,0,0,0,1018,1019,7,4,0,0,1019,1020, + 7,9,0,0,1020,1021,7,11,0,0,1021,88,1,0,0,0,1022,1023,7,4,0,0,1023, + 1024,7,15,0,0,1024,1025,7,3,0,0,1025,1026,7,3,0,0,1026,90,1,0,0, + 0,1027,1028,7,4,0,0,1028,1029,7,15,0,0,1029,1030,7,3,0,0,1030,1031, + 7,3,0,0,1031,1032,7,6,0,0,1032,92,1,0,0,0,1033,1034,7,9,0,0,1034, + 1035,7,4,0,0,1035,94,1,0,0,0,1036,1037,7,9,0,0,1037,1038,7,14,0, + 0,1038,96,1,0,0,0,1039,1040,7,9,0,0,1040,1041,7,14,0,0,1041,1042, + 7,5,0,0,1042,1043,7,10,0,0,1043,1044,7,14,0,0,1044,98,1,0,0,0,1045, + 1046,7,9,0,0,1046,1047,7,15,0,0,1047,1048,7,11,0,0,1048,1049,7,10, + 0,0,1049,1050,7,14,0,0,1050,100,1,0,0,0,1051,1052,7,9,0,0,1052,1053, + 7,23,0,0,1053,1054,7,10,0,0,1054,1055,7,14,0,0,1055,102,1,0,0,0, + 1056,1057,7,21,0,0,1057,1058,7,2,0,0,1058,1059,7,14,0,0,1059,1060, + 7,11,0,0,1060,1061,7,17,0,0,1061,1062,7,11,0,0,1062,1063,7,17,0, + 0,1063,1064,7,9,0,0,1064,1065,7,4,0,0,1065,104,1,0,0,0,1066,1067, + 7,14,0,0,1067,1068,7,10,0,0,1068,1069,7,20,0,0,1069,1070,7,10,0, + 0,1070,1071,7,18,0,0,1071,1072,7,21,0,0,1072,106,1,0,0,0,1073,1074, + 7,14,0,0,1074,1075,7,17,0,0,1075,1076,7,20,0,0,1076,1077,7,22,0, + 0,1077,1078,7,11,0,0,1078,108,1,0,0,0,1079,1080,7,6,0,0,1080,1081, + 7,10,0,0,1081,1082,7,3,0,0,1082,1083,7,10,0,0,1083,1084,7,7,0,0, + 1084,1085,7,11,0,0,1085,110,1,0,0,0,1086,1087,7,6,0,0,1087,1088, + 7,22,0,0,1088,1089,7,9,0,0,1089,1090,7,12,0,0,1090,112,1,0,0,0,1091, + 1092,7,6,0,0,1092,1093,7,11,0,0,1093,1094,7,14,0,0,1094,1095,7,17, + 0,0,1095,1096,7,4,0,0,1096,1097,7,20,0,0,1097,114,1,0,0,0,1098,1099, + 7,11,0,0,1099,1100,7,22,0,0,1100,1101,7,10,0,0,1101,1102,7,4,0,0, + 1102,116,1,0,0,0,1103,1104,7,11,0,0,1104,1105,7,14,0,0,1105,1106, + 7,15,0,0,1106,1107,7,10,0,0,1107,118,1,0,0,0,1108,1109,7,15,0,0, + 1109,1110,7,4,0,0,1110,1111,7,17,0,0,1111,1112,7,9,0,0,1112,1113, + 7,4,0,0,1113,120,1,0,0,0,1114,1115,7,15,0,0,1115,1116,7,6,0,0,1116, + 1117,7,17,0,0,1117,1118,7,4,0,0,1118,1119,7,20,0,0,1119,122,1,0, + 0,0,1120,1121,7,12,0,0,1121,1122,7,22,0,0,1122,1123,7,10,0,0,1123, + 1124,7,4,0,0,1124,124,1,0,0,0,1125,1126,7,12,0,0,1126,1127,7,22, + 0,0,1127,1128,7,10,0,0,1128,1129,7,14,0,0,1129,1130,7,10,0,0,1130, + 126,1,0,0,0,1131,1132,7,16,0,0,1132,1133,7,17,0,0,1133,1134,7,4, + 0,0,1134,1135,7,15,0,0,1135,1136,7,6,0,0,1136,128,1,0,0,0,1137,1138, + 7,2,0,0,1138,1139,7,23,0,0,1139,1140,7,20,0,0,1140,130,1,0,0,0,1141, + 1142,7,7,0,0,1142,1143,7,9,0,0,1143,1144,7,15,0,0,1144,1145,7,4, + 0,0,1145,1146,7,11,0,0,1146,132,1,0,0,0,1147,1148,7,16,0,0,1148, + 1149,7,2,0,0,1149,1150,7,18,0,0,1150,134,1,0,0,0,1151,1152,7,16, + 0,0,1152,1153,7,17,0,0,1153,1154,7,4,0,0,1154,136,1,0,0,0,1155,1156, + 7,6,0,0,1156,1157,7,15,0,0,1157,1158,7,16,0,0,1158,138,1,0,0,0,1159, + 1160,7,23,0,0,1160,1161,7,2,0,0,1161,1162,7,14,0,0,1162,1163,5,95, + 0,0,1163,1164,7,21,0,0,1164,1165,7,9,0,0,1165,1166,7,21,0,0,1166, + 140,1,0,0,0,1167,1168,7,23,0,0,1168,1169,7,2,0,0,1169,1170,7,14, + 0,0,1170,1171,5,95,0,0,1171,1172,7,6,0,0,1172,1173,7,2,0,0,1173, + 1174,7,16,0,0,1174,1175,7,21,0,0,1175,142,1,0,0,0,1176,1177,7,23, + 0,0,1177,1178,7,2,0,0,1178,1179,7,14,0,0,1179,1180,7,17,0,0,1180, + 1181,7,2,0,0,1181,1182,7,4,0,0,1182,1183,7,7,0,0,1183,1184,7,10, + 0,0,1184,144,1,0,0,0,1185,1186,7,6,0,0,1186,1187,7,11,0,0,1187,1188, + 7,5,0,0,1188,146,1,0,0,0,1189,1190,7,6,0,0,1190,1191,7,11,0,0,1191, + 1192,7,5,0,0,1192,1193,7,5,0,0,1193,1194,7,10,0,0,1194,1195,7,23, + 0,0,1195,148,1,0,0,0,1196,1197,7,6,0,0,1197,1198,7,11,0,0,1198,1199, + 7,5,0,0,1199,1200,7,5,0,0,1200,1201,7,10,0,0,1201,1202,7,23,0,0, + 1202,1203,5,95,0,0,1203,1204,7,21,0,0,1204,1205,7,9,0,0,1205,1206, + 7,21,0,0,1206,150,1,0,0,0,1207,1208,7,6,0,0,1208,1209,7,11,0,0,1209, + 1210,7,5,0,0,1210,1211,7,5,0,0,1211,1212,7,10,0,0,1212,1213,7,23, + 0,0,1213,1214,5,95,0,0,1214,1215,7,6,0,0,1215,1216,7,2,0,0,1216, + 1217,7,16,0,0,1217,1218,7,21,0,0,1218,152,1,0,0,0,1219,1220,7,6, + 0,0,1220,1221,7,15,0,0,1221,1222,7,8,0,0,1222,1223,7,6,0,0,1223, + 1224,7,11,0,0,1224,1225,7,14,0,0,1225,1226,7,17,0,0,1226,1227,7, + 4,0,0,1227,1228,7,20,0,0,1228,154,1,0,0,0,1229,1230,7,11,0,0,1230, + 1231,7,14,0,0,1231,1232,7,17,0,0,1232,1233,7,16,0,0,1233,156,1,0, + 0,0,1234,1235,7,10,0,0,1235,1236,7,4,0,0,1236,1237,7,5,0,0,1237, + 158,1,0,0,0,1238,1239,7,19,0,0,1239,1240,7,15,0,0,1240,1241,7,3, + 0,0,1241,1242,7,3,0,0,1242,160,1,0,0,0,1243,1244,7,9,0,0,1244,1245, + 7,19,0,0,1245,1246,7,19,0,0,1246,1247,7,6,0,0,1247,1248,7,10,0,0, + 1248,1249,7,11,0,0,1249,162,1,0,0,0,1250,1251,7,17,0,0,1251,1252, + 7,4,0,0,1252,1253,7,11,0,0,1253,1254,7,10,0,0,1254,1255,7,14,0,0, + 1255,1256,7,23,0,0,1256,1257,7,2,0,0,1257,1258,7,3,0,0,1258,164, + 1,0,0,0,1259,1260,7,16,0,0,1260,1261,7,17,0,0,1261,1262,7,7,0,0, + 1262,1263,7,14,0,0,1263,1264,7,9,0,0,1264,1265,7,6,0,0,1265,1266, + 7,10,0,0,1266,1267,7,7,0,0,1267,1268,7,9,0,0,1268,1269,7,4,0,0,1269, + 1270,7,5,0,0,1270,166,1,0,0,0,1271,1272,7,6,0,0,1272,1273,7,10,0, + 0,1273,1274,7,7,0,0,1274,1275,7,9,0,0,1275,1276,7,4,0,0,1276,1277, + 7,5,0,0,1277,168,1,0,0,0,1278,1279,7,16,0,0,1279,1280,7,17,0,0,1280, + 1281,7,4,0,0,1281,1282,7,15,0,0,1282,1283,7,11,0,0,1283,1284,7,10, + 0,0,1284,170,1,0,0,0,1285,1286,7,22,0,0,1286,1287,7,9,0,0,1287,1288, + 7,15,0,0,1288,1289,7,14,0,0,1289,172,1,0,0,0,1290,1291,7,5,0,0,1291, + 1292,7,2,0,0,1292,1293,7,13,0,0,1293,174,1,0,0,0,1294,1295,7,12, + 0,0,1295,1296,7,10,0,0,1296,1297,7,10,0,0,1297,1298,7,25,0,0,1298, + 176,1,0,0,0,1299,1300,7,16,0,0,1300,1301,7,9,0,0,1301,1302,7,4,0, + 0,1302,1303,7,11,0,0,1303,1304,7,22,0,0,1304,178,1,0,0,0,1305,1306, + 7,26,0,0,1306,1307,7,15,0,0,1307,1308,7,2,0,0,1308,1309,7,14,0,0, + 1309,1310,7,11,0,0,1310,1311,7,10,0,0,1311,1312,7,14,0,0,1312,180, + 1,0,0,0,1313,1314,7,13,0,0,1314,1315,7,10,0,0,1315,1316,7,2,0,0, + 1316,1317,7,14,0,0,1317,182,1,0,0,0,1318,1319,7,6,0,0,1319,1320, + 7,10,0,0,1320,1321,7,7,0,0,1321,1322,7,9,0,0,1322,1323,7,4,0,0,1323, + 1324,7,5,0,0,1324,1325,5,95,0,0,1325,1326,7,16,0,0,1326,1327,7,17, + 0,0,1327,1328,7,7,0,0,1328,1329,7,14,0,0,1329,1330,7,9,0,0,1330, + 1331,7,6,0,0,1331,1332,7,10,0,0,1332,1333,7,7,0,0,1333,1334,7,9, + 0,0,1334,1335,7,4,0,0,1335,1336,7,5,0,0,1336,184,1,0,0,0,1337,1338, + 7,16,0,0,1338,1339,7,17,0,0,1339,1340,7,4,0,0,1340,1341,7,15,0,0, + 1341,1342,7,11,0,0,1342,1343,7,10,0,0,1343,1344,5,95,0,0,1344,1345, + 7,16,0,0,1345,1346,7,17,0,0,1346,1347,7,7,0,0,1347,1348,7,14,0,0, + 1348,1349,7,9,0,0,1349,1350,7,6,0,0,1350,1351,7,10,0,0,1351,1352, + 7,7,0,0,1352,1353,7,9,0,0,1353,1354,7,4,0,0,1354,1355,7,5,0,0,1355, + 186,1,0,0,0,1356,1357,7,16,0,0,1357,1358,7,17,0,0,1358,1359,7,4, + 0,0,1359,1360,7,15,0,0,1360,1361,7,11,0,0,1361,1362,7,10,0,0,1362, + 1363,5,95,0,0,1363,1364,7,6,0,0,1364,1365,7,10,0,0,1365,1366,7,7, + 0,0,1366,1367,7,9,0,0,1367,1368,7,4,0,0,1368,1369,7,5,0,0,1369,188, + 1,0,0,0,1370,1371,7,22,0,0,1371,1372,7,9,0,0,1372,1373,7,15,0,0, + 1373,1374,7,14,0,0,1374,1375,5,95,0,0,1375,1376,7,16,0,0,1376,1377, + 7,17,0,0,1377,1378,7,7,0,0,1378,1379,7,14,0,0,1379,1380,7,9,0,0, + 1380,1381,7,6,0,0,1381,1382,7,10,0,0,1382,1383,7,7,0,0,1383,1384, + 7,9,0,0,1384,1385,7,4,0,0,1385,1386,7,5,0,0,1386,190,1,0,0,0,1387, + 1388,7,22,0,0,1388,1389,7,9,0,0,1389,1390,7,15,0,0,1390,1391,7,14, + 0,0,1391,1392,5,95,0,0,1392,1393,7,6,0,0,1393,1394,7,10,0,0,1394, + 1395,7,7,0,0,1395,1396,7,9,0,0,1396,1397,7,4,0,0,1397,1398,7,5,0, + 0,1398,192,1,0,0,0,1399,1400,7,22,0,0,1400,1401,7,9,0,0,1401,1402, + 7,15,0,0,1402,1403,7,14,0,0,1403,1404,5,95,0,0,1404,1405,7,16,0, + 0,1405,1406,7,17,0,0,1406,1407,7,4,0,0,1407,1408,7,15,0,0,1408,1409, + 7,11,0,0,1409,1410,7,10,0,0,1410,194,1,0,0,0,1411,1412,7,5,0,0,1412, + 1413,7,2,0,0,1413,1414,7,13,0,0,1414,1415,5,95,0,0,1415,1416,7,16, + 0,0,1416,1417,7,17,0,0,1417,1418,7,7,0,0,1418,1419,7,14,0,0,1419, + 1420,7,9,0,0,1420,1421,7,6,0,0,1421,1422,7,10,0,0,1422,1423,7,7, + 0,0,1423,1424,7,9,0,0,1424,1425,7,4,0,0,1425,1426,7,5,0,0,1426,196, + 1,0,0,0,1427,1428,7,5,0,0,1428,1429,7,2,0,0,1429,1430,7,13,0,0,1430, + 1431,5,95,0,0,1431,1432,7,6,0,0,1432,1433,7,10,0,0,1433,1434,7,7, + 0,0,1434,1435,7,9,0,0,1435,1436,7,4,0,0,1436,1437,7,5,0,0,1437,198, + 1,0,0,0,1438,1439,7,5,0,0,1439,1440,7,2,0,0,1440,1441,7,13,0,0,1441, + 1442,5,95,0,0,1442,1443,7,16,0,0,1443,1444,7,17,0,0,1444,1445,7, + 4,0,0,1445,1446,7,15,0,0,1446,1447,7,11,0,0,1447,1448,7,10,0,0,1448, + 200,1,0,0,0,1449,1450,7,5,0,0,1450,1451,7,2,0,0,1451,1452,7,13,0, + 0,1452,1453,5,95,0,0,1453,1454,7,22,0,0,1454,1455,7,9,0,0,1455,1456, + 7,15,0,0,1456,1457,7,14,0,0,1457,202,1,0,0,0,1458,1459,7,13,0,0, + 1459,1460,7,10,0,0,1460,1461,7,2,0,0,1461,1462,7,14,0,0,1462,1463, + 5,95,0,0,1463,1464,7,16,0,0,1464,1465,7,9,0,0,1465,1466,7,4,0,0, + 1466,1467,7,11,0,0,1467,1468,7,22,0,0,1468,204,1,0,0,0,1469,1470, + 7,11,0,0,1470,1471,7,2,0,0,1471,1472,7,8,0,0,1472,1473,7,3,0,0,1473, + 1474,7,10,0,0,1474,1475,7,6,0,0,1475,206,1,0,0,0,1476,1477,7,2,0, + 0,1477,1478,7,8,0,0,1478,1479,7,6,0,0,1479,208,1,0,0,0,1480,1481, + 7,2,0,0,1481,1482,7,7,0,0,1482,1483,7,9,0,0,1483,1484,7,6,0,0,1484, + 210,1,0,0,0,1485,1486,7,2,0,0,1486,1487,7,5,0,0,1487,1488,7,5,0, + 0,1488,212,1,0,0,0,1489,1490,7,2,0,0,1490,1491,7,5,0,0,1491,1492, + 7,5,0,0,1492,1493,7,11,0,0,1493,1494,7,17,0,0,1494,1495,7,16,0,0, + 1495,1496,7,10,0,0,1496,214,1,0,0,0,1497,1498,7,2,0,0,1498,1499, + 7,6,0,0,1499,1500,7,7,0,0,1500,1501,7,17,0,0,1501,1502,7,17,0,0, + 1502,216,1,0,0,0,1503,1504,7,2,0,0,1504,1505,7,6,0,0,1505,1506,7, + 17,0,0,1506,1507,7,4,0,0,1507,218,1,0,0,0,1508,1509,7,2,0,0,1509, + 1510,7,11,0,0,1510,1511,7,2,0,0,1511,1512,7,4,0,0,1512,220,1,0,0, + 0,1513,1514,7,2,0,0,1514,1515,7,11,0,0,1515,1516,7,2,0,0,1516,1517, + 7,4,0,0,1517,1518,5,50,0,0,1518,222,1,0,0,0,1519,1520,7,7,0,0,1520, + 1521,7,8,0,0,1521,1522,7,14,0,0,1522,1523,7,11,0,0,1523,224,1,0, + 0,0,1524,1525,7,7,0,0,1525,1526,7,10,0,0,1526,1527,7,17,0,0,1527, + 1528,7,3,0,0,1528,226,1,0,0,0,1529,1530,7,7,0,0,1530,1531,7,10,0, + 0,1531,1532,7,17,0,0,1532,1533,7,3,0,0,1533,1534,7,17,0,0,1534,1535, + 7,4,0,0,1535,1536,7,20,0,0,1536,228,1,0,0,0,1537,1538,7,7,0,0,1538, + 1539,7,9,0,0,1539,1540,7,4,0,0,1540,1541,7,7,0,0,1541,1542,7,2,0, + 0,1542,1543,7,11,0,0,1543,230,1,0,0,0,1544,1545,7,7,0,0,1545,1546, + 7,9,0,0,1546,1547,7,4,0,0,1547,1548,7,7,0,0,1548,1549,7,2,0,0,1549, + 1550,7,11,0,0,1550,1551,5,95,0,0,1551,1552,7,12,0,0,1552,1553,7, + 6,0,0,1553,232,1,0,0,0,1554,1555,7,7,0,0,1555,1556,7,9,0,0,1556, + 1557,7,4,0,0,1557,1558,7,23,0,0,1558,234,1,0,0,0,1559,1560,7,7,0, + 0,1560,1561,7,9,0,0,1561,1562,7,4,0,0,1562,1563,7,23,0,0,1563,1564, + 7,10,0,0,1564,1565,7,14,0,0,1565,1566,7,11,0,0,1566,1567,5,95,0, + 0,1567,1568,7,11,0,0,1568,1569,7,27,0,0,1569,236,1,0,0,0,1570,1571, + 7,7,0,0,1571,1572,7,9,0,0,1572,1573,7,6,0,0,1573,238,1,0,0,0,1574, + 1575,7,7,0,0,1575,1576,7,9,0,0,1576,1577,7,6,0,0,1577,1578,7,22, + 0,0,1578,240,1,0,0,0,1579,1580,7,7,0,0,1580,1581,7,9,0,0,1581,1582, + 7,11,0,0,1582,242,1,0,0,0,1583,1584,7,7,0,0,1584,1585,7,14,0,0,1585, + 1586,7,7,0,0,1586,1587,5,51,0,0,1587,1588,5,50,0,0,1588,244,1,0, + 0,0,1589,1590,7,7,0,0,1590,1591,7,15,0,0,1591,1592,7,14,0,0,1592, + 1593,7,5,0,0,1593,1594,7,2,0,0,1594,1595,7,11,0,0,1595,1596,7,10, + 0,0,1596,246,1,0,0,0,1597,1598,7,7,0,0,1598,1599,7,15,0,0,1599,1600, + 7,14,0,0,1600,1601,7,11,0,0,1601,1602,7,17,0,0,1602,1603,7,16,0, + 0,1603,1604,7,10,0,0,1604,248,1,0,0,0,1605,1606,7,7,0,0,1606,1607, + 7,15,0,0,1607,1608,7,14,0,0,1608,1609,7,14,0,0,1609,1610,7,10,0, + 0,1610,1611,7,4,0,0,1611,1612,7,11,0,0,1612,1613,5,95,0,0,1613,1614, + 7,5,0,0,1614,1615,7,2,0,0,1615,1616,7,11,0,0,1616,1617,7,10,0,0, + 1617,250,1,0,0,0,1618,1619,7,7,0,0,1619,1620,7,15,0,0,1620,1621, + 7,14,0,0,1621,1622,7,14,0,0,1622,1623,7,10,0,0,1623,1624,7,4,0,0, + 1624,1625,7,11,0,0,1625,1626,5,95,0,0,1626,1627,7,11,0,0,1627,1628, + 7,17,0,0,1628,1629,7,16,0,0,1629,1630,7,10,0,0,1630,252,1,0,0,0, + 1631,1632,7,7,0,0,1632,1633,7,15,0,0,1633,1634,7,14,0,0,1634,1635, + 7,14,0,0,1635,1636,7,10,0,0,1636,1637,7,4,0,0,1637,1638,7,11,0,0, + 1638,1639,5,95,0,0,1639,1640,7,11,0,0,1640,1641,7,17,0,0,1641,1642, + 7,16,0,0,1642,1643,7,10,0,0,1643,1644,7,6,0,0,1644,1645,7,11,0,0, + 1645,1646,7,2,0,0,1646,1647,7,16,0,0,1647,1648,7,21,0,0,1648,254, + 1,0,0,0,1649,1650,7,5,0,0,1650,1651,7,2,0,0,1651,1652,7,11,0,0,1652, + 1653,7,10,0,0,1653,256,1,0,0,0,1654,1655,7,5,0,0,1655,1656,7,2,0, + 0,1656,1657,7,11,0,0,1657,1658,7,10,0,0,1658,1659,5,95,0,0,1659, + 1660,7,2,0,0,1660,1661,7,5,0,0,1661,1662,7,5,0,0,1662,258,1,0,0, + 0,1663,1664,7,5,0,0,1664,1665,7,2,0,0,1665,1666,7,11,0,0,1666,1667, + 7,10,0,0,1667,1668,5,95,0,0,1668,1669,7,19,0,0,1669,1670,7,9,0,0, + 1670,1671,7,14,0,0,1671,1672,7,16,0,0,1672,1673,7,2,0,0,1673,1674, + 7,11,0,0,1674,260,1,0,0,0,1675,1676,7,5,0,0,1676,1677,7,2,0,0,1677, + 1678,7,11,0,0,1678,1679,7,10,0,0,1679,1680,5,95,0,0,1680,1681,7, + 6,0,0,1681,1682,7,15,0,0,1682,1683,7,8,0,0,1683,262,1,0,0,0,1684, + 1685,7,5,0,0,1685,1686,7,2,0,0,1686,1687,7,11,0,0,1687,1688,7,10, + 0,0,1688,1689,7,5,0,0,1689,1690,7,17,0,0,1690,1691,7,19,0,0,1691, + 1692,7,19,0,0,1692,264,1,0,0,0,1693,1694,7,5,0,0,1694,1695,7,2,0, + 0,1695,1696,7,13,0,0,1696,1697,7,4,0,0,1697,1698,7,2,0,0,1698,1699, + 7,16,0,0,1699,1700,7,10,0,0,1700,266,1,0,0,0,1701,1702,7,5,0,0,1702, + 1703,7,2,0,0,1703,1704,7,13,0,0,1704,1705,7,9,0,0,1705,1706,7,19, + 0,0,1706,1707,7,16,0,0,1707,1708,7,9,0,0,1708,1709,7,4,0,0,1709, + 1710,7,11,0,0,1710,1711,7,22,0,0,1711,268,1,0,0,0,1712,1713,7,5, + 0,0,1713,1714,7,2,0,0,1714,1715,7,13,0,0,1715,1716,7,9,0,0,1716, + 1717,7,19,0,0,1717,1718,7,12,0,0,1718,1719,7,10,0,0,1719,1720,7, + 10,0,0,1720,1721,7,25,0,0,1721,270,1,0,0,0,1722,1723,7,5,0,0,1723, + 1724,7,2,0,0,1724,1725,7,13,0,0,1725,1726,7,9,0,0,1726,1727,7,19, + 0,0,1727,1728,7,13,0,0,1728,1729,7,10,0,0,1729,1730,7,2,0,0,1730, + 1731,7,14,0,0,1731,272,1,0,0,0,1732,1733,7,5,0,0,1733,1734,7,10, + 0,0,1734,1735,7,20,0,0,1735,1736,7,14,0,0,1736,1737,7,10,0,0,1737, + 1738,7,10,0,0,1738,1739,7,6,0,0,1739,274,1,0,0,0,1740,1741,7,5,0, + 0,1741,1742,7,17,0,0,1742,1743,7,23,0,0,1743,1744,7,17,0,0,1744, + 1745,7,5,0,0,1745,1746,7,10,0,0,1746,276,1,0,0,0,1747,1748,7,10, + 0,0,1748,278,1,0,0,0,1749,1750,7,10,0,0,1750,1751,7,18,0,0,1751, + 1752,7,21,0,0,1752,280,1,0,0,0,1753,1754,7,10,0,0,1754,1755,7,18, + 0,0,1755,1756,7,21,0,0,1756,1757,7,16,0,0,1757,1758,5,49,0,0,1758, + 282,1,0,0,0,1759,1760,7,10,0,0,1760,1761,7,18,0,0,1761,1762,7,11, + 0,0,1762,1763,7,14,0,0,1763,1764,7,2,0,0,1764,1765,7,7,0,0,1765, + 1766,7,11,0,0,1766,284,1,0,0,0,1767,1768,7,19,0,0,1768,1769,7,3, + 0,0,1769,1770,7,9,0,0,1770,1771,7,9,0,0,1771,1772,7,14,0,0,1772, + 286,1,0,0,0,1773,1774,7,19,0,0,1774,1775,7,14,0,0,1775,1776,7,9, + 0,0,1776,1777,7,16,0,0,1777,1778,5,95,0,0,1778,1779,7,5,0,0,1779, + 1780,7,2,0,0,1780,1781,7,13,0,0,1781,1782,7,6,0,0,1782,288,1,0,0, + 0,1783,1784,7,19,0,0,1784,1785,7,14,0,0,1785,1786,7,9,0,0,1786,1787, + 7,16,0,0,1787,1788,5,95,0,0,1788,1789,7,15,0,0,1789,1790,7,4,0,0, + 1790,1791,7,17,0,0,1791,1792,7,18,0,0,1792,1793,7,11,0,0,1793,1794, + 7,17,0,0,1794,1795,7,16,0,0,1795,1796,7,10,0,0,1796,290,1,0,0,0, + 1797,1798,7,20,0,0,1798,1799,7,10,0,0,1799,1800,7,11,0,0,1800,1801, + 5,95,0,0,1801,1802,7,19,0,0,1802,1803,7,9,0,0,1803,1804,7,14,0,0, + 1804,1805,7,16,0,0,1805,1806,7,2,0,0,1806,1807,7,11,0,0,1807,292, + 1,0,0,0,1808,1809,7,17,0,0,1809,1810,7,19,0,0,1810,294,1,0,0,0,1811, + 1812,7,17,0,0,1812,1813,7,19,0,0,1813,1814,7,4,0,0,1814,1815,7,15, + 0,0,1815,1816,7,3,0,0,1816,1817,7,3,0,0,1817,296,1,0,0,0,1818,1819, + 7,17,0,0,1819,1820,7,6,0,0,1820,1821,7,4,0,0,1821,1822,7,15,0,0, + 1822,1823,7,3,0,0,1823,1824,7,3,0,0,1824,298,1,0,0,0,1825,1826,7, + 3,0,0,1826,1827,7,2,0,0,1827,1828,7,6,0,0,1828,1829,7,11,0,0,1829, + 1830,5,95,0,0,1830,1831,7,5,0,0,1831,1832,7,2,0,0,1832,1833,7,13, + 0,0,1833,300,1,0,0,0,1834,1835,7,3,0,0,1835,1836,7,10,0,0,1836,1837, + 7,4,0,0,1837,1838,7,20,0,0,1838,1839,7,11,0,0,1839,1840,7,22,0,0, + 1840,302,1,0,0,0,1841,1842,7,3,0,0,1842,1843,7,4,0,0,1843,304,1, + 0,0,0,1844,1845,7,3,0,0,1845,1846,7,9,0,0,1846,1847,7,7,0,0,1847, + 1848,7,2,0,0,1848,1849,7,3,0,0,1849,1850,7,11,0,0,1850,1851,7,17, + 0,0,1851,1852,7,16,0,0,1852,1853,7,10,0,0,1853,306,1,0,0,0,1854, + 1855,7,3,0,0,1855,1856,7,9,0,0,1856,1857,7,7,0,0,1857,1858,7,2,0, + 0,1858,1859,7,3,0,0,1859,1860,7,11,0,0,1860,1861,7,17,0,0,1861,1862, + 7,16,0,0,1862,1863,7,10,0,0,1863,1864,7,6,0,0,1864,1865,7,11,0,0, + 1865,1866,7,2,0,0,1866,1867,7,16,0,0,1867,1868,7,21,0,0,1868,308, + 1,0,0,0,1869,1870,7,3,0,0,1870,1871,7,9,0,0,1871,1872,7,7,0,0,1872, + 1873,7,2,0,0,1873,1874,7,11,0,0,1874,1875,7,10,0,0,1875,310,1,0, + 0,0,1876,1877,7,3,0,0,1877,1878,7,9,0,0,1878,1879,7,20,0,0,1879, + 312,1,0,0,0,1880,1881,7,3,0,0,1881,1882,7,9,0,0,1882,1883,7,20,0, + 0,1883,1884,5,49,0,0,1884,1885,5,48,0,0,1885,314,1,0,0,0,1886,1887, + 7,3,0,0,1887,1888,7,9,0,0,1888,1889,7,20,0,0,1889,1890,5,50,0,0, + 1890,316,1,0,0,0,1891,1892,7,3,0,0,1892,1893,7,9,0,0,1893,1894,7, + 12,0,0,1894,1895,7,10,0,0,1895,1896,7,14,0,0,1896,318,1,0,0,0,1897, + 1898,7,3,0,0,1898,1899,7,11,0,0,1899,1900,7,14,0,0,1900,1901,7,17, + 0,0,1901,1902,7,16,0,0,1902,320,1,0,0,0,1903,1904,7,16,0,0,1904, + 1905,7,2,0,0,1905,1906,7,25,0,0,1906,1907,7,10,0,0,1907,1908,7,5, + 0,0,1908,1909,7,2,0,0,1909,1910,7,11,0,0,1910,1911,7,10,0,0,1911, + 322,1,0,0,0,1912,1913,7,16,0,0,1913,1914,7,2,0,0,1914,1915,7,25, + 0,0,1915,1916,7,10,0,0,1916,1917,7,11,0,0,1917,1918,7,17,0,0,1918, + 1919,7,16,0,0,1919,1920,7,10,0,0,1920,324,1,0,0,0,1921,1922,7,16, + 0,0,1922,1923,7,9,0,0,1923,1924,7,5,0,0,1924,1925,7,15,0,0,1925, + 1926,7,3,0,0,1926,1927,7,15,0,0,1927,1928,7,6,0,0,1928,326,1,0,0, + 0,1929,1930,7,16,0,0,1930,1931,7,9,0,0,1931,1932,7,4,0,0,1932,1933, + 7,11,0,0,1933,1934,7,22,0,0,1934,1935,7,4,0,0,1935,1936,7,2,0,0, + 1936,1937,7,16,0,0,1937,1938,7,10,0,0,1938,328,1,0,0,0,1939,1940, + 7,16,0,0,1940,1941,7,15,0,0,1941,1942,7,3,0,0,1942,1943,7,11,0,0, + 1943,1944,7,17,0,0,1944,1945,7,21,0,0,1945,1946,7,3,0,0,1946,1947, + 7,13,0,0,1947,330,1,0,0,0,1948,1949,7,4,0,0,1949,1950,7,9,0,0,1950, + 1951,7,12,0,0,1951,332,1,0,0,0,1952,1953,7,4,0,0,1953,1954,7,15, + 0,0,1954,1955,7,3,0,0,1955,1956,7,3,0,0,1956,1957,7,17,0,0,1957, + 1958,7,19,0,0,1958,334,1,0,0,0,1959,1960,7,21,0,0,1960,1961,7,10, + 0,0,1961,1962,7,14,0,0,1962,1963,7,17,0,0,1963,1964,7,9,0,0,1964, + 1965,7,5,0,0,1965,1966,5,95,0,0,1966,1967,7,2,0,0,1967,1968,7,5, + 0,0,1968,1969,7,5,0,0,1969,336,1,0,0,0,1970,1971,7,21,0,0,1971,1972, + 7,10,0,0,1972,1973,7,14,0,0,1973,1974,7,17,0,0,1974,1975,7,9,0,0, + 1975,1976,7,5,0,0,1976,1977,5,95,0,0,1977,1978,7,5,0,0,1978,1979, + 7,17,0,0,1979,1980,7,19,0,0,1980,1981,7,19,0,0,1981,338,1,0,0,0, + 1982,1983,7,21,0,0,1983,1984,7,17,0,0,1984,340,1,0,0,0,1985,1986, + 7,21,0,0,1986,1987,7,9,0,0,1987,1988,7,6,0,0,1988,1989,7,17,0,0, + 1989,1990,7,11,0,0,1990,1991,7,17,0,0,1991,1992,7,9,0,0,1992,1993, + 7,4,0,0,1993,342,1,0,0,0,1994,1995,7,21,0,0,1995,1996,7,9,0,0,1996, + 1997,7,12,0,0,1997,344,1,0,0,0,1998,1999,7,21,0,0,1999,2000,7,9, + 0,0,2000,2001,7,12,0,0,2001,2002,7,10,0,0,2002,2003,7,14,0,0,2003, + 346,1,0,0,0,2004,2005,7,14,0,0,2005,2006,7,2,0,0,2006,2007,7,5,0, + 0,2007,2008,7,17,0,0,2008,2009,7,2,0,0,2009,2010,7,4,0,0,2010,2011, + 7,6,0,0,2011,348,1,0,0,0,2012,2013,7,14,0,0,2013,2014,7,2,0,0,2014, + 2015,7,4,0,0,2015,2016,7,5,0,0,2016,350,1,0,0,0,2017,2018,7,14,0, + 0,2018,2019,7,10,0,0,2019,2020,7,21,0,0,2020,2021,7,3,0,0,2021,2022, + 7,2,0,0,2022,2023,7,7,0,0,2023,2024,7,10,0,0,2024,352,1,0,0,0,2025, + 2026,7,14,0,0,2026,2027,7,17,0,0,2027,2028,7,4,0,0,2028,2029,7,11, + 0,0,2029,354,1,0,0,0,2030,2031,7,14,0,0,2031,2032,7,9,0,0,2032,2033, + 7,15,0,0,2033,2034,7,4,0,0,2034,2035,7,5,0,0,2035,356,1,0,0,0,2036, + 2037,7,14,0,0,2037,2038,7,11,0,0,2038,2039,7,14,0,0,2039,2040,7, + 17,0,0,2040,2041,7,16,0,0,2041,358,1,0,0,0,2042,2043,7,14,0,0,2043, + 2044,7,10,0,0,2044,2045,7,23,0,0,2045,2046,7,10,0,0,2046,2047,7, + 14,0,0,2047,2048,7,6,0,0,2048,2049,7,10,0,0,2049,360,1,0,0,0,2050, + 2051,7,6,0,0,2051,2052,7,10,0,0,2052,2053,7,7,0,0,2053,2054,5,95, + 0,0,2054,2055,7,11,0,0,2055,2056,7,9,0,0,2056,2057,5,95,0,0,2057, + 2058,7,11,0,0,2058,2059,7,17,0,0,2059,2060,7,16,0,0,2060,2061,7, + 10,0,0,2061,362,1,0,0,0,2062,2063,7,6,0,0,2063,2064,7,17,0,0,2064, + 2065,7,20,0,0,2065,2066,7,4,0,0,2066,364,1,0,0,0,2067,2068,7,6,0, + 0,2068,2069,7,17,0,0,2069,2070,7,20,0,0,2070,2071,7,4,0,0,2071,2072, + 7,15,0,0,2072,2073,7,16,0,0,2073,366,1,0,0,0,2074,2075,7,6,0,0,2075, + 2076,7,17,0,0,2076,2077,7,4,0,0,2077,368,1,0,0,0,2078,2079,7,6,0, + 0,2079,2080,7,17,0,0,2080,2081,7,4,0,0,2081,2082,7,22,0,0,2082,370, + 1,0,0,0,2083,2084,7,6,0,0,2084,2085,7,26,0,0,2085,2086,7,14,0,0, + 2086,2087,7,11,0,0,2087,372,1,0,0,0,2088,2089,7,6,0,0,2089,2090, + 7,11,0,0,2090,2091,7,14,0,0,2091,2092,5,95,0,0,2092,2093,7,11,0, + 0,2093,2094,7,9,0,0,2094,2095,5,95,0,0,2095,2096,7,5,0,0,2096,2097, + 7,2,0,0,2097,2098,7,11,0,0,2098,2099,7,10,0,0,2099,374,1,0,0,0,2100, + 2101,7,6,0,0,2101,2102,7,15,0,0,2102,2103,7,8,0,0,2103,2104,7,5, + 0,0,2104,2105,7,2,0,0,2105,2106,7,11,0,0,2106,2107,7,10,0,0,2107, + 376,1,0,0,0,2108,2109,7,6,0,0,2109,2110,7,15,0,0,2110,2111,7,8,0, + 0,2111,2112,7,11,0,0,2112,2113,7,17,0,0,2113,2114,7,16,0,0,2114, + 2115,7,10,0,0,2115,378,1,0,0,0,2116,2117,7,6,0,0,2117,2118,7,15, + 0,0,2118,2119,7,8,0,0,2119,2120,7,11,0,0,2120,2121,7,14,0,0,2121, + 2122,7,2,0,0,2122,2123,7,7,0,0,2123,2124,7,11,0,0,2124,380,1,0,0, + 0,2125,2126,7,6,0,0,2126,2127,7,13,0,0,2127,2128,7,6,0,0,2128,2129, + 7,5,0,0,2129,2130,7,2,0,0,2130,2131,7,11,0,0,2131,2132,7,10,0,0, + 2132,382,1,0,0,0,2133,2134,7,11,0,0,2134,2135,7,2,0,0,2135,2136, + 7,4,0,0,2136,384,1,0,0,0,2137,2138,7,11,0,0,2138,2139,7,17,0,0,2139, + 2140,7,16,0,0,2140,2141,7,10,0,0,2141,386,1,0,0,0,2142,2143,7,11, + 0,0,2143,2144,7,17,0,0,2144,2145,7,16,0,0,2145,2146,7,10,0,0,2146, + 2147,7,5,0,0,2147,2148,7,17,0,0,2148,2149,7,19,0,0,2149,2150,7,19, + 0,0,2150,388,1,0,0,0,2151,2152,7,11,0,0,2152,2153,7,17,0,0,2153, + 2154,7,16,0,0,2154,2155,7,10,0,0,2155,2156,5,95,0,0,2156,2157,7, + 19,0,0,2157,2158,7,9,0,0,2158,2159,7,14,0,0,2159,2160,7,16,0,0,2160, + 2161,7,2,0,0,2161,2162,7,11,0,0,2162,390,1,0,0,0,2163,2164,7,11, + 0,0,2164,2165,7,17,0,0,2165,2166,7,16,0,0,2166,2167,7,10,0,0,2167, + 2168,5,95,0,0,2168,2169,7,11,0,0,2169,2170,7,9,0,0,2170,2171,5,95, + 0,0,2171,2172,7,6,0,0,2172,2173,7,10,0,0,2173,2174,7,7,0,0,2174, + 392,1,0,0,0,2175,2176,7,11,0,0,2176,2177,7,17,0,0,2177,2178,7,16, + 0,0,2178,2179,7,10,0,0,2179,2180,7,6,0,0,2180,2181,7,11,0,0,2181, + 2182,7,2,0,0,2182,2183,7,16,0,0,2183,2184,7,21,0,0,2184,394,1,0, + 0,0,2185,2186,7,11,0,0,2186,2187,7,14,0,0,2187,2188,7,15,0,0,2188, + 2189,7,4,0,0,2189,2190,7,7,0,0,2190,2191,7,2,0,0,2191,2192,7,11, + 0,0,2192,2193,7,10,0,0,2193,396,1,0,0,0,2194,2195,7,11,0,0,2195, + 2196,7,9,0,0,2196,2197,5,95,0,0,2197,2198,7,5,0,0,2198,2199,7,2, + 0,0,2199,2200,7,13,0,0,2200,2201,7,6,0,0,2201,398,1,0,0,0,2202,2203, + 7,11,0,0,2203,2204,7,9,0,0,2204,2205,5,95,0,0,2205,2206,7,6,0,0, + 2206,2207,7,10,0,0,2207,2208,7,7,0,0,2208,2209,7,9,0,0,2209,2210, + 7,4,0,0,2210,2211,7,5,0,0,2211,2212,7,6,0,0,2212,400,1,0,0,0,2213, + 2214,7,15,0,0,2214,2215,7,4,0,0,2215,2216,7,17,0,0,2216,2217,7,18, + 0,0,2217,2218,5,95,0,0,2218,2219,7,11,0,0,2219,2220,7,17,0,0,2220, + 2221,7,16,0,0,2221,2222,7,10,0,0,2222,2223,7,6,0,0,2223,2224,7,11, + 0,0,2224,2225,7,2,0,0,2225,2226,7,16,0,0,2226,2227,7,21,0,0,2227, + 402,1,0,0,0,2228,2229,7,15,0,0,2229,2230,7,21,0,0,2230,2231,7,21, + 0,0,2231,2232,7,10,0,0,2232,2233,7,14,0,0,2233,404,1,0,0,0,2234, + 2235,7,15,0,0,2235,2236,7,11,0,0,2236,2237,7,7,0,0,2237,2238,5,95, + 0,0,2238,2239,7,5,0,0,2239,2240,7,2,0,0,2240,2241,7,11,0,0,2241, + 2242,7,10,0,0,2242,406,1,0,0,0,2243,2244,7,15,0,0,2244,2245,7,11, + 0,0,2245,2246,7,7,0,0,2246,2247,5,95,0,0,2247,2248,7,11,0,0,2248, + 2249,7,17,0,0,2249,2250,7,16,0,0,2250,2251,7,10,0,0,2251,408,1,0, + 0,0,2252,2253,7,15,0,0,2253,2254,7,11,0,0,2254,2255,7,7,0,0,2255, + 2256,5,95,0,0,2256,2257,7,11,0,0,2257,2258,7,17,0,0,2258,2259,7, + 16,0,0,2259,2260,7,10,0,0,2260,2261,7,6,0,0,2261,2262,7,11,0,0,2262, + 2263,7,2,0,0,2263,2264,7,16,0,0,2264,2265,7,21,0,0,2265,410,1,0, + 0,0,2266,2267,7,5,0,0,2267,412,1,0,0,0,2268,2269,7,11,0,0,2269,414, + 1,0,0,0,2270,2271,7,11,0,0,2271,2272,7,6,0,0,2272,416,1,0,0,0,2273, + 2274,5,123,0,0,2274,418,1,0,0,0,2275,2276,5,125,0,0,2276,420,1,0, + 0,0,2277,2278,7,5,0,0,2278,2279,7,10,0,0,2279,2280,7,4,0,0,2280, + 2281,7,6,0,0,2281,2282,7,10,0,0,2282,2283,5,95,0,0,2283,2284,7,14, + 0,0,2284,2285,7,2,0,0,2285,2286,7,4,0,0,2286,2287,7,25,0,0,2287, + 422,1,0,0,0,2288,2289,7,14,0,0,2289,2290,7,2,0,0,2290,2291,7,4,0, + 0,2291,2292,7,25,0,0,2292,424,1,0,0,0,2293,2294,7,14,0,0,2294,2295, + 7,9,0,0,2295,2296,7,12,0,0,2296,2297,5,95,0,0,2297,2298,7,4,0,0, + 2298,2299,7,15,0,0,2299,2300,7,16,0,0,2300,2301,7,8,0,0,2301,2302, + 7,10,0,0,2302,2303,7,14,0,0,2303,426,1,0,0,0,2304,2305,7,5,0,0,2305, + 2306,7,2,0,0,2306,2307,7,11,0,0,2307,2308,7,10,0,0,2308,2309,5,95, + 0,0,2309,2310,7,22,0,0,2310,2311,7,17,0,0,2311,2312,7,6,0,0,2312, + 2313,7,11,0,0,2313,2314,7,9,0,0,2314,2315,7,20,0,0,2315,2316,7,14, + 0,0,2316,2317,7,2,0,0,2317,2318,7,16,0,0,2318,428,1,0,0,0,2319,2320, + 7,5,0,0,2320,2321,7,2,0,0,2321,2322,7,13,0,0,2322,2323,5,95,0,0, + 2323,2324,7,9,0,0,2324,2325,7,19,0,0,2325,2326,5,95,0,0,2326,2327, + 7,16,0,0,2327,2328,7,9,0,0,2328,2329,7,4,0,0,2329,2330,7,11,0,0, + 2330,2331,7,22,0,0,2331,430,1,0,0,0,2332,2333,7,5,0,0,2333,2334, + 7,2,0,0,2334,2335,7,13,0,0,2335,2336,5,95,0,0,2336,2337,7,9,0,0, + 2337,2338,7,19,0,0,2338,2339,5,95,0,0,2339,2340,7,13,0,0,2340,2341, + 7,10,0,0,2341,2342,7,2,0,0,2342,2343,7,14,0,0,2343,432,1,0,0,0,2344, + 2345,7,5,0,0,2345,2346,7,2,0,0,2346,2347,7,13,0,0,2347,2348,5,95, + 0,0,2348,2349,7,9,0,0,2349,2350,7,19,0,0,2350,2351,5,95,0,0,2351, + 2352,7,12,0,0,2352,2353,7,10,0,0,2353,2354,7,10,0,0,2354,2355,7, + 25,0,0,2355,434,1,0,0,0,2356,2357,7,10,0,0,2357,2358,7,18,0,0,2358, + 2359,7,7,0,0,2359,2360,7,3,0,0,2360,2361,7,15,0,0,2361,2362,7,5, + 0,0,2362,2363,7,10,0,0,2363,436,1,0,0,0,2364,2365,7,10,0,0,2365, + 2366,7,18,0,0,2366,2367,7,11,0,0,2367,2368,7,10,0,0,2368,2369,7, + 4,0,0,2369,2370,7,5,0,0,2370,2371,7,10,0,0,2371,2372,7,5,0,0,2372, + 2373,5,95,0,0,2373,2374,7,6,0,0,2374,2375,7,11,0,0,2375,2376,7,2, + 0,0,2376,2377,7,11,0,0,2377,2378,7,6,0,0,2378,438,1,0,0,0,2379,2380, + 7,19,0,0,2380,2381,7,17,0,0,2381,2382,7,10,0,0,2382,2383,7,3,0,0, + 2383,2384,7,5,0,0,2384,440,1,0,0,0,2385,2386,7,19,0,0,2386,2387, + 7,17,0,0,2387,2388,7,3,0,0,2388,2389,7,11,0,0,2389,2390,7,10,0,0, + 2390,2391,7,14,0,0,2391,442,1,0,0,0,2392,2393,7,20,0,0,2393,2394, + 7,10,0,0,2394,2395,7,9,0,0,2395,2396,5,95,0,0,2396,2397,7,8,0,0, + 2397,2398,7,9,0,0,2398,2399,7,15,0,0,2399,2400,7,4,0,0,2400,2401, + 7,5,0,0,2401,2402,7,17,0,0,2402,2403,7,4,0,0,2403,2404,7,20,0,0, + 2404,2405,5,95,0,0,2405,2406,7,8,0,0,2406,2407,7,9,0,0,2407,2408, + 7,18,0,0,2408,444,1,0,0,0,2409,2410,7,20,0,0,2410,2411,7,10,0,0, + 2411,2412,7,9,0,0,2412,2413,5,95,0,0,2413,2414,7,7,0,0,2414,2415, + 7,10,0,0,2415,2416,7,3,0,0,2416,2417,7,3,0,0,2417,446,1,0,0,0,2418, + 2419,7,20,0,0,2419,2420,7,10,0,0,2420,2421,7,9,0,0,2421,2422,5,95, + 0,0,2422,2423,7,5,0,0,2423,2424,7,17,0,0,2424,2425,7,6,0,0,2425, + 2426,7,11,0,0,2426,2427,7,2,0,0,2427,2428,7,4,0,0,2428,2429,7,7, + 0,0,2429,2430,7,10,0,0,2430,448,1,0,0,0,2431,2432,7,20,0,0,2432, + 2433,7,10,0,0,2433,2434,7,9,0,0,2434,2435,5,95,0,0,2435,2436,7,5, + 0,0,2436,2437,7,17,0,0,2437,2438,7,6,0,0,2438,2439,7,11,0,0,2439, + 2440,7,2,0,0,2440,2441,7,4,0,0,2441,2442,7,7,0,0,2442,2443,7,10, + 0,0,2443,2444,5,95,0,0,2444,2445,7,14,0,0,2445,2446,7,2,0,0,2446, + 2447,7,4,0,0,2447,2448,7,20,0,0,2448,2449,7,10,0,0,2449,450,1,0, + 0,0,2450,2451,7,20,0,0,2451,2452,7,10,0,0,2452,2453,7,9,0,0,2453, + 2454,5,95,0,0,2454,2455,7,17,0,0,2455,2456,7,4,0,0,2456,2457,7,11, + 0,0,2457,2458,7,10,0,0,2458,2459,7,14,0,0,2459,2460,7,6,0,0,2460, + 2461,7,10,0,0,2461,2462,7,7,0,0,2462,2463,7,11,0,0,2463,2464,7,6, + 0,0,2464,452,1,0,0,0,2465,2466,7,20,0,0,2466,2467,7,10,0,0,2467, + 2468,7,9,0,0,2468,2469,5,95,0,0,2469,2470,7,21,0,0,2470,2471,7,9, + 0,0,2471,2472,7,3,0,0,2472,2473,7,13,0,0,2473,2474,7,20,0,0,2474, + 2475,7,9,0,0,2475,2476,7,4,0,0,2476,454,1,0,0,0,2477,2478,7,22,0, + 0,2478,2479,7,17,0,0,2479,2480,7,6,0,0,2480,2481,7,11,0,0,2481,2482, + 7,9,0,0,2482,2483,7,20,0,0,2483,2484,7,14,0,0,2484,2485,7,2,0,0, + 2485,2486,7,16,0,0,2486,456,1,0,0,0,2487,2488,7,22,0,0,2488,2489, + 7,9,0,0,2489,2490,7,15,0,0,2490,2491,7,14,0,0,2491,2492,5,95,0,0, + 2492,2493,7,9,0,0,2493,2494,7,19,0,0,2494,2495,5,95,0,0,2495,2496, + 7,5,0,0,2496,2497,7,2,0,0,2497,2498,7,13,0,0,2498,458,1,0,0,0,2499, + 2500,7,17,0,0,2500,2501,7,4,0,0,2501,2502,7,7,0,0,2502,2503,7,3, + 0,0,2503,2504,7,15,0,0,2504,2505,7,5,0,0,2505,2506,7,10,0,0,2506, + 460,1,0,0,0,2507,2508,7,17,0,0,2508,2509,7,4,0,0,2509,2510,5,95, + 0,0,2510,2511,7,11,0,0,2511,2512,7,10,0,0,2512,2513,7,14,0,0,2513, + 2514,7,16,0,0,2514,2515,7,6,0,0,2515,462,1,0,0,0,2516,2517,7,16, + 0,0,2517,2518,7,2,0,0,2518,2519,7,11,0,0,2519,2520,7,7,0,0,2520, + 2521,7,22,0,0,2521,2522,7,21,0,0,2522,2523,7,22,0,0,2523,2524,7, + 14,0,0,2524,2525,7,2,0,0,2525,2526,7,6,0,0,2526,2527,7,10,0,0,2527, + 464,1,0,0,0,2528,2529,7,16,0,0,2529,2530,7,2,0,0,2530,2531,7,11, + 0,0,2531,2532,7,7,0,0,2532,2533,7,22,0,0,2533,2534,5,95,0,0,2534, + 2535,7,21,0,0,2535,2536,7,22,0,0,2536,2537,7,14,0,0,2537,2538,7, + 2,0,0,2538,2539,7,6,0,0,2539,2540,7,10,0,0,2540,466,1,0,0,0,2541, + 2542,7,16,0,0,2542,2543,7,2,0,0,2543,2544,7,11,0,0,2544,2545,7,7, + 0,0,2545,2546,7,22,0,0,2546,2547,7,21,0,0,2547,2548,7,22,0,0,2548, + 2549,7,14,0,0,2549,2550,7,2,0,0,2550,2551,7,6,0,0,2551,2552,7,10, + 0,0,2552,2553,7,26,0,0,2553,2554,7,15,0,0,2554,2555,7,10,0,0,2555, + 2556,7,14,0,0,2556,2557,7,13,0,0,2557,468,1,0,0,0,2558,2559,7,6, + 0,0,2559,2560,7,17,0,0,2560,2561,7,16,0,0,2561,2562,7,21,0,0,2562, + 2563,7,3,0,0,2563,2564,7,10,0,0,2564,2565,5,95,0,0,2565,2566,7,26, + 0,0,2566,2567,7,15,0,0,2567,2568,7,10,0,0,2568,2569,7,14,0,0,2569, + 2570,7,13,0,0,2570,2571,5,95,0,0,2571,2572,7,6,0,0,2572,2573,7,11, + 0,0,2573,2574,7,14,0,0,2574,2575,7,17,0,0,2575,2576,7,4,0,0,2576, + 2577,7,20,0,0,2577,470,1,0,0,0,2578,2579,7,26,0,0,2579,2580,7,15, + 0,0,2580,2581,7,10,0,0,2581,2582,7,14,0,0,2582,2583,7,13,0,0,2583, + 2584,5,95,0,0,2584,2585,7,6,0,0,2585,2586,7,11,0,0,2586,2587,7,14, + 0,0,2587,2588,7,17,0,0,2588,2589,7,4,0,0,2589,2590,7,20,0,0,2590, + 472,1,0,0,0,2591,2592,7,16,0,0,2592,2593,7,2,0,0,2593,2594,7,11, + 0,0,2594,2595,7,7,0,0,2595,2596,7,22,0,0,2596,2597,5,95,0,0,2597, + 2598,7,21,0,0,2598,2599,7,22,0,0,2599,2600,7,14,0,0,2600,2601,7, + 2,0,0,2601,2602,7,6,0,0,2602,2603,7,10,0,0,2603,2604,5,95,0,0,2604, + 2605,7,21,0,0,2605,2606,7,14,0,0,2606,2607,7,10,0,0,2607,2608,7, + 19,0,0,2608,2609,7,17,0,0,2609,2610,7,18,0,0,2610,474,1,0,0,0,2611, + 2612,7,16,0,0,2612,2613,7,2,0,0,2613,2614,7,11,0,0,2614,2615,7,7, + 0,0,2615,2616,7,22,0,0,2616,2617,7,26,0,0,2617,2618,7,15,0,0,2618, + 2619,7,10,0,0,2619,2620,7,14,0,0,2620,2621,7,13,0,0,2621,476,1,0, + 0,0,2622,2623,7,16,0,0,2623,2624,7,2,0,0,2624,2625,7,11,0,0,2625, + 2626,7,7,0,0,2626,2627,7,22,0,0,2627,2628,5,95,0,0,2628,2629,7,26, + 0,0,2629,2630,7,15,0,0,2630,2631,7,10,0,0,2631,2632,7,14,0,0,2632, + 2633,7,13,0,0,2633,478,1,0,0,0,2634,2635,7,16,0,0,2635,2636,7,17, + 0,0,2636,2637,7,4,0,0,2637,2638,7,15,0,0,2638,2639,7,11,0,0,2639, + 2640,7,10,0,0,2640,2641,5,95,0,0,2641,2642,7,9,0,0,2642,2643,7,19, + 0,0,2643,2644,5,95,0,0,2644,2645,7,5,0,0,2645,2646,7,2,0,0,2646, + 2647,7,13,0,0,2647,480,1,0,0,0,2648,2649,7,16,0,0,2649,2650,7,17, + 0,0,2650,2651,7,4,0,0,2651,2652,7,15,0,0,2652,2653,7,11,0,0,2653, + 2654,7,10,0,0,2654,2655,5,95,0,0,2655,2656,7,9,0,0,2656,2657,7,19, + 0,0,2657,2658,5,95,0,0,2658,2659,7,22,0,0,2659,2660,7,9,0,0,2660, + 2661,7,15,0,0,2661,2662,7,14,0,0,2662,482,1,0,0,0,2663,2664,7,16, + 0,0,2664,2665,7,9,0,0,2665,2666,7,4,0,0,2666,2667,7,11,0,0,2667, + 2668,7,22,0,0,2668,2669,5,95,0,0,2669,2670,7,9,0,0,2670,2671,7,19, + 0,0,2671,2672,5,95,0,0,2672,2673,7,13,0,0,2673,2674,7,10,0,0,2674, + 2675,7,2,0,0,2675,2676,7,14,0,0,2676,484,1,0,0,0,2677,2678,7,16, + 0,0,2678,2679,7,15,0,0,2679,2680,7,3,0,0,2680,2681,7,11,0,0,2681, + 2682,7,17,0,0,2682,2683,7,16,0,0,2683,2684,7,2,0,0,2684,2685,7,11, + 0,0,2685,2686,7,7,0,0,2686,2687,7,22,0,0,2687,486,1,0,0,0,2688,2689, + 7,16,0,0,2689,2690,7,15,0,0,2690,2691,7,3,0,0,2691,2692,7,11,0,0, + 2692,2693,7,17,0,0,2693,2694,5,95,0,0,2694,2695,7,16,0,0,2695,2696, + 7,2,0,0,2696,2697,7,11,0,0,2697,2698,7,7,0,0,2698,2699,7,22,0,0, + 2699,488,1,0,0,0,2700,2701,7,16,0,0,2701,2702,7,15,0,0,2702,2703, + 7,3,0,0,2703,2704,7,11,0,0,2704,2705,7,17,0,0,2705,2706,7,16,0,0, + 2706,2707,7,2,0,0,2707,2708,7,11,0,0,2708,2709,7,7,0,0,2709,2710, + 7,22,0,0,2710,2711,7,26,0,0,2711,2712,7,15,0,0,2712,2713,7,10,0, + 0,2713,2714,7,14,0,0,2714,2715,7,13,0,0,2715,490,1,0,0,0,2716,2717, + 7,4,0,0,2717,2718,7,10,0,0,2718,2719,7,6,0,0,2719,2720,7,11,0,0, + 2720,2721,7,10,0,0,2721,2722,7,5,0,0,2722,492,1,0,0,0,2723,2724, + 7,21,0,0,2724,2725,7,10,0,0,2725,2726,7,14,0,0,2726,2727,7,7,0,0, + 2727,2728,7,10,0,0,2728,2729,7,4,0,0,2729,2730,7,11,0,0,2730,2731, + 7,17,0,0,2731,2732,7,3,0,0,2732,2733,7,10,0,0,2733,2734,7,6,0,0, + 2734,494,1,0,0,0,2735,2736,7,21,0,0,2736,2737,7,10,0,0,2737,2738, + 7,14,0,0,2738,2739,7,7,0,0,2739,2740,7,10,0,0,2740,2741,7,4,0,0, + 2741,2742,7,11,0,0,2742,2743,7,17,0,0,2743,2744,7,3,0,0,2744,2745, + 7,10,0,0,2745,496,1,0,0,0,2746,2747,7,21,0,0,2747,2748,7,10,0,0, + 2748,2749,7,14,0,0,2749,2750,7,7,0,0,2750,2751,7,10,0,0,2751,2752, + 7,4,0,0,2752,2753,7,11,0,0,2753,2754,7,17,0,0,2754,2755,7,3,0,0, + 2755,2756,7,10,0,0,2756,2757,5,95,0,0,2757,2758,7,2,0,0,2758,2759, + 7,21,0,0,2759,2760,7,21,0,0,2760,2761,7,14,0,0,2761,2762,7,9,0,0, + 2762,2763,7,18,0,0,2763,498,1,0,0,0,2764,2765,7,14,0,0,2765,2766, + 7,10,0,0,2766,2767,7,20,0,0,2767,2768,7,10,0,0,2768,2769,7,18,0, + 0,2769,2770,7,21,0,0,2770,2771,5,95,0,0,2771,2772,7,26,0,0,2772, + 2773,7,15,0,0,2773,2774,7,10,0,0,2774,2775,7,14,0,0,2775,2776,7, + 13,0,0,2776,500,1,0,0,0,2777,2778,7,14,0,0,2778,2779,7,10,0,0,2779, + 2780,7,23,0,0,2780,2781,7,10,0,0,2781,2782,7,14,0,0,2782,2783,7, + 6,0,0,2783,2784,7,10,0,0,2784,2785,5,95,0,0,2785,2786,7,4,0,0,2786, + 2787,7,10,0,0,2787,2788,7,6,0,0,2788,2789,7,11,0,0,2789,2790,7,10, + 0,0,2790,2791,7,5,0,0,2791,502,1,0,0,0,2792,2793,7,26,0,0,2793,2794, + 7,15,0,0,2794,2795,7,10,0,0,2795,2796,7,14,0,0,2796,2797,7,13,0, + 0,2797,504,1,0,0,0,2798,2799,7,14,0,0,2799,2800,7,2,0,0,2800,2801, + 7,4,0,0,2801,2802,7,20,0,0,2802,2803,7,10,0,0,2803,506,1,0,0,0,2804, + 2805,7,6,0,0,2805,2806,7,7,0,0,2806,2807,7,9,0,0,2807,2808,7,14, + 0,0,2808,2809,7,10,0,0,2809,508,1,0,0,0,2810,2811,7,6,0,0,2811,2812, + 7,7,0,0,2812,2813,7,9,0,0,2813,2814,7,14,0,0,2814,2815,7,10,0,0, + 2815,2816,7,26,0,0,2816,2817,7,15,0,0,2817,2818,7,10,0,0,2818,2819, + 7,14,0,0,2819,2820,7,13,0,0,2820,510,1,0,0,0,2821,2822,7,6,0,0,2822, + 2823,7,7,0,0,2823,2824,7,9,0,0,2824,2825,7,14,0,0,2825,2826,7,10, + 0,0,2826,2827,5,95,0,0,2827,2828,7,26,0,0,2828,2829,7,15,0,0,2829, + 2830,7,10,0,0,2830,2831,7,14,0,0,2831,2832,7,13,0,0,2832,512,1,0, + 0,0,2833,2834,7,6,0,0,2834,2835,7,10,0,0,2835,2836,7,7,0,0,2836, + 2837,7,9,0,0,2837,2838,7,4,0,0,2838,2839,7,5,0,0,2839,2840,5,95, + 0,0,2840,2841,7,9,0,0,2841,2842,7,19,0,0,2842,2843,5,95,0,0,2843, + 2844,7,16,0,0,2844,2845,7,17,0,0,2845,2846,7,4,0,0,2846,2847,7,15, + 0,0,2847,2848,7,11,0,0,2848,2849,7,10,0,0,2849,514,1,0,0,0,2850, + 2851,7,6,0,0,2851,2852,7,11,0,0,2852,2853,7,2,0,0,2853,2854,7,11, + 0,0,2854,2855,7,6,0,0,2855,516,1,0,0,0,2856,2857,7,11,0,0,2857,2858, + 7,10,0,0,2858,2859,7,14,0,0,2859,2860,7,16,0,0,2860,518,1,0,0,0, + 2861,2862,7,11,0,0,2862,2863,7,10,0,0,2863,2864,7,14,0,0,2864,2865, + 7,16,0,0,2865,2866,7,6,0,0,2866,520,1,0,0,0,2867,2868,7,11,0,0,2868, + 2869,7,17,0,0,2869,2870,7,16,0,0,2870,2871,7,10,0,0,2871,2872,7, + 6,0,0,2872,2873,7,11,0,0,2873,2874,7,2,0,0,2874,2875,7,16,0,0,2875, + 2876,7,21,0,0,2876,2877,7,2,0,0,2877,2878,7,5,0,0,2878,2879,7,5, + 0,0,2879,522,1,0,0,0,2880,2881,7,11,0,0,2881,2882,7,17,0,0,2882, + 2883,7,16,0,0,2883,2884,7,10,0,0,2884,2885,7,6,0,0,2885,2886,7,11, + 0,0,2886,2887,7,2,0,0,2887,2888,7,16,0,0,2888,2889,7,21,0,0,2889, + 2890,7,5,0,0,2890,2891,7,17,0,0,2891,2892,7,19,0,0,2892,2893,7,19, + 0,0,2893,524,1,0,0,0,2894,2895,7,11,0,0,2895,2896,7,9,0,0,2896,2897, + 7,21,0,0,2897,2898,7,22,0,0,2898,2899,7,17,0,0,2899,2900,7,11,0, + 0,2900,2901,7,6,0,0,2901,526,1,0,0,0,2902,2903,7,11,0,0,2903,2904, + 7,13,0,0,2904,2905,7,21,0,0,2905,2906,7,10,0,0,2906,2907,7,9,0,0, + 2907,2908,7,19,0,0,2908,528,1,0,0,0,2909,2910,7,12,0,0,2910,2911, + 7,10,0,0,2911,2912,7,10,0,0,2912,2913,7,25,0,0,2913,2914,5,95,0, + 0,2914,2915,7,9,0,0,2915,2916,7,19,0,0,2916,2917,5,95,0,0,2917,2918, + 7,13,0,0,2918,2919,7,10,0,0,2919,2920,7,2,0,0,2920,2921,7,14,0,0, + 2921,530,1,0,0,0,2922,2923,7,12,0,0,2923,2924,7,10,0,0,2924,2925, + 7,10,0,0,2925,2926,7,25,0,0,2926,2927,7,9,0,0,2927,2928,7,19,0,0, + 2928,2929,7,13,0,0,2929,2930,7,10,0,0,2930,2931,7,2,0,0,2931,2932, + 7,14,0,0,2932,532,1,0,0,0,2933,2934,7,12,0,0,2934,2935,7,10,0,0, + 2935,2936,7,10,0,0,2936,2937,7,25,0,0,2937,2938,7,5,0,0,2938,2939, + 7,2,0,0,2939,2940,7,13,0,0,2940,534,1,0,0,0,2941,2942,7,12,0,0,2942, + 2943,7,17,0,0,2943,2944,7,3,0,0,2944,2945,7,5,0,0,2945,2946,7,7, + 0,0,2946,2947,7,2,0,0,2947,2948,7,14,0,0,2948,2949,7,5,0,0,2949, + 2950,7,26,0,0,2950,2951,7,15,0,0,2951,2952,7,10,0,0,2952,2953,7, + 14,0,0,2953,2954,7,13,0,0,2954,536,1,0,0,0,2955,2956,7,12,0,0,2956, + 2957,7,17,0,0,2957,2958,7,3,0,0,2958,2959,7,5,0,0,2959,2960,7,7, + 0,0,2960,2961,7,2,0,0,2961,2962,7,14,0,0,2962,2963,7,5,0,0,2963, + 2964,5,95,0,0,2964,2965,7,26,0,0,2965,2966,7,15,0,0,2966,2967,7, + 10,0,0,2967,2968,7,14,0,0,2968,2969,7,13,0,0,2969,538,1,0,0,0,2970, + 2971,7,6,0,0,2971,2972,7,15,0,0,2972,2973,7,8,0,0,2973,2974,7,6, + 0,0,2974,2975,7,11,0,0,2975,2976,7,14,0,0,2976,540,1,0,0,0,2977, + 2978,7,6,0,0,2978,2979,7,11,0,0,2979,2980,7,14,0,0,2980,2981,7,7, + 0,0,2981,2982,7,16,0,0,2982,2983,7,21,0,0,2983,542,1,0,0,0,2984, + 2985,7,2,0,0,2985,2986,7,5,0,0,2986,2987,7,5,0,0,2987,2988,7,5,0, + 0,2988,2989,7,2,0,0,2989,2990,7,11,0,0,2990,2991,7,10,0,0,2991,544, + 1,0,0,0,2992,2993,7,13,0,0,2993,2994,7,10,0,0,2994,2995,7,2,0,0, + 2995,2996,7,14,0,0,2996,2997,7,12,0,0,2997,2998,7,10,0,0,2998,2999, + 7,10,0,0,2999,3000,7,25,0,0,3000,546,1,0,0,0,3001,3002,7,2,0,0,3002, + 3003,7,3,0,0,3003,3004,7,3,0,0,3004,3005,7,9,0,0,3005,3006,7,12, + 0,0,3006,3007,5,95,0,0,3007,3008,7,3,0,0,3008,3009,7,10,0,0,3009, + 3010,7,2,0,0,3010,3011,7,5,0,0,3011,3012,7,17,0,0,3012,3013,7,4, + 0,0,3013,3014,7,20,0,0,3014,3015,5,95,0,0,3015,3016,7,12,0,0,3016, + 3017,7,17,0,0,3017,3018,7,3,0,0,3018,3019,7,5,0,0,3019,3020,7,7, + 0,0,3020,3021,7,2,0,0,3021,3022,7,14,0,0,3022,3023,7,5,0,0,3023, + 548,1,0,0,0,3024,3025,7,2,0,0,3025,3026,7,4,0,0,3026,3027,7,2,0, + 0,3027,3028,7,3,0,0,3028,3029,7,13,0,0,3029,3030,7,27,0,0,3030,3031, + 7,10,0,0,3031,3032,7,14,0,0,3032,550,1,0,0,0,3033,3034,7,2,0,0,3034, + 3035,7,4,0,0,3035,3036,7,2,0,0,3036,3037,7,3,0,0,3037,3038,7,13, + 0,0,3038,3039,7,27,0,0,3039,3040,7,10,0,0,3040,3041,5,95,0,0,3041, + 3042,7,12,0,0,3042,3043,7,17,0,0,3043,3044,7,3,0,0,3044,3045,7,5, + 0,0,3045,3046,7,7,0,0,3046,3047,7,2,0,0,3047,3048,7,14,0,0,3048, + 3049,7,5,0,0,3049,552,1,0,0,0,3050,3051,7,2,0,0,3051,3052,7,15,0, + 0,3052,3053,7,11,0,0,3053,3054,7,9,0,0,3054,3055,5,95,0,0,3055,3056, + 7,20,0,0,3056,3057,7,10,0,0,3057,3058,7,4,0,0,3058,3059,7,10,0,0, + 3059,3060,7,14,0,0,3060,3061,7,2,0,0,3061,3062,7,11,0,0,3062,3063, + 7,10,0,0,3063,3064,5,95,0,0,3064,3065,7,6,0,0,3065,3066,7,13,0,0, + 3066,3067,7,4,0,0,3067,3068,7,9,0,0,3068,3069,7,4,0,0,3069,3070, + 7,13,0,0,3070,3071,7,16,0,0,3071,3072,7,6,0,0,3072,3073,5,95,0,0, + 3073,3074,7,21,0,0,3074,3075,7,22,0,0,3075,3076,7,14,0,0,3076,3077, + 7,2,0,0,3077,3078,7,6,0,0,3078,3079,7,10,0,0,3079,3080,5,95,0,0, + 3080,3081,7,26,0,0,3081,3082,7,15,0,0,3082,3083,7,10,0,0,3083,3084, + 7,14,0,0,3084,3085,7,13,0,0,3085,554,1,0,0,0,3086,3087,7,8,0,0,3087, + 3088,7,9,0,0,3088,3089,7,9,0,0,3089,3090,7,6,0,0,3090,3091,7,11, + 0,0,3091,556,1,0,0,0,3092,3093,7,7,0,0,3093,3094,7,2,0,0,3094,3095, + 7,6,0,0,3095,3096,7,10,0,0,3096,3097,5,95,0,0,3097,3098,7,17,0,0, + 3098,3099,7,4,0,0,3099,3100,7,6,0,0,3100,3101,7,10,0,0,3101,3102, + 7,4,0,0,3102,3103,7,6,0,0,3103,3104,7,17,0,0,3104,3105,7,11,0,0, + 3105,3106,7,17,0,0,3106,3107,7,23,0,0,3107,3108,7,10,0,0,3108,558, + 1,0,0,0,3109,3110,7,7,0,0,3110,3111,7,15,0,0,3111,3112,7,11,0,0, + 3112,3113,7,9,0,0,3113,3114,7,19,0,0,3114,3115,7,19,0,0,3115,3116, + 5,95,0,0,3116,3117,7,19,0,0,3117,3118,7,14,0,0,3118,3119,7,10,0, + 0,3119,3120,7,26,0,0,3120,3121,7,15,0,0,3121,3122,7,10,0,0,3122, + 3123,7,4,0,0,3123,3124,7,7,0,0,3124,3125,7,13,0,0,3125,560,1,0,0, + 0,3126,3127,7,5,0,0,3127,3128,7,10,0,0,3128,3129,7,19,0,0,3129,3130, + 7,2,0,0,3130,3131,7,15,0,0,3131,3132,7,3,0,0,3132,3133,7,11,0,0, + 3133,3134,5,95,0,0,3134,3135,7,19,0,0,3135,3136,7,17,0,0,3136,3137, + 7,10,0,0,3137,3138,7,3,0,0,3138,3139,7,5,0,0,3139,562,1,0,0,0,3140, + 3141,7,5,0,0,3141,3142,7,10,0,0,3142,3143,7,19,0,0,3143,3144,7,2, + 0,0,3144,3145,7,15,0,0,3145,3146,7,3,0,0,3146,3147,7,11,0,0,3147, + 3148,5,95,0,0,3148,3149,7,9,0,0,3149,3150,7,21,0,0,3150,3151,7,10, + 0,0,3151,3152,7,14,0,0,3152,3153,7,2,0,0,3153,3154,7,11,0,0,3154, + 3155,7,9,0,0,3155,3156,7,14,0,0,3156,564,1,0,0,0,3157,3158,7,10, + 0,0,3158,3159,7,6,0,0,3159,3160,7,7,0,0,3160,3161,7,2,0,0,3161,3162, + 7,21,0,0,3162,3163,7,10,0,0,3163,566,1,0,0,0,3164,3165,7,10,0,0, + 3165,3166,7,4,0,0,3166,3167,7,2,0,0,3167,3168,7,8,0,0,3168,3169, + 7,3,0,0,3169,3170,7,10,0,0,3170,3171,5,95,0,0,3171,3172,7,21,0,0, + 3172,3173,7,9,0,0,3173,3174,7,6,0,0,3174,3175,7,17,0,0,3175,3176, + 7,11,0,0,3176,3177,7,17,0,0,3177,3178,7,9,0,0,3178,3179,7,4,0,0, + 3179,3180,5,95,0,0,3180,3181,7,17,0,0,3181,3182,7,4,0,0,3182,3183, + 7,7,0,0,3183,3184,7,14,0,0,3184,3185,7,10,0,0,3185,3186,7,16,0,0, + 3186,3187,7,10,0,0,3187,3188,7,4,0,0,3188,3189,7,11,0,0,3189,3190, + 7,6,0,0,3190,568,1,0,0,0,3191,3192,7,19,0,0,3192,3193,7,17,0,0,3193, + 3194,7,10,0,0,3194,3195,7,3,0,0,3195,3196,7,5,0,0,3196,3197,7,6, + 0,0,3197,570,1,0,0,0,3198,3199,7,19,0,0,3199,3200,7,3,0,0,3200,3201, + 7,2,0,0,3201,3202,7,20,0,0,3202,3203,7,6,0,0,3203,572,1,0,0,0,3204, + 3205,7,19,0,0,3205,3206,7,15,0,0,3206,3207,7,27,0,0,3207,3208,7, + 27,0,0,3208,3209,7,17,0,0,3209,3210,7,4,0,0,3210,3211,7,10,0,0,3211, + 3212,7,6,0,0,3212,3213,7,6,0,0,3213,574,1,0,0,0,3214,3215,7,19,0, + 0,3215,3216,7,15,0,0,3216,3217,7,27,0,0,3217,3218,7,27,0,0,3218, + 3219,7,13,0,0,3219,3220,5,95,0,0,3220,3221,7,16,0,0,3221,3222,7, + 2,0,0,3222,3223,7,18,0,0,3223,3224,5,95,0,0,3224,3225,7,10,0,0,3225, + 3226,7,18,0,0,3226,3227,7,21,0,0,3227,3228,7,2,0,0,3228,3229,7,4, + 0,0,3229,3230,7,6,0,0,3230,3231,7,17,0,0,3231,3232,7,9,0,0,3232, + 3233,7,4,0,0,3233,3234,7,6,0,0,3234,576,1,0,0,0,3235,3236,7,19,0, + 0,3236,3237,7,15,0,0,3237,3238,7,27,0,0,3238,3239,7,27,0,0,3239, + 3240,7,13,0,0,3240,3241,5,95,0,0,3241,3242,7,21,0,0,3242,3243,7, + 14,0,0,3243,3244,7,10,0,0,3244,3245,7,19,0,0,3245,3246,7,17,0,0, + 3246,3247,7,18,0,0,3247,3248,5,95,0,0,3248,3249,7,3,0,0,3249,3250, + 7,10,0,0,3250,3251,7,4,0,0,3251,3252,7,20,0,0,3252,3253,7,11,0,0, + 3253,3254,7,22,0,0,3254,578,1,0,0,0,3255,3256,7,19,0,0,3256,3257, + 7,15,0,0,3257,3258,7,27,0,0,3258,3259,7,27,0,0,3259,3260,7,13,0, + 0,3260,3261,5,95,0,0,3261,3262,7,14,0,0,3262,3263,7,10,0,0,3263, + 3264,7,12,0,0,3264,3265,7,14,0,0,3265,3266,7,17,0,0,3266,3267,7, + 11,0,0,3267,3268,7,10,0,0,3268,580,1,0,0,0,3269,3270,7,19,0,0,3270, + 3271,7,15,0,0,3271,3272,7,27,0,0,3272,3273,7,27,0,0,3273,3274,7, + 13,0,0,3274,3275,5,95,0,0,3275,3276,7,11,0,0,3276,3277,7,14,0,0, + 3277,3278,7,2,0,0,3278,3279,7,4,0,0,3279,3280,7,6,0,0,3280,3281, + 7,21,0,0,3281,3282,7,9,0,0,3282,3283,7,6,0,0,3283,3284,7,17,0,0, + 3284,3285,7,11,0,0,3285,3286,7,17,0,0,3286,3287,7,9,0,0,3287,3288, + 7,4,0,0,3288,3289,7,6,0,0,3289,582,1,0,0,0,3290,3291,7,3,0,0,3291, + 3292,7,10,0,0,3292,3293,7,4,0,0,3293,3294,7,17,0,0,3294,3295,7,10, + 0,0,3295,3296,7,4,0,0,3296,3297,7,11,0,0,3297,584,1,0,0,0,3298,3299, + 7,3,0,0,3299,3300,7,9,0,0,3300,3301,7,12,0,0,3301,3302,5,95,0,0, + 3302,3303,7,19,0,0,3303,3304,7,14,0,0,3304,3305,7,10,0,0,3305,3306, + 7,26,0,0,3306,3307,5,95,0,0,3307,3308,7,9,0,0,3308,3309,7,21,0,0, + 3309,3310,7,10,0,0,3310,3311,7,14,0,0,3311,3312,7,2,0,0,3312,3313, + 7,11,0,0,3313,3314,7,9,0,0,3314,3315,7,14,0,0,3315,586,1,0,0,0,3316, + 3317,7,16,0,0,3317,3318,7,2,0,0,3318,3319,7,18,0,0,3319,3320,5,95, + 0,0,3320,3321,7,5,0,0,3321,3322,7,10,0,0,3322,3323,7,11,0,0,3323, + 3324,7,10,0,0,3324,3325,7,14,0,0,3325,3326,7,16,0,0,3326,3327,7, + 17,0,0,3327,3328,7,4,0,0,3328,3329,7,17,0,0,3329,3330,7,27,0,0,3330, + 3331,7,10,0,0,3331,3332,7,5,0,0,3332,3333,5,95,0,0,3333,3334,7,6, + 0,0,3334,3335,7,11,0,0,3335,3336,7,2,0,0,3336,3337,7,11,0,0,3337, + 3338,7,10,0,0,3338,3339,7,6,0,0,3339,588,1,0,0,0,3340,3341,7,16, + 0,0,3341,3342,7,2,0,0,3342,3343,7,18,0,0,3343,3344,5,95,0,0,3344, + 3345,7,10,0,0,3345,3346,7,18,0,0,3346,3347,7,21,0,0,3347,3348,7, + 2,0,0,3348,3349,7,4,0,0,3349,3350,7,6,0,0,3350,3351,7,17,0,0,3351, + 3352,7,9,0,0,3352,3353,7,4,0,0,3353,3354,7,6,0,0,3354,590,1,0,0, + 0,3355,3356,7,16,0,0,3356,3357,7,17,0,0,3357,3358,7,4,0,0,3358,3359, + 7,17,0,0,3359,3360,7,16,0,0,3360,3361,7,15,0,0,3361,3362,7,16,0, + 0,3362,3363,5,95,0,0,3363,3364,7,6,0,0,3364,3365,7,22,0,0,3365,3366, + 7,9,0,0,3366,3367,7,15,0,0,3367,3368,7,3,0,0,3368,3369,7,5,0,0,3369, + 3370,5,95,0,0,3370,3371,7,16,0,0,3371,3372,7,2,0,0,3372,3373,7,11, + 0,0,3373,3374,7,7,0,0,3374,3375,7,22,0,0,3375,592,1,0,0,0,3376,3377, + 7,9,0,0,3377,3378,7,21,0,0,3378,3379,7,10,0,0,3379,3380,7,14,0,0, + 3380,3381,7,2,0,0,3381,3382,7,11,0,0,3382,3383,7,9,0,0,3383,3384, + 7,14,0,0,3384,594,1,0,0,0,3385,3386,7,21,0,0,3386,3387,7,22,0,0, + 3387,3388,7,14,0,0,3388,3389,7,2,0,0,3389,3390,7,6,0,0,3390,3391, + 7,10,0,0,3391,3392,5,95,0,0,3392,3393,7,6,0,0,3393,3394,7,3,0,0, + 3394,3395,7,9,0,0,3395,3396,7,21,0,0,3396,596,1,0,0,0,3397,3398, + 7,21,0,0,3398,3399,7,14,0,0,3399,3400,7,10,0,0,3400,3401,7,19,0, + 0,3401,3402,7,17,0,0,3402,3403,7,18,0,0,3403,3404,5,95,0,0,3404, + 3405,7,3,0,0,3405,3406,7,10,0,0,3406,3407,7,4,0,0,3407,3408,7,20, + 0,0,3408,3409,7,11,0,0,3409,3410,7,22,0,0,3410,598,1,0,0,0,3411, + 3412,7,26,0,0,3412,3413,7,15,0,0,3413,3414,7,9,0,0,3414,3415,7,11, + 0,0,3415,3416,7,10,0,0,3416,3417,5,95,0,0,3417,3418,7,2,0,0,3418, + 3419,7,4,0,0,3419,3420,7,2,0,0,3420,3421,7,3,0,0,3421,3422,7,13, + 0,0,3422,3423,7,27,0,0,3423,3424,7,10,0,0,3424,3425,7,14,0,0,3425, + 600,1,0,0,0,3426,3427,7,26,0,0,3427,3428,7,15,0,0,3428,3429,7,9, + 0,0,3429,3430,7,11,0,0,3430,3431,7,10,0,0,3431,3432,5,95,0,0,3432, + 3433,7,19,0,0,3433,3434,7,17,0,0,3434,3435,7,10,0,0,3435,3436,7, + 3,0,0,3436,3437,7,5,0,0,3437,3438,5,95,0,0,3438,3439,7,6,0,0,3439, + 3440,7,15,0,0,3440,3441,7,19,0,0,3441,3442,7,19,0,0,3442,3443,7, + 17,0,0,3443,3444,7,18,0,0,3444,602,1,0,0,0,3445,3446,7,14,0,0,3446, + 3447,7,10,0,0,3447,3448,7,12,0,0,3448,3449,7,14,0,0,3449,3450,7, + 17,0,0,3450,3451,7,11,0,0,3451,3452,7,10,0,0,3452,604,1,0,0,0,3453, + 3454,7,6,0,0,3454,3455,7,3,0,0,3455,3456,7,9,0,0,3456,3457,7,21, + 0,0,3457,606,1,0,0,0,3458,3459,7,11,0,0,3459,3460,7,17,0,0,3460, + 3461,7,10,0,0,3461,3462,5,95,0,0,3462,3463,7,8,0,0,3463,3464,7,14, + 0,0,3464,3465,7,10,0,0,3465,3466,7,2,0,0,3466,3467,7,25,0,0,3467, + 3468,7,10,0,0,3468,3469,7,14,0,0,3469,608,1,0,0,0,3470,3471,7,11, + 0,0,3471,3472,7,17,0,0,3472,3473,7,16,0,0,3473,3474,7,10,0,0,3474, + 3475,5,95,0,0,3475,3476,7,27,0,0,3476,3477,7,9,0,0,3477,3478,7,4, + 0,0,3478,3479,7,10,0,0,3479,610,1,0,0,0,3480,3481,7,11,0,0,3481, + 3482,7,13,0,0,3482,3483,7,21,0,0,3483,3484,7,10,0,0,3484,612,1,0, + 0,0,3485,3486,7,27,0,0,3486,3487,7,10,0,0,3487,3488,7,14,0,0,3488, + 3489,7,9,0,0,3489,3490,5,95,0,0,3490,3491,7,11,0,0,3491,3492,7,10, + 0,0,3492,3493,7,14,0,0,3493,3494,7,16,0,0,3494,3495,7,6,0,0,3495, + 3496,5,95,0,0,3496,3497,7,26,0,0,3497,3498,7,15,0,0,3498,3499,7, + 10,0,0,3499,3500,7,14,0,0,3500,3501,7,13,0,0,3501,614,1,0,0,0,3502, + 3503,7,22,0,0,3503,3504,7,17,0,0,3504,3505,7,20,0,0,3505,3506,7, + 22,0,0,3506,3507,7,3,0,0,3507,3508,7,17,0,0,3508,3509,7,20,0,0,3509, + 3510,7,22,0,0,3510,3511,7,11,0,0,3511,616,1,0,0,0,3512,3513,7,21, + 0,0,3513,3514,7,14,0,0,3514,3515,7,10,0,0,3515,3516,5,95,0,0,3516, + 3517,7,11,0,0,3517,3518,7,2,0,0,3518,3519,7,20,0,0,3519,3520,7,6, + 0,0,3520,618,1,0,0,0,3521,3522,7,21,0,0,3522,3523,7,9,0,0,3523,3524, + 7,6,0,0,3524,3525,7,11,0,0,3525,3526,5,95,0,0,3526,3527,7,11,0,0, + 3527,3528,7,2,0,0,3528,3529,7,20,0,0,3529,3530,7,6,0,0,3530,620, + 1,0,0,0,3531,3532,7,16,0,0,3532,3533,7,2,0,0,3533,3534,7,11,0,0, + 3534,3535,7,7,0,0,3535,3536,7,22,0,0,3536,3537,5,95,0,0,3537,3538, + 7,8,0,0,3538,3539,7,9,0,0,3539,3540,7,9,0,0,3540,3541,7,3,0,0,3541, + 3542,5,95,0,0,3542,3543,7,21,0,0,3543,3544,7,14,0,0,3544,3545,7, + 10,0,0,3545,3546,7,19,0,0,3546,3547,7,17,0,0,3547,3548,7,18,0,0, + 3548,622,1,0,0,0,3549,3550,5,42,0,0,3550,624,1,0,0,0,3551,3552,5, + 47,0,0,3552,626,1,0,0,0,3553,3554,5,37,0,0,3554,628,1,0,0,0,3555, + 3556,5,43,0,0,3556,630,1,0,0,0,3557,3558,5,45,0,0,3558,632,1,0,0, + 0,3559,3560,7,5,0,0,3560,3561,7,17,0,0,3561,3562,7,23,0,0,3562,634, + 1,0,0,0,3563,3564,7,16,0,0,3564,3565,7,9,0,0,3565,3566,7,5,0,0,3566, + 636,1,0,0,0,3567,3568,5,61,0,0,3568,638,1,0,0,0,3569,3570,5,62,0, + 0,3570,640,1,0,0,0,3571,3572,5,60,0,0,3572,642,1,0,0,0,3573,3574, + 5,33,0,0,3574,644,1,0,0,0,3575,3576,5,126,0,0,3576,646,1,0,0,0,3577, + 3578,5,124,0,0,3578,648,1,0,0,0,3579,3580,5,38,0,0,3580,650,1,0, + 0,0,3581,3582,5,94,0,0,3582,652,1,0,0,0,3583,3584,5,46,0,0,3584, + 654,1,0,0,0,3585,3586,5,40,0,0,3586,656,1,0,0,0,3587,3588,5,41,0, + 0,3588,658,1,0,0,0,3589,3590,5,91,0,0,3590,660,1,0,0,0,3591,3592, + 5,93,0,0,3592,662,1,0,0,0,3593,3594,5,44,0,0,3594,664,1,0,0,0,3595, + 3596,5,59,0,0,3596,666,1,0,0,0,3597,3598,5,64,0,0,3598,668,1,0,0, + 0,3599,3600,5,48,0,0,3600,670,1,0,0,0,3601,3602,5,49,0,0,3602,672, + 1,0,0,0,3603,3604,5,50,0,0,3604,674,1,0,0,0,3605,3606,5,39,0,0,3606, + 676,1,0,0,0,3607,3608,5,34,0,0,3608,678,1,0,0,0,3609,3610,5,96,0, + 0,3610,680,1,0,0,0,3611,3612,5,58,0,0,3612,682,1,0,0,0,3613,3614, + 7,4,0,0,3614,3615,3,709,354,0,3615,684,1,0,0,0,3616,3617,3,709,354, + 0,3617,686,1,0,0,0,3618,3620,3,715,357,0,3619,3618,1,0,0,0,3620, + 3621,1,0,0,0,3621,3619,1,0,0,0,3621,3622,1,0,0,0,3622,688,1,0,0, + 0,3623,3624,7,18,0,0,3624,3628,5,39,0,0,3625,3626,3,713,356,0,3626, + 3627,3,713,356,0,3627,3629,1,0,0,0,3628,3625,1,0,0,0,3629,3630,1, + 0,0,0,3630,3628,1,0,0,0,3630,3631,1,0,0,0,3631,3632,1,0,0,0,3632, + 3633,5,39,0,0,3633,3643,1,0,0,0,3634,3635,5,48,0,0,3635,3636,7,18, + 0,0,3636,3638,1,0,0,0,3637,3639,3,713,356,0,3638,3637,1,0,0,0,3639, + 3640,1,0,0,0,3640,3638,1,0,0,0,3640,3641,1,0,0,0,3641,3643,1,0,0, + 0,3642,3623,1,0,0,0,3642,3634,1,0,0,0,3643,690,1,0,0,0,3644,3646, + 3,715,357,0,3645,3644,1,0,0,0,3646,3647,1,0,0,0,3647,3645,1,0,0, + 0,3647,3648,1,0,0,0,3648,3650,1,0,0,0,3649,3645,1,0,0,0,3649,3650, + 1,0,0,0,3650,3651,1,0,0,0,3651,3653,5,46,0,0,3652,3654,3,715,357, + 0,3653,3652,1,0,0,0,3654,3655,1,0,0,0,3655,3653,1,0,0,0,3655,3656, + 1,0,0,0,3656,3688,1,0,0,0,3657,3659,3,715,357,0,3658,3657,1,0,0, + 0,3659,3660,1,0,0,0,3660,3658,1,0,0,0,3660,3661,1,0,0,0,3661,3662, + 1,0,0,0,3662,3663,5,46,0,0,3663,3664,3,703,351,0,3664,3688,1,0,0, + 0,3665,3667,3,715,357,0,3666,3665,1,0,0,0,3667,3668,1,0,0,0,3668, + 3666,1,0,0,0,3668,3669,1,0,0,0,3669,3671,1,0,0,0,3670,3666,1,0,0, + 0,3670,3671,1,0,0,0,3671,3672,1,0,0,0,3672,3674,5,46,0,0,3673,3675, + 3,715,357,0,3674,3673,1,0,0,0,3675,3676,1,0,0,0,3676,3674,1,0,0, + 0,3676,3677,1,0,0,0,3677,3678,1,0,0,0,3678,3679,3,703,351,0,3679, + 3688,1,0,0,0,3680,3682,3,715,357,0,3681,3680,1,0,0,0,3682,3683,1, + 0,0,0,3683,3681,1,0,0,0,3683,3684,1,0,0,0,3684,3685,1,0,0,0,3685, + 3686,3,703,351,0,3686,3688,1,0,0,0,3687,3649,1,0,0,0,3687,3658,1, + 0,0,0,3687,3670,1,0,0,0,3687,3681,1,0,0,0,3688,692,1,0,0,0,3689, + 3690,5,92,0,0,3690,3691,7,4,0,0,3691,694,1,0,0,0,3692,3693,3,717, + 358,0,3693,696,1,0,0,0,3694,3695,3,705,352,0,3695,698,1,0,0,0,3696, + 3697,3,707,353,0,3697,700,1,0,0,0,3698,3699,3,711,355,0,3699,702, + 1,0,0,0,3700,3702,7,10,0,0,3701,3703,7,28,0,0,3702,3701,1,0,0,0, + 3702,3703,1,0,0,0,3703,3705,1,0,0,0,3704,3706,3,715,357,0,3705,3704, + 1,0,0,0,3706,3707,1,0,0,0,3707,3705,1,0,0,0,3707,3708,1,0,0,0,3708, + 704,1,0,0,0,3709,3711,7,29,0,0,3710,3709,1,0,0,0,3711,3712,1,0,0, + 0,3712,3710,1,0,0,0,3712,3713,1,0,0,0,3713,3717,1,0,0,0,3714,3716, + 7,30,0,0,3715,3714,1,0,0,0,3716,3719,1,0,0,0,3717,3715,1,0,0,0,3717, + 3718,1,0,0,0,3718,706,1,0,0,0,3719,3717,1,0,0,0,3720,3728,5,34,0, + 0,3721,3722,5,92,0,0,3722,3727,9,0,0,0,3723,3724,5,34,0,0,3724,3727, + 5,34,0,0,3725,3727,8,31,0,0,3726,3721,1,0,0,0,3726,3723,1,0,0,0, + 3726,3725,1,0,0,0,3727,3730,1,0,0,0,3728,3726,1,0,0,0,3728,3729, + 1,0,0,0,3729,3731,1,0,0,0,3730,3728,1,0,0,0,3731,3732,5,34,0,0,3732, + 708,1,0,0,0,3733,3741,5,39,0,0,3734,3735,5,92,0,0,3735,3740,9,0, + 0,0,3736,3737,5,39,0,0,3737,3740,5,39,0,0,3738,3740,8,32,0,0,3739, + 3734,1,0,0,0,3739,3736,1,0,0,0,3739,3738,1,0,0,0,3740,3743,1,0,0, + 0,3741,3739,1,0,0,0,3741,3742,1,0,0,0,3742,3744,1,0,0,0,3743,3741, + 1,0,0,0,3744,3745,5,39,0,0,3745,710,1,0,0,0,3746,3754,5,96,0,0,3747, + 3748,5,92,0,0,3748,3753,9,0,0,0,3749,3750,5,96,0,0,3750,3753,5,96, + 0,0,3751,3753,8,33,0,0,3752,3747,1,0,0,0,3752,3749,1,0,0,0,3752, + 3751,1,0,0,0,3753,3756,1,0,0,0,3754,3752,1,0,0,0,3754,3755,1,0,0, + 0,3755,3757,1,0,0,0,3756,3754,1,0,0,0,3757,3758,5,96,0,0,3758,712, + 1,0,0,0,3759,3760,7,34,0,0,3760,714,1,0,0,0,3761,3762,7,35,0,0,3762, + 716,1,0,0,0,3763,3764,7,8,0,0,3764,3766,5,39,0,0,3765,3767,7,36, + 0,0,3766,3765,1,0,0,0,3767,3768,1,0,0,0,3768,3766,1,0,0,0,3768,3769, + 1,0,0,0,3769,3770,1,0,0,0,3770,3771,5,39,0,0,3771,718,1,0,0,0,3772, + 3773,9,0,0,0,3773,3774,1,0,0,0,3774,3775,6,359,2,0,3775,720,1,0, + 0,0,35,0,724,735,748,760,765,769,773,779,783,785,3621,3630,3640, + 3642,3647,3649,3655,3660,3668,3670,3676,3683,3687,3702,3707,3712, + 3717,3726,3728,3739,3741,3752,3754,3768,3,0,1,0,0,2,0,0,3,0 + ]; + + private static __ATN: antlr.ATN; + public static get _ATN(): antlr.ATN { + if (!OpenSearchSQLLexer.__ATN) { + OpenSearchSQLLexer.__ATN = new antlr.ATNDeserializer().deserialize(OpenSearchSQLLexer._serializedATN); + } + + return OpenSearchSQLLexer.__ATN; + } + + + private static readonly vocabulary = new antlr.Vocabulary(OpenSearchSQLLexer.literalNames, OpenSearchSQLLexer.symbolicNames, []); + + public override get vocabulary(): antlr.Vocabulary { + return OpenSearchSQLLexer.vocabulary; + } + + private static readonly decisionsToDFA = OpenSearchSQLLexer._ATN.decisionToState.map( (ds: antlr.DecisionState, index: number) => new antlr.DFA(ds, index) ); +} \ No newline at end of file diff --git a/src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLParser.interp b/src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLParser.interp new file mode 100644 index 000000000000..7ad75b08df3d --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLParser.interp @@ -0,0 +1,829 @@ +token literal names: +null +null +null +null +null +'ALL' +'AND' +'AS' +'ASC' +'BOOLEAN' +'BETWEEN' +'BY' +'CASE' +'CAST' +'CROSS' +'COLUMNS' +'DATETIME' +'DELETE' +'DESC' +'DESCRIBE' +'DISTINCT' +'DOUBLE' +'ELSE' +'EXISTS' +'FALSE' +'FLOAT' +'FIRST' +'FROM' +'GROUP' +'HAVING' +'IN' +'INNER' +'INT' +'INTEGER' +'IS' +'JOIN' +'LAST' +'LEFT' +'LIKE' +'LIMIT' +'LONG' +'MATCH' +'NATURAL' +'MISSING' +'NOT' +'NULL' +'NULLS' +'ON' +'OR' +'ORDER' +'OUTER' +'OVER' +'PARTITION' +'REGEXP' +'RIGHT' +'SELECT' +'SHOW' +'STRING' +'THEN' +'TRUE' +'UNION' +'USING' +'WHEN' +'WHERE' +'MINUS' +'AVG' +'COUNT' +'MAX' +'MIN' +'SUM' +'VAR_POP' +'VAR_SAMP' +'VARIANCE' +'STD' +'STDDEV' +'STDDEV_POP' +'STDDEV_SAMP' +'SUBSTRING' +'TRIM' +'END' +'FULL' +'OFFSET' +'INTERVAL' +'MICROSECOND' +'SECOND' +'MINUTE' +'HOUR' +'DAY' +'WEEK' +'MONTH' +'QUARTER' +'YEAR' +'SECOND_MICROSECOND' +'MINUTE_MICROSECOND' +'MINUTE_SECOND' +'HOUR_MICROSECOND' +'HOUR_SECOND' +'HOUR_MINUTE' +'DAY_MICROSECOND' +'DAY_SECOND' +'DAY_MINUTE' +'DAY_HOUR' +'YEAR_MONTH' +'TABLES' +'ABS' +'ACOS' +'ADD' +'ADDTIME' +'ASCII' +'ASIN' +'ATAN' +'ATAN2' +'CBRT' +'CEIL' +'CEILING' +'CONCAT' +'CONCAT_WS' +'CONV' +'CONVERT_TZ' +'COS' +'COSH' +'COT' +'CRC32' +'CURDATE' +'CURTIME' +'CURRENT_DATE' +'CURRENT_TIME' +'CURRENT_TIMESTAMP' +'DATE' +'DATE_ADD' +'DATE_FORMAT' +'DATE_SUB' +'DATEDIFF' +'DAYNAME' +'DAYOFMONTH' +'DAYOFWEEK' +'DAYOFYEAR' +'DEGREES' +'DIVIDE' +'E' +'EXP' +'EXPM1' +'EXTRACT' +'FLOOR' +'FROM_DAYS' +'FROM_UNIXTIME' +'GET_FORMAT' +'IF' +'IFNULL' +'ISNULL' +'LAST_DAY' +'LENGTH' +'LN' +'LOCALTIME' +'LOCALTIMESTAMP' +'LOCATE' +'LOG' +'LOG10' +'LOG2' +'LOWER' +'LTRIM' +'MAKEDATE' +'MAKETIME' +'MODULUS' +'MONTHNAME' +'MULTIPLY' +'NOW' +'NULLIF' +'PERIOD_ADD' +'PERIOD_DIFF' +'PI' +'POSITION' +'POW' +'POWER' +'RADIANS' +'RAND' +'REPLACE' +'RINT' +'ROUND' +'RTRIM' +'REVERSE' +'SEC_TO_TIME' +'SIGN' +'SIGNUM' +'SIN' +'SINH' +'SQRT' +'STR_TO_DATE' +'SUBDATE' +'SUBTIME' +'SUBTRACT' +'SYSDATE' +'TAN' +'TIME' +'TIMEDIFF' +'TIME_FORMAT' +'TIME_TO_SEC' +'TIMESTAMP' +'TRUNCATE' +'TO_DAYS' +'TO_SECONDS' +'UNIX_TIMESTAMP' +'UPPER' +'UTC_DATE' +'UTC_TIME' +'UTC_TIMESTAMP' +'D' +'T' +'TS' +'{' +'}' +'DENSE_RANK' +'RANK' +'ROW_NUMBER' +'DATE_HISTOGRAM' +'DAY_OF_MONTH' +'DAY_OF_YEAR' +'DAY_OF_WEEK' +'EXCLUDE' +'EXTENDED_STATS' +'FIELD' +'FILTER' +'GEO_BOUNDING_BOX' +'GEO_CELL' +'GEO_DISTANCE' +'GEO_DISTANCE_RANGE' +'GEO_INTERSECTS' +'GEO_POLYGON' +'HISTOGRAM' +'HOUR_OF_DAY' +'INCLUDE' +'IN_TERMS' +'MATCHPHRASE' +'MATCH_PHRASE' +'MATCHPHRASEQUERY' +'SIMPLE_QUERY_STRING' +'QUERY_STRING' +'MATCH_PHRASE_PREFIX' +'MATCHQUERY' +'MATCH_QUERY' +'MINUTE_OF_DAY' +'MINUTE_OF_HOUR' +'MONTH_OF_YEAR' +'MULTIMATCH' +'MULTI_MATCH' +'MULTIMATCHQUERY' +'NESTED' +'PERCENTILES' +'PERCENTILE' +'PERCENTILE_APPROX' +'REGEXP_QUERY' +'REVERSE_NESTED' +'QUERY' +'RANGE' +'SCORE' +'SCOREQUERY' +'SCORE_QUERY' +'SECOND_OF_MINUTE' +'STATS' +'TERM' +'TERMS' +'TIMESTAMPADD' +'TIMESTAMPDIFF' +'TOPHITS' +'TYPEOF' +'WEEK_OF_YEAR' +'WEEKOFYEAR' +'WEEKDAY' +'WILDCARDQUERY' +'WILDCARD_QUERY' +'SUBSTR' +'STRCMP' +'ADDDATE' +'YEARWEEK' +'ALLOW_LEADING_WILDCARD' +'ANALYZER' +'ANALYZE_WILDCARD' +'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY' +'BOOST' +'CASE_INSENSITIVE' +'CUTOFF_FREQUENCY' +'DEFAULT_FIELD' +'DEFAULT_OPERATOR' +'ESCAPE' +'ENABLE_POSITION_INCREMENTS' +'FIELDS' +'FLAGS' +'FUZZINESS' +'FUZZY_MAX_EXPANSIONS' +'FUZZY_PREFIX_LENGTH' +'FUZZY_REWRITE' +'FUZZY_TRANSPOSITIONS' +'LENIENT' +'LOW_FREQ_OPERATOR' +'MAX_DETERMINIZED_STATES' +'MAX_EXPANSIONS' +'MINIMUM_SHOULD_MATCH' +'OPERATOR' +'PHRASE_SLOP' +'PREFIX_LENGTH' +'QUOTE_ANALYZER' +'QUOTE_FIELD_SUFFIX' +'REWRITE' +'SLOP' +'TIE_BREAKER' +'TIME_ZONE' +'TYPE' +'ZERO_TERMS_QUERY' +'HIGHLIGHT' +'PRE_TAGS' +'POST_TAGS' +'MATCH_BOOL_PREFIX' +'*' +'/' +'%' +'+' +'-' +'DIV' +'MOD' +'=' +'>' +'<' +'!' +'~' +'|' +'&' +'^' +'.' +'(' +')' +'[' +']' +',' +';' +'@' +'0' +'1' +'2' +'\'' +'"' +'`' +':' +null +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +SPACE +SPEC_SQL_COMMENT +COMMENT_INPUT +LINE_COMMENT +ALL +AND +AS +ASC +BOOLEAN +BETWEEN +BY +CASE +CAST +CROSS +COLUMNS +DATETIME +DELETE +DESC +DESCRIBE +DISTINCT +DOUBLE +ELSE +EXISTS +FALSE +FLOAT +FIRST +FROM +GROUP +HAVING +IN +INNER +INT +INTEGER +IS +JOIN +LAST +LEFT +LIKE +LIMIT +LONG +MATCH +NATURAL +MISSING_LITERAL +NOT +NULL_LITERAL +NULLS +ON +OR +ORDER +OUTER +OVER +PARTITION +REGEXP +RIGHT +SELECT +SHOW +STRING +THEN +TRUE +UNION +USING +WHEN +WHERE +EXCEPT +AVG +COUNT +MAX +MIN +SUM +VAR_POP +VAR_SAMP +VARIANCE +STD +STDDEV +STDDEV_POP +STDDEV_SAMP +SUBSTRING +TRIM +END +FULL +OFFSET +INTERVAL +MICROSECOND +SECOND +MINUTE +HOUR +DAY +WEEK +MONTH +QUARTER +YEAR +SECOND_MICROSECOND +MINUTE_MICROSECOND +MINUTE_SECOND +HOUR_MICROSECOND +HOUR_SECOND +HOUR_MINUTE +DAY_MICROSECOND +DAY_SECOND +DAY_MINUTE +DAY_HOUR +YEAR_MONTH +TABLES +ABS +ACOS +ADD +ADDTIME +ASCII +ASIN +ATAN +ATAN2 +CBRT +CEIL +CEILING +CONCAT +CONCAT_WS +CONV +CONVERT_TZ +COS +COSH +COT +CRC32 +CURDATE +CURTIME +CURRENT_DATE +CURRENT_TIME +CURRENT_TIMESTAMP +DATE +DATE_ADD +DATE_FORMAT +DATE_SUB +DATEDIFF +DAYNAME +DAYOFMONTH +DAYOFWEEK +DAYOFYEAR +DEGREES +DIVIDE +E +EXP +EXPM1 +EXTRACT +FLOOR +FROM_DAYS +FROM_UNIXTIME +GET_FORMAT +IF +IFNULL +ISNULL +LAST_DAY +LENGTH +LN +LOCALTIME +LOCALTIMESTAMP +LOCATE +LOG +LOG10 +LOG2 +LOWER +LTRIM +MAKEDATE +MAKETIME +MODULUS +MONTHNAME +MULTIPLY +NOW +NULLIF +PERIOD_ADD +PERIOD_DIFF +PI +POSITION +POW +POWER +RADIANS +RAND +REPLACE +RINT +ROUND +RTRIM +REVERSE +SEC_TO_TIME +SIGN +SIGNUM +SIN +SINH +SQRT +STR_TO_DATE +SUBDATE +SUBTIME +SUBTRACT +SYSDATE +TAN +TIME +TIMEDIFF +TIME_FORMAT +TIME_TO_SEC +TIMESTAMP +TRUNCATE +TO_DAYS +TO_SECONDS +UNIX_TIMESTAMP +UPPER +UTC_DATE +UTC_TIME +UTC_TIMESTAMP +D +T +TS +LEFT_BRACE +RIGHT_BRACE +DENSE_RANK +RANK +ROW_NUMBER +DATE_HISTOGRAM +DAY_OF_MONTH +DAY_OF_YEAR +DAY_OF_WEEK +EXCLUDE +EXTENDED_STATS +FIELD +FILTER +GEO_BOUNDING_BOX +GEO_CELL +GEO_DISTANCE +GEO_DISTANCE_RANGE +GEO_INTERSECTS +GEO_POLYGON +HISTOGRAM +HOUR_OF_DAY +INCLUDE +IN_TERMS +MATCHPHRASE +MATCH_PHRASE +MATCHPHRASEQUERY +SIMPLE_QUERY_STRING +QUERY_STRING +MATCH_PHRASE_PREFIX +MATCHQUERY +MATCH_QUERY +MINUTE_OF_DAY +MINUTE_OF_HOUR +MONTH_OF_YEAR +MULTIMATCH +MULTI_MATCH +MULTIMATCHQUERY +NESTED +PERCENTILES +PERCENTILE +PERCENTILE_APPROX +REGEXP_QUERY +REVERSE_NESTED +QUERY +RANGE +SCORE +SCOREQUERY +SCORE_QUERY +SECOND_OF_MINUTE +STATS +TERM +TERMS +TIMESTAMPADD +TIMESTAMPDIFF +TOPHITS +TYPEOF +WEEK_OF_YEAR +WEEKOFYEAR +WEEKDAY +WILDCARDQUERY +WILDCARD_QUERY +SUBSTR +STRCMP +ADDDATE +YEARWEEK +ALLOW_LEADING_WILDCARD +ANALYZER +ANALYZE_WILDCARD +AUTO_GENERATE_SYNONYMS_PHRASE_QUERY +BOOST +CASE_INSENSITIVE +CUTOFF_FREQUENCY +DEFAULT_FIELD +DEFAULT_OPERATOR +ESCAPE +ENABLE_POSITION_INCREMENTS +FIELDS +FLAGS +FUZZINESS +FUZZY_MAX_EXPANSIONS +FUZZY_PREFIX_LENGTH +FUZZY_REWRITE +FUZZY_TRANSPOSITIONS +LENIENT +LOW_FREQ_OPERATOR +MAX_DETERMINIZED_STATES +MAX_EXPANSIONS +MINIMUM_SHOULD_MATCH +OPERATOR +PHRASE_SLOP +PREFIX_LENGTH +QUOTE_ANALYZER +QUOTE_FIELD_SUFFIX +REWRITE +SLOP +TIE_BREAKER +TIME_ZONE +TYPE +ZERO_TERMS_QUERY +HIGHLIGHT +HIGHLIGHT_PRE_TAGS +HIGHLIGHT_POST_TAGS +MATCH_BOOL_PREFIX +STAR +SLASH +MODULE +PLUS +MINUS +DIV +MOD +EQUAL_SYMBOL +GREATER_SYMBOL +LESS_SYMBOL +EXCLAMATION_SYMBOL +BIT_NOT_OP +BIT_OR_OP +BIT_AND_OP +BIT_XOR_OP +DOT +LR_BRACKET +RR_BRACKET +LT_SQR_PRTHS +RT_SQR_PRTHS +COMMA +SEMI +AT_SIGN +ZERO_DECIMAL +ONE_DECIMAL +TWO_DECIMAL +SINGLE_QUOTE_SYMB +DOUBLE_QUOTE_SYMB +REVERSE_QUOTE_SYMB +COLON_SYMB +START_NATIONAL_STRING_LITERAL +STRING_LITERAL +DECIMAL_LITERAL +HEXADECIMAL_LITERAL +REAL_LITERAL +NULL_SPEC_LITERAL +BIT_STRING +ID +DOUBLE_QUOTE_ID +BACKTICK_QUOTE_ID +ERROR_RECOGNITION + +rule names: +root +sqlStatement +dmlStatement +selectStatement +adminStatement +showStatement +describeStatement +columnFilter +tableFilter +showDescribePattern +compatibleID +querySpecification +selectClause +selectSpec +selectElements +selectElement +fromClause +relation +whereClause +groupByClause +groupByElements +groupByElement +havingClause +orderByClause +orderByElement +limitClause +windowFunctionClause +windowFunction +overClause +partitionByClause +constant +decimalLiteral +numericLiteral +stringLiteral +booleanLiteral +realLiteral +sign +nullLiteral +datetimeLiteral +dateLiteral +timeLiteral +timestampLiteral +datetimeConstantLiteral +intervalLiteral +intervalUnit +expression +predicate +expressions +expressionAtom +comparisonOperator +nullNotnull +functionCall +timestampFunction +timestampFunctionName +getFormatFunction +getFormatType +extractFunction +simpleDateTimePart +complexDateTimePart +datetimePart +highlightFunction +positionFunction +matchQueryAltSyntaxFunction +scalarFunctionName +specificFunction +relevanceFunction +scoreRelevanceFunction +noFieldRelevanceFunction +singleFieldRelevanceFunction +multiFieldRelevanceFunction +altSingleFieldRelevanceFunction +altMultiFieldRelevanceFunction +convertedDataType +caseFuncAlternative +aggregateFunction +percentileApproxFunction +filterClause +aggregationFunctionName +mathematicalFunctionName +trigonometricFunctionName +arithmeticFunctionName +dateTimeFunctionName +textFunctionName +flowControlFunctionName +noFieldRelevanceFunctionName +systemFunctionName +nestedFunctionName +scoreRelevanceFunctionName +singleFieldRelevanceFunctionName +multiFieldRelevanceFunctionName +altSingleFieldRelevanceFunctionName +altMultiFieldRelevanceFunctionName +functionArgs +functionArg +relevanceArg +highlightArg +relevanceArgName +highlightArgName +relevanceFieldAndWeight +relevanceFieldWeight +relevanceField +relevanceQuery +relevanceArgValue +highlightArgValue +alternateMultiMatchArgName +alternateMultiMatchQuery +alternateMultiMatchField +tableName +columnName +allTupleFields +alias +qualifiedName +ident +keywordsCanBeId + + +atn: +[4, 1, 352, 1112, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 1, 0, 3, 0, 230, 8, 0, 1, 0, 3, 0, 233, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 239, 8, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 3, 4, 247, 8, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 257, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 3, 9, 268, 8, 9, 1, 10, 4, 10, 271, 8, 10, 11, 10, 12, 10, 272, 1, 11, 1, 11, 3, 11, 277, 8, 11, 1, 11, 3, 11, 280, 8, 11, 1, 12, 1, 12, 3, 12, 284, 8, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 3, 14, 292, 8, 14, 1, 14, 1, 14, 5, 14, 296, 8, 14, 10, 14, 12, 14, 299, 9, 14, 1, 15, 1, 15, 3, 15, 303, 8, 15, 1, 15, 3, 15, 306, 8, 15, 1, 16, 1, 16, 1, 16, 3, 16, 311, 8, 16, 1, 16, 3, 16, 314, 8, 16, 1, 16, 3, 16, 317, 8, 16, 1, 16, 3, 16, 320, 8, 16, 1, 17, 1, 17, 3, 17, 324, 8, 17, 1, 17, 3, 17, 327, 8, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 333, 8, 17, 1, 17, 1, 17, 3, 17, 337, 8, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 5, 20, 349, 8, 20, 10, 20, 12, 20, 352, 9, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 364, 8, 23, 10, 23, 12, 23, 367, 9, 23, 1, 24, 1, 24, 3, 24, 371, 8, 24, 1, 24, 1, 24, 3, 24, 375, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 381, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 389, 8, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 3, 27, 397, 8, 27, 1, 27, 1, 27, 3, 27, 401, 8, 27, 1, 28, 1, 28, 1, 28, 3, 28, 406, 8, 28, 1, 28, 3, 28, 409, 8, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 418, 8, 29, 10, 29, 12, 29, 421, 9, 29, 1, 30, 1, 30, 3, 30, 425, 8, 30, 1, 30, 1, 30, 3, 30, 429, 8, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 436, 8, 30, 1, 31, 1, 31, 1, 32, 1, 32, 3, 32, 442, 8, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 3, 38, 457, 8, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 3, 39, 466, 8, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 3, 40, 475, 8, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 3, 41, 484, 8, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 498, 8, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 506, 8, 45, 10, 45, 12, 45, 509, 9, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 520, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 529, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 541, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 548, 8, 46, 10, 46, 12, 46, 551, 9, 46, 1, 47, 1, 47, 1, 47, 5, 47, 556, 8, 47, 10, 47, 12, 47, 559, 9, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 569, 8, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 5, 48, 577, 8, 48, 10, 48, 12, 48, 580, 9, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 593, 8, 49, 1, 50, 3, 50, 596, 8, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 615, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 626, 8, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 58, 1, 58, 1, 59, 1, 59, 3, 59, 661, 8, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 668, 8, 60, 10, 60, 12, 60, 671, 9, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 695, 8, 63, 1, 64, 1, 64, 1, 64, 4, 64, 700, 8, 64, 11, 64, 12, 64, 701, 1, 64, 1, 64, 3, 64, 706, 8, 64, 1, 64, 1, 64, 1, 64, 1, 64, 4, 64, 712, 8, 64, 11, 64, 12, 64, 713, 1, 64, 1, 64, 3, 64, 718, 8, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 3, 64, 729, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 736, 8, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 743, 8, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 5, 67, 752, 8, 67, 10, 67, 12, 67, 755, 9, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 5, 68, 766, 8, 68, 10, 68, 12, 68, 769, 9, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 5, 69, 779, 8, 69, 10, 69, 12, 69, 782, 9, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 5, 69, 789, 8, 69, 10, 69, 12, 69, 792, 9, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 5, 69, 803, 8, 69, 10, 69, 12, 69, 806, 9, 69, 1, 69, 1, 69, 3, 69, 810, 8, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 5, 70, 819, 8, 70, 10, 70, 12, 70, 822, 9, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 5, 71, 833, 8, 71, 10, 71, 12, 71, 836, 9, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 3, 72, 850, 8, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 3, 74, 873, 8, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 3, 75, 882, 8, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 921, 8, 78, 1, 79, 1, 79, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 3, 81, 986, 8, 81, 1, 82, 1, 82, 1, 83, 1, 83, 1, 84, 1, 84, 1, 85, 1, 85, 1, 86, 1, 86, 1, 87, 1, 87, 1, 88, 1, 88, 1, 89, 1, 89, 1, 90, 1, 90, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 5, 92, 1011, 8, 92, 10, 92, 12, 92, 1014, 9, 92, 3, 92, 1016, 8, 92, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 3, 94, 1028, 8, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 3, 98, 1046, 8, 98, 1, 99, 1, 99, 1, 100, 1, 100, 3, 100, 1052, 8, 100, 1, 101, 1, 101, 1, 102, 1, 102, 3, 102, 1058, 8, 102, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 3, 104, 1065, 8, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 3, 106, 1081, 8, 106, 1, 107, 1, 107, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 5, 111, 1096, 8, 111, 10, 111, 12, 111, 1099, 9, 111, 1, 112, 3, 112, 1102, 8, 112, 1, 112, 1, 112, 1, 112, 1, 112, 3, 112, 1108, 8, 112, 1, 113, 1, 113, 1, 113, 1, 272, 3, 90, 92, 96, 114, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 0, 33, 2, 0, 314, 314, 349, 349, 2, 0, 5, 5, 20, 20, 2, 0, 8, 8, 18, 18, 2, 0, 26, 26, 36, 36, 1, 0, 211, 213, 2, 0, 335, 337, 344, 344, 2, 0, 343, 343, 350, 350, 2, 0, 24, 24, 59, 59, 1, 0, 315, 316, 2, 0, 128, 128, 206, 206, 2, 0, 193, 193, 207, 207, 2, 0, 197, 197, 208, 208, 3, 0, 125, 127, 153, 154, 203, 205, 1, 0, 83, 102, 1, 0, 312, 314, 1, 0, 261, 262, 4, 0, 16, 16, 128, 128, 193, 193, 197, 197, 1, 0, 83, 91, 1, 0, 92, 102, 1, 0, 248, 249, 1, 0, 65, 76, 7, 0, 105, 105, 109, 111, 119, 121, 137, 137, 174, 174, 184, 185, 192, 192, 6, 0, 106, 106, 138, 138, 163, 163, 165, 165, 190, 190, 318, 318, 12, 0, 37, 37, 54, 54, 77, 78, 108, 108, 115, 116, 151, 151, 155, 155, 159, 160, 176, 176, 179, 180, 202, 202, 270, 271, 2, 0, 147, 149, 167, 167, 1, 0, 254, 256, 5, 0, 41, 41, 232, 234, 237, 239, 268, 269, 311, 311, 2, 0, 235, 236, 243, 245, 2, 0, 232, 233, 238, 239, 1, 0, 243, 244, 1, 0, 274, 307, 1, 0, 309, 310, 7, 0, 26, 26, 36, 36, 65, 69, 80, 80, 206, 208, 220, 220, 306, 306, 1220, 0, 229, 1, 0, 0, 0, 2, 238, 1, 0, 0, 0, 4, 240, 1, 0, 0, 0, 6, 242, 1, 0, 0, 0, 8, 246, 1, 0, 0, 0, 10, 248, 1, 0, 0, 0, 12, 252, 1, 0, 0, 0, 14, 258, 1, 0, 0, 0, 16, 262, 1, 0, 0, 0, 18, 267, 1, 0, 0, 0, 20, 270, 1, 0, 0, 0, 22, 274, 1, 0, 0, 0, 24, 281, 1, 0, 0, 0, 26, 287, 1, 0, 0, 0, 28, 291, 1, 0, 0, 0, 30, 300, 1, 0, 0, 0, 32, 307, 1, 0, 0, 0, 34, 336, 1, 0, 0, 0, 36, 338, 1, 0, 0, 0, 38, 341, 1, 0, 0, 0, 40, 345, 1, 0, 0, 0, 42, 353, 1, 0, 0, 0, 44, 355, 1, 0, 0, 0, 46, 358, 1, 0, 0, 0, 48, 368, 1, 0, 0, 0, 50, 388, 1, 0, 0, 0, 52, 390, 1, 0, 0, 0, 54, 400, 1, 0, 0, 0, 56, 402, 1, 0, 0, 0, 58, 412, 1, 0, 0, 0, 60, 435, 1, 0, 0, 0, 62, 437, 1, 0, 0, 0, 64, 441, 1, 0, 0, 0, 66, 443, 1, 0, 0, 0, 68, 445, 1, 0, 0, 0, 70, 447, 1, 0, 0, 0, 72, 449, 1, 0, 0, 0, 74, 451, 1, 0, 0, 0, 76, 456, 1, 0, 0, 0, 78, 465, 1, 0, 0, 0, 80, 474, 1, 0, 0, 0, 82, 483, 1, 0, 0, 0, 84, 485, 1, 0, 0, 0, 86, 487, 1, 0, 0, 0, 88, 491, 1, 0, 0, 0, 90, 497, 1, 0, 0, 0, 92, 510, 1, 0, 0, 0, 94, 552, 1, 0, 0, 0, 96, 568, 1, 0, 0, 0, 98, 592, 1, 0, 0, 0, 100, 595, 1, 0, 0, 0, 102, 625, 1, 0, 0, 0, 104, 627, 1, 0, 0, 0, 106, 636, 1, 0, 0, 0, 108, 638, 1, 0, 0, 0, 110, 645, 1, 0, 0, 0, 112, 647, 1, 0, 0, 0, 114, 654, 1, 0, 0, 0, 116, 656, 1, 0, 0, 0, 118, 660, 1, 0, 0, 0, 120, 662, 1, 0, 0, 0, 122, 674, 1, 0, 0, 0, 124, 681, 1, 0, 0, 0, 126, 694, 1, 0, 0, 0, 128, 728, 1, 0, 0, 0, 130, 735, 1, 0, 0, 0, 132, 737, 1, 0, 0, 0, 134, 746, 1, 0, 0, 0, 136, 758, 1, 0, 0, 0, 138, 809, 1, 0, 0, 0, 140, 811, 1, 0, 0, 0, 142, 825, 1, 0, 0, 0, 144, 849, 1, 0, 0, 0, 146, 851, 1, 0, 0, 0, 148, 872, 1, 0, 0, 0, 150, 874, 1, 0, 0, 0, 152, 885, 1, 0, 0, 0, 154, 891, 1, 0, 0, 0, 156, 920, 1, 0, 0, 0, 158, 922, 1, 0, 0, 0, 160, 924, 1, 0, 0, 0, 162, 985, 1, 0, 0, 0, 164, 987, 1, 0, 0, 0, 166, 989, 1, 0, 0, 0, 168, 991, 1, 0, 0, 0, 170, 993, 1, 0, 0, 0, 172, 995, 1, 0, 0, 0, 174, 997, 1, 0, 0, 0, 176, 999, 1, 0, 0, 0, 178, 1001, 1, 0, 0, 0, 180, 1003, 1, 0, 0, 0, 182, 1005, 1, 0, 0, 0, 184, 1015, 1, 0, 0, 0, 186, 1017, 1, 0, 0, 0, 188, 1027, 1, 0, 0, 0, 190, 1029, 1, 0, 0, 0, 192, 1033, 1, 0, 0, 0, 194, 1035, 1, 0, 0, 0, 196, 1045, 1, 0, 0, 0, 198, 1047, 1, 0, 0, 0, 200, 1051, 1, 0, 0, 0, 202, 1053, 1, 0, 0, 0, 204, 1057, 1, 0, 0, 0, 206, 1059, 1, 0, 0, 0, 208, 1064, 1, 0, 0, 0, 210, 1066, 1, 0, 0, 0, 212, 1080, 1, 0, 0, 0, 214, 1082, 1, 0, 0, 0, 216, 1084, 1, 0, 0, 0, 218, 1086, 1, 0, 0, 0, 220, 1090, 1, 0, 0, 0, 222, 1092, 1, 0, 0, 0, 224, 1107, 1, 0, 0, 0, 226, 1109, 1, 0, 0, 0, 228, 230, 3, 2, 1, 0, 229, 228, 1, 0, 0, 0, 229, 230, 1, 0, 0, 0, 230, 232, 1, 0, 0, 0, 231, 233, 5, 333, 0, 0, 232, 231, 1, 0, 0, 0, 232, 233, 1, 0, 0, 0, 233, 234, 1, 0, 0, 0, 234, 235, 5, 0, 0, 1, 235, 1, 1, 0, 0, 0, 236, 239, 3, 4, 2, 0, 237, 239, 3, 8, 4, 0, 238, 236, 1, 0, 0, 0, 238, 237, 1, 0, 0, 0, 239, 3, 1, 0, 0, 0, 240, 241, 3, 6, 3, 0, 241, 5, 1, 0, 0, 0, 242, 243, 3, 22, 11, 0, 243, 7, 1, 0, 0, 0, 244, 247, 3, 10, 5, 0, 245, 247, 3, 12, 6, 0, 246, 244, 1, 0, 0, 0, 246, 245, 1, 0, 0, 0, 247, 9, 1, 0, 0, 0, 248, 249, 5, 56, 0, 0, 249, 250, 5, 103, 0, 0, 250, 251, 3, 16, 8, 0, 251, 11, 1, 0, 0, 0, 252, 253, 5, 19, 0, 0, 253, 254, 5, 103, 0, 0, 254, 256, 3, 16, 8, 0, 255, 257, 3, 14, 7, 0, 256, 255, 1, 0, 0, 0, 256, 257, 1, 0, 0, 0, 257, 13, 1, 0, 0, 0, 258, 259, 5, 15, 0, 0, 259, 260, 5, 38, 0, 0, 260, 261, 3, 18, 9, 0, 261, 15, 1, 0, 0, 0, 262, 263, 5, 38, 0, 0, 263, 264, 3, 18, 9, 0, 264, 17, 1, 0, 0, 0, 265, 268, 3, 20, 10, 0, 266, 268, 3, 66, 33, 0, 267, 265, 1, 0, 0, 0, 267, 266, 1, 0, 0, 0, 268, 19, 1, 0, 0, 0, 269, 271, 7, 0, 0, 0, 270, 269, 1, 0, 0, 0, 271, 272, 1, 0, 0, 0, 272, 273, 1, 0, 0, 0, 272, 270, 1, 0, 0, 0, 273, 21, 1, 0, 0, 0, 274, 276, 3, 24, 12, 0, 275, 277, 3, 32, 16, 0, 276, 275, 1, 0, 0, 0, 276, 277, 1, 0, 0, 0, 277, 279, 1, 0, 0, 0, 278, 280, 3, 50, 25, 0, 279, 278, 1, 0, 0, 0, 279, 280, 1, 0, 0, 0, 280, 23, 1, 0, 0, 0, 281, 283, 5, 55, 0, 0, 282, 284, 3, 26, 13, 0, 283, 282, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 286, 3, 28, 14, 0, 286, 25, 1, 0, 0, 0, 287, 288, 7, 1, 0, 0, 288, 27, 1, 0, 0, 0, 289, 292, 5, 312, 0, 0, 290, 292, 3, 30, 15, 0, 291, 289, 1, 0, 0, 0, 291, 290, 1, 0, 0, 0, 292, 297, 1, 0, 0, 0, 293, 294, 5, 332, 0, 0, 294, 296, 3, 30, 15, 0, 295, 293, 1, 0, 0, 0, 296, 299, 1, 0, 0, 0, 297, 295, 1, 0, 0, 0, 297, 298, 1, 0, 0, 0, 298, 29, 1, 0, 0, 0, 299, 297, 1, 0, 0, 0, 300, 305, 3, 90, 45, 0, 301, 303, 5, 7, 0, 0, 302, 301, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 304, 1, 0, 0, 0, 304, 306, 3, 220, 110, 0, 305, 302, 1, 0, 0, 0, 305, 306, 1, 0, 0, 0, 306, 31, 1, 0, 0, 0, 307, 308, 5, 27, 0, 0, 308, 310, 3, 34, 17, 0, 309, 311, 3, 36, 18, 0, 310, 309, 1, 0, 0, 0, 310, 311, 1, 0, 0, 0, 311, 313, 1, 0, 0, 0, 312, 314, 3, 38, 19, 0, 313, 312, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, 314, 316, 1, 0, 0, 0, 315, 317, 3, 44, 22, 0, 316, 315, 1, 0, 0, 0, 316, 317, 1, 0, 0, 0, 317, 319, 1, 0, 0, 0, 318, 320, 3, 46, 23, 0, 319, 318, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 33, 1, 0, 0, 0, 321, 326, 3, 214, 107, 0, 322, 324, 5, 7, 0, 0, 323, 322, 1, 0, 0, 0, 323, 324, 1, 0, 0, 0, 324, 325, 1, 0, 0, 0, 325, 327, 3, 220, 110, 0, 326, 323, 1, 0, 0, 0, 326, 327, 1, 0, 0, 0, 327, 337, 1, 0, 0, 0, 328, 329, 5, 328, 0, 0, 329, 330, 3, 22, 11, 0, 330, 332, 5, 329, 0, 0, 331, 333, 5, 7, 0, 0, 332, 331, 1, 0, 0, 0, 332, 333, 1, 0, 0, 0, 333, 334, 1, 0, 0, 0, 334, 335, 3, 220, 110, 0, 335, 337, 1, 0, 0, 0, 336, 321, 1, 0, 0, 0, 336, 328, 1, 0, 0, 0, 337, 35, 1, 0, 0, 0, 338, 339, 5, 63, 0, 0, 339, 340, 3, 90, 45, 0, 340, 37, 1, 0, 0, 0, 341, 342, 5, 28, 0, 0, 342, 343, 5, 11, 0, 0, 343, 344, 3, 40, 20, 0, 344, 39, 1, 0, 0, 0, 345, 350, 3, 42, 21, 0, 346, 347, 5, 332, 0, 0, 347, 349, 3, 42, 21, 0, 348, 346, 1, 0, 0, 0, 349, 352, 1, 0, 0, 0, 350, 348, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 41, 1, 0, 0, 0, 352, 350, 1, 0, 0, 0, 353, 354, 3, 90, 45, 0, 354, 43, 1, 0, 0, 0, 355, 356, 5, 29, 0, 0, 356, 357, 3, 90, 45, 0, 357, 45, 1, 0, 0, 0, 358, 359, 5, 49, 0, 0, 359, 360, 5, 11, 0, 0, 360, 365, 3, 48, 24, 0, 361, 362, 5, 332, 0, 0, 362, 364, 3, 48, 24, 0, 363, 361, 1, 0, 0, 0, 364, 367, 1, 0, 0, 0, 365, 363, 1, 0, 0, 0, 365, 366, 1, 0, 0, 0, 366, 47, 1, 0, 0, 0, 367, 365, 1, 0, 0, 0, 368, 370, 3, 90, 45, 0, 369, 371, 7, 2, 0, 0, 370, 369, 1, 0, 0, 0, 370, 371, 1, 0, 0, 0, 371, 374, 1, 0, 0, 0, 372, 373, 5, 46, 0, 0, 373, 375, 7, 3, 0, 0, 374, 372, 1, 0, 0, 0, 374, 375, 1, 0, 0, 0, 375, 49, 1, 0, 0, 0, 376, 380, 5, 39, 0, 0, 377, 378, 3, 62, 31, 0, 378, 379, 5, 332, 0, 0, 379, 381, 1, 0, 0, 0, 380, 377, 1, 0, 0, 0, 380, 381, 1, 0, 0, 0, 381, 382, 1, 0, 0, 0, 382, 389, 3, 62, 31, 0, 383, 384, 5, 39, 0, 0, 384, 385, 3, 62, 31, 0, 385, 386, 5, 81, 0, 0, 386, 387, 3, 62, 31, 0, 387, 389, 1, 0, 0, 0, 388, 376, 1, 0, 0, 0, 388, 383, 1, 0, 0, 0, 389, 51, 1, 0, 0, 0, 390, 391, 3, 54, 27, 0, 391, 392, 3, 56, 28, 0, 392, 53, 1, 0, 0, 0, 393, 394, 7, 4, 0, 0, 394, 396, 5, 328, 0, 0, 395, 397, 3, 184, 92, 0, 396, 395, 1, 0, 0, 0, 396, 397, 1, 0, 0, 0, 397, 398, 1, 0, 0, 0, 398, 401, 5, 329, 0, 0, 399, 401, 3, 148, 74, 0, 400, 393, 1, 0, 0, 0, 400, 399, 1, 0, 0, 0, 401, 55, 1, 0, 0, 0, 402, 403, 5, 51, 0, 0, 403, 405, 5, 328, 0, 0, 404, 406, 3, 58, 29, 0, 405, 404, 1, 0, 0, 0, 405, 406, 1, 0, 0, 0, 406, 408, 1, 0, 0, 0, 407, 409, 3, 46, 23, 0, 408, 407, 1, 0, 0, 0, 408, 409, 1, 0, 0, 0, 409, 410, 1, 0, 0, 0, 410, 411, 5, 329, 0, 0, 411, 57, 1, 0, 0, 0, 412, 413, 5, 52, 0, 0, 413, 414, 5, 11, 0, 0, 414, 419, 3, 90, 45, 0, 415, 416, 5, 332, 0, 0, 416, 418, 3, 90, 45, 0, 417, 415, 1, 0, 0, 0, 418, 421, 1, 0, 0, 0, 419, 417, 1, 0, 0, 0, 419, 420, 1, 0, 0, 0, 420, 59, 1, 0, 0, 0, 421, 419, 1, 0, 0, 0, 422, 436, 3, 66, 33, 0, 423, 425, 3, 72, 36, 0, 424, 423, 1, 0, 0, 0, 424, 425, 1, 0, 0, 0, 425, 426, 1, 0, 0, 0, 426, 436, 3, 62, 31, 0, 427, 429, 3, 72, 36, 0, 428, 427, 1, 0, 0, 0, 428, 429, 1, 0, 0, 0, 429, 430, 1, 0, 0, 0, 430, 436, 3, 70, 35, 0, 431, 436, 3, 68, 34, 0, 432, 436, 3, 76, 38, 0, 433, 436, 3, 86, 43, 0, 434, 436, 3, 74, 37, 0, 435, 422, 1, 0, 0, 0, 435, 424, 1, 0, 0, 0, 435, 428, 1, 0, 0, 0, 435, 431, 1, 0, 0, 0, 435, 432, 1, 0, 0, 0, 435, 433, 1, 0, 0, 0, 435, 434, 1, 0, 0, 0, 436, 61, 1, 0, 0, 0, 437, 438, 7, 5, 0, 0, 438, 63, 1, 0, 0, 0, 439, 442, 3, 62, 31, 0, 440, 442, 3, 70, 35, 0, 441, 439, 1, 0, 0, 0, 441, 440, 1, 0, 0, 0, 442, 65, 1, 0, 0, 0, 443, 444, 7, 6, 0, 0, 444, 67, 1, 0, 0, 0, 445, 446, 7, 7, 0, 0, 446, 69, 1, 0, 0, 0, 447, 448, 5, 346, 0, 0, 448, 71, 1, 0, 0, 0, 449, 450, 7, 8, 0, 0, 450, 73, 1, 0, 0, 0, 451, 452, 5, 45, 0, 0, 452, 75, 1, 0, 0, 0, 453, 457, 3, 78, 39, 0, 454, 457, 3, 80, 40, 0, 455, 457, 3, 82, 41, 0, 456, 453, 1, 0, 0, 0, 456, 454, 1, 0, 0, 0, 456, 455, 1, 0, 0, 0, 457, 77, 1, 0, 0, 0, 458, 459, 5, 128, 0, 0, 459, 466, 3, 66, 33, 0, 460, 461, 5, 209, 0, 0, 461, 462, 7, 9, 0, 0, 462, 463, 3, 66, 33, 0, 463, 464, 5, 210, 0, 0, 464, 466, 1, 0, 0, 0, 465, 458, 1, 0, 0, 0, 465, 460, 1, 0, 0, 0, 466, 79, 1, 0, 0, 0, 467, 468, 5, 193, 0, 0, 468, 475, 3, 66, 33, 0, 469, 470, 5, 209, 0, 0, 470, 471, 7, 10, 0, 0, 471, 472, 3, 66, 33, 0, 472, 473, 5, 210, 0, 0, 473, 475, 1, 0, 0, 0, 474, 467, 1, 0, 0, 0, 474, 469, 1, 0, 0, 0, 475, 81, 1, 0, 0, 0, 476, 477, 5, 197, 0, 0, 477, 484, 3, 66, 33, 0, 478, 479, 5, 209, 0, 0, 479, 480, 7, 11, 0, 0, 480, 481, 3, 66, 33, 0, 481, 482, 5, 210, 0, 0, 482, 484, 1, 0, 0, 0, 483, 476, 1, 0, 0, 0, 483, 478, 1, 0, 0, 0, 484, 83, 1, 0, 0, 0, 485, 486, 7, 12, 0, 0, 486, 85, 1, 0, 0, 0, 487, 488, 5, 82, 0, 0, 488, 489, 3, 90, 45, 0, 489, 490, 3, 88, 44, 0, 490, 87, 1, 0, 0, 0, 491, 492, 7, 13, 0, 0, 492, 89, 1, 0, 0, 0, 493, 494, 6, 45, -1, 0, 494, 495, 5, 44, 0, 0, 495, 498, 3, 90, 45, 4, 496, 498, 3, 92, 46, 0, 497, 493, 1, 0, 0, 0, 497, 496, 1, 0, 0, 0, 498, 507, 1, 0, 0, 0, 499, 500, 10, 3, 0, 0, 500, 501, 5, 6, 0, 0, 501, 506, 3, 90, 45, 4, 502, 503, 10, 2, 0, 0, 503, 504, 5, 48, 0, 0, 504, 506, 3, 90, 45, 3, 505, 499, 1, 0, 0, 0, 505, 502, 1, 0, 0, 0, 506, 509, 1, 0, 0, 0, 507, 505, 1, 0, 0, 0, 507, 508, 1, 0, 0, 0, 508, 91, 1, 0, 0, 0, 509, 507, 1, 0, 0, 0, 510, 511, 6, 46, -1, 0, 511, 512, 3, 96, 48, 0, 512, 549, 1, 0, 0, 0, 513, 514, 10, 6, 0, 0, 514, 515, 3, 98, 49, 0, 515, 516, 3, 92, 46, 7, 516, 548, 1, 0, 0, 0, 517, 519, 10, 4, 0, 0, 518, 520, 5, 44, 0, 0, 519, 518, 1, 0, 0, 0, 519, 520, 1, 0, 0, 0, 520, 521, 1, 0, 0, 0, 521, 522, 5, 10, 0, 0, 522, 523, 3, 92, 46, 0, 523, 524, 5, 6, 0, 0, 524, 525, 3, 92, 46, 5, 525, 548, 1, 0, 0, 0, 526, 528, 10, 3, 0, 0, 527, 529, 5, 44, 0, 0, 528, 527, 1, 0, 0, 0, 528, 529, 1, 0, 0, 0, 529, 530, 1, 0, 0, 0, 530, 531, 5, 38, 0, 0, 531, 548, 3, 92, 46, 4, 532, 533, 10, 2, 0, 0, 533, 534, 5, 53, 0, 0, 534, 548, 3, 92, 46, 3, 535, 536, 10, 5, 0, 0, 536, 537, 5, 34, 0, 0, 537, 548, 3, 100, 50, 0, 538, 540, 10, 1, 0, 0, 539, 541, 5, 44, 0, 0, 540, 539, 1, 0, 0, 0, 540, 541, 1, 0, 0, 0, 541, 542, 1, 0, 0, 0, 542, 543, 5, 30, 0, 0, 543, 544, 5, 328, 0, 0, 544, 545, 3, 94, 47, 0, 545, 546, 5, 329, 0, 0, 546, 548, 1, 0, 0, 0, 547, 513, 1, 0, 0, 0, 547, 517, 1, 0, 0, 0, 547, 526, 1, 0, 0, 0, 547, 532, 1, 0, 0, 0, 547, 535, 1, 0, 0, 0, 547, 538, 1, 0, 0, 0, 548, 551, 1, 0, 0, 0, 549, 547, 1, 0, 0, 0, 549, 550, 1, 0, 0, 0, 550, 93, 1, 0, 0, 0, 551, 549, 1, 0, 0, 0, 552, 557, 3, 90, 45, 0, 553, 554, 5, 332, 0, 0, 554, 556, 3, 90, 45, 0, 555, 553, 1, 0, 0, 0, 556, 559, 1, 0, 0, 0, 557, 555, 1, 0, 0, 0, 557, 558, 1, 0, 0, 0, 558, 95, 1, 0, 0, 0, 559, 557, 1, 0, 0, 0, 560, 561, 6, 48, -1, 0, 561, 569, 3, 60, 30, 0, 562, 569, 3, 216, 108, 0, 563, 569, 3, 102, 51, 0, 564, 565, 5, 328, 0, 0, 565, 566, 3, 90, 45, 0, 566, 567, 5, 329, 0, 0, 567, 569, 1, 0, 0, 0, 568, 560, 1, 0, 0, 0, 568, 562, 1, 0, 0, 0, 568, 563, 1, 0, 0, 0, 568, 564, 1, 0, 0, 0, 569, 578, 1, 0, 0, 0, 570, 571, 10, 2, 0, 0, 571, 572, 7, 14, 0, 0, 572, 577, 3, 96, 48, 3, 573, 574, 10, 1, 0, 0, 574, 575, 7, 8, 0, 0, 575, 577, 3, 96, 48, 2, 576, 570, 1, 0, 0, 0, 576, 573, 1, 0, 0, 0, 577, 580, 1, 0, 0, 0, 578, 576, 1, 0, 0, 0, 578, 579, 1, 0, 0, 0, 579, 97, 1, 0, 0, 0, 580, 578, 1, 0, 0, 0, 581, 593, 5, 319, 0, 0, 582, 593, 5, 320, 0, 0, 583, 593, 5, 321, 0, 0, 584, 585, 5, 321, 0, 0, 585, 593, 5, 319, 0, 0, 586, 587, 5, 320, 0, 0, 587, 593, 5, 319, 0, 0, 588, 589, 5, 321, 0, 0, 589, 593, 5, 320, 0, 0, 590, 591, 5, 322, 0, 0, 591, 593, 5, 319, 0, 0, 592, 581, 1, 0, 0, 0, 592, 582, 1, 0, 0, 0, 592, 583, 1, 0, 0, 0, 592, 584, 1, 0, 0, 0, 592, 586, 1, 0, 0, 0, 592, 588, 1, 0, 0, 0, 592, 590, 1, 0, 0, 0, 593, 99, 1, 0, 0, 0, 594, 596, 5, 44, 0, 0, 595, 594, 1, 0, 0, 0, 595, 596, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 597, 598, 5, 45, 0, 0, 598, 101, 1, 0, 0, 0, 599, 600, 3, 172, 86, 0, 600, 601, 5, 328, 0, 0, 601, 602, 3, 218, 109, 0, 602, 603, 5, 329, 0, 0, 603, 626, 1, 0, 0, 0, 604, 605, 3, 126, 63, 0, 605, 606, 5, 328, 0, 0, 606, 607, 3, 184, 92, 0, 607, 608, 5, 329, 0, 0, 608, 626, 1, 0, 0, 0, 609, 626, 3, 128, 64, 0, 610, 626, 3, 52, 26, 0, 611, 626, 3, 148, 74, 0, 612, 614, 3, 148, 74, 0, 613, 615, 3, 46, 23, 0, 614, 613, 1, 0, 0, 0, 614, 615, 1, 0, 0, 0, 615, 616, 1, 0, 0, 0, 616, 617, 3, 152, 76, 0, 617, 626, 1, 0, 0, 0, 618, 626, 3, 132, 66, 0, 619, 626, 3, 130, 65, 0, 620, 626, 3, 120, 60, 0, 621, 626, 3, 122, 61, 0, 622, 626, 3, 112, 56, 0, 623, 626, 3, 108, 54, 0, 624, 626, 3, 104, 52, 0, 625, 599, 1, 0, 0, 0, 625, 604, 1, 0, 0, 0, 625, 609, 1, 0, 0, 0, 625, 610, 1, 0, 0, 0, 625, 611, 1, 0, 0, 0, 625, 612, 1, 0, 0, 0, 625, 618, 1, 0, 0, 0, 625, 619, 1, 0, 0, 0, 625, 620, 1, 0, 0, 0, 625, 621, 1, 0, 0, 0, 625, 622, 1, 0, 0, 0, 625, 623, 1, 0, 0, 0, 625, 624, 1, 0, 0, 0, 626, 103, 1, 0, 0, 0, 627, 628, 3, 106, 53, 0, 628, 629, 5, 328, 0, 0, 629, 630, 3, 114, 57, 0, 630, 631, 5, 332, 0, 0, 631, 632, 3, 186, 93, 0, 632, 633, 5, 332, 0, 0, 633, 634, 3, 186, 93, 0, 634, 635, 5, 329, 0, 0, 635, 105, 1, 0, 0, 0, 636, 637, 7, 15, 0, 0, 637, 107, 1, 0, 0, 0, 638, 639, 5, 146, 0, 0, 639, 640, 5, 328, 0, 0, 640, 641, 3, 110, 55, 0, 641, 642, 5, 332, 0, 0, 642, 643, 3, 186, 93, 0, 643, 644, 5, 329, 0, 0, 644, 109, 1, 0, 0, 0, 645, 646, 7, 16, 0, 0, 646, 111, 1, 0, 0, 0, 647, 648, 5, 142, 0, 0, 648, 649, 5, 328, 0, 0, 649, 650, 3, 118, 59, 0, 650, 651, 5, 27, 0, 0, 651, 652, 3, 186, 93, 0, 652, 653, 5, 329, 0, 0, 653, 113, 1, 0, 0, 0, 654, 655, 7, 17, 0, 0, 655, 115, 1, 0, 0, 0, 656, 657, 7, 18, 0, 0, 657, 117, 1, 0, 0, 0, 658, 661, 3, 114, 57, 0, 659, 661, 3, 116, 58, 0, 660, 658, 1, 0, 0, 0, 660, 659, 1, 0, 0, 0, 661, 119, 1, 0, 0, 0, 662, 663, 5, 308, 0, 0, 663, 664, 5, 328, 0, 0, 664, 669, 3, 200, 100, 0, 665, 666, 5, 332, 0, 0, 666, 668, 3, 190, 95, 0, 667, 665, 1, 0, 0, 0, 668, 671, 1, 0, 0, 0, 669, 667, 1, 0, 0, 0, 669, 670, 1, 0, 0, 0, 670, 672, 1, 0, 0, 0, 671, 669, 1, 0, 0, 0, 672, 673, 5, 329, 0, 0, 673, 121, 1, 0, 0, 0, 674, 675, 5, 171, 0, 0, 675, 676, 5, 328, 0, 0, 676, 677, 3, 186, 93, 0, 677, 678, 5, 30, 0, 0, 678, 679, 3, 186, 93, 0, 679, 680, 5, 329, 0, 0, 680, 123, 1, 0, 0, 0, 681, 682, 3, 200, 100, 0, 682, 683, 5, 319, 0, 0, 683, 684, 5, 239, 0, 0, 684, 685, 5, 328, 0, 0, 685, 686, 3, 202, 101, 0, 686, 687, 5, 329, 0, 0, 687, 125, 1, 0, 0, 0, 688, 695, 3, 156, 78, 0, 689, 695, 3, 162, 81, 0, 690, 695, 3, 164, 82, 0, 691, 695, 3, 166, 83, 0, 692, 695, 3, 170, 85, 0, 693, 695, 3, 172, 86, 0, 694, 688, 1, 0, 0, 0, 694, 689, 1, 0, 0, 0, 694, 690, 1, 0, 0, 0, 694, 691, 1, 0, 0, 0, 694, 692, 1, 0, 0, 0, 694, 693, 1, 0, 0, 0, 695, 127, 1, 0, 0, 0, 696, 697, 5, 12, 0, 0, 697, 699, 3, 90, 45, 0, 698, 700, 3, 146, 73, 0, 699, 698, 1, 0, 0, 0, 700, 701, 1, 0, 0, 0, 701, 699, 1, 0, 0, 0, 701, 702, 1, 0, 0, 0, 702, 705, 1, 0, 0, 0, 703, 704, 5, 22, 0, 0, 704, 706, 3, 186, 93, 0, 705, 703, 1, 0, 0, 0, 705, 706, 1, 0, 0, 0, 706, 707, 1, 0, 0, 0, 707, 708, 5, 79, 0, 0, 708, 729, 1, 0, 0, 0, 709, 711, 5, 12, 0, 0, 710, 712, 3, 146, 73, 0, 711, 710, 1, 0, 0, 0, 712, 713, 1, 0, 0, 0, 713, 711, 1, 0, 0, 0, 713, 714, 1, 0, 0, 0, 714, 717, 1, 0, 0, 0, 715, 716, 5, 22, 0, 0, 716, 718, 3, 186, 93, 0, 717, 715, 1, 0, 0, 0, 717, 718, 1, 0, 0, 0, 718, 719, 1, 0, 0, 0, 719, 720, 5, 79, 0, 0, 720, 729, 1, 0, 0, 0, 721, 722, 5, 13, 0, 0, 722, 723, 5, 328, 0, 0, 723, 724, 3, 90, 45, 0, 724, 725, 5, 7, 0, 0, 725, 726, 3, 144, 72, 0, 726, 727, 5, 329, 0, 0, 727, 729, 1, 0, 0, 0, 728, 696, 1, 0, 0, 0, 728, 709, 1, 0, 0, 0, 728, 721, 1, 0, 0, 0, 729, 129, 1, 0, 0, 0, 730, 736, 3, 134, 67, 0, 731, 736, 3, 136, 68, 0, 732, 736, 3, 138, 69, 0, 733, 736, 3, 140, 70, 0, 734, 736, 3, 142, 71, 0, 735, 730, 1, 0, 0, 0, 735, 731, 1, 0, 0, 0, 735, 732, 1, 0, 0, 0, 735, 733, 1, 0, 0, 0, 735, 734, 1, 0, 0, 0, 736, 131, 1, 0, 0, 0, 737, 738, 3, 174, 87, 0, 738, 739, 5, 328, 0, 0, 739, 742, 3, 130, 65, 0, 740, 741, 5, 332, 0, 0, 741, 743, 3, 198, 99, 0, 742, 740, 1, 0, 0, 0, 742, 743, 1, 0, 0, 0, 743, 744, 1, 0, 0, 0, 744, 745, 5, 329, 0, 0, 745, 133, 1, 0, 0, 0, 746, 747, 3, 168, 84, 0, 747, 748, 5, 328, 0, 0, 748, 753, 3, 202, 101, 0, 749, 750, 5, 332, 0, 0, 750, 752, 3, 188, 94, 0, 751, 749, 1, 0, 0, 0, 752, 755, 1, 0, 0, 0, 753, 751, 1, 0, 0, 0, 753, 754, 1, 0, 0, 0, 754, 756, 1, 0, 0, 0, 755, 753, 1, 0, 0, 0, 756, 757, 5, 329, 0, 0, 757, 135, 1, 0, 0, 0, 758, 759, 3, 176, 88, 0, 759, 760, 5, 328, 0, 0, 760, 761, 3, 200, 100, 0, 761, 762, 5, 332, 0, 0, 762, 767, 3, 202, 101, 0, 763, 764, 5, 332, 0, 0, 764, 766, 3, 188, 94, 0, 765, 763, 1, 0, 0, 0, 766, 769, 1, 0, 0, 0, 767, 765, 1, 0, 0, 0, 767, 768, 1, 0, 0, 0, 768, 770, 1, 0, 0, 0, 769, 767, 1, 0, 0, 0, 770, 771, 5, 329, 0, 0, 771, 137, 1, 0, 0, 0, 772, 773, 3, 178, 89, 0, 773, 774, 5, 328, 0, 0, 774, 775, 5, 330, 0, 0, 775, 780, 3, 196, 98, 0, 776, 777, 5, 332, 0, 0, 777, 779, 3, 196, 98, 0, 778, 776, 1, 0, 0, 0, 779, 782, 1, 0, 0, 0, 780, 778, 1, 0, 0, 0, 780, 781, 1, 0, 0, 0, 781, 783, 1, 0, 0, 0, 782, 780, 1, 0, 0, 0, 783, 784, 5, 331, 0, 0, 784, 785, 5, 332, 0, 0, 785, 790, 3, 202, 101, 0, 786, 787, 5, 332, 0, 0, 787, 789, 3, 188, 94, 0, 788, 786, 1, 0, 0, 0, 789, 792, 1, 0, 0, 0, 790, 788, 1, 0, 0, 0, 790, 791, 1, 0, 0, 0, 791, 793, 1, 0, 0, 0, 792, 790, 1, 0, 0, 0, 793, 794, 5, 329, 0, 0, 794, 810, 1, 0, 0, 0, 795, 796, 3, 178, 89, 0, 796, 797, 5, 328, 0, 0, 797, 798, 3, 210, 105, 0, 798, 799, 5, 332, 0, 0, 799, 804, 3, 212, 106, 0, 800, 801, 5, 332, 0, 0, 801, 803, 3, 188, 94, 0, 802, 800, 1, 0, 0, 0, 803, 806, 1, 0, 0, 0, 804, 802, 1, 0, 0, 0, 804, 805, 1, 0, 0, 0, 805, 807, 1, 0, 0, 0, 806, 804, 1, 0, 0, 0, 807, 808, 5, 329, 0, 0, 808, 810, 1, 0, 0, 0, 809, 772, 1, 0, 0, 0, 809, 795, 1, 0, 0, 0, 810, 139, 1, 0, 0, 0, 811, 812, 3, 200, 100, 0, 812, 813, 5, 319, 0, 0, 813, 814, 3, 180, 90, 0, 814, 815, 5, 328, 0, 0, 815, 820, 3, 202, 101, 0, 816, 817, 5, 332, 0, 0, 817, 819, 3, 188, 94, 0, 818, 816, 1, 0, 0, 0, 819, 822, 1, 0, 0, 0, 820, 818, 1, 0, 0, 0, 820, 821, 1, 0, 0, 0, 821, 823, 1, 0, 0, 0, 822, 820, 1, 0, 0, 0, 823, 824, 5, 329, 0, 0, 824, 141, 1, 0, 0, 0, 825, 826, 3, 200, 100, 0, 826, 827, 5, 319, 0, 0, 827, 828, 3, 182, 91, 0, 828, 829, 5, 328, 0, 0, 829, 834, 3, 202, 101, 0, 830, 831, 5, 332, 0, 0, 831, 833, 3, 188, 94, 0, 832, 830, 1, 0, 0, 0, 833, 836, 1, 0, 0, 0, 834, 832, 1, 0, 0, 0, 834, 835, 1, 0, 0, 0, 835, 837, 1, 0, 0, 0, 836, 834, 1, 0, 0, 0, 837, 838, 5, 329, 0, 0, 838, 143, 1, 0, 0, 0, 839, 850, 5, 128, 0, 0, 840, 850, 5, 193, 0, 0, 841, 850, 5, 197, 0, 0, 842, 850, 5, 32, 0, 0, 843, 850, 5, 33, 0, 0, 844, 850, 5, 21, 0, 0, 845, 850, 5, 40, 0, 0, 846, 850, 5, 25, 0, 0, 847, 850, 5, 57, 0, 0, 848, 850, 5, 9, 0, 0, 849, 839, 1, 0, 0, 0, 849, 840, 1, 0, 0, 0, 849, 841, 1, 0, 0, 0, 849, 842, 1, 0, 0, 0, 849, 843, 1, 0, 0, 0, 849, 844, 1, 0, 0, 0, 849, 845, 1, 0, 0, 0, 849, 846, 1, 0, 0, 0, 849, 847, 1, 0, 0, 0, 849, 848, 1, 0, 0, 0, 850, 145, 1, 0, 0, 0, 851, 852, 5, 62, 0, 0, 852, 853, 3, 186, 93, 0, 853, 854, 5, 58, 0, 0, 854, 855, 3, 186, 93, 0, 855, 147, 1, 0, 0, 0, 856, 857, 3, 154, 77, 0, 857, 858, 5, 328, 0, 0, 858, 859, 3, 186, 93, 0, 859, 860, 5, 329, 0, 0, 860, 873, 1, 0, 0, 0, 861, 862, 5, 66, 0, 0, 862, 863, 5, 328, 0, 0, 863, 864, 5, 312, 0, 0, 864, 873, 5, 329, 0, 0, 865, 866, 5, 66, 0, 0, 866, 867, 5, 328, 0, 0, 867, 868, 5, 20, 0, 0, 868, 869, 3, 186, 93, 0, 869, 870, 5, 329, 0, 0, 870, 873, 1, 0, 0, 0, 871, 873, 3, 150, 75, 0, 872, 856, 1, 0, 0, 0, 872, 861, 1, 0, 0, 0, 872, 865, 1, 0, 0, 0, 872, 871, 1, 0, 0, 0, 873, 149, 1, 0, 0, 0, 874, 875, 7, 19, 0, 0, 875, 876, 5, 328, 0, 0, 876, 877, 3, 186, 93, 0, 877, 878, 5, 332, 0, 0, 878, 881, 3, 64, 32, 0, 879, 880, 5, 332, 0, 0, 880, 882, 3, 64, 32, 0, 881, 879, 1, 0, 0, 0, 881, 882, 1, 0, 0, 0, 882, 883, 1, 0, 0, 0, 883, 884, 5, 329, 0, 0, 884, 151, 1, 0, 0, 0, 885, 886, 5, 221, 0, 0, 886, 887, 5, 328, 0, 0, 887, 888, 5, 63, 0, 0, 888, 889, 3, 90, 45, 0, 889, 890, 5, 329, 0, 0, 890, 153, 1, 0, 0, 0, 891, 892, 7, 20, 0, 0, 892, 155, 1, 0, 0, 0, 893, 921, 5, 104, 0, 0, 894, 921, 5, 112, 0, 0, 895, 921, 5, 113, 0, 0, 896, 921, 5, 114, 0, 0, 897, 921, 5, 117, 0, 0, 898, 921, 5, 122, 0, 0, 899, 921, 5, 139, 0, 0, 900, 921, 5, 140, 0, 0, 901, 921, 5, 141, 0, 0, 902, 921, 5, 143, 0, 0, 903, 921, 5, 152, 0, 0, 904, 921, 5, 156, 0, 0, 905, 921, 5, 157, 0, 0, 906, 921, 5, 158, 0, 0, 907, 921, 5, 318, 0, 0, 908, 921, 5, 170, 0, 0, 909, 921, 5, 172, 0, 0, 910, 921, 5, 173, 0, 0, 911, 921, 5, 175, 0, 0, 912, 921, 5, 177, 0, 0, 913, 921, 5, 178, 0, 0, 914, 921, 5, 182, 0, 0, 915, 921, 5, 183, 0, 0, 916, 921, 5, 186, 0, 0, 917, 921, 5, 198, 0, 0, 918, 921, 3, 158, 79, 0, 919, 921, 3, 160, 80, 0, 920, 893, 1, 0, 0, 0, 920, 894, 1, 0, 0, 0, 920, 895, 1, 0, 0, 0, 920, 896, 1, 0, 0, 0, 920, 897, 1, 0, 0, 0, 920, 898, 1, 0, 0, 0, 920, 899, 1, 0, 0, 0, 920, 900, 1, 0, 0, 0, 920, 901, 1, 0, 0, 0, 920, 902, 1, 0, 0, 0, 920, 903, 1, 0, 0, 0, 920, 904, 1, 0, 0, 0, 920, 905, 1, 0, 0, 0, 920, 906, 1, 0, 0, 0, 920, 907, 1, 0, 0, 0, 920, 908, 1, 0, 0, 0, 920, 909, 1, 0, 0, 0, 920, 910, 1, 0, 0, 0, 920, 911, 1, 0, 0, 0, 920, 912, 1, 0, 0, 0, 920, 913, 1, 0, 0, 0, 920, 914, 1, 0, 0, 0, 920, 915, 1, 0, 0, 0, 920, 916, 1, 0, 0, 0, 920, 917, 1, 0, 0, 0, 920, 918, 1, 0, 0, 0, 920, 919, 1, 0, 0, 0, 921, 157, 1, 0, 0, 0, 922, 923, 7, 21, 0, 0, 923, 159, 1, 0, 0, 0, 924, 925, 7, 22, 0, 0, 925, 161, 1, 0, 0, 0, 926, 986, 3, 84, 42, 0, 927, 986, 5, 272, 0, 0, 928, 986, 5, 107, 0, 0, 929, 986, 5, 118, 0, 0, 930, 986, 5, 123, 0, 0, 931, 986, 5, 124, 0, 0, 932, 986, 5, 128, 0, 0, 933, 986, 5, 129, 0, 0, 934, 986, 5, 130, 0, 0, 935, 986, 5, 131, 0, 0, 936, 986, 5, 132, 0, 0, 937, 986, 5, 16, 0, 0, 938, 986, 5, 87, 0, 0, 939, 986, 5, 133, 0, 0, 940, 986, 5, 134, 0, 0, 941, 986, 5, 215, 0, 0, 942, 986, 5, 135, 0, 0, 943, 986, 5, 136, 0, 0, 944, 986, 5, 216, 0, 0, 945, 986, 5, 217, 0, 0, 946, 986, 5, 144, 0, 0, 947, 986, 5, 145, 0, 0, 948, 986, 5, 86, 0, 0, 949, 986, 5, 229, 0, 0, 950, 986, 5, 150, 0, 0, 951, 986, 5, 161, 0, 0, 952, 986, 5, 162, 0, 0, 953, 986, 5, 83, 0, 0, 954, 986, 5, 85, 0, 0, 955, 986, 5, 240, 0, 0, 956, 986, 5, 241, 0, 0, 957, 986, 5, 89, 0, 0, 958, 986, 5, 164, 0, 0, 959, 986, 5, 242, 0, 0, 960, 986, 5, 166, 0, 0, 961, 986, 5, 168, 0, 0, 962, 986, 5, 169, 0, 0, 963, 986, 5, 90, 0, 0, 964, 986, 5, 181, 0, 0, 965, 986, 5, 84, 0, 0, 966, 986, 5, 257, 0, 0, 967, 986, 5, 188, 0, 0, 968, 986, 5, 189, 0, 0, 969, 986, 5, 191, 0, 0, 970, 986, 5, 187, 0, 0, 971, 986, 5, 193, 0, 0, 972, 986, 5, 195, 0, 0, 973, 986, 5, 196, 0, 0, 974, 986, 5, 194, 0, 0, 975, 986, 5, 197, 0, 0, 976, 986, 5, 199, 0, 0, 977, 986, 5, 200, 0, 0, 978, 986, 5, 201, 0, 0, 979, 986, 5, 88, 0, 0, 980, 986, 5, 267, 0, 0, 981, 986, 5, 265, 0, 0, 982, 986, 5, 266, 0, 0, 983, 986, 5, 91, 0, 0, 984, 986, 5, 273, 0, 0, 985, 926, 1, 0, 0, 0, 985, 927, 1, 0, 0, 0, 985, 928, 1, 0, 0, 0, 985, 929, 1, 0, 0, 0, 985, 930, 1, 0, 0, 0, 985, 931, 1, 0, 0, 0, 985, 932, 1, 0, 0, 0, 985, 933, 1, 0, 0, 0, 985, 934, 1, 0, 0, 0, 985, 935, 1, 0, 0, 0, 985, 936, 1, 0, 0, 0, 985, 937, 1, 0, 0, 0, 985, 938, 1, 0, 0, 0, 985, 939, 1, 0, 0, 0, 985, 940, 1, 0, 0, 0, 985, 941, 1, 0, 0, 0, 985, 942, 1, 0, 0, 0, 985, 943, 1, 0, 0, 0, 985, 944, 1, 0, 0, 0, 985, 945, 1, 0, 0, 0, 985, 946, 1, 0, 0, 0, 985, 947, 1, 0, 0, 0, 985, 948, 1, 0, 0, 0, 985, 949, 1, 0, 0, 0, 985, 950, 1, 0, 0, 0, 985, 951, 1, 0, 0, 0, 985, 952, 1, 0, 0, 0, 985, 953, 1, 0, 0, 0, 985, 954, 1, 0, 0, 0, 985, 955, 1, 0, 0, 0, 985, 956, 1, 0, 0, 0, 985, 957, 1, 0, 0, 0, 985, 958, 1, 0, 0, 0, 985, 959, 1, 0, 0, 0, 985, 960, 1, 0, 0, 0, 985, 961, 1, 0, 0, 0, 985, 962, 1, 0, 0, 0, 985, 963, 1, 0, 0, 0, 985, 964, 1, 0, 0, 0, 985, 965, 1, 0, 0, 0, 985, 966, 1, 0, 0, 0, 985, 967, 1, 0, 0, 0, 985, 968, 1, 0, 0, 0, 985, 969, 1, 0, 0, 0, 985, 970, 1, 0, 0, 0, 985, 971, 1, 0, 0, 0, 985, 972, 1, 0, 0, 0, 985, 973, 1, 0, 0, 0, 985, 974, 1, 0, 0, 0, 985, 975, 1, 0, 0, 0, 985, 976, 1, 0, 0, 0, 985, 977, 1, 0, 0, 0, 985, 978, 1, 0, 0, 0, 985, 979, 1, 0, 0, 0, 985, 980, 1, 0, 0, 0, 985, 981, 1, 0, 0, 0, 985, 982, 1, 0, 0, 0, 985, 983, 1, 0, 0, 0, 985, 984, 1, 0, 0, 0, 986, 163, 1, 0, 0, 0, 987, 988, 7, 23, 0, 0, 988, 165, 1, 0, 0, 0, 989, 990, 7, 24, 0, 0, 990, 167, 1, 0, 0, 0, 991, 992, 5, 252, 0, 0, 992, 169, 1, 0, 0, 0, 993, 994, 5, 264, 0, 0, 994, 171, 1, 0, 0, 0, 995, 996, 5, 246, 0, 0, 996, 173, 1, 0, 0, 0, 997, 998, 7, 25, 0, 0, 998, 175, 1, 0, 0, 0, 999, 1000, 7, 26, 0, 0, 1000, 177, 1, 0, 0, 0, 1001, 1002, 7, 27, 0, 0, 1002, 179, 1, 0, 0, 0, 1003, 1004, 7, 28, 0, 0, 1004, 181, 1, 0, 0, 0, 1005, 1006, 7, 29, 0, 0, 1006, 183, 1, 0, 0, 0, 1007, 1012, 3, 186, 93, 0, 1008, 1009, 5, 332, 0, 0, 1009, 1011, 3, 186, 93, 0, 1010, 1008, 1, 0, 0, 0, 1011, 1014, 1, 0, 0, 0, 1012, 1010, 1, 0, 0, 0, 1012, 1013, 1, 0, 0, 0, 1013, 1016, 1, 0, 0, 0, 1014, 1012, 1, 0, 0, 0, 1015, 1007, 1, 0, 0, 0, 1015, 1016, 1, 0, 0, 0, 1016, 185, 1, 0, 0, 0, 1017, 1018, 3, 90, 45, 0, 1018, 187, 1, 0, 0, 0, 1019, 1020, 3, 192, 96, 0, 1020, 1021, 5, 319, 0, 0, 1021, 1022, 3, 204, 102, 0, 1022, 1028, 1, 0, 0, 0, 1023, 1024, 3, 66, 33, 0, 1024, 1025, 5, 319, 0, 0, 1025, 1026, 3, 204, 102, 0, 1026, 1028, 1, 0, 0, 0, 1027, 1019, 1, 0, 0, 0, 1027, 1023, 1, 0, 0, 0, 1028, 189, 1, 0, 0, 0, 1029, 1030, 3, 194, 97, 0, 1030, 1031, 5, 319, 0, 0, 1031, 1032, 3, 206, 103, 0, 1032, 191, 1, 0, 0, 0, 1033, 1034, 7, 30, 0, 0, 1034, 193, 1, 0, 0, 0, 1035, 1036, 7, 31, 0, 0, 1036, 195, 1, 0, 0, 0, 1037, 1046, 3, 200, 100, 0, 1038, 1039, 3, 200, 100, 0, 1039, 1040, 3, 198, 99, 0, 1040, 1046, 1, 0, 0, 0, 1041, 1042, 3, 200, 100, 0, 1042, 1043, 5, 326, 0, 0, 1043, 1044, 3, 198, 99, 0, 1044, 1046, 1, 0, 0, 0, 1045, 1037, 1, 0, 0, 0, 1045, 1038, 1, 0, 0, 0, 1045, 1041, 1, 0, 0, 0, 1046, 197, 1, 0, 0, 0, 1047, 1048, 3, 64, 32, 0, 1048, 199, 1, 0, 0, 0, 1049, 1052, 3, 222, 111, 0, 1050, 1052, 3, 66, 33, 0, 1051, 1049, 1, 0, 0, 0, 1051, 1050, 1, 0, 0, 0, 1052, 201, 1, 0, 0, 0, 1053, 1054, 3, 204, 102, 0, 1054, 203, 1, 0, 0, 0, 1055, 1058, 3, 222, 111, 0, 1056, 1058, 3, 60, 30, 0, 1057, 1055, 1, 0, 0, 0, 1057, 1056, 1, 0, 0, 0, 1058, 205, 1, 0, 0, 0, 1059, 1060, 3, 66, 33, 0, 1060, 207, 1, 0, 0, 0, 1061, 1065, 5, 285, 0, 0, 1062, 1065, 5, 252, 0, 0, 1063, 1065, 3, 66, 33, 0, 1064, 1061, 1, 0, 0, 0, 1064, 1062, 1, 0, 0, 0, 1064, 1063, 1, 0, 0, 0, 1065, 209, 1, 0, 0, 0, 1066, 1067, 3, 208, 104, 0, 1067, 1068, 5, 319, 0, 0, 1068, 1069, 3, 204, 102, 0, 1069, 211, 1, 0, 0, 0, 1070, 1071, 3, 208, 104, 0, 1071, 1072, 5, 319, 0, 0, 1072, 1073, 3, 204, 102, 0, 1073, 1081, 1, 0, 0, 0, 1074, 1075, 3, 208, 104, 0, 1075, 1076, 5, 319, 0, 0, 1076, 1077, 5, 330, 0, 0, 1077, 1078, 3, 204, 102, 0, 1078, 1079, 5, 331, 0, 0, 1079, 1081, 1, 0, 0, 0, 1080, 1070, 1, 0, 0, 0, 1080, 1074, 1, 0, 0, 0, 1081, 213, 1, 0, 0, 0, 1082, 1083, 3, 222, 111, 0, 1083, 215, 1, 0, 0, 0, 1084, 1085, 3, 222, 111, 0, 1085, 217, 1, 0, 0, 0, 1086, 1087, 3, 222, 111, 0, 1087, 1088, 5, 327, 0, 0, 1088, 1089, 5, 312, 0, 0, 1089, 219, 1, 0, 0, 0, 1090, 1091, 3, 224, 112, 0, 1091, 221, 1, 0, 0, 0, 1092, 1097, 3, 224, 112, 0, 1093, 1094, 5, 327, 0, 0, 1094, 1096, 3, 224, 112, 0, 1095, 1093, 1, 0, 0, 0, 1096, 1099, 1, 0, 0, 0, 1097, 1095, 1, 0, 0, 0, 1097, 1098, 1, 0, 0, 0, 1098, 223, 1, 0, 0, 0, 1099, 1097, 1, 0, 0, 0, 1100, 1102, 5, 327, 0, 0, 1101, 1100, 1, 0, 0, 0, 1101, 1102, 1, 0, 0, 0, 1102, 1103, 1, 0, 0, 0, 1103, 1108, 5, 349, 0, 0, 1104, 1108, 5, 351, 0, 0, 1105, 1108, 3, 226, 113, 0, 1106, 1108, 3, 126, 63, 0, 1107, 1101, 1, 0, 0, 0, 1107, 1104, 1, 0, 0, 0, 1107, 1105, 1, 0, 0, 0, 1107, 1106, 1, 0, 0, 0, 1108, 225, 1, 0, 0, 0, 1109, 1110, 7, 32, 0, 0, 1110, 227, 1, 0, 0, 0, 91, 229, 232, 238, 246, 256, 267, 272, 276, 279, 283, 291, 297, 302, 305, 310, 313, 316, 319, 323, 326, 332, 336, 350, 365, 370, 374, 380, 388, 396, 400, 405, 408, 419, 424, 428, 435, 441, 456, 465, 474, 483, 497, 505, 507, 519, 528, 540, 547, 549, 557, 568, 576, 578, 592, 595, 614, 625, 660, 669, 694, 701, 705, 713, 717, 728, 735, 742, 753, 767, 780, 790, 804, 809, 820, 834, 849, 872, 881, 920, 985, 1012, 1015, 1027, 1045, 1051, 1057, 1064, 1080, 1097, 1101, 1107] \ No newline at end of file diff --git a/src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLParser.tokens b/src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLParser.tokens new file mode 100644 index 000000000000..80703f8b9ac0 --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLParser.tokens @@ -0,0 +1,689 @@ +SPACE=1 +SPEC_SQL_COMMENT=2 +COMMENT_INPUT=3 +LINE_COMMENT=4 +ALL=5 +AND=6 +AS=7 +ASC=8 +BOOLEAN=9 +BETWEEN=10 +BY=11 +CASE=12 +CAST=13 +CROSS=14 +COLUMNS=15 +DATETIME=16 +DELETE=17 +DESC=18 +DESCRIBE=19 +DISTINCT=20 +DOUBLE=21 +ELSE=22 +EXISTS=23 +FALSE=24 +FLOAT=25 +FIRST=26 +FROM=27 +GROUP=28 +HAVING=29 +IN=30 +INNER=31 +INT=32 +INTEGER=33 +IS=34 +JOIN=35 +LAST=36 +LEFT=37 +LIKE=38 +LIMIT=39 +LONG=40 +MATCH=41 +NATURAL=42 +MISSING_LITERAL=43 +NOT=44 +NULL_LITERAL=45 +NULLS=46 +ON=47 +OR=48 +ORDER=49 +OUTER=50 +OVER=51 +PARTITION=52 +REGEXP=53 +RIGHT=54 +SELECT=55 +SHOW=56 +STRING=57 +THEN=58 +TRUE=59 +UNION=60 +USING=61 +WHEN=62 +WHERE=63 +EXCEPT=64 +AVG=65 +COUNT=66 +MAX=67 +MIN=68 +SUM=69 +VAR_POP=70 +VAR_SAMP=71 +VARIANCE=72 +STD=73 +STDDEV=74 +STDDEV_POP=75 +STDDEV_SAMP=76 +SUBSTRING=77 +TRIM=78 +END=79 +FULL=80 +OFFSET=81 +INTERVAL=82 +MICROSECOND=83 +SECOND=84 +MINUTE=85 +HOUR=86 +DAY=87 +WEEK=88 +MONTH=89 +QUARTER=90 +YEAR=91 +SECOND_MICROSECOND=92 +MINUTE_MICROSECOND=93 +MINUTE_SECOND=94 +HOUR_MICROSECOND=95 +HOUR_SECOND=96 +HOUR_MINUTE=97 +DAY_MICROSECOND=98 +DAY_SECOND=99 +DAY_MINUTE=100 +DAY_HOUR=101 +YEAR_MONTH=102 +TABLES=103 +ABS=104 +ACOS=105 +ADD=106 +ADDTIME=107 +ASCII=108 +ASIN=109 +ATAN=110 +ATAN2=111 +CBRT=112 +CEIL=113 +CEILING=114 +CONCAT=115 +CONCAT_WS=116 +CONV=117 +CONVERT_TZ=118 +COS=119 +COSH=120 +COT=121 +CRC32=122 +CURDATE=123 +CURTIME=124 +CURRENT_DATE=125 +CURRENT_TIME=126 +CURRENT_TIMESTAMP=127 +DATE=128 +DATE_ADD=129 +DATE_FORMAT=130 +DATE_SUB=131 +DATEDIFF=132 +DAYNAME=133 +DAYOFMONTH=134 +DAYOFWEEK=135 +DAYOFYEAR=136 +DEGREES=137 +DIVIDE=138 +E=139 +EXP=140 +EXPM1=141 +EXTRACT=142 +FLOOR=143 +FROM_DAYS=144 +FROM_UNIXTIME=145 +GET_FORMAT=146 +IF=147 +IFNULL=148 +ISNULL=149 +LAST_DAY=150 +LENGTH=151 +LN=152 +LOCALTIME=153 +LOCALTIMESTAMP=154 +LOCATE=155 +LOG=156 +LOG10=157 +LOG2=158 +LOWER=159 +LTRIM=160 +MAKEDATE=161 +MAKETIME=162 +MODULUS=163 +MONTHNAME=164 +MULTIPLY=165 +NOW=166 +NULLIF=167 +PERIOD_ADD=168 +PERIOD_DIFF=169 +PI=170 +POSITION=171 +POW=172 +POWER=173 +RADIANS=174 +RAND=175 +REPLACE=176 +RINT=177 +ROUND=178 +RTRIM=179 +REVERSE=180 +SEC_TO_TIME=181 +SIGN=182 +SIGNUM=183 +SIN=184 +SINH=185 +SQRT=186 +STR_TO_DATE=187 +SUBDATE=188 +SUBTIME=189 +SUBTRACT=190 +SYSDATE=191 +TAN=192 +TIME=193 +TIMEDIFF=194 +TIME_FORMAT=195 +TIME_TO_SEC=196 +TIMESTAMP=197 +TRUNCATE=198 +TO_DAYS=199 +TO_SECONDS=200 +UNIX_TIMESTAMP=201 +UPPER=202 +UTC_DATE=203 +UTC_TIME=204 +UTC_TIMESTAMP=205 +D=206 +T=207 +TS=208 +LEFT_BRACE=209 +RIGHT_BRACE=210 +DENSE_RANK=211 +RANK=212 +ROW_NUMBER=213 +DATE_HISTOGRAM=214 +DAY_OF_MONTH=215 +DAY_OF_YEAR=216 +DAY_OF_WEEK=217 +EXCLUDE=218 +EXTENDED_STATS=219 +FIELD=220 +FILTER=221 +GEO_BOUNDING_BOX=222 +GEO_CELL=223 +GEO_DISTANCE=224 +GEO_DISTANCE_RANGE=225 +GEO_INTERSECTS=226 +GEO_POLYGON=227 +HISTOGRAM=228 +HOUR_OF_DAY=229 +INCLUDE=230 +IN_TERMS=231 +MATCHPHRASE=232 +MATCH_PHRASE=233 +MATCHPHRASEQUERY=234 +SIMPLE_QUERY_STRING=235 +QUERY_STRING=236 +MATCH_PHRASE_PREFIX=237 +MATCHQUERY=238 +MATCH_QUERY=239 +MINUTE_OF_DAY=240 +MINUTE_OF_HOUR=241 +MONTH_OF_YEAR=242 +MULTIMATCH=243 +MULTI_MATCH=244 +MULTIMATCHQUERY=245 +NESTED=246 +PERCENTILES=247 +PERCENTILE=248 +PERCENTILE_APPROX=249 +REGEXP_QUERY=250 +REVERSE_NESTED=251 +QUERY=252 +RANGE=253 +SCORE=254 +SCOREQUERY=255 +SCORE_QUERY=256 +SECOND_OF_MINUTE=257 +STATS=258 +TERM=259 +TERMS=260 +TIMESTAMPADD=261 +TIMESTAMPDIFF=262 +TOPHITS=263 +TYPEOF=264 +WEEK_OF_YEAR=265 +WEEKOFYEAR=266 +WEEKDAY=267 +WILDCARDQUERY=268 +WILDCARD_QUERY=269 +SUBSTR=270 +STRCMP=271 +ADDDATE=272 +YEARWEEK=273 +ALLOW_LEADING_WILDCARD=274 +ANALYZER=275 +ANALYZE_WILDCARD=276 +AUTO_GENERATE_SYNONYMS_PHRASE_QUERY=277 +BOOST=278 +CASE_INSENSITIVE=279 +CUTOFF_FREQUENCY=280 +DEFAULT_FIELD=281 +DEFAULT_OPERATOR=282 +ESCAPE=283 +ENABLE_POSITION_INCREMENTS=284 +FIELDS=285 +FLAGS=286 +FUZZINESS=287 +FUZZY_MAX_EXPANSIONS=288 +FUZZY_PREFIX_LENGTH=289 +FUZZY_REWRITE=290 +FUZZY_TRANSPOSITIONS=291 +LENIENT=292 +LOW_FREQ_OPERATOR=293 +MAX_DETERMINIZED_STATES=294 +MAX_EXPANSIONS=295 +MINIMUM_SHOULD_MATCH=296 +OPERATOR=297 +PHRASE_SLOP=298 +PREFIX_LENGTH=299 +QUOTE_ANALYZER=300 +QUOTE_FIELD_SUFFIX=301 +REWRITE=302 +SLOP=303 +TIE_BREAKER=304 +TIME_ZONE=305 +TYPE=306 +ZERO_TERMS_QUERY=307 +HIGHLIGHT=308 +HIGHLIGHT_PRE_TAGS=309 +HIGHLIGHT_POST_TAGS=310 +MATCH_BOOL_PREFIX=311 +STAR=312 +SLASH=313 +MODULE=314 +PLUS=315 +MINUS=316 +DIV=317 +MOD=318 +EQUAL_SYMBOL=319 +GREATER_SYMBOL=320 +LESS_SYMBOL=321 +EXCLAMATION_SYMBOL=322 +BIT_NOT_OP=323 +BIT_OR_OP=324 +BIT_AND_OP=325 +BIT_XOR_OP=326 +DOT=327 +LR_BRACKET=328 +RR_BRACKET=329 +LT_SQR_PRTHS=330 +RT_SQR_PRTHS=331 +COMMA=332 +SEMI=333 +AT_SIGN=334 +ZERO_DECIMAL=335 +ONE_DECIMAL=336 +TWO_DECIMAL=337 +SINGLE_QUOTE_SYMB=338 +DOUBLE_QUOTE_SYMB=339 +REVERSE_QUOTE_SYMB=340 +COLON_SYMB=341 +START_NATIONAL_STRING_LITERAL=342 +STRING_LITERAL=343 +DECIMAL_LITERAL=344 +HEXADECIMAL_LITERAL=345 +REAL_LITERAL=346 +NULL_SPEC_LITERAL=347 +BIT_STRING=348 +ID=349 +DOUBLE_QUOTE_ID=350 +BACKTICK_QUOTE_ID=351 +ERROR_RECOGNITION=352 +'ALL'=5 +'AND'=6 +'AS'=7 +'ASC'=8 +'BOOLEAN'=9 +'BETWEEN'=10 +'BY'=11 +'CASE'=12 +'CAST'=13 +'CROSS'=14 +'COLUMNS'=15 +'DATETIME'=16 +'DELETE'=17 +'DESC'=18 +'DESCRIBE'=19 +'DISTINCT'=20 +'DOUBLE'=21 +'ELSE'=22 +'EXISTS'=23 +'FALSE'=24 +'FLOAT'=25 +'FIRST'=26 +'FROM'=27 +'GROUP'=28 +'HAVING'=29 +'IN'=30 +'INNER'=31 +'INT'=32 +'INTEGER'=33 +'IS'=34 +'JOIN'=35 +'LAST'=36 +'LEFT'=37 +'LIKE'=38 +'LIMIT'=39 +'LONG'=40 +'MATCH'=41 +'NATURAL'=42 +'MISSING'=43 +'NOT'=44 +'NULL'=45 +'NULLS'=46 +'ON'=47 +'OR'=48 +'ORDER'=49 +'OUTER'=50 +'OVER'=51 +'PARTITION'=52 +'REGEXP'=53 +'RIGHT'=54 +'SELECT'=55 +'SHOW'=56 +'STRING'=57 +'THEN'=58 +'TRUE'=59 +'UNION'=60 +'USING'=61 +'WHEN'=62 +'WHERE'=63 +'MINUS'=64 +'AVG'=65 +'COUNT'=66 +'MAX'=67 +'MIN'=68 +'SUM'=69 +'VAR_POP'=70 +'VAR_SAMP'=71 +'VARIANCE'=72 +'STD'=73 +'STDDEV'=74 +'STDDEV_POP'=75 +'STDDEV_SAMP'=76 +'SUBSTRING'=77 +'TRIM'=78 +'END'=79 +'FULL'=80 +'OFFSET'=81 +'INTERVAL'=82 +'MICROSECOND'=83 +'SECOND'=84 +'MINUTE'=85 +'HOUR'=86 +'DAY'=87 +'WEEK'=88 +'MONTH'=89 +'QUARTER'=90 +'YEAR'=91 +'SECOND_MICROSECOND'=92 +'MINUTE_MICROSECOND'=93 +'MINUTE_SECOND'=94 +'HOUR_MICROSECOND'=95 +'HOUR_SECOND'=96 +'HOUR_MINUTE'=97 +'DAY_MICROSECOND'=98 +'DAY_SECOND'=99 +'DAY_MINUTE'=100 +'DAY_HOUR'=101 +'YEAR_MONTH'=102 +'TABLES'=103 +'ABS'=104 +'ACOS'=105 +'ADD'=106 +'ADDTIME'=107 +'ASCII'=108 +'ASIN'=109 +'ATAN'=110 +'ATAN2'=111 +'CBRT'=112 +'CEIL'=113 +'CEILING'=114 +'CONCAT'=115 +'CONCAT_WS'=116 +'CONV'=117 +'CONVERT_TZ'=118 +'COS'=119 +'COSH'=120 +'COT'=121 +'CRC32'=122 +'CURDATE'=123 +'CURTIME'=124 +'CURRENT_DATE'=125 +'CURRENT_TIME'=126 +'CURRENT_TIMESTAMP'=127 +'DATE'=128 +'DATE_ADD'=129 +'DATE_FORMAT'=130 +'DATE_SUB'=131 +'DATEDIFF'=132 +'DAYNAME'=133 +'DAYOFMONTH'=134 +'DAYOFWEEK'=135 +'DAYOFYEAR'=136 +'DEGREES'=137 +'DIVIDE'=138 +'E'=139 +'EXP'=140 +'EXPM1'=141 +'EXTRACT'=142 +'FLOOR'=143 +'FROM_DAYS'=144 +'FROM_UNIXTIME'=145 +'GET_FORMAT'=146 +'IF'=147 +'IFNULL'=148 +'ISNULL'=149 +'LAST_DAY'=150 +'LENGTH'=151 +'LN'=152 +'LOCALTIME'=153 +'LOCALTIMESTAMP'=154 +'LOCATE'=155 +'LOG'=156 +'LOG10'=157 +'LOG2'=158 +'LOWER'=159 +'LTRIM'=160 +'MAKEDATE'=161 +'MAKETIME'=162 +'MODULUS'=163 +'MONTHNAME'=164 +'MULTIPLY'=165 +'NOW'=166 +'NULLIF'=167 +'PERIOD_ADD'=168 +'PERIOD_DIFF'=169 +'PI'=170 +'POSITION'=171 +'POW'=172 +'POWER'=173 +'RADIANS'=174 +'RAND'=175 +'REPLACE'=176 +'RINT'=177 +'ROUND'=178 +'RTRIM'=179 +'REVERSE'=180 +'SEC_TO_TIME'=181 +'SIGN'=182 +'SIGNUM'=183 +'SIN'=184 +'SINH'=185 +'SQRT'=186 +'STR_TO_DATE'=187 +'SUBDATE'=188 +'SUBTIME'=189 +'SUBTRACT'=190 +'SYSDATE'=191 +'TAN'=192 +'TIME'=193 +'TIMEDIFF'=194 +'TIME_FORMAT'=195 +'TIME_TO_SEC'=196 +'TIMESTAMP'=197 +'TRUNCATE'=198 +'TO_DAYS'=199 +'TO_SECONDS'=200 +'UNIX_TIMESTAMP'=201 +'UPPER'=202 +'UTC_DATE'=203 +'UTC_TIME'=204 +'UTC_TIMESTAMP'=205 +'D'=206 +'T'=207 +'TS'=208 +'{'=209 +'}'=210 +'DENSE_RANK'=211 +'RANK'=212 +'ROW_NUMBER'=213 +'DATE_HISTOGRAM'=214 +'DAY_OF_MONTH'=215 +'DAY_OF_YEAR'=216 +'DAY_OF_WEEK'=217 +'EXCLUDE'=218 +'EXTENDED_STATS'=219 +'FIELD'=220 +'FILTER'=221 +'GEO_BOUNDING_BOX'=222 +'GEO_CELL'=223 +'GEO_DISTANCE'=224 +'GEO_DISTANCE_RANGE'=225 +'GEO_INTERSECTS'=226 +'GEO_POLYGON'=227 +'HISTOGRAM'=228 +'HOUR_OF_DAY'=229 +'INCLUDE'=230 +'IN_TERMS'=231 +'MATCHPHRASE'=232 +'MATCH_PHRASE'=233 +'MATCHPHRASEQUERY'=234 +'SIMPLE_QUERY_STRING'=235 +'QUERY_STRING'=236 +'MATCH_PHRASE_PREFIX'=237 +'MATCHQUERY'=238 +'MATCH_QUERY'=239 +'MINUTE_OF_DAY'=240 +'MINUTE_OF_HOUR'=241 +'MONTH_OF_YEAR'=242 +'MULTIMATCH'=243 +'MULTI_MATCH'=244 +'MULTIMATCHQUERY'=245 +'NESTED'=246 +'PERCENTILES'=247 +'PERCENTILE'=248 +'PERCENTILE_APPROX'=249 +'REGEXP_QUERY'=250 +'REVERSE_NESTED'=251 +'QUERY'=252 +'RANGE'=253 +'SCORE'=254 +'SCOREQUERY'=255 +'SCORE_QUERY'=256 +'SECOND_OF_MINUTE'=257 +'STATS'=258 +'TERM'=259 +'TERMS'=260 +'TIMESTAMPADD'=261 +'TIMESTAMPDIFF'=262 +'TOPHITS'=263 +'TYPEOF'=264 +'WEEK_OF_YEAR'=265 +'WEEKOFYEAR'=266 +'WEEKDAY'=267 +'WILDCARDQUERY'=268 +'WILDCARD_QUERY'=269 +'SUBSTR'=270 +'STRCMP'=271 +'ADDDATE'=272 +'YEARWEEK'=273 +'ALLOW_LEADING_WILDCARD'=274 +'ANALYZER'=275 +'ANALYZE_WILDCARD'=276 +'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY'=277 +'BOOST'=278 +'CASE_INSENSITIVE'=279 +'CUTOFF_FREQUENCY'=280 +'DEFAULT_FIELD'=281 +'DEFAULT_OPERATOR'=282 +'ESCAPE'=283 +'ENABLE_POSITION_INCREMENTS'=284 +'FIELDS'=285 +'FLAGS'=286 +'FUZZINESS'=287 +'FUZZY_MAX_EXPANSIONS'=288 +'FUZZY_PREFIX_LENGTH'=289 +'FUZZY_REWRITE'=290 +'FUZZY_TRANSPOSITIONS'=291 +'LENIENT'=292 +'LOW_FREQ_OPERATOR'=293 +'MAX_DETERMINIZED_STATES'=294 +'MAX_EXPANSIONS'=295 +'MINIMUM_SHOULD_MATCH'=296 +'OPERATOR'=297 +'PHRASE_SLOP'=298 +'PREFIX_LENGTH'=299 +'QUOTE_ANALYZER'=300 +'QUOTE_FIELD_SUFFIX'=301 +'REWRITE'=302 +'SLOP'=303 +'TIE_BREAKER'=304 +'TIME_ZONE'=305 +'TYPE'=306 +'ZERO_TERMS_QUERY'=307 +'HIGHLIGHT'=308 +'PRE_TAGS'=309 +'POST_TAGS'=310 +'MATCH_BOOL_PREFIX'=311 +'*'=312 +'/'=313 +'%'=314 +'+'=315 +'-'=316 +'DIV'=317 +'MOD'=318 +'='=319 +'>'=320 +'<'=321 +'!'=322 +'~'=323 +'|'=324 +'&'=325 +'^'=326 +'.'=327 +'('=328 +')'=329 +'['=330 +']'=331 +','=332 +';'=333 +'@'=334 +'0'=335 +'1'=336 +'2'=337 +'\''=338 +'"'=339 +'`'=340 +':'=341 diff --git a/src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLParser.ts b/src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLParser.ts new file mode 100644 index 000000000000..fc5d4d5bcd53 --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLParser.ts @@ -0,0 +1,12612 @@ +// Generated from ./src/plugins/data/public/antlr/opensearch_sql/grammar/OpenSearchSQLParser.g4 by ANTLR 4.13.1 + +import * as antlr from "antlr4ng"; +import { Token } from "antlr4ng"; + +import { OpenSearchSQLParserVisitor } from "./OpenSearchSQLParserVisitor.js"; + +// for running tests with parameters, TODO: discuss strategy for typed parameters in CI +// eslint-disable-next-line no-unused-vars +type int = number; + + +export class OpenSearchSQLParser extends antlr.Parser { + public static readonly SPACE = 1; + public static readonly SPEC_SQL_COMMENT = 2; + public static readonly COMMENT_INPUT = 3; + public static readonly LINE_COMMENT = 4; + public static readonly ALL = 5; + public static readonly AND = 6; + public static readonly AS = 7; + public static readonly ASC = 8; + public static readonly BOOLEAN = 9; + public static readonly BETWEEN = 10; + public static readonly BY = 11; + public static readonly CASE = 12; + public static readonly CAST = 13; + public static readonly CROSS = 14; + public static readonly COLUMNS = 15; + public static readonly DATETIME = 16; + public static readonly DELETE = 17; + public static readonly DESC = 18; + public static readonly DESCRIBE = 19; + public static readonly DISTINCT = 20; + public static readonly DOUBLE = 21; + public static readonly ELSE = 22; + public static readonly EXISTS = 23; + public static readonly FALSE = 24; + public static readonly FLOAT = 25; + public static readonly FIRST = 26; + public static readonly FROM = 27; + public static readonly GROUP = 28; + public static readonly HAVING = 29; + public static readonly IN = 30; + public static readonly INNER = 31; + public static readonly INT = 32; + public static readonly INTEGER = 33; + public static readonly IS = 34; + public static readonly JOIN = 35; + public static readonly LAST = 36; + public static readonly LEFT = 37; + public static readonly LIKE = 38; + public static readonly LIMIT = 39; + public static readonly LONG = 40; + public static readonly MATCH = 41; + public static readonly NATURAL = 42; + public static readonly MISSING_LITERAL = 43; + public static readonly NOT = 44; + public static readonly NULL_LITERAL = 45; + public static readonly NULLS = 46; + public static readonly ON = 47; + public static readonly OR = 48; + public static readonly ORDER = 49; + public static readonly OUTER = 50; + public static readonly OVER = 51; + public static readonly PARTITION = 52; + public static readonly REGEXP = 53; + public static readonly RIGHT = 54; + public static readonly SELECT = 55; + public static readonly SHOW = 56; + public static readonly STRING = 57; + public static readonly THEN = 58; + public static readonly TRUE = 59; + public static readonly UNION = 60; + public static readonly USING = 61; + public static readonly WHEN = 62; + public static readonly WHERE = 63; + public static readonly EXCEPT = 64; + public static readonly AVG = 65; + public static readonly COUNT = 66; + public static readonly MAX = 67; + public static readonly MIN = 68; + public static readonly SUM = 69; + public static readonly VAR_POP = 70; + public static readonly VAR_SAMP = 71; + public static readonly VARIANCE = 72; + public static readonly STD = 73; + public static readonly STDDEV = 74; + public static readonly STDDEV_POP = 75; + public static readonly STDDEV_SAMP = 76; + public static readonly SUBSTRING = 77; + public static readonly TRIM = 78; + public static readonly END = 79; + public static readonly FULL = 80; + public static readonly OFFSET = 81; + public static readonly INTERVAL = 82; + public static readonly MICROSECOND = 83; + public static readonly SECOND = 84; + public static readonly MINUTE = 85; + public static readonly HOUR = 86; + public static readonly DAY = 87; + public static readonly WEEK = 88; + public static readonly MONTH = 89; + public static readonly QUARTER = 90; + public static readonly YEAR = 91; + public static readonly SECOND_MICROSECOND = 92; + public static readonly MINUTE_MICROSECOND = 93; + public static readonly MINUTE_SECOND = 94; + public static readonly HOUR_MICROSECOND = 95; + public static readonly HOUR_SECOND = 96; + public static readonly HOUR_MINUTE = 97; + public static readonly DAY_MICROSECOND = 98; + public static readonly DAY_SECOND = 99; + public static readonly DAY_MINUTE = 100; + public static readonly DAY_HOUR = 101; + public static readonly YEAR_MONTH = 102; + public static readonly TABLES = 103; + public static readonly ABS = 104; + public static readonly ACOS = 105; + public static readonly ADD = 106; + public static readonly ADDTIME = 107; + public static readonly ASCII = 108; + public static readonly ASIN = 109; + public static readonly ATAN = 110; + public static readonly ATAN2 = 111; + public static readonly CBRT = 112; + public static readonly CEIL = 113; + public static readonly CEILING = 114; + public static readonly CONCAT = 115; + public static readonly CONCAT_WS = 116; + public static readonly CONV = 117; + public static readonly CONVERT_TZ = 118; + public static readonly COS = 119; + public static readonly COSH = 120; + public static readonly COT = 121; + public static readonly CRC32 = 122; + public static readonly CURDATE = 123; + public static readonly CURTIME = 124; + public static readonly CURRENT_DATE = 125; + public static readonly CURRENT_TIME = 126; + public static readonly CURRENT_TIMESTAMP = 127; + public static readonly DATE = 128; + public static readonly DATE_ADD = 129; + public static readonly DATE_FORMAT = 130; + public static readonly DATE_SUB = 131; + public static readonly DATEDIFF = 132; + public static readonly DAYNAME = 133; + public static readonly DAYOFMONTH = 134; + public static readonly DAYOFWEEK = 135; + public static readonly DAYOFYEAR = 136; + public static readonly DEGREES = 137; + public static readonly DIVIDE = 138; + public static readonly E = 139; + public static readonly EXP = 140; + public static readonly EXPM1 = 141; + public static readonly EXTRACT = 142; + public static readonly FLOOR = 143; + public static readonly FROM_DAYS = 144; + public static readonly FROM_UNIXTIME = 145; + public static readonly GET_FORMAT = 146; + public static readonly IF = 147; + public static readonly IFNULL = 148; + public static readonly ISNULL = 149; + public static readonly LAST_DAY = 150; + public static readonly LENGTH = 151; + public static readonly LN = 152; + public static readonly LOCALTIME = 153; + public static readonly LOCALTIMESTAMP = 154; + public static readonly LOCATE = 155; + public static readonly LOG = 156; + public static readonly LOG10 = 157; + public static readonly LOG2 = 158; + public static readonly LOWER = 159; + public static readonly LTRIM = 160; + public static readonly MAKEDATE = 161; + public static readonly MAKETIME = 162; + public static readonly MODULUS = 163; + public static readonly MONTHNAME = 164; + public static readonly MULTIPLY = 165; + public static readonly NOW = 166; + public static readonly NULLIF = 167; + public static readonly PERIOD_ADD = 168; + public static readonly PERIOD_DIFF = 169; + public static readonly PI = 170; + public static readonly POSITION = 171; + public static readonly POW = 172; + public static readonly POWER = 173; + public static readonly RADIANS = 174; + public static readonly RAND = 175; + public static readonly REPLACE = 176; + public static readonly RINT = 177; + public static readonly ROUND = 178; + public static readonly RTRIM = 179; + public static readonly REVERSE = 180; + public static readonly SEC_TO_TIME = 181; + public static readonly SIGN = 182; + public static readonly SIGNUM = 183; + public static readonly SIN = 184; + public static readonly SINH = 185; + public static readonly SQRT = 186; + public static readonly STR_TO_DATE = 187; + public static readonly SUBDATE = 188; + public static readonly SUBTIME = 189; + public static readonly SUBTRACT = 190; + public static readonly SYSDATE = 191; + public static readonly TAN = 192; + public static readonly TIME = 193; + public static readonly TIMEDIFF = 194; + public static readonly TIME_FORMAT = 195; + public static readonly TIME_TO_SEC = 196; + public static readonly TIMESTAMP = 197; + public static readonly TRUNCATE = 198; + public static readonly TO_DAYS = 199; + public static readonly TO_SECONDS = 200; + public static readonly UNIX_TIMESTAMP = 201; + public static readonly UPPER = 202; + public static readonly UTC_DATE = 203; + public static readonly UTC_TIME = 204; + public static readonly UTC_TIMESTAMP = 205; + public static readonly D = 206; + public static readonly T = 207; + public static readonly TS = 208; + public static readonly LEFT_BRACE = 209; + public static readonly RIGHT_BRACE = 210; + public static readonly DENSE_RANK = 211; + public static readonly RANK = 212; + public static readonly ROW_NUMBER = 213; + public static readonly DATE_HISTOGRAM = 214; + public static readonly DAY_OF_MONTH = 215; + public static readonly DAY_OF_YEAR = 216; + public static readonly DAY_OF_WEEK = 217; + public static readonly EXCLUDE = 218; + public static readonly EXTENDED_STATS = 219; + public static readonly FIELD = 220; + public static readonly FILTER = 221; + public static readonly GEO_BOUNDING_BOX = 222; + public static readonly GEO_CELL = 223; + public static readonly GEO_DISTANCE = 224; + public static readonly GEO_DISTANCE_RANGE = 225; + public static readonly GEO_INTERSECTS = 226; + public static readonly GEO_POLYGON = 227; + public static readonly HISTOGRAM = 228; + public static readonly HOUR_OF_DAY = 229; + public static readonly INCLUDE = 230; + public static readonly IN_TERMS = 231; + public static readonly MATCHPHRASE = 232; + public static readonly MATCH_PHRASE = 233; + public static readonly MATCHPHRASEQUERY = 234; + public static readonly SIMPLE_QUERY_STRING = 235; + public static readonly QUERY_STRING = 236; + public static readonly MATCH_PHRASE_PREFIX = 237; + public static readonly MATCHQUERY = 238; + public static readonly MATCH_QUERY = 239; + public static readonly MINUTE_OF_DAY = 240; + public static readonly MINUTE_OF_HOUR = 241; + public static readonly MONTH_OF_YEAR = 242; + public static readonly MULTIMATCH = 243; + public static readonly MULTI_MATCH = 244; + public static readonly MULTIMATCHQUERY = 245; + public static readonly NESTED = 246; + public static readonly PERCENTILES = 247; + public static readonly PERCENTILE = 248; + public static readonly PERCENTILE_APPROX = 249; + public static readonly REGEXP_QUERY = 250; + public static readonly REVERSE_NESTED = 251; + public static readonly QUERY = 252; + public static readonly RANGE = 253; + public static readonly SCORE = 254; + public static readonly SCOREQUERY = 255; + public static readonly SCORE_QUERY = 256; + public static readonly SECOND_OF_MINUTE = 257; + public static readonly STATS = 258; + public static readonly TERM = 259; + public static readonly TERMS = 260; + public static readonly TIMESTAMPADD = 261; + public static readonly TIMESTAMPDIFF = 262; + public static readonly TOPHITS = 263; + public static readonly TYPEOF = 264; + public static readonly WEEK_OF_YEAR = 265; + public static readonly WEEKOFYEAR = 266; + public static readonly WEEKDAY = 267; + public static readonly WILDCARDQUERY = 268; + public static readonly WILDCARD_QUERY = 269; + public static readonly SUBSTR = 270; + public static readonly STRCMP = 271; + public static readonly ADDDATE = 272; + public static readonly YEARWEEK = 273; + public static readonly ALLOW_LEADING_WILDCARD = 274; + public static readonly ANALYZER = 275; + public static readonly ANALYZE_WILDCARD = 276; + public static readonly AUTO_GENERATE_SYNONYMS_PHRASE_QUERY = 277; + public static readonly BOOST = 278; + public static readonly CASE_INSENSITIVE = 279; + public static readonly CUTOFF_FREQUENCY = 280; + public static readonly DEFAULT_FIELD = 281; + public static readonly DEFAULT_OPERATOR = 282; + public static readonly ESCAPE = 283; + public static readonly ENABLE_POSITION_INCREMENTS = 284; + public static readonly FIELDS = 285; + public static readonly FLAGS = 286; + public static readonly FUZZINESS = 287; + public static readonly FUZZY_MAX_EXPANSIONS = 288; + public static readonly FUZZY_PREFIX_LENGTH = 289; + public static readonly FUZZY_REWRITE = 290; + public static readonly FUZZY_TRANSPOSITIONS = 291; + public static readonly LENIENT = 292; + public static readonly LOW_FREQ_OPERATOR = 293; + public static readonly MAX_DETERMINIZED_STATES = 294; + public static readonly MAX_EXPANSIONS = 295; + public static readonly MINIMUM_SHOULD_MATCH = 296; + public static readonly OPERATOR = 297; + public static readonly PHRASE_SLOP = 298; + public static readonly PREFIX_LENGTH = 299; + public static readonly QUOTE_ANALYZER = 300; + public static readonly QUOTE_FIELD_SUFFIX = 301; + public static readonly REWRITE = 302; + public static readonly SLOP = 303; + public static readonly TIE_BREAKER = 304; + public static readonly TIME_ZONE = 305; + public static readonly TYPE = 306; + public static readonly ZERO_TERMS_QUERY = 307; + public static readonly HIGHLIGHT = 308; + public static readonly HIGHLIGHT_PRE_TAGS = 309; + public static readonly HIGHLIGHT_POST_TAGS = 310; + public static readonly MATCH_BOOL_PREFIX = 311; + public static readonly STAR = 312; + public static readonly SLASH = 313; + public static readonly MODULE = 314; + public static readonly PLUS = 315; + public static readonly MINUS = 316; + public static readonly DIV = 317; + public static readonly MOD = 318; + public static readonly EQUAL_SYMBOL = 319; + public static readonly GREATER_SYMBOL = 320; + public static readonly LESS_SYMBOL = 321; + public static readonly EXCLAMATION_SYMBOL = 322; + public static readonly BIT_NOT_OP = 323; + public static readonly BIT_OR_OP = 324; + public static readonly BIT_AND_OP = 325; + public static readonly BIT_XOR_OP = 326; + public static readonly DOT = 327; + public static readonly LR_BRACKET = 328; + public static readonly RR_BRACKET = 329; + public static readonly LT_SQR_PRTHS = 330; + public static readonly RT_SQR_PRTHS = 331; + public static readonly COMMA = 332; + public static readonly SEMI = 333; + public static readonly AT_SIGN = 334; + public static readonly ZERO_DECIMAL = 335; + public static readonly ONE_DECIMAL = 336; + public static readonly TWO_DECIMAL = 337; + public static readonly SINGLE_QUOTE_SYMB = 338; + public static readonly DOUBLE_QUOTE_SYMB = 339; + public static readonly REVERSE_QUOTE_SYMB = 340; + public static readonly COLON_SYMB = 341; + public static readonly START_NATIONAL_STRING_LITERAL = 342; + public static readonly STRING_LITERAL = 343; + public static readonly DECIMAL_LITERAL = 344; + public static readonly HEXADECIMAL_LITERAL = 345; + public static readonly REAL_LITERAL = 346; + public static readonly NULL_SPEC_LITERAL = 347; + public static readonly BIT_STRING = 348; + public static readonly ID = 349; + public static readonly DOUBLE_QUOTE_ID = 350; + public static readonly BACKTICK_QUOTE_ID = 351; + public static readonly ERROR_RECOGNITION = 352; + public static readonly RULE_root = 0; + public static readonly RULE_sqlStatement = 1; + public static readonly RULE_dmlStatement = 2; + public static readonly RULE_selectStatement = 3; + public static readonly RULE_adminStatement = 4; + public static readonly RULE_showStatement = 5; + public static readonly RULE_describeStatement = 6; + public static readonly RULE_columnFilter = 7; + public static readonly RULE_tableFilter = 8; + public static readonly RULE_showDescribePattern = 9; + public static readonly RULE_compatibleID = 10; + public static readonly RULE_querySpecification = 11; + public static readonly RULE_selectClause = 12; + public static readonly RULE_selectSpec = 13; + public static readonly RULE_selectElements = 14; + public static readonly RULE_selectElement = 15; + public static readonly RULE_fromClause = 16; + public static readonly RULE_relation = 17; + public static readonly RULE_whereClause = 18; + public static readonly RULE_groupByClause = 19; + public static readonly RULE_groupByElements = 20; + public static readonly RULE_groupByElement = 21; + public static readonly RULE_havingClause = 22; + public static readonly RULE_orderByClause = 23; + public static readonly RULE_orderByElement = 24; + public static readonly RULE_limitClause = 25; + public static readonly RULE_windowFunctionClause = 26; + public static readonly RULE_windowFunction = 27; + public static readonly RULE_overClause = 28; + public static readonly RULE_partitionByClause = 29; + public static readonly RULE_constant = 30; + public static readonly RULE_decimalLiteral = 31; + public static readonly RULE_numericLiteral = 32; + public static readonly RULE_stringLiteral = 33; + public static readonly RULE_booleanLiteral = 34; + public static readonly RULE_realLiteral = 35; + public static readonly RULE_sign = 36; + public static readonly RULE_nullLiteral = 37; + public static readonly RULE_datetimeLiteral = 38; + public static readonly RULE_dateLiteral = 39; + public static readonly RULE_timeLiteral = 40; + public static readonly RULE_timestampLiteral = 41; + public static readonly RULE_datetimeConstantLiteral = 42; + public static readonly RULE_intervalLiteral = 43; + public static readonly RULE_intervalUnit = 44; + public static readonly RULE_expression = 45; + public static readonly RULE_predicate = 46; + public static readonly RULE_expressions = 47; + public static readonly RULE_expressionAtom = 48; + public static readonly RULE_comparisonOperator = 49; + public static readonly RULE_nullNotnull = 50; + public static readonly RULE_functionCall = 51; + public static readonly RULE_timestampFunction = 52; + public static readonly RULE_timestampFunctionName = 53; + public static readonly RULE_getFormatFunction = 54; + public static readonly RULE_getFormatType = 55; + public static readonly RULE_extractFunction = 56; + public static readonly RULE_simpleDateTimePart = 57; + public static readonly RULE_complexDateTimePart = 58; + public static readonly RULE_datetimePart = 59; + public static readonly RULE_highlightFunction = 60; + public static readonly RULE_positionFunction = 61; + public static readonly RULE_matchQueryAltSyntaxFunction = 62; + public static readonly RULE_scalarFunctionName = 63; + public static readonly RULE_specificFunction = 64; + public static readonly RULE_relevanceFunction = 65; + public static readonly RULE_scoreRelevanceFunction = 66; + public static readonly RULE_noFieldRelevanceFunction = 67; + public static readonly RULE_singleFieldRelevanceFunction = 68; + public static readonly RULE_multiFieldRelevanceFunction = 69; + public static readonly RULE_altSingleFieldRelevanceFunction = 70; + public static readonly RULE_altMultiFieldRelevanceFunction = 71; + public static readonly RULE_convertedDataType = 72; + public static readonly RULE_caseFuncAlternative = 73; + public static readonly RULE_aggregateFunction = 74; + public static readonly RULE_percentileApproxFunction = 75; + public static readonly RULE_filterClause = 76; + public static readonly RULE_aggregationFunctionName = 77; + public static readonly RULE_mathematicalFunctionName = 78; + public static readonly RULE_trigonometricFunctionName = 79; + public static readonly RULE_arithmeticFunctionName = 80; + public static readonly RULE_dateTimeFunctionName = 81; + public static readonly RULE_textFunctionName = 82; + public static readonly RULE_flowControlFunctionName = 83; + public static readonly RULE_noFieldRelevanceFunctionName = 84; + public static readonly RULE_systemFunctionName = 85; + public static readonly RULE_nestedFunctionName = 86; + public static readonly RULE_scoreRelevanceFunctionName = 87; + public static readonly RULE_singleFieldRelevanceFunctionName = 88; + public static readonly RULE_multiFieldRelevanceFunctionName = 89; + public static readonly RULE_altSingleFieldRelevanceFunctionName = 90; + public static readonly RULE_altMultiFieldRelevanceFunctionName = 91; + public static readonly RULE_functionArgs = 92; + public static readonly RULE_functionArg = 93; + public static readonly RULE_relevanceArg = 94; + public static readonly RULE_highlightArg = 95; + public static readonly RULE_relevanceArgName = 96; + public static readonly RULE_highlightArgName = 97; + public static readonly RULE_relevanceFieldAndWeight = 98; + public static readonly RULE_relevanceFieldWeight = 99; + public static readonly RULE_relevanceField = 100; + public static readonly RULE_relevanceQuery = 101; + public static readonly RULE_relevanceArgValue = 102; + public static readonly RULE_highlightArgValue = 103; + public static readonly RULE_alternateMultiMatchArgName = 104; + public static readonly RULE_alternateMultiMatchQuery = 105; + public static readonly RULE_alternateMultiMatchField = 106; + public static readonly RULE_tableName = 107; + public static readonly RULE_columnName = 108; + public static readonly RULE_allTupleFields = 109; + public static readonly RULE_alias = 110; + public static readonly RULE_qualifiedName = 111; + public static readonly RULE_ident = 112; + public static readonly RULE_keywordsCanBeId = 113; + + public static readonly literalNames = [ + null, null, null, null, null, "'ALL'", "'AND'", "'AS'", "'ASC'", + "'BOOLEAN'", "'BETWEEN'", "'BY'", "'CASE'", "'CAST'", "'CROSS'", + "'COLUMNS'", "'DATETIME'", "'DELETE'", "'DESC'", "'DESCRIBE'", "'DISTINCT'", + "'DOUBLE'", "'ELSE'", "'EXISTS'", "'FALSE'", "'FLOAT'", "'FIRST'", + "'FROM'", "'GROUP'", "'HAVING'", "'IN'", "'INNER'", "'INT'", "'INTEGER'", + "'IS'", "'JOIN'", "'LAST'", "'LEFT'", "'LIKE'", "'LIMIT'", "'LONG'", + "'MATCH'", "'NATURAL'", "'MISSING'", "'NOT'", "'NULL'", "'NULLS'", + "'ON'", "'OR'", "'ORDER'", "'OUTER'", "'OVER'", "'PARTITION'", "'REGEXP'", + "'RIGHT'", "'SELECT'", "'SHOW'", "'STRING'", "'THEN'", "'TRUE'", + "'UNION'", "'USING'", "'WHEN'", "'WHERE'", "'MINUS'", "'AVG'", "'COUNT'", + "'MAX'", "'MIN'", "'SUM'", "'VAR_POP'", "'VAR_SAMP'", "'VARIANCE'", + "'STD'", "'STDDEV'", "'STDDEV_POP'", "'STDDEV_SAMP'", "'SUBSTRING'", + "'TRIM'", "'END'", "'FULL'", "'OFFSET'", "'INTERVAL'", "'MICROSECOND'", + "'SECOND'", "'MINUTE'", "'HOUR'", "'DAY'", "'WEEK'", "'MONTH'", + "'QUARTER'", "'YEAR'", "'SECOND_MICROSECOND'", "'MINUTE_MICROSECOND'", + "'MINUTE_SECOND'", "'HOUR_MICROSECOND'", "'HOUR_SECOND'", "'HOUR_MINUTE'", + "'DAY_MICROSECOND'", "'DAY_SECOND'", "'DAY_MINUTE'", "'DAY_HOUR'", + "'YEAR_MONTH'", "'TABLES'", "'ABS'", "'ACOS'", "'ADD'", "'ADDTIME'", + "'ASCII'", "'ASIN'", "'ATAN'", "'ATAN2'", "'CBRT'", "'CEIL'", "'CEILING'", + "'CONCAT'", "'CONCAT_WS'", "'CONV'", "'CONVERT_TZ'", "'COS'", "'COSH'", + "'COT'", "'CRC32'", "'CURDATE'", "'CURTIME'", "'CURRENT_DATE'", + "'CURRENT_TIME'", "'CURRENT_TIMESTAMP'", "'DATE'", "'DATE_ADD'", + "'DATE_FORMAT'", "'DATE_SUB'", "'DATEDIFF'", "'DAYNAME'", "'DAYOFMONTH'", + "'DAYOFWEEK'", "'DAYOFYEAR'", "'DEGREES'", "'DIVIDE'", "'E'", "'EXP'", + "'EXPM1'", "'EXTRACT'", "'FLOOR'", "'FROM_DAYS'", "'FROM_UNIXTIME'", + "'GET_FORMAT'", "'IF'", "'IFNULL'", "'ISNULL'", "'LAST_DAY'", "'LENGTH'", + "'LN'", "'LOCALTIME'", "'LOCALTIMESTAMP'", "'LOCATE'", "'LOG'", + "'LOG10'", "'LOG2'", "'LOWER'", "'LTRIM'", "'MAKEDATE'", "'MAKETIME'", + "'MODULUS'", "'MONTHNAME'", "'MULTIPLY'", "'NOW'", "'NULLIF'", "'PERIOD_ADD'", + "'PERIOD_DIFF'", "'PI'", "'POSITION'", "'POW'", "'POWER'", "'RADIANS'", + "'RAND'", "'REPLACE'", "'RINT'", "'ROUND'", "'RTRIM'", "'REVERSE'", + "'SEC_TO_TIME'", "'SIGN'", "'SIGNUM'", "'SIN'", "'SINH'", "'SQRT'", + "'STR_TO_DATE'", "'SUBDATE'", "'SUBTIME'", "'SUBTRACT'", "'SYSDATE'", + "'TAN'", "'TIME'", "'TIMEDIFF'", "'TIME_FORMAT'", "'TIME_TO_SEC'", + "'TIMESTAMP'", "'TRUNCATE'", "'TO_DAYS'", "'TO_SECONDS'", "'UNIX_TIMESTAMP'", + "'UPPER'", "'UTC_DATE'", "'UTC_TIME'", "'UTC_TIMESTAMP'", "'D'", + "'T'", "'TS'", "'{'", "'}'", "'DENSE_RANK'", "'RANK'", "'ROW_NUMBER'", + "'DATE_HISTOGRAM'", "'DAY_OF_MONTH'", "'DAY_OF_YEAR'", "'DAY_OF_WEEK'", + "'EXCLUDE'", "'EXTENDED_STATS'", "'FIELD'", "'FILTER'", "'GEO_BOUNDING_BOX'", + "'GEO_CELL'", "'GEO_DISTANCE'", "'GEO_DISTANCE_RANGE'", "'GEO_INTERSECTS'", + "'GEO_POLYGON'", "'HISTOGRAM'", "'HOUR_OF_DAY'", "'INCLUDE'", "'IN_TERMS'", + "'MATCHPHRASE'", "'MATCH_PHRASE'", "'MATCHPHRASEQUERY'", "'SIMPLE_QUERY_STRING'", + "'QUERY_STRING'", "'MATCH_PHRASE_PREFIX'", "'MATCHQUERY'", "'MATCH_QUERY'", + "'MINUTE_OF_DAY'", "'MINUTE_OF_HOUR'", "'MONTH_OF_YEAR'", "'MULTIMATCH'", + "'MULTI_MATCH'", "'MULTIMATCHQUERY'", "'NESTED'", "'PERCENTILES'", + "'PERCENTILE'", "'PERCENTILE_APPROX'", "'REGEXP_QUERY'", "'REVERSE_NESTED'", + "'QUERY'", "'RANGE'", "'SCORE'", "'SCOREQUERY'", "'SCORE_QUERY'", + "'SECOND_OF_MINUTE'", "'STATS'", "'TERM'", "'TERMS'", "'TIMESTAMPADD'", + "'TIMESTAMPDIFF'", "'TOPHITS'", "'TYPEOF'", "'WEEK_OF_YEAR'", "'WEEKOFYEAR'", + "'WEEKDAY'", "'WILDCARDQUERY'", "'WILDCARD_QUERY'", "'SUBSTR'", + "'STRCMP'", "'ADDDATE'", "'YEARWEEK'", "'ALLOW_LEADING_WILDCARD'", + "'ANALYZER'", "'ANALYZE_WILDCARD'", "'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY'", + "'BOOST'", "'CASE_INSENSITIVE'", "'CUTOFF_FREQUENCY'", "'DEFAULT_FIELD'", + "'DEFAULT_OPERATOR'", "'ESCAPE'", "'ENABLE_POSITION_INCREMENTS'", + "'FIELDS'", "'FLAGS'", "'FUZZINESS'", "'FUZZY_MAX_EXPANSIONS'", + "'FUZZY_PREFIX_LENGTH'", "'FUZZY_REWRITE'", "'FUZZY_TRANSPOSITIONS'", + "'LENIENT'", "'LOW_FREQ_OPERATOR'", "'MAX_DETERMINIZED_STATES'", + "'MAX_EXPANSIONS'", "'MINIMUM_SHOULD_MATCH'", "'OPERATOR'", "'PHRASE_SLOP'", + "'PREFIX_LENGTH'", "'QUOTE_ANALYZER'", "'QUOTE_FIELD_SUFFIX'", "'REWRITE'", + "'SLOP'", "'TIE_BREAKER'", "'TIME_ZONE'", "'TYPE'", "'ZERO_TERMS_QUERY'", + "'HIGHLIGHT'", "'PRE_TAGS'", "'POST_TAGS'", "'MATCH_BOOL_PREFIX'", + "'*'", "'/'", "'%'", "'+'", "'-'", "'DIV'", "'MOD'", "'='", "'>'", + "'<'", "'!'", "'~'", "'|'", "'&'", "'^'", "'.'", "'('", "')'", "'['", + "']'", "','", "';'", "'@'", "'0'", "'1'", "'2'", "'''", "'\"'", + "'`'", "':'" + ]; + + public static readonly symbolicNames = [ + null, "SPACE", "SPEC_SQL_COMMENT", "COMMENT_INPUT", "LINE_COMMENT", + "ALL", "AND", "AS", "ASC", "BOOLEAN", "BETWEEN", "BY", "CASE", "CAST", + "CROSS", "COLUMNS", "DATETIME", "DELETE", "DESC", "DESCRIBE", "DISTINCT", + "DOUBLE", "ELSE", "EXISTS", "FALSE", "FLOAT", "FIRST", "FROM", "GROUP", + "HAVING", "IN", "INNER", "INT", "INTEGER", "IS", "JOIN", "LAST", + "LEFT", "LIKE", "LIMIT", "LONG", "MATCH", "NATURAL", "MISSING_LITERAL", + "NOT", "NULL_LITERAL", "NULLS", "ON", "OR", "ORDER", "OUTER", "OVER", + "PARTITION", "REGEXP", "RIGHT", "SELECT", "SHOW", "STRING", "THEN", + "TRUE", "UNION", "USING", "WHEN", "WHERE", "EXCEPT", "AVG", "COUNT", + "MAX", "MIN", "SUM", "VAR_POP", "VAR_SAMP", "VARIANCE", "STD", "STDDEV", + "STDDEV_POP", "STDDEV_SAMP", "SUBSTRING", "TRIM", "END", "FULL", + "OFFSET", "INTERVAL", "MICROSECOND", "SECOND", "MINUTE", "HOUR", + "DAY", "WEEK", "MONTH", "QUARTER", "YEAR", "SECOND_MICROSECOND", + "MINUTE_MICROSECOND", "MINUTE_SECOND", "HOUR_MICROSECOND", "HOUR_SECOND", + "HOUR_MINUTE", "DAY_MICROSECOND", "DAY_SECOND", "DAY_MINUTE", "DAY_HOUR", + "YEAR_MONTH", "TABLES", "ABS", "ACOS", "ADD", "ADDTIME", "ASCII", + "ASIN", "ATAN", "ATAN2", "CBRT", "CEIL", "CEILING", "CONCAT", "CONCAT_WS", + "CONV", "CONVERT_TZ", "COS", "COSH", "COT", "CRC32", "CURDATE", + "CURTIME", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP", + "DATE", "DATE_ADD", "DATE_FORMAT", "DATE_SUB", "DATEDIFF", "DAYNAME", + "DAYOFMONTH", "DAYOFWEEK", "DAYOFYEAR", "DEGREES", "DIVIDE", "E", + "EXP", "EXPM1", "EXTRACT", "FLOOR", "FROM_DAYS", "FROM_UNIXTIME", + "GET_FORMAT", "IF", "IFNULL", "ISNULL", "LAST_DAY", "LENGTH", "LN", + "LOCALTIME", "LOCALTIMESTAMP", "LOCATE", "LOG", "LOG10", "LOG2", + "LOWER", "LTRIM", "MAKEDATE", "MAKETIME", "MODULUS", "MONTHNAME", + "MULTIPLY", "NOW", "NULLIF", "PERIOD_ADD", "PERIOD_DIFF", "PI", + "POSITION", "POW", "POWER", "RADIANS", "RAND", "REPLACE", "RINT", + "ROUND", "RTRIM", "REVERSE", "SEC_TO_TIME", "SIGN", "SIGNUM", "SIN", + "SINH", "SQRT", "STR_TO_DATE", "SUBDATE", "SUBTIME", "SUBTRACT", + "SYSDATE", "TAN", "TIME", "TIMEDIFF", "TIME_FORMAT", "TIME_TO_SEC", + "TIMESTAMP", "TRUNCATE", "TO_DAYS", "TO_SECONDS", "UNIX_TIMESTAMP", + "UPPER", "UTC_DATE", "UTC_TIME", "UTC_TIMESTAMP", "D", "T", "TS", + "LEFT_BRACE", "RIGHT_BRACE", "DENSE_RANK", "RANK", "ROW_NUMBER", + "DATE_HISTOGRAM", "DAY_OF_MONTH", "DAY_OF_YEAR", "DAY_OF_WEEK", + "EXCLUDE", "EXTENDED_STATS", "FIELD", "FILTER", "GEO_BOUNDING_BOX", + "GEO_CELL", "GEO_DISTANCE", "GEO_DISTANCE_RANGE", "GEO_INTERSECTS", + "GEO_POLYGON", "HISTOGRAM", "HOUR_OF_DAY", "INCLUDE", "IN_TERMS", + "MATCHPHRASE", "MATCH_PHRASE", "MATCHPHRASEQUERY", "SIMPLE_QUERY_STRING", + "QUERY_STRING", "MATCH_PHRASE_PREFIX", "MATCHQUERY", "MATCH_QUERY", + "MINUTE_OF_DAY", "MINUTE_OF_HOUR", "MONTH_OF_YEAR", "MULTIMATCH", + "MULTI_MATCH", "MULTIMATCHQUERY", "NESTED", "PERCENTILES", "PERCENTILE", + "PERCENTILE_APPROX", "REGEXP_QUERY", "REVERSE_NESTED", "QUERY", + "RANGE", "SCORE", "SCOREQUERY", "SCORE_QUERY", "SECOND_OF_MINUTE", + "STATS", "TERM", "TERMS", "TIMESTAMPADD", "TIMESTAMPDIFF", "TOPHITS", + "TYPEOF", "WEEK_OF_YEAR", "WEEKOFYEAR", "WEEKDAY", "WILDCARDQUERY", + "WILDCARD_QUERY", "SUBSTR", "STRCMP", "ADDDATE", "YEARWEEK", "ALLOW_LEADING_WILDCARD", + "ANALYZER", "ANALYZE_WILDCARD", "AUTO_GENERATE_SYNONYMS_PHRASE_QUERY", + "BOOST", "CASE_INSENSITIVE", "CUTOFF_FREQUENCY", "DEFAULT_FIELD", + "DEFAULT_OPERATOR", "ESCAPE", "ENABLE_POSITION_INCREMENTS", "FIELDS", + "FLAGS", "FUZZINESS", "FUZZY_MAX_EXPANSIONS", "FUZZY_PREFIX_LENGTH", + "FUZZY_REWRITE", "FUZZY_TRANSPOSITIONS", "LENIENT", "LOW_FREQ_OPERATOR", + "MAX_DETERMINIZED_STATES", "MAX_EXPANSIONS", "MINIMUM_SHOULD_MATCH", + "OPERATOR", "PHRASE_SLOP", "PREFIX_LENGTH", "QUOTE_ANALYZER", "QUOTE_FIELD_SUFFIX", + "REWRITE", "SLOP", "TIE_BREAKER", "TIME_ZONE", "TYPE", "ZERO_TERMS_QUERY", + "HIGHLIGHT", "HIGHLIGHT_PRE_TAGS", "HIGHLIGHT_POST_TAGS", "MATCH_BOOL_PREFIX", + "STAR", "SLASH", "MODULE", "PLUS", "MINUS", "DIV", "MOD", "EQUAL_SYMBOL", + "GREATER_SYMBOL", "LESS_SYMBOL", "EXCLAMATION_SYMBOL", "BIT_NOT_OP", + "BIT_OR_OP", "BIT_AND_OP", "BIT_XOR_OP", "DOT", "LR_BRACKET", "RR_BRACKET", + "LT_SQR_PRTHS", "RT_SQR_PRTHS", "COMMA", "SEMI", "AT_SIGN", "ZERO_DECIMAL", + "ONE_DECIMAL", "TWO_DECIMAL", "SINGLE_QUOTE_SYMB", "DOUBLE_QUOTE_SYMB", + "REVERSE_QUOTE_SYMB", "COLON_SYMB", "START_NATIONAL_STRING_LITERAL", + "STRING_LITERAL", "DECIMAL_LITERAL", "HEXADECIMAL_LITERAL", "REAL_LITERAL", + "NULL_SPEC_LITERAL", "BIT_STRING", "ID", "DOUBLE_QUOTE_ID", "BACKTICK_QUOTE_ID", + "ERROR_RECOGNITION" + ]; + public static readonly ruleNames = [ + "root", "sqlStatement", "dmlStatement", "selectStatement", "adminStatement", + "showStatement", "describeStatement", "columnFilter", "tableFilter", + "showDescribePattern", "compatibleID", "querySpecification", "selectClause", + "selectSpec", "selectElements", "selectElement", "fromClause", "relation", + "whereClause", "groupByClause", "groupByElements", "groupByElement", + "havingClause", "orderByClause", "orderByElement", "limitClause", + "windowFunctionClause", "windowFunction", "overClause", "partitionByClause", + "constant", "decimalLiteral", "numericLiteral", "stringLiteral", + "booleanLiteral", "realLiteral", "sign", "nullLiteral", "datetimeLiteral", + "dateLiteral", "timeLiteral", "timestampLiteral", "datetimeConstantLiteral", + "intervalLiteral", "intervalUnit", "expression", "predicate", "expressions", + "expressionAtom", "comparisonOperator", "nullNotnull", "functionCall", + "timestampFunction", "timestampFunctionName", "getFormatFunction", + "getFormatType", "extractFunction", "simpleDateTimePart", "complexDateTimePart", + "datetimePart", "highlightFunction", "positionFunction", "matchQueryAltSyntaxFunction", + "scalarFunctionName", "specificFunction", "relevanceFunction", "scoreRelevanceFunction", + "noFieldRelevanceFunction", "singleFieldRelevanceFunction", "multiFieldRelevanceFunction", + "altSingleFieldRelevanceFunction", "altMultiFieldRelevanceFunction", + "convertedDataType", "caseFuncAlternative", "aggregateFunction", + "percentileApproxFunction", "filterClause", "aggregationFunctionName", + "mathematicalFunctionName", "trigonometricFunctionName", "arithmeticFunctionName", + "dateTimeFunctionName", "textFunctionName", "flowControlFunctionName", + "noFieldRelevanceFunctionName", "systemFunctionName", "nestedFunctionName", + "scoreRelevanceFunctionName", "singleFieldRelevanceFunctionName", + "multiFieldRelevanceFunctionName", "altSingleFieldRelevanceFunctionName", + "altMultiFieldRelevanceFunctionName", "functionArgs", "functionArg", + "relevanceArg", "highlightArg", "relevanceArgName", "highlightArgName", + "relevanceFieldAndWeight", "relevanceFieldWeight", "relevanceField", + "relevanceQuery", "relevanceArgValue", "highlightArgValue", "alternateMultiMatchArgName", + "alternateMultiMatchQuery", "alternateMultiMatchField", "tableName", + "columnName", "allTupleFields", "alias", "qualifiedName", "ident", + "keywordsCanBeId", + ]; + + public get grammarFileName(): string { return "OpenSearchSQLParser.g4"; } + public get literalNames(): (string | null)[] { return OpenSearchSQLParser.literalNames; } + public get symbolicNames(): (string | null)[] { return OpenSearchSQLParser.symbolicNames; } + public get ruleNames(): string[] { return OpenSearchSQLParser.ruleNames; } + public get serializedATN(): number[] { return OpenSearchSQLParser._serializedATN; } + + protected createFailedPredicateException(predicate?: string, message?: string): antlr.FailedPredicateException { + return new antlr.FailedPredicateException(this, predicate, message); + } + + public constructor(input: antlr.TokenStream) { + super(input); + this.interpreter = new antlr.ParserATNSimulator(this, OpenSearchSQLParser._ATN, OpenSearchSQLParser.decisionsToDFA, new antlr.PredictionContextCache()); + } + public root(): RootContext { + let localContext = new RootContext(this.context, this.state); + this.enterRule(localContext, 0, OpenSearchSQLParser.RULE_root); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 229; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 19 || _la === 55 || _la === 56) { + { + this.state = 228; + this.sqlStatement(); + } + } + + this.state = 232; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 333) { + { + this.state = 231; + this.match(OpenSearchSQLParser.SEMI); + } + } + + this.state = 234; + this.match(OpenSearchSQLParser.EOF); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public sqlStatement(): SqlStatementContext { + let localContext = new SqlStatementContext(this.context, this.state); + this.enterRule(localContext, 2, OpenSearchSQLParser.RULE_sqlStatement); + try { + this.state = 238; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchSQLParser.SELECT: + this.enterOuterAlt(localContext, 1); + { + this.state = 236; + this.dmlStatement(); + } + break; + case OpenSearchSQLParser.DESCRIBE: + case OpenSearchSQLParser.SHOW: + this.enterOuterAlt(localContext, 2); + { + this.state = 237; + this.adminStatement(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public dmlStatement(): DmlStatementContext { + let localContext = new DmlStatementContext(this.context, this.state); + this.enterRule(localContext, 4, OpenSearchSQLParser.RULE_dmlStatement); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 240; + this.selectStatement(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public selectStatement(): SelectStatementContext { + let localContext = new SelectStatementContext(this.context, this.state); + this.enterRule(localContext, 6, OpenSearchSQLParser.RULE_selectStatement); + try { + localContext = new SimpleSelectContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 242; + this.querySpecification(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public adminStatement(): AdminStatementContext { + let localContext = new AdminStatementContext(this.context, this.state); + this.enterRule(localContext, 8, OpenSearchSQLParser.RULE_adminStatement); + try { + this.state = 246; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchSQLParser.SHOW: + this.enterOuterAlt(localContext, 1); + { + this.state = 244; + this.showStatement(); + } + break; + case OpenSearchSQLParser.DESCRIBE: + this.enterOuterAlt(localContext, 2); + { + this.state = 245; + this.describeStatement(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public showStatement(): ShowStatementContext { + let localContext = new ShowStatementContext(this.context, this.state); + this.enterRule(localContext, 10, OpenSearchSQLParser.RULE_showStatement); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 248; + this.match(OpenSearchSQLParser.SHOW); + this.state = 249; + this.match(OpenSearchSQLParser.TABLES); + this.state = 250; + this.tableFilter(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public describeStatement(): DescribeStatementContext { + let localContext = new DescribeStatementContext(this.context, this.state); + this.enterRule(localContext, 12, OpenSearchSQLParser.RULE_describeStatement); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 252; + this.match(OpenSearchSQLParser.DESCRIBE); + this.state = 253; + this.match(OpenSearchSQLParser.TABLES); + this.state = 254; + this.tableFilter(); + this.state = 256; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 15) { + { + this.state = 255; + this.columnFilter(); + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public columnFilter(): ColumnFilterContext { + let localContext = new ColumnFilterContext(this.context, this.state); + this.enterRule(localContext, 14, OpenSearchSQLParser.RULE_columnFilter); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 258; + this.match(OpenSearchSQLParser.COLUMNS); + this.state = 259; + this.match(OpenSearchSQLParser.LIKE); + this.state = 260; + this.showDescribePattern(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public tableFilter(): TableFilterContext { + let localContext = new TableFilterContext(this.context, this.state); + this.enterRule(localContext, 16, OpenSearchSQLParser.RULE_tableFilter); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 262; + this.match(OpenSearchSQLParser.LIKE); + this.state = 263; + this.showDescribePattern(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public showDescribePattern(): ShowDescribePatternContext { + let localContext = new ShowDescribePatternContext(this.context, this.state); + this.enterRule(localContext, 18, OpenSearchSQLParser.RULE_showDescribePattern); + try { + this.state = 267; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchSQLParser.MODULE: + case OpenSearchSQLParser.ID: + this.enterOuterAlt(localContext, 1); + { + this.state = 265; + localContext._oldID = this.compatibleID(); + } + break; + case OpenSearchSQLParser.STRING_LITERAL: + case OpenSearchSQLParser.DOUBLE_QUOTE_ID: + this.enterOuterAlt(localContext, 2); + { + this.state = 266; + this.stringLiteral(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public compatibleID(): CompatibleIDContext { + let localContext = new CompatibleIDContext(this.context, this.state); + this.enterRule(localContext, 20, OpenSearchSQLParser.RULE_compatibleID); + let _la: number; + try { + let alternative: number; + this.enterOuterAlt(localContext, 1); + { + this.state = 270; + this.errorHandler.sync(this); + alternative = 1 + 1; + do { + switch (alternative) { + case 1 + 1: + { + { + this.state = 269; + _la = this.tokenStream.LA(1); + if(!(_la === 314 || _la === 349)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + break; + default: + throw new antlr.NoViableAltException(this); + } + this.state = 272; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 6, this.context); + } while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public querySpecification(): QuerySpecificationContext { + let localContext = new QuerySpecificationContext(this.context, this.state); + this.enterRule(localContext, 22, OpenSearchSQLParser.RULE_querySpecification); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 274; + this.selectClause(); + this.state = 276; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 27) { + { + this.state = 275; + this.fromClause(); + } + } + + this.state = 279; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 39) { + { + this.state = 278; + this.limitClause(); + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public selectClause(): SelectClauseContext { + let localContext = new SelectClauseContext(this.context, this.state); + this.enterRule(localContext, 24, OpenSearchSQLParser.RULE_selectClause); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 281; + this.match(OpenSearchSQLParser.SELECT); + this.state = 283; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 5 || _la === 20) { + { + this.state = 282; + this.selectSpec(); + } + } + + this.state = 285; + this.selectElements(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public selectSpec(): SelectSpecContext { + let localContext = new SelectSpecContext(this.context, this.state); + this.enterRule(localContext, 26, OpenSearchSQLParser.RULE_selectSpec); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 287; + _la = this.tokenStream.LA(1); + if(!(_la === 5 || _la === 20)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public selectElements(): SelectElementsContext { + let localContext = new SelectElementsContext(this.context, this.state); + this.enterRule(localContext, 28, OpenSearchSQLParser.RULE_selectElements); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 291; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchSQLParser.STAR: + { + this.state = 289; + localContext._star = this.match(OpenSearchSQLParser.STAR); + } + break; + case OpenSearchSQLParser.CASE: + case OpenSearchSQLParser.CAST: + case OpenSearchSQLParser.DATETIME: + case OpenSearchSQLParser.FALSE: + case OpenSearchSQLParser.FIRST: + case OpenSearchSQLParser.LAST: + case OpenSearchSQLParser.LEFT: + case OpenSearchSQLParser.MATCH: + case OpenSearchSQLParser.NOT: + case OpenSearchSQLParser.NULL_LITERAL: + case OpenSearchSQLParser.RIGHT: + case OpenSearchSQLParser.TRUE: + case OpenSearchSQLParser.AVG: + case OpenSearchSQLParser.COUNT: + case OpenSearchSQLParser.MAX: + case OpenSearchSQLParser.MIN: + case OpenSearchSQLParser.SUM: + case OpenSearchSQLParser.VAR_POP: + case OpenSearchSQLParser.VAR_SAMP: + case OpenSearchSQLParser.VARIANCE: + case OpenSearchSQLParser.STD: + case OpenSearchSQLParser.STDDEV: + case OpenSearchSQLParser.STDDEV_POP: + case OpenSearchSQLParser.STDDEV_SAMP: + case OpenSearchSQLParser.SUBSTRING: + case OpenSearchSQLParser.TRIM: + case OpenSearchSQLParser.FULL: + case OpenSearchSQLParser.INTERVAL: + case OpenSearchSQLParser.MICROSECOND: + case OpenSearchSQLParser.SECOND: + case OpenSearchSQLParser.MINUTE: + case OpenSearchSQLParser.HOUR: + case OpenSearchSQLParser.DAY: + case OpenSearchSQLParser.WEEK: + case OpenSearchSQLParser.MONTH: + case OpenSearchSQLParser.QUARTER: + case OpenSearchSQLParser.YEAR: + case OpenSearchSQLParser.ABS: + case OpenSearchSQLParser.ACOS: + case OpenSearchSQLParser.ADD: + case OpenSearchSQLParser.ADDTIME: + case OpenSearchSQLParser.ASCII: + case OpenSearchSQLParser.ASIN: + case OpenSearchSQLParser.ATAN: + case OpenSearchSQLParser.ATAN2: + case OpenSearchSQLParser.CBRT: + case OpenSearchSQLParser.CEIL: + case OpenSearchSQLParser.CEILING: + case OpenSearchSQLParser.CONCAT: + case OpenSearchSQLParser.CONCAT_WS: + case OpenSearchSQLParser.CONV: + case OpenSearchSQLParser.CONVERT_TZ: + case OpenSearchSQLParser.COS: + case OpenSearchSQLParser.COSH: + case OpenSearchSQLParser.COT: + case OpenSearchSQLParser.CRC32: + case OpenSearchSQLParser.CURDATE: + case OpenSearchSQLParser.CURTIME: + case OpenSearchSQLParser.CURRENT_DATE: + case OpenSearchSQLParser.CURRENT_TIME: + case OpenSearchSQLParser.CURRENT_TIMESTAMP: + case OpenSearchSQLParser.DATE: + case OpenSearchSQLParser.DATE_ADD: + case OpenSearchSQLParser.DATE_FORMAT: + case OpenSearchSQLParser.DATE_SUB: + case OpenSearchSQLParser.DATEDIFF: + case OpenSearchSQLParser.DAYNAME: + case OpenSearchSQLParser.DAYOFMONTH: + case OpenSearchSQLParser.DAYOFWEEK: + case OpenSearchSQLParser.DAYOFYEAR: + case OpenSearchSQLParser.DEGREES: + case OpenSearchSQLParser.DIVIDE: + case OpenSearchSQLParser.E: + case OpenSearchSQLParser.EXP: + case OpenSearchSQLParser.EXPM1: + case OpenSearchSQLParser.EXTRACT: + case OpenSearchSQLParser.FLOOR: + case OpenSearchSQLParser.FROM_DAYS: + case OpenSearchSQLParser.FROM_UNIXTIME: + case OpenSearchSQLParser.GET_FORMAT: + case OpenSearchSQLParser.IF: + case OpenSearchSQLParser.IFNULL: + case OpenSearchSQLParser.ISNULL: + case OpenSearchSQLParser.LAST_DAY: + case OpenSearchSQLParser.LENGTH: + case OpenSearchSQLParser.LN: + case OpenSearchSQLParser.LOCALTIME: + case OpenSearchSQLParser.LOCALTIMESTAMP: + case OpenSearchSQLParser.LOCATE: + case OpenSearchSQLParser.LOG: + case OpenSearchSQLParser.LOG10: + case OpenSearchSQLParser.LOG2: + case OpenSearchSQLParser.LOWER: + case OpenSearchSQLParser.LTRIM: + case OpenSearchSQLParser.MAKEDATE: + case OpenSearchSQLParser.MAKETIME: + case OpenSearchSQLParser.MODULUS: + case OpenSearchSQLParser.MONTHNAME: + case OpenSearchSQLParser.MULTIPLY: + case OpenSearchSQLParser.NOW: + case OpenSearchSQLParser.NULLIF: + case OpenSearchSQLParser.PERIOD_ADD: + case OpenSearchSQLParser.PERIOD_DIFF: + case OpenSearchSQLParser.PI: + case OpenSearchSQLParser.POSITION: + case OpenSearchSQLParser.POW: + case OpenSearchSQLParser.POWER: + case OpenSearchSQLParser.RADIANS: + case OpenSearchSQLParser.RAND: + case OpenSearchSQLParser.REPLACE: + case OpenSearchSQLParser.RINT: + case OpenSearchSQLParser.ROUND: + case OpenSearchSQLParser.RTRIM: + case OpenSearchSQLParser.REVERSE: + case OpenSearchSQLParser.SEC_TO_TIME: + case OpenSearchSQLParser.SIGN: + case OpenSearchSQLParser.SIGNUM: + case OpenSearchSQLParser.SIN: + case OpenSearchSQLParser.SINH: + case OpenSearchSQLParser.SQRT: + case OpenSearchSQLParser.STR_TO_DATE: + case OpenSearchSQLParser.SUBDATE: + case OpenSearchSQLParser.SUBTIME: + case OpenSearchSQLParser.SUBTRACT: + case OpenSearchSQLParser.SYSDATE: + case OpenSearchSQLParser.TAN: + case OpenSearchSQLParser.TIME: + case OpenSearchSQLParser.TIMEDIFF: + case OpenSearchSQLParser.TIME_FORMAT: + case OpenSearchSQLParser.TIME_TO_SEC: + case OpenSearchSQLParser.TIMESTAMP: + case OpenSearchSQLParser.TRUNCATE: + case OpenSearchSQLParser.TO_DAYS: + case OpenSearchSQLParser.TO_SECONDS: + case OpenSearchSQLParser.UNIX_TIMESTAMP: + case OpenSearchSQLParser.UPPER: + case OpenSearchSQLParser.UTC_DATE: + case OpenSearchSQLParser.UTC_TIME: + case OpenSearchSQLParser.UTC_TIMESTAMP: + case OpenSearchSQLParser.D: + case OpenSearchSQLParser.T: + case OpenSearchSQLParser.TS: + case OpenSearchSQLParser.LEFT_BRACE: + case OpenSearchSQLParser.DENSE_RANK: + case OpenSearchSQLParser.RANK: + case OpenSearchSQLParser.ROW_NUMBER: + case OpenSearchSQLParser.DAY_OF_MONTH: + case OpenSearchSQLParser.DAY_OF_YEAR: + case OpenSearchSQLParser.DAY_OF_WEEK: + case OpenSearchSQLParser.FIELD: + case OpenSearchSQLParser.HOUR_OF_DAY: + case OpenSearchSQLParser.MATCHPHRASE: + case OpenSearchSQLParser.MATCH_PHRASE: + case OpenSearchSQLParser.MATCHPHRASEQUERY: + case OpenSearchSQLParser.SIMPLE_QUERY_STRING: + case OpenSearchSQLParser.QUERY_STRING: + case OpenSearchSQLParser.MATCH_PHRASE_PREFIX: + case OpenSearchSQLParser.MATCHQUERY: + case OpenSearchSQLParser.MATCH_QUERY: + case OpenSearchSQLParser.MINUTE_OF_DAY: + case OpenSearchSQLParser.MINUTE_OF_HOUR: + case OpenSearchSQLParser.MONTH_OF_YEAR: + case OpenSearchSQLParser.MULTIMATCH: + case OpenSearchSQLParser.MULTI_MATCH: + case OpenSearchSQLParser.MULTIMATCHQUERY: + case OpenSearchSQLParser.NESTED: + case OpenSearchSQLParser.PERCENTILE: + case OpenSearchSQLParser.PERCENTILE_APPROX: + case OpenSearchSQLParser.QUERY: + case OpenSearchSQLParser.SCORE: + case OpenSearchSQLParser.SCOREQUERY: + case OpenSearchSQLParser.SCORE_QUERY: + case OpenSearchSQLParser.SECOND_OF_MINUTE: + case OpenSearchSQLParser.TIMESTAMPADD: + case OpenSearchSQLParser.TIMESTAMPDIFF: + case OpenSearchSQLParser.TYPEOF: + case OpenSearchSQLParser.WEEK_OF_YEAR: + case OpenSearchSQLParser.WEEKOFYEAR: + case OpenSearchSQLParser.WEEKDAY: + case OpenSearchSQLParser.WILDCARDQUERY: + case OpenSearchSQLParser.WILDCARD_QUERY: + case OpenSearchSQLParser.SUBSTR: + case OpenSearchSQLParser.STRCMP: + case OpenSearchSQLParser.ADDDATE: + case OpenSearchSQLParser.YEARWEEK: + case OpenSearchSQLParser.TYPE: + case OpenSearchSQLParser.HIGHLIGHT: + case OpenSearchSQLParser.MATCH_BOOL_PREFIX: + case OpenSearchSQLParser.PLUS: + case OpenSearchSQLParser.MINUS: + case OpenSearchSQLParser.MOD: + case OpenSearchSQLParser.DOT: + case OpenSearchSQLParser.LR_BRACKET: + case OpenSearchSQLParser.ZERO_DECIMAL: + case OpenSearchSQLParser.ONE_DECIMAL: + case OpenSearchSQLParser.TWO_DECIMAL: + case OpenSearchSQLParser.STRING_LITERAL: + case OpenSearchSQLParser.DECIMAL_LITERAL: + case OpenSearchSQLParser.REAL_LITERAL: + case OpenSearchSQLParser.ID: + case OpenSearchSQLParser.DOUBLE_QUOTE_ID: + case OpenSearchSQLParser.BACKTICK_QUOTE_ID: + { + this.state = 290; + this.selectElement(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + this.state = 297; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 332) { + { + { + this.state = 293; + this.match(OpenSearchSQLParser.COMMA); + this.state = 294; + this.selectElement(); + } + } + this.state = 299; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public selectElement(): SelectElementContext { + let localContext = new SelectElementContext(this.context, this.state); + this.enterRule(localContext, 30, OpenSearchSQLParser.RULE_selectElement); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 300; + this.expression(0); + this.state = 305; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (((((_la - 7)) & ~0x1F) === 0 && ((1 << (_la - 7)) & 1611137537) !== 0) || ((((_la - 54)) & ~0x1F) === 0 && ((1 << (_la - 54)) & 3850434561) !== 0) || ((((_la - 86)) & ~0x1F) === 0 && ((1 << (_la - 86)) & 4294705215) !== 0) || ((((_la - 118)) & ~0x1F) === 0 && ((1 << (_la - 118)) & 4009754623) !== 0) || ((((_la - 150)) & ~0x1F) === 0 && ((1 << (_la - 150)) & 4292870143) !== 0) || ((((_la - 182)) & ~0x1F) === 0 && ((1 << (_la - 182)) & 134217727) !== 0) || ((((_la - 215)) & ~0x1F) === 0 && ((1 << (_la - 215)) & 2382381095) !== 0) || ((((_la - 257)) & ~0x1F) === 0 && ((1 << (_la - 257)) & 124801) !== 0) || ((((_la - 306)) & ~0x1F) === 0 && ((1 << (_la - 306)) & 2101249) !== 0) || _la === 349 || _la === 351) { + { + this.state = 302; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 7) { + { + this.state = 301; + this.match(OpenSearchSQLParser.AS); + } + } + + this.state = 304; + this.alias(); + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public fromClause(): FromClauseContext { + let localContext = new FromClauseContext(this.context, this.state); + this.enterRule(localContext, 32, OpenSearchSQLParser.RULE_fromClause); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 307; + this.match(OpenSearchSQLParser.FROM); + this.state = 308; + this.relation(); + this.state = 310; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 63) { + { + this.state = 309; + this.whereClause(); + } + } + + this.state = 313; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 28) { + { + this.state = 312; + this.groupByClause(); + } + } + + this.state = 316; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 29) { + { + this.state = 315; + this.havingClause(); + } + } + + this.state = 319; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 49) { + { + this.state = 318; + this.orderByClause(); + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public relation(): RelationContext { + let localContext = new RelationContext(this.context, this.state); + this.enterRule(localContext, 34, OpenSearchSQLParser.RULE_relation); + let _la: number; + try { + this.state = 336; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchSQLParser.DATETIME: + case OpenSearchSQLParser.FIRST: + case OpenSearchSQLParser.LAST: + case OpenSearchSQLParser.LEFT: + case OpenSearchSQLParser.RIGHT: + case OpenSearchSQLParser.AVG: + case OpenSearchSQLParser.COUNT: + case OpenSearchSQLParser.MAX: + case OpenSearchSQLParser.MIN: + case OpenSearchSQLParser.SUM: + case OpenSearchSQLParser.SUBSTRING: + case OpenSearchSQLParser.TRIM: + case OpenSearchSQLParser.FULL: + case OpenSearchSQLParser.MICROSECOND: + case OpenSearchSQLParser.SECOND: + case OpenSearchSQLParser.MINUTE: + case OpenSearchSQLParser.HOUR: + case OpenSearchSQLParser.DAY: + case OpenSearchSQLParser.WEEK: + case OpenSearchSQLParser.MONTH: + case OpenSearchSQLParser.QUARTER: + case OpenSearchSQLParser.YEAR: + case OpenSearchSQLParser.ABS: + case OpenSearchSQLParser.ACOS: + case OpenSearchSQLParser.ADD: + case OpenSearchSQLParser.ADDTIME: + case OpenSearchSQLParser.ASCII: + case OpenSearchSQLParser.ASIN: + case OpenSearchSQLParser.ATAN: + case OpenSearchSQLParser.ATAN2: + case OpenSearchSQLParser.CBRT: + case OpenSearchSQLParser.CEIL: + case OpenSearchSQLParser.CEILING: + case OpenSearchSQLParser.CONCAT: + case OpenSearchSQLParser.CONCAT_WS: + case OpenSearchSQLParser.CONV: + case OpenSearchSQLParser.CONVERT_TZ: + case OpenSearchSQLParser.COS: + case OpenSearchSQLParser.COSH: + case OpenSearchSQLParser.COT: + case OpenSearchSQLParser.CRC32: + case OpenSearchSQLParser.CURDATE: + case OpenSearchSQLParser.CURTIME: + case OpenSearchSQLParser.CURRENT_DATE: + case OpenSearchSQLParser.CURRENT_TIME: + case OpenSearchSQLParser.CURRENT_TIMESTAMP: + case OpenSearchSQLParser.DATE: + case OpenSearchSQLParser.DATE_ADD: + case OpenSearchSQLParser.DATE_FORMAT: + case OpenSearchSQLParser.DATE_SUB: + case OpenSearchSQLParser.DATEDIFF: + case OpenSearchSQLParser.DAYNAME: + case OpenSearchSQLParser.DAYOFMONTH: + case OpenSearchSQLParser.DAYOFWEEK: + case OpenSearchSQLParser.DAYOFYEAR: + case OpenSearchSQLParser.DEGREES: + case OpenSearchSQLParser.DIVIDE: + case OpenSearchSQLParser.E: + case OpenSearchSQLParser.EXP: + case OpenSearchSQLParser.EXPM1: + case OpenSearchSQLParser.FLOOR: + case OpenSearchSQLParser.FROM_DAYS: + case OpenSearchSQLParser.FROM_UNIXTIME: + case OpenSearchSQLParser.IF: + case OpenSearchSQLParser.IFNULL: + case OpenSearchSQLParser.ISNULL: + case OpenSearchSQLParser.LAST_DAY: + case OpenSearchSQLParser.LENGTH: + case OpenSearchSQLParser.LN: + case OpenSearchSQLParser.LOCALTIME: + case OpenSearchSQLParser.LOCALTIMESTAMP: + case OpenSearchSQLParser.LOCATE: + case OpenSearchSQLParser.LOG: + case OpenSearchSQLParser.LOG10: + case OpenSearchSQLParser.LOG2: + case OpenSearchSQLParser.LOWER: + case OpenSearchSQLParser.LTRIM: + case OpenSearchSQLParser.MAKEDATE: + case OpenSearchSQLParser.MAKETIME: + case OpenSearchSQLParser.MODULUS: + case OpenSearchSQLParser.MONTHNAME: + case OpenSearchSQLParser.MULTIPLY: + case OpenSearchSQLParser.NOW: + case OpenSearchSQLParser.NULLIF: + case OpenSearchSQLParser.PERIOD_ADD: + case OpenSearchSQLParser.PERIOD_DIFF: + case OpenSearchSQLParser.PI: + case OpenSearchSQLParser.POW: + case OpenSearchSQLParser.POWER: + case OpenSearchSQLParser.RADIANS: + case OpenSearchSQLParser.RAND: + case OpenSearchSQLParser.REPLACE: + case OpenSearchSQLParser.RINT: + case OpenSearchSQLParser.ROUND: + case OpenSearchSQLParser.RTRIM: + case OpenSearchSQLParser.REVERSE: + case OpenSearchSQLParser.SEC_TO_TIME: + case OpenSearchSQLParser.SIGN: + case OpenSearchSQLParser.SIGNUM: + case OpenSearchSQLParser.SIN: + case OpenSearchSQLParser.SINH: + case OpenSearchSQLParser.SQRT: + case OpenSearchSQLParser.STR_TO_DATE: + case OpenSearchSQLParser.SUBDATE: + case OpenSearchSQLParser.SUBTIME: + case OpenSearchSQLParser.SUBTRACT: + case OpenSearchSQLParser.SYSDATE: + case OpenSearchSQLParser.TAN: + case OpenSearchSQLParser.TIME: + case OpenSearchSQLParser.TIMEDIFF: + case OpenSearchSQLParser.TIME_FORMAT: + case OpenSearchSQLParser.TIME_TO_SEC: + case OpenSearchSQLParser.TIMESTAMP: + case OpenSearchSQLParser.TRUNCATE: + case OpenSearchSQLParser.TO_DAYS: + case OpenSearchSQLParser.TO_SECONDS: + case OpenSearchSQLParser.UNIX_TIMESTAMP: + case OpenSearchSQLParser.UPPER: + case OpenSearchSQLParser.UTC_DATE: + case OpenSearchSQLParser.UTC_TIME: + case OpenSearchSQLParser.UTC_TIMESTAMP: + case OpenSearchSQLParser.D: + case OpenSearchSQLParser.T: + case OpenSearchSQLParser.TS: + case OpenSearchSQLParser.DAY_OF_MONTH: + case OpenSearchSQLParser.DAY_OF_YEAR: + case OpenSearchSQLParser.DAY_OF_WEEK: + case OpenSearchSQLParser.FIELD: + case OpenSearchSQLParser.HOUR_OF_DAY: + case OpenSearchSQLParser.MINUTE_OF_DAY: + case OpenSearchSQLParser.MINUTE_OF_HOUR: + case OpenSearchSQLParser.MONTH_OF_YEAR: + case OpenSearchSQLParser.NESTED: + case OpenSearchSQLParser.SECOND_OF_MINUTE: + case OpenSearchSQLParser.TYPEOF: + case OpenSearchSQLParser.WEEK_OF_YEAR: + case OpenSearchSQLParser.WEEKOFYEAR: + case OpenSearchSQLParser.WEEKDAY: + case OpenSearchSQLParser.SUBSTR: + case OpenSearchSQLParser.STRCMP: + case OpenSearchSQLParser.ADDDATE: + case OpenSearchSQLParser.YEARWEEK: + case OpenSearchSQLParser.TYPE: + case OpenSearchSQLParser.MOD: + case OpenSearchSQLParser.DOT: + case OpenSearchSQLParser.ID: + case OpenSearchSQLParser.BACKTICK_QUOTE_ID: + localContext = new TableAsRelationContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 321; + this.tableName(); + this.state = 326; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (((((_la - 7)) & ~0x1F) === 0 && ((1 << (_la - 7)) & 1611137537) !== 0) || ((((_la - 54)) & ~0x1F) === 0 && ((1 << (_la - 54)) & 3850434561) !== 0) || ((((_la - 86)) & ~0x1F) === 0 && ((1 << (_la - 86)) & 4294705215) !== 0) || ((((_la - 118)) & ~0x1F) === 0 && ((1 << (_la - 118)) & 4009754623) !== 0) || ((((_la - 150)) & ~0x1F) === 0 && ((1 << (_la - 150)) & 4292870143) !== 0) || ((((_la - 182)) & ~0x1F) === 0 && ((1 << (_la - 182)) & 134217727) !== 0) || ((((_la - 215)) & ~0x1F) === 0 && ((1 << (_la - 215)) & 2382381095) !== 0) || ((((_la - 257)) & ~0x1F) === 0 && ((1 << (_la - 257)) & 124801) !== 0) || ((((_la - 306)) & ~0x1F) === 0 && ((1 << (_la - 306)) & 2101249) !== 0) || _la === 349 || _la === 351) { + { + this.state = 323; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 7) { + { + this.state = 322; + this.match(OpenSearchSQLParser.AS); + } + } + + this.state = 325; + this.alias(); + } + } + + } + break; + case OpenSearchSQLParser.LR_BRACKET: + localContext = new SubqueryAsRelationContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 328; + this.match(OpenSearchSQLParser.LR_BRACKET); + this.state = 329; + (localContext as SubqueryAsRelationContext)._subquery = this.querySpecification(); + this.state = 330; + this.match(OpenSearchSQLParser.RR_BRACKET); + this.state = 332; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 7) { + { + this.state = 331; + this.match(OpenSearchSQLParser.AS); + } + } + + this.state = 334; + this.alias(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public whereClause(): WhereClauseContext { + let localContext = new WhereClauseContext(this.context, this.state); + this.enterRule(localContext, 36, OpenSearchSQLParser.RULE_whereClause); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 338; + this.match(OpenSearchSQLParser.WHERE); + this.state = 339; + this.expression(0); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public groupByClause(): GroupByClauseContext { + let localContext = new GroupByClauseContext(this.context, this.state); + this.enterRule(localContext, 38, OpenSearchSQLParser.RULE_groupByClause); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 341; + this.match(OpenSearchSQLParser.GROUP); + this.state = 342; + this.match(OpenSearchSQLParser.BY); + this.state = 343; + this.groupByElements(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public groupByElements(): GroupByElementsContext { + let localContext = new GroupByElementsContext(this.context, this.state); + this.enterRule(localContext, 40, OpenSearchSQLParser.RULE_groupByElements); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 345; + this.groupByElement(); + this.state = 350; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 332) { + { + { + this.state = 346; + this.match(OpenSearchSQLParser.COMMA); + this.state = 347; + this.groupByElement(); + } + } + this.state = 352; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public groupByElement(): GroupByElementContext { + let localContext = new GroupByElementContext(this.context, this.state); + this.enterRule(localContext, 42, OpenSearchSQLParser.RULE_groupByElement); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 353; + this.expression(0); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public havingClause(): HavingClauseContext { + let localContext = new HavingClauseContext(this.context, this.state); + this.enterRule(localContext, 44, OpenSearchSQLParser.RULE_havingClause); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 355; + this.match(OpenSearchSQLParser.HAVING); + this.state = 356; + this.expression(0); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public orderByClause(): OrderByClauseContext { + let localContext = new OrderByClauseContext(this.context, this.state); + this.enterRule(localContext, 46, OpenSearchSQLParser.RULE_orderByClause); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 358; + this.match(OpenSearchSQLParser.ORDER); + this.state = 359; + this.match(OpenSearchSQLParser.BY); + this.state = 360; + this.orderByElement(); + this.state = 365; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 332) { + { + { + this.state = 361; + this.match(OpenSearchSQLParser.COMMA); + this.state = 362; + this.orderByElement(); + } + } + this.state = 367; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public orderByElement(): OrderByElementContext { + let localContext = new OrderByElementContext(this.context, this.state); + this.enterRule(localContext, 48, OpenSearchSQLParser.RULE_orderByElement); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 368; + this.expression(0); + this.state = 370; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 8 || _la === 18) { + { + this.state = 369; + localContext._order = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 8 || _la === 18)) { + localContext._order = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + + this.state = 374; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 46) { + { + this.state = 372; + this.match(OpenSearchSQLParser.NULLS); + this.state = 373; + _la = this.tokenStream.LA(1); + if(!(_la === 26 || _la === 36)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public limitClause(): LimitClauseContext { + let localContext = new LimitClauseContext(this.context, this.state); + this.enterRule(localContext, 50, OpenSearchSQLParser.RULE_limitClause); + try { + this.state = 388; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 27, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 376; + this.match(OpenSearchSQLParser.LIMIT); + this.state = 380; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 26, this.context) ) { + case 1: + { + this.state = 377; + localContext._offset = this.decimalLiteral(); + this.state = 378; + this.match(OpenSearchSQLParser.COMMA); + } + break; + } + this.state = 382; + localContext._limit = this.decimalLiteral(); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 383; + this.match(OpenSearchSQLParser.LIMIT); + this.state = 384; + localContext._limit = this.decimalLiteral(); + this.state = 385; + this.match(OpenSearchSQLParser.OFFSET); + this.state = 386; + localContext._offset = this.decimalLiteral(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public windowFunctionClause(): WindowFunctionClauseContext { + let localContext = new WindowFunctionClauseContext(this.context, this.state); + this.enterRule(localContext, 52, OpenSearchSQLParser.RULE_windowFunctionClause); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 390; + localContext._function_ = this.windowFunction(); + this.state = 391; + this.overClause(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public windowFunction(): WindowFunctionContext { + let localContext = new WindowFunctionContext(this.context, this.state); + this.enterRule(localContext, 54, OpenSearchSQLParser.RULE_windowFunction); + let _la: number; + try { + this.state = 400; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchSQLParser.DENSE_RANK: + case OpenSearchSQLParser.RANK: + case OpenSearchSQLParser.ROW_NUMBER: + localContext = new ScalarWindowFunctionContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 393; + (localContext as ScalarWindowFunctionContext)._functionName = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(((((_la - 211)) & ~0x1F) === 0 && ((1 << (_la - 211)) & 7) !== 0))) { + (localContext as ScalarWindowFunctionContext)._functionName = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 394; + this.match(OpenSearchSQLParser.LR_BRACKET); + this.state = 396; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 28, this.context) ) { + case 1: + { + this.state = 395; + this.functionArgs(); + } + break; + } + this.state = 398; + this.match(OpenSearchSQLParser.RR_BRACKET); + } + break; + case OpenSearchSQLParser.AVG: + case OpenSearchSQLParser.COUNT: + case OpenSearchSQLParser.MAX: + case OpenSearchSQLParser.MIN: + case OpenSearchSQLParser.SUM: + case OpenSearchSQLParser.VAR_POP: + case OpenSearchSQLParser.VAR_SAMP: + case OpenSearchSQLParser.VARIANCE: + case OpenSearchSQLParser.STD: + case OpenSearchSQLParser.STDDEV: + case OpenSearchSQLParser.STDDEV_POP: + case OpenSearchSQLParser.STDDEV_SAMP: + case OpenSearchSQLParser.PERCENTILE: + case OpenSearchSQLParser.PERCENTILE_APPROX: + localContext = new AggregateWindowFunctionContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 399; + this.aggregateFunction(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public overClause(): OverClauseContext { + let localContext = new OverClauseContext(this.context, this.state); + this.enterRule(localContext, 56, OpenSearchSQLParser.RULE_overClause); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 402; + this.match(OpenSearchSQLParser.OVER); + this.state = 403; + this.match(OpenSearchSQLParser.LR_BRACKET); + this.state = 405; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 52) { + { + this.state = 404; + this.partitionByClause(); + } + } + + this.state = 408; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 49) { + { + this.state = 407; + this.orderByClause(); + } + } + + this.state = 410; + this.match(OpenSearchSQLParser.RR_BRACKET); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public partitionByClause(): PartitionByClauseContext { + let localContext = new PartitionByClauseContext(this.context, this.state); + this.enterRule(localContext, 58, OpenSearchSQLParser.RULE_partitionByClause); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 412; + this.match(OpenSearchSQLParser.PARTITION); + this.state = 413; + this.match(OpenSearchSQLParser.BY); + this.state = 414; + this.expression(0); + this.state = 419; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 332) { + { + { + this.state = 415; + this.match(OpenSearchSQLParser.COMMA); + this.state = 416; + this.expression(0); + } + } + this.state = 421; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public constant(): ConstantContext { + let localContext = new ConstantContext(this.context, this.state); + this.enterRule(localContext, 60, OpenSearchSQLParser.RULE_constant); + let _la: number; + try { + this.state = 435; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 35, this.context) ) { + case 1: + localContext = new StringContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 422; + this.stringLiteral(); + } + break; + case 2: + localContext = new SignedDecimalContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 424; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 315 || _la === 316) { + { + this.state = 423; + this.sign(); + } + } + + this.state = 426; + this.decimalLiteral(); + } + break; + case 3: + localContext = new SignedRealContext(localContext); + this.enterOuterAlt(localContext, 3); + { + this.state = 428; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 315 || _la === 316) { + { + this.state = 427; + this.sign(); + } + } + + this.state = 430; + this.realLiteral(); + } + break; + case 4: + localContext = new BooleanContext(localContext); + this.enterOuterAlt(localContext, 4); + { + this.state = 431; + this.booleanLiteral(); + } + break; + case 5: + localContext = new DatetimeContext(localContext); + this.enterOuterAlt(localContext, 5); + { + this.state = 432; + this.datetimeLiteral(); + } + break; + case 6: + localContext = new IntervalContext(localContext); + this.enterOuterAlt(localContext, 6); + { + this.state = 433; + this.intervalLiteral(); + } + break; + case 7: + localContext = new NullContext(localContext); + this.enterOuterAlt(localContext, 7); + { + this.state = 434; + this.nullLiteral(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public decimalLiteral(): DecimalLiteralContext { + let localContext = new DecimalLiteralContext(this.context, this.state); + this.enterRule(localContext, 62, OpenSearchSQLParser.RULE_decimalLiteral); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 437; + _la = this.tokenStream.LA(1); + if(!(((((_la - 335)) & ~0x1F) === 0 && ((1 << (_la - 335)) & 519) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public numericLiteral(): NumericLiteralContext { + let localContext = new NumericLiteralContext(this.context, this.state); + this.enterRule(localContext, 64, OpenSearchSQLParser.RULE_numericLiteral); + try { + this.state = 441; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchSQLParser.ZERO_DECIMAL: + case OpenSearchSQLParser.ONE_DECIMAL: + case OpenSearchSQLParser.TWO_DECIMAL: + case OpenSearchSQLParser.DECIMAL_LITERAL: + this.enterOuterAlt(localContext, 1); + { + this.state = 439; + this.decimalLiteral(); + } + break; + case OpenSearchSQLParser.REAL_LITERAL: + this.enterOuterAlt(localContext, 2); + { + this.state = 440; + this.realLiteral(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public stringLiteral(): StringLiteralContext { + let localContext = new StringLiteralContext(this.context, this.state); + this.enterRule(localContext, 66, OpenSearchSQLParser.RULE_stringLiteral); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 443; + _la = this.tokenStream.LA(1); + if(!(_la === 343 || _la === 350)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public booleanLiteral(): BooleanLiteralContext { + let localContext = new BooleanLiteralContext(this.context, this.state); + this.enterRule(localContext, 68, OpenSearchSQLParser.RULE_booleanLiteral); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 445; + _la = this.tokenStream.LA(1); + if(!(_la === 24 || _la === 59)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public realLiteral(): RealLiteralContext { + let localContext = new RealLiteralContext(this.context, this.state); + this.enterRule(localContext, 70, OpenSearchSQLParser.RULE_realLiteral); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 447; + this.match(OpenSearchSQLParser.REAL_LITERAL); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public sign(): SignContext { + let localContext = new SignContext(this.context, this.state); + this.enterRule(localContext, 72, OpenSearchSQLParser.RULE_sign); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 449; + _la = this.tokenStream.LA(1); + if(!(_la === 315 || _la === 316)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public nullLiteral(): NullLiteralContext { + let localContext = new NullLiteralContext(this.context, this.state); + this.enterRule(localContext, 74, OpenSearchSQLParser.RULE_nullLiteral); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 451; + this.match(OpenSearchSQLParser.NULL_LITERAL); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public datetimeLiteral(): DatetimeLiteralContext { + let localContext = new DatetimeLiteralContext(this.context, this.state); + this.enterRule(localContext, 76, OpenSearchSQLParser.RULE_datetimeLiteral); + try { + this.state = 456; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 37, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 453; + this.dateLiteral(); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 454; + this.timeLiteral(); + } + break; + case 3: + this.enterOuterAlt(localContext, 3); + { + this.state = 455; + this.timestampLiteral(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public dateLiteral(): DateLiteralContext { + let localContext = new DateLiteralContext(this.context, this.state); + this.enterRule(localContext, 78, OpenSearchSQLParser.RULE_dateLiteral); + let _la: number; + try { + this.state = 465; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchSQLParser.DATE: + this.enterOuterAlt(localContext, 1); + { + this.state = 458; + this.match(OpenSearchSQLParser.DATE); + this.state = 459; + localContext._date = this.stringLiteral(); + } + break; + case OpenSearchSQLParser.LEFT_BRACE: + this.enterOuterAlt(localContext, 2); + { + this.state = 460; + this.match(OpenSearchSQLParser.LEFT_BRACE); + this.state = 461; + _la = this.tokenStream.LA(1); + if(!(_la === 128 || _la === 206)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 462; + localContext._date = this.stringLiteral(); + this.state = 463; + this.match(OpenSearchSQLParser.RIGHT_BRACE); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public timeLiteral(): TimeLiteralContext { + let localContext = new TimeLiteralContext(this.context, this.state); + this.enterRule(localContext, 80, OpenSearchSQLParser.RULE_timeLiteral); + let _la: number; + try { + this.state = 474; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchSQLParser.TIME: + this.enterOuterAlt(localContext, 1); + { + this.state = 467; + this.match(OpenSearchSQLParser.TIME); + this.state = 468; + localContext._time = this.stringLiteral(); + } + break; + case OpenSearchSQLParser.LEFT_BRACE: + this.enterOuterAlt(localContext, 2); + { + this.state = 469; + this.match(OpenSearchSQLParser.LEFT_BRACE); + this.state = 470; + _la = this.tokenStream.LA(1); + if(!(_la === 193 || _la === 207)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 471; + localContext._time = this.stringLiteral(); + this.state = 472; + this.match(OpenSearchSQLParser.RIGHT_BRACE); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public timestampLiteral(): TimestampLiteralContext { + let localContext = new TimestampLiteralContext(this.context, this.state); + this.enterRule(localContext, 82, OpenSearchSQLParser.RULE_timestampLiteral); + let _la: number; + try { + this.state = 483; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchSQLParser.TIMESTAMP: + this.enterOuterAlt(localContext, 1); + { + this.state = 476; + this.match(OpenSearchSQLParser.TIMESTAMP); + this.state = 477; + localContext._timestamp = this.stringLiteral(); + } + break; + case OpenSearchSQLParser.LEFT_BRACE: + this.enterOuterAlt(localContext, 2); + { + this.state = 478; + this.match(OpenSearchSQLParser.LEFT_BRACE); + this.state = 479; + _la = this.tokenStream.LA(1); + if(!(_la === 197 || _la === 208)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 480; + localContext._timestamp = this.stringLiteral(); + this.state = 481; + this.match(OpenSearchSQLParser.RIGHT_BRACE); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public datetimeConstantLiteral(): DatetimeConstantLiteralContext { + let localContext = new DatetimeConstantLiteralContext(this.context, this.state); + this.enterRule(localContext, 84, OpenSearchSQLParser.RULE_datetimeConstantLiteral); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 485; + _la = this.tokenStream.LA(1); + if(!(((((_la - 125)) & ~0x1F) === 0 && ((1 << (_la - 125)) & 805306375) !== 0) || ((((_la - 203)) & ~0x1F) === 0 && ((1 << (_la - 203)) & 7) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public intervalLiteral(): IntervalLiteralContext { + let localContext = new IntervalLiteralContext(this.context, this.state); + this.enterRule(localContext, 86, OpenSearchSQLParser.RULE_intervalLiteral); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 487; + this.match(OpenSearchSQLParser.INTERVAL); + this.state = 488; + this.expression(0); + this.state = 489; + this.intervalUnit(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public intervalUnit(): IntervalUnitContext { + let localContext = new IntervalUnitContext(this.context, this.state); + this.enterRule(localContext, 88, OpenSearchSQLParser.RULE_intervalUnit); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 491; + _la = this.tokenStream.LA(1); + if(!(((((_la - 83)) & ~0x1F) === 0 && ((1 << (_la - 83)) & 1048575) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + + public expression(): ExpressionContext; + public expression(_p: number): ExpressionContext; + public expression(_p?: number): ExpressionContext { + if (_p === undefined) { + _p = 0; + } + + let parentContext = this.context; + let parentState = this.state; + let localContext = new ExpressionContext(this.context, parentState); + let previousContext = localContext; + let _startState = 90; + this.enterRecursionRule(localContext, 90, OpenSearchSQLParser.RULE_expression, _p); + try { + let alternative: number; + this.enterOuterAlt(localContext, 1); + { + this.state = 497; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchSQLParser.NOT: + { + localContext = new NotExpressionContext(localContext); + this.context = localContext; + previousContext = localContext; + + this.state = 494; + this.match(OpenSearchSQLParser.NOT); + this.state = 495; + this.expression(4); + } + break; + case OpenSearchSQLParser.CASE: + case OpenSearchSQLParser.CAST: + case OpenSearchSQLParser.DATETIME: + case OpenSearchSQLParser.FALSE: + case OpenSearchSQLParser.FIRST: + case OpenSearchSQLParser.LAST: + case OpenSearchSQLParser.LEFT: + case OpenSearchSQLParser.MATCH: + case OpenSearchSQLParser.NULL_LITERAL: + case OpenSearchSQLParser.RIGHT: + case OpenSearchSQLParser.TRUE: + case OpenSearchSQLParser.AVG: + case OpenSearchSQLParser.COUNT: + case OpenSearchSQLParser.MAX: + case OpenSearchSQLParser.MIN: + case OpenSearchSQLParser.SUM: + case OpenSearchSQLParser.VAR_POP: + case OpenSearchSQLParser.VAR_SAMP: + case OpenSearchSQLParser.VARIANCE: + case OpenSearchSQLParser.STD: + case OpenSearchSQLParser.STDDEV: + case OpenSearchSQLParser.STDDEV_POP: + case OpenSearchSQLParser.STDDEV_SAMP: + case OpenSearchSQLParser.SUBSTRING: + case OpenSearchSQLParser.TRIM: + case OpenSearchSQLParser.FULL: + case OpenSearchSQLParser.INTERVAL: + case OpenSearchSQLParser.MICROSECOND: + case OpenSearchSQLParser.SECOND: + case OpenSearchSQLParser.MINUTE: + case OpenSearchSQLParser.HOUR: + case OpenSearchSQLParser.DAY: + case OpenSearchSQLParser.WEEK: + case OpenSearchSQLParser.MONTH: + case OpenSearchSQLParser.QUARTER: + case OpenSearchSQLParser.YEAR: + case OpenSearchSQLParser.ABS: + case OpenSearchSQLParser.ACOS: + case OpenSearchSQLParser.ADD: + case OpenSearchSQLParser.ADDTIME: + case OpenSearchSQLParser.ASCII: + case OpenSearchSQLParser.ASIN: + case OpenSearchSQLParser.ATAN: + case OpenSearchSQLParser.ATAN2: + case OpenSearchSQLParser.CBRT: + case OpenSearchSQLParser.CEIL: + case OpenSearchSQLParser.CEILING: + case OpenSearchSQLParser.CONCAT: + case OpenSearchSQLParser.CONCAT_WS: + case OpenSearchSQLParser.CONV: + case OpenSearchSQLParser.CONVERT_TZ: + case OpenSearchSQLParser.COS: + case OpenSearchSQLParser.COSH: + case OpenSearchSQLParser.COT: + case OpenSearchSQLParser.CRC32: + case OpenSearchSQLParser.CURDATE: + case OpenSearchSQLParser.CURTIME: + case OpenSearchSQLParser.CURRENT_DATE: + case OpenSearchSQLParser.CURRENT_TIME: + case OpenSearchSQLParser.CURRENT_TIMESTAMP: + case OpenSearchSQLParser.DATE: + case OpenSearchSQLParser.DATE_ADD: + case OpenSearchSQLParser.DATE_FORMAT: + case OpenSearchSQLParser.DATE_SUB: + case OpenSearchSQLParser.DATEDIFF: + case OpenSearchSQLParser.DAYNAME: + case OpenSearchSQLParser.DAYOFMONTH: + case OpenSearchSQLParser.DAYOFWEEK: + case OpenSearchSQLParser.DAYOFYEAR: + case OpenSearchSQLParser.DEGREES: + case OpenSearchSQLParser.DIVIDE: + case OpenSearchSQLParser.E: + case OpenSearchSQLParser.EXP: + case OpenSearchSQLParser.EXPM1: + case OpenSearchSQLParser.EXTRACT: + case OpenSearchSQLParser.FLOOR: + case OpenSearchSQLParser.FROM_DAYS: + case OpenSearchSQLParser.FROM_UNIXTIME: + case OpenSearchSQLParser.GET_FORMAT: + case OpenSearchSQLParser.IF: + case OpenSearchSQLParser.IFNULL: + case OpenSearchSQLParser.ISNULL: + case OpenSearchSQLParser.LAST_DAY: + case OpenSearchSQLParser.LENGTH: + case OpenSearchSQLParser.LN: + case OpenSearchSQLParser.LOCALTIME: + case OpenSearchSQLParser.LOCALTIMESTAMP: + case OpenSearchSQLParser.LOCATE: + case OpenSearchSQLParser.LOG: + case OpenSearchSQLParser.LOG10: + case OpenSearchSQLParser.LOG2: + case OpenSearchSQLParser.LOWER: + case OpenSearchSQLParser.LTRIM: + case OpenSearchSQLParser.MAKEDATE: + case OpenSearchSQLParser.MAKETIME: + case OpenSearchSQLParser.MODULUS: + case OpenSearchSQLParser.MONTHNAME: + case OpenSearchSQLParser.MULTIPLY: + case OpenSearchSQLParser.NOW: + case OpenSearchSQLParser.NULLIF: + case OpenSearchSQLParser.PERIOD_ADD: + case OpenSearchSQLParser.PERIOD_DIFF: + case OpenSearchSQLParser.PI: + case OpenSearchSQLParser.POSITION: + case OpenSearchSQLParser.POW: + case OpenSearchSQLParser.POWER: + case OpenSearchSQLParser.RADIANS: + case OpenSearchSQLParser.RAND: + case OpenSearchSQLParser.REPLACE: + case OpenSearchSQLParser.RINT: + case OpenSearchSQLParser.ROUND: + case OpenSearchSQLParser.RTRIM: + case OpenSearchSQLParser.REVERSE: + case OpenSearchSQLParser.SEC_TO_TIME: + case OpenSearchSQLParser.SIGN: + case OpenSearchSQLParser.SIGNUM: + case OpenSearchSQLParser.SIN: + case OpenSearchSQLParser.SINH: + case OpenSearchSQLParser.SQRT: + case OpenSearchSQLParser.STR_TO_DATE: + case OpenSearchSQLParser.SUBDATE: + case OpenSearchSQLParser.SUBTIME: + case OpenSearchSQLParser.SUBTRACT: + case OpenSearchSQLParser.SYSDATE: + case OpenSearchSQLParser.TAN: + case OpenSearchSQLParser.TIME: + case OpenSearchSQLParser.TIMEDIFF: + case OpenSearchSQLParser.TIME_FORMAT: + case OpenSearchSQLParser.TIME_TO_SEC: + case OpenSearchSQLParser.TIMESTAMP: + case OpenSearchSQLParser.TRUNCATE: + case OpenSearchSQLParser.TO_DAYS: + case OpenSearchSQLParser.TO_SECONDS: + case OpenSearchSQLParser.UNIX_TIMESTAMP: + case OpenSearchSQLParser.UPPER: + case OpenSearchSQLParser.UTC_DATE: + case OpenSearchSQLParser.UTC_TIME: + case OpenSearchSQLParser.UTC_TIMESTAMP: + case OpenSearchSQLParser.D: + case OpenSearchSQLParser.T: + case OpenSearchSQLParser.TS: + case OpenSearchSQLParser.LEFT_BRACE: + case OpenSearchSQLParser.DENSE_RANK: + case OpenSearchSQLParser.RANK: + case OpenSearchSQLParser.ROW_NUMBER: + case OpenSearchSQLParser.DAY_OF_MONTH: + case OpenSearchSQLParser.DAY_OF_YEAR: + case OpenSearchSQLParser.DAY_OF_WEEK: + case OpenSearchSQLParser.FIELD: + case OpenSearchSQLParser.HOUR_OF_DAY: + case OpenSearchSQLParser.MATCHPHRASE: + case OpenSearchSQLParser.MATCH_PHRASE: + case OpenSearchSQLParser.MATCHPHRASEQUERY: + case OpenSearchSQLParser.SIMPLE_QUERY_STRING: + case OpenSearchSQLParser.QUERY_STRING: + case OpenSearchSQLParser.MATCH_PHRASE_PREFIX: + case OpenSearchSQLParser.MATCHQUERY: + case OpenSearchSQLParser.MATCH_QUERY: + case OpenSearchSQLParser.MINUTE_OF_DAY: + case OpenSearchSQLParser.MINUTE_OF_HOUR: + case OpenSearchSQLParser.MONTH_OF_YEAR: + case OpenSearchSQLParser.MULTIMATCH: + case OpenSearchSQLParser.MULTI_MATCH: + case OpenSearchSQLParser.MULTIMATCHQUERY: + case OpenSearchSQLParser.NESTED: + case OpenSearchSQLParser.PERCENTILE: + case OpenSearchSQLParser.PERCENTILE_APPROX: + case OpenSearchSQLParser.QUERY: + case OpenSearchSQLParser.SCORE: + case OpenSearchSQLParser.SCOREQUERY: + case OpenSearchSQLParser.SCORE_QUERY: + case OpenSearchSQLParser.SECOND_OF_MINUTE: + case OpenSearchSQLParser.TIMESTAMPADD: + case OpenSearchSQLParser.TIMESTAMPDIFF: + case OpenSearchSQLParser.TYPEOF: + case OpenSearchSQLParser.WEEK_OF_YEAR: + case OpenSearchSQLParser.WEEKOFYEAR: + case OpenSearchSQLParser.WEEKDAY: + case OpenSearchSQLParser.WILDCARDQUERY: + case OpenSearchSQLParser.WILDCARD_QUERY: + case OpenSearchSQLParser.SUBSTR: + case OpenSearchSQLParser.STRCMP: + case OpenSearchSQLParser.ADDDATE: + case OpenSearchSQLParser.YEARWEEK: + case OpenSearchSQLParser.TYPE: + case OpenSearchSQLParser.HIGHLIGHT: + case OpenSearchSQLParser.MATCH_BOOL_PREFIX: + case OpenSearchSQLParser.PLUS: + case OpenSearchSQLParser.MINUS: + case OpenSearchSQLParser.MOD: + case OpenSearchSQLParser.DOT: + case OpenSearchSQLParser.LR_BRACKET: + case OpenSearchSQLParser.ZERO_DECIMAL: + case OpenSearchSQLParser.ONE_DECIMAL: + case OpenSearchSQLParser.TWO_DECIMAL: + case OpenSearchSQLParser.STRING_LITERAL: + case OpenSearchSQLParser.DECIMAL_LITERAL: + case OpenSearchSQLParser.REAL_LITERAL: + case OpenSearchSQLParser.ID: + case OpenSearchSQLParser.DOUBLE_QUOTE_ID: + case OpenSearchSQLParser.BACKTICK_QUOTE_ID: + { + localContext = new PredicateExpressionContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 496; + this.predicate(0); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + this.context!.stop = this.tokenStream.LT(-1); + this.state = 507; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 43, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + if (this.parseListeners != null) { + this.triggerExitRuleEvent(); + } + previousContext = localContext; + { + this.state = 505; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 42, this.context) ) { + case 1: + { + localContext = new AndExpressionContext(new ExpressionContext(parentContext, parentState)); + (localContext as AndExpressionContext)._left = previousContext; + this.pushNewRecursionContext(localContext, _startState, OpenSearchSQLParser.RULE_expression); + this.state = 499; + if (!(this.precpred(this.context, 3))) { + throw this.createFailedPredicateException("this.precpred(this.context, 3)"); + } + this.state = 500; + this.match(OpenSearchSQLParser.AND); + this.state = 501; + (localContext as AndExpressionContext)._right = this.expression(4); + } + break; + case 2: + { + localContext = new OrExpressionContext(new ExpressionContext(parentContext, parentState)); + (localContext as OrExpressionContext)._left = previousContext; + this.pushNewRecursionContext(localContext, _startState, OpenSearchSQLParser.RULE_expression); + this.state = 502; + if (!(this.precpred(this.context, 2))) { + throw this.createFailedPredicateException("this.precpred(this.context, 2)"); + } + this.state = 503; + this.match(OpenSearchSQLParser.OR); + this.state = 504; + (localContext as OrExpressionContext)._right = this.expression(3); + } + break; + } + } + } + this.state = 509; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 43, this.context); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(parentContext); + } + return localContext; + } + + public predicate(): PredicateContext; + public predicate(_p: number): PredicateContext; + public predicate(_p?: number): PredicateContext { + if (_p === undefined) { + _p = 0; + } + + let parentContext = this.context; + let parentState = this.state; + let localContext = new PredicateContext(this.context, parentState); + let previousContext = localContext; + let _startState = 92; + this.enterRecursionRule(localContext, 92, OpenSearchSQLParser.RULE_predicate, _p); + let _la: number; + try { + let alternative: number; + this.enterOuterAlt(localContext, 1); + { + { + localContext = new ExpressionAtomPredicateContext(localContext); + this.context = localContext; + previousContext = localContext; + + this.state = 511; + this.expressionAtom(0); + } + this.context!.stop = this.tokenStream.LT(-1); + this.state = 549; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 48, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + if (this.parseListeners != null) { + this.triggerExitRuleEvent(); + } + previousContext = localContext; + { + this.state = 547; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 47, this.context) ) { + case 1: + { + localContext = new BinaryComparisonPredicateContext(new PredicateContext(parentContext, parentState)); + (localContext as BinaryComparisonPredicateContext)._left = previousContext; + this.pushNewRecursionContext(localContext, _startState, OpenSearchSQLParser.RULE_predicate); + this.state = 513; + if (!(this.precpred(this.context, 6))) { + throw this.createFailedPredicateException("this.precpred(this.context, 6)"); + } + this.state = 514; + this.comparisonOperator(); + this.state = 515; + (localContext as BinaryComparisonPredicateContext)._right = this.predicate(7); + } + break; + case 2: + { + localContext = new BetweenPredicateContext(new PredicateContext(parentContext, parentState)); + this.pushNewRecursionContext(localContext, _startState, OpenSearchSQLParser.RULE_predicate); + this.state = 517; + if (!(this.precpred(this.context, 4))) { + throw this.createFailedPredicateException("this.precpred(this.context, 4)"); + } + this.state = 519; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 44) { + { + this.state = 518; + this.match(OpenSearchSQLParser.NOT); + } + } + + this.state = 521; + this.match(OpenSearchSQLParser.BETWEEN); + this.state = 522; + this.predicate(0); + this.state = 523; + this.match(OpenSearchSQLParser.AND); + this.state = 524; + this.predicate(5); + } + break; + case 3: + { + localContext = new LikePredicateContext(new PredicateContext(parentContext, parentState)); + (localContext as LikePredicateContext)._left = previousContext; + this.pushNewRecursionContext(localContext, _startState, OpenSearchSQLParser.RULE_predicate); + this.state = 526; + if (!(this.precpred(this.context, 3))) { + throw this.createFailedPredicateException("this.precpred(this.context, 3)"); + } + this.state = 528; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 44) { + { + this.state = 527; + this.match(OpenSearchSQLParser.NOT); + } + } + + this.state = 530; + this.match(OpenSearchSQLParser.LIKE); + this.state = 531; + (localContext as LikePredicateContext)._right = this.predicate(4); + } + break; + case 4: + { + localContext = new RegexpPredicateContext(new PredicateContext(parentContext, parentState)); + (localContext as RegexpPredicateContext)._left = previousContext; + this.pushNewRecursionContext(localContext, _startState, OpenSearchSQLParser.RULE_predicate); + this.state = 532; + if (!(this.precpred(this.context, 2))) { + throw this.createFailedPredicateException("this.precpred(this.context, 2)"); + } + this.state = 533; + this.match(OpenSearchSQLParser.REGEXP); + this.state = 534; + (localContext as RegexpPredicateContext)._right = this.predicate(3); + } + break; + case 5: + { + localContext = new IsNullPredicateContext(new PredicateContext(parentContext, parentState)); + this.pushNewRecursionContext(localContext, _startState, OpenSearchSQLParser.RULE_predicate); + this.state = 535; + if (!(this.precpred(this.context, 5))) { + throw this.createFailedPredicateException("this.precpred(this.context, 5)"); + } + this.state = 536; + this.match(OpenSearchSQLParser.IS); + this.state = 537; + this.nullNotnull(); + } + break; + case 6: + { + localContext = new InPredicateContext(new PredicateContext(parentContext, parentState)); + this.pushNewRecursionContext(localContext, _startState, OpenSearchSQLParser.RULE_predicate); + this.state = 538; + if (!(this.precpred(this.context, 1))) { + throw this.createFailedPredicateException("this.precpred(this.context, 1)"); + } + this.state = 540; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 44) { + { + this.state = 539; + this.match(OpenSearchSQLParser.NOT); + } + } + + this.state = 542; + this.match(OpenSearchSQLParser.IN); + this.state = 543; + this.match(OpenSearchSQLParser.LR_BRACKET); + this.state = 544; + this.expressions(); + this.state = 545; + this.match(OpenSearchSQLParser.RR_BRACKET); + } + break; + } + } + } + this.state = 551; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 48, this.context); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(parentContext); + } + return localContext; + } + public expressions(): ExpressionsContext { + let localContext = new ExpressionsContext(this.context, this.state); + this.enterRule(localContext, 94, OpenSearchSQLParser.RULE_expressions); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 552; + this.expression(0); + this.state = 557; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 332) { + { + { + this.state = 553; + this.match(OpenSearchSQLParser.COMMA); + this.state = 554; + this.expression(0); + } + } + this.state = 559; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + + public expressionAtom(): ExpressionAtomContext; + public expressionAtom(_p: number): ExpressionAtomContext; + public expressionAtom(_p?: number): ExpressionAtomContext { + if (_p === undefined) { + _p = 0; + } + + let parentContext = this.context; + let parentState = this.state; + let localContext = new ExpressionAtomContext(this.context, parentState); + let previousContext = localContext; + let _startState = 96; + this.enterRecursionRule(localContext, 96, OpenSearchSQLParser.RULE_expressionAtom, _p); + let _la: number; + try { + let alternative: number; + this.enterOuterAlt(localContext, 1); + { + this.state = 568; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 50, this.context) ) { + case 1: + { + localContext = new ConstantExpressionAtomContext(localContext); + this.context = localContext; + previousContext = localContext; + + this.state = 561; + this.constant(); + } + break; + case 2: + { + localContext = new FullColumnNameExpressionAtomContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 562; + this.columnName(); + } + break; + case 3: + { + localContext = new FunctionCallExpressionAtomContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 563; + this.functionCall(); + } + break; + case 4: + { + localContext = new NestedExpressionAtomContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 564; + this.match(OpenSearchSQLParser.LR_BRACKET); + this.state = 565; + this.expression(0); + this.state = 566; + this.match(OpenSearchSQLParser.RR_BRACKET); + } + break; + } + this.context!.stop = this.tokenStream.LT(-1); + this.state = 578; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 52, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + if (this.parseListeners != null) { + this.triggerExitRuleEvent(); + } + previousContext = localContext; + { + this.state = 576; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 51, this.context) ) { + case 1: + { + localContext = new MathExpressionAtomContext(new ExpressionAtomContext(parentContext, parentState)); + (localContext as MathExpressionAtomContext)._left = previousContext; + this.pushNewRecursionContext(localContext, _startState, OpenSearchSQLParser.RULE_expressionAtom); + this.state = 570; + if (!(this.precpred(this.context, 2))) { + throw this.createFailedPredicateException("this.precpred(this.context, 2)"); + } + this.state = 571; + (localContext as MathExpressionAtomContext)._mathOperator = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(((((_la - 312)) & ~0x1F) === 0 && ((1 << (_la - 312)) & 7) !== 0))) { + (localContext as MathExpressionAtomContext)._mathOperator = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 572; + (localContext as MathExpressionAtomContext)._right = this.expressionAtom(3); + } + break; + case 2: + { + localContext = new MathExpressionAtomContext(new ExpressionAtomContext(parentContext, parentState)); + (localContext as MathExpressionAtomContext)._left = previousContext; + this.pushNewRecursionContext(localContext, _startState, OpenSearchSQLParser.RULE_expressionAtom); + this.state = 573; + if (!(this.precpred(this.context, 1))) { + throw this.createFailedPredicateException("this.precpred(this.context, 1)"); + } + this.state = 574; + (localContext as MathExpressionAtomContext)._mathOperator = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 315 || _la === 316)) { + (localContext as MathExpressionAtomContext)._mathOperator = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 575; + (localContext as MathExpressionAtomContext)._right = this.expressionAtom(2); + } + break; + } + } + } + this.state = 580; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 52, this.context); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(parentContext); + } + return localContext; + } + public comparisonOperator(): ComparisonOperatorContext { + let localContext = new ComparisonOperatorContext(this.context, this.state); + this.enterRule(localContext, 98, OpenSearchSQLParser.RULE_comparisonOperator); + try { + this.state = 592; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 53, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 581; + this.match(OpenSearchSQLParser.EQUAL_SYMBOL); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 582; + this.match(OpenSearchSQLParser.GREATER_SYMBOL); + } + break; + case 3: + this.enterOuterAlt(localContext, 3); + { + this.state = 583; + this.match(OpenSearchSQLParser.LESS_SYMBOL); + } + break; + case 4: + this.enterOuterAlt(localContext, 4); + { + this.state = 584; + this.match(OpenSearchSQLParser.LESS_SYMBOL); + this.state = 585; + this.match(OpenSearchSQLParser.EQUAL_SYMBOL); + } + break; + case 5: + this.enterOuterAlt(localContext, 5); + { + this.state = 586; + this.match(OpenSearchSQLParser.GREATER_SYMBOL); + this.state = 587; + this.match(OpenSearchSQLParser.EQUAL_SYMBOL); + } + break; + case 6: + this.enterOuterAlt(localContext, 6); + { + this.state = 588; + this.match(OpenSearchSQLParser.LESS_SYMBOL); + this.state = 589; + this.match(OpenSearchSQLParser.GREATER_SYMBOL); + } + break; + case 7: + this.enterOuterAlt(localContext, 7); + { + this.state = 590; + this.match(OpenSearchSQLParser.EXCLAMATION_SYMBOL); + this.state = 591; + this.match(OpenSearchSQLParser.EQUAL_SYMBOL); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public nullNotnull(): NullNotnullContext { + let localContext = new NullNotnullContext(this.context, this.state); + this.enterRule(localContext, 100, OpenSearchSQLParser.RULE_nullNotnull); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 595; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 44) { + { + this.state = 594; + this.match(OpenSearchSQLParser.NOT); + } + } + + this.state = 597; + this.match(OpenSearchSQLParser.NULL_LITERAL); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public functionCall(): FunctionCallContext { + let localContext = new FunctionCallContext(this.context, this.state); + this.enterRule(localContext, 102, OpenSearchSQLParser.RULE_functionCall); + let _la: number; + try { + this.state = 625; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 56, this.context) ) { + case 1: + localContext = new NestedAllFunctionCallContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 599; + this.nestedFunctionName(); + this.state = 600; + this.match(OpenSearchSQLParser.LR_BRACKET); + this.state = 601; + this.allTupleFields(); + this.state = 602; + this.match(OpenSearchSQLParser.RR_BRACKET); + } + break; + case 2: + localContext = new ScalarFunctionCallContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 604; + this.scalarFunctionName(); + this.state = 605; + this.match(OpenSearchSQLParser.LR_BRACKET); + this.state = 606; + this.functionArgs(); + this.state = 607; + this.match(OpenSearchSQLParser.RR_BRACKET); + } + break; + case 3: + localContext = new SpecificFunctionCallContext(localContext); + this.enterOuterAlt(localContext, 3); + { + this.state = 609; + this.specificFunction(); + } + break; + case 4: + localContext = new WindowFunctionCallContext(localContext); + this.enterOuterAlt(localContext, 4); + { + this.state = 610; + this.windowFunctionClause(); + } + break; + case 5: + localContext = new AggregateFunctionCallContext(localContext); + this.enterOuterAlt(localContext, 5); + { + this.state = 611; + this.aggregateFunction(); + } + break; + case 6: + localContext = new FilteredAggregationFunctionCallContext(localContext); + this.enterOuterAlt(localContext, 6); + { + this.state = 612; + this.aggregateFunction(); + this.state = 614; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 49) { + { + this.state = 613; + this.orderByClause(); + } + } + + this.state = 616; + this.filterClause(); + } + break; + case 7: + localContext = new ScoreRelevanceFunctionCallContext(localContext); + this.enterOuterAlt(localContext, 7); + { + this.state = 618; + this.scoreRelevanceFunction(); + } + break; + case 8: + localContext = new RelevanceFunctionCallContext(localContext); + this.enterOuterAlt(localContext, 8); + { + this.state = 619; + this.relevanceFunction(); + } + break; + case 9: + localContext = new HighlightFunctionCallContext(localContext); + this.enterOuterAlt(localContext, 9); + { + this.state = 620; + this.highlightFunction(); + } + break; + case 10: + localContext = new PositionFunctionCallContext(localContext); + this.enterOuterAlt(localContext, 10); + { + this.state = 621; + this.positionFunction(); + } + break; + case 11: + localContext = new ExtractFunctionCallContext(localContext); + this.enterOuterAlt(localContext, 11); + { + this.state = 622; + this.extractFunction(); + } + break; + case 12: + localContext = new GetFormatFunctionCallContext(localContext); + this.enterOuterAlt(localContext, 12); + { + this.state = 623; + this.getFormatFunction(); + } + break; + case 13: + localContext = new TimestampFunctionCallContext(localContext); + this.enterOuterAlt(localContext, 13); + { + this.state = 624; + this.timestampFunction(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public timestampFunction(): TimestampFunctionContext { + let localContext = new TimestampFunctionContext(this.context, this.state); + this.enterRule(localContext, 104, OpenSearchSQLParser.RULE_timestampFunction); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 627; + this.timestampFunctionName(); + this.state = 628; + this.match(OpenSearchSQLParser.LR_BRACKET); + this.state = 629; + this.simpleDateTimePart(); + this.state = 630; + this.match(OpenSearchSQLParser.COMMA); + this.state = 631; + localContext._firstArg = this.functionArg(); + this.state = 632; + this.match(OpenSearchSQLParser.COMMA); + this.state = 633; + localContext._secondArg = this.functionArg(); + this.state = 634; + this.match(OpenSearchSQLParser.RR_BRACKET); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public timestampFunctionName(): TimestampFunctionNameContext { + let localContext = new TimestampFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 106, OpenSearchSQLParser.RULE_timestampFunctionName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 636; + _la = this.tokenStream.LA(1); + if(!(_la === 261 || _la === 262)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public getFormatFunction(): GetFormatFunctionContext { + let localContext = new GetFormatFunctionContext(this.context, this.state); + this.enterRule(localContext, 108, OpenSearchSQLParser.RULE_getFormatFunction); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 638; + this.match(OpenSearchSQLParser.GET_FORMAT); + this.state = 639; + this.match(OpenSearchSQLParser.LR_BRACKET); + this.state = 640; + this.getFormatType(); + this.state = 641; + this.match(OpenSearchSQLParser.COMMA); + this.state = 642; + this.functionArg(); + this.state = 643; + this.match(OpenSearchSQLParser.RR_BRACKET); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public getFormatType(): GetFormatTypeContext { + let localContext = new GetFormatTypeContext(this.context, this.state); + this.enterRule(localContext, 110, OpenSearchSQLParser.RULE_getFormatType); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 645; + _la = this.tokenStream.LA(1); + if(!(_la === 16 || _la === 128 || _la === 193 || _la === 197)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public extractFunction(): ExtractFunctionContext { + let localContext = new ExtractFunctionContext(this.context, this.state); + this.enterRule(localContext, 112, OpenSearchSQLParser.RULE_extractFunction); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 647; + this.match(OpenSearchSQLParser.EXTRACT); + this.state = 648; + this.match(OpenSearchSQLParser.LR_BRACKET); + this.state = 649; + this.datetimePart(); + this.state = 650; + this.match(OpenSearchSQLParser.FROM); + this.state = 651; + this.functionArg(); + this.state = 652; + this.match(OpenSearchSQLParser.RR_BRACKET); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public simpleDateTimePart(): SimpleDateTimePartContext { + let localContext = new SimpleDateTimePartContext(this.context, this.state); + this.enterRule(localContext, 114, OpenSearchSQLParser.RULE_simpleDateTimePart); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 654; + _la = this.tokenStream.LA(1); + if(!(((((_la - 83)) & ~0x1F) === 0 && ((1 << (_la - 83)) & 511) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public complexDateTimePart(): ComplexDateTimePartContext { + let localContext = new ComplexDateTimePartContext(this.context, this.state); + this.enterRule(localContext, 116, OpenSearchSQLParser.RULE_complexDateTimePart); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 656; + _la = this.tokenStream.LA(1); + if(!(((((_la - 92)) & ~0x1F) === 0 && ((1 << (_la - 92)) & 2047) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public datetimePart(): DatetimePartContext { + let localContext = new DatetimePartContext(this.context, this.state); + this.enterRule(localContext, 118, OpenSearchSQLParser.RULE_datetimePart); + try { + this.state = 660; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchSQLParser.MICROSECOND: + case OpenSearchSQLParser.SECOND: + case OpenSearchSQLParser.MINUTE: + case OpenSearchSQLParser.HOUR: + case OpenSearchSQLParser.DAY: + case OpenSearchSQLParser.WEEK: + case OpenSearchSQLParser.MONTH: + case OpenSearchSQLParser.QUARTER: + case OpenSearchSQLParser.YEAR: + this.enterOuterAlt(localContext, 1); + { + this.state = 658; + this.simpleDateTimePart(); + } + break; + case OpenSearchSQLParser.SECOND_MICROSECOND: + case OpenSearchSQLParser.MINUTE_MICROSECOND: + case OpenSearchSQLParser.MINUTE_SECOND: + case OpenSearchSQLParser.HOUR_MICROSECOND: + case OpenSearchSQLParser.HOUR_SECOND: + case OpenSearchSQLParser.HOUR_MINUTE: + case OpenSearchSQLParser.DAY_MICROSECOND: + case OpenSearchSQLParser.DAY_SECOND: + case OpenSearchSQLParser.DAY_MINUTE: + case OpenSearchSQLParser.DAY_HOUR: + case OpenSearchSQLParser.YEAR_MONTH: + this.enterOuterAlt(localContext, 2); + { + this.state = 659; + this.complexDateTimePart(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public highlightFunction(): HighlightFunctionContext { + let localContext = new HighlightFunctionContext(this.context, this.state); + this.enterRule(localContext, 120, OpenSearchSQLParser.RULE_highlightFunction); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 662; + this.match(OpenSearchSQLParser.HIGHLIGHT); + this.state = 663; + this.match(OpenSearchSQLParser.LR_BRACKET); + this.state = 664; + this.relevanceField(); + this.state = 669; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 332) { + { + { + this.state = 665; + this.match(OpenSearchSQLParser.COMMA); + this.state = 666; + this.highlightArg(); + } + } + this.state = 671; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 672; + this.match(OpenSearchSQLParser.RR_BRACKET); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public positionFunction(): PositionFunctionContext { + let localContext = new PositionFunctionContext(this.context, this.state); + this.enterRule(localContext, 122, OpenSearchSQLParser.RULE_positionFunction); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 674; + this.match(OpenSearchSQLParser.POSITION); + this.state = 675; + this.match(OpenSearchSQLParser.LR_BRACKET); + this.state = 676; + this.functionArg(); + this.state = 677; + this.match(OpenSearchSQLParser.IN); + this.state = 678; + this.functionArg(); + this.state = 679; + this.match(OpenSearchSQLParser.RR_BRACKET); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public matchQueryAltSyntaxFunction(): MatchQueryAltSyntaxFunctionContext { + let localContext = new MatchQueryAltSyntaxFunctionContext(this.context, this.state); + this.enterRule(localContext, 124, OpenSearchSQLParser.RULE_matchQueryAltSyntaxFunction); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 681; + localContext._field = this.relevanceField(); + this.state = 682; + this.match(OpenSearchSQLParser.EQUAL_SYMBOL); + this.state = 683; + this.match(OpenSearchSQLParser.MATCH_QUERY); + this.state = 684; + this.match(OpenSearchSQLParser.LR_BRACKET); + this.state = 685; + localContext._query = this.relevanceQuery(); + this.state = 686; + this.match(OpenSearchSQLParser.RR_BRACKET); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public scalarFunctionName(): ScalarFunctionNameContext { + let localContext = new ScalarFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 126, OpenSearchSQLParser.RULE_scalarFunctionName); + try { + this.state = 694; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchSQLParser.ABS: + case OpenSearchSQLParser.ACOS: + case OpenSearchSQLParser.ADD: + case OpenSearchSQLParser.ASIN: + case OpenSearchSQLParser.ATAN: + case OpenSearchSQLParser.ATAN2: + case OpenSearchSQLParser.CBRT: + case OpenSearchSQLParser.CEIL: + case OpenSearchSQLParser.CEILING: + case OpenSearchSQLParser.CONV: + case OpenSearchSQLParser.COS: + case OpenSearchSQLParser.COSH: + case OpenSearchSQLParser.COT: + case OpenSearchSQLParser.CRC32: + case OpenSearchSQLParser.DEGREES: + case OpenSearchSQLParser.DIVIDE: + case OpenSearchSQLParser.E: + case OpenSearchSQLParser.EXP: + case OpenSearchSQLParser.EXPM1: + case OpenSearchSQLParser.FLOOR: + case OpenSearchSQLParser.LN: + case OpenSearchSQLParser.LOG: + case OpenSearchSQLParser.LOG10: + case OpenSearchSQLParser.LOG2: + case OpenSearchSQLParser.MODULUS: + case OpenSearchSQLParser.MULTIPLY: + case OpenSearchSQLParser.PI: + case OpenSearchSQLParser.POW: + case OpenSearchSQLParser.POWER: + case OpenSearchSQLParser.RADIANS: + case OpenSearchSQLParser.RAND: + case OpenSearchSQLParser.RINT: + case OpenSearchSQLParser.ROUND: + case OpenSearchSQLParser.SIGN: + case OpenSearchSQLParser.SIGNUM: + case OpenSearchSQLParser.SIN: + case OpenSearchSQLParser.SINH: + case OpenSearchSQLParser.SQRT: + case OpenSearchSQLParser.SUBTRACT: + case OpenSearchSQLParser.TAN: + case OpenSearchSQLParser.TRUNCATE: + case OpenSearchSQLParser.MOD: + this.enterOuterAlt(localContext, 1); + { + this.state = 688; + this.mathematicalFunctionName(); + } + break; + case OpenSearchSQLParser.DATETIME: + case OpenSearchSQLParser.MICROSECOND: + case OpenSearchSQLParser.SECOND: + case OpenSearchSQLParser.MINUTE: + case OpenSearchSQLParser.HOUR: + case OpenSearchSQLParser.DAY: + case OpenSearchSQLParser.WEEK: + case OpenSearchSQLParser.MONTH: + case OpenSearchSQLParser.QUARTER: + case OpenSearchSQLParser.YEAR: + case OpenSearchSQLParser.ADDTIME: + case OpenSearchSQLParser.CONVERT_TZ: + case OpenSearchSQLParser.CURDATE: + case OpenSearchSQLParser.CURTIME: + case OpenSearchSQLParser.CURRENT_DATE: + case OpenSearchSQLParser.CURRENT_TIME: + case OpenSearchSQLParser.CURRENT_TIMESTAMP: + case OpenSearchSQLParser.DATE: + case OpenSearchSQLParser.DATE_ADD: + case OpenSearchSQLParser.DATE_FORMAT: + case OpenSearchSQLParser.DATE_SUB: + case OpenSearchSQLParser.DATEDIFF: + case OpenSearchSQLParser.DAYNAME: + case OpenSearchSQLParser.DAYOFMONTH: + case OpenSearchSQLParser.DAYOFWEEK: + case OpenSearchSQLParser.DAYOFYEAR: + case OpenSearchSQLParser.FROM_DAYS: + case OpenSearchSQLParser.FROM_UNIXTIME: + case OpenSearchSQLParser.LAST_DAY: + case OpenSearchSQLParser.LOCALTIME: + case OpenSearchSQLParser.LOCALTIMESTAMP: + case OpenSearchSQLParser.MAKEDATE: + case OpenSearchSQLParser.MAKETIME: + case OpenSearchSQLParser.MONTHNAME: + case OpenSearchSQLParser.NOW: + case OpenSearchSQLParser.PERIOD_ADD: + case OpenSearchSQLParser.PERIOD_DIFF: + case OpenSearchSQLParser.SEC_TO_TIME: + case OpenSearchSQLParser.STR_TO_DATE: + case OpenSearchSQLParser.SUBDATE: + case OpenSearchSQLParser.SUBTIME: + case OpenSearchSQLParser.SYSDATE: + case OpenSearchSQLParser.TIME: + case OpenSearchSQLParser.TIMEDIFF: + case OpenSearchSQLParser.TIME_FORMAT: + case OpenSearchSQLParser.TIME_TO_SEC: + case OpenSearchSQLParser.TIMESTAMP: + case OpenSearchSQLParser.TO_DAYS: + case OpenSearchSQLParser.TO_SECONDS: + case OpenSearchSQLParser.UNIX_TIMESTAMP: + case OpenSearchSQLParser.UTC_DATE: + case OpenSearchSQLParser.UTC_TIME: + case OpenSearchSQLParser.UTC_TIMESTAMP: + case OpenSearchSQLParser.DAY_OF_MONTH: + case OpenSearchSQLParser.DAY_OF_YEAR: + case OpenSearchSQLParser.DAY_OF_WEEK: + case OpenSearchSQLParser.HOUR_OF_DAY: + case OpenSearchSQLParser.MINUTE_OF_DAY: + case OpenSearchSQLParser.MINUTE_OF_HOUR: + case OpenSearchSQLParser.MONTH_OF_YEAR: + case OpenSearchSQLParser.SECOND_OF_MINUTE: + case OpenSearchSQLParser.WEEK_OF_YEAR: + case OpenSearchSQLParser.WEEKOFYEAR: + case OpenSearchSQLParser.WEEKDAY: + case OpenSearchSQLParser.ADDDATE: + case OpenSearchSQLParser.YEARWEEK: + this.enterOuterAlt(localContext, 2); + { + this.state = 689; + this.dateTimeFunctionName(); + } + break; + case OpenSearchSQLParser.LEFT: + case OpenSearchSQLParser.RIGHT: + case OpenSearchSQLParser.SUBSTRING: + case OpenSearchSQLParser.TRIM: + case OpenSearchSQLParser.ASCII: + case OpenSearchSQLParser.CONCAT: + case OpenSearchSQLParser.CONCAT_WS: + case OpenSearchSQLParser.LENGTH: + case OpenSearchSQLParser.LOCATE: + case OpenSearchSQLParser.LOWER: + case OpenSearchSQLParser.LTRIM: + case OpenSearchSQLParser.REPLACE: + case OpenSearchSQLParser.RTRIM: + case OpenSearchSQLParser.REVERSE: + case OpenSearchSQLParser.UPPER: + case OpenSearchSQLParser.SUBSTR: + case OpenSearchSQLParser.STRCMP: + this.enterOuterAlt(localContext, 3); + { + this.state = 690; + this.textFunctionName(); + } + break; + case OpenSearchSQLParser.IF: + case OpenSearchSQLParser.IFNULL: + case OpenSearchSQLParser.ISNULL: + case OpenSearchSQLParser.NULLIF: + this.enterOuterAlt(localContext, 4); + { + this.state = 691; + this.flowControlFunctionName(); + } + break; + case OpenSearchSQLParser.TYPEOF: + this.enterOuterAlt(localContext, 5); + { + this.state = 692; + this.systemFunctionName(); + } + break; + case OpenSearchSQLParser.NESTED: + this.enterOuterAlt(localContext, 6); + { + this.state = 693; + this.nestedFunctionName(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public specificFunction(): SpecificFunctionContext { + let localContext = new SpecificFunctionContext(this.context, this.state); + this.enterRule(localContext, 128, OpenSearchSQLParser.RULE_specificFunction); + let _la: number; + try { + this.state = 728; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 64, this.context) ) { + case 1: + localContext = new CaseFunctionCallContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 696; + this.match(OpenSearchSQLParser.CASE); + this.state = 697; + this.expression(0); + this.state = 699; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + do { + { + { + this.state = 698; + this.caseFuncAlternative(); + } + } + this.state = 701; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } while (_la === 62); + this.state = 705; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 22) { + { + this.state = 703; + this.match(OpenSearchSQLParser.ELSE); + this.state = 704; + (localContext as CaseFunctionCallContext)._elseArg = this.functionArg(); + } + } + + this.state = 707; + this.match(OpenSearchSQLParser.END); + } + break; + case 2: + localContext = new CaseFunctionCallContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 709; + this.match(OpenSearchSQLParser.CASE); + this.state = 711; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + do { + { + { + this.state = 710; + this.caseFuncAlternative(); + } + } + this.state = 713; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } while (_la === 62); + this.state = 717; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 22) { + { + this.state = 715; + this.match(OpenSearchSQLParser.ELSE); + this.state = 716; + (localContext as CaseFunctionCallContext)._elseArg = this.functionArg(); + } + } + + this.state = 719; + this.match(OpenSearchSQLParser.END); + } + break; + case 3: + localContext = new DataTypeFunctionCallContext(localContext); + this.enterOuterAlt(localContext, 3); + { + this.state = 721; + this.match(OpenSearchSQLParser.CAST); + this.state = 722; + this.match(OpenSearchSQLParser.LR_BRACKET); + this.state = 723; + this.expression(0); + this.state = 724; + this.match(OpenSearchSQLParser.AS); + this.state = 725; + this.convertedDataType(); + this.state = 726; + this.match(OpenSearchSQLParser.RR_BRACKET); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public relevanceFunction(): RelevanceFunctionContext { + let localContext = new RelevanceFunctionContext(this.context, this.state); + this.enterRule(localContext, 130, OpenSearchSQLParser.RULE_relevanceFunction); + try { + this.state = 735; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 65, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 730; + this.noFieldRelevanceFunction(); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 731; + this.singleFieldRelevanceFunction(); + } + break; + case 3: + this.enterOuterAlt(localContext, 3); + { + this.state = 732; + this.multiFieldRelevanceFunction(); + } + break; + case 4: + this.enterOuterAlt(localContext, 4); + { + this.state = 733; + this.altSingleFieldRelevanceFunction(); + } + break; + case 5: + this.enterOuterAlt(localContext, 5); + { + this.state = 734; + this.altMultiFieldRelevanceFunction(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public scoreRelevanceFunction(): ScoreRelevanceFunctionContext { + let localContext = new ScoreRelevanceFunctionContext(this.context, this.state); + this.enterRule(localContext, 132, OpenSearchSQLParser.RULE_scoreRelevanceFunction); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 737; + this.scoreRelevanceFunctionName(); + this.state = 738; + this.match(OpenSearchSQLParser.LR_BRACKET); + this.state = 739; + this.relevanceFunction(); + this.state = 742; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 332) { + { + this.state = 740; + this.match(OpenSearchSQLParser.COMMA); + this.state = 741; + localContext._weight = this.relevanceFieldWeight(); + } + } + + this.state = 744; + this.match(OpenSearchSQLParser.RR_BRACKET); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public noFieldRelevanceFunction(): NoFieldRelevanceFunctionContext { + let localContext = new NoFieldRelevanceFunctionContext(this.context, this.state); + this.enterRule(localContext, 134, OpenSearchSQLParser.RULE_noFieldRelevanceFunction); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 746; + this.noFieldRelevanceFunctionName(); + this.state = 747; + this.match(OpenSearchSQLParser.LR_BRACKET); + this.state = 748; + localContext._query = this.relevanceQuery(); + this.state = 753; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 332) { + { + { + this.state = 749; + this.match(OpenSearchSQLParser.COMMA); + this.state = 750; + this.relevanceArg(); + } + } + this.state = 755; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 756; + this.match(OpenSearchSQLParser.RR_BRACKET); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public singleFieldRelevanceFunction(): SingleFieldRelevanceFunctionContext { + let localContext = new SingleFieldRelevanceFunctionContext(this.context, this.state); + this.enterRule(localContext, 136, OpenSearchSQLParser.RULE_singleFieldRelevanceFunction); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 758; + this.singleFieldRelevanceFunctionName(); + this.state = 759; + this.match(OpenSearchSQLParser.LR_BRACKET); + this.state = 760; + localContext._field = this.relevanceField(); + this.state = 761; + this.match(OpenSearchSQLParser.COMMA); + this.state = 762; + localContext._query = this.relevanceQuery(); + this.state = 767; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 332) { + { + { + this.state = 763; + this.match(OpenSearchSQLParser.COMMA); + this.state = 764; + this.relevanceArg(); + } + } + this.state = 769; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 770; + this.match(OpenSearchSQLParser.RR_BRACKET); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public multiFieldRelevanceFunction(): MultiFieldRelevanceFunctionContext { + let localContext = new MultiFieldRelevanceFunctionContext(this.context, this.state); + this.enterRule(localContext, 138, OpenSearchSQLParser.RULE_multiFieldRelevanceFunction); + let _la: number; + try { + this.state = 809; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 72, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 772; + this.multiFieldRelevanceFunctionName(); + this.state = 773; + this.match(OpenSearchSQLParser.LR_BRACKET); + this.state = 774; + this.match(OpenSearchSQLParser.LT_SQR_PRTHS); + this.state = 775; + localContext._field = this.relevanceFieldAndWeight(); + this.state = 780; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 332) { + { + { + this.state = 776; + this.match(OpenSearchSQLParser.COMMA); + this.state = 777; + localContext._field = this.relevanceFieldAndWeight(); + } + } + this.state = 782; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 783; + this.match(OpenSearchSQLParser.RT_SQR_PRTHS); + this.state = 784; + this.match(OpenSearchSQLParser.COMMA); + this.state = 785; + localContext._query = this.relevanceQuery(); + this.state = 790; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 332) { + { + { + this.state = 786; + this.match(OpenSearchSQLParser.COMMA); + this.state = 787; + this.relevanceArg(); + } + } + this.state = 792; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 793; + this.match(OpenSearchSQLParser.RR_BRACKET); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 795; + this.multiFieldRelevanceFunctionName(); + this.state = 796; + this.match(OpenSearchSQLParser.LR_BRACKET); + this.state = 797; + this.alternateMultiMatchQuery(); + this.state = 798; + this.match(OpenSearchSQLParser.COMMA); + this.state = 799; + this.alternateMultiMatchField(); + this.state = 804; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 332) { + { + { + this.state = 800; + this.match(OpenSearchSQLParser.COMMA); + this.state = 801; + this.relevanceArg(); + } + } + this.state = 806; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 807; + this.match(OpenSearchSQLParser.RR_BRACKET); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public altSingleFieldRelevanceFunction(): AltSingleFieldRelevanceFunctionContext { + let localContext = new AltSingleFieldRelevanceFunctionContext(this.context, this.state); + this.enterRule(localContext, 140, OpenSearchSQLParser.RULE_altSingleFieldRelevanceFunction); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 811; + localContext._field = this.relevanceField(); + this.state = 812; + this.match(OpenSearchSQLParser.EQUAL_SYMBOL); + this.state = 813; + localContext._altSyntaxFunctionName = this.altSingleFieldRelevanceFunctionName(); + this.state = 814; + this.match(OpenSearchSQLParser.LR_BRACKET); + this.state = 815; + localContext._query = this.relevanceQuery(); + this.state = 820; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 332) { + { + { + this.state = 816; + this.match(OpenSearchSQLParser.COMMA); + this.state = 817; + this.relevanceArg(); + } + } + this.state = 822; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 823; + this.match(OpenSearchSQLParser.RR_BRACKET); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public altMultiFieldRelevanceFunction(): AltMultiFieldRelevanceFunctionContext { + let localContext = new AltMultiFieldRelevanceFunctionContext(this.context, this.state); + this.enterRule(localContext, 142, OpenSearchSQLParser.RULE_altMultiFieldRelevanceFunction); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 825; + localContext._field = this.relevanceField(); + this.state = 826; + this.match(OpenSearchSQLParser.EQUAL_SYMBOL); + this.state = 827; + localContext._altSyntaxFunctionName = this.altMultiFieldRelevanceFunctionName(); + this.state = 828; + this.match(OpenSearchSQLParser.LR_BRACKET); + this.state = 829; + localContext._query = this.relevanceQuery(); + this.state = 834; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 332) { + { + { + this.state = 830; + this.match(OpenSearchSQLParser.COMMA); + this.state = 831; + this.relevanceArg(); + } + } + this.state = 836; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 837; + this.match(OpenSearchSQLParser.RR_BRACKET); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public convertedDataType(): ConvertedDataTypeContext { + let localContext = new ConvertedDataTypeContext(this.context, this.state); + this.enterRule(localContext, 144, OpenSearchSQLParser.RULE_convertedDataType); + try { + this.state = 849; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchSQLParser.DATE: + this.enterOuterAlt(localContext, 1); + { + this.state = 839; + localContext._typeName = this.match(OpenSearchSQLParser.DATE); + } + break; + case OpenSearchSQLParser.TIME: + this.enterOuterAlt(localContext, 2); + { + this.state = 840; + localContext._typeName = this.match(OpenSearchSQLParser.TIME); + } + break; + case OpenSearchSQLParser.TIMESTAMP: + this.enterOuterAlt(localContext, 3); + { + this.state = 841; + localContext._typeName = this.match(OpenSearchSQLParser.TIMESTAMP); + } + break; + case OpenSearchSQLParser.INT: + this.enterOuterAlt(localContext, 4); + { + this.state = 842; + localContext._typeName = this.match(OpenSearchSQLParser.INT); + } + break; + case OpenSearchSQLParser.INTEGER: + this.enterOuterAlt(localContext, 5); + { + this.state = 843; + localContext._typeName = this.match(OpenSearchSQLParser.INTEGER); + } + break; + case OpenSearchSQLParser.DOUBLE: + this.enterOuterAlt(localContext, 6); + { + this.state = 844; + localContext._typeName = this.match(OpenSearchSQLParser.DOUBLE); + } + break; + case OpenSearchSQLParser.LONG: + this.enterOuterAlt(localContext, 7); + { + this.state = 845; + localContext._typeName = this.match(OpenSearchSQLParser.LONG); + } + break; + case OpenSearchSQLParser.FLOAT: + this.enterOuterAlt(localContext, 8); + { + this.state = 846; + localContext._typeName = this.match(OpenSearchSQLParser.FLOAT); + } + break; + case OpenSearchSQLParser.STRING: + this.enterOuterAlt(localContext, 9); + { + this.state = 847; + localContext._typeName = this.match(OpenSearchSQLParser.STRING); + } + break; + case OpenSearchSQLParser.BOOLEAN: + this.enterOuterAlt(localContext, 10); + { + this.state = 848; + localContext._typeName = this.match(OpenSearchSQLParser.BOOLEAN); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public caseFuncAlternative(): CaseFuncAlternativeContext { + let localContext = new CaseFuncAlternativeContext(this.context, this.state); + this.enterRule(localContext, 146, OpenSearchSQLParser.RULE_caseFuncAlternative); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 851; + this.match(OpenSearchSQLParser.WHEN); + this.state = 852; + localContext._condition = this.functionArg(); + this.state = 853; + this.match(OpenSearchSQLParser.THEN); + this.state = 854; + localContext._consequent = this.functionArg(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public aggregateFunction(): AggregateFunctionContext { + let localContext = new AggregateFunctionContext(this.context, this.state); + this.enterRule(localContext, 148, OpenSearchSQLParser.RULE_aggregateFunction); + try { + this.state = 872; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 76, this.context) ) { + case 1: + localContext = new RegularAggregateFunctionCallContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 856; + (localContext as RegularAggregateFunctionCallContext)._functionName = this.aggregationFunctionName(); + this.state = 857; + this.match(OpenSearchSQLParser.LR_BRACKET); + this.state = 858; + this.functionArg(); + this.state = 859; + this.match(OpenSearchSQLParser.RR_BRACKET); + } + break; + case 2: + localContext = new CountStarFunctionCallContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 861; + this.match(OpenSearchSQLParser.COUNT); + this.state = 862; + this.match(OpenSearchSQLParser.LR_BRACKET); + this.state = 863; + this.match(OpenSearchSQLParser.STAR); + this.state = 864; + this.match(OpenSearchSQLParser.RR_BRACKET); + } + break; + case 3: + localContext = new DistinctCountFunctionCallContext(localContext); + this.enterOuterAlt(localContext, 3); + { + this.state = 865; + this.match(OpenSearchSQLParser.COUNT); + this.state = 866; + this.match(OpenSearchSQLParser.LR_BRACKET); + this.state = 867; + this.match(OpenSearchSQLParser.DISTINCT); + this.state = 868; + this.functionArg(); + this.state = 869; + this.match(OpenSearchSQLParser.RR_BRACKET); + } + break; + case 4: + localContext = new PercentileApproxFunctionCallContext(localContext); + this.enterOuterAlt(localContext, 4); + { + this.state = 871; + this.percentileApproxFunction(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public percentileApproxFunction(): PercentileApproxFunctionContext { + let localContext = new PercentileApproxFunctionContext(this.context, this.state); + this.enterRule(localContext, 150, OpenSearchSQLParser.RULE_percentileApproxFunction); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 874; + _la = this.tokenStream.LA(1); + if(!(_la === 248 || _la === 249)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 875; + this.match(OpenSearchSQLParser.LR_BRACKET); + this.state = 876; + localContext._aggField = this.functionArg(); + this.state = 877; + this.match(OpenSearchSQLParser.COMMA); + this.state = 878; + localContext._percent = this.numericLiteral(); + this.state = 881; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 332) { + { + this.state = 879; + this.match(OpenSearchSQLParser.COMMA); + this.state = 880; + localContext._compression = this.numericLiteral(); + } + } + + this.state = 883; + this.match(OpenSearchSQLParser.RR_BRACKET); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public filterClause(): FilterClauseContext { + let localContext = new FilterClauseContext(this.context, this.state); + this.enterRule(localContext, 152, OpenSearchSQLParser.RULE_filterClause); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 885; + this.match(OpenSearchSQLParser.FILTER); + this.state = 886; + this.match(OpenSearchSQLParser.LR_BRACKET); + this.state = 887; + this.match(OpenSearchSQLParser.WHERE); + this.state = 888; + this.expression(0); + this.state = 889; + this.match(OpenSearchSQLParser.RR_BRACKET); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public aggregationFunctionName(): AggregationFunctionNameContext { + let localContext = new AggregationFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 154, OpenSearchSQLParser.RULE_aggregationFunctionName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 891; + _la = this.tokenStream.LA(1); + if(!(((((_la - 65)) & ~0x1F) === 0 && ((1 << (_la - 65)) & 4095) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public mathematicalFunctionName(): MathematicalFunctionNameContext { + let localContext = new MathematicalFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 156, OpenSearchSQLParser.RULE_mathematicalFunctionName); + try { + this.state = 920; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 78, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 893; + this.match(OpenSearchSQLParser.ABS); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 894; + this.match(OpenSearchSQLParser.CBRT); + } + break; + case 3: + this.enterOuterAlt(localContext, 3); + { + this.state = 895; + this.match(OpenSearchSQLParser.CEIL); + } + break; + case 4: + this.enterOuterAlt(localContext, 4); + { + this.state = 896; + this.match(OpenSearchSQLParser.CEILING); + } + break; + case 5: + this.enterOuterAlt(localContext, 5); + { + this.state = 897; + this.match(OpenSearchSQLParser.CONV); + } + break; + case 6: + this.enterOuterAlt(localContext, 6); + { + this.state = 898; + this.match(OpenSearchSQLParser.CRC32); + } + break; + case 7: + this.enterOuterAlt(localContext, 7); + { + this.state = 899; + this.match(OpenSearchSQLParser.E); + } + break; + case 8: + this.enterOuterAlt(localContext, 8); + { + this.state = 900; + this.match(OpenSearchSQLParser.EXP); + } + break; + case 9: + this.enterOuterAlt(localContext, 9); + { + this.state = 901; + this.match(OpenSearchSQLParser.EXPM1); + } + break; + case 10: + this.enterOuterAlt(localContext, 10); + { + this.state = 902; + this.match(OpenSearchSQLParser.FLOOR); + } + break; + case 11: + this.enterOuterAlt(localContext, 11); + { + this.state = 903; + this.match(OpenSearchSQLParser.LN); + } + break; + case 12: + this.enterOuterAlt(localContext, 12); + { + this.state = 904; + this.match(OpenSearchSQLParser.LOG); + } + break; + case 13: + this.enterOuterAlt(localContext, 13); + { + this.state = 905; + this.match(OpenSearchSQLParser.LOG10); + } + break; + case 14: + this.enterOuterAlt(localContext, 14); + { + this.state = 906; + this.match(OpenSearchSQLParser.LOG2); + } + break; + case 15: + this.enterOuterAlt(localContext, 15); + { + this.state = 907; + this.match(OpenSearchSQLParser.MOD); + } + break; + case 16: + this.enterOuterAlt(localContext, 16); + { + this.state = 908; + this.match(OpenSearchSQLParser.PI); + } + break; + case 17: + this.enterOuterAlt(localContext, 17); + { + this.state = 909; + this.match(OpenSearchSQLParser.POW); + } + break; + case 18: + this.enterOuterAlt(localContext, 18); + { + this.state = 910; + this.match(OpenSearchSQLParser.POWER); + } + break; + case 19: + this.enterOuterAlt(localContext, 19); + { + this.state = 911; + this.match(OpenSearchSQLParser.RAND); + } + break; + case 20: + this.enterOuterAlt(localContext, 20); + { + this.state = 912; + this.match(OpenSearchSQLParser.RINT); + } + break; + case 21: + this.enterOuterAlt(localContext, 21); + { + this.state = 913; + this.match(OpenSearchSQLParser.ROUND); + } + break; + case 22: + this.enterOuterAlt(localContext, 22); + { + this.state = 914; + this.match(OpenSearchSQLParser.SIGN); + } + break; + case 23: + this.enterOuterAlt(localContext, 23); + { + this.state = 915; + this.match(OpenSearchSQLParser.SIGNUM); + } + break; + case 24: + this.enterOuterAlt(localContext, 24); + { + this.state = 916; + this.match(OpenSearchSQLParser.SQRT); + } + break; + case 25: + this.enterOuterAlt(localContext, 25); + { + this.state = 917; + this.match(OpenSearchSQLParser.TRUNCATE); + } + break; + case 26: + this.enterOuterAlt(localContext, 26); + { + this.state = 918; + this.trigonometricFunctionName(); + } + break; + case 27: + this.enterOuterAlt(localContext, 27); + { + this.state = 919; + this.arithmeticFunctionName(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public trigonometricFunctionName(): TrigonometricFunctionNameContext { + let localContext = new TrigonometricFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 158, OpenSearchSQLParser.RULE_trigonometricFunctionName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 922; + _la = this.tokenStream.LA(1); + if(!(((((_la - 105)) & ~0x1F) === 0 && ((1 << (_la - 105)) & 114801) !== 0) || _la === 137 || ((((_la - 174)) & ~0x1F) === 0 && ((1 << (_la - 174)) & 265217) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public arithmeticFunctionName(): ArithmeticFunctionNameContext { + let localContext = new ArithmeticFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 160, OpenSearchSQLParser.RULE_arithmeticFunctionName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 924; + _la = this.tokenStream.LA(1); + if(!(_la === 106 || ((((_la - 138)) & ~0x1F) === 0 && ((1 << (_la - 138)) & 167772161) !== 0) || _la === 190 || _la === 318)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public dateTimeFunctionName(): DateTimeFunctionNameContext { + let localContext = new DateTimeFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 162, OpenSearchSQLParser.RULE_dateTimeFunctionName); + try { + this.state = 985; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchSQLParser.CURRENT_DATE: + case OpenSearchSQLParser.CURRENT_TIME: + case OpenSearchSQLParser.CURRENT_TIMESTAMP: + case OpenSearchSQLParser.LOCALTIME: + case OpenSearchSQLParser.LOCALTIMESTAMP: + case OpenSearchSQLParser.UTC_DATE: + case OpenSearchSQLParser.UTC_TIME: + case OpenSearchSQLParser.UTC_TIMESTAMP: + this.enterOuterAlt(localContext, 1); + { + this.state = 926; + this.datetimeConstantLiteral(); + } + break; + case OpenSearchSQLParser.ADDDATE: + this.enterOuterAlt(localContext, 2); + { + this.state = 927; + this.match(OpenSearchSQLParser.ADDDATE); + } + break; + case OpenSearchSQLParser.ADDTIME: + this.enterOuterAlt(localContext, 3); + { + this.state = 928; + this.match(OpenSearchSQLParser.ADDTIME); + } + break; + case OpenSearchSQLParser.CONVERT_TZ: + this.enterOuterAlt(localContext, 4); + { + this.state = 929; + this.match(OpenSearchSQLParser.CONVERT_TZ); + } + break; + case OpenSearchSQLParser.CURDATE: + this.enterOuterAlt(localContext, 5); + { + this.state = 930; + this.match(OpenSearchSQLParser.CURDATE); + } + break; + case OpenSearchSQLParser.CURTIME: + this.enterOuterAlt(localContext, 6); + { + this.state = 931; + this.match(OpenSearchSQLParser.CURTIME); + } + break; + case OpenSearchSQLParser.DATE: + this.enterOuterAlt(localContext, 7); + { + this.state = 932; + this.match(OpenSearchSQLParser.DATE); + } + break; + case OpenSearchSQLParser.DATE_ADD: + this.enterOuterAlt(localContext, 8); + { + this.state = 933; + this.match(OpenSearchSQLParser.DATE_ADD); + } + break; + case OpenSearchSQLParser.DATE_FORMAT: + this.enterOuterAlt(localContext, 9); + { + this.state = 934; + this.match(OpenSearchSQLParser.DATE_FORMAT); + } + break; + case OpenSearchSQLParser.DATE_SUB: + this.enterOuterAlt(localContext, 10); + { + this.state = 935; + this.match(OpenSearchSQLParser.DATE_SUB); + } + break; + case OpenSearchSQLParser.DATEDIFF: + this.enterOuterAlt(localContext, 11); + { + this.state = 936; + this.match(OpenSearchSQLParser.DATEDIFF); + } + break; + case OpenSearchSQLParser.DATETIME: + this.enterOuterAlt(localContext, 12); + { + this.state = 937; + this.match(OpenSearchSQLParser.DATETIME); + } + break; + case OpenSearchSQLParser.DAY: + this.enterOuterAlt(localContext, 13); + { + this.state = 938; + this.match(OpenSearchSQLParser.DAY); + } + break; + case OpenSearchSQLParser.DAYNAME: + this.enterOuterAlt(localContext, 14); + { + this.state = 939; + this.match(OpenSearchSQLParser.DAYNAME); + } + break; + case OpenSearchSQLParser.DAYOFMONTH: + this.enterOuterAlt(localContext, 15); + { + this.state = 940; + this.match(OpenSearchSQLParser.DAYOFMONTH); + } + break; + case OpenSearchSQLParser.DAY_OF_MONTH: + this.enterOuterAlt(localContext, 16); + { + this.state = 941; + this.match(OpenSearchSQLParser.DAY_OF_MONTH); + } + break; + case OpenSearchSQLParser.DAYOFWEEK: + this.enterOuterAlt(localContext, 17); + { + this.state = 942; + this.match(OpenSearchSQLParser.DAYOFWEEK); + } + break; + case OpenSearchSQLParser.DAYOFYEAR: + this.enterOuterAlt(localContext, 18); + { + this.state = 943; + this.match(OpenSearchSQLParser.DAYOFYEAR); + } + break; + case OpenSearchSQLParser.DAY_OF_YEAR: + this.enterOuterAlt(localContext, 19); + { + this.state = 944; + this.match(OpenSearchSQLParser.DAY_OF_YEAR); + } + break; + case OpenSearchSQLParser.DAY_OF_WEEK: + this.enterOuterAlt(localContext, 20); + { + this.state = 945; + this.match(OpenSearchSQLParser.DAY_OF_WEEK); + } + break; + case OpenSearchSQLParser.FROM_DAYS: + this.enterOuterAlt(localContext, 21); + { + this.state = 946; + this.match(OpenSearchSQLParser.FROM_DAYS); + } + break; + case OpenSearchSQLParser.FROM_UNIXTIME: + this.enterOuterAlt(localContext, 22); + { + this.state = 947; + this.match(OpenSearchSQLParser.FROM_UNIXTIME); + } + break; + case OpenSearchSQLParser.HOUR: + this.enterOuterAlt(localContext, 23); + { + this.state = 948; + this.match(OpenSearchSQLParser.HOUR); + } + break; + case OpenSearchSQLParser.HOUR_OF_DAY: + this.enterOuterAlt(localContext, 24); + { + this.state = 949; + this.match(OpenSearchSQLParser.HOUR_OF_DAY); + } + break; + case OpenSearchSQLParser.LAST_DAY: + this.enterOuterAlt(localContext, 25); + { + this.state = 950; + this.match(OpenSearchSQLParser.LAST_DAY); + } + break; + case OpenSearchSQLParser.MAKEDATE: + this.enterOuterAlt(localContext, 26); + { + this.state = 951; + this.match(OpenSearchSQLParser.MAKEDATE); + } + break; + case OpenSearchSQLParser.MAKETIME: + this.enterOuterAlt(localContext, 27); + { + this.state = 952; + this.match(OpenSearchSQLParser.MAKETIME); + } + break; + case OpenSearchSQLParser.MICROSECOND: + this.enterOuterAlt(localContext, 28); + { + this.state = 953; + this.match(OpenSearchSQLParser.MICROSECOND); + } + break; + case OpenSearchSQLParser.MINUTE: + this.enterOuterAlt(localContext, 29); + { + this.state = 954; + this.match(OpenSearchSQLParser.MINUTE); + } + break; + case OpenSearchSQLParser.MINUTE_OF_DAY: + this.enterOuterAlt(localContext, 30); + { + this.state = 955; + this.match(OpenSearchSQLParser.MINUTE_OF_DAY); + } + break; + case OpenSearchSQLParser.MINUTE_OF_HOUR: + this.enterOuterAlt(localContext, 31); + { + this.state = 956; + this.match(OpenSearchSQLParser.MINUTE_OF_HOUR); + } + break; + case OpenSearchSQLParser.MONTH: + this.enterOuterAlt(localContext, 32); + { + this.state = 957; + this.match(OpenSearchSQLParser.MONTH); + } + break; + case OpenSearchSQLParser.MONTHNAME: + this.enterOuterAlt(localContext, 33); + { + this.state = 958; + this.match(OpenSearchSQLParser.MONTHNAME); + } + break; + case OpenSearchSQLParser.MONTH_OF_YEAR: + this.enterOuterAlt(localContext, 34); + { + this.state = 959; + this.match(OpenSearchSQLParser.MONTH_OF_YEAR); + } + break; + case OpenSearchSQLParser.NOW: + this.enterOuterAlt(localContext, 35); + { + this.state = 960; + this.match(OpenSearchSQLParser.NOW); + } + break; + case OpenSearchSQLParser.PERIOD_ADD: + this.enterOuterAlt(localContext, 36); + { + this.state = 961; + this.match(OpenSearchSQLParser.PERIOD_ADD); + } + break; + case OpenSearchSQLParser.PERIOD_DIFF: + this.enterOuterAlt(localContext, 37); + { + this.state = 962; + this.match(OpenSearchSQLParser.PERIOD_DIFF); + } + break; + case OpenSearchSQLParser.QUARTER: + this.enterOuterAlt(localContext, 38); + { + this.state = 963; + this.match(OpenSearchSQLParser.QUARTER); + } + break; + case OpenSearchSQLParser.SEC_TO_TIME: + this.enterOuterAlt(localContext, 39); + { + this.state = 964; + this.match(OpenSearchSQLParser.SEC_TO_TIME); + } + break; + case OpenSearchSQLParser.SECOND: + this.enterOuterAlt(localContext, 40); + { + this.state = 965; + this.match(OpenSearchSQLParser.SECOND); + } + break; + case OpenSearchSQLParser.SECOND_OF_MINUTE: + this.enterOuterAlt(localContext, 41); + { + this.state = 966; + this.match(OpenSearchSQLParser.SECOND_OF_MINUTE); + } + break; + case OpenSearchSQLParser.SUBDATE: + this.enterOuterAlt(localContext, 42); + { + this.state = 967; + this.match(OpenSearchSQLParser.SUBDATE); + } + break; + case OpenSearchSQLParser.SUBTIME: + this.enterOuterAlt(localContext, 43); + { + this.state = 968; + this.match(OpenSearchSQLParser.SUBTIME); + } + break; + case OpenSearchSQLParser.SYSDATE: + this.enterOuterAlt(localContext, 44); + { + this.state = 969; + this.match(OpenSearchSQLParser.SYSDATE); + } + break; + case OpenSearchSQLParser.STR_TO_DATE: + this.enterOuterAlt(localContext, 45); + { + this.state = 970; + this.match(OpenSearchSQLParser.STR_TO_DATE); + } + break; + case OpenSearchSQLParser.TIME: + this.enterOuterAlt(localContext, 46); + { + this.state = 971; + this.match(OpenSearchSQLParser.TIME); + } + break; + case OpenSearchSQLParser.TIME_FORMAT: + this.enterOuterAlt(localContext, 47); + { + this.state = 972; + this.match(OpenSearchSQLParser.TIME_FORMAT); + } + break; + case OpenSearchSQLParser.TIME_TO_SEC: + this.enterOuterAlt(localContext, 48); + { + this.state = 973; + this.match(OpenSearchSQLParser.TIME_TO_SEC); + } + break; + case OpenSearchSQLParser.TIMEDIFF: + this.enterOuterAlt(localContext, 49); + { + this.state = 974; + this.match(OpenSearchSQLParser.TIMEDIFF); + } + break; + case OpenSearchSQLParser.TIMESTAMP: + this.enterOuterAlt(localContext, 50); + { + this.state = 975; + this.match(OpenSearchSQLParser.TIMESTAMP); + } + break; + case OpenSearchSQLParser.TO_DAYS: + this.enterOuterAlt(localContext, 51); + { + this.state = 976; + this.match(OpenSearchSQLParser.TO_DAYS); + } + break; + case OpenSearchSQLParser.TO_SECONDS: + this.enterOuterAlt(localContext, 52); + { + this.state = 977; + this.match(OpenSearchSQLParser.TO_SECONDS); + } + break; + case OpenSearchSQLParser.UNIX_TIMESTAMP: + this.enterOuterAlt(localContext, 53); + { + this.state = 978; + this.match(OpenSearchSQLParser.UNIX_TIMESTAMP); + } + break; + case OpenSearchSQLParser.WEEK: + this.enterOuterAlt(localContext, 54); + { + this.state = 979; + this.match(OpenSearchSQLParser.WEEK); + } + break; + case OpenSearchSQLParser.WEEKDAY: + this.enterOuterAlt(localContext, 55); + { + this.state = 980; + this.match(OpenSearchSQLParser.WEEKDAY); + } + break; + case OpenSearchSQLParser.WEEK_OF_YEAR: + this.enterOuterAlt(localContext, 56); + { + this.state = 981; + this.match(OpenSearchSQLParser.WEEK_OF_YEAR); + } + break; + case OpenSearchSQLParser.WEEKOFYEAR: + this.enterOuterAlt(localContext, 57); + { + this.state = 982; + this.match(OpenSearchSQLParser.WEEKOFYEAR); + } + break; + case OpenSearchSQLParser.YEAR: + this.enterOuterAlt(localContext, 58); + { + this.state = 983; + this.match(OpenSearchSQLParser.YEAR); + } + break; + case OpenSearchSQLParser.YEARWEEK: + this.enterOuterAlt(localContext, 59); + { + this.state = 984; + this.match(OpenSearchSQLParser.YEARWEEK); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public textFunctionName(): TextFunctionNameContext { + let localContext = new TextFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 164, OpenSearchSQLParser.RULE_textFunctionName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 987; + _la = this.tokenStream.LA(1); + if(!(_la === 37 || _la === 54 || ((((_la - 77)) & ~0x1F) === 0 && ((1 << (_la - 77)) & 2147483651) !== 0) || _la === 115 || _la === 116 || ((((_la - 151)) & ~0x1F) === 0 && ((1 << (_la - 151)) & 838861585) !== 0) || _la === 202 || _la === 270 || _la === 271)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public flowControlFunctionName(): FlowControlFunctionNameContext { + let localContext = new FlowControlFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 166, OpenSearchSQLParser.RULE_flowControlFunctionName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 989; + _la = this.tokenStream.LA(1); + if(!(((((_la - 147)) & ~0x1F) === 0 && ((1 << (_la - 147)) & 1048583) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public noFieldRelevanceFunctionName(): NoFieldRelevanceFunctionNameContext { + let localContext = new NoFieldRelevanceFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 168, OpenSearchSQLParser.RULE_noFieldRelevanceFunctionName); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 991; + this.match(OpenSearchSQLParser.QUERY); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public systemFunctionName(): SystemFunctionNameContext { + let localContext = new SystemFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 170, OpenSearchSQLParser.RULE_systemFunctionName); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 993; + this.match(OpenSearchSQLParser.TYPEOF); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public nestedFunctionName(): NestedFunctionNameContext { + let localContext = new NestedFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 172, OpenSearchSQLParser.RULE_nestedFunctionName); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 995; + this.match(OpenSearchSQLParser.NESTED); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public scoreRelevanceFunctionName(): ScoreRelevanceFunctionNameContext { + let localContext = new ScoreRelevanceFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 174, OpenSearchSQLParser.RULE_scoreRelevanceFunctionName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 997; + _la = this.tokenStream.LA(1); + if(!(((((_la - 254)) & ~0x1F) === 0 && ((1 << (_la - 254)) & 7) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public singleFieldRelevanceFunctionName(): SingleFieldRelevanceFunctionNameContext { + let localContext = new SingleFieldRelevanceFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 176, OpenSearchSQLParser.RULE_singleFieldRelevanceFunctionName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 999; + _la = this.tokenStream.LA(1); + if(!(_la === 41 || ((((_la - 232)) & ~0x1F) === 0 && ((1 << (_la - 232)) & 231) !== 0) || _la === 268 || _la === 269 || _la === 311)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public multiFieldRelevanceFunctionName(): MultiFieldRelevanceFunctionNameContext { + let localContext = new MultiFieldRelevanceFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 178, OpenSearchSQLParser.RULE_multiFieldRelevanceFunctionName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1001; + _la = this.tokenStream.LA(1); + if(!(((((_la - 235)) & ~0x1F) === 0 && ((1 << (_la - 235)) & 1795) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public altSingleFieldRelevanceFunctionName(): AltSingleFieldRelevanceFunctionNameContext { + let localContext = new AltSingleFieldRelevanceFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 180, OpenSearchSQLParser.RULE_altSingleFieldRelevanceFunctionName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1003; + _la = this.tokenStream.LA(1); + if(!(((((_la - 232)) & ~0x1F) === 0 && ((1 << (_la - 232)) & 195) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public altMultiFieldRelevanceFunctionName(): AltMultiFieldRelevanceFunctionNameContext { + let localContext = new AltMultiFieldRelevanceFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 182, OpenSearchSQLParser.RULE_altMultiFieldRelevanceFunctionName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1005; + _la = this.tokenStream.LA(1); + if(!(_la === 243 || _la === 244)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public functionArgs(): FunctionArgsContext { + let localContext = new FunctionArgsContext(this.context, this.state); + this.enterRule(localContext, 184, OpenSearchSQLParser.RULE_functionArgs); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1015; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 83963904) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 3766747939) !== 0) || ((((_la - 68)) & ~0x1F) === 0 && ((1 << (_la - 68)) & 16766975) !== 0) || ((((_la - 104)) & ~0x1F) === 0 && ((1 << (_la - 104)) & 4294967295) !== 0) || ((((_la - 136)) & ~0x1F) === 0 && ((1 << (_la - 136)) & 4294967295) !== 0) || ((((_la - 168)) & ~0x1F) === 0 && ((1 << (_la - 168)) & 4294967295) !== 0) || ((((_la - 200)) & ~0x1F) === 0 && ((1 << (_la - 200)) & 538164223) !== 0) || ((((_la - 232)) & ~0x1F) === 0 && ((1 << (_la - 232)) & 1674805247) !== 0) || ((((_la - 264)) & ~0x1F) === 0 && ((1 << (_la - 264)) & 1023) !== 0) || ((((_la - 306)) & ~0x1F) === 0 && ((1 << (_la - 306)) & 3764393509) !== 0) || ((((_la - 343)) & ~0x1F) === 0 && ((1 << (_la - 343)) & 459) !== 0)) { + { + this.state = 1007; + this.functionArg(); + this.state = 1012; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 332) { + { + { + this.state = 1008; + this.match(OpenSearchSQLParser.COMMA); + this.state = 1009; + this.functionArg(); + } + } + this.state = 1014; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public functionArg(): FunctionArgContext { + let localContext = new FunctionArgContext(this.context, this.state); + this.enterRule(localContext, 186, OpenSearchSQLParser.RULE_functionArg); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1017; + this.expression(0); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public relevanceArg(): RelevanceArgContext { + let localContext = new RelevanceArgContext(this.context, this.state); + this.enterRule(localContext, 188, OpenSearchSQLParser.RULE_relevanceArg); + try { + this.state = 1027; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchSQLParser.ALLOW_LEADING_WILDCARD: + case OpenSearchSQLParser.ANALYZER: + case OpenSearchSQLParser.ANALYZE_WILDCARD: + case OpenSearchSQLParser.AUTO_GENERATE_SYNONYMS_PHRASE_QUERY: + case OpenSearchSQLParser.BOOST: + case OpenSearchSQLParser.CASE_INSENSITIVE: + case OpenSearchSQLParser.CUTOFF_FREQUENCY: + case OpenSearchSQLParser.DEFAULT_FIELD: + case OpenSearchSQLParser.DEFAULT_OPERATOR: + case OpenSearchSQLParser.ESCAPE: + case OpenSearchSQLParser.ENABLE_POSITION_INCREMENTS: + case OpenSearchSQLParser.FIELDS: + case OpenSearchSQLParser.FLAGS: + case OpenSearchSQLParser.FUZZINESS: + case OpenSearchSQLParser.FUZZY_MAX_EXPANSIONS: + case OpenSearchSQLParser.FUZZY_PREFIX_LENGTH: + case OpenSearchSQLParser.FUZZY_REWRITE: + case OpenSearchSQLParser.FUZZY_TRANSPOSITIONS: + case OpenSearchSQLParser.LENIENT: + case OpenSearchSQLParser.LOW_FREQ_OPERATOR: + case OpenSearchSQLParser.MAX_DETERMINIZED_STATES: + case OpenSearchSQLParser.MAX_EXPANSIONS: + case OpenSearchSQLParser.MINIMUM_SHOULD_MATCH: + case OpenSearchSQLParser.OPERATOR: + case OpenSearchSQLParser.PHRASE_SLOP: + case OpenSearchSQLParser.PREFIX_LENGTH: + case OpenSearchSQLParser.QUOTE_ANALYZER: + case OpenSearchSQLParser.QUOTE_FIELD_SUFFIX: + case OpenSearchSQLParser.REWRITE: + case OpenSearchSQLParser.SLOP: + case OpenSearchSQLParser.TIE_BREAKER: + case OpenSearchSQLParser.TIME_ZONE: + case OpenSearchSQLParser.TYPE: + case OpenSearchSQLParser.ZERO_TERMS_QUERY: + this.enterOuterAlt(localContext, 1); + { + this.state = 1019; + this.relevanceArgName(); + this.state = 1020; + this.match(OpenSearchSQLParser.EQUAL_SYMBOL); + this.state = 1021; + this.relevanceArgValue(); + } + break; + case OpenSearchSQLParser.STRING_LITERAL: + case OpenSearchSQLParser.DOUBLE_QUOTE_ID: + this.enterOuterAlt(localContext, 2); + { + this.state = 1023; + localContext._argName = this.stringLiteral(); + this.state = 1024; + this.match(OpenSearchSQLParser.EQUAL_SYMBOL); + this.state = 1025; + localContext._argVal = this.relevanceArgValue(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public highlightArg(): HighlightArgContext { + let localContext = new HighlightArgContext(this.context, this.state); + this.enterRule(localContext, 190, OpenSearchSQLParser.RULE_highlightArg); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1029; + this.highlightArgName(); + this.state = 1030; + this.match(OpenSearchSQLParser.EQUAL_SYMBOL); + this.state = 1031; + this.highlightArgValue(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public relevanceArgName(): RelevanceArgNameContext { + let localContext = new RelevanceArgNameContext(this.context, this.state); + this.enterRule(localContext, 192, OpenSearchSQLParser.RULE_relevanceArgName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1033; + _la = this.tokenStream.LA(1); + if(!(((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 4294967295) !== 0) || _la === 306 || _la === 307)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public highlightArgName(): HighlightArgNameContext { + let localContext = new HighlightArgNameContext(this.context, this.state); + this.enterRule(localContext, 194, OpenSearchSQLParser.RULE_highlightArgName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1035; + _la = this.tokenStream.LA(1); + if(!(_la === 309 || _la === 310)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public relevanceFieldAndWeight(): RelevanceFieldAndWeightContext { + let localContext = new RelevanceFieldAndWeightContext(this.context, this.state); + this.enterRule(localContext, 196, OpenSearchSQLParser.RULE_relevanceFieldAndWeight); + try { + this.state = 1045; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 83, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 1037; + localContext._field = this.relevanceField(); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 1038; + localContext._field = this.relevanceField(); + this.state = 1039; + localContext._weight = this.relevanceFieldWeight(); + } + break; + case 3: + this.enterOuterAlt(localContext, 3); + { + this.state = 1041; + localContext._field = this.relevanceField(); + this.state = 1042; + this.match(OpenSearchSQLParser.BIT_XOR_OP); + this.state = 1043; + localContext._weight = this.relevanceFieldWeight(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public relevanceFieldWeight(): RelevanceFieldWeightContext { + let localContext = new RelevanceFieldWeightContext(this.context, this.state); + this.enterRule(localContext, 198, OpenSearchSQLParser.RULE_relevanceFieldWeight); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1047; + this.numericLiteral(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public relevanceField(): RelevanceFieldContext { + let localContext = new RelevanceFieldContext(this.context, this.state); + this.enterRule(localContext, 200, OpenSearchSQLParser.RULE_relevanceField); + try { + this.state = 1051; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchSQLParser.DATETIME: + case OpenSearchSQLParser.FIRST: + case OpenSearchSQLParser.LAST: + case OpenSearchSQLParser.LEFT: + case OpenSearchSQLParser.RIGHT: + case OpenSearchSQLParser.AVG: + case OpenSearchSQLParser.COUNT: + case OpenSearchSQLParser.MAX: + case OpenSearchSQLParser.MIN: + case OpenSearchSQLParser.SUM: + case OpenSearchSQLParser.SUBSTRING: + case OpenSearchSQLParser.TRIM: + case OpenSearchSQLParser.FULL: + case OpenSearchSQLParser.MICROSECOND: + case OpenSearchSQLParser.SECOND: + case OpenSearchSQLParser.MINUTE: + case OpenSearchSQLParser.HOUR: + case OpenSearchSQLParser.DAY: + case OpenSearchSQLParser.WEEK: + case OpenSearchSQLParser.MONTH: + case OpenSearchSQLParser.QUARTER: + case OpenSearchSQLParser.YEAR: + case OpenSearchSQLParser.ABS: + case OpenSearchSQLParser.ACOS: + case OpenSearchSQLParser.ADD: + case OpenSearchSQLParser.ADDTIME: + case OpenSearchSQLParser.ASCII: + case OpenSearchSQLParser.ASIN: + case OpenSearchSQLParser.ATAN: + case OpenSearchSQLParser.ATAN2: + case OpenSearchSQLParser.CBRT: + case OpenSearchSQLParser.CEIL: + case OpenSearchSQLParser.CEILING: + case OpenSearchSQLParser.CONCAT: + case OpenSearchSQLParser.CONCAT_WS: + case OpenSearchSQLParser.CONV: + case OpenSearchSQLParser.CONVERT_TZ: + case OpenSearchSQLParser.COS: + case OpenSearchSQLParser.COSH: + case OpenSearchSQLParser.COT: + case OpenSearchSQLParser.CRC32: + case OpenSearchSQLParser.CURDATE: + case OpenSearchSQLParser.CURTIME: + case OpenSearchSQLParser.CURRENT_DATE: + case OpenSearchSQLParser.CURRENT_TIME: + case OpenSearchSQLParser.CURRENT_TIMESTAMP: + case OpenSearchSQLParser.DATE: + case OpenSearchSQLParser.DATE_ADD: + case OpenSearchSQLParser.DATE_FORMAT: + case OpenSearchSQLParser.DATE_SUB: + case OpenSearchSQLParser.DATEDIFF: + case OpenSearchSQLParser.DAYNAME: + case OpenSearchSQLParser.DAYOFMONTH: + case OpenSearchSQLParser.DAYOFWEEK: + case OpenSearchSQLParser.DAYOFYEAR: + case OpenSearchSQLParser.DEGREES: + case OpenSearchSQLParser.DIVIDE: + case OpenSearchSQLParser.E: + case OpenSearchSQLParser.EXP: + case OpenSearchSQLParser.EXPM1: + case OpenSearchSQLParser.FLOOR: + case OpenSearchSQLParser.FROM_DAYS: + case OpenSearchSQLParser.FROM_UNIXTIME: + case OpenSearchSQLParser.IF: + case OpenSearchSQLParser.IFNULL: + case OpenSearchSQLParser.ISNULL: + case OpenSearchSQLParser.LAST_DAY: + case OpenSearchSQLParser.LENGTH: + case OpenSearchSQLParser.LN: + case OpenSearchSQLParser.LOCALTIME: + case OpenSearchSQLParser.LOCALTIMESTAMP: + case OpenSearchSQLParser.LOCATE: + case OpenSearchSQLParser.LOG: + case OpenSearchSQLParser.LOG10: + case OpenSearchSQLParser.LOG2: + case OpenSearchSQLParser.LOWER: + case OpenSearchSQLParser.LTRIM: + case OpenSearchSQLParser.MAKEDATE: + case OpenSearchSQLParser.MAKETIME: + case OpenSearchSQLParser.MODULUS: + case OpenSearchSQLParser.MONTHNAME: + case OpenSearchSQLParser.MULTIPLY: + case OpenSearchSQLParser.NOW: + case OpenSearchSQLParser.NULLIF: + case OpenSearchSQLParser.PERIOD_ADD: + case OpenSearchSQLParser.PERIOD_DIFF: + case OpenSearchSQLParser.PI: + case OpenSearchSQLParser.POW: + case OpenSearchSQLParser.POWER: + case OpenSearchSQLParser.RADIANS: + case OpenSearchSQLParser.RAND: + case OpenSearchSQLParser.REPLACE: + case OpenSearchSQLParser.RINT: + case OpenSearchSQLParser.ROUND: + case OpenSearchSQLParser.RTRIM: + case OpenSearchSQLParser.REVERSE: + case OpenSearchSQLParser.SEC_TO_TIME: + case OpenSearchSQLParser.SIGN: + case OpenSearchSQLParser.SIGNUM: + case OpenSearchSQLParser.SIN: + case OpenSearchSQLParser.SINH: + case OpenSearchSQLParser.SQRT: + case OpenSearchSQLParser.STR_TO_DATE: + case OpenSearchSQLParser.SUBDATE: + case OpenSearchSQLParser.SUBTIME: + case OpenSearchSQLParser.SUBTRACT: + case OpenSearchSQLParser.SYSDATE: + case OpenSearchSQLParser.TAN: + case OpenSearchSQLParser.TIME: + case OpenSearchSQLParser.TIMEDIFF: + case OpenSearchSQLParser.TIME_FORMAT: + case OpenSearchSQLParser.TIME_TO_SEC: + case OpenSearchSQLParser.TIMESTAMP: + case OpenSearchSQLParser.TRUNCATE: + case OpenSearchSQLParser.TO_DAYS: + case OpenSearchSQLParser.TO_SECONDS: + case OpenSearchSQLParser.UNIX_TIMESTAMP: + case OpenSearchSQLParser.UPPER: + case OpenSearchSQLParser.UTC_DATE: + case OpenSearchSQLParser.UTC_TIME: + case OpenSearchSQLParser.UTC_TIMESTAMP: + case OpenSearchSQLParser.D: + case OpenSearchSQLParser.T: + case OpenSearchSQLParser.TS: + case OpenSearchSQLParser.DAY_OF_MONTH: + case OpenSearchSQLParser.DAY_OF_YEAR: + case OpenSearchSQLParser.DAY_OF_WEEK: + case OpenSearchSQLParser.FIELD: + case OpenSearchSQLParser.HOUR_OF_DAY: + case OpenSearchSQLParser.MINUTE_OF_DAY: + case OpenSearchSQLParser.MINUTE_OF_HOUR: + case OpenSearchSQLParser.MONTH_OF_YEAR: + case OpenSearchSQLParser.NESTED: + case OpenSearchSQLParser.SECOND_OF_MINUTE: + case OpenSearchSQLParser.TYPEOF: + case OpenSearchSQLParser.WEEK_OF_YEAR: + case OpenSearchSQLParser.WEEKOFYEAR: + case OpenSearchSQLParser.WEEKDAY: + case OpenSearchSQLParser.SUBSTR: + case OpenSearchSQLParser.STRCMP: + case OpenSearchSQLParser.ADDDATE: + case OpenSearchSQLParser.YEARWEEK: + case OpenSearchSQLParser.TYPE: + case OpenSearchSQLParser.MOD: + case OpenSearchSQLParser.DOT: + case OpenSearchSQLParser.ID: + case OpenSearchSQLParser.BACKTICK_QUOTE_ID: + this.enterOuterAlt(localContext, 1); + { + this.state = 1049; + this.qualifiedName(); + } + break; + case OpenSearchSQLParser.STRING_LITERAL: + case OpenSearchSQLParser.DOUBLE_QUOTE_ID: + this.enterOuterAlt(localContext, 2); + { + this.state = 1050; + this.stringLiteral(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public relevanceQuery(): RelevanceQueryContext { + let localContext = new RelevanceQueryContext(this.context, this.state); + this.enterRule(localContext, 202, OpenSearchSQLParser.RULE_relevanceQuery); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1053; + this.relevanceArgValue(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public relevanceArgValue(): RelevanceArgValueContext { + let localContext = new RelevanceArgValueContext(this.context, this.state); + this.enterRule(localContext, 204, OpenSearchSQLParser.RULE_relevanceArgValue); + try { + this.state = 1057; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 85, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 1055; + this.qualifiedName(); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 1056; + this.constant(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public highlightArgValue(): HighlightArgValueContext { + let localContext = new HighlightArgValueContext(this.context, this.state); + this.enterRule(localContext, 206, OpenSearchSQLParser.RULE_highlightArgValue); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1059; + this.stringLiteral(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public alternateMultiMatchArgName(): AlternateMultiMatchArgNameContext { + let localContext = new AlternateMultiMatchArgNameContext(this.context, this.state); + this.enterRule(localContext, 208, OpenSearchSQLParser.RULE_alternateMultiMatchArgName); + try { + this.state = 1064; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchSQLParser.FIELDS: + this.enterOuterAlt(localContext, 1); + { + this.state = 1061; + this.match(OpenSearchSQLParser.FIELDS); + } + break; + case OpenSearchSQLParser.QUERY: + this.enterOuterAlt(localContext, 2); + { + this.state = 1062; + this.match(OpenSearchSQLParser.QUERY); + } + break; + case OpenSearchSQLParser.STRING_LITERAL: + case OpenSearchSQLParser.DOUBLE_QUOTE_ID: + this.enterOuterAlt(localContext, 3); + { + this.state = 1063; + this.stringLiteral(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public alternateMultiMatchQuery(): AlternateMultiMatchQueryContext { + let localContext = new AlternateMultiMatchQueryContext(this.context, this.state); + this.enterRule(localContext, 210, OpenSearchSQLParser.RULE_alternateMultiMatchQuery); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1066; + localContext._argName = this.alternateMultiMatchArgName(); + this.state = 1067; + this.match(OpenSearchSQLParser.EQUAL_SYMBOL); + this.state = 1068; + localContext._argVal = this.relevanceArgValue(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public alternateMultiMatchField(): AlternateMultiMatchFieldContext { + let localContext = new AlternateMultiMatchFieldContext(this.context, this.state); + this.enterRule(localContext, 212, OpenSearchSQLParser.RULE_alternateMultiMatchField); + try { + this.state = 1080; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 87, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 1070; + localContext._argName = this.alternateMultiMatchArgName(); + this.state = 1071; + this.match(OpenSearchSQLParser.EQUAL_SYMBOL); + this.state = 1072; + localContext._argVal = this.relevanceArgValue(); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 1074; + localContext._argName = this.alternateMultiMatchArgName(); + this.state = 1075; + this.match(OpenSearchSQLParser.EQUAL_SYMBOL); + this.state = 1076; + this.match(OpenSearchSQLParser.LT_SQR_PRTHS); + this.state = 1077; + localContext._argVal = this.relevanceArgValue(); + this.state = 1078; + this.match(OpenSearchSQLParser.RT_SQR_PRTHS); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public tableName(): TableNameContext { + let localContext = new TableNameContext(this.context, this.state); + this.enterRule(localContext, 214, OpenSearchSQLParser.RULE_tableName); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1082; + this.qualifiedName(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public columnName(): ColumnNameContext { + let localContext = new ColumnNameContext(this.context, this.state); + this.enterRule(localContext, 216, OpenSearchSQLParser.RULE_columnName); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1084; + this.qualifiedName(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public allTupleFields(): AllTupleFieldsContext { + let localContext = new AllTupleFieldsContext(this.context, this.state); + this.enterRule(localContext, 218, OpenSearchSQLParser.RULE_allTupleFields); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1086; + localContext._path = this.qualifiedName(); + this.state = 1087; + this.match(OpenSearchSQLParser.DOT); + this.state = 1088; + this.match(OpenSearchSQLParser.STAR); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public alias(): AliasContext { + let localContext = new AliasContext(this.context, this.state); + this.enterRule(localContext, 220, OpenSearchSQLParser.RULE_alias); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1090; + this.ident(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public qualifiedName(): QualifiedNameContext { + let localContext = new QualifiedNameContext(this.context, this.state); + this.enterRule(localContext, 222, OpenSearchSQLParser.RULE_qualifiedName); + try { + let alternative: number; + this.enterOuterAlt(localContext, 1); + { + this.state = 1092; + this.ident(); + this.state = 1097; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 88, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + { + { + this.state = 1093; + this.match(OpenSearchSQLParser.DOT); + this.state = 1094; + this.ident(); + } + } + } + this.state = 1099; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 88, this.context); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public ident(): IdentContext { + let localContext = new IdentContext(this.context, this.state); + this.enterRule(localContext, 224, OpenSearchSQLParser.RULE_ident); + let _la: number; + try { + this.state = 1107; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchSQLParser.DOT: + case OpenSearchSQLParser.ID: + this.enterOuterAlt(localContext, 1); + { + this.state = 1101; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 327) { + { + this.state = 1100; + this.match(OpenSearchSQLParser.DOT); + } + } + + this.state = 1103; + this.match(OpenSearchSQLParser.ID); + } + break; + case OpenSearchSQLParser.BACKTICK_QUOTE_ID: + this.enterOuterAlt(localContext, 2); + { + this.state = 1104; + this.match(OpenSearchSQLParser.BACKTICK_QUOTE_ID); + } + break; + case OpenSearchSQLParser.FIRST: + case OpenSearchSQLParser.LAST: + case OpenSearchSQLParser.AVG: + case OpenSearchSQLParser.COUNT: + case OpenSearchSQLParser.MAX: + case OpenSearchSQLParser.MIN: + case OpenSearchSQLParser.SUM: + case OpenSearchSQLParser.FULL: + case OpenSearchSQLParser.D: + case OpenSearchSQLParser.T: + case OpenSearchSQLParser.TS: + case OpenSearchSQLParser.FIELD: + case OpenSearchSQLParser.TYPE: + this.enterOuterAlt(localContext, 3); + { + this.state = 1105; + this.keywordsCanBeId(); + } + break; + case OpenSearchSQLParser.DATETIME: + case OpenSearchSQLParser.LEFT: + case OpenSearchSQLParser.RIGHT: + case OpenSearchSQLParser.SUBSTRING: + case OpenSearchSQLParser.TRIM: + case OpenSearchSQLParser.MICROSECOND: + case OpenSearchSQLParser.SECOND: + case OpenSearchSQLParser.MINUTE: + case OpenSearchSQLParser.HOUR: + case OpenSearchSQLParser.DAY: + case OpenSearchSQLParser.WEEK: + case OpenSearchSQLParser.MONTH: + case OpenSearchSQLParser.QUARTER: + case OpenSearchSQLParser.YEAR: + case OpenSearchSQLParser.ABS: + case OpenSearchSQLParser.ACOS: + case OpenSearchSQLParser.ADD: + case OpenSearchSQLParser.ADDTIME: + case OpenSearchSQLParser.ASCII: + case OpenSearchSQLParser.ASIN: + case OpenSearchSQLParser.ATAN: + case OpenSearchSQLParser.ATAN2: + case OpenSearchSQLParser.CBRT: + case OpenSearchSQLParser.CEIL: + case OpenSearchSQLParser.CEILING: + case OpenSearchSQLParser.CONCAT: + case OpenSearchSQLParser.CONCAT_WS: + case OpenSearchSQLParser.CONV: + case OpenSearchSQLParser.CONVERT_TZ: + case OpenSearchSQLParser.COS: + case OpenSearchSQLParser.COSH: + case OpenSearchSQLParser.COT: + case OpenSearchSQLParser.CRC32: + case OpenSearchSQLParser.CURDATE: + case OpenSearchSQLParser.CURTIME: + case OpenSearchSQLParser.CURRENT_DATE: + case OpenSearchSQLParser.CURRENT_TIME: + case OpenSearchSQLParser.CURRENT_TIMESTAMP: + case OpenSearchSQLParser.DATE: + case OpenSearchSQLParser.DATE_ADD: + case OpenSearchSQLParser.DATE_FORMAT: + case OpenSearchSQLParser.DATE_SUB: + case OpenSearchSQLParser.DATEDIFF: + case OpenSearchSQLParser.DAYNAME: + case OpenSearchSQLParser.DAYOFMONTH: + case OpenSearchSQLParser.DAYOFWEEK: + case OpenSearchSQLParser.DAYOFYEAR: + case OpenSearchSQLParser.DEGREES: + case OpenSearchSQLParser.DIVIDE: + case OpenSearchSQLParser.E: + case OpenSearchSQLParser.EXP: + case OpenSearchSQLParser.EXPM1: + case OpenSearchSQLParser.FLOOR: + case OpenSearchSQLParser.FROM_DAYS: + case OpenSearchSQLParser.FROM_UNIXTIME: + case OpenSearchSQLParser.IF: + case OpenSearchSQLParser.IFNULL: + case OpenSearchSQLParser.ISNULL: + case OpenSearchSQLParser.LAST_DAY: + case OpenSearchSQLParser.LENGTH: + case OpenSearchSQLParser.LN: + case OpenSearchSQLParser.LOCALTIME: + case OpenSearchSQLParser.LOCALTIMESTAMP: + case OpenSearchSQLParser.LOCATE: + case OpenSearchSQLParser.LOG: + case OpenSearchSQLParser.LOG10: + case OpenSearchSQLParser.LOG2: + case OpenSearchSQLParser.LOWER: + case OpenSearchSQLParser.LTRIM: + case OpenSearchSQLParser.MAKEDATE: + case OpenSearchSQLParser.MAKETIME: + case OpenSearchSQLParser.MODULUS: + case OpenSearchSQLParser.MONTHNAME: + case OpenSearchSQLParser.MULTIPLY: + case OpenSearchSQLParser.NOW: + case OpenSearchSQLParser.NULLIF: + case OpenSearchSQLParser.PERIOD_ADD: + case OpenSearchSQLParser.PERIOD_DIFF: + case OpenSearchSQLParser.PI: + case OpenSearchSQLParser.POW: + case OpenSearchSQLParser.POWER: + case OpenSearchSQLParser.RADIANS: + case OpenSearchSQLParser.RAND: + case OpenSearchSQLParser.REPLACE: + case OpenSearchSQLParser.RINT: + case OpenSearchSQLParser.ROUND: + case OpenSearchSQLParser.RTRIM: + case OpenSearchSQLParser.REVERSE: + case OpenSearchSQLParser.SEC_TO_TIME: + case OpenSearchSQLParser.SIGN: + case OpenSearchSQLParser.SIGNUM: + case OpenSearchSQLParser.SIN: + case OpenSearchSQLParser.SINH: + case OpenSearchSQLParser.SQRT: + case OpenSearchSQLParser.STR_TO_DATE: + case OpenSearchSQLParser.SUBDATE: + case OpenSearchSQLParser.SUBTIME: + case OpenSearchSQLParser.SUBTRACT: + case OpenSearchSQLParser.SYSDATE: + case OpenSearchSQLParser.TAN: + case OpenSearchSQLParser.TIME: + case OpenSearchSQLParser.TIMEDIFF: + case OpenSearchSQLParser.TIME_FORMAT: + case OpenSearchSQLParser.TIME_TO_SEC: + case OpenSearchSQLParser.TIMESTAMP: + case OpenSearchSQLParser.TRUNCATE: + case OpenSearchSQLParser.TO_DAYS: + case OpenSearchSQLParser.TO_SECONDS: + case OpenSearchSQLParser.UNIX_TIMESTAMP: + case OpenSearchSQLParser.UPPER: + case OpenSearchSQLParser.UTC_DATE: + case OpenSearchSQLParser.UTC_TIME: + case OpenSearchSQLParser.UTC_TIMESTAMP: + case OpenSearchSQLParser.DAY_OF_MONTH: + case OpenSearchSQLParser.DAY_OF_YEAR: + case OpenSearchSQLParser.DAY_OF_WEEK: + case OpenSearchSQLParser.HOUR_OF_DAY: + case OpenSearchSQLParser.MINUTE_OF_DAY: + case OpenSearchSQLParser.MINUTE_OF_HOUR: + case OpenSearchSQLParser.MONTH_OF_YEAR: + case OpenSearchSQLParser.NESTED: + case OpenSearchSQLParser.SECOND_OF_MINUTE: + case OpenSearchSQLParser.TYPEOF: + case OpenSearchSQLParser.WEEK_OF_YEAR: + case OpenSearchSQLParser.WEEKOFYEAR: + case OpenSearchSQLParser.WEEKDAY: + case OpenSearchSQLParser.SUBSTR: + case OpenSearchSQLParser.STRCMP: + case OpenSearchSQLParser.ADDDATE: + case OpenSearchSQLParser.YEARWEEK: + case OpenSearchSQLParser.MOD: + this.enterOuterAlt(localContext, 4); + { + this.state = 1106; + this.scalarFunctionName(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public keywordsCanBeId(): KeywordsCanBeIdContext { + let localContext = new KeywordsCanBeIdContext(this.context, this.state); + this.enterRule(localContext, 226, OpenSearchSQLParser.RULE_keywordsCanBeId); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1109; + _la = this.tokenStream.LA(1); + if(!(_la === 26 || _la === 36 || ((((_la - 65)) & ~0x1F) === 0 && ((1 << (_la - 65)) & 32799) !== 0) || ((((_la - 206)) & ~0x1F) === 0 && ((1 << (_la - 206)) & 16391) !== 0) || _la === 306)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + + public override sempred(localContext: antlr.ParserRuleContext | null, ruleIndex: number, predIndex: number): boolean { + switch (ruleIndex) { + case 45: + return this.expression_sempred(localContext as ExpressionContext, predIndex); + case 46: + return this.predicate_sempred(localContext as PredicateContext, predIndex); + case 48: + return this.expressionAtom_sempred(localContext as ExpressionAtomContext, predIndex); + } + return true; + } + private expression_sempred(localContext: ExpressionContext | null, predIndex: number): boolean { + switch (predIndex) { + case 0: + return this.precpred(this.context, 3); + case 1: + return this.precpred(this.context, 2); + } + return true; + } + private predicate_sempred(localContext: PredicateContext | null, predIndex: number): boolean { + switch (predIndex) { + case 2: + return this.precpred(this.context, 6); + case 3: + return this.precpred(this.context, 4); + case 4: + return this.precpred(this.context, 3); + case 5: + return this.precpred(this.context, 2); + case 6: + return this.precpred(this.context, 5); + case 7: + return this.precpred(this.context, 1); + } + return true; + } + private expressionAtom_sempred(localContext: ExpressionAtomContext | null, predIndex: number): boolean { + switch (predIndex) { + case 8: + return this.precpred(this.context, 2); + case 9: + return this.precpred(this.context, 1); + } + return true; + } + + public static readonly _serializedATN: number[] = [ + 4,1,352,1112,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, + 7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7, + 13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2, + 20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7, + 26,2,27,7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32,7,32,2, + 33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,2,38,7,38,2,39,7, + 39,2,40,7,40,2,41,7,41,2,42,7,42,2,43,7,43,2,44,7,44,2,45,7,45,2, + 46,7,46,2,47,7,47,2,48,7,48,2,49,7,49,2,50,7,50,2,51,7,51,2,52,7, + 52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,7,56,2,57,7,57,2,58,7,58,2, + 59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,7,63,2,64,7,64,2,65,7, + 65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70,7,70,2,71,7,71,2, + 72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77,7,77,2,78,7, + 78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,2,83,7,83,2,84,7,84,2, + 85,7,85,2,86,7,86,2,87,7,87,2,88,7,88,2,89,7,89,2,90,7,90,2,91,7, + 91,2,92,7,92,2,93,7,93,2,94,7,94,2,95,7,95,2,96,7,96,2,97,7,97,2, + 98,7,98,2,99,7,99,2,100,7,100,2,101,7,101,2,102,7,102,2,103,7,103, + 2,104,7,104,2,105,7,105,2,106,7,106,2,107,7,107,2,108,7,108,2,109, + 7,109,2,110,7,110,2,111,7,111,2,112,7,112,2,113,7,113,1,0,3,0,230, + 8,0,1,0,3,0,233,8,0,1,0,1,0,1,1,1,1,3,1,239,8,1,1,2,1,2,1,3,1,3, + 1,4,1,4,3,4,247,8,4,1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,3,6,257,8,6, + 1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,9,1,9,3,9,268,8,9,1,10,4,10,271,8, + 10,11,10,12,10,272,1,11,1,11,3,11,277,8,11,1,11,3,11,280,8,11,1, + 12,1,12,3,12,284,8,12,1,12,1,12,1,13,1,13,1,14,1,14,3,14,292,8,14, + 1,14,1,14,5,14,296,8,14,10,14,12,14,299,9,14,1,15,1,15,3,15,303, + 8,15,1,15,3,15,306,8,15,1,16,1,16,1,16,3,16,311,8,16,1,16,3,16,314, + 8,16,1,16,3,16,317,8,16,1,16,3,16,320,8,16,1,17,1,17,3,17,324,8, + 17,1,17,3,17,327,8,17,1,17,1,17,1,17,1,17,3,17,333,8,17,1,17,1,17, + 3,17,337,8,17,1,18,1,18,1,18,1,19,1,19,1,19,1,19,1,20,1,20,1,20, + 5,20,349,8,20,10,20,12,20,352,9,20,1,21,1,21,1,22,1,22,1,22,1,23, + 1,23,1,23,1,23,1,23,5,23,364,8,23,10,23,12,23,367,9,23,1,24,1,24, + 3,24,371,8,24,1,24,1,24,3,24,375,8,24,1,25,1,25,1,25,1,25,3,25,381, + 8,25,1,25,1,25,1,25,1,25,1,25,1,25,3,25,389,8,25,1,26,1,26,1,26, + 1,27,1,27,1,27,3,27,397,8,27,1,27,1,27,3,27,401,8,27,1,28,1,28,1, + 28,3,28,406,8,28,1,28,3,28,409,8,28,1,28,1,28,1,29,1,29,1,29,1,29, + 1,29,5,29,418,8,29,10,29,12,29,421,9,29,1,30,1,30,3,30,425,8,30, + 1,30,1,30,3,30,429,8,30,1,30,1,30,1,30,1,30,1,30,3,30,436,8,30,1, + 31,1,31,1,32,1,32,3,32,442,8,32,1,33,1,33,1,34,1,34,1,35,1,35,1, + 36,1,36,1,37,1,37,1,38,1,38,1,38,3,38,457,8,38,1,39,1,39,1,39,1, + 39,1,39,1,39,1,39,3,39,466,8,39,1,40,1,40,1,40,1,40,1,40,1,40,1, + 40,3,40,475,8,40,1,41,1,41,1,41,1,41,1,41,1,41,1,41,3,41,484,8,41, + 1,42,1,42,1,43,1,43,1,43,1,43,1,44,1,44,1,45,1,45,1,45,1,45,3,45, + 498,8,45,1,45,1,45,1,45,1,45,1,45,1,45,5,45,506,8,45,10,45,12,45, + 509,9,45,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,3,46,520,8, + 46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,3,46,529,8,46,1,46,1,46,1, + 46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,3,46,541,8,46,1,46,1,46,1, + 46,1,46,1,46,5,46,548,8,46,10,46,12,46,551,9,46,1,47,1,47,1,47,5, + 47,556,8,47,10,47,12,47,559,9,47,1,48,1,48,1,48,1,48,1,48,1,48,1, + 48,1,48,3,48,569,8,48,1,48,1,48,1,48,1,48,1,48,1,48,5,48,577,8,48, + 10,48,12,48,580,9,48,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49, + 1,49,1,49,3,49,593,8,49,1,50,3,50,596,8,50,1,50,1,50,1,51,1,51,1, + 51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,3, + 51,615,8,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,3,51,626, + 8,51,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,53,1,53,1,54, + 1,54,1,54,1,54,1,54,1,54,1,54,1,55,1,55,1,56,1,56,1,56,1,56,1,56, + 1,56,1,56,1,57,1,57,1,58,1,58,1,59,1,59,3,59,661,8,59,1,60,1,60, + 1,60,1,60,1,60,5,60,668,8,60,10,60,12,60,671,9,60,1,60,1,60,1,61, + 1,61,1,61,1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,62,1,62,1,62, + 1,63,1,63,1,63,1,63,1,63,1,63,3,63,695,8,63,1,64,1,64,1,64,4,64, + 700,8,64,11,64,12,64,701,1,64,1,64,3,64,706,8,64,1,64,1,64,1,64, + 1,64,4,64,712,8,64,11,64,12,64,713,1,64,1,64,3,64,718,8,64,1,64, + 1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,3,64,729,8,64,1,65,1,65, + 1,65,1,65,1,65,3,65,736,8,65,1,66,1,66,1,66,1,66,1,66,3,66,743,8, + 66,1,66,1,66,1,67,1,67,1,67,1,67,1,67,5,67,752,8,67,10,67,12,67, + 755,9,67,1,67,1,67,1,68,1,68,1,68,1,68,1,68,1,68,1,68,5,68,766,8, + 68,10,68,12,68,769,9,68,1,68,1,68,1,69,1,69,1,69,1,69,1,69,1,69, + 5,69,779,8,69,10,69,12,69,782,9,69,1,69,1,69,1,69,1,69,1,69,5,69, + 789,8,69,10,69,12,69,792,9,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69, + 1,69,1,69,5,69,803,8,69,10,69,12,69,806,9,69,1,69,1,69,3,69,810, + 8,69,1,70,1,70,1,70,1,70,1,70,1,70,1,70,5,70,819,8,70,10,70,12,70, + 822,9,70,1,70,1,70,1,71,1,71,1,71,1,71,1,71,1,71,1,71,5,71,833,8, + 71,10,71,12,71,836,9,71,1,71,1,71,1,72,1,72,1,72,1,72,1,72,1,72, + 1,72,1,72,1,72,1,72,3,72,850,8,72,1,73,1,73,1,73,1,73,1,73,1,74, + 1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74, + 1,74,1,74,3,74,873,8,74,1,75,1,75,1,75,1,75,1,75,1,75,1,75,3,75, + 882,8,75,1,75,1,75,1,76,1,76,1,76,1,76,1,76,1,76,1,77,1,77,1,78, + 1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78, + 1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78, + 3,78,921,8,78,1,79,1,79,1,80,1,80,1,81,1,81,1,81,1,81,1,81,1,81, + 1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81, + 1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81, + 1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81, + 1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81, + 1,81,3,81,986,8,81,1,82,1,82,1,83,1,83,1,84,1,84,1,85,1,85,1,86, + 1,86,1,87,1,87,1,88,1,88,1,89,1,89,1,90,1,90,1,91,1,91,1,92,1,92, + 1,92,5,92,1011,8,92,10,92,12,92,1014,9,92,3,92,1016,8,92,1,93,1, + 93,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,3,94,1028,8,94,1,95,1, + 95,1,95,1,95,1,96,1,96,1,97,1,97,1,98,1,98,1,98,1,98,1,98,1,98,1, + 98,1,98,3,98,1046,8,98,1,99,1,99,1,100,1,100,3,100,1052,8,100,1, + 101,1,101,1,102,1,102,3,102,1058,8,102,1,103,1,103,1,104,1,104,1, + 104,3,104,1065,8,104,1,105,1,105,1,105,1,105,1,106,1,106,1,106,1, + 106,1,106,1,106,1,106,1,106,1,106,1,106,3,106,1081,8,106,1,107,1, + 107,1,108,1,108,1,109,1,109,1,109,1,109,1,110,1,110,1,111,1,111, + 1,111,5,111,1096,8,111,10,111,12,111,1099,9,111,1,112,3,112,1102, + 8,112,1,112,1,112,1,112,1,112,3,112,1108,8,112,1,113,1,113,1,113, + 1,272,3,90,92,96,114,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30, + 32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74, + 76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112, + 114,116,118,120,122,124,126,128,130,132,134,136,138,140,142,144, + 146,148,150,152,154,156,158,160,162,164,166,168,170,172,174,176, + 178,180,182,184,186,188,190,192,194,196,198,200,202,204,206,208, + 210,212,214,216,218,220,222,224,226,0,33,2,0,314,314,349,349,2,0, + 5,5,20,20,2,0,8,8,18,18,2,0,26,26,36,36,1,0,211,213,2,0,335,337, + 344,344,2,0,343,343,350,350,2,0,24,24,59,59,1,0,315,316,2,0,128, + 128,206,206,2,0,193,193,207,207,2,0,197,197,208,208,3,0,125,127, + 153,154,203,205,1,0,83,102,1,0,312,314,1,0,261,262,4,0,16,16,128, + 128,193,193,197,197,1,0,83,91,1,0,92,102,1,0,248,249,1,0,65,76,7, + 0,105,105,109,111,119,121,137,137,174,174,184,185,192,192,6,0,106, + 106,138,138,163,163,165,165,190,190,318,318,12,0,37,37,54,54,77, + 78,108,108,115,116,151,151,155,155,159,160,176,176,179,180,202,202, + 270,271,2,0,147,149,167,167,1,0,254,256,5,0,41,41,232,234,237,239, + 268,269,311,311,2,0,235,236,243,245,2,0,232,233,238,239,1,0,243, + 244,1,0,274,307,1,0,309,310,7,0,26,26,36,36,65,69,80,80,206,208, + 220,220,306,306,1220,0,229,1,0,0,0,2,238,1,0,0,0,4,240,1,0,0,0,6, + 242,1,0,0,0,8,246,1,0,0,0,10,248,1,0,0,0,12,252,1,0,0,0,14,258,1, + 0,0,0,16,262,1,0,0,0,18,267,1,0,0,0,20,270,1,0,0,0,22,274,1,0,0, + 0,24,281,1,0,0,0,26,287,1,0,0,0,28,291,1,0,0,0,30,300,1,0,0,0,32, + 307,1,0,0,0,34,336,1,0,0,0,36,338,1,0,0,0,38,341,1,0,0,0,40,345, + 1,0,0,0,42,353,1,0,0,0,44,355,1,0,0,0,46,358,1,0,0,0,48,368,1,0, + 0,0,50,388,1,0,0,0,52,390,1,0,0,0,54,400,1,0,0,0,56,402,1,0,0,0, + 58,412,1,0,0,0,60,435,1,0,0,0,62,437,1,0,0,0,64,441,1,0,0,0,66,443, + 1,0,0,0,68,445,1,0,0,0,70,447,1,0,0,0,72,449,1,0,0,0,74,451,1,0, + 0,0,76,456,1,0,0,0,78,465,1,0,0,0,80,474,1,0,0,0,82,483,1,0,0,0, + 84,485,1,0,0,0,86,487,1,0,0,0,88,491,1,0,0,0,90,497,1,0,0,0,92,510, + 1,0,0,0,94,552,1,0,0,0,96,568,1,0,0,0,98,592,1,0,0,0,100,595,1,0, + 0,0,102,625,1,0,0,0,104,627,1,0,0,0,106,636,1,0,0,0,108,638,1,0, + 0,0,110,645,1,0,0,0,112,647,1,0,0,0,114,654,1,0,0,0,116,656,1,0, + 0,0,118,660,1,0,0,0,120,662,1,0,0,0,122,674,1,0,0,0,124,681,1,0, + 0,0,126,694,1,0,0,0,128,728,1,0,0,0,130,735,1,0,0,0,132,737,1,0, + 0,0,134,746,1,0,0,0,136,758,1,0,0,0,138,809,1,0,0,0,140,811,1,0, + 0,0,142,825,1,0,0,0,144,849,1,0,0,0,146,851,1,0,0,0,148,872,1,0, + 0,0,150,874,1,0,0,0,152,885,1,0,0,0,154,891,1,0,0,0,156,920,1,0, + 0,0,158,922,1,0,0,0,160,924,1,0,0,0,162,985,1,0,0,0,164,987,1,0, + 0,0,166,989,1,0,0,0,168,991,1,0,0,0,170,993,1,0,0,0,172,995,1,0, + 0,0,174,997,1,0,0,0,176,999,1,0,0,0,178,1001,1,0,0,0,180,1003,1, + 0,0,0,182,1005,1,0,0,0,184,1015,1,0,0,0,186,1017,1,0,0,0,188,1027, + 1,0,0,0,190,1029,1,0,0,0,192,1033,1,0,0,0,194,1035,1,0,0,0,196,1045, + 1,0,0,0,198,1047,1,0,0,0,200,1051,1,0,0,0,202,1053,1,0,0,0,204,1057, + 1,0,0,0,206,1059,1,0,0,0,208,1064,1,0,0,0,210,1066,1,0,0,0,212,1080, + 1,0,0,0,214,1082,1,0,0,0,216,1084,1,0,0,0,218,1086,1,0,0,0,220,1090, + 1,0,0,0,222,1092,1,0,0,0,224,1107,1,0,0,0,226,1109,1,0,0,0,228,230, + 3,2,1,0,229,228,1,0,0,0,229,230,1,0,0,0,230,232,1,0,0,0,231,233, + 5,333,0,0,232,231,1,0,0,0,232,233,1,0,0,0,233,234,1,0,0,0,234,235, + 5,0,0,1,235,1,1,0,0,0,236,239,3,4,2,0,237,239,3,8,4,0,238,236,1, + 0,0,0,238,237,1,0,0,0,239,3,1,0,0,0,240,241,3,6,3,0,241,5,1,0,0, + 0,242,243,3,22,11,0,243,7,1,0,0,0,244,247,3,10,5,0,245,247,3,12, + 6,0,246,244,1,0,0,0,246,245,1,0,0,0,247,9,1,0,0,0,248,249,5,56,0, + 0,249,250,5,103,0,0,250,251,3,16,8,0,251,11,1,0,0,0,252,253,5,19, + 0,0,253,254,5,103,0,0,254,256,3,16,8,0,255,257,3,14,7,0,256,255, + 1,0,0,0,256,257,1,0,0,0,257,13,1,0,0,0,258,259,5,15,0,0,259,260, + 5,38,0,0,260,261,3,18,9,0,261,15,1,0,0,0,262,263,5,38,0,0,263,264, + 3,18,9,0,264,17,1,0,0,0,265,268,3,20,10,0,266,268,3,66,33,0,267, + 265,1,0,0,0,267,266,1,0,0,0,268,19,1,0,0,0,269,271,7,0,0,0,270,269, + 1,0,0,0,271,272,1,0,0,0,272,273,1,0,0,0,272,270,1,0,0,0,273,21,1, + 0,0,0,274,276,3,24,12,0,275,277,3,32,16,0,276,275,1,0,0,0,276,277, + 1,0,0,0,277,279,1,0,0,0,278,280,3,50,25,0,279,278,1,0,0,0,279,280, + 1,0,0,0,280,23,1,0,0,0,281,283,5,55,0,0,282,284,3,26,13,0,283,282, + 1,0,0,0,283,284,1,0,0,0,284,285,1,0,0,0,285,286,3,28,14,0,286,25, + 1,0,0,0,287,288,7,1,0,0,288,27,1,0,0,0,289,292,5,312,0,0,290,292, + 3,30,15,0,291,289,1,0,0,0,291,290,1,0,0,0,292,297,1,0,0,0,293,294, + 5,332,0,0,294,296,3,30,15,0,295,293,1,0,0,0,296,299,1,0,0,0,297, + 295,1,0,0,0,297,298,1,0,0,0,298,29,1,0,0,0,299,297,1,0,0,0,300,305, + 3,90,45,0,301,303,5,7,0,0,302,301,1,0,0,0,302,303,1,0,0,0,303,304, + 1,0,0,0,304,306,3,220,110,0,305,302,1,0,0,0,305,306,1,0,0,0,306, + 31,1,0,0,0,307,308,5,27,0,0,308,310,3,34,17,0,309,311,3,36,18,0, + 310,309,1,0,0,0,310,311,1,0,0,0,311,313,1,0,0,0,312,314,3,38,19, + 0,313,312,1,0,0,0,313,314,1,0,0,0,314,316,1,0,0,0,315,317,3,44,22, + 0,316,315,1,0,0,0,316,317,1,0,0,0,317,319,1,0,0,0,318,320,3,46,23, + 0,319,318,1,0,0,0,319,320,1,0,0,0,320,33,1,0,0,0,321,326,3,214,107, + 0,322,324,5,7,0,0,323,322,1,0,0,0,323,324,1,0,0,0,324,325,1,0,0, + 0,325,327,3,220,110,0,326,323,1,0,0,0,326,327,1,0,0,0,327,337,1, + 0,0,0,328,329,5,328,0,0,329,330,3,22,11,0,330,332,5,329,0,0,331, + 333,5,7,0,0,332,331,1,0,0,0,332,333,1,0,0,0,333,334,1,0,0,0,334, + 335,3,220,110,0,335,337,1,0,0,0,336,321,1,0,0,0,336,328,1,0,0,0, + 337,35,1,0,0,0,338,339,5,63,0,0,339,340,3,90,45,0,340,37,1,0,0,0, + 341,342,5,28,0,0,342,343,5,11,0,0,343,344,3,40,20,0,344,39,1,0,0, + 0,345,350,3,42,21,0,346,347,5,332,0,0,347,349,3,42,21,0,348,346, + 1,0,0,0,349,352,1,0,0,0,350,348,1,0,0,0,350,351,1,0,0,0,351,41,1, + 0,0,0,352,350,1,0,0,0,353,354,3,90,45,0,354,43,1,0,0,0,355,356,5, + 29,0,0,356,357,3,90,45,0,357,45,1,0,0,0,358,359,5,49,0,0,359,360, + 5,11,0,0,360,365,3,48,24,0,361,362,5,332,0,0,362,364,3,48,24,0,363, + 361,1,0,0,0,364,367,1,0,0,0,365,363,1,0,0,0,365,366,1,0,0,0,366, + 47,1,0,0,0,367,365,1,0,0,0,368,370,3,90,45,0,369,371,7,2,0,0,370, + 369,1,0,0,0,370,371,1,0,0,0,371,374,1,0,0,0,372,373,5,46,0,0,373, + 375,7,3,0,0,374,372,1,0,0,0,374,375,1,0,0,0,375,49,1,0,0,0,376,380, + 5,39,0,0,377,378,3,62,31,0,378,379,5,332,0,0,379,381,1,0,0,0,380, + 377,1,0,0,0,380,381,1,0,0,0,381,382,1,0,0,0,382,389,3,62,31,0,383, + 384,5,39,0,0,384,385,3,62,31,0,385,386,5,81,0,0,386,387,3,62,31, + 0,387,389,1,0,0,0,388,376,1,0,0,0,388,383,1,0,0,0,389,51,1,0,0,0, + 390,391,3,54,27,0,391,392,3,56,28,0,392,53,1,0,0,0,393,394,7,4,0, + 0,394,396,5,328,0,0,395,397,3,184,92,0,396,395,1,0,0,0,396,397,1, + 0,0,0,397,398,1,0,0,0,398,401,5,329,0,0,399,401,3,148,74,0,400,393, + 1,0,0,0,400,399,1,0,0,0,401,55,1,0,0,0,402,403,5,51,0,0,403,405, + 5,328,0,0,404,406,3,58,29,0,405,404,1,0,0,0,405,406,1,0,0,0,406, + 408,1,0,0,0,407,409,3,46,23,0,408,407,1,0,0,0,408,409,1,0,0,0,409, + 410,1,0,0,0,410,411,5,329,0,0,411,57,1,0,0,0,412,413,5,52,0,0,413, + 414,5,11,0,0,414,419,3,90,45,0,415,416,5,332,0,0,416,418,3,90,45, + 0,417,415,1,0,0,0,418,421,1,0,0,0,419,417,1,0,0,0,419,420,1,0,0, + 0,420,59,1,0,0,0,421,419,1,0,0,0,422,436,3,66,33,0,423,425,3,72, + 36,0,424,423,1,0,0,0,424,425,1,0,0,0,425,426,1,0,0,0,426,436,3,62, + 31,0,427,429,3,72,36,0,428,427,1,0,0,0,428,429,1,0,0,0,429,430,1, + 0,0,0,430,436,3,70,35,0,431,436,3,68,34,0,432,436,3,76,38,0,433, + 436,3,86,43,0,434,436,3,74,37,0,435,422,1,0,0,0,435,424,1,0,0,0, + 435,428,1,0,0,0,435,431,1,0,0,0,435,432,1,0,0,0,435,433,1,0,0,0, + 435,434,1,0,0,0,436,61,1,0,0,0,437,438,7,5,0,0,438,63,1,0,0,0,439, + 442,3,62,31,0,440,442,3,70,35,0,441,439,1,0,0,0,441,440,1,0,0,0, + 442,65,1,0,0,0,443,444,7,6,0,0,444,67,1,0,0,0,445,446,7,7,0,0,446, + 69,1,0,0,0,447,448,5,346,0,0,448,71,1,0,0,0,449,450,7,8,0,0,450, + 73,1,0,0,0,451,452,5,45,0,0,452,75,1,0,0,0,453,457,3,78,39,0,454, + 457,3,80,40,0,455,457,3,82,41,0,456,453,1,0,0,0,456,454,1,0,0,0, + 456,455,1,0,0,0,457,77,1,0,0,0,458,459,5,128,0,0,459,466,3,66,33, + 0,460,461,5,209,0,0,461,462,7,9,0,0,462,463,3,66,33,0,463,464,5, + 210,0,0,464,466,1,0,0,0,465,458,1,0,0,0,465,460,1,0,0,0,466,79,1, + 0,0,0,467,468,5,193,0,0,468,475,3,66,33,0,469,470,5,209,0,0,470, + 471,7,10,0,0,471,472,3,66,33,0,472,473,5,210,0,0,473,475,1,0,0,0, + 474,467,1,0,0,0,474,469,1,0,0,0,475,81,1,0,0,0,476,477,5,197,0,0, + 477,484,3,66,33,0,478,479,5,209,0,0,479,480,7,11,0,0,480,481,3,66, + 33,0,481,482,5,210,0,0,482,484,1,0,0,0,483,476,1,0,0,0,483,478,1, + 0,0,0,484,83,1,0,0,0,485,486,7,12,0,0,486,85,1,0,0,0,487,488,5,82, + 0,0,488,489,3,90,45,0,489,490,3,88,44,0,490,87,1,0,0,0,491,492,7, + 13,0,0,492,89,1,0,0,0,493,494,6,45,-1,0,494,495,5,44,0,0,495,498, + 3,90,45,4,496,498,3,92,46,0,497,493,1,0,0,0,497,496,1,0,0,0,498, + 507,1,0,0,0,499,500,10,3,0,0,500,501,5,6,0,0,501,506,3,90,45,4,502, + 503,10,2,0,0,503,504,5,48,0,0,504,506,3,90,45,3,505,499,1,0,0,0, + 505,502,1,0,0,0,506,509,1,0,0,0,507,505,1,0,0,0,507,508,1,0,0,0, + 508,91,1,0,0,0,509,507,1,0,0,0,510,511,6,46,-1,0,511,512,3,96,48, + 0,512,549,1,0,0,0,513,514,10,6,0,0,514,515,3,98,49,0,515,516,3,92, + 46,7,516,548,1,0,0,0,517,519,10,4,0,0,518,520,5,44,0,0,519,518,1, + 0,0,0,519,520,1,0,0,0,520,521,1,0,0,0,521,522,5,10,0,0,522,523,3, + 92,46,0,523,524,5,6,0,0,524,525,3,92,46,5,525,548,1,0,0,0,526,528, + 10,3,0,0,527,529,5,44,0,0,528,527,1,0,0,0,528,529,1,0,0,0,529,530, + 1,0,0,0,530,531,5,38,0,0,531,548,3,92,46,4,532,533,10,2,0,0,533, + 534,5,53,0,0,534,548,3,92,46,3,535,536,10,5,0,0,536,537,5,34,0,0, + 537,548,3,100,50,0,538,540,10,1,0,0,539,541,5,44,0,0,540,539,1,0, + 0,0,540,541,1,0,0,0,541,542,1,0,0,0,542,543,5,30,0,0,543,544,5,328, + 0,0,544,545,3,94,47,0,545,546,5,329,0,0,546,548,1,0,0,0,547,513, + 1,0,0,0,547,517,1,0,0,0,547,526,1,0,0,0,547,532,1,0,0,0,547,535, + 1,0,0,0,547,538,1,0,0,0,548,551,1,0,0,0,549,547,1,0,0,0,549,550, + 1,0,0,0,550,93,1,0,0,0,551,549,1,0,0,0,552,557,3,90,45,0,553,554, + 5,332,0,0,554,556,3,90,45,0,555,553,1,0,0,0,556,559,1,0,0,0,557, + 555,1,0,0,0,557,558,1,0,0,0,558,95,1,0,0,0,559,557,1,0,0,0,560,561, + 6,48,-1,0,561,569,3,60,30,0,562,569,3,216,108,0,563,569,3,102,51, + 0,564,565,5,328,0,0,565,566,3,90,45,0,566,567,5,329,0,0,567,569, + 1,0,0,0,568,560,1,0,0,0,568,562,1,0,0,0,568,563,1,0,0,0,568,564, + 1,0,0,0,569,578,1,0,0,0,570,571,10,2,0,0,571,572,7,14,0,0,572,577, + 3,96,48,3,573,574,10,1,0,0,574,575,7,8,0,0,575,577,3,96,48,2,576, + 570,1,0,0,0,576,573,1,0,0,0,577,580,1,0,0,0,578,576,1,0,0,0,578, + 579,1,0,0,0,579,97,1,0,0,0,580,578,1,0,0,0,581,593,5,319,0,0,582, + 593,5,320,0,0,583,593,5,321,0,0,584,585,5,321,0,0,585,593,5,319, + 0,0,586,587,5,320,0,0,587,593,5,319,0,0,588,589,5,321,0,0,589,593, + 5,320,0,0,590,591,5,322,0,0,591,593,5,319,0,0,592,581,1,0,0,0,592, + 582,1,0,0,0,592,583,1,0,0,0,592,584,1,0,0,0,592,586,1,0,0,0,592, + 588,1,0,0,0,592,590,1,0,0,0,593,99,1,0,0,0,594,596,5,44,0,0,595, + 594,1,0,0,0,595,596,1,0,0,0,596,597,1,0,0,0,597,598,5,45,0,0,598, + 101,1,0,0,0,599,600,3,172,86,0,600,601,5,328,0,0,601,602,3,218,109, + 0,602,603,5,329,0,0,603,626,1,0,0,0,604,605,3,126,63,0,605,606,5, + 328,0,0,606,607,3,184,92,0,607,608,5,329,0,0,608,626,1,0,0,0,609, + 626,3,128,64,0,610,626,3,52,26,0,611,626,3,148,74,0,612,614,3,148, + 74,0,613,615,3,46,23,0,614,613,1,0,0,0,614,615,1,0,0,0,615,616,1, + 0,0,0,616,617,3,152,76,0,617,626,1,0,0,0,618,626,3,132,66,0,619, + 626,3,130,65,0,620,626,3,120,60,0,621,626,3,122,61,0,622,626,3,112, + 56,0,623,626,3,108,54,0,624,626,3,104,52,0,625,599,1,0,0,0,625,604, + 1,0,0,0,625,609,1,0,0,0,625,610,1,0,0,0,625,611,1,0,0,0,625,612, + 1,0,0,0,625,618,1,0,0,0,625,619,1,0,0,0,625,620,1,0,0,0,625,621, + 1,0,0,0,625,622,1,0,0,0,625,623,1,0,0,0,625,624,1,0,0,0,626,103, + 1,0,0,0,627,628,3,106,53,0,628,629,5,328,0,0,629,630,3,114,57,0, + 630,631,5,332,0,0,631,632,3,186,93,0,632,633,5,332,0,0,633,634,3, + 186,93,0,634,635,5,329,0,0,635,105,1,0,0,0,636,637,7,15,0,0,637, + 107,1,0,0,0,638,639,5,146,0,0,639,640,5,328,0,0,640,641,3,110,55, + 0,641,642,5,332,0,0,642,643,3,186,93,0,643,644,5,329,0,0,644,109, + 1,0,0,0,645,646,7,16,0,0,646,111,1,0,0,0,647,648,5,142,0,0,648,649, + 5,328,0,0,649,650,3,118,59,0,650,651,5,27,0,0,651,652,3,186,93,0, + 652,653,5,329,0,0,653,113,1,0,0,0,654,655,7,17,0,0,655,115,1,0,0, + 0,656,657,7,18,0,0,657,117,1,0,0,0,658,661,3,114,57,0,659,661,3, + 116,58,0,660,658,1,0,0,0,660,659,1,0,0,0,661,119,1,0,0,0,662,663, + 5,308,0,0,663,664,5,328,0,0,664,669,3,200,100,0,665,666,5,332,0, + 0,666,668,3,190,95,0,667,665,1,0,0,0,668,671,1,0,0,0,669,667,1,0, + 0,0,669,670,1,0,0,0,670,672,1,0,0,0,671,669,1,0,0,0,672,673,5,329, + 0,0,673,121,1,0,0,0,674,675,5,171,0,0,675,676,5,328,0,0,676,677, + 3,186,93,0,677,678,5,30,0,0,678,679,3,186,93,0,679,680,5,329,0,0, + 680,123,1,0,0,0,681,682,3,200,100,0,682,683,5,319,0,0,683,684,5, + 239,0,0,684,685,5,328,0,0,685,686,3,202,101,0,686,687,5,329,0,0, + 687,125,1,0,0,0,688,695,3,156,78,0,689,695,3,162,81,0,690,695,3, + 164,82,0,691,695,3,166,83,0,692,695,3,170,85,0,693,695,3,172,86, + 0,694,688,1,0,0,0,694,689,1,0,0,0,694,690,1,0,0,0,694,691,1,0,0, + 0,694,692,1,0,0,0,694,693,1,0,0,0,695,127,1,0,0,0,696,697,5,12,0, + 0,697,699,3,90,45,0,698,700,3,146,73,0,699,698,1,0,0,0,700,701,1, + 0,0,0,701,699,1,0,0,0,701,702,1,0,0,0,702,705,1,0,0,0,703,704,5, + 22,0,0,704,706,3,186,93,0,705,703,1,0,0,0,705,706,1,0,0,0,706,707, + 1,0,0,0,707,708,5,79,0,0,708,729,1,0,0,0,709,711,5,12,0,0,710,712, + 3,146,73,0,711,710,1,0,0,0,712,713,1,0,0,0,713,711,1,0,0,0,713,714, + 1,0,0,0,714,717,1,0,0,0,715,716,5,22,0,0,716,718,3,186,93,0,717, + 715,1,0,0,0,717,718,1,0,0,0,718,719,1,0,0,0,719,720,5,79,0,0,720, + 729,1,0,0,0,721,722,5,13,0,0,722,723,5,328,0,0,723,724,3,90,45,0, + 724,725,5,7,0,0,725,726,3,144,72,0,726,727,5,329,0,0,727,729,1,0, + 0,0,728,696,1,0,0,0,728,709,1,0,0,0,728,721,1,0,0,0,729,129,1,0, + 0,0,730,736,3,134,67,0,731,736,3,136,68,0,732,736,3,138,69,0,733, + 736,3,140,70,0,734,736,3,142,71,0,735,730,1,0,0,0,735,731,1,0,0, + 0,735,732,1,0,0,0,735,733,1,0,0,0,735,734,1,0,0,0,736,131,1,0,0, + 0,737,738,3,174,87,0,738,739,5,328,0,0,739,742,3,130,65,0,740,741, + 5,332,0,0,741,743,3,198,99,0,742,740,1,0,0,0,742,743,1,0,0,0,743, + 744,1,0,0,0,744,745,5,329,0,0,745,133,1,0,0,0,746,747,3,168,84,0, + 747,748,5,328,0,0,748,753,3,202,101,0,749,750,5,332,0,0,750,752, + 3,188,94,0,751,749,1,0,0,0,752,755,1,0,0,0,753,751,1,0,0,0,753,754, + 1,0,0,0,754,756,1,0,0,0,755,753,1,0,0,0,756,757,5,329,0,0,757,135, + 1,0,0,0,758,759,3,176,88,0,759,760,5,328,0,0,760,761,3,200,100,0, + 761,762,5,332,0,0,762,767,3,202,101,0,763,764,5,332,0,0,764,766, + 3,188,94,0,765,763,1,0,0,0,766,769,1,0,0,0,767,765,1,0,0,0,767,768, + 1,0,0,0,768,770,1,0,0,0,769,767,1,0,0,0,770,771,5,329,0,0,771,137, + 1,0,0,0,772,773,3,178,89,0,773,774,5,328,0,0,774,775,5,330,0,0,775, + 780,3,196,98,0,776,777,5,332,0,0,777,779,3,196,98,0,778,776,1,0, + 0,0,779,782,1,0,0,0,780,778,1,0,0,0,780,781,1,0,0,0,781,783,1,0, + 0,0,782,780,1,0,0,0,783,784,5,331,0,0,784,785,5,332,0,0,785,790, + 3,202,101,0,786,787,5,332,0,0,787,789,3,188,94,0,788,786,1,0,0,0, + 789,792,1,0,0,0,790,788,1,0,0,0,790,791,1,0,0,0,791,793,1,0,0,0, + 792,790,1,0,0,0,793,794,5,329,0,0,794,810,1,0,0,0,795,796,3,178, + 89,0,796,797,5,328,0,0,797,798,3,210,105,0,798,799,5,332,0,0,799, + 804,3,212,106,0,800,801,5,332,0,0,801,803,3,188,94,0,802,800,1,0, + 0,0,803,806,1,0,0,0,804,802,1,0,0,0,804,805,1,0,0,0,805,807,1,0, + 0,0,806,804,1,0,0,0,807,808,5,329,0,0,808,810,1,0,0,0,809,772,1, + 0,0,0,809,795,1,0,0,0,810,139,1,0,0,0,811,812,3,200,100,0,812,813, + 5,319,0,0,813,814,3,180,90,0,814,815,5,328,0,0,815,820,3,202,101, + 0,816,817,5,332,0,0,817,819,3,188,94,0,818,816,1,0,0,0,819,822,1, + 0,0,0,820,818,1,0,0,0,820,821,1,0,0,0,821,823,1,0,0,0,822,820,1, + 0,0,0,823,824,5,329,0,0,824,141,1,0,0,0,825,826,3,200,100,0,826, + 827,5,319,0,0,827,828,3,182,91,0,828,829,5,328,0,0,829,834,3,202, + 101,0,830,831,5,332,0,0,831,833,3,188,94,0,832,830,1,0,0,0,833,836, + 1,0,0,0,834,832,1,0,0,0,834,835,1,0,0,0,835,837,1,0,0,0,836,834, + 1,0,0,0,837,838,5,329,0,0,838,143,1,0,0,0,839,850,5,128,0,0,840, + 850,5,193,0,0,841,850,5,197,0,0,842,850,5,32,0,0,843,850,5,33,0, + 0,844,850,5,21,0,0,845,850,5,40,0,0,846,850,5,25,0,0,847,850,5,57, + 0,0,848,850,5,9,0,0,849,839,1,0,0,0,849,840,1,0,0,0,849,841,1,0, + 0,0,849,842,1,0,0,0,849,843,1,0,0,0,849,844,1,0,0,0,849,845,1,0, + 0,0,849,846,1,0,0,0,849,847,1,0,0,0,849,848,1,0,0,0,850,145,1,0, + 0,0,851,852,5,62,0,0,852,853,3,186,93,0,853,854,5,58,0,0,854,855, + 3,186,93,0,855,147,1,0,0,0,856,857,3,154,77,0,857,858,5,328,0,0, + 858,859,3,186,93,0,859,860,5,329,0,0,860,873,1,0,0,0,861,862,5,66, + 0,0,862,863,5,328,0,0,863,864,5,312,0,0,864,873,5,329,0,0,865,866, + 5,66,0,0,866,867,5,328,0,0,867,868,5,20,0,0,868,869,3,186,93,0,869, + 870,5,329,0,0,870,873,1,0,0,0,871,873,3,150,75,0,872,856,1,0,0,0, + 872,861,1,0,0,0,872,865,1,0,0,0,872,871,1,0,0,0,873,149,1,0,0,0, + 874,875,7,19,0,0,875,876,5,328,0,0,876,877,3,186,93,0,877,878,5, + 332,0,0,878,881,3,64,32,0,879,880,5,332,0,0,880,882,3,64,32,0,881, + 879,1,0,0,0,881,882,1,0,0,0,882,883,1,0,0,0,883,884,5,329,0,0,884, + 151,1,0,0,0,885,886,5,221,0,0,886,887,5,328,0,0,887,888,5,63,0,0, + 888,889,3,90,45,0,889,890,5,329,0,0,890,153,1,0,0,0,891,892,7,20, + 0,0,892,155,1,0,0,0,893,921,5,104,0,0,894,921,5,112,0,0,895,921, + 5,113,0,0,896,921,5,114,0,0,897,921,5,117,0,0,898,921,5,122,0,0, + 899,921,5,139,0,0,900,921,5,140,0,0,901,921,5,141,0,0,902,921,5, + 143,0,0,903,921,5,152,0,0,904,921,5,156,0,0,905,921,5,157,0,0,906, + 921,5,158,0,0,907,921,5,318,0,0,908,921,5,170,0,0,909,921,5,172, + 0,0,910,921,5,173,0,0,911,921,5,175,0,0,912,921,5,177,0,0,913,921, + 5,178,0,0,914,921,5,182,0,0,915,921,5,183,0,0,916,921,5,186,0,0, + 917,921,5,198,0,0,918,921,3,158,79,0,919,921,3,160,80,0,920,893, + 1,0,0,0,920,894,1,0,0,0,920,895,1,0,0,0,920,896,1,0,0,0,920,897, + 1,0,0,0,920,898,1,0,0,0,920,899,1,0,0,0,920,900,1,0,0,0,920,901, + 1,0,0,0,920,902,1,0,0,0,920,903,1,0,0,0,920,904,1,0,0,0,920,905, + 1,0,0,0,920,906,1,0,0,0,920,907,1,0,0,0,920,908,1,0,0,0,920,909, + 1,0,0,0,920,910,1,0,0,0,920,911,1,0,0,0,920,912,1,0,0,0,920,913, + 1,0,0,0,920,914,1,0,0,0,920,915,1,0,0,0,920,916,1,0,0,0,920,917, + 1,0,0,0,920,918,1,0,0,0,920,919,1,0,0,0,921,157,1,0,0,0,922,923, + 7,21,0,0,923,159,1,0,0,0,924,925,7,22,0,0,925,161,1,0,0,0,926,986, + 3,84,42,0,927,986,5,272,0,0,928,986,5,107,0,0,929,986,5,118,0,0, + 930,986,5,123,0,0,931,986,5,124,0,0,932,986,5,128,0,0,933,986,5, + 129,0,0,934,986,5,130,0,0,935,986,5,131,0,0,936,986,5,132,0,0,937, + 986,5,16,0,0,938,986,5,87,0,0,939,986,5,133,0,0,940,986,5,134,0, + 0,941,986,5,215,0,0,942,986,5,135,0,0,943,986,5,136,0,0,944,986, + 5,216,0,0,945,986,5,217,0,0,946,986,5,144,0,0,947,986,5,145,0,0, + 948,986,5,86,0,0,949,986,5,229,0,0,950,986,5,150,0,0,951,986,5,161, + 0,0,952,986,5,162,0,0,953,986,5,83,0,0,954,986,5,85,0,0,955,986, + 5,240,0,0,956,986,5,241,0,0,957,986,5,89,0,0,958,986,5,164,0,0,959, + 986,5,242,0,0,960,986,5,166,0,0,961,986,5,168,0,0,962,986,5,169, + 0,0,963,986,5,90,0,0,964,986,5,181,0,0,965,986,5,84,0,0,966,986, + 5,257,0,0,967,986,5,188,0,0,968,986,5,189,0,0,969,986,5,191,0,0, + 970,986,5,187,0,0,971,986,5,193,0,0,972,986,5,195,0,0,973,986,5, + 196,0,0,974,986,5,194,0,0,975,986,5,197,0,0,976,986,5,199,0,0,977, + 986,5,200,0,0,978,986,5,201,0,0,979,986,5,88,0,0,980,986,5,267,0, + 0,981,986,5,265,0,0,982,986,5,266,0,0,983,986,5,91,0,0,984,986,5, + 273,0,0,985,926,1,0,0,0,985,927,1,0,0,0,985,928,1,0,0,0,985,929, + 1,0,0,0,985,930,1,0,0,0,985,931,1,0,0,0,985,932,1,0,0,0,985,933, + 1,0,0,0,985,934,1,0,0,0,985,935,1,0,0,0,985,936,1,0,0,0,985,937, + 1,0,0,0,985,938,1,0,0,0,985,939,1,0,0,0,985,940,1,0,0,0,985,941, + 1,0,0,0,985,942,1,0,0,0,985,943,1,0,0,0,985,944,1,0,0,0,985,945, + 1,0,0,0,985,946,1,0,0,0,985,947,1,0,0,0,985,948,1,0,0,0,985,949, + 1,0,0,0,985,950,1,0,0,0,985,951,1,0,0,0,985,952,1,0,0,0,985,953, + 1,0,0,0,985,954,1,0,0,0,985,955,1,0,0,0,985,956,1,0,0,0,985,957, + 1,0,0,0,985,958,1,0,0,0,985,959,1,0,0,0,985,960,1,0,0,0,985,961, + 1,0,0,0,985,962,1,0,0,0,985,963,1,0,0,0,985,964,1,0,0,0,985,965, + 1,0,0,0,985,966,1,0,0,0,985,967,1,0,0,0,985,968,1,0,0,0,985,969, + 1,0,0,0,985,970,1,0,0,0,985,971,1,0,0,0,985,972,1,0,0,0,985,973, + 1,0,0,0,985,974,1,0,0,0,985,975,1,0,0,0,985,976,1,0,0,0,985,977, + 1,0,0,0,985,978,1,0,0,0,985,979,1,0,0,0,985,980,1,0,0,0,985,981, + 1,0,0,0,985,982,1,0,0,0,985,983,1,0,0,0,985,984,1,0,0,0,986,163, + 1,0,0,0,987,988,7,23,0,0,988,165,1,0,0,0,989,990,7,24,0,0,990,167, + 1,0,0,0,991,992,5,252,0,0,992,169,1,0,0,0,993,994,5,264,0,0,994, + 171,1,0,0,0,995,996,5,246,0,0,996,173,1,0,0,0,997,998,7,25,0,0,998, + 175,1,0,0,0,999,1000,7,26,0,0,1000,177,1,0,0,0,1001,1002,7,27,0, + 0,1002,179,1,0,0,0,1003,1004,7,28,0,0,1004,181,1,0,0,0,1005,1006, + 7,29,0,0,1006,183,1,0,0,0,1007,1012,3,186,93,0,1008,1009,5,332,0, + 0,1009,1011,3,186,93,0,1010,1008,1,0,0,0,1011,1014,1,0,0,0,1012, + 1010,1,0,0,0,1012,1013,1,0,0,0,1013,1016,1,0,0,0,1014,1012,1,0,0, + 0,1015,1007,1,0,0,0,1015,1016,1,0,0,0,1016,185,1,0,0,0,1017,1018, + 3,90,45,0,1018,187,1,0,0,0,1019,1020,3,192,96,0,1020,1021,5,319, + 0,0,1021,1022,3,204,102,0,1022,1028,1,0,0,0,1023,1024,3,66,33,0, + 1024,1025,5,319,0,0,1025,1026,3,204,102,0,1026,1028,1,0,0,0,1027, + 1019,1,0,0,0,1027,1023,1,0,0,0,1028,189,1,0,0,0,1029,1030,3,194, + 97,0,1030,1031,5,319,0,0,1031,1032,3,206,103,0,1032,191,1,0,0,0, + 1033,1034,7,30,0,0,1034,193,1,0,0,0,1035,1036,7,31,0,0,1036,195, + 1,0,0,0,1037,1046,3,200,100,0,1038,1039,3,200,100,0,1039,1040,3, + 198,99,0,1040,1046,1,0,0,0,1041,1042,3,200,100,0,1042,1043,5,326, + 0,0,1043,1044,3,198,99,0,1044,1046,1,0,0,0,1045,1037,1,0,0,0,1045, + 1038,1,0,0,0,1045,1041,1,0,0,0,1046,197,1,0,0,0,1047,1048,3,64,32, + 0,1048,199,1,0,0,0,1049,1052,3,222,111,0,1050,1052,3,66,33,0,1051, + 1049,1,0,0,0,1051,1050,1,0,0,0,1052,201,1,0,0,0,1053,1054,3,204, + 102,0,1054,203,1,0,0,0,1055,1058,3,222,111,0,1056,1058,3,60,30,0, + 1057,1055,1,0,0,0,1057,1056,1,0,0,0,1058,205,1,0,0,0,1059,1060,3, + 66,33,0,1060,207,1,0,0,0,1061,1065,5,285,0,0,1062,1065,5,252,0,0, + 1063,1065,3,66,33,0,1064,1061,1,0,0,0,1064,1062,1,0,0,0,1064,1063, + 1,0,0,0,1065,209,1,0,0,0,1066,1067,3,208,104,0,1067,1068,5,319,0, + 0,1068,1069,3,204,102,0,1069,211,1,0,0,0,1070,1071,3,208,104,0,1071, + 1072,5,319,0,0,1072,1073,3,204,102,0,1073,1081,1,0,0,0,1074,1075, + 3,208,104,0,1075,1076,5,319,0,0,1076,1077,5,330,0,0,1077,1078,3, + 204,102,0,1078,1079,5,331,0,0,1079,1081,1,0,0,0,1080,1070,1,0,0, + 0,1080,1074,1,0,0,0,1081,213,1,0,0,0,1082,1083,3,222,111,0,1083, + 215,1,0,0,0,1084,1085,3,222,111,0,1085,217,1,0,0,0,1086,1087,3,222, + 111,0,1087,1088,5,327,0,0,1088,1089,5,312,0,0,1089,219,1,0,0,0,1090, + 1091,3,224,112,0,1091,221,1,0,0,0,1092,1097,3,224,112,0,1093,1094, + 5,327,0,0,1094,1096,3,224,112,0,1095,1093,1,0,0,0,1096,1099,1,0, + 0,0,1097,1095,1,0,0,0,1097,1098,1,0,0,0,1098,223,1,0,0,0,1099,1097, + 1,0,0,0,1100,1102,5,327,0,0,1101,1100,1,0,0,0,1101,1102,1,0,0,0, + 1102,1103,1,0,0,0,1103,1108,5,349,0,0,1104,1108,5,351,0,0,1105,1108, + 3,226,113,0,1106,1108,3,126,63,0,1107,1101,1,0,0,0,1107,1104,1,0, + 0,0,1107,1105,1,0,0,0,1107,1106,1,0,0,0,1108,225,1,0,0,0,1109,1110, + 7,32,0,0,1110,227,1,0,0,0,91,229,232,238,246,256,267,272,276,279, + 283,291,297,302,305,310,313,316,319,323,326,332,336,350,365,370, + 374,380,388,396,400,405,408,419,424,428,435,441,456,465,474,483, + 497,505,507,519,528,540,547,549,557,568,576,578,592,595,614,625, + 660,669,694,701,705,713,717,728,735,742,753,767,780,790,804,809, + 820,834,849,872,881,920,985,1012,1015,1027,1045,1051,1057,1064,1080, + 1097,1101,1107 + ]; + + private static __ATN: antlr.ATN; + public static get _ATN(): antlr.ATN { + if (!OpenSearchSQLParser.__ATN) { + OpenSearchSQLParser.__ATN = new antlr.ATNDeserializer().deserialize(OpenSearchSQLParser._serializedATN); + } + + return OpenSearchSQLParser.__ATN; + } + + + private static readonly vocabulary = new antlr.Vocabulary(OpenSearchSQLParser.literalNames, OpenSearchSQLParser.symbolicNames, []); + + public override get vocabulary(): antlr.Vocabulary { + return OpenSearchSQLParser.vocabulary; + } + + private static readonly decisionsToDFA = OpenSearchSQLParser._ATN.decisionToState.map( (ds: antlr.DecisionState, index: number) => new antlr.DFA(ds, index) ); +} + +export class RootContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public EOF(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.EOF, 0)!; + } + public sqlStatement(): SqlStatementContext | null { + return this.getRuleContext(0, SqlStatementContext); + } + public SEMI(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.SEMI, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_root; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitRoot) { + return visitor.visitRoot(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SqlStatementContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public dmlStatement(): DmlStatementContext | null { + return this.getRuleContext(0, DmlStatementContext); + } + public adminStatement(): AdminStatementContext | null { + return this.getRuleContext(0, AdminStatementContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_sqlStatement; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitSqlStatement) { + return visitor.visitSqlStatement(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DmlStatementContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public selectStatement(): SelectStatementContext { + return this.getRuleContext(0, SelectStatementContext)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_dmlStatement; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitDmlStatement) { + return visitor.visitDmlStatement(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SelectStatementContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_selectStatement; + } + public override copyFrom(ctx: SelectStatementContext): void { + super.copyFrom(ctx); + } +} +export class SimpleSelectContext extends SelectStatementContext { + public constructor(ctx: SelectStatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public querySpecification(): QuerySpecificationContext { + return this.getRuleContext(0, QuerySpecificationContext)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitSimpleSelect) { + return visitor.visitSimpleSelect(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class AdminStatementContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public showStatement(): ShowStatementContext | null { + return this.getRuleContext(0, ShowStatementContext); + } + public describeStatement(): DescribeStatementContext | null { + return this.getRuleContext(0, DescribeStatementContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_adminStatement; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitAdminStatement) { + return visitor.visitAdminStatement(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ShowStatementContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public SHOW(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.SHOW, 0)!; + } + public TABLES(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.TABLES, 0)!; + } + public tableFilter(): TableFilterContext { + return this.getRuleContext(0, TableFilterContext)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_showStatement; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitShowStatement) { + return visitor.visitShowStatement(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DescribeStatementContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public DESCRIBE(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.DESCRIBE, 0)!; + } + public TABLES(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.TABLES, 0)!; + } + public tableFilter(): TableFilterContext { + return this.getRuleContext(0, TableFilterContext)!; + } + public columnFilter(): ColumnFilterContext | null { + return this.getRuleContext(0, ColumnFilterContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_describeStatement; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitDescribeStatement) { + return visitor.visitDescribeStatement(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ColumnFilterContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public COLUMNS(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.COLUMNS, 0)!; + } + public LIKE(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LIKE, 0)!; + } + public showDescribePattern(): ShowDescribePatternContext { + return this.getRuleContext(0, ShowDescribePatternContext)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_columnFilter; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitColumnFilter) { + return visitor.visitColumnFilter(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TableFilterContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public LIKE(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LIKE, 0)!; + } + public showDescribePattern(): ShowDescribePatternContext { + return this.getRuleContext(0, ShowDescribePatternContext)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_tableFilter; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitTableFilter) { + return visitor.visitTableFilter(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ShowDescribePatternContext extends antlr.ParserRuleContext { + public _oldID?: CompatibleIDContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public compatibleID(): CompatibleIDContext | null { + return this.getRuleContext(0, CompatibleIDContext); + } + public stringLiteral(): StringLiteralContext | null { + return this.getRuleContext(0, StringLiteralContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_showDescribePattern; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitShowDescribePattern) { + return visitor.visitShowDescribePattern(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class CompatibleIDContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public MODULE(): antlr.TerminalNode[]; + public MODULE(i: number): antlr.TerminalNode | null; + public MODULE(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchSQLParser.MODULE); + } else { + return this.getToken(OpenSearchSQLParser.MODULE, i); + } + } + public ID(): antlr.TerminalNode[]; + public ID(i: number): antlr.TerminalNode | null; + public ID(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchSQLParser.ID); + } else { + return this.getToken(OpenSearchSQLParser.ID, i); + } + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_compatibleID; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitCompatibleID) { + return visitor.visitCompatibleID(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class QuerySpecificationContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public selectClause(): SelectClauseContext { + return this.getRuleContext(0, SelectClauseContext)!; + } + public fromClause(): FromClauseContext | null { + return this.getRuleContext(0, FromClauseContext); + } + public limitClause(): LimitClauseContext | null { + return this.getRuleContext(0, LimitClauseContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_querySpecification; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitQuerySpecification) { + return visitor.visitQuerySpecification(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SelectClauseContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public SELECT(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.SELECT, 0)!; + } + public selectElements(): SelectElementsContext { + return this.getRuleContext(0, SelectElementsContext)!; + } + public selectSpec(): SelectSpecContext | null { + return this.getRuleContext(0, SelectSpecContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_selectClause; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitSelectClause) { + return visitor.visitSelectClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SelectSpecContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public ALL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.ALL, 0); + } + public DISTINCT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DISTINCT, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_selectSpec; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitSelectSpec) { + return visitor.visitSelectSpec(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SelectElementsContext extends antlr.ParserRuleContext { + public _star?: Token | null; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public selectElement(): SelectElementContext[]; + public selectElement(i: number): SelectElementContext | null; + public selectElement(i?: number): SelectElementContext[] | SelectElementContext | null { + if (i === undefined) { + return this.getRuleContexts(SelectElementContext); + } + + return this.getRuleContext(i, SelectElementContext); + } + public STAR(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.STAR, 0); + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchSQLParser.COMMA); + } else { + return this.getToken(OpenSearchSQLParser.COMMA, i); + } + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_selectElements; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitSelectElements) { + return visitor.visitSelectElements(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SelectElementContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public alias(): AliasContext | null { + return this.getRuleContext(0, AliasContext); + } + public AS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.AS, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_selectElement; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitSelectElement) { + return visitor.visitSelectElement(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FromClauseContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public FROM(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.FROM, 0)!; + } + public relation(): RelationContext { + return this.getRuleContext(0, RelationContext)!; + } + public whereClause(): WhereClauseContext | null { + return this.getRuleContext(0, WhereClauseContext); + } + public groupByClause(): GroupByClauseContext | null { + return this.getRuleContext(0, GroupByClauseContext); + } + public havingClause(): HavingClauseContext | null { + return this.getRuleContext(0, HavingClauseContext); + } + public orderByClause(): OrderByClauseContext | null { + return this.getRuleContext(0, OrderByClauseContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_fromClause; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitFromClause) { + return visitor.visitFromClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RelationContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_relation; + } + public override copyFrom(ctx: RelationContext): void { + super.copyFrom(ctx); + } +} +export class TableAsRelationContext extends RelationContext { + public constructor(ctx: RelationContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public tableName(): TableNameContext { + return this.getRuleContext(0, TableNameContext)!; + } + public alias(): AliasContext | null { + return this.getRuleContext(0, AliasContext); + } + public AS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.AS, 0); + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitTableAsRelation) { + return visitor.visitTableAsRelation(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SubqueryAsRelationContext extends RelationContext { + public _subquery?: QuerySpecificationContext; + public constructor(ctx: RelationContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public LR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LR_BRACKET, 0)!; + } + public RR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.RR_BRACKET, 0)!; + } + public alias(): AliasContext { + return this.getRuleContext(0, AliasContext)!; + } + public querySpecification(): QuerySpecificationContext { + return this.getRuleContext(0, QuerySpecificationContext)!; + } + public AS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.AS, 0); + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitSubqueryAsRelation) { + return visitor.visitSubqueryAsRelation(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class WhereClauseContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public WHERE(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.WHERE, 0)!; + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_whereClause; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitWhereClause) { + return visitor.visitWhereClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class GroupByClauseContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public GROUP(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.GROUP, 0)!; + } + public BY(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.BY, 0)!; + } + public groupByElements(): GroupByElementsContext { + return this.getRuleContext(0, GroupByElementsContext)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_groupByClause; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitGroupByClause) { + return visitor.visitGroupByClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class GroupByElementsContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public groupByElement(): GroupByElementContext[]; + public groupByElement(i: number): GroupByElementContext | null; + public groupByElement(i?: number): GroupByElementContext[] | GroupByElementContext | null { + if (i === undefined) { + return this.getRuleContexts(GroupByElementContext); + } + + return this.getRuleContext(i, GroupByElementContext); + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchSQLParser.COMMA); + } else { + return this.getToken(OpenSearchSQLParser.COMMA, i); + } + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_groupByElements; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitGroupByElements) { + return visitor.visitGroupByElements(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class GroupByElementContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_groupByElement; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitGroupByElement) { + return visitor.visitGroupByElement(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class HavingClauseContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public HAVING(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.HAVING, 0)!; + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_havingClause; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitHavingClause) { + return visitor.visitHavingClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class OrderByClauseContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public ORDER(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.ORDER, 0)!; + } + public BY(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.BY, 0)!; + } + public orderByElement(): OrderByElementContext[]; + public orderByElement(i: number): OrderByElementContext | null; + public orderByElement(i?: number): OrderByElementContext[] | OrderByElementContext | null { + if (i === undefined) { + return this.getRuleContexts(OrderByElementContext); + } + + return this.getRuleContext(i, OrderByElementContext); + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchSQLParser.COMMA); + } else { + return this.getToken(OpenSearchSQLParser.COMMA, i); + } + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_orderByClause; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitOrderByClause) { + return visitor.visitOrderByClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class OrderByElementContext extends antlr.ParserRuleContext { + public _order?: Token | null; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public NULLS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.NULLS, 0); + } + public FIRST(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.FIRST, 0); + } + public LAST(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.LAST, 0); + } + public ASC(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.ASC, 0); + } + public DESC(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DESC, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_orderByElement; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitOrderByElement) { + return visitor.visitOrderByElement(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class LimitClauseContext extends antlr.ParserRuleContext { + public _offset?: DecimalLiteralContext; + public _limit?: DecimalLiteralContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public LIMIT(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LIMIT, 0)!; + } + public decimalLiteral(): DecimalLiteralContext[]; + public decimalLiteral(i: number): DecimalLiteralContext | null; + public decimalLiteral(i?: number): DecimalLiteralContext[] | DecimalLiteralContext | null { + if (i === undefined) { + return this.getRuleContexts(DecimalLiteralContext); + } + + return this.getRuleContext(i, DecimalLiteralContext); + } + public COMMA(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.COMMA, 0); + } + public OFFSET(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.OFFSET, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_limitClause; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitLimitClause) { + return visitor.visitLimitClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class WindowFunctionClauseContext extends antlr.ParserRuleContext { + public _function_?: WindowFunctionContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public overClause(): OverClauseContext { + return this.getRuleContext(0, OverClauseContext)!; + } + public windowFunction(): WindowFunctionContext { + return this.getRuleContext(0, WindowFunctionContext)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_windowFunctionClause; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitWindowFunctionClause) { + return visitor.visitWindowFunctionClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class WindowFunctionContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_windowFunction; + } + public override copyFrom(ctx: WindowFunctionContext): void { + super.copyFrom(ctx); + } +} +export class AggregateWindowFunctionContext extends WindowFunctionContext { + public constructor(ctx: WindowFunctionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public aggregateFunction(): AggregateFunctionContext { + return this.getRuleContext(0, AggregateFunctionContext)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitAggregateWindowFunction) { + return visitor.visitAggregateWindowFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ScalarWindowFunctionContext extends WindowFunctionContext { + public _functionName?: Token | null; + public constructor(ctx: WindowFunctionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public LR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LR_BRACKET, 0)!; + } + public RR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.RR_BRACKET, 0)!; + } + public ROW_NUMBER(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.ROW_NUMBER, 0); + } + public RANK(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.RANK, 0); + } + public DENSE_RANK(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DENSE_RANK, 0); + } + public functionArgs(): FunctionArgsContext | null { + return this.getRuleContext(0, FunctionArgsContext); + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitScalarWindowFunction) { + return visitor.visitScalarWindowFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class OverClauseContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public OVER(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.OVER, 0)!; + } + public LR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LR_BRACKET, 0)!; + } + public RR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.RR_BRACKET, 0)!; + } + public partitionByClause(): PartitionByClauseContext | null { + return this.getRuleContext(0, PartitionByClauseContext); + } + public orderByClause(): OrderByClauseContext | null { + return this.getRuleContext(0, OrderByClauseContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_overClause; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitOverClause) { + return visitor.visitOverClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PartitionByClauseContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public PARTITION(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.PARTITION, 0)!; + } + public BY(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.BY, 0)!; + } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext | null; + public expression(i?: number): ExpressionContext[] | ExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } + + return this.getRuleContext(i, ExpressionContext); + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchSQLParser.COMMA); + } else { + return this.getToken(OpenSearchSQLParser.COMMA, i); + } + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_partitionByClause; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitPartitionByClause) { + return visitor.visitPartitionByClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ConstantContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_constant; + } + public override copyFrom(ctx: ConstantContext): void { + super.copyFrom(ctx); + } +} +export class DatetimeContext extends ConstantContext { + public constructor(ctx: ConstantContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public datetimeLiteral(): DatetimeLiteralContext { + return this.getRuleContext(0, DatetimeLiteralContext)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitDatetime) { + return visitor.visitDatetime(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SignedDecimalContext extends ConstantContext { + public constructor(ctx: ConstantContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public decimalLiteral(): DecimalLiteralContext { + return this.getRuleContext(0, DecimalLiteralContext)!; + } + public sign(): SignContext | null { + return this.getRuleContext(0, SignContext); + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitSignedDecimal) { + return visitor.visitSignedDecimal(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class BooleanContext extends ConstantContext { + public constructor(ctx: ConstantContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public booleanLiteral(): BooleanLiteralContext { + return this.getRuleContext(0, BooleanLiteralContext)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitBoolean) { + return visitor.visitBoolean(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class StringContext extends ConstantContext { + public constructor(ctx: ConstantContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public stringLiteral(): StringLiteralContext { + return this.getRuleContext(0, StringLiteralContext)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitString) { + return visitor.visitString(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class NullContext extends ConstantContext { + public constructor(ctx: ConstantContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public nullLiteral(): NullLiteralContext { + return this.getRuleContext(0, NullLiteralContext)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitNull) { + return visitor.visitNull(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class IntervalContext extends ConstantContext { + public constructor(ctx: ConstantContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public intervalLiteral(): IntervalLiteralContext { + return this.getRuleContext(0, IntervalLiteralContext)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitInterval) { + return visitor.visitInterval(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SignedRealContext extends ConstantContext { + public constructor(ctx: ConstantContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public realLiteral(): RealLiteralContext { + return this.getRuleContext(0, RealLiteralContext)!; + } + public sign(): SignContext | null { + return this.getRuleContext(0, SignContext); + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitSignedReal) { + return visitor.visitSignedReal(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DecimalLiteralContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public DECIMAL_LITERAL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DECIMAL_LITERAL, 0); + } + public ZERO_DECIMAL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.ZERO_DECIMAL, 0); + } + public ONE_DECIMAL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.ONE_DECIMAL, 0); + } + public TWO_DECIMAL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.TWO_DECIMAL, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_decimalLiteral; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitDecimalLiteral) { + return visitor.visitDecimalLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class NumericLiteralContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public decimalLiteral(): DecimalLiteralContext | null { + return this.getRuleContext(0, DecimalLiteralContext); + } + public realLiteral(): RealLiteralContext | null { + return this.getRuleContext(0, RealLiteralContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_numericLiteral; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitNumericLiteral) { + return visitor.visitNumericLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class StringLiteralContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public STRING_LITERAL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.STRING_LITERAL, 0); + } + public DOUBLE_QUOTE_ID(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DOUBLE_QUOTE_ID, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_stringLiteral; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitStringLiteral) { + return visitor.visitStringLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class BooleanLiteralContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public TRUE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.TRUE, 0); + } + public FALSE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.FALSE, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_booleanLiteral; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitBooleanLiteral) { + return visitor.visitBooleanLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RealLiteralContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public REAL_LITERAL(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.REAL_LITERAL, 0)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_realLiteral; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitRealLiteral) { + return visitor.visitRealLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SignContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public PLUS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.PLUS, 0); + } + public MINUS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MINUS, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_sign; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitSign) { + return visitor.visitSign(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class NullLiteralContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public NULL_LITERAL(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.NULL_LITERAL, 0)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_nullLiteral; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitNullLiteral) { + return visitor.visitNullLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DatetimeLiteralContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public dateLiteral(): DateLiteralContext | null { + return this.getRuleContext(0, DateLiteralContext); + } + public timeLiteral(): TimeLiteralContext | null { + return this.getRuleContext(0, TimeLiteralContext); + } + public timestampLiteral(): TimestampLiteralContext | null { + return this.getRuleContext(0, TimestampLiteralContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_datetimeLiteral; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitDatetimeLiteral) { + return visitor.visitDatetimeLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DateLiteralContext extends antlr.ParserRuleContext { + public _date?: StringLiteralContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public DATE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DATE, 0); + } + public stringLiteral(): StringLiteralContext { + return this.getRuleContext(0, StringLiteralContext)!; + } + public LEFT_BRACE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.LEFT_BRACE, 0); + } + public RIGHT_BRACE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.RIGHT_BRACE, 0); + } + public D(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.D, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_dateLiteral; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitDateLiteral) { + return visitor.visitDateLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TimeLiteralContext extends antlr.ParserRuleContext { + public _time?: StringLiteralContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public TIME(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.TIME, 0); + } + public stringLiteral(): StringLiteralContext { + return this.getRuleContext(0, StringLiteralContext)!; + } + public LEFT_BRACE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.LEFT_BRACE, 0); + } + public RIGHT_BRACE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.RIGHT_BRACE, 0); + } + public T(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.T, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_timeLiteral; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitTimeLiteral) { + return visitor.visitTimeLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TimestampLiteralContext extends antlr.ParserRuleContext { + public _timestamp?: StringLiteralContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public TIMESTAMP(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.TIMESTAMP, 0); + } + public stringLiteral(): StringLiteralContext { + return this.getRuleContext(0, StringLiteralContext)!; + } + public LEFT_BRACE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.LEFT_BRACE, 0); + } + public RIGHT_BRACE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.RIGHT_BRACE, 0); + } + public TS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.TS, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_timestampLiteral; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitTimestampLiteral) { + return visitor.visitTimestampLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DatetimeConstantLiteralContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public CURRENT_DATE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.CURRENT_DATE, 0); + } + public CURRENT_TIME(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.CURRENT_TIME, 0); + } + public CURRENT_TIMESTAMP(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.CURRENT_TIMESTAMP, 0); + } + public LOCALTIME(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.LOCALTIME, 0); + } + public LOCALTIMESTAMP(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.LOCALTIMESTAMP, 0); + } + public UTC_TIMESTAMP(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.UTC_TIMESTAMP, 0); + } + public UTC_DATE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.UTC_DATE, 0); + } + public UTC_TIME(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.UTC_TIME, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_datetimeConstantLiteral; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitDatetimeConstantLiteral) { + return visitor.visitDatetimeConstantLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class IntervalLiteralContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public INTERVAL(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.INTERVAL, 0)!; + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public intervalUnit(): IntervalUnitContext { + return this.getRuleContext(0, IntervalUnitContext)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_intervalLiteral; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitIntervalLiteral) { + return visitor.visitIntervalLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class IntervalUnitContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public MICROSECOND(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MICROSECOND, 0); + } + public SECOND(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.SECOND, 0); + } + public MINUTE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MINUTE, 0); + } + public HOUR(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.HOUR, 0); + } + public DAY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DAY, 0); + } + public WEEK(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.WEEK, 0); + } + public MONTH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MONTH, 0); + } + public QUARTER(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.QUARTER, 0); + } + public YEAR(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.YEAR, 0); + } + public SECOND_MICROSECOND(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.SECOND_MICROSECOND, 0); + } + public MINUTE_MICROSECOND(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MINUTE_MICROSECOND, 0); + } + public MINUTE_SECOND(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MINUTE_SECOND, 0); + } + public HOUR_MICROSECOND(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.HOUR_MICROSECOND, 0); + } + public HOUR_SECOND(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.HOUR_SECOND, 0); + } + public HOUR_MINUTE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.HOUR_MINUTE, 0); + } + public DAY_MICROSECOND(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DAY_MICROSECOND, 0); + } + public DAY_SECOND(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DAY_SECOND, 0); + } + public DAY_MINUTE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DAY_MINUTE, 0); + } + public DAY_HOUR(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DAY_HOUR, 0); + } + public YEAR_MONTH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.YEAR_MONTH, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_intervalUnit; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitIntervalUnit) { + return visitor.visitIntervalUnit(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ExpressionContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_expression; + } + public override copyFrom(ctx: ExpressionContext): void { + super.copyFrom(ctx); + } +} +export class OrExpressionContext extends ExpressionContext { + public _left?: ExpressionContext; + public _right?: ExpressionContext; + public constructor(ctx: ExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public OR(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.OR, 0)!; + } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext | null; + public expression(i?: number): ExpressionContext[] | ExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } + + return this.getRuleContext(i, ExpressionContext); + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitOrExpression) { + return visitor.visitOrExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class AndExpressionContext extends ExpressionContext { + public _left?: ExpressionContext; + public _right?: ExpressionContext; + public constructor(ctx: ExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public AND(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.AND, 0)!; + } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext | null; + public expression(i?: number): ExpressionContext[] | ExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } + + return this.getRuleContext(i, ExpressionContext); + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitAndExpression) { + return visitor.visitAndExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class NotExpressionContext extends ExpressionContext { + public constructor(ctx: ExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public NOT(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.NOT, 0)!; + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitNotExpression) { + return visitor.visitNotExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class PredicateExpressionContext extends ExpressionContext { + public constructor(ctx: ExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public predicate(): PredicateContext { + return this.getRuleContext(0, PredicateContext)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitPredicateExpression) { + return visitor.visitPredicateExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PredicateContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_predicate; + } + public override copyFrom(ctx: PredicateContext): void { + super.copyFrom(ctx); + } +} +export class ExpressionAtomPredicateContext extends PredicateContext { + public constructor(ctx: PredicateContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public expressionAtom(): ExpressionAtomContext { + return this.getRuleContext(0, ExpressionAtomContext)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitExpressionAtomPredicate) { + return visitor.visitExpressionAtomPredicate(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class BinaryComparisonPredicateContext extends PredicateContext { + public _left?: PredicateContext; + public _right?: PredicateContext; + public constructor(ctx: PredicateContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public comparisonOperator(): ComparisonOperatorContext { + return this.getRuleContext(0, ComparisonOperatorContext)!; + } + public predicate(): PredicateContext[]; + public predicate(i: number): PredicateContext | null; + public predicate(i?: number): PredicateContext[] | PredicateContext | null { + if (i === undefined) { + return this.getRuleContexts(PredicateContext); + } + + return this.getRuleContext(i, PredicateContext); + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitBinaryComparisonPredicate) { + return visitor.visitBinaryComparisonPredicate(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class InPredicateContext extends PredicateContext { + public constructor(ctx: PredicateContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public predicate(): PredicateContext { + return this.getRuleContext(0, PredicateContext)!; + } + public IN(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.IN, 0)!; + } + public LR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LR_BRACKET, 0)!; + } + public expressions(): ExpressionsContext { + return this.getRuleContext(0, ExpressionsContext)!; + } + public RR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.RR_BRACKET, 0)!; + } + public NOT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.NOT, 0); + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitInPredicate) { + return visitor.visitInPredicate(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class BetweenPredicateContext extends PredicateContext { + public constructor(ctx: PredicateContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public predicate(): PredicateContext[]; + public predicate(i: number): PredicateContext | null; + public predicate(i?: number): PredicateContext[] | PredicateContext | null { + if (i === undefined) { + return this.getRuleContexts(PredicateContext); + } + + return this.getRuleContext(i, PredicateContext); + } + public BETWEEN(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.BETWEEN, 0)!; + } + public AND(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.AND, 0)!; + } + public NOT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.NOT, 0); + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitBetweenPredicate) { + return visitor.visitBetweenPredicate(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class IsNullPredicateContext extends PredicateContext { + public constructor(ctx: PredicateContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public predicate(): PredicateContext { + return this.getRuleContext(0, PredicateContext)!; + } + public IS(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.IS, 0)!; + } + public nullNotnull(): NullNotnullContext { + return this.getRuleContext(0, NullNotnullContext)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitIsNullPredicate) { + return visitor.visitIsNullPredicate(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class LikePredicateContext extends PredicateContext { + public _left?: PredicateContext; + public _right?: PredicateContext; + public constructor(ctx: PredicateContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public LIKE(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LIKE, 0)!; + } + public predicate(): PredicateContext[]; + public predicate(i: number): PredicateContext | null; + public predicate(i?: number): PredicateContext[] | PredicateContext | null { + if (i === undefined) { + return this.getRuleContexts(PredicateContext); + } + + return this.getRuleContext(i, PredicateContext); + } + public NOT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.NOT, 0); + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitLikePredicate) { + return visitor.visitLikePredicate(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RegexpPredicateContext extends PredicateContext { + public _left?: PredicateContext; + public _right?: PredicateContext; + public constructor(ctx: PredicateContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public REGEXP(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.REGEXP, 0)!; + } + public predicate(): PredicateContext[]; + public predicate(i: number): PredicateContext | null; + public predicate(i?: number): PredicateContext[] | PredicateContext | null { + if (i === undefined) { + return this.getRuleContexts(PredicateContext); + } + + return this.getRuleContext(i, PredicateContext); + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitRegexpPredicate) { + return visitor.visitRegexpPredicate(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ExpressionsContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext | null; + public expression(i?: number): ExpressionContext[] | ExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } + + return this.getRuleContext(i, ExpressionContext); + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchSQLParser.COMMA); + } else { + return this.getToken(OpenSearchSQLParser.COMMA, i); + } + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_expressions; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitExpressions) { + return visitor.visitExpressions(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ExpressionAtomContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_expressionAtom; + } + public override copyFrom(ctx: ExpressionAtomContext): void { + super.copyFrom(ctx); + } +} +export class ConstantExpressionAtomContext extends ExpressionAtomContext { + public constructor(ctx: ExpressionAtomContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public constant(): ConstantContext { + return this.getRuleContext(0, ConstantContext)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitConstantExpressionAtom) { + return visitor.visitConstantExpressionAtom(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class FunctionCallExpressionAtomContext extends ExpressionAtomContext { + public constructor(ctx: ExpressionAtomContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public functionCall(): FunctionCallContext { + return this.getRuleContext(0, FunctionCallContext)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitFunctionCallExpressionAtom) { + return visitor.visitFunctionCallExpressionAtom(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class FullColumnNameExpressionAtomContext extends ExpressionAtomContext { + public constructor(ctx: ExpressionAtomContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public columnName(): ColumnNameContext { + return this.getRuleContext(0, ColumnNameContext)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitFullColumnNameExpressionAtom) { + return visitor.visitFullColumnNameExpressionAtom(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class NestedExpressionAtomContext extends ExpressionAtomContext { + public constructor(ctx: ExpressionAtomContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public LR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LR_BRACKET, 0)!; + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public RR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.RR_BRACKET, 0)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitNestedExpressionAtom) { + return visitor.visitNestedExpressionAtom(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class MathExpressionAtomContext extends ExpressionAtomContext { + public _left?: ExpressionAtomContext; + public _mathOperator?: Token | null; + public _right?: ExpressionAtomContext; + public constructor(ctx: ExpressionAtomContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public expressionAtom(): ExpressionAtomContext[]; + public expressionAtom(i: number): ExpressionAtomContext | null; + public expressionAtom(i?: number): ExpressionAtomContext[] | ExpressionAtomContext | null { + if (i === undefined) { + return this.getRuleContexts(ExpressionAtomContext); + } + + return this.getRuleContext(i, ExpressionAtomContext); + } + public STAR(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.STAR, 0); + } + public SLASH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.SLASH, 0); + } + public MODULE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MODULE, 0); + } + public PLUS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.PLUS, 0); + } + public MINUS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MINUS, 0); + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitMathExpressionAtom) { + return visitor.visitMathExpressionAtom(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ComparisonOperatorContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public EQUAL_SYMBOL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.EQUAL_SYMBOL, 0); + } + public GREATER_SYMBOL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.GREATER_SYMBOL, 0); + } + public LESS_SYMBOL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.LESS_SYMBOL, 0); + } + public EXCLAMATION_SYMBOL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.EXCLAMATION_SYMBOL, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_comparisonOperator; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitComparisonOperator) { + return visitor.visitComparisonOperator(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class NullNotnullContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public NULL_LITERAL(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.NULL_LITERAL, 0)!; + } + public NOT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.NOT, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_nullNotnull; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitNullNotnull) { + return visitor.visitNullNotnull(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FunctionCallContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_functionCall; + } + public override copyFrom(ctx: FunctionCallContext): void { + super.copyFrom(ctx); + } +} +export class PositionFunctionCallContext extends FunctionCallContext { + public constructor(ctx: FunctionCallContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public positionFunction(): PositionFunctionContext { + return this.getRuleContext(0, PositionFunctionContext)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitPositionFunctionCall) { + return visitor.visitPositionFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SpecificFunctionCallContext extends FunctionCallContext { + public constructor(ctx: FunctionCallContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public specificFunction(): SpecificFunctionContext { + return this.getRuleContext(0, SpecificFunctionContext)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitSpecificFunctionCall) { + return visitor.visitSpecificFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ScoreRelevanceFunctionCallContext extends FunctionCallContext { + public constructor(ctx: FunctionCallContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public scoreRelevanceFunction(): ScoreRelevanceFunctionContext { + return this.getRuleContext(0, ScoreRelevanceFunctionContext)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitScoreRelevanceFunctionCall) { + return visitor.visitScoreRelevanceFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class HighlightFunctionCallContext extends FunctionCallContext { + public constructor(ctx: FunctionCallContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public highlightFunction(): HighlightFunctionContext { + return this.getRuleContext(0, HighlightFunctionContext)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitHighlightFunctionCall) { + return visitor.visitHighlightFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ExtractFunctionCallContext extends FunctionCallContext { + public constructor(ctx: FunctionCallContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public extractFunction(): ExtractFunctionContext { + return this.getRuleContext(0, ExtractFunctionContext)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitExtractFunctionCall) { + return visitor.visitExtractFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RelevanceFunctionCallContext extends FunctionCallContext { + public constructor(ctx: FunctionCallContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public relevanceFunction(): RelevanceFunctionContext { + return this.getRuleContext(0, RelevanceFunctionContext)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitRelevanceFunctionCall) { + return visitor.visitRelevanceFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class TimestampFunctionCallContext extends FunctionCallContext { + public constructor(ctx: FunctionCallContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public timestampFunction(): TimestampFunctionContext { + return this.getRuleContext(0, TimestampFunctionContext)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitTimestampFunctionCall) { + return visitor.visitTimestampFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class NestedAllFunctionCallContext extends FunctionCallContext { + public constructor(ctx: FunctionCallContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public nestedFunctionName(): NestedFunctionNameContext { + return this.getRuleContext(0, NestedFunctionNameContext)!; + } + public LR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LR_BRACKET, 0)!; + } + public allTupleFields(): AllTupleFieldsContext { + return this.getRuleContext(0, AllTupleFieldsContext)!; + } + public RR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.RR_BRACKET, 0)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitNestedAllFunctionCall) { + return visitor.visitNestedAllFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class FilteredAggregationFunctionCallContext extends FunctionCallContext { + public constructor(ctx: FunctionCallContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public aggregateFunction(): AggregateFunctionContext { + return this.getRuleContext(0, AggregateFunctionContext)!; + } + public filterClause(): FilterClauseContext { + return this.getRuleContext(0, FilterClauseContext)!; + } + public orderByClause(): OrderByClauseContext | null { + return this.getRuleContext(0, OrderByClauseContext); + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitFilteredAggregationFunctionCall) { + return visitor.visitFilteredAggregationFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class WindowFunctionCallContext extends FunctionCallContext { + public constructor(ctx: FunctionCallContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public windowFunctionClause(): WindowFunctionClauseContext { + return this.getRuleContext(0, WindowFunctionClauseContext)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitWindowFunctionCall) { + return visitor.visitWindowFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class AggregateFunctionCallContext extends FunctionCallContext { + public constructor(ctx: FunctionCallContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public aggregateFunction(): AggregateFunctionContext { + return this.getRuleContext(0, AggregateFunctionContext)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitAggregateFunctionCall) { + return visitor.visitAggregateFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class GetFormatFunctionCallContext extends FunctionCallContext { + public constructor(ctx: FunctionCallContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public getFormatFunction(): GetFormatFunctionContext { + return this.getRuleContext(0, GetFormatFunctionContext)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitGetFormatFunctionCall) { + return visitor.visitGetFormatFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ScalarFunctionCallContext extends FunctionCallContext { + public constructor(ctx: FunctionCallContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public scalarFunctionName(): ScalarFunctionNameContext { + return this.getRuleContext(0, ScalarFunctionNameContext)!; + } + public LR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LR_BRACKET, 0)!; + } + public functionArgs(): FunctionArgsContext { + return this.getRuleContext(0, FunctionArgsContext)!; + } + public RR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.RR_BRACKET, 0)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitScalarFunctionCall) { + return visitor.visitScalarFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TimestampFunctionContext extends antlr.ParserRuleContext { + public _firstArg?: FunctionArgContext; + public _secondArg?: FunctionArgContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public timestampFunctionName(): TimestampFunctionNameContext { + return this.getRuleContext(0, TimestampFunctionNameContext)!; + } + public LR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LR_BRACKET, 0)!; + } + public simpleDateTimePart(): SimpleDateTimePartContext { + return this.getRuleContext(0, SimpleDateTimePartContext)!; + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchSQLParser.COMMA); + } else { + return this.getToken(OpenSearchSQLParser.COMMA, i); + } + } + public RR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.RR_BRACKET, 0)!; + } + public functionArg(): FunctionArgContext[]; + public functionArg(i: number): FunctionArgContext | null; + public functionArg(i?: number): FunctionArgContext[] | FunctionArgContext | null { + if (i === undefined) { + return this.getRuleContexts(FunctionArgContext); + } + + return this.getRuleContext(i, FunctionArgContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_timestampFunction; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitTimestampFunction) { + return visitor.visitTimestampFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TimestampFunctionNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public TIMESTAMPADD(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.TIMESTAMPADD, 0); + } + public TIMESTAMPDIFF(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.TIMESTAMPDIFF, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_timestampFunctionName; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitTimestampFunctionName) { + return visitor.visitTimestampFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class GetFormatFunctionContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public GET_FORMAT(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.GET_FORMAT, 0)!; + } + public LR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LR_BRACKET, 0)!; + } + public getFormatType(): GetFormatTypeContext { + return this.getRuleContext(0, GetFormatTypeContext)!; + } + public COMMA(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.COMMA, 0)!; + } + public functionArg(): FunctionArgContext { + return this.getRuleContext(0, FunctionArgContext)!; + } + public RR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.RR_BRACKET, 0)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_getFormatFunction; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitGetFormatFunction) { + return visitor.visitGetFormatFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class GetFormatTypeContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public DATE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DATE, 0); + } + public DATETIME(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DATETIME, 0); + } + public TIME(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.TIME, 0); + } + public TIMESTAMP(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.TIMESTAMP, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_getFormatType; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitGetFormatType) { + return visitor.visitGetFormatType(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ExtractFunctionContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public EXTRACT(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.EXTRACT, 0)!; + } + public LR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LR_BRACKET, 0)!; + } + public datetimePart(): DatetimePartContext { + return this.getRuleContext(0, DatetimePartContext)!; + } + public FROM(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.FROM, 0)!; + } + public functionArg(): FunctionArgContext { + return this.getRuleContext(0, FunctionArgContext)!; + } + public RR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.RR_BRACKET, 0)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_extractFunction; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitExtractFunction) { + return visitor.visitExtractFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SimpleDateTimePartContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public MICROSECOND(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MICROSECOND, 0); + } + public SECOND(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.SECOND, 0); + } + public MINUTE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MINUTE, 0); + } + public HOUR(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.HOUR, 0); + } + public DAY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DAY, 0); + } + public WEEK(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.WEEK, 0); + } + public MONTH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MONTH, 0); + } + public QUARTER(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.QUARTER, 0); + } + public YEAR(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.YEAR, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_simpleDateTimePart; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitSimpleDateTimePart) { + return visitor.visitSimpleDateTimePart(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ComplexDateTimePartContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public SECOND_MICROSECOND(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.SECOND_MICROSECOND, 0); + } + public MINUTE_MICROSECOND(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MINUTE_MICROSECOND, 0); + } + public MINUTE_SECOND(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MINUTE_SECOND, 0); + } + public HOUR_MICROSECOND(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.HOUR_MICROSECOND, 0); + } + public HOUR_SECOND(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.HOUR_SECOND, 0); + } + public HOUR_MINUTE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.HOUR_MINUTE, 0); + } + public DAY_MICROSECOND(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DAY_MICROSECOND, 0); + } + public DAY_SECOND(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DAY_SECOND, 0); + } + public DAY_MINUTE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DAY_MINUTE, 0); + } + public DAY_HOUR(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DAY_HOUR, 0); + } + public YEAR_MONTH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.YEAR_MONTH, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_complexDateTimePart; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitComplexDateTimePart) { + return visitor.visitComplexDateTimePart(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DatetimePartContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public simpleDateTimePart(): SimpleDateTimePartContext | null { + return this.getRuleContext(0, SimpleDateTimePartContext); + } + public complexDateTimePart(): ComplexDateTimePartContext | null { + return this.getRuleContext(0, ComplexDateTimePartContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_datetimePart; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitDatetimePart) { + return visitor.visitDatetimePart(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class HighlightFunctionContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public HIGHLIGHT(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.HIGHLIGHT, 0)!; + } + public LR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LR_BRACKET, 0)!; + } + public relevanceField(): RelevanceFieldContext { + return this.getRuleContext(0, RelevanceFieldContext)!; + } + public RR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.RR_BRACKET, 0)!; + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchSQLParser.COMMA); + } else { + return this.getToken(OpenSearchSQLParser.COMMA, i); + } + } + public highlightArg(): HighlightArgContext[]; + public highlightArg(i: number): HighlightArgContext | null; + public highlightArg(i?: number): HighlightArgContext[] | HighlightArgContext | null { + if (i === undefined) { + return this.getRuleContexts(HighlightArgContext); + } + + return this.getRuleContext(i, HighlightArgContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_highlightFunction; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitHighlightFunction) { + return visitor.visitHighlightFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PositionFunctionContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public POSITION(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.POSITION, 0)!; + } + public LR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LR_BRACKET, 0)!; + } + public functionArg(): FunctionArgContext[]; + public functionArg(i: number): FunctionArgContext | null; + public functionArg(i?: number): FunctionArgContext[] | FunctionArgContext | null { + if (i === undefined) { + return this.getRuleContexts(FunctionArgContext); + } + + return this.getRuleContext(i, FunctionArgContext); + } + public IN(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.IN, 0)!; + } + public RR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.RR_BRACKET, 0)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_positionFunction; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitPositionFunction) { + return visitor.visitPositionFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class MatchQueryAltSyntaxFunctionContext extends antlr.ParserRuleContext { + public _field?: RelevanceFieldContext; + public _query?: RelevanceQueryContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public EQUAL_SYMBOL(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.EQUAL_SYMBOL, 0)!; + } + public MATCH_QUERY(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.MATCH_QUERY, 0)!; + } + public LR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LR_BRACKET, 0)!; + } + public RR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.RR_BRACKET, 0)!; + } + public relevanceField(): RelevanceFieldContext { + return this.getRuleContext(0, RelevanceFieldContext)!; + } + public relevanceQuery(): RelevanceQueryContext { + return this.getRuleContext(0, RelevanceQueryContext)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_matchQueryAltSyntaxFunction; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitMatchQueryAltSyntaxFunction) { + return visitor.visitMatchQueryAltSyntaxFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ScalarFunctionNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public mathematicalFunctionName(): MathematicalFunctionNameContext | null { + return this.getRuleContext(0, MathematicalFunctionNameContext); + } + public dateTimeFunctionName(): DateTimeFunctionNameContext | null { + return this.getRuleContext(0, DateTimeFunctionNameContext); + } + public textFunctionName(): TextFunctionNameContext | null { + return this.getRuleContext(0, TextFunctionNameContext); + } + public flowControlFunctionName(): FlowControlFunctionNameContext | null { + return this.getRuleContext(0, FlowControlFunctionNameContext); + } + public systemFunctionName(): SystemFunctionNameContext | null { + return this.getRuleContext(0, SystemFunctionNameContext); + } + public nestedFunctionName(): NestedFunctionNameContext | null { + return this.getRuleContext(0, NestedFunctionNameContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_scalarFunctionName; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitScalarFunctionName) { + return visitor.visitScalarFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SpecificFunctionContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_specificFunction; + } + public override copyFrom(ctx: SpecificFunctionContext): void { + super.copyFrom(ctx); + } +} +export class CaseFunctionCallContext extends SpecificFunctionContext { + public _elseArg?: FunctionArgContext; + public constructor(ctx: SpecificFunctionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CASE(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.CASE, 0)!; + } + public expression(): ExpressionContext | null { + return this.getRuleContext(0, ExpressionContext); + } + public END(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.END, 0)!; + } + public caseFuncAlternative(): CaseFuncAlternativeContext[]; + public caseFuncAlternative(i: number): CaseFuncAlternativeContext | null; + public caseFuncAlternative(i?: number): CaseFuncAlternativeContext[] | CaseFuncAlternativeContext | null { + if (i === undefined) { + return this.getRuleContexts(CaseFuncAlternativeContext); + } + + return this.getRuleContext(i, CaseFuncAlternativeContext); + } + public ELSE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.ELSE, 0); + } + public functionArg(): FunctionArgContext | null { + return this.getRuleContext(0, FunctionArgContext); + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitCaseFunctionCall) { + return visitor.visitCaseFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DataTypeFunctionCallContext extends SpecificFunctionContext { + public constructor(ctx: SpecificFunctionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CAST(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.CAST, 0)!; + } + public LR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LR_BRACKET, 0)!; + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public AS(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.AS, 0)!; + } + public convertedDataType(): ConvertedDataTypeContext { + return this.getRuleContext(0, ConvertedDataTypeContext)!; + } + public RR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.RR_BRACKET, 0)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitDataTypeFunctionCall) { + return visitor.visitDataTypeFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RelevanceFunctionContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public noFieldRelevanceFunction(): NoFieldRelevanceFunctionContext | null { + return this.getRuleContext(0, NoFieldRelevanceFunctionContext); + } + public singleFieldRelevanceFunction(): SingleFieldRelevanceFunctionContext | null { + return this.getRuleContext(0, SingleFieldRelevanceFunctionContext); + } + public multiFieldRelevanceFunction(): MultiFieldRelevanceFunctionContext | null { + return this.getRuleContext(0, MultiFieldRelevanceFunctionContext); + } + public altSingleFieldRelevanceFunction(): AltSingleFieldRelevanceFunctionContext | null { + return this.getRuleContext(0, AltSingleFieldRelevanceFunctionContext); + } + public altMultiFieldRelevanceFunction(): AltMultiFieldRelevanceFunctionContext | null { + return this.getRuleContext(0, AltMultiFieldRelevanceFunctionContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_relevanceFunction; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitRelevanceFunction) { + return visitor.visitRelevanceFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ScoreRelevanceFunctionContext extends antlr.ParserRuleContext { + public _weight?: RelevanceFieldWeightContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public scoreRelevanceFunctionName(): ScoreRelevanceFunctionNameContext { + return this.getRuleContext(0, ScoreRelevanceFunctionNameContext)!; + } + public LR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LR_BRACKET, 0)!; + } + public relevanceFunction(): RelevanceFunctionContext { + return this.getRuleContext(0, RelevanceFunctionContext)!; + } + public RR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.RR_BRACKET, 0)!; + } + public COMMA(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.COMMA, 0); + } + public relevanceFieldWeight(): RelevanceFieldWeightContext | null { + return this.getRuleContext(0, RelevanceFieldWeightContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_scoreRelevanceFunction; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitScoreRelevanceFunction) { + return visitor.visitScoreRelevanceFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class NoFieldRelevanceFunctionContext extends antlr.ParserRuleContext { + public _query?: RelevanceQueryContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public noFieldRelevanceFunctionName(): NoFieldRelevanceFunctionNameContext { + return this.getRuleContext(0, NoFieldRelevanceFunctionNameContext)!; + } + public LR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LR_BRACKET, 0)!; + } + public RR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.RR_BRACKET, 0)!; + } + public relevanceQuery(): RelevanceQueryContext { + return this.getRuleContext(0, RelevanceQueryContext)!; + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchSQLParser.COMMA); + } else { + return this.getToken(OpenSearchSQLParser.COMMA, i); + } + } + public relevanceArg(): RelevanceArgContext[]; + public relevanceArg(i: number): RelevanceArgContext | null; + public relevanceArg(i?: number): RelevanceArgContext[] | RelevanceArgContext | null { + if (i === undefined) { + return this.getRuleContexts(RelevanceArgContext); + } + + return this.getRuleContext(i, RelevanceArgContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_noFieldRelevanceFunction; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitNoFieldRelevanceFunction) { + return visitor.visitNoFieldRelevanceFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SingleFieldRelevanceFunctionContext extends antlr.ParserRuleContext { + public _field?: RelevanceFieldContext; + public _query?: RelevanceQueryContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public singleFieldRelevanceFunctionName(): SingleFieldRelevanceFunctionNameContext { + return this.getRuleContext(0, SingleFieldRelevanceFunctionNameContext)!; + } + public LR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LR_BRACKET, 0)!; + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchSQLParser.COMMA); + } else { + return this.getToken(OpenSearchSQLParser.COMMA, i); + } + } + public RR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.RR_BRACKET, 0)!; + } + public relevanceField(): RelevanceFieldContext { + return this.getRuleContext(0, RelevanceFieldContext)!; + } + public relevanceQuery(): RelevanceQueryContext { + return this.getRuleContext(0, RelevanceQueryContext)!; + } + public relevanceArg(): RelevanceArgContext[]; + public relevanceArg(i: number): RelevanceArgContext | null; + public relevanceArg(i?: number): RelevanceArgContext[] | RelevanceArgContext | null { + if (i === undefined) { + return this.getRuleContexts(RelevanceArgContext); + } + + return this.getRuleContext(i, RelevanceArgContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_singleFieldRelevanceFunction; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitSingleFieldRelevanceFunction) { + return visitor.visitSingleFieldRelevanceFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class MultiFieldRelevanceFunctionContext extends antlr.ParserRuleContext { + public _field?: RelevanceFieldAndWeightContext; + public _query?: RelevanceQueryContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public multiFieldRelevanceFunctionName(): MultiFieldRelevanceFunctionNameContext { + return this.getRuleContext(0, MultiFieldRelevanceFunctionNameContext)!; + } + public LR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LR_BRACKET, 0)!; + } + public LT_SQR_PRTHS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.LT_SQR_PRTHS, 0); + } + public RT_SQR_PRTHS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.RT_SQR_PRTHS, 0); + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchSQLParser.COMMA); + } else { + return this.getToken(OpenSearchSQLParser.COMMA, i); + } + } + public RR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.RR_BRACKET, 0)!; + } + public relevanceFieldAndWeight(): RelevanceFieldAndWeightContext[]; + public relevanceFieldAndWeight(i: number): RelevanceFieldAndWeightContext | null; + public relevanceFieldAndWeight(i?: number): RelevanceFieldAndWeightContext[] | RelevanceFieldAndWeightContext | null { + if (i === undefined) { + return this.getRuleContexts(RelevanceFieldAndWeightContext); + } + + return this.getRuleContext(i, RelevanceFieldAndWeightContext); + } + public relevanceQuery(): RelevanceQueryContext | null { + return this.getRuleContext(0, RelevanceQueryContext); + } + public relevanceArg(): RelevanceArgContext[]; + public relevanceArg(i: number): RelevanceArgContext | null; + public relevanceArg(i?: number): RelevanceArgContext[] | RelevanceArgContext | null { + if (i === undefined) { + return this.getRuleContexts(RelevanceArgContext); + } + + return this.getRuleContext(i, RelevanceArgContext); + } + public alternateMultiMatchQuery(): AlternateMultiMatchQueryContext | null { + return this.getRuleContext(0, AlternateMultiMatchQueryContext); + } + public alternateMultiMatchField(): AlternateMultiMatchFieldContext | null { + return this.getRuleContext(0, AlternateMultiMatchFieldContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_multiFieldRelevanceFunction; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitMultiFieldRelevanceFunction) { + return visitor.visitMultiFieldRelevanceFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class AltSingleFieldRelevanceFunctionContext extends antlr.ParserRuleContext { + public _field?: RelevanceFieldContext; + public _altSyntaxFunctionName?: AltSingleFieldRelevanceFunctionNameContext; + public _query?: RelevanceQueryContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public EQUAL_SYMBOL(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.EQUAL_SYMBOL, 0)!; + } + public LR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LR_BRACKET, 0)!; + } + public RR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.RR_BRACKET, 0)!; + } + public relevanceField(): RelevanceFieldContext { + return this.getRuleContext(0, RelevanceFieldContext)!; + } + public altSingleFieldRelevanceFunctionName(): AltSingleFieldRelevanceFunctionNameContext { + return this.getRuleContext(0, AltSingleFieldRelevanceFunctionNameContext)!; + } + public relevanceQuery(): RelevanceQueryContext { + return this.getRuleContext(0, RelevanceQueryContext)!; + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchSQLParser.COMMA); + } else { + return this.getToken(OpenSearchSQLParser.COMMA, i); + } + } + public relevanceArg(): RelevanceArgContext[]; + public relevanceArg(i: number): RelevanceArgContext | null; + public relevanceArg(i?: number): RelevanceArgContext[] | RelevanceArgContext | null { + if (i === undefined) { + return this.getRuleContexts(RelevanceArgContext); + } + + return this.getRuleContext(i, RelevanceArgContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_altSingleFieldRelevanceFunction; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitAltSingleFieldRelevanceFunction) { + return visitor.visitAltSingleFieldRelevanceFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class AltMultiFieldRelevanceFunctionContext extends antlr.ParserRuleContext { + public _field?: RelevanceFieldContext; + public _altSyntaxFunctionName?: AltMultiFieldRelevanceFunctionNameContext; + public _query?: RelevanceQueryContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public EQUAL_SYMBOL(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.EQUAL_SYMBOL, 0)!; + } + public LR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LR_BRACKET, 0)!; + } + public RR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.RR_BRACKET, 0)!; + } + public relevanceField(): RelevanceFieldContext { + return this.getRuleContext(0, RelevanceFieldContext)!; + } + public altMultiFieldRelevanceFunctionName(): AltMultiFieldRelevanceFunctionNameContext { + return this.getRuleContext(0, AltMultiFieldRelevanceFunctionNameContext)!; + } + public relevanceQuery(): RelevanceQueryContext { + return this.getRuleContext(0, RelevanceQueryContext)!; + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchSQLParser.COMMA); + } else { + return this.getToken(OpenSearchSQLParser.COMMA, i); + } + } + public relevanceArg(): RelevanceArgContext[]; + public relevanceArg(i: number): RelevanceArgContext | null; + public relevanceArg(i?: number): RelevanceArgContext[] | RelevanceArgContext | null { + if (i === undefined) { + return this.getRuleContexts(RelevanceArgContext); + } + + return this.getRuleContext(i, RelevanceArgContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_altMultiFieldRelevanceFunction; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitAltMultiFieldRelevanceFunction) { + return visitor.visitAltMultiFieldRelevanceFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ConvertedDataTypeContext extends antlr.ParserRuleContext { + public _typeName?: Token | null; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public DATE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DATE, 0); + } + public TIME(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.TIME, 0); + } + public TIMESTAMP(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.TIMESTAMP, 0); + } + public INT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.INT, 0); + } + public INTEGER(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.INTEGER, 0); + } + public DOUBLE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DOUBLE, 0); + } + public LONG(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.LONG, 0); + } + public FLOAT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.FLOAT, 0); + } + public STRING(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.STRING, 0); + } + public BOOLEAN(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.BOOLEAN, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_convertedDataType; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitConvertedDataType) { + return visitor.visitConvertedDataType(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class CaseFuncAlternativeContext extends antlr.ParserRuleContext { + public _condition?: FunctionArgContext; + public _consequent?: FunctionArgContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public WHEN(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.WHEN, 0)!; + } + public THEN(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.THEN, 0)!; + } + public functionArg(): FunctionArgContext[]; + public functionArg(i: number): FunctionArgContext | null; + public functionArg(i?: number): FunctionArgContext[] | FunctionArgContext | null { + if (i === undefined) { + return this.getRuleContexts(FunctionArgContext); + } + + return this.getRuleContext(i, FunctionArgContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_caseFuncAlternative; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitCaseFuncAlternative) { + return visitor.visitCaseFuncAlternative(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class AggregateFunctionContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_aggregateFunction; + } + public override copyFrom(ctx: AggregateFunctionContext): void { + super.copyFrom(ctx); + } +} +export class DistinctCountFunctionCallContext extends AggregateFunctionContext { + public constructor(ctx: AggregateFunctionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public COUNT(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.COUNT, 0)!; + } + public LR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LR_BRACKET, 0)!; + } + public DISTINCT(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.DISTINCT, 0)!; + } + public functionArg(): FunctionArgContext { + return this.getRuleContext(0, FunctionArgContext)!; + } + public RR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.RR_BRACKET, 0)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitDistinctCountFunctionCall) { + return visitor.visitDistinctCountFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class PercentileApproxFunctionCallContext extends AggregateFunctionContext { + public constructor(ctx: AggregateFunctionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public percentileApproxFunction(): PercentileApproxFunctionContext { + return this.getRuleContext(0, PercentileApproxFunctionContext)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitPercentileApproxFunctionCall) { + return visitor.visitPercentileApproxFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CountStarFunctionCallContext extends AggregateFunctionContext { + public constructor(ctx: AggregateFunctionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public COUNT(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.COUNT, 0)!; + } + public LR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LR_BRACKET, 0)!; + } + public STAR(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.STAR, 0)!; + } + public RR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.RR_BRACKET, 0)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitCountStarFunctionCall) { + return visitor.visitCountStarFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RegularAggregateFunctionCallContext extends AggregateFunctionContext { + public _functionName?: AggregationFunctionNameContext; + public constructor(ctx: AggregateFunctionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public LR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LR_BRACKET, 0)!; + } + public functionArg(): FunctionArgContext { + return this.getRuleContext(0, FunctionArgContext)!; + } + public RR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.RR_BRACKET, 0)!; + } + public aggregationFunctionName(): AggregationFunctionNameContext { + return this.getRuleContext(0, AggregationFunctionNameContext)!; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitRegularAggregateFunctionCall) { + return visitor.visitRegularAggregateFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PercentileApproxFunctionContext extends antlr.ParserRuleContext { + public _aggField?: FunctionArgContext; + public _percent?: NumericLiteralContext; + public _compression?: NumericLiteralContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public LR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LR_BRACKET, 0)!; + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchSQLParser.COMMA); + } else { + return this.getToken(OpenSearchSQLParser.COMMA, i); + } + } + public RR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.RR_BRACKET, 0)!; + } + public PERCENTILE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.PERCENTILE, 0); + } + public PERCENTILE_APPROX(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.PERCENTILE_APPROX, 0); + } + public functionArg(): FunctionArgContext { + return this.getRuleContext(0, FunctionArgContext)!; + } + public numericLiteral(): NumericLiteralContext[]; + public numericLiteral(i: number): NumericLiteralContext | null; + public numericLiteral(i?: number): NumericLiteralContext[] | NumericLiteralContext | null { + if (i === undefined) { + return this.getRuleContexts(NumericLiteralContext); + } + + return this.getRuleContext(i, NumericLiteralContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_percentileApproxFunction; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitPercentileApproxFunction) { + return visitor.visitPercentileApproxFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FilterClauseContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public FILTER(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.FILTER, 0)!; + } + public LR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.LR_BRACKET, 0)!; + } + public WHERE(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.WHERE, 0)!; + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public RR_BRACKET(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.RR_BRACKET, 0)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_filterClause; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitFilterClause) { + return visitor.visitFilterClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class AggregationFunctionNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public AVG(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.AVG, 0); + } + public COUNT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.COUNT, 0); + } + public SUM(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.SUM, 0); + } + public MIN(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MIN, 0); + } + public MAX(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MAX, 0); + } + public VAR_POP(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.VAR_POP, 0); + } + public VAR_SAMP(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.VAR_SAMP, 0); + } + public VARIANCE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.VARIANCE, 0); + } + public STD(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.STD, 0); + } + public STDDEV(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.STDDEV, 0); + } + public STDDEV_POP(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.STDDEV_POP, 0); + } + public STDDEV_SAMP(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.STDDEV_SAMP, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_aggregationFunctionName; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitAggregationFunctionName) { + return visitor.visitAggregationFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class MathematicalFunctionNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public ABS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.ABS, 0); + } + public CBRT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.CBRT, 0); + } + public CEIL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.CEIL, 0); + } + public CEILING(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.CEILING, 0); + } + public CONV(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.CONV, 0); + } + public CRC32(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.CRC32, 0); + } + public E(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.E, 0); + } + public EXP(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.EXP, 0); + } + public EXPM1(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.EXPM1, 0); + } + public FLOOR(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.FLOOR, 0); + } + public LN(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.LN, 0); + } + public LOG(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.LOG, 0); + } + public LOG10(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.LOG10, 0); + } + public LOG2(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.LOG2, 0); + } + public MOD(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MOD, 0); + } + public PI(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.PI, 0); + } + public POW(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.POW, 0); + } + public POWER(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.POWER, 0); + } + public RAND(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.RAND, 0); + } + public RINT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.RINT, 0); + } + public ROUND(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.ROUND, 0); + } + public SIGN(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.SIGN, 0); + } + public SIGNUM(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.SIGNUM, 0); + } + public SQRT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.SQRT, 0); + } + public TRUNCATE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.TRUNCATE, 0); + } + public trigonometricFunctionName(): TrigonometricFunctionNameContext | null { + return this.getRuleContext(0, TrigonometricFunctionNameContext); + } + public arithmeticFunctionName(): ArithmeticFunctionNameContext | null { + return this.getRuleContext(0, ArithmeticFunctionNameContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_mathematicalFunctionName; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitMathematicalFunctionName) { + return visitor.visitMathematicalFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TrigonometricFunctionNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public ACOS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.ACOS, 0); + } + public ASIN(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.ASIN, 0); + } + public ATAN(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.ATAN, 0); + } + public ATAN2(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.ATAN2, 0); + } + public COS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.COS, 0); + } + public COSH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.COSH, 0); + } + public COT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.COT, 0); + } + public DEGREES(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DEGREES, 0); + } + public RADIANS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.RADIANS, 0); + } + public SIN(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.SIN, 0); + } + public SINH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.SINH, 0); + } + public TAN(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.TAN, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_trigonometricFunctionName; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitTrigonometricFunctionName) { + return visitor.visitTrigonometricFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ArithmeticFunctionNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public ADD(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.ADD, 0); + } + public SUBTRACT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.SUBTRACT, 0); + } + public MULTIPLY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MULTIPLY, 0); + } + public DIVIDE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DIVIDE, 0); + } + public MOD(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MOD, 0); + } + public MODULUS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MODULUS, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_arithmeticFunctionName; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitArithmeticFunctionName) { + return visitor.visitArithmeticFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DateTimeFunctionNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public datetimeConstantLiteral(): DatetimeConstantLiteralContext | null { + return this.getRuleContext(0, DatetimeConstantLiteralContext); + } + public ADDDATE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.ADDDATE, 0); + } + public ADDTIME(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.ADDTIME, 0); + } + public CONVERT_TZ(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.CONVERT_TZ, 0); + } + public CURDATE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.CURDATE, 0); + } + public CURTIME(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.CURTIME, 0); + } + public DATE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DATE, 0); + } + public DATE_ADD(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DATE_ADD, 0); + } + public DATE_FORMAT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DATE_FORMAT, 0); + } + public DATE_SUB(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DATE_SUB, 0); + } + public DATEDIFF(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DATEDIFF, 0); + } + public DATETIME(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DATETIME, 0); + } + public DAY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DAY, 0); + } + public DAYNAME(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DAYNAME, 0); + } + public DAYOFMONTH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DAYOFMONTH, 0); + } + public DAY_OF_MONTH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DAY_OF_MONTH, 0); + } + public DAYOFWEEK(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DAYOFWEEK, 0); + } + public DAYOFYEAR(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DAYOFYEAR, 0); + } + public DAY_OF_YEAR(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DAY_OF_YEAR, 0); + } + public DAY_OF_WEEK(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DAY_OF_WEEK, 0); + } + public FROM_DAYS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.FROM_DAYS, 0); + } + public FROM_UNIXTIME(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.FROM_UNIXTIME, 0); + } + public HOUR(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.HOUR, 0); + } + public HOUR_OF_DAY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.HOUR_OF_DAY, 0); + } + public LAST_DAY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.LAST_DAY, 0); + } + public MAKEDATE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MAKEDATE, 0); + } + public MAKETIME(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MAKETIME, 0); + } + public MICROSECOND(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MICROSECOND, 0); + } + public MINUTE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MINUTE, 0); + } + public MINUTE_OF_DAY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MINUTE_OF_DAY, 0); + } + public MINUTE_OF_HOUR(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MINUTE_OF_HOUR, 0); + } + public MONTH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MONTH, 0); + } + public MONTHNAME(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MONTHNAME, 0); + } + public MONTH_OF_YEAR(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MONTH_OF_YEAR, 0); + } + public NOW(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.NOW, 0); + } + public PERIOD_ADD(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.PERIOD_ADD, 0); + } + public PERIOD_DIFF(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.PERIOD_DIFF, 0); + } + public QUARTER(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.QUARTER, 0); + } + public SEC_TO_TIME(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.SEC_TO_TIME, 0); + } + public SECOND(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.SECOND, 0); + } + public SECOND_OF_MINUTE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.SECOND_OF_MINUTE, 0); + } + public SUBDATE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.SUBDATE, 0); + } + public SUBTIME(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.SUBTIME, 0); + } + public SYSDATE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.SYSDATE, 0); + } + public STR_TO_DATE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.STR_TO_DATE, 0); + } + public TIME(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.TIME, 0); + } + public TIME_FORMAT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.TIME_FORMAT, 0); + } + public TIME_TO_SEC(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.TIME_TO_SEC, 0); + } + public TIMEDIFF(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.TIMEDIFF, 0); + } + public TIMESTAMP(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.TIMESTAMP, 0); + } + public TO_DAYS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.TO_DAYS, 0); + } + public TO_SECONDS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.TO_SECONDS, 0); + } + public UNIX_TIMESTAMP(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.UNIX_TIMESTAMP, 0); + } + public WEEK(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.WEEK, 0); + } + public WEEKDAY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.WEEKDAY, 0); + } + public WEEK_OF_YEAR(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.WEEK_OF_YEAR, 0); + } + public WEEKOFYEAR(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.WEEKOFYEAR, 0); + } + public YEAR(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.YEAR, 0); + } + public YEARWEEK(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.YEARWEEK, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_dateTimeFunctionName; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitDateTimeFunctionName) { + return visitor.visitDateTimeFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TextFunctionNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public SUBSTR(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.SUBSTR, 0); + } + public SUBSTRING(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.SUBSTRING, 0); + } + public TRIM(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.TRIM, 0); + } + public LTRIM(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.LTRIM, 0); + } + public RTRIM(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.RTRIM, 0); + } + public LOWER(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.LOWER, 0); + } + public UPPER(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.UPPER, 0); + } + public CONCAT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.CONCAT, 0); + } + public CONCAT_WS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.CONCAT_WS, 0); + } + public LENGTH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.LENGTH, 0); + } + public STRCMP(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.STRCMP, 0); + } + public RIGHT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.RIGHT, 0); + } + public LEFT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.LEFT, 0); + } + public ASCII(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.ASCII, 0); + } + public LOCATE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.LOCATE, 0); + } + public REPLACE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.REPLACE, 0); + } + public REVERSE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.REVERSE, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_textFunctionName; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitTextFunctionName) { + return visitor.visitTextFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FlowControlFunctionNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public IF(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.IF, 0); + } + public IFNULL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.IFNULL, 0); + } + public NULLIF(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.NULLIF, 0); + } + public ISNULL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.ISNULL, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_flowControlFunctionName; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitFlowControlFunctionName) { + return visitor.visitFlowControlFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class NoFieldRelevanceFunctionNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public QUERY(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.QUERY, 0)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_noFieldRelevanceFunctionName; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitNoFieldRelevanceFunctionName) { + return visitor.visitNoFieldRelevanceFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SystemFunctionNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public TYPEOF(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.TYPEOF, 0)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_systemFunctionName; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitSystemFunctionName) { + return visitor.visitSystemFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class NestedFunctionNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public NESTED(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.NESTED, 0)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_nestedFunctionName; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitNestedFunctionName) { + return visitor.visitNestedFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ScoreRelevanceFunctionNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public SCORE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.SCORE, 0); + } + public SCOREQUERY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.SCOREQUERY, 0); + } + public SCORE_QUERY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.SCORE_QUERY, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_scoreRelevanceFunctionName; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitScoreRelevanceFunctionName) { + return visitor.visitScoreRelevanceFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SingleFieldRelevanceFunctionNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public MATCH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MATCH, 0); + } + public MATCHQUERY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MATCHQUERY, 0); + } + public MATCH_QUERY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MATCH_QUERY, 0); + } + public MATCH_PHRASE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MATCH_PHRASE, 0); + } + public MATCHPHRASE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MATCHPHRASE, 0); + } + public MATCHPHRASEQUERY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MATCHPHRASEQUERY, 0); + } + public MATCH_BOOL_PREFIX(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MATCH_BOOL_PREFIX, 0); + } + public MATCH_PHRASE_PREFIX(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MATCH_PHRASE_PREFIX, 0); + } + public WILDCARD_QUERY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.WILDCARD_QUERY, 0); + } + public WILDCARDQUERY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.WILDCARDQUERY, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_singleFieldRelevanceFunctionName; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitSingleFieldRelevanceFunctionName) { + return visitor.visitSingleFieldRelevanceFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class MultiFieldRelevanceFunctionNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public MULTI_MATCH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MULTI_MATCH, 0); + } + public MULTIMATCH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MULTIMATCH, 0); + } + public MULTIMATCHQUERY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MULTIMATCHQUERY, 0); + } + public SIMPLE_QUERY_STRING(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.SIMPLE_QUERY_STRING, 0); + } + public QUERY_STRING(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.QUERY_STRING, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_multiFieldRelevanceFunctionName; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitMultiFieldRelevanceFunctionName) { + return visitor.visitMultiFieldRelevanceFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class AltSingleFieldRelevanceFunctionNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public MATCH_QUERY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MATCH_QUERY, 0); + } + public MATCHQUERY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MATCHQUERY, 0); + } + public MATCH_PHRASE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MATCH_PHRASE, 0); + } + public MATCHPHRASE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MATCHPHRASE, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_altSingleFieldRelevanceFunctionName; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitAltSingleFieldRelevanceFunctionName) { + return visitor.visitAltSingleFieldRelevanceFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class AltMultiFieldRelevanceFunctionNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public MULTI_MATCH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MULTI_MATCH, 0); + } + public MULTIMATCH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MULTIMATCH, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_altMultiFieldRelevanceFunctionName; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitAltMultiFieldRelevanceFunctionName) { + return visitor.visitAltMultiFieldRelevanceFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FunctionArgsContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public functionArg(): FunctionArgContext[]; + public functionArg(i: number): FunctionArgContext | null; + public functionArg(i?: number): FunctionArgContext[] | FunctionArgContext | null { + if (i === undefined) { + return this.getRuleContexts(FunctionArgContext); + } + + return this.getRuleContext(i, FunctionArgContext); + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchSQLParser.COMMA); + } else { + return this.getToken(OpenSearchSQLParser.COMMA, i); + } + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_functionArgs; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitFunctionArgs) { + return visitor.visitFunctionArgs(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FunctionArgContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_functionArg; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitFunctionArg) { + return visitor.visitFunctionArg(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RelevanceArgContext extends antlr.ParserRuleContext { + public _argName?: StringLiteralContext; + public _argVal?: RelevanceArgValueContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public relevanceArgName(): RelevanceArgNameContext | null { + return this.getRuleContext(0, RelevanceArgNameContext); + } + public EQUAL_SYMBOL(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.EQUAL_SYMBOL, 0)!; + } + public relevanceArgValue(): RelevanceArgValueContext { + return this.getRuleContext(0, RelevanceArgValueContext)!; + } + public stringLiteral(): StringLiteralContext | null { + return this.getRuleContext(0, StringLiteralContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_relevanceArg; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitRelevanceArg) { + return visitor.visitRelevanceArg(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class HighlightArgContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public highlightArgName(): HighlightArgNameContext { + return this.getRuleContext(0, HighlightArgNameContext)!; + } + public EQUAL_SYMBOL(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.EQUAL_SYMBOL, 0)!; + } + public highlightArgValue(): HighlightArgValueContext { + return this.getRuleContext(0, HighlightArgValueContext)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_highlightArg; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitHighlightArg) { + return visitor.visitHighlightArg(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RelevanceArgNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public ALLOW_LEADING_WILDCARD(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.ALLOW_LEADING_WILDCARD, 0); + } + public ANALYZER(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.ANALYZER, 0); + } + public ANALYZE_WILDCARD(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.ANALYZE_WILDCARD, 0); + } + public AUTO_GENERATE_SYNONYMS_PHRASE_QUERY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.AUTO_GENERATE_SYNONYMS_PHRASE_QUERY, 0); + } + public BOOST(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.BOOST, 0); + } + public CASE_INSENSITIVE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.CASE_INSENSITIVE, 0); + } + public CUTOFF_FREQUENCY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.CUTOFF_FREQUENCY, 0); + } + public DEFAULT_FIELD(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DEFAULT_FIELD, 0); + } + public DEFAULT_OPERATOR(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DEFAULT_OPERATOR, 0); + } + public ENABLE_POSITION_INCREMENTS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.ENABLE_POSITION_INCREMENTS, 0); + } + public ESCAPE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.ESCAPE, 0); + } + public FIELDS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.FIELDS, 0); + } + public FLAGS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.FLAGS, 0); + } + public FUZZINESS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.FUZZINESS, 0); + } + public FUZZY_MAX_EXPANSIONS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.FUZZY_MAX_EXPANSIONS, 0); + } + public FUZZY_PREFIX_LENGTH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.FUZZY_PREFIX_LENGTH, 0); + } + public FUZZY_REWRITE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.FUZZY_REWRITE, 0); + } + public FUZZY_TRANSPOSITIONS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.FUZZY_TRANSPOSITIONS, 0); + } + public LENIENT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.LENIENT, 0); + } + public LOW_FREQ_OPERATOR(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.LOW_FREQ_OPERATOR, 0); + } + public MAX_DETERMINIZED_STATES(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MAX_DETERMINIZED_STATES, 0); + } + public MAX_EXPANSIONS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MAX_EXPANSIONS, 0); + } + public MINIMUM_SHOULD_MATCH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MINIMUM_SHOULD_MATCH, 0); + } + public OPERATOR(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.OPERATOR, 0); + } + public PHRASE_SLOP(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.PHRASE_SLOP, 0); + } + public PREFIX_LENGTH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.PREFIX_LENGTH, 0); + } + public QUOTE_ANALYZER(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.QUOTE_ANALYZER, 0); + } + public QUOTE_FIELD_SUFFIX(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.QUOTE_FIELD_SUFFIX, 0); + } + public REWRITE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.REWRITE, 0); + } + public SLOP(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.SLOP, 0); + } + public TIE_BREAKER(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.TIE_BREAKER, 0); + } + public TIME_ZONE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.TIME_ZONE, 0); + } + public TYPE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.TYPE, 0); + } + public ZERO_TERMS_QUERY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.ZERO_TERMS_QUERY, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_relevanceArgName; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitRelevanceArgName) { + return visitor.visitRelevanceArgName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class HighlightArgNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public HIGHLIGHT_POST_TAGS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.HIGHLIGHT_POST_TAGS, 0); + } + public HIGHLIGHT_PRE_TAGS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.HIGHLIGHT_PRE_TAGS, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_highlightArgName; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitHighlightArgName) { + return visitor.visitHighlightArgName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RelevanceFieldAndWeightContext extends antlr.ParserRuleContext { + public _field?: RelevanceFieldContext; + public _weight?: RelevanceFieldWeightContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public relevanceField(): RelevanceFieldContext { + return this.getRuleContext(0, RelevanceFieldContext)!; + } + public relevanceFieldWeight(): RelevanceFieldWeightContext | null { + return this.getRuleContext(0, RelevanceFieldWeightContext); + } + public BIT_XOR_OP(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.BIT_XOR_OP, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_relevanceFieldAndWeight; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitRelevanceFieldAndWeight) { + return visitor.visitRelevanceFieldAndWeight(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RelevanceFieldWeightContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public numericLiteral(): NumericLiteralContext { + return this.getRuleContext(0, NumericLiteralContext)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_relevanceFieldWeight; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitRelevanceFieldWeight) { + return visitor.visitRelevanceFieldWeight(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RelevanceFieldContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public qualifiedName(): QualifiedNameContext | null { + return this.getRuleContext(0, QualifiedNameContext); + } + public stringLiteral(): StringLiteralContext | null { + return this.getRuleContext(0, StringLiteralContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_relevanceField; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitRelevanceField) { + return visitor.visitRelevanceField(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RelevanceQueryContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public relevanceArgValue(): RelevanceArgValueContext { + return this.getRuleContext(0, RelevanceArgValueContext)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_relevanceQuery; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitRelevanceQuery) { + return visitor.visitRelevanceQuery(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RelevanceArgValueContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public qualifiedName(): QualifiedNameContext | null { + return this.getRuleContext(0, QualifiedNameContext); + } + public constant(): ConstantContext | null { + return this.getRuleContext(0, ConstantContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_relevanceArgValue; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitRelevanceArgValue) { + return visitor.visitRelevanceArgValue(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class HighlightArgValueContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public stringLiteral(): StringLiteralContext { + return this.getRuleContext(0, StringLiteralContext)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_highlightArgValue; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitHighlightArgValue) { + return visitor.visitHighlightArgValue(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class AlternateMultiMatchArgNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public FIELDS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.FIELDS, 0); + } + public QUERY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.QUERY, 0); + } + public stringLiteral(): StringLiteralContext | null { + return this.getRuleContext(0, StringLiteralContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_alternateMultiMatchArgName; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitAlternateMultiMatchArgName) { + return visitor.visitAlternateMultiMatchArgName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class AlternateMultiMatchQueryContext extends antlr.ParserRuleContext { + public _argName?: AlternateMultiMatchArgNameContext; + public _argVal?: RelevanceArgValueContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public EQUAL_SYMBOL(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.EQUAL_SYMBOL, 0)!; + } + public alternateMultiMatchArgName(): AlternateMultiMatchArgNameContext { + return this.getRuleContext(0, AlternateMultiMatchArgNameContext)!; + } + public relevanceArgValue(): RelevanceArgValueContext { + return this.getRuleContext(0, RelevanceArgValueContext)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_alternateMultiMatchQuery; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitAlternateMultiMatchQuery) { + return visitor.visitAlternateMultiMatchQuery(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class AlternateMultiMatchFieldContext extends antlr.ParserRuleContext { + public _argName?: AlternateMultiMatchArgNameContext; + public _argVal?: RelevanceArgValueContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public EQUAL_SYMBOL(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.EQUAL_SYMBOL, 0)!; + } + public alternateMultiMatchArgName(): AlternateMultiMatchArgNameContext { + return this.getRuleContext(0, AlternateMultiMatchArgNameContext)!; + } + public relevanceArgValue(): RelevanceArgValueContext { + return this.getRuleContext(0, RelevanceArgValueContext)!; + } + public LT_SQR_PRTHS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.LT_SQR_PRTHS, 0); + } + public RT_SQR_PRTHS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.RT_SQR_PRTHS, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_alternateMultiMatchField; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitAlternateMultiMatchField) { + return visitor.visitAlternateMultiMatchField(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TableNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_tableName; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitTableName) { + return visitor.visitTableName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ColumnNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_columnName; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitColumnName) { + return visitor.visitColumnName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class AllTupleFieldsContext extends antlr.ParserRuleContext { + public _path?: QualifiedNameContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public DOT(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.DOT, 0)!; + } + public STAR(): antlr.TerminalNode { + return this.getToken(OpenSearchSQLParser.STAR, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_allTupleFields; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitAllTupleFields) { + return visitor.visitAllTupleFields(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class AliasContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public ident(): IdentContext { + return this.getRuleContext(0, IdentContext)!; + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_alias; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitAlias) { + return visitor.visitAlias(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class QualifiedNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public ident(): IdentContext[]; + public ident(i: number): IdentContext | null; + public ident(i?: number): IdentContext[] | IdentContext | null { + if (i === undefined) { + return this.getRuleContexts(IdentContext); + } + + return this.getRuleContext(i, IdentContext); + } + public DOT(): antlr.TerminalNode[]; + public DOT(i: number): antlr.TerminalNode | null; + public DOT(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchSQLParser.DOT); + } else { + return this.getToken(OpenSearchSQLParser.DOT, i); + } + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_qualifiedName; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitQualifiedName) { + return visitor.visitQualifiedName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class IdentContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public ID(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.ID, 0); + } + public DOT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.DOT, 0); + } + public BACKTICK_QUOTE_ID(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.BACKTICK_QUOTE_ID, 0); + } + public keywordsCanBeId(): KeywordsCanBeIdContext | null { + return this.getRuleContext(0, KeywordsCanBeIdContext); + } + public scalarFunctionName(): ScalarFunctionNameContext | null { + return this.getRuleContext(0, ScalarFunctionNameContext); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_ident; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitIdent) { + return visitor.visitIdent(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class KeywordsCanBeIdContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public FULL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.FULL, 0); + } + public FIELD(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.FIELD, 0); + } + public D(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.D, 0); + } + public T(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.T, 0); + } + public TS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.TS, 0); + } + public COUNT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.COUNT, 0); + } + public SUM(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.SUM, 0); + } + public AVG(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.AVG, 0); + } + public MAX(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MAX, 0); + } + public MIN(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.MIN, 0); + } + public FIRST(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.FIRST, 0); + } + public LAST(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.LAST, 0); + } + public TYPE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchSQLParser.TYPE, 0); + } + public override get ruleIndex(): number { + return OpenSearchSQLParser.RULE_keywordsCanBeId; + } + public override accept(visitor: OpenSearchSQLParserVisitor): Result | null { + if (visitor.visitKeywordsCanBeId) { + return visitor.visitKeywordsCanBeId(this); + } else { + return visitor.visitChildren(this); + } + } +} diff --git a/src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLParserVisitor.ts b/src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLParserVisitor.ts new file mode 100644 index 000000000000..a6e7dcc4bf4a --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/.generated/OpenSearchSQLParserVisitor.ts @@ -0,0 +1,1121 @@ +// Generated from ./src/plugins/data/public/antlr/opensearch_sql/grammar/OpenSearchSQLParser.g4 by ANTLR 4.13.1 + +import { AbstractParseTreeVisitor } from "antlr4ng"; + + +import { RootContext } from "./OpenSearchSQLParser.js"; +import { SqlStatementContext } from "./OpenSearchSQLParser.js"; +import { DmlStatementContext } from "./OpenSearchSQLParser.js"; +import { SimpleSelectContext } from "./OpenSearchSQLParser.js"; +import { AdminStatementContext } from "./OpenSearchSQLParser.js"; +import { ShowStatementContext } from "./OpenSearchSQLParser.js"; +import { DescribeStatementContext } from "./OpenSearchSQLParser.js"; +import { ColumnFilterContext } from "./OpenSearchSQLParser.js"; +import { TableFilterContext } from "./OpenSearchSQLParser.js"; +import { ShowDescribePatternContext } from "./OpenSearchSQLParser.js"; +import { CompatibleIDContext } from "./OpenSearchSQLParser.js"; +import { QuerySpecificationContext } from "./OpenSearchSQLParser.js"; +import { SelectClauseContext } from "./OpenSearchSQLParser.js"; +import { SelectSpecContext } from "./OpenSearchSQLParser.js"; +import { SelectElementsContext } from "./OpenSearchSQLParser.js"; +import { SelectElementContext } from "./OpenSearchSQLParser.js"; +import { FromClauseContext } from "./OpenSearchSQLParser.js"; +import { TableAsRelationContext } from "./OpenSearchSQLParser.js"; +import { SubqueryAsRelationContext } from "./OpenSearchSQLParser.js"; +import { WhereClauseContext } from "./OpenSearchSQLParser.js"; +import { GroupByClauseContext } from "./OpenSearchSQLParser.js"; +import { GroupByElementsContext } from "./OpenSearchSQLParser.js"; +import { GroupByElementContext } from "./OpenSearchSQLParser.js"; +import { HavingClauseContext } from "./OpenSearchSQLParser.js"; +import { OrderByClauseContext } from "./OpenSearchSQLParser.js"; +import { OrderByElementContext } from "./OpenSearchSQLParser.js"; +import { LimitClauseContext } from "./OpenSearchSQLParser.js"; +import { WindowFunctionClauseContext } from "./OpenSearchSQLParser.js"; +import { ScalarWindowFunctionContext } from "./OpenSearchSQLParser.js"; +import { AggregateWindowFunctionContext } from "./OpenSearchSQLParser.js"; +import { OverClauseContext } from "./OpenSearchSQLParser.js"; +import { PartitionByClauseContext } from "./OpenSearchSQLParser.js"; +import { StringContext } from "./OpenSearchSQLParser.js"; +import { SignedDecimalContext } from "./OpenSearchSQLParser.js"; +import { SignedRealContext } from "./OpenSearchSQLParser.js"; +import { BooleanContext } from "./OpenSearchSQLParser.js"; +import { DatetimeContext } from "./OpenSearchSQLParser.js"; +import { IntervalContext } from "./OpenSearchSQLParser.js"; +import { NullContext } from "./OpenSearchSQLParser.js"; +import { DecimalLiteralContext } from "./OpenSearchSQLParser.js"; +import { NumericLiteralContext } from "./OpenSearchSQLParser.js"; +import { StringLiteralContext } from "./OpenSearchSQLParser.js"; +import { BooleanLiteralContext } from "./OpenSearchSQLParser.js"; +import { RealLiteralContext } from "./OpenSearchSQLParser.js"; +import { SignContext } from "./OpenSearchSQLParser.js"; +import { NullLiteralContext } from "./OpenSearchSQLParser.js"; +import { DatetimeLiteralContext } from "./OpenSearchSQLParser.js"; +import { DateLiteralContext } from "./OpenSearchSQLParser.js"; +import { TimeLiteralContext } from "./OpenSearchSQLParser.js"; +import { TimestampLiteralContext } from "./OpenSearchSQLParser.js"; +import { DatetimeConstantLiteralContext } from "./OpenSearchSQLParser.js"; +import { IntervalLiteralContext } from "./OpenSearchSQLParser.js"; +import { IntervalUnitContext } from "./OpenSearchSQLParser.js"; +import { OrExpressionContext } from "./OpenSearchSQLParser.js"; +import { AndExpressionContext } from "./OpenSearchSQLParser.js"; +import { NotExpressionContext } from "./OpenSearchSQLParser.js"; +import { PredicateExpressionContext } from "./OpenSearchSQLParser.js"; +import { ExpressionAtomPredicateContext } from "./OpenSearchSQLParser.js"; +import { BinaryComparisonPredicateContext } from "./OpenSearchSQLParser.js"; +import { InPredicateContext } from "./OpenSearchSQLParser.js"; +import { BetweenPredicateContext } from "./OpenSearchSQLParser.js"; +import { IsNullPredicateContext } from "./OpenSearchSQLParser.js"; +import { LikePredicateContext } from "./OpenSearchSQLParser.js"; +import { RegexpPredicateContext } from "./OpenSearchSQLParser.js"; +import { ExpressionsContext } from "./OpenSearchSQLParser.js"; +import { ConstantExpressionAtomContext } from "./OpenSearchSQLParser.js"; +import { FunctionCallExpressionAtomContext } from "./OpenSearchSQLParser.js"; +import { FullColumnNameExpressionAtomContext } from "./OpenSearchSQLParser.js"; +import { NestedExpressionAtomContext } from "./OpenSearchSQLParser.js"; +import { MathExpressionAtomContext } from "./OpenSearchSQLParser.js"; +import { ComparisonOperatorContext } from "./OpenSearchSQLParser.js"; +import { NullNotnullContext } from "./OpenSearchSQLParser.js"; +import { NestedAllFunctionCallContext } from "./OpenSearchSQLParser.js"; +import { ScalarFunctionCallContext } from "./OpenSearchSQLParser.js"; +import { SpecificFunctionCallContext } from "./OpenSearchSQLParser.js"; +import { WindowFunctionCallContext } from "./OpenSearchSQLParser.js"; +import { AggregateFunctionCallContext } from "./OpenSearchSQLParser.js"; +import { FilteredAggregationFunctionCallContext } from "./OpenSearchSQLParser.js"; +import { ScoreRelevanceFunctionCallContext } from "./OpenSearchSQLParser.js"; +import { RelevanceFunctionCallContext } from "./OpenSearchSQLParser.js"; +import { HighlightFunctionCallContext } from "./OpenSearchSQLParser.js"; +import { PositionFunctionCallContext } from "./OpenSearchSQLParser.js"; +import { ExtractFunctionCallContext } from "./OpenSearchSQLParser.js"; +import { GetFormatFunctionCallContext } from "./OpenSearchSQLParser.js"; +import { TimestampFunctionCallContext } from "./OpenSearchSQLParser.js"; +import { TimestampFunctionContext } from "./OpenSearchSQLParser.js"; +import { TimestampFunctionNameContext } from "./OpenSearchSQLParser.js"; +import { GetFormatFunctionContext } from "./OpenSearchSQLParser.js"; +import { GetFormatTypeContext } from "./OpenSearchSQLParser.js"; +import { ExtractFunctionContext } from "./OpenSearchSQLParser.js"; +import { SimpleDateTimePartContext } from "./OpenSearchSQLParser.js"; +import { ComplexDateTimePartContext } from "./OpenSearchSQLParser.js"; +import { DatetimePartContext } from "./OpenSearchSQLParser.js"; +import { HighlightFunctionContext } from "./OpenSearchSQLParser.js"; +import { PositionFunctionContext } from "./OpenSearchSQLParser.js"; +import { MatchQueryAltSyntaxFunctionContext } from "./OpenSearchSQLParser.js"; +import { ScalarFunctionNameContext } from "./OpenSearchSQLParser.js"; +import { CaseFunctionCallContext } from "./OpenSearchSQLParser.js"; +import { DataTypeFunctionCallContext } from "./OpenSearchSQLParser.js"; +import { RelevanceFunctionContext } from "./OpenSearchSQLParser.js"; +import { ScoreRelevanceFunctionContext } from "./OpenSearchSQLParser.js"; +import { NoFieldRelevanceFunctionContext } from "./OpenSearchSQLParser.js"; +import { SingleFieldRelevanceFunctionContext } from "./OpenSearchSQLParser.js"; +import { MultiFieldRelevanceFunctionContext } from "./OpenSearchSQLParser.js"; +import { AltSingleFieldRelevanceFunctionContext } from "./OpenSearchSQLParser.js"; +import { AltMultiFieldRelevanceFunctionContext } from "./OpenSearchSQLParser.js"; +import { ConvertedDataTypeContext } from "./OpenSearchSQLParser.js"; +import { CaseFuncAlternativeContext } from "./OpenSearchSQLParser.js"; +import { RegularAggregateFunctionCallContext } from "./OpenSearchSQLParser.js"; +import { CountStarFunctionCallContext } from "./OpenSearchSQLParser.js"; +import { DistinctCountFunctionCallContext } from "./OpenSearchSQLParser.js"; +import { PercentileApproxFunctionCallContext } from "./OpenSearchSQLParser.js"; +import { PercentileApproxFunctionContext } from "./OpenSearchSQLParser.js"; +import { FilterClauseContext } from "./OpenSearchSQLParser.js"; +import { AggregationFunctionNameContext } from "./OpenSearchSQLParser.js"; +import { MathematicalFunctionNameContext } from "./OpenSearchSQLParser.js"; +import { TrigonometricFunctionNameContext } from "./OpenSearchSQLParser.js"; +import { ArithmeticFunctionNameContext } from "./OpenSearchSQLParser.js"; +import { DateTimeFunctionNameContext } from "./OpenSearchSQLParser.js"; +import { TextFunctionNameContext } from "./OpenSearchSQLParser.js"; +import { FlowControlFunctionNameContext } from "./OpenSearchSQLParser.js"; +import { NoFieldRelevanceFunctionNameContext } from "./OpenSearchSQLParser.js"; +import { SystemFunctionNameContext } from "./OpenSearchSQLParser.js"; +import { NestedFunctionNameContext } from "./OpenSearchSQLParser.js"; +import { ScoreRelevanceFunctionNameContext } from "./OpenSearchSQLParser.js"; +import { SingleFieldRelevanceFunctionNameContext } from "./OpenSearchSQLParser.js"; +import { MultiFieldRelevanceFunctionNameContext } from "./OpenSearchSQLParser.js"; +import { AltSingleFieldRelevanceFunctionNameContext } from "./OpenSearchSQLParser.js"; +import { AltMultiFieldRelevanceFunctionNameContext } from "./OpenSearchSQLParser.js"; +import { FunctionArgsContext } from "./OpenSearchSQLParser.js"; +import { FunctionArgContext } from "./OpenSearchSQLParser.js"; +import { RelevanceArgContext } from "./OpenSearchSQLParser.js"; +import { HighlightArgContext } from "./OpenSearchSQLParser.js"; +import { RelevanceArgNameContext } from "./OpenSearchSQLParser.js"; +import { HighlightArgNameContext } from "./OpenSearchSQLParser.js"; +import { RelevanceFieldAndWeightContext } from "./OpenSearchSQLParser.js"; +import { RelevanceFieldWeightContext } from "./OpenSearchSQLParser.js"; +import { RelevanceFieldContext } from "./OpenSearchSQLParser.js"; +import { RelevanceQueryContext } from "./OpenSearchSQLParser.js"; +import { RelevanceArgValueContext } from "./OpenSearchSQLParser.js"; +import { HighlightArgValueContext } from "./OpenSearchSQLParser.js"; +import { AlternateMultiMatchArgNameContext } from "./OpenSearchSQLParser.js"; +import { AlternateMultiMatchQueryContext } from "./OpenSearchSQLParser.js"; +import { AlternateMultiMatchFieldContext } from "./OpenSearchSQLParser.js"; +import { TableNameContext } from "./OpenSearchSQLParser.js"; +import { ColumnNameContext } from "./OpenSearchSQLParser.js"; +import { AllTupleFieldsContext } from "./OpenSearchSQLParser.js"; +import { AliasContext } from "./OpenSearchSQLParser.js"; +import { QualifiedNameContext } from "./OpenSearchSQLParser.js"; +import { IdentContext } from "./OpenSearchSQLParser.js"; +import { KeywordsCanBeIdContext } from "./OpenSearchSQLParser.js"; + + +/** + * This interface defines a complete generic visitor for a parse tree produced + * by `OpenSearchSQLParser`. + * + * @param The return type of the visit operation. Use `void` for + * operations with no return type. + */ +export class OpenSearchSQLParserVisitor extends AbstractParseTreeVisitor { + /** + * Visit a parse tree produced by `OpenSearchSQLParser.root`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRoot?: (ctx: RootContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.sqlStatement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSqlStatement?: (ctx: SqlStatementContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.dmlStatement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDmlStatement?: (ctx: DmlStatementContext) => Result; + /** + * Visit a parse tree produced by the `simpleSelect` + * labeled alternative in `OpenSearchSQLParser.selectStatement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSimpleSelect?: (ctx: SimpleSelectContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.adminStatement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAdminStatement?: (ctx: AdminStatementContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.showStatement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowStatement?: (ctx: ShowStatementContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.describeStatement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDescribeStatement?: (ctx: DescribeStatementContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.columnFilter`. + * @param ctx the parse tree + * @return the visitor result + */ + visitColumnFilter?: (ctx: ColumnFilterContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.tableFilter`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTableFilter?: (ctx: TableFilterContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.showDescribePattern`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowDescribePattern?: (ctx: ShowDescribePatternContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.compatibleID`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCompatibleID?: (ctx: CompatibleIDContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.querySpecification`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQuerySpecification?: (ctx: QuerySpecificationContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.selectClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSelectClause?: (ctx: SelectClauseContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.selectSpec`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSelectSpec?: (ctx: SelectSpecContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.selectElements`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSelectElements?: (ctx: SelectElementsContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.selectElement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSelectElement?: (ctx: SelectElementContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.fromClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFromClause?: (ctx: FromClauseContext) => Result; + /** + * Visit a parse tree produced by the `tableAsRelation` + * labeled alternative in `OpenSearchSQLParser.relation`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTableAsRelation?: (ctx: TableAsRelationContext) => Result; + /** + * Visit a parse tree produced by the `subqueryAsRelation` + * labeled alternative in `OpenSearchSQLParser.relation`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSubqueryAsRelation?: (ctx: SubqueryAsRelationContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.whereClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWhereClause?: (ctx: WhereClauseContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.groupByClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGroupByClause?: (ctx: GroupByClauseContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.groupByElements`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGroupByElements?: (ctx: GroupByElementsContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.groupByElement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGroupByElement?: (ctx: GroupByElementContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.havingClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitHavingClause?: (ctx: HavingClauseContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.orderByClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitOrderByClause?: (ctx: OrderByClauseContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.orderByElement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitOrderByElement?: (ctx: OrderByElementContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.limitClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLimitClause?: (ctx: LimitClauseContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.windowFunctionClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWindowFunctionClause?: (ctx: WindowFunctionClauseContext) => Result; + /** + * Visit a parse tree produced by the `scalarWindowFunction` + * labeled alternative in `OpenSearchSQLParser.windowFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitScalarWindowFunction?: (ctx: ScalarWindowFunctionContext) => Result; + /** + * Visit a parse tree produced by the `aggregateWindowFunction` + * labeled alternative in `OpenSearchSQLParser.windowFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAggregateWindowFunction?: (ctx: AggregateWindowFunctionContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.overClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitOverClause?: (ctx: OverClauseContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.partitionByClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPartitionByClause?: (ctx: PartitionByClauseContext) => Result; + /** + * Visit a parse tree produced by the `string` + * labeled alternative in `OpenSearchSQLParser.constant`. + * @param ctx the parse tree + * @return the visitor result + */ + visitString?: (ctx: StringContext) => Result; + /** + * Visit a parse tree produced by the `signedDecimal` + * labeled alternative in `OpenSearchSQLParser.constant`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSignedDecimal?: (ctx: SignedDecimalContext) => Result; + /** + * Visit a parse tree produced by the `signedReal` + * labeled alternative in `OpenSearchSQLParser.constant`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSignedReal?: (ctx: SignedRealContext) => Result; + /** + * Visit a parse tree produced by the `boolean` + * labeled alternative in `OpenSearchSQLParser.constant`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBoolean?: (ctx: BooleanContext) => Result; + /** + * Visit a parse tree produced by the `datetime` + * labeled alternative in `OpenSearchSQLParser.constant`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDatetime?: (ctx: DatetimeContext) => Result; + /** + * Visit a parse tree produced by the `interval` + * labeled alternative in `OpenSearchSQLParser.constant`. + * @param ctx the parse tree + * @return the visitor result + */ + visitInterval?: (ctx: IntervalContext) => Result; + /** + * Visit a parse tree produced by the `null` + * labeled alternative in `OpenSearchSQLParser.constant`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNull?: (ctx: NullContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.decimalLiteral`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDecimalLiteral?: (ctx: DecimalLiteralContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.numericLiteral`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNumericLiteral?: (ctx: NumericLiteralContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.stringLiteral`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStringLiteral?: (ctx: StringLiteralContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.booleanLiteral`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBooleanLiteral?: (ctx: BooleanLiteralContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.realLiteral`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRealLiteral?: (ctx: RealLiteralContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.sign`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSign?: (ctx: SignContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.nullLiteral`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNullLiteral?: (ctx: NullLiteralContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.datetimeLiteral`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDatetimeLiteral?: (ctx: DatetimeLiteralContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.dateLiteral`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDateLiteral?: (ctx: DateLiteralContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.timeLiteral`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTimeLiteral?: (ctx: TimeLiteralContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.timestampLiteral`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTimestampLiteral?: (ctx: TimestampLiteralContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.datetimeConstantLiteral`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDatetimeConstantLiteral?: (ctx: DatetimeConstantLiteralContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.intervalLiteral`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIntervalLiteral?: (ctx: IntervalLiteralContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.intervalUnit`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIntervalUnit?: (ctx: IntervalUnitContext) => Result; + /** + * Visit a parse tree produced by the `orExpression` + * labeled alternative in `OpenSearchSQLParser.expression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitOrExpression?: (ctx: OrExpressionContext) => Result; + /** + * Visit a parse tree produced by the `andExpression` + * labeled alternative in `OpenSearchSQLParser.expression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAndExpression?: (ctx: AndExpressionContext) => Result; + /** + * Visit a parse tree produced by the `notExpression` + * labeled alternative in `OpenSearchSQLParser.expression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNotExpression?: (ctx: NotExpressionContext) => Result; + /** + * Visit a parse tree produced by the `predicateExpression` + * labeled alternative in `OpenSearchSQLParser.expression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPredicateExpression?: (ctx: PredicateExpressionContext) => Result; + /** + * Visit a parse tree produced by the `expressionAtomPredicate` + * labeled alternative in `OpenSearchSQLParser.predicate`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExpressionAtomPredicate?: (ctx: ExpressionAtomPredicateContext) => Result; + /** + * Visit a parse tree produced by the `binaryComparisonPredicate` + * labeled alternative in `OpenSearchSQLParser.predicate`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBinaryComparisonPredicate?: (ctx: BinaryComparisonPredicateContext) => Result; + /** + * Visit a parse tree produced by the `inPredicate` + * labeled alternative in `OpenSearchSQLParser.predicate`. + * @param ctx the parse tree + * @return the visitor result + */ + visitInPredicate?: (ctx: InPredicateContext) => Result; + /** + * Visit a parse tree produced by the `betweenPredicate` + * labeled alternative in `OpenSearchSQLParser.predicate`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBetweenPredicate?: (ctx: BetweenPredicateContext) => Result; + /** + * Visit a parse tree produced by the `isNullPredicate` + * labeled alternative in `OpenSearchSQLParser.predicate`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIsNullPredicate?: (ctx: IsNullPredicateContext) => Result; + /** + * Visit a parse tree produced by the `likePredicate` + * labeled alternative in `OpenSearchSQLParser.predicate`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLikePredicate?: (ctx: LikePredicateContext) => Result; + /** + * Visit a parse tree produced by the `regexpPredicate` + * labeled alternative in `OpenSearchSQLParser.predicate`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRegexpPredicate?: (ctx: RegexpPredicateContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.expressions`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExpressions?: (ctx: ExpressionsContext) => Result; + /** + * Visit a parse tree produced by the `constantExpressionAtom` + * labeled alternative in `OpenSearchSQLParser.expressionAtom`. + * @param ctx the parse tree + * @return the visitor result + */ + visitConstantExpressionAtom?: (ctx: ConstantExpressionAtomContext) => Result; + /** + * Visit a parse tree produced by the `functionCallExpressionAtom` + * labeled alternative in `OpenSearchSQLParser.expressionAtom`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFunctionCallExpressionAtom?: (ctx: FunctionCallExpressionAtomContext) => Result; + /** + * Visit a parse tree produced by the `fullColumnNameExpressionAtom` + * labeled alternative in `OpenSearchSQLParser.expressionAtom`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFullColumnNameExpressionAtom?: (ctx: FullColumnNameExpressionAtomContext) => Result; + /** + * Visit a parse tree produced by the `nestedExpressionAtom` + * labeled alternative in `OpenSearchSQLParser.expressionAtom`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNestedExpressionAtom?: (ctx: NestedExpressionAtomContext) => Result; + /** + * Visit a parse tree produced by the `mathExpressionAtom` + * labeled alternative in `OpenSearchSQLParser.expressionAtom`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMathExpressionAtom?: (ctx: MathExpressionAtomContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.comparisonOperator`. + * @param ctx the parse tree + * @return the visitor result + */ + visitComparisonOperator?: (ctx: ComparisonOperatorContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.nullNotnull`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNullNotnull?: (ctx: NullNotnullContext) => Result; + /** + * Visit a parse tree produced by the `nestedAllFunctionCall` + * labeled alternative in `OpenSearchSQLParser.functionCall`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNestedAllFunctionCall?: (ctx: NestedAllFunctionCallContext) => Result; + /** + * Visit a parse tree produced by the `scalarFunctionCall` + * labeled alternative in `OpenSearchSQLParser.functionCall`. + * @param ctx the parse tree + * @return the visitor result + */ + visitScalarFunctionCall?: (ctx: ScalarFunctionCallContext) => Result; + /** + * Visit a parse tree produced by the `specificFunctionCall` + * labeled alternative in `OpenSearchSQLParser.functionCall`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSpecificFunctionCall?: (ctx: SpecificFunctionCallContext) => Result; + /** + * Visit a parse tree produced by the `windowFunctionCall` + * labeled alternative in `OpenSearchSQLParser.functionCall`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWindowFunctionCall?: (ctx: WindowFunctionCallContext) => Result; + /** + * Visit a parse tree produced by the `aggregateFunctionCall` + * labeled alternative in `OpenSearchSQLParser.functionCall`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAggregateFunctionCall?: (ctx: AggregateFunctionCallContext) => Result; + /** + * Visit a parse tree produced by the `filteredAggregationFunctionCall` + * labeled alternative in `OpenSearchSQLParser.functionCall`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFilteredAggregationFunctionCall?: (ctx: FilteredAggregationFunctionCallContext) => Result; + /** + * Visit a parse tree produced by the `scoreRelevanceFunctionCall` + * labeled alternative in `OpenSearchSQLParser.functionCall`. + * @param ctx the parse tree + * @return the visitor result + */ + visitScoreRelevanceFunctionCall?: (ctx: ScoreRelevanceFunctionCallContext) => Result; + /** + * Visit a parse tree produced by the `relevanceFunctionCall` + * labeled alternative in `OpenSearchSQLParser.functionCall`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRelevanceFunctionCall?: (ctx: RelevanceFunctionCallContext) => Result; + /** + * Visit a parse tree produced by the `highlightFunctionCall` + * labeled alternative in `OpenSearchSQLParser.functionCall`. + * @param ctx the parse tree + * @return the visitor result + */ + visitHighlightFunctionCall?: (ctx: HighlightFunctionCallContext) => Result; + /** + * Visit a parse tree produced by the `positionFunctionCall` + * labeled alternative in `OpenSearchSQLParser.functionCall`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPositionFunctionCall?: (ctx: PositionFunctionCallContext) => Result; + /** + * Visit a parse tree produced by the `extractFunctionCall` + * labeled alternative in `OpenSearchSQLParser.functionCall`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExtractFunctionCall?: (ctx: ExtractFunctionCallContext) => Result; + /** + * Visit a parse tree produced by the `getFormatFunctionCall` + * labeled alternative in `OpenSearchSQLParser.functionCall`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGetFormatFunctionCall?: (ctx: GetFormatFunctionCallContext) => Result; + /** + * Visit a parse tree produced by the `timestampFunctionCall` + * labeled alternative in `OpenSearchSQLParser.functionCall`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTimestampFunctionCall?: (ctx: TimestampFunctionCallContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.timestampFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTimestampFunction?: (ctx: TimestampFunctionContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.timestampFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTimestampFunctionName?: (ctx: TimestampFunctionNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.getFormatFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGetFormatFunction?: (ctx: GetFormatFunctionContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.getFormatType`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGetFormatType?: (ctx: GetFormatTypeContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.extractFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExtractFunction?: (ctx: ExtractFunctionContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.simpleDateTimePart`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSimpleDateTimePart?: (ctx: SimpleDateTimePartContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.complexDateTimePart`. + * @param ctx the parse tree + * @return the visitor result + */ + visitComplexDateTimePart?: (ctx: ComplexDateTimePartContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.datetimePart`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDatetimePart?: (ctx: DatetimePartContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.highlightFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitHighlightFunction?: (ctx: HighlightFunctionContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.positionFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPositionFunction?: (ctx: PositionFunctionContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.matchQueryAltSyntaxFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMatchQueryAltSyntaxFunction?: (ctx: MatchQueryAltSyntaxFunctionContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.scalarFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitScalarFunctionName?: (ctx: ScalarFunctionNameContext) => Result; + /** + * Visit a parse tree produced by the `caseFunctionCall` + * labeled alternative in `OpenSearchSQLParser.specificFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCaseFunctionCall?: (ctx: CaseFunctionCallContext) => Result; + /** + * Visit a parse tree produced by the `dataTypeFunctionCall` + * labeled alternative in `OpenSearchSQLParser.specificFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDataTypeFunctionCall?: (ctx: DataTypeFunctionCallContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.relevanceFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRelevanceFunction?: (ctx: RelevanceFunctionContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.scoreRelevanceFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitScoreRelevanceFunction?: (ctx: ScoreRelevanceFunctionContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.noFieldRelevanceFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNoFieldRelevanceFunction?: (ctx: NoFieldRelevanceFunctionContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.singleFieldRelevanceFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSingleFieldRelevanceFunction?: (ctx: SingleFieldRelevanceFunctionContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.multiFieldRelevanceFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMultiFieldRelevanceFunction?: (ctx: MultiFieldRelevanceFunctionContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.altSingleFieldRelevanceFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAltSingleFieldRelevanceFunction?: (ctx: AltSingleFieldRelevanceFunctionContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.altMultiFieldRelevanceFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAltMultiFieldRelevanceFunction?: (ctx: AltMultiFieldRelevanceFunctionContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.convertedDataType`. + * @param ctx the parse tree + * @return the visitor result + */ + visitConvertedDataType?: (ctx: ConvertedDataTypeContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.caseFuncAlternative`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCaseFuncAlternative?: (ctx: CaseFuncAlternativeContext) => Result; + /** + * Visit a parse tree produced by the `regularAggregateFunctionCall` + * labeled alternative in `OpenSearchSQLParser.aggregateFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRegularAggregateFunctionCall?: (ctx: RegularAggregateFunctionCallContext) => Result; + /** + * Visit a parse tree produced by the `countStarFunctionCall` + * labeled alternative in `OpenSearchSQLParser.aggregateFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCountStarFunctionCall?: (ctx: CountStarFunctionCallContext) => Result; + /** + * Visit a parse tree produced by the `distinctCountFunctionCall` + * labeled alternative in `OpenSearchSQLParser.aggregateFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDistinctCountFunctionCall?: (ctx: DistinctCountFunctionCallContext) => Result; + /** + * Visit a parse tree produced by the `percentileApproxFunctionCall` + * labeled alternative in `OpenSearchSQLParser.aggregateFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPercentileApproxFunctionCall?: (ctx: PercentileApproxFunctionCallContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.percentileApproxFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPercentileApproxFunction?: (ctx: PercentileApproxFunctionContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.filterClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFilterClause?: (ctx: FilterClauseContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.aggregationFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAggregationFunctionName?: (ctx: AggregationFunctionNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.mathematicalFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMathematicalFunctionName?: (ctx: MathematicalFunctionNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.trigonometricFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTrigonometricFunctionName?: (ctx: TrigonometricFunctionNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.arithmeticFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitArithmeticFunctionName?: (ctx: ArithmeticFunctionNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.dateTimeFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDateTimeFunctionName?: (ctx: DateTimeFunctionNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.textFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTextFunctionName?: (ctx: TextFunctionNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.flowControlFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFlowControlFunctionName?: (ctx: FlowControlFunctionNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.noFieldRelevanceFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNoFieldRelevanceFunctionName?: (ctx: NoFieldRelevanceFunctionNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.systemFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSystemFunctionName?: (ctx: SystemFunctionNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.nestedFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNestedFunctionName?: (ctx: NestedFunctionNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.scoreRelevanceFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitScoreRelevanceFunctionName?: (ctx: ScoreRelevanceFunctionNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.singleFieldRelevanceFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSingleFieldRelevanceFunctionName?: (ctx: SingleFieldRelevanceFunctionNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.multiFieldRelevanceFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMultiFieldRelevanceFunctionName?: (ctx: MultiFieldRelevanceFunctionNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.altSingleFieldRelevanceFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAltSingleFieldRelevanceFunctionName?: (ctx: AltSingleFieldRelevanceFunctionNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.altMultiFieldRelevanceFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAltMultiFieldRelevanceFunctionName?: (ctx: AltMultiFieldRelevanceFunctionNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.functionArgs`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFunctionArgs?: (ctx: FunctionArgsContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.functionArg`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFunctionArg?: (ctx: FunctionArgContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.relevanceArg`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRelevanceArg?: (ctx: RelevanceArgContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.highlightArg`. + * @param ctx the parse tree + * @return the visitor result + */ + visitHighlightArg?: (ctx: HighlightArgContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.relevanceArgName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRelevanceArgName?: (ctx: RelevanceArgNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.highlightArgName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitHighlightArgName?: (ctx: HighlightArgNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.relevanceFieldAndWeight`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRelevanceFieldAndWeight?: (ctx: RelevanceFieldAndWeightContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.relevanceFieldWeight`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRelevanceFieldWeight?: (ctx: RelevanceFieldWeightContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.relevanceField`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRelevanceField?: (ctx: RelevanceFieldContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.relevanceQuery`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRelevanceQuery?: (ctx: RelevanceQueryContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.relevanceArgValue`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRelevanceArgValue?: (ctx: RelevanceArgValueContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.highlightArgValue`. + * @param ctx the parse tree + * @return the visitor result + */ + visitHighlightArgValue?: (ctx: HighlightArgValueContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.alternateMultiMatchArgName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAlternateMultiMatchArgName?: (ctx: AlternateMultiMatchArgNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.alternateMultiMatchQuery`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAlternateMultiMatchQuery?: (ctx: AlternateMultiMatchQueryContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.alternateMultiMatchField`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAlternateMultiMatchField?: (ctx: AlternateMultiMatchFieldContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.tableName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTableName?: (ctx: TableNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.columnName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitColumnName?: (ctx: ColumnNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.allTupleFields`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAllTupleFields?: (ctx: AllTupleFieldsContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.alias`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAlias?: (ctx: AliasContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.qualifiedName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQualifiedName?: (ctx: QualifiedNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.ident`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIdent?: (ctx: IdentContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchSQLParser.keywordsCanBeId`. + * @param ctx the parse tree + * @return the visitor result + */ + visitKeywordsCanBeId?: (ctx: KeywordsCanBeIdContext) => Result; +} + diff --git a/src/plugins/data/public/antlr/opensearch_sql/code_completion.ts b/src/plugins/data/public/antlr/opensearch_sql/code_completion.ts new file mode 100644 index 000000000000..25fbac2f3adf --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/code_completion.ts @@ -0,0 +1,214 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { monaco } from 'packages/osd-monaco/target'; +import { Lexer as LexerType, ParserRuleContext, Parser as ParserType } from 'antlr4ng'; +import { CodeCompletionCore } from 'antlr4-c3'; +import { + AutocompleteResultBase, + CursorPosition, + EnrichAutocompleteResult, + GetParseTree, + KeywordSuggestion, + LexerConstructor, + OpenSearchSqlAutocompleteResult, + ParserConstructor, +} from '../shared/types'; +import { TokenDictionary } from './table'; +import { createParser } from './parse'; +import { SqlErrorListener } from './sql_error_listerner'; +import { findCursorTokenIndex } from '../shared/cursor'; +import { openSearchSqlAutocompleteData } from './opensearch_sql_autocomplete'; +import { getUiSettings } from '../../services'; +import { SQL_SYMBOLS } from './constants'; +import { QuerySuggestionGetFnArgs } from '../../autocomplete'; +import { fetchColumnValues, fetchTableSchemas } from '../shared/utils'; + +export interface SuggestionParams { + position: monaco.Position; + query: string; +} + +export interface ISuggestionItem { + text: string; + type: string; + fieldType?: string; +} + +const quotesRegex = /^'(.*)'$/; + +export const getSuggestions = async ({ + selectionStart, + selectionEnd, + position, + query, + connectionService, +}: QuerySuggestionGetFnArgs): Promise => { + const { api } = getUiSettings(); + const suggestions = getOpenSearchSqlAutoCompleteSuggestions(query, { + line: position?.lineNumber || selectionStart, + column: position?.column || selectionEnd, + }); + + const finalSuggestions = []; + + try { + // Fetch columns and values + if ('suggestColumns' in suggestions && (suggestions.suggestColumns?.tables?.length ?? 0) > 0) { + const tableNames = suggestions.suggestColumns?.tables?.map((table) => table.name) ?? []; + const schemas = await fetchTableSchemas(tableNames, api, connectionService); + + schemas.forEach((schema) => { + if (schema.body?.fields?.length > 0) { + const columns = schema.body.fields.find((col) => col.name === 'COLUMN_NAME'); + const fieldTypes = schema.body.fields.find((col) => col.name === 'DATA_TYPE'); + if (columns && fieldTypes) { + finalSuggestions.push( + ...columns.values.map((col: string, index: number) => ({ + text: col, + type: 'field', + fieldType: fieldTypes.values[index], + })) + ); + } + } + }); + + if ( + 'suggestValuesForColumn' in suggestions && + /\S/.test(suggestions.suggestValuesForColumn as string) && + suggestions.suggestValuesForColumn !== undefined + ) { + const values = await fetchColumnValues( + tableNames, + suggestions.suggestValuesForColumn as string, + api, + connectionService + ); + values.forEach((value) => { + if (value.body?.fields?.length > 0) { + finalSuggestions.push( + ...value.body.fields[0].values.map((colVal: string) => ({ + text: `'${colVal}'`, + type: 'value', + })) + ); + } + }); + } + } + + // Fill in aggregate functions + if ('suggestAggregateFunctions' in suggestions && suggestions.suggestAggregateFunctions) { + finalSuggestions.push( + ...SQL_SYMBOLS.AGREGATE_FUNCTIONS.map((af) => ({ + text: af, + type: 'function', + })) + ); + } + + // Fill in SQL keywords + if ('suggestKeywords' in suggestions && (suggestions.suggestKeywords?.length ?? 0) > 0) { + finalSuggestions.push( + ...(suggestions.suggestKeywords ?? []).map((sk) => ({ + text: sk.value, + type: 'keyword', + })) + ); + } + } catch (error) { + // TODO: pipe error to the UI + } + + return finalSuggestions; +}; + +export interface ParsingSubject { + Lexer: LexerConstructor; + Parser: ParserConstructor

; + tokenDictionary: TokenDictionary; + ignoredTokens: Set; + rulesToVisit: Set; + getParseTree: GetParseTree

; + enrichAutocompleteResult: EnrichAutocompleteResult; + query: string; + cursor: CursorPosition; + context?: ParserRuleContext; +} + +export const parseQuery = < + A extends AutocompleteResultBase, + L extends LexerType, + P extends ParserType +>({ + Lexer, + Parser, + tokenDictionary, + ignoredTokens, + rulesToVisit, + getParseTree, + enrichAutocompleteResult, + query, + cursor, + context, +}: ParsingSubject) => { + const parser = createParser(Lexer, Parser, query); + const { tokenStream } = parser; + const errorListener = new SqlErrorListener(tokenDictionary.SPACE); + + parser.removeErrorListeners(); + parser.addErrorListener(errorListener); + getParseTree(parser); + + const core = new CodeCompletionCore(parser); + core.ignoredTokens = ignoredTokens; + core.preferredRules = rulesToVisit; + const cursorTokenIndex = findCursorTokenIndex(tokenStream, cursor, tokenDictionary.SPACE); + if (cursorTokenIndex === undefined) { + throw new Error( + `Could not find cursor token index for line: ${cursor.line}, column: ${cursor.column}` + ); + } + + const suggestKeywords: KeywordSuggestion[] = []; + const { tokens, rules } = core.collectCandidates(cursorTokenIndex, context); + tokens.forEach((_, tokenType) => { + // Literal keyword names are quoted + const literalName = parser.vocabulary.getLiteralName(tokenType)?.replace(quotesRegex, '$1'); + + if (!literalName) { + throw new Error(`Could not get literal name for token ${tokenType}`); + } + + suggestKeywords.push({ + value: literalName, + }); + }); + + const result: AutocompleteResultBase = { + errors: errorListener.errors, + suggestKeywords, + }; + + return enrichAutocompleteResult(result, rules, tokenStream, cursorTokenIndex, cursor, query); +}; + +export const getOpenSearchSqlAutoCompleteSuggestions = ( + query: string, + cursor: CursorPosition +): OpenSearchSqlAutocompleteResult => { + return parseQuery({ + Lexer: openSearchSqlAutocompleteData.Lexer, + Parser: openSearchSqlAutocompleteData.Parser, + tokenDictionary: openSearchSqlAutocompleteData.tokenDictionary, + ignoredTokens: openSearchSqlAutocompleteData.ignoredTokens, + rulesToVisit: openSearchSqlAutocompleteData.rulesToVisit, + getParseTree: openSearchSqlAutocompleteData.getParseTree, + enrichAutocompleteResult: openSearchSqlAutocompleteData.enrichAutocompleteResult, + query, + cursor, + }); +}; diff --git a/src/plugins/data/public/antlr/opensearch_sql/constants.ts b/src/plugins/data/public/antlr/opensearch_sql/constants.ts new file mode 100644 index 000000000000..30ab55a35aa9 --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/constants.ts @@ -0,0 +1,21 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +export const SQL_SYMBOLS = { + AGREGATE_FUNCTIONS: [ + 'AVG', + 'COUNT', + 'SUM', + 'MIN', + 'MAX', + 'VAR_POP', + 'VAR_SAMP', + 'VARIANCE', + 'STD', + 'STDDEV', + 'STDDEV_POP', + 'STDDEV_SAMP', + ], +}; diff --git a/src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLLexer.interp b/src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLLexer.interp new file mode 100644 index 000000000000..655cf595429d --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLLexer.interp @@ -0,0 +1,1085 @@ +token literal names: +null +null +null +null +null +'ALL' +'AND' +'AS' +'ASC' +'BOOLEAN' +'BETWEEN' +'BY' +'CASE' +'CAST' +'CROSS' +'COLUMNS' +'DATETIME' +'DELETE' +'DESC' +'DESCRIBE' +'DISTINCT' +'DOUBLE' +'ELSE' +'EXISTS' +'FALSE' +'FLOAT' +'FIRST' +'FROM' +'GROUP' +'HAVING' +'IN' +'INNER' +'INT' +'INTEGER' +'IS' +'JOIN' +'LAST' +'LEFT' +'LIKE' +'LIMIT' +'LONG' +'MATCH' +'NATURAL' +'MISSING' +'NOT' +'NULL' +'NULLS' +'ON' +'OR' +'ORDER' +'OUTER' +'OVER' +'PARTITION' +'REGEXP' +'RIGHT' +'SELECT' +'SHOW' +'STRING' +'THEN' +'TRUE' +'UNION' +'USING' +'WHEN' +'WHERE' +'MINUS' +'AVG' +'COUNT' +'MAX' +'MIN' +'SUM' +'VAR_POP' +'VAR_SAMP' +'VARIANCE' +'STD' +'STDDEV' +'STDDEV_POP' +'STDDEV_SAMP' +'SUBSTRING' +'TRIM' +'END' +'FULL' +'OFFSET' +'INTERVAL' +'MICROSECOND' +'SECOND' +'MINUTE' +'HOUR' +'DAY' +'WEEK' +'MONTH' +'QUARTER' +'YEAR' +'SECOND_MICROSECOND' +'MINUTE_MICROSECOND' +'MINUTE_SECOND' +'HOUR_MICROSECOND' +'HOUR_SECOND' +'HOUR_MINUTE' +'DAY_MICROSECOND' +'DAY_SECOND' +'DAY_MINUTE' +'DAY_HOUR' +'YEAR_MONTH' +'TABLES' +'ABS' +'ACOS' +'ADD' +'ADDTIME' +'ASCII' +'ASIN' +'ATAN' +'ATAN2' +'CBRT' +'CEIL' +'CEILING' +'CONCAT' +'CONCAT_WS' +'CONV' +'CONVERT_TZ' +'COS' +'COSH' +'COT' +'CRC32' +'CURDATE' +'CURTIME' +'CURRENT_DATE' +'CURRENT_TIME' +'CURRENT_TIMESTAMP' +'DATE' +'DATE_ADD' +'DATE_FORMAT' +'DATE_SUB' +'DATEDIFF' +'DAYNAME' +'DAYOFMONTH' +'DAYOFWEEK' +'DAYOFYEAR' +'DEGREES' +'DIVIDE' +'E' +'EXP' +'EXPM1' +'EXTRACT' +'FLOOR' +'FROM_DAYS' +'FROM_UNIXTIME' +'GET_FORMAT' +'IF' +'IFNULL' +'ISNULL' +'LAST_DAY' +'LENGTH' +'LN' +'LOCALTIME' +'LOCALTIMESTAMP' +'LOCATE' +'LOG' +'LOG10' +'LOG2' +'LOWER' +'LTRIM' +'MAKEDATE' +'MAKETIME' +'MODULUS' +'MONTHNAME' +'MULTIPLY' +'NOW' +'NULLIF' +'PERIOD_ADD' +'PERIOD_DIFF' +'PI' +'POSITION' +'POW' +'POWER' +'RADIANS' +'RAND' +'REPLACE' +'RINT' +'ROUND' +'RTRIM' +'REVERSE' +'SEC_TO_TIME' +'SIGN' +'SIGNUM' +'SIN' +'SINH' +'SQRT' +'STR_TO_DATE' +'SUBDATE' +'SUBTIME' +'SUBTRACT' +'SYSDATE' +'TAN' +'TIME' +'TIMEDIFF' +'TIME_FORMAT' +'TIME_TO_SEC' +'TIMESTAMP' +'TRUNCATE' +'TO_DAYS' +'TO_SECONDS' +'UNIX_TIMESTAMP' +'UPPER' +'UTC_DATE' +'UTC_TIME' +'UTC_TIMESTAMP' +'D' +'T' +'TS' +'{' +'}' +'DENSE_RANK' +'RANK' +'ROW_NUMBER' +'DATE_HISTOGRAM' +'DAY_OF_MONTH' +'DAY_OF_YEAR' +'DAY_OF_WEEK' +'EXCLUDE' +'EXTENDED_STATS' +'FIELD' +'FILTER' +'GEO_BOUNDING_BOX' +'GEO_CELL' +'GEO_DISTANCE' +'GEO_DISTANCE_RANGE' +'GEO_INTERSECTS' +'GEO_POLYGON' +'HISTOGRAM' +'HOUR_OF_DAY' +'INCLUDE' +'IN_TERMS' +'MATCHPHRASE' +'MATCH_PHRASE' +'MATCHPHRASEQUERY' +'SIMPLE_QUERY_STRING' +'QUERY_STRING' +'MATCH_PHRASE_PREFIX' +'MATCHQUERY' +'MATCH_QUERY' +'MINUTE_OF_DAY' +'MINUTE_OF_HOUR' +'MONTH_OF_YEAR' +'MULTIMATCH' +'MULTI_MATCH' +'MULTIMATCHQUERY' +'NESTED' +'PERCENTILES' +'PERCENTILE' +'PERCENTILE_APPROX' +'REGEXP_QUERY' +'REVERSE_NESTED' +'QUERY' +'RANGE' +'SCORE' +'SCOREQUERY' +'SCORE_QUERY' +'SECOND_OF_MINUTE' +'STATS' +'TERM' +'TERMS' +'TIMESTAMPADD' +'TIMESTAMPDIFF' +'TOPHITS' +'TYPEOF' +'WEEK_OF_YEAR' +'WEEKOFYEAR' +'WEEKDAY' +'WILDCARDQUERY' +'WILDCARD_QUERY' +'SUBSTR' +'STRCMP' +'ADDDATE' +'YEARWEEK' +'ALLOW_LEADING_WILDCARD' +'ANALYZER' +'ANALYZE_WILDCARD' +'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY' +'BOOST' +'CASE_INSENSITIVE' +'CUTOFF_FREQUENCY' +'DEFAULT_FIELD' +'DEFAULT_OPERATOR' +'ESCAPE' +'ENABLE_POSITION_INCREMENTS' +'FIELDS' +'FLAGS' +'FUZZINESS' +'FUZZY_MAX_EXPANSIONS' +'FUZZY_PREFIX_LENGTH' +'FUZZY_REWRITE' +'FUZZY_TRANSPOSITIONS' +'LENIENT' +'LOW_FREQ_OPERATOR' +'MAX_DETERMINIZED_STATES' +'MAX_EXPANSIONS' +'MINIMUM_SHOULD_MATCH' +'OPERATOR' +'PHRASE_SLOP' +'PREFIX_LENGTH' +'QUOTE_ANALYZER' +'QUOTE_FIELD_SUFFIX' +'REWRITE' +'SLOP' +'TIE_BREAKER' +'TIME_ZONE' +'TYPE' +'ZERO_TERMS_QUERY' +'HIGHLIGHT' +'PRE_TAGS' +'POST_TAGS' +'MATCH_BOOL_PREFIX' +'*' +'/' +'%' +'+' +'-' +'DIV' +'MOD' +'=' +'>' +'<' +'!' +'~' +'|' +'&' +'^' +'.' +'(' +')' +'[' +']' +',' +';' +'@' +'0' +'1' +'2' +'\'' +'"' +'`' +':' +null +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +SPACE +SPEC_SQL_COMMENT +COMMENT_INPUT +LINE_COMMENT +ALL +AND +AS +ASC +BOOLEAN +BETWEEN +BY +CASE +CAST +CROSS +COLUMNS +DATETIME +DELETE +DESC +DESCRIBE +DISTINCT +DOUBLE +ELSE +EXISTS +FALSE +FLOAT +FIRST +FROM +GROUP +HAVING +IN +INNER +INT +INTEGER +IS +JOIN +LAST +LEFT +LIKE +LIMIT +LONG +MATCH +NATURAL +MISSING_LITERAL +NOT +NULL_LITERAL +NULLS +ON +OR +ORDER +OUTER +OVER +PARTITION +REGEXP +RIGHT +SELECT +SHOW +STRING +THEN +TRUE +UNION +USING +WHEN +WHERE +EXCEPT +AVG +COUNT +MAX +MIN +SUM +VAR_POP +VAR_SAMP +VARIANCE +STD +STDDEV +STDDEV_POP +STDDEV_SAMP +SUBSTRING +TRIM +END +FULL +OFFSET +INTERVAL +MICROSECOND +SECOND +MINUTE +HOUR +DAY +WEEK +MONTH +QUARTER +YEAR +SECOND_MICROSECOND +MINUTE_MICROSECOND +MINUTE_SECOND +HOUR_MICROSECOND +HOUR_SECOND +HOUR_MINUTE +DAY_MICROSECOND +DAY_SECOND +DAY_MINUTE +DAY_HOUR +YEAR_MONTH +TABLES +ABS +ACOS +ADD +ADDTIME +ASCII +ASIN +ATAN +ATAN2 +CBRT +CEIL +CEILING +CONCAT +CONCAT_WS +CONV +CONVERT_TZ +COS +COSH +COT +CRC32 +CURDATE +CURTIME +CURRENT_DATE +CURRENT_TIME +CURRENT_TIMESTAMP +DATE +DATE_ADD +DATE_FORMAT +DATE_SUB +DATEDIFF +DAYNAME +DAYOFMONTH +DAYOFWEEK +DAYOFYEAR +DEGREES +DIVIDE +E +EXP +EXPM1 +EXTRACT +FLOOR +FROM_DAYS +FROM_UNIXTIME +GET_FORMAT +IF +IFNULL +ISNULL +LAST_DAY +LENGTH +LN +LOCALTIME +LOCALTIMESTAMP +LOCATE +LOG +LOG10 +LOG2 +LOWER +LTRIM +MAKEDATE +MAKETIME +MODULUS +MONTHNAME +MULTIPLY +NOW +NULLIF +PERIOD_ADD +PERIOD_DIFF +PI +POSITION +POW +POWER +RADIANS +RAND +REPLACE +RINT +ROUND +RTRIM +REVERSE +SEC_TO_TIME +SIGN +SIGNUM +SIN +SINH +SQRT +STR_TO_DATE +SUBDATE +SUBTIME +SUBTRACT +SYSDATE +TAN +TIME +TIMEDIFF +TIME_FORMAT +TIME_TO_SEC +TIMESTAMP +TRUNCATE +TO_DAYS +TO_SECONDS +UNIX_TIMESTAMP +UPPER +UTC_DATE +UTC_TIME +UTC_TIMESTAMP +D +T +TS +LEFT_BRACE +RIGHT_BRACE +DENSE_RANK +RANK +ROW_NUMBER +DATE_HISTOGRAM +DAY_OF_MONTH +DAY_OF_YEAR +DAY_OF_WEEK +EXCLUDE +EXTENDED_STATS +FIELD +FILTER +GEO_BOUNDING_BOX +GEO_CELL +GEO_DISTANCE +GEO_DISTANCE_RANGE +GEO_INTERSECTS +GEO_POLYGON +HISTOGRAM +HOUR_OF_DAY +INCLUDE +IN_TERMS +MATCHPHRASE +MATCH_PHRASE +MATCHPHRASEQUERY +SIMPLE_QUERY_STRING +QUERY_STRING +MATCH_PHRASE_PREFIX +MATCHQUERY +MATCH_QUERY +MINUTE_OF_DAY +MINUTE_OF_HOUR +MONTH_OF_YEAR +MULTIMATCH +MULTI_MATCH +MULTIMATCHQUERY +NESTED +PERCENTILES +PERCENTILE +PERCENTILE_APPROX +REGEXP_QUERY +REVERSE_NESTED +QUERY +RANGE +SCORE +SCOREQUERY +SCORE_QUERY +SECOND_OF_MINUTE +STATS +TERM +TERMS +TIMESTAMPADD +TIMESTAMPDIFF +TOPHITS +TYPEOF +WEEK_OF_YEAR +WEEKOFYEAR +WEEKDAY +WILDCARDQUERY +WILDCARD_QUERY +SUBSTR +STRCMP +ADDDATE +YEARWEEK +ALLOW_LEADING_WILDCARD +ANALYZER +ANALYZE_WILDCARD +AUTO_GENERATE_SYNONYMS_PHRASE_QUERY +BOOST +CASE_INSENSITIVE +CUTOFF_FREQUENCY +DEFAULT_FIELD +DEFAULT_OPERATOR +ESCAPE +ENABLE_POSITION_INCREMENTS +FIELDS +FLAGS +FUZZINESS +FUZZY_MAX_EXPANSIONS +FUZZY_PREFIX_LENGTH +FUZZY_REWRITE +FUZZY_TRANSPOSITIONS +LENIENT +LOW_FREQ_OPERATOR +MAX_DETERMINIZED_STATES +MAX_EXPANSIONS +MINIMUM_SHOULD_MATCH +OPERATOR +PHRASE_SLOP +PREFIX_LENGTH +QUOTE_ANALYZER +QUOTE_FIELD_SUFFIX +REWRITE +SLOP +TIE_BREAKER +TIME_ZONE +TYPE +ZERO_TERMS_QUERY +HIGHLIGHT +HIGHLIGHT_PRE_TAGS +HIGHLIGHT_POST_TAGS +MATCH_BOOL_PREFIX +STAR +SLASH +MODULE +PLUS +MINUS +DIV +MOD +EQUAL_SYMBOL +GREATER_SYMBOL +LESS_SYMBOL +EXCLAMATION_SYMBOL +BIT_NOT_OP +BIT_OR_OP +BIT_AND_OP +BIT_XOR_OP +DOT +LR_BRACKET +RR_BRACKET +LT_SQR_PRTHS +RT_SQR_PRTHS +COMMA +SEMI +AT_SIGN +ZERO_DECIMAL +ONE_DECIMAL +TWO_DECIMAL +SINGLE_QUOTE_SYMB +DOUBLE_QUOTE_SYMB +REVERSE_QUOTE_SYMB +COLON_SYMB +START_NATIONAL_STRING_LITERAL +STRING_LITERAL +DECIMAL_LITERAL +HEXADECIMAL_LITERAL +REAL_LITERAL +NULL_SPEC_LITERAL +BIT_STRING +ID +DOUBLE_QUOTE_ID +BACKTICK_QUOTE_ID +ERROR_RECOGNITION + +rule names: +SPACE +SPEC_SQL_COMMENT +COMMENT_INPUT +LINE_COMMENT +ALL +AND +AS +ASC +BOOLEAN +BETWEEN +BY +CASE +CAST +CROSS +COLUMNS +DATETIME +DELETE +DESC +DESCRIBE +DISTINCT +DOUBLE +ELSE +EXISTS +FALSE +FLOAT +FIRST +FROM +GROUP +HAVING +IN +INNER +INT +INTEGER +IS +JOIN +LAST +LEFT +LIKE +LIMIT +LONG +MATCH +NATURAL +MISSING_LITERAL +NOT +NULL_LITERAL +NULLS +ON +OR +ORDER +OUTER +OVER +PARTITION +REGEXP +RIGHT +SELECT +SHOW +STRING +THEN +TRUE +UNION +USING +WHEN +WHERE +EXCEPT +AVG +COUNT +MAX +MIN +SUM +VAR_POP +VAR_SAMP +VARIANCE +STD +STDDEV +STDDEV_POP +STDDEV_SAMP +SUBSTRING +TRIM +END +FULL +OFFSET +INTERVAL +MICROSECOND +SECOND +MINUTE +HOUR +DAY +WEEK +MONTH +QUARTER +YEAR +SECOND_MICROSECOND +MINUTE_MICROSECOND +MINUTE_SECOND +HOUR_MICROSECOND +HOUR_SECOND +HOUR_MINUTE +DAY_MICROSECOND +DAY_SECOND +DAY_MINUTE +DAY_HOUR +YEAR_MONTH +TABLES +ABS +ACOS +ADD +ADDTIME +ASCII +ASIN +ATAN +ATAN2 +CBRT +CEIL +CEILING +CONCAT +CONCAT_WS +CONV +CONVERT_TZ +COS +COSH +COT +CRC32 +CURDATE +CURTIME +CURRENT_DATE +CURRENT_TIME +CURRENT_TIMESTAMP +DATE +DATE_ADD +DATE_FORMAT +DATE_SUB +DATEDIFF +DAYNAME +DAYOFMONTH +DAYOFWEEK +DAYOFYEAR +DEGREES +DIVIDE +E +EXP +EXPM1 +EXTRACT +FLOOR +FROM_DAYS +FROM_UNIXTIME +GET_FORMAT +IF +IFNULL +ISNULL +LAST_DAY +LENGTH +LN +LOCALTIME +LOCALTIMESTAMP +LOCATE +LOG +LOG10 +LOG2 +LOWER +LTRIM +MAKEDATE +MAKETIME +MODULUS +MONTHNAME +MULTIPLY +NOW +NULLIF +PERIOD_ADD +PERIOD_DIFF +PI +POSITION +POW +POWER +RADIANS +RAND +REPLACE +RINT +ROUND +RTRIM +REVERSE +SEC_TO_TIME +SIGN +SIGNUM +SIN +SINH +SQRT +STR_TO_DATE +SUBDATE +SUBTIME +SUBTRACT +SYSDATE +TAN +TIME +TIMEDIFF +TIME_FORMAT +TIME_TO_SEC +TIMESTAMP +TRUNCATE +TO_DAYS +TO_SECONDS +UNIX_TIMESTAMP +UPPER +UTC_DATE +UTC_TIME +UTC_TIMESTAMP +D +T +TS +LEFT_BRACE +RIGHT_BRACE +DENSE_RANK +RANK +ROW_NUMBER +DATE_HISTOGRAM +DAY_OF_MONTH +DAY_OF_YEAR +DAY_OF_WEEK +EXCLUDE +EXTENDED_STATS +FIELD +FILTER +GEO_BOUNDING_BOX +GEO_CELL +GEO_DISTANCE +GEO_DISTANCE_RANGE +GEO_INTERSECTS +GEO_POLYGON +HISTOGRAM +HOUR_OF_DAY +INCLUDE +IN_TERMS +MATCHPHRASE +MATCH_PHRASE +MATCHPHRASEQUERY +SIMPLE_QUERY_STRING +QUERY_STRING +MATCH_PHRASE_PREFIX +MATCHQUERY +MATCH_QUERY +MINUTE_OF_DAY +MINUTE_OF_HOUR +MONTH_OF_YEAR +MULTIMATCH +MULTI_MATCH +MULTIMATCHQUERY +NESTED +PERCENTILES +PERCENTILE +PERCENTILE_APPROX +REGEXP_QUERY +REVERSE_NESTED +QUERY +RANGE +SCORE +SCOREQUERY +SCORE_QUERY +SECOND_OF_MINUTE +STATS +TERM +TERMS +TIMESTAMPADD +TIMESTAMPDIFF +TOPHITS +TYPEOF +WEEK_OF_YEAR +WEEKOFYEAR +WEEKDAY +WILDCARDQUERY +WILDCARD_QUERY +SUBSTR +STRCMP +ADDDATE +YEARWEEK +ALLOW_LEADING_WILDCARD +ANALYZER +ANALYZE_WILDCARD +AUTO_GENERATE_SYNONYMS_PHRASE_QUERY +BOOST +CASE_INSENSITIVE +CUTOFF_FREQUENCY +DEFAULT_FIELD +DEFAULT_OPERATOR +ESCAPE +ENABLE_POSITION_INCREMENTS +FIELDS +FLAGS +FUZZINESS +FUZZY_MAX_EXPANSIONS +FUZZY_PREFIX_LENGTH +FUZZY_REWRITE +FUZZY_TRANSPOSITIONS +LENIENT +LOW_FREQ_OPERATOR +MAX_DETERMINIZED_STATES +MAX_EXPANSIONS +MINIMUM_SHOULD_MATCH +OPERATOR +PHRASE_SLOP +PREFIX_LENGTH +QUOTE_ANALYZER +QUOTE_FIELD_SUFFIX +REWRITE +SLOP +TIE_BREAKER +TIME_ZONE +TYPE +ZERO_TERMS_QUERY +HIGHLIGHT +HIGHLIGHT_PRE_TAGS +HIGHLIGHT_POST_TAGS +MATCH_BOOL_PREFIX +STAR +SLASH +MODULE +PLUS +MINUS +DIV +MOD +EQUAL_SYMBOL +GREATER_SYMBOL +LESS_SYMBOL +EXCLAMATION_SYMBOL +BIT_NOT_OP +BIT_OR_OP +BIT_AND_OP +BIT_XOR_OP +DOT +LR_BRACKET +RR_BRACKET +LT_SQR_PRTHS +RT_SQR_PRTHS +COMMA +SEMI +AT_SIGN +ZERO_DECIMAL +ONE_DECIMAL +TWO_DECIMAL +SINGLE_QUOTE_SYMB +DOUBLE_QUOTE_SYMB +REVERSE_QUOTE_SYMB +COLON_SYMB +START_NATIONAL_STRING_LITERAL +STRING_LITERAL +DECIMAL_LITERAL +HEXADECIMAL_LITERAL +REAL_LITERAL +NULL_SPEC_LITERAL +BIT_STRING +ID +DOUBLE_QUOTE_ID +BACKTICK_QUOTE_ID +EXPONENT_NUM_PART +ID_LITERAL +DQUOTA_STRING +SQUOTA_STRING +BQUOTA_STRING +HEX_DIGIT +DEC_DIGIT +BIT_STRING_L +ERROR_RECOGNITION + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN +null +null +SQLCOMMENT +ERRORCHANNEL + +mode names: +DEFAULT_MODE + +atn: +[4, 0, 352, 3776, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, 234, 7, 234, 2, 235, 7, 235, 2, 236, 7, 236, 2, 237, 7, 237, 2, 238, 7, 238, 2, 239, 7, 239, 2, 240, 7, 240, 2, 241, 7, 241, 2, 242, 7, 242, 2, 243, 7, 243, 2, 244, 7, 244, 2, 245, 7, 245, 2, 246, 7, 246, 2, 247, 7, 247, 2, 248, 7, 248, 2, 249, 7, 249, 2, 250, 7, 250, 2, 251, 7, 251, 2, 252, 7, 252, 2, 253, 7, 253, 2, 254, 7, 254, 2, 255, 7, 255, 2, 256, 7, 256, 2, 257, 7, 257, 2, 258, 7, 258, 2, 259, 7, 259, 2, 260, 7, 260, 2, 261, 7, 261, 2, 262, 7, 262, 2, 263, 7, 263, 2, 264, 7, 264, 2, 265, 7, 265, 2, 266, 7, 266, 2, 267, 7, 267, 2, 268, 7, 268, 2, 269, 7, 269, 2, 270, 7, 270, 2, 271, 7, 271, 2, 272, 7, 272, 2, 273, 7, 273, 2, 274, 7, 274, 2, 275, 7, 275, 2, 276, 7, 276, 2, 277, 7, 277, 2, 278, 7, 278, 2, 279, 7, 279, 2, 280, 7, 280, 2, 281, 7, 281, 2, 282, 7, 282, 2, 283, 7, 283, 2, 284, 7, 284, 2, 285, 7, 285, 2, 286, 7, 286, 2, 287, 7, 287, 2, 288, 7, 288, 2, 289, 7, 289, 2, 290, 7, 290, 2, 291, 7, 291, 2, 292, 7, 292, 2, 293, 7, 293, 2, 294, 7, 294, 2, 295, 7, 295, 2, 296, 7, 296, 2, 297, 7, 297, 2, 298, 7, 298, 2, 299, 7, 299, 2, 300, 7, 300, 2, 301, 7, 301, 2, 302, 7, 302, 2, 303, 7, 303, 2, 304, 7, 304, 2, 305, 7, 305, 2, 306, 7, 306, 2, 307, 7, 307, 2, 308, 7, 308, 2, 309, 7, 309, 2, 310, 7, 310, 2, 311, 7, 311, 2, 312, 7, 312, 2, 313, 7, 313, 2, 314, 7, 314, 2, 315, 7, 315, 2, 316, 7, 316, 2, 317, 7, 317, 2, 318, 7, 318, 2, 319, 7, 319, 2, 320, 7, 320, 2, 321, 7, 321, 2, 322, 7, 322, 2, 323, 7, 323, 2, 324, 7, 324, 2, 325, 7, 325, 2, 326, 7, 326, 2, 327, 7, 327, 2, 328, 7, 328, 2, 329, 7, 329, 2, 330, 7, 330, 2, 331, 7, 331, 2, 332, 7, 332, 2, 333, 7, 333, 2, 334, 7, 334, 2, 335, 7, 335, 2, 336, 7, 336, 2, 337, 7, 337, 2, 338, 7, 338, 2, 339, 7, 339, 2, 340, 7, 340, 2, 341, 7, 341, 2, 342, 7, 342, 2, 343, 7, 343, 2, 344, 7, 344, 2, 345, 7, 345, 2, 346, 7, 346, 2, 347, 7, 347, 2, 348, 7, 348, 2, 349, 7, 349, 2, 350, 7, 350, 2, 351, 7, 351, 2, 352, 7, 352, 2, 353, 7, 353, 2, 354, 7, 354, 2, 355, 7, 355, 2, 356, 7, 356, 2, 357, 7, 357, 2, 358, 7, 358, 2, 359, 7, 359, 1, 0, 4, 0, 723, 8, 0, 11, 0, 12, 0, 724, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 734, 8, 1, 11, 1, 12, 1, 735, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 747, 8, 2, 10, 2, 12, 2, 750, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 761, 8, 3, 1, 3, 5, 3, 764, 8, 3, 10, 3, 12, 3, 767, 9, 3, 1, 3, 3, 3, 770, 8, 3, 1, 3, 1, 3, 3, 3, 774, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 780, 8, 3, 1, 3, 1, 3, 3, 3, 784, 8, 3, 3, 3, 786, 8, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 183, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 205, 1, 205, 1, 206, 1, 206, 1, 207, 1, 207, 1, 207, 1, 208, 1, 208, 1, 209, 1, 209, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 311, 1, 311, 1, 312, 1, 312, 1, 313, 1, 313, 1, 314, 1, 314, 1, 315, 1, 315, 1, 316, 1, 316, 1, 316, 1, 316, 1, 317, 1, 317, 1, 317, 1, 317, 1, 318, 1, 318, 1, 319, 1, 319, 1, 320, 1, 320, 1, 321, 1, 321, 1, 322, 1, 322, 1, 323, 1, 323, 1, 324, 1, 324, 1, 325, 1, 325, 1, 326, 1, 326, 1, 327, 1, 327, 1, 328, 1, 328, 1, 329, 1, 329, 1, 330, 1, 330, 1, 331, 1, 331, 1, 332, 1, 332, 1, 333, 1, 333, 1, 334, 1, 334, 1, 335, 1, 335, 1, 336, 1, 336, 1, 337, 1, 337, 1, 338, 1, 338, 1, 339, 1, 339, 1, 340, 1, 340, 1, 341, 1, 341, 1, 341, 1, 342, 1, 342, 1, 343, 4, 343, 3620, 8, 343, 11, 343, 12, 343, 3621, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 4, 344, 3629, 8, 344, 11, 344, 12, 344, 3630, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 4, 344, 3639, 8, 344, 11, 344, 12, 344, 3640, 3, 344, 3643, 8, 344, 1, 345, 4, 345, 3646, 8, 345, 11, 345, 12, 345, 3647, 3, 345, 3650, 8, 345, 1, 345, 1, 345, 4, 345, 3654, 8, 345, 11, 345, 12, 345, 3655, 1, 345, 4, 345, 3659, 8, 345, 11, 345, 12, 345, 3660, 1, 345, 1, 345, 1, 345, 1, 345, 4, 345, 3667, 8, 345, 11, 345, 12, 345, 3668, 3, 345, 3671, 8, 345, 1, 345, 1, 345, 4, 345, 3675, 8, 345, 11, 345, 12, 345, 3676, 1, 345, 1, 345, 1, 345, 4, 345, 3682, 8, 345, 11, 345, 12, 345, 3683, 1, 345, 1, 345, 3, 345, 3688, 8, 345, 1, 346, 1, 346, 1, 346, 1, 347, 1, 347, 1, 348, 1, 348, 1, 349, 1, 349, 1, 350, 1, 350, 1, 351, 1, 351, 3, 351, 3703, 8, 351, 1, 351, 4, 351, 3706, 8, 351, 11, 351, 12, 351, 3707, 1, 352, 4, 352, 3711, 8, 352, 11, 352, 12, 352, 3712, 1, 352, 5, 352, 3716, 8, 352, 10, 352, 12, 352, 3719, 9, 352, 1, 353, 1, 353, 1, 353, 1, 353, 1, 353, 1, 353, 5, 353, 3727, 8, 353, 10, 353, 12, 353, 3730, 9, 353, 1, 353, 1, 353, 1, 354, 1, 354, 1, 354, 1, 354, 1, 354, 1, 354, 5, 354, 3740, 8, 354, 10, 354, 12, 354, 3743, 9, 354, 1, 354, 1, 354, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 5, 355, 3753, 8, 355, 10, 355, 12, 355, 3756, 9, 355, 1, 355, 1, 355, 1, 356, 1, 356, 1, 357, 1, 357, 1, 358, 1, 358, 1, 358, 4, 358, 3767, 8, 358, 11, 358, 12, 358, 3768, 1, 358, 1, 358, 1, 359, 1, 359, 1, 359, 1, 359, 2, 735, 748, 0, 360, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 113, 227, 114, 229, 115, 231, 116, 233, 117, 235, 118, 237, 119, 239, 120, 241, 121, 243, 122, 245, 123, 247, 124, 249, 125, 251, 126, 253, 127, 255, 128, 257, 129, 259, 130, 261, 131, 263, 132, 265, 133, 267, 134, 269, 135, 271, 136, 273, 137, 275, 138, 277, 139, 279, 140, 281, 141, 283, 142, 285, 143, 287, 144, 289, 145, 291, 146, 293, 147, 295, 148, 297, 149, 299, 150, 301, 151, 303, 152, 305, 153, 307, 154, 309, 155, 311, 156, 313, 157, 315, 158, 317, 159, 319, 160, 321, 161, 323, 162, 325, 163, 327, 164, 329, 165, 331, 166, 333, 167, 335, 168, 337, 169, 339, 170, 341, 171, 343, 172, 345, 173, 347, 174, 349, 175, 351, 176, 353, 177, 355, 178, 357, 179, 359, 180, 361, 181, 363, 182, 365, 183, 367, 184, 369, 185, 371, 186, 373, 187, 375, 188, 377, 189, 379, 190, 381, 191, 383, 192, 385, 193, 387, 194, 389, 195, 391, 196, 393, 197, 395, 198, 397, 199, 399, 200, 401, 201, 403, 202, 405, 203, 407, 204, 409, 205, 411, 206, 413, 207, 415, 208, 417, 209, 419, 210, 421, 211, 423, 212, 425, 213, 427, 214, 429, 215, 431, 216, 433, 217, 435, 218, 437, 219, 439, 220, 441, 221, 443, 222, 445, 223, 447, 224, 449, 225, 451, 226, 453, 227, 455, 228, 457, 229, 459, 230, 461, 231, 463, 232, 465, 233, 467, 234, 469, 235, 471, 236, 473, 237, 475, 238, 477, 239, 479, 240, 481, 241, 483, 242, 485, 243, 487, 244, 489, 245, 491, 246, 493, 247, 495, 248, 497, 249, 499, 250, 501, 251, 503, 252, 505, 253, 507, 254, 509, 255, 511, 256, 513, 257, 515, 258, 517, 259, 519, 260, 521, 261, 523, 262, 525, 263, 527, 264, 529, 265, 531, 266, 533, 267, 535, 268, 537, 269, 539, 270, 541, 271, 543, 272, 545, 273, 547, 274, 549, 275, 551, 276, 553, 277, 555, 278, 557, 279, 559, 280, 561, 281, 563, 282, 565, 283, 567, 284, 569, 285, 571, 286, 573, 287, 575, 288, 577, 289, 579, 290, 581, 291, 583, 292, 585, 293, 587, 294, 589, 295, 591, 296, 593, 297, 595, 298, 597, 299, 599, 300, 601, 301, 603, 302, 605, 303, 607, 304, 609, 305, 611, 306, 613, 307, 615, 308, 617, 309, 619, 310, 621, 311, 623, 312, 625, 313, 627, 314, 629, 315, 631, 316, 633, 317, 635, 318, 637, 319, 639, 320, 641, 321, 643, 322, 645, 323, 647, 324, 649, 325, 651, 326, 653, 327, 655, 328, 657, 329, 659, 330, 661, 331, 663, 332, 665, 333, 667, 334, 669, 335, 671, 336, 673, 337, 675, 338, 677, 339, 679, 340, 681, 341, 683, 342, 685, 343, 687, 344, 689, 345, 691, 346, 693, 347, 695, 348, 697, 349, 699, 350, 701, 351, 703, 0, 705, 0, 707, 0, 709, 0, 711, 0, 713, 0, 715, 0, 717, 0, 719, 352, 1, 0, 37, 3, 0, 9, 10, 13, 13, 32, 32, 2, 0, 10, 10, 13, 13, 2, 0, 65, 65, 97, 97, 2, 0, 76, 76, 108, 108, 2, 0, 78, 78, 110, 110, 2, 0, 68, 68, 100, 100, 2, 0, 83, 83, 115, 115, 2, 0, 67, 67, 99, 99, 2, 0, 66, 66, 98, 98, 2, 0, 79, 79, 111, 111, 2, 0, 69, 69, 101, 101, 2, 0, 84, 84, 116, 116, 2, 0, 87, 87, 119, 119, 2, 0, 89, 89, 121, 121, 2, 0, 82, 82, 114, 114, 2, 0, 85, 85, 117, 117, 2, 0, 77, 77, 109, 109, 2, 0, 73, 73, 105, 105, 2, 0, 88, 88, 120, 120, 2, 0, 70, 70, 102, 102, 2, 0, 71, 71, 103, 103, 2, 0, 80, 80, 112, 112, 2, 0, 72, 72, 104, 104, 2, 0, 86, 86, 118, 118, 2, 0, 74, 74, 106, 106, 2, 0, 75, 75, 107, 107, 2, 0, 81, 81, 113, 113, 2, 0, 90, 90, 122, 122, 2, 0, 43, 43, 45, 45, 4, 0, 42, 42, 64, 90, 95, 95, 97, 122, 6, 0, 42, 42, 45, 45, 48, 57, 65, 90, 95, 95, 97, 122, 2, 0, 34, 34, 92, 92, 2, 0, 39, 39, 92, 92, 2, 0, 92, 92, 96, 96, 3, 0, 48, 57, 65, 70, 97, 102, 1, 0, 48, 57, 1, 0, 48, 49, 3806, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 0, 267, 1, 0, 0, 0, 0, 269, 1, 0, 0, 0, 0, 271, 1, 0, 0, 0, 0, 273, 1, 0, 0, 0, 0, 275, 1, 0, 0, 0, 0, 277, 1, 0, 0, 0, 0, 279, 1, 0, 0, 0, 0, 281, 1, 0, 0, 0, 0, 283, 1, 0, 0, 0, 0, 285, 1, 0, 0, 0, 0, 287, 1, 0, 0, 0, 0, 289, 1, 0, 0, 0, 0, 291, 1, 0, 0, 0, 0, 293, 1, 0, 0, 0, 0, 295, 1, 0, 0, 0, 0, 297, 1, 0, 0, 0, 0, 299, 1, 0, 0, 0, 0, 301, 1, 0, 0, 0, 0, 303, 1, 0, 0, 0, 0, 305, 1, 0, 0, 0, 0, 307, 1, 0, 0, 0, 0, 309, 1, 0, 0, 0, 0, 311, 1, 0, 0, 0, 0, 313, 1, 0, 0, 0, 0, 315, 1, 0, 0, 0, 0, 317, 1, 0, 0, 0, 0, 319, 1, 0, 0, 0, 0, 321, 1, 0, 0, 0, 0, 323, 1, 0, 0, 0, 0, 325, 1, 0, 0, 0, 0, 327, 1, 0, 0, 0, 0, 329, 1, 0, 0, 0, 0, 331, 1, 0, 0, 0, 0, 333, 1, 0, 0, 0, 0, 335, 1, 0, 0, 0, 0, 337, 1, 0, 0, 0, 0, 339, 1, 0, 0, 0, 0, 341, 1, 0, 0, 0, 0, 343, 1, 0, 0, 0, 0, 345, 1, 0, 0, 0, 0, 347, 1, 0, 0, 0, 0, 349, 1, 0, 0, 0, 0, 351, 1, 0, 0, 0, 0, 353, 1, 0, 0, 0, 0, 355, 1, 0, 0, 0, 0, 357, 1, 0, 0, 0, 0, 359, 1, 0, 0, 0, 0, 361, 1, 0, 0, 0, 0, 363, 1, 0, 0, 0, 0, 365, 1, 0, 0, 0, 0, 367, 1, 0, 0, 0, 0, 369, 1, 0, 0, 0, 0, 371, 1, 0, 0, 0, 0, 373, 1, 0, 0, 0, 0, 375, 1, 0, 0, 0, 0, 377, 1, 0, 0, 0, 0, 379, 1, 0, 0, 0, 0, 381, 1, 0, 0, 0, 0, 383, 1, 0, 0, 0, 0, 385, 1, 0, 0, 0, 0, 387, 1, 0, 0, 0, 0, 389, 1, 0, 0, 0, 0, 391, 1, 0, 0, 0, 0, 393, 1, 0, 0, 0, 0, 395, 1, 0, 0, 0, 0, 397, 1, 0, 0, 0, 0, 399, 1, 0, 0, 0, 0, 401, 1, 0, 0, 0, 0, 403, 1, 0, 0, 0, 0, 405, 1, 0, 0, 0, 0, 407, 1, 0, 0, 0, 0, 409, 1, 0, 0, 0, 0, 411, 1, 0, 0, 0, 0, 413, 1, 0, 0, 0, 0, 415, 1, 0, 0, 0, 0, 417, 1, 0, 0, 0, 0, 419, 1, 0, 0, 0, 0, 421, 1, 0, 0, 0, 0, 423, 1, 0, 0, 0, 0, 425, 1, 0, 0, 0, 0, 427, 1, 0, 0, 0, 0, 429, 1, 0, 0, 0, 0, 431, 1, 0, 0, 0, 0, 433, 1, 0, 0, 0, 0, 435, 1, 0, 0, 0, 0, 437, 1, 0, 0, 0, 0, 439, 1, 0, 0, 0, 0, 441, 1, 0, 0, 0, 0, 443, 1, 0, 0, 0, 0, 445, 1, 0, 0, 0, 0, 447, 1, 0, 0, 0, 0, 449, 1, 0, 0, 0, 0, 451, 1, 0, 0, 0, 0, 453, 1, 0, 0, 0, 0, 455, 1, 0, 0, 0, 0, 457, 1, 0, 0, 0, 0, 459, 1, 0, 0, 0, 0, 461, 1, 0, 0, 0, 0, 463, 1, 0, 0, 0, 0, 465, 1, 0, 0, 0, 0, 467, 1, 0, 0, 0, 0, 469, 1, 0, 0, 0, 0, 471, 1, 0, 0, 0, 0, 473, 1, 0, 0, 0, 0, 475, 1, 0, 0, 0, 0, 477, 1, 0, 0, 0, 0, 479, 1, 0, 0, 0, 0, 481, 1, 0, 0, 0, 0, 483, 1, 0, 0, 0, 0, 485, 1, 0, 0, 0, 0, 487, 1, 0, 0, 0, 0, 489, 1, 0, 0, 0, 0, 491, 1, 0, 0, 0, 0, 493, 1, 0, 0, 0, 0, 495, 1, 0, 0, 0, 0, 497, 1, 0, 0, 0, 0, 499, 1, 0, 0, 0, 0, 501, 1, 0, 0, 0, 0, 503, 1, 0, 0, 0, 0, 505, 1, 0, 0, 0, 0, 507, 1, 0, 0, 0, 0, 509, 1, 0, 0, 0, 0, 511, 1, 0, 0, 0, 0, 513, 1, 0, 0, 0, 0, 515, 1, 0, 0, 0, 0, 517, 1, 0, 0, 0, 0, 519, 1, 0, 0, 0, 0, 521, 1, 0, 0, 0, 0, 523, 1, 0, 0, 0, 0, 525, 1, 0, 0, 0, 0, 527, 1, 0, 0, 0, 0, 529, 1, 0, 0, 0, 0, 531, 1, 0, 0, 0, 0, 533, 1, 0, 0, 0, 0, 535, 1, 0, 0, 0, 0, 537, 1, 0, 0, 0, 0, 539, 1, 0, 0, 0, 0, 541, 1, 0, 0, 0, 0, 543, 1, 0, 0, 0, 0, 545, 1, 0, 0, 0, 0, 547, 1, 0, 0, 0, 0, 549, 1, 0, 0, 0, 0, 551, 1, 0, 0, 0, 0, 553, 1, 0, 0, 0, 0, 555, 1, 0, 0, 0, 0, 557, 1, 0, 0, 0, 0, 559, 1, 0, 0, 0, 0, 561, 1, 0, 0, 0, 0, 563, 1, 0, 0, 0, 0, 565, 1, 0, 0, 0, 0, 567, 1, 0, 0, 0, 0, 569, 1, 0, 0, 0, 0, 571, 1, 0, 0, 0, 0, 573, 1, 0, 0, 0, 0, 575, 1, 0, 0, 0, 0, 577, 1, 0, 0, 0, 0, 579, 1, 0, 0, 0, 0, 581, 1, 0, 0, 0, 0, 583, 1, 0, 0, 0, 0, 585, 1, 0, 0, 0, 0, 587, 1, 0, 0, 0, 0, 589, 1, 0, 0, 0, 0, 591, 1, 0, 0, 0, 0, 593, 1, 0, 0, 0, 0, 595, 1, 0, 0, 0, 0, 597, 1, 0, 0, 0, 0, 599, 1, 0, 0, 0, 0, 601, 1, 0, 0, 0, 0, 603, 1, 0, 0, 0, 0, 605, 1, 0, 0, 0, 0, 607, 1, 0, 0, 0, 0, 609, 1, 0, 0, 0, 0, 611, 1, 0, 0, 0, 0, 613, 1, 0, 0, 0, 0, 615, 1, 0, 0, 0, 0, 617, 1, 0, 0, 0, 0, 619, 1, 0, 0, 0, 0, 621, 1, 0, 0, 0, 0, 623, 1, 0, 0, 0, 0, 625, 1, 0, 0, 0, 0, 627, 1, 0, 0, 0, 0, 629, 1, 0, 0, 0, 0, 631, 1, 0, 0, 0, 0, 633, 1, 0, 0, 0, 0, 635, 1, 0, 0, 0, 0, 637, 1, 0, 0, 0, 0, 639, 1, 0, 0, 0, 0, 641, 1, 0, 0, 0, 0, 643, 1, 0, 0, 0, 0, 645, 1, 0, 0, 0, 0, 647, 1, 0, 0, 0, 0, 649, 1, 0, 0, 0, 0, 651, 1, 0, 0, 0, 0, 653, 1, 0, 0, 0, 0, 655, 1, 0, 0, 0, 0, 657, 1, 0, 0, 0, 0, 659, 1, 0, 0, 0, 0, 661, 1, 0, 0, 0, 0, 663, 1, 0, 0, 0, 0, 665, 1, 0, 0, 0, 0, 667, 1, 0, 0, 0, 0, 669, 1, 0, 0, 0, 0, 671, 1, 0, 0, 0, 0, 673, 1, 0, 0, 0, 0, 675, 1, 0, 0, 0, 0, 677, 1, 0, 0, 0, 0, 679, 1, 0, 0, 0, 0, 681, 1, 0, 0, 0, 0, 683, 1, 0, 0, 0, 0, 685, 1, 0, 0, 0, 0, 687, 1, 0, 0, 0, 0, 689, 1, 0, 0, 0, 0, 691, 1, 0, 0, 0, 0, 693, 1, 0, 0, 0, 0, 695, 1, 0, 0, 0, 0, 697, 1, 0, 0, 0, 0, 699, 1, 0, 0, 0, 0, 701, 1, 0, 0, 0, 0, 719, 1, 0, 0, 0, 1, 722, 1, 0, 0, 0, 3, 728, 1, 0, 0, 0, 5, 742, 1, 0, 0, 0, 7, 785, 1, 0, 0, 0, 9, 789, 1, 0, 0, 0, 11, 793, 1, 0, 0, 0, 13, 797, 1, 0, 0, 0, 15, 800, 1, 0, 0, 0, 17, 804, 1, 0, 0, 0, 19, 812, 1, 0, 0, 0, 21, 820, 1, 0, 0, 0, 23, 823, 1, 0, 0, 0, 25, 828, 1, 0, 0, 0, 27, 833, 1, 0, 0, 0, 29, 839, 1, 0, 0, 0, 31, 847, 1, 0, 0, 0, 33, 856, 1, 0, 0, 0, 35, 863, 1, 0, 0, 0, 37, 868, 1, 0, 0, 0, 39, 877, 1, 0, 0, 0, 41, 886, 1, 0, 0, 0, 43, 893, 1, 0, 0, 0, 45, 898, 1, 0, 0, 0, 47, 905, 1, 0, 0, 0, 49, 911, 1, 0, 0, 0, 51, 917, 1, 0, 0, 0, 53, 923, 1, 0, 0, 0, 55, 928, 1, 0, 0, 0, 57, 934, 1, 0, 0, 0, 59, 941, 1, 0, 0, 0, 61, 944, 1, 0, 0, 0, 63, 950, 1, 0, 0, 0, 65, 954, 1, 0, 0, 0, 67, 962, 1, 0, 0, 0, 69, 965, 1, 0, 0, 0, 71, 970, 1, 0, 0, 0, 73, 975, 1, 0, 0, 0, 75, 980, 1, 0, 0, 0, 77, 985, 1, 0, 0, 0, 79, 991, 1, 0, 0, 0, 81, 996, 1, 0, 0, 0, 83, 1002, 1, 0, 0, 0, 85, 1010, 1, 0, 0, 0, 87, 1018, 1, 0, 0, 0, 89, 1022, 1, 0, 0, 0, 91, 1027, 1, 0, 0, 0, 93, 1033, 1, 0, 0, 0, 95, 1036, 1, 0, 0, 0, 97, 1039, 1, 0, 0, 0, 99, 1045, 1, 0, 0, 0, 101, 1051, 1, 0, 0, 0, 103, 1056, 1, 0, 0, 0, 105, 1066, 1, 0, 0, 0, 107, 1073, 1, 0, 0, 0, 109, 1079, 1, 0, 0, 0, 111, 1086, 1, 0, 0, 0, 113, 1091, 1, 0, 0, 0, 115, 1098, 1, 0, 0, 0, 117, 1103, 1, 0, 0, 0, 119, 1108, 1, 0, 0, 0, 121, 1114, 1, 0, 0, 0, 123, 1120, 1, 0, 0, 0, 125, 1125, 1, 0, 0, 0, 127, 1131, 1, 0, 0, 0, 129, 1137, 1, 0, 0, 0, 131, 1141, 1, 0, 0, 0, 133, 1147, 1, 0, 0, 0, 135, 1151, 1, 0, 0, 0, 137, 1155, 1, 0, 0, 0, 139, 1159, 1, 0, 0, 0, 141, 1167, 1, 0, 0, 0, 143, 1176, 1, 0, 0, 0, 145, 1185, 1, 0, 0, 0, 147, 1189, 1, 0, 0, 0, 149, 1196, 1, 0, 0, 0, 151, 1207, 1, 0, 0, 0, 153, 1219, 1, 0, 0, 0, 155, 1229, 1, 0, 0, 0, 157, 1234, 1, 0, 0, 0, 159, 1238, 1, 0, 0, 0, 161, 1243, 1, 0, 0, 0, 163, 1250, 1, 0, 0, 0, 165, 1259, 1, 0, 0, 0, 167, 1271, 1, 0, 0, 0, 169, 1278, 1, 0, 0, 0, 171, 1285, 1, 0, 0, 0, 173, 1290, 1, 0, 0, 0, 175, 1294, 1, 0, 0, 0, 177, 1299, 1, 0, 0, 0, 179, 1305, 1, 0, 0, 0, 181, 1313, 1, 0, 0, 0, 183, 1318, 1, 0, 0, 0, 185, 1337, 1, 0, 0, 0, 187, 1356, 1, 0, 0, 0, 189, 1370, 1, 0, 0, 0, 191, 1387, 1, 0, 0, 0, 193, 1399, 1, 0, 0, 0, 195, 1411, 1, 0, 0, 0, 197, 1427, 1, 0, 0, 0, 199, 1438, 1, 0, 0, 0, 201, 1449, 1, 0, 0, 0, 203, 1458, 1, 0, 0, 0, 205, 1469, 1, 0, 0, 0, 207, 1476, 1, 0, 0, 0, 209, 1480, 1, 0, 0, 0, 211, 1485, 1, 0, 0, 0, 213, 1489, 1, 0, 0, 0, 215, 1497, 1, 0, 0, 0, 217, 1503, 1, 0, 0, 0, 219, 1508, 1, 0, 0, 0, 221, 1513, 1, 0, 0, 0, 223, 1519, 1, 0, 0, 0, 225, 1524, 1, 0, 0, 0, 227, 1529, 1, 0, 0, 0, 229, 1537, 1, 0, 0, 0, 231, 1544, 1, 0, 0, 0, 233, 1554, 1, 0, 0, 0, 235, 1559, 1, 0, 0, 0, 237, 1570, 1, 0, 0, 0, 239, 1574, 1, 0, 0, 0, 241, 1579, 1, 0, 0, 0, 243, 1583, 1, 0, 0, 0, 245, 1589, 1, 0, 0, 0, 247, 1597, 1, 0, 0, 0, 249, 1605, 1, 0, 0, 0, 251, 1618, 1, 0, 0, 0, 253, 1631, 1, 0, 0, 0, 255, 1649, 1, 0, 0, 0, 257, 1654, 1, 0, 0, 0, 259, 1663, 1, 0, 0, 0, 261, 1675, 1, 0, 0, 0, 263, 1684, 1, 0, 0, 0, 265, 1693, 1, 0, 0, 0, 267, 1701, 1, 0, 0, 0, 269, 1712, 1, 0, 0, 0, 271, 1722, 1, 0, 0, 0, 273, 1732, 1, 0, 0, 0, 275, 1740, 1, 0, 0, 0, 277, 1747, 1, 0, 0, 0, 279, 1749, 1, 0, 0, 0, 281, 1753, 1, 0, 0, 0, 283, 1759, 1, 0, 0, 0, 285, 1767, 1, 0, 0, 0, 287, 1773, 1, 0, 0, 0, 289, 1783, 1, 0, 0, 0, 291, 1797, 1, 0, 0, 0, 293, 1808, 1, 0, 0, 0, 295, 1811, 1, 0, 0, 0, 297, 1818, 1, 0, 0, 0, 299, 1825, 1, 0, 0, 0, 301, 1834, 1, 0, 0, 0, 303, 1841, 1, 0, 0, 0, 305, 1844, 1, 0, 0, 0, 307, 1854, 1, 0, 0, 0, 309, 1869, 1, 0, 0, 0, 311, 1876, 1, 0, 0, 0, 313, 1880, 1, 0, 0, 0, 315, 1886, 1, 0, 0, 0, 317, 1891, 1, 0, 0, 0, 319, 1897, 1, 0, 0, 0, 321, 1903, 1, 0, 0, 0, 323, 1912, 1, 0, 0, 0, 325, 1921, 1, 0, 0, 0, 327, 1929, 1, 0, 0, 0, 329, 1939, 1, 0, 0, 0, 331, 1948, 1, 0, 0, 0, 333, 1952, 1, 0, 0, 0, 335, 1959, 1, 0, 0, 0, 337, 1970, 1, 0, 0, 0, 339, 1982, 1, 0, 0, 0, 341, 1985, 1, 0, 0, 0, 343, 1994, 1, 0, 0, 0, 345, 1998, 1, 0, 0, 0, 347, 2004, 1, 0, 0, 0, 349, 2012, 1, 0, 0, 0, 351, 2017, 1, 0, 0, 0, 353, 2025, 1, 0, 0, 0, 355, 2030, 1, 0, 0, 0, 357, 2036, 1, 0, 0, 0, 359, 2042, 1, 0, 0, 0, 361, 2050, 1, 0, 0, 0, 363, 2062, 1, 0, 0, 0, 365, 2067, 1, 0, 0, 0, 367, 2074, 1, 0, 0, 0, 369, 2078, 1, 0, 0, 0, 371, 2083, 1, 0, 0, 0, 373, 2088, 1, 0, 0, 0, 375, 2100, 1, 0, 0, 0, 377, 2108, 1, 0, 0, 0, 379, 2116, 1, 0, 0, 0, 381, 2125, 1, 0, 0, 0, 383, 2133, 1, 0, 0, 0, 385, 2137, 1, 0, 0, 0, 387, 2142, 1, 0, 0, 0, 389, 2151, 1, 0, 0, 0, 391, 2163, 1, 0, 0, 0, 393, 2175, 1, 0, 0, 0, 395, 2185, 1, 0, 0, 0, 397, 2194, 1, 0, 0, 0, 399, 2202, 1, 0, 0, 0, 401, 2213, 1, 0, 0, 0, 403, 2228, 1, 0, 0, 0, 405, 2234, 1, 0, 0, 0, 407, 2243, 1, 0, 0, 0, 409, 2252, 1, 0, 0, 0, 411, 2266, 1, 0, 0, 0, 413, 2268, 1, 0, 0, 0, 415, 2270, 1, 0, 0, 0, 417, 2273, 1, 0, 0, 0, 419, 2275, 1, 0, 0, 0, 421, 2277, 1, 0, 0, 0, 423, 2288, 1, 0, 0, 0, 425, 2293, 1, 0, 0, 0, 427, 2304, 1, 0, 0, 0, 429, 2319, 1, 0, 0, 0, 431, 2332, 1, 0, 0, 0, 433, 2344, 1, 0, 0, 0, 435, 2356, 1, 0, 0, 0, 437, 2364, 1, 0, 0, 0, 439, 2379, 1, 0, 0, 0, 441, 2385, 1, 0, 0, 0, 443, 2392, 1, 0, 0, 0, 445, 2409, 1, 0, 0, 0, 447, 2418, 1, 0, 0, 0, 449, 2431, 1, 0, 0, 0, 451, 2450, 1, 0, 0, 0, 453, 2465, 1, 0, 0, 0, 455, 2477, 1, 0, 0, 0, 457, 2487, 1, 0, 0, 0, 459, 2499, 1, 0, 0, 0, 461, 2507, 1, 0, 0, 0, 463, 2516, 1, 0, 0, 0, 465, 2528, 1, 0, 0, 0, 467, 2541, 1, 0, 0, 0, 469, 2558, 1, 0, 0, 0, 471, 2578, 1, 0, 0, 0, 473, 2591, 1, 0, 0, 0, 475, 2611, 1, 0, 0, 0, 477, 2622, 1, 0, 0, 0, 479, 2634, 1, 0, 0, 0, 481, 2648, 1, 0, 0, 0, 483, 2663, 1, 0, 0, 0, 485, 2677, 1, 0, 0, 0, 487, 2688, 1, 0, 0, 0, 489, 2700, 1, 0, 0, 0, 491, 2716, 1, 0, 0, 0, 493, 2723, 1, 0, 0, 0, 495, 2735, 1, 0, 0, 0, 497, 2746, 1, 0, 0, 0, 499, 2764, 1, 0, 0, 0, 501, 2777, 1, 0, 0, 0, 503, 2792, 1, 0, 0, 0, 505, 2798, 1, 0, 0, 0, 507, 2804, 1, 0, 0, 0, 509, 2810, 1, 0, 0, 0, 511, 2821, 1, 0, 0, 0, 513, 2833, 1, 0, 0, 0, 515, 2850, 1, 0, 0, 0, 517, 2856, 1, 0, 0, 0, 519, 2861, 1, 0, 0, 0, 521, 2867, 1, 0, 0, 0, 523, 2880, 1, 0, 0, 0, 525, 2894, 1, 0, 0, 0, 527, 2902, 1, 0, 0, 0, 529, 2909, 1, 0, 0, 0, 531, 2922, 1, 0, 0, 0, 533, 2933, 1, 0, 0, 0, 535, 2941, 1, 0, 0, 0, 537, 2955, 1, 0, 0, 0, 539, 2970, 1, 0, 0, 0, 541, 2977, 1, 0, 0, 0, 543, 2984, 1, 0, 0, 0, 545, 2992, 1, 0, 0, 0, 547, 3001, 1, 0, 0, 0, 549, 3024, 1, 0, 0, 0, 551, 3033, 1, 0, 0, 0, 553, 3050, 1, 0, 0, 0, 555, 3086, 1, 0, 0, 0, 557, 3092, 1, 0, 0, 0, 559, 3109, 1, 0, 0, 0, 561, 3126, 1, 0, 0, 0, 563, 3140, 1, 0, 0, 0, 565, 3157, 1, 0, 0, 0, 567, 3164, 1, 0, 0, 0, 569, 3191, 1, 0, 0, 0, 571, 3198, 1, 0, 0, 0, 573, 3204, 1, 0, 0, 0, 575, 3214, 1, 0, 0, 0, 577, 3235, 1, 0, 0, 0, 579, 3255, 1, 0, 0, 0, 581, 3269, 1, 0, 0, 0, 583, 3290, 1, 0, 0, 0, 585, 3298, 1, 0, 0, 0, 587, 3316, 1, 0, 0, 0, 589, 3340, 1, 0, 0, 0, 591, 3355, 1, 0, 0, 0, 593, 3376, 1, 0, 0, 0, 595, 3385, 1, 0, 0, 0, 597, 3397, 1, 0, 0, 0, 599, 3411, 1, 0, 0, 0, 601, 3426, 1, 0, 0, 0, 603, 3445, 1, 0, 0, 0, 605, 3453, 1, 0, 0, 0, 607, 3458, 1, 0, 0, 0, 609, 3470, 1, 0, 0, 0, 611, 3480, 1, 0, 0, 0, 613, 3485, 1, 0, 0, 0, 615, 3502, 1, 0, 0, 0, 617, 3512, 1, 0, 0, 0, 619, 3521, 1, 0, 0, 0, 621, 3531, 1, 0, 0, 0, 623, 3549, 1, 0, 0, 0, 625, 3551, 1, 0, 0, 0, 627, 3553, 1, 0, 0, 0, 629, 3555, 1, 0, 0, 0, 631, 3557, 1, 0, 0, 0, 633, 3559, 1, 0, 0, 0, 635, 3563, 1, 0, 0, 0, 637, 3567, 1, 0, 0, 0, 639, 3569, 1, 0, 0, 0, 641, 3571, 1, 0, 0, 0, 643, 3573, 1, 0, 0, 0, 645, 3575, 1, 0, 0, 0, 647, 3577, 1, 0, 0, 0, 649, 3579, 1, 0, 0, 0, 651, 3581, 1, 0, 0, 0, 653, 3583, 1, 0, 0, 0, 655, 3585, 1, 0, 0, 0, 657, 3587, 1, 0, 0, 0, 659, 3589, 1, 0, 0, 0, 661, 3591, 1, 0, 0, 0, 663, 3593, 1, 0, 0, 0, 665, 3595, 1, 0, 0, 0, 667, 3597, 1, 0, 0, 0, 669, 3599, 1, 0, 0, 0, 671, 3601, 1, 0, 0, 0, 673, 3603, 1, 0, 0, 0, 675, 3605, 1, 0, 0, 0, 677, 3607, 1, 0, 0, 0, 679, 3609, 1, 0, 0, 0, 681, 3611, 1, 0, 0, 0, 683, 3613, 1, 0, 0, 0, 685, 3616, 1, 0, 0, 0, 687, 3619, 1, 0, 0, 0, 689, 3642, 1, 0, 0, 0, 691, 3687, 1, 0, 0, 0, 693, 3689, 1, 0, 0, 0, 695, 3692, 1, 0, 0, 0, 697, 3694, 1, 0, 0, 0, 699, 3696, 1, 0, 0, 0, 701, 3698, 1, 0, 0, 0, 703, 3700, 1, 0, 0, 0, 705, 3710, 1, 0, 0, 0, 707, 3720, 1, 0, 0, 0, 709, 3733, 1, 0, 0, 0, 711, 3746, 1, 0, 0, 0, 713, 3759, 1, 0, 0, 0, 715, 3761, 1, 0, 0, 0, 717, 3763, 1, 0, 0, 0, 719, 3772, 1, 0, 0, 0, 721, 723, 7, 0, 0, 0, 722, 721, 1, 0, 0, 0, 723, 724, 1, 0, 0, 0, 724, 722, 1, 0, 0, 0, 724, 725, 1, 0, 0, 0, 725, 726, 1, 0, 0, 0, 726, 727, 6, 0, 0, 0, 727, 2, 1, 0, 0, 0, 728, 729, 5, 47, 0, 0, 729, 730, 5, 42, 0, 0, 730, 731, 5, 33, 0, 0, 731, 733, 1, 0, 0, 0, 732, 734, 9, 0, 0, 0, 733, 732, 1, 0, 0, 0, 734, 735, 1, 0, 0, 0, 735, 736, 1, 0, 0, 0, 735, 733, 1, 0, 0, 0, 736, 737, 1, 0, 0, 0, 737, 738, 5, 42, 0, 0, 738, 739, 5, 47, 0, 0, 739, 740, 1, 0, 0, 0, 740, 741, 6, 1, 1, 0, 741, 4, 1, 0, 0, 0, 742, 743, 5, 47, 0, 0, 743, 744, 5, 42, 0, 0, 744, 748, 1, 0, 0, 0, 745, 747, 9, 0, 0, 0, 746, 745, 1, 0, 0, 0, 747, 750, 1, 0, 0, 0, 748, 749, 1, 0, 0, 0, 748, 746, 1, 0, 0, 0, 749, 751, 1, 0, 0, 0, 750, 748, 1, 0, 0, 0, 751, 752, 5, 42, 0, 0, 752, 753, 5, 47, 0, 0, 753, 754, 1, 0, 0, 0, 754, 755, 6, 2, 0, 0, 755, 6, 1, 0, 0, 0, 756, 757, 5, 45, 0, 0, 757, 758, 5, 45, 0, 0, 758, 761, 5, 32, 0, 0, 759, 761, 5, 35, 0, 0, 760, 756, 1, 0, 0, 0, 760, 759, 1, 0, 0, 0, 761, 765, 1, 0, 0, 0, 762, 764, 8, 1, 0, 0, 763, 762, 1, 0, 0, 0, 764, 767, 1, 0, 0, 0, 765, 763, 1, 0, 0, 0, 765, 766, 1, 0, 0, 0, 766, 773, 1, 0, 0, 0, 767, 765, 1, 0, 0, 0, 768, 770, 5, 13, 0, 0, 769, 768, 1, 0, 0, 0, 769, 770, 1, 0, 0, 0, 770, 771, 1, 0, 0, 0, 771, 774, 5, 10, 0, 0, 772, 774, 5, 0, 0, 1, 773, 769, 1, 0, 0, 0, 773, 772, 1, 0, 0, 0, 774, 786, 1, 0, 0, 0, 775, 776, 5, 45, 0, 0, 776, 777, 5, 45, 0, 0, 777, 783, 1, 0, 0, 0, 778, 780, 5, 13, 0, 0, 779, 778, 1, 0, 0, 0, 779, 780, 1, 0, 0, 0, 780, 781, 1, 0, 0, 0, 781, 784, 5, 10, 0, 0, 782, 784, 5, 0, 0, 1, 783, 779, 1, 0, 0, 0, 783, 782, 1, 0, 0, 0, 784, 786, 1, 0, 0, 0, 785, 760, 1, 0, 0, 0, 785, 775, 1, 0, 0, 0, 786, 787, 1, 0, 0, 0, 787, 788, 6, 3, 0, 0, 788, 8, 1, 0, 0, 0, 789, 790, 7, 2, 0, 0, 790, 791, 7, 3, 0, 0, 791, 792, 7, 3, 0, 0, 792, 10, 1, 0, 0, 0, 793, 794, 7, 2, 0, 0, 794, 795, 7, 4, 0, 0, 795, 796, 7, 5, 0, 0, 796, 12, 1, 0, 0, 0, 797, 798, 7, 2, 0, 0, 798, 799, 7, 6, 0, 0, 799, 14, 1, 0, 0, 0, 800, 801, 7, 2, 0, 0, 801, 802, 7, 6, 0, 0, 802, 803, 7, 7, 0, 0, 803, 16, 1, 0, 0, 0, 804, 805, 7, 8, 0, 0, 805, 806, 7, 9, 0, 0, 806, 807, 7, 9, 0, 0, 807, 808, 7, 3, 0, 0, 808, 809, 7, 10, 0, 0, 809, 810, 7, 2, 0, 0, 810, 811, 7, 4, 0, 0, 811, 18, 1, 0, 0, 0, 812, 813, 7, 8, 0, 0, 813, 814, 7, 10, 0, 0, 814, 815, 7, 11, 0, 0, 815, 816, 7, 12, 0, 0, 816, 817, 7, 10, 0, 0, 817, 818, 7, 10, 0, 0, 818, 819, 7, 4, 0, 0, 819, 20, 1, 0, 0, 0, 820, 821, 7, 8, 0, 0, 821, 822, 7, 13, 0, 0, 822, 22, 1, 0, 0, 0, 823, 824, 7, 7, 0, 0, 824, 825, 7, 2, 0, 0, 825, 826, 7, 6, 0, 0, 826, 827, 7, 10, 0, 0, 827, 24, 1, 0, 0, 0, 828, 829, 7, 7, 0, 0, 829, 830, 7, 2, 0, 0, 830, 831, 7, 6, 0, 0, 831, 832, 7, 11, 0, 0, 832, 26, 1, 0, 0, 0, 833, 834, 7, 7, 0, 0, 834, 835, 7, 14, 0, 0, 835, 836, 7, 9, 0, 0, 836, 837, 7, 6, 0, 0, 837, 838, 7, 6, 0, 0, 838, 28, 1, 0, 0, 0, 839, 840, 7, 7, 0, 0, 840, 841, 7, 9, 0, 0, 841, 842, 7, 3, 0, 0, 842, 843, 7, 15, 0, 0, 843, 844, 7, 16, 0, 0, 844, 845, 7, 4, 0, 0, 845, 846, 7, 6, 0, 0, 846, 30, 1, 0, 0, 0, 847, 848, 7, 5, 0, 0, 848, 849, 7, 2, 0, 0, 849, 850, 7, 11, 0, 0, 850, 851, 7, 10, 0, 0, 851, 852, 7, 11, 0, 0, 852, 853, 7, 17, 0, 0, 853, 854, 7, 16, 0, 0, 854, 855, 7, 10, 0, 0, 855, 32, 1, 0, 0, 0, 856, 857, 7, 5, 0, 0, 857, 858, 7, 10, 0, 0, 858, 859, 7, 3, 0, 0, 859, 860, 7, 10, 0, 0, 860, 861, 7, 11, 0, 0, 861, 862, 7, 10, 0, 0, 862, 34, 1, 0, 0, 0, 863, 864, 7, 5, 0, 0, 864, 865, 7, 10, 0, 0, 865, 866, 7, 6, 0, 0, 866, 867, 7, 7, 0, 0, 867, 36, 1, 0, 0, 0, 868, 869, 7, 5, 0, 0, 869, 870, 7, 10, 0, 0, 870, 871, 7, 6, 0, 0, 871, 872, 7, 7, 0, 0, 872, 873, 7, 14, 0, 0, 873, 874, 7, 17, 0, 0, 874, 875, 7, 8, 0, 0, 875, 876, 7, 10, 0, 0, 876, 38, 1, 0, 0, 0, 877, 878, 7, 5, 0, 0, 878, 879, 7, 17, 0, 0, 879, 880, 7, 6, 0, 0, 880, 881, 7, 11, 0, 0, 881, 882, 7, 17, 0, 0, 882, 883, 7, 4, 0, 0, 883, 884, 7, 7, 0, 0, 884, 885, 7, 11, 0, 0, 885, 40, 1, 0, 0, 0, 886, 887, 7, 5, 0, 0, 887, 888, 7, 9, 0, 0, 888, 889, 7, 15, 0, 0, 889, 890, 7, 8, 0, 0, 890, 891, 7, 3, 0, 0, 891, 892, 7, 10, 0, 0, 892, 42, 1, 0, 0, 0, 893, 894, 7, 10, 0, 0, 894, 895, 7, 3, 0, 0, 895, 896, 7, 6, 0, 0, 896, 897, 7, 10, 0, 0, 897, 44, 1, 0, 0, 0, 898, 899, 7, 10, 0, 0, 899, 900, 7, 18, 0, 0, 900, 901, 7, 17, 0, 0, 901, 902, 7, 6, 0, 0, 902, 903, 7, 11, 0, 0, 903, 904, 7, 6, 0, 0, 904, 46, 1, 0, 0, 0, 905, 906, 7, 19, 0, 0, 906, 907, 7, 2, 0, 0, 907, 908, 7, 3, 0, 0, 908, 909, 7, 6, 0, 0, 909, 910, 7, 10, 0, 0, 910, 48, 1, 0, 0, 0, 911, 912, 7, 19, 0, 0, 912, 913, 7, 3, 0, 0, 913, 914, 7, 9, 0, 0, 914, 915, 7, 2, 0, 0, 915, 916, 7, 11, 0, 0, 916, 50, 1, 0, 0, 0, 917, 918, 7, 19, 0, 0, 918, 919, 7, 17, 0, 0, 919, 920, 7, 14, 0, 0, 920, 921, 7, 6, 0, 0, 921, 922, 7, 11, 0, 0, 922, 52, 1, 0, 0, 0, 923, 924, 7, 19, 0, 0, 924, 925, 7, 14, 0, 0, 925, 926, 7, 9, 0, 0, 926, 927, 7, 16, 0, 0, 927, 54, 1, 0, 0, 0, 928, 929, 7, 20, 0, 0, 929, 930, 7, 14, 0, 0, 930, 931, 7, 9, 0, 0, 931, 932, 7, 15, 0, 0, 932, 933, 7, 21, 0, 0, 933, 56, 1, 0, 0, 0, 934, 935, 7, 22, 0, 0, 935, 936, 7, 2, 0, 0, 936, 937, 7, 23, 0, 0, 937, 938, 7, 17, 0, 0, 938, 939, 7, 4, 0, 0, 939, 940, 7, 20, 0, 0, 940, 58, 1, 0, 0, 0, 941, 942, 7, 17, 0, 0, 942, 943, 7, 4, 0, 0, 943, 60, 1, 0, 0, 0, 944, 945, 7, 17, 0, 0, 945, 946, 7, 4, 0, 0, 946, 947, 7, 4, 0, 0, 947, 948, 7, 10, 0, 0, 948, 949, 7, 14, 0, 0, 949, 62, 1, 0, 0, 0, 950, 951, 7, 17, 0, 0, 951, 952, 7, 4, 0, 0, 952, 953, 7, 11, 0, 0, 953, 64, 1, 0, 0, 0, 954, 955, 7, 17, 0, 0, 955, 956, 7, 4, 0, 0, 956, 957, 7, 11, 0, 0, 957, 958, 7, 10, 0, 0, 958, 959, 7, 20, 0, 0, 959, 960, 7, 10, 0, 0, 960, 961, 7, 14, 0, 0, 961, 66, 1, 0, 0, 0, 962, 963, 7, 17, 0, 0, 963, 964, 7, 6, 0, 0, 964, 68, 1, 0, 0, 0, 965, 966, 7, 24, 0, 0, 966, 967, 7, 9, 0, 0, 967, 968, 7, 17, 0, 0, 968, 969, 7, 4, 0, 0, 969, 70, 1, 0, 0, 0, 970, 971, 7, 3, 0, 0, 971, 972, 7, 2, 0, 0, 972, 973, 7, 6, 0, 0, 973, 974, 7, 11, 0, 0, 974, 72, 1, 0, 0, 0, 975, 976, 7, 3, 0, 0, 976, 977, 7, 10, 0, 0, 977, 978, 7, 19, 0, 0, 978, 979, 7, 11, 0, 0, 979, 74, 1, 0, 0, 0, 980, 981, 7, 3, 0, 0, 981, 982, 7, 17, 0, 0, 982, 983, 7, 25, 0, 0, 983, 984, 7, 10, 0, 0, 984, 76, 1, 0, 0, 0, 985, 986, 7, 3, 0, 0, 986, 987, 7, 17, 0, 0, 987, 988, 7, 16, 0, 0, 988, 989, 7, 17, 0, 0, 989, 990, 7, 11, 0, 0, 990, 78, 1, 0, 0, 0, 991, 992, 7, 3, 0, 0, 992, 993, 7, 9, 0, 0, 993, 994, 7, 4, 0, 0, 994, 995, 7, 20, 0, 0, 995, 80, 1, 0, 0, 0, 996, 997, 7, 16, 0, 0, 997, 998, 7, 2, 0, 0, 998, 999, 7, 11, 0, 0, 999, 1000, 7, 7, 0, 0, 1000, 1001, 7, 22, 0, 0, 1001, 82, 1, 0, 0, 0, 1002, 1003, 7, 4, 0, 0, 1003, 1004, 7, 2, 0, 0, 1004, 1005, 7, 11, 0, 0, 1005, 1006, 7, 15, 0, 0, 1006, 1007, 7, 14, 0, 0, 1007, 1008, 7, 2, 0, 0, 1008, 1009, 7, 3, 0, 0, 1009, 84, 1, 0, 0, 0, 1010, 1011, 7, 16, 0, 0, 1011, 1012, 7, 17, 0, 0, 1012, 1013, 7, 6, 0, 0, 1013, 1014, 7, 6, 0, 0, 1014, 1015, 7, 17, 0, 0, 1015, 1016, 7, 4, 0, 0, 1016, 1017, 7, 20, 0, 0, 1017, 86, 1, 0, 0, 0, 1018, 1019, 7, 4, 0, 0, 1019, 1020, 7, 9, 0, 0, 1020, 1021, 7, 11, 0, 0, 1021, 88, 1, 0, 0, 0, 1022, 1023, 7, 4, 0, 0, 1023, 1024, 7, 15, 0, 0, 1024, 1025, 7, 3, 0, 0, 1025, 1026, 7, 3, 0, 0, 1026, 90, 1, 0, 0, 0, 1027, 1028, 7, 4, 0, 0, 1028, 1029, 7, 15, 0, 0, 1029, 1030, 7, 3, 0, 0, 1030, 1031, 7, 3, 0, 0, 1031, 1032, 7, 6, 0, 0, 1032, 92, 1, 0, 0, 0, 1033, 1034, 7, 9, 0, 0, 1034, 1035, 7, 4, 0, 0, 1035, 94, 1, 0, 0, 0, 1036, 1037, 7, 9, 0, 0, 1037, 1038, 7, 14, 0, 0, 1038, 96, 1, 0, 0, 0, 1039, 1040, 7, 9, 0, 0, 1040, 1041, 7, 14, 0, 0, 1041, 1042, 7, 5, 0, 0, 1042, 1043, 7, 10, 0, 0, 1043, 1044, 7, 14, 0, 0, 1044, 98, 1, 0, 0, 0, 1045, 1046, 7, 9, 0, 0, 1046, 1047, 7, 15, 0, 0, 1047, 1048, 7, 11, 0, 0, 1048, 1049, 7, 10, 0, 0, 1049, 1050, 7, 14, 0, 0, 1050, 100, 1, 0, 0, 0, 1051, 1052, 7, 9, 0, 0, 1052, 1053, 7, 23, 0, 0, 1053, 1054, 7, 10, 0, 0, 1054, 1055, 7, 14, 0, 0, 1055, 102, 1, 0, 0, 0, 1056, 1057, 7, 21, 0, 0, 1057, 1058, 7, 2, 0, 0, 1058, 1059, 7, 14, 0, 0, 1059, 1060, 7, 11, 0, 0, 1060, 1061, 7, 17, 0, 0, 1061, 1062, 7, 11, 0, 0, 1062, 1063, 7, 17, 0, 0, 1063, 1064, 7, 9, 0, 0, 1064, 1065, 7, 4, 0, 0, 1065, 104, 1, 0, 0, 0, 1066, 1067, 7, 14, 0, 0, 1067, 1068, 7, 10, 0, 0, 1068, 1069, 7, 20, 0, 0, 1069, 1070, 7, 10, 0, 0, 1070, 1071, 7, 18, 0, 0, 1071, 1072, 7, 21, 0, 0, 1072, 106, 1, 0, 0, 0, 1073, 1074, 7, 14, 0, 0, 1074, 1075, 7, 17, 0, 0, 1075, 1076, 7, 20, 0, 0, 1076, 1077, 7, 22, 0, 0, 1077, 1078, 7, 11, 0, 0, 1078, 108, 1, 0, 0, 0, 1079, 1080, 7, 6, 0, 0, 1080, 1081, 7, 10, 0, 0, 1081, 1082, 7, 3, 0, 0, 1082, 1083, 7, 10, 0, 0, 1083, 1084, 7, 7, 0, 0, 1084, 1085, 7, 11, 0, 0, 1085, 110, 1, 0, 0, 0, 1086, 1087, 7, 6, 0, 0, 1087, 1088, 7, 22, 0, 0, 1088, 1089, 7, 9, 0, 0, 1089, 1090, 7, 12, 0, 0, 1090, 112, 1, 0, 0, 0, 1091, 1092, 7, 6, 0, 0, 1092, 1093, 7, 11, 0, 0, 1093, 1094, 7, 14, 0, 0, 1094, 1095, 7, 17, 0, 0, 1095, 1096, 7, 4, 0, 0, 1096, 1097, 7, 20, 0, 0, 1097, 114, 1, 0, 0, 0, 1098, 1099, 7, 11, 0, 0, 1099, 1100, 7, 22, 0, 0, 1100, 1101, 7, 10, 0, 0, 1101, 1102, 7, 4, 0, 0, 1102, 116, 1, 0, 0, 0, 1103, 1104, 7, 11, 0, 0, 1104, 1105, 7, 14, 0, 0, 1105, 1106, 7, 15, 0, 0, 1106, 1107, 7, 10, 0, 0, 1107, 118, 1, 0, 0, 0, 1108, 1109, 7, 15, 0, 0, 1109, 1110, 7, 4, 0, 0, 1110, 1111, 7, 17, 0, 0, 1111, 1112, 7, 9, 0, 0, 1112, 1113, 7, 4, 0, 0, 1113, 120, 1, 0, 0, 0, 1114, 1115, 7, 15, 0, 0, 1115, 1116, 7, 6, 0, 0, 1116, 1117, 7, 17, 0, 0, 1117, 1118, 7, 4, 0, 0, 1118, 1119, 7, 20, 0, 0, 1119, 122, 1, 0, 0, 0, 1120, 1121, 7, 12, 0, 0, 1121, 1122, 7, 22, 0, 0, 1122, 1123, 7, 10, 0, 0, 1123, 1124, 7, 4, 0, 0, 1124, 124, 1, 0, 0, 0, 1125, 1126, 7, 12, 0, 0, 1126, 1127, 7, 22, 0, 0, 1127, 1128, 7, 10, 0, 0, 1128, 1129, 7, 14, 0, 0, 1129, 1130, 7, 10, 0, 0, 1130, 126, 1, 0, 0, 0, 1131, 1132, 7, 16, 0, 0, 1132, 1133, 7, 17, 0, 0, 1133, 1134, 7, 4, 0, 0, 1134, 1135, 7, 15, 0, 0, 1135, 1136, 7, 6, 0, 0, 1136, 128, 1, 0, 0, 0, 1137, 1138, 7, 2, 0, 0, 1138, 1139, 7, 23, 0, 0, 1139, 1140, 7, 20, 0, 0, 1140, 130, 1, 0, 0, 0, 1141, 1142, 7, 7, 0, 0, 1142, 1143, 7, 9, 0, 0, 1143, 1144, 7, 15, 0, 0, 1144, 1145, 7, 4, 0, 0, 1145, 1146, 7, 11, 0, 0, 1146, 132, 1, 0, 0, 0, 1147, 1148, 7, 16, 0, 0, 1148, 1149, 7, 2, 0, 0, 1149, 1150, 7, 18, 0, 0, 1150, 134, 1, 0, 0, 0, 1151, 1152, 7, 16, 0, 0, 1152, 1153, 7, 17, 0, 0, 1153, 1154, 7, 4, 0, 0, 1154, 136, 1, 0, 0, 0, 1155, 1156, 7, 6, 0, 0, 1156, 1157, 7, 15, 0, 0, 1157, 1158, 7, 16, 0, 0, 1158, 138, 1, 0, 0, 0, 1159, 1160, 7, 23, 0, 0, 1160, 1161, 7, 2, 0, 0, 1161, 1162, 7, 14, 0, 0, 1162, 1163, 5, 95, 0, 0, 1163, 1164, 7, 21, 0, 0, 1164, 1165, 7, 9, 0, 0, 1165, 1166, 7, 21, 0, 0, 1166, 140, 1, 0, 0, 0, 1167, 1168, 7, 23, 0, 0, 1168, 1169, 7, 2, 0, 0, 1169, 1170, 7, 14, 0, 0, 1170, 1171, 5, 95, 0, 0, 1171, 1172, 7, 6, 0, 0, 1172, 1173, 7, 2, 0, 0, 1173, 1174, 7, 16, 0, 0, 1174, 1175, 7, 21, 0, 0, 1175, 142, 1, 0, 0, 0, 1176, 1177, 7, 23, 0, 0, 1177, 1178, 7, 2, 0, 0, 1178, 1179, 7, 14, 0, 0, 1179, 1180, 7, 17, 0, 0, 1180, 1181, 7, 2, 0, 0, 1181, 1182, 7, 4, 0, 0, 1182, 1183, 7, 7, 0, 0, 1183, 1184, 7, 10, 0, 0, 1184, 144, 1, 0, 0, 0, 1185, 1186, 7, 6, 0, 0, 1186, 1187, 7, 11, 0, 0, 1187, 1188, 7, 5, 0, 0, 1188, 146, 1, 0, 0, 0, 1189, 1190, 7, 6, 0, 0, 1190, 1191, 7, 11, 0, 0, 1191, 1192, 7, 5, 0, 0, 1192, 1193, 7, 5, 0, 0, 1193, 1194, 7, 10, 0, 0, 1194, 1195, 7, 23, 0, 0, 1195, 148, 1, 0, 0, 0, 1196, 1197, 7, 6, 0, 0, 1197, 1198, 7, 11, 0, 0, 1198, 1199, 7, 5, 0, 0, 1199, 1200, 7, 5, 0, 0, 1200, 1201, 7, 10, 0, 0, 1201, 1202, 7, 23, 0, 0, 1202, 1203, 5, 95, 0, 0, 1203, 1204, 7, 21, 0, 0, 1204, 1205, 7, 9, 0, 0, 1205, 1206, 7, 21, 0, 0, 1206, 150, 1, 0, 0, 0, 1207, 1208, 7, 6, 0, 0, 1208, 1209, 7, 11, 0, 0, 1209, 1210, 7, 5, 0, 0, 1210, 1211, 7, 5, 0, 0, 1211, 1212, 7, 10, 0, 0, 1212, 1213, 7, 23, 0, 0, 1213, 1214, 5, 95, 0, 0, 1214, 1215, 7, 6, 0, 0, 1215, 1216, 7, 2, 0, 0, 1216, 1217, 7, 16, 0, 0, 1217, 1218, 7, 21, 0, 0, 1218, 152, 1, 0, 0, 0, 1219, 1220, 7, 6, 0, 0, 1220, 1221, 7, 15, 0, 0, 1221, 1222, 7, 8, 0, 0, 1222, 1223, 7, 6, 0, 0, 1223, 1224, 7, 11, 0, 0, 1224, 1225, 7, 14, 0, 0, 1225, 1226, 7, 17, 0, 0, 1226, 1227, 7, 4, 0, 0, 1227, 1228, 7, 20, 0, 0, 1228, 154, 1, 0, 0, 0, 1229, 1230, 7, 11, 0, 0, 1230, 1231, 7, 14, 0, 0, 1231, 1232, 7, 17, 0, 0, 1232, 1233, 7, 16, 0, 0, 1233, 156, 1, 0, 0, 0, 1234, 1235, 7, 10, 0, 0, 1235, 1236, 7, 4, 0, 0, 1236, 1237, 7, 5, 0, 0, 1237, 158, 1, 0, 0, 0, 1238, 1239, 7, 19, 0, 0, 1239, 1240, 7, 15, 0, 0, 1240, 1241, 7, 3, 0, 0, 1241, 1242, 7, 3, 0, 0, 1242, 160, 1, 0, 0, 0, 1243, 1244, 7, 9, 0, 0, 1244, 1245, 7, 19, 0, 0, 1245, 1246, 7, 19, 0, 0, 1246, 1247, 7, 6, 0, 0, 1247, 1248, 7, 10, 0, 0, 1248, 1249, 7, 11, 0, 0, 1249, 162, 1, 0, 0, 0, 1250, 1251, 7, 17, 0, 0, 1251, 1252, 7, 4, 0, 0, 1252, 1253, 7, 11, 0, 0, 1253, 1254, 7, 10, 0, 0, 1254, 1255, 7, 14, 0, 0, 1255, 1256, 7, 23, 0, 0, 1256, 1257, 7, 2, 0, 0, 1257, 1258, 7, 3, 0, 0, 1258, 164, 1, 0, 0, 0, 1259, 1260, 7, 16, 0, 0, 1260, 1261, 7, 17, 0, 0, 1261, 1262, 7, 7, 0, 0, 1262, 1263, 7, 14, 0, 0, 1263, 1264, 7, 9, 0, 0, 1264, 1265, 7, 6, 0, 0, 1265, 1266, 7, 10, 0, 0, 1266, 1267, 7, 7, 0, 0, 1267, 1268, 7, 9, 0, 0, 1268, 1269, 7, 4, 0, 0, 1269, 1270, 7, 5, 0, 0, 1270, 166, 1, 0, 0, 0, 1271, 1272, 7, 6, 0, 0, 1272, 1273, 7, 10, 0, 0, 1273, 1274, 7, 7, 0, 0, 1274, 1275, 7, 9, 0, 0, 1275, 1276, 7, 4, 0, 0, 1276, 1277, 7, 5, 0, 0, 1277, 168, 1, 0, 0, 0, 1278, 1279, 7, 16, 0, 0, 1279, 1280, 7, 17, 0, 0, 1280, 1281, 7, 4, 0, 0, 1281, 1282, 7, 15, 0, 0, 1282, 1283, 7, 11, 0, 0, 1283, 1284, 7, 10, 0, 0, 1284, 170, 1, 0, 0, 0, 1285, 1286, 7, 22, 0, 0, 1286, 1287, 7, 9, 0, 0, 1287, 1288, 7, 15, 0, 0, 1288, 1289, 7, 14, 0, 0, 1289, 172, 1, 0, 0, 0, 1290, 1291, 7, 5, 0, 0, 1291, 1292, 7, 2, 0, 0, 1292, 1293, 7, 13, 0, 0, 1293, 174, 1, 0, 0, 0, 1294, 1295, 7, 12, 0, 0, 1295, 1296, 7, 10, 0, 0, 1296, 1297, 7, 10, 0, 0, 1297, 1298, 7, 25, 0, 0, 1298, 176, 1, 0, 0, 0, 1299, 1300, 7, 16, 0, 0, 1300, 1301, 7, 9, 0, 0, 1301, 1302, 7, 4, 0, 0, 1302, 1303, 7, 11, 0, 0, 1303, 1304, 7, 22, 0, 0, 1304, 178, 1, 0, 0, 0, 1305, 1306, 7, 26, 0, 0, 1306, 1307, 7, 15, 0, 0, 1307, 1308, 7, 2, 0, 0, 1308, 1309, 7, 14, 0, 0, 1309, 1310, 7, 11, 0, 0, 1310, 1311, 7, 10, 0, 0, 1311, 1312, 7, 14, 0, 0, 1312, 180, 1, 0, 0, 0, 1313, 1314, 7, 13, 0, 0, 1314, 1315, 7, 10, 0, 0, 1315, 1316, 7, 2, 0, 0, 1316, 1317, 7, 14, 0, 0, 1317, 182, 1, 0, 0, 0, 1318, 1319, 7, 6, 0, 0, 1319, 1320, 7, 10, 0, 0, 1320, 1321, 7, 7, 0, 0, 1321, 1322, 7, 9, 0, 0, 1322, 1323, 7, 4, 0, 0, 1323, 1324, 7, 5, 0, 0, 1324, 1325, 5, 95, 0, 0, 1325, 1326, 7, 16, 0, 0, 1326, 1327, 7, 17, 0, 0, 1327, 1328, 7, 7, 0, 0, 1328, 1329, 7, 14, 0, 0, 1329, 1330, 7, 9, 0, 0, 1330, 1331, 7, 6, 0, 0, 1331, 1332, 7, 10, 0, 0, 1332, 1333, 7, 7, 0, 0, 1333, 1334, 7, 9, 0, 0, 1334, 1335, 7, 4, 0, 0, 1335, 1336, 7, 5, 0, 0, 1336, 184, 1, 0, 0, 0, 1337, 1338, 7, 16, 0, 0, 1338, 1339, 7, 17, 0, 0, 1339, 1340, 7, 4, 0, 0, 1340, 1341, 7, 15, 0, 0, 1341, 1342, 7, 11, 0, 0, 1342, 1343, 7, 10, 0, 0, 1343, 1344, 5, 95, 0, 0, 1344, 1345, 7, 16, 0, 0, 1345, 1346, 7, 17, 0, 0, 1346, 1347, 7, 7, 0, 0, 1347, 1348, 7, 14, 0, 0, 1348, 1349, 7, 9, 0, 0, 1349, 1350, 7, 6, 0, 0, 1350, 1351, 7, 10, 0, 0, 1351, 1352, 7, 7, 0, 0, 1352, 1353, 7, 9, 0, 0, 1353, 1354, 7, 4, 0, 0, 1354, 1355, 7, 5, 0, 0, 1355, 186, 1, 0, 0, 0, 1356, 1357, 7, 16, 0, 0, 1357, 1358, 7, 17, 0, 0, 1358, 1359, 7, 4, 0, 0, 1359, 1360, 7, 15, 0, 0, 1360, 1361, 7, 11, 0, 0, 1361, 1362, 7, 10, 0, 0, 1362, 1363, 5, 95, 0, 0, 1363, 1364, 7, 6, 0, 0, 1364, 1365, 7, 10, 0, 0, 1365, 1366, 7, 7, 0, 0, 1366, 1367, 7, 9, 0, 0, 1367, 1368, 7, 4, 0, 0, 1368, 1369, 7, 5, 0, 0, 1369, 188, 1, 0, 0, 0, 1370, 1371, 7, 22, 0, 0, 1371, 1372, 7, 9, 0, 0, 1372, 1373, 7, 15, 0, 0, 1373, 1374, 7, 14, 0, 0, 1374, 1375, 5, 95, 0, 0, 1375, 1376, 7, 16, 0, 0, 1376, 1377, 7, 17, 0, 0, 1377, 1378, 7, 7, 0, 0, 1378, 1379, 7, 14, 0, 0, 1379, 1380, 7, 9, 0, 0, 1380, 1381, 7, 6, 0, 0, 1381, 1382, 7, 10, 0, 0, 1382, 1383, 7, 7, 0, 0, 1383, 1384, 7, 9, 0, 0, 1384, 1385, 7, 4, 0, 0, 1385, 1386, 7, 5, 0, 0, 1386, 190, 1, 0, 0, 0, 1387, 1388, 7, 22, 0, 0, 1388, 1389, 7, 9, 0, 0, 1389, 1390, 7, 15, 0, 0, 1390, 1391, 7, 14, 0, 0, 1391, 1392, 5, 95, 0, 0, 1392, 1393, 7, 6, 0, 0, 1393, 1394, 7, 10, 0, 0, 1394, 1395, 7, 7, 0, 0, 1395, 1396, 7, 9, 0, 0, 1396, 1397, 7, 4, 0, 0, 1397, 1398, 7, 5, 0, 0, 1398, 192, 1, 0, 0, 0, 1399, 1400, 7, 22, 0, 0, 1400, 1401, 7, 9, 0, 0, 1401, 1402, 7, 15, 0, 0, 1402, 1403, 7, 14, 0, 0, 1403, 1404, 5, 95, 0, 0, 1404, 1405, 7, 16, 0, 0, 1405, 1406, 7, 17, 0, 0, 1406, 1407, 7, 4, 0, 0, 1407, 1408, 7, 15, 0, 0, 1408, 1409, 7, 11, 0, 0, 1409, 1410, 7, 10, 0, 0, 1410, 194, 1, 0, 0, 0, 1411, 1412, 7, 5, 0, 0, 1412, 1413, 7, 2, 0, 0, 1413, 1414, 7, 13, 0, 0, 1414, 1415, 5, 95, 0, 0, 1415, 1416, 7, 16, 0, 0, 1416, 1417, 7, 17, 0, 0, 1417, 1418, 7, 7, 0, 0, 1418, 1419, 7, 14, 0, 0, 1419, 1420, 7, 9, 0, 0, 1420, 1421, 7, 6, 0, 0, 1421, 1422, 7, 10, 0, 0, 1422, 1423, 7, 7, 0, 0, 1423, 1424, 7, 9, 0, 0, 1424, 1425, 7, 4, 0, 0, 1425, 1426, 7, 5, 0, 0, 1426, 196, 1, 0, 0, 0, 1427, 1428, 7, 5, 0, 0, 1428, 1429, 7, 2, 0, 0, 1429, 1430, 7, 13, 0, 0, 1430, 1431, 5, 95, 0, 0, 1431, 1432, 7, 6, 0, 0, 1432, 1433, 7, 10, 0, 0, 1433, 1434, 7, 7, 0, 0, 1434, 1435, 7, 9, 0, 0, 1435, 1436, 7, 4, 0, 0, 1436, 1437, 7, 5, 0, 0, 1437, 198, 1, 0, 0, 0, 1438, 1439, 7, 5, 0, 0, 1439, 1440, 7, 2, 0, 0, 1440, 1441, 7, 13, 0, 0, 1441, 1442, 5, 95, 0, 0, 1442, 1443, 7, 16, 0, 0, 1443, 1444, 7, 17, 0, 0, 1444, 1445, 7, 4, 0, 0, 1445, 1446, 7, 15, 0, 0, 1446, 1447, 7, 11, 0, 0, 1447, 1448, 7, 10, 0, 0, 1448, 200, 1, 0, 0, 0, 1449, 1450, 7, 5, 0, 0, 1450, 1451, 7, 2, 0, 0, 1451, 1452, 7, 13, 0, 0, 1452, 1453, 5, 95, 0, 0, 1453, 1454, 7, 22, 0, 0, 1454, 1455, 7, 9, 0, 0, 1455, 1456, 7, 15, 0, 0, 1456, 1457, 7, 14, 0, 0, 1457, 202, 1, 0, 0, 0, 1458, 1459, 7, 13, 0, 0, 1459, 1460, 7, 10, 0, 0, 1460, 1461, 7, 2, 0, 0, 1461, 1462, 7, 14, 0, 0, 1462, 1463, 5, 95, 0, 0, 1463, 1464, 7, 16, 0, 0, 1464, 1465, 7, 9, 0, 0, 1465, 1466, 7, 4, 0, 0, 1466, 1467, 7, 11, 0, 0, 1467, 1468, 7, 22, 0, 0, 1468, 204, 1, 0, 0, 0, 1469, 1470, 7, 11, 0, 0, 1470, 1471, 7, 2, 0, 0, 1471, 1472, 7, 8, 0, 0, 1472, 1473, 7, 3, 0, 0, 1473, 1474, 7, 10, 0, 0, 1474, 1475, 7, 6, 0, 0, 1475, 206, 1, 0, 0, 0, 1476, 1477, 7, 2, 0, 0, 1477, 1478, 7, 8, 0, 0, 1478, 1479, 7, 6, 0, 0, 1479, 208, 1, 0, 0, 0, 1480, 1481, 7, 2, 0, 0, 1481, 1482, 7, 7, 0, 0, 1482, 1483, 7, 9, 0, 0, 1483, 1484, 7, 6, 0, 0, 1484, 210, 1, 0, 0, 0, 1485, 1486, 7, 2, 0, 0, 1486, 1487, 7, 5, 0, 0, 1487, 1488, 7, 5, 0, 0, 1488, 212, 1, 0, 0, 0, 1489, 1490, 7, 2, 0, 0, 1490, 1491, 7, 5, 0, 0, 1491, 1492, 7, 5, 0, 0, 1492, 1493, 7, 11, 0, 0, 1493, 1494, 7, 17, 0, 0, 1494, 1495, 7, 16, 0, 0, 1495, 1496, 7, 10, 0, 0, 1496, 214, 1, 0, 0, 0, 1497, 1498, 7, 2, 0, 0, 1498, 1499, 7, 6, 0, 0, 1499, 1500, 7, 7, 0, 0, 1500, 1501, 7, 17, 0, 0, 1501, 1502, 7, 17, 0, 0, 1502, 216, 1, 0, 0, 0, 1503, 1504, 7, 2, 0, 0, 1504, 1505, 7, 6, 0, 0, 1505, 1506, 7, 17, 0, 0, 1506, 1507, 7, 4, 0, 0, 1507, 218, 1, 0, 0, 0, 1508, 1509, 7, 2, 0, 0, 1509, 1510, 7, 11, 0, 0, 1510, 1511, 7, 2, 0, 0, 1511, 1512, 7, 4, 0, 0, 1512, 220, 1, 0, 0, 0, 1513, 1514, 7, 2, 0, 0, 1514, 1515, 7, 11, 0, 0, 1515, 1516, 7, 2, 0, 0, 1516, 1517, 7, 4, 0, 0, 1517, 1518, 5, 50, 0, 0, 1518, 222, 1, 0, 0, 0, 1519, 1520, 7, 7, 0, 0, 1520, 1521, 7, 8, 0, 0, 1521, 1522, 7, 14, 0, 0, 1522, 1523, 7, 11, 0, 0, 1523, 224, 1, 0, 0, 0, 1524, 1525, 7, 7, 0, 0, 1525, 1526, 7, 10, 0, 0, 1526, 1527, 7, 17, 0, 0, 1527, 1528, 7, 3, 0, 0, 1528, 226, 1, 0, 0, 0, 1529, 1530, 7, 7, 0, 0, 1530, 1531, 7, 10, 0, 0, 1531, 1532, 7, 17, 0, 0, 1532, 1533, 7, 3, 0, 0, 1533, 1534, 7, 17, 0, 0, 1534, 1535, 7, 4, 0, 0, 1535, 1536, 7, 20, 0, 0, 1536, 228, 1, 0, 0, 0, 1537, 1538, 7, 7, 0, 0, 1538, 1539, 7, 9, 0, 0, 1539, 1540, 7, 4, 0, 0, 1540, 1541, 7, 7, 0, 0, 1541, 1542, 7, 2, 0, 0, 1542, 1543, 7, 11, 0, 0, 1543, 230, 1, 0, 0, 0, 1544, 1545, 7, 7, 0, 0, 1545, 1546, 7, 9, 0, 0, 1546, 1547, 7, 4, 0, 0, 1547, 1548, 7, 7, 0, 0, 1548, 1549, 7, 2, 0, 0, 1549, 1550, 7, 11, 0, 0, 1550, 1551, 5, 95, 0, 0, 1551, 1552, 7, 12, 0, 0, 1552, 1553, 7, 6, 0, 0, 1553, 232, 1, 0, 0, 0, 1554, 1555, 7, 7, 0, 0, 1555, 1556, 7, 9, 0, 0, 1556, 1557, 7, 4, 0, 0, 1557, 1558, 7, 23, 0, 0, 1558, 234, 1, 0, 0, 0, 1559, 1560, 7, 7, 0, 0, 1560, 1561, 7, 9, 0, 0, 1561, 1562, 7, 4, 0, 0, 1562, 1563, 7, 23, 0, 0, 1563, 1564, 7, 10, 0, 0, 1564, 1565, 7, 14, 0, 0, 1565, 1566, 7, 11, 0, 0, 1566, 1567, 5, 95, 0, 0, 1567, 1568, 7, 11, 0, 0, 1568, 1569, 7, 27, 0, 0, 1569, 236, 1, 0, 0, 0, 1570, 1571, 7, 7, 0, 0, 1571, 1572, 7, 9, 0, 0, 1572, 1573, 7, 6, 0, 0, 1573, 238, 1, 0, 0, 0, 1574, 1575, 7, 7, 0, 0, 1575, 1576, 7, 9, 0, 0, 1576, 1577, 7, 6, 0, 0, 1577, 1578, 7, 22, 0, 0, 1578, 240, 1, 0, 0, 0, 1579, 1580, 7, 7, 0, 0, 1580, 1581, 7, 9, 0, 0, 1581, 1582, 7, 11, 0, 0, 1582, 242, 1, 0, 0, 0, 1583, 1584, 7, 7, 0, 0, 1584, 1585, 7, 14, 0, 0, 1585, 1586, 7, 7, 0, 0, 1586, 1587, 5, 51, 0, 0, 1587, 1588, 5, 50, 0, 0, 1588, 244, 1, 0, 0, 0, 1589, 1590, 7, 7, 0, 0, 1590, 1591, 7, 15, 0, 0, 1591, 1592, 7, 14, 0, 0, 1592, 1593, 7, 5, 0, 0, 1593, 1594, 7, 2, 0, 0, 1594, 1595, 7, 11, 0, 0, 1595, 1596, 7, 10, 0, 0, 1596, 246, 1, 0, 0, 0, 1597, 1598, 7, 7, 0, 0, 1598, 1599, 7, 15, 0, 0, 1599, 1600, 7, 14, 0, 0, 1600, 1601, 7, 11, 0, 0, 1601, 1602, 7, 17, 0, 0, 1602, 1603, 7, 16, 0, 0, 1603, 1604, 7, 10, 0, 0, 1604, 248, 1, 0, 0, 0, 1605, 1606, 7, 7, 0, 0, 1606, 1607, 7, 15, 0, 0, 1607, 1608, 7, 14, 0, 0, 1608, 1609, 7, 14, 0, 0, 1609, 1610, 7, 10, 0, 0, 1610, 1611, 7, 4, 0, 0, 1611, 1612, 7, 11, 0, 0, 1612, 1613, 5, 95, 0, 0, 1613, 1614, 7, 5, 0, 0, 1614, 1615, 7, 2, 0, 0, 1615, 1616, 7, 11, 0, 0, 1616, 1617, 7, 10, 0, 0, 1617, 250, 1, 0, 0, 0, 1618, 1619, 7, 7, 0, 0, 1619, 1620, 7, 15, 0, 0, 1620, 1621, 7, 14, 0, 0, 1621, 1622, 7, 14, 0, 0, 1622, 1623, 7, 10, 0, 0, 1623, 1624, 7, 4, 0, 0, 1624, 1625, 7, 11, 0, 0, 1625, 1626, 5, 95, 0, 0, 1626, 1627, 7, 11, 0, 0, 1627, 1628, 7, 17, 0, 0, 1628, 1629, 7, 16, 0, 0, 1629, 1630, 7, 10, 0, 0, 1630, 252, 1, 0, 0, 0, 1631, 1632, 7, 7, 0, 0, 1632, 1633, 7, 15, 0, 0, 1633, 1634, 7, 14, 0, 0, 1634, 1635, 7, 14, 0, 0, 1635, 1636, 7, 10, 0, 0, 1636, 1637, 7, 4, 0, 0, 1637, 1638, 7, 11, 0, 0, 1638, 1639, 5, 95, 0, 0, 1639, 1640, 7, 11, 0, 0, 1640, 1641, 7, 17, 0, 0, 1641, 1642, 7, 16, 0, 0, 1642, 1643, 7, 10, 0, 0, 1643, 1644, 7, 6, 0, 0, 1644, 1645, 7, 11, 0, 0, 1645, 1646, 7, 2, 0, 0, 1646, 1647, 7, 16, 0, 0, 1647, 1648, 7, 21, 0, 0, 1648, 254, 1, 0, 0, 0, 1649, 1650, 7, 5, 0, 0, 1650, 1651, 7, 2, 0, 0, 1651, 1652, 7, 11, 0, 0, 1652, 1653, 7, 10, 0, 0, 1653, 256, 1, 0, 0, 0, 1654, 1655, 7, 5, 0, 0, 1655, 1656, 7, 2, 0, 0, 1656, 1657, 7, 11, 0, 0, 1657, 1658, 7, 10, 0, 0, 1658, 1659, 5, 95, 0, 0, 1659, 1660, 7, 2, 0, 0, 1660, 1661, 7, 5, 0, 0, 1661, 1662, 7, 5, 0, 0, 1662, 258, 1, 0, 0, 0, 1663, 1664, 7, 5, 0, 0, 1664, 1665, 7, 2, 0, 0, 1665, 1666, 7, 11, 0, 0, 1666, 1667, 7, 10, 0, 0, 1667, 1668, 5, 95, 0, 0, 1668, 1669, 7, 19, 0, 0, 1669, 1670, 7, 9, 0, 0, 1670, 1671, 7, 14, 0, 0, 1671, 1672, 7, 16, 0, 0, 1672, 1673, 7, 2, 0, 0, 1673, 1674, 7, 11, 0, 0, 1674, 260, 1, 0, 0, 0, 1675, 1676, 7, 5, 0, 0, 1676, 1677, 7, 2, 0, 0, 1677, 1678, 7, 11, 0, 0, 1678, 1679, 7, 10, 0, 0, 1679, 1680, 5, 95, 0, 0, 1680, 1681, 7, 6, 0, 0, 1681, 1682, 7, 15, 0, 0, 1682, 1683, 7, 8, 0, 0, 1683, 262, 1, 0, 0, 0, 1684, 1685, 7, 5, 0, 0, 1685, 1686, 7, 2, 0, 0, 1686, 1687, 7, 11, 0, 0, 1687, 1688, 7, 10, 0, 0, 1688, 1689, 7, 5, 0, 0, 1689, 1690, 7, 17, 0, 0, 1690, 1691, 7, 19, 0, 0, 1691, 1692, 7, 19, 0, 0, 1692, 264, 1, 0, 0, 0, 1693, 1694, 7, 5, 0, 0, 1694, 1695, 7, 2, 0, 0, 1695, 1696, 7, 13, 0, 0, 1696, 1697, 7, 4, 0, 0, 1697, 1698, 7, 2, 0, 0, 1698, 1699, 7, 16, 0, 0, 1699, 1700, 7, 10, 0, 0, 1700, 266, 1, 0, 0, 0, 1701, 1702, 7, 5, 0, 0, 1702, 1703, 7, 2, 0, 0, 1703, 1704, 7, 13, 0, 0, 1704, 1705, 7, 9, 0, 0, 1705, 1706, 7, 19, 0, 0, 1706, 1707, 7, 16, 0, 0, 1707, 1708, 7, 9, 0, 0, 1708, 1709, 7, 4, 0, 0, 1709, 1710, 7, 11, 0, 0, 1710, 1711, 7, 22, 0, 0, 1711, 268, 1, 0, 0, 0, 1712, 1713, 7, 5, 0, 0, 1713, 1714, 7, 2, 0, 0, 1714, 1715, 7, 13, 0, 0, 1715, 1716, 7, 9, 0, 0, 1716, 1717, 7, 19, 0, 0, 1717, 1718, 7, 12, 0, 0, 1718, 1719, 7, 10, 0, 0, 1719, 1720, 7, 10, 0, 0, 1720, 1721, 7, 25, 0, 0, 1721, 270, 1, 0, 0, 0, 1722, 1723, 7, 5, 0, 0, 1723, 1724, 7, 2, 0, 0, 1724, 1725, 7, 13, 0, 0, 1725, 1726, 7, 9, 0, 0, 1726, 1727, 7, 19, 0, 0, 1727, 1728, 7, 13, 0, 0, 1728, 1729, 7, 10, 0, 0, 1729, 1730, 7, 2, 0, 0, 1730, 1731, 7, 14, 0, 0, 1731, 272, 1, 0, 0, 0, 1732, 1733, 7, 5, 0, 0, 1733, 1734, 7, 10, 0, 0, 1734, 1735, 7, 20, 0, 0, 1735, 1736, 7, 14, 0, 0, 1736, 1737, 7, 10, 0, 0, 1737, 1738, 7, 10, 0, 0, 1738, 1739, 7, 6, 0, 0, 1739, 274, 1, 0, 0, 0, 1740, 1741, 7, 5, 0, 0, 1741, 1742, 7, 17, 0, 0, 1742, 1743, 7, 23, 0, 0, 1743, 1744, 7, 17, 0, 0, 1744, 1745, 7, 5, 0, 0, 1745, 1746, 7, 10, 0, 0, 1746, 276, 1, 0, 0, 0, 1747, 1748, 7, 10, 0, 0, 1748, 278, 1, 0, 0, 0, 1749, 1750, 7, 10, 0, 0, 1750, 1751, 7, 18, 0, 0, 1751, 1752, 7, 21, 0, 0, 1752, 280, 1, 0, 0, 0, 1753, 1754, 7, 10, 0, 0, 1754, 1755, 7, 18, 0, 0, 1755, 1756, 7, 21, 0, 0, 1756, 1757, 7, 16, 0, 0, 1757, 1758, 5, 49, 0, 0, 1758, 282, 1, 0, 0, 0, 1759, 1760, 7, 10, 0, 0, 1760, 1761, 7, 18, 0, 0, 1761, 1762, 7, 11, 0, 0, 1762, 1763, 7, 14, 0, 0, 1763, 1764, 7, 2, 0, 0, 1764, 1765, 7, 7, 0, 0, 1765, 1766, 7, 11, 0, 0, 1766, 284, 1, 0, 0, 0, 1767, 1768, 7, 19, 0, 0, 1768, 1769, 7, 3, 0, 0, 1769, 1770, 7, 9, 0, 0, 1770, 1771, 7, 9, 0, 0, 1771, 1772, 7, 14, 0, 0, 1772, 286, 1, 0, 0, 0, 1773, 1774, 7, 19, 0, 0, 1774, 1775, 7, 14, 0, 0, 1775, 1776, 7, 9, 0, 0, 1776, 1777, 7, 16, 0, 0, 1777, 1778, 5, 95, 0, 0, 1778, 1779, 7, 5, 0, 0, 1779, 1780, 7, 2, 0, 0, 1780, 1781, 7, 13, 0, 0, 1781, 1782, 7, 6, 0, 0, 1782, 288, 1, 0, 0, 0, 1783, 1784, 7, 19, 0, 0, 1784, 1785, 7, 14, 0, 0, 1785, 1786, 7, 9, 0, 0, 1786, 1787, 7, 16, 0, 0, 1787, 1788, 5, 95, 0, 0, 1788, 1789, 7, 15, 0, 0, 1789, 1790, 7, 4, 0, 0, 1790, 1791, 7, 17, 0, 0, 1791, 1792, 7, 18, 0, 0, 1792, 1793, 7, 11, 0, 0, 1793, 1794, 7, 17, 0, 0, 1794, 1795, 7, 16, 0, 0, 1795, 1796, 7, 10, 0, 0, 1796, 290, 1, 0, 0, 0, 1797, 1798, 7, 20, 0, 0, 1798, 1799, 7, 10, 0, 0, 1799, 1800, 7, 11, 0, 0, 1800, 1801, 5, 95, 0, 0, 1801, 1802, 7, 19, 0, 0, 1802, 1803, 7, 9, 0, 0, 1803, 1804, 7, 14, 0, 0, 1804, 1805, 7, 16, 0, 0, 1805, 1806, 7, 2, 0, 0, 1806, 1807, 7, 11, 0, 0, 1807, 292, 1, 0, 0, 0, 1808, 1809, 7, 17, 0, 0, 1809, 1810, 7, 19, 0, 0, 1810, 294, 1, 0, 0, 0, 1811, 1812, 7, 17, 0, 0, 1812, 1813, 7, 19, 0, 0, 1813, 1814, 7, 4, 0, 0, 1814, 1815, 7, 15, 0, 0, 1815, 1816, 7, 3, 0, 0, 1816, 1817, 7, 3, 0, 0, 1817, 296, 1, 0, 0, 0, 1818, 1819, 7, 17, 0, 0, 1819, 1820, 7, 6, 0, 0, 1820, 1821, 7, 4, 0, 0, 1821, 1822, 7, 15, 0, 0, 1822, 1823, 7, 3, 0, 0, 1823, 1824, 7, 3, 0, 0, 1824, 298, 1, 0, 0, 0, 1825, 1826, 7, 3, 0, 0, 1826, 1827, 7, 2, 0, 0, 1827, 1828, 7, 6, 0, 0, 1828, 1829, 7, 11, 0, 0, 1829, 1830, 5, 95, 0, 0, 1830, 1831, 7, 5, 0, 0, 1831, 1832, 7, 2, 0, 0, 1832, 1833, 7, 13, 0, 0, 1833, 300, 1, 0, 0, 0, 1834, 1835, 7, 3, 0, 0, 1835, 1836, 7, 10, 0, 0, 1836, 1837, 7, 4, 0, 0, 1837, 1838, 7, 20, 0, 0, 1838, 1839, 7, 11, 0, 0, 1839, 1840, 7, 22, 0, 0, 1840, 302, 1, 0, 0, 0, 1841, 1842, 7, 3, 0, 0, 1842, 1843, 7, 4, 0, 0, 1843, 304, 1, 0, 0, 0, 1844, 1845, 7, 3, 0, 0, 1845, 1846, 7, 9, 0, 0, 1846, 1847, 7, 7, 0, 0, 1847, 1848, 7, 2, 0, 0, 1848, 1849, 7, 3, 0, 0, 1849, 1850, 7, 11, 0, 0, 1850, 1851, 7, 17, 0, 0, 1851, 1852, 7, 16, 0, 0, 1852, 1853, 7, 10, 0, 0, 1853, 306, 1, 0, 0, 0, 1854, 1855, 7, 3, 0, 0, 1855, 1856, 7, 9, 0, 0, 1856, 1857, 7, 7, 0, 0, 1857, 1858, 7, 2, 0, 0, 1858, 1859, 7, 3, 0, 0, 1859, 1860, 7, 11, 0, 0, 1860, 1861, 7, 17, 0, 0, 1861, 1862, 7, 16, 0, 0, 1862, 1863, 7, 10, 0, 0, 1863, 1864, 7, 6, 0, 0, 1864, 1865, 7, 11, 0, 0, 1865, 1866, 7, 2, 0, 0, 1866, 1867, 7, 16, 0, 0, 1867, 1868, 7, 21, 0, 0, 1868, 308, 1, 0, 0, 0, 1869, 1870, 7, 3, 0, 0, 1870, 1871, 7, 9, 0, 0, 1871, 1872, 7, 7, 0, 0, 1872, 1873, 7, 2, 0, 0, 1873, 1874, 7, 11, 0, 0, 1874, 1875, 7, 10, 0, 0, 1875, 310, 1, 0, 0, 0, 1876, 1877, 7, 3, 0, 0, 1877, 1878, 7, 9, 0, 0, 1878, 1879, 7, 20, 0, 0, 1879, 312, 1, 0, 0, 0, 1880, 1881, 7, 3, 0, 0, 1881, 1882, 7, 9, 0, 0, 1882, 1883, 7, 20, 0, 0, 1883, 1884, 5, 49, 0, 0, 1884, 1885, 5, 48, 0, 0, 1885, 314, 1, 0, 0, 0, 1886, 1887, 7, 3, 0, 0, 1887, 1888, 7, 9, 0, 0, 1888, 1889, 7, 20, 0, 0, 1889, 1890, 5, 50, 0, 0, 1890, 316, 1, 0, 0, 0, 1891, 1892, 7, 3, 0, 0, 1892, 1893, 7, 9, 0, 0, 1893, 1894, 7, 12, 0, 0, 1894, 1895, 7, 10, 0, 0, 1895, 1896, 7, 14, 0, 0, 1896, 318, 1, 0, 0, 0, 1897, 1898, 7, 3, 0, 0, 1898, 1899, 7, 11, 0, 0, 1899, 1900, 7, 14, 0, 0, 1900, 1901, 7, 17, 0, 0, 1901, 1902, 7, 16, 0, 0, 1902, 320, 1, 0, 0, 0, 1903, 1904, 7, 16, 0, 0, 1904, 1905, 7, 2, 0, 0, 1905, 1906, 7, 25, 0, 0, 1906, 1907, 7, 10, 0, 0, 1907, 1908, 7, 5, 0, 0, 1908, 1909, 7, 2, 0, 0, 1909, 1910, 7, 11, 0, 0, 1910, 1911, 7, 10, 0, 0, 1911, 322, 1, 0, 0, 0, 1912, 1913, 7, 16, 0, 0, 1913, 1914, 7, 2, 0, 0, 1914, 1915, 7, 25, 0, 0, 1915, 1916, 7, 10, 0, 0, 1916, 1917, 7, 11, 0, 0, 1917, 1918, 7, 17, 0, 0, 1918, 1919, 7, 16, 0, 0, 1919, 1920, 7, 10, 0, 0, 1920, 324, 1, 0, 0, 0, 1921, 1922, 7, 16, 0, 0, 1922, 1923, 7, 9, 0, 0, 1923, 1924, 7, 5, 0, 0, 1924, 1925, 7, 15, 0, 0, 1925, 1926, 7, 3, 0, 0, 1926, 1927, 7, 15, 0, 0, 1927, 1928, 7, 6, 0, 0, 1928, 326, 1, 0, 0, 0, 1929, 1930, 7, 16, 0, 0, 1930, 1931, 7, 9, 0, 0, 1931, 1932, 7, 4, 0, 0, 1932, 1933, 7, 11, 0, 0, 1933, 1934, 7, 22, 0, 0, 1934, 1935, 7, 4, 0, 0, 1935, 1936, 7, 2, 0, 0, 1936, 1937, 7, 16, 0, 0, 1937, 1938, 7, 10, 0, 0, 1938, 328, 1, 0, 0, 0, 1939, 1940, 7, 16, 0, 0, 1940, 1941, 7, 15, 0, 0, 1941, 1942, 7, 3, 0, 0, 1942, 1943, 7, 11, 0, 0, 1943, 1944, 7, 17, 0, 0, 1944, 1945, 7, 21, 0, 0, 1945, 1946, 7, 3, 0, 0, 1946, 1947, 7, 13, 0, 0, 1947, 330, 1, 0, 0, 0, 1948, 1949, 7, 4, 0, 0, 1949, 1950, 7, 9, 0, 0, 1950, 1951, 7, 12, 0, 0, 1951, 332, 1, 0, 0, 0, 1952, 1953, 7, 4, 0, 0, 1953, 1954, 7, 15, 0, 0, 1954, 1955, 7, 3, 0, 0, 1955, 1956, 7, 3, 0, 0, 1956, 1957, 7, 17, 0, 0, 1957, 1958, 7, 19, 0, 0, 1958, 334, 1, 0, 0, 0, 1959, 1960, 7, 21, 0, 0, 1960, 1961, 7, 10, 0, 0, 1961, 1962, 7, 14, 0, 0, 1962, 1963, 7, 17, 0, 0, 1963, 1964, 7, 9, 0, 0, 1964, 1965, 7, 5, 0, 0, 1965, 1966, 5, 95, 0, 0, 1966, 1967, 7, 2, 0, 0, 1967, 1968, 7, 5, 0, 0, 1968, 1969, 7, 5, 0, 0, 1969, 336, 1, 0, 0, 0, 1970, 1971, 7, 21, 0, 0, 1971, 1972, 7, 10, 0, 0, 1972, 1973, 7, 14, 0, 0, 1973, 1974, 7, 17, 0, 0, 1974, 1975, 7, 9, 0, 0, 1975, 1976, 7, 5, 0, 0, 1976, 1977, 5, 95, 0, 0, 1977, 1978, 7, 5, 0, 0, 1978, 1979, 7, 17, 0, 0, 1979, 1980, 7, 19, 0, 0, 1980, 1981, 7, 19, 0, 0, 1981, 338, 1, 0, 0, 0, 1982, 1983, 7, 21, 0, 0, 1983, 1984, 7, 17, 0, 0, 1984, 340, 1, 0, 0, 0, 1985, 1986, 7, 21, 0, 0, 1986, 1987, 7, 9, 0, 0, 1987, 1988, 7, 6, 0, 0, 1988, 1989, 7, 17, 0, 0, 1989, 1990, 7, 11, 0, 0, 1990, 1991, 7, 17, 0, 0, 1991, 1992, 7, 9, 0, 0, 1992, 1993, 7, 4, 0, 0, 1993, 342, 1, 0, 0, 0, 1994, 1995, 7, 21, 0, 0, 1995, 1996, 7, 9, 0, 0, 1996, 1997, 7, 12, 0, 0, 1997, 344, 1, 0, 0, 0, 1998, 1999, 7, 21, 0, 0, 1999, 2000, 7, 9, 0, 0, 2000, 2001, 7, 12, 0, 0, 2001, 2002, 7, 10, 0, 0, 2002, 2003, 7, 14, 0, 0, 2003, 346, 1, 0, 0, 0, 2004, 2005, 7, 14, 0, 0, 2005, 2006, 7, 2, 0, 0, 2006, 2007, 7, 5, 0, 0, 2007, 2008, 7, 17, 0, 0, 2008, 2009, 7, 2, 0, 0, 2009, 2010, 7, 4, 0, 0, 2010, 2011, 7, 6, 0, 0, 2011, 348, 1, 0, 0, 0, 2012, 2013, 7, 14, 0, 0, 2013, 2014, 7, 2, 0, 0, 2014, 2015, 7, 4, 0, 0, 2015, 2016, 7, 5, 0, 0, 2016, 350, 1, 0, 0, 0, 2017, 2018, 7, 14, 0, 0, 2018, 2019, 7, 10, 0, 0, 2019, 2020, 7, 21, 0, 0, 2020, 2021, 7, 3, 0, 0, 2021, 2022, 7, 2, 0, 0, 2022, 2023, 7, 7, 0, 0, 2023, 2024, 7, 10, 0, 0, 2024, 352, 1, 0, 0, 0, 2025, 2026, 7, 14, 0, 0, 2026, 2027, 7, 17, 0, 0, 2027, 2028, 7, 4, 0, 0, 2028, 2029, 7, 11, 0, 0, 2029, 354, 1, 0, 0, 0, 2030, 2031, 7, 14, 0, 0, 2031, 2032, 7, 9, 0, 0, 2032, 2033, 7, 15, 0, 0, 2033, 2034, 7, 4, 0, 0, 2034, 2035, 7, 5, 0, 0, 2035, 356, 1, 0, 0, 0, 2036, 2037, 7, 14, 0, 0, 2037, 2038, 7, 11, 0, 0, 2038, 2039, 7, 14, 0, 0, 2039, 2040, 7, 17, 0, 0, 2040, 2041, 7, 16, 0, 0, 2041, 358, 1, 0, 0, 0, 2042, 2043, 7, 14, 0, 0, 2043, 2044, 7, 10, 0, 0, 2044, 2045, 7, 23, 0, 0, 2045, 2046, 7, 10, 0, 0, 2046, 2047, 7, 14, 0, 0, 2047, 2048, 7, 6, 0, 0, 2048, 2049, 7, 10, 0, 0, 2049, 360, 1, 0, 0, 0, 2050, 2051, 7, 6, 0, 0, 2051, 2052, 7, 10, 0, 0, 2052, 2053, 7, 7, 0, 0, 2053, 2054, 5, 95, 0, 0, 2054, 2055, 7, 11, 0, 0, 2055, 2056, 7, 9, 0, 0, 2056, 2057, 5, 95, 0, 0, 2057, 2058, 7, 11, 0, 0, 2058, 2059, 7, 17, 0, 0, 2059, 2060, 7, 16, 0, 0, 2060, 2061, 7, 10, 0, 0, 2061, 362, 1, 0, 0, 0, 2062, 2063, 7, 6, 0, 0, 2063, 2064, 7, 17, 0, 0, 2064, 2065, 7, 20, 0, 0, 2065, 2066, 7, 4, 0, 0, 2066, 364, 1, 0, 0, 0, 2067, 2068, 7, 6, 0, 0, 2068, 2069, 7, 17, 0, 0, 2069, 2070, 7, 20, 0, 0, 2070, 2071, 7, 4, 0, 0, 2071, 2072, 7, 15, 0, 0, 2072, 2073, 7, 16, 0, 0, 2073, 366, 1, 0, 0, 0, 2074, 2075, 7, 6, 0, 0, 2075, 2076, 7, 17, 0, 0, 2076, 2077, 7, 4, 0, 0, 2077, 368, 1, 0, 0, 0, 2078, 2079, 7, 6, 0, 0, 2079, 2080, 7, 17, 0, 0, 2080, 2081, 7, 4, 0, 0, 2081, 2082, 7, 22, 0, 0, 2082, 370, 1, 0, 0, 0, 2083, 2084, 7, 6, 0, 0, 2084, 2085, 7, 26, 0, 0, 2085, 2086, 7, 14, 0, 0, 2086, 2087, 7, 11, 0, 0, 2087, 372, 1, 0, 0, 0, 2088, 2089, 7, 6, 0, 0, 2089, 2090, 7, 11, 0, 0, 2090, 2091, 7, 14, 0, 0, 2091, 2092, 5, 95, 0, 0, 2092, 2093, 7, 11, 0, 0, 2093, 2094, 7, 9, 0, 0, 2094, 2095, 5, 95, 0, 0, 2095, 2096, 7, 5, 0, 0, 2096, 2097, 7, 2, 0, 0, 2097, 2098, 7, 11, 0, 0, 2098, 2099, 7, 10, 0, 0, 2099, 374, 1, 0, 0, 0, 2100, 2101, 7, 6, 0, 0, 2101, 2102, 7, 15, 0, 0, 2102, 2103, 7, 8, 0, 0, 2103, 2104, 7, 5, 0, 0, 2104, 2105, 7, 2, 0, 0, 2105, 2106, 7, 11, 0, 0, 2106, 2107, 7, 10, 0, 0, 2107, 376, 1, 0, 0, 0, 2108, 2109, 7, 6, 0, 0, 2109, 2110, 7, 15, 0, 0, 2110, 2111, 7, 8, 0, 0, 2111, 2112, 7, 11, 0, 0, 2112, 2113, 7, 17, 0, 0, 2113, 2114, 7, 16, 0, 0, 2114, 2115, 7, 10, 0, 0, 2115, 378, 1, 0, 0, 0, 2116, 2117, 7, 6, 0, 0, 2117, 2118, 7, 15, 0, 0, 2118, 2119, 7, 8, 0, 0, 2119, 2120, 7, 11, 0, 0, 2120, 2121, 7, 14, 0, 0, 2121, 2122, 7, 2, 0, 0, 2122, 2123, 7, 7, 0, 0, 2123, 2124, 7, 11, 0, 0, 2124, 380, 1, 0, 0, 0, 2125, 2126, 7, 6, 0, 0, 2126, 2127, 7, 13, 0, 0, 2127, 2128, 7, 6, 0, 0, 2128, 2129, 7, 5, 0, 0, 2129, 2130, 7, 2, 0, 0, 2130, 2131, 7, 11, 0, 0, 2131, 2132, 7, 10, 0, 0, 2132, 382, 1, 0, 0, 0, 2133, 2134, 7, 11, 0, 0, 2134, 2135, 7, 2, 0, 0, 2135, 2136, 7, 4, 0, 0, 2136, 384, 1, 0, 0, 0, 2137, 2138, 7, 11, 0, 0, 2138, 2139, 7, 17, 0, 0, 2139, 2140, 7, 16, 0, 0, 2140, 2141, 7, 10, 0, 0, 2141, 386, 1, 0, 0, 0, 2142, 2143, 7, 11, 0, 0, 2143, 2144, 7, 17, 0, 0, 2144, 2145, 7, 16, 0, 0, 2145, 2146, 7, 10, 0, 0, 2146, 2147, 7, 5, 0, 0, 2147, 2148, 7, 17, 0, 0, 2148, 2149, 7, 19, 0, 0, 2149, 2150, 7, 19, 0, 0, 2150, 388, 1, 0, 0, 0, 2151, 2152, 7, 11, 0, 0, 2152, 2153, 7, 17, 0, 0, 2153, 2154, 7, 16, 0, 0, 2154, 2155, 7, 10, 0, 0, 2155, 2156, 5, 95, 0, 0, 2156, 2157, 7, 19, 0, 0, 2157, 2158, 7, 9, 0, 0, 2158, 2159, 7, 14, 0, 0, 2159, 2160, 7, 16, 0, 0, 2160, 2161, 7, 2, 0, 0, 2161, 2162, 7, 11, 0, 0, 2162, 390, 1, 0, 0, 0, 2163, 2164, 7, 11, 0, 0, 2164, 2165, 7, 17, 0, 0, 2165, 2166, 7, 16, 0, 0, 2166, 2167, 7, 10, 0, 0, 2167, 2168, 5, 95, 0, 0, 2168, 2169, 7, 11, 0, 0, 2169, 2170, 7, 9, 0, 0, 2170, 2171, 5, 95, 0, 0, 2171, 2172, 7, 6, 0, 0, 2172, 2173, 7, 10, 0, 0, 2173, 2174, 7, 7, 0, 0, 2174, 392, 1, 0, 0, 0, 2175, 2176, 7, 11, 0, 0, 2176, 2177, 7, 17, 0, 0, 2177, 2178, 7, 16, 0, 0, 2178, 2179, 7, 10, 0, 0, 2179, 2180, 7, 6, 0, 0, 2180, 2181, 7, 11, 0, 0, 2181, 2182, 7, 2, 0, 0, 2182, 2183, 7, 16, 0, 0, 2183, 2184, 7, 21, 0, 0, 2184, 394, 1, 0, 0, 0, 2185, 2186, 7, 11, 0, 0, 2186, 2187, 7, 14, 0, 0, 2187, 2188, 7, 15, 0, 0, 2188, 2189, 7, 4, 0, 0, 2189, 2190, 7, 7, 0, 0, 2190, 2191, 7, 2, 0, 0, 2191, 2192, 7, 11, 0, 0, 2192, 2193, 7, 10, 0, 0, 2193, 396, 1, 0, 0, 0, 2194, 2195, 7, 11, 0, 0, 2195, 2196, 7, 9, 0, 0, 2196, 2197, 5, 95, 0, 0, 2197, 2198, 7, 5, 0, 0, 2198, 2199, 7, 2, 0, 0, 2199, 2200, 7, 13, 0, 0, 2200, 2201, 7, 6, 0, 0, 2201, 398, 1, 0, 0, 0, 2202, 2203, 7, 11, 0, 0, 2203, 2204, 7, 9, 0, 0, 2204, 2205, 5, 95, 0, 0, 2205, 2206, 7, 6, 0, 0, 2206, 2207, 7, 10, 0, 0, 2207, 2208, 7, 7, 0, 0, 2208, 2209, 7, 9, 0, 0, 2209, 2210, 7, 4, 0, 0, 2210, 2211, 7, 5, 0, 0, 2211, 2212, 7, 6, 0, 0, 2212, 400, 1, 0, 0, 0, 2213, 2214, 7, 15, 0, 0, 2214, 2215, 7, 4, 0, 0, 2215, 2216, 7, 17, 0, 0, 2216, 2217, 7, 18, 0, 0, 2217, 2218, 5, 95, 0, 0, 2218, 2219, 7, 11, 0, 0, 2219, 2220, 7, 17, 0, 0, 2220, 2221, 7, 16, 0, 0, 2221, 2222, 7, 10, 0, 0, 2222, 2223, 7, 6, 0, 0, 2223, 2224, 7, 11, 0, 0, 2224, 2225, 7, 2, 0, 0, 2225, 2226, 7, 16, 0, 0, 2226, 2227, 7, 21, 0, 0, 2227, 402, 1, 0, 0, 0, 2228, 2229, 7, 15, 0, 0, 2229, 2230, 7, 21, 0, 0, 2230, 2231, 7, 21, 0, 0, 2231, 2232, 7, 10, 0, 0, 2232, 2233, 7, 14, 0, 0, 2233, 404, 1, 0, 0, 0, 2234, 2235, 7, 15, 0, 0, 2235, 2236, 7, 11, 0, 0, 2236, 2237, 7, 7, 0, 0, 2237, 2238, 5, 95, 0, 0, 2238, 2239, 7, 5, 0, 0, 2239, 2240, 7, 2, 0, 0, 2240, 2241, 7, 11, 0, 0, 2241, 2242, 7, 10, 0, 0, 2242, 406, 1, 0, 0, 0, 2243, 2244, 7, 15, 0, 0, 2244, 2245, 7, 11, 0, 0, 2245, 2246, 7, 7, 0, 0, 2246, 2247, 5, 95, 0, 0, 2247, 2248, 7, 11, 0, 0, 2248, 2249, 7, 17, 0, 0, 2249, 2250, 7, 16, 0, 0, 2250, 2251, 7, 10, 0, 0, 2251, 408, 1, 0, 0, 0, 2252, 2253, 7, 15, 0, 0, 2253, 2254, 7, 11, 0, 0, 2254, 2255, 7, 7, 0, 0, 2255, 2256, 5, 95, 0, 0, 2256, 2257, 7, 11, 0, 0, 2257, 2258, 7, 17, 0, 0, 2258, 2259, 7, 16, 0, 0, 2259, 2260, 7, 10, 0, 0, 2260, 2261, 7, 6, 0, 0, 2261, 2262, 7, 11, 0, 0, 2262, 2263, 7, 2, 0, 0, 2263, 2264, 7, 16, 0, 0, 2264, 2265, 7, 21, 0, 0, 2265, 410, 1, 0, 0, 0, 2266, 2267, 7, 5, 0, 0, 2267, 412, 1, 0, 0, 0, 2268, 2269, 7, 11, 0, 0, 2269, 414, 1, 0, 0, 0, 2270, 2271, 7, 11, 0, 0, 2271, 2272, 7, 6, 0, 0, 2272, 416, 1, 0, 0, 0, 2273, 2274, 5, 123, 0, 0, 2274, 418, 1, 0, 0, 0, 2275, 2276, 5, 125, 0, 0, 2276, 420, 1, 0, 0, 0, 2277, 2278, 7, 5, 0, 0, 2278, 2279, 7, 10, 0, 0, 2279, 2280, 7, 4, 0, 0, 2280, 2281, 7, 6, 0, 0, 2281, 2282, 7, 10, 0, 0, 2282, 2283, 5, 95, 0, 0, 2283, 2284, 7, 14, 0, 0, 2284, 2285, 7, 2, 0, 0, 2285, 2286, 7, 4, 0, 0, 2286, 2287, 7, 25, 0, 0, 2287, 422, 1, 0, 0, 0, 2288, 2289, 7, 14, 0, 0, 2289, 2290, 7, 2, 0, 0, 2290, 2291, 7, 4, 0, 0, 2291, 2292, 7, 25, 0, 0, 2292, 424, 1, 0, 0, 0, 2293, 2294, 7, 14, 0, 0, 2294, 2295, 7, 9, 0, 0, 2295, 2296, 7, 12, 0, 0, 2296, 2297, 5, 95, 0, 0, 2297, 2298, 7, 4, 0, 0, 2298, 2299, 7, 15, 0, 0, 2299, 2300, 7, 16, 0, 0, 2300, 2301, 7, 8, 0, 0, 2301, 2302, 7, 10, 0, 0, 2302, 2303, 7, 14, 0, 0, 2303, 426, 1, 0, 0, 0, 2304, 2305, 7, 5, 0, 0, 2305, 2306, 7, 2, 0, 0, 2306, 2307, 7, 11, 0, 0, 2307, 2308, 7, 10, 0, 0, 2308, 2309, 5, 95, 0, 0, 2309, 2310, 7, 22, 0, 0, 2310, 2311, 7, 17, 0, 0, 2311, 2312, 7, 6, 0, 0, 2312, 2313, 7, 11, 0, 0, 2313, 2314, 7, 9, 0, 0, 2314, 2315, 7, 20, 0, 0, 2315, 2316, 7, 14, 0, 0, 2316, 2317, 7, 2, 0, 0, 2317, 2318, 7, 16, 0, 0, 2318, 428, 1, 0, 0, 0, 2319, 2320, 7, 5, 0, 0, 2320, 2321, 7, 2, 0, 0, 2321, 2322, 7, 13, 0, 0, 2322, 2323, 5, 95, 0, 0, 2323, 2324, 7, 9, 0, 0, 2324, 2325, 7, 19, 0, 0, 2325, 2326, 5, 95, 0, 0, 2326, 2327, 7, 16, 0, 0, 2327, 2328, 7, 9, 0, 0, 2328, 2329, 7, 4, 0, 0, 2329, 2330, 7, 11, 0, 0, 2330, 2331, 7, 22, 0, 0, 2331, 430, 1, 0, 0, 0, 2332, 2333, 7, 5, 0, 0, 2333, 2334, 7, 2, 0, 0, 2334, 2335, 7, 13, 0, 0, 2335, 2336, 5, 95, 0, 0, 2336, 2337, 7, 9, 0, 0, 2337, 2338, 7, 19, 0, 0, 2338, 2339, 5, 95, 0, 0, 2339, 2340, 7, 13, 0, 0, 2340, 2341, 7, 10, 0, 0, 2341, 2342, 7, 2, 0, 0, 2342, 2343, 7, 14, 0, 0, 2343, 432, 1, 0, 0, 0, 2344, 2345, 7, 5, 0, 0, 2345, 2346, 7, 2, 0, 0, 2346, 2347, 7, 13, 0, 0, 2347, 2348, 5, 95, 0, 0, 2348, 2349, 7, 9, 0, 0, 2349, 2350, 7, 19, 0, 0, 2350, 2351, 5, 95, 0, 0, 2351, 2352, 7, 12, 0, 0, 2352, 2353, 7, 10, 0, 0, 2353, 2354, 7, 10, 0, 0, 2354, 2355, 7, 25, 0, 0, 2355, 434, 1, 0, 0, 0, 2356, 2357, 7, 10, 0, 0, 2357, 2358, 7, 18, 0, 0, 2358, 2359, 7, 7, 0, 0, 2359, 2360, 7, 3, 0, 0, 2360, 2361, 7, 15, 0, 0, 2361, 2362, 7, 5, 0, 0, 2362, 2363, 7, 10, 0, 0, 2363, 436, 1, 0, 0, 0, 2364, 2365, 7, 10, 0, 0, 2365, 2366, 7, 18, 0, 0, 2366, 2367, 7, 11, 0, 0, 2367, 2368, 7, 10, 0, 0, 2368, 2369, 7, 4, 0, 0, 2369, 2370, 7, 5, 0, 0, 2370, 2371, 7, 10, 0, 0, 2371, 2372, 7, 5, 0, 0, 2372, 2373, 5, 95, 0, 0, 2373, 2374, 7, 6, 0, 0, 2374, 2375, 7, 11, 0, 0, 2375, 2376, 7, 2, 0, 0, 2376, 2377, 7, 11, 0, 0, 2377, 2378, 7, 6, 0, 0, 2378, 438, 1, 0, 0, 0, 2379, 2380, 7, 19, 0, 0, 2380, 2381, 7, 17, 0, 0, 2381, 2382, 7, 10, 0, 0, 2382, 2383, 7, 3, 0, 0, 2383, 2384, 7, 5, 0, 0, 2384, 440, 1, 0, 0, 0, 2385, 2386, 7, 19, 0, 0, 2386, 2387, 7, 17, 0, 0, 2387, 2388, 7, 3, 0, 0, 2388, 2389, 7, 11, 0, 0, 2389, 2390, 7, 10, 0, 0, 2390, 2391, 7, 14, 0, 0, 2391, 442, 1, 0, 0, 0, 2392, 2393, 7, 20, 0, 0, 2393, 2394, 7, 10, 0, 0, 2394, 2395, 7, 9, 0, 0, 2395, 2396, 5, 95, 0, 0, 2396, 2397, 7, 8, 0, 0, 2397, 2398, 7, 9, 0, 0, 2398, 2399, 7, 15, 0, 0, 2399, 2400, 7, 4, 0, 0, 2400, 2401, 7, 5, 0, 0, 2401, 2402, 7, 17, 0, 0, 2402, 2403, 7, 4, 0, 0, 2403, 2404, 7, 20, 0, 0, 2404, 2405, 5, 95, 0, 0, 2405, 2406, 7, 8, 0, 0, 2406, 2407, 7, 9, 0, 0, 2407, 2408, 7, 18, 0, 0, 2408, 444, 1, 0, 0, 0, 2409, 2410, 7, 20, 0, 0, 2410, 2411, 7, 10, 0, 0, 2411, 2412, 7, 9, 0, 0, 2412, 2413, 5, 95, 0, 0, 2413, 2414, 7, 7, 0, 0, 2414, 2415, 7, 10, 0, 0, 2415, 2416, 7, 3, 0, 0, 2416, 2417, 7, 3, 0, 0, 2417, 446, 1, 0, 0, 0, 2418, 2419, 7, 20, 0, 0, 2419, 2420, 7, 10, 0, 0, 2420, 2421, 7, 9, 0, 0, 2421, 2422, 5, 95, 0, 0, 2422, 2423, 7, 5, 0, 0, 2423, 2424, 7, 17, 0, 0, 2424, 2425, 7, 6, 0, 0, 2425, 2426, 7, 11, 0, 0, 2426, 2427, 7, 2, 0, 0, 2427, 2428, 7, 4, 0, 0, 2428, 2429, 7, 7, 0, 0, 2429, 2430, 7, 10, 0, 0, 2430, 448, 1, 0, 0, 0, 2431, 2432, 7, 20, 0, 0, 2432, 2433, 7, 10, 0, 0, 2433, 2434, 7, 9, 0, 0, 2434, 2435, 5, 95, 0, 0, 2435, 2436, 7, 5, 0, 0, 2436, 2437, 7, 17, 0, 0, 2437, 2438, 7, 6, 0, 0, 2438, 2439, 7, 11, 0, 0, 2439, 2440, 7, 2, 0, 0, 2440, 2441, 7, 4, 0, 0, 2441, 2442, 7, 7, 0, 0, 2442, 2443, 7, 10, 0, 0, 2443, 2444, 5, 95, 0, 0, 2444, 2445, 7, 14, 0, 0, 2445, 2446, 7, 2, 0, 0, 2446, 2447, 7, 4, 0, 0, 2447, 2448, 7, 20, 0, 0, 2448, 2449, 7, 10, 0, 0, 2449, 450, 1, 0, 0, 0, 2450, 2451, 7, 20, 0, 0, 2451, 2452, 7, 10, 0, 0, 2452, 2453, 7, 9, 0, 0, 2453, 2454, 5, 95, 0, 0, 2454, 2455, 7, 17, 0, 0, 2455, 2456, 7, 4, 0, 0, 2456, 2457, 7, 11, 0, 0, 2457, 2458, 7, 10, 0, 0, 2458, 2459, 7, 14, 0, 0, 2459, 2460, 7, 6, 0, 0, 2460, 2461, 7, 10, 0, 0, 2461, 2462, 7, 7, 0, 0, 2462, 2463, 7, 11, 0, 0, 2463, 2464, 7, 6, 0, 0, 2464, 452, 1, 0, 0, 0, 2465, 2466, 7, 20, 0, 0, 2466, 2467, 7, 10, 0, 0, 2467, 2468, 7, 9, 0, 0, 2468, 2469, 5, 95, 0, 0, 2469, 2470, 7, 21, 0, 0, 2470, 2471, 7, 9, 0, 0, 2471, 2472, 7, 3, 0, 0, 2472, 2473, 7, 13, 0, 0, 2473, 2474, 7, 20, 0, 0, 2474, 2475, 7, 9, 0, 0, 2475, 2476, 7, 4, 0, 0, 2476, 454, 1, 0, 0, 0, 2477, 2478, 7, 22, 0, 0, 2478, 2479, 7, 17, 0, 0, 2479, 2480, 7, 6, 0, 0, 2480, 2481, 7, 11, 0, 0, 2481, 2482, 7, 9, 0, 0, 2482, 2483, 7, 20, 0, 0, 2483, 2484, 7, 14, 0, 0, 2484, 2485, 7, 2, 0, 0, 2485, 2486, 7, 16, 0, 0, 2486, 456, 1, 0, 0, 0, 2487, 2488, 7, 22, 0, 0, 2488, 2489, 7, 9, 0, 0, 2489, 2490, 7, 15, 0, 0, 2490, 2491, 7, 14, 0, 0, 2491, 2492, 5, 95, 0, 0, 2492, 2493, 7, 9, 0, 0, 2493, 2494, 7, 19, 0, 0, 2494, 2495, 5, 95, 0, 0, 2495, 2496, 7, 5, 0, 0, 2496, 2497, 7, 2, 0, 0, 2497, 2498, 7, 13, 0, 0, 2498, 458, 1, 0, 0, 0, 2499, 2500, 7, 17, 0, 0, 2500, 2501, 7, 4, 0, 0, 2501, 2502, 7, 7, 0, 0, 2502, 2503, 7, 3, 0, 0, 2503, 2504, 7, 15, 0, 0, 2504, 2505, 7, 5, 0, 0, 2505, 2506, 7, 10, 0, 0, 2506, 460, 1, 0, 0, 0, 2507, 2508, 7, 17, 0, 0, 2508, 2509, 7, 4, 0, 0, 2509, 2510, 5, 95, 0, 0, 2510, 2511, 7, 11, 0, 0, 2511, 2512, 7, 10, 0, 0, 2512, 2513, 7, 14, 0, 0, 2513, 2514, 7, 16, 0, 0, 2514, 2515, 7, 6, 0, 0, 2515, 462, 1, 0, 0, 0, 2516, 2517, 7, 16, 0, 0, 2517, 2518, 7, 2, 0, 0, 2518, 2519, 7, 11, 0, 0, 2519, 2520, 7, 7, 0, 0, 2520, 2521, 7, 22, 0, 0, 2521, 2522, 7, 21, 0, 0, 2522, 2523, 7, 22, 0, 0, 2523, 2524, 7, 14, 0, 0, 2524, 2525, 7, 2, 0, 0, 2525, 2526, 7, 6, 0, 0, 2526, 2527, 7, 10, 0, 0, 2527, 464, 1, 0, 0, 0, 2528, 2529, 7, 16, 0, 0, 2529, 2530, 7, 2, 0, 0, 2530, 2531, 7, 11, 0, 0, 2531, 2532, 7, 7, 0, 0, 2532, 2533, 7, 22, 0, 0, 2533, 2534, 5, 95, 0, 0, 2534, 2535, 7, 21, 0, 0, 2535, 2536, 7, 22, 0, 0, 2536, 2537, 7, 14, 0, 0, 2537, 2538, 7, 2, 0, 0, 2538, 2539, 7, 6, 0, 0, 2539, 2540, 7, 10, 0, 0, 2540, 466, 1, 0, 0, 0, 2541, 2542, 7, 16, 0, 0, 2542, 2543, 7, 2, 0, 0, 2543, 2544, 7, 11, 0, 0, 2544, 2545, 7, 7, 0, 0, 2545, 2546, 7, 22, 0, 0, 2546, 2547, 7, 21, 0, 0, 2547, 2548, 7, 22, 0, 0, 2548, 2549, 7, 14, 0, 0, 2549, 2550, 7, 2, 0, 0, 2550, 2551, 7, 6, 0, 0, 2551, 2552, 7, 10, 0, 0, 2552, 2553, 7, 26, 0, 0, 2553, 2554, 7, 15, 0, 0, 2554, 2555, 7, 10, 0, 0, 2555, 2556, 7, 14, 0, 0, 2556, 2557, 7, 13, 0, 0, 2557, 468, 1, 0, 0, 0, 2558, 2559, 7, 6, 0, 0, 2559, 2560, 7, 17, 0, 0, 2560, 2561, 7, 16, 0, 0, 2561, 2562, 7, 21, 0, 0, 2562, 2563, 7, 3, 0, 0, 2563, 2564, 7, 10, 0, 0, 2564, 2565, 5, 95, 0, 0, 2565, 2566, 7, 26, 0, 0, 2566, 2567, 7, 15, 0, 0, 2567, 2568, 7, 10, 0, 0, 2568, 2569, 7, 14, 0, 0, 2569, 2570, 7, 13, 0, 0, 2570, 2571, 5, 95, 0, 0, 2571, 2572, 7, 6, 0, 0, 2572, 2573, 7, 11, 0, 0, 2573, 2574, 7, 14, 0, 0, 2574, 2575, 7, 17, 0, 0, 2575, 2576, 7, 4, 0, 0, 2576, 2577, 7, 20, 0, 0, 2577, 470, 1, 0, 0, 0, 2578, 2579, 7, 26, 0, 0, 2579, 2580, 7, 15, 0, 0, 2580, 2581, 7, 10, 0, 0, 2581, 2582, 7, 14, 0, 0, 2582, 2583, 7, 13, 0, 0, 2583, 2584, 5, 95, 0, 0, 2584, 2585, 7, 6, 0, 0, 2585, 2586, 7, 11, 0, 0, 2586, 2587, 7, 14, 0, 0, 2587, 2588, 7, 17, 0, 0, 2588, 2589, 7, 4, 0, 0, 2589, 2590, 7, 20, 0, 0, 2590, 472, 1, 0, 0, 0, 2591, 2592, 7, 16, 0, 0, 2592, 2593, 7, 2, 0, 0, 2593, 2594, 7, 11, 0, 0, 2594, 2595, 7, 7, 0, 0, 2595, 2596, 7, 22, 0, 0, 2596, 2597, 5, 95, 0, 0, 2597, 2598, 7, 21, 0, 0, 2598, 2599, 7, 22, 0, 0, 2599, 2600, 7, 14, 0, 0, 2600, 2601, 7, 2, 0, 0, 2601, 2602, 7, 6, 0, 0, 2602, 2603, 7, 10, 0, 0, 2603, 2604, 5, 95, 0, 0, 2604, 2605, 7, 21, 0, 0, 2605, 2606, 7, 14, 0, 0, 2606, 2607, 7, 10, 0, 0, 2607, 2608, 7, 19, 0, 0, 2608, 2609, 7, 17, 0, 0, 2609, 2610, 7, 18, 0, 0, 2610, 474, 1, 0, 0, 0, 2611, 2612, 7, 16, 0, 0, 2612, 2613, 7, 2, 0, 0, 2613, 2614, 7, 11, 0, 0, 2614, 2615, 7, 7, 0, 0, 2615, 2616, 7, 22, 0, 0, 2616, 2617, 7, 26, 0, 0, 2617, 2618, 7, 15, 0, 0, 2618, 2619, 7, 10, 0, 0, 2619, 2620, 7, 14, 0, 0, 2620, 2621, 7, 13, 0, 0, 2621, 476, 1, 0, 0, 0, 2622, 2623, 7, 16, 0, 0, 2623, 2624, 7, 2, 0, 0, 2624, 2625, 7, 11, 0, 0, 2625, 2626, 7, 7, 0, 0, 2626, 2627, 7, 22, 0, 0, 2627, 2628, 5, 95, 0, 0, 2628, 2629, 7, 26, 0, 0, 2629, 2630, 7, 15, 0, 0, 2630, 2631, 7, 10, 0, 0, 2631, 2632, 7, 14, 0, 0, 2632, 2633, 7, 13, 0, 0, 2633, 478, 1, 0, 0, 0, 2634, 2635, 7, 16, 0, 0, 2635, 2636, 7, 17, 0, 0, 2636, 2637, 7, 4, 0, 0, 2637, 2638, 7, 15, 0, 0, 2638, 2639, 7, 11, 0, 0, 2639, 2640, 7, 10, 0, 0, 2640, 2641, 5, 95, 0, 0, 2641, 2642, 7, 9, 0, 0, 2642, 2643, 7, 19, 0, 0, 2643, 2644, 5, 95, 0, 0, 2644, 2645, 7, 5, 0, 0, 2645, 2646, 7, 2, 0, 0, 2646, 2647, 7, 13, 0, 0, 2647, 480, 1, 0, 0, 0, 2648, 2649, 7, 16, 0, 0, 2649, 2650, 7, 17, 0, 0, 2650, 2651, 7, 4, 0, 0, 2651, 2652, 7, 15, 0, 0, 2652, 2653, 7, 11, 0, 0, 2653, 2654, 7, 10, 0, 0, 2654, 2655, 5, 95, 0, 0, 2655, 2656, 7, 9, 0, 0, 2656, 2657, 7, 19, 0, 0, 2657, 2658, 5, 95, 0, 0, 2658, 2659, 7, 22, 0, 0, 2659, 2660, 7, 9, 0, 0, 2660, 2661, 7, 15, 0, 0, 2661, 2662, 7, 14, 0, 0, 2662, 482, 1, 0, 0, 0, 2663, 2664, 7, 16, 0, 0, 2664, 2665, 7, 9, 0, 0, 2665, 2666, 7, 4, 0, 0, 2666, 2667, 7, 11, 0, 0, 2667, 2668, 7, 22, 0, 0, 2668, 2669, 5, 95, 0, 0, 2669, 2670, 7, 9, 0, 0, 2670, 2671, 7, 19, 0, 0, 2671, 2672, 5, 95, 0, 0, 2672, 2673, 7, 13, 0, 0, 2673, 2674, 7, 10, 0, 0, 2674, 2675, 7, 2, 0, 0, 2675, 2676, 7, 14, 0, 0, 2676, 484, 1, 0, 0, 0, 2677, 2678, 7, 16, 0, 0, 2678, 2679, 7, 15, 0, 0, 2679, 2680, 7, 3, 0, 0, 2680, 2681, 7, 11, 0, 0, 2681, 2682, 7, 17, 0, 0, 2682, 2683, 7, 16, 0, 0, 2683, 2684, 7, 2, 0, 0, 2684, 2685, 7, 11, 0, 0, 2685, 2686, 7, 7, 0, 0, 2686, 2687, 7, 22, 0, 0, 2687, 486, 1, 0, 0, 0, 2688, 2689, 7, 16, 0, 0, 2689, 2690, 7, 15, 0, 0, 2690, 2691, 7, 3, 0, 0, 2691, 2692, 7, 11, 0, 0, 2692, 2693, 7, 17, 0, 0, 2693, 2694, 5, 95, 0, 0, 2694, 2695, 7, 16, 0, 0, 2695, 2696, 7, 2, 0, 0, 2696, 2697, 7, 11, 0, 0, 2697, 2698, 7, 7, 0, 0, 2698, 2699, 7, 22, 0, 0, 2699, 488, 1, 0, 0, 0, 2700, 2701, 7, 16, 0, 0, 2701, 2702, 7, 15, 0, 0, 2702, 2703, 7, 3, 0, 0, 2703, 2704, 7, 11, 0, 0, 2704, 2705, 7, 17, 0, 0, 2705, 2706, 7, 16, 0, 0, 2706, 2707, 7, 2, 0, 0, 2707, 2708, 7, 11, 0, 0, 2708, 2709, 7, 7, 0, 0, 2709, 2710, 7, 22, 0, 0, 2710, 2711, 7, 26, 0, 0, 2711, 2712, 7, 15, 0, 0, 2712, 2713, 7, 10, 0, 0, 2713, 2714, 7, 14, 0, 0, 2714, 2715, 7, 13, 0, 0, 2715, 490, 1, 0, 0, 0, 2716, 2717, 7, 4, 0, 0, 2717, 2718, 7, 10, 0, 0, 2718, 2719, 7, 6, 0, 0, 2719, 2720, 7, 11, 0, 0, 2720, 2721, 7, 10, 0, 0, 2721, 2722, 7, 5, 0, 0, 2722, 492, 1, 0, 0, 0, 2723, 2724, 7, 21, 0, 0, 2724, 2725, 7, 10, 0, 0, 2725, 2726, 7, 14, 0, 0, 2726, 2727, 7, 7, 0, 0, 2727, 2728, 7, 10, 0, 0, 2728, 2729, 7, 4, 0, 0, 2729, 2730, 7, 11, 0, 0, 2730, 2731, 7, 17, 0, 0, 2731, 2732, 7, 3, 0, 0, 2732, 2733, 7, 10, 0, 0, 2733, 2734, 7, 6, 0, 0, 2734, 494, 1, 0, 0, 0, 2735, 2736, 7, 21, 0, 0, 2736, 2737, 7, 10, 0, 0, 2737, 2738, 7, 14, 0, 0, 2738, 2739, 7, 7, 0, 0, 2739, 2740, 7, 10, 0, 0, 2740, 2741, 7, 4, 0, 0, 2741, 2742, 7, 11, 0, 0, 2742, 2743, 7, 17, 0, 0, 2743, 2744, 7, 3, 0, 0, 2744, 2745, 7, 10, 0, 0, 2745, 496, 1, 0, 0, 0, 2746, 2747, 7, 21, 0, 0, 2747, 2748, 7, 10, 0, 0, 2748, 2749, 7, 14, 0, 0, 2749, 2750, 7, 7, 0, 0, 2750, 2751, 7, 10, 0, 0, 2751, 2752, 7, 4, 0, 0, 2752, 2753, 7, 11, 0, 0, 2753, 2754, 7, 17, 0, 0, 2754, 2755, 7, 3, 0, 0, 2755, 2756, 7, 10, 0, 0, 2756, 2757, 5, 95, 0, 0, 2757, 2758, 7, 2, 0, 0, 2758, 2759, 7, 21, 0, 0, 2759, 2760, 7, 21, 0, 0, 2760, 2761, 7, 14, 0, 0, 2761, 2762, 7, 9, 0, 0, 2762, 2763, 7, 18, 0, 0, 2763, 498, 1, 0, 0, 0, 2764, 2765, 7, 14, 0, 0, 2765, 2766, 7, 10, 0, 0, 2766, 2767, 7, 20, 0, 0, 2767, 2768, 7, 10, 0, 0, 2768, 2769, 7, 18, 0, 0, 2769, 2770, 7, 21, 0, 0, 2770, 2771, 5, 95, 0, 0, 2771, 2772, 7, 26, 0, 0, 2772, 2773, 7, 15, 0, 0, 2773, 2774, 7, 10, 0, 0, 2774, 2775, 7, 14, 0, 0, 2775, 2776, 7, 13, 0, 0, 2776, 500, 1, 0, 0, 0, 2777, 2778, 7, 14, 0, 0, 2778, 2779, 7, 10, 0, 0, 2779, 2780, 7, 23, 0, 0, 2780, 2781, 7, 10, 0, 0, 2781, 2782, 7, 14, 0, 0, 2782, 2783, 7, 6, 0, 0, 2783, 2784, 7, 10, 0, 0, 2784, 2785, 5, 95, 0, 0, 2785, 2786, 7, 4, 0, 0, 2786, 2787, 7, 10, 0, 0, 2787, 2788, 7, 6, 0, 0, 2788, 2789, 7, 11, 0, 0, 2789, 2790, 7, 10, 0, 0, 2790, 2791, 7, 5, 0, 0, 2791, 502, 1, 0, 0, 0, 2792, 2793, 7, 26, 0, 0, 2793, 2794, 7, 15, 0, 0, 2794, 2795, 7, 10, 0, 0, 2795, 2796, 7, 14, 0, 0, 2796, 2797, 7, 13, 0, 0, 2797, 504, 1, 0, 0, 0, 2798, 2799, 7, 14, 0, 0, 2799, 2800, 7, 2, 0, 0, 2800, 2801, 7, 4, 0, 0, 2801, 2802, 7, 20, 0, 0, 2802, 2803, 7, 10, 0, 0, 2803, 506, 1, 0, 0, 0, 2804, 2805, 7, 6, 0, 0, 2805, 2806, 7, 7, 0, 0, 2806, 2807, 7, 9, 0, 0, 2807, 2808, 7, 14, 0, 0, 2808, 2809, 7, 10, 0, 0, 2809, 508, 1, 0, 0, 0, 2810, 2811, 7, 6, 0, 0, 2811, 2812, 7, 7, 0, 0, 2812, 2813, 7, 9, 0, 0, 2813, 2814, 7, 14, 0, 0, 2814, 2815, 7, 10, 0, 0, 2815, 2816, 7, 26, 0, 0, 2816, 2817, 7, 15, 0, 0, 2817, 2818, 7, 10, 0, 0, 2818, 2819, 7, 14, 0, 0, 2819, 2820, 7, 13, 0, 0, 2820, 510, 1, 0, 0, 0, 2821, 2822, 7, 6, 0, 0, 2822, 2823, 7, 7, 0, 0, 2823, 2824, 7, 9, 0, 0, 2824, 2825, 7, 14, 0, 0, 2825, 2826, 7, 10, 0, 0, 2826, 2827, 5, 95, 0, 0, 2827, 2828, 7, 26, 0, 0, 2828, 2829, 7, 15, 0, 0, 2829, 2830, 7, 10, 0, 0, 2830, 2831, 7, 14, 0, 0, 2831, 2832, 7, 13, 0, 0, 2832, 512, 1, 0, 0, 0, 2833, 2834, 7, 6, 0, 0, 2834, 2835, 7, 10, 0, 0, 2835, 2836, 7, 7, 0, 0, 2836, 2837, 7, 9, 0, 0, 2837, 2838, 7, 4, 0, 0, 2838, 2839, 7, 5, 0, 0, 2839, 2840, 5, 95, 0, 0, 2840, 2841, 7, 9, 0, 0, 2841, 2842, 7, 19, 0, 0, 2842, 2843, 5, 95, 0, 0, 2843, 2844, 7, 16, 0, 0, 2844, 2845, 7, 17, 0, 0, 2845, 2846, 7, 4, 0, 0, 2846, 2847, 7, 15, 0, 0, 2847, 2848, 7, 11, 0, 0, 2848, 2849, 7, 10, 0, 0, 2849, 514, 1, 0, 0, 0, 2850, 2851, 7, 6, 0, 0, 2851, 2852, 7, 11, 0, 0, 2852, 2853, 7, 2, 0, 0, 2853, 2854, 7, 11, 0, 0, 2854, 2855, 7, 6, 0, 0, 2855, 516, 1, 0, 0, 0, 2856, 2857, 7, 11, 0, 0, 2857, 2858, 7, 10, 0, 0, 2858, 2859, 7, 14, 0, 0, 2859, 2860, 7, 16, 0, 0, 2860, 518, 1, 0, 0, 0, 2861, 2862, 7, 11, 0, 0, 2862, 2863, 7, 10, 0, 0, 2863, 2864, 7, 14, 0, 0, 2864, 2865, 7, 16, 0, 0, 2865, 2866, 7, 6, 0, 0, 2866, 520, 1, 0, 0, 0, 2867, 2868, 7, 11, 0, 0, 2868, 2869, 7, 17, 0, 0, 2869, 2870, 7, 16, 0, 0, 2870, 2871, 7, 10, 0, 0, 2871, 2872, 7, 6, 0, 0, 2872, 2873, 7, 11, 0, 0, 2873, 2874, 7, 2, 0, 0, 2874, 2875, 7, 16, 0, 0, 2875, 2876, 7, 21, 0, 0, 2876, 2877, 7, 2, 0, 0, 2877, 2878, 7, 5, 0, 0, 2878, 2879, 7, 5, 0, 0, 2879, 522, 1, 0, 0, 0, 2880, 2881, 7, 11, 0, 0, 2881, 2882, 7, 17, 0, 0, 2882, 2883, 7, 16, 0, 0, 2883, 2884, 7, 10, 0, 0, 2884, 2885, 7, 6, 0, 0, 2885, 2886, 7, 11, 0, 0, 2886, 2887, 7, 2, 0, 0, 2887, 2888, 7, 16, 0, 0, 2888, 2889, 7, 21, 0, 0, 2889, 2890, 7, 5, 0, 0, 2890, 2891, 7, 17, 0, 0, 2891, 2892, 7, 19, 0, 0, 2892, 2893, 7, 19, 0, 0, 2893, 524, 1, 0, 0, 0, 2894, 2895, 7, 11, 0, 0, 2895, 2896, 7, 9, 0, 0, 2896, 2897, 7, 21, 0, 0, 2897, 2898, 7, 22, 0, 0, 2898, 2899, 7, 17, 0, 0, 2899, 2900, 7, 11, 0, 0, 2900, 2901, 7, 6, 0, 0, 2901, 526, 1, 0, 0, 0, 2902, 2903, 7, 11, 0, 0, 2903, 2904, 7, 13, 0, 0, 2904, 2905, 7, 21, 0, 0, 2905, 2906, 7, 10, 0, 0, 2906, 2907, 7, 9, 0, 0, 2907, 2908, 7, 19, 0, 0, 2908, 528, 1, 0, 0, 0, 2909, 2910, 7, 12, 0, 0, 2910, 2911, 7, 10, 0, 0, 2911, 2912, 7, 10, 0, 0, 2912, 2913, 7, 25, 0, 0, 2913, 2914, 5, 95, 0, 0, 2914, 2915, 7, 9, 0, 0, 2915, 2916, 7, 19, 0, 0, 2916, 2917, 5, 95, 0, 0, 2917, 2918, 7, 13, 0, 0, 2918, 2919, 7, 10, 0, 0, 2919, 2920, 7, 2, 0, 0, 2920, 2921, 7, 14, 0, 0, 2921, 530, 1, 0, 0, 0, 2922, 2923, 7, 12, 0, 0, 2923, 2924, 7, 10, 0, 0, 2924, 2925, 7, 10, 0, 0, 2925, 2926, 7, 25, 0, 0, 2926, 2927, 7, 9, 0, 0, 2927, 2928, 7, 19, 0, 0, 2928, 2929, 7, 13, 0, 0, 2929, 2930, 7, 10, 0, 0, 2930, 2931, 7, 2, 0, 0, 2931, 2932, 7, 14, 0, 0, 2932, 532, 1, 0, 0, 0, 2933, 2934, 7, 12, 0, 0, 2934, 2935, 7, 10, 0, 0, 2935, 2936, 7, 10, 0, 0, 2936, 2937, 7, 25, 0, 0, 2937, 2938, 7, 5, 0, 0, 2938, 2939, 7, 2, 0, 0, 2939, 2940, 7, 13, 0, 0, 2940, 534, 1, 0, 0, 0, 2941, 2942, 7, 12, 0, 0, 2942, 2943, 7, 17, 0, 0, 2943, 2944, 7, 3, 0, 0, 2944, 2945, 7, 5, 0, 0, 2945, 2946, 7, 7, 0, 0, 2946, 2947, 7, 2, 0, 0, 2947, 2948, 7, 14, 0, 0, 2948, 2949, 7, 5, 0, 0, 2949, 2950, 7, 26, 0, 0, 2950, 2951, 7, 15, 0, 0, 2951, 2952, 7, 10, 0, 0, 2952, 2953, 7, 14, 0, 0, 2953, 2954, 7, 13, 0, 0, 2954, 536, 1, 0, 0, 0, 2955, 2956, 7, 12, 0, 0, 2956, 2957, 7, 17, 0, 0, 2957, 2958, 7, 3, 0, 0, 2958, 2959, 7, 5, 0, 0, 2959, 2960, 7, 7, 0, 0, 2960, 2961, 7, 2, 0, 0, 2961, 2962, 7, 14, 0, 0, 2962, 2963, 7, 5, 0, 0, 2963, 2964, 5, 95, 0, 0, 2964, 2965, 7, 26, 0, 0, 2965, 2966, 7, 15, 0, 0, 2966, 2967, 7, 10, 0, 0, 2967, 2968, 7, 14, 0, 0, 2968, 2969, 7, 13, 0, 0, 2969, 538, 1, 0, 0, 0, 2970, 2971, 7, 6, 0, 0, 2971, 2972, 7, 15, 0, 0, 2972, 2973, 7, 8, 0, 0, 2973, 2974, 7, 6, 0, 0, 2974, 2975, 7, 11, 0, 0, 2975, 2976, 7, 14, 0, 0, 2976, 540, 1, 0, 0, 0, 2977, 2978, 7, 6, 0, 0, 2978, 2979, 7, 11, 0, 0, 2979, 2980, 7, 14, 0, 0, 2980, 2981, 7, 7, 0, 0, 2981, 2982, 7, 16, 0, 0, 2982, 2983, 7, 21, 0, 0, 2983, 542, 1, 0, 0, 0, 2984, 2985, 7, 2, 0, 0, 2985, 2986, 7, 5, 0, 0, 2986, 2987, 7, 5, 0, 0, 2987, 2988, 7, 5, 0, 0, 2988, 2989, 7, 2, 0, 0, 2989, 2990, 7, 11, 0, 0, 2990, 2991, 7, 10, 0, 0, 2991, 544, 1, 0, 0, 0, 2992, 2993, 7, 13, 0, 0, 2993, 2994, 7, 10, 0, 0, 2994, 2995, 7, 2, 0, 0, 2995, 2996, 7, 14, 0, 0, 2996, 2997, 7, 12, 0, 0, 2997, 2998, 7, 10, 0, 0, 2998, 2999, 7, 10, 0, 0, 2999, 3000, 7, 25, 0, 0, 3000, 546, 1, 0, 0, 0, 3001, 3002, 7, 2, 0, 0, 3002, 3003, 7, 3, 0, 0, 3003, 3004, 7, 3, 0, 0, 3004, 3005, 7, 9, 0, 0, 3005, 3006, 7, 12, 0, 0, 3006, 3007, 5, 95, 0, 0, 3007, 3008, 7, 3, 0, 0, 3008, 3009, 7, 10, 0, 0, 3009, 3010, 7, 2, 0, 0, 3010, 3011, 7, 5, 0, 0, 3011, 3012, 7, 17, 0, 0, 3012, 3013, 7, 4, 0, 0, 3013, 3014, 7, 20, 0, 0, 3014, 3015, 5, 95, 0, 0, 3015, 3016, 7, 12, 0, 0, 3016, 3017, 7, 17, 0, 0, 3017, 3018, 7, 3, 0, 0, 3018, 3019, 7, 5, 0, 0, 3019, 3020, 7, 7, 0, 0, 3020, 3021, 7, 2, 0, 0, 3021, 3022, 7, 14, 0, 0, 3022, 3023, 7, 5, 0, 0, 3023, 548, 1, 0, 0, 0, 3024, 3025, 7, 2, 0, 0, 3025, 3026, 7, 4, 0, 0, 3026, 3027, 7, 2, 0, 0, 3027, 3028, 7, 3, 0, 0, 3028, 3029, 7, 13, 0, 0, 3029, 3030, 7, 27, 0, 0, 3030, 3031, 7, 10, 0, 0, 3031, 3032, 7, 14, 0, 0, 3032, 550, 1, 0, 0, 0, 3033, 3034, 7, 2, 0, 0, 3034, 3035, 7, 4, 0, 0, 3035, 3036, 7, 2, 0, 0, 3036, 3037, 7, 3, 0, 0, 3037, 3038, 7, 13, 0, 0, 3038, 3039, 7, 27, 0, 0, 3039, 3040, 7, 10, 0, 0, 3040, 3041, 5, 95, 0, 0, 3041, 3042, 7, 12, 0, 0, 3042, 3043, 7, 17, 0, 0, 3043, 3044, 7, 3, 0, 0, 3044, 3045, 7, 5, 0, 0, 3045, 3046, 7, 7, 0, 0, 3046, 3047, 7, 2, 0, 0, 3047, 3048, 7, 14, 0, 0, 3048, 3049, 7, 5, 0, 0, 3049, 552, 1, 0, 0, 0, 3050, 3051, 7, 2, 0, 0, 3051, 3052, 7, 15, 0, 0, 3052, 3053, 7, 11, 0, 0, 3053, 3054, 7, 9, 0, 0, 3054, 3055, 5, 95, 0, 0, 3055, 3056, 7, 20, 0, 0, 3056, 3057, 7, 10, 0, 0, 3057, 3058, 7, 4, 0, 0, 3058, 3059, 7, 10, 0, 0, 3059, 3060, 7, 14, 0, 0, 3060, 3061, 7, 2, 0, 0, 3061, 3062, 7, 11, 0, 0, 3062, 3063, 7, 10, 0, 0, 3063, 3064, 5, 95, 0, 0, 3064, 3065, 7, 6, 0, 0, 3065, 3066, 7, 13, 0, 0, 3066, 3067, 7, 4, 0, 0, 3067, 3068, 7, 9, 0, 0, 3068, 3069, 7, 4, 0, 0, 3069, 3070, 7, 13, 0, 0, 3070, 3071, 7, 16, 0, 0, 3071, 3072, 7, 6, 0, 0, 3072, 3073, 5, 95, 0, 0, 3073, 3074, 7, 21, 0, 0, 3074, 3075, 7, 22, 0, 0, 3075, 3076, 7, 14, 0, 0, 3076, 3077, 7, 2, 0, 0, 3077, 3078, 7, 6, 0, 0, 3078, 3079, 7, 10, 0, 0, 3079, 3080, 5, 95, 0, 0, 3080, 3081, 7, 26, 0, 0, 3081, 3082, 7, 15, 0, 0, 3082, 3083, 7, 10, 0, 0, 3083, 3084, 7, 14, 0, 0, 3084, 3085, 7, 13, 0, 0, 3085, 554, 1, 0, 0, 0, 3086, 3087, 7, 8, 0, 0, 3087, 3088, 7, 9, 0, 0, 3088, 3089, 7, 9, 0, 0, 3089, 3090, 7, 6, 0, 0, 3090, 3091, 7, 11, 0, 0, 3091, 556, 1, 0, 0, 0, 3092, 3093, 7, 7, 0, 0, 3093, 3094, 7, 2, 0, 0, 3094, 3095, 7, 6, 0, 0, 3095, 3096, 7, 10, 0, 0, 3096, 3097, 5, 95, 0, 0, 3097, 3098, 7, 17, 0, 0, 3098, 3099, 7, 4, 0, 0, 3099, 3100, 7, 6, 0, 0, 3100, 3101, 7, 10, 0, 0, 3101, 3102, 7, 4, 0, 0, 3102, 3103, 7, 6, 0, 0, 3103, 3104, 7, 17, 0, 0, 3104, 3105, 7, 11, 0, 0, 3105, 3106, 7, 17, 0, 0, 3106, 3107, 7, 23, 0, 0, 3107, 3108, 7, 10, 0, 0, 3108, 558, 1, 0, 0, 0, 3109, 3110, 7, 7, 0, 0, 3110, 3111, 7, 15, 0, 0, 3111, 3112, 7, 11, 0, 0, 3112, 3113, 7, 9, 0, 0, 3113, 3114, 7, 19, 0, 0, 3114, 3115, 7, 19, 0, 0, 3115, 3116, 5, 95, 0, 0, 3116, 3117, 7, 19, 0, 0, 3117, 3118, 7, 14, 0, 0, 3118, 3119, 7, 10, 0, 0, 3119, 3120, 7, 26, 0, 0, 3120, 3121, 7, 15, 0, 0, 3121, 3122, 7, 10, 0, 0, 3122, 3123, 7, 4, 0, 0, 3123, 3124, 7, 7, 0, 0, 3124, 3125, 7, 13, 0, 0, 3125, 560, 1, 0, 0, 0, 3126, 3127, 7, 5, 0, 0, 3127, 3128, 7, 10, 0, 0, 3128, 3129, 7, 19, 0, 0, 3129, 3130, 7, 2, 0, 0, 3130, 3131, 7, 15, 0, 0, 3131, 3132, 7, 3, 0, 0, 3132, 3133, 7, 11, 0, 0, 3133, 3134, 5, 95, 0, 0, 3134, 3135, 7, 19, 0, 0, 3135, 3136, 7, 17, 0, 0, 3136, 3137, 7, 10, 0, 0, 3137, 3138, 7, 3, 0, 0, 3138, 3139, 7, 5, 0, 0, 3139, 562, 1, 0, 0, 0, 3140, 3141, 7, 5, 0, 0, 3141, 3142, 7, 10, 0, 0, 3142, 3143, 7, 19, 0, 0, 3143, 3144, 7, 2, 0, 0, 3144, 3145, 7, 15, 0, 0, 3145, 3146, 7, 3, 0, 0, 3146, 3147, 7, 11, 0, 0, 3147, 3148, 5, 95, 0, 0, 3148, 3149, 7, 9, 0, 0, 3149, 3150, 7, 21, 0, 0, 3150, 3151, 7, 10, 0, 0, 3151, 3152, 7, 14, 0, 0, 3152, 3153, 7, 2, 0, 0, 3153, 3154, 7, 11, 0, 0, 3154, 3155, 7, 9, 0, 0, 3155, 3156, 7, 14, 0, 0, 3156, 564, 1, 0, 0, 0, 3157, 3158, 7, 10, 0, 0, 3158, 3159, 7, 6, 0, 0, 3159, 3160, 7, 7, 0, 0, 3160, 3161, 7, 2, 0, 0, 3161, 3162, 7, 21, 0, 0, 3162, 3163, 7, 10, 0, 0, 3163, 566, 1, 0, 0, 0, 3164, 3165, 7, 10, 0, 0, 3165, 3166, 7, 4, 0, 0, 3166, 3167, 7, 2, 0, 0, 3167, 3168, 7, 8, 0, 0, 3168, 3169, 7, 3, 0, 0, 3169, 3170, 7, 10, 0, 0, 3170, 3171, 5, 95, 0, 0, 3171, 3172, 7, 21, 0, 0, 3172, 3173, 7, 9, 0, 0, 3173, 3174, 7, 6, 0, 0, 3174, 3175, 7, 17, 0, 0, 3175, 3176, 7, 11, 0, 0, 3176, 3177, 7, 17, 0, 0, 3177, 3178, 7, 9, 0, 0, 3178, 3179, 7, 4, 0, 0, 3179, 3180, 5, 95, 0, 0, 3180, 3181, 7, 17, 0, 0, 3181, 3182, 7, 4, 0, 0, 3182, 3183, 7, 7, 0, 0, 3183, 3184, 7, 14, 0, 0, 3184, 3185, 7, 10, 0, 0, 3185, 3186, 7, 16, 0, 0, 3186, 3187, 7, 10, 0, 0, 3187, 3188, 7, 4, 0, 0, 3188, 3189, 7, 11, 0, 0, 3189, 3190, 7, 6, 0, 0, 3190, 568, 1, 0, 0, 0, 3191, 3192, 7, 19, 0, 0, 3192, 3193, 7, 17, 0, 0, 3193, 3194, 7, 10, 0, 0, 3194, 3195, 7, 3, 0, 0, 3195, 3196, 7, 5, 0, 0, 3196, 3197, 7, 6, 0, 0, 3197, 570, 1, 0, 0, 0, 3198, 3199, 7, 19, 0, 0, 3199, 3200, 7, 3, 0, 0, 3200, 3201, 7, 2, 0, 0, 3201, 3202, 7, 20, 0, 0, 3202, 3203, 7, 6, 0, 0, 3203, 572, 1, 0, 0, 0, 3204, 3205, 7, 19, 0, 0, 3205, 3206, 7, 15, 0, 0, 3206, 3207, 7, 27, 0, 0, 3207, 3208, 7, 27, 0, 0, 3208, 3209, 7, 17, 0, 0, 3209, 3210, 7, 4, 0, 0, 3210, 3211, 7, 10, 0, 0, 3211, 3212, 7, 6, 0, 0, 3212, 3213, 7, 6, 0, 0, 3213, 574, 1, 0, 0, 0, 3214, 3215, 7, 19, 0, 0, 3215, 3216, 7, 15, 0, 0, 3216, 3217, 7, 27, 0, 0, 3217, 3218, 7, 27, 0, 0, 3218, 3219, 7, 13, 0, 0, 3219, 3220, 5, 95, 0, 0, 3220, 3221, 7, 16, 0, 0, 3221, 3222, 7, 2, 0, 0, 3222, 3223, 7, 18, 0, 0, 3223, 3224, 5, 95, 0, 0, 3224, 3225, 7, 10, 0, 0, 3225, 3226, 7, 18, 0, 0, 3226, 3227, 7, 21, 0, 0, 3227, 3228, 7, 2, 0, 0, 3228, 3229, 7, 4, 0, 0, 3229, 3230, 7, 6, 0, 0, 3230, 3231, 7, 17, 0, 0, 3231, 3232, 7, 9, 0, 0, 3232, 3233, 7, 4, 0, 0, 3233, 3234, 7, 6, 0, 0, 3234, 576, 1, 0, 0, 0, 3235, 3236, 7, 19, 0, 0, 3236, 3237, 7, 15, 0, 0, 3237, 3238, 7, 27, 0, 0, 3238, 3239, 7, 27, 0, 0, 3239, 3240, 7, 13, 0, 0, 3240, 3241, 5, 95, 0, 0, 3241, 3242, 7, 21, 0, 0, 3242, 3243, 7, 14, 0, 0, 3243, 3244, 7, 10, 0, 0, 3244, 3245, 7, 19, 0, 0, 3245, 3246, 7, 17, 0, 0, 3246, 3247, 7, 18, 0, 0, 3247, 3248, 5, 95, 0, 0, 3248, 3249, 7, 3, 0, 0, 3249, 3250, 7, 10, 0, 0, 3250, 3251, 7, 4, 0, 0, 3251, 3252, 7, 20, 0, 0, 3252, 3253, 7, 11, 0, 0, 3253, 3254, 7, 22, 0, 0, 3254, 578, 1, 0, 0, 0, 3255, 3256, 7, 19, 0, 0, 3256, 3257, 7, 15, 0, 0, 3257, 3258, 7, 27, 0, 0, 3258, 3259, 7, 27, 0, 0, 3259, 3260, 7, 13, 0, 0, 3260, 3261, 5, 95, 0, 0, 3261, 3262, 7, 14, 0, 0, 3262, 3263, 7, 10, 0, 0, 3263, 3264, 7, 12, 0, 0, 3264, 3265, 7, 14, 0, 0, 3265, 3266, 7, 17, 0, 0, 3266, 3267, 7, 11, 0, 0, 3267, 3268, 7, 10, 0, 0, 3268, 580, 1, 0, 0, 0, 3269, 3270, 7, 19, 0, 0, 3270, 3271, 7, 15, 0, 0, 3271, 3272, 7, 27, 0, 0, 3272, 3273, 7, 27, 0, 0, 3273, 3274, 7, 13, 0, 0, 3274, 3275, 5, 95, 0, 0, 3275, 3276, 7, 11, 0, 0, 3276, 3277, 7, 14, 0, 0, 3277, 3278, 7, 2, 0, 0, 3278, 3279, 7, 4, 0, 0, 3279, 3280, 7, 6, 0, 0, 3280, 3281, 7, 21, 0, 0, 3281, 3282, 7, 9, 0, 0, 3282, 3283, 7, 6, 0, 0, 3283, 3284, 7, 17, 0, 0, 3284, 3285, 7, 11, 0, 0, 3285, 3286, 7, 17, 0, 0, 3286, 3287, 7, 9, 0, 0, 3287, 3288, 7, 4, 0, 0, 3288, 3289, 7, 6, 0, 0, 3289, 582, 1, 0, 0, 0, 3290, 3291, 7, 3, 0, 0, 3291, 3292, 7, 10, 0, 0, 3292, 3293, 7, 4, 0, 0, 3293, 3294, 7, 17, 0, 0, 3294, 3295, 7, 10, 0, 0, 3295, 3296, 7, 4, 0, 0, 3296, 3297, 7, 11, 0, 0, 3297, 584, 1, 0, 0, 0, 3298, 3299, 7, 3, 0, 0, 3299, 3300, 7, 9, 0, 0, 3300, 3301, 7, 12, 0, 0, 3301, 3302, 5, 95, 0, 0, 3302, 3303, 7, 19, 0, 0, 3303, 3304, 7, 14, 0, 0, 3304, 3305, 7, 10, 0, 0, 3305, 3306, 7, 26, 0, 0, 3306, 3307, 5, 95, 0, 0, 3307, 3308, 7, 9, 0, 0, 3308, 3309, 7, 21, 0, 0, 3309, 3310, 7, 10, 0, 0, 3310, 3311, 7, 14, 0, 0, 3311, 3312, 7, 2, 0, 0, 3312, 3313, 7, 11, 0, 0, 3313, 3314, 7, 9, 0, 0, 3314, 3315, 7, 14, 0, 0, 3315, 586, 1, 0, 0, 0, 3316, 3317, 7, 16, 0, 0, 3317, 3318, 7, 2, 0, 0, 3318, 3319, 7, 18, 0, 0, 3319, 3320, 5, 95, 0, 0, 3320, 3321, 7, 5, 0, 0, 3321, 3322, 7, 10, 0, 0, 3322, 3323, 7, 11, 0, 0, 3323, 3324, 7, 10, 0, 0, 3324, 3325, 7, 14, 0, 0, 3325, 3326, 7, 16, 0, 0, 3326, 3327, 7, 17, 0, 0, 3327, 3328, 7, 4, 0, 0, 3328, 3329, 7, 17, 0, 0, 3329, 3330, 7, 27, 0, 0, 3330, 3331, 7, 10, 0, 0, 3331, 3332, 7, 5, 0, 0, 3332, 3333, 5, 95, 0, 0, 3333, 3334, 7, 6, 0, 0, 3334, 3335, 7, 11, 0, 0, 3335, 3336, 7, 2, 0, 0, 3336, 3337, 7, 11, 0, 0, 3337, 3338, 7, 10, 0, 0, 3338, 3339, 7, 6, 0, 0, 3339, 588, 1, 0, 0, 0, 3340, 3341, 7, 16, 0, 0, 3341, 3342, 7, 2, 0, 0, 3342, 3343, 7, 18, 0, 0, 3343, 3344, 5, 95, 0, 0, 3344, 3345, 7, 10, 0, 0, 3345, 3346, 7, 18, 0, 0, 3346, 3347, 7, 21, 0, 0, 3347, 3348, 7, 2, 0, 0, 3348, 3349, 7, 4, 0, 0, 3349, 3350, 7, 6, 0, 0, 3350, 3351, 7, 17, 0, 0, 3351, 3352, 7, 9, 0, 0, 3352, 3353, 7, 4, 0, 0, 3353, 3354, 7, 6, 0, 0, 3354, 590, 1, 0, 0, 0, 3355, 3356, 7, 16, 0, 0, 3356, 3357, 7, 17, 0, 0, 3357, 3358, 7, 4, 0, 0, 3358, 3359, 7, 17, 0, 0, 3359, 3360, 7, 16, 0, 0, 3360, 3361, 7, 15, 0, 0, 3361, 3362, 7, 16, 0, 0, 3362, 3363, 5, 95, 0, 0, 3363, 3364, 7, 6, 0, 0, 3364, 3365, 7, 22, 0, 0, 3365, 3366, 7, 9, 0, 0, 3366, 3367, 7, 15, 0, 0, 3367, 3368, 7, 3, 0, 0, 3368, 3369, 7, 5, 0, 0, 3369, 3370, 5, 95, 0, 0, 3370, 3371, 7, 16, 0, 0, 3371, 3372, 7, 2, 0, 0, 3372, 3373, 7, 11, 0, 0, 3373, 3374, 7, 7, 0, 0, 3374, 3375, 7, 22, 0, 0, 3375, 592, 1, 0, 0, 0, 3376, 3377, 7, 9, 0, 0, 3377, 3378, 7, 21, 0, 0, 3378, 3379, 7, 10, 0, 0, 3379, 3380, 7, 14, 0, 0, 3380, 3381, 7, 2, 0, 0, 3381, 3382, 7, 11, 0, 0, 3382, 3383, 7, 9, 0, 0, 3383, 3384, 7, 14, 0, 0, 3384, 594, 1, 0, 0, 0, 3385, 3386, 7, 21, 0, 0, 3386, 3387, 7, 22, 0, 0, 3387, 3388, 7, 14, 0, 0, 3388, 3389, 7, 2, 0, 0, 3389, 3390, 7, 6, 0, 0, 3390, 3391, 7, 10, 0, 0, 3391, 3392, 5, 95, 0, 0, 3392, 3393, 7, 6, 0, 0, 3393, 3394, 7, 3, 0, 0, 3394, 3395, 7, 9, 0, 0, 3395, 3396, 7, 21, 0, 0, 3396, 596, 1, 0, 0, 0, 3397, 3398, 7, 21, 0, 0, 3398, 3399, 7, 14, 0, 0, 3399, 3400, 7, 10, 0, 0, 3400, 3401, 7, 19, 0, 0, 3401, 3402, 7, 17, 0, 0, 3402, 3403, 7, 18, 0, 0, 3403, 3404, 5, 95, 0, 0, 3404, 3405, 7, 3, 0, 0, 3405, 3406, 7, 10, 0, 0, 3406, 3407, 7, 4, 0, 0, 3407, 3408, 7, 20, 0, 0, 3408, 3409, 7, 11, 0, 0, 3409, 3410, 7, 22, 0, 0, 3410, 598, 1, 0, 0, 0, 3411, 3412, 7, 26, 0, 0, 3412, 3413, 7, 15, 0, 0, 3413, 3414, 7, 9, 0, 0, 3414, 3415, 7, 11, 0, 0, 3415, 3416, 7, 10, 0, 0, 3416, 3417, 5, 95, 0, 0, 3417, 3418, 7, 2, 0, 0, 3418, 3419, 7, 4, 0, 0, 3419, 3420, 7, 2, 0, 0, 3420, 3421, 7, 3, 0, 0, 3421, 3422, 7, 13, 0, 0, 3422, 3423, 7, 27, 0, 0, 3423, 3424, 7, 10, 0, 0, 3424, 3425, 7, 14, 0, 0, 3425, 600, 1, 0, 0, 0, 3426, 3427, 7, 26, 0, 0, 3427, 3428, 7, 15, 0, 0, 3428, 3429, 7, 9, 0, 0, 3429, 3430, 7, 11, 0, 0, 3430, 3431, 7, 10, 0, 0, 3431, 3432, 5, 95, 0, 0, 3432, 3433, 7, 19, 0, 0, 3433, 3434, 7, 17, 0, 0, 3434, 3435, 7, 10, 0, 0, 3435, 3436, 7, 3, 0, 0, 3436, 3437, 7, 5, 0, 0, 3437, 3438, 5, 95, 0, 0, 3438, 3439, 7, 6, 0, 0, 3439, 3440, 7, 15, 0, 0, 3440, 3441, 7, 19, 0, 0, 3441, 3442, 7, 19, 0, 0, 3442, 3443, 7, 17, 0, 0, 3443, 3444, 7, 18, 0, 0, 3444, 602, 1, 0, 0, 0, 3445, 3446, 7, 14, 0, 0, 3446, 3447, 7, 10, 0, 0, 3447, 3448, 7, 12, 0, 0, 3448, 3449, 7, 14, 0, 0, 3449, 3450, 7, 17, 0, 0, 3450, 3451, 7, 11, 0, 0, 3451, 3452, 7, 10, 0, 0, 3452, 604, 1, 0, 0, 0, 3453, 3454, 7, 6, 0, 0, 3454, 3455, 7, 3, 0, 0, 3455, 3456, 7, 9, 0, 0, 3456, 3457, 7, 21, 0, 0, 3457, 606, 1, 0, 0, 0, 3458, 3459, 7, 11, 0, 0, 3459, 3460, 7, 17, 0, 0, 3460, 3461, 7, 10, 0, 0, 3461, 3462, 5, 95, 0, 0, 3462, 3463, 7, 8, 0, 0, 3463, 3464, 7, 14, 0, 0, 3464, 3465, 7, 10, 0, 0, 3465, 3466, 7, 2, 0, 0, 3466, 3467, 7, 25, 0, 0, 3467, 3468, 7, 10, 0, 0, 3468, 3469, 7, 14, 0, 0, 3469, 608, 1, 0, 0, 0, 3470, 3471, 7, 11, 0, 0, 3471, 3472, 7, 17, 0, 0, 3472, 3473, 7, 16, 0, 0, 3473, 3474, 7, 10, 0, 0, 3474, 3475, 5, 95, 0, 0, 3475, 3476, 7, 27, 0, 0, 3476, 3477, 7, 9, 0, 0, 3477, 3478, 7, 4, 0, 0, 3478, 3479, 7, 10, 0, 0, 3479, 610, 1, 0, 0, 0, 3480, 3481, 7, 11, 0, 0, 3481, 3482, 7, 13, 0, 0, 3482, 3483, 7, 21, 0, 0, 3483, 3484, 7, 10, 0, 0, 3484, 612, 1, 0, 0, 0, 3485, 3486, 7, 27, 0, 0, 3486, 3487, 7, 10, 0, 0, 3487, 3488, 7, 14, 0, 0, 3488, 3489, 7, 9, 0, 0, 3489, 3490, 5, 95, 0, 0, 3490, 3491, 7, 11, 0, 0, 3491, 3492, 7, 10, 0, 0, 3492, 3493, 7, 14, 0, 0, 3493, 3494, 7, 16, 0, 0, 3494, 3495, 7, 6, 0, 0, 3495, 3496, 5, 95, 0, 0, 3496, 3497, 7, 26, 0, 0, 3497, 3498, 7, 15, 0, 0, 3498, 3499, 7, 10, 0, 0, 3499, 3500, 7, 14, 0, 0, 3500, 3501, 7, 13, 0, 0, 3501, 614, 1, 0, 0, 0, 3502, 3503, 7, 22, 0, 0, 3503, 3504, 7, 17, 0, 0, 3504, 3505, 7, 20, 0, 0, 3505, 3506, 7, 22, 0, 0, 3506, 3507, 7, 3, 0, 0, 3507, 3508, 7, 17, 0, 0, 3508, 3509, 7, 20, 0, 0, 3509, 3510, 7, 22, 0, 0, 3510, 3511, 7, 11, 0, 0, 3511, 616, 1, 0, 0, 0, 3512, 3513, 7, 21, 0, 0, 3513, 3514, 7, 14, 0, 0, 3514, 3515, 7, 10, 0, 0, 3515, 3516, 5, 95, 0, 0, 3516, 3517, 7, 11, 0, 0, 3517, 3518, 7, 2, 0, 0, 3518, 3519, 7, 20, 0, 0, 3519, 3520, 7, 6, 0, 0, 3520, 618, 1, 0, 0, 0, 3521, 3522, 7, 21, 0, 0, 3522, 3523, 7, 9, 0, 0, 3523, 3524, 7, 6, 0, 0, 3524, 3525, 7, 11, 0, 0, 3525, 3526, 5, 95, 0, 0, 3526, 3527, 7, 11, 0, 0, 3527, 3528, 7, 2, 0, 0, 3528, 3529, 7, 20, 0, 0, 3529, 3530, 7, 6, 0, 0, 3530, 620, 1, 0, 0, 0, 3531, 3532, 7, 16, 0, 0, 3532, 3533, 7, 2, 0, 0, 3533, 3534, 7, 11, 0, 0, 3534, 3535, 7, 7, 0, 0, 3535, 3536, 7, 22, 0, 0, 3536, 3537, 5, 95, 0, 0, 3537, 3538, 7, 8, 0, 0, 3538, 3539, 7, 9, 0, 0, 3539, 3540, 7, 9, 0, 0, 3540, 3541, 7, 3, 0, 0, 3541, 3542, 5, 95, 0, 0, 3542, 3543, 7, 21, 0, 0, 3543, 3544, 7, 14, 0, 0, 3544, 3545, 7, 10, 0, 0, 3545, 3546, 7, 19, 0, 0, 3546, 3547, 7, 17, 0, 0, 3547, 3548, 7, 18, 0, 0, 3548, 622, 1, 0, 0, 0, 3549, 3550, 5, 42, 0, 0, 3550, 624, 1, 0, 0, 0, 3551, 3552, 5, 47, 0, 0, 3552, 626, 1, 0, 0, 0, 3553, 3554, 5, 37, 0, 0, 3554, 628, 1, 0, 0, 0, 3555, 3556, 5, 43, 0, 0, 3556, 630, 1, 0, 0, 0, 3557, 3558, 5, 45, 0, 0, 3558, 632, 1, 0, 0, 0, 3559, 3560, 7, 5, 0, 0, 3560, 3561, 7, 17, 0, 0, 3561, 3562, 7, 23, 0, 0, 3562, 634, 1, 0, 0, 0, 3563, 3564, 7, 16, 0, 0, 3564, 3565, 7, 9, 0, 0, 3565, 3566, 7, 5, 0, 0, 3566, 636, 1, 0, 0, 0, 3567, 3568, 5, 61, 0, 0, 3568, 638, 1, 0, 0, 0, 3569, 3570, 5, 62, 0, 0, 3570, 640, 1, 0, 0, 0, 3571, 3572, 5, 60, 0, 0, 3572, 642, 1, 0, 0, 0, 3573, 3574, 5, 33, 0, 0, 3574, 644, 1, 0, 0, 0, 3575, 3576, 5, 126, 0, 0, 3576, 646, 1, 0, 0, 0, 3577, 3578, 5, 124, 0, 0, 3578, 648, 1, 0, 0, 0, 3579, 3580, 5, 38, 0, 0, 3580, 650, 1, 0, 0, 0, 3581, 3582, 5, 94, 0, 0, 3582, 652, 1, 0, 0, 0, 3583, 3584, 5, 46, 0, 0, 3584, 654, 1, 0, 0, 0, 3585, 3586, 5, 40, 0, 0, 3586, 656, 1, 0, 0, 0, 3587, 3588, 5, 41, 0, 0, 3588, 658, 1, 0, 0, 0, 3589, 3590, 5, 91, 0, 0, 3590, 660, 1, 0, 0, 0, 3591, 3592, 5, 93, 0, 0, 3592, 662, 1, 0, 0, 0, 3593, 3594, 5, 44, 0, 0, 3594, 664, 1, 0, 0, 0, 3595, 3596, 5, 59, 0, 0, 3596, 666, 1, 0, 0, 0, 3597, 3598, 5, 64, 0, 0, 3598, 668, 1, 0, 0, 0, 3599, 3600, 5, 48, 0, 0, 3600, 670, 1, 0, 0, 0, 3601, 3602, 5, 49, 0, 0, 3602, 672, 1, 0, 0, 0, 3603, 3604, 5, 50, 0, 0, 3604, 674, 1, 0, 0, 0, 3605, 3606, 5, 39, 0, 0, 3606, 676, 1, 0, 0, 0, 3607, 3608, 5, 34, 0, 0, 3608, 678, 1, 0, 0, 0, 3609, 3610, 5, 96, 0, 0, 3610, 680, 1, 0, 0, 0, 3611, 3612, 5, 58, 0, 0, 3612, 682, 1, 0, 0, 0, 3613, 3614, 7, 4, 0, 0, 3614, 3615, 3, 709, 354, 0, 3615, 684, 1, 0, 0, 0, 3616, 3617, 3, 709, 354, 0, 3617, 686, 1, 0, 0, 0, 3618, 3620, 3, 715, 357, 0, 3619, 3618, 1, 0, 0, 0, 3620, 3621, 1, 0, 0, 0, 3621, 3619, 1, 0, 0, 0, 3621, 3622, 1, 0, 0, 0, 3622, 688, 1, 0, 0, 0, 3623, 3624, 7, 18, 0, 0, 3624, 3628, 5, 39, 0, 0, 3625, 3626, 3, 713, 356, 0, 3626, 3627, 3, 713, 356, 0, 3627, 3629, 1, 0, 0, 0, 3628, 3625, 1, 0, 0, 0, 3629, 3630, 1, 0, 0, 0, 3630, 3628, 1, 0, 0, 0, 3630, 3631, 1, 0, 0, 0, 3631, 3632, 1, 0, 0, 0, 3632, 3633, 5, 39, 0, 0, 3633, 3643, 1, 0, 0, 0, 3634, 3635, 5, 48, 0, 0, 3635, 3636, 7, 18, 0, 0, 3636, 3638, 1, 0, 0, 0, 3637, 3639, 3, 713, 356, 0, 3638, 3637, 1, 0, 0, 0, 3639, 3640, 1, 0, 0, 0, 3640, 3638, 1, 0, 0, 0, 3640, 3641, 1, 0, 0, 0, 3641, 3643, 1, 0, 0, 0, 3642, 3623, 1, 0, 0, 0, 3642, 3634, 1, 0, 0, 0, 3643, 690, 1, 0, 0, 0, 3644, 3646, 3, 715, 357, 0, 3645, 3644, 1, 0, 0, 0, 3646, 3647, 1, 0, 0, 0, 3647, 3645, 1, 0, 0, 0, 3647, 3648, 1, 0, 0, 0, 3648, 3650, 1, 0, 0, 0, 3649, 3645, 1, 0, 0, 0, 3649, 3650, 1, 0, 0, 0, 3650, 3651, 1, 0, 0, 0, 3651, 3653, 5, 46, 0, 0, 3652, 3654, 3, 715, 357, 0, 3653, 3652, 1, 0, 0, 0, 3654, 3655, 1, 0, 0, 0, 3655, 3653, 1, 0, 0, 0, 3655, 3656, 1, 0, 0, 0, 3656, 3688, 1, 0, 0, 0, 3657, 3659, 3, 715, 357, 0, 3658, 3657, 1, 0, 0, 0, 3659, 3660, 1, 0, 0, 0, 3660, 3658, 1, 0, 0, 0, 3660, 3661, 1, 0, 0, 0, 3661, 3662, 1, 0, 0, 0, 3662, 3663, 5, 46, 0, 0, 3663, 3664, 3, 703, 351, 0, 3664, 3688, 1, 0, 0, 0, 3665, 3667, 3, 715, 357, 0, 3666, 3665, 1, 0, 0, 0, 3667, 3668, 1, 0, 0, 0, 3668, 3666, 1, 0, 0, 0, 3668, 3669, 1, 0, 0, 0, 3669, 3671, 1, 0, 0, 0, 3670, 3666, 1, 0, 0, 0, 3670, 3671, 1, 0, 0, 0, 3671, 3672, 1, 0, 0, 0, 3672, 3674, 5, 46, 0, 0, 3673, 3675, 3, 715, 357, 0, 3674, 3673, 1, 0, 0, 0, 3675, 3676, 1, 0, 0, 0, 3676, 3674, 1, 0, 0, 0, 3676, 3677, 1, 0, 0, 0, 3677, 3678, 1, 0, 0, 0, 3678, 3679, 3, 703, 351, 0, 3679, 3688, 1, 0, 0, 0, 3680, 3682, 3, 715, 357, 0, 3681, 3680, 1, 0, 0, 0, 3682, 3683, 1, 0, 0, 0, 3683, 3681, 1, 0, 0, 0, 3683, 3684, 1, 0, 0, 0, 3684, 3685, 1, 0, 0, 0, 3685, 3686, 3, 703, 351, 0, 3686, 3688, 1, 0, 0, 0, 3687, 3649, 1, 0, 0, 0, 3687, 3658, 1, 0, 0, 0, 3687, 3670, 1, 0, 0, 0, 3687, 3681, 1, 0, 0, 0, 3688, 692, 1, 0, 0, 0, 3689, 3690, 5, 92, 0, 0, 3690, 3691, 7, 4, 0, 0, 3691, 694, 1, 0, 0, 0, 3692, 3693, 3, 717, 358, 0, 3693, 696, 1, 0, 0, 0, 3694, 3695, 3, 705, 352, 0, 3695, 698, 1, 0, 0, 0, 3696, 3697, 3, 707, 353, 0, 3697, 700, 1, 0, 0, 0, 3698, 3699, 3, 711, 355, 0, 3699, 702, 1, 0, 0, 0, 3700, 3702, 7, 10, 0, 0, 3701, 3703, 7, 28, 0, 0, 3702, 3701, 1, 0, 0, 0, 3702, 3703, 1, 0, 0, 0, 3703, 3705, 1, 0, 0, 0, 3704, 3706, 3, 715, 357, 0, 3705, 3704, 1, 0, 0, 0, 3706, 3707, 1, 0, 0, 0, 3707, 3705, 1, 0, 0, 0, 3707, 3708, 1, 0, 0, 0, 3708, 704, 1, 0, 0, 0, 3709, 3711, 7, 29, 0, 0, 3710, 3709, 1, 0, 0, 0, 3711, 3712, 1, 0, 0, 0, 3712, 3710, 1, 0, 0, 0, 3712, 3713, 1, 0, 0, 0, 3713, 3717, 1, 0, 0, 0, 3714, 3716, 7, 30, 0, 0, 3715, 3714, 1, 0, 0, 0, 3716, 3719, 1, 0, 0, 0, 3717, 3715, 1, 0, 0, 0, 3717, 3718, 1, 0, 0, 0, 3718, 706, 1, 0, 0, 0, 3719, 3717, 1, 0, 0, 0, 3720, 3728, 5, 34, 0, 0, 3721, 3722, 5, 92, 0, 0, 3722, 3727, 9, 0, 0, 0, 3723, 3724, 5, 34, 0, 0, 3724, 3727, 5, 34, 0, 0, 3725, 3727, 8, 31, 0, 0, 3726, 3721, 1, 0, 0, 0, 3726, 3723, 1, 0, 0, 0, 3726, 3725, 1, 0, 0, 0, 3727, 3730, 1, 0, 0, 0, 3728, 3726, 1, 0, 0, 0, 3728, 3729, 1, 0, 0, 0, 3729, 3731, 1, 0, 0, 0, 3730, 3728, 1, 0, 0, 0, 3731, 3732, 5, 34, 0, 0, 3732, 708, 1, 0, 0, 0, 3733, 3741, 5, 39, 0, 0, 3734, 3735, 5, 92, 0, 0, 3735, 3740, 9, 0, 0, 0, 3736, 3737, 5, 39, 0, 0, 3737, 3740, 5, 39, 0, 0, 3738, 3740, 8, 32, 0, 0, 3739, 3734, 1, 0, 0, 0, 3739, 3736, 1, 0, 0, 0, 3739, 3738, 1, 0, 0, 0, 3740, 3743, 1, 0, 0, 0, 3741, 3739, 1, 0, 0, 0, 3741, 3742, 1, 0, 0, 0, 3742, 3744, 1, 0, 0, 0, 3743, 3741, 1, 0, 0, 0, 3744, 3745, 5, 39, 0, 0, 3745, 710, 1, 0, 0, 0, 3746, 3754, 5, 96, 0, 0, 3747, 3748, 5, 92, 0, 0, 3748, 3753, 9, 0, 0, 0, 3749, 3750, 5, 96, 0, 0, 3750, 3753, 5, 96, 0, 0, 3751, 3753, 8, 33, 0, 0, 3752, 3747, 1, 0, 0, 0, 3752, 3749, 1, 0, 0, 0, 3752, 3751, 1, 0, 0, 0, 3753, 3756, 1, 0, 0, 0, 3754, 3752, 1, 0, 0, 0, 3754, 3755, 1, 0, 0, 0, 3755, 3757, 1, 0, 0, 0, 3756, 3754, 1, 0, 0, 0, 3757, 3758, 5, 96, 0, 0, 3758, 712, 1, 0, 0, 0, 3759, 3760, 7, 34, 0, 0, 3760, 714, 1, 0, 0, 0, 3761, 3762, 7, 35, 0, 0, 3762, 716, 1, 0, 0, 0, 3763, 3764, 7, 8, 0, 0, 3764, 3766, 5, 39, 0, 0, 3765, 3767, 7, 36, 0, 0, 3766, 3765, 1, 0, 0, 0, 3767, 3768, 1, 0, 0, 0, 3768, 3766, 1, 0, 0, 0, 3768, 3769, 1, 0, 0, 0, 3769, 3770, 1, 0, 0, 0, 3770, 3771, 5, 39, 0, 0, 3771, 718, 1, 0, 0, 0, 3772, 3773, 9, 0, 0, 0, 3773, 3774, 1, 0, 0, 0, 3774, 3775, 6, 359, 2, 0, 3775, 720, 1, 0, 0, 0, 35, 0, 724, 735, 748, 760, 765, 769, 773, 779, 783, 785, 3621, 3630, 3640, 3642, 3647, 3649, 3655, 3660, 3668, 3670, 3676, 3683, 3687, 3702, 3707, 3712, 3717, 3726, 3728, 3739, 3741, 3752, 3754, 3768, 3, 0, 1, 0, 0, 2, 0, 0, 3, 0] \ No newline at end of file diff --git a/src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLLexer.java b/src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLLexer.java new file mode 100644 index 000000000000..ac44d3f27a7f --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLLexer.java @@ -0,0 +1,2836 @@ +// Generated from /home/ubuntu/ws/OpenSearch-Dashboards/src/plugins/data/public/antlr/opensearch_sql/grammar/OpenSearchSQLLexer.g4 by ANTLR 4.13.1 +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.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.*; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue", "this-escape"}) +public class OpenSearchSQLLexer extends Lexer { + static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + SPACE=1, SPEC_SQL_COMMENT=2, COMMENT_INPUT=3, LINE_COMMENT=4, ALL=5, AND=6, + AS=7, ASC=8, BOOLEAN=9, BETWEEN=10, BY=11, CASE=12, CAST=13, CROSS=14, + COLUMNS=15, DATETIME=16, DELETE=17, DESC=18, DESCRIBE=19, DISTINCT=20, + DOUBLE=21, ELSE=22, EXISTS=23, FALSE=24, FLOAT=25, FIRST=26, FROM=27, + GROUP=28, HAVING=29, IN=30, INNER=31, INT=32, INTEGER=33, IS=34, JOIN=35, + LAST=36, LEFT=37, LIKE=38, LIMIT=39, LONG=40, MATCH=41, NATURAL=42, MISSING_LITERAL=43, + NOT=44, NULL_LITERAL=45, NULLS=46, ON=47, OR=48, ORDER=49, OUTER=50, OVER=51, + PARTITION=52, REGEXP=53, RIGHT=54, SELECT=55, SHOW=56, STRING=57, THEN=58, + TRUE=59, UNION=60, USING=61, WHEN=62, WHERE=63, EXCEPT=64, AVG=65, COUNT=66, + MAX=67, MIN=68, SUM=69, VAR_POP=70, VAR_SAMP=71, VARIANCE=72, STD=73, + STDDEV=74, STDDEV_POP=75, STDDEV_SAMP=76, SUBSTRING=77, TRIM=78, END=79, + FULL=80, OFFSET=81, INTERVAL=82, MICROSECOND=83, SECOND=84, MINUTE=85, + HOUR=86, DAY=87, WEEK=88, MONTH=89, QUARTER=90, YEAR=91, SECOND_MICROSECOND=92, + MINUTE_MICROSECOND=93, MINUTE_SECOND=94, HOUR_MICROSECOND=95, HOUR_SECOND=96, + HOUR_MINUTE=97, DAY_MICROSECOND=98, DAY_SECOND=99, DAY_MINUTE=100, DAY_HOUR=101, + YEAR_MONTH=102, TABLES=103, ABS=104, ACOS=105, ADD=106, ADDTIME=107, ASCII=108, + ASIN=109, ATAN=110, ATAN2=111, CBRT=112, CEIL=113, CEILING=114, CONCAT=115, + CONCAT_WS=116, CONV=117, CONVERT_TZ=118, COS=119, COSH=120, COT=121, CRC32=122, + CURDATE=123, CURTIME=124, CURRENT_DATE=125, CURRENT_TIME=126, CURRENT_TIMESTAMP=127, + DATE=128, DATE_ADD=129, DATE_FORMAT=130, DATE_SUB=131, DATEDIFF=132, DAYNAME=133, + DAYOFMONTH=134, DAYOFWEEK=135, DAYOFYEAR=136, DEGREES=137, DIVIDE=138, + E=139, EXP=140, EXPM1=141, EXTRACT=142, FLOOR=143, FROM_DAYS=144, FROM_UNIXTIME=145, + GET_FORMAT=146, IF=147, IFNULL=148, ISNULL=149, LAST_DAY=150, LENGTH=151, + LN=152, LOCALTIME=153, LOCALTIMESTAMP=154, LOCATE=155, LOG=156, LOG10=157, + LOG2=158, LOWER=159, LTRIM=160, MAKEDATE=161, MAKETIME=162, MODULUS=163, + MONTHNAME=164, MULTIPLY=165, NOW=166, NULLIF=167, PERIOD_ADD=168, PERIOD_DIFF=169, + PI=170, POSITION=171, POW=172, POWER=173, RADIANS=174, RAND=175, REPLACE=176, + RINT=177, ROUND=178, RTRIM=179, REVERSE=180, SEC_TO_TIME=181, SIGN=182, + SIGNUM=183, SIN=184, SINH=185, SQRT=186, STR_TO_DATE=187, SUBDATE=188, + SUBTIME=189, SUBTRACT=190, SYSDATE=191, TAN=192, TIME=193, TIMEDIFF=194, + TIME_FORMAT=195, TIME_TO_SEC=196, TIMESTAMP=197, TRUNCATE=198, TO_DAYS=199, + TO_SECONDS=200, UNIX_TIMESTAMP=201, UPPER=202, UTC_DATE=203, UTC_TIME=204, + UTC_TIMESTAMP=205, D=206, T=207, TS=208, LEFT_BRACE=209, RIGHT_BRACE=210, + DENSE_RANK=211, RANK=212, ROW_NUMBER=213, DATE_HISTOGRAM=214, DAY_OF_MONTH=215, + DAY_OF_YEAR=216, DAY_OF_WEEK=217, EXCLUDE=218, EXTENDED_STATS=219, FIELD=220, + FILTER=221, GEO_BOUNDING_BOX=222, GEO_CELL=223, GEO_DISTANCE=224, GEO_DISTANCE_RANGE=225, + GEO_INTERSECTS=226, GEO_POLYGON=227, HISTOGRAM=228, HOUR_OF_DAY=229, INCLUDE=230, + IN_TERMS=231, MATCHPHRASE=232, MATCH_PHRASE=233, MATCHPHRASEQUERY=234, + SIMPLE_QUERY_STRING=235, QUERY_STRING=236, MATCH_PHRASE_PREFIX=237, MATCHQUERY=238, + MATCH_QUERY=239, MINUTE_OF_DAY=240, MINUTE_OF_HOUR=241, MONTH_OF_YEAR=242, + MULTIMATCH=243, MULTI_MATCH=244, MULTIMATCHQUERY=245, NESTED=246, PERCENTILES=247, + PERCENTILE=248, PERCENTILE_APPROX=249, REGEXP_QUERY=250, REVERSE_NESTED=251, + QUERY=252, RANGE=253, SCORE=254, SCOREQUERY=255, SCORE_QUERY=256, SECOND_OF_MINUTE=257, + STATS=258, TERM=259, TERMS=260, TIMESTAMPADD=261, TIMESTAMPDIFF=262, TOPHITS=263, + TYPEOF=264, WEEK_OF_YEAR=265, WEEKOFYEAR=266, WEEKDAY=267, WILDCARDQUERY=268, + WILDCARD_QUERY=269, SUBSTR=270, STRCMP=271, ADDDATE=272, YEARWEEK=273, + ALLOW_LEADING_WILDCARD=274, ANALYZER=275, ANALYZE_WILDCARD=276, AUTO_GENERATE_SYNONYMS_PHRASE_QUERY=277, + BOOST=278, CASE_INSENSITIVE=279, CUTOFF_FREQUENCY=280, DEFAULT_FIELD=281, + DEFAULT_OPERATOR=282, ESCAPE=283, ENABLE_POSITION_INCREMENTS=284, FIELDS=285, + FLAGS=286, FUZZINESS=287, FUZZY_MAX_EXPANSIONS=288, FUZZY_PREFIX_LENGTH=289, + FUZZY_REWRITE=290, FUZZY_TRANSPOSITIONS=291, LENIENT=292, LOW_FREQ_OPERATOR=293, + MAX_DETERMINIZED_STATES=294, MAX_EXPANSIONS=295, MINIMUM_SHOULD_MATCH=296, + OPERATOR=297, PHRASE_SLOP=298, PREFIX_LENGTH=299, QUOTE_ANALYZER=300, + QUOTE_FIELD_SUFFIX=301, REWRITE=302, SLOP=303, TIE_BREAKER=304, TIME_ZONE=305, + TYPE=306, ZERO_TERMS_QUERY=307, HIGHLIGHT=308, HIGHLIGHT_PRE_TAGS=309, + HIGHLIGHT_POST_TAGS=310, MATCH_BOOL_PREFIX=311, STAR=312, SLASH=313, MODULE=314, + PLUS=315, MINUS=316, DIV=317, MOD=318, EQUAL_SYMBOL=319, GREATER_SYMBOL=320, + LESS_SYMBOL=321, EXCLAMATION_SYMBOL=322, BIT_NOT_OP=323, BIT_OR_OP=324, + BIT_AND_OP=325, BIT_XOR_OP=326, DOT=327, LR_BRACKET=328, RR_BRACKET=329, + LT_SQR_PRTHS=330, RT_SQR_PRTHS=331, COMMA=332, SEMI=333, AT_SIGN=334, + ZERO_DECIMAL=335, ONE_DECIMAL=336, TWO_DECIMAL=337, SINGLE_QUOTE_SYMB=338, + DOUBLE_QUOTE_SYMB=339, REVERSE_QUOTE_SYMB=340, COLON_SYMB=341, START_NATIONAL_STRING_LITERAL=342, + STRING_LITERAL=343, DECIMAL_LITERAL=344, HEXADECIMAL_LITERAL=345, REAL_LITERAL=346, + NULL_SPEC_LITERAL=347, BIT_STRING=348, ID=349, DOUBLE_QUOTE_ID=350, BACKTICK_QUOTE_ID=351, + ERROR_RECOGNITION=352; + public static final int + SQLCOMMENT=2, ERRORCHANNEL=3; + public static String[] channelNames = { + "DEFAULT_TOKEN_CHANNEL", "HIDDEN", "SQLCOMMENT", "ERRORCHANNEL" + }; + + public static String[] modeNames = { + "DEFAULT_MODE" + }; + + private static String[] makeRuleNames() { + return new String[] { + "SPACE", "SPEC_SQL_COMMENT", "COMMENT_INPUT", "LINE_COMMENT", "ALL", + "AND", "AS", "ASC", "BOOLEAN", "BETWEEN", "BY", "CASE", "CAST", "CROSS", + "COLUMNS", "DATETIME", "DELETE", "DESC", "DESCRIBE", "DISTINCT", "DOUBLE", + "ELSE", "EXISTS", "FALSE", "FLOAT", "FIRST", "FROM", "GROUP", "HAVING", + "IN", "INNER", "INT", "INTEGER", "IS", "JOIN", "LAST", "LEFT", "LIKE", + "LIMIT", "LONG", "MATCH", "NATURAL", "MISSING_LITERAL", "NOT", "NULL_LITERAL", + "NULLS", "ON", "OR", "ORDER", "OUTER", "OVER", "PARTITION", "REGEXP", + "RIGHT", "SELECT", "SHOW", "STRING", "THEN", "TRUE", "UNION", "USING", + "WHEN", "WHERE", "EXCEPT", "AVG", "COUNT", "MAX", "MIN", "SUM", "VAR_POP", + "VAR_SAMP", "VARIANCE", "STD", "STDDEV", "STDDEV_POP", "STDDEV_SAMP", + "SUBSTRING", "TRIM", "END", "FULL", "OFFSET", "INTERVAL", "MICROSECOND", + "SECOND", "MINUTE", "HOUR", "DAY", "WEEK", "MONTH", "QUARTER", "YEAR", + "SECOND_MICROSECOND", "MINUTE_MICROSECOND", "MINUTE_SECOND", "HOUR_MICROSECOND", + "HOUR_SECOND", "HOUR_MINUTE", "DAY_MICROSECOND", "DAY_SECOND", "DAY_MINUTE", + "DAY_HOUR", "YEAR_MONTH", "TABLES", "ABS", "ACOS", "ADD", "ADDTIME", + "ASCII", "ASIN", "ATAN", "ATAN2", "CBRT", "CEIL", "CEILING", "CONCAT", + "CONCAT_WS", "CONV", "CONVERT_TZ", "COS", "COSH", "COT", "CRC32", "CURDATE", + "CURTIME", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP", "DATE", + "DATE_ADD", "DATE_FORMAT", "DATE_SUB", "DATEDIFF", "DAYNAME", "DAYOFMONTH", + "DAYOFWEEK", "DAYOFYEAR", "DEGREES", "DIVIDE", "E", "EXP", "EXPM1", "EXTRACT", + "FLOOR", "FROM_DAYS", "FROM_UNIXTIME", "GET_FORMAT", "IF", "IFNULL", + "ISNULL", "LAST_DAY", "LENGTH", "LN", "LOCALTIME", "LOCALTIMESTAMP", + "LOCATE", "LOG", "LOG10", "LOG2", "LOWER", "LTRIM", "MAKEDATE", "MAKETIME", + "MODULUS", "MONTHNAME", "MULTIPLY", "NOW", "NULLIF", "PERIOD_ADD", "PERIOD_DIFF", + "PI", "POSITION", "POW", "POWER", "RADIANS", "RAND", "REPLACE", "RINT", + "ROUND", "RTRIM", "REVERSE", "SEC_TO_TIME", "SIGN", "SIGNUM", "SIN", + "SINH", "SQRT", "STR_TO_DATE", "SUBDATE", "SUBTIME", "SUBTRACT", "SYSDATE", + "TAN", "TIME", "TIMEDIFF", "TIME_FORMAT", "TIME_TO_SEC", "TIMESTAMP", + "TRUNCATE", "TO_DAYS", "TO_SECONDS", "UNIX_TIMESTAMP", "UPPER", "UTC_DATE", + "UTC_TIME", "UTC_TIMESTAMP", "D", "T", "TS", "LEFT_BRACE", "RIGHT_BRACE", + "DENSE_RANK", "RANK", "ROW_NUMBER", "DATE_HISTOGRAM", "DAY_OF_MONTH", + "DAY_OF_YEAR", "DAY_OF_WEEK", "EXCLUDE", "EXTENDED_STATS", "FIELD", "FILTER", + "GEO_BOUNDING_BOX", "GEO_CELL", "GEO_DISTANCE", "GEO_DISTANCE_RANGE", + "GEO_INTERSECTS", "GEO_POLYGON", "HISTOGRAM", "HOUR_OF_DAY", "INCLUDE", + "IN_TERMS", "MATCHPHRASE", "MATCH_PHRASE", "MATCHPHRASEQUERY", "SIMPLE_QUERY_STRING", + "QUERY_STRING", "MATCH_PHRASE_PREFIX", "MATCHQUERY", "MATCH_QUERY", "MINUTE_OF_DAY", + "MINUTE_OF_HOUR", "MONTH_OF_YEAR", "MULTIMATCH", "MULTI_MATCH", "MULTIMATCHQUERY", + "NESTED", "PERCENTILES", "PERCENTILE", "PERCENTILE_APPROX", "REGEXP_QUERY", + "REVERSE_NESTED", "QUERY", "RANGE", "SCORE", "SCOREQUERY", "SCORE_QUERY", + "SECOND_OF_MINUTE", "STATS", "TERM", "TERMS", "TIMESTAMPADD", "TIMESTAMPDIFF", + "TOPHITS", "TYPEOF", "WEEK_OF_YEAR", "WEEKOFYEAR", "WEEKDAY", "WILDCARDQUERY", + "WILDCARD_QUERY", "SUBSTR", "STRCMP", "ADDDATE", "YEARWEEK", "ALLOW_LEADING_WILDCARD", + "ANALYZER", "ANALYZE_WILDCARD", "AUTO_GENERATE_SYNONYMS_PHRASE_QUERY", + "BOOST", "CASE_INSENSITIVE", "CUTOFF_FREQUENCY", "DEFAULT_FIELD", "DEFAULT_OPERATOR", + "ESCAPE", "ENABLE_POSITION_INCREMENTS", "FIELDS", "FLAGS", "FUZZINESS", + "FUZZY_MAX_EXPANSIONS", "FUZZY_PREFIX_LENGTH", "FUZZY_REWRITE", "FUZZY_TRANSPOSITIONS", + "LENIENT", "LOW_FREQ_OPERATOR", "MAX_DETERMINIZED_STATES", "MAX_EXPANSIONS", + "MINIMUM_SHOULD_MATCH", "OPERATOR", "PHRASE_SLOP", "PREFIX_LENGTH", "QUOTE_ANALYZER", + "QUOTE_FIELD_SUFFIX", "REWRITE", "SLOP", "TIE_BREAKER", "TIME_ZONE", + "TYPE", "ZERO_TERMS_QUERY", "HIGHLIGHT", "HIGHLIGHT_PRE_TAGS", "HIGHLIGHT_POST_TAGS", + "MATCH_BOOL_PREFIX", "STAR", "SLASH", "MODULE", "PLUS", "MINUS", "DIV", + "MOD", "EQUAL_SYMBOL", "GREATER_SYMBOL", "LESS_SYMBOL", "EXCLAMATION_SYMBOL", + "BIT_NOT_OP", "BIT_OR_OP", "BIT_AND_OP", "BIT_XOR_OP", "DOT", "LR_BRACKET", + "RR_BRACKET", "LT_SQR_PRTHS", "RT_SQR_PRTHS", "COMMA", "SEMI", "AT_SIGN", + "ZERO_DECIMAL", "ONE_DECIMAL", "TWO_DECIMAL", "SINGLE_QUOTE_SYMB", "DOUBLE_QUOTE_SYMB", + "REVERSE_QUOTE_SYMB", "COLON_SYMB", "START_NATIONAL_STRING_LITERAL", + "STRING_LITERAL", "DECIMAL_LITERAL", "HEXADECIMAL_LITERAL", "REAL_LITERAL", + "NULL_SPEC_LITERAL", "BIT_STRING", "ID", "DOUBLE_QUOTE_ID", "BACKTICK_QUOTE_ID", + "EXPONENT_NUM_PART", "ID_LITERAL", "DQUOTA_STRING", "SQUOTA_STRING", + "BQUOTA_STRING", "HEX_DIGIT", "DEC_DIGIT", "BIT_STRING_L", "ERROR_RECOGNITION" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, null, null, null, null, "'ALL'", "'AND'", "'AS'", "'ASC'", "'BOOLEAN'", + "'BETWEEN'", "'BY'", "'CASE'", "'CAST'", "'CROSS'", "'COLUMNS'", "'DATETIME'", + "'DELETE'", "'DESC'", "'DESCRIBE'", "'DISTINCT'", "'DOUBLE'", "'ELSE'", + "'EXISTS'", "'FALSE'", "'FLOAT'", "'FIRST'", "'FROM'", "'GROUP'", "'HAVING'", + "'IN'", "'INNER'", "'INT'", "'INTEGER'", "'IS'", "'JOIN'", "'LAST'", + "'LEFT'", "'LIKE'", "'LIMIT'", "'LONG'", "'MATCH'", "'NATURAL'", "'MISSING'", + "'NOT'", "'NULL'", "'NULLS'", "'ON'", "'OR'", "'ORDER'", "'OUTER'", "'OVER'", + "'PARTITION'", "'REGEXP'", "'RIGHT'", "'SELECT'", "'SHOW'", "'STRING'", + "'THEN'", "'TRUE'", "'UNION'", "'USING'", "'WHEN'", "'WHERE'", "'MINUS'", + "'AVG'", "'COUNT'", "'MAX'", "'MIN'", "'SUM'", "'VAR_POP'", "'VAR_SAMP'", + "'VARIANCE'", "'STD'", "'STDDEV'", "'STDDEV_POP'", "'STDDEV_SAMP'", "'SUBSTRING'", + "'TRIM'", "'END'", "'FULL'", "'OFFSET'", "'INTERVAL'", "'MICROSECOND'", + "'SECOND'", "'MINUTE'", "'HOUR'", "'DAY'", "'WEEK'", "'MONTH'", "'QUARTER'", + "'YEAR'", "'SECOND_MICROSECOND'", "'MINUTE_MICROSECOND'", "'MINUTE_SECOND'", + "'HOUR_MICROSECOND'", "'HOUR_SECOND'", "'HOUR_MINUTE'", "'DAY_MICROSECOND'", + "'DAY_SECOND'", "'DAY_MINUTE'", "'DAY_HOUR'", "'YEAR_MONTH'", "'TABLES'", + "'ABS'", "'ACOS'", "'ADD'", "'ADDTIME'", "'ASCII'", "'ASIN'", "'ATAN'", + "'ATAN2'", "'CBRT'", "'CEIL'", "'CEILING'", "'CONCAT'", "'CONCAT_WS'", + "'CONV'", "'CONVERT_TZ'", "'COS'", "'COSH'", "'COT'", "'CRC32'", "'CURDATE'", + "'CURTIME'", "'CURRENT_DATE'", "'CURRENT_TIME'", "'CURRENT_TIMESTAMP'", + "'DATE'", "'DATE_ADD'", "'DATE_FORMAT'", "'DATE_SUB'", "'DATEDIFF'", + "'DAYNAME'", "'DAYOFMONTH'", "'DAYOFWEEK'", "'DAYOFYEAR'", "'DEGREES'", + "'DIVIDE'", "'E'", "'EXP'", "'EXPM1'", "'EXTRACT'", "'FLOOR'", "'FROM_DAYS'", + "'FROM_UNIXTIME'", "'GET_FORMAT'", "'IF'", "'IFNULL'", "'ISNULL'", "'LAST_DAY'", + "'LENGTH'", "'LN'", "'LOCALTIME'", "'LOCALTIMESTAMP'", "'LOCATE'", "'LOG'", + "'LOG10'", "'LOG2'", "'LOWER'", "'LTRIM'", "'MAKEDATE'", "'MAKETIME'", + "'MODULUS'", "'MONTHNAME'", "'MULTIPLY'", "'NOW'", "'NULLIF'", "'PERIOD_ADD'", + "'PERIOD_DIFF'", "'PI'", "'POSITION'", "'POW'", "'POWER'", "'RADIANS'", + "'RAND'", "'REPLACE'", "'RINT'", "'ROUND'", "'RTRIM'", "'REVERSE'", "'SEC_TO_TIME'", + "'SIGN'", "'SIGNUM'", "'SIN'", "'SINH'", "'SQRT'", "'STR_TO_DATE'", "'SUBDATE'", + "'SUBTIME'", "'SUBTRACT'", "'SYSDATE'", "'TAN'", "'TIME'", "'TIMEDIFF'", + "'TIME_FORMAT'", "'TIME_TO_SEC'", "'TIMESTAMP'", "'TRUNCATE'", "'TO_DAYS'", + "'TO_SECONDS'", "'UNIX_TIMESTAMP'", "'UPPER'", "'UTC_DATE'", "'UTC_TIME'", + "'UTC_TIMESTAMP'", "'D'", "'T'", "'TS'", "'{'", "'}'", "'DENSE_RANK'", + "'RANK'", "'ROW_NUMBER'", "'DATE_HISTOGRAM'", "'DAY_OF_MONTH'", "'DAY_OF_YEAR'", + "'DAY_OF_WEEK'", "'EXCLUDE'", "'EXTENDED_STATS'", "'FIELD'", "'FILTER'", + "'GEO_BOUNDING_BOX'", "'GEO_CELL'", "'GEO_DISTANCE'", "'GEO_DISTANCE_RANGE'", + "'GEO_INTERSECTS'", "'GEO_POLYGON'", "'HISTOGRAM'", "'HOUR_OF_DAY'", + "'INCLUDE'", "'IN_TERMS'", "'MATCHPHRASE'", "'MATCH_PHRASE'", "'MATCHPHRASEQUERY'", + "'SIMPLE_QUERY_STRING'", "'QUERY_STRING'", "'MATCH_PHRASE_PREFIX'", "'MATCHQUERY'", + "'MATCH_QUERY'", "'MINUTE_OF_DAY'", "'MINUTE_OF_HOUR'", "'MONTH_OF_YEAR'", + "'MULTIMATCH'", "'MULTI_MATCH'", "'MULTIMATCHQUERY'", "'NESTED'", "'PERCENTILES'", + "'PERCENTILE'", "'PERCENTILE_APPROX'", "'REGEXP_QUERY'", "'REVERSE_NESTED'", + "'QUERY'", "'RANGE'", "'SCORE'", "'SCOREQUERY'", "'SCORE_QUERY'", "'SECOND_OF_MINUTE'", + "'STATS'", "'TERM'", "'TERMS'", "'TIMESTAMPADD'", "'TIMESTAMPDIFF'", + "'TOPHITS'", "'TYPEOF'", "'WEEK_OF_YEAR'", "'WEEKOFYEAR'", "'WEEKDAY'", + "'WILDCARDQUERY'", "'WILDCARD_QUERY'", "'SUBSTR'", "'STRCMP'", "'ADDDATE'", + "'YEARWEEK'", "'ALLOW_LEADING_WILDCARD'", "'ANALYZER'", "'ANALYZE_WILDCARD'", + "'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY'", "'BOOST'", "'CASE_INSENSITIVE'", + "'CUTOFF_FREQUENCY'", "'DEFAULT_FIELD'", "'DEFAULT_OPERATOR'", "'ESCAPE'", + "'ENABLE_POSITION_INCREMENTS'", "'FIELDS'", "'FLAGS'", "'FUZZINESS'", + "'FUZZY_MAX_EXPANSIONS'", "'FUZZY_PREFIX_LENGTH'", "'FUZZY_REWRITE'", + "'FUZZY_TRANSPOSITIONS'", "'LENIENT'", "'LOW_FREQ_OPERATOR'", "'MAX_DETERMINIZED_STATES'", + "'MAX_EXPANSIONS'", "'MINIMUM_SHOULD_MATCH'", "'OPERATOR'", "'PHRASE_SLOP'", + "'PREFIX_LENGTH'", "'QUOTE_ANALYZER'", "'QUOTE_FIELD_SUFFIX'", "'REWRITE'", + "'SLOP'", "'TIE_BREAKER'", "'TIME_ZONE'", "'TYPE'", "'ZERO_TERMS_QUERY'", + "'HIGHLIGHT'", "'PRE_TAGS'", "'POST_TAGS'", "'MATCH_BOOL_PREFIX'", "'*'", + "'/'", "'%'", "'+'", "'-'", "'DIV'", "'MOD'", "'='", "'>'", "'<'", "'!'", + "'~'", "'|'", "'&'", "'^'", "'.'", "'('", "')'", "'['", "']'", "','", + "';'", "'@'", "'0'", "'1'", "'2'", "'''", "'\"'", "'`'", "':'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "SPACE", "SPEC_SQL_COMMENT", "COMMENT_INPUT", "LINE_COMMENT", "ALL", + "AND", "AS", "ASC", "BOOLEAN", "BETWEEN", "BY", "CASE", "CAST", "CROSS", + "COLUMNS", "DATETIME", "DELETE", "DESC", "DESCRIBE", "DISTINCT", "DOUBLE", + "ELSE", "EXISTS", "FALSE", "FLOAT", "FIRST", "FROM", "GROUP", "HAVING", + "IN", "INNER", "INT", "INTEGER", "IS", "JOIN", "LAST", "LEFT", "LIKE", + "LIMIT", "LONG", "MATCH", "NATURAL", "MISSING_LITERAL", "NOT", "NULL_LITERAL", + "NULLS", "ON", "OR", "ORDER", "OUTER", "OVER", "PARTITION", "REGEXP", + "RIGHT", "SELECT", "SHOW", "STRING", "THEN", "TRUE", "UNION", "USING", + "WHEN", "WHERE", "EXCEPT", "AVG", "COUNT", "MAX", "MIN", "SUM", "VAR_POP", + "VAR_SAMP", "VARIANCE", "STD", "STDDEV", "STDDEV_POP", "STDDEV_SAMP", + "SUBSTRING", "TRIM", "END", "FULL", "OFFSET", "INTERVAL", "MICROSECOND", + "SECOND", "MINUTE", "HOUR", "DAY", "WEEK", "MONTH", "QUARTER", "YEAR", + "SECOND_MICROSECOND", "MINUTE_MICROSECOND", "MINUTE_SECOND", "HOUR_MICROSECOND", + "HOUR_SECOND", "HOUR_MINUTE", "DAY_MICROSECOND", "DAY_SECOND", "DAY_MINUTE", + "DAY_HOUR", "YEAR_MONTH", "TABLES", "ABS", "ACOS", "ADD", "ADDTIME", + "ASCII", "ASIN", "ATAN", "ATAN2", "CBRT", "CEIL", "CEILING", "CONCAT", + "CONCAT_WS", "CONV", "CONVERT_TZ", "COS", "COSH", "COT", "CRC32", "CURDATE", + "CURTIME", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP", "DATE", + "DATE_ADD", "DATE_FORMAT", "DATE_SUB", "DATEDIFF", "DAYNAME", "DAYOFMONTH", + "DAYOFWEEK", "DAYOFYEAR", "DEGREES", "DIVIDE", "E", "EXP", "EXPM1", "EXTRACT", + "FLOOR", "FROM_DAYS", "FROM_UNIXTIME", "GET_FORMAT", "IF", "IFNULL", + "ISNULL", "LAST_DAY", "LENGTH", "LN", "LOCALTIME", "LOCALTIMESTAMP", + "LOCATE", "LOG", "LOG10", "LOG2", "LOWER", "LTRIM", "MAKEDATE", "MAKETIME", + "MODULUS", "MONTHNAME", "MULTIPLY", "NOW", "NULLIF", "PERIOD_ADD", "PERIOD_DIFF", + "PI", "POSITION", "POW", "POWER", "RADIANS", "RAND", "REPLACE", "RINT", + "ROUND", "RTRIM", "REVERSE", "SEC_TO_TIME", "SIGN", "SIGNUM", "SIN", + "SINH", "SQRT", "STR_TO_DATE", "SUBDATE", "SUBTIME", "SUBTRACT", "SYSDATE", + "TAN", "TIME", "TIMEDIFF", "TIME_FORMAT", "TIME_TO_SEC", "TIMESTAMP", + "TRUNCATE", "TO_DAYS", "TO_SECONDS", "UNIX_TIMESTAMP", "UPPER", "UTC_DATE", + "UTC_TIME", "UTC_TIMESTAMP", "D", "T", "TS", "LEFT_BRACE", "RIGHT_BRACE", + "DENSE_RANK", "RANK", "ROW_NUMBER", "DATE_HISTOGRAM", "DAY_OF_MONTH", + "DAY_OF_YEAR", "DAY_OF_WEEK", "EXCLUDE", "EXTENDED_STATS", "FIELD", "FILTER", + "GEO_BOUNDING_BOX", "GEO_CELL", "GEO_DISTANCE", "GEO_DISTANCE_RANGE", + "GEO_INTERSECTS", "GEO_POLYGON", "HISTOGRAM", "HOUR_OF_DAY", "INCLUDE", + "IN_TERMS", "MATCHPHRASE", "MATCH_PHRASE", "MATCHPHRASEQUERY", "SIMPLE_QUERY_STRING", + "QUERY_STRING", "MATCH_PHRASE_PREFIX", "MATCHQUERY", "MATCH_QUERY", "MINUTE_OF_DAY", + "MINUTE_OF_HOUR", "MONTH_OF_YEAR", "MULTIMATCH", "MULTI_MATCH", "MULTIMATCHQUERY", + "NESTED", "PERCENTILES", "PERCENTILE", "PERCENTILE_APPROX", "REGEXP_QUERY", + "REVERSE_NESTED", "QUERY", "RANGE", "SCORE", "SCOREQUERY", "SCORE_QUERY", + "SECOND_OF_MINUTE", "STATS", "TERM", "TERMS", "TIMESTAMPADD", "TIMESTAMPDIFF", + "TOPHITS", "TYPEOF", "WEEK_OF_YEAR", "WEEKOFYEAR", "WEEKDAY", "WILDCARDQUERY", + "WILDCARD_QUERY", "SUBSTR", "STRCMP", "ADDDATE", "YEARWEEK", "ALLOW_LEADING_WILDCARD", + "ANALYZER", "ANALYZE_WILDCARD", "AUTO_GENERATE_SYNONYMS_PHRASE_QUERY", + "BOOST", "CASE_INSENSITIVE", "CUTOFF_FREQUENCY", "DEFAULT_FIELD", "DEFAULT_OPERATOR", + "ESCAPE", "ENABLE_POSITION_INCREMENTS", "FIELDS", "FLAGS", "FUZZINESS", + "FUZZY_MAX_EXPANSIONS", "FUZZY_PREFIX_LENGTH", "FUZZY_REWRITE", "FUZZY_TRANSPOSITIONS", + "LENIENT", "LOW_FREQ_OPERATOR", "MAX_DETERMINIZED_STATES", "MAX_EXPANSIONS", + "MINIMUM_SHOULD_MATCH", "OPERATOR", "PHRASE_SLOP", "PREFIX_LENGTH", "QUOTE_ANALYZER", + "QUOTE_FIELD_SUFFIX", "REWRITE", "SLOP", "TIE_BREAKER", "TIME_ZONE", + "TYPE", "ZERO_TERMS_QUERY", "HIGHLIGHT", "HIGHLIGHT_PRE_TAGS", "HIGHLIGHT_POST_TAGS", + "MATCH_BOOL_PREFIX", "STAR", "SLASH", "MODULE", "PLUS", "MINUS", "DIV", + "MOD", "EQUAL_SYMBOL", "GREATER_SYMBOL", "LESS_SYMBOL", "EXCLAMATION_SYMBOL", + "BIT_NOT_OP", "BIT_OR_OP", "BIT_AND_OP", "BIT_XOR_OP", "DOT", "LR_BRACKET", + "RR_BRACKET", "LT_SQR_PRTHS", "RT_SQR_PRTHS", "COMMA", "SEMI", "AT_SIGN", + "ZERO_DECIMAL", "ONE_DECIMAL", "TWO_DECIMAL", "SINGLE_QUOTE_SYMB", "DOUBLE_QUOTE_SYMB", + "REVERSE_QUOTE_SYMB", "COLON_SYMB", "START_NATIONAL_STRING_LITERAL", + "STRING_LITERAL", "DECIMAL_LITERAL", "HEXADECIMAL_LITERAL", "REAL_LITERAL", + "NULL_SPEC_LITERAL", "BIT_STRING", "ID", "DOUBLE_QUOTE_ID", "BACKTICK_QUOTE_ID", + "ERROR_RECOGNITION" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + + public OpenSearchSQLLexer(CharStream input) { + super(input); + _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @Override + public String getGrammarFileName() { return "OpenSearchSQLLexer.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public String[] getChannelNames() { return channelNames; } + + @Override + public String[] getModeNames() { return modeNames; } + + @Override + public ATN getATN() { return _ATN; } + + private static final String _serializedATNSegment0 = + "\u0004\u0000\u0160\u0ec0\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002"+ + "\u0001\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002"+ + "\u0004\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002"+ + "\u0007\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002"+ + "\u000b\u0007\u000b\u0002\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e"+ + "\u0002\u000f\u0007\u000f\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011"+ + "\u0002\u0012\u0007\u0012\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014"+ + "\u0002\u0015\u0007\u0015\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017"+ + "\u0002\u0018\u0007\u0018\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a"+ + "\u0002\u001b\u0007\u001b\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d"+ + "\u0002\u001e\u0007\u001e\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!"+ + "\u0007!\u0002\"\u0007\"\u0002#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002"+ + "&\u0007&\u0002\'\u0007\'\u0002(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002"+ + "+\u0007+\u0002,\u0007,\u0002-\u0007-\u0002.\u0007.\u0002/\u0007/\u0002"+ + "0\u00070\u00021\u00071\u00022\u00072\u00023\u00073\u00024\u00074\u0002"+ + "5\u00075\u00026\u00076\u00027\u00077\u00028\u00078\u00029\u00079\u0002"+ + ":\u0007:\u0002;\u0007;\u0002<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002"+ + "?\u0007?\u0002@\u0007@\u0002A\u0007A\u0002B\u0007B\u0002C\u0007C\u0002"+ + "D\u0007D\u0002E\u0007E\u0002F\u0007F\u0002G\u0007G\u0002H\u0007H\u0002"+ + "I\u0007I\u0002J\u0007J\u0002K\u0007K\u0002L\u0007L\u0002M\u0007M\u0002"+ + "N\u0007N\u0002O\u0007O\u0002P\u0007P\u0002Q\u0007Q\u0002R\u0007R\u0002"+ + "S\u0007S\u0002T\u0007T\u0002U\u0007U\u0002V\u0007V\u0002W\u0007W\u0002"+ + "X\u0007X\u0002Y\u0007Y\u0002Z\u0007Z\u0002[\u0007[\u0002\\\u0007\\\u0002"+ + "]\u0007]\u0002^\u0007^\u0002_\u0007_\u0002`\u0007`\u0002a\u0007a\u0002"+ + "b\u0007b\u0002c\u0007c\u0002d\u0007d\u0002e\u0007e\u0002f\u0007f\u0002"+ + "g\u0007g\u0002h\u0007h\u0002i\u0007i\u0002j\u0007j\u0002k\u0007k\u0002"+ + "l\u0007l\u0002m\u0007m\u0002n\u0007n\u0002o\u0007o\u0002p\u0007p\u0002"+ + "q\u0007q\u0002r\u0007r\u0002s\u0007s\u0002t\u0007t\u0002u\u0007u\u0002"+ + "v\u0007v\u0002w\u0007w\u0002x\u0007x\u0002y\u0007y\u0002z\u0007z\u0002"+ + "{\u0007{\u0002|\u0007|\u0002}\u0007}\u0002~\u0007~\u0002\u007f\u0007\u007f"+ + "\u0002\u0080\u0007\u0080\u0002\u0081\u0007\u0081\u0002\u0082\u0007\u0082"+ + "\u0002\u0083\u0007\u0083\u0002\u0084\u0007\u0084\u0002\u0085\u0007\u0085"+ + "\u0002\u0086\u0007\u0086\u0002\u0087\u0007\u0087\u0002\u0088\u0007\u0088"+ + "\u0002\u0089\u0007\u0089\u0002\u008a\u0007\u008a\u0002\u008b\u0007\u008b"+ + "\u0002\u008c\u0007\u008c\u0002\u008d\u0007\u008d\u0002\u008e\u0007\u008e"+ + "\u0002\u008f\u0007\u008f\u0002\u0090\u0007\u0090\u0002\u0091\u0007\u0091"+ + "\u0002\u0092\u0007\u0092\u0002\u0093\u0007\u0093\u0002\u0094\u0007\u0094"+ + "\u0002\u0095\u0007\u0095\u0002\u0096\u0007\u0096\u0002\u0097\u0007\u0097"+ + "\u0002\u0098\u0007\u0098\u0002\u0099\u0007\u0099\u0002\u009a\u0007\u009a"+ + "\u0002\u009b\u0007\u009b\u0002\u009c\u0007\u009c\u0002\u009d\u0007\u009d"+ + "\u0002\u009e\u0007\u009e\u0002\u009f\u0007\u009f\u0002\u00a0\u0007\u00a0"+ + "\u0002\u00a1\u0007\u00a1\u0002\u00a2\u0007\u00a2\u0002\u00a3\u0007\u00a3"+ + "\u0002\u00a4\u0007\u00a4\u0002\u00a5\u0007\u00a5\u0002\u00a6\u0007\u00a6"+ + "\u0002\u00a7\u0007\u00a7\u0002\u00a8\u0007\u00a8\u0002\u00a9\u0007\u00a9"+ + "\u0002\u00aa\u0007\u00aa\u0002\u00ab\u0007\u00ab\u0002\u00ac\u0007\u00ac"+ + "\u0002\u00ad\u0007\u00ad\u0002\u00ae\u0007\u00ae\u0002\u00af\u0007\u00af"+ + "\u0002\u00b0\u0007\u00b0\u0002\u00b1\u0007\u00b1\u0002\u00b2\u0007\u00b2"+ + "\u0002\u00b3\u0007\u00b3\u0002\u00b4\u0007\u00b4\u0002\u00b5\u0007\u00b5"+ + "\u0002\u00b6\u0007\u00b6\u0002\u00b7\u0007\u00b7\u0002\u00b8\u0007\u00b8"+ + "\u0002\u00b9\u0007\u00b9\u0002\u00ba\u0007\u00ba\u0002\u00bb\u0007\u00bb"+ + "\u0002\u00bc\u0007\u00bc\u0002\u00bd\u0007\u00bd\u0002\u00be\u0007\u00be"+ + "\u0002\u00bf\u0007\u00bf\u0002\u00c0\u0007\u00c0\u0002\u00c1\u0007\u00c1"+ + "\u0002\u00c2\u0007\u00c2\u0002\u00c3\u0007\u00c3\u0002\u00c4\u0007\u00c4"+ + "\u0002\u00c5\u0007\u00c5\u0002\u00c6\u0007\u00c6\u0002\u00c7\u0007\u00c7"+ + "\u0002\u00c8\u0007\u00c8\u0002\u00c9\u0007\u00c9\u0002\u00ca\u0007\u00ca"+ + "\u0002\u00cb\u0007\u00cb\u0002\u00cc\u0007\u00cc\u0002\u00cd\u0007\u00cd"+ + "\u0002\u00ce\u0007\u00ce\u0002\u00cf\u0007\u00cf\u0002\u00d0\u0007\u00d0"+ + "\u0002\u00d1\u0007\u00d1\u0002\u00d2\u0007\u00d2\u0002\u00d3\u0007\u00d3"+ + "\u0002\u00d4\u0007\u00d4\u0002\u00d5\u0007\u00d5\u0002\u00d6\u0007\u00d6"+ + "\u0002\u00d7\u0007\u00d7\u0002\u00d8\u0007\u00d8\u0002\u00d9\u0007\u00d9"+ + "\u0002\u00da\u0007\u00da\u0002\u00db\u0007\u00db\u0002\u00dc\u0007\u00dc"+ + "\u0002\u00dd\u0007\u00dd\u0002\u00de\u0007\u00de\u0002\u00df\u0007\u00df"+ + "\u0002\u00e0\u0007\u00e0\u0002\u00e1\u0007\u00e1\u0002\u00e2\u0007\u00e2"+ + "\u0002\u00e3\u0007\u00e3\u0002\u00e4\u0007\u00e4\u0002\u00e5\u0007\u00e5"+ + "\u0002\u00e6\u0007\u00e6\u0002\u00e7\u0007\u00e7\u0002\u00e8\u0007\u00e8"+ + "\u0002\u00e9\u0007\u00e9\u0002\u00ea\u0007\u00ea\u0002\u00eb\u0007\u00eb"+ + "\u0002\u00ec\u0007\u00ec\u0002\u00ed\u0007\u00ed\u0002\u00ee\u0007\u00ee"+ + "\u0002\u00ef\u0007\u00ef\u0002\u00f0\u0007\u00f0\u0002\u00f1\u0007\u00f1"+ + "\u0002\u00f2\u0007\u00f2\u0002\u00f3\u0007\u00f3\u0002\u00f4\u0007\u00f4"+ + "\u0002\u00f5\u0007\u00f5\u0002\u00f6\u0007\u00f6\u0002\u00f7\u0007\u00f7"+ + "\u0002\u00f8\u0007\u00f8\u0002\u00f9\u0007\u00f9\u0002\u00fa\u0007\u00fa"+ + "\u0002\u00fb\u0007\u00fb\u0002\u00fc\u0007\u00fc\u0002\u00fd\u0007\u00fd"+ + "\u0002\u00fe\u0007\u00fe\u0002\u00ff\u0007\u00ff\u0002\u0100\u0007\u0100"+ + "\u0002\u0101\u0007\u0101\u0002\u0102\u0007\u0102\u0002\u0103\u0007\u0103"+ + "\u0002\u0104\u0007\u0104\u0002\u0105\u0007\u0105\u0002\u0106\u0007\u0106"+ + "\u0002\u0107\u0007\u0107\u0002\u0108\u0007\u0108\u0002\u0109\u0007\u0109"+ + "\u0002\u010a\u0007\u010a\u0002\u010b\u0007\u010b\u0002\u010c\u0007\u010c"+ + "\u0002\u010d\u0007\u010d\u0002\u010e\u0007\u010e\u0002\u010f\u0007\u010f"+ + "\u0002\u0110\u0007\u0110\u0002\u0111\u0007\u0111\u0002\u0112\u0007\u0112"+ + "\u0002\u0113\u0007\u0113\u0002\u0114\u0007\u0114\u0002\u0115\u0007\u0115"+ + "\u0002\u0116\u0007\u0116\u0002\u0117\u0007\u0117\u0002\u0118\u0007\u0118"+ + "\u0002\u0119\u0007\u0119\u0002\u011a\u0007\u011a\u0002\u011b\u0007\u011b"+ + "\u0002\u011c\u0007\u011c\u0002\u011d\u0007\u011d\u0002\u011e\u0007\u011e"+ + "\u0002\u011f\u0007\u011f\u0002\u0120\u0007\u0120\u0002\u0121\u0007\u0121"+ + "\u0002\u0122\u0007\u0122\u0002\u0123\u0007\u0123\u0002\u0124\u0007\u0124"+ + "\u0002\u0125\u0007\u0125\u0002\u0126\u0007\u0126\u0002\u0127\u0007\u0127"+ + "\u0002\u0128\u0007\u0128\u0002\u0129\u0007\u0129\u0002\u012a\u0007\u012a"+ + "\u0002\u012b\u0007\u012b\u0002\u012c\u0007\u012c\u0002\u012d\u0007\u012d"+ + "\u0002\u012e\u0007\u012e\u0002\u012f\u0007\u012f\u0002\u0130\u0007\u0130"+ + "\u0002\u0131\u0007\u0131\u0002\u0132\u0007\u0132\u0002\u0133\u0007\u0133"+ + "\u0002\u0134\u0007\u0134\u0002\u0135\u0007\u0135\u0002\u0136\u0007\u0136"+ + "\u0002\u0137\u0007\u0137\u0002\u0138\u0007\u0138\u0002\u0139\u0007\u0139"+ + "\u0002\u013a\u0007\u013a\u0002\u013b\u0007\u013b\u0002\u013c\u0007\u013c"+ + "\u0002\u013d\u0007\u013d\u0002\u013e\u0007\u013e\u0002\u013f\u0007\u013f"+ + "\u0002\u0140\u0007\u0140\u0002\u0141\u0007\u0141\u0002\u0142\u0007\u0142"+ + "\u0002\u0143\u0007\u0143\u0002\u0144\u0007\u0144\u0002\u0145\u0007\u0145"+ + "\u0002\u0146\u0007\u0146\u0002\u0147\u0007\u0147\u0002\u0148\u0007\u0148"+ + "\u0002\u0149\u0007\u0149\u0002\u014a\u0007\u014a\u0002\u014b\u0007\u014b"+ + "\u0002\u014c\u0007\u014c\u0002\u014d\u0007\u014d\u0002\u014e\u0007\u014e"+ + "\u0002\u014f\u0007\u014f\u0002\u0150\u0007\u0150\u0002\u0151\u0007\u0151"+ + "\u0002\u0152\u0007\u0152\u0002\u0153\u0007\u0153\u0002\u0154\u0007\u0154"+ + "\u0002\u0155\u0007\u0155\u0002\u0156\u0007\u0156\u0002\u0157\u0007\u0157"+ + "\u0002\u0158\u0007\u0158\u0002\u0159\u0007\u0159\u0002\u015a\u0007\u015a"+ + "\u0002\u015b\u0007\u015b\u0002\u015c\u0007\u015c\u0002\u015d\u0007\u015d"+ + "\u0002\u015e\u0007\u015e\u0002\u015f\u0007\u015f\u0002\u0160\u0007\u0160"+ + "\u0002\u0161\u0007\u0161\u0002\u0162\u0007\u0162\u0002\u0163\u0007\u0163"+ + "\u0002\u0164\u0007\u0164\u0002\u0165\u0007\u0165\u0002\u0166\u0007\u0166"+ + "\u0002\u0167\u0007\u0167\u0001\u0000\u0004\u0000\u02d3\b\u0000\u000b\u0000"+ + "\f\u0000\u02d4\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0004\u0001\u02de\b\u0001\u000b\u0001\f\u0001"+ + "\u02df\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0005\u0002\u02eb\b\u0002\n"+ + "\u0002\f\u0002\u02ee\t\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001"+ + "\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0003"+ + "\u0003\u02f9\b\u0003\u0001\u0003\u0005\u0003\u02fc\b\u0003\n\u0003\f\u0003"+ + "\u02ff\t\u0003\u0001\u0003\u0003\u0003\u0302\b\u0003\u0001\u0003\u0001"+ + "\u0003\u0003\u0003\u0306\b\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001"+ + "\u0003\u0003\u0003\u030c\b\u0003\u0001\u0003\u0001\u0003\u0003\u0003\u0310"+ + "\b\u0003\u0003\u0003\u0312\b\u0003\u0001\u0003\u0001\u0003\u0001\u0004"+ + "\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005\u0001\u0005"+ + "\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007"+ + "\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001"+ + "\b\u0001\b\u0001\b\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001"+ + "\t\u0001\t\u0001\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001\u000b"+ + "\u0001\u000b\u0001\u000b\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001"+ + "\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001"+ + "\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+ + "\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001"+ + "\u000f\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+ + "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0001"+ + "\u0011\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0012\u0001"+ + "\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001"+ + "\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001"+ + "\u0013\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+ + "\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001"+ + "\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001\u0016\u0001"+ + "\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001"+ + "\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001"+ + "\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001"+ + "\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001"+ + "\u001a\u0001\u001a\u0001\u001a\u0001\u001b\u0001\u001b\u0001\u001b\u0001"+ + "\u001b\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001"+ + "\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001d\u0001\u001d\u0001"+ + "\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001"+ + "\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001 \u0001 \u0001"+ + " \u0001 \u0001 \u0001 \u0001 \u0001 \u0001!\u0001!\u0001!\u0001\"\u0001"+ + "\"\u0001\"\u0001\"\u0001\"\u0001#\u0001#\u0001#\u0001#\u0001#\u0001$\u0001"+ + "$\u0001$\u0001$\u0001$\u0001%\u0001%\u0001%\u0001%\u0001%\u0001&\u0001"+ + "&\u0001&\u0001&\u0001&\u0001&\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'"+ + "\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001)\u0001)\u0001)\u0001"+ + ")\u0001)\u0001)\u0001)\u0001)\u0001*\u0001*\u0001*\u0001*\u0001*\u0001"+ + "*\u0001*\u0001*\u0001+\u0001+\u0001+\u0001+\u0001,\u0001,\u0001,\u0001"+ + ",\u0001,\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001.\u0001.\u0001"+ + ".\u0001/\u0001/\u0001/\u00010\u00010\u00010\u00010\u00010\u00010\u0001"+ + "1\u00011\u00011\u00011\u00011\u00011\u00012\u00012\u00012\u00012\u0001"+ + "2\u00013\u00013\u00013\u00013\u00013\u00013\u00013\u00013\u00013\u0001"+ + "3\u00014\u00014\u00014\u00014\u00014\u00014\u00014\u00015\u00015\u0001"+ + "5\u00015\u00015\u00015\u00016\u00016\u00016\u00016\u00016\u00016\u0001"+ + "6\u00017\u00017\u00017\u00017\u00017\u00018\u00018\u00018\u00018\u0001"+ + "8\u00018\u00018\u00019\u00019\u00019\u00019\u00019\u0001:\u0001:\u0001"+ + ":\u0001:\u0001:\u0001;\u0001;\u0001;\u0001;\u0001;\u0001;\u0001<\u0001"+ + "<\u0001<\u0001<\u0001<\u0001<\u0001=\u0001=\u0001=\u0001=\u0001=\u0001"+ + ">\u0001>\u0001>\u0001>\u0001>\u0001>\u0001?\u0001?\u0001?\u0001?\u0001"+ + "?\u0001?\u0001@\u0001@\u0001@\u0001@\u0001A\u0001A\u0001A\u0001A\u0001"+ + "A\u0001A\u0001B\u0001B\u0001B\u0001B\u0001C\u0001C\u0001C\u0001C\u0001"+ + "D\u0001D\u0001D\u0001D\u0001E\u0001E\u0001E\u0001E\u0001E\u0001E\u0001"+ + "E\u0001E\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001"+ + "F\u0001G\u0001G\u0001G\u0001G\u0001G\u0001G\u0001G\u0001G\u0001G\u0001"+ + "H\u0001H\u0001H\u0001H\u0001I\u0001I\u0001I\u0001I\u0001I\u0001I\u0001"+ + "I\u0001J\u0001J\u0001J\u0001J\u0001J\u0001J\u0001J\u0001J\u0001J\u0001"+ + "J\u0001J\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001"+ + "K\u0001K\u0001K\u0001K\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001"+ + "L\u0001L\u0001L\u0001L\u0001M\u0001M\u0001M\u0001M\u0001M\u0001N\u0001"+ + "N\u0001N\u0001N\u0001O\u0001O\u0001O\u0001O\u0001O\u0001P\u0001P\u0001"+ + "P\u0001P\u0001P\u0001P\u0001P\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001"+ + "Q\u0001Q\u0001Q\u0001Q\u0001R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001"+ + "R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001S\u0001S\u0001S\u0001S\u0001"+ + "S\u0001S\u0001S\u0001T\u0001T\u0001T\u0001T\u0001T\u0001T\u0001T\u0001"+ + "U\u0001U\u0001U\u0001U\u0001U\u0001V\u0001V\u0001V\u0001V\u0001W\u0001"+ + "W\u0001W\u0001W\u0001W\u0001X\u0001X\u0001X\u0001X\u0001X\u0001X\u0001"+ + "Y\u0001Y\u0001Y\u0001Y\u0001Y\u0001Y\u0001Y\u0001Y\u0001Z\u0001Z\u0001"+ + "Z\u0001Z\u0001Z\u0001[\u0001[\u0001[\u0001[\u0001[\u0001[\u0001[\u0001"+ + "[\u0001[\u0001[\u0001[\u0001[\u0001[\u0001[\u0001[\u0001[\u0001[\u0001"+ + "[\u0001[\u0001\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001"+ + "\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001"+ + "\\\u0001\\\u0001\\\u0001]\u0001]\u0001]\u0001]\u0001]\u0001]\u0001]\u0001"+ + "]\u0001]\u0001]\u0001]\u0001]\u0001]\u0001]\u0001^\u0001^\u0001^\u0001"+ + "^\u0001^\u0001^\u0001^\u0001^\u0001^\u0001^\u0001^\u0001^\u0001^\u0001"+ + "^\u0001^\u0001^\u0001^\u0001_\u0001_\u0001_\u0001_\u0001_\u0001_\u0001"+ + "_\u0001_\u0001_\u0001_\u0001_\u0001_\u0001`\u0001`\u0001`\u0001`\u0001"+ + "`\u0001`\u0001`\u0001`\u0001`\u0001`\u0001`\u0001`\u0001a\u0001a\u0001"+ + "a\u0001a\u0001a\u0001a\u0001a\u0001a\u0001a\u0001a\u0001a\u0001a\u0001"+ + "a\u0001a\u0001a\u0001a\u0001b\u0001b\u0001b\u0001b\u0001b\u0001b\u0001"+ + "b\u0001b\u0001b\u0001b\u0001b\u0001c\u0001c\u0001c\u0001c\u0001c\u0001"+ + "c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001d\u0001d\u0001d\u0001d\u0001"+ + "d\u0001d\u0001d\u0001d\u0001d\u0001e\u0001e\u0001e\u0001e\u0001e\u0001"+ + "e\u0001e\u0001e\u0001e\u0001e\u0001e\u0001f\u0001f\u0001f\u0001f\u0001"+ + "f\u0001f\u0001f\u0001g\u0001g\u0001g\u0001g\u0001h\u0001h\u0001h\u0001"+ + "h\u0001h\u0001i\u0001i\u0001i\u0001i\u0001j\u0001j\u0001j\u0001j\u0001"+ + "j\u0001j\u0001j\u0001j\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001"+ + "l\u0001l\u0001l\u0001l\u0001l\u0001m\u0001m\u0001m\u0001m\u0001m\u0001"+ + "n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001o\u0001o\u0001o\u0001o\u0001"+ + "o\u0001p\u0001p\u0001p\u0001p\u0001p\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001s\u0001s\u0001s\u0001s\u0001s\u0001s\u0001s\u0001s\u0001s\u0001"+ + "s\u0001t\u0001t\u0001t\u0001t\u0001t\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001v\u0001v\u0001v\u0001"+ + "v\u0001w\u0001w\u0001w\u0001w\u0001w\u0001x\u0001x\u0001x\u0001x\u0001"+ + "y\u0001y\u0001y\u0001y\u0001y\u0001y\u0001z\u0001z\u0001z\u0001z\u0001"+ + "z\u0001z\u0001z\u0001z\u0001{\u0001{\u0001{\u0001{\u0001{\u0001{\u0001"+ + "{\u0001{\u0001|\u0001|\u0001|\u0001|\u0001|\u0001|\u0001|\u0001|\u0001"+ + "|\u0001|\u0001|\u0001|\u0001|\u0001}\u0001}\u0001}\u0001}\u0001}\u0001"+ + "}\u0001}\u0001}\u0001}\u0001}\u0001}\u0001}\u0001}\u0001~\u0001~\u0001"+ + "~\u0001~\u0001~\u0001~\u0001~\u0001~\u0001~\u0001~\u0001~\u0001~\u0001"+ + "~\u0001~\u0001~\u0001~\u0001~\u0001~\u0001\u007f\u0001\u007f\u0001\u007f"+ + "\u0001\u007f\u0001\u007f\u0001\u0080\u0001\u0080\u0001\u0080\u0001\u0080"+ + "\u0001\u0080\u0001\u0080\u0001\u0080\u0001\u0080\u0001\u0080\u0001\u0081"+ + "\u0001\u0081\u0001\u0081\u0001\u0081\u0001\u0081\u0001\u0081\u0001\u0081"+ + "\u0001\u0081\u0001\u0081\u0001\u0081\u0001\u0081\u0001\u0081\u0001\u0082"+ + "\u0001\u0082\u0001\u0082\u0001\u0082\u0001\u0082\u0001\u0082\u0001\u0082"+ + "\u0001\u0082\u0001\u0082\u0001\u0083\u0001\u0083\u0001\u0083\u0001\u0083"+ + "\u0001\u0083\u0001\u0083\u0001\u0083\u0001\u0083\u0001\u0083\u0001\u0084"+ + "\u0001\u0084\u0001\u0084\u0001\u0084\u0001\u0084\u0001\u0084\u0001\u0084"+ + "\u0001\u0084\u0001\u0085\u0001\u0085\u0001\u0085\u0001\u0085\u0001\u0085"+ + "\u0001\u0085\u0001\u0085\u0001\u0085\u0001\u0085\u0001\u0085\u0001\u0085"+ + "\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0086"+ + "\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0087\u0001\u0087"+ + "\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0087"+ + "\u0001\u0087\u0001\u0087\u0001\u0088\u0001\u0088\u0001\u0088\u0001\u0088"+ + "\u0001\u0088\u0001\u0088\u0001\u0088\u0001\u0088\u0001\u0089\u0001\u0089"+ + "\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u008a"+ + "\u0001\u008a\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008c"+ + "\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008d"+ + "\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d"+ + "\u0001\u008d\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e"+ + "\u0001\u008e\u0001\u008f\u0001\u008f\u0001\u008f\u0001\u008f\u0001\u008f"+ + "\u0001\u008f\u0001\u008f\u0001\u008f\u0001\u008f\u0001\u008f\u0001\u0090"+ + "\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090"+ + "\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090"+ + "\u0001\u0090\u0001\u0091\u0001\u0091\u0001\u0091\u0001\u0091\u0001\u0091"+ + "\u0001\u0091\u0001\u0091\u0001\u0091\u0001\u0091\u0001\u0091\u0001\u0091"+ + "\u0001\u0092\u0001\u0092\u0001\u0092\u0001\u0093\u0001\u0093\u0001\u0093"+ + "\u0001\u0093\u0001\u0093\u0001\u0093\u0001\u0093\u0001\u0094\u0001\u0094"+ + "\u0001\u0094\u0001\u0094\u0001\u0094\u0001\u0094\u0001\u0094\u0001\u0095"+ + "\u0001\u0095\u0001\u0095\u0001\u0095\u0001\u0095\u0001\u0095\u0001\u0095"+ + "\u0001\u0095\u0001\u0095\u0001\u0096\u0001\u0096\u0001\u0096\u0001\u0096"+ + "\u0001\u0096\u0001\u0096\u0001\u0096\u0001\u0097\u0001\u0097\u0001\u0097"+ + "\u0001\u0098\u0001\u0098\u0001\u0098\u0001\u0098\u0001\u0098\u0001\u0098"+ + "\u0001\u0098\u0001\u0098\u0001\u0098\u0001\u0098\u0001\u0099\u0001\u0099"+ + "\u0001\u0099\u0001\u0099\u0001\u0099\u0001\u0099\u0001\u0099\u0001\u0099"+ + "\u0001\u0099\u0001\u0099\u0001\u0099\u0001\u0099\u0001\u0099\u0001\u0099"+ + "\u0001\u0099\u0001\u009a\u0001\u009a\u0001\u009a\u0001\u009a\u0001\u009a"+ + "\u0001\u009a\u0001\u009a\u0001\u009b\u0001\u009b\u0001\u009b\u0001\u009b"+ + "\u0001\u009c\u0001\u009c\u0001\u009c\u0001\u009c\u0001\u009c\u0001\u009c"+ + "\u0001\u009d\u0001\u009d\u0001\u009d\u0001\u009d\u0001\u009d\u0001\u009e"+ + "\u0001\u009e\u0001\u009e\u0001\u009e\u0001\u009e\u0001\u009e\u0001\u009f"+ + "\u0001\u009f\u0001\u009f\u0001\u009f\u0001\u009f\u0001\u009f\u0001\u00a0"+ + "\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0001\u00a0"+ + "\u0001\u00a0\u0001\u00a0\u0001\u00a1\u0001\u00a1\u0001\u00a1\u0001\u00a1"+ + "\u0001\u00a1\u0001\u00a1\u0001\u00a1\u0001\u00a1\u0001\u00a1\u0001\u00a2"+ + "\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2"+ + "\u0001\u00a2\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3"+ + "\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a4"+ + "\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4"+ + "\u0001\u00a4\u0001\u00a4\u0001\u00a5\u0001\u00a5\u0001\u00a5\u0001\u00a5"+ + "\u0001\u00a6\u0001\u00a6\u0001\u00a6\u0001\u00a6\u0001\u00a6\u0001\u00a6"+ + "\u0001\u00a6\u0001\u00a7\u0001\u00a7\u0001\u00a7\u0001\u00a7\u0001\u00a7"+ + "\u0001\u00a7\u0001\u00a7\u0001\u00a7\u0001\u00a7\u0001\u00a7\u0001\u00a7"+ + "\u0001\u00a8\u0001\u00a8\u0001\u00a8\u0001\u00a8\u0001\u00a8\u0001\u00a8"+ + "\u0001\u00a8\u0001\u00a8\u0001\u00a8\u0001\u00a8\u0001\u00a8\u0001\u00a8"+ + "\u0001\u00a9\u0001\u00a9\u0001\u00a9\u0001\u00aa\u0001\u00aa\u0001\u00aa"+ + "\u0001\u00aa\u0001\u00aa\u0001\u00aa\u0001\u00aa\u0001\u00aa\u0001\u00aa"+ + "\u0001\u00ab\u0001\u00ab\u0001\u00ab\u0001\u00ab\u0001\u00ac\u0001\u00ac"+ + "\u0001\u00ac\u0001\u00ac\u0001\u00ac\u0001\u00ac\u0001\u00ad\u0001\u00ad"+ + "\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad"+ + "\u0001\u00ae\u0001\u00ae\u0001\u00ae\u0001\u00ae\u0001\u00ae\u0001\u00af"+ + "\u0001\u00af\u0001\u00af\u0001\u00af\u0001\u00af\u0001\u00af\u0001\u00af"+ + "\u0001\u00af\u0001\u00b0\u0001\u00b0\u0001\u00b0\u0001\u00b0\u0001\u00b0"+ + "\u0001\u00b1\u0001\u00b1\u0001\u00b1\u0001\u00b1\u0001\u00b1\u0001\u00b1"+ + "\u0001\u00b2\u0001\u00b2\u0001\u00b2\u0001\u00b2\u0001\u00b2\u0001\u00b2"+ + "\u0001\u00b3\u0001\u00b3\u0001\u00b3\u0001\u00b3\u0001\u00b3\u0001\u00b3"+ + "\u0001\u00b3\u0001\u00b3\u0001\u00b4\u0001\u00b4\u0001\u00b4\u0001\u00b4"+ + "\u0001\u00b4\u0001\u00b4\u0001\u00b4\u0001\u00b4\u0001\u00b4\u0001\u00b4"+ + "\u0001\u00b4\u0001\u00b4\u0001\u00b5\u0001\u00b5\u0001\u00b5\u0001\u00b5"+ + "\u0001\u00b5\u0001\u00b6\u0001\u00b6\u0001\u00b6\u0001\u00b6\u0001\u00b6"+ + "\u0001\u00b6\u0001\u00b6\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7"+ + "\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001\u00b9"+ + "\u0001\u00b9\u0001\u00b9\u0001\u00b9\u0001\u00b9\u0001\u00ba\u0001\u00ba"+ + "\u0001\u00ba\u0001\u00ba\u0001\u00ba\u0001\u00ba\u0001\u00ba\u0001\u00ba"+ + "\u0001\u00ba\u0001\u00ba\u0001\u00ba\u0001\u00ba\u0001\u00bb\u0001\u00bb"+ + "\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0001\u00bb"+ + "\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc"+ + "\u0001\u00bc\u0001\u00bc\u0001\u00bd\u0001\u00bd\u0001\u00bd\u0001\u00bd"+ + "\u0001\u00bd\u0001\u00bd\u0001\u00bd\u0001\u00bd\u0001\u00bd\u0001\u00be"+ + "\u0001\u00be\u0001\u00be\u0001\u00be\u0001\u00be\u0001\u00be\u0001\u00be"+ + "\u0001\u00be\u0001\u00bf\u0001\u00bf\u0001\u00bf\u0001\u00bf\u0001\u00c0"+ + "\u0001\u00c0\u0001\u00c0\u0001\u00c0\u0001\u00c0\u0001\u00c1\u0001\u00c1"+ + "\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0001\u00c1"+ + "\u0001\u00c1\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2"+ + "\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2"+ + "\u0001\u00c2\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3"+ + "\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3"+ + "\u0001\u00c3\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4"+ + "\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c5"+ + "\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5"+ + "\u0001\u00c5\u0001\u00c5\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6"+ + "\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c7\u0001\u00c7"+ + "\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7"+ + "\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c8\u0001\u00c8\u0001\u00c8"+ + "\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8"+ + "\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8"+ + "\u0001\u00c9\u0001\u00c9\u0001\u00c9\u0001\u00c9\u0001\u00c9\u0001\u00c9"+ + "\u0001\u00ca\u0001\u00ca\u0001\u00ca\u0001\u00ca\u0001\u00ca\u0001\u00ca"+ + "\u0001\u00ca\u0001\u00ca\u0001\u00ca\u0001\u00cb\u0001\u00cb\u0001\u00cb"+ + "\u0001\u00cb\u0001\u00cb\u0001\u00cb\u0001\u00cb\u0001\u00cb\u0001\u00cb"+ + "\u0001\u00cc\u0001\u00cc\u0001\u00cc\u0001\u00cc\u0001\u00cc\u0001\u00cc"+ + "\u0001\u00cc\u0001\u00cc\u0001\u00cc\u0001\u00cc\u0001\u00cc\u0001\u00cc"+ + "\u0001\u00cc\u0001\u00cc\u0001\u00cd\u0001\u00cd\u0001\u00ce\u0001\u00ce"+ + "\u0001\u00cf\u0001\u00cf\u0001\u00cf\u0001\u00d0\u0001\u00d0\u0001\u00d1"+ + "\u0001\u00d1\u0001\u00d2\u0001\u00d2\u0001\u00d2\u0001\u00d2\u0001\u00d2"+ + "\u0001\u00d2\u0001\u00d2\u0001\u00d2\u0001\u00d2\u0001\u00d2\u0001\u00d2"+ + "\u0001\u00d3\u0001\u00d3\u0001\u00d3\u0001\u00d3\u0001\u00d3\u0001\u00d4"+ + "\u0001\u00d4\u0001\u00d4\u0001\u00d4\u0001\u00d4\u0001\u00d4\u0001\u00d4"+ + "\u0001\u00d4\u0001\u00d4\u0001\u00d4\u0001\u00d4\u0001\u00d5\u0001\u00d5"+ + "\u0001\u00d5\u0001\u00d5\u0001\u00d5\u0001\u00d5\u0001\u00d5\u0001\u00d5"+ + "\u0001\u00d5\u0001\u00d5\u0001\u00d5\u0001\u00d5\u0001\u00d5\u0001\u00d5"+ + "\u0001\u00d5\u0001\u00d6\u0001\u00d6\u0001\u00d6\u0001\u00d6\u0001\u00d6"+ + "\u0001\u00d6\u0001\u00d6\u0001\u00d6\u0001\u00d6\u0001\u00d6\u0001\u00d6"+ + "\u0001\u00d6\u0001\u00d6\u0001\u00d7\u0001\u00d7\u0001\u00d7\u0001\u00d7"+ + "\u0001\u00d7\u0001\u00d7\u0001\u00d7\u0001\u00d7\u0001\u00d7\u0001\u00d7"+ + "\u0001\u00d7\u0001\u00d7\u0001\u00d8\u0001\u00d8\u0001\u00d8\u0001\u00d8"+ + "\u0001\u00d8\u0001\u00d8\u0001\u00d8\u0001\u00d8\u0001\u00d8\u0001\u00d8"+ + "\u0001\u00d8\u0001\u00d8\u0001\u00d9\u0001\u00d9\u0001\u00d9\u0001\u00d9"+ + "\u0001\u00d9\u0001\u00d9\u0001\u00d9\u0001\u00d9\u0001\u00da\u0001\u00da"+ + "\u0001\u00da\u0001\u00da\u0001\u00da\u0001\u00da\u0001\u00da\u0001\u00da"+ + "\u0001\u00da\u0001\u00da\u0001\u00da\u0001\u00da\u0001\u00da\u0001\u00da"+ + "\u0001\u00da\u0001\u00db\u0001\u00db\u0001\u00db\u0001\u00db\u0001\u00db"+ + "\u0001\u00db\u0001\u00dc\u0001\u00dc\u0001\u00dc\u0001\u00dc\u0001\u00dc"+ + "\u0001\u00dc\u0001\u00dc\u0001\u00dd\u0001\u00dd\u0001\u00dd\u0001\u00dd"+ + "\u0001\u00dd\u0001\u00dd\u0001\u00dd\u0001\u00dd\u0001\u00dd\u0001\u00dd"+ + "\u0001\u00dd\u0001\u00dd\u0001\u00dd\u0001\u00dd\u0001\u00dd\u0001\u00dd"+ + "\u0001\u00dd\u0001\u00de\u0001\u00de\u0001\u00de\u0001\u00de\u0001\u00de"+ + "\u0001\u00de\u0001\u00de\u0001\u00de\u0001\u00de\u0001\u00df\u0001\u00df"+ + "\u0001\u00df\u0001\u00df\u0001\u00df\u0001\u00df\u0001\u00df\u0001\u00df"+ + "\u0001\u00df\u0001\u00df\u0001\u00df\u0001\u00df\u0001\u00df\u0001\u00e0"+ + "\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0"+ + "\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0"+ + "\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0"+ + "\u0001\u00e1\u0001\u00e1\u0001\u00e1\u0001\u00e1\u0001\u00e1\u0001\u00e1"+ + "\u0001\u00e1\u0001\u00e1\u0001\u00e1\u0001\u00e1\u0001\u00e1\u0001\u00e1"+ + "\u0001\u00e1\u0001\u00e1\u0001\u00e1\u0001\u00e2\u0001\u00e2\u0001\u00e2"+ + "\u0001\u00e2\u0001\u00e2\u0001\u00e2\u0001\u00e2\u0001\u00e2\u0001\u00e2"+ + "\u0001\u00e2\u0001\u00e2\u0001\u00e2\u0001\u00e3\u0001\u00e3\u0001\u00e3"+ + "\u0001\u00e3\u0001\u00e3\u0001\u00e3\u0001\u00e3\u0001\u00e3\u0001\u00e3"+ + "\u0001\u00e3\u0001\u00e4\u0001\u00e4\u0001\u00e4\u0001\u00e4\u0001\u00e4"+ + "\u0001\u00e4\u0001\u00e4\u0001\u00e4\u0001\u00e4\u0001\u00e4\u0001\u00e4"+ + "\u0001\u00e4\u0001\u00e5\u0001\u00e5\u0001\u00e5\u0001\u00e5\u0001\u00e5"+ + "\u0001\u00e5\u0001\u00e5\u0001\u00e5\u0001\u00e6\u0001\u00e6\u0001\u00e6"+ + "\u0001\u00e6\u0001\u00e6\u0001\u00e6\u0001\u00e6\u0001\u00e6\u0001\u00e6"+ + "\u0001\u00e7\u0001\u00e7\u0001\u00e7\u0001\u00e7\u0001\u00e7\u0001\u00e7"+ + "\u0001\u00e7\u0001\u00e7\u0001\u00e7\u0001\u00e7\u0001\u00e7\u0001\u00e7"+ + "\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e8"+ + "\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e8"+ + "\u0001\u00e8\u0001\u00e9\u0001\u00e9\u0001\u00e9\u0001\u00e9\u0001\u00e9"+ + "\u0001\u00e9\u0001\u00e9\u0001\u00e9\u0001\u00e9\u0001\u00e9\u0001\u00e9"+ + "\u0001\u00e9\u0001\u00e9\u0001\u00e9\u0001\u00e9\u0001\u00e9\u0001\u00e9"+ + "\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea"+ + "\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea"+ + "\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea"+ + "\u0001\u00ea\u0001\u00ea\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb"+ + "\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb"+ + "\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00ec\u0001\u00ec\u0001\u00ec"+ + "\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec"+ + "\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec"+ + "\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ed"+ + "\u0001\u00ed\u0001\u00ed\u0001\u00ed\u0001\u00ed\u0001\u00ed\u0001\u00ed"+ + "\u0001\u00ed\u0001\u00ed\u0001\u00ed\u0001\u00ed\u0001\u00ee\u0001\u00ee"+ + "\u0001\u00ee\u0001\u00ee\u0001\u00ee\u0001\u00ee\u0001\u00ee\u0001\u00ee"+ + "\u0001\u00ee\u0001\u00ee\u0001\u00ee\u0001\u00ee\u0001\u00ef\u0001\u00ef"+ + "\u0001\u00ef\u0001\u00ef\u0001\u00ef\u0001\u00ef\u0001\u00ef\u0001\u00ef"+ + "\u0001\u00ef\u0001\u00ef\u0001\u00ef\u0001\u00ef\u0001\u00ef\u0001\u00ef"+ + "\u0001\u00f0\u0001\u00f0\u0001\u00f0\u0001\u00f0\u0001\u00f0\u0001\u00f0"+ + "\u0001\u00f0\u0001\u00f0\u0001\u00f0\u0001\u00f0\u0001\u00f0\u0001\u00f0"+ + "\u0001\u00f0\u0001\u00f0\u0001\u00f0\u0001\u00f1\u0001\u00f1\u0001\u00f1"+ + "\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1"+ + "\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f2"+ + "\u0001\u00f2\u0001\u00f2\u0001\u00f2\u0001\u00f2\u0001\u00f2\u0001\u00f2"+ + "\u0001\u00f2\u0001\u00f2\u0001\u00f2\u0001\u00f2\u0001\u00f3\u0001\u00f3"+ + "\u0001\u00f3\u0001\u00f3\u0001\u00f3\u0001\u00f3\u0001\u00f3\u0001\u00f3"+ + "\u0001\u00f3\u0001\u00f3\u0001\u00f3\u0001\u00f3\u0001\u00f4\u0001\u00f4"+ + "\u0001\u00f4\u0001\u00f4\u0001\u00f4\u0001\u00f4\u0001\u00f4\u0001\u00f4"+ + "\u0001\u00f4\u0001\u00f4\u0001\u00f4\u0001\u00f4\u0001\u00f4\u0001\u00f4"+ + "\u0001\u00f4\u0001\u00f4\u0001\u00f5\u0001\u00f5\u0001\u00f5\u0001\u00f5"+ + "\u0001\u00f5\u0001\u00f5\u0001\u00f5\u0001\u00f6\u0001\u00f6\u0001\u00f6"+ + "\u0001\u00f6\u0001\u00f6\u0001\u00f6\u0001\u00f6\u0001\u00f6\u0001\u00f6"+ + "\u0001\u00f6\u0001\u00f6\u0001\u00f6\u0001\u00f7\u0001\u00f7\u0001\u00f7"+ + "\u0001\u00f7\u0001\u00f7\u0001\u00f7\u0001\u00f7\u0001\u00f7\u0001\u00f7"+ + "\u0001\u00f7\u0001\u00f7\u0001\u00f8\u0001\u00f8\u0001\u00f8\u0001\u00f8"+ + "\u0001\u00f8\u0001\u00f8\u0001\u00f8\u0001\u00f8\u0001\u00f8\u0001\u00f8"+ + "\u0001\u00f8\u0001\u00f8\u0001\u00f8\u0001\u00f8\u0001\u00f8\u0001\u00f8"+ + "\u0001\u00f8\u0001\u00f8\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9"+ + "\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9"+ + "\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00fa\u0001\u00fa\u0001\u00fa"+ + "\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa"+ + "\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa"+ + "\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb"+ + "\u0001\u00fc\u0001\u00fc\u0001\u00fc\u0001\u00fc\u0001\u00fc\u0001\u00fc"+ + "\u0001\u00fd\u0001\u00fd\u0001\u00fd\u0001\u00fd\u0001\u00fd\u0001\u00fd"+ + "\u0001\u00fe\u0001\u00fe\u0001\u00fe\u0001\u00fe\u0001\u00fe\u0001\u00fe"+ + "\u0001\u00fe\u0001\u00fe\u0001\u00fe\u0001\u00fe\u0001\u00fe\u0001\u00ff"+ + "\u0001\u00ff\u0001\u00ff\u0001\u00ff\u0001\u00ff\u0001\u00ff\u0001\u00ff"+ + "\u0001\u00ff\u0001\u00ff\u0001\u00ff\u0001\u00ff\u0001\u00ff\u0001\u0100"+ + "\u0001\u0100\u0001\u0100\u0001\u0100\u0001\u0100\u0001\u0100\u0001\u0100"+ + "\u0001\u0100\u0001\u0100\u0001\u0100\u0001\u0100\u0001\u0100\u0001\u0100"+ + "\u0001\u0100\u0001\u0100\u0001\u0100\u0001\u0100\u0001\u0101\u0001\u0101"+ + "\u0001\u0101\u0001\u0101\u0001\u0101\u0001\u0101\u0001\u0102\u0001\u0102"+ + "\u0001\u0102\u0001\u0102\u0001\u0102\u0001\u0103\u0001\u0103\u0001\u0103"+ + "\u0001\u0103\u0001\u0103\u0001\u0103\u0001\u0104\u0001\u0104\u0001\u0104"+ + "\u0001\u0104\u0001\u0104\u0001\u0104\u0001\u0104\u0001\u0104\u0001\u0104"+ + "\u0001\u0104\u0001\u0104\u0001\u0104\u0001\u0104\u0001\u0105\u0001\u0105"+ + "\u0001\u0105\u0001\u0105\u0001\u0105\u0001\u0105\u0001\u0105\u0001\u0105"+ + "\u0001\u0105\u0001\u0105\u0001\u0105\u0001\u0105\u0001\u0105\u0001\u0105"+ + "\u0001\u0106\u0001\u0106\u0001\u0106\u0001\u0106\u0001\u0106\u0001\u0106"+ + "\u0001\u0106\u0001\u0106\u0001\u0107\u0001\u0107\u0001\u0107\u0001\u0107"+ + "\u0001\u0107\u0001\u0107\u0001\u0107\u0001\u0108\u0001\u0108\u0001\u0108"+ + "\u0001\u0108\u0001\u0108\u0001\u0108\u0001\u0108\u0001\u0108\u0001\u0108"+ + "\u0001\u0108\u0001\u0108\u0001\u0108\u0001\u0108\u0001\u0109\u0001\u0109"+ + "\u0001\u0109\u0001\u0109\u0001\u0109\u0001\u0109\u0001\u0109\u0001\u0109"+ + "\u0001\u0109\u0001\u0109\u0001\u0109\u0001\u010a\u0001\u010a\u0001\u010a"+ + "\u0001\u010a\u0001\u010a\u0001\u010a\u0001\u010a\u0001\u010a\u0001\u010b"+ + "\u0001\u010b\u0001\u010b\u0001\u010b\u0001\u010b\u0001\u010b\u0001\u010b"+ + "\u0001\u010b\u0001\u010b\u0001\u010b\u0001\u010b\u0001\u010b\u0001\u010b"+ + "\u0001\u010b\u0001\u010c\u0001\u010c\u0001\u010c\u0001\u010c\u0001\u010c"+ + "\u0001\u010c\u0001\u010c\u0001\u010c\u0001\u010c\u0001\u010c\u0001\u010c"+ + "\u0001\u010c\u0001\u010c\u0001\u010c\u0001\u010c\u0001\u010d\u0001\u010d"+ + "\u0001\u010d\u0001\u010d\u0001\u010d\u0001\u010d\u0001\u010d\u0001\u010e"+ + "\u0001\u010e\u0001\u010e\u0001\u010e\u0001\u010e\u0001\u010e\u0001\u010e"+ + "\u0001\u010f\u0001\u010f\u0001\u010f\u0001\u010f\u0001\u010f\u0001\u010f"+ + "\u0001\u010f\u0001\u010f\u0001\u0110\u0001\u0110\u0001\u0110\u0001\u0110"+ + "\u0001\u0110\u0001\u0110\u0001\u0110\u0001\u0110\u0001\u0110\u0001\u0111"+ + "\u0001\u0111\u0001\u0111\u0001\u0111\u0001\u0111\u0001\u0111\u0001\u0111"+ + "\u0001\u0111\u0001\u0111\u0001\u0111\u0001\u0111\u0001\u0111\u0001\u0111"+ + "\u0001\u0111\u0001\u0111\u0001\u0111\u0001\u0111\u0001\u0111\u0001\u0111"+ + "\u0001\u0111\u0001\u0111\u0001\u0111\u0001\u0111\u0001\u0112\u0001\u0112"+ + "\u0001\u0112\u0001\u0112\u0001\u0112\u0001\u0112\u0001\u0112\u0001\u0112"+ + "\u0001\u0112\u0001\u0113\u0001\u0113\u0001\u0113\u0001\u0113\u0001\u0113"+ + "\u0001\u0113\u0001\u0113\u0001\u0113\u0001\u0113\u0001\u0113\u0001\u0113"+ + "\u0001\u0113\u0001\u0113\u0001\u0113\u0001\u0113\u0001\u0113\u0001\u0113"+ + "\u0001\u0114\u0001\u0114\u0001\u0114\u0001\u0114\u0001\u0114\u0001\u0114"+ + "\u0001\u0114\u0001\u0114\u0001\u0114\u0001\u0114\u0001\u0114\u0001\u0114"+ + "\u0001\u0114\u0001\u0114\u0001\u0114\u0001\u0114\u0001\u0114\u0001\u0114"+ + "\u0001\u0114\u0001\u0114\u0001\u0114\u0001\u0114\u0001\u0114\u0001\u0114"+ + "\u0001\u0114\u0001\u0114\u0001\u0114\u0001\u0114\u0001\u0114\u0001\u0114"+ + "\u0001\u0114\u0001\u0114\u0001\u0114\u0001\u0114\u0001\u0114\u0001\u0114"+ + "\u0001\u0115\u0001\u0115\u0001\u0115\u0001\u0115\u0001\u0115\u0001\u0115"+ + "\u0001\u0116\u0001\u0116\u0001\u0116\u0001\u0116\u0001\u0116\u0001\u0116"+ + "\u0001\u0116\u0001\u0116\u0001\u0116\u0001\u0116\u0001\u0116\u0001\u0116"+ + "\u0001\u0116\u0001\u0116\u0001\u0116\u0001\u0116\u0001\u0116\u0001\u0117"+ + "\u0001\u0117\u0001\u0117\u0001\u0117\u0001\u0117\u0001\u0117\u0001\u0117"+ + "\u0001\u0117\u0001\u0117\u0001\u0117\u0001\u0117\u0001\u0117\u0001\u0117"+ + "\u0001\u0117\u0001\u0117\u0001\u0117\u0001\u0117\u0001\u0118\u0001\u0118"+ + "\u0001\u0118\u0001\u0118\u0001\u0118\u0001\u0118\u0001\u0118\u0001\u0118"+ + "\u0001\u0118\u0001\u0118\u0001\u0118\u0001\u0118\u0001\u0118\u0001\u0118"+ + "\u0001\u0119\u0001\u0119\u0001\u0119\u0001\u0119\u0001\u0119\u0001\u0119"+ + "\u0001\u0119\u0001\u0119\u0001\u0119\u0001\u0119\u0001\u0119\u0001\u0119"+ + "\u0001\u0119\u0001\u0119\u0001\u0119\u0001\u0119\u0001\u0119\u0001\u011a"+ + "\u0001\u011a\u0001\u011a\u0001\u011a\u0001\u011a\u0001\u011a\u0001\u011a"+ + "\u0001\u011b\u0001\u011b\u0001\u011b\u0001\u011b\u0001\u011b\u0001\u011b"+ + "\u0001\u011b\u0001\u011b\u0001\u011b\u0001\u011b\u0001\u011b\u0001\u011b"+ + "\u0001\u011b\u0001\u011b\u0001\u011b\u0001\u011b\u0001\u011b\u0001\u011b"+ + "\u0001\u011b\u0001\u011b\u0001\u011b\u0001\u011b\u0001\u011b\u0001\u011b"+ + "\u0001\u011b\u0001\u011b\u0001\u011b\u0001\u011c\u0001\u011c\u0001\u011c"+ + "\u0001\u011c\u0001\u011c\u0001\u011c\u0001\u011c\u0001\u011d\u0001\u011d"+ + "\u0001\u011d\u0001\u011d\u0001\u011d\u0001\u011d\u0001\u011e\u0001\u011e"+ + "\u0001\u011e\u0001\u011e\u0001\u011e\u0001\u011e\u0001\u011e\u0001\u011e"+ + "\u0001\u011e\u0001\u011e\u0001\u011f\u0001\u011f\u0001\u011f\u0001\u011f"+ + "\u0001\u011f\u0001\u011f\u0001\u011f\u0001\u011f\u0001\u011f\u0001\u011f"+ + "\u0001\u011f\u0001\u011f\u0001\u011f\u0001\u011f\u0001\u011f\u0001\u011f"+ + "\u0001\u011f\u0001\u011f\u0001\u011f\u0001\u011f\u0001\u011f\u0001\u0120"+ + "\u0001\u0120\u0001\u0120\u0001\u0120\u0001\u0120\u0001\u0120\u0001\u0120"+ + "\u0001\u0120\u0001\u0120\u0001\u0120\u0001\u0120\u0001\u0120\u0001\u0120"+ + "\u0001\u0120\u0001\u0120\u0001\u0120\u0001\u0120\u0001\u0120\u0001\u0120"+ + "\u0001\u0120\u0001\u0121\u0001\u0121\u0001\u0121\u0001\u0121\u0001\u0121"+ + "\u0001\u0121\u0001\u0121\u0001\u0121\u0001\u0121\u0001\u0121\u0001\u0121"+ + "\u0001\u0121\u0001\u0121\u0001\u0121\u0001\u0122\u0001\u0122\u0001\u0122"+ + "\u0001\u0122\u0001\u0122\u0001\u0122\u0001\u0122\u0001\u0122\u0001\u0122"+ + "\u0001\u0122\u0001\u0122\u0001\u0122\u0001\u0122\u0001\u0122\u0001\u0122"+ + "\u0001\u0122\u0001\u0122\u0001\u0122\u0001\u0122\u0001\u0122\u0001\u0122"+ + "\u0001\u0123\u0001\u0123\u0001\u0123\u0001\u0123\u0001\u0123\u0001\u0123"+ + "\u0001\u0123\u0001\u0123\u0001\u0124\u0001\u0124\u0001\u0124\u0001\u0124"+ + "\u0001\u0124\u0001\u0124\u0001\u0124\u0001\u0124\u0001\u0124\u0001\u0124"+ + "\u0001\u0124\u0001\u0124\u0001\u0124\u0001\u0124\u0001\u0124\u0001\u0124"+ + "\u0001\u0124\u0001\u0124\u0001\u0125\u0001\u0125\u0001\u0125\u0001\u0125"+ + "\u0001\u0125\u0001\u0125\u0001\u0125\u0001\u0125\u0001\u0125\u0001\u0125"+ + "\u0001\u0125\u0001\u0125\u0001\u0125\u0001\u0125\u0001\u0125\u0001\u0125"+ + "\u0001\u0125\u0001\u0125\u0001\u0125\u0001\u0125\u0001\u0125\u0001\u0125"+ + "\u0001\u0125\u0001\u0125\u0001\u0126\u0001\u0126\u0001\u0126\u0001\u0126"+ + "\u0001\u0126\u0001\u0126\u0001\u0126\u0001\u0126\u0001\u0126\u0001\u0126"+ + "\u0001\u0126\u0001\u0126\u0001\u0126\u0001\u0126\u0001\u0126\u0001\u0127"+ + "\u0001\u0127\u0001\u0127\u0001\u0127\u0001\u0127\u0001\u0127\u0001\u0127"+ + "\u0001\u0127\u0001\u0127\u0001\u0127\u0001\u0127\u0001\u0127\u0001\u0127"+ + "\u0001\u0127\u0001\u0127\u0001\u0127\u0001\u0127\u0001\u0127\u0001\u0127"+ + "\u0001\u0127\u0001\u0127\u0001\u0128\u0001\u0128\u0001\u0128\u0001\u0128"+ + "\u0001\u0128\u0001\u0128\u0001\u0128\u0001\u0128\u0001\u0128\u0001\u0129"+ + "\u0001\u0129\u0001\u0129\u0001\u0129\u0001\u0129\u0001\u0129\u0001\u0129"+ + "\u0001\u0129\u0001\u0129\u0001\u0129\u0001\u0129\u0001\u0129\u0001\u012a"+ + "\u0001\u012a\u0001\u012a\u0001\u012a\u0001\u012a\u0001\u012a\u0001\u012a"+ + "\u0001\u012a\u0001\u012a\u0001\u012a\u0001\u012a\u0001\u012a\u0001\u012a"+ + "\u0001\u012a\u0001\u012b\u0001\u012b\u0001\u012b\u0001\u012b\u0001\u012b"+ + "\u0001\u012b\u0001\u012b\u0001\u012b\u0001\u012b\u0001\u012b\u0001\u012b"+ + "\u0001\u012b\u0001\u012b\u0001\u012b\u0001\u012b\u0001\u012c\u0001\u012c"+ + "\u0001\u012c\u0001\u012c\u0001\u012c\u0001\u012c\u0001\u012c\u0001\u012c"+ + "\u0001\u012c\u0001\u012c\u0001\u012c\u0001\u012c\u0001\u012c\u0001\u012c"+ + "\u0001\u012c\u0001\u012c\u0001\u012c\u0001\u012c\u0001\u012c\u0001\u012d"+ + "\u0001\u012d\u0001\u012d\u0001\u012d\u0001\u012d\u0001\u012d\u0001\u012d"+ + "\u0001\u012d\u0001\u012e\u0001\u012e\u0001\u012e\u0001\u012e\u0001\u012e"+ + "\u0001\u012f\u0001\u012f\u0001\u012f\u0001\u012f\u0001\u012f\u0001\u012f"+ + "\u0001\u012f\u0001\u012f\u0001\u012f\u0001\u012f\u0001\u012f\u0001\u012f"+ + "\u0001\u0130\u0001\u0130\u0001\u0130\u0001\u0130\u0001\u0130\u0001\u0130"+ + "\u0001\u0130\u0001\u0130\u0001\u0130\u0001\u0130\u0001\u0131\u0001\u0131"+ + "\u0001\u0131\u0001\u0131\u0001\u0131\u0001\u0132\u0001\u0132\u0001\u0132"+ + "\u0001\u0132\u0001\u0132\u0001\u0132\u0001\u0132\u0001\u0132\u0001\u0132"+ + "\u0001\u0132\u0001\u0132\u0001\u0132\u0001\u0132\u0001\u0132\u0001\u0132"+ + "\u0001\u0132\u0001\u0132\u0001\u0133\u0001\u0133\u0001\u0133\u0001\u0133"+ + "\u0001\u0133\u0001\u0133\u0001\u0133\u0001\u0133\u0001\u0133\u0001\u0133"+ + "\u0001\u0134\u0001\u0134\u0001\u0134\u0001\u0134\u0001\u0134\u0001\u0134"+ + "\u0001\u0134\u0001\u0134\u0001\u0134\u0001\u0135\u0001\u0135\u0001\u0135"+ + "\u0001\u0135\u0001\u0135\u0001\u0135\u0001\u0135\u0001\u0135\u0001\u0135"+ + "\u0001\u0135\u0001\u0136\u0001\u0136\u0001\u0136\u0001\u0136\u0001\u0136"+ + "\u0001\u0136\u0001\u0136\u0001\u0136\u0001\u0136\u0001\u0136\u0001\u0136"+ + "\u0001\u0136\u0001\u0136\u0001\u0136\u0001\u0136\u0001\u0136\u0001\u0136"+ + "\u0001\u0136\u0001\u0137\u0001\u0137\u0001\u0138\u0001\u0138\u0001\u0139"+ + "\u0001\u0139\u0001\u013a\u0001\u013a\u0001\u013b\u0001\u013b\u0001\u013c"+ + "\u0001\u013c\u0001\u013c\u0001\u013c\u0001\u013d\u0001\u013d\u0001\u013d"+ + "\u0001\u013d\u0001\u013e\u0001\u013e\u0001\u013f\u0001\u013f\u0001\u0140"+ + "\u0001\u0140\u0001\u0141\u0001\u0141\u0001\u0142\u0001\u0142\u0001\u0143"+ + "\u0001\u0143\u0001\u0144\u0001\u0144\u0001\u0145\u0001\u0145\u0001\u0146"+ + "\u0001\u0146\u0001\u0147\u0001\u0147\u0001\u0148\u0001\u0148\u0001\u0149"+ + "\u0001\u0149\u0001\u014a\u0001\u014a\u0001\u014b\u0001\u014b\u0001\u014c"+ + "\u0001\u014c\u0001\u014d\u0001\u014d\u0001\u014e\u0001\u014e\u0001\u014f"+ + "\u0001\u014f\u0001\u0150\u0001\u0150\u0001\u0151\u0001\u0151\u0001\u0152"+ + "\u0001\u0152\u0001\u0153\u0001\u0153\u0001\u0154\u0001\u0154\u0001\u0155"+ + "\u0001\u0155\u0001\u0155\u0001\u0156\u0001\u0156\u0001\u0157\u0004\u0157"+ + "\u0e24\b\u0157\u000b\u0157\f\u0157\u0e25\u0001\u0158\u0001\u0158\u0001"+ + "\u0158\u0001\u0158\u0001\u0158\u0004\u0158\u0e2d\b\u0158\u000b\u0158\f"+ + "\u0158\u0e2e\u0001\u0158\u0001\u0158\u0001\u0158\u0001\u0158\u0001\u0158"+ + "\u0001\u0158\u0004\u0158\u0e37\b\u0158\u000b\u0158\f\u0158\u0e38\u0003"+ + "\u0158\u0e3b\b\u0158\u0001\u0159\u0004\u0159\u0e3e\b\u0159\u000b\u0159"+ + "\f\u0159\u0e3f\u0003\u0159\u0e42\b\u0159\u0001\u0159\u0001\u0159\u0004"+ + "\u0159\u0e46\b\u0159\u000b\u0159\f\u0159\u0e47\u0001\u0159\u0004\u0159"+ + "\u0e4b\b\u0159\u000b\u0159\f\u0159\u0e4c\u0001\u0159\u0001\u0159\u0001"+ + "\u0159\u0001\u0159\u0004\u0159\u0e53\b\u0159\u000b\u0159\f\u0159\u0e54"+ + "\u0003\u0159\u0e57\b\u0159\u0001\u0159\u0001\u0159\u0004\u0159\u0e5b\b"+ + "\u0159\u000b\u0159\f\u0159\u0e5c\u0001\u0159\u0001\u0159\u0001\u0159\u0004"+ + "\u0159\u0e62\b\u0159\u000b\u0159\f\u0159\u0e63\u0001\u0159\u0001\u0159"+ + "\u0003\u0159\u0e68\b\u0159\u0001\u015a\u0001\u015a\u0001\u015a\u0001\u015b"+ + "\u0001\u015b\u0001\u015c\u0001\u015c\u0001\u015d\u0001\u015d\u0001\u015e"+ + "\u0001\u015e\u0001\u015f\u0001\u015f\u0003\u015f\u0e77\b\u015f\u0001\u015f"+ + "\u0004\u015f\u0e7a\b\u015f\u000b\u015f\f\u015f\u0e7b\u0001\u0160\u0004"+ + "\u0160\u0e7f\b\u0160\u000b\u0160\f\u0160\u0e80\u0001\u0160\u0005\u0160"+ + "\u0e84\b\u0160\n\u0160\f\u0160\u0e87\t\u0160\u0001\u0161\u0001\u0161\u0001"+ + "\u0161\u0001\u0161\u0001\u0161\u0001\u0161\u0005\u0161\u0e8f\b\u0161\n"+ + "\u0161\f\u0161\u0e92\t\u0161\u0001\u0161\u0001\u0161\u0001\u0162\u0001"+ + "\u0162\u0001\u0162\u0001\u0162\u0001\u0162\u0001\u0162\u0005\u0162\u0e9c"+ + "\b\u0162\n\u0162\f\u0162\u0e9f\t\u0162\u0001\u0162\u0001\u0162\u0001\u0163"+ + "\u0001\u0163\u0001\u0163\u0001\u0163\u0001\u0163\u0001\u0163\u0005\u0163"+ + "\u0ea9\b\u0163\n\u0163\f\u0163\u0eac\t\u0163\u0001\u0163\u0001\u0163\u0001"+ + "\u0164\u0001\u0164\u0001\u0165\u0001\u0165\u0001\u0166\u0001\u0166\u0001"+ + "\u0166\u0004\u0166\u0eb7\b\u0166\u000b\u0166\f\u0166\u0eb8\u0001\u0166"+ + "\u0001\u0166\u0001\u0167\u0001\u0167\u0001\u0167\u0001\u0167\u0002\u02df"+ + "\u02ec\u0000\u0168\u0001\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005"+ + "\u000b\u0006\r\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019"+ + "\r\u001b\u000e\u001d\u000f\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015"+ + "+\u0016-\u0017/\u00181\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f"+ + "? A!C\"E#G$I%K&M\'O(Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6m7o8q9s:u;w}?\u007f"+ + "@\u0081A\u0083B\u0085C\u0087D\u0089E\u008bF\u008dG\u008fH\u0091I\u0093"+ + "J\u0095K\u0097L\u0099M\u009bN\u009dO\u009fP\u00a1Q\u00a3R\u00a5S\u00a7"+ + "T\u00a9U\u00abV\u00adW\u00afX\u00b1Y\u00b3Z\u00b5[\u00b7\\\u00b9]\u00bb"+ + "^\u00bd_\u00bf`\u00c1a\u00c3b\u00c5c\u00c7d\u00c9e\u00cbf\u00cdg\u00cf"+ + "h\u00d1i\u00d3j\u00d5k\u00d7l\u00d9m\u00dbn\u00ddo\u00dfp\u00e1q\u00e3"+ + "r\u00e5s\u00e7t\u00e9u\u00ebv\u00edw\u00efx\u00f1y\u00f3z\u00f5{\u00f7"+ + "|\u00f9}\u00fb~\u00fd\u007f\u00ff\u0080\u0101\u0081\u0103\u0082\u0105"+ + "\u0083\u0107\u0084\u0109\u0085\u010b\u0086\u010d\u0087\u010f\u0088\u0111"+ + "\u0089\u0113\u008a\u0115\u008b\u0117\u008c\u0119\u008d\u011b\u008e\u011d"+ + "\u008f\u011f\u0090\u0121\u0091\u0123\u0092\u0125\u0093\u0127\u0094\u0129"+ + "\u0095\u012b\u0096\u012d\u0097\u012f\u0098\u0131\u0099\u0133\u009a\u0135"+ + "\u009b\u0137\u009c\u0139\u009d\u013b\u009e\u013d\u009f\u013f\u00a0\u0141"+ + "\u00a1\u0143\u00a2\u0145\u00a3\u0147\u00a4\u0149\u00a5\u014b\u00a6\u014d"+ + "\u00a7\u014f\u00a8\u0151\u00a9\u0153\u00aa\u0155\u00ab\u0157\u00ac\u0159"+ + "\u00ad\u015b\u00ae\u015d\u00af\u015f\u00b0\u0161\u00b1\u0163\u00b2\u0165"+ + "\u00b3\u0167\u00b4\u0169\u00b5\u016b\u00b6\u016d\u00b7\u016f\u00b8\u0171"+ + "\u00b9\u0173\u00ba\u0175\u00bb\u0177\u00bc\u0179\u00bd\u017b\u00be\u017d"+ + "\u00bf\u017f\u00c0\u0181\u00c1\u0183\u00c2\u0185\u00c3\u0187\u00c4\u0189"+ + "\u00c5\u018b\u00c6\u018d\u00c7\u018f\u00c8\u0191\u00c9\u0193\u00ca\u0195"+ + "\u00cb\u0197\u00cc\u0199\u00cd\u019b\u00ce\u019d\u00cf\u019f\u00d0\u01a1"+ + "\u00d1\u01a3\u00d2\u01a5\u00d3\u01a7\u00d4\u01a9\u00d5\u01ab\u00d6\u01ad"+ + "\u00d7\u01af\u00d8\u01b1\u00d9\u01b3\u00da\u01b5\u00db\u01b7\u00dc\u01b9"+ + "\u00dd\u01bb\u00de\u01bd\u00df\u01bf\u00e0\u01c1\u00e1\u01c3\u00e2\u01c5"+ + "\u00e3\u01c7\u00e4\u01c9\u00e5\u01cb\u00e6\u01cd\u00e7\u01cf\u00e8\u01d1"+ + "\u00e9\u01d3\u00ea\u01d5\u00eb\u01d7\u00ec\u01d9\u00ed\u01db\u00ee\u01dd"+ + "\u00ef\u01df\u00f0\u01e1\u00f1\u01e3\u00f2\u01e5\u00f3\u01e7\u00f4\u01e9"+ + "\u00f5\u01eb\u00f6\u01ed\u00f7\u01ef\u00f8\u01f1\u00f9\u01f3\u00fa\u01f5"+ + "\u00fb\u01f7\u00fc\u01f9\u00fd\u01fb\u00fe\u01fd\u00ff\u01ff\u0100\u0201"+ + "\u0101\u0203\u0102\u0205\u0103\u0207\u0104\u0209\u0105\u020b\u0106\u020d"+ + "\u0107\u020f\u0108\u0211\u0109\u0213\u010a\u0215\u010b\u0217\u010c\u0219"+ + "\u010d\u021b\u010e\u021d\u010f\u021f\u0110\u0221\u0111\u0223\u0112\u0225"+ + "\u0113\u0227\u0114\u0229\u0115\u022b\u0116\u022d\u0117\u022f\u0118\u0231"+ + "\u0119\u0233\u011a\u0235\u011b\u0237\u011c\u0239\u011d\u023b\u011e\u023d"+ + "\u011f\u023f\u0120\u0241\u0121\u0243\u0122\u0245\u0123\u0247\u0124\u0249"+ + "\u0125\u024b\u0126\u024d\u0127\u024f\u0128\u0251\u0129\u0253\u012a\u0255"+ + "\u012b\u0257\u012c\u0259\u012d\u025b\u012e\u025d\u012f\u025f\u0130\u0261"+ + "\u0131\u0263\u0132\u0265\u0133\u0267\u0134\u0269\u0135\u026b\u0136\u026d"+ + "\u0137\u026f\u0138\u0271\u0139\u0273\u013a\u0275\u013b\u0277\u013c\u0279"+ + "\u013d\u027b\u013e\u027d\u013f\u027f\u0140\u0281\u0141\u0283\u0142\u0285"+ + "\u0143\u0287\u0144\u0289\u0145\u028b\u0146\u028d\u0147\u028f\u0148\u0291"+ + "\u0149\u0293\u014a\u0295\u014b\u0297\u014c\u0299\u014d\u029b\u014e\u029d"+ + "\u014f\u029f\u0150\u02a1\u0151\u02a3\u0152\u02a5\u0153\u02a7\u0154\u02a9"+ + "\u0155\u02ab\u0156\u02ad\u0157\u02af\u0158\u02b1\u0159\u02b3\u015a\u02b5"+ + "\u015b\u02b7\u015c\u02b9\u015d\u02bb\u015e\u02bd\u015f\u02bf\u0000\u02c1"+ + "\u0000\u02c3\u0000\u02c5\u0000\u02c7\u0000\u02c9\u0000\u02cb\u0000\u02cd"+ + "\u0000\u02cf\u0160\u0001\u0000%\u0003\u0000\t\n\r\r \u0002\u0000\n\n"+ + "\r\r\u0002\u0000AAaa\u0002\u0000LLll\u0002\u0000NNnn\u0002\u0000DDdd\u0002"+ + "\u0000SSss\u0002\u0000CCcc\u0002\u0000BBbb\u0002\u0000OOoo\u0002\u0000"+ + "EEee\u0002\u0000TTtt\u0002\u0000WWww\u0002\u0000YYyy\u0002\u0000RRrr\u0002"+ + "\u0000UUuu\u0002\u0000MMmm\u0002\u0000IIii\u0002\u0000XXxx\u0002\u0000"+ + "FFff\u0002\u0000GGgg\u0002\u0000PPpp\u0002\u0000HHhh\u0002\u0000VVvv\u0002"+ + "\u0000JJjj\u0002\u0000KKkk\u0002\u0000QQqq\u0002\u0000ZZzz\u0002\u0000"+ + "++--\u0004\u0000**@Z__az\u0006\u0000**--09AZ__az\u0002\u0000\"\"\\\\\u0002"+ + "\u0000\'\'\\\\\u0002\u0000\\\\``\u0003\u000009AFaf\u0001\u000009\u0001"+ + "\u000001\u0ede\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0003\u0001\u0000"+ + "\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001\u0000"+ + "\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000\u0000"+ + "\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000\u0000"+ + "\u0000\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000\u0000"+ + "\u0000\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000\u0000"+ + "\u0000\u0019\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000\u0000\u0000"+ + "\u0000\u001d\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000\u0000\u0000"+ + "\u0000!\u0001\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000\u0000%"+ + "\u0001\u0000\u0000\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000)\u0001"+ + "\u0000\u0000\u0000\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001\u0000\u0000"+ + "\u0000\u0000/\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000\u0000\u0000"+ + "3\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u00007\u0001"+ + "\u0000\u0000\u0000\u00009\u0001\u0000\u0000\u0000\u0000;\u0001\u0000\u0000"+ + "\u0000\u0000=\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000\u0000\u0000"+ + "A\u0001\u0000\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000E\u0001"+ + "\u0000\u0000\u0000\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001\u0000\u0000"+ + "\u0000\u0000K\u0001\u0000\u0000\u0000\u0000M\u0001\u0000\u0000\u0000\u0000"+ + "O\u0001\u0000\u0000\u0000\u0000Q\u0001\u0000\u0000\u0000\u0000S\u0001"+ + "\u0000\u0000\u0000\u0000U\u0001\u0000\u0000\u0000\u0000W\u0001\u0000\u0000"+ + "\u0000\u0000Y\u0001\u0000\u0000\u0000\u0000[\u0001\u0000\u0000\u0000\u0000"+ + "]\u0001\u0000\u0000\u0000\u0000_\u0001\u0000\u0000\u0000\u0000a\u0001"+ + "\u0000\u0000\u0000\u0000c\u0001\u0000\u0000\u0000\u0000e\u0001\u0000\u0000"+ + "\u0000\u0000g\u0001\u0000\u0000\u0000\u0000i\u0001\u0000\u0000\u0000\u0000"+ + "k\u0001\u0000\u0000\u0000\u0000m\u0001\u0000\u0000\u0000\u0000o\u0001"+ + "\u0000\u0000\u0000\u0000q\u0001\u0000\u0000\u0000\u0000s\u0001\u0000\u0000"+ + "\u0000\u0000u\u0001\u0000\u0000\u0000\u0000w\u0001\u0000\u0000\u0000\u0000"+ + "y\u0001\u0000\u0000\u0000\u0000{\u0001\u0000\u0000\u0000\u0000}\u0001"+ + "\u0000\u0000\u0000\u0000\u007f\u0001\u0000\u0000\u0000\u0000\u0081\u0001"+ + "\u0000\u0000\u0000\u0000\u0083\u0001\u0000\u0000\u0000\u0000\u0085\u0001"+ + "\u0000\u0000\u0000\u0000\u0087\u0001\u0000\u0000\u0000\u0000\u0089\u0001"+ + "\u0000\u0000\u0000\u0000\u008b\u0001\u0000\u0000\u0000\u0000\u008d\u0001"+ + "\u0000\u0000\u0000\u0000\u008f\u0001\u0000\u0000\u0000\u0000\u0091\u0001"+ + "\u0000\u0000\u0000\u0000\u0093\u0001\u0000\u0000\u0000\u0000\u0095\u0001"+ + "\u0000\u0000\u0000\u0000\u0097\u0001\u0000\u0000\u0000\u0000\u0099\u0001"+ + "\u0000\u0000\u0000\u0000\u009b\u0001\u0000\u0000\u0000\u0000\u009d\u0001"+ + "\u0000\u0000\u0000\u0000\u009f\u0001\u0000\u0000\u0000\u0000\u00a1\u0001"+ + "\u0000\u0000\u0000\u0000\u00a3\u0001\u0000\u0000\u0000\u0000\u00a5\u0001"+ + "\u0000\u0000\u0000\u0000\u00a7\u0001\u0000\u0000\u0000\u0000\u00a9\u0001"+ + "\u0000\u0000\u0000\u0000\u00ab\u0001\u0000\u0000\u0000\u0000\u00ad\u0001"+ + "\u0000\u0000\u0000\u0000\u00af\u0001\u0000\u0000\u0000\u0000\u00b1\u0001"+ + "\u0000\u0000\u0000\u0000\u00b3\u0001\u0000\u0000\u0000\u0000\u00b5\u0001"+ + "\u0000\u0000\u0000\u0000\u00b7\u0001\u0000\u0000\u0000\u0000\u00b9\u0001"+ + "\u0000\u0000\u0000\u0000\u00bb\u0001\u0000\u0000\u0000\u0000\u00bd\u0001"+ + "\u0000\u0000\u0000\u0000\u00bf\u0001\u0000\u0000\u0000\u0000\u00c1\u0001"+ + "\u0000\u0000\u0000\u0000\u00c3\u0001\u0000\u0000\u0000\u0000\u00c5\u0001"+ + "\u0000\u0000\u0000\u0000\u00c7\u0001\u0000\u0000\u0000\u0000\u00c9\u0001"+ + "\u0000\u0000\u0000\u0000\u00cb\u0001\u0000\u0000\u0000\u0000\u00cd\u0001"+ + "\u0000\u0000\u0000\u0000\u00cf\u0001\u0000\u0000\u0000\u0000\u00d1\u0001"+ + "\u0000\u0000\u0000\u0000\u00d3\u0001\u0000\u0000\u0000\u0000\u00d5\u0001"+ + "\u0000\u0000\u0000\u0000\u00d7\u0001\u0000\u0000\u0000\u0000\u00d9\u0001"+ + "\u0000\u0000\u0000\u0000\u00db\u0001\u0000\u0000\u0000\u0000\u00dd\u0001"+ + "\u0000\u0000\u0000\u0000\u00df\u0001\u0000\u0000\u0000\u0000\u00e1\u0001"+ + "\u0000\u0000\u0000\u0000\u00e3\u0001\u0000\u0000\u0000\u0000\u00e5\u0001"+ + "\u0000\u0000\u0000\u0000\u00e7\u0001\u0000\u0000\u0000\u0000\u00e9\u0001"+ + "\u0000\u0000\u0000\u0000\u00eb\u0001\u0000\u0000\u0000\u0000\u00ed\u0001"+ + "\u0000\u0000\u0000\u0000\u00ef\u0001\u0000\u0000\u0000\u0000\u00f1\u0001"+ + "\u0000\u0000\u0000\u0000\u00f3\u0001\u0000\u0000\u0000\u0000\u00f5\u0001"+ + "\u0000\u0000\u0000\u0000\u00f7\u0001\u0000\u0000\u0000\u0000\u00f9\u0001"+ + "\u0000\u0000\u0000\u0000\u00fb\u0001\u0000\u0000\u0000\u0000\u00fd\u0001"+ + "\u0000\u0000\u0000\u0000\u00ff\u0001\u0000\u0000\u0000\u0000\u0101\u0001"+ + "\u0000\u0000\u0000\u0000\u0103\u0001\u0000\u0000\u0000\u0000\u0105\u0001"+ + "\u0000\u0000\u0000\u0000\u0107\u0001\u0000\u0000\u0000\u0000\u0109\u0001"+ + "\u0000\u0000\u0000\u0000\u010b\u0001\u0000\u0000\u0000\u0000\u010d\u0001"+ + "\u0000\u0000\u0000\u0000\u010f\u0001\u0000\u0000\u0000\u0000\u0111\u0001"+ + "\u0000\u0000\u0000\u0000\u0113\u0001\u0000\u0000\u0000\u0000\u0115\u0001"+ + "\u0000\u0000\u0000\u0000\u0117\u0001\u0000\u0000\u0000\u0000\u0119\u0001"+ + "\u0000\u0000\u0000\u0000\u011b\u0001\u0000\u0000\u0000\u0000\u011d\u0001"+ + "\u0000\u0000\u0000\u0000\u011f\u0001\u0000\u0000\u0000\u0000\u0121\u0001"+ + "\u0000\u0000\u0000\u0000\u0123\u0001\u0000\u0000\u0000\u0000\u0125\u0001"+ + "\u0000\u0000\u0000\u0000\u0127\u0001\u0000\u0000\u0000\u0000\u0129\u0001"+ + "\u0000\u0000\u0000\u0000\u012b\u0001\u0000\u0000\u0000\u0000\u012d\u0001"+ + "\u0000\u0000\u0000\u0000\u012f\u0001\u0000\u0000\u0000\u0000\u0131\u0001"+ + "\u0000\u0000\u0000\u0000\u0133\u0001\u0000\u0000\u0000\u0000\u0135\u0001"+ + "\u0000\u0000\u0000\u0000\u0137\u0001\u0000\u0000\u0000\u0000\u0139\u0001"+ + "\u0000\u0000\u0000\u0000\u013b\u0001\u0000\u0000\u0000\u0000\u013d\u0001"+ + "\u0000\u0000\u0000\u0000\u013f\u0001\u0000\u0000\u0000\u0000\u0141\u0001"+ + "\u0000\u0000\u0000\u0000\u0143\u0001\u0000\u0000\u0000\u0000\u0145\u0001"+ + "\u0000\u0000\u0000\u0000\u0147\u0001\u0000\u0000\u0000\u0000\u0149\u0001"+ + "\u0000\u0000\u0000\u0000\u014b\u0001\u0000\u0000\u0000\u0000\u014d\u0001"+ + "\u0000\u0000\u0000\u0000\u014f\u0001\u0000\u0000\u0000\u0000\u0151\u0001"+ + "\u0000\u0000\u0000\u0000\u0153\u0001\u0000\u0000\u0000\u0000\u0155\u0001"+ + "\u0000\u0000\u0000\u0000\u0157\u0001\u0000\u0000\u0000\u0000\u0159\u0001"+ + "\u0000\u0000\u0000\u0000\u015b\u0001\u0000\u0000\u0000\u0000\u015d\u0001"+ + "\u0000\u0000\u0000\u0000\u015f\u0001\u0000\u0000\u0000\u0000\u0161\u0001"+ + "\u0000\u0000\u0000\u0000\u0163\u0001\u0000\u0000\u0000\u0000\u0165\u0001"+ + "\u0000\u0000\u0000\u0000\u0167\u0001\u0000\u0000\u0000\u0000\u0169\u0001"+ + "\u0000\u0000\u0000\u0000\u016b\u0001\u0000\u0000\u0000\u0000\u016d\u0001"+ + "\u0000\u0000\u0000\u0000\u016f\u0001\u0000\u0000\u0000\u0000\u0171\u0001"+ + "\u0000\u0000\u0000\u0000\u0173\u0001\u0000\u0000\u0000\u0000\u0175\u0001"+ + "\u0000\u0000\u0000\u0000\u0177\u0001\u0000\u0000\u0000\u0000\u0179\u0001"+ + "\u0000\u0000\u0000\u0000\u017b\u0001\u0000\u0000\u0000\u0000\u017d\u0001"+ + "\u0000\u0000\u0000\u0000\u017f\u0001\u0000\u0000\u0000\u0000\u0181\u0001"+ + "\u0000\u0000\u0000\u0000\u0183\u0001\u0000\u0000\u0000\u0000\u0185\u0001"+ + "\u0000\u0000\u0000\u0000\u0187\u0001\u0000\u0000\u0000\u0000\u0189\u0001"+ + "\u0000\u0000\u0000\u0000\u018b\u0001\u0000\u0000\u0000\u0000\u018d\u0001"+ + "\u0000\u0000\u0000\u0000\u018f\u0001\u0000\u0000\u0000\u0000\u0191\u0001"+ + "\u0000\u0000\u0000\u0000\u0193\u0001\u0000\u0000\u0000\u0000\u0195\u0001"+ + "\u0000\u0000\u0000\u0000\u0197\u0001\u0000\u0000\u0000\u0000\u0199\u0001"+ + "\u0000\u0000\u0000\u0000\u019b\u0001\u0000\u0000\u0000\u0000\u019d\u0001"+ + "\u0000\u0000\u0000\u0000\u019f\u0001\u0000\u0000\u0000\u0000\u01a1\u0001"+ + "\u0000\u0000\u0000\u0000\u01a3\u0001\u0000\u0000\u0000\u0000\u01a5\u0001"+ + "\u0000\u0000\u0000\u0000\u01a7\u0001\u0000\u0000\u0000\u0000\u01a9\u0001"+ + "\u0000\u0000\u0000\u0000\u01ab\u0001\u0000\u0000\u0000\u0000\u01ad\u0001"+ + "\u0000\u0000\u0000\u0000\u01af\u0001\u0000\u0000\u0000\u0000\u01b1\u0001"+ + "\u0000\u0000\u0000\u0000\u01b3\u0001\u0000\u0000\u0000\u0000\u01b5\u0001"+ + "\u0000\u0000\u0000\u0000\u01b7\u0001\u0000\u0000\u0000\u0000\u01b9\u0001"+ + "\u0000\u0000\u0000\u0000\u01bb\u0001\u0000\u0000\u0000\u0000\u01bd\u0001"+ + "\u0000\u0000\u0000\u0000\u01bf\u0001\u0000\u0000\u0000\u0000\u01c1\u0001"+ + "\u0000\u0000\u0000\u0000\u01c3\u0001\u0000\u0000\u0000\u0000\u01c5\u0001"+ + "\u0000\u0000\u0000\u0000\u01c7\u0001\u0000\u0000\u0000\u0000\u01c9\u0001"+ + "\u0000\u0000\u0000\u0000\u01cb\u0001\u0000\u0000\u0000\u0000\u01cd\u0001"+ + "\u0000\u0000\u0000\u0000\u01cf\u0001\u0000\u0000\u0000\u0000\u01d1\u0001"+ + "\u0000\u0000\u0000\u0000\u01d3\u0001\u0000\u0000\u0000\u0000\u01d5\u0001"+ + "\u0000\u0000\u0000\u0000\u01d7\u0001\u0000\u0000\u0000\u0000\u01d9\u0001"+ + "\u0000\u0000\u0000\u0000\u01db\u0001\u0000\u0000\u0000\u0000\u01dd\u0001"+ + "\u0000\u0000\u0000\u0000\u01df\u0001\u0000\u0000\u0000\u0000\u01e1\u0001"+ + "\u0000\u0000\u0000\u0000\u01e3\u0001\u0000\u0000\u0000\u0000\u01e5\u0001"+ + "\u0000\u0000\u0000\u0000\u01e7\u0001\u0000\u0000\u0000\u0000\u01e9\u0001"+ + "\u0000\u0000\u0000\u0000\u01eb\u0001\u0000\u0000\u0000\u0000\u01ed\u0001"+ + "\u0000\u0000\u0000\u0000\u01ef\u0001\u0000\u0000\u0000\u0000\u01f1\u0001"+ + "\u0000\u0000\u0000\u0000\u01f3\u0001\u0000\u0000\u0000\u0000\u01f5\u0001"+ + "\u0000\u0000\u0000\u0000\u01f7\u0001\u0000\u0000\u0000\u0000\u01f9\u0001"+ + "\u0000\u0000\u0000\u0000\u01fb\u0001\u0000\u0000\u0000\u0000\u01fd\u0001"+ + "\u0000\u0000\u0000\u0000\u01ff\u0001\u0000\u0000\u0000\u0000\u0201\u0001"+ + "\u0000\u0000\u0000\u0000\u0203\u0001\u0000\u0000\u0000\u0000\u0205\u0001"+ + "\u0000\u0000\u0000\u0000\u0207\u0001\u0000\u0000\u0000\u0000\u0209\u0001"+ + "\u0000\u0000\u0000\u0000\u020b\u0001\u0000\u0000\u0000\u0000\u020d\u0001"+ + "\u0000\u0000\u0000\u0000\u020f\u0001\u0000\u0000\u0000\u0000\u0211\u0001"+ + "\u0000\u0000\u0000\u0000\u0213\u0001\u0000\u0000\u0000\u0000\u0215\u0001"+ + "\u0000\u0000\u0000\u0000\u0217\u0001\u0000\u0000\u0000\u0000\u0219\u0001"+ + "\u0000\u0000\u0000\u0000\u021b\u0001\u0000\u0000\u0000\u0000\u021d\u0001"+ + "\u0000\u0000\u0000\u0000\u021f\u0001\u0000\u0000\u0000\u0000\u0221\u0001"+ + "\u0000\u0000\u0000\u0000\u0223\u0001\u0000\u0000\u0000\u0000\u0225\u0001"+ + "\u0000\u0000\u0000\u0000\u0227\u0001\u0000\u0000\u0000\u0000\u0229\u0001"+ + "\u0000\u0000\u0000\u0000\u022b\u0001\u0000\u0000\u0000\u0000\u022d\u0001"+ + "\u0000\u0000\u0000\u0000\u022f\u0001\u0000\u0000\u0000\u0000\u0231\u0001"+ + "\u0000\u0000\u0000\u0000\u0233\u0001\u0000\u0000\u0000\u0000\u0235\u0001"+ + "\u0000\u0000\u0000\u0000\u0237\u0001\u0000\u0000\u0000\u0000\u0239\u0001"+ + "\u0000\u0000\u0000\u0000\u023b\u0001\u0000\u0000\u0000\u0000\u023d\u0001"+ + "\u0000\u0000\u0000\u0000\u023f\u0001\u0000\u0000\u0000\u0000\u0241\u0001"+ + "\u0000\u0000\u0000\u0000\u0243\u0001\u0000\u0000\u0000\u0000\u0245\u0001"+ + "\u0000\u0000\u0000\u0000\u0247\u0001\u0000\u0000\u0000\u0000\u0249\u0001"+ + "\u0000\u0000\u0000\u0000\u024b\u0001\u0000\u0000\u0000\u0000\u024d\u0001"+ + "\u0000\u0000\u0000\u0000\u024f\u0001\u0000\u0000\u0000\u0000\u0251\u0001"+ + "\u0000\u0000\u0000\u0000\u0253\u0001\u0000\u0000\u0000\u0000\u0255\u0001"+ + "\u0000\u0000\u0000\u0000\u0257\u0001\u0000\u0000\u0000\u0000\u0259\u0001"+ + "\u0000\u0000\u0000\u0000\u025b\u0001\u0000\u0000\u0000\u0000\u025d\u0001"+ + "\u0000\u0000\u0000\u0000\u025f\u0001\u0000\u0000\u0000\u0000\u0261\u0001"+ + "\u0000\u0000\u0000\u0000\u0263\u0001\u0000\u0000\u0000\u0000\u0265\u0001"+ + "\u0000\u0000\u0000\u0000\u0267\u0001\u0000\u0000\u0000\u0000\u0269\u0001"+ + "\u0000\u0000\u0000\u0000\u026b\u0001\u0000\u0000\u0000\u0000\u026d\u0001"+ + "\u0000\u0000\u0000\u0000\u026f\u0001\u0000\u0000\u0000\u0000\u0271\u0001"+ + "\u0000\u0000\u0000\u0000\u0273\u0001\u0000\u0000\u0000\u0000\u0275\u0001"+ + "\u0000\u0000\u0000\u0000\u0277\u0001\u0000\u0000\u0000\u0000\u0279\u0001"+ + "\u0000\u0000\u0000\u0000\u027b\u0001\u0000\u0000\u0000\u0000\u027d\u0001"+ + "\u0000\u0000\u0000\u0000\u027f\u0001\u0000\u0000\u0000\u0000\u0281\u0001"+ + "\u0000\u0000\u0000\u0000\u0283\u0001\u0000\u0000\u0000\u0000\u0285\u0001"+ + "\u0000\u0000\u0000\u0000\u0287\u0001\u0000\u0000\u0000\u0000\u0289\u0001"+ + "\u0000\u0000\u0000\u0000\u028b\u0001\u0000\u0000\u0000\u0000\u028d\u0001"+ + "\u0000\u0000\u0000\u0000\u028f\u0001\u0000\u0000\u0000\u0000\u0291\u0001"+ + "\u0000\u0000\u0000\u0000\u0293\u0001\u0000\u0000\u0000\u0000\u0295\u0001"+ + "\u0000\u0000\u0000\u0000\u0297\u0001\u0000\u0000\u0000\u0000\u0299\u0001"+ + "\u0000\u0000\u0000\u0000\u029b\u0001\u0000\u0000\u0000\u0000\u029d\u0001"+ + "\u0000\u0000\u0000\u0000\u029f\u0001\u0000\u0000\u0000\u0000\u02a1\u0001"+ + "\u0000\u0000\u0000\u0000\u02a3\u0001\u0000\u0000\u0000\u0000\u02a5\u0001"+ + "\u0000\u0000\u0000\u0000\u02a7\u0001\u0000\u0000\u0000\u0000\u02a9\u0001"+ + "\u0000\u0000\u0000\u0000\u02ab\u0001\u0000\u0000\u0000\u0000\u02ad\u0001"+ + "\u0000\u0000\u0000\u0000\u02af\u0001\u0000\u0000\u0000\u0000\u02b1\u0001"+ + "\u0000\u0000\u0000\u0000\u02b3\u0001\u0000\u0000\u0000\u0000\u02b5\u0001"+ + "\u0000\u0000\u0000\u0000\u02b7\u0001\u0000\u0000\u0000\u0000\u02b9\u0001"+ + "\u0000\u0000\u0000\u0000\u02bb\u0001\u0000\u0000\u0000\u0000\u02bd\u0001"+ + "\u0000\u0000\u0000\u0000\u02cf\u0001\u0000\u0000\u0000\u0001\u02d2\u0001"+ + "\u0000\u0000\u0000\u0003\u02d8\u0001\u0000\u0000\u0000\u0005\u02e6\u0001"+ + "\u0000\u0000\u0000\u0007\u0311\u0001\u0000\u0000\u0000\t\u0315\u0001\u0000"+ + "\u0000\u0000\u000b\u0319\u0001\u0000\u0000\u0000\r\u031d\u0001\u0000\u0000"+ + "\u0000\u000f\u0320\u0001\u0000\u0000\u0000\u0011\u0324\u0001\u0000\u0000"+ + "\u0000\u0013\u032c\u0001\u0000\u0000\u0000\u0015\u0334\u0001\u0000\u0000"+ + "\u0000\u0017\u0337\u0001\u0000\u0000\u0000\u0019\u033c\u0001\u0000\u0000"+ + "\u0000\u001b\u0341\u0001\u0000\u0000\u0000\u001d\u0347\u0001\u0000\u0000"+ + "\u0000\u001f\u034f\u0001\u0000\u0000\u0000!\u0358\u0001\u0000\u0000\u0000"+ + "#\u035f\u0001\u0000\u0000\u0000%\u0364\u0001\u0000\u0000\u0000\'\u036d"+ + "\u0001\u0000\u0000\u0000)\u0376\u0001\u0000\u0000\u0000+\u037d\u0001\u0000"+ + "\u0000\u0000-\u0382\u0001\u0000\u0000\u0000/\u0389\u0001\u0000\u0000\u0000"+ + "1\u038f\u0001\u0000\u0000\u00003\u0395\u0001\u0000\u0000\u00005\u039b"+ + "\u0001\u0000\u0000\u00007\u03a0\u0001\u0000\u0000\u00009\u03a6\u0001\u0000"+ + "\u0000\u0000;\u03ad\u0001\u0000\u0000\u0000=\u03b0\u0001\u0000\u0000\u0000"+ + "?\u03b6\u0001\u0000\u0000\u0000A\u03ba\u0001\u0000\u0000\u0000C\u03c2"+ + "\u0001\u0000\u0000\u0000E\u03c5\u0001\u0000\u0000\u0000G\u03ca\u0001\u0000"+ + "\u0000\u0000I\u03cf\u0001\u0000\u0000\u0000K\u03d4\u0001\u0000\u0000\u0000"+ + "M\u03d9\u0001\u0000\u0000\u0000O\u03df\u0001\u0000\u0000\u0000Q\u03e4"+ + "\u0001\u0000\u0000\u0000S\u03ea\u0001\u0000\u0000\u0000U\u03f2\u0001\u0000"+ + "\u0000\u0000W\u03fa\u0001\u0000\u0000\u0000Y\u03fe\u0001\u0000\u0000\u0000"+ + "[\u0403\u0001\u0000\u0000\u0000]\u0409\u0001\u0000\u0000\u0000_\u040c"+ + "\u0001\u0000\u0000\u0000a\u040f\u0001\u0000\u0000\u0000c\u0415\u0001\u0000"+ + "\u0000\u0000e\u041b\u0001\u0000\u0000\u0000g\u0420\u0001\u0000\u0000\u0000"+ + "i\u042a\u0001\u0000\u0000\u0000k\u0431\u0001\u0000\u0000\u0000m\u0437"+ + "\u0001\u0000\u0000\u0000o\u043e\u0001\u0000\u0000\u0000q\u0443\u0001\u0000"+ + "\u0000\u0000s\u044a\u0001\u0000\u0000\u0000u\u044f\u0001\u0000\u0000\u0000"+ + "w\u0454\u0001\u0000\u0000\u0000y\u045a\u0001\u0000\u0000\u0000{\u0460"+ + "\u0001\u0000\u0000\u0000}\u0465\u0001\u0000\u0000\u0000\u007f\u046b\u0001"+ + "\u0000\u0000\u0000\u0081\u0471\u0001\u0000\u0000\u0000\u0083\u0475\u0001"+ + "\u0000\u0000\u0000\u0085\u047b\u0001\u0000\u0000\u0000\u0087\u047f\u0001"+ + "\u0000\u0000\u0000\u0089\u0483\u0001\u0000\u0000\u0000\u008b\u0487\u0001"+ + "\u0000\u0000\u0000\u008d\u048f\u0001\u0000\u0000\u0000\u008f\u0498\u0001"+ + "\u0000\u0000\u0000\u0091\u04a1\u0001\u0000\u0000\u0000\u0093\u04a5\u0001"+ + "\u0000\u0000\u0000\u0095\u04ac\u0001\u0000\u0000\u0000\u0097\u04b7\u0001"+ + "\u0000\u0000\u0000\u0099\u04c3\u0001\u0000\u0000\u0000\u009b\u04cd\u0001"+ + "\u0000\u0000\u0000\u009d\u04d2\u0001\u0000\u0000\u0000\u009f\u04d6\u0001"+ + "\u0000\u0000\u0000\u00a1\u04db\u0001\u0000\u0000\u0000\u00a3\u04e2\u0001"+ + "\u0000\u0000\u0000\u00a5\u04eb\u0001\u0000\u0000\u0000\u00a7\u04f7\u0001"+ + "\u0000\u0000\u0000\u00a9\u04fe\u0001\u0000\u0000\u0000\u00ab\u0505\u0001"+ + "\u0000\u0000\u0000\u00ad\u050a\u0001\u0000\u0000\u0000\u00af\u050e\u0001"+ + "\u0000\u0000\u0000\u00b1\u0513\u0001\u0000\u0000\u0000\u00b3\u0519\u0001"+ + "\u0000\u0000\u0000\u00b5\u0521\u0001\u0000\u0000\u0000\u00b7\u0526\u0001"+ + "\u0000\u0000\u0000\u00b9\u0539\u0001\u0000\u0000\u0000\u00bb\u054c\u0001"+ + "\u0000\u0000\u0000\u00bd\u055a\u0001\u0000\u0000\u0000\u00bf\u056b\u0001"+ + "\u0000\u0000\u0000\u00c1\u0577\u0001\u0000\u0000\u0000\u00c3\u0583\u0001"+ + "\u0000\u0000\u0000\u00c5\u0593\u0001\u0000\u0000\u0000\u00c7\u059e\u0001"+ + "\u0000\u0000\u0000\u00c9\u05a9\u0001\u0000\u0000\u0000\u00cb\u05b2\u0001"+ + "\u0000\u0000\u0000\u00cd\u05bd\u0001\u0000\u0000\u0000\u00cf\u05c4\u0001"+ + "\u0000\u0000\u0000\u00d1\u05c8\u0001\u0000\u0000\u0000\u00d3\u05cd\u0001"+ + "\u0000\u0000\u0000\u00d5\u05d1\u0001\u0000\u0000\u0000\u00d7\u05d9\u0001"+ + "\u0000\u0000\u0000\u00d9\u05df\u0001\u0000\u0000\u0000\u00db\u05e4\u0001"+ + "\u0000\u0000\u0000\u00dd\u05e9\u0001\u0000\u0000\u0000\u00df\u05ef\u0001"+ + "\u0000\u0000\u0000\u00e1\u05f4\u0001\u0000\u0000\u0000\u00e3\u05f9\u0001"+ + "\u0000\u0000\u0000\u00e5\u0601\u0001\u0000\u0000\u0000\u00e7\u0608\u0001"+ + "\u0000\u0000\u0000\u00e9\u0612\u0001\u0000\u0000\u0000\u00eb\u0617\u0001"+ + "\u0000\u0000\u0000\u00ed\u0622\u0001\u0000\u0000\u0000\u00ef\u0626\u0001"+ + "\u0000\u0000\u0000\u00f1\u062b\u0001\u0000\u0000\u0000\u00f3\u062f\u0001"+ + "\u0000\u0000\u0000\u00f5\u0635\u0001\u0000\u0000\u0000\u00f7\u063d\u0001"+ + "\u0000\u0000\u0000\u00f9\u0645\u0001\u0000\u0000\u0000\u00fb\u0652\u0001"+ + "\u0000\u0000\u0000\u00fd\u065f\u0001\u0000\u0000\u0000\u00ff\u0671\u0001"+ + "\u0000\u0000\u0000\u0101\u0676\u0001\u0000\u0000\u0000\u0103\u067f\u0001"+ + "\u0000\u0000\u0000\u0105\u068b\u0001\u0000\u0000\u0000\u0107\u0694\u0001"+ + "\u0000\u0000\u0000\u0109\u069d\u0001\u0000\u0000\u0000\u010b\u06a5\u0001"+ + "\u0000\u0000\u0000\u010d\u06b0\u0001\u0000\u0000\u0000\u010f\u06ba\u0001"+ + "\u0000\u0000\u0000\u0111\u06c4\u0001\u0000\u0000\u0000\u0113\u06cc\u0001"+ + "\u0000\u0000\u0000\u0115\u06d3\u0001\u0000\u0000\u0000\u0117\u06d5\u0001"+ + "\u0000\u0000\u0000\u0119\u06d9\u0001\u0000\u0000\u0000\u011b\u06df\u0001"+ + "\u0000\u0000\u0000\u011d\u06e7\u0001\u0000\u0000\u0000\u011f\u06ed\u0001"+ + "\u0000\u0000\u0000\u0121\u06f7\u0001\u0000\u0000\u0000\u0123\u0705\u0001"+ + "\u0000\u0000\u0000\u0125\u0710\u0001\u0000\u0000\u0000\u0127\u0713\u0001"+ + "\u0000\u0000\u0000\u0129\u071a\u0001\u0000\u0000\u0000\u012b\u0721\u0001"+ + "\u0000\u0000\u0000\u012d\u072a\u0001\u0000\u0000\u0000\u012f\u0731\u0001"+ + "\u0000\u0000\u0000\u0131\u0734\u0001\u0000\u0000\u0000\u0133\u073e\u0001"+ + "\u0000\u0000\u0000\u0135\u074d\u0001\u0000\u0000\u0000\u0137\u0754\u0001"+ + "\u0000\u0000\u0000\u0139\u0758\u0001\u0000\u0000\u0000\u013b\u075e\u0001"+ + "\u0000\u0000\u0000\u013d\u0763\u0001\u0000\u0000\u0000\u013f\u0769\u0001"+ + "\u0000\u0000\u0000\u0141\u076f\u0001\u0000\u0000\u0000\u0143\u0778\u0001"+ + "\u0000\u0000\u0000\u0145\u0781\u0001\u0000\u0000\u0000\u0147\u0789\u0001"+ + "\u0000\u0000\u0000\u0149\u0793\u0001\u0000\u0000\u0000\u014b\u079c\u0001"+ + "\u0000\u0000\u0000\u014d\u07a0\u0001\u0000\u0000\u0000\u014f\u07a7\u0001"+ + "\u0000\u0000\u0000\u0151\u07b2\u0001\u0000\u0000\u0000\u0153\u07be\u0001"+ + "\u0000\u0000\u0000\u0155\u07c1\u0001\u0000\u0000\u0000\u0157\u07ca\u0001"+ + "\u0000\u0000\u0000\u0159\u07ce\u0001\u0000\u0000\u0000\u015b\u07d4\u0001"+ + "\u0000\u0000\u0000\u015d\u07dc\u0001\u0000\u0000\u0000\u015f\u07e1\u0001"+ + "\u0000\u0000\u0000\u0161\u07e9\u0001\u0000\u0000\u0000\u0163\u07ee\u0001"+ + "\u0000\u0000\u0000\u0165\u07f4\u0001\u0000\u0000\u0000\u0167\u07fa\u0001"+ + "\u0000\u0000\u0000\u0169\u0802\u0001\u0000\u0000\u0000\u016b\u080e\u0001"+ + "\u0000\u0000\u0000\u016d\u0813\u0001\u0000\u0000\u0000\u016f\u081a\u0001"+ + "\u0000\u0000\u0000\u0171\u081e\u0001\u0000\u0000\u0000\u0173\u0823\u0001"+ + "\u0000\u0000\u0000\u0175\u0828\u0001\u0000\u0000\u0000\u0177\u0834\u0001"+ + "\u0000\u0000\u0000\u0179\u083c\u0001\u0000\u0000\u0000\u017b\u0844\u0001"+ + "\u0000\u0000\u0000\u017d\u084d\u0001\u0000\u0000\u0000\u017f\u0855\u0001"+ + "\u0000\u0000\u0000\u0181\u0859\u0001\u0000\u0000\u0000\u0183\u085e\u0001"+ + "\u0000\u0000\u0000\u0185\u0867\u0001\u0000\u0000\u0000\u0187\u0873\u0001"+ + "\u0000\u0000\u0000\u0189\u087f\u0001\u0000\u0000\u0000\u018b\u0889\u0001"+ + "\u0000\u0000\u0000\u018d\u0892\u0001\u0000\u0000\u0000\u018f\u089a\u0001"+ + "\u0000\u0000\u0000\u0191\u08a5\u0001\u0000\u0000\u0000\u0193\u08b4\u0001"+ + "\u0000\u0000\u0000\u0195\u08ba\u0001\u0000\u0000\u0000\u0197\u08c3\u0001"+ + "\u0000\u0000\u0000\u0199\u08cc\u0001\u0000\u0000\u0000\u019b\u08da\u0001"+ + "\u0000\u0000\u0000\u019d\u08dc\u0001\u0000\u0000\u0000\u019f\u08de\u0001"+ + "\u0000\u0000\u0000\u01a1\u08e1\u0001\u0000\u0000\u0000\u01a3\u08e3\u0001"+ + "\u0000\u0000\u0000\u01a5\u08e5\u0001\u0000\u0000\u0000\u01a7\u08f0\u0001"+ + "\u0000\u0000\u0000\u01a9\u08f5\u0001\u0000\u0000\u0000\u01ab\u0900\u0001"+ + "\u0000\u0000\u0000\u01ad\u090f\u0001\u0000\u0000\u0000\u01af\u091c\u0001"+ + "\u0000\u0000\u0000\u01b1\u0928\u0001\u0000\u0000\u0000\u01b3\u0934\u0001"+ + "\u0000\u0000\u0000\u01b5\u093c\u0001\u0000\u0000\u0000\u01b7\u094b\u0001"+ + "\u0000\u0000\u0000\u01b9\u0951\u0001\u0000\u0000\u0000\u01bb\u0958\u0001"+ + "\u0000\u0000\u0000\u01bd\u0969\u0001\u0000\u0000\u0000\u01bf\u0972\u0001"+ + "\u0000\u0000\u0000\u01c1\u097f\u0001\u0000\u0000\u0000\u01c3\u0992\u0001"+ + "\u0000\u0000\u0000\u01c5\u09a1\u0001\u0000\u0000\u0000\u01c7\u09ad\u0001"+ + "\u0000\u0000\u0000\u01c9\u09b7\u0001\u0000\u0000\u0000\u01cb\u09c3\u0001"+ + "\u0000\u0000\u0000\u01cd\u09cb\u0001\u0000\u0000\u0000\u01cf\u09d4\u0001"+ + "\u0000\u0000\u0000\u01d1\u09e0\u0001\u0000\u0000\u0000\u01d3\u09ed\u0001"+ + "\u0000\u0000\u0000\u01d5\u09fe\u0001\u0000\u0000\u0000\u01d7\u0a12\u0001"+ + "\u0000\u0000\u0000\u01d9\u0a1f\u0001\u0000\u0000\u0000\u01db\u0a33\u0001"+ + "\u0000\u0000\u0000\u01dd\u0a3e\u0001\u0000\u0000\u0000\u01df\u0a4a\u0001"+ + "\u0000\u0000\u0000\u01e1\u0a58\u0001\u0000\u0000\u0000\u01e3\u0a67\u0001"+ + "\u0000\u0000\u0000\u01e5\u0a75\u0001\u0000\u0000\u0000\u01e7\u0a80\u0001"+ + "\u0000\u0000\u0000\u01e9\u0a8c\u0001\u0000\u0000\u0000\u01eb\u0a9c\u0001"+ + "\u0000\u0000\u0000\u01ed\u0aa3\u0001\u0000\u0000\u0000\u01ef\u0aaf\u0001"+ + "\u0000\u0000\u0000\u01f1\u0aba\u0001\u0000\u0000\u0000\u01f3\u0acc\u0001"+ + "\u0000\u0000\u0000\u01f5\u0ad9\u0001\u0000\u0000\u0000\u01f7\u0ae8\u0001"+ + "\u0000\u0000\u0000\u01f9\u0aee\u0001\u0000\u0000\u0000\u01fb\u0af4\u0001"+ + "\u0000\u0000\u0000\u01fd\u0afa\u0001\u0000\u0000\u0000\u01ff\u0b05\u0001"+ + "\u0000\u0000\u0000\u0201\u0b11\u0001\u0000\u0000\u0000\u0203\u0b22\u0001"+ + "\u0000\u0000\u0000\u0205\u0b28\u0001\u0000\u0000\u0000\u0207\u0b2d\u0001"+ + "\u0000\u0000\u0000\u0209\u0b33\u0001\u0000\u0000\u0000\u020b\u0b40\u0001"+ + "\u0000\u0000\u0000\u020d\u0b4e\u0001\u0000\u0000\u0000\u020f\u0b56\u0001"+ + "\u0000\u0000\u0000\u0211\u0b5d\u0001\u0000\u0000\u0000\u0213\u0b6a\u0001"+ + "\u0000\u0000\u0000\u0215\u0b75\u0001\u0000\u0000\u0000\u0217\u0b7d\u0001"+ + "\u0000\u0000\u0000\u0219\u0b8b\u0001\u0000\u0000\u0000\u021b\u0b9a\u0001"+ + "\u0000\u0000\u0000\u021d\u0ba1\u0001\u0000\u0000\u0000\u021f\u0ba8\u0001"+ + "\u0000\u0000\u0000\u0221\u0bb0\u0001\u0000\u0000\u0000\u0223\u0bb9\u0001"+ + "\u0000\u0000\u0000\u0225\u0bd0\u0001\u0000\u0000\u0000\u0227\u0bd9\u0001"+ + "\u0000\u0000\u0000\u0229\u0bea\u0001\u0000\u0000\u0000\u022b\u0c0e\u0001"+ + "\u0000\u0000\u0000\u022d\u0c14\u0001\u0000\u0000\u0000\u022f\u0c25\u0001"+ + "\u0000\u0000\u0000\u0231\u0c36\u0001\u0000\u0000\u0000\u0233\u0c44\u0001"+ + "\u0000\u0000\u0000\u0235\u0c55\u0001\u0000\u0000\u0000\u0237\u0c5c\u0001"+ + "\u0000\u0000\u0000\u0239\u0c77\u0001\u0000\u0000\u0000\u023b\u0c7e\u0001"+ + "\u0000\u0000\u0000\u023d\u0c84\u0001\u0000\u0000\u0000\u023f\u0c8e\u0001"+ + "\u0000\u0000\u0000\u0241\u0ca3\u0001\u0000\u0000\u0000\u0243\u0cb7\u0001"+ + "\u0000\u0000\u0000\u0245\u0cc5\u0001\u0000\u0000\u0000\u0247\u0cda\u0001"+ + "\u0000\u0000\u0000\u0249\u0ce2\u0001\u0000\u0000\u0000\u024b\u0cf4\u0001"+ + "\u0000\u0000\u0000\u024d\u0d0c\u0001\u0000\u0000\u0000\u024f\u0d1b\u0001"+ + "\u0000\u0000\u0000\u0251\u0d30\u0001\u0000\u0000\u0000\u0253\u0d39\u0001"+ + "\u0000\u0000\u0000\u0255\u0d45\u0001\u0000\u0000\u0000\u0257\u0d53\u0001"+ + "\u0000\u0000\u0000\u0259\u0d62\u0001\u0000\u0000\u0000\u025b\u0d75\u0001"+ + "\u0000\u0000\u0000\u025d\u0d7d\u0001\u0000\u0000\u0000\u025f\u0d82\u0001"+ + "\u0000\u0000\u0000\u0261\u0d8e\u0001\u0000\u0000\u0000\u0263\u0d98\u0001"+ + "\u0000\u0000\u0000\u0265\u0d9d\u0001\u0000\u0000\u0000\u0267\u0dae\u0001"+ + "\u0000\u0000\u0000\u0269\u0db8\u0001\u0000\u0000\u0000\u026b\u0dc1\u0001"+ + "\u0000\u0000\u0000\u026d\u0dcb\u0001\u0000\u0000\u0000\u026f\u0ddd\u0001"+ + "\u0000\u0000\u0000\u0271\u0ddf\u0001\u0000\u0000\u0000\u0273\u0de1\u0001"+ + "\u0000\u0000\u0000\u0275\u0de3\u0001\u0000\u0000\u0000\u0277\u0de5\u0001"+ + "\u0000\u0000\u0000\u0279\u0de7\u0001\u0000\u0000\u0000\u027b\u0deb\u0001"+ + "\u0000\u0000\u0000\u027d\u0def\u0001\u0000\u0000\u0000\u027f\u0df1\u0001"+ + "\u0000\u0000\u0000\u0281\u0df3\u0001\u0000\u0000\u0000\u0283\u0df5\u0001"+ + "\u0000\u0000\u0000\u0285\u0df7\u0001\u0000\u0000\u0000\u0287\u0df9\u0001"+ + "\u0000\u0000\u0000\u0289\u0dfb\u0001\u0000\u0000\u0000\u028b\u0dfd\u0001"+ + "\u0000\u0000\u0000\u028d\u0dff\u0001\u0000\u0000\u0000\u028f\u0e01\u0001"+ + "\u0000\u0000\u0000\u0291\u0e03\u0001\u0000\u0000\u0000\u0293\u0e05\u0001"+ + "\u0000\u0000\u0000\u0295\u0e07\u0001\u0000\u0000\u0000\u0297\u0e09\u0001"+ + "\u0000\u0000\u0000\u0299\u0e0b\u0001\u0000\u0000\u0000\u029b\u0e0d\u0001"+ + "\u0000\u0000\u0000\u029d\u0e0f\u0001\u0000\u0000\u0000\u029f\u0e11\u0001"+ + "\u0000\u0000\u0000\u02a1\u0e13\u0001\u0000\u0000\u0000\u02a3\u0e15\u0001"+ + "\u0000\u0000\u0000\u02a5\u0e17\u0001\u0000\u0000\u0000\u02a7\u0e19\u0001"+ + "\u0000\u0000\u0000\u02a9\u0e1b\u0001\u0000\u0000\u0000\u02ab\u0e1d\u0001"+ + "\u0000\u0000\u0000\u02ad\u0e20\u0001\u0000\u0000\u0000\u02af\u0e23\u0001"+ + "\u0000\u0000\u0000\u02b1\u0e3a\u0001\u0000\u0000\u0000\u02b3\u0e67\u0001"+ + "\u0000\u0000\u0000\u02b5\u0e69\u0001\u0000\u0000\u0000\u02b7\u0e6c\u0001"+ + "\u0000\u0000\u0000\u02b9\u0e6e\u0001\u0000\u0000\u0000\u02bb\u0e70\u0001"+ + "\u0000\u0000\u0000\u02bd\u0e72\u0001\u0000\u0000\u0000\u02bf\u0e74\u0001"+ + "\u0000\u0000\u0000\u02c1\u0e7e\u0001\u0000\u0000\u0000\u02c3\u0e88\u0001"+ + "\u0000\u0000\u0000\u02c5\u0e95\u0001\u0000\u0000\u0000\u02c7\u0ea2\u0001"+ + "\u0000\u0000\u0000\u02c9\u0eaf\u0001\u0000\u0000\u0000\u02cb\u0eb1\u0001"+ + "\u0000\u0000\u0000\u02cd\u0eb3\u0001\u0000\u0000\u0000\u02cf\u0ebc\u0001"+ + "\u0000\u0000\u0000\u02d1\u02d3\u0007\u0000\u0000\u0000\u02d2\u02d1\u0001"+ + "\u0000\u0000\u0000\u02d3\u02d4\u0001\u0000\u0000\u0000\u02d4\u02d2\u0001"+ + "\u0000\u0000\u0000\u02d4\u02d5\u0001\u0000\u0000\u0000\u02d5\u02d6\u0001"+ + "\u0000\u0000\u0000\u02d6\u02d7\u0006\u0000\u0000\u0000\u02d7\u0002\u0001"+ + "\u0000\u0000\u0000\u02d8\u02d9\u0005/\u0000\u0000\u02d9\u02da\u0005*\u0000"+ + "\u0000\u02da\u02db\u0005!\u0000\u0000\u02db\u02dd\u0001\u0000\u0000\u0000"+ + "\u02dc\u02de\t\u0000\u0000\u0000\u02dd\u02dc\u0001\u0000\u0000\u0000\u02de"+ + "\u02df\u0001\u0000\u0000\u0000\u02df\u02e0\u0001\u0000\u0000\u0000\u02df"+ + "\u02dd\u0001\u0000\u0000\u0000\u02e0\u02e1\u0001\u0000\u0000\u0000\u02e1"+ + "\u02e2\u0005*\u0000\u0000\u02e2\u02e3\u0005/\u0000\u0000\u02e3\u02e4\u0001"+ + "\u0000\u0000\u0000\u02e4\u02e5\u0006\u0001\u0001\u0000\u02e5\u0004\u0001"+ + "\u0000\u0000\u0000\u02e6\u02e7\u0005/\u0000\u0000\u02e7\u02e8\u0005*\u0000"+ + "\u0000\u02e8\u02ec\u0001\u0000\u0000\u0000\u02e9\u02eb\t\u0000\u0000\u0000"+ + "\u02ea\u02e9\u0001\u0000\u0000\u0000\u02eb\u02ee\u0001\u0000\u0000\u0000"+ + "\u02ec\u02ed\u0001\u0000\u0000\u0000\u02ec\u02ea\u0001\u0000\u0000\u0000"+ + "\u02ed\u02ef\u0001\u0000\u0000\u0000\u02ee\u02ec\u0001\u0000\u0000\u0000"+ + "\u02ef\u02f0\u0005*\u0000\u0000\u02f0\u02f1\u0005/\u0000\u0000\u02f1\u02f2"+ + "\u0001\u0000\u0000\u0000\u02f2\u02f3\u0006\u0002\u0000\u0000\u02f3\u0006"+ + "\u0001\u0000\u0000\u0000\u02f4\u02f5\u0005-\u0000\u0000\u02f5\u02f6\u0005"+ + "-\u0000\u0000\u02f6\u02f9\u0005 \u0000\u0000\u02f7\u02f9\u0005#\u0000"+ + "\u0000\u02f8\u02f4\u0001\u0000\u0000\u0000\u02f8\u02f7\u0001\u0000\u0000"+ + "\u0000\u02f9\u02fd\u0001\u0000\u0000\u0000\u02fa\u02fc\b\u0001\u0000\u0000"+ + "\u02fb\u02fa\u0001\u0000\u0000\u0000\u02fc\u02ff\u0001\u0000\u0000\u0000"+ + "\u02fd\u02fb\u0001\u0000\u0000\u0000\u02fd\u02fe\u0001\u0000\u0000\u0000"+ + "\u02fe\u0305\u0001\u0000\u0000\u0000\u02ff\u02fd\u0001\u0000\u0000\u0000"+ + "\u0300\u0302\u0005\r\u0000\u0000\u0301\u0300\u0001\u0000\u0000\u0000\u0301"+ + "\u0302\u0001\u0000\u0000\u0000\u0302\u0303\u0001\u0000\u0000\u0000\u0303"+ + "\u0306\u0005\n\u0000\u0000\u0304\u0306\u0005\u0000\u0000\u0001\u0305\u0301"+ + "\u0001\u0000\u0000\u0000\u0305\u0304\u0001\u0000\u0000\u0000\u0306\u0312"+ + "\u0001\u0000\u0000\u0000\u0307\u0308\u0005-\u0000\u0000\u0308\u0309\u0005"+ + "-\u0000\u0000\u0309\u030f\u0001\u0000\u0000\u0000\u030a\u030c\u0005\r"+ + "\u0000\u0000\u030b\u030a\u0001\u0000\u0000\u0000\u030b\u030c\u0001\u0000"+ + "\u0000\u0000\u030c\u030d\u0001\u0000\u0000\u0000\u030d\u0310\u0005\n\u0000"+ + "\u0000\u030e\u0310\u0005\u0000\u0000\u0001\u030f\u030b\u0001\u0000\u0000"+ + "\u0000\u030f\u030e\u0001\u0000\u0000\u0000\u0310\u0312\u0001\u0000\u0000"+ + "\u0000\u0311\u02f8\u0001\u0000\u0000\u0000\u0311\u0307\u0001\u0000\u0000"+ + "\u0000\u0312\u0313\u0001\u0000\u0000\u0000\u0313\u0314\u0006\u0003\u0000"+ + "\u0000\u0314\b\u0001\u0000\u0000\u0000\u0315\u0316\u0007\u0002\u0000\u0000"+ + "\u0316\u0317\u0007\u0003\u0000\u0000\u0317\u0318\u0007\u0003\u0000\u0000"+ + "\u0318\n\u0001\u0000\u0000\u0000\u0319\u031a\u0007\u0002\u0000\u0000\u031a"+ + "\u031b\u0007\u0004\u0000\u0000\u031b\u031c\u0007\u0005\u0000\u0000\u031c"+ + "\f\u0001\u0000\u0000\u0000\u031d\u031e\u0007\u0002\u0000\u0000\u031e\u031f"+ + "\u0007\u0006\u0000\u0000\u031f\u000e\u0001\u0000\u0000\u0000\u0320\u0321"+ + "\u0007\u0002\u0000\u0000\u0321\u0322\u0007\u0006\u0000\u0000\u0322\u0323"+ + "\u0007\u0007\u0000\u0000\u0323\u0010\u0001\u0000\u0000\u0000\u0324\u0325"+ + "\u0007\b\u0000\u0000\u0325\u0326\u0007\t\u0000\u0000\u0326\u0327\u0007"+ + "\t\u0000\u0000\u0327\u0328\u0007\u0003\u0000\u0000\u0328\u0329\u0007\n"+ + "\u0000\u0000\u0329\u032a\u0007\u0002\u0000\u0000\u032a\u032b\u0007\u0004"+ + "\u0000\u0000\u032b\u0012\u0001\u0000\u0000\u0000\u032c\u032d\u0007\b\u0000"+ + "\u0000\u032d\u032e\u0007\n\u0000\u0000\u032e\u032f\u0007\u000b\u0000\u0000"+ + "\u032f\u0330\u0007\f\u0000\u0000\u0330\u0331\u0007\n\u0000\u0000\u0331"+ + "\u0332\u0007\n\u0000\u0000\u0332\u0333\u0007\u0004\u0000\u0000\u0333\u0014"+ + "\u0001\u0000\u0000\u0000\u0334\u0335\u0007\b\u0000\u0000\u0335\u0336\u0007"+ + "\r\u0000\u0000\u0336\u0016\u0001\u0000\u0000\u0000\u0337\u0338\u0007\u0007"+ + "\u0000\u0000\u0338\u0339\u0007\u0002\u0000\u0000\u0339\u033a\u0007\u0006"+ + "\u0000\u0000\u033a\u033b\u0007\n\u0000\u0000\u033b\u0018\u0001\u0000\u0000"+ + "\u0000\u033c\u033d\u0007\u0007\u0000\u0000\u033d\u033e\u0007\u0002\u0000"+ + "\u0000\u033e\u033f\u0007\u0006\u0000\u0000\u033f\u0340\u0007\u000b\u0000"+ + "\u0000\u0340\u001a\u0001\u0000\u0000\u0000\u0341\u0342\u0007\u0007\u0000"+ + "\u0000\u0342\u0343\u0007\u000e\u0000\u0000\u0343\u0344\u0007\t\u0000\u0000"+ + "\u0344\u0345\u0007\u0006\u0000\u0000\u0345\u0346\u0007\u0006\u0000\u0000"+ + "\u0346\u001c\u0001\u0000\u0000\u0000\u0347\u0348\u0007\u0007\u0000\u0000"+ + "\u0348\u0349\u0007\t\u0000\u0000\u0349\u034a\u0007\u0003\u0000\u0000\u034a"+ + "\u034b\u0007\u000f\u0000\u0000\u034b\u034c\u0007\u0010\u0000\u0000\u034c"+ + "\u034d\u0007\u0004\u0000\u0000\u034d\u034e\u0007\u0006\u0000\u0000\u034e"+ + "\u001e\u0001\u0000\u0000\u0000\u034f\u0350\u0007\u0005\u0000\u0000\u0350"+ + "\u0351\u0007\u0002\u0000\u0000\u0351\u0352\u0007\u000b\u0000\u0000\u0352"+ + "\u0353\u0007\n\u0000\u0000\u0353\u0354\u0007\u000b\u0000\u0000\u0354\u0355"+ + "\u0007\u0011\u0000\u0000\u0355\u0356\u0007\u0010\u0000\u0000\u0356\u0357"+ + "\u0007\n\u0000\u0000\u0357 \u0001\u0000\u0000\u0000\u0358\u0359\u0007"+ + "\u0005\u0000\u0000\u0359\u035a\u0007\n\u0000\u0000\u035a\u035b\u0007\u0003"+ + "\u0000\u0000\u035b\u035c\u0007\n\u0000\u0000\u035c\u035d\u0007\u000b\u0000"+ + "\u0000\u035d\u035e\u0007\n\u0000\u0000\u035e\"\u0001\u0000\u0000\u0000"+ + "\u035f\u0360\u0007\u0005\u0000\u0000\u0360\u0361\u0007\n\u0000\u0000\u0361"+ + "\u0362\u0007\u0006\u0000\u0000\u0362\u0363\u0007\u0007\u0000\u0000\u0363"+ + "$\u0001\u0000\u0000\u0000\u0364\u0365\u0007\u0005\u0000\u0000\u0365\u0366"+ + "\u0007\n\u0000\u0000\u0366\u0367\u0007\u0006\u0000\u0000\u0367\u0368\u0007"+ + "\u0007\u0000\u0000\u0368\u0369\u0007\u000e\u0000\u0000\u0369\u036a\u0007"+ + "\u0011\u0000\u0000\u036a\u036b\u0007\b\u0000\u0000\u036b\u036c\u0007\n"+ + "\u0000\u0000\u036c&\u0001\u0000\u0000\u0000\u036d\u036e\u0007\u0005\u0000"+ + "\u0000\u036e\u036f\u0007\u0011\u0000\u0000\u036f\u0370\u0007\u0006\u0000"+ + "\u0000\u0370\u0371\u0007\u000b\u0000\u0000\u0371\u0372\u0007\u0011\u0000"+ + "\u0000\u0372\u0373\u0007\u0004\u0000\u0000\u0373\u0374\u0007\u0007\u0000"+ + "\u0000\u0374\u0375\u0007\u000b\u0000\u0000\u0375(\u0001\u0000\u0000\u0000"+ + "\u0376\u0377\u0007\u0005\u0000\u0000\u0377\u0378\u0007\t\u0000\u0000\u0378"+ + "\u0379\u0007\u000f\u0000\u0000\u0379\u037a\u0007\b\u0000\u0000\u037a\u037b"+ + "\u0007\u0003\u0000\u0000\u037b\u037c\u0007\n\u0000\u0000\u037c*\u0001"+ + "\u0000\u0000\u0000\u037d\u037e\u0007\n\u0000\u0000\u037e\u037f\u0007\u0003"+ + "\u0000\u0000\u037f\u0380\u0007\u0006\u0000\u0000\u0380\u0381\u0007\n\u0000"+ + "\u0000\u0381,\u0001\u0000\u0000\u0000\u0382\u0383\u0007\n\u0000\u0000"+ + "\u0383\u0384\u0007\u0012\u0000\u0000\u0384\u0385\u0007\u0011\u0000\u0000"+ + "\u0385\u0386\u0007\u0006\u0000\u0000\u0386\u0387\u0007\u000b\u0000\u0000"+ + "\u0387\u0388\u0007\u0006\u0000\u0000\u0388.\u0001\u0000\u0000\u0000\u0389"+ + "\u038a\u0007\u0013\u0000\u0000\u038a\u038b\u0007\u0002\u0000\u0000\u038b"+ + "\u038c\u0007\u0003\u0000\u0000\u038c\u038d\u0007\u0006\u0000\u0000\u038d"+ + "\u038e\u0007\n\u0000\u0000\u038e0\u0001\u0000\u0000\u0000\u038f\u0390"+ + "\u0007\u0013\u0000\u0000\u0390\u0391\u0007\u0003\u0000\u0000\u0391\u0392"+ + "\u0007\t\u0000\u0000\u0392\u0393\u0007\u0002\u0000\u0000\u0393\u0394\u0007"+ + "\u000b\u0000\u0000\u03942\u0001\u0000\u0000\u0000\u0395\u0396\u0007\u0013"+ + "\u0000\u0000\u0396\u0397\u0007\u0011\u0000\u0000\u0397\u0398\u0007\u000e"+ + "\u0000\u0000\u0398\u0399\u0007\u0006\u0000\u0000\u0399\u039a\u0007\u000b"+ + "\u0000\u0000\u039a4\u0001\u0000\u0000\u0000\u039b\u039c\u0007\u0013\u0000"+ + "\u0000\u039c\u039d\u0007\u000e\u0000\u0000\u039d\u039e\u0007\t\u0000\u0000"+ + "\u039e\u039f\u0007\u0010\u0000\u0000\u039f6\u0001\u0000\u0000\u0000\u03a0"+ + "\u03a1\u0007\u0014\u0000\u0000\u03a1\u03a2\u0007\u000e\u0000\u0000\u03a2"+ + "\u03a3\u0007\t\u0000\u0000\u03a3\u03a4\u0007\u000f\u0000\u0000\u03a4\u03a5"+ + "\u0007\u0015\u0000\u0000\u03a58\u0001\u0000\u0000\u0000\u03a6\u03a7\u0007"+ + "\u0016\u0000\u0000\u03a7\u03a8\u0007\u0002\u0000\u0000\u03a8\u03a9\u0007"+ + "\u0017\u0000\u0000\u03a9\u03aa\u0007\u0011\u0000\u0000\u03aa\u03ab\u0007"+ + "\u0004\u0000\u0000\u03ab\u03ac\u0007\u0014\u0000\u0000\u03ac:\u0001\u0000"+ + "\u0000\u0000\u03ad\u03ae\u0007\u0011\u0000\u0000\u03ae\u03af\u0007\u0004"+ + "\u0000\u0000\u03af<\u0001\u0000\u0000\u0000\u03b0\u03b1\u0007\u0011\u0000"+ + "\u0000\u03b1\u03b2\u0007\u0004\u0000\u0000\u03b2\u03b3\u0007\u0004\u0000"+ + "\u0000\u03b3\u03b4\u0007\n\u0000\u0000\u03b4\u03b5\u0007\u000e\u0000\u0000"+ + "\u03b5>\u0001\u0000\u0000\u0000\u03b6\u03b7\u0007\u0011\u0000\u0000\u03b7"+ + "\u03b8\u0007\u0004\u0000\u0000\u03b8\u03b9\u0007\u000b\u0000\u0000\u03b9"+ + "@\u0001\u0000\u0000\u0000\u03ba\u03bb\u0007\u0011\u0000\u0000\u03bb\u03bc"+ + "\u0007\u0004\u0000\u0000\u03bc\u03bd\u0007\u000b\u0000\u0000\u03bd\u03be"+ + "\u0007\n\u0000\u0000\u03be\u03bf\u0007\u0014\u0000\u0000\u03bf\u03c0\u0007"+ + "\n\u0000\u0000\u03c0\u03c1\u0007\u000e\u0000\u0000\u03c1B\u0001\u0000"+ + "\u0000\u0000\u03c2\u03c3\u0007\u0011\u0000\u0000\u03c3\u03c4\u0007\u0006"+ + "\u0000\u0000\u03c4D\u0001\u0000\u0000\u0000\u03c5\u03c6\u0007\u0018\u0000"+ + "\u0000\u03c6\u03c7\u0007\t\u0000\u0000\u03c7\u03c8\u0007\u0011\u0000\u0000"+ + "\u03c8\u03c9\u0007\u0004\u0000\u0000\u03c9F\u0001\u0000\u0000\u0000\u03ca"+ + "\u03cb\u0007\u0003\u0000\u0000\u03cb\u03cc\u0007\u0002\u0000\u0000\u03cc"+ + "\u03cd\u0007\u0006\u0000\u0000\u03cd\u03ce\u0007\u000b\u0000\u0000\u03ce"+ + "H\u0001\u0000\u0000\u0000\u03cf\u03d0\u0007\u0003\u0000\u0000\u03d0\u03d1"+ + "\u0007\n\u0000\u0000\u03d1\u03d2\u0007\u0013\u0000\u0000\u03d2\u03d3\u0007"+ + "\u000b\u0000\u0000\u03d3J\u0001\u0000\u0000\u0000\u03d4\u03d5\u0007\u0003"+ + "\u0000\u0000\u03d5\u03d6\u0007\u0011\u0000\u0000\u03d6\u03d7\u0007\u0019"+ + "\u0000\u0000\u03d7\u03d8\u0007\n\u0000\u0000\u03d8L\u0001\u0000\u0000"+ + "\u0000\u03d9\u03da\u0007\u0003\u0000\u0000\u03da\u03db\u0007\u0011\u0000"+ + "\u0000\u03db\u03dc\u0007\u0010\u0000\u0000\u03dc\u03dd\u0007\u0011\u0000"+ + "\u0000\u03dd\u03de\u0007\u000b\u0000\u0000\u03deN\u0001\u0000\u0000\u0000"+ + "\u03df\u03e0\u0007\u0003\u0000\u0000\u03e0\u03e1\u0007\t\u0000\u0000\u03e1"+ + "\u03e2\u0007\u0004\u0000\u0000\u03e2\u03e3\u0007\u0014\u0000\u0000\u03e3"+ + "P\u0001\u0000\u0000\u0000\u03e4\u03e5\u0007\u0010\u0000\u0000\u03e5\u03e6"+ + "\u0007\u0002\u0000\u0000\u03e6\u03e7\u0007\u000b\u0000\u0000\u03e7\u03e8"+ + "\u0007\u0007\u0000\u0000\u03e8\u03e9\u0007\u0016\u0000\u0000\u03e9R\u0001"+ + "\u0000\u0000\u0000\u03ea\u03eb\u0007\u0004\u0000\u0000\u03eb\u03ec\u0007"+ + "\u0002\u0000\u0000\u03ec\u03ed\u0007\u000b\u0000\u0000\u03ed\u03ee\u0007"+ + "\u000f\u0000\u0000\u03ee\u03ef\u0007\u000e\u0000\u0000\u03ef\u03f0\u0007"+ + "\u0002\u0000\u0000\u03f0\u03f1\u0007\u0003\u0000\u0000\u03f1T\u0001\u0000"+ + "\u0000\u0000\u03f2\u03f3\u0007\u0010\u0000\u0000\u03f3\u03f4\u0007\u0011"+ + "\u0000\u0000\u03f4\u03f5\u0007\u0006\u0000\u0000\u03f5\u03f6\u0007\u0006"+ + "\u0000\u0000\u03f6\u03f7\u0007\u0011\u0000\u0000\u03f7\u03f8\u0007\u0004"+ + "\u0000\u0000\u03f8\u03f9\u0007\u0014\u0000\u0000\u03f9V\u0001\u0000\u0000"+ + "\u0000\u03fa\u03fb\u0007\u0004\u0000\u0000\u03fb\u03fc\u0007\t\u0000\u0000"+ + "\u03fc\u03fd\u0007\u000b\u0000\u0000\u03fdX\u0001\u0000\u0000\u0000\u03fe"+ + "\u03ff\u0007\u0004\u0000\u0000\u03ff\u0400\u0007\u000f\u0000\u0000\u0400"+ + "\u0401\u0007\u0003\u0000\u0000\u0401\u0402\u0007\u0003\u0000\u0000\u0402"+ + "Z\u0001\u0000\u0000\u0000\u0403\u0404\u0007\u0004\u0000\u0000\u0404\u0405"+ + "\u0007\u000f\u0000\u0000\u0405\u0406\u0007\u0003\u0000\u0000\u0406\u0407"+ + "\u0007\u0003\u0000\u0000\u0407\u0408\u0007\u0006\u0000\u0000\u0408\\\u0001"+ + "\u0000\u0000\u0000\u0409\u040a\u0007\t\u0000\u0000\u040a\u040b\u0007\u0004"+ + "\u0000\u0000\u040b^\u0001\u0000\u0000\u0000\u040c\u040d\u0007\t\u0000"+ + "\u0000\u040d\u040e\u0007\u000e\u0000\u0000\u040e`\u0001\u0000\u0000\u0000"+ + "\u040f\u0410\u0007\t\u0000\u0000\u0410\u0411\u0007\u000e\u0000\u0000\u0411"+ + "\u0412\u0007\u0005\u0000\u0000\u0412\u0413\u0007\n\u0000\u0000\u0413\u0414"+ + "\u0007\u000e\u0000\u0000\u0414b\u0001\u0000\u0000\u0000\u0415\u0416\u0007"+ + "\t\u0000\u0000\u0416\u0417\u0007\u000f\u0000\u0000\u0417\u0418\u0007\u000b"+ + "\u0000\u0000\u0418\u0419\u0007\n\u0000\u0000\u0419\u041a\u0007\u000e\u0000"+ + "\u0000\u041ad\u0001\u0000\u0000\u0000\u041b\u041c\u0007\t\u0000\u0000"+ + "\u041c\u041d\u0007\u0017\u0000\u0000\u041d\u041e\u0007\n\u0000\u0000\u041e"+ + "\u041f\u0007\u000e\u0000\u0000\u041ff\u0001\u0000\u0000\u0000\u0420\u0421"+ + "\u0007\u0015\u0000\u0000\u0421\u0422\u0007\u0002\u0000\u0000\u0422\u0423"+ + "\u0007\u000e\u0000\u0000\u0423\u0424\u0007\u000b\u0000\u0000\u0424\u0425"+ + "\u0007\u0011\u0000\u0000\u0425\u0426\u0007\u000b\u0000\u0000\u0426\u0427"+ + "\u0007\u0011\u0000\u0000\u0427\u0428\u0007\t\u0000\u0000\u0428\u0429\u0007"+ + "\u0004\u0000\u0000\u0429h\u0001\u0000\u0000\u0000\u042a\u042b\u0007\u000e"+ + "\u0000\u0000\u042b\u042c\u0007\n\u0000\u0000\u042c\u042d\u0007\u0014\u0000"+ + "\u0000\u042d\u042e\u0007\n\u0000\u0000\u042e\u042f\u0007\u0012\u0000\u0000"+ + "\u042f\u0430\u0007\u0015\u0000\u0000\u0430j\u0001\u0000\u0000\u0000\u0431"+ + "\u0432\u0007\u000e\u0000\u0000\u0432\u0433\u0007\u0011\u0000\u0000\u0433"+ + "\u0434\u0007\u0014\u0000\u0000\u0434\u0435\u0007\u0016\u0000\u0000\u0435"+ + "\u0436\u0007\u000b\u0000\u0000\u0436l\u0001\u0000\u0000\u0000\u0437\u0438"+ + "\u0007\u0006\u0000\u0000\u0438\u0439\u0007\n\u0000\u0000\u0439\u043a\u0007"+ + "\u0003\u0000\u0000\u043a\u043b\u0007\n\u0000\u0000\u043b\u043c\u0007\u0007"+ + "\u0000\u0000\u043c\u043d\u0007\u000b\u0000\u0000\u043dn\u0001\u0000\u0000"+ + "\u0000\u043e\u043f\u0007\u0006\u0000\u0000\u043f\u0440\u0007\u0016\u0000"+ + "\u0000\u0440\u0441\u0007\t\u0000\u0000\u0441\u0442\u0007\f\u0000\u0000"+ + "\u0442p\u0001\u0000\u0000\u0000\u0443\u0444\u0007\u0006\u0000\u0000\u0444"+ + "\u0445\u0007\u000b\u0000\u0000\u0445\u0446\u0007\u000e\u0000\u0000\u0446"+ + "\u0447\u0007\u0011\u0000\u0000\u0447\u0448\u0007\u0004\u0000\u0000\u0448"+ + "\u0449\u0007\u0014\u0000\u0000\u0449r\u0001\u0000\u0000\u0000\u044a\u044b"+ + "\u0007\u000b\u0000\u0000\u044b\u044c\u0007\u0016\u0000\u0000\u044c\u044d"+ + "\u0007\n\u0000\u0000\u044d\u044e\u0007\u0004\u0000\u0000\u044et\u0001"+ + "\u0000\u0000\u0000\u044f\u0450\u0007\u000b\u0000\u0000\u0450\u0451\u0007"+ + "\u000e\u0000\u0000\u0451\u0452\u0007\u000f\u0000\u0000\u0452\u0453\u0007"+ + "\n\u0000\u0000\u0453v\u0001\u0000\u0000\u0000\u0454\u0455\u0007\u000f"+ + "\u0000\u0000\u0455\u0456\u0007\u0004\u0000\u0000\u0456\u0457\u0007\u0011"+ + "\u0000\u0000\u0457\u0458\u0007\t\u0000\u0000\u0458\u0459\u0007\u0004\u0000"+ + "\u0000\u0459x\u0001\u0000\u0000\u0000\u045a\u045b\u0007\u000f\u0000\u0000"+ + "\u045b\u045c\u0007\u0006\u0000\u0000\u045c\u045d\u0007\u0011\u0000\u0000"+ + "\u045d\u045e\u0007\u0004\u0000\u0000\u045e\u045f\u0007\u0014\u0000\u0000"+ + "\u045fz\u0001\u0000\u0000\u0000\u0460\u0461\u0007\f\u0000\u0000\u0461"+ + "\u0462\u0007\u0016\u0000\u0000\u0462\u0463\u0007\n\u0000\u0000\u0463\u0464"+ + "\u0007\u0004\u0000\u0000\u0464|\u0001\u0000\u0000\u0000\u0465\u0466\u0007"+ + "\f\u0000\u0000\u0466\u0467\u0007\u0016\u0000\u0000\u0467\u0468\u0007\n"+ + "\u0000\u0000\u0468\u0469\u0007\u000e\u0000\u0000\u0469\u046a\u0007\n\u0000"+ + "\u0000\u046a~\u0001\u0000\u0000\u0000\u046b\u046c\u0007\u0010\u0000\u0000"+ + "\u046c\u046d\u0007\u0011\u0000\u0000\u046d\u046e\u0007\u0004\u0000\u0000"+ + "\u046e\u046f\u0007\u000f\u0000\u0000\u046f\u0470\u0007\u0006\u0000\u0000"+ + "\u0470\u0080\u0001\u0000\u0000\u0000\u0471\u0472\u0007\u0002\u0000\u0000"+ + "\u0472\u0473\u0007\u0017\u0000\u0000\u0473\u0474\u0007\u0014\u0000\u0000"+ + "\u0474\u0082\u0001\u0000\u0000\u0000\u0475\u0476\u0007\u0007\u0000\u0000"+ + "\u0476\u0477\u0007\t\u0000\u0000\u0477\u0478\u0007\u000f\u0000\u0000\u0478"+ + "\u0479\u0007\u0004\u0000\u0000\u0479\u047a\u0007\u000b\u0000\u0000\u047a"+ + "\u0084\u0001\u0000\u0000\u0000\u047b\u047c\u0007\u0010\u0000\u0000\u047c"+ + "\u047d\u0007\u0002\u0000\u0000\u047d\u047e\u0007\u0012\u0000\u0000\u047e"+ + "\u0086\u0001\u0000\u0000\u0000\u047f\u0480\u0007\u0010\u0000\u0000\u0480"+ + "\u0481\u0007\u0011\u0000\u0000\u0481\u0482\u0007\u0004\u0000\u0000\u0482"+ + "\u0088\u0001\u0000\u0000\u0000\u0483\u0484\u0007\u0006\u0000\u0000\u0484"+ + "\u0485\u0007\u000f\u0000\u0000\u0485\u0486\u0007\u0010\u0000\u0000\u0486"+ + "\u008a\u0001\u0000\u0000\u0000\u0487\u0488\u0007\u0017\u0000\u0000\u0488"+ + "\u0489\u0007\u0002\u0000\u0000\u0489\u048a\u0007\u000e\u0000\u0000\u048a"+ + "\u048b\u0005_\u0000\u0000\u048b\u048c\u0007\u0015\u0000\u0000\u048c\u048d"+ + "\u0007\t\u0000\u0000\u048d\u048e\u0007\u0015\u0000\u0000\u048e\u008c\u0001"+ + "\u0000\u0000\u0000\u048f\u0490\u0007\u0017\u0000\u0000\u0490\u0491\u0007"+ + "\u0002\u0000\u0000\u0491\u0492\u0007\u000e\u0000\u0000\u0492\u0493\u0005"+ + "_\u0000\u0000\u0493\u0494\u0007\u0006\u0000\u0000\u0494\u0495\u0007\u0002"+ + "\u0000\u0000\u0495\u0496\u0007\u0010\u0000\u0000\u0496\u0497\u0007\u0015"+ + "\u0000\u0000\u0497\u008e\u0001\u0000\u0000\u0000\u0498\u0499\u0007\u0017"+ + "\u0000\u0000\u0499\u049a\u0007\u0002\u0000\u0000\u049a\u049b\u0007\u000e"+ + "\u0000\u0000\u049b\u049c\u0007\u0011\u0000\u0000\u049c\u049d\u0007\u0002"+ + "\u0000\u0000\u049d\u049e\u0007\u0004\u0000\u0000\u049e\u049f\u0007\u0007"+ + "\u0000\u0000\u049f\u04a0\u0007\n\u0000\u0000\u04a0\u0090\u0001\u0000\u0000"+ + "\u0000\u04a1\u04a2\u0007\u0006\u0000\u0000\u04a2\u04a3\u0007\u000b\u0000"+ + "\u0000\u04a3\u04a4\u0007\u0005\u0000\u0000\u04a4\u0092\u0001\u0000\u0000"+ + "\u0000\u04a5\u04a6\u0007\u0006\u0000\u0000\u04a6\u04a7\u0007\u000b\u0000"+ + "\u0000\u04a7\u04a8\u0007\u0005\u0000\u0000\u04a8\u04a9\u0007\u0005\u0000"+ + "\u0000\u04a9\u04aa\u0007\n\u0000\u0000\u04aa\u04ab\u0007\u0017\u0000\u0000"+ + "\u04ab\u0094\u0001\u0000\u0000\u0000\u04ac\u04ad\u0007\u0006\u0000\u0000"+ + "\u04ad\u04ae\u0007\u000b\u0000\u0000\u04ae\u04af\u0007\u0005\u0000\u0000"+ + "\u04af\u04b0\u0007\u0005\u0000\u0000\u04b0\u04b1\u0007\n\u0000\u0000\u04b1"+ + "\u04b2\u0007\u0017\u0000\u0000\u04b2\u04b3\u0005_\u0000\u0000\u04b3\u04b4"+ + "\u0007\u0015\u0000\u0000\u04b4\u04b5\u0007\t\u0000\u0000\u04b5\u04b6\u0007"+ + "\u0015\u0000\u0000\u04b6\u0096\u0001\u0000\u0000\u0000\u04b7\u04b8\u0007"+ + "\u0006\u0000\u0000\u04b8\u04b9\u0007\u000b\u0000\u0000\u04b9\u04ba\u0007"+ + "\u0005\u0000\u0000\u04ba\u04bb\u0007\u0005\u0000\u0000\u04bb\u04bc\u0007"+ + "\n\u0000\u0000\u04bc\u04bd\u0007\u0017\u0000\u0000\u04bd\u04be\u0005_"+ + "\u0000\u0000\u04be\u04bf\u0007\u0006\u0000\u0000\u04bf\u04c0\u0007\u0002"+ + "\u0000\u0000\u04c0\u04c1\u0007\u0010\u0000\u0000\u04c1\u04c2\u0007\u0015"+ + "\u0000\u0000\u04c2\u0098\u0001\u0000\u0000\u0000\u04c3\u04c4\u0007\u0006"+ + "\u0000\u0000\u04c4\u04c5\u0007\u000f\u0000\u0000\u04c5\u04c6\u0007\b\u0000"+ + "\u0000\u04c6\u04c7\u0007\u0006\u0000\u0000\u04c7\u04c8\u0007\u000b\u0000"+ + "\u0000\u04c8\u04c9\u0007\u000e\u0000\u0000\u04c9\u04ca\u0007\u0011\u0000"+ + "\u0000\u04ca\u04cb\u0007\u0004\u0000\u0000\u04cb\u04cc\u0007\u0014\u0000"+ + "\u0000\u04cc\u009a\u0001\u0000\u0000\u0000\u04cd\u04ce\u0007\u000b\u0000"+ + "\u0000\u04ce\u04cf\u0007\u000e\u0000\u0000\u04cf\u04d0\u0007\u0011\u0000"+ + "\u0000\u04d0\u04d1\u0007\u0010\u0000\u0000\u04d1\u009c\u0001\u0000\u0000"+ + "\u0000\u04d2\u04d3\u0007\n\u0000\u0000\u04d3\u04d4\u0007\u0004\u0000\u0000"+ + "\u04d4\u04d5\u0007\u0005\u0000\u0000\u04d5\u009e\u0001\u0000\u0000\u0000"+ + "\u04d6\u04d7\u0007\u0013\u0000\u0000\u04d7\u04d8\u0007\u000f\u0000\u0000"+ + "\u04d8\u04d9\u0007\u0003\u0000\u0000\u04d9\u04da\u0007\u0003\u0000\u0000"+ + "\u04da\u00a0\u0001\u0000\u0000\u0000\u04db\u04dc\u0007\t\u0000\u0000\u04dc"+ + "\u04dd\u0007\u0013\u0000\u0000\u04dd\u04de\u0007\u0013\u0000\u0000\u04de"+ + "\u04df\u0007\u0006\u0000\u0000\u04df\u04e0\u0007\n\u0000\u0000\u04e0\u04e1"+ + "\u0007\u000b\u0000\u0000\u04e1\u00a2\u0001\u0000\u0000\u0000\u04e2\u04e3"+ + "\u0007\u0011\u0000\u0000\u04e3\u04e4\u0007\u0004\u0000\u0000\u04e4\u04e5"+ + "\u0007\u000b\u0000\u0000\u04e5\u04e6\u0007\n\u0000\u0000\u04e6\u04e7\u0007"+ + "\u000e\u0000\u0000\u04e7\u04e8\u0007\u0017\u0000\u0000\u04e8\u04e9\u0007"+ + "\u0002\u0000\u0000\u04e9\u04ea\u0007\u0003\u0000\u0000\u04ea\u00a4\u0001"+ + "\u0000\u0000\u0000\u04eb\u04ec\u0007\u0010\u0000\u0000\u04ec\u04ed\u0007"+ + "\u0011\u0000\u0000\u04ed\u04ee\u0007\u0007\u0000\u0000\u04ee\u04ef\u0007"+ + "\u000e\u0000\u0000\u04ef\u04f0\u0007\t\u0000\u0000\u04f0\u04f1\u0007\u0006"+ + "\u0000\u0000\u04f1\u04f2\u0007\n\u0000\u0000\u04f2\u04f3\u0007\u0007\u0000"+ + "\u0000\u04f3\u04f4\u0007\t\u0000\u0000\u04f4\u04f5\u0007\u0004\u0000\u0000"+ + "\u04f5\u04f6\u0007\u0005\u0000\u0000\u04f6\u00a6\u0001\u0000\u0000\u0000"+ + "\u04f7\u04f8\u0007\u0006\u0000\u0000\u04f8\u04f9\u0007\n\u0000\u0000\u04f9"+ + "\u04fa\u0007\u0007\u0000\u0000\u04fa\u04fb\u0007\t\u0000\u0000\u04fb\u04fc"+ + "\u0007\u0004\u0000\u0000\u04fc\u04fd\u0007\u0005\u0000\u0000\u04fd\u00a8"+ + "\u0001\u0000\u0000\u0000\u04fe\u04ff\u0007\u0010\u0000\u0000\u04ff\u0500"+ + "\u0007\u0011\u0000\u0000\u0500\u0501\u0007\u0004\u0000\u0000\u0501\u0502"+ + "\u0007\u000f\u0000\u0000\u0502\u0503\u0007\u000b\u0000\u0000\u0503\u0504"+ + "\u0007\n\u0000\u0000\u0504\u00aa\u0001\u0000\u0000\u0000\u0505\u0506\u0007"+ + "\u0016\u0000\u0000\u0506\u0507\u0007\t\u0000\u0000\u0507\u0508\u0007\u000f"+ + "\u0000\u0000\u0508\u0509\u0007\u000e\u0000\u0000\u0509\u00ac\u0001\u0000"+ + "\u0000\u0000\u050a\u050b\u0007\u0005\u0000\u0000\u050b\u050c\u0007\u0002"+ + "\u0000\u0000\u050c\u050d\u0007\r\u0000\u0000\u050d\u00ae\u0001\u0000\u0000"+ + "\u0000\u050e\u050f\u0007\f\u0000\u0000\u050f\u0510\u0007\n\u0000\u0000"+ + "\u0510\u0511\u0007\n\u0000\u0000\u0511\u0512\u0007\u0019\u0000\u0000\u0512"+ + "\u00b0\u0001\u0000\u0000\u0000\u0513\u0514\u0007\u0010\u0000\u0000\u0514"+ + "\u0515\u0007\t\u0000\u0000\u0515\u0516\u0007\u0004\u0000\u0000\u0516\u0517"+ + "\u0007\u000b\u0000\u0000\u0517\u0518\u0007\u0016\u0000\u0000\u0518\u00b2"+ + "\u0001\u0000\u0000\u0000\u0519\u051a\u0007\u001a\u0000\u0000\u051a\u051b"+ + "\u0007\u000f\u0000\u0000\u051b\u051c\u0007\u0002\u0000\u0000\u051c\u051d"+ + "\u0007\u000e\u0000\u0000\u051d\u051e\u0007\u000b\u0000\u0000\u051e\u051f"+ + "\u0007\n\u0000\u0000\u051f\u0520\u0007\u000e\u0000\u0000\u0520\u00b4\u0001"+ + "\u0000\u0000\u0000\u0521\u0522\u0007\r\u0000\u0000\u0522\u0523\u0007\n"+ + "\u0000\u0000\u0523\u0524\u0007\u0002\u0000\u0000\u0524\u0525\u0007\u000e"+ + "\u0000\u0000\u0525\u00b6\u0001\u0000\u0000\u0000\u0526\u0527\u0007\u0006"+ + "\u0000\u0000\u0527\u0528\u0007\n\u0000\u0000\u0528\u0529\u0007\u0007\u0000"+ + "\u0000\u0529\u052a\u0007\t\u0000\u0000\u052a\u052b\u0007\u0004\u0000\u0000"+ + "\u052b\u052c\u0007\u0005\u0000\u0000\u052c\u052d\u0005_\u0000\u0000\u052d"+ + "\u052e\u0007\u0010\u0000\u0000\u052e\u052f\u0007\u0011\u0000\u0000\u052f"+ + "\u0530\u0007\u0007\u0000\u0000\u0530\u0531\u0007\u000e\u0000\u0000\u0531"+ + "\u0532\u0007\t\u0000\u0000\u0532\u0533\u0007\u0006\u0000\u0000\u0533\u0534"+ + "\u0007\n\u0000\u0000\u0534\u0535\u0007\u0007\u0000\u0000\u0535\u0536\u0007"+ + "\t\u0000\u0000\u0536\u0537\u0007\u0004\u0000\u0000\u0537\u0538\u0007\u0005"+ + "\u0000\u0000\u0538\u00b8\u0001\u0000\u0000\u0000\u0539\u053a\u0007\u0010"+ + "\u0000\u0000\u053a\u053b\u0007\u0011\u0000\u0000\u053b\u053c\u0007\u0004"+ + "\u0000\u0000\u053c\u053d\u0007\u000f\u0000\u0000\u053d\u053e\u0007\u000b"+ + "\u0000\u0000\u053e\u053f\u0007\n\u0000\u0000\u053f\u0540\u0005_\u0000"+ + "\u0000\u0540\u0541\u0007\u0010\u0000\u0000\u0541\u0542\u0007\u0011\u0000"+ + "\u0000\u0542\u0543\u0007\u0007\u0000\u0000\u0543\u0544\u0007\u000e\u0000"+ + "\u0000\u0544\u0545\u0007\t\u0000\u0000\u0545\u0546\u0007\u0006\u0000\u0000"+ + "\u0546\u0547\u0007\n\u0000\u0000\u0547\u0548\u0007\u0007\u0000\u0000\u0548"+ + "\u0549\u0007\t\u0000\u0000\u0549\u054a\u0007\u0004\u0000\u0000\u054a\u054b"+ + "\u0007\u0005\u0000\u0000\u054b\u00ba\u0001\u0000\u0000\u0000\u054c\u054d"+ + "\u0007\u0010\u0000\u0000\u054d\u054e\u0007\u0011\u0000\u0000\u054e\u054f"+ + "\u0007\u0004\u0000\u0000\u054f\u0550\u0007\u000f\u0000\u0000\u0550\u0551"+ + "\u0007\u000b\u0000\u0000\u0551\u0552\u0007\n\u0000\u0000\u0552\u0553\u0005"+ + "_\u0000\u0000\u0553\u0554\u0007\u0006\u0000\u0000\u0554\u0555\u0007\n"+ + "\u0000\u0000\u0555\u0556\u0007\u0007\u0000\u0000\u0556\u0557\u0007\t\u0000"+ + "\u0000\u0557\u0558\u0007\u0004\u0000\u0000\u0558\u0559\u0007\u0005\u0000"+ + "\u0000\u0559\u00bc\u0001\u0000\u0000\u0000\u055a\u055b\u0007\u0016\u0000"+ + "\u0000\u055b\u055c\u0007\t\u0000\u0000\u055c\u055d\u0007\u000f\u0000\u0000"+ + "\u055d\u055e\u0007\u000e\u0000\u0000\u055e\u055f\u0005_\u0000\u0000\u055f"+ + "\u0560\u0007\u0010\u0000\u0000\u0560\u0561\u0007\u0011\u0000\u0000\u0561"+ + "\u0562\u0007\u0007\u0000\u0000\u0562\u0563\u0007\u000e\u0000\u0000\u0563"+ + "\u0564\u0007\t\u0000\u0000\u0564\u0565\u0007\u0006\u0000\u0000\u0565\u0566"+ + "\u0007\n\u0000\u0000\u0566\u0567\u0007\u0007\u0000\u0000\u0567\u0568\u0007"+ + "\t\u0000\u0000\u0568\u0569\u0007\u0004\u0000\u0000\u0569\u056a\u0007\u0005"+ + "\u0000\u0000\u056a\u00be\u0001\u0000\u0000\u0000\u056b\u056c\u0007\u0016"+ + "\u0000\u0000\u056c\u056d\u0007\t\u0000\u0000\u056d\u056e\u0007\u000f\u0000"+ + "\u0000\u056e\u056f\u0007\u000e\u0000\u0000\u056f\u0570\u0005_\u0000\u0000"+ + "\u0570\u0571\u0007\u0006\u0000\u0000\u0571\u0572\u0007\n\u0000\u0000\u0572"+ + "\u0573\u0007\u0007\u0000\u0000\u0573\u0574\u0007\t\u0000\u0000\u0574\u0575"+ + "\u0007\u0004\u0000\u0000\u0575\u0576\u0007\u0005\u0000\u0000\u0576\u00c0"+ + "\u0001\u0000\u0000\u0000\u0577\u0578\u0007\u0016\u0000\u0000\u0578\u0579"+ + "\u0007\t\u0000\u0000\u0579\u057a\u0007\u000f\u0000\u0000\u057a\u057b\u0007"+ + "\u000e\u0000\u0000\u057b\u057c\u0005_\u0000\u0000\u057c\u057d\u0007\u0010"+ + "\u0000\u0000\u057d\u057e\u0007\u0011\u0000\u0000\u057e\u057f\u0007\u0004"+ + "\u0000\u0000\u057f\u0580\u0007\u000f\u0000\u0000\u0580\u0581\u0007\u000b"+ + "\u0000\u0000\u0581\u0582\u0007\n\u0000\u0000\u0582\u00c2\u0001\u0000\u0000"+ + "\u0000\u0583\u0584\u0007\u0005\u0000\u0000\u0584\u0585\u0007\u0002\u0000"+ + "\u0000\u0585\u0586\u0007\r\u0000\u0000\u0586\u0587\u0005_\u0000\u0000"+ + "\u0587\u0588\u0007\u0010\u0000\u0000\u0588\u0589\u0007\u0011\u0000\u0000"+ + "\u0589\u058a\u0007\u0007\u0000\u0000\u058a\u058b\u0007\u000e\u0000\u0000"+ + "\u058b\u058c\u0007\t\u0000\u0000\u058c\u058d\u0007\u0006\u0000\u0000\u058d"+ + "\u058e\u0007\n\u0000\u0000\u058e\u058f\u0007\u0007\u0000\u0000\u058f\u0590"+ + "\u0007\t\u0000\u0000\u0590\u0591\u0007\u0004\u0000\u0000\u0591\u0592\u0007"+ + "\u0005\u0000\u0000\u0592\u00c4\u0001\u0000\u0000\u0000\u0593\u0594\u0007"+ + "\u0005\u0000\u0000\u0594\u0595\u0007\u0002\u0000\u0000\u0595\u0596\u0007"+ + "\r\u0000\u0000\u0596\u0597\u0005_\u0000\u0000\u0597\u0598\u0007\u0006"+ + "\u0000\u0000\u0598\u0599\u0007\n\u0000\u0000\u0599\u059a\u0007\u0007\u0000"+ + "\u0000\u059a\u059b\u0007\t\u0000\u0000\u059b\u059c\u0007\u0004\u0000\u0000"+ + "\u059c\u059d\u0007\u0005\u0000\u0000\u059d\u00c6\u0001\u0000\u0000\u0000"+ + "\u059e\u059f\u0007\u0005\u0000\u0000\u059f\u05a0\u0007\u0002\u0000\u0000"+ + "\u05a0\u05a1\u0007\r\u0000\u0000\u05a1\u05a2\u0005_\u0000\u0000\u05a2"+ + "\u05a3\u0007\u0010\u0000\u0000\u05a3\u05a4\u0007\u0011\u0000\u0000\u05a4"+ + "\u05a5\u0007\u0004\u0000\u0000\u05a5\u05a6\u0007\u000f\u0000\u0000\u05a6"+ + "\u05a7\u0007\u000b\u0000\u0000\u05a7\u05a8\u0007\n\u0000\u0000\u05a8\u00c8"+ + "\u0001\u0000\u0000\u0000\u05a9\u05aa\u0007\u0005\u0000\u0000\u05aa\u05ab"+ + "\u0007\u0002\u0000\u0000\u05ab\u05ac\u0007\r\u0000\u0000\u05ac\u05ad\u0005"+ + "_\u0000\u0000\u05ad\u05ae\u0007\u0016\u0000\u0000\u05ae\u05af\u0007\t"+ + "\u0000\u0000\u05af\u05b0\u0007\u000f\u0000\u0000\u05b0\u05b1\u0007\u000e"+ + "\u0000\u0000\u05b1\u00ca\u0001\u0000\u0000\u0000\u05b2\u05b3\u0007\r\u0000"+ + "\u0000\u05b3\u05b4\u0007\n\u0000\u0000\u05b4\u05b5\u0007\u0002\u0000\u0000"+ + "\u05b5\u05b6\u0007\u000e\u0000\u0000\u05b6\u05b7\u0005_\u0000\u0000\u05b7"+ + "\u05b8\u0007\u0010\u0000\u0000\u05b8\u05b9\u0007\t\u0000\u0000\u05b9\u05ba"+ + "\u0007\u0004\u0000\u0000\u05ba\u05bb\u0007\u000b\u0000\u0000\u05bb\u05bc"+ + "\u0007\u0016\u0000\u0000\u05bc\u00cc\u0001\u0000\u0000\u0000\u05bd\u05be"+ + "\u0007\u000b\u0000\u0000\u05be\u05bf\u0007\u0002\u0000\u0000\u05bf\u05c0"+ + "\u0007\b\u0000\u0000\u05c0\u05c1\u0007\u0003\u0000\u0000\u05c1\u05c2\u0007"+ + "\n\u0000\u0000\u05c2\u05c3\u0007\u0006\u0000\u0000\u05c3\u00ce\u0001\u0000"+ + "\u0000\u0000\u05c4\u05c5\u0007\u0002\u0000\u0000\u05c5\u05c6\u0007\b\u0000"+ + "\u0000\u05c6\u05c7\u0007\u0006\u0000\u0000\u05c7\u00d0\u0001\u0000\u0000"+ + "\u0000\u05c8\u05c9\u0007\u0002\u0000\u0000\u05c9\u05ca\u0007\u0007\u0000"+ + "\u0000\u05ca\u05cb\u0007\t\u0000\u0000\u05cb\u05cc\u0007\u0006\u0000\u0000"+ + "\u05cc\u00d2\u0001\u0000\u0000\u0000\u05cd\u05ce\u0007\u0002\u0000\u0000"+ + "\u05ce\u05cf\u0007\u0005\u0000\u0000\u05cf\u05d0\u0007\u0005\u0000\u0000"+ + "\u05d0\u00d4\u0001\u0000\u0000\u0000\u05d1\u05d2\u0007\u0002\u0000\u0000"+ + "\u05d2\u05d3\u0007\u0005\u0000\u0000\u05d3\u05d4\u0007\u0005\u0000\u0000"+ + "\u05d4\u05d5\u0007\u000b\u0000\u0000\u05d5\u05d6\u0007\u0011\u0000\u0000"+ + "\u05d6\u05d7\u0007\u0010\u0000\u0000\u05d7\u05d8\u0007\n\u0000\u0000\u05d8"+ + "\u00d6\u0001\u0000\u0000\u0000\u05d9\u05da\u0007\u0002\u0000\u0000\u05da"+ + "\u05db\u0007\u0006\u0000\u0000\u05db\u05dc\u0007\u0007\u0000\u0000\u05dc"+ + "\u05dd\u0007\u0011\u0000\u0000\u05dd\u05de\u0007\u0011\u0000\u0000\u05de"+ + "\u00d8\u0001\u0000\u0000\u0000\u05df\u05e0\u0007\u0002\u0000\u0000\u05e0"+ + "\u05e1\u0007\u0006\u0000\u0000\u05e1\u05e2\u0007\u0011\u0000\u0000\u05e2"+ + "\u05e3\u0007\u0004\u0000\u0000\u05e3\u00da\u0001\u0000\u0000\u0000\u05e4"+ + "\u05e5\u0007\u0002\u0000\u0000\u05e5\u05e6\u0007\u000b\u0000\u0000\u05e6"+ + "\u05e7\u0007\u0002\u0000\u0000\u05e7\u05e8\u0007\u0004\u0000\u0000\u05e8"+ + "\u00dc\u0001\u0000\u0000\u0000\u05e9\u05ea\u0007\u0002\u0000\u0000\u05ea"+ + "\u05eb\u0007\u000b\u0000\u0000\u05eb\u05ec\u0007\u0002\u0000\u0000\u05ec"+ + "\u05ed\u0007\u0004\u0000\u0000\u05ed\u05ee\u00052\u0000\u0000\u05ee\u00de"+ + "\u0001\u0000\u0000\u0000\u05ef\u05f0\u0007\u0007\u0000\u0000\u05f0\u05f1"+ + "\u0007\b\u0000\u0000\u05f1\u05f2\u0007\u000e\u0000\u0000\u05f2\u05f3\u0007"+ + "\u000b\u0000\u0000\u05f3\u00e0\u0001\u0000\u0000\u0000\u05f4\u05f5\u0007"+ + "\u0007\u0000\u0000\u05f5\u05f6\u0007\n\u0000\u0000\u05f6\u05f7\u0007\u0011"+ + "\u0000\u0000\u05f7\u05f8\u0007\u0003\u0000\u0000\u05f8\u00e2\u0001\u0000"+ + "\u0000\u0000\u05f9\u05fa\u0007\u0007\u0000\u0000\u05fa\u05fb\u0007\n\u0000"+ + "\u0000\u05fb\u05fc\u0007\u0011\u0000\u0000\u05fc\u05fd\u0007\u0003\u0000"+ + "\u0000\u05fd\u05fe\u0007\u0011\u0000\u0000\u05fe\u05ff\u0007\u0004\u0000"+ + "\u0000\u05ff\u0600\u0007\u0014\u0000\u0000\u0600\u00e4\u0001\u0000\u0000"+ + "\u0000\u0601\u0602\u0007\u0007\u0000\u0000\u0602\u0603\u0007\t\u0000\u0000"+ + "\u0603\u0604\u0007\u0004\u0000\u0000\u0604\u0605\u0007\u0007\u0000\u0000"+ + "\u0605\u0606\u0007\u0002\u0000\u0000\u0606\u0607\u0007\u000b\u0000\u0000"+ + "\u0607\u00e6\u0001\u0000\u0000\u0000\u0608\u0609\u0007\u0007\u0000\u0000"+ + "\u0609\u060a\u0007\t\u0000\u0000\u060a\u060b\u0007\u0004\u0000\u0000\u060b"+ + "\u060c\u0007\u0007\u0000\u0000\u060c\u060d\u0007\u0002\u0000\u0000\u060d"+ + "\u060e\u0007\u000b\u0000\u0000\u060e\u060f\u0005_\u0000\u0000\u060f\u0610"+ + "\u0007\f\u0000\u0000\u0610\u0611\u0007\u0006\u0000\u0000\u0611\u00e8\u0001"+ + "\u0000\u0000\u0000\u0612\u0613\u0007\u0007\u0000\u0000\u0613\u0614\u0007"+ + "\t\u0000\u0000\u0614\u0615\u0007\u0004\u0000\u0000\u0615\u0616\u0007\u0017"+ + "\u0000\u0000\u0616\u00ea\u0001\u0000\u0000\u0000\u0617\u0618\u0007\u0007"+ + "\u0000\u0000\u0618\u0619\u0007\t\u0000\u0000\u0619\u061a\u0007\u0004\u0000"+ + "\u0000\u061a\u061b\u0007\u0017\u0000\u0000\u061b\u061c\u0007\n\u0000\u0000"+ + "\u061c\u061d\u0007\u000e\u0000\u0000\u061d\u061e\u0007\u000b\u0000\u0000"+ + "\u061e\u061f\u0005_\u0000\u0000\u061f\u0620\u0007\u000b\u0000\u0000\u0620"+ + "\u0621\u0007\u001b\u0000\u0000\u0621\u00ec\u0001\u0000\u0000\u0000\u0622"+ + "\u0623\u0007\u0007\u0000\u0000\u0623\u0624\u0007\t\u0000\u0000\u0624\u0625"+ + "\u0007\u0006\u0000\u0000\u0625\u00ee\u0001\u0000\u0000\u0000\u0626\u0627"+ + "\u0007\u0007\u0000\u0000\u0627\u0628\u0007\t\u0000\u0000\u0628\u0629\u0007"+ + "\u0006\u0000\u0000\u0629\u062a\u0007\u0016\u0000\u0000\u062a\u00f0\u0001"+ + "\u0000\u0000\u0000\u062b\u062c\u0007\u0007\u0000\u0000\u062c\u062d\u0007"+ + "\t\u0000\u0000\u062d\u062e\u0007\u000b\u0000\u0000\u062e\u00f2\u0001\u0000"+ + "\u0000\u0000\u062f\u0630\u0007\u0007\u0000\u0000\u0630\u0631\u0007\u000e"+ + "\u0000\u0000\u0631\u0632\u0007\u0007\u0000\u0000\u0632\u0633\u00053\u0000"+ + "\u0000\u0633\u0634\u00052\u0000\u0000\u0634\u00f4\u0001\u0000\u0000\u0000"+ + "\u0635\u0636\u0007\u0007\u0000\u0000\u0636\u0637\u0007\u000f\u0000\u0000"+ + "\u0637\u0638\u0007\u000e\u0000\u0000\u0638\u0639\u0007\u0005\u0000\u0000"+ + "\u0639\u063a\u0007\u0002\u0000\u0000\u063a\u063b\u0007\u000b\u0000\u0000"+ + "\u063b\u063c\u0007\n\u0000\u0000\u063c\u00f6\u0001\u0000\u0000\u0000\u063d"+ + "\u063e\u0007\u0007\u0000\u0000\u063e\u063f\u0007\u000f\u0000\u0000\u063f"+ + "\u0640\u0007\u000e\u0000\u0000\u0640\u0641\u0007\u000b\u0000\u0000\u0641"+ + "\u0642\u0007\u0011\u0000\u0000\u0642\u0643\u0007\u0010\u0000\u0000\u0643"+ + "\u0644\u0007\n\u0000\u0000\u0644\u00f8\u0001\u0000\u0000\u0000\u0645\u0646"+ + "\u0007\u0007\u0000\u0000\u0646\u0647\u0007\u000f\u0000\u0000\u0647\u0648"+ + "\u0007\u000e\u0000\u0000\u0648\u0649\u0007\u000e\u0000\u0000\u0649\u064a"+ + "\u0007\n\u0000\u0000\u064a\u064b\u0007\u0004\u0000\u0000\u064b\u064c\u0007"+ + "\u000b\u0000\u0000\u064c\u064d\u0005_\u0000\u0000\u064d\u064e\u0007\u0005"+ + "\u0000\u0000\u064e\u064f\u0007\u0002\u0000\u0000\u064f\u0650\u0007\u000b"+ + "\u0000\u0000\u0650\u0651\u0007\n\u0000\u0000\u0651\u00fa\u0001\u0000\u0000"+ + "\u0000\u0652\u0653\u0007\u0007\u0000\u0000\u0653\u0654\u0007\u000f\u0000"+ + "\u0000\u0654\u0655\u0007\u000e\u0000\u0000\u0655\u0656\u0007\u000e\u0000"+ + "\u0000\u0656\u0657\u0007\n\u0000\u0000\u0657\u0658\u0007\u0004\u0000\u0000"+ + "\u0658\u0659\u0007\u000b\u0000\u0000\u0659\u065a\u0005_\u0000\u0000\u065a"+ + "\u065b\u0007\u000b\u0000\u0000\u065b\u065c\u0007\u0011\u0000\u0000\u065c"+ + "\u065d\u0007\u0010\u0000\u0000\u065d\u065e\u0007\n\u0000\u0000\u065e\u00fc"+ + "\u0001\u0000\u0000\u0000\u065f\u0660\u0007\u0007\u0000\u0000\u0660\u0661"+ + "\u0007\u000f\u0000\u0000\u0661\u0662\u0007\u000e\u0000\u0000\u0662\u0663"+ + "\u0007\u000e\u0000\u0000\u0663\u0664\u0007\n\u0000\u0000\u0664\u0665\u0007"+ + "\u0004\u0000\u0000\u0665\u0666\u0007\u000b\u0000\u0000\u0666\u0667\u0005"+ + "_\u0000\u0000\u0667\u0668\u0007\u000b\u0000\u0000\u0668\u0669\u0007\u0011"+ + "\u0000\u0000\u0669\u066a\u0007\u0010\u0000\u0000\u066a\u066b\u0007\n\u0000"+ + "\u0000\u066b\u066c\u0007\u0006\u0000\u0000\u066c\u066d\u0007\u000b\u0000"+ + "\u0000\u066d\u066e\u0007\u0002\u0000\u0000\u066e\u066f\u0007\u0010\u0000"+ + "\u0000\u066f\u0670\u0007\u0015\u0000\u0000\u0670\u00fe\u0001\u0000\u0000"+ + "\u0000\u0671\u0672\u0007\u0005\u0000\u0000\u0672\u0673\u0007\u0002\u0000"+ + "\u0000\u0673\u0674\u0007\u000b\u0000\u0000\u0674\u0675\u0007\n\u0000\u0000"+ + "\u0675\u0100\u0001\u0000\u0000\u0000\u0676\u0677\u0007\u0005\u0000\u0000"+ + "\u0677\u0678\u0007\u0002\u0000\u0000\u0678\u0679\u0007\u000b\u0000\u0000"+ + "\u0679\u067a\u0007\n\u0000\u0000\u067a\u067b\u0005_\u0000\u0000\u067b"+ + "\u067c\u0007\u0002\u0000\u0000\u067c\u067d\u0007\u0005\u0000\u0000\u067d"+ + "\u067e\u0007\u0005\u0000\u0000\u067e\u0102\u0001\u0000\u0000\u0000\u067f"+ + "\u0680\u0007\u0005\u0000\u0000\u0680\u0681\u0007\u0002\u0000\u0000\u0681"+ + "\u0682\u0007\u000b\u0000\u0000\u0682\u0683\u0007\n\u0000\u0000\u0683\u0684"+ + "\u0005_\u0000\u0000\u0684\u0685\u0007\u0013\u0000\u0000\u0685\u0686\u0007"+ + "\t\u0000\u0000\u0686\u0687\u0007\u000e\u0000\u0000\u0687\u0688\u0007\u0010"+ + "\u0000\u0000\u0688\u0689\u0007\u0002\u0000\u0000\u0689\u068a\u0007\u000b"+ + "\u0000\u0000\u068a\u0104\u0001\u0000\u0000\u0000\u068b\u068c\u0007\u0005"+ + "\u0000\u0000\u068c\u068d\u0007\u0002\u0000\u0000\u068d\u068e\u0007\u000b"+ + "\u0000\u0000\u068e\u068f\u0007\n\u0000\u0000\u068f\u0690\u0005_\u0000"+ + "\u0000\u0690\u0691\u0007\u0006\u0000\u0000\u0691\u0692\u0007\u000f\u0000"+ + "\u0000\u0692\u0693\u0007\b\u0000\u0000\u0693\u0106\u0001\u0000\u0000\u0000"+ + "\u0694\u0695\u0007\u0005\u0000\u0000\u0695\u0696\u0007\u0002\u0000\u0000"+ + "\u0696\u0697\u0007\u000b\u0000\u0000\u0697\u0698\u0007\n\u0000\u0000\u0698"+ + "\u0699\u0007\u0005\u0000\u0000\u0699\u069a\u0007\u0011\u0000\u0000\u069a"+ + "\u069b\u0007\u0013\u0000\u0000\u069b\u069c\u0007\u0013\u0000\u0000\u069c"+ + "\u0108\u0001\u0000\u0000\u0000\u069d\u069e\u0007\u0005\u0000\u0000\u069e"+ + "\u069f\u0007\u0002\u0000\u0000\u069f\u06a0\u0007\r\u0000\u0000\u06a0\u06a1"+ + "\u0007\u0004\u0000\u0000\u06a1\u06a2\u0007\u0002\u0000\u0000\u06a2\u06a3"+ + "\u0007\u0010\u0000\u0000\u06a3\u06a4\u0007\n\u0000\u0000\u06a4\u010a\u0001"+ + "\u0000\u0000\u0000\u06a5\u06a6\u0007\u0005\u0000\u0000\u06a6\u06a7\u0007"+ + "\u0002\u0000\u0000\u06a7\u06a8\u0007\r\u0000\u0000\u06a8\u06a9\u0007\t"+ + "\u0000\u0000\u06a9\u06aa\u0007\u0013\u0000\u0000\u06aa\u06ab\u0007\u0010"+ + "\u0000\u0000\u06ab\u06ac\u0007\t\u0000\u0000\u06ac\u06ad\u0007\u0004\u0000"+ + "\u0000\u06ad\u06ae\u0007\u000b\u0000\u0000\u06ae\u06af\u0007\u0016\u0000"+ + "\u0000\u06af\u010c\u0001\u0000\u0000\u0000\u06b0\u06b1\u0007\u0005\u0000"+ + "\u0000\u06b1\u06b2\u0007\u0002\u0000\u0000\u06b2\u06b3\u0007\r\u0000\u0000"+ + "\u06b3\u06b4\u0007\t\u0000\u0000\u06b4\u06b5\u0007\u0013\u0000\u0000\u06b5"+ + "\u06b6\u0007\f\u0000\u0000\u06b6\u06b7\u0007\n\u0000\u0000\u06b7\u06b8"+ + "\u0007\n\u0000\u0000\u06b8\u06b9\u0007\u0019\u0000\u0000\u06b9\u010e\u0001"+ + "\u0000\u0000\u0000\u06ba\u06bb\u0007\u0005\u0000\u0000\u06bb\u06bc\u0007"+ + "\u0002\u0000\u0000\u06bc\u06bd\u0007\r\u0000\u0000\u06bd\u06be\u0007\t"+ + "\u0000\u0000\u06be\u06bf\u0007\u0013\u0000\u0000\u06bf\u06c0\u0007\r\u0000"+ + "\u0000\u06c0\u06c1\u0007\n\u0000\u0000\u06c1\u06c2\u0007\u0002\u0000\u0000"+ + "\u06c2\u06c3\u0007\u000e\u0000\u0000\u06c3\u0110\u0001\u0000\u0000\u0000"+ + "\u06c4\u06c5\u0007\u0005\u0000\u0000\u06c5\u06c6\u0007\n\u0000\u0000\u06c6"+ + "\u06c7\u0007\u0014\u0000\u0000\u06c7\u06c8\u0007\u000e\u0000\u0000\u06c8"+ + "\u06c9\u0007\n\u0000\u0000\u06c9\u06ca\u0007\n\u0000\u0000\u06ca\u06cb"+ + "\u0007\u0006\u0000\u0000\u06cb\u0112\u0001\u0000\u0000\u0000\u06cc\u06cd"+ + "\u0007\u0005\u0000\u0000\u06cd\u06ce\u0007\u0011\u0000\u0000\u06ce\u06cf"+ + "\u0007\u0017\u0000\u0000\u06cf\u06d0\u0007\u0011\u0000\u0000\u06d0\u06d1"+ + "\u0007\u0005\u0000\u0000\u06d1\u06d2\u0007\n\u0000\u0000\u06d2\u0114\u0001"+ + "\u0000\u0000\u0000\u06d3\u06d4\u0007\n\u0000\u0000\u06d4\u0116\u0001\u0000"+ + "\u0000\u0000\u06d5\u06d6\u0007\n\u0000\u0000\u06d6\u06d7\u0007\u0012\u0000"+ + "\u0000\u06d7\u06d8\u0007\u0015\u0000\u0000\u06d8\u0118\u0001\u0000\u0000"+ + "\u0000\u06d9\u06da\u0007\n\u0000\u0000\u06da\u06db\u0007\u0012\u0000\u0000"+ + "\u06db\u06dc\u0007\u0015\u0000\u0000\u06dc\u06dd\u0007\u0010\u0000\u0000"+ + "\u06dd\u06de\u00051\u0000\u0000\u06de\u011a\u0001\u0000\u0000\u0000\u06df"+ + "\u06e0\u0007\n\u0000\u0000\u06e0\u06e1\u0007\u0012\u0000\u0000\u06e1\u06e2"+ + "\u0007\u000b\u0000\u0000\u06e2\u06e3\u0007\u000e\u0000\u0000\u06e3\u06e4"+ + "\u0007\u0002\u0000\u0000\u06e4\u06e5\u0007\u0007\u0000\u0000\u06e5\u06e6"+ + "\u0007\u000b\u0000\u0000\u06e6\u011c\u0001\u0000\u0000\u0000\u06e7\u06e8"+ + "\u0007\u0013\u0000\u0000\u06e8\u06e9\u0007\u0003\u0000\u0000\u06e9\u06ea"+ + "\u0007\t\u0000\u0000\u06ea\u06eb\u0007\t\u0000\u0000\u06eb\u06ec\u0007"+ + "\u000e\u0000\u0000\u06ec\u011e\u0001\u0000\u0000\u0000\u06ed\u06ee\u0007"+ + "\u0013\u0000\u0000\u06ee\u06ef\u0007\u000e\u0000\u0000\u06ef\u06f0\u0007"+ + "\t\u0000\u0000\u06f0\u06f1\u0007\u0010\u0000\u0000\u06f1\u06f2\u0005_"+ + "\u0000\u0000\u06f2\u06f3\u0007\u0005\u0000\u0000\u06f3\u06f4\u0007\u0002"+ + "\u0000\u0000\u06f4\u06f5\u0007\r\u0000\u0000\u06f5\u06f6\u0007\u0006\u0000"+ + "\u0000\u06f6\u0120\u0001\u0000\u0000\u0000\u06f7\u06f8\u0007\u0013\u0000"+ + "\u0000\u06f8\u06f9\u0007\u000e\u0000\u0000\u06f9\u06fa\u0007\t\u0000\u0000"+ + "\u06fa\u06fb\u0007\u0010\u0000\u0000\u06fb\u06fc\u0005_\u0000\u0000\u06fc"+ + "\u06fd\u0007\u000f\u0000\u0000\u06fd\u06fe\u0007\u0004\u0000\u0000\u06fe"+ + "\u06ff\u0007\u0011\u0000\u0000\u06ff\u0700\u0007\u0012\u0000\u0000\u0700"+ + "\u0701\u0007\u000b\u0000\u0000\u0701\u0702\u0007\u0011\u0000\u0000\u0702"+ + "\u0703\u0007\u0010\u0000\u0000\u0703\u0704\u0007\n\u0000\u0000\u0704\u0122"+ + "\u0001\u0000\u0000\u0000\u0705\u0706\u0007\u0014\u0000\u0000\u0706\u0707"+ + "\u0007\n\u0000\u0000\u0707\u0708\u0007\u000b\u0000\u0000\u0708\u0709\u0005"+ + "_\u0000\u0000\u0709\u070a\u0007\u0013\u0000\u0000\u070a\u070b\u0007\t"+ + "\u0000\u0000\u070b\u070c\u0007\u000e\u0000\u0000\u070c\u070d\u0007\u0010"+ + "\u0000\u0000\u070d\u070e\u0007\u0002\u0000\u0000\u070e\u070f\u0007\u000b"+ + "\u0000\u0000\u070f\u0124\u0001\u0000\u0000\u0000\u0710\u0711\u0007\u0011"+ + "\u0000\u0000\u0711\u0712\u0007\u0013\u0000\u0000\u0712\u0126\u0001\u0000"+ + "\u0000\u0000\u0713\u0714\u0007\u0011\u0000\u0000\u0714\u0715\u0007\u0013"+ + "\u0000\u0000\u0715\u0716\u0007\u0004\u0000\u0000\u0716\u0717\u0007\u000f"+ + "\u0000\u0000\u0717\u0718\u0007\u0003\u0000\u0000\u0718\u0719\u0007\u0003"+ + "\u0000\u0000\u0719\u0128\u0001\u0000\u0000\u0000\u071a\u071b\u0007\u0011"+ + "\u0000\u0000\u071b\u071c\u0007\u0006\u0000\u0000\u071c\u071d\u0007\u0004"+ + "\u0000\u0000\u071d\u071e\u0007\u000f\u0000\u0000\u071e\u071f\u0007\u0003"+ + "\u0000\u0000\u071f\u0720\u0007\u0003\u0000\u0000\u0720\u012a\u0001\u0000"+ + "\u0000\u0000\u0721\u0722\u0007\u0003\u0000\u0000\u0722\u0723\u0007\u0002"+ + "\u0000\u0000\u0723\u0724\u0007\u0006\u0000\u0000\u0724\u0725\u0007\u000b"+ + "\u0000\u0000\u0725\u0726\u0005_\u0000\u0000\u0726\u0727\u0007\u0005\u0000"+ + "\u0000\u0727\u0728\u0007\u0002\u0000\u0000\u0728\u0729\u0007\r\u0000\u0000"+ + "\u0729\u012c\u0001\u0000\u0000\u0000\u072a\u072b\u0007\u0003\u0000\u0000"+ + "\u072b\u072c\u0007\n\u0000\u0000\u072c\u072d\u0007\u0004\u0000\u0000\u072d"+ + "\u072e\u0007\u0014\u0000\u0000\u072e\u072f\u0007\u000b\u0000\u0000\u072f"+ + "\u0730\u0007\u0016\u0000\u0000\u0730\u012e\u0001\u0000\u0000\u0000\u0731"+ + "\u0732\u0007\u0003\u0000\u0000\u0732\u0733\u0007\u0004\u0000\u0000\u0733"+ + "\u0130\u0001\u0000\u0000\u0000\u0734\u0735\u0007\u0003\u0000\u0000\u0735"+ + "\u0736\u0007\t\u0000\u0000\u0736\u0737\u0007\u0007\u0000\u0000\u0737\u0738"+ + "\u0007\u0002\u0000\u0000\u0738\u0739\u0007\u0003\u0000\u0000\u0739\u073a"+ + "\u0007\u000b\u0000\u0000\u073a\u073b\u0007\u0011\u0000\u0000\u073b\u073c"+ + "\u0007\u0010\u0000\u0000\u073c\u073d\u0007\n\u0000\u0000\u073d\u0132\u0001"+ + "\u0000\u0000\u0000\u073e\u073f\u0007\u0003\u0000\u0000\u073f\u0740\u0007"+ + "\t\u0000\u0000\u0740\u0741\u0007\u0007\u0000\u0000\u0741\u0742\u0007\u0002"+ + "\u0000\u0000\u0742\u0743\u0007\u0003\u0000\u0000\u0743\u0744\u0007\u000b"+ + "\u0000\u0000\u0744\u0745\u0007\u0011\u0000\u0000\u0745\u0746\u0007\u0010"+ + "\u0000\u0000\u0746\u0747\u0007\n\u0000\u0000\u0747\u0748\u0007\u0006\u0000"+ + "\u0000\u0748\u0749\u0007\u000b\u0000\u0000\u0749\u074a\u0007\u0002\u0000"+ + "\u0000\u074a\u074b\u0007\u0010\u0000\u0000\u074b\u074c\u0007\u0015\u0000"+ + "\u0000\u074c\u0134\u0001\u0000\u0000\u0000\u074d\u074e\u0007\u0003\u0000"+ + "\u0000\u074e\u074f\u0007\t\u0000\u0000\u074f\u0750\u0007\u0007\u0000\u0000"+ + "\u0750\u0751\u0007\u0002\u0000\u0000\u0751\u0752\u0007\u000b\u0000\u0000"+ + "\u0752\u0753\u0007\n\u0000\u0000\u0753\u0136\u0001\u0000\u0000\u0000\u0754"+ + "\u0755\u0007\u0003\u0000\u0000\u0755\u0756\u0007\t\u0000\u0000\u0756\u0757"+ + "\u0007\u0014\u0000\u0000\u0757\u0138\u0001\u0000\u0000\u0000\u0758\u0759"+ + "\u0007\u0003\u0000\u0000\u0759\u075a\u0007\t\u0000\u0000\u075a\u075b\u0007"+ + "\u0014\u0000\u0000\u075b\u075c\u00051\u0000\u0000\u075c\u075d\u00050\u0000"+ + "\u0000\u075d\u013a\u0001\u0000\u0000\u0000\u075e\u075f\u0007\u0003\u0000"+ + "\u0000\u075f\u0760\u0007\t\u0000\u0000\u0760\u0761\u0007\u0014\u0000\u0000"+ + "\u0761\u0762\u00052\u0000\u0000\u0762\u013c\u0001\u0000\u0000\u0000\u0763"+ + "\u0764\u0007\u0003\u0000\u0000\u0764\u0765\u0007\t\u0000\u0000\u0765\u0766"+ + "\u0007\f\u0000\u0000\u0766\u0767\u0007\n\u0000\u0000\u0767\u0768\u0007"+ + "\u000e\u0000\u0000\u0768\u013e\u0001\u0000\u0000\u0000\u0769\u076a\u0007"+ + "\u0003\u0000\u0000\u076a\u076b\u0007\u000b\u0000\u0000\u076b\u076c\u0007"+ + "\u000e\u0000\u0000\u076c\u076d\u0007\u0011\u0000\u0000\u076d\u076e\u0007"+ + "\u0010\u0000\u0000\u076e\u0140\u0001\u0000\u0000\u0000\u076f\u0770\u0007"+ + "\u0010\u0000\u0000\u0770\u0771\u0007\u0002\u0000\u0000\u0771\u0772\u0007"+ + "\u0019\u0000\u0000\u0772\u0773\u0007\n\u0000\u0000\u0773\u0774\u0007\u0005"+ + "\u0000\u0000\u0774\u0775\u0007\u0002\u0000\u0000\u0775\u0776\u0007\u000b"+ + "\u0000\u0000\u0776\u0777\u0007\n\u0000\u0000\u0777\u0142\u0001\u0000\u0000"+ + "\u0000\u0778\u0779\u0007\u0010\u0000\u0000\u0779\u077a\u0007\u0002\u0000"+ + "\u0000\u077a\u077b\u0007\u0019\u0000\u0000\u077b\u077c\u0007\n\u0000\u0000"+ + "\u077c\u077d\u0007\u000b\u0000\u0000\u077d\u077e\u0007\u0011\u0000\u0000"+ + "\u077e\u077f\u0007\u0010\u0000\u0000\u077f\u0780\u0007\n\u0000\u0000\u0780"+ + "\u0144\u0001\u0000\u0000\u0000\u0781\u0782\u0007\u0010\u0000\u0000\u0782"+ + "\u0783\u0007\t\u0000\u0000\u0783\u0784\u0007\u0005\u0000\u0000\u0784\u0785"+ + "\u0007\u000f\u0000\u0000\u0785\u0786\u0007\u0003\u0000\u0000\u0786\u0787"+ + "\u0007\u000f\u0000\u0000\u0787\u0788\u0007\u0006\u0000\u0000\u0788\u0146"+ + "\u0001\u0000\u0000\u0000\u0789\u078a\u0007\u0010\u0000\u0000\u078a\u078b"+ + "\u0007\t\u0000\u0000\u078b\u078c\u0007\u0004\u0000\u0000\u078c\u078d\u0007"+ + "\u000b\u0000\u0000\u078d\u078e\u0007\u0016\u0000\u0000\u078e\u078f\u0007"+ + "\u0004\u0000\u0000\u078f\u0790\u0007\u0002\u0000\u0000\u0790\u0791\u0007"+ + "\u0010\u0000\u0000\u0791\u0792\u0007\n\u0000\u0000\u0792\u0148\u0001\u0000"+ + "\u0000\u0000\u0793\u0794\u0007\u0010\u0000\u0000\u0794\u0795\u0007\u000f"+ + "\u0000\u0000\u0795\u0796\u0007\u0003\u0000\u0000\u0796\u0797\u0007\u000b"+ + "\u0000\u0000\u0797\u0798\u0007\u0011\u0000\u0000\u0798\u0799\u0007\u0015"+ + "\u0000\u0000\u0799\u079a\u0007\u0003\u0000\u0000\u079a\u079b\u0007\r\u0000"+ + "\u0000\u079b\u014a\u0001\u0000\u0000\u0000\u079c\u079d\u0007\u0004\u0000"+ + "\u0000\u079d\u079e\u0007\t\u0000\u0000\u079e\u079f\u0007\f\u0000\u0000"+ + "\u079f\u014c\u0001\u0000\u0000\u0000\u07a0\u07a1\u0007\u0004\u0000\u0000"+ + "\u07a1\u07a2\u0007\u000f\u0000\u0000\u07a2\u07a3\u0007\u0003\u0000\u0000"+ + "\u07a3\u07a4\u0007\u0003\u0000\u0000\u07a4\u07a5\u0007\u0011\u0000\u0000"+ + "\u07a5\u07a6\u0007\u0013\u0000\u0000\u07a6\u014e\u0001\u0000\u0000\u0000"+ + "\u07a7\u07a8\u0007\u0015\u0000\u0000\u07a8\u07a9\u0007\n\u0000\u0000\u07a9"+ + "\u07aa\u0007\u000e\u0000\u0000\u07aa\u07ab\u0007\u0011\u0000\u0000\u07ab"+ + "\u07ac\u0007\t\u0000\u0000\u07ac\u07ad\u0007\u0005\u0000\u0000\u07ad\u07ae"+ + "\u0005_\u0000\u0000\u07ae\u07af\u0007\u0002\u0000\u0000\u07af\u07b0\u0007"+ + "\u0005\u0000\u0000\u07b0\u07b1\u0007\u0005\u0000\u0000\u07b1\u0150\u0001"+ + "\u0000\u0000\u0000\u07b2\u07b3\u0007\u0015\u0000\u0000\u07b3\u07b4\u0007"+ + "\n\u0000\u0000\u07b4\u07b5\u0007\u000e\u0000\u0000\u07b5\u07b6\u0007\u0011"+ + "\u0000\u0000\u07b6\u07b7\u0007\t\u0000\u0000\u07b7\u07b8\u0007\u0005\u0000"+ + "\u0000\u07b8\u07b9\u0005_\u0000\u0000\u07b9\u07ba\u0007\u0005\u0000\u0000"+ + "\u07ba\u07bb\u0007\u0011\u0000\u0000\u07bb\u07bc\u0007\u0013\u0000\u0000"+ + "\u07bc\u07bd\u0007\u0013\u0000\u0000\u07bd\u0152\u0001\u0000\u0000\u0000"+ + "\u07be\u07bf\u0007\u0015\u0000\u0000\u07bf\u07c0\u0007\u0011\u0000\u0000"+ + "\u07c0\u0154\u0001\u0000\u0000\u0000\u07c1\u07c2\u0007\u0015\u0000\u0000"+ + "\u07c2\u07c3\u0007\t\u0000\u0000\u07c3\u07c4\u0007\u0006\u0000\u0000\u07c4"+ + "\u07c5\u0007\u0011\u0000\u0000\u07c5\u07c6\u0007\u000b\u0000\u0000\u07c6"+ + "\u07c7\u0007\u0011\u0000\u0000\u07c7\u07c8\u0007\t\u0000\u0000\u07c8\u07c9"+ + "\u0007\u0004\u0000\u0000\u07c9\u0156\u0001\u0000\u0000\u0000\u07ca\u07cb"+ + "\u0007\u0015\u0000\u0000\u07cb\u07cc\u0007\t\u0000\u0000\u07cc\u07cd\u0007"+ + "\f\u0000\u0000\u07cd\u0158\u0001\u0000\u0000\u0000\u07ce\u07cf\u0007\u0015"+ + "\u0000\u0000\u07cf\u07d0\u0007\t\u0000\u0000\u07d0\u07d1\u0007\f\u0000"+ + "\u0000\u07d1\u07d2\u0007\n\u0000\u0000\u07d2\u07d3\u0007\u000e\u0000\u0000"+ + "\u07d3\u015a\u0001\u0000\u0000\u0000\u07d4\u07d5\u0007\u000e\u0000\u0000"+ + "\u07d5\u07d6\u0007\u0002\u0000\u0000\u07d6\u07d7\u0007\u0005\u0000\u0000"+ + "\u07d7\u07d8\u0007\u0011\u0000\u0000\u07d8\u07d9\u0007\u0002\u0000\u0000"+ + "\u07d9\u07da\u0007\u0004\u0000\u0000\u07da\u07db\u0007\u0006\u0000\u0000"+ + "\u07db\u015c\u0001\u0000\u0000\u0000\u07dc\u07dd\u0007\u000e\u0000\u0000"+ + "\u07dd\u07de\u0007\u0002\u0000\u0000\u07de\u07df\u0007\u0004\u0000\u0000"+ + "\u07df\u07e0\u0007\u0005\u0000\u0000\u07e0\u015e\u0001\u0000\u0000\u0000"+ + "\u07e1\u07e2\u0007\u000e\u0000\u0000\u07e2\u07e3\u0007\n\u0000\u0000\u07e3"+ + "\u07e4\u0007\u0015\u0000\u0000\u07e4\u07e5\u0007\u0003\u0000\u0000\u07e5"+ + "\u07e6\u0007\u0002\u0000\u0000\u07e6\u07e7\u0007\u0007\u0000\u0000\u07e7"+ + "\u07e8\u0007\n\u0000\u0000\u07e8\u0160\u0001\u0000\u0000\u0000\u07e9\u07ea"+ + "\u0007\u000e\u0000\u0000\u07ea\u07eb\u0007\u0011\u0000\u0000\u07eb\u07ec"+ + "\u0007\u0004\u0000\u0000\u07ec\u07ed\u0007\u000b\u0000\u0000\u07ed\u0162"+ + "\u0001\u0000\u0000\u0000\u07ee\u07ef\u0007\u000e\u0000\u0000\u07ef\u07f0"+ + "\u0007\t\u0000\u0000\u07f0\u07f1\u0007\u000f\u0000\u0000\u07f1\u07f2\u0007"+ + "\u0004\u0000\u0000\u07f2\u07f3\u0007\u0005\u0000\u0000\u07f3\u0164\u0001"+ + "\u0000\u0000\u0000\u07f4\u07f5\u0007\u000e\u0000\u0000\u07f5\u07f6\u0007"+ + "\u000b\u0000\u0000\u07f6\u07f7\u0007\u000e\u0000\u0000\u07f7\u07f8\u0007"+ + "\u0011\u0000\u0000\u07f8\u07f9\u0007\u0010\u0000\u0000\u07f9\u0166\u0001"+ + "\u0000\u0000\u0000\u07fa\u07fb\u0007\u000e\u0000\u0000\u07fb\u07fc\u0007"+ + "\n\u0000\u0000\u07fc\u07fd\u0007\u0017\u0000\u0000\u07fd\u07fe\u0007\n"+ + "\u0000\u0000\u07fe\u07ff\u0007\u000e\u0000\u0000\u07ff\u0800\u0007\u0006"+ + "\u0000\u0000\u0800\u0801\u0007\n\u0000\u0000\u0801\u0168\u0001\u0000\u0000"+ + "\u0000\u0802\u0803\u0007\u0006\u0000\u0000\u0803\u0804\u0007\n\u0000\u0000"+ + "\u0804\u0805\u0007\u0007\u0000\u0000\u0805\u0806\u0005_\u0000\u0000\u0806"+ + "\u0807\u0007\u000b\u0000\u0000\u0807\u0808\u0007\t\u0000\u0000\u0808\u0809"+ + "\u0005_\u0000\u0000\u0809\u080a\u0007\u000b\u0000\u0000\u080a\u080b\u0007"+ + "\u0011\u0000\u0000\u080b\u080c\u0007\u0010\u0000\u0000\u080c\u080d\u0007"+ + "\n\u0000\u0000\u080d\u016a\u0001\u0000\u0000\u0000\u080e\u080f\u0007\u0006"+ + "\u0000\u0000\u080f\u0810\u0007\u0011\u0000\u0000\u0810\u0811\u0007\u0014"+ + "\u0000\u0000\u0811\u0812\u0007\u0004\u0000\u0000\u0812\u016c\u0001\u0000"+ + "\u0000\u0000\u0813\u0814\u0007\u0006\u0000\u0000\u0814\u0815\u0007\u0011"+ + "\u0000\u0000\u0815\u0816\u0007\u0014\u0000\u0000\u0816\u0817\u0007\u0004"+ + "\u0000\u0000\u0817\u0818\u0007\u000f\u0000\u0000\u0818\u0819\u0007\u0010"+ + "\u0000\u0000\u0819\u016e\u0001\u0000\u0000\u0000\u081a\u081b\u0007\u0006"+ + "\u0000\u0000\u081b\u081c\u0007\u0011\u0000\u0000\u081c\u081d\u0007\u0004"+ + "\u0000\u0000\u081d\u0170\u0001\u0000\u0000\u0000\u081e\u081f\u0007\u0006"+ + "\u0000\u0000\u081f\u0820\u0007\u0011\u0000\u0000\u0820\u0821\u0007\u0004"+ + "\u0000\u0000\u0821\u0822\u0007\u0016\u0000\u0000\u0822\u0172\u0001\u0000"+ + "\u0000\u0000\u0823\u0824\u0007\u0006\u0000\u0000\u0824\u0825\u0007\u001a"+ + "\u0000\u0000\u0825\u0826\u0007\u000e\u0000\u0000\u0826\u0827\u0007\u000b"+ + "\u0000\u0000\u0827\u0174\u0001\u0000\u0000\u0000\u0828\u0829\u0007\u0006"+ + "\u0000\u0000\u0829\u082a\u0007\u000b\u0000\u0000\u082a\u082b\u0007\u000e"+ + "\u0000\u0000\u082b\u082c\u0005_\u0000\u0000\u082c\u082d\u0007\u000b\u0000"+ + "\u0000\u082d\u082e\u0007\t\u0000\u0000\u082e\u082f\u0005_\u0000\u0000"+ + "\u082f\u0830\u0007\u0005\u0000\u0000\u0830\u0831\u0007\u0002\u0000\u0000"+ + "\u0831\u0832\u0007\u000b\u0000\u0000\u0832\u0833\u0007\n\u0000\u0000\u0833"+ + "\u0176\u0001\u0000\u0000\u0000\u0834\u0835\u0007\u0006\u0000\u0000\u0835"+ + "\u0836\u0007\u000f\u0000\u0000\u0836\u0837\u0007\b\u0000\u0000\u0837\u0838"+ + "\u0007\u0005\u0000\u0000\u0838\u0839\u0007\u0002\u0000\u0000\u0839\u083a"+ + "\u0007\u000b\u0000\u0000\u083a\u083b\u0007\n\u0000\u0000\u083b\u0178\u0001"+ + "\u0000\u0000\u0000\u083c\u083d\u0007\u0006\u0000\u0000\u083d\u083e\u0007"+ + "\u000f\u0000\u0000\u083e\u083f\u0007\b\u0000\u0000\u083f\u0840\u0007\u000b"+ + "\u0000\u0000\u0840\u0841\u0007\u0011\u0000\u0000\u0841\u0842\u0007\u0010"+ + "\u0000\u0000\u0842\u0843\u0007\n\u0000\u0000\u0843\u017a\u0001\u0000\u0000"+ + "\u0000\u0844\u0845\u0007\u0006\u0000\u0000\u0845\u0846\u0007\u000f\u0000"+ + "\u0000\u0846\u0847\u0007\b\u0000\u0000\u0847\u0848\u0007\u000b\u0000\u0000"+ + "\u0848\u0849\u0007\u000e\u0000\u0000\u0849\u084a\u0007\u0002\u0000\u0000"+ + "\u084a\u084b\u0007\u0007\u0000\u0000\u084b\u084c\u0007\u000b\u0000\u0000"+ + "\u084c\u017c\u0001\u0000\u0000\u0000\u084d\u084e\u0007\u0006\u0000\u0000"+ + "\u084e\u084f\u0007\r\u0000\u0000\u084f\u0850\u0007\u0006\u0000\u0000\u0850"+ + "\u0851\u0007\u0005\u0000\u0000\u0851\u0852\u0007\u0002\u0000\u0000\u0852"+ + "\u0853\u0007\u000b\u0000\u0000\u0853\u0854\u0007\n\u0000\u0000\u0854\u017e"+ + "\u0001\u0000\u0000\u0000\u0855\u0856\u0007\u000b\u0000\u0000\u0856\u0857"+ + "\u0007\u0002\u0000\u0000\u0857\u0858\u0007\u0004\u0000\u0000\u0858\u0180"+ + "\u0001\u0000\u0000\u0000\u0859\u085a\u0007\u000b\u0000\u0000\u085a\u085b"+ + "\u0007\u0011\u0000\u0000\u085b\u085c\u0007\u0010\u0000\u0000\u085c\u085d"+ + "\u0007\n\u0000\u0000\u085d\u0182\u0001\u0000\u0000\u0000\u085e\u085f\u0007"+ + "\u000b\u0000\u0000\u085f\u0860\u0007\u0011\u0000\u0000\u0860\u0861\u0007"+ + "\u0010\u0000\u0000\u0861\u0862\u0007\n\u0000\u0000\u0862\u0863\u0007\u0005"+ + "\u0000\u0000\u0863\u0864\u0007\u0011\u0000\u0000\u0864\u0865\u0007\u0013"+ + "\u0000\u0000\u0865\u0866\u0007\u0013\u0000\u0000\u0866\u0184\u0001\u0000"+ + "\u0000\u0000\u0867\u0868\u0007\u000b\u0000\u0000\u0868\u0869\u0007\u0011"+ + "\u0000\u0000\u0869\u086a\u0007\u0010\u0000\u0000\u086a\u086b\u0007\n\u0000"+ + "\u0000\u086b\u086c\u0005_\u0000\u0000\u086c\u086d\u0007\u0013\u0000\u0000"+ + "\u086d\u086e\u0007\t\u0000\u0000\u086e\u086f\u0007\u000e\u0000\u0000\u086f"+ + "\u0870\u0007\u0010\u0000\u0000\u0870\u0871\u0007\u0002\u0000\u0000\u0871"+ + "\u0872\u0007\u000b\u0000\u0000\u0872\u0186\u0001\u0000\u0000\u0000\u0873"+ + "\u0874\u0007\u000b\u0000\u0000\u0874\u0875\u0007\u0011\u0000\u0000\u0875"+ + "\u0876\u0007\u0010\u0000\u0000\u0876\u0877\u0007\n\u0000\u0000\u0877\u0878"+ + "\u0005_\u0000\u0000\u0878\u0879\u0007\u000b\u0000\u0000\u0879\u087a\u0007"+ + "\t\u0000\u0000\u087a\u087b\u0005_\u0000\u0000\u087b\u087c\u0007\u0006"+ + "\u0000\u0000\u087c\u087d\u0007\n\u0000\u0000\u087d\u087e\u0007\u0007\u0000"+ + "\u0000\u087e\u0188\u0001\u0000\u0000\u0000\u087f\u0880\u0007\u000b\u0000"+ + "\u0000\u0880\u0881\u0007\u0011\u0000\u0000\u0881\u0882\u0007\u0010\u0000"+ + "\u0000\u0882\u0883\u0007\n\u0000\u0000\u0883\u0884\u0007\u0006\u0000\u0000"+ + "\u0884\u0885\u0007\u000b\u0000\u0000\u0885\u0886\u0007\u0002\u0000\u0000"+ + "\u0886\u0887\u0007\u0010\u0000\u0000\u0887\u0888\u0007\u0015\u0000\u0000"+ + "\u0888\u018a\u0001\u0000\u0000\u0000\u0889\u088a\u0007\u000b\u0000\u0000"+ + "\u088a\u088b\u0007\u000e\u0000\u0000\u088b\u088c\u0007\u000f\u0000\u0000"+ + "\u088c\u088d\u0007\u0004\u0000\u0000\u088d\u088e\u0007\u0007\u0000\u0000"+ + "\u088e\u088f\u0007\u0002\u0000\u0000\u088f\u0890\u0007\u000b\u0000\u0000"+ + "\u0890\u0891\u0007\n\u0000\u0000\u0891\u018c\u0001\u0000\u0000\u0000\u0892"+ + "\u0893\u0007\u000b\u0000\u0000\u0893\u0894\u0007\t\u0000\u0000\u0894\u0895"+ + "\u0005_\u0000\u0000\u0895\u0896\u0007\u0005\u0000\u0000\u0896\u0897\u0007"+ + "\u0002\u0000\u0000\u0897\u0898\u0007\r\u0000\u0000\u0898\u0899\u0007\u0006"+ + "\u0000\u0000\u0899\u018e\u0001\u0000\u0000\u0000\u089a\u089b\u0007\u000b"+ + "\u0000\u0000\u089b\u089c\u0007\t\u0000\u0000\u089c\u089d\u0005_\u0000"+ + "\u0000\u089d\u089e\u0007\u0006\u0000\u0000\u089e\u089f\u0007\n\u0000\u0000"+ + "\u089f\u08a0\u0007\u0007\u0000\u0000\u08a0\u08a1\u0007\t\u0000\u0000\u08a1"+ + "\u08a2\u0007\u0004\u0000\u0000\u08a2\u08a3\u0007\u0005\u0000\u0000\u08a3"+ + "\u08a4"; + private static final String _serializedATNSegment1 = + "\u0007\u0006\u0000\u0000\u08a4\u0190\u0001\u0000\u0000\u0000\u08a5\u08a6"+ + "\u0007\u000f\u0000\u0000\u08a6\u08a7\u0007\u0004\u0000\u0000\u08a7\u08a8"+ + "\u0007\u0011\u0000\u0000\u08a8\u08a9\u0007\u0012\u0000\u0000\u08a9\u08aa"+ + "\u0005_\u0000\u0000\u08aa\u08ab\u0007\u000b\u0000\u0000\u08ab\u08ac\u0007"+ + "\u0011\u0000\u0000\u08ac\u08ad\u0007\u0010\u0000\u0000\u08ad\u08ae\u0007"+ + "\n\u0000\u0000\u08ae\u08af\u0007\u0006\u0000\u0000\u08af\u08b0\u0007\u000b"+ + "\u0000\u0000\u08b0\u08b1\u0007\u0002\u0000\u0000\u08b1\u08b2\u0007\u0010"+ + "\u0000\u0000\u08b2\u08b3\u0007\u0015\u0000\u0000\u08b3\u0192\u0001\u0000"+ + "\u0000\u0000\u08b4\u08b5\u0007\u000f\u0000\u0000\u08b5\u08b6\u0007\u0015"+ + "\u0000\u0000\u08b6\u08b7\u0007\u0015\u0000\u0000\u08b7\u08b8\u0007\n\u0000"+ + "\u0000\u08b8\u08b9\u0007\u000e\u0000\u0000\u08b9\u0194\u0001\u0000\u0000"+ + "\u0000\u08ba\u08bb\u0007\u000f\u0000\u0000\u08bb\u08bc\u0007\u000b\u0000"+ + "\u0000\u08bc\u08bd\u0007\u0007\u0000\u0000\u08bd\u08be\u0005_\u0000\u0000"+ + "\u08be\u08bf\u0007\u0005\u0000\u0000\u08bf\u08c0\u0007\u0002\u0000\u0000"+ + "\u08c0\u08c1\u0007\u000b\u0000\u0000\u08c1\u08c2\u0007\n\u0000\u0000\u08c2"+ + "\u0196\u0001\u0000\u0000\u0000\u08c3\u08c4\u0007\u000f\u0000\u0000\u08c4"+ + "\u08c5\u0007\u000b\u0000\u0000\u08c5\u08c6\u0007\u0007\u0000\u0000\u08c6"+ + "\u08c7\u0005_\u0000\u0000\u08c7\u08c8\u0007\u000b\u0000\u0000\u08c8\u08c9"+ + "\u0007\u0011\u0000\u0000\u08c9\u08ca\u0007\u0010\u0000\u0000\u08ca\u08cb"+ + "\u0007\n\u0000\u0000\u08cb\u0198\u0001\u0000\u0000\u0000\u08cc\u08cd\u0007"+ + "\u000f\u0000\u0000\u08cd\u08ce\u0007\u000b\u0000\u0000\u08ce\u08cf\u0007"+ + "\u0007\u0000\u0000\u08cf\u08d0\u0005_\u0000\u0000\u08d0\u08d1\u0007\u000b"+ + "\u0000\u0000\u08d1\u08d2\u0007\u0011\u0000\u0000\u08d2\u08d3\u0007\u0010"+ + "\u0000\u0000\u08d3\u08d4\u0007\n\u0000\u0000\u08d4\u08d5\u0007\u0006\u0000"+ + "\u0000\u08d5\u08d6\u0007\u000b\u0000\u0000\u08d6\u08d7\u0007\u0002\u0000"+ + "\u0000\u08d7\u08d8\u0007\u0010\u0000\u0000\u08d8\u08d9\u0007\u0015\u0000"+ + "\u0000\u08d9\u019a\u0001\u0000\u0000\u0000\u08da\u08db\u0007\u0005\u0000"+ + "\u0000\u08db\u019c\u0001\u0000\u0000\u0000\u08dc\u08dd\u0007\u000b\u0000"+ + "\u0000\u08dd\u019e\u0001\u0000\u0000\u0000\u08de\u08df\u0007\u000b\u0000"+ + "\u0000\u08df\u08e0\u0007\u0006\u0000\u0000\u08e0\u01a0\u0001\u0000\u0000"+ + "\u0000\u08e1\u08e2\u0005{\u0000\u0000\u08e2\u01a2\u0001\u0000\u0000\u0000"+ + "\u08e3\u08e4\u0005}\u0000\u0000\u08e4\u01a4\u0001\u0000\u0000\u0000\u08e5"+ + "\u08e6\u0007\u0005\u0000\u0000\u08e6\u08e7\u0007\n\u0000\u0000\u08e7\u08e8"+ + "\u0007\u0004\u0000\u0000\u08e8\u08e9\u0007\u0006\u0000\u0000\u08e9\u08ea"+ + "\u0007\n\u0000\u0000\u08ea\u08eb\u0005_\u0000\u0000\u08eb\u08ec\u0007"+ + "\u000e\u0000\u0000\u08ec\u08ed\u0007\u0002\u0000\u0000\u08ed\u08ee\u0007"+ + "\u0004\u0000\u0000\u08ee\u08ef\u0007\u0019\u0000\u0000\u08ef\u01a6\u0001"+ + "\u0000\u0000\u0000\u08f0\u08f1\u0007\u000e\u0000\u0000\u08f1\u08f2\u0007"+ + "\u0002\u0000\u0000\u08f2\u08f3\u0007\u0004\u0000\u0000\u08f3\u08f4\u0007"+ + "\u0019\u0000\u0000\u08f4\u01a8\u0001\u0000\u0000\u0000\u08f5\u08f6\u0007"+ + "\u000e\u0000\u0000\u08f6\u08f7\u0007\t\u0000\u0000\u08f7\u08f8\u0007\f"+ + "\u0000\u0000\u08f8\u08f9\u0005_\u0000\u0000\u08f9\u08fa\u0007\u0004\u0000"+ + "\u0000\u08fa\u08fb\u0007\u000f\u0000\u0000\u08fb\u08fc\u0007\u0010\u0000"+ + "\u0000\u08fc\u08fd\u0007\b\u0000\u0000\u08fd\u08fe\u0007\n\u0000\u0000"+ + "\u08fe\u08ff\u0007\u000e\u0000\u0000\u08ff\u01aa\u0001\u0000\u0000\u0000"+ + "\u0900\u0901\u0007\u0005\u0000\u0000\u0901\u0902\u0007\u0002\u0000\u0000"+ + "\u0902\u0903\u0007\u000b\u0000\u0000\u0903\u0904\u0007\n\u0000\u0000\u0904"+ + "\u0905\u0005_\u0000\u0000\u0905\u0906\u0007\u0016\u0000\u0000\u0906\u0907"+ + "\u0007\u0011\u0000\u0000\u0907\u0908\u0007\u0006\u0000\u0000\u0908\u0909"+ + "\u0007\u000b\u0000\u0000\u0909\u090a\u0007\t\u0000\u0000\u090a\u090b\u0007"+ + "\u0014\u0000\u0000\u090b\u090c\u0007\u000e\u0000\u0000\u090c\u090d\u0007"+ + "\u0002\u0000\u0000\u090d\u090e\u0007\u0010\u0000\u0000\u090e\u01ac\u0001"+ + "\u0000\u0000\u0000\u090f\u0910\u0007\u0005\u0000\u0000\u0910\u0911\u0007"+ + "\u0002\u0000\u0000\u0911\u0912\u0007\r\u0000\u0000\u0912\u0913\u0005_"+ + "\u0000\u0000\u0913\u0914\u0007\t\u0000\u0000\u0914\u0915\u0007\u0013\u0000"+ + "\u0000\u0915\u0916\u0005_\u0000\u0000\u0916\u0917\u0007\u0010\u0000\u0000"+ + "\u0917\u0918\u0007\t\u0000\u0000\u0918\u0919\u0007\u0004\u0000\u0000\u0919"+ + "\u091a\u0007\u000b\u0000\u0000\u091a\u091b\u0007\u0016\u0000\u0000\u091b"+ + "\u01ae\u0001\u0000\u0000\u0000\u091c\u091d\u0007\u0005\u0000\u0000\u091d"+ + "\u091e\u0007\u0002\u0000\u0000\u091e\u091f\u0007\r\u0000\u0000\u091f\u0920"+ + "\u0005_\u0000\u0000\u0920\u0921\u0007\t\u0000\u0000\u0921\u0922\u0007"+ + "\u0013\u0000\u0000\u0922\u0923\u0005_\u0000\u0000\u0923\u0924\u0007\r"+ + "\u0000\u0000\u0924\u0925\u0007\n\u0000\u0000\u0925\u0926\u0007\u0002\u0000"+ + "\u0000\u0926\u0927\u0007\u000e\u0000\u0000\u0927\u01b0\u0001\u0000\u0000"+ + "\u0000\u0928\u0929\u0007\u0005\u0000\u0000\u0929\u092a\u0007\u0002\u0000"+ + "\u0000\u092a\u092b\u0007\r\u0000\u0000\u092b\u092c\u0005_\u0000\u0000"+ + "\u092c\u092d\u0007\t\u0000\u0000\u092d\u092e\u0007\u0013\u0000\u0000\u092e"+ + "\u092f\u0005_\u0000\u0000\u092f\u0930\u0007\f\u0000\u0000\u0930\u0931"+ + "\u0007\n\u0000\u0000\u0931\u0932\u0007\n\u0000\u0000\u0932\u0933\u0007"+ + "\u0019\u0000\u0000\u0933\u01b2\u0001\u0000\u0000\u0000\u0934\u0935\u0007"+ + "\n\u0000\u0000\u0935\u0936\u0007\u0012\u0000\u0000\u0936\u0937\u0007\u0007"+ + "\u0000\u0000\u0937\u0938\u0007\u0003\u0000\u0000\u0938\u0939\u0007\u000f"+ + "\u0000\u0000\u0939\u093a\u0007\u0005\u0000\u0000\u093a\u093b\u0007\n\u0000"+ + "\u0000\u093b\u01b4\u0001\u0000\u0000\u0000\u093c\u093d\u0007\n\u0000\u0000"+ + "\u093d\u093e\u0007\u0012\u0000\u0000\u093e\u093f\u0007\u000b\u0000\u0000"+ + "\u093f\u0940\u0007\n\u0000\u0000\u0940\u0941\u0007\u0004\u0000\u0000\u0941"+ + "\u0942\u0007\u0005\u0000\u0000\u0942\u0943\u0007\n\u0000\u0000\u0943\u0944"+ + "\u0007\u0005\u0000\u0000\u0944\u0945\u0005_\u0000\u0000\u0945\u0946\u0007"+ + "\u0006\u0000\u0000\u0946\u0947\u0007\u000b\u0000\u0000\u0947\u0948\u0007"+ + "\u0002\u0000\u0000\u0948\u0949\u0007\u000b\u0000\u0000\u0949\u094a\u0007"+ + "\u0006\u0000\u0000\u094a\u01b6\u0001\u0000\u0000\u0000\u094b\u094c\u0007"+ + "\u0013\u0000\u0000\u094c\u094d\u0007\u0011\u0000\u0000\u094d\u094e\u0007"+ + "\n\u0000\u0000\u094e\u094f\u0007\u0003\u0000\u0000\u094f\u0950\u0007\u0005"+ + "\u0000\u0000\u0950\u01b8\u0001\u0000\u0000\u0000\u0951\u0952\u0007\u0013"+ + "\u0000\u0000\u0952\u0953\u0007\u0011\u0000\u0000\u0953\u0954\u0007\u0003"+ + "\u0000\u0000\u0954\u0955\u0007\u000b\u0000\u0000\u0955\u0956\u0007\n\u0000"+ + "\u0000\u0956\u0957\u0007\u000e\u0000\u0000\u0957\u01ba\u0001\u0000\u0000"+ + "\u0000\u0958\u0959\u0007\u0014\u0000\u0000\u0959\u095a\u0007\n\u0000\u0000"+ + "\u095a\u095b\u0007\t\u0000\u0000\u095b\u095c\u0005_\u0000\u0000\u095c"+ + "\u095d\u0007\b\u0000\u0000\u095d\u095e\u0007\t\u0000\u0000\u095e\u095f"+ + "\u0007\u000f\u0000\u0000\u095f\u0960\u0007\u0004\u0000\u0000\u0960\u0961"+ + "\u0007\u0005\u0000\u0000\u0961\u0962\u0007\u0011\u0000\u0000\u0962\u0963"+ + "\u0007\u0004\u0000\u0000\u0963\u0964\u0007\u0014\u0000\u0000\u0964\u0965"+ + "\u0005_\u0000\u0000\u0965\u0966\u0007\b\u0000\u0000\u0966\u0967\u0007"+ + "\t\u0000\u0000\u0967\u0968\u0007\u0012\u0000\u0000\u0968\u01bc\u0001\u0000"+ + "\u0000\u0000\u0969\u096a\u0007\u0014\u0000\u0000\u096a\u096b\u0007\n\u0000"+ + "\u0000\u096b\u096c\u0007\t\u0000\u0000\u096c\u096d\u0005_\u0000\u0000"+ + "\u096d\u096e\u0007\u0007\u0000\u0000\u096e\u096f\u0007\n\u0000\u0000\u096f"+ + "\u0970\u0007\u0003\u0000\u0000\u0970\u0971\u0007\u0003\u0000\u0000\u0971"+ + "\u01be\u0001\u0000\u0000\u0000\u0972\u0973\u0007\u0014\u0000\u0000\u0973"+ + "\u0974\u0007\n\u0000\u0000\u0974\u0975\u0007\t\u0000\u0000\u0975\u0976"+ + "\u0005_\u0000\u0000\u0976\u0977\u0007\u0005\u0000\u0000\u0977\u0978\u0007"+ + "\u0011\u0000\u0000\u0978\u0979\u0007\u0006\u0000\u0000\u0979\u097a\u0007"+ + "\u000b\u0000\u0000\u097a\u097b\u0007\u0002\u0000\u0000\u097b\u097c\u0007"+ + "\u0004\u0000\u0000\u097c\u097d\u0007\u0007\u0000\u0000\u097d\u097e\u0007"+ + "\n\u0000\u0000\u097e\u01c0\u0001\u0000\u0000\u0000\u097f\u0980\u0007\u0014"+ + "\u0000\u0000\u0980\u0981\u0007\n\u0000\u0000\u0981\u0982\u0007\t\u0000"+ + "\u0000\u0982\u0983\u0005_\u0000\u0000\u0983\u0984\u0007\u0005\u0000\u0000"+ + "\u0984\u0985\u0007\u0011\u0000\u0000\u0985\u0986\u0007\u0006\u0000\u0000"+ + "\u0986\u0987\u0007\u000b\u0000\u0000\u0987\u0988\u0007\u0002\u0000\u0000"+ + "\u0988\u0989\u0007\u0004\u0000\u0000\u0989\u098a\u0007\u0007\u0000\u0000"+ + "\u098a\u098b\u0007\n\u0000\u0000\u098b\u098c\u0005_\u0000\u0000\u098c"+ + "\u098d\u0007\u000e\u0000\u0000\u098d\u098e\u0007\u0002\u0000\u0000\u098e"+ + "\u098f\u0007\u0004\u0000\u0000\u098f\u0990\u0007\u0014\u0000\u0000\u0990"+ + "\u0991\u0007\n\u0000\u0000\u0991\u01c2\u0001\u0000\u0000\u0000\u0992\u0993"+ + "\u0007\u0014\u0000\u0000\u0993\u0994\u0007\n\u0000\u0000\u0994\u0995\u0007"+ + "\t\u0000\u0000\u0995\u0996\u0005_\u0000\u0000\u0996\u0997\u0007\u0011"+ + "\u0000\u0000\u0997\u0998\u0007\u0004\u0000\u0000\u0998\u0999\u0007\u000b"+ + "\u0000\u0000\u0999\u099a\u0007\n\u0000\u0000\u099a\u099b\u0007\u000e\u0000"+ + "\u0000\u099b\u099c\u0007\u0006\u0000\u0000\u099c\u099d\u0007\n\u0000\u0000"+ + "\u099d\u099e\u0007\u0007\u0000\u0000\u099e\u099f\u0007\u000b\u0000\u0000"+ + "\u099f\u09a0\u0007\u0006\u0000\u0000\u09a0\u01c4\u0001\u0000\u0000\u0000"+ + "\u09a1\u09a2\u0007\u0014\u0000\u0000\u09a2\u09a3\u0007\n\u0000\u0000\u09a3"+ + "\u09a4\u0007\t\u0000\u0000\u09a4\u09a5\u0005_\u0000\u0000\u09a5\u09a6"+ + "\u0007\u0015\u0000\u0000\u09a6\u09a7\u0007\t\u0000\u0000\u09a7\u09a8\u0007"+ + "\u0003\u0000\u0000\u09a8\u09a9\u0007\r\u0000\u0000\u09a9\u09aa\u0007\u0014"+ + "\u0000\u0000\u09aa\u09ab\u0007\t\u0000\u0000\u09ab\u09ac\u0007\u0004\u0000"+ + "\u0000\u09ac\u01c6\u0001\u0000\u0000\u0000\u09ad\u09ae\u0007\u0016\u0000"+ + "\u0000\u09ae\u09af\u0007\u0011\u0000\u0000\u09af\u09b0\u0007\u0006\u0000"+ + "\u0000\u09b0\u09b1\u0007\u000b\u0000\u0000\u09b1\u09b2\u0007\t\u0000\u0000"+ + "\u09b2\u09b3\u0007\u0014\u0000\u0000\u09b3\u09b4\u0007\u000e\u0000\u0000"+ + "\u09b4\u09b5\u0007\u0002\u0000\u0000\u09b5\u09b6\u0007\u0010\u0000\u0000"+ + "\u09b6\u01c8\u0001\u0000\u0000\u0000\u09b7\u09b8\u0007\u0016\u0000\u0000"+ + "\u09b8\u09b9\u0007\t\u0000\u0000\u09b9\u09ba\u0007\u000f\u0000\u0000\u09ba"+ + "\u09bb\u0007\u000e\u0000\u0000\u09bb\u09bc\u0005_\u0000\u0000\u09bc\u09bd"+ + "\u0007\t\u0000\u0000\u09bd\u09be\u0007\u0013\u0000\u0000\u09be\u09bf\u0005"+ + "_\u0000\u0000\u09bf\u09c0\u0007\u0005\u0000\u0000\u09c0\u09c1\u0007\u0002"+ + "\u0000\u0000\u09c1\u09c2\u0007\r\u0000\u0000\u09c2\u01ca\u0001\u0000\u0000"+ + "\u0000\u09c3\u09c4\u0007\u0011\u0000\u0000\u09c4\u09c5\u0007\u0004\u0000"+ + "\u0000\u09c5\u09c6\u0007\u0007\u0000\u0000\u09c6\u09c7\u0007\u0003\u0000"+ + "\u0000\u09c7\u09c8\u0007\u000f\u0000\u0000\u09c8\u09c9\u0007\u0005\u0000"+ + "\u0000\u09c9\u09ca\u0007\n\u0000\u0000\u09ca\u01cc\u0001\u0000\u0000\u0000"+ + "\u09cb\u09cc\u0007\u0011\u0000\u0000\u09cc\u09cd\u0007\u0004\u0000\u0000"+ + "\u09cd\u09ce\u0005_\u0000\u0000\u09ce\u09cf\u0007\u000b\u0000\u0000\u09cf"+ + "\u09d0\u0007\n\u0000\u0000\u09d0\u09d1\u0007\u000e\u0000\u0000\u09d1\u09d2"+ + "\u0007\u0010\u0000\u0000\u09d2\u09d3\u0007\u0006\u0000\u0000\u09d3\u01ce"+ + "\u0001\u0000\u0000\u0000\u09d4\u09d5\u0007\u0010\u0000\u0000\u09d5\u09d6"+ + "\u0007\u0002\u0000\u0000\u09d6\u09d7\u0007\u000b\u0000\u0000\u09d7\u09d8"+ + "\u0007\u0007\u0000\u0000\u09d8\u09d9\u0007\u0016\u0000\u0000\u09d9\u09da"+ + "\u0007\u0015\u0000\u0000\u09da\u09db\u0007\u0016\u0000\u0000\u09db\u09dc"+ + "\u0007\u000e\u0000\u0000\u09dc\u09dd\u0007\u0002\u0000\u0000\u09dd\u09de"+ + "\u0007\u0006\u0000\u0000\u09de\u09df\u0007\n\u0000\u0000\u09df\u01d0\u0001"+ + "\u0000\u0000\u0000\u09e0\u09e1\u0007\u0010\u0000\u0000\u09e1\u09e2\u0007"+ + "\u0002\u0000\u0000\u09e2\u09e3\u0007\u000b\u0000\u0000\u09e3\u09e4\u0007"+ + "\u0007\u0000\u0000\u09e4\u09e5\u0007\u0016\u0000\u0000\u09e5\u09e6\u0005"+ + "_\u0000\u0000\u09e6\u09e7\u0007\u0015\u0000\u0000\u09e7\u09e8\u0007\u0016"+ + "\u0000\u0000\u09e8\u09e9\u0007\u000e\u0000\u0000\u09e9\u09ea\u0007\u0002"+ + "\u0000\u0000\u09ea\u09eb\u0007\u0006\u0000\u0000\u09eb\u09ec\u0007\n\u0000"+ + "\u0000\u09ec\u01d2\u0001\u0000\u0000\u0000\u09ed\u09ee\u0007\u0010\u0000"+ + "\u0000\u09ee\u09ef\u0007\u0002\u0000\u0000\u09ef\u09f0\u0007\u000b\u0000"+ + "\u0000\u09f0\u09f1\u0007\u0007\u0000\u0000\u09f1\u09f2\u0007\u0016\u0000"+ + "\u0000\u09f2\u09f3\u0007\u0015\u0000\u0000\u09f3\u09f4\u0007\u0016\u0000"+ + "\u0000\u09f4\u09f5\u0007\u000e\u0000\u0000\u09f5\u09f6\u0007\u0002\u0000"+ + "\u0000\u09f6\u09f7\u0007\u0006\u0000\u0000\u09f7\u09f8\u0007\n\u0000\u0000"+ + "\u09f8\u09f9\u0007\u001a\u0000\u0000\u09f9\u09fa\u0007\u000f\u0000\u0000"+ + "\u09fa\u09fb\u0007\n\u0000\u0000\u09fb\u09fc\u0007\u000e\u0000\u0000\u09fc"+ + "\u09fd\u0007\r\u0000\u0000\u09fd\u01d4\u0001\u0000\u0000\u0000\u09fe\u09ff"+ + "\u0007\u0006\u0000\u0000\u09ff\u0a00\u0007\u0011\u0000\u0000\u0a00\u0a01"+ + "\u0007\u0010\u0000\u0000\u0a01\u0a02\u0007\u0015\u0000\u0000\u0a02\u0a03"+ + "\u0007\u0003\u0000\u0000\u0a03\u0a04\u0007\n\u0000\u0000\u0a04\u0a05\u0005"+ + "_\u0000\u0000\u0a05\u0a06\u0007\u001a\u0000\u0000\u0a06\u0a07\u0007\u000f"+ + "\u0000\u0000\u0a07\u0a08\u0007\n\u0000\u0000\u0a08\u0a09\u0007\u000e\u0000"+ + "\u0000\u0a09\u0a0a\u0007\r\u0000\u0000\u0a0a\u0a0b\u0005_\u0000\u0000"+ + "\u0a0b\u0a0c\u0007\u0006\u0000\u0000\u0a0c\u0a0d\u0007\u000b\u0000\u0000"+ + "\u0a0d\u0a0e\u0007\u000e\u0000\u0000\u0a0e\u0a0f\u0007\u0011\u0000\u0000"+ + "\u0a0f\u0a10\u0007\u0004\u0000\u0000\u0a10\u0a11\u0007\u0014\u0000\u0000"+ + "\u0a11\u01d6\u0001\u0000\u0000\u0000\u0a12\u0a13\u0007\u001a\u0000\u0000"+ + "\u0a13\u0a14\u0007\u000f\u0000\u0000\u0a14\u0a15\u0007\n\u0000\u0000\u0a15"+ + "\u0a16\u0007\u000e\u0000\u0000\u0a16\u0a17\u0007\r\u0000\u0000\u0a17\u0a18"+ + "\u0005_\u0000\u0000\u0a18\u0a19\u0007\u0006\u0000\u0000\u0a19\u0a1a\u0007"+ + "\u000b\u0000\u0000\u0a1a\u0a1b\u0007\u000e\u0000\u0000\u0a1b\u0a1c\u0007"+ + "\u0011\u0000\u0000\u0a1c\u0a1d\u0007\u0004\u0000\u0000\u0a1d\u0a1e\u0007"+ + "\u0014\u0000\u0000\u0a1e\u01d8\u0001\u0000\u0000\u0000\u0a1f\u0a20\u0007"+ + "\u0010\u0000\u0000\u0a20\u0a21\u0007\u0002\u0000\u0000\u0a21\u0a22\u0007"+ + "\u000b\u0000\u0000\u0a22\u0a23\u0007\u0007\u0000\u0000\u0a23\u0a24\u0007"+ + "\u0016\u0000\u0000\u0a24\u0a25\u0005_\u0000\u0000\u0a25\u0a26\u0007\u0015"+ + "\u0000\u0000\u0a26\u0a27\u0007\u0016\u0000\u0000\u0a27\u0a28\u0007\u000e"+ + "\u0000\u0000\u0a28\u0a29\u0007\u0002\u0000\u0000\u0a29\u0a2a\u0007\u0006"+ + "\u0000\u0000\u0a2a\u0a2b\u0007\n\u0000\u0000\u0a2b\u0a2c\u0005_\u0000"+ + "\u0000\u0a2c\u0a2d\u0007\u0015\u0000\u0000\u0a2d\u0a2e\u0007\u000e\u0000"+ + "\u0000\u0a2e\u0a2f\u0007\n\u0000\u0000\u0a2f\u0a30\u0007\u0013\u0000\u0000"+ + "\u0a30\u0a31\u0007\u0011\u0000\u0000\u0a31\u0a32\u0007\u0012\u0000\u0000"+ + "\u0a32\u01da\u0001\u0000\u0000\u0000\u0a33\u0a34\u0007\u0010\u0000\u0000"+ + "\u0a34\u0a35\u0007\u0002\u0000\u0000\u0a35\u0a36\u0007\u000b\u0000\u0000"+ + "\u0a36\u0a37\u0007\u0007\u0000\u0000\u0a37\u0a38\u0007\u0016\u0000\u0000"+ + "\u0a38\u0a39\u0007\u001a\u0000\u0000\u0a39\u0a3a\u0007\u000f\u0000\u0000"+ + "\u0a3a\u0a3b\u0007\n\u0000\u0000\u0a3b\u0a3c\u0007\u000e\u0000\u0000\u0a3c"+ + "\u0a3d\u0007\r\u0000\u0000\u0a3d\u01dc\u0001\u0000\u0000\u0000\u0a3e\u0a3f"+ + "\u0007\u0010\u0000\u0000\u0a3f\u0a40\u0007\u0002\u0000\u0000\u0a40\u0a41"+ + "\u0007\u000b\u0000\u0000\u0a41\u0a42\u0007\u0007\u0000\u0000\u0a42\u0a43"+ + "\u0007\u0016\u0000\u0000\u0a43\u0a44\u0005_\u0000\u0000\u0a44\u0a45\u0007"+ + "\u001a\u0000\u0000\u0a45\u0a46\u0007\u000f\u0000\u0000\u0a46\u0a47\u0007"+ + "\n\u0000\u0000\u0a47\u0a48\u0007\u000e\u0000\u0000\u0a48\u0a49\u0007\r"+ + "\u0000\u0000\u0a49\u01de\u0001\u0000\u0000\u0000\u0a4a\u0a4b\u0007\u0010"+ + "\u0000\u0000\u0a4b\u0a4c\u0007\u0011\u0000\u0000\u0a4c\u0a4d\u0007\u0004"+ + "\u0000\u0000\u0a4d\u0a4e\u0007\u000f\u0000\u0000\u0a4e\u0a4f\u0007\u000b"+ + "\u0000\u0000\u0a4f\u0a50\u0007\n\u0000\u0000\u0a50\u0a51\u0005_\u0000"+ + "\u0000\u0a51\u0a52\u0007\t\u0000\u0000\u0a52\u0a53\u0007\u0013\u0000\u0000"+ + "\u0a53\u0a54\u0005_\u0000\u0000\u0a54\u0a55\u0007\u0005\u0000\u0000\u0a55"+ + "\u0a56\u0007\u0002\u0000\u0000\u0a56\u0a57\u0007\r\u0000\u0000\u0a57\u01e0"+ + "\u0001\u0000\u0000\u0000\u0a58\u0a59\u0007\u0010\u0000\u0000\u0a59\u0a5a"+ + "\u0007\u0011\u0000\u0000\u0a5a\u0a5b\u0007\u0004\u0000\u0000\u0a5b\u0a5c"+ + "\u0007\u000f\u0000\u0000\u0a5c\u0a5d\u0007\u000b\u0000\u0000\u0a5d\u0a5e"+ + "\u0007\n\u0000\u0000\u0a5e\u0a5f\u0005_\u0000\u0000\u0a5f\u0a60\u0007"+ + "\t\u0000\u0000\u0a60\u0a61\u0007\u0013\u0000\u0000\u0a61\u0a62\u0005_"+ + "\u0000\u0000\u0a62\u0a63\u0007\u0016\u0000\u0000\u0a63\u0a64\u0007\t\u0000"+ + "\u0000\u0a64\u0a65\u0007\u000f\u0000\u0000\u0a65\u0a66\u0007\u000e\u0000"+ + "\u0000\u0a66\u01e2\u0001\u0000\u0000\u0000\u0a67\u0a68\u0007\u0010\u0000"+ + "\u0000\u0a68\u0a69\u0007\t\u0000\u0000\u0a69\u0a6a\u0007\u0004\u0000\u0000"+ + "\u0a6a\u0a6b\u0007\u000b\u0000\u0000\u0a6b\u0a6c\u0007\u0016\u0000\u0000"+ + "\u0a6c\u0a6d\u0005_\u0000\u0000\u0a6d\u0a6e\u0007\t\u0000\u0000\u0a6e"+ + "\u0a6f\u0007\u0013\u0000\u0000\u0a6f\u0a70\u0005_\u0000\u0000\u0a70\u0a71"+ + "\u0007\r\u0000\u0000\u0a71\u0a72\u0007\n\u0000\u0000\u0a72\u0a73\u0007"+ + "\u0002\u0000\u0000\u0a73\u0a74\u0007\u000e\u0000\u0000\u0a74\u01e4\u0001"+ + "\u0000\u0000\u0000\u0a75\u0a76\u0007\u0010\u0000\u0000\u0a76\u0a77\u0007"+ + "\u000f\u0000\u0000\u0a77\u0a78\u0007\u0003\u0000\u0000\u0a78\u0a79\u0007"+ + "\u000b\u0000\u0000\u0a79\u0a7a\u0007\u0011\u0000\u0000\u0a7a\u0a7b\u0007"+ + "\u0010\u0000\u0000\u0a7b\u0a7c\u0007\u0002\u0000\u0000\u0a7c\u0a7d\u0007"+ + "\u000b\u0000\u0000\u0a7d\u0a7e\u0007\u0007\u0000\u0000\u0a7e\u0a7f\u0007"+ + "\u0016\u0000\u0000\u0a7f\u01e6\u0001\u0000\u0000\u0000\u0a80\u0a81\u0007"+ + "\u0010\u0000\u0000\u0a81\u0a82\u0007\u000f\u0000\u0000\u0a82\u0a83\u0007"+ + "\u0003\u0000\u0000\u0a83\u0a84\u0007\u000b\u0000\u0000\u0a84\u0a85\u0007"+ + "\u0011\u0000\u0000\u0a85\u0a86\u0005_\u0000\u0000\u0a86\u0a87\u0007\u0010"+ + "\u0000\u0000\u0a87\u0a88\u0007\u0002\u0000\u0000\u0a88\u0a89\u0007\u000b"+ + "\u0000\u0000\u0a89\u0a8a\u0007\u0007\u0000\u0000\u0a8a\u0a8b\u0007\u0016"+ + "\u0000\u0000\u0a8b\u01e8\u0001\u0000\u0000\u0000\u0a8c\u0a8d\u0007\u0010"+ + "\u0000\u0000\u0a8d\u0a8e\u0007\u000f\u0000\u0000\u0a8e\u0a8f\u0007\u0003"+ + "\u0000\u0000\u0a8f\u0a90\u0007\u000b\u0000\u0000\u0a90\u0a91\u0007\u0011"+ + "\u0000\u0000\u0a91\u0a92\u0007\u0010\u0000\u0000\u0a92\u0a93\u0007\u0002"+ + "\u0000\u0000\u0a93\u0a94\u0007\u000b\u0000\u0000\u0a94\u0a95\u0007\u0007"+ + "\u0000\u0000\u0a95\u0a96\u0007\u0016\u0000\u0000\u0a96\u0a97\u0007\u001a"+ + "\u0000\u0000\u0a97\u0a98\u0007\u000f\u0000\u0000\u0a98\u0a99\u0007\n\u0000"+ + "\u0000\u0a99\u0a9a\u0007\u000e\u0000\u0000\u0a9a\u0a9b\u0007\r\u0000\u0000"+ + "\u0a9b\u01ea\u0001\u0000\u0000\u0000\u0a9c\u0a9d\u0007\u0004\u0000\u0000"+ + "\u0a9d\u0a9e\u0007\n\u0000\u0000\u0a9e\u0a9f\u0007\u0006\u0000\u0000\u0a9f"+ + "\u0aa0\u0007\u000b\u0000\u0000\u0aa0\u0aa1\u0007\n\u0000\u0000\u0aa1\u0aa2"+ + "\u0007\u0005\u0000\u0000\u0aa2\u01ec\u0001\u0000\u0000\u0000\u0aa3\u0aa4"+ + "\u0007\u0015\u0000\u0000\u0aa4\u0aa5\u0007\n\u0000\u0000\u0aa5\u0aa6\u0007"+ + "\u000e\u0000\u0000\u0aa6\u0aa7\u0007\u0007\u0000\u0000\u0aa7\u0aa8\u0007"+ + "\n\u0000\u0000\u0aa8\u0aa9\u0007\u0004\u0000\u0000\u0aa9\u0aaa\u0007\u000b"+ + "\u0000\u0000\u0aaa\u0aab\u0007\u0011\u0000\u0000\u0aab\u0aac\u0007\u0003"+ + "\u0000\u0000\u0aac\u0aad\u0007\n\u0000\u0000\u0aad\u0aae\u0007\u0006\u0000"+ + "\u0000\u0aae\u01ee\u0001\u0000\u0000\u0000\u0aaf\u0ab0\u0007\u0015\u0000"+ + "\u0000\u0ab0\u0ab1\u0007\n\u0000\u0000\u0ab1\u0ab2\u0007\u000e\u0000\u0000"+ + "\u0ab2\u0ab3\u0007\u0007\u0000\u0000\u0ab3\u0ab4\u0007\n\u0000\u0000\u0ab4"+ + "\u0ab5\u0007\u0004\u0000\u0000\u0ab5\u0ab6\u0007\u000b\u0000\u0000\u0ab6"+ + "\u0ab7\u0007\u0011\u0000\u0000\u0ab7\u0ab8\u0007\u0003\u0000\u0000\u0ab8"+ + "\u0ab9\u0007\n\u0000\u0000\u0ab9\u01f0\u0001\u0000\u0000\u0000\u0aba\u0abb"+ + "\u0007\u0015\u0000\u0000\u0abb\u0abc\u0007\n\u0000\u0000\u0abc\u0abd\u0007"+ + "\u000e\u0000\u0000\u0abd\u0abe\u0007\u0007\u0000\u0000\u0abe\u0abf\u0007"+ + "\n\u0000\u0000\u0abf\u0ac0\u0007\u0004\u0000\u0000\u0ac0\u0ac1\u0007\u000b"+ + "\u0000\u0000\u0ac1\u0ac2\u0007\u0011\u0000\u0000\u0ac2\u0ac3\u0007\u0003"+ + "\u0000\u0000\u0ac3\u0ac4\u0007\n\u0000\u0000\u0ac4\u0ac5\u0005_\u0000"+ + "\u0000\u0ac5\u0ac6\u0007\u0002\u0000\u0000\u0ac6\u0ac7\u0007\u0015\u0000"+ + "\u0000\u0ac7\u0ac8\u0007\u0015\u0000\u0000\u0ac8\u0ac9\u0007\u000e\u0000"+ + "\u0000\u0ac9\u0aca\u0007\t\u0000\u0000\u0aca\u0acb\u0007\u0012\u0000\u0000"+ + "\u0acb\u01f2\u0001\u0000\u0000\u0000\u0acc\u0acd\u0007\u000e\u0000\u0000"+ + "\u0acd\u0ace\u0007\n\u0000\u0000\u0ace\u0acf\u0007\u0014\u0000\u0000\u0acf"+ + "\u0ad0\u0007\n\u0000\u0000\u0ad0\u0ad1\u0007\u0012\u0000\u0000\u0ad1\u0ad2"+ + "\u0007\u0015\u0000\u0000\u0ad2\u0ad3\u0005_\u0000\u0000\u0ad3\u0ad4\u0007"+ + "\u001a\u0000\u0000\u0ad4\u0ad5\u0007\u000f\u0000\u0000\u0ad5\u0ad6\u0007"+ + "\n\u0000\u0000\u0ad6\u0ad7\u0007\u000e\u0000\u0000\u0ad7\u0ad8\u0007\r"+ + "\u0000\u0000\u0ad8\u01f4\u0001\u0000\u0000\u0000\u0ad9\u0ada\u0007\u000e"+ + "\u0000\u0000\u0ada\u0adb\u0007\n\u0000\u0000\u0adb\u0adc\u0007\u0017\u0000"+ + "\u0000\u0adc\u0add\u0007\n\u0000\u0000\u0add\u0ade\u0007\u000e\u0000\u0000"+ + "\u0ade\u0adf\u0007\u0006\u0000\u0000\u0adf\u0ae0\u0007\n\u0000\u0000\u0ae0"+ + "\u0ae1\u0005_\u0000\u0000\u0ae1\u0ae2\u0007\u0004\u0000\u0000\u0ae2\u0ae3"+ + "\u0007\n\u0000\u0000\u0ae3\u0ae4\u0007\u0006\u0000\u0000\u0ae4\u0ae5\u0007"+ + "\u000b\u0000\u0000\u0ae5\u0ae6\u0007\n\u0000\u0000\u0ae6\u0ae7\u0007\u0005"+ + "\u0000\u0000\u0ae7\u01f6\u0001\u0000\u0000\u0000\u0ae8\u0ae9\u0007\u001a"+ + "\u0000\u0000\u0ae9\u0aea\u0007\u000f\u0000\u0000\u0aea\u0aeb\u0007\n\u0000"+ + "\u0000\u0aeb\u0aec\u0007\u000e\u0000\u0000\u0aec\u0aed\u0007\r\u0000\u0000"+ + "\u0aed\u01f8\u0001\u0000\u0000\u0000\u0aee\u0aef\u0007\u000e\u0000\u0000"+ + "\u0aef\u0af0\u0007\u0002\u0000\u0000\u0af0\u0af1\u0007\u0004\u0000\u0000"+ + "\u0af1\u0af2\u0007\u0014\u0000\u0000\u0af2\u0af3\u0007\n\u0000\u0000\u0af3"+ + "\u01fa\u0001\u0000\u0000\u0000\u0af4\u0af5\u0007\u0006\u0000\u0000\u0af5"+ + "\u0af6\u0007\u0007\u0000\u0000\u0af6\u0af7\u0007\t\u0000\u0000\u0af7\u0af8"+ + "\u0007\u000e\u0000\u0000\u0af8\u0af9\u0007\n\u0000\u0000\u0af9\u01fc\u0001"+ + "\u0000\u0000\u0000\u0afa\u0afb\u0007\u0006\u0000\u0000\u0afb\u0afc\u0007"+ + "\u0007\u0000\u0000\u0afc\u0afd\u0007\t\u0000\u0000\u0afd\u0afe\u0007\u000e"+ + "\u0000\u0000\u0afe\u0aff\u0007\n\u0000\u0000\u0aff\u0b00\u0007\u001a\u0000"+ + "\u0000\u0b00\u0b01\u0007\u000f\u0000\u0000\u0b01\u0b02\u0007\n\u0000\u0000"+ + "\u0b02\u0b03\u0007\u000e\u0000\u0000\u0b03\u0b04\u0007\r\u0000\u0000\u0b04"+ + "\u01fe\u0001\u0000\u0000\u0000\u0b05\u0b06\u0007\u0006\u0000\u0000\u0b06"+ + "\u0b07\u0007\u0007\u0000\u0000\u0b07\u0b08\u0007\t\u0000\u0000\u0b08\u0b09"+ + "\u0007\u000e\u0000\u0000\u0b09\u0b0a\u0007\n\u0000\u0000\u0b0a\u0b0b\u0005"+ + "_\u0000\u0000\u0b0b\u0b0c\u0007\u001a\u0000\u0000\u0b0c\u0b0d\u0007\u000f"+ + "\u0000\u0000\u0b0d\u0b0e\u0007\n\u0000\u0000\u0b0e\u0b0f\u0007\u000e\u0000"+ + "\u0000\u0b0f\u0b10\u0007\r\u0000\u0000\u0b10\u0200\u0001\u0000\u0000\u0000"+ + "\u0b11\u0b12\u0007\u0006\u0000\u0000\u0b12\u0b13\u0007\n\u0000\u0000\u0b13"+ + "\u0b14\u0007\u0007\u0000\u0000\u0b14\u0b15\u0007\t\u0000\u0000\u0b15\u0b16"+ + "\u0007\u0004\u0000\u0000\u0b16\u0b17\u0007\u0005\u0000\u0000\u0b17\u0b18"+ + "\u0005_\u0000\u0000\u0b18\u0b19\u0007\t\u0000\u0000\u0b19\u0b1a\u0007"+ + "\u0013\u0000\u0000\u0b1a\u0b1b\u0005_\u0000\u0000\u0b1b\u0b1c\u0007\u0010"+ + "\u0000\u0000\u0b1c\u0b1d\u0007\u0011\u0000\u0000\u0b1d\u0b1e\u0007\u0004"+ + "\u0000\u0000\u0b1e\u0b1f\u0007\u000f\u0000\u0000\u0b1f\u0b20\u0007\u000b"+ + "\u0000\u0000\u0b20\u0b21\u0007\n\u0000\u0000\u0b21\u0202\u0001\u0000\u0000"+ + "\u0000\u0b22\u0b23\u0007\u0006\u0000\u0000\u0b23\u0b24\u0007\u000b\u0000"+ + "\u0000\u0b24\u0b25\u0007\u0002\u0000\u0000\u0b25\u0b26\u0007\u000b\u0000"+ + "\u0000\u0b26\u0b27\u0007\u0006\u0000\u0000\u0b27\u0204\u0001\u0000\u0000"+ + "\u0000\u0b28\u0b29\u0007\u000b\u0000\u0000\u0b29\u0b2a\u0007\n\u0000\u0000"+ + "\u0b2a\u0b2b\u0007\u000e\u0000\u0000\u0b2b\u0b2c\u0007\u0010\u0000\u0000"+ + "\u0b2c\u0206\u0001\u0000\u0000\u0000\u0b2d\u0b2e\u0007\u000b\u0000\u0000"+ + "\u0b2e\u0b2f\u0007\n\u0000\u0000\u0b2f\u0b30\u0007\u000e\u0000\u0000\u0b30"+ + "\u0b31\u0007\u0010\u0000\u0000\u0b31\u0b32\u0007\u0006\u0000\u0000\u0b32"+ + "\u0208\u0001\u0000\u0000\u0000\u0b33\u0b34\u0007\u000b\u0000\u0000\u0b34"+ + "\u0b35\u0007\u0011\u0000\u0000\u0b35\u0b36\u0007\u0010\u0000\u0000\u0b36"+ + "\u0b37\u0007\n\u0000\u0000\u0b37\u0b38\u0007\u0006\u0000\u0000\u0b38\u0b39"+ + "\u0007\u000b\u0000\u0000\u0b39\u0b3a\u0007\u0002\u0000\u0000\u0b3a\u0b3b"+ + "\u0007\u0010\u0000\u0000\u0b3b\u0b3c\u0007\u0015\u0000\u0000\u0b3c\u0b3d"+ + "\u0007\u0002\u0000\u0000\u0b3d\u0b3e\u0007\u0005\u0000\u0000\u0b3e\u0b3f"+ + "\u0007\u0005\u0000\u0000\u0b3f\u020a\u0001\u0000\u0000\u0000\u0b40\u0b41"+ + "\u0007\u000b\u0000\u0000\u0b41\u0b42\u0007\u0011\u0000\u0000\u0b42\u0b43"+ + "\u0007\u0010\u0000\u0000\u0b43\u0b44\u0007\n\u0000\u0000\u0b44\u0b45\u0007"+ + "\u0006\u0000\u0000\u0b45\u0b46\u0007\u000b\u0000\u0000\u0b46\u0b47\u0007"+ + "\u0002\u0000\u0000\u0b47\u0b48\u0007\u0010\u0000\u0000\u0b48\u0b49\u0007"+ + "\u0015\u0000\u0000\u0b49\u0b4a\u0007\u0005\u0000\u0000\u0b4a\u0b4b\u0007"+ + "\u0011\u0000\u0000\u0b4b\u0b4c\u0007\u0013\u0000\u0000\u0b4c\u0b4d\u0007"+ + "\u0013\u0000\u0000\u0b4d\u020c\u0001\u0000\u0000\u0000\u0b4e\u0b4f\u0007"+ + "\u000b\u0000\u0000\u0b4f\u0b50\u0007\t\u0000\u0000\u0b50\u0b51\u0007\u0015"+ + "\u0000\u0000\u0b51\u0b52\u0007\u0016\u0000\u0000\u0b52\u0b53\u0007\u0011"+ + "\u0000\u0000\u0b53\u0b54\u0007\u000b\u0000\u0000\u0b54\u0b55\u0007\u0006"+ + "\u0000\u0000\u0b55\u020e\u0001\u0000\u0000\u0000\u0b56\u0b57\u0007\u000b"+ + "\u0000\u0000\u0b57\u0b58\u0007\r\u0000\u0000\u0b58\u0b59\u0007\u0015\u0000"+ + "\u0000\u0b59\u0b5a\u0007\n\u0000\u0000\u0b5a\u0b5b\u0007\t\u0000\u0000"+ + "\u0b5b\u0b5c\u0007\u0013\u0000\u0000\u0b5c\u0210\u0001\u0000\u0000\u0000"+ + "\u0b5d\u0b5e\u0007\f\u0000\u0000\u0b5e\u0b5f\u0007\n\u0000\u0000\u0b5f"+ + "\u0b60\u0007\n\u0000\u0000\u0b60\u0b61\u0007\u0019\u0000\u0000\u0b61\u0b62"+ + "\u0005_\u0000\u0000\u0b62\u0b63\u0007\t\u0000\u0000\u0b63\u0b64\u0007"+ + "\u0013\u0000\u0000\u0b64\u0b65\u0005_\u0000\u0000\u0b65\u0b66\u0007\r"+ + "\u0000\u0000\u0b66\u0b67\u0007\n\u0000\u0000\u0b67\u0b68\u0007\u0002\u0000"+ + "\u0000\u0b68\u0b69\u0007\u000e\u0000\u0000\u0b69\u0212\u0001\u0000\u0000"+ + "\u0000\u0b6a\u0b6b\u0007\f\u0000\u0000\u0b6b\u0b6c\u0007\n\u0000\u0000"+ + "\u0b6c\u0b6d\u0007\n\u0000\u0000\u0b6d\u0b6e\u0007\u0019\u0000\u0000\u0b6e"+ + "\u0b6f\u0007\t\u0000\u0000\u0b6f\u0b70\u0007\u0013\u0000\u0000\u0b70\u0b71"+ + "\u0007\r\u0000\u0000\u0b71\u0b72\u0007\n\u0000\u0000\u0b72\u0b73\u0007"+ + "\u0002\u0000\u0000\u0b73\u0b74\u0007\u000e\u0000\u0000\u0b74\u0214\u0001"+ + "\u0000\u0000\u0000\u0b75\u0b76\u0007\f\u0000\u0000\u0b76\u0b77\u0007\n"+ + "\u0000\u0000\u0b77\u0b78\u0007\n\u0000\u0000\u0b78\u0b79\u0007\u0019\u0000"+ + "\u0000\u0b79\u0b7a\u0007\u0005\u0000\u0000\u0b7a\u0b7b\u0007\u0002\u0000"+ + "\u0000\u0b7b\u0b7c\u0007\r\u0000\u0000\u0b7c\u0216\u0001\u0000\u0000\u0000"+ + "\u0b7d\u0b7e\u0007\f\u0000\u0000\u0b7e\u0b7f\u0007\u0011\u0000\u0000\u0b7f"+ + "\u0b80\u0007\u0003\u0000\u0000\u0b80\u0b81\u0007\u0005\u0000\u0000\u0b81"+ + "\u0b82\u0007\u0007\u0000\u0000\u0b82\u0b83\u0007\u0002\u0000\u0000\u0b83"+ + "\u0b84\u0007\u000e\u0000\u0000\u0b84\u0b85\u0007\u0005\u0000\u0000\u0b85"+ + "\u0b86\u0007\u001a\u0000\u0000\u0b86\u0b87\u0007\u000f\u0000\u0000\u0b87"+ + "\u0b88\u0007\n\u0000\u0000\u0b88\u0b89\u0007\u000e\u0000\u0000\u0b89\u0b8a"+ + "\u0007\r\u0000\u0000\u0b8a\u0218\u0001\u0000\u0000\u0000\u0b8b\u0b8c\u0007"+ + "\f\u0000\u0000\u0b8c\u0b8d\u0007\u0011\u0000\u0000\u0b8d\u0b8e\u0007\u0003"+ + "\u0000\u0000\u0b8e\u0b8f\u0007\u0005\u0000\u0000\u0b8f\u0b90\u0007\u0007"+ + "\u0000\u0000\u0b90\u0b91\u0007\u0002\u0000\u0000\u0b91\u0b92\u0007\u000e"+ + "\u0000\u0000\u0b92\u0b93\u0007\u0005\u0000\u0000\u0b93\u0b94\u0005_\u0000"+ + "\u0000\u0b94\u0b95\u0007\u001a\u0000\u0000\u0b95\u0b96\u0007\u000f\u0000"+ + "\u0000\u0b96\u0b97\u0007\n\u0000\u0000\u0b97\u0b98\u0007\u000e\u0000\u0000"+ + "\u0b98\u0b99\u0007\r\u0000\u0000\u0b99\u021a\u0001\u0000\u0000\u0000\u0b9a"+ + "\u0b9b\u0007\u0006\u0000\u0000\u0b9b\u0b9c\u0007\u000f\u0000\u0000\u0b9c"+ + "\u0b9d\u0007\b\u0000\u0000\u0b9d\u0b9e\u0007\u0006\u0000\u0000\u0b9e\u0b9f"+ + "\u0007\u000b\u0000\u0000\u0b9f\u0ba0\u0007\u000e\u0000\u0000\u0ba0\u021c"+ + "\u0001\u0000\u0000\u0000\u0ba1\u0ba2\u0007\u0006\u0000\u0000\u0ba2\u0ba3"+ + "\u0007\u000b\u0000\u0000\u0ba3\u0ba4\u0007\u000e\u0000\u0000\u0ba4\u0ba5"+ + "\u0007\u0007\u0000\u0000\u0ba5\u0ba6\u0007\u0010\u0000\u0000\u0ba6\u0ba7"+ + "\u0007\u0015\u0000\u0000\u0ba7\u021e\u0001\u0000\u0000\u0000\u0ba8\u0ba9"+ + "\u0007\u0002\u0000\u0000\u0ba9\u0baa\u0007\u0005\u0000\u0000\u0baa\u0bab"+ + "\u0007\u0005\u0000\u0000\u0bab\u0bac\u0007\u0005\u0000\u0000\u0bac\u0bad"+ + "\u0007\u0002\u0000\u0000\u0bad\u0bae\u0007\u000b\u0000\u0000\u0bae\u0baf"+ + "\u0007\n\u0000\u0000\u0baf\u0220\u0001\u0000\u0000\u0000\u0bb0\u0bb1\u0007"+ + "\r\u0000\u0000\u0bb1\u0bb2\u0007\n\u0000\u0000\u0bb2\u0bb3\u0007\u0002"+ + "\u0000\u0000\u0bb3\u0bb4\u0007\u000e\u0000\u0000\u0bb4\u0bb5\u0007\f\u0000"+ + "\u0000\u0bb5\u0bb6\u0007\n\u0000\u0000\u0bb6\u0bb7\u0007\n\u0000\u0000"+ + "\u0bb7\u0bb8\u0007\u0019\u0000\u0000\u0bb8\u0222\u0001\u0000\u0000\u0000"+ + "\u0bb9\u0bba\u0007\u0002\u0000\u0000\u0bba\u0bbb\u0007\u0003\u0000\u0000"+ + "\u0bbb\u0bbc\u0007\u0003\u0000\u0000\u0bbc\u0bbd\u0007\t\u0000\u0000\u0bbd"+ + "\u0bbe\u0007\f\u0000\u0000\u0bbe\u0bbf\u0005_\u0000\u0000\u0bbf\u0bc0"+ + "\u0007\u0003\u0000\u0000\u0bc0\u0bc1\u0007\n\u0000\u0000\u0bc1\u0bc2\u0007"+ + "\u0002\u0000\u0000\u0bc2\u0bc3\u0007\u0005\u0000\u0000\u0bc3\u0bc4\u0007"+ + "\u0011\u0000\u0000\u0bc4\u0bc5\u0007\u0004\u0000\u0000\u0bc5\u0bc6\u0007"+ + "\u0014\u0000\u0000\u0bc6\u0bc7\u0005_\u0000\u0000\u0bc7\u0bc8\u0007\f"+ + "\u0000\u0000\u0bc8\u0bc9\u0007\u0011\u0000\u0000\u0bc9\u0bca\u0007\u0003"+ + "\u0000\u0000\u0bca\u0bcb\u0007\u0005\u0000\u0000\u0bcb\u0bcc\u0007\u0007"+ + "\u0000\u0000\u0bcc\u0bcd\u0007\u0002\u0000\u0000\u0bcd\u0bce\u0007\u000e"+ + "\u0000\u0000\u0bce\u0bcf\u0007\u0005\u0000\u0000\u0bcf\u0224\u0001\u0000"+ + "\u0000\u0000\u0bd0\u0bd1\u0007\u0002\u0000\u0000\u0bd1\u0bd2\u0007\u0004"+ + "\u0000\u0000\u0bd2\u0bd3\u0007\u0002\u0000\u0000\u0bd3\u0bd4\u0007\u0003"+ + "\u0000\u0000\u0bd4\u0bd5\u0007\r\u0000\u0000\u0bd5\u0bd6\u0007\u001b\u0000"+ + "\u0000\u0bd6\u0bd7\u0007\n\u0000\u0000\u0bd7\u0bd8\u0007\u000e\u0000\u0000"+ + "\u0bd8\u0226\u0001\u0000\u0000\u0000\u0bd9\u0bda\u0007\u0002\u0000\u0000"+ + "\u0bda\u0bdb\u0007\u0004\u0000\u0000\u0bdb\u0bdc\u0007\u0002\u0000\u0000"+ + "\u0bdc\u0bdd\u0007\u0003\u0000\u0000\u0bdd\u0bde\u0007\r\u0000\u0000\u0bde"+ + "\u0bdf\u0007\u001b\u0000\u0000\u0bdf\u0be0\u0007\n\u0000\u0000\u0be0\u0be1"+ + "\u0005_\u0000\u0000\u0be1\u0be2\u0007\f\u0000\u0000\u0be2\u0be3\u0007"+ + "\u0011\u0000\u0000\u0be3\u0be4\u0007\u0003\u0000\u0000\u0be4\u0be5\u0007"+ + "\u0005\u0000\u0000\u0be5\u0be6\u0007\u0007\u0000\u0000\u0be6\u0be7\u0007"+ + "\u0002\u0000\u0000\u0be7\u0be8\u0007\u000e\u0000\u0000\u0be8\u0be9\u0007"+ + "\u0005\u0000\u0000\u0be9\u0228\u0001\u0000\u0000\u0000\u0bea\u0beb\u0007"+ + "\u0002\u0000\u0000\u0beb\u0bec\u0007\u000f\u0000\u0000\u0bec\u0bed\u0007"+ + "\u000b\u0000\u0000\u0bed\u0bee\u0007\t\u0000\u0000\u0bee\u0bef\u0005_"+ + "\u0000\u0000\u0bef\u0bf0\u0007\u0014\u0000\u0000\u0bf0\u0bf1\u0007\n\u0000"+ + "\u0000\u0bf1\u0bf2\u0007\u0004\u0000\u0000\u0bf2\u0bf3\u0007\n\u0000\u0000"+ + "\u0bf3\u0bf4\u0007\u000e\u0000\u0000\u0bf4\u0bf5\u0007\u0002\u0000\u0000"+ + "\u0bf5\u0bf6\u0007\u000b\u0000\u0000\u0bf6\u0bf7\u0007\n\u0000\u0000\u0bf7"+ + "\u0bf8\u0005_\u0000\u0000\u0bf8\u0bf9\u0007\u0006\u0000\u0000\u0bf9\u0bfa"+ + "\u0007\r\u0000\u0000\u0bfa\u0bfb\u0007\u0004\u0000\u0000\u0bfb\u0bfc\u0007"+ + "\t\u0000\u0000\u0bfc\u0bfd\u0007\u0004\u0000\u0000\u0bfd\u0bfe\u0007\r"+ + "\u0000\u0000\u0bfe\u0bff\u0007\u0010\u0000\u0000\u0bff\u0c00\u0007\u0006"+ + "\u0000\u0000\u0c00\u0c01\u0005_\u0000\u0000\u0c01\u0c02\u0007\u0015\u0000"+ + "\u0000\u0c02\u0c03\u0007\u0016\u0000\u0000\u0c03\u0c04\u0007\u000e\u0000"+ + "\u0000\u0c04\u0c05\u0007\u0002\u0000\u0000\u0c05\u0c06\u0007\u0006\u0000"+ + "\u0000\u0c06\u0c07\u0007\n\u0000\u0000\u0c07\u0c08\u0005_\u0000\u0000"+ + "\u0c08\u0c09\u0007\u001a\u0000\u0000\u0c09\u0c0a\u0007\u000f\u0000\u0000"+ + "\u0c0a\u0c0b\u0007\n\u0000\u0000\u0c0b\u0c0c\u0007\u000e\u0000\u0000\u0c0c"+ + "\u0c0d\u0007\r\u0000\u0000\u0c0d\u022a\u0001\u0000\u0000\u0000\u0c0e\u0c0f"+ + "\u0007\b\u0000\u0000\u0c0f\u0c10\u0007\t\u0000\u0000\u0c10\u0c11\u0007"+ + "\t\u0000\u0000\u0c11\u0c12\u0007\u0006\u0000\u0000\u0c12\u0c13\u0007\u000b"+ + "\u0000\u0000\u0c13\u022c\u0001\u0000\u0000\u0000\u0c14\u0c15\u0007\u0007"+ + "\u0000\u0000\u0c15\u0c16\u0007\u0002\u0000\u0000\u0c16\u0c17\u0007\u0006"+ + "\u0000\u0000\u0c17\u0c18\u0007\n\u0000\u0000\u0c18\u0c19\u0005_\u0000"+ + "\u0000\u0c19\u0c1a\u0007\u0011\u0000\u0000\u0c1a\u0c1b\u0007\u0004\u0000"+ + "\u0000\u0c1b\u0c1c\u0007\u0006\u0000\u0000\u0c1c\u0c1d\u0007\n\u0000\u0000"+ + "\u0c1d\u0c1e\u0007\u0004\u0000\u0000\u0c1e\u0c1f\u0007\u0006\u0000\u0000"+ + "\u0c1f\u0c20\u0007\u0011\u0000\u0000\u0c20\u0c21\u0007\u000b\u0000\u0000"+ + "\u0c21\u0c22\u0007\u0011\u0000\u0000\u0c22\u0c23\u0007\u0017\u0000\u0000"+ + "\u0c23\u0c24\u0007\n\u0000\u0000\u0c24\u022e\u0001\u0000\u0000\u0000\u0c25"+ + "\u0c26\u0007\u0007\u0000\u0000\u0c26\u0c27\u0007\u000f\u0000\u0000\u0c27"+ + "\u0c28\u0007\u000b\u0000\u0000\u0c28\u0c29\u0007\t\u0000\u0000\u0c29\u0c2a"+ + "\u0007\u0013\u0000\u0000\u0c2a\u0c2b\u0007\u0013\u0000\u0000\u0c2b\u0c2c"+ + "\u0005_\u0000\u0000\u0c2c\u0c2d\u0007\u0013\u0000\u0000\u0c2d\u0c2e\u0007"+ + "\u000e\u0000\u0000\u0c2e\u0c2f\u0007\n\u0000\u0000\u0c2f\u0c30\u0007\u001a"+ + "\u0000\u0000\u0c30\u0c31\u0007\u000f\u0000\u0000\u0c31\u0c32\u0007\n\u0000"+ + "\u0000\u0c32\u0c33\u0007\u0004\u0000\u0000\u0c33\u0c34\u0007\u0007\u0000"+ + "\u0000\u0c34\u0c35\u0007\r\u0000\u0000\u0c35\u0230\u0001\u0000\u0000\u0000"+ + "\u0c36\u0c37\u0007\u0005\u0000\u0000\u0c37\u0c38\u0007\n\u0000\u0000\u0c38"+ + "\u0c39\u0007\u0013\u0000\u0000\u0c39\u0c3a\u0007\u0002\u0000\u0000\u0c3a"+ + "\u0c3b\u0007\u000f\u0000\u0000\u0c3b\u0c3c\u0007\u0003\u0000\u0000\u0c3c"+ + "\u0c3d\u0007\u000b\u0000\u0000\u0c3d\u0c3e\u0005_\u0000\u0000\u0c3e\u0c3f"+ + "\u0007\u0013\u0000\u0000\u0c3f\u0c40\u0007\u0011\u0000\u0000\u0c40\u0c41"+ + "\u0007\n\u0000\u0000\u0c41\u0c42\u0007\u0003\u0000\u0000\u0c42\u0c43\u0007"+ + "\u0005\u0000\u0000\u0c43\u0232\u0001\u0000\u0000\u0000\u0c44\u0c45\u0007"+ + "\u0005\u0000\u0000\u0c45\u0c46\u0007\n\u0000\u0000\u0c46\u0c47\u0007\u0013"+ + "\u0000\u0000\u0c47\u0c48\u0007\u0002\u0000\u0000\u0c48\u0c49\u0007\u000f"+ + "\u0000\u0000\u0c49\u0c4a\u0007\u0003\u0000\u0000\u0c4a\u0c4b\u0007\u000b"+ + "\u0000\u0000\u0c4b\u0c4c\u0005_\u0000\u0000\u0c4c\u0c4d\u0007\t\u0000"+ + "\u0000\u0c4d\u0c4e\u0007\u0015\u0000\u0000\u0c4e\u0c4f\u0007\n\u0000\u0000"+ + "\u0c4f\u0c50\u0007\u000e\u0000\u0000\u0c50\u0c51\u0007\u0002\u0000\u0000"+ + "\u0c51\u0c52\u0007\u000b\u0000\u0000\u0c52\u0c53\u0007\t\u0000\u0000\u0c53"+ + "\u0c54\u0007\u000e\u0000\u0000\u0c54\u0234\u0001\u0000\u0000\u0000\u0c55"+ + "\u0c56\u0007\n\u0000\u0000\u0c56\u0c57\u0007\u0006\u0000\u0000\u0c57\u0c58"+ + "\u0007\u0007\u0000\u0000\u0c58\u0c59\u0007\u0002\u0000\u0000\u0c59\u0c5a"+ + "\u0007\u0015\u0000\u0000\u0c5a\u0c5b\u0007\n\u0000\u0000\u0c5b\u0236\u0001"+ + "\u0000\u0000\u0000\u0c5c\u0c5d\u0007\n\u0000\u0000\u0c5d\u0c5e\u0007\u0004"+ + "\u0000\u0000\u0c5e\u0c5f\u0007\u0002\u0000\u0000\u0c5f\u0c60\u0007\b\u0000"+ + "\u0000\u0c60\u0c61\u0007\u0003\u0000\u0000\u0c61\u0c62\u0007\n\u0000\u0000"+ + "\u0c62\u0c63\u0005_\u0000\u0000\u0c63\u0c64\u0007\u0015\u0000\u0000\u0c64"+ + "\u0c65\u0007\t\u0000\u0000\u0c65\u0c66\u0007\u0006\u0000\u0000\u0c66\u0c67"+ + "\u0007\u0011\u0000\u0000\u0c67\u0c68\u0007\u000b\u0000\u0000\u0c68\u0c69"+ + "\u0007\u0011\u0000\u0000\u0c69\u0c6a\u0007\t\u0000\u0000\u0c6a\u0c6b\u0007"+ + "\u0004\u0000\u0000\u0c6b\u0c6c\u0005_\u0000\u0000\u0c6c\u0c6d\u0007\u0011"+ + "\u0000\u0000\u0c6d\u0c6e\u0007\u0004\u0000\u0000\u0c6e\u0c6f\u0007\u0007"+ + "\u0000\u0000\u0c6f\u0c70\u0007\u000e\u0000\u0000\u0c70\u0c71\u0007\n\u0000"+ + "\u0000\u0c71\u0c72\u0007\u0010\u0000\u0000\u0c72\u0c73\u0007\n\u0000\u0000"+ + "\u0c73\u0c74\u0007\u0004\u0000\u0000\u0c74\u0c75\u0007\u000b\u0000\u0000"+ + "\u0c75\u0c76\u0007\u0006\u0000\u0000\u0c76\u0238\u0001\u0000\u0000\u0000"+ + "\u0c77\u0c78\u0007\u0013\u0000\u0000\u0c78\u0c79\u0007\u0011\u0000\u0000"+ + "\u0c79\u0c7a\u0007\n\u0000\u0000\u0c7a\u0c7b\u0007\u0003\u0000\u0000\u0c7b"+ + "\u0c7c\u0007\u0005\u0000\u0000\u0c7c\u0c7d\u0007\u0006\u0000\u0000\u0c7d"+ + "\u023a\u0001\u0000\u0000\u0000\u0c7e\u0c7f\u0007\u0013\u0000\u0000\u0c7f"+ + "\u0c80\u0007\u0003\u0000\u0000\u0c80\u0c81\u0007\u0002\u0000\u0000\u0c81"+ + "\u0c82\u0007\u0014\u0000\u0000\u0c82\u0c83\u0007\u0006\u0000\u0000\u0c83"+ + "\u023c\u0001\u0000\u0000\u0000\u0c84\u0c85\u0007\u0013\u0000\u0000\u0c85"+ + "\u0c86\u0007\u000f\u0000\u0000\u0c86\u0c87\u0007\u001b\u0000\u0000\u0c87"+ + "\u0c88\u0007\u001b\u0000\u0000\u0c88\u0c89\u0007\u0011\u0000\u0000\u0c89"+ + "\u0c8a\u0007\u0004\u0000\u0000\u0c8a\u0c8b\u0007\n\u0000\u0000\u0c8b\u0c8c"+ + "\u0007\u0006\u0000\u0000\u0c8c\u0c8d\u0007\u0006\u0000\u0000\u0c8d\u023e"+ + "\u0001\u0000\u0000\u0000\u0c8e\u0c8f\u0007\u0013\u0000\u0000\u0c8f\u0c90"+ + "\u0007\u000f\u0000\u0000\u0c90\u0c91\u0007\u001b\u0000\u0000\u0c91\u0c92"+ + "\u0007\u001b\u0000\u0000\u0c92\u0c93\u0007\r\u0000\u0000\u0c93\u0c94\u0005"+ + "_\u0000\u0000\u0c94\u0c95\u0007\u0010\u0000\u0000\u0c95\u0c96\u0007\u0002"+ + "\u0000\u0000\u0c96\u0c97\u0007\u0012\u0000\u0000\u0c97\u0c98\u0005_\u0000"+ + "\u0000\u0c98\u0c99\u0007\n\u0000\u0000\u0c99\u0c9a\u0007\u0012\u0000\u0000"+ + "\u0c9a\u0c9b\u0007\u0015\u0000\u0000\u0c9b\u0c9c\u0007\u0002\u0000\u0000"+ + "\u0c9c\u0c9d\u0007\u0004\u0000\u0000\u0c9d\u0c9e\u0007\u0006\u0000\u0000"+ + "\u0c9e\u0c9f\u0007\u0011\u0000\u0000\u0c9f\u0ca0\u0007\t\u0000\u0000\u0ca0"+ + "\u0ca1\u0007\u0004\u0000\u0000\u0ca1\u0ca2\u0007\u0006\u0000\u0000\u0ca2"+ + "\u0240\u0001\u0000\u0000\u0000\u0ca3\u0ca4\u0007\u0013\u0000\u0000\u0ca4"+ + "\u0ca5\u0007\u000f\u0000\u0000\u0ca5\u0ca6\u0007\u001b\u0000\u0000\u0ca6"+ + "\u0ca7\u0007\u001b\u0000\u0000\u0ca7\u0ca8\u0007\r\u0000\u0000\u0ca8\u0ca9"+ + "\u0005_\u0000\u0000\u0ca9\u0caa\u0007\u0015\u0000\u0000\u0caa\u0cab\u0007"+ + "\u000e\u0000\u0000\u0cab\u0cac\u0007\n\u0000\u0000\u0cac\u0cad\u0007\u0013"+ + "\u0000\u0000\u0cad\u0cae\u0007\u0011\u0000\u0000\u0cae\u0caf\u0007\u0012"+ + "\u0000\u0000\u0caf\u0cb0\u0005_\u0000\u0000\u0cb0\u0cb1\u0007\u0003\u0000"+ + "\u0000\u0cb1\u0cb2\u0007\n\u0000\u0000\u0cb2\u0cb3\u0007\u0004\u0000\u0000"+ + "\u0cb3\u0cb4\u0007\u0014\u0000\u0000\u0cb4\u0cb5\u0007\u000b\u0000\u0000"+ + "\u0cb5\u0cb6\u0007\u0016\u0000\u0000\u0cb6\u0242\u0001\u0000\u0000\u0000"+ + "\u0cb7\u0cb8\u0007\u0013\u0000\u0000\u0cb8\u0cb9\u0007\u000f\u0000\u0000"+ + "\u0cb9\u0cba\u0007\u001b\u0000\u0000\u0cba\u0cbb\u0007\u001b\u0000\u0000"+ + "\u0cbb\u0cbc\u0007\r\u0000\u0000\u0cbc\u0cbd\u0005_\u0000\u0000\u0cbd"+ + "\u0cbe\u0007\u000e\u0000\u0000\u0cbe\u0cbf\u0007\n\u0000\u0000\u0cbf\u0cc0"+ + "\u0007\f\u0000\u0000\u0cc0\u0cc1\u0007\u000e\u0000\u0000\u0cc1\u0cc2\u0007"+ + "\u0011\u0000\u0000\u0cc2\u0cc3\u0007\u000b\u0000\u0000\u0cc3\u0cc4\u0007"+ + "\n\u0000\u0000\u0cc4\u0244\u0001\u0000\u0000\u0000\u0cc5\u0cc6\u0007\u0013"+ + "\u0000\u0000\u0cc6\u0cc7\u0007\u000f\u0000\u0000\u0cc7\u0cc8\u0007\u001b"+ + "\u0000\u0000\u0cc8\u0cc9\u0007\u001b\u0000\u0000\u0cc9\u0cca\u0007\r\u0000"+ + "\u0000\u0cca\u0ccb\u0005_\u0000\u0000\u0ccb\u0ccc\u0007\u000b\u0000\u0000"+ + "\u0ccc\u0ccd\u0007\u000e\u0000\u0000\u0ccd\u0cce\u0007\u0002\u0000\u0000"+ + "\u0cce\u0ccf\u0007\u0004\u0000\u0000\u0ccf\u0cd0\u0007\u0006\u0000\u0000"+ + "\u0cd0\u0cd1\u0007\u0015\u0000\u0000\u0cd1\u0cd2\u0007\t\u0000\u0000\u0cd2"+ + "\u0cd3\u0007\u0006\u0000\u0000\u0cd3\u0cd4\u0007\u0011\u0000\u0000\u0cd4"+ + "\u0cd5\u0007\u000b\u0000\u0000\u0cd5\u0cd6\u0007\u0011\u0000\u0000\u0cd6"+ + "\u0cd7\u0007\t\u0000\u0000\u0cd7\u0cd8\u0007\u0004\u0000\u0000\u0cd8\u0cd9"+ + "\u0007\u0006\u0000\u0000\u0cd9\u0246\u0001\u0000\u0000\u0000\u0cda\u0cdb"+ + "\u0007\u0003\u0000\u0000\u0cdb\u0cdc\u0007\n\u0000\u0000\u0cdc\u0cdd\u0007"+ + "\u0004\u0000\u0000\u0cdd\u0cde\u0007\u0011\u0000\u0000\u0cde\u0cdf\u0007"+ + "\n\u0000\u0000\u0cdf\u0ce0\u0007\u0004\u0000\u0000\u0ce0\u0ce1\u0007\u000b"+ + "\u0000\u0000\u0ce1\u0248\u0001\u0000\u0000\u0000\u0ce2\u0ce3\u0007\u0003"+ + "\u0000\u0000\u0ce3\u0ce4\u0007\t\u0000\u0000\u0ce4\u0ce5\u0007\f\u0000"+ + "\u0000\u0ce5\u0ce6\u0005_\u0000\u0000\u0ce6\u0ce7\u0007\u0013\u0000\u0000"+ + "\u0ce7\u0ce8\u0007\u000e\u0000\u0000\u0ce8\u0ce9\u0007\n\u0000\u0000\u0ce9"+ + "\u0cea\u0007\u001a\u0000\u0000\u0cea\u0ceb\u0005_\u0000\u0000\u0ceb\u0cec"+ + "\u0007\t\u0000\u0000\u0cec\u0ced\u0007\u0015\u0000\u0000\u0ced\u0cee\u0007"+ + "\n\u0000\u0000\u0cee\u0cef\u0007\u000e\u0000\u0000\u0cef\u0cf0\u0007\u0002"+ + "\u0000\u0000\u0cf0\u0cf1\u0007\u000b\u0000\u0000\u0cf1\u0cf2\u0007\t\u0000"+ + "\u0000\u0cf2\u0cf3\u0007\u000e\u0000\u0000\u0cf3\u024a\u0001\u0000\u0000"+ + "\u0000\u0cf4\u0cf5\u0007\u0010\u0000\u0000\u0cf5\u0cf6\u0007\u0002\u0000"+ + "\u0000\u0cf6\u0cf7\u0007\u0012\u0000\u0000\u0cf7\u0cf8\u0005_\u0000\u0000"+ + "\u0cf8\u0cf9\u0007\u0005\u0000\u0000\u0cf9\u0cfa\u0007\n\u0000\u0000\u0cfa"+ + "\u0cfb\u0007\u000b\u0000\u0000\u0cfb\u0cfc\u0007\n\u0000\u0000\u0cfc\u0cfd"+ + "\u0007\u000e\u0000\u0000\u0cfd\u0cfe\u0007\u0010\u0000\u0000\u0cfe\u0cff"+ + "\u0007\u0011\u0000\u0000\u0cff\u0d00\u0007\u0004\u0000\u0000\u0d00\u0d01"+ + "\u0007\u0011\u0000\u0000\u0d01\u0d02\u0007\u001b\u0000\u0000\u0d02\u0d03"+ + "\u0007\n\u0000\u0000\u0d03\u0d04\u0007\u0005\u0000\u0000\u0d04\u0d05\u0005"+ + "_\u0000\u0000\u0d05\u0d06\u0007\u0006\u0000\u0000\u0d06\u0d07\u0007\u000b"+ + "\u0000\u0000\u0d07\u0d08\u0007\u0002\u0000\u0000\u0d08\u0d09\u0007\u000b"+ + "\u0000\u0000\u0d09\u0d0a\u0007\n\u0000\u0000\u0d0a\u0d0b\u0007\u0006\u0000"+ + "\u0000\u0d0b\u024c\u0001\u0000\u0000\u0000\u0d0c\u0d0d\u0007\u0010\u0000"+ + "\u0000\u0d0d\u0d0e\u0007\u0002\u0000\u0000\u0d0e\u0d0f\u0007\u0012\u0000"+ + "\u0000\u0d0f\u0d10\u0005_\u0000\u0000\u0d10\u0d11\u0007\n\u0000\u0000"+ + "\u0d11\u0d12\u0007\u0012\u0000\u0000\u0d12\u0d13\u0007\u0015\u0000\u0000"+ + "\u0d13\u0d14\u0007\u0002\u0000\u0000\u0d14\u0d15\u0007\u0004\u0000\u0000"+ + "\u0d15\u0d16\u0007\u0006\u0000\u0000\u0d16\u0d17\u0007\u0011\u0000\u0000"+ + "\u0d17\u0d18\u0007\t\u0000\u0000\u0d18\u0d19\u0007\u0004\u0000\u0000\u0d19"+ + "\u0d1a\u0007\u0006\u0000\u0000\u0d1a\u024e\u0001\u0000\u0000\u0000\u0d1b"+ + "\u0d1c\u0007\u0010\u0000\u0000\u0d1c\u0d1d\u0007\u0011\u0000\u0000\u0d1d"+ + "\u0d1e\u0007\u0004\u0000\u0000\u0d1e\u0d1f\u0007\u0011\u0000\u0000\u0d1f"+ + "\u0d20\u0007\u0010\u0000\u0000\u0d20\u0d21\u0007\u000f\u0000\u0000\u0d21"+ + "\u0d22\u0007\u0010\u0000\u0000\u0d22\u0d23\u0005_\u0000\u0000\u0d23\u0d24"+ + "\u0007\u0006\u0000\u0000\u0d24\u0d25\u0007\u0016\u0000\u0000\u0d25\u0d26"+ + "\u0007\t\u0000\u0000\u0d26\u0d27\u0007\u000f\u0000\u0000\u0d27\u0d28\u0007"+ + "\u0003\u0000\u0000\u0d28\u0d29\u0007\u0005\u0000\u0000\u0d29\u0d2a\u0005"+ + "_\u0000\u0000\u0d2a\u0d2b\u0007\u0010\u0000\u0000\u0d2b\u0d2c\u0007\u0002"+ + "\u0000\u0000\u0d2c\u0d2d\u0007\u000b\u0000\u0000\u0d2d\u0d2e\u0007\u0007"+ + "\u0000\u0000\u0d2e\u0d2f\u0007\u0016\u0000\u0000\u0d2f\u0250\u0001\u0000"+ + "\u0000\u0000\u0d30\u0d31\u0007\t\u0000\u0000\u0d31\u0d32\u0007\u0015\u0000"+ + "\u0000\u0d32\u0d33\u0007\n\u0000\u0000\u0d33\u0d34\u0007\u000e\u0000\u0000"+ + "\u0d34\u0d35\u0007\u0002\u0000\u0000\u0d35\u0d36\u0007\u000b\u0000\u0000"+ + "\u0d36\u0d37\u0007\t\u0000\u0000\u0d37\u0d38\u0007\u000e\u0000\u0000\u0d38"+ + "\u0252\u0001\u0000\u0000\u0000\u0d39\u0d3a\u0007\u0015\u0000\u0000\u0d3a"+ + "\u0d3b\u0007\u0016\u0000\u0000\u0d3b\u0d3c\u0007\u000e\u0000\u0000\u0d3c"+ + "\u0d3d\u0007\u0002\u0000\u0000\u0d3d\u0d3e\u0007\u0006\u0000\u0000\u0d3e"+ + "\u0d3f\u0007\n\u0000\u0000\u0d3f\u0d40\u0005_\u0000\u0000\u0d40\u0d41"+ + "\u0007\u0006\u0000\u0000\u0d41\u0d42\u0007\u0003\u0000\u0000\u0d42\u0d43"+ + "\u0007\t\u0000\u0000\u0d43\u0d44\u0007\u0015\u0000\u0000\u0d44\u0254\u0001"+ + "\u0000\u0000\u0000\u0d45\u0d46\u0007\u0015\u0000\u0000\u0d46\u0d47\u0007"+ + "\u000e\u0000\u0000\u0d47\u0d48\u0007\n\u0000\u0000\u0d48\u0d49\u0007\u0013"+ + "\u0000\u0000\u0d49\u0d4a\u0007\u0011\u0000\u0000\u0d4a\u0d4b\u0007\u0012"+ + "\u0000\u0000\u0d4b\u0d4c\u0005_\u0000\u0000\u0d4c\u0d4d\u0007\u0003\u0000"+ + "\u0000\u0d4d\u0d4e\u0007\n\u0000\u0000\u0d4e\u0d4f\u0007\u0004\u0000\u0000"+ + "\u0d4f\u0d50\u0007\u0014\u0000\u0000\u0d50\u0d51\u0007\u000b\u0000\u0000"+ + "\u0d51\u0d52\u0007\u0016\u0000\u0000\u0d52\u0256\u0001\u0000\u0000\u0000"+ + "\u0d53\u0d54\u0007\u001a\u0000\u0000\u0d54\u0d55\u0007\u000f\u0000\u0000"+ + "\u0d55\u0d56\u0007\t\u0000\u0000\u0d56\u0d57\u0007\u000b\u0000\u0000\u0d57"+ + "\u0d58\u0007\n\u0000\u0000\u0d58\u0d59\u0005_\u0000\u0000\u0d59\u0d5a"+ + "\u0007\u0002\u0000\u0000\u0d5a\u0d5b\u0007\u0004\u0000\u0000\u0d5b\u0d5c"+ + "\u0007\u0002\u0000\u0000\u0d5c\u0d5d\u0007\u0003\u0000\u0000\u0d5d\u0d5e"+ + "\u0007\r\u0000\u0000\u0d5e\u0d5f\u0007\u001b\u0000\u0000\u0d5f\u0d60\u0007"+ + "\n\u0000\u0000\u0d60\u0d61\u0007\u000e\u0000\u0000\u0d61\u0258\u0001\u0000"+ + "\u0000\u0000\u0d62\u0d63\u0007\u001a\u0000\u0000\u0d63\u0d64\u0007\u000f"+ + "\u0000\u0000\u0d64\u0d65\u0007\t\u0000\u0000\u0d65\u0d66\u0007\u000b\u0000"+ + "\u0000\u0d66\u0d67\u0007\n\u0000\u0000\u0d67\u0d68\u0005_\u0000\u0000"+ + "\u0d68\u0d69\u0007\u0013\u0000\u0000\u0d69\u0d6a\u0007\u0011\u0000\u0000"+ + "\u0d6a\u0d6b\u0007\n\u0000\u0000\u0d6b\u0d6c\u0007\u0003\u0000\u0000\u0d6c"+ + "\u0d6d\u0007\u0005\u0000\u0000\u0d6d\u0d6e\u0005_\u0000\u0000\u0d6e\u0d6f"+ + "\u0007\u0006\u0000\u0000\u0d6f\u0d70\u0007\u000f\u0000\u0000\u0d70\u0d71"+ + "\u0007\u0013\u0000\u0000\u0d71\u0d72\u0007\u0013\u0000\u0000\u0d72\u0d73"+ + "\u0007\u0011\u0000\u0000\u0d73\u0d74\u0007\u0012\u0000\u0000\u0d74\u025a"+ + "\u0001\u0000\u0000\u0000\u0d75\u0d76\u0007\u000e\u0000\u0000\u0d76\u0d77"+ + "\u0007\n\u0000\u0000\u0d77\u0d78\u0007\f\u0000\u0000\u0d78\u0d79\u0007"+ + "\u000e\u0000\u0000\u0d79\u0d7a\u0007\u0011\u0000\u0000\u0d7a\u0d7b\u0007"+ + "\u000b\u0000\u0000\u0d7b\u0d7c\u0007\n\u0000\u0000\u0d7c\u025c\u0001\u0000"+ + "\u0000\u0000\u0d7d\u0d7e\u0007\u0006\u0000\u0000\u0d7e\u0d7f\u0007\u0003"+ + "\u0000\u0000\u0d7f\u0d80\u0007\t\u0000\u0000\u0d80\u0d81\u0007\u0015\u0000"+ + "\u0000\u0d81\u025e\u0001\u0000\u0000\u0000\u0d82\u0d83\u0007\u000b\u0000"+ + "\u0000\u0d83\u0d84\u0007\u0011\u0000\u0000\u0d84\u0d85\u0007\n\u0000\u0000"+ + "\u0d85\u0d86\u0005_\u0000\u0000\u0d86\u0d87\u0007\b\u0000\u0000\u0d87"+ + "\u0d88\u0007\u000e\u0000\u0000\u0d88\u0d89\u0007\n\u0000\u0000\u0d89\u0d8a"+ + "\u0007\u0002\u0000\u0000\u0d8a\u0d8b\u0007\u0019\u0000\u0000\u0d8b\u0d8c"+ + "\u0007\n\u0000\u0000\u0d8c\u0d8d\u0007\u000e\u0000\u0000\u0d8d\u0260\u0001"+ + "\u0000\u0000\u0000\u0d8e\u0d8f\u0007\u000b\u0000\u0000\u0d8f\u0d90\u0007"+ + "\u0011\u0000\u0000\u0d90\u0d91\u0007\u0010\u0000\u0000\u0d91\u0d92\u0007"+ + "\n\u0000\u0000\u0d92\u0d93\u0005_\u0000\u0000\u0d93\u0d94\u0007\u001b"+ + "\u0000\u0000\u0d94\u0d95\u0007\t\u0000\u0000\u0d95\u0d96\u0007\u0004\u0000"+ + "\u0000\u0d96\u0d97\u0007\n\u0000\u0000\u0d97\u0262\u0001\u0000\u0000\u0000"+ + "\u0d98\u0d99\u0007\u000b\u0000\u0000\u0d99\u0d9a\u0007\r\u0000\u0000\u0d9a"+ + "\u0d9b\u0007\u0015\u0000\u0000\u0d9b\u0d9c\u0007\n\u0000\u0000\u0d9c\u0264"+ + "\u0001\u0000\u0000\u0000\u0d9d\u0d9e\u0007\u001b\u0000\u0000\u0d9e\u0d9f"+ + "\u0007\n\u0000\u0000\u0d9f\u0da0\u0007\u000e\u0000\u0000\u0da0\u0da1\u0007"+ + "\t\u0000\u0000\u0da1\u0da2\u0005_\u0000\u0000\u0da2\u0da3\u0007\u000b"+ + "\u0000\u0000\u0da3\u0da4\u0007\n\u0000\u0000\u0da4\u0da5\u0007\u000e\u0000"+ + "\u0000\u0da5\u0da6\u0007\u0010\u0000\u0000\u0da6\u0da7\u0007\u0006\u0000"+ + "\u0000\u0da7\u0da8\u0005_\u0000\u0000\u0da8\u0da9\u0007\u001a\u0000\u0000"+ + "\u0da9\u0daa\u0007\u000f\u0000\u0000\u0daa\u0dab\u0007\n\u0000\u0000\u0dab"+ + "\u0dac\u0007\u000e\u0000\u0000\u0dac\u0dad\u0007\r\u0000\u0000\u0dad\u0266"+ + "\u0001\u0000\u0000\u0000\u0dae\u0daf\u0007\u0016\u0000\u0000\u0daf\u0db0"+ + "\u0007\u0011\u0000\u0000\u0db0\u0db1\u0007\u0014\u0000\u0000\u0db1\u0db2"+ + "\u0007\u0016\u0000\u0000\u0db2\u0db3\u0007\u0003\u0000\u0000\u0db3\u0db4"+ + "\u0007\u0011\u0000\u0000\u0db4\u0db5\u0007\u0014\u0000\u0000\u0db5\u0db6"+ + "\u0007\u0016\u0000\u0000\u0db6\u0db7\u0007\u000b\u0000\u0000\u0db7\u0268"+ + "\u0001\u0000\u0000\u0000\u0db8\u0db9\u0007\u0015\u0000\u0000\u0db9\u0dba"+ + "\u0007\u000e\u0000\u0000\u0dba\u0dbb\u0007\n\u0000\u0000\u0dbb\u0dbc\u0005"+ + "_\u0000\u0000\u0dbc\u0dbd\u0007\u000b\u0000\u0000\u0dbd\u0dbe\u0007\u0002"+ + "\u0000\u0000\u0dbe\u0dbf\u0007\u0014\u0000\u0000\u0dbf\u0dc0\u0007\u0006"+ + "\u0000\u0000\u0dc0\u026a\u0001\u0000\u0000\u0000\u0dc1\u0dc2\u0007\u0015"+ + "\u0000\u0000\u0dc2\u0dc3\u0007\t\u0000\u0000\u0dc3\u0dc4\u0007\u0006\u0000"+ + "\u0000\u0dc4\u0dc5\u0007\u000b\u0000\u0000\u0dc5\u0dc6\u0005_\u0000\u0000"+ + "\u0dc6\u0dc7\u0007\u000b\u0000\u0000\u0dc7\u0dc8\u0007\u0002\u0000\u0000"+ + "\u0dc8\u0dc9\u0007\u0014\u0000\u0000\u0dc9\u0dca\u0007\u0006\u0000\u0000"+ + "\u0dca\u026c\u0001\u0000\u0000\u0000\u0dcb\u0dcc\u0007\u0010\u0000\u0000"+ + "\u0dcc\u0dcd\u0007\u0002\u0000\u0000\u0dcd\u0dce\u0007\u000b\u0000\u0000"+ + "\u0dce\u0dcf\u0007\u0007\u0000\u0000\u0dcf\u0dd0\u0007\u0016\u0000\u0000"+ + "\u0dd0\u0dd1\u0005_\u0000\u0000\u0dd1\u0dd2\u0007\b\u0000\u0000\u0dd2"+ + "\u0dd3\u0007\t\u0000\u0000\u0dd3\u0dd4\u0007\t\u0000\u0000\u0dd4\u0dd5"+ + "\u0007\u0003\u0000\u0000\u0dd5\u0dd6\u0005_\u0000\u0000\u0dd6\u0dd7\u0007"+ + "\u0015\u0000\u0000\u0dd7\u0dd8\u0007\u000e\u0000\u0000\u0dd8\u0dd9\u0007"+ + "\n\u0000\u0000\u0dd9\u0dda\u0007\u0013\u0000\u0000\u0dda\u0ddb\u0007\u0011"+ + "\u0000\u0000\u0ddb\u0ddc\u0007\u0012\u0000\u0000\u0ddc\u026e\u0001\u0000"+ + "\u0000\u0000\u0ddd\u0dde\u0005*\u0000\u0000\u0dde\u0270\u0001\u0000\u0000"+ + "\u0000\u0ddf\u0de0\u0005/\u0000\u0000\u0de0\u0272\u0001\u0000\u0000\u0000"+ + "\u0de1\u0de2\u0005%\u0000\u0000\u0de2\u0274\u0001\u0000\u0000\u0000\u0de3"+ + "\u0de4\u0005+\u0000\u0000\u0de4\u0276\u0001\u0000\u0000\u0000\u0de5\u0de6"+ + "\u0005-\u0000\u0000\u0de6\u0278\u0001\u0000\u0000\u0000\u0de7\u0de8\u0007"+ + "\u0005\u0000\u0000\u0de8\u0de9\u0007\u0011\u0000\u0000\u0de9\u0dea\u0007"+ + "\u0017\u0000\u0000\u0dea\u027a\u0001\u0000\u0000\u0000\u0deb\u0dec\u0007"+ + "\u0010\u0000\u0000\u0dec\u0ded\u0007\t\u0000\u0000\u0ded\u0dee\u0007\u0005"+ + "\u0000\u0000\u0dee\u027c\u0001\u0000\u0000\u0000\u0def\u0df0\u0005=\u0000"+ + "\u0000\u0df0\u027e\u0001\u0000\u0000\u0000\u0df1\u0df2\u0005>\u0000\u0000"+ + "\u0df2\u0280\u0001\u0000\u0000\u0000\u0df3\u0df4\u0005<\u0000\u0000\u0df4"+ + "\u0282\u0001\u0000\u0000\u0000\u0df5\u0df6\u0005!\u0000\u0000\u0df6\u0284"+ + "\u0001\u0000\u0000\u0000\u0df7\u0df8\u0005~\u0000\u0000\u0df8\u0286\u0001"+ + "\u0000\u0000\u0000\u0df9\u0dfa\u0005|\u0000\u0000\u0dfa\u0288\u0001\u0000"+ + "\u0000\u0000\u0dfb\u0dfc\u0005&\u0000\u0000\u0dfc\u028a\u0001\u0000\u0000"+ + "\u0000\u0dfd\u0dfe\u0005^\u0000\u0000\u0dfe\u028c\u0001\u0000\u0000\u0000"+ + "\u0dff\u0e00\u0005.\u0000\u0000\u0e00\u028e\u0001\u0000\u0000\u0000\u0e01"+ + "\u0e02\u0005(\u0000\u0000\u0e02\u0290\u0001\u0000\u0000\u0000\u0e03\u0e04"+ + "\u0005)\u0000\u0000\u0e04\u0292\u0001\u0000\u0000\u0000\u0e05\u0e06\u0005"+ + "[\u0000\u0000\u0e06\u0294\u0001\u0000\u0000\u0000\u0e07\u0e08\u0005]\u0000"+ + "\u0000\u0e08\u0296\u0001\u0000\u0000\u0000\u0e09\u0e0a\u0005,\u0000\u0000"+ + "\u0e0a\u0298\u0001\u0000\u0000\u0000\u0e0b\u0e0c\u0005;\u0000\u0000\u0e0c"+ + "\u029a\u0001\u0000\u0000\u0000\u0e0d\u0e0e\u0005@\u0000\u0000\u0e0e\u029c"+ + "\u0001\u0000\u0000\u0000\u0e0f\u0e10\u00050\u0000\u0000\u0e10\u029e\u0001"+ + "\u0000\u0000\u0000\u0e11\u0e12\u00051\u0000\u0000\u0e12\u02a0\u0001\u0000"+ + "\u0000\u0000\u0e13\u0e14\u00052\u0000\u0000\u0e14\u02a2\u0001\u0000\u0000"+ + "\u0000\u0e15\u0e16\u0005\'\u0000\u0000\u0e16\u02a4\u0001\u0000\u0000\u0000"+ + "\u0e17\u0e18\u0005\"\u0000\u0000\u0e18\u02a6\u0001\u0000\u0000\u0000\u0e19"+ + "\u0e1a\u0005`\u0000\u0000\u0e1a\u02a8\u0001\u0000\u0000\u0000\u0e1b\u0e1c"+ + "\u0005:\u0000\u0000\u0e1c\u02aa\u0001\u0000\u0000\u0000\u0e1d\u0e1e\u0007"+ + "\u0004\u0000\u0000\u0e1e\u0e1f\u0003\u02c5\u0162\u0000\u0e1f\u02ac\u0001"+ + "\u0000\u0000\u0000\u0e20\u0e21\u0003\u02c5\u0162\u0000\u0e21\u02ae\u0001"+ + "\u0000\u0000\u0000\u0e22\u0e24\u0003\u02cb\u0165\u0000\u0e23\u0e22\u0001"+ + "\u0000\u0000\u0000\u0e24\u0e25\u0001\u0000\u0000\u0000\u0e25\u0e23\u0001"+ + "\u0000\u0000\u0000\u0e25\u0e26\u0001\u0000\u0000\u0000\u0e26\u02b0\u0001"+ + "\u0000\u0000\u0000\u0e27\u0e28\u0007\u0012\u0000\u0000\u0e28\u0e2c\u0005"+ + "\'\u0000\u0000\u0e29\u0e2a\u0003\u02c9\u0164\u0000\u0e2a\u0e2b\u0003\u02c9"+ + "\u0164\u0000\u0e2b\u0e2d\u0001\u0000\u0000\u0000\u0e2c\u0e29\u0001\u0000"+ + "\u0000\u0000\u0e2d\u0e2e\u0001\u0000\u0000\u0000\u0e2e\u0e2c\u0001\u0000"+ + "\u0000\u0000\u0e2e\u0e2f\u0001\u0000\u0000\u0000\u0e2f\u0e30\u0001\u0000"+ + "\u0000\u0000\u0e30\u0e31\u0005\'\u0000\u0000\u0e31\u0e3b\u0001\u0000\u0000"+ + "\u0000\u0e32\u0e33\u00050\u0000\u0000\u0e33\u0e34\u0007\u0012\u0000\u0000"+ + "\u0e34\u0e36\u0001\u0000\u0000\u0000\u0e35\u0e37\u0003\u02c9\u0164\u0000"+ + "\u0e36\u0e35\u0001\u0000\u0000\u0000\u0e37\u0e38\u0001\u0000\u0000\u0000"+ + "\u0e38\u0e36\u0001\u0000\u0000\u0000\u0e38\u0e39\u0001\u0000\u0000\u0000"+ + "\u0e39\u0e3b\u0001\u0000\u0000\u0000\u0e3a\u0e27\u0001\u0000\u0000\u0000"+ + "\u0e3a\u0e32\u0001\u0000\u0000\u0000\u0e3b\u02b2\u0001\u0000\u0000\u0000"+ + "\u0e3c\u0e3e\u0003\u02cb\u0165\u0000\u0e3d\u0e3c\u0001\u0000\u0000\u0000"+ + "\u0e3e\u0e3f\u0001\u0000\u0000\u0000\u0e3f\u0e3d\u0001\u0000\u0000\u0000"+ + "\u0e3f\u0e40\u0001\u0000\u0000\u0000\u0e40\u0e42\u0001\u0000\u0000\u0000"+ + "\u0e41\u0e3d\u0001\u0000\u0000\u0000\u0e41\u0e42\u0001\u0000\u0000\u0000"+ + "\u0e42\u0e43\u0001\u0000\u0000\u0000\u0e43\u0e45\u0005.\u0000\u0000\u0e44"+ + "\u0e46\u0003\u02cb\u0165\u0000\u0e45\u0e44\u0001\u0000\u0000\u0000\u0e46"+ + "\u0e47\u0001\u0000\u0000\u0000\u0e47\u0e45\u0001\u0000\u0000\u0000\u0e47"+ + "\u0e48\u0001\u0000\u0000\u0000\u0e48\u0e68\u0001\u0000\u0000\u0000\u0e49"+ + "\u0e4b\u0003\u02cb\u0165\u0000\u0e4a\u0e49\u0001\u0000\u0000\u0000\u0e4b"+ + "\u0e4c\u0001\u0000\u0000\u0000\u0e4c\u0e4a\u0001\u0000\u0000\u0000\u0e4c"+ + "\u0e4d\u0001\u0000\u0000\u0000\u0e4d\u0e4e\u0001\u0000\u0000\u0000\u0e4e"+ + "\u0e4f\u0005.\u0000\u0000\u0e4f\u0e50\u0003\u02bf\u015f\u0000\u0e50\u0e68"+ + "\u0001\u0000\u0000\u0000\u0e51\u0e53\u0003\u02cb\u0165\u0000\u0e52\u0e51"+ + "\u0001\u0000\u0000\u0000\u0e53\u0e54\u0001\u0000\u0000\u0000\u0e54\u0e52"+ + "\u0001\u0000\u0000\u0000\u0e54\u0e55\u0001\u0000\u0000\u0000\u0e55\u0e57"+ + "\u0001\u0000\u0000\u0000\u0e56\u0e52\u0001\u0000\u0000\u0000\u0e56\u0e57"+ + "\u0001\u0000\u0000\u0000\u0e57\u0e58\u0001\u0000\u0000\u0000\u0e58\u0e5a"+ + "\u0005.\u0000\u0000\u0e59\u0e5b\u0003\u02cb\u0165\u0000\u0e5a\u0e59\u0001"+ + "\u0000\u0000\u0000\u0e5b\u0e5c\u0001\u0000\u0000\u0000\u0e5c\u0e5a\u0001"+ + "\u0000\u0000\u0000\u0e5c\u0e5d\u0001\u0000\u0000\u0000\u0e5d\u0e5e\u0001"+ + "\u0000\u0000\u0000\u0e5e\u0e5f\u0003\u02bf\u015f\u0000\u0e5f\u0e68\u0001"+ + "\u0000\u0000\u0000\u0e60\u0e62\u0003\u02cb\u0165\u0000\u0e61\u0e60\u0001"+ + "\u0000\u0000\u0000\u0e62\u0e63\u0001\u0000\u0000\u0000\u0e63\u0e61\u0001"+ + "\u0000\u0000\u0000\u0e63\u0e64\u0001\u0000\u0000\u0000\u0e64\u0e65\u0001"+ + "\u0000\u0000\u0000\u0e65\u0e66\u0003\u02bf\u015f\u0000\u0e66\u0e68\u0001"+ + "\u0000\u0000\u0000\u0e67\u0e41\u0001\u0000\u0000\u0000\u0e67\u0e4a\u0001"+ + "\u0000\u0000\u0000\u0e67\u0e56\u0001\u0000\u0000\u0000\u0e67\u0e61\u0001"+ + "\u0000\u0000\u0000\u0e68\u02b4\u0001\u0000\u0000\u0000\u0e69\u0e6a\u0005"+ + "\\\u0000\u0000\u0e6a\u0e6b\u0007\u0004\u0000\u0000\u0e6b\u02b6\u0001\u0000"+ + "\u0000\u0000\u0e6c\u0e6d\u0003\u02cd\u0166\u0000\u0e6d\u02b8\u0001\u0000"+ + "\u0000\u0000\u0e6e\u0e6f\u0003\u02c1\u0160\u0000\u0e6f\u02ba\u0001\u0000"+ + "\u0000\u0000\u0e70\u0e71\u0003\u02c3\u0161\u0000\u0e71\u02bc\u0001\u0000"+ + "\u0000\u0000\u0e72\u0e73\u0003\u02c7\u0163\u0000\u0e73\u02be\u0001\u0000"+ + "\u0000\u0000\u0e74\u0e76\u0007\n\u0000\u0000\u0e75\u0e77\u0007\u001c\u0000"+ + "\u0000\u0e76\u0e75\u0001\u0000\u0000\u0000\u0e76\u0e77\u0001\u0000\u0000"+ + "\u0000\u0e77\u0e79\u0001\u0000\u0000\u0000\u0e78\u0e7a\u0003\u02cb\u0165"+ + "\u0000\u0e79\u0e78\u0001\u0000\u0000\u0000\u0e7a\u0e7b\u0001\u0000\u0000"+ + "\u0000\u0e7b\u0e79\u0001\u0000\u0000\u0000\u0e7b\u0e7c\u0001\u0000\u0000"+ + "\u0000\u0e7c\u02c0\u0001\u0000\u0000\u0000\u0e7d\u0e7f\u0007\u001d\u0000"+ + "\u0000\u0e7e\u0e7d\u0001\u0000\u0000\u0000\u0e7f\u0e80\u0001\u0000\u0000"+ + "\u0000\u0e80\u0e7e\u0001\u0000\u0000\u0000\u0e80\u0e81\u0001\u0000\u0000"+ + "\u0000\u0e81\u0e85\u0001\u0000\u0000\u0000\u0e82\u0e84\u0007\u001e\u0000"+ + "\u0000\u0e83\u0e82\u0001\u0000\u0000\u0000\u0e84\u0e87\u0001\u0000\u0000"+ + "\u0000\u0e85\u0e83\u0001\u0000\u0000\u0000\u0e85\u0e86\u0001\u0000\u0000"+ + "\u0000\u0e86\u02c2\u0001\u0000\u0000\u0000\u0e87\u0e85\u0001\u0000\u0000"+ + "\u0000\u0e88\u0e90\u0005\"\u0000\u0000\u0e89\u0e8a\u0005\\\u0000\u0000"+ + "\u0e8a\u0e8f\t\u0000\u0000\u0000\u0e8b\u0e8c\u0005\"\u0000\u0000\u0e8c"+ + "\u0e8f\u0005\"\u0000\u0000\u0e8d\u0e8f\b\u001f\u0000\u0000\u0e8e\u0e89"+ + "\u0001\u0000\u0000\u0000\u0e8e\u0e8b\u0001\u0000\u0000\u0000\u0e8e\u0e8d"+ + "\u0001\u0000\u0000\u0000\u0e8f\u0e92\u0001\u0000\u0000\u0000\u0e90\u0e8e"+ + "\u0001\u0000\u0000\u0000\u0e90\u0e91\u0001\u0000\u0000\u0000\u0e91\u0e93"+ + "\u0001\u0000\u0000\u0000\u0e92\u0e90\u0001\u0000\u0000\u0000\u0e93\u0e94"+ + "\u0005\"\u0000\u0000\u0e94\u02c4\u0001\u0000\u0000\u0000\u0e95\u0e9d\u0005"+ + "\'\u0000\u0000\u0e96\u0e97\u0005\\\u0000\u0000\u0e97\u0e9c\t\u0000\u0000"+ + "\u0000\u0e98\u0e99\u0005\'\u0000\u0000\u0e99\u0e9c\u0005\'\u0000\u0000"+ + "\u0e9a\u0e9c\b \u0000\u0000\u0e9b\u0e96\u0001\u0000\u0000\u0000\u0e9b"+ + "\u0e98\u0001\u0000\u0000\u0000\u0e9b\u0e9a\u0001\u0000\u0000\u0000\u0e9c"+ + "\u0e9f\u0001\u0000\u0000\u0000\u0e9d\u0e9b\u0001\u0000\u0000\u0000\u0e9d"+ + "\u0e9e\u0001\u0000\u0000\u0000\u0e9e\u0ea0\u0001\u0000\u0000\u0000\u0e9f"+ + "\u0e9d\u0001\u0000\u0000\u0000\u0ea0\u0ea1\u0005\'\u0000\u0000\u0ea1\u02c6"+ + "\u0001\u0000\u0000\u0000\u0ea2\u0eaa\u0005`\u0000\u0000\u0ea3\u0ea4\u0005"+ + "\\\u0000\u0000\u0ea4\u0ea9\t\u0000\u0000\u0000\u0ea5\u0ea6\u0005`\u0000"+ + "\u0000\u0ea6\u0ea9\u0005`\u0000\u0000\u0ea7\u0ea9\b!\u0000\u0000\u0ea8"+ + "\u0ea3\u0001\u0000\u0000\u0000\u0ea8\u0ea5\u0001\u0000\u0000\u0000\u0ea8"+ + "\u0ea7\u0001\u0000\u0000\u0000\u0ea9\u0eac\u0001\u0000\u0000\u0000\u0eaa"+ + "\u0ea8\u0001\u0000\u0000\u0000\u0eaa\u0eab\u0001\u0000\u0000\u0000\u0eab"+ + "\u0ead\u0001\u0000\u0000\u0000\u0eac\u0eaa\u0001\u0000\u0000\u0000\u0ead"+ + "\u0eae\u0005`\u0000\u0000\u0eae\u02c8\u0001\u0000\u0000\u0000\u0eaf\u0eb0"+ + "\u0007\"\u0000\u0000\u0eb0\u02ca\u0001\u0000\u0000\u0000\u0eb1\u0eb2\u0007"+ + "#\u0000\u0000\u0eb2\u02cc\u0001\u0000\u0000\u0000\u0eb3\u0eb4\u0007\b"+ + "\u0000\u0000\u0eb4\u0eb6\u0005\'\u0000\u0000\u0eb5\u0eb7\u0007$\u0000"+ + "\u0000\u0eb6\u0eb5\u0001\u0000\u0000\u0000\u0eb7\u0eb8\u0001\u0000\u0000"+ + "\u0000\u0eb8\u0eb6\u0001\u0000\u0000\u0000\u0eb8\u0eb9\u0001\u0000\u0000"+ + "\u0000\u0eb9\u0eba\u0001\u0000\u0000\u0000\u0eba\u0ebb\u0005\'\u0000\u0000"+ + "\u0ebb\u02ce\u0001\u0000\u0000\u0000\u0ebc\u0ebd\t\u0000\u0000\u0000\u0ebd"+ + "\u0ebe\u0001\u0000\u0000\u0000\u0ebe\u0ebf\u0006\u0167\u0002\u0000\u0ebf"+ + "\u02d0\u0001\u0000\u0000\u0000#\u0000\u02d4\u02df\u02ec\u02f8\u02fd\u0301"+ + "\u0305\u030b\u030f\u0311\u0e25\u0e2e\u0e38\u0e3a\u0e3f\u0e41\u0e47\u0e4c"+ + "\u0e54\u0e56\u0e5c\u0e63\u0e67\u0e76\u0e7b\u0e80\u0e85\u0e8e\u0e90\u0e9b"+ + "\u0e9d\u0ea8\u0eaa\u0eb8\u0003\u0000\u0001\u0000\u0000\u0002\u0000\u0000"+ + "\u0003\u0000"; + public static final String _serializedATN = Utils.join( + new String[] { + _serializedATNSegment0, + _serializedATNSegment1 + }, + "" + ); + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLLexer.tokens b/src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLLexer.tokens new file mode 100644 index 000000000000..80703f8b9ac0 --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLLexer.tokens @@ -0,0 +1,689 @@ +SPACE=1 +SPEC_SQL_COMMENT=2 +COMMENT_INPUT=3 +LINE_COMMENT=4 +ALL=5 +AND=6 +AS=7 +ASC=8 +BOOLEAN=9 +BETWEEN=10 +BY=11 +CASE=12 +CAST=13 +CROSS=14 +COLUMNS=15 +DATETIME=16 +DELETE=17 +DESC=18 +DESCRIBE=19 +DISTINCT=20 +DOUBLE=21 +ELSE=22 +EXISTS=23 +FALSE=24 +FLOAT=25 +FIRST=26 +FROM=27 +GROUP=28 +HAVING=29 +IN=30 +INNER=31 +INT=32 +INTEGER=33 +IS=34 +JOIN=35 +LAST=36 +LEFT=37 +LIKE=38 +LIMIT=39 +LONG=40 +MATCH=41 +NATURAL=42 +MISSING_LITERAL=43 +NOT=44 +NULL_LITERAL=45 +NULLS=46 +ON=47 +OR=48 +ORDER=49 +OUTER=50 +OVER=51 +PARTITION=52 +REGEXP=53 +RIGHT=54 +SELECT=55 +SHOW=56 +STRING=57 +THEN=58 +TRUE=59 +UNION=60 +USING=61 +WHEN=62 +WHERE=63 +EXCEPT=64 +AVG=65 +COUNT=66 +MAX=67 +MIN=68 +SUM=69 +VAR_POP=70 +VAR_SAMP=71 +VARIANCE=72 +STD=73 +STDDEV=74 +STDDEV_POP=75 +STDDEV_SAMP=76 +SUBSTRING=77 +TRIM=78 +END=79 +FULL=80 +OFFSET=81 +INTERVAL=82 +MICROSECOND=83 +SECOND=84 +MINUTE=85 +HOUR=86 +DAY=87 +WEEK=88 +MONTH=89 +QUARTER=90 +YEAR=91 +SECOND_MICROSECOND=92 +MINUTE_MICROSECOND=93 +MINUTE_SECOND=94 +HOUR_MICROSECOND=95 +HOUR_SECOND=96 +HOUR_MINUTE=97 +DAY_MICROSECOND=98 +DAY_SECOND=99 +DAY_MINUTE=100 +DAY_HOUR=101 +YEAR_MONTH=102 +TABLES=103 +ABS=104 +ACOS=105 +ADD=106 +ADDTIME=107 +ASCII=108 +ASIN=109 +ATAN=110 +ATAN2=111 +CBRT=112 +CEIL=113 +CEILING=114 +CONCAT=115 +CONCAT_WS=116 +CONV=117 +CONVERT_TZ=118 +COS=119 +COSH=120 +COT=121 +CRC32=122 +CURDATE=123 +CURTIME=124 +CURRENT_DATE=125 +CURRENT_TIME=126 +CURRENT_TIMESTAMP=127 +DATE=128 +DATE_ADD=129 +DATE_FORMAT=130 +DATE_SUB=131 +DATEDIFF=132 +DAYNAME=133 +DAYOFMONTH=134 +DAYOFWEEK=135 +DAYOFYEAR=136 +DEGREES=137 +DIVIDE=138 +E=139 +EXP=140 +EXPM1=141 +EXTRACT=142 +FLOOR=143 +FROM_DAYS=144 +FROM_UNIXTIME=145 +GET_FORMAT=146 +IF=147 +IFNULL=148 +ISNULL=149 +LAST_DAY=150 +LENGTH=151 +LN=152 +LOCALTIME=153 +LOCALTIMESTAMP=154 +LOCATE=155 +LOG=156 +LOG10=157 +LOG2=158 +LOWER=159 +LTRIM=160 +MAKEDATE=161 +MAKETIME=162 +MODULUS=163 +MONTHNAME=164 +MULTIPLY=165 +NOW=166 +NULLIF=167 +PERIOD_ADD=168 +PERIOD_DIFF=169 +PI=170 +POSITION=171 +POW=172 +POWER=173 +RADIANS=174 +RAND=175 +REPLACE=176 +RINT=177 +ROUND=178 +RTRIM=179 +REVERSE=180 +SEC_TO_TIME=181 +SIGN=182 +SIGNUM=183 +SIN=184 +SINH=185 +SQRT=186 +STR_TO_DATE=187 +SUBDATE=188 +SUBTIME=189 +SUBTRACT=190 +SYSDATE=191 +TAN=192 +TIME=193 +TIMEDIFF=194 +TIME_FORMAT=195 +TIME_TO_SEC=196 +TIMESTAMP=197 +TRUNCATE=198 +TO_DAYS=199 +TO_SECONDS=200 +UNIX_TIMESTAMP=201 +UPPER=202 +UTC_DATE=203 +UTC_TIME=204 +UTC_TIMESTAMP=205 +D=206 +T=207 +TS=208 +LEFT_BRACE=209 +RIGHT_BRACE=210 +DENSE_RANK=211 +RANK=212 +ROW_NUMBER=213 +DATE_HISTOGRAM=214 +DAY_OF_MONTH=215 +DAY_OF_YEAR=216 +DAY_OF_WEEK=217 +EXCLUDE=218 +EXTENDED_STATS=219 +FIELD=220 +FILTER=221 +GEO_BOUNDING_BOX=222 +GEO_CELL=223 +GEO_DISTANCE=224 +GEO_DISTANCE_RANGE=225 +GEO_INTERSECTS=226 +GEO_POLYGON=227 +HISTOGRAM=228 +HOUR_OF_DAY=229 +INCLUDE=230 +IN_TERMS=231 +MATCHPHRASE=232 +MATCH_PHRASE=233 +MATCHPHRASEQUERY=234 +SIMPLE_QUERY_STRING=235 +QUERY_STRING=236 +MATCH_PHRASE_PREFIX=237 +MATCHQUERY=238 +MATCH_QUERY=239 +MINUTE_OF_DAY=240 +MINUTE_OF_HOUR=241 +MONTH_OF_YEAR=242 +MULTIMATCH=243 +MULTI_MATCH=244 +MULTIMATCHQUERY=245 +NESTED=246 +PERCENTILES=247 +PERCENTILE=248 +PERCENTILE_APPROX=249 +REGEXP_QUERY=250 +REVERSE_NESTED=251 +QUERY=252 +RANGE=253 +SCORE=254 +SCOREQUERY=255 +SCORE_QUERY=256 +SECOND_OF_MINUTE=257 +STATS=258 +TERM=259 +TERMS=260 +TIMESTAMPADD=261 +TIMESTAMPDIFF=262 +TOPHITS=263 +TYPEOF=264 +WEEK_OF_YEAR=265 +WEEKOFYEAR=266 +WEEKDAY=267 +WILDCARDQUERY=268 +WILDCARD_QUERY=269 +SUBSTR=270 +STRCMP=271 +ADDDATE=272 +YEARWEEK=273 +ALLOW_LEADING_WILDCARD=274 +ANALYZER=275 +ANALYZE_WILDCARD=276 +AUTO_GENERATE_SYNONYMS_PHRASE_QUERY=277 +BOOST=278 +CASE_INSENSITIVE=279 +CUTOFF_FREQUENCY=280 +DEFAULT_FIELD=281 +DEFAULT_OPERATOR=282 +ESCAPE=283 +ENABLE_POSITION_INCREMENTS=284 +FIELDS=285 +FLAGS=286 +FUZZINESS=287 +FUZZY_MAX_EXPANSIONS=288 +FUZZY_PREFIX_LENGTH=289 +FUZZY_REWRITE=290 +FUZZY_TRANSPOSITIONS=291 +LENIENT=292 +LOW_FREQ_OPERATOR=293 +MAX_DETERMINIZED_STATES=294 +MAX_EXPANSIONS=295 +MINIMUM_SHOULD_MATCH=296 +OPERATOR=297 +PHRASE_SLOP=298 +PREFIX_LENGTH=299 +QUOTE_ANALYZER=300 +QUOTE_FIELD_SUFFIX=301 +REWRITE=302 +SLOP=303 +TIE_BREAKER=304 +TIME_ZONE=305 +TYPE=306 +ZERO_TERMS_QUERY=307 +HIGHLIGHT=308 +HIGHLIGHT_PRE_TAGS=309 +HIGHLIGHT_POST_TAGS=310 +MATCH_BOOL_PREFIX=311 +STAR=312 +SLASH=313 +MODULE=314 +PLUS=315 +MINUS=316 +DIV=317 +MOD=318 +EQUAL_SYMBOL=319 +GREATER_SYMBOL=320 +LESS_SYMBOL=321 +EXCLAMATION_SYMBOL=322 +BIT_NOT_OP=323 +BIT_OR_OP=324 +BIT_AND_OP=325 +BIT_XOR_OP=326 +DOT=327 +LR_BRACKET=328 +RR_BRACKET=329 +LT_SQR_PRTHS=330 +RT_SQR_PRTHS=331 +COMMA=332 +SEMI=333 +AT_SIGN=334 +ZERO_DECIMAL=335 +ONE_DECIMAL=336 +TWO_DECIMAL=337 +SINGLE_QUOTE_SYMB=338 +DOUBLE_QUOTE_SYMB=339 +REVERSE_QUOTE_SYMB=340 +COLON_SYMB=341 +START_NATIONAL_STRING_LITERAL=342 +STRING_LITERAL=343 +DECIMAL_LITERAL=344 +HEXADECIMAL_LITERAL=345 +REAL_LITERAL=346 +NULL_SPEC_LITERAL=347 +BIT_STRING=348 +ID=349 +DOUBLE_QUOTE_ID=350 +BACKTICK_QUOTE_ID=351 +ERROR_RECOGNITION=352 +'ALL'=5 +'AND'=6 +'AS'=7 +'ASC'=8 +'BOOLEAN'=9 +'BETWEEN'=10 +'BY'=11 +'CASE'=12 +'CAST'=13 +'CROSS'=14 +'COLUMNS'=15 +'DATETIME'=16 +'DELETE'=17 +'DESC'=18 +'DESCRIBE'=19 +'DISTINCT'=20 +'DOUBLE'=21 +'ELSE'=22 +'EXISTS'=23 +'FALSE'=24 +'FLOAT'=25 +'FIRST'=26 +'FROM'=27 +'GROUP'=28 +'HAVING'=29 +'IN'=30 +'INNER'=31 +'INT'=32 +'INTEGER'=33 +'IS'=34 +'JOIN'=35 +'LAST'=36 +'LEFT'=37 +'LIKE'=38 +'LIMIT'=39 +'LONG'=40 +'MATCH'=41 +'NATURAL'=42 +'MISSING'=43 +'NOT'=44 +'NULL'=45 +'NULLS'=46 +'ON'=47 +'OR'=48 +'ORDER'=49 +'OUTER'=50 +'OVER'=51 +'PARTITION'=52 +'REGEXP'=53 +'RIGHT'=54 +'SELECT'=55 +'SHOW'=56 +'STRING'=57 +'THEN'=58 +'TRUE'=59 +'UNION'=60 +'USING'=61 +'WHEN'=62 +'WHERE'=63 +'MINUS'=64 +'AVG'=65 +'COUNT'=66 +'MAX'=67 +'MIN'=68 +'SUM'=69 +'VAR_POP'=70 +'VAR_SAMP'=71 +'VARIANCE'=72 +'STD'=73 +'STDDEV'=74 +'STDDEV_POP'=75 +'STDDEV_SAMP'=76 +'SUBSTRING'=77 +'TRIM'=78 +'END'=79 +'FULL'=80 +'OFFSET'=81 +'INTERVAL'=82 +'MICROSECOND'=83 +'SECOND'=84 +'MINUTE'=85 +'HOUR'=86 +'DAY'=87 +'WEEK'=88 +'MONTH'=89 +'QUARTER'=90 +'YEAR'=91 +'SECOND_MICROSECOND'=92 +'MINUTE_MICROSECOND'=93 +'MINUTE_SECOND'=94 +'HOUR_MICROSECOND'=95 +'HOUR_SECOND'=96 +'HOUR_MINUTE'=97 +'DAY_MICROSECOND'=98 +'DAY_SECOND'=99 +'DAY_MINUTE'=100 +'DAY_HOUR'=101 +'YEAR_MONTH'=102 +'TABLES'=103 +'ABS'=104 +'ACOS'=105 +'ADD'=106 +'ADDTIME'=107 +'ASCII'=108 +'ASIN'=109 +'ATAN'=110 +'ATAN2'=111 +'CBRT'=112 +'CEIL'=113 +'CEILING'=114 +'CONCAT'=115 +'CONCAT_WS'=116 +'CONV'=117 +'CONVERT_TZ'=118 +'COS'=119 +'COSH'=120 +'COT'=121 +'CRC32'=122 +'CURDATE'=123 +'CURTIME'=124 +'CURRENT_DATE'=125 +'CURRENT_TIME'=126 +'CURRENT_TIMESTAMP'=127 +'DATE'=128 +'DATE_ADD'=129 +'DATE_FORMAT'=130 +'DATE_SUB'=131 +'DATEDIFF'=132 +'DAYNAME'=133 +'DAYOFMONTH'=134 +'DAYOFWEEK'=135 +'DAYOFYEAR'=136 +'DEGREES'=137 +'DIVIDE'=138 +'E'=139 +'EXP'=140 +'EXPM1'=141 +'EXTRACT'=142 +'FLOOR'=143 +'FROM_DAYS'=144 +'FROM_UNIXTIME'=145 +'GET_FORMAT'=146 +'IF'=147 +'IFNULL'=148 +'ISNULL'=149 +'LAST_DAY'=150 +'LENGTH'=151 +'LN'=152 +'LOCALTIME'=153 +'LOCALTIMESTAMP'=154 +'LOCATE'=155 +'LOG'=156 +'LOG10'=157 +'LOG2'=158 +'LOWER'=159 +'LTRIM'=160 +'MAKEDATE'=161 +'MAKETIME'=162 +'MODULUS'=163 +'MONTHNAME'=164 +'MULTIPLY'=165 +'NOW'=166 +'NULLIF'=167 +'PERIOD_ADD'=168 +'PERIOD_DIFF'=169 +'PI'=170 +'POSITION'=171 +'POW'=172 +'POWER'=173 +'RADIANS'=174 +'RAND'=175 +'REPLACE'=176 +'RINT'=177 +'ROUND'=178 +'RTRIM'=179 +'REVERSE'=180 +'SEC_TO_TIME'=181 +'SIGN'=182 +'SIGNUM'=183 +'SIN'=184 +'SINH'=185 +'SQRT'=186 +'STR_TO_DATE'=187 +'SUBDATE'=188 +'SUBTIME'=189 +'SUBTRACT'=190 +'SYSDATE'=191 +'TAN'=192 +'TIME'=193 +'TIMEDIFF'=194 +'TIME_FORMAT'=195 +'TIME_TO_SEC'=196 +'TIMESTAMP'=197 +'TRUNCATE'=198 +'TO_DAYS'=199 +'TO_SECONDS'=200 +'UNIX_TIMESTAMP'=201 +'UPPER'=202 +'UTC_DATE'=203 +'UTC_TIME'=204 +'UTC_TIMESTAMP'=205 +'D'=206 +'T'=207 +'TS'=208 +'{'=209 +'}'=210 +'DENSE_RANK'=211 +'RANK'=212 +'ROW_NUMBER'=213 +'DATE_HISTOGRAM'=214 +'DAY_OF_MONTH'=215 +'DAY_OF_YEAR'=216 +'DAY_OF_WEEK'=217 +'EXCLUDE'=218 +'EXTENDED_STATS'=219 +'FIELD'=220 +'FILTER'=221 +'GEO_BOUNDING_BOX'=222 +'GEO_CELL'=223 +'GEO_DISTANCE'=224 +'GEO_DISTANCE_RANGE'=225 +'GEO_INTERSECTS'=226 +'GEO_POLYGON'=227 +'HISTOGRAM'=228 +'HOUR_OF_DAY'=229 +'INCLUDE'=230 +'IN_TERMS'=231 +'MATCHPHRASE'=232 +'MATCH_PHRASE'=233 +'MATCHPHRASEQUERY'=234 +'SIMPLE_QUERY_STRING'=235 +'QUERY_STRING'=236 +'MATCH_PHRASE_PREFIX'=237 +'MATCHQUERY'=238 +'MATCH_QUERY'=239 +'MINUTE_OF_DAY'=240 +'MINUTE_OF_HOUR'=241 +'MONTH_OF_YEAR'=242 +'MULTIMATCH'=243 +'MULTI_MATCH'=244 +'MULTIMATCHQUERY'=245 +'NESTED'=246 +'PERCENTILES'=247 +'PERCENTILE'=248 +'PERCENTILE_APPROX'=249 +'REGEXP_QUERY'=250 +'REVERSE_NESTED'=251 +'QUERY'=252 +'RANGE'=253 +'SCORE'=254 +'SCOREQUERY'=255 +'SCORE_QUERY'=256 +'SECOND_OF_MINUTE'=257 +'STATS'=258 +'TERM'=259 +'TERMS'=260 +'TIMESTAMPADD'=261 +'TIMESTAMPDIFF'=262 +'TOPHITS'=263 +'TYPEOF'=264 +'WEEK_OF_YEAR'=265 +'WEEKOFYEAR'=266 +'WEEKDAY'=267 +'WILDCARDQUERY'=268 +'WILDCARD_QUERY'=269 +'SUBSTR'=270 +'STRCMP'=271 +'ADDDATE'=272 +'YEARWEEK'=273 +'ALLOW_LEADING_WILDCARD'=274 +'ANALYZER'=275 +'ANALYZE_WILDCARD'=276 +'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY'=277 +'BOOST'=278 +'CASE_INSENSITIVE'=279 +'CUTOFF_FREQUENCY'=280 +'DEFAULT_FIELD'=281 +'DEFAULT_OPERATOR'=282 +'ESCAPE'=283 +'ENABLE_POSITION_INCREMENTS'=284 +'FIELDS'=285 +'FLAGS'=286 +'FUZZINESS'=287 +'FUZZY_MAX_EXPANSIONS'=288 +'FUZZY_PREFIX_LENGTH'=289 +'FUZZY_REWRITE'=290 +'FUZZY_TRANSPOSITIONS'=291 +'LENIENT'=292 +'LOW_FREQ_OPERATOR'=293 +'MAX_DETERMINIZED_STATES'=294 +'MAX_EXPANSIONS'=295 +'MINIMUM_SHOULD_MATCH'=296 +'OPERATOR'=297 +'PHRASE_SLOP'=298 +'PREFIX_LENGTH'=299 +'QUOTE_ANALYZER'=300 +'QUOTE_FIELD_SUFFIX'=301 +'REWRITE'=302 +'SLOP'=303 +'TIE_BREAKER'=304 +'TIME_ZONE'=305 +'TYPE'=306 +'ZERO_TERMS_QUERY'=307 +'HIGHLIGHT'=308 +'PRE_TAGS'=309 +'POST_TAGS'=310 +'MATCH_BOOL_PREFIX'=311 +'*'=312 +'/'=313 +'%'=314 +'+'=315 +'-'=316 +'DIV'=317 +'MOD'=318 +'='=319 +'>'=320 +'<'=321 +'!'=322 +'~'=323 +'|'=324 +'&'=325 +'^'=326 +'.'=327 +'('=328 +')'=329 +'['=330 +']'=331 +','=332 +';'=333 +'@'=334 +'0'=335 +'1'=336 +'2'=337 +'\''=338 +'"'=339 +'`'=340 +':'=341 diff --git a/src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLParser.interp b/src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLParser.interp new file mode 100644 index 000000000000..7ad75b08df3d --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLParser.interp @@ -0,0 +1,829 @@ +token literal names: +null +null +null +null +null +'ALL' +'AND' +'AS' +'ASC' +'BOOLEAN' +'BETWEEN' +'BY' +'CASE' +'CAST' +'CROSS' +'COLUMNS' +'DATETIME' +'DELETE' +'DESC' +'DESCRIBE' +'DISTINCT' +'DOUBLE' +'ELSE' +'EXISTS' +'FALSE' +'FLOAT' +'FIRST' +'FROM' +'GROUP' +'HAVING' +'IN' +'INNER' +'INT' +'INTEGER' +'IS' +'JOIN' +'LAST' +'LEFT' +'LIKE' +'LIMIT' +'LONG' +'MATCH' +'NATURAL' +'MISSING' +'NOT' +'NULL' +'NULLS' +'ON' +'OR' +'ORDER' +'OUTER' +'OVER' +'PARTITION' +'REGEXP' +'RIGHT' +'SELECT' +'SHOW' +'STRING' +'THEN' +'TRUE' +'UNION' +'USING' +'WHEN' +'WHERE' +'MINUS' +'AVG' +'COUNT' +'MAX' +'MIN' +'SUM' +'VAR_POP' +'VAR_SAMP' +'VARIANCE' +'STD' +'STDDEV' +'STDDEV_POP' +'STDDEV_SAMP' +'SUBSTRING' +'TRIM' +'END' +'FULL' +'OFFSET' +'INTERVAL' +'MICROSECOND' +'SECOND' +'MINUTE' +'HOUR' +'DAY' +'WEEK' +'MONTH' +'QUARTER' +'YEAR' +'SECOND_MICROSECOND' +'MINUTE_MICROSECOND' +'MINUTE_SECOND' +'HOUR_MICROSECOND' +'HOUR_SECOND' +'HOUR_MINUTE' +'DAY_MICROSECOND' +'DAY_SECOND' +'DAY_MINUTE' +'DAY_HOUR' +'YEAR_MONTH' +'TABLES' +'ABS' +'ACOS' +'ADD' +'ADDTIME' +'ASCII' +'ASIN' +'ATAN' +'ATAN2' +'CBRT' +'CEIL' +'CEILING' +'CONCAT' +'CONCAT_WS' +'CONV' +'CONVERT_TZ' +'COS' +'COSH' +'COT' +'CRC32' +'CURDATE' +'CURTIME' +'CURRENT_DATE' +'CURRENT_TIME' +'CURRENT_TIMESTAMP' +'DATE' +'DATE_ADD' +'DATE_FORMAT' +'DATE_SUB' +'DATEDIFF' +'DAYNAME' +'DAYOFMONTH' +'DAYOFWEEK' +'DAYOFYEAR' +'DEGREES' +'DIVIDE' +'E' +'EXP' +'EXPM1' +'EXTRACT' +'FLOOR' +'FROM_DAYS' +'FROM_UNIXTIME' +'GET_FORMAT' +'IF' +'IFNULL' +'ISNULL' +'LAST_DAY' +'LENGTH' +'LN' +'LOCALTIME' +'LOCALTIMESTAMP' +'LOCATE' +'LOG' +'LOG10' +'LOG2' +'LOWER' +'LTRIM' +'MAKEDATE' +'MAKETIME' +'MODULUS' +'MONTHNAME' +'MULTIPLY' +'NOW' +'NULLIF' +'PERIOD_ADD' +'PERIOD_DIFF' +'PI' +'POSITION' +'POW' +'POWER' +'RADIANS' +'RAND' +'REPLACE' +'RINT' +'ROUND' +'RTRIM' +'REVERSE' +'SEC_TO_TIME' +'SIGN' +'SIGNUM' +'SIN' +'SINH' +'SQRT' +'STR_TO_DATE' +'SUBDATE' +'SUBTIME' +'SUBTRACT' +'SYSDATE' +'TAN' +'TIME' +'TIMEDIFF' +'TIME_FORMAT' +'TIME_TO_SEC' +'TIMESTAMP' +'TRUNCATE' +'TO_DAYS' +'TO_SECONDS' +'UNIX_TIMESTAMP' +'UPPER' +'UTC_DATE' +'UTC_TIME' +'UTC_TIMESTAMP' +'D' +'T' +'TS' +'{' +'}' +'DENSE_RANK' +'RANK' +'ROW_NUMBER' +'DATE_HISTOGRAM' +'DAY_OF_MONTH' +'DAY_OF_YEAR' +'DAY_OF_WEEK' +'EXCLUDE' +'EXTENDED_STATS' +'FIELD' +'FILTER' +'GEO_BOUNDING_BOX' +'GEO_CELL' +'GEO_DISTANCE' +'GEO_DISTANCE_RANGE' +'GEO_INTERSECTS' +'GEO_POLYGON' +'HISTOGRAM' +'HOUR_OF_DAY' +'INCLUDE' +'IN_TERMS' +'MATCHPHRASE' +'MATCH_PHRASE' +'MATCHPHRASEQUERY' +'SIMPLE_QUERY_STRING' +'QUERY_STRING' +'MATCH_PHRASE_PREFIX' +'MATCHQUERY' +'MATCH_QUERY' +'MINUTE_OF_DAY' +'MINUTE_OF_HOUR' +'MONTH_OF_YEAR' +'MULTIMATCH' +'MULTI_MATCH' +'MULTIMATCHQUERY' +'NESTED' +'PERCENTILES' +'PERCENTILE' +'PERCENTILE_APPROX' +'REGEXP_QUERY' +'REVERSE_NESTED' +'QUERY' +'RANGE' +'SCORE' +'SCOREQUERY' +'SCORE_QUERY' +'SECOND_OF_MINUTE' +'STATS' +'TERM' +'TERMS' +'TIMESTAMPADD' +'TIMESTAMPDIFF' +'TOPHITS' +'TYPEOF' +'WEEK_OF_YEAR' +'WEEKOFYEAR' +'WEEKDAY' +'WILDCARDQUERY' +'WILDCARD_QUERY' +'SUBSTR' +'STRCMP' +'ADDDATE' +'YEARWEEK' +'ALLOW_LEADING_WILDCARD' +'ANALYZER' +'ANALYZE_WILDCARD' +'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY' +'BOOST' +'CASE_INSENSITIVE' +'CUTOFF_FREQUENCY' +'DEFAULT_FIELD' +'DEFAULT_OPERATOR' +'ESCAPE' +'ENABLE_POSITION_INCREMENTS' +'FIELDS' +'FLAGS' +'FUZZINESS' +'FUZZY_MAX_EXPANSIONS' +'FUZZY_PREFIX_LENGTH' +'FUZZY_REWRITE' +'FUZZY_TRANSPOSITIONS' +'LENIENT' +'LOW_FREQ_OPERATOR' +'MAX_DETERMINIZED_STATES' +'MAX_EXPANSIONS' +'MINIMUM_SHOULD_MATCH' +'OPERATOR' +'PHRASE_SLOP' +'PREFIX_LENGTH' +'QUOTE_ANALYZER' +'QUOTE_FIELD_SUFFIX' +'REWRITE' +'SLOP' +'TIE_BREAKER' +'TIME_ZONE' +'TYPE' +'ZERO_TERMS_QUERY' +'HIGHLIGHT' +'PRE_TAGS' +'POST_TAGS' +'MATCH_BOOL_PREFIX' +'*' +'/' +'%' +'+' +'-' +'DIV' +'MOD' +'=' +'>' +'<' +'!' +'~' +'|' +'&' +'^' +'.' +'(' +')' +'[' +']' +',' +';' +'@' +'0' +'1' +'2' +'\'' +'"' +'`' +':' +null +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +SPACE +SPEC_SQL_COMMENT +COMMENT_INPUT +LINE_COMMENT +ALL +AND +AS +ASC +BOOLEAN +BETWEEN +BY +CASE +CAST +CROSS +COLUMNS +DATETIME +DELETE +DESC +DESCRIBE +DISTINCT +DOUBLE +ELSE +EXISTS +FALSE +FLOAT +FIRST +FROM +GROUP +HAVING +IN +INNER +INT +INTEGER +IS +JOIN +LAST +LEFT +LIKE +LIMIT +LONG +MATCH +NATURAL +MISSING_LITERAL +NOT +NULL_LITERAL +NULLS +ON +OR +ORDER +OUTER +OVER +PARTITION +REGEXP +RIGHT +SELECT +SHOW +STRING +THEN +TRUE +UNION +USING +WHEN +WHERE +EXCEPT +AVG +COUNT +MAX +MIN +SUM +VAR_POP +VAR_SAMP +VARIANCE +STD +STDDEV +STDDEV_POP +STDDEV_SAMP +SUBSTRING +TRIM +END +FULL +OFFSET +INTERVAL +MICROSECOND +SECOND +MINUTE +HOUR +DAY +WEEK +MONTH +QUARTER +YEAR +SECOND_MICROSECOND +MINUTE_MICROSECOND +MINUTE_SECOND +HOUR_MICROSECOND +HOUR_SECOND +HOUR_MINUTE +DAY_MICROSECOND +DAY_SECOND +DAY_MINUTE +DAY_HOUR +YEAR_MONTH +TABLES +ABS +ACOS +ADD +ADDTIME +ASCII +ASIN +ATAN +ATAN2 +CBRT +CEIL +CEILING +CONCAT +CONCAT_WS +CONV +CONVERT_TZ +COS +COSH +COT +CRC32 +CURDATE +CURTIME +CURRENT_DATE +CURRENT_TIME +CURRENT_TIMESTAMP +DATE +DATE_ADD +DATE_FORMAT +DATE_SUB +DATEDIFF +DAYNAME +DAYOFMONTH +DAYOFWEEK +DAYOFYEAR +DEGREES +DIVIDE +E +EXP +EXPM1 +EXTRACT +FLOOR +FROM_DAYS +FROM_UNIXTIME +GET_FORMAT +IF +IFNULL +ISNULL +LAST_DAY +LENGTH +LN +LOCALTIME +LOCALTIMESTAMP +LOCATE +LOG +LOG10 +LOG2 +LOWER +LTRIM +MAKEDATE +MAKETIME +MODULUS +MONTHNAME +MULTIPLY +NOW +NULLIF +PERIOD_ADD +PERIOD_DIFF +PI +POSITION +POW +POWER +RADIANS +RAND +REPLACE +RINT +ROUND +RTRIM +REVERSE +SEC_TO_TIME +SIGN +SIGNUM +SIN +SINH +SQRT +STR_TO_DATE +SUBDATE +SUBTIME +SUBTRACT +SYSDATE +TAN +TIME +TIMEDIFF +TIME_FORMAT +TIME_TO_SEC +TIMESTAMP +TRUNCATE +TO_DAYS +TO_SECONDS +UNIX_TIMESTAMP +UPPER +UTC_DATE +UTC_TIME +UTC_TIMESTAMP +D +T +TS +LEFT_BRACE +RIGHT_BRACE +DENSE_RANK +RANK +ROW_NUMBER +DATE_HISTOGRAM +DAY_OF_MONTH +DAY_OF_YEAR +DAY_OF_WEEK +EXCLUDE +EXTENDED_STATS +FIELD +FILTER +GEO_BOUNDING_BOX +GEO_CELL +GEO_DISTANCE +GEO_DISTANCE_RANGE +GEO_INTERSECTS +GEO_POLYGON +HISTOGRAM +HOUR_OF_DAY +INCLUDE +IN_TERMS +MATCHPHRASE +MATCH_PHRASE +MATCHPHRASEQUERY +SIMPLE_QUERY_STRING +QUERY_STRING +MATCH_PHRASE_PREFIX +MATCHQUERY +MATCH_QUERY +MINUTE_OF_DAY +MINUTE_OF_HOUR +MONTH_OF_YEAR +MULTIMATCH +MULTI_MATCH +MULTIMATCHQUERY +NESTED +PERCENTILES +PERCENTILE +PERCENTILE_APPROX +REGEXP_QUERY +REVERSE_NESTED +QUERY +RANGE +SCORE +SCOREQUERY +SCORE_QUERY +SECOND_OF_MINUTE +STATS +TERM +TERMS +TIMESTAMPADD +TIMESTAMPDIFF +TOPHITS +TYPEOF +WEEK_OF_YEAR +WEEKOFYEAR +WEEKDAY +WILDCARDQUERY +WILDCARD_QUERY +SUBSTR +STRCMP +ADDDATE +YEARWEEK +ALLOW_LEADING_WILDCARD +ANALYZER +ANALYZE_WILDCARD +AUTO_GENERATE_SYNONYMS_PHRASE_QUERY +BOOST +CASE_INSENSITIVE +CUTOFF_FREQUENCY +DEFAULT_FIELD +DEFAULT_OPERATOR +ESCAPE +ENABLE_POSITION_INCREMENTS +FIELDS +FLAGS +FUZZINESS +FUZZY_MAX_EXPANSIONS +FUZZY_PREFIX_LENGTH +FUZZY_REWRITE +FUZZY_TRANSPOSITIONS +LENIENT +LOW_FREQ_OPERATOR +MAX_DETERMINIZED_STATES +MAX_EXPANSIONS +MINIMUM_SHOULD_MATCH +OPERATOR +PHRASE_SLOP +PREFIX_LENGTH +QUOTE_ANALYZER +QUOTE_FIELD_SUFFIX +REWRITE +SLOP +TIE_BREAKER +TIME_ZONE +TYPE +ZERO_TERMS_QUERY +HIGHLIGHT +HIGHLIGHT_PRE_TAGS +HIGHLIGHT_POST_TAGS +MATCH_BOOL_PREFIX +STAR +SLASH +MODULE +PLUS +MINUS +DIV +MOD +EQUAL_SYMBOL +GREATER_SYMBOL +LESS_SYMBOL +EXCLAMATION_SYMBOL +BIT_NOT_OP +BIT_OR_OP +BIT_AND_OP +BIT_XOR_OP +DOT +LR_BRACKET +RR_BRACKET +LT_SQR_PRTHS +RT_SQR_PRTHS +COMMA +SEMI +AT_SIGN +ZERO_DECIMAL +ONE_DECIMAL +TWO_DECIMAL +SINGLE_QUOTE_SYMB +DOUBLE_QUOTE_SYMB +REVERSE_QUOTE_SYMB +COLON_SYMB +START_NATIONAL_STRING_LITERAL +STRING_LITERAL +DECIMAL_LITERAL +HEXADECIMAL_LITERAL +REAL_LITERAL +NULL_SPEC_LITERAL +BIT_STRING +ID +DOUBLE_QUOTE_ID +BACKTICK_QUOTE_ID +ERROR_RECOGNITION + +rule names: +root +sqlStatement +dmlStatement +selectStatement +adminStatement +showStatement +describeStatement +columnFilter +tableFilter +showDescribePattern +compatibleID +querySpecification +selectClause +selectSpec +selectElements +selectElement +fromClause +relation +whereClause +groupByClause +groupByElements +groupByElement +havingClause +orderByClause +orderByElement +limitClause +windowFunctionClause +windowFunction +overClause +partitionByClause +constant +decimalLiteral +numericLiteral +stringLiteral +booleanLiteral +realLiteral +sign +nullLiteral +datetimeLiteral +dateLiteral +timeLiteral +timestampLiteral +datetimeConstantLiteral +intervalLiteral +intervalUnit +expression +predicate +expressions +expressionAtom +comparisonOperator +nullNotnull +functionCall +timestampFunction +timestampFunctionName +getFormatFunction +getFormatType +extractFunction +simpleDateTimePart +complexDateTimePart +datetimePart +highlightFunction +positionFunction +matchQueryAltSyntaxFunction +scalarFunctionName +specificFunction +relevanceFunction +scoreRelevanceFunction +noFieldRelevanceFunction +singleFieldRelevanceFunction +multiFieldRelevanceFunction +altSingleFieldRelevanceFunction +altMultiFieldRelevanceFunction +convertedDataType +caseFuncAlternative +aggregateFunction +percentileApproxFunction +filterClause +aggregationFunctionName +mathematicalFunctionName +trigonometricFunctionName +arithmeticFunctionName +dateTimeFunctionName +textFunctionName +flowControlFunctionName +noFieldRelevanceFunctionName +systemFunctionName +nestedFunctionName +scoreRelevanceFunctionName +singleFieldRelevanceFunctionName +multiFieldRelevanceFunctionName +altSingleFieldRelevanceFunctionName +altMultiFieldRelevanceFunctionName +functionArgs +functionArg +relevanceArg +highlightArg +relevanceArgName +highlightArgName +relevanceFieldAndWeight +relevanceFieldWeight +relevanceField +relevanceQuery +relevanceArgValue +highlightArgValue +alternateMultiMatchArgName +alternateMultiMatchQuery +alternateMultiMatchField +tableName +columnName +allTupleFields +alias +qualifiedName +ident +keywordsCanBeId + + +atn: +[4, 1, 352, 1112, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 1, 0, 3, 0, 230, 8, 0, 1, 0, 3, 0, 233, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 239, 8, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 3, 4, 247, 8, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 257, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 3, 9, 268, 8, 9, 1, 10, 4, 10, 271, 8, 10, 11, 10, 12, 10, 272, 1, 11, 1, 11, 3, 11, 277, 8, 11, 1, 11, 3, 11, 280, 8, 11, 1, 12, 1, 12, 3, 12, 284, 8, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 3, 14, 292, 8, 14, 1, 14, 1, 14, 5, 14, 296, 8, 14, 10, 14, 12, 14, 299, 9, 14, 1, 15, 1, 15, 3, 15, 303, 8, 15, 1, 15, 3, 15, 306, 8, 15, 1, 16, 1, 16, 1, 16, 3, 16, 311, 8, 16, 1, 16, 3, 16, 314, 8, 16, 1, 16, 3, 16, 317, 8, 16, 1, 16, 3, 16, 320, 8, 16, 1, 17, 1, 17, 3, 17, 324, 8, 17, 1, 17, 3, 17, 327, 8, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 333, 8, 17, 1, 17, 1, 17, 3, 17, 337, 8, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 5, 20, 349, 8, 20, 10, 20, 12, 20, 352, 9, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 364, 8, 23, 10, 23, 12, 23, 367, 9, 23, 1, 24, 1, 24, 3, 24, 371, 8, 24, 1, 24, 1, 24, 3, 24, 375, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 381, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 389, 8, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 3, 27, 397, 8, 27, 1, 27, 1, 27, 3, 27, 401, 8, 27, 1, 28, 1, 28, 1, 28, 3, 28, 406, 8, 28, 1, 28, 3, 28, 409, 8, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 418, 8, 29, 10, 29, 12, 29, 421, 9, 29, 1, 30, 1, 30, 3, 30, 425, 8, 30, 1, 30, 1, 30, 3, 30, 429, 8, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 436, 8, 30, 1, 31, 1, 31, 1, 32, 1, 32, 3, 32, 442, 8, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 3, 38, 457, 8, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 3, 39, 466, 8, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 3, 40, 475, 8, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 3, 41, 484, 8, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 498, 8, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 506, 8, 45, 10, 45, 12, 45, 509, 9, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 520, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 529, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 541, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 548, 8, 46, 10, 46, 12, 46, 551, 9, 46, 1, 47, 1, 47, 1, 47, 5, 47, 556, 8, 47, 10, 47, 12, 47, 559, 9, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 569, 8, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 5, 48, 577, 8, 48, 10, 48, 12, 48, 580, 9, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 593, 8, 49, 1, 50, 3, 50, 596, 8, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 615, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 626, 8, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 58, 1, 58, 1, 59, 1, 59, 3, 59, 661, 8, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 668, 8, 60, 10, 60, 12, 60, 671, 9, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 695, 8, 63, 1, 64, 1, 64, 1, 64, 4, 64, 700, 8, 64, 11, 64, 12, 64, 701, 1, 64, 1, 64, 3, 64, 706, 8, 64, 1, 64, 1, 64, 1, 64, 1, 64, 4, 64, 712, 8, 64, 11, 64, 12, 64, 713, 1, 64, 1, 64, 3, 64, 718, 8, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 3, 64, 729, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 736, 8, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 743, 8, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 5, 67, 752, 8, 67, 10, 67, 12, 67, 755, 9, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 5, 68, 766, 8, 68, 10, 68, 12, 68, 769, 9, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 5, 69, 779, 8, 69, 10, 69, 12, 69, 782, 9, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 5, 69, 789, 8, 69, 10, 69, 12, 69, 792, 9, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 5, 69, 803, 8, 69, 10, 69, 12, 69, 806, 9, 69, 1, 69, 1, 69, 3, 69, 810, 8, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 5, 70, 819, 8, 70, 10, 70, 12, 70, 822, 9, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 5, 71, 833, 8, 71, 10, 71, 12, 71, 836, 9, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 3, 72, 850, 8, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 3, 74, 873, 8, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 3, 75, 882, 8, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 921, 8, 78, 1, 79, 1, 79, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 3, 81, 986, 8, 81, 1, 82, 1, 82, 1, 83, 1, 83, 1, 84, 1, 84, 1, 85, 1, 85, 1, 86, 1, 86, 1, 87, 1, 87, 1, 88, 1, 88, 1, 89, 1, 89, 1, 90, 1, 90, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 5, 92, 1011, 8, 92, 10, 92, 12, 92, 1014, 9, 92, 3, 92, 1016, 8, 92, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 3, 94, 1028, 8, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 3, 98, 1046, 8, 98, 1, 99, 1, 99, 1, 100, 1, 100, 3, 100, 1052, 8, 100, 1, 101, 1, 101, 1, 102, 1, 102, 3, 102, 1058, 8, 102, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 3, 104, 1065, 8, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 3, 106, 1081, 8, 106, 1, 107, 1, 107, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 5, 111, 1096, 8, 111, 10, 111, 12, 111, 1099, 9, 111, 1, 112, 3, 112, 1102, 8, 112, 1, 112, 1, 112, 1, 112, 1, 112, 3, 112, 1108, 8, 112, 1, 113, 1, 113, 1, 113, 1, 272, 3, 90, 92, 96, 114, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 0, 33, 2, 0, 314, 314, 349, 349, 2, 0, 5, 5, 20, 20, 2, 0, 8, 8, 18, 18, 2, 0, 26, 26, 36, 36, 1, 0, 211, 213, 2, 0, 335, 337, 344, 344, 2, 0, 343, 343, 350, 350, 2, 0, 24, 24, 59, 59, 1, 0, 315, 316, 2, 0, 128, 128, 206, 206, 2, 0, 193, 193, 207, 207, 2, 0, 197, 197, 208, 208, 3, 0, 125, 127, 153, 154, 203, 205, 1, 0, 83, 102, 1, 0, 312, 314, 1, 0, 261, 262, 4, 0, 16, 16, 128, 128, 193, 193, 197, 197, 1, 0, 83, 91, 1, 0, 92, 102, 1, 0, 248, 249, 1, 0, 65, 76, 7, 0, 105, 105, 109, 111, 119, 121, 137, 137, 174, 174, 184, 185, 192, 192, 6, 0, 106, 106, 138, 138, 163, 163, 165, 165, 190, 190, 318, 318, 12, 0, 37, 37, 54, 54, 77, 78, 108, 108, 115, 116, 151, 151, 155, 155, 159, 160, 176, 176, 179, 180, 202, 202, 270, 271, 2, 0, 147, 149, 167, 167, 1, 0, 254, 256, 5, 0, 41, 41, 232, 234, 237, 239, 268, 269, 311, 311, 2, 0, 235, 236, 243, 245, 2, 0, 232, 233, 238, 239, 1, 0, 243, 244, 1, 0, 274, 307, 1, 0, 309, 310, 7, 0, 26, 26, 36, 36, 65, 69, 80, 80, 206, 208, 220, 220, 306, 306, 1220, 0, 229, 1, 0, 0, 0, 2, 238, 1, 0, 0, 0, 4, 240, 1, 0, 0, 0, 6, 242, 1, 0, 0, 0, 8, 246, 1, 0, 0, 0, 10, 248, 1, 0, 0, 0, 12, 252, 1, 0, 0, 0, 14, 258, 1, 0, 0, 0, 16, 262, 1, 0, 0, 0, 18, 267, 1, 0, 0, 0, 20, 270, 1, 0, 0, 0, 22, 274, 1, 0, 0, 0, 24, 281, 1, 0, 0, 0, 26, 287, 1, 0, 0, 0, 28, 291, 1, 0, 0, 0, 30, 300, 1, 0, 0, 0, 32, 307, 1, 0, 0, 0, 34, 336, 1, 0, 0, 0, 36, 338, 1, 0, 0, 0, 38, 341, 1, 0, 0, 0, 40, 345, 1, 0, 0, 0, 42, 353, 1, 0, 0, 0, 44, 355, 1, 0, 0, 0, 46, 358, 1, 0, 0, 0, 48, 368, 1, 0, 0, 0, 50, 388, 1, 0, 0, 0, 52, 390, 1, 0, 0, 0, 54, 400, 1, 0, 0, 0, 56, 402, 1, 0, 0, 0, 58, 412, 1, 0, 0, 0, 60, 435, 1, 0, 0, 0, 62, 437, 1, 0, 0, 0, 64, 441, 1, 0, 0, 0, 66, 443, 1, 0, 0, 0, 68, 445, 1, 0, 0, 0, 70, 447, 1, 0, 0, 0, 72, 449, 1, 0, 0, 0, 74, 451, 1, 0, 0, 0, 76, 456, 1, 0, 0, 0, 78, 465, 1, 0, 0, 0, 80, 474, 1, 0, 0, 0, 82, 483, 1, 0, 0, 0, 84, 485, 1, 0, 0, 0, 86, 487, 1, 0, 0, 0, 88, 491, 1, 0, 0, 0, 90, 497, 1, 0, 0, 0, 92, 510, 1, 0, 0, 0, 94, 552, 1, 0, 0, 0, 96, 568, 1, 0, 0, 0, 98, 592, 1, 0, 0, 0, 100, 595, 1, 0, 0, 0, 102, 625, 1, 0, 0, 0, 104, 627, 1, 0, 0, 0, 106, 636, 1, 0, 0, 0, 108, 638, 1, 0, 0, 0, 110, 645, 1, 0, 0, 0, 112, 647, 1, 0, 0, 0, 114, 654, 1, 0, 0, 0, 116, 656, 1, 0, 0, 0, 118, 660, 1, 0, 0, 0, 120, 662, 1, 0, 0, 0, 122, 674, 1, 0, 0, 0, 124, 681, 1, 0, 0, 0, 126, 694, 1, 0, 0, 0, 128, 728, 1, 0, 0, 0, 130, 735, 1, 0, 0, 0, 132, 737, 1, 0, 0, 0, 134, 746, 1, 0, 0, 0, 136, 758, 1, 0, 0, 0, 138, 809, 1, 0, 0, 0, 140, 811, 1, 0, 0, 0, 142, 825, 1, 0, 0, 0, 144, 849, 1, 0, 0, 0, 146, 851, 1, 0, 0, 0, 148, 872, 1, 0, 0, 0, 150, 874, 1, 0, 0, 0, 152, 885, 1, 0, 0, 0, 154, 891, 1, 0, 0, 0, 156, 920, 1, 0, 0, 0, 158, 922, 1, 0, 0, 0, 160, 924, 1, 0, 0, 0, 162, 985, 1, 0, 0, 0, 164, 987, 1, 0, 0, 0, 166, 989, 1, 0, 0, 0, 168, 991, 1, 0, 0, 0, 170, 993, 1, 0, 0, 0, 172, 995, 1, 0, 0, 0, 174, 997, 1, 0, 0, 0, 176, 999, 1, 0, 0, 0, 178, 1001, 1, 0, 0, 0, 180, 1003, 1, 0, 0, 0, 182, 1005, 1, 0, 0, 0, 184, 1015, 1, 0, 0, 0, 186, 1017, 1, 0, 0, 0, 188, 1027, 1, 0, 0, 0, 190, 1029, 1, 0, 0, 0, 192, 1033, 1, 0, 0, 0, 194, 1035, 1, 0, 0, 0, 196, 1045, 1, 0, 0, 0, 198, 1047, 1, 0, 0, 0, 200, 1051, 1, 0, 0, 0, 202, 1053, 1, 0, 0, 0, 204, 1057, 1, 0, 0, 0, 206, 1059, 1, 0, 0, 0, 208, 1064, 1, 0, 0, 0, 210, 1066, 1, 0, 0, 0, 212, 1080, 1, 0, 0, 0, 214, 1082, 1, 0, 0, 0, 216, 1084, 1, 0, 0, 0, 218, 1086, 1, 0, 0, 0, 220, 1090, 1, 0, 0, 0, 222, 1092, 1, 0, 0, 0, 224, 1107, 1, 0, 0, 0, 226, 1109, 1, 0, 0, 0, 228, 230, 3, 2, 1, 0, 229, 228, 1, 0, 0, 0, 229, 230, 1, 0, 0, 0, 230, 232, 1, 0, 0, 0, 231, 233, 5, 333, 0, 0, 232, 231, 1, 0, 0, 0, 232, 233, 1, 0, 0, 0, 233, 234, 1, 0, 0, 0, 234, 235, 5, 0, 0, 1, 235, 1, 1, 0, 0, 0, 236, 239, 3, 4, 2, 0, 237, 239, 3, 8, 4, 0, 238, 236, 1, 0, 0, 0, 238, 237, 1, 0, 0, 0, 239, 3, 1, 0, 0, 0, 240, 241, 3, 6, 3, 0, 241, 5, 1, 0, 0, 0, 242, 243, 3, 22, 11, 0, 243, 7, 1, 0, 0, 0, 244, 247, 3, 10, 5, 0, 245, 247, 3, 12, 6, 0, 246, 244, 1, 0, 0, 0, 246, 245, 1, 0, 0, 0, 247, 9, 1, 0, 0, 0, 248, 249, 5, 56, 0, 0, 249, 250, 5, 103, 0, 0, 250, 251, 3, 16, 8, 0, 251, 11, 1, 0, 0, 0, 252, 253, 5, 19, 0, 0, 253, 254, 5, 103, 0, 0, 254, 256, 3, 16, 8, 0, 255, 257, 3, 14, 7, 0, 256, 255, 1, 0, 0, 0, 256, 257, 1, 0, 0, 0, 257, 13, 1, 0, 0, 0, 258, 259, 5, 15, 0, 0, 259, 260, 5, 38, 0, 0, 260, 261, 3, 18, 9, 0, 261, 15, 1, 0, 0, 0, 262, 263, 5, 38, 0, 0, 263, 264, 3, 18, 9, 0, 264, 17, 1, 0, 0, 0, 265, 268, 3, 20, 10, 0, 266, 268, 3, 66, 33, 0, 267, 265, 1, 0, 0, 0, 267, 266, 1, 0, 0, 0, 268, 19, 1, 0, 0, 0, 269, 271, 7, 0, 0, 0, 270, 269, 1, 0, 0, 0, 271, 272, 1, 0, 0, 0, 272, 273, 1, 0, 0, 0, 272, 270, 1, 0, 0, 0, 273, 21, 1, 0, 0, 0, 274, 276, 3, 24, 12, 0, 275, 277, 3, 32, 16, 0, 276, 275, 1, 0, 0, 0, 276, 277, 1, 0, 0, 0, 277, 279, 1, 0, 0, 0, 278, 280, 3, 50, 25, 0, 279, 278, 1, 0, 0, 0, 279, 280, 1, 0, 0, 0, 280, 23, 1, 0, 0, 0, 281, 283, 5, 55, 0, 0, 282, 284, 3, 26, 13, 0, 283, 282, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 286, 3, 28, 14, 0, 286, 25, 1, 0, 0, 0, 287, 288, 7, 1, 0, 0, 288, 27, 1, 0, 0, 0, 289, 292, 5, 312, 0, 0, 290, 292, 3, 30, 15, 0, 291, 289, 1, 0, 0, 0, 291, 290, 1, 0, 0, 0, 292, 297, 1, 0, 0, 0, 293, 294, 5, 332, 0, 0, 294, 296, 3, 30, 15, 0, 295, 293, 1, 0, 0, 0, 296, 299, 1, 0, 0, 0, 297, 295, 1, 0, 0, 0, 297, 298, 1, 0, 0, 0, 298, 29, 1, 0, 0, 0, 299, 297, 1, 0, 0, 0, 300, 305, 3, 90, 45, 0, 301, 303, 5, 7, 0, 0, 302, 301, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 304, 1, 0, 0, 0, 304, 306, 3, 220, 110, 0, 305, 302, 1, 0, 0, 0, 305, 306, 1, 0, 0, 0, 306, 31, 1, 0, 0, 0, 307, 308, 5, 27, 0, 0, 308, 310, 3, 34, 17, 0, 309, 311, 3, 36, 18, 0, 310, 309, 1, 0, 0, 0, 310, 311, 1, 0, 0, 0, 311, 313, 1, 0, 0, 0, 312, 314, 3, 38, 19, 0, 313, 312, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, 314, 316, 1, 0, 0, 0, 315, 317, 3, 44, 22, 0, 316, 315, 1, 0, 0, 0, 316, 317, 1, 0, 0, 0, 317, 319, 1, 0, 0, 0, 318, 320, 3, 46, 23, 0, 319, 318, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 33, 1, 0, 0, 0, 321, 326, 3, 214, 107, 0, 322, 324, 5, 7, 0, 0, 323, 322, 1, 0, 0, 0, 323, 324, 1, 0, 0, 0, 324, 325, 1, 0, 0, 0, 325, 327, 3, 220, 110, 0, 326, 323, 1, 0, 0, 0, 326, 327, 1, 0, 0, 0, 327, 337, 1, 0, 0, 0, 328, 329, 5, 328, 0, 0, 329, 330, 3, 22, 11, 0, 330, 332, 5, 329, 0, 0, 331, 333, 5, 7, 0, 0, 332, 331, 1, 0, 0, 0, 332, 333, 1, 0, 0, 0, 333, 334, 1, 0, 0, 0, 334, 335, 3, 220, 110, 0, 335, 337, 1, 0, 0, 0, 336, 321, 1, 0, 0, 0, 336, 328, 1, 0, 0, 0, 337, 35, 1, 0, 0, 0, 338, 339, 5, 63, 0, 0, 339, 340, 3, 90, 45, 0, 340, 37, 1, 0, 0, 0, 341, 342, 5, 28, 0, 0, 342, 343, 5, 11, 0, 0, 343, 344, 3, 40, 20, 0, 344, 39, 1, 0, 0, 0, 345, 350, 3, 42, 21, 0, 346, 347, 5, 332, 0, 0, 347, 349, 3, 42, 21, 0, 348, 346, 1, 0, 0, 0, 349, 352, 1, 0, 0, 0, 350, 348, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 41, 1, 0, 0, 0, 352, 350, 1, 0, 0, 0, 353, 354, 3, 90, 45, 0, 354, 43, 1, 0, 0, 0, 355, 356, 5, 29, 0, 0, 356, 357, 3, 90, 45, 0, 357, 45, 1, 0, 0, 0, 358, 359, 5, 49, 0, 0, 359, 360, 5, 11, 0, 0, 360, 365, 3, 48, 24, 0, 361, 362, 5, 332, 0, 0, 362, 364, 3, 48, 24, 0, 363, 361, 1, 0, 0, 0, 364, 367, 1, 0, 0, 0, 365, 363, 1, 0, 0, 0, 365, 366, 1, 0, 0, 0, 366, 47, 1, 0, 0, 0, 367, 365, 1, 0, 0, 0, 368, 370, 3, 90, 45, 0, 369, 371, 7, 2, 0, 0, 370, 369, 1, 0, 0, 0, 370, 371, 1, 0, 0, 0, 371, 374, 1, 0, 0, 0, 372, 373, 5, 46, 0, 0, 373, 375, 7, 3, 0, 0, 374, 372, 1, 0, 0, 0, 374, 375, 1, 0, 0, 0, 375, 49, 1, 0, 0, 0, 376, 380, 5, 39, 0, 0, 377, 378, 3, 62, 31, 0, 378, 379, 5, 332, 0, 0, 379, 381, 1, 0, 0, 0, 380, 377, 1, 0, 0, 0, 380, 381, 1, 0, 0, 0, 381, 382, 1, 0, 0, 0, 382, 389, 3, 62, 31, 0, 383, 384, 5, 39, 0, 0, 384, 385, 3, 62, 31, 0, 385, 386, 5, 81, 0, 0, 386, 387, 3, 62, 31, 0, 387, 389, 1, 0, 0, 0, 388, 376, 1, 0, 0, 0, 388, 383, 1, 0, 0, 0, 389, 51, 1, 0, 0, 0, 390, 391, 3, 54, 27, 0, 391, 392, 3, 56, 28, 0, 392, 53, 1, 0, 0, 0, 393, 394, 7, 4, 0, 0, 394, 396, 5, 328, 0, 0, 395, 397, 3, 184, 92, 0, 396, 395, 1, 0, 0, 0, 396, 397, 1, 0, 0, 0, 397, 398, 1, 0, 0, 0, 398, 401, 5, 329, 0, 0, 399, 401, 3, 148, 74, 0, 400, 393, 1, 0, 0, 0, 400, 399, 1, 0, 0, 0, 401, 55, 1, 0, 0, 0, 402, 403, 5, 51, 0, 0, 403, 405, 5, 328, 0, 0, 404, 406, 3, 58, 29, 0, 405, 404, 1, 0, 0, 0, 405, 406, 1, 0, 0, 0, 406, 408, 1, 0, 0, 0, 407, 409, 3, 46, 23, 0, 408, 407, 1, 0, 0, 0, 408, 409, 1, 0, 0, 0, 409, 410, 1, 0, 0, 0, 410, 411, 5, 329, 0, 0, 411, 57, 1, 0, 0, 0, 412, 413, 5, 52, 0, 0, 413, 414, 5, 11, 0, 0, 414, 419, 3, 90, 45, 0, 415, 416, 5, 332, 0, 0, 416, 418, 3, 90, 45, 0, 417, 415, 1, 0, 0, 0, 418, 421, 1, 0, 0, 0, 419, 417, 1, 0, 0, 0, 419, 420, 1, 0, 0, 0, 420, 59, 1, 0, 0, 0, 421, 419, 1, 0, 0, 0, 422, 436, 3, 66, 33, 0, 423, 425, 3, 72, 36, 0, 424, 423, 1, 0, 0, 0, 424, 425, 1, 0, 0, 0, 425, 426, 1, 0, 0, 0, 426, 436, 3, 62, 31, 0, 427, 429, 3, 72, 36, 0, 428, 427, 1, 0, 0, 0, 428, 429, 1, 0, 0, 0, 429, 430, 1, 0, 0, 0, 430, 436, 3, 70, 35, 0, 431, 436, 3, 68, 34, 0, 432, 436, 3, 76, 38, 0, 433, 436, 3, 86, 43, 0, 434, 436, 3, 74, 37, 0, 435, 422, 1, 0, 0, 0, 435, 424, 1, 0, 0, 0, 435, 428, 1, 0, 0, 0, 435, 431, 1, 0, 0, 0, 435, 432, 1, 0, 0, 0, 435, 433, 1, 0, 0, 0, 435, 434, 1, 0, 0, 0, 436, 61, 1, 0, 0, 0, 437, 438, 7, 5, 0, 0, 438, 63, 1, 0, 0, 0, 439, 442, 3, 62, 31, 0, 440, 442, 3, 70, 35, 0, 441, 439, 1, 0, 0, 0, 441, 440, 1, 0, 0, 0, 442, 65, 1, 0, 0, 0, 443, 444, 7, 6, 0, 0, 444, 67, 1, 0, 0, 0, 445, 446, 7, 7, 0, 0, 446, 69, 1, 0, 0, 0, 447, 448, 5, 346, 0, 0, 448, 71, 1, 0, 0, 0, 449, 450, 7, 8, 0, 0, 450, 73, 1, 0, 0, 0, 451, 452, 5, 45, 0, 0, 452, 75, 1, 0, 0, 0, 453, 457, 3, 78, 39, 0, 454, 457, 3, 80, 40, 0, 455, 457, 3, 82, 41, 0, 456, 453, 1, 0, 0, 0, 456, 454, 1, 0, 0, 0, 456, 455, 1, 0, 0, 0, 457, 77, 1, 0, 0, 0, 458, 459, 5, 128, 0, 0, 459, 466, 3, 66, 33, 0, 460, 461, 5, 209, 0, 0, 461, 462, 7, 9, 0, 0, 462, 463, 3, 66, 33, 0, 463, 464, 5, 210, 0, 0, 464, 466, 1, 0, 0, 0, 465, 458, 1, 0, 0, 0, 465, 460, 1, 0, 0, 0, 466, 79, 1, 0, 0, 0, 467, 468, 5, 193, 0, 0, 468, 475, 3, 66, 33, 0, 469, 470, 5, 209, 0, 0, 470, 471, 7, 10, 0, 0, 471, 472, 3, 66, 33, 0, 472, 473, 5, 210, 0, 0, 473, 475, 1, 0, 0, 0, 474, 467, 1, 0, 0, 0, 474, 469, 1, 0, 0, 0, 475, 81, 1, 0, 0, 0, 476, 477, 5, 197, 0, 0, 477, 484, 3, 66, 33, 0, 478, 479, 5, 209, 0, 0, 479, 480, 7, 11, 0, 0, 480, 481, 3, 66, 33, 0, 481, 482, 5, 210, 0, 0, 482, 484, 1, 0, 0, 0, 483, 476, 1, 0, 0, 0, 483, 478, 1, 0, 0, 0, 484, 83, 1, 0, 0, 0, 485, 486, 7, 12, 0, 0, 486, 85, 1, 0, 0, 0, 487, 488, 5, 82, 0, 0, 488, 489, 3, 90, 45, 0, 489, 490, 3, 88, 44, 0, 490, 87, 1, 0, 0, 0, 491, 492, 7, 13, 0, 0, 492, 89, 1, 0, 0, 0, 493, 494, 6, 45, -1, 0, 494, 495, 5, 44, 0, 0, 495, 498, 3, 90, 45, 4, 496, 498, 3, 92, 46, 0, 497, 493, 1, 0, 0, 0, 497, 496, 1, 0, 0, 0, 498, 507, 1, 0, 0, 0, 499, 500, 10, 3, 0, 0, 500, 501, 5, 6, 0, 0, 501, 506, 3, 90, 45, 4, 502, 503, 10, 2, 0, 0, 503, 504, 5, 48, 0, 0, 504, 506, 3, 90, 45, 3, 505, 499, 1, 0, 0, 0, 505, 502, 1, 0, 0, 0, 506, 509, 1, 0, 0, 0, 507, 505, 1, 0, 0, 0, 507, 508, 1, 0, 0, 0, 508, 91, 1, 0, 0, 0, 509, 507, 1, 0, 0, 0, 510, 511, 6, 46, -1, 0, 511, 512, 3, 96, 48, 0, 512, 549, 1, 0, 0, 0, 513, 514, 10, 6, 0, 0, 514, 515, 3, 98, 49, 0, 515, 516, 3, 92, 46, 7, 516, 548, 1, 0, 0, 0, 517, 519, 10, 4, 0, 0, 518, 520, 5, 44, 0, 0, 519, 518, 1, 0, 0, 0, 519, 520, 1, 0, 0, 0, 520, 521, 1, 0, 0, 0, 521, 522, 5, 10, 0, 0, 522, 523, 3, 92, 46, 0, 523, 524, 5, 6, 0, 0, 524, 525, 3, 92, 46, 5, 525, 548, 1, 0, 0, 0, 526, 528, 10, 3, 0, 0, 527, 529, 5, 44, 0, 0, 528, 527, 1, 0, 0, 0, 528, 529, 1, 0, 0, 0, 529, 530, 1, 0, 0, 0, 530, 531, 5, 38, 0, 0, 531, 548, 3, 92, 46, 4, 532, 533, 10, 2, 0, 0, 533, 534, 5, 53, 0, 0, 534, 548, 3, 92, 46, 3, 535, 536, 10, 5, 0, 0, 536, 537, 5, 34, 0, 0, 537, 548, 3, 100, 50, 0, 538, 540, 10, 1, 0, 0, 539, 541, 5, 44, 0, 0, 540, 539, 1, 0, 0, 0, 540, 541, 1, 0, 0, 0, 541, 542, 1, 0, 0, 0, 542, 543, 5, 30, 0, 0, 543, 544, 5, 328, 0, 0, 544, 545, 3, 94, 47, 0, 545, 546, 5, 329, 0, 0, 546, 548, 1, 0, 0, 0, 547, 513, 1, 0, 0, 0, 547, 517, 1, 0, 0, 0, 547, 526, 1, 0, 0, 0, 547, 532, 1, 0, 0, 0, 547, 535, 1, 0, 0, 0, 547, 538, 1, 0, 0, 0, 548, 551, 1, 0, 0, 0, 549, 547, 1, 0, 0, 0, 549, 550, 1, 0, 0, 0, 550, 93, 1, 0, 0, 0, 551, 549, 1, 0, 0, 0, 552, 557, 3, 90, 45, 0, 553, 554, 5, 332, 0, 0, 554, 556, 3, 90, 45, 0, 555, 553, 1, 0, 0, 0, 556, 559, 1, 0, 0, 0, 557, 555, 1, 0, 0, 0, 557, 558, 1, 0, 0, 0, 558, 95, 1, 0, 0, 0, 559, 557, 1, 0, 0, 0, 560, 561, 6, 48, -1, 0, 561, 569, 3, 60, 30, 0, 562, 569, 3, 216, 108, 0, 563, 569, 3, 102, 51, 0, 564, 565, 5, 328, 0, 0, 565, 566, 3, 90, 45, 0, 566, 567, 5, 329, 0, 0, 567, 569, 1, 0, 0, 0, 568, 560, 1, 0, 0, 0, 568, 562, 1, 0, 0, 0, 568, 563, 1, 0, 0, 0, 568, 564, 1, 0, 0, 0, 569, 578, 1, 0, 0, 0, 570, 571, 10, 2, 0, 0, 571, 572, 7, 14, 0, 0, 572, 577, 3, 96, 48, 3, 573, 574, 10, 1, 0, 0, 574, 575, 7, 8, 0, 0, 575, 577, 3, 96, 48, 2, 576, 570, 1, 0, 0, 0, 576, 573, 1, 0, 0, 0, 577, 580, 1, 0, 0, 0, 578, 576, 1, 0, 0, 0, 578, 579, 1, 0, 0, 0, 579, 97, 1, 0, 0, 0, 580, 578, 1, 0, 0, 0, 581, 593, 5, 319, 0, 0, 582, 593, 5, 320, 0, 0, 583, 593, 5, 321, 0, 0, 584, 585, 5, 321, 0, 0, 585, 593, 5, 319, 0, 0, 586, 587, 5, 320, 0, 0, 587, 593, 5, 319, 0, 0, 588, 589, 5, 321, 0, 0, 589, 593, 5, 320, 0, 0, 590, 591, 5, 322, 0, 0, 591, 593, 5, 319, 0, 0, 592, 581, 1, 0, 0, 0, 592, 582, 1, 0, 0, 0, 592, 583, 1, 0, 0, 0, 592, 584, 1, 0, 0, 0, 592, 586, 1, 0, 0, 0, 592, 588, 1, 0, 0, 0, 592, 590, 1, 0, 0, 0, 593, 99, 1, 0, 0, 0, 594, 596, 5, 44, 0, 0, 595, 594, 1, 0, 0, 0, 595, 596, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 597, 598, 5, 45, 0, 0, 598, 101, 1, 0, 0, 0, 599, 600, 3, 172, 86, 0, 600, 601, 5, 328, 0, 0, 601, 602, 3, 218, 109, 0, 602, 603, 5, 329, 0, 0, 603, 626, 1, 0, 0, 0, 604, 605, 3, 126, 63, 0, 605, 606, 5, 328, 0, 0, 606, 607, 3, 184, 92, 0, 607, 608, 5, 329, 0, 0, 608, 626, 1, 0, 0, 0, 609, 626, 3, 128, 64, 0, 610, 626, 3, 52, 26, 0, 611, 626, 3, 148, 74, 0, 612, 614, 3, 148, 74, 0, 613, 615, 3, 46, 23, 0, 614, 613, 1, 0, 0, 0, 614, 615, 1, 0, 0, 0, 615, 616, 1, 0, 0, 0, 616, 617, 3, 152, 76, 0, 617, 626, 1, 0, 0, 0, 618, 626, 3, 132, 66, 0, 619, 626, 3, 130, 65, 0, 620, 626, 3, 120, 60, 0, 621, 626, 3, 122, 61, 0, 622, 626, 3, 112, 56, 0, 623, 626, 3, 108, 54, 0, 624, 626, 3, 104, 52, 0, 625, 599, 1, 0, 0, 0, 625, 604, 1, 0, 0, 0, 625, 609, 1, 0, 0, 0, 625, 610, 1, 0, 0, 0, 625, 611, 1, 0, 0, 0, 625, 612, 1, 0, 0, 0, 625, 618, 1, 0, 0, 0, 625, 619, 1, 0, 0, 0, 625, 620, 1, 0, 0, 0, 625, 621, 1, 0, 0, 0, 625, 622, 1, 0, 0, 0, 625, 623, 1, 0, 0, 0, 625, 624, 1, 0, 0, 0, 626, 103, 1, 0, 0, 0, 627, 628, 3, 106, 53, 0, 628, 629, 5, 328, 0, 0, 629, 630, 3, 114, 57, 0, 630, 631, 5, 332, 0, 0, 631, 632, 3, 186, 93, 0, 632, 633, 5, 332, 0, 0, 633, 634, 3, 186, 93, 0, 634, 635, 5, 329, 0, 0, 635, 105, 1, 0, 0, 0, 636, 637, 7, 15, 0, 0, 637, 107, 1, 0, 0, 0, 638, 639, 5, 146, 0, 0, 639, 640, 5, 328, 0, 0, 640, 641, 3, 110, 55, 0, 641, 642, 5, 332, 0, 0, 642, 643, 3, 186, 93, 0, 643, 644, 5, 329, 0, 0, 644, 109, 1, 0, 0, 0, 645, 646, 7, 16, 0, 0, 646, 111, 1, 0, 0, 0, 647, 648, 5, 142, 0, 0, 648, 649, 5, 328, 0, 0, 649, 650, 3, 118, 59, 0, 650, 651, 5, 27, 0, 0, 651, 652, 3, 186, 93, 0, 652, 653, 5, 329, 0, 0, 653, 113, 1, 0, 0, 0, 654, 655, 7, 17, 0, 0, 655, 115, 1, 0, 0, 0, 656, 657, 7, 18, 0, 0, 657, 117, 1, 0, 0, 0, 658, 661, 3, 114, 57, 0, 659, 661, 3, 116, 58, 0, 660, 658, 1, 0, 0, 0, 660, 659, 1, 0, 0, 0, 661, 119, 1, 0, 0, 0, 662, 663, 5, 308, 0, 0, 663, 664, 5, 328, 0, 0, 664, 669, 3, 200, 100, 0, 665, 666, 5, 332, 0, 0, 666, 668, 3, 190, 95, 0, 667, 665, 1, 0, 0, 0, 668, 671, 1, 0, 0, 0, 669, 667, 1, 0, 0, 0, 669, 670, 1, 0, 0, 0, 670, 672, 1, 0, 0, 0, 671, 669, 1, 0, 0, 0, 672, 673, 5, 329, 0, 0, 673, 121, 1, 0, 0, 0, 674, 675, 5, 171, 0, 0, 675, 676, 5, 328, 0, 0, 676, 677, 3, 186, 93, 0, 677, 678, 5, 30, 0, 0, 678, 679, 3, 186, 93, 0, 679, 680, 5, 329, 0, 0, 680, 123, 1, 0, 0, 0, 681, 682, 3, 200, 100, 0, 682, 683, 5, 319, 0, 0, 683, 684, 5, 239, 0, 0, 684, 685, 5, 328, 0, 0, 685, 686, 3, 202, 101, 0, 686, 687, 5, 329, 0, 0, 687, 125, 1, 0, 0, 0, 688, 695, 3, 156, 78, 0, 689, 695, 3, 162, 81, 0, 690, 695, 3, 164, 82, 0, 691, 695, 3, 166, 83, 0, 692, 695, 3, 170, 85, 0, 693, 695, 3, 172, 86, 0, 694, 688, 1, 0, 0, 0, 694, 689, 1, 0, 0, 0, 694, 690, 1, 0, 0, 0, 694, 691, 1, 0, 0, 0, 694, 692, 1, 0, 0, 0, 694, 693, 1, 0, 0, 0, 695, 127, 1, 0, 0, 0, 696, 697, 5, 12, 0, 0, 697, 699, 3, 90, 45, 0, 698, 700, 3, 146, 73, 0, 699, 698, 1, 0, 0, 0, 700, 701, 1, 0, 0, 0, 701, 699, 1, 0, 0, 0, 701, 702, 1, 0, 0, 0, 702, 705, 1, 0, 0, 0, 703, 704, 5, 22, 0, 0, 704, 706, 3, 186, 93, 0, 705, 703, 1, 0, 0, 0, 705, 706, 1, 0, 0, 0, 706, 707, 1, 0, 0, 0, 707, 708, 5, 79, 0, 0, 708, 729, 1, 0, 0, 0, 709, 711, 5, 12, 0, 0, 710, 712, 3, 146, 73, 0, 711, 710, 1, 0, 0, 0, 712, 713, 1, 0, 0, 0, 713, 711, 1, 0, 0, 0, 713, 714, 1, 0, 0, 0, 714, 717, 1, 0, 0, 0, 715, 716, 5, 22, 0, 0, 716, 718, 3, 186, 93, 0, 717, 715, 1, 0, 0, 0, 717, 718, 1, 0, 0, 0, 718, 719, 1, 0, 0, 0, 719, 720, 5, 79, 0, 0, 720, 729, 1, 0, 0, 0, 721, 722, 5, 13, 0, 0, 722, 723, 5, 328, 0, 0, 723, 724, 3, 90, 45, 0, 724, 725, 5, 7, 0, 0, 725, 726, 3, 144, 72, 0, 726, 727, 5, 329, 0, 0, 727, 729, 1, 0, 0, 0, 728, 696, 1, 0, 0, 0, 728, 709, 1, 0, 0, 0, 728, 721, 1, 0, 0, 0, 729, 129, 1, 0, 0, 0, 730, 736, 3, 134, 67, 0, 731, 736, 3, 136, 68, 0, 732, 736, 3, 138, 69, 0, 733, 736, 3, 140, 70, 0, 734, 736, 3, 142, 71, 0, 735, 730, 1, 0, 0, 0, 735, 731, 1, 0, 0, 0, 735, 732, 1, 0, 0, 0, 735, 733, 1, 0, 0, 0, 735, 734, 1, 0, 0, 0, 736, 131, 1, 0, 0, 0, 737, 738, 3, 174, 87, 0, 738, 739, 5, 328, 0, 0, 739, 742, 3, 130, 65, 0, 740, 741, 5, 332, 0, 0, 741, 743, 3, 198, 99, 0, 742, 740, 1, 0, 0, 0, 742, 743, 1, 0, 0, 0, 743, 744, 1, 0, 0, 0, 744, 745, 5, 329, 0, 0, 745, 133, 1, 0, 0, 0, 746, 747, 3, 168, 84, 0, 747, 748, 5, 328, 0, 0, 748, 753, 3, 202, 101, 0, 749, 750, 5, 332, 0, 0, 750, 752, 3, 188, 94, 0, 751, 749, 1, 0, 0, 0, 752, 755, 1, 0, 0, 0, 753, 751, 1, 0, 0, 0, 753, 754, 1, 0, 0, 0, 754, 756, 1, 0, 0, 0, 755, 753, 1, 0, 0, 0, 756, 757, 5, 329, 0, 0, 757, 135, 1, 0, 0, 0, 758, 759, 3, 176, 88, 0, 759, 760, 5, 328, 0, 0, 760, 761, 3, 200, 100, 0, 761, 762, 5, 332, 0, 0, 762, 767, 3, 202, 101, 0, 763, 764, 5, 332, 0, 0, 764, 766, 3, 188, 94, 0, 765, 763, 1, 0, 0, 0, 766, 769, 1, 0, 0, 0, 767, 765, 1, 0, 0, 0, 767, 768, 1, 0, 0, 0, 768, 770, 1, 0, 0, 0, 769, 767, 1, 0, 0, 0, 770, 771, 5, 329, 0, 0, 771, 137, 1, 0, 0, 0, 772, 773, 3, 178, 89, 0, 773, 774, 5, 328, 0, 0, 774, 775, 5, 330, 0, 0, 775, 780, 3, 196, 98, 0, 776, 777, 5, 332, 0, 0, 777, 779, 3, 196, 98, 0, 778, 776, 1, 0, 0, 0, 779, 782, 1, 0, 0, 0, 780, 778, 1, 0, 0, 0, 780, 781, 1, 0, 0, 0, 781, 783, 1, 0, 0, 0, 782, 780, 1, 0, 0, 0, 783, 784, 5, 331, 0, 0, 784, 785, 5, 332, 0, 0, 785, 790, 3, 202, 101, 0, 786, 787, 5, 332, 0, 0, 787, 789, 3, 188, 94, 0, 788, 786, 1, 0, 0, 0, 789, 792, 1, 0, 0, 0, 790, 788, 1, 0, 0, 0, 790, 791, 1, 0, 0, 0, 791, 793, 1, 0, 0, 0, 792, 790, 1, 0, 0, 0, 793, 794, 5, 329, 0, 0, 794, 810, 1, 0, 0, 0, 795, 796, 3, 178, 89, 0, 796, 797, 5, 328, 0, 0, 797, 798, 3, 210, 105, 0, 798, 799, 5, 332, 0, 0, 799, 804, 3, 212, 106, 0, 800, 801, 5, 332, 0, 0, 801, 803, 3, 188, 94, 0, 802, 800, 1, 0, 0, 0, 803, 806, 1, 0, 0, 0, 804, 802, 1, 0, 0, 0, 804, 805, 1, 0, 0, 0, 805, 807, 1, 0, 0, 0, 806, 804, 1, 0, 0, 0, 807, 808, 5, 329, 0, 0, 808, 810, 1, 0, 0, 0, 809, 772, 1, 0, 0, 0, 809, 795, 1, 0, 0, 0, 810, 139, 1, 0, 0, 0, 811, 812, 3, 200, 100, 0, 812, 813, 5, 319, 0, 0, 813, 814, 3, 180, 90, 0, 814, 815, 5, 328, 0, 0, 815, 820, 3, 202, 101, 0, 816, 817, 5, 332, 0, 0, 817, 819, 3, 188, 94, 0, 818, 816, 1, 0, 0, 0, 819, 822, 1, 0, 0, 0, 820, 818, 1, 0, 0, 0, 820, 821, 1, 0, 0, 0, 821, 823, 1, 0, 0, 0, 822, 820, 1, 0, 0, 0, 823, 824, 5, 329, 0, 0, 824, 141, 1, 0, 0, 0, 825, 826, 3, 200, 100, 0, 826, 827, 5, 319, 0, 0, 827, 828, 3, 182, 91, 0, 828, 829, 5, 328, 0, 0, 829, 834, 3, 202, 101, 0, 830, 831, 5, 332, 0, 0, 831, 833, 3, 188, 94, 0, 832, 830, 1, 0, 0, 0, 833, 836, 1, 0, 0, 0, 834, 832, 1, 0, 0, 0, 834, 835, 1, 0, 0, 0, 835, 837, 1, 0, 0, 0, 836, 834, 1, 0, 0, 0, 837, 838, 5, 329, 0, 0, 838, 143, 1, 0, 0, 0, 839, 850, 5, 128, 0, 0, 840, 850, 5, 193, 0, 0, 841, 850, 5, 197, 0, 0, 842, 850, 5, 32, 0, 0, 843, 850, 5, 33, 0, 0, 844, 850, 5, 21, 0, 0, 845, 850, 5, 40, 0, 0, 846, 850, 5, 25, 0, 0, 847, 850, 5, 57, 0, 0, 848, 850, 5, 9, 0, 0, 849, 839, 1, 0, 0, 0, 849, 840, 1, 0, 0, 0, 849, 841, 1, 0, 0, 0, 849, 842, 1, 0, 0, 0, 849, 843, 1, 0, 0, 0, 849, 844, 1, 0, 0, 0, 849, 845, 1, 0, 0, 0, 849, 846, 1, 0, 0, 0, 849, 847, 1, 0, 0, 0, 849, 848, 1, 0, 0, 0, 850, 145, 1, 0, 0, 0, 851, 852, 5, 62, 0, 0, 852, 853, 3, 186, 93, 0, 853, 854, 5, 58, 0, 0, 854, 855, 3, 186, 93, 0, 855, 147, 1, 0, 0, 0, 856, 857, 3, 154, 77, 0, 857, 858, 5, 328, 0, 0, 858, 859, 3, 186, 93, 0, 859, 860, 5, 329, 0, 0, 860, 873, 1, 0, 0, 0, 861, 862, 5, 66, 0, 0, 862, 863, 5, 328, 0, 0, 863, 864, 5, 312, 0, 0, 864, 873, 5, 329, 0, 0, 865, 866, 5, 66, 0, 0, 866, 867, 5, 328, 0, 0, 867, 868, 5, 20, 0, 0, 868, 869, 3, 186, 93, 0, 869, 870, 5, 329, 0, 0, 870, 873, 1, 0, 0, 0, 871, 873, 3, 150, 75, 0, 872, 856, 1, 0, 0, 0, 872, 861, 1, 0, 0, 0, 872, 865, 1, 0, 0, 0, 872, 871, 1, 0, 0, 0, 873, 149, 1, 0, 0, 0, 874, 875, 7, 19, 0, 0, 875, 876, 5, 328, 0, 0, 876, 877, 3, 186, 93, 0, 877, 878, 5, 332, 0, 0, 878, 881, 3, 64, 32, 0, 879, 880, 5, 332, 0, 0, 880, 882, 3, 64, 32, 0, 881, 879, 1, 0, 0, 0, 881, 882, 1, 0, 0, 0, 882, 883, 1, 0, 0, 0, 883, 884, 5, 329, 0, 0, 884, 151, 1, 0, 0, 0, 885, 886, 5, 221, 0, 0, 886, 887, 5, 328, 0, 0, 887, 888, 5, 63, 0, 0, 888, 889, 3, 90, 45, 0, 889, 890, 5, 329, 0, 0, 890, 153, 1, 0, 0, 0, 891, 892, 7, 20, 0, 0, 892, 155, 1, 0, 0, 0, 893, 921, 5, 104, 0, 0, 894, 921, 5, 112, 0, 0, 895, 921, 5, 113, 0, 0, 896, 921, 5, 114, 0, 0, 897, 921, 5, 117, 0, 0, 898, 921, 5, 122, 0, 0, 899, 921, 5, 139, 0, 0, 900, 921, 5, 140, 0, 0, 901, 921, 5, 141, 0, 0, 902, 921, 5, 143, 0, 0, 903, 921, 5, 152, 0, 0, 904, 921, 5, 156, 0, 0, 905, 921, 5, 157, 0, 0, 906, 921, 5, 158, 0, 0, 907, 921, 5, 318, 0, 0, 908, 921, 5, 170, 0, 0, 909, 921, 5, 172, 0, 0, 910, 921, 5, 173, 0, 0, 911, 921, 5, 175, 0, 0, 912, 921, 5, 177, 0, 0, 913, 921, 5, 178, 0, 0, 914, 921, 5, 182, 0, 0, 915, 921, 5, 183, 0, 0, 916, 921, 5, 186, 0, 0, 917, 921, 5, 198, 0, 0, 918, 921, 3, 158, 79, 0, 919, 921, 3, 160, 80, 0, 920, 893, 1, 0, 0, 0, 920, 894, 1, 0, 0, 0, 920, 895, 1, 0, 0, 0, 920, 896, 1, 0, 0, 0, 920, 897, 1, 0, 0, 0, 920, 898, 1, 0, 0, 0, 920, 899, 1, 0, 0, 0, 920, 900, 1, 0, 0, 0, 920, 901, 1, 0, 0, 0, 920, 902, 1, 0, 0, 0, 920, 903, 1, 0, 0, 0, 920, 904, 1, 0, 0, 0, 920, 905, 1, 0, 0, 0, 920, 906, 1, 0, 0, 0, 920, 907, 1, 0, 0, 0, 920, 908, 1, 0, 0, 0, 920, 909, 1, 0, 0, 0, 920, 910, 1, 0, 0, 0, 920, 911, 1, 0, 0, 0, 920, 912, 1, 0, 0, 0, 920, 913, 1, 0, 0, 0, 920, 914, 1, 0, 0, 0, 920, 915, 1, 0, 0, 0, 920, 916, 1, 0, 0, 0, 920, 917, 1, 0, 0, 0, 920, 918, 1, 0, 0, 0, 920, 919, 1, 0, 0, 0, 921, 157, 1, 0, 0, 0, 922, 923, 7, 21, 0, 0, 923, 159, 1, 0, 0, 0, 924, 925, 7, 22, 0, 0, 925, 161, 1, 0, 0, 0, 926, 986, 3, 84, 42, 0, 927, 986, 5, 272, 0, 0, 928, 986, 5, 107, 0, 0, 929, 986, 5, 118, 0, 0, 930, 986, 5, 123, 0, 0, 931, 986, 5, 124, 0, 0, 932, 986, 5, 128, 0, 0, 933, 986, 5, 129, 0, 0, 934, 986, 5, 130, 0, 0, 935, 986, 5, 131, 0, 0, 936, 986, 5, 132, 0, 0, 937, 986, 5, 16, 0, 0, 938, 986, 5, 87, 0, 0, 939, 986, 5, 133, 0, 0, 940, 986, 5, 134, 0, 0, 941, 986, 5, 215, 0, 0, 942, 986, 5, 135, 0, 0, 943, 986, 5, 136, 0, 0, 944, 986, 5, 216, 0, 0, 945, 986, 5, 217, 0, 0, 946, 986, 5, 144, 0, 0, 947, 986, 5, 145, 0, 0, 948, 986, 5, 86, 0, 0, 949, 986, 5, 229, 0, 0, 950, 986, 5, 150, 0, 0, 951, 986, 5, 161, 0, 0, 952, 986, 5, 162, 0, 0, 953, 986, 5, 83, 0, 0, 954, 986, 5, 85, 0, 0, 955, 986, 5, 240, 0, 0, 956, 986, 5, 241, 0, 0, 957, 986, 5, 89, 0, 0, 958, 986, 5, 164, 0, 0, 959, 986, 5, 242, 0, 0, 960, 986, 5, 166, 0, 0, 961, 986, 5, 168, 0, 0, 962, 986, 5, 169, 0, 0, 963, 986, 5, 90, 0, 0, 964, 986, 5, 181, 0, 0, 965, 986, 5, 84, 0, 0, 966, 986, 5, 257, 0, 0, 967, 986, 5, 188, 0, 0, 968, 986, 5, 189, 0, 0, 969, 986, 5, 191, 0, 0, 970, 986, 5, 187, 0, 0, 971, 986, 5, 193, 0, 0, 972, 986, 5, 195, 0, 0, 973, 986, 5, 196, 0, 0, 974, 986, 5, 194, 0, 0, 975, 986, 5, 197, 0, 0, 976, 986, 5, 199, 0, 0, 977, 986, 5, 200, 0, 0, 978, 986, 5, 201, 0, 0, 979, 986, 5, 88, 0, 0, 980, 986, 5, 267, 0, 0, 981, 986, 5, 265, 0, 0, 982, 986, 5, 266, 0, 0, 983, 986, 5, 91, 0, 0, 984, 986, 5, 273, 0, 0, 985, 926, 1, 0, 0, 0, 985, 927, 1, 0, 0, 0, 985, 928, 1, 0, 0, 0, 985, 929, 1, 0, 0, 0, 985, 930, 1, 0, 0, 0, 985, 931, 1, 0, 0, 0, 985, 932, 1, 0, 0, 0, 985, 933, 1, 0, 0, 0, 985, 934, 1, 0, 0, 0, 985, 935, 1, 0, 0, 0, 985, 936, 1, 0, 0, 0, 985, 937, 1, 0, 0, 0, 985, 938, 1, 0, 0, 0, 985, 939, 1, 0, 0, 0, 985, 940, 1, 0, 0, 0, 985, 941, 1, 0, 0, 0, 985, 942, 1, 0, 0, 0, 985, 943, 1, 0, 0, 0, 985, 944, 1, 0, 0, 0, 985, 945, 1, 0, 0, 0, 985, 946, 1, 0, 0, 0, 985, 947, 1, 0, 0, 0, 985, 948, 1, 0, 0, 0, 985, 949, 1, 0, 0, 0, 985, 950, 1, 0, 0, 0, 985, 951, 1, 0, 0, 0, 985, 952, 1, 0, 0, 0, 985, 953, 1, 0, 0, 0, 985, 954, 1, 0, 0, 0, 985, 955, 1, 0, 0, 0, 985, 956, 1, 0, 0, 0, 985, 957, 1, 0, 0, 0, 985, 958, 1, 0, 0, 0, 985, 959, 1, 0, 0, 0, 985, 960, 1, 0, 0, 0, 985, 961, 1, 0, 0, 0, 985, 962, 1, 0, 0, 0, 985, 963, 1, 0, 0, 0, 985, 964, 1, 0, 0, 0, 985, 965, 1, 0, 0, 0, 985, 966, 1, 0, 0, 0, 985, 967, 1, 0, 0, 0, 985, 968, 1, 0, 0, 0, 985, 969, 1, 0, 0, 0, 985, 970, 1, 0, 0, 0, 985, 971, 1, 0, 0, 0, 985, 972, 1, 0, 0, 0, 985, 973, 1, 0, 0, 0, 985, 974, 1, 0, 0, 0, 985, 975, 1, 0, 0, 0, 985, 976, 1, 0, 0, 0, 985, 977, 1, 0, 0, 0, 985, 978, 1, 0, 0, 0, 985, 979, 1, 0, 0, 0, 985, 980, 1, 0, 0, 0, 985, 981, 1, 0, 0, 0, 985, 982, 1, 0, 0, 0, 985, 983, 1, 0, 0, 0, 985, 984, 1, 0, 0, 0, 986, 163, 1, 0, 0, 0, 987, 988, 7, 23, 0, 0, 988, 165, 1, 0, 0, 0, 989, 990, 7, 24, 0, 0, 990, 167, 1, 0, 0, 0, 991, 992, 5, 252, 0, 0, 992, 169, 1, 0, 0, 0, 993, 994, 5, 264, 0, 0, 994, 171, 1, 0, 0, 0, 995, 996, 5, 246, 0, 0, 996, 173, 1, 0, 0, 0, 997, 998, 7, 25, 0, 0, 998, 175, 1, 0, 0, 0, 999, 1000, 7, 26, 0, 0, 1000, 177, 1, 0, 0, 0, 1001, 1002, 7, 27, 0, 0, 1002, 179, 1, 0, 0, 0, 1003, 1004, 7, 28, 0, 0, 1004, 181, 1, 0, 0, 0, 1005, 1006, 7, 29, 0, 0, 1006, 183, 1, 0, 0, 0, 1007, 1012, 3, 186, 93, 0, 1008, 1009, 5, 332, 0, 0, 1009, 1011, 3, 186, 93, 0, 1010, 1008, 1, 0, 0, 0, 1011, 1014, 1, 0, 0, 0, 1012, 1010, 1, 0, 0, 0, 1012, 1013, 1, 0, 0, 0, 1013, 1016, 1, 0, 0, 0, 1014, 1012, 1, 0, 0, 0, 1015, 1007, 1, 0, 0, 0, 1015, 1016, 1, 0, 0, 0, 1016, 185, 1, 0, 0, 0, 1017, 1018, 3, 90, 45, 0, 1018, 187, 1, 0, 0, 0, 1019, 1020, 3, 192, 96, 0, 1020, 1021, 5, 319, 0, 0, 1021, 1022, 3, 204, 102, 0, 1022, 1028, 1, 0, 0, 0, 1023, 1024, 3, 66, 33, 0, 1024, 1025, 5, 319, 0, 0, 1025, 1026, 3, 204, 102, 0, 1026, 1028, 1, 0, 0, 0, 1027, 1019, 1, 0, 0, 0, 1027, 1023, 1, 0, 0, 0, 1028, 189, 1, 0, 0, 0, 1029, 1030, 3, 194, 97, 0, 1030, 1031, 5, 319, 0, 0, 1031, 1032, 3, 206, 103, 0, 1032, 191, 1, 0, 0, 0, 1033, 1034, 7, 30, 0, 0, 1034, 193, 1, 0, 0, 0, 1035, 1036, 7, 31, 0, 0, 1036, 195, 1, 0, 0, 0, 1037, 1046, 3, 200, 100, 0, 1038, 1039, 3, 200, 100, 0, 1039, 1040, 3, 198, 99, 0, 1040, 1046, 1, 0, 0, 0, 1041, 1042, 3, 200, 100, 0, 1042, 1043, 5, 326, 0, 0, 1043, 1044, 3, 198, 99, 0, 1044, 1046, 1, 0, 0, 0, 1045, 1037, 1, 0, 0, 0, 1045, 1038, 1, 0, 0, 0, 1045, 1041, 1, 0, 0, 0, 1046, 197, 1, 0, 0, 0, 1047, 1048, 3, 64, 32, 0, 1048, 199, 1, 0, 0, 0, 1049, 1052, 3, 222, 111, 0, 1050, 1052, 3, 66, 33, 0, 1051, 1049, 1, 0, 0, 0, 1051, 1050, 1, 0, 0, 0, 1052, 201, 1, 0, 0, 0, 1053, 1054, 3, 204, 102, 0, 1054, 203, 1, 0, 0, 0, 1055, 1058, 3, 222, 111, 0, 1056, 1058, 3, 60, 30, 0, 1057, 1055, 1, 0, 0, 0, 1057, 1056, 1, 0, 0, 0, 1058, 205, 1, 0, 0, 0, 1059, 1060, 3, 66, 33, 0, 1060, 207, 1, 0, 0, 0, 1061, 1065, 5, 285, 0, 0, 1062, 1065, 5, 252, 0, 0, 1063, 1065, 3, 66, 33, 0, 1064, 1061, 1, 0, 0, 0, 1064, 1062, 1, 0, 0, 0, 1064, 1063, 1, 0, 0, 0, 1065, 209, 1, 0, 0, 0, 1066, 1067, 3, 208, 104, 0, 1067, 1068, 5, 319, 0, 0, 1068, 1069, 3, 204, 102, 0, 1069, 211, 1, 0, 0, 0, 1070, 1071, 3, 208, 104, 0, 1071, 1072, 5, 319, 0, 0, 1072, 1073, 3, 204, 102, 0, 1073, 1081, 1, 0, 0, 0, 1074, 1075, 3, 208, 104, 0, 1075, 1076, 5, 319, 0, 0, 1076, 1077, 5, 330, 0, 0, 1077, 1078, 3, 204, 102, 0, 1078, 1079, 5, 331, 0, 0, 1079, 1081, 1, 0, 0, 0, 1080, 1070, 1, 0, 0, 0, 1080, 1074, 1, 0, 0, 0, 1081, 213, 1, 0, 0, 0, 1082, 1083, 3, 222, 111, 0, 1083, 215, 1, 0, 0, 0, 1084, 1085, 3, 222, 111, 0, 1085, 217, 1, 0, 0, 0, 1086, 1087, 3, 222, 111, 0, 1087, 1088, 5, 327, 0, 0, 1088, 1089, 5, 312, 0, 0, 1089, 219, 1, 0, 0, 0, 1090, 1091, 3, 224, 112, 0, 1091, 221, 1, 0, 0, 0, 1092, 1097, 3, 224, 112, 0, 1093, 1094, 5, 327, 0, 0, 1094, 1096, 3, 224, 112, 0, 1095, 1093, 1, 0, 0, 0, 1096, 1099, 1, 0, 0, 0, 1097, 1095, 1, 0, 0, 0, 1097, 1098, 1, 0, 0, 0, 1098, 223, 1, 0, 0, 0, 1099, 1097, 1, 0, 0, 0, 1100, 1102, 5, 327, 0, 0, 1101, 1100, 1, 0, 0, 0, 1101, 1102, 1, 0, 0, 0, 1102, 1103, 1, 0, 0, 0, 1103, 1108, 5, 349, 0, 0, 1104, 1108, 5, 351, 0, 0, 1105, 1108, 3, 226, 113, 0, 1106, 1108, 3, 126, 63, 0, 1107, 1101, 1, 0, 0, 0, 1107, 1104, 1, 0, 0, 0, 1107, 1105, 1, 0, 0, 0, 1107, 1106, 1, 0, 0, 0, 1108, 225, 1, 0, 0, 0, 1109, 1110, 7, 32, 0, 0, 1110, 227, 1, 0, 0, 0, 91, 229, 232, 238, 246, 256, 267, 272, 276, 279, 283, 291, 297, 302, 305, 310, 313, 316, 319, 323, 326, 332, 336, 350, 365, 370, 374, 380, 388, 396, 400, 405, 408, 419, 424, 428, 435, 441, 456, 465, 474, 483, 497, 505, 507, 519, 528, 540, 547, 549, 557, 568, 576, 578, 592, 595, 614, 625, 660, 669, 694, 701, 705, 713, 717, 728, 735, 742, 753, 767, 780, 790, 804, 809, 820, 834, 849, 872, 881, 920, 985, 1012, 1015, 1027, 1045, 1051, 1057, 1064, 1080, 1097, 1101, 1107] \ No newline at end of file diff --git a/src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLParser.java b/src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLParser.java new file mode 100644 index 000000000000..cbb96dc5db12 --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLParser.java @@ -0,0 +1,11122 @@ +// Generated from /home/ubuntu/ws/OpenSearch-Dashboards/src/plugins/data/public/antlr/opensearch_sql/grammar/OpenSearchSQLParser.g4 by ANTLR 4.13.1 +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +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", "CheckReturnValue"}) +public class OpenSearchSQLParser extends Parser { + static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + SPACE=1, SPEC_SQL_COMMENT=2, COMMENT_INPUT=3, LINE_COMMENT=4, ALL=5, AND=6, + AS=7, ASC=8, BOOLEAN=9, BETWEEN=10, BY=11, CASE=12, CAST=13, CROSS=14, + COLUMNS=15, DATETIME=16, DELETE=17, DESC=18, DESCRIBE=19, DISTINCT=20, + DOUBLE=21, ELSE=22, EXISTS=23, FALSE=24, FLOAT=25, FIRST=26, FROM=27, + GROUP=28, HAVING=29, IN=30, INNER=31, INT=32, INTEGER=33, IS=34, JOIN=35, + LAST=36, LEFT=37, LIKE=38, LIMIT=39, LONG=40, MATCH=41, NATURAL=42, MISSING_LITERAL=43, + NOT=44, NULL_LITERAL=45, NULLS=46, ON=47, OR=48, ORDER=49, OUTER=50, OVER=51, + PARTITION=52, REGEXP=53, RIGHT=54, SELECT=55, SHOW=56, STRING=57, THEN=58, + TRUE=59, UNION=60, USING=61, WHEN=62, WHERE=63, EXCEPT=64, AVG=65, COUNT=66, + MAX=67, MIN=68, SUM=69, VAR_POP=70, VAR_SAMP=71, VARIANCE=72, STD=73, + STDDEV=74, STDDEV_POP=75, STDDEV_SAMP=76, SUBSTRING=77, TRIM=78, END=79, + FULL=80, OFFSET=81, INTERVAL=82, MICROSECOND=83, SECOND=84, MINUTE=85, + HOUR=86, DAY=87, WEEK=88, MONTH=89, QUARTER=90, YEAR=91, SECOND_MICROSECOND=92, + MINUTE_MICROSECOND=93, MINUTE_SECOND=94, HOUR_MICROSECOND=95, HOUR_SECOND=96, + HOUR_MINUTE=97, DAY_MICROSECOND=98, DAY_SECOND=99, DAY_MINUTE=100, DAY_HOUR=101, + YEAR_MONTH=102, TABLES=103, ABS=104, ACOS=105, ADD=106, ADDTIME=107, ASCII=108, + ASIN=109, ATAN=110, ATAN2=111, CBRT=112, CEIL=113, CEILING=114, CONCAT=115, + CONCAT_WS=116, CONV=117, CONVERT_TZ=118, COS=119, COSH=120, COT=121, CRC32=122, + CURDATE=123, CURTIME=124, CURRENT_DATE=125, CURRENT_TIME=126, CURRENT_TIMESTAMP=127, + DATE=128, DATE_ADD=129, DATE_FORMAT=130, DATE_SUB=131, DATEDIFF=132, DAYNAME=133, + DAYOFMONTH=134, DAYOFWEEK=135, DAYOFYEAR=136, DEGREES=137, DIVIDE=138, + E=139, EXP=140, EXPM1=141, EXTRACT=142, FLOOR=143, FROM_DAYS=144, FROM_UNIXTIME=145, + GET_FORMAT=146, IF=147, IFNULL=148, ISNULL=149, LAST_DAY=150, LENGTH=151, + LN=152, LOCALTIME=153, LOCALTIMESTAMP=154, LOCATE=155, LOG=156, LOG10=157, + LOG2=158, LOWER=159, LTRIM=160, MAKEDATE=161, MAKETIME=162, MODULUS=163, + MONTHNAME=164, MULTIPLY=165, NOW=166, NULLIF=167, PERIOD_ADD=168, PERIOD_DIFF=169, + PI=170, POSITION=171, POW=172, POWER=173, RADIANS=174, RAND=175, REPLACE=176, + RINT=177, ROUND=178, RTRIM=179, REVERSE=180, SEC_TO_TIME=181, SIGN=182, + SIGNUM=183, SIN=184, SINH=185, SQRT=186, STR_TO_DATE=187, SUBDATE=188, + SUBTIME=189, SUBTRACT=190, SYSDATE=191, TAN=192, TIME=193, TIMEDIFF=194, + TIME_FORMAT=195, TIME_TO_SEC=196, TIMESTAMP=197, TRUNCATE=198, TO_DAYS=199, + TO_SECONDS=200, UNIX_TIMESTAMP=201, UPPER=202, UTC_DATE=203, UTC_TIME=204, + UTC_TIMESTAMP=205, D=206, T=207, TS=208, LEFT_BRACE=209, RIGHT_BRACE=210, + DENSE_RANK=211, RANK=212, ROW_NUMBER=213, DATE_HISTOGRAM=214, DAY_OF_MONTH=215, + DAY_OF_YEAR=216, DAY_OF_WEEK=217, EXCLUDE=218, EXTENDED_STATS=219, FIELD=220, + FILTER=221, GEO_BOUNDING_BOX=222, GEO_CELL=223, GEO_DISTANCE=224, GEO_DISTANCE_RANGE=225, + GEO_INTERSECTS=226, GEO_POLYGON=227, HISTOGRAM=228, HOUR_OF_DAY=229, INCLUDE=230, + IN_TERMS=231, MATCHPHRASE=232, MATCH_PHRASE=233, MATCHPHRASEQUERY=234, + SIMPLE_QUERY_STRING=235, QUERY_STRING=236, MATCH_PHRASE_PREFIX=237, MATCHQUERY=238, + MATCH_QUERY=239, MINUTE_OF_DAY=240, MINUTE_OF_HOUR=241, MONTH_OF_YEAR=242, + MULTIMATCH=243, MULTI_MATCH=244, MULTIMATCHQUERY=245, NESTED=246, PERCENTILES=247, + PERCENTILE=248, PERCENTILE_APPROX=249, REGEXP_QUERY=250, REVERSE_NESTED=251, + QUERY=252, RANGE=253, SCORE=254, SCOREQUERY=255, SCORE_QUERY=256, SECOND_OF_MINUTE=257, + STATS=258, TERM=259, TERMS=260, TIMESTAMPADD=261, TIMESTAMPDIFF=262, TOPHITS=263, + TYPEOF=264, WEEK_OF_YEAR=265, WEEKOFYEAR=266, WEEKDAY=267, WILDCARDQUERY=268, + WILDCARD_QUERY=269, SUBSTR=270, STRCMP=271, ADDDATE=272, YEARWEEK=273, + ALLOW_LEADING_WILDCARD=274, ANALYZER=275, ANALYZE_WILDCARD=276, AUTO_GENERATE_SYNONYMS_PHRASE_QUERY=277, + BOOST=278, CASE_INSENSITIVE=279, CUTOFF_FREQUENCY=280, DEFAULT_FIELD=281, + DEFAULT_OPERATOR=282, ESCAPE=283, ENABLE_POSITION_INCREMENTS=284, FIELDS=285, + FLAGS=286, FUZZINESS=287, FUZZY_MAX_EXPANSIONS=288, FUZZY_PREFIX_LENGTH=289, + FUZZY_REWRITE=290, FUZZY_TRANSPOSITIONS=291, LENIENT=292, LOW_FREQ_OPERATOR=293, + MAX_DETERMINIZED_STATES=294, MAX_EXPANSIONS=295, MINIMUM_SHOULD_MATCH=296, + OPERATOR=297, PHRASE_SLOP=298, PREFIX_LENGTH=299, QUOTE_ANALYZER=300, + QUOTE_FIELD_SUFFIX=301, REWRITE=302, SLOP=303, TIE_BREAKER=304, TIME_ZONE=305, + TYPE=306, ZERO_TERMS_QUERY=307, HIGHLIGHT=308, HIGHLIGHT_PRE_TAGS=309, + HIGHLIGHT_POST_TAGS=310, MATCH_BOOL_PREFIX=311, STAR=312, SLASH=313, MODULE=314, + PLUS=315, MINUS=316, DIV=317, MOD=318, EQUAL_SYMBOL=319, GREATER_SYMBOL=320, + LESS_SYMBOL=321, EXCLAMATION_SYMBOL=322, BIT_NOT_OP=323, BIT_OR_OP=324, + BIT_AND_OP=325, BIT_XOR_OP=326, DOT=327, LR_BRACKET=328, RR_BRACKET=329, + LT_SQR_PRTHS=330, RT_SQR_PRTHS=331, COMMA=332, SEMI=333, AT_SIGN=334, + ZERO_DECIMAL=335, ONE_DECIMAL=336, TWO_DECIMAL=337, SINGLE_QUOTE_SYMB=338, + DOUBLE_QUOTE_SYMB=339, REVERSE_QUOTE_SYMB=340, COLON_SYMB=341, START_NATIONAL_STRING_LITERAL=342, + STRING_LITERAL=343, DECIMAL_LITERAL=344, HEXADECIMAL_LITERAL=345, REAL_LITERAL=346, + NULL_SPEC_LITERAL=347, BIT_STRING=348, ID=349, DOUBLE_QUOTE_ID=350, BACKTICK_QUOTE_ID=351, + ERROR_RECOGNITION=352; + public static final int + RULE_root = 0, RULE_sqlStatement = 1, RULE_dmlStatement = 2, RULE_selectStatement = 3, + RULE_adminStatement = 4, RULE_showStatement = 5, RULE_describeStatement = 6, + RULE_columnFilter = 7, RULE_tableFilter = 8, RULE_showDescribePattern = 9, + RULE_compatibleID = 10, RULE_querySpecification = 11, RULE_selectClause = 12, + RULE_selectSpec = 13, RULE_selectElements = 14, RULE_selectElement = 15, + RULE_fromClause = 16, RULE_relation = 17, RULE_whereClause = 18, RULE_groupByClause = 19, + RULE_groupByElements = 20, RULE_groupByElement = 21, RULE_havingClause = 22, + RULE_orderByClause = 23, RULE_orderByElement = 24, RULE_limitClause = 25, + RULE_windowFunctionClause = 26, RULE_windowFunction = 27, RULE_overClause = 28, + RULE_partitionByClause = 29, RULE_constant = 30, RULE_decimalLiteral = 31, + RULE_numericLiteral = 32, RULE_stringLiteral = 33, RULE_booleanLiteral = 34, + RULE_realLiteral = 35, RULE_sign = 36, RULE_nullLiteral = 37, RULE_datetimeLiteral = 38, + RULE_dateLiteral = 39, RULE_timeLiteral = 40, RULE_timestampLiteral = 41, + RULE_datetimeConstantLiteral = 42, RULE_intervalLiteral = 43, RULE_intervalUnit = 44, + RULE_expression = 45, RULE_predicate = 46, RULE_expressions = 47, RULE_expressionAtom = 48, + RULE_comparisonOperator = 49, RULE_nullNotnull = 50, RULE_functionCall = 51, + RULE_timestampFunction = 52, RULE_timestampFunctionName = 53, RULE_getFormatFunction = 54, + RULE_getFormatType = 55, RULE_extractFunction = 56, RULE_simpleDateTimePart = 57, + RULE_complexDateTimePart = 58, RULE_datetimePart = 59, RULE_highlightFunction = 60, + RULE_positionFunction = 61, RULE_matchQueryAltSyntaxFunction = 62, RULE_scalarFunctionName = 63, + RULE_specificFunction = 64, RULE_relevanceFunction = 65, RULE_scoreRelevanceFunction = 66, + RULE_noFieldRelevanceFunction = 67, RULE_singleFieldRelevanceFunction = 68, + RULE_multiFieldRelevanceFunction = 69, RULE_altSingleFieldRelevanceFunction = 70, + RULE_altMultiFieldRelevanceFunction = 71, RULE_convertedDataType = 72, + RULE_caseFuncAlternative = 73, RULE_aggregateFunction = 74, RULE_percentileApproxFunction = 75, + RULE_filterClause = 76, RULE_aggregationFunctionName = 77, RULE_mathematicalFunctionName = 78, + RULE_trigonometricFunctionName = 79, RULE_arithmeticFunctionName = 80, + RULE_dateTimeFunctionName = 81, RULE_textFunctionName = 82, RULE_flowControlFunctionName = 83, + RULE_noFieldRelevanceFunctionName = 84, RULE_systemFunctionName = 85, + RULE_nestedFunctionName = 86, RULE_scoreRelevanceFunctionName = 87, RULE_singleFieldRelevanceFunctionName = 88, + RULE_multiFieldRelevanceFunctionName = 89, RULE_altSingleFieldRelevanceFunctionName = 90, + RULE_altMultiFieldRelevanceFunctionName = 91, RULE_functionArgs = 92, + RULE_functionArg = 93, RULE_relevanceArg = 94, RULE_highlightArg = 95, + RULE_relevanceArgName = 96, RULE_highlightArgName = 97, RULE_relevanceFieldAndWeight = 98, + RULE_relevanceFieldWeight = 99, RULE_relevanceField = 100, RULE_relevanceQuery = 101, + RULE_relevanceArgValue = 102, RULE_highlightArgValue = 103, RULE_alternateMultiMatchArgName = 104, + RULE_alternateMultiMatchQuery = 105, RULE_alternateMultiMatchField = 106, + RULE_tableName = 107, RULE_columnName = 108, RULE_allTupleFields = 109, + RULE_alias = 110, RULE_qualifiedName = 111, RULE_ident = 112, RULE_keywordsCanBeId = 113; + private static String[] makeRuleNames() { + return new String[] { + "root", "sqlStatement", "dmlStatement", "selectStatement", "adminStatement", + "showStatement", "describeStatement", "columnFilter", "tableFilter", + "showDescribePattern", "compatibleID", "querySpecification", "selectClause", + "selectSpec", "selectElements", "selectElement", "fromClause", "relation", + "whereClause", "groupByClause", "groupByElements", "groupByElement", + "havingClause", "orderByClause", "orderByElement", "limitClause", "windowFunctionClause", + "windowFunction", "overClause", "partitionByClause", "constant", "decimalLiteral", + "numericLiteral", "stringLiteral", "booleanLiteral", "realLiteral", "sign", + "nullLiteral", "datetimeLiteral", "dateLiteral", "timeLiteral", "timestampLiteral", + "datetimeConstantLiteral", "intervalLiteral", "intervalUnit", "expression", + "predicate", "expressions", "expressionAtom", "comparisonOperator", "nullNotnull", + "functionCall", "timestampFunction", "timestampFunctionName", "getFormatFunction", + "getFormatType", "extractFunction", "simpleDateTimePart", "complexDateTimePart", + "datetimePart", "highlightFunction", "positionFunction", "matchQueryAltSyntaxFunction", + "scalarFunctionName", "specificFunction", "relevanceFunction", "scoreRelevanceFunction", + "noFieldRelevanceFunction", "singleFieldRelevanceFunction", "multiFieldRelevanceFunction", + "altSingleFieldRelevanceFunction", "altMultiFieldRelevanceFunction", + "convertedDataType", "caseFuncAlternative", "aggregateFunction", "percentileApproxFunction", + "filterClause", "aggregationFunctionName", "mathematicalFunctionName", + "trigonometricFunctionName", "arithmeticFunctionName", "dateTimeFunctionName", + "textFunctionName", "flowControlFunctionName", "noFieldRelevanceFunctionName", + "systemFunctionName", "nestedFunctionName", "scoreRelevanceFunctionName", + "singleFieldRelevanceFunctionName", "multiFieldRelevanceFunctionName", + "altSingleFieldRelevanceFunctionName", "altMultiFieldRelevanceFunctionName", + "functionArgs", "functionArg", "relevanceArg", "highlightArg", "relevanceArgName", + "highlightArgName", "relevanceFieldAndWeight", "relevanceFieldWeight", + "relevanceField", "relevanceQuery", "relevanceArgValue", "highlightArgValue", + "alternateMultiMatchArgName", "alternateMultiMatchQuery", "alternateMultiMatchField", + "tableName", "columnName", "allTupleFields", "alias", "qualifiedName", + "ident", "keywordsCanBeId" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, null, null, null, null, "'ALL'", "'AND'", "'AS'", "'ASC'", "'BOOLEAN'", + "'BETWEEN'", "'BY'", "'CASE'", "'CAST'", "'CROSS'", "'COLUMNS'", "'DATETIME'", + "'DELETE'", "'DESC'", "'DESCRIBE'", "'DISTINCT'", "'DOUBLE'", "'ELSE'", + "'EXISTS'", "'FALSE'", "'FLOAT'", "'FIRST'", "'FROM'", "'GROUP'", "'HAVING'", + "'IN'", "'INNER'", "'INT'", "'INTEGER'", "'IS'", "'JOIN'", "'LAST'", + "'LEFT'", "'LIKE'", "'LIMIT'", "'LONG'", "'MATCH'", "'NATURAL'", "'MISSING'", + "'NOT'", "'NULL'", "'NULLS'", "'ON'", "'OR'", "'ORDER'", "'OUTER'", "'OVER'", + "'PARTITION'", "'REGEXP'", "'RIGHT'", "'SELECT'", "'SHOW'", "'STRING'", + "'THEN'", "'TRUE'", "'UNION'", "'USING'", "'WHEN'", "'WHERE'", "'MINUS'", + "'AVG'", "'COUNT'", "'MAX'", "'MIN'", "'SUM'", "'VAR_POP'", "'VAR_SAMP'", + "'VARIANCE'", "'STD'", "'STDDEV'", "'STDDEV_POP'", "'STDDEV_SAMP'", "'SUBSTRING'", + "'TRIM'", "'END'", "'FULL'", "'OFFSET'", "'INTERVAL'", "'MICROSECOND'", + "'SECOND'", "'MINUTE'", "'HOUR'", "'DAY'", "'WEEK'", "'MONTH'", "'QUARTER'", + "'YEAR'", "'SECOND_MICROSECOND'", "'MINUTE_MICROSECOND'", "'MINUTE_SECOND'", + "'HOUR_MICROSECOND'", "'HOUR_SECOND'", "'HOUR_MINUTE'", "'DAY_MICROSECOND'", + "'DAY_SECOND'", "'DAY_MINUTE'", "'DAY_HOUR'", "'YEAR_MONTH'", "'TABLES'", + "'ABS'", "'ACOS'", "'ADD'", "'ADDTIME'", "'ASCII'", "'ASIN'", "'ATAN'", + "'ATAN2'", "'CBRT'", "'CEIL'", "'CEILING'", "'CONCAT'", "'CONCAT_WS'", + "'CONV'", "'CONVERT_TZ'", "'COS'", "'COSH'", "'COT'", "'CRC32'", "'CURDATE'", + "'CURTIME'", "'CURRENT_DATE'", "'CURRENT_TIME'", "'CURRENT_TIMESTAMP'", + "'DATE'", "'DATE_ADD'", "'DATE_FORMAT'", "'DATE_SUB'", "'DATEDIFF'", + "'DAYNAME'", "'DAYOFMONTH'", "'DAYOFWEEK'", "'DAYOFYEAR'", "'DEGREES'", + "'DIVIDE'", "'E'", "'EXP'", "'EXPM1'", "'EXTRACT'", "'FLOOR'", "'FROM_DAYS'", + "'FROM_UNIXTIME'", "'GET_FORMAT'", "'IF'", "'IFNULL'", "'ISNULL'", "'LAST_DAY'", + "'LENGTH'", "'LN'", "'LOCALTIME'", "'LOCALTIMESTAMP'", "'LOCATE'", "'LOG'", + "'LOG10'", "'LOG2'", "'LOWER'", "'LTRIM'", "'MAKEDATE'", "'MAKETIME'", + "'MODULUS'", "'MONTHNAME'", "'MULTIPLY'", "'NOW'", "'NULLIF'", "'PERIOD_ADD'", + "'PERIOD_DIFF'", "'PI'", "'POSITION'", "'POW'", "'POWER'", "'RADIANS'", + "'RAND'", "'REPLACE'", "'RINT'", "'ROUND'", "'RTRIM'", "'REVERSE'", "'SEC_TO_TIME'", + "'SIGN'", "'SIGNUM'", "'SIN'", "'SINH'", "'SQRT'", "'STR_TO_DATE'", "'SUBDATE'", + "'SUBTIME'", "'SUBTRACT'", "'SYSDATE'", "'TAN'", "'TIME'", "'TIMEDIFF'", + "'TIME_FORMAT'", "'TIME_TO_SEC'", "'TIMESTAMP'", "'TRUNCATE'", "'TO_DAYS'", + "'TO_SECONDS'", "'UNIX_TIMESTAMP'", "'UPPER'", "'UTC_DATE'", "'UTC_TIME'", + "'UTC_TIMESTAMP'", "'D'", "'T'", "'TS'", "'{'", "'}'", "'DENSE_RANK'", + "'RANK'", "'ROW_NUMBER'", "'DATE_HISTOGRAM'", "'DAY_OF_MONTH'", "'DAY_OF_YEAR'", + "'DAY_OF_WEEK'", "'EXCLUDE'", "'EXTENDED_STATS'", "'FIELD'", "'FILTER'", + "'GEO_BOUNDING_BOX'", "'GEO_CELL'", "'GEO_DISTANCE'", "'GEO_DISTANCE_RANGE'", + "'GEO_INTERSECTS'", "'GEO_POLYGON'", "'HISTOGRAM'", "'HOUR_OF_DAY'", + "'INCLUDE'", "'IN_TERMS'", "'MATCHPHRASE'", "'MATCH_PHRASE'", "'MATCHPHRASEQUERY'", + "'SIMPLE_QUERY_STRING'", "'QUERY_STRING'", "'MATCH_PHRASE_PREFIX'", "'MATCHQUERY'", + "'MATCH_QUERY'", "'MINUTE_OF_DAY'", "'MINUTE_OF_HOUR'", "'MONTH_OF_YEAR'", + "'MULTIMATCH'", "'MULTI_MATCH'", "'MULTIMATCHQUERY'", "'NESTED'", "'PERCENTILES'", + "'PERCENTILE'", "'PERCENTILE_APPROX'", "'REGEXP_QUERY'", "'REVERSE_NESTED'", + "'QUERY'", "'RANGE'", "'SCORE'", "'SCOREQUERY'", "'SCORE_QUERY'", "'SECOND_OF_MINUTE'", + "'STATS'", "'TERM'", "'TERMS'", "'TIMESTAMPADD'", "'TIMESTAMPDIFF'", + "'TOPHITS'", "'TYPEOF'", "'WEEK_OF_YEAR'", "'WEEKOFYEAR'", "'WEEKDAY'", + "'WILDCARDQUERY'", "'WILDCARD_QUERY'", "'SUBSTR'", "'STRCMP'", "'ADDDATE'", + "'YEARWEEK'", "'ALLOW_LEADING_WILDCARD'", "'ANALYZER'", "'ANALYZE_WILDCARD'", + "'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY'", "'BOOST'", "'CASE_INSENSITIVE'", + "'CUTOFF_FREQUENCY'", "'DEFAULT_FIELD'", "'DEFAULT_OPERATOR'", "'ESCAPE'", + "'ENABLE_POSITION_INCREMENTS'", "'FIELDS'", "'FLAGS'", "'FUZZINESS'", + "'FUZZY_MAX_EXPANSIONS'", "'FUZZY_PREFIX_LENGTH'", "'FUZZY_REWRITE'", + "'FUZZY_TRANSPOSITIONS'", "'LENIENT'", "'LOW_FREQ_OPERATOR'", "'MAX_DETERMINIZED_STATES'", + "'MAX_EXPANSIONS'", "'MINIMUM_SHOULD_MATCH'", "'OPERATOR'", "'PHRASE_SLOP'", + "'PREFIX_LENGTH'", "'QUOTE_ANALYZER'", "'QUOTE_FIELD_SUFFIX'", "'REWRITE'", + "'SLOP'", "'TIE_BREAKER'", "'TIME_ZONE'", "'TYPE'", "'ZERO_TERMS_QUERY'", + "'HIGHLIGHT'", "'PRE_TAGS'", "'POST_TAGS'", "'MATCH_BOOL_PREFIX'", "'*'", + "'/'", "'%'", "'+'", "'-'", "'DIV'", "'MOD'", "'='", "'>'", "'<'", "'!'", + "'~'", "'|'", "'&'", "'^'", "'.'", "'('", "')'", "'['", "']'", "','", + "';'", "'@'", "'0'", "'1'", "'2'", "'''", "'\"'", "'`'", "':'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "SPACE", "SPEC_SQL_COMMENT", "COMMENT_INPUT", "LINE_COMMENT", "ALL", + "AND", "AS", "ASC", "BOOLEAN", "BETWEEN", "BY", "CASE", "CAST", "CROSS", + "COLUMNS", "DATETIME", "DELETE", "DESC", "DESCRIBE", "DISTINCT", "DOUBLE", + "ELSE", "EXISTS", "FALSE", "FLOAT", "FIRST", "FROM", "GROUP", "HAVING", + "IN", "INNER", "INT", "INTEGER", "IS", "JOIN", "LAST", "LEFT", "LIKE", + "LIMIT", "LONG", "MATCH", "NATURAL", "MISSING_LITERAL", "NOT", "NULL_LITERAL", + "NULLS", "ON", "OR", "ORDER", "OUTER", "OVER", "PARTITION", "REGEXP", + "RIGHT", "SELECT", "SHOW", "STRING", "THEN", "TRUE", "UNION", "USING", + "WHEN", "WHERE", "EXCEPT", "AVG", "COUNT", "MAX", "MIN", "SUM", "VAR_POP", + "VAR_SAMP", "VARIANCE", "STD", "STDDEV", "STDDEV_POP", "STDDEV_SAMP", + "SUBSTRING", "TRIM", "END", "FULL", "OFFSET", "INTERVAL", "MICROSECOND", + "SECOND", "MINUTE", "HOUR", "DAY", "WEEK", "MONTH", "QUARTER", "YEAR", + "SECOND_MICROSECOND", "MINUTE_MICROSECOND", "MINUTE_SECOND", "HOUR_MICROSECOND", + "HOUR_SECOND", "HOUR_MINUTE", "DAY_MICROSECOND", "DAY_SECOND", "DAY_MINUTE", + "DAY_HOUR", "YEAR_MONTH", "TABLES", "ABS", "ACOS", "ADD", "ADDTIME", + "ASCII", "ASIN", "ATAN", "ATAN2", "CBRT", "CEIL", "CEILING", "CONCAT", + "CONCAT_WS", "CONV", "CONVERT_TZ", "COS", "COSH", "COT", "CRC32", "CURDATE", + "CURTIME", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP", "DATE", + "DATE_ADD", "DATE_FORMAT", "DATE_SUB", "DATEDIFF", "DAYNAME", "DAYOFMONTH", + "DAYOFWEEK", "DAYOFYEAR", "DEGREES", "DIVIDE", "E", "EXP", "EXPM1", "EXTRACT", + "FLOOR", "FROM_DAYS", "FROM_UNIXTIME", "GET_FORMAT", "IF", "IFNULL", + "ISNULL", "LAST_DAY", "LENGTH", "LN", "LOCALTIME", "LOCALTIMESTAMP", + "LOCATE", "LOG", "LOG10", "LOG2", "LOWER", "LTRIM", "MAKEDATE", "MAKETIME", + "MODULUS", "MONTHNAME", "MULTIPLY", "NOW", "NULLIF", "PERIOD_ADD", "PERIOD_DIFF", + "PI", "POSITION", "POW", "POWER", "RADIANS", "RAND", "REPLACE", "RINT", + "ROUND", "RTRIM", "REVERSE", "SEC_TO_TIME", "SIGN", "SIGNUM", "SIN", + "SINH", "SQRT", "STR_TO_DATE", "SUBDATE", "SUBTIME", "SUBTRACT", "SYSDATE", + "TAN", "TIME", "TIMEDIFF", "TIME_FORMAT", "TIME_TO_SEC", "TIMESTAMP", + "TRUNCATE", "TO_DAYS", "TO_SECONDS", "UNIX_TIMESTAMP", "UPPER", "UTC_DATE", + "UTC_TIME", "UTC_TIMESTAMP", "D", "T", "TS", "LEFT_BRACE", "RIGHT_BRACE", + "DENSE_RANK", "RANK", "ROW_NUMBER", "DATE_HISTOGRAM", "DAY_OF_MONTH", + "DAY_OF_YEAR", "DAY_OF_WEEK", "EXCLUDE", "EXTENDED_STATS", "FIELD", "FILTER", + "GEO_BOUNDING_BOX", "GEO_CELL", "GEO_DISTANCE", "GEO_DISTANCE_RANGE", + "GEO_INTERSECTS", "GEO_POLYGON", "HISTOGRAM", "HOUR_OF_DAY", "INCLUDE", + "IN_TERMS", "MATCHPHRASE", "MATCH_PHRASE", "MATCHPHRASEQUERY", "SIMPLE_QUERY_STRING", + "QUERY_STRING", "MATCH_PHRASE_PREFIX", "MATCHQUERY", "MATCH_QUERY", "MINUTE_OF_DAY", + "MINUTE_OF_HOUR", "MONTH_OF_YEAR", "MULTIMATCH", "MULTI_MATCH", "MULTIMATCHQUERY", + "NESTED", "PERCENTILES", "PERCENTILE", "PERCENTILE_APPROX", "REGEXP_QUERY", + "REVERSE_NESTED", "QUERY", "RANGE", "SCORE", "SCOREQUERY", "SCORE_QUERY", + "SECOND_OF_MINUTE", "STATS", "TERM", "TERMS", "TIMESTAMPADD", "TIMESTAMPDIFF", + "TOPHITS", "TYPEOF", "WEEK_OF_YEAR", "WEEKOFYEAR", "WEEKDAY", "WILDCARDQUERY", + "WILDCARD_QUERY", "SUBSTR", "STRCMP", "ADDDATE", "YEARWEEK", "ALLOW_LEADING_WILDCARD", + "ANALYZER", "ANALYZE_WILDCARD", "AUTO_GENERATE_SYNONYMS_PHRASE_QUERY", + "BOOST", "CASE_INSENSITIVE", "CUTOFF_FREQUENCY", "DEFAULT_FIELD", "DEFAULT_OPERATOR", + "ESCAPE", "ENABLE_POSITION_INCREMENTS", "FIELDS", "FLAGS", "FUZZINESS", + "FUZZY_MAX_EXPANSIONS", "FUZZY_PREFIX_LENGTH", "FUZZY_REWRITE", "FUZZY_TRANSPOSITIONS", + "LENIENT", "LOW_FREQ_OPERATOR", "MAX_DETERMINIZED_STATES", "MAX_EXPANSIONS", + "MINIMUM_SHOULD_MATCH", "OPERATOR", "PHRASE_SLOP", "PREFIX_LENGTH", "QUOTE_ANALYZER", + "QUOTE_FIELD_SUFFIX", "REWRITE", "SLOP", "TIE_BREAKER", "TIME_ZONE", + "TYPE", "ZERO_TERMS_QUERY", "HIGHLIGHT", "HIGHLIGHT_PRE_TAGS", "HIGHLIGHT_POST_TAGS", + "MATCH_BOOL_PREFIX", "STAR", "SLASH", "MODULE", "PLUS", "MINUS", "DIV", + "MOD", "EQUAL_SYMBOL", "GREATER_SYMBOL", "LESS_SYMBOL", "EXCLAMATION_SYMBOL", + "BIT_NOT_OP", "BIT_OR_OP", "BIT_AND_OP", "BIT_XOR_OP", "DOT", "LR_BRACKET", + "RR_BRACKET", "LT_SQR_PRTHS", "RT_SQR_PRTHS", "COMMA", "SEMI", "AT_SIGN", + "ZERO_DECIMAL", "ONE_DECIMAL", "TWO_DECIMAL", "SINGLE_QUOTE_SYMB", "DOUBLE_QUOTE_SYMB", + "REVERSE_QUOTE_SYMB", "COLON_SYMB", "START_NATIONAL_STRING_LITERAL", + "STRING_LITERAL", "DECIMAL_LITERAL", "HEXADECIMAL_LITERAL", "REAL_LITERAL", + "NULL_SPEC_LITERAL", "BIT_STRING", "ID", "DOUBLE_QUOTE_ID", "BACKTICK_QUOTE_ID", + "ERROR_RECOGNITION" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + @Override + public String getGrammarFileName() { return "OpenSearchSQLParser.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public ATN getATN() { return _ATN; } + + public OpenSearchSQLParser(TokenStream input) { + super(input); + _interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @SuppressWarnings("CheckReturnValue") + public static class RootContext extends ParserRuleContext { + public TerminalNode EOF() { return getToken(OpenSearchSQLParser.EOF, 0); } + public SqlStatementContext sqlStatement() { + return getRuleContext(SqlStatementContext.class,0); + } + public TerminalNode SEMI() { return getToken(OpenSearchSQLParser.SEMI, 0); } + public RootContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_root; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterRoot(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitRoot(this); + } + } + + public final RootContext root() throws RecognitionException { + RootContext _localctx = new RootContext(_ctx, getState()); + enterRule(_localctx, 0, RULE_root); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(229); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 108086391057416192L) != 0)) { + { + setState(228); + sqlStatement(); + } + } + + setState(232); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==SEMI) { + { + setState(231); + match(SEMI); + } + } + + setState(234); + match(EOF); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class SqlStatementContext extends ParserRuleContext { + public DmlStatementContext dmlStatement() { + return getRuleContext(DmlStatementContext.class,0); + } + public AdminStatementContext adminStatement() { + return getRuleContext(AdminStatementContext.class,0); + } + public SqlStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_sqlStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterSqlStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitSqlStatement(this); + } + } + + public final SqlStatementContext sqlStatement() throws RecognitionException { + SqlStatementContext _localctx = new SqlStatementContext(_ctx, getState()); + enterRule(_localctx, 2, RULE_sqlStatement); + try { + setState(238); + _errHandler.sync(this); + switch (_input.LA(1)) { + case SELECT: + enterOuterAlt(_localctx, 1); + { + setState(236); + dmlStatement(); + } + break; + case DESCRIBE: + case SHOW: + enterOuterAlt(_localctx, 2); + { + setState(237); + adminStatement(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class DmlStatementContext extends ParserRuleContext { + public SelectStatementContext selectStatement() { + return getRuleContext(SelectStatementContext.class,0); + } + public DmlStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dmlStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterDmlStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitDmlStatement(this); + } + } + + public final DmlStatementContext dmlStatement() throws RecognitionException { + DmlStatementContext _localctx = new DmlStatementContext(_ctx, getState()); + enterRule(_localctx, 4, RULE_dmlStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(240); + selectStatement(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class SelectStatementContext extends ParserRuleContext { + public SelectStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_selectStatement; } + + public SelectStatementContext() { } + public void copyFrom(SelectStatementContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class SimpleSelectContext extends SelectStatementContext { + public QuerySpecificationContext querySpecification() { + return getRuleContext(QuerySpecificationContext.class,0); + } + public SimpleSelectContext(SelectStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterSimpleSelect(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitSimpleSelect(this); + } + } + + public final SelectStatementContext selectStatement() throws RecognitionException { + SelectStatementContext _localctx = new SelectStatementContext(_ctx, getState()); + enterRule(_localctx, 6, RULE_selectStatement); + try { + _localctx = new SimpleSelectContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(242); + querySpecification(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AdminStatementContext extends ParserRuleContext { + public ShowStatementContext showStatement() { + return getRuleContext(ShowStatementContext.class,0); + } + public DescribeStatementContext describeStatement() { + return getRuleContext(DescribeStatementContext.class,0); + } + public AdminStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_adminStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterAdminStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitAdminStatement(this); + } + } + + public final AdminStatementContext adminStatement() throws RecognitionException { + AdminStatementContext _localctx = new AdminStatementContext(_ctx, getState()); + enterRule(_localctx, 8, RULE_adminStatement); + try { + setState(246); + _errHandler.sync(this); + switch (_input.LA(1)) { + case SHOW: + enterOuterAlt(_localctx, 1); + { + setState(244); + showStatement(); + } + break; + case DESCRIBE: + enterOuterAlt(_localctx, 2); + { + setState(245); + describeStatement(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ShowStatementContext extends ParserRuleContext { + public TerminalNode SHOW() { return getToken(OpenSearchSQLParser.SHOW, 0); } + public TerminalNode TABLES() { return getToken(OpenSearchSQLParser.TABLES, 0); } + public TableFilterContext tableFilter() { + return getRuleContext(TableFilterContext.class,0); + } + public ShowStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_showStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterShowStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitShowStatement(this); + } + } + + public final ShowStatementContext showStatement() throws RecognitionException { + ShowStatementContext _localctx = new ShowStatementContext(_ctx, getState()); + enterRule(_localctx, 10, RULE_showStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(248); + match(SHOW); + setState(249); + match(TABLES); + setState(250); + tableFilter(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class DescribeStatementContext extends ParserRuleContext { + public TerminalNode DESCRIBE() { return getToken(OpenSearchSQLParser.DESCRIBE, 0); } + public TerminalNode TABLES() { return getToken(OpenSearchSQLParser.TABLES, 0); } + public TableFilterContext tableFilter() { + return getRuleContext(TableFilterContext.class,0); + } + public ColumnFilterContext columnFilter() { + return getRuleContext(ColumnFilterContext.class,0); + } + public DescribeStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_describeStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterDescribeStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitDescribeStatement(this); + } + } + + public final DescribeStatementContext describeStatement() throws RecognitionException { + DescribeStatementContext _localctx = new DescribeStatementContext(_ctx, getState()); + enterRule(_localctx, 12, RULE_describeStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(252); + match(DESCRIBE); + setState(253); + match(TABLES); + setState(254); + tableFilter(); + setState(256); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COLUMNS) { + { + setState(255); + columnFilter(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ColumnFilterContext extends ParserRuleContext { + public TerminalNode COLUMNS() { return getToken(OpenSearchSQLParser.COLUMNS, 0); } + public TerminalNode LIKE() { return getToken(OpenSearchSQLParser.LIKE, 0); } + public ShowDescribePatternContext showDescribePattern() { + return getRuleContext(ShowDescribePatternContext.class,0); + } + public ColumnFilterContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_columnFilter; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterColumnFilter(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitColumnFilter(this); + } + } + + public final ColumnFilterContext columnFilter() throws RecognitionException { + ColumnFilterContext _localctx = new ColumnFilterContext(_ctx, getState()); + enterRule(_localctx, 14, RULE_columnFilter); + try { + enterOuterAlt(_localctx, 1); + { + setState(258); + match(COLUMNS); + setState(259); + match(LIKE); + setState(260); + showDescribePattern(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class TableFilterContext extends ParserRuleContext { + public TerminalNode LIKE() { return getToken(OpenSearchSQLParser.LIKE, 0); } + public ShowDescribePatternContext showDescribePattern() { + return getRuleContext(ShowDescribePatternContext.class,0); + } + public TableFilterContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_tableFilter; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterTableFilter(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitTableFilter(this); + } + } + + public final TableFilterContext tableFilter() throws RecognitionException { + TableFilterContext _localctx = new TableFilterContext(_ctx, getState()); + enterRule(_localctx, 16, RULE_tableFilter); + try { + enterOuterAlt(_localctx, 1); + { + setState(262); + match(LIKE); + setState(263); + showDescribePattern(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ShowDescribePatternContext extends ParserRuleContext { + public CompatibleIDContext oldID; + public CompatibleIDContext compatibleID() { + return getRuleContext(CompatibleIDContext.class,0); + } + public StringLiteralContext stringLiteral() { + return getRuleContext(StringLiteralContext.class,0); + } + public ShowDescribePatternContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_showDescribePattern; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterShowDescribePattern(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitShowDescribePattern(this); + } + } + + public final ShowDescribePatternContext showDescribePattern() throws RecognitionException { + ShowDescribePatternContext _localctx = new ShowDescribePatternContext(_ctx, getState()); + enterRule(_localctx, 18, RULE_showDescribePattern); + try { + setState(267); + _errHandler.sync(this); + switch (_input.LA(1)) { + case MODULE: + case ID: + enterOuterAlt(_localctx, 1); + { + setState(265); + ((ShowDescribePatternContext)_localctx).oldID = compatibleID(); + } + break; + case STRING_LITERAL: + case DOUBLE_QUOTE_ID: + enterOuterAlt(_localctx, 2); + { + setState(266); + stringLiteral(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class CompatibleIDContext extends ParserRuleContext { + public List MODULE() { return getTokens(OpenSearchSQLParser.MODULE); } + public TerminalNode MODULE(int i) { + return getToken(OpenSearchSQLParser.MODULE, i); + } + public List ID() { return getTokens(OpenSearchSQLParser.ID); } + public TerminalNode ID(int i) { + return getToken(OpenSearchSQLParser.ID, i); + } + public CompatibleIDContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_compatibleID; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterCompatibleID(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitCompatibleID(this); + } + } + + public final CompatibleIDContext compatibleID() throws RecognitionException { + CompatibleIDContext _localctx = new CompatibleIDContext(_ctx, getState()); + enterRule(_localctx, 20, RULE_compatibleID); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(270); + _errHandler.sync(this); + _alt = 1+1; + do { + switch (_alt) { + case 1+1: + { + { + setState(269); + _la = _input.LA(1); + if ( !(_la==MODULE || _la==ID) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(272); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,6,_ctx); + } while ( _alt!=1 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class QuerySpecificationContext extends ParserRuleContext { + public SelectClauseContext selectClause() { + return getRuleContext(SelectClauseContext.class,0); + } + public FromClauseContext fromClause() { + return getRuleContext(FromClauseContext.class,0); + } + public LimitClauseContext limitClause() { + return getRuleContext(LimitClauseContext.class,0); + } + public QuerySpecificationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_querySpecification; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterQuerySpecification(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitQuerySpecification(this); + } + } + + public final QuerySpecificationContext querySpecification() throws RecognitionException { + QuerySpecificationContext _localctx = new QuerySpecificationContext(_ctx, getState()); + enterRule(_localctx, 22, RULE_querySpecification); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(274); + selectClause(); + setState(276); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FROM) { + { + setState(275); + fromClause(); + } + } + + setState(279); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LIMIT) { + { + setState(278); + limitClause(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class SelectClauseContext extends ParserRuleContext { + public TerminalNode SELECT() { return getToken(OpenSearchSQLParser.SELECT, 0); } + public SelectElementsContext selectElements() { + return getRuleContext(SelectElementsContext.class,0); + } + public SelectSpecContext selectSpec() { + return getRuleContext(SelectSpecContext.class,0); + } + public SelectClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_selectClause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterSelectClause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitSelectClause(this); + } + } + + public final SelectClauseContext selectClause() throws RecognitionException { + SelectClauseContext _localctx = new SelectClauseContext(_ctx, getState()); + enterRule(_localctx, 24, RULE_selectClause); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(281); + match(SELECT); + setState(283); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ALL || _la==DISTINCT) { + { + setState(282); + selectSpec(); + } + } + + setState(285); + selectElements(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class SelectSpecContext extends ParserRuleContext { + public TerminalNode ALL() { return getToken(OpenSearchSQLParser.ALL, 0); } + public TerminalNode DISTINCT() { return getToken(OpenSearchSQLParser.DISTINCT, 0); } + public SelectSpecContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_selectSpec; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterSelectSpec(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitSelectSpec(this); + } + } + + public final SelectSpecContext selectSpec() throws RecognitionException { + SelectSpecContext _localctx = new SelectSpecContext(_ctx, getState()); + enterRule(_localctx, 26, RULE_selectSpec); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(287); + _la = _input.LA(1); + if ( !(_la==ALL || _la==DISTINCT) ) { + _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; + } + + @SuppressWarnings("CheckReturnValue") + public static class SelectElementsContext extends ParserRuleContext { + public Token star; + public List selectElement() { + return getRuleContexts(SelectElementContext.class); + } + public SelectElementContext selectElement(int i) { + return getRuleContext(SelectElementContext.class,i); + } + public TerminalNode STAR() { return getToken(OpenSearchSQLParser.STAR, 0); } + public List COMMA() { return getTokens(OpenSearchSQLParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(OpenSearchSQLParser.COMMA, i); + } + public SelectElementsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_selectElements; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterSelectElements(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitSelectElements(this); + } + } + + public final SelectElementsContext selectElements() throws RecognitionException { + SelectElementsContext _localctx = new SelectElementsContext(_ctx, getState()); + enterRule(_localctx, 28, RULE_selectElements); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(291); + _errHandler.sync(this); + switch (_input.LA(1)) { + case STAR: + { + setState(289); + ((SelectElementsContext)_localctx).star = match(STAR); + } + break; + case CASE: + case CAST: + case DATETIME: + case FALSE: + case FIRST: + case LAST: + case LEFT: + case MATCH: + case NOT: + case NULL_LITERAL: + case RIGHT: + case TRUE: + case AVG: + case COUNT: + case MAX: + case MIN: + case SUM: + case VAR_POP: + case VAR_SAMP: + case VARIANCE: + case STD: + case STDDEV: + case STDDEV_POP: + case STDDEV_SAMP: + case SUBSTRING: + case TRIM: + case FULL: + case INTERVAL: + case MICROSECOND: + case SECOND: + case MINUTE: + case HOUR: + case DAY: + case WEEK: + case MONTH: + case QUARTER: + case YEAR: + case ABS: + case ACOS: + case ADD: + case ADDTIME: + case ASCII: + case ASIN: + case ATAN: + case ATAN2: + case CBRT: + case CEIL: + case CEILING: + case CONCAT: + case CONCAT_WS: + case CONV: + case CONVERT_TZ: + case COS: + case COSH: + case COT: + case CRC32: + case CURDATE: + case CURTIME: + case CURRENT_DATE: + case CURRENT_TIME: + case CURRENT_TIMESTAMP: + case DATE: + case DATE_ADD: + case DATE_FORMAT: + case DATE_SUB: + case DATEDIFF: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DEGREES: + case DIVIDE: + case E: + case EXP: + case EXPM1: + case EXTRACT: + case FLOOR: + case FROM_DAYS: + case FROM_UNIXTIME: + case GET_FORMAT: + case IF: + case IFNULL: + case ISNULL: + case LAST_DAY: + case LENGTH: + case LN: + case LOCALTIME: + case LOCALTIMESTAMP: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MODULUS: + case MONTHNAME: + case MULTIPLY: + case NOW: + case NULLIF: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POSITION: + case POW: + case POWER: + case RADIANS: + case RAND: + case REPLACE: + case RINT: + case ROUND: + case RTRIM: + case REVERSE: + case SEC_TO_TIME: + case SIGN: + case SIGNUM: + case SIN: + case SINH: + case SQRT: + case STR_TO_DATE: + case SUBDATE: + case SUBTIME: + case SUBTRACT: + case SYSDATE: + case TAN: + case TIME: + case TIMEDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TIMESTAMP: + case TRUNCATE: + case TO_DAYS: + case TO_SECONDS: + case UNIX_TIMESTAMP: + case UPPER: + case UTC_DATE: + case UTC_TIME: + case UTC_TIMESTAMP: + case D: + case T: + case TS: + case LEFT_BRACE: + case DENSE_RANK: + case RANK: + case ROW_NUMBER: + case DAY_OF_MONTH: + case DAY_OF_YEAR: + case DAY_OF_WEEK: + case FIELD: + case HOUR_OF_DAY: + case MATCHPHRASE: + case MATCH_PHRASE: + case MATCHPHRASEQUERY: + case SIMPLE_QUERY_STRING: + case QUERY_STRING: + case MATCH_PHRASE_PREFIX: + case MATCHQUERY: + case MATCH_QUERY: + case MINUTE_OF_DAY: + case MINUTE_OF_HOUR: + case MONTH_OF_YEAR: + case MULTIMATCH: + case MULTI_MATCH: + case MULTIMATCHQUERY: + case NESTED: + case PERCENTILE: + case PERCENTILE_APPROX: + case QUERY: + case SCORE: + case SCOREQUERY: + case SCORE_QUERY: + case SECOND_OF_MINUTE: + case TIMESTAMPADD: + case TIMESTAMPDIFF: + case TYPEOF: + case WEEK_OF_YEAR: + case WEEKOFYEAR: + case WEEKDAY: + case WILDCARDQUERY: + case WILDCARD_QUERY: + case SUBSTR: + case STRCMP: + case ADDDATE: + case YEARWEEK: + case TYPE: + case HIGHLIGHT: + case MATCH_BOOL_PREFIX: + case PLUS: + case MINUS: + case MOD: + case DOT: + case LR_BRACKET: + case ZERO_DECIMAL: + case ONE_DECIMAL: + case TWO_DECIMAL: + case STRING_LITERAL: + case DECIMAL_LITERAL: + case REAL_LITERAL: + case ID: + case DOUBLE_QUOTE_ID: + case BACKTICK_QUOTE_ID: + { + setState(290); + selectElement(); + } + break; + default: + throw new NoViableAltException(this); + } + setState(297); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(293); + match(COMMA); + setState(294); + selectElement(); + } + } + setState(299); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class SelectElementContext extends ParserRuleContext { + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public AliasContext alias() { + return getRuleContext(AliasContext.class,0); + } + public TerminalNode AS() { return getToken(OpenSearchSQLParser.AS, 0); } + public SelectElementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_selectElement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterSelectElement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitSelectElement(this); + } + } + + public final SelectElementContext selectElement() throws RecognitionException { + SelectElementContext _localctx = new SelectElementContext(_ctx, getState()); + enterRule(_localctx, 30, RULE_selectElement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(300); + expression(0); + setState(305); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 18014604735086720L) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & -549621813217L) != 0) || ((((_la - 129)) & ~0x3f) == 0 && ((1L << (_la - 129)) & -4398046650369L) != 0) || ((((_la - 193)) & ~0x3f) == 0 && ((1L << (_la - 193)) & 9992430556348415L) != 0) || ((((_la - 257)) & ~0x3f) == 0 && ((1L << (_la - 257)) & 2306405959167240065L) != 0) || ((((_la - 327)) & ~0x3f) == 0 && ((1L << (_la - 327)) & 20971521L) != 0)) { + { + setState(302); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AS) { + { + setState(301); + match(AS); + } + } + + setState(304); + alias(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FromClauseContext extends ParserRuleContext { + public TerminalNode FROM() { return getToken(OpenSearchSQLParser.FROM, 0); } + public RelationContext relation() { + return getRuleContext(RelationContext.class,0); + } + public WhereClauseContext whereClause() { + return getRuleContext(WhereClauseContext.class,0); + } + public GroupByClauseContext groupByClause() { + return getRuleContext(GroupByClauseContext.class,0); + } + public HavingClauseContext havingClause() { + return getRuleContext(HavingClauseContext.class,0); + } + public OrderByClauseContext orderByClause() { + return getRuleContext(OrderByClauseContext.class,0); + } + public FromClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_fromClause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterFromClause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitFromClause(this); + } + } + + public final FromClauseContext fromClause() throws RecognitionException { + FromClauseContext _localctx = new FromClauseContext(_ctx, getState()); + enterRule(_localctx, 32, RULE_fromClause); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(307); + match(FROM); + setState(308); + relation(); + setState(310); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WHERE) { + { + setState(309); + whereClause(); + } + } + + setState(313); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==GROUP) { + { + setState(312); + groupByClause(); + } + } + + setState(316); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==HAVING) { + { + setState(315); + havingClause(); + } + } + + setState(319); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ORDER) { + { + setState(318); + orderByClause(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class RelationContext extends ParserRuleContext { + public RelationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_relation; } + + public RelationContext() { } + public void copyFrom(RelationContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class TableAsRelationContext extends RelationContext { + public TableNameContext tableName() { + return getRuleContext(TableNameContext.class,0); + } + public AliasContext alias() { + return getRuleContext(AliasContext.class,0); + } + public TerminalNode AS() { return getToken(OpenSearchSQLParser.AS, 0); } + public TableAsRelationContext(RelationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterTableAsRelation(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitTableAsRelation(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class SubqueryAsRelationContext extends RelationContext { + public QuerySpecificationContext subquery; + public TerminalNode LR_BRACKET() { return getToken(OpenSearchSQLParser.LR_BRACKET, 0); } + public TerminalNode RR_BRACKET() { return getToken(OpenSearchSQLParser.RR_BRACKET, 0); } + public AliasContext alias() { + return getRuleContext(AliasContext.class,0); + } + public QuerySpecificationContext querySpecification() { + return getRuleContext(QuerySpecificationContext.class,0); + } + public TerminalNode AS() { return getToken(OpenSearchSQLParser.AS, 0); } + public SubqueryAsRelationContext(RelationContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterSubqueryAsRelation(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitSubqueryAsRelation(this); + } + } + + public final RelationContext relation() throws RecognitionException { + RelationContext _localctx = new RelationContext(_ctx, getState()); + enterRule(_localctx, 34, RULE_relation); + int _la; + try { + setState(336); + _errHandler.sync(this); + switch (_input.LA(1)) { + case DATETIME: + case FIRST: + case LAST: + case LEFT: + case RIGHT: + case AVG: + case COUNT: + case MAX: + case MIN: + case SUM: + case SUBSTRING: + case TRIM: + case FULL: + case MICROSECOND: + case SECOND: + case MINUTE: + case HOUR: + case DAY: + case WEEK: + case MONTH: + case QUARTER: + case YEAR: + case ABS: + case ACOS: + case ADD: + case ADDTIME: + case ASCII: + case ASIN: + case ATAN: + case ATAN2: + case CBRT: + case CEIL: + case CEILING: + case CONCAT: + case CONCAT_WS: + case CONV: + case CONVERT_TZ: + case COS: + case COSH: + case COT: + case CRC32: + case CURDATE: + case CURTIME: + case CURRENT_DATE: + case CURRENT_TIME: + case CURRENT_TIMESTAMP: + case DATE: + case DATE_ADD: + case DATE_FORMAT: + case DATE_SUB: + case DATEDIFF: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DEGREES: + case DIVIDE: + case E: + case EXP: + case EXPM1: + case FLOOR: + case FROM_DAYS: + case FROM_UNIXTIME: + case IF: + case IFNULL: + case ISNULL: + case LAST_DAY: + case LENGTH: + case LN: + case LOCALTIME: + case LOCALTIMESTAMP: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MODULUS: + case MONTHNAME: + case MULTIPLY: + case NOW: + case NULLIF: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POW: + case POWER: + case RADIANS: + case RAND: + case REPLACE: + case RINT: + case ROUND: + case RTRIM: + case REVERSE: + case SEC_TO_TIME: + case SIGN: + case SIGNUM: + case SIN: + case SINH: + case SQRT: + case STR_TO_DATE: + case SUBDATE: + case SUBTIME: + case SUBTRACT: + case SYSDATE: + case TAN: + case TIME: + case TIMEDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TIMESTAMP: + case TRUNCATE: + case TO_DAYS: + case TO_SECONDS: + case UNIX_TIMESTAMP: + case UPPER: + case UTC_DATE: + case UTC_TIME: + case UTC_TIMESTAMP: + case D: + case T: + case TS: + case DAY_OF_MONTH: + case DAY_OF_YEAR: + case DAY_OF_WEEK: + case FIELD: + case HOUR_OF_DAY: + case MINUTE_OF_DAY: + case MINUTE_OF_HOUR: + case MONTH_OF_YEAR: + case NESTED: + case SECOND_OF_MINUTE: + case TYPEOF: + case WEEK_OF_YEAR: + case WEEKOFYEAR: + case WEEKDAY: + case SUBSTR: + case STRCMP: + case ADDDATE: + case YEARWEEK: + case TYPE: + case MOD: + case DOT: + case ID: + case BACKTICK_QUOTE_ID: + _localctx = new TableAsRelationContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(321); + tableName(); + setState(326); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 18014604735086720L) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & -549621813217L) != 0) || ((((_la - 129)) & ~0x3f) == 0 && ((1L << (_la - 129)) & -4398046650369L) != 0) || ((((_la - 193)) & ~0x3f) == 0 && ((1L << (_la - 193)) & 9992430556348415L) != 0) || ((((_la - 257)) & ~0x3f) == 0 && ((1L << (_la - 257)) & 2306405959167240065L) != 0) || ((((_la - 327)) & ~0x3f) == 0 && ((1L << (_la - 327)) & 20971521L) != 0)) { + { + setState(323); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AS) { + { + setState(322); + match(AS); + } + } + + setState(325); + alias(); + } + } + + } + break; + case LR_BRACKET: + _localctx = new SubqueryAsRelationContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(328); + match(LR_BRACKET); + setState(329); + ((SubqueryAsRelationContext)_localctx).subquery = querySpecification(); + setState(330); + match(RR_BRACKET); + setState(332); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AS) { + { + setState(331); + match(AS); + } + } + + setState(334); + alias(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class WhereClauseContext extends ParserRuleContext { + public TerminalNode WHERE() { return getToken(OpenSearchSQLParser.WHERE, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public WhereClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_whereClause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterWhereClause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitWhereClause(this); + } + } + + public final WhereClauseContext whereClause() throws RecognitionException { + WhereClauseContext _localctx = new WhereClauseContext(_ctx, getState()); + enterRule(_localctx, 36, RULE_whereClause); + try { + enterOuterAlt(_localctx, 1); + { + setState(338); + match(WHERE); + setState(339); + expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class GroupByClauseContext extends ParserRuleContext { + public TerminalNode GROUP() { return getToken(OpenSearchSQLParser.GROUP, 0); } + public TerminalNode BY() { return getToken(OpenSearchSQLParser.BY, 0); } + public GroupByElementsContext groupByElements() { + return getRuleContext(GroupByElementsContext.class,0); + } + public GroupByClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_groupByClause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterGroupByClause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitGroupByClause(this); + } + } + + public final GroupByClauseContext groupByClause() throws RecognitionException { + GroupByClauseContext _localctx = new GroupByClauseContext(_ctx, getState()); + enterRule(_localctx, 38, RULE_groupByClause); + try { + enterOuterAlt(_localctx, 1); + { + setState(341); + match(GROUP); + setState(342); + match(BY); + setState(343); + groupByElements(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class GroupByElementsContext extends ParserRuleContext { + public List groupByElement() { + return getRuleContexts(GroupByElementContext.class); + } + public GroupByElementContext groupByElement(int i) { + return getRuleContext(GroupByElementContext.class,i); + } + public List COMMA() { return getTokens(OpenSearchSQLParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(OpenSearchSQLParser.COMMA, i); + } + public GroupByElementsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_groupByElements; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterGroupByElements(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitGroupByElements(this); + } + } + + public final GroupByElementsContext groupByElements() throws RecognitionException { + GroupByElementsContext _localctx = new GroupByElementsContext(_ctx, getState()); + enterRule(_localctx, 40, RULE_groupByElements); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(345); + groupByElement(); + setState(350); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(346); + match(COMMA); + setState(347); + groupByElement(); + } + } + setState(352); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class GroupByElementContext extends ParserRuleContext { + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public GroupByElementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_groupByElement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterGroupByElement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitGroupByElement(this); + } + } + + public final GroupByElementContext groupByElement() throws RecognitionException { + GroupByElementContext _localctx = new GroupByElementContext(_ctx, getState()); + enterRule(_localctx, 42, RULE_groupByElement); + try { + enterOuterAlt(_localctx, 1); + { + setState(353); + expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class HavingClauseContext extends ParserRuleContext { + public TerminalNode HAVING() { return getToken(OpenSearchSQLParser.HAVING, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public HavingClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_havingClause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterHavingClause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitHavingClause(this); + } + } + + public final HavingClauseContext havingClause() throws RecognitionException { + HavingClauseContext _localctx = new HavingClauseContext(_ctx, getState()); + enterRule(_localctx, 44, RULE_havingClause); + try { + enterOuterAlt(_localctx, 1); + { + setState(355); + match(HAVING); + setState(356); + expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class OrderByClauseContext extends ParserRuleContext { + public TerminalNode ORDER() { return getToken(OpenSearchSQLParser.ORDER, 0); } + public TerminalNode BY() { return getToken(OpenSearchSQLParser.BY, 0); } + public List orderByElement() { + return getRuleContexts(OrderByElementContext.class); + } + public OrderByElementContext orderByElement(int i) { + return getRuleContext(OrderByElementContext.class,i); + } + public List COMMA() { return getTokens(OpenSearchSQLParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(OpenSearchSQLParser.COMMA, i); + } + public OrderByClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_orderByClause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterOrderByClause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitOrderByClause(this); + } + } + + public final OrderByClauseContext orderByClause() throws RecognitionException { + OrderByClauseContext _localctx = new OrderByClauseContext(_ctx, getState()); + enterRule(_localctx, 46, RULE_orderByClause); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(358); + match(ORDER); + setState(359); + match(BY); + setState(360); + orderByElement(); + setState(365); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(361); + match(COMMA); + setState(362); + orderByElement(); + } + } + setState(367); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class OrderByElementContext extends ParserRuleContext { + public Token order; + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode NULLS() { return getToken(OpenSearchSQLParser.NULLS, 0); } + public TerminalNode FIRST() { return getToken(OpenSearchSQLParser.FIRST, 0); } + public TerminalNode LAST() { return getToken(OpenSearchSQLParser.LAST, 0); } + public TerminalNode ASC() { return getToken(OpenSearchSQLParser.ASC, 0); } + public TerminalNode DESC() { return getToken(OpenSearchSQLParser.DESC, 0); } + public OrderByElementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_orderByElement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterOrderByElement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitOrderByElement(this); + } + } + + public final OrderByElementContext orderByElement() throws RecognitionException { + OrderByElementContext _localctx = new OrderByElementContext(_ctx, getState()); + enterRule(_localctx, 48, RULE_orderByElement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(368); + expression(0); + setState(370); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ASC || _la==DESC) { + { + setState(369); + ((OrderByElementContext)_localctx).order = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==ASC || _la==DESC) ) { + ((OrderByElementContext)_localctx).order = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(374); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NULLS) { + { + setState(372); + match(NULLS); + setState(373); + _la = _input.LA(1); + if ( !(_la==FIRST || _la==LAST) ) { + _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; + } + + @SuppressWarnings("CheckReturnValue") + public static class LimitClauseContext extends ParserRuleContext { + public DecimalLiteralContext offset; + public DecimalLiteralContext limit; + public TerminalNode LIMIT() { return getToken(OpenSearchSQLParser.LIMIT, 0); } + public List decimalLiteral() { + return getRuleContexts(DecimalLiteralContext.class); + } + public DecimalLiteralContext decimalLiteral(int i) { + return getRuleContext(DecimalLiteralContext.class,i); + } + public TerminalNode COMMA() { return getToken(OpenSearchSQLParser.COMMA, 0); } + public TerminalNode OFFSET() { return getToken(OpenSearchSQLParser.OFFSET, 0); } + public LimitClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_limitClause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterLimitClause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitLimitClause(this); + } + } + + public final LimitClauseContext limitClause() throws RecognitionException { + LimitClauseContext _localctx = new LimitClauseContext(_ctx, getState()); + enterRule(_localctx, 50, RULE_limitClause); + try { + setState(388); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,27,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(376); + match(LIMIT); + setState(380); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,26,_ctx) ) { + case 1: + { + setState(377); + ((LimitClauseContext)_localctx).offset = decimalLiteral(); + setState(378); + match(COMMA); + } + break; + } + setState(382); + ((LimitClauseContext)_localctx).limit = decimalLiteral(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(383); + match(LIMIT); + setState(384); + ((LimitClauseContext)_localctx).limit = decimalLiteral(); + setState(385); + match(OFFSET); + setState(386); + ((LimitClauseContext)_localctx).offset = decimalLiteral(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class WindowFunctionClauseContext extends ParserRuleContext { + public WindowFunctionContext function; + public OverClauseContext overClause() { + return getRuleContext(OverClauseContext.class,0); + } + public WindowFunctionContext windowFunction() { + return getRuleContext(WindowFunctionContext.class,0); + } + public WindowFunctionClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_windowFunctionClause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterWindowFunctionClause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitWindowFunctionClause(this); + } + } + + public final WindowFunctionClauseContext windowFunctionClause() throws RecognitionException { + WindowFunctionClauseContext _localctx = new WindowFunctionClauseContext(_ctx, getState()); + enterRule(_localctx, 52, RULE_windowFunctionClause); + try { + enterOuterAlt(_localctx, 1); + { + setState(390); + ((WindowFunctionClauseContext)_localctx).function = windowFunction(); + setState(391); + overClause(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class WindowFunctionContext extends ParserRuleContext { + public WindowFunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_windowFunction; } + + public WindowFunctionContext() { } + public void copyFrom(WindowFunctionContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class AggregateWindowFunctionContext extends WindowFunctionContext { + public AggregateFunctionContext aggregateFunction() { + return getRuleContext(AggregateFunctionContext.class,0); + } + public AggregateWindowFunctionContext(WindowFunctionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterAggregateWindowFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitAggregateWindowFunction(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ScalarWindowFunctionContext extends WindowFunctionContext { + public Token functionName; + public TerminalNode LR_BRACKET() { return getToken(OpenSearchSQLParser.LR_BRACKET, 0); } + public TerminalNode RR_BRACKET() { return getToken(OpenSearchSQLParser.RR_BRACKET, 0); } + public TerminalNode ROW_NUMBER() { return getToken(OpenSearchSQLParser.ROW_NUMBER, 0); } + public TerminalNode RANK() { return getToken(OpenSearchSQLParser.RANK, 0); } + public TerminalNode DENSE_RANK() { return getToken(OpenSearchSQLParser.DENSE_RANK, 0); } + public FunctionArgsContext functionArgs() { + return getRuleContext(FunctionArgsContext.class,0); + } + public ScalarWindowFunctionContext(WindowFunctionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterScalarWindowFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitScalarWindowFunction(this); + } + } + + public final WindowFunctionContext windowFunction() throws RecognitionException { + WindowFunctionContext _localctx = new WindowFunctionContext(_ctx, getState()); + enterRule(_localctx, 54, RULE_windowFunction); + int _la; + try { + setState(400); + _errHandler.sync(this); + switch (_input.LA(1)) { + case DENSE_RANK: + case RANK: + case ROW_NUMBER: + _localctx = new ScalarWindowFunctionContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(393); + ((ScalarWindowFunctionContext)_localctx).functionName = _input.LT(1); + _la = _input.LA(1); + if ( !(((((_la - 211)) & ~0x3f) == 0 && ((1L << (_la - 211)) & 7L) != 0)) ) { + ((ScalarWindowFunctionContext)_localctx).functionName = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(394); + match(LR_BRACKET); + setState(396); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,28,_ctx) ) { + case 1: + { + setState(395); + functionArgs(); + } + break; + } + setState(398); + match(RR_BRACKET); + } + break; + case AVG: + case COUNT: + case MAX: + case MIN: + case SUM: + case VAR_POP: + case VAR_SAMP: + case VARIANCE: + case STD: + case STDDEV: + case STDDEV_POP: + case STDDEV_SAMP: + case PERCENTILE: + case PERCENTILE_APPROX: + _localctx = new AggregateWindowFunctionContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(399); + aggregateFunction(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class OverClauseContext extends ParserRuleContext { + public TerminalNode OVER() { return getToken(OpenSearchSQLParser.OVER, 0); } + public TerminalNode LR_BRACKET() { return getToken(OpenSearchSQLParser.LR_BRACKET, 0); } + public TerminalNode RR_BRACKET() { return getToken(OpenSearchSQLParser.RR_BRACKET, 0); } + public PartitionByClauseContext partitionByClause() { + return getRuleContext(PartitionByClauseContext.class,0); + } + public OrderByClauseContext orderByClause() { + return getRuleContext(OrderByClauseContext.class,0); + } + public OverClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_overClause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterOverClause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitOverClause(this); + } + } + + public final OverClauseContext overClause() throws RecognitionException { + OverClauseContext _localctx = new OverClauseContext(_ctx, getState()); + enterRule(_localctx, 56, RULE_overClause); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(402); + match(OVER); + setState(403); + match(LR_BRACKET); + setState(405); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==PARTITION) { + { + setState(404); + partitionByClause(); + } + } + + setState(408); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ORDER) { + { + setState(407); + orderByClause(); + } + } + + setState(410); + match(RR_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class PartitionByClauseContext extends ParserRuleContext { + public TerminalNode PARTITION() { return getToken(OpenSearchSQLParser.PARTITION, 0); } + public TerminalNode BY() { return getToken(OpenSearchSQLParser.BY, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public List COMMA() { return getTokens(OpenSearchSQLParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(OpenSearchSQLParser.COMMA, i); + } + public PartitionByClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_partitionByClause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterPartitionByClause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitPartitionByClause(this); + } + } + + public final PartitionByClauseContext partitionByClause() throws RecognitionException { + PartitionByClauseContext _localctx = new PartitionByClauseContext(_ctx, getState()); + enterRule(_localctx, 58, RULE_partitionByClause); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(412); + match(PARTITION); + setState(413); + match(BY); + setState(414); + expression(0); + setState(419); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(415); + match(COMMA); + setState(416); + expression(0); + } + } + setState(421); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ConstantContext extends ParserRuleContext { + public ConstantContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_constant; } + + public ConstantContext() { } + public void copyFrom(ConstantContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class DatetimeContext extends ConstantContext { + public DatetimeLiteralContext datetimeLiteral() { + return getRuleContext(DatetimeLiteralContext.class,0); + } + public DatetimeContext(ConstantContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterDatetime(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitDatetime(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class SignedDecimalContext extends ConstantContext { + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public SignContext sign() { + return getRuleContext(SignContext.class,0); + } + public SignedDecimalContext(ConstantContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterSignedDecimal(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitSignedDecimal(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class BooleanContext extends ConstantContext { + public BooleanLiteralContext booleanLiteral() { + return getRuleContext(BooleanLiteralContext.class,0); + } + public BooleanContext(ConstantContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterBoolean(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitBoolean(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class StringContext extends ConstantContext { + public StringLiteralContext stringLiteral() { + return getRuleContext(StringLiteralContext.class,0); + } + public StringContext(ConstantContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterString(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitString(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class NullContext extends ConstantContext { + public NullLiteralContext nullLiteral() { + return getRuleContext(NullLiteralContext.class,0); + } + public NullContext(ConstantContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterNull(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitNull(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class IntervalContext extends ConstantContext { + public IntervalLiteralContext intervalLiteral() { + return getRuleContext(IntervalLiteralContext.class,0); + } + public IntervalContext(ConstantContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterInterval(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitInterval(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class SignedRealContext extends ConstantContext { + public RealLiteralContext realLiteral() { + return getRuleContext(RealLiteralContext.class,0); + } + public SignContext sign() { + return getRuleContext(SignContext.class,0); + } + public SignedRealContext(ConstantContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterSignedReal(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitSignedReal(this); + } + } + + public final ConstantContext constant() throws RecognitionException { + ConstantContext _localctx = new ConstantContext(_ctx, getState()); + enterRule(_localctx, 60, RULE_constant); + int _la; + try { + setState(435); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,35,_ctx) ) { + case 1: + _localctx = new StringContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(422); + stringLiteral(); + } + break; + case 2: + _localctx = new SignedDecimalContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(424); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==PLUS || _la==MINUS) { + { + setState(423); + sign(); + } + } + + setState(426); + decimalLiteral(); + } + break; + case 3: + _localctx = new SignedRealContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(428); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==PLUS || _la==MINUS) { + { + setState(427); + sign(); + } + } + + setState(430); + realLiteral(); + } + break; + case 4: + _localctx = new BooleanContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(431); + booleanLiteral(); + } + break; + case 5: + _localctx = new DatetimeContext(_localctx); + enterOuterAlt(_localctx, 5); + { + setState(432); + datetimeLiteral(); + } + break; + case 6: + _localctx = new IntervalContext(_localctx); + enterOuterAlt(_localctx, 6); + { + setState(433); + intervalLiteral(); + } + break; + case 7: + _localctx = new NullContext(_localctx); + enterOuterAlt(_localctx, 7); + { + setState(434); + nullLiteral(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class DecimalLiteralContext extends ParserRuleContext { + public TerminalNode DECIMAL_LITERAL() { return getToken(OpenSearchSQLParser.DECIMAL_LITERAL, 0); } + public TerminalNode ZERO_DECIMAL() { return getToken(OpenSearchSQLParser.ZERO_DECIMAL, 0); } + public TerminalNode ONE_DECIMAL() { return getToken(OpenSearchSQLParser.ONE_DECIMAL, 0); } + public TerminalNode TWO_DECIMAL() { return getToken(OpenSearchSQLParser.TWO_DECIMAL, 0); } + public DecimalLiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_decimalLiteral; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterDecimalLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitDecimalLiteral(this); + } + } + + public final DecimalLiteralContext decimalLiteral() throws RecognitionException { + DecimalLiteralContext _localctx = new DecimalLiteralContext(_ctx, getState()); + enterRule(_localctx, 62, RULE_decimalLiteral); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(437); + _la = _input.LA(1); + if ( !(((((_la - 335)) & ~0x3f) == 0 && ((1L << (_la - 335)) & 519L) != 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; + } + + @SuppressWarnings("CheckReturnValue") + public static class NumericLiteralContext extends ParserRuleContext { + public DecimalLiteralContext decimalLiteral() { + return getRuleContext(DecimalLiteralContext.class,0); + } + public RealLiteralContext realLiteral() { + return getRuleContext(RealLiteralContext.class,0); + } + public NumericLiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_numericLiteral; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterNumericLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitNumericLiteral(this); + } + } + + public final NumericLiteralContext numericLiteral() throws RecognitionException { + NumericLiteralContext _localctx = new NumericLiteralContext(_ctx, getState()); + enterRule(_localctx, 64, RULE_numericLiteral); + try { + setState(441); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ZERO_DECIMAL: + case ONE_DECIMAL: + case TWO_DECIMAL: + case DECIMAL_LITERAL: + enterOuterAlt(_localctx, 1); + { + setState(439); + decimalLiteral(); + } + break; + case REAL_LITERAL: + enterOuterAlt(_localctx, 2); + { + setState(440); + realLiteral(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class StringLiteralContext extends ParserRuleContext { + public TerminalNode STRING_LITERAL() { return getToken(OpenSearchSQLParser.STRING_LITERAL, 0); } + public TerminalNode DOUBLE_QUOTE_ID() { return getToken(OpenSearchSQLParser.DOUBLE_QUOTE_ID, 0); } + public StringLiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_stringLiteral; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterStringLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitStringLiteral(this); + } + } + + public final StringLiteralContext stringLiteral() throws RecognitionException { + StringLiteralContext _localctx = new StringLiteralContext(_ctx, getState()); + enterRule(_localctx, 66, RULE_stringLiteral); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(443); + _la = _input.LA(1); + if ( !(_la==STRING_LITERAL || _la==DOUBLE_QUOTE_ID) ) { + _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; + } + + @SuppressWarnings("CheckReturnValue") + public static class BooleanLiteralContext extends ParserRuleContext { + public TerminalNode TRUE() { return getToken(OpenSearchSQLParser.TRUE, 0); } + public TerminalNode FALSE() { return getToken(OpenSearchSQLParser.FALSE, 0); } + public BooleanLiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_booleanLiteral; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterBooleanLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitBooleanLiteral(this); + } + } + + public final BooleanLiteralContext booleanLiteral() throws RecognitionException { + BooleanLiteralContext _localctx = new BooleanLiteralContext(_ctx, getState()); + enterRule(_localctx, 68, RULE_booleanLiteral); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(445); + _la = _input.LA(1); + if ( !(_la==FALSE || _la==TRUE) ) { + _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; + } + + @SuppressWarnings("CheckReturnValue") + public static class RealLiteralContext extends ParserRuleContext { + public TerminalNode REAL_LITERAL() { return getToken(OpenSearchSQLParser.REAL_LITERAL, 0); } + public RealLiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_realLiteral; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterRealLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitRealLiteral(this); + } + } + + public final RealLiteralContext realLiteral() throws RecognitionException { + RealLiteralContext _localctx = new RealLiteralContext(_ctx, getState()); + enterRule(_localctx, 70, RULE_realLiteral); + try { + enterOuterAlt(_localctx, 1); + { + setState(447); + match(REAL_LITERAL); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class SignContext extends ParserRuleContext { + public TerminalNode PLUS() { return getToken(OpenSearchSQLParser.PLUS, 0); } + public TerminalNode MINUS() { return getToken(OpenSearchSQLParser.MINUS, 0); } + public SignContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_sign; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterSign(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitSign(this); + } + } + + public final SignContext sign() throws RecognitionException { + SignContext _localctx = new SignContext(_ctx, getState()); + enterRule(_localctx, 72, RULE_sign); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(449); + _la = _input.LA(1); + if ( !(_la==PLUS || _la==MINUS) ) { + _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; + } + + @SuppressWarnings("CheckReturnValue") + public static class NullLiteralContext extends ParserRuleContext { + public TerminalNode NULL_LITERAL() { return getToken(OpenSearchSQLParser.NULL_LITERAL, 0); } + public NullLiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_nullLiteral; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterNullLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitNullLiteral(this); + } + } + + public final NullLiteralContext nullLiteral() throws RecognitionException { + NullLiteralContext _localctx = new NullLiteralContext(_ctx, getState()); + enterRule(_localctx, 74, RULE_nullLiteral); + try { + enterOuterAlt(_localctx, 1); + { + setState(451); + match(NULL_LITERAL); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class DatetimeLiteralContext extends ParserRuleContext { + public DateLiteralContext dateLiteral() { + return getRuleContext(DateLiteralContext.class,0); + } + public TimeLiteralContext timeLiteral() { + return getRuleContext(TimeLiteralContext.class,0); + } + public TimestampLiteralContext timestampLiteral() { + return getRuleContext(TimestampLiteralContext.class,0); + } + public DatetimeLiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_datetimeLiteral; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterDatetimeLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitDatetimeLiteral(this); + } + } + + public final DatetimeLiteralContext datetimeLiteral() throws RecognitionException { + DatetimeLiteralContext _localctx = new DatetimeLiteralContext(_ctx, getState()); + enterRule(_localctx, 76, RULE_datetimeLiteral); + try { + setState(456); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,37,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(453); + dateLiteral(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(454); + timeLiteral(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(455); + timestampLiteral(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class DateLiteralContext extends ParserRuleContext { + public StringLiteralContext date; + public TerminalNode DATE() { return getToken(OpenSearchSQLParser.DATE, 0); } + public StringLiteralContext stringLiteral() { + return getRuleContext(StringLiteralContext.class,0); + } + public TerminalNode LEFT_BRACE() { return getToken(OpenSearchSQLParser.LEFT_BRACE, 0); } + public TerminalNode RIGHT_BRACE() { return getToken(OpenSearchSQLParser.RIGHT_BRACE, 0); } + public TerminalNode D() { return getToken(OpenSearchSQLParser.D, 0); } + public DateLiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dateLiteral; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterDateLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitDateLiteral(this); + } + } + + public final DateLiteralContext dateLiteral() throws RecognitionException { + DateLiteralContext _localctx = new DateLiteralContext(_ctx, getState()); + enterRule(_localctx, 78, RULE_dateLiteral); + int _la; + try { + setState(465); + _errHandler.sync(this); + switch (_input.LA(1)) { + case DATE: + enterOuterAlt(_localctx, 1); + { + setState(458); + match(DATE); + setState(459); + ((DateLiteralContext)_localctx).date = stringLiteral(); + } + break; + case LEFT_BRACE: + enterOuterAlt(_localctx, 2); + { + setState(460); + match(LEFT_BRACE); + setState(461); + _la = _input.LA(1); + if ( !(_la==DATE || _la==D) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(462); + ((DateLiteralContext)_localctx).date = stringLiteral(); + setState(463); + match(RIGHT_BRACE); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class TimeLiteralContext extends ParserRuleContext { + public StringLiteralContext time; + public TerminalNode TIME() { return getToken(OpenSearchSQLParser.TIME, 0); } + public StringLiteralContext stringLiteral() { + return getRuleContext(StringLiteralContext.class,0); + } + public TerminalNode LEFT_BRACE() { return getToken(OpenSearchSQLParser.LEFT_BRACE, 0); } + public TerminalNode RIGHT_BRACE() { return getToken(OpenSearchSQLParser.RIGHT_BRACE, 0); } + public TerminalNode T() { return getToken(OpenSearchSQLParser.T, 0); } + public TimeLiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_timeLiteral; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterTimeLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitTimeLiteral(this); + } + } + + public final TimeLiteralContext timeLiteral() throws RecognitionException { + TimeLiteralContext _localctx = new TimeLiteralContext(_ctx, getState()); + enterRule(_localctx, 80, RULE_timeLiteral); + int _la; + try { + setState(474); + _errHandler.sync(this); + switch (_input.LA(1)) { + case TIME: + enterOuterAlt(_localctx, 1); + { + setState(467); + match(TIME); + setState(468); + ((TimeLiteralContext)_localctx).time = stringLiteral(); + } + break; + case LEFT_BRACE: + enterOuterAlt(_localctx, 2); + { + setState(469); + match(LEFT_BRACE); + setState(470); + _la = _input.LA(1); + if ( !(_la==TIME || _la==T) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(471); + ((TimeLiteralContext)_localctx).time = stringLiteral(); + setState(472); + match(RIGHT_BRACE); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class TimestampLiteralContext extends ParserRuleContext { + public StringLiteralContext timestamp; + public TerminalNode TIMESTAMP() { return getToken(OpenSearchSQLParser.TIMESTAMP, 0); } + public StringLiteralContext stringLiteral() { + return getRuleContext(StringLiteralContext.class,0); + } + public TerminalNode LEFT_BRACE() { return getToken(OpenSearchSQLParser.LEFT_BRACE, 0); } + public TerminalNode RIGHT_BRACE() { return getToken(OpenSearchSQLParser.RIGHT_BRACE, 0); } + public TerminalNode TS() { return getToken(OpenSearchSQLParser.TS, 0); } + public TimestampLiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_timestampLiteral; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterTimestampLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitTimestampLiteral(this); + } + } + + public final TimestampLiteralContext timestampLiteral() throws RecognitionException { + TimestampLiteralContext _localctx = new TimestampLiteralContext(_ctx, getState()); + enterRule(_localctx, 82, RULE_timestampLiteral); + int _la; + try { + setState(483); + _errHandler.sync(this); + switch (_input.LA(1)) { + case TIMESTAMP: + enterOuterAlt(_localctx, 1); + { + setState(476); + match(TIMESTAMP); + setState(477); + ((TimestampLiteralContext)_localctx).timestamp = stringLiteral(); + } + break; + case LEFT_BRACE: + enterOuterAlt(_localctx, 2); + { + setState(478); + match(LEFT_BRACE); + setState(479); + _la = _input.LA(1); + if ( !(_la==TIMESTAMP || _la==TS) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(480); + ((TimestampLiteralContext)_localctx).timestamp = stringLiteral(); + setState(481); + match(RIGHT_BRACE); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class DatetimeConstantLiteralContext extends ParserRuleContext { + public TerminalNode CURRENT_DATE() { return getToken(OpenSearchSQLParser.CURRENT_DATE, 0); } + public TerminalNode CURRENT_TIME() { return getToken(OpenSearchSQLParser.CURRENT_TIME, 0); } + public TerminalNode CURRENT_TIMESTAMP() { return getToken(OpenSearchSQLParser.CURRENT_TIMESTAMP, 0); } + public TerminalNode LOCALTIME() { return getToken(OpenSearchSQLParser.LOCALTIME, 0); } + public TerminalNode LOCALTIMESTAMP() { return getToken(OpenSearchSQLParser.LOCALTIMESTAMP, 0); } + public TerminalNode UTC_TIMESTAMP() { return getToken(OpenSearchSQLParser.UTC_TIMESTAMP, 0); } + public TerminalNode UTC_DATE() { return getToken(OpenSearchSQLParser.UTC_DATE, 0); } + public TerminalNode UTC_TIME() { return getToken(OpenSearchSQLParser.UTC_TIME, 0); } + public DatetimeConstantLiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_datetimeConstantLiteral; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterDatetimeConstantLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitDatetimeConstantLiteral(this); + } + } + + public final DatetimeConstantLiteralContext datetimeConstantLiteral() throws RecognitionException { + DatetimeConstantLiteralContext _localctx = new DatetimeConstantLiteralContext(_ctx, getState()); + enterRule(_localctx, 84, RULE_datetimeConstantLiteral); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(485); + _la = _input.LA(1); + if ( !(((((_la - 125)) & ~0x3f) == 0 && ((1L << (_la - 125)) & 805306375L) != 0) || ((((_la - 203)) & ~0x3f) == 0 && ((1L << (_la - 203)) & 7L) != 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; + } + + @SuppressWarnings("CheckReturnValue") + public static class IntervalLiteralContext extends ParserRuleContext { + public TerminalNode INTERVAL() { return getToken(OpenSearchSQLParser.INTERVAL, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public IntervalUnitContext intervalUnit() { + return getRuleContext(IntervalUnitContext.class,0); + } + public IntervalLiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_intervalLiteral; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterIntervalLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitIntervalLiteral(this); + } + } + + public final IntervalLiteralContext intervalLiteral() throws RecognitionException { + IntervalLiteralContext _localctx = new IntervalLiteralContext(_ctx, getState()); + enterRule(_localctx, 86, RULE_intervalLiteral); + try { + enterOuterAlt(_localctx, 1); + { + setState(487); + match(INTERVAL); + setState(488); + expression(0); + setState(489); + intervalUnit(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class IntervalUnitContext extends ParserRuleContext { + public TerminalNode MICROSECOND() { return getToken(OpenSearchSQLParser.MICROSECOND, 0); } + public TerminalNode SECOND() { return getToken(OpenSearchSQLParser.SECOND, 0); } + public TerminalNode MINUTE() { return getToken(OpenSearchSQLParser.MINUTE, 0); } + public TerminalNode HOUR() { return getToken(OpenSearchSQLParser.HOUR, 0); } + public TerminalNode DAY() { return getToken(OpenSearchSQLParser.DAY, 0); } + public TerminalNode WEEK() { return getToken(OpenSearchSQLParser.WEEK, 0); } + public TerminalNode MONTH() { return getToken(OpenSearchSQLParser.MONTH, 0); } + public TerminalNode QUARTER() { return getToken(OpenSearchSQLParser.QUARTER, 0); } + public TerminalNode YEAR() { return getToken(OpenSearchSQLParser.YEAR, 0); } + public TerminalNode SECOND_MICROSECOND() { return getToken(OpenSearchSQLParser.SECOND_MICROSECOND, 0); } + public TerminalNode MINUTE_MICROSECOND() { return getToken(OpenSearchSQLParser.MINUTE_MICROSECOND, 0); } + public TerminalNode MINUTE_SECOND() { return getToken(OpenSearchSQLParser.MINUTE_SECOND, 0); } + public TerminalNode HOUR_MICROSECOND() { return getToken(OpenSearchSQLParser.HOUR_MICROSECOND, 0); } + public TerminalNode HOUR_SECOND() { return getToken(OpenSearchSQLParser.HOUR_SECOND, 0); } + public TerminalNode HOUR_MINUTE() { return getToken(OpenSearchSQLParser.HOUR_MINUTE, 0); } + public TerminalNode DAY_MICROSECOND() { return getToken(OpenSearchSQLParser.DAY_MICROSECOND, 0); } + public TerminalNode DAY_SECOND() { return getToken(OpenSearchSQLParser.DAY_SECOND, 0); } + public TerminalNode DAY_MINUTE() { return getToken(OpenSearchSQLParser.DAY_MINUTE, 0); } + public TerminalNode DAY_HOUR() { return getToken(OpenSearchSQLParser.DAY_HOUR, 0); } + public TerminalNode YEAR_MONTH() { return getToken(OpenSearchSQLParser.YEAR_MONTH, 0); } + public IntervalUnitContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_intervalUnit; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterIntervalUnit(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitIntervalUnit(this); + } + } + + public final IntervalUnitContext intervalUnit() throws RecognitionException { + IntervalUnitContext _localctx = new IntervalUnitContext(_ctx, getState()); + enterRule(_localctx, 88, RULE_intervalUnit); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(491); + _la = _input.LA(1); + if ( !(((((_la - 83)) & ~0x3f) == 0 && ((1L << (_la - 83)) & 1048575L) != 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; + } + + @SuppressWarnings("CheckReturnValue") + public static class ExpressionContext extends ParserRuleContext { + public ExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expression; } + + public ExpressionContext() { } + public void copyFrom(ExpressionContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class OrExpressionContext extends ExpressionContext { + public ExpressionContext left; + public ExpressionContext right; + public TerminalNode OR() { return getToken(OpenSearchSQLParser.OR, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public OrExpressionContext(ExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterOrExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitOrExpression(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class AndExpressionContext extends ExpressionContext { + public ExpressionContext left; + public ExpressionContext right; + public TerminalNode AND() { return getToken(OpenSearchSQLParser.AND, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public AndExpressionContext(ExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterAndExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitAndExpression(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class NotExpressionContext extends ExpressionContext { + public TerminalNode NOT() { return getToken(OpenSearchSQLParser.NOT, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public NotExpressionContext(ExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterNotExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitNotExpression(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class PredicateExpressionContext extends ExpressionContext { + public PredicateContext predicate() { + return getRuleContext(PredicateContext.class,0); + } + public PredicateExpressionContext(ExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterPredicateExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitPredicateExpression(this); + } + } + + public final ExpressionContext expression() throws RecognitionException { + return expression(0); + } + + private ExpressionContext expression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + ExpressionContext _localctx = new ExpressionContext(_ctx, _parentState); + ExpressionContext _prevctx = _localctx; + int _startState = 90; + enterRecursionRule(_localctx, 90, RULE_expression, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(497); + _errHandler.sync(this); + switch (_input.LA(1)) { + case NOT: + { + _localctx = new NotExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(494); + match(NOT); + setState(495); + expression(4); + } + break; + case CASE: + case CAST: + case DATETIME: + case FALSE: + case FIRST: + case LAST: + case LEFT: + case MATCH: + case NULL_LITERAL: + case RIGHT: + case TRUE: + case AVG: + case COUNT: + case MAX: + case MIN: + case SUM: + case VAR_POP: + case VAR_SAMP: + case VARIANCE: + case STD: + case STDDEV: + case STDDEV_POP: + case STDDEV_SAMP: + case SUBSTRING: + case TRIM: + case FULL: + case INTERVAL: + case MICROSECOND: + case SECOND: + case MINUTE: + case HOUR: + case DAY: + case WEEK: + case MONTH: + case QUARTER: + case YEAR: + case ABS: + case ACOS: + case ADD: + case ADDTIME: + case ASCII: + case ASIN: + case ATAN: + case ATAN2: + case CBRT: + case CEIL: + case CEILING: + case CONCAT: + case CONCAT_WS: + case CONV: + case CONVERT_TZ: + case COS: + case COSH: + case COT: + case CRC32: + case CURDATE: + case CURTIME: + case CURRENT_DATE: + case CURRENT_TIME: + case CURRENT_TIMESTAMP: + case DATE: + case DATE_ADD: + case DATE_FORMAT: + case DATE_SUB: + case DATEDIFF: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DEGREES: + case DIVIDE: + case E: + case EXP: + case EXPM1: + case EXTRACT: + case FLOOR: + case FROM_DAYS: + case FROM_UNIXTIME: + case GET_FORMAT: + case IF: + case IFNULL: + case ISNULL: + case LAST_DAY: + case LENGTH: + case LN: + case LOCALTIME: + case LOCALTIMESTAMP: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MODULUS: + case MONTHNAME: + case MULTIPLY: + case NOW: + case NULLIF: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POSITION: + case POW: + case POWER: + case RADIANS: + case RAND: + case REPLACE: + case RINT: + case ROUND: + case RTRIM: + case REVERSE: + case SEC_TO_TIME: + case SIGN: + case SIGNUM: + case SIN: + case SINH: + case SQRT: + case STR_TO_DATE: + case SUBDATE: + case SUBTIME: + case SUBTRACT: + case SYSDATE: + case TAN: + case TIME: + case TIMEDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TIMESTAMP: + case TRUNCATE: + case TO_DAYS: + case TO_SECONDS: + case UNIX_TIMESTAMP: + case UPPER: + case UTC_DATE: + case UTC_TIME: + case UTC_TIMESTAMP: + case D: + case T: + case TS: + case LEFT_BRACE: + case DENSE_RANK: + case RANK: + case ROW_NUMBER: + case DAY_OF_MONTH: + case DAY_OF_YEAR: + case DAY_OF_WEEK: + case FIELD: + case HOUR_OF_DAY: + case MATCHPHRASE: + case MATCH_PHRASE: + case MATCHPHRASEQUERY: + case SIMPLE_QUERY_STRING: + case QUERY_STRING: + case MATCH_PHRASE_PREFIX: + case MATCHQUERY: + case MATCH_QUERY: + case MINUTE_OF_DAY: + case MINUTE_OF_HOUR: + case MONTH_OF_YEAR: + case MULTIMATCH: + case MULTI_MATCH: + case MULTIMATCHQUERY: + case NESTED: + case PERCENTILE: + case PERCENTILE_APPROX: + case QUERY: + case SCORE: + case SCOREQUERY: + case SCORE_QUERY: + case SECOND_OF_MINUTE: + case TIMESTAMPADD: + case TIMESTAMPDIFF: + case TYPEOF: + case WEEK_OF_YEAR: + case WEEKOFYEAR: + case WEEKDAY: + case WILDCARDQUERY: + case WILDCARD_QUERY: + case SUBSTR: + case STRCMP: + case ADDDATE: + case YEARWEEK: + case TYPE: + case HIGHLIGHT: + case MATCH_BOOL_PREFIX: + case PLUS: + case MINUS: + case MOD: + case DOT: + case LR_BRACKET: + case ZERO_DECIMAL: + case ONE_DECIMAL: + case TWO_DECIMAL: + case STRING_LITERAL: + case DECIMAL_LITERAL: + case REAL_LITERAL: + case ID: + case DOUBLE_QUOTE_ID: + case BACKTICK_QUOTE_ID: + { + _localctx = new PredicateExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(496); + predicate(0); + } + break; + default: + throw new NoViableAltException(this); + } + _ctx.stop = _input.LT(-1); + setState(507); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,43,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + setState(505); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,42,_ctx) ) { + case 1: + { + _localctx = new AndExpressionContext(new ExpressionContext(_parentctx, _parentState)); + ((AndExpressionContext)_localctx).left = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_expression); + setState(499); + if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)"); + setState(500); + match(AND); + setState(501); + ((AndExpressionContext)_localctx).right = expression(4); + } + break; + case 2: + { + _localctx = new OrExpressionContext(new ExpressionContext(_parentctx, _parentState)); + ((OrExpressionContext)_localctx).left = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_expression); + setState(502); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(503); + match(OR); + setState(504); + ((OrExpressionContext)_localctx).right = expression(3); + } + break; + } + } + } + setState(509); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,43,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class PredicateContext extends ParserRuleContext { + public PredicateContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_predicate; } + + public PredicateContext() { } + public void copyFrom(PredicateContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ExpressionAtomPredicateContext extends PredicateContext { + public ExpressionAtomContext expressionAtom() { + return getRuleContext(ExpressionAtomContext.class,0); + } + public ExpressionAtomPredicateContext(PredicateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterExpressionAtomPredicate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitExpressionAtomPredicate(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class BinaryComparisonPredicateContext extends PredicateContext { + public PredicateContext left; + public PredicateContext right; + public ComparisonOperatorContext comparisonOperator() { + return getRuleContext(ComparisonOperatorContext.class,0); + } + public List predicate() { + return getRuleContexts(PredicateContext.class); + } + public PredicateContext predicate(int i) { + return getRuleContext(PredicateContext.class,i); + } + public BinaryComparisonPredicateContext(PredicateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterBinaryComparisonPredicate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitBinaryComparisonPredicate(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class InPredicateContext extends PredicateContext { + public PredicateContext predicate() { + return getRuleContext(PredicateContext.class,0); + } + public TerminalNode IN() { return getToken(OpenSearchSQLParser.IN, 0); } + public TerminalNode LR_BRACKET() { return getToken(OpenSearchSQLParser.LR_BRACKET, 0); } + public ExpressionsContext expressions() { + return getRuleContext(ExpressionsContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(OpenSearchSQLParser.RR_BRACKET, 0); } + public TerminalNode NOT() { return getToken(OpenSearchSQLParser.NOT, 0); } + public InPredicateContext(PredicateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterInPredicate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitInPredicate(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class BetweenPredicateContext extends PredicateContext { + public List predicate() { + return getRuleContexts(PredicateContext.class); + } + public PredicateContext predicate(int i) { + return getRuleContext(PredicateContext.class,i); + } + public TerminalNode BETWEEN() { return getToken(OpenSearchSQLParser.BETWEEN, 0); } + public TerminalNode AND() { return getToken(OpenSearchSQLParser.AND, 0); } + public TerminalNode NOT() { return getToken(OpenSearchSQLParser.NOT, 0); } + public BetweenPredicateContext(PredicateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterBetweenPredicate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitBetweenPredicate(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class IsNullPredicateContext extends PredicateContext { + public PredicateContext predicate() { + return getRuleContext(PredicateContext.class,0); + } + public TerminalNode IS() { return getToken(OpenSearchSQLParser.IS, 0); } + public NullNotnullContext nullNotnull() { + return getRuleContext(NullNotnullContext.class,0); + } + public IsNullPredicateContext(PredicateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterIsNullPredicate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitIsNullPredicate(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class LikePredicateContext extends PredicateContext { + public PredicateContext left; + public PredicateContext right; + public TerminalNode LIKE() { return getToken(OpenSearchSQLParser.LIKE, 0); } + public List predicate() { + return getRuleContexts(PredicateContext.class); + } + public PredicateContext predicate(int i) { + return getRuleContext(PredicateContext.class,i); + } + public TerminalNode NOT() { return getToken(OpenSearchSQLParser.NOT, 0); } + public LikePredicateContext(PredicateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterLikePredicate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitLikePredicate(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class RegexpPredicateContext extends PredicateContext { + public PredicateContext left; + public PredicateContext right; + public TerminalNode REGEXP() { return getToken(OpenSearchSQLParser.REGEXP, 0); } + public List predicate() { + return getRuleContexts(PredicateContext.class); + } + public PredicateContext predicate(int i) { + return getRuleContext(PredicateContext.class,i); + } + public RegexpPredicateContext(PredicateContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterRegexpPredicate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitRegexpPredicate(this); + } + } + + public final PredicateContext predicate() throws RecognitionException { + return predicate(0); + } + + private PredicateContext predicate(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + PredicateContext _localctx = new PredicateContext(_ctx, _parentState); + PredicateContext _prevctx = _localctx; + int _startState = 92; + enterRecursionRule(_localctx, 92, RULE_predicate, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + _localctx = new ExpressionAtomPredicateContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(511); + expressionAtom(0); + } + _ctx.stop = _input.LT(-1); + setState(549); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,48,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + setState(547); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,47,_ctx) ) { + case 1: + { + _localctx = new BinaryComparisonPredicateContext(new PredicateContext(_parentctx, _parentState)); + ((BinaryComparisonPredicateContext)_localctx).left = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_predicate); + setState(513); + if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)"); + setState(514); + comparisonOperator(); + setState(515); + ((BinaryComparisonPredicateContext)_localctx).right = predicate(7); + } + break; + case 2: + { + _localctx = new BetweenPredicateContext(new PredicateContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_predicate); + setState(517); + if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)"); + setState(519); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(518); + match(NOT); + } + } + + setState(521); + match(BETWEEN); + setState(522); + predicate(0); + setState(523); + match(AND); + setState(524); + predicate(5); + } + break; + case 3: + { + _localctx = new LikePredicateContext(new PredicateContext(_parentctx, _parentState)); + ((LikePredicateContext)_localctx).left = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_predicate); + setState(526); + if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)"); + setState(528); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(527); + match(NOT); + } + } + + setState(530); + match(LIKE); + setState(531); + ((LikePredicateContext)_localctx).right = predicate(4); + } + break; + case 4: + { + _localctx = new RegexpPredicateContext(new PredicateContext(_parentctx, _parentState)); + ((RegexpPredicateContext)_localctx).left = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_predicate); + setState(532); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(533); + match(REGEXP); + setState(534); + ((RegexpPredicateContext)_localctx).right = predicate(3); + } + break; + case 5: + { + _localctx = new IsNullPredicateContext(new PredicateContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_predicate); + setState(535); + if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)"); + setState(536); + match(IS); + setState(537); + nullNotnull(); + } + break; + case 6: + { + _localctx = new InPredicateContext(new PredicateContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_predicate); + setState(538); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(540); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(539); + match(NOT); + } + } + + setState(542); + match(IN); + setState(543); + match(LR_BRACKET); + setState(544); + expressions(); + setState(545); + match(RR_BRACKET); + } + break; + } + } + } + setState(551); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,48,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ExpressionsContext extends ParserRuleContext { + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public List COMMA() { return getTokens(OpenSearchSQLParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(OpenSearchSQLParser.COMMA, i); + } + public ExpressionsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expressions; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterExpressions(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitExpressions(this); + } + } + + public final ExpressionsContext expressions() throws RecognitionException { + ExpressionsContext _localctx = new ExpressionsContext(_ctx, getState()); + enterRule(_localctx, 94, RULE_expressions); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(552); + expression(0); + setState(557); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(553); + match(COMMA); + setState(554); + expression(0); + } + } + setState(559); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ExpressionAtomContext extends ParserRuleContext { + public ExpressionAtomContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expressionAtom; } + + public ExpressionAtomContext() { } + public void copyFrom(ExpressionAtomContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ConstantExpressionAtomContext extends ExpressionAtomContext { + public ConstantContext constant() { + return getRuleContext(ConstantContext.class,0); + } + public ConstantExpressionAtomContext(ExpressionAtomContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterConstantExpressionAtom(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitConstantExpressionAtom(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class FunctionCallExpressionAtomContext extends ExpressionAtomContext { + public FunctionCallContext functionCall() { + return getRuleContext(FunctionCallContext.class,0); + } + public FunctionCallExpressionAtomContext(ExpressionAtomContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterFunctionCallExpressionAtom(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitFunctionCallExpressionAtom(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class FullColumnNameExpressionAtomContext extends ExpressionAtomContext { + public ColumnNameContext columnName() { + return getRuleContext(ColumnNameContext.class,0); + } + public FullColumnNameExpressionAtomContext(ExpressionAtomContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterFullColumnNameExpressionAtom(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitFullColumnNameExpressionAtom(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class NestedExpressionAtomContext extends ExpressionAtomContext { + public TerminalNode LR_BRACKET() { return getToken(OpenSearchSQLParser.LR_BRACKET, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(OpenSearchSQLParser.RR_BRACKET, 0); } + public NestedExpressionAtomContext(ExpressionAtomContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterNestedExpressionAtom(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitNestedExpressionAtom(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class MathExpressionAtomContext extends ExpressionAtomContext { + public ExpressionAtomContext left; + public Token mathOperator; + public ExpressionAtomContext right; + public List expressionAtom() { + return getRuleContexts(ExpressionAtomContext.class); + } + public ExpressionAtomContext expressionAtom(int i) { + return getRuleContext(ExpressionAtomContext.class,i); + } + public TerminalNode STAR() { return getToken(OpenSearchSQLParser.STAR, 0); } + public TerminalNode SLASH() { return getToken(OpenSearchSQLParser.SLASH, 0); } + public TerminalNode MODULE() { return getToken(OpenSearchSQLParser.MODULE, 0); } + public TerminalNode PLUS() { return getToken(OpenSearchSQLParser.PLUS, 0); } + public TerminalNode MINUS() { return getToken(OpenSearchSQLParser.MINUS, 0); } + public MathExpressionAtomContext(ExpressionAtomContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterMathExpressionAtom(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitMathExpressionAtom(this); + } + } + + public final ExpressionAtomContext expressionAtom() throws RecognitionException { + return expressionAtom(0); + } + + private ExpressionAtomContext expressionAtom(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + ExpressionAtomContext _localctx = new ExpressionAtomContext(_ctx, _parentState); + ExpressionAtomContext _prevctx = _localctx; + int _startState = 96; + enterRecursionRule(_localctx, 96, RULE_expressionAtom, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(568); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,50,_ctx) ) { + case 1: + { + _localctx = new ConstantExpressionAtomContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(561); + constant(); + } + break; + case 2: + { + _localctx = new FullColumnNameExpressionAtomContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(562); + columnName(); + } + break; + case 3: + { + _localctx = new FunctionCallExpressionAtomContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(563); + functionCall(); + } + break; + case 4: + { + _localctx = new NestedExpressionAtomContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(564); + match(LR_BRACKET); + setState(565); + expression(0); + setState(566); + match(RR_BRACKET); + } + break; + } + _ctx.stop = _input.LT(-1); + setState(578); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,52,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + setState(576); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,51,_ctx) ) { + case 1: + { + _localctx = new MathExpressionAtomContext(new ExpressionAtomContext(_parentctx, _parentState)); + ((MathExpressionAtomContext)_localctx).left = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_expressionAtom); + setState(570); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(571); + ((MathExpressionAtomContext)_localctx).mathOperator = _input.LT(1); + _la = _input.LA(1); + if ( !(((((_la - 312)) & ~0x3f) == 0 && ((1L << (_la - 312)) & 7L) != 0)) ) { + ((MathExpressionAtomContext)_localctx).mathOperator = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(572); + ((MathExpressionAtomContext)_localctx).right = expressionAtom(3); + } + break; + case 2: + { + _localctx = new MathExpressionAtomContext(new ExpressionAtomContext(_parentctx, _parentState)); + ((MathExpressionAtomContext)_localctx).left = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_expressionAtom); + setState(573); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(574); + ((MathExpressionAtomContext)_localctx).mathOperator = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==PLUS || _la==MINUS) ) { + ((MathExpressionAtomContext)_localctx).mathOperator = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(575); + ((MathExpressionAtomContext)_localctx).right = expressionAtom(2); + } + break; + } + } + } + setState(580); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,52,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ComparisonOperatorContext extends ParserRuleContext { + public TerminalNode EQUAL_SYMBOL() { return getToken(OpenSearchSQLParser.EQUAL_SYMBOL, 0); } + public TerminalNode GREATER_SYMBOL() { return getToken(OpenSearchSQLParser.GREATER_SYMBOL, 0); } + public TerminalNode LESS_SYMBOL() { return getToken(OpenSearchSQLParser.LESS_SYMBOL, 0); } + public TerminalNode EXCLAMATION_SYMBOL() { return getToken(OpenSearchSQLParser.EXCLAMATION_SYMBOL, 0); } + public ComparisonOperatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_comparisonOperator; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterComparisonOperator(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitComparisonOperator(this); + } + } + + public final ComparisonOperatorContext comparisonOperator() throws RecognitionException { + ComparisonOperatorContext _localctx = new ComparisonOperatorContext(_ctx, getState()); + enterRule(_localctx, 98, RULE_comparisonOperator); + try { + setState(592); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,53,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(581); + match(EQUAL_SYMBOL); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(582); + match(GREATER_SYMBOL); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(583); + match(LESS_SYMBOL); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(584); + match(LESS_SYMBOL); + setState(585); + match(EQUAL_SYMBOL); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(586); + match(GREATER_SYMBOL); + setState(587); + match(EQUAL_SYMBOL); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(588); + match(LESS_SYMBOL); + setState(589); + match(GREATER_SYMBOL); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(590); + match(EXCLAMATION_SYMBOL); + setState(591); + match(EQUAL_SYMBOL); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class NullNotnullContext extends ParserRuleContext { + public TerminalNode NULL_LITERAL() { return getToken(OpenSearchSQLParser.NULL_LITERAL, 0); } + public TerminalNode NOT() { return getToken(OpenSearchSQLParser.NOT, 0); } + public NullNotnullContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_nullNotnull; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterNullNotnull(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitNullNotnull(this); + } + } + + public final NullNotnullContext nullNotnull() throws RecognitionException { + NullNotnullContext _localctx = new NullNotnullContext(_ctx, getState()); + enterRule(_localctx, 100, RULE_nullNotnull); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(595); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(594); + match(NOT); + } + } + + setState(597); + match(NULL_LITERAL); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FunctionCallContext extends ParserRuleContext { + public FunctionCallContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionCall; } + + public FunctionCallContext() { } + public void copyFrom(FunctionCallContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class PositionFunctionCallContext extends FunctionCallContext { + public PositionFunctionContext positionFunction() { + return getRuleContext(PositionFunctionContext.class,0); + } + public PositionFunctionCallContext(FunctionCallContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterPositionFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitPositionFunctionCall(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class SpecificFunctionCallContext extends FunctionCallContext { + public SpecificFunctionContext specificFunction() { + return getRuleContext(SpecificFunctionContext.class,0); + } + public SpecificFunctionCallContext(FunctionCallContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterSpecificFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitSpecificFunctionCall(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ScoreRelevanceFunctionCallContext extends FunctionCallContext { + public ScoreRelevanceFunctionContext scoreRelevanceFunction() { + return getRuleContext(ScoreRelevanceFunctionContext.class,0); + } + public ScoreRelevanceFunctionCallContext(FunctionCallContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterScoreRelevanceFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitScoreRelevanceFunctionCall(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class HighlightFunctionCallContext extends FunctionCallContext { + public HighlightFunctionContext highlightFunction() { + return getRuleContext(HighlightFunctionContext.class,0); + } + public HighlightFunctionCallContext(FunctionCallContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterHighlightFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitHighlightFunctionCall(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ExtractFunctionCallContext extends FunctionCallContext { + public ExtractFunctionContext extractFunction() { + return getRuleContext(ExtractFunctionContext.class,0); + } + public ExtractFunctionCallContext(FunctionCallContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterExtractFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitExtractFunctionCall(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class RelevanceFunctionCallContext extends FunctionCallContext { + public RelevanceFunctionContext relevanceFunction() { + return getRuleContext(RelevanceFunctionContext.class,0); + } + public RelevanceFunctionCallContext(FunctionCallContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterRelevanceFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitRelevanceFunctionCall(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class TimestampFunctionCallContext extends FunctionCallContext { + public TimestampFunctionContext timestampFunction() { + return getRuleContext(TimestampFunctionContext.class,0); + } + public TimestampFunctionCallContext(FunctionCallContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterTimestampFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitTimestampFunctionCall(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class NestedAllFunctionCallContext extends FunctionCallContext { + public NestedFunctionNameContext nestedFunctionName() { + return getRuleContext(NestedFunctionNameContext.class,0); + } + public TerminalNode LR_BRACKET() { return getToken(OpenSearchSQLParser.LR_BRACKET, 0); } + public AllTupleFieldsContext allTupleFields() { + return getRuleContext(AllTupleFieldsContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(OpenSearchSQLParser.RR_BRACKET, 0); } + public NestedAllFunctionCallContext(FunctionCallContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterNestedAllFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitNestedAllFunctionCall(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class FilteredAggregationFunctionCallContext extends FunctionCallContext { + public AggregateFunctionContext aggregateFunction() { + return getRuleContext(AggregateFunctionContext.class,0); + } + public FilterClauseContext filterClause() { + return getRuleContext(FilterClauseContext.class,0); + } + public OrderByClauseContext orderByClause() { + return getRuleContext(OrderByClauseContext.class,0); + } + public FilteredAggregationFunctionCallContext(FunctionCallContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterFilteredAggregationFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitFilteredAggregationFunctionCall(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class WindowFunctionCallContext extends FunctionCallContext { + public WindowFunctionClauseContext windowFunctionClause() { + return getRuleContext(WindowFunctionClauseContext.class,0); + } + public WindowFunctionCallContext(FunctionCallContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterWindowFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitWindowFunctionCall(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class AggregateFunctionCallContext extends FunctionCallContext { + public AggregateFunctionContext aggregateFunction() { + return getRuleContext(AggregateFunctionContext.class,0); + } + public AggregateFunctionCallContext(FunctionCallContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterAggregateFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitAggregateFunctionCall(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class GetFormatFunctionCallContext extends FunctionCallContext { + public GetFormatFunctionContext getFormatFunction() { + return getRuleContext(GetFormatFunctionContext.class,0); + } + public GetFormatFunctionCallContext(FunctionCallContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterGetFormatFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitGetFormatFunctionCall(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ScalarFunctionCallContext extends FunctionCallContext { + public ScalarFunctionNameContext scalarFunctionName() { + return getRuleContext(ScalarFunctionNameContext.class,0); + } + public TerminalNode LR_BRACKET() { return getToken(OpenSearchSQLParser.LR_BRACKET, 0); } + public FunctionArgsContext functionArgs() { + return getRuleContext(FunctionArgsContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(OpenSearchSQLParser.RR_BRACKET, 0); } + public ScalarFunctionCallContext(FunctionCallContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterScalarFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitScalarFunctionCall(this); + } + } + + public final FunctionCallContext functionCall() throws RecognitionException { + FunctionCallContext _localctx = new FunctionCallContext(_ctx, getState()); + enterRule(_localctx, 102, RULE_functionCall); + int _la; + try { + setState(625); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,56,_ctx) ) { + case 1: + _localctx = new NestedAllFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(599); + nestedFunctionName(); + setState(600); + match(LR_BRACKET); + setState(601); + allTupleFields(); + setState(602); + match(RR_BRACKET); + } + break; + case 2: + _localctx = new ScalarFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(604); + scalarFunctionName(); + setState(605); + match(LR_BRACKET); + setState(606); + functionArgs(); + setState(607); + match(RR_BRACKET); + } + break; + case 3: + _localctx = new SpecificFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(609); + specificFunction(); + } + break; + case 4: + _localctx = new WindowFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(610); + windowFunctionClause(); + } + break; + case 5: + _localctx = new AggregateFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 5); + { + setState(611); + aggregateFunction(); + } + break; + case 6: + _localctx = new FilteredAggregationFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 6); + { + setState(612); + aggregateFunction(); + setState(614); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ORDER) { + { + setState(613); + orderByClause(); + } + } + + setState(616); + filterClause(); + } + break; + case 7: + _localctx = new ScoreRelevanceFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 7); + { + setState(618); + scoreRelevanceFunction(); + } + break; + case 8: + _localctx = new RelevanceFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 8); + { + setState(619); + relevanceFunction(); + } + break; + case 9: + _localctx = new HighlightFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 9); + { + setState(620); + highlightFunction(); + } + break; + case 10: + _localctx = new PositionFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 10); + { + setState(621); + positionFunction(); + } + break; + case 11: + _localctx = new ExtractFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 11); + { + setState(622); + extractFunction(); + } + break; + case 12: + _localctx = new GetFormatFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 12); + { + setState(623); + getFormatFunction(); + } + break; + case 13: + _localctx = new TimestampFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 13); + { + setState(624); + timestampFunction(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class TimestampFunctionContext extends ParserRuleContext { + public FunctionArgContext firstArg; + public FunctionArgContext secondArg; + public TimestampFunctionNameContext timestampFunctionName() { + return getRuleContext(TimestampFunctionNameContext.class,0); + } + public TerminalNode LR_BRACKET() { return getToken(OpenSearchSQLParser.LR_BRACKET, 0); } + public SimpleDateTimePartContext simpleDateTimePart() { + return getRuleContext(SimpleDateTimePartContext.class,0); + } + public List COMMA() { return getTokens(OpenSearchSQLParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(OpenSearchSQLParser.COMMA, i); + } + public TerminalNode RR_BRACKET() { return getToken(OpenSearchSQLParser.RR_BRACKET, 0); } + public List functionArg() { + return getRuleContexts(FunctionArgContext.class); + } + public FunctionArgContext functionArg(int i) { + return getRuleContext(FunctionArgContext.class,i); + } + public TimestampFunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_timestampFunction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterTimestampFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitTimestampFunction(this); + } + } + + public final TimestampFunctionContext timestampFunction() throws RecognitionException { + TimestampFunctionContext _localctx = new TimestampFunctionContext(_ctx, getState()); + enterRule(_localctx, 104, RULE_timestampFunction); + try { + enterOuterAlt(_localctx, 1); + { + setState(627); + timestampFunctionName(); + setState(628); + match(LR_BRACKET); + setState(629); + simpleDateTimePart(); + setState(630); + match(COMMA); + setState(631); + ((TimestampFunctionContext)_localctx).firstArg = functionArg(); + setState(632); + match(COMMA); + setState(633); + ((TimestampFunctionContext)_localctx).secondArg = functionArg(); + setState(634); + match(RR_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class TimestampFunctionNameContext extends ParserRuleContext { + public TerminalNode TIMESTAMPADD() { return getToken(OpenSearchSQLParser.TIMESTAMPADD, 0); } + public TerminalNode TIMESTAMPDIFF() { return getToken(OpenSearchSQLParser.TIMESTAMPDIFF, 0); } + public TimestampFunctionNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_timestampFunctionName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterTimestampFunctionName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitTimestampFunctionName(this); + } + } + + public final TimestampFunctionNameContext timestampFunctionName() throws RecognitionException { + TimestampFunctionNameContext _localctx = new TimestampFunctionNameContext(_ctx, getState()); + enterRule(_localctx, 106, RULE_timestampFunctionName); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(636); + _la = _input.LA(1); + if ( !(_la==TIMESTAMPADD || _la==TIMESTAMPDIFF) ) { + _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; + } + + @SuppressWarnings("CheckReturnValue") + public static class GetFormatFunctionContext extends ParserRuleContext { + public TerminalNode GET_FORMAT() { return getToken(OpenSearchSQLParser.GET_FORMAT, 0); } + public TerminalNode LR_BRACKET() { return getToken(OpenSearchSQLParser.LR_BRACKET, 0); } + public GetFormatTypeContext getFormatType() { + return getRuleContext(GetFormatTypeContext.class,0); + } + public TerminalNode COMMA() { return getToken(OpenSearchSQLParser.COMMA, 0); } + public FunctionArgContext functionArg() { + return getRuleContext(FunctionArgContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(OpenSearchSQLParser.RR_BRACKET, 0); } + public GetFormatFunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_getFormatFunction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterGetFormatFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitGetFormatFunction(this); + } + } + + public final GetFormatFunctionContext getFormatFunction() throws RecognitionException { + GetFormatFunctionContext _localctx = new GetFormatFunctionContext(_ctx, getState()); + enterRule(_localctx, 108, RULE_getFormatFunction); + try { + enterOuterAlt(_localctx, 1); + { + setState(638); + match(GET_FORMAT); + setState(639); + match(LR_BRACKET); + setState(640); + getFormatType(); + setState(641); + match(COMMA); + setState(642); + functionArg(); + setState(643); + match(RR_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class GetFormatTypeContext extends ParserRuleContext { + public TerminalNode DATE() { return getToken(OpenSearchSQLParser.DATE, 0); } + public TerminalNode DATETIME() { return getToken(OpenSearchSQLParser.DATETIME, 0); } + public TerminalNode TIME() { return getToken(OpenSearchSQLParser.TIME, 0); } + public TerminalNode TIMESTAMP() { return getToken(OpenSearchSQLParser.TIMESTAMP, 0); } + public GetFormatTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_getFormatType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterGetFormatType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitGetFormatType(this); + } + } + + public final GetFormatTypeContext getFormatType() throws RecognitionException { + GetFormatTypeContext _localctx = new GetFormatTypeContext(_ctx, getState()); + enterRule(_localctx, 110, RULE_getFormatType); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(645); + _la = _input.LA(1); + if ( !(_la==DATETIME || _la==DATE || _la==TIME || _la==TIMESTAMP) ) { + _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; + } + + @SuppressWarnings("CheckReturnValue") + public static class ExtractFunctionContext extends ParserRuleContext { + public TerminalNode EXTRACT() { return getToken(OpenSearchSQLParser.EXTRACT, 0); } + public TerminalNode LR_BRACKET() { return getToken(OpenSearchSQLParser.LR_BRACKET, 0); } + public DatetimePartContext datetimePart() { + return getRuleContext(DatetimePartContext.class,0); + } + public TerminalNode FROM() { return getToken(OpenSearchSQLParser.FROM, 0); } + public FunctionArgContext functionArg() { + return getRuleContext(FunctionArgContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(OpenSearchSQLParser.RR_BRACKET, 0); } + public ExtractFunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_extractFunction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterExtractFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitExtractFunction(this); + } + } + + public final ExtractFunctionContext extractFunction() throws RecognitionException { + ExtractFunctionContext _localctx = new ExtractFunctionContext(_ctx, getState()); + enterRule(_localctx, 112, RULE_extractFunction); + try { + enterOuterAlt(_localctx, 1); + { + setState(647); + match(EXTRACT); + setState(648); + match(LR_BRACKET); + setState(649); + datetimePart(); + setState(650); + match(FROM); + setState(651); + functionArg(); + setState(652); + match(RR_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class SimpleDateTimePartContext extends ParserRuleContext { + public TerminalNode MICROSECOND() { return getToken(OpenSearchSQLParser.MICROSECOND, 0); } + public TerminalNode SECOND() { return getToken(OpenSearchSQLParser.SECOND, 0); } + public TerminalNode MINUTE() { return getToken(OpenSearchSQLParser.MINUTE, 0); } + public TerminalNode HOUR() { return getToken(OpenSearchSQLParser.HOUR, 0); } + public TerminalNode DAY() { return getToken(OpenSearchSQLParser.DAY, 0); } + public TerminalNode WEEK() { return getToken(OpenSearchSQLParser.WEEK, 0); } + public TerminalNode MONTH() { return getToken(OpenSearchSQLParser.MONTH, 0); } + public TerminalNode QUARTER() { return getToken(OpenSearchSQLParser.QUARTER, 0); } + public TerminalNode YEAR() { return getToken(OpenSearchSQLParser.YEAR, 0); } + public SimpleDateTimePartContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_simpleDateTimePart; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterSimpleDateTimePart(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitSimpleDateTimePart(this); + } + } + + public final SimpleDateTimePartContext simpleDateTimePart() throws RecognitionException { + SimpleDateTimePartContext _localctx = new SimpleDateTimePartContext(_ctx, getState()); + enterRule(_localctx, 114, RULE_simpleDateTimePart); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(654); + _la = _input.LA(1); + if ( !(((((_la - 83)) & ~0x3f) == 0 && ((1L << (_la - 83)) & 511L) != 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; + } + + @SuppressWarnings("CheckReturnValue") + public static class ComplexDateTimePartContext extends ParserRuleContext { + public TerminalNode SECOND_MICROSECOND() { return getToken(OpenSearchSQLParser.SECOND_MICROSECOND, 0); } + public TerminalNode MINUTE_MICROSECOND() { return getToken(OpenSearchSQLParser.MINUTE_MICROSECOND, 0); } + public TerminalNode MINUTE_SECOND() { return getToken(OpenSearchSQLParser.MINUTE_SECOND, 0); } + public TerminalNode HOUR_MICROSECOND() { return getToken(OpenSearchSQLParser.HOUR_MICROSECOND, 0); } + public TerminalNode HOUR_SECOND() { return getToken(OpenSearchSQLParser.HOUR_SECOND, 0); } + public TerminalNode HOUR_MINUTE() { return getToken(OpenSearchSQLParser.HOUR_MINUTE, 0); } + public TerminalNode DAY_MICROSECOND() { return getToken(OpenSearchSQLParser.DAY_MICROSECOND, 0); } + public TerminalNode DAY_SECOND() { return getToken(OpenSearchSQLParser.DAY_SECOND, 0); } + public TerminalNode DAY_MINUTE() { return getToken(OpenSearchSQLParser.DAY_MINUTE, 0); } + public TerminalNode DAY_HOUR() { return getToken(OpenSearchSQLParser.DAY_HOUR, 0); } + public TerminalNode YEAR_MONTH() { return getToken(OpenSearchSQLParser.YEAR_MONTH, 0); } + public ComplexDateTimePartContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_complexDateTimePart; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterComplexDateTimePart(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitComplexDateTimePart(this); + } + } + + public final ComplexDateTimePartContext complexDateTimePart() throws RecognitionException { + ComplexDateTimePartContext _localctx = new ComplexDateTimePartContext(_ctx, getState()); + enterRule(_localctx, 116, RULE_complexDateTimePart); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(656); + _la = _input.LA(1); + if ( !(((((_la - 92)) & ~0x3f) == 0 && ((1L << (_la - 92)) & 2047L) != 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; + } + + @SuppressWarnings("CheckReturnValue") + public static class DatetimePartContext extends ParserRuleContext { + public SimpleDateTimePartContext simpleDateTimePart() { + return getRuleContext(SimpleDateTimePartContext.class,0); + } + public ComplexDateTimePartContext complexDateTimePart() { + return getRuleContext(ComplexDateTimePartContext.class,0); + } + public DatetimePartContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_datetimePart; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterDatetimePart(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitDatetimePart(this); + } + } + + public final DatetimePartContext datetimePart() throws RecognitionException { + DatetimePartContext _localctx = new DatetimePartContext(_ctx, getState()); + enterRule(_localctx, 118, RULE_datetimePart); + try { + setState(660); + _errHandler.sync(this); + switch (_input.LA(1)) { + case MICROSECOND: + case SECOND: + case MINUTE: + case HOUR: + case DAY: + case WEEK: + case MONTH: + case QUARTER: + case YEAR: + enterOuterAlt(_localctx, 1); + { + setState(658); + simpleDateTimePart(); + } + break; + case SECOND_MICROSECOND: + case MINUTE_MICROSECOND: + case MINUTE_SECOND: + case HOUR_MICROSECOND: + case HOUR_SECOND: + case HOUR_MINUTE: + case DAY_MICROSECOND: + case DAY_SECOND: + case DAY_MINUTE: + case DAY_HOUR: + case YEAR_MONTH: + enterOuterAlt(_localctx, 2); + { + setState(659); + complexDateTimePart(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class HighlightFunctionContext extends ParserRuleContext { + public TerminalNode HIGHLIGHT() { return getToken(OpenSearchSQLParser.HIGHLIGHT, 0); } + public TerminalNode LR_BRACKET() { return getToken(OpenSearchSQLParser.LR_BRACKET, 0); } + public RelevanceFieldContext relevanceField() { + return getRuleContext(RelevanceFieldContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(OpenSearchSQLParser.RR_BRACKET, 0); } + public List COMMA() { return getTokens(OpenSearchSQLParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(OpenSearchSQLParser.COMMA, i); + } + public List highlightArg() { + return getRuleContexts(HighlightArgContext.class); + } + public HighlightArgContext highlightArg(int i) { + return getRuleContext(HighlightArgContext.class,i); + } + public HighlightFunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_highlightFunction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterHighlightFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitHighlightFunction(this); + } + } + + public final HighlightFunctionContext highlightFunction() throws RecognitionException { + HighlightFunctionContext _localctx = new HighlightFunctionContext(_ctx, getState()); + enterRule(_localctx, 120, RULE_highlightFunction); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(662); + match(HIGHLIGHT); + setState(663); + match(LR_BRACKET); + setState(664); + relevanceField(); + setState(669); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(665); + match(COMMA); + setState(666); + highlightArg(); + } + } + setState(671); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(672); + match(RR_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class PositionFunctionContext extends ParserRuleContext { + public TerminalNode POSITION() { return getToken(OpenSearchSQLParser.POSITION, 0); } + public TerminalNode LR_BRACKET() { return getToken(OpenSearchSQLParser.LR_BRACKET, 0); } + public List functionArg() { + return getRuleContexts(FunctionArgContext.class); + } + public FunctionArgContext functionArg(int i) { + return getRuleContext(FunctionArgContext.class,i); + } + public TerminalNode IN() { return getToken(OpenSearchSQLParser.IN, 0); } + public TerminalNode RR_BRACKET() { return getToken(OpenSearchSQLParser.RR_BRACKET, 0); } + public PositionFunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_positionFunction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterPositionFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitPositionFunction(this); + } + } + + public final PositionFunctionContext positionFunction() throws RecognitionException { + PositionFunctionContext _localctx = new PositionFunctionContext(_ctx, getState()); + enterRule(_localctx, 122, RULE_positionFunction); + try { + enterOuterAlt(_localctx, 1); + { + setState(674); + match(POSITION); + setState(675); + match(LR_BRACKET); + setState(676); + functionArg(); + setState(677); + match(IN); + setState(678); + functionArg(); + setState(679); + match(RR_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class MatchQueryAltSyntaxFunctionContext extends ParserRuleContext { + public RelevanceFieldContext field; + public RelevanceQueryContext query; + public TerminalNode EQUAL_SYMBOL() { return getToken(OpenSearchSQLParser.EQUAL_SYMBOL, 0); } + public TerminalNode MATCH_QUERY() { return getToken(OpenSearchSQLParser.MATCH_QUERY, 0); } + public TerminalNode LR_BRACKET() { return getToken(OpenSearchSQLParser.LR_BRACKET, 0); } + public TerminalNode RR_BRACKET() { return getToken(OpenSearchSQLParser.RR_BRACKET, 0); } + public RelevanceFieldContext relevanceField() { + return getRuleContext(RelevanceFieldContext.class,0); + } + public RelevanceQueryContext relevanceQuery() { + return getRuleContext(RelevanceQueryContext.class,0); + } + public MatchQueryAltSyntaxFunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_matchQueryAltSyntaxFunction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterMatchQueryAltSyntaxFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitMatchQueryAltSyntaxFunction(this); + } + } + + public final MatchQueryAltSyntaxFunctionContext matchQueryAltSyntaxFunction() throws RecognitionException { + MatchQueryAltSyntaxFunctionContext _localctx = new MatchQueryAltSyntaxFunctionContext(_ctx, getState()); + enterRule(_localctx, 124, RULE_matchQueryAltSyntaxFunction); + try { + enterOuterAlt(_localctx, 1); + { + setState(681); + ((MatchQueryAltSyntaxFunctionContext)_localctx).field = relevanceField(); + setState(682); + match(EQUAL_SYMBOL); + setState(683); + match(MATCH_QUERY); + setState(684); + match(LR_BRACKET); + setState(685); + ((MatchQueryAltSyntaxFunctionContext)_localctx).query = relevanceQuery(); + setState(686); + match(RR_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ScalarFunctionNameContext extends ParserRuleContext { + public MathematicalFunctionNameContext mathematicalFunctionName() { + return getRuleContext(MathematicalFunctionNameContext.class,0); + } + public DateTimeFunctionNameContext dateTimeFunctionName() { + return getRuleContext(DateTimeFunctionNameContext.class,0); + } + public TextFunctionNameContext textFunctionName() { + return getRuleContext(TextFunctionNameContext.class,0); + } + public FlowControlFunctionNameContext flowControlFunctionName() { + return getRuleContext(FlowControlFunctionNameContext.class,0); + } + public SystemFunctionNameContext systemFunctionName() { + return getRuleContext(SystemFunctionNameContext.class,0); + } + public NestedFunctionNameContext nestedFunctionName() { + return getRuleContext(NestedFunctionNameContext.class,0); + } + public ScalarFunctionNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_scalarFunctionName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterScalarFunctionName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitScalarFunctionName(this); + } + } + + public final ScalarFunctionNameContext scalarFunctionName() throws RecognitionException { + ScalarFunctionNameContext _localctx = new ScalarFunctionNameContext(_ctx, getState()); + enterRule(_localctx, 126, RULE_scalarFunctionName); + try { + setState(694); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ABS: + case ACOS: + case ADD: + case ASIN: + case ATAN: + case ATAN2: + case CBRT: + case CEIL: + case CEILING: + case CONV: + case COS: + case COSH: + case COT: + case CRC32: + case DEGREES: + case DIVIDE: + case E: + case EXP: + case EXPM1: + case FLOOR: + case LN: + case LOG: + case LOG10: + case LOG2: + case MODULUS: + case MULTIPLY: + case PI: + case POW: + case POWER: + case RADIANS: + case RAND: + case RINT: + case ROUND: + case SIGN: + case SIGNUM: + case SIN: + case SINH: + case SQRT: + case SUBTRACT: + case TAN: + case TRUNCATE: + case MOD: + enterOuterAlt(_localctx, 1); + { + setState(688); + mathematicalFunctionName(); + } + break; + case DATETIME: + case MICROSECOND: + case SECOND: + case MINUTE: + case HOUR: + case DAY: + case WEEK: + case MONTH: + case QUARTER: + case YEAR: + case ADDTIME: + case CONVERT_TZ: + case CURDATE: + case CURTIME: + case CURRENT_DATE: + case CURRENT_TIME: + case CURRENT_TIMESTAMP: + case DATE: + case DATE_ADD: + case DATE_FORMAT: + case DATE_SUB: + case DATEDIFF: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case FROM_DAYS: + case FROM_UNIXTIME: + case LAST_DAY: + case LOCALTIME: + case LOCALTIMESTAMP: + case MAKEDATE: + case MAKETIME: + case MONTHNAME: + case NOW: + case PERIOD_ADD: + case PERIOD_DIFF: + case SEC_TO_TIME: + case STR_TO_DATE: + case SUBDATE: + case SUBTIME: + case SYSDATE: + case TIME: + case TIMEDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TIMESTAMP: + case TO_DAYS: + case TO_SECONDS: + case UNIX_TIMESTAMP: + case UTC_DATE: + case UTC_TIME: + case UTC_TIMESTAMP: + case DAY_OF_MONTH: + case DAY_OF_YEAR: + case DAY_OF_WEEK: + case HOUR_OF_DAY: + case MINUTE_OF_DAY: + case MINUTE_OF_HOUR: + case MONTH_OF_YEAR: + case SECOND_OF_MINUTE: + case WEEK_OF_YEAR: + case WEEKOFYEAR: + case WEEKDAY: + case ADDDATE: + case YEARWEEK: + enterOuterAlt(_localctx, 2); + { + setState(689); + dateTimeFunctionName(); + } + break; + case LEFT: + case RIGHT: + case SUBSTRING: + case TRIM: + case ASCII: + case CONCAT: + case CONCAT_WS: + case LENGTH: + case LOCATE: + case LOWER: + case LTRIM: + case REPLACE: + case RTRIM: + case REVERSE: + case UPPER: + case SUBSTR: + case STRCMP: + enterOuterAlt(_localctx, 3); + { + setState(690); + textFunctionName(); + } + break; + case IF: + case IFNULL: + case ISNULL: + case NULLIF: + enterOuterAlt(_localctx, 4); + { + setState(691); + flowControlFunctionName(); + } + break; + case TYPEOF: + enterOuterAlt(_localctx, 5); + { + setState(692); + systemFunctionName(); + } + break; + case NESTED: + enterOuterAlt(_localctx, 6); + { + setState(693); + nestedFunctionName(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class SpecificFunctionContext extends ParserRuleContext { + public SpecificFunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_specificFunction; } + + public SpecificFunctionContext() { } + public void copyFrom(SpecificFunctionContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class CaseFunctionCallContext extends SpecificFunctionContext { + public FunctionArgContext elseArg; + public TerminalNode CASE() { return getToken(OpenSearchSQLParser.CASE, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode END() { return getToken(OpenSearchSQLParser.END, 0); } + public List caseFuncAlternative() { + return getRuleContexts(CaseFuncAlternativeContext.class); + } + public CaseFuncAlternativeContext caseFuncAlternative(int i) { + return getRuleContext(CaseFuncAlternativeContext.class,i); + } + public TerminalNode ELSE() { return getToken(OpenSearchSQLParser.ELSE, 0); } + public FunctionArgContext functionArg() { + return getRuleContext(FunctionArgContext.class,0); + } + public CaseFunctionCallContext(SpecificFunctionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterCaseFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitCaseFunctionCall(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class DataTypeFunctionCallContext extends SpecificFunctionContext { + public TerminalNode CAST() { return getToken(OpenSearchSQLParser.CAST, 0); } + public TerminalNode LR_BRACKET() { return getToken(OpenSearchSQLParser.LR_BRACKET, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode AS() { return getToken(OpenSearchSQLParser.AS, 0); } + public ConvertedDataTypeContext convertedDataType() { + return getRuleContext(ConvertedDataTypeContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(OpenSearchSQLParser.RR_BRACKET, 0); } + public DataTypeFunctionCallContext(SpecificFunctionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterDataTypeFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitDataTypeFunctionCall(this); + } + } + + public final SpecificFunctionContext specificFunction() throws RecognitionException { + SpecificFunctionContext _localctx = new SpecificFunctionContext(_ctx, getState()); + enterRule(_localctx, 128, RULE_specificFunction); + int _la; + try { + setState(728); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,64,_ctx) ) { + case 1: + _localctx = new CaseFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(696); + match(CASE); + setState(697); + expression(0); + setState(699); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(698); + caseFuncAlternative(); + } + } + setState(701); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==WHEN ); + setState(705); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ELSE) { + { + setState(703); + match(ELSE); + setState(704); + ((CaseFunctionCallContext)_localctx).elseArg = functionArg(); + } + } + + setState(707); + match(END); + } + break; + case 2: + _localctx = new CaseFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(709); + match(CASE); + setState(711); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(710); + caseFuncAlternative(); + } + } + setState(713); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==WHEN ); + setState(717); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ELSE) { + { + setState(715); + match(ELSE); + setState(716); + ((CaseFunctionCallContext)_localctx).elseArg = functionArg(); + } + } + + setState(719); + match(END); + } + break; + case 3: + _localctx = new DataTypeFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(721); + match(CAST); + setState(722); + match(LR_BRACKET); + setState(723); + expression(0); + setState(724); + match(AS); + setState(725); + convertedDataType(); + setState(726); + match(RR_BRACKET); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class RelevanceFunctionContext extends ParserRuleContext { + public NoFieldRelevanceFunctionContext noFieldRelevanceFunction() { + return getRuleContext(NoFieldRelevanceFunctionContext.class,0); + } + public SingleFieldRelevanceFunctionContext singleFieldRelevanceFunction() { + return getRuleContext(SingleFieldRelevanceFunctionContext.class,0); + } + public MultiFieldRelevanceFunctionContext multiFieldRelevanceFunction() { + return getRuleContext(MultiFieldRelevanceFunctionContext.class,0); + } + public AltSingleFieldRelevanceFunctionContext altSingleFieldRelevanceFunction() { + return getRuleContext(AltSingleFieldRelevanceFunctionContext.class,0); + } + public AltMultiFieldRelevanceFunctionContext altMultiFieldRelevanceFunction() { + return getRuleContext(AltMultiFieldRelevanceFunctionContext.class,0); + } + public RelevanceFunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_relevanceFunction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterRelevanceFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitRelevanceFunction(this); + } + } + + public final RelevanceFunctionContext relevanceFunction() throws RecognitionException { + RelevanceFunctionContext _localctx = new RelevanceFunctionContext(_ctx, getState()); + enterRule(_localctx, 130, RULE_relevanceFunction); + try { + setState(735); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,65,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(730); + noFieldRelevanceFunction(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(731); + singleFieldRelevanceFunction(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(732); + multiFieldRelevanceFunction(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(733); + altSingleFieldRelevanceFunction(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(734); + altMultiFieldRelevanceFunction(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ScoreRelevanceFunctionContext extends ParserRuleContext { + public RelevanceFieldWeightContext weight; + public ScoreRelevanceFunctionNameContext scoreRelevanceFunctionName() { + return getRuleContext(ScoreRelevanceFunctionNameContext.class,0); + } + public TerminalNode LR_BRACKET() { return getToken(OpenSearchSQLParser.LR_BRACKET, 0); } + public RelevanceFunctionContext relevanceFunction() { + return getRuleContext(RelevanceFunctionContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(OpenSearchSQLParser.RR_BRACKET, 0); } + public TerminalNode COMMA() { return getToken(OpenSearchSQLParser.COMMA, 0); } + public RelevanceFieldWeightContext relevanceFieldWeight() { + return getRuleContext(RelevanceFieldWeightContext.class,0); + } + public ScoreRelevanceFunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_scoreRelevanceFunction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterScoreRelevanceFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitScoreRelevanceFunction(this); + } + } + + public final ScoreRelevanceFunctionContext scoreRelevanceFunction() throws RecognitionException { + ScoreRelevanceFunctionContext _localctx = new ScoreRelevanceFunctionContext(_ctx, getState()); + enterRule(_localctx, 132, RULE_scoreRelevanceFunction); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(737); + scoreRelevanceFunctionName(); + setState(738); + match(LR_BRACKET); + setState(739); + relevanceFunction(); + setState(742); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COMMA) { + { + setState(740); + match(COMMA); + setState(741); + ((ScoreRelevanceFunctionContext)_localctx).weight = relevanceFieldWeight(); + } + } + + setState(744); + match(RR_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class NoFieldRelevanceFunctionContext extends ParserRuleContext { + public RelevanceQueryContext query; + public NoFieldRelevanceFunctionNameContext noFieldRelevanceFunctionName() { + return getRuleContext(NoFieldRelevanceFunctionNameContext.class,0); + } + public TerminalNode LR_BRACKET() { return getToken(OpenSearchSQLParser.LR_BRACKET, 0); } + public TerminalNode RR_BRACKET() { return getToken(OpenSearchSQLParser.RR_BRACKET, 0); } + public RelevanceQueryContext relevanceQuery() { + return getRuleContext(RelevanceQueryContext.class,0); + } + public List COMMA() { return getTokens(OpenSearchSQLParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(OpenSearchSQLParser.COMMA, i); + } + public List relevanceArg() { + return getRuleContexts(RelevanceArgContext.class); + } + public RelevanceArgContext relevanceArg(int i) { + return getRuleContext(RelevanceArgContext.class,i); + } + public NoFieldRelevanceFunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_noFieldRelevanceFunction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterNoFieldRelevanceFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitNoFieldRelevanceFunction(this); + } + } + + public final NoFieldRelevanceFunctionContext noFieldRelevanceFunction() throws RecognitionException { + NoFieldRelevanceFunctionContext _localctx = new NoFieldRelevanceFunctionContext(_ctx, getState()); + enterRule(_localctx, 134, RULE_noFieldRelevanceFunction); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(746); + noFieldRelevanceFunctionName(); + setState(747); + match(LR_BRACKET); + setState(748); + ((NoFieldRelevanceFunctionContext)_localctx).query = relevanceQuery(); + setState(753); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(749); + match(COMMA); + setState(750); + relevanceArg(); + } + } + setState(755); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(756); + match(RR_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class SingleFieldRelevanceFunctionContext extends ParserRuleContext { + public RelevanceFieldContext field; + public RelevanceQueryContext query; + public SingleFieldRelevanceFunctionNameContext singleFieldRelevanceFunctionName() { + return getRuleContext(SingleFieldRelevanceFunctionNameContext.class,0); + } + public TerminalNode LR_BRACKET() { return getToken(OpenSearchSQLParser.LR_BRACKET, 0); } + public List COMMA() { return getTokens(OpenSearchSQLParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(OpenSearchSQLParser.COMMA, i); + } + public TerminalNode RR_BRACKET() { return getToken(OpenSearchSQLParser.RR_BRACKET, 0); } + public RelevanceFieldContext relevanceField() { + return getRuleContext(RelevanceFieldContext.class,0); + } + public RelevanceQueryContext relevanceQuery() { + return getRuleContext(RelevanceQueryContext.class,0); + } + public List relevanceArg() { + return getRuleContexts(RelevanceArgContext.class); + } + public RelevanceArgContext relevanceArg(int i) { + return getRuleContext(RelevanceArgContext.class,i); + } + public SingleFieldRelevanceFunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_singleFieldRelevanceFunction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterSingleFieldRelevanceFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitSingleFieldRelevanceFunction(this); + } + } + + public final SingleFieldRelevanceFunctionContext singleFieldRelevanceFunction() throws RecognitionException { + SingleFieldRelevanceFunctionContext _localctx = new SingleFieldRelevanceFunctionContext(_ctx, getState()); + enterRule(_localctx, 136, RULE_singleFieldRelevanceFunction); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(758); + singleFieldRelevanceFunctionName(); + setState(759); + match(LR_BRACKET); + setState(760); + ((SingleFieldRelevanceFunctionContext)_localctx).field = relevanceField(); + setState(761); + match(COMMA); + setState(762); + ((SingleFieldRelevanceFunctionContext)_localctx).query = relevanceQuery(); + setState(767); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(763); + match(COMMA); + setState(764); + relevanceArg(); + } + } + setState(769); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(770); + match(RR_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class MultiFieldRelevanceFunctionContext extends ParserRuleContext { + public RelevanceFieldAndWeightContext field; + public RelevanceQueryContext query; + public MultiFieldRelevanceFunctionNameContext multiFieldRelevanceFunctionName() { + return getRuleContext(MultiFieldRelevanceFunctionNameContext.class,0); + } + public TerminalNode LR_BRACKET() { return getToken(OpenSearchSQLParser.LR_BRACKET, 0); } + public TerminalNode LT_SQR_PRTHS() { return getToken(OpenSearchSQLParser.LT_SQR_PRTHS, 0); } + public TerminalNode RT_SQR_PRTHS() { return getToken(OpenSearchSQLParser.RT_SQR_PRTHS, 0); } + public List COMMA() { return getTokens(OpenSearchSQLParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(OpenSearchSQLParser.COMMA, i); + } + public TerminalNode RR_BRACKET() { return getToken(OpenSearchSQLParser.RR_BRACKET, 0); } + public List relevanceFieldAndWeight() { + return getRuleContexts(RelevanceFieldAndWeightContext.class); + } + public RelevanceFieldAndWeightContext relevanceFieldAndWeight(int i) { + return getRuleContext(RelevanceFieldAndWeightContext.class,i); + } + public RelevanceQueryContext relevanceQuery() { + return getRuleContext(RelevanceQueryContext.class,0); + } + public List relevanceArg() { + return getRuleContexts(RelevanceArgContext.class); + } + public RelevanceArgContext relevanceArg(int i) { + return getRuleContext(RelevanceArgContext.class,i); + } + public AlternateMultiMatchQueryContext alternateMultiMatchQuery() { + return getRuleContext(AlternateMultiMatchQueryContext.class,0); + } + public AlternateMultiMatchFieldContext alternateMultiMatchField() { + return getRuleContext(AlternateMultiMatchFieldContext.class,0); + } + public MultiFieldRelevanceFunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_multiFieldRelevanceFunction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterMultiFieldRelevanceFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitMultiFieldRelevanceFunction(this); + } + } + + public final MultiFieldRelevanceFunctionContext multiFieldRelevanceFunction() throws RecognitionException { + MultiFieldRelevanceFunctionContext _localctx = new MultiFieldRelevanceFunctionContext(_ctx, getState()); + enterRule(_localctx, 138, RULE_multiFieldRelevanceFunction); + int _la; + try { + setState(809); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,72,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(772); + multiFieldRelevanceFunctionName(); + setState(773); + match(LR_BRACKET); + setState(774); + match(LT_SQR_PRTHS); + setState(775); + ((MultiFieldRelevanceFunctionContext)_localctx).field = relevanceFieldAndWeight(); + setState(780); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(776); + match(COMMA); + setState(777); + ((MultiFieldRelevanceFunctionContext)_localctx).field = relevanceFieldAndWeight(); + } + } + setState(782); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(783); + match(RT_SQR_PRTHS); + setState(784); + match(COMMA); + setState(785); + ((MultiFieldRelevanceFunctionContext)_localctx).query = relevanceQuery(); + setState(790); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(786); + match(COMMA); + setState(787); + relevanceArg(); + } + } + setState(792); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(793); + match(RR_BRACKET); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(795); + multiFieldRelevanceFunctionName(); + setState(796); + match(LR_BRACKET); + setState(797); + alternateMultiMatchQuery(); + setState(798); + match(COMMA); + setState(799); + alternateMultiMatchField(); + setState(804); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(800); + match(COMMA); + setState(801); + relevanceArg(); + } + } + setState(806); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(807); + match(RR_BRACKET); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AltSingleFieldRelevanceFunctionContext extends ParserRuleContext { + public RelevanceFieldContext field; + public AltSingleFieldRelevanceFunctionNameContext altSyntaxFunctionName; + public RelevanceQueryContext query; + public TerminalNode EQUAL_SYMBOL() { return getToken(OpenSearchSQLParser.EQUAL_SYMBOL, 0); } + public TerminalNode LR_BRACKET() { return getToken(OpenSearchSQLParser.LR_BRACKET, 0); } + public TerminalNode RR_BRACKET() { return getToken(OpenSearchSQLParser.RR_BRACKET, 0); } + public RelevanceFieldContext relevanceField() { + return getRuleContext(RelevanceFieldContext.class,0); + } + public AltSingleFieldRelevanceFunctionNameContext altSingleFieldRelevanceFunctionName() { + return getRuleContext(AltSingleFieldRelevanceFunctionNameContext.class,0); + } + public RelevanceQueryContext relevanceQuery() { + return getRuleContext(RelevanceQueryContext.class,0); + } + public List COMMA() { return getTokens(OpenSearchSQLParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(OpenSearchSQLParser.COMMA, i); + } + public List relevanceArg() { + return getRuleContexts(RelevanceArgContext.class); + } + public RelevanceArgContext relevanceArg(int i) { + return getRuleContext(RelevanceArgContext.class,i); + } + public AltSingleFieldRelevanceFunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_altSingleFieldRelevanceFunction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterAltSingleFieldRelevanceFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitAltSingleFieldRelevanceFunction(this); + } + } + + public final AltSingleFieldRelevanceFunctionContext altSingleFieldRelevanceFunction() throws RecognitionException { + AltSingleFieldRelevanceFunctionContext _localctx = new AltSingleFieldRelevanceFunctionContext(_ctx, getState()); + enterRule(_localctx, 140, RULE_altSingleFieldRelevanceFunction); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(811); + ((AltSingleFieldRelevanceFunctionContext)_localctx).field = relevanceField(); + setState(812); + match(EQUAL_SYMBOL); + setState(813); + ((AltSingleFieldRelevanceFunctionContext)_localctx).altSyntaxFunctionName = altSingleFieldRelevanceFunctionName(); + setState(814); + match(LR_BRACKET); + setState(815); + ((AltSingleFieldRelevanceFunctionContext)_localctx).query = relevanceQuery(); + setState(820); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(816); + match(COMMA); + setState(817); + relevanceArg(); + } + } + setState(822); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(823); + match(RR_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AltMultiFieldRelevanceFunctionContext extends ParserRuleContext { + public RelevanceFieldContext field; + public AltMultiFieldRelevanceFunctionNameContext altSyntaxFunctionName; + public RelevanceQueryContext query; + public TerminalNode EQUAL_SYMBOL() { return getToken(OpenSearchSQLParser.EQUAL_SYMBOL, 0); } + public TerminalNode LR_BRACKET() { return getToken(OpenSearchSQLParser.LR_BRACKET, 0); } + public TerminalNode RR_BRACKET() { return getToken(OpenSearchSQLParser.RR_BRACKET, 0); } + public RelevanceFieldContext relevanceField() { + return getRuleContext(RelevanceFieldContext.class,0); + } + public AltMultiFieldRelevanceFunctionNameContext altMultiFieldRelevanceFunctionName() { + return getRuleContext(AltMultiFieldRelevanceFunctionNameContext.class,0); + } + public RelevanceQueryContext relevanceQuery() { + return getRuleContext(RelevanceQueryContext.class,0); + } + public List COMMA() { return getTokens(OpenSearchSQLParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(OpenSearchSQLParser.COMMA, i); + } + public List relevanceArg() { + return getRuleContexts(RelevanceArgContext.class); + } + public RelevanceArgContext relevanceArg(int i) { + return getRuleContext(RelevanceArgContext.class,i); + } + public AltMultiFieldRelevanceFunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_altMultiFieldRelevanceFunction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterAltMultiFieldRelevanceFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitAltMultiFieldRelevanceFunction(this); + } + } + + public final AltMultiFieldRelevanceFunctionContext altMultiFieldRelevanceFunction() throws RecognitionException { + AltMultiFieldRelevanceFunctionContext _localctx = new AltMultiFieldRelevanceFunctionContext(_ctx, getState()); + enterRule(_localctx, 142, RULE_altMultiFieldRelevanceFunction); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(825); + ((AltMultiFieldRelevanceFunctionContext)_localctx).field = relevanceField(); + setState(826); + match(EQUAL_SYMBOL); + setState(827); + ((AltMultiFieldRelevanceFunctionContext)_localctx).altSyntaxFunctionName = altMultiFieldRelevanceFunctionName(); + setState(828); + match(LR_BRACKET); + setState(829); + ((AltMultiFieldRelevanceFunctionContext)_localctx).query = relevanceQuery(); + setState(834); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(830); + match(COMMA); + setState(831); + relevanceArg(); + } + } + setState(836); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(837); + match(RR_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ConvertedDataTypeContext extends ParserRuleContext { + public Token typeName; + public TerminalNode DATE() { return getToken(OpenSearchSQLParser.DATE, 0); } + public TerminalNode TIME() { return getToken(OpenSearchSQLParser.TIME, 0); } + public TerminalNode TIMESTAMP() { return getToken(OpenSearchSQLParser.TIMESTAMP, 0); } + public TerminalNode INT() { return getToken(OpenSearchSQLParser.INT, 0); } + public TerminalNode INTEGER() { return getToken(OpenSearchSQLParser.INTEGER, 0); } + public TerminalNode DOUBLE() { return getToken(OpenSearchSQLParser.DOUBLE, 0); } + public TerminalNode LONG() { return getToken(OpenSearchSQLParser.LONG, 0); } + public TerminalNode FLOAT() { return getToken(OpenSearchSQLParser.FLOAT, 0); } + public TerminalNode STRING() { return getToken(OpenSearchSQLParser.STRING, 0); } + public TerminalNode BOOLEAN() { return getToken(OpenSearchSQLParser.BOOLEAN, 0); } + public ConvertedDataTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_convertedDataType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterConvertedDataType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitConvertedDataType(this); + } + } + + public final ConvertedDataTypeContext convertedDataType() throws RecognitionException { + ConvertedDataTypeContext _localctx = new ConvertedDataTypeContext(_ctx, getState()); + enterRule(_localctx, 144, RULE_convertedDataType); + try { + setState(849); + _errHandler.sync(this); + switch (_input.LA(1)) { + case DATE: + enterOuterAlt(_localctx, 1); + { + setState(839); + ((ConvertedDataTypeContext)_localctx).typeName = match(DATE); + } + break; + case TIME: + enterOuterAlt(_localctx, 2); + { + setState(840); + ((ConvertedDataTypeContext)_localctx).typeName = match(TIME); + } + break; + case TIMESTAMP: + enterOuterAlt(_localctx, 3); + { + setState(841); + ((ConvertedDataTypeContext)_localctx).typeName = match(TIMESTAMP); + } + break; + case INT: + enterOuterAlt(_localctx, 4); + { + setState(842); + ((ConvertedDataTypeContext)_localctx).typeName = match(INT); + } + break; + case INTEGER: + enterOuterAlt(_localctx, 5); + { + setState(843); + ((ConvertedDataTypeContext)_localctx).typeName = match(INTEGER); + } + break; + case DOUBLE: + enterOuterAlt(_localctx, 6); + { + setState(844); + ((ConvertedDataTypeContext)_localctx).typeName = match(DOUBLE); + } + break; + case LONG: + enterOuterAlt(_localctx, 7); + { + setState(845); + ((ConvertedDataTypeContext)_localctx).typeName = match(LONG); + } + break; + case FLOAT: + enterOuterAlt(_localctx, 8); + { + setState(846); + ((ConvertedDataTypeContext)_localctx).typeName = match(FLOAT); + } + break; + case STRING: + enterOuterAlt(_localctx, 9); + { + setState(847); + ((ConvertedDataTypeContext)_localctx).typeName = match(STRING); + } + break; + case BOOLEAN: + enterOuterAlt(_localctx, 10); + { + setState(848); + ((ConvertedDataTypeContext)_localctx).typeName = match(BOOLEAN); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class CaseFuncAlternativeContext extends ParserRuleContext { + public FunctionArgContext condition; + public FunctionArgContext consequent; + public TerminalNode WHEN() { return getToken(OpenSearchSQLParser.WHEN, 0); } + public TerminalNode THEN() { return getToken(OpenSearchSQLParser.THEN, 0); } + public List functionArg() { + return getRuleContexts(FunctionArgContext.class); + } + public FunctionArgContext functionArg(int i) { + return getRuleContext(FunctionArgContext.class,i); + } + public CaseFuncAlternativeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_caseFuncAlternative; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterCaseFuncAlternative(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitCaseFuncAlternative(this); + } + } + + public final CaseFuncAlternativeContext caseFuncAlternative() throws RecognitionException { + CaseFuncAlternativeContext _localctx = new CaseFuncAlternativeContext(_ctx, getState()); + enterRule(_localctx, 146, RULE_caseFuncAlternative); + try { + enterOuterAlt(_localctx, 1); + { + setState(851); + match(WHEN); + setState(852); + ((CaseFuncAlternativeContext)_localctx).condition = functionArg(); + setState(853); + match(THEN); + setState(854); + ((CaseFuncAlternativeContext)_localctx).consequent = functionArg(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AggregateFunctionContext extends ParserRuleContext { + public AggregateFunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_aggregateFunction; } + + public AggregateFunctionContext() { } + public void copyFrom(AggregateFunctionContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class DistinctCountFunctionCallContext extends AggregateFunctionContext { + public TerminalNode COUNT() { return getToken(OpenSearchSQLParser.COUNT, 0); } + public TerminalNode LR_BRACKET() { return getToken(OpenSearchSQLParser.LR_BRACKET, 0); } + public TerminalNode DISTINCT() { return getToken(OpenSearchSQLParser.DISTINCT, 0); } + public FunctionArgContext functionArg() { + return getRuleContext(FunctionArgContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(OpenSearchSQLParser.RR_BRACKET, 0); } + public DistinctCountFunctionCallContext(AggregateFunctionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterDistinctCountFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitDistinctCountFunctionCall(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class PercentileApproxFunctionCallContext extends AggregateFunctionContext { + public PercentileApproxFunctionContext percentileApproxFunction() { + return getRuleContext(PercentileApproxFunctionContext.class,0); + } + public PercentileApproxFunctionCallContext(AggregateFunctionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterPercentileApproxFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitPercentileApproxFunctionCall(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class CountStarFunctionCallContext extends AggregateFunctionContext { + public TerminalNode COUNT() { return getToken(OpenSearchSQLParser.COUNT, 0); } + public TerminalNode LR_BRACKET() { return getToken(OpenSearchSQLParser.LR_BRACKET, 0); } + public TerminalNode STAR() { return getToken(OpenSearchSQLParser.STAR, 0); } + public TerminalNode RR_BRACKET() { return getToken(OpenSearchSQLParser.RR_BRACKET, 0); } + public CountStarFunctionCallContext(AggregateFunctionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterCountStarFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitCountStarFunctionCall(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class RegularAggregateFunctionCallContext extends AggregateFunctionContext { + public AggregationFunctionNameContext functionName; + public TerminalNode LR_BRACKET() { return getToken(OpenSearchSQLParser.LR_BRACKET, 0); } + public FunctionArgContext functionArg() { + return getRuleContext(FunctionArgContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(OpenSearchSQLParser.RR_BRACKET, 0); } + public AggregationFunctionNameContext aggregationFunctionName() { + return getRuleContext(AggregationFunctionNameContext.class,0); + } + public RegularAggregateFunctionCallContext(AggregateFunctionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterRegularAggregateFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitRegularAggregateFunctionCall(this); + } + } + + public final AggregateFunctionContext aggregateFunction() throws RecognitionException { + AggregateFunctionContext _localctx = new AggregateFunctionContext(_ctx, getState()); + enterRule(_localctx, 148, RULE_aggregateFunction); + try { + setState(872); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,76,_ctx) ) { + case 1: + _localctx = new RegularAggregateFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(856); + ((RegularAggregateFunctionCallContext)_localctx).functionName = aggregationFunctionName(); + setState(857); + match(LR_BRACKET); + setState(858); + functionArg(); + setState(859); + match(RR_BRACKET); + } + break; + case 2: + _localctx = new CountStarFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(861); + match(COUNT); + setState(862); + match(LR_BRACKET); + setState(863); + match(STAR); + setState(864); + match(RR_BRACKET); + } + break; + case 3: + _localctx = new DistinctCountFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(865); + match(COUNT); + setState(866); + match(LR_BRACKET); + setState(867); + match(DISTINCT); + setState(868); + functionArg(); + setState(869); + match(RR_BRACKET); + } + break; + case 4: + _localctx = new PercentileApproxFunctionCallContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(871); + percentileApproxFunction(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class PercentileApproxFunctionContext extends ParserRuleContext { + public FunctionArgContext aggField; + public NumericLiteralContext percent; + public NumericLiteralContext compression; + public TerminalNode LR_BRACKET() { return getToken(OpenSearchSQLParser.LR_BRACKET, 0); } + public List COMMA() { return getTokens(OpenSearchSQLParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(OpenSearchSQLParser.COMMA, i); + } + public TerminalNode RR_BRACKET() { return getToken(OpenSearchSQLParser.RR_BRACKET, 0); } + public TerminalNode PERCENTILE() { return getToken(OpenSearchSQLParser.PERCENTILE, 0); } + public TerminalNode PERCENTILE_APPROX() { return getToken(OpenSearchSQLParser.PERCENTILE_APPROX, 0); } + public FunctionArgContext functionArg() { + return getRuleContext(FunctionArgContext.class,0); + } + public List numericLiteral() { + return getRuleContexts(NumericLiteralContext.class); + } + public NumericLiteralContext numericLiteral(int i) { + return getRuleContext(NumericLiteralContext.class,i); + } + public PercentileApproxFunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_percentileApproxFunction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterPercentileApproxFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitPercentileApproxFunction(this); + } + } + + public final PercentileApproxFunctionContext percentileApproxFunction() throws RecognitionException { + PercentileApproxFunctionContext _localctx = new PercentileApproxFunctionContext(_ctx, getState()); + enterRule(_localctx, 150, RULE_percentileApproxFunction); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(874); + _la = _input.LA(1); + if ( !(_la==PERCENTILE || _la==PERCENTILE_APPROX) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(875); + match(LR_BRACKET); + setState(876); + ((PercentileApproxFunctionContext)_localctx).aggField = functionArg(); + setState(877); + match(COMMA); + setState(878); + ((PercentileApproxFunctionContext)_localctx).percent = numericLiteral(); + setState(881); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COMMA) { + { + setState(879); + match(COMMA); + setState(880); + ((PercentileApproxFunctionContext)_localctx).compression = numericLiteral(); + } + } + + setState(883); + match(RR_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FilterClauseContext extends ParserRuleContext { + public TerminalNode FILTER() { return getToken(OpenSearchSQLParser.FILTER, 0); } + public TerminalNode LR_BRACKET() { return getToken(OpenSearchSQLParser.LR_BRACKET, 0); } + public TerminalNode WHERE() { return getToken(OpenSearchSQLParser.WHERE, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RR_BRACKET() { return getToken(OpenSearchSQLParser.RR_BRACKET, 0); } + public FilterClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_filterClause; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterFilterClause(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitFilterClause(this); + } + } + + public final FilterClauseContext filterClause() throws RecognitionException { + FilterClauseContext _localctx = new FilterClauseContext(_ctx, getState()); + enterRule(_localctx, 152, RULE_filterClause); + try { + enterOuterAlt(_localctx, 1); + { + setState(885); + match(FILTER); + setState(886); + match(LR_BRACKET); + setState(887); + match(WHERE); + setState(888); + expression(0); + setState(889); + match(RR_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AggregationFunctionNameContext extends ParserRuleContext { + public TerminalNode AVG() { return getToken(OpenSearchSQLParser.AVG, 0); } + public TerminalNode COUNT() { return getToken(OpenSearchSQLParser.COUNT, 0); } + public TerminalNode SUM() { return getToken(OpenSearchSQLParser.SUM, 0); } + public TerminalNode MIN() { return getToken(OpenSearchSQLParser.MIN, 0); } + public TerminalNode MAX() { return getToken(OpenSearchSQLParser.MAX, 0); } + public TerminalNode VAR_POP() { return getToken(OpenSearchSQLParser.VAR_POP, 0); } + public TerminalNode VAR_SAMP() { return getToken(OpenSearchSQLParser.VAR_SAMP, 0); } + public TerminalNode VARIANCE() { return getToken(OpenSearchSQLParser.VARIANCE, 0); } + public TerminalNode STD() { return getToken(OpenSearchSQLParser.STD, 0); } + public TerminalNode STDDEV() { return getToken(OpenSearchSQLParser.STDDEV, 0); } + public TerminalNode STDDEV_POP() { return getToken(OpenSearchSQLParser.STDDEV_POP, 0); } + public TerminalNode STDDEV_SAMP() { return getToken(OpenSearchSQLParser.STDDEV_SAMP, 0); } + public AggregationFunctionNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_aggregationFunctionName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterAggregationFunctionName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitAggregationFunctionName(this); + } + } + + public final AggregationFunctionNameContext aggregationFunctionName() throws RecognitionException { + AggregationFunctionNameContext _localctx = new AggregationFunctionNameContext(_ctx, getState()); + enterRule(_localctx, 154, RULE_aggregationFunctionName); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(891); + _la = _input.LA(1); + if ( !(((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & 4095L) != 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; + } + + @SuppressWarnings("CheckReturnValue") + public static class MathematicalFunctionNameContext extends ParserRuleContext { + public TerminalNode ABS() { return getToken(OpenSearchSQLParser.ABS, 0); } + public TerminalNode CBRT() { return getToken(OpenSearchSQLParser.CBRT, 0); } + public TerminalNode CEIL() { return getToken(OpenSearchSQLParser.CEIL, 0); } + public TerminalNode CEILING() { return getToken(OpenSearchSQLParser.CEILING, 0); } + public TerminalNode CONV() { return getToken(OpenSearchSQLParser.CONV, 0); } + public TerminalNode CRC32() { return getToken(OpenSearchSQLParser.CRC32, 0); } + public TerminalNode E() { return getToken(OpenSearchSQLParser.E, 0); } + public TerminalNode EXP() { return getToken(OpenSearchSQLParser.EXP, 0); } + public TerminalNode EXPM1() { return getToken(OpenSearchSQLParser.EXPM1, 0); } + public TerminalNode FLOOR() { return getToken(OpenSearchSQLParser.FLOOR, 0); } + public TerminalNode LN() { return getToken(OpenSearchSQLParser.LN, 0); } + public TerminalNode LOG() { return getToken(OpenSearchSQLParser.LOG, 0); } + public TerminalNode LOG10() { return getToken(OpenSearchSQLParser.LOG10, 0); } + public TerminalNode LOG2() { return getToken(OpenSearchSQLParser.LOG2, 0); } + public TerminalNode MOD() { return getToken(OpenSearchSQLParser.MOD, 0); } + public TerminalNode PI() { return getToken(OpenSearchSQLParser.PI, 0); } + public TerminalNode POW() { return getToken(OpenSearchSQLParser.POW, 0); } + public TerminalNode POWER() { return getToken(OpenSearchSQLParser.POWER, 0); } + public TerminalNode RAND() { return getToken(OpenSearchSQLParser.RAND, 0); } + public TerminalNode RINT() { return getToken(OpenSearchSQLParser.RINT, 0); } + public TerminalNode ROUND() { return getToken(OpenSearchSQLParser.ROUND, 0); } + public TerminalNode SIGN() { return getToken(OpenSearchSQLParser.SIGN, 0); } + public TerminalNode SIGNUM() { return getToken(OpenSearchSQLParser.SIGNUM, 0); } + public TerminalNode SQRT() { return getToken(OpenSearchSQLParser.SQRT, 0); } + public TerminalNode TRUNCATE() { return getToken(OpenSearchSQLParser.TRUNCATE, 0); } + public TrigonometricFunctionNameContext trigonometricFunctionName() { + return getRuleContext(TrigonometricFunctionNameContext.class,0); + } + public ArithmeticFunctionNameContext arithmeticFunctionName() { + return getRuleContext(ArithmeticFunctionNameContext.class,0); + } + public MathematicalFunctionNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_mathematicalFunctionName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterMathematicalFunctionName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitMathematicalFunctionName(this); + } + } + + public final MathematicalFunctionNameContext mathematicalFunctionName() throws RecognitionException { + MathematicalFunctionNameContext _localctx = new MathematicalFunctionNameContext(_ctx, getState()); + enterRule(_localctx, 156, RULE_mathematicalFunctionName); + try { + setState(920); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,78,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(893); + match(ABS); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(894); + match(CBRT); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(895); + match(CEIL); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(896); + match(CEILING); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(897); + match(CONV); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(898); + match(CRC32); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(899); + match(E); + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(900); + match(EXP); + } + break; + case 9: + enterOuterAlt(_localctx, 9); + { + setState(901); + match(EXPM1); + } + break; + case 10: + enterOuterAlt(_localctx, 10); + { + setState(902); + match(FLOOR); + } + break; + case 11: + enterOuterAlt(_localctx, 11); + { + setState(903); + match(LN); + } + break; + case 12: + enterOuterAlt(_localctx, 12); + { + setState(904); + match(LOG); + } + break; + case 13: + enterOuterAlt(_localctx, 13); + { + setState(905); + match(LOG10); + } + break; + case 14: + enterOuterAlt(_localctx, 14); + { + setState(906); + match(LOG2); + } + break; + case 15: + enterOuterAlt(_localctx, 15); + { + setState(907); + match(MOD); + } + break; + case 16: + enterOuterAlt(_localctx, 16); + { + setState(908); + match(PI); + } + break; + case 17: + enterOuterAlt(_localctx, 17); + { + setState(909); + match(POW); + } + break; + case 18: + enterOuterAlt(_localctx, 18); + { + setState(910); + match(POWER); + } + break; + case 19: + enterOuterAlt(_localctx, 19); + { + setState(911); + match(RAND); + } + break; + case 20: + enterOuterAlt(_localctx, 20); + { + setState(912); + match(RINT); + } + break; + case 21: + enterOuterAlt(_localctx, 21); + { + setState(913); + match(ROUND); + } + break; + case 22: + enterOuterAlt(_localctx, 22); + { + setState(914); + match(SIGN); + } + break; + case 23: + enterOuterAlt(_localctx, 23); + { + setState(915); + match(SIGNUM); + } + break; + case 24: + enterOuterAlt(_localctx, 24); + { + setState(916); + match(SQRT); + } + break; + case 25: + enterOuterAlt(_localctx, 25); + { + setState(917); + match(TRUNCATE); + } + break; + case 26: + enterOuterAlt(_localctx, 26); + { + setState(918); + trigonometricFunctionName(); + } + break; + case 27: + enterOuterAlt(_localctx, 27); + { + setState(919); + arithmeticFunctionName(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class TrigonometricFunctionNameContext extends ParserRuleContext { + public TerminalNode ACOS() { return getToken(OpenSearchSQLParser.ACOS, 0); } + public TerminalNode ASIN() { return getToken(OpenSearchSQLParser.ASIN, 0); } + public TerminalNode ATAN() { return getToken(OpenSearchSQLParser.ATAN, 0); } + public TerminalNode ATAN2() { return getToken(OpenSearchSQLParser.ATAN2, 0); } + public TerminalNode COS() { return getToken(OpenSearchSQLParser.COS, 0); } + public TerminalNode COSH() { return getToken(OpenSearchSQLParser.COSH, 0); } + public TerminalNode COT() { return getToken(OpenSearchSQLParser.COT, 0); } + public TerminalNode DEGREES() { return getToken(OpenSearchSQLParser.DEGREES, 0); } + public TerminalNode RADIANS() { return getToken(OpenSearchSQLParser.RADIANS, 0); } + public TerminalNode SIN() { return getToken(OpenSearchSQLParser.SIN, 0); } + public TerminalNode SINH() { return getToken(OpenSearchSQLParser.SINH, 0); } + public TerminalNode TAN() { return getToken(OpenSearchSQLParser.TAN, 0); } + public TrigonometricFunctionNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_trigonometricFunctionName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterTrigonometricFunctionName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitTrigonometricFunctionName(this); + } + } + + public final TrigonometricFunctionNameContext trigonometricFunctionName() throws RecognitionException { + TrigonometricFunctionNameContext _localctx = new TrigonometricFunctionNameContext(_ctx, getState()); + enterRule(_localctx, 158, RULE_trigonometricFunctionName); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(922); + _la = _input.LA(1); + if ( !(((((_la - 105)) & ~0x3f) == 0 && ((1L << (_la - 105)) & 4295082097L) != 0) || ((((_la - 174)) & ~0x3f) == 0 && ((1L << (_la - 174)) & 265217L) != 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; + } + + @SuppressWarnings("CheckReturnValue") + public static class ArithmeticFunctionNameContext extends ParserRuleContext { + public TerminalNode ADD() { return getToken(OpenSearchSQLParser.ADD, 0); } + public TerminalNode SUBTRACT() { return getToken(OpenSearchSQLParser.SUBTRACT, 0); } + public TerminalNode MULTIPLY() { return getToken(OpenSearchSQLParser.MULTIPLY, 0); } + public TerminalNode DIVIDE() { return getToken(OpenSearchSQLParser.DIVIDE, 0); } + public TerminalNode MOD() { return getToken(OpenSearchSQLParser.MOD, 0); } + public TerminalNode MODULUS() { return getToken(OpenSearchSQLParser.MODULUS, 0); } + public ArithmeticFunctionNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_arithmeticFunctionName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterArithmeticFunctionName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitArithmeticFunctionName(this); + } + } + + public final ArithmeticFunctionNameContext arithmeticFunctionName() throws RecognitionException { + ArithmeticFunctionNameContext _localctx = new ArithmeticFunctionNameContext(_ctx, getState()); + enterRule(_localctx, 160, RULE_arithmeticFunctionName); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(924); + _la = _input.LA(1); + if ( !(((((_la - 106)) & ~0x3f) == 0 && ((1L << (_la - 106)) & 720575944674246657L) != 0) || _la==SUBTRACT || _la==MOD) ) { + _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; + } + + @SuppressWarnings("CheckReturnValue") + public static class DateTimeFunctionNameContext extends ParserRuleContext { + public DatetimeConstantLiteralContext datetimeConstantLiteral() { + return getRuleContext(DatetimeConstantLiteralContext.class,0); + } + public TerminalNode ADDDATE() { return getToken(OpenSearchSQLParser.ADDDATE, 0); } + public TerminalNode ADDTIME() { return getToken(OpenSearchSQLParser.ADDTIME, 0); } + public TerminalNode CONVERT_TZ() { return getToken(OpenSearchSQLParser.CONVERT_TZ, 0); } + public TerminalNode CURDATE() { return getToken(OpenSearchSQLParser.CURDATE, 0); } + public TerminalNode CURTIME() { return getToken(OpenSearchSQLParser.CURTIME, 0); } + public TerminalNode DATE() { return getToken(OpenSearchSQLParser.DATE, 0); } + public TerminalNode DATE_ADD() { return getToken(OpenSearchSQLParser.DATE_ADD, 0); } + public TerminalNode DATE_FORMAT() { return getToken(OpenSearchSQLParser.DATE_FORMAT, 0); } + public TerminalNode DATE_SUB() { return getToken(OpenSearchSQLParser.DATE_SUB, 0); } + public TerminalNode DATEDIFF() { return getToken(OpenSearchSQLParser.DATEDIFF, 0); } + public TerminalNode DATETIME() { return getToken(OpenSearchSQLParser.DATETIME, 0); } + public TerminalNode DAY() { return getToken(OpenSearchSQLParser.DAY, 0); } + public TerminalNode DAYNAME() { return getToken(OpenSearchSQLParser.DAYNAME, 0); } + public TerminalNode DAYOFMONTH() { return getToken(OpenSearchSQLParser.DAYOFMONTH, 0); } + public TerminalNode DAY_OF_MONTH() { return getToken(OpenSearchSQLParser.DAY_OF_MONTH, 0); } + public TerminalNode DAYOFWEEK() { return getToken(OpenSearchSQLParser.DAYOFWEEK, 0); } + public TerminalNode DAYOFYEAR() { return getToken(OpenSearchSQLParser.DAYOFYEAR, 0); } + public TerminalNode DAY_OF_YEAR() { return getToken(OpenSearchSQLParser.DAY_OF_YEAR, 0); } + public TerminalNode DAY_OF_WEEK() { return getToken(OpenSearchSQLParser.DAY_OF_WEEK, 0); } + public TerminalNode FROM_DAYS() { return getToken(OpenSearchSQLParser.FROM_DAYS, 0); } + public TerminalNode FROM_UNIXTIME() { return getToken(OpenSearchSQLParser.FROM_UNIXTIME, 0); } + public TerminalNode HOUR() { return getToken(OpenSearchSQLParser.HOUR, 0); } + public TerminalNode HOUR_OF_DAY() { return getToken(OpenSearchSQLParser.HOUR_OF_DAY, 0); } + public TerminalNode LAST_DAY() { return getToken(OpenSearchSQLParser.LAST_DAY, 0); } + public TerminalNode MAKEDATE() { return getToken(OpenSearchSQLParser.MAKEDATE, 0); } + public TerminalNode MAKETIME() { return getToken(OpenSearchSQLParser.MAKETIME, 0); } + public TerminalNode MICROSECOND() { return getToken(OpenSearchSQLParser.MICROSECOND, 0); } + public TerminalNode MINUTE() { return getToken(OpenSearchSQLParser.MINUTE, 0); } + public TerminalNode MINUTE_OF_DAY() { return getToken(OpenSearchSQLParser.MINUTE_OF_DAY, 0); } + public TerminalNode MINUTE_OF_HOUR() { return getToken(OpenSearchSQLParser.MINUTE_OF_HOUR, 0); } + public TerminalNode MONTH() { return getToken(OpenSearchSQLParser.MONTH, 0); } + public TerminalNode MONTHNAME() { return getToken(OpenSearchSQLParser.MONTHNAME, 0); } + public TerminalNode MONTH_OF_YEAR() { return getToken(OpenSearchSQLParser.MONTH_OF_YEAR, 0); } + public TerminalNode NOW() { return getToken(OpenSearchSQLParser.NOW, 0); } + public TerminalNode PERIOD_ADD() { return getToken(OpenSearchSQLParser.PERIOD_ADD, 0); } + public TerminalNode PERIOD_DIFF() { return getToken(OpenSearchSQLParser.PERIOD_DIFF, 0); } + public TerminalNode QUARTER() { return getToken(OpenSearchSQLParser.QUARTER, 0); } + public TerminalNode SEC_TO_TIME() { return getToken(OpenSearchSQLParser.SEC_TO_TIME, 0); } + public TerminalNode SECOND() { return getToken(OpenSearchSQLParser.SECOND, 0); } + public TerminalNode SECOND_OF_MINUTE() { return getToken(OpenSearchSQLParser.SECOND_OF_MINUTE, 0); } + public TerminalNode SUBDATE() { return getToken(OpenSearchSQLParser.SUBDATE, 0); } + public TerminalNode SUBTIME() { return getToken(OpenSearchSQLParser.SUBTIME, 0); } + public TerminalNode SYSDATE() { return getToken(OpenSearchSQLParser.SYSDATE, 0); } + public TerminalNode STR_TO_DATE() { return getToken(OpenSearchSQLParser.STR_TO_DATE, 0); } + public TerminalNode TIME() { return getToken(OpenSearchSQLParser.TIME, 0); } + public TerminalNode TIME_FORMAT() { return getToken(OpenSearchSQLParser.TIME_FORMAT, 0); } + public TerminalNode TIME_TO_SEC() { return getToken(OpenSearchSQLParser.TIME_TO_SEC, 0); } + public TerminalNode TIMEDIFF() { return getToken(OpenSearchSQLParser.TIMEDIFF, 0); } + public TerminalNode TIMESTAMP() { return getToken(OpenSearchSQLParser.TIMESTAMP, 0); } + public TerminalNode TO_DAYS() { return getToken(OpenSearchSQLParser.TO_DAYS, 0); } + public TerminalNode TO_SECONDS() { return getToken(OpenSearchSQLParser.TO_SECONDS, 0); } + public TerminalNode UNIX_TIMESTAMP() { return getToken(OpenSearchSQLParser.UNIX_TIMESTAMP, 0); } + public TerminalNode WEEK() { return getToken(OpenSearchSQLParser.WEEK, 0); } + public TerminalNode WEEKDAY() { return getToken(OpenSearchSQLParser.WEEKDAY, 0); } + public TerminalNode WEEK_OF_YEAR() { return getToken(OpenSearchSQLParser.WEEK_OF_YEAR, 0); } + public TerminalNode WEEKOFYEAR() { return getToken(OpenSearchSQLParser.WEEKOFYEAR, 0); } + public TerminalNode YEAR() { return getToken(OpenSearchSQLParser.YEAR, 0); } + public TerminalNode YEARWEEK() { return getToken(OpenSearchSQLParser.YEARWEEK, 0); } + public DateTimeFunctionNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dateTimeFunctionName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterDateTimeFunctionName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitDateTimeFunctionName(this); + } + } + + public final DateTimeFunctionNameContext dateTimeFunctionName() throws RecognitionException { + DateTimeFunctionNameContext _localctx = new DateTimeFunctionNameContext(_ctx, getState()); + enterRule(_localctx, 162, RULE_dateTimeFunctionName); + try { + setState(985); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CURRENT_DATE: + case CURRENT_TIME: + case CURRENT_TIMESTAMP: + case LOCALTIME: + case LOCALTIMESTAMP: + case UTC_DATE: + case UTC_TIME: + case UTC_TIMESTAMP: + enterOuterAlt(_localctx, 1); + { + setState(926); + datetimeConstantLiteral(); + } + break; + case ADDDATE: + enterOuterAlt(_localctx, 2); + { + setState(927); + match(ADDDATE); + } + break; + case ADDTIME: + enterOuterAlt(_localctx, 3); + { + setState(928); + match(ADDTIME); + } + break; + case CONVERT_TZ: + enterOuterAlt(_localctx, 4); + { + setState(929); + match(CONVERT_TZ); + } + break; + case CURDATE: + enterOuterAlt(_localctx, 5); + { + setState(930); + match(CURDATE); + } + break; + case CURTIME: + enterOuterAlt(_localctx, 6); + { + setState(931); + match(CURTIME); + } + break; + case DATE: + enterOuterAlt(_localctx, 7); + { + setState(932); + match(DATE); + } + break; + case DATE_ADD: + enterOuterAlt(_localctx, 8); + { + setState(933); + match(DATE_ADD); + } + break; + case DATE_FORMAT: + enterOuterAlt(_localctx, 9); + { + setState(934); + match(DATE_FORMAT); + } + break; + case DATE_SUB: + enterOuterAlt(_localctx, 10); + { + setState(935); + match(DATE_SUB); + } + break; + case DATEDIFF: + enterOuterAlt(_localctx, 11); + { + setState(936); + match(DATEDIFF); + } + break; + case DATETIME: + enterOuterAlt(_localctx, 12); + { + setState(937); + match(DATETIME); + } + break; + case DAY: + enterOuterAlt(_localctx, 13); + { + setState(938); + match(DAY); + } + break; + case DAYNAME: + enterOuterAlt(_localctx, 14); + { + setState(939); + match(DAYNAME); + } + break; + case DAYOFMONTH: + enterOuterAlt(_localctx, 15); + { + setState(940); + match(DAYOFMONTH); + } + break; + case DAY_OF_MONTH: + enterOuterAlt(_localctx, 16); + { + setState(941); + match(DAY_OF_MONTH); + } + break; + case DAYOFWEEK: + enterOuterAlt(_localctx, 17); + { + setState(942); + match(DAYOFWEEK); + } + break; + case DAYOFYEAR: + enterOuterAlt(_localctx, 18); + { + setState(943); + match(DAYOFYEAR); + } + break; + case DAY_OF_YEAR: + enterOuterAlt(_localctx, 19); + { + setState(944); + match(DAY_OF_YEAR); + } + break; + case DAY_OF_WEEK: + enterOuterAlt(_localctx, 20); + { + setState(945); + match(DAY_OF_WEEK); + } + break; + case FROM_DAYS: + enterOuterAlt(_localctx, 21); + { + setState(946); + match(FROM_DAYS); + } + break; + case FROM_UNIXTIME: + enterOuterAlt(_localctx, 22); + { + setState(947); + match(FROM_UNIXTIME); + } + break; + case HOUR: + enterOuterAlt(_localctx, 23); + { + setState(948); + match(HOUR); + } + break; + case HOUR_OF_DAY: + enterOuterAlt(_localctx, 24); + { + setState(949); + match(HOUR_OF_DAY); + } + break; + case LAST_DAY: + enterOuterAlt(_localctx, 25); + { + setState(950); + match(LAST_DAY); + } + break; + case MAKEDATE: + enterOuterAlt(_localctx, 26); + { + setState(951); + match(MAKEDATE); + } + break; + case MAKETIME: + enterOuterAlt(_localctx, 27); + { + setState(952); + match(MAKETIME); + } + break; + case MICROSECOND: + enterOuterAlt(_localctx, 28); + { + setState(953); + match(MICROSECOND); + } + break; + case MINUTE: + enterOuterAlt(_localctx, 29); + { + setState(954); + match(MINUTE); + } + break; + case MINUTE_OF_DAY: + enterOuterAlt(_localctx, 30); + { + setState(955); + match(MINUTE_OF_DAY); + } + break; + case MINUTE_OF_HOUR: + enterOuterAlt(_localctx, 31); + { + setState(956); + match(MINUTE_OF_HOUR); + } + break; + case MONTH: + enterOuterAlt(_localctx, 32); + { + setState(957); + match(MONTH); + } + break; + case MONTHNAME: + enterOuterAlt(_localctx, 33); + { + setState(958); + match(MONTHNAME); + } + break; + case MONTH_OF_YEAR: + enterOuterAlt(_localctx, 34); + { + setState(959); + match(MONTH_OF_YEAR); + } + break; + case NOW: + enterOuterAlt(_localctx, 35); + { + setState(960); + match(NOW); + } + break; + case PERIOD_ADD: + enterOuterAlt(_localctx, 36); + { + setState(961); + match(PERIOD_ADD); + } + break; + case PERIOD_DIFF: + enterOuterAlt(_localctx, 37); + { + setState(962); + match(PERIOD_DIFF); + } + break; + case QUARTER: + enterOuterAlt(_localctx, 38); + { + setState(963); + match(QUARTER); + } + break; + case SEC_TO_TIME: + enterOuterAlt(_localctx, 39); + { + setState(964); + match(SEC_TO_TIME); + } + break; + case SECOND: + enterOuterAlt(_localctx, 40); + { + setState(965); + match(SECOND); + } + break; + case SECOND_OF_MINUTE: + enterOuterAlt(_localctx, 41); + { + setState(966); + match(SECOND_OF_MINUTE); + } + break; + case SUBDATE: + enterOuterAlt(_localctx, 42); + { + setState(967); + match(SUBDATE); + } + break; + case SUBTIME: + enterOuterAlt(_localctx, 43); + { + setState(968); + match(SUBTIME); + } + break; + case SYSDATE: + enterOuterAlt(_localctx, 44); + { + setState(969); + match(SYSDATE); + } + break; + case STR_TO_DATE: + enterOuterAlt(_localctx, 45); + { + setState(970); + match(STR_TO_DATE); + } + break; + case TIME: + enterOuterAlt(_localctx, 46); + { + setState(971); + match(TIME); + } + break; + case TIME_FORMAT: + enterOuterAlt(_localctx, 47); + { + setState(972); + match(TIME_FORMAT); + } + break; + case TIME_TO_SEC: + enterOuterAlt(_localctx, 48); + { + setState(973); + match(TIME_TO_SEC); + } + break; + case TIMEDIFF: + enterOuterAlt(_localctx, 49); + { + setState(974); + match(TIMEDIFF); + } + break; + case TIMESTAMP: + enterOuterAlt(_localctx, 50); + { + setState(975); + match(TIMESTAMP); + } + break; + case TO_DAYS: + enterOuterAlt(_localctx, 51); + { + setState(976); + match(TO_DAYS); + } + break; + case TO_SECONDS: + enterOuterAlt(_localctx, 52); + { + setState(977); + match(TO_SECONDS); + } + break; + case UNIX_TIMESTAMP: + enterOuterAlt(_localctx, 53); + { + setState(978); + match(UNIX_TIMESTAMP); + } + break; + case WEEK: + enterOuterAlt(_localctx, 54); + { + setState(979); + match(WEEK); + } + break; + case WEEKDAY: + enterOuterAlt(_localctx, 55); + { + setState(980); + match(WEEKDAY); + } + break; + case WEEK_OF_YEAR: + enterOuterAlt(_localctx, 56); + { + setState(981); + match(WEEK_OF_YEAR); + } + break; + case WEEKOFYEAR: + enterOuterAlt(_localctx, 57); + { + setState(982); + match(WEEKOFYEAR); + } + break; + case YEAR: + enterOuterAlt(_localctx, 58); + { + setState(983); + match(YEAR); + } + break; + case YEARWEEK: + enterOuterAlt(_localctx, 59); + { + setState(984); + match(YEARWEEK); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class TextFunctionNameContext extends ParserRuleContext { + public TerminalNode SUBSTR() { return getToken(OpenSearchSQLParser.SUBSTR, 0); } + public TerminalNode SUBSTRING() { return getToken(OpenSearchSQLParser.SUBSTRING, 0); } + public TerminalNode TRIM() { return getToken(OpenSearchSQLParser.TRIM, 0); } + public TerminalNode LTRIM() { return getToken(OpenSearchSQLParser.LTRIM, 0); } + public TerminalNode RTRIM() { return getToken(OpenSearchSQLParser.RTRIM, 0); } + public TerminalNode LOWER() { return getToken(OpenSearchSQLParser.LOWER, 0); } + public TerminalNode UPPER() { return getToken(OpenSearchSQLParser.UPPER, 0); } + public TerminalNode CONCAT() { return getToken(OpenSearchSQLParser.CONCAT, 0); } + public TerminalNode CONCAT_WS() { return getToken(OpenSearchSQLParser.CONCAT_WS, 0); } + public TerminalNode LENGTH() { return getToken(OpenSearchSQLParser.LENGTH, 0); } + public TerminalNode STRCMP() { return getToken(OpenSearchSQLParser.STRCMP, 0); } + public TerminalNode RIGHT() { return getToken(OpenSearchSQLParser.RIGHT, 0); } + public TerminalNode LEFT() { return getToken(OpenSearchSQLParser.LEFT, 0); } + public TerminalNode ASCII() { return getToken(OpenSearchSQLParser.ASCII, 0); } + public TerminalNode LOCATE() { return getToken(OpenSearchSQLParser.LOCATE, 0); } + public TerminalNode REPLACE() { return getToken(OpenSearchSQLParser.REPLACE, 0); } + public TerminalNode REVERSE() { return getToken(OpenSearchSQLParser.REVERSE, 0); } + public TextFunctionNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_textFunctionName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterTextFunctionName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitTextFunctionName(this); + } + } + + public final TextFunctionNameContext textFunctionName() throws RecognitionException { + TextFunctionNameContext _localctx = new TextFunctionNameContext(_ctx, getState()); + enterRule(_localctx, 164, RULE_textFunctionName); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(987); + _la = _input.LA(1); + if ( !(_la==LEFT || _la==RIGHT || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & 826781204483L) != 0) || ((((_la - 151)) & ~0x3f) == 0 && ((1L << (_la - 151)) & 2251800652546833L) != 0) || _la==SUBSTR || _la==STRCMP) ) { + _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; + } + + @SuppressWarnings("CheckReturnValue") + public static class FlowControlFunctionNameContext extends ParserRuleContext { + public TerminalNode IF() { return getToken(OpenSearchSQLParser.IF, 0); } + public TerminalNode IFNULL() { return getToken(OpenSearchSQLParser.IFNULL, 0); } + public TerminalNode NULLIF() { return getToken(OpenSearchSQLParser.NULLIF, 0); } + public TerminalNode ISNULL() { return getToken(OpenSearchSQLParser.ISNULL, 0); } + public FlowControlFunctionNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_flowControlFunctionName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterFlowControlFunctionName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitFlowControlFunctionName(this); + } + } + + public final FlowControlFunctionNameContext flowControlFunctionName() throws RecognitionException { + FlowControlFunctionNameContext _localctx = new FlowControlFunctionNameContext(_ctx, getState()); + enterRule(_localctx, 166, RULE_flowControlFunctionName); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(989); + _la = _input.LA(1); + if ( !(((((_la - 147)) & ~0x3f) == 0 && ((1L << (_la - 147)) & 1048583L) != 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; + } + + @SuppressWarnings("CheckReturnValue") + public static class NoFieldRelevanceFunctionNameContext extends ParserRuleContext { + public TerminalNode QUERY() { return getToken(OpenSearchSQLParser.QUERY, 0); } + public NoFieldRelevanceFunctionNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_noFieldRelevanceFunctionName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterNoFieldRelevanceFunctionName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitNoFieldRelevanceFunctionName(this); + } + } + + public final NoFieldRelevanceFunctionNameContext noFieldRelevanceFunctionName() throws RecognitionException { + NoFieldRelevanceFunctionNameContext _localctx = new NoFieldRelevanceFunctionNameContext(_ctx, getState()); + enterRule(_localctx, 168, RULE_noFieldRelevanceFunctionName); + try { + enterOuterAlt(_localctx, 1); + { + setState(991); + match(QUERY); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class SystemFunctionNameContext extends ParserRuleContext { + public TerminalNode TYPEOF() { return getToken(OpenSearchSQLParser.TYPEOF, 0); } + public SystemFunctionNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_systemFunctionName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterSystemFunctionName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitSystemFunctionName(this); + } + } + + public final SystemFunctionNameContext systemFunctionName() throws RecognitionException { + SystemFunctionNameContext _localctx = new SystemFunctionNameContext(_ctx, getState()); + enterRule(_localctx, 170, RULE_systemFunctionName); + try { + enterOuterAlt(_localctx, 1); + { + setState(993); + match(TYPEOF); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class NestedFunctionNameContext extends ParserRuleContext { + public TerminalNode NESTED() { return getToken(OpenSearchSQLParser.NESTED, 0); } + public NestedFunctionNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_nestedFunctionName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterNestedFunctionName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitNestedFunctionName(this); + } + } + + public final NestedFunctionNameContext nestedFunctionName() throws RecognitionException { + NestedFunctionNameContext _localctx = new NestedFunctionNameContext(_ctx, getState()); + enterRule(_localctx, 172, RULE_nestedFunctionName); + try { + enterOuterAlt(_localctx, 1); + { + setState(995); + match(NESTED); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ScoreRelevanceFunctionNameContext extends ParserRuleContext { + public TerminalNode SCORE() { return getToken(OpenSearchSQLParser.SCORE, 0); } + public TerminalNode SCOREQUERY() { return getToken(OpenSearchSQLParser.SCOREQUERY, 0); } + public TerminalNode SCORE_QUERY() { return getToken(OpenSearchSQLParser.SCORE_QUERY, 0); } + public ScoreRelevanceFunctionNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_scoreRelevanceFunctionName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterScoreRelevanceFunctionName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitScoreRelevanceFunctionName(this); + } + } + + public final ScoreRelevanceFunctionNameContext scoreRelevanceFunctionName() throws RecognitionException { + ScoreRelevanceFunctionNameContext _localctx = new ScoreRelevanceFunctionNameContext(_ctx, getState()); + enterRule(_localctx, 174, RULE_scoreRelevanceFunctionName); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(997); + _la = _input.LA(1); + if ( !(((((_la - 254)) & ~0x3f) == 0 && ((1L << (_la - 254)) & 7L) != 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; + } + + @SuppressWarnings("CheckReturnValue") + public static class SingleFieldRelevanceFunctionNameContext extends ParserRuleContext { + public TerminalNode MATCH() { return getToken(OpenSearchSQLParser.MATCH, 0); } + public TerminalNode MATCHQUERY() { return getToken(OpenSearchSQLParser.MATCHQUERY, 0); } + public TerminalNode MATCH_QUERY() { return getToken(OpenSearchSQLParser.MATCH_QUERY, 0); } + public TerminalNode MATCH_PHRASE() { return getToken(OpenSearchSQLParser.MATCH_PHRASE, 0); } + public TerminalNode MATCHPHRASE() { return getToken(OpenSearchSQLParser.MATCHPHRASE, 0); } + public TerminalNode MATCHPHRASEQUERY() { return getToken(OpenSearchSQLParser.MATCHPHRASEQUERY, 0); } + public TerminalNode MATCH_BOOL_PREFIX() { return getToken(OpenSearchSQLParser.MATCH_BOOL_PREFIX, 0); } + public TerminalNode MATCH_PHRASE_PREFIX() { return getToken(OpenSearchSQLParser.MATCH_PHRASE_PREFIX, 0); } + public TerminalNode WILDCARD_QUERY() { return getToken(OpenSearchSQLParser.WILDCARD_QUERY, 0); } + public TerminalNode WILDCARDQUERY() { return getToken(OpenSearchSQLParser.WILDCARDQUERY, 0); } + public SingleFieldRelevanceFunctionNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_singleFieldRelevanceFunctionName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterSingleFieldRelevanceFunctionName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitSingleFieldRelevanceFunctionName(this); + } + } + + public final SingleFieldRelevanceFunctionNameContext singleFieldRelevanceFunctionName() throws RecognitionException { + SingleFieldRelevanceFunctionNameContext _localctx = new SingleFieldRelevanceFunctionNameContext(_ctx, getState()); + enterRule(_localctx, 176, RULE_singleFieldRelevanceFunctionName); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(999); + _la = _input.LA(1); + if ( !(_la==MATCH || ((((_la - 232)) & ~0x3f) == 0 && ((1L << (_la - 232)) & 206158430439L) != 0) || _la==MATCH_BOOL_PREFIX) ) { + _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; + } + + @SuppressWarnings("CheckReturnValue") + public static class MultiFieldRelevanceFunctionNameContext extends ParserRuleContext { + public TerminalNode MULTI_MATCH() { return getToken(OpenSearchSQLParser.MULTI_MATCH, 0); } + public TerminalNode MULTIMATCH() { return getToken(OpenSearchSQLParser.MULTIMATCH, 0); } + public TerminalNode MULTIMATCHQUERY() { return getToken(OpenSearchSQLParser.MULTIMATCHQUERY, 0); } + public TerminalNode SIMPLE_QUERY_STRING() { return getToken(OpenSearchSQLParser.SIMPLE_QUERY_STRING, 0); } + public TerminalNode QUERY_STRING() { return getToken(OpenSearchSQLParser.QUERY_STRING, 0); } + public MultiFieldRelevanceFunctionNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_multiFieldRelevanceFunctionName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterMultiFieldRelevanceFunctionName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitMultiFieldRelevanceFunctionName(this); + } + } + + public final MultiFieldRelevanceFunctionNameContext multiFieldRelevanceFunctionName() throws RecognitionException { + MultiFieldRelevanceFunctionNameContext _localctx = new MultiFieldRelevanceFunctionNameContext(_ctx, getState()); + enterRule(_localctx, 178, RULE_multiFieldRelevanceFunctionName); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1001); + _la = _input.LA(1); + if ( !(((((_la - 235)) & ~0x3f) == 0 && ((1L << (_la - 235)) & 1795L) != 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; + } + + @SuppressWarnings("CheckReturnValue") + public static class AltSingleFieldRelevanceFunctionNameContext extends ParserRuleContext { + public TerminalNode MATCH_QUERY() { return getToken(OpenSearchSQLParser.MATCH_QUERY, 0); } + public TerminalNode MATCHQUERY() { return getToken(OpenSearchSQLParser.MATCHQUERY, 0); } + public TerminalNode MATCH_PHRASE() { return getToken(OpenSearchSQLParser.MATCH_PHRASE, 0); } + public TerminalNode MATCHPHRASE() { return getToken(OpenSearchSQLParser.MATCHPHRASE, 0); } + public AltSingleFieldRelevanceFunctionNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_altSingleFieldRelevanceFunctionName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterAltSingleFieldRelevanceFunctionName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitAltSingleFieldRelevanceFunctionName(this); + } + } + + public final AltSingleFieldRelevanceFunctionNameContext altSingleFieldRelevanceFunctionName() throws RecognitionException { + AltSingleFieldRelevanceFunctionNameContext _localctx = new AltSingleFieldRelevanceFunctionNameContext(_ctx, getState()); + enterRule(_localctx, 180, RULE_altSingleFieldRelevanceFunctionName); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1003); + _la = _input.LA(1); + if ( !(((((_la - 232)) & ~0x3f) == 0 && ((1L << (_la - 232)) & 195L) != 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; + } + + @SuppressWarnings("CheckReturnValue") + public static class AltMultiFieldRelevanceFunctionNameContext extends ParserRuleContext { + public TerminalNode MULTI_MATCH() { return getToken(OpenSearchSQLParser.MULTI_MATCH, 0); } + public TerminalNode MULTIMATCH() { return getToken(OpenSearchSQLParser.MULTIMATCH, 0); } + public AltMultiFieldRelevanceFunctionNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_altMultiFieldRelevanceFunctionName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterAltMultiFieldRelevanceFunctionName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitAltMultiFieldRelevanceFunctionName(this); + } + } + + public final AltMultiFieldRelevanceFunctionNameContext altMultiFieldRelevanceFunctionName() throws RecognitionException { + AltMultiFieldRelevanceFunctionNameContext _localctx = new AltMultiFieldRelevanceFunctionNameContext(_ctx, getState()); + enterRule(_localctx, 182, RULE_altMultiFieldRelevanceFunctionName); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1005); + _la = _input.LA(1); + if ( !(_la==MULTIMATCH || _la==MULTI_MATCH) ) { + _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; + } + + @SuppressWarnings("CheckReturnValue") + public static class FunctionArgsContext extends ParserRuleContext { + public List functionArg() { + return getRuleContexts(FunctionArgContext.class); + } + public FunctionArgContext functionArg(int i) { + return getRuleContext(FunctionArgContext.class,i); + } + public List COMMA() { return getTokens(OpenSearchSQLParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(OpenSearchSQLParser.COMMA, i); + } + public FunctionArgsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionArgs; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterFunctionArgs(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitFunctionArgs(this); + } + } + + public final FunctionArgsContext functionArgs() throws RecognitionException { + FunctionArgsContext _localctx = new FunctionArgsContext(_ctx, getState()); + enterRule(_localctx, 184, RULE_functionArgs); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1015); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 594530332636688384L) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & -549621678081L) != 0) || ((((_la - 129)) & ~0x3f) == 0 && ((1L << (_la - 129)) & -1L) != 0) || ((((_la - 193)) & ~0x3f) == 0 && ((1L << (_la - 193)) & -1603281948214689793L) != 0) || ((((_la - 257)) & ~0x3f) == 0 && ((1L << (_la - 257)) & 3191363285945548721L) != 0) || ((((_la - 327)) & ~0x3f) == 0 && ((1L << (_la - 327)) & 30082819L) != 0)) { + { + setState(1007); + functionArg(); + setState(1012); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(1008); + match(COMMA); + setState(1009); + functionArg(); + } + } + setState(1014); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FunctionArgContext extends ParserRuleContext { + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public FunctionArgContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionArg; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterFunctionArg(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitFunctionArg(this); + } + } + + public final FunctionArgContext functionArg() throws RecognitionException { + FunctionArgContext _localctx = new FunctionArgContext(_ctx, getState()); + enterRule(_localctx, 186, RULE_functionArg); + try { + enterOuterAlt(_localctx, 1); + { + setState(1017); + expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class RelevanceArgContext extends ParserRuleContext { + public StringLiteralContext argName; + public RelevanceArgValueContext argVal; + public RelevanceArgNameContext relevanceArgName() { + return getRuleContext(RelevanceArgNameContext.class,0); + } + public TerminalNode EQUAL_SYMBOL() { return getToken(OpenSearchSQLParser.EQUAL_SYMBOL, 0); } + public RelevanceArgValueContext relevanceArgValue() { + return getRuleContext(RelevanceArgValueContext.class,0); + } + public StringLiteralContext stringLiteral() { + return getRuleContext(StringLiteralContext.class,0); + } + public RelevanceArgContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_relevanceArg; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterRelevanceArg(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitRelevanceArg(this); + } + } + + public final RelevanceArgContext relevanceArg() throws RecognitionException { + RelevanceArgContext _localctx = new RelevanceArgContext(_ctx, getState()); + enterRule(_localctx, 188, RULE_relevanceArg); + try { + setState(1027); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ALLOW_LEADING_WILDCARD: + case ANALYZER: + case ANALYZE_WILDCARD: + case AUTO_GENERATE_SYNONYMS_PHRASE_QUERY: + case BOOST: + case CASE_INSENSITIVE: + case CUTOFF_FREQUENCY: + case DEFAULT_FIELD: + case DEFAULT_OPERATOR: + case ESCAPE: + case ENABLE_POSITION_INCREMENTS: + case FIELDS: + case FLAGS: + case FUZZINESS: + case FUZZY_MAX_EXPANSIONS: + case FUZZY_PREFIX_LENGTH: + case FUZZY_REWRITE: + case FUZZY_TRANSPOSITIONS: + case LENIENT: + case LOW_FREQ_OPERATOR: + case MAX_DETERMINIZED_STATES: + case MAX_EXPANSIONS: + case MINIMUM_SHOULD_MATCH: + case OPERATOR: + case PHRASE_SLOP: + case PREFIX_LENGTH: + case QUOTE_ANALYZER: + case QUOTE_FIELD_SUFFIX: + case REWRITE: + case SLOP: + case TIE_BREAKER: + case TIME_ZONE: + case TYPE: + case ZERO_TERMS_QUERY: + enterOuterAlt(_localctx, 1); + { + setState(1019); + relevanceArgName(); + setState(1020); + match(EQUAL_SYMBOL); + setState(1021); + relevanceArgValue(); + } + break; + case STRING_LITERAL: + case DOUBLE_QUOTE_ID: + enterOuterAlt(_localctx, 2); + { + setState(1023); + ((RelevanceArgContext)_localctx).argName = stringLiteral(); + setState(1024); + match(EQUAL_SYMBOL); + setState(1025); + ((RelevanceArgContext)_localctx).argVal = relevanceArgValue(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class HighlightArgContext extends ParserRuleContext { + public HighlightArgNameContext highlightArgName() { + return getRuleContext(HighlightArgNameContext.class,0); + } + public TerminalNode EQUAL_SYMBOL() { return getToken(OpenSearchSQLParser.EQUAL_SYMBOL, 0); } + public HighlightArgValueContext highlightArgValue() { + return getRuleContext(HighlightArgValueContext.class,0); + } + public HighlightArgContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_highlightArg; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterHighlightArg(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitHighlightArg(this); + } + } + + public final HighlightArgContext highlightArg() throws RecognitionException { + HighlightArgContext _localctx = new HighlightArgContext(_ctx, getState()); + enterRule(_localctx, 190, RULE_highlightArg); + try { + enterOuterAlt(_localctx, 1); + { + setState(1029); + highlightArgName(); + setState(1030); + match(EQUAL_SYMBOL); + setState(1031); + highlightArgValue(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class RelevanceArgNameContext extends ParserRuleContext { + public TerminalNode ALLOW_LEADING_WILDCARD() { return getToken(OpenSearchSQLParser.ALLOW_LEADING_WILDCARD, 0); } + public TerminalNode ANALYZER() { return getToken(OpenSearchSQLParser.ANALYZER, 0); } + public TerminalNode ANALYZE_WILDCARD() { return getToken(OpenSearchSQLParser.ANALYZE_WILDCARD, 0); } + public TerminalNode AUTO_GENERATE_SYNONYMS_PHRASE_QUERY() { return getToken(OpenSearchSQLParser.AUTO_GENERATE_SYNONYMS_PHRASE_QUERY, 0); } + public TerminalNode BOOST() { return getToken(OpenSearchSQLParser.BOOST, 0); } + public TerminalNode CASE_INSENSITIVE() { return getToken(OpenSearchSQLParser.CASE_INSENSITIVE, 0); } + public TerminalNode CUTOFF_FREQUENCY() { return getToken(OpenSearchSQLParser.CUTOFF_FREQUENCY, 0); } + public TerminalNode DEFAULT_FIELD() { return getToken(OpenSearchSQLParser.DEFAULT_FIELD, 0); } + public TerminalNode DEFAULT_OPERATOR() { return getToken(OpenSearchSQLParser.DEFAULT_OPERATOR, 0); } + public TerminalNode ENABLE_POSITION_INCREMENTS() { return getToken(OpenSearchSQLParser.ENABLE_POSITION_INCREMENTS, 0); } + public TerminalNode ESCAPE() { return getToken(OpenSearchSQLParser.ESCAPE, 0); } + public TerminalNode FIELDS() { return getToken(OpenSearchSQLParser.FIELDS, 0); } + public TerminalNode FLAGS() { return getToken(OpenSearchSQLParser.FLAGS, 0); } + public TerminalNode FUZZINESS() { return getToken(OpenSearchSQLParser.FUZZINESS, 0); } + public TerminalNode FUZZY_MAX_EXPANSIONS() { return getToken(OpenSearchSQLParser.FUZZY_MAX_EXPANSIONS, 0); } + public TerminalNode FUZZY_PREFIX_LENGTH() { return getToken(OpenSearchSQLParser.FUZZY_PREFIX_LENGTH, 0); } + public TerminalNode FUZZY_REWRITE() { return getToken(OpenSearchSQLParser.FUZZY_REWRITE, 0); } + public TerminalNode FUZZY_TRANSPOSITIONS() { return getToken(OpenSearchSQLParser.FUZZY_TRANSPOSITIONS, 0); } + public TerminalNode LENIENT() { return getToken(OpenSearchSQLParser.LENIENT, 0); } + public TerminalNode LOW_FREQ_OPERATOR() { return getToken(OpenSearchSQLParser.LOW_FREQ_OPERATOR, 0); } + public TerminalNode MAX_DETERMINIZED_STATES() { return getToken(OpenSearchSQLParser.MAX_DETERMINIZED_STATES, 0); } + public TerminalNode MAX_EXPANSIONS() { return getToken(OpenSearchSQLParser.MAX_EXPANSIONS, 0); } + public TerminalNode MINIMUM_SHOULD_MATCH() { return getToken(OpenSearchSQLParser.MINIMUM_SHOULD_MATCH, 0); } + public TerminalNode OPERATOR() { return getToken(OpenSearchSQLParser.OPERATOR, 0); } + public TerminalNode PHRASE_SLOP() { return getToken(OpenSearchSQLParser.PHRASE_SLOP, 0); } + public TerminalNode PREFIX_LENGTH() { return getToken(OpenSearchSQLParser.PREFIX_LENGTH, 0); } + public TerminalNode QUOTE_ANALYZER() { return getToken(OpenSearchSQLParser.QUOTE_ANALYZER, 0); } + public TerminalNode QUOTE_FIELD_SUFFIX() { return getToken(OpenSearchSQLParser.QUOTE_FIELD_SUFFIX, 0); } + public TerminalNode REWRITE() { return getToken(OpenSearchSQLParser.REWRITE, 0); } + public TerminalNode SLOP() { return getToken(OpenSearchSQLParser.SLOP, 0); } + public TerminalNode TIE_BREAKER() { return getToken(OpenSearchSQLParser.TIE_BREAKER, 0); } + public TerminalNode TIME_ZONE() { return getToken(OpenSearchSQLParser.TIME_ZONE, 0); } + public TerminalNode TYPE() { return getToken(OpenSearchSQLParser.TYPE, 0); } + public TerminalNode ZERO_TERMS_QUERY() { return getToken(OpenSearchSQLParser.ZERO_TERMS_QUERY, 0); } + public RelevanceArgNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_relevanceArgName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterRelevanceArgName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitRelevanceArgName(this); + } + } + + public final RelevanceArgNameContext relevanceArgName() throws RecognitionException { + RelevanceArgNameContext _localctx = new RelevanceArgNameContext(_ctx, getState()); + enterRule(_localctx, 192, RULE_relevanceArgName); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1033); + _la = _input.LA(1); + if ( !(((((_la - 274)) & ~0x3f) == 0 && ((1L << (_la - 274)) & 17179869183L) != 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; + } + + @SuppressWarnings("CheckReturnValue") + public static class HighlightArgNameContext extends ParserRuleContext { + public TerminalNode HIGHLIGHT_POST_TAGS() { return getToken(OpenSearchSQLParser.HIGHLIGHT_POST_TAGS, 0); } + public TerminalNode HIGHLIGHT_PRE_TAGS() { return getToken(OpenSearchSQLParser.HIGHLIGHT_PRE_TAGS, 0); } + public HighlightArgNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_highlightArgName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterHighlightArgName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitHighlightArgName(this); + } + } + + public final HighlightArgNameContext highlightArgName() throws RecognitionException { + HighlightArgNameContext _localctx = new HighlightArgNameContext(_ctx, getState()); + enterRule(_localctx, 194, RULE_highlightArgName); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1035); + _la = _input.LA(1); + if ( !(_la==HIGHLIGHT_PRE_TAGS || _la==HIGHLIGHT_POST_TAGS) ) { + _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; + } + + @SuppressWarnings("CheckReturnValue") + public static class RelevanceFieldAndWeightContext extends ParserRuleContext { + public RelevanceFieldContext field; + public RelevanceFieldWeightContext weight; + public RelevanceFieldContext relevanceField() { + return getRuleContext(RelevanceFieldContext.class,0); + } + public RelevanceFieldWeightContext relevanceFieldWeight() { + return getRuleContext(RelevanceFieldWeightContext.class,0); + } + public TerminalNode BIT_XOR_OP() { return getToken(OpenSearchSQLParser.BIT_XOR_OP, 0); } + public RelevanceFieldAndWeightContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_relevanceFieldAndWeight; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterRelevanceFieldAndWeight(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitRelevanceFieldAndWeight(this); + } + } + + public final RelevanceFieldAndWeightContext relevanceFieldAndWeight() throws RecognitionException { + RelevanceFieldAndWeightContext _localctx = new RelevanceFieldAndWeightContext(_ctx, getState()); + enterRule(_localctx, 196, RULE_relevanceFieldAndWeight); + try { + setState(1045); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,83,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1037); + ((RelevanceFieldAndWeightContext)_localctx).field = relevanceField(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1038); + ((RelevanceFieldAndWeightContext)_localctx).field = relevanceField(); + setState(1039); + ((RelevanceFieldAndWeightContext)_localctx).weight = relevanceFieldWeight(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(1041); + ((RelevanceFieldAndWeightContext)_localctx).field = relevanceField(); + setState(1042); + match(BIT_XOR_OP); + setState(1043); + ((RelevanceFieldAndWeightContext)_localctx).weight = relevanceFieldWeight(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class RelevanceFieldWeightContext extends ParserRuleContext { + public NumericLiteralContext numericLiteral() { + return getRuleContext(NumericLiteralContext.class,0); + } + public RelevanceFieldWeightContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_relevanceFieldWeight; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterRelevanceFieldWeight(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitRelevanceFieldWeight(this); + } + } + + public final RelevanceFieldWeightContext relevanceFieldWeight() throws RecognitionException { + RelevanceFieldWeightContext _localctx = new RelevanceFieldWeightContext(_ctx, getState()); + enterRule(_localctx, 198, RULE_relevanceFieldWeight); + try { + enterOuterAlt(_localctx, 1); + { + setState(1047); + numericLiteral(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class RelevanceFieldContext extends ParserRuleContext { + public QualifiedNameContext qualifiedName() { + return getRuleContext(QualifiedNameContext.class,0); + } + public StringLiteralContext stringLiteral() { + return getRuleContext(StringLiteralContext.class,0); + } + public RelevanceFieldContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_relevanceField; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterRelevanceField(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitRelevanceField(this); + } + } + + public final RelevanceFieldContext relevanceField() throws RecognitionException { + RelevanceFieldContext _localctx = new RelevanceFieldContext(_ctx, getState()); + enterRule(_localctx, 200, RULE_relevanceField); + try { + setState(1051); + _errHandler.sync(this); + switch (_input.LA(1)) { + case DATETIME: + case FIRST: + case LAST: + case LEFT: + case RIGHT: + case AVG: + case COUNT: + case MAX: + case MIN: + case SUM: + case SUBSTRING: + case TRIM: + case FULL: + case MICROSECOND: + case SECOND: + case MINUTE: + case HOUR: + case DAY: + case WEEK: + case MONTH: + case QUARTER: + case YEAR: + case ABS: + case ACOS: + case ADD: + case ADDTIME: + case ASCII: + case ASIN: + case ATAN: + case ATAN2: + case CBRT: + case CEIL: + case CEILING: + case CONCAT: + case CONCAT_WS: + case CONV: + case CONVERT_TZ: + case COS: + case COSH: + case COT: + case CRC32: + case CURDATE: + case CURTIME: + case CURRENT_DATE: + case CURRENT_TIME: + case CURRENT_TIMESTAMP: + case DATE: + case DATE_ADD: + case DATE_FORMAT: + case DATE_SUB: + case DATEDIFF: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DEGREES: + case DIVIDE: + case E: + case EXP: + case EXPM1: + case FLOOR: + case FROM_DAYS: + case FROM_UNIXTIME: + case IF: + case IFNULL: + case ISNULL: + case LAST_DAY: + case LENGTH: + case LN: + case LOCALTIME: + case LOCALTIMESTAMP: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MODULUS: + case MONTHNAME: + case MULTIPLY: + case NOW: + case NULLIF: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POW: + case POWER: + case RADIANS: + case RAND: + case REPLACE: + case RINT: + case ROUND: + case RTRIM: + case REVERSE: + case SEC_TO_TIME: + case SIGN: + case SIGNUM: + case SIN: + case SINH: + case SQRT: + case STR_TO_DATE: + case SUBDATE: + case SUBTIME: + case SUBTRACT: + case SYSDATE: + case TAN: + case TIME: + case TIMEDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TIMESTAMP: + case TRUNCATE: + case TO_DAYS: + case TO_SECONDS: + case UNIX_TIMESTAMP: + case UPPER: + case UTC_DATE: + case UTC_TIME: + case UTC_TIMESTAMP: + case D: + case T: + case TS: + case DAY_OF_MONTH: + case DAY_OF_YEAR: + case DAY_OF_WEEK: + case FIELD: + case HOUR_OF_DAY: + case MINUTE_OF_DAY: + case MINUTE_OF_HOUR: + case MONTH_OF_YEAR: + case NESTED: + case SECOND_OF_MINUTE: + case TYPEOF: + case WEEK_OF_YEAR: + case WEEKOFYEAR: + case WEEKDAY: + case SUBSTR: + case STRCMP: + case ADDDATE: + case YEARWEEK: + case TYPE: + case MOD: + case DOT: + case ID: + case BACKTICK_QUOTE_ID: + enterOuterAlt(_localctx, 1); + { + setState(1049); + qualifiedName(); + } + break; + case STRING_LITERAL: + case DOUBLE_QUOTE_ID: + enterOuterAlt(_localctx, 2); + { + setState(1050); + stringLiteral(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class RelevanceQueryContext extends ParserRuleContext { + public RelevanceArgValueContext relevanceArgValue() { + return getRuleContext(RelevanceArgValueContext.class,0); + } + public RelevanceQueryContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_relevanceQuery; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterRelevanceQuery(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitRelevanceQuery(this); + } + } + + public final RelevanceQueryContext relevanceQuery() throws RecognitionException { + RelevanceQueryContext _localctx = new RelevanceQueryContext(_ctx, getState()); + enterRule(_localctx, 202, RULE_relevanceQuery); + try { + enterOuterAlt(_localctx, 1); + { + setState(1053); + relevanceArgValue(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class RelevanceArgValueContext extends ParserRuleContext { + public QualifiedNameContext qualifiedName() { + return getRuleContext(QualifiedNameContext.class,0); + } + public ConstantContext constant() { + return getRuleContext(ConstantContext.class,0); + } + public RelevanceArgValueContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_relevanceArgValue; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterRelevanceArgValue(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitRelevanceArgValue(this); + } + } + + public final RelevanceArgValueContext relevanceArgValue() throws RecognitionException { + RelevanceArgValueContext _localctx = new RelevanceArgValueContext(_ctx, getState()); + enterRule(_localctx, 204, RULE_relevanceArgValue); + try { + setState(1057); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,85,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1055); + qualifiedName(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1056); + constant(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class HighlightArgValueContext extends ParserRuleContext { + public StringLiteralContext stringLiteral() { + return getRuleContext(StringLiteralContext.class,0); + } + public HighlightArgValueContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_highlightArgValue; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterHighlightArgValue(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitHighlightArgValue(this); + } + } + + public final HighlightArgValueContext highlightArgValue() throws RecognitionException { + HighlightArgValueContext _localctx = new HighlightArgValueContext(_ctx, getState()); + enterRule(_localctx, 206, RULE_highlightArgValue); + try { + enterOuterAlt(_localctx, 1); + { + setState(1059); + stringLiteral(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AlternateMultiMatchArgNameContext extends ParserRuleContext { + public TerminalNode FIELDS() { return getToken(OpenSearchSQLParser.FIELDS, 0); } + public TerminalNode QUERY() { return getToken(OpenSearchSQLParser.QUERY, 0); } + public StringLiteralContext stringLiteral() { + return getRuleContext(StringLiteralContext.class,0); + } + public AlternateMultiMatchArgNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_alternateMultiMatchArgName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterAlternateMultiMatchArgName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitAlternateMultiMatchArgName(this); + } + } + + public final AlternateMultiMatchArgNameContext alternateMultiMatchArgName() throws RecognitionException { + AlternateMultiMatchArgNameContext _localctx = new AlternateMultiMatchArgNameContext(_ctx, getState()); + enterRule(_localctx, 208, RULE_alternateMultiMatchArgName); + try { + setState(1064); + _errHandler.sync(this); + switch (_input.LA(1)) { + case FIELDS: + enterOuterAlt(_localctx, 1); + { + setState(1061); + match(FIELDS); + } + break; + case QUERY: + enterOuterAlt(_localctx, 2); + { + setState(1062); + match(QUERY); + } + break; + case STRING_LITERAL: + case DOUBLE_QUOTE_ID: + enterOuterAlt(_localctx, 3); + { + setState(1063); + stringLiteral(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AlternateMultiMatchQueryContext extends ParserRuleContext { + public AlternateMultiMatchArgNameContext argName; + public RelevanceArgValueContext argVal; + public TerminalNode EQUAL_SYMBOL() { return getToken(OpenSearchSQLParser.EQUAL_SYMBOL, 0); } + public AlternateMultiMatchArgNameContext alternateMultiMatchArgName() { + return getRuleContext(AlternateMultiMatchArgNameContext.class,0); + } + public RelevanceArgValueContext relevanceArgValue() { + return getRuleContext(RelevanceArgValueContext.class,0); + } + public AlternateMultiMatchQueryContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_alternateMultiMatchQuery; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterAlternateMultiMatchQuery(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitAlternateMultiMatchQuery(this); + } + } + + public final AlternateMultiMatchQueryContext alternateMultiMatchQuery() throws RecognitionException { + AlternateMultiMatchQueryContext _localctx = new AlternateMultiMatchQueryContext(_ctx, getState()); + enterRule(_localctx, 210, RULE_alternateMultiMatchQuery); + try { + enterOuterAlt(_localctx, 1); + { + setState(1066); + ((AlternateMultiMatchQueryContext)_localctx).argName = alternateMultiMatchArgName(); + setState(1067); + match(EQUAL_SYMBOL); + setState(1068); + ((AlternateMultiMatchQueryContext)_localctx).argVal = relevanceArgValue(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AlternateMultiMatchFieldContext extends ParserRuleContext { + public AlternateMultiMatchArgNameContext argName; + public RelevanceArgValueContext argVal; + public TerminalNode EQUAL_SYMBOL() { return getToken(OpenSearchSQLParser.EQUAL_SYMBOL, 0); } + public AlternateMultiMatchArgNameContext alternateMultiMatchArgName() { + return getRuleContext(AlternateMultiMatchArgNameContext.class,0); + } + public RelevanceArgValueContext relevanceArgValue() { + return getRuleContext(RelevanceArgValueContext.class,0); + } + public TerminalNode LT_SQR_PRTHS() { return getToken(OpenSearchSQLParser.LT_SQR_PRTHS, 0); } + public TerminalNode RT_SQR_PRTHS() { return getToken(OpenSearchSQLParser.RT_SQR_PRTHS, 0); } + public AlternateMultiMatchFieldContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_alternateMultiMatchField; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterAlternateMultiMatchField(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitAlternateMultiMatchField(this); + } + } + + public final AlternateMultiMatchFieldContext alternateMultiMatchField() throws RecognitionException { + AlternateMultiMatchFieldContext _localctx = new AlternateMultiMatchFieldContext(_ctx, getState()); + enterRule(_localctx, 212, RULE_alternateMultiMatchField); + try { + setState(1080); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,87,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1070); + ((AlternateMultiMatchFieldContext)_localctx).argName = alternateMultiMatchArgName(); + setState(1071); + match(EQUAL_SYMBOL); + setState(1072); + ((AlternateMultiMatchFieldContext)_localctx).argVal = relevanceArgValue(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1074); + ((AlternateMultiMatchFieldContext)_localctx).argName = alternateMultiMatchArgName(); + setState(1075); + match(EQUAL_SYMBOL); + setState(1076); + match(LT_SQR_PRTHS); + setState(1077); + ((AlternateMultiMatchFieldContext)_localctx).argVal = relevanceArgValue(); + setState(1078); + match(RT_SQR_PRTHS); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class TableNameContext extends ParserRuleContext { + public QualifiedNameContext qualifiedName() { + return getRuleContext(QualifiedNameContext.class,0); + } + public TableNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_tableName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterTableName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitTableName(this); + } + } + + public final TableNameContext tableName() throws RecognitionException { + TableNameContext _localctx = new TableNameContext(_ctx, getState()); + enterRule(_localctx, 214, RULE_tableName); + try { + enterOuterAlt(_localctx, 1); + { + setState(1082); + qualifiedName(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ColumnNameContext extends ParserRuleContext { + public QualifiedNameContext qualifiedName() { + return getRuleContext(QualifiedNameContext.class,0); + } + public ColumnNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_columnName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterColumnName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitColumnName(this); + } + } + + public final ColumnNameContext columnName() throws RecognitionException { + ColumnNameContext _localctx = new ColumnNameContext(_ctx, getState()); + enterRule(_localctx, 216, RULE_columnName); + try { + enterOuterAlt(_localctx, 1); + { + setState(1084); + qualifiedName(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AllTupleFieldsContext extends ParserRuleContext { + public QualifiedNameContext path; + public TerminalNode DOT() { return getToken(OpenSearchSQLParser.DOT, 0); } + public TerminalNode STAR() { return getToken(OpenSearchSQLParser.STAR, 0); } + public QualifiedNameContext qualifiedName() { + return getRuleContext(QualifiedNameContext.class,0); + } + public AllTupleFieldsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_allTupleFields; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterAllTupleFields(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitAllTupleFields(this); + } + } + + public final AllTupleFieldsContext allTupleFields() throws RecognitionException { + AllTupleFieldsContext _localctx = new AllTupleFieldsContext(_ctx, getState()); + enterRule(_localctx, 218, RULE_allTupleFields); + try { + enterOuterAlt(_localctx, 1); + { + setState(1086); + ((AllTupleFieldsContext)_localctx).path = qualifiedName(); + setState(1087); + match(DOT); + setState(1088); + match(STAR); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AliasContext extends ParserRuleContext { + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public AliasContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_alias; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterAlias(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitAlias(this); + } + } + + public final AliasContext alias() throws RecognitionException { + AliasContext _localctx = new AliasContext(_ctx, getState()); + enterRule(_localctx, 220, RULE_alias); + try { + enterOuterAlt(_localctx, 1); + { + setState(1090); + ident(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class QualifiedNameContext extends ParserRuleContext { + public List ident() { + return getRuleContexts(IdentContext.class); + } + public IdentContext ident(int i) { + return getRuleContext(IdentContext.class,i); + } + public List DOT() { return getTokens(OpenSearchSQLParser.DOT); } + public TerminalNode DOT(int i) { + return getToken(OpenSearchSQLParser.DOT, i); + } + public QualifiedNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_qualifiedName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterQualifiedName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitQualifiedName(this); + } + } + + public final QualifiedNameContext qualifiedName() throws RecognitionException { + QualifiedNameContext _localctx = new QualifiedNameContext(_ctx, getState()); + enterRule(_localctx, 222, RULE_qualifiedName); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1092); + ident(); + setState(1097); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,88,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1093); + match(DOT); + setState(1094); + ident(); + } + } + } + setState(1099); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,88,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class IdentContext extends ParserRuleContext { + public TerminalNode ID() { return getToken(OpenSearchSQLParser.ID, 0); } + public TerminalNode DOT() { return getToken(OpenSearchSQLParser.DOT, 0); } + public TerminalNode BACKTICK_QUOTE_ID() { return getToken(OpenSearchSQLParser.BACKTICK_QUOTE_ID, 0); } + public KeywordsCanBeIdContext keywordsCanBeId() { + return getRuleContext(KeywordsCanBeIdContext.class,0); + } + public ScalarFunctionNameContext scalarFunctionName() { + return getRuleContext(ScalarFunctionNameContext.class,0); + } + public IdentContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_ident; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterIdent(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitIdent(this); + } + } + + public final IdentContext ident() throws RecognitionException { + IdentContext _localctx = new IdentContext(_ctx, getState()); + enterRule(_localctx, 224, RULE_ident); + int _la; + try { + setState(1107); + _errHandler.sync(this); + switch (_input.LA(1)) { + case DOT: + case ID: + enterOuterAlt(_localctx, 1); + { + setState(1101); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DOT) { + { + setState(1100); + match(DOT); + } + } + + setState(1103); + match(ID); + } + break; + case BACKTICK_QUOTE_ID: + enterOuterAlt(_localctx, 2); + { + setState(1104); + match(BACKTICK_QUOTE_ID); + } + break; + case FIRST: + case LAST: + case AVG: + case COUNT: + case MAX: + case MIN: + case SUM: + case FULL: + case D: + case T: + case TS: + case FIELD: + case TYPE: + enterOuterAlt(_localctx, 3); + { + setState(1105); + keywordsCanBeId(); + } + break; + case DATETIME: + case LEFT: + case RIGHT: + case SUBSTRING: + case TRIM: + case MICROSECOND: + case SECOND: + case MINUTE: + case HOUR: + case DAY: + case WEEK: + case MONTH: + case QUARTER: + case YEAR: + case ABS: + case ACOS: + case ADD: + case ADDTIME: + case ASCII: + case ASIN: + case ATAN: + case ATAN2: + case CBRT: + case CEIL: + case CEILING: + case CONCAT: + case CONCAT_WS: + case CONV: + case CONVERT_TZ: + case COS: + case COSH: + case COT: + case CRC32: + case CURDATE: + case CURTIME: + case CURRENT_DATE: + case CURRENT_TIME: + case CURRENT_TIMESTAMP: + case DATE: + case DATE_ADD: + case DATE_FORMAT: + case DATE_SUB: + case DATEDIFF: + case DAYNAME: + case DAYOFMONTH: + case DAYOFWEEK: + case DAYOFYEAR: + case DEGREES: + case DIVIDE: + case E: + case EXP: + case EXPM1: + case FLOOR: + case FROM_DAYS: + case FROM_UNIXTIME: + case IF: + case IFNULL: + case ISNULL: + case LAST_DAY: + case LENGTH: + case LN: + case LOCALTIME: + case LOCALTIMESTAMP: + case LOCATE: + case LOG: + case LOG10: + case LOG2: + case LOWER: + case LTRIM: + case MAKEDATE: + case MAKETIME: + case MODULUS: + case MONTHNAME: + case MULTIPLY: + case NOW: + case NULLIF: + case PERIOD_ADD: + case PERIOD_DIFF: + case PI: + case POW: + case POWER: + case RADIANS: + case RAND: + case REPLACE: + case RINT: + case ROUND: + case RTRIM: + case REVERSE: + case SEC_TO_TIME: + case SIGN: + case SIGNUM: + case SIN: + case SINH: + case SQRT: + case STR_TO_DATE: + case SUBDATE: + case SUBTIME: + case SUBTRACT: + case SYSDATE: + case TAN: + case TIME: + case TIMEDIFF: + case TIME_FORMAT: + case TIME_TO_SEC: + case TIMESTAMP: + case TRUNCATE: + case TO_DAYS: + case TO_SECONDS: + case UNIX_TIMESTAMP: + case UPPER: + case UTC_DATE: + case UTC_TIME: + case UTC_TIMESTAMP: + case DAY_OF_MONTH: + case DAY_OF_YEAR: + case DAY_OF_WEEK: + case HOUR_OF_DAY: + case MINUTE_OF_DAY: + case MINUTE_OF_HOUR: + case MONTH_OF_YEAR: + case NESTED: + case SECOND_OF_MINUTE: + case TYPEOF: + case WEEK_OF_YEAR: + case WEEKOFYEAR: + case WEEKDAY: + case SUBSTR: + case STRCMP: + case ADDDATE: + case YEARWEEK: + case MOD: + enterOuterAlt(_localctx, 4); + { + setState(1106); + scalarFunctionName(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class KeywordsCanBeIdContext extends ParserRuleContext { + public TerminalNode FULL() { return getToken(OpenSearchSQLParser.FULL, 0); } + public TerminalNode FIELD() { return getToken(OpenSearchSQLParser.FIELD, 0); } + public TerminalNode D() { return getToken(OpenSearchSQLParser.D, 0); } + public TerminalNode T() { return getToken(OpenSearchSQLParser.T, 0); } + public TerminalNode TS() { return getToken(OpenSearchSQLParser.TS, 0); } + public TerminalNode COUNT() { return getToken(OpenSearchSQLParser.COUNT, 0); } + public TerminalNode SUM() { return getToken(OpenSearchSQLParser.SUM, 0); } + public TerminalNode AVG() { return getToken(OpenSearchSQLParser.AVG, 0); } + public TerminalNode MAX() { return getToken(OpenSearchSQLParser.MAX, 0); } + public TerminalNode MIN() { return getToken(OpenSearchSQLParser.MIN, 0); } + public TerminalNode FIRST() { return getToken(OpenSearchSQLParser.FIRST, 0); } + public TerminalNode LAST() { return getToken(OpenSearchSQLParser.LAST, 0); } + public TerminalNode TYPE() { return getToken(OpenSearchSQLParser.TYPE, 0); } + public KeywordsCanBeIdContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_keywordsCanBeId; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).enterKeywordsCanBeId(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenSearchSQLParserListener ) ((OpenSearchSQLParserListener)listener).exitKeywordsCanBeId(this); + } + } + + public final KeywordsCanBeIdContext keywordsCanBeId() throws RecognitionException { + KeywordsCanBeIdContext _localctx = new KeywordsCanBeIdContext(_ctx, getState()); + enterRule(_localctx, 226, RULE_keywordsCanBeId); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1109); + _la = _input.LA(1); + if ( !(((((_la - 26)) & ~0x3f) == 0 && ((1L << (_la - 26)) & 18031440939713537L) != 0) || ((((_la - 206)) & ~0x3f) == 0 && ((1L << (_la - 206)) & 16391L) != 0) || _la==TYPE) ) { + _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 boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { + switch (ruleIndex) { + case 45: + return expression_sempred((ExpressionContext)_localctx, predIndex); + case 46: + return predicate_sempred((PredicateContext)_localctx, predIndex); + case 48: + return expressionAtom_sempred((ExpressionAtomContext)_localctx, predIndex); + } + return true; + } + private boolean expression_sempred(ExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 0: + return precpred(_ctx, 3); + case 1: + return precpred(_ctx, 2); + } + return true; + } + private boolean predicate_sempred(PredicateContext _localctx, int predIndex) { + switch (predIndex) { + case 2: + return precpred(_ctx, 6); + case 3: + return precpred(_ctx, 4); + case 4: + return precpred(_ctx, 3); + case 5: + return precpred(_ctx, 2); + case 6: + return precpred(_ctx, 5); + case 7: + return precpred(_ctx, 1); + } + return true; + } + private boolean expressionAtom_sempred(ExpressionAtomContext _localctx, int predIndex) { + switch (predIndex) { + case 8: + return precpred(_ctx, 2); + case 9: + return precpred(_ctx, 1); + } + return true; + } + + public static final String _serializedATN = + "\u0004\u0001\u0160\u0458\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001"+ + "\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004"+ + "\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007"+ + "\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b"+ + "\u0002\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002\u000f\u0007"+ + "\u000f\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002\u0012\u0007"+ + "\u0012\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002\u0015\u0007"+ + "\u0015\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002\u0018\u0007"+ + "\u0018\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002\u001b\u0007"+ + "\u001b\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002\u001e\u0007"+ + "\u001e\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007!\u0002\"\u0007"+ + "\"\u0002#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007&\u0002\'\u0007"+ + "\'\u0002(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007+\u0002,\u0007"+ + ",\u0002-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u00070\u00021\u0007"+ + "1\u00022\u00072\u00023\u00073\u00024\u00074\u00025\u00075\u00026\u0007"+ + "6\u00027\u00077\u00028\u00078\u00029\u00079\u0002:\u0007:\u0002;\u0007"+ + ";\u0002<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002?\u0007?\u0002@\u0007"+ + "@\u0002A\u0007A\u0002B\u0007B\u0002C\u0007C\u0002D\u0007D\u0002E\u0007"+ + "E\u0002F\u0007F\u0002G\u0007G\u0002H\u0007H\u0002I\u0007I\u0002J\u0007"+ + "J\u0002K\u0007K\u0002L\u0007L\u0002M\u0007M\u0002N\u0007N\u0002O\u0007"+ + "O\u0002P\u0007P\u0002Q\u0007Q\u0002R\u0007R\u0002S\u0007S\u0002T\u0007"+ + "T\u0002U\u0007U\u0002V\u0007V\u0002W\u0007W\u0002X\u0007X\u0002Y\u0007"+ + "Y\u0002Z\u0007Z\u0002[\u0007[\u0002\\\u0007\\\u0002]\u0007]\u0002^\u0007"+ + "^\u0002_\u0007_\u0002`\u0007`\u0002a\u0007a\u0002b\u0007b\u0002c\u0007"+ + "c\u0002d\u0007d\u0002e\u0007e\u0002f\u0007f\u0002g\u0007g\u0002h\u0007"+ + "h\u0002i\u0007i\u0002j\u0007j\u0002k\u0007k\u0002l\u0007l\u0002m\u0007"+ + "m\u0002n\u0007n\u0002o\u0007o\u0002p\u0007p\u0002q\u0007q\u0001\u0000"+ + "\u0003\u0000\u00e6\b\u0000\u0001\u0000\u0003\u0000\u00e9\b\u0000\u0001"+ + "\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0003\u0001\u00ef\b\u0001\u0001"+ + "\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0003"+ + "\u0004\u00f7\b\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001"+ + "\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0003\u0006\u0101\b\u0006\u0001"+ + "\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001"+ + "\t\u0001\t\u0003\t\u010c\b\t\u0001\n\u0004\n\u010f\b\n\u000b\n\f\n\u0110"+ + "\u0001\u000b\u0001\u000b\u0003\u000b\u0115\b\u000b\u0001\u000b\u0003\u000b"+ + "\u0118\b\u000b\u0001\f\u0001\f\u0003\f\u011c\b\f\u0001\f\u0001\f\u0001"+ + "\r\u0001\r\u0001\u000e\u0001\u000e\u0003\u000e\u0124\b\u000e\u0001\u000e"+ + "\u0001\u000e\u0005\u000e\u0128\b\u000e\n\u000e\f\u000e\u012b\t\u000e\u0001"+ + "\u000f\u0001\u000f\u0003\u000f\u012f\b\u000f\u0001\u000f\u0003\u000f\u0132"+ + "\b\u000f\u0001\u0010\u0001\u0010\u0001\u0010\u0003\u0010\u0137\b\u0010"+ + "\u0001\u0010\u0003\u0010\u013a\b\u0010\u0001\u0010\u0003\u0010\u013d\b"+ + "\u0010\u0001\u0010\u0003\u0010\u0140\b\u0010\u0001\u0011\u0001\u0011\u0003"+ + "\u0011\u0144\b\u0011\u0001\u0011\u0003\u0011\u0147\b\u0011\u0001\u0011"+ + "\u0001\u0011\u0001\u0011\u0001\u0011\u0003\u0011\u014d\b\u0011\u0001\u0011"+ + "\u0001\u0011\u0003\u0011\u0151\b\u0011\u0001\u0012\u0001\u0012\u0001\u0012"+ + "\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014"+ + "\u0001\u0014\u0005\u0014\u015d\b\u0014\n\u0014\f\u0014\u0160\t\u0014\u0001"+ + "\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0017\u0001"+ + "\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0005\u0017\u016c\b\u0017\n"+ + "\u0017\f\u0017\u016f\t\u0017\u0001\u0018\u0001\u0018\u0003\u0018\u0173"+ + "\b\u0018\u0001\u0018\u0001\u0018\u0003\u0018\u0177\b\u0018\u0001\u0019"+ + "\u0001\u0019\u0001\u0019\u0001\u0019\u0003\u0019\u017d\b\u0019\u0001\u0019"+ + "\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0003\u0019"+ + "\u0185\b\u0019\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001b\u0001\u001b"+ + "\u0001\u001b\u0003\u001b\u018d\b\u001b\u0001\u001b\u0001\u001b\u0003\u001b"+ + "\u0191\b\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0003\u001c\u0196\b"+ + "\u001c\u0001\u001c\u0003\u001c\u0199\b\u001c\u0001\u001c\u0001\u001c\u0001"+ + "\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0005\u001d\u01a2"+ + "\b\u001d\n\u001d\f\u001d\u01a5\t\u001d\u0001\u001e\u0001\u001e\u0003\u001e"+ + "\u01a9\b\u001e\u0001\u001e\u0001\u001e\u0003\u001e\u01ad\b\u001e\u0001"+ + "\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0003\u001e\u01b4"+ + "\b\u001e\u0001\u001f\u0001\u001f\u0001 \u0001 \u0003 \u01ba\b \u0001!"+ + "\u0001!\u0001\"\u0001\"\u0001#\u0001#\u0001$\u0001$\u0001%\u0001%\u0001"+ + "&\u0001&\u0001&\u0003&\u01c9\b&\u0001\'\u0001\'\u0001\'\u0001\'\u0001"+ + "\'\u0001\'\u0001\'\u0003\'\u01d2\b\'\u0001(\u0001(\u0001(\u0001(\u0001"+ + "(\u0001(\u0001(\u0003(\u01db\b(\u0001)\u0001)\u0001)\u0001)\u0001)\u0001"+ + ")\u0001)\u0003)\u01e4\b)\u0001*\u0001*\u0001+\u0001+\u0001+\u0001+\u0001"+ + ",\u0001,\u0001-\u0001-\u0001-\u0001-\u0003-\u01f2\b-\u0001-\u0001-\u0001"+ + "-\u0001-\u0001-\u0001-\u0005-\u01fa\b-\n-\f-\u01fd\t-\u0001.\u0001.\u0001"+ + ".\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0003.\u0208\b.\u0001.\u0001"+ + ".\u0001.\u0001.\u0001.\u0001.\u0001.\u0003.\u0211\b.\u0001.\u0001.\u0001"+ + ".\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0003.\u021d\b.\u0001"+ + ".\u0001.\u0001.\u0001.\u0001.\u0005.\u0224\b.\n.\f.\u0227\t.\u0001/\u0001"+ + "/\u0001/\u0005/\u022c\b/\n/\f/\u022f\t/\u00010\u00010\u00010\u00010\u0001"+ + "0\u00010\u00010\u00010\u00030\u0239\b0\u00010\u00010\u00010\u00010\u0001"+ + "0\u00010\u00050\u0241\b0\n0\f0\u0244\t0\u00011\u00011\u00011\u00011\u0001"+ + "1\u00011\u00011\u00011\u00011\u00011\u00011\u00031\u0251\b1\u00012\u0003"+ + "2\u0254\b2\u00012\u00012\u00013\u00013\u00013\u00013\u00013\u00013\u0001"+ + "3\u00013\u00013\u00013\u00013\u00013\u00013\u00013\u00013\u00033\u0267"+ + "\b3\u00013\u00013\u00013\u00013\u00013\u00013\u00013\u00013\u00013\u0003"+ + "3\u0272\b3\u00014\u00014\u00014\u00014\u00014\u00014\u00014\u00014\u0001"+ + "4\u00015\u00015\u00016\u00016\u00016\u00016\u00016\u00016\u00016\u0001"+ + "7\u00017\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00019\u0001"+ + "9\u0001:\u0001:\u0001;\u0001;\u0003;\u0295\b;\u0001<\u0001<\u0001<\u0001"+ + "<\u0001<\u0005<\u029c\b<\n<\f<\u029f\t<\u0001<\u0001<\u0001=\u0001=\u0001"+ + "=\u0001=\u0001=\u0001=\u0001=\u0001>\u0001>\u0001>\u0001>\u0001>\u0001"+ + ">\u0001>\u0001?\u0001?\u0001?\u0001?\u0001?\u0001?\u0003?\u02b7\b?\u0001"+ + "@\u0001@\u0001@\u0004@\u02bc\b@\u000b@\f@\u02bd\u0001@\u0001@\u0003@\u02c2"+ + "\b@\u0001@\u0001@\u0001@\u0001@\u0004@\u02c8\b@\u000b@\f@\u02c9\u0001"+ + "@\u0001@\u0003@\u02ce\b@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001"+ + "@\u0001@\u0001@\u0003@\u02d9\b@\u0001A\u0001A\u0001A\u0001A\u0001A\u0003"+ + "A\u02e0\bA\u0001B\u0001B\u0001B\u0001B\u0001B\u0003B\u02e7\bB\u0001B\u0001"+ + "B\u0001C\u0001C\u0001C\u0001C\u0001C\u0005C\u02f0\bC\nC\fC\u02f3\tC\u0001"+ + "C\u0001C\u0001D\u0001D\u0001D\u0001D\u0001D\u0001D\u0001D\u0005D\u02fe"+ + "\bD\nD\fD\u0301\tD\u0001D\u0001D\u0001E\u0001E\u0001E\u0001E\u0001E\u0001"+ + "E\u0005E\u030b\bE\nE\fE\u030e\tE\u0001E\u0001E\u0001E\u0001E\u0001E\u0005"+ + "E\u0315\bE\nE\fE\u0318\tE\u0001E\u0001E\u0001E\u0001E\u0001E\u0001E\u0001"+ + "E\u0001E\u0001E\u0005E\u0323\bE\nE\fE\u0326\tE\u0001E\u0001E\u0003E\u032a"+ + "\bE\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0005F\u0333\bF\n"+ + "F\fF\u0336\tF\u0001F\u0001F\u0001G\u0001G\u0001G\u0001G\u0001G\u0001G"+ + "\u0001G\u0005G\u0341\bG\nG\fG\u0344\tG\u0001G\u0001G\u0001H\u0001H\u0001"+ + "H\u0001H\u0001H\u0001H\u0001H\u0001H\u0001H\u0001H\u0003H\u0352\bH\u0001"+ + "I\u0001I\u0001I\u0001I\u0001I\u0001J\u0001J\u0001J\u0001J\u0001J\u0001"+ + "J\u0001J\u0001J\u0001J\u0001J\u0001J\u0001J\u0001J\u0001J\u0001J\u0001"+ + "J\u0003J\u0369\bJ\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0003"+ + "K\u0372\bK\u0001K\u0001K\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001"+ + "M\u0001M\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ + "N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ + "N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0003N\u0399"+ + "\bN\u0001O\u0001O\u0001P\u0001P\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001"+ + "Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001"+ + "Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001"+ + "Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001"+ + "Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001"+ + "Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001"+ + "Q\u0001Q\u0001Q\u0001Q\u0003Q\u03da\bQ\u0001R\u0001R\u0001S\u0001S\u0001"+ + "T\u0001T\u0001U\u0001U\u0001V\u0001V\u0001W\u0001W\u0001X\u0001X\u0001"+ + "Y\u0001Y\u0001Z\u0001Z\u0001[\u0001[\u0001\\\u0001\\\u0001\\\u0005\\\u03f3"+ + "\b\\\n\\\f\\\u03f6\t\\\u0003\\\u03f8\b\\\u0001]\u0001]\u0001^\u0001^\u0001"+ + "^\u0001^\u0001^\u0001^\u0001^\u0001^\u0003^\u0404\b^\u0001_\u0001_\u0001"+ + "_\u0001_\u0001`\u0001`\u0001a\u0001a\u0001b\u0001b\u0001b\u0001b\u0001"+ + "b\u0001b\u0001b\u0001b\u0003b\u0416\bb\u0001c\u0001c\u0001d\u0001d\u0003"+ + "d\u041c\bd\u0001e\u0001e\u0001f\u0001f\u0003f\u0422\bf\u0001g\u0001g\u0001"+ + "h\u0001h\u0001h\u0003h\u0429\bh\u0001i\u0001i\u0001i\u0001i\u0001j\u0001"+ + "j\u0001j\u0001j\u0001j\u0001j\u0001j\u0001j\u0001j\u0001j\u0003j\u0439"+ + "\bj\u0001k\u0001k\u0001l\u0001l\u0001m\u0001m\u0001m\u0001m\u0001n\u0001"+ + "n\u0001o\u0001o\u0001o\u0005o\u0448\bo\no\fo\u044b\to\u0001p\u0003p\u044e"+ + "\bp\u0001p\u0001p\u0001p\u0001p\u0003p\u0454\bp\u0001q\u0001q\u0001q\u0001"+ + "\u0110\u0003Z\\`r\u0000\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014"+ + "\u0016\u0018\u001a\u001c\u001e \"$&(*,.02468:<>@BDFHJLNPRTVXZ\\^`bdfh"+ + "jlnprtvxz|~\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\u0000!\u0002\u0000\u013a\u013a\u015d\u015d\u0002"+ + "\u0000\u0005\u0005\u0014\u0014\u0002\u0000\b\b\u0012\u0012\u0002\u0000"+ + "\u001a\u001a$$\u0001\u0000\u00d3\u00d5\u0002\u0000\u014f\u0151\u0158\u0158"+ + "\u0002\u0000\u0157\u0157\u015e\u015e\u0002\u0000\u0018\u0018;;\u0001\u0000"+ + "\u013b\u013c\u0002\u0000\u0080\u0080\u00ce\u00ce\u0002\u0000\u00c1\u00c1"+ + "\u00cf\u00cf\u0002\u0000\u00c5\u00c5\u00d0\u00d0\u0003\u0000}\u007f\u0099"+ + "\u009a\u00cb\u00cd\u0001\u0000Sf\u0001\u0000\u0138\u013a\u0001\u0000\u0105"+ + "\u0106\u0004\u0000\u0010\u0010\u0080\u0080\u00c1\u00c1\u00c5\u00c5\u0001"+ + "\u0000S[\u0001\u0000\\f\u0001\u0000\u00f8\u00f9\u0001\u0000AL\u0007\u0000"+ + "iimowy\u0089\u0089\u00ae\u00ae\u00b8\u00b9\u00c0\u00c0\u0006\u0000jj\u008a"+ + "\u008a\u00a3\u00a3\u00a5\u00a5\u00be\u00be\u013e\u013e\f\u0000%%66MNl"+ + "lst\u0097\u0097\u009b\u009b\u009f\u00a0\u00b0\u00b0\u00b3\u00b4\u00ca"+ + "\u00ca\u010e\u010f\u0002\u0000\u0093\u0095\u00a7\u00a7\u0001\u0000\u00fe"+ + "\u0100\u0005\u0000))\u00e8\u00ea\u00ed\u00ef\u010c\u010d\u0137\u0137\u0002"+ + "\u0000\u00eb\u00ec\u00f3\u00f5\u0002\u0000\u00e8\u00e9\u00ee\u00ef\u0001"+ + "\u0000\u00f3\u00f4\u0001\u0000\u0112\u0133\u0001\u0000\u0135\u0136\u0007"+ + "\u0000\u001a\u001a$$AEPP\u00ce\u00d0\u00dc\u00dc\u0132\u0132\u04c4\u0000"+ + "\u00e5\u0001\u0000\u0000\u0000\u0002\u00ee\u0001\u0000\u0000\u0000\u0004"+ + "\u00f0\u0001\u0000\u0000\u0000\u0006\u00f2\u0001\u0000\u0000\u0000\b\u00f6"+ + "\u0001\u0000\u0000\u0000\n\u00f8\u0001\u0000\u0000\u0000\f\u00fc\u0001"+ + "\u0000\u0000\u0000\u000e\u0102\u0001\u0000\u0000\u0000\u0010\u0106\u0001"+ + "\u0000\u0000\u0000\u0012\u010b\u0001\u0000\u0000\u0000\u0014\u010e\u0001"+ + "\u0000\u0000\u0000\u0016\u0112\u0001\u0000\u0000\u0000\u0018\u0119\u0001"+ + "\u0000\u0000\u0000\u001a\u011f\u0001\u0000\u0000\u0000\u001c\u0123\u0001"+ + "\u0000\u0000\u0000\u001e\u012c\u0001\u0000\u0000\u0000 \u0133\u0001\u0000"+ + "\u0000\u0000\"\u0150\u0001\u0000\u0000\u0000$\u0152\u0001\u0000\u0000"+ + "\u0000&\u0155\u0001\u0000\u0000\u0000(\u0159\u0001\u0000\u0000\u0000*"+ + "\u0161\u0001\u0000\u0000\u0000,\u0163\u0001\u0000\u0000\u0000.\u0166\u0001"+ + "\u0000\u0000\u00000\u0170\u0001\u0000\u0000\u00002\u0184\u0001\u0000\u0000"+ + "\u00004\u0186\u0001\u0000\u0000\u00006\u0190\u0001\u0000\u0000\u00008"+ + "\u0192\u0001\u0000\u0000\u0000:\u019c\u0001\u0000\u0000\u0000<\u01b3\u0001"+ + "\u0000\u0000\u0000>\u01b5\u0001\u0000\u0000\u0000@\u01b9\u0001\u0000\u0000"+ + "\u0000B\u01bb\u0001\u0000\u0000\u0000D\u01bd\u0001\u0000\u0000\u0000F"+ + "\u01bf\u0001\u0000\u0000\u0000H\u01c1\u0001\u0000\u0000\u0000J\u01c3\u0001"+ + "\u0000\u0000\u0000L\u01c8\u0001\u0000\u0000\u0000N\u01d1\u0001\u0000\u0000"+ + "\u0000P\u01da\u0001\u0000\u0000\u0000R\u01e3\u0001\u0000\u0000\u0000T"+ + "\u01e5\u0001\u0000\u0000\u0000V\u01e7\u0001\u0000\u0000\u0000X\u01eb\u0001"+ + "\u0000\u0000\u0000Z\u01f1\u0001\u0000\u0000\u0000\\\u01fe\u0001\u0000"+ + "\u0000\u0000^\u0228\u0001\u0000\u0000\u0000`\u0238\u0001\u0000\u0000\u0000"+ + "b\u0250\u0001\u0000\u0000\u0000d\u0253\u0001\u0000\u0000\u0000f\u0271"+ + "\u0001\u0000\u0000\u0000h\u0273\u0001\u0000\u0000\u0000j\u027c\u0001\u0000"+ + "\u0000\u0000l\u027e\u0001\u0000\u0000\u0000n\u0285\u0001\u0000\u0000\u0000"+ + "p\u0287\u0001\u0000\u0000\u0000r\u028e\u0001\u0000\u0000\u0000t\u0290"+ + "\u0001\u0000\u0000\u0000v\u0294\u0001\u0000\u0000\u0000x\u0296\u0001\u0000"+ + "\u0000\u0000z\u02a2\u0001\u0000\u0000\u0000|\u02a9\u0001\u0000\u0000\u0000"+ + "~\u02b6\u0001\u0000\u0000\u0000\u0080\u02d8\u0001\u0000\u0000\u0000\u0082"+ + "\u02df\u0001\u0000\u0000\u0000\u0084\u02e1\u0001\u0000\u0000\u0000\u0086"+ + "\u02ea\u0001\u0000\u0000\u0000\u0088\u02f6\u0001\u0000\u0000\u0000\u008a"+ + "\u0329\u0001\u0000\u0000\u0000\u008c\u032b\u0001\u0000\u0000\u0000\u008e"+ + "\u0339\u0001\u0000\u0000\u0000\u0090\u0351\u0001\u0000\u0000\u0000\u0092"+ + "\u0353\u0001\u0000\u0000\u0000\u0094\u0368\u0001\u0000\u0000\u0000\u0096"+ + "\u036a\u0001\u0000\u0000\u0000\u0098\u0375\u0001\u0000\u0000\u0000\u009a"+ + "\u037b\u0001\u0000\u0000\u0000\u009c\u0398\u0001\u0000\u0000\u0000\u009e"+ + "\u039a\u0001\u0000\u0000\u0000\u00a0\u039c\u0001\u0000\u0000\u0000\u00a2"+ + "\u03d9\u0001\u0000\u0000\u0000\u00a4\u03db\u0001\u0000\u0000\u0000\u00a6"+ + "\u03dd\u0001\u0000\u0000\u0000\u00a8\u03df\u0001\u0000\u0000\u0000\u00aa"+ + "\u03e1\u0001\u0000\u0000\u0000\u00ac\u03e3\u0001\u0000\u0000\u0000\u00ae"+ + "\u03e5\u0001\u0000\u0000\u0000\u00b0\u03e7\u0001\u0000\u0000\u0000\u00b2"+ + "\u03e9\u0001\u0000\u0000\u0000\u00b4\u03eb\u0001\u0000\u0000\u0000\u00b6"+ + "\u03ed\u0001\u0000\u0000\u0000\u00b8\u03f7\u0001\u0000\u0000\u0000\u00ba"+ + "\u03f9\u0001\u0000\u0000\u0000\u00bc\u0403\u0001\u0000\u0000\u0000\u00be"+ + "\u0405\u0001\u0000\u0000\u0000\u00c0\u0409\u0001\u0000\u0000\u0000\u00c2"+ + "\u040b\u0001\u0000\u0000\u0000\u00c4\u0415\u0001\u0000\u0000\u0000\u00c6"+ + "\u0417\u0001\u0000\u0000\u0000\u00c8\u041b\u0001\u0000\u0000\u0000\u00ca"+ + "\u041d\u0001\u0000\u0000\u0000\u00cc\u0421\u0001\u0000\u0000\u0000\u00ce"+ + "\u0423\u0001\u0000\u0000\u0000\u00d0\u0428\u0001\u0000\u0000\u0000\u00d2"+ + "\u042a\u0001\u0000\u0000\u0000\u00d4\u0438\u0001\u0000\u0000\u0000\u00d6"+ + "\u043a\u0001\u0000\u0000\u0000\u00d8\u043c\u0001\u0000\u0000\u0000\u00da"+ + "\u043e\u0001\u0000\u0000\u0000\u00dc\u0442\u0001\u0000\u0000\u0000\u00de"+ + "\u0444\u0001\u0000\u0000\u0000\u00e0\u0453\u0001\u0000\u0000\u0000\u00e2"+ + "\u0455\u0001\u0000\u0000\u0000\u00e4\u00e6\u0003\u0002\u0001\u0000\u00e5"+ + "\u00e4\u0001\u0000\u0000\u0000\u00e5\u00e6\u0001\u0000\u0000\u0000\u00e6"+ + "\u00e8\u0001\u0000\u0000\u0000\u00e7\u00e9\u0005\u014d\u0000\u0000\u00e8"+ + "\u00e7\u0001\u0000\u0000\u0000\u00e8\u00e9\u0001\u0000\u0000\u0000\u00e9"+ + "\u00ea\u0001\u0000\u0000\u0000\u00ea\u00eb\u0005\u0000\u0000\u0001\u00eb"+ + "\u0001\u0001\u0000\u0000\u0000\u00ec\u00ef\u0003\u0004\u0002\u0000\u00ed"+ + "\u00ef\u0003\b\u0004\u0000\u00ee\u00ec\u0001\u0000\u0000\u0000\u00ee\u00ed"+ + "\u0001\u0000\u0000\u0000\u00ef\u0003\u0001\u0000\u0000\u0000\u00f0\u00f1"+ + "\u0003\u0006\u0003\u0000\u00f1\u0005\u0001\u0000\u0000\u0000\u00f2\u00f3"+ + "\u0003\u0016\u000b\u0000\u00f3\u0007\u0001\u0000\u0000\u0000\u00f4\u00f7"+ + "\u0003\n\u0005\u0000\u00f5\u00f7\u0003\f\u0006\u0000\u00f6\u00f4\u0001"+ + "\u0000\u0000\u0000\u00f6\u00f5\u0001\u0000\u0000\u0000\u00f7\t\u0001\u0000"+ + "\u0000\u0000\u00f8\u00f9\u00058\u0000\u0000\u00f9\u00fa\u0005g\u0000\u0000"+ + "\u00fa\u00fb\u0003\u0010\b\u0000\u00fb\u000b\u0001\u0000\u0000\u0000\u00fc"+ + "\u00fd\u0005\u0013\u0000\u0000\u00fd\u00fe\u0005g\u0000\u0000\u00fe\u0100"+ + "\u0003\u0010\b\u0000\u00ff\u0101\u0003\u000e\u0007\u0000\u0100\u00ff\u0001"+ + "\u0000\u0000\u0000\u0100\u0101\u0001\u0000\u0000\u0000\u0101\r\u0001\u0000"+ + "\u0000\u0000\u0102\u0103\u0005\u000f\u0000\u0000\u0103\u0104\u0005&\u0000"+ + "\u0000\u0104\u0105\u0003\u0012\t\u0000\u0105\u000f\u0001\u0000\u0000\u0000"+ + "\u0106\u0107\u0005&\u0000\u0000\u0107\u0108\u0003\u0012\t\u0000\u0108"+ + "\u0011\u0001\u0000\u0000\u0000\u0109\u010c\u0003\u0014\n\u0000\u010a\u010c"+ + "\u0003B!\u0000\u010b\u0109\u0001\u0000\u0000\u0000\u010b\u010a\u0001\u0000"+ + "\u0000\u0000\u010c\u0013\u0001\u0000\u0000\u0000\u010d\u010f\u0007\u0000"+ + "\u0000\u0000\u010e\u010d\u0001\u0000\u0000\u0000\u010f\u0110\u0001\u0000"+ + "\u0000\u0000\u0110\u0111\u0001\u0000\u0000\u0000\u0110\u010e\u0001\u0000"+ + "\u0000\u0000\u0111\u0015\u0001\u0000\u0000\u0000\u0112\u0114\u0003\u0018"+ + "\f\u0000\u0113\u0115\u0003 \u0010\u0000\u0114\u0113\u0001\u0000\u0000"+ + "\u0000\u0114\u0115\u0001\u0000\u0000\u0000\u0115\u0117\u0001\u0000\u0000"+ + "\u0000\u0116\u0118\u00032\u0019\u0000\u0117\u0116\u0001\u0000\u0000\u0000"+ + "\u0117\u0118\u0001\u0000\u0000\u0000\u0118\u0017\u0001\u0000\u0000\u0000"+ + "\u0119\u011b\u00057\u0000\u0000\u011a\u011c\u0003\u001a\r\u0000\u011b"+ + "\u011a\u0001\u0000\u0000\u0000\u011b\u011c\u0001\u0000\u0000\u0000\u011c"+ + "\u011d\u0001\u0000\u0000\u0000\u011d\u011e\u0003\u001c\u000e\u0000\u011e"+ + "\u0019\u0001\u0000\u0000\u0000\u011f\u0120\u0007\u0001\u0000\u0000\u0120"+ + "\u001b\u0001\u0000\u0000\u0000\u0121\u0124\u0005\u0138\u0000\u0000\u0122"+ + "\u0124\u0003\u001e\u000f\u0000\u0123\u0121\u0001\u0000\u0000\u0000\u0123"+ + "\u0122\u0001\u0000\u0000\u0000\u0124\u0129\u0001\u0000\u0000\u0000\u0125"+ + "\u0126\u0005\u014c\u0000\u0000\u0126\u0128\u0003\u001e\u000f\u0000\u0127"+ + "\u0125\u0001\u0000\u0000\u0000\u0128\u012b\u0001\u0000\u0000\u0000\u0129"+ + "\u0127\u0001\u0000\u0000\u0000\u0129\u012a\u0001\u0000\u0000\u0000\u012a"+ + "\u001d\u0001\u0000\u0000\u0000\u012b\u0129\u0001\u0000\u0000\u0000\u012c"+ + "\u0131\u0003Z-\u0000\u012d\u012f\u0005\u0007\u0000\u0000\u012e\u012d\u0001"+ + "\u0000\u0000\u0000\u012e\u012f\u0001\u0000\u0000\u0000\u012f\u0130\u0001"+ + "\u0000\u0000\u0000\u0130\u0132\u0003\u00dcn\u0000\u0131\u012e\u0001\u0000"+ + "\u0000\u0000\u0131\u0132\u0001\u0000\u0000\u0000\u0132\u001f\u0001\u0000"+ + "\u0000\u0000\u0133\u0134\u0005\u001b\u0000\u0000\u0134\u0136\u0003\"\u0011"+ + "\u0000\u0135\u0137\u0003$\u0012\u0000\u0136\u0135\u0001\u0000\u0000\u0000"+ + "\u0136\u0137\u0001\u0000\u0000\u0000\u0137\u0139\u0001\u0000\u0000\u0000"+ + "\u0138\u013a\u0003&\u0013\u0000\u0139\u0138\u0001\u0000\u0000\u0000\u0139"+ + "\u013a\u0001\u0000\u0000\u0000\u013a\u013c\u0001\u0000\u0000\u0000\u013b"+ + "\u013d\u0003,\u0016\u0000\u013c\u013b\u0001\u0000\u0000\u0000\u013c\u013d"+ + "\u0001\u0000\u0000\u0000\u013d\u013f\u0001\u0000\u0000\u0000\u013e\u0140"+ + "\u0003.\u0017\u0000\u013f\u013e\u0001\u0000\u0000\u0000\u013f\u0140\u0001"+ + "\u0000\u0000\u0000\u0140!\u0001\u0000\u0000\u0000\u0141\u0146\u0003\u00d6"+ + "k\u0000\u0142\u0144\u0005\u0007\u0000\u0000\u0143\u0142\u0001\u0000\u0000"+ + "\u0000\u0143\u0144\u0001\u0000\u0000\u0000\u0144\u0145\u0001\u0000\u0000"+ + "\u0000\u0145\u0147\u0003\u00dcn\u0000\u0146\u0143\u0001\u0000\u0000\u0000"+ + "\u0146\u0147\u0001\u0000\u0000\u0000\u0147\u0151\u0001\u0000\u0000\u0000"+ + "\u0148\u0149\u0005\u0148\u0000\u0000\u0149\u014a\u0003\u0016\u000b\u0000"+ + "\u014a\u014c\u0005\u0149\u0000\u0000\u014b\u014d\u0005\u0007\u0000\u0000"+ + "\u014c\u014b\u0001\u0000\u0000\u0000\u014c\u014d\u0001\u0000\u0000\u0000"+ + "\u014d\u014e\u0001\u0000\u0000\u0000\u014e\u014f\u0003\u00dcn\u0000\u014f"+ + "\u0151\u0001\u0000\u0000\u0000\u0150\u0141\u0001\u0000\u0000\u0000\u0150"+ + "\u0148\u0001\u0000\u0000\u0000\u0151#\u0001\u0000\u0000\u0000\u0152\u0153"+ + "\u0005?\u0000\u0000\u0153\u0154\u0003Z-\u0000\u0154%\u0001\u0000\u0000"+ + "\u0000\u0155\u0156\u0005\u001c\u0000\u0000\u0156\u0157\u0005\u000b\u0000"+ + "\u0000\u0157\u0158\u0003(\u0014\u0000\u0158\'\u0001\u0000\u0000\u0000"+ + "\u0159\u015e\u0003*\u0015\u0000\u015a\u015b\u0005\u014c\u0000\u0000\u015b"+ + "\u015d\u0003*\u0015\u0000\u015c\u015a\u0001\u0000\u0000\u0000\u015d\u0160"+ + "\u0001\u0000\u0000\u0000\u015e\u015c\u0001\u0000\u0000\u0000\u015e\u015f"+ + "\u0001\u0000\u0000\u0000\u015f)\u0001\u0000\u0000\u0000\u0160\u015e\u0001"+ + "\u0000\u0000\u0000\u0161\u0162\u0003Z-\u0000\u0162+\u0001\u0000\u0000"+ + "\u0000\u0163\u0164\u0005\u001d\u0000\u0000\u0164\u0165\u0003Z-\u0000\u0165"+ + "-\u0001\u0000\u0000\u0000\u0166\u0167\u00051\u0000\u0000\u0167\u0168\u0005"+ + "\u000b\u0000\u0000\u0168\u016d\u00030\u0018\u0000\u0169\u016a\u0005\u014c"+ + "\u0000\u0000\u016a\u016c\u00030\u0018\u0000\u016b\u0169\u0001\u0000\u0000"+ + "\u0000\u016c\u016f\u0001\u0000\u0000\u0000\u016d\u016b\u0001\u0000\u0000"+ + "\u0000\u016d\u016e\u0001\u0000\u0000\u0000\u016e/\u0001\u0000\u0000\u0000"+ + "\u016f\u016d\u0001\u0000\u0000\u0000\u0170\u0172\u0003Z-\u0000\u0171\u0173"+ + "\u0007\u0002\u0000\u0000\u0172\u0171\u0001\u0000\u0000\u0000\u0172\u0173"+ + "\u0001\u0000\u0000\u0000\u0173\u0176\u0001\u0000\u0000\u0000\u0174\u0175"+ + "\u0005.\u0000\u0000\u0175\u0177\u0007\u0003\u0000\u0000\u0176\u0174\u0001"+ + "\u0000\u0000\u0000\u0176\u0177\u0001\u0000\u0000\u0000\u01771\u0001\u0000"+ + "\u0000\u0000\u0178\u017c\u0005\'\u0000\u0000\u0179\u017a\u0003>\u001f"+ + "\u0000\u017a\u017b\u0005\u014c\u0000\u0000\u017b\u017d\u0001\u0000\u0000"+ + "\u0000\u017c\u0179\u0001\u0000\u0000\u0000\u017c\u017d\u0001\u0000\u0000"+ + "\u0000\u017d\u017e\u0001\u0000\u0000\u0000\u017e\u0185\u0003>\u001f\u0000"+ + "\u017f\u0180\u0005\'\u0000\u0000\u0180\u0181\u0003>\u001f\u0000\u0181"+ + "\u0182\u0005Q\u0000\u0000\u0182\u0183\u0003>\u001f\u0000\u0183\u0185\u0001"+ + "\u0000\u0000\u0000\u0184\u0178\u0001\u0000\u0000\u0000\u0184\u017f\u0001"+ + "\u0000\u0000\u0000\u01853\u0001\u0000\u0000\u0000\u0186\u0187\u00036\u001b"+ + "\u0000\u0187\u0188\u00038\u001c\u0000\u01885\u0001\u0000\u0000\u0000\u0189"+ + "\u018a\u0007\u0004\u0000\u0000\u018a\u018c\u0005\u0148\u0000\u0000\u018b"+ + "\u018d\u0003\u00b8\\\u0000\u018c\u018b\u0001\u0000\u0000\u0000\u018c\u018d"+ + "\u0001\u0000\u0000\u0000\u018d\u018e\u0001\u0000\u0000\u0000\u018e\u0191"+ + "\u0005\u0149\u0000\u0000\u018f\u0191\u0003\u0094J\u0000\u0190\u0189\u0001"+ + "\u0000\u0000\u0000\u0190\u018f\u0001\u0000\u0000\u0000\u01917\u0001\u0000"+ + "\u0000\u0000\u0192\u0193\u00053\u0000\u0000\u0193\u0195\u0005\u0148\u0000"+ + "\u0000\u0194\u0196\u0003:\u001d\u0000\u0195\u0194\u0001\u0000\u0000\u0000"+ + "\u0195\u0196\u0001\u0000\u0000\u0000\u0196\u0198\u0001\u0000\u0000\u0000"+ + "\u0197\u0199\u0003.\u0017\u0000\u0198\u0197\u0001\u0000\u0000\u0000\u0198"+ + "\u0199\u0001\u0000\u0000\u0000\u0199\u019a\u0001\u0000\u0000\u0000\u019a"+ + "\u019b\u0005\u0149\u0000\u0000\u019b9\u0001\u0000\u0000\u0000\u019c\u019d"+ + "\u00054\u0000\u0000\u019d\u019e\u0005\u000b\u0000\u0000\u019e\u01a3\u0003"+ + "Z-\u0000\u019f\u01a0\u0005\u014c\u0000\u0000\u01a0\u01a2\u0003Z-\u0000"+ + "\u01a1\u019f\u0001\u0000\u0000\u0000\u01a2\u01a5\u0001\u0000\u0000\u0000"+ + "\u01a3\u01a1\u0001\u0000\u0000\u0000\u01a3\u01a4\u0001\u0000\u0000\u0000"+ + "\u01a4;\u0001\u0000\u0000\u0000\u01a5\u01a3\u0001\u0000\u0000\u0000\u01a6"+ + "\u01b4\u0003B!\u0000\u01a7\u01a9\u0003H$\u0000\u01a8\u01a7\u0001\u0000"+ + "\u0000\u0000\u01a8\u01a9\u0001\u0000\u0000\u0000\u01a9\u01aa\u0001\u0000"+ + "\u0000\u0000\u01aa\u01b4\u0003>\u001f\u0000\u01ab\u01ad\u0003H$\u0000"+ + "\u01ac\u01ab\u0001\u0000\u0000\u0000\u01ac\u01ad\u0001\u0000\u0000\u0000"+ + "\u01ad\u01ae\u0001\u0000\u0000\u0000\u01ae\u01b4\u0003F#\u0000\u01af\u01b4"+ + "\u0003D\"\u0000\u01b0\u01b4\u0003L&\u0000\u01b1\u01b4\u0003V+\u0000\u01b2"+ + "\u01b4\u0003J%\u0000\u01b3\u01a6\u0001\u0000\u0000\u0000\u01b3\u01a8\u0001"+ + "\u0000\u0000\u0000\u01b3\u01ac\u0001\u0000\u0000\u0000\u01b3\u01af\u0001"+ + "\u0000\u0000\u0000\u01b3\u01b0\u0001\u0000\u0000\u0000\u01b3\u01b1\u0001"+ + "\u0000\u0000\u0000\u01b3\u01b2\u0001\u0000\u0000\u0000\u01b4=\u0001\u0000"+ + "\u0000\u0000\u01b5\u01b6\u0007\u0005\u0000\u0000\u01b6?\u0001\u0000\u0000"+ + "\u0000\u01b7\u01ba\u0003>\u001f\u0000\u01b8\u01ba\u0003F#\u0000\u01b9"+ + "\u01b7\u0001\u0000\u0000\u0000\u01b9\u01b8\u0001\u0000\u0000\u0000\u01ba"+ + "A\u0001\u0000\u0000\u0000\u01bb\u01bc\u0007\u0006\u0000\u0000\u01bcC\u0001"+ + "\u0000\u0000\u0000\u01bd\u01be\u0007\u0007\u0000\u0000\u01beE\u0001\u0000"+ + "\u0000\u0000\u01bf\u01c0\u0005\u015a\u0000\u0000\u01c0G\u0001\u0000\u0000"+ + "\u0000\u01c1\u01c2\u0007\b\u0000\u0000\u01c2I\u0001\u0000\u0000\u0000"+ + "\u01c3\u01c4\u0005-\u0000\u0000\u01c4K\u0001\u0000\u0000\u0000\u01c5\u01c9"+ + "\u0003N\'\u0000\u01c6\u01c9\u0003P(\u0000\u01c7\u01c9\u0003R)\u0000\u01c8"+ + "\u01c5\u0001\u0000\u0000\u0000\u01c8\u01c6\u0001\u0000\u0000\u0000\u01c8"+ + "\u01c7\u0001\u0000\u0000\u0000\u01c9M\u0001\u0000\u0000\u0000\u01ca\u01cb"+ + "\u0005\u0080\u0000\u0000\u01cb\u01d2\u0003B!\u0000\u01cc\u01cd\u0005\u00d1"+ + "\u0000\u0000\u01cd\u01ce\u0007\t\u0000\u0000\u01ce\u01cf\u0003B!\u0000"+ + "\u01cf\u01d0\u0005\u00d2\u0000\u0000\u01d0\u01d2\u0001\u0000\u0000\u0000"+ + "\u01d1\u01ca\u0001\u0000\u0000\u0000\u01d1\u01cc\u0001\u0000\u0000\u0000"+ + "\u01d2O\u0001\u0000\u0000\u0000\u01d3\u01d4\u0005\u00c1\u0000\u0000\u01d4"+ + "\u01db\u0003B!\u0000\u01d5\u01d6\u0005\u00d1\u0000\u0000\u01d6\u01d7\u0007"+ + "\n\u0000\u0000\u01d7\u01d8\u0003B!\u0000\u01d8\u01d9\u0005\u00d2\u0000"+ + "\u0000\u01d9\u01db\u0001\u0000\u0000\u0000\u01da\u01d3\u0001\u0000\u0000"+ + "\u0000\u01da\u01d5\u0001\u0000\u0000\u0000\u01dbQ\u0001\u0000\u0000\u0000"+ + "\u01dc\u01dd\u0005\u00c5\u0000\u0000\u01dd\u01e4\u0003B!\u0000\u01de\u01df"+ + "\u0005\u00d1\u0000\u0000\u01df\u01e0\u0007\u000b\u0000\u0000\u01e0\u01e1"+ + "\u0003B!\u0000\u01e1\u01e2\u0005\u00d2\u0000\u0000\u01e2\u01e4\u0001\u0000"+ + "\u0000\u0000\u01e3\u01dc\u0001\u0000\u0000\u0000\u01e3\u01de\u0001\u0000"+ + "\u0000\u0000\u01e4S\u0001\u0000\u0000\u0000\u01e5\u01e6\u0007\f\u0000"+ + "\u0000\u01e6U\u0001\u0000\u0000\u0000\u01e7\u01e8\u0005R\u0000\u0000\u01e8"+ + "\u01e9\u0003Z-\u0000\u01e9\u01ea\u0003X,\u0000\u01eaW\u0001\u0000\u0000"+ + "\u0000\u01eb\u01ec\u0007\r\u0000\u0000\u01ecY\u0001\u0000\u0000\u0000"+ + "\u01ed\u01ee\u0006-\uffff\uffff\u0000\u01ee\u01ef\u0005,\u0000\u0000\u01ef"+ + "\u01f2\u0003Z-\u0004\u01f0\u01f2\u0003\\.\u0000\u01f1\u01ed\u0001\u0000"+ + "\u0000\u0000\u01f1\u01f0\u0001\u0000\u0000\u0000\u01f2\u01fb\u0001\u0000"+ + "\u0000\u0000\u01f3\u01f4\n\u0003\u0000\u0000\u01f4\u01f5\u0005\u0006\u0000"+ + "\u0000\u01f5\u01fa\u0003Z-\u0004\u01f6\u01f7\n\u0002\u0000\u0000\u01f7"+ + "\u01f8\u00050\u0000\u0000\u01f8\u01fa\u0003Z-\u0003\u01f9\u01f3\u0001"+ + "\u0000\u0000\u0000\u01f9\u01f6\u0001\u0000\u0000\u0000\u01fa\u01fd\u0001"+ + "\u0000\u0000\u0000\u01fb\u01f9\u0001\u0000\u0000\u0000\u01fb\u01fc\u0001"+ + "\u0000\u0000\u0000\u01fc[\u0001\u0000\u0000\u0000\u01fd\u01fb\u0001\u0000"+ + "\u0000\u0000\u01fe\u01ff\u0006.\uffff\uffff\u0000\u01ff\u0200\u0003`0"+ + "\u0000\u0200\u0225\u0001\u0000\u0000\u0000\u0201\u0202\n\u0006\u0000\u0000"+ + "\u0202\u0203\u0003b1\u0000\u0203\u0204\u0003\\.\u0007\u0204\u0224\u0001"+ + "\u0000\u0000\u0000\u0205\u0207\n\u0004\u0000\u0000\u0206\u0208\u0005,"+ + "\u0000\u0000\u0207\u0206\u0001\u0000\u0000\u0000\u0207\u0208\u0001\u0000"+ + "\u0000\u0000\u0208\u0209\u0001\u0000\u0000\u0000\u0209\u020a\u0005\n\u0000"+ + "\u0000\u020a\u020b\u0003\\.\u0000\u020b\u020c\u0005\u0006\u0000\u0000"+ + "\u020c\u020d\u0003\\.\u0005\u020d\u0224\u0001\u0000\u0000\u0000\u020e"+ + "\u0210\n\u0003\u0000\u0000\u020f\u0211\u0005,\u0000\u0000\u0210\u020f"+ + "\u0001\u0000\u0000\u0000\u0210\u0211\u0001\u0000\u0000\u0000\u0211\u0212"+ + "\u0001\u0000\u0000\u0000\u0212\u0213\u0005&\u0000\u0000\u0213\u0224\u0003"+ + "\\.\u0004\u0214\u0215\n\u0002\u0000\u0000\u0215\u0216\u00055\u0000\u0000"+ + "\u0216\u0224\u0003\\.\u0003\u0217\u0218\n\u0005\u0000\u0000\u0218\u0219"+ + "\u0005\"\u0000\u0000\u0219\u0224\u0003d2\u0000\u021a\u021c\n\u0001\u0000"+ + "\u0000\u021b\u021d\u0005,\u0000\u0000\u021c\u021b\u0001\u0000\u0000\u0000"+ + "\u021c\u021d\u0001\u0000\u0000\u0000\u021d\u021e\u0001\u0000\u0000\u0000"+ + "\u021e\u021f\u0005\u001e\u0000\u0000\u021f\u0220\u0005\u0148\u0000\u0000"+ + "\u0220\u0221\u0003^/\u0000\u0221\u0222\u0005\u0149\u0000\u0000\u0222\u0224"+ + "\u0001\u0000\u0000\u0000\u0223\u0201\u0001\u0000\u0000\u0000\u0223\u0205"+ + "\u0001\u0000\u0000\u0000\u0223\u020e\u0001\u0000\u0000\u0000\u0223\u0214"+ + "\u0001\u0000\u0000\u0000\u0223\u0217\u0001\u0000\u0000\u0000\u0223\u021a"+ + "\u0001\u0000\u0000\u0000\u0224\u0227\u0001\u0000\u0000\u0000\u0225\u0223"+ + "\u0001\u0000\u0000\u0000\u0225\u0226\u0001\u0000\u0000\u0000\u0226]\u0001"+ + "\u0000\u0000\u0000\u0227\u0225\u0001\u0000\u0000\u0000\u0228\u022d\u0003"+ + "Z-\u0000\u0229\u022a\u0005\u014c\u0000\u0000\u022a\u022c\u0003Z-\u0000"+ + "\u022b\u0229\u0001\u0000\u0000\u0000\u022c\u022f\u0001\u0000\u0000\u0000"+ + "\u022d\u022b\u0001\u0000\u0000\u0000\u022d\u022e\u0001\u0000\u0000\u0000"+ + "\u022e_\u0001\u0000\u0000\u0000\u022f\u022d\u0001\u0000\u0000\u0000\u0230"+ + "\u0231\u00060\uffff\uffff\u0000\u0231\u0239\u0003<\u001e\u0000\u0232\u0239"+ + "\u0003\u00d8l\u0000\u0233\u0239\u0003f3\u0000\u0234\u0235\u0005\u0148"+ + "\u0000\u0000\u0235\u0236\u0003Z-\u0000\u0236\u0237\u0005\u0149\u0000\u0000"+ + "\u0237\u0239\u0001\u0000\u0000\u0000\u0238\u0230\u0001\u0000\u0000\u0000"+ + "\u0238\u0232\u0001\u0000\u0000\u0000\u0238\u0233\u0001\u0000\u0000\u0000"+ + "\u0238\u0234\u0001\u0000\u0000\u0000\u0239\u0242\u0001\u0000\u0000\u0000"+ + "\u023a\u023b\n\u0002\u0000\u0000\u023b\u023c\u0007\u000e\u0000\u0000\u023c"+ + "\u0241\u0003`0\u0003\u023d\u023e\n\u0001\u0000\u0000\u023e\u023f\u0007"+ + "\b\u0000\u0000\u023f\u0241\u0003`0\u0002\u0240\u023a\u0001\u0000\u0000"+ + "\u0000\u0240\u023d\u0001\u0000\u0000\u0000\u0241\u0244\u0001\u0000\u0000"+ + "\u0000\u0242\u0240\u0001\u0000\u0000\u0000\u0242\u0243\u0001\u0000\u0000"+ + "\u0000\u0243a\u0001\u0000\u0000\u0000\u0244\u0242\u0001\u0000\u0000\u0000"+ + "\u0245\u0251\u0005\u013f\u0000\u0000\u0246\u0251\u0005\u0140\u0000\u0000"+ + "\u0247\u0251\u0005\u0141\u0000\u0000\u0248\u0249\u0005\u0141\u0000\u0000"+ + "\u0249\u0251\u0005\u013f\u0000\u0000\u024a\u024b\u0005\u0140\u0000\u0000"+ + "\u024b\u0251\u0005\u013f\u0000\u0000\u024c\u024d\u0005\u0141\u0000\u0000"+ + "\u024d\u0251\u0005\u0140\u0000\u0000\u024e\u024f\u0005\u0142\u0000\u0000"+ + "\u024f\u0251\u0005\u013f\u0000\u0000\u0250\u0245\u0001\u0000\u0000\u0000"+ + "\u0250\u0246\u0001\u0000\u0000\u0000\u0250\u0247\u0001\u0000\u0000\u0000"+ + "\u0250\u0248\u0001\u0000\u0000\u0000\u0250\u024a\u0001\u0000\u0000\u0000"+ + "\u0250\u024c\u0001\u0000\u0000\u0000\u0250\u024e\u0001\u0000\u0000\u0000"+ + "\u0251c\u0001\u0000\u0000\u0000\u0252\u0254\u0005,\u0000\u0000\u0253\u0252"+ + "\u0001\u0000\u0000\u0000\u0253\u0254\u0001\u0000\u0000\u0000\u0254\u0255"+ + "\u0001\u0000\u0000\u0000\u0255\u0256\u0005-\u0000\u0000\u0256e\u0001\u0000"+ + "\u0000\u0000\u0257\u0258\u0003\u00acV\u0000\u0258\u0259\u0005\u0148\u0000"+ + "\u0000\u0259\u025a\u0003\u00dam\u0000\u025a\u025b\u0005\u0149\u0000\u0000"+ + "\u025b\u0272\u0001\u0000\u0000\u0000\u025c\u025d\u0003~?\u0000\u025d\u025e"+ + "\u0005\u0148\u0000\u0000\u025e\u025f\u0003\u00b8\\\u0000\u025f\u0260\u0005"+ + "\u0149\u0000\u0000\u0260\u0272\u0001\u0000\u0000\u0000\u0261\u0272\u0003"+ + "\u0080@\u0000\u0262\u0272\u00034\u001a\u0000\u0263\u0272\u0003\u0094J"+ + "\u0000\u0264\u0266\u0003\u0094J\u0000\u0265\u0267\u0003.\u0017\u0000\u0266"+ + "\u0265\u0001\u0000\u0000\u0000\u0266\u0267\u0001\u0000\u0000\u0000\u0267"+ + "\u0268\u0001\u0000\u0000\u0000\u0268\u0269\u0003\u0098L\u0000\u0269\u0272"+ + "\u0001\u0000\u0000\u0000\u026a\u0272\u0003\u0084B\u0000\u026b\u0272\u0003"+ + "\u0082A\u0000\u026c\u0272\u0003x<\u0000\u026d\u0272\u0003z=\u0000\u026e"+ + "\u0272\u0003p8\u0000\u026f\u0272\u0003l6\u0000\u0270\u0272\u0003h4\u0000"+ + "\u0271\u0257\u0001\u0000\u0000\u0000\u0271\u025c\u0001\u0000\u0000\u0000"+ + "\u0271\u0261\u0001\u0000\u0000\u0000\u0271\u0262\u0001\u0000\u0000\u0000"+ + "\u0271\u0263\u0001\u0000\u0000\u0000\u0271\u0264\u0001\u0000\u0000\u0000"+ + "\u0271\u026a\u0001\u0000\u0000\u0000\u0271\u026b\u0001\u0000\u0000\u0000"+ + "\u0271\u026c\u0001\u0000\u0000\u0000\u0271\u026d\u0001\u0000\u0000\u0000"+ + "\u0271\u026e\u0001\u0000\u0000\u0000\u0271\u026f\u0001\u0000\u0000\u0000"+ + "\u0271\u0270\u0001\u0000\u0000\u0000\u0272g\u0001\u0000\u0000\u0000\u0273"+ + "\u0274\u0003j5\u0000\u0274\u0275\u0005\u0148\u0000\u0000\u0275\u0276\u0003"+ + "r9\u0000\u0276\u0277\u0005\u014c\u0000\u0000\u0277\u0278\u0003\u00ba]"+ + "\u0000\u0278\u0279\u0005\u014c\u0000\u0000\u0279\u027a\u0003\u00ba]\u0000"+ + "\u027a\u027b\u0005\u0149\u0000\u0000\u027bi\u0001\u0000\u0000\u0000\u027c"+ + "\u027d\u0007\u000f\u0000\u0000\u027dk\u0001\u0000\u0000\u0000\u027e\u027f"+ + "\u0005\u0092\u0000\u0000\u027f\u0280\u0005\u0148\u0000\u0000\u0280\u0281"+ + "\u0003n7\u0000\u0281\u0282\u0005\u014c\u0000\u0000\u0282\u0283\u0003\u00ba"+ + "]\u0000\u0283\u0284\u0005\u0149\u0000\u0000\u0284m\u0001\u0000\u0000\u0000"+ + "\u0285\u0286\u0007\u0010\u0000\u0000\u0286o\u0001\u0000\u0000\u0000\u0287"+ + "\u0288\u0005\u008e\u0000\u0000\u0288\u0289\u0005\u0148\u0000\u0000\u0289"+ + "\u028a\u0003v;\u0000\u028a\u028b\u0005\u001b\u0000\u0000\u028b\u028c\u0003"+ + "\u00ba]\u0000\u028c\u028d\u0005\u0149\u0000\u0000\u028dq\u0001\u0000\u0000"+ + "\u0000\u028e\u028f\u0007\u0011\u0000\u0000\u028fs\u0001\u0000\u0000\u0000"+ + "\u0290\u0291\u0007\u0012\u0000\u0000\u0291u\u0001\u0000\u0000\u0000\u0292"+ + "\u0295\u0003r9\u0000\u0293\u0295\u0003t:\u0000\u0294\u0292\u0001\u0000"+ + "\u0000\u0000\u0294\u0293\u0001\u0000\u0000\u0000\u0295w\u0001\u0000\u0000"+ + "\u0000\u0296\u0297\u0005\u0134\u0000\u0000\u0297\u0298\u0005\u0148\u0000"+ + "\u0000\u0298\u029d\u0003\u00c8d\u0000\u0299\u029a\u0005\u014c\u0000\u0000"+ + "\u029a\u029c\u0003\u00be_\u0000\u029b\u0299\u0001\u0000\u0000\u0000\u029c"+ + "\u029f\u0001\u0000\u0000\u0000\u029d\u029b\u0001\u0000\u0000\u0000\u029d"+ + "\u029e\u0001\u0000\u0000\u0000\u029e\u02a0\u0001\u0000\u0000\u0000\u029f"+ + "\u029d\u0001\u0000\u0000\u0000\u02a0\u02a1\u0005\u0149\u0000\u0000\u02a1"+ + "y\u0001\u0000\u0000\u0000\u02a2\u02a3\u0005\u00ab\u0000\u0000\u02a3\u02a4"+ + "\u0005\u0148\u0000\u0000\u02a4\u02a5\u0003\u00ba]\u0000\u02a5\u02a6\u0005"+ + "\u001e\u0000\u0000\u02a6\u02a7\u0003\u00ba]\u0000\u02a7\u02a8\u0005\u0149"+ + "\u0000\u0000\u02a8{\u0001\u0000\u0000\u0000\u02a9\u02aa\u0003\u00c8d\u0000"+ + "\u02aa\u02ab\u0005\u013f\u0000\u0000\u02ab\u02ac\u0005\u00ef\u0000\u0000"+ + "\u02ac\u02ad\u0005\u0148\u0000\u0000\u02ad\u02ae\u0003\u00cae\u0000\u02ae"+ + "\u02af\u0005\u0149\u0000\u0000\u02af}\u0001\u0000\u0000\u0000\u02b0\u02b7"+ + "\u0003\u009cN\u0000\u02b1\u02b7\u0003\u00a2Q\u0000\u02b2\u02b7\u0003\u00a4"+ + "R\u0000\u02b3\u02b7\u0003\u00a6S\u0000\u02b4\u02b7\u0003\u00aaU\u0000"+ + "\u02b5\u02b7\u0003\u00acV\u0000\u02b6\u02b0\u0001\u0000\u0000\u0000\u02b6"+ + "\u02b1\u0001\u0000\u0000\u0000\u02b6\u02b2\u0001\u0000\u0000\u0000\u02b6"+ + "\u02b3\u0001\u0000\u0000\u0000\u02b6\u02b4\u0001\u0000\u0000\u0000\u02b6"+ + "\u02b5\u0001\u0000\u0000\u0000\u02b7\u007f\u0001\u0000\u0000\u0000\u02b8"+ + "\u02b9\u0005\f\u0000\u0000\u02b9\u02bb\u0003Z-\u0000\u02ba\u02bc\u0003"+ + "\u0092I\u0000\u02bb\u02ba\u0001\u0000\u0000\u0000\u02bc\u02bd\u0001\u0000"+ + "\u0000\u0000\u02bd\u02bb\u0001\u0000\u0000\u0000\u02bd\u02be\u0001\u0000"+ + "\u0000\u0000\u02be\u02c1\u0001\u0000\u0000\u0000\u02bf\u02c0\u0005\u0016"+ + "\u0000\u0000\u02c0\u02c2\u0003\u00ba]\u0000\u02c1\u02bf\u0001\u0000\u0000"+ + "\u0000\u02c1\u02c2\u0001\u0000\u0000\u0000\u02c2\u02c3\u0001\u0000\u0000"+ + "\u0000\u02c3\u02c4\u0005O\u0000\u0000\u02c4\u02d9\u0001\u0000\u0000\u0000"+ + "\u02c5\u02c7\u0005\f\u0000\u0000\u02c6\u02c8\u0003\u0092I\u0000\u02c7"+ + "\u02c6\u0001\u0000\u0000\u0000\u02c8\u02c9\u0001\u0000\u0000\u0000\u02c9"+ + "\u02c7\u0001\u0000\u0000\u0000\u02c9\u02ca\u0001\u0000\u0000\u0000\u02ca"+ + "\u02cd\u0001\u0000\u0000\u0000\u02cb\u02cc\u0005\u0016\u0000\u0000\u02cc"+ + "\u02ce\u0003\u00ba]\u0000\u02cd\u02cb\u0001\u0000\u0000\u0000\u02cd\u02ce"+ + "\u0001\u0000\u0000\u0000\u02ce\u02cf\u0001\u0000\u0000\u0000\u02cf\u02d0"+ + "\u0005O\u0000\u0000\u02d0\u02d9\u0001\u0000\u0000\u0000\u02d1\u02d2\u0005"+ + "\r\u0000\u0000\u02d2\u02d3\u0005\u0148\u0000\u0000\u02d3\u02d4\u0003Z"+ + "-\u0000\u02d4\u02d5\u0005\u0007\u0000\u0000\u02d5\u02d6\u0003\u0090H\u0000"+ + "\u02d6\u02d7\u0005\u0149\u0000\u0000\u02d7\u02d9\u0001\u0000\u0000\u0000"+ + "\u02d8\u02b8\u0001\u0000\u0000\u0000\u02d8\u02c5\u0001\u0000\u0000\u0000"+ + "\u02d8\u02d1\u0001\u0000\u0000\u0000\u02d9\u0081\u0001\u0000\u0000\u0000"+ + "\u02da\u02e0\u0003\u0086C\u0000\u02db\u02e0\u0003\u0088D\u0000\u02dc\u02e0"+ + "\u0003\u008aE\u0000\u02dd\u02e0\u0003\u008cF\u0000\u02de\u02e0\u0003\u008e"+ + "G\u0000\u02df\u02da\u0001\u0000\u0000\u0000\u02df\u02db\u0001\u0000\u0000"+ + "\u0000\u02df\u02dc\u0001\u0000\u0000\u0000\u02df\u02dd\u0001\u0000\u0000"+ + "\u0000\u02df\u02de\u0001\u0000\u0000\u0000\u02e0\u0083\u0001\u0000\u0000"+ + "\u0000\u02e1\u02e2\u0003\u00aeW\u0000\u02e2\u02e3\u0005\u0148\u0000\u0000"+ + "\u02e3\u02e6\u0003\u0082A\u0000\u02e4\u02e5\u0005\u014c\u0000\u0000\u02e5"+ + "\u02e7\u0003\u00c6c\u0000\u02e6\u02e4\u0001\u0000\u0000\u0000\u02e6\u02e7"+ + "\u0001\u0000\u0000\u0000\u02e7\u02e8\u0001\u0000\u0000\u0000\u02e8\u02e9"+ + "\u0005\u0149\u0000\u0000\u02e9\u0085\u0001\u0000\u0000\u0000\u02ea\u02eb"+ + "\u0003\u00a8T\u0000\u02eb\u02ec\u0005\u0148\u0000\u0000\u02ec\u02f1\u0003"+ + "\u00cae\u0000\u02ed\u02ee\u0005\u014c\u0000\u0000\u02ee\u02f0\u0003\u00bc"+ + "^\u0000\u02ef\u02ed\u0001\u0000\u0000\u0000\u02f0\u02f3\u0001\u0000\u0000"+ + "\u0000\u02f1\u02ef\u0001\u0000\u0000\u0000\u02f1\u02f2\u0001\u0000\u0000"+ + "\u0000\u02f2\u02f4\u0001\u0000\u0000\u0000\u02f3\u02f1\u0001\u0000\u0000"+ + "\u0000\u02f4\u02f5\u0005\u0149\u0000\u0000\u02f5\u0087\u0001\u0000\u0000"+ + "\u0000\u02f6\u02f7\u0003\u00b0X\u0000\u02f7\u02f8\u0005\u0148\u0000\u0000"+ + "\u02f8\u02f9\u0003\u00c8d\u0000\u02f9\u02fa\u0005\u014c\u0000\u0000\u02fa"+ + "\u02ff\u0003\u00cae\u0000\u02fb\u02fc\u0005\u014c\u0000\u0000\u02fc\u02fe"+ + "\u0003\u00bc^\u0000\u02fd\u02fb\u0001\u0000\u0000\u0000\u02fe\u0301\u0001"+ + "\u0000\u0000\u0000\u02ff\u02fd\u0001\u0000\u0000\u0000\u02ff\u0300\u0001"+ + "\u0000\u0000\u0000\u0300\u0302\u0001\u0000\u0000\u0000\u0301\u02ff\u0001"+ + "\u0000\u0000\u0000\u0302\u0303\u0005\u0149\u0000\u0000\u0303\u0089\u0001"+ + "\u0000\u0000\u0000\u0304\u0305\u0003\u00b2Y\u0000\u0305\u0306\u0005\u0148"+ + "\u0000\u0000\u0306\u0307\u0005\u014a\u0000\u0000\u0307\u030c\u0003\u00c4"+ + "b\u0000\u0308\u0309\u0005\u014c\u0000\u0000\u0309\u030b\u0003\u00c4b\u0000"+ + "\u030a\u0308\u0001\u0000\u0000\u0000\u030b\u030e\u0001\u0000\u0000\u0000"+ + "\u030c\u030a\u0001\u0000\u0000\u0000\u030c\u030d\u0001\u0000\u0000\u0000"+ + "\u030d\u030f\u0001\u0000\u0000\u0000\u030e\u030c\u0001\u0000\u0000\u0000"+ + "\u030f\u0310\u0005\u014b\u0000\u0000\u0310\u0311\u0005\u014c\u0000\u0000"+ + "\u0311\u0316\u0003\u00cae\u0000\u0312\u0313\u0005\u014c\u0000\u0000\u0313"+ + "\u0315\u0003\u00bc^\u0000\u0314\u0312\u0001\u0000\u0000\u0000\u0315\u0318"+ + "\u0001\u0000\u0000\u0000\u0316\u0314\u0001\u0000\u0000\u0000\u0316\u0317"+ + "\u0001\u0000\u0000\u0000\u0317\u0319\u0001\u0000\u0000\u0000\u0318\u0316"+ + "\u0001\u0000\u0000\u0000\u0319\u031a\u0005\u0149\u0000\u0000\u031a\u032a"+ + "\u0001\u0000\u0000\u0000\u031b\u031c\u0003\u00b2Y\u0000\u031c\u031d\u0005"+ + "\u0148\u0000\u0000\u031d\u031e\u0003\u00d2i\u0000\u031e\u031f\u0005\u014c"+ + "\u0000\u0000\u031f\u0324\u0003\u00d4j\u0000\u0320\u0321\u0005\u014c\u0000"+ + "\u0000\u0321\u0323\u0003\u00bc^\u0000\u0322\u0320\u0001\u0000\u0000\u0000"+ + "\u0323\u0326\u0001\u0000\u0000\u0000\u0324\u0322\u0001\u0000\u0000\u0000"+ + "\u0324\u0325\u0001\u0000\u0000\u0000\u0325\u0327\u0001\u0000\u0000\u0000"+ + "\u0326\u0324\u0001\u0000\u0000\u0000\u0327\u0328\u0005\u0149\u0000\u0000"+ + "\u0328\u032a\u0001\u0000\u0000\u0000\u0329\u0304\u0001\u0000\u0000\u0000"+ + "\u0329\u031b\u0001\u0000\u0000\u0000\u032a\u008b\u0001\u0000\u0000\u0000"+ + "\u032b\u032c\u0003\u00c8d\u0000\u032c\u032d\u0005\u013f\u0000\u0000\u032d"+ + "\u032e\u0003\u00b4Z\u0000\u032e\u032f\u0005\u0148\u0000\u0000\u032f\u0334"+ + "\u0003\u00cae\u0000\u0330\u0331\u0005\u014c\u0000\u0000\u0331\u0333\u0003"+ + "\u00bc^\u0000\u0332\u0330\u0001\u0000\u0000\u0000\u0333\u0336\u0001\u0000"+ + "\u0000\u0000\u0334\u0332\u0001\u0000\u0000\u0000\u0334\u0335\u0001\u0000"+ + "\u0000\u0000\u0335\u0337\u0001\u0000\u0000\u0000\u0336\u0334\u0001\u0000"+ + "\u0000\u0000\u0337\u0338\u0005\u0149\u0000\u0000\u0338\u008d\u0001\u0000"+ + "\u0000\u0000\u0339\u033a\u0003\u00c8d\u0000\u033a\u033b\u0005\u013f\u0000"+ + "\u0000\u033b\u033c\u0003\u00b6[\u0000\u033c\u033d\u0005\u0148\u0000\u0000"+ + "\u033d\u0342\u0003\u00cae\u0000\u033e\u033f\u0005\u014c\u0000\u0000\u033f"+ + "\u0341\u0003\u00bc^\u0000\u0340\u033e\u0001\u0000\u0000\u0000\u0341\u0344"+ + "\u0001\u0000\u0000\u0000\u0342\u0340\u0001\u0000\u0000\u0000\u0342\u0343"+ + "\u0001\u0000\u0000\u0000\u0343\u0345\u0001\u0000\u0000\u0000\u0344\u0342"+ + "\u0001\u0000\u0000\u0000\u0345\u0346\u0005\u0149\u0000\u0000\u0346\u008f"+ + "\u0001\u0000\u0000\u0000\u0347\u0352\u0005\u0080\u0000\u0000\u0348\u0352"+ + "\u0005\u00c1\u0000\u0000\u0349\u0352\u0005\u00c5\u0000\u0000\u034a\u0352"+ + "\u0005 \u0000\u0000\u034b\u0352\u0005!\u0000\u0000\u034c\u0352\u0005\u0015"+ + "\u0000\u0000\u034d\u0352\u0005(\u0000\u0000\u034e\u0352\u0005\u0019\u0000"+ + "\u0000\u034f\u0352\u00059\u0000\u0000\u0350\u0352\u0005\t\u0000\u0000"+ + "\u0351\u0347\u0001\u0000\u0000\u0000\u0351\u0348\u0001\u0000\u0000\u0000"+ + "\u0351\u0349\u0001\u0000\u0000\u0000\u0351\u034a\u0001\u0000\u0000\u0000"+ + "\u0351\u034b\u0001\u0000\u0000\u0000\u0351\u034c\u0001\u0000\u0000\u0000"+ + "\u0351\u034d\u0001\u0000\u0000\u0000\u0351\u034e\u0001\u0000\u0000\u0000"+ + "\u0351\u034f\u0001\u0000\u0000\u0000\u0351\u0350\u0001\u0000\u0000\u0000"+ + "\u0352\u0091\u0001\u0000\u0000\u0000\u0353\u0354\u0005>\u0000\u0000\u0354"+ + "\u0355\u0003\u00ba]\u0000\u0355\u0356\u0005:\u0000\u0000\u0356\u0357\u0003"+ + "\u00ba]\u0000\u0357\u0093\u0001\u0000\u0000\u0000\u0358\u0359\u0003\u009a"+ + "M\u0000\u0359\u035a\u0005\u0148\u0000\u0000\u035a\u035b\u0003\u00ba]\u0000"+ + "\u035b\u035c\u0005\u0149\u0000\u0000\u035c\u0369\u0001\u0000\u0000\u0000"+ + "\u035d\u035e\u0005B\u0000\u0000\u035e\u035f\u0005\u0148\u0000\u0000\u035f"+ + "\u0360\u0005\u0138\u0000\u0000\u0360\u0369\u0005\u0149\u0000\u0000\u0361"+ + "\u0362\u0005B\u0000\u0000\u0362\u0363\u0005\u0148\u0000\u0000\u0363\u0364"+ + "\u0005\u0014\u0000\u0000\u0364\u0365\u0003\u00ba]\u0000\u0365\u0366\u0005"+ + "\u0149\u0000\u0000\u0366\u0369\u0001\u0000\u0000\u0000\u0367\u0369\u0003"+ + "\u0096K\u0000\u0368\u0358\u0001\u0000\u0000\u0000\u0368\u035d\u0001\u0000"+ + "\u0000\u0000\u0368\u0361\u0001\u0000\u0000\u0000\u0368\u0367\u0001\u0000"+ + "\u0000\u0000\u0369\u0095\u0001\u0000\u0000\u0000\u036a\u036b\u0007\u0013"+ + "\u0000\u0000\u036b\u036c\u0005\u0148\u0000\u0000\u036c\u036d\u0003\u00ba"+ + "]\u0000\u036d\u036e\u0005\u014c\u0000\u0000\u036e\u0371\u0003@ \u0000"+ + "\u036f\u0370\u0005\u014c\u0000\u0000\u0370\u0372\u0003@ \u0000\u0371\u036f"+ + "\u0001\u0000\u0000\u0000\u0371\u0372\u0001\u0000\u0000\u0000\u0372\u0373"+ + "\u0001\u0000\u0000\u0000\u0373\u0374\u0005\u0149\u0000\u0000\u0374\u0097"+ + "\u0001\u0000\u0000\u0000\u0375\u0376\u0005\u00dd\u0000\u0000\u0376\u0377"+ + "\u0005\u0148\u0000\u0000\u0377\u0378\u0005?\u0000\u0000\u0378\u0379\u0003"+ + "Z-\u0000\u0379\u037a\u0005\u0149\u0000\u0000\u037a\u0099\u0001\u0000\u0000"+ + "\u0000\u037b\u037c\u0007\u0014\u0000\u0000\u037c\u009b\u0001\u0000\u0000"+ + "\u0000\u037d\u0399\u0005h\u0000\u0000\u037e\u0399\u0005p\u0000\u0000\u037f"+ + "\u0399\u0005q\u0000\u0000\u0380\u0399\u0005r\u0000\u0000\u0381\u0399\u0005"+ + "u\u0000\u0000\u0382\u0399\u0005z\u0000\u0000\u0383\u0399\u0005\u008b\u0000"+ + "\u0000\u0384\u0399\u0005\u008c\u0000\u0000\u0385\u0399\u0005\u008d\u0000"+ + "\u0000\u0386\u0399\u0005\u008f\u0000\u0000\u0387\u0399\u0005\u0098\u0000"+ + "\u0000\u0388\u0399\u0005\u009c\u0000\u0000\u0389\u0399\u0005\u009d\u0000"+ + "\u0000\u038a\u0399\u0005\u009e\u0000\u0000\u038b\u0399\u0005\u013e\u0000"+ + "\u0000\u038c\u0399\u0005\u00aa\u0000\u0000\u038d\u0399\u0005\u00ac\u0000"+ + "\u0000\u038e\u0399\u0005\u00ad\u0000\u0000\u038f\u0399\u0005\u00af\u0000"+ + "\u0000\u0390\u0399\u0005\u00b1\u0000\u0000\u0391\u0399\u0005\u00b2\u0000"+ + "\u0000\u0392\u0399\u0005\u00b6\u0000\u0000\u0393\u0399\u0005\u00b7\u0000"+ + "\u0000\u0394\u0399\u0005\u00ba\u0000\u0000\u0395\u0399\u0005\u00c6\u0000"+ + "\u0000\u0396\u0399\u0003\u009eO\u0000\u0397\u0399\u0003\u00a0P\u0000\u0398"+ + "\u037d\u0001\u0000\u0000\u0000\u0398\u037e\u0001\u0000\u0000\u0000\u0398"+ + "\u037f\u0001\u0000\u0000\u0000\u0398\u0380\u0001\u0000\u0000\u0000\u0398"+ + "\u0381\u0001\u0000\u0000\u0000\u0398\u0382\u0001\u0000\u0000\u0000\u0398"+ + "\u0383\u0001\u0000\u0000\u0000\u0398\u0384\u0001\u0000\u0000\u0000\u0398"+ + "\u0385\u0001\u0000\u0000\u0000\u0398\u0386\u0001\u0000\u0000\u0000\u0398"+ + "\u0387\u0001\u0000\u0000\u0000\u0398\u0388\u0001\u0000\u0000\u0000\u0398"+ + "\u0389\u0001\u0000\u0000\u0000\u0398\u038a\u0001\u0000\u0000\u0000\u0398"+ + "\u038b\u0001\u0000\u0000\u0000\u0398\u038c\u0001\u0000\u0000\u0000\u0398"+ + "\u038d\u0001\u0000\u0000\u0000\u0398\u038e\u0001\u0000\u0000\u0000\u0398"+ + "\u038f\u0001\u0000\u0000\u0000\u0398\u0390\u0001\u0000\u0000\u0000\u0398"+ + "\u0391\u0001\u0000\u0000\u0000\u0398\u0392\u0001\u0000\u0000\u0000\u0398"+ + "\u0393\u0001\u0000\u0000\u0000\u0398\u0394\u0001\u0000\u0000\u0000\u0398"+ + "\u0395\u0001\u0000\u0000\u0000\u0398\u0396\u0001\u0000\u0000\u0000\u0398"+ + "\u0397\u0001\u0000\u0000\u0000\u0399\u009d\u0001\u0000\u0000\u0000\u039a"+ + "\u039b\u0007\u0015\u0000\u0000\u039b\u009f\u0001\u0000\u0000\u0000\u039c"+ + "\u039d\u0007\u0016\u0000\u0000\u039d\u00a1\u0001\u0000\u0000\u0000\u039e"+ + "\u03da\u0003T*\u0000\u039f\u03da\u0005\u0110\u0000\u0000\u03a0\u03da\u0005"+ + "k\u0000\u0000\u03a1\u03da\u0005v\u0000\u0000\u03a2\u03da\u0005{\u0000"+ + "\u0000\u03a3\u03da\u0005|\u0000\u0000\u03a4\u03da\u0005\u0080\u0000\u0000"+ + "\u03a5\u03da\u0005\u0081\u0000\u0000\u03a6\u03da\u0005\u0082\u0000\u0000"+ + "\u03a7\u03da\u0005\u0083\u0000\u0000\u03a8\u03da\u0005\u0084\u0000\u0000"+ + "\u03a9\u03da\u0005\u0010\u0000\u0000\u03aa\u03da\u0005W\u0000\u0000\u03ab"+ + "\u03da\u0005\u0085\u0000\u0000\u03ac\u03da\u0005\u0086\u0000\u0000\u03ad"+ + "\u03da\u0005\u00d7\u0000\u0000\u03ae\u03da\u0005\u0087\u0000\u0000\u03af"+ + "\u03da\u0005\u0088\u0000\u0000\u03b0\u03da\u0005\u00d8\u0000\u0000\u03b1"+ + "\u03da\u0005\u00d9\u0000\u0000\u03b2\u03da\u0005\u0090\u0000\u0000\u03b3"+ + "\u03da\u0005\u0091\u0000\u0000\u03b4\u03da\u0005V\u0000\u0000\u03b5\u03da"+ + "\u0005\u00e5\u0000\u0000\u03b6\u03da\u0005\u0096\u0000\u0000\u03b7\u03da"+ + "\u0005\u00a1\u0000\u0000\u03b8\u03da\u0005\u00a2\u0000\u0000\u03b9\u03da"+ + "\u0005S\u0000\u0000\u03ba\u03da\u0005U\u0000\u0000\u03bb\u03da\u0005\u00f0"+ + "\u0000\u0000\u03bc\u03da\u0005\u00f1\u0000\u0000\u03bd\u03da\u0005Y\u0000"+ + "\u0000\u03be\u03da\u0005\u00a4\u0000\u0000\u03bf\u03da\u0005\u00f2\u0000"+ + "\u0000\u03c0\u03da\u0005\u00a6\u0000\u0000\u03c1\u03da\u0005\u00a8\u0000"+ + "\u0000\u03c2\u03da\u0005\u00a9\u0000\u0000\u03c3\u03da\u0005Z\u0000\u0000"+ + "\u03c4\u03da\u0005\u00b5\u0000\u0000\u03c5\u03da\u0005T\u0000\u0000\u03c6"+ + "\u03da\u0005\u0101\u0000\u0000\u03c7\u03da\u0005\u00bc\u0000\u0000\u03c8"+ + "\u03da\u0005\u00bd\u0000\u0000\u03c9\u03da\u0005\u00bf\u0000\u0000\u03ca"+ + "\u03da\u0005\u00bb\u0000\u0000\u03cb\u03da\u0005\u00c1\u0000\u0000\u03cc"+ + "\u03da\u0005\u00c3\u0000\u0000\u03cd\u03da\u0005\u00c4\u0000\u0000\u03ce"+ + "\u03da\u0005\u00c2\u0000\u0000\u03cf\u03da\u0005\u00c5\u0000\u0000\u03d0"+ + "\u03da\u0005\u00c7\u0000\u0000\u03d1\u03da\u0005\u00c8\u0000\u0000\u03d2"+ + "\u03da\u0005\u00c9\u0000\u0000\u03d3\u03da\u0005X\u0000\u0000\u03d4\u03da"+ + "\u0005\u010b\u0000\u0000\u03d5\u03da\u0005\u0109\u0000\u0000\u03d6\u03da"+ + "\u0005\u010a\u0000\u0000\u03d7\u03da\u0005[\u0000\u0000\u03d8\u03da\u0005"+ + "\u0111\u0000\u0000\u03d9\u039e\u0001\u0000\u0000\u0000\u03d9\u039f\u0001"+ + "\u0000\u0000\u0000\u03d9\u03a0\u0001\u0000\u0000\u0000\u03d9\u03a1\u0001"+ + "\u0000\u0000\u0000\u03d9\u03a2\u0001\u0000\u0000\u0000\u03d9\u03a3\u0001"+ + "\u0000\u0000\u0000\u03d9\u03a4\u0001\u0000\u0000\u0000\u03d9\u03a5\u0001"+ + "\u0000\u0000\u0000\u03d9\u03a6\u0001\u0000\u0000\u0000\u03d9\u03a7\u0001"+ + "\u0000\u0000\u0000\u03d9\u03a8\u0001\u0000\u0000\u0000\u03d9\u03a9\u0001"+ + "\u0000\u0000\u0000\u03d9\u03aa\u0001\u0000\u0000\u0000\u03d9\u03ab\u0001"+ + "\u0000\u0000\u0000\u03d9\u03ac\u0001\u0000\u0000\u0000\u03d9\u03ad\u0001"+ + "\u0000\u0000\u0000\u03d9\u03ae\u0001\u0000\u0000\u0000\u03d9\u03af\u0001"+ + "\u0000\u0000\u0000\u03d9\u03b0\u0001\u0000\u0000\u0000\u03d9\u03b1\u0001"+ + "\u0000\u0000\u0000\u03d9\u03b2\u0001\u0000\u0000\u0000\u03d9\u03b3\u0001"+ + "\u0000\u0000\u0000\u03d9\u03b4\u0001\u0000\u0000\u0000\u03d9\u03b5\u0001"+ + "\u0000\u0000\u0000\u03d9\u03b6\u0001\u0000\u0000\u0000\u03d9\u03b7\u0001"+ + "\u0000\u0000\u0000\u03d9\u03b8\u0001\u0000\u0000\u0000\u03d9\u03b9\u0001"+ + "\u0000\u0000\u0000\u03d9\u03ba\u0001\u0000\u0000\u0000\u03d9\u03bb\u0001"+ + "\u0000\u0000\u0000\u03d9\u03bc\u0001\u0000\u0000\u0000\u03d9\u03bd\u0001"+ + "\u0000\u0000\u0000\u03d9\u03be\u0001\u0000\u0000\u0000\u03d9\u03bf\u0001"+ + "\u0000\u0000\u0000\u03d9\u03c0\u0001\u0000\u0000\u0000\u03d9\u03c1\u0001"+ + "\u0000\u0000\u0000\u03d9\u03c2\u0001\u0000\u0000\u0000\u03d9\u03c3\u0001"+ + "\u0000\u0000\u0000\u03d9\u03c4\u0001\u0000\u0000\u0000\u03d9\u03c5\u0001"+ + "\u0000\u0000\u0000\u03d9\u03c6\u0001\u0000\u0000\u0000\u03d9\u03c7\u0001"+ + "\u0000\u0000\u0000\u03d9\u03c8\u0001\u0000\u0000\u0000\u03d9\u03c9\u0001"+ + "\u0000\u0000\u0000\u03d9\u03ca\u0001\u0000\u0000\u0000\u03d9\u03cb\u0001"+ + "\u0000\u0000\u0000\u03d9\u03cc\u0001\u0000\u0000\u0000\u03d9\u03cd\u0001"+ + "\u0000\u0000\u0000\u03d9\u03ce\u0001\u0000\u0000\u0000\u03d9\u03cf\u0001"+ + "\u0000\u0000\u0000\u03d9\u03d0\u0001\u0000\u0000\u0000\u03d9\u03d1\u0001"+ + "\u0000\u0000\u0000\u03d9\u03d2\u0001\u0000\u0000\u0000\u03d9\u03d3\u0001"+ + "\u0000\u0000\u0000\u03d9\u03d4\u0001\u0000\u0000\u0000\u03d9\u03d5\u0001"+ + "\u0000\u0000\u0000\u03d9\u03d6\u0001\u0000\u0000\u0000\u03d9\u03d7\u0001"+ + "\u0000\u0000\u0000\u03d9\u03d8\u0001\u0000\u0000\u0000\u03da\u00a3\u0001"+ + "\u0000\u0000\u0000\u03db\u03dc\u0007\u0017\u0000\u0000\u03dc\u00a5\u0001"+ + "\u0000\u0000\u0000\u03dd\u03de\u0007\u0018\u0000\u0000\u03de\u00a7\u0001"+ + "\u0000\u0000\u0000\u03df\u03e0\u0005\u00fc\u0000\u0000\u03e0\u00a9\u0001"+ + "\u0000\u0000\u0000\u03e1\u03e2\u0005\u0108\u0000\u0000\u03e2\u00ab\u0001"+ + "\u0000\u0000\u0000\u03e3\u03e4\u0005\u00f6\u0000\u0000\u03e4\u00ad\u0001"+ + "\u0000\u0000\u0000\u03e5\u03e6\u0007\u0019\u0000\u0000\u03e6\u00af\u0001"+ + "\u0000\u0000\u0000\u03e7\u03e8\u0007\u001a\u0000\u0000\u03e8\u00b1\u0001"+ + "\u0000\u0000\u0000\u03e9\u03ea\u0007\u001b\u0000\u0000\u03ea\u00b3\u0001"+ + "\u0000\u0000\u0000\u03eb\u03ec\u0007\u001c\u0000\u0000\u03ec\u00b5\u0001"+ + "\u0000\u0000\u0000\u03ed\u03ee\u0007\u001d\u0000\u0000\u03ee\u00b7\u0001"+ + "\u0000\u0000\u0000\u03ef\u03f4\u0003\u00ba]\u0000\u03f0\u03f1\u0005\u014c"+ + "\u0000\u0000\u03f1\u03f3\u0003\u00ba]\u0000\u03f2\u03f0\u0001\u0000\u0000"+ + "\u0000\u03f3\u03f6\u0001\u0000\u0000\u0000\u03f4\u03f2\u0001\u0000\u0000"+ + "\u0000\u03f4\u03f5\u0001\u0000\u0000\u0000\u03f5\u03f8\u0001\u0000\u0000"+ + "\u0000\u03f6\u03f4\u0001\u0000\u0000\u0000\u03f7\u03ef\u0001\u0000\u0000"+ + "\u0000\u03f7\u03f8\u0001\u0000\u0000\u0000\u03f8\u00b9\u0001\u0000\u0000"+ + "\u0000\u03f9\u03fa\u0003Z-\u0000\u03fa\u00bb\u0001\u0000\u0000\u0000\u03fb"+ + "\u03fc\u0003\u00c0`\u0000\u03fc\u03fd\u0005\u013f\u0000\u0000\u03fd\u03fe"+ + "\u0003\u00ccf\u0000\u03fe\u0404\u0001\u0000\u0000\u0000\u03ff\u0400\u0003"+ + "B!\u0000\u0400\u0401\u0005\u013f\u0000\u0000\u0401\u0402\u0003\u00ccf"+ + "\u0000\u0402\u0404\u0001\u0000\u0000\u0000\u0403\u03fb\u0001\u0000\u0000"+ + "\u0000\u0403\u03ff\u0001\u0000\u0000\u0000\u0404\u00bd\u0001\u0000\u0000"+ + "\u0000\u0405\u0406\u0003\u00c2a\u0000\u0406\u0407\u0005\u013f\u0000\u0000"+ + "\u0407\u0408\u0003\u00ceg\u0000\u0408\u00bf\u0001\u0000\u0000\u0000\u0409"+ + "\u040a\u0007\u001e\u0000\u0000\u040a\u00c1\u0001\u0000\u0000\u0000\u040b"+ + "\u040c\u0007\u001f\u0000\u0000\u040c\u00c3\u0001\u0000\u0000\u0000\u040d"+ + "\u0416\u0003\u00c8d\u0000\u040e\u040f\u0003\u00c8d\u0000\u040f\u0410\u0003"+ + "\u00c6c\u0000\u0410\u0416\u0001\u0000\u0000\u0000\u0411\u0412\u0003\u00c8"+ + "d\u0000\u0412\u0413\u0005\u0146\u0000\u0000\u0413\u0414\u0003\u00c6c\u0000"+ + "\u0414\u0416\u0001\u0000\u0000\u0000\u0415\u040d\u0001\u0000\u0000\u0000"+ + "\u0415\u040e\u0001\u0000\u0000\u0000\u0415\u0411\u0001\u0000\u0000\u0000"+ + "\u0416\u00c5\u0001\u0000\u0000\u0000\u0417\u0418\u0003@ \u0000\u0418\u00c7"+ + "\u0001\u0000\u0000\u0000\u0419\u041c\u0003\u00deo\u0000\u041a\u041c\u0003"+ + "B!\u0000\u041b\u0419\u0001\u0000\u0000\u0000\u041b\u041a\u0001\u0000\u0000"+ + "\u0000\u041c\u00c9\u0001\u0000\u0000\u0000\u041d\u041e\u0003\u00ccf\u0000"+ + "\u041e\u00cb\u0001\u0000\u0000\u0000\u041f\u0422\u0003\u00deo\u0000\u0420"+ + "\u0422\u0003<\u001e\u0000\u0421\u041f\u0001\u0000\u0000\u0000\u0421\u0420"+ + "\u0001\u0000\u0000\u0000\u0422\u00cd\u0001\u0000\u0000\u0000\u0423\u0424"+ + "\u0003B!\u0000\u0424\u00cf\u0001\u0000\u0000\u0000\u0425\u0429\u0005\u011d"+ + "\u0000\u0000\u0426\u0429\u0005\u00fc\u0000\u0000\u0427\u0429\u0003B!\u0000"+ + "\u0428\u0425\u0001\u0000\u0000\u0000\u0428\u0426\u0001\u0000\u0000\u0000"+ + "\u0428\u0427\u0001\u0000\u0000\u0000\u0429\u00d1\u0001\u0000\u0000\u0000"+ + "\u042a\u042b\u0003\u00d0h\u0000\u042b\u042c\u0005\u013f\u0000\u0000\u042c"+ + "\u042d\u0003\u00ccf\u0000\u042d\u00d3\u0001\u0000\u0000\u0000\u042e\u042f"+ + "\u0003\u00d0h\u0000\u042f\u0430\u0005\u013f\u0000\u0000\u0430\u0431\u0003"+ + "\u00ccf\u0000\u0431\u0439\u0001\u0000\u0000\u0000\u0432\u0433\u0003\u00d0"+ + "h\u0000\u0433\u0434\u0005\u013f\u0000\u0000\u0434\u0435\u0005\u014a\u0000"+ + "\u0000\u0435\u0436\u0003\u00ccf\u0000\u0436\u0437\u0005\u014b\u0000\u0000"+ + "\u0437\u0439\u0001\u0000\u0000\u0000\u0438\u042e\u0001\u0000\u0000\u0000"+ + "\u0438\u0432\u0001\u0000\u0000\u0000\u0439\u00d5\u0001\u0000\u0000\u0000"+ + "\u043a\u043b\u0003\u00deo\u0000\u043b\u00d7\u0001\u0000\u0000\u0000\u043c"+ + "\u043d\u0003\u00deo\u0000\u043d\u00d9\u0001\u0000\u0000\u0000\u043e\u043f"+ + "\u0003\u00deo\u0000\u043f\u0440\u0005\u0147\u0000\u0000\u0440\u0441\u0005"+ + "\u0138\u0000\u0000\u0441\u00db\u0001\u0000\u0000\u0000\u0442\u0443\u0003"+ + "\u00e0p\u0000\u0443\u00dd\u0001\u0000\u0000\u0000\u0444\u0449\u0003\u00e0"+ + "p\u0000\u0445\u0446\u0005\u0147\u0000\u0000\u0446\u0448\u0003\u00e0p\u0000"+ + "\u0447\u0445\u0001\u0000\u0000\u0000\u0448\u044b\u0001\u0000\u0000\u0000"+ + "\u0449\u0447\u0001\u0000\u0000\u0000\u0449\u044a\u0001\u0000\u0000\u0000"+ + "\u044a\u00df\u0001\u0000\u0000\u0000\u044b\u0449\u0001\u0000\u0000\u0000"+ + "\u044c\u044e\u0005\u0147\u0000\u0000\u044d\u044c\u0001\u0000\u0000\u0000"+ + "\u044d\u044e\u0001\u0000\u0000\u0000\u044e\u044f\u0001\u0000\u0000\u0000"+ + "\u044f\u0454\u0005\u015d\u0000\u0000\u0450\u0454\u0005\u015f\u0000\u0000"+ + "\u0451\u0454\u0003\u00e2q\u0000\u0452\u0454\u0003~?\u0000\u0453\u044d"+ + "\u0001\u0000\u0000\u0000\u0453\u0450\u0001\u0000\u0000\u0000\u0453\u0451"+ + "\u0001\u0000\u0000\u0000\u0453\u0452\u0001\u0000\u0000\u0000\u0454\u00e1"+ + "\u0001\u0000\u0000\u0000\u0455\u0456\u0007 \u0000\u0000\u0456\u00e3\u0001"+ + "\u0000\u0000\u0000[\u00e5\u00e8\u00ee\u00f6\u0100\u010b\u0110\u0114\u0117"+ + "\u011b\u0123\u0129\u012e\u0131\u0136\u0139\u013c\u013f\u0143\u0146\u014c"+ + "\u0150\u015e\u016d\u0172\u0176\u017c\u0184\u018c\u0190\u0195\u0198\u01a3"+ + "\u01a8\u01ac\u01b3\u01b9\u01c8\u01d1\u01da\u01e3\u01f1\u01f9\u01fb\u0207"+ + "\u0210\u021c\u0223\u0225\u022d\u0238\u0240\u0242\u0250\u0253\u0266\u0271"+ + "\u0294\u029d\u02b6\u02bd\u02c1\u02c9\u02cd\u02d8\u02df\u02e6\u02f1\u02ff"+ + "\u030c\u0316\u0324\u0329\u0334\u0342\u0351\u0368\u0371\u0398\u03d9\u03f4"+ + "\u03f7\u0403\u0415\u041b\u0421\u0428\u0438\u0449\u044d\u0453"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLParser.tokens b/src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLParser.tokens new file mode 100644 index 000000000000..80703f8b9ac0 --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLParser.tokens @@ -0,0 +1,689 @@ +SPACE=1 +SPEC_SQL_COMMENT=2 +COMMENT_INPUT=3 +LINE_COMMENT=4 +ALL=5 +AND=6 +AS=7 +ASC=8 +BOOLEAN=9 +BETWEEN=10 +BY=11 +CASE=12 +CAST=13 +CROSS=14 +COLUMNS=15 +DATETIME=16 +DELETE=17 +DESC=18 +DESCRIBE=19 +DISTINCT=20 +DOUBLE=21 +ELSE=22 +EXISTS=23 +FALSE=24 +FLOAT=25 +FIRST=26 +FROM=27 +GROUP=28 +HAVING=29 +IN=30 +INNER=31 +INT=32 +INTEGER=33 +IS=34 +JOIN=35 +LAST=36 +LEFT=37 +LIKE=38 +LIMIT=39 +LONG=40 +MATCH=41 +NATURAL=42 +MISSING_LITERAL=43 +NOT=44 +NULL_LITERAL=45 +NULLS=46 +ON=47 +OR=48 +ORDER=49 +OUTER=50 +OVER=51 +PARTITION=52 +REGEXP=53 +RIGHT=54 +SELECT=55 +SHOW=56 +STRING=57 +THEN=58 +TRUE=59 +UNION=60 +USING=61 +WHEN=62 +WHERE=63 +EXCEPT=64 +AVG=65 +COUNT=66 +MAX=67 +MIN=68 +SUM=69 +VAR_POP=70 +VAR_SAMP=71 +VARIANCE=72 +STD=73 +STDDEV=74 +STDDEV_POP=75 +STDDEV_SAMP=76 +SUBSTRING=77 +TRIM=78 +END=79 +FULL=80 +OFFSET=81 +INTERVAL=82 +MICROSECOND=83 +SECOND=84 +MINUTE=85 +HOUR=86 +DAY=87 +WEEK=88 +MONTH=89 +QUARTER=90 +YEAR=91 +SECOND_MICROSECOND=92 +MINUTE_MICROSECOND=93 +MINUTE_SECOND=94 +HOUR_MICROSECOND=95 +HOUR_SECOND=96 +HOUR_MINUTE=97 +DAY_MICROSECOND=98 +DAY_SECOND=99 +DAY_MINUTE=100 +DAY_HOUR=101 +YEAR_MONTH=102 +TABLES=103 +ABS=104 +ACOS=105 +ADD=106 +ADDTIME=107 +ASCII=108 +ASIN=109 +ATAN=110 +ATAN2=111 +CBRT=112 +CEIL=113 +CEILING=114 +CONCAT=115 +CONCAT_WS=116 +CONV=117 +CONVERT_TZ=118 +COS=119 +COSH=120 +COT=121 +CRC32=122 +CURDATE=123 +CURTIME=124 +CURRENT_DATE=125 +CURRENT_TIME=126 +CURRENT_TIMESTAMP=127 +DATE=128 +DATE_ADD=129 +DATE_FORMAT=130 +DATE_SUB=131 +DATEDIFF=132 +DAYNAME=133 +DAYOFMONTH=134 +DAYOFWEEK=135 +DAYOFYEAR=136 +DEGREES=137 +DIVIDE=138 +E=139 +EXP=140 +EXPM1=141 +EXTRACT=142 +FLOOR=143 +FROM_DAYS=144 +FROM_UNIXTIME=145 +GET_FORMAT=146 +IF=147 +IFNULL=148 +ISNULL=149 +LAST_DAY=150 +LENGTH=151 +LN=152 +LOCALTIME=153 +LOCALTIMESTAMP=154 +LOCATE=155 +LOG=156 +LOG10=157 +LOG2=158 +LOWER=159 +LTRIM=160 +MAKEDATE=161 +MAKETIME=162 +MODULUS=163 +MONTHNAME=164 +MULTIPLY=165 +NOW=166 +NULLIF=167 +PERIOD_ADD=168 +PERIOD_DIFF=169 +PI=170 +POSITION=171 +POW=172 +POWER=173 +RADIANS=174 +RAND=175 +REPLACE=176 +RINT=177 +ROUND=178 +RTRIM=179 +REVERSE=180 +SEC_TO_TIME=181 +SIGN=182 +SIGNUM=183 +SIN=184 +SINH=185 +SQRT=186 +STR_TO_DATE=187 +SUBDATE=188 +SUBTIME=189 +SUBTRACT=190 +SYSDATE=191 +TAN=192 +TIME=193 +TIMEDIFF=194 +TIME_FORMAT=195 +TIME_TO_SEC=196 +TIMESTAMP=197 +TRUNCATE=198 +TO_DAYS=199 +TO_SECONDS=200 +UNIX_TIMESTAMP=201 +UPPER=202 +UTC_DATE=203 +UTC_TIME=204 +UTC_TIMESTAMP=205 +D=206 +T=207 +TS=208 +LEFT_BRACE=209 +RIGHT_BRACE=210 +DENSE_RANK=211 +RANK=212 +ROW_NUMBER=213 +DATE_HISTOGRAM=214 +DAY_OF_MONTH=215 +DAY_OF_YEAR=216 +DAY_OF_WEEK=217 +EXCLUDE=218 +EXTENDED_STATS=219 +FIELD=220 +FILTER=221 +GEO_BOUNDING_BOX=222 +GEO_CELL=223 +GEO_DISTANCE=224 +GEO_DISTANCE_RANGE=225 +GEO_INTERSECTS=226 +GEO_POLYGON=227 +HISTOGRAM=228 +HOUR_OF_DAY=229 +INCLUDE=230 +IN_TERMS=231 +MATCHPHRASE=232 +MATCH_PHRASE=233 +MATCHPHRASEQUERY=234 +SIMPLE_QUERY_STRING=235 +QUERY_STRING=236 +MATCH_PHRASE_PREFIX=237 +MATCHQUERY=238 +MATCH_QUERY=239 +MINUTE_OF_DAY=240 +MINUTE_OF_HOUR=241 +MONTH_OF_YEAR=242 +MULTIMATCH=243 +MULTI_MATCH=244 +MULTIMATCHQUERY=245 +NESTED=246 +PERCENTILES=247 +PERCENTILE=248 +PERCENTILE_APPROX=249 +REGEXP_QUERY=250 +REVERSE_NESTED=251 +QUERY=252 +RANGE=253 +SCORE=254 +SCOREQUERY=255 +SCORE_QUERY=256 +SECOND_OF_MINUTE=257 +STATS=258 +TERM=259 +TERMS=260 +TIMESTAMPADD=261 +TIMESTAMPDIFF=262 +TOPHITS=263 +TYPEOF=264 +WEEK_OF_YEAR=265 +WEEKOFYEAR=266 +WEEKDAY=267 +WILDCARDQUERY=268 +WILDCARD_QUERY=269 +SUBSTR=270 +STRCMP=271 +ADDDATE=272 +YEARWEEK=273 +ALLOW_LEADING_WILDCARD=274 +ANALYZER=275 +ANALYZE_WILDCARD=276 +AUTO_GENERATE_SYNONYMS_PHRASE_QUERY=277 +BOOST=278 +CASE_INSENSITIVE=279 +CUTOFF_FREQUENCY=280 +DEFAULT_FIELD=281 +DEFAULT_OPERATOR=282 +ESCAPE=283 +ENABLE_POSITION_INCREMENTS=284 +FIELDS=285 +FLAGS=286 +FUZZINESS=287 +FUZZY_MAX_EXPANSIONS=288 +FUZZY_PREFIX_LENGTH=289 +FUZZY_REWRITE=290 +FUZZY_TRANSPOSITIONS=291 +LENIENT=292 +LOW_FREQ_OPERATOR=293 +MAX_DETERMINIZED_STATES=294 +MAX_EXPANSIONS=295 +MINIMUM_SHOULD_MATCH=296 +OPERATOR=297 +PHRASE_SLOP=298 +PREFIX_LENGTH=299 +QUOTE_ANALYZER=300 +QUOTE_FIELD_SUFFIX=301 +REWRITE=302 +SLOP=303 +TIE_BREAKER=304 +TIME_ZONE=305 +TYPE=306 +ZERO_TERMS_QUERY=307 +HIGHLIGHT=308 +HIGHLIGHT_PRE_TAGS=309 +HIGHLIGHT_POST_TAGS=310 +MATCH_BOOL_PREFIX=311 +STAR=312 +SLASH=313 +MODULE=314 +PLUS=315 +MINUS=316 +DIV=317 +MOD=318 +EQUAL_SYMBOL=319 +GREATER_SYMBOL=320 +LESS_SYMBOL=321 +EXCLAMATION_SYMBOL=322 +BIT_NOT_OP=323 +BIT_OR_OP=324 +BIT_AND_OP=325 +BIT_XOR_OP=326 +DOT=327 +LR_BRACKET=328 +RR_BRACKET=329 +LT_SQR_PRTHS=330 +RT_SQR_PRTHS=331 +COMMA=332 +SEMI=333 +AT_SIGN=334 +ZERO_DECIMAL=335 +ONE_DECIMAL=336 +TWO_DECIMAL=337 +SINGLE_QUOTE_SYMB=338 +DOUBLE_QUOTE_SYMB=339 +REVERSE_QUOTE_SYMB=340 +COLON_SYMB=341 +START_NATIONAL_STRING_LITERAL=342 +STRING_LITERAL=343 +DECIMAL_LITERAL=344 +HEXADECIMAL_LITERAL=345 +REAL_LITERAL=346 +NULL_SPEC_LITERAL=347 +BIT_STRING=348 +ID=349 +DOUBLE_QUOTE_ID=350 +BACKTICK_QUOTE_ID=351 +ERROR_RECOGNITION=352 +'ALL'=5 +'AND'=6 +'AS'=7 +'ASC'=8 +'BOOLEAN'=9 +'BETWEEN'=10 +'BY'=11 +'CASE'=12 +'CAST'=13 +'CROSS'=14 +'COLUMNS'=15 +'DATETIME'=16 +'DELETE'=17 +'DESC'=18 +'DESCRIBE'=19 +'DISTINCT'=20 +'DOUBLE'=21 +'ELSE'=22 +'EXISTS'=23 +'FALSE'=24 +'FLOAT'=25 +'FIRST'=26 +'FROM'=27 +'GROUP'=28 +'HAVING'=29 +'IN'=30 +'INNER'=31 +'INT'=32 +'INTEGER'=33 +'IS'=34 +'JOIN'=35 +'LAST'=36 +'LEFT'=37 +'LIKE'=38 +'LIMIT'=39 +'LONG'=40 +'MATCH'=41 +'NATURAL'=42 +'MISSING'=43 +'NOT'=44 +'NULL'=45 +'NULLS'=46 +'ON'=47 +'OR'=48 +'ORDER'=49 +'OUTER'=50 +'OVER'=51 +'PARTITION'=52 +'REGEXP'=53 +'RIGHT'=54 +'SELECT'=55 +'SHOW'=56 +'STRING'=57 +'THEN'=58 +'TRUE'=59 +'UNION'=60 +'USING'=61 +'WHEN'=62 +'WHERE'=63 +'MINUS'=64 +'AVG'=65 +'COUNT'=66 +'MAX'=67 +'MIN'=68 +'SUM'=69 +'VAR_POP'=70 +'VAR_SAMP'=71 +'VARIANCE'=72 +'STD'=73 +'STDDEV'=74 +'STDDEV_POP'=75 +'STDDEV_SAMP'=76 +'SUBSTRING'=77 +'TRIM'=78 +'END'=79 +'FULL'=80 +'OFFSET'=81 +'INTERVAL'=82 +'MICROSECOND'=83 +'SECOND'=84 +'MINUTE'=85 +'HOUR'=86 +'DAY'=87 +'WEEK'=88 +'MONTH'=89 +'QUARTER'=90 +'YEAR'=91 +'SECOND_MICROSECOND'=92 +'MINUTE_MICROSECOND'=93 +'MINUTE_SECOND'=94 +'HOUR_MICROSECOND'=95 +'HOUR_SECOND'=96 +'HOUR_MINUTE'=97 +'DAY_MICROSECOND'=98 +'DAY_SECOND'=99 +'DAY_MINUTE'=100 +'DAY_HOUR'=101 +'YEAR_MONTH'=102 +'TABLES'=103 +'ABS'=104 +'ACOS'=105 +'ADD'=106 +'ADDTIME'=107 +'ASCII'=108 +'ASIN'=109 +'ATAN'=110 +'ATAN2'=111 +'CBRT'=112 +'CEIL'=113 +'CEILING'=114 +'CONCAT'=115 +'CONCAT_WS'=116 +'CONV'=117 +'CONVERT_TZ'=118 +'COS'=119 +'COSH'=120 +'COT'=121 +'CRC32'=122 +'CURDATE'=123 +'CURTIME'=124 +'CURRENT_DATE'=125 +'CURRENT_TIME'=126 +'CURRENT_TIMESTAMP'=127 +'DATE'=128 +'DATE_ADD'=129 +'DATE_FORMAT'=130 +'DATE_SUB'=131 +'DATEDIFF'=132 +'DAYNAME'=133 +'DAYOFMONTH'=134 +'DAYOFWEEK'=135 +'DAYOFYEAR'=136 +'DEGREES'=137 +'DIVIDE'=138 +'E'=139 +'EXP'=140 +'EXPM1'=141 +'EXTRACT'=142 +'FLOOR'=143 +'FROM_DAYS'=144 +'FROM_UNIXTIME'=145 +'GET_FORMAT'=146 +'IF'=147 +'IFNULL'=148 +'ISNULL'=149 +'LAST_DAY'=150 +'LENGTH'=151 +'LN'=152 +'LOCALTIME'=153 +'LOCALTIMESTAMP'=154 +'LOCATE'=155 +'LOG'=156 +'LOG10'=157 +'LOG2'=158 +'LOWER'=159 +'LTRIM'=160 +'MAKEDATE'=161 +'MAKETIME'=162 +'MODULUS'=163 +'MONTHNAME'=164 +'MULTIPLY'=165 +'NOW'=166 +'NULLIF'=167 +'PERIOD_ADD'=168 +'PERIOD_DIFF'=169 +'PI'=170 +'POSITION'=171 +'POW'=172 +'POWER'=173 +'RADIANS'=174 +'RAND'=175 +'REPLACE'=176 +'RINT'=177 +'ROUND'=178 +'RTRIM'=179 +'REVERSE'=180 +'SEC_TO_TIME'=181 +'SIGN'=182 +'SIGNUM'=183 +'SIN'=184 +'SINH'=185 +'SQRT'=186 +'STR_TO_DATE'=187 +'SUBDATE'=188 +'SUBTIME'=189 +'SUBTRACT'=190 +'SYSDATE'=191 +'TAN'=192 +'TIME'=193 +'TIMEDIFF'=194 +'TIME_FORMAT'=195 +'TIME_TO_SEC'=196 +'TIMESTAMP'=197 +'TRUNCATE'=198 +'TO_DAYS'=199 +'TO_SECONDS'=200 +'UNIX_TIMESTAMP'=201 +'UPPER'=202 +'UTC_DATE'=203 +'UTC_TIME'=204 +'UTC_TIMESTAMP'=205 +'D'=206 +'T'=207 +'TS'=208 +'{'=209 +'}'=210 +'DENSE_RANK'=211 +'RANK'=212 +'ROW_NUMBER'=213 +'DATE_HISTOGRAM'=214 +'DAY_OF_MONTH'=215 +'DAY_OF_YEAR'=216 +'DAY_OF_WEEK'=217 +'EXCLUDE'=218 +'EXTENDED_STATS'=219 +'FIELD'=220 +'FILTER'=221 +'GEO_BOUNDING_BOX'=222 +'GEO_CELL'=223 +'GEO_DISTANCE'=224 +'GEO_DISTANCE_RANGE'=225 +'GEO_INTERSECTS'=226 +'GEO_POLYGON'=227 +'HISTOGRAM'=228 +'HOUR_OF_DAY'=229 +'INCLUDE'=230 +'IN_TERMS'=231 +'MATCHPHRASE'=232 +'MATCH_PHRASE'=233 +'MATCHPHRASEQUERY'=234 +'SIMPLE_QUERY_STRING'=235 +'QUERY_STRING'=236 +'MATCH_PHRASE_PREFIX'=237 +'MATCHQUERY'=238 +'MATCH_QUERY'=239 +'MINUTE_OF_DAY'=240 +'MINUTE_OF_HOUR'=241 +'MONTH_OF_YEAR'=242 +'MULTIMATCH'=243 +'MULTI_MATCH'=244 +'MULTIMATCHQUERY'=245 +'NESTED'=246 +'PERCENTILES'=247 +'PERCENTILE'=248 +'PERCENTILE_APPROX'=249 +'REGEXP_QUERY'=250 +'REVERSE_NESTED'=251 +'QUERY'=252 +'RANGE'=253 +'SCORE'=254 +'SCOREQUERY'=255 +'SCORE_QUERY'=256 +'SECOND_OF_MINUTE'=257 +'STATS'=258 +'TERM'=259 +'TERMS'=260 +'TIMESTAMPADD'=261 +'TIMESTAMPDIFF'=262 +'TOPHITS'=263 +'TYPEOF'=264 +'WEEK_OF_YEAR'=265 +'WEEKOFYEAR'=266 +'WEEKDAY'=267 +'WILDCARDQUERY'=268 +'WILDCARD_QUERY'=269 +'SUBSTR'=270 +'STRCMP'=271 +'ADDDATE'=272 +'YEARWEEK'=273 +'ALLOW_LEADING_WILDCARD'=274 +'ANALYZER'=275 +'ANALYZE_WILDCARD'=276 +'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY'=277 +'BOOST'=278 +'CASE_INSENSITIVE'=279 +'CUTOFF_FREQUENCY'=280 +'DEFAULT_FIELD'=281 +'DEFAULT_OPERATOR'=282 +'ESCAPE'=283 +'ENABLE_POSITION_INCREMENTS'=284 +'FIELDS'=285 +'FLAGS'=286 +'FUZZINESS'=287 +'FUZZY_MAX_EXPANSIONS'=288 +'FUZZY_PREFIX_LENGTH'=289 +'FUZZY_REWRITE'=290 +'FUZZY_TRANSPOSITIONS'=291 +'LENIENT'=292 +'LOW_FREQ_OPERATOR'=293 +'MAX_DETERMINIZED_STATES'=294 +'MAX_EXPANSIONS'=295 +'MINIMUM_SHOULD_MATCH'=296 +'OPERATOR'=297 +'PHRASE_SLOP'=298 +'PREFIX_LENGTH'=299 +'QUOTE_ANALYZER'=300 +'QUOTE_FIELD_SUFFIX'=301 +'REWRITE'=302 +'SLOP'=303 +'TIE_BREAKER'=304 +'TIME_ZONE'=305 +'TYPE'=306 +'ZERO_TERMS_QUERY'=307 +'HIGHLIGHT'=308 +'PRE_TAGS'=309 +'POST_TAGS'=310 +'MATCH_BOOL_PREFIX'=311 +'*'=312 +'/'=313 +'%'=314 +'+'=315 +'-'=316 +'DIV'=317 +'MOD'=318 +'='=319 +'>'=320 +'<'=321 +'!'=322 +'~'=323 +'|'=324 +'&'=325 +'^'=326 +'.'=327 +'('=328 +')'=329 +'['=330 +']'=331 +','=332 +';'=333 +'@'=334 +'0'=335 +'1'=336 +'2'=337 +'\''=338 +'"'=339 +'`'=340 +':'=341 diff --git a/src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLParserBaseListener.java b/src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLParserBaseListener.java new file mode 100644 index 000000000000..a1e204aa46b0 --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLParserBaseListener.java @@ -0,0 +1,1851 @@ +// Generated from /home/ubuntu/ws/OpenSearch-Dashboards/src/plugins/data/public/antlr/opensearch_sql/grammar/OpenSearchSQLParser.g4 by ANTLR 4.13.1 + +import org.antlr.v4.runtime.ParserRuleContext; +import org.antlr.v4.runtime.tree.ErrorNode; +import org.antlr.v4.runtime.tree.TerminalNode; + +/** + * This class provides an empty implementation of {@link OpenSearchSQLParserListener}, + * which can be extended to create a listener which only needs to handle a subset + * of the available methods. + */ +@SuppressWarnings("CheckReturnValue") +public class OpenSearchSQLParserBaseListener implements OpenSearchSQLParserListener { + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRoot(OpenSearchSQLParser.RootContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRoot(OpenSearchSQLParser.RootContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSqlStatement(OpenSearchSQLParser.SqlStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSqlStatement(OpenSearchSQLParser.SqlStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDmlStatement(OpenSearchSQLParser.DmlStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDmlStatement(OpenSearchSQLParser.DmlStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSimpleSelect(OpenSearchSQLParser.SimpleSelectContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSimpleSelect(OpenSearchSQLParser.SimpleSelectContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAdminStatement(OpenSearchSQLParser.AdminStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAdminStatement(OpenSearchSQLParser.AdminStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShowStatement(OpenSearchSQLParser.ShowStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShowStatement(OpenSearchSQLParser.ShowStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDescribeStatement(OpenSearchSQLParser.DescribeStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDescribeStatement(OpenSearchSQLParser.DescribeStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterColumnFilter(OpenSearchSQLParser.ColumnFilterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitColumnFilter(OpenSearchSQLParser.ColumnFilterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableFilter(OpenSearchSQLParser.TableFilterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableFilter(OpenSearchSQLParser.TableFilterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShowDescribePattern(OpenSearchSQLParser.ShowDescribePatternContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShowDescribePattern(OpenSearchSQLParser.ShowDescribePatternContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCompatibleID(OpenSearchSQLParser.CompatibleIDContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCompatibleID(OpenSearchSQLParser.CompatibleIDContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterQuerySpecification(OpenSearchSQLParser.QuerySpecificationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitQuerySpecification(OpenSearchSQLParser.QuerySpecificationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSelectClause(OpenSearchSQLParser.SelectClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSelectClause(OpenSearchSQLParser.SelectClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSelectSpec(OpenSearchSQLParser.SelectSpecContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSelectSpec(OpenSearchSQLParser.SelectSpecContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSelectElements(OpenSearchSQLParser.SelectElementsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSelectElements(OpenSearchSQLParser.SelectElementsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSelectElement(OpenSearchSQLParser.SelectElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSelectElement(OpenSearchSQLParser.SelectElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFromClause(OpenSearchSQLParser.FromClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFromClause(OpenSearchSQLParser.FromClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableAsRelation(OpenSearchSQLParser.TableAsRelationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableAsRelation(OpenSearchSQLParser.TableAsRelationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSubqueryAsRelation(OpenSearchSQLParser.SubqueryAsRelationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSubqueryAsRelation(OpenSearchSQLParser.SubqueryAsRelationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterWhereClause(OpenSearchSQLParser.WhereClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitWhereClause(OpenSearchSQLParser.WhereClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterGroupByClause(OpenSearchSQLParser.GroupByClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitGroupByClause(OpenSearchSQLParser.GroupByClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterGroupByElements(OpenSearchSQLParser.GroupByElementsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitGroupByElements(OpenSearchSQLParser.GroupByElementsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterGroupByElement(OpenSearchSQLParser.GroupByElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitGroupByElement(OpenSearchSQLParser.GroupByElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterHavingClause(OpenSearchSQLParser.HavingClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitHavingClause(OpenSearchSQLParser.HavingClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterOrderByClause(OpenSearchSQLParser.OrderByClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitOrderByClause(OpenSearchSQLParser.OrderByClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterOrderByElement(OpenSearchSQLParser.OrderByElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitOrderByElement(OpenSearchSQLParser.OrderByElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLimitClause(OpenSearchSQLParser.LimitClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLimitClause(OpenSearchSQLParser.LimitClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterWindowFunctionClause(OpenSearchSQLParser.WindowFunctionClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitWindowFunctionClause(OpenSearchSQLParser.WindowFunctionClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterScalarWindowFunction(OpenSearchSQLParser.ScalarWindowFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitScalarWindowFunction(OpenSearchSQLParser.ScalarWindowFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAggregateWindowFunction(OpenSearchSQLParser.AggregateWindowFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAggregateWindowFunction(OpenSearchSQLParser.AggregateWindowFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterOverClause(OpenSearchSQLParser.OverClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitOverClause(OpenSearchSQLParser.OverClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPartitionByClause(OpenSearchSQLParser.PartitionByClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPartitionByClause(OpenSearchSQLParser.PartitionByClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterString(OpenSearchSQLParser.StringContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitString(OpenSearchSQLParser.StringContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSignedDecimal(OpenSearchSQLParser.SignedDecimalContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSignedDecimal(OpenSearchSQLParser.SignedDecimalContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSignedReal(OpenSearchSQLParser.SignedRealContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSignedReal(OpenSearchSQLParser.SignedRealContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBoolean(OpenSearchSQLParser.BooleanContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBoolean(OpenSearchSQLParser.BooleanContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDatetime(OpenSearchSQLParser.DatetimeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDatetime(OpenSearchSQLParser.DatetimeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterInterval(OpenSearchSQLParser.IntervalContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitInterval(OpenSearchSQLParser.IntervalContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNull(OpenSearchSQLParser.NullContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNull(OpenSearchSQLParser.NullContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDecimalLiteral(OpenSearchSQLParser.DecimalLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDecimalLiteral(OpenSearchSQLParser.DecimalLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNumericLiteral(OpenSearchSQLParser.NumericLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNumericLiteral(OpenSearchSQLParser.NumericLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStringLiteral(OpenSearchSQLParser.StringLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStringLiteral(OpenSearchSQLParser.StringLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBooleanLiteral(OpenSearchSQLParser.BooleanLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBooleanLiteral(OpenSearchSQLParser.BooleanLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRealLiteral(OpenSearchSQLParser.RealLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRealLiteral(OpenSearchSQLParser.RealLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSign(OpenSearchSQLParser.SignContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSign(OpenSearchSQLParser.SignContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNullLiteral(OpenSearchSQLParser.NullLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNullLiteral(OpenSearchSQLParser.NullLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDatetimeLiteral(OpenSearchSQLParser.DatetimeLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDatetimeLiteral(OpenSearchSQLParser.DatetimeLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDateLiteral(OpenSearchSQLParser.DateLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDateLiteral(OpenSearchSQLParser.DateLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTimeLiteral(OpenSearchSQLParser.TimeLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTimeLiteral(OpenSearchSQLParser.TimeLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTimestampLiteral(OpenSearchSQLParser.TimestampLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTimestampLiteral(OpenSearchSQLParser.TimestampLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDatetimeConstantLiteral(OpenSearchSQLParser.DatetimeConstantLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDatetimeConstantLiteral(OpenSearchSQLParser.DatetimeConstantLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIntervalLiteral(OpenSearchSQLParser.IntervalLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIntervalLiteral(OpenSearchSQLParser.IntervalLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIntervalUnit(OpenSearchSQLParser.IntervalUnitContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIntervalUnit(OpenSearchSQLParser.IntervalUnitContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterOrExpression(OpenSearchSQLParser.OrExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitOrExpression(OpenSearchSQLParser.OrExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAndExpression(OpenSearchSQLParser.AndExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAndExpression(OpenSearchSQLParser.AndExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNotExpression(OpenSearchSQLParser.NotExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNotExpression(OpenSearchSQLParser.NotExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPredicateExpression(OpenSearchSQLParser.PredicateExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPredicateExpression(OpenSearchSQLParser.PredicateExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExpressionAtomPredicate(OpenSearchSQLParser.ExpressionAtomPredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExpressionAtomPredicate(OpenSearchSQLParser.ExpressionAtomPredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBinaryComparisonPredicate(OpenSearchSQLParser.BinaryComparisonPredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBinaryComparisonPredicate(OpenSearchSQLParser.BinaryComparisonPredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterInPredicate(OpenSearchSQLParser.InPredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitInPredicate(OpenSearchSQLParser.InPredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBetweenPredicate(OpenSearchSQLParser.BetweenPredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBetweenPredicate(OpenSearchSQLParser.BetweenPredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIsNullPredicate(OpenSearchSQLParser.IsNullPredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIsNullPredicate(OpenSearchSQLParser.IsNullPredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLikePredicate(OpenSearchSQLParser.LikePredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLikePredicate(OpenSearchSQLParser.LikePredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRegexpPredicate(OpenSearchSQLParser.RegexpPredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRegexpPredicate(OpenSearchSQLParser.RegexpPredicateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExpressions(OpenSearchSQLParser.ExpressionsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExpressions(OpenSearchSQLParser.ExpressionsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterConstantExpressionAtom(OpenSearchSQLParser.ConstantExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitConstantExpressionAtom(OpenSearchSQLParser.ConstantExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctionCallExpressionAtom(OpenSearchSQLParser.FunctionCallExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctionCallExpressionAtom(OpenSearchSQLParser.FunctionCallExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFullColumnNameExpressionAtom(OpenSearchSQLParser.FullColumnNameExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFullColumnNameExpressionAtom(OpenSearchSQLParser.FullColumnNameExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNestedExpressionAtom(OpenSearchSQLParser.NestedExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNestedExpressionAtom(OpenSearchSQLParser.NestedExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMathExpressionAtom(OpenSearchSQLParser.MathExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMathExpressionAtom(OpenSearchSQLParser.MathExpressionAtomContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterComparisonOperator(OpenSearchSQLParser.ComparisonOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitComparisonOperator(OpenSearchSQLParser.ComparisonOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNullNotnull(OpenSearchSQLParser.NullNotnullContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNullNotnull(OpenSearchSQLParser.NullNotnullContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNestedAllFunctionCall(OpenSearchSQLParser.NestedAllFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNestedAllFunctionCall(OpenSearchSQLParser.NestedAllFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterScalarFunctionCall(OpenSearchSQLParser.ScalarFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitScalarFunctionCall(OpenSearchSQLParser.ScalarFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSpecificFunctionCall(OpenSearchSQLParser.SpecificFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSpecificFunctionCall(OpenSearchSQLParser.SpecificFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterWindowFunctionCall(OpenSearchSQLParser.WindowFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitWindowFunctionCall(OpenSearchSQLParser.WindowFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAggregateFunctionCall(OpenSearchSQLParser.AggregateFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAggregateFunctionCall(OpenSearchSQLParser.AggregateFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFilteredAggregationFunctionCall(OpenSearchSQLParser.FilteredAggregationFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFilteredAggregationFunctionCall(OpenSearchSQLParser.FilteredAggregationFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterScoreRelevanceFunctionCall(OpenSearchSQLParser.ScoreRelevanceFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitScoreRelevanceFunctionCall(OpenSearchSQLParser.ScoreRelevanceFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRelevanceFunctionCall(OpenSearchSQLParser.RelevanceFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRelevanceFunctionCall(OpenSearchSQLParser.RelevanceFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterHighlightFunctionCall(OpenSearchSQLParser.HighlightFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitHighlightFunctionCall(OpenSearchSQLParser.HighlightFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPositionFunctionCall(OpenSearchSQLParser.PositionFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPositionFunctionCall(OpenSearchSQLParser.PositionFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExtractFunctionCall(OpenSearchSQLParser.ExtractFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExtractFunctionCall(OpenSearchSQLParser.ExtractFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterGetFormatFunctionCall(OpenSearchSQLParser.GetFormatFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitGetFormatFunctionCall(OpenSearchSQLParser.GetFormatFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTimestampFunctionCall(OpenSearchSQLParser.TimestampFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTimestampFunctionCall(OpenSearchSQLParser.TimestampFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTimestampFunction(OpenSearchSQLParser.TimestampFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTimestampFunction(OpenSearchSQLParser.TimestampFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTimestampFunctionName(OpenSearchSQLParser.TimestampFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTimestampFunctionName(OpenSearchSQLParser.TimestampFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterGetFormatFunction(OpenSearchSQLParser.GetFormatFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitGetFormatFunction(OpenSearchSQLParser.GetFormatFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterGetFormatType(OpenSearchSQLParser.GetFormatTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitGetFormatType(OpenSearchSQLParser.GetFormatTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExtractFunction(OpenSearchSQLParser.ExtractFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExtractFunction(OpenSearchSQLParser.ExtractFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSimpleDateTimePart(OpenSearchSQLParser.SimpleDateTimePartContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSimpleDateTimePart(OpenSearchSQLParser.SimpleDateTimePartContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterComplexDateTimePart(OpenSearchSQLParser.ComplexDateTimePartContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitComplexDateTimePart(OpenSearchSQLParser.ComplexDateTimePartContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDatetimePart(OpenSearchSQLParser.DatetimePartContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDatetimePart(OpenSearchSQLParser.DatetimePartContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterHighlightFunction(OpenSearchSQLParser.HighlightFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitHighlightFunction(OpenSearchSQLParser.HighlightFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPositionFunction(OpenSearchSQLParser.PositionFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPositionFunction(OpenSearchSQLParser.PositionFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMatchQueryAltSyntaxFunction(OpenSearchSQLParser.MatchQueryAltSyntaxFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMatchQueryAltSyntaxFunction(OpenSearchSQLParser.MatchQueryAltSyntaxFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterScalarFunctionName(OpenSearchSQLParser.ScalarFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitScalarFunctionName(OpenSearchSQLParser.ScalarFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCaseFunctionCall(OpenSearchSQLParser.CaseFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCaseFunctionCall(OpenSearchSQLParser.CaseFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDataTypeFunctionCall(OpenSearchSQLParser.DataTypeFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDataTypeFunctionCall(OpenSearchSQLParser.DataTypeFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRelevanceFunction(OpenSearchSQLParser.RelevanceFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRelevanceFunction(OpenSearchSQLParser.RelevanceFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterScoreRelevanceFunction(OpenSearchSQLParser.ScoreRelevanceFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitScoreRelevanceFunction(OpenSearchSQLParser.ScoreRelevanceFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNoFieldRelevanceFunction(OpenSearchSQLParser.NoFieldRelevanceFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNoFieldRelevanceFunction(OpenSearchSQLParser.NoFieldRelevanceFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSingleFieldRelevanceFunction(OpenSearchSQLParser.SingleFieldRelevanceFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSingleFieldRelevanceFunction(OpenSearchSQLParser.SingleFieldRelevanceFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMultiFieldRelevanceFunction(OpenSearchSQLParser.MultiFieldRelevanceFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMultiFieldRelevanceFunction(OpenSearchSQLParser.MultiFieldRelevanceFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAltSingleFieldRelevanceFunction(OpenSearchSQLParser.AltSingleFieldRelevanceFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAltSingleFieldRelevanceFunction(OpenSearchSQLParser.AltSingleFieldRelevanceFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAltMultiFieldRelevanceFunction(OpenSearchSQLParser.AltMultiFieldRelevanceFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAltMultiFieldRelevanceFunction(OpenSearchSQLParser.AltMultiFieldRelevanceFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterConvertedDataType(OpenSearchSQLParser.ConvertedDataTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitConvertedDataType(OpenSearchSQLParser.ConvertedDataTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCaseFuncAlternative(OpenSearchSQLParser.CaseFuncAlternativeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCaseFuncAlternative(OpenSearchSQLParser.CaseFuncAlternativeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRegularAggregateFunctionCall(OpenSearchSQLParser.RegularAggregateFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRegularAggregateFunctionCall(OpenSearchSQLParser.RegularAggregateFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCountStarFunctionCall(OpenSearchSQLParser.CountStarFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCountStarFunctionCall(OpenSearchSQLParser.CountStarFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDistinctCountFunctionCall(OpenSearchSQLParser.DistinctCountFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDistinctCountFunctionCall(OpenSearchSQLParser.DistinctCountFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPercentileApproxFunctionCall(OpenSearchSQLParser.PercentileApproxFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPercentileApproxFunctionCall(OpenSearchSQLParser.PercentileApproxFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPercentileApproxFunction(OpenSearchSQLParser.PercentileApproxFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPercentileApproxFunction(OpenSearchSQLParser.PercentileApproxFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFilterClause(OpenSearchSQLParser.FilterClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFilterClause(OpenSearchSQLParser.FilterClauseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAggregationFunctionName(OpenSearchSQLParser.AggregationFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAggregationFunctionName(OpenSearchSQLParser.AggregationFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMathematicalFunctionName(OpenSearchSQLParser.MathematicalFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMathematicalFunctionName(OpenSearchSQLParser.MathematicalFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTrigonometricFunctionName(OpenSearchSQLParser.TrigonometricFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTrigonometricFunctionName(OpenSearchSQLParser.TrigonometricFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterArithmeticFunctionName(OpenSearchSQLParser.ArithmeticFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitArithmeticFunctionName(OpenSearchSQLParser.ArithmeticFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDateTimeFunctionName(OpenSearchSQLParser.DateTimeFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDateTimeFunctionName(OpenSearchSQLParser.DateTimeFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTextFunctionName(OpenSearchSQLParser.TextFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTextFunctionName(OpenSearchSQLParser.TextFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFlowControlFunctionName(OpenSearchSQLParser.FlowControlFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFlowControlFunctionName(OpenSearchSQLParser.FlowControlFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNoFieldRelevanceFunctionName(OpenSearchSQLParser.NoFieldRelevanceFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNoFieldRelevanceFunctionName(OpenSearchSQLParser.NoFieldRelevanceFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSystemFunctionName(OpenSearchSQLParser.SystemFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSystemFunctionName(OpenSearchSQLParser.SystemFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNestedFunctionName(OpenSearchSQLParser.NestedFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNestedFunctionName(OpenSearchSQLParser.NestedFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterScoreRelevanceFunctionName(OpenSearchSQLParser.ScoreRelevanceFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitScoreRelevanceFunctionName(OpenSearchSQLParser.ScoreRelevanceFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSingleFieldRelevanceFunctionName(OpenSearchSQLParser.SingleFieldRelevanceFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSingleFieldRelevanceFunctionName(OpenSearchSQLParser.SingleFieldRelevanceFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMultiFieldRelevanceFunctionName(OpenSearchSQLParser.MultiFieldRelevanceFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMultiFieldRelevanceFunctionName(OpenSearchSQLParser.MultiFieldRelevanceFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAltSingleFieldRelevanceFunctionName(OpenSearchSQLParser.AltSingleFieldRelevanceFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAltSingleFieldRelevanceFunctionName(OpenSearchSQLParser.AltSingleFieldRelevanceFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAltMultiFieldRelevanceFunctionName(OpenSearchSQLParser.AltMultiFieldRelevanceFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAltMultiFieldRelevanceFunctionName(OpenSearchSQLParser.AltMultiFieldRelevanceFunctionNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctionArgs(OpenSearchSQLParser.FunctionArgsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctionArgs(OpenSearchSQLParser.FunctionArgsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctionArg(OpenSearchSQLParser.FunctionArgContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctionArg(OpenSearchSQLParser.FunctionArgContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRelevanceArg(OpenSearchSQLParser.RelevanceArgContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRelevanceArg(OpenSearchSQLParser.RelevanceArgContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterHighlightArg(OpenSearchSQLParser.HighlightArgContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitHighlightArg(OpenSearchSQLParser.HighlightArgContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRelevanceArgName(OpenSearchSQLParser.RelevanceArgNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRelevanceArgName(OpenSearchSQLParser.RelevanceArgNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterHighlightArgName(OpenSearchSQLParser.HighlightArgNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitHighlightArgName(OpenSearchSQLParser.HighlightArgNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRelevanceFieldAndWeight(OpenSearchSQLParser.RelevanceFieldAndWeightContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRelevanceFieldAndWeight(OpenSearchSQLParser.RelevanceFieldAndWeightContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRelevanceFieldWeight(OpenSearchSQLParser.RelevanceFieldWeightContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRelevanceFieldWeight(OpenSearchSQLParser.RelevanceFieldWeightContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRelevanceField(OpenSearchSQLParser.RelevanceFieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRelevanceField(OpenSearchSQLParser.RelevanceFieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRelevanceQuery(OpenSearchSQLParser.RelevanceQueryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRelevanceQuery(OpenSearchSQLParser.RelevanceQueryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRelevanceArgValue(OpenSearchSQLParser.RelevanceArgValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRelevanceArgValue(OpenSearchSQLParser.RelevanceArgValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterHighlightArgValue(OpenSearchSQLParser.HighlightArgValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitHighlightArgValue(OpenSearchSQLParser.HighlightArgValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlternateMultiMatchArgName(OpenSearchSQLParser.AlternateMultiMatchArgNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlternateMultiMatchArgName(OpenSearchSQLParser.AlternateMultiMatchArgNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlternateMultiMatchQuery(OpenSearchSQLParser.AlternateMultiMatchQueryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlternateMultiMatchQuery(OpenSearchSQLParser.AlternateMultiMatchQueryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlternateMultiMatchField(OpenSearchSQLParser.AlternateMultiMatchFieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlternateMultiMatchField(OpenSearchSQLParser.AlternateMultiMatchFieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableName(OpenSearchSQLParser.TableNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableName(OpenSearchSQLParser.TableNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterColumnName(OpenSearchSQLParser.ColumnNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitColumnName(OpenSearchSQLParser.ColumnNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAllTupleFields(OpenSearchSQLParser.AllTupleFieldsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAllTupleFields(OpenSearchSQLParser.AllTupleFieldsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlias(OpenSearchSQLParser.AliasContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlias(OpenSearchSQLParser.AliasContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterQualifiedName(OpenSearchSQLParser.QualifiedNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitQualifiedName(OpenSearchSQLParser.QualifiedNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIdent(OpenSearchSQLParser.IdentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIdent(OpenSearchSQLParser.IdentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterKeywordsCanBeId(OpenSearchSQLParser.KeywordsCanBeIdContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitKeywordsCanBeId(OpenSearchSQLParser.KeywordsCanBeIdContext ctx) { } + + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void visitTerminal(TerminalNode node) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void visitErrorNode(ErrorNode node) { } +} \ No newline at end of file diff --git a/src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLParserListener.java b/src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLParserListener.java new file mode 100644 index 000000000000..d09bc19e746d --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/grammar/.antlr/OpenSearchSQLParserListener.java @@ -0,0 +1,1613 @@ +// Generated from /home/ubuntu/ws/OpenSearch-Dashboards/src/plugins/data/public/antlr/opensearch_sql/grammar/OpenSearchSQLParser.g4 by ANTLR 4.13.1 +import org.antlr.v4.runtime.tree.ParseTreeListener; + +/** + * This interface defines a complete listener for a parse tree produced by + * {@link OpenSearchSQLParser}. + */ +public interface OpenSearchSQLParserListener extends ParseTreeListener { + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#root}. + * @param ctx the parse tree + */ + void enterRoot(OpenSearchSQLParser.RootContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#root}. + * @param ctx the parse tree + */ + void exitRoot(OpenSearchSQLParser.RootContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#sqlStatement}. + * @param ctx the parse tree + */ + void enterSqlStatement(OpenSearchSQLParser.SqlStatementContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#sqlStatement}. + * @param ctx the parse tree + */ + void exitSqlStatement(OpenSearchSQLParser.SqlStatementContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#dmlStatement}. + * @param ctx the parse tree + */ + void enterDmlStatement(OpenSearchSQLParser.DmlStatementContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#dmlStatement}. + * @param ctx the parse tree + */ + void exitDmlStatement(OpenSearchSQLParser.DmlStatementContext ctx); + /** + * Enter a parse tree produced by the {@code simpleSelect} + * labeled alternative in {@link OpenSearchSQLParser#selectStatement}. + * @param ctx the parse tree + */ + void enterSimpleSelect(OpenSearchSQLParser.SimpleSelectContext ctx); + /** + * Exit a parse tree produced by the {@code simpleSelect} + * labeled alternative in {@link OpenSearchSQLParser#selectStatement}. + * @param ctx the parse tree + */ + void exitSimpleSelect(OpenSearchSQLParser.SimpleSelectContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#adminStatement}. + * @param ctx the parse tree + */ + void enterAdminStatement(OpenSearchSQLParser.AdminStatementContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#adminStatement}. + * @param ctx the parse tree + */ + void exitAdminStatement(OpenSearchSQLParser.AdminStatementContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#showStatement}. + * @param ctx the parse tree + */ + void enterShowStatement(OpenSearchSQLParser.ShowStatementContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#showStatement}. + * @param ctx the parse tree + */ + void exitShowStatement(OpenSearchSQLParser.ShowStatementContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#describeStatement}. + * @param ctx the parse tree + */ + void enterDescribeStatement(OpenSearchSQLParser.DescribeStatementContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#describeStatement}. + * @param ctx the parse tree + */ + void exitDescribeStatement(OpenSearchSQLParser.DescribeStatementContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#columnFilter}. + * @param ctx the parse tree + */ + void enterColumnFilter(OpenSearchSQLParser.ColumnFilterContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#columnFilter}. + * @param ctx the parse tree + */ + void exitColumnFilter(OpenSearchSQLParser.ColumnFilterContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#tableFilter}. + * @param ctx the parse tree + */ + void enterTableFilter(OpenSearchSQLParser.TableFilterContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#tableFilter}. + * @param ctx the parse tree + */ + void exitTableFilter(OpenSearchSQLParser.TableFilterContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#showDescribePattern}. + * @param ctx the parse tree + */ + void enterShowDescribePattern(OpenSearchSQLParser.ShowDescribePatternContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#showDescribePattern}. + * @param ctx the parse tree + */ + void exitShowDescribePattern(OpenSearchSQLParser.ShowDescribePatternContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#compatibleID}. + * @param ctx the parse tree + */ + void enterCompatibleID(OpenSearchSQLParser.CompatibleIDContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#compatibleID}. + * @param ctx the parse tree + */ + void exitCompatibleID(OpenSearchSQLParser.CompatibleIDContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#querySpecification}. + * @param ctx the parse tree + */ + void enterQuerySpecification(OpenSearchSQLParser.QuerySpecificationContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#querySpecification}. + * @param ctx the parse tree + */ + void exitQuerySpecification(OpenSearchSQLParser.QuerySpecificationContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#selectClause}. + * @param ctx the parse tree + */ + void enterSelectClause(OpenSearchSQLParser.SelectClauseContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#selectClause}. + * @param ctx the parse tree + */ + void exitSelectClause(OpenSearchSQLParser.SelectClauseContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#selectSpec}. + * @param ctx the parse tree + */ + void enterSelectSpec(OpenSearchSQLParser.SelectSpecContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#selectSpec}. + * @param ctx the parse tree + */ + void exitSelectSpec(OpenSearchSQLParser.SelectSpecContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#selectElements}. + * @param ctx the parse tree + */ + void enterSelectElements(OpenSearchSQLParser.SelectElementsContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#selectElements}. + * @param ctx the parse tree + */ + void exitSelectElements(OpenSearchSQLParser.SelectElementsContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#selectElement}. + * @param ctx the parse tree + */ + void enterSelectElement(OpenSearchSQLParser.SelectElementContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#selectElement}. + * @param ctx the parse tree + */ + void exitSelectElement(OpenSearchSQLParser.SelectElementContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#fromClause}. + * @param ctx the parse tree + */ + void enterFromClause(OpenSearchSQLParser.FromClauseContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#fromClause}. + * @param ctx the parse tree + */ + void exitFromClause(OpenSearchSQLParser.FromClauseContext ctx); + /** + * Enter a parse tree produced by the {@code tableAsRelation} + * labeled alternative in {@link OpenSearchSQLParser#relation}. + * @param ctx the parse tree + */ + void enterTableAsRelation(OpenSearchSQLParser.TableAsRelationContext ctx); + /** + * Exit a parse tree produced by the {@code tableAsRelation} + * labeled alternative in {@link OpenSearchSQLParser#relation}. + * @param ctx the parse tree + */ + void exitTableAsRelation(OpenSearchSQLParser.TableAsRelationContext ctx); + /** + * Enter a parse tree produced by the {@code subqueryAsRelation} + * labeled alternative in {@link OpenSearchSQLParser#relation}. + * @param ctx the parse tree + */ + void enterSubqueryAsRelation(OpenSearchSQLParser.SubqueryAsRelationContext ctx); + /** + * Exit a parse tree produced by the {@code subqueryAsRelation} + * labeled alternative in {@link OpenSearchSQLParser#relation}. + * @param ctx the parse tree + */ + void exitSubqueryAsRelation(OpenSearchSQLParser.SubqueryAsRelationContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#whereClause}. + * @param ctx the parse tree + */ + void enterWhereClause(OpenSearchSQLParser.WhereClauseContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#whereClause}. + * @param ctx the parse tree + */ + void exitWhereClause(OpenSearchSQLParser.WhereClauseContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#groupByClause}. + * @param ctx the parse tree + */ + void enterGroupByClause(OpenSearchSQLParser.GroupByClauseContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#groupByClause}. + * @param ctx the parse tree + */ + void exitGroupByClause(OpenSearchSQLParser.GroupByClauseContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#groupByElements}. + * @param ctx the parse tree + */ + void enterGroupByElements(OpenSearchSQLParser.GroupByElementsContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#groupByElements}. + * @param ctx the parse tree + */ + void exitGroupByElements(OpenSearchSQLParser.GroupByElementsContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#groupByElement}. + * @param ctx the parse tree + */ + void enterGroupByElement(OpenSearchSQLParser.GroupByElementContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#groupByElement}. + * @param ctx the parse tree + */ + void exitGroupByElement(OpenSearchSQLParser.GroupByElementContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#havingClause}. + * @param ctx the parse tree + */ + void enterHavingClause(OpenSearchSQLParser.HavingClauseContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#havingClause}. + * @param ctx the parse tree + */ + void exitHavingClause(OpenSearchSQLParser.HavingClauseContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#orderByClause}. + * @param ctx the parse tree + */ + void enterOrderByClause(OpenSearchSQLParser.OrderByClauseContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#orderByClause}. + * @param ctx the parse tree + */ + void exitOrderByClause(OpenSearchSQLParser.OrderByClauseContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#orderByElement}. + * @param ctx the parse tree + */ + void enterOrderByElement(OpenSearchSQLParser.OrderByElementContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#orderByElement}. + * @param ctx the parse tree + */ + void exitOrderByElement(OpenSearchSQLParser.OrderByElementContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#limitClause}. + * @param ctx the parse tree + */ + void enterLimitClause(OpenSearchSQLParser.LimitClauseContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#limitClause}. + * @param ctx the parse tree + */ + void exitLimitClause(OpenSearchSQLParser.LimitClauseContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#windowFunctionClause}. + * @param ctx the parse tree + */ + void enterWindowFunctionClause(OpenSearchSQLParser.WindowFunctionClauseContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#windowFunctionClause}. + * @param ctx the parse tree + */ + void exitWindowFunctionClause(OpenSearchSQLParser.WindowFunctionClauseContext ctx); + /** + * Enter a parse tree produced by the {@code scalarWindowFunction} + * labeled alternative in {@link OpenSearchSQLParser#windowFunction}. + * @param ctx the parse tree + */ + void enterScalarWindowFunction(OpenSearchSQLParser.ScalarWindowFunctionContext ctx); + /** + * Exit a parse tree produced by the {@code scalarWindowFunction} + * labeled alternative in {@link OpenSearchSQLParser#windowFunction}. + * @param ctx the parse tree + */ + void exitScalarWindowFunction(OpenSearchSQLParser.ScalarWindowFunctionContext ctx); + /** + * Enter a parse tree produced by the {@code aggregateWindowFunction} + * labeled alternative in {@link OpenSearchSQLParser#windowFunction}. + * @param ctx the parse tree + */ + void enterAggregateWindowFunction(OpenSearchSQLParser.AggregateWindowFunctionContext ctx); + /** + * Exit a parse tree produced by the {@code aggregateWindowFunction} + * labeled alternative in {@link OpenSearchSQLParser#windowFunction}. + * @param ctx the parse tree + */ + void exitAggregateWindowFunction(OpenSearchSQLParser.AggregateWindowFunctionContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#overClause}. + * @param ctx the parse tree + */ + void enterOverClause(OpenSearchSQLParser.OverClauseContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#overClause}. + * @param ctx the parse tree + */ + void exitOverClause(OpenSearchSQLParser.OverClauseContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#partitionByClause}. + * @param ctx the parse tree + */ + void enterPartitionByClause(OpenSearchSQLParser.PartitionByClauseContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#partitionByClause}. + * @param ctx the parse tree + */ + void exitPartitionByClause(OpenSearchSQLParser.PartitionByClauseContext ctx); + /** + * Enter a parse tree produced by the {@code string} + * labeled alternative in {@link OpenSearchSQLParser#constant}. + * @param ctx the parse tree + */ + void enterString(OpenSearchSQLParser.StringContext ctx); + /** + * Exit a parse tree produced by the {@code string} + * labeled alternative in {@link OpenSearchSQLParser#constant}. + * @param ctx the parse tree + */ + void exitString(OpenSearchSQLParser.StringContext ctx); + /** + * Enter a parse tree produced by the {@code signedDecimal} + * labeled alternative in {@link OpenSearchSQLParser#constant}. + * @param ctx the parse tree + */ + void enterSignedDecimal(OpenSearchSQLParser.SignedDecimalContext ctx); + /** + * Exit a parse tree produced by the {@code signedDecimal} + * labeled alternative in {@link OpenSearchSQLParser#constant}. + * @param ctx the parse tree + */ + void exitSignedDecimal(OpenSearchSQLParser.SignedDecimalContext ctx); + /** + * Enter a parse tree produced by the {@code signedReal} + * labeled alternative in {@link OpenSearchSQLParser#constant}. + * @param ctx the parse tree + */ + void enterSignedReal(OpenSearchSQLParser.SignedRealContext ctx); + /** + * Exit a parse tree produced by the {@code signedReal} + * labeled alternative in {@link OpenSearchSQLParser#constant}. + * @param ctx the parse tree + */ + void exitSignedReal(OpenSearchSQLParser.SignedRealContext ctx); + /** + * Enter a parse tree produced by the {@code boolean} + * labeled alternative in {@link OpenSearchSQLParser#constant}. + * @param ctx the parse tree + */ + void enterBoolean(OpenSearchSQLParser.BooleanContext ctx); + /** + * Exit a parse tree produced by the {@code boolean} + * labeled alternative in {@link OpenSearchSQLParser#constant}. + * @param ctx the parse tree + */ + void exitBoolean(OpenSearchSQLParser.BooleanContext ctx); + /** + * Enter a parse tree produced by the {@code datetime} + * labeled alternative in {@link OpenSearchSQLParser#constant}. + * @param ctx the parse tree + */ + void enterDatetime(OpenSearchSQLParser.DatetimeContext ctx); + /** + * Exit a parse tree produced by the {@code datetime} + * labeled alternative in {@link OpenSearchSQLParser#constant}. + * @param ctx the parse tree + */ + void exitDatetime(OpenSearchSQLParser.DatetimeContext ctx); + /** + * Enter a parse tree produced by the {@code interval} + * labeled alternative in {@link OpenSearchSQLParser#constant}. + * @param ctx the parse tree + */ + void enterInterval(OpenSearchSQLParser.IntervalContext ctx); + /** + * Exit a parse tree produced by the {@code interval} + * labeled alternative in {@link OpenSearchSQLParser#constant}. + * @param ctx the parse tree + */ + void exitInterval(OpenSearchSQLParser.IntervalContext ctx); + /** + * Enter a parse tree produced by the {@code null} + * labeled alternative in {@link OpenSearchSQLParser#constant}. + * @param ctx the parse tree + */ + void enterNull(OpenSearchSQLParser.NullContext ctx); + /** + * Exit a parse tree produced by the {@code null} + * labeled alternative in {@link OpenSearchSQLParser#constant}. + * @param ctx the parse tree + */ + void exitNull(OpenSearchSQLParser.NullContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#decimalLiteral}. + * @param ctx the parse tree + */ + void enterDecimalLiteral(OpenSearchSQLParser.DecimalLiteralContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#decimalLiteral}. + * @param ctx the parse tree + */ + void exitDecimalLiteral(OpenSearchSQLParser.DecimalLiteralContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#numericLiteral}. + * @param ctx the parse tree + */ + void enterNumericLiteral(OpenSearchSQLParser.NumericLiteralContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#numericLiteral}. + * @param ctx the parse tree + */ + void exitNumericLiteral(OpenSearchSQLParser.NumericLiteralContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#stringLiteral}. + * @param ctx the parse tree + */ + void enterStringLiteral(OpenSearchSQLParser.StringLiteralContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#stringLiteral}. + * @param ctx the parse tree + */ + void exitStringLiteral(OpenSearchSQLParser.StringLiteralContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#booleanLiteral}. + * @param ctx the parse tree + */ + void enterBooleanLiteral(OpenSearchSQLParser.BooleanLiteralContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#booleanLiteral}. + * @param ctx the parse tree + */ + void exitBooleanLiteral(OpenSearchSQLParser.BooleanLiteralContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#realLiteral}. + * @param ctx the parse tree + */ + void enterRealLiteral(OpenSearchSQLParser.RealLiteralContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#realLiteral}. + * @param ctx the parse tree + */ + void exitRealLiteral(OpenSearchSQLParser.RealLiteralContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#sign}. + * @param ctx the parse tree + */ + void enterSign(OpenSearchSQLParser.SignContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#sign}. + * @param ctx the parse tree + */ + void exitSign(OpenSearchSQLParser.SignContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#nullLiteral}. + * @param ctx the parse tree + */ + void enterNullLiteral(OpenSearchSQLParser.NullLiteralContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#nullLiteral}. + * @param ctx the parse tree + */ + void exitNullLiteral(OpenSearchSQLParser.NullLiteralContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#datetimeLiteral}. + * @param ctx the parse tree + */ + void enterDatetimeLiteral(OpenSearchSQLParser.DatetimeLiteralContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#datetimeLiteral}. + * @param ctx the parse tree + */ + void exitDatetimeLiteral(OpenSearchSQLParser.DatetimeLiteralContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#dateLiteral}. + * @param ctx the parse tree + */ + void enterDateLiteral(OpenSearchSQLParser.DateLiteralContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#dateLiteral}. + * @param ctx the parse tree + */ + void exitDateLiteral(OpenSearchSQLParser.DateLiteralContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#timeLiteral}. + * @param ctx the parse tree + */ + void enterTimeLiteral(OpenSearchSQLParser.TimeLiteralContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#timeLiteral}. + * @param ctx the parse tree + */ + void exitTimeLiteral(OpenSearchSQLParser.TimeLiteralContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#timestampLiteral}. + * @param ctx the parse tree + */ + void enterTimestampLiteral(OpenSearchSQLParser.TimestampLiteralContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#timestampLiteral}. + * @param ctx the parse tree + */ + void exitTimestampLiteral(OpenSearchSQLParser.TimestampLiteralContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#datetimeConstantLiteral}. + * @param ctx the parse tree + */ + void enterDatetimeConstantLiteral(OpenSearchSQLParser.DatetimeConstantLiteralContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#datetimeConstantLiteral}. + * @param ctx the parse tree + */ + void exitDatetimeConstantLiteral(OpenSearchSQLParser.DatetimeConstantLiteralContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#intervalLiteral}. + * @param ctx the parse tree + */ + void enterIntervalLiteral(OpenSearchSQLParser.IntervalLiteralContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#intervalLiteral}. + * @param ctx the parse tree + */ + void exitIntervalLiteral(OpenSearchSQLParser.IntervalLiteralContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#intervalUnit}. + * @param ctx the parse tree + */ + void enterIntervalUnit(OpenSearchSQLParser.IntervalUnitContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#intervalUnit}. + * @param ctx the parse tree + */ + void exitIntervalUnit(OpenSearchSQLParser.IntervalUnitContext ctx); + /** + * Enter a parse tree produced by the {@code orExpression} + * labeled alternative in {@link OpenSearchSQLParser#expression}. + * @param ctx the parse tree + */ + void enterOrExpression(OpenSearchSQLParser.OrExpressionContext ctx); + /** + * Exit a parse tree produced by the {@code orExpression} + * labeled alternative in {@link OpenSearchSQLParser#expression}. + * @param ctx the parse tree + */ + void exitOrExpression(OpenSearchSQLParser.OrExpressionContext ctx); + /** + * Enter a parse tree produced by the {@code andExpression} + * labeled alternative in {@link OpenSearchSQLParser#expression}. + * @param ctx the parse tree + */ + void enterAndExpression(OpenSearchSQLParser.AndExpressionContext ctx); + /** + * Exit a parse tree produced by the {@code andExpression} + * labeled alternative in {@link OpenSearchSQLParser#expression}. + * @param ctx the parse tree + */ + void exitAndExpression(OpenSearchSQLParser.AndExpressionContext ctx); + /** + * Enter a parse tree produced by the {@code notExpression} + * labeled alternative in {@link OpenSearchSQLParser#expression}. + * @param ctx the parse tree + */ + void enterNotExpression(OpenSearchSQLParser.NotExpressionContext ctx); + /** + * Exit a parse tree produced by the {@code notExpression} + * labeled alternative in {@link OpenSearchSQLParser#expression}. + * @param ctx the parse tree + */ + void exitNotExpression(OpenSearchSQLParser.NotExpressionContext ctx); + /** + * Enter a parse tree produced by the {@code predicateExpression} + * labeled alternative in {@link OpenSearchSQLParser#expression}. + * @param ctx the parse tree + */ + void enterPredicateExpression(OpenSearchSQLParser.PredicateExpressionContext ctx); + /** + * Exit a parse tree produced by the {@code predicateExpression} + * labeled alternative in {@link OpenSearchSQLParser#expression}. + * @param ctx the parse tree + */ + void exitPredicateExpression(OpenSearchSQLParser.PredicateExpressionContext ctx); + /** + * Enter a parse tree produced by the {@code expressionAtomPredicate} + * labeled alternative in {@link OpenSearchSQLParser#predicate}. + * @param ctx the parse tree + */ + void enterExpressionAtomPredicate(OpenSearchSQLParser.ExpressionAtomPredicateContext ctx); + /** + * Exit a parse tree produced by the {@code expressionAtomPredicate} + * labeled alternative in {@link OpenSearchSQLParser#predicate}. + * @param ctx the parse tree + */ + void exitExpressionAtomPredicate(OpenSearchSQLParser.ExpressionAtomPredicateContext ctx); + /** + * Enter a parse tree produced by the {@code binaryComparisonPredicate} + * labeled alternative in {@link OpenSearchSQLParser#predicate}. + * @param ctx the parse tree + */ + void enterBinaryComparisonPredicate(OpenSearchSQLParser.BinaryComparisonPredicateContext ctx); + /** + * Exit a parse tree produced by the {@code binaryComparisonPredicate} + * labeled alternative in {@link OpenSearchSQLParser#predicate}. + * @param ctx the parse tree + */ + void exitBinaryComparisonPredicate(OpenSearchSQLParser.BinaryComparisonPredicateContext ctx); + /** + * Enter a parse tree produced by the {@code inPredicate} + * labeled alternative in {@link OpenSearchSQLParser#predicate}. + * @param ctx the parse tree + */ + void enterInPredicate(OpenSearchSQLParser.InPredicateContext ctx); + /** + * Exit a parse tree produced by the {@code inPredicate} + * labeled alternative in {@link OpenSearchSQLParser#predicate}. + * @param ctx the parse tree + */ + void exitInPredicate(OpenSearchSQLParser.InPredicateContext ctx); + /** + * Enter a parse tree produced by the {@code betweenPredicate} + * labeled alternative in {@link OpenSearchSQLParser#predicate}. + * @param ctx the parse tree + */ + void enterBetweenPredicate(OpenSearchSQLParser.BetweenPredicateContext ctx); + /** + * Exit a parse tree produced by the {@code betweenPredicate} + * labeled alternative in {@link OpenSearchSQLParser#predicate}. + * @param ctx the parse tree + */ + void exitBetweenPredicate(OpenSearchSQLParser.BetweenPredicateContext ctx); + /** + * Enter a parse tree produced by the {@code isNullPredicate} + * labeled alternative in {@link OpenSearchSQLParser#predicate}. + * @param ctx the parse tree + */ + void enterIsNullPredicate(OpenSearchSQLParser.IsNullPredicateContext ctx); + /** + * Exit a parse tree produced by the {@code isNullPredicate} + * labeled alternative in {@link OpenSearchSQLParser#predicate}. + * @param ctx the parse tree + */ + void exitIsNullPredicate(OpenSearchSQLParser.IsNullPredicateContext ctx); + /** + * Enter a parse tree produced by the {@code likePredicate} + * labeled alternative in {@link OpenSearchSQLParser#predicate}. + * @param ctx the parse tree + */ + void enterLikePredicate(OpenSearchSQLParser.LikePredicateContext ctx); + /** + * Exit a parse tree produced by the {@code likePredicate} + * labeled alternative in {@link OpenSearchSQLParser#predicate}. + * @param ctx the parse tree + */ + void exitLikePredicate(OpenSearchSQLParser.LikePredicateContext ctx); + /** + * Enter a parse tree produced by the {@code regexpPredicate} + * labeled alternative in {@link OpenSearchSQLParser#predicate}. + * @param ctx the parse tree + */ + void enterRegexpPredicate(OpenSearchSQLParser.RegexpPredicateContext ctx); + /** + * Exit a parse tree produced by the {@code regexpPredicate} + * labeled alternative in {@link OpenSearchSQLParser#predicate}. + * @param ctx the parse tree + */ + void exitRegexpPredicate(OpenSearchSQLParser.RegexpPredicateContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#expressions}. + * @param ctx the parse tree + */ + void enterExpressions(OpenSearchSQLParser.ExpressionsContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#expressions}. + * @param ctx the parse tree + */ + void exitExpressions(OpenSearchSQLParser.ExpressionsContext ctx); + /** + * Enter a parse tree produced by the {@code constantExpressionAtom} + * labeled alternative in {@link OpenSearchSQLParser#expressionAtom}. + * @param ctx the parse tree + */ + void enterConstantExpressionAtom(OpenSearchSQLParser.ConstantExpressionAtomContext ctx); + /** + * Exit a parse tree produced by the {@code constantExpressionAtom} + * labeled alternative in {@link OpenSearchSQLParser#expressionAtom}. + * @param ctx the parse tree + */ + void exitConstantExpressionAtom(OpenSearchSQLParser.ConstantExpressionAtomContext ctx); + /** + * Enter a parse tree produced by the {@code functionCallExpressionAtom} + * labeled alternative in {@link OpenSearchSQLParser#expressionAtom}. + * @param ctx the parse tree + */ + void enterFunctionCallExpressionAtom(OpenSearchSQLParser.FunctionCallExpressionAtomContext ctx); + /** + * Exit a parse tree produced by the {@code functionCallExpressionAtom} + * labeled alternative in {@link OpenSearchSQLParser#expressionAtom}. + * @param ctx the parse tree + */ + void exitFunctionCallExpressionAtom(OpenSearchSQLParser.FunctionCallExpressionAtomContext ctx); + /** + * Enter a parse tree produced by the {@code fullColumnNameExpressionAtom} + * labeled alternative in {@link OpenSearchSQLParser#expressionAtom}. + * @param ctx the parse tree + */ + void enterFullColumnNameExpressionAtom(OpenSearchSQLParser.FullColumnNameExpressionAtomContext ctx); + /** + * Exit a parse tree produced by the {@code fullColumnNameExpressionAtom} + * labeled alternative in {@link OpenSearchSQLParser#expressionAtom}. + * @param ctx the parse tree + */ + void exitFullColumnNameExpressionAtom(OpenSearchSQLParser.FullColumnNameExpressionAtomContext ctx); + /** + * Enter a parse tree produced by the {@code nestedExpressionAtom} + * labeled alternative in {@link OpenSearchSQLParser#expressionAtom}. + * @param ctx the parse tree + */ + void enterNestedExpressionAtom(OpenSearchSQLParser.NestedExpressionAtomContext ctx); + /** + * Exit a parse tree produced by the {@code nestedExpressionAtom} + * labeled alternative in {@link OpenSearchSQLParser#expressionAtom}. + * @param ctx the parse tree + */ + void exitNestedExpressionAtom(OpenSearchSQLParser.NestedExpressionAtomContext ctx); + /** + * Enter a parse tree produced by the {@code mathExpressionAtom} + * labeled alternative in {@link OpenSearchSQLParser#expressionAtom}. + * @param ctx the parse tree + */ + void enterMathExpressionAtom(OpenSearchSQLParser.MathExpressionAtomContext ctx); + /** + * Exit a parse tree produced by the {@code mathExpressionAtom} + * labeled alternative in {@link OpenSearchSQLParser#expressionAtom}. + * @param ctx the parse tree + */ + void exitMathExpressionAtom(OpenSearchSQLParser.MathExpressionAtomContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#comparisonOperator}. + * @param ctx the parse tree + */ + void enterComparisonOperator(OpenSearchSQLParser.ComparisonOperatorContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#comparisonOperator}. + * @param ctx the parse tree + */ + void exitComparisonOperator(OpenSearchSQLParser.ComparisonOperatorContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#nullNotnull}. + * @param ctx the parse tree + */ + void enterNullNotnull(OpenSearchSQLParser.NullNotnullContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#nullNotnull}. + * @param ctx the parse tree + */ + void exitNullNotnull(OpenSearchSQLParser.NullNotnullContext ctx); + /** + * Enter a parse tree produced by the {@code nestedAllFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#functionCall}. + * @param ctx the parse tree + */ + void enterNestedAllFunctionCall(OpenSearchSQLParser.NestedAllFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code nestedAllFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#functionCall}. + * @param ctx the parse tree + */ + void exitNestedAllFunctionCall(OpenSearchSQLParser.NestedAllFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code scalarFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#functionCall}. + * @param ctx the parse tree + */ + void enterScalarFunctionCall(OpenSearchSQLParser.ScalarFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code scalarFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#functionCall}. + * @param ctx the parse tree + */ + void exitScalarFunctionCall(OpenSearchSQLParser.ScalarFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code specificFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#functionCall}. + * @param ctx the parse tree + */ + void enterSpecificFunctionCall(OpenSearchSQLParser.SpecificFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code specificFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#functionCall}. + * @param ctx the parse tree + */ + void exitSpecificFunctionCall(OpenSearchSQLParser.SpecificFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code windowFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#functionCall}. + * @param ctx the parse tree + */ + void enterWindowFunctionCall(OpenSearchSQLParser.WindowFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code windowFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#functionCall}. + * @param ctx the parse tree + */ + void exitWindowFunctionCall(OpenSearchSQLParser.WindowFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code aggregateFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#functionCall}. + * @param ctx the parse tree + */ + void enterAggregateFunctionCall(OpenSearchSQLParser.AggregateFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code aggregateFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#functionCall}. + * @param ctx the parse tree + */ + void exitAggregateFunctionCall(OpenSearchSQLParser.AggregateFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code filteredAggregationFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#functionCall}. + * @param ctx the parse tree + */ + void enterFilteredAggregationFunctionCall(OpenSearchSQLParser.FilteredAggregationFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code filteredAggregationFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#functionCall}. + * @param ctx the parse tree + */ + void exitFilteredAggregationFunctionCall(OpenSearchSQLParser.FilteredAggregationFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code scoreRelevanceFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#functionCall}. + * @param ctx the parse tree + */ + void enterScoreRelevanceFunctionCall(OpenSearchSQLParser.ScoreRelevanceFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code scoreRelevanceFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#functionCall}. + * @param ctx the parse tree + */ + void exitScoreRelevanceFunctionCall(OpenSearchSQLParser.ScoreRelevanceFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code relevanceFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#functionCall}. + * @param ctx the parse tree + */ + void enterRelevanceFunctionCall(OpenSearchSQLParser.RelevanceFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code relevanceFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#functionCall}. + * @param ctx the parse tree + */ + void exitRelevanceFunctionCall(OpenSearchSQLParser.RelevanceFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code highlightFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#functionCall}. + * @param ctx the parse tree + */ + void enterHighlightFunctionCall(OpenSearchSQLParser.HighlightFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code highlightFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#functionCall}. + * @param ctx the parse tree + */ + void exitHighlightFunctionCall(OpenSearchSQLParser.HighlightFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code positionFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#functionCall}. + * @param ctx the parse tree + */ + void enterPositionFunctionCall(OpenSearchSQLParser.PositionFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code positionFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#functionCall}. + * @param ctx the parse tree + */ + void exitPositionFunctionCall(OpenSearchSQLParser.PositionFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code extractFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#functionCall}. + * @param ctx the parse tree + */ + void enterExtractFunctionCall(OpenSearchSQLParser.ExtractFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code extractFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#functionCall}. + * @param ctx the parse tree + */ + void exitExtractFunctionCall(OpenSearchSQLParser.ExtractFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code getFormatFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#functionCall}. + * @param ctx the parse tree + */ + void enterGetFormatFunctionCall(OpenSearchSQLParser.GetFormatFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code getFormatFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#functionCall}. + * @param ctx the parse tree + */ + void exitGetFormatFunctionCall(OpenSearchSQLParser.GetFormatFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code timestampFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#functionCall}. + * @param ctx the parse tree + */ + void enterTimestampFunctionCall(OpenSearchSQLParser.TimestampFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code timestampFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#functionCall}. + * @param ctx the parse tree + */ + void exitTimestampFunctionCall(OpenSearchSQLParser.TimestampFunctionCallContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#timestampFunction}. + * @param ctx the parse tree + */ + void enterTimestampFunction(OpenSearchSQLParser.TimestampFunctionContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#timestampFunction}. + * @param ctx the parse tree + */ + void exitTimestampFunction(OpenSearchSQLParser.TimestampFunctionContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#timestampFunctionName}. + * @param ctx the parse tree + */ + void enterTimestampFunctionName(OpenSearchSQLParser.TimestampFunctionNameContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#timestampFunctionName}. + * @param ctx the parse tree + */ + void exitTimestampFunctionName(OpenSearchSQLParser.TimestampFunctionNameContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#getFormatFunction}. + * @param ctx the parse tree + */ + void enterGetFormatFunction(OpenSearchSQLParser.GetFormatFunctionContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#getFormatFunction}. + * @param ctx the parse tree + */ + void exitGetFormatFunction(OpenSearchSQLParser.GetFormatFunctionContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#getFormatType}. + * @param ctx the parse tree + */ + void enterGetFormatType(OpenSearchSQLParser.GetFormatTypeContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#getFormatType}. + * @param ctx the parse tree + */ + void exitGetFormatType(OpenSearchSQLParser.GetFormatTypeContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#extractFunction}. + * @param ctx the parse tree + */ + void enterExtractFunction(OpenSearchSQLParser.ExtractFunctionContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#extractFunction}. + * @param ctx the parse tree + */ + void exitExtractFunction(OpenSearchSQLParser.ExtractFunctionContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#simpleDateTimePart}. + * @param ctx the parse tree + */ + void enterSimpleDateTimePart(OpenSearchSQLParser.SimpleDateTimePartContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#simpleDateTimePart}. + * @param ctx the parse tree + */ + void exitSimpleDateTimePart(OpenSearchSQLParser.SimpleDateTimePartContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#complexDateTimePart}. + * @param ctx the parse tree + */ + void enterComplexDateTimePart(OpenSearchSQLParser.ComplexDateTimePartContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#complexDateTimePart}. + * @param ctx the parse tree + */ + void exitComplexDateTimePart(OpenSearchSQLParser.ComplexDateTimePartContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#datetimePart}. + * @param ctx the parse tree + */ + void enterDatetimePart(OpenSearchSQLParser.DatetimePartContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#datetimePart}. + * @param ctx the parse tree + */ + void exitDatetimePart(OpenSearchSQLParser.DatetimePartContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#highlightFunction}. + * @param ctx the parse tree + */ + void enterHighlightFunction(OpenSearchSQLParser.HighlightFunctionContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#highlightFunction}. + * @param ctx the parse tree + */ + void exitHighlightFunction(OpenSearchSQLParser.HighlightFunctionContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#positionFunction}. + * @param ctx the parse tree + */ + void enterPositionFunction(OpenSearchSQLParser.PositionFunctionContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#positionFunction}. + * @param ctx the parse tree + */ + void exitPositionFunction(OpenSearchSQLParser.PositionFunctionContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#matchQueryAltSyntaxFunction}. + * @param ctx the parse tree + */ + void enterMatchQueryAltSyntaxFunction(OpenSearchSQLParser.MatchQueryAltSyntaxFunctionContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#matchQueryAltSyntaxFunction}. + * @param ctx the parse tree + */ + void exitMatchQueryAltSyntaxFunction(OpenSearchSQLParser.MatchQueryAltSyntaxFunctionContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#scalarFunctionName}. + * @param ctx the parse tree + */ + void enterScalarFunctionName(OpenSearchSQLParser.ScalarFunctionNameContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#scalarFunctionName}. + * @param ctx the parse tree + */ + void exitScalarFunctionName(OpenSearchSQLParser.ScalarFunctionNameContext ctx); + /** + * Enter a parse tree produced by the {@code caseFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#specificFunction}. + * @param ctx the parse tree + */ + void enterCaseFunctionCall(OpenSearchSQLParser.CaseFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code caseFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#specificFunction}. + * @param ctx the parse tree + */ + void exitCaseFunctionCall(OpenSearchSQLParser.CaseFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code dataTypeFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#specificFunction}. + * @param ctx the parse tree + */ + void enterDataTypeFunctionCall(OpenSearchSQLParser.DataTypeFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code dataTypeFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#specificFunction}. + * @param ctx the parse tree + */ + void exitDataTypeFunctionCall(OpenSearchSQLParser.DataTypeFunctionCallContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#relevanceFunction}. + * @param ctx the parse tree + */ + void enterRelevanceFunction(OpenSearchSQLParser.RelevanceFunctionContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#relevanceFunction}. + * @param ctx the parse tree + */ + void exitRelevanceFunction(OpenSearchSQLParser.RelevanceFunctionContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#scoreRelevanceFunction}. + * @param ctx the parse tree + */ + void enterScoreRelevanceFunction(OpenSearchSQLParser.ScoreRelevanceFunctionContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#scoreRelevanceFunction}. + * @param ctx the parse tree + */ + void exitScoreRelevanceFunction(OpenSearchSQLParser.ScoreRelevanceFunctionContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#noFieldRelevanceFunction}. + * @param ctx the parse tree + */ + void enterNoFieldRelevanceFunction(OpenSearchSQLParser.NoFieldRelevanceFunctionContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#noFieldRelevanceFunction}. + * @param ctx the parse tree + */ + void exitNoFieldRelevanceFunction(OpenSearchSQLParser.NoFieldRelevanceFunctionContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#singleFieldRelevanceFunction}. + * @param ctx the parse tree + */ + void enterSingleFieldRelevanceFunction(OpenSearchSQLParser.SingleFieldRelevanceFunctionContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#singleFieldRelevanceFunction}. + * @param ctx the parse tree + */ + void exitSingleFieldRelevanceFunction(OpenSearchSQLParser.SingleFieldRelevanceFunctionContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#multiFieldRelevanceFunction}. + * @param ctx the parse tree + */ + void enterMultiFieldRelevanceFunction(OpenSearchSQLParser.MultiFieldRelevanceFunctionContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#multiFieldRelevanceFunction}. + * @param ctx the parse tree + */ + void exitMultiFieldRelevanceFunction(OpenSearchSQLParser.MultiFieldRelevanceFunctionContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#altSingleFieldRelevanceFunction}. + * @param ctx the parse tree + */ + void enterAltSingleFieldRelevanceFunction(OpenSearchSQLParser.AltSingleFieldRelevanceFunctionContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#altSingleFieldRelevanceFunction}. + * @param ctx the parse tree + */ + void exitAltSingleFieldRelevanceFunction(OpenSearchSQLParser.AltSingleFieldRelevanceFunctionContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#altMultiFieldRelevanceFunction}. + * @param ctx the parse tree + */ + void enterAltMultiFieldRelevanceFunction(OpenSearchSQLParser.AltMultiFieldRelevanceFunctionContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#altMultiFieldRelevanceFunction}. + * @param ctx the parse tree + */ + void exitAltMultiFieldRelevanceFunction(OpenSearchSQLParser.AltMultiFieldRelevanceFunctionContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#convertedDataType}. + * @param ctx the parse tree + */ + void enterConvertedDataType(OpenSearchSQLParser.ConvertedDataTypeContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#convertedDataType}. + * @param ctx the parse tree + */ + void exitConvertedDataType(OpenSearchSQLParser.ConvertedDataTypeContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#caseFuncAlternative}. + * @param ctx the parse tree + */ + void enterCaseFuncAlternative(OpenSearchSQLParser.CaseFuncAlternativeContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#caseFuncAlternative}. + * @param ctx the parse tree + */ + void exitCaseFuncAlternative(OpenSearchSQLParser.CaseFuncAlternativeContext ctx); + /** + * Enter a parse tree produced by the {@code regularAggregateFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#aggregateFunction}. + * @param ctx the parse tree + */ + void enterRegularAggregateFunctionCall(OpenSearchSQLParser.RegularAggregateFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code regularAggregateFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#aggregateFunction}. + * @param ctx the parse tree + */ + void exitRegularAggregateFunctionCall(OpenSearchSQLParser.RegularAggregateFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code countStarFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#aggregateFunction}. + * @param ctx the parse tree + */ + void enterCountStarFunctionCall(OpenSearchSQLParser.CountStarFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code countStarFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#aggregateFunction}. + * @param ctx the parse tree + */ + void exitCountStarFunctionCall(OpenSearchSQLParser.CountStarFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code distinctCountFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#aggregateFunction}. + * @param ctx the parse tree + */ + void enterDistinctCountFunctionCall(OpenSearchSQLParser.DistinctCountFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code distinctCountFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#aggregateFunction}. + * @param ctx the parse tree + */ + void exitDistinctCountFunctionCall(OpenSearchSQLParser.DistinctCountFunctionCallContext ctx); + /** + * Enter a parse tree produced by the {@code percentileApproxFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#aggregateFunction}. + * @param ctx the parse tree + */ + void enterPercentileApproxFunctionCall(OpenSearchSQLParser.PercentileApproxFunctionCallContext ctx); + /** + * Exit a parse tree produced by the {@code percentileApproxFunctionCall} + * labeled alternative in {@link OpenSearchSQLParser#aggregateFunction}. + * @param ctx the parse tree + */ + void exitPercentileApproxFunctionCall(OpenSearchSQLParser.PercentileApproxFunctionCallContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#percentileApproxFunction}. + * @param ctx the parse tree + */ + void enterPercentileApproxFunction(OpenSearchSQLParser.PercentileApproxFunctionContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#percentileApproxFunction}. + * @param ctx the parse tree + */ + void exitPercentileApproxFunction(OpenSearchSQLParser.PercentileApproxFunctionContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#filterClause}. + * @param ctx the parse tree + */ + void enterFilterClause(OpenSearchSQLParser.FilterClauseContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#filterClause}. + * @param ctx the parse tree + */ + void exitFilterClause(OpenSearchSQLParser.FilterClauseContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#aggregationFunctionName}. + * @param ctx the parse tree + */ + void enterAggregationFunctionName(OpenSearchSQLParser.AggregationFunctionNameContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#aggregationFunctionName}. + * @param ctx the parse tree + */ + void exitAggregationFunctionName(OpenSearchSQLParser.AggregationFunctionNameContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#mathematicalFunctionName}. + * @param ctx the parse tree + */ + void enterMathematicalFunctionName(OpenSearchSQLParser.MathematicalFunctionNameContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#mathematicalFunctionName}. + * @param ctx the parse tree + */ + void exitMathematicalFunctionName(OpenSearchSQLParser.MathematicalFunctionNameContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#trigonometricFunctionName}. + * @param ctx the parse tree + */ + void enterTrigonometricFunctionName(OpenSearchSQLParser.TrigonometricFunctionNameContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#trigonometricFunctionName}. + * @param ctx the parse tree + */ + void exitTrigonometricFunctionName(OpenSearchSQLParser.TrigonometricFunctionNameContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#arithmeticFunctionName}. + * @param ctx the parse tree + */ + void enterArithmeticFunctionName(OpenSearchSQLParser.ArithmeticFunctionNameContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#arithmeticFunctionName}. + * @param ctx the parse tree + */ + void exitArithmeticFunctionName(OpenSearchSQLParser.ArithmeticFunctionNameContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#dateTimeFunctionName}. + * @param ctx the parse tree + */ + void enterDateTimeFunctionName(OpenSearchSQLParser.DateTimeFunctionNameContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#dateTimeFunctionName}. + * @param ctx the parse tree + */ + void exitDateTimeFunctionName(OpenSearchSQLParser.DateTimeFunctionNameContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#textFunctionName}. + * @param ctx the parse tree + */ + void enterTextFunctionName(OpenSearchSQLParser.TextFunctionNameContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#textFunctionName}. + * @param ctx the parse tree + */ + void exitTextFunctionName(OpenSearchSQLParser.TextFunctionNameContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#flowControlFunctionName}. + * @param ctx the parse tree + */ + void enterFlowControlFunctionName(OpenSearchSQLParser.FlowControlFunctionNameContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#flowControlFunctionName}. + * @param ctx the parse tree + */ + void exitFlowControlFunctionName(OpenSearchSQLParser.FlowControlFunctionNameContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#noFieldRelevanceFunctionName}. + * @param ctx the parse tree + */ + void enterNoFieldRelevanceFunctionName(OpenSearchSQLParser.NoFieldRelevanceFunctionNameContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#noFieldRelevanceFunctionName}. + * @param ctx the parse tree + */ + void exitNoFieldRelevanceFunctionName(OpenSearchSQLParser.NoFieldRelevanceFunctionNameContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#systemFunctionName}. + * @param ctx the parse tree + */ + void enterSystemFunctionName(OpenSearchSQLParser.SystemFunctionNameContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#systemFunctionName}. + * @param ctx the parse tree + */ + void exitSystemFunctionName(OpenSearchSQLParser.SystemFunctionNameContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#nestedFunctionName}. + * @param ctx the parse tree + */ + void enterNestedFunctionName(OpenSearchSQLParser.NestedFunctionNameContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#nestedFunctionName}. + * @param ctx the parse tree + */ + void exitNestedFunctionName(OpenSearchSQLParser.NestedFunctionNameContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#scoreRelevanceFunctionName}. + * @param ctx the parse tree + */ + void enterScoreRelevanceFunctionName(OpenSearchSQLParser.ScoreRelevanceFunctionNameContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#scoreRelevanceFunctionName}. + * @param ctx the parse tree + */ + void exitScoreRelevanceFunctionName(OpenSearchSQLParser.ScoreRelevanceFunctionNameContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#singleFieldRelevanceFunctionName}. + * @param ctx the parse tree + */ + void enterSingleFieldRelevanceFunctionName(OpenSearchSQLParser.SingleFieldRelevanceFunctionNameContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#singleFieldRelevanceFunctionName}. + * @param ctx the parse tree + */ + void exitSingleFieldRelevanceFunctionName(OpenSearchSQLParser.SingleFieldRelevanceFunctionNameContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#multiFieldRelevanceFunctionName}. + * @param ctx the parse tree + */ + void enterMultiFieldRelevanceFunctionName(OpenSearchSQLParser.MultiFieldRelevanceFunctionNameContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#multiFieldRelevanceFunctionName}. + * @param ctx the parse tree + */ + void exitMultiFieldRelevanceFunctionName(OpenSearchSQLParser.MultiFieldRelevanceFunctionNameContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#altSingleFieldRelevanceFunctionName}. + * @param ctx the parse tree + */ + void enterAltSingleFieldRelevanceFunctionName(OpenSearchSQLParser.AltSingleFieldRelevanceFunctionNameContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#altSingleFieldRelevanceFunctionName}. + * @param ctx the parse tree + */ + void exitAltSingleFieldRelevanceFunctionName(OpenSearchSQLParser.AltSingleFieldRelevanceFunctionNameContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#altMultiFieldRelevanceFunctionName}. + * @param ctx the parse tree + */ + void enterAltMultiFieldRelevanceFunctionName(OpenSearchSQLParser.AltMultiFieldRelevanceFunctionNameContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#altMultiFieldRelevanceFunctionName}. + * @param ctx the parse tree + */ + void exitAltMultiFieldRelevanceFunctionName(OpenSearchSQLParser.AltMultiFieldRelevanceFunctionNameContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#functionArgs}. + * @param ctx the parse tree + */ + void enterFunctionArgs(OpenSearchSQLParser.FunctionArgsContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#functionArgs}. + * @param ctx the parse tree + */ + void exitFunctionArgs(OpenSearchSQLParser.FunctionArgsContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#functionArg}. + * @param ctx the parse tree + */ + void enterFunctionArg(OpenSearchSQLParser.FunctionArgContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#functionArg}. + * @param ctx the parse tree + */ + void exitFunctionArg(OpenSearchSQLParser.FunctionArgContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#relevanceArg}. + * @param ctx the parse tree + */ + void enterRelevanceArg(OpenSearchSQLParser.RelevanceArgContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#relevanceArg}. + * @param ctx the parse tree + */ + void exitRelevanceArg(OpenSearchSQLParser.RelevanceArgContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#highlightArg}. + * @param ctx the parse tree + */ + void enterHighlightArg(OpenSearchSQLParser.HighlightArgContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#highlightArg}. + * @param ctx the parse tree + */ + void exitHighlightArg(OpenSearchSQLParser.HighlightArgContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#relevanceArgName}. + * @param ctx the parse tree + */ + void enterRelevanceArgName(OpenSearchSQLParser.RelevanceArgNameContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#relevanceArgName}. + * @param ctx the parse tree + */ + void exitRelevanceArgName(OpenSearchSQLParser.RelevanceArgNameContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#highlightArgName}. + * @param ctx the parse tree + */ + void enterHighlightArgName(OpenSearchSQLParser.HighlightArgNameContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#highlightArgName}. + * @param ctx the parse tree + */ + void exitHighlightArgName(OpenSearchSQLParser.HighlightArgNameContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#relevanceFieldAndWeight}. + * @param ctx the parse tree + */ + void enterRelevanceFieldAndWeight(OpenSearchSQLParser.RelevanceFieldAndWeightContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#relevanceFieldAndWeight}. + * @param ctx the parse tree + */ + void exitRelevanceFieldAndWeight(OpenSearchSQLParser.RelevanceFieldAndWeightContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#relevanceFieldWeight}. + * @param ctx the parse tree + */ + void enterRelevanceFieldWeight(OpenSearchSQLParser.RelevanceFieldWeightContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#relevanceFieldWeight}. + * @param ctx the parse tree + */ + void exitRelevanceFieldWeight(OpenSearchSQLParser.RelevanceFieldWeightContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#relevanceField}. + * @param ctx the parse tree + */ + void enterRelevanceField(OpenSearchSQLParser.RelevanceFieldContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#relevanceField}. + * @param ctx the parse tree + */ + void exitRelevanceField(OpenSearchSQLParser.RelevanceFieldContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#relevanceQuery}. + * @param ctx the parse tree + */ + void enterRelevanceQuery(OpenSearchSQLParser.RelevanceQueryContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#relevanceQuery}. + * @param ctx the parse tree + */ + void exitRelevanceQuery(OpenSearchSQLParser.RelevanceQueryContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#relevanceArgValue}. + * @param ctx the parse tree + */ + void enterRelevanceArgValue(OpenSearchSQLParser.RelevanceArgValueContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#relevanceArgValue}. + * @param ctx the parse tree + */ + void exitRelevanceArgValue(OpenSearchSQLParser.RelevanceArgValueContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#highlightArgValue}. + * @param ctx the parse tree + */ + void enterHighlightArgValue(OpenSearchSQLParser.HighlightArgValueContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#highlightArgValue}. + * @param ctx the parse tree + */ + void exitHighlightArgValue(OpenSearchSQLParser.HighlightArgValueContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#alternateMultiMatchArgName}. + * @param ctx the parse tree + */ + void enterAlternateMultiMatchArgName(OpenSearchSQLParser.AlternateMultiMatchArgNameContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#alternateMultiMatchArgName}. + * @param ctx the parse tree + */ + void exitAlternateMultiMatchArgName(OpenSearchSQLParser.AlternateMultiMatchArgNameContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#alternateMultiMatchQuery}. + * @param ctx the parse tree + */ + void enterAlternateMultiMatchQuery(OpenSearchSQLParser.AlternateMultiMatchQueryContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#alternateMultiMatchQuery}. + * @param ctx the parse tree + */ + void exitAlternateMultiMatchQuery(OpenSearchSQLParser.AlternateMultiMatchQueryContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#alternateMultiMatchField}. + * @param ctx the parse tree + */ + void enterAlternateMultiMatchField(OpenSearchSQLParser.AlternateMultiMatchFieldContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#alternateMultiMatchField}. + * @param ctx the parse tree + */ + void exitAlternateMultiMatchField(OpenSearchSQLParser.AlternateMultiMatchFieldContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#tableName}. + * @param ctx the parse tree + */ + void enterTableName(OpenSearchSQLParser.TableNameContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#tableName}. + * @param ctx the parse tree + */ + void exitTableName(OpenSearchSQLParser.TableNameContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#columnName}. + * @param ctx the parse tree + */ + void enterColumnName(OpenSearchSQLParser.ColumnNameContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#columnName}. + * @param ctx the parse tree + */ + void exitColumnName(OpenSearchSQLParser.ColumnNameContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#allTupleFields}. + * @param ctx the parse tree + */ + void enterAllTupleFields(OpenSearchSQLParser.AllTupleFieldsContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#allTupleFields}. + * @param ctx the parse tree + */ + void exitAllTupleFields(OpenSearchSQLParser.AllTupleFieldsContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#alias}. + * @param ctx the parse tree + */ + void enterAlias(OpenSearchSQLParser.AliasContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#alias}. + * @param ctx the parse tree + */ + void exitAlias(OpenSearchSQLParser.AliasContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#qualifiedName}. + * @param ctx the parse tree + */ + void enterQualifiedName(OpenSearchSQLParser.QualifiedNameContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#qualifiedName}. + * @param ctx the parse tree + */ + void exitQualifiedName(OpenSearchSQLParser.QualifiedNameContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#ident}. + * @param ctx the parse tree + */ + void enterIdent(OpenSearchSQLParser.IdentContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#ident}. + * @param ctx the parse tree + */ + void exitIdent(OpenSearchSQLParser.IdentContext ctx); + /** + * Enter a parse tree produced by {@link OpenSearchSQLParser#keywordsCanBeId}. + * @param ctx the parse tree + */ + void enterKeywordsCanBeId(OpenSearchSQLParser.KeywordsCanBeIdContext ctx); + /** + * Exit a parse tree produced by {@link OpenSearchSQLParser#keywordsCanBeId}. + * @param ctx the parse tree + */ + void exitKeywordsCanBeId(OpenSearchSQLParser.KeywordsCanBeIdContext ctx); +} \ No newline at end of file diff --git a/src/plugins/data/public/antlr/opensearch_sql/grammar/OpenSearchSQLLexer.g4 b/src/plugins/data/public/antlr/opensearch_sql/grammar/OpenSearchSQLLexer.g4 new file mode 100644 index 000000000000..fac704ac8406 --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/grammar/OpenSearchSQLLexer.g4 @@ -0,0 +1,489 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +/* +MySQL (Positive Technologies) grammar +The MIT License (MIT). +Copyright (c) 2015-2017, Ivan Kochurkin (kvanttt@gmail.com), Positive Technologies. +Copyright (c) 2017, Ivan Khudyashev (IHudyashov@ptsecurity.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +lexer grammar OpenSearchSQLLexer; + +channels { SQLCOMMENT, ERRORCHANNEL } + +options { + caseInsensitive = true; +} + + +// SKIP + +SPACE: [ \t\r\n]+ -> channel(HIDDEN); +SPEC_SQL_COMMENT: '/*!' .+? '*/' -> channel(SQLCOMMENT); +COMMENT_INPUT: '/*' .*? '*/' -> channel(HIDDEN); +LINE_COMMENT: ( + ('-- ' | '#') ~[\r\n]* ('\r'? '\n' | EOF) + | '--' ('\r'? '\n' | EOF) + ) -> channel(HIDDEN); + + +// Keywords +// Common Keywords + +ALL: 'ALL'; +AND: 'AND'; +AS: 'AS'; +ASC: 'ASC'; +BOOLEAN: 'BOOLEAN'; +BETWEEN: 'BETWEEN'; +BY: 'BY'; +CASE: 'CASE'; +CAST: 'CAST'; +CROSS: 'CROSS'; +COLUMNS: 'COLUMNS'; +DATETIME: 'DATETIME'; +DELETE: 'DELETE'; +DESC: 'DESC'; +DESCRIBE: 'DESCRIBE'; +DISTINCT: 'DISTINCT'; +DOUBLE: 'DOUBLE'; +ELSE: 'ELSE'; +EXISTS: 'EXISTS'; +FALSE: 'FALSE'; +FLOAT: 'FLOAT'; +FIRST: 'FIRST'; +FROM: 'FROM'; +GROUP: 'GROUP'; +HAVING: 'HAVING'; +IN: 'IN'; +INNER: 'INNER'; +INT: 'INT'; +INTEGER: 'INTEGER'; +IS: 'IS'; +JOIN: 'JOIN'; +LAST: 'LAST'; +LEFT: 'LEFT'; +LIKE: 'LIKE'; +LIMIT: 'LIMIT'; +LONG: 'LONG'; +MATCH: 'MATCH'; +NATURAL: 'NATURAL'; +MISSING_LITERAL: 'MISSING'; +NOT: 'NOT'; +NULL_LITERAL: 'NULL'; +NULLS: 'NULLS'; +ON: 'ON'; +OR: 'OR'; +ORDER: 'ORDER'; +OUTER: 'OUTER'; +OVER: 'OVER'; +PARTITION: 'PARTITION'; +REGEXP: 'REGEXP'; +RIGHT: 'RIGHT'; +SELECT: 'SELECT'; +SHOW: 'SHOW'; +STRING: 'STRING'; +THEN: 'THEN'; +TRUE: 'TRUE'; +UNION: 'UNION'; +USING: 'USING'; +WHEN: 'WHEN'; +WHERE: 'WHERE'; + + +// OD SQL special keyword +// MISSING: 'MISSING'; +EXCEPT: 'MINUS'; + + +// Group function Keywords + +AVG: 'AVG'; +COUNT: 'COUNT'; +MAX: 'MAX'; +MIN: 'MIN'; +SUM: 'SUM'; +VAR_POP: 'VAR_POP'; +VAR_SAMP: 'VAR_SAMP'; +VARIANCE: 'VARIANCE'; +STD: 'STD'; +STDDEV: 'STDDEV'; +STDDEV_POP: 'STDDEV_POP'; +STDDEV_SAMP: 'STDDEV_SAMP'; + + +// Common function Keywords + +SUBSTRING: 'SUBSTRING'; +TRIM: 'TRIM'; + +// Keywords, but can be ID +// Common Keywords, but can be ID + +END: 'END'; +FULL: 'FULL'; +OFFSET: 'OFFSET'; + +// INTERVAL AND UNIT KEYWORDS +INTERVAL: 'INTERVAL'; +MICROSECOND: 'MICROSECOND'; +SECOND: 'SECOND'; +MINUTE: 'MINUTE'; +HOUR: 'HOUR'; +DAY: 'DAY'; +WEEK: 'WEEK'; +MONTH: 'MONTH'; +QUARTER: 'QUARTER'; +YEAR: 'YEAR'; +SECOND_MICROSECOND: 'SECOND_MICROSECOND'; +MINUTE_MICROSECOND: 'MINUTE_MICROSECOND'; +MINUTE_SECOND: 'MINUTE_SECOND'; +HOUR_MICROSECOND: 'HOUR_MICROSECOND'; +HOUR_SECOND: 'HOUR_SECOND'; +HOUR_MINUTE: 'HOUR_MINUTE'; +DAY_MICROSECOND: 'DAY_MICROSECOND'; +DAY_SECOND: 'DAY_SECOND'; +DAY_MINUTE: 'DAY_MINUTE'; +DAY_HOUR: 'DAY_HOUR'; +YEAR_MONTH: 'YEAR_MONTH'; + + +// PRIVILEGES + +TABLES: 'TABLES'; + + +// Common function names + +ABS: 'ABS'; +ACOS: 'ACOS'; +ADD: 'ADD'; +ADDTIME: 'ADDTIME'; +ASCII: 'ASCII'; +ASIN: 'ASIN'; +ATAN: 'ATAN'; +ATAN2: 'ATAN2'; +CBRT: 'CBRT'; +CEIL: 'CEIL'; +CEILING: 'CEILING'; +CONCAT: 'CONCAT'; +CONCAT_WS: 'CONCAT_WS'; +CONV: 'CONV'; +CONVERT_TZ: 'CONVERT_TZ'; +COS: 'COS'; +COSH: 'COSH'; +COT: 'COT'; +CRC32: 'CRC32'; +CURDATE: 'CURDATE'; +CURTIME: 'CURTIME'; +CURRENT_DATE: 'CURRENT_DATE'; +CURRENT_TIME: 'CURRENT_TIME'; +CURRENT_TIMESTAMP: 'CURRENT_TIMESTAMP'; +DATE: 'DATE'; +DATE_ADD: 'DATE_ADD'; +DATE_FORMAT: 'DATE_FORMAT'; +DATE_SUB: 'DATE_SUB'; +DATEDIFF: 'DATEDIFF'; +DAYNAME: 'DAYNAME'; +DAYOFMONTH: 'DAYOFMONTH'; +DAYOFWEEK: 'DAYOFWEEK'; +DAYOFYEAR: 'DAYOFYEAR'; +DEGREES: 'DEGREES'; +DIVIDE: 'DIVIDE'; +E: 'E'; +EXP: 'EXP'; +EXPM1: 'EXPM1'; +EXTRACT: 'EXTRACT'; +FLOOR: 'FLOOR'; +FROM_DAYS: 'FROM_DAYS'; +FROM_UNIXTIME: 'FROM_UNIXTIME'; +GET_FORMAT: 'GET_FORMAT'; +IF: 'IF'; +IFNULL: 'IFNULL'; +ISNULL: 'ISNULL'; +LAST_DAY: 'LAST_DAY'; +LENGTH: 'LENGTH'; +LN: 'LN'; +LOCALTIME: 'LOCALTIME'; +LOCALTIMESTAMP: 'LOCALTIMESTAMP'; +LOCATE: 'LOCATE'; +LOG: 'LOG'; +LOG10: 'LOG10'; +LOG2: 'LOG2'; +LOWER: 'LOWER'; +LTRIM: 'LTRIM'; +MAKEDATE: 'MAKEDATE'; +MAKETIME: 'MAKETIME'; +MODULUS: 'MODULUS'; +MONTHNAME: 'MONTHNAME'; +MULTIPLY: 'MULTIPLY'; +NOW: 'NOW'; +NULLIF: 'NULLIF'; +PERIOD_ADD: 'PERIOD_ADD'; +PERIOD_DIFF: 'PERIOD_DIFF'; +PI: 'PI'; +POSITION: 'POSITION'; +POW: 'POW'; +POWER: 'POWER'; +RADIANS: 'RADIANS'; +RAND: 'RAND'; +REPLACE: 'REPLACE'; +RINT: 'RINT'; +ROUND: 'ROUND'; +RTRIM: 'RTRIM'; +REVERSE: 'REVERSE'; +SEC_TO_TIME: 'SEC_TO_TIME'; +SIGN: 'SIGN'; +SIGNUM: 'SIGNUM'; +SIN: 'SIN'; +SINH: 'SINH'; +SQRT: 'SQRT'; +STR_TO_DATE: 'STR_TO_DATE'; +SUBDATE: 'SUBDATE'; +SUBTIME: 'SUBTIME'; +SUBTRACT: 'SUBTRACT'; +SYSDATE: 'SYSDATE'; +TAN: 'TAN'; +TIME: 'TIME'; +TIMEDIFF: 'TIMEDIFF'; +TIME_FORMAT: 'TIME_FORMAT'; +TIME_TO_SEC: 'TIME_TO_SEC'; +TIMESTAMP: 'TIMESTAMP'; +TRUNCATE: 'TRUNCATE'; +TO_DAYS: 'TO_DAYS'; +TO_SECONDS: 'TO_SECONDS'; +UNIX_TIMESTAMP: 'UNIX_TIMESTAMP'; +UPPER: 'UPPER'; +UTC_DATE: 'UTC_DATE'; +UTC_TIME: 'UTC_TIME'; +UTC_TIMESTAMP: 'UTC_TIMESTAMP'; + +D: 'D'; +T: 'T'; +TS: 'TS'; +LEFT_BRACE: '{'; +RIGHT_BRACE: '}'; + + +// Window function names +DENSE_RANK: 'DENSE_RANK'; +RANK: 'RANK'; +ROW_NUMBER: 'ROW_NUMBER'; + +// OD SQL special functions +DATE_HISTOGRAM: 'DATE_HISTOGRAM'; +DAY_OF_MONTH: 'DAY_OF_MONTH'; +DAY_OF_YEAR: 'DAY_OF_YEAR'; +DAY_OF_WEEK: 'DAY_OF_WEEK'; +EXCLUDE: 'EXCLUDE'; +EXTENDED_STATS: 'EXTENDED_STATS'; +FIELD: 'FIELD'; +FILTER: 'FILTER'; +GEO_BOUNDING_BOX: 'GEO_BOUNDING_BOX'; +GEO_CELL: 'GEO_CELL'; +GEO_DISTANCE: 'GEO_DISTANCE'; +GEO_DISTANCE_RANGE: 'GEO_DISTANCE_RANGE'; +GEO_INTERSECTS: 'GEO_INTERSECTS'; +GEO_POLYGON: 'GEO_POLYGON'; +HISTOGRAM: 'HISTOGRAM'; +HOUR_OF_DAY: 'HOUR_OF_DAY'; +INCLUDE: 'INCLUDE'; +IN_TERMS: 'IN_TERMS'; +MATCHPHRASE: 'MATCHPHRASE'; +MATCH_PHRASE: 'MATCH_PHRASE'; +MATCHPHRASEQUERY: 'MATCHPHRASEQUERY'; +SIMPLE_QUERY_STRING: 'SIMPLE_QUERY_STRING'; +QUERY_STRING: 'QUERY_STRING'; +MATCH_PHRASE_PREFIX: 'MATCH_PHRASE_PREFIX'; +MATCHQUERY: 'MATCHQUERY'; +MATCH_QUERY: 'MATCH_QUERY'; +MINUTE_OF_DAY: 'MINUTE_OF_DAY'; +MINUTE_OF_HOUR: 'MINUTE_OF_HOUR'; +MONTH_OF_YEAR: 'MONTH_OF_YEAR'; +MULTIMATCH: 'MULTIMATCH'; +MULTI_MATCH: 'MULTI_MATCH'; +MULTIMATCHQUERY: 'MULTIMATCHQUERY'; +NESTED: 'NESTED'; +PERCENTILES: 'PERCENTILES'; +PERCENTILE: 'PERCENTILE'; +PERCENTILE_APPROX: 'PERCENTILE_APPROX'; +REGEXP_QUERY: 'REGEXP_QUERY'; +REVERSE_NESTED: 'REVERSE_NESTED'; +QUERY: 'QUERY'; +RANGE: 'RANGE'; +SCORE: 'SCORE'; +SCOREQUERY: 'SCOREQUERY'; +SCORE_QUERY: 'SCORE_QUERY'; +SECOND_OF_MINUTE: 'SECOND_OF_MINUTE'; +STATS: 'STATS'; +TERM: 'TERM'; +TERMS: 'TERMS'; +TIMESTAMPADD: 'TIMESTAMPADD'; +TIMESTAMPDIFF: 'TIMESTAMPDIFF'; +TOPHITS: 'TOPHITS'; +TYPEOF: 'TYPEOF'; +WEEK_OF_YEAR: 'WEEK_OF_YEAR'; +WEEKOFYEAR: 'WEEKOFYEAR'; +WEEKDAY: 'WEEKDAY'; +WILDCARDQUERY: 'WILDCARDQUERY'; +WILDCARD_QUERY: 'WILDCARD_QUERY'; + +// TEXT FUNCTIONS +SUBSTR: 'SUBSTR'; +STRCMP: 'STRCMP'; + +// DATE AND TIME FUNCTIONS +ADDDATE: 'ADDDATE'; +YEARWEEK: 'YEARWEEK'; + +// RELEVANCE FUNCTIONS AND PARAMETERS +ALLOW_LEADING_WILDCARD: 'ALLOW_LEADING_WILDCARD'; +ANALYZER: 'ANALYZER'; +ANALYZE_WILDCARD: 'ANALYZE_WILDCARD'; +AUTO_GENERATE_SYNONYMS_PHRASE_QUERY:'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY'; +BOOST: 'BOOST'; +CASE_INSENSITIVE: 'CASE_INSENSITIVE'; +CUTOFF_FREQUENCY: 'CUTOFF_FREQUENCY'; +DEFAULT_FIELD: 'DEFAULT_FIELD'; +DEFAULT_OPERATOR: 'DEFAULT_OPERATOR'; +ESCAPE: 'ESCAPE'; +ENABLE_POSITION_INCREMENTS: 'ENABLE_POSITION_INCREMENTS'; +FIELDS: 'FIELDS'; +FLAGS: 'FLAGS'; +FUZZINESS: 'FUZZINESS'; +FUZZY_MAX_EXPANSIONS: 'FUZZY_MAX_EXPANSIONS'; +FUZZY_PREFIX_LENGTH: 'FUZZY_PREFIX_LENGTH'; +FUZZY_REWRITE: 'FUZZY_REWRITE'; +FUZZY_TRANSPOSITIONS: 'FUZZY_TRANSPOSITIONS'; +LENIENT: 'LENIENT'; +LOW_FREQ_OPERATOR: 'LOW_FREQ_OPERATOR'; +MAX_DETERMINIZED_STATES: 'MAX_DETERMINIZED_STATES'; +MAX_EXPANSIONS: 'MAX_EXPANSIONS'; +MINIMUM_SHOULD_MATCH: 'MINIMUM_SHOULD_MATCH'; +OPERATOR: 'OPERATOR'; +PHRASE_SLOP: 'PHRASE_SLOP'; +PREFIX_LENGTH: 'PREFIX_LENGTH'; +QUOTE_ANALYZER: 'QUOTE_ANALYZER'; +QUOTE_FIELD_SUFFIX: 'QUOTE_FIELD_SUFFIX'; +REWRITE: 'REWRITE'; +SLOP: 'SLOP'; +TIE_BREAKER: 'TIE_BREAKER'; +TIME_ZONE: 'TIME_ZONE'; +TYPE: 'TYPE'; +ZERO_TERMS_QUERY: 'ZERO_TERMS_QUERY'; +HIGHLIGHT: 'HIGHLIGHT'; +HIGHLIGHT_PRE_TAGS: 'PRE_TAGS'; +HIGHLIGHT_POST_TAGS: 'POST_TAGS'; + +// RELEVANCE FUNCTIONS +MATCH_BOOL_PREFIX: 'MATCH_BOOL_PREFIX'; +// Operators + +// Operators. Arithmetics + +STAR: '*'; +SLASH: '/'; +MODULE: '%'; +PLUS: '+'; +MINUS: '-'; +DIV: 'DIV'; +MOD: 'MOD'; + + +// Operators. Comparation + +EQUAL_SYMBOL: '='; +GREATER_SYMBOL: '>'; +LESS_SYMBOL: '<'; +EXCLAMATION_SYMBOL: '!'; + + +// Operators. Bit + +BIT_NOT_OP: '~'; +BIT_OR_OP: '|'; +BIT_AND_OP: '&'; +BIT_XOR_OP: '^'; + + +// Constructors symbols + +DOT: '.'; +LR_BRACKET: '('; +RR_BRACKET: ')'; +LT_SQR_PRTHS: '['; +RT_SQR_PRTHS: ']'; +COMMA: ','; +SEMI: ';'; +AT_SIGN: '@'; +ZERO_DECIMAL: '0'; +ONE_DECIMAL: '1'; +TWO_DECIMAL: '2'; +SINGLE_QUOTE_SYMB: '\''; +DOUBLE_QUOTE_SYMB: '"'; +REVERSE_QUOTE_SYMB: '`'; +COLON_SYMB: ':'; + + +// Literal Primitives + +START_NATIONAL_STRING_LITERAL: 'N' SQUOTA_STRING; +STRING_LITERAL: SQUOTA_STRING; +DECIMAL_LITERAL: DEC_DIGIT+; +HEXADECIMAL_LITERAL: 'X' '\'' (HEX_DIGIT HEX_DIGIT)+ '\'' + | '0X' HEX_DIGIT+; + +REAL_LITERAL: (DEC_DIGIT+)? '.' DEC_DIGIT+ + | DEC_DIGIT+ '.' EXPONENT_NUM_PART + | (DEC_DIGIT+)? '.' (DEC_DIGIT+ EXPONENT_NUM_PART) + | DEC_DIGIT+ EXPONENT_NUM_PART; +NULL_SPEC_LITERAL: '\\' 'N'; +BIT_STRING: BIT_STRING_L; + + + +// Identifiers + +ID: ID_LITERAL; +DOUBLE_QUOTE_ID: DQUOTA_STRING; +BACKTICK_QUOTE_ID: BQUOTA_STRING; + + +// Fragments for Literal primitives +fragment EXPONENT_NUM_PART: 'E' [-+]? DEC_DIGIT+; +// fragment ID_LITERAL: [a-zA-Z_][a-zA-Z_0-9]*; +fragment ID_LITERAL: ([@*A-Z_])+ ([*A-Z_\-0-9])*; +fragment DQUOTA_STRING: '"' ( '\\'. | '""' | ~('"'| '\\') )* '"'; +fragment SQUOTA_STRING: '\'' ('\\'. | '\'\'' | ~('\'' | '\\'))* '\''; +fragment BQUOTA_STRING: '`' ( '\\'. | '``' | ~('`'|'\\'))* '`'; +fragment HEX_DIGIT: [0-9A-F]; +fragment DEC_DIGIT: [0-9]; +fragment BIT_STRING_L: 'B' '\'' [01]+ '\''; +// Last tokens must generate Errors + +// Identifiers cannot start with a single '_' since this an OpenSearch reserved +// metadata field. Two underscores (or more) is acceptable, such as '__field'. +// fragment ID_LITERAL: ([@*A-Z_])+?[*A-Z_\-0-9]*; + +ERROR_RECOGNITION: . -> channel(ERRORCHANNEL); \ No newline at end of file diff --git a/src/plugins/data/public/antlr/opensearch_sql/grammar/OpenSearchSQLParser.g4 b/src/plugins/data/public/antlr/opensearch_sql/grammar/OpenSearchSQLParser.g4 new file mode 100644 index 000000000000..08a645cb7f1f --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/grammar/OpenSearchSQLParser.g4 @@ -0,0 +1,849 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +/* +MySQL (Positive Technologies) grammar +The MIT License (MIT). +Copyright (c) 2015-2017, Ivan Kochurkin (kvanttt@gmail.com), Positive Technologies. +Copyright (c) 2017, Ivan Khudyashev (IHudyashov@ptsecurity.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +parser grammar OpenSearchSQLParser; + + +options { tokenVocab = OpenSearchSQLLexer; } +// Top Level Description + +// Root rule + +root + : sqlStatement? SEMI? EOF + ; + +// Only SELECT +sqlStatement + : dmlStatement + | adminStatement + ; + +dmlStatement + : selectStatement + ; + +// Data Manipulation Language + +// Primary DML Statements +selectStatement + : querySpecification # simpleSelect + ; + +adminStatement + : showStatement + | describeStatement + ; + +showStatement + : SHOW TABLES tableFilter + ; + +describeStatement + : DESCRIBE TABLES tableFilter columnFilter? + ; + +columnFilter + : COLUMNS LIKE showDescribePattern + ; + +tableFilter + : LIKE showDescribePattern + ; + +showDescribePattern + : oldID=compatibleID | stringLiteral + ; + +compatibleID + : (MODULE | ID)+? + ; + + +// Select Statement's Details +querySpecification + : selectClause fromClause? limitClause? + ; + +selectClause + : SELECT selectSpec? selectElements + ; + +selectSpec + : (ALL | DISTINCT) + ; + +selectElements + : (star = STAR | selectElement) (COMMA selectElement)* + ; + +selectElement + : expression (AS? alias)? + ; + +fromClause + : FROM relation (whereClause)? (groupByClause)? (havingClause)? (orderByClause)? // Place it under FROM for now but actually not necessary ex. A UNION B ORDER BY + + ; + +relation + : tableName (AS? alias)? # tableAsRelation + | LR_BRACKET subquery = querySpecification RR_BRACKET AS? alias # subqueryAsRelation + ; + +whereClause + : WHERE expression + ; + +groupByClause + : GROUP BY groupByElements + ; + +groupByElements + : groupByElement (COMMA groupByElement)* + ; + +groupByElement + : expression + ; + +havingClause + : HAVING expression + ; + +orderByClause + : ORDER BY orderByElement (COMMA orderByElement)* + ; + +orderByElement + : expression order = (ASC | DESC)? (NULLS (FIRST | LAST))? + ; + +limitClause + : LIMIT (offset = decimalLiteral COMMA)? limit = decimalLiteral + | LIMIT limit = decimalLiteral OFFSET offset = decimalLiteral + ; + +// Window Function's Details +windowFunctionClause + : function = windowFunction overClause + ; + +windowFunction + : functionName = (ROW_NUMBER | RANK | DENSE_RANK) LR_BRACKET functionArgs? RR_BRACKET # scalarWindowFunction + | aggregateFunction # aggregateWindowFunction + ; + +overClause + : OVER LR_BRACKET partitionByClause? orderByClause? RR_BRACKET + ; + +partitionByClause + : PARTITION BY expression (COMMA expression)* + ; + +// Literals +constant + : stringLiteral # string + | sign? decimalLiteral # signedDecimal + | sign? realLiteral # signedReal + | booleanLiteral # boolean + | datetimeLiteral # datetime + | intervalLiteral # interval + | nullLiteral # null + // Doesn't support the following types for now + //| BIT_STRING + //| NOT? nullLiteral=(NULL_LITERAL | NULL_SPEC_LITERAL) + ; + +decimalLiteral + : DECIMAL_LITERAL + | ZERO_DECIMAL + | ONE_DECIMAL + | TWO_DECIMAL + ; + +numericLiteral + : decimalLiteral + | realLiteral + ; + +stringLiteral + : STRING_LITERAL + | DOUBLE_QUOTE_ID + ; + +booleanLiteral + : TRUE + | FALSE + ; + +realLiteral + : REAL_LITERAL + ; + +sign + : PLUS + | MINUS + ; + +nullLiteral + : NULL_LITERAL + ; + +// Date and Time Literal, follow ANSI 92 +datetimeLiteral + : dateLiteral + | timeLiteral + | timestampLiteral + ; + +dateLiteral + : DATE date = stringLiteral + | LEFT_BRACE (DATE | D) date = stringLiteral RIGHT_BRACE + ; + +timeLiteral + : TIME time = stringLiteral + | LEFT_BRACE (TIME | T) time = stringLiteral RIGHT_BRACE + ; + +timestampLiteral + : TIMESTAMP timestamp = stringLiteral + | LEFT_BRACE (TIMESTAMP | TS) timestamp = stringLiteral RIGHT_BRACE + ; + +// Actually, these constants are shortcuts to the corresponding functions +datetimeConstantLiteral + : CURRENT_DATE + | CURRENT_TIME + | CURRENT_TIMESTAMP + | LOCALTIME + | LOCALTIMESTAMP + | UTC_TIMESTAMP + | UTC_DATE + | UTC_TIME + ; + +intervalLiteral + : INTERVAL expression intervalUnit + ; + +intervalUnit + : MICROSECOND + | SECOND + | MINUTE + | HOUR + | DAY + | WEEK + | MONTH + | QUARTER + | YEAR + | SECOND_MICROSECOND + | MINUTE_MICROSECOND + | MINUTE_SECOND + | HOUR_MICROSECOND + | HOUR_SECOND + | HOUR_MINUTE + | DAY_MICROSECOND + | DAY_SECOND + | DAY_MINUTE + | DAY_HOUR + | YEAR_MONTH + ; + +// predicates + +// Simplified approach for expression +expression + : NOT expression # notExpression + | left = expression AND right = expression # andExpression + | left = expression OR right = expression # orExpression + | predicate # predicateExpression + ; + +predicate + : expressionAtom # expressionAtomPredicate + | left = predicate comparisonOperator right = predicate # binaryComparisonPredicate + | predicate IS nullNotnull # isNullPredicate + | predicate NOT? BETWEEN predicate AND predicate # betweenPredicate + | left = predicate NOT? LIKE right = predicate # likePredicate + | left = predicate REGEXP right = predicate # regexpPredicate + | predicate NOT? IN '(' expressions ')' # inPredicate + ; + +expressions + : expression (',' expression)* + ; + +expressionAtom + : constant # constantExpressionAtom + | columnName # fullColumnNameExpressionAtom + | functionCall # functionCallExpressionAtom + | LR_BRACKET expression RR_BRACKET # nestedExpressionAtom + | left = expressionAtom mathOperator = (STAR | SLASH | MODULE) right = expressionAtom # mathExpressionAtom + | left = expressionAtom mathOperator = (PLUS | MINUS) right = expressionAtom # mathExpressionAtom + ; + +comparisonOperator + : '=' + | '>' + | '<' + | '<' '=' + | '>' '=' + | '<' '>' + | '!' '=' + ; + +nullNotnull + : NOT? NULL_LITERAL + ; + +functionCall + : nestedFunctionName LR_BRACKET allTupleFields RR_BRACKET # nestedAllFunctionCall + | scalarFunctionName LR_BRACKET functionArgs RR_BRACKET # scalarFunctionCall + | specificFunction # specificFunctionCall + | windowFunctionClause # windowFunctionCall + | aggregateFunction # aggregateFunctionCall + | aggregateFunction (orderByClause)? filterClause # filteredAggregationFunctionCall + | scoreRelevanceFunction # scoreRelevanceFunctionCall + | relevanceFunction # relevanceFunctionCall + | highlightFunction # highlightFunctionCall + | positionFunction # positionFunctionCall + | extractFunction # extractFunctionCall + | getFormatFunction # getFormatFunctionCall + | timestampFunction # timestampFunctionCall + ; + +timestampFunction + : timestampFunctionName LR_BRACKET simpleDateTimePart COMMA firstArg = functionArg COMMA secondArg = functionArg RR_BRACKET + ; + +timestampFunctionName + : TIMESTAMPADD + | TIMESTAMPDIFF + ; + +getFormatFunction + : GET_FORMAT LR_BRACKET getFormatType COMMA functionArg RR_BRACKET + ; + +getFormatType + : DATE + | DATETIME + | TIME + | TIMESTAMP + ; + +extractFunction + : EXTRACT LR_BRACKET datetimePart FROM functionArg RR_BRACKET + ; + +simpleDateTimePart + : MICROSECOND + | SECOND + | MINUTE + | HOUR + | DAY + | WEEK + | MONTH + | QUARTER + | YEAR + ; + +complexDateTimePart + : SECOND_MICROSECOND + | MINUTE_MICROSECOND + | MINUTE_SECOND + | HOUR_MICROSECOND + | HOUR_SECOND + | HOUR_MINUTE + | DAY_MICROSECOND + | DAY_SECOND + | DAY_MINUTE + | DAY_HOUR + | YEAR_MONTH + ; + +datetimePart + : simpleDateTimePart + | complexDateTimePart + ; + +highlightFunction + : HIGHLIGHT LR_BRACKET relevanceField (COMMA highlightArg)* RR_BRACKET + ; + +positionFunction + : POSITION LR_BRACKET functionArg IN functionArg RR_BRACKET + ; + +matchQueryAltSyntaxFunction + : field = relevanceField EQUAL_SYMBOL MATCH_QUERY LR_BRACKET query = relevanceQuery RR_BRACKET + ; + +scalarFunctionName + : mathematicalFunctionName + | dateTimeFunctionName + | textFunctionName + | flowControlFunctionName + | systemFunctionName + | nestedFunctionName + ; + +specificFunction + : CASE expression caseFuncAlternative+ (ELSE elseArg = functionArg)? END # caseFunctionCall + | CASE caseFuncAlternative+ (ELSE elseArg = functionArg)? END # caseFunctionCall + | CAST '(' expression AS convertedDataType ')' # dataTypeFunctionCall + ; + +relevanceFunction + : noFieldRelevanceFunction + | singleFieldRelevanceFunction + | multiFieldRelevanceFunction + | altSingleFieldRelevanceFunction + | altMultiFieldRelevanceFunction + ; + +scoreRelevanceFunction + : scoreRelevanceFunctionName LR_BRACKET relevanceFunction (COMMA weight = relevanceFieldWeight)? RR_BRACKET + ; + +noFieldRelevanceFunction + : noFieldRelevanceFunctionName LR_BRACKET query = relevanceQuery (COMMA relevanceArg)* RR_BRACKET + ; + +// Field is a single column +singleFieldRelevanceFunction + : singleFieldRelevanceFunctionName LR_BRACKET field = relevanceField COMMA query = relevanceQuery (COMMA relevanceArg)* RR_BRACKET + ; + +// Field is a list of columns +multiFieldRelevanceFunction + : multiFieldRelevanceFunctionName LR_BRACKET LT_SQR_PRTHS field = relevanceFieldAndWeight (COMMA field = relevanceFieldAndWeight)* RT_SQR_PRTHS COMMA query = relevanceQuery (COMMA relevanceArg)* RR_BRACKET + | multiFieldRelevanceFunctionName LR_BRACKET alternateMultiMatchQuery COMMA alternateMultiMatchField (COMMA relevanceArg)* RR_BRACKET + ; + +altSingleFieldRelevanceFunction + : field = relevanceField EQUAL_SYMBOL altSyntaxFunctionName = altSingleFieldRelevanceFunctionName LR_BRACKET query = relevanceQuery (COMMA relevanceArg)* RR_BRACKET + ; + +altMultiFieldRelevanceFunction + : field = relevanceField EQUAL_SYMBOL altSyntaxFunctionName = altMultiFieldRelevanceFunctionName LR_BRACKET query = relevanceQuery (COMMA relevanceArg)* RR_BRACKET + ; + +convertedDataType + : typeName = DATE + | typeName = TIME + | typeName = TIMESTAMP + | typeName = INT + | typeName = INTEGER + | typeName = DOUBLE + | typeName = LONG + | typeName = FLOAT + | typeName = STRING + | typeName = BOOLEAN + ; + +caseFuncAlternative + : WHEN condition = functionArg THEN consequent = functionArg + ; + +aggregateFunction + : functionName = aggregationFunctionName LR_BRACKET functionArg RR_BRACKET # regularAggregateFunctionCall + | COUNT LR_BRACKET STAR RR_BRACKET # countStarFunctionCall + | COUNT LR_BRACKET DISTINCT functionArg RR_BRACKET # distinctCountFunctionCall + | percentileApproxFunction # percentileApproxFunctionCall + ; + +percentileApproxFunction + : (PERCENTILE | PERCENTILE_APPROX) LR_BRACKET aggField = functionArg + COMMA percent = numericLiteral (COMMA compression = numericLiteral)? RR_BRACKET + ; + +filterClause + : FILTER LR_BRACKET WHERE expression RR_BRACKET + ; + +aggregationFunctionName + : AVG + | COUNT + | SUM + | MIN + | MAX + | VAR_POP + | VAR_SAMP + | VARIANCE + | STD + | STDDEV + | STDDEV_POP + | STDDEV_SAMP + ; + +mathematicalFunctionName + : ABS + | CBRT + | CEIL + | CEILING + | CONV + | CRC32 + | E + | EXP + | EXPM1 + | FLOOR + | LN + | LOG + | LOG10 + | LOG2 + | MOD + | PI + | POW + | POWER + | RAND + | RINT + | ROUND + | SIGN + | SIGNUM + | SQRT + | TRUNCATE + | trigonometricFunctionName + | arithmeticFunctionName + ; + +trigonometricFunctionName + : ACOS + | ASIN + | ATAN + | ATAN2 + | COS + | COSH + | COT + | DEGREES + | RADIANS + | SIN + | SINH + | TAN + ; + +arithmeticFunctionName + : ADD + | SUBTRACT + | MULTIPLY + | DIVIDE + | MOD + | MODULUS + ; + +dateTimeFunctionName + : datetimeConstantLiteral + | ADDDATE + | ADDTIME + | CONVERT_TZ + | CURDATE + | CURTIME + | DATE + | DATE_ADD + | DATE_FORMAT + | DATE_SUB + | DATEDIFF + | DATETIME + | DAY + | DAYNAME + | DAYOFMONTH + | DAY_OF_MONTH + | DAYOFWEEK + | DAYOFYEAR + | DAY_OF_YEAR + | DAY_OF_WEEK + | FROM_DAYS + | FROM_UNIXTIME + | HOUR + | HOUR_OF_DAY + | LAST_DAY + | MAKEDATE + | MAKETIME + | MICROSECOND + | MINUTE + | MINUTE_OF_DAY + | MINUTE_OF_HOUR + | MONTH + | MONTHNAME + | MONTH_OF_YEAR + | NOW + | PERIOD_ADD + | PERIOD_DIFF + | QUARTER + | SEC_TO_TIME + | SECOND + | SECOND_OF_MINUTE + | SUBDATE + | SUBTIME + | SYSDATE + | STR_TO_DATE + | TIME + | TIME_FORMAT + | TIME_TO_SEC + | TIMEDIFF + | TIMESTAMP + | TO_DAYS + | TO_SECONDS + | UNIX_TIMESTAMP + | WEEK + | WEEKDAY + | WEEK_OF_YEAR + | WEEKOFYEAR + | YEAR + | YEARWEEK + ; + +textFunctionName + : SUBSTR + | SUBSTRING + | TRIM + | LTRIM + | RTRIM + | LOWER + | UPPER + | CONCAT + | CONCAT_WS + | SUBSTR + | LENGTH + | STRCMP + | RIGHT + | LEFT + | ASCII + | LOCATE + | REPLACE + | REVERSE + ; + +flowControlFunctionName + : IF + | IFNULL + | NULLIF + | ISNULL + ; + +noFieldRelevanceFunctionName + : QUERY + ; + +systemFunctionName + : TYPEOF + ; + +nestedFunctionName + : NESTED + ; + +scoreRelevanceFunctionName + : SCORE + | SCOREQUERY + | SCORE_QUERY + ; + +singleFieldRelevanceFunctionName + : MATCH + | MATCHQUERY + | MATCH_QUERY + | MATCH_PHRASE + | MATCHPHRASE + | MATCHPHRASEQUERY + | MATCH_BOOL_PREFIX + | MATCH_PHRASE_PREFIX + | WILDCARD_QUERY + | WILDCARDQUERY + ; + +multiFieldRelevanceFunctionName + : MULTI_MATCH + | MULTIMATCH + | MULTIMATCHQUERY + | SIMPLE_QUERY_STRING + | QUERY_STRING + ; + +altSingleFieldRelevanceFunctionName + : MATCH_QUERY + | MATCHQUERY + | MATCH_PHRASE + | MATCHPHRASE + ; + +altMultiFieldRelevanceFunctionName + : MULTI_MATCH + | MULTIMATCH + ; + +functionArgs + : (functionArg (COMMA functionArg)*)? + ; + +functionArg + : expression + ; + +relevanceArg + : relevanceArgName EQUAL_SYMBOL relevanceArgValue + | argName = stringLiteral EQUAL_SYMBOL argVal = relevanceArgValue + ; + +highlightArg + : highlightArgName EQUAL_SYMBOL highlightArgValue + ; + +relevanceArgName + : ALLOW_LEADING_WILDCARD + | ANALYZER + | ANALYZE_WILDCARD + | AUTO_GENERATE_SYNONYMS_PHRASE_QUERY + | BOOST + | CASE_INSENSITIVE + | CUTOFF_FREQUENCY + | DEFAULT_FIELD + | DEFAULT_OPERATOR + | ENABLE_POSITION_INCREMENTS + | ESCAPE + | FIELDS + | FLAGS + | FUZZINESS + | FUZZY_MAX_EXPANSIONS + | FUZZY_PREFIX_LENGTH + | FUZZY_REWRITE + | FUZZY_TRANSPOSITIONS + | LENIENT + | LOW_FREQ_OPERATOR + | MAX_DETERMINIZED_STATES + | MAX_EXPANSIONS + | MINIMUM_SHOULD_MATCH + | OPERATOR + | PHRASE_SLOP + | PREFIX_LENGTH + | QUOTE_ANALYZER + | QUOTE_FIELD_SUFFIX + | REWRITE + | SLOP + | TIE_BREAKER + | TIME_ZONE + | TYPE + | ZERO_TERMS_QUERY + ; + +highlightArgName + : HIGHLIGHT_POST_TAGS + | HIGHLIGHT_PRE_TAGS + ; + +relevanceFieldAndWeight + : field = relevanceField + | field = relevanceField weight = relevanceFieldWeight + | field = relevanceField BIT_XOR_OP weight = relevanceFieldWeight + ; + +relevanceFieldWeight + : numericLiteral + ; + +relevanceField + : qualifiedName + | stringLiteral + ; + +relevanceQuery + : relevanceArgValue + ; + +relevanceArgValue + : qualifiedName + | constant + ; + +highlightArgValue + : stringLiteral + ; + +alternateMultiMatchArgName + : FIELDS + | QUERY + | stringLiteral + ; + +alternateMultiMatchQuery + : argName = alternateMultiMatchArgName EQUAL_SYMBOL argVal = relevanceArgValue + ; + +alternateMultiMatchField + : argName = alternateMultiMatchArgName EQUAL_SYMBOL argVal = relevanceArgValue + | argName = alternateMultiMatchArgName EQUAL_SYMBOL LT_SQR_PRTHS argVal = relevanceArgValue RT_SQR_PRTHS + ; + +// Identifiers +tableName + : qualifiedName + ; + +columnName + : qualifiedName + ; + +allTupleFields + : path = qualifiedName DOT STAR + ; + +alias + : ident + ; + +qualifiedName + : ident (DOT ident)* + ; + +ident + : DOT? ID + | BACKTICK_QUOTE_ID + | keywordsCanBeId + | scalarFunctionName + ; + +keywordsCanBeId + : FULL + | FIELD + | D + | T + | TS // OD SQL and ODBC special + | COUNT + | SUM + | AVG + | MAX + | MIN + | FIRST + | LAST + | TYPE // TODO: Type is keyword required by relevancy function. Remove this when relevancy functions moved out + ; \ No newline at end of file diff --git a/src/plugins/data/public/antlr/opensearch_sql/opensearch_sql_autocomplete.ts b/src/plugins/data/public/antlr/opensearch_sql/opensearch_sql_autocomplete.ts new file mode 100644 index 000000000000..153ab5844647 --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/opensearch_sql_autocomplete.ts @@ -0,0 +1,272 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { ParseTree, TokenStream } from 'antlr4ng'; +import * as c3 from 'antlr4-c3'; +import { ColumnAliasSymbol, TableSymbol } from './symbol_table'; +import { + AutocompleteData, + AutocompleteResultBase, + CursorPosition, + ISymbolTableVisitor, + ProcessVisitedRulesResult, + TableOrViewSuggestion, + OpenSearchSqlAutocompleteResult, +} from '../shared/types'; +import { OpenSearchSQLLexer } from './.generated/OpenSearchSQLLexer'; +import { + OpenSearchSQLParser, + SelectElementsContext, + TableNameContext, +} from './.generated/OpenSearchSQLParser'; +import { OpenSearchSQLParserVisitor } from './.generated/OpenSearchSQLParserVisitor'; +import { + TableQueryPosition, + TokenDictionary, + getContextSuggestions, + getPreviousToken, +} from './table'; +import { shouldSuggestTemplates } from './parse'; + +const tokenDictionary: TokenDictionary = { + SPACE: OpenSearchSQLParser.SPACE, + FROM: OpenSearchSQLParser.FROM, + OPENING_BRACKET: OpenSearchSQLParser.LR_BRACKET, + CLOSING_BRACKET: OpenSearchSQLParser.RR_BRACKET, + JOIN: OpenSearchSQLParser.JOIN, + SEMICOLON: OpenSearchSQLParser.SEMI, + SELECT: OpenSearchSQLParser.SELECT, +}; + +// These are keywords that we do not want to show in autocomplete +function getIgnoredTokens(): number[] { + const tokens = []; + + const firstOperatorIndex = OpenSearchSQLParser.SLASH; + const lastOperatorIndex = OpenSearchSQLParser.ERROR_RECOGNITION; + for (let i = firstOperatorIndex; i <= lastOperatorIndex; i++) { + // We actually want Star to appear in autocomplete + tokens.push(i); + } + + // Ignoring functions for now, need custom logic for them later + const firstFunctionIndex = OpenSearchSQLParser.AVG; + const lastFunctionIndex = OpenSearchSQLParser.TRIM; + for (let i = firstFunctionIndex; i <= lastFunctionIndex; i++) { + tokens.push(i); + } + + const firstCommonFunctionIndex = OpenSearchSQLParser.ABS; + const lastCommonFunctionIndex = OpenSearchSQLParser.MATCH_BOOL_PREFIX; + for (let i = firstCommonFunctionIndex; i <= lastCommonFunctionIndex; i++) { + tokens.push(i); + } + + tokens.push(OpenSearchSQLParser.EOF); + + return tokens; +} + +const ignoredTokens = new Set(getIgnoredTokens()); + +const rulesToVisit = new Set([ + OpenSearchSQLParser.RULE_constant, + OpenSearchSQLParser.RULE_columnName, + OpenSearchSQLParser.RULE_tableName, + OpenSearchSQLParser.RULE_aggregateFunction, + OpenSearchSQLParser.RULE_scalarFunctionName, + OpenSearchSQLParser.RULE_specificFunction, + OpenSearchSQLParser.RULE_windowFunctionClause, + OpenSearchSQLParser.RULE_comparisonOperator, +]); + +class OpenSearchSqlSymbolTableVisitor + extends OpenSearchSQLParserVisitor<{}> + implements ISymbolTableVisitor { + symbolTable: c3.SymbolTable; + scope: c3.ScopedSymbol; + + constructor() { + super(); + this.symbolTable = new c3.SymbolTable('', { allowDuplicateSymbols: true }); + this.scope = this.symbolTable.addNewSymbolOfType(c3.ScopedSymbol, undefined); + } + + visitTableName = (context: TableNameContext): {} => { + try { + this.symbolTable.addNewSymbolOfType(TableSymbol, this.scope, context.getText()); + } catch (error) { + if (!(error instanceof c3.DuplicateSymbolError)) { + throw error; + } + } + + return this.visitChildren(context) as {}; + }; + + visitSelectElementAlias = (context: SelectElementsContext): {} => { + try { + this.symbolTable.addNewSymbolOfType(ColumnAliasSymbol, this.scope, context.uid().getText()); + } catch (error) { + if (!(error instanceof c3.DuplicateSymbolError)) { + throw error; + } + } + + return this.visitChildren(context) as {}; + }; +} + +function processVisitedRules( + rules: c3.CandidatesCollection['rules'], + cursorTokenIndex: number, + tokenStream: TokenStream +): ProcessVisitedRulesResult { + let suggestViewsOrTables: OpenSearchSqlAutocompleteResult['suggestViewsOrTables']; + let suggestAggregateFunctions = false; + let suggestScalarFunctions = false; + let shouldSuggestColumns = false; + let shouldSuggestColumnAliases = false; + let suggestValuesForColumn: string | undefined; + + for (const [ruleId, rule] of rules) { + switch (ruleId) { + case OpenSearchSQLParser.RULE_tableName: { + if ( + getPreviousToken( + tokenStream, + tokenDictionary, + cursorTokenIndex, + OpenSearchSQLParser.TABLES + ) + ) { + suggestViewsOrTables = TableOrViewSuggestion.TABLES; + } else { + suggestViewsOrTables = TableOrViewSuggestion.ALL; + } + break; + } + case OpenSearchSQLParser.RULE_aggregateFunction: { + suggestAggregateFunctions = true; + shouldSuggestColumns = true; + break; + } + case OpenSearchSQLParser.RULE_scalarFunctionName: { + suggestScalarFunctions = true; + break; + } + case OpenSearchSQLParser.RULE_columnName: { + shouldSuggestColumns = true; + if ( + rule.ruleList.includes(OpenSearchSQLParser.RULE_groupByElements) || + rule.ruleList.includes(OpenSearchSQLParser.RULE_orderByElement) + ) { + shouldSuggestColumnAliases = true; + } + break; + } + case OpenSearchSQLParser.RULE_constant: { + const previousToken = getPreviousToken( + tokenStream, + tokenDictionary, + cursorTokenIndex, + OpenSearchSQLLexer.ID + ); + if (previousToken) { + suggestValuesForColumn = previousToken.text; + } + break; + } + } + } + + return { + suggestViewsOrTables, + suggestAggregateFunctions, + suggestScalarFunctions, + shouldSuggestColumns, + shouldSuggestColumnAliases, + suggestValuesForColumn, + }; +} + +function getParseTree( + parser: OpenSearchSQLParser, + type?: TableQueryPosition['type'] | 'select' +): ParseTree { + if (!type) { + return parser.root(); + } + + switch (type) { + case 'from': + return parser.fromClause(); + case 'select': + return parser.selectStatement(); + default: + return parser.root(); + } +} + +function enrichAutocompleteResult( + baseResult: AutocompleteResultBase, + rules: c3.CandidatesCollection['rules'], + tokenStream: TokenStream, + cursorTokenIndex: number, + cursor: CursorPosition, + query: string +): OpenSearchSqlAutocompleteResult { + const { + shouldSuggestColumns, + shouldSuggestColumnAliases, + shouldSuggestConstraints, + ...suggestionsFromRules + } = processVisitedRules(rules, cursorTokenIndex, tokenStream); + const suggestTemplates = shouldSuggestTemplates(query, cursor); + const result: OpenSearchSqlAutocompleteResult = { + ...baseResult, + ...suggestionsFromRules, + suggestTemplates, + }; + const contextSuggestionsNeeded = + shouldSuggestColumns || shouldSuggestConstraints || shouldSuggestColumnAliases; + if (contextSuggestionsNeeded) { + const visitor = new OpenSearchSqlSymbolTableVisitor(); + const { tableContextSuggestion, suggestColumnAliases } = getContextSuggestions( + OpenSearchSQLLexer, + OpenSearchSQLParser, + visitor, + tokenDictionary, + getParseTree, + tokenStream, + cursor, + query + ); + + if (shouldSuggestColumns && tableContextSuggestion) { + result.suggestColumns = tableContextSuggestion; + } + + if (shouldSuggestColumnAliases && suggestColumnAliases) { + result.suggestColumnAliases = suggestColumnAliases; + } + } + + return result; +} + +export const openSearchSqlAutocompleteData: AutocompleteData< + OpenSearchSqlAutocompleteResult, + OpenSearchSQLLexer, + OpenSearchSQLParser +> = { + Lexer: OpenSearchSQLLexer, + Parser: OpenSearchSQLParser, + tokenDictionary, + ignoredTokens, + rulesToVisit, + getParseTree, + enrichAutocompleteResult, +}; diff --git a/src/plugins/data/public/antlr/opensearch_sql/parse.test.ts b/src/plugins/data/public/antlr/opensearch_sql/parse.test.ts new file mode 100644 index 000000000000..03e6bd38cf8a --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/parse.test.ts @@ -0,0 +1,84 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { CharStream, CommonTokenStream, Lexer as LexerType, Parser as ParserType } from 'antlr4ng'; +import { getCurrentStatement, shouldSuggestTemplates, createParser } from './parse'; // Update the path +import { CursorPosition, LexerConstructor, ParserConstructor } from '../shared/types'; +import { getCursorIndex } from '../shared/cursor'; + +jest.mock('../shared/cursor', () => ({ + getCursorIndex: jest.fn(), +})); + +jest.mock('antlr4ng', () => { + const actual = jest.requireActual('antlr4ng'); + return { + ...actual, + CharStream: { + fromString: jest.fn((input) => ({ input })), + }, + CommonTokenStream: jest.fn().mockImplementation((lexer) => ({ + lexer, + fill: jest.fn(), + })), + }; +}); + +describe('getCurrentStatement', () => { + it('should return the current statement and cursor index when there are no semicolons', () => { + const query = 'SELECT * FROM table'; + const cursorIndex = 10; + const result = getCurrentStatement(query, cursorIndex); + expect(result).toEqual({ statement: 'SELECT * FROM table', cursorIndex: 10 }); + }); + + it('should return the current statement and cursor index when there are semicolons', () => { + const query = 'SELECT * FROM table1; SELECT * FROM table2;'; + const cursorIndex = 25; + const result = getCurrentStatement(query, cursorIndex); + expect(result).toEqual({ statement: ' SELECT * FROM table2', cursorIndex: 4 }); + }); + + it('should handle the cursor at the start of the statement', () => { + const query = 'SELECT * FROM table1; SELECT * FROM table2;'; + const cursorIndex = 22; + const result = getCurrentStatement(query, cursorIndex); + expect(result).toEqual({ statement: ' SELECT * FROM table2', cursorIndex: 1 }); + }); +}); + +describe('shouldSuggestTemplates', () => { + it('should return true if the cursor is at the start of the query', () => { + const query = 'SELECT * FROM table'; + const cursor: CursorPosition = { line: 1, column: 0 }; + (getCursorIndex as jest.Mock).mockReturnValue(0); + const result = shouldSuggestTemplates(query, cursor); + expect(result).toBe(true); + }); + + it('should return true if the cursor is before the first keyword in the statement', () => { + const query = 'SELECT * FROM table'; + const cursor: CursorPosition = { line: 1, column: 1 }; + (getCursorIndex as jest.Mock).mockReturnValue(1); + const result = shouldSuggestTemplates(query, cursor); + expect(result).toBe(true); + }); + + it('should return true if the current statement is an explain statement', () => { + const query = 'EXPLAIN SELECT * FROM table'; + const cursor: CursorPosition = { line: 1, column: 8 }; + (getCursorIndex as jest.Mock).mockReturnValue(8); + const result = shouldSuggestTemplates(query, cursor); + expect(result).toBe(true); + }); + + it('should return false if the cursor is after the first keyword in the statement', () => { + const query = 'SELECT * FROM table'; + const cursor: CursorPosition = { line: 1, column: 10 }; + (getCursorIndex as jest.Mock).mockReturnValue(10); + const result = shouldSuggestTemplates(query, cursor); + expect(result).toBe(false); + }); +}); diff --git a/src/plugins/data/public/antlr/opensearch_sql/parse.ts b/src/plugins/data/public/antlr/opensearch_sql/parse.ts new file mode 100644 index 000000000000..5b639432e936 --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/parse.ts @@ -0,0 +1,55 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { CharStream, CommonTokenStream, Lexer as LexerType, Parser as ParserType } from 'antlr4ng'; +import { CursorPosition, LexerConstructor, ParserConstructor } from '../shared/types'; +import { getCursorIndex } from '../shared/cursor'; +const spaceSymbols = '(\\s|\r\n|\n|\r)+'; +const explainRegex = new RegExp(`^(${spaceSymbols})?explain${spaceSymbols}$`); +const multipleKeywordsRegex = new RegExp(`^(${spaceSymbols})?\\S+${spaceSymbols}`); + +export function getCurrentStatement( + query: string, + cursorIndex: number +): { statement: string; cursorIndex: number } { + const textBeforeCursor = query.slice(0, cursorIndex); + const textAfterCursor = query.slice(cursorIndex); + const semiColonBeforeIndex = textBeforeCursor.lastIndexOf(';'); + const semiColonAfterIndex = textAfterCursor.indexOf(';'); + const statementStartIndex = semiColonBeforeIndex > -1 ? semiColonBeforeIndex + 1 : 0; + const statementEndIndex = + semiColonAfterIndex > -1 ? semiColonAfterIndex + cursorIndex : query.length; + const statement = query.slice(statementStartIndex, statementEndIndex); + const newCursorIndex = cursorIndex - statementStartIndex; + + return { statement, cursorIndex: newCursorIndex }; +} + +// TODO Find a better way to suggestTemplates +export function shouldSuggestTemplates(query: string, cursor: CursorPosition): boolean { + const cursorIndex = getCursorIndex(query, cursor); + const currentStatement = getCurrentStatement(query, cursorIndex); + const currentStatementBeforeCursor = currentStatement.statement + .slice(0, currentStatement.cursorIndex) + .toLowerCase(); + + return Boolean( + cursorIndex === 0 || + // First keyword in statement + !currentStatementBeforeCursor.match(multipleKeywordsRegex) || + // Explain statement + currentStatementBeforeCursor.match(explainRegex) + ); +} + +export function createParser( + Lexer: LexerConstructor, + Parser: ParserConstructor

, + query: string +): P { + const parser = new Parser(new CommonTokenStream(new Lexer(CharStream.fromString(query)))); + parser.removeErrorListeners(); + return parser; +} diff --git a/src/plugins/data/public/antlr/opensearch_sql/sql_error_listener.test.ts b/src/plugins/data/public/antlr/opensearch_sql/sql_error_listener.test.ts new file mode 100644 index 000000000000..7b8ffb8c5764 --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/sql_error_listener.test.ts @@ -0,0 +1,71 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { ATNSimulator, Recognizer, Token } from 'antlr4ng'; +import { SqlErrorListener } from './sql_error_listerner'; // Update the path +import { getTokenPosition, TokenPosition } from '../shared/cursor'; + +jest.mock('../shared/cursor', () => ({ + getTokenPosition: jest.fn(), +})); + +describe('SqlErrorListener', () => { + let errorListener: SqlErrorListener; + const mockWhitespaceToken = 1; + + beforeEach(() => { + errorListener = new SqlErrorListener(mockWhitespaceToken); + }); + + it('should initialize with an empty errors array', () => { + expect(errorListener.errors).toEqual([]); + }); + + it('should add an error with token position when a token is provided', () => { + const mockToken = { line: 1, column: 1 } as Token; + const mockTokenPosition: TokenPosition = { + startLine: 1, + startColumn: 1, + endLine: 1, + endColumn: 5, + }; + (getTokenPosition as jest.Mock).mockReturnValue(mockTokenPosition); + + const mockRecognizer = {} as Recognizer; + + errorListener.syntaxError(mockRecognizer, mockToken, 1, 1, 'Syntax error'); + + expect(getTokenPosition).toHaveBeenCalledWith(mockToken, mockWhitespaceToken); + expect(errorListener.errors).toEqual([{ message: 'Syntax error', ...mockTokenPosition }]); + }); + + it('should add an error with start and end positions when no token is provided', () => { + const mockRecognizer = {} as Recognizer; + + errorListener.syntaxError(mockRecognizer, null, 1, 1, 'Syntax error'); + + expect(errorListener.errors).toEqual([ + { + message: 'Syntax error', + startLine: 1, + startColumn: 1, + endLine: 1, + endColumn: 1, + }, + ]); + }); + + it('should handle reportAmbiguity without errors', () => { + expect(() => errorListener.reportAmbiguity()).not.toThrow(); + }); + + it('should handle reportAttemptingFullContext without errors', () => { + expect(() => errorListener.reportAttemptingFullContext()).not.toThrow(); + }); + + it('should handle reportContextSensitivity without errors', () => { + expect(() => errorListener.reportContextSensitivity()).not.toThrow(); + }); +}); diff --git a/src/plugins/data/public/antlr/opensearch_sql/sql_error_listerner.ts b/src/plugins/data/public/antlr/opensearch_sql/sql_error_listerner.ts new file mode 100644 index 000000000000..6271eeb375e6 --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/sql_error_listerner.ts @@ -0,0 +1,47 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { ANTLRErrorListener, ATNSimulator, Recognizer, Token } from 'antlr4ng'; + +import { TokenPosition, getTokenPosition } from '../shared/cursor'; + +interface ParserSyntaxError extends TokenPosition { + message: string; +} + +export class SqlErrorListener implements ANTLRErrorListener { + errors: ParserSyntaxError[]; + whitespaceToken: number; + + constructor(whitespaceToken: number) { + this.errors = []; + this.whitespaceToken = whitespaceToken; + } + + syntaxError( + _recognizer: Recognizer, + token: S | null, + startLine: number, + startColumn: number, + message: string + ): void { + if (token) { + const tokenPosition = getTokenPosition(token, this.whitespaceToken); + this.errors.push({ message, ...tokenPosition }); + } else { + this.errors.push({ + message, + startLine, + startColumn, + endLine: startLine, + endColumn: startColumn, + }); + } + } + + reportAmbiguity(): void {} + reportAttemptingFullContext(): void {} + reportContextSensitivity(): void {} +} diff --git a/src/plugins/data/public/antlr/opensearch_sql/symbol_table.test.ts b/src/plugins/data/public/antlr/opensearch_sql/symbol_table.test.ts new file mode 100644 index 000000000000..df07637f910d --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/symbol_table.test.ts @@ -0,0 +1,95 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { + TableSymbol, + getTablesFromSymbolTable, + getUniqueTableSuggestions, + ColumnAliasSymbol, + getColumnAliasesFromSymbolTable, +} from './symbol_table'; // Update the path +import { SymbolTableVisitor } from '../shared/types'; + +describe('TableSymbol', () => { + it('should create a TableSymbol instance', () => { + const symbol = new TableSymbol('tableName', 'aliasName', undefined); + expect(symbol.name).toBe('tableName'); + expect(symbol.alias).toBe('aliasName'); + expect(symbol.type).toBeUndefined(); + }); + + it('should create a TableSymbol instance without alias', () => { + const symbol = new TableSymbol('tableName', undefined, undefined); + expect(symbol.name).toBe('tableName'); + expect(symbol.alias).toBeUndefined(); + expect(symbol.type).toBeUndefined(); + }); +}); + +describe('getUniqueTableSuggestions', () => { + it('should return unique table suggestions with aliases', () => { + const symbols = [ + new TableSymbol('table1', 'alias1'), + new TableSymbol('table1', 'alias2'), + new TableSymbol('table2'), + ]; + + const suggestions = getUniqueTableSuggestions(symbols); + expect(suggestions).toEqual([ + { name: 'table1', alias: 'alias1' }, + { name: 'table1', alias: 'alias2' }, + { name: 'table2' }, + ]); + }); + + it('should return unique table suggestions without aliases', () => { + const symbols = [new TableSymbol('table1'), new TableSymbol('table2')]; + + const suggestions = getUniqueTableSuggestions(symbols); + expect(suggestions).toEqual([{ name: 'table1' }, { name: 'table2' }]); + }); +}); + +describe('getTablesFromSymbolTable', () => { + it('should return table suggestions from the symbol table', () => { + const mockVisitor = ({ + symbolTable: { + getNestedSymbolsOfTypeSync: jest + .fn() + .mockReturnValue([new TableSymbol('table1', 'alias1'), new TableSymbol('table2')]), + }, + } as unknown) as SymbolTableVisitor; + + const tables = getTablesFromSymbolTable(mockVisitor); + expect(tables).toEqual([{ name: 'table1', alias: 'alias1' }, { name: 'table2' }]); + expect(mockVisitor.symbolTable.getNestedSymbolsOfTypeSync).toHaveBeenCalledWith(TableSymbol); + }); +}); + +describe('ColumnAliasSymbol', () => { + it('should create a ColumnAliasSymbol instance', () => { + const symbol = new ColumnAliasSymbol('columnName', undefined); + expect(symbol.name).toBe('columnName'); + expect(symbol.type).toBeUndefined(); + }); +}); + +describe('getColumnAliasesFromSymbolTable', () => { + it('should return column alias suggestions from the symbol table', () => { + const mockVisitor = ({ + symbolTable: { + getNestedSymbolsOfTypeSync: jest + .fn() + .mockReturnValue([new ColumnAliasSymbol('alias1'), new ColumnAliasSymbol('alias2')]), + }, + } as unknown) as SymbolTableVisitor; + + const aliases = getColumnAliasesFromSymbolTable(mockVisitor); + expect(aliases).toEqual([{ name: 'alias1' }, { name: 'alias2' }]); + expect(mockVisitor.symbolTable.getNestedSymbolsOfTypeSync).toHaveBeenCalledWith( + ColumnAliasSymbol + ); + }); +}); diff --git a/src/plugins/data/public/antlr/opensearch_sql/symbol_table.ts b/src/plugins/data/public/antlr/opensearch_sql/symbol_table.ts new file mode 100644 index 000000000000..460b51d8c5f9 --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/symbol_table.ts @@ -0,0 +1,68 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +/* eslint-disable max-classes-per-file */ + +import * as c3 from 'antlr4-c3'; +import { ColumnAliasSuggestion, SymbolTableVisitor, Table } from '../shared/types'; + +export class TableSymbol extends c3.TypedSymbol { + name: string; + alias: string | undefined; + + constructor(name: string, alias?: string, type?: c3.IType) { + super(name, type); + + this.name = name; + this.alias = alias; + } +} + +export function getUniqueTableSuggestions(symbols: TableSymbol[] = []): Table[] { + const suggestionsMap = symbols.reduce((acc, table) => { + const aliases = acc[table.name] ?? new Set(); + if (table.alias) { + aliases.add(table.alias); + } + + acc[table.name] = aliases; + return acc; + }, {} as Record>); + return Object.keys(suggestionsMap).reduce((acc, tableName) => { + const aliases = suggestionsMap[tableName] as Set; + if (aliases.size > 0) { + aliases?.forEach((alias) => { + acc.push({ name: tableName, alias }); + }); + } else { + acc.push({ name: tableName }); + } + + return acc; + }, [] as Table[]); +} + +export function getTablesFromSymbolTable(visitor: SymbolTableVisitor): Table[] { + const suggestions = visitor.symbolTable.getNestedSymbolsOfTypeSync(TableSymbol); + return getUniqueTableSuggestions(suggestions); +} + +export class ColumnAliasSymbol extends c3.TypedSymbol { + name: string; + + constructor(name: string, type?: c3.IType) { + super(name, type); + + this.name = name; + } +} + +export function getColumnAliasesFromSymbolTable( + visitor: SymbolTableVisitor +): ColumnAliasSuggestion[] { + return visitor.symbolTable + .getNestedSymbolsOfTypeSync(ColumnAliasSymbol) + .map(({ name }) => ({ name })); +} diff --git a/src/plugins/data/public/antlr/opensearch_sql/table.test.ts b/src/plugins/data/public/antlr/opensearch_sql/table.test.ts new file mode 100644 index 000000000000..566d4e208721 --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/table.test.ts @@ -0,0 +1,120 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { TokenStream, Token } from 'antlr4ng'; +import { + getClosingBracketIndex, + getTableQueryPosition, + getJoinIndex, + getPreviousToken, + TokenDictionary, +} from './table'; + +const mockTokenStream = (tokens: Array>): TokenStream => { + return { + size: tokens.length, + get: (index: number) => tokens[index] as Token, + } as TokenStream; +}; + +const tokenDictionary: TokenDictionary = { + SPACE: 1, + FROM: 2, + OPENING_BRACKET: 3, + CLOSING_BRACKET: 4, + JOIN: 5, + SEMICOLON: 6, + SELECT: 7, +}; + +describe('Autocomplete Utils', () => { + describe('getClosingBracketIndex', () => { + it('should return undefined if no closing bracket is found', () => { + const tokens = [ + { type: tokenDictionary.OPENING_BRACKET, start: 0 }, + { type: tokenDictionary.FROM, start: 1 }, + { type: tokenDictionary.SPACE, start: 2 }, + ]; + const tokenStream = mockTokenStream(tokens); + expect(getClosingBracketIndex(tokenStream, 0, tokenDictionary)).toBeUndefined(); + }); + }); + + describe('getTableQueryPosition', () => { + it('should return the table query position', () => { + const tokens = [ + { type: tokenDictionary.SPACE, start: 0 }, + { type: tokenDictionary.FROM, start: 1 }, + { type: tokenDictionary.SPACE, start: 2 }, + { type: tokenDictionary.CLOSING_BRACKET, start: 3 }, + { type: tokenDictionary.SEMICOLON, start: 4 }, + ]; + const tokenStream = mockTokenStream(tokens); + expect(getTableQueryPosition(tokenStream, 1, tokenDictionary)).toEqual({ + start: 1, + end: 3, + type: 'from', + joinTableQueryPosition: undefined, + selectTableQueryPosition: undefined, + }); + }); + + it('should return undefined if no FROM keyword is found', () => { + const tokens = [ + { type: tokenDictionary.SPACE, start: 0 }, + { type: tokenDictionary.SPACE, start: 1 }, + { type: tokenDictionary.CLOSING_BRACKET, start: 2 }, + ]; + const tokenStream = mockTokenStream(tokens); + expect(getTableQueryPosition(tokenStream, 1, tokenDictionary)).toBeUndefined(); + }); + }); + + describe('getJoinIndex', () => { + it('should return the index of the JOIN token', () => { + const tokens = [ + { type: tokenDictionary.SPACE, start: 0 }, + { type: tokenDictionary.JOIN, start: 1, stop: 1 }, + { type: tokenDictionary.SPACE, start: 2 }, + ]; + const tokenStream = mockTokenStream(tokens); + expect(getJoinIndex(tokenStream, 0, 3, tokenDictionary)).toEqual(2); + }); + + it('should return undefined if no JOIN token is found', () => { + const tokens = [ + { type: tokenDictionary.SPACE, start: 0 }, + { type: tokenDictionary.SPACE, start: 1 }, + ]; + const tokenStream = mockTokenStream(tokens); + expect(getJoinIndex(tokenStream, 0, 2, tokenDictionary)).toBeUndefined(); + }); + }); + + describe('getPreviousToken', () => { + it('should return the previous token of the specified type', () => { + const tokens = [ + { type: tokenDictionary.SPACE, start: 0 }, + { type: tokenDictionary.SELECT, start: 1 }, + { type: tokenDictionary.SPACE, start: 2 }, + ]; + const tokenStream = mockTokenStream(tokens); + expect(getPreviousToken(tokenStream, tokenDictionary, 2, tokenDictionary.SELECT)).toEqual( + tokens[1] + ); + }); + + it('should return undefined if no previous token of the specified type is found', () => { + const tokens = [ + { type: tokenDictionary.SPACE, start: 0 }, + { type: tokenDictionary.SPACE, start: 1 }, + ]; + const tokenStream = mockTokenStream(tokens); + expect( + getPreviousToken(tokenStream, tokenDictionary, 1, tokenDictionary.SELECT) + ).toBeUndefined(); + }); + }); +}); diff --git a/src/plugins/data/public/antlr/opensearch_sql/table.ts b/src/plugins/data/public/antlr/opensearch_sql/table.ts new file mode 100644 index 000000000000..976400728aa3 --- /dev/null +++ b/src/plugins/data/public/antlr/opensearch_sql/table.ts @@ -0,0 +1,320 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { TokenStream, Lexer as LexerType, Parser as ParserType, Token } from 'antlr4ng'; +import { createParser } from './parse'; +import { getColumnAliasesFromSymbolTable, getTablesFromSymbolTable } from './symbol_table'; +import { + AutocompleteResultBase, + CursorPosition, + GetParseTree, + LexerConstructor, + ParserConstructor, + SymbolTableVisitor, + TableContextSuggestion, +} from '../shared/types'; +import { findCursorTokenIndex } from '../shared/cursor'; + +export interface TokenDictionary { + SPACE: number; + FROM: number; + OPENING_BRACKET: number; + CLOSING_BRACKET: number; + JOIN: number; + SEMICOLON: number; + SELECT: number; +} + +export interface TableQueryPosition extends TableQueryPositionBase { + type: 'from' | 'alter' | 'insert' | 'update'; + joinTableQueryPosition?: TableQueryPositionBase; + selectTableQueryPosition?: TableQueryPositionBase; +} + +export interface TableQueryPositionBase { + start: number; + end: number; +} + +export interface ContextSuggestions { + tableContextSuggestion?: TableContextSuggestion; + suggestColumnAliases?: AutocompleteResultBase['suggestColumnAliases']; +} + +/** + * Finds the index of the closing bracket or semicolon in the token stream starting from a given index. + * @param tokenStream - The token stream to search within. + * @param tokenIndex - The index to start searching from. + * @param dictionary - The token dictionary containing token types. + * @returns The index of the closing bracket or semicolon or undefined if not found. + */ +export function getClosingBracketIndex( + tokenStream: TokenStream, + tokenIndex: number, + dictionary: TokenDictionary +): { cursorIndex: number; tokenIndex: number } | undefined { + let currentIndex = tokenIndex; + + while (currentIndex < tokenStream.size) { + const token = tokenStream.get(currentIndex); + + if (token.type === dictionary.CLOSING_BRACKET || token.type === dictionary.SEMICOLON) { + return { cursorIndex: token.start, tokenIndex: currentIndex }; + } + + if (token.type === dictionary.OPENING_BRACKET) { + return undefined; + } + + currentIndex++; + } + + const lastIndex = tokenStream.size - 1; + return { cursorIndex: tokenStream.get(lastIndex).start, tokenIndex: lastIndex }; +} + +/** + * Determines the position of a table query within the token stream. + * @param tokenStream - The token stream to search within. + * @param tokenIndex - The index to start searching from. + * @param dictionary - The token dictionary containing token types. + * @returns The position of the table query or undefined if not found. + */ +export function getTableQueryPosition( + tokenStream: TokenStream, + tokenIndex: number, + dictionary: TokenDictionary +): TableQueryPosition | undefined { + let currentIndex = tokenIndex; + let isAscending = false; + + // Go backward at first + while (currentIndex >= 0 && currentIndex < tokenStream.size) { + const token = tokenStream.get(currentIndex); + + // We don't want to check nested statement + if ( + token.type === dictionary.OPENING_BRACKET || + token.type === dictionary.CLOSING_BRACKET || + token.type === dictionary.SEMICOLON + ) { + if (isAscending) { + break; + } else { + currentIndex = tokenIndex; + isAscending = true; + } + } + + if (token.type === dictionary.FROM) { + const closingBracketIndex = getClosingBracketIndex(tokenStream, tokenIndex, dictionary); + + if (!closingBracketIndex) { + break; + } + + const joinIndex = getJoinIndex( + tokenStream, + currentIndex, + closingBracketIndex.tokenIndex, + dictionary + ); + const joinTableQueryPosition = joinIndex + ? ({ + start: joinIndex, + end: closingBracketIndex.cursorIndex, + } as const) + : undefined; + + const selectToken = getPreviousToken( + tokenStream, + dictionary, + closingBracketIndex.tokenIndex, + dictionary.SELECT + ); + const selectTableQueryPosition = selectToken + ? ({ + start: selectToken.start, + end: closingBracketIndex.cursorIndex, + } as const) + : undefined; + + return { + start: token.start, + end: closingBracketIndex.cursorIndex, + type: 'from', + joinTableQueryPosition, + selectTableQueryPosition, + }; + } + + if (isAscending) { + currentIndex++; + } else { + currentIndex--; + } + + // Go forward if nothing is found + if (currentIndex === -1) { + currentIndex = tokenIndex; + isAscending = true; + } + } + + // Could not find FROM, so we look for other keywords + currentIndex = tokenIndex; + while (currentIndex >= 0) { + const token = tokenStream.get(currentIndex); + + if (token.type === dictionary.SEMICOLON) { + return undefined; + } + + currentIndex--; + } + + return undefined; +} + +export function getJoinIndex( + tokenStream: TokenStream, + startIndex: number, + endIndex: number, + dictionary: TokenDictionary +): number | undefined { + let currentIndex = startIndex; + + while (currentIndex < endIndex) { + const token = tokenStream.get(currentIndex); + + if (token.type === dictionary.JOIN) { + return token.stop + 1; + } + + currentIndex++; + } + + return undefined; +} + +/** + * Finds the previous token of a specified type in the token stream starting from a given index. + * @param tokenStream - The token stream to search within. + * @param dictionary - The token dictionary containing token types. + * @param tokenIndex - The index to start searching from. + * @param tokenType - The type of token to search for. + * @returns The previous token of the specified type or undefined if not found. + */ +export function getPreviousToken( + tokenStream: TokenStream, + dictionary: TokenDictionary, + tokenIndex: number, + tokenType: number +): Token | undefined { + let currentIndex = tokenIndex - 1; + + while (currentIndex > -1) { + const token = tokenStream.get(currentIndex); + // This is the end of previous statement, so we want to exit + if (token.type === dictionary.SEMICOLON) { + return undefined; + } + + if (token.type === tokenType) { + return token; + } + + currentIndex--; + } + + return undefined; +} + +/** + * Generates context suggestions for autocomplete based on the given query and cursor position. + * @param Lexer - The lexer constructor. + * @param Parser - The parser constructor. + * @param symbolTableVisitor - The symbol table visitor. + * @param tokenDictionary - The token dictionary containing token types. + * @param getParseTree - The function to get the parse tree. + * @param tokenStream - The token stream of the query. + * @param cursor - The cursor position in the query. + * @param query - The SQL query string. + * @param explicitlyParseJoin - Whether to explicitly parse JOIN statements. + * @returns The context suggestions for autocomplete. + */ +export function getContextSuggestions( + Lexer: LexerConstructor, + Parser: ParserConstructor

, + symbolTableVisitor: SymbolTableVisitor, + tokenDictionary: TokenDictionary, + getParseTree: GetParseTree

, + tokenStream: TokenStream, + cursor: CursorPosition, + query: string, + explicitlyParseJoin?: boolean +): ContextSuggestions { + // The actual token index, without special logic for spaces + const actualCursorTokenIndex = findCursorTokenIndex( + tokenStream, + cursor, + tokenDictionary.SPACE, + true + ); + if (!actualCursorTokenIndex) { + throw new Error( + `Could not find actualCursorTokenIndex at Ln ${cursor.line}, Col ${cursor.column}` + ); + } + + const contextSuggestions: ContextSuggestions = {}; + const tableQueryPosition = getTableQueryPosition( + tokenStream, + actualCursorTokenIndex, + tokenDictionary + ); + + if (tableQueryPosition) { + const tableQuery = query.slice(tableQueryPosition.start, tableQueryPosition.end); + const parser = createParser(Lexer, Parser, tableQuery); + const parseTree = getParseTree(parser, tableQueryPosition.type); + + symbolTableVisitor.visit(parseTree); + + if (explicitlyParseJoin && tableQueryPosition.joinTableQueryPosition) { + const joinTableQuery = query.slice( + tableQueryPosition.joinTableQueryPosition.start, + tableQueryPosition.joinTableQueryPosition.end + ); + const joinParser = createParser(Lexer, Parser, joinTableQuery); + const joinParseTree = getParseTree(joinParser, 'from'); + symbolTableVisitor.visit(joinParseTree); + } + + if (tableQueryPosition.selectTableQueryPosition) { + const selectTableQuery = query.slice( + tableQueryPosition.selectTableQueryPosition.start, + tableQueryPosition.selectTableQueryPosition.end + ); + const selectParser = createParser(Lexer, Parser, selectTableQuery); + const selectParseTree = getParseTree(selectParser, 'select'); + symbolTableVisitor.visit(selectParseTree); + } + + const tables = getTablesFromSymbolTable(symbolTableVisitor); + if (tables.length) { + contextSuggestions.tableContextSuggestion = { + tables, + }; + } + + const columnAliases = getColumnAliasesFromSymbolTable(symbolTableVisitor); + if (columnAliases.length) { + contextSuggestions.suggestColumnAliases = columnAliases.map(({ name }) => ({ name })); + } + } + + return contextSuggestions; +} diff --git a/src/plugins/data/public/antlr/shared/cursor.test.ts b/src/plugins/data/public/antlr/shared/cursor.test.ts new file mode 100644 index 000000000000..d2adac47ed3d --- /dev/null +++ b/src/plugins/data/public/antlr/shared/cursor.test.ts @@ -0,0 +1,65 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { CharStream, CommonTokenStream } from 'antlr4ng'; +import { findCursorTokenIndex } from './cursor'; +import { openSearchSqlAutocompleteData } from '../opensearch_sql/opensearch_sql_autocomplete'; +import { CursorPosition } from './types'; + +function getCursorIndex(query: string, cursor: CursorPosition): number | undefined { + const inputStream = CharStream.fromString(query); + const lexer = new openSearchSqlAutocompleteData.Lexer(inputStream); + const tokenStream = new CommonTokenStream(lexer); + const parser = new openSearchSqlAutocompleteData.Parser(tokenStream); + parser.removeErrorListeners(); + openSearchSqlAutocompleteData.getParseTree(parser); + + return findCursorTokenIndex( + tokenStream, + cursor, + openSearchSqlAutocompleteData.tokenDictionary.SPACE + ); +} + +describe('find correct cursor token index', () => { + test('returs correct cursorTokenIndex on empty query', () => { + const cursorTokenIndex = getCursorIndex('', { line: 1, column: 1 }); + + expect(cursorTokenIndex).toEqual(0); + }); + + test('returns correct cursorTokenIndex on start typing', () => { + const cursorTokenIndex = getCursorIndex('S', { line: 1, column: 2 }); + + expect(cursorTokenIndex).toEqual(0); + }); + + test('returs correct cursorTokenIndex on space', () => { + const cursorTokenIndex = getCursorIndex('SELECT ', { line: 1, column: 8 }); + + expect(cursorTokenIndex).toEqual(2); + }); + + test('returs correct cursorTokenIndex on word end', () => { + const cursorTokenIndex = getCursorIndex('SELECT', { line: 1, column: 7 }); + + expect(cursorTokenIndex).toEqual(0); + }); + + test('returs correct cursorTokenIndex on newline', () => { + const cursorTokenIndex = getCursorIndex('SELECT\n', { line: 2, column: 1 }); + + expect(cursorTokenIndex).toEqual(2); + }); + + test('returs correct cursorTokenIndex on big query', () => { + const cursorTokenIndex = getCursorIndex('SELECT * FROM test_table WHERE ', { + line: 1, + column: 32, + }); + + expect(cursorTokenIndex).toEqual(10); + }); +}); diff --git a/src/plugins/data/public/antlr/shared/cursor.ts b/src/plugins/data/public/antlr/shared/cursor.ts new file mode 100644 index 000000000000..032900a8bbd6 --- /dev/null +++ b/src/plugins/data/public/antlr/shared/cursor.ts @@ -0,0 +1,119 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { Token, TokenStream } from 'antlr4ng'; +import { ICandidateRule } from 'antlr4-c3'; +import { CursorPosition } from '../shared/types'; + +export interface TokenPosition { + startLine: number; + startColumn: number; + endLine: number; + endColumn: number; +} + +const possibleIdentifierPrefixRegex = /[\w]$/; + +export const lineSeparatorRegex = /\r\n|\n|\r/g; + +export function getTokenPosition(token: Token, whitespaceToken: number): TokenPosition { + const startColumn = token.column; + const endColumn = token.column + (token.text?.length || 0); + const startLine = token.line; + const endLine = + token.type !== whitespaceToken || !token.text + ? startLine + : startLine + (token.text.match(lineSeparatorRegex)?.length || 0); + + return { startColumn, startLine, endColumn, endLine }; +} + +export function findCursorTokenIndex( + tokenStream: TokenStream, + cursor: CursorPosition, + whitespaceToken: number, + actualIndex?: boolean +): number | undefined { + // Cursor position is 1-based, while token's charPositionInLine is 0-based + const cursorCol = cursor.column - 1; + + for (let i = 0; i < tokenStream.size; i++) { + const token = tokenStream.get(i); + const { startColumn, startLine, endColumn, endLine } = getTokenPosition(token, whitespaceToken); + + // endColumn makes sense only if startLine === endLine + if (endLine > cursor.line || (startLine === cursor.line && endColumn > cursorCol)) { + if (actualIndex) { + return i; + } + + if ( + i > 0 && + startLine === cursor.line && + startColumn === cursorCol && + // If previous token is an identifier (i.e. word, not a symbol), + // then we want to return previous token index + possibleIdentifierPrefixRegex.test(tokenStream.get(i - 1).text || '') + ) { + return i - 1; + } else if (tokenStream.get(i).type === whitespaceToken) { + return i + 1; + } + return i; + } + } + + return undefined; +} + +export function getCursorIndex(query: string, cursor: CursorPosition): number { + const lines = query.split(lineSeparatorRegex); + const separatorMatch = query.match(lineSeparatorRegex); + let separator: string | undefined = ''; + + if (separatorMatch) { + separator = separatorMatch[0]; + } + + let cursorIndex = 0; + + lines.reduce((text, line, index) => { + if (cursor.line - 1 === index) { + if (!text.length) { + cursorIndex = cursor.column - 1; + } else { + cursorIndex = text.length + cursor.column; + } + } + + if (index === 0) { + return line; + } + + return text + separator + line; + }, ''); + + return cursorIndex; +} + +/* +Sometimes a preferredRule is triggered multiple times, and we haven't found a case where we'd want it. +We only want it to be triggered only once. + +E.g. + +root: 'DROP' 'INDEX' indexName; +indexName: identifier 'test'; + +case TestParser.RULE_indexName: { + suggestIndexes = true; +} + +If we'll write 'DROP INDEX index_name', 'test' token will fire the preferredRule event, and we'll try to suggest indexes. +In this case we need to check if our RULE_indexName is being triggered at the first 'identifier', and not 'test'. And this function was created for that. +*/ +export function isStartingToWriteRule(cursorTokenIndex: number, rule: ICandidateRule): boolean { + return cursorTokenIndex === rule.startTokenIndex; +} diff --git a/src/plugins/data/public/antlr/shared/types.ts b/src/plugins/data/public/antlr/shared/types.ts new file mode 100644 index 000000000000..299cb8a3c37b --- /dev/null +++ b/src/plugins/data/public/antlr/shared/types.ts @@ -0,0 +1,124 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import * as c3 from 'antlr4-c3'; +import { + AbstractParseTreeVisitor, + CharStream, + CommonTokenStream, + ParseTree, + ParserRuleContext, + TokenStream, + Lexer as LexerType, + Parser as ParserType, +} from 'antlr4ng'; +import { TableQueryPosition, TokenDictionary } from '../opensearch_sql/table'; + +export interface AutocompleteResultBase { + errors: ParserSyntaxError[]; + suggestKeywords?: KeywordSuggestion[]; + suggestTemplates?: boolean; + suggestAggregateFunctions?: boolean; + suggestScalarFunctions?: boolean; + suggestColumns?: ColumnSuggestion; + suggestColumnAliases?: ColumnAliasSuggestion[]; + suggestDatabases?: boolean; + suggestValuesForColumn?: string; +} + +export interface ParserSyntaxError extends TokenPosition { + message: string; +} + +export interface TokenPosition { + startLine: number; + startColumn: number; + endLine: number; + endColumn: number; +} + +export interface KeywordSuggestion { + value: string; +} + +export type ColumnSuggestion = TableContextSuggestion; + +export interface TableContextSuggestion { + tables?: Table[]; +} + +export interface Table { + name: string; + alias?: string; +} + +export interface ColumnAliasSuggestion { + name: string; +} + +export type LexerConstructor = new (input: CharStream) => T; + +export type ParserConstructor = new (input: CommonTokenStream) => T; + +export type SymbolTableVisitorConstructor = new () => T; + +export type GetParseTree

= ( + parser: P, + type?: TableQueryPosition['type'] | 'select' +) => ParseTree; + +export type EnrichAutocompleteResult = ( + result: AutocompleteResultBase, + rules: c3.CandidatesCollection['rules'], + tokenStream: TokenStream, + cursorTokenIndex: number, + cursor: CursorPosition, + query: string +) => A; + +export interface CursorPosition { + line: number; + column: number; +} + +export interface OpenSearchSqlAutocompleteResult extends AutocompleteResultBase { + suggestViewsOrTables?: TableOrViewSuggestion; +} + +export enum TableOrViewSuggestion { + ALL = 'ALL', + TABLES = 'TABLES', + VIEWS = 'VIEWS', +} + +export type ConstraintSuggestion = TableContextSuggestion; + +export interface ISymbolTableVisitor { + symbolTable: c3.SymbolTable; + scope: c3.ScopedSymbol; +} + +export type SymbolTableVisitor = ISymbolTableVisitor & AbstractParseTreeVisitor<{}>; + +export interface AutocompleteData< + A extends AutocompleteResultBase, + L extends LexerType, + P extends ParserType +> { + Lexer: LexerConstructor; + Parser: ParserConstructor

; + getParseTree: GetParseTree

; + tokenDictionary: TokenDictionary; + ignoredTokens: Set; + rulesToVisit: Set; + enrichAutocompleteResult: EnrichAutocompleteResult; + context?: ParserRuleContext; +} + +export type ProcessVisitedRulesResult = Partial & { + shouldSuggestColumns?: boolean; + shouldSuggestColumnAliases?: boolean; + shouldSuggestConstraints?: boolean; +}; diff --git a/src/plugins/data/public/antlr/shared/utils.test.ts b/src/plugins/data/public/antlr/shared/utils.test.ts new file mode 100644 index 000000000000..d72fa0ab87a3 --- /dev/null +++ b/src/plugins/data/public/antlr/shared/utils.test.ts @@ -0,0 +1,159 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { of } from 'rxjs'; +import { getRawSuggestionData$, fetchData, fetchTableSchemas, fetchColumnValues } from './utils'; + +describe('getRawSuggestionData$', () => { + it('should return default request handler data when connection is undefined', (done) => { + const mockConnectionsService = { + getSelectedConnection$: jest.fn().mockReturnValue(of(undefined)), + }; + const mockDefaultRequestHandler = jest.fn().mockResolvedValue('defaultData'); + const mockDataSourceRequestHandler = jest.fn(); + + getRawSuggestionData$( + mockConnectionsService, + mockDataSourceRequestHandler, + mockDefaultRequestHandler + ).subscribe((result) => { + expect(result).toBe('defaultData'); + expect(mockDefaultRequestHandler).toHaveBeenCalled(); + expect(mockDataSourceRequestHandler).not.toHaveBeenCalled(); + done(); + }); + }); + + it('should return data source request handler data when connection is defined', (done) => { + const mockConnectionsService = { + getSelectedConnection$: jest.fn().mockReturnValue( + of({ + id: 'testId', + attributes: { title: 'testTitle' }, + }) + ), + }; + const mockDefaultRequestHandler = jest.fn(); + const mockDataSourceRequestHandler = jest.fn().mockResolvedValue('dataSourceData'); + + getRawSuggestionData$( + mockConnectionsService, + mockDataSourceRequestHandler, + mockDefaultRequestHandler + ).subscribe((result) => { + expect(result).toBe('dataSourceData'); + expect(mockDataSourceRequestHandler).toHaveBeenCalledWith({ + dataSourceId: 'testId', + title: 'testTitle', + }); + expect(mockDefaultRequestHandler).not.toHaveBeenCalled(); + done(); + }); + }); +}); + +describe('fetchData', () => { + it('should fetch data using the dataSourceRequestHandler', async () => { + const mockTables = ['table1', 'table2']; + const mockQueryFormatter = jest.fn((table) => ({ query: `formatted ${table}` })); + const mockApi = { + http: { + fetch: jest.fn().mockResolvedValue('fetchedData'), + }, + }; + const mockConnectionService = { + getSelectedConnection$: jest + .fn() + .mockReturnValue(of({ id: 'testId', attributes: { title: 'testTitle' } })), + }; + + const result = await fetchData(mockTables, mockQueryFormatter, mockApi, mockConnectionService); + expect(result).toEqual(['fetchedData', 'fetchedData']); + expect(mockApi.http.fetch).toHaveBeenCalledTimes(2); + }); + + it('should fetch data using the defaultRequestHandler', async () => { + const mockTables = ['table1', 'table2']; + const mockQueryFormatter = jest.fn((table) => ({ query: `formatted ${table}` })); + const mockApi = { + http: { + fetch: jest.fn().mockResolvedValue('fetchedData'), + }, + }; + const mockConnectionService = { + getSelectedConnection$: jest.fn().mockReturnValue(of(undefined)), + }; + + const result = await fetchData(mockTables, mockQueryFormatter, mockApi, mockConnectionService); + expect(result).toEqual(['fetchedData', 'fetchedData']); + expect(mockApi.http.fetch).toHaveBeenCalledTimes(2); + }); +}); + +describe('fetchTableSchemas', () => { + it('should fetch table schemas', async () => { + const mockApi = { + http: { + fetch: jest.fn().mockResolvedValue('schemaData'), + }, + }; + const mockConnectionService = { + getSelectedConnection$: jest + .fn() + .mockReturnValue(of({ id: 'testId', attributes: { title: 'testTitle' } })), + }; + + const result = await fetchTableSchemas(['table1'], mockApi, mockConnectionService); + expect(result).toEqual(['schemaData']); + expect(mockApi.http.fetch).toHaveBeenCalledWith({ + method: 'POST', + path: '/api/enhancements/search/sql', + body: JSON.stringify({ + query: { qs: 'DESCRIBE TABLES LIKE table1', format: 'jdbc' }, + df: { + meta: { + queryConfig: { + dataSourceId: 'testId', + title: 'testTitle', + }, + }, + }, + }), + }); + }); +}); + +describe('fetchColumnValues', () => { + it('should fetch column values', async () => { + const mockApi = { + http: { + fetch: jest.fn().mockResolvedValue('columnData'), + }, + }; + const mockConnectionService = { + getSelectedConnection$: jest + .fn() + .mockReturnValue(of({ id: 'testId', attributes: { title: 'testTitle' } })), + }; + + const result = await fetchColumnValues(['table1'], 'column1', mockApi, mockConnectionService); + expect(result).toEqual(['columnData']); + expect(mockApi.http.fetch).toHaveBeenCalledWith({ + method: 'POST', + path: '/api/enhancements/search/sql', + body: JSON.stringify({ + query: { qs: 'SELECT DISTINCT column1 FROM table1 LIMIT 10', format: 'jdbc' }, + df: { + meta: { + queryConfig: { + dataSourceId: 'testId', + title: 'testTitle', + }, + }, + }, + }), + }); + }); +}); diff --git a/src/plugins/data/public/antlr/shared/utils.ts b/src/plugins/data/public/antlr/shared/utils.ts new file mode 100644 index 000000000000..b2658b304e0f --- /dev/null +++ b/src/plugins/data/public/antlr/shared/utils.ts @@ -0,0 +1,118 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { from } from 'rxjs'; +import { distinctUntilChanged, switchMap } from 'rxjs/operators'; + +export interface IDataSourceRequestHandlerParams { + dataSourceId: string; + title: string; +} + +export const getRawSuggestionData$ = ( + connectionsService, + dataSourceReuqstHandler: ({ + dataSourceId, + title, + }: IDataSourceRequestHandlerParams) => Promise, + defaultReuqstHandler: () => any +) => + connectionsService.getSelectedConnection$().pipe( + distinctUntilChanged(), + switchMap((connection) => { + if (connection === undefined) { + return from(defaultReuqstHandler()); + } + const dataSourceId = connection?.id; + const title = connection?.attributes?.title; + return from(dataSourceReuqstHandler({ dataSourceId, title })); + }) + ); + +export const fetchData = ( + tables: string[], + queryFormatter: (table: string, dataSourceId?: string, title?: string) => any, + api, + connectionService +): Promise => { + return new Promise((resolve, reject) => { + getRawSuggestionData$( + connectionService, + ({ dataSourceId, title }) => { + return Promise.all( + tables.map(async (table) => { + const body = JSON.stringify(queryFormatter(table, dataSourceId, title)); + return api.http.fetch({ + method: 'POST', + path: '/api/enhancements/search/sql', + body, + }); + }) + ); + }, + () => { + return Promise.all( + tables.map(async (table) => { + const body = JSON.stringify(queryFormatter(table)); + return api.http.fetch({ + method: 'POST', + path: '/api/enhancements/search/sql', + body, + }); + }) + ); + } + ).subscribe({ + next: (dataFrames) => resolve(dataFrames), + error: (err) => { + // TODO: pipe error to UI + reject(err); + }, + }); + }); +}; + +export const fetchTableSchemas = (tables: string[], api, connectionService): Promise => { + return fetchData( + tables, + (table, dataSourceId, title) => ({ + query: { qs: `DESCRIBE TABLES LIKE ${table}`, format: 'jdbc' }, + df: { + meta: { + queryConfig: { + dataSourceId: dataSourceId || undefined, + title: title || undefined, + }, + }, + }, + }), + api, + connectionService + ); +}; + +export const fetchColumnValues = ( + tables: string[], + column: string, + api, + connectionService +): Promise => { + return fetchData( + tables, + (table, dataSourceId, title) => ({ + query: { qs: `SELECT DISTINCT ${column} FROM ${table} LIMIT 10`, format: 'jdbc' }, + df: { + meta: { + queryConfig: { + dataSourceId: dataSourceId || undefined, + title: title || undefined, + }, + }, + }, + }), + api, + connectionService + ); +}; diff --git a/src/plugins/data/public/autocomplete/providers/query_suggestion_provider.ts b/src/plugins/data/public/autocomplete/providers/query_suggestion_provider.ts index 80a7a7d1412a..a1a7aef8a5e0 100644 --- a/src/plugins/data/public/autocomplete/providers/query_suggestion_provider.ts +++ b/src/plugins/data/public/autocomplete/providers/query_suggestion_provider.ts @@ -28,6 +28,7 @@ * under the License. */ +import { monaco } from 'packages/osd-monaco/target'; import { IFieldType, IIndexPattern } from '../../../common/index_patterns'; export enum QuerySuggestionTypes { @@ -51,6 +52,8 @@ export interface QuerySuggestionGetFnArgs { selectionEnd: number; signal?: AbortSignal; boolFilter?: any; + position?: monaco.Position; + connectionService?: any; // will need to add type when ConnectionService is properly exposed from queryEnhancements } /** @public **/ diff --git a/src/plugins/data/public/plugin.ts b/src/plugins/data/public/plugin.ts index ea0470d0e1ae..ba1fbbf5abb1 100644 --- a/src/plugins/data/public/plugin.ts +++ b/src/plugins/data/public/plugin.ts @@ -93,6 +93,7 @@ import { DataSourceFactory } from './data_sources/datasource'; import { registerDefaultDataSource } from './data_sources/register_default_datasource'; import { DefaultDslDataSource } from './data_sources/default_datasource'; import { DEFAULT_DATA_SOURCE_TYPE } from './data_sources/constants'; +import { getSuggestions as getSQLSuggestions } from './antlr/opensearch_sql/code_completion'; declare module '../../ui_actions/public' { export interface ActionContextMapping { @@ -165,6 +166,9 @@ export class DataPublicPlugin const uiService = this.uiService.setup(core, {}); + const ac = this.autocomplete.setup(core); + ac.addQuerySuggestionProvider('SQL', getSQLSuggestions); + return { // TODO: MQL autocomplete: this.autocomplete.setup(core), diff --git a/src/plugins/data/public/ui/filter_bar/_global_filter_group.scss b/src/plugins/data/public/ui/filter_bar/_global_filter_group.scss index 9b25e874b190..d76aa88eaf98 100644 --- a/src/plugins/data/public/ui/filter_bar/_global_filter_group.scss +++ b/src/plugins/data/public/ui/filter_bar/_global_filter_group.scss @@ -1,6 +1,7 @@ // SASSTODO: Probably not the right file for this selector, but temporary until the files get re-organized .globalQueryBar { padding: 0 $euiSizeS $euiSizeS $euiSizeS; + height: 160px; } .globalQueryBar:first-child { diff --git a/src/plugins/data/public/ui/filter_bar/filter_editor/value_input_type.test.tsx b/src/plugins/data/public/ui/filter_bar/filter_editor/value_input_type.test.tsx new file mode 100644 index 000000000000..aa4f4b4cd213 --- /dev/null +++ b/src/plugins/data/public/ui/filter_bar/filter_editor/value_input_type.test.tsx @@ -0,0 +1,80 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import React from 'react'; +import { mountWithIntl } from 'test_utils/enzyme_helpers'; +import { ValueInputType } from './value_input_type'; + +let onChangeMock: any; + +describe('Value input type', () => { + beforeAll(() => { + onChangeMock = jest.fn(); + }); + it('is number', async () => { + const valueInputProps = { + value: 1, + type: 'number', + onChange: onChangeMock, + onBlur: () => {}, + placeholder: '', + }; + const component = mountWithIntl(); + expect(component.find('EuiFieldNumber').exists()).toBeTruthy(); + expect(component.find('EuiFieldNumber').prop('value')).toBe(1); + }); + + it('is string', async () => { + const valueInputProps = { + value: 'value', + type: 'string', + onChange: () => {}, + onBlur: () => {}, + placeholder: '', + }; + const component = mountWithIntl(); + expect(component.find('EuiFieldText').exists()).toBeTruthy(); + expect(component.find('EuiFieldText').prop('value')).toBe('value'); + }); + + it('is boolean', async () => { + const valueInputProps = { + value: 'true', + type: 'boolean', + onChange: () => {}, + onBlur: () => {}, + placeholder: '', + }; + const component = mountWithIntl(); + expect(component.find('EuiSelect').exists()).toBeTruthy(); + expect(component.find('EuiSelect').prop('value')).toBe('true'); + }); + + it('is date', async () => { + const valueInputProps = { + value: 'Jun 18, 2024 @ 12:01:55.000', + type: 'date', + onChange: () => {}, + onBlur: () => {}, + placeholder: '', + }; + const component = mountWithIntl(); + expect(component.find('EuiFieldText').exists()).toBeTruthy(); + expect(component.find('EuiFieldText').prop('value')).toBe('Jun 18, 2024 @ 12:01:55.000'); + }); + + it('is ip', async () => { + const valueInputProps = { + value: '127.0.0.1', + type: 'ip', + onChange: () => {}, + onBlur: () => {}, + placeholder: '', + }; + const component = mountWithIntl(); + expect(component.find('EuiFieldText').exists()).toBeTruthy(); + expect(component.find('EuiFieldText').prop('value')).toBe('127.0.0.1'); + }); +}); diff --git a/src/plugins/data/public/ui/filter_bar/filter_editor/value_input_type.tsx b/src/plugins/data/public/ui/filter_bar/filter_editor/value_input_type.tsx index 9d7709a5f667..fd1743e96c12 100644 --- a/src/plugins/data/public/ui/filter_bar/filter_editor/value_input_type.tsx +++ b/src/plugins/data/public/ui/filter_bar/filter_editor/value_input_type.tsx @@ -79,7 +79,7 @@ class ValueInputTypeUI extends Component { ? (value as BigInt).toString() : value } - onChange={this.onChange} + onChange={this.onNumberChange} controlOnly={this.props.controlOnly} className={this.props.className} /> @@ -151,6 +151,17 @@ class ValueInputTypeUI extends Component { this.props.onChange(boolValue); }; + private onNumberChange = (event: React.ChangeEvent) => { + const params = event.target.value; + let numValue; + if (typeof params === 'string') { + numValue = parseFloat(params); + } else if (typeof params === 'bigint') { + numValue = (params as BigInt).toString(); + } + this.props.onChange(numValue ?? params); + }; + private onChange = (event: React.ChangeEvent) => { const params = event.target.value; this.props.onChange(params); diff --git a/src/plugins/data/public/ui/query_editor/_language_switcher.scss b/src/plugins/data/public/ui/query_editor/_language_switcher.scss new file mode 100644 index 000000000000..176d072c102b --- /dev/null +++ b/src/plugins/data/public/ui/query_editor/_language_switcher.scss @@ -0,0 +1,8 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ +.languageSelect { + max-width: 150px; + transform: translateY(-1px) translateX(-0.5px); +} diff --git a/src/plugins/data/public/ui/query_editor/language_switcher.tsx b/src/plugins/data/public/ui/query_editor/language_switcher.tsx new file mode 100644 index 000000000000..be22ebffd775 --- /dev/null +++ b/src/plugins/data/public/ui/query_editor/language_switcher.tsx @@ -0,0 +1,102 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { EuiComboBox, EuiComboBoxOptionOption, PopoverAnchorPosition } from '@elastic/eui'; +import { i18n } from '@osd/i18n'; +import React from 'react'; +import { getSearchService, getUiService } from '../../services'; + +interface Props { + language: string; + onSelectLanguage: (newLanguage: string) => void; + anchorPosition?: PopoverAnchorPosition; + appName?: string; +} + +function mapExternalLanguageToOptions(language: string) { + return { + label: language, + value: language, + }; +} + +export function QueryLanguageSwitcher(props: Props) { + const dqlLabel = i18n.translate('data.query.queryBar.dqlLanguageName', { + defaultMessage: 'DQL', + }); + const luceneLabel = i18n.translate('data.query.queryBar.luceneLanguageName', { + defaultMessage: 'Lucene', + }); + + const languageOptions: EuiComboBoxOptionOption[] = [ + { + label: dqlLabel, + value: 'kuery', + }, + { + label: luceneLabel, + value: 'lucene', + }, + ]; + + const uiService = getUiService(); + const searchService = getSearchService(); + + const queryEnhancements = uiService.queryEnhancements; + if (uiService.isEnhancementsEnabled) { + queryEnhancements.forEach((enhancement) => { + if ( + enhancement.supportedAppNames && + props.appName && + !enhancement.supportedAppNames.includes(props.appName) + ) + return; + languageOptions.push(mapExternalLanguageToOptions(enhancement.language)); + }); + } + + const selectedLanguage = { + label: + (languageOptions.find( + (option) => (option.value as string).toLowerCase() === props.language.toLowerCase() + )?.label as string) ?? languageOptions[0].label, + }; + + const setSearchEnhance = (queryLanguage: string) => { + if (!uiService.isEnhancementsEnabled) return; + const queryEnhancement = queryEnhancements.get(queryLanguage); + searchService.__enhance({ + searchInterceptor: queryEnhancement + ? queryEnhancement.search + : searchService.getDefaultSearchInterceptor(), + }); + + if (!queryEnhancement) { + searchService.df.clear(); + } + uiService.Settings.setUiOverridesByUserQueryLanguage(queryLanguage); + }; + + const handleLanguageChange = (newLanguage: EuiComboBoxOptionOption[]) => { + const queryLanguage = newLanguage[0].value as string; + props.onSelectLanguage(queryLanguage); + setSearchEnhance(queryLanguage); + }; + + setSearchEnhance(props.language); + + return ( + + ); +} diff --git a/src/plugins/data/public/ui/query_editor/query_editor.tsx b/src/plugins/data/public/ui/query_editor/query_editor.tsx index 69d332c65c04..44d000de1e8f 100644 --- a/src/plugins/data/public/ui/query_editor/query_editor.tsx +++ b/src/plugins/data/public/ui/query_editor/query_editor.tsx @@ -36,6 +36,10 @@ import { fetchIndexPatterns } from './fetch_index_patterns'; import { QueryLanguageSelector } from './language_selector'; import { QueryEditorExtensions } from './query_editor_extensions'; import { QueryEditorBtnCollapse } from './query_editor_btn_collapse'; + +const LANGUAGE_ID = 'SQL'; +monaco.languages.register({ id: LANGUAGE_ID }); + export interface QueryEditorProps { indexPatterns: Array; dataSource?: DataSource; @@ -313,6 +317,60 @@ export default class QueryEditorUI extends Component { } }; + getCodeEditorSuggestionsType = (columnType: string) => { + switch (columnType) { + case 'text': + return monaco.languages.CompletionItemKind.Text; + case 'function': + return monaco.languages.CompletionItemKind.Function; + case 'object': + return monaco.languages.CompletionItemKind.Struct; + case 'field': + return monaco.languages.CompletionItemKind.Field; + case 'value': + return monaco.languages.CompletionItemKind.Value; + default: + return monaco.languages.CompletionItemKind.Text; + } + }; + + provideCompletionItems = async ( + model: monaco.editor.ITextModel, + position: monaco.Position + ): Promise => { + const wordUntil = model.getWordUntilPosition(position); + const wordRange = new monaco.Range( + position.lineNumber, + wordUntil.startColumn, + position.lineNumber, + wordUntil.endColumn + ); + const enhancements = this.props.settings.getQueryEnhancements(this.props.query.language); + const connectionService = enhancements?.connectionService; + const suggestions = await this.services.data.autocomplete.getQuerySuggestions({ + query: this.getQueryString(), + selectionStart: model.getOffsetAt(position), + selectionEnd: model.getOffsetAt(position), + language: this.props.query.language, + indexPatterns: this.state.indexPatterns, + position, + connectionService, + }); + + return { + suggestions: + suggestions && suggestions.length > 0 + ? suggestions.map((s) => ({ + label: s.text, + kind: this.getCodeEditorSuggestionsType(s.type), + insertText: s.text, + range: wordRange, + })) + : [], + incomplete: false, + }; + }; + editorDidMount = (editor: monaco.editor.IStandaloneCodeEditor) => { this.setState({ lineCount: editor.getModel()?.getLineCount() }); this.inputRef = editor; @@ -403,7 +461,7 @@ export default class QueryEditorUI extends Component {

@@ -462,7 +524,7 @@ export default class QueryEditorUI extends Component { {!this.state.isCollapsed && useQueryEditor && ( { wrappingIndent: 'indent', lineDecorationsWidth: 0, lineNumbersMinChars: 2, + wordBasedSuggestions: false, + }} + suggestionProvider={{ + provideCompletionItems: this.provideCompletionItems, }} /> )} diff --git a/src/plugins/data/public/ui/query_editor/query_editor_top_row.tsx b/src/plugins/data/public/ui/query_editor/query_editor_top_row.tsx index 8304fdc252ee..a482d7416418 100644 --- a/src/plugins/data/public/ui/query_editor/query_editor_top_row.tsx +++ b/src/plugins/data/public/ui/query_editor/query_editor_top_row.tsx @@ -15,6 +15,7 @@ import { import classNames from 'classnames'; import { compact, isEqual } from 'lodash'; import React, { useState } from 'react'; +import { createPortal } from 'react-dom'; import { DataSource, IDataPluginServices, @@ -64,6 +65,7 @@ export interface QueryEditorTopRowProps { isDirty: boolean; timeHistory?: TimeHistoryContract; indicateNoData?: boolean; + datePickerRef?: React.RefObject; } // Needed for React.lazy @@ -294,7 +296,7 @@ export default function QueryEditorTopRow(props: QueryEditorTopRowProps) { return ( - + {renderDatePicker()} {button} @@ -359,6 +361,14 @@ export default function QueryEditorTopRow(props: QueryEditorTopRowProps) { 'osdQueryEditor--withDatePicker': props.showDatePicker, }); + const datePicker = ( + + + {renderUpdateButton()} + + + ); + return ( - - - {renderUpdateButton()} - - + {props?.datePickerRef?.current && uiSettings.get(UI_SETTINGS.QUERY_ENHANCEMENTS_ENABLED) + ? createPortal(datePicker, props.datePickerRef.current) + : datePicker} {renderQueryEditor()} diff --git a/src/plugins/data/public/ui/query_string_input/query_bar_top_row.tsx b/src/plugins/data/public/ui/query_string_input/query_bar_top_row.tsx index 72b28830652b..3383df9d4e66 100644 --- a/src/plugins/data/public/ui/query_string_input/query_bar_top_row.tsx +++ b/src/plugins/data/public/ui/query_string_input/query_bar_top_row.tsx @@ -46,6 +46,7 @@ import { import { EuiSuperUpdateButton, OnRefreshProps, EuiText } from '@elastic/eui'; import { FormattedMessage } from '@osd/i18n/react'; import { Toast } from 'src/core/public'; +import { createPortal } from 'react-dom'; import { IDataPluginServices, IIndexPattern, TimeRange, TimeHistoryContract, Query } from '../..'; import { useOpenSearchDashboards, @@ -83,6 +84,7 @@ export interface QueryBarTopRowProps { isDirty: boolean; timeHistory?: TimeHistoryContract; indicateNoData?: boolean; + datePickerRef?: React.RefObject; } // Needed for React.lazy @@ -262,7 +264,7 @@ export default function QueryBarTopRow(props: QueryBarTopRowProps) { return ( - + {renderDatePicker()} {button} @@ -393,7 +395,11 @@ export default function QueryBarTopRow(props: QueryBarTopRowProps) { > {renderQueryInput()} {renderSharingMetaFields()} - {renderUpdateButton()} + + {props?.datePickerRef?.current && uiSettings.get(UI_SETTINGS.QUERY_ENHANCEMENTS_ENABLED) + ? createPortal(renderUpdateButton(), props.datePickerRef.current) + : renderUpdateButton()} + ); diff --git a/src/plugins/data/public/ui/query_string_input/query_string_input.tsx b/src/plugins/data/public/ui/query_string_input/query_string_input.tsx index dbbaad9cc3d2..4a0105343628 100644 --- a/src/plugins/data/public/ui/query_string_input/query_string_input.tsx +++ b/src/plugins/data/public/ui/query_string_input/query_string_input.tsx @@ -30,7 +30,6 @@ import React, { Component, RefObject, createRef } from 'react'; import { i18n } from '@osd/i18n'; - import classNames from 'classnames'; import { EuiCompressedTextArea, @@ -191,7 +190,6 @@ export default class QueryStringInputUI extends Component { selectionEnd, signal: this.abortController.signal, })) || []; - return [...suggestions, ...recentSearchSuggestions]; } catch (e) { // TODO: Waiting on https://github.com/elastic/kibana/issues/51406 for a properly typed error diff --git a/src/plugins/data/public/ui/search_bar/create_search_bar.tsx b/src/plugins/data/public/ui/search_bar/create_search_bar.tsx index 244f4296216c..31f3401dc76f 100644 --- a/src/plugins/data/public/ui/search_bar/create_search_bar.tsx +++ b/src/plugins/data/public/ui/search_bar/create_search_bar.tsx @@ -237,6 +237,7 @@ export function createSearchBar({ onClearSavedQuery={defaultOnClearSavedQuery(props, clearSavedQuery)} onSavedQueryUpdated={defaultOnSavedQueryUpdated(props, setSavedQuery)} onSaved={defaultOnSavedQueryUpdated(props, setSavedQuery)} + datePickerRef={props.datePickerRef} {...overrideDefaultBehaviors(props)} /> diff --git a/src/plugins/data/public/ui/search_bar/search_bar.tsx b/src/plugins/data/public/ui/search_bar/search_bar.tsx index 11914f134443..b2ff6766e81c 100644 --- a/src/plugins/data/public/ui/search_bar/search_bar.tsx +++ b/src/plugins/data/public/ui/search_bar/search_bar.tsx @@ -77,6 +77,7 @@ export interface SearchBarOwnProps { refreshInterval?: number; dateRangeFrom?: string; dateRangeTo?: string; + datePickerRef?: React.RefObject; // Query bar - should be in SearchBarInjectedDeps query?: Query; settings?: Settings; @@ -482,6 +483,7 @@ class SearchBarUI extends Component { } dataTestSubj={this.props.dataTestSubj} indicateNoData={this.props.indicateNoData} + datePickerRef={this.props.datePickerRef} /> ); } @@ -518,6 +520,7 @@ class SearchBarUI extends Component { filterBar={filterBar} dataTestSubj={this.props.dataTestSubj} indicateNoData={this.props.indicateNoData} + datePickerRef={this.props.datePickerRef} /> ); } diff --git a/src/plugins/data/public/ui/types.ts b/src/plugins/data/public/ui/types.ts index afa0c8130504..9beb78e8e6be 100644 --- a/src/plugins/data/public/ui/types.ts +++ b/src/plugins/data/public/ui/types.ts @@ -44,6 +44,7 @@ export interface QueryEnhancement { // List of supported app names that this enhancement should be enabled for, // if not provided it will be enabled for all apps supportedAppNames?: string[]; + connectionService?: any; // temporary workaround until we settle the way to reference the connection service } export interface UiEnhancements { diff --git a/src/plugins/data_explorer/public/components/__snapshots__/app_container.test.tsx.snap b/src/plugins/data_explorer/public/components/__snapshots__/app_container.test.tsx.snap index 29b8e5ab54e9..6e79926aa727 100644 --- a/src/plugins/data_explorer/public/components/__snapshots__/app_container.test.tsx.snap +++ b/src/plugins/data_explorer/public/components/__snapshots__/app_container.test.tsx.snap @@ -3,10 +3,14 @@ exports[`DataExplorerApp should render the canvas and panel when selected 1`] = `
-
- Context +
+
+ Context +
diff --git a/src/plugins/data_explorer/public/components/app_container.scss b/src/plugins/data_explorer/public/components/app_container.scss index 7bd5ed6f69f6..07f070be3b17 100644 --- a/src/plugins/data_explorer/public/components/app_container.scss +++ b/src/plugins/data_explorer/public/components/app_container.scss @@ -20,3 +20,13 @@ $osdHeaderOffset: $euiHeaderHeightCompensation; .headerIsExpanded .deLayout { height: calc(100vh - #{$osdHeaderOffset * 2}); } + +.mainPage { + overflow-x: hidden; + overflow-y: auto; + + .navBar { + padding: $euiSizeXS $euiSizeXS $euiSizeXS $euiSizeM; + border-bottom: $euiBorderThin; + } +} diff --git a/src/plugins/data_explorer/public/components/app_container.tsx b/src/plugins/data_explorer/public/components/app_container.tsx index bf4a02bd223b..d334fb2ae0d3 100644 --- a/src/plugins/data_explorer/public/components/app_container.tsx +++ b/src/plugins/data_explorer/public/components/app_container.tsx @@ -3,8 +3,15 @@ * SPDX-License-Identifier: Apache-2.0 */ -import React, { memo } from 'react'; -import { EuiPage, EuiPageBody, EuiResizableContainer, useIsWithinBreakpoints } from '@elastic/eui'; +import React, { memo, useRef } from 'react'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiPage, + EuiPageBody, + EuiResizableContainer, + useIsWithinBreakpoints, +} from '@elastic/eui'; import { Suspense } from 'react'; import { AppMountParameters } from '../../../../core/public'; import { Sidebar } from './sidebar'; @@ -12,11 +19,19 @@ import { NoView } from './no_view'; import { View } from '../services/view_service/view'; import { shallowEqual } from '../utils/use/shallow_equal'; import './app_container.scss'; +import { useOpenSearchDashboards } from '../../../opensearch_dashboards_react/public'; +import { IDataPluginServices } from '../../../data/public'; +import { QUERY_ENHANCEMENT_ENABLED_SETTING } from './constants'; export const AppContainer = React.memo( ({ view, params }: { view?: View; params: AppMountParameters }) => { const isMobile = useIsWithinBreakpoints(['xs', 's', 'm']); - // TODO: Make this more robust. + + const opensearchDashboards = useOpenSearchDashboards(); + const { uiSettings } = opensearchDashboards.services; + + const topLinkRef = useRef(null); + const datePickerRef = useRef(null); if (!view) { return ; } @@ -26,38 +41,67 @@ export const AppContainer = React.memo( const MemoizedPanel = memo(Panel); const MemoizedCanvas = memo(Canvas); + params.optionalRef = { + topLinkRef, + datePickerRef, + }; + // Render the application DOM. return ( - - {/* TODO: improve fallback state */} - Loading...
}> - - - {(EuiResizablePanel, EuiResizableButton) => ( - <> - - - - - - +
+ {uiSettings?.get(QUERY_ENHANCEMENT_ENABLED_SETTING) && ( + + +
+ + +
+ + + )} + + + {/* TODO: improve fallback state */} + Loading...
}> + + + {(EuiResizablePanel, EuiResizableButton) => ( + <> + + + + + + - - - - - - - )} - - - - + + + + + + + )} + + + + +
); }, (prevProps, nextProps) => { diff --git a/src/plugins/data_explorer/public/components/constants.ts b/src/plugins/data_explorer/public/components/constants.ts new file mode 100644 index 000000000000..85d0f9ec146b --- /dev/null +++ b/src/plugins/data_explorer/public/components/constants.ts @@ -0,0 +1,6 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +export const QUERY_ENHANCEMENT_ENABLED_SETTING = 'query:enhancements:enabled'; diff --git a/src/plugins/discover/common/index.ts b/src/plugins/discover/common/index.ts index 45887df880ae..b47e163a6c54 100644 --- a/src/plugins/discover/common/index.ts +++ b/src/plugins/discover/common/index.ts @@ -15,3 +15,4 @@ export const CONTEXT_DEFAULT_SIZE_SETTING = 'context:defaultSize'; export const CONTEXT_STEP_SETTING = 'context:step'; export const CONTEXT_TIE_BREAKER_FIELDS_SETTING = 'context:tieBreakerFields'; export const MODIFY_COLUMNS_ON_SWITCH = 'discover:modifyColumnsOnSwitch'; +export const QUERY_ENHANCEMENT_ENABLED_SETTING = 'query:enhancements:enabled'; diff --git a/src/plugins/discover/public/application/components/top_nav/get_top_nav_links.tsx b/src/plugins/discover/public/application/components/top_nav/get_top_nav_links.tsx index 592cc23afffc..3e0b00846930 100644 --- a/src/plugins/discover/public/application/components/top_nav/get_top_nav_links.tsx +++ b/src/plugins/discover/public/application/components/top_nav/get_top_nav_links.tsx @@ -29,7 +29,8 @@ import { OpenSearchPanel } from './open_search_panel'; export const getTopNavLinks = ( services: DiscoverViewServices, inspectorAdapters: Adapters, - savedSearch: SavedSearch + savedSearch: SavedSearch, + isEnhancementEnabled: boolean = false ) => { const { history, @@ -44,7 +45,7 @@ export const getTopNavLinks = ( osdUrlStateStorage, } = services; - const newSearch = { + const newSearch: TopNavMenuData = { id: 'new', label: i18n.translate('discover.localMenu.localMenu.newSearchTitle', { defaultMessage: 'New', @@ -61,6 +62,7 @@ export const getTopNavLinks = ( ariaLabel: i18n.translate('discover.topNav.discoverNewButtonLabel', { defaultMessage: `New Search`, }), + iconType: 'plusInCircle', }; const saveSearch: TopNavMenuData = { @@ -160,9 +162,10 @@ export const getTopNavLinks = ( ); showSaveModal(saveModal, core.i18n.Context); }, + iconType: 'save', }; - const openSearch = { + const openSearch: TopNavMenuData = { id: 'open', label: i18n.translate('discover.localMenu.openTitle', { defaultMessage: 'Open', @@ -190,6 +193,7 @@ export const getTopNavLinks = ( ) ); }, + iconType: 'folderOpen', }; const shareSearch: TopNavMenuData = { @@ -225,9 +229,10 @@ export const getTopNavLinks = ( isDirty: !savedSearch.id || state.isDirty || false, }); }, + iconType: 'share', }; - const inspectSearch = { + const inspectSearch: TopNavMenuData = { id: 'inspect', label: i18n.translate('discover.localMenu.inspectTitle', { defaultMessage: 'Inspect', @@ -244,15 +249,28 @@ export const getTopNavLinks = ( title: savedSearch?.title || undefined, }); }, + iconType: 'inspect', }; - return [ + const topNavLinksArray = [ newSearch, ...(capabilities.discover?.save ? [saveSearch] : []), openSearch, ...(share ? [shareSearch] : []), // Show share option only if share plugin is available inspectSearch, ]; + + if (!isEnhancementEnabled) { + return topNavLinksArray.map((topNavLink) => { + if (topNavLink) { + const { iconType, ...rest } = topNavLink; // Removing the Icon Type property to maintain consistency with older Nav Bar + return rest; + } + return topNavLink; + }); + } + + return topNavLinksArray; }; // TODO: This does not seem to affect the share menu. need to look into it in future diff --git a/src/plugins/discover/public/application/view_components/canvas/discover_canvas.scss b/src/plugins/discover/public/application/view_components/canvas/discover_canvas.scss index 2c2c8dfe8ebb..e0ab20a15296 100644 --- a/src/plugins/discover/public/application/view_components/canvas/discover_canvas.scss +++ b/src/plugins/discover/public/application/view_components/canvas/discover_canvas.scss @@ -45,3 +45,9 @@ } } } + +.topNav { + .hidden { + display: none; + } +} diff --git a/src/plugins/discover/public/application/view_components/canvas/index.tsx b/src/plugins/discover/public/application/view_components/canvas/index.tsx index 5c5fcb358600..54489824227e 100644 --- a/src/plugins/discover/public/application/view_components/canvas/index.tsx +++ b/src/plugins/discover/public/application/view_components/canvas/index.tsx @@ -25,14 +25,18 @@ import { setColumns, useDispatch, useSelector } from '../../utils/state_manageme import { DiscoverViewServices } from '../../../build_services'; import { useOpenSearchDashboards } from '../../../../../opensearch_dashboards_react/public'; import { filterColumns } from '../utils/filter_columns'; -import { DEFAULT_COLUMNS_SETTING, MODIFY_COLUMNS_ON_SWITCH } from '../../../../common'; +import { + DEFAULT_COLUMNS_SETTING, + MODIFY_COLUMNS_ON_SWITCH, + QUERY_ENHANCEMENT_ENABLED_SETTING, +} from '../../../../common'; import { OpenSearchSearchHit } from '../../../application/doc_views/doc_views_types'; import { buildColumns } from '../../utils/columns'; import './discover_canvas.scss'; import { getNewDiscoverSetting, setNewDiscoverSetting } from '../../components/utils/local_storage'; // eslint-disable-next-line import/no-default-export -export default function DiscoverCanvas({ setHeaderActionMenu, history }: ViewProps) { +export default function DiscoverCanvas({ setHeaderActionMenu, history, optionalRef }: ViewProps) { const panelRef = useRef(null); const { data$, refetch$, indexPattern } = useDiscoverContext(); const { @@ -46,6 +50,7 @@ export default function DiscoverCanvas({ setHeaderActionMenu, history }: ViewPro columns: stateColumns !== undefined ? stateColumns : buildColumns([]), }; }); + const isEnhancementsEnabled = uiSettings.get(QUERY_ENHANCEMENT_ENABLED_SETTING); const filteredColumns = filterColumns( columns, indexPattern, @@ -171,12 +176,15 @@ export default function DiscoverCanvas({ setHeaderActionMenu, history }: ViewPro className="dscCanvas" > + {fetchState.status === ResultStatus.NO_RESULTS && ( )} diff --git a/src/plugins/discover/public/application/view_components/canvas/top_nav.tsx b/src/plugins/discover/public/application/view_components/canvas/top_nav.tsx index adb4152cc40f..b6547e1b00a4 100644 --- a/src/plugins/discover/public/application/view_components/canvas/top_nav.tsx +++ b/src/plugins/discover/public/application/view_components/canvas/top_nav.tsx @@ -5,6 +5,8 @@ import React, { useEffect, useMemo, useState } from 'react'; import { Query, TimeRange } from 'src/plugins/data/common'; +import { createPortal } from 'react-dom'; +import { EuiButtonIcon, EuiFlexGroup, EuiFlexItem, EuiToolTip } from '@elastic/eui'; import { AppMountParameters } from '../../../../../../core/public'; import { connectStorageToQueryState, opensearchFilters } from '../../../../../data/public'; import { useOpenSearchDashboards } from '../../../../../opensearch_dashboards_react/public'; @@ -15,16 +17,19 @@ import { getTopNavLinks } from '../../components/top_nav/get_top_nav_links'; import { getRootBreadcrumbs } from '../../helpers/breadcrumbs'; import { useDiscoverContext } from '../context'; import { useDispatch, setSavedQuery, useSelector } from '../../utils/state_management'; +import './discover_canvas.scss'; export interface TopNavProps { opts: { setHeaderActionMenu: AppMountParameters['setHeaderActionMenu']; onQuerySubmit: (payload: { dateRange: TimeRange; query?: Query }, isUpdate?: boolean) => void; + optionalRef?: Record>; }; showSaveQuery: boolean; + isEnhancementsEnabled?: boolean; } -export const TopNav = ({ opts, showSaveQuery }: TopNavProps) => { +export const TopNav = ({ opts, showSaveQuery, isEnhancementsEnabled }: TopNavProps) => { const { services } = useOpenSearchDashboards(); const { inspectorAdapters, savedSearch, indexPattern } = useDiscoverContext(); const [indexPatterns, setIndexPatterns] = useState(undefined); @@ -43,7 +48,9 @@ export const TopNav = ({ opts, showSaveQuery }: TopNavProps) => { osdUrlStateStorage, } = services; - const topNavLinks = savedSearch ? getTopNavLinks(services, inspectorAdapters, savedSearch) : []; + const topNavLinks = savedSearch + ? getTopNavLinks(services, inspectorAdapters, savedSearch, isEnhancementsEnabled) + : []; connectStorageToQueryState(services.data.query, osdUrlStateStorage, { filters: opensearchFilters.FilterStateStore.APP_STATE, @@ -88,22 +95,46 @@ export const TopNav = ({ opts, showSaveQuery }: TopNavProps) => { }; return ( - + <> + {isEnhancementsEnabled && + !!opts?.optionalRef?.topLinkRef?.current && + createPortal( + + {topNavLinks.map((topNavLink) => ( + + + { + topNavLink.run(event.currentTarget); + }} + iconType={topNavLink.iconType} + aria-label={topNavLink.ariaLabel} + /> + + + ))} + , + opts.optionalRef.topLinkRef.current + )} + + ); }; diff --git a/src/plugins/navigation/public/top_nav_menu/top_nav_menu.tsx b/src/plugins/navigation/public/top_nav_menu/top_nav_menu.tsx index c7aaa2763695..7bce0e01470d 100644 --- a/src/plugins/navigation/public/top_nav_menu/top_nav_menu.tsx +++ b/src/plugins/navigation/public/top_nav_menu/top_nav_menu.tsx @@ -55,6 +55,7 @@ export type TopNavMenuProps = StatefulSearchBarProps & showDataSourceMenu?: boolean; data?: DataPublicPluginStart; className?: string; + datePickerRef?: any; /** * If provided, the menu part of the component will be rendered as a portal inside the given mount point. * diff --git a/src/plugins/navigation/public/top_nav_menu/top_nav_menu_data.tsx b/src/plugins/navigation/public/top_nav_menu/top_nav_menu_data.tsx index 322ed11d6390..c7a3220a896e 100644 --- a/src/plugins/navigation/public/top_nav_menu/top_nav_menu_data.tsx +++ b/src/plugins/navigation/public/top_nav_menu/top_nav_menu_data.tsx @@ -30,7 +30,6 @@ import { EuiButtonProps } from '@elastic/eui'; import { EuiIconType } from '@elastic/eui/src/components/icon/icon'; -import { string } from 'mathjs'; export type TopNavMenuAction = (anchorElement: HTMLElement) => void; diff --git a/src/plugins/query_enhancements/public/plugin.tsx b/src/plugins/query_enhancements/public/plugin.tsx index 0ea557db8ce2..d65676b70e78 100644 --- a/src/plugins/query_enhancements/public/plugin.tsx +++ b/src/plugins/query_enhancements/public/plugin.tsx @@ -97,6 +97,7 @@ export class QueryEnhancementsPlugin visualizable: false, }, supportedAppNames: ['discover'], + connectionService: this.connectionsService, }, }, }); @@ -119,6 +120,7 @@ export class QueryEnhancementsPlugin }, showDocLinks: false, supportedAppNames: ['discover'], + connectionService: this.connectionsService, }, }, }); @@ -141,6 +143,7 @@ export class QueryEnhancementsPlugin }, showDocLinks: false, supportedAppNames: ['discover'], + connectionService: this.connectionsService, }, }, }); diff --git a/test/interpreter_functional/plugins/osd_tp_run_pipeline/package.json b/test/interpreter_functional/plugins/osd_tp_run_pipeline/package.json index ba4c2399729b..3cf395a0c1d5 100644 --- a/test/interpreter_functional/plugins/osd_tp_run_pipeline/package.json +++ b/test/interpreter_functional/plugins/osd_tp_run_pipeline/package.json @@ -12,7 +12,7 @@ "build": "../../../../scripts/use_node ../../../../scripts/remove.js './target' && tsc" }, "devDependencies": { - "@elastic/eui": "npm:@opensearch-project/oui@1.7.0", + "@elastic/eui": "npm:@opensearch-project/oui@1.8.0", "@osd/plugin-helpers": "1.0.0", "react": "^16.14.0", "react-dom": "^16.12.0", diff --git a/test/plugin_functional/plugins/osd_sample_panel_action/package.json b/test/plugin_functional/plugins/osd_sample_panel_action/package.json index 61b89d5b86f8..8f34041e1b86 100644 --- a/test/plugin_functional/plugins/osd_sample_panel_action/package.json +++ b/test/plugin_functional/plugins/osd_sample_panel_action/package.json @@ -12,7 +12,7 @@ "build": "../../../../scripts/use_node ../../../../scripts/remove.js './target' && tsc" }, "devDependencies": { - "@elastic/eui": "npm:@opensearch-project/oui@1.7.0", + "@elastic/eui": "npm:@opensearch-project/oui@1.8.0", "react": "^16.14.0", "typescript": "4.0.2" } diff --git a/test/plugin_functional/plugins/osd_tp_custom_visualizations/package.json b/test/plugin_functional/plugins/osd_tp_custom_visualizations/package.json index 594d0a7bbb9c..535595a76396 100644 --- a/test/plugin_functional/plugins/osd_tp_custom_visualizations/package.json +++ b/test/plugin_functional/plugins/osd_tp_custom_visualizations/package.json @@ -12,7 +12,7 @@ "build": "../../../../scripts/use_node ../../../../scripts/remove.js './target' && tsc" }, "devDependencies": { - "@elastic/eui": "npm:@opensearch-project/oui@1.7.0", + "@elastic/eui": "npm:@opensearch-project/oui@1.8.0", "@osd/plugin-helpers": "1.0.0", "react": "^16.14.0", "typescript": "4.0.2" diff --git a/yarn.lock b/yarn.lock index 40df4e10c215..fe0e220dae4c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -250,7 +250,22 @@ "@babel/helper-split-export-declaration" "^7.22.6" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": +"@babel/helper-create-class-features-plugin@^7.24.4": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.5.tgz#7d19da92c7e0cd8d11c09af2ce1b8e7512a6e723" + integrity sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-member-expression-to-functions" "^7.24.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.24.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.24.5" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== @@ -297,7 +312,14 @@ dependencies: "@babel/types" "^7.23.0" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.16.0", "@babel/helper-module-imports@^7.22.15": +"@babel/helper-member-expression-to-functions@^7.23.0", "@babel/helper-member-expression-to-functions@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.5.tgz#5981e131d5c7003c7d1fa1ad49e86c9b097ec475" + integrity sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA== + dependencies: + "@babel/types" "^7.24.5" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.16.0", "@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== @@ -327,7 +349,12 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== -"@babel/helper-remap-async-to-generator@^7.22.20": +"@babel/helper-plugin-utils@^7.24.0": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz#a924607dd254a65695e5bd209b98b902b3b2f11a" + integrity sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ== + +"@babel/helper-remap-async-to-generator@^7.22.20", "@babel/helper-remap-async-to-generator@^7.22.5": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== @@ -345,6 +372,15 @@ "@babel/helper-member-expression-to-functions" "^7.22.15" "@babel/helper-optimise-call-expression" "^7.22.5" +"@babel/helper-replace-supers@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz#7085bd19d4a0b7ed8f405c1ed73ccb70f323abc1" + integrity sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-member-expression-to-functions" "^7.23.0" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-simple-access@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" @@ -366,16 +402,33 @@ dependencies: "@babel/types" "^7.22.5" +"@babel/helper-split-export-declaration@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz#b9a67f06a46b0b339323617c8c6213b9055a78b6" + integrity sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q== + dependencies: + "@babel/types" "^7.24.5" + "@babel/helper-string-parser@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-string-parser@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" + integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== + "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== +"@babel/helper-validator-identifier@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz#918b1a7fa23056603506370089bd990d8720db62" + integrity sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA== + "@babel/helper-validator-option@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" @@ -647,10 +700,19 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.3.tgz#73380c632c095b03e8503c24fd38f95ad41ffacb" - integrity sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w== +"@babel/plugin-transform-class-static-block@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz#1a4653c0cf8ac46441ec406dece6e9bc590356a4" + integrity sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.24.4" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-transform-classes@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz#aaf4753aee262a232bbc95451b4bdf9599c65a0b" + integrity sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-compilation-targets" "^7.22.15" @@ -1216,6 +1278,15 @@ "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" +"@babel/types@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.5.tgz#7661930afc638a5383eb0c4aee59b74f38db84d7" + integrity sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ== + dependencies: + "@babel/helper-string-parser" "^7.24.1" + "@babel/helper-validator-identifier" "^7.24.5" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -1307,10 +1378,10 @@ resolved "https://registry.yarnpkg.com/@elastic/eslint-plugin-eui/-/eslint-plugin-eui-0.0.2.tgz#56b9ef03984a05cc213772ae3713ea8ef47b0314" integrity sha512-IoxURM5zraoQ7C8f+mJb9HYSENiZGgRVcG4tLQxE61yHNNRDXtGDWTZh8N1KIHcsqN1CEPETjuzBXkJYF/fDiQ== -"@elastic/eui@npm:@opensearch-project/oui@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@opensearch-project/oui/-/oui-1.7.0.tgz#f24cfb7fb4f18db607620919f70b4729b9ce27f9" - integrity sha512-HoWOS5kUbXoLn0I6+LC+V8aWblBTD2/x2kxvsvGQoBXXbfuWR+lphgqPdCetc4DCmvD/+jm0u3vRT2MYB6FQjw== +"@elastic/eui@npm:@opensearch-project/oui@1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@opensearch-project/oui/-/oui-1.8.0.tgz#5fc6526ad140cfb0ceb582a5008929bc87721245" + integrity sha512-gGhO9GVrmUEn6uFX9AGpEuSNuIw+fo2bChoX5i9eQnj7xGPnMn9KX6ytItocbA0dWZUiJKXiq0UdNOrg0+fSBg== dependencies: "@types/chroma-js" "^2.4.0" "@types/react-beautiful-dnd" "^13.1.3" @@ -1744,6 +1815,18 @@ "@hapi/bourne" "2.x.x" "@hapi/hoek" "9.x.x" +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -2634,6 +2717,11 @@ resolved "https://registry.yarnpkg.com/@percy/sdk-utils/-/sdk-utils-1.10.4.tgz#5cab2f29f75588372743713b634e0780abdc681e" integrity sha512-5MTB30SSKLMMX3Mc19Ig62stZJeKbEyRZpVj8df47GQB4s5vbB3qtRwy0cmJBwcbDZxU5LWYQABsfr9UdAKvVg== +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + "@popperjs/core@^2.4.0": version "2.11.4" resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.4.tgz#d8c7b8db9226d2d7664553a0741ad7d0397ee503" @@ -4383,11 +4471,33 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + ansi-wrap@0.1.0, ansi-wrap@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= +antlr4-c3@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/antlr4-c3/-/antlr4-c3-3.4.1.tgz#2c2973af98b7e1ed9b5ad1fea9c41aa78e34240f" + integrity sha512-YLO/ncwUp8w2GNK/lnsYXtMkd8izHCWjxtk7EaTGIZq07THfvI5aHDuhls/RctX3EYDlM9zeTKdqn54eLYNglQ== + dependencies: + antlr4ng "^3.0.1" + +antlr4ng-cli@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/antlr4ng-cli/-/antlr4ng-cli-2.0.0.tgz#4f86f3c3818a2170aa1041d4e1633b489af00131" + integrity sha512-oAt5OSSYhRQn1PgahtpAP4Vp3BApCoCqlzX7Q8ZUWWls4hX59ryYuu0t7Hwrnfk796OxP/vgIJaqxdltd/oEvQ== + +antlr4ng@^3.0.1, antlr4ng@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/antlr4ng/-/antlr4ng-3.0.4.tgz#71a47e6148ae75f72fa5f27fbed5ef3462815c7c" + integrity sha512-u1Ww6wVv9hq70E9AaYe5qW3ba8hvnjJdO3ZsKnb3iJWFV/medLEEhbyWwXCvvD2ef0ptdaiIUgmaazS/WE6uyQ== + any-base@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/any-base/-/any-base-1.1.0.tgz#ae101a62bc08a597b4c9ab5b7089d456630549fe" @@ -7062,6 +7172,19 @@ eachr@^4.5.0: dependencies: typechecker "^6.2.0" +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + ejs@^3.1.10: version "3.1.10" resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" @@ -8438,6 +8561,19 @@ foreground-child@^2.0.0: cross-spawn "^7.0.0" signal-exit "^3.0.2" +foreground-child@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.2.1.tgz#767004ccf3a5b30df39bed90718bab43fe0a59f7" + integrity sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + form-data@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" @@ -8746,6 +8882,17 @@ glob@7.2.0, glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glo once "^1.3.0" path-is-absolute "^1.0.0" +glob@^10.3.7: + version "10.4.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.1.tgz#0cfb01ab6a6b438177bfe6a58e2576f6efe909c2" + integrity sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + path-scurry "^1.11.1" + glob@~5.0.0: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" @@ -10345,6 +10492,15 @@ istanbul-reports@^3.0.2, istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +jackspeak@^3.1.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.0.tgz#a75763ff36ad778ede6a156d8ee8b124de445b4a" + integrity sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + jake@^10.8.5: version "10.8.5" resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" @@ -11540,6 +11696,11 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +lru-cache@^10.2.0: + version "10.2.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" + integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== + lru-cache@^4.0.0, lru-cache@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -11923,6 +12084,27 @@ minimalistic-crypto-utils@^1.0.1: dependencies: brace-expansion "^1.1.7" +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.4: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + +minimatch@~3.0.4: + version "3.0.8" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" + integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== + dependencies: + brace-expansion "^1.1.7" + minimist-options@4.1.0, minimist-options@^4.0.2: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -11970,6 +12152,11 @@ minipass@^5.0.0: resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + minizlib@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" @@ -13054,6 +13241,14 @@ path-root@^0.1.1: dependencies: path-root-regex "^0.1.0" +path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-to-regexp@^1.7.0: version "1.8.0" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" @@ -14581,6 +14776,13 @@ rimraf@^3.0.0, rimraf@^3.0.2, rimraf@~3.0.2: dependencies: glob "^7.1.3" +rimraf@^5.0.7: + version "5.0.7" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.7.tgz#27bddf202e7d89cb2e0381656380d1734a854a74" + integrity sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg== + dependencies: + glob "^10.3.7" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -14993,6 +15195,11 @@ signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + simple-git@^3.16.0: version "3.16.0" resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.16.0.tgz#421773e24680f5716999cc4a1d60127b4b6a9dec" @@ -15422,6 +15629,15 @@ string-similarity@^4.0.1: resolved "https://registry.yarnpkg.com/string-similarity/-/string-similarity-4.0.4.tgz#42d01ab0b34660ea8a018da8f56a3309bb8b2a5b" integrity sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ== +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -15448,14 +15664,14 @@ string-width@^3.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" string.prototype.matchall@^4.0.6: version "4.0.7" @@ -15526,6 +15742,13 @@ stringify-entities@^3.0.1: character-entities-legacy "^1.0.0" xtend "^4.0.0" +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@*: version "7.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" @@ -15561,12 +15784,12 @@ strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: - ansi-regex "^5.0.1" + ansi-regex "^6.0.1" strip-bom-string@1.X: version "1.0.0" @@ -17706,6 +17929,15 @@ workerpool@6.2.1: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" @@ -17723,14 +17955,14 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" wrappy@1: version "1.0.2"