diff --git a/.github/workflows/local_example.yml b/.github/workflows/local_example.yml
index 20c8e0ab1d3..04d6839db2a 100644
--- a/.github/workflows/local_example.yml
+++ b/.github/workflows/local_example.yml
@@ -59,12 +59,6 @@ jobs:
with:
go-version: 1.22.4
- - uses: actions/setup-node@v4
- if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.examples == 'true'
- with:
- # node-version should match package.json
- node-version: '20.12.2'
-
- name: Tune the OS
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.examples == 'true'
run: |
diff --git a/.github/workflows/region_example.yml b/.github/workflows/region_example.yml
index f73e8769c9a..e81abf25bbb 100644
--- a/.github/workflows/region_example.yml
+++ b/.github/workflows/region_example.yml
@@ -59,12 +59,6 @@ jobs:
with:
go-version: 1.22.4
- - uses: actions/setup-node@v4
- if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.examples == 'true'
- with:
- # node-version should match package.json
- node-version: '20.12.2'
-
- name: Tune the OS
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.examples == 'true'
run: |
diff --git a/.github/workflows/static_checks_etc.yml b/.github/workflows/static_checks_etc.yml
index 65e29b67ba6..7c09697fec2 100644
--- a/.github/workflows/static_checks_etc.yml
+++ b/.github/workflows/static_checks_etc.yml
@@ -91,6 +91,16 @@ jobs:
- 'bootstrap.sh'
- 'misc/git/hooks/asthelpers'
- '.github/workflows/static_checks_etc.yml'
+ astfmt:
+ - 'go/tools/astfmtgen/**'
+ - 'go/vt/sqlparser/**'
+ - 'Makefile'
+ - 'build.env'
+ - 'go.sum'
+ - 'go.mod'
+ - 'tools/**'
+ - 'bootstrap.sh'
+ - '.github/workflows/static_checks_etc.yml'
end_to_end:
- 'docker/**'
- 'test.go'
@@ -168,6 +178,11 @@ jobs:
if: steps.skip-workflow.outputs.skip-workflow == 'false' && (steps.changes.outputs.visitor == 'true' || steps.changes.outputs.go_files == 'true')
run: |
misc/git/hooks/asthelpers || exit 1
+
+ - name: check_ast_format_fast
+ if: steps.skip-workflow.outputs.skip-workflow == 'false' && (steps.changes.outputs.astfmt == 'true' || steps.changes.outputs.go_files == 'true')
+ run: |
+ ./tools/check_astfmtgen.sh || exit 1
- name: run ensure_bootstrap_version
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
diff --git a/.gitignore b/.gitignore
index 43f352d1b80..70ae13ad32d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -56,6 +56,8 @@ __debug_bin
/php/composer.phar
/php/vendor
+report*.xml
+
# vitess.io preview site
/preview-vitess.io/
diff --git a/.golangci.yml b/.golangci.yml
index 74c55100516..d20e7d1e9fd 100644
--- a/.golangci.yml
+++ b/.golangci.yml
@@ -3,6 +3,13 @@ run:
timeout: 10m
linters-settings:
+ depguard:
+ rules:
+ use_modern_packages:
+ list-mode: lax
+ deny:
+ - pkg: "math/rand$"
+ desc: Please use math/rand/v2
errcheck:
exclude: ./misc/errcheck_excludes.txt
goimports:
@@ -17,6 +24,7 @@ linters:
disable-all: true
enable:
# Defaults
+ - depguard
- errcheck
- govet
- ineffassign
diff --git a/changelog/19.0/19.0.0/release_notes.md b/changelog/19.0/19.0.0/release_notes.md
index 98603d4240a..0a3f33f0fd9 100644
--- a/changelog/19.0/19.0.0/release_notes.md
+++ b/changelog/19.0/19.0.0/release_notes.md
@@ -53,6 +53,10 @@ Vitess will however, continue to support importing from MySQL 5.7 into Vitess ev
#### Docker Image vitess/lite
+> [!CAUTION]
+> If you are using incremental backups, you must remain on the `vitess/lite` image, as the official MySQL image does not have `mysqlbinlog` installed.
+> See https://github.com/vitessio/vitess/issues/16281 for more information.
+
The `mysqld` binary is now deprecated in the `vitess/lite` Docker image and will be removed in a future release.
This means that the MySQL/Percona version specific image tags for the `vitess/lite` image are deprecated.
diff --git a/changelog/20.0/20.0.0/changelog.md b/changelog/20.0/20.0.0/changelog.md
index a0e08dd87c4..5db48db10fd 100644
--- a/changelog/20.0/20.0.0/changelog.md
+++ b/changelog/20.0/20.0.0/changelog.md
@@ -41,7 +41,6 @@
* `schemadiff` INSTANT DDL: impossible changes on tables with `FULLTEXT` index [#15725](https://github.com/vitessio/vitess/pull/15725)
* SchemaEngine: Ensure GetTableForPos returns table schema for "current" position by default [#15912](https://github.com/vitessio/vitess/pull/15912)
* [release-20.0-rc] Online DDL shadow table: rename referenced table name in self referencing FK (#16205) [#16208](https://github.com/vitessio/vitess/pull/16208)
- * [release-20.0] Online DDL shadow table: rename referenced table name in self referencing FK (#16205) [#16209](https://github.com/vitessio/vitess/pull/16209)
#### Query Serving
* Make connection killing resilient to MySQL hangs [#14500](https://github.com/vitessio/vitess/pull/14500)
* TxThrottler: dont throttle unless lag [#14789](https://github.com/vitessio/vitess/pull/14789)
@@ -83,9 +82,7 @@
* `schemadiff`: assume default collation for textual column when collation is undefined [#16000](https://github.com/vitessio/vitess/pull/16000)
* fix: remove keyspace when merging subqueries [#16019](https://github.com/vitessio/vitess/pull/16019)
* [release-20.0-rc] fix: rows affected count for multi table update for non-literal column value (#16181) [#16182](https://github.com/vitessio/vitess/pull/16182)
- * [release-20.0] fix: rows affected count for multi table update for non-literal column value (#16181) [#16183](https://github.com/vitessio/vitess/pull/16183)
* [release-20.0-rc] Handle Nullability for Columns from Outer Tables (#16174) [#16186](https://github.com/vitessio/vitess/pull/16186)
- * [release-20.0] Handle Nullability for Columns from Outer Tables (#16174) [#16187](https://github.com/vitessio/vitess/pull/16187)
#### TabletManager
* mysqlctl: Improve handling of the lock file [#15404](https://github.com/vitessio/vitess/pull/15404)
* Fix possible race in MySQL startup and vttablet in parallel [#15538](https://github.com/vitessio/vitess/pull/15538)
@@ -111,17 +108,10 @@
* VReplication: Take replication lag into account in VStreamManager healthcheck result processing [#15761](https://github.com/vitessio/vitess/pull/15761)
* VReplication: Improve workflow cancel/delete [#15977](https://github.com/vitessio/vitess/pull/15977)
* [release-20.0-rc] vtctldclient: Apply (Shard | Keyspace| Table) Routing Rules commands don't work (#16096) [#16125](https://github.com/vitessio/vitess/pull/16125)
- * [release-20.0] vtctldclient: Apply (Shard | Keyspace| Table) Routing Rules commands don't work (#16096) [#16126](https://github.com/vitessio/vitess/pull/16126)
* [release-20.0-rc] VReplication: Improve workflow cancel/delete (#15977) [#16130](https://github.com/vitessio/vitess/pull/16130)
- * [release-20.0] VReplication: Improve workflow cancel/delete (#15977) [#16131](https://github.com/vitessio/vitess/pull/16131)
- * [release-20.0] CI Bug: Rename shard name back to match existing workflow file for vreplication_migrate_vdiff2_convert_tz (#16148) [#16151](https://github.com/vitessio/vitess/pull/16151)
- * [release-20.0] CI flaky test: Fix flakiness in vreplication_migrate_vdiff2_convert_tz (#16180) [#16189](https://github.com/vitessio/vitess/pull/16189)
* [release-20.0-rc] VDiff CLI: Fix VDiff `show` bug (#16177) [#16199](https://github.com/vitessio/vitess/pull/16199)
- * [release-20.0] VDiff CLI: Fix VDiff `show` bug (#16177) [#16200](https://github.com/vitessio/vitess/pull/16200)
* [release-20.0-rc] VReplication: handle escaped identifiers in vschema when initializing sequence tables (#16169) [#16218](https://github.com/vitessio/vitess/pull/16218)
- * [release-20.0] VReplication: handle escaped identifiers in vschema when initializing sequence tables (#16169) [#16219](https://github.com/vitessio/vitess/pull/16219)
* [release-20.0-rc] VReplication Workflow: set state correctly when restarting workflow streams in the copy phase (#16217) [#16223](https://github.com/vitessio/vitess/pull/16223)
- * [release-20.0] VReplication Workflow: set state correctly when restarting workflow streams in the copy phase (#16217) [#16224](https://github.com/vitessio/vitess/pull/16224)
#### VTAdmin
* [VTAdmin API] Fix schema cache flag, add documentation [#15704](https://github.com/vitessio/vitess/pull/15704)
* [VTAdmin] Remove vtctld web link, improve local example (#15607) [#15824](https://github.com/vitessio/vitess/pull/15824)
@@ -133,7 +123,6 @@
#### vtexplain
* vtexplain: Fix setting up the column information [#15275](https://github.com/vitessio/vitess/pull/15275)
* vtexplain: Ensure memory topo is set up for throttler [#15279](https://github.com/vitessio/vitess/pull/15279)
- * [release-20.0] Fix `vtexplain` not handling `UNION` queries with `weight_string` results correctly. (#16129) [#16158](https://github.com/vitessio/vitess/pull/16158)
#### vttestserver
* Revert unwanted logging change to `vttestserver` [#15148](https://github.com/vitessio/vitess/pull/15148)
* use proper mysql version in the `vttestserver` images [#15235](https://github.com/vitessio/vitess/pull/15235)
@@ -159,18 +148,14 @@
* Validate go versions in Static Code Checks CI [#15932](https://github.com/vitessio/vitess/pull/15932)
* Add CODEOWNERS for tablet throttler and schemadiff [#16036](https://github.com/vitessio/vitess/pull/16036)
* [release-20.0-rc] Add DCO workflow (#16052) [#16057](https://github.com/vitessio/vitess/pull/16057)
- * [release-20.0] Add DCO workflow (#16052) [#16058](https://github.com/vitessio/vitess/pull/16058)
* [release-20.0-rc] Remove DCO workaround (#16087) [#16092](https://github.com/vitessio/vitess/pull/16092)
- * [release-20.0] Remove DCO workaround (#16087) [#16093](https://github.com/vitessio/vitess/pull/16093)
* Revert "[release-20.0-rc] Bump to `v20.0.0-SNAPSHOT` after the `v20.00-RC1` release (#16142)" [#16144](https://github.com/vitessio/vitess/pull/16144)
#### Docker
* Docker/vtadmin: Update node version [#16145](https://github.com/vitessio/vitess/pull/16145)
- * [release-20.0] Docker: Update node vtadmin version (#16147) [#16161](https://github.com/vitessio/vitess/pull/16161)
#### General
* [main] Upgrade the Golang version to `go1.22.1` [#15405](https://github.com/vitessio/vitess/pull/15405)
* Upgrade go version to go1.22.2 [#15642](https://github.com/vitessio/vitess/pull/15642)
* [main] Upgrade the Golang version to `go1.22.3` [#15865](https://github.com/vitessio/vitess/pull/15865)
- * [release-20.0] Upgrade the Golang version to `go1.22.4` [#16060](https://github.com/vitessio/vitess/pull/16060)
* [release-20.0-rc] [release-20.0] Upgrade the Golang version to `go1.22.4` (#16060) [#16064](https://github.com/vitessio/vitess/pull/16064)
#### Online DDL
* `onlineddl_scheduler` test: fix flakiness in artifact cleanup test [#15396](https://github.com/vitessio/vitess/pull/15396)
@@ -193,7 +178,6 @@
#### VTAdmin
* Bump vite from 4.5.2 to 4.5.3 in /web/vtadmin [#15634](https://github.com/vitessio/vitess/pull/15634)
* [release-20.0-rc] Update braces package (#16115) [#16119](https://github.com/vitessio/vitess/pull/16119)
- * [release-20.0] Update braces package (#16115) [#16120](https://github.com/vitessio/vitess/pull/16120)
#### web UI
* Remove highcharts dependency pt. 1 [#15970](https://github.com/vitessio/vitess/pull/15970)
### Documentation
@@ -202,9 +186,9 @@
#### Documentation
* Fix docs for unmanaged tablets [#15437](https://github.com/vitessio/vitess/pull/15437)
* [release-20.0-rc] Changelog 20.0: Fix broken links (#16048) [#16075](https://github.com/vitessio/vitess/pull/16075)
- * [release-20.0] Changelog 20.0: Fix broken links (#16048) [#16076](https://github.com/vitessio/vitess/pull/16076)
#### General
- * Add Shopify to `ADOPTERS.md` [#15853](https://github.com/vitessio/vitess/pull/15853)
+ * Add Shopify to `ADOPTERS.md` [#15853](https://github.com/vitessio/vitess/pull/15853)
+ * [release-20.0-rc] release notes: update dml related release notes (#16241) [#16246](https://github.com/vitessio/vitess/pull/16246)
#### Governance
* amend contributing guide to ban trivial contributions [#15618](https://github.com/vitessio/vitess/pull/15618)
* remove koz from active maintainer list [#15733](https://github.com/vitessio/vitess/pull/15733)
@@ -363,7 +347,6 @@
#### Docker
* Revert the removal of the MySQL binaries in the `vitess/lite` image [#16042](https://github.com/vitessio/vitess/pull/16042)
* [release-20.0-rc] Remove unnecessary Docker build workflows (#16196) [#16201](https://github.com/vitessio/vitess/pull/16201)
- * [release-20.0] Remove unnecessary Docker build workflows (#16196) [#16202](https://github.com/vitessio/vitess/pull/16202)
#### Examples
* Update env.sh so that is does not error when running on Mac [#15835](https://github.com/vitessio/vitess/pull/15835)
* Local Examples: Add --binary-as-hex=false flag to mysql alias [#15996](https://github.com/vitessio/vitess/pull/15996)
@@ -452,7 +435,6 @@
#### VTTablet
* Improve performance for `BaseShowTablesWithSizes` query. [#15713](https://github.com/vitessio/vitess/pull/15713)
* Do not load table stats when booting `vttablet`. [#15715](https://github.com/vitessio/vitess/pull/15715)
- * [release-20.0] Do not load table stats when booting `vttablet`. (#15715) [#16101](https://github.com/vitessio/vitess/pull/16101)
### Regression
#### Query Serving
* Fix routing rule query rewrite [#15253](https://github.com/vitessio/vitess/pull/15253)
@@ -461,9 +443,7 @@
* fix: derived table join column expression to be part of add join predicate on rewrite [#15956](https://github.com/vitessio/vitess/pull/15956)
* fix: insert on duplicate update to add list argument in the bind variables map [#15961](https://github.com/vitessio/vitess/pull/15961)
* [release-20.0-rc] fix: order by subquery planning (#16049) [#16133](https://github.com/vitessio/vitess/pull/16133)
- * [release-20.0] fix: order by subquery planning (#16049) [#16134](https://github.com/vitessio/vitess/pull/16134)
* [release-20.0-rc] feat: add a LIMIT 1 on EXISTS subqueries to limit network overhead (#16153) [#16192](https://github.com/vitessio/vitess/pull/16192)
- * [release-20.0] feat: add a LIMIT 1 on EXISTS subqueries to limit network overhead (#16153) [#16193](https://github.com/vitessio/vitess/pull/16193)
#### Throttler
* Enable 'heartbeat_on_demand_duration' in local/examples [#15204](https://github.com/vitessio/vitess/pull/15204)
#### vttestserver
@@ -485,9 +465,10 @@
* [release-20.0-rc] Code Freeze for `v20.0.0-RC1` [#16046](https://github.com/vitessio/vitess/pull/16046)
* Bump to `v21.0.0-SNAPSHOT` after the `v20.0.0-RC1` release [#16047](https://github.com/vitessio/vitess/pull/16047)
* [release-20.0-rc] Release of `v20.0.0-RC1` [#16137](https://github.com/vitessio/vitess/pull/16137)
- * [release-20.0] Copy `v20.0.0-RC1` release notes [#16141](https://github.com/vitessio/vitess/pull/16141)
* [release-20.0-rc] Bump to `v20.0.0-SNAPSHOT` after the `v20.0.0-RC1` release [#16142](https://github.com/vitessio/vitess/pull/16142)
* [release-20.0-rc] Bump to `v20.0.0-SNAPSHOT` after the `v20.0.0-RC1` release [#16146](https://github.com/vitessio/vitess/pull/16146)
+ * [release-20.0-rc] Release of `v20.0.0-RC2` [#16225](https://github.com/vitessio/vitess/pull/16225)
+ * [release-20.0-rc] Bump to `v20.0.0-SNAPSHOT` after the `v20.0.0-RC2` release [#16236](https://github.com/vitessio/vitess/pull/16236)
### Testing
#### Build/CI
* Rewrite _many_ tests to use vtctldclient invocations, mostly non-output related stuff [#15270](https://github.com/vitessio/vitess/pull/15270)
@@ -519,7 +500,6 @@
* Fix unit-test-runner bug [#15815](https://github.com/vitessio/vitess/pull/15815)
* test: Add tests for `go/ioutil` and refactor existing [#15885](https://github.com/vitessio/vitess/pull/15885)
* test: Add required tests for `vt/key`, `timer` and `cache/theine/bf` [#15976](https://github.com/vitessio/vitess/pull/15976)
- * [release-20.0] CI Summary Addition [#16172](https://github.com/vitessio/vitess/pull/16172)
#### Observability
* VStreamer: add throttled logs when row/result/vstreamers get throttled. [#14936](https://github.com/vitessio/vitess/pull/14936)
#### Query Serving
@@ -551,14 +531,10 @@
* VStreamer unit test: port remaining tests to new framework [#15366](https://github.com/vitessio/vitess/pull/15366)
* VReplication: Fix vtctldclient SwitchReads related bugs and move the TestBasicV2Workflows e2e test to vtctldclient [#15579](https://github.com/vitessio/vitess/pull/15579)
* VStreamer unit tests: refactor pending test [#15845](https://github.com/vitessio/vitess/pull/15845)
-#### VTCombo
- * [release-20.0] Fix flaky tests that use vtcombo (#16178) [#16213](https://github.com/vitessio/vitess/pull/16213)
#### VTorc
* Add missing tests for `go/vt/vtorc/collection` [#15070](https://github.com/vitessio/vitess/pull/15070)
#### vtctldclient
* Add tests for GetTablets partial results [#15829](https://github.com/vitessio/vitess/pull/15829)
-#### vtexplain
- * [release-20.0] Fix flakiness in `vtexplain` unit test case. (#16159) [#16168](https://github.com/vitessio/vitess/pull/16168)
#### vttestserver
* Add `no_scatter` flag to vttestserver [#15670](https://github.com/vitessio/vitess/pull/15670)
diff --git a/changelog/20.0/20.0.0/release_notes.md b/changelog/20.0/20.0.0/release_notes.md
index 7e1eda59da2..23aa3a79052 100644
--- a/changelog/20.0/20.0.0/release_notes.md
+++ b/changelog/20.0/20.0.0/release_notes.md
@@ -29,6 +29,9 @@
- [Delete with Multi Target Support](#delete-multi-target)
- [User Defined Functions Support](#udf-support)
- [Insert Row Alias Support](#insert-row-alias-support)
+ - **[VReplication](#vreplication)**
+ - [Multi-tenant Imports](#multi-tenant)
+ - [VDiff Support For OnlineDDL Migrations](#vdiff-online-ddl)
- **[Query Timeout](#query-timeout)**
- **[Flag changes](#flag-changes)**
- [`pprof-http` default change](#pprof-http-default)
@@ -238,7 +241,8 @@ Support is added for sharded update with limit.
Example: `update t1 set t1.foo = 'abc', t1.bar = 23 where t1.baz > 5 limit 1`
-More details about how it works is available in [MySQL Docs](https://dev.mysql.com/doc/refman/8.0/en/update.html)
+The support is built on performing a selection of primary keys and then performing an update with those primary keys.
+For query syntax, refer to the [MySQL Docs](https://dev.mysql.com/doc/refman/8.0/en/update.html)
#### Update with Multi Table Support
@@ -246,7 +250,8 @@ Support is added for sharded multi-table update with column update on single tar
Example: `update t1 join t2 on t1.id = t2.id join t3 on t1.col = t3.col set t1.baz = 'abc', t1.apa = 23 where t3.foo = 5 and t2.bar = 7`
-More details about how it works is available in [MySQL Docs](https://dev.mysql.com/doc/refman/8.0/en/update.html)
+The support is built on performing a selection of primary keys and then performing an update with those primary keys.
+For query syntax, refer to the [MySQL Docs](https://dev.mysql.com/doc/refman/8.0/en/update.html)
#### Update with Multi Target Support
@@ -254,7 +259,9 @@ Support is added for sharded multi table target update.
Example: `update t1 join t2 on t1.id = t2.id set t1.foo = 'abc', t2.bar = 23`
-More details about how it works is available in [MySQL Docs](https://dev.mysql.com/doc/refman/8.0/en/update.html)
+The support is built on performing a selection of primary keys from all target tables and
+then performing an update for each table with their selected primary keys.
+For query syntax, refer to the [MySQL Docs](https://dev.mysql.com/doc/refman/8.0/en/update.html)
#### Delete with Subquery Support
@@ -262,13 +269,17 @@ Support is added for sharded table delete with subquery
Example: `delete from t1 where id in (select col from t2 where foo = 32 and bar = 43)`
+The support is built by performing the uncorrelated subquery first and then providing the value for deletion.
+
#### Delete with Multi Target Support
Support is added for sharded multi table target delete.
Example: `delete t1, t3 from t1 join t2 on t1.id = t2.id join t3 on t1.col = t3.col`
-More details about how it works is available in [MySQL Docs](https://dev.mysql.com/doc/refman/8.0/en/delete.html)
+The support is built on performing a selection of primary keys from all target tables and
+then performing a delete operation for each table with their selected primary keys.
+For query syntax, refer to the [MySQL Docs](https://dev.mysql.com/doc/refman/8.0/en/delete.html)
#### User Defined Functions Support
@@ -289,7 +300,7 @@ Example:
- `insert into user(id, name, email) valies (100, 'Alice', 'alice@mail.com') as new on duplicate key update name = new.name, email = new.email`
- `insert into user(id, name, email) valies (100, 'Alice', 'alice@mail.com') as new(m, n, p) on duplicate key update name = n, email = p`
-More details about how it works is available in [MySQL Docs](https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html)
+For query syntax, refer to the [MySQL Docs](https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html)
### Query Timeout
On a query timeout, Vitess closed the connection using the `kill connection` statement. This leads to connection churn
@@ -328,6 +339,19 @@ The new flag `--querylog-sample-rate float` adds support for sampling queries ba
The new flag `--tablet-filter-tags StringMap` adds support to VTGate for filtering tablets by tablet tag key/values, specified as comma-separated list of key:values. The tags of a tablet are defined by the VTTablet flag `--init_tags`, which is also defined as a comma-separated list of key:values.
+### VReplication
+
+#### Multi-tenant Imports
+
+Support for multi-tenant imports has been added to `MoveTables`. If you have a multi-tenant architecture where each
+tenant has their own database, you can import the tenants using multiple `MoveTables` workfows, one per tenant.
+Each import is initiated with the new `--tenant-id` flag. The column name (and data type) need to be specified in
+the VSchema of the target keyspace.
+
+#### VDiff support for OnlineDDL migrations
+
+You can now run `VDiff`s on OnlineDDL schema change migrations, which are not yet cut over.
+
## Minor Changes
### New Stats
@@ -363,7 +387,7 @@ The vtadmin-web UI no longer has a dependency on highcharts for licensing reason
------------
The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/20.0/20.0.0/changelog.md).
-The release includes 441 merged Pull Requests.
+The release includes 419 merged Pull Requests.
Thanks to all our contributors: @Aoang, @Ari1009, @GuptaManan100, @Its-Maniaco, @Maniktherana, @VaibhavMalik4187, @ajm188, @aparajon, @app/dependabot, @app/github-actions, @app/vitess-bot, @arthurschreiber, @bddicken, @beingnoble03, @brendar, @crazeteam, @dbussink, @deepthi, @demmer, @derekperkins, @ejortegau, @frouioui, @harshit-gangal, @mattlord, @maxenglander, @mdlayher, @notfelineit, @pavedroad, @rafer, @rohit-nayak-ps, @rvrangel, @shlomi-noach, @systay, @timvaillancourt, @tycol7, @vitess-bot, @vmg, @wangweicugw, @whuang8, @yoheimuta
diff --git a/changelog/20.0/20.0.0/summary.md b/changelog/20.0/20.0.0/summary.md
index 6e09cc982ef..edb85a6a3e4 100644
--- a/changelog/20.0/20.0.0/summary.md
+++ b/changelog/20.0/20.0.0/summary.md
@@ -28,6 +28,9 @@
- [Delete with Multi Target Support](#delete-multi-target)
- [User Defined Functions Support](#udf-support)
- [Insert Row Alias Support](#insert-row-alias-support)
+ - **[VReplication](#vreplication)**
+ - [Multi-tenant Imports](#multi-tenant)
+ - [VDiff Support For OnlineDDL Migrations](#vdiff-online-ddl)
- **[Query Timeout](#query-timeout)**
- **[Flag changes](#flag-changes)**
- [`pprof-http` default change](#pprof-http-default)
@@ -237,7 +240,8 @@ Support is added for sharded update with limit.
Example: `update t1 set t1.foo = 'abc', t1.bar = 23 where t1.baz > 5 limit 1`
-More details about how it works is available in [MySQL Docs](https://dev.mysql.com/doc/refman/8.0/en/update.html)
+The support is built on performing a selection of primary keys and then performing an update with those primary keys.
+For query syntax, refer to the [MySQL Docs](https://dev.mysql.com/doc/refman/8.0/en/update.html)
#### Update with Multi Table Support
@@ -245,7 +249,8 @@ Support is added for sharded multi-table update with column update on single tar
Example: `update t1 join t2 on t1.id = t2.id join t3 on t1.col = t3.col set t1.baz = 'abc', t1.apa = 23 where t3.foo = 5 and t2.bar = 7`
-More details about how it works is available in [MySQL Docs](https://dev.mysql.com/doc/refman/8.0/en/update.html)
+The support is built on performing a selection of primary keys and then performing an update with those primary keys.
+For query syntax, refer to the [MySQL Docs](https://dev.mysql.com/doc/refman/8.0/en/update.html)
#### Update with Multi Target Support
@@ -253,7 +258,9 @@ Support is added for sharded multi table target update.
Example: `update t1 join t2 on t1.id = t2.id set t1.foo = 'abc', t2.bar = 23`
-More details about how it works is available in [MySQL Docs](https://dev.mysql.com/doc/refman/8.0/en/update.html)
+The support is built on performing a selection of primary keys from all target tables and
+then performing an update for each table with their selected primary keys.
+For query syntax, refer to the [MySQL Docs](https://dev.mysql.com/doc/refman/8.0/en/update.html)
#### Delete with Subquery Support
@@ -261,13 +268,17 @@ Support is added for sharded table delete with subquery
Example: `delete from t1 where id in (select col from t2 where foo = 32 and bar = 43)`
+The support is built by performing the uncorrelated subquery first and then providing the value for deletion.
+
#### Delete with Multi Target Support
Support is added for sharded multi table target delete.
Example: `delete t1, t3 from t1 join t2 on t1.id = t2.id join t3 on t1.col = t3.col`
-More details about how it works is available in [MySQL Docs](https://dev.mysql.com/doc/refman/8.0/en/delete.html)
+The support is built on performing a selection of primary keys from all target tables and
+then performing a delete operation for each table with their selected primary keys.
+For query syntax, refer to the [MySQL Docs](https://dev.mysql.com/doc/refman/8.0/en/delete.html)
#### User Defined Functions Support
@@ -288,7 +299,7 @@ Example:
- `insert into user(id, name, email) valies (100, 'Alice', 'alice@mail.com') as new on duplicate key update name = new.name, email = new.email`
- `insert into user(id, name, email) valies (100, 'Alice', 'alice@mail.com') as new(m, n, p) on duplicate key update name = n, email = p`
-More details about how it works is available in [MySQL Docs](https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html)
+For query syntax, refer to the [MySQL Docs](https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html)
### Query Timeout
On a query timeout, Vitess closed the connection using the `kill connection` statement. This leads to connection churn
@@ -327,6 +338,19 @@ The new flag `--querylog-sample-rate float` adds support for sampling queries ba
The new flag `--tablet-filter-tags StringMap` adds support to VTGate for filtering tablets by tablet tag key/values, specified as comma-separated list of key:values. The tags of a tablet are defined by the VTTablet flag `--init_tags`, which is also defined as a comma-separated list of key:values.
+### VReplication
+
+#### Multi-tenant Imports
+
+Support for multi-tenant imports has been added to `MoveTables`. If you have a multi-tenant architecture where each
+tenant has their own database, you can import the tenants using multiple `MoveTables` workfows, one per tenant.
+Each import is initiated with the new `--tenant-id` flag. The column name (and data type) need to be specified in
+the VSchema of the target keyspace.
+
+#### VDiff support for OnlineDDL migrations
+
+You can now run `VDiff`s on OnlineDDL schema change migrations, which are not yet cut over.
+
## Minor Changes
### New Stats
diff --git a/changelog/21.0/21.0.0/summary.md b/changelog/21.0/21.0.0/summary.md
index 1d894120cae..7946293f506 100644
--- a/changelog/21.0/21.0.0/summary.md
+++ b/changelog/21.0/21.0.0/summary.md
@@ -4,13 +4,14 @@
### Table of Contents
- **[Major Changes](#major-changes)**
- - **[Deletions](#deletions)**
+ - **[Deprecations and Deletions](#deprecations-and-deletions)**
- [Deletion of deprecated metrics](#metric-deletion)
+ - [VTTablet Flags](#vttablet-flags)
- **[Breaking changes](#breaking-changes)**
## Major Changes
-### Deletion
+### Deprecations and Deletions
#### Deletion of deprecated metrics
@@ -31,6 +32,9 @@ The following metrics that were deprecated in the previous release, have now bee
| `emergency_reparent_counts` |
| `planned_reparent_counts` |
| `reparent_shard_operation_timings` |
-
+#### VTTablet Flags
+
+- `queryserver-enable-settings-pool` flag, added in v15, has been on by default since v17.
+It is now deprecated and will be removed in a future release.
diff --git a/doc/internal/release/eol-process.md b/doc/internal/release/eol-process.md
index f1d2a343d0f..98af2218d68 100644
--- a/doc/internal/release/eol-process.md
+++ b/doc/internal/release/eol-process.md
@@ -6,7 +6,8 @@ To properly deprecate a major of Vitess follow the following steps:
- **Update the website documentation**
> - In the ['Releases' documentation](https://vitess.io/docs/releases/), the EOL version must be moved under the ['Archived Releases' section](https://vitess.io/docs/releases/#archived-releases).
> - The sidebar of the website must be changed. We need to remove the EOL version from it. To do so, we move the version folder onto the `archive` folder.
+ > - Add a redirect from the old URL to the new URL in `./layouts/index.redirects` under the `Redirect archived docs` section.
- **Delete the `Backport To: ...` label**
> - Delete the corresponding label for the EOL version, we do not want to motivate anymore backport to the EOL release branch.
- **Make proper announcement on Slack**
- > - Notify the community of this deprecation.
\ No newline at end of file
+ > - Notify the community of this deprecation.
diff --git a/examples/operator/101_initial_cluster.yaml b/examples/operator/101_initial_cluster.yaml
index 2fc7ebe6a92..de627c61c50 100644
--- a/examples/operator/101_initial_cluster.yaml
+++ b/examples/operator/101_initial_cluster.yaml
@@ -15,7 +15,7 @@ spec:
vtbackup: vitess/lite:latest
vtorc: vitess/lite:latest
mysqld:
- mysql80Compatible: mysql:8.0.30
+ mysql80Compatible: vitess/lite:latest
mysqldExporter: prom/mysqld-exporter:v0.11.0
cells:
- name: zone1
diff --git a/examples/operator/201_customer_tablets.yaml b/examples/operator/201_customer_tablets.yaml
index 25c9d26d892..5800a5e05df 100644
--- a/examples/operator/201_customer_tablets.yaml
+++ b/examples/operator/201_customer_tablets.yaml
@@ -11,7 +11,7 @@ spec:
vtbackup: vitess/lite:latest
vtorc: vitess/lite:latest
mysqld:
- mysql80Compatible: mysql:8.0.30
+ mysql80Compatible: vitess/lite:latest
mysqldExporter: prom/mysqld-exporter:v0.11.0
cells:
- name: zone1
diff --git a/examples/operator/302_new_shards.yaml b/examples/operator/302_new_shards.yaml
index 4caf35ed856..2e15bc40d28 100644
--- a/examples/operator/302_new_shards.yaml
+++ b/examples/operator/302_new_shards.yaml
@@ -11,7 +11,7 @@ spec:
vtbackup: vitess/lite:latest
vtorc: vitess/lite:latest
mysqld:
- mysql80Compatible: mysql:8.0.30
+ mysql80Compatible: vitess/lite:latest
mysqldExporter: prom/mysqld-exporter:v0.11.0
cells:
- name: zone1
diff --git a/examples/operator/306_down_shard_0.yaml b/examples/operator/306_down_shard_0.yaml
index adc22280490..4bdb694d678 100644
--- a/examples/operator/306_down_shard_0.yaml
+++ b/examples/operator/306_down_shard_0.yaml
@@ -11,7 +11,7 @@ spec:
vtbackup: vitess/lite:latest
vtorc: vitess/lite:latest
mysqld:
- mysql80Compatible: mysql:8.0.30
+ mysql80Compatible: vitess/lite:latest
mysqldExporter: prom/mysqld-exporter:v0.11.0
cells:
- name: zone1
diff --git a/examples/operator/401_scheduled_backups.yaml b/examples/operator/401_scheduled_backups.yaml
index 07eab98b69d..5cb0f6c3ea1 100644
--- a/examples/operator/401_scheduled_backups.yaml
+++ b/examples/operator/401_scheduled_backups.yaml
@@ -52,7 +52,7 @@ spec:
vtbackup: vitess/lite:latest
vtorc: vitess/lite:latest
mysqld:
- mysql80Compatible: mysql:8.0.30
+ mysql80Compatible: vitess/lite:latest
mysqldExporter: prom/mysqld-exporter:v0.11.0
cells:
- name: zone1
diff --git a/go/cmd/vtctldclient/command/vreplication/lookupvindex/lookupvindex.go b/go/cmd/vtctldclient/command/vreplication/lookupvindex/lookupvindex.go
index b703e873bd0..9650a52e8a5 100644
--- a/go/cmd/vtctldclient/command/vreplication/lookupvindex/lookupvindex.go
+++ b/go/cmd/vtctldclient/command/vreplication/lookupvindex/lookupvindex.go
@@ -291,7 +291,7 @@ func registerCommands(root *cobra.Command) {
create.Flags().StringSliceVar(&createOptions.TableOwnerColumns, "table-owner-columns", nil, "The columns to read from the owner table. These will be used to build the hash which gets stored as the keyspace_id value in the lookup table.")
create.MarkFlagRequired("table-owner-columns")
create.Flags().StringVar(&createOptions.TableName, "table-name", "", "The name of the lookup table. If not specified, then it will be created using the same name as the Lookup Vindex.")
- create.Flags().StringVar(&createOptions.TableVindexType, "table-vindex-type", "", "The primary vindex name/type to use for the lookup table, if the table-keyspace is sharded. This must match the name of a vindex defined in the table-keyspace. If no value is provided then the default type will be used based on the table-owner-columns types.")
+ create.Flags().StringVar(&createOptions.TableVindexType, "table-vindex-type", "", "The primary vindex name/type to use for the lookup table, if the table-keyspace is sharded. If no value is provided then the default type will be used based on the table-owner-columns types.")
create.Flags().BoolVar(&createOptions.IgnoreNulls, "ignore-nulls", false, "Do not add corresponding records in the lookup table if any of the owner table's 'from' fields are NULL.")
create.Flags().BoolVar(&createOptions.ContinueAfterCopyWithOwner, "continue-after-copy-with-owner", true, "Vindex will continue materialization after the backfill completes when an owner is provided.")
// VReplication specific flags.
diff --git a/go/flags/endtoend/vtcombo.txt b/go/flags/endtoend/vtcombo.txt
index 8d868e9f49c..fa9b3d6907e 100644
--- a/go/flags/endtoend/vtcombo.txt
+++ b/go/flags/endtoend/vtcombo.txt
@@ -298,7 +298,6 @@ Flags:
--queryserver-config-truncate-error-len int truncate errors sent to client if they are longer than this value (0 means do not truncate)
--queryserver-config-txpool-timeout duration query server transaction pool timeout, it is how long vttablet waits if tx pool is full (default 1s)
--queryserver-config-warn-result-size int query server result size warning threshold, warn if number of rows returned from vttablet for non-streaming queries exceeds this
- --queryserver-enable-settings-pool Enable pooling of connections with modified system settings (default true)
--queryserver-enable-views Enable views support in vttablet.
--queryserver_enable_online_ddl Enable online DDL. (default true)
--redact-debug-ui-queries redact full queries and bind variables from debug UI
diff --git a/go/flags/endtoend/vttablet.txt b/go/flags/endtoend/vttablet.txt
index d160968e014..40d686979c0 100644
--- a/go/flags/endtoend/vttablet.txt
+++ b/go/flags/endtoend/vttablet.txt
@@ -289,7 +289,6 @@ Flags:
--queryserver-config-truncate-error-len int truncate errors sent to client if they are longer than this value (0 means do not truncate)
--queryserver-config-txpool-timeout duration query server transaction pool timeout, it is how long vttablet waits if tx pool is full (default 1s)
--queryserver-config-warn-result-size int query server result size warning threshold, warn if number of rows returned from vttablet for non-streaming queries exceeds this
- --queryserver-enable-settings-pool Enable pooling of connections with modified system settings (default true)
--queryserver-enable-views Enable views support in vttablet.
--queryserver_enable_online_ddl Enable online DDL. (default true)
--redact-debug-ui-queries redact full queries and bind variables from debug UI
diff --git a/go/sqltypes/value.go b/go/sqltypes/value.go
index bb4e26d15e3..4dde979066b 100644
--- a/go/sqltypes/value.go
+++ b/go/sqltypes/value.go
@@ -861,7 +861,25 @@ var SQLEncodeMap [256]byte
// SQLDecodeMap is the reverse of SQLEncodeMap
var SQLDecodeMap [256]byte
+// encodeRef is a map of characters we use for escaping.
+// This doesn't include double quotes since we don't need
+// to escape that, as we always generate single quoted strings.
var encodeRef = map[byte]byte{
+ '\x00': '0',
+ '\'': '\'',
+ '\b': 'b',
+ '\n': 'n',
+ '\r': 'r',
+ '\t': 't',
+ 26: 'Z', // ctl-Z
+ '\\': '\\',
+}
+
+// decodeRef is a map of characters we use for unescaping.
+// We do need all characters here, since we do accept
+// escaped double quotes in single quote strings and
+// double quoted strings.
+var decodeRef = map[byte]byte{
'\x00': '0',
'\'': '\'',
'"': '"',
@@ -931,6 +949,11 @@ func init() {
for i := range SQLEncodeMap {
if to, ok := encodeRef[byte(i)]; ok {
SQLEncodeMap[byte(i)] = to
+ }
+ }
+
+ for i := range SQLDecodeMap {
+ if to, ok := decodeRef[byte(i)]; ok {
SQLDecodeMap[to] = byte(i)
}
}
diff --git a/go/sqltypes/value_test.go b/go/sqltypes/value_test.go
index 36a0f5a5090..c7bdf1234dd 100644
--- a/go/sqltypes/value_test.go
+++ b/go/sqltypes/value_test.go
@@ -380,7 +380,7 @@ func TestEncode(t *testing.T) {
outASCII: "'Zm9v'",
}, {
in: TestValue(VarChar, "\x00'\"\b\n\r\t\x1A\\"),
- outSQL: "'\\0\\'\\\"\\b\\n\\r\\t\\Z\\\\'",
+ outSQL: "'\\0\\'\"\\b\\n\\r\\t\\Z\\\\'",
outASCII: "'ACciCAoNCRpc'",
}, {
in: TestValue(Bit, "a"),
@@ -442,7 +442,7 @@ func TestEncodeStringSQL(t *testing.T) {
},
{
in: "\x00'\"\b\n\r\t\x1A\\",
- out: "'\\0\\'\\\"\\b\\n\\r\\t\\Z\\\\'",
+ out: "'\\0\\'\"\\b\\n\\r\\t\\Z\\\\'",
},
}
for _, tcase := range testcases {
@@ -632,7 +632,7 @@ func TestEncodeSQLStringBuilder(t *testing.T) {
outSQL: "'foo'",
}, {
in: TestValue(VarChar, "\x00'\"\b\n\r\t\x1A\\"),
- outSQL: "'\\0\\'\\\"\\b\\n\\r\\t\\Z\\\\'",
+ outSQL: "'\\0\\'\"\\b\\n\\r\\t\\Z\\\\'",
}, {
in: TestValue(Bit, "a"),
outSQL: "b'01100001'",
@@ -663,7 +663,7 @@ func TestEncodeSQLBytes2(t *testing.T) {
outSQL: "'foo'",
}, {
in: TestValue(VarChar, "\x00'\"\b\n\r\t\x1A\\"),
- outSQL: "'\\0\\'\\\"\\b\\n\\r\\t\\Z\\\\'",
+ outSQL: "'\\0\\'\"\\b\\n\\r\\t\\Z\\\\'",
}, {
in: TestValue(Bit, "a"),
outSQL: "b'01100001'",
diff --git a/go/test/endtoend/backup/vtctlbackup/backup_utils.go b/go/test/endtoend/backup/vtctlbackup/backup_utils.go
index 9227ce39516..a234082a4a2 100644
--- a/go/test/endtoend/backup/vtctlbackup/backup_utils.go
+++ b/go/test/endtoend/backup/vtctlbackup/backup_utils.go
@@ -21,7 +21,7 @@ import (
"context"
"encoding/json"
"fmt"
- "math/rand"
+ "math/rand/v2"
"os"
"os/exec"
"path"
@@ -1313,7 +1313,7 @@ func TestReplicaRestoreToPos(t *testing.T, replicaIndex int, restoreToPos replic
require.False(t, restoreToPos.IsZero())
restoreToPosArg := replication.EncodePosition(restoreToPos)
assert.Contains(t, restoreToPosArg, "MySQL56/")
- if rand.Intn(2) == 0 {
+ if rand.IntN(2) == 0 {
// Verify that restore works whether or not the MySQL56/ prefix is present.
restoreToPosArg = strings.Replace(restoreToPosArg, "MySQL56/", "", 1)
assert.NotContains(t, restoreToPosArg, "MySQL56/")
diff --git a/go/test/endtoend/reparent/prssettingspool/main_test.go b/go/test/endtoend/reparent/prssettingspool/main_test.go
index 872f1867c77..4364836841b 100644
--- a/go/test/endtoend/reparent/prssettingspool/main_test.go
+++ b/go/test/endtoend/reparent/prssettingspool/main_test.go
@@ -61,8 +61,6 @@ func TestMain(m *testing.M) {
Name: keyspaceName,
SchemaSQL: schemaSQL,
}
- clusterInstance.VtTabletExtraArgs = append(clusterInstance.VtTabletExtraArgs,
- "--queryserver-enable-settings-pool")
err = clusterInstance.StartUnshardedKeyspace(*keyspace, 2, false)
if err != nil {
return 1
diff --git a/go/test/endtoend/vreplication/helper_test.go b/go/test/endtoend/vreplication/helper_test.go
index eca4c312ae7..b45c09837c9 100644
--- a/go/test/endtoend/vreplication/helper_test.go
+++ b/go/test/endtoend/vreplication/helper_test.go
@@ -18,11 +18,12 @@ package vreplication
import (
"context"
+ crand "crypto/rand"
"encoding/hex"
"encoding/json"
"fmt"
"io"
- "math/rand"
+ "math/rand/v2"
"net/http"
"os"
"os/exec"
@@ -752,7 +753,7 @@ func verifyCopyStateIsOptimized(t *testing.T, tablet *cluster.VttabletProcess) {
// be used to generate and insert test data.
func randHex(n int) (string, error) {
bytes := make([]byte, n)
- if _, err := rand.Read(bytes); err != nil {
+ if _, err := crand.Read(bytes); err != nil {
return "", err
}
return hex.EncodeToString(bytes), nil
diff --git a/go/test/endtoend/vtgate/queries/aggregation/aggregation_test.go b/go/test/endtoend/vtgate/queries/aggregation/aggregation_test.go
index 531e1077bf6..9a6ad90cc5b 100644
--- a/go/test/endtoend/vtgate/queries/aggregation/aggregation_test.go
+++ b/go/test/endtoend/vtgate/queries/aggregation/aggregation_test.go
@@ -18,6 +18,7 @@ package aggregation
import (
"fmt"
+ "math/rand/v2"
"slices"
"sort"
"strings"
@@ -69,6 +70,18 @@ func start(t *testing.T) (utils.MySQLCompare, func()) {
}
}
+func TestAggrWithLimit(t *testing.T) {
+ utils.SkipIfBinaryIsBelowVersion(t, 21, "vtgate")
+ mcmp, closer := start(t)
+ defer closer()
+
+ for i := range 1000 {
+ r := rand.IntN(50)
+ mcmp.Exec(fmt.Sprintf("insert into aggr_test(id, val1, val2) values(%d, 'a', %d)", i, r))
+ }
+ mcmp.Exec("select val2, count(*) from aggr_test group by val2 order by count(*), val2 limit 10")
+}
+
func TestAggregateTypes(t *testing.T) {
mcmp, closer := start(t)
defer closer()
@@ -777,3 +790,15 @@ func TestHavingQueries(t *testing.T) {
})
}
}
+
+// TestJsonAggregation tests that json aggregation works for single sharded queries.
+func TestJsonAggregation(t *testing.T) {
+ utils.SkipIfBinaryIsBelowVersion(t, 21, "vtgate")
+ mcmp, closer := start(t)
+ defer closer()
+
+ mcmp.Exec("insert into t3(id5, id6, id7) values(1,2,1), (2,2,4), (3,2,4), (4,1,2), (5,2,1), (6,2,6), (7,1,7)")
+
+ mcmp.Exec("select count(1) from t3 where id6 = 2 group by id7 having json_arrayagg(id5+1) = json_array(2, 6)")
+ mcmp.Exec(`select count(1) from t3 where id6 = 2 group by id7 having json_objectagg(id5+1, id7) = json_object("2",1,"6",1)`)
+}
diff --git a/go/test/endtoend/vtgate/queries/normalize/normalize_test.go b/go/test/endtoend/vtgate/queries/normalize/normalize_test.go
index 51d9f9f24bf..f7d6f45a784 100644
--- a/go/test/endtoend/vtgate/queries/normalize/normalize_test.go
+++ b/go/test/endtoend/vtgate/queries/normalize/normalize_test.go
@@ -28,7 +28,6 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
- "vitess.io/vitess/go/test/endtoend/cluster"
"vitess.io/vitess/go/test/endtoend/utils"
"vitess.io/vitess/go/mysql"
@@ -41,11 +40,7 @@ func TestNormalizeAllFields(t *testing.T) {
insertQuery := `insert into t1 values (1, "chars", "variable chars", x'73757265', 0x676F, 0.33, 9.99, 1, "1976-06-08", "small", "b", "{\"key\":\"value\"}", point(1,5), b'011', 0b0101)`
normalizedInsertQuery := `insert into t1 values (:vtg1 /* INT64 */, :vtg2 /* VARCHAR */, :vtg3 /* VARCHAR */, :vtg4 /* HEXVAL */, :vtg5 /* HEXNUM */, :vtg6 /* DECIMAL(3,2) */, :vtg7 /* DECIMAL(3,2) */, :vtg8 /* INT64 */, :vtg9 /* VARCHAR */, :vtg10 /* VARCHAR */, :vtg11 /* VARCHAR */, :vtg12 /* VARCHAR */, point(:vtg13 /* INT64 */, :vtg14 /* INT64 */), :vtg15 /* BITNUM */, :vtg16 /* BITNUM */)`
- vtgateVersion, err := cluster.GetMajorVersion("vtgate")
- require.NoError(t, err)
- if vtgateVersion < 20 {
- normalizedInsertQuery = `insert into t1 values (:vtg1 /* INT64 */, :vtg2 /* VARCHAR */, :vtg3 /* VARCHAR */, :vtg4 /* HEXVAL */, :vtg5 /* HEXNUM */, :vtg6 /* DECIMAL */, :vtg7 /* DECIMAL */, :vtg8 /* INT64 */, :vtg9 /* VARCHAR */, :vtg10 /* VARCHAR */, :vtg11 /* VARCHAR */, :vtg12 /* VARCHAR */, point(:vtg13 /* INT64 */, :vtg14 /* INT64 */), :vtg15 /* BITNUM */, :vtg16 /* BITNUM */)`
- }
+
selectQuery := "select * from t1"
utils.Exec(t, conn, insertQuery)
qr := utils.Exec(t, conn, selectQuery)
diff --git a/go/test/endtoend/vtgate/queries/subquery/subquery_test.go b/go/test/endtoend/vtgate/queries/subquery/subquery_test.go
index abbf5ff15e8..eb949e1c697 100644
--- a/go/test/endtoend/vtgate/queries/subquery/subquery_test.go
+++ b/go/test/endtoend/vtgate/queries/subquery/subquery_test.go
@@ -23,6 +23,8 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
+ "vitess.io/vitess/go/sqltypes"
+
"vitess.io/vitess/go/test/endtoend/cluster"
"vitess.io/vitess/go/test/endtoend/utils"
)
@@ -34,7 +36,7 @@ func start(t *testing.T) (utils.MySQLCompare, func()) {
deleteAll := func() {
_, _ = utils.ExecAllowError(t, mcmp.VtConn, "set workload = oltp")
- tables := []string{"t1", "t1_id2_idx", "t2", "t2_id4_idx"}
+ tables := []string{"t1", "t1_id2_idx", "t2", "t2_id4_idx", "user", "user_extra"}
for _, table := range tables {
_, _ = mcmp.ExecAndIgnore("delete from " + table)
}
@@ -78,9 +80,7 @@ func TestNotINQueries(t *testing.T) {
}
-// Test only supported in >= v16.0.0
func TestSubqueriesExists(t *testing.T) {
- utils.SkipIfBinaryIsBelowVersion(t, 16, "vtgate")
mcmp, closer := start(t)
defer closer()
@@ -232,3 +232,18 @@ func TestSubqueries(t *testing.T) {
})
}
}
+
+func TestProperTypesOfPullOutValue(t *testing.T) {
+ utils.SkipIfBinaryIsBelowVersion(t, 21, "vtgate")
+
+ query := "select (select sum(id) from user) from user_extra"
+
+ mcmp, closer := start(t)
+ defer closer()
+
+ mcmp.Exec("INSERT INTO user (id, name) VALUES (1, 'Alice'), (2, 'Bob'), (3, 'Charlie'), (4, 'David'), (5, 'Eve'), (6, 'Frank'), (7, 'Grace'), (8, 'Hannah'), (9, 'Ivy'), (10, 'Jack')")
+ mcmp.Exec("INSERT INTO user_extra (user_id, extra_info) VALUES (1, 'info1'), (2, 'info1'), (3, 'info1'), (3, 'info2'), (4, 'info1'), (5, 'info1'), (6, 'info1'), (7, 'info1'), (8, 'info1')")
+
+ r := mcmp.Exec(query)
+ require.True(t, r.Fields[0].Type == sqltypes.Decimal)
+}
diff --git a/go/test/endtoend/vtgate/reservedconn/main_test.go b/go/test/endtoend/vtgate/reservedconn/main_test.go
index 528182a82e2..8c0278604f7 100644
--- a/go/test/endtoend/vtgate/reservedconn/main_test.go
+++ b/go/test/endtoend/vtgate/reservedconn/main_test.go
@@ -100,61 +100,46 @@ CREATE TABLE test_vdx (
`
)
-var enableSettingsPool bool
-
func TestMain(m *testing.M) {
defer cluster.PanicHandler(nil)
flag.Parse()
- code := runAllTests(m)
- if code != 0 {
- os.Exit(code)
- }
+ exitCode := func() int {
+ clusterInstance = cluster.NewCluster(cell, hostname)
+ defer clusterInstance.Teardown()
- println("running with settings pool enabled")
- // run again with settings pool enabled.
- enableSettingsPool = true
- code = runAllTests(m)
- os.Exit(code)
-}
+ // Start topo server
+ if err := clusterInstance.StartTopo(); err != nil {
+ return 1
+ }
-func runAllTests(m *testing.M) int {
- clusterInstance = cluster.NewCluster(cell, hostname)
- defer clusterInstance.Teardown()
-
- // Start topo server
- if err := clusterInstance.StartTopo(); err != nil {
- return 1
- }
-
- // Start keyspace
- keyspace := &cluster.Keyspace{
- Name: keyspaceName,
- SchemaSQL: sqlSchema,
- VSchema: vSchema,
- }
- clusterInstance.VtTabletExtraArgs = []string{"--queryserver-config-transaction-timeout", "5s"}
- if enableSettingsPool {
- clusterInstance.VtTabletExtraArgs = append(clusterInstance.VtTabletExtraArgs, "--queryserver-enable-settings-pool")
- }
- if err := clusterInstance.StartKeyspace(*keyspace, []string{"-80", "80-"}, 1, false); err != nil {
- return 1
- }
-
- // Start vtgate
- // This test requires setting the mysql_server_version vtgate flag
- // to 5.7 regardless of the actual MySQL version used for the tests.
- clusterInstance.VtGateExtraArgs = []string{"--lock_heartbeat_time", "2s", "--mysql_server_version", "5.7.0"}
- clusterInstance.VtGatePlannerVersion = querypb.ExecuteOptions_Gen4
- if err := clusterInstance.StartVtgate(); err != nil {
- return 1
- }
-
- vtParams = mysql.ConnParams{
- Host: clusterInstance.Hostname,
- Port: clusterInstance.VtgateMySQLPort,
- }
- return m.Run()
+ // Start keyspace
+ keyspace := &cluster.Keyspace{
+ Name: keyspaceName,
+ SchemaSQL: sqlSchema,
+ VSchema: vSchema,
+ }
+ clusterInstance.VtTabletExtraArgs = []string{"--queryserver-config-transaction-timeout", "5s"}
+ if err := clusterInstance.StartKeyspace(*keyspace, []string{"-80", "80-"}, 1, false); err != nil {
+ return 1
+ }
+
+ // Start vtgate
+ // This test requires setting the mysql_server_version vtgate flag
+ // to 5.7 regardless of the actual MySQL version used for the tests.
+ clusterInstance.VtGateExtraArgs = []string{"--lock_heartbeat_time", "2s", "--mysql_server_version", "5.7.0"}
+ clusterInstance.VtGatePlannerVersion = querypb.ExecuteOptions_Gen4
+ if err := clusterInstance.StartVtgate(); err != nil {
+ return 1
+ }
+
+ vtParams = mysql.ConnParams{
+ Host: clusterInstance.Hostname,
+ Port: clusterInstance.VtgateMySQLPort,
+ }
+ return m.Run()
+ }()
+ os.Exit(exitCode)
}
func assertIsEmpty(t *testing.T, conn *mysql.Conn, query string) {
diff --git a/go/test/endtoend/vtgate/reservedconn/reconnect1/main_test.go b/go/test/endtoend/vtgate/reservedconn/reconnect1/main_test.go
index 491ce6bc6ab..9a4d7c50dbd 100644
--- a/go/test/endtoend/vtgate/reservedconn/reconnect1/main_test.go
+++ b/go/test/endtoend/vtgate/reservedconn/reconnect1/main_test.go
@@ -62,58 +62,42 @@ var (
`
)
-var enableSettingsPool bool
-
func TestMain(m *testing.M) {
defer cluster.PanicHandler(nil)
flag.Parse()
- code := runAllTests(m)
- if code != 0 {
- os.Exit(code)
- }
-
- println("running with settings pool enabled")
- // run again with settings pool enabled.
- enableSettingsPool = true
- code = runAllTests(m)
- os.Exit(code)
-}
-
-func runAllTests(m *testing.M) int {
+ exitCode := func() int {
+ clusterInstance = cluster.NewCluster(cell, hostname)
+ defer clusterInstance.Teardown()
- clusterInstance = cluster.NewCluster(cell, hostname)
- defer clusterInstance.Teardown()
-
- // Start topo server
- if err := clusterInstance.StartTopo(); err != nil {
- return 1
- }
+ // Start topo server
+ if err := clusterInstance.StartTopo(); err != nil {
+ return 1
+ }
- // Start keyspace
- keyspace := &cluster.Keyspace{
- Name: keyspaceName,
- SchemaSQL: sqlSchema,
- VSchema: vSchema,
- }
- if enableSettingsPool {
- clusterInstance.VtTabletExtraArgs = append(clusterInstance.VtTabletExtraArgs, "--queryserver-enable-settings-pool")
- }
- if err := clusterInstance.StartKeyspace(*keyspace, []string{"-80", "80-"}, 1, true); err != nil {
- return 1
- }
+ // Start keyspace
+ keyspace := &cluster.Keyspace{
+ Name: keyspaceName,
+ SchemaSQL: sqlSchema,
+ VSchema: vSchema,
+ }
+ if err := clusterInstance.StartKeyspace(*keyspace, []string{"-80", "80-"}, 1, true); err != nil {
+ return 1
+ }
- // Start vtgate
- clusterInstance.VtGateExtraArgs = []string{"--lock_heartbeat_time", "2s"}
- if err := clusterInstance.StartVtgate(); err != nil {
- return 1
- }
+ // Start vtgate
+ clusterInstance.VtGateExtraArgs = []string{"--lock_heartbeat_time", "2s"}
+ if err := clusterInstance.StartVtgate(); err != nil {
+ return 1
+ }
- vtParams = mysql.ConnParams{
- Host: clusterInstance.Hostname,
- Port: clusterInstance.VtgateMySQLPort,
- }
- return m.Run()
+ vtParams = mysql.ConnParams{
+ Host: clusterInstance.Hostname,
+ Port: clusterInstance.VtgateMySQLPort,
+ }
+ return m.Run()
+ }()
+ os.Exit(exitCode)
}
func TestServingChange(t *testing.T) {
diff --git a/go/test/endtoend/vtgate/reservedconn/reconnect2/main_test.go b/go/test/endtoend/vtgate/reservedconn/reconnect2/main_test.go
index a448574c282..915d76051a4 100644
--- a/go/test/endtoend/vtgate/reservedconn/reconnect2/main_test.go
+++ b/go/test/endtoend/vtgate/reservedconn/reconnect2/main_test.go
@@ -63,58 +63,44 @@ var (
`
)
-var enableSettingsPool bool
-
func TestMain(m *testing.M) {
defer cluster.PanicHandler(nil)
flag.Parse()
- code := runAllTests(m)
- if code != 0 {
- os.Exit(code)
- }
+ exitCode := func() int {
+ clusterInstance = cluster.NewCluster(cell, hostname)
+ defer clusterInstance.Teardown()
- println("running with settings pool enabled")
- // run again with settings pool enabled.
- enableSettingsPool = true
- code = runAllTests(m)
- os.Exit(code)
-}
+ // Start topo server
+ if err := clusterInstance.StartTopo(); err != nil {
+ return 1
+ }
+
+ // Start keyspace
+ keyspace := &cluster.Keyspace{
+ Name: keyspaceName,
+ SchemaSQL: sqlSchema,
+ VSchema: vSchema,
+ }
+ clusterInstance.VtTabletExtraArgs = []string{"--queryserver-config-transaction-timeout", "5s"}
+ if err := clusterInstance.StartKeyspace(*keyspace, []string{"-80", "80-"}, 1, true); err != nil {
+ return 1
+ }
+
+ // Start vtgate
+ clusterInstance.VtGateExtraArgs = []string{"--lock_heartbeat_time", "2s"}
+ if err := clusterInstance.StartVtgate(); err != nil {
+ return 1
+ }
+
+ vtParams = mysql.ConnParams{
+ Host: clusterInstance.Hostname,
+ Port: clusterInstance.VtgateMySQLPort,
+ }
+ return m.Run()
+ }()
+ os.Exit(exitCode)
-func runAllTests(m *testing.M) int {
- clusterInstance = cluster.NewCluster(cell, hostname)
- defer clusterInstance.Teardown()
-
- // Start topo server
- if err := clusterInstance.StartTopo(); err != nil {
- return 1
- }
-
- // Start keyspace
- keyspace := &cluster.Keyspace{
- Name: keyspaceName,
- SchemaSQL: sqlSchema,
- VSchema: vSchema,
- }
- clusterInstance.VtTabletExtraArgs = []string{"--queryserver-config-transaction-timeout", "5s"}
- if enableSettingsPool {
- clusterInstance.VtTabletExtraArgs = append(clusterInstance.VtTabletExtraArgs, "--queryserver-enable-settings-pool")
- }
- if err := clusterInstance.StartKeyspace(*keyspace, []string{"-80", "80-"}, 1, true); err != nil {
- return 1
- }
-
- // Start vtgate
- clusterInstance.VtGateExtraArgs = []string{"--lock_heartbeat_time", "2s"}
- if err := clusterInstance.StartVtgate(); err != nil {
- return 1
- }
-
- vtParams = mysql.ConnParams{
- Host: clusterInstance.Hostname,
- Port: clusterInstance.VtgateMySQLPort,
- }
- return m.Run()
}
func TestTabletChange(t *testing.T) {
diff --git a/go/test/endtoend/vtgate/reservedconn/reconnect3/main_test.go b/go/test/endtoend/vtgate/reservedconn/reconnect3/main_test.go
index 677c24666b2..20d255941db 100644
--- a/go/test/endtoend/vtgate/reservedconn/reconnect3/main_test.go
+++ b/go/test/endtoend/vtgate/reservedconn/reconnect3/main_test.go
@@ -39,55 +39,40 @@ var (
sqlSchema = `create table test(id bigint primary key)Engine=InnoDB;`
)
-var enableSettingsPool bool
-
func TestMain(m *testing.M) {
defer cluster.PanicHandler(nil)
flag.Parse()
- code := runAllTests(m)
- if code != 0 {
- os.Exit(code)
- }
-
- println("running with settings pool enabled")
- // run again with settings pool enabled.
- enableSettingsPool = true
- code = runAllTests(m)
- os.Exit(code)
-}
-
-func runAllTests(m *testing.M) int {
- clusterInstance = cluster.NewCluster(cell, hostname)
- defer clusterInstance.Teardown()
-
- // Start topo server
- if err := clusterInstance.StartTopo(); err != nil {
- return 1
- }
-
- // Start keyspace
- keyspace := &cluster.Keyspace{
- Name: keyspaceName,
- SchemaSQL: sqlSchema,
- }
- if enableSettingsPool {
- clusterInstance.VtTabletExtraArgs = append(clusterInstance.VtTabletExtraArgs, "--queryserver-enable-settings-pool")
- }
- if err := clusterInstance.StartUnshardedKeyspace(*keyspace, 2, false); err != nil {
- return 1
- }
-
- // Start vtgate
- if err := clusterInstance.StartVtgate(); err != nil {
- return 1
- }
-
- vtParams = mysql.ConnParams{
- Host: clusterInstance.Hostname,
- Port: clusterInstance.VtgateMySQLPort,
- }
- return m.Run()
+ exitCode := func() int {
+ clusterInstance = cluster.NewCluster(cell, hostname)
+ defer clusterInstance.Teardown()
+
+ // Start topo server
+ if err := clusterInstance.StartTopo(); err != nil {
+ return 1
+ }
+
+ // Start keyspace
+ keyspace := &cluster.Keyspace{
+ Name: keyspaceName,
+ SchemaSQL: sqlSchema,
+ }
+ if err := clusterInstance.StartUnshardedKeyspace(*keyspace, 2, false); err != nil {
+ return 1
+ }
+
+ // Start vtgate
+ if err := clusterInstance.StartVtgate(); err != nil {
+ return 1
+ }
+
+ vtParams = mysql.ConnParams{
+ Host: clusterInstance.Hostname,
+ Port: clusterInstance.VtgateMySQLPort,
+ }
+ return m.Run()
+ }()
+ os.Exit(exitCode)
}
func TestMysqlDownServingChange(t *testing.T) {
diff --git a/go/test/endtoend/vtgate/reservedconn/reconnect4/main_test.go b/go/test/endtoend/vtgate/reservedconn/reconnect4/main_test.go
index 1dc53a89506..d4a61665a6d 100644
--- a/go/test/endtoend/vtgate/reservedconn/reconnect4/main_test.go
+++ b/go/test/endtoend/vtgate/reservedconn/reconnect4/main_test.go
@@ -39,55 +39,40 @@ var (
sqlSchema = `create table test(id bigint primary key)Engine=InnoDB;`
)
-var enableSettingsPool bool
-
func TestMain(m *testing.M) {
defer cluster.PanicHandler(nil)
flag.Parse()
- code := runAllTests(m)
- if code != 0 {
- os.Exit(code)
- }
-
- println("running with settings pool enabled")
- // run again with settings pool enabled.
- enableSettingsPool = true
- code = runAllTests(m)
- os.Exit(code)
-}
-
-func runAllTests(m *testing.M) int {
- clusterInstance = cluster.NewCluster(cell, hostname)
- defer clusterInstance.Teardown()
-
- // Start topo server
- if err := clusterInstance.StartTopo(); err != nil {
- return 1
- }
-
- // Start keyspace
- keyspace := &cluster.Keyspace{
- Name: keyspaceName,
- SchemaSQL: sqlSchema,
- }
- if enableSettingsPool {
- clusterInstance.VtTabletExtraArgs = append(clusterInstance.VtTabletExtraArgs, "--queryserver-enable-settings-pool")
- }
- if err := clusterInstance.StartUnshardedKeyspace(*keyspace, 2, false); err != nil {
- return 1
- }
-
- // Start vtgate
- if err := clusterInstance.StartVtgate(); err != nil {
- return 1
- }
-
- vtParams = mysql.ConnParams{
- Host: clusterInstance.Hostname,
- Port: clusterInstance.VtgateMySQLPort,
- }
- return m.Run()
+ exitCode := func() int {
+ clusterInstance = cluster.NewCluster(cell, hostname)
+ defer clusterInstance.Teardown()
+
+ // Start topo server
+ if err := clusterInstance.StartTopo(); err != nil {
+ return 1
+ }
+
+ // Start keyspace
+ keyspace := &cluster.Keyspace{
+ Name: keyspaceName,
+ SchemaSQL: sqlSchema,
+ }
+ if err := clusterInstance.StartUnshardedKeyspace(*keyspace, 2, false); err != nil {
+ return 1
+ }
+
+ // Start vtgate
+ if err := clusterInstance.StartVtgate(); err != nil {
+ return 1
+ }
+
+ vtParams = mysql.ConnParams{
+ Host: clusterInstance.Hostname,
+ Port: clusterInstance.VtgateMySQLPort,
+ }
+ return m.Run()
+ }()
+ os.Exit(exitCode)
}
func TestVttabletDownServingChange(t *testing.T) {
diff --git a/go/test/endtoend/vtgate/schematracker/sharded/st_sharded_test.go b/go/test/endtoend/vtgate/schematracker/sharded/st_sharded_test.go
index 8f8050bebe1..4c495d257b5 100644
--- a/go/test/endtoend/vtgate/schematracker/sharded/st_sharded_test.go
+++ b/go/test/endtoend/vtgate/schematracker/sharded/st_sharded_test.go
@@ -296,9 +296,6 @@ func TestDMLOnNewTable(t *testing.T) {
// TestNewView validates that view tracking works as expected.
func TestNewView(t *testing.T) {
- utils.SkipIfBinaryIsBelowVersion(t, 16, "vtgate")
- utils.SkipIfBinaryIsBelowVersion(t, 16, "vttablet")
-
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
require.NoError(t, err)
@@ -321,9 +318,6 @@ func TestNewView(t *testing.T) {
// TestViewAndTable validates that new column added in table is present in the view definition
func TestViewAndTable(t *testing.T) {
- utils.SkipIfBinaryIsBelowVersion(t, 16, "vtgate")
- utils.SkipIfBinaryIsBelowVersion(t, 16, "vttablet")
-
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
require.NoError(t, err)
diff --git a/go/test/endtoend/vtgate/unsharded/main_test.go b/go/test/endtoend/vtgate/unsharded/main_test.go
index 461a3c73b35..91326acce4d 100644
--- a/go/test/endtoend/vtgate/unsharded/main_test.go
+++ b/go/test/endtoend/vtgate/unsharded/main_test.go
@@ -146,62 +146,47 @@ END;
`}
)
-var enableSettingsPool bool
-
func TestMain(m *testing.M) {
defer cluster.PanicHandler(nil)
flag.Parse()
- code := runAllTests(m)
- if code != 0 {
- os.Exit(code)
- }
-
- println("running with settings pool enabled")
- // run again with settings pool enabled.
- enableSettingsPool = true
- code = runAllTests(m)
- os.Exit(code)
-}
-
-func runAllTests(m *testing.M) int {
- clusterInstance = cluster.NewCluster(cell, hostname)
- defer clusterInstance.Teardown()
-
- // Start topo server
- if err := clusterInstance.StartTopo(); err != nil {
- return 1
- }
-
- // Start keyspace
- Keyspace := &cluster.Keyspace{
- Name: KeyspaceName,
- SchemaSQL: SchemaSQL,
- VSchema: VSchema,
- }
- clusterInstance.VtTabletExtraArgs = []string{"--queryserver-config-transaction-timeout", "3s", "--queryserver-config-max-result-size", "30"}
- if enableSettingsPool {
- clusterInstance.VtTabletExtraArgs = append(clusterInstance.VtTabletExtraArgs, "--queryserver-enable-settings-pool")
- }
- if err := clusterInstance.StartUnshardedKeyspace(*Keyspace, 0, false); err != nil {
- log.Fatal(err.Error())
- return 1
- }
-
- // Start vtgate
- clusterInstance.VtGateExtraArgs = []string{"--warn_sharded_only=true"}
- if err := clusterInstance.StartVtgate(); err != nil {
- log.Fatal(err.Error())
- return 1
- }
-
- primaryTablet := clusterInstance.Keyspaces[0].Shards[0].PrimaryTablet().VttabletProcess
- if err := primaryTablet.QueryTabletMultiple(createProcSQL, KeyspaceName, true); err != nil {
- log.Fatal(err.Error())
- return 1
- }
-
- return m.Run()
+ exitCode := func() int {
+ clusterInstance = cluster.NewCluster(cell, hostname)
+ defer clusterInstance.Teardown()
+
+ // Start topo server
+ if err := clusterInstance.StartTopo(); err != nil {
+ return 1
+ }
+
+ // Start keyspace
+ Keyspace := &cluster.Keyspace{
+ Name: KeyspaceName,
+ SchemaSQL: SchemaSQL,
+ VSchema: VSchema,
+ }
+ clusterInstance.VtTabletExtraArgs = []string{"--queryserver-config-transaction-timeout", "3s", "--queryserver-config-max-result-size", "30"}
+ if err := clusterInstance.StartUnshardedKeyspace(*Keyspace, 0, false); err != nil {
+ log.Fatal(err.Error())
+ return 1
+ }
+
+ // Start vtgate
+ clusterInstance.VtGateExtraArgs = []string{"--warn_sharded_only=true"}
+ if err := clusterInstance.StartVtgate(); err != nil {
+ log.Fatal(err.Error())
+ return 1
+ }
+
+ primaryTablet := clusterInstance.Keyspaces[0].Shards[0].PrimaryTablet().VttabletProcess
+ if err := primaryTablet.QueryTabletMultiple(createProcSQL, KeyspaceName, true); err != nil {
+ log.Fatal(err.Error())
+ return 1
+ }
+
+ return m.Run()
+ }()
+ os.Exit(exitCode)
}
func TestSelectIntoAndLoadFrom(t *testing.T) {
diff --git a/go/test/endtoend/vtgate/vitess_tester/aggregation/aggregation.test b/go/test/endtoend/vtgate/vitess_tester/aggregation/aggregation.test
new file mode 100644
index 00000000000..8861b9672b8
--- /dev/null
+++ b/go/test/endtoend/vtgate/vitess_tester/aggregation/aggregation.test
@@ -0,0 +1,50 @@
+CREATE TABLE `t1`
+(
+ `id` int unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(191) NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE InnoDB,
+ CHARSET utf8mb4,
+ COLLATE utf8mb4_unicode_ci;
+
+CREATE TABLE `t2`
+(
+ `id` bigint unsigned NOT NULL AUTO_INCREMENT,
+ `t1_id` int unsigned NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE InnoDB,
+ CHARSET utf8mb4,
+ COLLATE utf8mb4_unicode_ci;
+
+CREATE TABLE `t3`
+(
+ `id` bigint unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(191) NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE InnoDB,
+ CHARSET utf8mb4,
+ COLLATE utf8mb4_unicode_ci;
+
+insert into t1 (id, name)
+values (1, 'A'),
+ (2, 'B'),
+ (3, 'C'),
+ (4, 'D');
+
+insert into t2 (id, t1_id)
+values (1, 1),
+ (2, 2),
+ (3, 3);
+
+insert into t3 (id, name)
+values (1, 'A'),
+ (2, 'B');
+
+-- wait_authoritative t1
+-- wait_authoritative t2
+-- wait_authoritative t3
+select group_concat(t3.name SEPARATOR ', ') as "Group Name"
+from t1
+ join t2 on t1.id = t2.t1_id
+ left join t3 on t1.id = t3.id
+group by t1.id;
\ No newline at end of file
diff --git a/go/vt/binlog/binlogplayer/binlog_player_test.go b/go/vt/binlog/binlogplayer/binlog_player_test.go
index 5c6e28df704..99b0ef496b3 100644
--- a/go/vt/binlog/binlogplayer/binlog_player_test.go
+++ b/go/vt/binlog/binlogplayer/binlog_player_test.go
@@ -382,7 +382,7 @@ func applyEvents(blp *BinlogPlayer) func() error {
func TestCreateVReplicationKeyRange(t *testing.T) {
want := "insert into _vt.vreplication " +
"(workflow, source, pos, max_tps, max_replication_lag, time_updated, transaction_timestamp, state, db_name, workflow_type, workflow_sub_type, defer_secondary_keys, options) " +
- `values ('Resharding', 'keyspace:\"ks\" shard:\"0\" key_range:{end:\"\\x80\"}', 'MariaDB/0-1-1083', 9223372036854775807, 9223372036854775807, 481823, 0, 'Running', 'db', 0, 0, false, '{}')`
+ `values ('Resharding', 'keyspace:"ks" shard:"0" key_range:{end:"\\x80"}', 'MariaDB/0-1-1083', 9223372036854775807, 9223372036854775807, 481823, 0, 'Running', 'db', 0, 0, false, '{}')`
bls := binlogdatapb.BinlogSource{
Keyspace: "ks",
@@ -401,7 +401,7 @@ func TestCreateVReplicationKeyRange(t *testing.T) {
func TestCreateVReplicationTables(t *testing.T) {
want := "insert into _vt.vreplication " +
"(workflow, source, pos, max_tps, max_replication_lag, time_updated, transaction_timestamp, state, db_name, workflow_type, workflow_sub_type, defer_secondary_keys, options) " +
- `values ('Resharding', 'keyspace:\"ks\" shard:\"0\" tables:\"a\" tables:\"b\"', 'MariaDB/0-1-1083', 9223372036854775807, 9223372036854775807, 481823, 0, 'Running', 'db', 0, 0, false, '{}')`
+ `values ('Resharding', 'keyspace:"ks" shard:"0" tables:"a" tables:"b"', 'MariaDB/0-1-1083', 9223372036854775807, 9223372036854775807, 481823, 0, 'Running', 'db', 0, 0, false, '{}')`
bls := binlogdatapb.BinlogSource{
Keyspace: "ks",
diff --git a/go/vt/sqlparser/ast.go b/go/vt/sqlparser/ast.go
index 76beb368943..35d093e2d39 100644
--- a/go/vt/sqlparser/ast.go
+++ b/go/vt/sqlparser/ast.go
@@ -19,6 +19,7 @@ package sqlparser
import (
"vitess.io/vitess/go/mysql/datetime"
"vitess.io/vitess/go/sqltypes"
+ "vitess.io/vitess/go/vt/vterrors"
)
/*
@@ -2573,6 +2574,21 @@ type (
Columns []*JtColumnDefinition
}
+ // JSONArrayAgg is an aggregation expression that creates a JSON Array.
+ // For more information, visit https://dev.mysql.com/doc/refman/8.4/en/aggregate-functions.html#function_json-arrayagg
+ JSONArrayAgg struct {
+ Expr Expr
+ OverClause *OverClause
+ }
+
+ // JSONObjectAgg is an aggregation expression that creates a JSON Object.
+ // For more information, visit https://dev.mysql.com/doc/refman/8.4/en/aggregate-functions.html#function_json-objectagg
+ JSONObjectAgg struct {
+ Key Expr
+ Value Expr
+ OverClause *OverClause
+ }
+
// JtOnResponseType describes the type of column: default, error or null
JtOnResponseType int
@@ -3225,7 +3241,9 @@ func (*JSONOverlapsExpr) IsExpr() {}
func (*JSONSearchExpr) IsExpr() {}
func (*JSONValueExpr) IsExpr() {}
func (*JSONArrayExpr) IsExpr() {}
+func (*JSONArrayAgg) IsExpr() {}
func (*JSONObjectExpr) IsExpr() {}
+func (*JSONObjectAgg) IsExpr() {}
func (*JSONQuoteExpr) IsExpr() {}
func (*JSONAttributesExpr) IsExpr() {}
func (*JSONValueModifierExpr) IsExpr() {}
@@ -3387,6 +3405,8 @@ func (varP *VarPop) GetArg() Expr { return varP.Arg }
func (varS *VarSamp) GetArg() Expr { return varS.Arg }
func (variance *Variance) GetArg() Expr { return variance.Arg }
func (av *AnyValue) GetArg() Expr { return av.Arg }
+func (jaa *JSONArrayAgg) GetArg() Expr { return jaa.Expr }
+func (joa *JSONObjectAgg) GetArg() Expr { return joa.Key }
func (sum *Sum) GetArgs() Exprs { return Exprs{sum.Arg} }
func (min *Min) GetArgs() Exprs { return Exprs{min.Arg} }
@@ -3406,6 +3426,8 @@ func (varP *VarPop) GetArgs() Exprs { return Exprs{varP.Arg} }
func (varS *VarSamp) GetArgs() Exprs { return Exprs{varS.Arg} }
func (variance *Variance) GetArgs() Exprs { return Exprs{variance.Arg} }
func (av *AnyValue) GetArgs() Exprs { return Exprs{av.Arg} }
+func (jaa *JSONArrayAgg) GetArgs() Exprs { return Exprs{jaa.Expr} }
+func (joa *JSONObjectAgg) GetArgs() Exprs { return Exprs{joa.Key, joa.Value} }
func (min *Min) SetArg(expr Expr) { min.Arg = expr }
func (sum *Sum) SetArg(expr Expr) { sum.Arg = expr }
@@ -3425,6 +3447,8 @@ func (varP *VarPop) SetArg(expr Expr) { varP.Arg = expr }
func (varS *VarSamp) SetArg(expr Expr) { varS.Arg = expr }
func (variance *Variance) SetArg(expr Expr) { variance.Arg = expr }
func (av *AnyValue) SetArg(expr Expr) { av.Arg = expr }
+func (jaa *JSONArrayAgg) SetArg(expr Expr) { jaa.Expr = expr }
+func (joa *JSONObjectAgg) SetArg(expr Expr) { joa.Key = expr }
func (min *Min) SetArgs(exprs Exprs) error { return setFuncArgs(min, exprs, "MIN") }
func (sum *Sum) SetArgs(exprs Exprs) error { return setFuncArgs(sum, exprs, "SUM") }
@@ -3442,6 +3466,15 @@ func (varP *VarPop) SetArgs(exprs Exprs) error { return setFuncArgs(varP,
func (varS *VarSamp) SetArgs(exprs Exprs) error { return setFuncArgs(varS, exprs, "VAR_SAMP") }
func (variance *Variance) SetArgs(exprs Exprs) error { return setFuncArgs(variance, exprs, "VARIANCE") }
func (av *AnyValue) SetArgs(exprs Exprs) error { return setFuncArgs(av, exprs, "ANY_VALUE") }
+func (jaa *JSONArrayAgg) SetArgs(exprs Exprs) error { return setFuncArgs(jaa, exprs, "JSON_ARRAYARG") }
+func (joa *JSONObjectAgg) SetArgs(exprs Exprs) error {
+ if len(exprs) != 2 {
+ return vterrors.VT13001("JSONObjectAgg takes in 2 expressions")
+ }
+ joa.Key = exprs[0]
+ joa.Value = exprs[1]
+ return nil
+}
func (count *Count) SetArgs(exprs Exprs) error {
count.Args = exprs
@@ -3484,6 +3517,8 @@ func (*VarPop) AggrName() string { return "var_pop" }
func (*VarSamp) AggrName() string { return "var_samp" }
func (*Variance) AggrName() string { return "variance" }
func (*AnyValue) AggrName() string { return "any_value" }
+func (*JSONArrayAgg) AggrName() string { return "json_arrayagg" }
+func (*JSONObjectAgg) AggrName() string { return "json_objectagg" }
// Exprs represents a list of value expressions.
// It's not a valid expression because it's not parenthesized.
diff --git a/go/vt/sqlparser/ast_clone.go b/go/vt/sqlparser/ast_clone.go
index ab215fdf994..2342237f806 100644
--- a/go/vt/sqlparser/ast_clone.go
+++ b/go/vt/sqlparser/ast_clone.go
@@ -233,6 +233,8 @@ func CloneSQLNode(in SQLNode) SQLNode {
return CloneRefOfIntroducerExpr(in)
case *IsExpr:
return CloneRefOfIsExpr(in)
+ case *JSONArrayAgg:
+ return CloneRefOfJSONArrayAgg(in)
case *JSONArrayExpr:
return CloneRefOfJSONArrayExpr(in)
case *JSONAttributesExpr:
@@ -245,6 +247,8 @@ func CloneSQLNode(in SQLNode) SQLNode {
return CloneRefOfJSONExtractExpr(in)
case *JSONKeysExpr:
return CloneRefOfJSONKeysExpr(in)
+ case *JSONObjectAgg:
+ return CloneRefOfJSONObjectAgg(in)
case *JSONObjectExpr:
return CloneRefOfJSONObjectExpr(in)
case *JSONObjectParam:
@@ -1692,6 +1696,17 @@ func CloneRefOfIsExpr(n *IsExpr) *IsExpr {
return &out
}
+// CloneRefOfJSONArrayAgg creates a deep clone of the input.
+func CloneRefOfJSONArrayAgg(n *JSONArrayAgg) *JSONArrayAgg {
+ if n == nil {
+ return nil
+ }
+ out := *n
+ out.Expr = CloneExpr(n.Expr)
+ out.OverClause = CloneRefOfOverClause(n.OverClause)
+ return &out
+}
+
// CloneRefOfJSONArrayExpr creates a deep clone of the input.
func CloneRefOfJSONArrayExpr(n *JSONArrayExpr) *JSONArrayExpr {
if n == nil {
@@ -1759,6 +1774,18 @@ func CloneRefOfJSONKeysExpr(n *JSONKeysExpr) *JSONKeysExpr {
return &out
}
+// CloneRefOfJSONObjectAgg creates a deep clone of the input.
+func CloneRefOfJSONObjectAgg(n *JSONObjectAgg) *JSONObjectAgg {
+ if n == nil {
+ return nil
+ }
+ out := *n
+ out.Key = CloneExpr(n.Key)
+ out.Value = CloneExpr(n.Value)
+ out.OverClause = CloneRefOfOverClause(n.OverClause)
+ return &out
+}
+
// CloneRefOfJSONObjectExpr creates a deep clone of the input.
func CloneRefOfJSONObjectExpr(n *JSONObjectExpr) *JSONObjectExpr {
if n == nil {
@@ -3460,6 +3487,10 @@ func CloneAggrFunc(in AggrFunc) AggrFunc {
return CloneRefOfCountStar(in)
case *GroupConcatExpr:
return CloneRefOfGroupConcatExpr(in)
+ case *JSONArrayAgg:
+ return CloneRefOfJSONArrayAgg(in)
+ case *JSONObjectAgg:
+ return CloneRefOfJSONObjectAgg(in)
case *Max:
return CloneRefOfMax(in)
case *Min:
@@ -3904,6 +3935,8 @@ func CloneExpr(in Expr) Expr {
return CloneRefOfIntroducerExpr(in)
case *IsExpr:
return CloneRefOfIsExpr(in)
+ case *JSONArrayAgg:
+ return CloneRefOfJSONArrayAgg(in)
case *JSONArrayExpr:
return CloneRefOfJSONArrayExpr(in)
case *JSONAttributesExpr:
@@ -3916,6 +3949,8 @@ func CloneExpr(in Expr) Expr {
return CloneRefOfJSONExtractExpr(in)
case *JSONKeysExpr:
return CloneRefOfJSONKeysExpr(in)
+ case *JSONObjectAgg:
+ return CloneRefOfJSONObjectAgg(in)
case *JSONObjectExpr:
return CloneRefOfJSONObjectExpr(in)
case *JSONOverlapsExpr:
diff --git a/go/vt/sqlparser/ast_copy_on_rewrite.go b/go/vt/sqlparser/ast_copy_on_rewrite.go
index 68eea685405..c6bcf71bd6c 100644
--- a/go/vt/sqlparser/ast_copy_on_rewrite.go
+++ b/go/vt/sqlparser/ast_copy_on_rewrite.go
@@ -232,6 +232,8 @@ func (c *cow) copyOnRewriteSQLNode(n SQLNode, parent SQLNode) (out SQLNode, chan
return c.copyOnRewriteRefOfIntroducerExpr(n, parent)
case *IsExpr:
return c.copyOnRewriteRefOfIsExpr(n, parent)
+ case *JSONArrayAgg:
+ return c.copyOnRewriteRefOfJSONArrayAgg(n, parent)
case *JSONArrayExpr:
return c.copyOnRewriteRefOfJSONArrayExpr(n, parent)
case *JSONAttributesExpr:
@@ -244,6 +246,8 @@ func (c *cow) copyOnRewriteSQLNode(n SQLNode, parent SQLNode) (out SQLNode, chan
return c.copyOnRewriteRefOfJSONExtractExpr(n, parent)
case *JSONKeysExpr:
return c.copyOnRewriteRefOfJSONKeysExpr(n, parent)
+ case *JSONObjectAgg:
+ return c.copyOnRewriteRefOfJSONObjectAgg(n, parent)
case *JSONObjectExpr:
return c.copyOnRewriteRefOfJSONObjectExpr(n, parent)
case *JSONObjectParam:
@@ -2966,6 +2970,30 @@ func (c *cow) copyOnRewriteRefOfIsExpr(n *IsExpr, parent SQLNode) (out SQLNode,
}
return
}
+func (c *cow) copyOnRewriteRefOfJSONArrayAgg(n *JSONArrayAgg, parent SQLNode) (out SQLNode, changed bool) {
+ if n == nil || c.cursor.stop {
+ return n, false
+ }
+ out = n
+ if c.pre == nil || c.pre(n, parent) {
+ _Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
+ _OverClause, changedOverClause := c.copyOnRewriteRefOfOverClause(n.OverClause, n)
+ if changedExpr || changedOverClause {
+ res := *n
+ res.Expr, _ = _Expr.(Expr)
+ res.OverClause, _ = _OverClause.(*OverClause)
+ out = &res
+ if c.cloned != nil {
+ c.cloned(n, out)
+ }
+ changed = true
+ }
+ }
+ if c.post != nil {
+ out, changed = c.postVisit(out, parent, changed)
+ }
+ return
+}
func (c *cow) copyOnRewriteRefOfJSONArrayExpr(n *JSONArrayExpr, parent SQLNode) (out SQLNode, changed bool) {
if n == nil || c.cursor.stop {
return n, false
@@ -3136,6 +3164,32 @@ func (c *cow) copyOnRewriteRefOfJSONKeysExpr(n *JSONKeysExpr, parent SQLNode) (o
}
return
}
+func (c *cow) copyOnRewriteRefOfJSONObjectAgg(n *JSONObjectAgg, parent SQLNode) (out SQLNode, changed bool) {
+ if n == nil || c.cursor.stop {
+ return n, false
+ }
+ out = n
+ if c.pre == nil || c.pre(n, parent) {
+ _Key, changedKey := c.copyOnRewriteExpr(n.Key, n)
+ _Value, changedValue := c.copyOnRewriteExpr(n.Value, n)
+ _OverClause, changedOverClause := c.copyOnRewriteRefOfOverClause(n.OverClause, n)
+ if changedKey || changedValue || changedOverClause {
+ res := *n
+ res.Key, _ = _Key.(Expr)
+ res.Value, _ = _Value.(Expr)
+ res.OverClause, _ = _OverClause.(*OverClause)
+ out = &res
+ if c.cloned != nil {
+ c.cloned(n, out)
+ }
+ changed = true
+ }
+ }
+ if c.post != nil {
+ out, changed = c.postVisit(out, parent, changed)
+ }
+ return
+}
func (c *cow) copyOnRewriteRefOfJSONObjectExpr(n *JSONObjectExpr, parent SQLNode) (out SQLNode, changed bool) {
if n == nil || c.cursor.stop {
return n, false
@@ -6706,6 +6760,10 @@ func (c *cow) copyOnRewriteAggrFunc(n AggrFunc, parent SQLNode) (out SQLNode, ch
return c.copyOnRewriteRefOfCountStar(n, parent)
case *GroupConcatExpr:
return c.copyOnRewriteRefOfGroupConcatExpr(n, parent)
+ case *JSONArrayAgg:
+ return c.copyOnRewriteRefOfJSONArrayAgg(n, parent)
+ case *JSONObjectAgg:
+ return c.copyOnRewriteRefOfJSONObjectAgg(n, parent)
case *Max:
return c.copyOnRewriteRefOfMax(n, parent)
case *Min:
@@ -7134,6 +7192,8 @@ func (c *cow) copyOnRewriteExpr(n Expr, parent SQLNode) (out SQLNode, changed bo
return c.copyOnRewriteRefOfIntroducerExpr(n, parent)
case *IsExpr:
return c.copyOnRewriteRefOfIsExpr(n, parent)
+ case *JSONArrayAgg:
+ return c.copyOnRewriteRefOfJSONArrayAgg(n, parent)
case *JSONArrayExpr:
return c.copyOnRewriteRefOfJSONArrayExpr(n, parent)
case *JSONAttributesExpr:
@@ -7146,6 +7206,8 @@ func (c *cow) copyOnRewriteExpr(n Expr, parent SQLNode) (out SQLNode, changed bo
return c.copyOnRewriteRefOfJSONExtractExpr(n, parent)
case *JSONKeysExpr:
return c.copyOnRewriteRefOfJSONKeysExpr(n, parent)
+ case *JSONObjectAgg:
+ return c.copyOnRewriteRefOfJSONObjectAgg(n, parent)
case *JSONObjectExpr:
return c.copyOnRewriteRefOfJSONObjectExpr(n, parent)
case *JSONOverlapsExpr:
diff --git a/go/vt/sqlparser/ast_equals.go b/go/vt/sqlparser/ast_equals.go
index a775cb7f8bf..9f798f798a6 100644
--- a/go/vt/sqlparser/ast_equals.go
+++ b/go/vt/sqlparser/ast_equals.go
@@ -656,6 +656,12 @@ func (cmp *Comparator) SQLNode(inA, inB SQLNode) bool {
return false
}
return cmp.RefOfIsExpr(a, b)
+ case *JSONArrayAgg:
+ b, ok := inB.(*JSONArrayAgg)
+ if !ok {
+ return false
+ }
+ return cmp.RefOfJSONArrayAgg(a, b)
case *JSONArrayExpr:
b, ok := inB.(*JSONArrayExpr)
if !ok {
@@ -692,6 +698,12 @@ func (cmp *Comparator) SQLNode(inA, inB SQLNode) bool {
return false
}
return cmp.RefOfJSONKeysExpr(a, b)
+ case *JSONObjectAgg:
+ b, ok := inB.(*JSONObjectAgg)
+ if !ok {
+ return false
+ }
+ return cmp.RefOfJSONObjectAgg(a, b)
case *JSONObjectExpr:
b, ok := inB.(*JSONObjectExpr)
if !ok {
@@ -2966,6 +2978,18 @@ func (cmp *Comparator) RefOfIsExpr(a, b *IsExpr) bool {
a.Right == b.Right
}
+// RefOfJSONArrayAgg does deep equals between the two objects.
+func (cmp *Comparator) RefOfJSONArrayAgg(a, b *JSONArrayAgg) bool {
+ if a == b {
+ return true
+ }
+ if a == nil || b == nil {
+ return false
+ }
+ return cmp.Expr(a.Expr, b.Expr) &&
+ cmp.RefOfOverClause(a.OverClause, b.OverClause)
+}
+
// RefOfJSONArrayExpr does deep equals between the two objects.
func (cmp *Comparator) RefOfJSONArrayExpr(a, b *JSONArrayExpr) bool {
if a == b {
@@ -3040,6 +3064,19 @@ func (cmp *Comparator) RefOfJSONKeysExpr(a, b *JSONKeysExpr) bool {
cmp.Expr(a.Path, b.Path)
}
+// RefOfJSONObjectAgg does deep equals between the two objects.
+func (cmp *Comparator) RefOfJSONObjectAgg(a, b *JSONObjectAgg) bool {
+ if a == b {
+ return true
+ }
+ if a == nil || b == nil {
+ return false
+ }
+ return cmp.Expr(a.Key, b.Key) &&
+ cmp.Expr(a.Value, b.Value) &&
+ cmp.RefOfOverClause(a.OverClause, b.OverClause)
+}
+
// RefOfJSONObjectExpr does deep equals between the two objects.
func (cmp *Comparator) RefOfJSONObjectExpr(a, b *JSONObjectExpr) bool {
if a == b {
@@ -5009,6 +5046,18 @@ func (cmp *Comparator) AggrFunc(inA, inB AggrFunc) bool {
return false
}
return cmp.RefOfGroupConcatExpr(a, b)
+ case *JSONArrayAgg:
+ b, ok := inB.(*JSONArrayAgg)
+ if !ok {
+ return false
+ }
+ return cmp.RefOfJSONArrayAgg(a, b)
+ case *JSONObjectAgg:
+ b, ok := inB.(*JSONObjectAgg)
+ if !ok {
+ return false
+ }
+ return cmp.RefOfJSONObjectAgg(a, b)
case *Max:
b, ok := inB.(*Max)
if !ok {
@@ -6173,6 +6222,12 @@ func (cmp *Comparator) Expr(inA, inB Expr) bool {
return false
}
return cmp.RefOfIsExpr(a, b)
+ case *JSONArrayAgg:
+ b, ok := inB.(*JSONArrayAgg)
+ if !ok {
+ return false
+ }
+ return cmp.RefOfJSONArrayAgg(a, b)
case *JSONArrayExpr:
b, ok := inB.(*JSONArrayExpr)
if !ok {
@@ -6209,6 +6264,12 @@ func (cmp *Comparator) Expr(inA, inB Expr) bool {
return false
}
return cmp.RefOfJSONKeysExpr(a, b)
+ case *JSONObjectAgg:
+ b, ok := inB.(*JSONObjectAgg)
+ if !ok {
+ return false
+ }
+ return cmp.RefOfJSONObjectAgg(a, b)
case *JSONObjectExpr:
b, ok := inB.(*JSONObjectExpr)
if !ok {
diff --git a/go/vt/sqlparser/ast_format.go b/go/vt/sqlparser/ast_format.go
index 8d8a01a6eb2..da88129ee63 100644
--- a/go/vt/sqlparser/ast_format.go
+++ b/go/vt/sqlparser/ast_format.go
@@ -839,7 +839,9 @@ func (idx *IndexDefinition) Format(buf *TrackedBuffer) {
buf.astPrintf(idx, ")")
for _, opt := range idx.Options {
- buf.astPrintf(idx, " %s", opt.Name)
+ if opt.Name != "" {
+ buf.astPrintf(idx, " %s", opt.Name)
+ }
if opt.String != "" {
buf.astPrintf(idx, " %#s", opt.String)
} else if opt.Value != nil {
@@ -1359,6 +1361,64 @@ func (node *Literal) Format(buf *TrackedBuffer) {
// Format formats the node.
func (node *Argument) Format(buf *TrackedBuffer) {
+ // We need to make sure that any value used still returns
+ // the right type when interpolated. For example, if we have a
+ // decimal type with 0 scale, we don't want it to be interpreted
+ // as an integer after interpolation as that would the default
+ // literal interpretation in MySQL.
+ switch {
+ case node.Type == sqltypes.Unknown:
+ // Ensure we handle unknown first as we don't want to treat
+ // the type as a bitmask for the further tests.
+ // do nothing, the default literal will be correct.
+ case sqltypes.IsDecimal(node.Type) && node.Scale == 0:
+ buf.WriteString("CAST(")
+ buf.WriteArg(":", node.Name)
+ buf.astPrintf(node, " AS DECIMAL(%d, %d))", node.Size, node.Scale)
+ return
+ case sqltypes.IsUnsigned(node.Type):
+ buf.WriteString("CAST(")
+ buf.WriteArg(":", node.Name)
+ buf.WriteString(" AS UNSIGNED)")
+ return
+ case node.Type == sqltypes.Float64:
+ buf.WriteString("CAST(")
+ buf.WriteArg(":", node.Name)
+ buf.WriteString(" AS DOUBLE)")
+ return
+ case node.Type == sqltypes.Float32:
+ buf.WriteString("CAST(")
+ buf.WriteArg(":", node.Name)
+ buf.WriteString(" AS FLOAT)")
+ return
+ case node.Type == sqltypes.Timestamp, node.Type == sqltypes.Datetime:
+ buf.WriteString("CAST(")
+ buf.WriteArg(":", node.Name)
+ buf.WriteString(" AS DATETIME")
+ if node.Size == 0 {
+ buf.WriteString(")")
+ return
+ }
+ buf.astPrintf(node, "(%d))", node.Size)
+ return
+ case sqltypes.IsDate(node.Type):
+ buf.WriteString("CAST(")
+ buf.WriteArg(":", node.Name)
+ buf.WriteString(" AS DATE")
+ buf.WriteString(")")
+ return
+ case node.Type == sqltypes.Time:
+ buf.WriteString("CAST(")
+ buf.WriteArg(":", node.Name)
+ buf.WriteString(" AS TIME")
+ if node.Size == 0 {
+ buf.WriteString(")")
+ return
+ }
+ buf.astPrintf(node, "(%d))", node.Size)
+ return
+ }
+ // Nothing special to do, the default literal will be correct.
buf.WriteArg(":", node.Name)
if node.Type >= 0 {
// For bind variables that are statically typed, emit their type as an adjacent comment.
@@ -2564,6 +2624,22 @@ func (node *JSONArrayExpr) Format(buf *TrackedBuffer) {
buf.WriteByte(')')
}
+// Format formats the node.
+func (node *JSONArrayAgg) Format(buf *TrackedBuffer) {
+ buf.astPrintf(node, "json_arrayagg(%v)", node.Expr)
+ if node.OverClause != nil {
+ buf.astPrintf(node, " %v", node.OverClause)
+ }
+}
+
+// Format formats the node.
+func (node *JSONObjectAgg) Format(buf *TrackedBuffer) {
+ buf.astPrintf(node, "json_objectagg(%v, %v)", node.Key, node.Value)
+ if node.OverClause != nil {
+ buf.astPrintf(node, " %v", node.OverClause)
+ }
+}
+
// Format formats the node.
func (node *JSONObjectExpr) Format(buf *TrackedBuffer) {
buf.literal("json_object(")
diff --git a/go/vt/sqlparser/ast_format_fast.go b/go/vt/sqlparser/ast_format_fast.go
index 4be0bfd75f7..b1dd010f5ed 100644
--- a/go/vt/sqlparser/ast_format_fast.go
+++ b/go/vt/sqlparser/ast_format_fast.go
@@ -1132,8 +1132,10 @@ func (idx *IndexDefinition) FormatFast(buf *TrackedBuffer) {
buf.WriteByte(')')
for _, opt := range idx.Options {
- buf.WriteByte(' ')
- buf.WriteString(opt.Name)
+ if opt.Name != "" {
+ buf.WriteByte(' ')
+ buf.WriteString(opt.Name)
+ }
if opt.String != "" {
buf.WriteByte(' ')
buf.WriteString(opt.String)
@@ -1778,6 +1780,72 @@ func (node *Literal) FormatFast(buf *TrackedBuffer) {
// FormatFast formats the node.
func (node *Argument) FormatFast(buf *TrackedBuffer) {
+ // We need to make sure that any value used still returns
+ // the right type when interpolated. For example, if we have a
+ // decimal type with 0 scale, we don't want it to be interpreted
+ // as an integer after interpolation as that would the default
+ // literal interpretation in MySQL.
+ switch {
+ case node.Type == sqltypes.Unknown:
+ // Ensure we handle unknown first as we don't want to treat
+ // the type as a bitmask for the further tests.
+ // do nothing, the default literal will be correct.
+ case sqltypes.IsDecimal(node.Type) && node.Scale == 0:
+ buf.WriteString("CAST(")
+ buf.WriteArg(":", node.Name)
+ buf.WriteString(" AS DECIMAL(")
+ buf.WriteString(fmt.Sprintf("%d", node.Size))
+ buf.WriteString(", ")
+ buf.WriteString(fmt.Sprintf("%d", node.Scale))
+ buf.WriteString("))")
+ return
+ case sqltypes.IsUnsigned(node.Type):
+ buf.WriteString("CAST(")
+ buf.WriteArg(":", node.Name)
+ buf.WriteString(" AS UNSIGNED)")
+ return
+ case node.Type == sqltypes.Float64:
+ buf.WriteString("CAST(")
+ buf.WriteArg(":", node.Name)
+ buf.WriteString(" AS DOUBLE)")
+ return
+ case node.Type == sqltypes.Float32:
+ buf.WriteString("CAST(")
+ buf.WriteArg(":", node.Name)
+ buf.WriteString(" AS FLOAT)")
+ return
+ case node.Type == sqltypes.Timestamp, node.Type == sqltypes.Datetime:
+ buf.WriteString("CAST(")
+ buf.WriteArg(":", node.Name)
+ buf.WriteString(" AS DATETIME")
+ if node.Size == 0 {
+ buf.WriteString(")")
+ return
+ }
+ buf.WriteByte('(')
+ buf.WriteString(fmt.Sprintf("%d", node.Size))
+ buf.WriteString("))")
+ return
+ case sqltypes.IsDate(node.Type):
+ buf.WriteString("CAST(")
+ buf.WriteArg(":", node.Name)
+ buf.WriteString(" AS DATE")
+ buf.WriteString(")")
+ return
+ case node.Type == sqltypes.Time:
+ buf.WriteString("CAST(")
+ buf.WriteArg(":", node.Name)
+ buf.WriteString(" AS TIME")
+ if node.Size == 0 {
+ buf.WriteString(")")
+ return
+ }
+ buf.WriteByte('(')
+ buf.WriteString(fmt.Sprintf("%d", node.Size))
+ buf.WriteString("))")
+ return
+ }
+ // Nothing special to do, the default literal will be correct.
buf.WriteArg(":", node.Name)
if node.Type >= 0 {
// For bind variables that are statically typed, emit their type as an adjacent comment.
@@ -3379,6 +3447,30 @@ func (node *JSONArrayExpr) FormatFast(buf *TrackedBuffer) {
buf.WriteByte(')')
}
+// FormatFast formats the node.
+func (node *JSONArrayAgg) FormatFast(buf *TrackedBuffer) {
+ buf.WriteString("json_arrayagg(")
+ buf.printExpr(node, node.Expr, true)
+ buf.WriteByte(')')
+ if node.OverClause != nil {
+ buf.WriteByte(' ')
+ node.OverClause.FormatFast(buf)
+ }
+}
+
+// FormatFast formats the node.
+func (node *JSONObjectAgg) FormatFast(buf *TrackedBuffer) {
+ buf.WriteString("json_objectagg(")
+ buf.printExpr(node, node.Key, true)
+ buf.WriteString(", ")
+ buf.printExpr(node, node.Value, true)
+ buf.WriteByte(')')
+ if node.OverClause != nil {
+ buf.WriteByte(' ')
+ node.OverClause.FormatFast(buf)
+ }
+}
+
// FormatFast formats the node.
func (node *JSONObjectExpr) FormatFast(buf *TrackedBuffer) {
buf.WriteString("json_object(")
diff --git a/go/vt/sqlparser/ast_rewrite.go b/go/vt/sqlparser/ast_rewrite.go
index 8f0926951f3..9605e71a7ae 100644
--- a/go/vt/sqlparser/ast_rewrite.go
+++ b/go/vt/sqlparser/ast_rewrite.go
@@ -232,6 +232,8 @@ func (a *application) rewriteSQLNode(parent SQLNode, node SQLNode, replacer repl
return a.rewriteRefOfIntroducerExpr(parent, node, replacer)
case *IsExpr:
return a.rewriteRefOfIsExpr(parent, node, replacer)
+ case *JSONArrayAgg:
+ return a.rewriteRefOfJSONArrayAgg(parent, node, replacer)
case *JSONArrayExpr:
return a.rewriteRefOfJSONArrayExpr(parent, node, replacer)
case *JSONAttributesExpr:
@@ -244,6 +246,8 @@ func (a *application) rewriteSQLNode(parent SQLNode, node SQLNode, replacer repl
return a.rewriteRefOfJSONExtractExpr(parent, node, replacer)
case *JSONKeysExpr:
return a.rewriteRefOfJSONKeysExpr(parent, node, replacer)
+ case *JSONObjectAgg:
+ return a.rewriteRefOfJSONObjectAgg(parent, node, replacer)
case *JSONObjectExpr:
return a.rewriteRefOfJSONObjectExpr(parent, node, replacer)
case *JSONObjectParam:
@@ -4104,6 +4108,43 @@ func (a *application) rewriteRefOfIsExpr(parent SQLNode, node *IsExpr, replacer
}
return true
}
+func (a *application) rewriteRefOfJSONArrayAgg(parent SQLNode, node *JSONArrayAgg, replacer replacerFunc) bool {
+ if node == nil {
+ return true
+ }
+ if a.pre != nil {
+ a.cur.replacer = replacer
+ a.cur.parent = parent
+ a.cur.node = node
+ kontinue := !a.pre(&a.cur)
+ if a.cur.revisit {
+ a.cur.revisit = false
+ return a.rewriteExpr(parent, a.cur.node.(Expr), replacer)
+ }
+ if kontinue {
+ return true
+ }
+ }
+ if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
+ parent.(*JSONArrayAgg).Expr = newNode.(Expr)
+ }) {
+ return false
+ }
+ if !a.rewriteRefOfOverClause(node, node.OverClause, func(newNode, parent SQLNode) {
+ parent.(*JSONArrayAgg).OverClause = newNode.(*OverClause)
+ }) {
+ return false
+ }
+ if a.post != nil {
+ a.cur.replacer = replacer
+ a.cur.parent = parent
+ a.cur.node = node
+ if !a.post(&a.cur) {
+ return false
+ }
+ }
+ return true
+}
func (a *application) rewriteRefOfJSONArrayExpr(parent SQLNode, node *JSONArrayExpr, replacer replacerFunc) bool {
if node == nil {
return true
@@ -4343,6 +4384,48 @@ func (a *application) rewriteRefOfJSONKeysExpr(parent SQLNode, node *JSONKeysExp
}
return true
}
+func (a *application) rewriteRefOfJSONObjectAgg(parent SQLNode, node *JSONObjectAgg, replacer replacerFunc) bool {
+ if node == nil {
+ return true
+ }
+ if a.pre != nil {
+ a.cur.replacer = replacer
+ a.cur.parent = parent
+ a.cur.node = node
+ kontinue := !a.pre(&a.cur)
+ if a.cur.revisit {
+ a.cur.revisit = false
+ return a.rewriteExpr(parent, a.cur.node.(Expr), replacer)
+ }
+ if kontinue {
+ return true
+ }
+ }
+ if !a.rewriteExpr(node, node.Key, func(newNode, parent SQLNode) {
+ parent.(*JSONObjectAgg).Key = newNode.(Expr)
+ }) {
+ return false
+ }
+ if !a.rewriteExpr(node, node.Value, func(newNode, parent SQLNode) {
+ parent.(*JSONObjectAgg).Value = newNode.(Expr)
+ }) {
+ return false
+ }
+ if !a.rewriteRefOfOverClause(node, node.OverClause, func(newNode, parent SQLNode) {
+ parent.(*JSONObjectAgg).OverClause = newNode.(*OverClause)
+ }) {
+ return false
+ }
+ if a.post != nil {
+ a.cur.replacer = replacer
+ a.cur.parent = parent
+ a.cur.node = node
+ if !a.post(&a.cur) {
+ return false
+ }
+ }
+ return true
+}
func (a *application) rewriteRefOfJSONObjectExpr(parent SQLNode, node *JSONObjectExpr, replacer replacerFunc) bool {
if node == nil {
return true
@@ -9654,6 +9737,10 @@ func (a *application) rewriteAggrFunc(parent SQLNode, node AggrFunc, replacer re
return a.rewriteRefOfCountStar(parent, node, replacer)
case *GroupConcatExpr:
return a.rewriteRefOfGroupConcatExpr(parent, node, replacer)
+ case *JSONArrayAgg:
+ return a.rewriteRefOfJSONArrayAgg(parent, node, replacer)
+ case *JSONObjectAgg:
+ return a.rewriteRefOfJSONObjectAgg(parent, node, replacer)
case *Max:
return a.rewriteRefOfMax(parent, node, replacer)
case *Min:
@@ -10082,6 +10169,8 @@ func (a *application) rewriteExpr(parent SQLNode, node Expr, replacer replacerFu
return a.rewriteRefOfIntroducerExpr(parent, node, replacer)
case *IsExpr:
return a.rewriteRefOfIsExpr(parent, node, replacer)
+ case *JSONArrayAgg:
+ return a.rewriteRefOfJSONArrayAgg(parent, node, replacer)
case *JSONArrayExpr:
return a.rewriteRefOfJSONArrayExpr(parent, node, replacer)
case *JSONAttributesExpr:
@@ -10094,6 +10183,8 @@ func (a *application) rewriteExpr(parent SQLNode, node Expr, replacer replacerFu
return a.rewriteRefOfJSONExtractExpr(parent, node, replacer)
case *JSONKeysExpr:
return a.rewriteRefOfJSONKeysExpr(parent, node, replacer)
+ case *JSONObjectAgg:
+ return a.rewriteRefOfJSONObjectAgg(parent, node, replacer)
case *JSONObjectExpr:
return a.rewriteRefOfJSONObjectExpr(parent, node, replacer)
case *JSONOverlapsExpr:
diff --git a/go/vt/sqlparser/ast_visit.go b/go/vt/sqlparser/ast_visit.go
index 07013a3f2d8..ecc15c47143 100644
--- a/go/vt/sqlparser/ast_visit.go
+++ b/go/vt/sqlparser/ast_visit.go
@@ -232,6 +232,8 @@ func VisitSQLNode(in SQLNode, f Visit) error {
return VisitRefOfIntroducerExpr(in, f)
case *IsExpr:
return VisitRefOfIsExpr(in, f)
+ case *JSONArrayAgg:
+ return VisitRefOfJSONArrayAgg(in, f)
case *JSONArrayExpr:
return VisitRefOfJSONArrayExpr(in, f)
case *JSONAttributesExpr:
@@ -244,6 +246,8 @@ func VisitSQLNode(in SQLNode, f Visit) error {
return VisitRefOfJSONExtractExpr(in, f)
case *JSONKeysExpr:
return VisitRefOfJSONKeysExpr(in, f)
+ case *JSONObjectAgg:
+ return VisitRefOfJSONObjectAgg(in, f)
case *JSONObjectExpr:
return VisitRefOfJSONObjectExpr(in, f)
case *JSONObjectParam:
@@ -2086,6 +2090,21 @@ func VisitRefOfIsExpr(in *IsExpr, f Visit) error {
}
return nil
}
+func VisitRefOfJSONArrayAgg(in *JSONArrayAgg, f Visit) error {
+ if in == nil {
+ return nil
+ }
+ if cont, err := f(in); err != nil || !cont {
+ return err
+ }
+ if err := VisitExpr(in.Expr, f); err != nil {
+ return err
+ }
+ if err := VisitRefOfOverClause(in.OverClause, f); err != nil {
+ return err
+ }
+ return nil
+}
func VisitRefOfJSONArrayExpr(in *JSONArrayExpr, f Visit) error {
if in == nil {
return nil
@@ -2185,6 +2204,24 @@ func VisitRefOfJSONKeysExpr(in *JSONKeysExpr, f Visit) error {
}
return nil
}
+func VisitRefOfJSONObjectAgg(in *JSONObjectAgg, f Visit) error {
+ if in == nil {
+ return nil
+ }
+ if cont, err := f(in); err != nil || !cont {
+ return err
+ }
+ if err := VisitExpr(in.Key, f); err != nil {
+ return err
+ }
+ if err := VisitExpr(in.Value, f); err != nil {
+ return err
+ }
+ if err := VisitRefOfOverClause(in.OverClause, f); err != nil {
+ return err
+ }
+ return nil
+}
func VisitRefOfJSONObjectExpr(in *JSONObjectExpr, f Visit) error {
if in == nil {
return nil
@@ -4457,6 +4494,10 @@ func VisitAggrFunc(in AggrFunc, f Visit) error {
return VisitRefOfCountStar(in, f)
case *GroupConcatExpr:
return VisitRefOfGroupConcatExpr(in, f)
+ case *JSONArrayAgg:
+ return VisitRefOfJSONArrayAgg(in, f)
+ case *JSONObjectAgg:
+ return VisitRefOfJSONObjectAgg(in, f)
case *Max:
return VisitRefOfMax(in, f)
case *Min:
@@ -4885,6 +4926,8 @@ func VisitExpr(in Expr, f Visit) error {
return VisitRefOfIntroducerExpr(in, f)
case *IsExpr:
return VisitRefOfIsExpr(in, f)
+ case *JSONArrayAgg:
+ return VisitRefOfJSONArrayAgg(in, f)
case *JSONArrayExpr:
return VisitRefOfJSONArrayExpr(in, f)
case *JSONAttributesExpr:
@@ -4897,6 +4940,8 @@ func VisitExpr(in Expr, f Visit) error {
return VisitRefOfJSONExtractExpr(in, f)
case *JSONKeysExpr:
return VisitRefOfJSONKeysExpr(in, f)
+ case *JSONObjectAgg:
+ return VisitRefOfJSONObjectAgg(in, f)
case *JSONObjectExpr:
return VisitRefOfJSONObjectExpr(in, f)
case *JSONOverlapsExpr:
diff --git a/go/vt/sqlparser/cached_size.go b/go/vt/sqlparser/cached_size.go
index 94e004e5e5b..6e29c346338 100644
--- a/go/vt/sqlparser/cached_size.go
+++ b/go/vt/sqlparser/cached_size.go
@@ -1981,6 +1981,22 @@ func (cached *IsExpr) CachedSize(alloc bool) int64 {
}
return size
}
+func (cached *JSONArrayAgg) CachedSize(alloc bool) int64 {
+ if cached == nil {
+ return int64(0)
+ }
+ size := int64(0)
+ if alloc {
+ size += int64(24)
+ }
+ // field Expr vitess.io/vitess/go/vt/sqlparser.Expr
+ if cc, ok := cached.Expr.(cachedObject); ok {
+ size += cc.CachedSize(true)
+ }
+ // field OverClause *vitess.io/vitess/go/vt/sqlparser.OverClause
+ size += cached.OverClause.CachedSize(true)
+ return size
+}
func (cached *JSONArrayExpr) CachedSize(alloc bool) int64 {
if cached == nil {
return int64(0)
@@ -2113,6 +2129,26 @@ func (cached *JSONKeysExpr) CachedSize(alloc bool) int64 {
}
return size
}
+func (cached *JSONObjectAgg) CachedSize(alloc bool) int64 {
+ if cached == nil {
+ return int64(0)
+ }
+ size := int64(0)
+ if alloc {
+ size += int64(48)
+ }
+ // field Key vitess.io/vitess/go/vt/sqlparser.Expr
+ if cc, ok := cached.Key.(cachedObject); ok {
+ size += cc.CachedSize(true)
+ }
+ // field Value vitess.io/vitess/go/vt/sqlparser.Expr
+ if cc, ok := cached.Value.(cachedObject); ok {
+ size += cc.CachedSize(true)
+ }
+ // field OverClause *vitess.io/vitess/go/vt/sqlparser.OverClause
+ size += cached.OverClause.CachedSize(true)
+ return size
+}
func (cached *JSONObjectExpr) CachedSize(alloc bool) int64 {
if cached == nil {
return int64(0)
diff --git a/go/vt/sqlparser/constants.go b/go/vt/sqlparser/constants.go
index 024a2148c33..228546cb422 100644
--- a/go/vt/sqlparser/constants.go
+++ b/go/vt/sqlparser/constants.go
@@ -478,6 +478,9 @@ const (
// KillType strings
ConnectionStr = "connection"
QueryStr = "query"
+
+ // GroupConcatDefaultSeparator is the default separator for GroupConcatExpr.
+ GroupConcatDefaultSeparator = ","
)
// Constants for Enum Type - Insert.Action
diff --git a/go/vt/sqlparser/keywords.go b/go/vt/sqlparser/keywords.go
index 2f83d026fbc..a10fbd8384a 100644
--- a/go/vt/sqlparser/keywords.go
+++ b/go/vt/sqlparser/keywords.go
@@ -356,6 +356,7 @@ var keywords = []keyword{
{"join", JOIN},
{"json", JSON},
{"json_array", JSON_ARRAY},
+ {"json_arrayagg", JSON_ARRAYAGG},
{"json_array_append", JSON_ARRAY_APPEND},
{"json_array_insert", JSON_ARRAY_INSERT},
{"json_contains", JSON_CONTAINS},
@@ -363,12 +364,13 @@ var keywords = []keyword{
{"json_depth", JSON_DEPTH},
{"json_extract", JSON_EXTRACT},
{"json_insert", JSON_INSERT},
- {"json_length", JSON_LENGTH},
{"json_keys", JSON_KEYS},
+ {"json_length", JSON_LENGTH},
{"json_merge", JSON_MERGE},
{"json_merge_patch", JSON_MERGE_PATCH},
{"json_merge_preserve", JSON_MERGE_PRESERVE},
{"json_object", JSON_OBJECT},
+ {"json_objectagg", JSON_OBJECTAGG},
{"json_overlaps", JSON_OVERLAPS},
{"json_pretty", JSON_PRETTY},
{"json_remove", JSON_REMOVE},
diff --git a/go/vt/sqlparser/normalizer_test.go b/go/vt/sqlparser/normalizer_test.go
index 19b0cfbcac6..c574b00832d 100644
--- a/go/vt/sqlparser/normalizer_test.go
+++ b/go/vt/sqlparser/normalizer_test.go
@@ -82,17 +82,24 @@ func TestNormalize(t *testing.T) {
}, {
// datetime val
in: "select * from t where foobar = timestamp'2012-02-29 12:34:56.123456'",
- outstmt: "select * from t where foobar = :foobar /* DATETIME(6) */",
+ outstmt: "select * from t where foobar = CAST(:foobar AS DATETIME(6))",
outbv: map[string]*querypb.BindVariable{
"foobar": sqltypes.ValueBindVariable(sqltypes.NewDatetime("2012-02-29 12:34:56.123456")),
},
}, {
// time val
in: "select * from t where foobar = time'12:34:56.123456'",
- outstmt: "select * from t where foobar = :foobar /* TIME(6) */",
+ outstmt: "select * from t where foobar = CAST(:foobar AS TIME(6))",
outbv: map[string]*querypb.BindVariable{
"foobar": sqltypes.ValueBindVariable(sqltypes.NewTime("12:34:56.123456")),
},
+ }, {
+ // time val
+ in: "select * from t where foobar = time'12:34:56'",
+ outstmt: "select * from t where foobar = CAST(:foobar AS TIME)",
+ outbv: map[string]*querypb.BindVariable{
+ "foobar": sqltypes.ValueBindVariable(sqltypes.NewTime("12:34:56")),
+ },
}, {
// multiple vals
in: "select * from t where foo = 1.2 and bar = 2",
@@ -334,21 +341,21 @@ func TestNormalize(t *testing.T) {
}, {
// DateVal should also be normalized
in: `select date'2022-08-06'`,
- outstmt: `select :bv1 /* DATE */ from dual`,
+ outstmt: `select CAST(:bv1 AS DATE) from dual`,
outbv: map[string]*querypb.BindVariable{
"bv1": sqltypes.ValueBindVariable(sqltypes.MakeTrusted(sqltypes.Date, []byte("2022-08-06"))),
},
}, {
// TimeVal should also be normalized
in: `select time'17:05:12'`,
- outstmt: `select :bv1 /* TIME */ from dual`,
+ outstmt: `select CAST(:bv1 AS TIME) from dual`,
outbv: map[string]*querypb.BindVariable{
"bv1": sqltypes.ValueBindVariable(sqltypes.MakeTrusted(sqltypes.Time, []byte("17:05:12"))),
},
}, {
// TimestampVal should also be normalized
in: `select timestamp'2022-08-06 17:05:12'`,
- outstmt: `select :bv1 /* DATETIME */ from dual`,
+ outstmt: `select CAST(:bv1 AS DATETIME) from dual`,
outbv: map[string]*querypb.BindVariable{
"bv1": sqltypes.ValueBindVariable(sqltypes.MakeTrusted(sqltypes.Datetime, []byte("2022-08-06 17:05:12"))),
},
diff --git a/go/vt/sqlparser/parse_test.go b/go/vt/sqlparser/parse_test.go
index 0fef81f4514..4875bcc5f63 100644
--- a/go/vt/sqlparser/parse_test.go
+++ b/go/vt/sqlparser/parse_test.go
@@ -1089,7 +1089,7 @@ var (
output: "select /* quote quote in string */ 'a\\'a' from t",
}, {
input: "select /* double quote quote in string */ \"a\"\"a\" from t",
- output: "select /* double quote quote in string */ 'a\\\"a' from t",
+ output: "select /* double quote quote in string */ 'a\"a' from t",
}, {
input: "select /* quote in double quoted string */ \"a'a\" from t",
output: "select /* quote in double quoted string */ 'a\\'a' from t",
@@ -1098,7 +1098,8 @@ var (
}, {
input: "select /* literal backslash in string */ 'a\\\\na' from t",
}, {
- input: "select /* all escapes */ '\\0\\'\\\"\\b\\n\\r\\t\\Z\\\\' from t",
+ input: "select /* all escapes */ '\\0\\'\\\"\\b\\n\\r\\t\\Z\\\\' from t",
+ output: "select /* all escapes */ '\\0\\'\"\\b\\n\\r\\t\\Z\\\\' from t",
}, {
input: "select /* non-escape */ '\\x' from t",
output: "select /* non-escape */ 'x' from t",
@@ -2926,12 +2927,24 @@ var (
}, {
input: "DROP /* comment */ PREPARE stmt1",
output: "deallocate /* comment */ prepare stmt1",
+ }, {
+ input: "select count(1) from user where x_id = 'abc' group by n_id having json_arrayagg(indexes) = '[]'",
+ output: "select count(1) from `user` where x_id = 'abc' group by n_id having json_arrayagg(`indexes`) = '[]'",
+ }, {
+ input: "select count(1) from user where x_id = 'abc' group by n_id having json_arrayagg(x + 'abc') over w = '[]'",
+ output: "select count(1) from `user` where x_id = 'abc' group by n_id having json_arrayagg(x + 'abc') over w = '[]'",
+ }, {
+ input: "select count(1) from user where x_id = 'abc' group by n_id having json_objectagg(a, b) over w = '[]'",
+ output: "select count(1) from `user` where x_id = 'abc' group by n_id having json_objectagg(a, b) over w = '[]'",
+ }, {
+ input: "select count(1) from user where x_id = 'abc' group by n_id having json_objectagg(a, b) = '[]'",
+ output: "select count(1) from `user` where x_id = 'abc' group by n_id having json_objectagg(a, b) = '[]'",
}, {
input: `SELECT JSON_PRETTY('{"a":"10","b":"15","x":"25"}')`,
- output: `select json_pretty('{\"a\":\"10\",\"b\":\"15\",\"x\":\"25\"}') from dual`,
+ output: `select json_pretty('{"a":"10","b":"15","x":"25"}') from dual`,
}, {
input: `SELECT JSON_PRETTY(N'{"a":"10","b":"15","x":"25"}')`,
- output: `select json_pretty(N'{\"a\":\"10\",\"b\":\"15\",\"x\":\"25\"}') from dual`,
+ output: `select json_pretty(N'{"a":"10","b":"15","x":"25"}') from dual`,
/*We need to ignore this test because, after the normalizer, we change the produced NChar
string into an introducer expression, so the vttablet will never see a NChar string */
ignoreNormalizerTest: true,
@@ -2946,13 +2959,13 @@ var (
output: "select jcol, json_storage_size(jcol) as Size from jtable",
}, {
input: `SELECT jcol, JSON_STORAGE_SIZE(N'{"a":"10","b":"15","x":"25"}') AS Size FROM jtable`,
- output: `select jcol, json_storage_size(N'{\"a\":\"10\",\"b\":\"15\",\"x\":\"25\"}') as Size from jtable`,
+ output: `select jcol, json_storage_size(N'{"a":"10","b":"15","x":"25"}') as Size from jtable`,
/*We need to ignore this test because, after the normalizer, we change the produced NChar
string into an introducer expression, so the vttablet will never see a NChar string */
ignoreNormalizerTest: true,
}, {
input: `SELECT JSON_STORAGE_SIZE('[100, "sakila", [1, 3, 5], 425.05]') AS A, JSON_STORAGE_SIZE('{"a": 1000, "b": "a", "c": "[1, 3, 5, 7]"}') AS B, JSON_STORAGE_SIZE('{"a": 1000, "b": "wxyz", "c": "[1, 3, 5, 7]"}') AS C,JSON_STORAGE_SIZE('[100, "json", [[10, 20, 30], 3, 5], 425.05]') AS D`,
- output: `select json_storage_size('[100, \"sakila\", [1, 3, 5], 425.05]') as A, json_storage_size('{\"a\": 1000, \"b\": \"a\", \"c\": \"[1, 3, 5, 7]\"}') as B, json_storage_size('{\"a\": 1000, \"b\": \"wxyz\", \"c\": \"[1, 3, 5, 7]\"}') as C, json_storage_size('[100, \"json\", [[10, 20, 30], 3, 5], 425.05]') as D from dual`,
+ output: `select json_storage_size('[100, "sakila", [1, 3, 5], 425.05]') as A, json_storage_size('{"a": 1000, "b": "a", "c": "[1, 3, 5, 7]"}') as B, json_storage_size('{"a": 1000, "b": "wxyz", "c": "[1, 3, 5, 7]"}') as C, json_storage_size('[100, "json", [[10, 20, 30], 3, 5], 425.05]') as D from dual`,
}, {
input: "SELECT JSON_STORAGE_SIZE(@j)",
output: "select json_storage_size(@j) from dual",
@@ -2961,10 +2974,10 @@ var (
output: "select json_storage_free(jcol) from jtable",
}, {
input: `SELECT JSON_STORAGE_FREE('{"a":"10","b":"15","x":"25"}')`,
- output: `select json_storage_free('{\"a\":\"10\",\"b\":\"15\",\"x\":\"25\"}') from dual`,
+ output: `select json_storage_free('{"a":"10","b":"15","x":"25"}') from dual`,
}, {
input: `SELECT JSON_STORAGE_FREE(N'{"a":"10","b":"15","x":"25"}')`,
- output: `select json_storage_free(N'{\"a\":\"10\",\"b\":\"15\",\"x\":\"25\"}') from dual`,
+ output: `select json_storage_free(N'{"a":"10","b":"15","x":"25"}') from dual`,
/*We need to ignore this test because, after the normalizer, we change the produced NChar
string into an introducer expression, so the vttablet will never see a NChar string */
ignoreNormalizerTest: true,
@@ -3003,13 +3016,13 @@ var (
output: "select trim(both 'a' from 'abc') from dual",
}, {
input: `SELECT * FROM JSON_TABLE('[ {"c1": null} ]','$[*]' COLUMNS( c1 INT PATH '$.c1' ERROR ON ERROR )) as jt`,
- output: `select * from json_table('[ {\"c1\": null} ]', '$[*]' columns(
+ output: `select * from json_table('[ {"c1": null} ]', '$[*]' columns(
c1 INT path '$.c1' error on error
)
) as jt`,
}, {
input: `SELECT * FROM JSON_TABLE( '[{"a": 1, "b": [11,111]}, {"a": 2, "b": [22,222]}]', '$[*]' COLUMNS(a INT PATH '$.a', NESTED PATH '$.b[*]' COLUMNS (b1 INT PATH '$'), NESTED PATH '$.b[*]' COLUMNS (b2 INT PATH '$'))) AS jt`,
- output: `select * from json_table('[{\"a\": 1, \"b\": [11,111]}, {\"a\": 2, \"b\": [22,222]}]', '$[*]' columns(
+ output: `select * from json_table('[{"a": 1, "b": [11,111]}, {"a": 2, "b": [22,222]}]', '$[*]' columns(
a INT path '$.a' ,
nested path '$.b[*]' columns(
b1 INT path '$'
@@ -3021,22 +3034,22 @@ var (
) as jt`,
}, {
input: `SELECT * FROM JSON_TABLE('[ {"c1": null} ]','$[*]' COLUMNS( c1 INT PATH '$.c1' ERROR ON ERROR )) as jt`,
- output: `select * from json_table('[ {\"c1\": null} ]', '$[*]' columns(
+ output: `select * from json_table('[ {"c1": null} ]', '$[*]' columns(
c1 INT path '$.c1' error on error
)
) as jt`,
}, {
input: `SELECT * FROM JSON_TABLE('[{"a":"3"},{"a":2},{"b":1},{"a":0},{"a":[1,2]}]', "$[*]" COLUMNS(rowid FOR ORDINALITY, ac VARCHAR(100) PATH "$.a" DEFAULT '111' ON EMPTY DEFAULT '999' ON ERROR, aj JSON PATH "$.a" DEFAULT '{"x": 333}' ON EMPTY, bx INT EXISTS PATH "$.b" ) ) AS tt`,
- output: `select * from json_table('[{\"a\":\"3\"},{\"a\":2},{\"b\":1},{\"a\":0},{\"a\":[1,2]}]', '$[*]' columns(
+ output: `select * from json_table('[{"a":"3"},{"a":2},{"b":1},{"a":0},{"a":[1,2]}]', '$[*]' columns(
rowid for ordinality,
ac VARCHAR(100) path '$.a' default '111' on empty default '999' on error ,
- aj JSON path '$.a' default '{\"x\": 333}' on empty ,
+ aj JSON path '$.a' default '{"x": 333}' on empty ,
bx INT exists path '$.b'
)
) as tt`,
}, {
input: `SELECT * FROM JSON_TABLE( '[ {"a": 1, "b": [11,111]}, {"a": 2, "b": [22,222]}, {"a":3}]', '$[*]' COLUMNS( a INT PATH '$.a', NESTED PATH '$.b[*]' COLUMNS (b INT PATH '$') ) ) AS jt WHERE b IS NOT NULL`,
- output: `select * from json_table('[ {\"a\": 1, \"b\": [11,111]}, {\"a\": 2, \"b\": [22,222]}, {\"a\":3}]', '$[*]' columns(
+ output: `select * from json_table('[ {"a": 1, "b": [11,111]}, {"a": 2, "b": [22,222]}, {"a":3}]', '$[*]' columns(
a INT path '$.a' ,
nested path '$.b[*]' columns(
b INT path '$'
@@ -3045,14 +3058,14 @@ var (
) as jt where b is not null`,
}, {
input: `SELECT * FROM JSON_TABLE( '[{"x":2,"y":"8"},{"x":"3","y":"7"},{"x":"4","y":6}]', "$[1]" COLUMNS( xval VARCHAR(100) PATH "$.x", yval VARCHAR(100) PATH "$.y" ) ) AS jt1`,
- output: `select * from json_table('[{\"x\":2,\"y\":\"8\"},{\"x\":\"3\",\"y\":\"7\"},{\"x\":\"4\",\"y\":6}]', '$[1]' columns(
+ output: `select * from json_table('[{"x":2,"y":"8"},{"x":"3","y":"7"},{"x":"4","y":6}]', '$[1]' columns(
xval VARCHAR(100) path '$.x' ,
yval VARCHAR(100) path '$.y'
)
) as jt1`,
}, {
input: `SELECT * FROM JSON_TABLE( '[{"a": "a_val","b": [{"c": "c_val", "l": [1,2]}]},{"a": "a_val", "b": [{"c": "c_val","l": [11]}, {"c": "c_val", "l": [22]}]}]', '$[*]' COLUMNS( top_ord FOR ORDINALITY, apath VARCHAR(10) PATH '$.a', NESTED PATH '$.b[*]' COLUMNS ( bpath VARCHAR(10) PATH '$.c', ord FOR ORDINALITY, NESTED PATH '$.l[*]' COLUMNS (lpath varchar(10) PATH '$') ) )) as jt`,
- output: `select * from json_table('[{\"a\": \"a_val\",\"b\": [{\"c\": \"c_val\", \"l\": [1,2]}]},{\"a\": \"a_val\", \"b\": [{\"c\": \"c_val\",\"l\": [11]}, {\"c\": \"c_val\", \"l\": [22]}]}]', '$[*]' columns(
+ output: `select * from json_table('[{"a": "a_val","b": [{"c": "c_val", "l": [1,2]}]},{"a": "a_val", "b": [{"c": "c_val","l": [11]}, {"c": "c_val", "l": [22]}]}]', '$[*]' columns(
top_ord for ordinality,
apath VARCHAR(10) path '$.a' ,
nested path '$.b[*]' columns(
@@ -3066,7 +3079,7 @@ var (
) as jt`,
}, {
input: `SELECT * FROM JSON_TABLE('[{"x":2,"y":"8"},{"x":"3","y":"7"},{"x":"4","y":6}]', "$[1]" COLUMNS( xval VARCHAR(100) PATH "$.x", yval VARCHAR(100) PATH "$.y")) AS jt1;`,
- output: `select * from json_table('[{\"x\":2,\"y\":\"8\"},{\"x\":\"3\",\"y\":\"7\"},{\"x\":\"4\",\"y\":6}]', '$[1]' columns(
+ output: `select * from json_table('[{"x":2,"y":"8"},{"x":"3","y":"7"},{"x":"4","y":6}]', '$[1]' columns(
xval VARCHAR(100) path '$.x' ,
yval VARCHAR(100) path '$.y'
)
@@ -3106,7 +3119,7 @@ var (
output: "select json_quote(BIN(11)) from dual",
}, {
input: `SELECT JSON_QUOTE('null'), JSON_QUOTE('"null"')`,
- output: `select json_quote('null'), json_quote('\"null\"') from dual`,
+ output: `select json_quote('null'), json_quote('"null"') from dual`,
}, {
input: "select t1.a, dt.a from t1, lateral (select t1.a+t2.a as a from t2) dt",
output: "select t1.a, dt.a from t1, lateral (select t1.a + t2.a as a from t2) as dt",
@@ -3115,37 +3128,37 @@ var (
output: "select b from v1 as vq1, lateral (select count(*) from v1 as vq2 having vq1.b = 3) as dt",
}, {
input: `SELECT JSON_SCHEMA_VALID('{"type":"string","pattern":"("}', '"abc"')`,
- output: `select json_schema_valid('{\"type\":\"string\",\"pattern\":\"(\"}', '\"abc\"') from dual`,
+ output: `select json_schema_valid('{"type":"string","pattern":"("}', '"abc"') from dual`,
}, {
input: `SELECT JSON_SCHEMA_VALID('{"type":"string","pattern":"("}', @a)`,
- output: `select json_schema_valid('{\"type\":\"string\",\"pattern\":\"(\"}', @a) from dual`,
+ output: `select json_schema_valid('{"type":"string","pattern":"("}', @a) from dual`,
}, {
input: `SELECT JSON_SCHEMA_VALID(@b, BIN(1))`,
output: `select json_schema_valid(@b, BIN(1)) from dual`,
}, {
input: `SELECT JSON_SCHEMA_VALID(N'{"type":"string","pattern":"("}', '"abc"')`,
- output: `select json_schema_valid(N'{\"type\":\"string\",\"pattern\":\"(\"}', '\"abc\"') from dual`,
+ output: `select json_schema_valid(N'{"type":"string","pattern":"("}', '"abc"') from dual`,
/*We need to ignore this test because, after the normalizer, we change the produced NChar
string into an introducer expression, so the vttablet will never see a NChar string */
ignoreNormalizerTest: true,
}, {
input: `SELECT JSON_SCHEMA_VALIDATION_REPORT('{"type":"string","pattern":"("}', '"abc"')`,
- output: `select json_schema_validation_report('{\"type\":\"string\",\"pattern\":\"(\"}', '\"abc\"') from dual`,
+ output: `select json_schema_validation_report('{"type":"string","pattern":"("}', '"abc"') from dual`,
}, {
input: `SELECT JSON_SCHEMA_VALIDATION_REPORT('{"type":"string","pattern":"("}', @a)`,
- output: `select json_schema_validation_report('{\"type\":\"string\",\"pattern\":\"(\"}', @a) from dual`,
+ output: `select json_schema_validation_report('{"type":"string","pattern":"("}', @a) from dual`,
}, {
input: `SELECT JSON_SCHEMA_VALIDATION_REPORT(@b, BIN(1))`,
output: `select json_schema_validation_report(@b, BIN(1)) from dual`,
}, {
input: `SELECT JSON_SCHEMA_VALIDATION_REPORT(N'{"type":"string","pattern":"("}', '"abc"')`,
- output: `select json_schema_validation_report(N'{\"type\":\"string\",\"pattern\":\"(\"}', '\"abc\"') from dual`,
+ output: `select json_schema_validation_report(N'{"type":"string","pattern":"("}', '"abc"') from dual`,
/*We need to ignore this test because, after the normalizer, we change the produced NChar
string into an introducer expression, so the vttablet will never see a NChar string */
ignoreNormalizerTest: true,
}, {
input: `SELECT JSON_CONTAINS('{"a": 1, "b": 2, "c": {"d": 4}}', '1')`,
- output: `select json_contains('{\"a\": 1, \"b\": 2, \"c\": {\"d\": 4}}', '1') from dual`,
+ output: `select json_contains('{"a": 1, "b": 2, "c": {"d": 4}}', '1') from dual`,
}, {
input: "SELECT JSON_CONTAINS(@j, @j2)",
output: "select json_contains(@j, @j2) from dual",
@@ -3157,7 +3170,7 @@ var (
output: "select json_contains_path(@j, 'one', '$.a', '$.e') from dual",
}, {
input: `SELECT JSON_CONTAINS_PATH('{"a": 1, "b": 2, "c": {"d": 4}}', 'one', '$.a', '$.e')`,
- output: `select json_contains_path('{\"a\": 1, \"b\": 2, \"c\": {\"d\": 4}}', 'one', '$.a', '$.e') from dual`,
+ output: `select json_contains_path('{"a": 1, "b": 2, "c": {"d": 4}}', 'one', '$.a', '$.e') from dual`,
}, {
input: "SELECT JSON_CONTAINS_PATH(@j, TRIM('one'), '$.a', '$.e')",
output: "select json_contains_path(@j, trim('one'), '$.a', '$.e') from dual",
@@ -3172,19 +3185,19 @@ var (
output: "select c, json_extract(c, '$.id'), g from jemp where json_extract(c, '$.id') > 1 order by json_extract(c, '$.name') asc",
}, {
input: `SELECT JSON_EXTRACT('{"a": 1, "b": 2, "c": {"d": 4}}', '$.a', @j)`,
- output: `select json_extract('{\"a\": 1, \"b\": 2, \"c\": {\"d\": 4}}', '$.a', @j) from dual`,
+ output: `select json_extract('{"a": 1, "b": 2, "c": {"d": 4}}', '$.a', @j) from dual`,
}, {
input: "SELECT JSON_EXTRACT(@k, TRIM('abc'))",
output: `select json_extract(@k, trim('abc')) from dual`,
}, {
input: `SELECT JSON_KEYS('{\"a\": 1, \"b\": 2, \"c\": {\"d\": 4}}', '$.a')`,
- output: `select json_keys('{\"a\": 1, \"b\": 2, \"c\": {\"d\": 4}}', '$.a') from dual`,
+ output: `select json_keys('{"a": 1, "b": 2, "c": {"d": 4}}', '$.a') from dual`,
}, {
input: `SELECT JSON_KEYS('{\"a\": 1, \"b\": 2, \"c\": {\"d\": 4}}')`,
- output: `select json_keys('{\"a\": 1, \"b\": 2, \"c\": {\"d\": 4}}') from dual`,
+ output: `select json_keys('{"a": 1, "b": 2, "c": {"d": 4}}') from dual`,
}, {
input: `SELECT JSON_OVERLAPS('{\"a\": 1, \"b\": 2, \"c\": {\"d\": 4}}', '$.a')`,
- output: `select json_overlaps('{\"a\": 1, \"b\": 2, \"c\": {\"d\": 4}}', '$.a') from dual`,
+ output: `select json_overlaps('{"a": 1, "b": 2, "c": {"d": 4}}', '$.a') from dual`,
}, {
input: "SELECT JSON_OVERLAPS(@j, @k)",
output: "select json_overlaps(@j, @k) from dual",
@@ -3196,10 +3209,10 @@ var (
output: "select json_search(@j, 'one', 'abc') from dual",
}, {
input: `SELECT JSON_SEARCH('{\"a\": 1, \"b\": 2, \"c\": {\"d\": 4}}', @j, BIN(2))`,
- output: `select json_search('{\"a\": 1, \"b\": 2, \"c\": {\"d\": 4}}', @j, BIN(2)) from dual`,
+ output: `select json_search('{"a": 1, "b": 2, "c": {"d": 4}}', @j, BIN(2)) from dual`,
}, {
input: `SELECT JSON_SEARCH('{\"a\": 1, \"b\": 2, \"c\": {\"d\": 4}}', 'all', '10', NULL)`,
- output: `select json_search('{\"a\": 1, \"b\": 2, \"c\": {\"d\": 4}}', 'all', '10', null) from dual`,
+ output: `select json_search('{"a": 1, "b": 2, "c": {"d": 4}}', 'all', '10', null) from dual`,
}, {
input: "SELECT JSON_SEARCH(@j, 'all', '%b%', '', '$[3]')",
output: "select json_search(@j, 'all', '%b%', '', '$[3]') from dual",
@@ -3208,7 +3221,7 @@ var (
output: "select json_search(@j, 'all', '%b%', 'a', '$[3]') from dual",
}, {
input: `SELECT JSON_VALUE('{\"a\": 1, \"b\": 2, \"c\": {\"d\": 4}}', '$.a')`,
- output: `select json_value('{\"a\": 1, \"b\": 2, \"c\": {\"d\": 4}}', '$.a') from dual`,
+ output: `select json_value('{"a": 1, "b": 2, "c": {"d": 4}}', '$.a') from dual`,
}, {
input: `SELECT JSON_VALUE(@j, @k)`,
output: `select json_value(@j, @k) from dual`,
@@ -3220,40 +3233,40 @@ var (
output: `select json_value(@j, @k returning DECIMAL(4, 2)) from dual`,
}, {
input: `SELECT JSON_VALUE('{"fname": "Joe", "lname": "Palmer"}', '$.fname' returning char(49) Charset utf8mb4 error on error)`,
- output: `select json_value('{\"fname\": \"Joe\", \"lname\": \"Palmer\"}', '$.fname' returning char(49) character set utf8mb4 error on error) from dual`,
+ output: `select json_value('{"fname": "Joe", "lname": "Palmer"}', '$.fname' returning char(49) character set utf8mb4 error on error) from dual`,
}, {
input: `SELECT JSON_VALUE('{"item": "shoes", "price": "49.95"}', '$.price' NULL ON EMPTY) `,
- output: `select json_value('{\"item\": \"shoes\", \"price\": \"49.95\"}', '$.price' null on empty) from dual`,
+ output: `select json_value('{"item": "shoes", "price": "49.95"}', '$.price' null on empty) from dual`,
}, {
input: `SELECT JSON_VALUE('{"item": "shoes", "price": "49.95"}', '$.price' NULL ON ERROR) `,
- output: `select json_value('{\"item\": \"shoes\", \"price\": \"49.95\"}', '$.price' null on error) from dual`,
+ output: `select json_value('{"item": "shoes", "price": "49.95"}', '$.price' null on error) from dual`,
}, {
input: `SELECT JSON_VALUE('{"item": "shoes", "price": "49.95"}', '$.price' NULL ON EMPTY ERROR ON ERROR) `,
- output: `select json_value('{\"item\": \"shoes\", \"price\": \"49.95\"}', '$.price' null on empty error on error) from dual`,
+ output: `select json_value('{"item": "shoes", "price": "49.95"}', '$.price' null on empty error on error) from dual`,
}, {
input: `select json_value(@j, @k RETURNING FLOAT NULL ON EMPTY ERROR ON ERROR) from dual`,
output: `select json_value(@j, @k returning FLOAT null on empty error on error) from dual`,
}, {
input: `SELECT 17 MEMBER OF ('[23, "abc", 17, "ab", 10]')`,
- output: `select 17 member of ('[23, \"abc\", 17, \"ab\", 10]') from dual`,
+ output: `select 17 member of ('[23, "abc", 17, "ab", 10]') from dual`,
}, {
input: "SELECT @j MEMBER OF (@k)",
output: "select @j member of (@k) from dual",
}, {
input: `SELECT 17 MEMBER OF('[23, "abc", "17", "ab", 10]'), "17" MEMBER OF('[23, "abc", 17, "ab", 10]')`,
- output: `select 17 member of ('[23, \"abc\", \"17\", \"ab\", 10]'), '17' member of ('[23, \"abc\", 17, \"ab\", 10]') from dual`,
+ output: `select 17 member of ('[23, "abc", "17", "ab", 10]'), '17' member of ('[23, "abc", 17, "ab", 10]') from dual`,
}, {
input: `SELECT JSON_DEPTH('{}'), JSON_DEPTH('[]'), JSON_DEPTH('true')`,
output: `select json_depth('{}'), json_depth('[]'), json_depth('true') from dual`,
}, {
input: `SELECT JSON_LENGTH('{"a": 1, "b": {"c": 30}}')`,
- output: `select json_length('{\"a\": 1, \"b\": {\"c\": 30}}') from dual`,
+ output: `select json_length('{"a": 1, "b": {"c": 30}}') from dual`,
}, {
input: `SELECT JSON_LENGTH('{"a": 1, "b": {"c": 30}}', '$.b');`,
- output: `select json_length('{\"a\": 1, \"b\": {\"c\": 30}}', '$.b') from dual`,
+ output: `select json_length('{"a": 1, "b": {"c": 30}}', '$.b') from dual`,
}, {
input: `SELECT JSON_LENGTH('{\"a\": 1, \"b\": {\"c\": 30}}', @j);`,
- output: `select json_length('{\"a\": 1, \"b\": {\"c\": 30}}', @j) from dual`,
+ output: `select json_length('{"a": 1, "b": {"c": 30}}', @j) from dual`,
}, {
input: `SELECT jcol, JSON_LENGTH(jcol)`,
output: `select jcol, json_length(jcol) from dual`,
@@ -3265,49 +3278,49 @@ var (
output: `select json_type(json_extract(@j, '$.a[0]')) from dual`,
}, {
input: `SELECT JSON_VALID('{\"a\": 1}')`,
- output: `select json_valid('{\"a\": 1}') from dual`,
+ output: `select json_valid('{"a": 1}') from dual`,
}, {
input: "SELECT JSON_VALID(@j)",
output: "select json_valid(@j) from dual",
}, {
input: `SELECT JSON_ARRAY_APPEND('{ "a": 1, "b": [2, 3]}','$[1]', 'x')`,
- output: `select json_array_append('{ \"a\": 1, \"b\": [2, 3]}', '$[1]', 'x') from dual`,
+ output: `select json_array_append('{ "a": 1, "b": [2, 3]}', '$[1]', 'x') from dual`,
}, {
input: `SELECT JSON_ARRAY_APPEND('{ "a": 1, "b": [2, 3]}','$[1]', 'x', '$[2]', 1)`,
- output: `select json_array_append('{ \"a\": 1, \"b\": [2, 3]}', '$[1]', 'x', '$[2]', 1) from dual`,
+ output: `select json_array_append('{ "a": 1, "b": [2, 3]}', '$[1]', 'x', '$[2]', 1) from dual`,
}, {
input: `SELECT JSON_ARRAY_APPEND('{ "a": 1, "b": [2, 3]}','$[1]', 'x', @i, @j)`,
- output: `select json_array_append('{ \"a\": 1, \"b\": [2, 3]}', '$[1]', 'x', @i, @j) from dual`,
+ output: `select json_array_append('{ "a": 1, "b": [2, 3]}', '$[1]', 'x', @i, @j) from dual`,
}, {
input: `SELECT JSON_ARRAY_APPEND('{ "a": 1, "b": [2, 3]}', @j, 1)`,
- output: `select json_array_append('{ \"a\": 1, \"b\": [2, 3]}', @j, 1) from dual`,
+ output: `select json_array_append('{ "a": 1, "b": [2, 3]}', @j, 1) from dual`,
}, {
input: `SELECT JSON_ARRAY_APPEND('{ "a": 1, "b": [2, 3]}', '$[1]', @j)`,
- output: `select json_array_append('{ \"a\": 1, \"b\": [2, 3]}', '$[1]', @j) from dual`,
+ output: `select json_array_append('{ "a": 1, "b": [2, 3]}', '$[1]', @j) from dual`,
}, {
input: `SELECT JSON_ARRAY_APPEND('{ "a": 1, "b": [2, 3]}', @j, @k)`,
- output: `select json_array_append('{ \"a\": 1, \"b\": [2, 3]}', @j, @k) from dual`,
+ output: `select json_array_append('{ "a": 1, "b": [2, 3]}', @j, @k) from dual`,
}, {
input: "SELECT JSON_ARRAY_APPEND(@i,@j,@k)",
output: `select json_array_append(@i, @j, @k) from dual`,
}, {
input: `SELECT JSON_ARRAY_INSERT('{ "a": 1, "b": [2, 3]}','$[1]', 'x')`,
- output: `select json_array_insert('{ \"a\": 1, \"b\": [2, 3]}', '$[1]', 'x') from dual`,
+ output: `select json_array_insert('{ "a": 1, "b": [2, 3]}', '$[1]', 'x') from dual`,
}, {
input: `SELECT JSON_ARRAY_INSERT('{ "a": 1, "b": [2, 3]}','$[1]', 'x', '$[2]', 1)`,
- output: `select json_array_insert('{ \"a\": 1, \"b\": [2, 3]}', '$[1]', 'x', '$[2]', 1) from dual`,
+ output: `select json_array_insert('{ "a": 1, "b": [2, 3]}', '$[1]', 'x', '$[2]', 1) from dual`,
}, {
input: `SELECT JSON_ARRAY_INSERT('{ "a": 1, "b": [2, 3]}','$[1]', 'x', @i, @j)`,
- output: `select json_array_insert('{ \"a\": 1, \"b\": [2, 3]}', '$[1]', 'x', @i, @j) from dual`,
+ output: `select json_array_insert('{ "a": 1, "b": [2, 3]}', '$[1]', 'x', @i, @j) from dual`,
}, {
input: `SELECT JSON_ARRAY_INSERT('{ "a": 1, "b": [2, 3]}', @j, 1)`,
- output: `select json_array_insert('{ \"a\": 1, \"b\": [2, 3]}', @j, 1) from dual`,
+ output: `select json_array_insert('{ "a": 1, "b": [2, 3]}', @j, 1) from dual`,
}, {
input: `SELECT JSON_ARRAY_INSERT('{ "a": 1, "b": [2, 3]}', '$[1]', @j)`,
- output: `select json_array_insert('{ \"a\": 1, \"b\": [2, 3]}', '$[1]', @j) from dual`,
+ output: `select json_array_insert('{ "a": 1, "b": [2, 3]}', '$[1]', @j) from dual`,
}, {
input: `SELECT JSON_ARRAY_INSERT('{ "a": 1, "b": [2, 3]}', @j, @k)`,
- output: `select json_array_insert('{ \"a\": 1, \"b\": [2, 3]}', @j, @k) from dual`,
+ output: `select json_array_insert('{ "a": 1, "b": [2, 3]}', @j, @k) from dual`,
}, {
input: "SELECT JSON_ARRAY_INSERT(@i,@j,@k)",
output: "select json_array_insert(@i, @j, @k) from dual",
@@ -3316,22 +3329,22 @@ var (
output: "select json_array_insert(@j, '$[0]', 'x', '$[2][1]', 'y') from dual",
}, {
input: `SELECT JSON_INSERT('{ "a": 1, "b": [2, 3]}','$[1]', 'x')`,
- output: `select json_insert('{ \"a\": 1, \"b\": [2, 3]}', '$[1]', 'x') from dual`,
+ output: `select json_insert('{ "a": 1, "b": [2, 3]}', '$[1]', 'x') from dual`,
}, {
input: `SELECT JSON_INSERT('{ "a": 1, "b": [2, 3]}','$[1]', 'x', '$[2]', 1)`,
- output: `select json_insert('{ \"a\": 1, \"b\": [2, 3]}', '$[1]', 'x', '$[2]', 1) from dual`,
+ output: `select json_insert('{ "a": 1, "b": [2, 3]}', '$[1]', 'x', '$[2]', 1) from dual`,
}, {
input: `SELECT JSON_INSERT('{ "a": 1, "b": [2, 3]}','$[1]', 'x', @i, @j)`,
- output: `select json_insert('{ \"a\": 1, \"b\": [2, 3]}', '$[1]', 'x', @i, @j) from dual`,
+ output: `select json_insert('{ "a": 1, "b": [2, 3]}', '$[1]', 'x', @i, @j) from dual`,
}, {
input: `SELECT JSON_INSERT('{ "a": 1, "b": [2, 3]}', @j, 1)`,
- output: `select json_insert('{ \"a\": 1, \"b\": [2, 3]}', @j, 1) from dual`,
+ output: `select json_insert('{ "a": 1, "b": [2, 3]}', @j, 1) from dual`,
}, {
input: `SELECT JSON_INSERT('{ "a": 1, "b": [2, 3]}', '$[1]', @j)`,
- output: `select json_insert('{ \"a\": 1, \"b\": [2, 3]}', '$[1]', @j) from dual`,
+ output: `select json_insert('{ "a": 1, "b": [2, 3]}', '$[1]', @j) from dual`,
}, {
input: `SELECT JSON_INSERT('{ "a": 1, "b": [2, 3]}', @j, @k)`,
- output: `select json_insert('{ \"a\": 1, \"b\": [2, 3]}', @j, @k) from dual`,
+ output: `select json_insert('{ "a": 1, "b": [2, 3]}', @j, @k) from dual`,
}, {
input: "SELECT JSON_INSERT(@i,@j,@k)",
output: "select json_insert(@i, @j, @k) from dual",
@@ -3340,22 +3353,22 @@ var (
output: "select json_insert(@j, '$.a', 10, '$.c', '[true, false]') from dual",
}, {
input: `SELECT JSON_REPLACE('{ "a": 1, "b": [2, 3]}','$[1]', 'x')`,
- output: `select json_replace('{ \"a\": 1, \"b\": [2, 3]}', '$[1]', 'x') from dual`,
+ output: `select json_replace('{ "a": 1, "b": [2, 3]}', '$[1]', 'x') from dual`,
}, {
input: `SELECT JSON_REPLACE('{ "a": 1, "b": [2, 3]}','$[1]', 'x', '$[2]', 1)`,
- output: `select json_replace('{ \"a\": 1, \"b\": [2, 3]}', '$[1]', 'x', '$[2]', 1) from dual`,
+ output: `select json_replace('{ "a": 1, "b": [2, 3]}', '$[1]', 'x', '$[2]', 1) from dual`,
}, {
input: `SELECT JSON_REPLACE('{ "a": 1, "b": [2, 3]}','$[1]', 'x', @i, @j)`,
- output: `select json_replace('{ \"a\": 1, \"b\": [2, 3]}', '$[1]', 'x', @i, @j) from dual`,
+ output: `select json_replace('{ "a": 1, "b": [2, 3]}', '$[1]', 'x', @i, @j) from dual`,
}, {
input: `SELECT JSON_REPLACE('{ "a": 1, "b": [2, 3]}', @j, 1)`,
- output: `select json_replace('{ \"a\": 1, \"b\": [2, 3]}', @j, 1) from dual`,
+ output: `select json_replace('{ "a": 1, "b": [2, 3]}', @j, 1) from dual`,
}, {
input: `SELECT JSON_REPLACE('{ "a": 1, "b": [2, 3]}', '$[1]', @j)`,
- output: `select json_replace('{ \"a\": 1, \"b\": [2, 3]}', '$[1]', @j) from dual`,
+ output: `select json_replace('{ "a": 1, "b": [2, 3]}', '$[1]', @j) from dual`,
}, {
input: `SELECT JSON_REPLACE('{ "a": 1, "b": [2, 3]}', @j, @k)`,
- output: `select json_replace('{ \"a\": 1, \"b\": [2, 3]}', @j, @k) from dual`,
+ output: `select json_replace('{ "a": 1, "b": [2, 3]}', @j, @k) from dual`,
}, {
input: "SELECT JSON_REPLACE(@i,@j,@k)",
output: "select json_replace(@i, @j, @k) from dual",
@@ -3364,22 +3377,22 @@ var (
output: "select json_replace(@j, '$.a', 10, '$.c', '[true, false]') from dual",
}, {
input: `SELECT JSON_SET('{ "a": 1, "b": [2, 3]}','$[1]', 'x')`,
- output: `select json_set('{ \"a\": 1, \"b\": [2, 3]}', '$[1]', 'x') from dual`,
+ output: `select json_set('{ "a": 1, "b": [2, 3]}', '$[1]', 'x') from dual`,
}, {
input: `SELECT JSON_SET('{ "a": 1, "b": [2, 3]}','$[1]', 'x', '$[2]', 1)`,
- output: `select json_set('{ \"a\": 1, \"b\": [2, 3]}', '$[1]', 'x', '$[2]', 1) from dual`,
+ output: `select json_set('{ "a": 1, "b": [2, 3]}', '$[1]', 'x', '$[2]', 1) from dual`,
}, {
input: `SELECT JSON_SET('{ "a": 1, "b": [2, 3]}','$[1]', 'x', @i, @j)`,
- output: `select json_set('{ \"a\": 1, \"b\": [2, 3]}', '$[1]', 'x', @i, @j) from dual`,
+ output: `select json_set('{ "a": 1, "b": [2, 3]}', '$[1]', 'x', @i, @j) from dual`,
}, {
input: `SELECT JSON_SET('{ "a": 1, "b": [2, 3]}', @j, 1)`,
- output: `select json_set('{ \"a\": 1, \"b\": [2, 3]}', @j, 1) from dual`,
+ output: `select json_set('{ "a": 1, "b": [2, 3]}', @j, 1) from dual`,
}, {
input: `SELECT JSON_SET('{ "a": 1, "b": [2, 3]}', '$[1]', @j)`,
- output: `select json_set('{ \"a\": 1, \"b\": [2, 3]}', '$[1]', @j) from dual`,
+ output: `select json_set('{ "a": 1, "b": [2, 3]}', '$[1]', @j) from dual`,
}, {
input: `SELECT JSON_SET('{ "a": 1, "b": [2, 3]}', @j, @k)`,
- output: `select json_set('{ \"a\": 1, \"b\": [2, 3]}', @j, @k) from dual`,
+ output: `select json_set('{ "a": 1, "b": [2, 3]}', @j, @k) from dual`,
}, {
input: "SELECT JSON_SET(@i,@j,@k)",
output: "select json_set(@i, @j, @k) from dual",
@@ -3406,10 +3419,10 @@ var (
output: "select json_merge(@i, '[true, false]') from dual",
}, {
input: `SELECT JSON_MERGE_PATCH('{"name": "x"}', '{"id": 47}')`,
- output: `select json_merge_patch('{\"name\": \"x\"}', '{\"id\": 47}') from dual`,
+ output: `select json_merge_patch('{"name": "x"}', '{"id": 47}') from dual`,
}, {
input: `SELECT JSON_MERGE_PATCH('{ "a": 1, "b":2 }','{ "a": 3, "c":4 }','{ "a": 5, "d":6 }');`,
- output: `select json_merge_patch('{ \"a\": 1, \"b\":2 }', '{ \"a\": 3, \"c\":4 }', '{ \"a\": 5, \"d\":6 }') from dual`,
+ output: `select json_merge_patch('{ "a": 1, "b":2 }', '{ "a": 3, "c":4 }', '{ "a": 5, "d":6 }') from dual`,
}, {
input: "SELECT JSON_MERGE_PATCH('[1, 2]', '[true, false]', 'hello')",
output: "select json_merge_patch('[1, 2]', '[true, false]', 'hello') from dual",
@@ -3424,10 +3437,10 @@ var (
output: "select json_merge_patch(@i, '[true, false]') from dual",
}, {
input: `SELECT JSON_MERGE_PRESERVE('{"name": "x"}', '{"id": 47}')`,
- output: `select json_merge_preserve('{\"name\": \"x\"}', '{\"id\": 47}') from dual`,
+ output: `select json_merge_preserve('{"name": "x"}', '{"id": 47}') from dual`,
}, {
input: `SELECT JSON_MERGE_PRESERVE('{ "a": 1, "b":2 }','{ "a": 3, "c":4 }','{ "a": 5, "d":6 }');`,
- output: `select json_merge_preserve('{ \"a\": 1, \"b\":2 }', '{ \"a\": 3, \"c\":4 }', '{ \"a\": 5, \"d\":6 }') from dual`,
+ output: `select json_merge_preserve('{ "a": 1, "b":2 }', '{ "a": 3, "c":4 }', '{ "a": 5, "d":6 }') from dual`,
}, {
input: "SELECT JSON_MERGE_PRESERVE('[1, 2]', '[true, false]', 'hello')",
output: "select json_merge_preserve('[1, 2]', '[true, false]', 'hello') from dual",
@@ -3445,19 +3458,19 @@ var (
output: "select json_remove(@i, '$[1]') from dual",
}, {
input: `SELECT JSON_REMOVE('["a", ["b", "c"], "d"]', '$[1]')`,
- output: `select json_remove('[\"a\", [\"b\", \"c\"], \"d\"]', '$[1]') from dual`,
+ output: `select json_remove('["a", ["b", "c"], "d"]', '$[1]') from dual`,
}, {
input: `SELECT JSON_REMOVE('["a", ["b", "c"], "d"]', @i)`,
- output: `select json_remove('[\"a\", [\"b\", \"c\"], \"d\"]', @i) from dual`,
+ output: `select json_remove('["a", ["b", "c"], "d"]', @i) from dual`,
}, {
input: `SELECT JSON_REMOVE('["a", ["b", "c"], "d"]', @i, @j, '$[0]', '$[1]','$[2]')`,
- output: `select json_remove('[\"a\", [\"b\", \"c\"], \"d\"]', @i, @j, '$[0]', '$[1]', '$[2]') from dual`,
+ output: `select json_remove('["a", ["b", "c"], "d"]', @i, @j, '$[0]', '$[1]', '$[2]') from dual`,
}, {
input: "SELECT JSON_UNQUOTE('abc')",
output: "select json_unquote('abc') from dual",
}, {
input: `SELECT JSON_UNQUOTE('\"\\\\t\\\\u0032\"')`,
- output: `select json_unquote('\"\\\\t\\\\u0032\"') from dual`,
+ output: `select json_unquote('"\\\\t\\\\u0032"') from dual`,
}, {
input: "SELECT JSON_UNQUOTE(@j)",
output: "select json_unquote(@j) from dual",
@@ -3787,7 +3800,7 @@ var (
output: "select `time`, subject, variance(val) over ( partition by `time`, subject) as window_result from observations group by `time`, subject",
}, {
input: "SELECT id, coalesce( (SELECT Json_arrayagg(Json_array(id)) FROM (SELECT *, Row_number() over (ORDER BY users.order ASC) FROM unsharded as users WHERE users.purchaseorderid = orders.id) users), json_array()) AS users, coalesce( (SELECT json_arrayagg(json_array(id)) FROM (SELECT *, row_number() over (ORDER BY tests.order ASC) FROM unsharded as tests WHERE tests.purchaseorderid = orders.id) tests), json_array()) AS tests FROM unsharded as orders WHERE orders.id = 'xxx'",
- output: "select id, coalesce((select Json_arrayagg(json_array(id)) from (select *, row_number() over ( order by users.`order` asc) from unsharded as users where users.purchaseorderid = orders.id) as users), json_array()) as users, coalesce((select json_arrayagg(json_array(id)) from (select *, row_number() over ( order by tests.`order` asc) from unsharded as tests where tests.purchaseorderid = orders.id) as tests), json_array()) as tests from unsharded as orders where orders.id = 'xxx'",
+ output: "select id, coalesce((select json_arrayagg(json_array(id)) from (select *, row_number() over ( order by users.`order` asc) from unsharded as users where users.purchaseorderid = orders.id) as users), json_array()) as users, coalesce((select json_arrayagg(json_array(id)) from (select *, row_number() over ( order by tests.`order` asc) from unsharded as tests where tests.purchaseorderid = orders.id) as tests), json_array()) as tests from unsharded as orders where orders.id = 'xxx'",
}, {
input: `kill connection 18446744073709551615`,
}, {
@@ -4537,7 +4550,8 @@ func TestSelectInto(t *testing.T) {
input: "select * from t order by name limit 100 into outfile s3 'out_file_name'",
output: "select * from t order by `name` asc limit 100 into outfile s3 'out_file_name'",
}, {
- input: `select * from TestPerson into outfile s3 's3://test-bucket/export_import/export/users.csv' fields terminated by ',' enclosed by '\"' escaped by '\\' overwrite on`,
+ input: `select * from TestPerson into outfile s3 's3://test-bucket/export_import/export/users.csv' fields terminated by ',' enclosed by '\"' escaped by '\\' overwrite on`,
+ output: `select * from TestPerson into outfile s3 's3://test-bucket/export_import/export/users.csv' fields terminated by ',' enclosed by '"' escaped by '\\' overwrite on`,
}, {
input: "select * from t into dumpfile 'out_file_name'",
}, {
@@ -5880,6 +5894,10 @@ partition by range (YEAR(purchased)) subpartition by hash (TO_DAYS(purchased))
input: "create table t (id int, info JSON, INDEX zips((CAST(info->'$.field' AS unsigned ARRAY))))",
output: "create table t (\n\tid int,\n\tinfo JSON,\n\tkey zips ((cast(info -> '$.field' as unsigned array)))\n)",
},
+ {
+ input: "create table t (id int, s varchar(255) default 'foo\"bar')",
+ output: "create table t (\n\tid int,\n\ts varchar(255) default 'foo\"bar'\n)",
+ },
}
parser := NewTestParser()
for _, test := range createTableQueries {
@@ -6046,6 +6064,12 @@ var (
}, {
input: "select next id from a",
output: "expecting value after next at position 15 near 'id'",
+ }, {
+ input: "select count(1) from user where x_id = 'abc' group by n_id having json_arrayagg(x, y) = '[]'",
+ output: "syntax error at position 83",
+ }, {
+ input: "select count(1) from user where x_id = 'abc' group by n_id having json_objectagg(x, y, z) = '[]'",
+ output: "syntax error at position 87",
}, {
input: "select next 1+1 values from a",
output: "syntax error at position 15",
diff --git a/go/vt/sqlparser/parsed_query_test.go b/go/vt/sqlparser/parsed_query_test.go
index ef59676883f..8ade9d4d31c 100644
--- a/go/vt/sqlparser/parsed_query_test.go
+++ b/go/vt/sqlparser/parsed_query_test.go
@@ -20,10 +20,11 @@ import (
"reflect"
"testing"
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+
"vitess.io/vitess/go/sqltypes"
querypb "vitess.io/vitess/go/vt/proto/query"
-
- "github.com/stretchr/testify/assert"
)
func TestNewParsedQuery(t *testing.T) {
@@ -205,3 +206,92 @@ func TestParseAndBind(t *testing.T) {
})
}
}
+
+func TestCastBindVars(t *testing.T) {
+ testcases := []struct {
+ typ sqltypes.Type
+ size int
+ binds map[string]*querypb.BindVariable
+ out string
+ }{
+ {
+ typ: sqltypes.Decimal,
+ binds: map[string]*querypb.BindVariable{"arg": sqltypes.DecimalBindVariable("50")},
+ out: "select CAST(50 AS DECIMAL(0, 0)) from ",
+ },
+ {
+ typ: sqltypes.Uint32,
+ binds: map[string]*querypb.BindVariable{"arg": {Type: sqltypes.Uint32, Value: sqltypes.NewUint32(42).Raw()}},
+ out: "select CAST(42 AS UNSIGNED) from ",
+ },
+ {
+ typ: sqltypes.Float64,
+ binds: map[string]*querypb.BindVariable{"arg": {Type: sqltypes.Float64, Value: sqltypes.NewFloat64(42.42).Raw()}},
+ out: "select CAST(42.42 AS DOUBLE) from ",
+ },
+ {
+ typ: sqltypes.Float32,
+ binds: map[string]*querypb.BindVariable{"arg": {Type: sqltypes.Float32, Value: sqltypes.NewFloat32(42).Raw()}},
+ out: "select CAST(42 AS FLOAT) from ",
+ },
+ {
+ typ: sqltypes.Date,
+ binds: map[string]*querypb.BindVariable{"arg": {Type: sqltypes.Date, Value: sqltypes.NewDate("2021-10-30").Raw()}},
+ out: "select CAST('2021-10-30' AS DATE) from ",
+ },
+ {
+ typ: sqltypes.Time,
+ binds: map[string]*querypb.BindVariable{"arg": {Type: sqltypes.Time, Value: sqltypes.NewTime("12:00:00").Raw()}},
+ out: "select CAST('12:00:00' AS TIME) from ",
+ },
+ {
+ typ: sqltypes.Time,
+ size: 6,
+ binds: map[string]*querypb.BindVariable{"arg": {Type: sqltypes.Time, Value: sqltypes.NewTime("12:00:00").Raw()}},
+ out: "select CAST('12:00:00' AS TIME(6)) from ",
+ },
+ {
+ typ: sqltypes.Timestamp,
+ binds: map[string]*querypb.BindVariable{"arg": {Type: sqltypes.Timestamp, Value: sqltypes.NewTimestamp("2021-10-22 12:00:00").Raw()}},
+ out: "select CAST('2021-10-22 12:00:00' AS DATETIME) from ",
+ },
+ {
+ typ: sqltypes.Timestamp,
+ size: 6,
+ binds: map[string]*querypb.BindVariable{"arg": {Type: sqltypes.Timestamp, Value: sqltypes.NewTimestamp("2021-10-22 12:00:00").Raw()}},
+ out: "select CAST('2021-10-22 12:00:00' AS DATETIME(6)) from ",
+ },
+ {
+ typ: sqltypes.Datetime,
+ binds: map[string]*querypb.BindVariable{"arg": {Type: sqltypes.Datetime, Value: sqltypes.NewDatetime("2021-10-22 12:00:00").Raw()}},
+ out: "select CAST('2021-10-22 12:00:00' AS DATETIME) from ",
+ },
+ {
+ typ: sqltypes.Datetime,
+ size: 6,
+ binds: map[string]*querypb.BindVariable{"arg": {Type: sqltypes.Datetime, Value: sqltypes.NewDatetime("2021-10-22 12:00:00").Raw()}},
+ out: "select CAST('2021-10-22 12:00:00' AS DATETIME(6)) from ",
+ },
+ }
+
+ for _, testcase := range testcases {
+ t.Run(testcase.out, func(t *testing.T) {
+ argument := NewTypedArgument("arg", testcase.typ)
+ if testcase.size > 0 {
+ argument.Size = int32(testcase.size)
+ }
+
+ s := &Select{
+ SelectExprs: SelectExprs{
+ NewAliasedExpr(argument, ""),
+ },
+ }
+
+ pq := NewParsedQuery(s)
+ out, err := pq.GenerateQuery(testcase.binds, nil)
+
+ require.NoError(t, err)
+ require.Equal(t, testcase.out, out)
+ })
+ }
+}
diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go
index 75f5c204ac9..35bcad9362d 100644
--- a/go/vt/sqlparser/sql.go
+++ b/go/vt/sqlparser/sql.go
@@ -150,610 +150,612 @@ const JSON_KEYS = 57457
const JSON_OVERLAPS = 57458
const JSON_SEARCH = 57459
const JSON_VALUE = 57460
-const EXTRACT = 57461
-const NULL = 57462
-const UNKNOWN = 57463
-const TRUE = 57464
-const FALSE = 57465
-const OFF = 57466
-const DISCARD = 57467
-const IMPORT = 57468
-const ENABLE = 57469
-const DISABLE = 57470
-const TABLESPACE = 57471
-const VIRTUAL = 57472
-const STORED = 57473
-const BOTH = 57474
-const LEADING = 57475
-const TRAILING = 57476
-const KILL = 57477
-const EMPTY_FROM_CLAUSE = 57478
-const LOWER_THAN_CHARSET = 57479
-const CHARSET = 57480
-const UNIQUE = 57481
-const KEY = 57482
-const EXPRESSION_PREC_SETTER = 57483
-const OR = 57484
-const XOR = 57485
-const AND = 57486
-const NOT = 57487
-const BETWEEN = 57488
-const CASE = 57489
-const WHEN = 57490
-const THEN = 57491
-const ELSE = 57492
-const END = 57493
-const LE = 57494
-const GE = 57495
-const NE = 57496
-const NULL_SAFE_EQUAL = 57497
-const IS = 57498
-const LIKE = 57499
-const REGEXP = 57500
-const RLIKE = 57501
-const IN = 57502
-const ASSIGNMENT_OPT = 57503
-const SHIFT_LEFT = 57504
-const SHIFT_RIGHT = 57505
-const DIV = 57506
-const MOD = 57507
-const UNARY = 57508
-const COLLATE = 57509
-const BINARY = 57510
-const UNDERSCORE_ARMSCII8 = 57511
-const UNDERSCORE_ASCII = 57512
-const UNDERSCORE_BIG5 = 57513
-const UNDERSCORE_BINARY = 57514
-const UNDERSCORE_CP1250 = 57515
-const UNDERSCORE_CP1251 = 57516
-const UNDERSCORE_CP1256 = 57517
-const UNDERSCORE_CP1257 = 57518
-const UNDERSCORE_CP850 = 57519
-const UNDERSCORE_CP852 = 57520
-const UNDERSCORE_CP866 = 57521
-const UNDERSCORE_CP932 = 57522
-const UNDERSCORE_DEC8 = 57523
-const UNDERSCORE_EUCJPMS = 57524
-const UNDERSCORE_EUCKR = 57525
-const UNDERSCORE_GB18030 = 57526
-const UNDERSCORE_GB2312 = 57527
-const UNDERSCORE_GBK = 57528
-const UNDERSCORE_GEOSTD8 = 57529
-const UNDERSCORE_GREEK = 57530
-const UNDERSCORE_HEBREW = 57531
-const UNDERSCORE_HP8 = 57532
-const UNDERSCORE_KEYBCS2 = 57533
-const UNDERSCORE_KOI8R = 57534
-const UNDERSCORE_KOI8U = 57535
-const UNDERSCORE_LATIN1 = 57536
-const UNDERSCORE_LATIN2 = 57537
-const UNDERSCORE_LATIN5 = 57538
-const UNDERSCORE_LATIN7 = 57539
-const UNDERSCORE_MACCE = 57540
-const UNDERSCORE_MACROMAN = 57541
-const UNDERSCORE_SJIS = 57542
-const UNDERSCORE_SWE7 = 57543
-const UNDERSCORE_TIS620 = 57544
-const UNDERSCORE_UCS2 = 57545
-const UNDERSCORE_UJIS = 57546
-const UNDERSCORE_UTF16 = 57547
-const UNDERSCORE_UTF16LE = 57548
-const UNDERSCORE_UTF32 = 57549
-const UNDERSCORE_UTF8 = 57550
-const UNDERSCORE_UTF8MB4 = 57551
-const UNDERSCORE_UTF8MB3 = 57552
-const INTERVAL = 57553
-const WINDOW_EXPR = 57554
-const JSON_EXTRACT_OP = 57555
-const JSON_UNQUOTE_EXTRACT_OP = 57556
-const CREATE = 57557
-const ALTER = 57558
-const DROP = 57559
-const RENAME = 57560
-const ANALYZE = 57561
-const ADD = 57562
-const FLUSH = 57563
-const CHANGE = 57564
-const MODIFY = 57565
-const DEALLOCATE = 57566
-const REVERT = 57567
-const QUERIES = 57568
-const SCHEMA = 57569
-const TABLE = 57570
-const INDEX = 57571
-const VIEW = 57572
-const TO = 57573
-const IGNORE = 57574
-const IF = 57575
-const PRIMARY = 57576
-const COLUMN = 57577
-const SPATIAL = 57578
-const FULLTEXT = 57579
-const KEY_BLOCK_SIZE = 57580
-const CHECK = 57581
-const INDEXES = 57582
-const ACTION = 57583
-const CASCADE = 57584
-const CONSTRAINT = 57585
-const FOREIGN = 57586
-const NO = 57587
-const REFERENCES = 57588
-const RESTRICT = 57589
-const SHOW = 57590
-const DESCRIBE = 57591
-const EXPLAIN = 57592
-const DATE = 57593
-const ESCAPE = 57594
-const REPAIR = 57595
-const OPTIMIZE = 57596
-const TRUNCATE = 57597
-const COALESCE = 57598
-const EXCHANGE = 57599
-const REBUILD = 57600
-const PARTITIONING = 57601
-const REMOVE = 57602
-const PREPARE = 57603
-const EXECUTE = 57604
-const MAXVALUE = 57605
-const PARTITION = 57606
-const REORGANIZE = 57607
-const LESS = 57608
-const THAN = 57609
-const PROCEDURE = 57610
-const TRIGGER = 57611
-const VINDEX = 57612
-const VINDEXES = 57613
-const DIRECTORY = 57614
-const NAME = 57615
-const UPGRADE = 57616
-const STATUS = 57617
-const VARIABLES = 57618
-const WARNINGS = 57619
-const CASCADED = 57620
-const DEFINER = 57621
-const OPTION = 57622
-const SQL = 57623
-const UNDEFINED = 57624
-const SEQUENCE = 57625
-const MERGE = 57626
-const TEMPORARY = 57627
-const TEMPTABLE = 57628
-const INVOKER = 57629
-const SECURITY = 57630
-const FIRST = 57631
-const AFTER = 57632
-const LAST = 57633
-const VITESS_MIGRATION = 57634
-const CANCEL = 57635
-const RETRY = 57636
-const LAUNCH = 57637
-const COMPLETE = 57638
-const CLEANUP = 57639
-const THROTTLE = 57640
-const UNTHROTTLE = 57641
-const FORCE_CUTOVER = 57642
-const EXPIRE = 57643
-const RATIO = 57644
-const VITESS_THROTTLER = 57645
-const BEGIN = 57646
-const START = 57647
-const TRANSACTION = 57648
-const COMMIT = 57649
-const ROLLBACK = 57650
-const SAVEPOINT = 57651
-const RELEASE = 57652
-const WORK = 57653
-const CONSISTENT = 57654
-const SNAPSHOT = 57655
-const BIT = 57656
-const TINYINT = 57657
-const SMALLINT = 57658
-const MEDIUMINT = 57659
-const INT = 57660
-const INTEGER = 57661
-const BIGINT = 57662
-const INTNUM = 57663
-const REAL = 57664
-const DOUBLE = 57665
-const FLOAT_TYPE = 57666
-const FLOAT4_TYPE = 57667
-const FLOAT8_TYPE = 57668
-const DECIMAL_TYPE = 57669
-const NUMERIC = 57670
-const TIME = 57671
-const TIMESTAMP = 57672
-const DATETIME = 57673
-const YEAR = 57674
-const CHAR = 57675
-const VARCHAR = 57676
-const BOOL = 57677
-const CHARACTER = 57678
-const VARBINARY = 57679
-const NCHAR = 57680
-const TEXT = 57681
-const TINYTEXT = 57682
-const MEDIUMTEXT = 57683
-const LONGTEXT = 57684
-const BLOB = 57685
-const TINYBLOB = 57686
-const MEDIUMBLOB = 57687
-const LONGBLOB = 57688
-const JSON = 57689
-const JSON_SCHEMA_VALID = 57690
-const JSON_SCHEMA_VALIDATION_REPORT = 57691
-const ENUM = 57692
-const GEOMETRY = 57693
-const POINT = 57694
-const LINESTRING = 57695
-const POLYGON = 57696
-const GEOMCOLLECTION = 57697
-const GEOMETRYCOLLECTION = 57698
-const MULTIPOINT = 57699
-const MULTILINESTRING = 57700
-const MULTIPOLYGON = 57701
-const ASCII = 57702
-const UNICODE = 57703
-const NULLX = 57704
-const AUTO_INCREMENT = 57705
-const APPROXNUM = 57706
-const SIGNED = 57707
-const UNSIGNED = 57708
-const ZEROFILL = 57709
-const PURGE = 57710
-const BEFORE = 57711
-const CODE = 57712
-const COLLATION = 57713
-const COLUMNS = 57714
-const DATABASES = 57715
-const ENGINES = 57716
-const EVENT = 57717
-const EXTENDED = 57718
-const FIELDS = 57719
-const FULL = 57720
-const FUNCTION = 57721
-const GTID_EXECUTED = 57722
-const KEYSPACES = 57723
-const OPEN = 57724
-const PLUGINS = 57725
-const PRIVILEGES = 57726
-const PROCESSLIST = 57727
-const SCHEMAS = 57728
-const TABLES = 57729
-const TRIGGERS = 57730
-const USER = 57731
-const VGTID_EXECUTED = 57732
-const VITESS_KEYSPACES = 57733
-const VITESS_METADATA = 57734
-const VITESS_MIGRATIONS = 57735
-const VITESS_REPLICATION_STATUS = 57736
-const VITESS_SHARDS = 57737
-const VITESS_TABLETS = 57738
-const VITESS_TARGET = 57739
-const VSCHEMA = 57740
-const VITESS_THROTTLED_APPS = 57741
-const NAMES = 57742
-const GLOBAL = 57743
-const SESSION = 57744
-const ISOLATION = 57745
-const LEVEL = 57746
-const READ = 57747
-const WRITE = 57748
-const ONLY = 57749
-const REPEATABLE = 57750
-const COMMITTED = 57751
-const UNCOMMITTED = 57752
-const SERIALIZABLE = 57753
-const ADDDATE = 57754
-const CURRENT_TIMESTAMP = 57755
-const DATABASE = 57756
-const CURRENT_DATE = 57757
-const CURDATE = 57758
-const DATE_ADD = 57759
-const DATE_SUB = 57760
-const NOW = 57761
-const SUBDATE = 57762
-const CURTIME = 57763
-const CURRENT_TIME = 57764
-const LOCALTIME = 57765
-const LOCALTIMESTAMP = 57766
-const CURRENT_USER = 57767
-const UTC_DATE = 57768
-const UTC_TIME = 57769
-const UTC_TIMESTAMP = 57770
-const SYSDATE = 57771
-const DAY = 57772
-const DAY_HOUR = 57773
-const DAY_MICROSECOND = 57774
-const DAY_MINUTE = 57775
-const DAY_SECOND = 57776
-const HOUR = 57777
-const HOUR_MICROSECOND = 57778
-const HOUR_MINUTE = 57779
-const HOUR_SECOND = 57780
-const MICROSECOND = 57781
-const MINUTE = 57782
-const MINUTE_MICROSECOND = 57783
-const MINUTE_SECOND = 57784
-const MONTH = 57785
-const QUARTER = 57786
-const SECOND = 57787
-const SECOND_MICROSECOND = 57788
-const YEAR_MONTH = 57789
-const WEEK = 57790
-const SQL_TSI_DAY = 57791
-const SQL_TSI_WEEK = 57792
-const SQL_TSI_HOUR = 57793
-const SQL_TSI_MINUTE = 57794
-const SQL_TSI_MONTH = 57795
-const SQL_TSI_QUARTER = 57796
-const SQL_TSI_SECOND = 57797
-const SQL_TSI_MICROSECOND = 57798
-const SQL_TSI_YEAR = 57799
-const REPLACE = 57800
-const CONVERT = 57801
-const CAST = 57802
-const SUBSTR = 57803
-const SUBSTRING = 57804
-const MID = 57805
-const SEPARATOR = 57806
-const TIMESTAMPADD = 57807
-const TIMESTAMPDIFF = 57808
-const WEIGHT_STRING = 57809
-const LTRIM = 57810
-const RTRIM = 57811
-const TRIM = 57812
-const JSON_ARRAY = 57813
-const JSON_OBJECT = 57814
-const JSON_QUOTE = 57815
-const JSON_DEPTH = 57816
-const JSON_TYPE = 57817
-const JSON_LENGTH = 57818
-const JSON_VALID = 57819
-const JSON_ARRAY_APPEND = 57820
-const JSON_ARRAY_INSERT = 57821
-const JSON_INSERT = 57822
-const JSON_MERGE = 57823
-const JSON_MERGE_PATCH = 57824
-const JSON_MERGE_PRESERVE = 57825
-const JSON_REMOVE = 57826
-const JSON_REPLACE = 57827
-const JSON_SET = 57828
-const JSON_UNQUOTE = 57829
-const COUNT = 57830
-const AVG = 57831
-const MAX = 57832
-const MIN = 57833
-const SUM = 57834
-const GROUP_CONCAT = 57835
-const BIT_AND = 57836
-const BIT_OR = 57837
-const BIT_XOR = 57838
-const STD = 57839
-const STDDEV = 57840
-const STDDEV_POP = 57841
-const STDDEV_SAMP = 57842
-const VAR_POP = 57843
-const VAR_SAMP = 57844
-const VARIANCE = 57845
-const ANY_VALUE = 57846
-const REGEXP_INSTR = 57847
-const REGEXP_LIKE = 57848
-const REGEXP_REPLACE = 57849
-const REGEXP_SUBSTR = 57850
-const ExtractValue = 57851
-const UpdateXML = 57852
-const GET_LOCK = 57853
-const RELEASE_LOCK = 57854
-const RELEASE_ALL_LOCKS = 57855
-const IS_FREE_LOCK = 57856
-const IS_USED_LOCK = 57857
-const LOCATE = 57858
-const POSITION = 57859
-const ST_GeometryCollectionFromText = 57860
-const ST_GeometryFromText = 57861
-const ST_LineStringFromText = 57862
-const ST_MultiLineStringFromText = 57863
-const ST_MultiPointFromText = 57864
-const ST_MultiPolygonFromText = 57865
-const ST_PointFromText = 57866
-const ST_PolygonFromText = 57867
-const ST_GeometryCollectionFromWKB = 57868
-const ST_GeometryFromWKB = 57869
-const ST_LineStringFromWKB = 57870
-const ST_MultiLineStringFromWKB = 57871
-const ST_MultiPointFromWKB = 57872
-const ST_MultiPolygonFromWKB = 57873
-const ST_PointFromWKB = 57874
-const ST_PolygonFromWKB = 57875
-const ST_AsBinary = 57876
-const ST_AsText = 57877
-const ST_Dimension = 57878
-const ST_Envelope = 57879
-const ST_IsSimple = 57880
-const ST_IsEmpty = 57881
-const ST_GeometryType = 57882
-const ST_X = 57883
-const ST_Y = 57884
-const ST_Latitude = 57885
-const ST_Longitude = 57886
-const ST_EndPoint = 57887
-const ST_IsClosed = 57888
-const ST_Length = 57889
-const ST_NumPoints = 57890
-const ST_StartPoint = 57891
-const ST_PointN = 57892
-const ST_Area = 57893
-const ST_Centroid = 57894
-const ST_ExteriorRing = 57895
-const ST_InteriorRingN = 57896
-const ST_NumInteriorRings = 57897
-const ST_NumGeometries = 57898
-const ST_GeometryN = 57899
-const ST_LongFromGeoHash = 57900
-const ST_PointFromGeoHash = 57901
-const ST_LatFromGeoHash = 57902
-const ST_GeoHash = 57903
-const ST_AsGeoJSON = 57904
-const ST_GeomFromGeoJSON = 57905
-const MATCH = 57906
-const AGAINST = 57907
-const BOOLEAN = 57908
-const LANGUAGE = 57909
-const WITH = 57910
-const QUERY = 57911
-const EXPANSION = 57912
-const WITHOUT = 57913
-const VALIDATION = 57914
-const ROLLUP = 57915
-const UNUSED = 57916
-const ARRAY = 57917
-const BYTE = 57918
-const CUME_DIST = 57919
-const DESCRIPTION = 57920
-const DENSE_RANK = 57921
-const EMPTY = 57922
-const EXCEPT = 57923
-const FIRST_VALUE = 57924
-const GROUPING = 57925
-const GROUPS = 57926
-const JSON_TABLE = 57927
-const LAG = 57928
-const LAST_VALUE = 57929
-const LATERAL = 57930
-const LEAD = 57931
-const NTH_VALUE = 57932
-const NTILE = 57933
-const OF = 57934
-const OVER = 57935
-const PERCENT_RANK = 57936
-const RANK = 57937
-const RECURSIVE = 57938
-const ROW_NUMBER = 57939
-const SYSTEM = 57940
-const WINDOW = 57941
-const ACTIVE = 57942
-const ADMIN = 57943
-const AUTOEXTEND_SIZE = 57944
-const BUCKETS = 57945
-const CLONE = 57946
-const COLUMN_FORMAT = 57947
-const COMPONENT = 57948
-const DEFINITION = 57949
-const ENFORCED = 57950
-const ENGINE_ATTRIBUTE = 57951
-const EXCLUDE = 57952
-const FOLLOWING = 57953
-const GET_MASTER_PUBLIC_KEY = 57954
-const HISTOGRAM = 57955
-const HISTORY = 57956
-const INACTIVE = 57957
-const INVISIBLE = 57958
-const LOCKED = 57959
-const MASTER_COMPRESSION_ALGORITHMS = 57960
-const MASTER_PUBLIC_KEY_PATH = 57961
-const MASTER_TLS_CIPHERSUITES = 57962
-const MASTER_ZSTD_COMPRESSION_LEVEL = 57963
-const NESTED = 57964
-const NETWORK_NAMESPACE = 57965
-const NOWAIT = 57966
-const NULLS = 57967
-const OJ = 57968
-const OLD = 57969
-const OPTIONAL = 57970
-const ORDINALITY = 57971
-const ORGANIZATION = 57972
-const OTHERS = 57973
-const PARTIAL = 57974
-const PATH = 57975
-const PERSIST = 57976
-const PERSIST_ONLY = 57977
-const PRECEDING = 57978
-const PRIVILEGE_CHECKS_USER = 57979
-const PROCESS = 57980
-const RANDOM = 57981
-const REFERENCE = 57982
-const REQUIRE_ROW_FORMAT = 57983
-const RESOURCE = 57984
-const RESPECT = 57985
-const RESTART = 57986
-const RETAIN = 57987
-const REUSE = 57988
-const ROLE = 57989
-const SECONDARY = 57990
-const SECONDARY_ENGINE = 57991
-const SECONDARY_ENGINE_ATTRIBUTE = 57992
-const SECONDARY_LOAD = 57993
-const SECONDARY_UNLOAD = 57994
-const SIMPLE = 57995
-const SKIP = 57996
-const SRID = 57997
-const THREAD_PRIORITY = 57998
-const TIES = 57999
-const UNBOUNDED = 58000
-const VCPU = 58001
-const VISIBLE = 58002
-const RETURNING = 58003
-const FORMAT_BYTES = 58004
-const FORMAT_PICO_TIME = 58005
-const PS_CURRENT_THREAD_ID = 58006
-const PS_THREAD_ID = 58007
-const GTID_SUBSET = 58008
-const GTID_SUBTRACT = 58009
-const WAIT_FOR_EXECUTED_GTID_SET = 58010
-const WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS = 58011
-const FORMAT = 58012
-const TREE = 58013
-const VITESS = 58014
-const TRADITIONAL = 58015
-const VTEXPLAIN = 58016
-const VEXPLAIN = 58017
-const PLAN = 58018
-const LOCAL = 58019
-const LOW_PRIORITY = 58020
-const NO_WRITE_TO_BINLOG = 58021
-const LOGS = 58022
-const ERROR = 58023
-const GENERAL = 58024
-const HOSTS = 58025
-const OPTIMIZER_COSTS = 58026
-const USER_RESOURCES = 58027
-const SLOW = 58028
-const CHANNEL = 58029
-const RELAY = 58030
-const EXPORT = 58031
-const CURRENT = 58032
-const ROW = 58033
-const ROWS = 58034
-const AVG_ROW_LENGTH = 58035
-const CONNECTION = 58036
-const CHECKSUM = 58037
-const DELAY_KEY_WRITE = 58038
-const ENCRYPTION = 58039
-const ENGINE = 58040
-const INSERT_METHOD = 58041
-const MAX_ROWS = 58042
-const MIN_ROWS = 58043
-const PACK_KEYS = 58044
-const PASSWORD = 58045
-const FIXED = 58046
-const DYNAMIC = 58047
-const COMPRESSED = 58048
-const REDUNDANT = 58049
-const COMPACT = 58050
-const ROW_FORMAT = 58051
-const STATS_AUTO_RECALC = 58052
-const STATS_PERSISTENT = 58053
-const STATS_SAMPLE_PAGES = 58054
-const STORAGE = 58055
-const MEMORY = 58056
-const DISK = 58057
-const PARTITIONS = 58058
-const LINEAR = 58059
-const RANGE = 58060
-const LIST = 58061
-const SUBPARTITION = 58062
-const SUBPARTITIONS = 58063
-const HASH = 58064
+const JSON_ARRAYAGG = 57461
+const JSON_OBJECTAGG = 57462
+const EXTRACT = 57463
+const NULL = 57464
+const UNKNOWN = 57465
+const TRUE = 57466
+const FALSE = 57467
+const OFF = 57468
+const DISCARD = 57469
+const IMPORT = 57470
+const ENABLE = 57471
+const DISABLE = 57472
+const TABLESPACE = 57473
+const VIRTUAL = 57474
+const STORED = 57475
+const BOTH = 57476
+const LEADING = 57477
+const TRAILING = 57478
+const KILL = 57479
+const EMPTY_FROM_CLAUSE = 57480
+const LOWER_THAN_CHARSET = 57481
+const CHARSET = 57482
+const UNIQUE = 57483
+const KEY = 57484
+const EXPRESSION_PREC_SETTER = 57485
+const OR = 57486
+const XOR = 57487
+const AND = 57488
+const NOT = 57489
+const BETWEEN = 57490
+const CASE = 57491
+const WHEN = 57492
+const THEN = 57493
+const ELSE = 57494
+const END = 57495
+const LE = 57496
+const GE = 57497
+const NE = 57498
+const NULL_SAFE_EQUAL = 57499
+const IS = 57500
+const LIKE = 57501
+const REGEXP = 57502
+const RLIKE = 57503
+const IN = 57504
+const ASSIGNMENT_OPT = 57505
+const SHIFT_LEFT = 57506
+const SHIFT_RIGHT = 57507
+const DIV = 57508
+const MOD = 57509
+const UNARY = 57510
+const COLLATE = 57511
+const BINARY = 57512
+const UNDERSCORE_ARMSCII8 = 57513
+const UNDERSCORE_ASCII = 57514
+const UNDERSCORE_BIG5 = 57515
+const UNDERSCORE_BINARY = 57516
+const UNDERSCORE_CP1250 = 57517
+const UNDERSCORE_CP1251 = 57518
+const UNDERSCORE_CP1256 = 57519
+const UNDERSCORE_CP1257 = 57520
+const UNDERSCORE_CP850 = 57521
+const UNDERSCORE_CP852 = 57522
+const UNDERSCORE_CP866 = 57523
+const UNDERSCORE_CP932 = 57524
+const UNDERSCORE_DEC8 = 57525
+const UNDERSCORE_EUCJPMS = 57526
+const UNDERSCORE_EUCKR = 57527
+const UNDERSCORE_GB18030 = 57528
+const UNDERSCORE_GB2312 = 57529
+const UNDERSCORE_GBK = 57530
+const UNDERSCORE_GEOSTD8 = 57531
+const UNDERSCORE_GREEK = 57532
+const UNDERSCORE_HEBREW = 57533
+const UNDERSCORE_HP8 = 57534
+const UNDERSCORE_KEYBCS2 = 57535
+const UNDERSCORE_KOI8R = 57536
+const UNDERSCORE_KOI8U = 57537
+const UNDERSCORE_LATIN1 = 57538
+const UNDERSCORE_LATIN2 = 57539
+const UNDERSCORE_LATIN5 = 57540
+const UNDERSCORE_LATIN7 = 57541
+const UNDERSCORE_MACCE = 57542
+const UNDERSCORE_MACROMAN = 57543
+const UNDERSCORE_SJIS = 57544
+const UNDERSCORE_SWE7 = 57545
+const UNDERSCORE_TIS620 = 57546
+const UNDERSCORE_UCS2 = 57547
+const UNDERSCORE_UJIS = 57548
+const UNDERSCORE_UTF16 = 57549
+const UNDERSCORE_UTF16LE = 57550
+const UNDERSCORE_UTF32 = 57551
+const UNDERSCORE_UTF8 = 57552
+const UNDERSCORE_UTF8MB4 = 57553
+const UNDERSCORE_UTF8MB3 = 57554
+const INTERVAL = 57555
+const WINDOW_EXPR = 57556
+const JSON_EXTRACT_OP = 57557
+const JSON_UNQUOTE_EXTRACT_OP = 57558
+const CREATE = 57559
+const ALTER = 57560
+const DROP = 57561
+const RENAME = 57562
+const ANALYZE = 57563
+const ADD = 57564
+const FLUSH = 57565
+const CHANGE = 57566
+const MODIFY = 57567
+const DEALLOCATE = 57568
+const REVERT = 57569
+const QUERIES = 57570
+const SCHEMA = 57571
+const TABLE = 57572
+const INDEX = 57573
+const VIEW = 57574
+const TO = 57575
+const IGNORE = 57576
+const IF = 57577
+const PRIMARY = 57578
+const COLUMN = 57579
+const SPATIAL = 57580
+const FULLTEXT = 57581
+const KEY_BLOCK_SIZE = 57582
+const CHECK = 57583
+const INDEXES = 57584
+const ACTION = 57585
+const CASCADE = 57586
+const CONSTRAINT = 57587
+const FOREIGN = 57588
+const NO = 57589
+const REFERENCES = 57590
+const RESTRICT = 57591
+const SHOW = 57592
+const DESCRIBE = 57593
+const EXPLAIN = 57594
+const DATE = 57595
+const ESCAPE = 57596
+const REPAIR = 57597
+const OPTIMIZE = 57598
+const TRUNCATE = 57599
+const COALESCE = 57600
+const EXCHANGE = 57601
+const REBUILD = 57602
+const PARTITIONING = 57603
+const REMOVE = 57604
+const PREPARE = 57605
+const EXECUTE = 57606
+const MAXVALUE = 57607
+const PARTITION = 57608
+const REORGANIZE = 57609
+const LESS = 57610
+const THAN = 57611
+const PROCEDURE = 57612
+const TRIGGER = 57613
+const VINDEX = 57614
+const VINDEXES = 57615
+const DIRECTORY = 57616
+const NAME = 57617
+const UPGRADE = 57618
+const STATUS = 57619
+const VARIABLES = 57620
+const WARNINGS = 57621
+const CASCADED = 57622
+const DEFINER = 57623
+const OPTION = 57624
+const SQL = 57625
+const UNDEFINED = 57626
+const SEQUENCE = 57627
+const MERGE = 57628
+const TEMPORARY = 57629
+const TEMPTABLE = 57630
+const INVOKER = 57631
+const SECURITY = 57632
+const FIRST = 57633
+const AFTER = 57634
+const LAST = 57635
+const VITESS_MIGRATION = 57636
+const CANCEL = 57637
+const RETRY = 57638
+const LAUNCH = 57639
+const COMPLETE = 57640
+const CLEANUP = 57641
+const THROTTLE = 57642
+const UNTHROTTLE = 57643
+const FORCE_CUTOVER = 57644
+const EXPIRE = 57645
+const RATIO = 57646
+const VITESS_THROTTLER = 57647
+const BEGIN = 57648
+const START = 57649
+const TRANSACTION = 57650
+const COMMIT = 57651
+const ROLLBACK = 57652
+const SAVEPOINT = 57653
+const RELEASE = 57654
+const WORK = 57655
+const CONSISTENT = 57656
+const SNAPSHOT = 57657
+const BIT = 57658
+const TINYINT = 57659
+const SMALLINT = 57660
+const MEDIUMINT = 57661
+const INT = 57662
+const INTEGER = 57663
+const BIGINT = 57664
+const INTNUM = 57665
+const REAL = 57666
+const DOUBLE = 57667
+const FLOAT_TYPE = 57668
+const FLOAT4_TYPE = 57669
+const FLOAT8_TYPE = 57670
+const DECIMAL_TYPE = 57671
+const NUMERIC = 57672
+const TIME = 57673
+const TIMESTAMP = 57674
+const DATETIME = 57675
+const YEAR = 57676
+const CHAR = 57677
+const VARCHAR = 57678
+const BOOL = 57679
+const CHARACTER = 57680
+const VARBINARY = 57681
+const NCHAR = 57682
+const TEXT = 57683
+const TINYTEXT = 57684
+const MEDIUMTEXT = 57685
+const LONGTEXT = 57686
+const BLOB = 57687
+const TINYBLOB = 57688
+const MEDIUMBLOB = 57689
+const LONGBLOB = 57690
+const JSON = 57691
+const JSON_SCHEMA_VALID = 57692
+const JSON_SCHEMA_VALIDATION_REPORT = 57693
+const ENUM = 57694
+const GEOMETRY = 57695
+const POINT = 57696
+const LINESTRING = 57697
+const POLYGON = 57698
+const GEOMCOLLECTION = 57699
+const GEOMETRYCOLLECTION = 57700
+const MULTIPOINT = 57701
+const MULTILINESTRING = 57702
+const MULTIPOLYGON = 57703
+const ASCII = 57704
+const UNICODE = 57705
+const NULLX = 57706
+const AUTO_INCREMENT = 57707
+const APPROXNUM = 57708
+const SIGNED = 57709
+const UNSIGNED = 57710
+const ZEROFILL = 57711
+const PURGE = 57712
+const BEFORE = 57713
+const CODE = 57714
+const COLLATION = 57715
+const COLUMNS = 57716
+const DATABASES = 57717
+const ENGINES = 57718
+const EVENT = 57719
+const EXTENDED = 57720
+const FIELDS = 57721
+const FULL = 57722
+const FUNCTION = 57723
+const GTID_EXECUTED = 57724
+const KEYSPACES = 57725
+const OPEN = 57726
+const PLUGINS = 57727
+const PRIVILEGES = 57728
+const PROCESSLIST = 57729
+const SCHEMAS = 57730
+const TABLES = 57731
+const TRIGGERS = 57732
+const USER = 57733
+const VGTID_EXECUTED = 57734
+const VITESS_KEYSPACES = 57735
+const VITESS_METADATA = 57736
+const VITESS_MIGRATIONS = 57737
+const VITESS_REPLICATION_STATUS = 57738
+const VITESS_SHARDS = 57739
+const VITESS_TABLETS = 57740
+const VITESS_TARGET = 57741
+const VSCHEMA = 57742
+const VITESS_THROTTLED_APPS = 57743
+const NAMES = 57744
+const GLOBAL = 57745
+const SESSION = 57746
+const ISOLATION = 57747
+const LEVEL = 57748
+const READ = 57749
+const WRITE = 57750
+const ONLY = 57751
+const REPEATABLE = 57752
+const COMMITTED = 57753
+const UNCOMMITTED = 57754
+const SERIALIZABLE = 57755
+const ADDDATE = 57756
+const CURRENT_TIMESTAMP = 57757
+const DATABASE = 57758
+const CURRENT_DATE = 57759
+const CURDATE = 57760
+const DATE_ADD = 57761
+const DATE_SUB = 57762
+const NOW = 57763
+const SUBDATE = 57764
+const CURTIME = 57765
+const CURRENT_TIME = 57766
+const LOCALTIME = 57767
+const LOCALTIMESTAMP = 57768
+const CURRENT_USER = 57769
+const UTC_DATE = 57770
+const UTC_TIME = 57771
+const UTC_TIMESTAMP = 57772
+const SYSDATE = 57773
+const DAY = 57774
+const DAY_HOUR = 57775
+const DAY_MICROSECOND = 57776
+const DAY_MINUTE = 57777
+const DAY_SECOND = 57778
+const HOUR = 57779
+const HOUR_MICROSECOND = 57780
+const HOUR_MINUTE = 57781
+const HOUR_SECOND = 57782
+const MICROSECOND = 57783
+const MINUTE = 57784
+const MINUTE_MICROSECOND = 57785
+const MINUTE_SECOND = 57786
+const MONTH = 57787
+const QUARTER = 57788
+const SECOND = 57789
+const SECOND_MICROSECOND = 57790
+const YEAR_MONTH = 57791
+const WEEK = 57792
+const SQL_TSI_DAY = 57793
+const SQL_TSI_WEEK = 57794
+const SQL_TSI_HOUR = 57795
+const SQL_TSI_MINUTE = 57796
+const SQL_TSI_MONTH = 57797
+const SQL_TSI_QUARTER = 57798
+const SQL_TSI_SECOND = 57799
+const SQL_TSI_MICROSECOND = 57800
+const SQL_TSI_YEAR = 57801
+const REPLACE = 57802
+const CONVERT = 57803
+const CAST = 57804
+const SUBSTR = 57805
+const SUBSTRING = 57806
+const MID = 57807
+const SEPARATOR = 57808
+const TIMESTAMPADD = 57809
+const TIMESTAMPDIFF = 57810
+const WEIGHT_STRING = 57811
+const LTRIM = 57812
+const RTRIM = 57813
+const TRIM = 57814
+const JSON_ARRAY = 57815
+const JSON_OBJECT = 57816
+const JSON_QUOTE = 57817
+const JSON_DEPTH = 57818
+const JSON_TYPE = 57819
+const JSON_LENGTH = 57820
+const JSON_VALID = 57821
+const JSON_ARRAY_APPEND = 57822
+const JSON_ARRAY_INSERT = 57823
+const JSON_INSERT = 57824
+const JSON_MERGE = 57825
+const JSON_MERGE_PATCH = 57826
+const JSON_MERGE_PRESERVE = 57827
+const JSON_REMOVE = 57828
+const JSON_REPLACE = 57829
+const JSON_SET = 57830
+const JSON_UNQUOTE = 57831
+const COUNT = 57832
+const AVG = 57833
+const MAX = 57834
+const MIN = 57835
+const SUM = 57836
+const GROUP_CONCAT = 57837
+const BIT_AND = 57838
+const BIT_OR = 57839
+const BIT_XOR = 57840
+const STD = 57841
+const STDDEV = 57842
+const STDDEV_POP = 57843
+const STDDEV_SAMP = 57844
+const VAR_POP = 57845
+const VAR_SAMP = 57846
+const VARIANCE = 57847
+const ANY_VALUE = 57848
+const REGEXP_INSTR = 57849
+const REGEXP_LIKE = 57850
+const REGEXP_REPLACE = 57851
+const REGEXP_SUBSTR = 57852
+const ExtractValue = 57853
+const UpdateXML = 57854
+const GET_LOCK = 57855
+const RELEASE_LOCK = 57856
+const RELEASE_ALL_LOCKS = 57857
+const IS_FREE_LOCK = 57858
+const IS_USED_LOCK = 57859
+const LOCATE = 57860
+const POSITION = 57861
+const ST_GeometryCollectionFromText = 57862
+const ST_GeometryFromText = 57863
+const ST_LineStringFromText = 57864
+const ST_MultiLineStringFromText = 57865
+const ST_MultiPointFromText = 57866
+const ST_MultiPolygonFromText = 57867
+const ST_PointFromText = 57868
+const ST_PolygonFromText = 57869
+const ST_GeometryCollectionFromWKB = 57870
+const ST_GeometryFromWKB = 57871
+const ST_LineStringFromWKB = 57872
+const ST_MultiLineStringFromWKB = 57873
+const ST_MultiPointFromWKB = 57874
+const ST_MultiPolygonFromWKB = 57875
+const ST_PointFromWKB = 57876
+const ST_PolygonFromWKB = 57877
+const ST_AsBinary = 57878
+const ST_AsText = 57879
+const ST_Dimension = 57880
+const ST_Envelope = 57881
+const ST_IsSimple = 57882
+const ST_IsEmpty = 57883
+const ST_GeometryType = 57884
+const ST_X = 57885
+const ST_Y = 57886
+const ST_Latitude = 57887
+const ST_Longitude = 57888
+const ST_EndPoint = 57889
+const ST_IsClosed = 57890
+const ST_Length = 57891
+const ST_NumPoints = 57892
+const ST_StartPoint = 57893
+const ST_PointN = 57894
+const ST_Area = 57895
+const ST_Centroid = 57896
+const ST_ExteriorRing = 57897
+const ST_InteriorRingN = 57898
+const ST_NumInteriorRings = 57899
+const ST_NumGeometries = 57900
+const ST_GeometryN = 57901
+const ST_LongFromGeoHash = 57902
+const ST_PointFromGeoHash = 57903
+const ST_LatFromGeoHash = 57904
+const ST_GeoHash = 57905
+const ST_AsGeoJSON = 57906
+const ST_GeomFromGeoJSON = 57907
+const MATCH = 57908
+const AGAINST = 57909
+const BOOLEAN = 57910
+const LANGUAGE = 57911
+const WITH = 57912
+const QUERY = 57913
+const EXPANSION = 57914
+const WITHOUT = 57915
+const VALIDATION = 57916
+const ROLLUP = 57917
+const UNUSED = 57918
+const ARRAY = 57919
+const BYTE = 57920
+const CUME_DIST = 57921
+const DESCRIPTION = 57922
+const DENSE_RANK = 57923
+const EMPTY = 57924
+const EXCEPT = 57925
+const FIRST_VALUE = 57926
+const GROUPING = 57927
+const GROUPS = 57928
+const JSON_TABLE = 57929
+const LAG = 57930
+const LAST_VALUE = 57931
+const LATERAL = 57932
+const LEAD = 57933
+const NTH_VALUE = 57934
+const NTILE = 57935
+const OF = 57936
+const OVER = 57937
+const PERCENT_RANK = 57938
+const RANK = 57939
+const RECURSIVE = 57940
+const ROW_NUMBER = 57941
+const SYSTEM = 57942
+const WINDOW = 57943
+const ACTIVE = 57944
+const ADMIN = 57945
+const AUTOEXTEND_SIZE = 57946
+const BUCKETS = 57947
+const CLONE = 57948
+const COLUMN_FORMAT = 57949
+const COMPONENT = 57950
+const DEFINITION = 57951
+const ENFORCED = 57952
+const ENGINE_ATTRIBUTE = 57953
+const EXCLUDE = 57954
+const FOLLOWING = 57955
+const GET_MASTER_PUBLIC_KEY = 57956
+const HISTOGRAM = 57957
+const HISTORY = 57958
+const INACTIVE = 57959
+const INVISIBLE = 57960
+const LOCKED = 57961
+const MASTER_COMPRESSION_ALGORITHMS = 57962
+const MASTER_PUBLIC_KEY_PATH = 57963
+const MASTER_TLS_CIPHERSUITES = 57964
+const MASTER_ZSTD_COMPRESSION_LEVEL = 57965
+const NESTED = 57966
+const NETWORK_NAMESPACE = 57967
+const NOWAIT = 57968
+const NULLS = 57969
+const OJ = 57970
+const OLD = 57971
+const OPTIONAL = 57972
+const ORDINALITY = 57973
+const ORGANIZATION = 57974
+const OTHERS = 57975
+const PARTIAL = 57976
+const PATH = 57977
+const PERSIST = 57978
+const PERSIST_ONLY = 57979
+const PRECEDING = 57980
+const PRIVILEGE_CHECKS_USER = 57981
+const PROCESS = 57982
+const RANDOM = 57983
+const REFERENCE = 57984
+const REQUIRE_ROW_FORMAT = 57985
+const RESOURCE = 57986
+const RESPECT = 57987
+const RESTART = 57988
+const RETAIN = 57989
+const REUSE = 57990
+const ROLE = 57991
+const SECONDARY = 57992
+const SECONDARY_ENGINE = 57993
+const SECONDARY_ENGINE_ATTRIBUTE = 57994
+const SECONDARY_LOAD = 57995
+const SECONDARY_UNLOAD = 57996
+const SIMPLE = 57997
+const SKIP = 57998
+const SRID = 57999
+const THREAD_PRIORITY = 58000
+const TIES = 58001
+const UNBOUNDED = 58002
+const VCPU = 58003
+const VISIBLE = 58004
+const RETURNING = 58005
+const FORMAT_BYTES = 58006
+const FORMAT_PICO_TIME = 58007
+const PS_CURRENT_THREAD_ID = 58008
+const PS_THREAD_ID = 58009
+const GTID_SUBSET = 58010
+const GTID_SUBTRACT = 58011
+const WAIT_FOR_EXECUTED_GTID_SET = 58012
+const WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS = 58013
+const FORMAT = 58014
+const TREE = 58015
+const VITESS = 58016
+const TRADITIONAL = 58017
+const VTEXPLAIN = 58018
+const VEXPLAIN = 58019
+const PLAN = 58020
+const LOCAL = 58021
+const LOW_PRIORITY = 58022
+const NO_WRITE_TO_BINLOG = 58023
+const LOGS = 58024
+const ERROR = 58025
+const GENERAL = 58026
+const HOSTS = 58027
+const OPTIMIZER_COSTS = 58028
+const USER_RESOURCES = 58029
+const SLOW = 58030
+const CHANNEL = 58031
+const RELAY = 58032
+const EXPORT = 58033
+const CURRENT = 58034
+const ROW = 58035
+const ROWS = 58036
+const AVG_ROW_LENGTH = 58037
+const CONNECTION = 58038
+const CHECKSUM = 58039
+const DELAY_KEY_WRITE = 58040
+const ENCRYPTION = 58041
+const ENGINE = 58042
+const INSERT_METHOD = 58043
+const MAX_ROWS = 58044
+const MIN_ROWS = 58045
+const PACK_KEYS = 58046
+const PASSWORD = 58047
+const FIXED = 58048
+const DYNAMIC = 58049
+const COMPRESSED = 58050
+const REDUNDANT = 58051
+const COMPACT = 58052
+const ROW_FORMAT = 58053
+const STATS_AUTO_RECALC = 58054
+const STATS_PERSISTENT = 58055
+const STATS_SAMPLE_PAGES = 58056
+const STORAGE = 58057
+const MEMORY = 58058
+const DISK = 58059
+const PARTITIONS = 58060
+const LINEAR = 58061
+const RANGE = 58062
+const LIST = 58063
+const SUBPARTITION = 58064
+const SUBPARTITIONS = 58065
+const HASH = 58066
var yyToknames = [...]string{
"$end",
@@ -877,6 +879,8 @@ var yyToknames = [...]string{
"JSON_OVERLAPS",
"JSON_SEARCH",
"JSON_VALUE",
+ "JSON_ARRAYAGG",
+ "JSON_OBJECTAGG",
"EXTRACT",
"NULL",
"UNKNOWN",
@@ -1515,118 +1519,116 @@ var yyExca = [...]int{
-2, 40,
-1, 52,
1, 157,
- 740, 157,
+ 742, 157,
-2, 165,
-1, 53,
- 141, 165,
- 183, 165,
- 353, 165,
+ 143, 165,
+ 185, 165,
+ 355, 165,
-2, 523,
-1, 61,
37, 777,
- 246, 777,
- 257, 777,
- 292, 791,
- 293, 791,
+ 248, 777,
+ 259, 777,
+ 294, 791,
+ 295, 791,
-2, 779,
-1, 66,
- 248, 815,
+ 250, 815,
-2, 813,
-1, 122,
- 245, 1606,
+ 247, 1608,
-2, 131,
-1, 124,
1, 158,
- 740, 158,
+ 742, 158,
-2, 165,
-1, 135,
- 142, 408,
- 251, 408,
+ 144, 408,
+ 253, 408,
-2, 512,
-1, 154,
- 141, 165,
- 183, 165,
- 353, 165,
+ 143, 165,
+ 185, 165,
+ 355, 165,
-2, 532,
- -1, 739,
- 169, 41,
+ -1, 741,
+ 171, 41,
-2, 43,
- -1, 946,
- 91, 1623,
- -2, 1467,
- -1, 947,
- 91, 1624,
- 228, 1628,
- -2, 1468,
- -1, 948,
- 228, 1627,
+ -1, 950,
+ 91, 1625,
+ -2, 1469,
+ -1, 951,
+ 91, 1626,
+ 230, 1630,
+ -2, 1470,
+ -1, 952,
+ 230, 1629,
-2, 42,
- -1, 1032,
+ -1, 1036,
64, 887,
-2, 900,
- -1, 1120,
- 256, 1096,
- 261, 1096,
+ -1, 1124,
+ 258, 1096,
+ 263, 1096,
-2, 419,
- -1, 1205,
+ -1, 1209,
1, 580,
- 740, 580,
+ 742, 580,
-2, 165,
- -1, 1509,
- 228, 1628,
- -2, 1468,
- -1, 1720,
+ -1, 1513,
+ 230, 1630,
+ -2, 1470,
+ -1, 1726,
64, 888,
-2, 904,
- -1, 1721,
+ -1, 1727,
64, 889,
-2, 905,
- -1, 1777,
- 141, 165,
- 183, 165,
- 353, 165,
+ -1, 1783,
+ 143, 165,
+ 185, 165,
+ 355, 165,
-2, 458,
- -1, 1858,
- 142, 408,
- 251, 408,
+ -1, 1864,
+ 144, 408,
+ 253, 408,
-2, 512,
- -1, 1867,
- 256, 1097,
- 261, 1097,
+ -1, 1873,
+ 258, 1097,
+ 263, 1097,
-2, 420,
- -1, 2310,
- 228, 1632,
+ -1, 2318,
+ 230, 1634,
+ -2, 1628,
+ -1, 2319,
+ 230, 1630,
-2, 1626,
- -1, 2311,
- 228, 1628,
- -2, 1624,
- -1, 2414,
- 141, 165,
- 183, 165,
- 353, 165,
+ -1, 2422,
+ 143, 165,
+ 185, 165,
+ 355, 165,
-2, 459,
- -1, 2421,
+ -1, 2429,
27, 186,
-2, 188,
- -1, 2878,
+ -1, 2888,
82, 96,
92, 96,
-2, 963,
- -1, 2947,
- 715, 700,
+ -1, 2957,
+ 717, 700,
-2, 674,
- -1, 3169,
- 54, 1571,
- -2, 1565,
- -1, 4003,
- 715, 700,
+ -1, 3181,
+ 54, 1573,
+ -2, 1567,
+ -1, 4019,
+ 717, 700,
-2, 688,
- -1, 4095,
+ -1, 4111,
94, 632,
99, 632,
109, 632,
- 185, 632,
- 186, 632,
187, 632,
188, 632,
189, 632,
@@ -1667,389 +1669,96 @@ var yyExca = [...]int{
224, 632,
225, 632,
226, 632,
- -2, 1998,
+ 227, 632,
+ 228, 632,
+ -2, 2002,
}
const yyPrivate = 57344
-const yyLast = 56205
+const yyLast = 56576
var yyAct = [...]int{
- 962, 3656, 3657, 87, 3655, 950, 4074, 4183, 4093, 4170,
- 3984, 3221, 3321, 3966, 2117, 4137, 1273, 957, 3606, 949,
- 2105, 4062, 4138, 3228, 2339, 3270, 3456, 2411, 3889, 3279,
- 3182, 3284, 3281, 3964, 3037, 3280, 3278, 1271, 3283, 1780,
- 3593, 3282, 2341, 3299, 3120, 2485, 1987, 3236, 3298, 743,
- 2043, 3186, 3183, 5, 3502, 1736, 3698, 3011, 3180, 3496,
- 2838, 2366, 737, 3301, 3170, 3036, 2448, 738, 3486, 2912,
- 3328, 1836, 911, 2993, 771, 2944, 4035, 910, 2473, 2453,
- 2913, 915, 2914, 2399, 42, 2516, 1030, 2382, 87, 163,
- 2387, 2385, 1050, 1082, 1027, 1883, 2386, 1057, 2863, 2814,
- 2830, 41, 1128, 43, 2295, 1152, 2263, 1030, 3524, 2139,
- 2101, 2985, 2494, 149, 2051, 2262, 2472, 2374, 1865, 2533,
- 2455, 2905, 1092, 1115, 1110, 2851, 1769, 2880, 1749, 1522,
- 100, 2844, 2389, 1701, 2145, 104, 2076, 105, 2065, 1447,
- 1432, 1872, 1983, 1089, 1086, 1964, 2470, 753, 1121, 3185,
- 1090, 2444, 2445, 1116, 1117, 1768, 748, 1039, 1067, 1069,
- 1118, 1754, 1723, 2153, 3693, 2172, 2812, 1029, 99, 1033,
- 1505, 1481, 1036, 107, 2042, 85, 1261, 1995, 167, 1049,
- 127, 125, 3685, 126, 2367, 3457, 1857, 3513, 1052, 1034,
- 912, 1035, 1025, 132, 133, 1201, 1062, 747, 1037, 741,
- 1526, 740, 98, 4171, 93, 1247, 1269, 2487, 2488, 2489,
- 1061, 3594, 84, 3267, 2487, 1531, 4019, 2967, 2966, 106,
- 2935, 2531, 1024, 3586, 3549, 4120, 730, 3001, 3002, 4015,
- 1042, 128, 2336, 2337, 4014, 2058, 2057, 2056, 2055, 1132,
- 134, 2054, 4020, 1083, 1157, 2053, 675, 2026, 1217, 672,
- 1218, 673, 4114, 2810, 2581, 3166, 4141, 1154, 2520, 3124,
- 3660, 1165, 4193, 3660, 4136, 4161, 3460, 2363, 3459, 1043,
- 1171, 1172, 1173, 1076, 1176, 1177, 1178, 1179, 2, 2362,
- 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191,
- 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1131, 1028, 731,
- 95, 1077, 2519, 128, 1026, 1106, 1105, 95, 1104, 3993,
- 1464, 1051, 1740, 1107, 2960, 2937, 1158, 1161, 1162, 2840,
- 1730, 3289, 3967, 111, 112, 113, 2079, 116, 1099, 1443,
- 122, 3289, 1949, 191, 1738, 4015, 667, 1094, 3347, 2360,
- 95, 2775, 1741, 709, 3286, 4176, 715, 1023, 728, 729,
- 3659, 190, 1174, 3659, 2063, 4089, 4124, 4122, 1018, 1019,
- 1020, 1021, 916, 715, 1739, 1032, 1075, 1079, 914, 2957,
- 4175, 128, 190, 95, 129, 3885, 3884, 3287, 1075, 1079,
- 914, 4123, 4121, 3599, 1156, 1108, 3600, 3287, 1155, 4151,
- 172, 3895, 4118, 1064, 1065, 129, 1434, 965, 966, 967,
- 965, 966, 967, 3618, 3293, 86, 3607, 1460, 2588, 709,
- 4063, 172, 709, 86, 3293, 4071, 2513, 3894, 2110, 86,
- 4098, 3373, 1846, 2889, 709, 1770, 2888, 1771, 2854, 2890,
- 3218, 3219, 2811, 2894, 2406, 2407, 2035, 2036, 3217, 3000,
- 2585, 2405, 1254, 2984, 1256, 1237, 169, 1016, 4075, 170,
- 2518, 1461, 706, 1462, 1463, 1015, 2855, 1266, 4103, 1098,
- 1242, 1243, 1100, 1225, 3712, 3617, 1225, 169, 1226, 2938,
- 170, 1226, 3985, 189, 1238, 2586, 4101, 1231, 2901, 1224,
- 1991, 1223, 1253, 1255, 709, 95, 4107, 4108, 3325, 3998,
- 2424, 2423, 709, 95, 189, 3238, 3239, 3323, 709, 95,
- 691, 3355, 4102, 2847, 2848, 2338, 1103, 3353, 1210, 1211,
- 4142, 2579, 86, 689, 709, 88, 2034, 1482, 3290, 1766,
- 1200, 723, 2181, 721, 4079, 2038, 1175, 4079, 3290, 3058,
- 727, 4143, 1444, 3329, 1705, 2370, 2986, 2495, 1939, 3344,
- 1213, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1491, 1490,
- 1492, 1493, 3937, 686, 3938, 710, 2534, 2370, 2538, 1433,
- 2945, 1103, 701, 1095, 1101, 1244, 3316, 1265, 2970, 1239,
- 1097, 1096, 1232, 1264, 3317, 1245, 2540, 696, 2582, 1263,
- 2583, 3326, 1940, 4173, 1941, 1258, 1965, 173, 699, 1251,
- 3324, 3588, 95, 1252, 1068, 1246, 179, 1240, 1241, 2464,
- 2537, 1206, 2988, 1257, 3237, 3587, 2536, 2560, 173, 1181,
- 2974, 2975, 1180, 2539, 3869, 3584, 3240, 179, 1992, 1101,
- 2173, 710, 2458, 1111, 710, 2175, 1708, 1112, 1250, 2180,
- 2176, 2541, 3240, 2177, 2178, 2179, 710, 2498, 2174, 2182,
- 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2557, 3664,
- 2558, 4115, 2559, 2383, 1496, 1112, 676, 1150, 678, 692,
- 1149, 712, 1148, 711, 682, 1147, 680, 684, 693, 685,
- 3123, 679, 1146, 690, 1145, 1850, 681, 694, 695, 698,
- 702, 703, 704, 700, 697, 3499, 688, 713, 1078, 1072,
- 1070, 1144, 1143, 1102, 1138, 3059, 710, 1151, 1087, 4194,
- 1078, 1072, 1070, 1124, 710, 4148, 1270, 1087, 1270, 1270,
- 710, 2547, 2543, 2545, 2546, 2544, 2548, 2549, 2550, 1087,
- 1123, 164, 1984, 1085, 2471, 1160, 710, 1063, 2368, 2369,
- 3583, 1123, 2989, 2524, 2523, 1159, 1980, 1435, 1168, 3260,
- 3005, 2969, 164, 1844, 1843, 1842, 4116, 1767, 1102, 2955,
- 2368, 2369, 1981, 1840, 1216, 666, 1030, 1506, 1511, 1512,
- 3980, 1515, 1517, 1518, 1519, 1520, 1521, 2939, 1524, 1525,
- 1527, 1527, 2457, 1527, 1527, 1532, 1532, 1532, 1535, 1536,
- 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546,
- 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556,
- 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566,
- 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576,
- 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586,
- 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596,
- 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606,
- 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616,
- 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626,
- 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636,
- 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646,
- 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656,
- 4038, 1259, 1448, 1503, 1657, 3992, 1659, 1660, 1661, 1662,
- 1663, 2936, 3547, 3548, 1426, 1427, 1109, 963, 1532, 1532,
- 1532, 1532, 1532, 1532, 963, 3658, 2517, 1221, 3658, 1227,
- 1228, 1229, 1230, 1670, 1671, 1672, 1673, 1674, 1675, 1676,
- 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1507, 1425, 1499,
- 1500, 1501, 1502, 1267, 1268, 1448, 3345, 963, 2972, 1513,
- 165, 1141, 714, 1516, 1698, 1071, 2903, 177, 2587, 2959,
- 3616, 1528, 4077, 1529, 1530, 4077, 89, 1071, 1139, 94,
- 1496, 165, 1442, 707, 3444, 3500, 4106, 94, 177, 3291,
- 3292, 1533, 1534, 94, 1130, 1204, 1212, 1222, 708, 3291,
- 3292, 1970, 3295, 3012, 4076, 1209, 2586, 4076, 185, 2992,
- 1458, 2515, 3295, 2958, 1871, 1969, 2983, 1130, 1704, 2982,
- 1951, 1950, 1952, 1953, 1954, 3132, 1130, 1030, 3538, 185,
- 4105, 1030, 1497, 1498, 1729, 3224, 3520, 1030, 2885, 2815,
- 2817, 2850, 2787, 1235, 1695, 2113, 1758, 124, 1658, 1215,
- 3131, 166, 171, 168, 174, 175, 176, 178, 180, 181,
- 182, 183, 2845, 1458, 1696, 674, 2603, 184, 186, 187,
- 188, 1167, 166, 171, 168, 174, 175, 176, 178, 180,
- 181, 182, 183, 3225, 2412, 1496, 94, 3014, 184, 186,
- 187, 188, 1493, 3216, 2614, 1476, 1046, 1129, 1262, 2081,
- 1730, 4006, 2461, 4187, 1248, 3032, 1996, 3227, 1712, 1153,
- 1142, 3579, 1716, 2082, 1494, 1495, 2080, 2146, 1029, 1454,
- 1129, 119, 1714, 1870, 1715, 3222, 104, 1140, 105, 1129,
- 2154, 1220, 1696, 1664, 1665, 1666, 1667, 1668, 1669, 3512,
- 2535, 1464, 2047, 2462, 3238, 3239, 1977, 2155, 1702, 1772,
- 2460, 3223, 2928, 1103, 1199, 1689, 4152, 1130, 3024, 3023,
- 3022, 3151, 3707, 3016, 107, 3020, 1966, 3015, 1967, 3013,
- 3149, 1968, 1454, 2995, 3018, 1446, 2995, 2146, 2994, 2623,
- 2614, 2994, 1463, 3017, 2463, 3229, 1464, 1130, 1488, 1489,
- 1491, 1490, 1492, 1493, 2459, 120, 1130, 1462, 1463, 3554,
- 3553, 3019, 3021, 1732, 1464, 1710, 2502, 1880, 1130, 2816,
- 1879, 2514, 1863, 1847, 1848, 1849, 1869, 1973, 1203, 1971,
- 1972, 1713, 1974, 1975, 1976, 3362, 2512, 1934, 1856, 1873,
- 1873, 1711, 1989, 1130, 1885, 2510, 1886, 1735, 1888, 1890,
- 1205, 1699, 1894, 1896, 1898, 1900, 1902, 1875, 1026, 1028,
- 1801, 1141, 1234, 3237, 2507, 1249, 1916, 1997, 1270, 2137,
- 1129, 1763, 1764, 1236, 2140, 3240, 1123, 1126, 1127, 1874,
- 1087, 1831, 2507, 1139, 1120, 1124, 4144, 4039, 1219, 2152,
- 1924, 1925, 1461, 3539, 1462, 1463, 1930, 1931, 1041, 1839,
- 1129, 3034, 1166, 1730, 2511, 1119, 1163, 1464, 4195, 1129,
- 1853, 965, 966, 967, 1133, 1123, 1866, 1854, 1852, 1135,
- 1717, 1129, 2509, 1136, 1134, 4189, 715, 1123, 1126, 1127,
- 3877, 1087, 1877, 4040, 1202, 1120, 1124, 1461, 4185, 1462,
- 1463, 4186, 3876, 4184, 1137, 3972, 1129, 3867, 3630, 733,
- 1102, 1133, 1123, 1959, 1464, 1461, 1135, 1462, 1463, 1912,
- 1136, 1134, 1915, 1920, 1917, 1985, 3629, 2129, 2118, 2119,
- 2120, 2121, 2131, 2122, 2123, 2124, 2136, 2132, 2125, 2126,
- 2133, 2134, 2135, 2127, 2128, 2130, 3561, 3613, 1845, 3614,
- 3560, 3973, 3226, 2300, 128, 3899, 1106, 1105, 4196, 1104,
- 1484, 1485, 1486, 1487, 1488, 1489, 1491, 1490, 1492, 1493,
- 1789, 1486, 1487, 1488, 1489, 1491, 1490, 1492, 1493, 3550,
- 1958, 2002, 1957, 1946, 3268, 1453, 1450, 1451, 1452, 1457,
- 1459, 1456, 2612, 1455, 1730, 1270, 1270, 3256, 2910, 1998,
- 1999, 2151, 2611, 1449, 2909, 2024, 2908, 2467, 1461, 87,
- 1462, 1463, 87, 2003, 2069, 2070, 2593, 2594, 1960, 1944,
- 2010, 2011, 2012, 1483, 1484, 1485, 1486, 1487, 1488, 1489,
- 1491, 1490, 1492, 1493, 2023, 1464, 3544, 715, 1453, 1450,
- 1451, 1452, 1457, 1459, 1456, 1482, 1455, 3004, 2658, 1956,
- 1945, 1943, 2000, 1942, 1802, 1461, 1449, 1462, 1463, 2004,
- 1932, 2006, 2007, 2008, 2009, 1926, 1923, 1922, 2013, 1483,
- 1484, 1485, 1486, 1487, 1488, 1489, 1491, 1490, 1492, 1493,
- 2025, 1921, 1482, 1892, 1709, 2108, 2108, 2106, 2106, 2109,
- 42, 3320, 1429, 42, 1470, 1471, 1472, 1473, 1474, 1475,
- 1469, 1466, 2892, 715, 2662, 2071, 1483, 1484, 1485, 1486,
- 1487, 1488, 1489, 1491, 1490, 1492, 1493, 1815, 1818, 1819,
- 1820, 1821, 1822, 1823, 1730, 1824, 1825, 1827, 1828, 1826,
- 1829, 1830, 1803, 1804, 1805, 1806, 1787, 1788, 1816, 2192,
- 1790, 1766, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798,
- 1799, 2836, 4172, 1800, 1807, 1808, 1809, 1810, 101, 1811,
- 1812, 1813, 1814, 4145, 2069, 2070, 2067, 2068, 102, 1695,
- 4001, 1464, 2483, 2482, 2481, 2480, 1461, 4000, 1462, 1463,
- 1464, 85, 2479, 2478, 85, 1482, 2048, 2602, 1464, 1696,
- 2066, 3976, 1743, 3975, 3230, 2078, 2375, 2376, 3234, 2141,
- 3974, 2031, 2032, 1482, 3872, 3233, 1478, 1464, 1479, 1483,
- 1484, 1485, 1486, 1487, 1488, 1489, 1491, 1490, 1492, 1493,
- 2083, 1464, 1480, 1494, 1495, 1477, 1730, 1483, 1484, 1485,
- 1486, 1487, 1488, 1489, 1491, 1490, 1492, 1493, 1744, 3235,
- 4132, 1730, 2836, 1730, 3231, 2310, 3856, 2112, 3855, 3232,
- 2085, 2084, 2214, 2086, 2087, 2088, 2089, 2090, 2091, 2093,
- 2095, 2096, 2097, 2098, 2099, 2100, 2308, 1507, 4157, 1730,
- 2156, 2157, 2158, 2159, 1482, 2309, 4155, 1730, 1460, 1730,
- 2660, 2836, 4070, 2298, 2170, 2147, 2836, 4049, 1730, 2191,
- 1460, 1730, 3994, 2296, 3706, 4085, 1730, 1464, 1483, 1484,
- 1485, 1486, 1487, 1488, 1489, 1491, 1490, 1492, 1493, 4083,
- 1730, 3904, 1461, 1464, 1462, 1463, 2836, 4045, 3903, 3957,
- 1730, 1461, 2300, 1462, 1463, 1464, 2297, 3597, 3991, 1461,
- 1464, 1462, 1463, 110, 2391, 2299, 2206, 2307, 3880, 1730,
- 2313, 2314, 2836, 3868, 109, 2310, 108, 1464, 1461, 961,
- 1462, 1463, 3704, 3626, 103, 1464, 1694, 1693, 104, 1692,
- 105, 3558, 1461, 1464, 1462, 1463, 2308, 3597, 1730, 1817,
- 1464, 2836, 3595, 3511, 3543, 2380, 2507, 1730, 2421, 104,
- 3330, 105, 3518, 1730, 2343, 4081, 1730, 2355, 1464, 2742,
- 1730, 3860, 1464, 101, 3327, 3259, 1464, 3258, 2919, 103,
- 2906, 3950, 1730, 102, 3249, 3248, 1092, 3246, 3247, 3859,
- 2077, 3244, 3245, 3948, 1730, 2393, 1730, 3515, 3945, 1730,
- 3244, 3243, 3605, 2430, 2431, 2432, 2433, 2425, 1464, 2426,
- 2427, 2428, 2429, 1042, 1464, 2331, 1730, 2415, 1461, 1092,
- 1462, 1463, 2416, 3927, 1730, 2436, 2437, 2438, 2439, 2397,
- 1691, 3485, 1730, 1464, 1461, 2356, 1462, 1463, 3478, 1730,
- 2946, 1730, 2358, 2349, 1684, 2350, 1461, 2450, 1462, 1463,
- 2570, 1461, 2419, 1462, 1463, 2569, 3475, 1730, 2496, 1464,
- 3473, 1730, 3514, 2456, 3436, 1730, 2924, 2378, 1461, 2529,
- 1462, 1463, 1076, 2403, 2402, 2401, 1461, 110, 1462, 1463,
- 2860, 1730, 2418, 2417, 1461, 2528, 1462, 1463, 109, 2881,
- 108, 1461, 2365, 1462, 1463, 1464, 3434, 1730, 2586, 2968,
- 1077, 2344, 3430, 1730, 2466, 1464, 2493, 1835, 2949, 1461,
- 1464, 1462, 1463, 1461, 1132, 1462, 1463, 1461, 103, 1462,
- 1463, 3427, 1730, 1464, 1873, 2027, 2451, 2440, 2442, 2443,
- 2447, 2942, 2943, 2836, 2835, 2469, 2465, 1993, 2501, 1955,
- 1464, 2504, 2477, 2505, 1464, 2111, 1730, 3425, 1730, 1461,
- 1947, 1462, 1463, 1464, 2882, 1461, 2881, 1462, 1463, 2521,
- 1730, 2451, 2500, 2503, 2884, 2499, 2852, 1937, 1464, 1933,
- 1929, 1928, 1131, 1927, 1461, 1464, 1462, 1463, 1745, 2522,
- 1730, 2525, 1464, 3423, 1730, 2526, 2527, 1464, 2619, 1260,
- 2833, 1835, 1834, 3421, 1730, 1778, 1777, 3181, 3419, 1730,
- 1461, 1464, 1462, 1463, 103, 2852, 1464, 3211, 3511, 1460,
- 1464, 3417, 1730, 2420, 2591, 1464, 4033, 2586, 4005, 1731,
- 1733, 2882, 2836, 1030, 1030, 1030, 2860, 2532, 3415, 1730,
- 2508, 2586, 3413, 1730, 109, 3464, 1461, 3246, 1462, 1463,
- 2860, 3411, 1730, 1517, 1464, 1517, 1461, 3154, 1462, 1463,
- 2859, 1461, 1464, 1462, 1463, 2404, 3409, 1730, 2742, 2647,
- 2646, 2606, 2507, 2618, 1461, 2831, 1462, 1463, 2490, 2373,
- 3407, 1730, 1734, 1464, 2563, 3405, 1730, 1464, 2334, 3511,
- 2310, 1461, 3562, 1462, 1463, 1461, 2111, 1462, 1463, 3403,
- 1730, 2507, 2049, 1464, 1461, 4146, 1462, 1463, 3401, 1730,
- 2033, 2609, 1979, 3399, 1730, 1460, 1765, 1114, 2860, 1461,
- 2309, 1462, 1463, 1464, 1031, 1113, 1461, 1464, 1462, 1463,
- 1908, 1464, 95, 1461, 2578, 1462, 1463, 4111, 1461, 1464,
- 1462, 1463, 3397, 1730, 4052, 3891, 3563, 3564, 3565, 2584,
- 3383, 1730, 1461, 1737, 1462, 1463, 3857, 1461, 3719, 1462,
- 1463, 1461, 2650, 1462, 1463, 2592, 1461, 3578, 1462, 1463,
- 1464, 3360, 1730, 3575, 1464, 2807, 1730, 2598, 3556, 3378,
- 2595, 2596, 2597, 3377, 1909, 1910, 1911, 1697, 2078, 1837,
- 2915, 2805, 1730, 2449, 3318, 1461, 3273, 1462, 1463, 3269,
- 2950, 2446, 2441, 1461, 95, 1462, 1463, 1464, 2435, 2572,
- 2573, 2780, 1730, 2434, 2575, 2757, 1730, 1464, 3271, 2749,
- 1730, 1464, 1962, 2576, 1461, 1868, 1462, 1463, 1461, 1864,
- 1462, 1463, 1833, 1464, 121, 3566, 2916, 1204, 3322, 2622,
- 3892, 2916, 2600, 2599, 1461, 2601, 1462, 1463, 1904, 3525,
- 3526, 1464, 3531, 2464, 2604, 2347, 2605, 1464, 2740, 1730,
- 2029, 4167, 2607, 3989, 1461, 1464, 1462, 1463, 1461, 2786,
- 1462, 1463, 1461, 4165, 1462, 1463, 4139, 4013, 1464, 3932,
- 1461, 3528, 1462, 1463, 1742, 3567, 3568, 3569, 2774, 2656,
- 3265, 1464, 3264, 3263, 4009, 2738, 1730, 1464, 1905, 1906,
- 1907, 2818, 3181, 1482, 2929, 2725, 1730, 2564, 671, 2723,
- 1730, 1461, 3530, 1462, 1463, 1461, 1464, 1462, 1463, 3200,
- 1030, 2721, 1730, 2108, 2030, 2106, 2821, 1483, 1484, 1485,
- 1486, 1487, 1488, 1489, 1491, 1490, 1492, 1493, 3199, 2719,
- 1730, 1464, 3203, 2857, 2858, 2819, 3864, 3204, 1461, 3893,
- 1462, 1463, 2391, 2717, 1730, 1030, 2877, 2364, 1461, 1044,
- 1462, 1463, 1461, 2353, 1462, 1463, 2715, 1730, 2822, 3205,
- 2824, 2869, 2870, 3201, 1461, 3519, 1462, 1463, 3202, 2713,
- 1730, 3159, 732, 3158, 3971, 2711, 1730, 2837, 3504, 1464,
- 3697, 3699, 1461, 2856, 1462, 1463, 3503, 3507, 1461, 1464,
- 1462, 1463, 3168, 2077, 2709, 1730, 1461, 1047, 1462, 1463,
- 1045, 3171, 3173, 1464, 1978, 1048, 3684, 1014, 3683, 1461,
- 3174, 1462, 1463, 3242, 42, 2899, 1464, 1702, 2809, 2707,
- 1730, 1464, 1461, 2874, 1462, 1463, 2876, 1724, 1461, 2556,
- 1462, 1463, 2920, 2875, 1056, 2829, 1464, 2555, 2902, 2904,
- 2554, 1728, 2553, 1696, 1725, 2154, 1464, 1461, 1055, 1462,
- 1463, 2846, 2849, 2552, 2895, 2551, 1747, 2834, 3682, 2954,
- 3338, 2879, 2155, 2074, 2072, 2073, 1170, 2705, 1730, 2351,
- 2352, 1727, 1461, 1726, 1462, 1463, 2883, 2703, 1730, 101,
- 1169, 2886, 2915, 2456, 2998, 1724, 1464, 1428, 2893, 102,
- 2896, 2701, 1730, 1464, 2956, 110, 2137, 1464, 129, 1728,
- 3509, 103, 1725, 2965, 2699, 1730, 109, 2907, 108, 2697,
- 1730, 4181, 2149, 2918, 3261, 2567, 103, 2150, 2921, 2922,
- 1461, 4088, 1462, 1463, 1746, 2917, 1464, 1720, 1721, 1727,
- 1461, 1726, 1462, 1463, 2695, 1730, 2925, 2375, 2376, 2926,
- 3990, 2930, 2931, 2932, 1461, 1464, 1462, 1463, 2962, 108,
- 1464, 3887, 3241, 2210, 1856, 1464, 2873, 1461, 2359, 1462,
- 1463, 3487, 1461, 2590, 1462, 1463, 3956, 3955, 2610, 3008,
- 3009, 2951, 2952, 109, 2693, 1730, 3935, 1461, 3705, 1462,
- 1463, 2691, 1730, 3157, 2961, 2686, 1730, 1461, 3694, 1462,
- 1463, 3156, 1464, 3703, 2129, 2118, 2119, 2120, 2121, 2131,
- 2122, 2123, 2124, 2136, 2132, 2125, 2126, 2133, 2134, 2135,
- 2127, 2128, 2130, 1464, 2682, 1730, 2987, 3702, 3695, 3025,
- 3006, 3576, 3508, 3506, 1464, 3274, 2491, 1461, 2990, 1462,
- 1463, 110, 1851, 2293, 1461, 1464, 1462, 1463, 1461, 3580,
- 1462, 1463, 109, 2680, 1730, 1054, 3497, 2852, 4169, 4168,
- 3043, 3044, 3045, 3046, 3047, 3048, 3049, 3050, 3051, 3052,
- 3668, 1464, 101, 2325, 2963, 110, 1464, 1461, 103, 1462,
- 1463, 2833, 102, 3026, 4168, 1464, 109, 3060, 108, 4169,
- 3533, 1731, 2332, 2648, 2345, 1759, 1461, 1751, 1462, 1463,
- 3977, 1461, 3542, 1462, 1463, 3, 1461, 97, 1462, 1463,
- 1464, 2673, 1730, 1, 1464, 114, 115, 2046, 2044, 1022,
- 10, 9, 2671, 1730, 1431, 2045, 1430, 2357, 8, 3546,
- 4100, 3062, 687, 3480, 2335, 1700, 3118, 2996, 4140, 4096,
- 2997, 4097, 1697, 1461, 1948, 1462, 1463, 1938, 3608, 2261,
- 3888, 1464, 3277, 2497, 2865, 2868, 2869, 2870, 2866, 3476,
- 2867, 2871, 3574, 3007, 1461, 2911, 1462, 1463, 3010, 2454,
- 1122, 154, 3125, 3442, 2413, 1461, 3027, 1462, 1463, 2414,
- 4065, 118, 1080, 117, 3127, 3136, 1461, 2204, 1462, 1463,
- 1125, 2941, 1233, 2492, 2391, 1464, 3598, 3053, 3438, 2900,
- 2422, 2298, 3375, 2298, 1784, 1464, 1782, 1783, 1781, 3098,
- 1464, 2296, 1461, 2296, 1462, 1463, 3188, 1461, 87, 1462,
- 1463, 2391, 2391, 2391, 2391, 2391, 1461, 1786, 1462, 1463,
- 1785, 4037, 3346, 2468, 3108, 3109, 3110, 3111, 3112, 3374,
- 2649, 2391, 3443, 3126, 2391, 3128, 2037, 722, 3136, 2872,
- 3193, 1461, 716, 1462, 1463, 1461, 3135, 1462, 1463, 1464,
- 192, 1773, 1989, 3210, 1752, 1164, 677, 2287, 2288, 2289,
- 2290, 2291, 1464, 3147, 3153, 2393, 1464, 3250, 3148, 3150,
- 3152, 2530, 1464, 3366, 2312, 3163, 1464, 2315, 2316, 3162,
- 3160, 683, 1461, 3364, 1462, 1463, 1464, 1514, 2803, 1033,
- 2028, 3155, 2393, 2393, 2393, 2393, 2393, 2887, 3294, 1074,
- 1066, 2346, 3195, 3196, 3192, 3198, 3161, 3194, 3302, 1034,
- 3197, 1035, 2393, 2333, 2823, 2393, 1073, 104, 3214, 105,
- 3206, 3865, 3212, 3175, 3176, 3213, 1461, 3189, 1462, 1463,
- 1464, 3501, 3167, 3169, 3220, 1464, 1461, 2802, 1462, 1463,
- 2839, 1461, 3172, 1462, 1463, 3253, 3252, 3251, 1464, 3165,
- 2798, 3970, 3696, 4050, 2797, 1464, 2897, 1748, 3463, 2621,
- 2796, 2144, 1504, 1464, 2795, 2390, 3663, 2064, 745, 744,
- 742, 3254, 3255, 1464, 2794, 2825, 2853, 1464, 2456, 3296,
- 3306, 3178, 3303, 1468, 1464, 3307, 3275, 3313, 1467, 951,
- 1461, 2813, 1462, 1463, 1760, 3184, 2864, 1464, 2862, 2861,
- 3184, 2565, 2398, 1461, 3527, 1462, 1463, 1461, 3331, 1462,
- 1463, 3334, 3523, 1461, 3333, 1462, 1463, 1461, 2793, 1462,
- 1463, 4092, 3341, 2784, 2392, 2388, 2832, 1461, 902, 1462,
- 1463, 901, 754, 3351, 3348, 3349, 2783, 3350, 746, 736,
- 3352, 964, 3354, 2782, 3356, 900, 899, 3304, 3305, 2971,
- 3319, 2781, 2973, 2898, 3367, 3368, 3369, 3370, 3371, 3315,
- 1445, 2778, 1719, 1722, 2354, 2773, 1093, 3343, 3996, 2589,
- 3372, 1461, 2766, 1462, 1463, 1718, 1461, 4003, 1462, 1463,
- 1517, 3285, 3592, 3266, 1517, 2765, 3276, 2947, 2484, 1461,
- 69, 1462, 1463, 46, 3965, 4034, 1461, 2608, 1462, 1463,
- 3488, 2613, 3490, 894, 1461, 3458, 1462, 1463, 891, 3665,
- 3666, 3667, 3462, 3121, 1461, 3122, 1462, 1463, 1461, 4016,
- 1462, 1463, 4017, 890, 2616, 1461, 2617, 1462, 1463, 4018,
- 2199, 1441, 2625, 1438, 4113, 2039, 2627, 2628, 1461, 96,
- 1462, 1463, 36, 35, 34, 2634, 2635, 2636, 2637, 2638,
- 2639, 2640, 2641, 2642, 2643, 3342, 2645, 33, 32, 26,
- 25, 24, 2391, 23, 22, 29, 19, 3493, 3187, 3489,
- 21, 3491, 20, 18, 3288, 3540, 3498, 4135, 1464, 2651,
- 2652, 2653, 2654, 2655, 3505, 2657, 4180, 123, 55, 2659,
- 1464, 3510, 52, 2664, 2665, 50, 2666, 3336, 3337, 2669,
- 2670, 2672, 2674, 2675, 2676, 2677, 2678, 2679, 2681, 2683,
- 2684, 2685, 2687, 3532, 2689, 2690, 2692, 2694, 2696, 2698,
- 2700, 2702, 2704, 2706, 2708, 2710, 2712, 2714, 2716, 2718,
- 2720, 2722, 2724, 2726, 2727, 2728, 3495, 2730, 3541, 2732,
- 3297, 2734, 2735, 2393, 2737, 2739, 2741, 3306, 3534, 3303,
- 2744, 734, 3307, 3535, 2748, 3557, 3529, 3559, 2753, 2754,
- 2755, 2756, 1464, 131, 3602, 3603, 2764, 1464, 130, 3522,
- 53, 2767, 2768, 2769, 2770, 2771, 2772, 1464, 2763, 2776,
- 2777, 3465, 1464, 3467, 3468, 3469, 49, 2779, 3536, 3537,
- 3551, 3552, 2785, 1207, 47, 1464, 31, 2788, 2789, 2790,
- 2791, 2792, 1464, 30, 17, 16, 1464, 15, 2799, 2800,
- 1464, 2801, 14, 13, 2804, 2806, 2357, 12, 2808, 1461,
- 3604, 1462, 1463, 11, 7, 6, 39, 38, 2820, 37,
- 28, 1461, 27, 1462, 1463, 40, 1464, 4, 2934, 2486,
- 1464, 0, 0, 3585, 0, 0, 0, 3589, 3590, 3591,
- 2762, 0, 0, 1464, 0, 2761, 0, 0, 0, 0,
- 1053, 3620, 0, 1059, 1059, 2760, 0, 0, 2629, 1464,
- 2759, 0, 0, 0, 0, 0, 1464, 0, 0, 0,
- 0, 1464, 0, 2758, 0, 2644, 1464, 0, 0, 0,
- 2752, 0, 0, 0, 2751, 0, 0, 1464, 2750, 0,
- 0, 0, 1464, 1461, 0, 1462, 1463, 1464, 1461, 0,
- 1462, 1463, 1464, 0, 0, 0, 0, 0, 1461, 0,
- 1462, 1463, 0, 1461, 2747, 1462, 1463, 1464, 2746, 0,
- 3671, 0, 3672, 3673, 3674, 0, 1461, 3681, 1462, 1463,
- 3688, 2745, 3690, 1461, 1464, 1462, 1463, 1461, 0, 1462,
- 1463, 1461, 3661, 1462, 1463, 0, 1464, 2743, 0, 0,
- 0, 0, 0, 0, 2736, 3188, 0, 3691, 87, 2733,
- 3188, 0, 0, 0, 2731, 0, 0, 1461, 0, 1462,
- 1463, 1461, 0, 1462, 1463, 2729, 0, 0, 0, 0,
- 2688, 0, 1464, 0, 1461, 2668, 1462, 1463, 0, 0,
- 2667, 2108, 3625, 2106, 3721, 3692, 3701, 3700, 3711, 0,
- 1461, 0, 1462, 1463, 3708, 2663, 3710, 1461, 3713, 1462,
- 1463, 0, 1461, 0, 1462, 1463, 0, 1461, 0, 1462,
- 1463, 0, 2661, 0, 0, 3871, 0, 0, 1461, 0,
- 1462, 1463, 3725, 1461, 2626, 1462, 1463, 0, 1461, 42,
- 1462, 1463, 0, 1461, 0, 1462, 1463, 0, 0, 0,
- 0, 0, 0, 3581, 3582, 0, 0, 0, 1461, 0,
- 1462, 1463, 3863, 0, 3862, 0, 3861, 0, 0, 0,
- 2620, 0, 0, 0, 3878, 1461, 0, 1462, 1463, 0,
- 0, 3883, 0, 3882, 0, 3890, 0, 1461, 0, 1462,
- 1463, 0, 0, 0, 0, 0, 0, 3929, 3930, 0,
- 3722, 3723, 0, 0, 3038, 3039, 3040, 3041, 3042, 3715,
- 0, 0, 0, 3689, 0, 0, 0, 0, 2108, 0,
- 2106, 3933, 0, 1461, 3057, 1462, 1463, 0, 0, 0,
- 0, 0, 3873, 3874, 3875, 0, 0, 2865, 2868, 2869,
- 2870, 2866, 3184, 2867, 2871, 0, 0, 3525, 3526, 0,
- 3936, 0, 3978, 3188, 3939, 3717, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1535, 1536, 1537,
- 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547,
- 1548, 1549, 1550, 1551, 1552, 1553, 1555, 1556, 1557, 1558,
+ 966, 3669, 4109, 87, 4186, 3670, 4199, 3671, 4090, 4153,
+ 1277, 961, 4154, 953, 4000, 3333, 2111, 4078, 2419, 3233,
+ 3240, 2347, 3905, 3469, 3982, 2123, 3282, 3194, 3291, 1275,
+ 3296, 3980, 3047, 1786, 3293, 3292, 3290, 3295, 3294, 1993,
+ 3619, 3606, 4051, 3311, 2349, 3132, 2049, 3248, 2493, 5,
+ 3310, 745, 3198, 3195, 3515, 3509, 3712, 3021, 954, 3046,
+ 3182, 739, 2848, 740, 2374, 2922, 915, 773, 914, 2456,
+ 3313, 3003, 2923, 2390, 1742, 919, 3340, 2954, 42, 2481,
+ 2461, 3499, 2924, 2524, 2393, 163, 1034, 2407, 87, 1054,
+ 1842, 2873, 1086, 2394, 1061, 43, 1031, 2840, 2824, 2107,
+ 2271, 3537, 41, 2995, 1132, 2502, 2480, 1034, 2854, 2303,
+ 2270, 2395, 149, 2463, 2541, 2915, 2145, 3192, 2057, 1871,
+ 2382, 1114, 1096, 1119, 1775, 2890, 2397, 1755, 100, 1707,
+ 1889, 1526, 104, 2151, 1156, 2082, 2071, 1451, 1989, 105,
+ 1436, 1093, 1878, 1970, 1125, 3197, 1090, 755, 1094, 2478,
+ 2452, 1120, 2861, 1774, 750, 2453, 1071, 1121, 1073, 1760,
+ 2375, 1033, 1729, 1037, 1043, 99, 3707, 2159, 2178, 2822,
+ 1053, 107, 1485, 1040, 2048, 1265, 85, 2001, 3470, 1863,
+ 132, 133, 1056, 1039, 1066, 3526, 1509, 84, 3699, 1122,
+ 1038, 1205, 732, 106, 1041, 742, 1029, 749, 1530, 98,
+ 4187, 93, 167, 3607, 127, 916, 1273, 1065, 1251, 125,
+ 126, 2495, 2496, 2497, 2495, 3279, 4035, 1535, 2977, 2976,
+ 2539, 2945, 677, 3599, 4136, 1028, 3011, 743, 1046, 3562,
+ 3012, 1452, 4031, 134, 2344, 2345, 2064, 2063, 2062, 2061,
+ 1161, 1136, 4036, 1087, 2060, 2059, 2032, 4030, 3674, 1221,
+ 674, 2820, 675, 2589, 3178, 128, 4157, 1746, 4130, 4209,
+ 1468, 1744, 3136, 1169, 4152, 733, 1047, 4177, 3473, 4192,
+ 4140, 1080, 3472, 1032, 1447, 3983, 2850, 1081, 1030, 2371,
+ 2370, 2526, 3301, 2970, 1098, 95, 1158, 1747, 2146, 1111,
+ 95, 1745, 2785, 1955, 4191, 4139, 1103, 2528, 2069, 1175,
+ 1176, 1177, 3359, 1180, 1181, 1182, 1183, 2, 1055, 1186,
+ 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196,
+ 1197, 1198, 1199, 1200, 1201, 1202, 1135, 128, 1178, 1110,
+ 3301, 2368, 4009, 717, 1109, 1108, 2947, 4105, 3299, 1462,
+ 3673, 2527, 1222, 3298, 4138, 1162, 1165, 1166, 4031, 920,
+ 1027, 3901, 111, 112, 113, 3900, 116, 711, 717, 122,
+ 3674, 3612, 191, 735, 3613, 669, 1160, 3305, 1159, 4137,
+ 4167, 3911, 95, 4134, 3631, 1438, 3620, 730, 731, 190,
+ 4079, 711, 86, 969, 970, 971, 3299, 1022, 1023, 1024,
+ 1025, 2967, 95, 86, 1036, 128, 4087, 2116, 2521, 1112,
+ 86, 3910, 129, 1465, 4114, 1466, 1467, 1709, 1079, 1083,
+ 918, 2085, 3385, 1852, 2821, 3305, 2864, 1776, 172, 1777,
+ 1736, 3229, 1068, 1069, 708, 3010, 2899, 2593, 1102, 2898,
+ 2413, 1104, 2900, 3726, 3230, 3231, 4091, 969, 970, 971,
+ 2414, 2415, 2041, 2042, 2865, 2994, 1241, 1020, 1458, 1270,
+ 2596, 1450, 3673, 1019, 3630, 2948, 711, 1107, 1229, 1214,
+ 1215, 2904, 95, 1230, 4001, 2911, 671, 86, 1486, 1242,
+ 88, 711, 693, 95, 169, 1235, 4014, 170, 1997, 1448,
+ 95, 3302, 1464, 711, 3367, 691, 1021, 2187, 1204, 1452,
+ 3356, 1217, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1495,
+ 1494, 1496, 1497, 189, 2432, 2431, 711, 2346, 1229, 3337,
+ 4158, 3365, 4095, 1230, 2472, 1105, 1258, 2594, 1260, 1246,
+ 1247, 1228, 4119, 1227, 3068, 688, 2378, 2587, 1092, 3302,
+ 1107, 4159, 1099, 2040, 703, 725, 3335, 2466, 1437, 1101,
+ 1100, 2044, 4117, 3022, 2857, 2858, 729, 95, 1179, 698,
+ 3341, 723, 4123, 4124, 1711, 2996, 1257, 1259, 2955, 1269,
+ 701, 3250, 3251, 2503, 1243, 1268, 4095, 2542, 4118, 712,
+ 1236, 2980, 3328, 3953, 1945, 3954, 4189, 2590, 1971, 2591,
+ 3329, 2984, 2985, 1244, 1245, 2179, 1262, 2565, 1105, 2566,
+ 2181, 2567, 2548, 712, 2186, 2182, 1267, 1462, 2183, 2184,
+ 2185, 1250, 3338, 2180, 2188, 2189, 2190, 2191, 2192, 2193,
+ 2194, 2195, 2196, 3601, 1210, 2998, 1998, 173, 1946, 3885,
+ 1947, 3600, 2568, 1185, 1248, 1184, 179, 3024, 678, 3336,
+ 680, 694, 2546, 714, 1249, 713, 684, 2544, 682, 686,
+ 695, 687, 2506, 681, 1106, 692, 1714, 2549, 683, 696,
+ 697, 700, 704, 705, 706, 702, 699, 4131, 690, 715,
+ 1115, 3512, 3678, 1255, 1116, 1856, 2391, 1256, 712, 1116,
+ 3249, 1154, 1155, 3135, 2545, 1153, 1152, 1261, 1151, 1150,
+ 1149, 1148, 3252, 712, 1147, 1142, 3252, 2547, 1772, 2465,
+ 3069, 1079, 1083, 918, 4210, 712, 1091, 4164, 3034, 3033,
+ 3032, 1128, 1254, 3026, 1091, 3030, 1458, 3025, 1274, 3023,
+ 1274, 1274, 1091, 1127, 3028, 1990, 1089, 1106, 712, 2376,
+ 2377, 2479, 1067, 3027, 2555, 2551, 2553, 2554, 2552, 2556,
+ 2557, 2558, 1082, 1076, 1074, 2999, 2532, 1850, 2531, 711,
+ 1986, 3029, 3031, 1439, 1457, 1454, 1455, 1456, 1461, 1463,
+ 1460, 164, 1459, 1172, 3272, 2949, 2979, 2525, 1034, 1510,
+ 1515, 1516, 1453, 1519, 1521, 1522, 1523, 1524, 1525, 1849,
+ 1528, 1529, 1531, 1531, 1848, 1531, 1531, 1536, 1536, 1536,
+ 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548,
+ 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558,
1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568,
1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578,
1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588,
@@ -2057,200 +1766,633 @@ var yyAct = [...]int{
1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608,
1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618,
1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628,
- 1629, 1630, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639,
- 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1653, 1654,
- 1655, 1656, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677,
- 1678, 1679, 1680, 1681, 1682, 1683, 3934, 3963, 3962, 0,
- 1464, 0, 3979, 0, 3953, 0, 0, 0, 0, 0,
- 3997, 3959, 0, 3961, 0, 0, 0, 3187, 0, 0,
- 3028, 0, 3187, 0, 0, 0, 0, 0, 87, 0,
- 0, 0, 3190, 0, 0, 0, 0, 3982, 0, 0,
- 0, 0, 0, 3981, 0, 0, 0, 0, 0, 0,
- 3208, 0, 0, 0, 0, 3986, 3999, 0, 3866, 0,
- 0, 4002, 0, 0, 0, 0, 0, 0, 4133, 0,
- 0, 0, 0, 0, 0, 0, 0, 1801, 4004, 0,
- 0, 0, 0, 0, 0, 0, 0, 3870, 2615, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 42,
- 0, 4022, 0, 0, 4023, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 4047, 0, 0, 0,
- 0, 87, 0, 0, 0, 0, 0, 4032, 0, 0,
- 0, 1461, 0, 1462, 1463, 0, 0, 0, 4041, 0,
- 3100, 0, 3102, 0, 0, 0, 0, 0, 0, 4053,
- 0, 0, 0, 0, 4078, 0, 0, 0, 3113, 3114,
- 3115, 3116, 0, 4056, 4064, 4061, 4058, 1465, 3340, 4057,
- 4055, 4051, 4060, 3890, 4067, 4059, 0, 4086, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 3983,
- 3357, 3358, 4099, 3359, 3361, 3363, 0, 0, 1523, 0,
- 0, 4091, 42, 4109, 4104, 3187, 0, 0, 0, 0,
- 0, 4078, 4119, 4117, 0, 0, 0, 1789, 0, 4130,
- 0, 3376, 0, 0, 0, 0, 3380, 3381, 3382, 3384,
- 3385, 3386, 3387, 3388, 3389, 3390, 3391, 3392, 3393, 3394,
- 3395, 3396, 3398, 3400, 3402, 3404, 3406, 3408, 3410, 3412,
- 3414, 3416, 3418, 3420, 3422, 3424, 3426, 3428, 3429, 3431,
- 3432, 3433, 3435, 1989, 4134, 3437, 4150, 3439, 3440, 3441,
- 4153, 4160, 3445, 3446, 3447, 3448, 3449, 3450, 3451, 3452,
- 3453, 3454, 3455, 2108, 4166, 2106, 4163, 4159, 4078, 4174,
- 4164, 3461, 4162, 4149, 4129, 3466, 4048, 4043, 3184, 3470,
- 3471, 1802, 3472, 3474, 4182, 3477, 3479, 4188, 3481, 3482,
- 3483, 3484, 4190, 0, 0, 0, 0, 0, 3492, 0,
- 0, 0, 0, 0, 0, 0, 0, 3988, 0, 4199,
- 4200, 3930, 4198, 0, 0, 0, 0, 0, 0, 0,
- 0, 2108, 0, 2106, 4197, 0, 0, 0, 0, 0,
- 0, 0, 0, 3516, 3517, 0, 0, 3521, 0, 0,
- 0, 4007, 3995, 0, 1815, 1818, 1819, 1820, 1821, 1822,
- 1823, 0, 1824, 1825, 1827, 1828, 1826, 1829, 1830, 1803,
- 1804, 1805, 1806, 1787, 1788, 1816, 0, 1790, 0, 1791,
- 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 0, 0,
- 1800, 1807, 1808, 1809, 1810, 0, 1811, 1812, 1813, 1814,
- 0, 4125, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 4042, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3596, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1750, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3615, 0,
- 0, 3619, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1838, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 3631, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 947,
- 0, 4147, 0, 1697, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3654, 0,
- 0, 0, 1012, 0, 2300, 0, 1817, 1013, 0, 0,
- 0, 3662, 0, 0, 0, 0, 0, 2107, 3669, 0,
- 0, 0, 0, 0, 0, 195, 0, 0, 195, 0,
- 0, 0, 720, 0, 0, 0, 0, 726, 0, 0,
- 0, 0, 1994, 0, 0, 0, 0, 0, 195, 0,
+ 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638,
+ 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648,
+ 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658,
+ 1659, 1660, 1661, 1662, 967, 1507, 1263, 3357, 1663, 967,
+ 1665, 1666, 1667, 1668, 1669, 3672, 1430, 1431, 1773, 3560,
+ 3561, 1072, 1536, 1536, 1536, 1536, 1536, 1536, 4008, 1446,
+ 1113, 2982, 2946, 89, 716, 2913, 3457, 1676, 1677, 1678,
+ 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688,
+ 1689, 712, 3303, 3304, 1213, 709, 1226, 3597, 94, 1520,
+ 4093, 3629, 1429, 3513, 1511, 3307, 1216, 1500, 1704, 94,
+ 710, 1532, 1134, 1533, 1534, 1145, 94, 4054, 1500, 1503,
+ 1504, 1505, 1506, 1957, 1956, 1958, 1959, 1960, 1239, 1517,
+ 165, 1134, 4092, 2969, 1877, 1537, 1538, 177, 1143, 2594,
+ 3303, 3304, 1457, 1454, 1455, 1456, 1461, 1463, 1460, 1075,
+ 1459, 967, 2595, 3307, 4093, 1082, 1076, 1074, 1134, 2469,
+ 1453, 1225, 1710, 1231, 1232, 1233, 1234, 3672, 711, 2825,
+ 2827, 1034, 1735, 3002, 1164, 1034, 2965, 2968, 185, 4203,
+ 1127, 1034, 1701, 94, 1163, 1208, 4092, 1271, 1272, 1987,
+ 1846, 1220, 4122, 3015, 1134, 668, 2993, 3144, 2523, 2992,
+ 2470, 1501, 1502, 4132, 2611, 3996, 3551, 2468, 3533, 1702,
+ 1976, 2378, 3596, 2895, 2860, 1133, 1212, 2797, 1218, 2119,
+ 2143, 166, 171, 168, 174, 175, 176, 178, 180, 181,
+ 182, 183, 1764, 1664, 1133, 1219, 4121, 184, 186, 187,
+ 188, 2471, 2855, 1876, 3143, 3236, 1718, 124, 676, 2420,
+ 1722, 2467, 1500, 1497, 3228, 2622, 1033, 1480, 1050, 1266,
+ 4022, 1133, 1157, 1720, 1146, 1171, 1736, 104, 2160, 3592,
+ 1721, 1224, 3525, 1252, 105, 3163, 119, 1702, 1441, 1670,
+ 1671, 1672, 1673, 1674, 1675, 2161, 1708, 1144, 2543, 2002,
+ 2053, 1983, 1778, 3237, 3042, 2152, 2152, 1133, 2631, 1695,
+ 2938, 4168, 3161, 1127, 1130, 1131, 107, 1091, 3005, 1466,
+ 1467, 1124, 1128, 3004, 3721, 1467, 3567, 3239, 2135, 2124,
+ 2125, 2126, 2127, 2137, 2128, 2129, 2130, 2142, 2138, 2131,
+ 2132, 2139, 2140, 2141, 2133, 2134, 2136, 3234, 1134, 1238,
+ 1716, 2826, 3005, 1975, 1738, 1107, 1203, 3004, 2622, 1134,
+ 1240, 1705, 120, 3566, 2510, 1869, 3250, 3251, 1886, 1885,
+ 1875, 1134, 2520, 3235, 2518, 2515, 1030, 1145, 1032, 1719,
+ 1995, 1862, 1717, 1940, 2515, 1879, 1879, 1741, 1143, 4055,
+ 712, 1045, 4160, 1134, 3552, 4205, 1853, 1854, 1855, 3626,
+ 4211, 3627, 1881, 1769, 1770, 1703, 3988, 3241, 2308, 1922,
+ 2522, 3893, 1274, 3892, 2376, 2377, 4201, 2519, 1837, 4202,
+ 1207, 4200, 3883, 1891, 1880, 1892, 2517, 1894, 1896, 2158,
+ 1223, 1900, 1902, 1904, 1906, 1908, 1253, 4056, 1979, 1845,
+ 1977, 1978, 1075, 1980, 1981, 1982, 3643, 1859, 1860, 1858,
+ 1209, 1133, 2003, 1872, 3989, 1965, 3642, 1127, 1130, 1131,
+ 1468, 1091, 1133, 1930, 1931, 1124, 1128, 1137, 1127, 1936,
+ 1937, 3574, 1139, 3573, 1133, 3249, 1140, 1138, 1736, 1137,
+ 1127, 3563, 3280, 1926, 1139, 2157, 1123, 3252, 1140, 1138,
+ 3268, 1883, 4212, 1723, 1468, 2920, 1133, 1141, 1170, 969,
+ 970, 971, 1167, 2919, 1963, 1991, 1972, 1486, 1973, 3014,
+ 2918, 1974, 1492, 1493, 1495, 1494, 1496, 1497, 1918, 2475,
+ 1966, 1921, 1964, 1923, 1952, 1950, 1206, 1949, 1948, 2087,
+ 1938, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1495, 1494,
+ 1496, 1497, 1106, 2088, 1498, 1499, 2086, 1932, 4173, 1736,
+ 190, 1488, 1489, 1490, 1491, 1492, 1493, 1495, 1494, 1496,
+ 1497, 1851, 128, 1929, 1110, 2008, 1928, 1927, 1898, 1109,
+ 1108, 1962, 1715, 129, 2075, 2076, 2601, 2602, 3332, 1274,
+ 1274, 3557, 717, 717, 1468, 1433, 2004, 2005, 2030, 172,
+ 1772, 1951, 101, 87, 2902, 717, 87, 2668, 2491, 2490,
+ 2009, 1486, 102, 1465, 3238, 1466, 1467, 2016, 2017, 2018,
+ 1490, 1491, 1492, 1493, 1495, 1494, 1496, 1497, 2029, 2489,
+ 2488, 2487, 2486, 2672, 1768, 1487, 1488, 1489, 1490, 1491,
+ 1492, 1493, 1495, 1494, 1496, 1497, 1749, 1465, 4161, 1466,
+ 1467, 2846, 4188, 1785, 4017, 169, 3044, 4016, 170, 1487,
+ 1488, 1489, 1490, 1491, 1492, 1493, 1495, 1494, 1496, 1497,
+ 1736, 4148, 1736, 2114, 2114, 2112, 2112, 1486, 42, 2115,
+ 1482, 42, 1483, 1736, 189, 3992, 1468, 3991, 1486, 3990,
+ 2610, 1468, 1750, 2846, 1736, 2077, 1484, 1498, 1499, 1481,
+ 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1495, 1494,
+ 1496, 1497, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1495,
+ 1494, 1496, 1497, 3888, 1487, 1488, 1489, 1490, 1491, 1492,
+ 1493, 1495, 1494, 1496, 1497, 3872, 1924, 1465, 2006, 1466,
+ 1467, 2670, 1464, 1736, 2198, 2010, 3871, 2012, 2013, 2014,
+ 2015, 1464, 1736, 1736, 2019, 2846, 4086, 1701, 1474, 1475,
+ 1476, 1477, 1478, 1479, 1473, 1470, 2031, 2075, 2076, 2073,
+ 2074, 1969, 3720, 2308, 4171, 1736, 85, 2305, 3718, 85,
+ 2054, 2846, 4065, 4010, 1702, 3639, 2307, 1700, 1996, 2084,
+ 1699, 1468, 110, 2072, 1698, 2037, 2038, 3571, 173, 3556,
+ 2147, 3342, 965, 109, 2007, 108, 110, 179, 2846, 4061,
+ 1468, 2011, 3339, 103, 1468, 2089, 3271, 109, 3270, 108,
+ 3973, 1736, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 1465,
+ 2929, 1466, 1467, 2916, 1465, 2318, 1466, 1467, 1697, 2090,
+ 1468, 2092, 2093, 2094, 2095, 2096, 2097, 2099, 2101, 2102,
+ 2103, 2104, 2105, 2106, 2316, 2222, 3242, 2118, 1468, 1690,
+ 3246, 3610, 4007, 1468, 2317, 3896, 1736, 3245, 2162, 2163,
+ 2164, 2165, 2091, 2846, 3884, 1736, 1511, 2578, 2306, 4101,
+ 1736, 3920, 2176, 2304, 3374, 2577, 2197, 1468, 2537, 1736,
+ 3919, 1486, 2536, 1468, 2153, 3610, 1736, 3876, 4099, 1736,
+ 3875, 3247, 4097, 1736, 2846, 3608, 3243, 2515, 1736, 103,
+ 1468, 3244, 3531, 1736, 3618, 1487, 1488, 1489, 1490, 1491,
+ 1492, 1493, 1495, 1494, 1496, 1497, 2214, 1468, 3966, 1736,
+ 2399, 2373, 164, 2352, 1465, 2318, 1466, 1467, 2752, 1736,
+ 2315, 3261, 3260, 2321, 2322, 2033, 3964, 1736, 3258, 3259,
+ 2956, 104, 1736, 1465, 2316, 1466, 1467, 1465, 105, 1466,
+ 1467, 3256, 3257, 101, 2388, 2429, 1999, 1468, 1961, 103,
+ 1703, 1736, 104, 102, 1953, 3961, 1736, 3256, 3255, 105,
+ 2363, 3943, 1736, 1465, 1468, 1466, 1467, 2351, 1468, 2870,
+ 1736, 2083, 2383, 2384, 1468, 2594, 2978, 2862, 3498, 1736,
+ 2843, 1465, 1096, 1466, 1467, 2401, 1465, 2658, 1466, 1467,
+ 1841, 2959, 2952, 2953, 103, 3491, 1736, 2212, 2058, 1468,
+ 2891, 1943, 2438, 2439, 2440, 2441, 1939, 1046, 2339, 2423,
+ 1465, 1736, 1466, 1467, 1935, 1096, 1465, 2424, 1466, 1467,
+ 2891, 1934, 2433, 1933, 2434, 2435, 2436, 2437, 1751, 2405,
+ 2357, 2364, 2358, 1465, 1264, 1466, 1467, 2846, 2845, 2934,
+ 2444, 2445, 2446, 2447, 2862, 2366, 2458, 2516, 2427, 1468,
+ 1465, 2870, 1466, 1467, 2504, 2841, 3488, 1736, 1468, 2428,
+ 2464, 2386, 3486, 1736, 3524, 2892, 1080, 2411, 2410, 1753,
+ 2409, 3528, 1081, 3193, 2143, 2894, 2426, 2295, 2296, 2297,
+ 2298, 2299, 2425, 1468, 3524, 2892, 3223, 3449, 1736, 1464,
+ 1465, 109, 1466, 1467, 2320, 2594, 2594, 2323, 2324, 2117,
+ 1736, 2501, 4049, 2474, 1841, 1840, 2618, 1465, 2515, 1466,
+ 1467, 1465, 1136, 1466, 1467, 1784, 1783, 1465, 3524, 1466,
+ 1467, 4021, 1879, 2846, 2459, 2455, 2448, 2450, 2451, 2477,
+ 2473, 2870, 3477, 2341, 1468, 2509, 3527, 1752, 2512, 3258,
+ 2513, 2485, 1465, 3166, 1466, 1467, 3447, 1736, 1468, 2412,
+ 2869, 165, 2752, 2655, 2529, 2654, 2508, 2507, 177, 2459,
+ 2511, 3575, 1464, 2515, 2498, 1468, 2533, 2381, 2530, 1740,
+ 2534, 2535, 2135, 2124, 2125, 2126, 2127, 2137, 2128, 2129,
+ 2130, 2142, 2138, 2131, 2132, 2139, 2140, 2141, 2133, 2134,
+ 2136, 2342, 1465, 1468, 1466, 1467, 2117, 1135, 1468, 185,
+ 2055, 1465, 1468, 1466, 1467, 2039, 2627, 1468, 2870, 1985,
+ 2599, 1737, 1739, 1468, 1771, 3576, 3577, 3578, 1468, 1034,
+ 1034, 1034, 3443, 1736, 1035, 1118, 1465, 2540, 1466, 1467,
+ 1117, 95, 4127, 4068, 3907, 3334, 3440, 1736, 1743, 1521,
+ 3873, 1521, 166, 171, 168, 174, 175, 176, 178, 180,
+ 181, 182, 183, 3438, 1736, 3733, 3591, 2614, 184, 186,
+ 187, 188, 3588, 3569, 3390, 3389, 2571, 1914, 1843, 2457,
+ 2318, 3330, 3285, 3281, 2960, 2454, 2620, 1465, 2449, 1466,
+ 1467, 2626, 1016, 1468, 2308, 3283, 2619, 1017, 2443, 2617,
+ 3915, 1465, 2442, 1466, 1467, 3436, 1736, 2113, 1968, 2317,
+ 4183, 3434, 1736, 1874, 95, 2385, 3432, 1736, 1465, 1870,
+ 1466, 1467, 1839, 2389, 121, 2392, 2926, 1208, 2058, 3908,
+ 2586, 1915, 1916, 1917, 2472, 2875, 2878, 2879, 2880, 2876,
+ 1468, 2877, 2881, 2592, 3538, 3539, 1465, 2355, 1466, 1467,
+ 4181, 1465, 4155, 1466, 1467, 1465, 4029, 1466, 1467, 2600,
+ 1465, 1468, 1466, 1467, 3948, 3541, 1465, 1468, 1466, 1467,
+ 3544, 1465, 2606, 1466, 1467, 3277, 2603, 2604, 2605, 2035,
+ 3579, 3430, 1736, 3276, 2084, 974, 975, 976, 977, 978,
+ 979, 980, 981, 982, 983, 984, 985, 986, 987, 988,
+ 989, 990, 991, 992, 993, 994, 995, 996, 997, 998,
+ 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008,
+ 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1910, 3428, 1736,
+ 3580, 3581, 3582, 2607, 2630, 2609, 1465, 2925, 1466, 1467,
+ 3275, 3193, 2939, 2036, 2612, 2572, 2613, 3215, 1468, 3426,
+ 1736, 673, 3216, 3213, 3543, 3424, 1736, 3212, 3214, 3217,
+ 1468, 2879, 2880, 3211, 1468, 4025, 2608, 2796, 1468, 3698,
+ 3909, 3697, 2372, 2615, 1748, 1468, 1048, 1911, 1912, 1913,
+ 2361, 1468, 3532, 1465, 2784, 1466, 1467, 1468, 2926, 2666,
+ 3171, 3170, 1468, 3987, 3183, 3185, 3711, 2580, 2581, 2828,
+ 3713, 1468, 2583, 3186, 1465, 3520, 1466, 1467, 1468, 3180,
+ 1465, 2584, 1466, 1467, 3517, 2114, 1051, 2112, 1034, 1984,
+ 2831, 3696, 3516, 1468, 1052, 734, 2058, 1049, 2875, 2878,
+ 2879, 2880, 2876, 2550, 2877, 2881, 3422, 1736, 3538, 3539,
+ 1018, 2867, 2868, 2569, 2570, 2829, 3254, 2574, 3420, 1736,
+ 2399, 1468, 3546, 1034, 2887, 2909, 3418, 1736, 2930, 2579,
+ 2160, 2564, 2563, 3416, 1736, 2832, 2582, 2834, 2562, 3414,
+ 1736, 2561, 1468, 2560, 1174, 3412, 1736, 2161, 2559, 1173,
+ 3410, 1736, 1468, 2080, 2078, 2079, 2083, 2866, 2847, 3396,
+ 1736, 1465, 2585, 1466, 1467, 3350, 3372, 1736, 2637, 2925,
+ 1468, 3008, 2966, 1465, 1432, 1466, 1467, 1465, 129, 1466,
+ 1467, 1465, 1736, 1466, 1467, 2652, 42, 1468, 1465, 1708,
+ 1466, 1467, 2819, 1468, 1465, 2884, 1466, 1467, 2886, 1060,
+ 1465, 1468, 1466, 1467, 2885, 1465, 2856, 1466, 1467, 2817,
+ 1736, 2839, 3522, 1059, 1465, 101, 1466, 1467, 1468, 2912,
+ 2914, 1465, 1702, 1466, 1467, 102, 1468, 103, 2905, 2859,
+ 2815, 1736, 4197, 1468, 110, 2844, 1465, 2964, 1466, 1467,
+ 2790, 1736, 4104, 2889, 101, 109, 1468, 108, 3273, 2575,
+ 103, 3500, 2893, 1468, 102, 103, 2598, 2896, 2767, 1736,
+ 1468, 4006, 2464, 2903, 1465, 3903, 1466, 1467, 2906, 2383,
+ 2384, 3253, 2975, 2883, 2367, 2759, 1736, 108, 3169, 2917,
+ 3972, 2750, 1736, 109, 2155, 1465, 3168, 1466, 1467, 2156,
+ 4162, 3971, 110, 1468, 3951, 1465, 2927, 1466, 1467, 3719,
+ 3717, 3716, 3709, 109, 1468, 108, 2748, 1736, 3589, 2940,
+ 2941, 2942, 2936, 1465, 3493, 1466, 1467, 2935, 3521, 3519,
+ 2928, 2735, 1736, 1468, 3286, 2931, 2932, 2218, 2972, 1468,
+ 1465, 1862, 1466, 1467, 2733, 1736, 1465, 2499, 1466, 1467,
+ 1857, 2731, 1736, 110, 1465, 1058, 1466, 1467, 2729, 1736,
+ 2961, 2962, 1468, 3510, 109, 2971, 1468, 3708, 3018, 3019,
+ 2862, 1465, 3682, 1466, 1467, 4185, 4184, 3, 2843, 1465,
+ 1468, 1466, 1467, 3072, 1468, 2656, 1465, 2353, 1466, 1467,
+ 1765, 2727, 1736, 1468, 1757, 4184, 2997, 4185, 1468, 1465,
+ 3993, 1466, 1467, 4005, 3016, 3555, 1465, 3035, 1466, 1467,
+ 1468, 114, 115, 1465, 97, 1466, 1467, 2301, 1, 1026,
+ 3000, 2725, 1736, 2052, 1435, 1468, 10, 2723, 1736, 1434,
+ 3559, 4116, 3053, 3054, 3055, 3056, 3057, 3058, 3059, 3060,
+ 3061, 3062, 2050, 1468, 689, 9, 1465, 2333, 1466, 1467,
+ 3036, 3880, 3070, 2051, 2721, 1736, 8, 1465, 2343, 1466,
+ 1467, 1706, 4156, 4112, 4113, 1737, 2340, 2973, 2719, 1736,
+ 1954, 1944, 2717, 1736, 3621, 2269, 1465, 3904, 1466, 1467,
+ 3289, 3489, 1465, 2505, 1466, 1467, 2715, 1736, 1468, 3587,
+ 2462, 1126, 154, 2421, 2422, 4081, 118, 1084, 2713, 1736,
+ 3074, 2365, 1468, 1730, 117, 1465, 1129, 1466, 1467, 1465,
+ 1237, 1466, 1467, 2711, 1736, 2500, 3130, 1734, 3006, 3611,
+ 1731, 3007, 2910, 1465, 2430, 1466, 1467, 1465, 1790, 1466,
+ 1467, 2709, 1736, 1788, 1789, 1787, 1465, 1792, 1466, 1467,
+ 3020, 1465, 2888, 1466, 1467, 2359, 2360, 1733, 3037, 1732,
+ 3137, 1791, 4053, 1465, 3358, 1466, 1467, 3148, 2657, 3456,
+ 2043, 2951, 724, 2882, 718, 3139, 192, 1779, 1465, 3017,
+ 1466, 1467, 1758, 1168, 2399, 679, 2707, 1736, 3262, 3063,
+ 2306, 2538, 2306, 3110, 685, 2304, 1465, 2304, 1466, 1467,
+ 2705, 1736, 1518, 2034, 3167, 2897, 3200, 1078, 87, 1070,
+ 2354, 2399, 2399, 2399, 2399, 2399, 2833, 2476, 1077, 3120,
+ 3121, 3122, 3123, 3124, 3881, 3201, 2937, 3514, 3179, 3181,
+ 3148, 2399, 2849, 3184, 2399, 3177, 3986, 3205, 3138, 3710,
+ 3140, 1465, 4066, 1466, 1467, 2907, 1995, 1468, 1754, 3476,
+ 3222, 1468, 3038, 3147, 2629, 1465, 2150, 1466, 1467, 2401,
+ 1508, 2398, 3159, 1468, 3677, 2070, 747, 746, 3175, 744,
+ 3160, 3162, 3164, 2835, 1468, 2863, 3174, 3172, 1468, 1472,
+ 1471, 955, 1468, 1037, 2823, 1766, 2401, 2401, 2401, 2401,
+ 2401, 2874, 2986, 2987, 2988, 2989, 2990, 2991, 3306, 3165,
+ 3187, 3188, 2872, 1039, 3206, 2871, 2401, 3209, 3314, 2401,
+ 1038, 2573, 2406, 3218, 104, 3224, 3540, 3536, 3225, 2058,
+ 3001, 105, 3226, 3207, 3208, 1468, 3210, 4108, 2400, 2396,
+ 3232, 2842, 906, 3173, 1468, 2703, 1736, 3265, 1468, 3204,
+ 3593, 905, 3009, 756, 1468, 3263, 3264, 748, 738, 968,
+ 904, 2701, 1736, 1468, 903, 3316, 3317, 2981, 3331, 2983,
+ 2908, 3327, 2696, 1736, 1449, 1725, 2692, 1736, 1468, 1728,
+ 2690, 1736, 3190, 2362, 3318, 3315, 3319, 1097, 1468, 2464,
+ 3308, 3355, 4012, 2597, 3112, 3287, 3114, 3384, 1724, 3325,
+ 1465, 4019, 1466, 1467, 1465, 3297, 1466, 1467, 3605, 3278,
+ 3266, 3267, 3125, 3126, 3127, 3128, 1465, 3346, 1466, 1467,
+ 3196, 2957, 3345, 3455, 3343, 3196, 2492, 1465, 3353, 1466,
+ 1467, 1465, 3451, 1466, 1467, 1465, 3387, 1466, 1467, 69,
+ 1730, 46, 2683, 1736, 3981, 4050, 3363, 898, 895, 3679,
+ 3680, 2681, 1736, 3681, 1734, 3133, 3134, 1731, 3379, 3380,
+ 3381, 3382, 3383, 3360, 3361, 4032, 3362, 2921, 4033, 3364,
+ 894, 3366, 4034, 3368, 2207, 1445, 3386, 1442, 1465, 4129,
+ 1466, 1467, 1726, 1727, 1733, 2045, 1732, 1465, 96, 1466,
+ 1467, 1465, 1521, 1466, 1467, 36, 1521, 1465, 35, 1466,
+ 1467, 2616, 34, 33, 32, 2621, 1465, 26, 1466, 1467,
+ 25, 3288, 3501, 24, 3503, 3471, 23, 22, 29, 19,
+ 21, 1465, 3475, 1466, 1467, 20, 18, 3300, 2624, 4151,
+ 2625, 1465, 4196, 1466, 1467, 123, 2633, 55, 52, 50,
+ 2635, 2636, 131, 130, 53, 49, 1211, 47, 31, 2642,
+ 2643, 2644, 2645, 2646, 2647, 2648, 2649, 2650, 2651, 30,
+ 2653, 17, 16, 15, 14, 3199, 13, 12, 11, 7,
+ 6, 39, 38, 37, 2399, 28, 27, 40, 3506, 4,
+ 2944, 2494, 0, 2659, 2660, 2661, 2662, 3553, 2664, 2665,
+ 3511, 2667, 3518, 3354, 3502, 2669, 3504, 0, 0, 2674,
+ 2675, 0, 2676, 0, 1468, 2679, 2680, 2682, 2684, 2685,
+ 2686, 2687, 2688, 2689, 2691, 2693, 2694, 2695, 2697, 0,
+ 2699, 2700, 2702, 2704, 2706, 2708, 2710, 2712, 2714, 2716,
+ 2718, 2720, 2722, 2724, 2726, 2728, 2730, 2732, 2734, 2736,
+ 2737, 2738, 3309, 2740, 3545, 2742, 3547, 2744, 2745, 2401,
+ 2747, 2749, 2751, 3318, 3315, 3319, 2754, 3554, 3548, 736,
+ 2758, 3542, 3523, 0, 2763, 2764, 2765, 2766, 1468, 0,
+ 3570, 0, 3572, 1468, 0, 3508, 0, 2777, 2778, 2779,
+ 2780, 2781, 2782, 0, 0, 2786, 2787, 3478, 0, 3480,
+ 3481, 3482, 3378, 2789, 0, 1468, 0, 3274, 2795, 3348,
+ 3349, 0, 0, 2798, 2799, 2800, 2801, 2802, 3535, 0,
+ 0, 0, 0, 0, 2809, 2810, 1468, 2811, 0, 0,
+ 2814, 2816, 2365, 3312, 2818, 0, 0, 3549, 3550, 3615,
+ 3616, 3564, 3565, 0, 2830, 0, 0, 3326, 0, 1468,
+ 0, 0, 0, 1468, 0, 0, 0, 1465, 1468, 1466,
+ 1467, 3617, 0, 0, 1468, 0, 3376, 3344, 1468, 0,
+ 3347, 2813, 0, 0, 0, 0, 0, 0, 1057, 0,
+ 0, 1063, 1063, 0, 0, 0, 3633, 0, 0, 0,
+ 0, 0, 0, 2812, 3598, 0, 1468, 0, 3602, 3603,
+ 3604, 1468, 0, 0, 0, 0, 0, 0, 0, 1468,
+ 0, 3644, 0, 0, 2808, 0, 0, 1468, 0, 0,
+ 0, 1465, 0, 1466, 1467, 0, 1465, 0, 1466, 1467,
+ 0, 0, 0, 0, 0, 0, 0, 2807, 1468, 0,
+ 0, 2806, 0, 1468, 0, 0, 2805, 0, 1465, 1703,
+ 1466, 1467, 2804, 0, 0, 0, 2803, 1468, 0, 0,
+ 3695, 1468, 0, 3702, 3685, 3704, 3686, 3687, 3688, 1465,
+ 0, 1466, 1467, 0, 0, 3675, 1468, 0, 0, 0,
+ 1468, 0, 0, 0, 2794, 0, 0, 3705, 3200, 2793,
+ 0, 87, 1465, 3200, 1466, 1467, 1465, 2792, 1466, 1467,
+ 0, 1465, 0, 1466, 1467, 2791, 0, 1465, 0, 1466,
+ 1467, 1465, 0, 1466, 1467, 3638, 0, 0, 2114, 0,
+ 2112, 0, 0, 3735, 3706, 1468, 2788, 0, 0, 3715,
+ 3714, 2783, 0, 3725, 0, 3507, 1468, 3727, 3722, 1465,
+ 3724, 1466, 1467, 0, 1465, 2776, 1466, 1467, 0, 2775,
+ 0, 0, 1465, 0, 1466, 1467, 0, 0, 3887, 0,
+ 1465, 0, 1466, 1467, 2774, 0, 42, 3739, 2773, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3594, 3595, 0,
+ 0, 1465, 0, 1466, 1467, 0, 1465, 0, 1466, 1467,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3879, 3878,
+ 1465, 0, 1466, 1467, 1465, 0, 1466, 1467, 0, 3894,
+ 3906, 0, 0, 2772, 3899, 0, 3898, 0, 3877, 1465,
+ 3568, 1466, 1467, 1465, 2771, 1466, 1467, 0, 0, 0,
+ 3048, 3049, 3050, 3051, 3052, 3945, 0, 3946, 3729, 0,
+ 3583, 0, 0, 3584, 3585, 3586, 2114, 0, 2112, 0,
+ 3067, 3949, 3703, 0, 0, 0, 0, 0, 0, 0,
+ 3736, 3737, 0, 0, 0, 0, 0, 0, 1465, 0,
+ 1466, 1467, 0, 0, 0, 0, 0, 0, 0, 1465,
+ 0, 1466, 1467, 0, 0, 3952, 3994, 3200, 0, 3955,
+ 3196, 0, 3731, 0, 3889, 3890, 3891, 0, 0, 0,
+ 3666, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547,
+ 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557,
+ 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568,
+ 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578,
+ 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588,
+ 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598,
+ 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608,
+ 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618,
+ 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628,
+ 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1638, 1639,
+ 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649,
+ 1650, 1651, 1652, 1653, 1659, 1660, 1661, 1662, 1676, 1677,
+ 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687,
+ 1688, 1689, 3995, 3979, 3950, 3978, 0, 3199, 0, 1468,
+ 0, 0, 3199, 1468, 3969, 0, 4013, 1468, 0, 0,
+ 0, 3975, 1468, 3977, 0, 0, 1468, 0, 0, 0,
+ 3202, 0, 3998, 0, 87, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3997, 1468, 0, 3220, 0,
+ 0, 1468, 0, 3882, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4002, 4015, 0, 0, 0, 4018, 0,
+ 0, 0, 0, 0, 0, 0, 1468, 3886, 0, 0,
+ 4020, 0, 1468, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2770, 0, 0,
+ 0, 2769, 0, 0, 0, 2768, 0, 0, 0, 42,
+ 2762, 0, 0, 0, 2761, 4038, 0, 0, 4039, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3985, 0,
+ 0, 0, 4063, 0, 2760, 0, 0, 87, 0, 2757,
+ 0, 4048, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4057, 1465, 0, 1466, 1467, 1465, 0, 1466, 1467,
+ 1465, 0, 1466, 1467, 2756, 1465, 4069, 1466, 1467, 1465,
+ 2755, 1466, 1467, 0, 4080, 0, 3352, 1469, 4072, 0,
+ 4077, 3906, 4083, 4067, 4074, 4073, 4071, 4076, 4075, 1465,
+ 0, 1466, 1467, 0, 1465, 3999, 1466, 1467, 3369, 3370,
+ 0, 3371, 3373, 3375, 4102, 0, 3199, 0, 1527, 0,
+ 0, 0, 42, 0, 4107, 4125, 4115, 4120, 0, 1465,
+ 0, 1466, 1467, 4094, 0, 1465, 0, 1466, 1467, 3388,
+ 4135, 0, 4133, 0, 3391, 4146, 3393, 3394, 3395, 3397,
+ 3398, 3399, 3400, 3401, 3402, 3403, 3404, 3405, 3406, 3407,
+ 3408, 3409, 3411, 3413, 3415, 3417, 3419, 3421, 3423, 3425,
+ 3427, 3429, 3431, 3433, 3435, 3437, 3439, 3441, 3442, 3444,
+ 3445, 3446, 3448, 1995, 4150, 3450, 4145, 3452, 3453, 3454,
+ 4094, 4176, 3458, 3459, 3460, 3461, 3462, 3463, 3464, 3465,
+ 3466, 3467, 3468, 2114, 4182, 2112, 4180, 4169, 4179, 4178,
+ 4175, 3474, 4165, 4064, 4166, 3479, 1703, 4190, 1468, 3483,
+ 3484, 4059, 3485, 3487, 1468, 3490, 3492, 0, 3494, 3495,
+ 3496, 3497, 4204, 4206, 4198, 1468, 0, 0, 3505, 3196,
+ 0, 1468, 0, 0, 0, 4004, 1468, 0, 0, 0,
+ 1468, 0, 0, 0, 0, 4214, 1468, 0, 0, 4215,
+ 4216, 2114, 3946, 2112, 1468, 0, 4213, 4094, 0, 1468,
+ 0, 0, 4027, 3529, 3530, 4011, 0, 3534, 0, 4023,
+ 4037, 0, 0, 0, 1468, 0, 0, 0, 0, 1468,
+ 0, 0, 0, 0, 1468, 0, 0, 0, 0, 0,
+ 0, 0, 1468, 0, 0, 0, 2753, 0, 0, 1468,
+ 0, 0, 2746, 0, 0, 0, 4149, 0, 0, 0,
+ 0, 0, 0, 2743, 0, 1807, 0, 0, 0, 2741,
+ 0, 4141, 0, 0, 2739, 0, 0, 0, 2698, 0,
+ 0, 0, 1703, 0, 2678, 0, 0, 0, 0, 0,
+ 0, 0, 2677, 0, 0, 0, 4024, 2673, 0, 0,
+ 0, 1465, 0, 1466, 1467, 0, 4058, 1465, 0, 1466,
+ 1467, 0, 2671, 0, 0, 0, 0, 2663, 1465, 0,
+ 1466, 1467, 2634, 3609, 1465, 0, 1466, 1467, 0, 1465,
+ 2628, 1466, 1467, 1465, 0, 1466, 1467, 2623, 0, 1465,
+ 0, 1466, 1467, 0, 0, 0, 0, 1465, 1756, 1466,
+ 1467, 0, 1465, 0, 1466, 1467, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1465, 3628, 1466,
+ 1467, 3632, 1465, 0, 1466, 1467, 0, 1465, 0, 1466,
+ 1467, 0, 0, 0, 0, 1465, 1844, 1466, 1467, 0,
+ 0, 0, 1465, 0, 1466, 1467, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3645, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1795, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4163,
+ 0, 951, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3668,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3676, 0, 0, 0, 0, 0, 0, 3683,
+ 0, 0, 0, 0, 0, 0, 0, 195, 0, 0,
+ 195, 1808, 0, 0, 722, 0, 0, 0, 0, 728,
+ 0, 0, 0, 0, 2000, 0, 0, 0, 0, 0,
+ 195, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 195, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 728, 195, 728, 1821, 1824, 1825, 1826, 1827, 1828,
+ 1829, 0, 1830, 1831, 1833, 1834, 1832, 1835, 1836, 1809,
+ 1810, 1811, 1812, 1793, 1794, 1822, 0, 1796, 0, 1797,
+ 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 0, 0,
+ 1806, 1813, 1814, 1815, 1816, 0, 1817, 1818, 1819, 1820,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3895, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3902, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3912, 3913, 3914,
+ 0, 3916, 0, 3917, 3918, 0, 0, 0, 0, 3921,
+ 3922, 3923, 3924, 3925, 3926, 3927, 3928, 3929, 3930, 3931,
+ 3932, 3933, 3934, 3935, 3936, 3937, 3938, 3939, 3940, 3941,
+ 3942, 0, 3944, 3947, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3956, 3957,
+ 3958, 3959, 3960, 3962, 3963, 3965, 3967, 3968, 3970, 0,
+ 0, 0, 3974, 0, 0, 0, 3976, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4003, 0, 0, 2065, 2066, 2067, 2068, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2081, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2120, 2121, 0, 0, 0,
+ 0, 2144, 0, 0, 2148, 2149, 1823, 0, 0, 2154,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2166, 2167, 2168, 2169, 2170, 2171,
+ 2172, 2173, 2174, 2175, 0, 2177, 0, 0, 0, 2199,
+ 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2208, 0, 2213,
+ 0, 2215, 2216, 2217, 0, 2219, 2220, 2221, 0, 2223,
+ 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233,
+ 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243,
+ 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253,
+ 2254, 2255, 2256, 2257, 2258, 2259, 2260, 2261, 2262, 2263,
+ 2264, 2265, 2266, 2267, 2268, 2272, 2273, 2274, 2275, 2276,
+ 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2284, 2285, 2286,
+ 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 0, 0,
+ 0, 0, 0, 2300, 0, 2302, 0, 2309, 2310, 2311,
+ 2312, 2313, 2314, 0, 0, 0, 0, 0, 4028, 0,
+ 0, 0, 0, 0, 0, 0, 2325, 2326, 2327, 2328,
+ 2329, 2330, 2331, 2332, 0, 2334, 2335, 2336, 2337, 2338,
+ 0, 0, 4043, 0, 0, 0, 0, 0, 4046, 0,
+ 4047, 0, 0, 86, 44, 45, 88, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 190, 0, 92, 4062, 0, 1063, 48, 76, 77, 0,
+ 74, 78, 0, 0, 1807, 0, 0, 0, 0, 0,
+ 0, 0, 75, 129, 0, 151, 0, 0, 0, 4088,
+ 4089, 0, 2379, 2380, 0, 0, 0, 0, 0, 172,
+ 0, 0, 0, 4096, 4098, 4100, 0, 0, 0, 0,
+ 0, 62, 0, 0, 0, 0, 0, 0, 2418, 0,
+ 0, 4106, 0, 95, 0, 0, 0, 0, 0, 0,
+ 162, 0, 0, 4128, 0, 0, 150, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 169, 0, 0, 170, 0,
+ 195, 0, 195, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4147, 83, 0, 0, 0, 0, 0, 0, 2460,
+ 138, 139, 161, 160, 189, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 728,
+ 0, 728, 728, 0, 0, 4170, 4172, 4174, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 728, 195, 0, 0, 0, 1795, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4195, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1513, 0, 0, 0, 0, 0, 4207, 4208, 0, 0,
+ 0, 0, 0, 0, 0, 0, 51, 54, 57, 56,
+ 59, 0, 73, 0, 0, 82, 79, 0, 0, 0,
+ 0, 0, 0, 0, 0, 155, 136, 158, 143, 135,
+ 0, 156, 157, 0, 0, 0, 0, 0, 173, 61,
+ 91, 90, 0, 0, 71, 72, 58, 179, 144, 0,
+ 1808, 0, 80, 81, 0, 0, 0, 0, 0, 0,
+ 0, 0, 147, 145, 140, 141, 142, 146, 0, 0,
+ 0, 0, 0, 0, 137, 0, 0, 0, 0, 0,
+ 0, 0, 0, 148, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 63, 64, 0, 65, 66,
+ 67, 68, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1821, 1824, 1825, 1826, 1827, 1828, 1829,
+ 0, 1830, 1831, 1833, 1834, 1832, 1835, 1836, 1809, 1810,
+ 1811, 1812, 1793, 1794, 1822, 0, 1796, 0, 1797, 1798,
+ 1799, 1800, 1801, 1802, 1803, 1804, 1805, 0, 0, 1806,
+ 1813, 1814, 1815, 1816, 0, 1817, 1818, 1819, 1820, 60,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 164, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1513, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2632, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2638, 2639, 2640, 2641, 0, 0, 0, 89,
+ 0, 195, 0, 0, 0, 728, 728, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 159, 0,
0, 0, 0, 0, 195, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1527, 0, 0,
+ 0, 0, 0, 0, 0, 728, 0, 0, 195, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 728, 0, 0, 0, 0, 0, 0, 195, 0, 0,
+ 0, 728, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 728, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 728, 0, 728, 0, 0, 94,
+ 0, 0, 0, 0, 728, 1823, 0, 1513, 728, 0,
+ 0, 728, 728, 728, 728, 0, 728, 152, 728, 728,
+ 153, 728, 728, 728, 728, 728, 728, 0, 0, 0,
+ 0, 0, 0, 0, 1513, 728, 728, 1513, 728, 1513,
+ 195, 728, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 165, 0, 0, 0, 0, 0, 0, 177, 0,
+ 195, 0, 0, 0, 0, 0, 0, 0, 0, 1016,
+ 0, 0, 0, 728, 1017, 195, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2113, 0, 728, 0, 0, 728,
+ 0, 195, 195, 0, 0, 0, 0, 0, 0, 185,
+ 0, 1756, 0, 0, 0, 0, 70, 0, 195, 0,
+ 0, 0, 0, 0, 0, 195, 0, 0, 0, 0,
+ 0, 0, 0, 0, 195, 195, 195, 195, 195, 195,
+ 195, 195, 195, 728, 0, 0, 0, 0, 0, 0,
+ 0, 0, 166, 171, 168, 174, 175, 176, 178, 180,
+ 181, 182, 183, 0, 0, 0, 0, 0, 184, 186,
+ 187, 188, 974, 975, 976, 977, 978, 979, 980, 981,
+ 982, 983, 984, 985, 986, 987, 988, 989, 990, 991,
+ 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001,
+ 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011,
+ 1012, 1013, 1014, 1015, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 726,
- 195, 726, 0, 970, 971, 972, 973, 974, 975, 976,
- 977, 978, 979, 980, 981, 982, 983, 984, 985, 986,
- 987, 988, 989, 990, 991, 992, 993, 994, 995, 996,
- 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006,
- 1007, 1008, 1009, 1010, 1011, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3879, 0, 0,
- 0, 0, 0, 0, 0, 0, 3886, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 3896, 3897, 3898, 0,
- 3900, 0, 3901, 3902, 0, 0, 0, 3905, 3906, 3907,
- 3908, 3909, 3910, 3911, 3912, 3913, 3914, 3915, 3916, 3917,
- 3918, 3919, 3920, 3921, 3922, 3923, 3924, 3925, 3926, 0,
- 3928, 3931, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3652, 0, 0, 3940, 3941, 3942, 3943,
- 3944, 3946, 3947, 3949, 3951, 3952, 3954, 0, 0, 0,
- 3958, 0, 0, 0, 3960, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 3987,
- 0, 0, 2059, 2060, 2061, 2062, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2075, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2114, 2115, 0, 0, 0, 0, 2138,
- 0, 0, 2142, 2143, 0, 0, 0, 2148, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167,
- 2168, 2169, 0, 2171, 0, 0, 0, 2193, 2194, 2195,
- 2196, 2197, 2198, 2200, 0, 2205, 0, 2207, 2208, 2209,
- 0, 2211, 2212, 2213, 0, 2215, 2216, 2217, 2218, 2219,
- 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229,
- 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239,
- 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249,
- 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258, 2259,
- 2260, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272,
- 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282,
- 2283, 2284, 2285, 2286, 0, 0, 0, 0, 0, 2292,
- 0, 2294, 0, 2301, 2302, 2303, 2304, 2305, 2306, 0,
- 3969, 0, 0, 0, 4012, 0, 0, 0, 0, 0,
- 0, 0, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324,
- 0, 2326, 2327, 2328, 2329, 2330, 0, 0, 4027, 0,
- 0, 0, 0, 0, 4030, 0, 4031, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 86, 44, 45, 88, 4046,
- 0, 1059, 0, 0, 0, 0, 0, 190, 0, 0,
- 0, 0, 0, 0, 92, 0, 0, 0, 48, 76,
- 77, 0, 74, 78, 0, 4072, 4073, 0, 2371, 2372,
- 129, 0, 151, 0, 75, 0, 0, 0, 0, 4080,
- 4082, 4084, 0, 0, 0, 0, 172, 0, 0, 0,
- 0, 0, 0, 0, 2410, 0, 0, 4090, 0, 0,
- 0, 0, 0, 62, 0, 0, 0, 0, 0, 4112,
- 0, 0, 0, 0, 0, 95, 0, 162, 0, 0,
- 0, 0, 0, 150, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 195, 0, 195, 0,
- 0, 0, 169, 0, 0, 170, 0, 4131, 0, 0,
- 0, 0, 0, 0, 0, 2452, 1697, 0, 0, 0,
- 0, 0, 83, 0, 0, 138, 139, 161, 160, 189,
- 0, 0, 0, 0, 0, 726, 0, 726, 726, 0,
- 0, 4154, 4156, 4158, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 726, 195, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4011, 0, 4179, 0, 0, 0, 0, 0,
- 4021, 0, 0, 0, 0, 0, 1509, 0, 0, 0,
- 0, 0, 4191, 4192, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 51, 54, 57, 56,
- 59, 0, 73, 1012, 0, 82, 79, 0, 1013, 0,
- 155, 136, 158, 143, 135, 0, 156, 157, 2107, 0,
- 0, 0, 1697, 173, 0, 0, 0, 0, 0, 61,
- 91, 90, 179, 144, 71, 72, 58, 0, 0, 0,
- 0, 0, 80, 81, 0, 0, 0, 147, 145, 140,
- 141, 142, 146, 0, 0, 0, 0, 0, 0, 137,
- 0, 0, 0, 0, 0, 0, 0, 0, 148, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 63, 64, 0, 65, 66,
- 67, 68, 0, 0, 970, 971, 972, 973, 974, 975,
- 976, 977, 978, 979, 980, 981, 982, 983, 984, 985,
- 986, 987, 988, 989, 990, 991, 992, 993, 994, 995,
- 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005,
- 1006, 1007, 1008, 1009, 1010, 1011, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,
- 0, 0, 0, 0, 0, 0, 0, 164, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1509, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2624, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2630, 2631,
- 2632, 2633, 0, 0, 0, 195, 0, 0, 0, 726,
- 726, 0, 0, 0, 0, 0, 0, 0, 0, 89,
- 0, 0, 0, 0, 0, 0, 0, 0, 195, 0,
- 0, 0, 0, 159, 0, 0, 0, 0, 0, 0,
- 0, 1523, 0, 0, 0, 0, 0, 0, 0, 726,
+ 728, 728, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 728, 0, 0, 0, 0, 0, 3013,
0, 0, 195, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 726, 0, 0, 0, 0, 0,
- 0, 195, 0, 0, 0, 726, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 726, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 726, 0,
- 726, 0, 0, 0, 0, 0, 0, 0, 726, 0,
- 0, 1509, 726, 0, 0, 726, 726, 726, 726, 94,
- 726, 0, 726, 726, 0, 726, 726, 726, 726, 726,
- 726, 0, 152, 0, 0, 153, 0, 0, 1509, 726,
- 726, 1509, 726, 1509, 195, 726, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 195, 0, 165, 0, 0, 0,
- 0, 0, 0, 177, 0, 0, 0, 726, 0, 195,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 726, 0, 0, 726, 0, 195, 195, 0, 0, 0,
- 0, 0, 0, 0, 0, 1750, 0, 0, 0, 0,
- 0, 0, 195, 0, 185, 0, 0, 0, 0, 195,
- 0, 0, 0, 0, 0, 0, 70, 0, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 726, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3039, 3040, 3041, 0,
+ 0, 3043, 0, 0, 3045, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 728, 0, 3064, 3065, 3066, 0, 0, 0,
+ 0, 0, 1513, 3071, 0, 0, 0, 0, 3073, 0,
+ 0, 3075, 3076, 3077, 0, 0, 0, 3078, 3079, 0,
+ 1513, 3080, 0, 3081, 0, 0, 0, 0, 0, 0,
+ 3082, 0, 3083, 0, 0, 0, 3084, 0, 3085, 0,
+ 0, 3086, 0, 3087, 0, 3088, 0, 3089, 0, 3090,
+ 0, 3091, 0, 3092, 0, 3093, 0, 3094, 0, 3095,
+ 0, 3096, 0, 3097, 0, 3098, 0, 3099, 0, 3100,
+ 0, 3101, 0, 3102, 0, 3103, 0, 0, 0, 3104,
+ 0, 3105, 0, 3106, 0, 0, 3107, 0, 3108, 0,
+ 3109, 0, 2272, 3111, 0, 0, 3113, 0, 0, 3115,
+ 3116, 3117, 3118, 0, 0, 0, 0, 3119, 2272, 2272,
+ 2272, 2272, 2272, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3129, 0, 0, 0, 0, 0, 0,
+ 0, 3142, 0, 0, 3146, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3149, 3150, 3151, 3152, 3153, 3154, 0,
+ 0, 0, 3155, 3156, 0, 3157, 2319, 3158, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1063, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 195, 3191, 0, 0, 0, 728, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 190, 0, 3221, 0, 0,
+ 0, 0, 195, 0, 0, 728, 2950, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 129, 195,
+ 151, 0, 0, 728, 0, 0, 2319, 195, 0, 195,
+ 0, 195, 195, 0, 172, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 728, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3284, 0,
+ 0, 0, 0, 0, 0, 162, 0, 0, 0, 0,
+ 0, 150, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 169, 0, 0, 170, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 728, 0, 0, 0, 0, 0, 0,
+ 728, 728, 728, 0, 0, 1865, 1866, 161, 160, 189,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 728, 0, 0, 0, 0, 0, 728, 728, 0, 0,
+ 728, 0, 728, 0, 0, 0, 0, 0, 728, 950,
+ 0, 0, 0, 0, 3377, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3392, 728, 0, 0, 0, 0, 728, 0,
+ 0, 0, 728, 728, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 707, 0, 0, 0, 0, 0, 727, 190, 0,
+ 155, 1867, 158, 0, 1864, 0, 156, 157, 0, 1861,
+ 195, 0, 0, 173, 0, 0, 0, 195, 0, 0,
+ 0, 129, 179, 151, 0, 0, 0, 195, 195, 0,
+ 0, 195, 0, 195, 0, 0, 0, 172, 0, 0,
+ 0, 0, 0, 195, 0, 0, 0, 0, 0, 727,
+ 195, 727, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 162, 0,
+ 0, 0, 0, 0, 150, 0, 195, 0, 0, 0,
+ 0, 0, 0, 0, 0, 728, 0, 0, 0, 0,
+ 0, 0, 0, 169, 0, 0, 170, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1865, 1866,
+ 161, 160, 189, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 164, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1513,
+ 0, 2319, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3590, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3614, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 155, 1867, 158, 0, 1864, 0, 156,
+ 157, 0, 0, 0, 0, 0, 173, 0, 0, 0,
+ 0, 0, 0, 159, 0, 179, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3634, 0, 3635, 0, 3636, 0, 3637, 0,
+ 0, 0, 0, 0, 0, 0, 3640, 3641, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3646, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3647, 0, 3648, 0, 3649, 0, 3650, 0, 3651, 0,
+ 3652, 0, 3653, 0, 3654, 0, 3655, 0, 3656, 0,
+ 3657, 0, 3658, 0, 3659, 0, 3660, 0, 3661, 0,
+ 3662, 0, 0, 3663, 0, 0, 0, 3664, 0, 3665,
+ 0, 0, 0, 0, 0, 3667, 0, 0, 0, 0,
+ 0, 0, 152, 0, 0, 153, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3684, 0, 0,
+ 164, 0, 0, 0, 0, 0, 3689, 0, 3690, 3691,
+ 0, 3692, 0, 3693, 195, 0, 165, 0, 3694, 0,
+ 0, 0, 195, 177, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 728, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3723, 0, 728, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3732, 0,
+ 0, 3734, 0, 0, 185, 0, 0, 0, 0, 0,
+ 0, 195, 0, 3738, 0, 0, 195, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3874,
+ 0, 0, 0, 0, 0, 0, 159, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 166, 171, 168,
174, 175, 176, 178, 180, 181, 182, 183, 0, 0,
0, 0, 0, 184, 186, 187, 188, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 728, 0, 0, 0, 0, 0,
+ 195, 0, 0, 0, 0, 0, 0, 195, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 728, 0, 0, 0, 0, 0, 0, 728, 0,
+ 0, 0, 728, 728, 0, 0, 0, 728, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1513, 728, 152, 0, 0, 153, 0,
+ 0, 0, 0, 0, 0, 0, 195, 195, 195, 195,
+ 195, 195, 0, 0, 0, 0, 0, 0, 3984, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 165,
+ 0, 0, 0, 195, 195, 0, 177, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 195, 727, 1428, 727,
+ 727, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 185, 0, 727,
+ 0, 0, 728, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1512, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 166, 171, 168, 174, 175, 176, 178, 180, 181, 182,
+ 183, 0, 728, 0, 0, 0, 184, 186, 187, 188,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -2259,525 +2401,341 @@ var yyAct = [...]int{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4026, 0, 0, 0, 0,
+ 0, 907, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 728, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 728,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4040, 0, 0, 4041, 0, 4042, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 728, 0, 0, 0, 0, 0, 0, 0, 0, 726,
+ 0, 0, 0, 0, 0, 195, 0, 0, 728, 0,
+ 0, 1512, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 728, 0, 0, 0, 1513, 0, 0, 728,
+ 728, 1513, 195, 195, 195, 195, 195, 0, 0, 0,
+ 0, 0, 0, 0, 195, 0, 0, 0, 0, 0,
+ 195, 1088, 195, 1095, 0, 195, 195, 195, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 726, 726, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 726, 0, 0,
- 0, 0, 0, 3003, 0, 0, 195, 0, 0, 0,
+ 0, 0, 0, 727, 727, 0, 0, 0, 4126, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3029, 3030, 3031, 0, 0, 3033, 0, 0, 3035, 0,
+ 0, 195, 0, 0, 0, 0, 0, 4142, 0, 4143,
+ 0, 4144, 0, 727, 728, 0, 0, 1513, 0, 0,
+ 0, 0, 728, 0, 0, 0, 0, 195, 727, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 727,
+ 0, 195, 0, 0, 0, 0, 0, 0, 0, 727,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 726, 0, 3054, 3055,
- 3056, 0, 0, 0, 0, 0, 1509, 0, 0, 0,
- 3061, 0, 0, 3063, 3064, 3065, 0, 0, 0, 3066,
- 3067, 0, 0, 3068, 1509, 3069, 0, 0, 0, 0,
- 0, 0, 3070, 0, 3071, 0, 0, 0, 3072, 0,
- 3073, 0, 0, 3074, 0, 3075, 0, 3076, 0, 3077,
- 0, 3078, 0, 3079, 0, 3080, 0, 3081, 0, 3082,
- 0, 3083, 0, 3084, 0, 3085, 0, 3086, 0, 3087,
- 0, 3088, 0, 3089, 0, 3090, 0, 3091, 0, 0,
- 0, 3092, 0, 3093, 0, 3094, 0, 0, 3095, 0,
- 3096, 0, 3097, 0, 2264, 3099, 0, 0, 3101, 0,
- 0, 3103, 3104, 3105, 3106, 0, 0, 0, 0, 3107,
- 2264, 2264, 2264, 2264, 2264, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 3117, 0, 0, 0, 0,
- 0, 0, 0, 3130, 0, 0, 3134, 0, 0, 0,
- 0, 0, 0, 0, 0, 3137, 3138, 3139, 3140, 3141,
- 3142, 0, 0, 0, 3143, 3144, 0, 3145, 2311, 3146,
+ 0, 195, 0, 0, 195, 0, 0, 0, 0, 0,
+ 0, 0, 727, 0, 727, 0, 0, 0, 0, 0,
+ 0, 4193, 727, 4194, 0, 1512, 727, 0, 0, 727,
+ 727, 727, 727, 0, 727, 0, 727, 727, 0, 727,
+ 727, 727, 727, 727, 727, 0, 0, 0, 0, 0,
+ 0, 0, 1512, 727, 727, 1512, 727, 1512, 0, 727,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1059, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 195, 3179, 0, 0, 0, 726, 0,
+ 0, 727, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 727, 0, 0, 727, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 190, 0, 3209,
- 0, 0, 0, 0, 195, 0, 0, 726, 2940, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 129, 195, 151, 0, 0, 726, 0, 0, 2311, 195,
- 0, 195, 0, 195, 195, 0, 172, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 726, 0,
+ 0, 0, 728, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3272, 0, 0, 0, 0, 0, 0, 162, 0, 0,
- 0, 0, 0, 150, 0, 0, 0, 0, 0, 0,
+ 0, 727, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 195,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 169, 0, 0, 170, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 726, 0, 0, 0, 0,
- 0, 0, 726, 726, 726, 1859, 1860, 161, 160, 189,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 726, 0, 0, 0, 0, 0, 726, 726,
- 0, 0, 726, 0, 726, 0, 0, 0, 0, 0,
- 726, 946, 0, 0, 0, 0, 3365, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3379, 0, 0, 726, 0, 0, 0, 0,
- 726, 0, 0, 0, 726, 726, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 705, 0, 0, 0, 0, 0, 725,
- 155, 1861, 158, 0, 1858, 0, 156, 157, 0, 0,
- 0, 0, 195, 173, 0, 0, 0, 0, 0, 195,
- 0, 0, 179, 0, 0, 0, 0, 0, 0, 195,
- 195, 0, 0, 195, 0, 195, 0, 0, 0, 0,
0, 0, 0, 0, 0, 195, 0, 0, 0, 0,
- 0, 725, 195, 725, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 195, 0,
- 0, 0, 0, 0, 0, 0, 0, 726, 0, 0,
- 903, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 195, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 195, 0, 0, 195, 195, 195,
+ 0, 0, 0, 0, 0, 0, 0, 728, 728, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 164, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 724, 0,
- 0, 1509, 0, 2311, 0, 0, 0, 0, 0, 0,
- 0, 3577, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 727, 727,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 727, 0, 0, 0, 0, 728, 728, 728, 728,
+ 0, 0, 0, 908, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 3601, 0, 0, 0, 0, 0,
- 1084, 0, 1091, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 159, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3621, 0, 3622, 0, 3623, 0, 3624, 0,
- 0, 0, 0, 0, 0, 0, 3627, 3628, 0, 0,
- 0, 0, 0, 0, 0, 3632, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 3633,
- 0, 3634, 0, 3635, 0, 3636, 0, 3637, 0, 3638,
- 0, 3639, 0, 3640, 0, 3641, 0, 3642, 0, 3643,
- 0, 3644, 0, 3645, 0, 3646, 0, 3647, 0, 3648,
- 0, 0, 3649, 0, 0, 0, 3650, 0, 3651, 0,
- 0, 0, 0, 0, 3653, 0, 0, 0, 0, 0,
- 0, 0, 152, 0, 0, 153, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 3670, 0, 0, 0,
- 0, 0, 0, 0, 0, 3675, 0, 3676, 3677, 0,
- 3678, 0, 3679, 0, 195, 0, 165, 3680, 0, 0,
- 0, 0, 195, 177, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 726, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 3709, 0, 0, 726, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3718, 0, 0,
- 3720, 0, 0, 0, 185, 0, 0, 0, 0, 0,
- 0, 195, 3724, 0, 0, 0, 195, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3858, 0,
+ 727, 0, 0, 0, 0, 0, 0, 0, 0, 193,
+ 1512, 0, 672, 0, 0, 0, 0, 0, 0, 2122,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1512, 0,
+ 0, 0, 672, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1044, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 166, 171, 168,
- 174, 175, 176, 178, 180, 181, 182, 183, 0, 0,
- 0, 0, 0, 184, 186, 187, 188, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1064, 1064, 0, 0, 0,
+ 0, 0, 0, 0, 672, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1276,
+ 0, 1276, 1276, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 726, 0, 0, 0, 0, 0,
- 195, 0, 0, 0, 0, 0, 0, 195, 0, 0,
+ 0, 1440, 0, 728, 0, 728, 0, 195, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 726, 0, 0, 0, 0, 0, 0, 726, 0,
- 0, 0, 726, 726, 0, 0, 0, 726, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1513, 0, 0, 0,
+ 195, 0, 0, 728, 0, 728, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1509, 726, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 195, 195, 195, 195,
- 195, 195, 0, 0, 0, 0, 3968, 0, 0, 0,
+ 0, 0, 0, 0, 727, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 195, 195, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 195, 725, 1424, 725,
- 725, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 725,
- 1703, 0, 726, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1508, 0,
+ 0, 0, 0, 728, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 727, 0, 195, 0, 0, 728,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 728, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 727, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 726, 0, 0, 0, 0, 0, 0, 0, 0, 669,
+ 0, 727, 0, 0, 727, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1017,
+ 0, 0, 0, 0, 727, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 728, 0, 0,
+ 0, 0, 0, 0, 728, 0, 728, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 727, 0, 0, 0, 728, 0, 0, 727, 727,
+ 727, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 727, 0,
+ 0, 0, 0, 0, 727, 727, 0, 0, 727, 0,
+ 727, 0, 0, 0, 0, 0, 727, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1088, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1272, 0, 1272, 1272,
- 0, 4010, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1436, 0,
- 0, 0, 0, 0, 0, 726, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 726, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 4024, 0, 0,
- 4025, 0, 4026, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 726, 0,
+ 0, 0, 0, 0, 0, 1712, 1713, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 195, 0, 0, 726, 0, 0, 1508,
+ 0, 727, 0, 0, 0, 0, 727, 0, 0, 0,
+ 727, 727, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1762, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 726, 0, 0, 0, 1509, 0, 0, 726, 726, 1509,
- 195, 195, 195, 195, 195, 0, 0, 0, 0, 0,
- 0, 0, 195, 0, 0, 0, 0, 0, 195, 0,
- 195, 0, 0, 195, 195, 195, 0, 0, 0, 0,
+ 1780, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1838, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1847, 0, 0, 0, 728, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 725, 725, 0, 4110, 0, 0, 0, 0, 0,
+ 0, 195, 0, 0, 1088, 0, 1873, 0, 0, 0,
+ 0, 0, 0, 0, 1882, 0, 0, 0, 1884, 728,
+ 195, 1887, 1888, 1890, 1890, 0, 1890, 0, 1890, 1890,
+ 0, 1899, 1890, 1890, 1890, 1890, 1890, 0, 0, 0,
+ 0, 0, 0, 727, 0, 1919, 1920, 0, 1088, 0,
+ 0, 1925, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 195,
- 0, 0, 0, 4126, 0, 4127, 0, 4128, 0, 0,
- 0, 725, 726, 0, 0, 1509, 0, 0, 0, 0,
- 726, 0, 0, 0, 0, 195, 725, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 725, 0, 195,
- 0, 0, 0, 0, 0, 0, 0, 725, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 195,
- 0, 0, 195, 0, 0, 0, 0, 0, 0, 0,
- 725, 0, 725, 0, 0, 0, 0, 4177, 0, 4178,
- 725, 0, 0, 1508, 725, 0, 0, 725, 725, 725,
- 725, 0, 725, 0, 725, 725, 0, 725, 725, 725,
- 725, 725, 725, 0, 0, 0, 0, 0, 0, 0,
- 1508, 725, 725, 1508, 725, 1508, 0, 725, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1706, 1707, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 725,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 725, 0, 0, 725, 0, 0, 0, 0,
- 1756, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1774, 0, 0, 726, 0,
- 0, 0, 0, 0, 0, 0, 1832, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1841, 0, 0, 725,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 195, 0, 0, 0, 1084,
- 0, 1867, 0, 0, 0, 0, 0, 0, 0, 1876,
- 0, 0, 0, 1878, 0, 0, 1881, 1882, 1884, 1884,
- 0, 1884, 0, 1884, 1884, 0, 1893, 1884, 1884, 1884,
- 1884, 1884, 0, 0, 0, 0, 0, 0, 0, 0,
- 1913, 1914, 0, 1084, 0, 0, 1919, 0, 0, 0,
- 0, 195, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1961, 0,
- 195, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1982, 0, 0, 1986, 0, 0, 0, 0, 904,
- 195, 0, 0, 195, 195, 195, 0, 0, 0, 0,
- 0, 0, 0, 726, 726, 0, 0, 1208, 0, 1214,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1272, 0,
- 0, 0, 0, 0, 0, 0, 725, 725, 0, 0,
- 0, 0, 0, 0, 0, 193, 0, 0, 670, 725,
- 0, 0, 726, 726, 726, 726, 190, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1855, 670, 1437,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 129,
- 0, 151, 0, 0, 1040, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 172, 0, 0, 0, 0,
- 0, 1060, 1060, 0, 0, 0, 0, 0, 725, 0,
- 670, 0, 0, 0, 0, 0, 0, 0, 1508, 0,
- 0, 0, 0, 0, 0, 0, 162, 2116, 0, 0,
- 0, 0, 150, 0, 0, 0, 1508, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 169, 0, 0, 170, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1859, 1860, 161, 160, 189, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1272, 1272, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2040, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 726, 0,
- 726, 0, 195, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1509, 0, 0, 0, 195, 0, 0, 726, 0,
- 726, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 2102, 0, 0,
- 725, 0, 0, 0, 0, 0, 0, 0, 0, 155,
- 1861, 158, 0, 1858, 0, 156, 157, 0, 0, 0,
- 0, 0, 173, 0, 0, 0, 0, 0, 0, 0,
- 0, 179, 0, 0, 0, 0, 0, 0, 726, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 725, 195, 0, 0, 726, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 726, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 725,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 725, 0, 0,
- 725, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 725, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1762, 0, 0, 0, 0, 0, 0,
- 0, 726, 0, 0, 0, 0, 0, 0, 726, 0,
- 726, 0, 1779, 0, 0, 0, 164, 0, 0, 1272,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 725, 0, 726,
- 0, 0, 0, 0, 725, 725, 725, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 725, 0, 0, 0, 0, 2348,
- 725, 725, 0, 0, 725, 0, 725, 0, 0, 0,
- 0, 0, 725, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1918, 0, 0, 2361, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 159, 0, 0, 0, 1756, 725, 0, 1272,
- 0, 0, 725, 0, 0, 0, 725, 725, 0, 0,
- 1963, 0, 0, 0, 0, 0, 0, 0, 0, 1084,
- 0, 0, 0, 0, 0, 0, 0, 1990, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2001, 0, 0, 0, 0, 0, 0,
- 2005, 0, 0, 0, 0, 0, 0, 726, 0, 0,
- 0, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 0, 0,
- 0, 0, 0, 195, 0, 0, 1091, 0, 0, 0,
- 0, 0, 0, 2474, 2475, 2476, 0, 0, 0, 0,
- 0, 726, 195, 0, 0, 0, 0, 0, 0, 0,
- 0, 152, 0, 1084, 153, 0, 0, 0, 0, 1091,
- 1876, 0, 0, 1876, 0, 1876, 0, 0, 0, 725,
- 0, 2506, 0, 0, 0, 0, 670, 0, 670, 0,
- 0, 0, 0, 0, 0, 165, 0, 0, 0, 0,
- 0, 0, 177, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1084, 726, 0, 0,
- 0, 2102, 0, 0, 0, 2102, 2102, 726, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1509, 726, 0,
- 726, 0, 0, 185, 0, 0, 0, 0, 670, 0,
- 0, 0, 0, 1508, 0, 725, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 726, 2311, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1510, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 166, 171, 168, 174,
- 175, 176, 178, 180, 181, 182, 183, 0, 0, 0,
- 0, 0, 184, 186, 187, 188, 195, 726, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 2052, 0, 0,
- 0, 0, 0, 0, 0, 95, 0, 0, 1012, 0,
- 0, 0, 952, 1013, 965, 966, 967, 953, 2580, 0,
- 954, 955, 0, 956, 0, 0, 0, 726, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 961, 0, 968,
- 969, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 726, 0, 0, 0, 0, 195, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 726, 0, 726, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3308, 3309, 0,
- 0, 0, 0, 0, 1272, 0, 0, 0, 0, 970,
- 971, 972, 973, 974, 975, 976, 977, 978, 979, 980,
- 981, 982, 983, 984, 985, 986, 987, 988, 989, 990,
- 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000,
- 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010,
- 1011, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1510, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 725, 0, 0, 0, 0,
- 0, 0, 3310, 0, 0, 0, 0, 0, 0, 725,
+ 0, 0, 0, 1967, 0, 728, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 728, 1988, 0, 0, 1992,
+ 0, 0, 0, 0, 0, 1513, 728, 0, 728, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1512, 0, 727,
+ 0, 0, 672, 0, 672, 0, 0, 0, 0, 0,
+ 0, 0, 0, 728, 2319, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1276, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 670, 0, 0, 0, 0,
+ 0, 0, 0, 0, 195, 728, 0, 0, 0, 0,
+ 0, 0, 0, 0, 672, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2891, 0, 0, 0, 1040, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1514, 0, 0, 728, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3311, 3312, 670, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 728,
+ 0, 0, 0, 0, 195, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 728, 0,
+ 728, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 670, 0, 0, 0, 0, 725, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2377, 0, 0, 0, 0, 0, 0, 0,
- 2381, 0, 2384, 725, 0, 2052, 0, 0, 0, 0,
- 725, 0, 0, 0, 725, 725, 0, 0, 0, 725,
- 0, 1510, 0, 0, 2826, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 917, 1508, 725, 0, 2841, 0,
- 921, 0, 0, 0, 918, 919, 0, 0, 1510, 920,
- 922, 1510, 0, 1510, 670, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1935, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 670,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1988, 670, 0, 0, 0,
+ 1276, 1276, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2046, 0, 0, 0, 0, 95, 0,
+ 0, 1016, 0, 0, 0, 956, 1017, 969, 970, 971,
+ 957, 0, 0, 958, 959, 0, 960, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 670, 0, 725, 0, 0, 0, 0, 670,
- 0, 0, 0, 0, 0, 2923, 0, 0, 2014, 2015,
- 670, 670, 670, 670, 670, 670, 670, 0, 0, 0,
+ 0, 727, 965, 0, 972, 973, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 727, 0, 0, 0, 0,
+ 0, 0, 2108, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2361, 0, 0, 0, 0, 0, 0, 2948,
- 0, 0, 725, 1876, 1876, 0, 0, 0, 2953, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2964, 0, 0, 0, 0,
- 0, 0, 0, 2052, 0, 0, 0, 0, 0, 0,
- 2542, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2561, 2562, 0, 0, 2566, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2571, 0, 0, 0,
- 0, 0, 0, 2574, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3320, 3321, 0, 1514, 0, 0, 0, 0,
+ 2901, 0, 0, 0, 974, 975, 976, 977, 978, 979,
+ 980, 981, 982, 983, 984, 985, 986, 987, 988, 989,
+ 990, 991, 992, 993, 994, 995, 996, 997, 998, 999,
+ 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
+ 1010, 1011, 1012, 1013, 1014, 1015, 0, 0, 0, 0,
+ 0, 0, 727, 672, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 2577,
+ 0, 0, 0, 0, 0, 0, 1044, 0, 0, 727,
+ 0, 0, 0, 0, 0, 0, 727, 3322, 0, 0,
+ 727, 727, 0, 0, 0, 727, 0, 0, 0, 0,
+ 672, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1512, 727, 0, 0, 0, 0, 0, 0, 672,
+ 0, 0, 0, 0, 0, 0, 1276, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2102, 0, 0, 0, 725, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 725,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3323, 3324, 0, 0, 1514,
+ 0, 0, 0, 0, 0, 0, 2356, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 725, 2102, 0, 0, 0, 0, 670, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 725, 0,
+ 0, 0, 0, 0, 0, 0, 1514, 0, 0, 1514,
+ 727, 1514, 672, 0, 0, 2369, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 725, 0, 0, 0, 1508, 0, 0, 725,
- 725, 1508, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1941, 1762, 0, 0, 1276, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 672, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1088, 0, 0, 921,
+ 727, 0, 0, 1994, 672, 925, 0, 0, 0, 922,
+ 923, 0, 0, 0, 924, 926, 0, 0, 0, 0,
+ 672, 0, 0, 0, 0, 0, 0, 672, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2020, 2021, 672, 672,
+ 672, 672, 672, 672, 672, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1095, 0, 0, 0, 0, 0, 0,
+ 2482, 2483, 2484, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1510, 0, 0, 0,
+ 1088, 0, 0, 0, 0, 0, 1095, 1882, 0, 0,
+ 1882, 0, 1882, 0, 0, 0, 0, 0, 2514, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1510, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 727, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 727, 0, 0,
+ 0, 0, 0, 1088, 0, 0, 0, 0, 2108, 0,
+ 0, 0, 2108, 2108, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 727, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3257, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 3119, 0, 0, 0,
- 0, 0, 0, 0, 725, 0, 0, 1508, 1272, 0,
- 0, 0, 725, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 727, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1884,
+ 727, 0, 0, 0, 1512, 0, 0, 727, 727, 1512,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3164, 0, 0,
- 0, 0, 0, 0, 3339, 0, 0, 0, 0, 0,
- 0, 1272, 0, 0, 0, 0, 0, 0, 3191, 1884,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1988, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 672, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2588, 0, 0, 0, 0,
+ 3269, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 727, 0, 0, 1512, 0, 0, 0, 0,
+ 727, 0, 0, 0, 1514, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1935, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1060,
- 0, 0, 0, 1084, 0, 0, 0, 0, 0, 0,
- 0, 2361, 0, 0, 1040, 0, 0, 0, 0, 0,
- 725, 0, 0, 0, 0, 0, 0, 2878, 0, 0,
- 0, 670, 0, 0, 0, 0, 0, 0, 1988, 670,
- 0, 670, 0, 670, 2400, 0, 0, 0, 0, 0,
+ 0, 0, 1514, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1276, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3351, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2927, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 3545, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 2976, 2977, 2978,
- 2979, 2980, 2981, 0, 0, 725, 725, 0, 0, 1832,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2052, 2991, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1994, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 2999, 0, 0,
- 0, 0, 0, 0, 725, 725, 725, 725, 0, 0,
+ 727, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 670, 0, 0, 0, 0, 0, 0, 670,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 670,
- 670, 0, 0, 670, 0, 2568, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 670, 0, 0, 0, 0,
- 0, 0, 670, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 670, 0,
+ 0, 0, 0, 1941, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1064,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1044, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2361, 2361, 0, 0, 0, 0,
+ 0, 672, 0, 0, 0, 0, 0, 0, 1994, 672,
+ 0, 672, 0, 672, 2408, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3558, 0, 2836, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2851, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 727, 727, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3609, 3610, 3611, 3612, 0, 0, 0,
- 725, 1510, 725, 1988, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1508, 0, 0, 0, 0, 0, 0,
- 725, 0, 725, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 727, 727, 727, 727, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2933, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 725, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 725, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 725,
+ 0, 2369, 0, 0, 0, 0, 0, 0, 2958, 0,
+ 0, 0, 1882, 1882, 0, 0, 0, 2963, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2974, 0, 0, 0, 0, 0,
+ 0, 0, 672, 0, 0, 0, 0, 0, 0, 672,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 672,
+ 672, 0, 0, 672, 0, 2576, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 672, 0, 0, 0, 0,
+ 0, 0, 672, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 672, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 3686,
- 0, 3686, 0, 0, 0, 0, 0, 0, 0, 0,
- 3262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 3714,
- 0, 3716, 0, 725, 0, 0, 3300, 0, 0, 0,
- 725, 0, 725, 0, 0, 0, 0, 0, 0, 0,
- 3314, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 670, 0, 0, 0, 0, 0,
- 3332, 725, 1935, 3335, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 2361,
+ 0, 727, 2108, 727, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 3881, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1272, 0,
- 0, 670, 0, 0, 0, 0, 670, 0, 0, 0,
+ 0, 0, 0, 0, 1512, 0, 0, 0, 0, 0,
+ 0, 727, 0, 727, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2108, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1514, 0, 1994, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 727, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 727, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 727, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3686, 0, 0, 0, 0, 0, 0, 3686,
- 670, 3686, 0, 0, 0, 0, 0, 2933, 0, 725,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3131, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1276,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2361, 0, 0, 0, 0, 0, 3494, 0, 0, 0,
- 0, 0, 0, 725, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1510, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 670, 670, 670, 670,
- 670, 670, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 727, 0, 0, 0, 0,
+ 0, 0, 727, 0, 727, 0, 0, 0, 0, 0,
+ 1890, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3176, 0,
+ 0, 0, 0, 727, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1276, 0, 0, 0, 0, 0, 0, 3203,
+ 1890, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 670, 670, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 725,
- 0, 0, 0, 0, 0, 0, 670, 0, 0, 725,
- 0, 3555, 0, 0, 0, 0, 0, 0, 0, 1508,
- 725, 0, 725, 0, 0, 0, 0, 0, 0, 0,
- 0, 3570, 0, 0, 3571, 3572, 3573, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 725, 725, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2361, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 725,
- 0, 0, 2361, 0, 0, 0, 0, 3746, 3748, 3747,
- 3811, 3812, 3813, 3814, 3815, 3816, 3817, 796, 0, 0,
+ 0, 0, 0, 0, 0, 0, 672, 0, 0, 0,
+ 0, 0, 0, 0, 1941, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 725,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1088, 0, 0, 0, 0, 0,
+ 0, 0, 2369, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 672, 0, 0, 0, 0, 672, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 725, 0, 0, 0, 0, 4028, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 4036, 0,
- 0, 0, 725, 0, 725, 0, 0, 0, 0, 2361,
- 0, 4044, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 727, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1272, 1272, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 727, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 4094, 0,
- 0, 1060, 0, 670, 0, 0, 0, 0, 0, 0,
+ 0, 0, 672, 0, 0, 0, 0, 0, 0, 2943,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1510, 0, 0, 0, 0, 1510,
- 670, 670, 670, 670, 670, 0, 0, 0, 4036, 0,
- 0, 0, 3207, 0, 0, 0, 0, 0, 1935, 0,
- 670, 0, 0, 670, 3215, 1988, 0, 0, 0, 0,
- 0, 0, 2361, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1832, 0, 4094, 0, 3752, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 670,
- 3760, 3761, 0, 0, 3836, 3835, 3834, 0, 0, 3832,
- 3833, 3831, 0, 0, 0, 1510, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 670, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 670,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 670,
- 0, 0, 670, 0, 3837, 917, 0, 772, 773, 3838,
- 3839, 921, 3840, 775, 776, 918, 919, 0, 770, 774,
- 920, 922, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 727, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 727, 0, 1514, 0, 0, 0, 0,
+ 0, 0, 0, 1512, 727, 0, 727, 0, 672, 672,
+ 672, 672, 672, 672, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1838, 0, 0, 0, 0, 0, 0, 0,
+ 0, 727, 727, 0, 0, 672, 672, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 672, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3743, 3744, 3745,
- 3749, 3750, 3751, 3762, 3809, 3810, 3818, 3820, 873, 3819,
- 3821, 3822, 3823, 3826, 3827, 3828, 3829, 3824, 3825, 3830,
- 3726, 3730, 3727, 3728, 3729, 3741, 3731, 3732, 3733, 3734,
- 3735, 3736, 3737, 3738, 3739, 3740, 3742, 3841, 3842, 3843,
- 3844, 3845, 3846, 3755, 3759, 3758, 3756, 3757, 3753, 3754,
- 3781, 3780, 3782, 3783, 3784, 3785, 3786, 3787, 3789, 3788,
- 3790, 3791, 3792, 3793, 3794, 3795, 3763, 3764, 3767, 3768,
- 3766, 3765, 3769, 3778, 3779, 3770, 3771, 3772, 3773, 3774,
- 3775, 3777, 3776, 3796, 3797, 3798, 3799, 3800, 3802, 3801,
- 3805, 3806, 3804, 3803, 3808, 3807, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 670, 0, 0, 0, 923,
- 0, 924, 0, 0, 928, 0, 0, 0, 930, 929,
- 0, 931, 893, 892, 0, 0, 925, 926, 0, 927,
+ 0, 0, 0, 727, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 670, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 727, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 727, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 670, 0, 0, 4008, 3847, 3848, 3849, 3850, 3851, 3852,
- 3853, 3854, 0, 0, 0, 0, 0, 0, 0, 0,
- 670, 0, 0, 670, 670, 670, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 727, 0, 727, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2369, 2369, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3622, 3623, 3624, 3625,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -2785,4540 +2743,4623 @@ var yyAct = [...]int{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1064, 0, 672, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1514, 0,
+ 0, 0, 0, 1514, 672, 672, 672, 672, 672, 0,
+ 0, 0, 0, 0, 0, 0, 3219, 0, 0, 0,
+ 0, 0, 1941, 0, 672, 0, 0, 672, 3227, 1994,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3700, 0, 3700, 0, 0, 0, 0,
+ 0, 0, 0, 672, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1514,
+ 0, 0, 0, 3728, 0, 3730, 0, 0, 0, 672,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 672, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 672, 0, 0, 672, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2369, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3897,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1276, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1935, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1510, 0, 0, 0, 1935, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3700, 0, 0,
+ 0, 0, 0, 0, 3700, 0, 3700, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2369, 0, 0, 0, 0,
+ 0, 672, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1935, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 672, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3760, 3762,
+ 3761, 3827, 3828, 3829, 3830, 3831, 3832, 3833, 3763, 3764,
+ 798, 0, 0, 0, 0, 0, 672, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 672, 0, 0, 672,
+ 672, 672, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2369, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 2369,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4044, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4052, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2369, 0, 4060, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1276, 1276, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3768, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3776, 3777, 4110, 0, 3852, 3851, 3850,
+ 0, 0, 3848, 3849, 3847, 0, 0, 0, 0, 1941,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1514, 0,
+ 0, 0, 1941, 0, 0, 4052, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3853, 921, 2369,
+ 774, 775, 3854, 3855, 925, 3856, 777, 778, 922, 923,
+ 0, 772, 776, 924, 926, 0, 0, 0, 1838, 0,
+ 4110, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1941, 0,
+ 3757, 3758, 3759, 3765, 3766, 3767, 3778, 3825, 3826, 3834,
+ 3836, 877, 3835, 3837, 3838, 3839, 3842, 3843, 3844, 3845,
+ 3840, 3841, 3846, 3740, 3744, 3741, 3742, 3743, 3755, 3745,
+ 3746, 3747, 3748, 3749, 3750, 3751, 3752, 3753, 3754, 3756,
+ 3857, 3858, 3859, 3860, 3861, 3862, 3771, 3775, 3774, 3772,
+ 3773, 3769, 3770, 3797, 3796, 3798, 3799, 3800, 3801, 3802,
+ 3803, 3805, 3804, 3806, 3807, 3808, 3809, 3810, 3811, 3779,
+ 3780, 3783, 3784, 3782, 3781, 3785, 3794, 3795, 3786, 3787,
+ 3788, 3789, 3790, 3791, 3793, 3792, 3812, 3813, 3814, 3815,
+ 3816, 3818, 3817, 3821, 3822, 3820, 3819, 3824, 3823, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 927, 0, 928, 0, 0, 932, 0, 0,
+ 0, 934, 933, 0, 935, 897, 896, 0, 0, 929,
+ 930, 0, 931, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3863, 3864, 3865,
+ 3866, 3867, 3868, 3869, 3870, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1935, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 670, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 394, 0, 0, 0, 0, 0, 1407, 1393, 525,
- 0, 1335, 1410, 1304, 1323, 1420, 1326, 1329, 1372, 1282,
- 1350, 414, 1320, 1308, 1277, 1315, 1278, 1306, 1337, 270,
- 1303, 1395, 1354, 1409, 364, 267, 1284, 1275, 204, 503,
- 1309, 428, 1325, 203, 1374, 485, 252, 375, 372, 580,
- 282, 273, 269, 250, 317, 383, 426, 515, 420, 1416,
- 368, 1360, 0, 495, 399, 0, 0, 1510, 1339, 1399,
- 1348, 1386, 1334, 1373, 1292, 1359, 1411, 1321, 1369, 1412,
- 323, 248, 325, 202, 411, 496, 286, 0, 0, 0,
- 0, 4068, 948, 0, 0, 0, 4066, 4069, 0, 0,
- 0, 0, 238, 0, 0, 245, 0, 0, 0, 349,
- 358, 357, 338, 339, 341, 343, 348, 355, 361, 1317,
- 1366, 604, 1406, 1318, 1368, 265, 321, 272, 264, 577,
- 1417, 1398, 1281, 1347, 1405, 1342, 1935, 0, 229, 1408,
- 1341, 0, 1371, 0, 1423, 1276, 1362, 0, 1279, 1283,
- 1419, 1403, 1312, 275, 0, 0, 0, 0, 0, 0,
- 0, 1338, 1349, 1383, 1387, 1332, 0, 0, 0, 0,
- 0, 0, 0, 0, 1310, 0, 1358, 0, 0, 0,
- 1288, 1280, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1988, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1336, 0, 0, 0, 0, 1291,
- 0, 1311, 1384, 0, 1274, 297, 1285, 400, 257, 0,
- 451, 1391, 1402, 1333, 622, 1404, 1331, 1330, 1378, 1289,
- 1397, 1324, 363, 1287, 330, 197, 225, 0, 1322, 410,
- 459, 471, 1396, 1307, 1316, 253, 1314, 469, 424, 599,
- 233, 284, 456, 430, 467, 438, 287, 1357, 1376, 468,
- 370, 582, 448, 596, 623, 624, 263, 404, 609, 519,
- 617, 641, 226, 260, 418, 504, 602, 492, 395, 578,
- 579, 329, 491, 295, 201, 367, 629, 224, 477, 369,
- 242, 231, 584, 606, 299, 289, 454, 636, 213, 514,
- 594, 239, 481, 0, 0, 644, 247, 502, 215, 591,
- 501, 391, 326, 327, 214, 0, 455, 268, 293, 0,
- 0, 258, 413, 586, 587, 256, 645, 228, 616, 220,
- 1286, 615, 406, 581, 592, 392, 381, 219, 590, 390,
- 380, 334, 353, 354, 280, 307, 445, 373, 446, 306,
- 308, 402, 401, 403, 207, 603, 0, 208, 0, 497,
- 605, 646, 450, 212, 234, 235, 237, 1302, 279, 283,
- 291, 294, 303, 304, 313, 365, 417, 444, 440, 449,
- 1392, 576, 597, 610, 621, 627, 628, 630, 631, 632,
- 633, 634, 637, 635, 405, 311, 493, 333, 371, 1381,
- 1422, 423, 470, 240, 601, 494, 199, 1296, 1301, 1294,
- 0, 254, 255, 1363, 572, 1297, 1295, 1352, 1353, 1298,
- 1413, 1414, 1415, 1400, 647, 648, 649, 650, 651, 652,
- 653, 654, 655, 656, 657, 658, 659, 660, 661, 662,
- 663, 664, 642, 505, 511, 506, 507, 508, 509, 510,
- 0, 512, 1385, 1290, 0, 1299, 1300, 396, 1394, 588,
- 589, 665, 382, 484, 598, 335, 347, 350, 340, 359,
- 0, 360, 336, 337, 342, 344, 345, 346, 351, 352,
- 356, 362, 249, 210, 388, 397, 575, 312, 216, 217,
- 218, 521, 522, 523, 524, 613, 614, 618, 205, 460,
- 461, 462, 463, 292, 608, 309, 466, 465, 331, 332,
- 377, 447, 537, 539, 550, 554, 556, 558, 564, 567,
- 538, 540, 551, 555, 557, 559, 565, 568, 527, 529,
- 531, 533, 546, 545, 542, 570, 571, 548, 553, 532,
- 544, 549, 562, 569, 566, 526, 530, 534, 543, 561,
- 560, 541, 552, 563, 547, 535, 528, 536, 1356, 196,
- 221, 366, 1418, 452, 288, 643, 612, 482, 607, 206,
- 223, 1293, 262, 1305, 1313, 0, 1319, 1327, 1328, 1340,
- 1343, 1344, 1345, 1346, 1364, 1365, 1367, 1375, 1377, 1380,
- 1382, 1389, 1401, 1421, 198, 200, 209, 222, 232, 236,
- 243, 261, 276, 278, 285, 298, 310, 318, 319, 322,
- 328, 378, 384, 385, 386, 387, 407, 408, 409, 412,
- 415, 416, 419, 421, 422, 425, 429, 433, 434, 435,
- 437, 439, 441, 453, 458, 472, 473, 474, 475, 476,
- 479, 480, 486, 487, 488, 489, 490, 498, 499, 513,
- 583, 585, 600, 619, 625, 478, 301, 302, 442, 443,
- 314, 315, 639, 640, 300, 595, 626, 593, 638, 620,
- 436, 376, 1355, 1361, 379, 281, 305, 320, 1370, 611,
- 500, 227, 464, 290, 251, 1388, 1390, 211, 246, 230,
- 259, 274, 277, 324, 389, 398, 427, 432, 296, 271,
- 244, 457, 241, 483, 516, 517, 518, 520, 393, 266,
- 431, 1351, 1379, 374, 573, 574, 316, 394, 0, 0,
- 0, 0, 0, 1407, 1393, 525, 0, 1335, 1410, 1304,
- 1323, 1420, 1326, 1329, 1372, 1282, 1350, 414, 1320, 1308,
- 1277, 1315, 1278, 1306, 1337, 270, 1303, 1395, 1354, 1409,
- 364, 267, 1284, 1275, 204, 503, 1309, 428, 1325, 203,
- 1374, 485, 252, 375, 372, 580, 282, 273, 269, 250,
- 317, 383, 426, 515, 420, 1416, 368, 1360, 0, 495,
- 399, 0, 0, 0, 1339, 1399, 1348, 1386, 1334, 1373,
- 1292, 1359, 1411, 1321, 1369, 1412, 323, 248, 325, 202,
- 411, 496, 286, 0, 0, 0, 0, 0, 194, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 238, 0,
- 0, 245, 0, 0, 0, 349, 358, 357, 338, 339,
- 341, 343, 348, 355, 361, 1317, 1366, 604, 1406, 1318,
- 1368, 265, 321, 272, 264, 577, 1417, 1398, 1281, 1347,
- 1405, 1342, 0, 0, 229, 1408, 1341, 0, 1371, 0,
- 1423, 1276, 1362, 0, 1279, 1283, 1419, 1403, 1312, 275,
- 0, 0, 0, 0, 0, 0, 0, 1338, 1349, 1383,
- 1387, 1332, 0, 0, 0, 0, 0, 0, 3216, 0,
- 1310, 0, 1358, 0, 0, 0, 1288, 1280, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1336, 0, 0, 0, 0, 1291, 0, 1311, 1384, 0,
- 1274, 297, 1285, 400, 257, 0, 451, 1391, 1402, 1333,
- 622, 1404, 1331, 1330, 1378, 1289, 1397, 1324, 363, 1287,
- 330, 197, 225, 0, 1322, 410, 459, 471, 1396, 1307,
- 1316, 253, 1314, 469, 424, 599, 233, 284, 456, 430,
- 467, 438, 287, 1357, 1376, 468, 370, 582, 448, 596,
- 623, 624, 263, 404, 609, 519, 617, 641, 226, 260,
- 418, 504, 602, 492, 395, 578, 579, 329, 491, 295,
- 201, 367, 629, 224, 477, 369, 242, 231, 584, 606,
- 299, 289, 454, 636, 213, 514, 594, 239, 481, 0,
- 0, 644, 247, 502, 215, 591, 501, 391, 326, 327,
- 214, 0, 455, 268, 293, 0, 0, 258, 413, 586,
- 587, 256, 645, 228, 616, 220, 1286, 615, 406, 581,
- 592, 392, 381, 219, 590, 390, 380, 334, 353, 354,
- 280, 307, 445, 373, 446, 306, 308, 402, 401, 403,
- 207, 603, 0, 208, 0, 497, 605, 646, 450, 212,
- 234, 235, 237, 1302, 279, 283, 291, 294, 303, 304,
- 313, 365, 417, 444, 440, 449, 1392, 576, 597, 610,
- 621, 627, 628, 630, 631, 632, 633, 634, 637, 635,
- 405, 311, 493, 333, 371, 1381, 1422, 423, 470, 240,
- 601, 494, 199, 1296, 1301, 1294, 0, 254, 255, 1363,
- 572, 1297, 1295, 1352, 1353, 1298, 1413, 1414, 1415, 1400,
- 647, 648, 649, 650, 651, 652, 653, 654, 655, 656,
- 657, 658, 659, 660, 661, 662, 663, 664, 642, 505,
- 511, 506, 507, 508, 509, 510, 0, 512, 1385, 1290,
- 0, 1299, 1300, 396, 1394, 588, 589, 665, 382, 484,
- 598, 335, 347, 350, 340, 359, 0, 360, 336, 337,
- 342, 344, 345, 346, 351, 352, 356, 362, 249, 210,
- 388, 397, 575, 312, 216, 217, 218, 521, 522, 523,
- 524, 613, 614, 618, 205, 460, 461, 462, 463, 292,
- 608, 309, 466, 465, 331, 332, 377, 447, 537, 539,
- 550, 554, 556, 558, 564, 567, 538, 540, 551, 555,
- 557, 559, 565, 568, 527, 529, 531, 533, 546, 545,
- 542, 570, 571, 548, 553, 532, 544, 549, 562, 569,
- 566, 526, 530, 534, 543, 561, 560, 541, 552, 563,
- 547, 535, 528, 536, 1356, 196, 221, 366, 1418, 452,
- 288, 643, 612, 482, 607, 206, 223, 1293, 262, 1305,
- 1313, 0, 1319, 1327, 1328, 1340, 1343, 1344, 1345, 1346,
- 1364, 1365, 1367, 1375, 1377, 1380, 1382, 1389, 1401, 1421,
- 198, 200, 209, 222, 232, 236, 243, 261, 276, 278,
- 285, 298, 310, 318, 319, 322, 328, 378, 384, 385,
- 386, 387, 407, 408, 409, 412, 415, 416, 419, 421,
- 422, 425, 429, 433, 434, 435, 437, 439, 441, 453,
- 458, 472, 473, 474, 475, 476, 479, 480, 486, 487,
- 488, 489, 490, 498, 499, 513, 583, 585, 600, 619,
- 625, 478, 301, 302, 442, 443, 314, 315, 639, 640,
- 300, 595, 626, 593, 638, 620, 436, 376, 1355, 1361,
- 379, 281, 305, 320, 1370, 611, 500, 227, 464, 290,
- 251, 1388, 1390, 211, 246, 230, 259, 274, 277, 324,
- 389, 398, 427, 432, 296, 271, 244, 457, 241, 483,
- 516, 517, 518, 520, 393, 266, 431, 1351, 1379, 374,
- 573, 574, 316, 394, 0, 0, 0, 0, 0, 1407,
- 1393, 525, 0, 1335, 1410, 1304, 1323, 1420, 1326, 1329,
- 1372, 1282, 1350, 414, 1320, 1308, 1277, 1315, 1278, 1306,
- 1337, 270, 1303, 1395, 1354, 1409, 364, 267, 1284, 1275,
- 204, 503, 1309, 428, 1325, 203, 1374, 485, 252, 375,
- 372, 580, 282, 273, 269, 250, 317, 383, 426, 515,
- 420, 1416, 368, 1360, 0, 495, 399, 0, 0, 0,
- 1339, 1399, 1348, 1386, 1334, 1373, 1292, 1359, 1411, 1321,
- 1369, 1412, 323, 248, 325, 202, 411, 496, 286, 0,
- 0, 0, 0, 0, 715, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 238, 0, 0, 245, 0, 0,
- 0, 349, 358, 357, 338, 339, 341, 343, 348, 355,
- 361, 1317, 1366, 604, 1406, 1318, 1368, 265, 321, 272,
- 264, 577, 1417, 1398, 1281, 1347, 1405, 1342, 0, 0,
- 229, 1408, 1341, 0, 1371, 0, 1423, 1276, 1362, 0,
- 1279, 1283, 1419, 1403, 1312, 275, 0, 0, 0, 0,
- 0, 0, 0, 1338, 1349, 1383, 1387, 1332, 0, 0,
- 0, 0, 0, 0, 3177, 0, 1310, 0, 1358, 0,
- 0, 0, 1288, 1280, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1336, 0, 0, 0,
- 0, 1291, 0, 1311, 1384, 0, 1274, 297, 1285, 400,
- 257, 0, 451, 1391, 1402, 1333, 622, 1404, 1331, 1330,
- 1378, 1289, 1397, 1324, 363, 1287, 330, 197, 225, 0,
- 1322, 410, 459, 471, 1396, 1307, 1316, 253, 1314, 469,
- 424, 599, 233, 284, 456, 430, 467, 438, 287, 1357,
- 1376, 468, 370, 582, 448, 596, 623, 624, 263, 404,
- 609, 519, 617, 641, 226, 260, 418, 504, 602, 492,
- 395, 578, 579, 329, 491, 295, 201, 367, 629, 224,
- 477, 369, 242, 231, 584, 606, 299, 289, 454, 636,
- 213, 514, 594, 239, 481, 0, 0, 644, 247, 502,
- 215, 591, 501, 391, 326, 327, 214, 0, 455, 268,
- 293, 0, 0, 258, 413, 586, 587, 256, 645, 228,
- 616, 220, 1286, 615, 406, 581, 592, 392, 381, 219,
- 590, 390, 380, 334, 353, 354, 280, 307, 445, 373,
- 446, 306, 308, 402, 401, 403, 207, 603, 0, 208,
- 0, 497, 605, 646, 450, 212, 234, 235, 237, 1302,
- 279, 283, 291, 294, 303, 304, 313, 365, 417, 444,
- 440, 449, 1392, 576, 597, 610, 621, 627, 628, 630,
- 631, 632, 633, 634, 637, 635, 405, 311, 493, 333,
- 371, 1381, 1422, 423, 470, 240, 601, 494, 199, 1296,
- 1301, 1294, 0, 254, 255, 1363, 572, 1297, 1295, 1352,
- 1353, 1298, 1413, 1414, 1415, 1400, 647, 648, 649, 650,
- 651, 652, 653, 654, 655, 656, 657, 658, 659, 660,
- 661, 662, 663, 664, 642, 505, 511, 506, 507, 508,
- 509, 510, 0, 512, 1385, 1290, 0, 1299, 1300, 396,
- 1394, 588, 589, 665, 382, 484, 598, 335, 347, 350,
- 340, 359, 0, 360, 336, 337, 342, 344, 345, 346,
- 351, 352, 356, 362, 249, 210, 388, 397, 575, 312,
- 216, 217, 218, 521, 522, 523, 524, 613, 614, 618,
- 205, 460, 461, 462, 463, 292, 608, 309, 466, 465,
- 331, 332, 377, 447, 537, 539, 550, 554, 556, 558,
- 564, 567, 538, 540, 551, 555, 557, 559, 565, 568,
- 527, 529, 531, 533, 546, 545, 542, 570, 571, 548,
- 553, 532, 544, 549, 562, 569, 566, 526, 530, 534,
- 543, 561, 560, 541, 552, 563, 547, 535, 528, 536,
- 1356, 196, 221, 366, 1418, 452, 288, 643, 612, 482,
- 607, 206, 223, 1293, 262, 1305, 1313, 0, 1319, 1327,
- 1328, 1340, 1343, 1344, 1345, 1346, 1364, 1365, 1367, 1375,
- 1377, 1380, 1382, 1389, 1401, 1421, 198, 200, 209, 222,
- 232, 236, 243, 261, 276, 278, 285, 298, 310, 318,
- 319, 322, 328, 378, 384, 385, 386, 387, 407, 408,
- 409, 412, 415, 416, 419, 421, 422, 425, 429, 433,
- 434, 435, 437, 439, 441, 453, 458, 472, 473, 474,
- 475, 476, 479, 480, 486, 487, 488, 489, 490, 498,
- 499, 513, 583, 585, 600, 619, 625, 478, 301, 302,
- 442, 443, 314, 315, 639, 640, 300, 595, 626, 593,
- 638, 620, 436, 376, 1355, 1361, 379, 281, 305, 320,
- 1370, 611, 500, 227, 464, 290, 251, 1388, 1390, 211,
- 246, 230, 259, 274, 277, 324, 389, 398, 427, 432,
- 296, 271, 244, 457, 241, 483, 516, 517, 518, 520,
- 393, 266, 431, 1351, 1379, 374, 573, 574, 316, 394,
- 0, 0, 0, 0, 0, 1407, 1393, 525, 0, 1335,
- 1410, 1304, 1323, 1420, 1326, 1329, 1372, 1282, 1350, 414,
- 1320, 1308, 1277, 1315, 1278, 1306, 1337, 270, 1303, 1395,
- 1354, 1409, 364, 267, 1284, 1275, 204, 503, 1309, 428,
- 1325, 203, 1374, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 1416, 368, 1360,
- 0, 495, 399, 0, 0, 0, 1339, 1399, 1348, 1386,
- 1334, 1373, 1292, 1359, 1411, 1321, 1369, 1412, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 0,
- 948, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 1317, 1366, 604,
- 1406, 1318, 1368, 265, 321, 272, 264, 577, 1417, 1398,
- 1281, 1347, 1405, 1342, 0, 0, 229, 1408, 1341, 0,
- 1371, 0, 1423, 1276, 1362, 0, 1279, 1283, 1419, 1403,
- 1312, 275, 0, 0, 0, 0, 0, 0, 0, 1338,
- 1349, 1383, 1387, 1332, 0, 0, 0, 0, 0, 0,
- 2379, 0, 1310, 0, 1358, 0, 0, 0, 1288, 1280,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1336, 0, 0, 0, 0, 1291, 0, 1311,
- 1384, 0, 1274, 297, 1285, 400, 257, 0, 451, 1391,
- 1402, 1333, 622, 1404, 1331, 1330, 1378, 1289, 1397, 1324,
- 363, 1287, 330, 197, 225, 0, 1322, 410, 459, 471,
- 1396, 1307, 1316, 253, 1314, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 1357, 1376, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 1286, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 1302, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 1392, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 1381, 1422, 423,
- 470, 240, 601, 494, 199, 1296, 1301, 1294, 0, 254,
- 255, 1363, 572, 1297, 1295, 1352, 1353, 1298, 1413, 1414,
- 1415, 1400, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 1385, 1290, 0, 1299, 1300, 396, 1394, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 1356, 196, 221, 366,
- 1418, 452, 288, 643, 612, 482, 607, 206, 223, 1293,
- 262, 1305, 1313, 0, 1319, 1327, 1328, 1340, 1343, 1344,
- 1345, 1346, 1364, 1365, 1367, 1375, 1377, 1380, 1382, 1389,
- 1401, 1421, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 1355, 1361, 379, 281, 305, 320, 1370, 611, 500, 227,
- 464, 290, 251, 1388, 1390, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 1351,
- 1379, 374, 573, 574, 316, 394, 0, 0, 0, 0,
- 0, 1407, 1393, 525, 0, 1335, 1410, 1304, 1323, 1420,
- 1326, 1329, 1372, 1282, 1350, 414, 1320, 1308, 1277, 1315,
- 1278, 1306, 1337, 270, 1303, 1395, 1354, 1409, 364, 267,
- 1284, 1275, 204, 503, 1309, 428, 1325, 203, 1374, 485,
- 252, 375, 372, 580, 282, 273, 269, 250, 317, 383,
- 426, 515, 420, 1416, 368, 1360, 0, 495, 399, 0,
- 0, 0, 1339, 1399, 1348, 1386, 1334, 1373, 1292, 1359,
- 1411, 1321, 1369, 1412, 323, 248, 325, 202, 411, 496,
- 286, 0, 95, 0, 0, 0, 715, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 238, 0, 0, 245,
- 0, 0, 0, 349, 358, 357, 338, 339, 341, 343,
- 348, 355, 361, 1317, 1366, 604, 1406, 1318, 1368, 265,
- 321, 272, 264, 577, 1417, 1398, 1281, 1347, 1405, 1342,
- 0, 0, 229, 1408, 1341, 0, 1371, 0, 1423, 1276,
- 1362, 0, 1279, 1283, 1419, 1403, 1312, 275, 0, 0,
- 0, 0, 0, 0, 0, 1338, 1349, 1383, 1387, 1332,
- 0, 0, 0, 0, 0, 0, 0, 0, 1310, 0,
- 1358, 0, 0, 0, 1288, 1280, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1336, 0,
- 0, 0, 0, 1291, 0, 1311, 1384, 0, 1274, 297,
- 1285, 400, 257, 0, 451, 1391, 1402, 1333, 622, 1404,
- 1331, 1330, 1378, 1289, 1397, 1324, 363, 1287, 330, 197,
- 225, 0, 1322, 410, 459, 471, 1396, 1307, 1316, 253,
- 1314, 469, 424, 599, 233, 284, 456, 430, 467, 438,
- 287, 1357, 1376, 468, 370, 582, 448, 596, 623, 624,
- 263, 404, 609, 519, 617, 641, 226, 260, 418, 504,
- 602, 492, 395, 578, 579, 329, 491, 295, 201, 367,
- 629, 224, 477, 369, 242, 231, 584, 606, 299, 289,
- 454, 636, 213, 514, 594, 239, 481, 0, 0, 644,
- 247, 502, 215, 591, 501, 391, 326, 327, 214, 0,
- 455, 268, 293, 0, 0, 258, 413, 586, 587, 256,
- 645, 228, 616, 220, 1286, 615, 406, 581, 592, 392,
- 381, 219, 590, 390, 380, 334, 353, 354, 280, 307,
- 445, 373, 446, 306, 308, 402, 401, 403, 207, 603,
- 0, 208, 0, 497, 605, 646, 450, 212, 234, 235,
- 237, 1302, 279, 283, 291, 294, 303, 304, 313, 365,
- 417, 444, 440, 449, 1392, 576, 597, 610, 621, 627,
- 628, 630, 631, 632, 633, 634, 637, 635, 405, 311,
- 493, 333, 371, 1381, 1422, 423, 470, 240, 601, 494,
- 199, 1296, 1301, 1294, 0, 254, 255, 1363, 572, 1297,
- 1295, 1352, 1353, 1298, 1413, 1414, 1415, 1400, 647, 648,
- 649, 650, 651, 652, 653, 654, 655, 656, 657, 658,
- 659, 660, 661, 662, 663, 664, 642, 505, 511, 506,
- 507, 508, 509, 510, 0, 512, 1385, 1290, 0, 1299,
- 1300, 396, 1394, 588, 589, 665, 382, 484, 598, 335,
- 347, 350, 340, 359, 0, 360, 336, 337, 342, 344,
- 345, 346, 351, 352, 356, 362, 249, 210, 388, 397,
- 575, 312, 216, 217, 218, 521, 522, 523, 524, 613,
- 614, 618, 205, 460, 461, 462, 463, 292, 608, 309,
- 466, 465, 331, 332, 377, 447, 537, 539, 550, 554,
- 556, 558, 564, 567, 538, 540, 551, 555, 557, 559,
- 565, 568, 527, 529, 531, 533, 546, 545, 542, 570,
- 571, 548, 553, 532, 544, 549, 562, 569, 566, 526,
- 530, 534, 543, 561, 560, 541, 552, 563, 547, 535,
- 528, 536, 1356, 196, 221, 366, 1418, 452, 288, 643,
- 612, 482, 607, 206, 223, 1293, 262, 1305, 1313, 0,
- 1319, 1327, 1328, 1340, 1343, 1344, 1345, 1346, 1364, 1365,
- 1367, 1375, 1377, 1380, 1382, 1389, 1401, 1421, 198, 200,
- 209, 222, 232, 236, 243, 261, 276, 278, 285, 298,
- 310, 318, 319, 322, 328, 378, 384, 385, 386, 387,
- 407, 408, 409, 412, 415, 416, 419, 421, 422, 425,
- 429, 433, 434, 435, 437, 439, 441, 453, 458, 472,
- 473, 474, 475, 476, 479, 480, 486, 487, 488, 489,
- 490, 498, 499, 513, 583, 585, 600, 619, 625, 478,
- 301, 302, 442, 443, 314, 315, 639, 640, 300, 595,
- 626, 593, 638, 620, 436, 376, 1355, 1361, 379, 281,
- 305, 320, 1370, 611, 500, 227, 464, 290, 251, 1388,
- 1390, 211, 246, 230, 259, 274, 277, 324, 389, 398,
- 427, 432, 296, 271, 244, 457, 241, 483, 516, 517,
- 518, 520, 393, 266, 431, 1351, 1379, 374, 573, 574,
- 316, 394, 0, 0, 0, 0, 0, 1407, 1393, 525,
- 0, 1335, 1410, 1304, 1323, 1420, 1326, 1329, 1372, 1282,
- 1350, 414, 1320, 1308, 1277, 1315, 1278, 1306, 1337, 270,
- 1303, 1395, 1354, 1409, 364, 267, 1284, 1275, 204, 503,
- 1309, 428, 1325, 203, 1374, 485, 252, 375, 372, 580,
- 282, 273, 269, 250, 317, 383, 426, 515, 420, 1416,
- 368, 1360, 0, 495, 399, 0, 0, 0, 1339, 1399,
- 1348, 1386, 1334, 1373, 1292, 1359, 1411, 1321, 1369, 1412,
- 323, 248, 325, 202, 411, 496, 286, 0, 0, 0,
- 0, 0, 194, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 238, 0, 0, 245, 0, 0, 0, 349,
- 358, 357, 338, 339, 341, 343, 348, 355, 361, 1317,
- 1366, 604, 1406, 1318, 1368, 265, 321, 272, 264, 577,
- 1417, 1398, 1281, 1347, 1405, 1342, 0, 0, 229, 1408,
- 1341, 0, 1371, 0, 1423, 1276, 1362, 0, 1279, 1283,
- 1419, 1403, 1312, 275, 0, 0, 0, 0, 0, 0,
- 0, 1338, 1349, 1383, 1387, 1332, 0, 0, 0, 0,
- 0, 0, 0, 0, 1310, 0, 1358, 0, 0, 0,
- 1288, 1280, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1336, 0, 0, 0, 0, 1291,
- 0, 1311, 1384, 0, 1274, 297, 1285, 400, 257, 0,
- 451, 1391, 1402, 1333, 622, 1404, 1331, 1330, 1378, 1289,
- 1397, 1324, 363, 1287, 330, 197, 225, 0, 1322, 410,
- 459, 471, 1396, 1307, 1316, 253, 1314, 469, 424, 599,
- 233, 284, 456, 430, 467, 438, 287, 1357, 1376, 468,
- 370, 582, 448, 596, 623, 624, 263, 404, 609, 519,
- 617, 641, 226, 260, 418, 504, 602, 492, 395, 578,
- 579, 329, 491, 295, 201, 367, 629, 224, 477, 369,
- 242, 231, 584, 606, 299, 289, 454, 636, 213, 514,
- 594, 239, 481, 0, 0, 644, 247, 502, 215, 591,
- 501, 391, 326, 327, 214, 0, 455, 268, 293, 0,
- 0, 258, 413, 586, 587, 256, 645, 228, 616, 220,
- 1286, 615, 406, 581, 592, 392, 381, 219, 590, 390,
- 380, 334, 353, 354, 280, 307, 445, 373, 446, 306,
- 308, 402, 401, 403, 207, 603, 0, 208, 0, 497,
- 605, 646, 450, 212, 234, 235, 237, 1302, 279, 283,
- 291, 294, 303, 304, 313, 365, 417, 444, 440, 449,
- 1392, 576, 597, 610, 621, 627, 628, 630, 631, 632,
- 633, 634, 637, 635, 405, 311, 493, 333, 371, 1381,
- 1422, 423, 470, 240, 601, 494, 199, 1296, 1301, 1294,
- 0, 254, 255, 1363, 572, 1297, 1295, 1352, 1353, 1298,
- 1413, 1414, 1415, 1400, 647, 648, 649, 650, 651, 652,
- 653, 654, 655, 656, 657, 658, 659, 660, 661, 662,
- 663, 664, 642, 505, 511, 506, 507, 508, 509, 510,
- 0, 512, 1385, 1290, 0, 1299, 1300, 396, 1394, 588,
- 589, 665, 382, 484, 598, 335, 347, 350, 340, 359,
- 0, 360, 336, 337, 342, 344, 345, 346, 351, 352,
- 356, 362, 249, 210, 388, 397, 575, 312, 216, 217,
- 218, 521, 522, 523, 524, 613, 614, 618, 205, 460,
- 461, 462, 463, 292, 608, 309, 466, 465, 331, 332,
- 377, 447, 537, 539, 550, 554, 556, 558, 564, 567,
- 538, 540, 551, 555, 557, 559, 565, 568, 527, 529,
- 531, 533, 546, 545, 542, 570, 571, 548, 553, 532,
- 544, 549, 562, 569, 566, 526, 530, 534, 543, 561,
- 560, 541, 552, 563, 547, 535, 528, 536, 1356, 196,
- 221, 366, 1418, 452, 288, 643, 612, 482, 607, 206,
- 223, 1293, 262, 1305, 1313, 0, 1319, 1327, 1328, 1340,
- 1343, 1344, 1345, 1346, 1364, 1365, 1367, 1375, 1377, 1380,
- 1382, 1389, 1401, 1421, 198, 200, 209, 222, 232, 236,
- 243, 261, 276, 278, 285, 298, 310, 318, 319, 322,
- 328, 378, 384, 385, 386, 387, 407, 408, 409, 412,
- 415, 416, 419, 421, 422, 425, 429, 433, 434, 435,
- 437, 439, 441, 453, 458, 472, 473, 474, 475, 476,
- 479, 480, 486, 487, 488, 489, 490, 498, 499, 513,
- 583, 585, 600, 619, 625, 478, 301, 302, 442, 443,
- 314, 315, 639, 640, 300, 595, 626, 593, 638, 620,
- 436, 376, 1355, 1361, 379, 281, 305, 320, 1370, 611,
- 500, 227, 464, 290, 251, 1388, 1390, 211, 246, 230,
- 259, 274, 277, 324, 389, 398, 427, 432, 296, 271,
- 244, 457, 241, 483, 516, 517, 518, 520, 393, 266,
- 431, 1351, 1379, 374, 573, 574, 316, 394, 0, 0,
- 0, 0, 0, 1407, 1393, 525, 0, 1335, 1410, 1304,
- 1323, 1420, 1326, 1329, 1372, 1282, 1350, 414, 1320, 1308,
- 1277, 1315, 1278, 1306, 1337, 270, 1303, 1395, 1354, 1409,
- 364, 267, 1284, 1275, 204, 503, 1309, 428, 1325, 203,
- 1374, 485, 252, 375, 372, 580, 282, 273, 269, 250,
- 317, 383, 426, 515, 420, 1416, 368, 1360, 0, 495,
- 399, 0, 0, 0, 1339, 1399, 1348, 1386, 1334, 1373,
- 1292, 1359, 1411, 1321, 1369, 1412, 323, 248, 325, 202,
- 411, 496, 286, 0, 0, 0, 0, 0, 715, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 238, 0,
- 0, 245, 0, 0, 0, 349, 358, 357, 338, 339,
- 341, 343, 348, 355, 361, 1317, 1366, 604, 1406, 1318,
- 1368, 265, 321, 272, 264, 577, 1417, 1398, 1281, 1347,
- 1405, 1342, 0, 0, 229, 1408, 1341, 0, 1371, 0,
- 1423, 1276, 1362, 0, 1279, 1283, 1419, 1403, 1312, 275,
- 0, 0, 0, 0, 0, 0, 0, 1338, 1349, 1383,
- 1387, 1332, 0, 0, 0, 0, 0, 0, 0, 0,
- 1310, 0, 1358, 0, 0, 0, 1288, 1280, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1336, 0, 0, 0, 0, 1291, 0, 1311, 1384, 0,
- 1274, 297, 1285, 400, 257, 0, 451, 1391, 1402, 1333,
- 622, 1404, 1331, 1330, 1378, 1289, 1397, 1324, 363, 1287,
- 330, 197, 225, 0, 1322, 410, 459, 471, 1396, 1307,
- 1316, 253, 1314, 469, 424, 599, 233, 284, 456, 430,
- 467, 438, 287, 1357, 1376, 468, 370, 582, 448, 596,
- 623, 624, 263, 404, 609, 519, 617, 641, 226, 260,
- 418, 504, 602, 492, 395, 578, 579, 329, 491, 295,
- 201, 367, 629, 224, 477, 369, 242, 231, 584, 606,
- 299, 289, 454, 636, 213, 514, 594, 239, 481, 0,
- 0, 644, 247, 502, 215, 591, 501, 391, 326, 327,
- 214, 0, 455, 268, 293, 0, 0, 258, 413, 586,
- 587, 256, 645, 228, 616, 220, 1286, 615, 406, 581,
- 592, 392, 381, 219, 590, 390, 380, 334, 353, 354,
- 280, 307, 445, 373, 446, 306, 308, 402, 401, 403,
- 207, 603, 0, 208, 0, 497, 605, 646, 450, 212,
- 234, 235, 237, 1302, 279, 283, 291, 294, 303, 304,
- 313, 365, 417, 444, 440, 449, 1392, 576, 597, 610,
- 621, 627, 628, 630, 631, 632, 633, 634, 637, 635,
- 405, 311, 493, 333, 371, 1381, 1422, 423, 470, 240,
- 601, 494, 199, 1296, 1301, 1294, 0, 254, 255, 1363,
- 572, 1297, 1295, 1352, 1353, 1298, 1413, 1414, 1415, 1400,
- 647, 648, 649, 650, 651, 652, 653, 654, 655, 656,
- 657, 658, 659, 660, 661, 662, 663, 664, 642, 505,
- 511, 506, 507, 508, 509, 510, 0, 512, 1385, 1290,
- 0, 1299, 1300, 396, 1394, 588, 589, 665, 382, 484,
- 598, 335, 347, 350, 340, 359, 0, 360, 336, 337,
- 342, 344, 345, 346, 351, 352, 356, 362, 249, 210,
- 388, 397, 575, 312, 216, 217, 218, 521, 522, 523,
- 524, 613, 614, 618, 205, 460, 461, 462, 463, 292,
- 608, 309, 466, 465, 331, 332, 377, 447, 537, 539,
- 550, 554, 556, 558, 564, 567, 538, 540, 551, 555,
- 557, 559, 565, 568, 527, 529, 531, 533, 546, 545,
- 542, 570, 571, 548, 553, 532, 544, 549, 562, 569,
- 566, 526, 530, 534, 543, 561, 560, 541, 552, 563,
- 547, 535, 528, 536, 1356, 196, 221, 366, 1418, 452,
- 288, 643, 612, 482, 607, 206, 223, 1293, 262, 1305,
- 1313, 0, 1319, 1327, 1328, 1340, 1343, 1344, 1345, 1346,
- 1364, 1365, 1367, 1375, 1377, 1380, 1382, 1389, 1401, 1421,
- 198, 200, 209, 222, 232, 236, 243, 261, 276, 278,
- 285, 298, 310, 318, 319, 322, 328, 378, 384, 385,
- 386, 387, 407, 408, 409, 412, 415, 416, 419, 421,
- 422, 425, 429, 433, 434, 435, 437, 439, 441, 453,
- 458, 472, 473, 474, 475, 476, 479, 480, 486, 487,
- 488, 489, 490, 498, 499, 513, 583, 585, 600, 619,
- 625, 478, 301, 302, 442, 443, 314, 315, 639, 640,
- 300, 595, 626, 593, 638, 620, 436, 376, 1355, 1361,
- 379, 281, 305, 320, 1370, 611, 500, 227, 464, 290,
- 251, 1388, 1390, 211, 246, 230, 259, 274, 277, 324,
- 389, 398, 427, 432, 296, 271, 244, 457, 241, 483,
- 516, 517, 518, 520, 393, 266, 431, 1351, 1379, 374,
- 573, 574, 316, 394, 0, 0, 0, 0, 0, 1407,
- 1393, 525, 0, 1335, 1410, 1304, 1323, 1420, 1326, 1329,
- 1372, 1282, 1350, 414, 1320, 1308, 1277, 1315, 1278, 1306,
- 1337, 270, 1303, 1395, 1354, 1409, 364, 267, 1284, 1275,
- 204, 503, 1309, 428, 1325, 203, 1374, 485, 252, 375,
- 372, 580, 282, 273, 269, 250, 317, 383, 426, 515,
- 420, 1416, 368, 1360, 0, 495, 399, 0, 0, 0,
- 1339, 1399, 1348, 1386, 1334, 1373, 1292, 1359, 1411, 1321,
- 1369, 1412, 323, 248, 325, 202, 411, 496, 286, 0,
- 0, 0, 0, 0, 948, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 238, 0, 0, 245, 0, 0,
- 0, 349, 358, 357, 338, 339, 341, 343, 348, 355,
- 361, 1317, 1366, 604, 1406, 1318, 1368, 265, 321, 272,
- 264, 577, 1417, 1398, 1281, 1347, 1405, 1342, 0, 0,
- 229, 1408, 1341, 0, 1371, 0, 1423, 1276, 1362, 0,
- 1279, 1283, 1419, 1403, 1312, 275, 0, 0, 0, 0,
- 0, 0, 0, 1338, 1349, 1383, 1387, 1332, 0, 0,
- 0, 0, 0, 0, 0, 0, 1310, 0, 1358, 0,
- 0, 0, 1288, 1280, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1336, 0, 0, 0,
- 0, 1291, 0, 1311, 1384, 0, 1274, 297, 1285, 400,
- 257, 0, 451, 1391, 1402, 1333, 622, 1404, 1331, 1330,
- 1378, 1289, 1397, 1324, 363, 1287, 330, 197, 225, 0,
- 1322, 410, 459, 471, 1396, 1307, 1316, 253, 1314, 469,
- 424, 599, 233, 284, 456, 430, 467, 438, 287, 1357,
- 1376, 468, 370, 582, 448, 596, 623, 624, 263, 404,
- 609, 519, 617, 641, 226, 260, 418, 504, 602, 492,
- 395, 578, 579, 329, 491, 295, 201, 367, 629, 224,
- 477, 369, 242, 231, 584, 606, 299, 289, 454, 636,
- 213, 514, 594, 239, 481, 0, 0, 644, 247, 502,
- 215, 591, 501, 391, 326, 327, 214, 0, 455, 268,
- 293, 0, 0, 258, 413, 586, 587, 256, 645, 228,
- 616, 220, 1286, 615, 406, 581, 592, 392, 381, 219,
- 590, 390, 380, 334, 353, 354, 280, 307, 445, 373,
- 446, 306, 308, 402, 401, 403, 207, 603, 0, 208,
- 0, 497, 605, 646, 450, 212, 234, 235, 237, 1302,
- 279, 283, 291, 294, 303, 304, 313, 365, 417, 444,
- 440, 449, 1392, 576, 597, 610, 621, 627, 628, 630,
- 631, 632, 633, 634, 637, 635, 405, 311, 493, 333,
- 371, 1381, 1422, 423, 470, 240, 601, 494, 199, 1296,
- 1301, 1294, 0, 254, 255, 1363, 572, 1297, 1295, 1352,
- 1353, 1298, 1413, 1414, 1415, 1400, 647, 648, 649, 650,
- 651, 652, 653, 654, 655, 656, 657, 658, 659, 660,
- 661, 662, 663, 664, 642, 505, 511, 506, 507, 508,
- 509, 510, 0, 512, 1385, 1290, 0, 1299, 1300, 396,
- 1394, 588, 589, 665, 382, 484, 598, 335, 347, 350,
- 340, 359, 0, 360, 336, 337, 342, 344, 345, 346,
- 351, 352, 356, 362, 249, 210, 388, 397, 575, 312,
- 216, 217, 218, 521, 522, 523, 524, 613, 614, 618,
- 205, 460, 461, 462, 463, 292, 608, 309, 466, 465,
- 331, 332, 377, 447, 537, 539, 550, 554, 556, 558,
- 564, 567, 538, 540, 551, 555, 557, 559, 565, 568,
- 527, 529, 531, 533, 546, 545, 542, 570, 571, 548,
- 553, 532, 544, 549, 562, 569, 566, 526, 530, 534,
- 543, 561, 560, 541, 552, 563, 547, 535, 528, 536,
- 1356, 196, 221, 366, 1418, 452, 288, 643, 612, 482,
- 607, 206, 223, 1293, 262, 1305, 1313, 0, 1319, 1327,
- 1328, 1340, 1343, 1344, 1345, 1346, 1364, 1365, 1367, 1375,
- 1377, 1380, 1382, 1389, 1401, 1421, 198, 200, 209, 222,
- 232, 236, 243, 261, 276, 278, 285, 298, 310, 318,
- 319, 322, 328, 378, 384, 385, 386, 387, 407, 408,
- 409, 412, 415, 416, 419, 421, 422, 425, 429, 433,
- 434, 435, 437, 439, 441, 453, 458, 472, 473, 474,
- 475, 476, 479, 480, 486, 487, 488, 489, 490, 498,
- 499, 513, 583, 585, 600, 619, 625, 478, 301, 302,
- 442, 443, 314, 315, 639, 640, 300, 595, 626, 593,
- 638, 620, 436, 376, 1355, 1361, 379, 281, 305, 320,
- 1370, 611, 500, 227, 464, 290, 251, 1388, 1390, 211,
- 246, 230, 259, 274, 277, 324, 389, 398, 427, 432,
- 296, 271, 244, 457, 241, 483, 516, 517, 518, 520,
- 393, 266, 431, 1351, 1379, 374, 573, 574, 316, 394,
- 0, 0, 0, 0, 0, 0, 0, 525, 0, 768,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 755, 0, 0, 0, 270, 760, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 767, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 762, 763,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 95, 0, 0, 1012,
- 948, 739, 914, 952, 1013, 965, 966, 967, 953, 0,
- 238, 954, 955, 245, 956, 0, 913, 798, 800, 799,
- 863, 864, 865, 866, 867, 868, 869, 796, 961, 604,
- 968, 969, 0, 265, 321, 272, 264, 577, 0, 0,
- 2201, 2202, 2203, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 735, 752, 0, 766, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 749, 750,
- 0, 0, 0, 0, 908, 0, 751, 0, 0, 759,
- 970, 971, 972, 973, 974, 975, 976, 977, 978, 979,
- 980, 981, 982, 983, 984, 985, 986, 987, 988, 989,
- 990, 991, 992, 993, 994, 995, 996, 997, 998, 999,
- 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
- 1010, 1011, 761, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 907,
- 0, 0, 622, 0, 0, 905, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 958, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 959, 960, 256, 645, 804, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 812, 813, 280, 307, 889, 888, 887, 306, 308, 885,
- 886, 884, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 895, 917, 906, 772, 773, 896,
- 897, 921, 898, 775, 776, 918, 919, 769, 770, 774,
- 920, 922, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 909, 758, 757, 0, 764, 765, 0, 794, 795, 797,
- 801, 802, 803, 814, 861, 862, 870, 872, 873, 871,
- 874, 875, 876, 879, 880, 881, 882, 877, 878, 883,
- 777, 781, 778, 779, 780, 792, 782, 783, 784, 785,
- 786, 787, 788, 789, 790, 791, 793, 932, 933, 934,
- 935, 936, 937, 807, 811, 810, 808, 809, 805, 806,
- 833, 832, 834, 835, 836, 837, 838, 839, 841, 840,
- 842, 843, 844, 845, 846, 847, 815, 816, 819, 820,
- 818, 817, 821, 830, 831, 822, 823, 824, 825, 826,
- 827, 829, 828, 848, 849, 850, 851, 852, 854, 853,
- 857, 858, 856, 855, 860, 859, 756, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 923,
- 262, 924, 0, 0, 928, 0, 0, 0, 930, 929,
- 0, 931, 893, 892, 0, 0, 925, 926, 0, 927,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 938, 939, 940, 941, 942, 943,
- 944, 945, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 963, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 768,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 755, 0, 0, 0, 270, 760, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 767, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 762, 763,
- 0, 0, 0, 0, 0, 0, 2408, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 95, 0, 0, 1012,
- 948, 739, 914, 952, 1013, 965, 966, 967, 953, 0,
- 238, 954, 955, 245, 956, 0, 913, 798, 800, 799,
- 863, 864, 865, 866, 867, 868, 869, 796, 961, 604,
- 968, 969, 2409, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 735, 752, 0, 766, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 749, 750,
- 0, 0, 0, 0, 908, 0, 751, 0, 0, 759,
- 970, 971, 972, 973, 974, 975, 976, 977, 978, 979,
- 980, 981, 982, 983, 984, 985, 986, 987, 988, 989,
- 990, 991, 992, 993, 994, 995, 996, 997, 998, 999,
- 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
- 1010, 1011, 761, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 907,
- 0, 0, 622, 0, 0, 905, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 958, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 959, 960, 256, 645, 804, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 812, 813, 280, 307, 889, 888, 887, 306, 308, 885,
- 886, 884, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 895, 917, 906, 772, 773, 896,
- 897, 921, 898, 775, 776, 918, 919, 769, 770, 774,
- 920, 922, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 909, 758, 757, 0, 764, 765, 0, 794, 795, 797,
- 801, 802, 803, 814, 861, 862, 870, 872, 873, 871,
- 874, 875, 876, 879, 880, 881, 882, 877, 878, 883,
- 777, 781, 778, 779, 780, 792, 782, 783, 784, 785,
- 786, 787, 788, 789, 790, 791, 793, 932, 933, 934,
- 935, 936, 937, 807, 811, 810, 808, 809, 805, 806,
- 833, 832, 834, 835, 836, 837, 838, 839, 841, 840,
- 842, 843, 844, 845, 846, 847, 815, 816, 819, 820,
- 818, 817, 821, 830, 831, 822, 823, 824, 825, 826,
- 827, 829, 828, 848, 849, 850, 851, 852, 854, 853,
- 857, 858, 856, 855, 860, 859, 756, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 923,
- 262, 924, 0, 0, 928, 0, 0, 0, 930, 929,
- 0, 931, 893, 892, 0, 0, 925, 926, 0, 927,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 938, 939, 940, 941, 942, 943,
- 944, 945, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 963, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 86, 525, 0, 768,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 755, 0, 0, 0, 270, 760, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 767, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 762, 763,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 95, 0, 0, 1012,
- 948, 739, 914, 952, 1013, 965, 966, 967, 953, 0,
- 238, 954, 955, 245, 956, 0, 913, 798, 800, 799,
- 863, 864, 865, 866, 867, 868, 869, 796, 961, 604,
- 968, 969, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 735, 752, 0, 766, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 749, 750,
- 0, 0, 0, 0, 908, 0, 751, 0, 0, 759,
- 970, 971, 972, 973, 974, 975, 976, 977, 978, 979,
- 980, 981, 982, 983, 984, 985, 986, 987, 988, 989,
- 990, 991, 992, 993, 994, 995, 996, 997, 998, 999,
- 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
- 1010, 1011, 761, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 907,
- 0, 0, 622, 0, 0, 905, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 958, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 959, 960, 256, 645, 804, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 812, 813, 280, 307, 889, 888, 887, 306, 308, 885,
- 886, 884, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 895, 917, 906, 772, 773, 896,
- 897, 921, 898, 775, 776, 918, 919, 769, 770, 774,
- 920, 922, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 909, 758, 757, 0, 764, 765, 0, 794, 795, 797,
- 801, 802, 803, 814, 861, 862, 870, 872, 873, 871,
- 874, 875, 876, 879, 880, 881, 882, 877, 878, 883,
- 777, 781, 778, 779, 780, 792, 782, 783, 784, 785,
- 786, 787, 788, 789, 790, 791, 793, 932, 933, 934,
- 935, 936, 937, 807, 811, 810, 808, 809, 805, 806,
- 833, 832, 834, 835, 836, 837, 838, 839, 841, 840,
- 842, 843, 844, 845, 846, 847, 815, 816, 819, 820,
- 818, 817, 821, 830, 831, 822, 823, 824, 825, 826,
- 827, 829, 828, 848, 849, 850, 851, 852, 854, 853,
- 857, 858, 856, 855, 860, 859, 756, 196, 221, 366,
- 94, 452, 288, 643, 612, 482, 607, 206, 223, 923,
- 262, 924, 0, 0, 928, 0, 0, 0, 930, 929,
- 0, 931, 893, 892, 0, 0, 925, 926, 0, 927,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 938, 939, 940, 941, 942, 943,
- 944, 945, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 963, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 768,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 755, 0, 0, 0, 270, 760, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 767, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 762, 763,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 95, 0, 0, 1012,
- 948, 739, 914, 952, 1013, 965, 966, 967, 953, 0,
- 238, 954, 955, 245, 956, 0, 913, 798, 800, 799,
- 863, 864, 865, 866, 867, 868, 869, 796, 961, 604,
- 968, 969, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 735, 752, 0, 766, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 749, 750,
- 0, 0, 0, 0, 908, 0, 751, 0, 0, 759,
- 970, 971, 972, 973, 974, 975, 976, 977, 978, 979,
- 980, 981, 982, 983, 984, 985, 986, 987, 988, 989,
- 990, 991, 992, 993, 994, 995, 996, 997, 998, 999,
- 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
- 1010, 1011, 761, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 907,
- 0, 0, 622, 0, 0, 905, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 958, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 4054, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 959, 960, 256, 645, 804, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 812, 813, 280, 307, 889, 888, 887, 306, 308, 885,
- 886, 884, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 895, 917, 906, 772, 773, 896,
- 897, 921, 898, 775, 776, 918, 919, 769, 770, 774,
- 920, 922, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 909, 758, 757, 0, 764, 765, 0, 794, 795, 797,
- 801, 802, 803, 814, 861, 862, 870, 872, 873, 871,
- 874, 875, 876, 879, 880, 881, 882, 877, 878, 883,
- 777, 781, 778, 779, 780, 792, 782, 783, 784, 785,
- 786, 787, 788, 789, 790, 791, 793, 932, 933, 934,
- 935, 936, 937, 807, 811, 810, 808, 809, 805, 806,
- 833, 832, 834, 835, 836, 837, 838, 839, 841, 840,
- 842, 843, 844, 845, 846, 847, 815, 816, 819, 820,
- 818, 817, 821, 830, 831, 822, 823, 824, 825, 826,
- 827, 829, 828, 848, 849, 850, 851, 852, 854, 853,
- 857, 858, 856, 855, 860, 859, 756, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 923,
- 262, 924, 0, 0, 928, 0, 0, 0, 930, 929,
- 0, 931, 893, 892, 0, 0, 925, 926, 0, 927,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 938, 939, 940, 941, 942, 943,
- 944, 945, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 963, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 768,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 755, 0, 0, 0, 270, 760, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 767, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 762, 763,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 95, 0, 1730, 1012,
- 948, 739, 914, 952, 1013, 965, 966, 967, 953, 0,
- 238, 954, 955, 245, 956, 0, 913, 798, 800, 799,
- 863, 864, 865, 866, 867, 868, 869, 796, 961, 604,
- 968, 969, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 735, 752, 0, 766, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 749, 750,
- 0, 0, 0, 0, 908, 0, 751, 0, 0, 759,
- 970, 971, 972, 973, 974, 975, 976, 977, 978, 979,
- 980, 981, 982, 983, 984, 985, 986, 987, 988, 989,
- 990, 991, 992, 993, 994, 995, 996, 997, 998, 999,
- 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
- 1010, 1011, 761, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 907,
- 0, 0, 622, 0, 0, 905, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 958, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 959, 960, 256, 645, 804, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 812, 813, 280, 307, 889, 888, 887, 306, 308, 885,
- 886, 884, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 895, 917, 906, 772, 773, 896,
- 897, 921, 898, 775, 776, 918, 919, 769, 770, 774,
- 920, 922, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 909, 758, 757, 0, 764, 765, 0, 794, 795, 797,
- 801, 802, 803, 814, 861, 862, 870, 872, 873, 871,
- 874, 875, 876, 879, 880, 881, 882, 877, 878, 883,
- 777, 781, 778, 779, 780, 792, 782, 783, 784, 785,
- 786, 787, 788, 789, 790, 791, 793, 932, 933, 934,
- 935, 936, 937, 807, 811, 810, 808, 809, 805, 806,
- 833, 832, 834, 835, 836, 837, 838, 839, 841, 840,
- 842, 843, 844, 845, 846, 847, 815, 816, 819, 820,
- 818, 817, 821, 830, 831, 822, 823, 824, 825, 826,
- 827, 829, 828, 848, 849, 850, 851, 852, 854, 853,
- 857, 858, 856, 855, 860, 859, 756, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 923,
- 262, 924, 0, 0, 928, 0, 0, 0, 930, 929,
- 0, 931, 893, 892, 0, 0, 925, 926, 0, 927,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 938, 939, 940, 941, 942, 943,
- 944, 945, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 963, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 768,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 755, 0, 0, 0, 270, 760, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 767, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 762, 763,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 95, 0, 0, 1012,
- 948, 739, 914, 952, 1013, 965, 966, 967, 953, 0,
- 238, 954, 955, 245, 956, 0, 913, 798, 800, 799,
- 863, 864, 865, 866, 867, 868, 869, 796, 961, 604,
- 968, 969, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 735, 752, 0, 766, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 749, 750,
- 1058, 0, 0, 0, 908, 0, 751, 0, 0, 759,
- 970, 971, 972, 973, 974, 975, 976, 977, 978, 979,
- 980, 981, 982, 983, 984, 985, 986, 987, 988, 989,
- 990, 991, 992, 993, 994, 995, 996, 997, 998, 999,
- 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
- 1010, 1011, 761, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 907,
- 0, 0, 622, 0, 0, 905, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 958, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 959, 960, 256, 645, 804, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 812, 813, 280, 307, 889, 888, 887, 306, 308, 885,
- 886, 884, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 895, 917, 906, 772, 773, 896,
- 897, 921, 898, 775, 776, 918, 919, 769, 770, 774,
- 920, 922, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 909, 758, 757, 0, 764, 765, 0, 794, 795, 797,
- 801, 802, 803, 814, 861, 862, 870, 872, 873, 871,
- 874, 875, 876, 879, 880, 881, 882, 877, 878, 883,
- 777, 781, 778, 779, 780, 792, 782, 783, 784, 785,
- 786, 787, 788, 789, 790, 791, 793, 932, 933, 934,
- 935, 936, 937, 807, 811, 810, 808, 809, 805, 806,
- 833, 832, 834, 835, 836, 837, 838, 839, 841, 840,
- 842, 843, 844, 845, 846, 847, 815, 816, 819, 820,
- 818, 817, 821, 830, 831, 822, 823, 824, 825, 826,
- 827, 829, 828, 848, 849, 850, 851, 852, 854, 853,
- 857, 858, 856, 855, 860, 859, 756, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 923,
- 262, 924, 0, 0, 928, 0, 0, 0, 930, 929,
- 0, 931, 893, 892, 0, 0, 925, 926, 0, 927,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 938, 939, 940, 941, 942, 943,
- 944, 945, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 963, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 768,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 755, 0, 0, 0, 270, 760, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 767, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 762, 763,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 95, 0, 0, 1012,
- 948, 739, 914, 952, 1013, 965, 966, 967, 953, 0,
- 238, 954, 955, 245, 956, 0, 913, 798, 800, 799,
- 863, 864, 865, 866, 867, 868, 869, 796, 961, 604,
- 968, 969, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 735, 752, 0, 766, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 749, 750,
- 0, 0, 0, 0, 908, 0, 751, 0, 0, 759,
- 970, 971, 972, 973, 974, 975, 976, 977, 978, 979,
- 980, 981, 982, 983, 984, 985, 986, 987, 988, 989,
- 990, 991, 992, 993, 994, 995, 996, 997, 998, 999,
- 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
- 1010, 1011, 761, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 907,
- 0, 0, 622, 0, 0, 905, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 958, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 959, 960, 256, 645, 804, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 812, 813, 280, 307, 889, 888, 887, 306, 308, 885,
- 886, 884, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 895, 917, 906, 772, 773, 896,
- 897, 921, 898, 775, 776, 918, 919, 769, 770, 774,
- 920, 922, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 909, 758, 757, 0, 764, 765, 0, 794, 795, 797,
- 801, 802, 803, 814, 861, 862, 870, 872, 873, 871,
- 874, 875, 876, 879, 880, 881, 882, 877, 878, 883,
- 777, 781, 778, 779, 780, 792, 782, 783, 784, 785,
- 786, 787, 788, 789, 790, 791, 793, 932, 933, 934,
- 935, 936, 937, 807, 811, 810, 808, 809, 805, 806,
- 833, 832, 834, 835, 836, 837, 838, 839, 841, 840,
- 842, 843, 844, 845, 846, 847, 815, 816, 819, 820,
- 818, 817, 821, 830, 831, 822, 823, 824, 825, 826,
- 827, 829, 828, 848, 849, 850, 851, 852, 854, 853,
- 857, 858, 856, 855, 860, 859, 756, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 923,
- 262, 924, 0, 0, 928, 0, 0, 0, 930, 929,
- 0, 931, 893, 892, 0, 0, 925, 926, 0, 927,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 938, 939, 940, 941, 942, 943,
- 944, 945, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 963, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 768,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 755, 0, 0, 0, 270, 760, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 767, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 762, 763,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 95, 0, 0, 1012,
- 948, 739, 914, 952, 1013, 965, 966, 967, 953, 0,
- 238, 954, 955, 245, 956, 0, 913, 798, 800, 799,
- 863, 864, 865, 866, 867, 868, 869, 796, 961, 604,
- 968, 969, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 735, 752, 0, 766, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 749, 750,
- 0, 0, 0, 0, 908, 0, 751, 0, 0, 759,
- 970, 971, 972, 973, 974, 975, 976, 977, 978, 979,
- 980, 981, 982, 983, 984, 985, 986, 987, 988, 989,
- 990, 991, 992, 993, 994, 995, 996, 997, 998, 999,
- 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
- 1010, 1011, 3133, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 907,
- 0, 0, 622, 0, 0, 905, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 958, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 959, 960, 256, 645, 804, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 812, 813, 280, 307, 889, 888, 887, 306, 308, 885,
- 886, 884, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 895, 917, 906, 772, 773, 896,
- 897, 921, 898, 775, 776, 918, 919, 769, 770, 774,
- 920, 922, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 909, 758, 757, 0, 764, 765, 0, 794, 795, 797,
- 801, 802, 803, 814, 861, 862, 870, 872, 873, 871,
- 874, 875, 876, 879, 880, 881, 882, 877, 878, 883,
- 777, 781, 778, 779, 780, 792, 782, 783, 784, 785,
- 786, 787, 788, 789, 790, 791, 793, 932, 933, 934,
- 935, 936, 937, 807, 811, 810, 808, 809, 805, 806,
- 833, 832, 834, 835, 836, 837, 838, 839, 841, 840,
- 842, 843, 844, 845, 846, 847, 815, 816, 819, 820,
- 818, 817, 821, 830, 831, 822, 823, 824, 825, 826,
- 827, 829, 828, 848, 849, 850, 851, 852, 854, 853,
- 857, 858, 856, 855, 860, 859, 756, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 923,
- 262, 924, 0, 0, 928, 0, 0, 0, 930, 929,
- 0, 931, 893, 892, 0, 0, 925, 926, 0, 927,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 938, 939, 940, 941, 942, 943,
- 944, 945, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 963, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 768,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 755, 0, 0, 0, 270, 760, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 767, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 762, 763,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 95, 0, 0, 1012,
- 948, 739, 914, 952, 1013, 965, 966, 967, 953, 0,
- 238, 954, 955, 245, 956, 0, 913, 798, 800, 799,
- 863, 864, 865, 866, 867, 868, 869, 796, 961, 604,
- 968, 969, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 735, 752, 0, 766, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 749, 750,
- 0, 0, 0, 0, 908, 0, 751, 0, 0, 759,
- 970, 971, 972, 973, 974, 975, 976, 977, 978, 979,
- 980, 981, 982, 983, 984, 985, 986, 987, 988, 989,
- 990, 991, 992, 993, 994, 995, 996, 997, 998, 999,
- 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
- 1010, 1011, 3129, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 907,
- 0, 0, 622, 0, 0, 905, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 958, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 959, 960, 256, 645, 804, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 812, 813, 280, 307, 889, 888, 887, 306, 308, 885,
- 886, 884, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 895, 917, 906, 772, 773, 896,
- 897, 921, 898, 775, 776, 918, 919, 769, 770, 774,
- 920, 922, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 909, 758, 757, 0, 764, 765, 0, 794, 795, 797,
- 801, 802, 803, 814, 861, 862, 870, 872, 873, 871,
- 874, 875, 876, 879, 880, 881, 882, 877, 878, 883,
- 777, 781, 778, 779, 780, 792, 782, 783, 784, 785,
- 786, 787, 788, 789, 790, 791, 793, 932, 933, 934,
- 935, 936, 937, 807, 811, 810, 808, 809, 805, 806,
- 833, 832, 834, 835, 836, 837, 838, 839, 841, 840,
- 842, 843, 844, 845, 846, 847, 815, 816, 819, 820,
- 818, 817, 821, 830, 831, 822, 823, 824, 825, 826,
- 827, 829, 828, 848, 849, 850, 851, 852, 854, 853,
- 857, 858, 856, 855, 860, 859, 756, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 923,
- 262, 924, 0, 0, 928, 0, 0, 0, 930, 929,
- 0, 931, 893, 892, 0, 0, 925, 926, 0, 927,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 938, 939, 940, 941, 942, 943,
- 944, 945, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 963, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 768,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 755, 0, 0, 0, 270, 760, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 767, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 762, 763,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 95, 0, 0, 1012,
- 948, 1079, 914, 952, 1013, 965, 966, 967, 953, 0,
- 238, 954, 955, 245, 956, 0, 913, 798, 800, 799,
- 863, 864, 865, 866, 867, 868, 869, 796, 961, 604,
- 968, 969, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 752, 0, 766, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 749, 750,
- 0, 0, 0, 0, 908, 0, 751, 0, 0, 759,
- 970, 971, 972, 973, 974, 975, 976, 977, 978, 979,
- 980, 981, 982, 983, 984, 985, 986, 987, 988, 989,
- 990, 991, 992, 993, 994, 995, 996, 997, 998, 999,
- 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
- 1010, 1011, 761, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 907,
- 0, 0, 622, 0, 0, 905, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 958, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 959, 960, 256, 645, 804, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 812, 813, 280, 307, 889, 888, 887, 306, 308, 885,
- 886, 884, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 895, 917, 906, 772, 773, 896,
- 897, 921, 898, 775, 776, 918, 919, 769, 770, 774,
- 920, 922, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 909, 758, 757, 0, 764, 765, 0, 794, 795, 797,
- 801, 802, 803, 814, 861, 862, 870, 872, 873, 871,
- 874, 875, 876, 879, 880, 881, 882, 877, 878, 883,
- 777, 781, 778, 779, 780, 792, 782, 783, 784, 785,
- 786, 787, 788, 789, 790, 791, 793, 932, 933, 934,
- 935, 936, 937, 807, 811, 810, 808, 809, 805, 806,
- 833, 832, 834, 835, 836, 837, 838, 839, 841, 840,
- 842, 843, 844, 845, 846, 847, 815, 816, 819, 820,
- 818, 817, 821, 830, 831, 822, 823, 824, 825, 826,
- 827, 829, 828, 848, 849, 850, 851, 852, 854, 853,
- 857, 858, 856, 855, 860, 859, 756, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 923,
- 262, 924, 0, 0, 928, 0, 0, 0, 930, 929,
- 0, 931, 893, 892, 0, 0, 925, 926, 0, 927,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 938, 939, 940, 941, 942, 943,
- 944, 945, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 963, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 768,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 755, 0, 0, 0, 270, 760, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 767, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 762, 763,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 95, 0, 0, 1012,
- 948, 1079, 914, 952, 1013, 965, 966, 967, 953, 0,
- 238, 954, 955, 245, 956, 0, 913, 798, 800, 799,
- 863, 864, 865, 866, 867, 868, 869, 796, 961, 604,
- 968, 969, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 752, 0, 766, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 749, 750,
- 0, 0, 0, 0, 908, 0, 751, 0, 0, 759,
- 970, 971, 972, 973, 974, 975, 976, 977, 978, 979,
- 980, 981, 982, 983, 984, 985, 986, 987, 988, 989,
- 990, 991, 992, 993, 994, 995, 996, 997, 998, 999,
- 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
- 1010, 1011, 2094, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 907,
- 0, 0, 622, 0, 0, 905, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 958, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 959, 960, 256, 645, 804, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 812, 813, 280, 307, 889, 888, 887, 306, 308, 885,
- 886, 884, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 895, 917, 906, 772, 773, 896,
- 897, 921, 898, 775, 776, 918, 919, 769, 770, 774,
- 920, 922, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 909, 758, 757, 0, 764, 765, 0, 794, 795, 797,
- 801, 802, 803, 814, 861, 862, 870, 872, 873, 871,
- 874, 875, 876, 879, 880, 881, 882, 877, 878, 883,
- 777, 781, 778, 779, 780, 792, 782, 783, 784, 785,
- 786, 787, 788, 789, 790, 791, 793, 932, 933, 934,
- 935, 936, 937, 807, 811, 810, 808, 809, 805, 806,
- 833, 832, 834, 835, 836, 837, 838, 839, 841, 840,
- 842, 843, 844, 845, 846, 847, 815, 816, 819, 820,
- 818, 817, 821, 830, 831, 822, 823, 824, 825, 826,
- 827, 829, 828, 848, 849, 850, 851, 852, 854, 853,
- 857, 858, 856, 855, 860, 859, 756, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 923,
- 262, 924, 0, 0, 928, 0, 0, 0, 930, 929,
- 0, 931, 893, 892, 0, 0, 925, 926, 0, 927,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 938, 939, 940, 941, 942, 943,
- 944, 945, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 963, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 768,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 755, 0, 0, 0, 270, 760, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 767, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 762, 763,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 95, 0, 0, 1012,
- 948, 1079, 914, 952, 1013, 965, 966, 967, 953, 0,
- 238, 954, 955, 245, 956, 0, 913, 798, 800, 799,
- 863, 864, 865, 866, 867, 868, 869, 796, 961, 604,
- 968, 969, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 752, 0, 766, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 749, 750,
- 0, 0, 0, 0, 908, 0, 751, 0, 0, 759,
- 970, 971, 972, 973, 974, 975, 976, 977, 978, 979,
- 980, 981, 982, 983, 984, 985, 986, 987, 988, 989,
- 990, 991, 992, 993, 994, 995, 996, 997, 998, 999,
- 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
- 1010, 1011, 2092, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 907,
- 0, 0, 622, 0, 0, 905, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 958, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 959, 960, 256, 645, 804, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 812, 813, 280, 307, 889, 888, 887, 306, 308, 885,
- 886, 884, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 895, 917, 906, 772, 773, 896,
- 897, 921, 898, 775, 776, 918, 919, 769, 770, 774,
- 920, 922, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 909, 758, 757, 0, 764, 765, 0, 794, 795, 797,
- 801, 802, 803, 814, 861, 862, 870, 872, 873, 871,
- 874, 875, 876, 879, 880, 881, 882, 877, 878, 883,
- 777, 781, 778, 779, 780, 792, 782, 783, 784, 785,
- 786, 787, 788, 789, 790, 791, 793, 932, 933, 934,
- 935, 936, 937, 807, 811, 810, 808, 809, 805, 806,
- 833, 832, 834, 835, 836, 837, 838, 839, 841, 840,
- 842, 843, 844, 845, 846, 847, 815, 816, 819, 820,
- 818, 817, 821, 830, 831, 822, 823, 824, 825, 826,
- 827, 829, 828, 848, 849, 850, 851, 852, 854, 853,
- 857, 858, 856, 855, 860, 859, 756, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 923,
- 262, 924, 0, 0, 928, 0, 0, 0, 930, 929,
- 0, 931, 893, 892, 0, 0, 925, 926, 0, 927,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 938, 939, 940, 941, 942, 943,
- 944, 945, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 963, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 0,
- 715, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 1130, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 1129, 622, 0, 0, 0, 0, 0, 1126, 1127,
- 363, 1087, 330, 197, 225, 1120, 1124, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 1691,
- 948, 0, 0, 1688, 0, 0, 0, 0, 1686, 0,
- 238, 1687, 1685, 245, 1690, 0, 913, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 86, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 95, 0, 0, 0,
- 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 94, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 2395, 0, 0,
- 2394, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 1753,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 1755, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 1757,
- 715, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 1461, 0, 1462, 1463, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 86, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 95, 0, 1730, 0,
- 715, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 94, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 95, 0, 0, 0,
- 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 2395, 0, 0,
- 2394, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 2342, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 1936,
- 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 2340, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 0,
- 715, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 1081, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 1087, 330, 197, 225, 1085, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 2342, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 1936,
- 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 1730, 0,
- 715, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 3687, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 2103,
- 715, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 2104,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 2842,
- 715, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 2843,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 0,
- 715, 0, 0, 0, 0, 2827, 0, 0, 0, 0,
- 238, 0, 0, 245, 2828, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 1776, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 1775,
- 715, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 0,
- 717, 718, 719, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 0,
- 715, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 4029, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 1936,
- 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 0,
- 715, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 3687, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 95, 0, 0, 0,
- 715, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 2396, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 0,
- 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 1757,
- 715, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 0,
- 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 2050, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 2041,
- 715, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 1903, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 0,
- 715, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 1901, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 0,
- 715, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 1899, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 0,
- 715, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 1897, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 0,
- 715, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 1895, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 0,
- 715, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 1891, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 0,
- 715, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 1889, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 0,
- 715, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 1887, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 0,
- 715, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 1862, 0, 0, 0,
- 715, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 1761, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 0,
- 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 95, 0, 0, 0,
- 948, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 0,
- 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1440, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 1439, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 0,
- 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1038, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 0,
- 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 668, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 0,
- 715, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 4095, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 0,
- 715, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 0,
- 948, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 394,
- 0, 374, 573, 574, 316, 0, 0, 525, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 414,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 364, 267, 0, 0, 204, 503, 0, 428,
- 0, 203, 0, 485, 252, 375, 372, 580, 282, 273,
- 269, 250, 317, 383, 426, 515, 420, 0, 368, 0,
- 0, 495, 399, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 411, 496, 286, 0, 0, 0, 0, 0,
- 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 349, 358, 357,
- 338, 339, 341, 343, 348, 355, 361, 0, 0, 604,
- 0, 0, 0, 265, 321, 272, 264, 577, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 400, 257, 0, 451, 0,
- 0, 0, 622, 0, 0, 0, 0, 0, 0, 0,
- 363, 0, 330, 197, 225, 0, 0, 410, 459, 471,
- 0, 0, 0, 253, 0, 469, 424, 599, 233, 284,
- 456, 430, 467, 438, 287, 0, 0, 468, 370, 582,
- 448, 596, 623, 624, 263, 404, 609, 519, 617, 641,
- 226, 260, 418, 504, 602, 492, 395, 578, 579, 329,
- 491, 295, 201, 367, 629, 224, 477, 369, 242, 231,
- 584, 606, 299, 289, 454, 636, 213, 514, 594, 239,
- 481, 0, 0, 644, 247, 502, 215, 591, 501, 391,
- 326, 327, 214, 0, 455, 268, 293, 0, 0, 258,
- 413, 586, 587, 256, 645, 228, 616, 220, 0, 615,
- 406, 581, 592, 392, 381, 219, 590, 390, 380, 334,
- 353, 354, 280, 307, 445, 373, 446, 306, 308, 402,
- 401, 403, 207, 603, 0, 208, 0, 497, 605, 646,
- 450, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 365, 417, 444, 440, 449, 0, 576,
- 597, 610, 621, 627, 628, 630, 631, 632, 633, 634,
- 637, 635, 405, 311, 493, 333, 371, 0, 0, 423,
- 470, 240, 601, 494, 199, 0, 0, 0, 0, 254,
- 255, 0, 572, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 642, 505, 511, 506, 507, 508, 509, 510, 0, 512,
- 0, 0, 0, 0, 0, 396, 0, 588, 589, 665,
- 382, 484, 598, 335, 347, 350, 340, 359, 0, 360,
- 336, 337, 342, 344, 345, 346, 351, 352, 356, 362,
- 249, 210, 388, 397, 575, 312, 216, 217, 218, 521,
- 522, 523, 524, 613, 614, 618, 205, 460, 461, 462,
- 463, 292, 608, 309, 466, 465, 331, 332, 377, 447,
- 537, 539, 550, 554, 556, 558, 564, 567, 538, 540,
- 551, 555, 557, 559, 565, 568, 527, 529, 531, 533,
- 546, 545, 542, 570, 571, 548, 553, 532, 544, 549,
- 562, 569, 566, 526, 530, 534, 543, 561, 560, 541,
- 552, 563, 547, 535, 528, 536, 0, 196, 221, 366,
- 0, 452, 288, 643, 612, 482, 607, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 378,
- 384, 385, 386, 387, 407, 408, 409, 412, 415, 416,
- 419, 421, 422, 425, 429, 433, 434, 435, 437, 439,
- 441, 453, 458, 472, 473, 474, 475, 476, 479, 480,
- 486, 487, 488, 489, 490, 498, 499, 513, 583, 585,
- 600, 619, 625, 478, 301, 302, 442, 443, 314, 315,
- 639, 640, 300, 595, 626, 593, 638, 620, 436, 376,
- 0, 0, 379, 281, 305, 320, 0, 611, 500, 227,
- 464, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 389, 398, 427, 432, 296, 271, 244, 457,
- 241, 483, 516, 517, 518, 520, 393, 266, 431, 0,
- 0, 374, 573, 574, 316,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1941, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 672, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1514, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4082, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1941, 0, 0, 0,
+ 396, 0, 0, 0, 0, 0, 1411, 1397, 527, 0,
+ 1339, 1414, 1308, 1327, 1424, 1330, 1333, 1376, 1286, 1354,
+ 416, 1324, 1312, 1281, 1319, 1282, 1310, 1341, 270, 1307,
+ 1399, 1358, 1413, 366, 267, 1288, 1279, 204, 505, 1313,
+ 430, 1329, 203, 1378, 487, 252, 377, 374, 582, 282,
+ 273, 269, 250, 317, 385, 428, 517, 422, 1420, 370,
+ 1364, 0, 497, 401, 0, 0, 1994, 1343, 1403, 1352,
+ 1390, 1338, 1377, 1296, 1363, 1415, 1325, 1373, 1416, 323,
+ 248, 325, 202, 413, 498, 286, 0, 0, 0, 0,
+ 4084, 952, 0, 0, 0, 0, 4085, 0, 0, 0,
+ 0, 238, 0, 0, 245, 0, 0, 0, 351, 360,
+ 359, 339, 340, 342, 344, 350, 357, 363, 336, 345,
+ 1321, 1370, 606, 1410, 1322, 1372, 265, 321, 272, 264,
+ 579, 1421, 1402, 1285, 1351, 1409, 1346, 0, 0, 229,
+ 1412, 1345, 0, 1375, 0, 1427, 1280, 1366, 0, 1283,
+ 1287, 1423, 1407, 1316, 275, 0, 0, 0, 0, 0,
+ 0, 0, 1342, 1353, 1387, 1391, 1336, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1314, 0, 1362, 0, 0,
+ 0, 1292, 1284, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1340, 0, 0, 0, 0,
+ 1295, 0, 1315, 1388, 0, 1278, 297, 1289, 402, 257,
+ 0, 453, 1395, 1406, 1337, 624, 1408, 1335, 1334, 1382,
+ 1293, 1401, 1328, 365, 1291, 330, 197, 225, 0, 1326,
+ 412, 461, 473, 1400, 1311, 1320, 253, 1318, 471, 426,
+ 601, 233, 284, 458, 432, 469, 440, 287, 1361, 1380,
+ 470, 372, 584, 450, 598, 625, 626, 263, 406, 611,
+ 521, 619, 643, 226, 260, 420, 506, 604, 494, 397,
+ 580, 581, 329, 493, 295, 201, 369, 631, 224, 479,
+ 371, 242, 231, 586, 608, 299, 289, 456, 638, 213,
+ 516, 596, 239, 483, 0, 0, 646, 247, 504, 215,
+ 593, 503, 393, 326, 327, 214, 0, 457, 268, 293,
+ 0, 0, 258, 415, 588, 589, 256, 647, 228, 618,
+ 220, 1290, 617, 408, 583, 594, 394, 383, 219, 592,
+ 392, 382, 334, 355, 356, 280, 307, 447, 375, 448,
+ 306, 308, 404, 403, 405, 207, 605, 0, 208, 0,
+ 499, 607, 648, 452, 212, 234, 235, 237, 1306, 279,
+ 283, 291, 294, 303, 304, 313, 367, 419, 446, 442,
+ 451, 1396, 578, 599, 612, 623, 629, 630, 632, 633,
+ 634, 635, 636, 639, 637, 407, 311, 495, 333, 373,
+ 1385, 1426, 425, 472, 240, 603, 496, 199, 1300, 1305,
+ 1298, 0, 254, 255, 1367, 574, 1301, 1299, 1356, 1357,
+ 1302, 1417, 1418, 1419, 1404, 649, 650, 651, 652, 653,
+ 654, 655, 656, 657, 658, 659, 660, 661, 662, 663,
+ 664, 665, 666, 644, 507, 513, 508, 509, 510, 511,
+ 512, 0, 514, 1389, 1294, 0, 1303, 1304, 398, 1398,
+ 590, 591, 667, 384, 486, 600, 335, 349, 352, 341,
+ 361, 0, 362, 337, 338, 343, 346, 347, 348, 353,
+ 354, 358, 364, 249, 210, 390, 399, 577, 312, 216,
+ 217, 218, 523, 524, 525, 526, 615, 616, 620, 205,
+ 462, 463, 464, 465, 292, 610, 309, 468, 467, 331,
+ 332, 379, 449, 539, 541, 552, 556, 558, 560, 566,
+ 569, 540, 542, 553, 557, 559, 561, 567, 570, 529,
+ 531, 533, 535, 548, 547, 544, 572, 573, 550, 555,
+ 534, 546, 551, 564, 571, 568, 528, 532, 536, 545,
+ 563, 562, 543, 554, 565, 549, 537, 530, 538, 1360,
+ 196, 221, 368, 1422, 454, 288, 645, 614, 484, 609,
+ 206, 223, 1297, 262, 1309, 1317, 0, 1323, 1331, 1332,
+ 1344, 1347, 1348, 1349, 1350, 1368, 1369, 1371, 1379, 1381,
+ 1384, 1386, 1393, 1405, 1425, 198, 200, 209, 222, 232,
+ 236, 243, 261, 276, 278, 285, 298, 310, 318, 319,
+ 322, 328, 380, 386, 387, 388, 389, 409, 410, 411,
+ 414, 417, 418, 421, 423, 424, 427, 431, 435, 436,
+ 437, 439, 441, 443, 455, 460, 474, 475, 476, 477,
+ 478, 481, 482, 488, 489, 490, 491, 492, 500, 501,
+ 515, 585, 587, 602, 621, 627, 480, 301, 302, 444,
+ 445, 314, 315, 641, 642, 300, 597, 628, 595, 640,
+ 622, 438, 378, 1359, 1365, 381, 281, 305, 320, 1374,
+ 613, 502, 227, 466, 290, 251, 1392, 1394, 211, 246,
+ 230, 259, 274, 277, 324, 391, 400, 429, 434, 296,
+ 271, 244, 459, 241, 485, 518, 519, 520, 522, 395,
+ 266, 433, 1355, 1383, 376, 575, 576, 316, 396, 0,
+ 0, 0, 0, 0, 1411, 1397, 527, 0, 1339, 1414,
+ 1308, 1327, 1424, 1330, 1333, 1376, 1286, 1354, 416, 1324,
+ 1312, 1281, 1319, 1282, 1310, 1341, 270, 1307, 1399, 1358,
+ 1413, 366, 267, 1288, 1279, 204, 505, 1313, 430, 1329,
+ 203, 1378, 487, 252, 377, 374, 582, 282, 273, 269,
+ 250, 317, 385, 428, 517, 422, 1420, 370, 1364, 0,
+ 497, 401, 0, 0, 0, 1343, 1403, 1352, 1390, 1338,
+ 1377, 1296, 1363, 1415, 1325, 1373, 1416, 323, 248, 325,
+ 202, 413, 498, 286, 0, 0, 0, 0, 0, 194,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 238,
+ 0, 0, 245, 0, 0, 0, 351, 360, 359, 339,
+ 340, 342, 344, 350, 357, 363, 336, 345, 1321, 1370,
+ 606, 1410, 1322, 1372, 265, 321, 272, 264, 579, 1421,
+ 1402, 1285, 1351, 1409, 1346, 0, 0, 229, 1412, 1345,
+ 0, 1375, 0, 1427, 1280, 1366, 0, 1283, 1287, 1423,
+ 1407, 1316, 275, 0, 0, 0, 0, 0, 0, 0,
+ 1342, 1353, 1387, 1391, 1336, 0, 0, 0, 0, 0,
+ 0, 3228, 0, 1314, 0, 1362, 0, 0, 0, 1292,
+ 1284, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1340, 0, 0, 0, 0, 1295, 0,
+ 1315, 1388, 0, 1278, 297, 1289, 402, 257, 0, 453,
+ 1395, 1406, 1337, 624, 1408, 1335, 1334, 1382, 1293, 1401,
+ 1328, 365, 1291, 330, 197, 225, 0, 1326, 412, 461,
+ 473, 1400, 1311, 1320, 253, 1318, 471, 426, 601, 233,
+ 284, 458, 432, 469, 440, 287, 1361, 1380, 470, 372,
+ 584, 450, 598, 625, 626, 263, 406, 611, 521, 619,
+ 643, 226, 260, 420, 506, 604, 494, 397, 580, 581,
+ 329, 493, 295, 201, 369, 631, 224, 479, 371, 242,
+ 231, 586, 608, 299, 289, 456, 638, 213, 516, 596,
+ 239, 483, 0, 0, 646, 247, 504, 215, 593, 503,
+ 393, 326, 327, 214, 0, 457, 268, 293, 0, 0,
+ 258, 415, 588, 589, 256, 647, 228, 618, 220, 1290,
+ 617, 408, 583, 594, 394, 383, 219, 592, 392, 382,
+ 334, 355, 356, 280, 307, 447, 375, 448, 306, 308,
+ 404, 403, 405, 207, 605, 0, 208, 0, 499, 607,
+ 648, 452, 212, 234, 235, 237, 1306, 279, 283, 291,
+ 294, 303, 304, 313, 367, 419, 446, 442, 451, 1396,
+ 578, 599, 612, 623, 629, 630, 632, 633, 634, 635,
+ 636, 639, 637, 407, 311, 495, 333, 373, 1385, 1426,
+ 425, 472, 240, 603, 496, 199, 1300, 1305, 1298, 0,
+ 254, 255, 1367, 574, 1301, 1299, 1356, 1357, 1302, 1417,
+ 1418, 1419, 1404, 649, 650, 651, 652, 653, 654, 655,
+ 656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
+ 666, 644, 507, 513, 508, 509, 510, 511, 512, 0,
+ 514, 1389, 1294, 0, 1303, 1304, 398, 1398, 590, 591,
+ 667, 384, 486, 600, 335, 349, 352, 341, 361, 0,
+ 362, 337, 338, 343, 346, 347, 348, 353, 354, 358,
+ 364, 249, 210, 390, 399, 577, 312, 216, 217, 218,
+ 523, 524, 525, 526, 615, 616, 620, 205, 462, 463,
+ 464, 465, 292, 610, 309, 468, 467, 331, 332, 379,
+ 449, 539, 541, 552, 556, 558, 560, 566, 569, 540,
+ 542, 553, 557, 559, 561, 567, 570, 529, 531, 533,
+ 535, 548, 547, 544, 572, 573, 550, 555, 534, 546,
+ 551, 564, 571, 568, 528, 532, 536, 545, 563, 562,
+ 543, 554, 565, 549, 537, 530, 538, 1360, 196, 221,
+ 368, 1422, 454, 288, 645, 614, 484, 609, 206, 223,
+ 1297, 262, 1309, 1317, 0, 1323, 1331, 1332, 1344, 1347,
+ 1348, 1349, 1350, 1368, 1369, 1371, 1379, 1381, 1384, 1386,
+ 1393, 1405, 1425, 198, 200, 209, 222, 232, 236, 243,
+ 261, 276, 278, 285, 298, 310, 318, 319, 322, 328,
+ 380, 386, 387, 388, 389, 409, 410, 411, 414, 417,
+ 418, 421, 423, 424, 427, 431, 435, 436, 437, 439,
+ 441, 443, 455, 460, 474, 475, 476, 477, 478, 481,
+ 482, 488, 489, 490, 491, 492, 500, 501, 515, 585,
+ 587, 602, 621, 627, 480, 301, 302, 444, 445, 314,
+ 315, 641, 642, 300, 597, 628, 595, 640, 622, 438,
+ 378, 1359, 1365, 381, 281, 305, 320, 1374, 613, 502,
+ 227, 466, 290, 251, 1392, 1394, 211, 246, 230, 259,
+ 274, 277, 324, 391, 400, 429, 434, 296, 271, 244,
+ 459, 241, 485, 518, 519, 520, 522, 395, 266, 433,
+ 1355, 1383, 376, 575, 576, 316, 396, 0, 0, 0,
+ 0, 0, 1411, 1397, 527, 0, 1339, 1414, 1308, 1327,
+ 1424, 1330, 1333, 1376, 1286, 1354, 416, 1324, 1312, 1281,
+ 1319, 1282, 1310, 1341, 270, 1307, 1399, 1358, 1413, 366,
+ 267, 1288, 1279, 204, 505, 1313, 430, 1329, 203, 1378,
+ 487, 252, 377, 374, 582, 282, 273, 269, 250, 317,
+ 385, 428, 517, 422, 1420, 370, 1364, 0, 497, 401,
+ 0, 0, 0, 1343, 1403, 1352, 1390, 1338, 1377, 1296,
+ 1363, 1415, 1325, 1373, 1416, 323, 248, 325, 202, 413,
+ 498, 286, 0, 0, 0, 0, 0, 717, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 238, 0, 0,
+ 245, 0, 0, 0, 351, 360, 359, 339, 340, 342,
+ 344, 350, 357, 363, 336, 345, 1321, 1370, 606, 1410,
+ 1322, 1372, 265, 321, 272, 264, 579, 1421, 1402, 1285,
+ 1351, 1409, 1346, 0, 0, 229, 1412, 1345, 0, 1375,
+ 0, 1427, 1280, 1366, 0, 1283, 1287, 1423, 1407, 1316,
+ 275, 0, 0, 0, 0, 0, 0, 0, 1342, 1353,
+ 1387, 1391, 1336, 0, 0, 0, 0, 0, 0, 3189,
+ 0, 1314, 0, 1362, 0, 0, 0, 1292, 1284, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1340, 0, 0, 0, 0, 1295, 0, 1315, 1388,
+ 0, 1278, 297, 1289, 402, 257, 0, 453, 1395, 1406,
+ 1337, 624, 1408, 1335, 1334, 1382, 1293, 1401, 1328, 365,
+ 1291, 330, 197, 225, 0, 1326, 412, 461, 473, 1400,
+ 1311, 1320, 253, 1318, 471, 426, 601, 233, 284, 458,
+ 432, 469, 440, 287, 1361, 1380, 470, 372, 584, 450,
+ 598, 625, 626, 263, 406, 611, 521, 619, 643, 226,
+ 260, 420, 506, 604, 494, 397, 580, 581, 329, 493,
+ 295, 201, 369, 631, 224, 479, 371, 242, 231, 586,
+ 608, 299, 289, 456, 638, 213, 516, 596, 239, 483,
+ 0, 0, 646, 247, 504, 215, 593, 503, 393, 326,
+ 327, 214, 0, 457, 268, 293, 0, 0, 258, 415,
+ 588, 589, 256, 647, 228, 618, 220, 1290, 617, 408,
+ 583, 594, 394, 383, 219, 592, 392, 382, 334, 355,
+ 356, 280, 307, 447, 375, 448, 306, 308, 404, 403,
+ 405, 207, 605, 0, 208, 0, 499, 607, 648, 452,
+ 212, 234, 235, 237, 1306, 279, 283, 291, 294, 303,
+ 304, 313, 367, 419, 446, 442, 451, 1396, 578, 599,
+ 612, 623, 629, 630, 632, 633, 634, 635, 636, 639,
+ 637, 407, 311, 495, 333, 373, 1385, 1426, 425, 472,
+ 240, 603, 496, 199, 1300, 1305, 1298, 0, 254, 255,
+ 1367, 574, 1301, 1299, 1356, 1357, 1302, 1417, 1418, 1419,
+ 1404, 649, 650, 651, 652, 653, 654, 655, 656, 657,
+ 658, 659, 660, 661, 662, 663, 664, 665, 666, 644,
+ 507, 513, 508, 509, 510, 511, 512, 0, 514, 1389,
+ 1294, 0, 1303, 1304, 398, 1398, 590, 591, 667, 384,
+ 486, 600, 335, 349, 352, 341, 361, 0, 362, 337,
+ 338, 343, 346, 347, 348, 353, 354, 358, 364, 249,
+ 210, 390, 399, 577, 312, 216, 217, 218, 523, 524,
+ 525, 526, 615, 616, 620, 205, 462, 463, 464, 465,
+ 292, 610, 309, 468, 467, 331, 332, 379, 449, 539,
+ 541, 552, 556, 558, 560, 566, 569, 540, 542, 553,
+ 557, 559, 561, 567, 570, 529, 531, 533, 535, 548,
+ 547, 544, 572, 573, 550, 555, 534, 546, 551, 564,
+ 571, 568, 528, 532, 536, 545, 563, 562, 543, 554,
+ 565, 549, 537, 530, 538, 1360, 196, 221, 368, 1422,
+ 454, 288, 645, 614, 484, 609, 206, 223, 1297, 262,
+ 1309, 1317, 0, 1323, 1331, 1332, 1344, 1347, 1348, 1349,
+ 1350, 1368, 1369, 1371, 1379, 1381, 1384, 1386, 1393, 1405,
+ 1425, 198, 200, 209, 222, 232, 236, 243, 261, 276,
+ 278, 285, 298, 310, 318, 319, 322, 328, 380, 386,
+ 387, 388, 389, 409, 410, 411, 414, 417, 418, 421,
+ 423, 424, 427, 431, 435, 436, 437, 439, 441, 443,
+ 455, 460, 474, 475, 476, 477, 478, 481, 482, 488,
+ 489, 490, 491, 492, 500, 501, 515, 585, 587, 602,
+ 621, 627, 480, 301, 302, 444, 445, 314, 315, 641,
+ 642, 300, 597, 628, 595, 640, 622, 438, 378, 1359,
+ 1365, 381, 281, 305, 320, 1374, 613, 502, 227, 466,
+ 290, 251, 1392, 1394, 211, 246, 230, 259, 274, 277,
+ 324, 391, 400, 429, 434, 296, 271, 244, 459, 241,
+ 485, 518, 519, 520, 522, 395, 266, 433, 1355, 1383,
+ 376, 575, 576, 316, 396, 0, 0, 0, 0, 0,
+ 1411, 1397, 527, 0, 1339, 1414, 1308, 1327, 1424, 1330,
+ 1333, 1376, 1286, 1354, 416, 1324, 1312, 1281, 1319, 1282,
+ 1310, 1341, 270, 1307, 1399, 1358, 1413, 366, 267, 1288,
+ 1279, 204, 505, 1313, 430, 1329, 203, 1378, 487, 252,
+ 377, 374, 582, 282, 273, 269, 250, 317, 385, 428,
+ 517, 422, 1420, 370, 1364, 0, 497, 401, 0, 0,
+ 0, 1343, 1403, 1352, 1390, 1338, 1377, 1296, 1363, 1415,
+ 1325, 1373, 1416, 323, 248, 325, 202, 413, 498, 286,
+ 0, 0, 0, 0, 0, 952, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 238, 0, 0, 245, 0,
+ 0, 0, 351, 360, 359, 339, 340, 342, 344, 350,
+ 357, 363, 336, 345, 1321, 1370, 606, 1410, 1322, 1372,
+ 265, 321, 272, 264, 579, 1421, 1402, 1285, 1351, 1409,
+ 1346, 0, 0, 229, 1412, 1345, 0, 1375, 0, 1427,
+ 1280, 1366, 0, 1283, 1287, 1423, 1407, 1316, 275, 0,
+ 0, 0, 0, 0, 0, 0, 1342, 1353, 1387, 1391,
+ 1336, 0, 0, 0, 0, 0, 0, 2387, 0, 1314,
+ 0, 1362, 0, 0, 0, 1292, 1284, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1340,
+ 0, 0, 0, 0, 1295, 0, 1315, 1388, 0, 1278,
+ 297, 1289, 402, 257, 0, 453, 1395, 1406, 1337, 624,
+ 1408, 1335, 1334, 1382, 1293, 1401, 1328, 365, 1291, 330,
+ 197, 225, 0, 1326, 412, 461, 473, 1400, 1311, 1320,
+ 253, 1318, 471, 426, 601, 233, 284, 458, 432, 469,
+ 440, 287, 1361, 1380, 470, 372, 584, 450, 598, 625,
+ 626, 263, 406, 611, 521, 619, 643, 226, 260, 420,
+ 506, 604, 494, 397, 580, 581, 329, 493, 295, 201,
+ 369, 631, 224, 479, 371, 242, 231, 586, 608, 299,
+ 289, 456, 638, 213, 516, 596, 239, 483, 0, 0,
+ 646, 247, 504, 215, 593, 503, 393, 326, 327, 214,
+ 0, 457, 268, 293, 0, 0, 258, 415, 588, 589,
+ 256, 647, 228, 618, 220, 1290, 617, 408, 583, 594,
+ 394, 383, 219, 592, 392, 382, 334, 355, 356, 280,
+ 307, 447, 375, 448, 306, 308, 404, 403, 405, 207,
+ 605, 0, 208, 0, 499, 607, 648, 452, 212, 234,
+ 235, 237, 1306, 279, 283, 291, 294, 303, 304, 313,
+ 367, 419, 446, 442, 451, 1396, 578, 599, 612, 623,
+ 629, 630, 632, 633, 634, 635, 636, 639, 637, 407,
+ 311, 495, 333, 373, 1385, 1426, 425, 472, 240, 603,
+ 496, 199, 1300, 1305, 1298, 0, 254, 255, 1367, 574,
+ 1301, 1299, 1356, 1357, 1302, 1417, 1418, 1419, 1404, 649,
+ 650, 651, 652, 653, 654, 655, 656, 657, 658, 659,
+ 660, 661, 662, 663, 664, 665, 666, 644, 507, 513,
+ 508, 509, 510, 511, 512, 0, 514, 1389, 1294, 0,
+ 1303, 1304, 398, 1398, 590, 591, 667, 384, 486, 600,
+ 335, 349, 352, 341, 361, 0, 362, 337, 338, 343,
+ 346, 347, 348, 353, 354, 358, 364, 249, 210, 390,
+ 399, 577, 312, 216, 217, 218, 523, 524, 525, 526,
+ 615, 616, 620, 205, 462, 463, 464, 465, 292, 610,
+ 309, 468, 467, 331, 332, 379, 449, 539, 541, 552,
+ 556, 558, 560, 566, 569, 540, 542, 553, 557, 559,
+ 561, 567, 570, 529, 531, 533, 535, 548, 547, 544,
+ 572, 573, 550, 555, 534, 546, 551, 564, 571, 568,
+ 528, 532, 536, 545, 563, 562, 543, 554, 565, 549,
+ 537, 530, 538, 1360, 196, 221, 368, 1422, 454, 288,
+ 645, 614, 484, 609, 206, 223, 1297, 262, 1309, 1317,
+ 0, 1323, 1331, 1332, 1344, 1347, 1348, 1349, 1350, 1368,
+ 1369, 1371, 1379, 1381, 1384, 1386, 1393, 1405, 1425, 198,
+ 200, 209, 222, 232, 236, 243, 261, 276, 278, 285,
+ 298, 310, 318, 319, 322, 328, 380, 386, 387, 388,
+ 389, 409, 410, 411, 414, 417, 418, 421, 423, 424,
+ 427, 431, 435, 436, 437, 439, 441, 443, 455, 460,
+ 474, 475, 476, 477, 478, 481, 482, 488, 489, 490,
+ 491, 492, 500, 501, 515, 585, 587, 602, 621, 627,
+ 480, 301, 302, 444, 445, 314, 315, 641, 642, 300,
+ 597, 628, 595, 640, 622, 438, 378, 1359, 1365, 381,
+ 281, 305, 320, 1374, 613, 502, 227, 466, 290, 251,
+ 1392, 1394, 211, 246, 230, 259, 274, 277, 324, 391,
+ 400, 429, 434, 296, 271, 244, 459, 241, 485, 518,
+ 519, 520, 522, 395, 266, 433, 1355, 1383, 376, 575,
+ 576, 316, 396, 0, 0, 0, 0, 0, 1411, 1397,
+ 527, 0, 1339, 1414, 1308, 1327, 1424, 1330, 1333, 1376,
+ 1286, 1354, 416, 1324, 1312, 1281, 1319, 1282, 1310, 1341,
+ 270, 1307, 1399, 1358, 1413, 366, 267, 1288, 1279, 204,
+ 505, 1313, 430, 1329, 203, 1378, 487, 252, 377, 374,
+ 582, 282, 273, 269, 250, 317, 385, 428, 517, 422,
+ 1420, 370, 1364, 0, 497, 401, 0, 0, 0, 1343,
+ 1403, 1352, 1390, 1338, 1377, 1296, 1363, 1415, 1325, 1373,
+ 1416, 323, 248, 325, 202, 413, 498, 286, 0, 95,
+ 0, 0, 0, 717, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 238, 0, 0, 245, 0, 0, 0,
+ 351, 360, 359, 339, 340, 342, 344, 350, 357, 363,
+ 336, 345, 1321, 1370, 606, 1410, 1322, 1372, 265, 321,
+ 272, 264, 579, 1421, 1402, 1285, 1351, 1409, 1346, 0,
+ 0, 229, 1412, 1345, 0, 1375, 0, 1427, 1280, 1366,
+ 0, 1283, 1287, 1423, 1407, 1316, 275, 0, 0, 0,
+ 0, 0, 0, 0, 1342, 1353, 1387, 1391, 1336, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1314, 0, 1362,
+ 0, 0, 0, 1292, 1284, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1340, 0, 0,
+ 0, 0, 1295, 0, 1315, 1388, 0, 1278, 297, 1289,
+ 402, 257, 0, 453, 1395, 1406, 1337, 624, 1408, 1335,
+ 1334, 1382, 1293, 1401, 1328, 365, 1291, 330, 197, 225,
+ 0, 1326, 412, 461, 473, 1400, 1311, 1320, 253, 1318,
+ 471, 426, 601, 233, 284, 458, 432, 469, 440, 287,
+ 1361, 1380, 470, 372, 584, 450, 598, 625, 626, 263,
+ 406, 611, 521, 619, 643, 226, 260, 420, 506, 604,
+ 494, 397, 580, 581, 329, 493, 295, 201, 369, 631,
+ 224, 479, 371, 242, 231, 586, 608, 299, 289, 456,
+ 638, 213, 516, 596, 239, 483, 0, 0, 646, 247,
+ 504, 215, 593, 503, 393, 326, 327, 214, 0, 457,
+ 268, 293, 0, 0, 258, 415, 588, 589, 256, 647,
+ 228, 618, 220, 1290, 617, 408, 583, 594, 394, 383,
+ 219, 592, 392, 382, 334, 355, 356, 280, 307, 447,
+ 375, 448, 306, 308, 404, 403, 405, 207, 605, 0,
+ 208, 0, 499, 607, 648, 452, 212, 234, 235, 237,
+ 1306, 279, 283, 291, 294, 303, 304, 313, 367, 419,
+ 446, 442, 451, 1396, 578, 599, 612, 623, 629, 630,
+ 632, 633, 634, 635, 636, 639, 637, 407, 311, 495,
+ 333, 373, 1385, 1426, 425, 472, 240, 603, 496, 199,
+ 1300, 1305, 1298, 0, 254, 255, 1367, 574, 1301, 1299,
+ 1356, 1357, 1302, 1417, 1418, 1419, 1404, 649, 650, 651,
+ 652, 653, 654, 655, 656, 657, 658, 659, 660, 661,
+ 662, 663, 664, 665, 666, 644, 507, 513, 508, 509,
+ 510, 511, 512, 0, 514, 1389, 1294, 0, 1303, 1304,
+ 398, 1398, 590, 591, 667, 384, 486, 600, 335, 349,
+ 352, 341, 361, 0, 362, 337, 338, 343, 346, 347,
+ 348, 353, 354, 358, 364, 249, 210, 390, 399, 577,
+ 312, 216, 217, 218, 523, 524, 525, 526, 615, 616,
+ 620, 205, 462, 463, 464, 465, 292, 610, 309, 468,
+ 467, 331, 332, 379, 449, 539, 541, 552, 556, 558,
+ 560, 566, 569, 540, 542, 553, 557, 559, 561, 567,
+ 570, 529, 531, 533, 535, 548, 547, 544, 572, 573,
+ 550, 555, 534, 546, 551, 564, 571, 568, 528, 532,
+ 536, 545, 563, 562, 543, 554, 565, 549, 537, 530,
+ 538, 1360, 196, 221, 368, 1422, 454, 288, 645, 614,
+ 484, 609, 206, 223, 1297, 262, 1309, 1317, 0, 1323,
+ 1331, 1332, 1344, 1347, 1348, 1349, 1350, 1368, 1369, 1371,
+ 1379, 1381, 1384, 1386, 1393, 1405, 1425, 198, 200, 209,
+ 222, 232, 236, 243, 261, 276, 278, 285, 298, 310,
+ 318, 319, 322, 328, 380, 386, 387, 388, 389, 409,
+ 410, 411, 414, 417, 418, 421, 423, 424, 427, 431,
+ 435, 436, 437, 439, 441, 443, 455, 460, 474, 475,
+ 476, 477, 478, 481, 482, 488, 489, 490, 491, 492,
+ 500, 501, 515, 585, 587, 602, 621, 627, 480, 301,
+ 302, 444, 445, 314, 315, 641, 642, 300, 597, 628,
+ 595, 640, 622, 438, 378, 1359, 1365, 381, 281, 305,
+ 320, 1374, 613, 502, 227, 466, 290, 251, 1392, 1394,
+ 211, 246, 230, 259, 274, 277, 324, 391, 400, 429,
+ 434, 296, 271, 244, 459, 241, 485, 518, 519, 520,
+ 522, 395, 266, 433, 1355, 1383, 376, 575, 576, 316,
+ 396, 0, 0, 0, 0, 0, 1411, 1397, 527, 0,
+ 1339, 1414, 1308, 1327, 1424, 1330, 1333, 1376, 1286, 1354,
+ 416, 1324, 1312, 1281, 1319, 1282, 1310, 1341, 270, 1307,
+ 1399, 1358, 1413, 366, 267, 1288, 1279, 204, 505, 1313,
+ 430, 1329, 203, 1378, 487, 252, 377, 374, 582, 282,
+ 273, 269, 250, 317, 385, 428, 517, 422, 1420, 370,
+ 1364, 0, 497, 401, 0, 0, 0, 1343, 1403, 1352,
+ 1390, 1338, 1377, 1296, 1363, 1415, 1325, 1373, 1416, 323,
+ 248, 325, 202, 413, 498, 286, 0, 0, 0, 0,
+ 0, 194, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 238, 0, 0, 245, 0, 0, 0, 351, 360,
+ 359, 339, 340, 342, 344, 350, 357, 363, 336, 345,
+ 1321, 1370, 606, 1410, 1322, 1372, 265, 321, 272, 264,
+ 579, 1421, 1402, 1285, 1351, 1409, 1346, 0, 0, 229,
+ 1412, 1345, 0, 1375, 0, 1427, 1280, 1366, 0, 1283,
+ 1287, 1423, 1407, 1316, 275, 0, 0, 0, 0, 0,
+ 0, 0, 1342, 1353, 1387, 1391, 1336, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1314, 0, 1362, 0, 0,
+ 0, 1292, 1284, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1340, 0, 0, 0, 0,
+ 1295, 0, 1315, 1388, 0, 1278, 297, 1289, 402, 257,
+ 0, 453, 1395, 1406, 1337, 624, 1408, 1335, 1334, 1382,
+ 1293, 1401, 1328, 365, 1291, 330, 197, 225, 0, 1326,
+ 412, 461, 473, 1400, 1311, 1320, 253, 1318, 471, 426,
+ 601, 233, 284, 458, 432, 469, 440, 287, 1361, 1380,
+ 470, 372, 584, 450, 598, 625, 626, 263, 406, 611,
+ 521, 619, 643, 226, 260, 420, 506, 604, 494, 397,
+ 580, 581, 329, 493, 295, 201, 369, 631, 224, 479,
+ 371, 242, 231, 586, 608, 299, 289, 456, 638, 213,
+ 516, 596, 239, 483, 0, 0, 646, 247, 504, 215,
+ 593, 503, 393, 326, 327, 214, 0, 457, 268, 293,
+ 0, 0, 258, 415, 588, 589, 256, 647, 228, 618,
+ 220, 1290, 617, 408, 583, 594, 394, 383, 219, 592,
+ 392, 382, 334, 355, 356, 280, 307, 447, 375, 448,
+ 306, 308, 404, 403, 405, 207, 605, 0, 208, 0,
+ 499, 607, 648, 452, 212, 234, 235, 237, 1306, 279,
+ 283, 291, 294, 303, 304, 313, 367, 419, 446, 442,
+ 451, 1396, 578, 599, 612, 623, 629, 630, 632, 633,
+ 634, 635, 636, 639, 637, 407, 311, 495, 333, 373,
+ 1385, 1426, 425, 472, 240, 603, 496, 199, 1300, 1305,
+ 1298, 0, 254, 255, 1367, 574, 1301, 1299, 1356, 1357,
+ 1302, 1417, 1418, 1419, 1404, 649, 650, 651, 652, 653,
+ 654, 655, 656, 657, 658, 659, 660, 661, 662, 663,
+ 664, 665, 666, 644, 507, 513, 508, 509, 510, 511,
+ 512, 0, 514, 1389, 1294, 0, 1303, 1304, 398, 1398,
+ 590, 591, 667, 384, 486, 600, 335, 349, 352, 341,
+ 361, 0, 362, 337, 338, 343, 346, 347, 348, 353,
+ 354, 358, 364, 249, 210, 390, 399, 577, 312, 216,
+ 217, 218, 523, 524, 525, 526, 615, 616, 620, 205,
+ 462, 463, 464, 465, 292, 610, 309, 468, 467, 331,
+ 332, 379, 449, 539, 541, 552, 556, 558, 560, 566,
+ 569, 540, 542, 553, 557, 559, 561, 567, 570, 529,
+ 531, 533, 535, 548, 547, 544, 572, 573, 550, 555,
+ 534, 546, 551, 564, 571, 568, 528, 532, 536, 545,
+ 563, 562, 543, 554, 565, 549, 537, 530, 538, 1360,
+ 196, 221, 368, 1422, 454, 288, 645, 614, 484, 609,
+ 206, 223, 1297, 262, 1309, 1317, 0, 1323, 1331, 1332,
+ 1344, 1347, 1348, 1349, 1350, 1368, 1369, 1371, 1379, 1381,
+ 1384, 1386, 1393, 1405, 1425, 198, 200, 209, 222, 232,
+ 236, 243, 261, 276, 278, 285, 298, 310, 318, 319,
+ 322, 328, 380, 386, 387, 388, 389, 409, 410, 411,
+ 414, 417, 418, 421, 423, 424, 427, 431, 435, 436,
+ 437, 439, 441, 443, 455, 460, 474, 475, 476, 477,
+ 478, 481, 482, 488, 489, 490, 491, 492, 500, 501,
+ 515, 585, 587, 602, 621, 627, 480, 301, 302, 444,
+ 445, 314, 315, 641, 642, 300, 597, 628, 595, 640,
+ 622, 438, 378, 1359, 1365, 381, 281, 305, 320, 1374,
+ 613, 502, 227, 466, 290, 251, 1392, 1394, 211, 246,
+ 230, 259, 274, 277, 324, 391, 400, 429, 434, 296,
+ 271, 244, 459, 241, 485, 518, 519, 520, 522, 395,
+ 266, 433, 1355, 1383, 376, 575, 576, 316, 396, 0,
+ 0, 0, 0, 0, 1411, 1397, 527, 0, 1339, 1414,
+ 1308, 1327, 1424, 1330, 1333, 1376, 1286, 1354, 416, 1324,
+ 1312, 1281, 1319, 1282, 1310, 1341, 270, 1307, 1399, 1358,
+ 1413, 366, 267, 1288, 1279, 204, 505, 1313, 430, 1329,
+ 203, 1378, 487, 252, 377, 374, 582, 282, 273, 269,
+ 250, 317, 385, 428, 517, 422, 1420, 370, 1364, 0,
+ 497, 401, 0, 0, 0, 1343, 1403, 1352, 1390, 1338,
+ 1377, 1296, 1363, 1415, 1325, 1373, 1416, 323, 248, 325,
+ 202, 413, 498, 286, 0, 0, 0, 0, 0, 717,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 238,
+ 0, 0, 245, 0, 0, 0, 351, 360, 359, 339,
+ 340, 342, 344, 350, 357, 363, 336, 345, 1321, 1370,
+ 606, 1410, 1322, 1372, 265, 321, 272, 264, 579, 1421,
+ 1402, 1285, 1351, 1409, 1346, 0, 0, 229, 1412, 1345,
+ 0, 1375, 0, 1427, 1280, 1366, 0, 1283, 1287, 1423,
+ 1407, 1316, 275, 0, 0, 0, 0, 0, 0, 0,
+ 1342, 1353, 1387, 1391, 1336, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1314, 0, 1362, 0, 0, 0, 1292,
+ 1284, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1340, 0, 0, 0, 0, 1295, 0,
+ 1315, 1388, 0, 1278, 297, 1289, 402, 257, 0, 453,
+ 1395, 1406, 1337, 624, 1408, 1335, 1334, 1382, 1293, 1401,
+ 1328, 365, 1291, 330, 197, 225, 0, 1326, 412, 461,
+ 473, 1400, 1311, 1320, 253, 1318, 471, 426, 601, 233,
+ 284, 458, 432, 469, 440, 287, 1361, 1380, 470, 372,
+ 584, 450, 598, 625, 626, 263, 406, 611, 521, 619,
+ 643, 226, 260, 420, 506, 604, 494, 397, 580, 581,
+ 329, 493, 295, 201, 369, 631, 224, 479, 371, 242,
+ 231, 586, 608, 299, 289, 456, 638, 213, 516, 596,
+ 239, 483, 0, 0, 646, 247, 504, 215, 593, 503,
+ 393, 326, 327, 214, 0, 457, 268, 293, 0, 0,
+ 258, 415, 588, 589, 256, 647, 228, 618, 220, 1290,
+ 617, 408, 583, 594, 394, 383, 219, 592, 392, 382,
+ 334, 355, 356, 280, 307, 447, 375, 448, 306, 308,
+ 404, 403, 405, 207, 605, 0, 208, 0, 499, 607,
+ 648, 452, 212, 234, 235, 237, 1306, 279, 283, 291,
+ 294, 303, 304, 313, 367, 419, 446, 442, 451, 1396,
+ 578, 599, 612, 623, 629, 630, 632, 633, 634, 635,
+ 636, 639, 637, 407, 311, 495, 333, 373, 1385, 1426,
+ 425, 472, 240, 603, 496, 199, 1300, 1305, 1298, 0,
+ 254, 255, 1367, 574, 1301, 1299, 1356, 1357, 1302, 1417,
+ 1418, 1419, 1404, 649, 650, 651, 652, 653, 654, 655,
+ 656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
+ 666, 644, 507, 513, 508, 509, 510, 511, 512, 0,
+ 514, 1389, 1294, 0, 1303, 1304, 398, 1398, 590, 591,
+ 667, 384, 486, 600, 335, 349, 352, 341, 361, 0,
+ 362, 337, 338, 343, 346, 347, 348, 353, 354, 358,
+ 364, 249, 210, 390, 399, 577, 312, 216, 217, 218,
+ 523, 524, 525, 526, 615, 616, 620, 205, 462, 463,
+ 464, 465, 292, 610, 309, 468, 467, 331, 332, 379,
+ 449, 539, 541, 552, 556, 558, 560, 566, 569, 540,
+ 542, 553, 557, 559, 561, 567, 570, 529, 531, 533,
+ 535, 548, 547, 544, 572, 573, 550, 555, 534, 546,
+ 551, 564, 571, 568, 528, 532, 536, 545, 563, 562,
+ 543, 554, 565, 549, 537, 530, 538, 1360, 196, 221,
+ 368, 1422, 454, 288, 645, 614, 484, 609, 206, 223,
+ 1297, 262, 1309, 1317, 0, 1323, 1331, 1332, 1344, 1347,
+ 1348, 1349, 1350, 1368, 1369, 1371, 1379, 1381, 1384, 1386,
+ 1393, 1405, 1425, 198, 200, 209, 222, 232, 236, 243,
+ 261, 276, 278, 285, 298, 310, 318, 319, 322, 328,
+ 380, 386, 387, 388, 389, 409, 410, 411, 414, 417,
+ 418, 421, 423, 424, 427, 431, 435, 436, 437, 439,
+ 441, 443, 455, 460, 474, 475, 476, 477, 478, 481,
+ 482, 488, 489, 490, 491, 492, 500, 501, 515, 585,
+ 587, 602, 621, 627, 480, 301, 302, 444, 445, 314,
+ 315, 641, 642, 300, 597, 628, 595, 640, 622, 438,
+ 378, 1359, 1365, 381, 281, 305, 320, 1374, 613, 502,
+ 227, 466, 290, 251, 1392, 1394, 211, 246, 230, 259,
+ 274, 277, 324, 391, 400, 429, 434, 296, 271, 244,
+ 459, 241, 485, 518, 519, 520, 522, 395, 266, 433,
+ 1355, 1383, 376, 575, 576, 316, 396, 0, 0, 0,
+ 0, 0, 1411, 1397, 527, 0, 1339, 1414, 1308, 1327,
+ 1424, 1330, 1333, 1376, 1286, 1354, 416, 1324, 1312, 1281,
+ 1319, 1282, 1310, 1341, 270, 1307, 1399, 1358, 1413, 366,
+ 267, 1288, 1279, 204, 505, 1313, 430, 1329, 203, 1378,
+ 487, 252, 377, 374, 582, 282, 273, 269, 250, 317,
+ 385, 428, 517, 422, 1420, 370, 1364, 0, 497, 401,
+ 0, 0, 0, 1343, 1403, 1352, 1390, 1338, 1377, 1296,
+ 1363, 1415, 1325, 1373, 1416, 323, 248, 325, 202, 413,
+ 498, 286, 0, 0, 0, 0, 0, 952, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 238, 0, 0,
+ 245, 0, 0, 0, 351, 360, 359, 339, 340, 342,
+ 344, 350, 357, 363, 336, 345, 1321, 1370, 606, 1410,
+ 1322, 1372, 265, 321, 272, 264, 579, 1421, 1402, 1285,
+ 1351, 1409, 1346, 0, 0, 229, 1412, 1345, 0, 1375,
+ 0, 1427, 1280, 1366, 0, 1283, 1287, 1423, 1407, 1316,
+ 275, 0, 0, 0, 0, 0, 0, 0, 1342, 1353,
+ 1387, 1391, 1336, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1314, 0, 1362, 0, 0, 0, 1292, 1284, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1340, 0, 0, 0, 0, 1295, 0, 1315, 1388,
+ 0, 1278, 297, 1289, 402, 257, 0, 453, 1395, 1406,
+ 1337, 624, 1408, 1335, 1334, 1382, 1293, 1401, 1328, 365,
+ 1291, 330, 197, 225, 0, 1326, 412, 461, 473, 1400,
+ 1311, 1320, 253, 1318, 471, 426, 601, 233, 284, 458,
+ 432, 469, 440, 287, 1361, 1380, 470, 372, 584, 450,
+ 598, 625, 626, 263, 406, 611, 521, 619, 643, 226,
+ 260, 420, 506, 604, 494, 397, 580, 581, 329, 493,
+ 295, 201, 369, 631, 224, 479, 371, 242, 231, 586,
+ 608, 299, 289, 456, 638, 213, 516, 596, 239, 483,
+ 0, 0, 646, 247, 504, 215, 593, 503, 393, 326,
+ 327, 214, 0, 457, 268, 293, 0, 0, 258, 415,
+ 588, 589, 256, 647, 228, 618, 220, 1290, 617, 408,
+ 583, 594, 394, 383, 219, 592, 392, 382, 334, 355,
+ 356, 280, 307, 447, 375, 448, 306, 308, 404, 403,
+ 405, 207, 605, 0, 208, 0, 499, 607, 648, 452,
+ 212, 234, 235, 237, 1306, 279, 283, 291, 294, 303,
+ 304, 313, 367, 419, 446, 442, 451, 1396, 578, 599,
+ 612, 623, 629, 630, 632, 633, 634, 635, 636, 639,
+ 637, 407, 311, 495, 333, 373, 1385, 1426, 425, 472,
+ 240, 603, 496, 199, 1300, 1305, 1298, 0, 254, 255,
+ 1367, 574, 1301, 1299, 1356, 1357, 1302, 1417, 1418, 1419,
+ 1404, 649, 650, 651, 652, 653, 654, 655, 656, 657,
+ 658, 659, 660, 661, 662, 663, 664, 665, 666, 644,
+ 507, 513, 508, 509, 510, 511, 512, 0, 514, 1389,
+ 1294, 0, 1303, 1304, 398, 1398, 590, 591, 667, 384,
+ 486, 600, 335, 349, 352, 341, 361, 0, 362, 337,
+ 338, 343, 346, 347, 348, 353, 354, 358, 364, 249,
+ 210, 390, 399, 577, 312, 216, 217, 218, 523, 524,
+ 525, 526, 615, 616, 620, 205, 462, 463, 464, 465,
+ 292, 610, 309, 468, 467, 331, 332, 379, 449, 539,
+ 541, 552, 556, 558, 560, 566, 569, 540, 542, 553,
+ 557, 559, 561, 567, 570, 529, 531, 533, 535, 548,
+ 547, 544, 572, 573, 550, 555, 534, 546, 551, 564,
+ 571, 568, 528, 532, 536, 545, 563, 562, 543, 554,
+ 565, 549, 537, 530, 538, 1360, 196, 221, 368, 1422,
+ 454, 288, 645, 614, 484, 609, 206, 223, 1297, 262,
+ 1309, 1317, 0, 1323, 1331, 1332, 1344, 1347, 1348, 1349,
+ 1350, 1368, 1369, 1371, 1379, 1381, 1384, 1386, 1393, 1405,
+ 1425, 198, 200, 209, 222, 232, 236, 243, 261, 276,
+ 278, 285, 298, 310, 318, 319, 322, 328, 380, 386,
+ 387, 388, 389, 409, 410, 411, 414, 417, 418, 421,
+ 423, 424, 427, 431, 435, 436, 437, 439, 441, 443,
+ 455, 460, 474, 475, 476, 477, 478, 481, 482, 488,
+ 489, 490, 491, 492, 500, 501, 515, 585, 587, 602,
+ 621, 627, 480, 301, 302, 444, 445, 314, 315, 641,
+ 642, 300, 597, 628, 595, 640, 622, 438, 378, 1359,
+ 1365, 381, 281, 305, 320, 1374, 613, 502, 227, 466,
+ 290, 251, 1392, 1394, 211, 246, 230, 259, 274, 277,
+ 324, 391, 400, 429, 434, 296, 271, 244, 459, 241,
+ 485, 518, 519, 520, 522, 395, 266, 433, 1355, 1383,
+ 376, 575, 576, 316, 396, 0, 0, 0, 0, 0,
+ 0, 0, 527, 0, 770, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 416, 0, 0, 0, 757, 0,
+ 0, 0, 270, 762, 0, 0, 0, 366, 267, 0,
+ 0, 204, 505, 0, 430, 0, 203, 0, 487, 252,
+ 377, 374, 582, 282, 273, 269, 250, 317, 385, 428,
+ 517, 422, 769, 370, 0, 0, 497, 401, 0, 0,
+ 0, 0, 0, 764, 765, 0, 0, 0, 0, 0,
+ 0, 0, 0, 323, 248, 325, 202, 413, 498, 286,
+ 0, 95, 0, 0, 1016, 952, 741, 918, 956, 1017,
+ 969, 970, 971, 957, 0, 238, 958, 959, 245, 960,
+ 0, 917, 800, 802, 801, 867, 868, 869, 870, 871,
+ 872, 873, 803, 804, 798, 965, 606, 972, 973, 0,
+ 265, 321, 272, 264, 579, 0, 0, 2209, 2210, 2211,
+ 0, 0, 0, 229, 0, 0, 0, 0, 0, 0,
+ 0, 737, 754, 0, 768, 0, 0, 0, 275, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 751, 752, 0, 0, 0,
+ 0, 912, 0, 753, 0, 0, 761, 974, 975, 976,
+ 977, 978, 979, 980, 981, 982, 983, 984, 985, 986,
+ 987, 988, 989, 990, 991, 992, 993, 994, 995, 996,
+ 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006,
+ 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 763,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 297, 0, 402, 257, 0, 453, 911, 0, 0, 624,
+ 0, 0, 909, 0, 0, 0, 0, 365, 0, 330,
+ 197, 225, 0, 0, 412, 461, 473, 0, 0, 0,
+ 962, 0, 471, 426, 601, 233, 284, 458, 432, 469,
+ 440, 287, 0, 0, 470, 372, 584, 450, 598, 625,
+ 626, 263, 406, 611, 521, 619, 643, 226, 260, 420,
+ 506, 604, 494, 397, 580, 581, 329, 493, 295, 201,
+ 369, 631, 224, 479, 371, 242, 231, 586, 608, 299,
+ 289, 456, 638, 213, 516, 596, 239, 483, 0, 0,
+ 646, 247, 504, 215, 593, 503, 393, 326, 327, 214,
+ 0, 457, 268, 293, 0, 0, 258, 415, 963, 964,
+ 256, 647, 808, 618, 220, 0, 617, 408, 583, 594,
+ 394, 383, 219, 592, 392, 382, 334, 816, 817, 280,
+ 307, 893, 892, 891, 306, 308, 889, 890, 888, 207,
+ 605, 0, 208, 0, 499, 607, 648, 452, 212, 234,
+ 235, 237, 0, 279, 283, 291, 294, 303, 304, 313,
+ 367, 419, 446, 442, 451, 0, 578, 599, 612, 623,
+ 629, 630, 632, 633, 634, 635, 636, 639, 637, 407,
+ 311, 495, 333, 373, 0, 0, 425, 472, 240, 603,
+ 496, 899, 921, 910, 774, 775, 900, 901, 925, 902,
+ 777, 778, 922, 923, 771, 772, 776, 924, 926, 649,
+ 650, 651, 652, 653, 654, 655, 656, 657, 658, 659,
+ 660, 661, 662, 663, 664, 665, 666, 644, 507, 513,
+ 508, 509, 510, 511, 512, 0, 514, 913, 760, 759,
+ 0, 766, 767, 0, 796, 797, 799, 805, 806, 807,
+ 818, 865, 866, 874, 876, 877, 875, 878, 879, 880,
+ 883, 884, 885, 886, 881, 882, 887, 779, 783, 780,
+ 781, 782, 794, 784, 785, 786, 787, 788, 789, 790,
+ 791, 792, 793, 795, 936, 937, 938, 939, 940, 941,
+ 811, 815, 814, 812, 813, 809, 810, 837, 836, 838,
+ 839, 840, 841, 842, 843, 845, 844, 846, 847, 848,
+ 849, 850, 851, 819, 820, 823, 824, 822, 821, 825,
+ 834, 835, 826, 827, 828, 829, 830, 831, 833, 832,
+ 852, 853, 854, 855, 856, 858, 857, 861, 862, 860,
+ 859, 864, 863, 758, 196, 221, 368, 0, 454, 288,
+ 645, 614, 484, 609, 206, 223, 927, 262, 928, 0,
+ 0, 932, 0, 0, 0, 934, 933, 0, 935, 897,
+ 896, 0, 0, 929, 930, 0, 931, 0, 0, 198,
+ 200, 209, 222, 232, 236, 243, 261, 276, 278, 285,
+ 298, 310, 318, 319, 322, 328, 380, 386, 387, 388,
+ 389, 409, 410, 411, 414, 417, 418, 421, 423, 424,
+ 427, 431, 435, 436, 437, 439, 441, 443, 455, 460,
+ 474, 475, 476, 477, 478, 481, 482, 488, 489, 490,
+ 491, 492, 500, 501, 515, 585, 587, 602, 621, 627,
+ 480, 942, 943, 944, 945, 946, 947, 948, 949, 300,
+ 597, 628, 595, 640, 622, 438, 378, 0, 0, 381,
+ 281, 305, 320, 0, 613, 502, 227, 466, 290, 251,
+ 967, 0, 211, 246, 230, 259, 274, 277, 324, 391,
+ 400, 429, 434, 296, 271, 244, 459, 241, 485, 518,
+ 519, 520, 522, 395, 266, 433, 396, 0, 376, 575,
+ 576, 316, 0, 0, 527, 0, 770, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 416, 0, 0, 0,
+ 757, 0, 0, 0, 270, 762, 0, 0, 0, 366,
+ 267, 0, 0, 204, 505, 0, 430, 0, 203, 0,
+ 487, 252, 377, 374, 582, 282, 273, 269, 250, 317,
+ 385, 428, 517, 422, 769, 370, 0, 0, 497, 401,
+ 0, 0, 0, 0, 0, 764, 765, 0, 0, 0,
+ 0, 0, 0, 2416, 0, 323, 248, 325, 202, 413,
+ 498, 286, 0, 95, 0, 0, 1016, 952, 741, 918,
+ 956, 1017, 969, 970, 971, 957, 0, 238, 958, 959,
+ 245, 960, 0, 917, 800, 802, 801, 867, 868, 869,
+ 870, 871, 872, 873, 803, 804, 798, 965, 606, 972,
+ 973, 2417, 265, 321, 272, 264, 579, 0, 0, 0,
+ 0, 0, 0, 0, 0, 229, 0, 0, 0, 0,
+ 0, 0, 0, 737, 754, 0, 768, 0, 0, 0,
+ 275, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 751, 752, 0,
+ 0, 0, 0, 912, 0, 753, 0, 0, 761, 974,
+ 975, 976, 977, 978, 979, 980, 981, 982, 983, 984,
+ 985, 986, 987, 988, 989, 990, 991, 992, 993, 994,
+ 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004,
+ 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014,
+ 1015, 763, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 297, 0, 402, 257, 0, 453, 911, 0,
+ 0, 624, 0, 0, 909, 0, 0, 0, 0, 365,
+ 0, 330, 197, 225, 0, 0, 412, 461, 473, 0,
+ 0, 0, 962, 0, 471, 426, 601, 233, 284, 458,
+ 432, 469, 440, 287, 0, 0, 470, 372, 584, 450,
+ 598, 625, 626, 263, 406, 611, 521, 619, 643, 226,
+ 260, 420, 506, 604, 494, 397, 580, 581, 329, 493,
+ 295, 201, 369, 631, 224, 479, 371, 242, 231, 586,
+ 608, 299, 289, 456, 638, 213, 516, 596, 239, 483,
+ 0, 0, 646, 247, 504, 215, 593, 503, 393, 326,
+ 327, 214, 0, 457, 268, 293, 0, 0, 258, 415,
+ 963, 964, 256, 647, 808, 618, 220, 0, 617, 408,
+ 583, 594, 394, 383, 219, 592, 392, 382, 334, 816,
+ 817, 280, 307, 893, 892, 891, 306, 308, 889, 890,
+ 888, 207, 605, 0, 208, 0, 499, 607, 648, 452,
+ 212, 234, 235, 237, 0, 279, 283, 291, 294, 303,
+ 304, 313, 367, 419, 446, 442, 451, 0, 578, 599,
+ 612, 623, 629, 630, 632, 633, 634, 635, 636, 639,
+ 637, 407, 311, 495, 333, 373, 0, 0, 425, 472,
+ 240, 603, 496, 899, 921, 910, 774, 775, 900, 901,
+ 925, 902, 777, 778, 922, 923, 771, 772, 776, 924,
+ 926, 649, 650, 651, 652, 653, 654, 655, 656, 657,
+ 658, 659, 660, 661, 662, 663, 664, 665, 666, 644,
+ 507, 513, 508, 509, 510, 511, 512, 0, 514, 913,
+ 760, 759, 0, 766, 767, 0, 796, 797, 799, 805,
+ 806, 807, 818, 865, 866, 874, 876, 877, 875, 878,
+ 879, 880, 883, 884, 885, 886, 881, 882, 887, 779,
+ 783, 780, 781, 782, 794, 784, 785, 786, 787, 788,
+ 789, 790, 791, 792, 793, 795, 936, 937, 938, 939,
+ 940, 941, 811, 815, 814, 812, 813, 809, 810, 837,
+ 836, 838, 839, 840, 841, 842, 843, 845, 844, 846,
+ 847, 848, 849, 850, 851, 819, 820, 823, 824, 822,
+ 821, 825, 834, 835, 826, 827, 828, 829, 830, 831,
+ 833, 832, 852, 853, 854, 855, 856, 858, 857, 861,
+ 862, 860, 859, 864, 863, 758, 196, 221, 368, 0,
+ 454, 288, 645, 614, 484, 609, 206, 223, 927, 262,
+ 928, 0, 0, 932, 0, 0, 0, 934, 933, 0,
+ 935, 897, 896, 0, 0, 929, 930, 0, 931, 0,
+ 0, 198, 200, 209, 222, 232, 236, 243, 261, 276,
+ 278, 285, 298, 310, 318, 319, 322, 328, 380, 386,
+ 387, 388, 389, 409, 410, 411, 414, 417, 418, 421,
+ 423, 424, 427, 431, 435, 436, 437, 439, 441, 443,
+ 455, 460, 474, 475, 476, 477, 478, 481, 482, 488,
+ 489, 490, 491, 492, 500, 501, 515, 585, 587, 602,
+ 621, 627, 480, 942, 943, 944, 945, 946, 947, 948,
+ 949, 300, 597, 628, 595, 640, 622, 438, 378, 0,
+ 0, 381, 281, 305, 320, 0, 613, 502, 227, 466,
+ 290, 251, 967, 0, 211, 246, 230, 259, 274, 277,
+ 324, 391, 400, 429, 434, 296, 271, 244, 459, 241,
+ 485, 518, 519, 520, 522, 395, 266, 433, 396, 0,
+ 376, 575, 576, 316, 0, 86, 527, 0, 770, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 416, 0,
+ 0, 0, 757, 0, 0, 0, 270, 762, 0, 0,
+ 0, 366, 267, 0, 0, 204, 505, 0, 430, 0,
+ 203, 0, 487, 252, 377, 374, 582, 282, 273, 269,
+ 250, 317, 385, 428, 517, 422, 769, 370, 0, 0,
+ 497, 401, 0, 0, 0, 0, 0, 764, 765, 0,
+ 0, 0, 0, 0, 0, 0, 0, 323, 248, 325,
+ 202, 413, 498, 286, 0, 95, 0, 0, 1016, 952,
+ 741, 918, 956, 1017, 969, 970, 971, 957, 0, 238,
+ 958, 959, 245, 960, 0, 917, 800, 802, 801, 867,
+ 868, 869, 870, 871, 872, 873, 803, 804, 798, 965,
+ 606, 972, 973, 0, 265, 321, 272, 264, 579, 0,
+ 0, 0, 0, 0, 0, 0, 0, 229, 0, 0,
+ 0, 0, 0, 0, 0, 737, 754, 0, 768, 0,
+ 0, 0, 275, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 751,
+ 752, 0, 0, 0, 0, 912, 0, 753, 0, 0,
+ 761, 974, 975, 976, 977, 978, 979, 980, 981, 982,
+ 983, 984, 985, 986, 987, 988, 989, 990, 991, 992,
+ 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002,
+ 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012,
+ 1013, 1014, 1015, 763, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 297, 0, 402, 257, 0, 453,
+ 911, 0, 0, 624, 0, 0, 909, 0, 0, 0,
+ 0, 365, 0, 330, 197, 225, 0, 0, 412, 461,
+ 473, 0, 0, 0, 962, 0, 471, 426, 601, 233,
+ 284, 458, 432, 469, 440, 287, 0, 0, 470, 372,
+ 584, 450, 598, 625, 626, 263, 406, 611, 521, 619,
+ 643, 226, 260, 420, 506, 604, 494, 397, 580, 581,
+ 329, 493, 295, 201, 369, 631, 224, 479, 371, 242,
+ 231, 586, 608, 299, 289, 456, 638, 213, 516, 596,
+ 239, 483, 0, 0, 646, 247, 504, 215, 593, 503,
+ 393, 326, 327, 214, 0, 457, 268, 293, 0, 0,
+ 258, 415, 963, 964, 256, 647, 808, 618, 220, 0,
+ 617, 408, 583, 594, 394, 383, 219, 592, 392, 382,
+ 334, 816, 817, 280, 307, 893, 892, 891, 306, 308,
+ 889, 890, 888, 207, 605, 0, 208, 0, 499, 607,
+ 648, 452, 212, 234, 235, 237, 0, 279, 283, 291,
+ 294, 303, 304, 313, 367, 419, 446, 442, 451, 0,
+ 578, 599, 612, 623, 629, 630, 632, 633, 634, 635,
+ 636, 639, 637, 407, 311, 495, 333, 373, 0, 0,
+ 425, 472, 240, 603, 496, 899, 921, 910, 774, 775,
+ 900, 901, 925, 902, 777, 778, 922, 923, 771, 772,
+ 776, 924, 926, 649, 650, 651, 652, 653, 654, 655,
+ 656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
+ 666, 644, 507, 513, 508, 509, 510, 511, 512, 0,
+ 514, 913, 760, 759, 0, 766, 767, 0, 796, 797,
+ 799, 805, 806, 807, 818, 865, 866, 874, 876, 877,
+ 875, 878, 879, 880, 883, 884, 885, 886, 881, 882,
+ 887, 779, 783, 780, 781, 782, 794, 784, 785, 786,
+ 787, 788, 789, 790, 791, 792, 793, 795, 936, 937,
+ 938, 939, 940, 941, 811, 815, 814, 812, 813, 809,
+ 810, 837, 836, 838, 839, 840, 841, 842, 843, 845,
+ 844, 846, 847, 848, 849, 850, 851, 819, 820, 823,
+ 824, 822, 821, 825, 834, 835, 826, 827, 828, 829,
+ 830, 831, 833, 832, 852, 853, 854, 855, 856, 858,
+ 857, 861, 862, 860, 859, 864, 863, 758, 196, 221,
+ 368, 94, 454, 288, 645, 614, 484, 609, 206, 223,
+ 927, 262, 928, 0, 0, 932, 0, 0, 0, 934,
+ 933, 0, 935, 897, 896, 0, 0, 929, 930, 0,
+ 931, 0, 0, 198, 200, 209, 222, 232, 236, 243,
+ 261, 276, 278, 285, 298, 310, 318, 319, 322, 328,
+ 380, 386, 387, 388, 389, 409, 410, 411, 414, 417,
+ 418, 421, 423, 424, 427, 431, 435, 436, 437, 439,
+ 441, 443, 455, 460, 474, 475, 476, 477, 478, 481,
+ 482, 488, 489, 490, 491, 492, 500, 501, 515, 585,
+ 587, 602, 621, 627, 480, 942, 943, 944, 945, 946,
+ 947, 948, 949, 300, 597, 628, 595, 640, 622, 438,
+ 378, 0, 0, 381, 281, 305, 320, 0, 613, 502,
+ 227, 466, 290, 251, 967, 0, 211, 246, 230, 259,
+ 274, 277, 324, 391, 400, 429, 434, 296, 271, 244,
+ 459, 241, 485, 518, 519, 520, 522, 395, 266, 433,
+ 396, 0, 376, 575, 576, 316, 0, 0, 527, 0,
+ 770, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 416, 0, 0, 0, 757, 0, 0, 0, 270, 762,
+ 0, 0, 0, 366, 267, 0, 0, 204, 505, 0,
+ 430, 0, 203, 0, 487, 252, 377, 374, 582, 282,
+ 273, 269, 250, 317, 385, 428, 517, 422, 769, 370,
+ 0, 0, 497, 401, 0, 0, 0, 0, 0, 764,
+ 765, 0, 0, 0, 0, 0, 0, 0, 0, 323,
+ 248, 325, 202, 413, 498, 286, 0, 95, 0, 0,
+ 1016, 952, 741, 918, 956, 1017, 969, 970, 971, 957,
+ 0, 238, 958, 959, 245, 960, 0, 917, 800, 802,
+ 801, 867, 868, 869, 870, 871, 872, 873, 803, 804,
+ 798, 965, 606, 972, 973, 0, 265, 321, 272, 264,
+ 579, 0, 0, 0, 0, 0, 0, 0, 0, 229,
+ 0, 0, 0, 0, 0, 0, 0, 737, 754, 0,
+ 768, 0, 0, 0, 275, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 751, 752, 0, 0, 0, 0, 912, 0, 753,
+ 0, 0, 761, 974, 975, 976, 977, 978, 979, 980,
+ 981, 982, 983, 984, 985, 986, 987, 988, 989, 990,
+ 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000,
+ 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010,
+ 1011, 1012, 1013, 1014, 1015, 763, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 297, 0, 402, 257,
+ 0, 453, 911, 0, 0, 624, 0, 0, 909, 0,
+ 0, 0, 0, 365, 0, 330, 197, 225, 0, 0,
+ 412, 461, 473, 0, 0, 0, 962, 0, 471, 426,
+ 601, 233, 284, 458, 432, 469, 440, 287, 4070, 0,
+ 470, 372, 584, 450, 598, 625, 626, 263, 406, 611,
+ 521, 619, 643, 226, 260, 420, 506, 604, 494, 397,
+ 580, 581, 329, 493, 295, 201, 369, 631, 224, 479,
+ 371, 242, 231, 586, 608, 299, 289, 456, 638, 213,
+ 516, 596, 239, 483, 0, 0, 646, 247, 504, 215,
+ 593, 503, 393, 326, 327, 214, 0, 457, 268, 293,
+ 0, 0, 258, 415, 963, 964, 256, 647, 808, 618,
+ 220, 0, 617, 408, 583, 594, 394, 383, 219, 592,
+ 392, 382, 334, 816, 817, 280, 307, 893, 892, 891,
+ 306, 308, 889, 890, 888, 207, 605, 0, 208, 0,
+ 499, 607, 648, 452, 212, 234, 235, 237, 0, 279,
+ 283, 291, 294, 303, 304, 313, 367, 419, 446, 442,
+ 451, 0, 578, 599, 612, 623, 629, 630, 632, 633,
+ 634, 635, 636, 639, 637, 407, 311, 495, 333, 373,
+ 0, 0, 425, 472, 240, 603, 496, 899, 921, 910,
+ 774, 775, 900, 901, 925, 902, 777, 778, 922, 923,
+ 771, 772, 776, 924, 926, 649, 650, 651, 652, 653,
+ 654, 655, 656, 657, 658, 659, 660, 661, 662, 663,
+ 664, 665, 666, 644, 507, 513, 508, 509, 510, 511,
+ 512, 0, 514, 913, 760, 759, 0, 766, 767, 0,
+ 796, 797, 799, 805, 806, 807, 818, 865, 866, 874,
+ 876, 877, 875, 878, 879, 880, 883, 884, 885, 886,
+ 881, 882, 887, 779, 783, 780, 781, 782, 794, 784,
+ 785, 786, 787, 788, 789, 790, 791, 792, 793, 795,
+ 936, 937, 938, 939, 940, 941, 811, 815, 814, 812,
+ 813, 809, 810, 837, 836, 838, 839, 840, 841, 842,
+ 843, 845, 844, 846, 847, 848, 849, 850, 851, 819,
+ 820, 823, 824, 822, 821, 825, 834, 835, 826, 827,
+ 828, 829, 830, 831, 833, 832, 852, 853, 854, 855,
+ 856, 858, 857, 861, 862, 860, 859, 864, 863, 758,
+ 196, 221, 368, 0, 454, 288, 645, 614, 484, 609,
+ 206, 223, 927, 262, 928, 0, 0, 932, 0, 0,
+ 0, 934, 933, 0, 935, 897, 896, 0, 0, 929,
+ 930, 0, 931, 0, 0, 198, 200, 209, 222, 232,
+ 236, 243, 261, 276, 278, 285, 298, 310, 318, 319,
+ 322, 328, 380, 386, 387, 388, 389, 409, 410, 411,
+ 414, 417, 418, 421, 423, 424, 427, 431, 435, 436,
+ 437, 439, 441, 443, 455, 460, 474, 475, 476, 477,
+ 478, 481, 482, 488, 489, 490, 491, 492, 500, 501,
+ 515, 585, 587, 602, 621, 627, 480, 942, 943, 944,
+ 945, 946, 947, 948, 949, 300, 597, 628, 595, 640,
+ 622, 438, 378, 0, 0, 381, 281, 305, 320, 0,
+ 613, 502, 227, 466, 290, 251, 967, 0, 211, 246,
+ 230, 259, 274, 277, 324, 391, 400, 429, 434, 296,
+ 271, 244, 459, 241, 485, 518, 519, 520, 522, 395,
+ 266, 433, 396, 0, 376, 575, 576, 316, 0, 0,
+ 527, 0, 770, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 416, 0, 0, 0, 757, 0, 0, 0,
+ 270, 762, 0, 0, 0, 366, 267, 0, 0, 204,
+ 505, 0, 430, 0, 203, 0, 487, 252, 377, 374,
+ 582, 282, 273, 269, 250, 317, 385, 428, 517, 422,
+ 769, 370, 0, 0, 497, 401, 0, 0, 0, 0,
+ 0, 764, 765, 0, 0, 0, 0, 0, 0, 0,
+ 0, 323, 248, 325, 202, 413, 498, 286, 0, 95,
+ 0, 1736, 1016, 952, 741, 918, 956, 1017, 969, 970,
+ 971, 957, 0, 238, 958, 959, 245, 960, 0, 917,
+ 800, 802, 801, 867, 868, 869, 870, 871, 872, 873,
+ 803, 804, 798, 965, 606, 972, 973, 0, 265, 321,
+ 272, 264, 579, 0, 0, 0, 0, 0, 0, 0,
+ 0, 229, 0, 0, 0, 0, 0, 0, 0, 737,
+ 754, 0, 768, 0, 0, 0, 275, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 751, 752, 0, 0, 0, 0, 912,
+ 0, 753, 0, 0, 761, 974, 975, 976, 977, 978,
+ 979, 980, 981, 982, 983, 984, 985, 986, 987, 988,
+ 989, 990, 991, 992, 993, 994, 995, 996, 997, 998,
+ 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008,
+ 1009, 1010, 1011, 1012, 1013, 1014, 1015, 763, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 297, 0,
+ 402, 257, 0, 453, 911, 0, 0, 624, 0, 0,
+ 909, 0, 0, 0, 0, 365, 0, 330, 197, 225,
+ 0, 0, 412, 461, 473, 0, 0, 0, 962, 0,
+ 471, 426, 601, 233, 284, 458, 432, 469, 440, 287,
+ 0, 0, 470, 372, 584, 450, 598, 625, 626, 263,
+ 406, 611, 521, 619, 643, 226, 260, 420, 506, 604,
+ 494, 397, 580, 581, 329, 493, 295, 201, 369, 631,
+ 224, 479, 371, 242, 231, 586, 608, 299, 289, 456,
+ 638, 213, 516, 596, 239, 483, 0, 0, 646, 247,
+ 504, 215, 593, 503, 393, 326, 327, 214, 0, 457,
+ 268, 293, 0, 0, 258, 415, 963, 964, 256, 647,
+ 808, 618, 220, 0, 617, 408, 583, 594, 394, 383,
+ 219, 592, 392, 382, 334, 816, 817, 280, 307, 893,
+ 892, 891, 306, 308, 889, 890, 888, 207, 605, 0,
+ 208, 0, 499, 607, 648, 452, 212, 234, 235, 237,
+ 0, 279, 283, 291, 294, 303, 304, 313, 367, 419,
+ 446, 442, 451, 0, 578, 599, 612, 623, 629, 630,
+ 632, 633, 634, 635, 636, 639, 637, 407, 311, 495,
+ 333, 373, 0, 0, 425, 472, 240, 603, 496, 899,
+ 921, 910, 774, 775, 900, 901, 925, 902, 777, 778,
+ 922, 923, 771, 772, 776, 924, 926, 649, 650, 651,
+ 652, 653, 654, 655, 656, 657, 658, 659, 660, 661,
+ 662, 663, 664, 665, 666, 644, 507, 513, 508, 509,
+ 510, 511, 512, 0, 514, 913, 760, 759, 0, 766,
+ 767, 0, 796, 797, 799, 805, 806, 807, 818, 865,
+ 866, 874, 876, 877, 875, 878, 879, 880, 883, 884,
+ 885, 886, 881, 882, 887, 779, 783, 780, 781, 782,
+ 794, 784, 785, 786, 787, 788, 789, 790, 791, 792,
+ 793, 795, 936, 937, 938, 939, 940, 941, 811, 815,
+ 814, 812, 813, 809, 810, 837, 836, 838, 839, 840,
+ 841, 842, 843, 845, 844, 846, 847, 848, 849, 850,
+ 851, 819, 820, 823, 824, 822, 821, 825, 834, 835,
+ 826, 827, 828, 829, 830, 831, 833, 832, 852, 853,
+ 854, 855, 856, 858, 857, 861, 862, 860, 859, 864,
+ 863, 758, 196, 221, 368, 0, 454, 288, 645, 614,
+ 484, 609, 206, 223, 927, 262, 928, 0, 0, 932,
+ 0, 0, 0, 934, 933, 0, 935, 897, 896, 0,
+ 0, 929, 930, 0, 931, 0, 0, 198, 200, 209,
+ 222, 232, 236, 243, 261, 276, 278, 285, 298, 310,
+ 318, 319, 322, 328, 380, 386, 387, 388, 389, 409,
+ 410, 411, 414, 417, 418, 421, 423, 424, 427, 431,
+ 435, 436, 437, 439, 441, 443, 455, 460, 474, 475,
+ 476, 477, 478, 481, 482, 488, 489, 490, 491, 492,
+ 500, 501, 515, 585, 587, 602, 621, 627, 480, 942,
+ 943, 944, 945, 946, 947, 948, 949, 300, 597, 628,
+ 595, 640, 622, 438, 378, 0, 0, 381, 281, 305,
+ 320, 0, 613, 502, 227, 466, 290, 251, 967, 0,
+ 211, 246, 230, 259, 274, 277, 324, 391, 400, 429,
+ 434, 296, 271, 244, 459, 241, 485, 518, 519, 520,
+ 522, 395, 266, 433, 396, 0, 376, 575, 576, 316,
+ 0, 0, 527, 0, 770, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 416, 0, 0, 0, 757, 0,
+ 0, 0, 270, 762, 0, 0, 0, 366, 267, 0,
+ 0, 204, 505, 0, 430, 0, 203, 0, 487, 252,
+ 377, 374, 582, 282, 273, 269, 250, 317, 385, 428,
+ 517, 422, 769, 370, 0, 0, 497, 401, 0, 0,
+ 0, 0, 0, 764, 765, 0, 0, 0, 0, 0,
+ 0, 0, 0, 323, 248, 325, 202, 413, 498, 286,
+ 0, 95, 0, 0, 1016, 952, 741, 918, 956, 1017,
+ 969, 970, 971, 957, 0, 238, 958, 959, 245, 960,
+ 0, 917, 800, 802, 801, 867, 868, 869, 870, 871,
+ 872, 873, 803, 804, 798, 965, 606, 972, 973, 0,
+ 265, 321, 272, 264, 579, 0, 0, 0, 0, 0,
+ 0, 0, 0, 229, 0, 0, 0, 0, 0, 0,
+ 0, 737, 754, 0, 768, 0, 0, 0, 275, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 751, 752, 1062, 0, 0,
+ 0, 912, 0, 753, 0, 0, 761, 974, 975, 976,
+ 977, 978, 979, 980, 981, 982, 983, 984, 985, 986,
+ 987, 988, 989, 990, 991, 992, 993, 994, 995, 996,
+ 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006,
+ 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 763,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 297, 0, 402, 257, 0, 453, 911, 0, 0, 624,
+ 0, 0, 909, 0, 0, 0, 0, 365, 0, 330,
+ 197, 225, 0, 0, 412, 461, 473, 0, 0, 0,
+ 962, 0, 471, 426, 601, 233, 284, 458, 432, 469,
+ 440, 287, 0, 0, 470, 372, 584, 450, 598, 625,
+ 626, 263, 406, 611, 521, 619, 643, 226, 260, 420,
+ 506, 604, 494, 397, 580, 581, 329, 493, 295, 201,
+ 369, 631, 224, 479, 371, 242, 231, 586, 608, 299,
+ 289, 456, 638, 213, 516, 596, 239, 483, 0, 0,
+ 646, 247, 504, 215, 593, 503, 393, 326, 327, 214,
+ 0, 457, 268, 293, 0, 0, 258, 415, 963, 964,
+ 256, 647, 808, 618, 220, 0, 617, 408, 583, 594,
+ 394, 383, 219, 592, 392, 382, 334, 816, 817, 280,
+ 307, 893, 892, 891, 306, 308, 889, 890, 888, 207,
+ 605, 0, 208, 0, 499, 607, 648, 452, 212, 234,
+ 235, 237, 0, 279, 283, 291, 294, 303, 304, 313,
+ 367, 419, 446, 442, 451, 0, 578, 599, 612, 623,
+ 629, 630, 632, 633, 634, 635, 636, 639, 637, 407,
+ 311, 495, 333, 373, 0, 0, 425, 472, 240, 603,
+ 496, 899, 921, 910, 774, 775, 900, 901, 925, 902,
+ 777, 778, 922, 923, 771, 772, 776, 924, 926, 649,
+ 650, 651, 652, 653, 654, 655, 656, 657, 658, 659,
+ 660, 661, 662, 663, 664, 665, 666, 644, 507, 513,
+ 508, 509, 510, 511, 512, 0, 514, 913, 760, 759,
+ 0, 766, 767, 0, 796, 797, 799, 805, 806, 807,
+ 818, 865, 866, 874, 876, 877, 875, 878, 879, 880,
+ 883, 884, 885, 886, 881, 882, 887, 779, 783, 780,
+ 781, 782, 794, 784, 785, 786, 787, 788, 789, 790,
+ 791, 792, 793, 795, 936, 937, 938, 939, 940, 941,
+ 811, 815, 814, 812, 813, 809, 810, 837, 836, 838,
+ 839, 840, 841, 842, 843, 845, 844, 846, 847, 848,
+ 849, 850, 851, 819, 820, 823, 824, 822, 821, 825,
+ 834, 835, 826, 827, 828, 829, 830, 831, 833, 832,
+ 852, 853, 854, 855, 856, 858, 857, 861, 862, 860,
+ 859, 864, 863, 758, 196, 221, 368, 0, 454, 288,
+ 645, 614, 484, 609, 206, 223, 927, 262, 928, 0,
+ 0, 932, 0, 0, 0, 934, 933, 0, 935, 897,
+ 896, 0, 0, 929, 930, 0, 931, 0, 0, 198,
+ 200, 209, 222, 232, 236, 243, 261, 276, 278, 285,
+ 298, 310, 318, 319, 322, 328, 380, 386, 387, 388,
+ 389, 409, 410, 411, 414, 417, 418, 421, 423, 424,
+ 427, 431, 435, 436, 437, 439, 441, 443, 455, 460,
+ 474, 475, 476, 477, 478, 481, 482, 488, 489, 490,
+ 491, 492, 500, 501, 515, 585, 587, 602, 621, 627,
+ 480, 942, 943, 944, 945, 946, 947, 948, 949, 300,
+ 597, 628, 595, 640, 622, 438, 378, 0, 0, 381,
+ 281, 305, 320, 0, 613, 502, 227, 466, 290, 251,
+ 967, 0, 211, 246, 230, 259, 274, 277, 324, 391,
+ 400, 429, 434, 296, 271, 244, 459, 241, 485, 518,
+ 519, 520, 522, 395, 266, 433, 396, 0, 376, 575,
+ 576, 316, 0, 0, 527, 0, 770, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 416, 0, 0, 0,
+ 757, 0, 0, 0, 270, 762, 0, 0, 0, 366,
+ 267, 0, 0, 204, 505, 0, 430, 0, 203, 0,
+ 487, 252, 377, 374, 582, 282, 273, 269, 250, 317,
+ 385, 428, 517, 422, 769, 370, 0, 0, 497, 401,
+ 0, 0, 0, 0, 0, 764, 765, 0, 0, 0,
+ 0, 0, 0, 0, 0, 323, 248, 325, 202, 413,
+ 498, 286, 0, 95, 0, 0, 1016, 952, 741, 918,
+ 956, 1017, 969, 970, 971, 957, 0, 238, 958, 959,
+ 245, 960, 0, 917, 800, 802, 801, 867, 868, 869,
+ 870, 871, 872, 873, 803, 804, 798, 965, 606, 972,
+ 973, 0, 265, 321, 272, 264, 579, 0, 0, 0,
+ 0, 0, 0, 0, 0, 229, 0, 0, 0, 0,
+ 0, 0, 0, 737, 754, 0, 768, 0, 0, 0,
+ 275, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 751, 752, 0,
+ 0, 0, 0, 912, 0, 753, 0, 0, 761, 974,
+ 975, 976, 977, 978, 979, 980, 981, 982, 983, 984,
+ 985, 986, 987, 988, 989, 990, 991, 992, 993, 994,
+ 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004,
+ 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014,
+ 1015, 763, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 297, 0, 402, 257, 0, 453, 911, 0,
+ 0, 624, 0, 0, 909, 0, 0, 0, 0, 365,
+ 0, 330, 197, 225, 0, 0, 412, 461, 473, 0,
+ 0, 0, 962, 0, 471, 426, 601, 233, 284, 458,
+ 432, 469, 440, 287, 0, 0, 470, 372, 584, 450,
+ 598, 625, 626, 263, 406, 611, 521, 619, 643, 226,
+ 260, 420, 506, 604, 494, 397, 580, 581, 329, 493,
+ 295, 201, 369, 631, 224, 479, 371, 242, 231, 586,
+ 608, 299, 289, 456, 638, 213, 516, 596, 239, 483,
+ 0, 0, 646, 247, 504, 215, 593, 503, 393, 326,
+ 327, 214, 0, 457, 268, 293, 0, 0, 258, 415,
+ 963, 964, 256, 647, 808, 618, 220, 0, 617, 408,
+ 583, 594, 394, 383, 219, 592, 392, 382, 334, 816,
+ 817, 280, 307, 893, 892, 891, 306, 308, 889, 890,
+ 888, 207, 605, 0, 208, 0, 499, 607, 648, 452,
+ 212, 234, 235, 237, 0, 279, 283, 291, 294, 303,
+ 304, 313, 367, 419, 446, 442, 451, 0, 578, 599,
+ 612, 623, 629, 630, 632, 633, 634, 635, 636, 639,
+ 637, 407, 311, 495, 333, 373, 0, 0, 425, 472,
+ 240, 603, 496, 899, 921, 910, 774, 775, 900, 901,
+ 925, 902, 777, 778, 922, 923, 771, 772, 776, 924,
+ 926, 649, 650, 651, 652, 653, 654, 655, 656, 657,
+ 658, 659, 660, 661, 662, 663, 664, 665, 666, 644,
+ 507, 513, 508, 509, 510, 511, 512, 0, 514, 913,
+ 760, 759, 0, 766, 767, 0, 796, 797, 799, 805,
+ 806, 807, 818, 865, 866, 874, 876, 877, 875, 878,
+ 879, 880, 883, 884, 885, 886, 881, 882, 887, 779,
+ 783, 780, 781, 782, 794, 784, 785, 786, 787, 788,
+ 789, 790, 791, 792, 793, 795, 936, 937, 938, 939,
+ 940, 941, 811, 815, 814, 812, 813, 809, 810, 837,
+ 836, 838, 839, 840, 841, 842, 843, 845, 844, 846,
+ 847, 848, 849, 850, 851, 819, 820, 823, 824, 822,
+ 821, 825, 834, 835, 826, 827, 828, 829, 830, 831,
+ 833, 832, 852, 853, 854, 855, 856, 858, 857, 861,
+ 862, 860, 859, 864, 863, 758, 196, 221, 368, 0,
+ 454, 288, 645, 614, 484, 609, 206, 223, 927, 262,
+ 928, 0, 0, 932, 0, 0, 0, 934, 933, 0,
+ 935, 897, 896, 0, 0, 929, 930, 0, 931, 0,
+ 0, 198, 200, 209, 222, 232, 236, 243, 261, 276,
+ 278, 285, 298, 310, 318, 319, 322, 328, 380, 386,
+ 387, 388, 389, 409, 410, 411, 414, 417, 418, 421,
+ 423, 424, 427, 431, 435, 436, 437, 439, 441, 443,
+ 455, 460, 474, 475, 476, 477, 478, 481, 482, 488,
+ 489, 490, 491, 492, 500, 501, 515, 585, 587, 602,
+ 621, 627, 480, 942, 943, 944, 945, 946, 947, 948,
+ 949, 300, 597, 628, 595, 640, 622, 438, 378, 0,
+ 0, 381, 281, 305, 320, 0, 613, 502, 227, 466,
+ 290, 251, 967, 0, 211, 246, 230, 259, 274, 277,
+ 324, 391, 400, 429, 434, 296, 271, 244, 459, 241,
+ 485, 518, 519, 520, 522, 395, 266, 433, 396, 0,
+ 376, 575, 576, 316, 0, 0, 527, 0, 770, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 416, 0,
+ 0, 0, 757, 0, 0, 0, 270, 762, 0, 0,
+ 0, 366, 267, 0, 0, 204, 505, 0, 430, 0,
+ 203, 0, 487, 252, 377, 374, 582, 282, 273, 269,
+ 250, 317, 385, 428, 517, 422, 769, 370, 0, 0,
+ 497, 401, 0, 0, 0, 0, 0, 764, 765, 0,
+ 0, 0, 0, 0, 0, 0, 0, 323, 248, 325,
+ 202, 413, 498, 286, 0, 95, 0, 0, 1016, 952,
+ 741, 918, 956, 1017, 969, 970, 971, 957, 0, 238,
+ 958, 959, 245, 960, 0, 917, 800, 802, 801, 867,
+ 868, 869, 870, 871, 872, 873, 803, 804, 798, 965,
+ 606, 972, 973, 0, 265, 321, 272, 264, 579, 0,
+ 0, 0, 0, 0, 0, 0, 0, 229, 0, 0,
+ 0, 0, 0, 0, 0, 737, 754, 0, 768, 0,
+ 0, 0, 275, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 751,
+ 752, 0, 0, 0, 0, 912, 0, 753, 0, 0,
+ 761, 974, 975, 976, 977, 978, 979, 980, 981, 982,
+ 983, 984, 985, 986, 987, 988, 989, 990, 991, 992,
+ 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002,
+ 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012,
+ 1013, 1014, 1015, 3145, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 297, 0, 402, 257, 0, 453,
+ 911, 0, 0, 624, 0, 0, 909, 0, 0, 0,
+ 0, 365, 0, 330, 197, 225, 0, 0, 412, 461,
+ 473, 0, 0, 0, 962, 0, 471, 426, 601, 233,
+ 284, 458, 432, 469, 440, 287, 0, 0, 470, 372,
+ 584, 450, 598, 625, 626, 263, 406, 611, 521, 619,
+ 643, 226, 260, 420, 506, 604, 494, 397, 580, 581,
+ 329, 493, 295, 201, 369, 631, 224, 479, 371, 242,
+ 231, 586, 608, 299, 289, 456, 638, 213, 516, 596,
+ 239, 483, 0, 0, 646, 247, 504, 215, 593, 503,
+ 393, 326, 327, 214, 0, 457, 268, 293, 0, 0,
+ 258, 415, 963, 964, 256, 647, 808, 618, 220, 0,
+ 617, 408, 583, 594, 394, 383, 219, 592, 392, 382,
+ 334, 816, 817, 280, 307, 893, 892, 891, 306, 308,
+ 889, 890, 888, 207, 605, 0, 208, 0, 499, 607,
+ 648, 452, 212, 234, 235, 237, 0, 279, 283, 291,
+ 294, 303, 304, 313, 367, 419, 446, 442, 451, 0,
+ 578, 599, 612, 623, 629, 630, 632, 633, 634, 635,
+ 636, 639, 637, 407, 311, 495, 333, 373, 0, 0,
+ 425, 472, 240, 603, 496, 899, 921, 910, 774, 775,
+ 900, 901, 925, 902, 777, 778, 922, 923, 771, 772,
+ 776, 924, 926, 649, 650, 651, 652, 653, 654, 655,
+ 656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
+ 666, 644, 507, 513, 508, 509, 510, 511, 512, 0,
+ 514, 913, 760, 759, 0, 766, 767, 0, 796, 797,
+ 799, 805, 806, 807, 818, 865, 866, 874, 876, 877,
+ 875, 878, 879, 880, 883, 884, 885, 886, 881, 882,
+ 887, 779, 783, 780, 781, 782, 794, 784, 785, 786,
+ 787, 788, 789, 790, 791, 792, 793, 795, 936, 937,
+ 938, 939, 940, 941, 811, 815, 814, 812, 813, 809,
+ 810, 837, 836, 838, 839, 840, 841, 842, 843, 845,
+ 844, 846, 847, 848, 849, 850, 851, 819, 820, 823,
+ 824, 822, 821, 825, 834, 835, 826, 827, 828, 829,
+ 830, 831, 833, 832, 852, 853, 854, 855, 856, 858,
+ 857, 861, 862, 860, 859, 864, 863, 758, 196, 221,
+ 368, 0, 454, 288, 645, 614, 484, 609, 206, 223,
+ 927, 262, 928, 0, 0, 932, 0, 0, 0, 934,
+ 933, 0, 935, 897, 896, 0, 0, 929, 930, 0,
+ 931, 0, 0, 198, 200, 209, 222, 232, 236, 243,
+ 261, 276, 278, 285, 298, 310, 318, 319, 322, 328,
+ 380, 386, 387, 388, 389, 409, 410, 411, 414, 417,
+ 418, 421, 423, 424, 427, 431, 435, 436, 437, 439,
+ 441, 443, 455, 460, 474, 475, 476, 477, 478, 481,
+ 482, 488, 489, 490, 491, 492, 500, 501, 515, 585,
+ 587, 602, 621, 627, 480, 942, 943, 944, 945, 946,
+ 947, 948, 949, 300, 597, 628, 595, 640, 622, 438,
+ 378, 0, 0, 381, 281, 305, 320, 0, 613, 502,
+ 227, 466, 290, 251, 967, 0, 211, 246, 230, 259,
+ 274, 277, 324, 391, 400, 429, 434, 296, 271, 244,
+ 459, 241, 485, 518, 519, 520, 522, 395, 266, 433,
+ 396, 0, 376, 575, 576, 316, 0, 0, 527, 0,
+ 770, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 416, 0, 0, 0, 757, 0, 0, 0, 270, 762,
+ 0, 0, 0, 366, 267, 0, 0, 204, 505, 0,
+ 430, 0, 203, 0, 487, 252, 377, 374, 582, 282,
+ 273, 269, 250, 317, 385, 428, 517, 422, 769, 370,
+ 0, 0, 497, 401, 0, 0, 0, 0, 0, 764,
+ 765, 0, 0, 0, 0, 0, 0, 0, 0, 323,
+ 248, 325, 202, 413, 498, 286, 0, 95, 0, 0,
+ 1016, 952, 741, 918, 956, 1017, 969, 970, 971, 957,
+ 0, 238, 958, 959, 245, 960, 0, 917, 800, 802,
+ 801, 867, 868, 869, 870, 871, 872, 873, 803, 804,
+ 798, 965, 606, 972, 973, 0, 265, 321, 272, 264,
+ 579, 0, 0, 0, 0, 0, 0, 0, 0, 229,
+ 0, 0, 0, 0, 0, 0, 0, 737, 754, 0,
+ 768, 0, 0, 0, 275, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 751, 752, 0, 0, 0, 0, 912, 0, 753,
+ 0, 0, 761, 974, 975, 976, 977, 978, 979, 980,
+ 981, 982, 983, 984, 985, 986, 987, 988, 989, 990,
+ 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000,
+ 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010,
+ 1011, 1012, 1013, 1014, 1015, 3141, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 297, 0, 402, 257,
+ 0, 453, 911, 0, 0, 624, 0, 0, 909, 0,
+ 0, 0, 0, 365, 0, 330, 197, 225, 0, 0,
+ 412, 461, 473, 0, 0, 0, 962, 0, 471, 426,
+ 601, 233, 284, 458, 432, 469, 440, 287, 0, 0,
+ 470, 372, 584, 450, 598, 625, 626, 263, 406, 611,
+ 521, 619, 643, 226, 260, 420, 506, 604, 494, 397,
+ 580, 581, 329, 493, 295, 201, 369, 631, 224, 479,
+ 371, 242, 231, 586, 608, 299, 289, 456, 638, 213,
+ 516, 596, 239, 483, 0, 0, 646, 247, 504, 215,
+ 593, 503, 393, 326, 327, 214, 0, 457, 268, 293,
+ 0, 0, 258, 415, 963, 964, 256, 647, 808, 618,
+ 220, 0, 617, 408, 583, 594, 394, 383, 219, 592,
+ 392, 382, 334, 816, 817, 280, 307, 893, 892, 891,
+ 306, 308, 889, 890, 888, 207, 605, 0, 208, 0,
+ 499, 607, 648, 452, 212, 234, 235, 237, 0, 279,
+ 283, 291, 294, 303, 304, 313, 367, 419, 446, 442,
+ 451, 0, 578, 599, 612, 623, 629, 630, 632, 633,
+ 634, 635, 636, 639, 637, 407, 311, 495, 333, 373,
+ 0, 0, 425, 472, 240, 603, 496, 899, 921, 910,
+ 774, 775, 900, 901, 925, 902, 777, 778, 922, 923,
+ 771, 772, 776, 924, 926, 649, 650, 651, 652, 653,
+ 654, 655, 656, 657, 658, 659, 660, 661, 662, 663,
+ 664, 665, 666, 644, 507, 513, 508, 509, 510, 511,
+ 512, 0, 514, 913, 760, 759, 0, 766, 767, 0,
+ 796, 797, 799, 805, 806, 807, 818, 865, 866, 874,
+ 876, 877, 875, 878, 879, 880, 883, 884, 885, 886,
+ 881, 882, 887, 779, 783, 780, 781, 782, 794, 784,
+ 785, 786, 787, 788, 789, 790, 791, 792, 793, 795,
+ 936, 937, 938, 939, 940, 941, 811, 815, 814, 812,
+ 813, 809, 810, 837, 836, 838, 839, 840, 841, 842,
+ 843, 845, 844, 846, 847, 848, 849, 850, 851, 819,
+ 820, 823, 824, 822, 821, 825, 834, 835, 826, 827,
+ 828, 829, 830, 831, 833, 832, 852, 853, 854, 855,
+ 856, 858, 857, 861, 862, 860, 859, 864, 863, 758,
+ 196, 221, 368, 0, 454, 288, 645, 614, 484, 609,
+ 206, 223, 927, 262, 928, 0, 0, 932, 0, 0,
+ 0, 934, 933, 0, 935, 897, 896, 0, 0, 929,
+ 930, 0, 931, 0, 0, 198, 200, 209, 222, 232,
+ 236, 243, 261, 276, 278, 285, 298, 310, 318, 319,
+ 322, 328, 380, 386, 387, 388, 389, 409, 410, 411,
+ 414, 417, 418, 421, 423, 424, 427, 431, 435, 436,
+ 437, 439, 441, 443, 455, 460, 474, 475, 476, 477,
+ 478, 481, 482, 488, 489, 490, 491, 492, 500, 501,
+ 515, 585, 587, 602, 621, 627, 480, 942, 943, 944,
+ 945, 946, 947, 948, 949, 300, 597, 628, 595, 640,
+ 622, 438, 378, 0, 0, 381, 281, 305, 320, 0,
+ 613, 502, 227, 466, 290, 251, 967, 0, 211, 246,
+ 230, 259, 274, 277, 324, 391, 400, 429, 434, 296,
+ 271, 244, 459, 241, 485, 518, 519, 520, 522, 395,
+ 266, 433, 396, 0, 376, 575, 576, 316, 0, 0,
+ 527, 0, 770, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 416, 0, 0, 0, 757, 0, 0, 0,
+ 270, 762, 0, 0, 0, 366, 267, 0, 0, 204,
+ 505, 0, 430, 0, 203, 0, 487, 252, 377, 374,
+ 582, 282, 273, 269, 250, 317, 385, 428, 517, 422,
+ 769, 370, 0, 0, 497, 401, 0, 0, 0, 0,
+ 0, 764, 765, 0, 0, 0, 0, 0, 0, 0,
+ 0, 323, 248, 325, 202, 413, 498, 286, 0, 95,
+ 0, 0, 1016, 952, 1083, 918, 956, 1017, 969, 970,
+ 971, 957, 0, 238, 958, 959, 245, 960, 0, 917,
+ 800, 802, 801, 867, 868, 869, 870, 871, 872, 873,
+ 803, 804, 798, 965, 606, 972, 973, 0, 265, 321,
+ 272, 264, 579, 0, 0, 0, 0, 0, 0, 0,
+ 0, 229, 0, 0, 0, 0, 0, 0, 0, 0,
+ 754, 0, 768, 0, 0, 0, 275, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 751, 752, 0, 0, 0, 0, 912,
+ 0, 753, 0, 0, 761, 974, 975, 976, 977, 978,
+ 979, 980, 981, 982, 983, 984, 985, 986, 987, 988,
+ 989, 990, 991, 992, 993, 994, 995, 996, 997, 998,
+ 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008,
+ 1009, 1010, 1011, 1012, 1013, 1014, 1015, 763, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 297, 0,
+ 402, 257, 0, 453, 911, 0, 0, 624, 0, 0,
+ 909, 0, 0, 0, 0, 365, 0, 330, 197, 225,
+ 0, 0, 412, 461, 473, 0, 0, 0, 962, 0,
+ 471, 426, 601, 233, 284, 458, 432, 469, 440, 287,
+ 0, 0, 470, 372, 584, 450, 598, 625, 626, 263,
+ 406, 611, 521, 619, 643, 226, 260, 420, 506, 604,
+ 494, 397, 580, 581, 329, 493, 295, 201, 369, 631,
+ 224, 479, 371, 242, 231, 586, 608, 299, 289, 456,
+ 638, 213, 516, 596, 239, 483, 0, 0, 646, 247,
+ 504, 215, 593, 503, 393, 326, 327, 214, 0, 457,
+ 268, 293, 0, 0, 258, 415, 963, 964, 256, 647,
+ 808, 618, 220, 0, 617, 408, 583, 594, 394, 383,
+ 219, 592, 392, 382, 334, 816, 817, 280, 307, 893,
+ 892, 891, 306, 308, 889, 890, 888, 207, 605, 0,
+ 208, 0, 499, 607, 648, 452, 212, 234, 235, 237,
+ 0, 279, 283, 291, 294, 303, 304, 313, 367, 419,
+ 446, 442, 451, 0, 578, 599, 612, 623, 629, 630,
+ 632, 633, 634, 635, 636, 639, 637, 407, 311, 495,
+ 333, 373, 0, 0, 425, 472, 240, 603, 496, 899,
+ 921, 910, 774, 775, 900, 901, 925, 902, 777, 778,
+ 922, 923, 771, 772, 776, 924, 926, 649, 650, 651,
+ 652, 653, 654, 655, 656, 657, 658, 659, 660, 661,
+ 662, 663, 664, 665, 666, 644, 507, 513, 508, 509,
+ 510, 511, 512, 0, 514, 913, 760, 759, 0, 766,
+ 767, 0, 796, 797, 799, 805, 806, 807, 818, 865,
+ 866, 874, 876, 877, 875, 878, 879, 880, 883, 884,
+ 885, 886, 881, 882, 887, 779, 783, 780, 781, 782,
+ 794, 784, 785, 786, 787, 788, 789, 790, 791, 792,
+ 793, 795, 936, 937, 938, 939, 940, 941, 811, 815,
+ 814, 812, 813, 809, 810, 837, 836, 838, 839, 840,
+ 841, 842, 843, 845, 844, 846, 847, 848, 849, 850,
+ 851, 819, 820, 823, 824, 822, 821, 825, 834, 835,
+ 826, 827, 828, 829, 830, 831, 833, 832, 852, 853,
+ 854, 855, 856, 858, 857, 861, 862, 860, 859, 864,
+ 863, 758, 196, 221, 368, 0, 454, 288, 645, 614,
+ 484, 609, 206, 223, 927, 262, 928, 0, 0, 932,
+ 0, 0, 0, 934, 933, 0, 935, 897, 896, 0,
+ 0, 929, 930, 0, 931, 0, 0, 198, 200, 209,
+ 222, 232, 236, 243, 261, 276, 278, 285, 298, 310,
+ 318, 319, 322, 328, 380, 386, 387, 388, 389, 409,
+ 410, 411, 414, 417, 418, 421, 423, 424, 427, 431,
+ 435, 436, 437, 439, 441, 443, 455, 460, 474, 475,
+ 476, 477, 478, 481, 482, 488, 489, 490, 491, 492,
+ 500, 501, 515, 585, 587, 602, 621, 627, 480, 942,
+ 943, 944, 945, 946, 947, 948, 949, 300, 597, 628,
+ 595, 640, 622, 438, 378, 0, 0, 381, 281, 305,
+ 320, 0, 613, 502, 227, 466, 290, 251, 967, 0,
+ 211, 246, 230, 259, 274, 277, 324, 391, 400, 429,
+ 434, 296, 271, 244, 459, 241, 485, 518, 519, 520,
+ 522, 395, 266, 433, 396, 0, 376, 575, 576, 316,
+ 0, 0, 527, 0, 770, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 416, 0, 0, 0, 757, 0,
+ 0, 0, 270, 762, 0, 0, 0, 366, 267, 0,
+ 0, 204, 505, 0, 430, 0, 203, 0, 487, 252,
+ 377, 374, 582, 282, 273, 269, 250, 317, 385, 428,
+ 517, 422, 769, 370, 0, 0, 497, 401, 0, 0,
+ 0, 0, 0, 764, 765, 0, 0, 0, 0, 0,
+ 0, 0, 0, 323, 248, 325, 202, 413, 498, 286,
+ 0, 95, 0, 0, 1016, 952, 1083, 918, 956, 1017,
+ 969, 970, 971, 957, 0, 238, 958, 959, 245, 960,
+ 0, 917, 800, 802, 801, 867, 868, 869, 870, 871,
+ 872, 873, 803, 804, 798, 965, 606, 972, 973, 0,
+ 265, 321, 272, 264, 579, 0, 0, 0, 0, 0,
+ 0, 0, 0, 229, 0, 0, 0, 0, 0, 0,
+ 0, 0, 754, 0, 768, 0, 0, 0, 275, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 751, 752, 0, 0, 0,
+ 0, 912, 0, 753, 0, 0, 761, 974, 975, 976,
+ 977, 978, 979, 980, 981, 982, 983, 984, 985, 986,
+ 987, 988, 989, 990, 991, 992, 993, 994, 995, 996,
+ 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006,
+ 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 2100,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 297, 0, 402, 257, 0, 453, 911, 0, 0, 624,
+ 0, 0, 909, 0, 0, 0, 0, 365, 0, 330,
+ 197, 225, 0, 0, 412, 461, 473, 0, 0, 0,
+ 962, 0, 471, 426, 601, 233, 284, 458, 432, 469,
+ 440, 287, 0, 0, 470, 372, 584, 450, 598, 625,
+ 626, 263, 406, 611, 521, 619, 643, 226, 260, 420,
+ 506, 604, 494, 397, 580, 581, 329, 493, 295, 201,
+ 369, 631, 224, 479, 371, 242, 231, 586, 608, 299,
+ 289, 456, 638, 213, 516, 596, 239, 483, 0, 0,
+ 646, 247, 504, 215, 593, 503, 393, 326, 327, 214,
+ 0, 457, 268, 293, 0, 0, 258, 415, 963, 964,
+ 256, 647, 808, 618, 220, 0, 617, 408, 583, 594,
+ 394, 383, 219, 592, 392, 382, 334, 816, 817, 280,
+ 307, 893, 892, 891, 306, 308, 889, 890, 888, 207,
+ 605, 0, 208, 0, 499, 607, 648, 452, 212, 234,
+ 235, 237, 0, 279, 283, 291, 294, 303, 304, 313,
+ 367, 419, 446, 442, 451, 0, 578, 599, 612, 623,
+ 629, 630, 632, 633, 634, 635, 636, 639, 637, 407,
+ 311, 495, 333, 373, 0, 0, 425, 472, 240, 603,
+ 496, 899, 921, 910, 774, 775, 900, 901, 925, 902,
+ 777, 778, 922, 923, 771, 772, 776, 924, 926, 649,
+ 650, 651, 652, 653, 654, 655, 656, 657, 658, 659,
+ 660, 661, 662, 663, 664, 665, 666, 644, 507, 513,
+ 508, 509, 510, 511, 512, 0, 514, 913, 760, 759,
+ 0, 766, 767, 0, 796, 797, 799, 805, 806, 807,
+ 818, 865, 866, 874, 876, 877, 875, 878, 879, 880,
+ 883, 884, 885, 886, 881, 882, 887, 779, 783, 780,
+ 781, 782, 794, 784, 785, 786, 787, 788, 789, 790,
+ 791, 792, 793, 795, 936, 937, 938, 939, 940, 941,
+ 811, 815, 814, 812, 813, 809, 810, 837, 836, 838,
+ 839, 840, 841, 842, 843, 845, 844, 846, 847, 848,
+ 849, 850, 851, 819, 820, 823, 824, 822, 821, 825,
+ 834, 835, 826, 827, 828, 829, 830, 831, 833, 832,
+ 852, 853, 854, 855, 856, 858, 857, 861, 862, 860,
+ 859, 864, 863, 758, 196, 221, 368, 0, 454, 288,
+ 645, 614, 484, 609, 206, 223, 927, 262, 928, 0,
+ 0, 932, 0, 0, 0, 934, 933, 0, 935, 897,
+ 896, 0, 0, 929, 930, 0, 931, 0, 0, 198,
+ 200, 209, 222, 232, 236, 243, 261, 276, 278, 285,
+ 298, 310, 318, 319, 322, 328, 380, 386, 387, 388,
+ 389, 409, 410, 411, 414, 417, 418, 421, 423, 424,
+ 427, 431, 435, 436, 437, 439, 441, 443, 455, 460,
+ 474, 475, 476, 477, 478, 481, 482, 488, 489, 490,
+ 491, 492, 500, 501, 515, 585, 587, 602, 621, 627,
+ 480, 942, 943, 944, 945, 946, 947, 948, 949, 300,
+ 597, 628, 595, 640, 622, 438, 378, 0, 0, 381,
+ 281, 305, 320, 0, 613, 502, 227, 466, 290, 251,
+ 967, 0, 211, 246, 230, 259, 274, 277, 324, 391,
+ 400, 429, 434, 296, 271, 244, 459, 241, 485, 518,
+ 519, 520, 522, 395, 266, 433, 396, 0, 376, 575,
+ 576, 316, 0, 0, 527, 0, 770, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 416, 0, 0, 0,
+ 757, 0, 0, 0, 270, 762, 0, 0, 0, 366,
+ 267, 0, 0, 204, 505, 0, 430, 0, 203, 0,
+ 487, 252, 377, 374, 582, 282, 273, 269, 250, 317,
+ 385, 428, 517, 422, 769, 370, 0, 0, 497, 401,
+ 0, 0, 0, 0, 0, 764, 765, 0, 0, 0,
+ 0, 0, 0, 0, 0, 323, 248, 325, 202, 413,
+ 498, 286, 0, 95, 0, 0, 1016, 952, 1083, 918,
+ 956, 1017, 969, 970, 971, 957, 0, 238, 958, 959,
+ 245, 960, 0, 917, 800, 802, 801, 867, 868, 869,
+ 870, 871, 872, 873, 803, 804, 798, 965, 606, 972,
+ 973, 0, 265, 321, 272, 264, 579, 0, 0, 0,
+ 0, 0, 0, 0, 0, 229, 0, 0, 0, 0,
+ 0, 0, 0, 0, 754, 0, 768, 0, 0, 0,
+ 275, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 751, 752, 0,
+ 0, 0, 0, 912, 0, 753, 0, 0, 761, 974,
+ 975, 976, 977, 978, 979, 980, 981, 982, 983, 984,
+ 985, 986, 987, 988, 989, 990, 991, 992, 993, 994,
+ 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004,
+ 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014,
+ 1015, 2098, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 297, 0, 402, 257, 0, 453, 911, 0,
+ 0, 624, 0, 0, 909, 0, 0, 0, 0, 365,
+ 0, 330, 197, 225, 0, 0, 412, 461, 473, 0,
+ 0, 0, 962, 0, 471, 426, 601, 233, 284, 458,
+ 432, 469, 440, 287, 0, 0, 470, 372, 584, 450,
+ 598, 625, 626, 263, 406, 611, 521, 619, 643, 226,
+ 260, 420, 506, 604, 494, 397, 580, 581, 329, 493,
+ 295, 201, 369, 631, 224, 479, 371, 242, 231, 586,
+ 608, 299, 289, 456, 638, 213, 516, 596, 239, 483,
+ 0, 0, 646, 247, 504, 215, 593, 503, 393, 326,
+ 327, 214, 0, 457, 268, 293, 0, 0, 258, 415,
+ 963, 964, 256, 647, 808, 618, 220, 0, 617, 408,
+ 583, 594, 394, 383, 219, 592, 392, 382, 334, 816,
+ 817, 280, 307, 893, 892, 891, 306, 308, 889, 890,
+ 888, 207, 605, 0, 208, 0, 499, 607, 648, 452,
+ 212, 234, 235, 237, 0, 279, 283, 291, 294, 303,
+ 304, 313, 367, 419, 446, 442, 451, 0, 578, 599,
+ 612, 623, 629, 630, 632, 633, 634, 635, 636, 639,
+ 637, 407, 311, 495, 333, 373, 0, 0, 425, 472,
+ 240, 603, 496, 899, 921, 910, 774, 775, 900, 901,
+ 925, 902, 777, 778, 922, 923, 771, 772, 776, 924,
+ 926, 649, 650, 651, 652, 653, 654, 655, 656, 657,
+ 658, 659, 660, 661, 662, 663, 664, 665, 666, 644,
+ 507, 513, 508, 509, 510, 511, 512, 0, 514, 913,
+ 760, 759, 0, 766, 767, 0, 796, 797, 799, 805,
+ 806, 807, 818, 865, 866, 874, 876, 877, 875, 878,
+ 879, 880, 883, 884, 885, 886, 881, 882, 887, 779,
+ 783, 780, 781, 782, 794, 784, 785, 786, 787, 788,
+ 789, 790, 791, 792, 793, 795, 936, 937, 938, 939,
+ 940, 941, 811, 815, 814, 812, 813, 809, 810, 837,
+ 836, 838, 839, 840, 841, 842, 843, 845, 844, 846,
+ 847, 848, 849, 850, 851, 819, 820, 823, 824, 822,
+ 821, 825, 834, 835, 826, 827, 828, 829, 830, 831,
+ 833, 832, 852, 853, 854, 855, 856, 858, 857, 861,
+ 862, 860, 859, 864, 863, 758, 196, 221, 368, 0,
+ 454, 288, 645, 614, 484, 609, 206, 223, 927, 262,
+ 928, 0, 0, 932, 0, 0, 0, 934, 933, 0,
+ 935, 897, 896, 0, 0, 929, 930, 0, 931, 0,
+ 0, 198, 200, 209, 222, 232, 236, 243, 261, 276,
+ 278, 285, 298, 310, 318, 319, 322, 328, 380, 386,
+ 387, 388, 389, 409, 410, 411, 414, 417, 418, 421,
+ 423, 424, 427, 431, 435, 436, 437, 439, 441, 443,
+ 455, 460, 474, 475, 476, 477, 478, 481, 482, 488,
+ 489, 490, 491, 492, 500, 501, 515, 585, 587, 602,
+ 621, 627, 480, 942, 943, 944, 945, 946, 947, 948,
+ 949, 300, 597, 628, 595, 640, 622, 438, 378, 0,
+ 0, 381, 281, 305, 320, 0, 613, 502, 227, 466,
+ 290, 251, 967, 0, 211, 246, 230, 259, 274, 277,
+ 324, 391, 400, 429, 434, 296, 271, 244, 459, 241,
+ 485, 518, 519, 520, 522, 395, 266, 433, 396, 0,
+ 376, 575, 576, 316, 0, 0, 527, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 416, 0,
+ 0, 0, 0, 0, 0, 0, 270, 0, 0, 0,
+ 0, 366, 267, 0, 0, 204, 505, 0, 430, 0,
+ 203, 0, 487, 252, 377, 374, 582, 282, 273, 269,
+ 250, 317, 385, 428, 517, 422, 0, 370, 0, 0,
+ 497, 401, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 323, 248, 325,
+ 202, 413, 498, 286, 0, 0, 0, 0, 0, 717,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 238,
+ 0, 0, 245, 0, 0, 0, 351, 360, 359, 339,
+ 340, 342, 344, 350, 357, 363, 336, 345, 0, 0,
+ 606, 0, 0, 0, 265, 321, 272, 264, 579, 0,
+ 0, 0, 0, 0, 0, 0, 0, 229, 0, 1134,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 275, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 297, 0, 402, 257, 0, 453,
+ 0, 0, 1133, 624, 0, 0, 0, 0, 0, 1130,
+ 1131, 365, 1091, 330, 197, 225, 1124, 1128, 412, 461,
+ 473, 0, 0, 0, 253, 0, 471, 426, 601, 233,
+ 284, 458, 432, 469, 440, 287, 0, 0, 470, 372,
+ 584, 450, 598, 625, 626, 263, 406, 611, 521, 619,
+ 643, 226, 260, 420, 506, 604, 494, 397, 580, 581,
+ 329, 493, 295, 201, 369, 631, 224, 479, 371, 242,
+ 231, 586, 608, 299, 289, 456, 638, 213, 516, 596,
+ 239, 483, 0, 0, 646, 247, 504, 215, 593, 503,
+ 393, 326, 327, 214, 0, 457, 268, 293, 0, 0,
+ 258, 415, 588, 589, 256, 647, 228, 618, 220, 0,
+ 617, 408, 583, 594, 394, 383, 219, 592, 392, 382,
+ 334, 355, 356, 280, 307, 447, 375, 448, 306, 308,
+ 404, 403, 405, 207, 605, 0, 208, 0, 499, 607,
+ 648, 452, 212, 234, 235, 237, 0, 279, 283, 291,
+ 294, 303, 304, 313, 367, 419, 446, 442, 451, 0,
+ 578, 599, 612, 623, 629, 630, 632, 633, 634, 635,
+ 636, 639, 637, 407, 311, 495, 333, 373, 0, 0,
+ 425, 472, 240, 603, 496, 199, 0, 0, 0, 0,
+ 254, 255, 0, 574, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 649, 650, 651, 652, 653, 654, 655,
+ 656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
+ 666, 644, 507, 513, 508, 509, 510, 511, 512, 0,
+ 514, 0, 0, 0, 0, 0, 398, 0, 590, 591,
+ 667, 384, 486, 600, 335, 349, 352, 341, 361, 0,
+ 362, 337, 338, 343, 346, 347, 348, 353, 354, 358,
+ 364, 249, 210, 390, 399, 577, 312, 216, 217, 218,
+ 523, 524, 525, 526, 615, 616, 620, 205, 462, 463,
+ 464, 465, 292, 610, 309, 468, 467, 331, 332, 379,
+ 449, 539, 541, 552, 556, 558, 560, 566, 569, 540,
+ 542, 553, 557, 559, 561, 567, 570, 529, 531, 533,
+ 535, 548, 547, 544, 572, 573, 550, 555, 534, 546,
+ 551, 564, 571, 568, 528, 532, 536, 545, 563, 562,
+ 543, 554, 565, 549, 537, 530, 538, 0, 196, 221,
+ 368, 0, 454, 288, 645, 614, 484, 609, 206, 223,
+ 0, 262, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 198, 200, 209, 222, 232, 236, 243,
+ 261, 276, 278, 285, 298, 310, 318, 319, 322, 328,
+ 380, 386, 387, 388, 389, 409, 410, 411, 414, 417,
+ 418, 421, 423, 424, 427, 431, 435, 436, 437, 439,
+ 441, 443, 455, 460, 474, 475, 476, 477, 478, 481,
+ 482, 488, 489, 490, 491, 492, 500, 501, 515, 585,
+ 587, 602, 621, 627, 480, 301, 302, 444, 445, 314,
+ 315, 641, 642, 300, 597, 628, 595, 640, 622, 438,
+ 378, 0, 0, 381, 281, 305, 320, 0, 613, 502,
+ 227, 466, 290, 251, 0, 0, 211, 246, 230, 259,
+ 274, 277, 324, 391, 400, 429, 434, 296, 271, 244,
+ 459, 241, 485, 518, 519, 520, 522, 395, 266, 433,
+ 396, 0, 376, 575, 576, 316, 0, 0, 527, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 416, 0, 0, 0, 0, 0, 0, 0, 270, 0,
+ 0, 0, 0, 366, 267, 0, 0, 204, 505, 0,
+ 430, 0, 203, 0, 487, 252, 377, 374, 582, 282,
+ 273, 269, 250, 317, 385, 428, 517, 422, 0, 370,
+ 0, 0, 497, 401, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 323,
+ 248, 325, 202, 413, 498, 286, 0, 0, 0, 0,
+ 1697, 952, 0, 0, 1694, 0, 0, 0, 0, 1692,
+ 0, 238, 1693, 1691, 245, 1696, 0, 917, 351, 360,
+ 359, 339, 340, 342, 344, 350, 357, 363, 336, 345,
+ 0, 0, 606, 0, 0, 0, 265, 321, 272, 264,
+ 579, 0, 0, 0, 0, 0, 0, 0, 0, 229,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 275, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 297, 0, 402, 257,
+ 0, 453, 0, 0, 0, 624, 0, 0, 0, 0,
+ 0, 0, 0, 365, 0, 330, 197, 225, 0, 0,
+ 412, 461, 473, 0, 0, 0, 253, 0, 471, 426,
+ 601, 233, 284, 458, 432, 469, 440, 287, 0, 0,
+ 470, 372, 584, 450, 598, 625, 626, 263, 406, 611,
+ 521, 619, 643, 226, 260, 420, 506, 604, 494, 397,
+ 580, 581, 329, 493, 295, 201, 369, 631, 224, 479,
+ 371, 242, 231, 586, 608, 299, 289, 456, 638, 213,
+ 516, 596, 239, 483, 0, 0, 646, 247, 504, 215,
+ 593, 503, 393, 326, 327, 214, 0, 457, 268, 293,
+ 0, 0, 258, 415, 588, 589, 256, 647, 228, 618,
+ 220, 0, 617, 408, 583, 594, 394, 383, 219, 592,
+ 392, 382, 334, 355, 356, 280, 307, 447, 375, 448,
+ 306, 308, 404, 403, 405, 207, 605, 0, 208, 0,
+ 499, 607, 648, 452, 212, 234, 235, 237, 0, 279,
+ 283, 291, 294, 303, 304, 313, 367, 419, 446, 442,
+ 451, 0, 578, 599, 612, 623, 629, 630, 632, 633,
+ 634, 635, 636, 639, 637, 407, 311, 495, 333, 373,
+ 0, 0, 425, 472, 240, 603, 496, 199, 0, 0,
+ 0, 0, 254, 255, 0, 574, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 649, 650, 651, 652, 653,
+ 654, 655, 656, 657, 658, 659, 660, 661, 662, 663,
+ 664, 665, 666, 644, 507, 513, 508, 509, 510, 511,
+ 512, 0, 514, 0, 0, 0, 0, 0, 398, 0,
+ 590, 591, 667, 384, 486, 600, 335, 349, 352, 341,
+ 361, 0, 362, 337, 338, 343, 346, 347, 348, 353,
+ 354, 358, 364, 249, 210, 390, 399, 577, 312, 216,
+ 217, 218, 523, 524, 525, 526, 615, 616, 620, 205,
+ 462, 463, 464, 465, 292, 610, 309, 468, 467, 331,
+ 332, 379, 449, 539, 541, 552, 556, 558, 560, 566,
+ 569, 540, 542, 553, 557, 559, 561, 567, 570, 529,
+ 531, 533, 535, 548, 547, 544, 572, 573, 550, 555,
+ 534, 546, 551, 564, 571, 568, 528, 532, 536, 545,
+ 563, 562, 543, 554, 565, 549, 537, 530, 538, 0,
+ 196, 221, 368, 0, 454, 288, 645, 614, 484, 609,
+ 206, 223, 0, 262, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 198, 200, 209, 222, 232,
+ 236, 243, 261, 276, 278, 285, 298, 310, 318, 319,
+ 322, 328, 380, 386, 387, 388, 389, 409, 410, 411,
+ 414, 417, 418, 421, 423, 424, 427, 431, 435, 436,
+ 437, 439, 441, 443, 455, 460, 474, 475, 476, 477,
+ 478, 481, 482, 488, 489, 490, 491, 492, 500, 501,
+ 515, 585, 587, 602, 621, 627, 480, 301, 302, 444,
+ 445, 314, 315, 641, 642, 300, 597, 628, 595, 640,
+ 622, 438, 378, 0, 0, 381, 281, 305, 320, 0,
+ 613, 502, 227, 466, 290, 251, 0, 0, 211, 246,
+ 230, 259, 274, 277, 324, 391, 400, 429, 434, 296,
+ 271, 244, 459, 241, 485, 518, 519, 520, 522, 395,
+ 266, 433, 396, 0, 376, 575, 576, 316, 0, 86,
+ 527, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 416, 0, 0, 0, 0, 0, 0, 0,
+ 270, 0, 0, 0, 0, 366, 267, 0, 0, 204,
+ 505, 0, 430, 0, 203, 0, 487, 252, 377, 374,
+ 582, 282, 273, 269, 250, 317, 385, 428, 517, 422,
+ 0, 370, 0, 0, 497, 401, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 323, 248, 325, 202, 413, 498, 286, 0, 95,
+ 0, 0, 0, 194, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 238, 0, 0, 245, 0, 0, 0,
+ 351, 360, 359, 339, 340, 342, 344, 350, 357, 363,
+ 336, 345, 0, 0, 606, 0, 0, 0, 265, 321,
+ 272, 264, 579, 0, 0, 0, 0, 0, 0, 0,
+ 0, 229, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 275, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 297, 0,
+ 402, 257, 0, 453, 0, 0, 0, 624, 0, 0,
+ 0, 0, 0, 0, 0, 365, 0, 330, 197, 225,
+ 0, 0, 412, 461, 473, 0, 0, 0, 253, 0,
+ 471, 426, 601, 233, 284, 458, 432, 469, 440, 287,
+ 0, 0, 470, 372, 584, 450, 598, 625, 626, 263,
+ 406, 611, 521, 619, 643, 226, 260, 420, 506, 604,
+ 494, 397, 580, 581, 329, 493, 295, 201, 369, 631,
+ 224, 479, 371, 242, 231, 586, 608, 299, 289, 456,
+ 638, 213, 516, 596, 239, 483, 0, 0, 646, 247,
+ 504, 215, 593, 503, 393, 326, 327, 214, 0, 457,
+ 268, 293, 0, 0, 258, 415, 588, 589, 256, 647,
+ 228, 618, 220, 0, 617, 408, 583, 594, 394, 383,
+ 219, 592, 392, 382, 334, 355, 356, 280, 307, 447,
+ 375, 448, 306, 308, 404, 403, 405, 207, 605, 0,
+ 208, 0, 499, 607, 648, 452, 212, 234, 235, 237,
+ 0, 279, 283, 291, 294, 303, 304, 313, 367, 419,
+ 446, 442, 451, 0, 578, 599, 612, 623, 629, 630,
+ 632, 633, 634, 635, 636, 639, 637, 407, 311, 495,
+ 333, 373, 0, 0, 425, 472, 240, 603, 496, 199,
+ 0, 0, 0, 0, 254, 255, 0, 574, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 649, 650, 651,
+ 652, 653, 654, 655, 656, 657, 658, 659, 660, 661,
+ 662, 663, 664, 665, 666, 644, 507, 513, 508, 509,
+ 510, 511, 512, 0, 514, 0, 0, 0, 0, 0,
+ 398, 0, 590, 591, 667, 384, 486, 600, 335, 349,
+ 352, 341, 361, 0, 362, 337, 338, 343, 346, 347,
+ 348, 353, 354, 358, 364, 249, 210, 390, 399, 577,
+ 312, 216, 217, 218, 523, 524, 525, 526, 615, 616,
+ 620, 205, 462, 463, 464, 465, 292, 610, 309, 468,
+ 467, 331, 332, 379, 449, 539, 541, 552, 556, 558,
+ 560, 566, 569, 540, 542, 553, 557, 559, 561, 567,
+ 570, 529, 531, 533, 535, 548, 547, 544, 572, 573,
+ 550, 555, 534, 546, 551, 564, 571, 568, 528, 532,
+ 536, 545, 563, 562, 543, 554, 565, 549, 537, 530,
+ 538, 0, 196, 221, 368, 94, 454, 288, 645, 614,
+ 484, 609, 206, 223, 0, 262, 0, 0, 0, 0,
+ 0, 0, 2403, 0, 0, 2402, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 198, 200, 209,
+ 222, 232, 236, 243, 261, 276, 278, 285, 298, 310,
+ 318, 319, 322, 328, 380, 386, 387, 388, 389, 409,
+ 410, 411, 414, 417, 418, 421, 423, 424, 427, 431,
+ 435, 436, 437, 439, 441, 443, 455, 460, 474, 475,
+ 476, 477, 478, 481, 482, 488, 489, 490, 491, 492,
+ 500, 501, 515, 585, 587, 602, 621, 627, 480, 301,
+ 302, 444, 445, 314, 315, 641, 642, 300, 597, 628,
+ 595, 640, 622, 438, 378, 0, 0, 381, 281, 305,
+ 320, 0, 613, 502, 227, 466, 290, 251, 0, 0,
+ 211, 246, 230, 259, 274, 277, 324, 391, 400, 429,
+ 434, 296, 271, 244, 459, 241, 485, 518, 519, 520,
+ 522, 395, 266, 433, 1759, 0, 376, 575, 576, 316,
+ 0, 0, 527, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 416, 0, 0, 1761, 0, 0,
+ 0, 0, 270, 0, 0, 0, 0, 366, 267, 0,
+ 0, 204, 505, 0, 430, 0, 203, 0, 487, 252,
+ 377, 374, 582, 282, 273, 269, 250, 317, 385, 428,
+ 517, 422, 0, 370, 0, 0, 497, 401, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 323, 248, 325, 202, 413, 498, 286,
+ 0, 0, 0, 0, 1763, 717, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 238, 0, 0, 245, 0,
+ 0, 0, 351, 360, 359, 339, 340, 342, 344, 350,
+ 357, 363, 336, 345, 0, 0, 606, 0, 0, 0,
+ 265, 321, 272, 264, 579, 0, 0, 0, 0, 0,
+ 0, 0, 0, 229, 0, 0, 0, 1465, 0, 1466,
+ 1467, 0, 0, 0, 0, 0, 0, 0, 275, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 297, 0, 402, 257, 0, 453, 0, 0, 0, 624,
+ 0, 0, 0, 0, 0, 0, 0, 365, 0, 330,
+ 197, 225, 0, 0, 412, 461, 473, 0, 0, 0,
+ 253, 0, 471, 426, 601, 233, 284, 458, 432, 469,
+ 440, 287, 0, 0, 470, 372, 584, 450, 598, 625,
+ 626, 263, 406, 611, 521, 619, 643, 226, 260, 420,
+ 506, 604, 494, 397, 580, 581, 329, 493, 295, 201,
+ 369, 631, 224, 479, 371, 242, 231, 586, 608, 299,
+ 289, 456, 638, 213, 516, 596, 239, 483, 0, 0,
+ 646, 247, 504, 215, 593, 503, 393, 326, 327, 214,
+ 0, 457, 268, 293, 0, 0, 258, 415, 588, 589,
+ 256, 647, 228, 618, 220, 0, 617, 408, 583, 594,
+ 394, 383, 219, 592, 392, 382, 334, 355, 356, 280,
+ 307, 447, 375, 448, 306, 308, 404, 403, 405, 207,
+ 605, 0, 208, 0, 499, 607, 648, 452, 212, 234,
+ 235, 237, 0, 279, 283, 291, 294, 303, 304, 313,
+ 367, 419, 446, 442, 451, 0, 578, 599, 612, 623,
+ 629, 630, 632, 633, 634, 635, 636, 639, 637, 407,
+ 311, 495, 333, 373, 0, 0, 425, 472, 240, 603,
+ 496, 199, 0, 0, 0, 0, 254, 255, 0, 574,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 649,
+ 650, 651, 652, 653, 654, 655, 656, 657, 658, 659,
+ 660, 661, 662, 663, 664, 665, 666, 644, 507, 513,
+ 508, 509, 510, 511, 512, 0, 514, 0, 0, 0,
+ 0, 0, 398, 0, 590, 591, 667, 384, 486, 600,
+ 335, 349, 352, 341, 361, 0, 362, 337, 338, 343,
+ 346, 347, 348, 353, 354, 358, 364, 249, 210, 390,
+ 399, 577, 312, 216, 217, 218, 523, 524, 525, 526,
+ 615, 616, 620, 205, 462, 463, 464, 465, 292, 610,
+ 309, 468, 467, 331, 332, 379, 449, 539, 541, 552,
+ 556, 558, 560, 566, 569, 540, 542, 553, 557, 559,
+ 561, 567, 570, 529, 531, 533, 535, 548, 547, 544,
+ 572, 573, 550, 555, 534, 546, 551, 564, 571, 568,
+ 528, 532, 536, 545, 563, 562, 543, 554, 565, 549,
+ 537, 530, 538, 0, 196, 221, 368, 0, 454, 288,
+ 645, 614, 484, 609, 206, 223, 0, 262, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 198,
+ 200, 209, 222, 232, 236, 243, 261, 276, 278, 285,
+ 298, 310, 318, 319, 322, 328, 380, 386, 387, 388,
+ 389, 409, 410, 411, 414, 417, 418, 421, 423, 424,
+ 427, 431, 435, 436, 437, 439, 441, 443, 455, 460,
+ 474, 475, 476, 477, 478, 481, 482, 488, 489, 490,
+ 491, 492, 500, 501, 515, 585, 587, 602, 621, 627,
+ 480, 301, 302, 444, 445, 314, 315, 641, 642, 300,
+ 597, 628, 595, 640, 622, 438, 378, 0, 0, 381,
+ 281, 305, 320, 0, 613, 502, 227, 466, 290, 251,
+ 0, 0, 211, 246, 230, 259, 274, 277, 324, 391,
+ 400, 429, 434, 296, 271, 244, 459, 241, 485, 518,
+ 519, 520, 522, 395, 266, 433, 396, 0, 376, 575,
+ 576, 316, 0, 86, 527, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 416, 0, 0, 0,
+ 0, 0, 0, 0, 270, 0, 0, 0, 0, 366,
+ 267, 0, 0, 204, 505, 0, 430, 0, 203, 0,
+ 487, 252, 377, 374, 582, 282, 273, 269, 250, 317,
+ 385, 428, 517, 422, 0, 370, 0, 0, 497, 401,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 323, 248, 325, 202, 413,
+ 498, 286, 0, 95, 0, 1736, 0, 717, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 238, 0, 0,
+ 245, 0, 0, 0, 351, 360, 359, 339, 340, 342,
+ 344, 350, 357, 363, 336, 345, 0, 0, 606, 0,
+ 0, 0, 265, 321, 272, 264, 579, 0, 0, 0,
+ 0, 0, 0, 0, 0, 229, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 275, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 297, 0, 402, 257, 0, 453, 0, 0,
+ 0, 624, 0, 0, 0, 0, 0, 0, 0, 365,
+ 0, 330, 197, 225, 0, 0, 412, 461, 473, 0,
+ 0, 0, 253, 0, 471, 426, 601, 233, 284, 458,
+ 432, 469, 440, 287, 0, 0, 470, 372, 584, 450,
+ 598, 625, 626, 263, 406, 611, 521, 619, 643, 226,
+ 260, 420, 506, 604, 494, 397, 580, 581, 329, 493,
+ 295, 201, 369, 631, 224, 479, 371, 242, 231, 586,
+ 608, 299, 289, 456, 638, 213, 516, 596, 239, 483,
+ 0, 0, 646, 247, 504, 215, 593, 503, 393, 326,
+ 327, 214, 0, 457, 268, 293, 0, 0, 258, 415,
+ 588, 589, 256, 647, 228, 618, 220, 0, 617, 408,
+ 583, 594, 394, 383, 219, 592, 392, 382, 334, 355,
+ 356, 280, 307, 447, 375, 448, 306, 308, 404, 403,
+ 405, 207, 605, 0, 208, 0, 499, 607, 648, 452,
+ 212, 234, 235, 237, 0, 279, 283, 291, 294, 303,
+ 304, 313, 367, 419, 446, 442, 451, 0, 578, 599,
+ 612, 623, 629, 630, 632, 633, 634, 635, 636, 639,
+ 637, 407, 311, 495, 333, 373, 0, 0, 425, 472,
+ 240, 603, 496, 199, 0, 0, 0, 0, 254, 255,
+ 0, 574, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 649, 650, 651, 652, 653, 654, 655, 656, 657,
+ 658, 659, 660, 661, 662, 663, 664, 665, 666, 644,
+ 507, 513, 508, 509, 510, 511, 512, 0, 514, 0,
+ 0, 0, 0, 0, 398, 0, 590, 591, 667, 384,
+ 486, 600, 335, 349, 352, 341, 361, 0, 362, 337,
+ 338, 343, 346, 347, 348, 353, 354, 358, 364, 249,
+ 210, 390, 399, 577, 312, 216, 217, 218, 523, 524,
+ 525, 526, 615, 616, 620, 205, 462, 463, 464, 465,
+ 292, 610, 309, 468, 467, 331, 332, 379, 449, 539,
+ 541, 552, 556, 558, 560, 566, 569, 540, 542, 553,
+ 557, 559, 561, 567, 570, 529, 531, 533, 535, 548,
+ 547, 544, 572, 573, 550, 555, 534, 546, 551, 564,
+ 571, 568, 528, 532, 536, 545, 563, 562, 543, 554,
+ 565, 549, 537, 530, 538, 0, 196, 221, 368, 94,
+ 454, 288, 645, 614, 484, 609, 206, 223, 0, 262,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 198, 200, 209, 222, 232, 236, 243, 261, 276,
+ 278, 285, 298, 310, 318, 319, 322, 328, 380, 386,
+ 387, 388, 389, 409, 410, 411, 414, 417, 418, 421,
+ 423, 424, 427, 431, 435, 436, 437, 439, 441, 443,
+ 455, 460, 474, 475, 476, 477, 478, 481, 482, 488,
+ 489, 490, 491, 492, 500, 501, 515, 585, 587, 602,
+ 621, 627, 480, 301, 302, 444, 445, 314, 315, 641,
+ 642, 300, 597, 628, 595, 640, 622, 438, 378, 0,
+ 0, 381, 281, 305, 320, 0, 613, 502, 227, 466,
+ 290, 251, 0, 0, 211, 246, 230, 259, 274, 277,
+ 324, 391, 400, 429, 434, 296, 271, 244, 459, 241,
+ 485, 518, 519, 520, 522, 395, 266, 433, 396, 0,
+ 376, 575, 576, 316, 0, 0, 527, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 416, 0,
+ 0, 0, 0, 0, 0, 0, 270, 0, 0, 0,
+ 0, 366, 267, 0, 0, 204, 505, 0, 430, 0,
+ 203, 0, 487, 252, 377, 374, 582, 282, 273, 269,
+ 250, 317, 385, 428, 517, 422, 0, 370, 0, 0,
+ 497, 401, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 323, 248, 325,
+ 202, 413, 498, 286, 0, 95, 0, 0, 0, 194,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 238,
+ 0, 0, 245, 0, 0, 0, 351, 360, 359, 339,
+ 340, 342, 344, 350, 357, 363, 336, 345, 0, 0,
+ 606, 0, 0, 0, 265, 321, 272, 264, 579, 0,
+ 0, 0, 0, 0, 0, 0, 0, 229, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 275, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 297, 0, 402, 257, 0, 453,
+ 0, 0, 0, 624, 0, 0, 0, 0, 0, 0,
+ 0, 365, 0, 330, 197, 225, 0, 0, 412, 461,
+ 473, 0, 0, 0, 253, 0, 471, 426, 601, 233,
+ 284, 458, 432, 469, 440, 287, 0, 0, 470, 372,
+ 584, 450, 598, 625, 626, 263, 406, 611, 521, 619,
+ 643, 226, 260, 420, 506, 604, 494, 397, 580, 581,
+ 329, 493, 295, 201, 369, 631, 224, 479, 371, 242,
+ 231, 586, 608, 299, 289, 456, 638, 213, 516, 596,
+ 239, 483, 0, 0, 646, 247, 504, 215, 593, 503,
+ 393, 326, 327, 214, 0, 457, 268, 293, 0, 0,
+ 258, 415, 588, 589, 256, 647, 228, 618, 220, 0,
+ 617, 408, 583, 594, 394, 383, 219, 592, 392, 382,
+ 334, 355, 356, 280, 307, 447, 375, 448, 306, 308,
+ 404, 403, 405, 207, 605, 0, 208, 0, 499, 607,
+ 648, 452, 212, 234, 235, 237, 0, 279, 283, 291,
+ 294, 303, 304, 313, 367, 419, 446, 442, 451, 0,
+ 578, 599, 612, 623, 629, 630, 632, 633, 634, 635,
+ 636, 639, 637, 407, 311, 495, 333, 373, 0, 0,
+ 425, 472, 240, 603, 496, 199, 0, 0, 0, 0,
+ 254, 255, 0, 574, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 649, 650, 651, 652, 653, 654, 655,
+ 656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
+ 666, 644, 507, 513, 508, 509, 510, 511, 512, 0,
+ 514, 0, 0, 0, 0, 0, 398, 0, 590, 591,
+ 667, 384, 486, 600, 335, 349, 352, 341, 361, 0,
+ 362, 337, 338, 343, 346, 347, 348, 353, 354, 358,
+ 364, 249, 210, 390, 399, 577, 312, 216, 217, 218,
+ 523, 524, 525, 526, 615, 616, 620, 205, 462, 463,
+ 464, 465, 292, 610, 309, 468, 467, 331, 332, 379,
+ 449, 539, 541, 552, 556, 558, 560, 566, 569, 540,
+ 542, 553, 557, 559, 561, 567, 570, 529, 531, 533,
+ 535, 548, 547, 544, 572, 573, 550, 555, 534, 546,
+ 551, 564, 571, 568, 528, 532, 536, 545, 563, 562,
+ 543, 554, 565, 549, 537, 530, 538, 0, 196, 221,
+ 368, 0, 454, 288, 645, 614, 484, 609, 206, 223,
+ 0, 262, 0, 0, 0, 0, 0, 0, 2403, 0,
+ 0, 2402, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 198, 200, 209, 222, 232, 236, 243,
+ 261, 276, 278, 285, 298, 310, 318, 319, 322, 328,
+ 380, 386, 387, 388, 389, 409, 410, 411, 414, 417,
+ 418, 421, 423, 424, 427, 431, 435, 436, 437, 439,
+ 441, 443, 455, 460, 474, 475, 476, 477, 478, 481,
+ 482, 488, 489, 490, 491, 492, 500, 501, 515, 585,
+ 587, 602, 621, 627, 480, 301, 302, 444, 445, 314,
+ 315, 641, 642, 300, 597, 628, 595, 640, 622, 438,
+ 378, 0, 0, 381, 281, 305, 320, 0, 613, 502,
+ 227, 466, 290, 251, 0, 0, 211, 246, 230, 259,
+ 274, 277, 324, 391, 400, 429, 434, 296, 271, 244,
+ 459, 241, 485, 518, 519, 520, 522, 395, 266, 433,
+ 396, 0, 376, 575, 576, 316, 0, 0, 527, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 416, 0, 0, 2350, 0, 0, 0, 0, 270, 0,
+ 0, 0, 0, 366, 267, 0, 0, 204, 505, 0,
+ 430, 0, 203, 0, 487, 252, 377, 374, 582, 282,
+ 273, 269, 250, 317, 385, 428, 517, 422, 0, 370,
+ 0, 0, 497, 401, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 323,
+ 248, 325, 202, 413, 498, 286, 0, 0, 0, 0,
+ 1942, 194, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 238, 0, 0, 245, 0, 0, 0, 351, 360,
+ 359, 339, 340, 342, 344, 350, 357, 363, 336, 345,
+ 0, 0, 606, 0, 0, 0, 265, 321, 272, 264,
+ 579, 0, 0, 0, 0, 0, 0, 0, 0, 229,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 275, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 297, 0, 402, 257,
+ 0, 453, 0, 0, 0, 624, 0, 0, 0, 0,
+ 0, 0, 0, 365, 0, 330, 197, 225, 0, 0,
+ 412, 461, 473, 0, 0, 0, 253, 0, 471, 426,
+ 601, 233, 284, 458, 432, 469, 440, 287, 0, 2348,
+ 470, 372, 584, 450, 598, 625, 626, 263, 406, 611,
+ 521, 619, 643, 226, 260, 420, 506, 604, 494, 397,
+ 580, 581, 329, 493, 295, 201, 369, 631, 224, 479,
+ 371, 242, 231, 586, 608, 299, 289, 456, 638, 213,
+ 516, 596, 239, 483, 0, 0, 646, 247, 504, 215,
+ 593, 503, 393, 326, 327, 214, 0, 457, 268, 293,
+ 0, 0, 258, 415, 588, 589, 256, 647, 228, 618,
+ 220, 0, 617, 408, 583, 594, 394, 383, 219, 592,
+ 392, 382, 334, 355, 356, 280, 307, 447, 375, 448,
+ 306, 308, 404, 403, 405, 207, 605, 0, 208, 0,
+ 499, 607, 648, 452, 212, 234, 235, 237, 0, 279,
+ 283, 291, 294, 303, 304, 313, 367, 419, 446, 442,
+ 451, 0, 578, 599, 612, 623, 629, 630, 632, 633,
+ 634, 635, 636, 639, 637, 407, 311, 495, 333, 373,
+ 0, 0, 425, 472, 240, 603, 496, 199, 0, 0,
+ 0, 0, 254, 255, 0, 574, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 649, 650, 651, 652, 653,
+ 654, 655, 656, 657, 658, 659, 660, 661, 662, 663,
+ 664, 665, 666, 644, 507, 513, 508, 509, 510, 511,
+ 512, 0, 514, 0, 0, 0, 0, 0, 398, 0,
+ 590, 591, 667, 384, 486, 600, 335, 349, 352, 341,
+ 361, 0, 362, 337, 338, 343, 346, 347, 348, 353,
+ 354, 358, 364, 249, 210, 390, 399, 577, 312, 216,
+ 217, 218, 523, 524, 525, 526, 615, 616, 620, 205,
+ 462, 463, 464, 465, 292, 610, 309, 468, 467, 331,
+ 332, 379, 449, 539, 541, 552, 556, 558, 560, 566,
+ 569, 540, 542, 553, 557, 559, 561, 567, 570, 529,
+ 531, 533, 535, 548, 547, 544, 572, 573, 550, 555,
+ 534, 546, 551, 564, 571, 568, 528, 532, 536, 545,
+ 563, 562, 543, 554, 565, 549, 537, 530, 538, 0,
+ 196, 221, 368, 0, 454, 288, 645, 614, 484, 609,
+ 206, 223, 0, 262, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 198, 200, 209, 222, 232,
+ 236, 243, 261, 276, 278, 285, 298, 310, 318, 319,
+ 322, 328, 380, 386, 387, 388, 389, 409, 410, 411,
+ 414, 417, 418, 421, 423, 424, 427, 431, 435, 436,
+ 437, 439, 441, 443, 455, 460, 474, 475, 476, 477,
+ 478, 481, 482, 488, 489, 490, 491, 492, 500, 501,
+ 515, 585, 587, 602, 621, 627, 480, 301, 302, 444,
+ 445, 314, 315, 641, 642, 300, 597, 628, 595, 640,
+ 622, 438, 378, 0, 0, 381, 281, 305, 320, 0,
+ 613, 502, 227, 466, 290, 251, 0, 0, 211, 246,
+ 230, 259, 274, 277, 324, 391, 400, 429, 434, 296,
+ 271, 244, 459, 241, 485, 518, 519, 520, 522, 395,
+ 266, 433, 396, 0, 376, 575, 576, 316, 0, 0,
+ 527, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 416, 0, 0, 0, 0, 0, 0, 0,
+ 270, 0, 0, 0, 0, 366, 267, 0, 0, 204,
+ 505, 0, 430, 0, 203, 0, 487, 252, 377, 374,
+ 582, 282, 273, 269, 250, 317, 385, 428, 517, 422,
+ 0, 370, 0, 0, 497, 401, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 323, 248, 325, 202, 413, 498, 286, 0, 0,
+ 0, 0, 0, 717, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 238, 0, 0, 245, 0, 0, 0,
+ 351, 360, 359, 339, 340, 342, 344, 350, 357, 363,
+ 336, 345, 0, 0, 606, 0, 0, 0, 265, 321,
+ 272, 264, 579, 0, 0, 0, 0, 0, 0, 0,
+ 0, 229, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 275, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1085, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 297, 0,
+ 402, 257, 0, 453, 0, 0, 0, 624, 0, 0,
+ 0, 0, 0, 0, 0, 365, 1091, 330, 197, 225,
+ 1089, 0, 412, 461, 473, 0, 0, 0, 253, 0,
+ 471, 426, 601, 233, 284, 458, 432, 469, 440, 287,
+ 0, 0, 470, 372, 584, 450, 598, 625, 626, 263,
+ 406, 611, 521, 619, 643, 226, 260, 420, 506, 604,
+ 494, 397, 580, 581, 329, 493, 295, 201, 369, 631,
+ 224, 479, 371, 242, 231, 586, 608, 299, 289, 456,
+ 638, 213, 516, 596, 239, 483, 0, 0, 646, 247,
+ 504, 215, 593, 503, 393, 326, 327, 214, 0, 457,
+ 268, 293, 0, 0, 258, 415, 588, 589, 256, 647,
+ 228, 618, 220, 0, 617, 408, 583, 594, 394, 383,
+ 219, 592, 392, 382, 334, 355, 356, 280, 307, 447,
+ 375, 448, 306, 308, 404, 403, 405, 207, 605, 0,
+ 208, 0, 499, 607, 648, 452, 212, 234, 235, 237,
+ 0, 279, 283, 291, 294, 303, 304, 313, 367, 419,
+ 446, 442, 451, 0, 578, 599, 612, 623, 629, 630,
+ 632, 633, 634, 635, 636, 639, 637, 407, 311, 495,
+ 333, 373, 0, 0, 425, 472, 240, 603, 496, 199,
+ 0, 0, 0, 0, 254, 255, 0, 574, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 649, 650, 651,
+ 652, 653, 654, 655, 656, 657, 658, 659, 660, 661,
+ 662, 663, 664, 665, 666, 644, 507, 513, 508, 509,
+ 510, 511, 512, 0, 514, 0, 0, 0, 0, 0,
+ 398, 0, 590, 591, 667, 384, 486, 600, 335, 349,
+ 352, 341, 361, 0, 362, 337, 338, 343, 346, 347,
+ 348, 353, 354, 358, 364, 249, 210, 390, 399, 577,
+ 312, 216, 217, 218, 523, 524, 525, 526, 615, 616,
+ 620, 205, 462, 463, 464, 465, 292, 610, 309, 468,
+ 467, 331, 332, 379, 449, 539, 541, 552, 556, 558,
+ 560, 566, 569, 540, 542, 553, 557, 559, 561, 567,
+ 570, 529, 531, 533, 535, 548, 547, 544, 572, 573,
+ 550, 555, 534, 546, 551, 564, 571, 568, 528, 532,
+ 536, 545, 563, 562, 543, 554, 565, 549, 537, 530,
+ 538, 0, 196, 221, 368, 0, 454, 288, 645, 614,
+ 484, 609, 206, 223, 0, 262, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 198, 200, 209,
+ 222, 232, 236, 243, 261, 276, 278, 285, 298, 310,
+ 318, 319, 322, 328, 380, 386, 387, 388, 389, 409,
+ 410, 411, 414, 417, 418, 421, 423, 424, 427, 431,
+ 435, 436, 437, 439, 441, 443, 455, 460, 474, 475,
+ 476, 477, 478, 481, 482, 488, 489, 490, 491, 492,
+ 500, 501, 515, 585, 587, 602, 621, 627, 480, 301,
+ 302, 444, 445, 314, 315, 641, 642, 300, 597, 628,
+ 595, 640, 622, 438, 378, 0, 0, 381, 281, 305,
+ 320, 0, 613, 502, 227, 466, 290, 251, 0, 0,
+ 211, 246, 230, 259, 274, 277, 324, 391, 400, 429,
+ 434, 296, 271, 244, 459, 241, 485, 518, 519, 520,
+ 522, 395, 266, 433, 396, 0, 376, 575, 576, 316,
+ 0, 0, 527, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 416, 0, 0, 2350, 0, 0,
+ 0, 0, 270, 0, 0, 0, 0, 366, 267, 0,
+ 0, 204, 505, 0, 430, 0, 203, 0, 487, 252,
+ 377, 374, 582, 282, 273, 269, 250, 317, 385, 428,
+ 517, 422, 0, 370, 0, 0, 497, 401, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 323, 248, 325, 202, 413, 498, 286,
+ 0, 0, 0, 0, 1942, 194, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 238, 0, 0, 245, 0,
+ 0, 0, 351, 360, 359, 339, 340, 342, 344, 350,
+ 357, 363, 336, 345, 0, 0, 606, 0, 0, 0,
+ 265, 321, 272, 264, 579, 0, 0, 0, 0, 0,
+ 0, 0, 0, 229, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 275, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 297, 0, 402, 257, 0, 453, 0, 0, 0, 624,
+ 0, 0, 0, 0, 0, 0, 0, 365, 0, 330,
+ 197, 225, 0, 0, 412, 461, 473, 0, 0, 0,
+ 253, 0, 471, 426, 601, 233, 284, 458, 432, 469,
+ 440, 287, 0, 0, 470, 372, 584, 450, 598, 625,
+ 626, 263, 406, 611, 521, 619, 643, 226, 260, 420,
+ 506, 604, 494, 397, 580, 581, 329, 493, 295, 201,
+ 369, 631, 224, 479, 371, 242, 231, 586, 608, 299,
+ 289, 456, 638, 213, 516, 596, 239, 483, 0, 0,
+ 646, 247, 504, 215, 593, 503, 393, 326, 327, 214,
+ 0, 457, 268, 293, 0, 0, 258, 415, 588, 589,
+ 256, 647, 228, 618, 220, 0, 617, 408, 583, 594,
+ 394, 383, 219, 592, 392, 382, 334, 355, 356, 280,
+ 307, 447, 375, 448, 306, 308, 404, 403, 405, 207,
+ 605, 0, 208, 0, 499, 607, 648, 452, 212, 234,
+ 235, 237, 0, 279, 283, 291, 294, 303, 304, 313,
+ 367, 419, 446, 442, 451, 0, 578, 599, 612, 623,
+ 629, 630, 632, 633, 634, 635, 636, 639, 637, 407,
+ 311, 495, 333, 373, 0, 0, 425, 472, 240, 603,
+ 496, 199, 0, 0, 0, 0, 254, 255, 0, 574,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 649,
+ 650, 651, 652, 653, 654, 655, 656, 657, 658, 659,
+ 660, 661, 662, 663, 664, 665, 666, 644, 507, 513,
+ 508, 509, 510, 511, 512, 0, 514, 0, 0, 0,
+ 0, 0, 398, 0, 590, 591, 667, 384, 486, 600,
+ 335, 349, 352, 341, 361, 0, 362, 337, 338, 343,
+ 346, 347, 348, 353, 354, 358, 364, 249, 210, 390,
+ 399, 577, 312, 216, 217, 218, 523, 524, 525, 526,
+ 615, 616, 620, 205, 462, 463, 464, 465, 292, 610,
+ 309, 468, 467, 331, 332, 379, 449, 539, 541, 552,
+ 556, 558, 560, 566, 569, 540, 542, 553, 557, 559,
+ 561, 567, 570, 529, 531, 533, 535, 548, 547, 544,
+ 572, 573, 550, 555, 534, 546, 551, 564, 571, 568,
+ 528, 532, 536, 545, 563, 562, 543, 554, 565, 549,
+ 537, 530, 538, 0, 196, 221, 368, 0, 454, 288,
+ 645, 614, 484, 609, 206, 223, 0, 262, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 198,
+ 200, 209, 222, 232, 236, 243, 261, 276, 278, 285,
+ 298, 310, 318, 319, 322, 328, 380, 386, 387, 388,
+ 389, 409, 410, 411, 414, 417, 418, 421, 423, 424,
+ 427, 431, 435, 436, 437, 439, 441, 443, 455, 460,
+ 474, 475, 476, 477, 478, 481, 482, 488, 489, 490,
+ 491, 492, 500, 501, 515, 585, 587, 602, 621, 627,
+ 480, 301, 302, 444, 445, 314, 315, 641, 642, 300,
+ 597, 628, 595, 640, 622, 438, 378, 0, 0, 381,
+ 281, 305, 320, 0, 613, 502, 227, 466, 290, 251,
+ 0, 0, 211, 246, 230, 259, 274, 277, 324, 391,
+ 400, 429, 434, 296, 271, 244, 459, 241, 485, 518,
+ 519, 520, 522, 395, 266, 433, 396, 0, 376, 575,
+ 576, 316, 0, 0, 527, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 416, 0, 0, 0,
+ 0, 0, 0, 0, 270, 0, 0, 0, 0, 366,
+ 267, 0, 0, 204, 505, 0, 430, 0, 203, 0,
+ 487, 252, 377, 374, 582, 282, 273, 269, 250, 317,
+ 385, 428, 517, 422, 0, 370, 0, 0, 497, 401,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 323, 248, 325, 202, 413,
+ 498, 286, 0, 0, 0, 1736, 0, 717, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 238, 0, 0,
+ 245, 0, 0, 0, 351, 360, 359, 339, 340, 342,
+ 344, 350, 357, 363, 336, 345, 0, 0, 606, 0,
+ 0, 0, 265, 321, 272, 264, 579, 0, 0, 0,
+ 0, 0, 0, 0, 0, 229, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 275, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 297, 0, 402, 257, 0, 453, 0, 0,
+ 0, 624, 0, 0, 0, 3701, 0, 0, 0, 365,
+ 0, 330, 197, 225, 0, 0, 412, 461, 473, 0,
+ 0, 0, 253, 0, 471, 426, 601, 233, 284, 458,
+ 432, 469, 440, 287, 0, 0, 470, 372, 584, 450,
+ 598, 625, 626, 263, 406, 611, 521, 619, 643, 226,
+ 260, 420, 506, 604, 494, 397, 580, 581, 329, 493,
+ 295, 201, 369, 631, 224, 479, 371, 242, 231, 586,
+ 608, 299, 289, 456, 638, 213, 516, 596, 239, 483,
+ 0, 0, 646, 247, 504, 215, 593, 503, 393, 326,
+ 327, 214, 0, 457, 268, 293, 0, 0, 258, 415,
+ 588, 589, 256, 647, 228, 618, 220, 0, 617, 408,
+ 583, 594, 394, 383, 219, 592, 392, 382, 334, 355,
+ 356, 280, 307, 447, 375, 448, 306, 308, 404, 403,
+ 405, 207, 605, 0, 208, 0, 499, 607, 648, 452,
+ 212, 234, 235, 237, 0, 279, 283, 291, 294, 303,
+ 304, 313, 367, 419, 446, 442, 451, 0, 578, 599,
+ 612, 623, 629, 630, 632, 633, 634, 635, 636, 639,
+ 637, 407, 311, 495, 333, 373, 0, 0, 425, 472,
+ 240, 603, 496, 199, 0, 0, 0, 0, 254, 255,
+ 0, 574, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 649, 650, 651, 652, 653, 654, 655, 656, 657,
+ 658, 659, 660, 661, 662, 663, 664, 665, 666, 644,
+ 507, 513, 508, 509, 510, 511, 512, 0, 514, 0,
+ 0, 0, 0, 0, 398, 0, 590, 591, 667, 384,
+ 486, 600, 335, 349, 352, 341, 361, 0, 362, 337,
+ 338, 343, 346, 347, 348, 353, 354, 358, 364, 249,
+ 210, 390, 399, 577, 312, 216, 217, 218, 523, 524,
+ 525, 526, 615, 616, 620, 205, 462, 463, 464, 465,
+ 292, 610, 309, 468, 467, 331, 332, 379, 449, 539,
+ 541, 552, 556, 558, 560, 566, 569, 540, 542, 553,
+ 557, 559, 561, 567, 570, 529, 531, 533, 535, 548,
+ 547, 544, 572, 573, 550, 555, 534, 546, 551, 564,
+ 571, 568, 528, 532, 536, 545, 563, 562, 543, 554,
+ 565, 549, 537, 530, 538, 0, 196, 221, 368, 0,
+ 454, 288, 645, 614, 484, 609, 206, 223, 0, 262,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 198, 200, 209, 222, 232, 236, 243, 261, 276,
+ 278, 285, 298, 310, 318, 319, 322, 328, 380, 386,
+ 387, 388, 389, 409, 410, 411, 414, 417, 418, 421,
+ 423, 424, 427, 431, 435, 436, 437, 439, 441, 443,
+ 455, 460, 474, 475, 476, 477, 478, 481, 482, 488,
+ 489, 490, 491, 492, 500, 501, 515, 585, 587, 602,
+ 621, 627, 480, 301, 302, 444, 445, 314, 315, 641,
+ 642, 300, 597, 628, 595, 640, 622, 438, 378, 0,
+ 0, 381, 281, 305, 320, 0, 613, 502, 227, 466,
+ 290, 251, 0, 0, 211, 246, 230, 259, 274, 277,
+ 324, 391, 400, 429, 434, 296, 271, 244, 459, 241,
+ 485, 518, 519, 520, 522, 395, 266, 433, 396, 0,
+ 376, 575, 576, 316, 0, 0, 527, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 416, 0,
+ 0, 0, 0, 0, 0, 0, 270, 0, 0, 0,
+ 0, 366, 267, 0, 0, 204, 505, 0, 430, 0,
+ 203, 0, 487, 252, 377, 374, 582, 282, 273, 269,
+ 250, 317, 385, 428, 517, 422, 0, 370, 0, 0,
+ 497, 401, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 323, 248, 325,
+ 202, 413, 498, 286, 0, 0, 0, 0, 2109, 717,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 238,
+ 0, 0, 245, 0, 0, 0, 351, 360, 359, 339,
+ 340, 342, 344, 350, 357, 363, 336, 345, 0, 0,
+ 606, 0, 0, 0, 265, 321, 272, 264, 579, 0,
+ 0, 0, 0, 0, 0, 0, 0, 229, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 275, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2110, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 297, 0, 402, 257, 0, 453,
+ 0, 0, 0, 624, 0, 0, 0, 0, 0, 0,
+ 0, 365, 0, 330, 197, 225, 0, 0, 412, 461,
+ 473, 0, 0, 0, 253, 0, 471, 426, 601, 233,
+ 284, 458, 432, 469, 440, 287, 0, 0, 470, 372,
+ 584, 450, 598, 625, 626, 263, 406, 611, 521, 619,
+ 643, 226, 260, 420, 506, 604, 494, 397, 580, 581,
+ 329, 493, 295, 201, 369, 631, 224, 479, 371, 242,
+ 231, 586, 608, 299, 289, 456, 638, 213, 516, 596,
+ 239, 483, 0, 0, 646, 247, 504, 215, 593, 503,
+ 393, 326, 327, 214, 0, 457, 268, 293, 0, 0,
+ 258, 415, 588, 589, 256, 647, 228, 618, 220, 0,
+ 617, 408, 583, 594, 394, 383, 219, 592, 392, 382,
+ 334, 355, 356, 280, 307, 447, 375, 448, 306, 308,
+ 404, 403, 405, 207, 605, 0, 208, 0, 499, 607,
+ 648, 452, 212, 234, 235, 237, 0, 279, 283, 291,
+ 294, 303, 304, 313, 367, 419, 446, 442, 451, 0,
+ 578, 599, 612, 623, 629, 630, 632, 633, 634, 635,
+ 636, 639, 637, 407, 311, 495, 333, 373, 0, 0,
+ 425, 472, 240, 603, 496, 199, 0, 0, 0, 0,
+ 254, 255, 0, 574, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 649, 650, 651, 652, 653, 654, 655,
+ 656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
+ 666, 644, 507, 513, 508, 509, 510, 511, 512, 0,
+ 514, 0, 0, 0, 0, 0, 398, 0, 590, 591,
+ 667, 384, 486, 600, 335, 349, 352, 341, 361, 0,
+ 362, 337, 338, 343, 346, 347, 348, 353, 354, 358,
+ 364, 249, 210, 390, 399, 577, 312, 216, 217, 218,
+ 523, 524, 525, 526, 615, 616, 620, 205, 462, 463,
+ 464, 465, 292, 610, 309, 468, 467, 331, 332, 379,
+ 449, 539, 541, 552, 556, 558, 560, 566, 569, 540,
+ 542, 553, 557, 559, 561, 567, 570, 529, 531, 533,
+ 535, 548, 547, 544, 572, 573, 550, 555, 534, 546,
+ 551, 564, 571, 568, 528, 532, 536, 545, 563, 562,
+ 543, 554, 565, 549, 537, 530, 538, 0, 196, 221,
+ 368, 0, 454, 288, 645, 614, 484, 609, 206, 223,
+ 0, 262, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 198, 200, 209, 222, 232, 236, 243,
+ 261, 276, 278, 285, 298, 310, 318, 319, 322, 328,
+ 380, 386, 387, 388, 389, 409, 410, 411, 414, 417,
+ 418, 421, 423, 424, 427, 431, 435, 436, 437, 439,
+ 441, 443, 455, 460, 474, 475, 476, 477, 478, 481,
+ 482, 488, 489, 490, 491, 492, 500, 501, 515, 585,
+ 587, 602, 621, 627, 480, 301, 302, 444, 445, 314,
+ 315, 641, 642, 300, 597, 628, 595, 640, 622, 438,
+ 378, 0, 0, 381, 281, 305, 320, 0, 613, 502,
+ 227, 466, 290, 251, 0, 0, 211, 246, 230, 259,
+ 274, 277, 324, 391, 400, 429, 434, 296, 271, 244,
+ 459, 241, 485, 518, 519, 520, 522, 395, 266, 433,
+ 396, 0, 376, 575, 576, 316, 0, 0, 527, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 416, 0, 0, 0, 0, 0, 0, 0, 270, 0,
+ 0, 0, 0, 366, 267, 0, 0, 204, 505, 0,
+ 430, 0, 203, 0, 487, 252, 377, 374, 582, 282,
+ 273, 269, 250, 317, 385, 428, 517, 422, 0, 370,
+ 0, 0, 497, 401, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 323,
+ 248, 325, 202, 413, 498, 286, 0, 0, 0, 0,
+ 2852, 717, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 238, 0, 0, 245, 0, 0, 0, 351, 360,
+ 359, 339, 340, 342, 344, 350, 357, 363, 336, 345,
+ 0, 0, 606, 0, 0, 0, 265, 321, 272, 264,
+ 579, 0, 0, 0, 0, 0, 0, 0, 0, 229,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 275, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2853, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 297, 0, 402, 257,
+ 0, 453, 0, 0, 0, 624, 0, 0, 0, 0,
+ 0, 0, 0, 365, 0, 330, 197, 225, 0, 0,
+ 412, 461, 473, 0, 0, 0, 253, 0, 471, 426,
+ 601, 233, 284, 458, 432, 469, 440, 287, 0, 0,
+ 470, 372, 584, 450, 598, 625, 626, 263, 406, 611,
+ 521, 619, 643, 226, 260, 420, 506, 604, 494, 397,
+ 580, 581, 329, 493, 295, 201, 369, 631, 224, 479,
+ 371, 242, 231, 586, 608, 299, 289, 456, 638, 213,
+ 516, 596, 239, 483, 0, 0, 646, 247, 504, 215,
+ 593, 503, 393, 326, 327, 214, 0, 457, 268, 293,
+ 0, 0, 258, 415, 588, 589, 256, 647, 228, 618,
+ 220, 0, 617, 408, 583, 594, 394, 383, 219, 592,
+ 392, 382, 334, 355, 356, 280, 307, 447, 375, 448,
+ 306, 308, 404, 403, 405, 207, 605, 0, 208, 0,
+ 499, 607, 648, 452, 212, 234, 235, 237, 0, 279,
+ 283, 291, 294, 303, 304, 313, 367, 419, 446, 442,
+ 451, 0, 578, 599, 612, 623, 629, 630, 632, 633,
+ 634, 635, 636, 639, 637, 407, 311, 495, 333, 373,
+ 0, 0, 425, 472, 240, 603, 496, 199, 0, 0,
+ 0, 0, 254, 255, 0, 574, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 649, 650, 651, 652, 653,
+ 654, 655, 656, 657, 658, 659, 660, 661, 662, 663,
+ 664, 665, 666, 644, 507, 513, 508, 509, 510, 511,
+ 512, 0, 514, 0, 0, 0, 0, 0, 398, 0,
+ 590, 591, 667, 384, 486, 600, 335, 349, 352, 341,
+ 361, 0, 362, 337, 338, 343, 346, 347, 348, 353,
+ 354, 358, 364, 249, 210, 390, 399, 577, 312, 216,
+ 217, 218, 523, 524, 525, 526, 615, 616, 620, 205,
+ 462, 463, 464, 465, 292, 610, 309, 468, 467, 331,
+ 332, 379, 449, 539, 541, 552, 556, 558, 560, 566,
+ 569, 540, 542, 553, 557, 559, 561, 567, 570, 529,
+ 531, 533, 535, 548, 547, 544, 572, 573, 550, 555,
+ 534, 546, 551, 564, 571, 568, 528, 532, 536, 545,
+ 563, 562, 543, 554, 565, 549, 537, 530, 538, 0,
+ 196, 221, 368, 0, 454, 288, 645, 614, 484, 609,
+ 206, 223, 0, 262, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 198, 200, 209, 222, 232,
+ 236, 243, 261, 276, 278, 285, 298, 310, 318, 319,
+ 322, 328, 380, 386, 387, 388, 389, 409, 410, 411,
+ 414, 417, 418, 421, 423, 424, 427, 431, 435, 436,
+ 437, 439, 441, 443, 455, 460, 474, 475, 476, 477,
+ 478, 481, 482, 488, 489, 490, 491, 492, 500, 501,
+ 515, 585, 587, 602, 621, 627, 480, 301, 302, 444,
+ 445, 314, 315, 641, 642, 300, 597, 628, 595, 640,
+ 622, 438, 378, 0, 0, 381, 281, 305, 320, 0,
+ 613, 502, 227, 466, 290, 251, 0, 0, 211, 246,
+ 230, 259, 274, 277, 324, 391, 400, 429, 434, 296,
+ 271, 244, 459, 241, 485, 518, 519, 520, 522, 395,
+ 266, 433, 396, 0, 376, 575, 576, 316, 0, 0,
+ 527, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 416, 0, 0, 0, 0, 0, 0, 0,
+ 270, 0, 0, 0, 0, 366, 267, 0, 0, 204,
+ 505, 0, 430, 0, 203, 0, 487, 252, 377, 374,
+ 582, 282, 273, 269, 250, 317, 385, 428, 517, 422,
+ 0, 370, 0, 0, 497, 401, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 323, 248, 325, 202, 413, 498, 286, 0, 0,
+ 0, 0, 0, 717, 0, 0, 0, 0, 2837, 0,
+ 0, 0, 0, 238, 0, 0, 245, 2838, 0, 0,
+ 351, 360, 359, 339, 340, 342, 344, 350, 357, 363,
+ 336, 345, 0, 0, 606, 0, 0, 0, 265, 321,
+ 272, 264, 579, 0, 0, 0, 0, 0, 0, 0,
+ 0, 229, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 275, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 297, 0,
+ 402, 257, 0, 453, 0, 0, 0, 624, 0, 0,
+ 0, 0, 0, 0, 0, 365, 0, 330, 197, 225,
+ 0, 0, 412, 461, 473, 0, 0, 0, 253, 0,
+ 471, 426, 601, 233, 284, 458, 432, 469, 440, 287,
+ 0, 0, 470, 372, 584, 450, 598, 625, 626, 263,
+ 406, 611, 521, 619, 643, 226, 260, 420, 506, 604,
+ 494, 397, 580, 581, 329, 493, 295, 201, 369, 631,
+ 224, 479, 371, 242, 231, 586, 608, 299, 289, 456,
+ 638, 213, 516, 596, 239, 483, 0, 0, 646, 247,
+ 504, 215, 593, 503, 393, 326, 327, 214, 0, 457,
+ 268, 293, 0, 0, 258, 415, 588, 589, 256, 647,
+ 228, 618, 220, 0, 617, 408, 583, 594, 394, 383,
+ 219, 592, 392, 382, 334, 355, 356, 280, 307, 447,
+ 375, 448, 306, 308, 404, 403, 405, 207, 605, 0,
+ 208, 0, 499, 607, 648, 452, 212, 234, 235, 237,
+ 0, 279, 283, 291, 294, 303, 304, 313, 367, 419,
+ 446, 442, 451, 0, 578, 599, 612, 623, 629, 630,
+ 632, 633, 634, 635, 636, 639, 637, 407, 311, 495,
+ 333, 373, 0, 0, 425, 472, 240, 603, 496, 199,
+ 0, 0, 0, 0, 254, 255, 0, 574, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 649, 650, 651,
+ 652, 653, 654, 655, 656, 657, 658, 659, 660, 661,
+ 662, 663, 664, 665, 666, 644, 507, 513, 508, 509,
+ 510, 511, 512, 0, 514, 0, 0, 0, 0, 0,
+ 398, 0, 590, 591, 667, 384, 486, 600, 335, 349,
+ 352, 341, 361, 0, 362, 337, 338, 343, 346, 347,
+ 348, 353, 354, 358, 364, 249, 210, 390, 399, 577,
+ 312, 216, 217, 218, 523, 524, 525, 526, 615, 616,
+ 620, 205, 462, 463, 464, 465, 292, 610, 309, 468,
+ 467, 331, 332, 379, 449, 539, 541, 552, 556, 558,
+ 560, 566, 569, 540, 542, 553, 557, 559, 561, 567,
+ 570, 529, 531, 533, 535, 548, 547, 544, 572, 573,
+ 550, 555, 534, 546, 551, 564, 571, 568, 528, 532,
+ 536, 545, 563, 562, 543, 554, 565, 549, 537, 530,
+ 538, 0, 196, 221, 368, 0, 454, 288, 645, 614,
+ 484, 609, 206, 223, 0, 262, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 198, 200, 209,
+ 222, 232, 236, 243, 261, 276, 278, 285, 298, 310,
+ 318, 319, 322, 328, 380, 386, 387, 388, 389, 409,
+ 410, 411, 414, 417, 418, 421, 423, 424, 427, 431,
+ 435, 436, 437, 439, 441, 443, 455, 460, 474, 475,
+ 476, 477, 478, 481, 482, 488, 489, 490, 491, 492,
+ 500, 501, 515, 585, 587, 602, 621, 627, 480, 301,
+ 302, 444, 445, 314, 315, 641, 642, 300, 597, 628,
+ 595, 640, 622, 438, 378, 0, 0, 381, 281, 305,
+ 320, 0, 613, 502, 227, 466, 290, 251, 0, 0,
+ 211, 246, 230, 259, 274, 277, 324, 391, 400, 429,
+ 434, 296, 271, 244, 459, 241, 485, 518, 519, 520,
+ 522, 395, 266, 433, 396, 0, 376, 575, 576, 316,
+ 0, 0, 527, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 416, 0, 0, 0, 0, 0,
+ 0, 0, 270, 1782, 0, 0, 0, 366, 267, 0,
+ 0, 204, 505, 0, 430, 0, 203, 0, 487, 252,
+ 377, 374, 582, 282, 273, 269, 250, 317, 385, 428,
+ 517, 422, 0, 370, 0, 0, 497, 401, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 323, 248, 325, 202, 413, 498, 286,
+ 0, 0, 0, 0, 1781, 717, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 238, 0, 0, 245, 0,
+ 0, 0, 351, 360, 359, 339, 340, 342, 344, 350,
+ 357, 363, 336, 345, 0, 0, 606, 0, 0, 0,
+ 265, 321, 272, 264, 579, 0, 0, 0, 0, 0,
+ 0, 0, 0, 229, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 275, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 297, 0, 402, 257, 0, 453, 0, 0, 0, 624,
+ 0, 0, 0, 0, 0, 0, 0, 365, 0, 330,
+ 197, 225, 0, 0, 412, 461, 473, 0, 0, 0,
+ 253, 0, 471, 426, 601, 233, 284, 458, 432, 469,
+ 440, 287, 0, 0, 470, 372, 584, 450, 598, 625,
+ 626, 263, 406, 611, 521, 619, 643, 226, 260, 420,
+ 506, 604, 494, 397, 580, 581, 329, 493, 295, 201,
+ 369, 631, 224, 479, 371, 242, 231, 586, 608, 299,
+ 289, 456, 638, 213, 516, 596, 239, 483, 0, 0,
+ 646, 247, 504, 215, 593, 503, 393, 326, 327, 214,
+ 0, 457, 268, 293, 0, 0, 258, 415, 588, 589,
+ 256, 647, 228, 618, 220, 0, 617, 408, 583, 594,
+ 394, 383, 219, 592, 392, 382, 334, 355, 356, 280,
+ 307, 447, 375, 448, 306, 308, 404, 403, 405, 207,
+ 605, 0, 208, 0, 499, 607, 648, 452, 212, 234,
+ 235, 237, 0, 279, 283, 291, 294, 303, 304, 313,
+ 367, 419, 446, 442, 451, 0, 578, 599, 612, 623,
+ 629, 630, 632, 633, 634, 635, 636, 639, 637, 407,
+ 311, 495, 333, 373, 0, 0, 425, 472, 240, 603,
+ 496, 199, 0, 0, 0, 0, 254, 255, 0, 574,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 649,
+ 650, 651, 652, 653, 654, 655, 656, 657, 658, 659,
+ 660, 661, 662, 663, 664, 665, 666, 644, 507, 513,
+ 508, 509, 510, 511, 512, 0, 514, 0, 0, 0,
+ 0, 0, 398, 0, 590, 591, 667, 384, 486, 600,
+ 335, 349, 352, 341, 361, 0, 362, 337, 338, 343,
+ 346, 347, 348, 353, 354, 358, 364, 249, 210, 390,
+ 399, 577, 312, 216, 217, 218, 523, 524, 525, 526,
+ 615, 616, 620, 205, 462, 463, 464, 465, 292, 610,
+ 309, 468, 467, 331, 332, 379, 449, 539, 541, 552,
+ 556, 558, 560, 566, 569, 540, 542, 553, 557, 559,
+ 561, 567, 570, 529, 531, 533, 535, 548, 547, 544,
+ 572, 573, 550, 555, 534, 546, 551, 564, 571, 568,
+ 528, 532, 536, 545, 563, 562, 543, 554, 565, 549,
+ 537, 530, 538, 0, 196, 221, 368, 0, 454, 288,
+ 645, 614, 484, 609, 206, 223, 0, 262, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 198,
+ 200, 209, 222, 232, 236, 243, 261, 276, 278, 285,
+ 298, 310, 318, 319, 322, 328, 380, 386, 387, 388,
+ 389, 409, 410, 411, 414, 417, 418, 421, 423, 424,
+ 427, 431, 435, 436, 437, 439, 441, 443, 455, 460,
+ 474, 475, 476, 477, 478, 481, 482, 488, 489, 490,
+ 491, 492, 500, 501, 515, 585, 587, 602, 621, 627,
+ 480, 301, 302, 444, 445, 314, 315, 641, 642, 300,
+ 597, 628, 595, 640, 622, 438, 378, 0, 0, 381,
+ 281, 305, 320, 0, 613, 502, 227, 466, 290, 251,
+ 0, 0, 211, 246, 230, 259, 274, 277, 324, 391,
+ 400, 429, 434, 296, 271, 244, 459, 241, 485, 518,
+ 519, 520, 522, 395, 266, 433, 396, 0, 376, 575,
+ 576, 316, 0, 0, 527, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 416, 0, 0, 0,
+ 0, 0, 0, 0, 270, 0, 0, 0, 0, 366,
+ 267, 0, 0, 204, 505, 0, 430, 0, 203, 0,
+ 487, 252, 377, 374, 582, 282, 273, 269, 250, 317,
+ 385, 428, 517, 422, 0, 370, 0, 0, 497, 401,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 323, 248, 325, 202, 413,
+ 498, 286, 0, 0, 0, 0, 0, 719, 720, 721,
+ 0, 0, 0, 0, 0, 0, 0, 238, 0, 0,
+ 245, 0, 0, 0, 351, 360, 359, 339, 340, 342,
+ 344, 350, 357, 363, 336, 345, 0, 0, 606, 0,
+ 0, 0, 265, 321, 272, 264, 579, 0, 0, 0,
+ 0, 0, 0, 0, 0, 229, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 275, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 297, 0, 402, 257, 0, 453, 0, 0,
+ 0, 624, 0, 0, 0, 0, 0, 0, 0, 365,
+ 0, 330, 197, 225, 0, 0, 412, 461, 473, 0,
+ 0, 0, 253, 0, 471, 426, 601, 233, 284, 458,
+ 432, 469, 440, 287, 0, 0, 470, 372, 584, 450,
+ 598, 625, 626, 263, 406, 611, 521, 619, 643, 226,
+ 260, 420, 506, 604, 494, 397, 580, 581, 329, 493,
+ 295, 201, 369, 631, 224, 479, 371, 242, 231, 586,
+ 608, 299, 289, 456, 638, 213, 516, 596, 239, 483,
+ 0, 0, 646, 247, 504, 215, 593, 503, 393, 326,
+ 327, 214, 0, 457, 268, 293, 0, 0, 258, 415,
+ 588, 589, 256, 647, 228, 618, 220, 0, 617, 408,
+ 583, 594, 394, 383, 219, 592, 392, 382, 334, 355,
+ 356, 280, 307, 447, 375, 448, 306, 308, 404, 403,
+ 405, 207, 605, 0, 208, 0, 499, 607, 648, 452,
+ 212, 234, 235, 237, 0, 279, 283, 291, 294, 303,
+ 304, 313, 367, 419, 446, 442, 451, 0, 578, 599,
+ 612, 623, 629, 630, 632, 633, 634, 635, 636, 639,
+ 637, 407, 311, 495, 333, 373, 0, 0, 425, 472,
+ 240, 603, 496, 199, 0, 0, 0, 0, 254, 255,
+ 0, 574, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 649, 650, 651, 652, 653, 654, 655, 656, 657,
+ 658, 659, 660, 661, 662, 663, 664, 665, 666, 644,
+ 507, 513, 508, 509, 510, 511, 512, 0, 514, 0,
+ 0, 0, 0, 0, 398, 0, 590, 591, 667, 384,
+ 486, 600, 335, 349, 352, 341, 361, 0, 362, 337,
+ 338, 343, 346, 347, 348, 353, 354, 358, 364, 249,
+ 210, 390, 399, 577, 312, 216, 217, 218, 523, 524,
+ 525, 526, 615, 616, 620, 205, 462, 463, 464, 465,
+ 292, 610, 309, 468, 467, 331, 332, 379, 449, 539,
+ 541, 552, 556, 558, 560, 566, 569, 540, 542, 553,
+ 557, 559, 561, 567, 570, 529, 531, 533, 535, 548,
+ 547, 544, 572, 573, 550, 555, 534, 546, 551, 564,
+ 571, 568, 528, 532, 536, 545, 563, 562, 543, 554,
+ 565, 549, 537, 530, 538, 0, 196, 221, 368, 0,
+ 454, 288, 645, 614, 484, 609, 206, 223, 0, 262,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 198, 200, 209, 222, 232, 236, 243, 261, 276,
+ 278, 285, 298, 310, 318, 319, 322, 328, 380, 386,
+ 387, 388, 389, 409, 410, 411, 414, 417, 418, 421,
+ 423, 424, 427, 431, 435, 436, 437, 439, 441, 443,
+ 455, 460, 474, 475, 476, 477, 478, 481, 482, 488,
+ 489, 490, 491, 492, 500, 501, 515, 585, 587, 602,
+ 621, 627, 480, 301, 302, 444, 445, 314, 315, 641,
+ 642, 300, 597, 628, 595, 640, 622, 438, 378, 0,
+ 0, 381, 281, 305, 320, 0, 613, 502, 227, 466,
+ 290, 251, 0, 0, 211, 246, 230, 259, 274, 277,
+ 324, 391, 400, 429, 434, 296, 271, 244, 459, 241,
+ 485, 518, 519, 520, 522, 395, 266, 433, 396, 0,
+ 376, 575, 576, 316, 0, 0, 527, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 416, 0,
+ 0, 0, 0, 0, 0, 0, 270, 0, 0, 0,
+ 0, 366, 267, 0, 0, 204, 505, 0, 430, 0,
+ 203, 0, 487, 252, 377, 374, 582, 282, 273, 269,
+ 250, 317, 385, 428, 517, 422, 0, 370, 0, 0,
+ 497, 401, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 323, 248, 325,
+ 202, 413, 498, 286, 0, 0, 0, 0, 0, 717,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 238,
+ 0, 0, 245, 0, 0, 0, 351, 360, 359, 339,
+ 340, 342, 344, 350, 357, 363, 336, 345, 0, 0,
+ 606, 0, 0, 0, 265, 321, 272, 264, 579, 0,
+ 0, 0, 0, 0, 0, 0, 0, 229, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 275, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 297, 0, 402, 257, 0, 453,
+ 0, 0, 0, 624, 0, 0, 0, 4045, 0, 0,
+ 0, 365, 0, 330, 197, 225, 0, 0, 412, 461,
+ 473, 0, 0, 0, 253, 0, 471, 426, 601, 233,
+ 284, 458, 432, 469, 440, 287, 0, 0, 470, 372,
+ 584, 450, 598, 625, 626, 263, 406, 611, 521, 619,
+ 643, 226, 260, 420, 506, 604, 494, 397, 580, 581,
+ 329, 493, 295, 201, 369, 631, 224, 479, 371, 242,
+ 231, 586, 608, 299, 289, 456, 638, 213, 516, 596,
+ 239, 483, 0, 0, 646, 247, 504, 215, 593, 503,
+ 393, 326, 327, 214, 0, 457, 268, 293, 0, 0,
+ 258, 415, 588, 589, 256, 647, 228, 618, 220, 0,
+ 617, 408, 583, 594, 394, 383, 219, 592, 392, 382,
+ 334, 355, 356, 280, 307, 447, 375, 448, 306, 308,
+ 404, 403, 405, 207, 605, 0, 208, 0, 499, 607,
+ 648, 452, 212, 234, 235, 237, 0, 279, 283, 291,
+ 294, 303, 304, 313, 367, 419, 446, 442, 451, 0,
+ 578, 599, 612, 623, 629, 630, 632, 633, 634, 635,
+ 636, 639, 637, 407, 311, 495, 333, 373, 0, 0,
+ 425, 472, 240, 603, 496, 199, 0, 0, 0, 0,
+ 254, 255, 0, 574, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 649, 650, 651, 652, 653, 654, 655,
+ 656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
+ 666, 644, 507, 513, 508, 509, 510, 511, 512, 0,
+ 514, 0, 0, 0, 0, 0, 398, 0, 590, 591,
+ 667, 384, 486, 600, 335, 349, 352, 341, 361, 0,
+ 362, 337, 338, 343, 346, 347, 348, 353, 354, 358,
+ 364, 249, 210, 390, 399, 577, 312, 216, 217, 218,
+ 523, 524, 525, 526, 615, 616, 620, 205, 462, 463,
+ 464, 465, 292, 610, 309, 468, 467, 331, 332, 379,
+ 449, 539, 541, 552, 556, 558, 560, 566, 569, 540,
+ 542, 553, 557, 559, 561, 567, 570, 529, 531, 533,
+ 535, 548, 547, 544, 572, 573, 550, 555, 534, 546,
+ 551, 564, 571, 568, 528, 532, 536, 545, 563, 562,
+ 543, 554, 565, 549, 537, 530, 538, 0, 196, 221,
+ 368, 0, 454, 288, 645, 614, 484, 609, 206, 223,
+ 0, 262, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 198, 200, 209, 222, 232, 236, 243,
+ 261, 276, 278, 285, 298, 310, 318, 319, 322, 328,
+ 380, 386, 387, 388, 389, 409, 410, 411, 414, 417,
+ 418, 421, 423, 424, 427, 431, 435, 436, 437, 439,
+ 441, 443, 455, 460, 474, 475, 476, 477, 478, 481,
+ 482, 488, 489, 490, 491, 492, 500, 501, 515, 585,
+ 587, 602, 621, 627, 480, 301, 302, 444, 445, 314,
+ 315, 641, 642, 300, 597, 628, 595, 640, 622, 438,
+ 378, 0, 0, 381, 281, 305, 320, 0, 613, 502,
+ 227, 466, 290, 251, 0, 0, 211, 246, 230, 259,
+ 274, 277, 324, 391, 400, 429, 434, 296, 271, 244,
+ 459, 241, 485, 518, 519, 520, 522, 395, 266, 433,
+ 396, 0, 376, 575, 576, 316, 0, 0, 527, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 416, 0, 0, 0, 0, 0, 0, 0, 270, 0,
+ 0, 0, 0, 366, 267, 0, 0, 204, 505, 0,
+ 430, 0, 203, 0, 487, 252, 377, 374, 582, 282,
+ 273, 269, 250, 317, 385, 428, 517, 422, 0, 370,
+ 0, 0, 497, 401, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 323,
+ 248, 325, 202, 413, 498, 286, 0, 0, 0, 0,
+ 1942, 194, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 238, 0, 0, 245, 0, 0, 0, 351, 360,
+ 359, 339, 340, 342, 344, 350, 357, 363, 336, 345,
+ 0, 0, 606, 0, 0, 0, 265, 321, 272, 264,
+ 579, 0, 0, 0, 0, 0, 0, 0, 0, 229,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 275, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 297, 0, 402, 257,
+ 0, 453, 0, 0, 0, 624, 0, 0, 0, 0,
+ 0, 0, 0, 365, 0, 330, 197, 225, 0, 0,
+ 412, 461, 473, 0, 0, 0, 253, 0, 471, 426,
+ 601, 233, 284, 458, 432, 469, 440, 287, 0, 0,
+ 470, 372, 584, 450, 598, 625, 626, 263, 406, 611,
+ 521, 619, 643, 226, 260, 420, 506, 604, 494, 397,
+ 580, 581, 329, 493, 295, 201, 369, 631, 224, 479,
+ 371, 242, 231, 586, 608, 299, 289, 456, 638, 213,
+ 516, 596, 239, 483, 0, 0, 646, 247, 504, 215,
+ 593, 503, 393, 326, 327, 214, 0, 457, 268, 293,
+ 0, 0, 258, 415, 588, 589, 256, 647, 228, 618,
+ 220, 0, 617, 408, 583, 594, 394, 383, 219, 592,
+ 392, 382, 334, 355, 356, 280, 307, 447, 375, 448,
+ 306, 308, 404, 403, 405, 207, 605, 0, 208, 0,
+ 499, 607, 648, 452, 212, 234, 235, 237, 0, 279,
+ 283, 291, 294, 303, 304, 313, 367, 419, 446, 442,
+ 451, 0, 578, 599, 612, 623, 629, 630, 632, 633,
+ 634, 635, 636, 639, 637, 407, 311, 495, 333, 373,
+ 0, 0, 425, 472, 240, 603, 496, 199, 0, 0,
+ 0, 0, 254, 255, 0, 574, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 649, 650, 651, 652, 653,
+ 654, 655, 656, 657, 658, 659, 660, 661, 662, 663,
+ 664, 665, 666, 644, 507, 513, 508, 509, 510, 511,
+ 512, 0, 514, 0, 0, 0, 0, 0, 398, 0,
+ 590, 591, 667, 384, 486, 600, 335, 349, 352, 341,
+ 361, 0, 362, 337, 338, 343, 346, 347, 348, 353,
+ 354, 358, 364, 249, 210, 390, 399, 577, 312, 216,
+ 217, 218, 523, 524, 525, 526, 615, 616, 620, 205,
+ 462, 463, 464, 465, 292, 610, 309, 468, 467, 331,
+ 332, 379, 449, 539, 541, 552, 556, 558, 560, 566,
+ 569, 540, 542, 553, 557, 559, 561, 567, 570, 529,
+ 531, 533, 535, 548, 547, 544, 572, 573, 550, 555,
+ 534, 546, 551, 564, 571, 568, 528, 532, 536, 545,
+ 563, 562, 543, 554, 565, 549, 537, 530, 538, 0,
+ 196, 221, 368, 0, 454, 288, 645, 614, 484, 609,
+ 206, 223, 0, 262, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 198, 200, 209, 222, 232,
+ 236, 243, 261, 276, 278, 285, 298, 310, 318, 319,
+ 322, 328, 380, 386, 387, 388, 389, 409, 410, 411,
+ 414, 417, 418, 421, 423, 424, 427, 431, 435, 436,
+ 437, 439, 441, 443, 455, 460, 474, 475, 476, 477,
+ 478, 481, 482, 488, 489, 490, 491, 492, 500, 501,
+ 515, 585, 587, 602, 621, 627, 480, 301, 302, 444,
+ 445, 314, 315, 641, 642, 300, 597, 628, 595, 640,
+ 622, 438, 378, 0, 0, 381, 281, 305, 320, 0,
+ 613, 502, 227, 466, 290, 251, 0, 0, 211, 246,
+ 230, 259, 274, 277, 324, 391, 400, 429, 434, 296,
+ 271, 244, 459, 241, 485, 518, 519, 520, 522, 395,
+ 266, 433, 396, 0, 376, 575, 576, 316, 0, 0,
+ 527, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 416, 0, 0, 0, 0, 0, 0, 0,
+ 270, 0, 0, 0, 0, 366, 267, 0, 0, 204,
+ 505, 0, 430, 0, 203, 0, 487, 252, 377, 374,
+ 582, 282, 273, 269, 250, 317, 385, 428, 517, 422,
+ 0, 370, 0, 0, 497, 401, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 323, 248, 325, 202, 413, 498, 286, 0, 0,
+ 0, 0, 0, 717, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 238, 0, 0, 245, 0, 0, 0,
+ 351, 360, 359, 339, 340, 342, 344, 350, 357, 363,
+ 336, 345, 0, 0, 606, 0, 0, 0, 265, 321,
+ 272, 264, 579, 0, 0, 0, 0, 0, 0, 0,
+ 0, 229, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 275, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 297, 0,
+ 402, 257, 0, 453, 0, 0, 0, 624, 0, 0,
+ 0, 3701, 0, 0, 0, 365, 0, 330, 197, 225,
+ 0, 0, 412, 461, 473, 0, 0, 0, 253, 0,
+ 471, 426, 601, 233, 284, 458, 432, 469, 440, 287,
+ 0, 0, 470, 372, 584, 450, 598, 625, 626, 263,
+ 406, 611, 521, 619, 643, 226, 260, 420, 506, 604,
+ 494, 397, 580, 581, 329, 493, 295, 201, 369, 631,
+ 224, 479, 371, 242, 231, 586, 608, 299, 289, 456,
+ 638, 213, 516, 596, 239, 483, 0, 0, 646, 247,
+ 504, 215, 593, 503, 393, 326, 327, 214, 0, 457,
+ 268, 293, 0, 0, 258, 415, 588, 589, 256, 647,
+ 228, 618, 220, 0, 617, 408, 583, 594, 394, 383,
+ 219, 592, 392, 382, 334, 355, 356, 280, 307, 447,
+ 375, 448, 306, 308, 404, 403, 405, 207, 605, 0,
+ 208, 0, 499, 607, 648, 452, 212, 234, 235, 237,
+ 0, 279, 283, 291, 294, 303, 304, 313, 367, 419,
+ 446, 442, 451, 0, 578, 599, 612, 623, 629, 630,
+ 632, 633, 634, 635, 636, 639, 637, 407, 311, 495,
+ 333, 373, 0, 0, 425, 472, 240, 603, 496, 199,
+ 0, 0, 0, 0, 254, 255, 0, 574, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 649, 650, 651,
+ 652, 653, 654, 655, 656, 657, 658, 659, 660, 661,
+ 662, 663, 664, 665, 666, 644, 507, 513, 508, 509,
+ 510, 511, 512, 0, 514, 0, 0, 0, 0, 0,
+ 398, 0, 590, 591, 667, 384, 486, 600, 335, 349,
+ 352, 341, 361, 0, 362, 337, 338, 343, 346, 347,
+ 348, 353, 354, 358, 364, 249, 210, 390, 399, 577,
+ 312, 216, 217, 218, 523, 524, 525, 526, 615, 616,
+ 620, 205, 462, 463, 464, 465, 292, 610, 309, 468,
+ 467, 331, 332, 379, 449, 539, 541, 552, 556, 558,
+ 560, 566, 569, 540, 542, 553, 557, 559, 561, 567,
+ 570, 529, 531, 533, 535, 548, 547, 544, 572, 573,
+ 550, 555, 534, 546, 551, 564, 571, 568, 528, 532,
+ 536, 545, 563, 562, 543, 554, 565, 549, 537, 530,
+ 538, 0, 196, 221, 368, 0, 454, 288, 645, 614,
+ 484, 609, 206, 223, 0, 262, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 198, 200, 209,
+ 222, 232, 236, 243, 261, 276, 278, 285, 298, 310,
+ 318, 319, 322, 328, 380, 386, 387, 388, 389, 409,
+ 410, 411, 414, 417, 418, 421, 423, 424, 427, 431,
+ 435, 436, 437, 439, 441, 443, 455, 460, 474, 475,
+ 476, 477, 478, 481, 482, 488, 489, 490, 491, 492,
+ 500, 501, 515, 585, 587, 602, 621, 627, 480, 301,
+ 302, 444, 445, 314, 315, 641, 642, 300, 597, 628,
+ 595, 640, 622, 438, 378, 0, 0, 381, 281, 305,
+ 320, 0, 613, 502, 227, 466, 290, 251, 0, 0,
+ 211, 246, 230, 259, 274, 277, 324, 391, 400, 429,
+ 434, 296, 271, 244, 459, 241, 485, 518, 519, 520,
+ 522, 395, 266, 433, 396, 0, 376, 575, 576, 316,
+ 0, 0, 527, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 416, 0, 0, 0, 0, 0,
+ 0, 0, 270, 0, 0, 0, 0, 366, 267, 0,
+ 0, 204, 505, 0, 430, 0, 203, 0, 487, 252,
+ 377, 374, 582, 282, 273, 269, 250, 317, 385, 428,
+ 517, 422, 0, 370, 0, 0, 497, 401, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 323, 248, 325, 202, 413, 498, 286,
+ 0, 95, 0, 0, 0, 717, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 238, 0, 0, 245, 0,
+ 0, 0, 351, 360, 359, 339, 340, 342, 344, 350,
+ 357, 363, 336, 345, 0, 0, 606, 0, 0, 0,
+ 265, 321, 272, 264, 579, 0, 0, 0, 0, 0,
+ 0, 0, 0, 229, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 275, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 297, 0, 402, 257, 0, 453, 0, 0, 0, 624,
+ 0, 0, 0, 0, 0, 0, 0, 365, 0, 330,
+ 197, 225, 0, 0, 412, 461, 473, 0, 0, 0,
+ 253, 0, 471, 426, 601, 233, 284, 458, 432, 469,
+ 440, 287, 0, 0, 470, 372, 584, 450, 598, 625,
+ 626, 263, 406, 611, 521, 619, 643, 226, 260, 420,
+ 506, 604, 494, 397, 580, 581, 329, 493, 295, 201,
+ 369, 631, 224, 479, 371, 242, 231, 586, 608, 299,
+ 289, 456, 638, 213, 516, 596, 239, 483, 0, 0,
+ 646, 247, 504, 215, 593, 503, 393, 326, 327, 214,
+ 0, 457, 268, 293, 0, 0, 258, 415, 588, 589,
+ 256, 647, 228, 618, 220, 0, 617, 408, 583, 594,
+ 394, 383, 219, 592, 392, 382, 334, 355, 356, 280,
+ 307, 447, 375, 448, 306, 308, 404, 403, 405, 207,
+ 605, 0, 208, 0, 499, 607, 648, 452, 212, 234,
+ 235, 237, 0, 279, 283, 291, 294, 303, 304, 313,
+ 367, 419, 446, 442, 451, 0, 578, 599, 612, 623,
+ 629, 630, 632, 633, 634, 635, 636, 639, 637, 407,
+ 311, 495, 333, 373, 0, 0, 425, 472, 240, 603,
+ 496, 199, 0, 0, 0, 0, 254, 255, 0, 574,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 649,
+ 650, 651, 652, 653, 654, 655, 656, 657, 658, 659,
+ 660, 661, 662, 663, 664, 665, 666, 644, 507, 513,
+ 508, 509, 510, 511, 512, 0, 514, 0, 0, 0,
+ 0, 0, 398, 0, 590, 591, 667, 384, 486, 600,
+ 335, 349, 352, 341, 361, 0, 362, 337, 338, 343,
+ 346, 347, 348, 353, 354, 358, 364, 249, 210, 390,
+ 399, 577, 312, 216, 217, 218, 523, 524, 525, 526,
+ 615, 616, 620, 205, 462, 463, 464, 465, 292, 610,
+ 309, 468, 467, 331, 332, 379, 449, 539, 541, 552,
+ 556, 558, 560, 566, 569, 540, 542, 553, 557, 559,
+ 561, 567, 570, 529, 531, 533, 535, 548, 547, 544,
+ 572, 573, 550, 555, 534, 546, 551, 564, 571, 568,
+ 528, 532, 536, 545, 563, 562, 543, 554, 565, 549,
+ 537, 530, 538, 0, 196, 221, 368, 0, 454, 288,
+ 645, 614, 484, 609, 206, 223, 0, 262, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 198,
+ 200, 209, 222, 232, 236, 243, 261, 276, 278, 285,
+ 298, 310, 318, 319, 322, 328, 380, 386, 387, 388,
+ 389, 409, 410, 411, 414, 417, 418, 421, 423, 424,
+ 427, 431, 435, 436, 437, 439, 441, 443, 455, 460,
+ 474, 475, 476, 477, 478, 481, 482, 488, 489, 490,
+ 491, 492, 500, 501, 515, 585, 587, 602, 621, 627,
+ 480, 301, 302, 444, 445, 314, 315, 641, 642, 300,
+ 597, 628, 595, 640, 622, 438, 378, 0, 0, 381,
+ 281, 305, 320, 0, 613, 502, 227, 466, 290, 251,
+ 0, 0, 211, 246, 230, 259, 274, 277, 324, 391,
+ 400, 429, 434, 296, 271, 244, 459, 241, 485, 518,
+ 519, 520, 522, 395, 266, 433, 396, 0, 376, 575,
+ 576, 316, 0, 0, 527, 0, 0, 0, 0, 2404,
+ 0, 0, 0, 0, 0, 0, 416, 0, 0, 0,
+ 0, 0, 0, 0, 270, 0, 0, 0, 0, 366,
+ 267, 0, 0, 204, 505, 0, 430, 0, 203, 0,
+ 487, 252, 377, 374, 582, 282, 273, 269, 250, 317,
+ 385, 428, 517, 422, 0, 370, 0, 0, 497, 401,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 323, 248, 325, 202, 413,
+ 498, 286, 0, 0, 0, 0, 0, 194, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 238, 0, 0,
+ 245, 0, 0, 0, 351, 360, 359, 339, 340, 342,
+ 344, 350, 357, 363, 336, 345, 0, 0, 606, 0,
+ 0, 0, 265, 321, 272, 264, 579, 0, 0, 0,
+ 0, 0, 0, 0, 0, 229, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 275, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 297, 0, 402, 257, 0, 453, 0, 0,
+ 0, 624, 0, 0, 0, 0, 0, 0, 0, 365,
+ 0, 330, 197, 225, 0, 0, 412, 461, 473, 0,
+ 0, 0, 253, 0, 471, 426, 601, 233, 284, 458,
+ 432, 469, 440, 287, 0, 0, 470, 372, 584, 450,
+ 598, 625, 626, 263, 406, 611, 521, 619, 643, 226,
+ 260, 420, 506, 604, 494, 397, 580, 581, 329, 493,
+ 295, 201, 369, 631, 224, 479, 371, 242, 231, 586,
+ 608, 299, 289, 456, 638, 213, 516, 596, 239, 483,
+ 0, 0, 646, 247, 504, 215, 593, 503, 393, 326,
+ 327, 214, 0, 457, 268, 293, 0, 0, 258, 415,
+ 588, 589, 256, 647, 228, 618, 220, 0, 617, 408,
+ 583, 594, 394, 383, 219, 592, 392, 382, 334, 355,
+ 356, 280, 307, 447, 375, 448, 306, 308, 404, 403,
+ 405, 207, 605, 0, 208, 0, 499, 607, 648, 452,
+ 212, 234, 235, 237, 0, 279, 283, 291, 294, 303,
+ 304, 313, 367, 419, 446, 442, 451, 0, 578, 599,
+ 612, 623, 629, 630, 632, 633, 634, 635, 636, 639,
+ 637, 407, 311, 495, 333, 373, 0, 0, 425, 472,
+ 240, 603, 496, 199, 0, 0, 0, 0, 254, 255,
+ 0, 574, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 649, 650, 651, 652, 653, 654, 655, 656, 657,
+ 658, 659, 660, 661, 662, 663, 664, 665, 666, 644,
+ 507, 513, 508, 509, 510, 511, 512, 0, 514, 0,
+ 0, 0, 0, 0, 398, 0, 590, 591, 667, 384,
+ 486, 600, 335, 349, 352, 341, 361, 0, 362, 337,
+ 338, 343, 346, 347, 348, 353, 354, 358, 364, 249,
+ 210, 390, 399, 577, 312, 216, 217, 218, 523, 524,
+ 525, 526, 615, 616, 620, 205, 462, 463, 464, 465,
+ 292, 610, 309, 468, 467, 331, 332, 379, 449, 539,
+ 541, 552, 556, 558, 560, 566, 569, 540, 542, 553,
+ 557, 559, 561, 567, 570, 529, 531, 533, 535, 548,
+ 547, 544, 572, 573, 550, 555, 534, 546, 551, 564,
+ 571, 568, 528, 532, 536, 545, 563, 562, 543, 554,
+ 565, 549, 537, 530, 538, 0, 196, 221, 368, 0,
+ 454, 288, 645, 614, 484, 609, 206, 223, 0, 262,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 198, 200, 209, 222, 232, 236, 243, 261, 276,
+ 278, 285, 298, 310, 318, 319, 322, 328, 380, 386,
+ 387, 388, 389, 409, 410, 411, 414, 417, 418, 421,
+ 423, 424, 427, 431, 435, 436, 437, 439, 441, 443,
+ 455, 460, 474, 475, 476, 477, 478, 481, 482, 488,
+ 489, 490, 491, 492, 500, 501, 515, 585, 587, 602,
+ 621, 627, 480, 301, 302, 444, 445, 314, 315, 641,
+ 642, 300, 597, 628, 595, 640, 622, 438, 378, 0,
+ 0, 381, 281, 305, 320, 0, 613, 502, 227, 466,
+ 290, 251, 0, 0, 211, 246, 230, 259, 274, 277,
+ 324, 391, 400, 429, 434, 296, 271, 244, 459, 241,
+ 485, 518, 519, 520, 522, 395, 266, 433, 396, 0,
+ 376, 575, 576, 316, 0, 0, 527, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 416, 0,
+ 0, 0, 0, 0, 0, 0, 270, 0, 0, 0,
+ 0, 366, 267, 0, 0, 204, 505, 0, 430, 0,
+ 203, 0, 487, 252, 377, 374, 582, 282, 273, 269,
+ 250, 317, 385, 428, 517, 422, 0, 370, 0, 0,
+ 497, 401, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 323, 248, 325,
+ 202, 413, 498, 286, 0, 0, 0, 0, 1763, 717,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 238,
+ 0, 0, 245, 0, 0, 0, 351, 360, 359, 339,
+ 340, 342, 344, 350, 357, 363, 336, 345, 0, 0,
+ 606, 0, 0, 0, 265, 321, 272, 264, 579, 0,
+ 0, 0, 0, 0, 0, 0, 0, 229, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 275, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 297, 0, 402, 257, 0, 453,
+ 0, 0, 0, 624, 0, 0, 0, 0, 0, 0,
+ 0, 365, 0, 330, 197, 225, 0, 0, 412, 461,
+ 473, 0, 0, 0, 253, 0, 471, 426, 601, 233,
+ 284, 458, 432, 469, 440, 287, 0, 0, 470, 372,
+ 584, 450, 598, 625, 626, 263, 406, 611, 521, 619,
+ 643, 226, 260, 420, 506, 604, 494, 397, 580, 581,
+ 329, 493, 295, 201, 369, 631, 224, 479, 371, 242,
+ 231, 586, 608, 299, 289, 456, 638, 213, 516, 596,
+ 239, 483, 0, 0, 646, 247, 504, 215, 593, 503,
+ 393, 326, 327, 214, 0, 457, 268, 293, 0, 0,
+ 258, 415, 588, 589, 256, 647, 228, 618, 220, 0,
+ 617, 408, 583, 594, 394, 383, 219, 592, 392, 382,
+ 334, 355, 356, 280, 307, 447, 375, 448, 306, 308,
+ 404, 403, 405, 207, 605, 0, 208, 0, 499, 607,
+ 648, 452, 212, 234, 235, 237, 0, 279, 283, 291,
+ 294, 303, 304, 313, 367, 419, 446, 442, 451, 0,
+ 578, 599, 612, 623, 629, 630, 632, 633, 634, 635,
+ 636, 639, 637, 407, 311, 495, 333, 373, 0, 0,
+ 425, 472, 240, 603, 496, 199, 0, 0, 0, 0,
+ 254, 255, 0, 574, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 649, 650, 651, 652, 653, 654, 655,
+ 656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
+ 666, 644, 507, 513, 508, 509, 510, 511, 512, 0,
+ 514, 0, 0, 0, 0, 0, 398, 0, 590, 591,
+ 667, 384, 486, 600, 335, 349, 352, 341, 361, 0,
+ 362, 337, 338, 343, 346, 347, 348, 353, 354, 358,
+ 364, 249, 210, 390, 399, 577, 312, 216, 217, 218,
+ 523, 524, 525, 526, 615, 616, 620, 205, 462, 463,
+ 464, 465, 292, 610, 309, 468, 467, 331, 332, 379,
+ 449, 539, 541, 552, 556, 558, 560, 566, 569, 540,
+ 542, 553, 557, 559, 561, 567, 570, 529, 531, 533,
+ 535, 548, 547, 544, 572, 573, 550, 555, 534, 546,
+ 551, 564, 571, 568, 528, 532, 536, 545, 563, 562,
+ 543, 554, 565, 549, 537, 530, 538, 0, 196, 221,
+ 368, 0, 454, 288, 645, 614, 484, 609, 206, 223,
+ 0, 262, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 198, 200, 209, 222, 232, 236, 243,
+ 261, 276, 278, 285, 298, 310, 318, 319, 322, 328,
+ 380, 386, 387, 388, 389, 409, 410, 411, 414, 417,
+ 418, 421, 423, 424, 427, 431, 435, 436, 437, 439,
+ 441, 443, 455, 460, 474, 475, 476, 477, 478, 481,
+ 482, 488, 489, 490, 491, 492, 500, 501, 515, 585,
+ 587, 602, 621, 627, 480, 301, 302, 444, 445, 314,
+ 315, 641, 642, 300, 597, 628, 595, 640, 622, 438,
+ 378, 0, 0, 381, 281, 305, 320, 0, 613, 502,
+ 227, 466, 290, 251, 0, 0, 211, 246, 230, 259,
+ 274, 277, 324, 391, 400, 429, 434, 296, 271, 244,
+ 459, 241, 485, 518, 519, 520, 522, 395, 266, 433,
+ 396, 0, 376, 575, 576, 316, 0, 0, 527, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 416, 0, 0, 0, 0, 0, 0, 0, 270, 0,
+ 0, 0, 0, 366, 267, 0, 0, 204, 505, 0,
+ 430, 0, 203, 0, 487, 252, 377, 374, 582, 282,
+ 273, 269, 250, 317, 385, 428, 517, 422, 0, 370,
+ 0, 0, 497, 401, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 323,
+ 248, 325, 202, 413, 498, 286, 0, 0, 0, 0,
+ 0, 194, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 238, 0, 0, 245, 0, 0, 0, 351, 360,
+ 359, 339, 340, 342, 344, 350, 357, 363, 336, 345,
+ 0, 0, 606, 0, 0, 0, 265, 321, 272, 264,
+ 579, 0, 0, 0, 0, 0, 0, 0, 0, 229,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 275, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 297, 0, 402, 257,
+ 0, 453, 0, 0, 0, 624, 0, 0, 0, 0,
+ 0, 0, 0, 365, 0, 330, 197, 225, 0, 0,
+ 412, 461, 473, 0, 0, 0, 253, 0, 471, 426,
+ 601, 233, 284, 458, 432, 469, 440, 287, 0, 0,
+ 470, 372, 584, 450, 598, 625, 626, 263, 406, 611,
+ 521, 619, 643, 226, 260, 420, 506, 604, 494, 397,
+ 580, 581, 329, 493, 295, 201, 369, 631, 224, 479,
+ 371, 242, 231, 586, 608, 299, 289, 456, 638, 213,
+ 516, 596, 239, 483, 0, 0, 646, 247, 504, 215,
+ 593, 503, 393, 326, 327, 214, 0, 457, 268, 293,
+ 0, 0, 258, 415, 588, 589, 256, 647, 228, 618,
+ 220, 0, 617, 408, 583, 594, 394, 383, 219, 592,
+ 392, 382, 334, 355, 356, 280, 307, 447, 375, 448,
+ 306, 308, 404, 403, 405, 207, 605, 0, 208, 0,
+ 499, 607, 648, 452, 212, 234, 235, 237, 0, 279,
+ 283, 291, 294, 303, 304, 313, 367, 419, 446, 442,
+ 451, 0, 578, 599, 612, 623, 629, 630, 632, 633,
+ 634, 635, 636, 639, 637, 407, 311, 495, 333, 373,
+ 0, 0, 425, 472, 240, 603, 496, 199, 0, 0,
+ 0, 0, 254, 255, 0, 574, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 649, 650, 651, 652, 653,
+ 654, 655, 656, 657, 658, 659, 660, 661, 662, 663,
+ 664, 665, 666, 644, 507, 513, 508, 509, 510, 511,
+ 512, 0, 514, 0, 0, 0, 0, 0, 398, 0,
+ 590, 591, 667, 384, 486, 600, 335, 349, 352, 341,
+ 361, 0, 362, 337, 338, 343, 346, 347, 348, 353,
+ 354, 358, 364, 249, 210, 390, 399, 577, 312, 216,
+ 217, 218, 523, 524, 525, 526, 615, 616, 620, 205,
+ 462, 463, 464, 465, 292, 610, 309, 468, 467, 331,
+ 332, 379, 449, 539, 541, 552, 556, 558, 560, 566,
+ 569, 540, 542, 553, 557, 559, 561, 567, 570, 529,
+ 531, 533, 535, 548, 547, 544, 572, 573, 550, 555,
+ 534, 546, 551, 564, 571, 568, 528, 532, 536, 545,
+ 563, 562, 543, 554, 565, 549, 537, 530, 538, 0,
+ 196, 221, 368, 2056, 454, 288, 645, 614, 484, 609,
+ 206, 223, 0, 262, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 198, 200, 209, 222, 232,
+ 236, 243, 261, 276, 278, 285, 298, 310, 318, 319,
+ 322, 328, 380, 386, 387, 388, 389, 409, 410, 411,
+ 414, 417, 418, 421, 423, 424, 427, 431, 435, 436,
+ 437, 439, 441, 443, 455, 460, 474, 475, 476, 477,
+ 478, 481, 482, 488, 489, 490, 491, 492, 500, 501,
+ 515, 585, 587, 602, 621, 627, 480, 301, 302, 444,
+ 445, 314, 315, 641, 642, 300, 597, 628, 595, 640,
+ 622, 438, 378, 0, 0, 381, 281, 305, 320, 0,
+ 613, 502, 227, 466, 290, 251, 0, 0, 211, 246,
+ 230, 259, 274, 277, 324, 391, 400, 429, 434, 296,
+ 271, 244, 459, 241, 485, 518, 519, 520, 522, 395,
+ 266, 433, 396, 0, 376, 575, 576, 316, 0, 0,
+ 527, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 416, 0, 0, 0, 0, 0, 0, 0,
+ 270, 0, 0, 0, 0, 366, 267, 0, 0, 204,
+ 505, 0, 430, 0, 203, 0, 487, 252, 377, 374,
+ 582, 282, 273, 269, 250, 317, 385, 428, 517, 422,
+ 0, 370, 0, 0, 497, 401, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 323, 248, 325, 202, 413, 498, 286, 0, 0,
+ 0, 0, 2047, 717, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 238, 0, 0, 245, 0, 0, 0,
+ 351, 360, 359, 339, 340, 342, 344, 350, 357, 363,
+ 336, 345, 0, 0, 606, 0, 0, 0, 265, 321,
+ 272, 264, 579, 0, 0, 0, 0, 0, 0, 0,
+ 0, 229, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 275, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 297, 0,
+ 402, 257, 0, 453, 0, 0, 0, 624, 0, 0,
+ 0, 0, 0, 0, 0, 365, 0, 330, 197, 225,
+ 0, 0, 412, 461, 473, 0, 0, 0, 253, 0,
+ 471, 426, 601, 233, 284, 458, 432, 469, 440, 287,
+ 0, 0, 470, 372, 584, 450, 598, 625, 626, 263,
+ 406, 611, 521, 619, 643, 226, 260, 420, 506, 604,
+ 494, 397, 580, 581, 329, 493, 295, 201, 369, 631,
+ 224, 479, 371, 242, 231, 586, 608, 299, 289, 456,
+ 638, 213, 516, 596, 239, 483, 0, 0, 646, 247,
+ 504, 215, 593, 503, 393, 326, 327, 214, 0, 457,
+ 268, 293, 0, 0, 258, 415, 588, 589, 256, 647,
+ 228, 618, 220, 0, 617, 408, 583, 594, 394, 383,
+ 219, 592, 392, 382, 334, 355, 356, 280, 307, 447,
+ 375, 448, 306, 308, 404, 403, 405, 207, 605, 0,
+ 208, 0, 499, 607, 648, 452, 212, 234, 235, 237,
+ 0, 279, 283, 291, 294, 303, 304, 313, 367, 419,
+ 446, 442, 451, 0, 578, 599, 612, 623, 629, 630,
+ 632, 633, 634, 635, 636, 639, 637, 407, 311, 495,
+ 333, 373, 0, 0, 425, 472, 240, 603, 496, 199,
+ 0, 0, 0, 0, 254, 255, 0, 574, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 649, 650, 651,
+ 652, 653, 654, 655, 656, 657, 658, 659, 660, 661,
+ 662, 663, 664, 665, 666, 644, 507, 513, 508, 509,
+ 510, 511, 512, 0, 514, 0, 0, 0, 0, 0,
+ 398, 0, 590, 591, 667, 384, 486, 600, 335, 349,
+ 352, 341, 361, 0, 362, 337, 338, 343, 346, 347,
+ 348, 353, 354, 358, 364, 249, 210, 390, 399, 577,
+ 312, 216, 217, 218, 523, 524, 525, 526, 615, 616,
+ 620, 205, 462, 463, 464, 465, 292, 610, 309, 468,
+ 467, 331, 332, 379, 449, 539, 541, 552, 556, 558,
+ 560, 566, 569, 540, 542, 553, 557, 559, 561, 567,
+ 570, 529, 531, 533, 535, 548, 547, 544, 572, 573,
+ 550, 555, 534, 546, 551, 564, 571, 568, 528, 532,
+ 536, 545, 563, 562, 543, 554, 565, 549, 537, 530,
+ 538, 0, 196, 221, 368, 0, 454, 288, 645, 614,
+ 484, 609, 206, 223, 0, 262, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 198, 200, 209,
+ 222, 232, 236, 243, 261, 276, 278, 285, 298, 310,
+ 318, 319, 322, 328, 380, 386, 387, 388, 389, 409,
+ 410, 411, 414, 417, 418, 421, 423, 424, 427, 431,
+ 435, 436, 437, 439, 441, 443, 455, 460, 474, 475,
+ 476, 477, 478, 481, 482, 488, 489, 490, 491, 492,
+ 500, 501, 515, 585, 587, 602, 621, 627, 480, 301,
+ 302, 444, 445, 314, 315, 641, 642, 300, 597, 628,
+ 595, 640, 622, 438, 378, 0, 0, 381, 281, 305,
+ 320, 0, 613, 502, 227, 466, 290, 251, 0, 0,
+ 211, 246, 230, 259, 274, 277, 324, 391, 400, 429,
+ 434, 296, 271, 244, 459, 241, 485, 518, 519, 520,
+ 522, 395, 266, 433, 396, 0, 376, 575, 576, 316,
+ 0, 0, 527, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 416, 0, 0, 0, 0, 0,
+ 0, 0, 270, 0, 0, 0, 0, 366, 267, 0,
+ 1909, 204, 505, 0, 430, 0, 203, 0, 487, 252,
+ 377, 374, 582, 282, 273, 269, 250, 317, 385, 428,
+ 517, 422, 0, 370, 0, 0, 497, 401, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 323, 248, 325, 202, 413, 498, 286,
+ 0, 0, 0, 0, 0, 717, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 238, 0, 0, 245, 0,
+ 0, 0, 351, 360, 359, 339, 340, 342, 344, 350,
+ 357, 363, 336, 345, 0, 0, 606, 0, 0, 0,
+ 265, 321, 272, 264, 579, 0, 0, 0, 0, 0,
+ 0, 0, 0, 229, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 275, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 297, 0, 402, 257, 0, 453, 0, 0, 0, 624,
+ 0, 0, 0, 0, 0, 0, 0, 365, 0, 330,
+ 197, 225, 0, 0, 412, 461, 473, 0, 0, 0,
+ 253, 0, 471, 426, 601, 233, 284, 458, 432, 469,
+ 440, 287, 0, 0, 470, 372, 584, 450, 598, 625,
+ 626, 263, 406, 611, 521, 619, 643, 226, 260, 420,
+ 506, 604, 494, 397, 580, 581, 329, 493, 295, 201,
+ 369, 631, 224, 479, 371, 242, 231, 586, 608, 299,
+ 289, 456, 638, 213, 516, 596, 239, 483, 0, 0,
+ 646, 247, 504, 215, 593, 503, 393, 326, 327, 214,
+ 0, 457, 268, 293, 0, 0, 258, 415, 588, 589,
+ 256, 647, 228, 618, 220, 0, 617, 408, 583, 594,
+ 394, 383, 219, 592, 392, 382, 334, 355, 356, 280,
+ 307, 447, 375, 448, 306, 308, 404, 403, 405, 207,
+ 605, 0, 208, 0, 499, 607, 648, 452, 212, 234,
+ 235, 237, 0, 279, 283, 291, 294, 303, 304, 313,
+ 367, 419, 446, 442, 451, 0, 578, 599, 612, 623,
+ 629, 630, 632, 633, 634, 635, 636, 639, 637, 407,
+ 311, 495, 333, 373, 0, 0, 425, 472, 240, 603,
+ 496, 199, 0, 0, 0, 0, 254, 255, 0, 574,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 649,
+ 650, 651, 652, 653, 654, 655, 656, 657, 658, 659,
+ 660, 661, 662, 663, 664, 665, 666, 644, 507, 513,
+ 508, 509, 510, 511, 512, 0, 514, 0, 0, 0,
+ 0, 0, 398, 0, 590, 591, 667, 384, 486, 600,
+ 335, 349, 352, 341, 361, 0, 362, 337, 338, 343,
+ 346, 347, 348, 353, 354, 358, 364, 249, 210, 390,
+ 399, 577, 312, 216, 217, 218, 523, 524, 525, 526,
+ 615, 616, 620, 205, 462, 463, 464, 465, 292, 610,
+ 309, 468, 467, 331, 332, 379, 449, 539, 541, 552,
+ 556, 558, 560, 566, 569, 540, 542, 553, 557, 559,
+ 561, 567, 570, 529, 531, 533, 535, 548, 547, 544,
+ 572, 573, 550, 555, 534, 546, 551, 564, 571, 568,
+ 528, 532, 536, 545, 563, 562, 543, 554, 565, 549,
+ 537, 530, 538, 0, 196, 221, 368, 0, 454, 288,
+ 645, 614, 484, 609, 206, 223, 0, 262, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 198,
+ 200, 209, 222, 232, 236, 243, 261, 276, 278, 285,
+ 298, 310, 318, 319, 322, 328, 380, 386, 387, 388,
+ 389, 409, 410, 411, 414, 417, 418, 421, 423, 424,
+ 427, 431, 435, 436, 437, 439, 441, 443, 455, 460,
+ 474, 475, 476, 477, 478, 481, 482, 488, 489, 490,
+ 491, 492, 500, 501, 515, 585, 587, 602, 621, 627,
+ 480, 301, 302, 444, 445, 314, 315, 641, 642, 300,
+ 597, 628, 595, 640, 622, 438, 378, 0, 0, 381,
+ 281, 305, 320, 0, 613, 502, 227, 466, 290, 251,
+ 0, 0, 211, 246, 230, 259, 274, 277, 324, 391,
+ 400, 429, 434, 296, 271, 244, 459, 241, 485, 518,
+ 519, 520, 522, 395, 266, 433, 396, 0, 376, 575,
+ 576, 316, 0, 0, 527, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 416, 0, 0, 0,
+ 0, 0, 0, 0, 270, 0, 0, 0, 0, 366,
+ 267, 0, 1907, 204, 505, 0, 430, 0, 203, 0,
+ 487, 252, 377, 374, 582, 282, 273, 269, 250, 317,
+ 385, 428, 517, 422, 0, 370, 0, 0, 497, 401,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 323, 248, 325, 202, 413,
+ 498, 286, 0, 0, 0, 0, 0, 717, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 238, 0, 0,
+ 245, 0, 0, 0, 351, 360, 359, 339, 340, 342,
+ 344, 350, 357, 363, 336, 345, 0, 0, 606, 0,
+ 0, 0, 265, 321, 272, 264, 579, 0, 0, 0,
+ 0, 0, 0, 0, 0, 229, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 275, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 297, 0, 402, 257, 0, 453, 0, 0,
+ 0, 624, 0, 0, 0, 0, 0, 0, 0, 365,
+ 0, 330, 197, 225, 0, 0, 412, 461, 473, 0,
+ 0, 0, 253, 0, 471, 426, 601, 233, 284, 458,
+ 432, 469, 440, 287, 0, 0, 470, 372, 584, 450,
+ 598, 625, 626, 263, 406, 611, 521, 619, 643, 226,
+ 260, 420, 506, 604, 494, 397, 580, 581, 329, 493,
+ 295, 201, 369, 631, 224, 479, 371, 242, 231, 586,
+ 608, 299, 289, 456, 638, 213, 516, 596, 239, 483,
+ 0, 0, 646, 247, 504, 215, 593, 503, 393, 326,
+ 327, 214, 0, 457, 268, 293, 0, 0, 258, 415,
+ 588, 589, 256, 647, 228, 618, 220, 0, 617, 408,
+ 583, 594, 394, 383, 219, 592, 392, 382, 334, 355,
+ 356, 280, 307, 447, 375, 448, 306, 308, 404, 403,
+ 405, 207, 605, 0, 208, 0, 499, 607, 648, 452,
+ 212, 234, 235, 237, 0, 279, 283, 291, 294, 303,
+ 304, 313, 367, 419, 446, 442, 451, 0, 578, 599,
+ 612, 623, 629, 630, 632, 633, 634, 635, 636, 639,
+ 637, 407, 311, 495, 333, 373, 0, 0, 425, 472,
+ 240, 603, 496, 199, 0, 0, 0, 0, 254, 255,
+ 0, 574, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 649, 650, 651, 652, 653, 654, 655, 656, 657,
+ 658, 659, 660, 661, 662, 663, 664, 665, 666, 644,
+ 507, 513, 508, 509, 510, 511, 512, 0, 514, 0,
+ 0, 0, 0, 0, 398, 0, 590, 591, 667, 384,
+ 486, 600, 335, 349, 352, 341, 361, 0, 362, 337,
+ 338, 343, 346, 347, 348, 353, 354, 358, 364, 249,
+ 210, 390, 399, 577, 312, 216, 217, 218, 523, 524,
+ 525, 526, 615, 616, 620, 205, 462, 463, 464, 465,
+ 292, 610, 309, 468, 467, 331, 332, 379, 449, 539,
+ 541, 552, 556, 558, 560, 566, 569, 540, 542, 553,
+ 557, 559, 561, 567, 570, 529, 531, 533, 535, 548,
+ 547, 544, 572, 573, 550, 555, 534, 546, 551, 564,
+ 571, 568, 528, 532, 536, 545, 563, 562, 543, 554,
+ 565, 549, 537, 530, 538, 0, 196, 221, 368, 0,
+ 454, 288, 645, 614, 484, 609, 206, 223, 0, 262,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 198, 200, 209, 222, 232, 236, 243, 261, 276,
+ 278, 285, 298, 310, 318, 319, 322, 328, 380, 386,
+ 387, 388, 389, 409, 410, 411, 414, 417, 418, 421,
+ 423, 424, 427, 431, 435, 436, 437, 439, 441, 443,
+ 455, 460, 474, 475, 476, 477, 478, 481, 482, 488,
+ 489, 490, 491, 492, 500, 501, 515, 585, 587, 602,
+ 621, 627, 480, 301, 302, 444, 445, 314, 315, 641,
+ 642, 300, 597, 628, 595, 640, 622, 438, 378, 0,
+ 0, 381, 281, 305, 320, 0, 613, 502, 227, 466,
+ 290, 251, 0, 0, 211, 246, 230, 259, 274, 277,
+ 324, 391, 400, 429, 434, 296, 271, 244, 459, 241,
+ 485, 518, 519, 520, 522, 395, 266, 433, 396, 0,
+ 376, 575, 576, 316, 0, 0, 527, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 416, 0,
+ 0, 0, 0, 0, 0, 0, 270, 0, 0, 0,
+ 0, 366, 267, 0, 1905, 204, 505, 0, 430, 0,
+ 203, 0, 487, 252, 377, 374, 582, 282, 273, 269,
+ 250, 317, 385, 428, 517, 422, 0, 370, 0, 0,
+ 497, 401, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 323, 248, 325,
+ 202, 413, 498, 286, 0, 0, 0, 0, 0, 717,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 238,
+ 0, 0, 245, 0, 0, 0, 351, 360, 359, 339,
+ 340, 342, 344, 350, 357, 363, 336, 345, 0, 0,
+ 606, 0, 0, 0, 265, 321, 272, 264, 579, 0,
+ 0, 0, 0, 0, 0, 0, 0, 229, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 275, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 297, 0, 402, 257, 0, 453,
+ 0, 0, 0, 624, 0, 0, 0, 0, 0, 0,
+ 0, 365, 0, 330, 197, 225, 0, 0, 412, 461,
+ 473, 0, 0, 0, 253, 0, 471, 426, 601, 233,
+ 284, 458, 432, 469, 440, 287, 0, 0, 470, 372,
+ 584, 450, 598, 625, 626, 263, 406, 611, 521, 619,
+ 643, 226, 260, 420, 506, 604, 494, 397, 580, 581,
+ 329, 493, 295, 201, 369, 631, 224, 479, 371, 242,
+ 231, 586, 608, 299, 289, 456, 638, 213, 516, 596,
+ 239, 483, 0, 0, 646, 247, 504, 215, 593, 503,
+ 393, 326, 327, 214, 0, 457, 268, 293, 0, 0,
+ 258, 415, 588, 589, 256, 647, 228, 618, 220, 0,
+ 617, 408, 583, 594, 394, 383, 219, 592, 392, 382,
+ 334, 355, 356, 280, 307, 447, 375, 448, 306, 308,
+ 404, 403, 405, 207, 605, 0, 208, 0, 499, 607,
+ 648, 452, 212, 234, 235, 237, 0, 279, 283, 291,
+ 294, 303, 304, 313, 367, 419, 446, 442, 451, 0,
+ 578, 599, 612, 623, 629, 630, 632, 633, 634, 635,
+ 636, 639, 637, 407, 311, 495, 333, 373, 0, 0,
+ 425, 472, 240, 603, 496, 199, 0, 0, 0, 0,
+ 254, 255, 0, 574, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 649, 650, 651, 652, 653, 654, 655,
+ 656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
+ 666, 644, 507, 513, 508, 509, 510, 511, 512, 0,
+ 514, 0, 0, 0, 0, 0, 398, 0, 590, 591,
+ 667, 384, 486, 600, 335, 349, 352, 341, 361, 0,
+ 362, 337, 338, 343, 346, 347, 348, 353, 354, 358,
+ 364, 249, 210, 390, 399, 577, 312, 216, 217, 218,
+ 523, 524, 525, 526, 615, 616, 620, 205, 462, 463,
+ 464, 465, 292, 610, 309, 468, 467, 331, 332, 379,
+ 449, 539, 541, 552, 556, 558, 560, 566, 569, 540,
+ 542, 553, 557, 559, 561, 567, 570, 529, 531, 533,
+ 535, 548, 547, 544, 572, 573, 550, 555, 534, 546,
+ 551, 564, 571, 568, 528, 532, 536, 545, 563, 562,
+ 543, 554, 565, 549, 537, 530, 538, 0, 196, 221,
+ 368, 0, 454, 288, 645, 614, 484, 609, 206, 223,
+ 0, 262, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 198, 200, 209, 222, 232, 236, 243,
+ 261, 276, 278, 285, 298, 310, 318, 319, 322, 328,
+ 380, 386, 387, 388, 389, 409, 410, 411, 414, 417,
+ 418, 421, 423, 424, 427, 431, 435, 436, 437, 439,
+ 441, 443, 455, 460, 474, 475, 476, 477, 478, 481,
+ 482, 488, 489, 490, 491, 492, 500, 501, 515, 585,
+ 587, 602, 621, 627, 480, 301, 302, 444, 445, 314,
+ 315, 641, 642, 300, 597, 628, 595, 640, 622, 438,
+ 378, 0, 0, 381, 281, 305, 320, 0, 613, 502,
+ 227, 466, 290, 251, 0, 0, 211, 246, 230, 259,
+ 274, 277, 324, 391, 400, 429, 434, 296, 271, 244,
+ 459, 241, 485, 518, 519, 520, 522, 395, 266, 433,
+ 396, 0, 376, 575, 576, 316, 0, 0, 527, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 416, 0, 0, 0, 0, 0, 0, 0, 270, 0,
+ 0, 0, 0, 366, 267, 0, 1903, 204, 505, 0,
+ 430, 0, 203, 0, 487, 252, 377, 374, 582, 282,
+ 273, 269, 250, 317, 385, 428, 517, 422, 0, 370,
+ 0, 0, 497, 401, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 323,
+ 248, 325, 202, 413, 498, 286, 0, 0, 0, 0,
+ 0, 717, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 238, 0, 0, 245, 0, 0, 0, 351, 360,
+ 359, 339, 340, 342, 344, 350, 357, 363, 336, 345,
+ 0, 0, 606, 0, 0, 0, 265, 321, 272, 264,
+ 579, 0, 0, 0, 0, 0, 0, 0, 0, 229,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 275, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 297, 0, 402, 257,
+ 0, 453, 0, 0, 0, 624, 0, 0, 0, 0,
+ 0, 0, 0, 365, 0, 330, 197, 225, 0, 0,
+ 412, 461, 473, 0, 0, 0, 253, 0, 471, 426,
+ 601, 233, 284, 458, 432, 469, 440, 287, 0, 0,
+ 470, 372, 584, 450, 598, 625, 626, 263, 406, 611,
+ 521, 619, 643, 226, 260, 420, 506, 604, 494, 397,
+ 580, 581, 329, 493, 295, 201, 369, 631, 224, 479,
+ 371, 242, 231, 586, 608, 299, 289, 456, 638, 213,
+ 516, 596, 239, 483, 0, 0, 646, 247, 504, 215,
+ 593, 503, 393, 326, 327, 214, 0, 457, 268, 293,
+ 0, 0, 258, 415, 588, 589, 256, 647, 228, 618,
+ 220, 0, 617, 408, 583, 594, 394, 383, 219, 592,
+ 392, 382, 334, 355, 356, 280, 307, 447, 375, 448,
+ 306, 308, 404, 403, 405, 207, 605, 0, 208, 0,
+ 499, 607, 648, 452, 212, 234, 235, 237, 0, 279,
+ 283, 291, 294, 303, 304, 313, 367, 419, 446, 442,
+ 451, 0, 578, 599, 612, 623, 629, 630, 632, 633,
+ 634, 635, 636, 639, 637, 407, 311, 495, 333, 373,
+ 0, 0, 425, 472, 240, 603, 496, 199, 0, 0,
+ 0, 0, 254, 255, 0, 574, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 649, 650, 651, 652, 653,
+ 654, 655, 656, 657, 658, 659, 660, 661, 662, 663,
+ 664, 665, 666, 644, 507, 513, 508, 509, 510, 511,
+ 512, 0, 514, 0, 0, 0, 0, 0, 398, 0,
+ 590, 591, 667, 384, 486, 600, 335, 349, 352, 341,
+ 361, 0, 362, 337, 338, 343, 346, 347, 348, 353,
+ 354, 358, 364, 249, 210, 390, 399, 577, 312, 216,
+ 217, 218, 523, 524, 525, 526, 615, 616, 620, 205,
+ 462, 463, 464, 465, 292, 610, 309, 468, 467, 331,
+ 332, 379, 449, 539, 541, 552, 556, 558, 560, 566,
+ 569, 540, 542, 553, 557, 559, 561, 567, 570, 529,
+ 531, 533, 535, 548, 547, 544, 572, 573, 550, 555,
+ 534, 546, 551, 564, 571, 568, 528, 532, 536, 545,
+ 563, 562, 543, 554, 565, 549, 537, 530, 538, 0,
+ 196, 221, 368, 0, 454, 288, 645, 614, 484, 609,
+ 206, 223, 0, 262, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 198, 200, 209, 222, 232,
+ 236, 243, 261, 276, 278, 285, 298, 310, 318, 319,
+ 322, 328, 380, 386, 387, 388, 389, 409, 410, 411,
+ 414, 417, 418, 421, 423, 424, 427, 431, 435, 436,
+ 437, 439, 441, 443, 455, 460, 474, 475, 476, 477,
+ 478, 481, 482, 488, 489, 490, 491, 492, 500, 501,
+ 515, 585, 587, 602, 621, 627, 480, 301, 302, 444,
+ 445, 314, 315, 641, 642, 300, 597, 628, 595, 640,
+ 622, 438, 378, 0, 0, 381, 281, 305, 320, 0,
+ 613, 502, 227, 466, 290, 251, 0, 0, 211, 246,
+ 230, 259, 274, 277, 324, 391, 400, 429, 434, 296,
+ 271, 244, 459, 241, 485, 518, 519, 520, 522, 395,
+ 266, 433, 396, 0, 376, 575, 576, 316, 0, 0,
+ 527, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 416, 0, 0, 0, 0, 0, 0, 0,
+ 270, 0, 0, 0, 0, 366, 267, 0, 1901, 204,
+ 505, 0, 430, 0, 203, 0, 487, 252, 377, 374,
+ 582, 282, 273, 269, 250, 317, 385, 428, 517, 422,
+ 0, 370, 0, 0, 497, 401, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 323, 248, 325, 202, 413, 498, 286, 0, 0,
+ 0, 0, 0, 717, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 238, 0, 0, 245, 0, 0, 0,
+ 351, 360, 359, 339, 340, 342, 344, 350, 357, 363,
+ 336, 345, 0, 0, 606, 0, 0, 0, 265, 321,
+ 272, 264, 579, 0, 0, 0, 0, 0, 0, 0,
+ 0, 229, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 275, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 297, 0,
+ 402, 257, 0, 453, 0, 0, 0, 624, 0, 0,
+ 0, 0, 0, 0, 0, 365, 0, 330, 197, 225,
+ 0, 0, 412, 461, 473, 0, 0, 0, 253, 0,
+ 471, 426, 601, 233, 284, 458, 432, 469, 440, 287,
+ 0, 0, 470, 372, 584, 450, 598, 625, 626, 263,
+ 406, 611, 521, 619, 643, 226, 260, 420, 506, 604,
+ 494, 397, 580, 581, 329, 493, 295, 201, 369, 631,
+ 224, 479, 371, 242, 231, 586, 608, 299, 289, 456,
+ 638, 213, 516, 596, 239, 483, 0, 0, 646, 247,
+ 504, 215, 593, 503, 393, 326, 327, 214, 0, 457,
+ 268, 293, 0, 0, 258, 415, 588, 589, 256, 647,
+ 228, 618, 220, 0, 617, 408, 583, 594, 394, 383,
+ 219, 592, 392, 382, 334, 355, 356, 280, 307, 447,
+ 375, 448, 306, 308, 404, 403, 405, 207, 605, 0,
+ 208, 0, 499, 607, 648, 452, 212, 234, 235, 237,
+ 0, 279, 283, 291, 294, 303, 304, 313, 367, 419,
+ 446, 442, 451, 0, 578, 599, 612, 623, 629, 630,
+ 632, 633, 634, 635, 636, 639, 637, 407, 311, 495,
+ 333, 373, 0, 0, 425, 472, 240, 603, 496, 199,
+ 0, 0, 0, 0, 254, 255, 0, 574, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 649, 650, 651,
+ 652, 653, 654, 655, 656, 657, 658, 659, 660, 661,
+ 662, 663, 664, 665, 666, 644, 507, 513, 508, 509,
+ 510, 511, 512, 0, 514, 0, 0, 0, 0, 0,
+ 398, 0, 590, 591, 667, 384, 486, 600, 335, 349,
+ 352, 341, 361, 0, 362, 337, 338, 343, 346, 347,
+ 348, 353, 354, 358, 364, 249, 210, 390, 399, 577,
+ 312, 216, 217, 218, 523, 524, 525, 526, 615, 616,
+ 620, 205, 462, 463, 464, 465, 292, 610, 309, 468,
+ 467, 331, 332, 379, 449, 539, 541, 552, 556, 558,
+ 560, 566, 569, 540, 542, 553, 557, 559, 561, 567,
+ 570, 529, 531, 533, 535, 548, 547, 544, 572, 573,
+ 550, 555, 534, 546, 551, 564, 571, 568, 528, 532,
+ 536, 545, 563, 562, 543, 554, 565, 549, 537, 530,
+ 538, 0, 196, 221, 368, 0, 454, 288, 645, 614,
+ 484, 609, 206, 223, 0, 262, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 198, 200, 209,
+ 222, 232, 236, 243, 261, 276, 278, 285, 298, 310,
+ 318, 319, 322, 328, 380, 386, 387, 388, 389, 409,
+ 410, 411, 414, 417, 418, 421, 423, 424, 427, 431,
+ 435, 436, 437, 439, 441, 443, 455, 460, 474, 475,
+ 476, 477, 478, 481, 482, 488, 489, 490, 491, 492,
+ 500, 501, 515, 585, 587, 602, 621, 627, 480, 301,
+ 302, 444, 445, 314, 315, 641, 642, 300, 597, 628,
+ 595, 640, 622, 438, 378, 0, 0, 381, 281, 305,
+ 320, 0, 613, 502, 227, 466, 290, 251, 0, 0,
+ 211, 246, 230, 259, 274, 277, 324, 391, 400, 429,
+ 434, 296, 271, 244, 459, 241, 485, 518, 519, 520,
+ 522, 395, 266, 433, 396, 0, 376, 575, 576, 316,
+ 0, 0, 527, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 416, 0, 0, 0, 0, 0,
+ 0, 0, 270, 0, 0, 0, 0, 366, 267, 0,
+ 1897, 204, 505, 0, 430, 0, 203, 0, 487, 252,
+ 377, 374, 582, 282, 273, 269, 250, 317, 385, 428,
+ 517, 422, 0, 370, 0, 0, 497, 401, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 323, 248, 325, 202, 413, 498, 286,
+ 0, 0, 0, 0, 0, 717, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 238, 0, 0, 245, 0,
+ 0, 0, 351, 360, 359, 339, 340, 342, 344, 350,
+ 357, 363, 336, 345, 0, 0, 606, 0, 0, 0,
+ 265, 321, 272, 264, 579, 0, 0, 0, 0, 0,
+ 0, 0, 0, 229, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 275, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 297, 0, 402, 257, 0, 453, 0, 0, 0, 624,
+ 0, 0, 0, 0, 0, 0, 0, 365, 0, 330,
+ 197, 225, 0, 0, 412, 461, 473, 0, 0, 0,
+ 253, 0, 471, 426, 601, 233, 284, 458, 432, 469,
+ 440, 287, 0, 0, 470, 372, 584, 450, 598, 625,
+ 626, 263, 406, 611, 521, 619, 643, 226, 260, 420,
+ 506, 604, 494, 397, 580, 581, 329, 493, 295, 201,
+ 369, 631, 224, 479, 371, 242, 231, 586, 608, 299,
+ 289, 456, 638, 213, 516, 596, 239, 483, 0, 0,
+ 646, 247, 504, 215, 593, 503, 393, 326, 327, 214,
+ 0, 457, 268, 293, 0, 0, 258, 415, 588, 589,
+ 256, 647, 228, 618, 220, 0, 617, 408, 583, 594,
+ 394, 383, 219, 592, 392, 382, 334, 355, 356, 280,
+ 307, 447, 375, 448, 306, 308, 404, 403, 405, 207,
+ 605, 0, 208, 0, 499, 607, 648, 452, 212, 234,
+ 235, 237, 0, 279, 283, 291, 294, 303, 304, 313,
+ 367, 419, 446, 442, 451, 0, 578, 599, 612, 623,
+ 629, 630, 632, 633, 634, 635, 636, 639, 637, 407,
+ 311, 495, 333, 373, 0, 0, 425, 472, 240, 603,
+ 496, 199, 0, 0, 0, 0, 254, 255, 0, 574,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 649,
+ 650, 651, 652, 653, 654, 655, 656, 657, 658, 659,
+ 660, 661, 662, 663, 664, 665, 666, 644, 507, 513,
+ 508, 509, 510, 511, 512, 0, 514, 0, 0, 0,
+ 0, 0, 398, 0, 590, 591, 667, 384, 486, 600,
+ 335, 349, 352, 341, 361, 0, 362, 337, 338, 343,
+ 346, 347, 348, 353, 354, 358, 364, 249, 210, 390,
+ 399, 577, 312, 216, 217, 218, 523, 524, 525, 526,
+ 615, 616, 620, 205, 462, 463, 464, 465, 292, 610,
+ 309, 468, 467, 331, 332, 379, 449, 539, 541, 552,
+ 556, 558, 560, 566, 569, 540, 542, 553, 557, 559,
+ 561, 567, 570, 529, 531, 533, 535, 548, 547, 544,
+ 572, 573, 550, 555, 534, 546, 551, 564, 571, 568,
+ 528, 532, 536, 545, 563, 562, 543, 554, 565, 549,
+ 537, 530, 538, 0, 196, 221, 368, 0, 454, 288,
+ 645, 614, 484, 609, 206, 223, 0, 262, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 198,
+ 200, 209, 222, 232, 236, 243, 261, 276, 278, 285,
+ 298, 310, 318, 319, 322, 328, 380, 386, 387, 388,
+ 389, 409, 410, 411, 414, 417, 418, 421, 423, 424,
+ 427, 431, 435, 436, 437, 439, 441, 443, 455, 460,
+ 474, 475, 476, 477, 478, 481, 482, 488, 489, 490,
+ 491, 492, 500, 501, 515, 585, 587, 602, 621, 627,
+ 480, 301, 302, 444, 445, 314, 315, 641, 642, 300,
+ 597, 628, 595, 640, 622, 438, 378, 0, 0, 381,
+ 281, 305, 320, 0, 613, 502, 227, 466, 290, 251,
+ 0, 0, 211, 246, 230, 259, 274, 277, 324, 391,
+ 400, 429, 434, 296, 271, 244, 459, 241, 485, 518,
+ 519, 520, 522, 395, 266, 433, 396, 0, 376, 575,
+ 576, 316, 0, 0, 527, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 416, 0, 0, 0,
+ 0, 0, 0, 0, 270, 0, 0, 0, 0, 366,
+ 267, 0, 1895, 204, 505, 0, 430, 0, 203, 0,
+ 487, 252, 377, 374, 582, 282, 273, 269, 250, 317,
+ 385, 428, 517, 422, 0, 370, 0, 0, 497, 401,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 323, 248, 325, 202, 413,
+ 498, 286, 0, 0, 0, 0, 0, 717, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 238, 0, 0,
+ 245, 0, 0, 0, 351, 360, 359, 339, 340, 342,
+ 344, 350, 357, 363, 336, 345, 0, 0, 606, 0,
+ 0, 0, 265, 321, 272, 264, 579, 0, 0, 0,
+ 0, 0, 0, 0, 0, 229, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 275, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 297, 0, 402, 257, 0, 453, 0, 0,
+ 0, 624, 0, 0, 0, 0, 0, 0, 0, 365,
+ 0, 330, 197, 225, 0, 0, 412, 461, 473, 0,
+ 0, 0, 253, 0, 471, 426, 601, 233, 284, 458,
+ 432, 469, 440, 287, 0, 0, 470, 372, 584, 450,
+ 598, 625, 626, 263, 406, 611, 521, 619, 643, 226,
+ 260, 420, 506, 604, 494, 397, 580, 581, 329, 493,
+ 295, 201, 369, 631, 224, 479, 371, 242, 231, 586,
+ 608, 299, 289, 456, 638, 213, 516, 596, 239, 483,
+ 0, 0, 646, 247, 504, 215, 593, 503, 393, 326,
+ 327, 214, 0, 457, 268, 293, 0, 0, 258, 415,
+ 588, 589, 256, 647, 228, 618, 220, 0, 617, 408,
+ 583, 594, 394, 383, 219, 592, 392, 382, 334, 355,
+ 356, 280, 307, 447, 375, 448, 306, 308, 404, 403,
+ 405, 207, 605, 0, 208, 0, 499, 607, 648, 452,
+ 212, 234, 235, 237, 0, 279, 283, 291, 294, 303,
+ 304, 313, 367, 419, 446, 442, 451, 0, 578, 599,
+ 612, 623, 629, 630, 632, 633, 634, 635, 636, 639,
+ 637, 407, 311, 495, 333, 373, 0, 0, 425, 472,
+ 240, 603, 496, 199, 0, 0, 0, 0, 254, 255,
+ 0, 574, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 649, 650, 651, 652, 653, 654, 655, 656, 657,
+ 658, 659, 660, 661, 662, 663, 664, 665, 666, 644,
+ 507, 513, 508, 509, 510, 511, 512, 0, 514, 0,
+ 0, 0, 0, 0, 398, 0, 590, 591, 667, 384,
+ 486, 600, 335, 349, 352, 341, 361, 0, 362, 337,
+ 338, 343, 346, 347, 348, 353, 354, 358, 364, 249,
+ 210, 390, 399, 577, 312, 216, 217, 218, 523, 524,
+ 525, 526, 615, 616, 620, 205, 462, 463, 464, 465,
+ 292, 610, 309, 468, 467, 331, 332, 379, 449, 539,
+ 541, 552, 556, 558, 560, 566, 569, 540, 542, 553,
+ 557, 559, 561, 567, 570, 529, 531, 533, 535, 548,
+ 547, 544, 572, 573, 550, 555, 534, 546, 551, 564,
+ 571, 568, 528, 532, 536, 545, 563, 562, 543, 554,
+ 565, 549, 537, 530, 538, 0, 196, 221, 368, 0,
+ 454, 288, 645, 614, 484, 609, 206, 223, 0, 262,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 198, 200, 209, 222, 232, 236, 243, 261, 276,
+ 278, 285, 298, 310, 318, 319, 322, 328, 380, 386,
+ 387, 388, 389, 409, 410, 411, 414, 417, 418, 421,
+ 423, 424, 427, 431, 435, 436, 437, 439, 441, 443,
+ 455, 460, 474, 475, 476, 477, 478, 481, 482, 488,
+ 489, 490, 491, 492, 500, 501, 515, 585, 587, 602,
+ 621, 627, 480, 301, 302, 444, 445, 314, 315, 641,
+ 642, 300, 597, 628, 595, 640, 622, 438, 378, 0,
+ 0, 381, 281, 305, 320, 0, 613, 502, 227, 466,
+ 290, 251, 0, 0, 211, 246, 230, 259, 274, 277,
+ 324, 391, 400, 429, 434, 296, 271, 244, 459, 241,
+ 485, 518, 519, 520, 522, 395, 266, 433, 396, 0,
+ 376, 575, 576, 316, 0, 0, 527, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 416, 0,
+ 0, 0, 0, 0, 0, 0, 270, 0, 0, 0,
+ 0, 366, 267, 0, 1893, 204, 505, 0, 430, 0,
+ 203, 0, 487, 252, 377, 374, 582, 282, 273, 269,
+ 250, 317, 385, 428, 517, 422, 0, 370, 0, 0,
+ 497, 401, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 323, 248, 325,
+ 202, 413, 498, 286, 0, 0, 0, 0, 0, 717,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 238,
+ 0, 0, 245, 0, 0, 0, 351, 360, 359, 339,
+ 340, 342, 344, 350, 357, 363, 336, 345, 0, 0,
+ 606, 0, 0, 0, 265, 321, 272, 264, 579, 0,
+ 0, 0, 0, 0, 0, 0, 0, 229, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 275, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 297, 0, 402, 257, 0, 453,
+ 0, 0, 0, 624, 0, 0, 0, 0, 0, 0,
+ 0, 365, 0, 330, 197, 225, 0, 0, 412, 461,
+ 473, 0, 0, 0, 253, 0, 471, 426, 601, 233,
+ 284, 458, 432, 469, 440, 287, 0, 0, 470, 372,
+ 584, 450, 598, 625, 626, 263, 406, 611, 521, 619,
+ 643, 226, 260, 420, 506, 604, 494, 397, 580, 581,
+ 329, 493, 295, 201, 369, 631, 224, 479, 371, 242,
+ 231, 586, 608, 299, 289, 456, 638, 213, 516, 596,
+ 239, 483, 0, 0, 646, 247, 504, 215, 593, 503,
+ 393, 326, 327, 214, 0, 457, 268, 293, 0, 0,
+ 258, 415, 588, 589, 256, 647, 228, 618, 220, 0,
+ 617, 408, 583, 594, 394, 383, 219, 592, 392, 382,
+ 334, 355, 356, 280, 307, 447, 375, 448, 306, 308,
+ 404, 403, 405, 207, 605, 0, 208, 0, 499, 607,
+ 648, 452, 212, 234, 235, 237, 0, 279, 283, 291,
+ 294, 303, 304, 313, 367, 419, 446, 442, 451, 0,
+ 578, 599, 612, 623, 629, 630, 632, 633, 634, 635,
+ 636, 639, 637, 407, 311, 495, 333, 373, 0, 0,
+ 425, 472, 240, 603, 496, 199, 0, 0, 0, 0,
+ 254, 255, 0, 574, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 649, 650, 651, 652, 653, 654, 655,
+ 656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
+ 666, 644, 507, 513, 508, 509, 510, 511, 512, 0,
+ 514, 0, 0, 0, 0, 0, 398, 0, 590, 591,
+ 667, 384, 486, 600, 335, 349, 352, 341, 361, 0,
+ 362, 337, 338, 343, 346, 347, 348, 353, 354, 358,
+ 364, 249, 210, 390, 399, 577, 312, 216, 217, 218,
+ 523, 524, 525, 526, 615, 616, 620, 205, 462, 463,
+ 464, 465, 292, 610, 309, 468, 467, 331, 332, 379,
+ 449, 539, 541, 552, 556, 558, 560, 566, 569, 540,
+ 542, 553, 557, 559, 561, 567, 570, 529, 531, 533,
+ 535, 548, 547, 544, 572, 573, 550, 555, 534, 546,
+ 551, 564, 571, 568, 528, 532, 536, 545, 563, 562,
+ 543, 554, 565, 549, 537, 530, 538, 0, 196, 221,
+ 368, 0, 454, 288, 645, 614, 484, 609, 206, 223,
+ 0, 262, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 198, 200, 209, 222, 232, 236, 243,
+ 261, 276, 278, 285, 298, 310, 318, 319, 322, 328,
+ 380, 386, 387, 388, 389, 409, 410, 411, 414, 417,
+ 418, 421, 423, 424, 427, 431, 435, 436, 437, 439,
+ 441, 443, 455, 460, 474, 475, 476, 477, 478, 481,
+ 482, 488, 489, 490, 491, 492, 500, 501, 515, 585,
+ 587, 602, 621, 627, 480, 301, 302, 444, 445, 314,
+ 315, 641, 642, 300, 597, 628, 595, 640, 622, 438,
+ 378, 0, 0, 381, 281, 305, 320, 0, 613, 502,
+ 227, 466, 290, 251, 0, 0, 211, 246, 230, 259,
+ 274, 277, 324, 391, 400, 429, 434, 296, 271, 244,
+ 459, 241, 485, 518, 519, 520, 522, 395, 266, 433,
+ 396, 0, 376, 575, 576, 316, 0, 0, 527, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 416, 0, 0, 0, 0, 0, 0, 0, 270, 0,
+ 0, 0, 0, 366, 267, 0, 0, 204, 505, 0,
+ 430, 0, 203, 0, 487, 252, 377, 374, 582, 282,
+ 273, 269, 250, 317, 385, 428, 517, 422, 0, 370,
+ 0, 0, 497, 401, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 323,
+ 248, 325, 202, 413, 498, 286, 0, 1868, 0, 0,
+ 0, 717, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 238, 0, 0, 245, 0, 0, 0, 351, 360,
+ 359, 339, 340, 342, 344, 350, 357, 363, 336, 345,
+ 0, 0, 606, 0, 0, 0, 265, 321, 272, 264,
+ 579, 0, 0, 0, 0, 0, 0, 0, 0, 229,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 275, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 297, 0, 402, 257,
+ 0, 453, 0, 0, 0, 624, 0, 0, 0, 0,
+ 0, 0, 0, 365, 0, 330, 197, 225, 0, 0,
+ 412, 461, 473, 0, 0, 0, 253, 0, 471, 426,
+ 601, 233, 284, 458, 432, 469, 440, 287, 0, 0,
+ 470, 372, 584, 450, 598, 625, 626, 263, 406, 611,
+ 521, 619, 643, 226, 260, 420, 506, 604, 494, 397,
+ 580, 581, 329, 493, 295, 201, 369, 631, 224, 479,
+ 371, 242, 231, 586, 608, 299, 289, 456, 638, 213,
+ 516, 596, 239, 483, 0, 0, 646, 247, 504, 215,
+ 593, 503, 393, 326, 327, 214, 0, 457, 268, 293,
+ 0, 0, 258, 415, 588, 589, 256, 647, 228, 618,
+ 220, 0, 617, 408, 583, 594, 394, 383, 219, 592,
+ 392, 382, 334, 355, 356, 280, 307, 447, 375, 448,
+ 306, 308, 404, 403, 405, 207, 605, 0, 208, 0,
+ 499, 607, 648, 452, 212, 234, 235, 237, 0, 279,
+ 283, 291, 294, 303, 304, 313, 367, 419, 446, 442,
+ 451, 0, 578, 599, 612, 623, 629, 630, 632, 633,
+ 634, 635, 636, 639, 637, 407, 311, 495, 333, 373,
+ 0, 0, 425, 472, 240, 603, 496, 199, 0, 0,
+ 0, 0, 254, 255, 0, 574, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 649, 650, 651, 652, 653,
+ 654, 655, 656, 657, 658, 659, 660, 661, 662, 663,
+ 664, 665, 666, 644, 507, 513, 508, 509, 510, 511,
+ 512, 0, 514, 0, 0, 0, 0, 0, 398, 0,
+ 590, 591, 667, 384, 486, 600, 335, 349, 352, 341,
+ 361, 0, 362, 337, 338, 343, 346, 347, 348, 353,
+ 354, 358, 364, 249, 210, 390, 399, 577, 312, 216,
+ 217, 218, 523, 524, 525, 526, 615, 616, 620, 205,
+ 462, 463, 464, 465, 292, 610, 309, 468, 467, 331,
+ 332, 379, 449, 539, 541, 552, 556, 558, 560, 566,
+ 569, 540, 542, 553, 557, 559, 561, 567, 570, 529,
+ 531, 533, 535, 548, 547, 544, 572, 573, 550, 555,
+ 534, 546, 551, 564, 571, 568, 528, 532, 536, 545,
+ 563, 562, 543, 554, 565, 549, 537, 530, 538, 0,
+ 196, 221, 368, 0, 454, 288, 645, 614, 484, 609,
+ 206, 223, 0, 262, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 198, 200, 209, 222, 232,
+ 236, 243, 261, 276, 278, 285, 298, 310, 318, 319,
+ 322, 328, 380, 386, 387, 388, 389, 409, 410, 411,
+ 414, 417, 418, 421, 423, 424, 427, 431, 435, 436,
+ 437, 439, 441, 443, 455, 460, 474, 475, 476, 477,
+ 478, 481, 482, 488, 489, 490, 491, 492, 500, 501,
+ 515, 585, 587, 602, 621, 627, 480, 301, 302, 444,
+ 445, 314, 315, 641, 642, 300, 597, 628, 595, 640,
+ 622, 438, 378, 0, 0, 381, 281, 305, 320, 0,
+ 613, 502, 227, 466, 290, 251, 0, 0, 211, 246,
+ 230, 259, 274, 277, 324, 391, 400, 429, 434, 296,
+ 271, 244, 459, 241, 485, 518, 519, 520, 522, 395,
+ 266, 433, 396, 0, 376, 575, 576, 316, 0, 0,
+ 527, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 416, 0, 0, 0, 0, 0, 0, 1767,
+ 270, 0, 0, 0, 0, 366, 267, 0, 0, 204,
+ 505, 0, 430, 0, 203, 0, 487, 252, 377, 374,
+ 582, 282, 273, 269, 250, 317, 385, 428, 517, 422,
+ 0, 370, 0, 0, 497, 401, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 323, 248, 325, 202, 413, 498, 286, 0, 0,
+ 0, 0, 0, 194, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 238, 0, 0, 245, 0, 0, 0,
+ 351, 360, 359, 339, 340, 342, 344, 350, 357, 363,
+ 336, 345, 0, 0, 606, 0, 0, 0, 265, 321,
+ 272, 264, 579, 0, 0, 0, 0, 0, 0, 0,
+ 0, 229, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 275, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 297, 0,
+ 402, 257, 0, 453, 0, 0, 0, 624, 0, 0,
+ 0, 0, 0, 0, 0, 365, 0, 330, 197, 225,
+ 0, 0, 412, 461, 473, 0, 0, 0, 253, 0,
+ 471, 426, 601, 233, 284, 458, 432, 469, 440, 287,
+ 0, 0, 470, 372, 584, 450, 598, 625, 626, 263,
+ 406, 611, 521, 619, 643, 226, 260, 420, 506, 604,
+ 494, 397, 580, 581, 329, 493, 295, 201, 369, 631,
+ 224, 479, 371, 242, 231, 586, 608, 299, 289, 456,
+ 638, 213, 516, 596, 239, 483, 0, 0, 646, 247,
+ 504, 215, 593, 503, 393, 326, 327, 214, 0, 457,
+ 268, 293, 0, 0, 258, 415, 588, 589, 256, 647,
+ 228, 618, 220, 0, 617, 408, 583, 594, 394, 383,
+ 219, 592, 392, 382, 334, 355, 356, 280, 307, 447,
+ 375, 448, 306, 308, 404, 403, 405, 207, 605, 0,
+ 208, 0, 499, 607, 648, 452, 212, 234, 235, 237,
+ 0, 279, 283, 291, 294, 303, 304, 313, 367, 419,
+ 446, 442, 451, 0, 578, 599, 612, 623, 629, 630,
+ 632, 633, 634, 635, 636, 639, 637, 407, 311, 495,
+ 333, 373, 0, 0, 425, 472, 240, 603, 496, 199,
+ 0, 0, 0, 0, 254, 255, 0, 574, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 649, 650, 651,
+ 652, 653, 654, 655, 656, 657, 658, 659, 660, 661,
+ 662, 663, 664, 665, 666, 644, 507, 513, 508, 509,
+ 510, 511, 512, 0, 514, 0, 0, 0, 0, 0,
+ 398, 0, 590, 591, 667, 384, 486, 600, 335, 349,
+ 352, 341, 361, 0, 362, 337, 338, 343, 346, 347,
+ 348, 353, 354, 358, 364, 249, 210, 390, 399, 577,
+ 312, 216, 217, 218, 523, 524, 525, 526, 615, 616,
+ 620, 205, 462, 463, 464, 465, 292, 610, 309, 468,
+ 467, 331, 332, 379, 449, 539, 541, 552, 556, 558,
+ 560, 566, 569, 540, 542, 553, 557, 559, 561, 567,
+ 570, 529, 531, 533, 535, 548, 547, 544, 572, 573,
+ 550, 555, 534, 546, 551, 564, 571, 568, 528, 532,
+ 536, 545, 563, 562, 543, 554, 565, 549, 537, 530,
+ 538, 0, 196, 221, 368, 0, 454, 288, 645, 614,
+ 484, 609, 206, 223, 0, 262, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 198, 200, 209,
+ 222, 232, 236, 243, 261, 276, 278, 285, 298, 310,
+ 318, 319, 322, 328, 380, 386, 387, 388, 389, 409,
+ 410, 411, 414, 417, 418, 421, 423, 424, 427, 431,
+ 435, 436, 437, 439, 441, 443, 455, 460, 474, 475,
+ 476, 477, 478, 481, 482, 488, 489, 490, 491, 492,
+ 500, 501, 515, 585, 587, 602, 621, 627, 480, 301,
+ 302, 444, 445, 314, 315, 641, 642, 300, 597, 628,
+ 595, 640, 622, 438, 378, 0, 0, 381, 281, 305,
+ 320, 0, 613, 502, 227, 466, 290, 251, 0, 0,
+ 211, 246, 230, 259, 274, 277, 324, 391, 400, 429,
+ 434, 296, 271, 244, 459, 241, 485, 518, 519, 520,
+ 522, 395, 266, 433, 396, 0, 376, 575, 576, 316,
+ 0, 0, 527, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 416, 0, 0, 0, 0, 0,
+ 0, 0, 270, 0, 0, 0, 0, 366, 267, 0,
+ 0, 204, 505, 0, 430, 0, 203, 0, 487, 252,
+ 377, 374, 582, 282, 273, 269, 250, 317, 385, 428,
+ 517, 422, 0, 370, 0, 0, 497, 401, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 323, 248, 325, 202, 413, 498, 286,
+ 0, 95, 0, 0, 0, 952, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 238, 0, 0, 245, 0,
+ 0, 0, 351, 360, 359, 339, 340, 342, 344, 350,
+ 357, 363, 336, 345, 0, 0, 606, 0, 0, 0,
+ 265, 321, 272, 264, 579, 0, 0, 0, 0, 0,
+ 0, 0, 0, 229, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 275, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 297, 0, 402, 257, 0, 453, 0, 0, 0, 624,
+ 0, 0, 0, 0, 0, 0, 0, 365, 0, 330,
+ 197, 225, 0, 0, 412, 461, 473, 0, 0, 0,
+ 253, 0, 471, 426, 601, 233, 284, 458, 432, 469,
+ 440, 287, 0, 0, 470, 372, 584, 450, 598, 625,
+ 626, 263, 406, 611, 521, 619, 643, 226, 260, 420,
+ 506, 604, 494, 397, 580, 581, 329, 493, 295, 201,
+ 369, 631, 224, 479, 371, 242, 231, 586, 608, 299,
+ 289, 456, 638, 213, 516, 596, 239, 483, 0, 0,
+ 646, 247, 504, 215, 593, 503, 393, 326, 327, 214,
+ 0, 457, 268, 293, 0, 0, 258, 415, 588, 589,
+ 256, 647, 228, 618, 220, 0, 617, 408, 583, 594,
+ 394, 383, 219, 592, 392, 382, 334, 355, 356, 280,
+ 307, 447, 375, 448, 306, 308, 404, 403, 405, 207,
+ 605, 0, 208, 0, 499, 607, 648, 452, 212, 234,
+ 235, 237, 0, 279, 283, 291, 294, 303, 304, 313,
+ 367, 419, 446, 442, 451, 0, 578, 599, 612, 623,
+ 629, 630, 632, 633, 634, 635, 636, 639, 637, 407,
+ 311, 495, 333, 373, 0, 0, 425, 472, 240, 603,
+ 496, 199, 0, 0, 0, 0, 254, 255, 0, 574,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 649,
+ 650, 651, 652, 653, 654, 655, 656, 657, 658, 659,
+ 660, 661, 662, 663, 664, 665, 666, 644, 507, 513,
+ 508, 509, 510, 511, 512, 0, 514, 0, 0, 0,
+ 0, 0, 398, 0, 590, 591, 667, 384, 486, 600,
+ 335, 349, 352, 341, 361, 0, 362, 337, 338, 343,
+ 346, 347, 348, 353, 354, 358, 364, 249, 210, 390,
+ 399, 577, 312, 216, 217, 218, 523, 524, 525, 526,
+ 615, 616, 620, 205, 462, 463, 464, 465, 292, 610,
+ 309, 468, 467, 331, 332, 379, 449, 539, 541, 552,
+ 556, 558, 560, 566, 569, 540, 542, 553, 557, 559,
+ 561, 567, 570, 529, 531, 533, 535, 548, 547, 544,
+ 572, 573, 550, 555, 534, 546, 551, 564, 571, 568,
+ 528, 532, 536, 545, 563, 562, 543, 554, 565, 549,
+ 537, 530, 538, 0, 196, 221, 368, 0, 454, 288,
+ 645, 614, 484, 609, 206, 223, 0, 262, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 198,
+ 200, 209, 222, 232, 236, 243, 261, 276, 278, 285,
+ 298, 310, 318, 319, 322, 328, 380, 386, 387, 388,
+ 389, 409, 410, 411, 414, 417, 418, 421, 423, 424,
+ 427, 431, 435, 436, 437, 439, 441, 443, 455, 460,
+ 474, 475, 476, 477, 478, 481, 482, 488, 489, 490,
+ 491, 492, 500, 501, 515, 585, 587, 602, 621, 627,
+ 480, 301, 302, 444, 445, 314, 315, 641, 642, 300,
+ 597, 628, 595, 640, 622, 438, 378, 0, 0, 381,
+ 281, 305, 320, 0, 613, 502, 227, 466, 290, 251,
+ 0, 0, 211, 246, 230, 259, 274, 277, 324, 391,
+ 400, 429, 434, 296, 271, 244, 459, 241, 485, 518,
+ 519, 520, 522, 395, 266, 433, 396, 0, 376, 575,
+ 576, 316, 0, 0, 527, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 416, 0, 0, 0,
+ 0, 0, 0, 0, 270, 0, 0, 0, 0, 366,
+ 267, 0, 0, 204, 505, 0, 430, 0, 203, 0,
+ 487, 252, 377, 374, 582, 282, 273, 269, 250, 317,
+ 385, 428, 517, 422, 0, 370, 0, 0, 497, 401,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 323, 248, 325, 202, 413,
+ 498, 286, 0, 0, 0, 0, 0, 194, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 238, 0, 0,
+ 245, 0, 0, 0, 351, 360, 359, 339, 340, 342,
+ 344, 350, 357, 363, 336, 345, 0, 0, 606, 0,
+ 0, 0, 265, 321, 272, 264, 579, 0, 0, 0,
+ 0, 0, 0, 0, 0, 229, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 275, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1444, 0, 297, 0, 402, 257, 0, 453, 0, 0,
+ 0, 624, 0, 0, 0, 0, 0, 0, 0, 365,
+ 0, 330, 197, 225, 0, 0, 412, 461, 473, 0,
+ 0, 0, 253, 0, 471, 426, 601, 233, 284, 458,
+ 432, 469, 440, 287, 0, 0, 470, 372, 584, 450,
+ 598, 625, 626, 263, 406, 611, 521, 619, 643, 226,
+ 260, 420, 506, 604, 494, 397, 580, 581, 329, 493,
+ 295, 201, 369, 631, 224, 479, 371, 242, 231, 586,
+ 608, 299, 289, 456, 638, 213, 516, 596, 239, 483,
+ 0, 0, 646, 247, 504, 215, 593, 503, 393, 326,
+ 327, 214, 0, 457, 268, 293, 0, 0, 258, 415,
+ 588, 589, 256, 647, 228, 618, 220, 0, 617, 408,
+ 583, 594, 394, 383, 219, 592, 392, 382, 334, 355,
+ 356, 280, 307, 447, 375, 448, 306, 308, 404, 403,
+ 405, 207, 605, 0, 208, 0, 499, 607, 648, 452,
+ 212, 234, 235, 237, 0, 279, 283, 291, 294, 303,
+ 304, 313, 367, 419, 446, 442, 451, 0, 578, 599,
+ 612, 623, 629, 630, 632, 633, 634, 635, 636, 639,
+ 637, 407, 311, 495, 333, 373, 0, 0, 425, 472,
+ 240, 603, 496, 199, 0, 0, 0, 0, 254, 255,
+ 0, 574, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 649, 650, 651, 652, 653, 654, 655, 656, 657,
+ 658, 659, 660, 661, 662, 663, 664, 665, 666, 644,
+ 507, 513, 508, 509, 510, 511, 512, 0, 514, 0,
+ 0, 0, 0, 0, 398, 0, 590, 591, 667, 384,
+ 486, 600, 335, 349, 352, 341, 361, 0, 362, 337,
+ 338, 343, 346, 347, 348, 353, 354, 358, 364, 249,
+ 210, 390, 399, 577, 312, 216, 217, 218, 523, 524,
+ 525, 526, 615, 616, 620, 205, 462, 463, 464, 465,
+ 292, 610, 309, 468, 467, 331, 332, 379, 449, 539,
+ 541, 552, 556, 558, 560, 566, 569, 540, 542, 553,
+ 557, 559, 561, 567, 570, 529, 531, 533, 535, 548,
+ 547, 544, 572, 573, 550, 555, 534, 546, 551, 564,
+ 571, 568, 528, 532, 536, 545, 563, 562, 543, 554,
+ 565, 549, 537, 530, 538, 0, 196, 221, 368, 0,
+ 454, 288, 645, 614, 484, 609, 206, 223, 0, 262,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 198, 200, 209, 222, 232, 236, 243, 261, 276,
+ 278, 285, 298, 310, 318, 319, 322, 328, 380, 386,
+ 387, 388, 389, 409, 410, 411, 414, 417, 418, 421,
+ 423, 424, 427, 431, 435, 436, 437, 439, 441, 443,
+ 455, 460, 474, 475, 476, 477, 478, 481, 482, 488,
+ 489, 490, 491, 492, 500, 501, 515, 585, 587, 602,
+ 621, 627, 480, 301, 302, 444, 445, 314, 315, 641,
+ 642, 1443, 597, 628, 595, 640, 622, 438, 378, 0,
+ 0, 381, 281, 305, 320, 0, 613, 502, 227, 466,
+ 290, 251, 0, 0, 211, 246, 230, 259, 274, 277,
+ 324, 391, 400, 429, 434, 296, 271, 244, 459, 241,
+ 485, 518, 519, 520, 522, 395, 266, 433, 396, 0,
+ 376, 575, 576, 316, 0, 0, 527, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 416, 0,
+ 0, 0, 0, 0, 0, 0, 270, 0, 0, 0,
+ 0, 366, 267, 0, 0, 204, 505, 0, 430, 0,
+ 203, 0, 487, 252, 377, 374, 582, 282, 273, 269,
+ 250, 317, 385, 428, 517, 422, 0, 370, 0, 0,
+ 497, 401, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 323, 248, 325,
+ 202, 413, 498, 286, 0, 0, 0, 0, 0, 194,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 238,
+ 0, 0, 245, 0, 0, 0, 351, 360, 359, 339,
+ 340, 342, 344, 350, 357, 363, 336, 345, 0, 0,
+ 606, 0, 0, 0, 265, 321, 272, 264, 579, 0,
+ 0, 0, 0, 0, 0, 0, 0, 229, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 275, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 297, 0, 402, 257, 0, 453,
+ 0, 0, 0, 624, 0, 0, 0, 0, 0, 0,
+ 0, 365, 0, 330, 197, 225, 0, 0, 412, 461,
+ 473, 0, 0, 0, 253, 0, 471, 426, 601, 233,
+ 284, 458, 432, 469, 440, 287, 0, 0, 470, 372,
+ 584, 450, 598, 625, 626, 263, 406, 611, 521, 619,
+ 643, 226, 260, 420, 506, 604, 494, 397, 580, 581,
+ 329, 493, 295, 201, 369, 631, 224, 479, 371, 242,
+ 231, 586, 608, 299, 289, 456, 638, 213, 516, 596,
+ 239, 483, 0, 0, 646, 247, 504, 215, 593, 503,
+ 393, 326, 327, 214, 0, 457, 268, 293, 0, 0,
+ 258, 415, 588, 589, 256, 647, 228, 618, 220, 0,
+ 617, 408, 583, 594, 394, 383, 219, 592, 392, 382,
+ 334, 355, 356, 280, 307, 447, 375, 448, 306, 308,
+ 404, 403, 405, 207, 605, 0, 208, 0, 499, 607,
+ 648, 452, 212, 234, 235, 237, 0, 279, 283, 291,
+ 294, 303, 304, 313, 367, 419, 446, 442, 451, 0,
+ 578, 599, 612, 623, 629, 630, 632, 633, 634, 635,
+ 636, 639, 637, 407, 311, 495, 333, 373, 0, 0,
+ 425, 472, 240, 603, 496, 199, 0, 0, 0, 0,
+ 254, 255, 0, 574, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 649, 650, 651, 652, 653, 654, 655,
+ 656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
+ 666, 644, 507, 513, 508, 509, 510, 511, 512, 0,
+ 514, 0, 0, 0, 0, 0, 398, 0, 590, 591,
+ 667, 384, 486, 600, 335, 349, 352, 341, 361, 0,
+ 362, 337, 338, 343, 346, 347, 348, 353, 354, 358,
+ 364, 249, 210, 390, 399, 577, 312, 216, 217, 218,
+ 523, 524, 525, 526, 615, 616, 620, 205, 462, 463,
+ 464, 465, 292, 610, 309, 468, 467, 331, 332, 379,
+ 449, 539, 541, 552, 556, 558, 560, 566, 569, 540,
+ 542, 553, 557, 559, 561, 567, 570, 529, 531, 533,
+ 535, 548, 547, 544, 572, 573, 550, 555, 534, 546,
+ 551, 564, 571, 568, 528, 532, 536, 545, 563, 562,
+ 543, 554, 565, 549, 537, 530, 538, 0, 196, 221,
+ 368, 0, 454, 288, 645, 614, 484, 609, 206, 223,
+ 0, 262, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1042,
+ 0, 0, 0, 198, 200, 209, 222, 232, 236, 243,
+ 261, 276, 278, 285, 298, 310, 318, 319, 322, 328,
+ 380, 386, 387, 388, 389, 409, 410, 411, 414, 417,
+ 418, 421, 423, 424, 427, 431, 435, 436, 437, 439,
+ 441, 443, 455, 460, 474, 475, 476, 477, 478, 481,
+ 482, 488, 489, 490, 491, 492, 500, 501, 515, 585,
+ 587, 602, 621, 627, 480, 301, 302, 444, 445, 314,
+ 315, 641, 642, 300, 597, 628, 595, 640, 622, 438,
+ 378, 0, 0, 381, 281, 305, 320, 0, 613, 502,
+ 227, 466, 290, 251, 0, 0, 211, 246, 230, 259,
+ 274, 277, 324, 391, 400, 429, 434, 296, 271, 244,
+ 459, 241, 485, 518, 519, 520, 522, 395, 266, 433,
+ 396, 0, 376, 575, 576, 316, 0, 0, 527, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 416, 0, 0, 0, 0, 0, 0, 0, 270, 0,
+ 0, 0, 0, 366, 267, 0, 0, 204, 505, 0,
+ 430, 0, 203, 0, 487, 252, 377, 374, 582, 282,
+ 273, 269, 250, 317, 385, 428, 517, 422, 0, 370,
+ 0, 0, 497, 401, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 323,
+ 248, 325, 202, 413, 498, 286, 0, 0, 0, 0,
+ 0, 194, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 238, 0, 0, 245, 0, 0, 0, 351, 360,
+ 359, 339, 340, 342, 344, 350, 357, 363, 336, 345,
+ 0, 0, 606, 0, 0, 0, 265, 321, 272, 264,
+ 579, 0, 0, 0, 0, 0, 0, 0, 0, 229,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 275, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 297, 0, 402, 257,
+ 0, 453, 0, 670, 0, 624, 0, 0, 0, 0,
+ 0, 0, 0, 365, 0, 330, 197, 225, 0, 0,
+ 412, 461, 473, 0, 0, 0, 253, 0, 471, 426,
+ 601, 233, 284, 458, 432, 469, 440, 287, 0, 0,
+ 470, 372, 584, 450, 598, 625, 626, 263, 406, 611,
+ 521, 619, 643, 226, 260, 420, 506, 604, 494, 397,
+ 580, 581, 329, 493, 295, 201, 369, 631, 224, 479,
+ 371, 242, 231, 586, 608, 299, 289, 456, 638, 213,
+ 516, 596, 239, 483, 0, 0, 646, 247, 504, 215,
+ 593, 503, 393, 326, 327, 214, 0, 457, 268, 293,
+ 0, 0, 258, 415, 588, 589, 256, 647, 228, 618,
+ 220, 0, 617, 408, 583, 594, 394, 383, 219, 592,
+ 392, 382, 334, 355, 356, 280, 307, 447, 375, 448,
+ 306, 308, 404, 403, 405, 207, 605, 0, 208, 0,
+ 499, 607, 648, 452, 212, 234, 235, 237, 0, 279,
+ 283, 291, 294, 303, 304, 313, 367, 419, 446, 442,
+ 451, 0, 578, 599, 612, 623, 629, 630, 632, 633,
+ 634, 635, 636, 639, 637, 407, 311, 495, 333, 373,
+ 0, 0, 425, 472, 240, 603, 496, 199, 0, 0,
+ 0, 0, 254, 255, 0, 574, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 649, 650, 651, 652, 653,
+ 654, 655, 656, 657, 658, 659, 660, 661, 662, 663,
+ 664, 665, 666, 644, 507, 513, 508, 509, 510, 511,
+ 512, 0, 514, 0, 0, 0, 0, 0, 398, 0,
+ 590, 591, 667, 384, 486, 600, 335, 349, 352, 341,
+ 361, 0, 362, 337, 338, 343, 346, 347, 348, 353,
+ 354, 358, 364, 249, 210, 390, 399, 577, 312, 216,
+ 217, 218, 523, 524, 525, 526, 615, 616, 620, 205,
+ 462, 463, 464, 465, 292, 610, 309, 468, 467, 331,
+ 332, 379, 449, 539, 541, 552, 556, 558, 560, 566,
+ 569, 540, 542, 553, 557, 559, 561, 567, 570, 529,
+ 531, 533, 535, 548, 547, 544, 572, 573, 550, 555,
+ 534, 546, 551, 564, 571, 568, 528, 532, 536, 545,
+ 563, 562, 543, 554, 565, 549, 537, 530, 538, 0,
+ 196, 221, 368, 0, 454, 288, 645, 614, 484, 609,
+ 206, 223, 0, 262, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 198, 200, 209, 222, 232,
+ 236, 243, 261, 276, 278, 285, 298, 310, 318, 319,
+ 322, 328, 380, 386, 387, 388, 389, 409, 410, 411,
+ 414, 417, 418, 421, 423, 424, 427, 431, 435, 436,
+ 437, 439, 441, 443, 455, 460, 474, 475, 476, 477,
+ 478, 481, 482, 488, 489, 490, 491, 492, 500, 501,
+ 515, 585, 587, 602, 621, 627, 480, 301, 302, 444,
+ 445, 314, 315, 641, 642, 300, 597, 628, 595, 640,
+ 622, 438, 378, 0, 0, 381, 281, 305, 320, 0,
+ 613, 502, 227, 466, 290, 251, 0, 0, 211, 246,
+ 230, 259, 274, 277, 324, 391, 400, 429, 434, 296,
+ 271, 244, 459, 241, 485, 518, 519, 520, 522, 395,
+ 266, 433, 396, 0, 376, 575, 576, 316, 0, 0,
+ 527, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 416, 0, 0, 0, 0, 0, 0, 0,
+ 270, 0, 0, 0, 0, 366, 267, 0, 0, 204,
+ 505, 0, 430, 0, 203, 0, 487, 252, 377, 374,
+ 582, 282, 273, 269, 250, 317, 385, 428, 517, 422,
+ 0, 370, 0, 0, 497, 401, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 323, 248, 325, 202, 413, 498, 286, 0, 0,
+ 0, 0, 0, 717, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 238, 0, 0, 245, 0, 0, 0,
+ 351, 360, 359, 339, 340, 342, 344, 350, 357, 363,
+ 336, 345, 0, 0, 606, 0, 0, 0, 265, 321,
+ 272, 264, 579, 0, 0, 0, 0, 0, 0, 0,
+ 0, 229, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 275, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 297, 0,
+ 402, 257, 0, 453, 0, 0, 0, 624, 0, 0,
+ 0, 0, 0, 0, 0, 365, 0, 330, 197, 225,
+ 0, 0, 412, 461, 473, 0, 0, 0, 253, 0,
+ 471, 426, 601, 233, 284, 458, 432, 469, 440, 287,
+ 0, 0, 470, 372, 584, 450, 598, 625, 626, 263,
+ 406, 611, 521, 619, 643, 226, 260, 420, 506, 604,
+ 494, 397, 580, 581, 329, 493, 295, 201, 369, 631,
+ 224, 479, 371, 242, 231, 586, 608, 299, 289, 456,
+ 638, 213, 516, 596, 239, 483, 0, 0, 646, 247,
+ 504, 215, 593, 503, 393, 326, 327, 214, 0, 457,
+ 268, 293, 0, 0, 258, 415, 588, 589, 256, 647,
+ 228, 618, 220, 0, 617, 408, 583, 594, 394, 383,
+ 219, 592, 392, 382, 334, 355, 356, 280, 307, 447,
+ 375, 448, 306, 308, 404, 403, 405, 207, 605, 0,
+ 208, 0, 499, 607, 648, 452, 212, 234, 235, 237,
+ 0, 279, 283, 291, 294, 303, 304, 313, 367, 419,
+ 446, 442, 451, 0, 578, 599, 612, 623, 629, 630,
+ 632, 633, 634, 635, 636, 639, 637, 407, 311, 495,
+ 333, 373, 0, 0, 425, 472, 240, 603, 496, 199,
+ 0, 0, 0, 0, 254, 255, 0, 574, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 649, 650, 651,
+ 652, 653, 654, 655, 656, 657, 658, 659, 660, 661,
+ 662, 663, 664, 665, 666, 644, 507, 513, 508, 509,
+ 510, 511, 512, 0, 514, 0, 0, 0, 0, 0,
+ 398, 0, 590, 591, 667, 384, 486, 600, 335, 349,
+ 352, 341, 361, 0, 362, 337, 338, 343, 346, 347,
+ 348, 353, 354, 358, 364, 249, 210, 390, 399, 577,
+ 312, 216, 217, 218, 523, 524, 525, 526, 615, 616,
+ 620, 205, 462, 463, 464, 465, 292, 610, 309, 468,
+ 467, 331, 332, 379, 449, 539, 541, 552, 556, 558,
+ 560, 566, 569, 540, 542, 553, 557, 559, 561, 567,
+ 570, 529, 531, 533, 535, 548, 547, 544, 572, 573,
+ 550, 555, 534, 546, 551, 564, 571, 568, 528, 532,
+ 536, 545, 563, 562, 543, 554, 565, 549, 537, 530,
+ 538, 0, 196, 221, 368, 0, 454, 288, 645, 614,
+ 484, 609, 206, 223, 0, 262, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 198, 200, 209,
+ 222, 232, 236, 243, 261, 276, 278, 285, 298, 310,
+ 318, 319, 322, 328, 380, 386, 387, 388, 389, 4111,
+ 410, 411, 414, 417, 418, 421, 423, 424, 427, 431,
+ 435, 436, 437, 439, 441, 443, 455, 460, 474, 475,
+ 476, 477, 478, 481, 482, 488, 489, 490, 491, 492,
+ 500, 501, 515, 585, 587, 602, 621, 627, 480, 301,
+ 302, 444, 445, 314, 315, 641, 642, 300, 597, 628,
+ 595, 640, 622, 438, 378, 0, 0, 381, 281, 305,
+ 320, 0, 613, 502, 227, 466, 290, 251, 0, 0,
+ 211, 246, 230, 259, 274, 277, 324, 391, 400, 429,
+ 434, 296, 271, 244, 459, 241, 485, 518, 519, 520,
+ 522, 395, 266, 433, 396, 0, 376, 575, 576, 316,
+ 0, 0, 527, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 416, 0, 0, 0, 0, 0,
+ 0, 0, 270, 0, 0, 0, 0, 366, 267, 0,
+ 0, 204, 505, 0, 430, 0, 203, 0, 487, 252,
+ 377, 374, 582, 282, 273, 269, 250, 317, 385, 428,
+ 517, 422, 0, 370, 0, 0, 497, 401, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 323, 248, 325, 202, 413, 498, 286,
+ 0, 0, 0, 0, 0, 717, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 238, 0, 0, 245, 0,
+ 0, 0, 351, 360, 359, 339, 340, 342, 344, 350,
+ 357, 363, 336, 345, 0, 0, 606, 0, 0, 0,
+ 265, 321, 272, 264, 579, 0, 0, 0, 0, 0,
+ 0, 0, 0, 229, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 275, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 297, 0, 402, 257, 0, 453, 0, 0, 0, 624,
+ 0, 0, 0, 0, 0, 0, 0, 365, 0, 330,
+ 197, 225, 0, 0, 412, 461, 473, 0, 0, 0,
+ 253, 0, 471, 426, 601, 233, 284, 458, 432, 469,
+ 440, 287, 0, 0, 470, 372, 584, 450, 598, 625,
+ 626, 263, 406, 611, 521, 619, 643, 226, 260, 420,
+ 506, 604, 494, 397, 580, 581, 329, 493, 295, 201,
+ 369, 631, 224, 479, 371, 242, 231, 586, 608, 299,
+ 289, 456, 638, 213, 516, 596, 239, 483, 0, 0,
+ 646, 247, 504, 215, 593, 503, 393, 326, 327, 214,
+ 0, 457, 268, 293, 0, 0, 258, 415, 588, 589,
+ 256, 647, 228, 618, 220, 0, 617, 408, 583, 594,
+ 394, 383, 219, 592, 392, 382, 334, 355, 356, 280,
+ 307, 447, 375, 448, 306, 308, 404, 403, 405, 207,
+ 605, 0, 208, 0, 499, 607, 648, 452, 212, 234,
+ 235, 237, 0, 279, 283, 291, 294, 303, 304, 313,
+ 367, 419, 446, 442, 451, 0, 578, 599, 612, 623,
+ 629, 630, 632, 633, 634, 635, 636, 639, 637, 407,
+ 311, 495, 333, 373, 0, 0, 425, 472, 240, 603,
+ 496, 199, 0, 0, 0, 0, 254, 255, 0, 574,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 649,
+ 650, 651, 652, 653, 654, 655, 656, 657, 658, 659,
+ 660, 661, 662, 663, 664, 665, 666, 644, 507, 513,
+ 508, 509, 510, 511, 512, 0, 514, 0, 0, 0,
+ 0, 0, 398, 0, 590, 591, 667, 384, 486, 600,
+ 335, 349, 352, 341, 361, 0, 362, 337, 338, 343,
+ 346, 347, 348, 353, 354, 358, 364, 249, 210, 390,
+ 399, 577, 312, 216, 217, 218, 523, 524, 525, 526,
+ 615, 616, 620, 205, 462, 463, 464, 465, 292, 610,
+ 309, 468, 467, 331, 332, 379, 449, 539, 541, 552,
+ 556, 558, 560, 566, 569, 540, 542, 553, 557, 559,
+ 561, 567, 570, 529, 531, 533, 535, 548, 547, 544,
+ 572, 573, 550, 555, 534, 546, 551, 564, 571, 568,
+ 528, 532, 536, 545, 563, 562, 543, 554, 565, 549,
+ 537, 530, 538, 0, 196, 221, 368, 0, 454, 288,
+ 645, 614, 484, 609, 206, 223, 0, 262, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 198,
+ 200, 209, 222, 232, 236, 243, 261, 276, 278, 285,
+ 298, 310, 318, 319, 322, 328, 380, 386, 387, 388,
+ 389, 409, 410, 411, 414, 417, 418, 421, 423, 424,
+ 427, 431, 435, 436, 437, 439, 441, 443, 455, 460,
+ 474, 475, 476, 477, 478, 481, 482, 488, 489, 490,
+ 491, 492, 500, 501, 515, 585, 587, 602, 621, 627,
+ 480, 301, 302, 444, 445, 314, 315, 641, 642, 300,
+ 597, 628, 595, 640, 622, 438, 378, 0, 0, 381,
+ 281, 305, 320, 0, 613, 502, 227, 466, 290, 251,
+ 0, 0, 211, 246, 230, 259, 274, 277, 324, 391,
+ 400, 429, 434, 296, 271, 244, 459, 241, 485, 518,
+ 519, 520, 522, 395, 266, 433, 396, 0, 376, 575,
+ 576, 316, 0, 0, 527, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 416, 0, 0, 0,
+ 0, 0, 0, 0, 270, 0, 0, 0, 0, 366,
+ 267, 0, 0, 204, 505, 0, 430, 0, 203, 0,
+ 487, 252, 377, 374, 582, 282, 273, 269, 250, 317,
+ 385, 428, 517, 422, 0, 370, 0, 0, 497, 401,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 323, 248, 325, 202, 413,
+ 498, 286, 0, 0, 0, 0, 0, 952, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 238, 0, 0,
+ 245, 0, 0, 0, 351, 360, 359, 339, 340, 342,
+ 344, 350, 357, 363, 336, 345, 0, 0, 606, 0,
+ 0, 0, 265, 321, 272, 264, 579, 0, 0, 0,
+ 0, 0, 0, 0, 0, 229, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 275, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 297, 0, 402, 257, 0, 453, 0, 0,
+ 0, 624, 0, 0, 0, 0, 0, 0, 0, 365,
+ 0, 330, 197, 225, 0, 0, 412, 461, 473, 0,
+ 0, 0, 253, 0, 471, 426, 601, 233, 284, 458,
+ 432, 469, 440, 287, 0, 0, 470, 372, 584, 450,
+ 598, 625, 626, 263, 406, 611, 521, 619, 643, 226,
+ 260, 420, 506, 604, 494, 397, 580, 581, 329, 493,
+ 295, 201, 369, 631, 224, 479, 371, 242, 231, 586,
+ 608, 299, 289, 456, 638, 213, 516, 596, 239, 483,
+ 0, 0, 646, 247, 504, 215, 593, 503, 393, 326,
+ 327, 214, 0, 457, 268, 293, 0, 0, 258, 415,
+ 588, 589, 256, 647, 228, 618, 220, 0, 617, 408,
+ 583, 594, 394, 383, 219, 592, 392, 382, 334, 355,
+ 356, 280, 307, 447, 375, 448, 306, 308, 404, 403,
+ 405, 207, 605, 0, 208, 0, 499, 607, 648, 452,
+ 212, 234, 235, 237, 0, 279, 283, 291, 294, 303,
+ 304, 313, 367, 419, 446, 442, 451, 0, 578, 599,
+ 612, 623, 629, 630, 632, 633, 634, 635, 636, 639,
+ 637, 407, 311, 495, 333, 373, 0, 0, 425, 472,
+ 240, 603, 496, 199, 0, 0, 0, 0, 254, 255,
+ 0, 574, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 649, 650, 651, 652, 653, 654, 655, 656, 657,
+ 658, 659, 660, 661, 662, 663, 664, 665, 666, 644,
+ 507, 513, 508, 509, 510, 511, 512, 0, 514, 0,
+ 0, 0, 0, 0, 398, 0, 590, 591, 667, 384,
+ 486, 600, 335, 349, 352, 341, 361, 0, 362, 337,
+ 338, 343, 346, 347, 348, 353, 354, 358, 364, 249,
+ 210, 390, 399, 577, 312, 216, 217, 218, 523, 524,
+ 525, 526, 615, 616, 620, 205, 462, 463, 464, 465,
+ 292, 610, 309, 468, 467, 331, 332, 379, 449, 539,
+ 541, 552, 556, 558, 560, 566, 569, 540, 542, 553,
+ 557, 559, 561, 567, 570, 529, 531, 533, 535, 548,
+ 547, 544, 572, 573, 550, 555, 534, 546, 551, 564,
+ 571, 568, 528, 532, 536, 545, 563, 562, 543, 554,
+ 565, 549, 537, 530, 538, 0, 196, 221, 368, 0,
+ 454, 288, 645, 614, 484, 609, 206, 223, 0, 262,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 198, 200, 209, 222, 232, 236, 243, 261, 276,
+ 278, 285, 298, 310, 318, 319, 322, 328, 380, 386,
+ 387, 388, 389, 409, 410, 411, 414, 417, 418, 421,
+ 423, 424, 427, 431, 435, 436, 437, 439, 441, 443,
+ 455, 460, 474, 475, 476, 477, 478, 481, 482, 488,
+ 489, 490, 491, 492, 500, 501, 515, 585, 587, 602,
+ 621, 627, 480, 301, 302, 444, 445, 314, 315, 641,
+ 642, 300, 597, 628, 595, 640, 622, 438, 378, 0,
+ 0, 381, 281, 305, 320, 0, 613, 502, 227, 466,
+ 290, 251, 0, 0, 211, 246, 230, 259, 274, 277,
+ 324, 391, 400, 429, 434, 296, 271, 244, 459, 241,
+ 485, 518, 519, 520, 522, 395, 266, 433, 396, 0,
+ 376, 575, 576, 316, 0, 0, 527, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 416, 0,
+ 0, 0, 0, 0, 0, 0, 270, 0, 0, 0,
+ 0, 366, 267, 0, 0, 204, 505, 0, 430, 0,
+ 203, 0, 487, 252, 377, 374, 582, 282, 273, 269,
+ 250, 317, 385, 428, 517, 422, 0, 370, 0, 0,
+ 497, 401, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 323, 248, 325,
+ 202, 413, 498, 286, 0, 0, 0, 0, 0, 194,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 238,
+ 0, 0, 245, 0, 0, 0, 351, 360, 359, 339,
+ 340, 342, 344, 350, 357, 363, 336, 345, 0, 0,
+ 606, 0, 0, 0, 265, 321, 272, 264, 579, 0,
+ 0, 0, 0, 0, 0, 0, 0, 229, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 275, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 297, 0, 402, 257, 0, 453,
+ 0, 0, 0, 624, 0, 0, 0, 0, 0, 0,
+ 0, 365, 0, 330, 197, 225, 0, 0, 412, 461,
+ 473, 0, 0, 0, 253, 0, 471, 426, 601, 233,
+ 284, 458, 432, 469, 440, 287, 0, 0, 470, 372,
+ 584, 450, 598, 625, 626, 263, 406, 611, 521, 619,
+ 643, 226, 260, 420, 506, 604, 494, 397, 580, 581,
+ 329, 493, 295, 201, 369, 631, 224, 479, 371, 242,
+ 231, 586, 608, 299, 289, 456, 638, 213, 516, 596,
+ 239, 483, 0, 0, 646, 247, 504, 215, 593, 503,
+ 393, 326, 327, 214, 0, 457, 268, 293, 0, 0,
+ 258, 415, 588, 589, 256, 647, 228, 618, 220, 0,
+ 617, 408, 583, 594, 394, 383, 219, 592, 392, 382,
+ 334, 355, 356, 280, 307, 447, 375, 448, 306, 308,
+ 404, 403, 405, 207, 605, 0, 208, 0, 499, 607,
+ 648, 452, 212, 234, 235, 237, 0, 279, 283, 291,
+ 294, 303, 304, 313, 367, 419, 446, 442, 451, 0,
+ 578, 599, 612, 623, 629, 630, 632, 633, 634, 635,
+ 636, 639, 637, 407, 311, 495, 333, 373, 0, 0,
+ 425, 472, 240, 603, 496, 199, 0, 0, 0, 0,
+ 254, 255, 0, 574, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 649, 650, 651, 652, 653, 654, 655,
+ 656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
+ 666, 644, 507, 513, 508, 509, 510, 511, 512, 0,
+ 514, 0, 0, 0, 0, 0, 398, 0, 590, 591,
+ 667, 384, 486, 600, 335, 349, 352, 341, 361, 0,
+ 362, 337, 338, 343, 346, 347, 348, 353, 354, 358,
+ 364, 249, 210, 390, 399, 577, 312, 216, 217, 218,
+ 523, 524, 525, 526, 615, 616, 620, 205, 462, 463,
+ 464, 465, 292, 610, 309, 468, 467, 331, 332, 379,
+ 449, 539, 541, 552, 556, 558, 560, 566, 569, 540,
+ 542, 553, 557, 559, 561, 567, 570, 529, 531, 533,
+ 535, 548, 547, 544, 572, 573, 550, 555, 534, 546,
+ 551, 564, 571, 568, 528, 532, 536, 545, 563, 562,
+ 543, 554, 565, 549, 537, 530, 538, 0, 196, 221,
+ 368, 0, 454, 288, 645, 614, 484, 609, 206, 223,
+ 0, 262, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 198, 200, 209, 222, 232, 236, 243,
+ 261, 276, 278, 285, 298, 310, 318, 319, 322, 328,
+ 380, 386, 387, 388, 389, 409, 410, 411, 414, 417,
+ 418, 421, 423, 424, 427, 431, 435, 436, 437, 439,
+ 441, 443, 455, 460, 474, 475, 476, 477, 478, 481,
+ 482, 488, 489, 490, 491, 492, 500, 501, 515, 585,
+ 587, 602, 621, 627, 480, 301, 302, 444, 445, 314,
+ 315, 641, 642, 300, 597, 628, 595, 640, 622, 438,
+ 378, 0, 0, 381, 281, 305, 320, 0, 613, 502,
+ 227, 466, 290, 251, 0, 0, 211, 246, 230, 259,
+ 274, 277, 324, 391, 400, 429, 434, 296, 271, 244,
+ 459, 241, 485, 518, 519, 520, 522, 395, 266, 433,
+ 0, 0, 376, 575, 576, 316,
}
var yyPact = [...]int{
- -1000, -1000, 5004, -1000, -538, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, 5002, -1000, -543, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, 2687, 2535, -1000, -1000, -1000, -1000, 2740, -1000, 1030,
- 2183, -1000, 2515, 5017, -1000, 55465, 510, -1000, 52545, -445,
- 881, 268, 36485, -1000, 200, -1000, 193, 54005, 204, -1000,
- -1000, -1000, -1000, -445, 21885, 2408, 51, 43, 55465, -1000,
- -1000, -1000, -1000, -364, 2671, 2153, -1000, 408, -1000, -1000,
- -1000, -1000, -1000, -1000, 51815, -1000, 1184, -1000, -1000, 2520,
- 2504, 2384, 928, 2400, -1000, 2576, 2153, -1000, 21885, 2673,
- 2458, 21155, 21155, 478, -1000, -1000, 271, -1000, -1000, 31375,
- 55465, 39405, 317, -1000, 2515, -1000, -1000, -1000, 202, -1000,
- 346, 2073, -1000, 2065, -1000, 1014, 1053, 413, 846, 829,
- 411, 410, 393, 391, 384, 381, 379, 376, 421, -1000,
- 952, 952, -201, -205, 362, 479, 468, 468, 1044, 490,
- 2493, 2479, -1000, -1000, 952, 952, 952, 343, 952, 952,
- 952, 952, 323, 320, 952, 952, 952, 952, 952, 952,
- 952, 952, 952, 952, 952, 952, 952, 952, 952, 952,
- 952, 909, 2515, 310, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, 2499, 2504, -1000, -1000, -1000, -1000, 2666, -1000, 1045,
+ 2083, -1000, 2425, 5020, -1000, 55834, 808, -1000, 52906, -446,
+ 922, 238, 36802, -1000, 226, -1000, 205, 54370, 218, -1000,
+ -1000, -1000, -1000, -446, 22162, 2341, 47, 41, 55834, -1000,
+ -1000, -1000, -1000, -363, 2613, 2073, -1000, 389, -1000, -1000,
+ -1000, -1000, -1000, -1000, 52174, -1000, 1137, -1000, -1000, 2476,
+ 2470, 2311, 948, 2319, -1000, 2534, 2073, -1000, 22162, 2603,
+ 2453, 21430, 21430, 471, -1000, -1000, 596, -1000, -1000, 31678,
+ 55834, 39730, 284, -1000, 2425, -1000, -1000, -1000, 214, -1000,
+ 381, 1998, -1000, 1993, -1000, 1053, 1064, 402, 864, 841,
+ 401, 398, 397, 396, 395, 393, 392, 388, 394, -1000,
+ 963, 963, -223, -225, 1390, 786, 459, 459, 1098, 503,
+ 2392, 2387, -1000, -1000, 963, 963, 963, 363, 963, 963,
+ 963, 963, 334, 332, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 959, 2425, 321, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
@@ -7365,67 +7406,68 @@ var yyPact = [...]int{
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, 55465, 262, 55465, -1000,
- 821, 509, -1000, -1000, -449, 1113, 1113, 77, 1113, 1113,
- 1113, 1113, 185, 1006, 41, -1000, 182, 305, 168, 303,
- 1087, 197, -1000, -1000, 292, 1087, 1945, -1000, 933, 287,
- 169, -1000, 1113, 1113, -1000, 14561, 251, 14561, 14561, -1000,
- 2503, -1000, -1000, -1000, -1000, -1000, 1426, -1000, -1000, -1000,
- -1000, -26, 489, -1000, -1000, -1000, -1000, 54005, 51085, 289,
- -1000, -1000, 771, 1967, 1182, 21885, 1367, 926, -1000, -1000,
- 1487, 902, -1000, -1000, -1000, -1000, -1000, 802, -1000, 24075,
- 24075, 24075, 24075, -1000, -1000, 2081, 50355, 2081, 2081, 24075,
- 2081, 24075, 2081, 2081, 2081, 2081, 21885, 2081, 2081, 2081,
- 2081, -1000, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081,
- 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081,
- 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081,
- 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081,
- 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081,
- 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081,
- 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081,
- 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081,
- 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081,
- 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081,
- 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081,
- 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081,
- 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, -1000,
- -1000, -1000, -1000, 2081, 820, 2081, 2081, 2081, 2081, 2081,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, 2081, 2081, 2081,
- 2081, 2081, 2081, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081,
- 2081, 2081, 2081, 2081, 2081, 2081, -1000, -1000, -1000, 1800,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, 26995, 1695, 1693,
- 1692, -1000, 18965, 2081, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 55834, 211,
+ 55834, -1000, 865, 804, -1000, -1000, -450, 1113, 1113, 117,
+ 1113, 1113, 1113, 1113, 181, 951, 40, -1000, 175, 289,
+ 225, 307, 1116, 269, -1000, -1000, 291, 1116, 1800, -1000,
+ 952, 302, 159, -1000, 1113, 1113, -1000, 14818, 263, 14818,
+ 14818, -1000, 2420, -1000, -1000, -1000, -1000, -1000, 1339, -1000,
+ -1000, -1000, -1000, -49, 493, -1000, -1000, -1000, -1000, 54370,
+ 51442, 234, -1000, -1000, 45, 1857, 1527, 22162, 1439, 946,
+ -1000, -1000, 1369, 927, -1000, -1000, -1000, -1000, -1000, 829,
+ -1000, 24358, 24358, 24358, 24358, -1000, -1000, 2000, 50710, 2000,
+ 2000, 24358, 2000, 24358, 2000, 2000, 2000, 2000, 22162, 2000,
+ 2000, 2000, 2000, -1000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, -1000, -1000, -1000, -1000, 2000, 863, 2000,
+ 2000, 2000, 2000, 2000, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, 2000, 2000, 2000, 2000, 2000, 2000, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ -1000, -1000, -1000, 1605, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, 27286, 1540, 1536, 1533, -1000, 19234, 2000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, 55465, -1000, 2081, 225, 54005,
- 54005, 348, 1414, -1000, -1000, 2576, 2153, -1000, 2671, 2705,
- 408, -1000, 2509, 1753, 1798, 1625, 2153, 2030, 55465, -1000,
- 2102, -1000, -1000, -1000, -307, -329, 2258, 1574, 1934, -1000,
- -1000, -1000, -1000, 2482, 21885, -1000, -1000, 2720, -1000, 28455,
- 818, 2718, 49625, -1000, 478, 478, 2064, 424, 5, -1000,
- -1000, -1000, -1000, 992, 35755, -1000, -1000, -1000, -1000, -1000,
- 1953, 55465, -1000, -1000, 1216, 54005, -1000, 2181, -1000, 1949,
- -1000, 2138, 21885, 2191, 508, 54005, 499, 498, 497, -1000,
- -53, -1000, -1000, -1000, -1000, -1000, -1000, 952, 952, 952,
- -1000, 399, 2660, 5017, 7766, -1000, -1000, -1000, 48895, 2178,
- 54005, -1000, 2174, -1000, 1073, 872, 851, 851, 54005, -1000,
- -1000, 54735, 54005, 1067, 1064, 54005, 54005, 54005, 54005, -1000,
- 48165, -1000, 47435, 46705, 1413, 54005, 45975, 45245, 44515, 43785,
- 43055, -1000, 2255, -1000, 2137, -1000, -1000, -1000, 54735, 54005,
- 54005, 54735, 54005, 54735, 55465, 54005, -1000, -1000, 357, -1000,
- -1000, 1411, 1397, 1396, 952, 952, 1395, 1929, 1927, 1926,
- 952, 952, 1390, 1925, 37945, 1923, 276, 1383, 1381, 1349,
- 1380, 1906, 299, 1895, 1379, 1310, 1348, 54005, 2171, 55465,
- -1000, 290, 934, 907, 989, 2515, 2405, 2060, 488, 507,
- 54005, 472, 472, 54005, -1000, 15297, 55465, 232, -1000, 1893,
- 21885, -1000, 1089, 1087, 1087, -1000, -1000, -1000, -1000, -1000,
- -1000, 1113, 55465, 1089, -1000, -1000, -1000, 1087, 1113, 55465,
- 1113, 1113, 1113, 1113, 1087, 1087, 1087, 1113, 55465, 55465,
- 55465, 55465, 55465, 55465, 55465, 55465, 55465, 14561, 933, 1113,
- -450, -1000, 1881, -1000, -1000, -1000, 2283, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 55834,
+ -1000, 2000, 243, 54370, 54370, 366, 1322, -1000, -1000, 2534,
+ 2073, -1000, 2613, 2562, 389, -1000, 3064, 1622, 1778, 1500,
+ 2073, 1937, 55834, -1000, 2007, -1000, -1000, -1000, -382, -386,
+ 2258, 1438, 1794, -1000, -1000, -1000, -1000, 1905, 22162, -1000,
+ -1000, 2647, -1000, 28750, 862, 2643, 49978, -1000, 471, 471,
+ 1982, 593, -5, -1000, -1000, -1000, -1000, 993, 36070, -1000,
+ -1000, -1000, -1000, -1000, 1883, 55834, -1000, -1000, 5010, 54370,
+ -1000, 2081, -1000, 1872, -1000, 2037, 22162, 2091, 803, 54370,
+ 526, 521, 489, -1000, -64, -1000, -1000, -1000, -1000, -1000,
+ -1000, 963, 963, 963, -1000, 387, 2598, 5020, 6408, -1000,
+ -1000, -1000, 49246, 2078, 54370, -1000, 2072, -1000, 1075, 850,
+ 827, 827, 54370, -1000, -1000, 55102, 54370, 1074, 1073, 54370,
+ 54370, 54370, 54370, -1000, 48514, -1000, 47782, 47050, 1318, 54370,
+ 46318, 45586, 44854, 44122, 43390, -1000, 2244, -1000, 2094, -1000,
+ -1000, -1000, 55102, 54370, 54370, 55102, 54370, 55102, 55834, 54370,
+ -1000, -1000, 328, -1000, -1000, 1317, 1316, 1313, 963, 963,
+ 1297, 1789, 1787, 1780, 963, 963, 1280, 1772, 38266, 1767,
+ 310, 1278, 1277, 1275, 1341, 1720, 260, 1714, 1321, 1272,
+ 1270, 54370, 2067, 55834, -1000, 280, 1122, 976, 992, 2425,
+ 2320, 1977, 490, 802, 54370, 463, 463, 54370, -1000, 15556,
+ 55834, 228, -1000, 1712, 22162, -1000, 1132, 1116, 1116, -1000,
+ -1000, -1000, -1000, -1000, -1000, 1113, 55834, 1132, -1000, -1000,
+ -1000, 1116, 1113, 55834, 1113, 1113, 1113, 1113, 1116, 1116,
+ 1116, 1113, 55834, 55834, 55834, 55834, 55834, 55834, 55834, 55834,
+ 55834, 14818, 952, 1113, -453, -1000, 1691, -1000, -1000, -1000,
+ 2212, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
@@ -7440,335 +7482,335 @@ var yyPact = [...]int{
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 14818, 14818,
+ -1000, -1000, -1000, -1000, -1000, 1973, -1000, 202, 17, 213,
+ -1000, 42658, 456, 991, -1000, 456, -1000, -1000, -1000, 1968,
+ 41926, -1000, -454, -455, -460, -461, -1000, -1000, -1000, -462,
+ -463, -1000, -1000, -1000, 22162, 22162, 22162, 22162, -313, -1000,
+ 1482, 24358, 2393, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+ 22162, 301, 1226, 24358, 24358, 24358, 24358, 24358, 24358, 24358,
+ 25822, 25090, 24358, 24358, 24358, 24358, 24358, 24358, -1000, -1000,
+ 33874, 5565, 5565, 927, 927, 927, 927, -1000, -187, 1964,
+ 55102, -1000, -1000, -1000, 849, 22162, 22162, 927, -1000, 1338,
+ 1583, 19234, 22162, 22162, 22162, 22162, 1000, 1527, 55102, 22162,
+ -1000, 1500, -1000, -1000, -1000, -1000, 1235, -1000, -1000, 1102,
+ 2384, 2384, 2384, 2384, 22162, 22162, 22162, 22162, 22162, 22162,
+ 22162, 22162, 22162, 22162, 2384, 22162, 136, 136, 729, 22162,
+ 22162, 22162, 22162, 22162, 22162, 22162, 22162, 17770, 22162, 22162,
+ 24358, 22162, 22162, 22162, 1500, 22162, 22162, 22162, 22162, 22162,
+ 22162, 22162, 22162, 22162, 22162, 22162, 22162, 22162, 22162, 22162,
+ 22162, 22162, 22162, 22162, 22162, 22162, 22162, 22162, 22162, 22162,
+ 22162, 22162, 22162, 22162, 22162, 22162, 22162, 22162, 22162, 22162,
+ 22162, 22162, 22162, 22162, 22162, 22162, 22162, 22162, 22162, 22162,
+ 22162, 22162, 22162, 22162, 22162, 22162, 22162, 22162, 22162, 22162,
+ 22162, 22162, 22162, 22162, 22162, 22162, 22162, 22162, 22162, 22162,
+ 22162, 22162, 22162, 22162, 22162, 22162, 22162, 22162, 22162, 22162,
+ 22162, 22162, 22162, 22162, 1500, 22162, 1517, 22162, 22162, 22162,
+ 22162, 22162, 22162, 22162, 17032, 22162, 22162, 22162, 22162, 22162,
+ -1000, -1000, -1000, -1000, -1000, -1000, 22162, 22162, 22162, 22162,
+ 22162, 22162, 22162, 22162, 1500, 22162, 22162, 22162, 22162, 22162,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, 14561, 14561, -1000, -1000, -1000, -1000,
- -1000, 2058, -1000, 187, 13, 199, -1000, 42325, 501, 985,
- -1000, 501, -1000, -1000, -1000, 2050, 41595, -1000, -452, -456,
- -459, -460, -1000, -1000, -1000, -461, -462, -1000, -1000, -1000,
- 21885, 21885, 21885, 21885, -255, -1000, 1471, 24075, 2473, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, 21885, 216, 948, 24075,
- 24075, 24075, 24075, 24075, 24075, 24075, 25535, 24805, 24075, 24075,
- 24075, 24075, 24075, 24075, -1000, -1000, 33565, 5149, 5149, 902,
- 902, 902, 902, -1000, -164, 2044, 54735, -1000, -1000, -1000,
- 817, 21885, 21885, 902, -1000, 1221, 2197, 18965, 21885, 21885,
- 21885, 21885, 964, 1182, 54735, 21885, -1000, 1625, -1000, -1000,
- -1000, -1000, 1331, -1000, -1000, 1104, 2469, 2469, 2469, 2469,
- 21885, 21885, 21885, 21885, 21885, 21885, 21885, 21885, 21885, 21885,
- 2469, 21885, 173, 173, 910, 21885, 21885, 21885, 21885, 21885,
- 21885, 17505, 21885, 21885, 24075, 21885, 21885, 21885, 1625, 21885,
- 21885, 21885, 21885, 21885, 21885, 21885, 21885, 21885, 21885, 21885,
- 21885, 21885, 21885, 21885, 21885, 21885, 21885, 21885, 21885, 21885,
- 21885, 21885, 21885, 21885, 21885, 21885, 21885, 21885, 21885, 21885,
- 21885, 21885, 21885, 21885, 21885, 21885, 21885, 21885, 21885, 21885,
- 21885, 21885, 21885, 21885, 21885, 21885, 21885, 21885, 21885, 21885,
- 21885, 21885, 21885, 21885, 21885, 21885, 21885, 21885, 21885, 21885,
- 21885, 21885, 21885, 21885, 21885, 21885, 21885, 21885, 21885, 21885,
- 21885, 21885, 21885, 21885, 21885, 21885, 21885, 21885, 1625, 21885,
- 1656, 21885, 21885, 21885, 21885, 21885, 21885, 21885, 16769, 21885,
- 21885, 21885, 21885, 21885, -1000, -1000, -1000, -1000, -1000, -1000,
- 21885, 21885, 21885, 21885, 21885, 21885, 21885, 21885, 1625, 21885,
- 21885, 21885, 21885, 21885, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, 1917, 1563, 1616, 21885, -1000,
- 2036, -1000, -190, 30645, 21885, 1857, 2717, 2213, 54005, -1000,
- -1000, -1000, -1000, 2576, -1000, 2576, 1917, 2451, 2339, 21155,
- -1000, -1000, 2451, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, 1937, -1000, 55465, 2030, 2581, 54005, -1000, -355,
- -1000, -367, 2330, 1848, 351, -1000, 21885, 21885, 2027, -1000,
- 1597, 55465, -1000, -255, -1000, 40865, -1000, -1000, 13825, 55465,
- 372, 55465, -1000, 29915, 40135, 283, -1000, 5, 2013, -1000,
- 20, 11, 18235, 901, -1000, -1000, -1000, 362, 26265, 1970,
- 901, 108, -1000, -1000, -1000, 2138, -1000, 2138, 2138, 2138,
- 2138, 351, 351, 351, 351, -1000, -1000, -1000, -1000, -1000,
- 2162, 2157, -1000, 2138, 2138, 2138, 2138, -1000, -1000, -1000,
+ -1000, 1636, 1417, 1490, 22162, -1000, 1959, -1000, -190, 30946,
+ 22162, 1679, 2640, 2115, 54370, -1000, -1000, -1000, -1000, 2534,
+ -1000, 2534, 1636, 2747, 2266, 21430, -1000, -1000, 2747, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1718, -1000,
+ 55834, 1937, 2527, 54370, -1000, -356, -1000, -357, 2255, 1677,
+ 885, -1000, 22162, 22162, 1935, -1000, 1803, 55834, -1000, -313,
+ -1000, 41194, -1000, -1000, 14080, 55834, 383, 55834, -1000, 30214,
+ 40462, 313, -1000, -5, 1917, -1000, 7, 15, 18502, 924,
+ -1000, -1000, -1000, 1390, 26554, 1826, 924, 120, -1000, -1000,
+ -1000, 2037, -1000, 2037, 2037, 2037, 2037, 885, 885, 885,
+ 885, -1000, -1000, -1000, -1000, -1000, 2061, 2057, -1000, 2037,
+ 2037, 2037, 2037, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, 2151, 2151, 2151, 2150, 2150, 2142,
- 2142, 451, -1000, 21885, 517, 39405, 2558, 1337, 1773, 290,
- 474, 2211, 54005, 54005, 54005, 474, -1000, 1518, 1510, 1508,
- -1000, -527, 2026, -1000, -1000, 2654, -1000, -1000, 1065, 1141,
- 1119, 1090, 54005, 231, 356, -1000, 442, -1000, 39405, 54005,
- 1063, 851, 54005, -1000, 54005, -1000, -1000, -1000, -1000, -1000,
- 54005, -1000, -1000, 2020, -1000, 2049, 1180, 1103, 1162, 1094,
- 2020, -1000, -1000, -169, 2020, -1000, 2020, -1000, 2020, -1000,
- 2020, -1000, 2020, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, 977, 301, -375, 54005, 231, 486, -1000, 485,
- 33565, -1000, -1000, -1000, 33565, 33565, -1000, -1000, -1000, -1000,
- 1841, 1825, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+ 2047, 2047, 2047, 2044, 2044, 2038, 2038, 446, -1000, 22162,
+ 432, 39730, 2520, 1269, 2369, 280, 469, 2102, 54370, 54370,
+ 54370, 469, -1000, 1377, 1375, 1354, -1000, -525, 1932, -1000,
+ -1000, 2595, -1000, -1000, 909, 1104, 1093, 1076, 54370, 255,
+ 359, -1000, 438, -1000, 39730, 54370, 1069, 827, 54370, -1000,
+ 54370, -1000, -1000, -1000, -1000, -1000, 54370, -1000, -1000, 1931,
+ -1000, 1876, 1142, 1090, 1133, 1088, 1931, -1000, -1000, -189,
+ 1931, -1000, 1931, -1000, 1931, -1000, 1931, -1000, 1931, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1024, 130,
+ -338, 54370, 255, 488, -1000, 486, 33874, -1000, -1000, -1000,
+ 33874, 33874, -1000, -1000, -1000, -1000, 1638, 1634, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -509, 55465, -1000, 258, 983, 319, 313, 331, 55465,
- 401, 2465, 2463, 2452, 2450, 2447, 2439, 349, 318, 55465,
- 55465, 472, 2266, 55465, 2537, 55465, -1000, -1000, -1000, -1000,
- -1000, 1811, 1806, -1000, 1182, 55465, -1000, -1000, 1113, 1113,
- -1000, -1000, 55465, 1113, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, 1113, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 55465, -1000,
- -1000, -1000, -1000, -26, 181, -1000, -1000, 54005, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, -110, -1000, 718,
- 18, 383, -1000, -1000, -1000, -1000, -1000, 2588, -1000, 1182,
- 1050, 1034, -1000, 2081, -1000, -1000, 1321, -1000, -1000, -1000,
- -1000, -1000, 2081, 2081, 2081, -1000, -1000, -1000, -1000, -1000,
- 216, 24075, 24075, 24075, 1469, 797, 1558, 1283, 1219, 1228,
- 1228, 1013, 24075, 1013, 24075, 912, 912, 912, 912, 912,
- -1000, -1000, -1000, -1000, -1000, -1000, 1800, -1000, 1786, -1000,
- 2081, 54735, 1903, 16769, 2591, 1340, 1625, 921, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -512, 55834, -1000,
+ 267, 989, 348, 385, 345, 55834, 412, 2388, 2383, 2381,
+ 2378, 2372, 2371, 286, 331, 55834, 55834, 463, 2214, 55834,
+ 2501, 55834, -1000, -1000, -1000, -1000, -1000, 1631, 1623, -1000,
+ 1527, 55834, -1000, -1000, 1113, 1113, -1000, -1000, 55834, 1113,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1113, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 3856, 1625,
- 1967, 1625, 2021, 3538, 1024, -1000, 21885, 1625, 3502, -1000,
- -1000, 1625, 1625, 21885, -1000, -1000, 21885, 21885, 21885, 21885,
- 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773,
- 21885, 1773, 2018, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, 55834, -1000, -1000, -1000, -1000, -49,
+ 195, -1000, -1000, 54370, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, -1000, -113, -1000, 303, 3, 425, -1000, -1000,
+ -1000, -1000, -1000, 2511, -1000, 1527, 1020, 1025, -1000, 2000,
+ -1000, -1000, 1299, -1000, -1000, -1000, -1000, -1000, 2000, 2000,
+ 2000, -1000, -1000, -1000, -1000, -1000, 301, 24358, 24358, 24358,
+ 1380, 793, 1392, 1327, 1228, 1285, 1285, 1185, 24358, 1185,
+ 24358, 931, 931, 931, 931, 931, -1000, -1000, -1000, -1000,
+ -1000, -1000, 1605, -1000, 1584, -1000, 2000, 55102, 1867, 17032,
+ 1939, 2054, 1500, 940, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, 2017, 2716, 2175, 1773, 1773, 1773, 1773, 1773, 21885,
- 1461, -1000, -1000, -1000, 1628, 3490, 1366, 3473, 1773, 1773,
- -1000, 1773, 3458, 3453, 1625, 2670, 2659, 1773, 1773, 1773,
- 1773, 1773, 2601, 2572, 1773, 1773, 2543, 1773, 3448, 1773,
- 2539, 2532, 2492, 2467, 2462, 2449, 2435, 2425, 2377, 2352,
- 2333, 2327, 2314, 2301, 2287, 2269, 2257, 2253, 1773, 1773,
- 1773, 3443, 1773, 3432, 1773, 3427, 1773, 1773, 3422, 2243,
- 2206, 1625, 2016, -1000, 3415, 1773, 3399, 3386, 3382, 2167,
- 3356, 3352, 3348, 1773, 1773, 1773, 2163, 3341, 3328, 3323,
- 3313, 3308, 3236, 3224, 3043, 3030, 1773, 1616, 1616, 1616,
- 1616, 1616, 3023, -269, 1773, 1625, -1000, -1000, -1000, -1000,
- -1000, 3019, 2159, 3009, 3001, 2994, 2981, 1625, 2081, 814,
- -1000, -1000, 1616, 1625, 1625, 1616, 1616, 2976, 2932, 2922,
- 2918, 2912, 2908, 1773, 1773, -1000, 1773, 2895, 2846, 2139,
- 2123, 1625, -1000, 1616, 55465, -1000, -441, -1000, 9, 960,
- 2081, -1000, 37945, 1625, -1000, 4388, -1000, 1287, -1000, -1000,
- -1000, -1000, -1000, 35025, 2023, -1000, -1000, -1000, -1000, 2081,
- 1891, -1000, -1000, -1000, -1000, 351, 74, 34295, 878, 878,
- 126, 1182, 1182, 21885, -1000, -1000, -1000, -1000, -1000, -1000,
- 813, 2679, 394, 2081, -1000, 2066, 2723, -1000, -1000, -1000,
- 2579, 27725, -1000, -1000, 2081, 2081, 55465, 1989, 1922, -1000,
- 810, -1000, 1476, 2013, 5, 1, -1000, -1000, -1000, -1000,
- 1182, -1000, 1438, 374, 341, -1000, 463, -1000, -1000, -1000,
- -1000, 2420, 94, -1000, -1000, -1000, 373, 351, -1000, -1000,
- -1000, -1000, -1000, -1000, 1736, 1736, -1000, -1000, -1000, -1000,
- -1000, 1336, -1000, -1000, -1000, -1000, 1334, -1000, -1000, 1328,
- -1000, -1000, 2712, 2195, 517, -1000, -1000, 952, 1734, -1000,
- -1000, 2438, 952, 952, 54005, -1000, -1000, 1823, 2558, 258,
- 55465, 1003, 2263, -1000, 2211, 2211, 2211, 55465, -1000, -1000,
- -1000, -1000, -1000, -1000, -513, 172, 378, -1000, -1000, -1000,
- 6167, 54005, 1889, -1000, 253, -1000, 1797, -1000, 54005, -1000,
- 1865, 2149, 54005, 54005, -1000, -1000, -1000, 54005, 2081, -1000,
- -1000, -1000, -1000, 504, 2511, 336, -1000, -1000, -311, -1000,
- -1000, 231, 253, 54735, 54005, 901, -1000, -1000, -1000, -1000,
- -1000, -514, 1856, 494, 263, 516, 55465, 55465, 55465, 55465,
- 55465, 55465, 782, -1000, -1000, 31, -1000, -1000, 218, -1000,
- -1000, -1000, -1000, -1000, 218, -1000, -1000, -1000, -1000, -1000,
- 312, 484, -1000, 55465, 55465, 917, -1000, -1000, -1000, -1000,
- -1000, 1087, -1000, -1000, 1087, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, 2499, 55465, 17, -479, -1000,
- -476, 21885, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1329,
- 471, 1558, 24075, 24075, 2197, 2197, 24075, -1000, -1000, -1000,
- 819, 819, 33565, -1000, 24075, 21885, -1000, -1000, 21885, 21885,
- 21885, 949, -1000, 21885, 1137, -1000, 21885, -1000, -269, 1616,
- 1773, 1773, 1773, 1773, -269, -269, -269, -269, -269, -269,
- -269, -269, -269, -269, 2063, -1000, 21885, 21885, 21885, 1625,
- 345, -1000, -1000, -1000, -1000, -1000, 2710, -1000, 21885, -1000,
- 33565, 21885, 21885, 21885, -1000, -1000, -1000, 21885, 21885, -1000,
- -1000, 21885, -1000, 21885, -1000, -1000, -1000, -1000, -1000, -1000,
- 21885, -1000, 21885, -1000, -1000, -1000, 21885, -1000, 21885, -1000,
- -1000, 21885, -1000, 21885, -1000, 21885, -1000, 21885, -1000, 21885,
- -1000, 21885, -1000, 21885, -1000, 21885, -1000, 21885, -1000, 21885,
- -1000, 21885, -1000, 21885, -1000, 21885, -1000, 21885, -1000, 21885,
- -1000, 21885, -1000, 21885, -1000, 21885, -1000, -1000, -1000, 21885,
- -1000, 21885, -1000, 21885, -1000, -1000, 21885, -1000, 21885, -1000,
- 21885, -1000, 21885, 21885, -1000, 21885, 21885, 21885, -1000, 21885,
- 21885, 21885, 21885, -1000, -1000, -1000, -1000, 21885, 21885, 21885,
- 21885, 21885, 21885, 21885, 21885, 21885, 21885, -1000, -1000, -1000,
- -1000, -1000, -1000, 21885, -1000, 39405, 10, -269, 1656, 10,
- 1656, 23345, 823, 798, 22615, -1000, 21885, 16033, -1000, -1000,
- -1000, -1000, -1000, 21885, 21885, 21885, 21885, 21885, 21885, -1000,
- -1000, -1000, 21885, 21885, -1000, 21885, -1000, 21885, -1000, -1000,
- -1000, -1000, -1000, 960, -1000, 883, 874, 851, 54005, -1000,
- -1000, -1000, -1000, 2005, -1000, 2616, -1000, 2361, 2359, 2704,
- 2679, 21155, -1000, 29915, -1000, -1000, 54005, -432, -1000, 2391,
- 2399, 878, 878, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- 13089, 2576, 21885, 2261, 54735, 249, -1000, 29185, 54005, 54735,
- 29915, 29915, 29915, 29915, 29915, -1000, 2307, 2288, -1000, 2342,
- 2311, 2338, 55465, -1000, 1917, 1838, -1000, 21885, 32105, 1975,
- 29915, -1000, -1000, 29915, 55465, 12353, -1000, -1000, 16, 4,
- -1000, -1000, -1000, -1000, 362, -1000, -1000, 1002, 2575, 2417,
- -1000, -1000, -1000, -1000, -1000, 1758, -1000, 1749, 1995, 1745,
- 1742, 301, -1000, 2190, 2497, 952, 952, -1000, 1327, -1000,
- 1221, 1733, 1731, -1000, -1000, -1000, 492, -1000, 2536, 55465,
- 2252, 2251, 2249, -1000, -524, 1314, 2148, 2172, 21885, 2145,
- 2653, 1980, 54005, -1000, -1000, 54735, -1000, 282, -1000, 517,
- 54005, -1000, -1000, -1000, 356, 55465, -1000, 8424, -1000, -1000,
- -1000, 253, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 55465,
- 270, -1000, 2143, 1425, -1000, -1000, 2196, -1000, -1000, -1000,
- -1000, -1000, 210, 201, 1730, 214, 1716, 214, -1000, 55465,
- 914, 2195, 55465, -1000, -1000, -1000, 1113, 1113, -1000, -1000,
- 2475, -1000, 1221, 1773, 24075, 24075, -1000, 902, -1000, -1000,
- 371, -254, 2138, 2138, -1000, 2138, 2142, -1000, 2138, 171,
- 2138, 165, 2138, -1000, -1000, 1625, 1625, -1000, 1616, 2119,
- 1200, 2841, -1000, 1182, 21885, 2831, -1000, -1000, -269, -269,
- -269, -269, -269, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -60, 2787, 2750, 1773, -1000, 2132, 2128,
- 21885, 1773, 1625, 2098, 1773, 1773, 1773, 1773, 1773, 1773,
- 1773, 1773, 1773, 1773, 1773, 1773, 2090, 2061, 2056, 2047,
- 2033, 2028, 2014, 1999, 1990, 1986, 1969, 1956, 1951, 1941,
- 1905, 1879, 1773, 1773, 1860, 1773, 1854, 1822, -1000, 1182,
- 1616, 2746, 1616, 1773, 1773, 2721, 306, 1773, 1727, 1727,
- 1727, 1727, 1727, 1616, 1616, 1616, 1616, 1773, 54005, -1000,
- -269, -1000, -1000, -374, -376, -1000, 1625, -269, 1993, 24075,
- 1773, 24075, 24075, 24075, 1773, 1625, -1000, 1818, 1814, 2707,
- 1796, 1773, 2681, 1773, 1773, 1773, 1789, -1000, 2586, 2081,
- 2586, 2081, 2586, 1714, 1287, 55465, -1000, -1000, -1000, -1000,
- 2679, 2677, -1000, 1984, -1000, 74, 629, -1000, 2376, 2399,
- -1000, 2651, 2383, 2650, -1000, -1000, -1000, -1000, -1000, 1182,
- -1000, 2518, 1966, -1000, 982, 1820, -1000, -1000, 20425, 1720,
- 2353, 808, 1714, 2037, 2723, 2208, 2240, 3626, -1000, -1000,
- -1000, -1000, 2281, -1000, 2221, -1000, -1000, 2102, -1000, 2638,
- 372, 29915, 1998, 1998, -1000, 800, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, 1160, 8424, 2727, -1000, 1710, -1000, 1372,
- 191, 1309, -1000, -1000, 952, 952, -1000, 1057, 1056, -1000,
- 55465, 2127, -1000, 351, 1697, 351, 1280, -1000, -1000, 1276,
- -1000, -1000, -1000, -1000, 2099, 2242, -1000, -1000, -1000, -1000,
- 55465, -1000, -1000, 55465, 55465, 55465, 2122, 2649, -1000, 21885,
- 2116, 954, 2596, 54005, 54005, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, 447, 952, -492, 316,
- 302, 952, 952, 952, -526, -1000, -1000, 1709, 1705, -1000,
- -202, -1000, 21885, -1000, -1000, -1000, -1000, -1000, 1201, 1201,
- 1695, 1693, 1692, -1000, 2102, -1000, -1000, -1000, 1759, -1000,
- -1000, -179, 54005, 54005, 54005, 54005, -1000, -1000, -1000, 1277,
+ -1000, -1000, -1000, -1000, 4265, 1500, 1857, 1500, 2049, 4258,
+ 1001, -1000, 22162, 1500, 4250, -1000, -1000, 1500, 1500, 22162,
+ -1000, -1000, 22162, 22162, 22162, 22162, 2369, 2369, 2369, 2369,
+ 2369, 2369, 2369, 2369, 2369, 2369, 22162, 2369, 1923, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, 902, 1625, 387, -183, 1625, -1000, -1000, 351,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1921, 2638, 1820,
+ 2369, 2369, 2369, 2369, 4245, 2369, 2369, 22162, 1430, -1000,
+ -1000, -1000, 1499, 4240, 1303, 4225, 2369, 2369, -1000, 2369,
+ 4220, 4212, 1500, 3009, 3000, 2369, 2369, 2369, 2369, 2369,
+ 2938, 2934, 2369, 2369, 2930, 2369, 4206, 2369, 2919, 2903,
+ 2768, 2754, 2709, 2691, 2676, 2664, 2650, 2646, 2632, 2605,
+ 2599, 2569, 2536, 2529, 2522, 2509, 2369, 2369, 2369, 4202,
+ 2369, 4197, 2369, 4191, 2369, 2369, 4180, 2494, 2469, 1500,
+ 1920, -1000, 4174, 2369, 3948, 3942, 3917, 2463, 3912, 3892,
+ 3888, 2369, 2369, 2369, 2446, 3883, 3879, 3875, 3572, 3561,
+ 3516, 3512, 3497, 3493, 2369, 1490, 1490, 1490, 1490, 1490,
+ 3479, -320, 2369, 1500, -1000, -1000, -1000, -1000, -1000, 3474,
+ 2428, 3453, 3445, 3437, 3432, 1500, 2000, 847, -1000, -1000,
+ 1490, 1500, 1500, 1490, 1490, 3404, 3400, 3394, 3389, 3385,
+ 3362, 2369, 2369, -1000, 2369, 3341, 3319, 2418, 2397, 1500,
+ -1000, 1490, 55834, -1000, -445, -1000, -11, 950, 2000, -1000,
+ 38266, 1500, -1000, 2048, -1000, 1162, -1000, -1000, -1000, -1000,
+ -1000, 35338, 1823, -1000, -1000, -1000, -1000, 2000, 1805, -1000,
+ -1000, -1000, -1000, 885, 67, 34606, 916, 916, 165, 1527,
+ 1527, 22162, -1000, -1000, -1000, -1000, -1000, -1000, 844, 2622,
+ 382, 2000, -1000, 1976, 2114, -1000, -1000, -1000, 2526, 28018,
+ -1000, -1000, 2000, 2000, 55834, 1863, 1843, -1000, 843, -1000,
+ 1345, 1917, -5, 2, -1000, -1000, -1000, -1000, 1527, -1000,
+ 1350, 386, 369, -1000, 454, -1000, -1000, -1000, -1000, 2360,
+ 79, -1000, -1000, -1000, 340, 885, -1000, -1000, -1000, -1000,
+ -1000, -1000, 1579, 1579, -1000, -1000, -1000, -1000, -1000, 1260,
+ -1000, -1000, -1000, -1000, 1253, -1000, -1000, 1245, -1000, -1000,
+ 3024, 2252, 432, -1000, -1000, 963, 1576, -1000, -1000, 2364,
+ 963, 963, 54370, -1000, -1000, 1806, 2520, 267, 55834, 1009,
+ 2211, -1000, 2102, 2102, 2102, 55834, -1000, -1000, -1000, -1000,
+ -1000, -1000, -514, 191, 364, -1000, -1000, -1000, 6185, 54370,
+ 1760, -1000, 249, -1000, 1697, -1000, 54370, -1000, 1758, 2043,
+ 54370, 54370, -1000, -1000, -1000, 54370, 2000, -1000, -1000, -1000,
+ -1000, 789, 2419, 358, -1000, -1000, -344, -1000, -1000, 255,
+ 249, 55102, 54370, 924, -1000, -1000, -1000, -1000, -1000, -515,
+ 1743, 507, 264, 487, 55834, 55834, 55834, 55834, 55834, 55834,
+ 820, -1000, -1000, 31, -1000, -1000, 235, -1000, -1000, -1000,
+ -1000, -1000, 235, -1000, -1000, -1000, -1000, -1000, 323, 485,
+ -1000, 55834, 55834, 941, -1000, -1000, -1000, -1000, -1000, 1116,
+ -1000, -1000, 1116, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, -1000, 2416, 55834, 1, -482, -1000, -476, 22162,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1209, 782, 1392,
+ 24358, 24358, 1583, 1583, 24358, -1000, -1000, -1000, 357, 357,
+ 33874, -1000, 24358, 22162, -1000, -1000, 22162, 22162, 22162, 996,
+ -1000, 22162, 1340, -1000, 22162, -1000, -320, 1490, 2369, 2369,
+ 2369, 2369, -320, -320, -320, -320, -320, -320, -320, -320,
+ -320, -320, 1930, -1000, 22162, 22162, 22162, 1500, 338, -1000,
+ -1000, -1000, -320, 22162, -1000, -1000, 2636, -1000, 22162, -1000,
+ 33874, 22162, 22162, 22162, -1000, -1000, -1000, 22162, 22162, -1000,
+ -1000, 22162, -1000, 22162, -1000, -1000, -1000, -1000, -1000, -1000,
+ 22162, -1000, 22162, -1000, -1000, -1000, 22162, -1000, 22162, -1000,
+ -1000, 22162, -1000, 22162, -1000, 22162, -1000, 22162, -1000, 22162,
+ -1000, 22162, -1000, 22162, -1000, 22162, -1000, 22162, -1000, 22162,
+ -1000, 22162, -1000, 22162, -1000, 22162, -1000, 22162, -1000, 22162,
+ -1000, 22162, -1000, 22162, -1000, 22162, -1000, -1000, -1000, 22162,
+ -1000, 22162, -1000, 22162, -1000, -1000, 22162, -1000, 22162, -1000,
+ 22162, -1000, 22162, 22162, -1000, 22162, 22162, 22162, -1000, 22162,
+ 22162, 22162, 22162, -1000, -1000, -1000, -1000, 22162, 22162, 22162,
+ 22162, 22162, 22162, 22162, 22162, 22162, 22162, -1000, -1000, -1000,
+ -1000, -1000, -1000, 22162, -1000, 39730, 11, -320, 1517, 11,
+ 1517, 23626, 875, 828, 22894, -1000, 22162, 16294, -1000, -1000,
+ -1000, -1000, -1000, 22162, 22162, 22162, 22162, 22162, 22162, -1000,
+ -1000, -1000, 22162, 22162, -1000, 22162, -1000, 22162, -1000, -1000,
+ -1000, -1000, -1000, 950, -1000, 873, 846, 827, 54370, -1000,
+ -1000, -1000, -1000, 1911, -1000, 2541, -1000, 2279, 2278, 2631,
+ 2622, 21430, -1000, 30214, -1000, -1000, 54370, -435, -1000, 2308,
+ 2292, 916, 916, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+ 13342, 2534, 22162, 2210, 55102, 199, -1000, 29482, 54370, 55102,
+ 30214, 30214, 30214, 30214, 30214, -1000, 2242, 2236, -1000, 2232,
+ 2226, 2238, 55834, -1000, 1636, 1737, -1000, 22162, 32410, 1864,
+ 30214, -1000, -1000, 30214, 55834, 12604, -1000, -1000, -3, 6,
+ -1000, -1000, -1000, -1000, 1390, -1000, -1000, 1072, 2524, 2350,
+ -1000, -1000, -1000, -1000, -1000, 1725, -1000, 1709, 1907, 1696,
+ 1689, 130, -1000, 2090, 2414, 963, 963, -1000, 1240, -1000,
+ 1338, 1564, 1562, -1000, -1000, -1000, 505, -1000, 2500, 55834,
+ 2209, 2152, 2144, -1000, -524, 1232, 2042, 2059, 22162, 2041,
+ 2582, 1891, 54370, -1000, -1000, 55102, -1000, 281, -1000, 432,
+ 54370, -1000, -1000, -1000, 359, 55834, -1000, 8587, -1000, -1000,
+ -1000, 249, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 55834,
+ 274, -1000, 2040, 1332, -1000, -1000, 2013, -1000, -1000, -1000,
+ -1000, -1000, 247, 220, 1558, 229, 1547, 229, -1000, 55834,
+ 907, 2252, 55834, -1000, -1000, -1000, 1113, 1113, -1000, -1000,
+ 2410, -1000, 1338, 2369, 24358, 24358, -1000, 927, -1000, -1000,
+ 320, -292, 2037, 2037, -1000, 2037, 2038, -1000, 2037, 173,
+ 2037, 146, 2037, -1000, -1000, 1500, 1500, -1000, 1490, 2354,
+ 1699, 3314, -1000, 1527, 22162, 3250, -1000, -1000, -320, -320,
+ -320, -320, -320, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, -1000, -71, 3034, 2994, 2369, -1000, 2034, 2033,
+ -1000, 2369, 22162, 2369, 1500, 2347, 2369, 2369, 2369, 2369,
+ 2369, 2369, 2369, 2369, 2369, 2369, 2369, 2369, 2338, 2333,
+ 2327, 2321, 2314, 2306, 2294, 2213, 2207, 2186, 2139, 2074,
+ 2069, 2063, 2021, 2004, 2369, 2369, 1990, 2369, 1914, 1855,
+ -1000, 1527, 1490, 2990, 1490, 2369, 2369, 2981, 256, 2369,
+ 1686, 1686, 1686, 1686, 1686, 1490, 1490, 1490, 1490, 2369,
+ 54370, -1000, -320, -1000, -1000, -372, -376, -1000, 1500, -320,
+ 1900, 24358, 2369, 24358, 24358, 24358, 2369, 1500, -1000, 1830,
+ 1824, 2659, 1763, 2369, 2502, 2369, 2369, 2369, 1746, -1000,
+ 2506, 2000, 2506, 2000, 2506, 1655, 1162, 55834, -1000, -1000,
+ -1000, -1000, 2622, 2614, -1000, 1899, -1000, 67, 605, -1000,
+ 2312, 2292, -1000, 2577, 2301, 2576, -1000, -1000, -1000, -1000,
+ -1000, 1527, -1000, 2460, 1852, -1000, 973, 1904, -1000, -1000,
+ 20698, 1660, 2270, 838, 1655, 1886, 2114, 2113, 2134, 2307,
+ -1000, -1000, -1000, -1000, 2233, -1000, 2149, -1000, -1000, 2007,
+ -1000, 2310, 383, 30214, 1819, 1819, -1000, 836, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, 1119, 8587, 2660, -1000, 1545,
+ -1000, 1337, 196, 1231, -1000, -1000, 963, 963, -1000, 1068,
+ 1031, -1000, 55834, 2032, -1000, 885, 1543, 885, 1223, -1000,
+ -1000, 1221, -1000, -1000, -1000, -1000, 1988, 2197, -1000, -1000,
+ -1000, -1000, 55834, -1000, -1000, 55834, 55834, 55834, 2031, 2566,
+ -1000, 22162, 2025, 970, 2907, 54370, 54370, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 787, 963,
+ -494, 330, 322, 963, 963, 963, -536, -1000, -1000, 1652,
+ 1643, -1000, -226, -1000, 22162, -1000, -1000, -1000, -1000, -1000,
+ 1249, 1249, 1540, 1536, 1533, -1000, 2007, -1000, -1000, -1000,
+ 1661, -1000, -1000, -211, 54370, 54370, 54370, 54370, -1000, -1000,
+ -1000, 1149, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, 927, 1500, 376, -214, 1500, -1000,
+ -1000, 885, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, 22162, -1000, 22162, -1000, 22162, 1527, 22162, -1000,
+ -1000, -1000, -1000, -1000, 2534, 1531, 22162, 22162, -1000, 1206,
+ 1196, -320, 2369, -1000, -1000, -1000, 22162, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- 21885, -1000, 21885, -1000, 21885, 1182, 21885, -1000, -1000, -1000,
- -1000, -1000, 2576, 1689, 21885, 21885, -1000, 1256, 1238, 1773,
- -1000, -1000, -1000, 21885, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, 21885, -1000, 21885,
- -1000, 21885, -1000, 21885, -1000, 21885, -1000, 21885, -1000, 21885,
- -1000, 21885, -1000, 21885, -1000, 21885, -1000, 21885, -1000, 21885,
- -1000, 21885, -1000, 21885, -1000, 21885, -1000, 21885, -1000, -1000,
- 21885, -1000, -1000, -1000, 21885, -1000, 21885, -1000, 21885, -1000,
- -1000, -1000, 21885, 227, 819, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, 1625, 368, -1000, -1000,
- -1000, 2693, -1000, 1625, 21885, 2197, -1000, 2197, 2197, 2197,
- -1000, -1000, -1000, 21885, -1000, 21885, 21885, -1000, 21885, -1000,
- 21885, -1000, -1000, -1000, -1000, 21885, 2081, 2437, 38675, 2081,
- 38675, 2081, 32105, -1000, -1000, 2677, 2618, 2646, 2372, 2374,
- 2374, 2376, -1000, 2645, 2621, -1000, 1688, 2606, 1630, 1019,
- -1000, 54735, 21885, -1000, 249, 37945, -1000, 402, 54005, 249,
- 54005, -1000, 2602, -1000, -1000, 21885, 2107, -1000, 21885, -1000,
- -1000, -1000, -1000, 5149, 2679, 1998, -1000, -1000, 918, -1000,
- 21885, -1000, 10275, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, 1584, 1582, -1000, -1000, 2105, 21885, -1000, -1000, -1000,
- 1746, 1728, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- 2102, -1000, -1000, -1000, -1000, 356, -520, 2293, 54005, 1237,
- -1000, 1680, 1980, 330, 249, 1540, 952, 952, 952, 1232,
- 1220, 37945, 1676, -1000, 54005, 369, -1000, 356, -1000, -213,
- -214, 1773, -1000, -1000, 2574, -1000, -1000, 16033, -1000, -1000,
- 2094, 2198, -1000, -1000, -1000, -1000, 2322, -167, -196, -1000,
- -1000, 1773, 1773, 1773, 1293, 1625, -1000, 1773, 1773, 1655,
- 1648, -1000, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773,
- 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773,
- 1773, 1773, 1616, 1781, -1000, 227, 1625, 2238, -1000, -1000,
- 5149, -1000, -1000, 2602, 2604, 10, -1000, -1000, 246, 10,
- 1182, 1007, 1625, 1625, 1007, 1756, 1773, 1751, 1739, 1773,
- 1773, 32835, -1000, 2595, 2594, 1657, -1000, -1000, 38675, 1657,
- 38675, 960, 2618, -294, 21885, 21885, 2365, 1254, -1000, -1000,
- -1000, -1000, 1536, 1529, -1000, 1527, -1000, 2725, -1000, 1182,
- -1000, 2081, 249, -1000, 532, 1820, -1000, 2576, 1182, 54005,
- 1182, 83, 2602, -1000, 1773, -1000, 2081, 2081, 2081, 2081,
- 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081,
- 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081,
- 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081,
- 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081,
- 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081,
- 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081,
- 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081,
- 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081,
- 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081,
- 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081,
- 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081,
- 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081,
- 2081, 2081, 2081, 2081, 2081, -1000, -1000, 54005, 2210, -1000,
- -1000, 2563, 1665, 166, -1000, 1629, 1980, -1000, -1000, 209,
- -1000, 21885, -1000, 37945, 1513, 1506, -1000, -1000, -1000, -1000,
- -526, -1000, -1000, -1000, -1000, -1000, -1000, 408, 1976, -1000,
- 944, 54005, 55465, -1000, 2267, -1000, -1000, -1000, -1000, 21885,
+ 22162, -1000, 22162, -1000, 22162, -1000, 22162, -1000, 22162, -1000,
+ 22162, -1000, 22162, -1000, 22162, -1000, 22162, -1000, 22162, -1000,
+ 22162, -1000, 22162, -1000, 22162, -1000, 22162, -1000, 22162, -1000,
+ 22162, -1000, -1000, 22162, -1000, -1000, -1000, 22162, -1000, 22162,
+ -1000, 22162, -1000, -1000, -1000, 22162, 327, 357, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1500,
+ 379, -1000, -1000, -1000, 2625, -1000, 1500, 22162, 1583, -1000,
+ 1583, 1583, 1583, -1000, -1000, -1000, 22162, -1000, 22162, 22162,
+ -1000, 22162, -1000, 22162, -1000, -1000, -1000, -1000, 22162, 2000,
+ 2300, 38998, 2000, 38998, 2000, 32410, -1000, -1000, 2614, 2617,
+ 2560, 2288, 2293, 2293, 2312, -1000, 2559, 2558, -1000, 1524,
+ 2557, 1518, 1029, -1000, 55102, 22162, -1000, 199, 38266, -1000,
+ 371, 54370, 199, 54370, -1000, 2542, -1000, -1000, 22162, 2024,
+ -1000, 22162, -1000, -1000, -1000, -1000, 5565, 2622, 1819, -1000,
+ -1000, 937, -1000, 22162, -1000, 10926, -1000, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, 1492, 1481, -1000, -1000, 2009, 22162,
+ -1000, -1000, -1000, 1647, 1644, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, -1000, 2007, -1000, -1000, -1000, -1000, 359, -522,
+ 2628, 54370, 1172, -1000, 1621, 1891, 333, 199, 1469, 963,
+ 963, 963, 1163, 1161, 38266, 1613, -1000, 54370, 421, -1000,
+ 359, -1000, -236, -240, 2369, -1000, -1000, 2518, -1000, -1000,
+ 16294, -1000, -1000, 2003, 2097, -1000, -1000, -1000, -1000, 2253,
+ -185, -218, -1000, -1000, 2369, 2369, 2369, 2058, 1500, -1000,
+ 2369, 2369, 1637, 1628, -1000, -1000, 2369, 2369, 2369, 2369,
+ 2369, 2369, 2369, 2369, 2369, 2369, 2369, 2369, 2369, 2369,
+ 2369, 2369, 2369, 2369, 2369, 2369, 1490, 1729, -1000, 327,
+ 1500, 2133, -1000, -1000, 5565, -1000, -1000, 2542, 2552, 11,
+ -1000, -1000, 265, 11, 1527, 1033, 1500, 1500, 1033, 1723,
+ 2369, 1694, 1676, 2369, 2369, 33142, -1000, 2549, 2538, 1568,
+ -1000, -1000, 38998, 1568, 38998, 950, 2617, -343, 22162, 22162,
+ 2284, 1175, -1000, -1000, -1000, -1000, 1435, 1433, -1000, 1431,
+ -1000, 2655, -1000, 1527, -1000, 2000, 199, -1000, 835, 1904,
+ -1000, 2534, 1527, 54370, 1527, 73, 2542, -1000, 2369, -1000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, -1000, -1000, 54370, 2580, -1000, -1000, 2514, 1609, 187,
+ -1000, 1530, 1891, -1000, -1000, 194, -1000, 22162, -1000, 38266,
+ 1403, 1400, -1000, -1000, -1000, -1000, -536, -1000, -1000, -1000,
+ -1000, -1000, -1000, 389, 1889, -1000, 961, 54370, 55834, -1000,
+ 2248, -1000, -1000, -1000, -1000, 22162, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, 21885, -1000, 1625,
- 2236, -1000, -363, -1000, -493, 21885, -269, -1000, -1000, -269,
- -1000, -1000, -1000, -1000, -1000, 21885, -1000, -1000, 21885, -1000,
- 21885, -1000, -1000, 1657, -1000, -1000, -1000, 37215, -1000, 1657,
- -1000, 1657, -1000, -294, -1000, 1974, -1000, 54005, 1182, 315,
- -1000, 1196, -1000, -1000, -1000, -1000, -1000, 54735, 54005, 1820,
- 54005, -1000, -1000, 1654, 1625, 2081, 2576, -1000, 1624, -1000,
- 408, -1000, 2093, 2172, -1000, -1000, -1000, 19695, -1000, -1000,
- -1000, -1000, -1000, 272, -175, 16033, 11617, 1619, -1000, -170,
- 1773, 1616, -1000, -469, -1000, -1000, -1000, -1000, 297, -1000,
- -1000, 1967, -1000, -1000, 1723, 1647, 1633, -1000, -1000, -1000,
- -1000, -1000, -1000, -294, -1000, -1000, 2544, -1000, -235, -1000,
- -1000, 1711, 1580, -1000, -1000, -1000, 32105, 53275, -1000, -161,
- 353, -175, 21885, 2086, 1625, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -43, -1000, -1000, 518, -1000, -1000, -1000,
- 2196, -194, -1000, -1000, -1000, 300, -483, -271, -272, 24075,
- -1000, 21885, -1000, 21885, -1000, 21885, -1000, 54005, 2081, -1000,
- -1000, -1000, 1578, -1000, 3903, -386, 2235, -1000, -139, -1000,
- -1000, -1000, 1153, 1499, -1000, -1000, -1000, -1000, -1000, -1000,
- 2052, 54005, -1000, 449, -1000, -1000, 15297, -179, -198, 1008,
- -1000, -1000, -1000, -1000, -1000, 2197, 1614, 1606, 1773, -1000,
- 54005, -1000, 53275, -381, 901, 5149, -1000, 2232, 2220, 2683,
- -1000, -1000, -1000, -1000, -1000, -1000, -535, 1489, 286, -1000,
- -1000, -1000, 300, -283, -1000, 21885, -1000, 21885, -1000, 1625,
- -1000, -1000, 2533, 83, -1000, 2714, -1000, 2708, 1069, 1069,
- -1000, 1215, -535, -1000, -1000, -1000, -1000, 1773, 1773, -1000,
- -388, -1000, -1000, -1000, -1000, -1000, 441, 1265, -1000, -1000,
- -1000, -1000, -1000, 5149, -1000, -1000, -1000, 230, 230, -1000,
- -1000,
+ -1000, -1000, -1000, 22162, -1000, 1500, 2125, -1000, -352, -1000,
+ -495, 22162, -320, -1000, -1000, -320, -1000, -1000, -1000, -1000,
+ -1000, 22162, -1000, -1000, 22162, -1000, 22162, -1000, -1000, 1568,
+ -1000, -1000, -1000, 37534, -1000, 1568, -1000, 1568, -1000, -343,
+ -1000, 1870, -1000, 54370, 1527, 390, -1000, 1158, -1000, -1000,
+ -1000, -1000, -1000, 55102, 54370, 1904, 54370, -1000, -1000, 1556,
+ 1500, 2000, 2534, -1000, 1529, -1000, 389, -1000, 2002, 2059,
+ -1000, -1000, -1000, 19966, -1000, -1000, -1000, -1000, -1000, 233,
+ -207, 16294, 11866, 1503, -1000, -191, 2369, 1490, -1000, -468,
+ -1000, -1000, -1000, -1000, 283, -1000, -1000, 1857, -1000, -1000,
+ 1650, 1646, 1627, -1000, -1000, -1000, -1000, -1000, -1000, -343,
+ -1000, -1000, 2495, -1000, -255, -1000, -1000, 1832, 1441, -1000,
+ -1000, -1000, 32410, 53638, -1000, -179, 417, -207, 22162, 2001,
+ 1500, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -39,
+ -1000, -1000, 833, -1000, -1000, -1000, 2013, -215, -1000, -1000,
+ -1000, 337, -486, -286, -360, 24358, -1000, 22162, -1000, 22162,
+ -1000, 22162, -1000, 54370, 2000, -1000, -1000, -1000, 1419, -1000,
+ 4251, -388, 2121, -1000, -141, -1000, -1000, -1000, 1117, 1394,
+ -1000, -1000, -1000, -1000, -1000, -1000, 2477, 54370, -1000, 439,
+ -1000, -1000, 15556, -211, -219, 1011, -1000, -1000, -1000, -1000,
+ -1000, 1583, 1522, 1306, 2369, -1000, 54370, -1000, 53638, -381,
+ 924, 5565, -1000, 2119, 2079, 2630, -1000, -1000, -1000, -1000,
+ -1000, -1000, -540, 1399, 277, -1000, -1000, -1000, 337, -361,
+ -1000, 22162, -1000, 22162, -1000, 1500, -1000, -1000, 2484, 73,
+ -1000, 2652, -1000, 2649, 1005, 1005, -1000, 1145, -540, -1000,
+ -1000, -1000, -1000, 2369, 2369, -1000, -393, -1000, -1000, -1000,
+ -1000, -1000, 434, 1217, -1000, -1000, -1000, -1000, -1000, 5565,
+ -1000, -1000, -1000, 215, 215, -1000, -1000,
}
var yyPgo = [...]int{
- 0, 3389, 3388, 25, 9, 41, 38, 3387, 3385, 3382,
- 174, 3380, 3379, 3377, 3376, 3375, 3374, 2765, 2758, 2757,
- 3373, 3367, 3363, 3362, 3357, 3355, 3354, 3353, 3346, 50,
- 103, 81, 101, 212, 204, 3344, 172, 157, 198, 3343,
- 3336, 3320, 113, 186, 80, 82, 194, 3318, 3313, 69,
- 3245, 3242, 3238, 183, 181, 180, 1047, 3237, 178, 112,
- 45, 3236, 3227, 3224, 3223, 3222, 3220, 3216, 3215, 3214,
- 3213, 3211, 3210, 3209, 3208, 3207, 3194, 3193, 3192, 278,
- 3189, 3185, 21, 3184, 73, 3183, 3181, 3180, 3179, 3173,
- 6, 3172, 3169, 26, 34, 65, 3165, 3163, 44, 3161,
- 3160, 3159, 3158, 3153, 76, 3145, 13, 3144, 33, 3143,
- 3140, 124, 3138, 3137, 3133, 40, 3132, 3131, 3127, 14,
- 165, 3125, 3120, 139, 3119, 3118, 3117, 163, 219, 3116,
- 2348, 3114, 97, 3113, 3112, 3110, 162, 195, 3109, 119,
- 3103, 3102, 3100, 145, 3099, 3301, 3098, 3097, 72, 63,
- 201, 3096, 3095, 199, 77, 5, 3091, 19, 20, 3089,
- 3088, 74, 67, 3082, 104, 3081, 3078, 100, 91, 3076,
- 96, 90, 3075, 3074, 8, 10, 3071, 1, 4, 2,
- 108, 3062, 3054, 114, 3052, 3051, 3049, 98, 3048, 3046,
- 7060, 3044, 83, 132, 99, 68, 3041, 166, 125, 3039,
- 3038, 3033, 3026, 3025, 3020, 49, 3019, 3018, 3017, 136,
- 1264, 109, 3016, 149, 362, 51, 147, 3015, 190, 75,
- 197, 170, 3012, 3011, 134, 129, 3009, 3008, 59, 164,
- 192, 3007, 94, 128, 117, 179, 92, 130, 3006, 3003,
- 56, 60, 3002, 3001, 2999, 2992, 171, 2990, 2983, 64,
- 2982, 54, 2981, 168, 2977, 339, 55, 2971, 182, 156,
- 2966, 62, 2964, 2951, 87, 95, 58, 30, 2950, 155,
- 159, 126, 184, 2949, 2947, 52, 2941, 2940, 2937, 196,
- 319, 2931, 2921, 250, 176, 142, 146, 85, 2917, 337,
- 2906, 2905, 16, 4449, 6490, 185, 37, 161, 2904, 2901,
- 7709, 46, 42, 24, 2900, 205, 2892, 187, 2889, 2887,
- 2886, 226, 206, 110, 158, 57, 2882, 2880, 2872, 2871,
- 39, 2870, 2867, 2848, 2847, 2846, 2844, 36, 35, 32,
- 71, 215, 61, 27, 131, 152, 151, 66, 2840, 2839,
- 2836, 121, 93, 2833, 154, 153, 123, 102, 2832, 177,
- 141, 118, 2830, 105, 31, 2823, 2822, 2821, 2820, 89,
- 2819, 2814, 2811, 2810, 150, 143, 120, 78, 2809, 79,
- 116, 148, 144, 48, 2802, 43, 2793, 2792, 29, 193,
- 28, 2790, 18, 106, 115, 2789, 6331, 2788, 12, 328,
- 160, 2787, 2784, 7, 15, 22, 2781, 2779, 2778, 2775,
- 133, 2774, 2772, 2770, 2769, 23, 47, 11, 17, 111,
- 138, 70, 2766, 2764, 140, 2759, 2753, 2747, 0, 1034,
- 127, 2745, 200,
+ 0, 3231, 3230, 26, 4, 38, 37, 3229, 3227, 3226,
+ 174, 3225, 3223, 3222, 3221, 3220, 3219, 2723, 2712, 2693,
+ 3218, 3217, 3216, 3214, 3213, 3212, 3211, 3209, 3198, 46,
+ 95, 75, 102, 187, 201, 3197, 173, 164, 194, 3196,
+ 3195, 3194, 112, 179, 72, 82, 181, 3193, 3192, 65,
+ 3189, 3188, 3187, 210, 209, 204, 1107, 3185, 202, 105,
+ 48, 3182, 3179, 3177, 3176, 3175, 3170, 3169, 3168, 3167,
+ 3166, 3163, 3160, 3157, 3154, 3153, 3152, 3148, 3145, 307,
+ 3138, 3135, 17, 3129, 71, 3127, 3125, 3124, 3122, 3120,
+ 8, 3118, 3115, 23, 32, 59, 3106, 3105, 45, 3103,
+ 3100, 3099, 3098, 3097, 42, 3095, 24, 3094, 31, 3091,
+ 3089, 121, 3076, 3071, 3059, 41, 3058, 3055, 3051, 25,
+ 168, 3048, 3047, 137, 3043, 3042, 3041, 167, 193, 3037,
+ 2301, 3033, 94, 3029, 3025, 3024, 162, 191, 3021, 114,
+ 3020, 3019, 3018, 143, 3017, 3309, 3016, 3015, 66, 70,
+ 195, 3014, 3010, 227, 68, 58, 3009, 13, 16, 3008,
+ 3007, 67, 63, 3003, 109, 3001, 2992, 97, 84, 2991,
+ 93, 111, 2989, 2988, 2, 14, 2987, 5, 1, 7,
+ 101, 2977, 2976, 118, 2972, 2971, 2965, 91, 2962, 2951,
+ 407, 2945, 87, 126, 98, 81, 2944, 169, 152, 2941,
+ 2940, 2939, 2935, 2933, 2929, 51, 2927, 2926, 2925, 135,
+ 288, 116, 2924, 145, 349, 52, 147, 2921, 205, 77,
+ 197, 186, 2920, 2916, 133, 131, 2914, 2909, 55, 166,
+ 196, 2908, 96, 127, 120, 170, 89, 128, 2905, 2902,
+ 56, 62, 2899, 2896, 2895, 2893, 172, 2892, 2889, 60,
+ 2888, 54, 2887, 165, 2885, 331, 74, 2884, 188, 154,
+ 2878, 61, 2876, 2870, 73, 130, 117, 27, 2869, 153,
+ 158, 124, 160, 2867, 2865, 53, 2864, 2863, 2862, 184,
+ 276, 2854, 2851, 342, 175, 138, 149, 83, 2848, 284,
+ 2845, 2843, 10, 4461, 7231, 178, 29, 159, 2842, 2837,
+ 7803, 39, 44, 21, 2836, 208, 2834, 185, 2833, 2832,
+ 2830, 192, 206, 99, 156, 57, 2829, 2828, 2824, 2822,
+ 33, 2821, 2807, 2805, 2804, 2803, 2798, 36, 35, 34,
+ 90, 217, 64, 18, 108, 155, 150, 69, 2794, 2792,
+ 2789, 115, 92, 2785, 157, 151, 123, 104, 2780, 177,
+ 142, 119, 2776, 134, 30, 2774, 2767, 2766, 2765, 85,
+ 2764, 2763, 2762, 2761, 148, 141, 113, 79, 2760, 80,
+ 106, 144, 146, 50, 2759, 43, 2753, 2750, 28, 180,
+ 22, 2747, 40, 100, 110, 2745, 6349, 2744, 15, 296,
+ 189, 2741, 2740, 6, 9, 12, 2734, 2733, 2732, 2731,
+ 129, 2728, 2714, 2701, 2700, 20, 47, 19, 11, 103,
+ 136, 76, 2699, 2694, 140, 2689, 2688, 2684, 0, 1032,
+ 125, 2647, 198,
}
-//line sql.y:8680
+//line sql.y:8691
type yySymType struct {
union any
empty struct{}
@@ -8602,36 +8644,36 @@ var yyR1 = [...]int{
205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
- 205, 205, 205, 205, 205, 205, 164, 164, 164, 164,
- 227, 227, 151, 151, 151, 151, 151, 151, 151, 151,
- 151, 151, 151, 151, 151, 151, 151, 152, 152, 165,
- 165, 165, 165, 166, 166, 166, 166, 166, 166, 166,
- 316, 316, 119, 119, 119, 119, 119, 119, 119, 119,
+ 205, 205, 205, 205, 205, 205, 205, 205, 164, 164,
+ 164, 164, 227, 227, 151, 151, 151, 151, 151, 151,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 152,
+ 152, 165, 165, 165, 165, 166, 166, 166, 166, 166,
+ 166, 166, 316, 316, 119, 119, 119, 119, 119, 119,
119, 119, 119, 119, 119, 119, 119, 119, 119, 119,
- 119, 119, 120, 120, 120, 120, 120, 120, 120, 120,
+ 119, 119, 119, 119, 120, 120, 120, 120, 120, 120,
120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 422, 422, 331, 331, 331, 207, 207, 207, 207, 207,
- 126, 126, 126, 126, 126, 313, 313, 313, 317, 317,
- 317, 315, 315, 315, 315, 315, 315, 315, 315, 315,
- 315, 315, 315, 315, 315, 315, 318, 318, 225, 225,
- 122, 122, 223, 223, 224, 226, 226, 218, 218, 218,
- 218, 220, 220, 203, 203, 203, 228, 228, 319, 319,
- 229, 229, 106, 107, 107, 108, 108, 230, 230, 232,
- 231, 231, 233, 234, 234, 234, 235, 235, 236, 236,
- 236, 49, 49, 49, 49, 49, 44, 44, 44, 44,
- 45, 45, 45, 45, 137, 137, 137, 137, 139, 139,
- 138, 138, 82, 82, 83, 83, 83, 143, 143, 144,
- 144, 144, 141, 141, 142, 142, 253, 253, 253, 253,
- 253, 253, 253, 237, 237, 237, 244, 244, 244, 240,
- 240, 242, 242, 242, 243, 243, 243, 241, 250, 250,
- 252, 252, 251, 251, 247, 247, 248, 248, 249, 249,
- 249, 245, 245, 202, 202, 202, 202, 202, 254, 254,
- 254, 254, 307, 307, 307, 266, 266, 213, 213, 215,
- 215, 214, 214, 163, 267, 267, 275, 272, 272, 273,
- 273, 299, 299, 299, 276, 276, 289, 289, 285, 285,
- 286, 286, 279, 279, 291, 291, 291, 77, 211, 211,
- 370, 370, 367, 294, 294, 296, 296, 300, 300, 304,
- 304, 301, 301, 8, 415, 415, 415, 292, 292, 292,
+ 120, 120, 422, 422, 331, 331, 331, 207, 207, 207,
+ 207, 207, 126, 126, 126, 126, 126, 313, 313, 313,
+ 317, 317, 317, 315, 315, 315, 315, 315, 315, 315,
+ 315, 315, 315, 315, 315, 315, 315, 315, 318, 318,
+ 225, 225, 122, 122, 223, 223, 224, 226, 226, 218,
+ 218, 218, 218, 220, 220, 203, 203, 203, 228, 228,
+ 319, 319, 229, 229, 106, 107, 107, 108, 108, 230,
+ 230, 232, 231, 231, 233, 234, 234, 234, 235, 235,
+ 236, 236, 236, 49, 49, 49, 49, 49, 44, 44,
+ 44, 44, 45, 45, 45, 45, 137, 137, 137, 137,
+ 139, 139, 138, 138, 82, 82, 83, 83, 83, 143,
+ 143, 144, 144, 144, 141, 141, 142, 142, 253, 253,
+ 253, 253, 253, 253, 253, 237, 237, 237, 244, 244,
+ 244, 240, 240, 242, 242, 242, 243, 243, 243, 241,
+ 250, 250, 252, 252, 251, 251, 247, 247, 248, 248,
+ 249, 249, 249, 245, 245, 202, 202, 202, 202, 202,
+ 254, 254, 254, 254, 307, 307, 307, 266, 266, 213,
+ 213, 215, 215, 214, 214, 163, 267, 267, 275, 272,
+ 272, 273, 273, 299, 299, 299, 276, 276, 289, 289,
+ 285, 285, 286, 286, 279, 279, 291, 291, 291, 77,
+ 211, 211, 370, 370, 367, 294, 294, 296, 296, 300,
+ 300, 304, 304, 301, 301, 8, 415, 415, 415, 292,
292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
@@ -8646,7 +8688,7 @@ var yyR1 = [...]int{
292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
- 292, 292, 292, 292, 292, 292, 292, 293, 293, 293,
+ 292, 292, 292, 292, 292, 292, 292, 292, 292, 293,
293, 293, 293, 293, 293, 293, 293, 293, 293, 293,
293, 293, 293, 293, 293, 293, 293, 293, 293, 293,
293, 293, 293, 293, 293, 293, 293, 293, 293, 293,
@@ -8693,8 +8735,8 @@ var yyR1 = [...]int{
293, 293, 293, 293, 293, 293, 293, 293, 293, 293,
293, 293, 293, 293, 293, 293, 293, 293, 293, 293,
293, 293, 293, 293, 293, 293, 293, 293, 293, 293,
- 293, 293, 293, 293, 293, 293, 293, 418, 419, 311,
- 312, 312, 312,
+ 293, 293, 293, 293, 293, 293, 293, 293, 293, 293,
+ 293, 418, 419, 311, 312, 312, 312,
}
var yyR2 = [...]int{
@@ -8816,52 +8858,53 @@ var yyR2 = [...]int{
6, 5, 4, 10, 2, 2, 1, 2, 2, 2,
2, 2, 5, 6, 6, 6, 6, 6, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 8, 4,
- 8, 8, 6, 5, 4, 4, 4, 4, 4, 7,
- 4, 4, 6, 6, 6, 8, 6, 6, 4, 4,
- 3, 4, 6, 6, 4, 4, 6, 4, 6, 4,
- 4, 4, 4, 4, 4, 6, 4, 6, 4, 4,
- 4, 6, 4, 6, 4, 4, 6, 4, 6, 4,
+ 8, 8, 6, 5, 4, 4, 4, 5, 7, 4,
+ 4, 7, 4, 4, 6, 6, 6, 8, 6, 6,
+ 4, 4, 3, 4, 6, 6, 4, 4, 6, 4,
+ 6, 4, 4, 4, 4, 4, 4, 6, 4, 6,
+ 4, 4, 4, 6, 4, 6, 4, 4, 6, 4,
+ 6, 4, 6, 8, 4, 6, 8, 4, 6, 8,
+ 4, 6, 8, 4, 6, 8, 4, 6, 8, 4,
6, 8, 4, 6, 8, 4, 6, 8, 4, 6,
8, 4, 6, 8, 4, 6, 8, 4, 6, 8,
4, 6, 8, 4, 6, 8, 4, 6, 8, 4,
- 6, 8, 4, 6, 8, 4, 6, 8, 4, 6,
- 8, 4, 6, 8, 4, 6, 8, 4, 4, 4,
- 6, 4, 6, 4, 8, 6, 4, 4, 6, 4,
- 6, 8, 4, 6, 8, 4, 4, 6, 8, 6,
- 4, 6, 6, 8, 10, 7, 8, 8, 9, 4,
- 4, 4, 4, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 4, 4, 4, 4, 4, 4, 6,
- 4, 6, 5, 9, 6, 9, 8, 6, 8, 8,
- 8, 6, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 2, 6, 8, 10, 12, 14, 6, 8, 8,
- 10, 12, 14, 6, 8, 10, 12, 6, 8, 4,
- 4, 3, 4, 6, 6, 4, 6, 4, 6, 8,
- 0, 2, 1, 1, 1, 1, 1, 1, 1, 1,
+ 4, 4, 6, 4, 6, 4, 8, 6, 4, 4,
+ 6, 4, 6, 8, 4, 6, 8, 4, 4, 6,
+ 8, 6, 4, 6, 6, 8, 10, 7, 8, 8,
+ 9, 4, 4, 4, 4, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 4, 4, 4, 4, 4,
+ 4, 6, 4, 6, 5, 9, 6, 9, 8, 6,
+ 8, 8, 8, 6, 1, 1, 1, 1, 1, 1,
+ 1, 1, 0, 2, 6, 8, 10, 12, 14, 6,
+ 8, 8, 10, 12, 14, 6, 8, 10, 12, 6,
+ 8, 4, 4, 3, 4, 6, 6, 4, 6, 4,
+ 6, 8, 0, 2, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 0, 2, 0, 2, 3, 4, 4, 4,
+ 4, 4, 0, 3, 4, 7, 3, 1, 1, 1,
+ 0, 5, 5, 2, 3, 1, 2, 2, 1, 2,
+ 1, 2, 2, 1, 2, 2, 1, 1, 0, 1,
+ 0, 1, 0, 2, 1, 2, 4, 0, 2, 1,
+ 1, 3, 5, 1, 1, 1, 2, 2, 0, 4,
+ 0, 2, 0, 2, 2, 1, 3, 0, 1, 0,
+ 1, 3, 1, 3, 2, 0, 1, 1, 0, 1,
+ 2, 4, 4, 0, 2, 2, 1, 1, 3, 3,
+ 3, 3, 3, 3, 3, 3, 0, 3, 3, 3,
+ 0, 3, 1, 1, 0, 4, 0, 1, 1, 0,
+ 3, 1, 3, 2, 1, 1, 0, 1, 2, 3,
+ 4, 2, 3, 4, 4, 9, 3, 5, 0, 3,
+ 3, 0, 1, 0, 2, 2, 0, 2, 2, 2,
+ 0, 2, 1, 2, 3, 3, 0, 2, 1, 2,
+ 3, 4, 3, 0, 1, 3, 1, 6, 5, 4,
+ 1, 3, 3, 5, 0, 2, 5, 0, 5, 1,
+ 3, 1, 2, 3, 4, 1, 1, 3, 3, 1,
+ 2, 1, 1, 1, 1, 1, 1, 1, 0, 1,
+ 0, 2, 0, 3, 0, 1, 0, 1, 1, 5,
+ 0, 1, 0, 1, 2, 1, 1, 1, 1, 1,
+ 1, 0, 1, 1, 1, 3, 0, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 2, 0, 2, 3, 4, 4, 4, 4, 4,
- 0, 3, 4, 7, 3, 1, 1, 1, 0, 5,
- 5, 2, 3, 1, 2, 2, 1, 2, 1, 2,
- 2, 1, 2, 2, 1, 1, 0, 1, 0, 1,
- 0, 2, 1, 2, 4, 0, 2, 1, 1, 3,
- 5, 1, 1, 1, 2, 2, 0, 4, 0, 2,
- 0, 2, 2, 1, 3, 0, 1, 0, 1, 3,
- 1, 3, 2, 0, 1, 1, 0, 1, 2, 4,
- 4, 0, 2, 2, 1, 1, 3, 3, 3, 3,
- 3, 3, 3, 3, 0, 3, 3, 3, 0, 3,
- 1, 1, 0, 4, 0, 1, 1, 0, 3, 1,
- 3, 2, 1, 1, 0, 1, 2, 3, 4, 2,
- 3, 4, 4, 9, 3, 5, 0, 3, 3, 0,
- 1, 0, 2, 2, 0, 2, 2, 2, 0, 2,
- 1, 2, 3, 3, 0, 2, 1, 2, 3, 4,
- 3, 0, 1, 3, 1, 6, 5, 4, 1, 3,
- 3, 5, 0, 2, 5, 0, 5, 1, 3, 1,
- 2, 3, 4, 1, 1, 3, 3, 1, 2, 1,
- 1, 1, 1, 1, 1, 1, 0, 1, 0, 2,
- 0, 3, 0, 1, 0, 1, 1, 5, 0, 1,
- 0, 1, 2, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 3, 0, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -8923,8 +8966,7 @@ var yyR2 = [...]int{
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 1,
+ 1, 1, 1, 0, 0, 1, 1,
}
var yyChk = [...]int{
@@ -8933,155 +8975,155 @@ var yyChk = [...]int{
-65, -66, -69, -70, -71, -72, -73, -9, -11, -68,
-27, -28, -74, -75, -76, -77, -78, -12, -13, -14,
-8, -32, -31, -30, 12, 13, -109, -35, 34, -40,
- -50, 232, -51, -41, 233, -52, 235, 234, 272, 236,
- 385, 265, 79, 321, 322, 324, 325, 326, 327, -110,
- 692, 270, 271, 238, 38, 50, 35, 36, 39, 242,
- 278, 279, 241, 138, -33, -36, 11, -418, 14, 475,
- 267, 266, 30, -34, 585, 91, -80, -417, 740, -253,
+ -50, 234, -51, -41, 235, -52, 237, 236, 274, 238,
+ 387, 267, 79, 323, 324, 326, 327, 328, 329, -110,
+ 694, 272, 273, 240, 38, 50, 35, 36, 39, 244,
+ 280, 281, 243, 140, -33, -36, 11, -418, 14, 477,
+ 269, 268, 30, -34, 587, 91, -80, -417, 742, -253,
-237, 25, 35, 31, -236, -232, -128, -237, 23, 21,
10, -79, -79, -79, 15, 16, -79, -355, -357, 91,
- 165, 91, -79, -57, -56, -54, -53, -55, -58, 33,
- -47, -48, -379, -46, -43, 237, 234, 282, 128, 129,
- 272, 273, 274, 236, 256, 271, 275, 270, 291, -42,
- 86, 35, 585, 588, -362, 233, 239, 240, 235, 476,
- 131, 130, 80, -359, 380, 619, 710, -58, 712, 105,
- 108, 711, 49, 246, 713, 714, 715, 626, 716, 255,
- 717, 718, 719, 720, 726, 667, 727, 728, 729, 132,
- 10, -79, -304, -300, 95, -293, 582, 258, 617, 429,
- 618, 307, 86, 46, 41, 521, 592, 377, 380, 619,
- 506, 710, 386, 321, 337, 331, 511, 512, 513, 360,
- 352, 583, 620, 593, 310, 259, 295, 704, 350, 141,
- 712, 314, 621, 273, 387, 388, 622, 389, 105, 324,
- 426, 725, 313, 623, 723, 108, 711, 329, 84, 505,
- 56, 707, 49, 268, 434, 435, 348, 241, 344, 713,
- 296, 624, 595, 289, 131, 128, 732, 38, 340, 55,
- 32, 722, 130, 54, 714, 156, 625, 715, 626, 391,
- 367, 698, 53, 392, 274, 627, 89, 279, 587, 318,
- 706, 393, 526, 341, 394, 306, 721, 238, 628, 317,
- 687, 679, 680, 395, 396, 699, 372, 368, 373, 528,
- 629, 418, 510, 397, 683, 684, 739, 57, 630, 631,
- 700, 129, 632, 83, 716, 85, 335, 336, 633, 304,
- 257, 531, 532, 420, 364, 488, 495, 496, 115, 116,
- 491, 117, 497, 118, 498, 499, 500, 489, 119, 112,
- 490, 501, 502, 365, 366, 120, 503, 114, 113, 492,
- 494, 121, 504, 255, 37, 398, 584, 308, 63, 312,
- 283, 421, 51, 370, 736, 50, 694, 533, 634, 697,
- 363, 359, 485, 58, 635, 636, 637, 638, 507, 717,
- 362, 334, 358, 731, 4, 301, 480, 508, 718, 67,
- 240, 375, 374, 376, 290, 417, 355, 639, 640, 641,
- 262, 87, 642, 345, 24, 643, 644, 399, 297, 645,
- 61, 646, 647, 424, 271, 648, 59, 719, 44, 649,
- 276, 733, 720, 650, 651, 652, 693, 653, 278, 654,
- 401, 655, 681, 682, 400, 369, 371, 534, 285, 402,
- 385, 243, 586, 656, 319, 339, 275, 724, 657, 263,
- 522, 523, 524, 525, 705, 530, 529, 277, 282, 270,
- 425, 264, 658, 659, 660, 661, 662, 311, 678, 663,
- 664, 325, 590, 726, 486, 48, 665, 666, 667, 668,
- 669, 305, 300, 419, 428, 66, 88, 382, 670, 671,
- 703, 333, 330, 42, 298, 466, 468, 469, 470, 471,
- 472, 467, 474, 672, 322, 60, 727, 728, 729, 292,
- 730, 514, 515, 516, 517, 12, 568, 551, 579, 552,
- 569, 553, 562, 554, 570, 578, 580, 535, 543, 536,
- 544, 574, 557, 571, 563, 556, 555, 577, 560, 564,
- 537, 545, 575, 561, 538, 546, 539, 547, 540, 548,
- 573, 572, 565, 576, 541, 549, 567, 542, 550, 566,
- 558, 559, 437, 737, 738, 509, 404, 132, 302, 303,
- 52, 356, 284, 673, 315, 674, 346, 347, 482, 483,
- 361, 332, 357, 690, 323, 688, 286, 405, 487, 272,
- 675, 427, 299, 378, 124, 383, 316, 591, 527, 291,
- 406, 702, 589, 518, 519, 354, 351, 293, 520, 676,
- 692, 407, 247, 287, 288, 677, 689, 408, 409, 309,
- 410, 411, 412, 413, 414, 416, 320, 415, 691, 685,
- 686, 294, 465, 588, 328, 349, 384, 447, 448, 449,
+ 167, 91, -79, -57, -56, -54, -53, -55, -58, 33,
+ -47, -48, -379, -46, -43, 239, 236, 284, 130, 131,
+ 274, 275, 276, 238, 258, 273, 277, 272, 293, -42,
+ 86, 35, 587, 590, -362, 235, 241, 242, 237, 478,
+ 133, 132, 80, -359, 382, 621, 712, -58, 714, 105,
+ 108, 713, 49, 248, 715, 716, 717, 628, 718, 257,
+ 719, 720, 721, 722, 728, 669, 729, 730, 731, 134,
+ 10, -79, -304, -300, 95, -293, 584, 260, 619, 431,
+ 620, 309, 86, 46, 41, 523, 594, 379, 382, 621,
+ 508, 712, 388, 323, 339, 333, 513, 514, 515, 362,
+ 354, 585, 622, 595, 312, 261, 297, 706, 352, 143,
+ 714, 316, 623, 275, 389, 390, 624, 391, 105, 326,
+ 428, 727, 315, 625, 725, 108, 713, 331, 84, 507,
+ 56, 709, 49, 270, 436, 437, 350, 243, 346, 715,
+ 298, 626, 597, 291, 133, 130, 734, 38, 342, 55,
+ 32, 724, 132, 54, 716, 158, 627, 717, 628, 393,
+ 369, 700, 53, 394, 276, 629, 89, 281, 589, 320,
+ 708, 395, 528, 343, 396, 308, 723, 240, 630, 319,
+ 689, 681, 682, 397, 398, 701, 374, 370, 375, 530,
+ 631, 420, 512, 399, 685, 686, 741, 57, 632, 633,
+ 702, 131, 634, 83, 718, 85, 337, 338, 635, 306,
+ 259, 533, 534, 422, 366, 490, 122, 497, 498, 115,
+ 116, 493, 117, 499, 118, 123, 500, 501, 502, 491,
+ 119, 112, 492, 503, 504, 367, 368, 120, 505, 114,
+ 113, 494, 496, 121, 506, 257, 37, 400, 586, 310,
+ 63, 314, 285, 423, 51, 372, 738, 50, 696, 535,
+ 636, 699, 365, 361, 487, 58, 637, 638, 639, 640,
+ 509, 719, 364, 336, 360, 733, 4, 303, 482, 510,
+ 720, 67, 242, 377, 376, 378, 292, 419, 357, 641,
+ 642, 643, 264, 87, 644, 347, 24, 645, 646, 401,
+ 299, 647, 61, 648, 649, 426, 273, 650, 59, 721,
+ 44, 651, 278, 735, 722, 652, 653, 654, 695, 655,
+ 280, 656, 403, 657, 683, 684, 402, 371, 373, 536,
+ 287, 404, 387, 245, 588, 658, 321, 341, 277, 726,
+ 659, 265, 524, 525, 526, 527, 707, 532, 531, 279,
+ 284, 272, 427, 266, 660, 661, 662, 663, 664, 313,
+ 680, 665, 666, 327, 592, 728, 488, 48, 667, 668,
+ 669, 670, 671, 307, 302, 421, 430, 66, 88, 384,
+ 672, 673, 705, 335, 332, 42, 300, 468, 470, 471,
+ 472, 473, 474, 469, 476, 674, 324, 60, 729, 730,
+ 731, 294, 732, 516, 517, 518, 519, 12, 570, 553,
+ 581, 554, 571, 555, 564, 556, 572, 580, 582, 537,
+ 545, 538, 546, 576, 559, 573, 565, 558, 557, 579,
+ 562, 566, 539, 547, 577, 563, 540, 548, 541, 549,
+ 542, 550, 575, 574, 567, 578, 543, 551, 569, 544,
+ 552, 568, 560, 561, 439, 739, 740, 511, 406, 134,
+ 304, 305, 52, 358, 286, 675, 317, 676, 348, 349,
+ 484, 485, 363, 334, 359, 692, 325, 690, 288, 407,
+ 489, 274, 677, 429, 301, 380, 126, 385, 318, 593,
+ 529, 293, 408, 704, 591, 520, 521, 356, 353, 295,
+ 522, 678, 694, 409, 249, 289, 290, 679, 691, 410,
+ 411, 311, 412, 413, 414, 415, 416, 418, 322, 417,
+ 693, 687, 688, 296, 467, 590, 330, 351, 386, 449,
450, 451, 452, 453, 454, 455, 456, 457, 458, 459,
- 460, 461, 462, 463, 464, 484, 245, -79, 245, -190,
- -300, -130, 694, 696, 184, -272, 388, -290, 390, 403,
- 398, 408, 396, -281, 399, 401, 285, -402, 418, 245,
- 405, 232, 391, 400, 409, 410, 309, 416, 411, 320,
- 415, 294, 412, 413, 414, -386, 184, 715, 730, 141,
- 353, 395, 393, 419, 694, 95, -306, 95, 96, 97,
- -293, 323, -309, 328, -294, -386, -293, 326, -79, -79,
- -311, -311, -130, -210, -145, 149, -159, -261, -162, 96,
- -150, -153, -204, -205, -206, -207, -160, -220, -259, 173,
- 174, 181, 150, -216, -163, 28, 581, 477, 476, 184,
- 33, 227, 73, 74, 479, 480, 152, 62, 14, 442,
- 443, -161, 432, 433, 444, 438, 439, 505, 507, 508,
- 509, 506, 511, 512, 513, 514, 515, 516, 517, 518,
- 519, 520, 510, 521, 482, 483, 122, 484, 112, 114,
- 113, 485, 486, 487, 350, 533, 534, 528, 531, 532,
- 530, 529, 365, 366, 488, 551, 552, 556, 555, 553,
- 554, 557, 560, 561, 562, 563, 564, 565, 567, 566,
- 558, 559, 536, 535, 537, 538, 539, 540, 541, 542,
- 544, 543, 545, 546, 547, 548, 549, 550, 568, 569,
- 570, 571, 572, 574, 573, 578, 577, 575, 576, 580,
- 579, 489, 490, 115, 116, 117, 118, 119, 120, 121,
- 491, 494, 492, 493, 495, 496, 497, 502, 503, 498,
- 499, 500, 501, 504, 376, 374, 375, 371, 370, 369,
- -89, -102, 608, 607, -103, 429, 434, 435, 437, -151,
- -152, -165, -166, -294, -300, 250, 431, 244, 179, 475,
- -154, -148, -218, 111, 97, -31, -214, 430, 440, 441,
- 445, 436, 446, 594, 596, 611, 612, 614, 599, 604,
- 603, 606, 522, 523, 524, 525, 526, 527, 679, 680,
- 681, 682, 683, 684, 685, 686, -386, -293, 95, -157,
- -155, -199, 98, 103, 106, 107, 109, -408, 268, 346,
- 347, 123, -418, 708, -156, 100, 101, 102, 125, 126,
- 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
- 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
- 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
- 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
- 225, 226, 94, 99, 49, 404, 404, -190, -79, -79,
- -79, -79, -415, 711, 586, -230, -128, -232, -33, -31,
- -418, 11, -79, -31, -32, -30, -36, -38, 613, -37,
- -300, 104, -237, -253, 15, 66, 168, 47, 55, -235,
- -236, -34, -31, -145, 22, 40, 26, -132, 175, -145,
- -300, -132, -279, 249, -79, -79, -268, -314, 323, -270,
- 419, 694, 418, -260, -273, 95, -259, -272, 417, 96,
- -356, 165, -342, -346, -294, 260, -372, 256, -190, -365,
- -364, -294, -418, -129, -289, 246, 254, 253, 142, -389,
- 145, 302, 431, 244, -53, -54, -55, -272, 183, 714,
- -111, 277, 281, 92, 92, -346, -345, -344, -390, 281,
- 260, -371, -363, 252, 261, -352, 253, 254, -347, 246,
- 143, -390, -347, 251, 261, 256, 260, 281, 281, 132,
- 281, 132, 281, 281, 281, 281, 281, 281, 281, 281,
- 281, 276, -353, 157, -353, 589, 589, -359, -390, 256,
- 246, -390, -390, 252, -291, -347, 248, 27, 248, 37,
- 37, -353, -353, -353, -272, 183, -353, -353, -353, -353,
- 289, 289, -353, -353, -353, -353, -353, -353, -353, -353,
- -353, -353, -353, -353, -353, -353, -353, -353, -353, 245,
- -389, -137, 415, 309, 86, -56, 291, -39, -190, -289,
- 246, 247, -389, 278, -190, 228, 245, 697, -283, 165,
- 18, -283, -280, 404, 402, 389, 394, -283, -283, -283,
- -283, 292, 387, -348, 246, 37, 257, 404, 292, 387,
- 292, 293, 292, 293, 397, 407, 292, -305, 17, 168,
- 431, 392, 396, 285, 245, 286, 247, 406, 293, -305,
- 94, -284, 165, 292, 404, 398, 288, -283, -283, -312,
- -418, -296, -294, -292, 237, 40, 148, 27, 29, 151,
- 184, 135, 22, 152, 39, 239, 353, 256, 183, 252,
- 476, 232, 77, 594, 432, 439, 430, 438, 442, 478,
- 479, 431, 390, 33, 16, 596, 30, 266, 26, 43,
- 177, 234, 155, 597, 269, 28, 267, 122, 126, 599,
- 25, 80, 261, 17, 254, 45, 19, 600, 601, 20,
- 250, 249, 168, 246, 75, 14, 227, 31, 164, 71,
- 602, 143, 138, 603, 604, 605, 606, 136, 73, 165,
- 23, 734, 440, 441, 35, 695, 581, 280, 179, 78,
- 64, 696, 149, 436, 607, 608, 123, 609, 127, 81,
- 701, 145, 21, 76, 47, 610, 281, 611, 251, 735,
- 612, 422, 613, 166, 235, 475, 74, 167, 708, 614,
- 709, 244, 403, 11, 481, 34, 265, 253, 134, 72,
- 446, 615, 245, 154, 248, 137, 125, 10, 142, 36,
- 15, 79, 82, 443, 444, 445, 62, 133, 585, 153,
- 18, 616, 423, 147, -386, 697, -312, -312, 34, 96,
- -412, -413, -414, 585, 422, 248, -294, -190, -85, 687,
- 236, -86, 693, 40, 243, -135, 404, -123, 184, 715,
- 698, 699, 700, 697, 401, 705, 703, 701, 292, 702,
- 92, 145, 147, 148, 4, -145, 164, -200, -201, 163,
- 157, 158, 159, 160, 161, 162, 169, 168, 149, 151,
- 165, -246, 146, 170, 171, 172, 173, 174, 175, 176,
- 178, 177, 179, 180, 166, 167, 183, 230, 231, -153,
- -153, -153, -153, -216, -222, -221, -418, -218, -386, -293,
- -300, -418, -418, -153, -278, -418, -150, -418, -418, -418,
- -418, -418, -225, -145, -418, -418, -422, -418, -422, -422,
- -422, -331, -418, -331, -331, -418, -418, -418, -418, -418,
+ 460, 461, 462, 463, 464, 465, 466, 486, 247, -79,
+ 247, -190, -300, -130, 696, 698, 186, -272, 390, -290,
+ 392, 405, 400, 410, 398, -281, 401, 403, 287, -402,
+ 420, 247, 407, 234, 393, 402, 411, 412, 311, 418,
+ 413, 322, 417, 296, 414, 415, 416, -386, 186, 717,
+ 732, 143, 355, 397, 395, 421, 696, 95, -306, 95,
+ 96, 97, -293, 325, -309, 330, -294, -386, -293, 328,
+ -79, -79, -311, -311, -130, -210, -145, 151, -159, -261,
+ -162, 96, -150, -153, -204, -205, -206, -207, -160, -220,
+ -259, 175, 176, 183, 152, -216, -163, 28, 583, 479,
+ 478, 186, 33, 229, 73, 74, 481, 482, 154, 62,
+ 14, 444, 445, -161, 434, 435, 446, 440, 441, 507,
+ 509, 510, 511, 508, 513, 514, 515, 516, 517, 518,
+ 519, 520, 521, 522, 512, 523, 484, 485, 124, 486,
+ 112, 114, 113, 122, 123, 487, 488, 489, 352, 535,
+ 536, 530, 533, 534, 532, 531, 367, 368, 490, 553,
+ 554, 558, 557, 555, 556, 559, 562, 563, 564, 565,
+ 566, 567, 569, 568, 560, 561, 538, 537, 539, 540,
+ 541, 542, 543, 544, 546, 545, 547, 548, 549, 550,
+ 551, 552, 570, 571, 572, 573, 574, 576, 575, 580,
+ 579, 577, 578, 582, 581, 491, 492, 115, 116, 117,
+ 118, 119, 120, 121, 493, 496, 494, 495, 497, 498,
+ 499, 504, 505, 500, 501, 502, 503, 506, 378, 376,
+ 377, 373, 372, 371, -89, -102, 610, 609, -103, 431,
+ 436, 437, 439, -151, -152, -165, -166, -294, -300, 252,
+ 433, 246, 181, 477, -154, -148, -218, 111, 97, -31,
+ -214, 432, 442, 443, 447, 438, 448, 596, 598, 613,
+ 614, 616, 601, 606, 605, 608, 524, 525, 526, 527,
+ 528, 529, 681, 682, 683, 684, 685, 686, 687, 688,
+ -386, -293, 95, -157, -155, -199, 98, 103, 106, 107,
+ 109, -408, 270, 348, 349, 125, -418, 710, -156, 100,
+ 101, 102, 127, 128, 187, 188, 189, 190, 191, 192,
+ 193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
+ 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
+ 213, 214, 215, 216, 217, 218, 219, 220, 221, 222,
+ 223, 224, 225, 226, 227, 228, 94, 99, 49, 406,
+ 406, -190, -79, -79, -79, -79, -415, 713, 588, -230,
+ -128, -232, -33, -31, -418, 11, -79, -31, -32, -30,
+ -36, -38, 615, -37, -300, 104, -237, -253, 15, 66,
+ 170, 47, 55, -235, -236, -34, -31, -145, 22, 40,
+ 26, -132, 177, -145, -300, -132, -279, 251, -79, -79,
+ -268, -314, 325, -270, 421, 696, 420, -260, -273, 95,
+ -259, -272, 419, 96, -356, 167, -342, -346, -294, 262,
+ -372, 258, -190, -365, -364, -294, -418, -129, -289, 248,
+ 256, 255, 144, -389, 147, 304, 433, 246, -53, -54,
+ -55, -272, 185, 716, -111, 279, 283, 92, 92, -346,
+ -345, -344, -390, 283, 262, -371, -363, 254, 263, -352,
+ 255, 256, -347, 248, 145, -390, -347, 253, 263, 258,
+ 262, 283, 283, 134, 283, 134, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 278, -353, 159, -353, 591,
+ 591, -359, -390, 258, 248, -390, -390, 254, -291, -347,
+ 250, 27, 250, 37, 37, -353, -353, -353, -272, 185,
+ -353, -353, -353, -353, 291, 291, -353, -353, -353, -353,
+ -353, -353, -353, -353, -353, -353, -353, -353, -353, -353,
+ -353, -353, -353, 247, -389, -137, 417, 311, 86, -56,
+ 293, -39, -190, -289, 248, 249, -389, 280, -190, 230,
+ 247, 699, -283, 167, 18, -283, -280, 406, 404, 391,
+ 396, -283, -283, -283, -283, 294, 389, -348, 248, 37,
+ 259, 406, 294, 389, 294, 295, 294, 295, 399, 409,
+ 294, -305, 17, 170, 433, 394, 398, 287, 247, 288,
+ 249, 408, 295, -305, 94, -284, 167, 294, 406, 400,
+ 290, -283, -283, -312, -418, -296, -294, -292, 239, 40,
+ 150, 27, 29, 153, 186, 137, 22, 154, 39, 241,
+ 355, 258, 185, 254, 478, 234, 77, 596, 434, 441,
+ 432, 440, 444, 480, 481, 433, 392, 33, 16, 598,
+ 30, 268, 26, 43, 179, 236, 157, 599, 271, 28,
+ 269, 124, 128, 601, 25, 80, 263, 17, 256, 45,
+ 19, 602, 603, 20, 252, 251, 170, 248, 75, 14,
+ 229, 31, 166, 71, 604, 145, 140, 605, 606, 607,
+ 608, 138, 73, 167, 23, 736, 442, 443, 35, 697,
+ 583, 282, 181, 78, 64, 698, 151, 438, 609, 610,
+ 125, 611, 129, 81, 703, 147, 21, 76, 47, 612,
+ 283, 613, 253, 737, 614, 424, 615, 168, 237, 477,
+ 74, 169, 710, 616, 711, 246, 405, 11, 483, 34,
+ 267, 255, 136, 72, 448, 617, 247, 156, 250, 139,
+ 127, 10, 144, 36, 15, 79, 82, 445, 446, 447,
+ 62, 135, 587, 155, 18, 618, 425, 149, -386, 699,
+ -312, -312, 34, 96, -412, -413, -414, 587, 424, 250,
+ -294, -190, -85, 689, 238, -86, 695, 40, 245, -135,
+ 406, -123, 186, 717, 700, 701, 702, 699, 403, 707,
+ 705, 703, 294, 704, 92, 147, 149, 150, 4, -145,
+ 166, -200, -201, 165, 159, 160, 161, 162, 163, 164,
+ 171, 170, 151, 153, 167, -246, 148, 172, 173, 174,
+ 175, 176, 177, 178, 180, 179, 181, 182, 168, 169,
+ 185, 232, 233, -153, -153, -153, -153, -216, -222, -221,
+ -418, -218, -386, -293, -300, -418, -418, -153, -278, -418,
+ -150, -418, -418, -418, -418, -418, -225, -145, -418, -418,
+ -422, -418, -422, -422, -422, -331, -418, -331, -331, -418,
-418, -418, -418, -418, -418, -418, -418, -418, -418, -418,
-418, -418, -418, -418, -418, -418, -418, -418, -418, -418,
-418, -418, -418, -418, -418, -418, -418, -418, -418, -418,
@@ -9093,108 +9135,109 @@ var yyChk = [...]int{
-418, -418, -418, -418, -418, -418, -418, -418, -418, -418,
-418, -418, -418, -418, -418, -418, -418, -418, -418, -418,
-418, -418, -418, -418, -418, -418, -418, -418, -418, -418,
- -418, -418, -418, -418, -418, -418, -418, -418, 228, -418,
- -418, -418, -418, -418, -331, -331, -331, -331, -331, -331,
-418, -418, -418, -418, -418, -418, -418, -418, -418, -418,
- -418, -418, -418, -418, 94, 107, 103, 106, 98, -220,
- 109, 94, 94, 94, 94, -31, -32, -210, -418, -311,
- -399, -400, -193, -190, -418, 309, -294, -294, 278, 100,
- -235, -34, -31, -230, -236, -232, -31, -79, -121, -134,
- 68, 69, -133, -136, 26, 43, 72, 70, 40, -419,
- 93, -419, -253, -419, 92, -38, -256, 91, 641, 671,
- 641, 671, 66, 48, 94, 94, 92, 24, -231, -233,
- -145, 17, -298, 4, -297, 27, -294, 94, 228, 17,
- -191, 31, -190, -279, -279, 92, 95, 323, -269, -271,
- 420, 422, 157, -299, -294, 94, 33, 93, 92, -190,
- -320, -323, -325, -324, -326, -321, -322, 350, 351, 184,
- 354, 356, 357, 358, 359, 360, 361, 362, 363, 364,
- 367, 34, 268, 346, 347, 348, 349, 368, 369, 370,
- 371, 373, 374, 375, 376, 331, 352, 583, 332, 333,
- 334, 335, 336, 337, 339, 340, 343, 341, 342, 344,
- 345, -295, -294, 91, 93, 92, -330, 91, -145, -137,
- 245, -294, 246, 246, 246, -79, 475, -353, -353, -353,
- 276, 22, -46, -43, -379, 21, -42, -43, 237, 128,
- 129, 234, 91, -342, 91, -351, -295, -294, 91, 143,
- 251, 142, -350, -347, -350, -351, -294, -218, -294, 143,
- 143, -294, -294, -265, -294, -265, -265, 40, -265, 40,
- -265, 40, 100, -294, -265, 40, -265, 40, -265, 40,
- -265, 40, -265, 40, 33, 83, 84, 85, 33, 87,
- 88, 89, -218, -294, -294, -218, -342, -218, -190, -294,
- -272, 100, 100, 100, -353, -353, 100, 94, 94, 94,
- -353, -353, 100, 94, -302, -300, 94, 94, -391, 262,
- 306, 308, 100, 100, 100, 100, 33, 94, -392, 33,
- 722, 721, 723, 724, 725, 94, 100, 33, 100, 33,
- 100, -294, 91, -190, -143, 296, 232, 234, 237, 81,
- 94, 312, 313, 310, 315, 316, 317, 157, 49, 92,
- 248, 245, -294, -285, 250, -285, -294, -301, -300, -292,
- -190, 248, 386, 94, -145, -349, 17, 168, -305, -305,
- -283, -190, -349, -305, -283, -190, -283, -283, -283, -283,
- -305, -305, -305, -283, -300, -300, -190, -190, -190, -190,
- -190, -190, -190, -312, -284, -283, 697, 94, -277, 17,
- 81, -312, -312, 92, 329, 423, 424, -310, 326, -81,
- -294, 94, -10, -29, -18, -17, -19, 157, -10, 92,
- 585, -183, -190, 697, 697, 697, 697, 697, 697, -145,
- -145, -145, -145, 609, -208, -410, 149, 125, 126, 123,
- 124, -162, 41, 42, 40, -145, -209, -214, -216, 110,
- 168, 151, 165, -246, -150, -153, -150, -150, -150, -150,
- -150, -150, 227, -150, 227, -150, -150, -150, -150, -150,
- -150, -313, -294, 94, 184, -158, -157, 109, -408, -158,
- 582, 92, -221, 228, -145, -145, -386, -119, 448, 449,
- 450, 451, 453, 454, 455, 458, 459, 463, 464, 447,
- 465, 452, 457, 460, 461, 462, 456, 349, -145, -211,
- -210, -211, -145, -145, -223, -224, 153, -218, -145, -419,
- -419, 100, 175, -127, 26, 43, -127, -127, -127, -127,
- -145, -145, -145, -145, -145, -145, -145, -145, -145, -145,
- -127, -145, -120, 447, 465, 452, 457, 460, 461, 462,
- 456, 349, 466, 467, 468, 469, 470, 471, 472, 473,
- 474, -120, -119, -145, -145, -145, -145, -145, -145, -87,
- -145, 135, 136, 137, -210, -145, -150, -145, -145, -145,
- -419, -145, -145, -145, -211, -145, -145, -145, -145, -145,
- -145, -145, -145, -145, -145, -145, -145, -145, -145, -145,
+ -418, -418, -418, -418, 230, -418, -418, -418, -418, -418,
+ -331, -331, -331, -331, -331, -331, -418, -418, -418, -418,
+ -418, -418, -418, -418, -418, -418, -418, -418, -418, -418,
+ 94, 107, 103, 106, 98, -220, 109, 94, 94, 94,
+ 94, -31, -32, -210, -418, -311, -399, -400, -193, -190,
+ -418, 311, -294, -294, 280, 100, -235, -34, -31, -230,
+ -236, -232, -31, -79, -121, -134, 68, 69, -133, -136,
+ 26, 43, 72, 70, 40, -419, 93, -419, -253, -419,
+ 92, -38, -256, 91, 643, 673, 643, 673, 66, 48,
+ 94, 94, 92, 24, -231, -233, -145, 17, -298, 4,
+ -297, 27, -294, 94, 230, 17, -191, 31, -190, -279,
+ -279, 92, 95, 325, -269, -271, 422, 424, 159, -299,
+ -294, 94, 33, 93, 92, -190, -320, -323, -325, -324,
+ -326, -321, -322, 352, 353, 186, 356, 358, 359, 360,
+ 361, 362, 363, 364, 365, 366, 369, 34, 270, 348,
+ 349, 350, 351, 370, 371, 372, 373, 375, 376, 377,
+ 378, 333, 354, 585, 334, 335, 336, 337, 338, 339,
+ 341, 342, 345, 343, 344, 346, 347, -295, -294, 91,
+ 93, 92, -330, 91, -145, -137, 247, -294, 248, 248,
+ 248, -79, 477, -353, -353, -353, 278, 22, -46, -43,
+ -379, 21, -42, -43, 239, 130, 131, 236, 91, -342,
+ 91, -351, -295, -294, 91, 145, 253, 144, -350, -347,
+ -350, -351, -294, -218, -294, 145, 145, -294, -294, -265,
+ -294, -265, -265, 40, -265, 40, -265, 40, 100, -294,
+ -265, 40, -265, 40, -265, 40, -265, 40, -265, 40,
+ 33, 83, 84, 85, 33, 87, 88, 89, -218, -294,
+ -294, -218, -342, -218, -190, -294, -272, 100, 100, 100,
+ -353, -353, 100, 94, 94, 94, -353, -353, 100, 94,
+ -302, -300, 94, 94, -391, 264, 308, 310, 100, 100,
+ 100, 100, 33, 94, -392, 33, 724, 723, 725, 726,
+ 727, 94, 100, 33, 100, 33, 100, -294, 91, -190,
+ -143, 298, 234, 236, 239, 81, 94, 314, 315, 312,
+ 317, 318, 319, 159, 49, 92, 250, 247, -294, -285,
+ 252, -285, -294, -301, -300, -292, -190, 250, 388, 94,
+ -145, -349, 17, 170, -305, -305, -283, -190, -349, -305,
+ -283, -190, -283, -283, -283, -283, -305, -305, -305, -283,
+ -300, -300, -190, -190, -190, -190, -190, -190, -190, -312,
+ -284, -283, 699, 94, -277, 17, 81, -312, -312, 92,
+ 331, 425, 426, -310, 328, -81, -294, 94, -10, -29,
+ -18, -17, -19, 159, -10, 92, 587, -183, -190, 699,
+ 699, 699, 699, 699, 699, -145, -145, -145, -145, 611,
+ -208, -410, 151, 127, 128, 125, 126, -162, 41, 42,
+ 40, -145, -209, -214, -216, 110, 170, 153, 167, -246,
+ -150, -153, -150, -150, -150, -150, -150, -150, 229, -150,
+ 229, -150, -150, -150, -150, -150, -150, -313, -294, 94,
+ 186, -158, -157, 109, -408, -158, 584, 92, -221, 230,
+ -145, -145, -386, -119, 450, 451, 452, 453, 455, 456,
+ 457, 460, 461, 465, 466, 449, 467, 454, 459, 462,
+ 463, 464, 458, 351, -145, -211, -210, -211, -145, -145,
+ -223, -224, 155, -218, -145, -419, -419, 100, 177, -127,
+ 26, 43, -127, -127, -127, -127, -145, -145, -145, -145,
+ -145, -145, -145, -145, -145, -145, -127, -145, -120, 449,
+ 467, 454, 459, 462, 463, 464, 458, 351, 468, 469,
+ 470, 471, 472, 473, 474, 475, 476, -120, -119, -145,
+ -145, -145, -145, -145, -145, -145, -145, -87, -145, 137,
+ 138, 139, -210, -145, -150, -145, -145, -145, -419, -145,
+ -145, -145, -211, -145, -145, -145, -145, -145, -145, -145,
-145, -145, -145, -145, -145, -145, -145, -145, -145, -145,
-145, -145, -145, -145, -145, -145, -145, -145, -145, -145,
-145, -145, -145, -145, -145, -145, -145, -145, -145, -145,
- -145, -385, -384, -383, -145, -145, -145, -145, -145, -145,
+ -145, -145, -145, -145, -145, -145, -145, -145, -145, -385,
+ -384, -383, -145, -145, -145, -145, -145, -145, -145, -145,
-145, -145, -145, -145, -145, -145, -145, -145, -145, -145,
- -145, -145, -145, -145, -145, -145, -145, -210, -210, -210,
- -210, -210, -145, -419, -145, -164, -148, 100, -261, 109,
- 96, -145, -145, -145, -145, -145, -145, -211, -296, -301,
- -292, -293, -210, -211, -211, -210, -210, -145, -145, -145,
- -145, -145, -145, -145, -145, -419, -145, -145, -145, -145,
- -145, -253, -419, -210, 92, -401, 422, 423, 695, -303,
- 281, -302, 27, -211, 94, 17, -263, 82, -294, -235,
- -235, 68, 69, 64, -131, -132, -136, -419, -37, 27,
- -255, -294, 634, 634, 67, 94, -332, -272, 377, 378,
- 184, -145, -145, 92, -234, 29, 30, -190, -297, 175,
- -301, -190, -264, 281, -190, -168, -170, -171, -172, -193,
- -217, -418, -173, -31, 605, 602, 17, -183, -184, -192,
- -300, -270, -314, -269, 92, 421, 423, 424, 81, 127,
- -145, -333, 183, -361, -360, -359, -342, -344, -345, -346,
- 93, -333, -338, 383, 382, -330, -330, -330, -330, -330,
- -332, -332, -332, -332, 91, 91, -330, -330, -330, -330,
- -335, 91, -335, -335, -336, -335, 91, -336, -337, 91,
- -337, -372, -145, -369, -368, -366, -367, 255, 105, 677,
- 633, 585, 626, 667, 82, -364, -234, 100, -419, -143,
- -286, 250, -370, -367, -294, -294, -294, -286, 95, 94,
- 95, 94, 95, 94, -112, -60, -1, 734, 735, 736,
- 92, 22, -343, -342, -59, 306, -375, -376, 281, -371,
- -365, -351, 143, -350, -351, -351, -294, 92, 31, 132,
- 132, 132, 132, 585, 234, 34, -287, 625, 149, 677,
- 633, -342, -59, 248, 248, -313, -313, -313, 94, 94,
- -282, 730, -183, -139, 298, 157, 287, 287, 245, 300,
- 245, 300, -190, 311, 314, 312, 313, 310, 315, 316,
- 317, 40, 40, 40, 40, 40, 40, 299, 301, 303,
- 289, -190, -190, -285, 81, -185, -190, 28, -300, 94,
- 94, -190, -283, -283, -190, -283, -283, -190, -414, 330,
- -294, 364, 688, 690, -123, 422, 92, 585, 25, -124,
- 25, -418, -410, 125, 126, -216, -216, -216, -209, -150,
- -153, -150, 148, 269, -150, -150, -418, -218, -419, -296,
- 27, 92, 82, -419, 173, 92, -419, -419, 92, 17,
- 92, -226, -224, 155, -145, -419, 92, -419, -419, -210,
- -145, -145, -145, -145, -419, -419, -419, -419, -419, -419,
- -419, -419, -419, -419, -210, -419, 92, 92, 17, -317,
- 27, -419, -419, -419, -419, -419, -225, -419, 17, -419,
- 82, 92, 168, 92, -419, -419, -419, 92, 92, -419,
+ -145, -145, -145, -145, -145, -210, -210, -210, -210, -210,
+ -145, -419, -145, -164, -148, 100, -261, 109, 96, -145,
+ -145, -145, -145, -145, -145, -211, -296, -301, -292, -293,
+ -210, -211, -211, -210, -210, -145, -145, -145, -145, -145,
+ -145, -145, -145, -419, -145, -145, -145, -145, -145, -253,
+ -419, -210, 92, -401, 424, 425, 697, -303, 283, -302,
+ 27, -211, 94, 17, -263, 82, -294, -235, -235, 68,
+ 69, 64, -131, -132, -136, -419, -37, 27, -255, -294,
+ 636, 636, 67, 94, -332, -272, 379, 380, 186, -145,
+ -145, 92, -234, 29, 30, -190, -297, 177, -301, -190,
+ -264, 283, -190, -168, -170, -171, -172, -193, -217, -418,
+ -173, -31, 607, 604, 17, -183, -184, -192, -300, -270,
+ -314, -269, 92, 423, 425, 426, 81, 129, -145, -333,
+ 185, -361, -360, -359, -342, -344, -345, -346, 93, -333,
+ -338, 385, 384, -330, -330, -330, -330, -330, -332, -332,
+ -332, -332, 91, 91, -330, -330, -330, -330, -335, 91,
+ -335, -335, -336, -335, 91, -336, -337, 91, -337, -372,
+ -145, -369, -368, -366, -367, 257, 105, 679, 635, 587,
+ 628, 669, 82, -364, -234, 100, -419, -143, -286, 252,
+ -370, -367, -294, -294, -294, -286, 95, 94, 95, 94,
+ 95, 94, -112, -60, -1, 736, 737, 738, 92, 22,
+ -343, -342, -59, 308, -375, -376, 283, -371, -365, -351,
+ 145, -350, -351, -351, -294, 92, 31, 134, 134, 134,
+ 134, 587, 236, 34, -287, 627, 151, 679, 635, -342,
+ -59, 250, 250, -313, -313, -313, 94, 94, -282, 732,
+ -183, -139, 300, 159, 289, 289, 247, 302, 247, 302,
+ -190, 313, 316, 314, 315, 312, 317, 318, 319, 40,
+ 40, 40, 40, 40, 40, 301, 303, 305, 291, -190,
+ -190, -285, 81, -185, -190, 28, -300, 94, 94, -190,
+ -283, -283, -190, -283, -283, -190, -414, 332, -294, 366,
+ 690, 692, -123, 424, 92, 587, 25, -124, 25, -418,
+ -410, 127, 128, -216, -216, -216, -209, -150, -153, -150,
+ 150, 271, -150, -150, -418, -218, -419, -296, 27, 92,
+ 82, -419, 175, 92, -419, -419, 92, 17, 92, -226,
+ -224, 157, -145, -419, 92, -419, -419, -210, -145, -145,
+ -145, -145, -419, -419, -419, -419, -419, -419, -419, -419,
+ -419, -419, -210, -419, 92, 92, 17, -317, 27, -419,
+ -419, -419, -419, 92, -419, -419, -225, -419, 17, -419,
+ 82, 92, 170, 92, -419, -419, -419, 92, 92, -419,
-419, 92, -419, 92, -419, -419, -419, -419, -419, -419,
92, -419, 92, -419, -419, -419, 92, -419, 92, -419,
-419, 92, -419, 92, -419, 92, -419, 92, -419, 92,
@@ -9205,150 +9248,150 @@ var yyChk = [...]int{
92, -419, 92, 92, -419, 92, 92, 92, -419, 92,
92, 92, 92, -419, -419, -419, -419, 92, 92, 92,
92, 92, 92, 92, 92, 92, 92, -419, -419, -419,
- -419, -419, -419, 92, -94, 610, -419, -419, 92, -419,
- 92, 92, 92, 92, 92, -419, -418, 228, -419, -419,
+ -419, -419, -419, 92, -94, 612, -419, -419, 92, -419,
+ 92, 92, 92, 92, 92, -419, -418, 230, -419, -419,
-419, -419, -419, 92, 92, 92, 92, 92, 92, -419,
-419, -419, 92, 92, -419, 92, -419, 92, -419, -400,
- 694, 423, -197, -196, -194, 79, 249, 80, -418, -302,
+ 696, 425, -197, -196, -194, 79, 251, 80, -418, -302,
-419, -158, -261, -262, -261, -203, -294, 100, 109, -237,
-167, 92, -169, 17, -216, 93, 92, -332, -241, -247,
- -280, -294, 94, 184, -334, 184, -334, 377, 378, -233,
- 228, -198, 18, -202, 34, 62, -29, -418, -418, 34,
+ -280, -294, 94, 186, -334, 186, -334, 379, 380, -233,
+ 230, -198, 18, -202, 34, 62, -29, -418, -418, 34,
92, -186, -188, -187, -189, 71, 75, 77, 72, 73,
74, 78, -308, 27, -31, -168, -31, -418, -190, -183,
- -420, 17, 82, -420, 92, 228, -271, -274, 425, 422,
- 428, -386, 94, -111, 92, -359, -346, -238, -140, 45,
- -339, 384, -332, 593, -332, -341, 94, -341, 100, 100,
+ -420, 17, 82, -420, 92, 230, -271, -274, 427, 424,
+ 430, -386, 94, -111, 92, -359, -346, -238, -140, 45,
+ -339, 386, -332, 595, -332, -341, 94, -341, 100, 100,
100, 93, -49, -44, -45, 35, 86, -366, -353, 94,
- 44, -353, -353, -294, 93, -234, -139, -190, 149, 81,
- -370, -370, -370, -300, -2, 733, 739, 143, 91, 389,
- 21, -255, 92, 93, -219, 307, 93, -113, -294, 93,
- 91, -351, -351, -294, -418, 245, 33, 33, 677, 633,
- 625, -59, -219, -218, -294, -333, 732, 731, 93, 247,
- 305, -144, 442, -141, 94, 95, -190, -190, -190, -190,
- -190, -190, 237, 234, 412, -409, 318, -409, 290, 248,
- -183, -190, 92, -84, 264, 259, -305, -305, 35, -190,
- 422, 706, 704, -145, 148, 269, -162, -153, -119, -119,
- -150, -315, 184, 350, 268, 348, 344, 364, 355, 382,
- 346, 383, 341, 340, 339, -315, -313, -150, -210, -145,
- -145, -145, 156, -145, 154, -145, -95, -94, -419, -419,
+ 44, -353, -353, -294, 93, -234, -139, -190, 151, 81,
+ -370, -370, -370, -300, -2, 735, 741, 145, 91, 391,
+ 21, -255, 92, 93, -219, 309, 93, -113, -294, 93,
+ 91, -351, -351, -294, -418, 247, 33, 33, 679, 635,
+ 627, -59, -219, -218, -294, -333, 734, 733, 93, 249,
+ 307, -144, 444, -141, 94, 95, -190, -190, -190, -190,
+ -190, -190, 239, 236, 414, -409, 320, -409, 292, 250,
+ -183, -190, 92, -84, 266, 261, -305, -305, 35, -190,
+ 424, 708, 706, -145, 150, 271, -162, -153, -119, -119,
+ -150, -315, 186, 352, 270, 350, 346, 366, 357, 384,
+ 348, 385, 343, 342, 341, -315, -313, -150, -210, -145,
+ -145, -145, 158, -145, 156, -145, -95, -94, -419, -419,
-419, -419, -419, -95, -95, -95, -95, -95, -95, -95,
- -95, -95, -95, -230, -145, -145, -145, -419, 184, 350,
- 17, -145, -313, -145, -145, -145, -145, -145, -145, -145,
+ -95, -95, -95, -230, -145, -145, -145, -419, 186, 352,
+ -95, -145, 17, -145, -313, -145, -145, -145, -145, -145,
-145, -145, -145, -145, -145, -145, -145, -145, -145, -145,
-145, -145, -145, -145, -145, -145, -145, -145, -145, -145,
- -145, -145, -145, -145, -145, -145, -145, -145, -383, -145,
- -210, -145, -210, -145, -145, -145, -145, -145, -384, -384,
- -384, -384, -384, -210, -210, -210, -210, -145, -418, -294,
- -98, -97, -96, 660, 249, -94, -164, -98, -164, 227,
- -145, 227, 227, 227, -145, -211, -296, -145, -145, -145,
- -145, -145, -145, -145, -145, -145, -145, -194, -347, 287,
- -347, 287, -347, -265, 92, -276, 25, 17, 62, 62,
- -167, -198, -132, -168, -294, -244, 687, -250, 51, -248,
- -249, 52, -245, 53, 61, -334, -334, 175, -235, -145,
- -266, 81, -267, -275, -218, -213, -215, -214, -418, -254,
- -419, -294, -265, -267, -170, -171, -171, -170, -171, 71,
- 71, 71, 76, 71, 76, 71, -187, -300, -419, -145,
- -303, 82, -168, -168, -192, -300, 175, 422, 426, 427,
- -359, -407, 123, 149, 33, 81, 380, 105, -405, 183,
- 622, 672, 677, 633, 626, 667, -406, 251, 142, 143,
- 263, 27, 46, 93, 92, 93, 92, 93, 93, 92,
- -288, -287, -45, -44, -353, -353, 100, -386, 94, 94,
- 247, 28, -190, 81, 81, 81, -114, 737, 100, 91,
- -3, 86, -145, 91, 22, -342, -218, -377, -327, -378,
- -328, -329, -5, -6, -354, -117, 62, 105, -63, 49,
- 246, 717, 718, 132, -418, 730, -369, -255, -373, -375,
- -190, -149, -418, -161, -147, -146, -148, -154, 173, 174,
- 268, 346, 347, -219, -190, -138, 296, 304, 91, -142,
- 96, -388, 82, 287, 380, 287, 380, 94, -411, 319,
- 94, -411, -190, -84, -49, -190, -283, -283, 35, -386,
- -419, -162, -153, -126, 168, 585, -318, 592, -330, -330,
- -330, -337, -330, 336, -330, 336, -330, -419, -419, -419,
- 92, -419, 25, -419, 92, -145, 92, -95, -95, -95,
- -95, -95, -122, 481, 92, 92, -419, 91, 91, -145,
- -419, -419, -419, 92, -419, -419, -419, -419, -419, -419,
- -419, -419, -419, -419, -419, -419, -419, 92, -419, 92,
- -419, 92, -419, 92, -419, 92, -419, 92, -419, 92,
- -419, 92, -419, 92, -419, 92, -419, 92, -419, 92,
- -419, 92, -419, 92, -419, 92, -419, 92, -419, -419,
- 92, -419, -419, -419, 92, -419, 92, -419, 92, -419,
- -419, -419, 92, -316, 678, -419, -419, -419, -419, -419,
- -419, -419, -419, -419, -419, -419, -93, -295, -94, 642,
- 642, -419, -94, -227, 92, -150, -419, -150, -150, -150,
- -419, -419, -419, 92, -419, 92, 92, -419, 92, -419,
- 92, -419, -419, -419, -419, 92, -195, 25, -418, -195,
- -418, -195, -419, -261, -190, -198, -228, 19, -241, 56,
- 356, -252, -251, 60, 52, -249, 22, 54, 22, 32,
- -266, 92, 157, -307, 92, 27, -419, -419, 92, 62,
- 228, -419, -198, -181, -180, 81, 82, -182, 81, -180,
- 71, 71, -256, 92, -264, -168, -198, -198, 228, 123,
- -418, -149, 15, 94, 94, -386, -404, 721, 722, 33,
- 100, -353, -353, 143, 143, -190, 91, -332, 94, -332,
- 100, 100, 33, 87, 88, 89, 33, 83, 84, 85,
- -190, -190, -190, -190, -374, 91, 22, -145, 91, 157,
- 93, -255, -255, 283, 168, -353, 715, 289, 289, -353,
- -353, -353, -116, -115, 737, 93, -419, 92, -340, 585,
- 588, -145, -155, -155, -256, 93, -382, 585, -387, -294,
- -294, -294, -294, 100, 102, -419, 583, 78, 586, -419,
- -332, -145, -145, -145, -145, -235, 94, -145, -145, 100,
- 100, -419, -145, -145, -145, -145, -145, -145, -145, -145,
-145, -145, -145, -145, -145, -145, -145, -145, -145, -145,
- -145, -145, -210, -145, -419, -178, -177, -179, 698, 123,
- 33, -315, -419, -212, 281, -101, -100, -99, 17, -419,
- -145, -119, -119, -119, -119, -145, -145, -145, -145, -145,
- -145, -418, 71, 21, 19, -258, -294, 251, -418, -258,
- -418, -303, -228, -229, 20, 22, -242, 58, -240, 57,
- -240, -251, 22, 22, 94, 22, 94, 143, -275, -145,
- -215, -302, 62, -29, -294, -213, -294, -230, -145, 91,
- -145, -158, -198, -198, -145, -205, 505, 507, 508, 509,
- 506, 511, 512, 513, 514, 515, 516, 517, 518, 519,
- 520, 510, 521, 482, 483, 484, 112, 114, 113, 485,
- 486, 487, 350, 533, 534, 528, 531, 532, 530, 529,
- 365, 366, 488, 551, 552, 556, 555, 553, 554, 557,
- 560, 561, 562, 563, 564, 565, 567, 566, 558, 559,
- 536, 535, 537, 538, 539, 540, 541, 542, 544, 543,
- 545, 546, 547, 548, 549, 550, 568, 569, 570, 571,
- 572, 574, 573, 578, 577, 575, 576, 580, 579, 489,
- 490, 115, 116, 117, 118, 119, 120, 121, 491, 494,
- 492, 495, 496, 497, 502, 503, 498, 499, 500, 501,
- 504, 376, 374, 375, 371, 370, 369, 429, 434, 435,
- 437, 522, 523, 524, 525, 526, 527, 679, 680, 681,
- 682, 683, 684, 685, 686, 94, 94, 91, -145, 93,
- 93, -256, -373, -60, 93, -257, -255, 100, 93, 284,
- -214, -418, 94, -353, -353, -353, 100, 100, -302, -419,
- 92, -294, -406, -375, 589, 589, -419, 27, -381, -380,
- -296, 91, 82, 67, 584, 587, -419, -419, -419, 92,
- -419, -419, -419, 93, 93, -419, -419, -419, -419, -419,
+ -383, -145, -210, -145, -210, -145, -145, -145, -145, -145,
+ -384, -384, -384, -384, -384, -210, -210, -210, -210, -145,
+ -418, -294, -98, -97, -96, 662, 251, -94, -164, -98,
+ -164, 229, -145, 229, 229, 229, -145, -211, -296, -145,
+ -145, -145, -145, -145, -145, -145, -145, -145, -145, -194,
+ -347, 289, -347, 289, -347, -265, 92, -276, 25, 17,
+ 62, 62, -167, -198, -132, -168, -294, -244, 689, -250,
+ 51, -248, -249, 52, -245, 53, 61, -334, -334, 177,
+ -235, -145, -266, 81, -267, -275, -218, -213, -215, -214,
+ -418, -254, -419, -294, -265, -267, -170, -171, -171, -170,
+ -171, 71, 71, 71, 76, 71, 76, 71, -187, -300,
+ -419, -145, -303, 82, -168, -168, -192, -300, 177, 424,
+ 428, 429, -359, -407, 125, 151, 33, 81, 382, 105,
+ -405, 185, 624, 674, 679, 635, 628, 669, -406, 253,
+ 144, 145, 265, 27, 46, 93, 92, 93, 92, 93,
+ 93, 92, -288, -287, -45, -44, -353, -353, 100, -386,
+ 94, 94, 249, 28, -190, 81, 81, 81, -114, 739,
+ 100, 91, -3, 86, -145, 91, 22, -342, -218, -377,
+ -327, -378, -328, -329, -5, -6, -354, -117, 62, 105,
+ -63, 49, 248, 719, 720, 134, -418, 732, -369, -255,
+ -373, -375, -190, -149, -418, -161, -147, -146, -148, -154,
+ 175, 176, 270, 348, 349, -219, -190, -138, 298, 306,
+ 91, -142, 96, -388, 82, 289, 382, 289, 382, 94,
+ -411, 321, 94, -411, -190, -84, -49, -190, -283, -283,
+ 35, -386, -419, -162, -153, -126, 170, 587, -318, 594,
+ -330, -330, -330, -337, -330, 338, -330, 338, -330, -419,
+ -419, -419, 92, -419, 25, -419, 92, -145, 92, -95,
+ -95, -95, -95, -95, -122, 483, 92, 92, -419, 91,
+ 91, -419, -145, -419, -419, -419, 92, -419, -419, -419,
+ -419, -419, -419, -419, -419, -419, -419, -419, -419, -419,
+ 92, -419, 92, -419, 92, -419, 92, -419, 92, -419,
+ 92, -419, 92, -419, 92, -419, 92, -419, 92, -419,
+ 92, -419, 92, -419, 92, -419, 92, -419, 92, -419,
+ 92, -419, -419, 92, -419, -419, -419, 92, -419, 92,
+ -419, 92, -419, -419, -419, 92, -316, 680, -419, -419,
+ -419, -419, -419, -419, -419, -419, -419, -419, -419, -93,
+ -295, -94, 644, 644, -419, -94, -227, 92, -150, -419,
+ -150, -150, -150, -419, -419, -419, 92, -419, 92, 92,
+ -419, 92, -419, 92, -419, -419, -419, -419, 92, -195,
+ 25, -418, -195, -418, -195, -419, -261, -190, -198, -228,
+ 19, -241, 56, 358, -252, -251, 60, 52, -249, 22,
+ 54, 22, 32, -266, 92, 159, -307, 92, 27, -419,
+ -419, 92, 62, 230, -419, -198, -181, -180, 81, 82,
+ -182, 81, -180, 71, 71, -256, 92, -264, -168, -198,
+ -198, 230, 125, -418, -149, 15, 94, 94, -386, -404,
+ 723, 724, 33, 100, -353, -353, 145, 145, -190, 91,
+ -332, 94, -332, 100, 100, 33, 87, 88, 89, 33,
+ 83, 84, 85, -190, -190, -190, -190, -374, 91, 22,
+ -145, 91, 159, 93, -255, -255, 285, 170, -353, 717,
+ 291, 291, -353, -353, -353, -116, -115, 739, 93, -419,
+ 92, -340, 587, 590, -145, -155, -155, -256, 93, -382,
+ 587, -387, -294, -294, -294, -294, 100, 102, -419, 585,
+ 78, 588, -419, -332, -145, -145, -145, -145, -235, 94,
+ -145, -145, 100, 100, -95, -419, -145, -145, -145, -145,
+ -145, -145, -145, -145, -145, -145, -145, -145, -145, -145,
+ -145, -145, -145, -145, -145, -145, -210, -145, -419, -178,
+ -177, -179, 700, 125, 33, -315, -419, -212, 283, -101,
+ -100, -99, 17, -419, -145, -119, -119, -119, -119, -145,
+ -145, -145, -145, -145, -145, -418, 71, 21, 19, -258,
+ -294, 253, -418, -258, -418, -303, -228, -229, 20, 22,
+ -242, 58, -240, 57, -240, -251, 22, 22, 94, 22,
+ 94, 145, -275, -145, -215, -302, 62, -29, -294, -213,
+ -294, -230, -145, 91, -145, -158, -198, -198, -145, -205,
+ 507, 509, 510, 511, 508, 513, 514, 515, 516, 517,
+ 518, 519, 520, 521, 522, 512, 523, 484, 485, 486,
+ 112, 114, 113, 122, 123, 487, 488, 489, 352, 535,
+ 536, 530, 533, 534, 532, 531, 367, 368, 490, 553,
+ 554, 558, 557, 555, 556, 559, 562, 563, 564, 565,
+ 566, 567, 569, 568, 560, 561, 538, 537, 539, 540,
+ 541, 542, 543, 544, 546, 545, 547, 548, 549, 550,
+ 551, 552, 570, 571, 572, 573, 574, 576, 575, 580,
+ 579, 577, 578, 582, 581, 491, 492, 115, 116, 117,
+ 118, 119, 120, 121, 493, 496, 494, 497, 498, 499,
+ 504, 505, 500, 501, 502, 503, 506, 378, 376, 377,
+ 373, 372, 371, 431, 436, 437, 439, 524, 525, 526,
+ 527, 528, 529, 681, 682, 683, 684, 685, 686, 687,
+ 688, 94, 94, 91, -145, 93, 93, -256, -373, -60,
+ 93, -257, -255, 100, 93, 286, -214, -418, 94, -353,
+ -353, -353, 100, 100, -302, -419, 92, -294, -406, -375,
+ 591, 591, -419, 27, -381, -380, -296, 91, 82, 67,
+ 586, 589, -419, -419, -419, 92, -419, -419, -419, 93,
+ 93, -419, -419, -419, -419, -419, -419, -419, -419, -419,
-419, -419, -419, -419, -419, -419, -419, -419, -419, -419,
- -419, -419, -419, -419, -419, -419, -419, 92, -419, -177,
- -179, -419, 81, -158, -230, 22, -98, 306, 308, -98,
- -419, -419, -419, -419, -419, 92, -419, -419, 92, -419,
- 92, -419, -419, -258, -419, 22, 22, 92, -419, -258,
- -419, -258, -197, -229, -108, -107, -106, 616, -145, -210,
- -243, 59, 81, 127, 94, 94, 94, 15, -418, -213,
- 228, -307, -235, -255, -175, 389, -230, -419, -255, 93,
- 27, 93, 739, 143, 93, -214, -125, -418, 280, -302,
- 94, 94, -115, -118, -29, 92, 157, -255, -190, 67,
- -145, -210, -419, 81, 597, 698, -92, -91, -88, 709,
- 735, -210, -94, -94, -145, -145, -145, -419, -294, 251,
- -419, -419, -108, 92, -105, -104, -294, -319, 585, 81,
- 127, -267, -255, -307, -294, 93, -419, -418, -235, 93,
- -239, -29, 91, -3, 280, -327, -378, -328, -329, -5,
- -6, -354, -82, 585, -380, -358, -300, -296, 94, 100,
- 93, 585, -419, -419, -90, 151, 707, 675, -155, 227,
- -419, 92, -419, 92, -419, 92, -106, 92, 27, 590,
- -419, -303, -176, -174, -294, 639, -397, -396, 581, -407,
- -403, 123, 149, 105, -405, 677, 633, 133, 134, -82,
- -145, 91, -419, -83, 295, 694, 228, -388, 586, -90,
- 708, 653, 628, 653, 628, -150, -145, -145, -145, -104,
- -418, -419, 92, 25, -320, -62, 650, -394, -395, 81,
- -398, 395, 649, 670, 123, 94, 93, -255, 256, -301,
- -382, 587, 148, -119, -419, 92, -419, 92, -419, -93,
- -174, 646, -333, -158, -395, 81, -394, 81, 16, 15,
- -4, 738, 93, 297, -90, 653, 628, -145, -145, -419,
- -61, 28, -175, -393, 264, 259, 262, 34, -393, 100,
- -4, -419, -419, 650, 258, 33, 123, -158, -178, -177,
- -177,
+ -419, -419, -419, 92, -419, -177, -179, -419, 81, -158,
+ -230, 22, -98, 308, 310, -98, -419, -419, -419, -419,
+ -419, 92, -419, -419, 92, -419, 92, -419, -419, -258,
+ -419, 22, 22, 92, -419, -258, -419, -258, -197, -229,
+ -108, -107, -106, 618, -145, -210, -243, 59, 81, 129,
+ 94, 94, 94, 15, -418, -213, 230, -307, -235, -255,
+ -175, 391, -230, -419, -255, 93, 27, 93, 741, 145,
+ 93, -214, -125, -418, 282, -302, 94, 94, -115, -118,
+ -29, 92, 159, -255, -190, 67, -145, -210, -419, 81,
+ 599, 700, -92, -91, -88, 711, 737, -210, -94, -94,
+ -145, -145, -145, -419, -294, 253, -419, -419, -108, 92,
+ -105, -104, -294, -319, 587, 81, 129, -267, -255, -307,
+ -294, 93, -419, -418, -235, 93, -239, -29, 91, -3,
+ 282, -327, -378, -328, -329, -5, -6, -354, -82, 587,
+ -380, -358, -300, -296, 94, 100, 93, 587, -419, -419,
+ -90, 153, 709, 677, -155, 229, -419, 92, -419, 92,
+ -419, 92, -106, 92, 27, 592, -419, -303, -176, -174,
+ -294, 641, -397, -396, 583, -407, -403, 125, 151, 105,
+ -405, 679, 635, 135, 136, -82, -145, 91, -419, -83,
+ 297, 696, 230, -388, 588, -90, 710, 655, 630, 655,
+ 630, -150, -145, -145, -145, -104, -418, -419, 92, 25,
+ -320, -62, 652, -394, -395, 81, -398, 397, 651, 672,
+ 125, 94, 93, -255, 258, -301, -382, 589, 150, -119,
+ -419, 92, -419, 92, -419, -93, -174, 648, -333, -158,
+ -395, 81, -394, 81, 16, 15, -4, 740, 93, 299,
+ -90, 655, 630, -145, -145, -419, -61, 28, -175, -393,
+ 266, 261, 264, 34, -393, 100, -4, -419, -419, 652,
+ 260, 33, 125, -158, -178, -177, -177,
}
var yyDef = [...]int{
@@ -9357,438 +9400,439 @@ var yyDef = [...]int{
19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 70, 72, 73, 880, 880, 880, 0, 880, 0,
- 0, 880, -2, -2, 880, 1629, 0, 880, 0, 875,
+ 0, 880, -2, -2, 880, 1631, 0, 880, 0, 875,
0, -2, 797, 803, 0, 812, -2, 0, 0, 880,
- 880, 2259, 2259, 875, 0, 0, 0, 0, 0, 880,
- 880, 880, 880, 1634, 1487, 50, 880, 0, 85, 86,
- 830, 831, 832, 65, 0, 2257, 881, 1, 3, 71,
- 75, 0, 0, 0, 58, 1496, 0, 78, 0, 0,
- 884, 0, 0, 1612, 880, 880, 0, 126, 127, 0,
+ 880, 2263, 2263, 875, 0, 0, 0, 0, 0, 880,
+ 880, 880, 880, 1636, 1489, 50, 880, 0, 85, 86,
+ 830, 831, 832, 65, 0, 2261, 881, 1, 3, 71,
+ 75, 0, 0, 0, 58, 1498, 0, 78, 0, 0,
+ 884, 0, 0, 1614, 880, 880, 0, 126, 127, 0,
0, 0, -2, 130, -2, 159, 160, 161, 0, 166,
607, 526, 578, 524, 563, -2, 512, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 529,
- 401, 401, 0, 0, -2, 512, 512, 512, 1614, 0,
+ 401, 401, 0, 0, -2, 512, 512, 512, 1616, 0,
0, 0, 560, 463, 401, 401, 401, 0, 401, 401,
401, 401, 0, 0, 401, 401, 401, 401, 401, 401,
401, 401, 401, 401, 401, 401, 401, 401, 401, 401,
- 401, 1514, 165, 1630, 1627, 1628, 1787, 1788, 1789, 1790,
- 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800,
- 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810,
- 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820,
- 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830,
- 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840,
- 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850,
- 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860,
- 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870,
- 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880,
- 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890,
- 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900,
- 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910,
- 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920,
- 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930,
- 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940,
- 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950,
- 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960,
- 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970,
- 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980,
- 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990,
- 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
- 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020,
- 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030,
- 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040,
- 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050,
- 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060,
- 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070,
- 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080,
- 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090,
- 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100,
- 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110,
- 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120,
- 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130,
- 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140,
- 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150,
- 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160,
- 2161, 2162, 2163, 2164, 2165, 2166, 2167, 2168, 2169, 2170,
- 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180,
- 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190,
- 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200,
- 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210,
- 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, 2220,
- 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230,
- 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240,
- 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250,
- 2251, 2252, 2253, 2254, 2255, 2256, 0, 1606, 0, 720,
- 980, 0, 876, 877, 0, 786, 786, 0, 786, 786,
- 786, 786, 0, 0, 0, 734, 0, 0, 0, 0,
- 783, 0, 750, 751, 0, 783, 0, 757, 789, 0,
- 0, 764, 786, 786, 767, 2260, 0, 2260, 2260, 1597,
- 0, 780, 778, 792, 793, 42, 796, 799, 800, 801,
- 802, 805, 0, 816, 819, 1623, 1624, 0, 821, 826,
- 843, 844, 0, 45, 1140, 0, 1004, 0, 1015, -2,
- 1026, 1043, 1044, 1045, 1046, 1047, 1049, 1050, 1051, 0,
- 0, 0, 0, 1056, 1057, 0, 0, 0, 0, 0,
- 1120, 0, 0, 0, 0, 1987, 1458, 0, 0, 1420,
- 1420, 1156, 1420, 1420, 1422, 1422, 1422, 1840, 1979, 1988,
- 2166, 1801, 1807, 1808, 1809, 2112, 2113, 2114, 2115, 2204,
- 2205, 2209, 1903, 1796, 2179, 2180, 0, 2256, 1940, 1948,
- 1949, 1973, 2075, 2189, 1819, 1968, 2038, 1900, 1922, 1923,
- 2056, 2057, 1944, 1945, 1926, 2118, 2120, 2136, 2137, 2122,
- 2124, 2133, 2139, 2144, 2123, 2135, 2140, 2153, 2157, 2160,
- 2161, 2162, 2130, 2128, 2141, 2145, 2147, 2149, 2155, 2158,
- 2131, 2129, 2142, 2146, 2148, 2150, 2156, 2159, 2117, 2121,
- 2125, 2134, 2152, 2132, 2151, 2126, 2138, 2143, 2154, 2127,
- 2119, 1938, 1941, 1929, 1930, 1932, 1934, 1939, 1946, 1952,
- 1931, 1951, 1950, 0, 1927, 1928, 1933, 1943, 1947, 1935,
- 1936, 1937, 1942, 1953, 1994, 1993, 1992, 2037, 1964, 2036,
- 0, 0, 0, 0, 0, 1790, 1845, 1846, 2163, 1342,
- 1343, 1344, 1345, 0, 0, 0, 0, 0, 0, 0,
- 291, 292, 1471, 1472, 44, 1139, 1593, 1422, 1422, 1422,
- 1422, 1422, 1422, 1078, 1079, 1080, 1081, 1082, 1108, 1109,
- 1115, 1116, 2051, 2052, 2053, 2054, 1883, 2199, 1892, 1893,
- 2033, 2034, 1905, 1906, 2230, 2231, -2, -2, -2, 232,
- 233, 234, 235, 236, 237, 238, 239, 0, 1844, 2177,
- 2178, 228, 0, 0, 296, 293, 294, 295, 1122, 1123,
- 249, 250, 251, 252, 253, 254, 255, 256, 257, 258,
- 259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
- 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
- 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
- 289, 290, 298, 299, 2259, 0, 853, 0, 0, 0,
- 0, 0, 0, 1635, 1636, 1496, 0, 1488, 1487, 63,
- 0, 880, -2, 0, 0, 0, 0, 47, 0, 52,
- 937, 883, 77, 76, 1536, 1539, 0, 0, 0, 59,
- 1497, 67, 69, 1498, 0, 885, 886, 0, 913, 917,
- 0, 0, 0, 1613, 1612, 1612, 102, 0, 0, 103,
- 123, 124, 125, 0, 0, 109, 110, 1599, 1600, 43,
- 0, 0, 177, 178, 0, 1096, 428, 0, 173, 0,
- 421, 360, 0, 1514, 0, 0, 0, 0, 0, 880,
- 0, 1607, 154, 155, 162, 163, 164, 401, 401, 401,
- 575, 0, 0, 165, 165, 533, 534, 535, 0, 0,
- -2, 426, 0, 513, 0, 0, 415, 415, 419, 417,
- 418, 0, 0, 0, 0, 0, 0, 0, 0, 552,
- 0, 553, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 668, 0, 402, 0, 573, 574, 464, 0, 0,
- 0, 0, 0, 0, 0, 0, 1615, 1616, 0, 550,
- 551, 0, 0, 0, 401, 401, 0, 0, 0, 0,
- 401, 401, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 153, 1527, 0, 0, 0, -2, 0, 712, 0, 0,
- 0, 1608, 1608, 0, 719, 0, 0, 0, 724, 0,
- 0, 725, 0, 783, 783, 781, 782, 727, 728, 729,
- 730, 786, 0, 0, 410, 411, 412, 783, 786, 0,
- 786, 786, 786, 786, 783, 783, 783, 786, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 2260, 789, 786,
- 0, 758, 0, 759, 760, 761, 762, 765, 766, 768,
- 2261, 2262, 1625, 1626, 1637, 1638, 1639, 1640, 1641, 1642,
- 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652,
- 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662,
- 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672,
- 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682,
- 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692,
- 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702,
- 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712,
- 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722,
- 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732,
- 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742,
- 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752,
- 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762,
- 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772,
- 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782,
- 1783, 1784, 1785, 1786, 2260, 2260, 772, 776, 1598, 798,
- 804, 806, 807, 0, 0, 817, 820, 837, 49, 1891,
- 825, 49, 827, 828, 829, 855, 856, 861, 0, 0,
- 0, 0, 867, 868, 869, 0, 0, 872, 873, 874,
- 0, 0, 0, 0, 0, 1002, 0, 0, 1128, 1129,
- 1130, 1131, 1132, 1133, 1134, 1135, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1027, 1028, 0, 0, 0, 1052,
- 1053, 1054, 1055, 1058, 0, 1069, 0, 1071, 1467, -2,
- 0, 0, 0, 1063, 1064, 0, 0, 0, 1618, 1618,
- 0, 0, 0, 1459, 0, 0, 1154, 0, 1155, 1157,
- 1158, 1159, 0, 1160, 1161, 890, 890, 890, 890, 890,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 890, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1618, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 141,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1618, 0, 0,
- 1618, 1618, 0, 0, 220, 221, 222, 223, 224, 225,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 297, 240, 241, 242, 243, 244,
- 245, 300, 246, 247, 248, 1139, 0, 0, 0, 46,
- 845, 846, 0, 963, 1618, 0, 0, 896, 0, 1633,
- 57, 66, 68, 1496, 61, 1496, 0, 900, 0, 0,
- -2, -2, 901, 902, 906, 907, 908, 909, 910, 54,
- 2258, 55, 0, 74, 0, 48, 0, 0, 1537, 0,
- 1540, 0, 0, 0, 374, 1544, 0, 0, 1489, 1490,
- 1493, 0, 914, 1985, 918, 0, 920, 921, 0, 0,
- 100, 0, 979, 0, 0, 0, 111, 0, 113, 114,
- 0, 0, 0, 385, 1601, 1602, 1603, -2, 408, 0,
- 385, 369, 308, 309, 310, 360, 312, 360, 360, 360,
- 360, 374, 374, 374, 374, 343, 344, 345, 346, 347,
- 0, 0, 329, 360, 360, 360, 360, 350, 351, 352,
- 353, 354, 355, 356, 357, 313, 314, 315, 316, 317,
- 318, 319, 320, 321, 362, 362, 362, 362, 362, 366,
- 366, 0, 1097, 0, 389, 0, 1493, 0, 0, 1527,
- 1610, 1620, 0, 0, 0, 1610, 132, 0, 0, 0,
- 576, 618, 527, 564, 577, 0, 530, 531, -2, 0,
- 0, 512, 0, 514, 0, 409, 0, -2, 0, 419,
- 0, 415, 419, 416, 419, 407, 420, 554, 555, 556,
- 0, 558, 559, 648, 949, 0, 0, 0, 0, 0,
- 654, 655, 656, 0, 658, 659, 660, 661, 662, 663,
- 664, 665, 666, 667, 565, 566, 567, 568, 569, 570,
- 571, 572, 0, 0, 0, 0, 514, 0, 561, 0,
- 0, 465, 466, 467, 0, 0, 470, 471, 472, 473,
- 0, 0, 476, 477, 478, 966, 967, 479, 480, 505,
- 506, 507, 481, 482, 483, 484, 485, 486, 487, 499,
- 500, 501, 502, 503, 504, 488, 489, 490, 491, 492,
- 493, 496, 0, 147, 1518, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1608, 0, 0, 0, 0, 899, 981, 1631, 1632,
- 721, 0, 0, 787, 788, 0, 413, 414, 786, 786,
- 731, 773, 0, 786, 735, 774, 736, 738, 737, 739,
- 752, 753, 786, 742, 784, 785, 743, 744, 745, 746,
- 747, 748, 749, 769, 754, 755, 756, 790, 0, 794,
- 795, 770, 771, 0, 0, 810, 811, 0, 818, 840,
- 838, 839, 841, 833, 834, 835, 836, 0, 842, 0,
- 0, 858, 96, 863, 864, 865, 866, 878, 871, 1141,
- 999, 1000, 1001, 0, 1003, 1009, 0, 1124, 1126, 1007,
- 1008, 1011, 0, 0, 0, 1005, 1016, 1136, 1137, 1138,
- 0, 0, 0, 0, 0, 1020, 1024, 1029, 1030, 1031,
- 1032, 1033, 0, 1034, 0, 1037, 1038, 1039, 1040, 1041,
- 1042, 1048, 1435, 1436, 1437, 1067, 301, 302, 0, 1068,
- 0, 0, 0, 0, 0, 0, 0, 0, 1382, 1383,
- 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393,
- 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1140, 0,
- 1619, 0, 0, 0, 1465, 1462, 0, 0, 0, 1421,
- 1423, 0, 0, 0, 891, 892, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1402, 1403, 1404, 1405, 1406, 1407, 1408,
- 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418,
- 1419, 0, 0, 1438, 0, 0, 0, 0, 0, 1458,
- 0, 1073, 1074, 1075, 0, 0, 0, 0, 0, 0,
- 1200, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 142, 143, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1346, 1347, 1348, 1349,
- 41, 0, 0, 0, 0, 0, 0, 0, 1469, 0,
- -2, -2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1371, 0, 0, 0, 0,
- 0, 0, 1591, 0, 0, 848, 849, 851, 0, 983,
- 0, 964, 0, 0, 854, 0, 895, 0, 898, 60,
- 62, 904, 905, 0, 922, 911, 903, 56, 51, 0,
- 0, 941, 1538, 1541, 1542, 374, 1564, 0, 383, 383,
- 380, 1499, 1500, 0, 1492, 1494, 1495, 79, 919, 915,
- 0, 997, 0, 0, 978, 0, 925, 927, 928, 929,
- 961, 0, 932, 933, 0, 0, 0, 0, 0, 98,
- 980, 104, 0, 112, 0, 0, 117, 118, 105, 106,
- 107, 108, 0, 607, -2, 460, 179, 181, 182, 183,
- 174, -2, 372, 370, 371, 311, 374, 374, 337, 338,
- 339, 340, 341, 342, 0, 0, 330, 331, 332, 333,
- 322, 0, 323, 324, 325, 364, 0, 326, 327, 0,
- 328, 427, 0, 1501, 390, 391, 393, 401, 0, 396,
- 397, 0, 401, 401, 0, 422, 423, 0, 1493, 1518,
- 0, 0, 0, 1621, 1620, 1620, 1620, 0, 167, 168,
- 169, 170, 171, 172, 643, 0, 0, 619, 641, 642,
- 165, 0, 0, 175, 516, 515, 0, 675, 0, 425,
- 0, 0, 419, 419, 404, 405, 557, 0, 0, 650,
- 651, 652, 653, 0, 0, 0, 543, 454, 0, 544,
- 545, 514, 516, 0, 0, 385, 468, 469, 474, 475,
- 494, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 592, 593, 594, 597, 599, 518, 603,
- 605, 596, 598, 600, 518, 604, 606, 1515, 1516, 1517,
- 0, 0, 713, 0, 0, 451, 94, 1609, 718, 722,
- 723, 783, 741, 775, 783, 733, 740, 763, 808, 809,
- 814, 822, 823, 824, 862, 0, 0, 0, 0, 870,
- 0, 0, 1010, 1125, 1127, 1012, 1013, 1014, 1017, 0,
- 1021, 1025, 0, 0, 0, 0, 0, 1072, 1070, 1469,
- 0, 0, 0, 1121, 0, 0, 1144, 1145, 0, 0,
- 0, 0, 1463, 0, 0, 1152, 0, 1424, 1102, 0,
- 0, 0, 0, 0, 1102, 1102, 1102, 1102, 1102, 1102,
- 1102, 1102, 1102, 1102, 1487, 1179, 0, 0, 0, 0,
- 0, 1184, 1185, 1186, 1187, 1188, 0, 1190, 0, 1191,
- 0, 0, 0, 0, 1198, 1199, 1201, 0, 0, 1204,
- 1205, 0, 1207, 0, 1209, 1210, 1211, 1212, 1213, 1214,
- 0, 1216, 0, 1218, 1219, 1220, 0, 1222, 0, 1224,
- 1225, 0, 1227, 0, 1229, 0, 1232, 0, 1235, 0,
- 1238, 0, 1241, 0, 1244, 0, 1247, 0, 1250, 0,
- 1253, 0, 1256, 0, 1259, 0, 1262, 0, 1265, 0,
- 1268, 0, 1271, 0, 1274, 0, 1277, 1278, 1279, 0,
- 1281, 0, 1283, 0, 1286, 1287, 0, 1289, 0, 1292,
- 0, 1295, 0, 0, 1296, 0, 0, 0, 1300, 0,
- 0, 0, 0, 1309, 1310, 1311, 1312, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1323, 1324, 1325,
- 1326, 1327, 1328, 0, 1330, 0, 1103, 0, 0, 1103,
- 0, 0, 0, 0, 0, 1142, 1618, 0, 1425, 1426,
- 1427, 1428, 1429, 0, 0, 0, 0, 0, 0, 1369,
- 1370, 1372, 0, 0, 1375, 0, 1377, 0, 1592, 847,
+ 401, 1516, 165, 1632, 1629, 1630, 1789, 1790, 1791, 1792,
+ 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802,
+ 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812,
+ 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822,
+ 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832,
+ 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842,
+ 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852,
+ 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862,
+ 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872,
+ 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882,
+ 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892,
+ 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902,
+ 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912,
+ 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922,
+ 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932,
+ 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942,
+ 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952,
+ 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962,
+ 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972,
+ 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982,
+ 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992,
+ 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+ 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,
+ 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022,
+ 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032,
+ 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042,
+ 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052,
+ 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062,
+ 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072,
+ 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082,
+ 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092,
+ 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102,
+ 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112,
+ 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122,
+ 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132,
+ 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142,
+ 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152,
+ 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162,
+ 2163, 2164, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172,
+ 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182,
+ 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192,
+ 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202,
+ 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212,
+ 2213, 2214, 2215, 2216, 2217, 2218, 2219, 2220, 2221, 2222,
+ 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232,
+ 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2241, 2242,
+ 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252,
+ 2253, 2254, 2255, 2256, 2257, 2258, 2259, 2260, 0, 1608,
+ 0, 720, 980, 0, 876, 877, 0, 786, 786, 0,
+ 786, 786, 786, 786, 0, 0, 0, 734, 0, 0,
+ 0, 0, 783, 0, 750, 751, 0, 783, 0, 757,
+ 789, 0, 0, 764, 786, 786, 767, 2264, 0, 2264,
+ 2264, 1599, 0, 780, 778, 792, 793, 42, 796, 799,
+ 800, 801, 802, 805, 0, 816, 819, 1625, 1626, 0,
+ 821, 826, 843, 844, 0, 45, 1140, 0, 1004, 0,
+ 1015, -2, 1026, 1043, 1044, 1045, 1046, 1047, 1049, 1050,
+ 1051, 0, 0, 0, 0, 1056, 1057, 0, 0, 0,
+ 0, 0, 1120, 0, 0, 0, 0, 1991, 1460, 0,
+ 0, 1422, 1422, 1156, 1422, 1422, 1424, 1424, 1424, 1842,
+ 1983, 1992, 2170, 1803, 1809, 1810, 1811, 2116, 2117, 2118,
+ 2119, 2208, 2209, 2213, 1905, 1798, 2183, 2184, 0, 2260,
+ 1944, 1952, 1953, 1929, 1938, 1977, 2079, 2193, 1821, 1972,
+ 2042, 1902, 1924, 1925, 2060, 2061, 1948, 1949, 1928, 2122,
+ 2124, 2140, 2141, 2126, 2128, 2137, 2143, 2148, 2127, 2139,
+ 2144, 2157, 2161, 2164, 2165, 2166, 2134, 2132, 2145, 2149,
+ 2151, 2153, 2159, 2162, 2135, 2133, 2146, 2150, 2152, 2154,
+ 2160, 2163, 2121, 2125, 2129, 2138, 2156, 2136, 2155, 2130,
+ 2142, 2147, 2158, 2131, 2123, 1942, 1945, 1932, 1933, 1935,
+ 1937, 1943, 1950, 1956, 1934, 1955, 1954, 0, 1930, 1931,
+ 1936, 1947, 1951, 1939, 1940, 1941, 1946, 1957, 1998, 1997,
+ 1996, 2041, 1968, 2040, 0, 0, 0, 0, 0, 1792,
+ 1847, 1848, 2167, 1344, 1345, 1346, 1347, 0, 0, 0,
+ 0, 0, 0, 0, 291, 292, 1473, 1474, 44, 1139,
+ 1595, 1424, 1424, 1424, 1424, 1424, 1424, 1078, 1079, 1080,
+ 1081, 1082, 1108, 1109, 1115, 1116, 2055, 2056, 2057, 2058,
+ 1885, 2203, 1894, 1895, 2037, 2038, 1907, 1908, 2234, 2235,
+ -2, -2, -2, 232, 233, 234, 235, 236, 237, 238,
+ 239, 0, 1846, 2181, 2182, 228, 0, 0, 296, 293,
+ 294, 295, 1122, 1123, 249, 250, 251, 252, 253, 254,
+ 255, 256, 257, 258, 259, 260, 261, 262, 263, 264,
+ 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 288, 289, 290, 298, 299, 2263, 0,
+ 853, 0, 0, 0, 0, 0, 0, 1637, 1638, 1498,
+ 0, 1490, 1489, 63, 0, 880, -2, 0, 0, 0,
+ 0, 47, 0, 52, 937, 883, 77, 76, 1538, 1541,
+ 0, 0, 0, 59, 1499, 67, 69, 1500, 0, 885,
+ 886, 0, 913, 917, 0, 0, 0, 1615, 1614, 1614,
+ 102, 0, 0, 103, 123, 124, 125, 0, 0, 109,
+ 110, 1601, 1602, 43, 0, 0, 177, 178, 0, 1096,
+ 428, 0, 173, 0, 421, 360, 0, 1516, 0, 0,
+ 0, 0, 0, 880, 0, 1609, 154, 155, 162, 163,
+ 164, 401, 401, 401, 575, 0, 0, 165, 165, 533,
+ 534, 535, 0, 0, -2, 426, 0, 513, 0, 0,
+ 415, 415, 419, 417, 418, 0, 0, 0, 0, 0,
+ 0, 0, 0, 552, 0, 553, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 668, 0, 402, 0, 573,
+ 574, 464, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1617, 1618, 0, 550, 551, 0, 0, 0, 401, 401,
+ 0, 0, 0, 0, 401, 401, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 153, 1529, 0, 0, 0, -2,
+ 0, 712, 0, 0, 0, 1610, 1610, 0, 719, 0,
+ 0, 0, 724, 0, 0, 725, 0, 783, 783, 781,
+ 782, 727, 728, 729, 730, 786, 0, 0, 410, 411,
+ 412, 783, 786, 0, 786, 786, 786, 786, 783, 783,
+ 783, 786, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2264, 789, 786, 0, 758, 0, 759, 760, 761,
+ 762, 765, 766, 768, 2265, 2266, 1627, 1628, 1639, 1640,
+ 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650,
+ 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660,
+ 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670,
+ 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680,
+ 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690,
+ 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700,
+ 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710,
+ 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720,
+ 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730,
+ 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740,
+ 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750,
+ 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760,
+ 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770,
+ 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780,
+ 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 2264, 2264,
+ 772, 776, 1600, 798, 804, 806, 807, 0, 0, 817,
+ 820, 837, 49, 1893, 825, 49, 827, 828, 829, 855,
+ 856, 861, 0, 0, 0, 0, 867, 868, 869, 0,
+ 0, 872, 873, 874, 0, 0, 0, 0, 0, 1002,
+ 0, 0, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1027, 1028,
+ 0, 0, 0, 1052, 1053, 1054, 1055, 1058, 0, 1069,
+ 0, 1071, 1469, -2, 0, 0, 0, 1063, 1064, 0,
+ 0, 0, 1620, 1620, 0, 0, 0, 1461, 0, 0,
+ 1154, 0, 1155, 1157, 1158, 1159, 0, 1160, 1161, 890,
+ 890, 890, 890, 890, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 890, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1620, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 141, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1620, 0, 0, 1620, 1620, 0, 0,
+ 220, 221, 222, 223, 224, 225, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 297, 240, 241, 242, 243, 244, 245, 300, 246, 247,
+ 248, 1139, 0, 0, 0, 46, 845, 846, 0, 963,
+ 1620, 0, 0, 896, 0, 1635, 57, 66, 68, 1498,
+ 61, 1498, 0, 900, 0, 0, -2, -2, 901, 902,
+ 906, 907, 908, 909, 910, 54, 2262, 55, 0, 74,
+ 0, 48, 0, 0, 1539, 0, 1542, 0, 0, 0,
+ 374, 1546, 0, 0, 1491, 1492, 1495, 0, 914, 1989,
+ 918, 0, 920, 921, 0, 0, 100, 0, 979, 0,
+ 0, 0, 111, 0, 113, 114, 0, 0, 0, 385,
+ 1603, 1604, 1605, -2, 408, 0, 385, 369, 308, 309,
+ 310, 360, 312, 360, 360, 360, 360, 374, 374, 374,
+ 374, 343, 344, 345, 346, 347, 0, 0, 329, 360,
+ 360, 360, 360, 350, 351, 352, 353, 354, 355, 356,
+ 357, 313, 314, 315, 316, 317, 318, 319, 320, 321,
+ 362, 362, 362, 362, 362, 366, 366, 0, 1097, 0,
+ 389, 0, 1495, 0, 0, 1529, 1612, 1622, 0, 0,
+ 0, 1612, 132, 0, 0, 0, 576, 618, 527, 564,
+ 577, 0, 530, 531, -2, 0, 0, 512, 0, 514,
+ 0, 409, 0, -2, 0, 419, 0, 415, 419, 416,
+ 419, 407, 420, 554, 555, 556, 0, 558, 559, 648,
+ 949, 0, 0, 0, 0, 0, 654, 655, 656, 0,
+ 658, 659, 660, 661, 662, 663, 664, 665, 666, 667,
+ 565, 566, 567, 568, 569, 570, 571, 572, 0, 0,
+ 0, 0, 514, 0, 561, 0, 0, 465, 466, 467,
+ 0, 0, 470, 471, 472, 473, 0, 0, 476, 477,
+ 478, 966, 967, 479, 480, 505, 506, 507, 481, 482,
+ 483, 484, 485, 486, 487, 499, 500, 501, 502, 503,
+ 504, 488, 489, 490, 491, 492, 493, 496, 0, 147,
+ 1520, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1610, 0, 0,
+ 0, 0, 899, 981, 1633, 1634, 721, 0, 0, 787,
+ 788, 0, 413, 414, 786, 786, 731, 773, 0, 786,
+ 735, 774, 736, 738, 737, 739, 752, 753, 786, 742,
+ 784, 785, 743, 744, 745, 746, 747, 748, 749, 769,
+ 754, 755, 756, 790, 0, 794, 795, 770, 771, 0,
+ 0, 810, 811, 0, 818, 840, 838, 839, 841, 833,
+ 834, 835, 836, 0, 842, 0, 0, 858, 96, 863,
+ 864, 865, 866, 878, 871, 1141, 999, 1000, 1001, 0,
+ 1003, 1009, 0, 1124, 1126, 1007, 1008, 1011, 0, 0,
+ 0, 1005, 1016, 1136, 1137, 1138, 0, 0, 0, 0,
+ 0, 1020, 1024, 1029, 1030, 1031, 1032, 1033, 0, 1034,
+ 0, 1037, 1038, 1039, 1040, 1041, 1042, 1048, 1437, 1438,
+ 1439, 1067, 301, 302, 0, 1068, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1384, 1385, 1386, 1387, 1388, 1389,
+ 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399,
+ 1400, 1401, 1402, 1403, 1140, 0, 1621, 0, 0, 0,
+ 1467, 1464, 0, 0, 0, 1423, 1425, 0, 0, 0,
+ 891, 892, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1404,
+ 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414,
+ 1415, 1416, 1417, 1418, 1419, 1420, 1421, 0, 0, 1440,
+ 0, 0, 0, 0, 0, 0, 0, 1460, 0, 1073,
+ 1074, 1075, 0, 0, 0, 0, 0, 0, 1202, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 142, 143, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1348, 1349, 1350, 1351, 41, 0,
+ 0, 0, 0, 0, 0, 0, 1471, 0, -2, -2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1373, 0, 0, 0, 0, 0, 0,
+ 1593, 0, 0, 848, 849, 851, 0, 983, 0, 964,
+ 0, 0, 854, 0, 895, 0, 898, 60, 62, 904,
+ 905, 0, 922, 911, 903, 56, 51, 0, 0, 941,
+ 1540, 1543, 1544, 374, 1566, 0, 383, 383, 380, 1501,
+ 1502, 0, 1494, 1496, 1497, 79, 919, 915, 0, 997,
+ 0, 0, 978, 0, 925, 927, 928, 929, 961, 0,
+ 932, 933, 0, 0, 0, 0, 0, 98, 980, 104,
+ 0, 112, 0, 0, 117, 118, 105, 106, 107, 108,
+ 0, 607, -2, 460, 179, 181, 182, 183, 174, -2,
+ 372, 370, 371, 311, 374, 374, 337, 338, 339, 340,
+ 341, 342, 0, 0, 330, 331, 332, 333, 322, 0,
+ 323, 324, 325, 364, 0, 326, 327, 0, 328, 427,
+ 0, 1503, 390, 391, 393, 401, 0, 396, 397, 0,
+ 401, 401, 0, 422, 423, 0, 1495, 1520, 0, 0,
+ 0, 1623, 1622, 1622, 1622, 0, 167, 168, 169, 170,
+ 171, 172, 643, 0, 0, 619, 641, 642, 165, 0,
+ 0, 175, 516, 515, 0, 675, 0, 425, 0, 0,
+ 419, 419, 404, 405, 557, 0, 0, 650, 651, 652,
+ 653, 0, 0, 0, 543, 454, 0, 544, 545, 514,
+ 516, 0, 0, 385, 468, 469, 474, 475, 494, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 592, 593, 594, 597, 599, 518, 603, 605, 596,
+ 598, 600, 518, 604, 606, 1517, 1518, 1519, 0, 0,
+ 713, 0, 0, 451, 94, 1611, 718, 722, 723, 783,
+ 741, 775, 783, 733, 740, 763, 808, 809, 814, 822,
+ 823, 824, 862, 0, 0, 0, 0, 870, 0, 0,
+ 1010, 1125, 1127, 1012, 1013, 1014, 1017, 0, 1021, 1025,
+ 0, 0, 0, 0, 0, 1072, 1070, 1471, 0, 0,
+ 0, 1121, 0, 0, 1144, 1145, 0, 0, 0, 0,
+ 1465, 0, 0, 1152, 0, 1426, 1102, 0, 0, 0,
+ 0, 0, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102,
+ 1102, 1102, 1489, 1179, 0, 0, 0, 0, 0, 1184,
+ 1185, 1186, 1102, 0, 1189, 1190, 0, 1192, 0, 1193,
+ 0, 0, 0, 0, 1200, 1201, 1203, 0, 0, 1206,
+ 1207, 0, 1209, 0, 1211, 1212, 1213, 1214, 1215, 1216,
+ 0, 1218, 0, 1220, 1221, 1222, 0, 1224, 0, 1226,
+ 1227, 0, 1229, 0, 1231, 0, 1234, 0, 1237, 0,
+ 1240, 0, 1243, 0, 1246, 0, 1249, 0, 1252, 0,
+ 1255, 0, 1258, 0, 1261, 0, 1264, 0, 1267, 0,
+ 1270, 0, 1273, 0, 1276, 0, 1279, 1280, 1281, 0,
+ 1283, 0, 1285, 0, 1288, 1289, 0, 1291, 0, 1294,
+ 0, 1297, 0, 0, 1298, 0, 0, 0, 1302, 0,
+ 0, 0, 0, 1311, 1312, 1313, 1314, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1325, 1326, 1327,
+ 1328, 1329, 1330, 0, 1332, 0, 1103, 0, 0, 1103,
+ 0, 0, 0, 0, 0, 1142, 1620, 0, 1427, 1428,
+ 1429, 1430, 1431, 0, 0, 0, 0, 0, 0, 1371,
+ 1372, 1374, 0, 0, 1377, 0, 1379, 0, 1594, 847,
850, 852, 935, 984, 985, 0, 0, 0, 0, 965,
- 1617, 893, 894, 897, 943, 0, 1473, 0, 0, 922,
- 997, 0, 923, 0, 53, 938, 0, 1546, 1545, 1558,
- 1571, 383, 383, 377, 378, 384, 379, 381, 382, 1491,
- 0, 1496, 0, 1585, 0, 0, 1574, 0, 0, 0,
+ 1619, 893, 894, 897, 943, 0, 1475, 0, 0, 922,
+ 997, 0, 923, 0, 53, 938, 0, 1548, 1547, 1560,
+ 1573, 383, 383, 377, 378, 384, 379, 381, 382, 1493,
+ 0, 1498, 0, 1587, 0, 0, 1576, 0, 0, 0,
0, 0, 0, 0, 0, 968, 0, 0, 971, 0,
0, 0, 0, 962, 933, 0, 934, 0, -2, 0,
0, 92, 93, 0, 0, 0, 115, 116, 0, 0,
122, 386, 387, 156, 165, 462, 180, 435, 0, 0,
307, 373, 334, 335, 336, 0, 358, 0, 0, 0,
- 0, 456, 128, 1505, 1504, 401, 401, 392, 0, 395,
- 0, 0, 0, 1622, 361, 424, 0, 146, 0, 0,
+ 0, 456, 128, 1507, 1506, 401, 401, 392, 0, 395,
+ 0, 0, 0, 1624, 361, 424, 0, 146, 0, 0,
0, 0, 0, 152, 613, 0, 0, 620, 0, 0,
0, 525, 0, 536, 537, 0, 647, -2, 709, 389,
0, 403, 406, 950, 0, 0, 538, 0, 541, 542,
455, 516, 547, 548, 562, 549, 497, 498, 495, 0,
- 0, 1528, 1529, 1534, 1532, 1533, 133, 583, 585, 589,
+ 0, 1530, 1531, 1536, 1534, 1535, 133, 583, 585, 589,
584, 588, 0, 0, 0, 520, 0, 520, 581, 0,
- 451, 1501, 0, 717, 452, 453, 786, 786, 857, 97,
+ 451, 1503, 0, 717, 452, 453, 786, 786, 857, 97,
0, 860, 0, 0, 0, 0, 1018, 1022, 1035, 1036,
- 1430, 1456, 360, 360, 1443, 360, 366, 1446, 360, 1448,
- 360, 1451, 360, 1454, 1455, 0, 0, 1065, 0, 0,
- 0, 0, 1151, 1466, 0, 0, 1162, 1101, 1102, 1102,
+ 1432, 1458, 360, 360, 1445, 360, 366, 1448, 360, 1450,
+ 360, 1453, 360, 1456, 1457, 0, 0, 1065, 0, 0,
+ 0, 0, 1151, 1468, 0, 0, 1162, 1101, 1102, 1102,
1102, 1102, 1102, 1168, 1169, 1170, 1171, 1172, 1173, 1174,
- 1175, 1176, 1177, 1460, 0, 0, 0, 1183, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 144, 145,
- 0, 0, 0, 0, 0, 0, 1380, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1096, 1100,
- 0, 1104, 1105, 0, 0, 1332, 0, 0, 1350, 0,
- 0, 0, 0, 0, 0, 0, 1470, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 986, 993, 0,
- 993, 0, 993, 0, 0, 0, 1604, 1605, 1474, 1475,
- 997, 1476, 912, 924, 942, 1564, 0, 1557, 0, -2,
- 1566, 0, 0, 0, 1572, 375, 376, 916, 80, 998,
- 83, 0, 1585, 1594, 0, 1582, 1587, 1589, 0, 0,
- 0, 1578, 0, 997, 926, 957, 959, 0, 954, 969,
- 970, 972, 0, 974, 0, 976, 977, 937, 931, 0,
- 100, 0, 997, 997, 99, 0, 982, 119, 120, 121,
- 461, 184, 189, 0, 0, 0, 194, 0, 196, 0,
- 0, 0, 201, 202, 401, 401, 436, 0, 304, 306,
- 0, 0, 187, 374, 0, 374, 0, 365, 367, 0,
- 437, 457, 1502, 1503, 0, 0, 394, 398, 399, 400,
- 0, 1611, 148, 0, 0, 0, 616, 0, 644, 0,
- 0, 0, 0, 0, 0, 176, 517, 676, 677, 678,
- 679, 680, 681, 682, 683, 684, 0, 401, 0, 0,
- 0, 401, 401, 401, 0, 701, 388, 0, 0, 672,
- 669, 539, 0, 218, 219, 226, 227, 229, 0, 0,
- 0, 0, 0, 546, 937, 1519, 1520, 1521, 0, 1531,
- 1535, 136, 0, 0, 0, 0, 591, 595, 601, 0,
- 519, 602, 714, 715, 716, 95, 726, 732, 859, 879,
- 1006, 1019, 1023, 0, 0, 0, 0, 1457, 1441, 374,
- 1444, 1445, 1447, 1449, 1450, 1452, 1453, 1061, 1062, 1066,
- 0, 1148, 0, 1150, 0, 1464, 0, 1163, 1164, 1165,
- 1166, 1167, 1496, 0, 0, 0, 1182, 0, 0, 0,
- 1193, 1192, 1194, 0, 1196, 1197, 1202, 1203, 1206, 1208,
- 1215, 1217, 1221, 1223, 1226, 1228, 1230, 0, 1233, 0,
- 1236, 0, 1239, 0, 1242, 0, 1245, 0, 1248, 0,
- 1251, 0, 1254, 0, 1257, 0, 1260, 0, 1263, 0,
- 1266, 0, 1269, 0, 1272, 0, 1275, 0, 1280, 1282,
- 0, 1285, 1288, 1290, 0, 1293, 0, 1297, 0, 1299,
- 1301, 1302, 0, 0, 0, 1313, 1314, 1315, 1316, 1317,
- 1318, 1319, 1320, 1321, 1322, 1329, 0, 1094, 1331, 1106,
- 1107, 1112, 1334, 0, 0, 0, 1337, 0, 0, 0,
- 1341, 1143, 1352, 0, 1357, 0, 0, 1363, 0, 1367,
- 0, 1373, 1374, 1376, 1378, 0, 0, 0, 0, 0,
- 0, 0, 963, 944, 64, 1476, 1480, 0, 1551, 1549,
- 1549, 1559, 1560, 0, 0, 1567, 0, 0, 0, 0,
- 84, 0, 0, 1573, 0, 0, 1590, 0, 0, 0,
- 0, 101, 1487, 951, 958, 0, 0, 952, 0, 953,
- 973, 975, 930, 0, 997, 997, 90, 91, 0, 190,
- 0, 192, 0, 195, 197, 198, 199, 205, 206, 207,
- 200, 0, 0, 303, 305, 0, 0, 348, 359, 349,
- 0, 0, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513,
- 937, 149, 150, 151, 608, 0, 618, 0, 939, 0,
- 611, 0, 528, 0, 0, 0, 401, 401, 401, 0,
- 0, 0, 0, 686, 0, 0, 649, 0, 657, 0,
- 0, 0, 230, 231, 0, 1530, 582, 0, 134, 135,
- 0, 0, 587, 521, 522, 1059, 0, 0, 0, 1060,
- 1442, 0, 0, 0, 0, 0, 1461, 0, 0, 0,
- 0, 1189, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1305, 0, 0, 0, 638, 639,
- 0, 1381, 1099, 1487, 0, 1103, 1113, 1114, 0, 1103,
- 1351, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 994, 0, 0, 0, 945, 946, 0, 0,
- 0, 983, 1480, 1485, 0, 0, 1554, 0, 1547, 1550,
- 1548, 1561, 0, 0, 1568, 0, 1570, 0, 1595, 1596,
- 1588, 1583, 0, 1577, 1580, 1582, 1579, 1496, 955, 0,
- 960, 0, 1487, 89, 0, 193, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 203, 204, 0, 0, 363,
- 368, 0, 0, 0, 609, 0, 940, 621, 612, 0,
- 699, 0, 703, 0, 0, 0, 706, 707, 708, 685,
- 0, 689, 429, 673, 670, 671, 540, 0, 137, 138,
- 0, 0, 0, 1431, 0, 1434, 1146, 1149, 1147, 0,
- 1178, 1180, 1181, 1439, 1440, 1195, 1231, 1234, 1237, 1240,
- 1243, 1246, 1249, 1252, 1255, 1258, 1261, 1264, 1267, 1270,
- 1273, 1276, 1284, 1291, 1294, 1298, 1303, 0, 1306, 0,
- 0, 1307, 0, 640, 1090, 0, 0, 1110, 1111, 0,
- 1336, 1338, 1339, 1340, 1353, 0, 1358, 1359, 0, 1364,
- 0, 1368, 1379, 0, 988, 995, 996, 0, 991, 0,
- 992, 0, 936, 1485, 82, 1486, 1483, 0, 1481, 1478,
- 1543, 0, 1552, 1553, 1562, 1563, 1569, 0, 0, 1582,
- 0, 1576, 87, 0, 0, 0, 1496, 191, 0, 210,
- 0, 617, 0, 620, 610, 697, 698, 0, 710, 702,
- 704, 705, 687, -2, 1522, 0, 0, 0, 590, 1432,
- 0, 0, 1308, 0, 636, 637, 1098, 1091, 0, 1076,
- 1077, 1095, 1333, 1335, 0, 0, 0, 987, 947, 948,
- 989, 990, 81, 0, 1482, 1118, 0, 1477, 0, 1555,
- 1556, 1586, 0, 1575, 1581, 956, 963, 0, 88, 442,
- 435, 1522, 0, 0, 0, 690, 691, 692, 693, 694,
- 695, 696, 579, 1524, 139, 140, 0, 509, 510, 511,
- 133, 0, 1153, 1304, 1092, 0, 0, 0, 0, 0,
- 1354, 0, 1360, 0, 1365, 0, 1484, 0, 0, 1479,
- 1584, 622, 0, 624, 0, -2, 430, 443, 0, 185,
- 211, 212, 0, 0, 215, 216, 217, 208, 209, 129,
- 0, 0, 711, 0, 1525, 1526, 0, 136, 0, 0,
- 1083, 1084, 1085, 1086, 1088, 0, 0, 0, 0, 1119,
- 1096, 623, 0, 0, 385, 0, 633, 431, 432, 0,
- 438, 439, 440, 441, 213, 214, 645, 0, 0, 508,
- 586, 1433, 0, 0, 1355, 0, 1361, 0, 1366, 0,
- 625, 626, 634, 0, 433, 0, 434, 0, 0, 0,
- 614, 0, 645, 1523, 1093, 1087, 1089, 0, 0, 1117,
- 0, 635, 631, 444, 446, 447, 0, 0, 445, 646,
- 615, 1356, 1362, 0, 448, 449, 450, 627, 628, 629,
- 630,
+ 1175, 1176, 1177, 1462, 0, 0, 0, 1183, 0, 0,
+ 1187, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 144, 145, 0, 0, 0, 0, 0, 0, 1382, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1096, 1100, 0, 1104, 1105, 0, 0, 1334, 0, 0,
+ 1352, 0, 0, 0, 0, 0, 0, 0, 1472, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 986,
+ 993, 0, 993, 0, 993, 0, 0, 0, 1606, 1607,
+ 1476, 1477, 997, 1478, 912, 924, 942, 1566, 0, 1559,
+ 0, -2, 1568, 0, 0, 0, 1574, 375, 376, 916,
+ 80, 998, 83, 0, 1587, 1596, 0, 1584, 1589, 1591,
+ 0, 0, 0, 1580, 0, 997, 926, 957, 959, 0,
+ 954, 969, 970, 972, 0, 974, 0, 976, 977, 937,
+ 931, 0, 100, 0, 997, 997, 99, 0, 982, 119,
+ 120, 121, 461, 184, 189, 0, 0, 0, 194, 0,
+ 196, 0, 0, 0, 201, 202, 401, 401, 436, 0,
+ 304, 306, 0, 0, 187, 374, 0, 374, 0, 365,
+ 367, 0, 437, 457, 1504, 1505, 0, 0, 394, 398,
+ 399, 400, 0, 1613, 148, 0, 0, 0, 616, 0,
+ 644, 0, 0, 0, 0, 0, 0, 176, 517, 676,
+ 677, 678, 679, 680, 681, 682, 683, 684, 0, 401,
+ 0, 0, 0, 401, 401, 401, 0, 701, 388, 0,
+ 0, 672, 669, 539, 0, 218, 219, 226, 227, 229,
+ 0, 0, 0, 0, 0, 546, 937, 1521, 1522, 1523,
+ 0, 1533, 1537, 136, 0, 0, 0, 0, 591, 595,
+ 601, 0, 519, 602, 714, 715, 716, 95, 726, 732,
+ 859, 879, 1006, 1019, 1023, 0, 0, 0, 0, 1459,
+ 1443, 374, 1446, 1447, 1449, 1451, 1452, 1454, 1455, 1061,
+ 1062, 1066, 0, 1148, 0, 1150, 0, 1466, 0, 1163,
+ 1164, 1165, 1166, 1167, 1498, 0, 0, 0, 1182, 0,
+ 0, 1102, 0, 1195, 1194, 1196, 0, 1198, 1199, 1204,
+ 1205, 1208, 1210, 1217, 1219, 1223, 1225, 1228, 1230, 1232,
+ 0, 1235, 0, 1238, 0, 1241, 0, 1244, 0, 1247,
+ 0, 1250, 0, 1253, 0, 1256, 0, 1259, 0, 1262,
+ 0, 1265, 0, 1268, 0, 1271, 0, 1274, 0, 1277,
+ 0, 1282, 1284, 0, 1287, 1290, 1292, 0, 1295, 0,
+ 1299, 0, 1301, 1303, 1304, 0, 0, 0, 1315, 1316,
+ 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1331, 0,
+ 1094, 1333, 1106, 1107, 1112, 1336, 0, 0, 0, 1339,
+ 0, 0, 0, 1343, 1143, 1354, 0, 1359, 0, 0,
+ 1365, 0, 1369, 0, 1375, 1376, 1378, 1380, 0, 0,
+ 0, 0, 0, 0, 0, 963, 944, 64, 1478, 1482,
+ 0, 1553, 1551, 1551, 1561, 1562, 0, 0, 1569, 0,
+ 0, 0, 0, 84, 0, 0, 1575, 0, 0, 1592,
+ 0, 0, 0, 0, 101, 1489, 951, 958, 0, 0,
+ 952, 0, 953, 973, 975, 930, 0, 997, 997, 90,
+ 91, 0, 190, 0, 192, 0, 195, 197, 198, 199,
+ 205, 206, 207, 200, 0, 0, 303, 305, 0, 0,
+ 348, 359, 349, 0, 0, 1508, 1509, 1510, 1511, 1512,
+ 1513, 1514, 1515, 937, 149, 150, 151, 608, 0, 618,
+ 0, 939, 0, 611, 0, 528, 0, 0, 0, 401,
+ 401, 401, 0, 0, 0, 0, 686, 0, 0, 649,
+ 0, 657, 0, 0, 0, 230, 231, 0, 1532, 582,
+ 0, 134, 135, 0, 0, 587, 521, 522, 1059, 0,
+ 0, 0, 1060, 1444, 0, 0, 0, 0, 0, 1463,
+ 0, 0, 0, 0, 1188, 1191, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1307, 0,
+ 0, 0, 638, 639, 0, 1383, 1099, 1489, 0, 1103,
+ 1113, 1114, 0, 1103, 1353, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 994, 0, 0, 0,
+ 945, 946, 0, 0, 0, 983, 1482, 1487, 0, 0,
+ 1556, 0, 1549, 1552, 1550, 1563, 0, 0, 1570, 0,
+ 1572, 0, 1597, 1598, 1590, 1585, 0, 1579, 1582, 1584,
+ 1581, 1498, 955, 0, 960, 0, 1489, 89, 0, 193,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 203, 204, 0, 0, 363, 368, 0, 0, 0,
+ 609, 0, 940, 621, 612, 0, 699, 0, 703, 0,
+ 0, 0, 706, 707, 708, 685, 0, 689, 429, 673,
+ 670, 671, 540, 0, 137, 138, 0, 0, 0, 1433,
+ 0, 1436, 1146, 1149, 1147, 0, 1178, 1180, 1181, 1441,
+ 1442, 1197, 1233, 1236, 1239, 1242, 1245, 1248, 1251, 1254,
+ 1257, 1260, 1263, 1266, 1269, 1272, 1275, 1278, 1286, 1293,
+ 1296, 1300, 1305, 0, 1308, 0, 0, 1309, 0, 640,
+ 1090, 0, 0, 1110, 1111, 0, 1338, 1340, 1341, 1342,
+ 1355, 0, 1360, 1361, 0, 1366, 0, 1370, 1381, 0,
+ 988, 995, 996, 0, 991, 0, 992, 0, 936, 1487,
+ 82, 1488, 1485, 0, 1483, 1480, 1545, 0, 1554, 1555,
+ 1564, 1565, 1571, 0, 0, 1584, 0, 1578, 87, 0,
+ 0, 0, 1498, 191, 0, 210, 0, 617, 0, 620,
+ 610, 697, 698, 0, 710, 702, 704, 705, 687, -2,
+ 1524, 0, 0, 0, 590, 1434, 0, 0, 1310, 0,
+ 636, 637, 1098, 1091, 0, 1076, 1077, 1095, 1335, 1337,
+ 0, 0, 0, 987, 947, 948, 989, 990, 81, 0,
+ 1484, 1118, 0, 1479, 0, 1557, 1558, 1588, 0, 1577,
+ 1583, 956, 963, 0, 88, 442, 435, 1524, 0, 0,
+ 0, 690, 691, 692, 693, 694, 695, 696, 579, 1526,
+ 139, 140, 0, 509, 510, 511, 133, 0, 1153, 1306,
+ 1092, 0, 0, 0, 0, 0, 1356, 0, 1362, 0,
+ 1367, 0, 1486, 0, 0, 1481, 1586, 622, 0, 624,
+ 0, -2, 430, 443, 0, 185, 211, 212, 0, 0,
+ 215, 216, 217, 208, 209, 129, 0, 0, 711, 0,
+ 1527, 1528, 0, 136, 0, 0, 1083, 1084, 1085, 1086,
+ 1088, 0, 0, 0, 0, 1119, 1096, 623, 0, 0,
+ 385, 0, 633, 431, 432, 0, 438, 439, 440, 441,
+ 213, 214, 645, 0, 0, 508, 586, 1435, 0, 0,
+ 1357, 0, 1363, 0, 1368, 0, 625, 626, 634, 0,
+ 433, 0, 434, 0, 0, 0, 614, 0, 645, 1525,
+ 1093, 1087, 1089, 0, 0, 1117, 0, 635, 631, 444,
+ 446, 447, 0, 0, 445, 646, 615, 1358, 1364, 0,
+ 448, 449, 450, 627, 628, 629, 630,
}
var yyTok1 = [...]int{
1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 150, 3, 3, 3, 178, 170, 3,
- 91, 93, 175, 173, 92, 174, 228, 176, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 740,
- 158, 157, 159, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 152, 3, 3, 3, 180, 172, 3,
+ 91, 93, 177, 175, 92, 176, 230, 178, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 742,
+ 160, 159, 161, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 180, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 182, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 146, 3, 181,
+ 3, 3, 3, 3, 148, 3, 183,
}
var yyTok2 = [...]int{
@@ -9806,14 +9850,14 @@ var yyTok2 = [...]int{
115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
- 145, 147, 148, 149, 151, 152, 153, 154, 155, 156,
- 160, 161, 162, 163, 164, 165, 166, 167, 168, 169,
- 171, 172, 177, 179, 182, 183, 184, 185, 186, 187,
+ 145, 146, 147, 149, 150, 151, 153, 154, 155, 156,
+ 157, 158, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 173, 174, 179, 181, 184, 185, 186, 187,
188, 189, 190, 191, 192, 193, 194, 195, 196, 197,
198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
208, 209, 210, 211, 212, 213, 214, 215, 216, 217,
218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
- 229, 230, 231, 232, 233, 234, 235, 236, 237, 238,
+ 228, 229, 231, 232, 233, 234, 235, 236, 237, 238,
239, 240, 241, 242, 243, 244, 245, 246, 247, 248,
249, 250, 251, 252, 253, 254, 255, 256, 257, 258,
259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
@@ -9914,7 +9958,7 @@ var yyTok3 = [...]int{
58050, 725, 58051, 726, 58052, 727, 58053, 728, 58054, 729,
58055, 730, 58056, 731, 58057, 732, 58058, 733, 58059, 734,
58060, 735, 58061, 736, 58062, 737, 58063, 738, 58064, 739,
- 0,
+ 58065, 740, 58066, 741, 0,
}
var yyErrorMessages = [...]struct {
@@ -10264,7 +10308,7 @@ yydefault:
case 1:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:621
+//line sql.y:622
{
stmt := yyDollar[2].statementUnion()
// If the statement is empty and we have comments
@@ -10278,46 +10322,46 @@ yydefault:
}
case 2:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:634
+//line sql.y:635
{
}
case 3:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:635
+//line sql.y:636
{
}
case 4:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Statement
-//line sql.y:639
+//line sql.y:640
{
yyLOCAL = yyDollar[1].selStmtUnion()
}
yyVAL.union = yyLOCAL
case 40:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:678
+//line sql.y:679
{
setParseTree(yylex, nil)
}
case 41:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *Variable
-//line sql.y:684
+//line sql.y:685
{
yyLOCAL = NewVariableExpression(yyDollar[1].str, SingleAt)
}
yyVAL.union = yyLOCAL
case 42:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:690
+//line sql.y:691
{
yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str))
}
case 43:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *Variable
-//line sql.y:696
+//line sql.y:697
{
yyLOCAL = NewVariableExpression(string(yyDollar[1].str), SingleAt)
}
@@ -10325,7 +10369,7 @@ yydefault:
case 44:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *Variable
-//line sql.y:700
+//line sql.y:701
{
yyLOCAL = NewVariableExpression(string(yyDollar[1].str), DoubleAt)
}
@@ -10333,7 +10377,7 @@ yydefault:
case 45:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:706
+//line sql.y:707
{
yyLOCAL = &OtherAdmin{}
}
@@ -10341,7 +10385,7 @@ yydefault:
case 46:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:712
+//line sql.y:713
{
yyLOCAL = &Load{}
}
@@ -10349,7 +10393,7 @@ yydefault:
case 47:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *With
-//line sql.y:718
+//line sql.y:719
{
yyLOCAL = &With{CTEs: yyDollar[2].ctesUnion(), Recursive: false}
}
@@ -10357,7 +10401,7 @@ yydefault:
case 48:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *With
-//line sql.y:722
+//line sql.y:723
{
yyLOCAL = &With{CTEs: yyDollar[3].ctesUnion(), Recursive: true}
}
@@ -10365,7 +10409,7 @@ yydefault:
case 49:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *With
-//line sql.y:727
+//line sql.y:728
{
yyLOCAL = nil
}
@@ -10373,14 +10417,14 @@ yydefault:
case 50:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *With
-//line sql.y:731
+//line sql.y:732
{
yyLOCAL = yyDollar[1].withUnion()
}
yyVAL.union = yyLOCAL
case 51:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:737
+//line sql.y:738
{
yySLICE := (*[]*CommonTableExpr)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].cteUnion())
@@ -10388,7 +10432,7 @@ yydefault:
case 52:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []*CommonTableExpr
-//line sql.y:741
+//line sql.y:742
{
yyLOCAL = []*CommonTableExpr{yyDollar[1].cteUnion()}
}
@@ -10396,7 +10440,7 @@ yydefault:
case 53:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *CommonTableExpr
-//line sql.y:747
+//line sql.y:748
{
yyLOCAL = &CommonTableExpr{ID: yyDollar[1].identifierCS, Columns: yyDollar[2].columnsUnion(), Subquery: yyDollar[4].subqueryUnion()}
}
@@ -10404,7 +10448,7 @@ yydefault:
case 54:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL SelectStatement
-//line sql.y:753
+//line sql.y:754
{
yyLOCAL = yyDollar[2].selStmtUnion()
}
@@ -10412,7 +10456,7 @@ yydefault:
case 55:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL SelectStatement
-//line sql.y:757
+//line sql.y:758
{
yyLOCAL = yyDollar[2].selStmtUnion()
}
@@ -10420,7 +10464,7 @@ yydefault:
case 56:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL SelectStatement
-//line sql.y:761
+//line sql.y:762
{
setLockInSelect(yyDollar[2].selStmtUnion(), yyDollar[3].lockUnion())
yyLOCAL = yyDollar[2].selStmtUnion()
@@ -10429,7 +10473,7 @@ yydefault:
case 57:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL SelectStatement
-//line sql.y:784
+//line sql.y:785
{
yyDollar[1].selStmtUnion().SetOrderBy(yyDollar[2].orderByUnion())
yyDollar[1].selStmtUnion().SetLimit(yyDollar[3].limitUnion())
@@ -10439,7 +10483,7 @@ yydefault:
case 58:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL SelectStatement
-//line sql.y:790
+//line sql.y:791
{
yyDollar[1].selStmtUnion().SetLimit(yyDollar[2].limitUnion())
yyLOCAL = yyDollar[1].selStmtUnion()
@@ -10448,7 +10492,7 @@ yydefault:
case 59:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL SelectStatement
-//line sql.y:795
+//line sql.y:796
{
yyDollar[1].selStmtUnion().SetOrderBy(yyDollar[2].orderByUnion())
yyDollar[1].selStmtUnion().SetLimit(yyDollar[3].limitUnion())
@@ -10458,7 +10502,7 @@ yydefault:
case 60:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL SelectStatement
-//line sql.y:801
+//line sql.y:802
{
yyDollar[2].selStmtUnion().SetWith(yyDollar[1].withUnion())
yyDollar[2].selStmtUnion().SetOrderBy(yyDollar[3].orderByUnion())
@@ -10469,7 +10513,7 @@ yydefault:
case 61:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL SelectStatement
-//line sql.y:808
+//line sql.y:809
{
yyDollar[2].selStmtUnion().SetWith(yyDollar[1].withUnion())
yyDollar[2].selStmtUnion().SetLimit(yyDollar[3].limitUnion())
@@ -10479,7 +10523,7 @@ yydefault:
case 62:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL SelectStatement
-//line sql.y:814
+//line sql.y:815
{
yyDollar[2].selStmtUnion().SetWith(yyDollar[1].withUnion())
yyDollar[2].selStmtUnion().SetOrderBy(yyDollar[3].orderByUnion())
@@ -10489,14 +10533,14 @@ yydefault:
yyVAL.union = yyLOCAL
case 63:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:821
+//line sql.y:822
{
yyDollar[2].selStmtUnion().SetWith(yyDollar[1].withUnion())
}
case 64:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL SelectStatement
-//line sql.y:825
+//line sql.y:826
{
yyLOCAL = NewSelect(Comments(yyDollar[2].strs), SelectExprs{&Nextval{Expr: yyDollar[5].exprUnion()}}, []string{yyDollar[3].str} /*options*/, nil, TableExprs{&AliasedTableExpr{Expr: yyDollar[7].tableName}}, nil /*where*/, nil /*groupBy*/, nil /*having*/, nil)
}
@@ -10504,7 +10548,7 @@ yydefault:
case 65:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL SelectStatement
-//line sql.y:831
+//line sql.y:832
{
yyLOCAL = yyDollar[1].selStmtUnion()
}
@@ -10512,7 +10556,7 @@ yydefault:
case 66:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL SelectStatement
-//line sql.y:835
+//line sql.y:836
{
yyLOCAL = &Union{Left: yyDollar[1].selStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].selStmtUnion()}
}
@@ -10520,7 +10564,7 @@ yydefault:
case 67:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL SelectStatement
-//line sql.y:839
+//line sql.y:840
{
yyLOCAL = &Union{Left: yyDollar[1].selStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].selStmtUnion()}
}
@@ -10528,7 +10572,7 @@ yydefault:
case 68:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL SelectStatement
-//line sql.y:843
+//line sql.y:844
{
yyLOCAL = &Union{Left: yyDollar[1].selStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].selStmtUnion()}
}
@@ -10536,7 +10580,7 @@ yydefault:
case 69:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL SelectStatement
-//line sql.y:847
+//line sql.y:848
{
yyLOCAL = &Union{Left: yyDollar[1].selStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].selStmtUnion()}
}
@@ -10544,7 +10588,7 @@ yydefault:
case 70:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL SelectStatement
-//line sql.y:853
+//line sql.y:854
{
yyLOCAL = yyDollar[1].selStmtUnion()
}
@@ -10552,7 +10596,7 @@ yydefault:
case 71:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL SelectStatement
-//line sql.y:857
+//line sql.y:858
{
setLockInSelect(yyDollar[1].selStmtUnion(), yyDollar[2].lockUnion())
yyLOCAL = yyDollar[1].selStmtUnion()
@@ -10561,7 +10605,7 @@ yydefault:
case 72:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL SelectStatement
-//line sql.y:862
+//line sql.y:863
{
yyLOCAL = yyDollar[1].selStmtUnion()
}
@@ -10569,7 +10613,7 @@ yydefault:
case 73:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL SelectStatement
-//line sql.y:866
+//line sql.y:867
{
yyLOCAL = yyDollar[1].selStmtUnion()
}
@@ -10577,7 +10621,7 @@ yydefault:
case 74:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL SelectStatement
-//line sql.y:872
+//line sql.y:873
{
yyLOCAL = yyDollar[2].selStmtUnion()
}
@@ -10585,7 +10629,7 @@ yydefault:
case 75:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL SelectStatement
-//line sql.y:876
+//line sql.y:877
{
yyDollar[1].selStmtUnion().SetInto(yyDollar[2].selectIntoUnion())
yyLOCAL = yyDollar[1].selStmtUnion()
@@ -10594,7 +10638,7 @@ yydefault:
case 76:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL SelectStatement
-//line sql.y:881
+//line sql.y:882
{
yyDollar[1].selStmtUnion().SetInto(yyDollar[2].selectIntoUnion())
yyDollar[1].selStmtUnion().SetLock(yyDollar[3].lockUnion())
@@ -10604,7 +10648,7 @@ yydefault:
case 77:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL SelectStatement
-//line sql.y:887
+//line sql.y:888
{
yyDollar[1].selStmtUnion().SetInto(yyDollar[3].selectIntoUnion())
yyDollar[1].selStmtUnion().SetLock(yyDollar[2].lockUnion())
@@ -10614,7 +10658,7 @@ yydefault:
case 78:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL SelectStatement
-//line sql.y:893
+//line sql.y:894
{
yyDollar[1].selStmtUnion().SetInto(yyDollar[2].selectIntoUnion())
yyLOCAL = yyDollar[1].selStmtUnion()
@@ -10623,7 +10667,7 @@ yydefault:
case 79:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:900
+//line sql.y:901
{
yyLOCAL = &Stream{Comments: Comments(yyDollar[2].strs).Parsed(), SelectExpr: yyDollar[3].selectExprUnion(), Table: yyDollar[5].tableName}
}
@@ -10631,7 +10675,7 @@ yydefault:
case 80:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Statement
-//line sql.y:906
+//line sql.y:907
{
yyLOCAL = &VStream{Comments: Comments(yyDollar[2].strs).Parsed(), SelectExpr: yyDollar[3].selectExprUnion(), Table: yyDollar[5].tableName, Where: NewWhere(WhereClause, yyDollar[6].exprUnion()), Limit: yyDollar[7].limitUnion()}
}
@@ -10639,7 +10683,7 @@ yydefault:
case 81:
yyDollar = yyS[yypt-10 : yypt+1]
var yyLOCAL SelectStatement
-//line sql.y:914
+//line sql.y:915
{
yyLOCAL = NewSelect(Comments(yyDollar[2].strs), yyDollar[4].selectExprsUnion() /*SelectExprs*/, yyDollar[3].strs /*options*/, yyDollar[5].selectIntoUnion() /*into*/, yyDollar[6].tableExprsUnion() /*from*/, NewWhere(WhereClause, yyDollar[7].exprUnion()), yyDollar[8].groupByUnion(), NewWhere(HavingClause, yyDollar[9].exprUnion()), yyDollar[10].namedWindowsUnion())
}
@@ -10647,7 +10691,7 @@ yydefault:
case 82:
yyDollar = yyS[yypt-9 : yypt+1]
var yyLOCAL SelectStatement
-//line sql.y:918
+//line sql.y:919
{
yyLOCAL = NewSelect(Comments(yyDollar[2].strs), yyDollar[4].selectExprsUnion() /*SelectExprs*/, yyDollar[3].strs /*options*/, nil, yyDollar[5].tableExprsUnion() /*from*/, NewWhere(WhereClause, yyDollar[6].exprUnion()), yyDollar[7].groupByUnion(), NewWhere(HavingClause, yyDollar[8].exprUnion()), yyDollar[9].namedWindowsUnion())
}
@@ -10655,7 +10699,7 @@ yydefault:
case 83:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Statement
-//line sql.y:924
+//line sql.y:925
{
// insert_data returns a *Insert pre-filled with Columns & Values
ins := yyDollar[6].insUnion()
@@ -10671,7 +10715,7 @@ yydefault:
case 84:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Statement
-//line sql.y:936
+//line sql.y:937
{
cols := make(Columns, 0, len(yyDollar[7].updateExprsUnion()))
vals := make(ValTuple, 0, len(yyDollar[8].updateExprsUnion()))
@@ -10685,7 +10729,7 @@ yydefault:
case 85:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL InsertAction
-//line sql.y:948
+//line sql.y:949
{
yyLOCAL = InsertAct
}
@@ -10693,7 +10737,7 @@ yydefault:
case 86:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL InsertAction
-//line sql.y:952
+//line sql.y:953
{
yyLOCAL = ReplaceAct
}
@@ -10701,7 +10745,7 @@ yydefault:
case 87:
yyDollar = yyS[yypt-10 : yypt+1]
var yyLOCAL Statement
-//line sql.y:958
+//line sql.y:959
{
yyLOCAL = &Update{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), TableExprs: yyDollar[5].tableExprsUnion(), Exprs: yyDollar[7].updateExprsUnion(), Where: NewWhere(WhereClause, yyDollar[8].exprUnion()), OrderBy: yyDollar[9].orderByUnion(), Limit: yyDollar[10].limitUnion()}
}
@@ -10709,7 +10753,7 @@ yydefault:
case 88:
yyDollar = yyS[yypt-11 : yypt+1]
var yyLOCAL Statement
-//line sql.y:964
+//line sql.y:965
{
yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), TableExprs: TableExprs{&AliasedTableExpr{Expr: yyDollar[6].tableName, As: yyDollar[7].identifierCS}}, Partitions: yyDollar[8].partitionsUnion(), Where: NewWhere(WhereClause, yyDollar[9].exprUnion()), OrderBy: yyDollar[10].orderByUnion(), Limit: yyDollar[11].limitUnion()}
}
@@ -10717,7 +10761,7 @@ yydefault:
case 89:
yyDollar = yyS[yypt-9 : yypt+1]
var yyLOCAL Statement
-//line sql.y:968
+//line sql.y:969
{
yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), Targets: yyDollar[6].tableNamesUnion(), TableExprs: yyDollar[8].tableExprsUnion(), Where: NewWhere(WhereClause, yyDollar[9].exprUnion())}
}
@@ -10725,7 +10769,7 @@ yydefault:
case 90:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Statement
-//line sql.y:972
+//line sql.y:973
{
yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), Targets: yyDollar[5].tableNamesUnion(), TableExprs: yyDollar[7].tableExprsUnion(), Where: NewWhere(WhereClause, yyDollar[8].exprUnion())}
}
@@ -10733,32 +10777,32 @@ yydefault:
case 91:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Statement
-//line sql.y:976
+//line sql.y:977
{
yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), Targets: yyDollar[5].tableNamesUnion(), TableExprs: yyDollar[7].tableExprsUnion(), Where: NewWhere(WhereClause, yyDollar[8].exprUnion())}
}
yyVAL.union = yyLOCAL
case 92:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:981
+//line sql.y:982
{
}
case 93:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:982
+//line sql.y:983
{
}
case 94:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL TableNames
-//line sql.y:986
+//line sql.y:987
{
yyLOCAL = TableNames{yyDollar[1].tableName}
}
yyVAL.union = yyLOCAL
case 95:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:990
+//line sql.y:991
{
yySLICE := (*TableNames)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].tableName)
@@ -10766,14 +10810,14 @@ yydefault:
case 96:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL TableNames
-//line sql.y:996
+//line sql.y:997
{
yyLOCAL = TableNames{yyDollar[1].tableName}
}
yyVAL.union = yyLOCAL
case 97:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:1000
+//line sql.y:1001
{
yySLICE := (*TableNames)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].tableName)
@@ -10781,14 +10825,14 @@ yydefault:
case 98:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL TableNames
-//line sql.y:1006
+//line sql.y:1007
{
yyLOCAL = TableNames{yyDollar[1].tableName}
}
yyVAL.union = yyLOCAL
case 99:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:1010
+//line sql.y:1011
{
yySLICE := (*TableNames)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].tableName)
@@ -10796,7 +10840,7 @@ yydefault:
case 100:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL Partitions
-//line sql.y:1015
+//line sql.y:1016
{
yyLOCAL = nil
}
@@ -10804,7 +10848,7 @@ yydefault:
case 101:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Partitions
-//line sql.y:1019
+//line sql.y:1020
{
yyLOCAL = yyDollar[3].partitionsUnion()
}
@@ -10812,7 +10856,7 @@ yydefault:
case 102:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:1025
+//line sql.y:1026
{
yyLOCAL = NewSetStatement(Comments(yyDollar[2].strs).Parsed(), yyDollar[3].setExprsUnion())
}
@@ -10820,14 +10864,14 @@ yydefault:
case 103:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL SetExprs
-//line sql.y:1031
+//line sql.y:1032
{
yyLOCAL = SetExprs{yyDollar[1].setExprUnion()}
}
yyVAL.union = yyLOCAL
case 104:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:1035
+//line sql.y:1036
{
yySLICE := (*SetExprs)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].setExprUnion())
@@ -10835,7 +10879,7 @@ yydefault:
case 105:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *SetExpr
-//line sql.y:1041
+//line sql.y:1042
{
yyLOCAL = &SetExpr{Var: yyDollar[1].variableUnion(), Expr: NewStrLiteral("on")}
}
@@ -10843,7 +10887,7 @@ yydefault:
case 106:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *SetExpr
-//line sql.y:1045
+//line sql.y:1046
{
yyLOCAL = &SetExpr{Var: yyDollar[1].variableUnion(), Expr: NewStrLiteral("off")}
}
@@ -10851,7 +10895,7 @@ yydefault:
case 107:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *SetExpr
-//line sql.y:1049
+//line sql.y:1050
{
yyLOCAL = &SetExpr{Var: yyDollar[1].variableUnion(), Expr: yyDollar[3].exprUnion()}
}
@@ -10859,7 +10903,7 @@ yydefault:
case 108:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *SetExpr
-//line sql.y:1053
+//line sql.y:1054
{
yyLOCAL = &SetExpr{Var: NewSetVariable(string(yyDollar[1].str), SessionScope), Expr: yyDollar[2].exprUnion()}
}
@@ -10867,7 +10911,7 @@ yydefault:
case 109:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *Variable
-//line sql.y:1059
+//line sql.y:1060
{
yyLOCAL = NewSetVariable(string(yyDollar[1].str), SessionScope)
}
@@ -10875,7 +10919,7 @@ yydefault:
case 110:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *Variable
-//line sql.y:1063
+//line sql.y:1064
{
yyLOCAL = yyDollar[1].variableUnion()
}
@@ -10883,7 +10927,7 @@ yydefault:
case 111:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *Variable
-//line sql.y:1067
+//line sql.y:1068
{
yyLOCAL = NewSetVariable(string(yyDollar[2].str), yyDollar[1].scopeUnion())
}
@@ -10891,7 +10935,7 @@ yydefault:
case 112:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:1073
+//line sql.y:1074
{
yyLOCAL = NewSetStatement(Comments(yyDollar[2].strs).Parsed(), UpdateSetExprsScope(yyDollar[5].setExprsUnion(), yyDollar[3].scopeUnion()))
}
@@ -10899,7 +10943,7 @@ yydefault:
case 113:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:1077
+//line sql.y:1078
{
yyLOCAL = NewSetStatement(Comments(yyDollar[2].strs).Parsed(), yyDollar[4].setExprsUnion())
}
@@ -10907,14 +10951,14 @@ yydefault:
case 114:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL SetExprs
-//line sql.y:1083
+//line sql.y:1084
{
yyLOCAL = SetExprs{yyDollar[1].setExprUnion()}
}
yyVAL.union = yyLOCAL
case 115:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:1087
+//line sql.y:1088
{
yySLICE := (*SetExprs)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].setExprUnion())
@@ -10922,7 +10966,7 @@ yydefault:
case 116:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *SetExpr
-//line sql.y:1093
+//line sql.y:1094
{
yyLOCAL = &SetExpr{Var: NewSetVariable(TransactionIsolationStr, NextTxScope), Expr: NewStrLiteral(yyDollar[3].str)}
}
@@ -10930,7 +10974,7 @@ yydefault:
case 117:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *SetExpr
-//line sql.y:1097
+//line sql.y:1098
{
yyLOCAL = &SetExpr{Var: NewSetVariable(TransactionReadOnlyStr, NextTxScope), Expr: NewStrLiteral("off")}
}
@@ -10938,39 +10982,39 @@ yydefault:
case 118:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *SetExpr
-//line sql.y:1101
+//line sql.y:1102
{
yyLOCAL = &SetExpr{Var: NewSetVariable(TransactionReadOnlyStr, NextTxScope), Expr: NewStrLiteral("on")}
}
yyVAL.union = yyLOCAL
case 119:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:1107
+//line sql.y:1108
{
yyVAL.str = RepeatableReadStr
}
case 120:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:1111
+//line sql.y:1112
{
yyVAL.str = ReadCommittedStr
}
case 121:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:1115
+//line sql.y:1116
{
yyVAL.str = ReadUncommittedStr
}
case 122:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1119
+//line sql.y:1120
{
yyVAL.str = SerializableStr
}
case 123:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Scope
-//line sql.y:1125
+//line sql.y:1126
{
yyLOCAL = SessionScope
}
@@ -10978,7 +11022,7 @@ yydefault:
case 124:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Scope
-//line sql.y:1129
+//line sql.y:1130
{
yyLOCAL = SessionScope
}
@@ -10986,7 +11030,7 @@ yydefault:
case 125:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Scope
-//line sql.y:1133
+//line sql.y:1134
{
yyLOCAL = GlobalScope
}
@@ -10994,7 +11038,7 @@ yydefault:
case 126:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:1139
+//line sql.y:1140
{
yyDollar[1].createTableUnion().TableSpec = yyDollar[2].tableSpecUnion()
yyDollar[1].createTableUnion().FullyParsed = true
@@ -11004,7 +11048,7 @@ yydefault:
case 127:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:1145
+//line sql.y:1146
{
// Create table [name] like [name]
yyDollar[1].createTableUnion().OptLike = yyDollar[2].optLikeUnion()
@@ -11015,7 +11059,7 @@ yydefault:
case 128:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Statement
-//line sql.y:1152
+//line sql.y:1153
{
indexDef := yyDollar[1].alterTableUnion().AlterOptions[0].(*AddIndexDefinition).IndexDefinition
indexDef.Columns = yyDollar[3].indexColumnsUnion()
@@ -11028,7 +11072,7 @@ yydefault:
case 129:
yyDollar = yyS[yypt-12 : yypt+1]
var yyLOCAL Statement
-//line sql.y:1161
+//line sql.y:1162
{
yyLOCAL = &CreateView{ViewName: yyDollar[8].tableName, Comments: Comments(yyDollar[2].strs).Parsed(), IsReplace: yyDollar[3].booleanUnion(), Algorithm: yyDollar[4].str, Definer: yyDollar[5].definerUnion(), Security: yyDollar[6].str, Columns: yyDollar[9].columnsUnion(), Select: yyDollar[11].selStmtUnion(), CheckOption: yyDollar[12].str}
}
@@ -11036,7 +11080,7 @@ yydefault:
case 130:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:1165
+//line sql.y:1166
{
yyDollar[1].createDatabaseUnion().FullyParsed = true
yyDollar[1].createDatabaseUnion().CreateOptions = yyDollar[2].databaseOptionsUnion()
@@ -11046,7 +11090,7 @@ yydefault:
case 131:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:1172
+//line sql.y:1173
{
yyLOCAL = false
}
@@ -11054,33 +11098,33 @@ yydefault:
case 132:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL bool
-//line sql.y:1176
+//line sql.y:1177
{
yyLOCAL = true
}
yyVAL.union = yyLOCAL
case 133:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:1181
+//line sql.y:1182
{
yyVAL.identifierCI = NewIdentifierCI("")
}
case 134:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:1185
+//line sql.y:1186
{
yyVAL.identifierCI = yyDollar[2].identifierCI
}
case 135:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1191
+//line sql.y:1192
{
yyVAL.identifierCI = yyDollar[1].identifierCI
}
case 136:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL []VindexParam
-//line sql.y:1196
+//line sql.y:1197
{
var v []VindexParam
yyLOCAL = v
@@ -11089,7 +11133,7 @@ yydefault:
case 137:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL []VindexParam
-//line sql.y:1201
+//line sql.y:1202
{
yyLOCAL = yyDollar[2].vindexParamsUnion()
}
@@ -11097,7 +11141,7 @@ yydefault:
case 138:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []VindexParam
-//line sql.y:1207
+//line sql.y:1208
{
yyLOCAL = make([]VindexParam, 0, 4)
yyLOCAL = append(yyLOCAL, yyDollar[1].vindexParam)
@@ -11105,21 +11149,21 @@ yydefault:
yyVAL.union = yyLOCAL
case 139:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:1212
+//line sql.y:1213
{
yySLICE := (*[]VindexParam)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].vindexParam)
}
case 140:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:1218
+//line sql.y:1219
{
yyVAL.vindexParam = VindexParam{Key: yyDollar[1].identifierCI, Val: yyDollar[3].str}
}
case 141:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL []*JSONObjectParam
-//line sql.y:1223
+//line sql.y:1224
{
yyLOCAL = nil
}
@@ -11127,7 +11171,7 @@ yydefault:
case 142:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []*JSONObjectParam
-//line sql.y:1227
+//line sql.y:1228
{
yyLOCAL = yyDollar[1].jsonObjectParamsUnion()
}
@@ -11135,28 +11179,28 @@ yydefault:
case 143:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []*JSONObjectParam
-//line sql.y:1233
+//line sql.y:1234
{
yyLOCAL = []*JSONObjectParam{yyDollar[1].jsonObjectParam}
}
yyVAL.union = yyLOCAL
case 144:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:1237
+//line sql.y:1238
{
yySLICE := (*[]*JSONObjectParam)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].jsonObjectParam)
}
case 145:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:1243
+//line sql.y:1244
{
yyVAL.jsonObjectParam = &JSONObjectParam{Key: yyDollar[1].exprUnion(), Value: yyDollar[3].exprUnion()}
}
case 146:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL *CreateTable
-//line sql.y:1249
+//line sql.y:1250
{
yyLOCAL = &CreateTable{Comments: Comments(yyDollar[2].strs).Parsed(), Table: yyDollar[6].tableName, IfNotExists: yyDollar[5].booleanUnion(), Temp: yyDollar[3].booleanUnion()}
setDDL(yylex, yyLOCAL)
@@ -11165,7 +11209,7 @@ yydefault:
case 147:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *AlterTable
-//line sql.y:1256
+//line sql.y:1257
{
yyLOCAL = &AlterTable{Comments: Comments(yyDollar[2].strs).Parsed(), Table: yyDollar[4].tableName}
setDDL(yylex, yyLOCAL)
@@ -11174,7 +11218,7 @@ yydefault:
case 148:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL *AlterTable
-//line sql.y:1263
+//line sql.y:1264
{
yyLOCAL = &AlterTable{Table: yyDollar[7].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[4].identifierCI}, Options: yyDollar[5].indexOptionsUnion()}}}}
setDDL(yylex, yyLOCAL)
@@ -11183,7 +11227,7 @@ yydefault:
case 149:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL *AlterTable
-//line sql.y:1268
+//line sql.y:1269
{
yyLOCAL = &AlterTable{Table: yyDollar[8].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[5].identifierCI, Type: IndexTypeFullText}, Options: yyDollar[6].indexOptionsUnion()}}}}
setDDL(yylex, yyLOCAL)
@@ -11192,7 +11236,7 @@ yydefault:
case 150:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL *AlterTable
-//line sql.y:1273
+//line sql.y:1274
{
yyLOCAL = &AlterTable{Table: yyDollar[8].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[5].identifierCI, Type: IndexTypeSpatial}, Options: yyDollar[6].indexOptionsUnion()}}}}
setDDL(yylex, yyLOCAL)
@@ -11201,7 +11245,7 @@ yydefault:
case 151:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL *AlterTable
-//line sql.y:1278
+//line sql.y:1279
{
yyLOCAL = &AlterTable{Table: yyDollar[8].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[5].identifierCI, Type: IndexTypeUnique}, Options: yyDollar[6].indexOptionsUnion()}}}}
setDDL(yylex, yyLOCAL)
@@ -11210,7 +11254,7 @@ yydefault:
case 152:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL *CreateDatabase
-//line sql.y:1285
+//line sql.y:1286
{
yyLOCAL = &CreateDatabase{Comments: Comments(yyDollar[4].strs).Parsed(), DBName: yyDollar[6].identifierCS, IfNotExists: yyDollar[5].booleanUnion()}
setDDL(yylex, yyLOCAL)
@@ -11219,7 +11263,7 @@ yydefault:
case 153:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *AlterDatabase
-//line sql.y:1292
+//line sql.y:1293
{
yyLOCAL = &AlterDatabase{}
setDDL(yylex, yyLOCAL)
@@ -11228,7 +11272,7 @@ yydefault:
case 156:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *TableSpec
-//line sql.y:1303
+//line sql.y:1304
{
yyLOCAL = yyDollar[2].tableSpecUnion()
yyLOCAL.Options = yyDollar[4].tableOptionsUnion()
@@ -11238,7 +11282,7 @@ yydefault:
case 157:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL []DatabaseOption
-//line sql.y:1310
+//line sql.y:1311
{
yyLOCAL = nil
}
@@ -11246,7 +11290,7 @@ yydefault:
case 158:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []DatabaseOption
-//line sql.y:1314
+//line sql.y:1315
{
yyLOCAL = yyDollar[1].databaseOptionsUnion()
}
@@ -11254,7 +11298,7 @@ yydefault:
case 159:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []DatabaseOption
-//line sql.y:1320
+//line sql.y:1321
{
yyLOCAL = []DatabaseOption{yyDollar[1].databaseOption}
}
@@ -11262,7 +11306,7 @@ yydefault:
case 160:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []DatabaseOption
-//line sql.y:1324
+//line sql.y:1325
{
yyLOCAL = []DatabaseOption{yyDollar[1].databaseOption}
}
@@ -11270,28 +11314,28 @@ yydefault:
case 161:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []DatabaseOption
-//line sql.y:1328
+//line sql.y:1329
{
yyLOCAL = []DatabaseOption{yyDollar[1].databaseOption}
}
yyVAL.union = yyLOCAL
case 162:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:1332
+//line sql.y:1333
{
yySLICE := (*[]DatabaseOption)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[2].databaseOption)
}
case 163:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:1336
+//line sql.y:1337
{
yySLICE := (*[]DatabaseOption)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[2].databaseOption)
}
case 164:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:1340
+//line sql.y:1341
{
yySLICE := (*[]DatabaseOption)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[2].databaseOption)
@@ -11299,7 +11343,7 @@ yydefault:
case 165:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:1346
+//line sql.y:1347
{
yyLOCAL = false
}
@@ -11307,51 +11351,51 @@ yydefault:
case 166:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:1350
+//line sql.y:1351
{
yyLOCAL = true
}
yyVAL.union = yyLOCAL
case 167:
yyDollar = yyS[yypt-4 : yypt+1]
-//line sql.y:1356
+//line sql.y:1357
{
yyVAL.databaseOption = DatabaseOption{Type: CharacterSetType, Value: string(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()}
}
case 168:
yyDollar = yyS[yypt-4 : yypt+1]
-//line sql.y:1360
+//line sql.y:1361
{
yyVAL.databaseOption = DatabaseOption{Type: CharacterSetType, Value: encodeSQLString(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()}
}
case 169:
yyDollar = yyS[yypt-4 : yypt+1]
-//line sql.y:1366
+//line sql.y:1367
{
yyVAL.databaseOption = DatabaseOption{Type: CollateType, Value: string(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()}
}
case 170:
yyDollar = yyS[yypt-4 : yypt+1]
-//line sql.y:1370
+//line sql.y:1371
{
yyVAL.databaseOption = DatabaseOption{Type: CollateType, Value: encodeSQLString(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()}
}
case 171:
yyDollar = yyS[yypt-4 : yypt+1]
-//line sql.y:1376
+//line sql.y:1377
{
yyVAL.databaseOption = DatabaseOption{Type: EncryptionType, Value: string(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()}
}
case 172:
yyDollar = yyS[yypt-4 : yypt+1]
-//line sql.y:1380
+//line sql.y:1381
{
yyVAL.databaseOption = DatabaseOption{Type: EncryptionType, Value: encodeSQLString(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()}
}
case 173:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *OptLike
-//line sql.y:1386
+//line sql.y:1387
{
yyLOCAL = &OptLike{LikeTable: yyDollar[2].tableName}
}
@@ -11359,7 +11403,7 @@ yydefault:
case 174:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *OptLike
-//line sql.y:1390
+//line sql.y:1391
{
yyLOCAL = &OptLike{LikeTable: yyDollar[3].tableName}
}
@@ -11367,14 +11411,14 @@ yydefault:
case 175:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []*ColumnDefinition
-//line sql.y:1396
+//line sql.y:1397
{
yyLOCAL = []*ColumnDefinition{yyDollar[1].columnDefinitionUnion()}
}
yyVAL.union = yyLOCAL
case 176:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:1400
+//line sql.y:1401
{
yySLICE := (*[]*ColumnDefinition)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].columnDefinitionUnion())
@@ -11382,7 +11426,7 @@ yydefault:
case 177:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *TableSpec
-//line sql.y:1406
+//line sql.y:1407
{
yyLOCAL = &TableSpec{}
yyLOCAL.AddColumn(yyDollar[1].columnDefinitionUnion())
@@ -11391,7 +11435,7 @@ yydefault:
case 178:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *TableSpec
-//line sql.y:1411
+//line sql.y:1412
{
yyLOCAL = &TableSpec{}
yyLOCAL.AddConstraint(yyDollar[1].constraintDefinitionUnion())
@@ -11399,39 +11443,39 @@ yydefault:
yyVAL.union = yyLOCAL
case 179:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:1416
+//line sql.y:1417
{
yyVAL.tableSpecUnion().AddColumn(yyDollar[3].columnDefinitionUnion())
}
case 180:
yyDollar = yyS[yypt-4 : yypt+1]
-//line sql.y:1420
+//line sql.y:1421
{
yyVAL.tableSpecUnion().AddColumn(yyDollar[3].columnDefinitionUnion())
yyVAL.tableSpecUnion().AddConstraint(yyDollar[4].constraintDefinitionUnion())
}
case 181:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:1425
+//line sql.y:1426
{
yyVAL.tableSpecUnion().AddIndex(yyDollar[3].indexDefinitionUnion())
}
case 182:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:1429
+//line sql.y:1430
{
yyVAL.tableSpecUnion().AddConstraint(yyDollar[3].constraintDefinitionUnion())
}
case 183:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:1433
+//line sql.y:1434
{
yyVAL.tableSpecUnion().AddConstraint(yyDollar[3].constraintDefinitionUnion())
}
case 184:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *ColumnDefinition
-//line sql.y:1444
+//line sql.y:1445
{
yyDollar[2].columnType.Options = yyDollar[4].columnTypeOptionsUnion()
if yyDollar[2].columnType.Options.Collate == "" {
@@ -11444,7 +11488,7 @@ yydefault:
case 185:
yyDollar = yyS[yypt-10 : yypt+1]
var yyLOCAL *ColumnDefinition
-//line sql.y:1453
+//line sql.y:1454
{
yyDollar[2].columnType.Options = yyDollar[9].columnTypeOptionsUnion()
yyDollar[2].columnType.Options.As = yyDollar[7].exprUnion()
@@ -11455,20 +11499,20 @@ yydefault:
yyVAL.union = yyLOCAL
case 186:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:1462
+//line sql.y:1463
{
yyVAL.str = ""
}
case 187:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:1466
+//line sql.y:1467
{
yyVAL.str = ""
}
case 188:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *ColumnTypeOptions
-//line sql.y:1475
+//line sql.y:1476
{
yyLOCAL = &ColumnTypeOptions{Null: nil, Default: nil, OnUpdate: nil, Autoincrement: false, KeyOpt: ColKeyNone, Comment: nil, As: nil, Invisible: nil, Format: UnspecifiedFormat, EngineAttribute: nil, SecondaryEngineAttribute: nil}
}
@@ -11476,7 +11520,7 @@ yydefault:
case 189:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ColumnTypeOptions
-//line sql.y:1479
+//line sql.y:1480
{
yyDollar[1].columnTypeOptionsUnion().Null = ptr.Of(true)
yyLOCAL = yyDollar[1].columnTypeOptionsUnion()
@@ -11485,7 +11529,7 @@ yydefault:
case 190:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *ColumnTypeOptions
-//line sql.y:1484
+//line sql.y:1485
{
yyDollar[1].columnTypeOptionsUnion().Null = ptr.Of(false)
yyLOCAL = yyDollar[1].columnTypeOptionsUnion()
@@ -11494,7 +11538,7 @@ yydefault:
case 191:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *ColumnTypeOptions
-//line sql.y:1489
+//line sql.y:1490
{
yyDollar[1].columnTypeOptionsUnion().Default = yyDollar[4].exprUnion()
yyLOCAL = yyDollar[1].columnTypeOptionsUnion()
@@ -11503,7 +11547,7 @@ yydefault:
case 192:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *ColumnTypeOptions
-//line sql.y:1494
+//line sql.y:1495
{
yyDollar[1].columnTypeOptionsUnion().Default = yyDollar[3].exprUnion()
yyDollar[1].columnTypeOptionsUnion().DefaultLiteral = true
@@ -11513,7 +11557,7 @@ yydefault:
case 193:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *ColumnTypeOptions
-//line sql.y:1500
+//line sql.y:1501
{
yyDollar[1].columnTypeOptionsUnion().OnUpdate = yyDollar[4].exprUnion()
yyLOCAL = yyDollar[1].columnTypeOptionsUnion()
@@ -11522,7 +11566,7 @@ yydefault:
case 194:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ColumnTypeOptions
-//line sql.y:1505
+//line sql.y:1506
{
yyDollar[1].columnTypeOptionsUnion().Autoincrement = true
yyLOCAL = yyDollar[1].columnTypeOptionsUnion()
@@ -11531,7 +11575,7 @@ yydefault:
case 195:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *ColumnTypeOptions
-//line sql.y:1510
+//line sql.y:1511
{
yyDollar[1].columnTypeOptionsUnion().Comment = NewStrLiteral(yyDollar[3].str)
yyLOCAL = yyDollar[1].columnTypeOptionsUnion()
@@ -11540,7 +11584,7 @@ yydefault:
case 196:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ColumnTypeOptions
-//line sql.y:1515
+//line sql.y:1516
{
yyDollar[1].columnTypeOptionsUnion().KeyOpt = yyDollar[2].colKeyOptUnion()
yyLOCAL = yyDollar[1].columnTypeOptionsUnion()
@@ -11548,14 +11592,14 @@ yydefault:
yyVAL.union = yyLOCAL
case 197:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:1520
+//line sql.y:1521
{
yyDollar[1].columnTypeOptionsUnion().Collate = encodeSQLString(yyDollar[3].str)
}
case 198:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *ColumnTypeOptions
-//line sql.y:1524
+//line sql.y:1525
{
yyDollar[1].columnTypeOptionsUnion().Collate = string(yyDollar[3].identifierCI.String())
yyLOCAL = yyDollar[1].columnTypeOptionsUnion()
@@ -11563,14 +11607,14 @@ yydefault:
yyVAL.union = yyLOCAL
case 199:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:1529
+//line sql.y:1530
{
yyDollar[1].columnTypeOptionsUnion().Format = yyDollar[3].columnFormatUnion()
}
case 200:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *ColumnTypeOptions
-//line sql.y:1533
+//line sql.y:1534
{
yyDollar[1].columnTypeOptionsUnion().SRID = NewIntLiteral(yyDollar[3].str)
yyLOCAL = yyDollar[1].columnTypeOptionsUnion()
@@ -11579,7 +11623,7 @@ yydefault:
case 201:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ColumnTypeOptions
-//line sql.y:1538
+//line sql.y:1539
{
yyDollar[1].columnTypeOptionsUnion().Invisible = ptr.Of(false)
yyLOCAL = yyDollar[1].columnTypeOptionsUnion()
@@ -11588,7 +11632,7 @@ yydefault:
case 202:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ColumnTypeOptions
-//line sql.y:1543
+//line sql.y:1544
{
yyDollar[1].columnTypeOptionsUnion().Invisible = ptr.Of(true)
yyLOCAL = yyDollar[1].columnTypeOptionsUnion()
@@ -11596,20 +11640,20 @@ yydefault:
yyVAL.union = yyLOCAL
case 203:
yyDollar = yyS[yypt-4 : yypt+1]
-//line sql.y:1548
+//line sql.y:1549
{
yyDollar[1].columnTypeOptionsUnion().EngineAttribute = NewStrLiteral(yyDollar[4].str)
}
case 204:
yyDollar = yyS[yypt-4 : yypt+1]
-//line sql.y:1552
+//line sql.y:1553
{
yyDollar[1].columnTypeOptionsUnion().SecondaryEngineAttribute = NewStrLiteral(yyDollar[4].str)
}
case 205:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ColumnFormat
-//line sql.y:1558
+//line sql.y:1559
{
yyLOCAL = FixedFormat
}
@@ -11617,7 +11661,7 @@ yydefault:
case 206:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ColumnFormat
-//line sql.y:1562
+//line sql.y:1563
{
yyLOCAL = DynamicFormat
}
@@ -11625,7 +11669,7 @@ yydefault:
case 207:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ColumnFormat
-//line sql.y:1566
+//line sql.y:1567
{
yyLOCAL = DefaultFormat
}
@@ -11633,7 +11677,7 @@ yydefault:
case 208:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ColumnStorage
-//line sql.y:1572
+//line sql.y:1573
{
yyLOCAL = VirtualStorage
}
@@ -11641,7 +11685,7 @@ yydefault:
case 209:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ColumnStorage
-//line sql.y:1576
+//line sql.y:1577
{
yyLOCAL = StoredStorage
}
@@ -11649,7 +11693,7 @@ yydefault:
case 210:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *ColumnTypeOptions
-//line sql.y:1581
+//line sql.y:1582
{
yyLOCAL = &ColumnTypeOptions{}
}
@@ -11657,7 +11701,7 @@ yydefault:
case 211:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ColumnTypeOptions
-//line sql.y:1585
+//line sql.y:1586
{
yyDollar[1].columnTypeOptionsUnion().Storage = yyDollar[2].columnStorageUnion()
yyLOCAL = yyDollar[1].columnTypeOptionsUnion()
@@ -11666,7 +11710,7 @@ yydefault:
case 212:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ColumnTypeOptions
-//line sql.y:1590
+//line sql.y:1591
{
yyDollar[1].columnTypeOptionsUnion().Null = ptr.Of(true)
yyLOCAL = yyDollar[1].columnTypeOptionsUnion()
@@ -11675,7 +11719,7 @@ yydefault:
case 213:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *ColumnTypeOptions
-//line sql.y:1595
+//line sql.y:1596
{
yyDollar[1].columnTypeOptionsUnion().Null = ptr.Of(false)
yyLOCAL = yyDollar[1].columnTypeOptionsUnion()
@@ -11684,7 +11728,7 @@ yydefault:
case 214:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *ColumnTypeOptions
-//line sql.y:1600
+//line sql.y:1601
{
yyDollar[1].columnTypeOptionsUnion().Comment = NewStrLiteral(yyDollar[3].str)
yyLOCAL = yyDollar[1].columnTypeOptionsUnion()
@@ -11693,7 +11737,7 @@ yydefault:
case 215:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ColumnTypeOptions
-//line sql.y:1605
+//line sql.y:1606
{
yyDollar[1].columnTypeOptionsUnion().KeyOpt = yyDollar[2].colKeyOptUnion()
yyLOCAL = yyDollar[1].columnTypeOptionsUnion()
@@ -11702,7 +11746,7 @@ yydefault:
case 216:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ColumnTypeOptions
-//line sql.y:1610
+//line sql.y:1611
{
yyDollar[1].columnTypeOptionsUnion().Invisible = ptr.Of(false)
yyLOCAL = yyDollar[1].columnTypeOptionsUnion()
@@ -11711,7 +11755,7 @@ yydefault:
case 217:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ColumnTypeOptions
-//line sql.y:1615
+//line sql.y:1616
{
yyDollar[1].columnTypeOptionsUnion().Invisible = ptr.Of(true)
yyLOCAL = yyDollar[1].columnTypeOptionsUnion()
@@ -11720,7 +11764,7 @@ yydefault:
case 218:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1622
+//line sql.y:1623
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -11728,7 +11772,7 @@ yydefault:
case 220:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1629
+//line sql.y:1630
{
yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("current_timestamp"), Fsp: yyDollar[2].integerUnion()}
}
@@ -11736,7 +11780,7 @@ yydefault:
case 221:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1633
+//line sql.y:1634
{
yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("localtime"), Fsp: yyDollar[2].integerUnion()}
}
@@ -11744,7 +11788,7 @@ yydefault:
case 222:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1637
+//line sql.y:1638
{
yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("localtimestamp"), Fsp: yyDollar[2].integerUnion()}
}
@@ -11752,7 +11796,7 @@ yydefault:
case 223:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1641
+//line sql.y:1642
{
yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("utc_timestamp"), Fsp: yyDollar[2].integerUnion()}
}
@@ -11760,7 +11804,7 @@ yydefault:
case 224:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1645
+//line sql.y:1646
{
yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("now"), Fsp: yyDollar[2].integerUnion()}
}
@@ -11768,7 +11812,7 @@ yydefault:
case 225:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1649
+//line sql.y:1650
{
yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("sysdate"), Fsp: yyDollar[2].integerUnion()}
}
@@ -11776,7 +11820,7 @@ yydefault:
case 228:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1659
+//line sql.y:1660
{
yyLOCAL = &NullVal{}
}
@@ -11784,7 +11828,7 @@ yydefault:
case 230:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1666
+//line sql.y:1667
{
yyLOCAL = yyDollar[2].exprUnion()
}
@@ -11792,7 +11836,7 @@ yydefault:
case 231:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1670
+//line sql.y:1671
{
yyLOCAL = &UnaryExpr{Operator: UMinusOp, Expr: yyDollar[2].exprUnion()}
}
@@ -11800,7 +11844,7 @@ yydefault:
case 232:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1676
+//line sql.y:1677
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -11808,7 +11852,7 @@ yydefault:
case 233:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1680
+//line sql.y:1681
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -11816,7 +11860,7 @@ yydefault:
case 234:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1684
+//line sql.y:1685
{
yyLOCAL = yyDollar[1].boolValUnion()
}
@@ -11824,7 +11868,7 @@ yydefault:
case 235:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1688
+//line sql.y:1689
{
yyLOCAL = NewHexLiteral(yyDollar[1].str)
}
@@ -11832,7 +11876,7 @@ yydefault:
case 236:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1692
+//line sql.y:1693
{
yyLOCAL = NewHexNumLiteral(yyDollar[1].str)
}
@@ -11840,7 +11884,7 @@ yydefault:
case 237:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1696
+//line sql.y:1697
{
yyLOCAL = NewBitLiteral(yyDollar[1].str)
}
@@ -11848,7 +11892,7 @@ yydefault:
case 238:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1700
+//line sql.y:1701
{
yyLOCAL = NewBitLiteral("0b" + yyDollar[1].str)
}
@@ -11856,7 +11900,7 @@ yydefault:
case 239:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1704
+//line sql.y:1705
{
yyLOCAL = parseBindVariable(yylex, yyDollar[1].str[1:])
}
@@ -11864,7 +11908,7 @@ yydefault:
case 240:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1708
+//line sql.y:1709
{
yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewBitLiteral("0b" + yyDollar[2].str)}
}
@@ -11872,7 +11916,7 @@ yydefault:
case 241:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1712
+//line sql.y:1713
{
yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewHexNumLiteral(yyDollar[2].str)}
}
@@ -11880,7 +11924,7 @@ yydefault:
case 242:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1716
+//line sql.y:1717
{
yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewBitLiteral(yyDollar[2].str)}
}
@@ -11888,7 +11932,7 @@ yydefault:
case 243:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1720
+//line sql.y:1721
{
yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewHexLiteral(yyDollar[2].str)}
}
@@ -11896,7 +11940,7 @@ yydefault:
case 244:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1724
+//line sql.y:1725
{
yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: yyDollar[2].exprUnion()}
}
@@ -11904,7 +11948,7 @@ yydefault:
case 245:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1728
+//line sql.y:1729
{
arg := parseBindVariable(yylex, yyDollar[2].str[1:])
yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: arg}
@@ -11913,7 +11957,7 @@ yydefault:
case 246:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1733
+//line sql.y:1734
{
yyLOCAL = NewDateLiteral(yyDollar[2].str)
}
@@ -11921,7 +11965,7 @@ yydefault:
case 247:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1737
+//line sql.y:1738
{
yyLOCAL = NewTimeLiteral(yyDollar[2].str)
}
@@ -11929,267 +11973,267 @@ yydefault:
case 248:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1741
+//line sql.y:1742
{
yyLOCAL = NewTimestampLiteral(yyDollar[2].str)
}
yyVAL.union = yyLOCAL
case 249:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1747
+//line sql.y:1748
{
yyVAL.str = Armscii8Str
}
case 250:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1751
+//line sql.y:1752
{
yyVAL.str = ASCIIStr
}
case 251:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1755
+//line sql.y:1756
{
yyVAL.str = Big5Str
}
case 252:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1759
+//line sql.y:1760
{
yyVAL.str = UBinaryStr
}
case 253:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1763
+//line sql.y:1764
{
yyVAL.str = Cp1250Str
}
case 254:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1767
+//line sql.y:1768
{
yyVAL.str = Cp1251Str
}
case 255:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1771
+//line sql.y:1772
{
yyVAL.str = Cp1256Str
}
case 256:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1775
+//line sql.y:1776
{
yyVAL.str = Cp1257Str
}
case 257:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1779
+//line sql.y:1780
{
yyVAL.str = Cp850Str
}
case 258:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1783
+//line sql.y:1784
{
yyVAL.str = Cp852Str
}
case 259:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1787
+//line sql.y:1788
{
yyVAL.str = Cp866Str
}
case 260:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1791
+//line sql.y:1792
{
yyVAL.str = Cp932Str
}
case 261:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1795
+//line sql.y:1796
{
yyVAL.str = Dec8Str
}
case 262:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1799
+//line sql.y:1800
{
yyVAL.str = EucjpmsStr
}
case 263:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1803
+//line sql.y:1804
{
yyVAL.str = EuckrStr
}
case 264:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1807
+//line sql.y:1808
{
yyVAL.str = Gb18030Str
}
case 265:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1811
+//line sql.y:1812
{
yyVAL.str = Gb2312Str
}
case 266:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1815
+//line sql.y:1816
{
yyVAL.str = GbkStr
}
case 267:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1819
+//line sql.y:1820
{
yyVAL.str = Geostd8Str
}
case 268:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1823
+//line sql.y:1824
{
yyVAL.str = GreekStr
}
case 269:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1827
+//line sql.y:1828
{
yyVAL.str = HebrewStr
}
case 270:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1831
+//line sql.y:1832
{
yyVAL.str = Hp8Str
}
case 271:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1835
+//line sql.y:1836
{
yyVAL.str = Keybcs2Str
}
case 272:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1839
+//line sql.y:1840
{
yyVAL.str = Koi8rStr
}
case 273:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1843
+//line sql.y:1844
{
yyVAL.str = Koi8uStr
}
case 274:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1847
+//line sql.y:1848
{
yyVAL.str = Latin1Str
}
case 275:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1851
+//line sql.y:1852
{
yyVAL.str = Latin2Str
}
case 276:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1855
+//line sql.y:1856
{
yyVAL.str = Latin5Str
}
case 277:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1859
+//line sql.y:1860
{
yyVAL.str = Latin7Str
}
case 278:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1863
+//line sql.y:1864
{
yyVAL.str = MacceStr
}
case 279:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1867
+//line sql.y:1868
{
yyVAL.str = MacromanStr
}
case 280:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1871
+//line sql.y:1872
{
yyVAL.str = SjisStr
}
case 281:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1875
+//line sql.y:1876
{
yyVAL.str = Swe7Str
}
case 282:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1879
+//line sql.y:1880
{
yyVAL.str = Tis620Str
}
case 283:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1883
+//line sql.y:1884
{
yyVAL.str = Ucs2Str
}
case 284:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1887
+//line sql.y:1888
{
yyVAL.str = UjisStr
}
case 285:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1891
+//line sql.y:1892
{
yyVAL.str = Utf16Str
}
case 286:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1895
+//line sql.y:1896
{
yyVAL.str = Utf16leStr
}
case 287:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1899
+//line sql.y:1900
{
yyVAL.str = Utf32Str
}
case 288:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1903
+//line sql.y:1904
{
yyVAL.str = Utf8mb3Str
}
case 289:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1907
+//line sql.y:1908
{
yyVAL.str = Utf8mb4Str
}
case 290:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1911
+//line sql.y:1912
{
yyVAL.str = Utf8mb3Str
}
case 293:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1921
+//line sql.y:1922
{
yyLOCAL = NewIntLiteral(yyDollar[1].str)
}
@@ -12197,7 +12241,7 @@ yydefault:
case 294:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1925
+//line sql.y:1926
{
yyLOCAL = NewFloatLiteral(yyDollar[1].str)
}
@@ -12205,7 +12249,7 @@ yydefault:
case 295:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1929
+//line sql.y:1930
{
yyLOCAL = NewDecimalLiteral(yyDollar[1].str)
}
@@ -12213,7 +12257,7 @@ yydefault:
case 296:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1935
+//line sql.y:1936
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -12221,7 +12265,7 @@ yydefault:
case 297:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1939
+//line sql.y:1940
{
yyLOCAL = AppendString(yyDollar[1].exprUnion(), yyDollar[2].str)
}
@@ -12229,7 +12273,7 @@ yydefault:
case 298:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1945
+//line sql.y:1946
{
yyLOCAL = NewStrLiteral(yyDollar[1].str)
}
@@ -12237,7 +12281,7 @@ yydefault:
case 299:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1949
+//line sql.y:1950
{
yyLOCAL = &UnaryExpr{Operator: NStringOp, Expr: NewStrLiteral(yyDollar[1].str)}
}
@@ -12245,7 +12289,7 @@ yydefault:
case 300:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1953
+//line sql.y:1954
{
yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewStrLiteral(yyDollar[2].str)}
}
@@ -12253,7 +12297,7 @@ yydefault:
case 301:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1959
+//line sql.y:1960
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -12261,7 +12305,7 @@ yydefault:
case 302:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1963
+//line sql.y:1964
{
yyLOCAL = parseBindVariable(yylex, yyDollar[1].str[1:])
}
@@ -12269,7 +12313,7 @@ yydefault:
case 303:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL ColumnKeyOption
-//line sql.y:1969
+//line sql.y:1970
{
yyLOCAL = ColKeyPrimary
}
@@ -12277,7 +12321,7 @@ yydefault:
case 304:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ColumnKeyOption
-//line sql.y:1973
+//line sql.y:1974
{
yyLOCAL = ColKeyUnique
}
@@ -12285,7 +12329,7 @@ yydefault:
case 305:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL ColumnKeyOption
-//line sql.y:1977
+//line sql.y:1978
{
yyLOCAL = ColKeyUniqueKey
}
@@ -12293,14 +12337,14 @@ yydefault:
case 306:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ColumnKeyOption
-//line sql.y:1981
+//line sql.y:1982
{
yyLOCAL = ColKey
}
yyVAL.union = yyLOCAL
case 307:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:1987
+//line sql.y:1988
{
yyVAL.columnType = yyDollar[1].columnType
yyVAL.columnType.Unsigned = yyDollar[2].booleanUnion()
@@ -12308,74 +12352,74 @@ yydefault:
}
case 311:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:1998
+//line sql.y:1999
{
yyVAL.columnType = yyDollar[1].columnType
yyVAL.columnType.Length = yyDollar[2].intPtrUnion()
}
case 312:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2003
+//line sql.y:2004
{
yyVAL.columnType = yyDollar[1].columnType
}
case 313:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2009
+//line sql.y:2010
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
}
case 314:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2013
+//line sql.y:2014
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
}
case 315:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2017
+//line sql.y:2018
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
}
case 316:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2021
+//line sql.y:2022
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
}
case 317:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2025
+//line sql.y:2026
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
}
case 318:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2029
+//line sql.y:2030
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
}
case 319:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2033
+//line sql.y:2034
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
}
case 320:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2037
+//line sql.y:2038
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
}
case 321:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2041
+//line sql.y:2042
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
}
case 322:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2047
+//line sql.y:2048
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length
@@ -12383,7 +12427,7 @@ yydefault:
}
case 323:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2053
+//line sql.y:2054
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length
@@ -12391,7 +12435,7 @@ yydefault:
}
case 324:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2059
+//line sql.y:2060
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length
@@ -12399,7 +12443,7 @@ yydefault:
}
case 325:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2065
+//line sql.y:2066
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length
@@ -12407,7 +12451,7 @@ yydefault:
}
case 326:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2071
+//line sql.y:2072
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length
@@ -12415,7 +12459,7 @@ yydefault:
}
case 327:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2077
+//line sql.y:2078
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length
@@ -12423,7 +12467,7 @@ yydefault:
}
case 328:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2083
+//line sql.y:2084
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length
@@ -12431,43 +12475,43 @@ yydefault:
}
case 329:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2091
+//line sql.y:2092
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
}
case 330:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2095
+//line sql.y:2096
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()}
}
case 331:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2099
+//line sql.y:2100
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()}
}
case 332:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2103
+//line sql.y:2104
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()}
}
case 333:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2107
+//line sql.y:2108
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()}
}
case 334:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:2113
+//line sql.y:2114
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion(), Charset: yyDollar[3].columnCharset}
}
case 335:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:2117
+//line sql.y:2118
{
// CHAR BYTE is an alias for binary. See also:
// https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html
@@ -12475,153 +12519,153 @@ yydefault:
}
case 336:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:2123
+//line sql.y:2124
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion(), Charset: yyDollar[3].columnCharset}
}
case 337:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2127
+//line sql.y:2128
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()}
}
case 338:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2131
+//line sql.y:2132
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()}
}
case 339:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2135
+//line sql.y:2136
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset}
}
case 340:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2139
+//line sql.y:2140
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset}
}
case 341:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2143
+//line sql.y:2144
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset}
}
case 342:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2147
+//line sql.y:2148
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset}
}
case 343:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2151
+//line sql.y:2152
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
}
case 344:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2155
+//line sql.y:2156
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
}
case 345:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2159
+//line sql.y:2160
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
}
case 346:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2163
+//line sql.y:2164
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
}
case 347:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2167
+//line sql.y:2168
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
}
case 348:
yyDollar = yyS[yypt-5 : yypt+1]
-//line sql.y:2171
+//line sql.y:2172
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].columnCharset}
}
case 349:
yyDollar = yyS[yypt-5 : yypt+1]
-//line sql.y:2176
+//line sql.y:2177
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].columnCharset}
}
case 350:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2182
+//line sql.y:2183
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
}
case 351:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2186
+//line sql.y:2187
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
}
case 352:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2190
+//line sql.y:2191
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
}
case 353:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2194
+//line sql.y:2195
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
}
case 354:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2198
+//line sql.y:2199
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
}
case 355:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2202
+//line sql.y:2203
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
}
case 356:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2206
+//line sql.y:2207
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
}
case 357:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2210
+//line sql.y:2211
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
}
case 358:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2216
+//line sql.y:2217
{
yyVAL.strs = make([]string, 0, 4)
yyVAL.strs = append(yyVAL.strs, encodeSQLString(yyDollar[1].str))
}
case 359:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:2221
+//line sql.y:2222
{
yyVAL.strs = append(yyDollar[1].strs, encodeSQLString(yyDollar[3].str))
}
case 360:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *int
-//line sql.y:2226
+//line sql.y:2227
{
yyLOCAL = nil
}
@@ -12629,20 +12673,20 @@ yydefault:
case 361:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *int
-//line sql.y:2230
+//line sql.y:2231
{
yyLOCAL = ptr.Of(convertStringToInt(yyDollar[2].str))
}
yyVAL.union = yyLOCAL
case 362:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:2235
+//line sql.y:2236
{
yyVAL.LengthScaleOption = LengthScaleOption{}
}
case 363:
yyDollar = yyS[yypt-5 : yypt+1]
-//line sql.y:2239
+//line sql.y:2240
{
yyVAL.LengthScaleOption = LengthScaleOption{
Length: ptr.Of(convertStringToInt(yyDollar[2].str)),
@@ -12651,13 +12695,13 @@ yydefault:
}
case 364:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2248
+//line sql.y:2249
{
yyVAL.LengthScaleOption = yyDollar[1].LengthScaleOption
}
case 365:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:2252
+//line sql.y:2253
{
yyVAL.LengthScaleOption = LengthScaleOption{
Length: ptr.Of(convertStringToInt(yyDollar[2].str)),
@@ -12665,13 +12709,13 @@ yydefault:
}
case 366:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:2259
+//line sql.y:2260
{
yyVAL.LengthScaleOption = LengthScaleOption{}
}
case 367:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:2263
+//line sql.y:2264
{
yyVAL.LengthScaleOption = LengthScaleOption{
Length: ptr.Of(convertStringToInt(yyDollar[2].str)),
@@ -12679,7 +12723,7 @@ yydefault:
}
case 368:
yyDollar = yyS[yypt-5 : yypt+1]
-//line sql.y:2269
+//line sql.y:2270
{
yyVAL.LengthScaleOption = LengthScaleOption{
Length: ptr.Of(convertStringToInt(yyDollar[2].str)),
@@ -12689,7 +12733,7 @@ yydefault:
case 369:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:2277
+//line sql.y:2278
{
yyLOCAL = false
}
@@ -12697,7 +12741,7 @@ yydefault:
case 370:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:2281
+//line sql.y:2282
{
yyLOCAL = true
}
@@ -12705,7 +12749,7 @@ yydefault:
case 371:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:2285
+//line sql.y:2286
{
yyLOCAL = false
}
@@ -12713,7 +12757,7 @@ yydefault:
case 372:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:2290
+//line sql.y:2291
{
yyLOCAL = false
}
@@ -12721,66 +12765,66 @@ yydefault:
case 373:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:2294
+//line sql.y:2295
{
yyLOCAL = true
}
yyVAL.union = yyLOCAL
case 374:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:2299
+//line sql.y:2300
{
yyVAL.columnCharset = ColumnCharset{}
}
case 375:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:2303
+//line sql.y:2304
{
yyVAL.columnCharset = ColumnCharset{Name: string(yyDollar[2].identifierCI.String()), Binary: yyDollar[3].booleanUnion()}
}
case 376:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:2307
+//line sql.y:2308
{
yyVAL.columnCharset = ColumnCharset{Name: encodeSQLString(yyDollar[2].str), Binary: yyDollar[3].booleanUnion()}
}
case 377:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2311
+//line sql.y:2312
{
yyVAL.columnCharset = ColumnCharset{Name: string(yyDollar[2].str)}
}
case 378:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2315
+//line sql.y:2316
{
// ASCII: Shorthand for CHARACTER SET latin1.
yyVAL.columnCharset = ColumnCharset{Name: "latin1", Binary: yyDollar[2].booleanUnion()}
}
case 379:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2320
+//line sql.y:2321
{
// UNICODE: Shorthand for CHARACTER SET ucs2.
yyVAL.columnCharset = ColumnCharset{Name: "ucs2", Binary: yyDollar[2].booleanUnion()}
}
case 380:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2325
+//line sql.y:2326
{
// BINARY: Shorthand for default CHARACTER SET but with binary collation
yyVAL.columnCharset = ColumnCharset{Name: "", Binary: true}
}
case 381:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2330
+//line sql.y:2331
{
// BINARY ASCII: Shorthand for CHARACTER SET latin1 with binary collation
yyVAL.columnCharset = ColumnCharset{Name: "latin1", Binary: true}
}
case 382:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2335
+//line sql.y:2336
{
// BINARY UNICODE: Shorthand for CHARACTER SET ucs2 with binary collation
yyVAL.columnCharset = ColumnCharset{Name: "ucs2", Binary: true}
@@ -12788,7 +12832,7 @@ yydefault:
case 383:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:2341
+//line sql.y:2342
{
yyLOCAL = false
}
@@ -12796,33 +12840,33 @@ yydefault:
case 384:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:2345
+//line sql.y:2346
{
yyLOCAL = true
}
yyVAL.union = yyLOCAL
case 385:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:2350
+//line sql.y:2351
{
yyVAL.str = ""
}
case 386:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2354
+//line sql.y:2355
{
yyVAL.str = string(yyDollar[2].identifierCI.String())
}
case 387:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2358
+//line sql.y:2359
{
yyVAL.str = encodeSQLString(yyDollar[2].str)
}
case 388:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *IndexDefinition
-//line sql.y:2364
+//line sql.y:2365
{
yyLOCAL = &IndexDefinition{Info: yyDollar[1].indexInfoUnion(), Columns: yyDollar[3].indexColumnsUnion(), Options: yyDollar[5].indexOptionsUnion()}
}
@@ -12830,7 +12874,7 @@ yydefault:
case 389:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL []*IndexOption
-//line sql.y:2369
+//line sql.y:2370
{
yyLOCAL = nil
}
@@ -12838,7 +12882,7 @@ yydefault:
case 390:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []*IndexOption
-//line sql.y:2373
+//line sql.y:2374
{
yyLOCAL = yyDollar[1].indexOptionsUnion()
}
@@ -12846,14 +12890,14 @@ yydefault:
case 391:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []*IndexOption
-//line sql.y:2379
+//line sql.y:2380
{
yyLOCAL = []*IndexOption{yyDollar[1].indexOptionUnion()}
}
yyVAL.union = yyLOCAL
case 392:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2383
+//line sql.y:2384
{
yySLICE := (*[]*IndexOption)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[2].indexOptionUnion())
@@ -12861,7 +12905,7 @@ yydefault:
case 393:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *IndexOption
-//line sql.y:2389
+//line sql.y:2390
{
yyLOCAL = yyDollar[1].indexOptionUnion()
}
@@ -12869,7 +12913,7 @@ yydefault:
case 394:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *IndexOption
-//line sql.y:2393
+//line sql.y:2394
{
// should not be string
yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
@@ -12878,7 +12922,7 @@ yydefault:
case 395:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *IndexOption
-//line sql.y:2398
+//line sql.y:2399
{
yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[2].str)}
}
@@ -12886,7 +12930,7 @@ yydefault:
case 396:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *IndexOption
-//line sql.y:2402
+//line sql.y:2403
{
yyLOCAL = &IndexOption{Name: string(yyDollar[1].str)}
}
@@ -12894,7 +12938,7 @@ yydefault:
case 397:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *IndexOption
-//line sql.y:2406
+//line sql.y:2407
{
yyLOCAL = &IndexOption{Name: string(yyDollar[1].str)}
}
@@ -12902,7 +12946,7 @@ yydefault:
case 398:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *IndexOption
-//line sql.y:2410
+//line sql.y:2411
{
yyLOCAL = &IndexOption{Name: string(yyDollar[1].str) + " " + string(yyDollar[2].str), String: yyDollar[3].identifierCI.String()}
}
@@ -12910,7 +12954,7 @@ yydefault:
case 399:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *IndexOption
-//line sql.y:2414
+//line sql.y:2415
{
yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)}
}
@@ -12918,27 +12962,27 @@ yydefault:
case 400:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *IndexOption
-//line sql.y:2418
+//line sql.y:2419
{
yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)}
}
yyVAL.union = yyLOCAL
case 401:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:2424
+//line sql.y:2425
{
yyVAL.str = ""
}
case 402:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2428
+//line sql.y:2429
{
yyVAL.str = string(yyDollar[1].str)
}
case 403:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *IndexInfo
-//line sql.y:2434
+//line sql.y:2435
{
yyLOCAL = &IndexInfo{Type: IndexTypePrimary, ConstraintName: NewIdentifierCI(yyDollar[1].str), Name: NewIdentifierCI("PRIMARY")}
}
@@ -12946,7 +12990,7 @@ yydefault:
case 404:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *IndexInfo
-//line sql.y:2438
+//line sql.y:2439
{
yyLOCAL = &IndexInfo{Type: IndexTypeSpatial, Name: NewIdentifierCI(yyDollar[3].str)}
}
@@ -12954,7 +12998,7 @@ yydefault:
case 405:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *IndexInfo
-//line sql.y:2442
+//line sql.y:2443
{
yyLOCAL = &IndexInfo{Type: IndexTypeFullText, Name: NewIdentifierCI(yyDollar[3].str)}
}
@@ -12962,7 +13006,7 @@ yydefault:
case 406:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *IndexInfo
-//line sql.y:2446
+//line sql.y:2447
{
yyLOCAL = &IndexInfo{Type: IndexTypeUnique, ConstraintName: NewIdentifierCI(yyDollar[1].str), Name: NewIdentifierCI(yyDollar[4].str)}
}
@@ -12970,100 +13014,100 @@ yydefault:
case 407:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *IndexInfo
-//line sql.y:2450
+//line sql.y:2451
{
yyLOCAL = &IndexInfo{Type: IndexTypeDefault, Name: NewIdentifierCI(yyDollar[2].str)}
}
yyVAL.union = yyLOCAL
case 408:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:2455
+//line sql.y:2456
{
yyVAL.str = ""
}
case 409:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2459
+//line sql.y:2460
{
yyVAL.str = yyDollar[2].str
}
case 410:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2465
+//line sql.y:2466
{
yyVAL.str = string(yyDollar[1].str)
}
case 411:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2469
+//line sql.y:2470
{
yyVAL.str = string(yyDollar[1].str)
}
case 412:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2473
+//line sql.y:2474
{
yyVAL.str = string(yyDollar[1].str)
}
case 413:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2479
+//line sql.y:2480
{
yyVAL.str = string(yyDollar[1].str)
}
case 414:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2483
+//line sql.y:2484
{
yyVAL.str = string(yyDollar[1].str)
}
case 415:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:2488
+//line sql.y:2489
{
yyVAL.str = ""
}
case 416:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2492
+//line sql.y:2493
{
yyVAL.str = yyDollar[1].str
}
case 417:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2498
+//line sql.y:2499
{
yyVAL.str = string(yyDollar[1].str)
}
case 418:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2502
+//line sql.y:2503
{
yyVAL.str = string(yyDollar[1].str)
}
case 419:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:2507
+//line sql.y:2508
{
yyVAL.str = ""
}
case 420:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2511
+//line sql.y:2512
{
yyVAL.str = string(yyDollar[1].identifierCI.String())
}
case 421:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []*IndexColumn
-//line sql.y:2517
+//line sql.y:2518
{
yyLOCAL = []*IndexColumn{yyDollar[1].indexColumnUnion()}
}
yyVAL.union = yyLOCAL
case 422:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:2521
+//line sql.y:2522
{
yySLICE := (*[]*IndexColumn)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].indexColumnUnion())
@@ -13071,7 +13115,7 @@ yydefault:
case 423:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *IndexColumn
-//line sql.y:2527
+//line sql.y:2528
{
yyLOCAL = &IndexColumn{Column: yyDollar[1].identifierCI, Length: yyDollar[2].intPtrUnion(), Direction: yyDollar[3].orderDirectionUnion()}
}
@@ -13079,7 +13123,7 @@ yydefault:
case 424:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *IndexColumn
-//line sql.y:2531
+//line sql.y:2532
{
yyLOCAL = &IndexColumn{Expression: yyDollar[2].exprUnion(), Direction: yyDollar[4].orderDirectionUnion()}
}
@@ -13087,7 +13131,7 @@ yydefault:
case 425:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *ConstraintDefinition
-//line sql.y:2537
+//line sql.y:2538
{
yyLOCAL = &ConstraintDefinition{Name: yyDollar[2].identifierCI, Details: yyDollar[3].constraintInfoUnion()}
}
@@ -13095,7 +13139,7 @@ yydefault:
case 426:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *ConstraintDefinition
-//line sql.y:2541
+//line sql.y:2542
{
yyLOCAL = &ConstraintDefinition{Details: yyDollar[1].constraintInfoUnion()}
}
@@ -13103,7 +13147,7 @@ yydefault:
case 427:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *ConstraintDefinition
-//line sql.y:2547
+//line sql.y:2548
{
yyLOCAL = &ConstraintDefinition{Name: yyDollar[2].identifierCI, Details: yyDollar[3].constraintInfoUnion()}
}
@@ -13111,7 +13155,7 @@ yydefault:
case 428:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *ConstraintDefinition
-//line sql.y:2551
+//line sql.y:2552
{
yyLOCAL = &ConstraintDefinition{Details: yyDollar[1].constraintInfoUnion()}
}
@@ -13119,7 +13163,7 @@ yydefault:
case 429:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL ConstraintInfo
-//line sql.y:2557
+//line sql.y:2558
{
yyLOCAL = &ForeignKeyDefinition{IndexName: NewIdentifierCI(yyDollar[3].str), Source: yyDollar[5].columnsUnion(), ReferenceDefinition: yyDollar[7].referenceDefinitionUnion()}
}
@@ -13127,7 +13171,7 @@ yydefault:
case 430:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL *ReferenceDefinition
-//line sql.y:2563
+//line sql.y:2564
{
yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion()}
}
@@ -13135,7 +13179,7 @@ yydefault:
case 431:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL *ReferenceDefinition
-//line sql.y:2567
+//line sql.y:2568
{
yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnDelete: yyDollar[7].referenceActionUnion()}
}
@@ -13143,7 +13187,7 @@ yydefault:
case 432:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL *ReferenceDefinition
-//line sql.y:2571
+//line sql.y:2572
{
yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnUpdate: yyDollar[7].referenceActionUnion()}
}
@@ -13151,7 +13195,7 @@ yydefault:
case 433:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL *ReferenceDefinition
-//line sql.y:2575
+//line sql.y:2576
{
yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnDelete: yyDollar[7].referenceActionUnion(), OnUpdate: yyDollar[8].referenceActionUnion()}
}
@@ -13159,7 +13203,7 @@ yydefault:
case 434:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL *ReferenceDefinition
-//line sql.y:2579
+//line sql.y:2580
{
yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnUpdate: yyDollar[7].referenceActionUnion(), OnDelete: yyDollar[8].referenceActionUnion()}
}
@@ -13167,7 +13211,7 @@ yydefault:
case 435:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *ReferenceDefinition
-//line sql.y:2584
+//line sql.y:2585
{
yyLOCAL = nil
}
@@ -13175,7 +13219,7 @@ yydefault:
case 436:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *ReferenceDefinition
-//line sql.y:2588
+//line sql.y:2589
{
yyLOCAL = yyDollar[1].referenceDefinitionUnion()
}
@@ -13183,7 +13227,7 @@ yydefault:
case 437:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL ConstraintInfo
-//line sql.y:2594
+//line sql.y:2595
{
yyLOCAL = &CheckConstraintDefinition{Expr: yyDollar[3].exprUnion(), Enforced: yyDollar[5].booleanUnion()}
}
@@ -13191,7 +13235,7 @@ yydefault:
case 438:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL MatchAction
-//line sql.y:2600
+//line sql.y:2601
{
yyLOCAL = yyDollar[2].matchActionUnion()
}
@@ -13199,7 +13243,7 @@ yydefault:
case 439:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL MatchAction
-//line sql.y:2606
+//line sql.y:2607
{
yyLOCAL = Full
}
@@ -13207,7 +13251,7 @@ yydefault:
case 440:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL MatchAction
-//line sql.y:2610
+//line sql.y:2611
{
yyLOCAL = Partial
}
@@ -13215,7 +13259,7 @@ yydefault:
case 441:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL MatchAction
-//line sql.y:2614
+//line sql.y:2615
{
yyLOCAL = Simple
}
@@ -13223,7 +13267,7 @@ yydefault:
case 442:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL MatchAction
-//line sql.y:2619
+//line sql.y:2620
{
yyLOCAL = DefaultMatch
}
@@ -13231,7 +13275,7 @@ yydefault:
case 443:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL MatchAction
-//line sql.y:2623
+//line sql.y:2624
{
yyLOCAL = yyDollar[1].matchActionUnion()
}
@@ -13239,7 +13283,7 @@ yydefault:
case 444:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL ReferenceAction
-//line sql.y:2629
+//line sql.y:2630
{
yyLOCAL = yyDollar[3].referenceActionUnion()
}
@@ -13247,7 +13291,7 @@ yydefault:
case 445:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL ReferenceAction
-//line sql.y:2635
+//line sql.y:2636
{
yyLOCAL = yyDollar[3].referenceActionUnion()
}
@@ -13255,7 +13299,7 @@ yydefault:
case 446:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ReferenceAction
-//line sql.y:2641
+//line sql.y:2642
{
yyLOCAL = Restrict
}
@@ -13263,7 +13307,7 @@ yydefault:
case 447:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ReferenceAction
-//line sql.y:2645
+//line sql.y:2646
{
yyLOCAL = Cascade
}
@@ -13271,7 +13315,7 @@ yydefault:
case 448:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL ReferenceAction
-//line sql.y:2649
+//line sql.y:2650
{
yyLOCAL = NoAction
}
@@ -13279,7 +13323,7 @@ yydefault:
case 449:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL ReferenceAction
-//line sql.y:2653
+//line sql.y:2654
{
yyLOCAL = SetDefault
}
@@ -13287,33 +13331,33 @@ yydefault:
case 450:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL ReferenceAction
-//line sql.y:2657
+//line sql.y:2658
{
yyLOCAL = SetNull
}
yyVAL.union = yyLOCAL
case 451:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:2662
+//line sql.y:2663
{
yyVAL.str = ""
}
case 452:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2666
+//line sql.y:2667
{
yyVAL.str = string(yyDollar[1].str)
}
case 453:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2670
+//line sql.y:2671
{
yyVAL.str = string(yyDollar[1].str)
}
case 454:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:2676
+//line sql.y:2677
{
yyLOCAL = true
}
@@ -13321,7 +13365,7 @@ yydefault:
case 455:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL bool
-//line sql.y:2680
+//line sql.y:2681
{
yyLOCAL = false
}
@@ -13329,7 +13373,7 @@ yydefault:
case 456:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:2685
+//line sql.y:2686
{
yyLOCAL = true
}
@@ -13337,7 +13381,7 @@ yydefault:
case 457:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:2689
+//line sql.y:2690
{
yyLOCAL = yyDollar[1].booleanUnion()
}
@@ -13345,7 +13389,7 @@ yydefault:
case 458:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL TableOptions
-//line sql.y:2694
+//line sql.y:2695
{
yyLOCAL = nil
}
@@ -13353,7 +13397,7 @@ yydefault:
case 459:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL TableOptions
-//line sql.y:2698
+//line sql.y:2699
{
yyLOCAL = yyDollar[1].tableOptionsUnion()
}
@@ -13361,21 +13405,21 @@ yydefault:
case 460:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL TableOptions
-//line sql.y:2704
+//line sql.y:2705
{
yyLOCAL = TableOptions{yyDollar[1].tableOptionUnion()}
}
yyVAL.union = yyLOCAL
case 461:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:2708
+//line sql.y:2709
{
yySLICE := (*TableOptions)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].tableOptionUnion())
}
case 462:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2712
+//line sql.y:2713
{
yySLICE := (*TableOptions)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[2].tableOptionUnion())
@@ -13383,14 +13427,14 @@ yydefault:
case 463:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL TableOptions
-//line sql.y:2718
+//line sql.y:2719
{
yyLOCAL = TableOptions{yyDollar[1].tableOptionUnion()}
}
yyVAL.union = yyLOCAL
case 464:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2722
+//line sql.y:2723
{
yySLICE := (*TableOptions)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[2].tableOptionUnion())
@@ -13398,7 +13442,7 @@ yydefault:
case 465:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2728
+//line sql.y:2729
{
yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
}
@@ -13406,7 +13450,7 @@ yydefault:
case 466:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2732
+//line sql.y:2733
{
yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
}
@@ -13414,7 +13458,7 @@ yydefault:
case 467:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2736
+//line sql.y:2737
{
yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
}
@@ -13422,7 +13466,7 @@ yydefault:
case 468:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2740
+//line sql.y:2741
{
yyLOCAL = &TableOption{Name: (string(yyDollar[2].str)), String: yyDollar[4].str, CaseSensitive: true}
}
@@ -13430,7 +13474,7 @@ yydefault:
case 469:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2744
+//line sql.y:2745
{
yyLOCAL = &TableOption{Name: string(yyDollar[2].str), String: yyDollar[4].str, CaseSensitive: true}
}
@@ -13438,7 +13482,7 @@ yydefault:
case 470:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2748
+//line sql.y:2749
{
yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
}
@@ -13446,7 +13490,7 @@ yydefault:
case 471:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2752
+//line sql.y:2753
{
yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)}
}
@@ -13454,7 +13498,7 @@ yydefault:
case 472:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2756
+//line sql.y:2757
{
yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)}
}
@@ -13462,7 +13506,7 @@ yydefault:
case 473:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2760
+//line sql.y:2761
{
yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)}
}
@@ -13470,7 +13514,7 @@ yydefault:
case 474:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2764
+//line sql.y:2765
{
yyLOCAL = &TableOption{Name: (string(yyDollar[1].str) + " " + string(yyDollar[2].str)), Value: NewStrLiteral(yyDollar[4].str)}
}
@@ -13478,7 +13522,7 @@ yydefault:
case 475:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2768
+//line sql.y:2769
{
yyLOCAL = &TableOption{Name: (string(yyDollar[1].str) + " " + string(yyDollar[2].str)), Value: NewStrLiteral(yyDollar[4].str)}
}
@@ -13486,7 +13530,7 @@ yydefault:
case 476:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2772
+//line sql.y:2773
{
yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
}
@@ -13494,7 +13538,7 @@ yydefault:
case 477:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2776
+//line sql.y:2777
{
yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)}
}
@@ -13502,7 +13546,7 @@ yydefault:
case 478:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2780
+//line sql.y:2781
{
yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: yyDollar[3].identifierCS.String(), CaseSensitive: true}
}
@@ -13510,7 +13554,7 @@ yydefault:
case 479:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2784
+//line sql.y:2785
{
yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)}
}
@@ -13518,7 +13562,7 @@ yydefault:
case 480:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2788
+//line sql.y:2789
{
yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)}
}
@@ -13526,7 +13570,7 @@ yydefault:
case 481:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2792
+//line sql.y:2793
{
yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
}
@@ -13534,7 +13578,7 @@ yydefault:
case 482:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2796
+//line sql.y:2797
{
yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
}
@@ -13542,7 +13586,7 @@ yydefault:
case 483:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2800
+//line sql.y:2801
{
yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
}
@@ -13550,7 +13594,7 @@ yydefault:
case 484:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2804
+//line sql.y:2805
{
yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
}
@@ -13558,7 +13602,7 @@ yydefault:
case 485:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2808
+//line sql.y:2809
{
yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)}
}
@@ -13566,7 +13610,7 @@ yydefault:
case 486:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2812
+//line sql.y:2813
{
yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)}
}
@@ -13574,7 +13618,7 @@ yydefault:
case 487:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2816
+//line sql.y:2817
{
yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)}
}
@@ -13582,7 +13626,7 @@ yydefault:
case 488:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2820
+//line sql.y:2821
{
yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)}
}
@@ -13590,7 +13634,7 @@ yydefault:
case 489:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2824
+//line sql.y:2825
{
yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
}
@@ -13598,7 +13642,7 @@ yydefault:
case 490:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2828
+//line sql.y:2829
{
yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)}
}
@@ -13606,7 +13650,7 @@ yydefault:
case 491:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2832
+//line sql.y:2833
{
yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
}
@@ -13614,7 +13658,7 @@ yydefault:
case 492:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2836
+//line sql.y:2837
{
yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)}
}
@@ -13622,7 +13666,7 @@ yydefault:
case 493:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2840
+//line sql.y:2841
{
yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
}
@@ -13630,7 +13674,7 @@ yydefault:
case 494:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2844
+//line sql.y:2845
{
yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: (yyDollar[3].identifierCI.String() + yyDollar[4].str), CaseSensitive: true}
}
@@ -13638,63 +13682,63 @@ yydefault:
case 495:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *TableOption
-//line sql.y:2848
+//line sql.y:2849
{
yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Tables: yyDollar[4].tableNamesUnion()}
}
yyVAL.union = yyLOCAL
case 496:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:2853
+//line sql.y:2854
{
yyVAL.str = ""
}
case 497:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2857
+//line sql.y:2858
{
yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str)
}
case 498:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2861
+//line sql.y:2862
{
yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str)
}
case 508:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:2880
+//line sql.y:2881
{
yyVAL.str = String(TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS})
}
case 509:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2884
+//line sql.y:2885
{
yyVAL.str = yyDollar[1].identifierCI.String()
}
case 510:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2888
+//line sql.y:2889
{
yyVAL.str = encodeSQLString(yyDollar[1].str)
}
case 511:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2892
+//line sql.y:2893
{
yyVAL.str = string(yyDollar[1].str)
}
case 512:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:2897
+//line sql.y:2898
{
yyVAL.str = ""
}
case 514:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:2903
+//line sql.y:2904
{
yyLOCAL = false
}
@@ -13702,7 +13746,7 @@ yydefault:
case 515:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:2907
+//line sql.y:2908
{
yyLOCAL = true
}
@@ -13710,7 +13754,7 @@ yydefault:
case 516:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *ColName
-//line sql.y:2912
+//line sql.y:2913
{
yyLOCAL = nil
}
@@ -13718,27 +13762,27 @@ yydefault:
case 517:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ColName
-//line sql.y:2916
+//line sql.y:2917
{
yyLOCAL = yyDollar[2].colNameUnion()
}
yyVAL.union = yyLOCAL
case 518:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:2921
+//line sql.y:2922
{
yyVAL.str = ""
}
case 519:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2925
+//line sql.y:2926
{
yyVAL.str = string(yyDollar[2].str)
}
case 520:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *Literal
-//line sql.y:2930
+//line sql.y:2931
{
yyLOCAL = nil
}
@@ -13746,7 +13790,7 @@ yydefault:
case 521:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *Literal
-//line sql.y:2934
+//line sql.y:2935
{
yyLOCAL = NewIntLiteral(yyDollar[2].str)
}
@@ -13754,7 +13798,7 @@ yydefault:
case 522:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *Literal
-//line sql.y:2938
+//line sql.y:2939
{
yyLOCAL = NewDecimalLiteral(yyDollar[2].str)
}
@@ -13762,7 +13806,7 @@ yydefault:
case 523:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL []AlterOption
-//line sql.y:2943
+//line sql.y:2944
{
yyLOCAL = nil
}
@@ -13770,14 +13814,14 @@ yydefault:
case 524:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []AlterOption
-//line sql.y:2947
+//line sql.y:2948
{
yyLOCAL = yyDollar[1].alterOptionsUnion()
}
yyVAL.union = yyLOCAL
case 525:
yyDollar = yyS[yypt-5 : yypt+1]
-//line sql.y:2951
+//line sql.y:2952
{
yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, &OrderByOption{Cols: yyDollar[5].columnsUnion()})
@@ -13785,14 +13829,14 @@ yydefault:
case 526:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []AlterOption
-//line sql.y:2955
+//line sql.y:2956
{
yyLOCAL = yyDollar[1].alterOptionsUnion()
}
yyVAL.union = yyLOCAL
case 527:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:2959
+//line sql.y:2960
{
yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].alterOptionsUnion()...)
@@ -13800,7 +13844,7 @@ yydefault:
case 528:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL []AlterOption
-//line sql.y:2963
+//line sql.y:2964
{
yyLOCAL = append(append(yyDollar[1].alterOptionsUnion(), yyDollar[3].alterOptionsUnion()...), &OrderByOption{Cols: yyDollar[7].columnsUnion()})
}
@@ -13808,21 +13852,21 @@ yydefault:
case 529:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []AlterOption
-//line sql.y:2969
+//line sql.y:2970
{
yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()}
}
yyVAL.union = yyLOCAL
case 530:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:2973
+//line sql.y:2974
{
yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].alterOptionUnion())
}
case 531:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:2977
+//line sql.y:2978
{
yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].alterOptionUnion())
@@ -13830,7 +13874,7 @@ yydefault:
case 532:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:2983
+//line sql.y:2984
{
yyLOCAL = yyDollar[1].tableOptionsUnion()
}
@@ -13838,7 +13882,7 @@ yydefault:
case 533:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:2987
+//line sql.y:2988
{
yyLOCAL = &AddConstraintDefinition{ConstraintDefinition: yyDollar[2].constraintDefinitionUnion()}
}
@@ -13846,7 +13890,7 @@ yydefault:
case 534:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:2991
+//line sql.y:2992
{
yyLOCAL = &AddConstraintDefinition{ConstraintDefinition: yyDollar[2].constraintDefinitionUnion()}
}
@@ -13854,7 +13898,7 @@ yydefault:
case 535:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:2995
+//line sql.y:2996
{
yyLOCAL = &AddIndexDefinition{IndexDefinition: yyDollar[2].indexDefinitionUnion()}
}
@@ -13862,7 +13906,7 @@ yydefault:
case 536:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:2999
+//line sql.y:3000
{
yyLOCAL = &AddColumns{Columns: yyDollar[4].columnDefinitionsUnion()}
}
@@ -13870,7 +13914,7 @@ yydefault:
case 537:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3003
+//line sql.y:3004
{
yyLOCAL = &AddColumns{Columns: []*ColumnDefinition{yyDollar[3].columnDefinitionUnion()}, First: yyDollar[4].booleanUnion(), After: yyDollar[5].colNameUnion()}
}
@@ -13878,7 +13922,7 @@ yydefault:
case 538:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3007
+//line sql.y:3008
{
yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), DropDefault: true}
}
@@ -13886,7 +13930,7 @@ yydefault:
case 539:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3011
+//line sql.y:3012
{
yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), DropDefault: false, DefaultVal: yyDollar[6].exprUnion(), DefaultLiteral: true}
}
@@ -13894,7 +13938,7 @@ yydefault:
case 540:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3015
+//line sql.y:3016
{
yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), DropDefault: false, DefaultVal: yyDollar[7].exprUnion()}
}
@@ -13902,7 +13946,7 @@ yydefault:
case 541:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3019
+//line sql.y:3020
{
yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), Invisible: ptr.Of(false)}
}
@@ -13910,7 +13954,7 @@ yydefault:
case 542:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3023
+//line sql.y:3024
{
yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), Invisible: ptr.Of(true)}
}
@@ -13918,7 +13962,7 @@ yydefault:
case 543:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3027
+//line sql.y:3028
{
yyLOCAL = &AlterCheck{Name: yyDollar[3].identifierCI, Enforced: yyDollar[4].booleanUnion()}
}
@@ -13926,7 +13970,7 @@ yydefault:
case 544:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3031
+//line sql.y:3032
{
yyLOCAL = &AlterIndex{Name: yyDollar[3].identifierCI, Invisible: false}
}
@@ -13934,7 +13978,7 @@ yydefault:
case 545:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3035
+//line sql.y:3036
{
yyLOCAL = &AlterIndex{Name: yyDollar[3].identifierCI, Invisible: true}
}
@@ -13942,7 +13986,7 @@ yydefault:
case 546:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3039
+//line sql.y:3040
{
yyLOCAL = &ChangeColumn{OldColumn: yyDollar[3].colNameUnion(), NewColDefinition: yyDollar[4].columnDefinitionUnion(), First: yyDollar[5].booleanUnion(), After: yyDollar[6].colNameUnion()}
}
@@ -13950,7 +13994,7 @@ yydefault:
case 547:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3043
+//line sql.y:3044
{
yyLOCAL = &ModifyColumn{NewColDefinition: yyDollar[3].columnDefinitionUnion(), First: yyDollar[4].booleanUnion(), After: yyDollar[5].colNameUnion()}
}
@@ -13958,7 +14002,7 @@ yydefault:
case 548:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3047
+//line sql.y:3048
{
yyLOCAL = &RenameColumn{OldName: yyDollar[3].colNameUnion(), NewName: yyDollar[5].colNameUnion()}
}
@@ -13966,7 +14010,7 @@ yydefault:
case 549:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3051
+//line sql.y:3052
{
yyLOCAL = &AlterCharset{CharacterSet: yyDollar[4].str, Collate: yyDollar[5].str}
}
@@ -13974,7 +14018,7 @@ yydefault:
case 550:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3055
+//line sql.y:3056
{
yyLOCAL = &KeyState{Enable: false}
}
@@ -13982,7 +14026,7 @@ yydefault:
case 551:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3059
+//line sql.y:3060
{
yyLOCAL = &KeyState{Enable: true}
}
@@ -13990,7 +14034,7 @@ yydefault:
case 552:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3063
+//line sql.y:3064
{
yyLOCAL = &TablespaceOperation{Import: false}
}
@@ -13998,7 +14042,7 @@ yydefault:
case 553:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3067
+//line sql.y:3068
{
yyLOCAL = &TablespaceOperation{Import: true}
}
@@ -14006,7 +14050,7 @@ yydefault:
case 554:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3071
+//line sql.y:3072
{
yyLOCAL = &DropColumn{Name: yyDollar[3].colNameUnion()}
}
@@ -14014,7 +14058,7 @@ yydefault:
case 555:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3075
+//line sql.y:3076
{
yyLOCAL = &DropKey{Type: NormalKeyType, Name: yyDollar[3].identifierCI}
}
@@ -14022,7 +14066,7 @@ yydefault:
case 556:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3079
+//line sql.y:3080
{
yyLOCAL = &DropKey{Type: PrimaryKeyType}
}
@@ -14030,7 +14074,7 @@ yydefault:
case 557:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3083
+//line sql.y:3084
{
yyLOCAL = &DropKey{Type: ForeignKeyType, Name: yyDollar[4].identifierCI}
}
@@ -14038,7 +14082,7 @@ yydefault:
case 558:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3087
+//line sql.y:3088
{
yyLOCAL = &DropKey{Type: CheckKeyType, Name: yyDollar[3].identifierCI}
}
@@ -14046,7 +14090,7 @@ yydefault:
case 559:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3091
+//line sql.y:3092
{
yyLOCAL = &DropKey{Type: CheckKeyType, Name: yyDollar[3].identifierCI}
}
@@ -14054,7 +14098,7 @@ yydefault:
case 560:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3095
+//line sql.y:3096
{
yyLOCAL = &Force{}
}
@@ -14062,7 +14106,7 @@ yydefault:
case 561:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3099
+//line sql.y:3100
{
yyLOCAL = &RenameTableName{Table: yyDollar[3].tableName}
}
@@ -14070,7 +14114,7 @@ yydefault:
case 562:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3103
+//line sql.y:3104
{
yyLOCAL = &RenameIndex{OldName: yyDollar[3].identifierCI, NewName: yyDollar[5].identifierCI}
}
@@ -14078,14 +14122,14 @@ yydefault:
case 563:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []AlterOption
-//line sql.y:3109
+//line sql.y:3110
{
yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()}
}
yyVAL.union = yyLOCAL
case 564:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:3113
+//line sql.y:3114
{
yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].alterOptionUnion())
@@ -14093,7 +14137,7 @@ yydefault:
case 565:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3119
+//line sql.y:3120
{
yyLOCAL = AlgorithmValue(string(yyDollar[3].str))
}
@@ -14101,7 +14145,7 @@ yydefault:
case 566:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3123
+//line sql.y:3124
{
yyLOCAL = AlgorithmValue(string(yyDollar[3].str))
}
@@ -14109,7 +14153,7 @@ yydefault:
case 567:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3127
+//line sql.y:3128
{
yyLOCAL = AlgorithmValue(string(yyDollar[3].str))
}
@@ -14117,7 +14161,7 @@ yydefault:
case 568:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3131
+//line sql.y:3132
{
yyLOCAL = AlgorithmValue(string(yyDollar[3].str))
}
@@ -14125,7 +14169,7 @@ yydefault:
case 569:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3135
+//line sql.y:3136
{
yyLOCAL = &LockOption{Type: DefaultType}
}
@@ -14133,7 +14177,7 @@ yydefault:
case 570:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3139
+//line sql.y:3140
{
yyLOCAL = &LockOption{Type: NoneType}
}
@@ -14141,7 +14185,7 @@ yydefault:
case 571:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3143
+//line sql.y:3144
{
yyLOCAL = &LockOption{Type: SharedType}
}
@@ -14149,7 +14193,7 @@ yydefault:
case 572:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3147
+//line sql.y:3148
{
yyLOCAL = &LockOption{Type: ExclusiveType}
}
@@ -14157,7 +14201,7 @@ yydefault:
case 573:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3151
+//line sql.y:3152
{
yyLOCAL = &Validation{With: true}
}
@@ -14165,7 +14209,7 @@ yydefault:
case 574:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3155
+//line sql.y:3156
{
yyLOCAL = &Validation{With: false}
}
@@ -14173,7 +14217,7 @@ yydefault:
case 575:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3161
+//line sql.y:3162
{
yyDollar[1].alterTableUnion().FullyParsed = true
yyDollar[1].alterTableUnion().AlterOptions = yyDollar[2].alterOptionsUnion()
@@ -14184,7 +14228,7 @@ yydefault:
case 576:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3168
+//line sql.y:3169
{
yyDollar[1].alterTableUnion().FullyParsed = true
yyDollar[1].alterTableUnion().AlterOptions = yyDollar[2].alterOptionsUnion()
@@ -14195,7 +14239,7 @@ yydefault:
case 577:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3175
+//line sql.y:3176
{
yyDollar[1].alterTableUnion().FullyParsed = true
yyDollar[1].alterTableUnion().AlterOptions = yyDollar[2].alterOptionsUnion()
@@ -14206,7 +14250,7 @@ yydefault:
case 578:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3182
+//line sql.y:3183
{
yyDollar[1].alterTableUnion().FullyParsed = true
yyDollar[1].alterTableUnion().PartitionSpec = yyDollar[2].partSpecUnion()
@@ -14216,7 +14260,7 @@ yydefault:
case 579:
yyDollar = yyS[yypt-11 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3188
+//line sql.y:3189
{
yyLOCAL = &AlterView{ViewName: yyDollar[7].tableName, Comments: Comments(yyDollar[2].strs).Parsed(), Algorithm: yyDollar[3].str, Definer: yyDollar[4].definerUnion(), Security: yyDollar[5].str, Columns: yyDollar[8].columnsUnion(), Select: yyDollar[10].selStmtUnion(), CheckOption: yyDollar[11].str}
}
@@ -14224,7 +14268,7 @@ yydefault:
case 580:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3198
+//line sql.y:3199
{
yyDollar[1].alterDatabaseUnion().FullyParsed = true
yyDollar[1].alterDatabaseUnion().DBName = yyDollar[2].identifierCS
@@ -14235,7 +14279,7 @@ yydefault:
case 581:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3205
+//line sql.y:3206
{
yyDollar[1].alterDatabaseUnion().FullyParsed = true
yyDollar[1].alterDatabaseUnion().DBName = yyDollar[2].identifierCS
@@ -14246,7 +14290,7 @@ yydefault:
case 582:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3212
+//line sql.y:3213
{
yyLOCAL = &AlterVschema{
Action: CreateVindexDDLAction,
@@ -14262,7 +14306,7 @@ yydefault:
case 583:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3224
+//line sql.y:3225
{
yyLOCAL = &AlterVschema{
Action: DropVindexDDLAction,
@@ -14276,7 +14320,7 @@ yydefault:
case 584:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3234
+//line sql.y:3235
{
yyLOCAL = &AlterVschema{Action: AddVschemaTableDDLAction, Table: yyDollar[6].tableName}
}
@@ -14284,7 +14328,7 @@ yydefault:
case 585:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3238
+//line sql.y:3239
{
yyLOCAL = &AlterVschema{Action: DropVschemaTableDDLAction, Table: yyDollar[6].tableName}
}
@@ -14292,7 +14336,7 @@ yydefault:
case 586:
yyDollar = yyS[yypt-13 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3242
+//line sql.y:3243
{
yyLOCAL = &AlterVschema{
Action: AddColVindexDDLAction,
@@ -14309,7 +14353,7 @@ yydefault:
case 587:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3255
+//line sql.y:3256
{
yyLOCAL = &AlterVschema{
Action: DropColVindexDDLAction,
@@ -14323,7 +14367,7 @@ yydefault:
case 588:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3265
+//line sql.y:3266
{
yyLOCAL = &AlterVschema{Action: AddSequenceDDLAction, Table: yyDollar[6].tableName}
}
@@ -14331,7 +14375,7 @@ yydefault:
case 589:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3269
+//line sql.y:3270
{
yyLOCAL = &AlterVschema{Action: DropSequenceDDLAction, Table: yyDollar[6].tableName}
}
@@ -14339,7 +14383,7 @@ yydefault:
case 590:
yyDollar = yyS[yypt-10 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3273
+//line sql.y:3274
{
yyLOCAL = &AlterVschema{
Action: AddAutoIncDDLAction,
@@ -14354,7 +14398,7 @@ yydefault:
case 591:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3284
+//line sql.y:3285
{
yyLOCAL = &AlterVschema{
Action: DropAutoIncDDLAction,
@@ -14365,7 +14409,7 @@ yydefault:
case 592:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3291
+//line sql.y:3292
{
yyLOCAL = &AlterMigration{
Type: RetryMigrationType,
@@ -14376,7 +14420,7 @@ yydefault:
case 593:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3298
+//line sql.y:3299
{
yyLOCAL = &AlterMigration{
Type: CleanupMigrationType,
@@ -14387,7 +14431,7 @@ yydefault:
case 594:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3305
+//line sql.y:3306
{
yyLOCAL = &AlterMigration{
Type: LaunchMigrationType,
@@ -14398,7 +14442,7 @@ yydefault:
case 595:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3312
+//line sql.y:3313
{
yyLOCAL = &AlterMigration{
Type: LaunchMigrationType,
@@ -14410,7 +14454,7 @@ yydefault:
case 596:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3320
+//line sql.y:3321
{
yyLOCAL = &AlterMigration{
Type: LaunchAllMigrationType,
@@ -14420,7 +14464,7 @@ yydefault:
case 597:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3326
+//line sql.y:3327
{
yyLOCAL = &AlterMigration{
Type: CompleteMigrationType,
@@ -14431,7 +14475,7 @@ yydefault:
case 598:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3333
+//line sql.y:3334
{
yyLOCAL = &AlterMigration{
Type: CompleteAllMigrationType,
@@ -14441,7 +14485,7 @@ yydefault:
case 599:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3339
+//line sql.y:3340
{
yyLOCAL = &AlterMigration{
Type: CancelMigrationType,
@@ -14452,7 +14496,7 @@ yydefault:
case 600:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3346
+//line sql.y:3347
{
yyLOCAL = &AlterMigration{
Type: CancelAllMigrationType,
@@ -14462,7 +14506,7 @@ yydefault:
case 601:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3352
+//line sql.y:3353
{
yyLOCAL = &AlterMigration{
Type: ThrottleMigrationType,
@@ -14475,7 +14519,7 @@ yydefault:
case 602:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3361
+//line sql.y:3362
{
yyLOCAL = &AlterMigration{
Type: ThrottleAllMigrationType,
@@ -14487,7 +14531,7 @@ yydefault:
case 603:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3369
+//line sql.y:3370
{
yyLOCAL = &AlterMigration{
Type: UnthrottleMigrationType,
@@ -14498,7 +14542,7 @@ yydefault:
case 604:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3376
+//line sql.y:3377
{
yyLOCAL = &AlterMigration{
Type: UnthrottleAllMigrationType,
@@ -14508,7 +14552,7 @@ yydefault:
case 605:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3382
+//line sql.y:3383
{
yyLOCAL = &AlterMigration{
Type: ForceCutOverMigrationType,
@@ -14519,7 +14563,7 @@ yydefault:
case 606:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3389
+//line sql.y:3390
{
yyLOCAL = &AlterMigration{
Type: ForceCutOverAllMigrationType,
@@ -14529,7 +14573,7 @@ yydefault:
case 607:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *PartitionOption
-//line sql.y:3396
+//line sql.y:3397
{
yyLOCAL = nil
}
@@ -14537,7 +14581,7 @@ yydefault:
case 608:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL *PartitionOption
-//line sql.y:3400
+//line sql.y:3401
{
yyDollar[3].partitionOptionUnion().Partitions = yyDollar[4].integerUnion()
yyDollar[3].partitionOptionUnion().SubPartition = yyDollar[5].subPartitionUnion()
@@ -14548,7 +14592,7 @@ yydefault:
case 609:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *PartitionOption
-//line sql.y:3409
+//line sql.y:3410
{
yyLOCAL = &PartitionOption{
IsLinear: yyDollar[1].booleanUnion(),
@@ -14560,7 +14604,7 @@ yydefault:
case 610:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL *PartitionOption
-//line sql.y:3417
+//line sql.y:3418
{
yyLOCAL = &PartitionOption{
IsLinear: yyDollar[1].booleanUnion(),
@@ -14573,7 +14617,7 @@ yydefault:
case 611:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *PartitionOption
-//line sql.y:3426
+//line sql.y:3427
{
yyLOCAL = &PartitionOption{
Type: yyDollar[1].partitionByTypeUnion(),
@@ -14584,7 +14628,7 @@ yydefault:
case 612:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *PartitionOption
-//line sql.y:3433
+//line sql.y:3434
{
yyLOCAL = &PartitionOption{
Type: yyDollar[1].partitionByTypeUnion(),
@@ -14595,7 +14639,7 @@ yydefault:
case 613:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *SubPartition
-//line sql.y:3441
+//line sql.y:3442
{
yyLOCAL = nil
}
@@ -14603,7 +14647,7 @@ yydefault:
case 614:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL *SubPartition
-//line sql.y:3445
+//line sql.y:3446
{
yyLOCAL = &SubPartition{
IsLinear: yyDollar[3].booleanUnion(),
@@ -14616,7 +14660,7 @@ yydefault:
case 615:
yyDollar = yyS[yypt-9 : yypt+1]
var yyLOCAL *SubPartition
-//line sql.y:3454
+//line sql.y:3455
{
yyLOCAL = &SubPartition{
IsLinear: yyDollar[3].booleanUnion(),
@@ -14630,7 +14674,7 @@ yydefault:
case 616:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL []*PartitionDefinition
-//line sql.y:3465
+//line sql.y:3466
{
yyLOCAL = nil
}
@@ -14638,7 +14682,7 @@ yydefault:
case 617:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL []*PartitionDefinition
-//line sql.y:3469
+//line sql.y:3470
{
yyLOCAL = yyDollar[2].partDefsUnion()
}
@@ -14646,7 +14690,7 @@ yydefault:
case 618:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:3474
+//line sql.y:3475
{
yyLOCAL = false
}
@@ -14654,7 +14698,7 @@ yydefault:
case 619:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:3478
+//line sql.y:3479
{
yyLOCAL = true
}
@@ -14662,7 +14706,7 @@ yydefault:
case 620:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL int
-//line sql.y:3483
+//line sql.y:3484
{
yyLOCAL = 0
}
@@ -14670,7 +14714,7 @@ yydefault:
case 621:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL int
-//line sql.y:3487
+//line sql.y:3488
{
yyLOCAL = convertStringToInt(yyDollar[3].str)
}
@@ -14678,7 +14722,7 @@ yydefault:
case 622:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL TableExpr
-//line sql.y:3493
+//line sql.y:3494
{
yyLOCAL = &JSONTableExpr{Expr: yyDollar[3].exprUnion(), Filter: yyDollar[5].exprUnion(), Columns: yyDollar[6].jtColumnListUnion(), Alias: yyDollar[8].identifierCS}
}
@@ -14686,7 +14730,7 @@ yydefault:
case 623:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL []*JtColumnDefinition
-//line sql.y:3499
+//line sql.y:3500
{
yyLOCAL = yyDollar[3].jtColumnListUnion()
}
@@ -14694,14 +14738,14 @@ yydefault:
case 624:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []*JtColumnDefinition
-//line sql.y:3505
+//line sql.y:3506
{
yyLOCAL = []*JtColumnDefinition{yyDollar[1].jtColumnDefinitionUnion()}
}
yyVAL.union = yyLOCAL
case 625:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:3509
+//line sql.y:3510
{
yySLICE := (*[]*JtColumnDefinition)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].jtColumnDefinitionUnion())
@@ -14709,7 +14753,7 @@ yydefault:
case 626:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *JtColumnDefinition
-//line sql.y:3515
+//line sql.y:3516
{
yyLOCAL = &JtColumnDefinition{JtOrdinal: &JtOrdinalColDef{Name: yyDollar[1].identifierCI}}
}
@@ -14717,7 +14761,7 @@ yydefault:
case 627:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL *JtColumnDefinition
-//line sql.y:3519
+//line sql.y:3520
{
yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str}
jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion()}
@@ -14727,7 +14771,7 @@ yydefault:
case 628:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL *JtColumnDefinition
-//line sql.y:3525
+//line sql.y:3526
{
yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str}
jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion()}
@@ -14737,7 +14781,7 @@ yydefault:
case 629:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL *JtColumnDefinition
-//line sql.y:3531
+//line sql.y:3532
{
yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str}
jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), ErrorOnResponse: yyDollar[7].jtOnResponseUnion()}
@@ -14747,7 +14791,7 @@ yydefault:
case 630:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL *JtColumnDefinition
-//line sql.y:3537
+//line sql.y:3538
{
yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str}
jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion(), ErrorOnResponse: yyDollar[8].jtOnResponseUnion()}
@@ -14757,7 +14801,7 @@ yydefault:
case 631:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *JtColumnDefinition
-//line sql.y:3543
+//line sql.y:3544
{
jtNestedPath := &JtNestedPathColDef{Path: yyDollar[3].exprUnion(), Columns: yyDollar[4].jtColumnListUnion()}
yyLOCAL = &JtColumnDefinition{JtNestedPath: jtNestedPath}
@@ -14766,7 +14810,7 @@ yydefault:
case 632:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:3549
+//line sql.y:3550
{
yyLOCAL = false
}
@@ -14774,7 +14818,7 @@ yydefault:
case 633:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:3553
+//line sql.y:3554
{
yyLOCAL = true
}
@@ -14782,7 +14826,7 @@ yydefault:
case 634:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:3557
+//line sql.y:3558
{
yyLOCAL = false
}
@@ -14790,7 +14834,7 @@ yydefault:
case 635:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:3561
+//line sql.y:3562
{
yyLOCAL = true
}
@@ -14798,7 +14842,7 @@ yydefault:
case 636:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *JtOnResponse
-//line sql.y:3567
+//line sql.y:3568
{
yyLOCAL = yyDollar[1].jtOnResponseUnion()
}
@@ -14806,7 +14850,7 @@ yydefault:
case 637:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *JtOnResponse
-//line sql.y:3573
+//line sql.y:3574
{
yyLOCAL = yyDollar[1].jtOnResponseUnion()
}
@@ -14814,7 +14858,7 @@ yydefault:
case 638:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *JtOnResponse
-//line sql.y:3579
+//line sql.y:3580
{
yyLOCAL = &JtOnResponse{ResponseType: ErrorJSONType}
}
@@ -14822,7 +14866,7 @@ yydefault:
case 639:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *JtOnResponse
-//line sql.y:3583
+//line sql.y:3584
{
yyLOCAL = &JtOnResponse{ResponseType: NullJSONType}
}
@@ -14830,7 +14874,7 @@ yydefault:
case 640:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *JtOnResponse
-//line sql.y:3587
+//line sql.y:3588
{
yyLOCAL = &JtOnResponse{ResponseType: DefaultJSONType, Expr: yyDollar[2].exprUnion()}
}
@@ -14838,7 +14882,7 @@ yydefault:
case 641:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL PartitionByType
-//line sql.y:3593
+//line sql.y:3594
{
yyLOCAL = RangeType
}
@@ -14846,7 +14890,7 @@ yydefault:
case 642:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL PartitionByType
-//line sql.y:3597
+//line sql.y:3598
{
yyLOCAL = ListType
}
@@ -14854,7 +14898,7 @@ yydefault:
case 643:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL int
-//line sql.y:3602
+//line sql.y:3603
{
yyLOCAL = -1
}
@@ -14862,7 +14906,7 @@ yydefault:
case 644:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL int
-//line sql.y:3606
+//line sql.y:3607
{
yyLOCAL = convertStringToInt(yyDollar[2].str)
}
@@ -14870,7 +14914,7 @@ yydefault:
case 645:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL int
-//line sql.y:3611
+//line sql.y:3612
{
yyLOCAL = -1
}
@@ -14878,7 +14922,7 @@ yydefault:
case 646:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL int
-//line sql.y:3615
+//line sql.y:3616
{
yyLOCAL = convertStringToInt(yyDollar[2].str)
}
@@ -14886,7 +14930,7 @@ yydefault:
case 647:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3621
+//line sql.y:3622
{
yyLOCAL = &PartitionSpec{Action: AddAction, Definitions: []*PartitionDefinition{yyDollar[4].partDefUnion()}}
}
@@ -14894,7 +14938,7 @@ yydefault:
case 648:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3625
+//line sql.y:3626
{
yyLOCAL = &PartitionSpec{Action: DropAction, Names: yyDollar[3].partitionsUnion()}
}
@@ -14902,7 +14946,7 @@ yydefault:
case 649:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3629
+//line sql.y:3630
{
yyLOCAL = &PartitionSpec{Action: ReorganizeAction, Names: yyDollar[3].partitionsUnion(), Definitions: yyDollar[6].partDefsUnion()}
}
@@ -14910,7 +14954,7 @@ yydefault:
case 650:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3633
+//line sql.y:3634
{
yyLOCAL = &PartitionSpec{Action: DiscardAction, Names: yyDollar[3].partitionsUnion()}
}
@@ -14918,7 +14962,7 @@ yydefault:
case 651:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3637
+//line sql.y:3638
{
yyLOCAL = &PartitionSpec{Action: DiscardAction, IsAll: true}
}
@@ -14926,7 +14970,7 @@ yydefault:
case 652:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3641
+//line sql.y:3642
{
yyLOCAL = &PartitionSpec{Action: ImportAction, Names: yyDollar[3].partitionsUnion()}
}
@@ -14934,7 +14978,7 @@ yydefault:
case 653:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3645
+//line sql.y:3646
{
yyLOCAL = &PartitionSpec{Action: ImportAction, IsAll: true}
}
@@ -14942,7 +14986,7 @@ yydefault:
case 654:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3649
+//line sql.y:3650
{
yyLOCAL = &PartitionSpec{Action: TruncateAction, Names: yyDollar[3].partitionsUnion()}
}
@@ -14950,7 +14994,7 @@ yydefault:
case 655:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3653
+//line sql.y:3654
{
yyLOCAL = &PartitionSpec{Action: TruncateAction, IsAll: true}
}
@@ -14958,7 +15002,7 @@ yydefault:
case 656:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3657
+//line sql.y:3658
{
yyLOCAL = &PartitionSpec{Action: CoalesceAction, Number: NewIntLiteral(yyDollar[3].str)}
}
@@ -14966,7 +15010,7 @@ yydefault:
case 657:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3661
+//line sql.y:3662
{
yyLOCAL = &PartitionSpec{Action: ExchangeAction, Names: Partitions{yyDollar[3].identifierCI}, TableName: yyDollar[6].tableName, WithoutValidation: yyDollar[7].booleanUnion()}
}
@@ -14974,7 +15018,7 @@ yydefault:
case 658:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3665
+//line sql.y:3666
{
yyLOCAL = &PartitionSpec{Action: AnalyzeAction, Names: yyDollar[3].partitionsUnion()}
}
@@ -14982,7 +15026,7 @@ yydefault:
case 659:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3669
+//line sql.y:3670
{
yyLOCAL = &PartitionSpec{Action: AnalyzeAction, IsAll: true}
}
@@ -14990,7 +15034,7 @@ yydefault:
case 660:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3673
+//line sql.y:3674
{
yyLOCAL = &PartitionSpec{Action: CheckAction, Names: yyDollar[3].partitionsUnion()}
}
@@ -14998,7 +15042,7 @@ yydefault:
case 661:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3677
+//line sql.y:3678
{
yyLOCAL = &PartitionSpec{Action: CheckAction, IsAll: true}
}
@@ -15006,7 +15050,7 @@ yydefault:
case 662:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3681
+//line sql.y:3682
{
yyLOCAL = &PartitionSpec{Action: OptimizeAction, Names: yyDollar[3].partitionsUnion()}
}
@@ -15014,7 +15058,7 @@ yydefault:
case 663:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3685
+//line sql.y:3686
{
yyLOCAL = &PartitionSpec{Action: OptimizeAction, IsAll: true}
}
@@ -15022,7 +15066,7 @@ yydefault:
case 664:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3689
+//line sql.y:3690
{
yyLOCAL = &PartitionSpec{Action: RebuildAction, Names: yyDollar[3].partitionsUnion()}
}
@@ -15030,7 +15074,7 @@ yydefault:
case 665:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3693
+//line sql.y:3694
{
yyLOCAL = &PartitionSpec{Action: RebuildAction, IsAll: true}
}
@@ -15038,7 +15082,7 @@ yydefault:
case 666:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3697
+//line sql.y:3698
{
yyLOCAL = &PartitionSpec{Action: RepairAction, Names: yyDollar[3].partitionsUnion()}
}
@@ -15046,7 +15090,7 @@ yydefault:
case 667:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3701
+//line sql.y:3702
{
yyLOCAL = &PartitionSpec{Action: RepairAction, IsAll: true}
}
@@ -15054,7 +15098,7 @@ yydefault:
case 668:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3705
+//line sql.y:3706
{
yyLOCAL = &PartitionSpec{Action: UpgradeAction}
}
@@ -15062,7 +15106,7 @@ yydefault:
case 669:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:3710
+//line sql.y:3711
{
yyLOCAL = false
}
@@ -15070,7 +15114,7 @@ yydefault:
case 670:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL bool
-//line sql.y:3714
+//line sql.y:3715
{
yyLOCAL = false
}
@@ -15078,7 +15122,7 @@ yydefault:
case 671:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL bool
-//line sql.y:3718
+//line sql.y:3719
{
yyLOCAL = true
}
@@ -15086,28 +15130,28 @@ yydefault:
case 672:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []*PartitionDefinition
-//line sql.y:3724
+//line sql.y:3725
{
yyLOCAL = []*PartitionDefinition{yyDollar[1].partDefUnion()}
}
yyVAL.union = yyLOCAL
case 673:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:3728
+//line sql.y:3729
{
yySLICE := (*[]*PartitionDefinition)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].partDefUnion())
}
case 674:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:3734
+//line sql.y:3735
{
yyVAL.partDefUnion().Options = yyDollar[2].partitionDefinitionOptionsUnion()
}
case 675:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *PartitionDefinitionOptions
-//line sql.y:3739
+//line sql.y:3740
{
yyLOCAL = &PartitionDefinitionOptions{}
}
@@ -15115,7 +15159,7 @@ yydefault:
case 676:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *PartitionDefinitionOptions
-//line sql.y:3743
+//line sql.y:3744
{
yyDollar[1].partitionDefinitionOptionsUnion().ValueRange = yyDollar[2].partitionValueRangeUnion()
yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion()
@@ -15124,7 +15168,7 @@ yydefault:
case 677:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *PartitionDefinitionOptions
-//line sql.y:3748
+//line sql.y:3749
{
yyDollar[1].partitionDefinitionOptionsUnion().Comment = yyDollar[2].literalUnion()
yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion()
@@ -15133,7 +15177,7 @@ yydefault:
case 678:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *PartitionDefinitionOptions
-//line sql.y:3753
+//line sql.y:3754
{
yyDollar[1].partitionDefinitionOptionsUnion().Engine = yyDollar[2].partitionEngineUnion()
yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion()
@@ -15142,7 +15186,7 @@ yydefault:
case 679:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *PartitionDefinitionOptions
-//line sql.y:3758
+//line sql.y:3759
{
yyDollar[1].partitionDefinitionOptionsUnion().DataDirectory = yyDollar[2].literalUnion()
yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion()
@@ -15151,7 +15195,7 @@ yydefault:
case 680:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *PartitionDefinitionOptions
-//line sql.y:3763
+//line sql.y:3764
{
yyDollar[1].partitionDefinitionOptionsUnion().IndexDirectory = yyDollar[2].literalUnion()
yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion()
@@ -15160,7 +15204,7 @@ yydefault:
case 681:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *PartitionDefinitionOptions
-//line sql.y:3768
+//line sql.y:3769
{
yyDollar[1].partitionDefinitionOptionsUnion().MaxRows = ptr.Of(yyDollar[2].integerUnion())
yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion()
@@ -15169,7 +15213,7 @@ yydefault:
case 682:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *PartitionDefinitionOptions
-//line sql.y:3773
+//line sql.y:3774
{
yyDollar[1].partitionDefinitionOptionsUnion().MinRows = ptr.Of(yyDollar[2].integerUnion())
yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion()
@@ -15178,7 +15222,7 @@ yydefault:
case 683:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *PartitionDefinitionOptions
-//line sql.y:3778
+//line sql.y:3779
{
yyDollar[1].partitionDefinitionOptionsUnion().TableSpace = yyDollar[2].str
yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion()
@@ -15187,7 +15231,7 @@ yydefault:
case 684:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *PartitionDefinitionOptions
-//line sql.y:3783
+//line sql.y:3784
{
yyDollar[1].partitionDefinitionOptionsUnion().SubPartitionDefinitions = yyDollar[2].subPartitionDefinitionsUnion()
yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion()
@@ -15196,7 +15240,7 @@ yydefault:
case 685:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL SubPartitionDefinitions
-//line sql.y:3789
+//line sql.y:3790
{
yyLOCAL = yyDollar[2].subPartitionDefinitionsUnion()
}
@@ -15204,14 +15248,14 @@ yydefault:
case 686:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL SubPartitionDefinitions
-//line sql.y:3795
+//line sql.y:3796
{
yyLOCAL = SubPartitionDefinitions{yyDollar[1].subPartitionDefinitionUnion()}
}
yyVAL.union = yyLOCAL
case 687:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:3799
+//line sql.y:3800
{
yySLICE := (*SubPartitionDefinitions)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].subPartitionDefinitionUnion())
@@ -15219,7 +15263,7 @@ yydefault:
case 688:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *SubPartitionDefinition
-//line sql.y:3805
+//line sql.y:3806
{
yyLOCAL = &SubPartitionDefinition{Name: yyDollar[2].identifierCI, Options: yyDollar[3].subPartitionDefinitionOptionsUnion()}
}
@@ -15227,7 +15271,7 @@ yydefault:
case 689:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *SubPartitionDefinitionOptions
-//line sql.y:3810
+//line sql.y:3811
{
yyLOCAL = &SubPartitionDefinitionOptions{}
}
@@ -15235,7 +15279,7 @@ yydefault:
case 690:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *SubPartitionDefinitionOptions
-//line sql.y:3814
+//line sql.y:3815
{
yyDollar[1].subPartitionDefinitionOptionsUnion().Comment = yyDollar[2].literalUnion()
yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion()
@@ -15244,7 +15288,7 @@ yydefault:
case 691:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *SubPartitionDefinitionOptions
-//line sql.y:3819
+//line sql.y:3820
{
yyDollar[1].subPartitionDefinitionOptionsUnion().Engine = yyDollar[2].partitionEngineUnion()
yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion()
@@ -15253,7 +15297,7 @@ yydefault:
case 692:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *SubPartitionDefinitionOptions
-//line sql.y:3824
+//line sql.y:3825
{
yyDollar[1].subPartitionDefinitionOptionsUnion().DataDirectory = yyDollar[2].literalUnion()
yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion()
@@ -15262,7 +15306,7 @@ yydefault:
case 693:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *SubPartitionDefinitionOptions
-//line sql.y:3829
+//line sql.y:3830
{
yyDollar[1].subPartitionDefinitionOptionsUnion().IndexDirectory = yyDollar[2].literalUnion()
yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion()
@@ -15271,7 +15315,7 @@ yydefault:
case 694:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *SubPartitionDefinitionOptions
-//line sql.y:3834
+//line sql.y:3835
{
yyDollar[1].subPartitionDefinitionOptionsUnion().MaxRows = ptr.Of(yyDollar[2].integerUnion())
yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion()
@@ -15280,7 +15324,7 @@ yydefault:
case 695:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *SubPartitionDefinitionOptions
-//line sql.y:3839
+//line sql.y:3840
{
yyDollar[1].subPartitionDefinitionOptionsUnion().MinRows = ptr.Of(yyDollar[2].integerUnion())
yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion()
@@ -15289,7 +15333,7 @@ yydefault:
case 696:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *SubPartitionDefinitionOptions
-//line sql.y:3844
+//line sql.y:3845
{
yyDollar[1].subPartitionDefinitionOptionsUnion().TableSpace = yyDollar[2].str
yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion()
@@ -15298,7 +15342,7 @@ yydefault:
case 697:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *PartitionValueRange
-//line sql.y:3851
+//line sql.y:3852
{
yyLOCAL = &PartitionValueRange{
Type: LessThanType,
@@ -15309,7 +15353,7 @@ yydefault:
case 698:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *PartitionValueRange
-//line sql.y:3858
+//line sql.y:3859
{
yyLOCAL = &PartitionValueRange{
Type: LessThanType,
@@ -15320,7 +15364,7 @@ yydefault:
case 699:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionValueRange
-//line sql.y:3865
+//line sql.y:3866
{
yyLOCAL = &PartitionValueRange{
Type: InType,
@@ -15331,7 +15375,7 @@ yydefault:
case 700:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:3873
+//line sql.y:3874
{
yyLOCAL = false
}
@@ -15339,7 +15383,7 @@ yydefault:
case 701:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:3877
+//line sql.y:3878
{
yyLOCAL = true
}
@@ -15347,7 +15391,7 @@ yydefault:
case 702:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *PartitionEngine
-//line sql.y:3883
+//line sql.y:3884
{
yyLOCAL = &PartitionEngine{Storage: yyDollar[1].booleanUnion(), Name: yyDollar[4].identifierCS.String()}
}
@@ -15355,7 +15399,7 @@ yydefault:
case 703:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *Literal
-//line sql.y:3889
+//line sql.y:3890
{
yyLOCAL = NewStrLiteral(yyDollar[3].str)
}
@@ -15363,7 +15407,7 @@ yydefault:
case 704:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *Literal
-//line sql.y:3895
+//line sql.y:3896
{
yyLOCAL = NewStrLiteral(yyDollar[4].str)
}
@@ -15371,7 +15415,7 @@ yydefault:
case 705:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *Literal
-//line sql.y:3901
+//line sql.y:3902
{
yyLOCAL = NewStrLiteral(yyDollar[4].str)
}
@@ -15379,7 +15423,7 @@ yydefault:
case 706:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL int
-//line sql.y:3907
+//line sql.y:3908
{
yyLOCAL = convertStringToInt(yyDollar[3].str)
}
@@ -15387,41 +15431,41 @@ yydefault:
case 707:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL int
-//line sql.y:3913
+//line sql.y:3914
{
yyLOCAL = convertStringToInt(yyDollar[3].str)
}
yyVAL.union = yyLOCAL
case 708:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:3919
+//line sql.y:3920
{
yyVAL.str = yyDollar[3].identifierCS.String()
}
case 709:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *PartitionDefinition
-//line sql.y:3925
+//line sql.y:3926
{
yyLOCAL = &PartitionDefinition{Name: yyDollar[2].identifierCI}
}
yyVAL.union = yyLOCAL
case 710:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:3931
+//line sql.y:3932
{
yyVAL.str = ""
}
case 711:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:3935
+//line sql.y:3936
{
yyVAL.str = ""
}
case 712:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3941
+//line sql.y:3942
{
yyLOCAL = &RenameTable{TablePairs: yyDollar[3].renameTablePairsUnion()}
}
@@ -15429,14 +15473,14 @@ yydefault:
case 713:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL []*RenameTablePair
-//line sql.y:3947
+//line sql.y:3948
{
yyLOCAL = []*RenameTablePair{{FromTable: yyDollar[1].tableName, ToTable: yyDollar[3].tableName}}
}
yyVAL.union = yyLOCAL
case 714:
yyDollar = yyS[yypt-5 : yypt+1]
-//line sql.y:3951
+//line sql.y:3952
{
yySLICE := (*[]*RenameTablePair)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, &RenameTablePair{FromTable: yyDollar[3].tableName, ToTable: yyDollar[5].tableName})
@@ -15444,7 +15488,7 @@ yydefault:
case 715:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3957
+//line sql.y:3958
{
yyLOCAL = &DropTable{FromTables: yyDollar[6].tableNamesUnion(), IfExists: yyDollar[5].booleanUnion(), Comments: Comments(yyDollar[2].strs).Parsed(), Temp: yyDollar[3].booleanUnion()}
}
@@ -15452,7 +15496,7 @@ yydefault:
case 716:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3961
+//line sql.y:3962
{
// Change this to an alter statement
if yyDollar[4].identifierCI.Lowered() == "primary" {
@@ -15465,7 +15509,7 @@ yydefault:
case 717:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3970
+//line sql.y:3971
{
yyLOCAL = &DropView{FromTables: yyDollar[5].tableNamesUnion(), Comments: Comments(yyDollar[2].strs).Parsed(), IfExists: yyDollar[4].booleanUnion()}
}
@@ -15473,7 +15517,7 @@ yydefault:
case 718:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3974
+//line sql.y:3975
{
yyLOCAL = &DropDatabase{Comments: Comments(yyDollar[2].strs).Parsed(), DBName: yyDollar[5].identifierCS, IfExists: yyDollar[4].booleanUnion()}
}
@@ -15481,7 +15525,7 @@ yydefault:
case 719:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3980
+//line sql.y:3981
{
yyLOCAL = &TruncateTable{Table: yyDollar[3].tableName}
}
@@ -15489,7 +15533,7 @@ yydefault:
case 720:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3984
+//line sql.y:3985
{
yyLOCAL = &TruncateTable{Table: yyDollar[2].tableName}
}
@@ -15497,7 +15541,7 @@ yydefault:
case 721:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3990
+//line sql.y:3991
{
yyLOCAL = &Analyze{IsLocal: yyDollar[2].booleanUnion(), Table: yyDollar[4].tableName}
}
@@ -15505,7 +15549,7 @@ yydefault:
case 722:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3996
+//line sql.y:3997
{
yyLOCAL = &PurgeBinaryLogs{To: string(yyDollar[5].str)}
}
@@ -15513,7 +15557,7 @@ yydefault:
case 723:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4000
+//line sql.y:4001
{
yyLOCAL = &PurgeBinaryLogs{Before: string(yyDollar[5].str)}
}
@@ -15521,7 +15565,7 @@ yydefault:
case 724:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4006
+//line sql.y:4007
{
yyLOCAL = &Show{&ShowBasic{Command: Charset, Filter: yyDollar[3].showFilterUnion()}}
}
@@ -15529,7 +15573,7 @@ yydefault:
case 725:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4010
+//line sql.y:4011
{
yyLOCAL = &Show{&ShowBasic{Command: Collation, Filter: yyDollar[3].showFilterUnion()}}
}
@@ -15537,7 +15581,7 @@ yydefault:
case 726:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4014
+//line sql.y:4015
{
yyLOCAL = &Show{&ShowBasic{Full: yyDollar[2].booleanUnion(), Command: Column, Tbl: yyDollar[5].tableName, DbName: yyDollar[6].identifierCS, Filter: yyDollar[7].showFilterUnion()}}
}
@@ -15545,7 +15589,7 @@ yydefault:
case 727:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4018
+//line sql.y:4019
{
yyLOCAL = &Show{&ShowBasic{Command: Database, Filter: yyDollar[3].showFilterUnion()}}
}
@@ -15553,7 +15597,7 @@ yydefault:
case 728:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4022
+//line sql.y:4023
{
yyLOCAL = &Show{&ShowBasic{Command: Database, Filter: yyDollar[3].showFilterUnion()}}
}
@@ -15561,7 +15605,7 @@ yydefault:
case 729:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4026
+//line sql.y:4027
{
yyLOCAL = &Show{&ShowBasic{Command: Keyspace, Filter: yyDollar[3].showFilterUnion()}}
}
@@ -15569,7 +15613,7 @@ yydefault:
case 730:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4030
+//line sql.y:4031
{
yyLOCAL = &Show{&ShowBasic{Command: Keyspace, Filter: yyDollar[3].showFilterUnion()}}
}
@@ -15577,7 +15621,7 @@ yydefault:
case 731:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4034
+//line sql.y:4035
{
yyLOCAL = &Show{&ShowBasic{Command: Function, Filter: yyDollar[4].showFilterUnion()}}
}
@@ -15585,7 +15629,7 @@ yydefault:
case 732:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4038
+//line sql.y:4039
{
yyLOCAL = &Show{&ShowBasic{Command: Index, Tbl: yyDollar[5].tableName, DbName: yyDollar[6].identifierCS, Filter: yyDollar[7].showFilterUnion()}}
}
@@ -15593,7 +15637,7 @@ yydefault:
case 733:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4042
+//line sql.y:4043
{
yyLOCAL = &Show{&ShowBasic{Command: OpenTable, DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}}
}
@@ -15601,7 +15645,7 @@ yydefault:
case 734:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4046
+//line sql.y:4047
{
yyLOCAL = &Show{&ShowBasic{Command: Privilege}}
}
@@ -15609,7 +15653,7 @@ yydefault:
case 735:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4050
+//line sql.y:4051
{
yyLOCAL = &Show{&ShowBasic{Command: Procedure, Filter: yyDollar[4].showFilterUnion()}}
}
@@ -15617,7 +15661,7 @@ yydefault:
case 736:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4054
+//line sql.y:4055
{
yyLOCAL = &Show{&ShowBasic{Command: StatusSession, Filter: yyDollar[4].showFilterUnion()}}
}
@@ -15625,7 +15669,7 @@ yydefault:
case 737:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4058
+//line sql.y:4059
{
yyLOCAL = &Show{&ShowBasic{Command: StatusGlobal, Filter: yyDollar[4].showFilterUnion()}}
}
@@ -15633,7 +15677,7 @@ yydefault:
case 738:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4062
+//line sql.y:4063
{
yyLOCAL = &Show{&ShowBasic{Command: VariableSession, Filter: yyDollar[4].showFilterUnion()}}
}
@@ -15641,7 +15685,7 @@ yydefault:
case 739:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4066
+//line sql.y:4067
{
yyLOCAL = &Show{&ShowBasic{Command: VariableGlobal, Filter: yyDollar[4].showFilterUnion()}}
}
@@ -15649,7 +15693,7 @@ yydefault:
case 740:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4070
+//line sql.y:4071
{
yyLOCAL = &Show{&ShowBasic{Command: TableStatus, DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}}
}
@@ -15657,7 +15701,7 @@ yydefault:
case 741:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4074
+//line sql.y:4075
{
yyLOCAL = &Show{&ShowBasic{Command: Table, Full: yyDollar[2].booleanUnion(), DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}}
}
@@ -15665,7 +15709,7 @@ yydefault:
case 742:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4078
+//line sql.y:4079
{
yyLOCAL = &Show{&ShowBasic{Command: Trigger, DbName: yyDollar[3].identifierCS, Filter: yyDollar[4].showFilterUnion()}}
}
@@ -15673,7 +15717,7 @@ yydefault:
case 743:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4082
+//line sql.y:4083
{
yyLOCAL = &Show{&ShowCreate{Command: CreateDb, Op: yyDollar[4].tableName}}
}
@@ -15681,7 +15725,7 @@ yydefault:
case 744:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4086
+//line sql.y:4087
{
yyLOCAL = &Show{&ShowCreate{Command: CreateE, Op: yyDollar[4].tableName}}
}
@@ -15689,7 +15733,7 @@ yydefault:
case 745:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4090
+//line sql.y:4091
{
yyLOCAL = &Show{&ShowCreate{Command: CreateF, Op: yyDollar[4].tableName}}
}
@@ -15697,7 +15741,7 @@ yydefault:
case 746:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4094
+//line sql.y:4095
{
yyLOCAL = &Show{&ShowCreate{Command: CreateProc, Op: yyDollar[4].tableName}}
}
@@ -15705,7 +15749,7 @@ yydefault:
case 747:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4098
+//line sql.y:4099
{
yyLOCAL = &Show{&ShowCreate{Command: CreateTbl, Op: yyDollar[4].tableName}}
}
@@ -15713,7 +15757,7 @@ yydefault:
case 748:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4102
+//line sql.y:4103
{
yyLOCAL = &Show{&ShowCreate{Command: CreateTr, Op: yyDollar[4].tableName}}
}
@@ -15721,7 +15765,7 @@ yydefault:
case 749:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4106
+//line sql.y:4107
{
yyLOCAL = &Show{&ShowCreate{Command: CreateV, Op: yyDollar[4].tableName}}
}
@@ -15729,7 +15773,7 @@ yydefault:
case 750:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4110
+//line sql.y:4111
{
yyLOCAL = &Show{&ShowBasic{Command: Engines}}
}
@@ -15737,7 +15781,7 @@ yydefault:
case 751:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4114
+//line sql.y:4115
{
yyLOCAL = &Show{&ShowBasic{Command: Plugins}}
}
@@ -15745,7 +15789,7 @@ yydefault:
case 752:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4118
+//line sql.y:4119
{
yyLOCAL = &Show{&ShowBasic{Command: GtidExecGlobal, DbName: yyDollar[4].identifierCS}}
}
@@ -15753,7 +15797,7 @@ yydefault:
case 753:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4122
+//line sql.y:4123
{
yyLOCAL = &Show{&ShowBasic{Command: VGtidExecGlobal, DbName: yyDollar[4].identifierCS}}
}
@@ -15761,7 +15805,7 @@ yydefault:
case 754:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4126
+//line sql.y:4127
{
yyLOCAL = &Show{&ShowBasic{Command: VitessVariables, Filter: yyDollar[4].showFilterUnion()}}
}
@@ -15769,7 +15813,7 @@ yydefault:
case 755:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4130
+//line sql.y:4131
{
yyLOCAL = &Show{&ShowBasic{Command: VitessMigrations, Filter: yyDollar[4].showFilterUnion(), DbName: yyDollar[3].identifierCS}}
}
@@ -15777,7 +15821,7 @@ yydefault:
case 756:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4134
+//line sql.y:4135
{
yyLOCAL = &ShowMigrationLogs{UUID: string(yyDollar[3].str)}
}
@@ -15785,7 +15829,7 @@ yydefault:
case 757:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4138
+//line sql.y:4139
{
yyLOCAL = &ShowThrottledApps{}
}
@@ -15793,7 +15837,7 @@ yydefault:
case 758:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4142
+//line sql.y:4143
{
yyLOCAL = &Show{&ShowBasic{Command: VitessReplicationStatus, Filter: yyDollar[3].showFilterUnion()}}
}
@@ -15801,7 +15845,7 @@ yydefault:
case 759:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4146
+//line sql.y:4147
{
yyLOCAL = &ShowThrottlerStatus{}
}
@@ -15809,7 +15853,7 @@ yydefault:
case 760:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4150
+//line sql.y:4151
{
yyLOCAL = &Show{&ShowBasic{Command: VschemaTables}}
}
@@ -15817,7 +15861,7 @@ yydefault:
case 761:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4154
+//line sql.y:4155
{
yyLOCAL = &Show{&ShowBasic{Command: VschemaKeyspaces}}
}
@@ -15825,7 +15869,7 @@ yydefault:
case 762:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4158
+//line sql.y:4159
{
yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes}}
}
@@ -15833,7 +15877,7 @@ yydefault:
case 763:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4162
+//line sql.y:4163
{
yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes, Tbl: yyDollar[5].tableName}}
}
@@ -15841,7 +15885,7 @@ yydefault:
case 764:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4166
+//line sql.y:4167
{
yyLOCAL = &Show{&ShowBasic{Command: Warnings}}
}
@@ -15849,7 +15893,7 @@ yydefault:
case 765:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4170
+//line sql.y:4171
{
yyLOCAL = &Show{&ShowBasic{Command: VitessShards, Filter: yyDollar[3].showFilterUnion()}}
}
@@ -15857,7 +15901,7 @@ yydefault:
case 766:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4174
+//line sql.y:4175
{
yyLOCAL = &Show{&ShowBasic{Command: VitessTablets, Filter: yyDollar[3].showFilterUnion()}}
}
@@ -15865,7 +15909,7 @@ yydefault:
case 767:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4178
+//line sql.y:4179
{
yyLOCAL = &Show{&ShowBasic{Command: VitessTarget}}
}
@@ -15873,7 +15917,7 @@ yydefault:
case 768:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4185
+//line sql.y:4186
{
yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].identifierCI.String())}}
}
@@ -15881,7 +15925,7 @@ yydefault:
case 769:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4189
+//line sql.y:4190
{
yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}}
}
@@ -15889,7 +15933,7 @@ yydefault:
case 770:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4193
+//line sql.y:4194
{
yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String()}}
}
@@ -15897,7 +15941,7 @@ yydefault:
case 771:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4197
+//line sql.y:4198
{
yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}}
}
@@ -15905,7 +15949,7 @@ yydefault:
case 772:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4201
+//line sql.y:4202
{
yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str)}}
}
@@ -15913,7 +15957,7 @@ yydefault:
case 773:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4205
+//line sql.y:4206
{
yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str) + " " + String(yyDollar[4].tableName)}}
}
@@ -15921,7 +15965,7 @@ yydefault:
case 774:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4209
+//line sql.y:4210
{
yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str) + " " + String(yyDollar[4].tableName)}}
}
@@ -15929,7 +15973,7 @@ yydefault:
case 775:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4213
+//line sql.y:4214
{
yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[3].str)}}
}
@@ -15937,27 +15981,27 @@ yydefault:
case 776:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4217
+//line sql.y:4218
{
yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str)}}
}
yyVAL.union = yyLOCAL
case 777:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:4223
+//line sql.y:4224
{
yyVAL.str = ""
}
case 778:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4227
+//line sql.y:4228
{
yyVAL.str = "extended "
}
case 779:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:4233
+//line sql.y:4234
{
yyLOCAL = false
}
@@ -15965,45 +16009,45 @@ yydefault:
case 780:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:4237
+//line sql.y:4238
{
yyLOCAL = true
}
yyVAL.union = yyLOCAL
case 781:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4243
+//line sql.y:4244
{
yyVAL.str = string(yyDollar[1].str)
}
case 782:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4247
+//line sql.y:4248
{
yyVAL.str = string(yyDollar[1].str)
}
case 783:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:4253
+//line sql.y:4254
{
yyVAL.identifierCS = NewIdentifierCS("")
}
case 784:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:4257
+//line sql.y:4258
{
yyVAL.identifierCS = yyDollar[2].identifierCS
}
case 785:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:4261
+//line sql.y:4262
{
yyVAL.identifierCS = yyDollar[2].identifierCS
}
case 786:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *ShowFilter
-//line sql.y:4267
+//line sql.y:4268
{
yyLOCAL = nil
}
@@ -16011,7 +16055,7 @@ yydefault:
case 787:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ShowFilter
-//line sql.y:4271
+//line sql.y:4272
{
yyLOCAL = &ShowFilter{Like: string(yyDollar[2].str)}
}
@@ -16019,7 +16063,7 @@ yydefault:
case 788:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ShowFilter
-//line sql.y:4275
+//line sql.y:4276
{
yyLOCAL = &ShowFilter{Filter: yyDollar[2].exprUnion()}
}
@@ -16027,7 +16071,7 @@ yydefault:
case 789:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *ShowFilter
-//line sql.y:4281
+//line sql.y:4282
{
yyLOCAL = nil
}
@@ -16035,45 +16079,45 @@ yydefault:
case 790:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ShowFilter
-//line sql.y:4285
+//line sql.y:4286
{
yyLOCAL = &ShowFilter{Like: string(yyDollar[2].str)}
}
yyVAL.union = yyLOCAL
case 791:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:4291
+//line sql.y:4292
{
yyVAL.empty = struct{}{}
}
case 792:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4295
+//line sql.y:4296
{
yyVAL.empty = struct{}{}
}
case 793:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4299
+//line sql.y:4300
{
yyVAL.empty = struct{}{}
}
case 794:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4305
+//line sql.y:4306
{
yyVAL.str = string(yyDollar[1].str)
}
case 795:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4309
+//line sql.y:4310
{
yyVAL.str = string(yyDollar[1].str)
}
case 796:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4315
+//line sql.y:4316
{
yyLOCAL = &Use{DBName: yyDollar[2].identifierCS}
}
@@ -16081,7 +16125,7 @@ yydefault:
case 797:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4319
+//line sql.y:4320
{
yyLOCAL = &Use{DBName: IdentifierCS{v: ""}}
}
@@ -16089,39 +16133,39 @@ yydefault:
case 798:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4323
+//line sql.y:4324
{
yyLOCAL = &Use{DBName: NewIdentifierCS(yyDollar[2].identifierCS.String() + "@" + string(yyDollar[3].str))}
}
yyVAL.union = yyLOCAL
case 799:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4330
+//line sql.y:4331
{
yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str))
}
case 800:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4334
+//line sql.y:4335
{
yyVAL.identifierCS = NewIdentifierCS("@" + string(yyDollar[1].str))
}
case 801:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4338
+//line sql.y:4339
{
yyVAL.identifierCS = NewIdentifierCS("@@" + string(yyDollar[1].str))
}
case 802:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4342
+//line sql.y:4343
{
yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str))
}
case 803:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4349
+//line sql.y:4350
{
yyLOCAL = &Begin{}
}
@@ -16129,7 +16173,7 @@ yydefault:
case 804:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4353
+//line sql.y:4354
{
yyLOCAL = &Begin{TxAccessModes: yyDollar[3].txAccessModesUnion()}
}
@@ -16137,7 +16181,7 @@ yydefault:
case 805:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL []TxAccessMode
-//line sql.y:4358
+//line sql.y:4359
{
yyLOCAL = nil
}
@@ -16145,7 +16189,7 @@ yydefault:
case 806:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []TxAccessMode
-//line sql.y:4362
+//line sql.y:4363
{
yyLOCAL = yyDollar[1].txAccessModesUnion()
}
@@ -16153,14 +16197,14 @@ yydefault:
case 807:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []TxAccessMode
-//line sql.y:4368
+//line sql.y:4369
{
yyLOCAL = []TxAccessMode{yyDollar[1].txAccessModeUnion()}
}
yyVAL.union = yyLOCAL
case 808:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:4372
+//line sql.y:4373
{
yySLICE := (*[]TxAccessMode)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].txAccessModeUnion())
@@ -16168,7 +16212,7 @@ yydefault:
case 809:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL TxAccessMode
-//line sql.y:4378
+//line sql.y:4379
{
yyLOCAL = WithConsistentSnapshot
}
@@ -16176,7 +16220,7 @@ yydefault:
case 810:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL TxAccessMode
-//line sql.y:4382
+//line sql.y:4383
{
yyLOCAL = ReadWrite
}
@@ -16184,7 +16228,7 @@ yydefault:
case 811:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL TxAccessMode
-//line sql.y:4386
+//line sql.y:4387
{
yyLOCAL = ReadOnly
}
@@ -16192,7 +16236,7 @@ yydefault:
case 812:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4393
+//line sql.y:4394
{
yyLOCAL = &Commit{}
}
@@ -16200,7 +16244,7 @@ yydefault:
case 813:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4399
+//line sql.y:4400
{
yyLOCAL = &Rollback{}
}
@@ -16208,39 +16252,39 @@ yydefault:
case 814:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4403
+//line sql.y:4404
{
yyLOCAL = &SRollback{Name: yyDollar[5].identifierCI}
}
yyVAL.union = yyLOCAL
case 815:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:4408
+//line sql.y:4409
{
yyVAL.empty = struct{}{}
}
case 816:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4410
+//line sql.y:4411
{
yyVAL.empty = struct{}{}
}
case 817:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:4413
+//line sql.y:4414
{
yyVAL.empty = struct{}{}
}
case 818:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4415
+//line sql.y:4416
{
yyVAL.empty = struct{}{}
}
case 819:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4419
+//line sql.y:4420
{
yyLOCAL = &Savepoint{Name: yyDollar[2].identifierCI}
}
@@ -16248,7 +16292,7 @@ yydefault:
case 820:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4425
+//line sql.y:4426
{
yyLOCAL = &Release{Name: yyDollar[3].identifierCI}
}
@@ -16256,7 +16300,7 @@ yydefault:
case 821:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL ExplainType
-//line sql.y:4430
+//line sql.y:4431
{
yyLOCAL = EmptyType
}
@@ -16264,7 +16308,7 @@ yydefault:
case 822:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL ExplainType
-//line sql.y:4434
+//line sql.y:4435
{
yyLOCAL = JSONType
}
@@ -16272,7 +16316,7 @@ yydefault:
case 823:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL ExplainType
-//line sql.y:4438
+//line sql.y:4439
{
yyLOCAL = TreeType
}
@@ -16280,7 +16324,7 @@ yydefault:
case 824:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL ExplainType
-//line sql.y:4442
+//line sql.y:4443
{
yyLOCAL = TraditionalType
}
@@ -16288,7 +16332,7 @@ yydefault:
case 825:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ExplainType
-//line sql.y:4446
+//line sql.y:4447
{
yyLOCAL = AnalyzeType
}
@@ -16296,7 +16340,7 @@ yydefault:
case 826:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL VExplainType
-//line sql.y:4451
+//line sql.y:4452
{
yyLOCAL = PlanVExplainType
}
@@ -16304,7 +16348,7 @@ yydefault:
case 827:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL VExplainType
-//line sql.y:4455
+//line sql.y:4456
{
yyLOCAL = PlanVExplainType
}
@@ -16312,7 +16356,7 @@ yydefault:
case 828:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL VExplainType
-//line sql.y:4459
+//line sql.y:4460
{
yyLOCAL = AllVExplainType
}
@@ -16320,33 +16364,33 @@ yydefault:
case 829:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL VExplainType
-//line sql.y:4463
+//line sql.y:4464
{
yyLOCAL = QueriesVExplainType
}
yyVAL.union = yyLOCAL
case 830:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4469
+//line sql.y:4470
{
yyVAL.str = yyDollar[1].str
}
case 831:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4473
+//line sql.y:4474
{
yyVAL.str = yyDollar[1].str
}
case 832:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4477
+//line sql.y:4478
{
yyVAL.str = yyDollar[1].str
}
case 833:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4483
+//line sql.y:4484
{
yyLOCAL = yyDollar[1].selStmtUnion()
}
@@ -16354,7 +16398,7 @@ yydefault:
case 834:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4487
+//line sql.y:4488
{
yyLOCAL = yyDollar[1].statementUnion()
}
@@ -16362,7 +16406,7 @@ yydefault:
case 835:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4491
+//line sql.y:4492
{
yyLOCAL = yyDollar[1].statementUnion()
}
@@ -16370,33 +16414,33 @@ yydefault:
case 836:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4495
+//line sql.y:4496
{
yyLOCAL = yyDollar[1].statementUnion()
}
yyVAL.union = yyLOCAL
case 837:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:4500
+//line sql.y:4501
{
yyVAL.str = ""
}
case 838:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4504
+//line sql.y:4505
{
yyVAL.str = yyDollar[1].identifierCI.val
}
case 839:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4508
+//line sql.y:4509
{
yyVAL.str = encodeSQLString(yyDollar[1].str)
}
case 840:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4514
+//line sql.y:4515
{
yyLOCAL = &ExplainTab{Table: yyDollar[3].tableName, Wild: yyDollar[4].str}
}
@@ -16404,7 +16448,7 @@ yydefault:
case 841:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4518
+//line sql.y:4519
{
yyLOCAL = &ExplainStmt{Type: yyDollar[3].explainTypeUnion(), Statement: yyDollar[4].statementUnion(), Comments: Comments(yyDollar[2].strs).Parsed()}
}
@@ -16412,7 +16456,7 @@ yydefault:
case 842:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4524
+//line sql.y:4525
{
yyLOCAL = &VExplainStmt{Type: yyDollar[3].vexplainTypeUnion(), Statement: yyDollar[4].statementUnion(), Comments: Comments(yyDollar[2].strs).Parsed()}
}
@@ -16420,7 +16464,7 @@ yydefault:
case 843:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4530
+//line sql.y:4531
{
yyLOCAL = &OtherAdmin{}
}
@@ -16428,7 +16472,7 @@ yydefault:
case 844:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4534
+//line sql.y:4535
{
yyLOCAL = &OtherAdmin{}
}
@@ -16436,7 +16480,7 @@ yydefault:
case 845:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4540
+//line sql.y:4541
{
yyLOCAL = &LockTables{Tables: yyDollar[3].tableAndLockTypesUnion()}
}
@@ -16444,14 +16488,14 @@ yydefault:
case 846:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL TableAndLockTypes
-//line sql.y:4546
+//line sql.y:4547
{
yyLOCAL = TableAndLockTypes{yyDollar[1].tableAndLockTypeUnion()}
}
yyVAL.union = yyLOCAL
case 847:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:4550
+//line sql.y:4551
{
yySLICE := (*TableAndLockTypes)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].tableAndLockTypeUnion())
@@ -16459,7 +16503,7 @@ yydefault:
case 848:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *TableAndLockType
-//line sql.y:4556
+//line sql.y:4557
{
yyLOCAL = &TableAndLockType{Table: yyDollar[1].aliasedTableNameUnion(), Lock: yyDollar[2].lockTypeUnion()}
}
@@ -16467,7 +16511,7 @@ yydefault:
case 849:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL LockType
-//line sql.y:4562
+//line sql.y:4563
{
yyLOCAL = Read
}
@@ -16475,7 +16519,7 @@ yydefault:
case 850:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL LockType
-//line sql.y:4566
+//line sql.y:4567
{
yyLOCAL = ReadLocal
}
@@ -16483,7 +16527,7 @@ yydefault:
case 851:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL LockType
-//line sql.y:4570
+//line sql.y:4571
{
yyLOCAL = Write
}
@@ -16491,7 +16535,7 @@ yydefault:
case 852:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL LockType
-//line sql.y:4574
+//line sql.y:4575
{
yyLOCAL = LowPriorityWrite
}
@@ -16499,7 +16543,7 @@ yydefault:
case 853:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4580
+//line sql.y:4581
{
yyLOCAL = &UnlockTables{}
}
@@ -16507,7 +16551,7 @@ yydefault:
case 854:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4586
+//line sql.y:4587
{
yyLOCAL = &RevertMigration{Comments: Comments(yyDollar[2].strs).Parsed(), UUID: string(yyDollar[4].str)}
}
@@ -16515,7 +16559,7 @@ yydefault:
case 855:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4592
+//line sql.y:4593
{
yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), FlushOptions: yyDollar[3].strs}
}
@@ -16523,7 +16567,7 @@ yydefault:
case 856:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4596
+//line sql.y:4597
{
yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion()}
}
@@ -16531,7 +16575,7 @@ yydefault:
case 857:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4600
+//line sql.y:4601
{
yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), WithLock: true}
}
@@ -16539,7 +16583,7 @@ yydefault:
case 858:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4604
+//line sql.y:4605
{
yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion()}
}
@@ -16547,7 +16591,7 @@ yydefault:
case 859:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4608
+//line sql.y:4609
{
yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion(), WithLock: true}
}
@@ -16555,99 +16599,99 @@ yydefault:
case 860:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4612
+//line sql.y:4613
{
yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion(), ForExport: true}
}
yyVAL.union = yyLOCAL
case 861:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4618
+//line sql.y:4619
{
yyVAL.strs = []string{yyDollar[1].str}
}
case 862:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:4622
+//line sql.y:4623
{
yyVAL.strs = append(yyDollar[1].strs, yyDollar[3].str)
}
case 863:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:4628
+//line sql.y:4629
{
yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str)
}
case 864:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:4632
+//line sql.y:4633
{
yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str)
}
case 865:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:4636
+//line sql.y:4637
{
yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str)
}
case 866:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:4640
+//line sql.y:4641
{
yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str)
}
case 867:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4644
+//line sql.y:4645
{
yyVAL.str = string(yyDollar[1].str)
}
case 868:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4648
+//line sql.y:4649
{
yyVAL.str = string(yyDollar[1].str)
}
case 869:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4652
+//line sql.y:4653
{
yyVAL.str = string(yyDollar[1].str)
}
case 870:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:4656
+//line sql.y:4657
{
yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) + yyDollar[3].str
}
case 871:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:4660
+//line sql.y:4661
{
yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str)
}
case 872:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4664
+//line sql.y:4665
{
yyVAL.str = string(yyDollar[1].str)
}
case 873:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4668
+//line sql.y:4669
{
yyVAL.str = string(yyDollar[1].str)
}
case 874:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4672
+//line sql.y:4673
{
yyVAL.str = string(yyDollar[1].str)
}
case 875:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:4677
+//line sql.y:4678
{
yyLOCAL = false
}
@@ -16655,7 +16699,7 @@ yydefault:
case 876:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:4681
+//line sql.y:4682
{
yyLOCAL = true
}
@@ -16663,52 +16707,52 @@ yydefault:
case 877:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:4685
+//line sql.y:4686
{
yyLOCAL = true
}
yyVAL.union = yyLOCAL
case 878:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:4690
+//line sql.y:4691
{
yyVAL.str = ""
}
case 879:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:4694
+//line sql.y:4695
{
yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String()
}
case 880:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:4699
+//line sql.y:4700
{
setAllowComments(yylex, true)
}
case 881:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:4703
+//line sql.y:4704
{
yyVAL.strs = yyDollar[2].strs
setAllowComments(yylex, false)
}
case 882:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:4709
+//line sql.y:4710
{
yyVAL.strs = nil
}
case 883:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:4713
+//line sql.y:4714
{
yyVAL.strs = append(yyDollar[1].strs, yyDollar[2].str)
}
case 884:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:4719
+//line sql.y:4720
{
yyLOCAL = true
}
@@ -16716,7 +16760,7 @@ yydefault:
case 885:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL bool
-//line sql.y:4723
+//line sql.y:4724
{
yyLOCAL = false
}
@@ -16724,33 +16768,33 @@ yydefault:
case 886:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL bool
-//line sql.y:4727
+//line sql.y:4728
{
yyLOCAL = true
}
yyVAL.union = yyLOCAL
case 887:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:4732
+//line sql.y:4733
{
yyVAL.str = ""
}
case 888:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4736
+//line sql.y:4737
{
yyVAL.str = SQLNoCacheStr
}
case 889:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4740
+//line sql.y:4741
{
yyVAL.str = SQLCacheStr
}
case 890:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:4745
+//line sql.y:4746
{
yyLOCAL = false
}
@@ -16758,7 +16802,7 @@ yydefault:
case 891:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:4749
+//line sql.y:4750
{
yyLOCAL = true
}
@@ -16766,7 +16810,7 @@ yydefault:
case 892:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:4753
+//line sql.y:4754
{
yyLOCAL = true
}
@@ -16774,7 +16818,7 @@ yydefault:
case 893:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4759
+//line sql.y:4760
{
yyLOCAL = &PrepareStmt{Name: yyDollar[3].identifierCI, Comments: Comments(yyDollar[2].strs).Parsed(), Statement: yyDollar[5].exprUnion()}
}
@@ -16782,7 +16826,7 @@ yydefault:
case 894:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4763
+//line sql.y:4764
{
yyLOCAL = &PrepareStmt{
Name: yyDollar[3].identifierCI,
@@ -16794,7 +16838,7 @@ yydefault:
case 895:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4773
+//line sql.y:4774
{
yyLOCAL = &ExecuteStmt{Name: yyDollar[3].identifierCI, Comments: Comments(yyDollar[2].strs).Parsed(), Arguments: yyDollar[4].variablesUnion()}
}
@@ -16802,7 +16846,7 @@ yydefault:
case 896:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL []*Variable
-//line sql.y:4778
+//line sql.y:4779
{
yyLOCAL = nil
}
@@ -16810,7 +16854,7 @@ yydefault:
case 897:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL []*Variable
-//line sql.y:4782
+//line sql.y:4783
{
yyLOCAL = yyDollar[2].variablesUnion()
}
@@ -16818,7 +16862,7 @@ yydefault:
case 898:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4788
+//line sql.y:4789
{
yyLOCAL = &DeallocateStmt{Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[4].identifierCI}
}
@@ -16826,88 +16870,88 @@ yydefault:
case 899:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4792
+//line sql.y:4793
{
yyLOCAL = &DeallocateStmt{Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[4].identifierCI}
}
yyVAL.union = yyLOCAL
case 900:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:4797
+//line sql.y:4798
{
yyVAL.strs = nil
}
case 901:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4801
+//line sql.y:4802
{
yyVAL.strs = yyDollar[1].strs
}
case 902:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4807
+//line sql.y:4808
{
yyVAL.strs = []string{yyDollar[1].str}
}
case 903:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:4811
+//line sql.y:4812
{
yyVAL.strs = append(yyDollar[1].strs, yyDollar[2].str)
}
case 904:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4817
+//line sql.y:4818
{
yyVAL.str = SQLNoCacheStr
}
case 905:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4821
+//line sql.y:4822
{
yyVAL.str = SQLCacheStr
}
case 906:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4825
+//line sql.y:4826
{
yyVAL.str = DistinctStr
}
case 907:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4829
+//line sql.y:4830
{
yyVAL.str = DistinctStr
}
case 908:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4833
+//line sql.y:4834
{
yyVAL.str = StraightJoinHint
}
case 909:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4837
+//line sql.y:4838
{
yyVAL.str = SQLCalcFoundRowsStr
}
case 910:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4841
+//line sql.y:4842
{
yyVAL.str = AllStr // These are not picked up by NewSelect, and so ALL will be dropped. But this is OK, since it's redundant anyway
}
case 911:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL SelectExprs
-//line sql.y:4847
+//line sql.y:4848
{
yyLOCAL = SelectExprs{yyDollar[1].selectExprUnion()}
}
yyVAL.union = yyLOCAL
case 912:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:4851
+//line sql.y:4852
{
yySLICE := (*SelectExprs)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].selectExprUnion())
@@ -16915,7 +16959,7 @@ yydefault:
case 913:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL SelectExpr
-//line sql.y:4857
+//line sql.y:4858
{
yyLOCAL = &StarExpr{}
}
@@ -16923,7 +16967,7 @@ yydefault:
case 914:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL SelectExpr
-//line sql.y:4861
+//line sql.y:4862
{
yyLOCAL = &AliasedExpr{Expr: yyDollar[1].exprUnion(), As: yyDollar[2].identifierCI}
}
@@ -16931,7 +16975,7 @@ yydefault:
case 915:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL SelectExpr
-//line sql.y:4865
+//line sql.y:4866
{
yyLOCAL = &StarExpr{TableName: TableName{Name: yyDollar[1].identifierCS}}
}
@@ -16939,39 +16983,39 @@ yydefault:
case 916:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL SelectExpr
-//line sql.y:4869
+//line sql.y:4870
{
yyLOCAL = &StarExpr{TableName: TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}}
}
yyVAL.union = yyLOCAL
case 917:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:4874
+//line sql.y:4875
{
yyVAL.identifierCI = IdentifierCI{}
}
case 918:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4878
+//line sql.y:4879
{
yyVAL.identifierCI = yyDollar[1].identifierCI
}
case 919:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:4882
+//line sql.y:4883
{
yyVAL.identifierCI = yyDollar[2].identifierCI
}
case 921:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4889
+//line sql.y:4890
{
yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str))
}
case 922:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL TableExprs
-//line sql.y:4894
+//line sql.y:4895
{
yyLOCAL = TableExprs{&AliasedTableExpr{Expr: TableName{Name: NewIdentifierCS("dual")}}}
}
@@ -16979,7 +17023,7 @@ yydefault:
case 923:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL TableExprs
-//line sql.y:4898
+//line sql.y:4899
{
yyLOCAL = yyDollar[1].tableExprsUnion()
}
@@ -16987,7 +17031,7 @@ yydefault:
case 924:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL TableExprs
-//line sql.y:4904
+//line sql.y:4905
{
yyLOCAL = yyDollar[2].tableExprsUnion()
}
@@ -16995,14 +17039,14 @@ yydefault:
case 925:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL TableExprs
-//line sql.y:4910
+//line sql.y:4911
{
yyLOCAL = TableExprs{yyDollar[1].tableExprUnion()}
}
yyVAL.union = yyLOCAL
case 926:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:4914
+//line sql.y:4915
{
yySLICE := (*TableExprs)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].tableExprUnion())
@@ -17010,7 +17054,7 @@ yydefault:
case 929:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL TableExpr
-//line sql.y:4924
+//line sql.y:4925
{
yyLOCAL = yyDollar[1].aliasedTableNameUnion()
}
@@ -17018,7 +17062,7 @@ yydefault:
case 930:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL TableExpr
-//line sql.y:4928
+//line sql.y:4929
{
yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].derivedTableUnion(), As: yyDollar[3].identifierCS, Columns: yyDollar[4].columnsUnion()}
}
@@ -17026,7 +17070,7 @@ yydefault:
case 931:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL TableExpr
-//line sql.y:4932
+//line sql.y:4933
{
yyLOCAL = &ParenTableExpr{Exprs: yyDollar[2].tableExprsUnion()}
}
@@ -17034,7 +17078,7 @@ yydefault:
case 932:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL TableExpr
-//line sql.y:4936
+//line sql.y:4937
{
yyLOCAL = yyDollar[1].tableExprUnion()
}
@@ -17042,7 +17086,7 @@ yydefault:
case 933:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *DerivedTable
-//line sql.y:4942
+//line sql.y:4943
{
yyLOCAL = &DerivedTable{Lateral: false, Select: yyDollar[1].selStmtUnion()}
}
@@ -17050,7 +17094,7 @@ yydefault:
case 934:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *DerivedTable
-//line sql.y:4946
+//line sql.y:4947
{
yyLOCAL = &DerivedTable{Lateral: true, Select: yyDollar[2].selStmtUnion()}
}
@@ -17058,7 +17102,7 @@ yydefault:
case 935:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *AliasedTableExpr
-//line sql.y:4952
+//line sql.y:4953
{
yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].tableName, As: yyDollar[2].identifierCS, Hints: yyDollar[3].indexHintsUnion()}
}
@@ -17066,7 +17110,7 @@ yydefault:
case 936:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL *AliasedTableExpr
-//line sql.y:4956
+//line sql.y:4957
{
yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].tableName, Partitions: yyDollar[4].partitionsUnion(), As: yyDollar[6].identifierCS, Hints: yyDollar[7].indexHintsUnion()}
}
@@ -17074,7 +17118,7 @@ yydefault:
case 937:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL Columns
-//line sql.y:4961
+//line sql.y:4962
{
yyLOCAL = nil
}
@@ -17082,7 +17126,7 @@ yydefault:
case 938:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Columns
-//line sql.y:4965
+//line sql.y:4966
{
yyLOCAL = yyDollar[2].columnsUnion()
}
@@ -17090,7 +17134,7 @@ yydefault:
case 939:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL Columns
-//line sql.y:4970
+//line sql.y:4971
{
yyLOCAL = nil
}
@@ -17098,7 +17142,7 @@ yydefault:
case 940:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Columns
-//line sql.y:4974
+//line sql.y:4975
{
yyLOCAL = yyDollar[1].columnsUnion()
}
@@ -17106,14 +17150,14 @@ yydefault:
case 941:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Columns
-//line sql.y:4980
+//line sql.y:4981
{
yyLOCAL = Columns{yyDollar[1].identifierCI}
}
yyVAL.union = yyLOCAL
case 942:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:4984
+//line sql.y:4985
{
yySLICE := (*Columns)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].identifierCI)
@@ -17121,14 +17165,14 @@ yydefault:
case 943:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []*Variable
-//line sql.y:4990
+//line sql.y:4991
{
yyLOCAL = []*Variable{yyDollar[1].variableUnion()}
}
yyVAL.union = yyLOCAL
case 944:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:4994
+//line sql.y:4995
{
yySLICE := (*[]*Variable)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].variableUnion())
@@ -17136,7 +17180,7 @@ yydefault:
case 945:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Columns
-//line sql.y:5000
+//line sql.y:5001
{
yyLOCAL = Columns{yyDollar[1].identifierCI}
}
@@ -17144,21 +17188,21 @@ yydefault:
case 946:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Columns
-//line sql.y:5004
+//line sql.y:5005
{
yyLOCAL = Columns{NewIdentifierCI(string(yyDollar[1].str))}
}
yyVAL.union = yyLOCAL
case 947:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:5008
+//line sql.y:5009
{
yySLICE := (*Columns)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].identifierCI)
}
case 948:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:5012
+//line sql.y:5013
{
yySLICE := (*Columns)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, NewIdentifierCI(string(yyDollar[3].str)))
@@ -17166,14 +17210,14 @@ yydefault:
case 949:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Partitions
-//line sql.y:5018
+//line sql.y:5019
{
yyLOCAL = Partitions{yyDollar[1].identifierCI}
}
yyVAL.union = yyLOCAL
case 950:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:5022
+//line sql.y:5023
{
yySLICE := (*Partitions)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].identifierCI)
@@ -17181,7 +17225,7 @@ yydefault:
case 951:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL TableExpr
-//line sql.y:5035
+//line sql.y:5036
{
yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition}
}
@@ -17189,7 +17233,7 @@ yydefault:
case 952:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL TableExpr
-//line sql.y:5039
+//line sql.y:5040
{
yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition}
}
@@ -17197,7 +17241,7 @@ yydefault:
case 953:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL TableExpr
-//line sql.y:5043
+//line sql.y:5044
{
yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition}
}
@@ -17205,87 +17249,87 @@ yydefault:
case 954:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL TableExpr
-//line sql.y:5047
+//line sql.y:5048
{
yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion()}
}
yyVAL.union = yyLOCAL
case 955:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:5053
+//line sql.y:5054
{
yyVAL.joinCondition = &JoinCondition{On: yyDollar[2].exprUnion()}
}
case 956:
yyDollar = yyS[yypt-4 : yypt+1]
-//line sql.y:5055
+//line sql.y:5056
{
yyVAL.joinCondition = &JoinCondition{Using: yyDollar[3].columnsUnion()}
}
case 957:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:5059
+//line sql.y:5060
{
yyVAL.joinCondition = &JoinCondition{}
}
case 958:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:5061
+//line sql.y:5062
{
yyVAL.joinCondition = yyDollar[1].joinCondition
}
case 959:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:5065
+//line sql.y:5066
{
yyVAL.joinCondition = &JoinCondition{}
}
case 960:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:5067
+//line sql.y:5068
{
yyVAL.joinCondition = &JoinCondition{On: yyDollar[2].exprUnion()}
}
case 961:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:5070
+//line sql.y:5071
{
yyVAL.empty = struct{}{}
}
case 962:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:5072
+//line sql.y:5073
{
yyVAL.empty = struct{}{}
}
case 963:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:5075
+//line sql.y:5076
{
yyVAL.identifierCS = NewIdentifierCS("")
}
case 964:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:5079
+//line sql.y:5080
{
yyVAL.identifierCS = yyDollar[1].identifierCS
}
case 965:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:5083
+//line sql.y:5084
{
yyVAL.identifierCS = yyDollar[2].identifierCS
}
case 967:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:5090
+//line sql.y:5091
{
yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str))
}
case 968:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL JoinType
-//line sql.y:5096
+//line sql.y:5097
{
yyLOCAL = NormalJoinType
}
@@ -17293,7 +17337,7 @@ yydefault:
case 969:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL JoinType
-//line sql.y:5100
+//line sql.y:5101
{
yyLOCAL = NormalJoinType
}
@@ -17301,7 +17345,7 @@ yydefault:
case 970:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL JoinType
-//line sql.y:5104
+//line sql.y:5105
{
yyLOCAL = NormalJoinType
}
@@ -17309,7 +17353,7 @@ yydefault:
case 971:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL JoinType
-//line sql.y:5110
+//line sql.y:5111
{
yyLOCAL = StraightJoinType
}
@@ -17317,7 +17361,7 @@ yydefault:
case 972:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL JoinType
-//line sql.y:5116
+//line sql.y:5117
{
yyLOCAL = LeftJoinType
}
@@ -17325,7 +17369,7 @@ yydefault:
case 973:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL JoinType
-//line sql.y:5120
+//line sql.y:5121
{
yyLOCAL = LeftJoinType
}
@@ -17333,7 +17377,7 @@ yydefault:
case 974:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL JoinType
-//line sql.y:5124
+//line sql.y:5125
{
yyLOCAL = RightJoinType
}
@@ -17341,7 +17385,7 @@ yydefault:
case 975:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL JoinType
-//line sql.y:5128
+//line sql.y:5129
{
yyLOCAL = RightJoinType
}
@@ -17349,7 +17393,7 @@ yydefault:
case 976:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL JoinType
-//line sql.y:5134
+//line sql.y:5135
{
yyLOCAL = NaturalJoinType
}
@@ -17357,7 +17401,7 @@ yydefault:
case 977:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL JoinType
-//line sql.y:5138
+//line sql.y:5139
{
if yyDollar[2].joinTypeUnion() == LeftJoinType {
yyLOCAL = NaturalLeftJoinType
@@ -17368,38 +17412,38 @@ yydefault:
yyVAL.union = yyLOCAL
case 978:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:5148
+//line sql.y:5149
{
yyVAL.tableName = yyDollar[2].tableName
}
case 979:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:5152
+//line sql.y:5153
{
yyVAL.tableName = yyDollar[1].tableName
}
case 980:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:5158
+//line sql.y:5159
{
yyVAL.tableName = TableName{Name: yyDollar[1].identifierCS}
}
case 981:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:5162
+//line sql.y:5163
{
yyVAL.tableName = TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}
}
case 982:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:5168
+//line sql.y:5169
{
yyVAL.tableName = TableName{Name: yyDollar[1].identifierCS}
}
case 983:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL IndexHints
-//line sql.y:5173
+//line sql.y:5174
{
yyLOCAL = nil
}
@@ -17407,7 +17451,7 @@ yydefault:
case 984:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IndexHints
-//line sql.y:5177
+//line sql.y:5178
{
yyLOCAL = yyDollar[1].indexHintsUnion()
}
@@ -17415,14 +17459,14 @@ yydefault:
case 985:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IndexHints
-//line sql.y:5183
+//line sql.y:5184
{
yyLOCAL = IndexHints{yyDollar[1].indexHintUnion()}
}
yyVAL.union = yyLOCAL
case 986:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:5187
+//line sql.y:5188
{
yySLICE := (*IndexHints)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[2].indexHintUnion())
@@ -17430,7 +17474,7 @@ yydefault:
case 987:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL *IndexHint
-//line sql.y:5193
+//line sql.y:5194
{
yyLOCAL = &IndexHint{Type: UseOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()}
}
@@ -17438,7 +17482,7 @@ yydefault:
case 988:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *IndexHint
-//line sql.y:5197
+//line sql.y:5198
{
yyLOCAL = &IndexHint{Type: UseOp, ForType: yyDollar[3].indexHintForTypeUnion()}
}
@@ -17446,7 +17490,7 @@ yydefault:
case 989:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL *IndexHint
-//line sql.y:5201
+//line sql.y:5202
{
yyLOCAL = &IndexHint{Type: IgnoreOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()}
}
@@ -17454,7 +17498,7 @@ yydefault:
case 990:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL *IndexHint
-//line sql.y:5205
+//line sql.y:5206
{
yyLOCAL = &IndexHint{Type: ForceOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()}
}
@@ -17462,7 +17506,7 @@ yydefault:
case 991:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *IndexHint
-//line sql.y:5209
+//line sql.y:5210
{
yyLOCAL = &IndexHint{Type: UseVindexOp, Indexes: yyDollar[4].columnsUnion()}
}
@@ -17470,7 +17514,7 @@ yydefault:
case 992:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *IndexHint
-//line sql.y:5213
+//line sql.y:5214
{
yyLOCAL = &IndexHint{Type: IgnoreVindexOp, Indexes: yyDollar[4].columnsUnion()}
}
@@ -17478,7 +17522,7 @@ yydefault:
case 993:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL IndexHintForType
-//line sql.y:5218
+//line sql.y:5219
{
yyLOCAL = NoForType
}
@@ -17486,7 +17530,7 @@ yydefault:
case 994:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL IndexHintForType
-//line sql.y:5222
+//line sql.y:5223
{
yyLOCAL = JoinForType
}
@@ -17494,7 +17538,7 @@ yydefault:
case 995:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL IndexHintForType
-//line sql.y:5226
+//line sql.y:5227
{
yyLOCAL = OrderByForType
}
@@ -17502,7 +17546,7 @@ yydefault:
case 996:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL IndexHintForType
-//line sql.y:5230
+//line sql.y:5231
{
yyLOCAL = GroupByForType
}
@@ -17510,7 +17554,7 @@ yydefault:
case 997:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5236
+//line sql.y:5237
{
yyLOCAL = nil
}
@@ -17518,7 +17562,7 @@ yydefault:
case 998:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5240
+//line sql.y:5241
{
yyLOCAL = yyDollar[2].exprUnion()
}
@@ -17526,7 +17570,7 @@ yydefault:
case 999:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5247
+//line sql.y:5248
{
yyLOCAL = &OrExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()}
}
@@ -17534,7 +17578,7 @@ yydefault:
case 1000:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5251
+//line sql.y:5252
{
yyLOCAL = &XorExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()}
}
@@ -17542,7 +17586,7 @@ yydefault:
case 1001:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5255
+//line sql.y:5256
{
yyLOCAL = &AndExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()}
}
@@ -17550,7 +17594,7 @@ yydefault:
case 1002:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5259
+//line sql.y:5260
{
yyLOCAL = &NotExpr{Expr: yyDollar[2].exprUnion()}
}
@@ -17558,7 +17602,7 @@ yydefault:
case 1003:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5263
+//line sql.y:5264
{
yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].isExprOperatorUnion()}
}
@@ -17566,7 +17610,7 @@ yydefault:
case 1004:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5267
+//line sql.y:5268
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -17574,7 +17618,7 @@ yydefault:
case 1005:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5271
+//line sql.y:5272
{
yyLOCAL = &AssignmentExpr{Left: yyDollar[1].variableUnion(), Right: yyDollar[3].exprUnion()}
}
@@ -17582,25 +17626,25 @@ yydefault:
case 1006:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5275
+//line sql.y:5276
{
yyLOCAL = &MemberOfExpr{Value: yyDollar[1].exprUnion(), JSONArr: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
case 1007:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:5281
+//line sql.y:5282
{
}
case 1008:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:5284
+//line sql.y:5285
{
}
case 1009:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5289
+//line sql.y:5290
{
yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNullOp}
}
@@ -17608,7 +17652,7 @@ yydefault:
case 1010:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5293
+//line sql.y:5294
{
yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNotNullOp}
}
@@ -17616,7 +17660,7 @@ yydefault:
case 1011:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5297
+//line sql.y:5298
{
yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Right: yyDollar[3].exprUnion()}
}
@@ -17624,7 +17668,7 @@ yydefault:
case 1012:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5301
+//line sql.y:5302
{
yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Modifier: Any, Right: yyDollar[4].subqueryUnion()}
}
@@ -17632,7 +17676,7 @@ yydefault:
case 1013:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5305
+//line sql.y:5306
{
yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Modifier: Any, Right: yyDollar[4].subqueryUnion()}
}
@@ -17640,7 +17684,7 @@ yydefault:
case 1014:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5309
+//line sql.y:5310
{
yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Modifier: All, Right: yyDollar[4].subqueryUnion()}
}
@@ -17648,7 +17692,7 @@ yydefault:
case 1015:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5313
+//line sql.y:5314
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -17656,7 +17700,7 @@ yydefault:
case 1016:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5319
+//line sql.y:5320
{
yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: InOp, Right: yyDollar[3].colTupleUnion()}
}
@@ -17664,7 +17708,7 @@ yydefault:
case 1017:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5323
+//line sql.y:5324
{
yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotInOp, Right: yyDollar[4].colTupleUnion()}
}
@@ -17672,7 +17716,7 @@ yydefault:
case 1018:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5327
+//line sql.y:5328
{
yyLOCAL = &BetweenExpr{Left: yyDollar[1].exprUnion(), IsBetween: true, From: yyDollar[3].exprUnion(), To: yyDollar[5].exprUnion()}
}
@@ -17680,7 +17724,7 @@ yydefault:
case 1019:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5331
+//line sql.y:5332
{
yyLOCAL = &BetweenExpr{Left: yyDollar[1].exprUnion(), IsBetween: false, From: yyDollar[4].exprUnion(), To: yyDollar[6].exprUnion()}
}
@@ -17688,7 +17732,7 @@ yydefault:
case 1020:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5335
+//line sql.y:5336
{
yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: LikeOp, Right: yyDollar[3].exprUnion()}
}
@@ -17696,7 +17740,7 @@ yydefault:
case 1021:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5339
+//line sql.y:5340
{
yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotLikeOp, Right: yyDollar[4].exprUnion()}
}
@@ -17704,7 +17748,7 @@ yydefault:
case 1022:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5343
+//line sql.y:5344
{
yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: LikeOp, Right: yyDollar[3].exprUnion(), Escape: yyDollar[5].exprUnion()}
}
@@ -17712,7 +17756,7 @@ yydefault:
case 1023:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5347
+//line sql.y:5348
{
yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotLikeOp, Right: yyDollar[4].exprUnion(), Escape: yyDollar[6].exprUnion()}
}
@@ -17720,7 +17764,7 @@ yydefault:
case 1024:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5351
+//line sql.y:5352
{
yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: RegexpOp, Right: yyDollar[3].exprUnion()}
}
@@ -17728,7 +17772,7 @@ yydefault:
case 1025:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5355
+//line sql.y:5356
{
yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotRegexpOp, Right: yyDollar[4].exprUnion()}
}
@@ -17736,25 +17780,25 @@ yydefault:
case 1026:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5359
+//line sql.y:5360
{
yyLOCAL = yyDollar[1].exprUnion()
}
yyVAL.union = yyLOCAL
case 1027:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:5365
+//line sql.y:5366
{
}
case 1028:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:5368
+//line sql.y:5369
{
}
case 1029:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5374
+//line sql.y:5375
{
yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitOrOp, Right: yyDollar[3].exprUnion()}
}
@@ -17762,7 +17806,7 @@ yydefault:
case 1030:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5378
+//line sql.y:5379
{
yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitAndOp, Right: yyDollar[3].exprUnion()}
}
@@ -17770,7 +17814,7 @@ yydefault:
case 1031:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5382
+//line sql.y:5383
{
yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftLeftOp, Right: yyDollar[3].exprUnion()}
}
@@ -17778,7 +17822,7 @@ yydefault:
case 1032:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5386
+//line sql.y:5387
{
yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftRightOp, Right: yyDollar[3].exprUnion()}
}
@@ -17786,7 +17830,7 @@ yydefault:
case 1033:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5390
+//line sql.y:5391
{
yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: PlusOp, Right: yyDollar[3].exprUnion()}
}
@@ -17794,7 +17838,7 @@ yydefault:
case 1034:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5394
+//line sql.y:5395
{
yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MinusOp, Right: yyDollar[3].exprUnion()}
}
@@ -17802,7 +17846,7 @@ yydefault:
case 1035:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5398
+//line sql.y:5399
{
yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprBinaryAdd, Date: yyDollar[1].exprUnion(), Unit: yyDollar[5].intervalTypeUnion(), Interval: yyDollar[4].exprUnion()}
}
@@ -17810,7 +17854,7 @@ yydefault:
case 1036:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5402
+//line sql.y:5403
{
yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprBinarySub, Date: yyDollar[1].exprUnion(), Unit: yyDollar[5].intervalTypeUnion(), Interval: yyDollar[4].exprUnion()}
}
@@ -17818,7 +17862,7 @@ yydefault:
case 1037:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5406
+//line sql.y:5407
{
yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MultOp, Right: yyDollar[3].exprUnion()}
}
@@ -17826,7 +17870,7 @@ yydefault:
case 1038:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5410
+//line sql.y:5411
{
yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: DivOp, Right: yyDollar[3].exprUnion()}
}
@@ -17834,7 +17878,7 @@ yydefault:
case 1039:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5414
+//line sql.y:5415
{
yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()}
}
@@ -17842,7 +17886,7 @@ yydefault:
case 1040:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5418
+//line sql.y:5419
{
yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: IntDivOp, Right: yyDollar[3].exprUnion()}
}
@@ -17850,7 +17894,7 @@ yydefault:
case 1041:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5422
+//line sql.y:5423
{
yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()}
}
@@ -17858,7 +17902,7 @@ yydefault:
case 1042:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5426
+//line sql.y:5427
{
yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitXorOp, Right: yyDollar[3].exprUnion()}
}
@@ -17866,7 +17910,7 @@ yydefault:
case 1043:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5430
+//line sql.y:5431
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -17874,7 +17918,7 @@ yydefault:
case 1044:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5436
+//line sql.y:5437
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -17882,7 +17926,7 @@ yydefault:
case 1045:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5440
+//line sql.y:5441
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -17890,7 +17934,7 @@ yydefault:
case 1046:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5444
+//line sql.y:5445
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -17898,7 +17942,7 @@ yydefault:
case 1047:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5448
+//line sql.y:5449
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -17906,7 +17950,7 @@ yydefault:
case 1048:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5452
+//line sql.y:5453
{
yyLOCAL = &CollateExpr{Expr: yyDollar[1].exprUnion(), Collation: yyDollar[3].str}
}
@@ -17914,7 +17958,7 @@ yydefault:
case 1049:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5456
+//line sql.y:5457
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -17922,7 +17966,7 @@ yydefault:
case 1050:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5460
+//line sql.y:5461
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -17930,7 +17974,7 @@ yydefault:
case 1051:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5464
+//line sql.y:5465
{
yyLOCAL = yyDollar[1].variableUnion()
}
@@ -17938,7 +17982,7 @@ yydefault:
case 1052:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5468
+//line sql.y:5469
{
yyLOCAL = yyDollar[2].exprUnion() // TODO: do we really want to ignore unary '+' before any kind of literals?
}
@@ -17946,7 +17990,7 @@ yydefault:
case 1053:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5472
+//line sql.y:5473
{
yyLOCAL = &UnaryExpr{Operator: UMinusOp, Expr: yyDollar[2].exprUnion()}
}
@@ -17954,7 +17998,7 @@ yydefault:
case 1054:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5476
+//line sql.y:5477
{
yyLOCAL = &UnaryExpr{Operator: TildaOp, Expr: yyDollar[2].exprUnion()}
}
@@ -17962,7 +18006,7 @@ yydefault:
case 1055:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5480
+//line sql.y:5481
{
yyLOCAL = &UnaryExpr{Operator: BangOp, Expr: yyDollar[2].exprUnion()}
}
@@ -17970,7 +18014,7 @@ yydefault:
case 1056:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5484
+//line sql.y:5485
{
yyLOCAL = yyDollar[1].subqueryUnion()
}
@@ -17978,7 +18022,7 @@ yydefault:
case 1057:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5488
+//line sql.y:5489
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -17986,7 +18030,7 @@ yydefault:
case 1058:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5492
+//line sql.y:5493
{
yyLOCAL = &ExistsExpr{Subquery: yyDollar[2].subqueryUnion()}
}
@@ -17994,7 +18038,7 @@ yydefault:
case 1059:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5496
+//line sql.y:5497
{
yyLOCAL = &MatchExpr{Columns: yyDollar[2].colNamesUnion(), Expr: yyDollar[5].exprUnion(), Option: yyDollar[6].matchExprOptionUnion()}
}
@@ -18002,7 +18046,7 @@ yydefault:
case 1060:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5500
+//line sql.y:5501
{
yyLOCAL = &CastExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion(), Array: yyDollar[6].booleanUnion()}
}
@@ -18010,7 +18054,7 @@ yydefault:
case 1061:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5504
+//line sql.y:5505
{
yyLOCAL = &ConvertExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion()}
}
@@ -18018,7 +18062,7 @@ yydefault:
case 1062:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5508
+//line sql.y:5509
{
yyLOCAL = &ConvertUsingExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].str}
}
@@ -18026,7 +18070,7 @@ yydefault:
case 1063:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5512
+//line sql.y:5513
{
// From: https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#operator_binary
// To convert a string expression to a binary string, these constructs are equivalent:
@@ -18038,7 +18082,7 @@ yydefault:
case 1064:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5520
+//line sql.y:5521
{
yyLOCAL = &Default{ColName: yyDollar[2].str}
}
@@ -18046,7 +18090,7 @@ yydefault:
case 1065:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5524
+//line sql.y:5525
{
yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprBinaryAddLeft, Date: yyDollar[5].exprUnion(), Unit: yyDollar[3].intervalTypeUnion(), Interval: yyDollar[2].exprUnion()}
}
@@ -18054,7 +18098,7 @@ yydefault:
case 1066:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5528
+//line sql.y:5529
{
yyLOCAL = &IntervalFuncExpr{Expr: yyDollar[3].exprUnion(), Exprs: yyDollar[5].exprsUnion()}
}
@@ -18062,7 +18106,7 @@ yydefault:
case 1067:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5532
+//line sql.y:5533
{
yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: JSONExtractOp, Right: yyDollar[3].exprUnion()}
}
@@ -18070,7 +18114,7 @@ yydefault:
case 1068:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5536
+//line sql.y:5537
{
yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: JSONUnquoteExtractOp, Right: yyDollar[3].exprUnion()}
}
@@ -18078,7 +18122,7 @@ yydefault:
case 1069:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []*ColName
-//line sql.y:5542
+//line sql.y:5543
{
yyLOCAL = yyDollar[1].colNamesUnion()
}
@@ -18086,7 +18130,7 @@ yydefault:
case 1070:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL []*ColName
-//line sql.y:5546
+//line sql.y:5547
{
yyLOCAL = yyDollar[2].colNamesUnion()
}
@@ -18094,14 +18138,14 @@ yydefault:
case 1071:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []*ColName
-//line sql.y:5552
+//line sql.y:5553
{
yyLOCAL = []*ColName{yyDollar[1].colNameUnion()}
}
yyVAL.union = yyLOCAL
case 1072:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:5556
+//line sql.y:5557
{
yySLICE := (*[]*ColName)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].colNameUnion())
@@ -18109,7 +18153,7 @@ yydefault:
case 1073:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL TrimType
-//line sql.y:5562
+//line sql.y:5563
{
yyLOCAL = BothTrimType
}
@@ -18117,7 +18161,7 @@ yydefault:
case 1074:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL TrimType
-//line sql.y:5566
+//line sql.y:5567
{
yyLOCAL = LeadingTrimType
}
@@ -18125,7 +18169,7 @@ yydefault:
case 1075:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL TrimType
-//line sql.y:5570
+//line sql.y:5571
{
yyLOCAL = TrailingTrimType
}
@@ -18133,7 +18177,7 @@ yydefault:
case 1076:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL FrameUnitType
-//line sql.y:5576
+//line sql.y:5577
{
yyLOCAL = FrameRowsType
}
@@ -18141,7 +18185,7 @@ yydefault:
case 1077:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL FrameUnitType
-//line sql.y:5580
+//line sql.y:5581
{
yyLOCAL = FrameRangeType
}
@@ -18149,7 +18193,7 @@ yydefault:
case 1078:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ArgumentLessWindowExprType
-//line sql.y:5587
+//line sql.y:5588
{
yyLOCAL = CumeDistExprType
}
@@ -18157,7 +18201,7 @@ yydefault:
case 1079:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ArgumentLessWindowExprType
-//line sql.y:5591
+//line sql.y:5592
{
yyLOCAL = DenseRankExprType
}
@@ -18165,7 +18209,7 @@ yydefault:
case 1080:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ArgumentLessWindowExprType
-//line sql.y:5595
+//line sql.y:5596
{
yyLOCAL = PercentRankExprType
}
@@ -18173,7 +18217,7 @@ yydefault:
case 1081:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ArgumentLessWindowExprType
-//line sql.y:5599
+//line sql.y:5600
{
yyLOCAL = RankExprType
}
@@ -18181,7 +18225,7 @@ yydefault:
case 1082:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ArgumentLessWindowExprType
-//line sql.y:5603
+//line sql.y:5604
{
yyLOCAL = RowNumberExprType
}
@@ -18189,7 +18233,7 @@ yydefault:
case 1083:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *FramePoint
-//line sql.y:5609
+//line sql.y:5610
{
yyLOCAL = &FramePoint{Type: CurrentRowType}
}
@@ -18197,7 +18241,7 @@ yydefault:
case 1084:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *FramePoint
-//line sql.y:5613
+//line sql.y:5614
{
yyLOCAL = &FramePoint{Type: UnboundedPrecedingType}
}
@@ -18205,7 +18249,7 @@ yydefault:
case 1085:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *FramePoint
-//line sql.y:5617
+//line sql.y:5618
{
yyLOCAL = &FramePoint{Type: UnboundedFollowingType}
}
@@ -18213,7 +18257,7 @@ yydefault:
case 1086:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *FramePoint
-//line sql.y:5621
+//line sql.y:5622
{
yyLOCAL = &FramePoint{Type: ExprPrecedingType, Expr: yyDollar[1].exprUnion()}
}
@@ -18221,7 +18265,7 @@ yydefault:
case 1087:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *FramePoint
-//line sql.y:5625
+//line sql.y:5626
{
yyLOCAL = &FramePoint{Type: ExprPrecedingType, Expr: yyDollar[2].exprUnion(), Unit: yyDollar[3].intervalTypeUnion()}
}
@@ -18229,7 +18273,7 @@ yydefault:
case 1088:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *FramePoint
-//line sql.y:5629
+//line sql.y:5630
{
yyLOCAL = &FramePoint{Type: ExprFollowingType, Expr: yyDollar[1].exprUnion()}
}
@@ -18237,7 +18281,7 @@ yydefault:
case 1089:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *FramePoint
-//line sql.y:5633
+//line sql.y:5634
{
yyLOCAL = &FramePoint{Type: ExprFollowingType, Expr: yyDollar[2].exprUnion(), Unit: yyDollar[3].intervalTypeUnion()}
}
@@ -18245,7 +18289,7 @@ yydefault:
case 1090:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *FrameClause
-//line sql.y:5638
+//line sql.y:5639
{
yyLOCAL = nil
}
@@ -18253,7 +18297,7 @@ yydefault:
case 1091:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *FrameClause
-//line sql.y:5642
+//line sql.y:5643
{
yyLOCAL = yyDollar[1].frameClauseUnion()
}
@@ -18261,7 +18305,7 @@ yydefault:
case 1092:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *FrameClause
-//line sql.y:5648
+//line sql.y:5649
{
yyLOCAL = &FrameClause{Unit: yyDollar[1].frameUnitTypeUnion(), Start: yyDollar[2].framePointUnion()}
}
@@ -18269,7 +18313,7 @@ yydefault:
case 1093:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *FrameClause
-//line sql.y:5652
+//line sql.y:5653
{
yyLOCAL = &FrameClause{Unit: yyDollar[1].frameUnitTypeUnion(), Start: yyDollar[3].framePointUnion(), End: yyDollar[5].framePointUnion()}
}
@@ -18277,7 +18321,7 @@ yydefault:
case 1094:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL Exprs
-//line sql.y:5657
+//line sql.y:5658
{
yyLOCAL = nil
}
@@ -18285,27 +18329,27 @@ yydefault:
case 1095:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Exprs
-//line sql.y:5661
+//line sql.y:5662
{
yyLOCAL = yyDollar[3].exprsUnion()
}
yyVAL.union = yyLOCAL
case 1096:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:5666
+//line sql.y:5667
{
yyVAL.identifierCI = IdentifierCI{}
}
case 1097:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:5670
+//line sql.y:5671
{
yyVAL.identifierCI = yyDollar[1].identifierCI
}
case 1098:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *WindowSpecification
-//line sql.y:5676
+//line sql.y:5677
{
yyLOCAL = &WindowSpecification{Name: yyDollar[1].identifierCI, PartitionClause: yyDollar[2].exprsUnion(), OrderClause: yyDollar[3].orderByUnion(), FrameClause: yyDollar[4].frameClauseUnion()}
}
@@ -18313,7 +18357,7 @@ yydefault:
case 1099:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *OverClause
-//line sql.y:5682
+//line sql.y:5683
{
yyLOCAL = &OverClause{WindowSpec: yyDollar[3].windowSpecificationUnion()}
}
@@ -18321,7 +18365,7 @@ yydefault:
case 1100:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *OverClause
-//line sql.y:5686
+//line sql.y:5687
{
yyLOCAL = &OverClause{WindowName: yyDollar[2].identifierCI}
}
@@ -18329,7 +18373,7 @@ yydefault:
case 1101:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *OverClause
-//line sql.y:5692
+//line sql.y:5693
{
yyLOCAL = yyDollar[1].overClauseUnion()
}
@@ -18337,7 +18381,7 @@ yydefault:
case 1102:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *OverClause
-//line sql.y:5696
+//line sql.y:5697
{
yyLOCAL = nil
}
@@ -18345,7 +18389,7 @@ yydefault:
case 1103:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *NullTreatmentClause
-//line sql.y:5701
+//line sql.y:5702
{
yyLOCAL = nil
}
@@ -18353,7 +18397,7 @@ yydefault:
case 1105:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *NullTreatmentClause
-//line sql.y:5708
+//line sql.y:5709
{
yyLOCAL = &NullTreatmentClause{yyDollar[1].nullTreatmentTypeUnion()}
}
@@ -18361,7 +18405,7 @@ yydefault:
case 1106:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL NullTreatmentType
-//line sql.y:5714
+//line sql.y:5715
{
yyLOCAL = RespectNullsType
}
@@ -18369,7 +18413,7 @@ yydefault:
case 1107:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL NullTreatmentType
-//line sql.y:5718
+//line sql.y:5719
{
yyLOCAL = IgnoreNullsType
}
@@ -18377,7 +18421,7 @@ yydefault:
case 1108:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL FirstOrLastValueExprType
-//line sql.y:5724
+//line sql.y:5725
{
yyLOCAL = FirstValueExprType
}
@@ -18385,7 +18429,7 @@ yydefault:
case 1109:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL FirstOrLastValueExprType
-//line sql.y:5728
+//line sql.y:5729
{
yyLOCAL = LastValueExprType
}
@@ -18393,7 +18437,7 @@ yydefault:
case 1110:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL FromFirstLastType
-//line sql.y:5734
+//line sql.y:5735
{
yyLOCAL = FromFirstType
}
@@ -18401,7 +18445,7 @@ yydefault:
case 1111:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL FromFirstLastType
-//line sql.y:5738
+//line sql.y:5739
{
yyLOCAL = FromLastType
}
@@ -18409,7 +18453,7 @@ yydefault:
case 1112:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *FromFirstLastClause
-//line sql.y:5743
+//line sql.y:5744
{
yyLOCAL = nil
}
@@ -18417,7 +18461,7 @@ yydefault:
case 1114:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *FromFirstLastClause
-//line sql.y:5750
+//line sql.y:5751
{
yyLOCAL = &FromFirstLastClause{yyDollar[1].fromFirstLastTypeUnion()}
}
@@ -18425,7 +18469,7 @@ yydefault:
case 1115:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL LagLeadExprType
-//line sql.y:5756
+//line sql.y:5757
{
yyLOCAL = LagExprType
}
@@ -18433,7 +18477,7 @@ yydefault:
case 1116:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL LagLeadExprType
-//line sql.y:5760
+//line sql.y:5761
{
yyLOCAL = LeadExprType
}
@@ -18441,7 +18485,7 @@ yydefault:
case 1117:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *WindowDefinition
-//line sql.y:5766
+//line sql.y:5767
{
yyLOCAL = &WindowDefinition{Name: yyDollar[1].identifierCI, WindowSpec: yyDollar[4].windowSpecificationUnion()}
}
@@ -18449,34 +18493,34 @@ yydefault:
case 1118:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL WindowDefinitions
-//line sql.y:5772
+//line sql.y:5773
{
yyLOCAL = WindowDefinitions{yyDollar[1].windowDefinitionUnion()}
}
yyVAL.union = yyLOCAL
case 1119:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:5776
+//line sql.y:5777
{
yySLICE := (*WindowDefinitions)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].windowDefinitionUnion())
}
case 1120:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:5782
+//line sql.y:5783
{
yyVAL.str = ""
}
case 1121:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:5786
+//line sql.y:5787
{
yyVAL.str = string(yyDollar[2].identifierCI.String())
}
case 1122:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL BoolVal
-//line sql.y:5792
+//line sql.y:5793
{
yyLOCAL = BoolVal(true)
}
@@ -18484,7 +18528,7 @@ yydefault:
case 1123:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL BoolVal
-//line sql.y:5796
+//line sql.y:5797
{
yyLOCAL = BoolVal(false)
}
@@ -18492,7 +18536,7 @@ yydefault:
case 1124:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IsExprOperator
-//line sql.y:5803
+//line sql.y:5804
{
yyLOCAL = IsTrueOp
}
@@ -18500,7 +18544,7 @@ yydefault:
case 1125:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL IsExprOperator
-//line sql.y:5807
+//line sql.y:5808
{
yyLOCAL = IsNotTrueOp
}
@@ -18508,7 +18552,7 @@ yydefault:
case 1126:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IsExprOperator
-//line sql.y:5811
+//line sql.y:5812
{
yyLOCAL = IsFalseOp
}
@@ -18516,7 +18560,7 @@ yydefault:
case 1127:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL IsExprOperator
-//line sql.y:5815
+//line sql.y:5816
{
yyLOCAL = IsNotFalseOp
}
@@ -18524,7 +18568,7 @@ yydefault:
case 1128:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ComparisonExprOperator
-//line sql.y:5821
+//line sql.y:5822
{
yyLOCAL = yyDollar[1].comparisonExprOperatorUnion()
}
@@ -18532,7 +18576,7 @@ yydefault:
case 1129:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ComparisonExprOperator
-//line sql.y:5825
+//line sql.y:5826
{
yyLOCAL = NullSafeEqualOp
}
@@ -18540,7 +18584,7 @@ yydefault:
case 1130:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ComparisonExprOperator
-//line sql.y:5831
+//line sql.y:5832
{
yyLOCAL = EqualOp
}
@@ -18548,7 +18592,7 @@ yydefault:
case 1131:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ComparisonExprOperator
-//line sql.y:5835
+//line sql.y:5836
{
yyLOCAL = LessThanOp
}
@@ -18556,7 +18600,7 @@ yydefault:
case 1132:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ComparisonExprOperator
-//line sql.y:5839
+//line sql.y:5840
{
yyLOCAL = GreaterThanOp
}
@@ -18564,7 +18608,7 @@ yydefault:
case 1133:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ComparisonExprOperator
-//line sql.y:5843
+//line sql.y:5844
{
yyLOCAL = LessEqualOp
}
@@ -18572,7 +18616,7 @@ yydefault:
case 1134:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ComparisonExprOperator
-//line sql.y:5847
+//line sql.y:5848
{
yyLOCAL = GreaterEqualOp
}
@@ -18580,7 +18624,7 @@ yydefault:
case 1135:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ComparisonExprOperator
-//line sql.y:5851
+//line sql.y:5852
{
yyLOCAL = NotEqualOp
}
@@ -18588,7 +18632,7 @@ yydefault:
case 1136:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ColTuple
-//line sql.y:5857
+//line sql.y:5858
{
yyLOCAL = yyDollar[1].valTupleUnion()
}
@@ -18596,7 +18640,7 @@ yydefault:
case 1137:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ColTuple
-//line sql.y:5861
+//line sql.y:5862
{
yyLOCAL = yyDollar[1].subqueryUnion()
}
@@ -18604,7 +18648,7 @@ yydefault:
case 1138:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ColTuple
-//line sql.y:5865
+//line sql.y:5866
{
yyLOCAL = ListArg(yyDollar[1].str[2:])
markBindVariable(yylex, yyDollar[1].str[2:])
@@ -18613,7 +18657,7 @@ yydefault:
case 1139:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *Subquery
-//line sql.y:5872
+//line sql.y:5873
{
yyLOCAL = &Subquery{yyDollar[1].selStmtUnion()}
}
@@ -18621,14 +18665,14 @@ yydefault:
case 1140:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Exprs
-//line sql.y:5878
+//line sql.y:5879
{
yyLOCAL = Exprs{yyDollar[1].exprUnion()}
}
yyVAL.union = yyLOCAL
case 1141:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:5882
+//line sql.y:5883
{
yySLICE := (*Exprs)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].exprUnion())
@@ -18636,7 +18680,7 @@ yydefault:
case 1142:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5892
+//line sql.y:5893
{
yyLOCAL = &FuncExpr{Name: yyDollar[1].identifierCI, Exprs: yyDollar[3].exprsUnion()}
}
@@ -18644,7 +18688,7 @@ yydefault:
case 1143:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5896
+//line sql.y:5897
{
yyLOCAL = &FuncExpr{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCI, Exprs: yyDollar[5].exprsUnion()}
}
@@ -18652,7 +18696,7 @@ yydefault:
case 1144:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5906
+//line sql.y:5907
{
yyLOCAL = &FuncExpr{Name: NewIdentifierCI("left"), Exprs: yyDollar[3].exprsUnion()}
}
@@ -18660,7 +18704,7 @@ yydefault:
case 1145:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5910
+//line sql.y:5911
{
yyLOCAL = &FuncExpr{Name: NewIdentifierCI("right"), Exprs: yyDollar[3].exprsUnion()}
}
@@ -18668,7 +18712,7 @@ yydefault:
case 1146:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5914
+//line sql.y:5915
{
yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()}
}
@@ -18676,7 +18720,7 @@ yydefault:
case 1147:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5918
+//line sql.y:5919
{
yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()}
}
@@ -18684,7 +18728,7 @@ yydefault:
case 1148:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5922
+//line sql.y:5923
{
yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion()}
}
@@ -18692,7 +18736,7 @@ yydefault:
case 1149:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5926
+//line sql.y:5927
{
yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()}
}
@@ -18700,7 +18744,7 @@ yydefault:
case 1150:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5930
+//line sql.y:5931
{
yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion()}
}
@@ -18708,7 +18752,7 @@ yydefault:
case 1151:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5934
+//line sql.y:5935
{
yyLOCAL = &CaseExpr{Expr: yyDollar[2].exprUnion(), Whens: yyDollar[3].whensUnion(), Else: yyDollar[4].exprUnion()}
}
@@ -18716,7 +18760,7 @@ yydefault:
case 1152:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5938
+//line sql.y:5939
{
yyLOCAL = &ValuesFuncExpr{Name: yyDollar[3].colNameUnion()}
}
@@ -18724,7 +18768,7 @@ yydefault:
case 1153:
yyDollar = yyS[yypt-10 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5942
+//line sql.y:5943
{
yyLOCAL = &InsertExpr{Str: yyDollar[3].exprUnion(), Pos: yyDollar[5].exprUnion(), Len: yyDollar[7].exprUnion(), NewStr: yyDollar[9].exprUnion()}
}
@@ -18732,7 +18776,7 @@ yydefault:
case 1154:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5946
+//line sql.y:5947
{
yyLOCAL = &FuncExpr{Name: NewIdentifierCI(yyDollar[1].str)}
}
@@ -18740,7 +18784,7 @@ yydefault:
case 1155:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5957
+//line sql.y:5958
{
yyLOCAL = &FuncExpr{Name: NewIdentifierCI("utc_date")}
}
@@ -18748,7 +18792,7 @@ yydefault:
case 1156:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5961
+//line sql.y:5962
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -18756,7 +18800,7 @@ yydefault:
case 1157:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5967
+//line sql.y:5968
{
yyLOCAL = &FuncExpr{Name: NewIdentifierCI("current_date")}
}
@@ -18764,7 +18808,7 @@ yydefault:
case 1158:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5971
+//line sql.y:5972
{
yyLOCAL = &FuncExpr{Name: NewIdentifierCI("curdate")}
}
@@ -18772,7 +18816,7 @@ yydefault:
case 1159:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5975
+//line sql.y:5976
{
yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("utc_time"), Fsp: yyDollar[2].integerUnion()}
}
@@ -18780,7 +18824,7 @@ yydefault:
case 1160:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5980
+//line sql.y:5981
{
yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("curtime"), Fsp: yyDollar[2].integerUnion()}
}
@@ -18788,7 +18832,7 @@ yydefault:
case 1161:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5985
+//line sql.y:5986
{
yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("current_time"), Fsp: yyDollar[2].integerUnion()}
}
@@ -18796,7 +18840,7 @@ yydefault:
case 1162:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5989
+//line sql.y:5990
{
yyLOCAL = &CountStar{OverClause: yyDollar[5].overClauseUnion()}
}
@@ -18804,7 +18848,7 @@ yydefault:
case 1163:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5993
+//line sql.y:5994
{
yyLOCAL = &Count{Distinct: yyDollar[3].booleanUnion(), Args: yyDollar[4].exprsUnion(), OverClause: yyDollar[6].overClauseUnion()}
}
@@ -18812,7 +18856,7 @@ yydefault:
case 1164:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5997
+//line sql.y:5998
{
yyLOCAL = &Max{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion(), OverClause: yyDollar[6].overClauseUnion()}
}
@@ -18820,7 +18864,7 @@ yydefault:
case 1165:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6001
+//line sql.y:6002
{
yyLOCAL = &Min{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion(), OverClause: yyDollar[6].overClauseUnion()}
}
@@ -18828,7 +18872,7 @@ yydefault:
case 1166:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6005
+//line sql.y:6006
{
yyLOCAL = &Sum{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion(), OverClause: yyDollar[6].overClauseUnion()}
}
@@ -18836,7 +18880,7 @@ yydefault:
case 1167:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6009
+//line sql.y:6010
{
yyLOCAL = &Avg{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion(), OverClause: yyDollar[6].overClauseUnion()}
}
@@ -18844,7 +18888,7 @@ yydefault:
case 1168:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6013
+//line sql.y:6014
{
yyLOCAL = &BitAnd{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()}
}
@@ -18852,7 +18896,7 @@ yydefault:
case 1169:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6017
+//line sql.y:6018
{
yyLOCAL = &BitOr{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()}
}
@@ -18860,7 +18904,7 @@ yydefault:
case 1170:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6021
+//line sql.y:6022
{
yyLOCAL = &BitXor{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()}
}
@@ -18868,7 +18912,7 @@ yydefault:
case 1171:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6025
+//line sql.y:6026
{
yyLOCAL = &Std{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()}
}
@@ -18876,7 +18920,7 @@ yydefault:
case 1172:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6029
+//line sql.y:6030
{
yyLOCAL = &StdDev{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()}
}
@@ -18884,7 +18928,7 @@ yydefault:
case 1173:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6033
+//line sql.y:6034
{
yyLOCAL = &StdPop{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()}
}
@@ -18892,7 +18936,7 @@ yydefault:
case 1174:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6037
+//line sql.y:6038
{
yyLOCAL = &StdSamp{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()}
}
@@ -18900,7 +18944,7 @@ yydefault:
case 1175:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6041
+//line sql.y:6042
{
yyLOCAL = &VarPop{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()}
}
@@ -18908,7 +18952,7 @@ yydefault:
case 1176:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6045
+//line sql.y:6046
{
yyLOCAL = &VarSamp{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()}
}
@@ -18916,7 +18960,7 @@ yydefault:
case 1177:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6049
+//line sql.y:6050
{
yyLOCAL = &Variance{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()}
}
@@ -18924,7 +18968,7 @@ yydefault:
case 1178:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6053
+//line sql.y:6054
{
yyLOCAL = &GroupConcatExpr{Distinct: yyDollar[3].booleanUnion(), Exprs: yyDollar[4].exprsUnion(), OrderBy: yyDollar[5].orderByUnion(), Separator: yyDollar[6].str, Limit: yyDollar[7].limitUnion()}
}
@@ -18932,7 +18976,7 @@ yydefault:
case 1179:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6057
+//line sql.y:6058
{
yyLOCAL = &AnyValue{Arg: yyDollar[3].exprUnion()}
}
@@ -18940,7 +18984,7 @@ yydefault:
case 1180:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6061
+//line sql.y:6062
{
yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprTimestampadd, Date: yyDollar[7].exprUnion(), Interval: yyDollar[5].exprUnion(), Unit: yyDollar[3].intervalTypeUnion()}
}
@@ -18948,7 +18992,7 @@ yydefault:
case 1181:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6065
+//line sql.y:6066
{
yyLOCAL = &TimestampDiffExpr{Unit: yyDollar[3].intervalTypeUnion(), Expr1: yyDollar[5].exprUnion(), Expr2: yyDollar[7].exprUnion()}
}
@@ -18956,7 +19000,7 @@ yydefault:
case 1182:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6069
+//line sql.y:6070
{
yyLOCAL = &ExtractFuncExpr{IntervalType: yyDollar[3].intervalTypeUnion(), Expr: yyDollar[5].exprUnion()}
}
@@ -18964,7 +19008,7 @@ yydefault:
case 1183:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6073
+//line sql.y:6074
{
yyLOCAL = &WeightStringFuncExpr{Expr: yyDollar[3].exprUnion(), As: yyDollar[4].convertTypeUnion()}
}
@@ -18972,7 +19016,7 @@ yydefault:
case 1184:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6077
+//line sql.y:6078
{
yyLOCAL = &JSONPrettyExpr{JSONVal: yyDollar[3].exprUnion()}
}
@@ -18980,7 +19024,7 @@ yydefault:
case 1185:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6081
+//line sql.y:6082
{
yyLOCAL = &JSONStorageFreeExpr{JSONVal: yyDollar[3].exprUnion()}
}
@@ -18988,2249 +19032,2265 @@ yydefault:
case 1186:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6085
+//line sql.y:6086
{
yyLOCAL = &JSONStorageSizeExpr{JSONVal: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
case 1187:
+ yyDollar = yyS[yypt-5 : yypt+1]
+ var yyLOCAL Expr
+//line sql.y:6090
+ {
+ yyLOCAL = &JSONArrayAgg{Expr: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()}
+ }
+ yyVAL.union = yyLOCAL
+ case 1188:
+ yyDollar = yyS[yypt-7 : yypt+1]
+ var yyLOCAL Expr
+//line sql.y:6094
+ {
+ yyLOCAL = &JSONObjectAgg{Key: yyDollar[3].exprUnion(), Value: yyDollar[5].exprUnion(), OverClause: yyDollar[7].overClauseUnion()}
+ }
+ yyVAL.union = yyLOCAL
+ case 1189:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6089
+//line sql.y:6098
{
yyLOCAL = &TrimFuncExpr{TrimFuncType: LTrimType, Type: LeadingTrimType, StringArg: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1188:
+ case 1190:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6093
+//line sql.y:6102
{
yyLOCAL = &TrimFuncExpr{TrimFuncType: RTrimType, Type: TrailingTrimType, StringArg: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1189:
+ case 1191:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6097
+//line sql.y:6106
{
yyLOCAL = &TrimFuncExpr{Type: yyDollar[3].trimTypeUnion(), TrimArg: yyDollar[4].exprUnion(), StringArg: yyDollar[6].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1190:
+ case 1192:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6101
+//line sql.y:6110
{
yyLOCAL = &TrimFuncExpr{StringArg: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1191:
+ case 1193:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6105
+//line sql.y:6114
{
yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion()}
}
yyVAL.union = yyLOCAL
- case 1192:
+ case 1194:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6109
+//line sql.y:6118
{
yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion(), Charset: yyDollar[5].str}
}
yyVAL.union = yyLOCAL
- case 1193:
+ case 1195:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6113
+//line sql.y:6122
{
yyLOCAL = &TrimFuncExpr{TrimArg: yyDollar[3].exprUnion(), StringArg: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1194:
+ case 1196:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6117
+//line sql.y:6126
{
yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1195:
+ case 1197:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6121
+//line sql.y:6130
{
yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion(), Pos: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1196:
+ case 1198:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6125
+//line sql.y:6134
{
yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1197:
+ case 1199:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6129
+//line sql.y:6138
{
yyLOCAL = &LockingFunc{Type: GetLock, Name: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1198:
+ case 1200:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6133
+//line sql.y:6142
{
yyLOCAL = &LockingFunc{Type: IsFreeLock, Name: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1199:
+ case 1201:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6137
+//line sql.y:6146
{
yyLOCAL = &LockingFunc{Type: IsUsedLock, Name: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1200:
+ case 1202:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6141
+//line sql.y:6150
{
yyLOCAL = &LockingFunc{Type: ReleaseAllLocks}
}
yyVAL.union = yyLOCAL
- case 1201:
+ case 1203:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6145
+//line sql.y:6154
{
yyLOCAL = &LockingFunc{Type: ReleaseLock, Name: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1202:
+ case 1204:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6149
+//line sql.y:6158
{
yyLOCAL = &JSONSchemaValidFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1203:
+ case 1205:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6153
+//line sql.y:6162
{
yyLOCAL = &JSONSchemaValidationReportFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1204:
+ case 1206:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6157
+//line sql.y:6166
{
yyLOCAL = &JSONArrayExpr{Params: yyDollar[3].exprsUnion()}
}
yyVAL.union = yyLOCAL
- case 1205:
+ case 1207:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6161
+//line sql.y:6170
{
yyLOCAL = &GeomFormatExpr{FormatType: BinaryFormat, Geom: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1206:
+ case 1208:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6165
+//line sql.y:6174
{
yyLOCAL = &GeomFormatExpr{FormatType: BinaryFormat, Geom: yyDollar[3].exprUnion(), AxisOrderOpt: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1207:
+ case 1209:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6169
+//line sql.y:6178
{
yyLOCAL = &GeomFormatExpr{FormatType: TextFormat, Geom: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1208:
+ case 1210:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6173
+//line sql.y:6182
{
yyLOCAL = &GeomFormatExpr{FormatType: TextFormat, Geom: yyDollar[3].exprUnion(), AxisOrderOpt: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1209:
+ case 1211:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6177
+//line sql.y:6186
{
yyLOCAL = &GeomPropertyFuncExpr{Property: IsEmpty, Geom: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1210:
+ case 1212:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6181
+//line sql.y:6190
{
yyLOCAL = &GeomPropertyFuncExpr{Property: IsSimple, Geom: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1211:
+ case 1213:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6185
+//line sql.y:6194
{
yyLOCAL = &GeomPropertyFuncExpr{Property: Dimension, Geom: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1212:
+ case 1214:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6189
+//line sql.y:6198
{
yyLOCAL = &GeomPropertyFuncExpr{Property: Envelope, Geom: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1213:
+ case 1215:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6193
+//line sql.y:6202
{
yyLOCAL = &GeomPropertyFuncExpr{Property: GeometryType, Geom: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1214:
+ case 1216:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6197
+//line sql.y:6206
{
yyLOCAL = &PointPropertyFuncExpr{Property: Latitude, Point: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1215:
+ case 1217:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6201
+//line sql.y:6210
{
yyLOCAL = &PointPropertyFuncExpr{Property: Latitude, Point: yyDollar[3].exprUnion(), ValueToSet: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1216:
+ case 1218:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6205
+//line sql.y:6214
{
yyLOCAL = &PointPropertyFuncExpr{Property: Longitude, Point: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1217:
+ case 1219:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6209
+//line sql.y:6218
{
yyLOCAL = &PointPropertyFuncExpr{Property: Longitude, Point: yyDollar[3].exprUnion(), ValueToSet: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1218:
+ case 1220:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6213
+//line sql.y:6222
{
yyLOCAL = &LinestrPropertyFuncExpr{Property: EndPoint, Linestring: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1219:
+ case 1221:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6217
+//line sql.y:6226
{
yyLOCAL = &LinestrPropertyFuncExpr{Property: IsClosed, Linestring: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1220:
+ case 1222:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6221
+//line sql.y:6230
{
yyLOCAL = &LinestrPropertyFuncExpr{Property: Length, Linestring: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1221:
+ case 1223:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6225
+//line sql.y:6234
{
yyLOCAL = &LinestrPropertyFuncExpr{Property: Length, Linestring: yyDollar[3].exprUnion(), PropertyDefArg: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1222:
+ case 1224:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6229
+//line sql.y:6238
{
yyLOCAL = &LinestrPropertyFuncExpr{Property: NumPoints, Linestring: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1223:
+ case 1225:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6233
+//line sql.y:6242
{
yyLOCAL = &LinestrPropertyFuncExpr{Property: PointN, Linestring: yyDollar[3].exprUnion(), PropertyDefArg: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1224:
+ case 1226:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6237
+//line sql.y:6246
{
yyLOCAL = &LinestrPropertyFuncExpr{Property: StartPoint, Linestring: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1225:
+ case 1227:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6241
+//line sql.y:6250
{
yyLOCAL = &PointPropertyFuncExpr{Property: XCordinate, Point: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1226:
+ case 1228:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6245
+//line sql.y:6254
{
yyLOCAL = &PointPropertyFuncExpr{Property: XCordinate, Point: yyDollar[3].exprUnion(), ValueToSet: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1227:
+ case 1229:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6249
+//line sql.y:6258
{
yyLOCAL = &PointPropertyFuncExpr{Property: YCordinate, Point: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1228:
+ case 1230:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6253
+//line sql.y:6262
{
yyLOCAL = &PointPropertyFuncExpr{Property: YCordinate, Point: yyDollar[3].exprUnion(), ValueToSet: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1229:
+ case 1231:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6257
+//line sql.y:6266
{
yyLOCAL = &GeomFromTextExpr{Type: GeometryFromText, WktText: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1230:
+ case 1232:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6261
+//line sql.y:6270
{
yyLOCAL = &GeomFromTextExpr{Type: GeometryFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1231:
+ case 1233:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6265
+//line sql.y:6274
{
yyLOCAL = &GeomFromTextExpr{Type: GeometryFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1232:
+ case 1234:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6269
+//line sql.y:6278
{
yyLOCAL = &GeomFromTextExpr{Type: GeometryCollectionFromText, WktText: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1233:
+ case 1235:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6273
+//line sql.y:6282
{
yyLOCAL = &GeomFromTextExpr{Type: GeometryCollectionFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1234:
+ case 1236:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6277
+//line sql.y:6286
{
yyLOCAL = &GeomFromTextExpr{Type: GeometryCollectionFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1235:
+ case 1237:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6281
+//line sql.y:6290
{
yyLOCAL = &GeomFromTextExpr{Type: LineStringFromText, WktText: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1236:
+ case 1238:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6285
+//line sql.y:6294
{
yyLOCAL = &GeomFromTextExpr{Type: LineStringFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1237:
+ case 1239:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6289
+//line sql.y:6298
{
yyLOCAL = &GeomFromTextExpr{Type: LineStringFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1238:
+ case 1240:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6293
+//line sql.y:6302
{
yyLOCAL = &GeomFromTextExpr{Type: MultiLinestringFromText, WktText: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1239:
+ case 1241:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6297
+//line sql.y:6306
{
yyLOCAL = &GeomFromTextExpr{Type: MultiLinestringFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1240:
+ case 1242:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6301
+//line sql.y:6310
{
yyLOCAL = &GeomFromTextExpr{Type: MultiLinestringFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1241:
+ case 1243:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6305
+//line sql.y:6314
{
yyLOCAL = &GeomFromTextExpr{Type: MultiPointFromText, WktText: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1242:
+ case 1244:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6309
+//line sql.y:6318
{
yyLOCAL = &GeomFromTextExpr{Type: MultiPointFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1243:
+ case 1245:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6313
+//line sql.y:6322
{
yyLOCAL = &GeomFromTextExpr{Type: MultiPointFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1244:
+ case 1246:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6317
+//line sql.y:6326
{
yyLOCAL = &GeomFromTextExpr{Type: MultiPolygonFromText, WktText: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1245:
+ case 1247:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6321
+//line sql.y:6330
{
yyLOCAL = &GeomFromTextExpr{Type: MultiPolygonFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1246:
+ case 1248:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6325
+//line sql.y:6334
{
yyLOCAL = &GeomFromTextExpr{Type: MultiPolygonFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1247:
+ case 1249:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6329
+//line sql.y:6338
{
yyLOCAL = &GeomFromTextExpr{Type: PointFromText, WktText: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1248:
+ case 1250:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6333
+//line sql.y:6342
{
yyLOCAL = &GeomFromTextExpr{Type: PointFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1249:
+ case 1251:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6337
+//line sql.y:6346
{
yyLOCAL = &GeomFromTextExpr{Type: PointFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1250:
+ case 1252:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6341
+//line sql.y:6350
{
yyLOCAL = &GeomFromTextExpr{Type: PolygonFromText, WktText: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1251:
+ case 1253:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6345
+//line sql.y:6354
{
yyLOCAL = &GeomFromTextExpr{Type: PolygonFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1252:
+ case 1254:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6349
+//line sql.y:6358
{
yyLOCAL = &GeomFromTextExpr{Type: PolygonFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1253:
+ case 1255:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6353
+//line sql.y:6362
{
yyLOCAL = &GeomFromWKBExpr{Type: GeometryFromWKB, WkbBlob: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1254:
+ case 1256:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6357
+//line sql.y:6366
{
yyLOCAL = &GeomFromWKBExpr{Type: GeometryFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1255:
+ case 1257:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6361
+//line sql.y:6370
{
yyLOCAL = &GeomFromWKBExpr{Type: GeometryFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1256:
+ case 1258:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6365
+//line sql.y:6374
{
yyLOCAL = &GeomFromWKBExpr{Type: GeometryCollectionFromWKB, WkbBlob: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1257:
+ case 1259:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6369
+//line sql.y:6378
{
yyLOCAL = &GeomFromWKBExpr{Type: GeometryCollectionFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1258:
+ case 1260:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6373
+//line sql.y:6382
{
yyLOCAL = &GeomFromWKBExpr{Type: GeometryCollectionFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1259:
+ case 1261:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6377
+//line sql.y:6386
{
yyLOCAL = &GeomFromWKBExpr{Type: LineStringFromWKB, WkbBlob: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1260:
+ case 1262:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6381
+//line sql.y:6390
{
yyLOCAL = &GeomFromWKBExpr{Type: LineStringFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1261:
+ case 1263:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6385
+//line sql.y:6394
{
yyLOCAL = &GeomFromWKBExpr{Type: LineStringFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1262:
+ case 1264:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6389
+//line sql.y:6398
{
yyLOCAL = &GeomFromWKBExpr{Type: MultiLinestringFromWKB, WkbBlob: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1263:
+ case 1265:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6393
+//line sql.y:6402
{
yyLOCAL = &GeomFromWKBExpr{Type: MultiLinestringFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1264:
+ case 1266:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6397
+//line sql.y:6406
{
yyLOCAL = &GeomFromWKBExpr{Type: MultiLinestringFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1265:
+ case 1267:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6401
+//line sql.y:6410
{
yyLOCAL = &GeomFromWKBExpr{Type: MultiPointFromWKB, WkbBlob: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1266:
+ case 1268:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6405
+//line sql.y:6414
{
yyLOCAL = &GeomFromWKBExpr{Type: MultiPointFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1267:
+ case 1269:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6409
+//line sql.y:6418
{
yyLOCAL = &GeomFromWKBExpr{Type: MultiPointFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1268:
+ case 1270:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6413
+//line sql.y:6422
{
yyLOCAL = &GeomFromWKBExpr{Type: MultiPolygonFromWKB, WkbBlob: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1269:
+ case 1271:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6417
+//line sql.y:6426
{
yyLOCAL = &GeomFromWKBExpr{Type: MultiPolygonFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1270:
+ case 1272:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6421
+//line sql.y:6430
{
yyLOCAL = &GeomFromWKBExpr{Type: MultiPolygonFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1271:
+ case 1273:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6425
+//line sql.y:6434
{
yyLOCAL = &GeomFromWKBExpr{Type: PointFromWKB, WkbBlob: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1272:
+ case 1274:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6429
+//line sql.y:6438
{
yyLOCAL = &GeomFromWKBExpr{Type: PointFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1273:
+ case 1275:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6433
+//line sql.y:6442
{
yyLOCAL = &GeomFromWKBExpr{Type: PointFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1274:
+ case 1276:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6437
+//line sql.y:6446
{
yyLOCAL = &GeomFromWKBExpr{Type: PolygonFromWKB, WkbBlob: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1275:
+ case 1277:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6441
+//line sql.y:6450
{
yyLOCAL = &GeomFromWKBExpr{Type: PolygonFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1276:
+ case 1278:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6445
+//line sql.y:6454
{
yyLOCAL = &GeomFromWKBExpr{Type: PolygonFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1277:
+ case 1279:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6449
+//line sql.y:6458
{
yyLOCAL = &PolygonPropertyFuncExpr{Property: Area, Polygon: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1278:
+ case 1280:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6453
+//line sql.y:6462
{
yyLOCAL = &PolygonPropertyFuncExpr{Property: Centroid, Polygon: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1279:
+ case 1281:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6457
+//line sql.y:6466
{
yyLOCAL = &PolygonPropertyFuncExpr{Property: ExteriorRing, Polygon: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1280:
+ case 1282:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6461
+//line sql.y:6470
{
yyLOCAL = &PolygonPropertyFuncExpr{Property: InteriorRingN, Polygon: yyDollar[3].exprUnion(), PropertyDefArg: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1281:
+ case 1283:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6465
+//line sql.y:6474
{
yyLOCAL = &PolygonPropertyFuncExpr{Property: NumInteriorRings, Polygon: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1282:
+ case 1284:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6469
+//line sql.y:6478
{
yyLOCAL = &GeomCollPropertyFuncExpr{Property: GeometryN, GeomColl: yyDollar[3].exprUnion(), PropertyDefArg: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1283:
+ case 1285:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6473
+//line sql.y:6482
{
yyLOCAL = &GeomCollPropertyFuncExpr{Property: NumGeometries, GeomColl: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1284:
+ case 1286:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6477
+//line sql.y:6486
{
yyLOCAL = &GeoHashFromLatLongExpr{Longitude: yyDollar[3].exprUnion(), Latitude: yyDollar[5].exprUnion(), MaxLength: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1285:
+ case 1287:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6481
+//line sql.y:6490
{
yyLOCAL = &GeoHashFromPointExpr{Point: yyDollar[3].exprUnion(), MaxLength: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1286:
+ case 1288:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6485
+//line sql.y:6494
{
yyLOCAL = &GeomFromGeoHashExpr{GeomType: LatitudeFromHash, GeoHash: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1287:
+ case 1289:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6489
+//line sql.y:6498
{
yyLOCAL = &GeomFromGeoHashExpr{GeomType: LongitudeFromHash, GeoHash: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1288:
+ case 1290:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6493
+//line sql.y:6502
{
yyLOCAL = &GeomFromGeoHashExpr{GeomType: PointFromHash, GeoHash: yyDollar[3].exprUnion(), SridOpt: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1289:
+ case 1291:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6497
+//line sql.y:6506
{
yyLOCAL = &GeomFromGeoJSONExpr{GeoJSON: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1290:
+ case 1292:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6501
+//line sql.y:6510
{
yyLOCAL = &GeomFromGeoJSONExpr{GeoJSON: yyDollar[3].exprUnion(), HigherDimHandlerOpt: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1291:
+ case 1293:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6505
+//line sql.y:6514
{
yyLOCAL = &GeomFromGeoJSONExpr{GeoJSON: yyDollar[3].exprUnion(), HigherDimHandlerOpt: yyDollar[5].exprUnion(), Srid: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1292:
+ case 1294:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6509
+//line sql.y:6518
{
yyLOCAL = &GeoJSONFromGeomExpr{Geom: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1293:
+ case 1295:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6513
+//line sql.y:6522
{
yyLOCAL = &GeoJSONFromGeomExpr{Geom: yyDollar[3].exprUnion(), MaxDecimalDigits: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1294:
+ case 1296:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6517
+//line sql.y:6526
{
yyLOCAL = &GeoJSONFromGeomExpr{Geom: yyDollar[3].exprUnion(), MaxDecimalDigits: yyDollar[5].exprUnion(), Bitmask: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1295:
+ case 1297:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6521
+//line sql.y:6530
{
yyLOCAL = &JSONObjectExpr{Params: yyDollar[3].jsonObjectParamsUnion()}
}
yyVAL.union = yyLOCAL
- case 1296:
+ case 1298:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6525
+//line sql.y:6534
{
yyLOCAL = &JSONQuoteExpr{StringArg: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1297:
+ case 1299:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6529
+//line sql.y:6538
{
yyLOCAL = &JSONContainsExpr{Target: yyDollar[3].exprUnion(), Candidate: yyDollar[5].exprsUnion()[0], PathList: yyDollar[5].exprsUnion()[1:]}
}
yyVAL.union = yyLOCAL
- case 1298:
+ case 1300:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6533
+//line sql.y:6542
{
yyLOCAL = &JSONContainsPathExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), PathList: yyDollar[7].exprsUnion()}
}
yyVAL.union = yyLOCAL
- case 1299:
+ case 1301:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6537
+//line sql.y:6546
{
yyLOCAL = &JSONExtractExpr{JSONDoc: yyDollar[3].exprUnion(), PathList: yyDollar[5].exprsUnion()}
}
yyVAL.union = yyLOCAL
- case 1300:
+ case 1302:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6541
+//line sql.y:6550
{
yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1301:
+ case 1303:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6545
+//line sql.y:6554
{
yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1302:
+ case 1304:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6549
+//line sql.y:6558
{
yyLOCAL = &JSONOverlapsExpr{JSONDoc1: yyDollar[3].exprUnion(), JSONDoc2: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1303:
+ case 1305:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6553
+//line sql.y:6562
{
yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1304:
+ case 1306:
yyDollar = yyS[yypt-10 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6557
+//line sql.y:6566
{
yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion(), EscapeChar: yyDollar[9].exprsUnion()[0], PathList: yyDollar[9].exprsUnion()[1:]}
}
yyVAL.union = yyLOCAL
- case 1305:
+ case 1307:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6561
+//line sql.y:6570
{
yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion()}
}
yyVAL.union = yyLOCAL
- case 1306:
+ case 1308:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6565
+//line sql.y:6574
{
yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion()}
}
yyVAL.union = yyLOCAL
- case 1307:
+ case 1309:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6569
+//line sql.y:6578
{
yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), ErrorOnResponse: yyDollar[7].jtOnResponseUnion()}
}
yyVAL.union = yyLOCAL
- case 1308:
+ case 1310:
yyDollar = yyS[yypt-9 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6573
+//line sql.y:6582
{
yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion(), ErrorOnResponse: yyDollar[8].jtOnResponseUnion()}
}
yyVAL.union = yyLOCAL
- case 1309:
+ case 1311:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6577
+//line sql.y:6586
{
yyLOCAL = &JSONAttributesExpr{Type: DepthAttributeType, JSONDoc: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1310:
+ case 1312:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6581
+//line sql.y:6590
{
yyLOCAL = &JSONAttributesExpr{Type: ValidAttributeType, JSONDoc: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1311:
+ case 1313:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6585
+//line sql.y:6594
{
yyLOCAL = &JSONAttributesExpr{Type: TypeAttributeType, JSONDoc: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1312:
+ case 1314:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6589
+//line sql.y:6598
{
yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1313:
+ case 1315:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6593
+//line sql.y:6602
{
yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1314:
+ case 1316:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6597
+//line sql.y:6606
{
yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayAppendType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()}
}
yyVAL.union = yyLOCAL
- case 1315:
+ case 1317:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6601
+//line sql.y:6610
{
yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()}
}
yyVAL.union = yyLOCAL
- case 1316:
+ case 1318:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6605
+//line sql.y:6614
{
yyLOCAL = &JSONValueModifierExpr{Type: JSONInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()}
}
yyVAL.union = yyLOCAL
- case 1317:
+ case 1319:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6609
+//line sql.y:6618
{
yyLOCAL = &JSONValueModifierExpr{Type: JSONReplaceType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()}
}
yyVAL.union = yyLOCAL
- case 1318:
+ case 1320:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6613
+//line sql.y:6622
{
yyLOCAL = &JSONValueModifierExpr{Type: JSONSetType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()}
}
yyVAL.union = yyLOCAL
- case 1319:
+ case 1321:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6617
+//line sql.y:6626
{
yyLOCAL = &JSONValueMergeExpr{Type: JSONMergeType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()}
}
yyVAL.union = yyLOCAL
- case 1320:
+ case 1322:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6621
+//line sql.y:6630
{
yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePatchType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()}
}
yyVAL.union = yyLOCAL
- case 1321:
+ case 1323:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6625
+//line sql.y:6634
{
yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePreserveType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()}
}
yyVAL.union = yyLOCAL
- case 1322:
+ case 1324:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6629
+//line sql.y:6638
{
yyLOCAL = &JSONRemoveExpr{JSONDoc: yyDollar[3].exprUnion(), PathList: yyDollar[5].exprsUnion()}
}
yyVAL.union = yyLOCAL
- case 1323:
+ case 1325:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6633
+//line sql.y:6642
{
yyLOCAL = &JSONUnquoteExpr{JSONValue: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1324:
+ case 1326:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6637
+//line sql.y:6646
{
yyLOCAL = &MultiPolygonExpr{PolygonParams: yyDollar[3].exprsUnion()}
}
yyVAL.union = yyLOCAL
- case 1325:
+ case 1327:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6641
+//line sql.y:6650
{
yyLOCAL = &MultiPointExpr{PointParams: yyDollar[3].exprsUnion()}
}
yyVAL.union = yyLOCAL
- case 1326:
+ case 1328:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6645
+//line sql.y:6654
{
yyLOCAL = &MultiLinestringExpr{LinestringParams: yyDollar[3].exprsUnion()}
}
yyVAL.union = yyLOCAL
- case 1327:
+ case 1329:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6649
+//line sql.y:6658
{
yyLOCAL = &PolygonExpr{LinestringParams: yyDollar[3].exprsUnion()}
}
yyVAL.union = yyLOCAL
- case 1328:
+ case 1330:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6653
+//line sql.y:6662
{
yyLOCAL = &LineStringExpr{PointParams: yyDollar[3].exprsUnion()}
}
yyVAL.union = yyLOCAL
- case 1329:
+ case 1331:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6657
+//line sql.y:6666
{
yyLOCAL = &PointExpr{XCordinate: yyDollar[3].exprUnion(), YCordinate: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1330:
+ case 1332:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6661
+//line sql.y:6670
{
yyLOCAL = &ArgumentLessWindowExpr{Type: yyDollar[1].argumentLessWindowExprTypeUnion(), OverClause: yyDollar[4].overClauseUnion()}
}
yyVAL.union = yyLOCAL
- case 1331:
+ case 1333:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6665
+//line sql.y:6674
{
yyLOCAL = &FirstOrLastValueExpr{Type: yyDollar[1].firstOrLastValueExprTypeUnion(), Expr: yyDollar[3].exprUnion(), NullTreatmentClause: yyDollar[5].nullTreatmentClauseUnion(), OverClause: yyDollar[6].overClauseUnion()}
}
yyVAL.union = yyLOCAL
- case 1332:
+ case 1334:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6669
+//line sql.y:6678
{
yyLOCAL = &NtileExpr{N: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()}
}
yyVAL.union = yyLOCAL
- case 1333:
+ case 1335:
yyDollar = yyS[yypt-9 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6673
+//line sql.y:6682
{
yyLOCAL = &NTHValueExpr{Expr: yyDollar[3].exprUnion(), N: yyDollar[5].exprUnion(), FromFirstLastClause: yyDollar[7].fromFirstLastClauseUnion(), NullTreatmentClause: yyDollar[8].nullTreatmentClauseUnion(), OverClause: yyDollar[9].overClauseUnion()}
}
yyVAL.union = yyLOCAL
- case 1334:
+ case 1336:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6677
+//line sql.y:6686
{
yyLOCAL = &LagLeadExpr{Type: yyDollar[1].lagLeadExprTypeUnion(), Expr: yyDollar[3].exprUnion(), NullTreatmentClause: yyDollar[5].nullTreatmentClauseUnion(), OverClause: yyDollar[6].overClauseUnion()}
}
yyVAL.union = yyLOCAL
- case 1335:
+ case 1337:
yyDollar = yyS[yypt-9 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6681
+//line sql.y:6690
{
yyLOCAL = &LagLeadExpr{Type: yyDollar[1].lagLeadExprTypeUnion(), Expr: yyDollar[3].exprUnion(), N: yyDollar[5].exprUnion(), Default: yyDollar[6].exprUnion(), NullTreatmentClause: yyDollar[8].nullTreatmentClauseUnion(), OverClause: yyDollar[9].overClauseUnion()}
}
yyVAL.union = yyLOCAL
- case 1336:
+ case 1338:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6685
+//line sql.y:6694
{
yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprAdddate, Date: yyDollar[3].exprUnion(), Interval: yyDollar[6].exprUnion(), Unit: yyDollar[7].intervalTypeUnion()}
}
yyVAL.union = yyLOCAL
- case 1337:
+ case 1339:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6689
+//line sql.y:6698
{
yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprAdddate, Date: yyDollar[3].exprUnion(), Interval: yyDollar[5].exprUnion(), Unit: IntervalNone}
}
yyVAL.union = yyLOCAL
- case 1338:
+ case 1340:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6693
+//line sql.y:6702
{
yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprDateAdd, Date: yyDollar[3].exprUnion(), Interval: yyDollar[6].exprUnion(), Unit: yyDollar[7].intervalTypeUnion()}
}
yyVAL.union = yyLOCAL
- case 1339:
+ case 1341:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6697
+//line sql.y:6706
{
yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprDateSub, Date: yyDollar[3].exprUnion(), Interval: yyDollar[6].exprUnion(), Unit: yyDollar[7].intervalTypeUnion()}
}
yyVAL.union = yyLOCAL
- case 1340:
+ case 1342:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6701
+//line sql.y:6710
{
yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprSubdate, Date: yyDollar[3].exprUnion(), Interval: yyDollar[6].exprUnion(), Unit: yyDollar[7].intervalTypeUnion()}
}
yyVAL.union = yyLOCAL
- case 1341:
+ case 1343:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6705
+//line sql.y:6714
{
yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprSubdate, Date: yyDollar[3].exprUnion(), Interval: yyDollar[5].exprUnion(), Unit: IntervalNone}
}
yyVAL.union = yyLOCAL
- case 1346:
+ case 1348:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6715
+//line sql.y:6724
{
yyLOCAL = yyDollar[1].exprUnion()
}
yyVAL.union = yyLOCAL
- case 1347:
+ case 1349:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6719
+//line sql.y:6728
{
yyLOCAL = NewIntLiteral(yyDollar[1].str)
}
yyVAL.union = yyLOCAL
- case 1348:
+ case 1350:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6723
+//line sql.y:6732
{
yyLOCAL = yyDollar[1].variableUnion()
}
yyVAL.union = yyLOCAL
- case 1349:
+ case 1351:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6727
+//line sql.y:6736
{
yyLOCAL = parseBindVariable(yylex, yyDollar[1].str[1:])
}
yyVAL.union = yyLOCAL
- case 1350:
+ case 1352:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6732
+//line sql.y:6741
{
yyLOCAL = nil
}
yyVAL.union = yyLOCAL
- case 1351:
+ case 1353:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6736
+//line sql.y:6745
{
yyLOCAL = yyDollar[2].exprUnion()
}
yyVAL.union = yyLOCAL
- case 1352:
+ case 1354:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6742
+//line sql.y:6751
{
yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1353:
+ case 1355:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6746
+//line sql.y:6755
{
yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1354:
+ case 1356:
yyDollar = yyS[yypt-10 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6750
+//line sql.y:6759
{
yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1355:
+ case 1357:
yyDollar = yyS[yypt-12 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6754
+//line sql.y:6763
{
yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), ReturnOption: yyDollar[11].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1356:
+ case 1358:
yyDollar = yyS[yypt-14 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6758
+//line sql.y:6767
{
// Match type is kept expression as TRIM( ' m ') is accepted
yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), ReturnOption: yyDollar[11].exprUnion(), MatchType: yyDollar[13].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1357:
+ case 1359:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6763
+//line sql.y:6772
{
yyLOCAL = &RegexpLikeExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1358:
+ case 1360:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6767
+//line sql.y:6776
{
yyLOCAL = &RegexpLikeExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), MatchType: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1359:
+ case 1361:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6771
+//line sql.y:6780
{
yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1360:
+ case 1362:
yyDollar = yyS[yypt-10 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6775
+//line sql.y:6784
{
yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1361:
+ case 1363:
yyDollar = yyS[yypt-12 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6779
+//line sql.y:6788
{
yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion(), Occurrence: yyDollar[11].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1362:
+ case 1364:
yyDollar = yyS[yypt-14 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6783
+//line sql.y:6792
{
// Match type is kept expression as TRIM( ' m ') is accepted
yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion(), Occurrence: yyDollar[11].exprUnion(), MatchType: yyDollar[13].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1363:
+ case 1365:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6788
+//line sql.y:6797
{
yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1364:
+ case 1366:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6792
+//line sql.y:6801
{
yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1365:
+ case 1367:
yyDollar = yyS[yypt-10 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6796
+//line sql.y:6805
{
yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1366:
+ case 1368:
yyDollar = yyS[yypt-12 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6800
+//line sql.y:6809
{
// Match type is kept expression as TRIM( ' m ') is accepted
yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), MatchType: yyDollar[11].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1367:
+ case 1369:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6807
+//line sql.y:6816
{
yyLOCAL = &ExtractValueExpr{Fragment: yyDollar[3].exprUnion(), XPathExpr: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1368:
+ case 1370:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6811
+//line sql.y:6820
{
yyLOCAL = &UpdateXMLExpr{Target: yyDollar[3].exprUnion(), XPathExpr: yyDollar[5].exprUnion(), NewXML: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1369:
+ case 1371:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6817
+//line sql.y:6826
{
yyLOCAL = &PerformanceSchemaFuncExpr{Type: FormatBytesType, Argument: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1370:
+ case 1372:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6821
+//line sql.y:6830
{
yyLOCAL = &PerformanceSchemaFuncExpr{Type: FormatPicoTimeType, Argument: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1371:
+ case 1373:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6825
+//line sql.y:6834
{
yyLOCAL = &PerformanceSchemaFuncExpr{Type: PsCurrentThreadIDType}
}
yyVAL.union = yyLOCAL
- case 1372:
+ case 1374:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6829
+//line sql.y:6838
{
yyLOCAL = &PerformanceSchemaFuncExpr{Type: PsThreadIDType, Argument: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1373:
+ case 1375:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6835
+//line sql.y:6844
{
yyLOCAL = >IDFuncExpr{Type: GTIDSubsetType, Set1: yyDollar[3].exprUnion(), Set2: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1374:
+ case 1376:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6839
+//line sql.y:6848
{
yyLOCAL = >IDFuncExpr{Type: GTIDSubtractType, Set1: yyDollar[3].exprUnion(), Set2: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1375:
+ case 1377:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6843
+//line sql.y:6852
{
yyLOCAL = >IDFuncExpr{Type: WaitForExecutedGTIDSetType, Set1: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1376:
+ case 1378:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6847
+//line sql.y:6856
{
yyLOCAL = >IDFuncExpr{Type: WaitForExecutedGTIDSetType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1377:
+ case 1379:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6851
+//line sql.y:6860
{
yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1378:
+ case 1380:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6855
+//line sql.y:6864
{
yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1379:
+ case 1381:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6859
+//line sql.y:6868
{
yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion(), Channel: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1380:
+ case 1382:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:6864
+//line sql.y:6873
{
yyLOCAL = nil
}
yyVAL.union = yyLOCAL
- case 1381:
+ case 1383:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:6868
+//line sql.y:6877
{
yyLOCAL = yyDollar[2].convertTypeUnion()
}
yyVAL.union = yyLOCAL
- case 1382:
+ case 1384:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6874
+//line sql.y:6883
{
yyLOCAL = IntervalDayHour
}
yyVAL.union = yyLOCAL
- case 1383:
+ case 1385:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6878
+//line sql.y:6887
{
yyLOCAL = IntervalDayMicrosecond
}
yyVAL.union = yyLOCAL
- case 1384:
+ case 1386:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6882
+//line sql.y:6891
{
yyLOCAL = IntervalDayMinute
}
yyVAL.union = yyLOCAL
- case 1385:
+ case 1387:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6886
+//line sql.y:6895
{
yyLOCAL = IntervalDaySecond
}
yyVAL.union = yyLOCAL
- case 1386:
+ case 1388:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6890
+//line sql.y:6899
{
yyLOCAL = IntervalHourMicrosecond
}
yyVAL.union = yyLOCAL
- case 1387:
+ case 1389:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6894
+//line sql.y:6903
{
yyLOCAL = IntervalHourMinute
}
yyVAL.union = yyLOCAL
- case 1388:
+ case 1390:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6898
+//line sql.y:6907
{
yyLOCAL = IntervalHourSecond
}
yyVAL.union = yyLOCAL
- case 1389:
+ case 1391:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6902
+//line sql.y:6911
{
yyLOCAL = IntervalMinuteMicrosecond
}
yyVAL.union = yyLOCAL
- case 1390:
+ case 1392:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6906
+//line sql.y:6915
{
yyLOCAL = IntervalMinuteSecond
}
yyVAL.union = yyLOCAL
- case 1391:
+ case 1393:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6910
+//line sql.y:6919
{
yyLOCAL = IntervalSecondMicrosecond
}
yyVAL.union = yyLOCAL
- case 1392:
+ case 1394:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6914
+//line sql.y:6923
{
yyLOCAL = IntervalYearMonth
}
yyVAL.union = yyLOCAL
- case 1393:
+ case 1395:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6918
+//line sql.y:6927
{
yyLOCAL = IntervalDay
}
yyVAL.union = yyLOCAL
- case 1394:
+ case 1396:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6922
+//line sql.y:6931
{
yyLOCAL = IntervalWeek
}
yyVAL.union = yyLOCAL
- case 1395:
+ case 1397:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6926
+//line sql.y:6935
{
yyLOCAL = IntervalHour
}
yyVAL.union = yyLOCAL
- case 1396:
+ case 1398:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6930
+//line sql.y:6939
{
yyLOCAL = IntervalMinute
}
yyVAL.union = yyLOCAL
- case 1397:
+ case 1399:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6934
+//line sql.y:6943
{
yyLOCAL = IntervalMonth
}
yyVAL.union = yyLOCAL
- case 1398:
+ case 1400:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6938
+//line sql.y:6947
{
yyLOCAL = IntervalQuarter
}
yyVAL.union = yyLOCAL
- case 1399:
+ case 1401:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6942
+//line sql.y:6951
{
yyLOCAL = IntervalSecond
}
yyVAL.union = yyLOCAL
- case 1400:
+ case 1402:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6946
+//line sql.y:6955
{
yyLOCAL = IntervalMicrosecond
}
yyVAL.union = yyLOCAL
- case 1401:
+ case 1403:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6950
+//line sql.y:6959
{
yyLOCAL = IntervalYear
}
yyVAL.union = yyLOCAL
- case 1402:
+ case 1404:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6956
+//line sql.y:6965
{
yyLOCAL = IntervalDay
}
yyVAL.union = yyLOCAL
- case 1403:
+ case 1405:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6960
+//line sql.y:6969
{
yyLOCAL = IntervalWeek
}
yyVAL.union = yyLOCAL
- case 1404:
+ case 1406:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6964
+//line sql.y:6973
{
yyLOCAL = IntervalHour
}
yyVAL.union = yyLOCAL
- case 1405:
+ case 1407:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6968
+//line sql.y:6977
{
yyLOCAL = IntervalMinute
}
yyVAL.union = yyLOCAL
- case 1406:
+ case 1408:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6972
+//line sql.y:6981
{
yyLOCAL = IntervalMonth
}
yyVAL.union = yyLOCAL
- case 1407:
+ case 1409:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6976
+//line sql.y:6985
{
yyLOCAL = IntervalQuarter
}
yyVAL.union = yyLOCAL
- case 1408:
+ case 1410:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6980
+//line sql.y:6989
{
yyLOCAL = IntervalSecond
}
yyVAL.union = yyLOCAL
- case 1409:
+ case 1411:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6984
+//line sql.y:6993
{
yyLOCAL = IntervalMicrosecond
}
yyVAL.union = yyLOCAL
- case 1410:
+ case 1412:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6988
+//line sql.y:6997
{
yyLOCAL = IntervalYear
}
yyVAL.union = yyLOCAL
- case 1411:
+ case 1413:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6992
+//line sql.y:7001
{
yyLOCAL = IntervalDay
}
yyVAL.union = yyLOCAL
- case 1412:
+ case 1414:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6996
+//line sql.y:7005
{
yyLOCAL = IntervalWeek
}
yyVAL.union = yyLOCAL
- case 1413:
+ case 1415:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7000
+//line sql.y:7009
{
yyLOCAL = IntervalHour
}
yyVAL.union = yyLOCAL
- case 1414:
+ case 1416:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7004
+//line sql.y:7013
{
yyLOCAL = IntervalMinute
}
yyVAL.union = yyLOCAL
- case 1415:
+ case 1417:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7008
+//line sql.y:7017
{
yyLOCAL = IntervalMonth
}
yyVAL.union = yyLOCAL
- case 1416:
+ case 1418:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7012
+//line sql.y:7021
{
yyLOCAL = IntervalQuarter
}
yyVAL.union = yyLOCAL
- case 1417:
+ case 1419:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7016
+//line sql.y:7025
{
yyLOCAL = IntervalSecond
}
yyVAL.union = yyLOCAL
- case 1418:
+ case 1420:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7020
+//line sql.y:7029
{
yyLOCAL = IntervalMicrosecond
}
yyVAL.union = yyLOCAL
- case 1419:
+ case 1421:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7024
+//line sql.y:7033
{
yyLOCAL = IntervalYear
}
yyVAL.union = yyLOCAL
- case 1422:
+ case 1424:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL int
-//line sql.y:7034
+//line sql.y:7043
{
yyLOCAL = 0
}
yyVAL.union = yyLOCAL
- case 1423:
+ case 1425:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL int
-//line sql.y:7038
+//line sql.y:7047
{
yyLOCAL = 0
}
yyVAL.union = yyLOCAL
- case 1424:
+ case 1426:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL int
-//line sql.y:7042
+//line sql.y:7051
{
yyLOCAL = convertStringToInt(yyDollar[2].str)
}
yyVAL.union = yyLOCAL
- case 1425:
+ case 1427:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7052
+//line sql.y:7061
{
yyLOCAL = &FuncExpr{Name: NewIdentifierCI("if"), Exprs: yyDollar[3].exprsUnion()}
}
yyVAL.union = yyLOCAL
- case 1426:
+ case 1428:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7056
+//line sql.y:7065
{
yyLOCAL = &FuncExpr{Name: NewIdentifierCI("database"), Exprs: yyDollar[3].exprsUnion()}
}
yyVAL.union = yyLOCAL
- case 1427:
+ case 1429:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7060
+//line sql.y:7069
{
yyLOCAL = &FuncExpr{Name: NewIdentifierCI("schema"), Exprs: yyDollar[3].exprsUnion()}
}
yyVAL.union = yyLOCAL
- case 1428:
+ case 1430:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7064
+//line sql.y:7073
{
yyLOCAL = &FuncExpr{Name: NewIdentifierCI("mod"), Exprs: yyDollar[3].exprsUnion()}
}
yyVAL.union = yyLOCAL
- case 1429:
+ case 1431:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7068
+//line sql.y:7077
{
yyLOCAL = &FuncExpr{Name: NewIdentifierCI("replace"), Exprs: yyDollar[3].exprsUnion()}
}
yyVAL.union = yyLOCAL
- case 1430:
+ case 1432:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL MatchExprOption
-//line sql.y:7074
+//line sql.y:7083
{
yyLOCAL = NoOption
}
yyVAL.union = yyLOCAL
- case 1431:
+ case 1433:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL MatchExprOption
-//line sql.y:7078
+//line sql.y:7087
{
yyLOCAL = BooleanModeOpt
}
yyVAL.union = yyLOCAL
- case 1432:
+ case 1434:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL MatchExprOption
-//line sql.y:7082
+//line sql.y:7091
{
yyLOCAL = NaturalLanguageModeOpt
}
yyVAL.union = yyLOCAL
- case 1433:
+ case 1435:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL MatchExprOption
-//line sql.y:7086
+//line sql.y:7095
{
yyLOCAL = NaturalLanguageModeWithQueryExpansionOpt
}
yyVAL.union = yyLOCAL
- case 1434:
+ case 1436:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL MatchExprOption
-//line sql.y:7090
+//line sql.y:7099
{
yyLOCAL = QueryExpansionOpt
}
yyVAL.union = yyLOCAL
- case 1435:
+ case 1437:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7096
+//line sql.y:7105
{
yyVAL.str = string(yyDollar[1].identifierCI.String())
}
- case 1436:
+ case 1438:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7100
+//line sql.y:7109
{
yyVAL.str = string(yyDollar[1].str)
}
- case 1437:
+ case 1439:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7104
+//line sql.y:7113
{
yyVAL.str = string(yyDollar[1].str)
}
- case 1438:
+ case 1440:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7110
+//line sql.y:7119
{
yyLOCAL = nil
}
yyVAL.union = yyLOCAL
- case 1439:
+ case 1441:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7114
+//line sql.y:7123
{
yyLOCAL = &ConvertType{Type: string(yyDollar[2].str), Length: ptr.Of(convertStringToInt(yyDollar[4].str))}
}
yyVAL.union = yyLOCAL
- case 1440:
+ case 1442:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7118
+//line sql.y:7127
{
yyLOCAL = &ConvertType{Type: string(yyDollar[2].str), Length: ptr.Of(convertStringToInt(yyDollar[4].str))}
}
yyVAL.union = yyLOCAL
- case 1441:
+ case 1443:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7124
+//line sql.y:7133
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()}
}
yyVAL.union = yyLOCAL
- case 1442:
+ case 1444:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7128
+//line sql.y:7137
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion(), Charset: yyDollar[3].columnCharset}
}
yyVAL.union = yyLOCAL
- case 1443:
+ case 1445:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7132
+//line sql.y:7141
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)}
}
yyVAL.union = yyLOCAL
- case 1444:
+ case 1446:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7136
+//line sql.y:7145
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()}
}
yyVAL.union = yyLOCAL
- case 1445:
+ case 1447:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7140
+//line sql.y:7149
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)}
yyLOCAL.Length = yyDollar[2].LengthScaleOption.Length
yyLOCAL.Scale = yyDollar[2].LengthScaleOption.Scale
}
yyVAL.union = yyLOCAL
- case 1446:
+ case 1448:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7146
+//line sql.y:7155
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)}
}
yyVAL.union = yyLOCAL
- case 1447:
+ case 1449:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7150
+//line sql.y:7159
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()}
}
yyVAL.union = yyLOCAL
- case 1448:
+ case 1450:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7154
+//line sql.y:7163
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)}
}
yyVAL.union = yyLOCAL
- case 1449:
+ case 1451:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7158
+//line sql.y:7167
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)}
}
yyVAL.union = yyLOCAL
- case 1450:
+ case 1452:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7162
+//line sql.y:7171
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()}
}
yyVAL.union = yyLOCAL
- case 1451:
+ case 1453:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7166
+//line sql.y:7175
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)}
}
yyVAL.union = yyLOCAL
- case 1452:
+ case 1454:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7170
+//line sql.y:7179
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)}
}
yyVAL.union = yyLOCAL
- case 1453:
+ case 1455:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7174
+//line sql.y:7183
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()}
}
yyVAL.union = yyLOCAL
- case 1454:
+ case 1456:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7178
+//line sql.y:7187
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)}
}
yyVAL.union = yyLOCAL
- case 1455:
+ case 1457:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7182
+//line sql.y:7191
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)}
}
yyVAL.union = yyLOCAL
- case 1456:
+ case 1458:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:7188
+//line sql.y:7197
{
yyLOCAL = false
}
yyVAL.union = yyLOCAL
- case 1457:
+ case 1459:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:7192
+//line sql.y:7201
{
yyLOCAL = true
}
yyVAL.union = yyLOCAL
- case 1458:
+ case 1460:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7197
+//line sql.y:7206
{
yyLOCAL = nil
}
yyVAL.union = yyLOCAL
- case 1459:
+ case 1461:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7201
+//line sql.y:7210
{
yyLOCAL = yyDollar[1].exprUnion()
}
yyVAL.union = yyLOCAL
- case 1460:
+ case 1462:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7206
+//line sql.y:7215
{
yyVAL.str = string("")
}
- case 1461:
+ case 1463:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:7210
+//line sql.y:7219
{
yyVAL.str = encodeSQLString(yyDollar[2].str)
}
- case 1462:
+ case 1464:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []*When
-//line sql.y:7216
+//line sql.y:7225
{
yyLOCAL = []*When{yyDollar[1].whenUnion()}
}
yyVAL.union = yyLOCAL
- case 1463:
+ case 1465:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:7220
+//line sql.y:7229
{
yySLICE := (*[]*When)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[2].whenUnion())
}
- case 1464:
+ case 1466:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *When
-//line sql.y:7226
+//line sql.y:7235
{
yyLOCAL = &When{Cond: yyDollar[2].exprUnion(), Val: yyDollar[4].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1465:
+ case 1467:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7231
+//line sql.y:7240
{
yyLOCAL = nil
}
yyVAL.union = yyLOCAL
- case 1466:
+ case 1468:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7235
+//line sql.y:7244
{
yyLOCAL = yyDollar[2].exprUnion()
}
yyVAL.union = yyLOCAL
- case 1467:
+ case 1469:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *ColName
-//line sql.y:7241
+//line sql.y:7250
{
yyLOCAL = &ColName{Name: yyDollar[1].identifierCI}
}
yyVAL.union = yyLOCAL
- case 1468:
+ case 1470:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *ColName
-//line sql.y:7245
+//line sql.y:7254
{
yyLOCAL = &ColName{Name: NewIdentifierCI(string(yyDollar[1].str))}
}
yyVAL.union = yyLOCAL
- case 1469:
+ case 1471:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *ColName
-//line sql.y:7249
+//line sql.y:7258
{
yyLOCAL = &ColName{Qualifier: TableName{Name: yyDollar[1].identifierCS}, Name: yyDollar[3].identifierCI}
}
yyVAL.union = yyLOCAL
- case 1470:
+ case 1472:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *ColName
-//line sql.y:7253
+//line sql.y:7262
{
yyLOCAL = &ColName{Qualifier: TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}, Name: yyDollar[5].identifierCI}
}
yyVAL.union = yyLOCAL
- case 1471:
+ case 1473:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7259
+//line sql.y:7268
{
yyLOCAL = yyDollar[1].colNameUnion()
}
yyVAL.union = yyLOCAL
- case 1472:
+ case 1474:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7263
+//line sql.y:7272
{
yyLOCAL = &Offset{V: convertStringToInt(yyDollar[1].str)}
}
yyVAL.union = yyLOCAL
- case 1473:
+ case 1475:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7269
+//line sql.y:7278
{
// TODO(sougou): Deprecate this construct.
if yyDollar[1].identifierCI.Lowered() != "value" {
@@ -21240,442 +21300,442 @@ yydefault:
yyLOCAL = NewIntLiteral("1")
}
yyVAL.union = yyLOCAL
- case 1474:
+ case 1476:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7278
+//line sql.y:7287
{
yyLOCAL = NewIntLiteral(yyDollar[1].str)
}
yyVAL.union = yyLOCAL
- case 1475:
+ case 1477:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7282
+//line sql.y:7291
{
yyLOCAL = parseBindVariable(yylex, yyDollar[1].str[1:])
}
yyVAL.union = yyLOCAL
- case 1476:
+ case 1478:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *GroupBy
-//line sql.y:7287
+//line sql.y:7296
{
yyLOCAL = nil
}
yyVAL.union = yyLOCAL
- case 1477:
+ case 1479:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *GroupBy
-//line sql.y:7291
+//line sql.y:7300
{
yyLOCAL = &GroupBy{Exprs: yyDollar[3].exprsUnion(), WithRollup: yyDollar[4].booleanUnion()}
}
yyVAL.union = yyLOCAL
- case 1478:
+ case 1480:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:7296
+//line sql.y:7305
{
yyLOCAL = false
}
yyVAL.union = yyLOCAL
- case 1479:
+ case 1481:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL bool
-//line sql.y:7300
+//line sql.y:7309
{
yyLOCAL = true
}
yyVAL.union = yyLOCAL
- case 1480:
+ case 1482:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7306
+//line sql.y:7315
{
yyLOCAL = nil
}
yyVAL.union = yyLOCAL
- case 1481:
+ case 1483:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7310
+//line sql.y:7319
{
yyLOCAL = yyDollar[2].exprUnion()
}
yyVAL.union = yyLOCAL
- case 1482:
+ case 1484:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *NamedWindow
-//line sql.y:7316
+//line sql.y:7325
{
yyLOCAL = &NamedWindow{yyDollar[2].windowDefinitionsUnion()}
}
yyVAL.union = yyLOCAL
- case 1483:
+ case 1485:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL NamedWindows
-//line sql.y:7322
+//line sql.y:7331
{
yyLOCAL = NamedWindows{yyDollar[1].namedWindowUnion()}
}
yyVAL.union = yyLOCAL
- case 1484:
+ case 1486:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7326
+//line sql.y:7335
{
yySLICE := (*NamedWindows)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].namedWindowUnion())
}
- case 1485:
+ case 1487:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL NamedWindows
-//line sql.y:7331
+//line sql.y:7340
{
yyLOCAL = nil
}
yyVAL.union = yyLOCAL
- case 1486:
+ case 1488:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL NamedWindows
-//line sql.y:7335
+//line sql.y:7344
{
yyLOCAL = yyDollar[1].namedWindowsUnion()
}
yyVAL.union = yyLOCAL
- case 1487:
+ case 1489:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL OrderBy
-//line sql.y:7340
+//line sql.y:7349
{
yyLOCAL = nil
}
yyVAL.union = yyLOCAL
- case 1488:
+ case 1490:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL OrderBy
-//line sql.y:7344
+//line sql.y:7353
{
yyLOCAL = yyDollar[1].orderByUnion()
}
yyVAL.union = yyLOCAL
- case 1489:
+ case 1491:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL OrderBy
-//line sql.y:7350
+//line sql.y:7359
{
yyLOCAL = yyDollar[3].orderByUnion()
}
yyVAL.union = yyLOCAL
- case 1490:
+ case 1492:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL OrderBy
-//line sql.y:7356
+//line sql.y:7365
{
yyLOCAL = OrderBy{yyDollar[1].orderUnion()}
}
yyVAL.union = yyLOCAL
- case 1491:
+ case 1493:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7360
+//line sql.y:7369
{
yySLICE := (*OrderBy)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].orderUnion())
}
- case 1492:
+ case 1494:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *Order
-//line sql.y:7366
+//line sql.y:7375
{
yyLOCAL = &Order{Expr: yyDollar[1].exprUnion(), Direction: yyDollar[2].orderDirectionUnion()}
}
yyVAL.union = yyLOCAL
- case 1493:
+ case 1495:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL OrderDirection
-//line sql.y:7371
+//line sql.y:7380
{
yyLOCAL = AscOrder
}
yyVAL.union = yyLOCAL
- case 1494:
+ case 1496:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL OrderDirection
-//line sql.y:7375
+//line sql.y:7384
{
yyLOCAL = AscOrder
}
yyVAL.union = yyLOCAL
- case 1495:
+ case 1497:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL OrderDirection
-//line sql.y:7379
+//line sql.y:7388
{
yyLOCAL = DescOrder
}
yyVAL.union = yyLOCAL
- case 1496:
+ case 1498:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *Limit
-//line sql.y:7384
+//line sql.y:7393
{
yyLOCAL = nil
}
yyVAL.union = yyLOCAL
- case 1497:
+ case 1499:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *Limit
-//line sql.y:7388
+//line sql.y:7397
{
yyLOCAL = yyDollar[1].limitUnion()
}
yyVAL.union = yyLOCAL
- case 1498:
+ case 1500:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *Limit
-//line sql.y:7394
+//line sql.y:7403
{
yyLOCAL = &Limit{Rowcount: yyDollar[2].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1499:
+ case 1501:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *Limit
-//line sql.y:7398
+//line sql.y:7407
{
yyLOCAL = &Limit{Offset: yyDollar[2].exprUnion(), Rowcount: yyDollar[4].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1500:
+ case 1502:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *Limit
-//line sql.y:7402
+//line sql.y:7411
{
yyLOCAL = &Limit{Offset: yyDollar[4].exprUnion(), Rowcount: yyDollar[2].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1501:
+ case 1503:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL []AlterOption
-//line sql.y:7407
+//line sql.y:7416
{
yyLOCAL = nil
}
yyVAL.union = yyLOCAL
- case 1502:
+ case 1504:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL []AlterOption
-//line sql.y:7411
+//line sql.y:7420
{
yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()}
}
yyVAL.union = yyLOCAL
- case 1503:
+ case 1505:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL []AlterOption
-//line sql.y:7415
+//line sql.y:7424
{
yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()}
}
yyVAL.union = yyLOCAL
- case 1504:
+ case 1506:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []AlterOption
-//line sql.y:7419
+//line sql.y:7428
{
yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()}
}
yyVAL.union = yyLOCAL
- case 1505:
+ case 1507:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []AlterOption
-//line sql.y:7423
+//line sql.y:7432
{
yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()}
}
yyVAL.union = yyLOCAL
- case 1506:
+ case 1508:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:7430
+//line sql.y:7439
{
yyLOCAL = &LockOption{Type: DefaultType}
}
yyVAL.union = yyLOCAL
- case 1507:
+ case 1509:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:7434
+//line sql.y:7443
{
yyLOCAL = &LockOption{Type: NoneType}
}
yyVAL.union = yyLOCAL
- case 1508:
+ case 1510:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:7438
+//line sql.y:7447
{
yyLOCAL = &LockOption{Type: SharedType}
}
yyVAL.union = yyLOCAL
- case 1509:
+ case 1511:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:7442
+//line sql.y:7451
{
yyLOCAL = &LockOption{Type: ExclusiveType}
}
yyVAL.union = yyLOCAL
- case 1510:
+ case 1512:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:7448
+//line sql.y:7457
{
yyLOCAL = AlgorithmValue(yyDollar[3].str)
}
yyVAL.union = yyLOCAL
- case 1511:
+ case 1513:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:7452
+//line sql.y:7461
{
yyLOCAL = AlgorithmValue(yyDollar[3].str)
}
yyVAL.union = yyLOCAL
- case 1512:
+ case 1514:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:7456
+//line sql.y:7465
{
yyLOCAL = AlgorithmValue(yyDollar[3].str)
}
yyVAL.union = yyLOCAL
- case 1513:
+ case 1515:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:7460
+//line sql.y:7469
{
yyLOCAL = AlgorithmValue(yyDollar[3].str)
}
yyVAL.union = yyLOCAL
- case 1514:
+ case 1516:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7465
+//line sql.y:7474
{
yyVAL.str = ""
}
- case 1515:
+ case 1517:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7469
+//line sql.y:7478
{
yyVAL.str = string(yyDollar[3].str)
}
- case 1516:
+ case 1518:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7473
+//line sql.y:7482
{
yyVAL.str = string(yyDollar[3].str)
}
- case 1517:
+ case 1519:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7477
+//line sql.y:7486
{
yyVAL.str = string(yyDollar[3].str)
}
- case 1518:
+ case 1520:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7482
+//line sql.y:7491
{
yyVAL.str = ""
}
- case 1519:
+ case 1521:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7486
+//line sql.y:7495
{
yyVAL.str = yyDollar[3].str
}
- case 1520:
+ case 1522:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7492
+//line sql.y:7501
{
yyVAL.str = string(yyDollar[1].str)
}
- case 1521:
+ case 1523:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7496
+//line sql.y:7505
{
yyVAL.str = string(yyDollar[1].str)
}
- case 1522:
+ case 1524:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7501
+//line sql.y:7510
{
yyVAL.str = ""
}
- case 1523:
+ case 1525:
yyDollar = yyS[yypt-4 : yypt+1]
-//line sql.y:7505
+//line sql.y:7514
{
yyVAL.str = yyDollar[2].str
}
- case 1524:
+ case 1526:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7510
+//line sql.y:7519
{
yyVAL.str = "cascaded"
}
- case 1525:
+ case 1527:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7514
+//line sql.y:7523
{
yyVAL.str = string(yyDollar[1].str)
}
- case 1526:
+ case 1528:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7518
+//line sql.y:7527
{
yyVAL.str = string(yyDollar[1].str)
}
- case 1527:
+ case 1529:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *Definer
-//line sql.y:7523
+//line sql.y:7532
{
yyLOCAL = nil
}
yyVAL.union = yyLOCAL
- case 1528:
+ case 1530:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *Definer
-//line sql.y:7527
+//line sql.y:7536
{
yyLOCAL = yyDollar[3].definerUnion()
}
yyVAL.union = yyLOCAL
- case 1529:
+ case 1531:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *Definer
-//line sql.y:7533
+//line sql.y:7542
{
yyLOCAL = &Definer{
Name: string(yyDollar[1].str),
}
}
yyVAL.union = yyLOCAL
- case 1530:
+ case 1532:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *Definer
-//line sql.y:7539
+//line sql.y:7548
{
yyLOCAL = &Definer{
Name: string(yyDollar[1].str),
}
}
yyVAL.union = yyLOCAL
- case 1531:
+ case 1533:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *Definer
-//line sql.y:7545
+//line sql.y:7554
{
yyLOCAL = &Definer{
Name: yyDollar[1].str,
@@ -21683,433 +21743,433 @@ yydefault:
}
}
yyVAL.union = yyLOCAL
- case 1532:
+ case 1534:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7554
+//line sql.y:7563
{
yyVAL.str = encodeSQLString(yyDollar[1].str)
}
- case 1533:
+ case 1535:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7558
+//line sql.y:7567
{
yyVAL.str = formatIdentifier(yyDollar[1].str)
}
- case 1534:
+ case 1536:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7563
+//line sql.y:7572
{
yyVAL.str = ""
}
- case 1535:
+ case 1537:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7567
+//line sql.y:7576
{
yyVAL.str = formatAddress(yyDollar[1].str)
}
- case 1536:
+ case 1538:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Lock
-//line sql.y:7573
+//line sql.y:7582
{
yyLOCAL = ForUpdateLock
}
yyVAL.union = yyLOCAL
- case 1537:
+ case 1539:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Lock
-//line sql.y:7577
+//line sql.y:7586
{
yyLOCAL = ForUpdateLockNoWait
}
yyVAL.union = yyLOCAL
- case 1538:
+ case 1540:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Lock
-//line sql.y:7581
+//line sql.y:7590
{
yyLOCAL = ForUpdateLockSkipLocked
}
yyVAL.union = yyLOCAL
- case 1539:
+ case 1541:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Lock
-//line sql.y:7585
+//line sql.y:7594
{
yyLOCAL = ForShareLock
}
yyVAL.union = yyLOCAL
- case 1540:
+ case 1542:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Lock
-//line sql.y:7589
+//line sql.y:7598
{
yyLOCAL = ForShareLockNoWait
}
yyVAL.union = yyLOCAL
- case 1541:
+ case 1543:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Lock
-//line sql.y:7593
+//line sql.y:7602
{
yyLOCAL = ForShareLockSkipLocked
}
yyVAL.union = yyLOCAL
- case 1542:
+ case 1544:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Lock
-//line sql.y:7597
+//line sql.y:7606
{
yyLOCAL = ShareModeLock
}
yyVAL.union = yyLOCAL
- case 1543:
+ case 1545:
yyDollar = yyS[yypt-9 : yypt+1]
var yyLOCAL *SelectInto
-//line sql.y:7603
+//line sql.y:7612
{
yyLOCAL = &SelectInto{Type: IntoOutfileS3, FileName: encodeSQLString(yyDollar[4].str), Charset: yyDollar[5].columnCharset, FormatOption: yyDollar[6].str, ExportOption: yyDollar[7].str, Manifest: yyDollar[8].str, Overwrite: yyDollar[9].str}
}
yyVAL.union = yyLOCAL
- case 1544:
+ case 1546:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *SelectInto
-//line sql.y:7607
+//line sql.y:7616
{
yyLOCAL = &SelectInto{Type: IntoDumpfile, FileName: encodeSQLString(yyDollar[3].str), Charset: ColumnCharset{}, FormatOption: "", ExportOption: "", Manifest: "", Overwrite: ""}
}
yyVAL.union = yyLOCAL
- case 1545:
+ case 1547:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *SelectInto
-//line sql.y:7611
+//line sql.y:7620
{
yyLOCAL = &SelectInto{Type: IntoOutfile, FileName: encodeSQLString(yyDollar[3].str), Charset: yyDollar[4].columnCharset, FormatOption: "", ExportOption: yyDollar[5].str, Manifest: "", Overwrite: ""}
}
yyVAL.union = yyLOCAL
- case 1546:
+ case 1548:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7616
+//line sql.y:7625
{
yyVAL.str = ""
}
- case 1547:
+ case 1549:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7620
+//line sql.y:7629
{
yyVAL.str = " format csv" + yyDollar[3].str
}
- case 1548:
+ case 1550:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7624
+//line sql.y:7633
{
yyVAL.str = " format text" + yyDollar[3].str
}
- case 1549:
+ case 1551:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7629
+//line sql.y:7638
{
yyVAL.str = ""
}
- case 1550:
+ case 1552:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7633
+//line sql.y:7642
{
yyVAL.str = " header"
}
- case 1551:
+ case 1553:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7638
+//line sql.y:7647
{
yyVAL.str = ""
}
- case 1552:
+ case 1554:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:7642
+//line sql.y:7651
{
yyVAL.str = " manifest on"
}
- case 1553:
+ case 1555:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:7646
+//line sql.y:7655
{
yyVAL.str = " manifest off"
}
- case 1554:
+ case 1556:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7651
+//line sql.y:7660
{
yyVAL.str = ""
}
- case 1555:
+ case 1557:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:7655
+//line sql.y:7664
{
yyVAL.str = " overwrite on"
}
- case 1556:
+ case 1558:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:7659
+//line sql.y:7668
{
yyVAL.str = " overwrite off"
}
- case 1557:
+ case 1559:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:7665
+//line sql.y:7674
{
yyVAL.str = yyDollar[1].str + yyDollar[2].str
}
- case 1558:
+ case 1560:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7670
+//line sql.y:7679
{
yyVAL.str = ""
}
- case 1559:
+ case 1561:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:7674
+//line sql.y:7683
{
yyVAL.str = " lines" + yyDollar[2].str
}
- case 1560:
+ case 1562:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7680
+//line sql.y:7689
{
yyVAL.str = yyDollar[1].str
}
- case 1561:
+ case 1563:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:7684
+//line sql.y:7693
{
yyVAL.str = yyDollar[1].str + yyDollar[2].str
}
- case 1562:
+ case 1564:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7690
+//line sql.y:7699
{
yyVAL.str = " starting by " + encodeSQLString(yyDollar[3].str)
}
- case 1563:
+ case 1565:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7694
+//line sql.y:7703
{
yyVAL.str = " terminated by " + encodeSQLString(yyDollar[3].str)
}
- case 1564:
+ case 1566:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7699
+//line sql.y:7708
{
yyVAL.str = ""
}
- case 1565:
+ case 1567:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:7703
+//line sql.y:7712
{
yyVAL.str = " " + yyDollar[1].str + yyDollar[2].str
}
- case 1566:
+ case 1568:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7709
+//line sql.y:7718
{
yyVAL.str = yyDollar[1].str
}
- case 1567:
+ case 1569:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:7713
+//line sql.y:7722
{
yyVAL.str = yyDollar[1].str + yyDollar[2].str
}
- case 1568:
+ case 1570:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7719
+//line sql.y:7728
{
yyVAL.str = " terminated by " + encodeSQLString(yyDollar[3].str)
}
- case 1569:
+ case 1571:
yyDollar = yyS[yypt-4 : yypt+1]
-//line sql.y:7723
+//line sql.y:7732
{
yyVAL.str = yyDollar[1].str + " enclosed by " + encodeSQLString(yyDollar[4].str)
}
- case 1570:
+ case 1572:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7727
+//line sql.y:7736
{
yyVAL.str = " escaped by " + encodeSQLString(yyDollar[3].str)
}
- case 1571:
+ case 1573:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7732
+//line sql.y:7741
{
yyVAL.str = ""
}
- case 1572:
+ case 1574:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7736
+//line sql.y:7745
{
yyVAL.str = " optionally"
}
- case 1573:
+ case 1575:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *Insert
-//line sql.y:7749
+//line sql.y:7758
{
yyLOCAL = &Insert{Rows: yyDollar[2].valuesUnion(), RowAlias: yyDollar[3].rowAliasUnion()}
}
yyVAL.union = yyLOCAL
- case 1574:
+ case 1576:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *Insert
-//line sql.y:7753
+//line sql.y:7762
{
yyLOCAL = &Insert{Rows: yyDollar[1].selStmtUnion()}
}
yyVAL.union = yyLOCAL
- case 1575:
+ case 1577:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL *Insert
-//line sql.y:7757
+//line sql.y:7766
{
yyLOCAL = &Insert{Columns: yyDollar[2].columnsUnion(), Rows: yyDollar[5].valuesUnion(), RowAlias: yyDollar[6].rowAliasUnion()}
}
yyVAL.union = yyLOCAL
- case 1576:
+ case 1578:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *Insert
-//line sql.y:7761
+//line sql.y:7770
{
yyLOCAL = &Insert{Columns: []IdentifierCI{}, Rows: yyDollar[4].valuesUnion(), RowAlias: yyDollar[5].rowAliasUnion()}
}
yyVAL.union = yyLOCAL
- case 1577:
+ case 1579:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *Insert
-//line sql.y:7765
+//line sql.y:7774
{
yyLOCAL = &Insert{Columns: yyDollar[2].columnsUnion(), Rows: yyDollar[4].selStmtUnion()}
}
yyVAL.union = yyLOCAL
- case 1578:
+ case 1580:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Columns
-//line sql.y:7771
+//line sql.y:7780
{
yyLOCAL = Columns{yyDollar[1].identifierCI}
}
yyVAL.union = yyLOCAL
- case 1579:
+ case 1581:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Columns
-//line sql.y:7775
+//line sql.y:7784
{
yyLOCAL = Columns{yyDollar[3].identifierCI}
}
yyVAL.union = yyLOCAL
- case 1580:
+ case 1582:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7779
+//line sql.y:7788
{
yySLICE := (*Columns)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].identifierCI)
}
- case 1581:
+ case 1583:
yyDollar = yyS[yypt-5 : yypt+1]
-//line sql.y:7783
+//line sql.y:7792
{
yySLICE := (*Columns)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[5].identifierCI)
}
- case 1582:
+ case 1584:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *RowAlias
-//line sql.y:7788
+//line sql.y:7797
{
yyLOCAL = nil
}
yyVAL.union = yyLOCAL
- case 1583:
+ case 1585:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *RowAlias
-//line sql.y:7792
+//line sql.y:7801
{
yyLOCAL = &RowAlias{TableName: yyDollar[2].identifierCS}
}
yyVAL.union = yyLOCAL
- case 1584:
+ case 1586:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *RowAlias
-//line sql.y:7796
+//line sql.y:7805
{
yyLOCAL = &RowAlias{TableName: yyDollar[2].identifierCS, Columns: yyDollar[4].columnsUnion()}
}
yyVAL.union = yyLOCAL
- case 1585:
+ case 1587:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL UpdateExprs
-//line sql.y:7801
+//line sql.y:7810
{
yyLOCAL = nil
}
yyVAL.union = yyLOCAL
- case 1586:
+ case 1588:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL UpdateExprs
-//line sql.y:7805
+//line sql.y:7814
{
yyLOCAL = yyDollar[5].updateExprsUnion()
}
yyVAL.union = yyLOCAL
- case 1587:
+ case 1589:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Values
-//line sql.y:7811
+//line sql.y:7820
{
yyLOCAL = Values{yyDollar[1].valTupleUnion()}
}
yyVAL.union = yyLOCAL
- case 1588:
+ case 1590:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7815
+//line sql.y:7824
{
yySLICE := (*Values)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].valTupleUnion())
}
- case 1589:
+ case 1591:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ValTuple
-//line sql.y:7821
+//line sql.y:7830
{
yyLOCAL = yyDollar[1].valTupleUnion()
}
yyVAL.union = yyLOCAL
- case 1590:
+ case 1592:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL ValTuple
-//line sql.y:7825
+//line sql.y:7834
{
yyLOCAL = ValTuple{}
}
yyVAL.union = yyLOCAL
- case 1591:
+ case 1593:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL ValTuple
-//line sql.y:7831
+//line sql.y:7840
{
yyLOCAL = ValTuple(yyDollar[2].exprsUnion())
}
yyVAL.union = yyLOCAL
- case 1592:
+ case 1594:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL ValTuple
-//line sql.y:7835
+//line sql.y:7844
{
yyLOCAL = ValTuple(yyDollar[3].exprsUnion())
}
yyVAL.union = yyLOCAL
- case 1593:
+ case 1595:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7840
+//line sql.y:7849
{
if len(yyDollar[1].valTupleUnion()) == 1 {
yyLOCAL = yyDollar[1].valTupleUnion()[0]
@@ -22118,300 +22178,300 @@ yydefault:
}
}
yyVAL.union = yyLOCAL
- case 1594:
+ case 1596:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL UpdateExprs
-//line sql.y:7850
+//line sql.y:7859
{
yyLOCAL = UpdateExprs{yyDollar[1].updateExprUnion()}
}
yyVAL.union = yyLOCAL
- case 1595:
+ case 1597:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7854
+//line sql.y:7863
{
yySLICE := (*UpdateExprs)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].updateExprUnion())
}
- case 1596:
+ case 1598:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *UpdateExpr
-//line sql.y:7860
+//line sql.y:7869
{
yyLOCAL = &UpdateExpr{Name: yyDollar[1].colNameUnion(), Expr: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
- case 1598:
+ case 1600:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:7867
+//line sql.y:7876
{
yyVAL.str = "charset"
}
- case 1601:
+ case 1603:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7877
+//line sql.y:7886
{
yyLOCAL = NewStrLiteral(yyDollar[1].identifierCI.String())
}
yyVAL.union = yyLOCAL
- case 1602:
+ case 1604:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7881
+//line sql.y:7890
{
yyLOCAL = NewStrLiteral(yyDollar[1].str)
}
yyVAL.union = yyLOCAL
- case 1603:
+ case 1605:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7885
+//line sql.y:7894
{
yyLOCAL = &Default{}
}
yyVAL.union = yyLOCAL
- case 1606:
+ case 1608:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:7894
+//line sql.y:7903
{
yyLOCAL = false
}
yyVAL.union = yyLOCAL
- case 1607:
+ case 1609:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:7896
+//line sql.y:7905
{
yyLOCAL = true
}
yyVAL.union = yyLOCAL
- case 1608:
+ case 1610:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:7899
+//line sql.y:7908
{
yyLOCAL = false
}
yyVAL.union = yyLOCAL
- case 1609:
+ case 1611:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL bool
-//line sql.y:7901
+//line sql.y:7910
{
yyLOCAL = true
}
yyVAL.union = yyLOCAL
- case 1610:
+ case 1612:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:7904
+//line sql.y:7913
{
yyLOCAL = false
}
yyVAL.union = yyLOCAL
- case 1611:
+ case 1613:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL bool
-//line sql.y:7906
+//line sql.y:7915
{
yyLOCAL = true
}
yyVAL.union = yyLOCAL
- case 1612:
+ case 1614:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL Ignore
-//line sql.y:7909
+//line sql.y:7918
{
yyLOCAL = false
}
yyVAL.union = yyLOCAL
- case 1613:
+ case 1615:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Ignore
-//line sql.y:7911
+//line sql.y:7920
{
yyLOCAL = true
}
yyVAL.union = yyLOCAL
- case 1614:
+ case 1616:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7914
+//line sql.y:7923
{
yyVAL.empty = struct{}{}
}
- case 1615:
+ case 1617:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7916
+//line sql.y:7925
{
yyVAL.empty = struct{}{}
}
- case 1616:
+ case 1618:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7918
+//line sql.y:7927
{
yyVAL.empty = struct{}{}
}
- case 1617:
+ case 1619:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:7922
+//line sql.y:7931
{
yyLOCAL = &CallProc{Name: yyDollar[2].tableName, Params: yyDollar[4].exprsUnion()}
}
yyVAL.union = yyLOCAL
- case 1618:
+ case 1620:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL Exprs
-//line sql.y:7927
+//line sql.y:7936
{
yyLOCAL = nil
}
yyVAL.union = yyLOCAL
- case 1619:
+ case 1621:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Exprs
-//line sql.y:7931
+//line sql.y:7940
{
yyLOCAL = yyDollar[1].exprsUnion()
}
yyVAL.union = yyLOCAL
- case 1620:
+ case 1622:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL []*IndexOption
-//line sql.y:7936
+//line sql.y:7945
{
yyLOCAL = nil
}
yyVAL.union = yyLOCAL
- case 1621:
+ case 1623:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []*IndexOption
-//line sql.y:7938
+//line sql.y:7947
{
yyLOCAL = []*IndexOption{yyDollar[1].indexOptionUnion()}
}
yyVAL.union = yyLOCAL
- case 1622:
+ case 1624:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *IndexOption
-//line sql.y:7942
+//line sql.y:7951
{
yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), String: string(yyDollar[2].identifierCI.String())}
}
yyVAL.union = yyLOCAL
- case 1623:
+ case 1625:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7948
+//line sql.y:7957
{
yyVAL.identifierCI = yyDollar[1].identifierCI
}
- case 1624:
+ case 1626:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7952
+//line sql.y:7961
{
yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str))
}
- case 1626:
+ case 1628:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7959
+//line sql.y:7968
{
yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str))
}
- case 1627:
+ case 1629:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7965
+//line sql.y:7974
{
yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str))
}
- case 1628:
+ case 1630:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7969
+//line sql.y:7978
{
yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str))
}
- case 1629:
+ case 1631:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7975
+//line sql.y:7984
{
yyVAL.identifierCS = NewIdentifierCS("")
}
- case 1630:
+ case 1632:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7979
+//line sql.y:7988
{
yyVAL.identifierCS = yyDollar[1].identifierCS
}
- case 1632:
+ case 1634:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7986
+//line sql.y:7995
{
yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str))
}
- case 1633:
+ case 1635:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:7992
+//line sql.y:8001
{
yyLOCAL = &Kill{Type: yyDollar[2].killTypeUnion(), ProcesslistID: convertStringToUInt64(yyDollar[3].str)}
}
yyVAL.union = yyLOCAL
- case 1634:
+ case 1636:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL KillType
-//line sql.y:7998
+//line sql.y:8007
{
yyLOCAL = ConnectionType
}
yyVAL.union = yyLOCAL
- case 1635:
+ case 1637:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL KillType
-//line sql.y:8002
+//line sql.y:8011
{
yyLOCAL = ConnectionType
}
yyVAL.union = yyLOCAL
- case 1636:
+ case 1638:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL KillType
-//line sql.y:8006
+//line sql.y:8015
{
yyLOCAL = QueryType
}
yyVAL.union = yyLOCAL
- case 2257:
+ case 2261:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:8655
+//line sql.y:8666
{
}
- case 2258:
+ case 2262:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:8660
+//line sql.y:8671
{
}
- case 2259:
+ case 2263:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:8664
+//line sql.y:8675
{
skipToEnd(yylex)
}
- case 2260:
+ case 2264:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:8669
+//line sql.y:8680
{
skipToEnd(yylex)
}
- case 2261:
+ case 2265:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:8673
+//line sql.y:8684
{
skipToEnd(yylex)
}
- case 2262:
+ case 2266:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:8677
+//line sql.y:8688
{
skipToEnd(yylex)
}
diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y
index ba6c2a6081b..7686aeaa726 100644
--- a/go/vt/sqlparser/sql.y
+++ b/go/vt/sqlparser/sql.y
@@ -262,6 +262,7 @@ func markBindVariable(yylex yyLexer, bvar string) {
%token ID AT_ID AT_AT_ID HEX NCHAR_STRING INTEGRAL FLOAT DECIMAL HEXNUM COMMENT COMMENT_KEYWORD BITNUM BIT_LITERAL COMPRESSION
%token VALUE_ARG LIST_ARG OFFSET_ARG
%token JSON_PRETTY JSON_STORAGE_SIZE JSON_STORAGE_FREE JSON_CONTAINS JSON_CONTAINS_PATH JSON_EXTRACT JSON_KEYS JSON_OVERLAPS JSON_SEARCH JSON_VALUE
+%token JSON_ARRAYAGG JSON_OBJECTAGG
%token EXTRACT
%token NULL UNKNOWN TRUE FALSE OFF
%token DISCARD IMPORT ENABLE DISABLE TABLESPACE
@@ -6085,6 +6086,14 @@ UTC_DATE func_paren_opt
{
$$ = &JSONStorageSizeExpr{ JSONVal: $3}
}
+| JSON_ARRAYAGG openb expression closeb over_clause_opt
+ {
+ $$ = &JSONArrayAgg{Expr: $3, OverClause: $5}
+ }
+| JSON_OBJECTAGG openb expression ',' expression closeb over_clause_opt
+ {
+ $$ = &JSONObjectAgg{Key: $3, Value: $5, OverClause: $7}
+ }
| LTRIM openb expression closeb
{
$$ = &TrimFuncExpr{TrimFuncType:LTrimType, Type: LeadingTrimType, StringArg: $3}
@@ -8317,6 +8326,7 @@ non_reserved_keyword:
| ISOLATION
| JSON
| JSON_ARRAY %prec FUNCTION_CALL_NON_KEYWORD
+| JSON_ARRAYAGG %prec FUNCTION_CALL_NON_KEYWORD
| JSON_ARRAY_APPEND %prec FUNCTION_CALL_NON_KEYWORD
| JSON_ARRAY_INSERT %prec FUNCTION_CALL_NON_KEYWORD
| JSON_CONTAINS %prec FUNCTION_CALL_NON_KEYWORD
@@ -8325,6 +8335,7 @@ non_reserved_keyword:
| JSON_EXTRACT %prec FUNCTION_CALL_NON_KEYWORD
| JSON_INSERT %prec FUNCTION_CALL_NON_KEYWORD
| JSON_KEYS %prec FUNCTION_CALL_NON_KEYWORD
+| JSON_OBJECTAGG %prec FUNCTION_CALL_NON_KEYWORD
| JSON_MERGE %prec FUNCTION_CALL_NON_KEYWORD
| JSON_MERGE_PATCH %prec FUNCTION_CALL_NON_KEYWORD
| JSON_MERGE_PRESERVE %prec FUNCTION_CALL_NON_KEYWORD
diff --git a/go/vt/sqlparser/testdata/select_cases.txt b/go/vt/sqlparser/testdata/select_cases.txt
index 3edec6dae7e..6fedca5ddfd 100644
--- a/go/vt/sqlparser/testdata/select_cases.txt
+++ b/go/vt/sqlparser/testdata/select_cases.txt
@@ -4286,7 +4286,7 @@ INPUT
select * from t1 where MATCH a,b AGAINST ('"xt indexes"' IN BOOLEAN MODE);
END
OUTPUT
-select * from t1 where match(a, b) against ('\"xt indexes\"' in boolean mode)
+select * from t1 where match(a, b) against ('"xt indexes"' in boolean mode)
END
INPUT
select max(value) from t1 AS m LEFT JOIN t2 AS c1 ON m.c1id = c1.id AND c1.active = 'Yes' LEFT JOIN t3 AS c2 ON m.c2id = c2.id AND c2.active = 'Yes' WHERE m.pid=1 AND (c1.id IS NOT NULL OR c2.id IS NOT NULL);
@@ -5660,7 +5660,7 @@ INPUT
select * from t1 where MATCH a,b AGAINST ('"text search" "now support"' IN BOOLEAN MODE);
END
OUTPUT
-select * from t1 where match(a, b) against ('\"text search\" \"now support\"' in boolean mode)
+select * from t1 where match(a, b) against ('"text search" "now support"' in boolean mode)
END
INPUT
select insert('hello', 1, -18446744073709551616, 'hi');
@@ -8048,7 +8048,7 @@ INPUT
select * from t1 where MATCH a,b AGAINST ('"text i"' IN BOOLEAN MODE);
END
OUTPUT
-select * from t1 where match(a, b) against ('\"text i\"' in boolean mode)
+select * from t1 where match(a, b) against ('"text i"' in boolean mode)
END
INPUT
select column_name,data_type,CHARACTER_OCTET_LENGTH, CHARACTER_MAXIMUM_LENGTH from information_schema.columns where table_name='t1' order by column_name;
@@ -8144,7 +8144,7 @@ INPUT
select * from t1 where MATCH a,b AGAINST ('"support now"' IN BOOLEAN MODE);
END
OUTPUT
-select * from t1 where match(a, b) against ('\"support now\"' in boolean mode)
+select * from t1 where match(a, b) against ('"support now"' in boolean mode)
END
INPUT
select hex(inet_aton('127.1.1'));
@@ -12212,7 +12212,7 @@ INPUT
select * from t1 where MATCH a,b AGAINST ('"text search" +"now support"' IN BOOLEAN MODE);
END
OUTPUT
-select * from t1 where match(a, b) against ('\"text search\" +\"now support\"' in boolean mode)
+select * from t1 where match(a, b) against ('"text search" +"now support"' in boolean mode)
END
INPUT
select trigger_name from information_schema.triggers where event_object_table='t1';
@@ -14750,7 +14750,7 @@ INPUT
select * from t1 where MATCH a,b AGAINST('"space model' IN BOOLEAN MODE);
END
OUTPUT
-select * from t1 where match(a, b) against ('\"space model' in boolean mode)
+select * from t1 where match(a, b) against ('"space model' in boolean mode)
END
INPUT
select @ujis4 = CONVERT(@utf84 USING ujis);
@@ -14906,7 +14906,7 @@ INPUT
select * from t1 where MATCH a,b AGAINST ('"text search" -"now support"' IN BOOLEAN MODE);
END
OUTPUT
-select * from t1 where match(a, b) against ('\"text search\" -\"now support\"' in boolean mode)
+select * from t1 where match(a, b) against ('"text search" -"now support"' in boolean mode)
END
INPUT
select _rowid,t1._rowid,skey,sval from t1;
@@ -17612,7 +17612,7 @@ INPUT
select 'aaa','aa''a',"aa""a";
END
OUTPUT
-select 'aaa', 'aa\'a', 'aa\"a' from dual
+select 'aaa', 'aa\'a', 'aa"a' from dual
END
INPUT
select cast('18446744073709551615' as signed);
@@ -18542,7 +18542,7 @@ INPUT
select * from t1 where MATCH a,b AGAINST ('"now support"' IN BOOLEAN MODE);
END
OUTPUT
-select * from t1 where match(a, b) against ('\"now support\"' in boolean mode)
+select * from t1 where match(a, b) against ('"now support"' in boolean mode)
END
INPUT
select date_add("1997-12-31 23:59:59",INTERVAL "10000:99:99" HOUR_SECOND);
@@ -22148,7 +22148,7 @@ INPUT
select * from t1 where MATCH a,b AGAINST ('"Now sUPPort"' IN BOOLEAN MODE);
END
OUTPUT
-select * from t1 where match(a, b) against ('\"Now sUPPort\"' in boolean mode)
+select * from t1 where match(a, b) against ('"Now sUPPort"' in boolean mode)
END
INPUT
select sum(all a),count(all a),avg(all a),std(all a),variance(all a),bit_or(all a),bit_and(all a),min(all a),max(all a),min(all c),max(all c) from t1;
diff --git a/go/vt/vtctl/workflow/framework_test.go b/go/vt/vtctl/workflow/framework_test.go
index 73b34015338..e2ccde0a0e7 100644
--- a/go/vt/vtctl/workflow/framework_test.go
+++ b/go/vt/vtctl/workflow/framework_test.go
@@ -21,6 +21,7 @@ import (
"fmt"
"os"
"regexp"
+ "slices"
"strings"
"sync"
"sync/atomic"
@@ -33,6 +34,7 @@ import (
"vitess.io/vitess/go/protoutil"
"vitess.io/vitess/go/sqltypes"
+ "vitess.io/vitess/go/vt/key"
"vitess.io/vitess/go/vt/mysqlctl/tmutils"
"vitess.io/vitess/go/vt/topo"
"vitess.io/vitess/go/vt/topo/memorytopo"
@@ -94,24 +96,68 @@ func newTestEnv(t *testing.T, ctx context.Context, cell string, sourceKeyspace,
env.tmc = newTestTMClient(env)
env.ws = NewServer(venv, env.ts, env.tmc)
+ serving := true
tabletID := startingSourceTabletUID
for _, shardName := range sourceKeyspace.ShardNames {
- _ = env.addTablet(t, ctx, tabletID, sourceKeyspace.KeyspaceName, shardName, topodatapb.TabletType_PRIMARY)
+ _ = env.addTablet(t, ctx, tabletID, sourceKeyspace.KeyspaceName, shardName, topodatapb.TabletType_PRIMARY, serving)
tabletID += tabletUIDStep
}
- if sourceKeyspace.KeyspaceName != targetKeyspace.KeyspaceName {
- tabletID = startingTargetTabletUID
- for _, shardName := range targetKeyspace.ShardNames {
- _ = env.addTablet(t, ctx, tabletID, targetKeyspace.KeyspaceName, shardName, topodatapb.TabletType_PRIMARY)
- tabletID += tabletUIDStep
- }
+
+ isReshard := func() bool {
+ return sourceKeyspace.KeyspaceName == targetKeyspace.KeyspaceName &&
+ !slices.Equal(sourceKeyspace.ShardNames, targetKeyspace.ShardNames)
}
+
+ if isReshard() {
+ serving = false
+ }
+ tabletID = startingTargetTabletUID
+ for _, shardName := range targetKeyspace.ShardNames {
+ _ = env.addTablet(t, ctx, tabletID, targetKeyspace.KeyspaceName, shardName, topodatapb.TabletType_PRIMARY, serving)
+ tabletID += tabletUIDStep
+ }
+
+ if isReshard() {
+ initSrvKeyspace(t, env.ts, targetKeyspace.KeyspaceName, sourceKeyspace.ShardNames, targetKeyspace.ShardNames, []string{cell})
+ }
+
err := env.ts.RebuildSrvVSchema(ctx, nil)
require.NoError(t, err)
return env
}
+func initSrvKeyspace(t *testing.T, topo *topo.Server, keyspace string, sources, targets, cells []string) {
+ ctx := context.Background()
+ srvKeyspace := &topodatapb.SrvKeyspace{
+ Partitions: []*topodatapb.SrvKeyspace_KeyspacePartition{},
+ }
+ getPartition := func(t *testing.T, shards []string) *topodatapb.SrvKeyspace_KeyspacePartition {
+ partition := &topodatapb.SrvKeyspace_KeyspacePartition{
+ ServedType: topodatapb.TabletType_PRIMARY,
+ ShardReferences: []*topodatapb.ShardReference{},
+ }
+ for _, shard := range shards {
+ keyRange, err := key.ParseShardingSpec(shard)
+ require.NoError(t, err)
+ require.Equal(t, 1, len(keyRange))
+ partition.ShardReferences = append(partition.ShardReferences, &topodatapb.ShardReference{
+ Name: shard,
+ KeyRange: keyRange[0],
+ })
+ }
+ return partition
+ }
+ srvKeyspace.Partitions = append(srvKeyspace.Partitions, getPartition(t, sources))
+ srvKeyspace.Partitions = append(srvKeyspace.Partitions, getPartition(t, targets))
+ for _, cell := range cells {
+ err := topo.UpdateSrvKeyspace(ctx, cell, keyspace, srvKeyspace)
+ require.NoError(t, err)
+ }
+ err := topo.ValidateSrvKeyspace(ctx, keyspace, strings.Join(cells, ","))
+ require.NoError(t, err)
+}
+
func (env *testEnv) close() {
for _, k := range maps.Values(env.tablets) {
for _, t := range maps.Values(k) {
@@ -120,7 +166,7 @@ func (env *testEnv) close() {
}
}
-func (env *testEnv) addTablet(t *testing.T, ctx context.Context, id int, keyspace, shard string, tabletType topodatapb.TabletType) *topodatapb.Tablet {
+func (env *testEnv) addTablet(t *testing.T, ctx context.Context, id int, keyspace, shard string, tabletType topodatapb.TabletType, serving bool) *topodatapb.Tablet {
tablet := &topodatapb.Tablet{
Alias: &topodatapb.TabletAlias{
Cell: env.cell,
@@ -143,7 +189,7 @@ func (env *testEnv) addTablet(t *testing.T, ctx context.Context, id int, keyspac
if tabletType == topodatapb.TabletType_PRIMARY {
_, err = env.ws.ts.UpdateShardFields(ctx, keyspace, shard, func(si *topo.ShardInfo) error {
si.PrimaryAlias = tablet.Alias
- si.IsPrimaryServing = true
+ si.IsPrimaryServing = serving
return nil
})
require.NoError(t, err)
diff --git a/go/vt/vtctl/workflow/materializer_test.go b/go/vt/vtctl/workflow/materializer_test.go
index 9a43ea5ed7e..51a7d22d5eb 100644
--- a/go/vt/vtctl/workflow/materializer_test.go
+++ b/go/vt/vtctl/workflow/materializer_test.go
@@ -822,18 +822,21 @@ func TestCreateLookupVindexCreateDDL(t *testing.T) {
},
},
}
- if err := env.topoServ.SaveVSchema(ctx, ms.SourceKeyspace, vs); err != nil {
- t.Fatal(err)
+ setStartingVschema := func() {
+ err := env.topoServ.SaveVSchema(ctx, ms.SourceKeyspace, vs)
+ require.NoError(t, err)
}
+ setStartingVschema()
testcases := []struct {
description string
specs *vschemapb.Keyspace
sourceSchema string
+ preFunc func()
out string
err string
}{{
- description: "unique lookup",
+ description: "unique lookup re-use vschema",
specs: &vschemapb.Keyspace{
Vindexes: map[string]*vschemapb.Vindex{
"v": {
@@ -855,6 +858,32 @@ func TestCreateLookupVindexCreateDDL(t *testing.T) {
},
},
},
+ preFunc: func() {
+ // The vschema entries will already exist and we will re-use them.
+ err := env.ws.ts.SaveVSchema(ctx, ms.SourceKeyspace, &vschemapb.Keyspace{
+ Vindexes: map[string]*vschemapb.Vindex{
+ "v": {
+ Type: "lookup_unique",
+ Params: map[string]string{
+ "table": fmt.Sprintf("%s.lkp", ms.TargetKeyspace),
+ "from": "c1",
+ "to": "c2",
+ "write_only": "true", // It has not been externalized yet
+ },
+ Owner: "t1",
+ },
+ },
+ Tables: map[string]*vschemapb.Table{
+ "t1": {
+ ColumnVindexes: []*vschemapb.ColumnVindex{{
+ Name: "v",
+ Column: "col2",
+ }},
+ },
+ },
+ })
+ require.NoError(t, err)
+ },
sourceSchema: "CREATE TABLE `t1` (\n" +
" `col1` int(11) NOT NULL AUTO_INCREMENT,\n" +
" `col2` int(11) DEFAULT NULL,\n" +
@@ -866,6 +895,132 @@ func TestCreateLookupVindexCreateDDL(t *testing.T) {
" `c2` varbinary(128),\n" +
" PRIMARY KEY (`c1`)\n" +
")",
+ }, {
+ description: "unique lookup with conflicting vindex",
+ specs: &vschemapb.Keyspace{
+ Vindexes: map[string]*vschemapb.Vindex{
+ "v": {
+ Type: "lookup_unique",
+ Params: map[string]string{
+ "table": fmt.Sprintf("%s.lkp", ms.TargetKeyspace),
+ "from": "c1",
+ "to": "c2",
+ },
+ Owner: "t1",
+ },
+ },
+ Tables: map[string]*vschemapb.Table{
+ "t1": {
+ ColumnVindexes: []*vschemapb.ColumnVindex{{
+ Name: "v",
+ Column: "col2",
+ }},
+ },
+ },
+ },
+ preFunc: func() {
+ // The existing vindex vschema entry differs from what we want to
+ // create so we cannot re-use it.
+ err := env.ws.ts.SaveVSchema(ctx, ms.SourceKeyspace, &vschemapb.Keyspace{
+ Vindexes: map[string]*vschemapb.Vindex{
+ "v": {
+ Type: "lookup_unique",
+ Params: map[string]string{
+ "table": fmt.Sprintf("%s.lkp", ms.TargetKeyspace),
+ "from": "c1",
+ "to": "c2",
+ "write_only": "false", // This vindex has been externalized
+ },
+ Owner: "t1",
+ },
+ },
+ })
+ require.NoError(t, err)
+ },
+ err: "a conflicting vindex named v already exists in the sourceks keyspace",
+ sourceSchema: "CREATE TABLE `t1` (\n" +
+ " `col1` int(11) NOT NULL AUTO_INCREMENT,\n" +
+ " `col2` int(11) DEFAULT NULL,\n" +
+ " `col3` int(11) DEFAULT NULL,\n" +
+ " PRIMARY KEY (`id`)\n" +
+ ") ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1",
+ }, {
+ description: "unique lookup with conflicting column vindexes",
+ specs: &vschemapb.Keyspace{
+ Vindexes: map[string]*vschemapb.Vindex{
+ "v": {
+ Type: "lookup_unique",
+ Params: map[string]string{
+ "table": fmt.Sprintf("%s.lkp", ms.TargetKeyspace),
+ "from": "c1",
+ "to": "c2",
+ },
+ Owner: "t1",
+ },
+ },
+ Tables: map[string]*vschemapb.Table{
+ "t1": {
+ ColumnVindexes: []*vschemapb.ColumnVindex{{
+ Name: "v",
+ Column: "col2",
+ }},
+ },
+ },
+ },
+ preFunc: func() {
+ // The existing ColumnVindexes vschema entry differs from what we
+ // want to create so we cannot re-use it.
+ err := env.ws.ts.SaveVSchema(ctx, ms.SourceKeyspace, &vschemapb.Keyspace{
+ Tables: map[string]*vschemapb.Table{
+ "t1": {
+ ColumnVindexes: []*vschemapb.ColumnVindex{{
+ Name: "v",
+ Columns: []string{"col1", "col2"},
+ }},
+ },
+ },
+ })
+ require.NoError(t, err)
+ },
+ err: "a conflicting ColumnVindex on column(s) col1,col2 in table t1 already exists in the sourceks keyspace",
+ sourceSchema: "CREATE TABLE `t1` (\n" +
+ " `col1` int(11) NOT NULL AUTO_INCREMENT,\n" +
+ " `col2` int(11) DEFAULT NULL,\n" +
+ " `col3` int(11) DEFAULT NULL,\n" +
+ " PRIMARY KEY (`id`)\n" +
+ ") ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1",
+ }, {
+ description: "unique lookup using last column w/o primary key",
+ specs: &vschemapb.Keyspace{
+ Vindexes: map[string]*vschemapb.Vindex{
+ "v": {
+ Type: "lookup_unique",
+ Params: map[string]string{
+ "table": fmt.Sprintf("%s.lkp", ms.TargetKeyspace),
+ "from": "c1",
+ "to": "c2",
+ },
+ Owner: "t1",
+ },
+ },
+ Tables: map[string]*vschemapb.Table{
+ "t1": {
+ ColumnVindexes: []*vschemapb.ColumnVindex{{
+ Name: "v",
+ Column: "col2",
+ }},
+ },
+ },
+ },
+ sourceSchema: "CREATE TABLE `t1` (\n" +
+ " `col1` int(11) NOT NULL AUTO_INCREMENT,\n" +
+ " `col2` int(11) DEFAULT NULL\n" + // Because it's the last entity in the definition it has no trailing comma
+ ") ENGINE=InnoDB",
+ out: "CREATE TABLE `lkp` (\n" +
+ " `c1` int(11),\n" +
+ " `c2` varbinary(128),\n" +
+ " PRIMARY KEY (`c1`)\n" +
+ ")",
}, {
description: "unique lookup, also pk",
specs: &vschemapb.Keyspace{
@@ -992,27 +1147,36 @@ func TestCreateLookupVindexCreateDDL(t *testing.T) {
err: "unexpected number of tables (0) returned from sourceks schema",
}}
for _, tcase := range testcases {
- if tcase.sourceSchema != "" {
- env.tmc.schema[ms.SourceKeyspace+".t1"] = &tabletmanagerdatapb.SchemaDefinition{
- TableDefinitions: []*tabletmanagerdatapb.TableDefinition{{
- Schema: tcase.sourceSchema,
- }},
+ t.Run(tcase.description, func(t *testing.T) {
+ if tcase.sourceSchema != "" {
+ env.tmc.schema[ms.SourceKeyspace+".t1"] = &tabletmanagerdatapb.SchemaDefinition{
+ TableDefinitions: []*tabletmanagerdatapb.TableDefinition{{
+ Schema: tcase.sourceSchema,
+ }},
+ }
+ } else {
+ delete(env.tmc.schema, ms.SourceKeyspace+".t1")
}
- } else {
- delete(env.tmc.schema, ms.SourceKeyspace+".t1")
- }
- outms, _, _, err := env.ws.prepareCreateLookup(ctx, "workflow", ms.SourceKeyspace, tcase.specs, false)
- if tcase.err != "" {
- if err == nil || !strings.Contains(err.Error(), tcase.err) {
- t.Errorf("prepareCreateLookup(%s) err: %v, must contain %v", tcase.description, err, tcase.err)
+ if tcase.preFunc != nil {
+ tcase.preFunc()
+ defer func() {
+ // Reset the vschema as it may have been changed in the pre
+ // function.
+ setStartingVschema()
+ }()
}
- continue
- }
- require.NoError(t, err)
- want := strings.Split(tcase.out, "\n")
- got := strings.Split(outms.TableSettings[0].CreateDdl, "\n")
- require.Equal(t, want, got, tcase.description)
+ outms, _, _, err := env.ws.prepareCreateLookup(ctx, "workflow", ms.SourceKeyspace, tcase.specs, false)
+ if tcase.err != "" {
+ require.Error(t, err)
+ require.Contains(t, err.Error(), tcase.err, "prepareCreateLookup(%s) err: %v, does not contain %v", tcase.description, err, tcase.err)
+ return
+ }
+ require.NoError(t, err)
+ want := strings.Split(tcase.out, "\n")
+ got := strings.Split(outms.TableSettings[0].CreateDdl, "\n")
+ require.Equal(t, want, got, tcase.description)
+ })
}
}
@@ -1367,15 +1531,15 @@ func TestCreateLookupVindexTargetVSchema(t *testing.T) {
out: &vschemapb.Keyspace{
Sharded: true,
Vindexes: map[string]*vschemapb.Vindex{
- "unicode_loose_md5": {
- Type: "unicode_loose_md5",
+ "unicode_loose_xxhash": {
+ Type: "unicode_loose_xxhash",
},
},
Tables: map[string]*vschemapb.Table{
"lkp": {
ColumnVindexes: []*vschemapb.ColumnVindex{{
Column: "c1",
- Name: "unicode_loose_md5",
+ Name: "unicode_loose_xxhash",
}},
},
},
@@ -1417,7 +1581,7 @@ func TestCreateLookupVindexTargetVSchema(t *testing.T) {
Vindexes: map[string]*vschemapb.Vindex{
// Create a misleading vindex name.
"xxhash": {
- Type: "unicode_loose_md5",
+ Type: "unicode_loose_xxhash",
},
},
},
@@ -1639,7 +1803,7 @@ func TestCreateCustomizedVindex(t *testing.T) {
},
"lookup": {
ColumnVindexes: []*vschemapb.ColumnVindex{{
- Name: "unicode_loose_md5",
+ Name: "unicode_loose_xxhash",
Column: "c1",
}},
},
@@ -1659,8 +1823,8 @@ func TestCreateCustomizedVindex(t *testing.T) {
"xxhash": {
Type: "xxhash",
},
- "unicode_loose_md5": { // Non default vindex type for the column.
- Type: "unicode_loose_md5",
+ "unicode_loose_xxhash": { // Non default vindex type for the column.
+ Type: "unicode_loose_xxhash",
},
},
Tables: map[string]*vschemapb.Table{
@@ -1678,8 +1842,8 @@ func TestCreateCustomizedVindex(t *testing.T) {
"xxhash": {
Type: "xxhash",
},
- "unicode_loose_md5": {
- Type: "unicode_loose_md5",
+ "unicode_loose_xxhash": {
+ Type: "unicode_loose_xxhash",
},
"v": {
Type: "lookup_unique",
@@ -1705,7 +1869,7 @@ func TestCreateCustomizedVindex(t *testing.T) {
"lookup": {
ColumnVindexes: []*vschemapb.ColumnVindex{{
Column: "c1",
- Name: "unicode_loose_md5",
+ Name: "unicode_loose_xxhash",
}},
},
},
diff --git a/go/vt/vtctl/workflow/resharder.go b/go/vt/vtctl/workflow/resharder.go
index 95fcea3a2a9..4f4ed34963a 100644
--- a/go/vt/vtctl/workflow/resharder.go
+++ b/go/vt/vtctl/workflow/resharder.go
@@ -99,6 +99,9 @@ func (s *Server) buildResharder(ctx context.Context, keyspace, workflow string,
if err != nil {
return nil, vterrors.Wrapf(err, "GetShard(%s) failed", shard)
}
+ if si.PrimaryAlias == nil {
+ return nil, fmt.Errorf("target shard %v has no primary tablet", shard)
+ }
if si.IsPrimaryServing {
return nil, fmt.Errorf("target shard %v is in serving state", shard)
}
diff --git a/go/vt/vtctl/workflow/resharder_test.go b/go/vt/vtctl/workflow/resharder_test.go
new file mode 100644
index 00000000000..1bb2f065e0f
--- /dev/null
+++ b/go/vt/vtctl/workflow/resharder_test.go
@@ -0,0 +1,192 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package workflow
+
+import (
+ "context"
+ "fmt"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+
+ "vitess.io/vitess/go/sqltypes"
+ "vitess.io/vitess/go/vt/topo"
+ "vitess.io/vitess/go/vt/topo/topoproto"
+
+ tabletmanagerdatapb "vitess.io/vitess/go/vt/proto/tabletmanagerdata"
+ topodatapb "vitess.io/vitess/go/vt/proto/topodata"
+ vtctldatapb "vitess.io/vitess/go/vt/proto/vtctldata"
+)
+
+const eol = "$"
+
+func TestReshardCreate(t *testing.T) {
+ ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
+ defer cancel()
+
+ workflowName := "wf1"
+ tableName := "t1"
+ sourceKeyspaceName := "targetks"
+ targetKeyspaceName := "targetks"
+ tabletTypes := []topodatapb.TabletType{
+ topodatapb.TabletType_PRIMARY,
+ topodatapb.TabletType_REPLICA,
+ topodatapb.TabletType_RDONLY,
+ }
+ tabletTypesStr := topoproto.MakeStringTypeCSV(tabletTypes)
+ schema := map[string]*tabletmanagerdatapb.SchemaDefinition{
+ tableName: {
+ TableDefinitions: []*tabletmanagerdatapb.TableDefinition{
+ {
+ Name: tableName,
+ Schema: fmt.Sprintf("CREATE TABLE %s (id BIGINT, name VARCHAR(64), PRIMARY KEY (id))", tableName),
+ },
+ },
+ },
+ }
+
+ testcases := []struct {
+ name string
+ sourceKeyspace, targetKeyspace *testKeyspace
+ preFunc func(env *testEnv)
+ want *vtctldatapb.WorkflowStatusResponse
+ wantErr string
+ }{
+ {
+ name: "basic",
+ sourceKeyspace: &testKeyspace{
+ KeyspaceName: sourceKeyspaceName,
+ ShardNames: []string{"0"},
+ },
+ targetKeyspace: &testKeyspace{
+ KeyspaceName: targetKeyspaceName,
+ ShardNames: []string{"-80", "80-"},
+ },
+ want: &vtctldatapb.WorkflowStatusResponse{
+ ShardStreams: map[string]*vtctldatapb.WorkflowStatusResponse_ShardStreams{
+ "targetks/-80": {
+ Streams: []*vtctldatapb.WorkflowStatusResponse_ShardStreamState{
+ {
+ Id: 1,
+ Tablet: &topodatapb.TabletAlias{Cell: defaultCellName, Uid: startingTargetTabletUID},
+ SourceShard: "targetks/0", Position: position, Status: "Running", Info: "VStream Lag: 0s",
+ },
+ },
+ },
+ "targetks/80-": {
+ Streams: []*vtctldatapb.WorkflowStatusResponse_ShardStreamState{
+ {
+ Id: 1,
+ Tablet: &topodatapb.TabletAlias{Cell: defaultCellName, Uid: startingTargetTabletUID + tabletUIDStep},
+ SourceShard: "targetks/0", Position: position, Status: "Running", Info: "VStream Lag: 0s",
+ },
+ },
+ },
+ },
+ TrafficState: "Reads Not Switched. Writes Not Switched",
+ },
+ },
+ {
+ name: "no primary",
+ sourceKeyspace: &testKeyspace{
+ KeyspaceName: sourceKeyspaceName,
+ ShardNames: []string{"0"},
+ },
+ targetKeyspace: &testKeyspace{
+ KeyspaceName: targetKeyspaceName,
+ ShardNames: []string{"-80", "80-"},
+ },
+ preFunc: func(env *testEnv) {
+ _, err := env.ts.UpdateShardFields(ctx, targetKeyspaceName, "-80", func(si *topo.ShardInfo) error {
+ si.PrimaryAlias = nil
+ return nil
+ })
+ require.NoError(t, err)
+ },
+ wantErr: "buildResharder: target shard -80 has no primary tablet",
+ },
+ }
+ for _, tc := range testcases {
+ t.Run(tc.name, func(t *testing.T) {
+ require.NotNil(t, tc.sourceKeyspace)
+ require.NotNil(t, tc.targetKeyspace)
+
+ env := newTestEnv(t, ctx, defaultCellName, tc.sourceKeyspace, tc.targetKeyspace)
+ defer env.close()
+ env.tmc.schema = schema
+
+ req := &vtctldatapb.ReshardCreateRequest{
+ Keyspace: targetKeyspaceName,
+ Workflow: workflowName,
+ TabletTypes: tabletTypes,
+ SourceShards: tc.sourceKeyspace.ShardNames,
+ TargetShards: tc.targetKeyspace.ShardNames,
+ Cells: []string{env.cell},
+ }
+
+ for i := range tc.sourceKeyspace.ShardNames {
+ tabletUID := startingSourceTabletUID + (tabletUIDStep * i)
+ env.tmc.expectVRQuery(
+ tabletUID,
+ "select distinct table_name from _vt.copy_state cs, _vt.vreplication vr where vr.id = cs.vrepl_id and vr.id = 1",
+ &sqltypes.Result{},
+ )
+ env.tmc.expectVRQuery(
+ tabletUID,
+ "select vrepl_id, table_name, lastpk from _vt.copy_state where vrepl_id in (1) and id in (select max(id) from _vt.copy_state where vrepl_id in (1) group by vrepl_id, table_name)",
+ &sqltypes.Result{},
+ )
+ }
+
+ for i, target := range tc.targetKeyspace.ShardNames {
+ tabletUID := startingTargetTabletUID + (tabletUIDStep * i)
+ env.tmc.expectVRQuery(
+ tabletUID,
+ insertPrefix+
+ `\('`+workflowName+`', 'keyspace:"`+targetKeyspaceName+`" shard:"0" filter:{rules:{match:"/.*" filter:"`+target+`"}}', '', [0-9]*, [0-9]*, '`+
+ env.cell+`', '`+tabletTypesStr+`', [0-9]*, 0, 'Stopped', 'vt_`+targetKeyspaceName+`', 4, 0, false, '{}'\)`+eol,
+ &sqltypes.Result{},
+ )
+ env.tmc.expectVRQuery(
+ tabletUID,
+ "select distinct table_name from _vt.copy_state cs, _vt.vreplication vr where vr.id = cs.vrepl_id and vr.id = 1",
+ &sqltypes.Result{},
+ )
+ env.tmc.expectVRQuery(
+ tabletUID,
+ "select vrepl_id, table_name, lastpk from _vt.copy_state where vrepl_id in (1) and id in (select max(id) from _vt.copy_state where vrepl_id in (1) group by vrepl_id, table_name)",
+ &sqltypes.Result{},
+ )
+ }
+
+ if tc.preFunc != nil {
+ tc.preFunc(env)
+ }
+
+ res, err := env.ws.ReshardCreate(ctx, req)
+ if tc.wantErr != "" {
+ require.EqualError(t, err, tc.wantErr)
+ return
+ }
+ require.NoError(t, err)
+ if tc.want != nil {
+ require.Equal(t, tc.want, res)
+ }
+ })
+ }
+}
diff --git a/go/vt/vtctl/workflow/server.go b/go/vt/vtctl/workflow/server.go
index 587caff3c8c..19268866253 100644
--- a/go/vt/vtctl/workflow/server.go
+++ b/go/vt/vtctl/workflow/server.go
@@ -1725,7 +1725,7 @@ func (s *Server) ReshardCreate(ctx context.Context, req *vtctldatapb.ReshardCrea
if err := s.ts.ValidateSrvKeyspace(ctx, keyspace, strings.Join(cells, ",")); err != nil {
err2 := vterrors.Wrapf(err, "SrvKeyspace for keyspace %s is corrupt for cell(s) %s", keyspace, cells)
- log.Errorf("%w", err2)
+ log.Errorf("%v", err2)
return nil, err
}
tabletTypesStr := discovery.BuildTabletTypesString(req.TabletTypes, req.TabletSelectionPreference)
@@ -1755,6 +1755,7 @@ func (s *Server) ReshardCreate(ctx context.Context, req *vtctldatapb.ReshardCrea
return s.WorkflowStatus(ctx, &vtctldatapb.WorkflowStatusRequest{
Keyspace: req.Keyspace,
Workflow: req.Workflow,
+ Shards: req.TargetShards,
})
}
@@ -3811,7 +3812,7 @@ func (s *Server) prepareCreateLookup(ctx context.Context, workflow, keyspace str
targetVSchema.Tables = make(map[string]*vschemapb.Table)
}
if existing, ok := sourceVSchema.Vindexes[vindexName]; ok {
- if !proto.Equal(existing, vindex) {
+ if !proto.Equal(existing, vindex) { // If the exact same vindex already exists then we can re-use it
return nil, nil, nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "a conflicting vindex named %s already exists in the %s keyspace", vindexName, keyspace)
}
}
@@ -3824,13 +3825,18 @@ func (s *Server) prepareCreateLookup(ctx context.Context, workflow, keyspace str
if colVindex.Name != vindexName {
continue
}
- colName := colVindex.Column
- if len(colVindex.Columns) != 0 {
- colName = colVindex.Columns[0]
+ var colNames []string
+ if len(colVindex.Columns) == 0 {
+ colNames = []string{colVindex.Column}
+ } else {
+ colNames = colVindex.Columns
}
- if colName == sourceVindexColumns[0] {
- return nil, nil, nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "a conflicting ColumnVindex on column %s in table %s already exists in the %s keyspace",
- colName, sourceTableName, keyspace)
+ // If this is the exact same definition then we can use the existing one. If they
+ // are not the same then they are two distinct conflicting vindexes and we should
+ // not proceed.
+ if !slices.Equal(colNames, sourceVindexColumns) {
+ return nil, nil, nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "a conflicting ColumnVindex on column(s) %s in table %s already exists in the %s keyspace",
+ strings.Join(colNames, ","), sourceTableName, keyspace)
}
}
@@ -3884,6 +3890,10 @@ func (s *Server) prepareCreateLookup(ctx context.Context, workflow, keyspace str
modified = append(modified, buf.String())
modified = append(modified, ")")
createDDL = strings.Join(modified, "\n")
+ // Confirm that our DDL is valid before we create anything.
+ if _, err = s.env.Parser().ParseStrictDDL(createDDL); err != nil {
+ return nil, nil, nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "error: %v; invalid lookup table definition generated: %s", err, createDDL)
+ }
// Generate vreplication query.
buf = sqlparser.NewTrackedBuffer(nil)
@@ -3999,6 +4009,13 @@ func generateColDef(lines []string, sourceVindexCol, vindexFromCol string) (stri
line = strings.Replace(line, source, target, 1)
line = strings.Replace(line, " AUTO_INCREMENT", "", 1)
line = strings.Replace(line, " DEFAULT NULL", "", 1)
+ // Ensure that the column definition ends with a comma as we will
+ // be appending the TO column and PRIMARY KEY definitions. If the
+ // souce column here was the last entity defined in the source
+ // table's definition then it will not already have the comma.
+ if !strings.HasSuffix(strings.TrimSpace(line), ",") {
+ line += ","
+ }
return line, nil
}
}
diff --git a/go/vt/vtctl/workflow/utils_test.go b/go/vt/vtctl/workflow/utils_test.go
index e63ae00aa19..d79c4710b77 100644
--- a/go/vt/vtctl/workflow/utils_test.go
+++ b/go/vt/vtctl/workflow/utils_test.go
@@ -4,7 +4,7 @@ import (
"context"
"fmt"
"math"
- "math/rand"
+ "math/rand/v2"
"os"
"os/exec"
"sync"
@@ -103,7 +103,7 @@ func testConcurrentKeyspaceRoutingRulesUpdates(t *testing.T, ctx context.Context
func update(t *testing.T, ts *topo.Server, id int) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
- s := fmt.Sprintf("%d_%d", id, rand.Intn(math.MaxInt))
+ s := fmt.Sprintf("%d_%d", id, rand.IntN(math.MaxInt))
routes := make(map[string]string)
for _, tabletType := range tabletTypeSuffixes {
from := fmt.Sprintf("from%s%s", s, tabletType)
diff --git a/go/vt/vtexplain/testdata/twopc-output/unsharded-output.txt b/go/vt/vtexplain/testdata/twopc-output/unsharded-output.txt
index 0db31f10110..b7299002d01 100644
--- a/go/vt/vtexplain/testdata/twopc-output/unsharded-output.txt
+++ b/go/vt/vtexplain/testdata/twopc-output/unsharded-output.txt
@@ -45,4 +45,4 @@ insert into t1 (id,intval,floatval) values (1,2,3.14) on duplicate key update in
1 ks_unsharded/-: insert into t1(id, intval, floatval) values (1, 2, 3.14) on duplicate key update intval = 3, floatval = 3.14
2 ks_unsharded/-: commit
-----------------------------------------------------------------------
+----------------------------------------------------------------------
\ No newline at end of file
diff --git a/go/vt/vtgate/engine/aggregations.go b/go/vt/vtgate/engine/aggregations.go
index 4673a2717e5..d3f2b7a1c82 100644
--- a/go/vt/vtgate/engine/aggregations.go
+++ b/go/vt/vtgate/engine/aggregations.go
@@ -43,7 +43,7 @@ type AggregateParams struct {
Type evalengine.Type
Alias string `json:",omitempty"`
- Expr sqlparser.Expr
+ Func sqlparser.AggrFunc
Original *sqlparser.AliasedExpr
// This is based on the function passed in the select expression and
@@ -255,8 +255,9 @@ func (a *aggregatorScalar) reset() {
}
type aggregatorGroupConcat struct {
- from int
- type_ sqltypes.Type
+ from int
+ type_ sqltypes.Type
+ separator []byte
concat []byte
n int
@@ -267,7 +268,7 @@ func (a *aggregatorGroupConcat) add(row []sqltypes.Value) error {
return nil
}
if a.n > 0 {
- a.concat = append(a.concat, ',')
+ a.concat = append(a.concat, a.separator...)
}
a.concat = append(a.concat, row[a.from].Raw()...)
a.n++
@@ -434,7 +435,13 @@ func newAggregation(fields []*querypb.Field, aggregates []*AggregateParams) (agg
ag = &aggregatorScalar{from: aggr.Col}
case AggregateGroupConcat:
- ag = &aggregatorGroupConcat{from: aggr.Col, type_: targetType}
+ gcFunc := aggr.Func.(*sqlparser.GroupConcatExpr)
+ separator := []byte(gcFunc.Separator)
+ ag = &aggregatorGroupConcat{
+ from: aggr.Col,
+ type_: targetType,
+ separator: separator,
+ }
default:
panic("BUG: unexpected Aggregation opcode")
diff --git a/go/vt/vtgate/engine/cached_size.go b/go/vt/vtgate/engine/cached_size.go
index e65ff61a9f6..df23f14f6f5 100644
--- a/go/vt/vtgate/engine/cached_size.go
+++ b/go/vt/vtgate/engine/cached_size.go
@@ -41,8 +41,8 @@ func (cached *AggregateParams) CachedSize(alloc bool) int64 {
size += cached.Type.CachedSize(false)
// field Alias string
size += hack.RuntimeAllocSize(int64(len(cached.Alias)))
- // field Expr vitess.io/vitess/go/vt/sqlparser.Expr
- if cc, ok := cached.Expr.(cachedObject); ok {
+ // field Func vitess.io/vitess/go/vt/sqlparser.AggrFunc
+ if cc, ok := cached.Func.(cachedObject); ok {
size += cc.CachedSize(true)
}
// field Original *vitess.io/vitess/go/vt/sqlparser.AliasedExpr
diff --git a/go/vt/vtgate/engine/ordered_aggregate_test.go b/go/vt/vtgate/engine/ordered_aggregate_test.go
index 3eaa63819e4..c601654bced 100644
--- a/go/vt/vtgate/engine/ordered_aggregate_test.go
+++ b/go/vt/vtgate/engine/ordered_aggregate_test.go
@@ -22,6 +22,7 @@ import (
"fmt"
"testing"
+ "vitess.io/vitess/go/vt/sqlparser"
"vitess.io/vitess/go/vt/vtgate/evalengine"
"github.com/stretchr/testify/assert"
@@ -1058,8 +1059,10 @@ func TestGroupConcatWithAggrOnEngine(t *testing.T) {
for _, tcase := range tcases {
t.Run(tcase.name, func(t *testing.T) {
fp := &fakePrimitive{results: []*sqltypes.Result{tcase.inputResult}}
+ agp := NewAggregateParam(AggregateGroupConcat, 1, "group_concat(c2)", collations.MySQL8())
+ agp.Func = &sqlparser.GroupConcatExpr{Separator: ","}
oa := &OrderedAggregate{
- Aggregates: []*AggregateParams{NewAggregateParam(AggregateGroupConcat, 1, "group_concat(c2)", collations.MySQL8())},
+ Aggregates: []*AggregateParams{agp},
GroupByKeys: []*GroupByParams{{KeyCol: 0}},
Input: fp,
}
@@ -1137,8 +1140,10 @@ func TestGroupConcat(t *testing.T) {
for _, tcase := range tcases {
t.Run(tcase.name, func(t *testing.T) {
fp := &fakePrimitive{results: []*sqltypes.Result{tcase.inputResult}}
+ agp := NewAggregateParam(AggregateGroupConcat, 1, "", collations.MySQL8())
+ agp.Func = &sqlparser.GroupConcatExpr{Separator: ","}
oa := &OrderedAggregate{
- Aggregates: []*AggregateParams{NewAggregateParam(AggregateGroupConcat, 1, "", collations.MySQL8())},
+ Aggregates: []*AggregateParams{agp},
GroupByKeys: []*GroupByParams{{KeyCol: 0}},
Input: fp,
}
diff --git a/go/vt/vtgate/engine/scalar_aggregation_test.go b/go/vt/vtgate/engine/scalar_aggregation_test.go
index 99031c95f34..6fa0c8aecb8 100644
--- a/go/vt/vtgate/engine/scalar_aggregation_test.go
+++ b/go/vt/vtgate/engine/scalar_aggregation_test.go
@@ -27,6 +27,7 @@ import (
"vitess.io/vitess/go/mysql/collations"
"vitess.io/vitess/go/sqltypes"
"vitess.io/vitess/go/test/utils"
+ "vitess.io/vitess/go/vt/sqlparser"
. "vitess.io/vitess/go/vt/vtgate/engine/opcode"
)
@@ -233,6 +234,7 @@ func TestScalarGroupConcatWithAggrOnEngine(t *testing.T) {
Opcode: AggregateGroupConcat,
Col: 0,
Alias: "group_concat(c2)",
+ Func: &sqlparser.GroupConcatExpr{Separator: ","},
}},
Input: fp,
}
@@ -394,6 +396,7 @@ func TestScalarGroupConcat(t *testing.T) {
Aggregates: []*AggregateParams{{
Opcode: AggregateGroupConcat,
Col: 0,
+ Func: &sqlparser.GroupConcatExpr{Separator: ","},
}},
Input: fp,
}
diff --git a/go/vt/vtgate/evalengine/compiler.go b/go/vt/vtgate/evalengine/compiler.go
index bcb2281f1a6..b0a7edd285d 100644
--- a/go/vt/vtgate/evalengine/compiler.go
+++ b/go/vt/vtgate/evalengine/compiler.go
@@ -81,6 +81,10 @@ func (v *EnumSetValues) Equal(other *EnumSetValues) bool {
return slices.Equal(*v, *other)
}
+func NewUnknownType() Type {
+ return NewType(sqltypes.Unknown, collations.Unknown)
+}
+
func NewType(t sqltypes.Type, collation collations.ID) Type {
// New types default to being nullable
return NewTypeEx(t, collation, true, 0, 0, nil)
diff --git a/go/vt/vtgate/evalengine/expr_bvar.go b/go/vt/vtgate/evalengine/expr_bvar.go
index 0fffe3140a2..daf64296e98 100644
--- a/go/vt/vtgate/evalengine/expr_bvar.go
+++ b/go/vt/vtgate/evalengine/expr_bvar.go
@@ -83,9 +83,6 @@ func (bv *BindVariable) eval(env *ExpressionEnv) (eval, error) {
return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "query argument '%s' cannot be a tuple", bv.Key)
}
typ := bvar.Type
- if bv.typed() {
- typ = bv.Type
- }
return valueToEval(sqltypes.MakeTrusted(typ, bvar.Value), typedCoercionCollation(typ, collations.CollationForType(typ, bv.Collation)), nil)
}
}
diff --git a/go/vt/vtgate/planbuilder/operator_transformers.go b/go/vt/vtgate/planbuilder/operator_transformers.go
index 60a59ed936a..da3f7348afd 100644
--- a/go/vt/vtgate/planbuilder/operator_transformers.go
+++ b/go/vt/vtgate/planbuilder/operator_transformers.go
@@ -308,7 +308,10 @@ func transformAggregator(ctx *plancontext.PlanningContext, op *operators.Aggrega
return nil, vterrors.VT12001(fmt.Sprintf("in scatter query: aggregation function '%s'", sqlparser.String(aggr.Original)))
}
aggrParam := engine.NewAggregateParam(aggr.OpCode, aggr.ColOffset, aggr.Alias, ctx.VSchema.Environment().CollationEnv())
- aggrParam.Expr = aggr.Func
+ aggrParam.Func = aggr.Func
+ if gcFunc, isGc := aggrParam.Func.(*sqlparser.GroupConcatExpr); isGc && gcFunc.Separator == "" {
+ gcFunc.Separator = sqlparser.GroupConcatDefaultSeparator
+ }
aggrParam.Original = aggr.Original
aggrParam.OrigOpcode = aggr.OriginalOpCode
aggrParam.WCol = aggr.WSOffset
diff --git a/go/vt/vtgate/planbuilder/operators/aggregation_pushing_helper.go b/go/vt/vtgate/planbuilder/operators/aggregation_pushing_helper.go
index 2c47f426695..2fbf5c32311 100644
--- a/go/vt/vtgate/planbuilder/operators/aggregation_pushing_helper.go
+++ b/go/vt/vtgate/planbuilder/operators/aggregation_pushing_helper.go
@@ -134,8 +134,8 @@ func (ab *aggBuilder) handleAggr(ctx *plancontext.PlanningContext, aggr Aggr) er
return ab.handlePushThroughAggregation(ctx, aggr)
case opcode.AggregateGroupConcat:
f := aggr.Func.(*sqlparser.GroupConcatExpr)
- if f.Distinct || len(f.OrderBy) > 0 || f.Separator != "" {
- panic("fail here")
+ if f.Distinct || len(f.OrderBy) > 0 {
+ panic(vterrors.VT12001("cannot evaluate group concat with distinct or order by"))
}
// this needs special handling, currently aborting the push of function
// and later will try pushing the column instead.
diff --git a/go/vt/vtgate/planbuilder/operators/expressions.go b/go/vt/vtgate/planbuilder/operators/expressions.go
index a39ae96fa88..17b4bc7c3f1 100644
--- a/go/vt/vtgate/planbuilder/operators/expressions.go
+++ b/go/vt/vtgate/planbuilder/operators/expressions.go
@@ -44,7 +44,11 @@ func breakExpressionInLHSandRHS(
Name: bvName,
Expr: nodeExpr,
})
- arg := sqlparser.NewArgument(bvName)
+ typeForExpr, _ := ctx.TypeForExpr(nodeExpr)
+ arg := sqlparser.NewTypedArgument(bvName, typeForExpr.Type())
+ arg.Scale = typeForExpr.Scale()
+ arg.Size = typeForExpr.Size()
+
// we are replacing one of the sides of the comparison with an argument,
// but we don't want to lose the type information we have, so we copy it over
ctx.SemTable.CopyExprInfo(nodeExpr, arg)
diff --git a/go/vt/vtgate/planbuilder/operators/query_planning.go b/go/vt/vtgate/planbuilder/operators/query_planning.go
index 2f3259394e2..2602e39f87e 100644
--- a/go/vt/vtgate/planbuilder/operators/query_planning.go
+++ b/go/vt/vtgate/planbuilder/operators/query_planning.go
@@ -490,6 +490,11 @@ func setUpperLimit(in *Limit) (Operator, *ApplyResult) {
case *Join, *ApplyJoin, *SubQueryContainer, *SubQuery:
// we can't push limits down on either side
return SkipChildren
+ case *Aggregator:
+ if len(op.Grouping) > 0 {
+ // we can't push limits down if we have a group by
+ return SkipChildren
+ }
case *Route:
newSrc := &Limit{
Source: op.Source,
@@ -498,9 +503,8 @@ func setUpperLimit(in *Limit) (Operator, *ApplyResult) {
op.Source = newSrc
result = result.Merge(Rewrote("push upper limit under route"))
return SkipChildren
- default:
- return VisitChildren
}
+ return VisitChildren
}
TopDown(in.Source, TableID, visitor, shouldVisit)
@@ -532,26 +536,10 @@ func tryPushOrdering(ctx *plancontext.PlanningContext, in *Ordering) (Operator,
return pushOrderingUnderAggr(ctx, in, src)
case *SubQueryContainer:
return pushOrderingToOuterOfSubqueryContainer(ctx, in, src)
- case *SubQuery:
- return pushOrderingToOuterOfSubquery(ctx, in, src)
}
return in, NoRewrite
}
-func pushOrderingToOuterOfSubquery(ctx *plancontext.PlanningContext, in *Ordering, sq *SubQuery) (Operator, *ApplyResult) {
- outerTableID := TableID(sq.Outer)
- for idx, order := range in.Order {
- deps := ctx.SemTable.RecursiveDeps(order.Inner.Expr)
- if !deps.IsSolvedBy(outerTableID) {
- return in, NoRewrite
- }
- in.Order[idx].SimplifiedExpr = sq.rewriteColNameToArgument(order.SimplifiedExpr)
- in.Order[idx].Inner.Expr = sq.rewriteColNameToArgument(order.Inner.Expr)
- }
- sq.Outer, in.Source = in, sq.Outer
- return sq, Rewrote("push ordering into outer side of subquery")
-}
-
func pushOrderingToOuterOfSubqueryContainer(ctx *plancontext.PlanningContext, in *Ordering, subq *SubQueryContainer) (Operator, *ApplyResult) {
outerTableID := TableID(subq.Outer)
for _, order := range in.Order {
diff --git a/go/vt/vtgate/planbuilder/operators/queryprojection.go b/go/vt/vtgate/planbuilder/operators/queryprojection.go
index 5729dbd0c2e..352a5ffc7a7 100644
--- a/go/vt/vtgate/planbuilder/operators/queryprojection.go
+++ b/go/vt/vtgate/planbuilder/operators/queryprojection.go
@@ -68,26 +68,22 @@ type (
// Aggr encodes all information needed for aggregation functions
Aggr struct {
- Original *sqlparser.AliasedExpr
- Func sqlparser.AggrFunc // if we are missing a Func, it means this is a AggregateAnyValue
- OpCode opcode.AggregateOpcode
+ Original *sqlparser.AliasedExpr // The original SQL expression for the aggregation
+ Func sqlparser.AggrFunc // The aggregation function (e.g., COUNT, SUM). If nil, it means AggregateAnyValue is used
+ OpCode opcode.AggregateOpcode // The opcode representing the type of aggregation being performed
- // OriginalOpCode will contain opcode.AggregateUnassigned unless we are changing opcode while pushing them down
+ // OriginalOpCode will contain opcode.AggregateUnassigned unless we are changing the opcode while pushing them down
OriginalOpCode opcode.AggregateOpcode
- Alias string
+ Alias string // The alias name for the aggregation result
- // The index at which the user expects to see this aggregated function. Set to nil, if the user does not ask for it
- // Only used in the old Horizon Planner
- Index *int
+ Distinct bool // Whether the aggregation function is DISTINCT
- Distinct bool
-
- // the offsets point to columns on the same aggregator
- ColOffset int
- WSOffset int
+ // Offsets pointing to columns within the same aggregator
+ ColOffset int // Offset for the column being aggregated
+ WSOffset int // Offset for the weight string of the column
- SubQueryExpression []*SubQuery
+ SubQueryExpression []*SubQuery // Subqueries associated with this aggregation
}
)
@@ -97,7 +93,7 @@ func (aggr Aggr) NeedsWeightString(ctx *plancontext.PlanningContext) bool {
func (aggr Aggr) GetTypeCollation(ctx *plancontext.PlanningContext) evalengine.Type {
if aggr.Func == nil {
- return evalengine.Type{}
+ return evalengine.NewUnknownType()
}
switch aggr.OpCode {
case opcode.AggregateMin, opcode.AggregateMax, opcode.AggregateSumDistinct, opcode.AggregateCountDistinct:
@@ -442,14 +438,12 @@ func (qp *QueryProjection) AggregationExpressions(ctx *plancontext.PlanningConte
// Here we go over the expressions we are returning. Since we know we are aggregating,
// all expressions have to be either grouping expressions or aggregate expressions.
// If we find an expression that is neither, we treat is as a special aggregation function AggrRandom
- for idx, expr := range qp.SelectExprs {
+ for _, expr := range qp.SelectExprs {
aliasedExpr, err := expr.GetAliasedExpr()
if err != nil {
panic(err)
}
- idxCopy := idx
-
if !ContainsAggr(ctx, expr.Col) {
getExpr, err := expr.GetExpr()
if err != nil {
@@ -457,7 +451,6 @@ func (qp *QueryProjection) AggregationExpressions(ctx *plancontext.PlanningConte
}
if !qp.isExprInGroupByExprs(ctx, getExpr) {
aggr := NewAggr(opcode.AggregateAnyValue, nil, aliasedExpr, aliasedExpr.ColumnName())
- aggr.Index = &idxCopy
out = append(out, aggr)
}
continue
@@ -466,14 +459,13 @@ func (qp *QueryProjection) AggregationExpressions(ctx *plancontext.PlanningConte
panic(vterrors.VT12001("in scatter query: complex aggregate expression"))
}
- sqlparser.CopyOnRewrite(aliasedExpr.Expr, qp.extractAggr(ctx, idx, aliasedExpr, addAggr, makeComplex), nil, nil)
+ sqlparser.CopyOnRewrite(aliasedExpr.Expr, qp.extractAggr(ctx, aliasedExpr, addAggr, makeComplex), nil, nil)
}
return
}
func (qp *QueryProjection) extractAggr(
ctx *plancontext.PlanningContext,
- idx int,
aliasedExpr *sqlparser.AliasedExpr,
addAggr func(a Aggr),
makeComplex func(),
@@ -489,7 +481,6 @@ func (qp *QueryProjection) extractAggr(
ae = aliasedExpr
}
aggrFunc := createAggrFromAggrFunc(aggr, ae)
- aggrFunc.Index = &idx
addAggr(aggrFunc)
return false
}
@@ -497,7 +488,6 @@ func (qp *QueryProjection) extractAggr(
// If we are here, we have a function that is an aggregation but not parsed into an AggrFunc.
// This is the case for UDFs - we have to be careful with these because we can't evaluate them in VTGate.
aggr := NewAggr(opcode.AggregateUDF, nil, aeWrap(ex), "")
- aggr.Index = &idx
addAggr(aggr)
return false
}
@@ -507,7 +497,6 @@ func (qp *QueryProjection) extractAggr(
}
if !qp.isExprInGroupByExprs(ctx, ex) {
aggr := NewAggr(opcode.AggregateAnyValue, nil, aeWrap(ex), "")
- aggr.Index = &idx
addAggr(aggr)
}
return false
diff --git a/go/vt/vtgate/planbuilder/operators/subquery.go b/go/vt/vtgate/planbuilder/operators/subquery.go
index a950c3720c2..5ae0fb52e7f 100644
--- a/go/vt/vtgate/planbuilder/operators/subquery.go
+++ b/go/vt/vtgate/planbuilder/operators/subquery.go
@@ -309,18 +309,3 @@ func (sq *SubQuery) mapExpr(f func(expr sqlparser.Expr) sqlparser.Expr) {
sq.Original = f(sq.Original)
sq.originalSubquery = f(sq.originalSubquery).(*sqlparser.Subquery)
}
-
-func (sq *SubQuery) rewriteColNameToArgument(expr sqlparser.Expr) sqlparser.Expr {
- pre := func(cursor *sqlparser.Cursor) bool {
- colName, ok := cursor.Node().(*sqlparser.ColName)
- if !ok || colName.Qualifier.NonEmpty() || !colName.Name.EqualString(sq.ArgName) {
- // we only want to rewrite the column name to an argument if it's the right column
- return true
- }
-
- cursor.Replace(sqlparser.NewArgument(sq.ArgName))
- return true
- }
-
- return sqlparser.Rewrite(expr, pre, nil).(sqlparser.Expr)
-}
diff --git a/go/vt/vtgate/planbuilder/operators/subquery_planning.go b/go/vt/vtgate/planbuilder/operators/subquery_planning.go
index cdc0b8b191a..5a0aed3f10d 100644
--- a/go/vt/vtgate/planbuilder/operators/subquery_planning.go
+++ b/go/vt/vtgate/planbuilder/operators/subquery_planning.go
@@ -364,36 +364,72 @@ func rewriteOriginalPushedToRHS(ctx *plancontext.PlanningContext, expression sql
// need to find the argument name for it and use that instead
// we can't use the column name directly, because we're in the RHS of the join
name := outer.findOrAddColNameBindVarName(ctx, col)
- cursor.Replace(sqlparser.NewArgument(name))
+ typ, _ := ctx.TypeForExpr(col)
+ arg := sqlparser.NewTypedArgument(name, typ.Type())
+ arg.Scale = typ.Scale()
+ arg.Size = typ.Size()
+ cursor.Replace(arg)
}, nil)
return result.(sqlparser.Expr)
}
-func rewriteColNameToArgument(ctx *plancontext.PlanningContext, in sqlparser.Expr, se SubQueryExpression, subqueries ...*SubQuery) sqlparser.Expr {
+// rewriteColNameToArgument rewrites the column names in the expression to use the argument names instead
+// this is used when we push an operator from above the subquery into the outer side of the subquery
+func rewriteColNameToArgument(
+ ctx *plancontext.PlanningContext,
+ in sqlparser.Expr, // the expression to rewrite
+ se SubQueryExpression, // the subquery expression we are rewriting
+ subqueries ...*SubQuery, // the inner subquery operators
+) sqlparser.Expr {
+ // the visitor function that will rewrite the expression tree
+ // it will be invoked on unqualified column names, and replace them with arguments
+ // when the column is representing a subquery
rewriteIt := func(s string) sqlparser.SQLNode {
- for _, sq1 := range se {
- if sq1.ArgName != s && sq1.HasValuesName != s {
- continue
+ var sq1, sq2 *SubQuery
+ for _, sq := range se {
+ if sq.ArgName == s || sq.HasValuesName == s {
+ sq1 = sq
+ break
+ }
+ }
+ for _, sq := range subqueries {
+ if s == sq.ArgName {
+ sq2 = sq
+ break
}
+ }
- for _, sq2 := range subqueries {
- if s == sq2.ArgName {
- switch {
- case sq1.FilterType.NeedsListArg():
- return sqlparser.NewListArg(s)
- case sq1.FilterType == opcode.PulloutExists:
- if sq1.HasValuesName == "" {
- sq1.HasValuesName = ctx.ReservedVars.ReserveHasValuesSubQuery()
- sq2.HasValuesName = sq1.HasValuesName
- }
- return sqlparser.NewArgument(sq1.HasValuesName)
- default:
- return sqlparser.NewArgument(s)
- }
- }
+ if sq1 == nil || sq2 == nil {
+ return nil
+ }
+
+ switch {
+ case sq1.FilterType.NeedsListArg():
+ return sqlparser.NewListArg(s)
+ case sq1.FilterType == opcode.PulloutExists:
+ if sq1.HasValuesName == "" {
+ sq1.HasValuesName = ctx.ReservedVars.ReserveHasValuesSubQuery()
+ sq2.HasValuesName = sq1.HasValuesName
+ }
+ return sqlparser.NewArgument(sq1.HasValuesName)
+ default:
+ // for scalar value subqueries, the argument is typed based on the first expression in the subquery
+ // so here we make an attempt at figuring out the type of the argument
+ ae, isAe := sq2.originalSubquery.Select.GetColumns()[0].(*sqlparser.AliasedExpr)
+ if !isAe {
+ return sqlparser.NewArgument(s)
}
+
+ argType, found := ctx.TypeForExpr(ae.Expr)
+ if !found {
+ return sqlparser.NewArgument(s)
+ }
+
+ arg := sqlparser.NewTypedArgument(s, argType.Type())
+ arg.Scale = argType.Scale()
+ arg.Size = argType.Size()
+ return arg
}
- return nil
}
// replace the ColNames with Argument inside the subquery
diff --git a/go/vt/vtgate/planbuilder/plancontext/planning_context.go b/go/vt/vtgate/planbuilder/plancontext/planning_context.go
index 90a6bdac6f8..2f33539f858 100644
--- a/go/vt/vtgate/planbuilder/plancontext/planning_context.go
+++ b/go/vt/vtgate/planbuilder/plancontext/planning_context.go
@@ -17,6 +17,7 @@ limitations under the License.
package plancontext
import (
+ "vitess.io/vitess/go/sqltypes"
querypb "vitess.io/vitess/go/vt/proto/query"
"vitess.io/vitess/go/vt/sqlparser"
"vitess.io/vitess/go/vt/vterrors"
@@ -222,3 +223,12 @@ func (ctx *PlanningContext) TypeForExpr(e sqlparser.Expr) (evalengine.Type, bool
}
return t, true
}
+
+// SQLTypeForExpr returns the sql type of the given expression, with nullable set if the expression is from an outer table.
+func (ctx *PlanningContext) SQLTypeForExpr(e sqlparser.Expr) sqltypes.Type {
+ t, found := ctx.TypeForExpr(e)
+ if !found {
+ return sqltypes.Unknown
+ }
+ return t.Type()
+}
diff --git a/go/vt/vtgate/planbuilder/testdata/aggr_cases.json b/go/vt/vtgate/planbuilder/testdata/aggr_cases.json
index dac95cfa51f..6942464665c 100644
--- a/go/vt/vtgate/planbuilder/testdata/aggr_cases.json
+++ b/go/vt/vtgate/planbuilder/testdata/aggr_cases.json
@@ -824,6 +824,66 @@
]
}
},
+ {
+ "comment": "group concat with a separator needing evaluation on vtgate",
+ "query": "select group_concat(music.name SEPARATOR ', ') as `Group Name` from user join user_extra on user.id = user_extra.user_id left join music on user.id = music.id group by user.id;",
+ "plan": {
+ "QueryType": "SELECT",
+ "Original": "select group_concat(music.name SEPARATOR ', ') as `Group Name` from user join user_extra on user.id = user_extra.user_id left join music on user.id = music.id group by user.id;",
+ "Instructions": {
+ "OperatorType": "Aggregate",
+ "Variant": "Ordered",
+ "Aggregates": "group_concat(0) AS Group Name",
+ "GroupBy": "(1|2)",
+ "ResultColumns": 1,
+ "Inputs": [
+ {
+ "OperatorType": "Join",
+ "Variant": "LeftJoin",
+ "JoinColumnIndexes": "R:0,L:0,L:1",
+ "JoinVars": {
+ "user_id": 0
+ },
+ "TableName": "`user`, user_extra_music",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "Scatter",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select `user`.id, weight_string(`user`.id) from `user`, user_extra where 1 != 1",
+ "OrderBy": "(0|1) ASC",
+ "Query": "select `user`.id, weight_string(`user`.id) from `user`, user_extra where `user`.id = user_extra.user_id order by `user`.id asc",
+ "Table": "`user`, user_extra"
+ },
+ {
+ "OperatorType": "Route",
+ "Variant": "EqualUnique",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select music.`name` from music where 1 != 1",
+ "Query": "select music.`name` from music where music.id = :user_id",
+ "Table": "music",
+ "Values": [
+ ":user_id"
+ ],
+ "Vindex": "music_user_map"
+ }
+ ]
+ }
+ ]
+ },
+ "TablesUsed": [
+ "user.music",
+ "user.user",
+ "user.user_extra"
+ ]
+ }
+ },
{
"comment": "scatter aggregate group by column number",
"query": "select col from user group by 1",
@@ -3312,7 +3372,7 @@
"Sharded": true
},
"FieldQuery": "select 1 from user_extra where 1 != 1 group by .0",
- "Query": "select 1 from user_extra where user_extra.col = :user_col group by .0",
+ "Query": "select 1 from user_extra where user_extra.col = :user_col /* INT16 */ group by .0",
"Table": "user_extra"
}
]
@@ -3802,7 +3862,7 @@
"Sharded": true
},
"FieldQuery": "select count(*) from user_extra as ue where 1 != 1 group by .0",
- "Query": "select count(*) from user_extra as ue where ue.col = :u_col group by .0",
+ "Query": "select count(*) from user_extra as ue where ue.col = :u_col /* INT16 */ group by .0",
"Table": "user_extra"
}
]
@@ -3862,7 +3922,7 @@
"Sharded": true
},
"FieldQuery": "select count(ue.id) from user_extra as ue where 1 != 1 group by .0",
- "Query": "select count(ue.id) from user_extra as ue where ue.col = :u_col group by .0",
+ "Query": "select count(ue.id) from user_extra as ue where ue.col = :u_col /* INT16 */ group by .0",
"Table": "user_extra"
}
]
@@ -5093,7 +5153,7 @@
"Sharded": true
},
"FieldQuery": "select min(user_extra.foo), max(user_extra.bar), weight_string(user_extra.foo), weight_string(user_extra.bar) from user_extra where 1 != 1 group by .0, weight_string(user_extra.foo), weight_string(user_extra.bar)",
- "Query": "select min(user_extra.foo), max(user_extra.bar), weight_string(user_extra.foo), weight_string(user_extra.bar) from user_extra where user_extra.bar = :user_col group by .0, weight_string(user_extra.foo), weight_string(user_extra.bar)",
+ "Query": "select min(user_extra.foo), max(user_extra.bar), weight_string(user_extra.foo), weight_string(user_extra.bar) from user_extra where user_extra.bar = :user_col /* INT16 */ group by .0, weight_string(user_extra.foo), weight_string(user_extra.bar)",
"Table": "user_extra"
}
]
@@ -5371,7 +5431,7 @@
"Sharded": true
},
"FieldQuery": "select count(*), sum(user_extra.bar) from user_extra where 1 != 1 group by .0",
- "Query": "select count(*), sum(user_extra.bar) from user_extra where user_extra.col = :user_col group by .0",
+ "Query": "select count(*), sum(user_extra.bar) from user_extra where user_extra.col = :user_col /* INT16 */ group by .0",
"Table": "user_extra"
}
]
@@ -5721,7 +5781,7 @@
"Sharded": true
},
"FieldQuery": "select 1 from music as m where 1 != 1",
- "Query": "select 1 from music as m where m.col = :u_col",
+ "Query": "select 1 from music as m where m.col = :u_col /* INT16 */",
"Table": "music"
}
]
@@ -6054,8 +6114,8 @@
"Name": "main",
"Sharded": false
},
- "FieldQuery": "select :__sq1 + :__sq2 as `(select count(*) from ``user``) + (select count(*) from user_extra)` from dual where 1 != 1",
- "Query": "select :__sq1 + :__sq2 as `(select count(*) from ``user``) + (select count(*) from user_extra)` from dual",
+ "FieldQuery": "select :__sq1 /* INT64 */ + :__sq2 /* INT64 */ as `(select count(*) from ``user``) + (select count(*) from user_extra)` from dual where 1 != 1",
+ "Query": "select :__sq1 /* INT64 */ + :__sq2 /* INT64 */ as `(select count(*) from ``user``) + (select count(*) from user_extra)` from dual",
"Table": "dual"
}
]
@@ -6704,8 +6764,8 @@
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select max(:__sq1), weight_string(:__sq1) from `user` where 1 != 1 group by weight_string(:__sq1)",
- "Query": "select max(:__sq1), weight_string(:__sq1) from `user` where id = 2 group by weight_string(:__sq1)",
+ "FieldQuery": "select max(:__sq1 /* INT16 */), weight_string(:__sq1 /* INT16 */) from `user` where 1 != 1 group by weight_string(:__sq1 /* INT16 */)",
+ "Query": "select max(:__sq1 /* INT16 */), weight_string(:__sq1 /* INT16 */) from `user` where id = 2 group by weight_string(:__sq1 /* INT16 */)",
"Table": "`user`",
"Values": [
"2"
diff --git a/go/vt/vtgate/planbuilder/testdata/cte_cases.json b/go/vt/vtgate/planbuilder/testdata/cte_cases.json
index 09d155b19f6..4a69fd85fad 100644
--- a/go/vt/vtgate/planbuilder/testdata/cte_cases.json
+++ b/go/vt/vtgate/planbuilder/testdata/cte_cases.json
@@ -1132,7 +1132,7 @@
"Sharded": true
},
"FieldQuery": "select 1 from user_extra where 1 != 1",
- "Query": "select 1 from user_extra where user_extra.col = :user_col",
+ "Query": "select 1 from user_extra where user_extra.col = :user_col /* INT16 */",
"Table": "user_extra"
}
]
diff --git a/go/vt/vtgate/planbuilder/testdata/dml_cases.json b/go/vt/vtgate/planbuilder/testdata/dml_cases.json
index 9c2ed1920ee..b5d0fa8951f 100644
--- a/go/vt/vtgate/planbuilder/testdata/dml_cases.json
+++ b/go/vt/vtgate/planbuilder/testdata/dml_cases.json
@@ -5165,7 +5165,7 @@
"Sharded": true
},
"FieldQuery": "select 1 from music as m where 1 != 1",
- "Query": "select 1 from music as m where m.col = :u_col",
+ "Query": "select 1 from music as m where m.col = :u_col /* INT16 */",
"Table": "music"
}
]
@@ -5335,7 +5335,7 @@
"Sharded": true
},
"FieldQuery": "select 1 from music as m, user_extra as ue where 1 != 1",
- "Query": "select 1 from music as m, user_extra as ue where m.bar = 40 and m.col = :u_col and ue.foo = 20 and m.user_id = ue.user_id",
+ "Query": "select 1 from music as m, user_extra as ue where m.bar = 40 and m.col = :u_col /* INT16 */ and ue.foo = 20 and m.user_id = ue.user_id",
"Table": "music, user_extra"
}
]
@@ -5408,7 +5408,7 @@
"Sharded": true
},
"FieldQuery": "select m.id from music as m, user_extra as ue where 1 != 1",
- "Query": "select m.id from music as m, user_extra as ue where m.bar = 40 and m.col = :u_col and ue.foo = 20 and m.user_id = ue.user_id",
+ "Query": "select m.id from music as m, user_extra as ue where m.bar = 40 and m.col = :u_col /* INT16 */ and ue.foo = 20 and m.user_id = ue.user_id",
"Table": "music, user_extra"
}
]
@@ -5880,7 +5880,7 @@
"Sharded": true
},
"TargetTabletType": "PRIMARY",
- "Query": "update `user` as u set u.col = :ue_col where u.id in ::dml_vals",
+ "Query": "update `user` as u set u.col = :ue_col /* INT16 */ where u.id in ::dml_vals",
"Table": "user",
"Values": [
"::dml_vals"
@@ -6483,7 +6483,7 @@
"Sharded": true
},
"FieldQuery": "select m.id from music as m where 1 != 1",
- "Query": "select m.id from music as m where m.baz = 21 and m.bar = :u_foo and m.col = :u_col for update",
+ "Query": "select m.id from music as m where m.baz = 21 and m.bar = :u_foo and m.col = :u_col /* INT16 */ for update",
"Table": "music"
}
]
@@ -6738,7 +6738,7 @@
"Sharded": true
},
"FieldQuery": "select m.id from music as m where 1 != 1",
- "Query": "select m.id from music as m where m.col = :u_col for update",
+ "Query": "select m.id from music as m where m.col = :u_col /* INT16 */ for update",
"Table": "music"
}
]
@@ -6961,7 +6961,7 @@
"Sharded": true
},
"FieldQuery": "select m.id from music as m where 1 != 1",
- "Query": "select m.id from music as m where m.col = :u_col for update",
+ "Query": "select m.id from music as m where m.col = :u_col /* INT16 */ for update",
"Table": "music"
}
]
diff --git a/go/vt/vtgate/planbuilder/testdata/filter_cases.json b/go/vt/vtgate/planbuilder/testdata/filter_cases.json
index d36c060ed6d..b60e8812dda 100644
--- a/go/vt/vtgate/planbuilder/testdata/filter_cases.json
+++ b/go/vt/vtgate/planbuilder/testdata/filter_cases.json
@@ -1141,7 +1141,7 @@
"Sharded": true
},
"FieldQuery": "select user_extra.id from user_extra where 1 != 1",
- "Query": "select user_extra.id from user_extra where user_extra.col = :user_col",
+ "Query": "select user_extra.id from user_extra where user_extra.col = :user_col /* INT16 */",
"Table": "user_extra"
}
]
@@ -1213,7 +1213,7 @@
"Sharded": true
},
"FieldQuery": "select user_extra.id from user_extra where 1 != 1",
- "Query": "select user_extra.id from user_extra where user_extra.user_id = :user_col and user_extra.col = :user_col",
+ "Query": "select user_extra.id from user_extra where user_extra.user_id = :user_col /* INT16 */ and user_extra.col = :user_col /* INT16 */",
"Table": "user_extra",
"Values": [
":user_col"
@@ -1262,7 +1262,7 @@
"Sharded": true
},
"FieldQuery": "select user_extra.id from user_extra where 1 != 1",
- "Query": "select user_extra.id from user_extra where user_extra.col = :user_col and 1 = 1",
+ "Query": "select user_extra.id from user_extra where user_extra.col = :user_col /* INT16 */ and 1 = 1",
"Table": "user_extra"
}
]
@@ -1614,7 +1614,7 @@
"Sharded": true
},
"FieldQuery": "select u.m from `user` as u where 1 != 1",
- "Query": "select u.m from `user` as u where u.id in ::__vals and u.id in (select m2 from `user` where `user`.id = u.id and `user`.col = :user_extra_col)",
+ "Query": "select u.m from `user` as u where u.id in ::__vals and u.id in (select m2 from `user` where `user`.id = u.id and `user`.col = :user_extra_col /* INT16 */)",
"Table": "`user`",
"Values": [
"(:user_extra_col, 1)"
@@ -1758,7 +1758,7 @@
"Sharded": true
},
"FieldQuery": "select u.m from `user` as u where 1 != 1",
- "Query": "select u.m from `user` as u where u.id in ::__vals and u.id in (select m2 from `user` where `user`.id = u.id and `user`.col = :user_extra_col and `user`.id in (select m3 from user_extra where user_extra.user_id = `user`.id))",
+ "Query": "select u.m from `user` as u where u.id in ::__vals and u.id in (select m2 from `user` where `user`.id = u.id and `user`.col = :user_extra_col /* INT16 */ and `user`.id in (select m3 from user_extra where user_extra.user_id = `user`.id))",
"Table": "`user`",
"Values": [
"(:user_extra_col, 1)"
@@ -3100,7 +3100,7 @@
"Sharded": true
},
"FieldQuery": "select id from `user` where 1 != 1",
- "Query": "select id from `user` where `user`.id = :user_extra_col",
+ "Query": "select id from `user` where `user`.id = :user_extra_col /* INT16 */",
"Table": "`user`",
"Values": [
":user_extra_col"
@@ -3171,7 +3171,7 @@
"Sharded": true
},
"FieldQuery": "select 1 from user_extra where 1 != 1",
- "Query": "select 1 from user_extra where user_extra.foobar = 5 and user_extra.col = :user_col",
+ "Query": "select 1 from user_extra where user_extra.foobar = 5 and user_extra.col = :user_col /* INT16 */",
"Table": "user_extra"
}
]
@@ -3226,7 +3226,7 @@
"Sharded": true
},
"FieldQuery": "select user_extra.id from user_extra where 1 != 1",
- "Query": "select user_extra.id from user_extra where user_extra.col = :user_col",
+ "Query": "select user_extra.id from user_extra where user_extra.col = :user_col /* INT16 */",
"Table": "user_extra"
}
]
@@ -4228,7 +4228,7 @@
"Sharded": true
},
"FieldQuery": "select count(*) from `user` as b where 1 != 1 group by .0",
- "Query": "select count(*) from `user` as b where b.textcol2 = :a_textcol1 group by .0",
+ "Query": "select count(*) from `user` as b where b.textcol2 = :a_textcol1 /* VARCHAR */ group by .0",
"Table": "`user`"
}
]
diff --git a/go/vt/vtgate/planbuilder/testdata/from_cases.json b/go/vt/vtgate/planbuilder/testdata/from_cases.json
index 81381f3d7d7..6db17511a2a 100644
--- a/go/vt/vtgate/planbuilder/testdata/from_cases.json
+++ b/go/vt/vtgate/planbuilder/testdata/from_cases.json
@@ -585,7 +585,7 @@
"Sharded": false
},
"FieldQuery": "select m1.col from unsharded as m1 where 1 != 1",
- "Query": "select m1.col from unsharded as m1 where m1.col = :user_col",
+ "Query": "select m1.col from unsharded as m1 where m1.col = :user_col /* INT16 */",
"Table": "unsharded"
}
]
@@ -651,7 +651,7 @@
"Sharded": true
},
"FieldQuery": "select e.col from user_extra as e where 1 != 1",
- "Query": "select e.col from user_extra as e where e.col = :user_col",
+ "Query": "select e.col from user_extra as e where e.col = :user_col /* INT16 */",
"Table": "user_extra"
},
{
@@ -662,7 +662,7 @@
"Sharded": false
},
"FieldQuery": "select 1 from unsharded as m1 where 1 != 1",
- "Query": "select 1 from unsharded as m1 where m1.col = :e_col",
+ "Query": "select 1 from unsharded as m1 where m1.col = :e_col /* INT16 */",
"Table": "unsharded"
}
]
@@ -1221,7 +1221,7 @@
"Sharded": true
},
"FieldQuery": "select `user`.col from `user` where 1 != 1",
- "Query": "select `user`.col from `user` where `user`.id = :user_extra_col",
+ "Query": "select `user`.col from `user` where `user`.id = :user_extra_col /* INT16 */",
"Table": "`user`",
"Values": [
":user_extra_col"
@@ -1924,7 +1924,7 @@
"Sharded": true
},
"FieldQuery": "select 1 from user_extra where 1 != 1",
- "Query": "select 1 from user_extra where user_extra.col = :user_col",
+ "Query": "select 1 from user_extra where user_extra.col = :user_col /* INT16 */",
"Table": "user_extra"
}
]
@@ -3244,7 +3244,7 @@
"Sharded": true
},
"FieldQuery": "select 1 from `user` as uu where 1 != 1",
- "Query": "select 1 from `user` as uu where uu.intcol = :u_intcol",
+ "Query": "select 1 from `user` as uu where uu.intcol = :u_intcol /* INT16 */",
"Table": "`user`"
}
]
@@ -3357,7 +3357,7 @@
"Sharded": true
},
"FieldQuery": "select user_extra.col from user_extra where 1 != 1",
- "Query": "select user_extra.col from user_extra where user_extra.col = :user_col",
+ "Query": "select user_extra.col from user_extra where user_extra.col = :user_col /* INT16 */",
"Table": "user_extra"
}
]
@@ -3594,7 +3594,7 @@
"Sharded": true
},
"FieldQuery": "select user_extra.col from user_extra where 1 != 1",
- "Query": "select user_extra.col from user_extra where user_extra.col = :user_col",
+ "Query": "select user_extra.col from user_extra where user_extra.col = :user_col /* INT16 */",
"Table": "user_extra"
}
]
@@ -3654,7 +3654,7 @@
"Sharded": true
},
"FieldQuery": "select user_extra.col from user_extra where 1 != 1",
- "Query": "select user_extra.col from user_extra where user_extra.col = :user_col",
+ "Query": "select user_extra.col from user_extra where user_extra.col = :user_col /* INT16 */",
"Table": "user_extra"
}
]
@@ -3720,7 +3720,7 @@
"Sharded": true
},
"FieldQuery": "select user_extra.col from user_extra where 1 != 1",
- "Query": "select user_extra.col from user_extra where user_extra.col = :user_col",
+ "Query": "select user_extra.col from user_extra where user_extra.col = :user_col /* INT16 */",
"Table": "user_extra"
}
]
@@ -3799,7 +3799,7 @@
"Sharded": false
},
"FieldQuery": "select unsharded_authoritative.col2 from unsharded_authoritative where 1 != 1",
- "Query": "select unsharded_authoritative.col2 from unsharded_authoritative where unsharded_authoritative.col1 = :authoritative_col1",
+ "Query": "select unsharded_authoritative.col2 from unsharded_authoritative where unsharded_authoritative.col1 = :authoritative_col1 /* VARCHAR */",
"Table": "unsharded_authoritative"
}
]
@@ -3921,7 +3921,7 @@
"Sharded": true
},
"FieldQuery": "select user_extra.col from user_extra where 1 != 1",
- "Query": "select user_extra.col from user_extra where user_extra.col = :user_col",
+ "Query": "select user_extra.col from user_extra where user_extra.col = :user_col /* INT16 */",
"Table": "user_extra"
}
]
@@ -4430,7 +4430,7 @@
"Sharded": true
},
"FieldQuery": "select 1 from music as m where 1 != 1",
- "Query": "select 1 from music as m where m.user_id = 5 and m.id = 20 and m.col = :u_col",
+ "Query": "select 1 from music as m where m.user_id = 5 and m.id = 20 and m.col = :u_col /* INT16 */",
"Table": "music",
"Values": [
"20"
diff --git a/go/vt/vtgate/planbuilder/testdata/info_schema57_cases.json b/go/vt/vtgate/planbuilder/testdata/info_schema57_cases.json
index 12ddfa6e049..31246a2f40f 100644
--- a/go/vt/vtgate/planbuilder/testdata/info_schema57_cases.json
+++ b/go/vt/vtgate/planbuilder/testdata/info_schema57_cases.json
@@ -319,7 +319,7 @@
"Sharded": false
},
"FieldQuery": "select rc.delete_rule as delete_rule, rc.update_rule as update_rule from information_schema.referential_constraints as rc where 1 != 1",
- "Query": "select rc.delete_rule as delete_rule, rc.update_rule as update_rule from information_schema.referential_constraints as rc where rc.constraint_schema = :__vtschemaname /* VARCHAR */ and rc.constraint_name = :kcu_constraint_name",
+ "Query": "select rc.delete_rule as delete_rule, rc.update_rule as update_rule from information_schema.referential_constraints as rc where rc.constraint_schema = :__vtschemaname /* VARCHAR */ and rc.constraint_name = :kcu_constraint_name /* VARCHAR(64) */",
"SysTableTableSchema": "[:v2]",
"Table": "information_schema.referential_constraints"
}
@@ -723,7 +723,7 @@
"Sharded": true
},
"FieldQuery": "select 1 from `user` where 1 != 1",
- "Query": "select 1 from `user` where `user`.id = :x_COLUMN_NAME",
+ "Query": "select 1 from `user` where `user`.id = :x_COLUMN_NAME /* VARCHAR(64) */",
"Table": "`user`",
"Values": [
":x_COLUMN_NAME"
diff --git a/go/vt/vtgate/planbuilder/testdata/info_schema80_cases.json b/go/vt/vtgate/planbuilder/testdata/info_schema80_cases.json
index 3eec3685fd2..9553210174c 100644
--- a/go/vt/vtgate/planbuilder/testdata/info_schema80_cases.json
+++ b/go/vt/vtgate/planbuilder/testdata/info_schema80_cases.json
@@ -319,7 +319,7 @@
"Sharded": false
},
"FieldQuery": "select rc.delete_rule as delete_rule, rc.update_rule as update_rule from information_schema.referential_constraints as rc where 1 != 1",
- "Query": "select rc.delete_rule as delete_rule, rc.update_rule as update_rule from information_schema.referential_constraints as rc where rc.constraint_schema = :__vtschemaname /* VARCHAR */ and rc.constraint_name = :kcu_constraint_name",
+ "Query": "select rc.delete_rule as delete_rule, rc.update_rule as update_rule from information_schema.referential_constraints as rc where rc.constraint_schema = :__vtschemaname /* VARCHAR */ and rc.constraint_name = :kcu_constraint_name /* VARCHAR(64) */",
"SysTableTableSchema": "[:v2]",
"Table": "information_schema.referential_constraints"
}
@@ -445,7 +445,7 @@
"Sharded": false
},
"FieldQuery": "select 1 from information_schema.table_constraints as tc where 1 != 1",
- "Query": "select 1 from information_schema.table_constraints as tc where tc.table_schema = :__vtschemaname /* VARCHAR */ and tc.table_name = :tc_table_name /* VARCHAR */ and tc.constraint_name = :cc_constraint_name and tc.constraint_schema = :__vtschemaname /* VARCHAR */",
+ "Query": "select 1 from information_schema.table_constraints as tc where tc.table_schema = :__vtschemaname /* VARCHAR */ and tc.table_name = :tc_table_name /* VARCHAR */ and tc.constraint_name = :cc_constraint_name /* VARCHAR(64) */ and tc.constraint_schema = :__vtschemaname /* VARCHAR */",
"SysTableTableName": "[tc_table_name:'table_name']",
"SysTableTableSchema": "['table_schema', :cc_constraint_schema]",
"Table": "information_schema.table_constraints"
@@ -788,7 +788,7 @@
"Sharded": true
},
"FieldQuery": "select 1 from `user` where 1 != 1",
- "Query": "select 1 from `user` where `user`.id = :x_COLUMN_NAME",
+ "Query": "select 1 from `user` where `user`.id = :x_COLUMN_NAME /* VARCHAR(64) */",
"Table": "`user`",
"Values": [
":x_COLUMN_NAME"
diff --git a/go/vt/vtgate/planbuilder/testdata/memory_sort_cases.json b/go/vt/vtgate/planbuilder/testdata/memory_sort_cases.json
index 3281feacc76..f26b160ef69 100644
--- a/go/vt/vtgate/planbuilder/testdata/memory_sort_cases.json
+++ b/go/vt/vtgate/planbuilder/testdata/memory_sort_cases.json
@@ -149,7 +149,7 @@
},
"FieldQuery": "select a, b, count(*) as k, weight_string(a) from `user` where 1 != 1 group by a, weight_string(a)",
"OrderBy": "(0|3) ASC",
- "Query": "select a, b, count(*) as k, weight_string(a) from `user` group by a, weight_string(a) order by a asc limit :__upper_limit",
+ "Query": "select a, b, count(*) as k, weight_string(a) from `user` group by a, weight_string(a) order by a asc",
"Table": "`user`"
}
]
diff --git a/go/vt/vtgate/planbuilder/testdata/postprocess_cases.json b/go/vt/vtgate/planbuilder/testdata/postprocess_cases.json
index 454740f0498..010e22c2108 100644
--- a/go/vt/vtgate/planbuilder/testdata/postprocess_cases.json
+++ b/go/vt/vtgate/planbuilder/testdata/postprocess_cases.json
@@ -949,7 +949,7 @@
"Sharded": true
},
"FieldQuery": "select e.id from user_extra as e where 1 != 1",
- "Query": "select e.id from user_extra as e where e.col = :u_col",
+ "Query": "select e.id from user_extra as e where e.col = :u_col /* INT16 */",
"Table": "user_extra"
}
]
@@ -2060,8 +2060,8 @@
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select coalesce(:user_col, user_extra.col), weight_string(coalesce(:user_col, user_extra.col)) from user_extra where 1 != 1",
- "Query": "select coalesce(:user_col, user_extra.col), weight_string(coalesce(:user_col, user_extra.col)) from user_extra",
+ "FieldQuery": "select coalesce(:user_col /* INT16 */, user_extra.col), weight_string(coalesce(:user_col /* INT16 */, user_extra.col)) from user_extra where 1 != 1",
+ "Query": "select coalesce(:user_col /* INT16 */, user_extra.col), weight_string(coalesce(:user_col /* INT16 */, user_extra.col)) from user_extra",
"Table": "user_extra"
}
]
diff --git a/go/vt/vtgate/planbuilder/testdata/rails_cases.json b/go/vt/vtgate/planbuilder/testdata/rails_cases.json
index c8ab8b7b9d8..3887547e628 100644
--- a/go/vt/vtgate/planbuilder/testdata/rails_cases.json
+++ b/go/vt/vtgate/planbuilder/testdata/rails_cases.json
@@ -62,7 +62,7 @@
"Sharded": true
},
"FieldQuery": "select 1 from book6s_order2s where 1 != 1",
- "Query": "select 1 from book6s_order2s where book6s_order2s.order2_id = :order2s_id and book6s_order2s.book6_id = :book6s_id",
+ "Query": "select 1 from book6s_order2s where book6s_order2s.order2_id = :order2s_id /* INT64 */ and book6s_order2s.book6_id = :book6s_id /* INT64 */",
"Table": "book6s_order2s",
"Values": [
":book6s_id"
@@ -79,7 +79,7 @@
"Sharded": true
},
"FieldQuery": "select 1 from supplier5s where 1 != 1",
- "Query": "select 1 from supplier5s where supplier5s.id = :book6s_supplier5_id",
+ "Query": "select 1 from supplier5s where supplier5s.id = :book6s_supplier5_id /* INT64 */",
"Table": "supplier5s",
"Values": [
":book6s_supplier5_id"
diff --git a/go/vt/vtgate/planbuilder/testdata/select_cases.json b/go/vt/vtgate/planbuilder/testdata/select_cases.json
index 38f0cb3044f..51aae618daf 100644
--- a/go/vt/vtgate/planbuilder/testdata/select_cases.json
+++ b/go/vt/vtgate/planbuilder/testdata/select_cases.json
@@ -466,6 +466,63 @@
]
}
},
+ {
+ "comment": "json_arrayagg in single sharded query",
+ "query": "select count(1) from user where id = 'abc' group by n_id having json_arrayagg(a_id) = '[]'",
+ "plan": {
+ "QueryType": "SELECT",
+ "Original": "select count(1) from user where id = 'abc' group by n_id having json_arrayagg(a_id) = '[]'",
+ "Instructions": {
+ "OperatorType": "Route",
+ "Variant": "EqualUnique",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select count(1) from `user` where 1 != 1 group by n_id",
+ "Query": "select count(1) from `user` where id = 'abc' group by n_id having json_arrayagg(a_id) = '[]'",
+ "Table": "`user`",
+ "Values": [
+ "'abc'"
+ ],
+ "Vindex": "user_index"
+ },
+ "TablesUsed": [
+ "user.user"
+ ]
+ }
+ },
+ {
+ "comment": "json_objectagg in single sharded query",
+ "query": "select count(1) from user where id = 'abc' group by n_id having json_objectagg(a_id, b_id) = '[]'",
+ "plan": {
+ "QueryType": "SELECT",
+ "Original": "select count(1) from user where id = 'abc' group by n_id having json_objectagg(a_id, b_id) = '[]'",
+ "Instructions": {
+ "OperatorType": "Route",
+ "Variant": "EqualUnique",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select count(1) from `user` where 1 != 1 group by n_id",
+ "Query": "select count(1) from `user` where id = 'abc' group by n_id having json_objectagg(a_id, b_id) = '[]'",
+ "Table": "`user`",
+ "Values": [
+ "'abc'"
+ ],
+ "Vindex": "user_index"
+ },
+ "TablesUsed": [
+ "user.user"
+ ]
+ }
+ },
+ {
+ "comment": "unsupported json aggregation expressions in scatter query",
+ "query": "select count(1) from user where cola = 'abc' group by n_id having json_arrayagg(a_id) = '[]'",
+ "plan": "VT12001: unsupported: in scatter query: aggregation function 'json_arrayagg(a_id)'"
+ },
{
"comment": "Cannot auto-resolve for cross-shard joins",
"query": "select col from user join user_extra",
@@ -1361,8 +1418,8 @@
"Name": "main",
"Sharded": false
},
- "FieldQuery": "select a, :__sq1 as `(select col from ``user``)` from unsharded where 1 != 1",
- "Query": "select a, :__sq1 as `(select col from ``user``)` from unsharded",
+ "FieldQuery": "select a, :__sq1 /* INT16 */ as `(select col from ``user``)` from unsharded where 1 != 1",
+ "Query": "select a, :__sq1 /* INT16 */ as `(select col from ``user``)` from unsharded",
"Table": "unsharded"
}
]
@@ -1406,8 +1463,8 @@
"Name": "main",
"Sharded": false
},
- "FieldQuery": "select a, 1 + :__sq1 as `1 + (select col from ``user``)` from unsharded where 1 != 1",
- "Query": "select a, 1 + :__sq1 as `1 + (select col from ``user``)` from unsharded",
+ "FieldQuery": "select a, 1 + :__sq1 /* INT16 */ as `1 + (select col from ``user``)` from unsharded where 1 != 1",
+ "Query": "select a, 1 + :__sq1 /* INT16 */ as `1 + (select col from ``user``)` from unsharded",
"Table": "unsharded"
}
]
@@ -2176,7 +2233,7 @@
"Sharded": true
},
"FieldQuery": "select `user`.col from `user` where 1 != 1",
- "Query": "select `user`.col from `user` where `user`.col = :t_title and `user`.id <= 4",
+ "Query": "select `user`.col from `user` where `user`.col = :t_title /* VARCHAR */ and `user`.id <= 4",
"Table": "`user`"
}
]
@@ -2453,8 +2510,8 @@
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select t.a from (select :__sq1 as a from `user` where 1 != 1) as t where 1 != 1",
- "Query": "select t.a from (select :__sq1 as a from `user`) as t",
+ "FieldQuery": "select t.a from (select :__sq1 /* INT16 */ as a from `user` where 1 != 1) as t where 1 != 1",
+ "Query": "select t.a from (select :__sq1 /* INT16 */ as a from `user`) as t",
"Table": "`user`"
}
]
@@ -2523,8 +2580,8 @@
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select :__sq1 as a from `user` where 1 != 1",
- "Query": "select :__sq1 as a from `user`",
+ "FieldQuery": "select :__sq1 /* INT16 */ as a from `user` where 1 != 1",
+ "Query": "select :__sq1 /* INT16 */ as a from `user`",
"Table": "`user`"
}
]
@@ -2660,6 +2717,58 @@
]
}
},
+ {
+ "comment": "PullOut subquery with an aggregation that should be typed in the final output",
+ "query": "select (select sum(col) from user) from user_extra",
+ "plan": {
+ "QueryType": "SELECT",
+ "Original": "select (select sum(col) from user) from user_extra",
+ "Instructions": {
+ "OperatorType": "UncorrelatedSubquery",
+ "Variant": "PulloutValue",
+ "PulloutVars": [
+ "__sq1"
+ ],
+ "Inputs": [
+ {
+ "InputName": "SubQuery",
+ "OperatorType": "Aggregate",
+ "Variant": "Scalar",
+ "Aggregates": "sum(0) AS sum(col)",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "Scatter",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select sum(col) from `user` where 1 != 1",
+ "Query": "select sum(col) from `user`",
+ "Table": "`user`"
+ }
+ ]
+ },
+ {
+ "InputName": "Outer",
+ "OperatorType": "Route",
+ "Variant": "Scatter",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select CAST(:__sq1 AS DECIMAL(0, 0)) as `(select sum(col) from ``user``)` from user_extra where 1 != 1",
+ "Query": "select CAST(:__sq1 AS DECIMAL(0, 0)) as `(select sum(col) from ``user``)` from user_extra",
+ "Table": "user_extra"
+ }
+ ]
+ },
+ "TablesUsed": [
+ "user.user",
+ "user.user_extra"
+ ]
+ }
+ },
{
"comment": "Straight Join preserved in MySQL query",
"query": "select user.id, user_extra.user_id from user straight_join user_extra where user.id = user_extra.user_id",
@@ -2858,7 +2967,7 @@
"Sharded": true
},
"FieldQuery": "select 1 from user_extra as ue where 1 != 1",
- "Query": "select 1 from user_extra as ue where ue.col = :u1_col and ue.col = :u2_col limit 1",
+ "Query": "select 1 from user_extra as ue where ue.col = :u1_col /* INT16 */ and ue.col = :u2_col /* INT16 */ limit 1",
"Table": "user_extra"
}
]
@@ -2915,7 +3024,7 @@
"Sharded": true
},
"FieldQuery": "select 1 from user_extra as ue where 1 != 1",
- "Query": "select 1 from user_extra as ue where ue.col = :u_col and ue.col2 = :u_col limit 1",
+ "Query": "select 1 from user_extra as ue where ue.col = :u_col /* INT16 */ and ue.col2 = :u_col /* INT16 */ limit 1",
"Table": "user_extra"
}
]
@@ -3054,8 +3163,8 @@
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select :user_extra_col + `user`.col as `user_extra.col + ``user``.col` from `user` where 1 != 1",
- "Query": "select :user_extra_col + `user`.col as `user_extra.col + ``user``.col` from `user` where `user`.id = :user_extra_id",
+ "FieldQuery": "select :user_extra_col /* INT16 */ + `user`.col as `user_extra.col + ``user``.col` from `user` where 1 != 1",
+ "Query": "select :user_extra_col /* INT16 */ + `user`.col as `user_extra.col + ``user``.col` from `user` where `user`.id = :user_extra_id",
"Table": "`user`",
"Values": [
":user_extra_id"
@@ -3195,8 +3304,8 @@
"Name": "main",
"Sharded": false
},
- "FieldQuery": "select json_quote('null'), json_quote('\\\"null\\\"'), json_object(BIN(1), 2, 'abc', ASCII(4)), json_array(1, 'abc', null, true, curtime()) from dual where 1 != 1",
- "Query": "select json_quote('null'), json_quote('\\\"null\\\"'), json_object(BIN(1), 2, 'abc', ASCII(4)), json_array(1, 'abc', null, true, curtime()) from dual",
+ "FieldQuery": "select json_quote('null'), json_quote('\"null\"'), json_object(BIN(1), 2, 'abc', ASCII(4)), json_array(1, 'abc', null, true, curtime()) from dual where 1 != 1",
+ "Query": "select json_quote('null'), json_quote('\"null\"'), json_object(BIN(1), 2, 'abc', ASCII(4)), json_array(1, 'abc', null, true, curtime()) from dual",
"Table": "dual"
},
"TablesUsed": [
@@ -3296,8 +3405,8 @@
"Name": "main",
"Sharded": false
},
- "FieldQuery": "select json_schema_valid('{\\\"type\\\":\\\"string\\\",\\\"pattern\\\":\\\"(\\\"}', '\\\"abc\\\"'), json_schema_validation_report('{\\\"type\\\":\\\"string\\\",\\\"pattern\\\":\\\"(\\\"}', '\\\"abc\\\"') from dual where 1 != 1",
- "Query": "select json_schema_valid('{\\\"type\\\":\\\"string\\\",\\\"pattern\\\":\\\"(\\\"}', '\\\"abc\\\"'), json_schema_validation_report('{\\\"type\\\":\\\"string\\\",\\\"pattern\\\":\\\"(\\\"}', '\\\"abc\\\"') from dual",
+ "FieldQuery": "select json_schema_valid('{\"type\":\"string\",\"pattern\":\"(\"}', '\"abc\"'), json_schema_validation_report('{\"type\":\"string\",\"pattern\":\"(\"}', '\"abc\"') from dual where 1 != 1",
+ "Query": "select json_schema_valid('{\"type\":\"string\",\"pattern\":\"(\"}', '\"abc\"'), json_schema_validation_report('{\"type\":\"string\",\"pattern\":\"(\"}', '\"abc\"') from dual",
"Table": "dual"
},
"TablesUsed": [
@@ -3318,8 +3427,8 @@
"Name": "main",
"Sharded": false
},
- "FieldQuery": "select json_contains('{\\\"a\\\": 1, \\\"b\\\": 2, \\\"c\\\": {\\\"d\\\": 4}}', '1'), json_contains_path('{\\\"a\\\": 1, \\\"b\\\": 2, \\\"c\\\": {\\\"d\\\": 4}}', 'one', '$.a', '$.e'), json_extract('[10, 20, [30, 40]]', '$[1]'), json_unquote(json_extract('[\\\"a\\\",\\\"b\\\"]', '$[1]')), json_keys('{\\\"a\\\": 1, \\\"b\\\": {\\\"c\\\": 30}}'), json_overlaps('[1,3,5,7]', '[2,5,7]'), json_search('[\\\"abc\\\"]', 'one', 'abc'), json_value('{\\\"fname\\\": \\\"Joe\\\", \\\"lname\\\": \\\"Palmer\\\"}', '$.fname'), json_array(4, 5) member of ('[[3,4],[4,5]]') from dual where 1 != 1",
- "Query": "select json_contains('{\\\"a\\\": 1, \\\"b\\\": 2, \\\"c\\\": {\\\"d\\\": 4}}', '1'), json_contains_path('{\\\"a\\\": 1, \\\"b\\\": 2, \\\"c\\\": {\\\"d\\\": 4}}', 'one', '$.a', '$.e'), json_extract('[10, 20, [30, 40]]', '$[1]'), json_unquote(json_extract('[\\\"a\\\",\\\"b\\\"]', '$[1]')), json_keys('{\\\"a\\\": 1, \\\"b\\\": {\\\"c\\\": 30}}'), json_overlaps('[1,3,5,7]', '[2,5,7]'), json_search('[\\\"abc\\\"]', 'one', 'abc'), json_value('{\\\"fname\\\": \\\"Joe\\\", \\\"lname\\\": \\\"Palmer\\\"}', '$.fname'), json_array(4, 5) member of ('[[3,4],[4,5]]') from dual",
+ "FieldQuery": "select json_contains('{\"a\": 1, \"b\": 2, \"c\": {\"d\": 4}}', '1'), json_contains_path('{\"a\": 1, \"b\": 2, \"c\": {\"d\": 4}}', 'one', '$.a', '$.e'), json_extract('[10, 20, [30, 40]]', '$[1]'), json_unquote(json_extract('[\"a\",\"b\"]', '$[1]')), json_keys('{\"a\": 1, \"b\": {\"c\": 30}}'), json_overlaps('[1,3,5,7]', '[2,5,7]'), json_search('[\"abc\"]', 'one', 'abc'), json_value('{\"fname\": \"Joe\", \"lname\": \"Palmer\"}', '$.fname'), json_array(4, 5) member of ('[[3,4],[4,5]]') from dual where 1 != 1",
+ "Query": "select json_contains('{\"a\": 1, \"b\": 2, \"c\": {\"d\": 4}}', '1'), json_contains_path('{\"a\": 1, \"b\": 2, \"c\": {\"d\": 4}}', 'one', '$.a', '$.e'), json_extract('[10, 20, [30, 40]]', '$[1]'), json_unquote(json_extract('[\"a\",\"b\"]', '$[1]')), json_keys('{\"a\": 1, \"b\": {\"c\": 30}}'), json_overlaps('[1,3,5,7]', '[2,5,7]'), json_search('[\"abc\"]', 'one', 'abc'), json_value('{\"fname\": \"Joe\", \"lname\": \"Palmer\"}', '$.fname'), json_array(4, 5) member of ('[[3,4],[4,5]]') from dual",
"Table": "dual"
},
"TablesUsed": [
@@ -3384,8 +3493,8 @@
"Name": "main",
"Sharded": false
},
- "FieldQuery": "select json_depth('{}'), json_length('{\\\"a\\\": 1, \\\"b\\\": {\\\"c\\\": 30}}', '$.b'), json_type(json_extract('{\\\"a\\\": [10, true]}', '$.a')), json_valid('{\\\"a\\\": 1}') from dual where 1 != 1",
- "Query": "select json_depth('{}'), json_length('{\\\"a\\\": 1, \\\"b\\\": {\\\"c\\\": 30}}', '$.b'), json_type(json_extract('{\\\"a\\\": [10, true]}', '$.a')), json_valid('{\\\"a\\\": 1}') from dual",
+ "FieldQuery": "select json_depth('{}'), json_length('{\"a\": 1, \"b\": {\"c\": 30}}', '$.b'), json_type(json_extract('{\"a\": [10, true]}', '$.a')), json_valid('{\"a\": 1}') from dual where 1 != 1",
+ "Query": "select json_depth('{}'), json_length('{\"a\": 1, \"b\": {\"c\": 30}}', '$.b'), json_type(json_extract('{\"a\": [10, true]}', '$.a')), json_valid('{\"a\": 1}') from dual",
"Table": "dual"
},
"TablesUsed": [
@@ -3406,8 +3515,8 @@
"Name": "main",
"Sharded": false
},
- "FieldQuery": "select json_array_append('{\\\"a\\\": 1}', '$', 'z'), json_array_insert('[\\\"a\\\", {\\\"b\\\": [1, 2]}, [3, 4]]', '$[0]', 'x', '$[2][1]', 'y'), json_insert('{ \\\"a\\\": 1, \\\"b\\\": [2, 3]}', '$.a', 10, '$.c', cast('[true, false]' as JSON)) from dual where 1 != 1",
- "Query": "select json_array_append('{\\\"a\\\": 1}', '$', 'z'), json_array_insert('[\\\"a\\\", {\\\"b\\\": [1, 2]}, [3, 4]]', '$[0]', 'x', '$[2][1]', 'y'), json_insert('{ \\\"a\\\": 1, \\\"b\\\": [2, 3]}', '$.a', 10, '$.c', cast('[true, false]' as JSON)) from dual",
+ "FieldQuery": "select json_array_append('{\"a\": 1}', '$', 'z'), json_array_insert('[\"a\", {\"b\": [1, 2]}, [3, 4]]', '$[0]', 'x', '$[2][1]', 'y'), json_insert('{ \"a\": 1, \"b\": [2, 3]}', '$.a', 10, '$.c', cast('[true, false]' as JSON)) from dual where 1 != 1",
+ "Query": "select json_array_append('{\"a\": 1}', '$', 'z'), json_array_insert('[\"a\", {\"b\": [1, 2]}, [3, 4]]', '$[0]', 'x', '$[2][1]', 'y'), json_insert('{ \"a\": 1, \"b\": [2, 3]}', '$.a', 10, '$.c', cast('[true, false]' as JSON)) from dual",
"Table": "dual"
},
"TablesUsed": [
@@ -3428,8 +3537,8 @@
"Name": "main",
"Sharded": false
},
- "FieldQuery": "select json_merge('[1, 2]', '[true, false]'), json_merge_patch('{\\\"name\\\": \\\"x\\\"}', '{\\\"id\\\": 47}'), json_merge_preserve('[1, 2]', '{\\\"id\\\": 47}') from dual where 1 != 1",
- "Query": "select json_merge('[1, 2]', '[true, false]'), json_merge_patch('{\\\"name\\\": \\\"x\\\"}', '{\\\"id\\\": 47}'), json_merge_preserve('[1, 2]', '{\\\"id\\\": 47}') from dual",
+ "FieldQuery": "select json_merge('[1, 2]', '[true, false]'), json_merge_patch('{\"name\": \"x\"}', '{\"id\": 47}'), json_merge_preserve('[1, 2]', '{\"id\": 47}') from dual where 1 != 1",
+ "Query": "select json_merge('[1, 2]', '[true, false]'), json_merge_patch('{\"name\": \"x\"}', '{\"id\": 47}'), json_merge_preserve('[1, 2]', '{\"id\": 47}') from dual",
"Table": "dual"
},
"TablesUsed": [
@@ -3450,8 +3559,8 @@
"Name": "main",
"Sharded": false
},
- "FieldQuery": "select json_remove('[1, [2, 3], 4]', '$[1]'), json_replace('{ \\\"a\\\": 1, \\\"b\\\": [2, 3]}', '$.a', 10, '$.c', '[true, false]'), json_set('{ \\\"a\\\": 1, \\\"b\\\": [2, 3]}', '$.a', 10, '$.c', '[true, false]'), json_unquote('\\\"abc\\\"') from dual where 1 != 1",
- "Query": "select json_remove('[1, [2, 3], 4]', '$[1]'), json_replace('{ \\\"a\\\": 1, \\\"b\\\": [2, 3]}', '$.a', 10, '$.c', '[true, false]'), json_set('{ \\\"a\\\": 1, \\\"b\\\": [2, 3]}', '$.a', 10, '$.c', '[true, false]'), json_unquote('\\\"abc\\\"') from dual",
+ "FieldQuery": "select json_remove('[1, [2, 3], 4]', '$[1]'), json_replace('{ \"a\": 1, \"b\": [2, 3]}', '$.a', 10, '$.c', '[true, false]'), json_set('{ \"a\": 1, \"b\": [2, 3]}', '$.a', 10, '$.c', '[true, false]'), json_unquote('\"abc\"') from dual where 1 != 1",
+ "Query": "select json_remove('[1, [2, 3], 4]', '$[1]'), json_replace('{ \"a\": 1, \"b\": [2, 3]}', '$.a', 10, '$.c', '[true, false]'), json_set('{ \"a\": 1, \"b\": [2, 3]}', '$.a', 10, '$.c', '[true, false]'), json_unquote('\"abc\"') from dual",
"Table": "dual"
},
"TablesUsed": [
@@ -3632,7 +3741,7 @@
"Sharded": true
},
"FieldQuery": "select user_metadata.user_id from user_extra, user_metadata where 1 != 1",
- "Query": "select user_metadata.user_id from user_extra, user_metadata where user_extra.col = :user_col and user_extra.user_id = user_metadata.user_id",
+ "Query": "select user_metadata.user_id from user_extra, user_metadata where user_extra.col = :user_col /* INT16 */ and user_extra.user_id = user_metadata.user_id",
"Table": "user_extra, user_metadata"
}
]
diff --git a/go/vt/vtgate/planbuilder/testdata/unsupported_cases.json b/go/vt/vtgate/planbuilder/testdata/unsupported_cases.json
index a8fd082eb7b..38119ba936c 100644
--- a/go/vt/vtgate/planbuilder/testdata/unsupported_cases.json
+++ b/go/vt/vtgate/planbuilder/testdata/unsupported_cases.json
@@ -174,6 +174,11 @@
"query": "select id2 from user uu where id in (select id from user where id = uu.id and user.col in (select col from (select id from user_extra where user_id = 5) uu where uu.user_id = uu.id))",
"plan": "VT12001: unsupported: correlated subquery is only supported for EXISTS"
},
+ {
+ "comment": "group concat with order by requiring evaluation at vtgate",
+ "query": "select group_concat(music.name ORDER BY 1 asc SEPARATOR ', ') as `Group Name` from user join user_extra on user.id = user_extra.user_id left join music on user.id = music.id group by user.id;",
+ "plan": "VT12001: unsupported: cannot evaluate group concat with distinct or order by"
+ },
{
"comment": "outer and inner subquery route reference the same \"uu.id\" name\n# but they refer to different things. The first reference is to the outermost query,\n# and the second reference is to the innermost 'from' subquery.\n# changed to project all the columns from the derived tables.",
"query": "select id2 from user uu where id in (select id from user where id = uu.id and user.col in (select col from (select col, id, user_id from user_extra where user_id = 5) uu where uu.user_id = uu.id))",
diff --git a/go/vt/vtgate/planbuilder/testdata/vindex_func_cases.json b/go/vt/vtgate/planbuilder/testdata/vindex_func_cases.json
index de5356346b2..3ac35761051 100644
--- a/go/vt/vtgate/planbuilder/testdata/vindex_func_cases.json
+++ b/go/vt/vtgate/planbuilder/testdata/vindex_func_cases.json
@@ -265,7 +265,7 @@
"Sharded": false
},
"FieldQuery": "select unsharded.id from unsharded where 1 != 1",
- "Query": "select unsharded.id from unsharded where unsharded.id = :user_index_id",
+ "Query": "select unsharded.id from unsharded where unsharded.id = :user_index_id /* VARBINARY */",
"Table": "unsharded"
}
]
@@ -313,7 +313,7 @@
"Sharded": false
},
"FieldQuery": "select unsharded.id from unsharded where 1 != 1",
- "Query": "select unsharded.id from unsharded where unsharded.id = :user_index_id",
+ "Query": "select unsharded.id from unsharded where unsharded.id = :user_index_id /* VARBINARY */",
"Table": "unsharded"
}
]
@@ -361,7 +361,7 @@
"Sharded": false
},
"FieldQuery": "select unsharded.id from unsharded where 1 != 1",
- "Query": "select unsharded.id from unsharded where unsharded.id = :user_index_id",
+ "Query": "select unsharded.id from unsharded where unsharded.id = :user_index_id /* VARBINARY */",
"Table": "unsharded"
}
]
@@ -409,7 +409,7 @@
"Sharded": false
},
"FieldQuery": "select unsharded.id from unsharded where 1 != 1",
- "Query": "select unsharded.id from unsharded where unsharded.id = :ui_id",
+ "Query": "select unsharded.id from unsharded where unsharded.id = :ui_id /* VARBINARY */",
"Table": "unsharded"
}
]
diff --git a/go/vt/vtgate/planbuilder/testdata/wireup_cases.json b/go/vt/vtgate/planbuilder/testdata/wireup_cases.json
index 3aca1f1dc66..62a3e65a35f 100644
--- a/go/vt/vtgate/planbuilder/testdata/wireup_cases.json
+++ b/go/vt/vtgate/planbuilder/testdata/wireup_cases.json
@@ -148,7 +148,7 @@
"Sharded": true
},
"FieldQuery": "select 1 from `user` as u3 where 1 != 1",
- "Query": "select 1 from `user` as u3 where u3.col = :u1_col",
+ "Query": "select 1 from `user` as u3 where u3.col = :u1_col /* INT16 */",
"Table": "`user`"
}
]
@@ -210,7 +210,7 @@
"Sharded": true
},
"FieldQuery": "select 1 from `user` as u3 where 1 != 1",
- "Query": "select 1 from `user` as u3 where u3.col = :u2_col",
+ "Query": "select 1 from `user` as u3 where u3.col = :u2_col /* INT16 */",
"Table": "`user`"
}
]
@@ -265,7 +265,7 @@
"Sharded": true
},
"FieldQuery": "select u1.id, u1.col from `user` as u1 where 1 != 1",
- "Query": "select u1.id, u1.col from `user` as u1 where u1.col = :u3_col",
+ "Query": "select u1.id, u1.col from `user` as u1 where u1.col = :u3_col /* INT16 */",
"Table": "`user`"
},
{
@@ -276,7 +276,7 @@
"Sharded": true
},
"FieldQuery": "select 1 from `user` as u2 where 1 != 1",
- "Query": "select 1 from `user` as u2 where u2.col = :u1_col",
+ "Query": "select 1 from `user` as u2 where u2.col = :u1_col /* INT16 */",
"Table": "`user`"
}
]
@@ -348,7 +348,7 @@
"Sharded": true
},
"FieldQuery": "select u1.id, u1.col from `user` as u1 where 1 != 1",
- "Query": "select u1.id, u1.col from `user` as u1 where u1.col = :u4_col",
+ "Query": "select u1.id, u1.col from `user` as u1 where u1.col = :u4_col /* INT16 */",
"Table": "`user`"
},
{
@@ -359,7 +359,7 @@
"Sharded": true
},
"FieldQuery": "select 1 from `user` as u3 where 1 != 1",
- "Query": "select 1 from `user` as u3 where u3.id = :u1_col",
+ "Query": "select 1 from `user` as u3 where u3.id = :u1_col /* INT16 */",
"Table": "`user`",
"Values": [
":u1_col"
@@ -420,7 +420,7 @@
"Sharded": true
},
"FieldQuery": "select 1 from `user` as u2 where 1 != 1",
- "Query": "select 1 from `user` as u2 where u2.id = :u1_col",
+ "Query": "select 1 from `user` as u2 where u2.id = :u1_col /* INT16 */",
"Table": "`user`",
"Values": [
":u1_col"
@@ -437,7 +437,7 @@
"Sharded": true
},
"FieldQuery": "select 1 from `user` as u3 where 1 != 1",
- "Query": "select 1 from `user` as u3 where u3.id = :u1_col",
+ "Query": "select 1 from `user` as u3 where u3.id = :u1_col /* INT16 */",
"Table": "`user`",
"Values": [
":u1_col"
@@ -591,7 +591,7 @@
"Sharded": true
},
"FieldQuery": "select e.id from user_extra as e where 1 != 1",
- "Query": "select e.id from user_extra as e where e.id = :u_col limit 10",
+ "Query": "select e.id from user_extra as e where e.id = :u_col /* INT16 */ limit 10",
"Table": "user_extra"
}
]
@@ -658,7 +658,7 @@
"Sharded": true
},
"FieldQuery": "select :u_id + e.id as `u.id + e.id` from user_extra as e where 1 != 1",
- "Query": "select :u_id + e.id as `u.id + e.id` from user_extra as e where e.id = :u_col limit 10",
+ "Query": "select :u_id + e.id as `u.id + e.id` from user_extra as e where e.id = :u_col /* INT16 */ limit 10",
"Table": "user_extra"
}
]
@@ -737,8 +737,8 @@
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select u.id, :__sq1 as `(select col from ``user``)`, u.col from `user` as u where 1 != 1",
- "Query": "select u.id, :__sq1 as `(select col from ``user``)`, u.col from `user` as u",
+ "FieldQuery": "select u.id, :__sq1 /* INT16 */ as `(select col from ``user``)`, u.col from `user` as u where 1 != 1",
+ "Query": "select u.id, :__sq1 /* INT16 */ as `(select col from ``user``)`, u.col from `user` as u",
"Table": "`user`"
}
]
@@ -751,7 +751,7 @@
"Sharded": true
},
"FieldQuery": "select e.id from user_extra as e where 1 != 1",
- "Query": "select e.id from user_extra as e where e.id = :u_col",
+ "Query": "select e.id from user_extra as e where e.id = :u_col /* INT16 */",
"Table": "user_extra"
}
]
diff --git a/go/vt/vtgate/semantics/binder.go b/go/vt/vtgate/semantics/binder.go
index 90a36b1f0d7..78148f4bb1f 100644
--- a/go/vt/vtgate/semantics/binder.go
+++ b/go/vt/vtgate/semantics/binder.go
@@ -169,7 +169,7 @@ func (b *binder) findDependentTableSet(current *scope, target sqlparser.TableNam
continue
}
ts := b.org.tableSetFor(table.GetAliasedTableExpr())
- c := createCertain(ts, ts, evalengine.Type{})
+ c := createCertain(ts, ts, evalengine.NewUnknownType())
deps = deps.merge(c, false)
}
finalDep, err := deps.get(nil)
diff --git a/go/vt/vtgate/semantics/semantic_state.go b/go/vt/vtgate/semantics/semantic_state.go
index 1dcaaf87061..0544764b04f 100644
--- a/go/vt/vtgate/semantics/semantic_state.go
+++ b/go/vt/vtgate/semantics/semantic_state.go
@@ -671,7 +671,7 @@ func (st *SemTable) TypeForExpr(e sqlparser.Expr) (evalengine.Type, bool) {
return evalengine.NewTypeEx(sqltypes.VarBinary, collations.CollationBinaryID, wt.Nullable(), 0, 0, nil), true
}
- return evalengine.Type{}, false
+ return evalengine.NewUnknownType(), false
}
// NeedsWeightString returns true if the given expression needs weight_string to do safe comparisons
diff --git a/go/vt/vtgate/semantics/table_collector.go b/go/vt/vtgate/semantics/table_collector.go
index ae107cc070c..948edb37d47 100644
--- a/go/vt/vtgate/semantics/table_collector.go
+++ b/go/vt/vtgate/semantics/table_collector.go
@@ -19,8 +19,6 @@ package semantics
import (
"fmt"
- "vitess.io/vitess/go/mysql/collations"
- "vitess.io/vitess/go/sqltypes"
vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc"
querypb "vitess.io/vitess/go/vt/proto/query"
@@ -234,7 +232,7 @@ for2:
continue for2
}
}
- types = append(types, evalengine.NewType(sqltypes.Unknown, collations.Unknown))
+ types = append(types, evalengine.NewUnknownType())
}
return colNames, types
}
diff --git a/go/vt/vtgate/vindexes/vschema.go b/go/vt/vtgate/vindexes/vschema.go
index 924a28b309d..838476f061f 100644
--- a/go/vt/vtgate/vindexes/vschema.go
+++ b/go/vt/vtgate/vindexes/vschema.go
@@ -1378,12 +1378,10 @@ func LoadFormalKeyspace(filename string) (*vschemapb.Keyspace, error) {
// the given SQL data type.
func ChooseVindexForType(typ querypb.Type) (string, error) {
switch {
- case sqltypes.IsIntegral(typ):
+ case sqltypes.IsIntegral(typ) || sqltypes.IsBinary(typ):
return "xxhash", nil
case sqltypes.IsText(typ):
- return "unicode_loose_md5", nil
- case sqltypes.IsBinary(typ):
- return "binary_md5", nil
+ return "unicode_loose_xxhash", nil
}
return "", vterrors.Errorf(
vtrpcpb.Code_INVALID_ARGUMENT,
diff --git a/go/vt/vtgate/vindexes/vschema_test.go b/go/vt/vtgate/vindexes/vschema_test.go
index 40cba720a0c..0cb47294c91 100644
--- a/go/vt/vtgate/vindexes/vschema_test.go
+++ b/go/vt/vtgate/vindexes/vschema_test.go
@@ -960,22 +960,22 @@ func TestChooseVindexForType(t *testing.T) {
out: "",
}, {
in: sqltypes.Text,
- out: "unicode_loose_md5",
+ out: "unicode_loose_xxhash",
}, {
in: sqltypes.Blob,
- out: "binary_md5",
+ out: "xxhash",
}, {
in: sqltypes.VarChar,
- out: "unicode_loose_md5",
+ out: "unicode_loose_xxhash",
}, {
in: sqltypes.VarBinary,
- out: "binary_md5",
+ out: "xxhash",
}, {
in: sqltypes.Char,
- out: "unicode_loose_md5",
+ out: "unicode_loose_xxhash",
}, {
in: sqltypes.Binary,
- out: "binary_md5",
+ out: "xxhash",
}, {
in: sqltypes.Bit,
out: "",
diff --git a/go/vt/vttablet/endtoend/reserve_test.go b/go/vt/vttablet/endtoend/reserve_test.go
index d3fb685dd49..0712233c559 100644
--- a/go/vt/vttablet/endtoend/reserve_test.go
+++ b/go/vt/vttablet/endtoend/reserve_test.go
@@ -17,1178 +17,13 @@ limitations under the License.
package endtoend
import (
- "fmt"
- "sync"
"testing"
"github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
-
"vitess.io/vitess/go/vt/vttablet/endtoend/framework"
)
-func TestMultipleReserveHaveDifferentConnection(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client1 := framework.NewClient()
- client2 := framework.NewClient()
-
- query := "select connection_id()"
-
- qrc1_1, err := client1.ReserveExecute(query, nil, nil)
- require.NoError(t, err)
- defer client1.Release()
- qrc2_1, err := client2.ReserveExecute(query, nil, nil)
- require.NoError(t, err)
- defer client2.Release()
- require.NotEqual(t, qrc1_1.Rows, qrc2_1.Rows)
-
- qrc1_2, err := client1.Execute(query, nil)
- require.NoError(t, err)
- qrc2_2, err := client2.Execute(query, nil)
- require.NoError(t, err)
- require.Equal(t, qrc1_1.Rows, qrc1_2.Rows)
- require.Equal(t, qrc2_1.Rows, qrc2_2.Rows)
-}
-
-func TestReserveBeginRelease(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- query := "select connection_id()"
-
- qr1, err := client.ReserveExecute(query, nil, nil)
- require.NoError(t, err)
- defer client.Release()
-
- qr2, err := client.BeginExecute(query, nil, nil)
- require.NoError(t, err)
- assert.Equal(t, qr1.Rows, qr2.Rows)
- assert.Equal(t, client.ReservedID(), client.TransactionID())
-
- require.NoError(t, client.Release())
-}
-
-func TestBeginReserveRelease(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- query := "select connection_id()"
-
- qr1, err := client.BeginExecute(query, nil, nil)
- require.NoError(t, err)
- defer client.Release()
-
- qr2, err := client.ReserveExecute(query, nil, nil)
- require.NoError(t, err)
- assert.Equal(t, qr1.Rows, qr2.Rows)
- assert.Equal(t, client.ReservedID(), client.TransactionID())
-
- require.NoError(t, client.Release())
-}
-
-func TestReserveBeginExecuteRelease(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- insQuery := "insert into vitess_test (intval, floatval, charval, binval) values (4, null, null, null)"
- selQuery := "select intval from vitess_test where intval = 4"
- _, err := client.ReserveBeginExecute(insQuery, nil, nil, nil)
- require.NoError(t, err)
-
- qr, err := client.Execute(selQuery, nil)
- require.NoError(t, err)
- assert.Equal(t, `[[INT32(4)]]`, fmt.Sprintf("%v", qr.Rows))
-
- err = client.Release()
- require.NoError(t, err)
-
- qr, err = client.Execute(selQuery, nil)
- require.NoError(t, err)
- assert.Equal(t, `[]`, fmt.Sprintf("%v", qr.Rows))
-}
-
-func TestMultipleReserveBeginHaveDifferentConnection(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client1 := framework.NewClient()
- client2 := framework.NewClient()
-
- query := "select connection_id()"
-
- qrc1_1, err := client1.ReserveBeginExecute(query, nil, nil, nil)
- require.NoError(t, err)
- defer client1.Release()
- qrc2_1, err := client2.ReserveBeginExecute(query, nil, nil, nil)
- require.NoError(t, err)
- defer client2.Release()
- require.NotEqual(t, qrc1_1.Rows, qrc2_1.Rows)
-
- qrc1_2, err := client1.Execute(query, nil)
- require.NoError(t, err)
- qrc2_2, err := client2.Execute(query, nil)
- require.NoError(t, err)
- require.Equal(t, qrc1_1.Rows, qrc1_2.Rows)
- require.Equal(t, qrc2_1.Rows, qrc2_2.Rows)
-}
-
-func TestCommitOnReserveBeginConn(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- query := "select connection_id()"
-
- qr1, err := client.ReserveBeginExecute(query, nil, nil, nil)
- require.NoError(t, err)
- defer client.Release()
-
- oldRID := client.ReservedID()
- err = client.Commit()
- require.NoError(t, err)
- assert.NotEqual(t, client.ReservedID(), oldRID, "reservedID must change after commit")
- assert.EqualValues(t, 0, client.TransactionID(), "transactionID should be 0 after commit")
-
- qr2, err := client.Execute(query, nil)
- require.NoError(t, err)
- assert.Equal(t, qr1.Rows, qr2.Rows)
-}
-
-func TestRollbackOnReserveBeginConn(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- query := "select connection_id()"
-
- qr1, err := client.ReserveBeginExecute(query, nil, nil, nil)
- require.NoError(t, err)
- defer client.Release()
-
- oldRID := client.ReservedID()
- err = client.Rollback()
- require.NoError(t, err)
- assert.NotEqual(t, client.ReservedID(), oldRID, "reservedID must change after rollback")
- assert.EqualValues(t, 0, client.TransactionID(), "transactionID should be 0 after commit")
-
- qr2, err := client.Execute(query, nil)
- require.NoError(t, err)
- assert.Equal(t, qr1.Rows, qr2.Rows)
-}
-
-func TestReserveBeginRollbackAndBeginCommitAgain(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- query := "select connection_id()"
-
- qr1, err := client.ReserveBeginExecute(query, nil, nil, nil)
- require.NoError(t, err)
- defer client.Release()
-
- oldRID := client.ReservedID()
- err = client.Rollback()
- require.NoError(t, err)
- assert.EqualValues(t, 0, client.TransactionID(), "transactionID should be 0 after rollback")
- assert.NotEqual(t, client.ReservedID(), oldRID, "reservedID must change after rollback")
-
- oldRID = client.ReservedID()
-
- qr2, err := client.BeginExecute(query, nil, nil)
- require.NoError(t, err)
-
- err = client.Commit()
- require.NoError(t, err)
- assert.EqualValues(t, 0, client.TransactionID(), "transactionID should be 0 after commit")
- assert.NotEqual(t, client.ReservedID(), oldRID, "reservedID must change after rollback")
-
- qr3, err := client.Execute(query, nil)
- require.NoError(t, err)
- assert.Equal(t, qr1.Rows, qr2.Rows)
- assert.Equal(t, qr2.Rows, qr3.Rows)
-
- require.NoError(t,
- client.Release())
-}
-
-func TestReserveBeginCommitFailToReuseTxID(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- query := "select connection_id()"
-
- _, err := client.ReserveBeginExecute(query, nil, nil, nil)
- require.NoError(t, err)
- defer client.Release()
-
- oldTxID := client.TransactionID()
-
- err = client.Commit()
- require.NoError(t, err)
-
- client.SetTransactionID(oldTxID)
-
- _, err = client.Execute(query, nil)
- require.Error(t, err)
- require.NoError(t,
- client.Release())
-}
-
-func TestReserveBeginRollbackFailToReuseTxID(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- query := "select connection_id()"
-
- _, err := client.ReserveBeginExecute(query, nil, nil, nil)
- require.NoError(t, err)
- defer client.Release()
-
- oldTxID := client.TransactionID()
-
- err = client.Rollback()
- require.NoError(t, err)
-
- client.SetTransactionID(oldTxID)
-
- _, err = client.Execute(query, nil)
- require.Error(t, err)
- require.NoError(t,
- client.Release())
-}
-
-func TestReserveBeginCommitFailToReuseOldReservedID(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- query := "select connection_id()"
-
- _, err := client.ReserveBeginExecute(query, nil, nil, nil)
- require.NoError(t, err)
-
- oldRID := client.ReservedID()
-
- err = client.Commit()
- require.NoError(t, err)
- newRID := client.ReservedID()
-
- client.SetReservedID(oldRID)
-
- _, err = client.Execute(query, nil)
- require.Error(t, err)
-
- client.SetReservedID(newRID)
- require.NoError(t,
- client.Release())
-}
-
-func TestReserveBeginRollbackFailToReuseOldReservedID(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- query := "select connection_id()"
-
- _, err := client.ReserveBeginExecute(query, nil, nil, nil)
- require.NoError(t, err)
-
- oldRID := client.ReservedID()
-
- err = client.Rollback()
- require.NoError(t, err)
- newRID := client.ReservedID()
-
- client.SetReservedID(oldRID)
- _, err = client.Execute(query, nil)
- require.Error(t, err)
-
- client.SetReservedID(newRID)
- require.NoError(t,
- client.Release())
-}
-
-func TestReserveReleaseAndFailToUseReservedIDAgain(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- query := "select 42"
-
- _, err := client.ReserveExecute(query, nil, nil)
- require.NoError(t, err)
-
- rID := client.ReservedID()
- require.NoError(t,
- client.Release())
-
- client.SetReservedID(rID)
-
- _, err = client.Execute(query, nil)
- require.Error(t, err)
-}
-
-func TestReserveAndFailToRunTwiceConcurrently(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- query := "select 42"
-
- _, err := client.ReserveExecute(query, nil, nil)
- require.NoError(t, err)
- defer client.Release()
-
- // WaitGroup will make defer call to wait for go func to complete.
- wg := &sync.WaitGroup{}
- wg.Add(1)
- go func() {
- _, err = client.Execute("select sleep(1)", nil)
- wg.Done()
- }()
- _, err2 := client.Execute("select sleep(1)", nil)
- wg.Wait()
-
- if err == nil && err2 == nil {
- assert.Fail(t, "at least one execution should fail")
- }
-}
-
-func TestBeginReserveCommitAndNewTransactionsOnSameReservedID(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- query := "select connection_id()"
-
- qrTx, err := client.BeginExecute(query, nil, nil)
- require.NoError(t, err)
-
- qrRID, err := client.ReserveExecute(query, nil, nil)
- require.NoError(t, err)
- require.Equal(t, qrTx.Rows, qrRID.Rows)
-
- err = client.Commit()
- require.NoError(t, err)
-
- qrTx, err = client.BeginExecute(query, nil, nil)
- require.NoError(t, err)
- require.Equal(t, qrTx.Rows, qrRID.Rows)
-
- err = client.Commit()
- require.NoError(t, err)
-
- qrTx, err = client.BeginExecute(query, nil, nil)
- require.NoError(t, err)
- require.Equal(t, qrTx.Rows, qrRID.Rows)
-
- err = client.Rollback()
- require.NoError(t, err)
-
- require.NoError(t,
- client.Release())
-}
-
-func TestBeginReserveRollbackAndNewTransactionsOnSameReservedID(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- query := "select connection_id()"
-
- qrTx, err := client.BeginExecute(query, nil, nil)
- require.NoError(t, err)
-
- qrRID, err := client.ReserveExecute(query, nil, nil)
- require.NoError(t, err)
- require.Equal(t, qrTx.Rows, qrRID.Rows)
-
- err = client.Rollback()
- require.NoError(t, err)
-
- qrTx, err = client.BeginExecute(query, nil, nil)
- require.NoError(t, err)
- require.Equal(t, qrTx.Rows, qrRID.Rows)
-
- err = client.Commit()
- require.NoError(t, err)
-
- qrTx, err = client.BeginExecute(query, nil, nil)
- require.NoError(t, err)
- require.Equal(t, qrTx.Rows, qrRID.Rows)
-
- err = client.Rollback()
- require.NoError(t, err)
-
- require.NoError(t,
- client.Release())
-}
-
-func TestBeginReserveReleaseAndFailToUseReservedIDAndTxIDAgain(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- query := "select 42"
-
- _, err := client.BeginExecute(query, nil, nil)
- require.NoError(t, err)
-
- _, err = client.ReserveExecute(query, nil, nil)
- require.NoError(t, err)
-
- rID := client.ReservedID()
- txID := client.TransactionID()
-
- require.NoError(t,
- client.Release())
-
- client.SetReservedID(rID)
- _, err = client.Execute(query, nil)
- require.Error(t, err)
-
- client.SetReservedID(0)
- client.SetTransactionID(txID)
- _, err = client.Execute(query, nil)
- require.Error(t, err)
-}
-
-func TestReserveBeginReleaseAndFailToUseReservedIDAndTxIDAgain(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- query := "select 42"
-
- _, err := client.ReserveExecute(query, nil, nil)
- require.NoError(t, err)
-
- _, err = client.BeginExecute(query, nil, nil)
- require.NoError(t, err)
-
- rID := client.ReservedID()
- txID := client.TransactionID()
-
- require.NoError(t,
- client.Release())
-
- client.SetReservedID(rID)
- _, err = client.Execute(query, nil)
- require.Error(t, err)
-
- client.SetReservedID(0)
- client.SetTransactionID(txID)
- _, err = client.Execute(query, nil)
- require.Error(t, err)
-}
-
-func TestReserveExecuteWithFailingQueryAndReserveConnectionRemainsOpen(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- _, err := client.ReserveExecute("select foo", nil, nil)
- require.Error(t, err)
- defer client.Release()
- require.NotEqual(t, int64(0), client.ReservedID())
-
- _, err = client.Execute("select 42", nil)
- require.NoError(t, err)
- require.NoError(t, client.Release())
-}
-
-func TestReserveAndExecuteWithFailingQueryAndReserveConnectionRemainsOpen(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- qr1, err := client.ReserveExecute("select connection_id()", nil, nil)
- require.NoError(t, err)
- defer client.Release()
-
- _, err = client.Execute("select foo", nil)
- require.Error(t, err)
-
- qr2, err := client.Execute("select connection_id()", nil)
- require.NoError(t, err)
- require.Equal(t, qr1.Rows, qr2.Rows)
- require.NoError(t, client.Release())
-}
-
-func TestReserveBeginExecuteWithFailingQueryAndReserveConnAndTxRemainsOpen(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- _, err := client.ReserveBeginExecute("select foo", nil, nil, nil)
- require.Error(t, err)
-
- // Save the connection id to check in the end that everything got executed on same connection.
- qr1, err := client.Execute("select connection_id()", nil)
- require.NoError(t, err)
-
- _, err = client.Execute("insert into vitess_test (intval, floatval, charval, binval) values (4, null, null, null)", nil)
- require.NoError(t, err)
-
- qr, err := client.Execute("select intval from vitess_test", nil)
- require.NoError(t, err)
- assert.Equal(t, "[[INT32(1)] [INT32(2)] [INT32(3)] [INT32(4)]]", fmt.Sprintf("%v", qr.Rows))
-
- err = client.Rollback()
- require.NoError(t, err)
-
- qr, err = client.Execute("select intval from vitess_test", nil)
- require.NoError(t, err)
- assert.Equal(t, "[[INT32(1)] [INT32(2)] [INT32(3)]]", fmt.Sprintf("%v", qr.Rows))
-
- qr2, err := client.Execute("select connection_id()", nil)
- require.NoError(t, err)
- require.Equal(t, qr1.Rows, qr2.Rows)
-
- require.NoError(t, client.Release())
-}
-
-func TestReserveAndBeginExecuteWithFailingQueryAndReserveConnAndTxRemainsOpen(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- // Save the connection id to check in the end that everything got executed on same connection.
- qr1, err := client.ReserveExecute("select connection_id()", nil, nil)
- require.NoError(t, err)
-
- _, err = client.BeginExecute("select foo", nil, nil)
- require.Error(t, err)
-
- _, err = client.Execute("insert into vitess_test (intval, floatval, charval, binval) values (4, null, null, null)", nil)
- require.NoError(t, err)
-
- qr, err := client.Execute("select intval from vitess_test", nil)
- require.NoError(t, err)
- assert.Equal(t, "[[INT32(1)] [INT32(2)] [INT32(3)] [INT32(4)]]", fmt.Sprintf("%v", qr.Rows))
-
- err = client.Rollback()
- require.NoError(t, err)
-
- qr, err = client.Execute("select intval from vitess_test", nil)
- require.NoError(t, err)
- assert.Equal(t, "[[INT32(1)] [INT32(2)] [INT32(3)]]", fmt.Sprintf("%v", qr.Rows))
-
- qr2, err := client.Execute("select connection_id()", nil)
- require.NoError(t, err)
- require.Equal(t, qr1.Rows, qr2.Rows)
-
- require.NoError(t, client.Release())
-}
-
-func TestReserveExecuteWithPreQueriesAndCheckConnectionState(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client1 := framework.NewClient()
- client2 := framework.NewClient()
-
- selQuery := "select str_to_date('00/00/0000', '%m/%d/%Y')"
- warnQuery := "show warnings"
- preQueries1 := []string{
- "set sql_mode = ''",
- }
- preQueries2 := []string{
- "set sql_mode = 'NO_ZERO_DATE'",
- }
-
- qr1, err := client1.ReserveExecute(selQuery, preQueries1, nil)
- require.NoError(t, err)
- defer client1.Release()
-
- qr2, err := client2.ReserveExecute(selQuery, preQueries2, nil)
- require.NoError(t, err)
- defer client2.Release()
-
- assert.NotEqual(t, qr1.Rows, qr2.Rows)
- assert.Equal(t, `[[DATE("0000-00-00")]]`, fmt.Sprintf("%v", qr1.Rows))
- assert.Equal(t, `[[NULL]]`, fmt.Sprintf("%v", qr2.Rows))
-
- qr1, err = client1.Execute(warnQuery, nil)
- require.NoError(t, err)
-
- qr2, err = client2.Execute(warnQuery, nil)
- require.NoError(t, err)
-
- assert.NotEqual(t, qr1.Rows, qr2.Rows)
- assert.Equal(t, `[]`, fmt.Sprintf("%v", qr1.Rows))
- assert.Equal(t, `[[VARCHAR("Warning") UINT32(1411) VARCHAR("Incorrect datetime value: '00/00/0000' for function str_to_date")]]`, fmt.Sprintf("%v", qr2.Rows))
-}
-
-func TestReserveExecuteWithPreQueriesAndSavepoint(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
- defer client.Release()
-
- insQuery := "insert into vitess_test (intval) values (5)"
- selQuery := "select intval from vitess_test where intval = 5"
- preQueries := []string{
- "set sql_mode = ''",
- }
-
- postBeginQueries1 := []string{
- "savepoint a",
- }
- // savepoint there after begin.
- _, err := client.ReserveBeginExecute(insQuery, preQueries, postBeginQueries1, nil)
- require.NoError(t, err)
-
- qr, err := client.Execute(selQuery, nil)
- require.NoError(t, err)
- assert.Equal(t, `[[INT32(5)]]`, fmt.Sprintf("%v", qr.Rows))
-
- _, err = client.Execute("rollback to a", nil)
- require.NoError(t, err)
-
- qr, err = client.Execute(selQuery, nil)
- require.NoError(t, err)
- assert.Equal(t, `[]`, fmt.Sprintf("%v", qr.Rows))
-
- err = client.Release()
- require.NoError(t, err)
-
- postBeginQueries2 := []string{
- "savepoint a",
- "release savepoint a",
- "savepoint b",
- }
- // no savepoint after begin
- _, err = client.ReserveBeginExecute(insQuery, preQueries, postBeginQueries2, nil)
- require.NoError(t, err)
-
- qr, err = client.Execute(selQuery, nil)
- require.NoError(t, err)
- assert.Equal(t, `[[INT32(5)]]`, fmt.Sprintf("%v", qr.Rows))
-
- // no savepoint a
- _, err = client.Execute("rollback to a", nil)
- require.Error(t, err)
-
- // no savepoint a.
- _, err = client.Execute("release a", nil)
- require.Error(t, err)
-
- // record still exists.
- qr, err = client.Execute(selQuery, nil)
- require.NoError(t, err)
- assert.Equal(t, `[[INT32(5)]]`, fmt.Sprintf("%v", qr.Rows))
-
- _, err = client.Execute("rollback to b", nil)
- require.NoError(t, err)
-
- qr, err = client.Execute(selQuery, nil)
- require.NoError(t, err)
- assert.Equal(t, `[]`, fmt.Sprintf("%v", qr.Rows))
-}
-
-func TestReserveBeginExecuteWithPreQueriesAndCheckConnectionState(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- rcClient := framework.NewClient()
- rucClient := framework.NewClient()
-
- insRcQuery := "insert into vitess_test (intval, floatval, charval, binval) values (4, null, null, null)"
- insRucQuery := "insert into vitess_test (intval, floatval, charval, binval) values (5, null, null, null)"
- selQuery := "select intval from vitess_test"
- delQuery := "delete from vitess_test where intval = 5"
- rcQuery := []string{
- "set session transaction isolation level read committed",
- }
- rucQuery := []string{
- "set session transaction isolation level read uncommitted",
- }
-
- _, err := rcClient.ReserveBeginExecute(insRcQuery, rcQuery, nil, nil)
- require.NoError(t, err)
- defer rcClient.Release()
-
- _, err = rucClient.ReserveBeginExecute(insRucQuery, rucQuery, nil, nil)
- require.NoError(t, err)
- defer rucClient.Release()
-
- qr1, err := rcClient.Execute(selQuery, nil)
- require.NoError(t, err)
-
- qr2, err := rucClient.Execute(selQuery, nil)
- require.NoError(t, err)
-
- assert.NotEqual(t, qr1.Rows, qr2.Rows)
- // As the transaction is read committed it is not able to see #5.
- assert.Equal(t, `[[INT32(1)] [INT32(2)] [INT32(3)] [INT32(4)]]`, fmt.Sprintf("%v", qr1.Rows))
- // As the transaction is read uncommitted it is able to see #4.
- assert.Equal(t, `[[INT32(1)] [INT32(2)] [INT32(3)] [INT32(4)] [INT32(5)]]`, fmt.Sprintf("%v", qr2.Rows))
-
- err = rucClient.Commit()
- require.NoError(t, err)
-
- qr1, err = rcClient.Execute(selQuery, nil)
- require.NoError(t, err)
-
- qr2, err = rucClient.Execute(selQuery, nil)
- require.NoError(t, err)
-
- // As the transaction on read uncommitted client got committed, transaction with read committed will be able to see #5.
- assert.Equal(t, qr1.Rows, qr2.Rows)
- assert.Equal(t, `[[INT32(1)] [INT32(2)] [INT32(3)] [INT32(4)] [INT32(5)]]`, fmt.Sprintf("%v", qr1.Rows))
-
- err = rcClient.Rollback()
- require.NoError(t, err)
-
- qr1, err = rcClient.Execute(selQuery, nil)
- require.NoError(t, err)
-
- qr2, err = rucClient.Execute(selQuery, nil)
- require.NoError(t, err)
-
- // As the transaction on read committed client got rolled back, table will forget #4.
- assert.Equal(t, qr1.Rows, qr2.Rows)
- assert.Equal(t, `[[INT32(1)] [INT32(2)] [INT32(3)] [INT32(5)]]`, fmt.Sprintf("%v", qr2.Rows))
-
- // This is executed on reserved connection without transaction as the transaction was committed.
- _, err = rucClient.Execute(delQuery, nil)
- require.NoError(t, err)
-}
-
-func TestReserveExecuteWithFailingPreQueriesAndCheckConnectionState(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- selQuery := "select 42"
- preQueries := []string{
- "set @@no_sys_var = 42",
- }
-
- _, err := client.ReserveExecute(selQuery, preQueries, nil)
- require.Error(t, err)
-
- err = client.Release()
- require.Error(t, err)
-}
-
-func TestReserveBeginExecuteWithFailingPreQueriesAndCheckConnectionState(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- selQuery := "select 42"
- preQueries := []string{
- "set @@no_sys_var = 42",
- }
-
- _, err := client.ReserveBeginExecute(selQuery, preQueries, nil, nil)
- require.Error(t, err)
-
- err = client.Commit()
- require.Error(t, err)
-
- err = client.Release()
- require.Error(t, err)
-}
-
-func TestBeginReserveExecuteWithFailingPreQueriesAndCheckConnectionState(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- selQuery := "select 42"
- preQueries := []string{
- "set @@no_sys_var = 42",
- }
-
- _, err := client.BeginExecute(selQuery, nil, nil)
- require.NoError(t, err)
-
- _, err = client.ReserveExecute(selQuery, preQueries, nil)
- require.Error(t, err)
-
- err = client.Commit()
- require.Error(t, err)
-
- err = client.Release()
- require.Error(t, err)
-}
-
-func TestReserveBeginExecuteWithCommitFailureAndCheckConnectionAndDBState(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- connQuery := "select connection_id()"
- insQuery := "insert into vitess_test (intval, floatval, charval, binval) values (4, null, null, null)"
- selQuery := "select intval from vitess_test where intval = 4"
-
- connQr, err := client.ReserveBeginExecute(connQuery, nil, nil, nil)
- require.NoError(t, err)
-
- _, err = client.Execute(insQuery, nil)
- require.NoError(t, err)
-
- killConnection(t, connQr.Rows[0][0].ToString())
-
- err = client.Commit()
- require.Error(t, err)
- require.Zero(t, client.ReservedID())
-
- qr, err := client.Execute(selQuery, nil)
- require.NoError(t, err)
- require.Empty(t, qr.Rows)
-
- qr, err = client.Execute(connQuery, nil)
- require.NoError(t, err)
- require.NotEqual(t, connQr.Rows, qr.Rows)
-
- require.Error(t, client.Release())
-}
-
-func TestReserveBeginExecuteWithRollbackFailureAndCheckConnectionAndDBState(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- connQuery := "select connection_id()"
- insQuery := "insert into vitess_test (intval, floatval, charval, binval) values (4, null, null, null)"
- selQuery := "select intval from vitess_test where intval = 4"
-
- connQr, err := client.ReserveBeginExecute(connQuery, nil, nil, nil)
- require.NoError(t, err)
-
- _, err = client.Execute(insQuery, nil)
- require.NoError(t, err)
-
- killConnection(t, connQr.Rows[0][0].ToString())
-
- err = client.Rollback()
- require.Error(t, err)
- require.Zero(t, client.ReservedID())
-
- qr, err := client.Execute(selQuery, nil)
- require.NoError(t, err)
- require.Empty(t, qr.Rows)
-
- qr, err = client.Execute(connQuery, nil)
- require.NoError(t, err)
- require.NotEqual(t, connQr.Rows, qr.Rows)
-
- require.Error(t, client.Release())
-}
-
-func TestReserveExecuteWithExecuteFailureAndCheckConnectionAndDBState(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- connQuery := "select connection_id()"
- insQuery := "insert into vitess_test (intval, floatval, charval, binval) values (4, null, null, null)"
- selQuery := "select intval from vitess_test where intval = 4"
-
- connQr, err := client.ReserveExecute(connQuery, nil, nil)
- require.NoError(t, err)
-
- killConnection(t, connQr.Rows[0][0].ToString())
-
- _, err = client.Execute(insQuery, nil)
- require.Error(t, err)
- // Expectation - require.Zero(t, client.ReservedID())
- // Reality
- require.NotZero(t, client.ReservedID())
-
- // Client still has transaction id and client id as non-zero.
- _, err = client.Execute(selQuery, nil)
- require.Error(t, err)
- client.SetTransactionID(0)
-
- _, err = client.Execute(selQuery, nil)
- require.Error(t, err)
- client.SetReservedID(0)
-
- qr, err := client.Execute(selQuery, nil)
- require.NoError(t, err)
- require.Empty(t, qr.Rows)
-
- qr, err = client.Execute(connQuery, nil)
- require.NoError(t, err)
- require.NotEqual(t, connQr.Rows, qr.Rows)
-
- require.Error(t, client.Release())
-}
-
-func TestReserveExecuteDDLWithoutTx(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
- defer client.Release()
-
- connQuery := "select connection_id()"
- createQuery := "create table vitess_test_ddl(id bigint primary key)"
- dropQuery := "drop table vitess_test_ddl"
- descQuery := "describe vitess_test_ddl"
-
- qr1, err := client.ReserveExecute(connQuery, nil, nil)
- require.NoError(t, err)
-
- _, err = client.Execute(createQuery, nil)
- require.NoError(t, err)
- require.Zero(t, client.TransactionID())
- defer client.Execute(dropQuery, nil)
-
- qr2, err := client.Execute(connQuery, nil)
- require.NoError(t, err)
- assert.Equal(t, qr1.Rows, qr2.Rows)
-
- qr3, err := client.Execute(descQuery, nil)
- require.NoError(t, err)
- require.NotZero(t, qr3.Rows)
-}
-
-func TestReserveExecuteDDLWithTx(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
- defer client.Release()
-
- connQuery := "select connection_id()"
- createQuery := "create table vitess_test_ddl(id bigint primary key)"
- dropQuery := "drop table vitess_test_ddl"
- descQuery := "describe vitess_test_ddl"
-
- qr1, err := client.ReserveBeginExecute(connQuery, nil, nil, nil)
- require.NoError(t, err)
-
- _, err = client.Execute(createQuery, nil)
- require.NoError(t, err)
- require.NotZero(t, client.TransactionID())
- defer client.Execute(dropQuery, nil)
-
- qr2, err := client.Execute(connQuery, nil)
- require.NoError(t, err)
- assert.Equal(t, qr1.Rows, qr2.Rows)
-
- qr3, err := client.Execute(descQuery, nil)
- require.NoError(t, err)
- require.NotZero(t, qr3.Rows)
-}
-
-func killConnection(t *testing.T, connID string) {
- client := framework.NewClient()
- _, err := client.ReserveExecute("select 1", []string{fmt.Sprintf("kill %s", connID)}, nil)
- require.NoError(t, err)
- defer client.Release()
-}
-
-func BenchmarkPreQueries(b *testing.B) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- tcases := []struct {
- name string
- settings []string
- }{{
- name: "split_1",
- settings: []string{
- "set @@sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'"},
- }, {
- name: "split_2",
- settings: []string{
- "set @@sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'",
- "set @@sql_safe_updates = false"},
- }, {
- name: "split_3",
- settings: []string{
- "set @@sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'",
- "set @@sql_safe_updates = false",
- "set @@read_buffer_size = 9191181919"},
- }, {
- name: "split_4",
- settings: []string{
- "set @@sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'",
- "set @@sql_safe_updates = false", "set @@read_buffer_size = 9191181919",
- "set @@max_heap_table_size = 10204023"},
- }, {
- name: "combined_2",
- settings: []string{"set @@sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION', @@sql_safe_updates = false"},
- }, {
- name: "combined_3",
- settings: []string{"set @@sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION', @@sql_safe_updates = false, @@read_buffer_size = 9191181919"},
- }, {
- name: "combined_4",
- settings: []string{"set @@sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION', @@sql_safe_updates = false, @@read_buffer_size = 9191181919, @@max_heap_table_size = 10204023"},
- }}
- query := "select connection_id()"
-
- for _, tcase := range tcases {
- b.Run(tcase.name, func(b *testing.B) {
- for i := 0; i < b.N; i++ {
- if _, err := client.ReserveExecute(query, tcase.settings, nil); err != nil {
- b.Error(err)
- }
- if err := client.Release(); err != nil {
- b.Error(err)
- }
- }
- })
- }
-}
-
-func TestFailInfiniteSessions(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
- qr, err := client.Execute("select @@max_connections", nil)
- require.NoError(t, err)
- maxConn, err := qr.Rows[0][0].ToInt64()
- require.NoError(t, err)
-
- // twice the number of sessions than the pool size.
- numOfSessions := int(maxConn * 2)
-
- var clients []*framework.QueryClient
-
- // read session
- var failed bool
- for i := 0; i < numOfSessions; i++ {
- client := framework.NewClient()
- _, err := client.ReserveExecute("select 1", []string{"set sql_mode = ''"}, nil)
- if err != nil {
- failed = true
- require.Contains(t, err.Error(), "immediate error from server errorCode=1040 errorMsg=Too many connections")
- break
- }
- clients = append(clients, client)
- }
- require.True(t, failed, "should have failed to create more sessions than the max mysql connection")
-
- // Release all the sessions.
- for _, client := range clients {
- require.NoError(t,
- client.Release())
- }
- clients = nil
-
- // write session
- failed = false
- for i := 0; i < numOfSessions; i++ {
- client := framework.NewClient()
- _, err := client.ReserveBeginExecute("select 1", []string{"set sql_mode = ''"}, nil, nil)
- if err != nil {
- failed = true
- require.Contains(t, err.Error(), "immediate error from server errorCode=1040 errorMsg=Too many connections")
- break
- }
- require.NoError(t,
- client.Commit())
- clients = append(clients, client)
- }
- require.True(t, failed, "should have failed to create more sessions than the max mysql connection")
-
- // Release all the sessions.
- for _, client := range clients {
- require.NoError(t,
- client.Release())
- }
-}
-
-func TestReserveQueryTimeout(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
- defer func() {
- framework.Server.Config().EnableSettingsPool = true
- }()
- client := framework.NewClient()
-
- _, err := client.ReserveExecute("select sleep(19)", []string{"set sql_mode = ''"}, nil)
- assert.NoError(t, err)
- assert.NoError(t,
- client.Release())
-
- _, err = client.ReserveStreamExecute("select sleep(19)", []string{"set sql_mode = ''"}, nil)
- assert.NoError(t, err)
- assert.NoError(t,
- client.Release())
-}
-
// TestReserveFlushTables checks that `flush table with read lock` works only with reserve api.
func TestReserveFlushTables(t *testing.T) {
client := framework.NewClient()
diff --git a/go/vt/vttablet/endtoend/settings_test.go b/go/vt/vttablet/endtoend/settings_test.go
index d0a3b4987dd..a459ad15844 100644
--- a/go/vt/vttablet/endtoend/settings_test.go
+++ b/go/vt/vttablet/endtoend/settings_test.go
@@ -355,21 +355,25 @@ func TestInfiniteSessions(t *testing.T) {
}
func TestSetQueriesMultipleWays(t *testing.T) {
- framework.Server.Config().EnableSettingsPool = false
client := framework.NewClient()
defer client.Release()
+ client2 := framework.NewClient()
+ defer client2.Release()
+
+ // This will not reserve the connection, instead use a connection from the pool and change settings.
+ // The connection will be stored with settings state in the pool
_, err := client.ReserveExecute("select 1", []string{"set sql_safe_updates = 1"}, nil)
require.NoError(t, err)
- _, err = client.Execute("set sql_safe_updates = 1", nil)
- require.NoError(t, err)
+ // As no connection is reserved, set statement will fail to execute.
+ _, err = client.Execute("set sql_safe_updates = 0", nil)
+ assert.ErrorContains(t, err, "Set not allowed without reserved connection")
- framework.Server.Config().EnableSettingsPool = true
- client2 := framework.NewClient()
- _, err = client2.ReserveExecute("select 1", []string{"set sql_safe_updates = 1"}, nil)
- require.NoError(t, err)
+ // This will reserve the connection as this is part of the query execution and not the pre-queries to Reserve API
+ _, err = client2.ReserveExecute("set sql_safe_updates = 1", nil, nil)
+ assert.NoError(t, err)
- // this should not panic.
- _, err = client.Execute("set sql_safe_updates = 1", nil)
- require.NoError(t, err)
+ // This will not error out as it gets executed on the reserved connection,
+ _, err = client2.Execute("set sql_safe_updates = 0", nil)
+ assert.NoError(t, err)
}
diff --git a/go/vt/vttablet/tabletmanager/rpc_vreplication_test.go b/go/vt/vttablet/tabletmanager/rpc_vreplication_test.go
index f1211c87c8f..7ab959c1e17 100644
--- a/go/vt/vttablet/tabletmanager/rpc_vreplication_test.go
+++ b/go/vt/vttablet/tabletmanager/rpc_vreplication_test.go
@@ -71,7 +71,7 @@ const (
getMaxValForSequence = "select max(`id`) as maxval from `vt_%s`.`%s`"
initSequenceTable = "insert into %a.%a (id, next_id, cache) values (0, %d, 1000) on duplicate key update next_id = if(next_id < %d, %d, next_id)"
deleteWorkflow = "delete from _vt.vreplication where db_name = 'vt_%s' and workflow = '%s'"
- updatePickedSourceTablet = `update _vt.vreplication set message='Picked source tablet: cell:\"%s\" uid:%d' where id=%d`
+ updatePickedSourceTablet = `update _vt.vreplication set message='Picked source tablet: cell:"%s" uid:%d' where id=%d`
getRowsCopied = "SELECT rows_copied FROM _vt.vreplication WHERE id=%d"
hasWorkflows = "select if(count(*) > 0, 1, 0) as has_workflows from _vt.vreplication where db_name = '%s'"
readAllWorkflows = "select workflow, id, source, pos, stop_pos, max_tps, max_replication_lag, cell, tablet_types, time_updated, transaction_timestamp, state, message, db_name, rows_copied, tags, time_heartbeat, workflow_type, time_throttled, component_throttled, workflow_sub_type, defer_secondary_keys, options from _vt.vreplication where db_name = '%s'%s group by workflow, id order by workflow, id"
@@ -135,7 +135,7 @@ func TestCreateVReplicationWorkflow(t *testing.T) {
Cells: tenv.cells,
AllTables: true,
},
- query: fmt.Sprintf(`%s values ('%s', 'keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"t1\" filter:\"select * from t1\"}}', '', 0, 0, '%s', '', now(), 0, 'Stopped', '%s', 1, 0, 0, '{}')`,
+ query: fmt.Sprintf(`%s values ('%s', 'keyspace:"%s" shard:"%s" filter:{rules:{match:"t1" filter:"select * from t1"}}', '', 0, 0, '%s', '', now(), 0, 'Stopped', '%s', 1, 0, 0, '{}')`,
insertVReplicationPrefix, wf, sourceKs, shard, tenv.cells[0], tenv.dbName),
},
{
@@ -170,7 +170,7 @@ func TestCreateVReplicationWorkflow(t *testing.T) {
DeferSecondaryKeys: true,
AutoStart: true,
},
- query: fmt.Sprintf(`%s values ('%s', 'keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"t1\" filter:\"select * from t1\"}} on_ddl:EXEC stop_after_copy:true source_time_zone:\"EDT\" target_time_zone:\"UTC\"', '', 0, 0, '%s', '', now(), 0, 'Stopped', '%s', 1, 0, 1, '{}')`,
+ query: fmt.Sprintf(`%s values ('%s', 'keyspace:"%s" shard:"%s" filter:{rules:{match:"t1" filter:"select * from t1"}} on_ddl:EXEC stop_after_copy:true source_time_zone:"EDT" target_time_zone:"UTC"', '', 0, 0, '%s', '', now(), 0, 'Stopped', '%s', 1, 0, 1, '{}')`,
insertVReplicationPrefix, wf, sourceKs, shard, tenv.cells[0], tenv.dbName),
},
{
@@ -210,7 +210,7 @@ func TestCreateVReplicationWorkflow(t *testing.T) {
DeferSecondaryKeys: true,
AutoStart: true,
},
- query: fmt.Sprintf(`%s values ('%s', 'keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"t1\" filter:\"select * from t1\"} rules:{match:\"wut\" filter:\"select * from wut\"} rules:{match:\"zt\" filter:\"select * from zt\"}} on_ddl:EXEC stop_after_copy:true source_time_zone:\"EDT\" target_time_zone:\"UTC\"', '', 0, 0, '%s', '', now(), 0, 'Stopped', '%s', 1, 0, 1, '{}')`,
+ query: fmt.Sprintf(`%s values ('%s', 'keyspace:"%s" shard:"%s" filter:{rules:{match:"t1" filter:"select * from t1"} rules:{match:"wut" filter:"select * from wut"} rules:{match:"zt" filter:"select * from zt"}} on_ddl:EXEC stop_after_copy:true source_time_zone:"EDT" target_time_zone:"UTC"', '', 0, 0, '%s', '', now(), 0, 'Stopped', '%s', 1, 0, 1, '{}')`,
insertVReplicationPrefix, wf, sourceKs, shard, tenv.cells[0], tenv.dbName),
},
{
@@ -250,7 +250,7 @@ func TestCreateVReplicationWorkflow(t *testing.T) {
DeferSecondaryKeys: true,
AutoStart: true,
},
- query: fmt.Sprintf(`%s values ('%s', 'keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"t1\" filter:\"select * from t1\"} rules:{match:\"wut\" filter:\"select * from wut\"} rules:{match:\"zt\" filter:\"select * from zt\"}} on_ddl:EXEC stop_after_copy:true source_time_zone:\"EDT\" target_time_zone:\"UTC\"', '', 0, 0, '%s', '', now(), 0, 'Stopped', '%s', 1, 0, 1, '{}')`,
+ query: fmt.Sprintf(`%s values ('%s', 'keyspace:"%s" shard:"%s" filter:{rules:{match:"t1" filter:"select * from t1"} rules:{match:"wut" filter:"select * from wut"} rules:{match:"zt" filter:"select * from zt"}} on_ddl:EXEC stop_after_copy:true source_time_zone:"EDT" target_time_zone:"UTC"', '', 0, 0, '%s', '', now(), 0, 'Stopped', '%s', 1, 0, 1, '{}')`,
insertVReplicationPrefix, wf, sourceKs, shard, tenv.cells[0], tenv.dbName),
},
}
@@ -394,7 +394,7 @@ func TestMoveTables(t *testing.T) {
ftc.vrdbClient.AddInvariant(getCopyStateQuery, &sqltypes.Result{})
tenv.tmc.setVReplicationExecResults(ftc.tablet, getCopyState, &sqltypes.Result{})
ftc.vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, ""), &sqltypes.Result{}, nil)
- insert := fmt.Sprintf(`%s values ('%s', 'keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"t1\" filter:\"select * from t1 where in_keyrange(id, \'%s.hash\', \'%s\')\"}}', '', 0, 0, '%s', 'primary,replica,rdonly', now(), 0, 'Stopped', '%s', %d, 0, 0, '{}')`,
+ insert := fmt.Sprintf(`%s values ('%s', 'keyspace:"%s" shard:"%s" filter:{rules:{match:"t1" filter:"select * from t1 where in_keyrange(id, \'%s.hash\', \'%s\')"}}', '', 0, 0, '%s', 'primary,replica,rdonly', now(), 0, 'Stopped', '%s', %d, 0, 0, '{}')`,
insertVReplicationPrefix, wf, sourceKs, sourceShard, targetKs, ftc.tablet.Shard, tenv.cells[0], tenv.dbName, vreplID)
ftc.vrdbClient.ExpectRequest(insert, &sqltypes.Result{InsertID: 1}, nil)
ftc.vrdbClient.ExpectRequest(getAutoIncrementStep, &sqltypes.Result{}, nil)
@@ -428,7 +428,7 @@ func TestMoveTables(t *testing.T) {
fmt.Sprintf("%d|%s|||Stopped|", vreplID, bls),
), nil)
ftc.vrdbClient.ExpectRequest(idQuery, idRes, nil)
- ftc.vrdbClient.ExpectRequest(fmt.Sprintf(updateWorkflow, binlogdatapb.VReplicationWorkflowState_Running.String(), strings.Replace(bls, `"`, `\"`, -1), "", "", vreplID), &sqltypes.Result{}, nil)
+ ftc.vrdbClient.ExpectRequest(fmt.Sprintf(updateWorkflow, binlogdatapb.VReplicationWorkflowState_Running.String(), bls, "", "", vreplID), &sqltypes.Result{}, nil)
ftc.vrdbClient.ExpectRequest(fmt.Sprintf(getVReplicationRecord, vreplID),
sqltypes.MakeTestResult(
sqltypes.MakeTestFields(
@@ -609,7 +609,7 @@ func TestUpdateVReplicationWorkflow(t *testing.T) {
Cells: []string{"zone2"},
// TabletTypes is an empty value, so the current value should be cleared
},
- query: fmt.Sprintf(`update _vt.vreplication set state = 'Running', source = 'keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"corder\" filter:\"select * from corder\"} rules:{match:\"customer\" filter:\"select * from customer\"}}', cell = '%s', tablet_types = '' where id in (%d)`,
+ query: fmt.Sprintf(`update _vt.vreplication set state = 'Running', source = 'keyspace:"%s" shard:"%s" filter:{rules:{match:"corder" filter:"select * from corder"} rules:{match:"customer" filter:"select * from customer"}}', cell = '%s', tablet_types = '' where id in (%d)`,
keyspace, shard, "zone2", vreplID),
},
{
@@ -620,7 +620,7 @@ func TestUpdateVReplicationWorkflow(t *testing.T) {
Cells: []string{"zone3"},
TabletTypes: []topodatapb.TabletType{topodatapb.TabletType(textutil.SimulatedNullInt)}, // So keep the current value of replica
},
- query: fmt.Sprintf(`update _vt.vreplication set state = 'Running', source = 'keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"corder\" filter:\"select * from corder\"} rules:{match:\"customer\" filter:\"select * from customer\"}}', cell = '%s', tablet_types = '%s' where id in (%d)`,
+ query: fmt.Sprintf(`update _vt.vreplication set state = 'Running', source = 'keyspace:"%s" shard:"%s" filter:{rules:{match:"corder" filter:"select * from corder"} rules:{match:"customer" filter:"select * from customer"}}', cell = '%s', tablet_types = '%s' where id in (%d)`,
keyspace, shard, "zone3", tabletTypes[0], vreplID),
},
{
@@ -631,7 +631,7 @@ func TestUpdateVReplicationWorkflow(t *testing.T) {
TabletSelectionPreference: tabletmanagerdatapb.TabletSelectionPreference_INORDER,
TabletTypes: []topodatapb.TabletType{topodatapb.TabletType_RDONLY, topodatapb.TabletType_REPLICA},
},
- query: fmt.Sprintf(`update _vt.vreplication set state = 'Running', source = 'keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"corder\" filter:\"select * from corder\"} rules:{match:\"customer\" filter:\"select * from customer\"}}', cell = '', tablet_types = '%s' where id in (%d)`,
+ query: fmt.Sprintf(`update _vt.vreplication set state = 'Running', source = 'keyspace:"%s" shard:"%s" filter:{rules:{match:"corder" filter:"select * from corder"} rules:{match:"customer" filter:"select * from customer"}}', cell = '', tablet_types = '%s' where id in (%d)`,
keyspace, shard, "in_order:rdonly,replica", vreplID),
},
{
@@ -642,7 +642,7 @@ func TestUpdateVReplicationWorkflow(t *testing.T) {
Cells: textutil.SimulatedNullStringSlice, // So keep the current value of zone1
TabletTypes: []topodatapb.TabletType{topodatapb.TabletType_RDONLY},
},
- query: fmt.Sprintf(`update _vt.vreplication set state = 'Running', source = 'keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"corder\" filter:\"select * from corder\"} rules:{match:\"customer\" filter:\"select * from customer\"}}', cell = '%s', tablet_types = '%s' where id in (%d)`,
+ query: fmt.Sprintf(`update _vt.vreplication set state = 'Running', source = 'keyspace:"%s" shard:"%s" filter:{rules:{match:"corder" filter:"select * from corder"} rules:{match:"customer" filter:"select * from customer"}}', cell = '%s', tablet_types = '%s' where id in (%d)`,
keyspace, shard, cells[0], "rdonly", vreplID),
},
{
@@ -652,7 +652,7 @@ func TestUpdateVReplicationWorkflow(t *testing.T) {
State: binlogdatapb.VReplicationWorkflowState(textutil.SimulatedNullInt),
OnDdl: binlogdatapb.OnDDLAction_EXEC,
},
- query: fmt.Sprintf(`update _vt.vreplication set state = 'Running', source = 'keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"corder\" filter:\"select * from corder\"} rules:{match:\"customer\" filter:\"select * from customer\"}} on_ddl:%s', cell = '', tablet_types = '' where id in (%d)`,
+ query: fmt.Sprintf(`update _vt.vreplication set state = 'Running', source = 'keyspace:"%s" shard:"%s" filter:{rules:{match:"corder" filter:"select * from corder"} rules:{match:"customer" filter:"select * from customer"}} on_ddl:%s', cell = '', tablet_types = '' where id in (%d)`,
keyspace, shard, binlogdatapb.OnDDLAction_EXEC.String(), vreplID),
},
{
@@ -664,7 +664,7 @@ func TestUpdateVReplicationWorkflow(t *testing.T) {
TabletTypes: []topodatapb.TabletType{topodatapb.TabletType_RDONLY, topodatapb.TabletType_REPLICA, topodatapb.TabletType_PRIMARY},
OnDdl: binlogdatapb.OnDDLAction_EXEC_IGNORE,
},
- query: fmt.Sprintf(`update _vt.vreplication set state = 'Running', source = 'keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"corder\" filter:\"select * from corder\"} rules:{match:\"customer\" filter:\"select * from customer\"}} on_ddl:%s', cell = '%s', tablet_types = '%s' where id in (%d)`,
+ query: fmt.Sprintf(`update _vt.vreplication set state = 'Running', source = 'keyspace:"%s" shard:"%s" filter:{rules:{match:"corder" filter:"select * from corder"} rules:{match:"customer" filter:"select * from customer"}} on_ddl:%s', cell = '%s', tablet_types = '%s' where id in (%d)`,
keyspace, shard, binlogdatapb.OnDDLAction_EXEC_IGNORE.String(), "zone1,zone2,zone3", "rdonly,replica,primary", vreplID),
},
{
@@ -676,7 +676,7 @@ func TestUpdateVReplicationWorkflow(t *testing.T) {
TabletTypes: []topodatapb.TabletType{topodatapb.TabletType(textutil.SimulatedNullInt)},
OnDdl: binlogdatapb.OnDDLAction(textutil.SimulatedNullInt),
},
- query: fmt.Sprintf(`update _vt.vreplication set state = '%s', source = 'keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"corder\" filter:\"select * from corder\"} rules:{match:\"customer\" filter:\"select * from customer\"}}', cell = '%s', tablet_types = '%s' where id in (%d)`,
+ query: fmt.Sprintf(`update _vt.vreplication set state = '%s', source = 'keyspace:"%s" shard:"%s" filter:{rules:{match:"corder" filter:"select * from corder"} rules:{match:"customer" filter:"select * from customer"}}', cell = '%s', tablet_types = '%s' where id in (%d)`,
binlogdatapb.VReplicationWorkflowState_Stopped.String(), keyspace, shard, cells[0], tabletTypes[0], vreplID),
},
{
@@ -689,7 +689,7 @@ func TestUpdateVReplicationWorkflow(t *testing.T) {
OnDdl: binlogdatapb.OnDDLAction(textutil.SimulatedNullInt),
},
isCopying: true,
- query: fmt.Sprintf(`update _vt.vreplication set state = 'Copying', source = 'keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"corder\" filter:\"select * from corder\"} rules:{match:\"customer\" filter:\"select * from customer\"}}', cell = '%s', tablet_types = '%s' where id in (%d)`,
+ query: fmt.Sprintf(`update _vt.vreplication set state = 'Copying', source = 'keyspace:"%s" shard:"%s" filter:{rules:{match:"corder" filter:"select * from corder"} rules:{match:"customer" filter:"select * from customer"}}', cell = '%s', tablet_types = '%s' where id in (%d)`,
keyspace, shard, cells[0], tabletTypes[0], vreplID),
},
}
@@ -1033,7 +1033,7 @@ func TestSourceShardSelection(t *testing.T) {
}
tt.vrdbClient.ExpectRequest(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{}, nil)
tt.vrdbClient.ExpectRequest(
- fmt.Sprintf(`%s values ('%s', 'keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"t1\" filter:\"select * from t1 where in_keyrange(id, \'%s.hash\', \'%s\')\"}}', '', 0, 0, '%s', '', now(), 0, 'Stopped', '%s', 1, 0, 0, '{}')`,
+ fmt.Sprintf(`%s values ('%s', 'keyspace:"%s" shard:"%s" filter:{rules:{match:"t1" filter:"select * from t1 where in_keyrange(id, \'%s.hash\', \'%s\')"}}', '', 0, 0, '%s', '', now(), 0, 'Stopped', '%s', 1, 0, 0, '{}')`,
insertVReplicationPrefix, wf, sourceKs, sourceShard, targetKs, tt.tablet.Shard, tenv.cells[0], tenv.dbName),
&sqltypes.Result{InsertID: uint64(i + 1)},
err,
@@ -1117,7 +1117,7 @@ func TestFailedMoveTablesCreateCleanup(t *testing.T) {
targetTablet.vrdbClient.ExpectRequest(
fmt.Sprintf("%s %s",
insertVReplicationPrefix,
- fmt.Sprintf(`values ('%s', 'keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"%s\" filter:\"select * from %s\"}} source_time_zone:\"%s\" target_time_zone:\"UTC\"', '', 0, 0, '%s', 'primary', now(), 0, 'Stopped', '%s', 1, 0, 0, '{}')`,
+ fmt.Sprintf(`values ('%s', 'keyspace:"%s" shard:"%s" filter:{rules:{match:"%s" filter:"select * from %s"}} source_time_zone:"%s" target_time_zone:"UTC"', '', 0, 0, '%s', 'primary', now(), 0, 'Stopped', '%s', 1, 0, 0, '{}')`,
wf, sourceKs, shard, table, table, invalidTimeZone, strings.Join(tenv.cells, ","), tenv.dbName),
),
&sqltypes.Result{
@@ -1793,7 +1793,7 @@ func TestMaterializerOneToOne(t *testing.T) {
// the test with an error as at this point we've tested what
// we wanted to test.
insert := insertVReplicationPrefix +
- fmt.Sprintf(` values ('%s', 'keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"t1\" filter:\"select * from t1\"} rules:{match:\"t2\" filter:\"select * from t3\"} rules:{match:\"t4\"}}', '', 0, 0, '%s', 'primary,rdonly', now(), 0, 'Stopped', '%s', 0, 0, 0, '{}')`,
+ fmt.Sprintf(` values ('%s', 'keyspace:"%s" shard:"%s" filter:{rules:{match:"t1" filter:"select * from t1"} rules:{match:"t2" filter:"select * from t3"} rules:{match:"t4"}}', '', 0, 0, '%s', 'primary,rdonly', now(), 0, 'Stopped', '%s', 0, 0, 0, '{}')`,
wf, sourceKs, shard, tenv.cells[0], tenv.dbName)
targetTablet.vrdbClient.ExpectRequest(insert, &sqltypes.Result{}, errShortCircuit)
@@ -1858,7 +1858,7 @@ func TestMaterializerManyToOne(t *testing.T) {
bls := fmt.Sprintf("keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"t1\" filter:\"select * from t1\"} rules:{match:\"t2\" filter:\"select * from t3\"}}", sourceKs, sourceShard)
insert := insertVReplicationPrefix +
- fmt.Sprintf(` values ('%s', 'keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"t1\" filter:\"select * from t1\"} rules:{match:\"t2\" filter:\"select * from t3\"}}', '', 0, 0, '%s', 'primary,rdonly', now(), 0, 'Stopped', '%s', 0, 0, 0, '{}')`,
+ fmt.Sprintf(` values ('%s', 'keyspace:"%s" shard:"%s" filter:{rules:{match:"t1" filter:"select * from t1"} rules:{match:"t2" filter:"select * from t3"}}', '', 0, 0, '%s', 'primary,rdonly', now(), 0, 'Stopped', '%s', 0, 0, 0, '{}')`,
wf, sourceKs, sourceShard, tenv.cells[0], tenv.dbName)
if vreplID == 1 {
targetTablet.vrdbClient.ExpectRequest(insert, &sqltypes.Result{InsertID: uint64(vreplID)}, nil)
@@ -1954,7 +1954,7 @@ func TestMaterializerOneToMany(t *testing.T) {
bls := fmt.Sprintf("keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"t1\" filter:\"select * from t1 where in_keyrange(c1, '%s.xxhash', '%s')\"}}",
sourceKs, sourceShard, targetKs, targetShard)
insert := insertVReplicationPrefix +
- fmt.Sprintf(` values ('%s', 'keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"t1\" filter:\"select * from t1 where in_keyrange(c1, \'%s.xxhash\', \'%s\')\"}}', '', 0, 0, '%s', 'primary,rdonly', now(), 0, 'Stopped', '%s', 0, 0, 0, '{}')`,
+ fmt.Sprintf(` values ('%s', 'keyspace:"%s" shard:"%s" filter:{rules:{match:"t1" filter:"select * from t1 where in_keyrange(c1, \'%s.xxhash\', \'%s\')"}}', '', 0, 0, '%s', 'primary,rdonly', now(), 0, 'Stopped', '%s', 0, 0, 0, '{}')`,
wf, sourceKs, sourceShard, targetKs, targetShard, tenv.cells[0], tenv.dbName)
if targetShard == "-80" {
targetTablet.vrdbClient.ExpectRequest(insert, &sqltypes.Result{InsertID: uint64(vreplID)}, nil)
@@ -2054,7 +2054,7 @@ func TestMaterializerManyToMany(t *testing.T) {
bls := fmt.Sprintf("keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"t1\" filter:\"select * from t1 where in_keyrange(c1, '%s.xxhash', '%s')\"}}",
sourceKs, sourceShard, targetKs, targetShard)
insert := insertVReplicationPrefix +
- fmt.Sprintf(` values ('%s', 'keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"t1\" filter:\"select * from t1 where in_keyrange(c1, \'%s.xxhash\', \'%s\')\"}}', '', 0, 0, '%s', 'primary,rdonly', now(), 0, 'Stopped', '%s', 0, 0, 0, '{}')`,
+ fmt.Sprintf(` values ('%s', 'keyspace:"%s" shard:"%s" filter:{rules:{match:"t1" filter:"select * from t1 where in_keyrange(c1, \'%s.xxhash\', \'%s\')"}}', '', 0, 0, '%s', 'primary,rdonly', now(), 0, 'Stopped', '%s', 0, 0, 0, '{}')`,
wf, sourceKs, sourceShard, targetKs, targetShard, tenv.cells[0], tenv.dbName)
if targetShard == "80-" && sourceShard == "40-" { // Last insert
targetTablet.vrdbClient.ExpectRequest(insert, &sqltypes.Result{InsertID: uint64(vreplID)}, errShortCircuit)
@@ -2155,7 +2155,7 @@ func TestMaterializerMulticolumnVindex(t *testing.T) {
bls := fmt.Sprintf("keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"t1\" filter:\"select * from t1 where in_keyrange(c1, c2, '%s.region', '%s')\"}}",
sourceKs, sourceShard, targetKs, targetShard)
insert := insertVReplicationPrefix +
- fmt.Sprintf(` values ('%s', 'keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"t1\" filter:\"select * from t1 where in_keyrange(c1, c2, \'%s.region\', \'%s\')\"}}', '', 0, 0, '%s', 'primary,rdonly', now(), 0, 'Stopped', '%s', 0, 0, 0, '{}')`,
+ fmt.Sprintf(` values ('%s', 'keyspace:"%s" shard:"%s" filter:{rules:{match:"t1" filter:"select * from t1 where in_keyrange(c1, c2, \'%s.region\', \'%s\')"}}', '', 0, 0, '%s', 'primary,rdonly', now(), 0, 'Stopped', '%s', 0, 0, 0, '{}')`,
wf, sourceKs, sourceShard, targetKs, targetShard, tenv.cells[0], tenv.dbName)
if targetShard == "-80" {
targetTablet.vrdbClient.ExpectRequest(insert, &sqltypes.Result{InsertID: uint64(vreplID)}, nil)
@@ -2239,7 +2239,7 @@ func TestMaterializerDeploySchema(t *testing.T) {
// the test with an error as at this point we've tested what
// we wanted to test.
insert := insertVReplicationPrefix +
- fmt.Sprintf(` values ('%s', 'keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"t1\" filter:\"select * from t1\"} rules:{match:\"t2\" filter:\"select * from t3\"}}', '', 0, 0, '%s', 'primary,rdonly', now(), 0, 'Stopped', '%s', 0, 0, 0, '{}')`,
+ fmt.Sprintf(` values ('%s', 'keyspace:"%s" shard:"%s" filter:{rules:{match:"t1" filter:"select * from t1"} rules:{match:"t2" filter:"select * from t3"}}', '', 0, 0, '%s', 'primary,rdonly', now(), 0, 'Stopped', '%s', 0, 0, 0, '{}')`,
wf, sourceKs, shard, tenv.cells[0], tenv.dbName)
targetTablet.vrdbClient.ExpectRequest(insert, &sqltypes.Result{}, errShortCircuit)
@@ -2309,7 +2309,7 @@ func TestMaterializerCopySchema(t *testing.T) {
// the test with an error as at this point we've tested what
// we wanted to test.
insert := insertVReplicationPrefix +
- fmt.Sprintf(` values ('%s', 'keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"t1\" filter:\"select * from t1\"} rules:{match:\"t2\" filter:\"select * from t3\"}}', '', 0, 0, '%s', 'primary,rdonly', now(), 0, 'Stopped', '%s', 0, 0, 0, '{}')`,
+ fmt.Sprintf(` values ('%s', 'keyspace:"%s" shard:"%s" filter:{rules:{match:"t1" filter:"select * from t1"} rules:{match:"t2" filter:"select * from t3"}}', '', 0, 0, '%s', 'primary,rdonly', now(), 0, 'Stopped', '%s', 0, 0, 0, '{}')`,
wf, sourceKs, shard, tenv.cells[0], tenv.dbName)
targetTablet.vrdbClient.ExpectRequest(insert, &sqltypes.Result{}, errShortCircuit)
@@ -2395,7 +2395,7 @@ func TestMaterializerExplicitColumns(t *testing.T) {
bls := fmt.Sprintf("keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"t1\" filter:\"select c1, c1 + c2, c2 from t1 where in_keyrange(c1, c2, '%s.region', '%s')\"}}",
sourceKs, sourceShard, targetKs, targetShard)
insert := insertVReplicationPrefix +
- fmt.Sprintf(` values ('%s', 'keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"t1\" filter:\"select c1, c1 + c2, c2 from t1 where in_keyrange(c1, c2, \'%s.region\', \'%s\')\"}}', '', 0, 0, '%s', 'primary,rdonly', now(), 0, 'Stopped', '%s', 0, 0, 0, '{}')`,
+ fmt.Sprintf(` values ('%s', 'keyspace:"%s" shard:"%s" filter:{rules:{match:"t1" filter:"select c1, c1 + c2, c2 from t1 where in_keyrange(c1, c2, \'%s.region\', \'%s\')"}}', '', 0, 0, '%s', 'primary,rdonly', now(), 0, 'Stopped', '%s', 0, 0, 0, '{}')`,
wf, sourceKs, sourceShard, targetKs, targetShard, tenv.cells[0], tenv.dbName)
if targetShard == "-80" {
targetTablet.vrdbClient.ExpectRequest(insert, &sqltypes.Result{InsertID: uint64(vreplID)}, nil)
@@ -2495,7 +2495,7 @@ func TestMaterializerRenamedColumns(t *testing.T) {
bls := fmt.Sprintf("keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"t1\" filter:\"select c3 as c1, c1 + c2, c4 as c2 from t1 where in_keyrange(c3, c4, '%s.region', '%s')\"}}",
sourceKs, sourceShard, targetKs, targetShard)
insert := insertVReplicationPrefix +
- fmt.Sprintf(` values ('%s', 'keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"t1\" filter:\"select c3 as c1, c1 + c2, c4 as c2 from t1 where in_keyrange(c3, c4, \'%s.region\', \'%s\')\"}}', '', 0, 0, '%s', 'primary,rdonly', now(), 0, 'Stopped', '%s', 0, 0, 0, '{}')`,
+ fmt.Sprintf(` values ('%s', 'keyspace:"%s" shard:"%s" filter:{rules:{match:"t1" filter:"select c3 as c1, c1 + c2, c4 as c2 from t1 where in_keyrange(c3, c4, \'%s.region\', \'%s\')"}}', '', 0, 0, '%s', 'primary,rdonly', now(), 0, 'Stopped', '%s', 0, 0, 0, '{}')`,
wf, sourceKs, sourceShard, targetKs, targetShard, tenv.cells[0], tenv.dbName)
if targetShard == "-80" {
targetTablet.vrdbClient.ExpectRequest(insert, &sqltypes.Result{InsertID: uint64(vreplID)}, nil)
@@ -2570,7 +2570,7 @@ func TestMaterializerStopAfterCopy(t *testing.T) {
// the test with an error as at this point we've tested what
// we wanted to test.
insert := insertVReplicationPrefix +
- fmt.Sprintf(` values ('%s', 'keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"t1\" filter:\"select * from t1\"} rules:{match:\"t2\" filter:\"select * from t3\"}} stop_after_copy:true', '', 0, 0, '%s', 'primary,rdonly', now(), 0, 'Stopped', '%s', 0, 0, 0, '{}')`,
+ fmt.Sprintf(` values ('%s', 'keyspace:"%s" shard:"%s" filter:{rules:{match:"t1" filter:"select * from t1"} rules:{match:"t2" filter:"select * from t3"}} stop_after_copy:true', '', 0, 0, '%s', 'primary,rdonly', now(), 0, 'Stopped', '%s', 0, 0, 0, '{}')`,
wf, sourceKs, shard, tenv.cells[0], tenv.dbName)
targetTablet.vrdbClient.ExpectRequest(insert, &sqltypes.Result{}, errShortCircuit)
diff --git a/go/vt/vttablet/tabletmanager/vdiff/action_test.go b/go/vt/vttablet/tabletmanager/vdiff/action_test.go
index 4676238cf69..6949b411f13 100644
--- a/go/vt/vttablet/tabletmanager/vdiff/action_test.go
+++ b/go/vt/vttablet/tabletmanager/vdiff/action_test.go
@@ -86,7 +86,7 @@ func TestPerformVDiffAction(t *testing.T) {
query: fmt.Sprintf("select id as id from _vt.vdiff where vdiff_uuid = %s", encodeString(uuid)),
},
{
- query: fmt.Sprintf(`insert into _vt.vdiff(keyspace, workflow, state, options, shard, db_name, vdiff_uuid) values('', '', 'pending', '{\"picker_options\":{\"source_cell\":\"cell1,zone100_test\",\"target_cell\":\"cell1,zone100_test\"}}', '0', 'vt_vttest', %s)`, encodeString(uuid)),
+ query: fmt.Sprintf(`insert into _vt.vdiff(keyspace, workflow, state, options, shard, db_name, vdiff_uuid) values('', '', 'pending', '{"picker_options":{"source_cell":"cell1,zone100_test","target_cell":"cell1,zone100_test"}}', '0', 'vt_vttest', %s)`, encodeString(uuid)),
},
},
postFunc: func() error {
@@ -120,7 +120,7 @@ func TestPerformVDiffAction(t *testing.T) {
query: fmt.Sprintf("select id as id from _vt.vdiff where vdiff_uuid = %s", encodeString(uuid)),
},
{
- query: fmt.Sprintf(`insert into _vt.vdiff(keyspace, workflow, state, options, shard, db_name, vdiff_uuid) values('', '', 'pending', '{\"picker_options\":{\"source_cell\":\"all\",\"target_cell\":\"all\"}}', '0', 'vt_vttest', %s)`, encodeString(uuid)),
+ query: fmt.Sprintf(`insert into _vt.vdiff(keyspace, workflow, state, options, shard, db_name, vdiff_uuid) values('', '', 'pending', '{"picker_options":{"source_cell":"all","target_cell":"all"}}', '0', 'vt_vttest', %s)`, encodeString(uuid)),
},
},
postFunc: func() error {
diff --git a/go/vt/vttablet/tabletmanager/vdiff/engine_test.go b/go/vt/vttablet/tabletmanager/vdiff/engine_test.go
index e6c9a84d9e2..ef3c673cc8f 100644
--- a/go/vt/vttablet/tabletmanager/vdiff/engine_test.go
+++ b/go/vt/vttablet/tabletmanager/vdiff/engine_test.go
@@ -187,8 +187,8 @@ func TestVDiff(t *testing.T) {
),
`fields:{name:"c1" type:INT64 table:"t1" org_table:"t1" database:"vt_customer" org_name:"c1" column_length:20 charset:63 flags:53251} rows:{lengths:1 values:"1"}|0|{}`,
), nil)
- vdenv.dbClient.ExpectRequest(`update _vt.vdiff_table set rows_compared = 0, report = '{\"TableName\":\"t1\",\"ProcessedRows\":0,\"MatchingRows\":0,\"MismatchedRows\":0,\"ExtraRowsSource\":0,\"ExtraRowsTarget\":0}' where vdiff_id = 1 and table_name = 't1'`, singleRowAffected, nil)
- vdenv.dbClient.ExpectRequest(`update _vt.vdiff_table set state = 'completed', rows_compared = 0, report = '{\"TableName\":\"t1\",\"ProcessedRows\":0,\"MatchingRows\":0,\"MismatchedRows\":0,\"ExtraRowsSource\":0,\"ExtraRowsTarget\":0}' where vdiff_id = 1 and table_name = 't1'`, singleRowAffected, nil)
+ vdenv.dbClient.ExpectRequest(`update _vt.vdiff_table set rows_compared = 0, report = '{"TableName":"t1","ProcessedRows":0,"MatchingRows":0,"MismatchedRows":0,"ExtraRowsSource":0,"ExtraRowsTarget":0}' where vdiff_id = 1 and table_name = 't1'`, singleRowAffected, nil)
+ vdenv.dbClient.ExpectRequest(`update _vt.vdiff_table set state = 'completed', rows_compared = 0, report = '{"TableName":"t1","ProcessedRows":0,"MatchingRows":0,"MismatchedRows":0,"ExtraRowsSource":0,"ExtraRowsTarget":0}' where vdiff_id = 1 and table_name = 't1'`, singleRowAffected, nil)
vdenv.dbClient.ExpectRequest(`insert into _vt.vdiff_log(vdiff_id, message) values (1, 'completed: table \'t1\'')`, singleRowAffected, nil)
vdenv.dbClient.ExpectRequest("update _vt.vdiff_table set state = 'completed' where vdiff_id = 1 and table_name = 't1'", singleRowAffected, nil)
vdenv.dbClient.ExpectRequest(`insert into _vt.vdiff_log(vdiff_id, message) values (1, 'completed: table \'t1\'')`, singleRowAffected, nil)
diff --git a/go/vt/vttablet/tabletmanager/vreplication/insert_generator_test.go b/go/vt/vttablet/tabletmanager/vreplication/insert_generator_test.go
index 2b07308c4c2..92100429963 100644
--- a/go/vt/vttablet/tabletmanager/vreplication/insert_generator_test.go
+++ b/go/vt/vttablet/tabletmanager/vreplication/insert_generator_test.go
@@ -29,10 +29,10 @@ func TestInsertGenerator(t *testing.T) {
ig.now = 111
ig.AddRow("b", &binlogdatapb.BinlogSource{Keyspace: "c"}, "d", "e", "f", binlogdatapb.VReplicationWorkflowType_Materialize, binlogdatapb.VReplicationWorkflowSubType_None, false)
want := `insert into _vt.vreplication(workflow, source, pos, max_tps, max_replication_lag, cell, tablet_types, time_updated, transaction_timestamp, state, db_name, workflow_type, workflow_sub_type, defer_secondary_keys, options) values ` +
- `('b', 'keyspace:\"c\"', 'd', 9223372036854775807, 9223372036854775807, 'e', 'f', 111, 0, 'Stopped', 'a', 0, 0, false, '{}')`
+ `('b', 'keyspace:"c"', 'd', 9223372036854775807, 9223372036854775807, 'e', 'f', 111, 0, 'Stopped', 'a', 0, 0, false, '{}')`
assert.Equal(t, ig.String(), want)
ig.AddRow("g", &binlogdatapb.BinlogSource{Keyspace: "h"}, "i", "j", "k", binlogdatapb.VReplicationWorkflowType_Reshard, binlogdatapb.VReplicationWorkflowSubType_Partial, true)
- want += `, ('g', 'keyspace:\"h\"', 'i', 9223372036854775807, 9223372036854775807, 'j', 'k', 111, 0, 'Stopped', 'a', 4, 1, true, '{}')`
+ want += `, ('g', 'keyspace:"h"', 'i', 9223372036854775807, 9223372036854775807, 'j', 'k', 111, 0, 'Stopped', 'a', 4, 1, true, '{}')`
assert.Equal(t, ig.String(), want)
}
diff --git a/go/vt/vttablet/tabletmanager/vreplication/journal_test.go b/go/vt/vttablet/tabletmanager/vreplication/journal_test.go
index 18dbe1e7fd8..862f22ab564 100644
--- a/go/vt/vttablet/tabletmanager/vreplication/journal_test.go
+++ b/go/vt/vttablet/tabletmanager/vreplication/journal_test.go
@@ -70,7 +70,7 @@ func TestJournalOneToOne(t *testing.T) {
expectDBClientQueries(t, qh.Expect(
"begin",
- `/insert into _vt.vreplication.*workflow, source, pos.*values.*'test', 'keyspace:\\"other_keyspace\\" shard:\\"0\\.*'MySQL56/7b04699f-f5e9-11e9-bf88-9cb6d089e1c3:1-10'`,
+ `/insert into _vt.vreplication.*workflow, source, pos.*values.*'test', 'keyspace:"other_keyspace" shard:"0.*'MySQL56/7b04699f-f5e9-11e9-bf88-9cb6d089e1c3:1-10'`,
fmt.Sprintf("delete from _vt.vreplication where id=%d", firstID),
"commit",
"/update _vt.vreplication set message='Picked source tablet.*",
@@ -133,8 +133,8 @@ func TestJournalOneToMany(t *testing.T) {
expectDBClientQueries(t, qh.Expect(
"begin",
- `/insert into _vt.vreplication.*workflow, source, pos.*values.*'test', 'keyspace:\\"other_keyspace\\" shard:\\"-80\\.*'MySQL56/7b04699f-f5e9-11e9-bf88-9cb6d089e1c3:1-5'`,
- `/insert into _vt.vreplication.*workflow, source, pos.*values.*'test', 'keyspace:\\"other_keyspace\\" shard:\\"80-\\.*'MySQL56/7b04699f-f5e9-11e9-bf88-9cb6d089e1c3:5-10'`,
+ `/insert into _vt.vreplication.*workflow, source, pos.*values.*'test', 'keyspace:"other_keyspace" shard:"-80.*'MySQL56/7b04699f-f5e9-11e9-bf88-9cb6d089e1c3:1-5'`,
+ `/insert into _vt.vreplication.*workflow, source, pos.*values.*'test', 'keyspace:"other_keyspace" shard:"80-.*'MySQL56/7b04699f-f5e9-11e9-bf88-9cb6d089e1c3:5-10'`,
fmt.Sprintf("delete from _vt.vreplication where id=%d", firstID),
"commit",
"/update _vt.vreplication set message='Picked source tablet.*",
@@ -194,7 +194,7 @@ func TestJournalTablePresent(t *testing.T) {
expectDBClientQueries(t, qh.Expect(
"begin",
- `/insert into _vt.vreplication.*workflow, source, pos.*values.*'test', 'keyspace:\\"other_keyspace\\" shard:\\"0\\.*'MySQL56/7b04699f-f5e9-11e9-bf88-9cb6d089e1c3:1-10'`,
+ `/insert into _vt.vreplication.*workflow, source, pos.*values.*'test', 'keyspace:"other_keyspace" shard:"0.*'MySQL56/7b04699f-f5e9-11e9-bf88-9cb6d089e1c3:1-10'`,
fmt.Sprintf("delete from _vt.vreplication where id=%d", firstID),
"commit",
"/update _vt.vreplication set message='Picked source tablet.*",
diff --git a/go/vt/vttablet/tabletmanager/vreplication/vcopier_test.go b/go/vt/vttablet/tabletmanager/vreplication/vcopier_test.go
index 9cbb51e76c6..fda9012c1b5 100644
--- a/go/vt/vttablet/tabletmanager/vreplication/vcopier_test.go
+++ b/go/vt/vttablet/tabletmanager/vreplication/vcopier_test.go
@@ -176,10 +176,10 @@ func testPlayerCopyCharPK(t *testing.T) {
"/insert into _vt.copy_state",
"/update _vt.vreplication set state='Copying'",
"insert into dst(idc,val) values ('a\\0',1)",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:\\"idc\\" type:BINARY charset:63 flags:20611} rows:{lengths:2 values:\\"a\\\\x00\\"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"idc" type:BINARY charset:63 flags:20611} rows:{lengths:2 values:"a\\\\x00"}'.*`,
`update dst set val=3 where idc='a\0' and ('a\0') <= ('a\0')`,
"insert into dst(idc,val) values ('c\\0',2)",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:\\"idc\\" type:BINARY charset:63 flags:20611} rows:{lengths:2 values:\\"c\\\\x00\\"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"idc" type:BINARY charset:63 flags:20611} rows:{lengths:2 values:"c\\\\x00"}'.*`,
"/delete cs, pca from _vt.copy_state as cs left join _vt.post_copy_action as pca on cs.vrepl_id=pca.vrepl_id and cs.table_name=pca.table_name.*dst",
"/update _vt.vreplication set state='Running",
), recvTimeout)
@@ -283,7 +283,7 @@ func testPlayerCopyVarcharPKCaseInsensitive(t *testing.T) {
"/update _vt.vreplication set state='Copying'",
// Copy mode.
"insert into dst(idc,val) values ('a',1)",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:\\"idc\\" type:VARCHAR charset:33 flags:20483} rows:{lengths:1 values:\\"a\\"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"idc" type:VARCHAR charset:33 flags:20483} rows:{lengths:1 values:"a"}'.*`,
// Copy-catchup mode.
`/insert into dst\(idc,val\) select 'B', 3 from dual where \( .* 'B' COLLATE .* \) <= \( .* 'a' COLLATE .* \)`,
).Then(func(expect qh.ExpectationSequencer) qh.ExpectationSequencer {
@@ -293,11 +293,11 @@ func testPlayerCopyVarcharPKCaseInsensitive(t *testing.T) {
//upd1 := expect.
upd1 := expect.Then(qh.Eventually(
"insert into dst(idc,val) values ('B',3)",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:\\"idc\\" type:VARCHAR charset:33 flags:20483} rows:{lengths:1 values:\\"B\\"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"idc" type:VARCHAR charset:33 flags:20483} rows:{lengths:1 values:"B"}'.*`,
))
upd2 := expect.Then(qh.Eventually(
"insert into dst(idc,val) values ('c',2)",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:\\"idc\\" type:VARCHAR charset:33 flags:20483} rows:{lengths:1 values:\\"c\\"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"idc" type:VARCHAR charset:33 flags:20483} rows:{lengths:1 values:"c"}'.*`,
))
upd1.Then(upd2.Eventually())
return upd2
@@ -406,12 +406,12 @@ func testPlayerCopyVarcharCompositePKCaseSensitiveCollation(t *testing.T) {
"/update _vt.vreplication set state='Copying'",
// Copy mode.
"insert into dst(id,idc,idc2,val) values (1,'a','a',1)",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:\\"id\\" type:INT32 charset:63 flags:53251} fields:{name:\\"idc\\" type:VARBINARY charset:63 flags:20611} fields:{name:\\"idc2\\" type:VARBINARY charset:63 flags:20611} rows:{lengths:1 lengths:1 lengths:1 values:\\"1aa\\"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} fields:{name:"idc" type:VARBINARY charset:63 flags:20611} fields:{name:"idc2" type:VARBINARY charset:63 flags:20611} rows:{lengths:1 lengths:1 lengths:1 values:"1aa"}'.*`,
// Copy-catchup mode.
`insert into dst(id,idc,idc2,val) select 1, 'B', 'B', 3 from dual where (1,'B','B') <= (1,'a','a')`,
// Copy mode.
"insert into dst(id,idc,idc2,val) values (1,'c','c',2)",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:\\"id\\" type:INT32 charset:63 flags:53251} fields:{name:\\"idc\\" type:VARBINARY charset:63 flags:20611} fields:{name:\\"idc2\\" type:VARBINARY charset:63 flags:20611} rows:{lengths:1 lengths:1 lengths:1 values:\\"1cc\\"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} fields:{name:"idc" type:VARBINARY charset:63 flags:20611} fields:{name:"idc2" type:VARBINARY charset:63 flags:20611} rows:{lengths:1 lengths:1 lengths:1 values:"1cc"}'.*`,
// Wrap-up.
"/delete cs, pca from _vt.copy_state as cs left join _vt.post_copy_action as pca on cs.vrepl_id=pca.vrepl_id and cs.table_name=pca.table_name.*dst",
"/update _vt.vreplication set state='Running'",
@@ -495,7 +495,7 @@ func testPlayerCopyTablesWithFK(t *testing.T) {
// Inserts may happen out-of-order. Update happen in-order.
"begin",
"insert into dst1(id,id2) values (1,1), (2,2)",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:\\"id\\" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:\\"2\\"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"2"}'.*`,
"commit",
)).Then(qh.Immediately(
"set @@session.foreign_key_checks=0",
@@ -516,7 +516,7 @@ func testPlayerCopyTablesWithFK(t *testing.T) {
// copy dst2
"begin",
"insert into dst2(id,id2) values (1,21), (2,22)",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:\\"id\\" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:\\"2\\"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"2"}'.*`,
"commit",
)).Then(qh.Immediately(
"set @@session.foreign_key_checks=0",
@@ -610,7 +610,7 @@ func testPlayerCopyTables(t *testing.T) {
expectDBClientQueries(t, qh.Expect(
// Filters should be lexicographically ordered by name.
- regexp.QuoteMeta("/insert into _vt.vreplication (workflow, source, pos, max_tps, max_replication_lag, time_updated, transaction_timestamp, state, db_name, workflow_type, workflow_sub_type, options) values ('test', 'keyspace:\\\"vttest\\\" shard:\\\"0\\\" filter:{rules:{match:\\\"ast1\\\" filter:\\\"select * from ast1\\\"} rules:{match:\\\"dst1\\\" filter:\\\"select id, val, val as val2, d, j from src1\\\"} rules:{match:\\\"/yes\\\"}}'"),
+ regexp.QuoteMeta("/insert into _vt.vreplication (workflow, source, pos, max_tps, max_replication_lag, time_updated, transaction_timestamp, state, db_name, workflow_type, workflow_sub_type, options) values ('test', 'keyspace:\"vttest\" shard:\"0\" filter:{rules:{match:\"ast1\" filter:\"select * from ast1\"} rules:{match:\"dst1\" filter:\"select id, val, val as val2, d, j from src1\"} rules:{match:\"/yes\"}}'"),
"/update _vt.vreplication set message='Picked source tablet.*",
// Create the list of tables to copy and transition to Copying state.
"begin",
@@ -629,7 +629,7 @@ func testPlayerCopyTables(t *testing.T) {
"commit",
"begin",
"insert into dst1(id,val,val2,d,j) values (1,'aaa','aaa',0,JSON_ARRAY(123456789012345678901234567890, _utf8mb4'abcd')), (2,'bbb','bbb',1,JSON_OBJECT(_utf8mb4'foo', _utf8mb4'bar')), (3,'ccc','ccc',2,CAST(_utf8mb4'null' as JSON)), (4,'ddd','ddd',3,JSON_OBJECT(_utf8mb4'name', _utf8mb4'matt', _utf8mb4'size', null)), (5,'eee','eee',4,null)",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:\\"id\\" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:\\"5\\"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"5"}'.*`,
"commit",
// copy of dst1 is done: delete from copy_state.
"/delete cs, pca from _vt.copy_state as cs left join _vt.post_copy_action as pca on cs.vrepl_id=pca.vrepl_id and cs.table_name=pca.table_name.*dst1",
@@ -765,7 +765,7 @@ func testPlayerCopyBigTable(t *testing.T) {
// The first fast-forward has no starting point. So, it just saves the current position.
"/update _vt.vreplication set state='Copying'",
"insert into dst(id,val) values (1,'aaa')",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:\\"id\\" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:\\"1\\"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"1"}'.*`,
// The next catchup executes the new row insert, but will be a no-op.
"insert into dst(id,val) select 3, 'ccc' from dual where (3) <= (1)",
// fastForward has nothing to add. Just saves position.
@@ -775,12 +775,12 @@ func testPlayerCopyBigTable(t *testing.T) {
).Then(func(expect qh.ExpectationSequencer) qh.ExpectationSequencer {
ins1 := expect.Then(qh.Eventually("insert into dst(id,val) values (2,'bbb')"))
upd1 := ins1.Then(qh.Eventually(
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:\\"id\\" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:\\"2\\"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"2"}'.*`,
))
// Third row copied without going back to catchup state.
ins3 := expect.Then(qh.Eventually("insert into dst(id,val) values (3,'ccc')"))
upd3 := ins3.Then(qh.Eventually(
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:\\"id\\" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:\\"3\\"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"3"}'.*`,
))
upd1.Then(upd3.Eventually())
return upd3
@@ -894,7 +894,7 @@ func testPlayerCopyWildcardRule(t *testing.T) {
"/update _vt.vreplication set state='Copying'",
// The first fast-forward has no starting point. So, it just saves the current position.
"insert into src(id,val) values (1,'aaa')",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:\\"id\\" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:\\"1\\"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"1"}'.*`,
// The next catchup executes the new row insert, but will be a no-op.
"insert into src(id,val) select 3, 'ccc' from dual where (3) <= (1)",
// fastForward has nothing to add. Just saves position.
@@ -904,12 +904,12 @@ func testPlayerCopyWildcardRule(t *testing.T) {
).Then(func(expect qh.ExpectationSequencer) qh.ExpectationSequencer {
ins1 := expect.Then(qh.Eventually("insert into src(id,val) values (2,'bbb')"))
upd1 := ins1.Then(qh.Eventually(
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:\\"id\\" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:\\"2\\"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"2"}'.*`,
))
// Third row copied without going back to catchup state.
ins3 := expect.Then(qh.Eventually("insert into src(id,val) values (3,'ccc')"))
upd3 := ins3.Then(qh.Eventually(
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:\\"id\\" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:\\"3\\"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"3"}'.*`,
))
upd1.Then(upd3.Eventually())
return upd3
@@ -1068,13 +1068,13 @@ func testPlayerCopyTableContinuation(t *testing.T) {
).Then(qh.Immediately(
"insert into dst1(id,val) values (7,'insert out'), (8,'no change'), (10,'updated'), (12,'move out')",
)).Then(qh.Eventually(
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:\\"id1\\" type:INT32 charset:63 flags:53251} fields:{name:\\"id2\\" type:INT32 charset:63 flags:53251} rows:{lengths:2 lengths:1 values:\\"126\\"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id1" type:INT32 charset:63 flags:53251} fields:{name:"id2" type:INT32 charset:63 flags:53251} rows:{lengths:2 lengths:1 values:"126"}'.*`,
)).Then(qh.Immediately(
"/delete cs, pca from _vt.copy_state as cs left join _vt.post_copy_action as pca on cs.vrepl_id=pca.vrepl_id and cs.table_name=pca.table_name.*dst1",
"insert into not_copied(id,val) values (1,'bbb')",
)).Then(qh.Eventually(
// Copy again. There should be no events for catchup.
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:\\\"id\\\" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:\\\"1\\\"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"1"}'.*`,
)).Then(qh.Immediately(
"/delete cs, pca from _vt.copy_state as cs left join _vt.post_copy_action as pca on cs.vrepl_id=pca.vrepl_id and cs.table_name=pca.table_name.*not_copied",
"/update _vt.vreplication set state='Running'",
@@ -1390,7 +1390,7 @@ func testPlayerCopyTablesStopAfterCopy(t *testing.T) {
).Then(qh.Eventually(
"begin",
"insert into dst1(id,val) values (1,'aaa'), (2,'bbb')",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:\\"id\\" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:\\"2\\"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"2"}'.*`,
"commit",
)).Then(qh.Immediately(
// copy of dst1 is done: delete from copy_state.
@@ -1478,7 +1478,7 @@ func testPlayerCopyTablesGIPK(t *testing.T) {
).Then(qh.Eventually(
"begin",
"insert into dst1(my_row_id,val) values (1,'aaa'), (2,'bbb')",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:\\"my_row_id\\" type:UINT64 charset:63 flags:49699} rows:{lengths:1 values:\\"2\\"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"my_row_id" type:UINT64 charset:63 flags:49699} rows:{lengths:1 values:"2"}'.*`,
"commit",
)).Then(qh.Immediately(
// copy of dst1 is done: delete from copy_state.
@@ -1489,7 +1489,7 @@ func testPlayerCopyTablesGIPK(t *testing.T) {
"commit",
"begin",
"insert into dst2(my_row_id,val) values (1,'aaa'), (2,'bbb')",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:\\"my_row_id\\" type:UINT64 charset:63 flags:49699} rows:{lengths:1 values:\\"2\\"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"my_row_id" type:UINT64 charset:63 flags:49699} rows:{lengths:1 values:"2"}'.*`,
"commit",
)).Then(qh.Immediately(
// copy of dst2 is done: delete from copy_state.
@@ -1578,7 +1578,7 @@ func testPlayerCopyTableCancel(t *testing.T) {
).Then(qh.Eventually(
"begin",
"insert into dst1(id,val) values (1,'aaa'), (2,'bbb')",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:\\"id\\" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:\\"2\\"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"2"}'.*`,
"commit",
)).Then(qh.Immediately(
// copy of dst1 is done: delete from copy_state.
@@ -1651,11 +1651,11 @@ func testPlayerCopyTablesWithGeneratedColumn(t *testing.T) {
"/update _vt.vreplication set state",
// The first fast-forward has no starting point. So, it just saves the current position.
"insert into dst1(id,val,val3,id2) values (1,'aaa','aaa1',10), (2,'bbb','bbb2',20)",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:\\"id\\" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:\\"2\\"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"2"}'.*`,
// copy of dst1 is done: delete from copy_state.
"/delete cs, pca from _vt.copy_state as cs left join _vt.post_copy_action as pca on cs.vrepl_id=pca.vrepl_id and cs.table_name=pca.table_name.*dst1",
"insert into dst2(val3,val,id2) values ('aaa1','aaa',10), ('bbb2','bbb',20)",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:\\"id\\" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:\\"2\\"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"2"}'.*`,
// copy of dst2 is done: delete from copy_state.
"/delete cs, pca from _vt.copy_state as cs left join _vt.post_copy_action as pca on cs.vrepl_id=pca.vrepl_id and cs.table_name=pca.table_name.*dst2",
"/update _vt.vreplication set state",
@@ -1732,7 +1732,7 @@ func testCopyTablesWithInvalidDates(t *testing.T) {
).Then(qh.Eventually(
"begin",
"insert into dst1(id,dt) values (1,'2020-01-12'), (2,'0000-00-00')",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:\\"id\\" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:\\"2\\"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"2"}'.*`,
"commit",
)).Then(qh.Immediately(
// copy of dst1 is done: delete from copy_state.
@@ -1822,7 +1822,7 @@ func testCopyInvisibleColumns(t *testing.T) {
"/update _vt.vreplication set state='Copying'",
// The first fast-forward has no starting point. So, it just saves the current position.
"insert into dst1(id,id2,inv1,inv2) values (1,10,100,1000), (2,20,200,2000)",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:\\"id\\" type:INT32 charset:63 flags:53251} fields:{name:\\"inv1\\" type:INT32 charset:63 flags:53251} rows:{lengths:1 lengths:3 values:\\"2200\\"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} fields:{name:"inv1" type:INT32 charset:63 flags:53251} rows:{lengths:1 lengths:3 values:"2200"}'.*`,
// copy of dst1 is done: delete from copy_state.
"/delete cs, pca from _vt.copy_state as cs left join _vt.post_copy_action as pca on cs.vrepl_id=pca.vrepl_id and cs.table_name=pca.table_name.*dst1",
"/update _vt.vreplication set state='Running'",
diff --git a/go/vt/vttablet/tabletserver/tabletenv/config.go b/go/vt/vttablet/tabletserver/tabletenv/config.go
index 1b89829825b..f2cf7e638cf 100644
--- a/go/vt/vttablet/tabletserver/tabletenv/config.go
+++ b/go/vt/vttablet/tabletserver/tabletenv/config.go
@@ -200,7 +200,8 @@ func registerTabletEnvFlags(fs *pflag.FlagSet) {
fs.BoolVar(&enableReplicationReporter, "enable_replication_reporter", false, "Use polling to track replication lag.")
fs.BoolVar(¤tConfig.EnableOnlineDDL, "queryserver_enable_online_ddl", true, "Enable online DDL.")
fs.BoolVar(¤tConfig.SanitizeLogMessages, "sanitize_log_messages", false, "Remove potentially sensitive information in tablet INFO, WARNING, and ERROR log messages such as query parameters.")
- fs.BoolVar(¤tConfig.EnableSettingsPool, "queryserver-enable-settings-pool", true, "Enable pooling of connections with modified system settings")
+ _ = fs.Bool("queryserver-enable-settings-pool", true, "Enable pooling of connections with modified system settings")
+ fs.MarkDeprecated("queryserver-enable-settings-pool", "New pool implementation does it internally and at the api level this has been enabled since v17")
fs.Int64Var(¤tConfig.RowStreamer.MaxInnoDBTrxHistLen, "vreplication_copy_phase_max_innodb_history_list_length", 1000000, "The maximum InnoDB transaction history that can exist on a vstreamer (source) before starting another round of copying rows. This helps to limit the impact on the source tablet.")
fs.Int64Var(¤tConfig.RowStreamer.MaxMySQLReplLagSecs, "vreplication_copy_phase_max_mysql_replication_lag", 43200, "The maximum MySQL replication lag (in seconds) that can exist on a vstreamer (source) before starting another round of copying rows. This helps to limit the impact on the source tablet.")
@@ -354,7 +355,6 @@ type TabletConfig struct {
EnforceStrictTransTables bool `json:"-"`
EnableOnlineDDL bool `json:"-"`
- EnableSettingsPool bool `json:"-"`
RowStreamer RowStreamerConfig `json:"rowStreamer,omitempty"`
@@ -1076,7 +1076,6 @@ var defaultConfig = TabletConfig{
},
EnablePerWorkloadTableMetrics: false,
- EnableSettingsPool: true,
}
// defaultTxThrottlerConfig returns the default TxThrottlerConfigFlag object based on
diff --git a/go/vt/vttablet/tabletserver/tabletserver.go b/go/vt/vttablet/tabletserver/tabletserver.go
index db01e6f2912..eb140454c2a 100644
--- a/go/vt/vttablet/tabletserver/tabletserver.go
+++ b/go/vt/vttablet/tabletserver/tabletserver.go
@@ -1221,19 +1221,19 @@ func (tsv *TabletServer) VStreamResults(ctx context.Context, target *querypb.Tar
// ReserveBeginExecute implements the QueryService interface
func (tsv *TabletServer) ReserveBeginExecute(ctx context.Context, target *querypb.Target, preQueries []string, postBeginQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions) (state queryservice.ReservedTransactionState, result *sqltypes.Result, err error) {
- if tsv.config.EnableSettingsPool {
- state, result, err = tsv.beginExecuteWithSettings(ctx, target, preQueries, postBeginQueries, sql, bindVariables, options)
- // If there is an error and the error message is about allowing query in reserved connection only,
- // then we do not return an error from here and continue to use the reserved connection path.
- // This is specially for get_lock function call from vtgate that needs a reserved connection.
- if err == nil || !strings.Contains(err.Error(), "not allowed without reserved connection") {
- return state, result, err
- }
- // rollback if transaction was started.
- if state.TransactionID != 0 {
- _, _ = tsv.Rollback(ctx, target, state.TransactionID)
- }
+ state, result, err = tsv.beginExecuteWithSettings(ctx, target, preQueries, postBeginQueries, sql, bindVariables, options)
+ // If there is an error and the error message is about allowing query in reserved connection only,
+ // then we do not return an error from here and continue to use the reserved connection path.
+ // This is specially for get_lock function call from vtgate that needs a reserved connection.
+ if err == nil || !strings.Contains(err.Error(), "not allowed without reserved connection") {
+ return state, result, err
}
+ // rollback if transaction was started.
+ if state.TransactionID != 0 {
+ _, _ = tsv.Rollback(ctx, target, state.TransactionID)
+ }
+
+ // needs a reserved connection.
var connID int64
var sessionStateChanges string
state.TabletAlias = tsv.alias
@@ -1274,65 +1274,34 @@ func (tsv *TabletServer) ReserveBeginExecute(ctx context.Context, target *queryp
func (tsv *TabletServer) ReserveBeginStreamExecute(
ctx context.Context,
target *querypb.Target,
- preQueries []string,
- postBeginQueries []string,
+ settings []string,
+ savepointQueries []string,
sql string,
bindVariables map[string]*querypb.BindVariable,
options *querypb.ExecuteOptions,
callback func(*sqltypes.Result) error,
) (state queryservice.ReservedTransactionState, err error) {
- if tsv.config.EnableSettingsPool {
- return tsv.beginStreamExecuteWithSettings(ctx, target, preQueries, postBeginQueries, sql, bindVariables, options, callback)
- }
-
- var connID int64
- var sessionStateChanges string
-
- err = tsv.execRequest(
- ctx, tsv.loadQueryTimeout(),
- "ReserveBegin", "begin", bindVariables,
- target, options, false, /* allowOnShutdown */
- func(ctx context.Context, logStats *tabletenv.LogStats) error {
- defer tsv.stats.QueryTimings.Record("RESERVE", time.Now())
- targetType, err := tsv.resolveTargetType(ctx, target)
- if err != nil {
- return err
- }
- defer tsv.stats.QueryTimingsByTabletType.Record(targetType.String(), time.Now())
- connID, sessionStateChanges, err = tsv.te.ReserveBegin(ctx, options, preQueries, postBeginQueries)
- if err != nil {
- return err
- }
- logStats.TransactionID = connID
- logStats.ReservedID = connID
- return nil
- },
- )
-
+ txState, err := tsv.begin(ctx, target, savepointQueries, 0, settings, options)
if err != nil {
- return state, err
+ return txToReserveState(txState), err
}
- state.ReservedID = connID
- state.TransactionID = connID
- state.TabletAlias = tsv.alias
- state.SessionStateChanges = sessionStateChanges
- err = tsv.streamExecute(ctx, target, sql, bindVariables, state.TransactionID, state.ReservedID, nil, options, callback)
- return state, err
+ err = tsv.streamExecute(ctx, target, sql, bindVariables, txState.TransactionID, 0, settings, options, callback)
+ return txToReserveState(txState), err
}
// ReserveExecute implements the QueryService interface
func (tsv *TabletServer) ReserveExecute(ctx context.Context, target *querypb.Target, preQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, transactionID int64, options *querypb.ExecuteOptions) (state queryservice.ReservedState, result *sqltypes.Result, err error) {
- if tsv.config.EnableSettingsPool {
- result, err = tsv.executeWithSettings(ctx, target, preQueries, sql, bindVariables, transactionID, options)
- // If there is an error and the error message is about allowing query in reserved connection only,
- // then we do not return an error from here and continue to use the reserved connection path.
- // This is specially for get_lock function call from vtgate that needs a reserved connection.
- if err == nil || !strings.Contains(err.Error(), "not allowed without reserved connection") {
- return state, result, err
- }
+
+ result, err = tsv.executeWithSettings(ctx, target, preQueries, sql, bindVariables, transactionID, options)
+ // If there is an error and the error message is about allowing query in reserved connection only,
+ // then we do not return an error from here and continue to use the reserved connection path.
+ // This is specially for get_lock function call from vtgate that needs a reserved connection.
+ if err == nil || !strings.Contains(err.Error(), "not allowed without reserved connection") {
+ return state, result, err
}
+ // needs a reserved connection to execute the query.
state.TabletAlias = tsv.alias
allowOnShutdown := false
@@ -1386,48 +1355,7 @@ func (tsv *TabletServer) ReserveStreamExecute(
options *querypb.ExecuteOptions,
callback func(*sqltypes.Result) error,
) (state queryservice.ReservedState, err error) {
- if tsv.config.EnableSettingsPool {
- return state, tsv.streamExecute(ctx, target, sql, bindVariables, transactionID, 0, preQueries, options, callback)
- }
-
- state.TabletAlias = tsv.alias
-
- allowOnShutdown := false
- var timeout time.Duration
- if transactionID != 0 {
- allowOnShutdown = true
- // Use the transaction timeout. ReserveStreamExecute is used for OLAP
- // only, so we can directly fetch the OLAP TX timeout.
- timeout = tsv.config.TxTimeoutForWorkload(querypb.ExecuteOptions_OLAP)
- }
-
- err = tsv.execRequest(
- ctx, timeout,
- "Reserve", "", bindVariables,
- target, options, allowOnShutdown,
- func(ctx context.Context, logStats *tabletenv.LogStats) error {
- defer tsv.stats.QueryTimings.Record("RESERVE", time.Now())
- targetType, err := tsv.resolveTargetType(ctx, target)
- if err != nil {
- return err
- }
- defer tsv.stats.QueryTimingsByTabletType.Record(targetType.String(), time.Now())
- state.ReservedID, err = tsv.te.Reserve(ctx, options, transactionID, preQueries)
- if err != nil {
- return err
- }
- logStats.TransactionID = state.ReservedID
- logStats.ReservedID = state.ReservedID
- return nil
- },
- )
-
- if err != nil {
- return state, err
- }
-
- err = tsv.streamExecute(ctx, target, sql, bindVariables, transactionID, state.ReservedID, nil, options, callback)
- return state, err
+ return state, tsv.streamExecute(ctx, target, sql, bindVariables, transactionID, 0, preQueries, options, callback)
}
// Release implements the QueryService interface
@@ -1477,16 +1405,6 @@ func (tsv *TabletServer) beginExecuteWithSettings(ctx context.Context, target *q
return txToReserveState(txState), result, err
}
-func (tsv *TabletServer) beginStreamExecuteWithSettings(ctx context.Context, target *querypb.Target, settings []string, savepointQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions, callback func(*sqltypes.Result) error) (queryservice.ReservedTransactionState, error) {
- txState, err := tsv.begin(ctx, target, savepointQueries, 0, settings, options)
- if err != nil {
- return txToReserveState(txState), err
- }
-
- err = tsv.streamExecute(ctx, target, sql, bindVariables, txState.TransactionID, 0, settings, options, callback)
- return txToReserveState(txState), err
-}
-
func txToReserveState(state queryservice.TransactionState) queryservice.ReservedTransactionState {
return queryservice.ReservedTransactionState{
TabletAlias: state.TabletAlias,
diff --git a/go/vt/vttablet/tabletserver/tabletserver_test.go b/go/vt/vttablet/tabletserver/tabletserver_test.go
index ee91f05c2a5..563ab5e84b3 100644
--- a/go/vt/vttablet/tabletserver/tabletserver_test.go
+++ b/go/vt/vttablet/tabletserver/tabletserver_test.go
@@ -675,7 +675,6 @@ func TestTabletServerReserveConnection(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
db, tsv := setupTabletServerTest(t, ctx, "")
- tsv.config.EnableSettingsPool = false
defer tsv.StopService()
defer db.Close()
@@ -684,7 +683,7 @@ func TestTabletServerReserveConnection(t *testing.T) {
options := &querypb.ExecuteOptions{}
// reserve a connection
- state, _, err := tsv.ReserveExecute(ctx, &target, nil, "select 42", nil, 0, options)
+ state, _, err := tsv.ReserveExecute(ctx, &target, nil, "set sql_mode = ''", nil, 0, options)
require.NoError(t, err)
// run a query in it
@@ -747,7 +746,6 @@ func TestTabletServerReserveAndBeginCommit(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
db, tsv := setupTabletServerTest(t, ctx, "")
- tsv.config.EnableSettingsPool = false
defer tsv.StopService()
defer db.Close()
@@ -756,7 +754,7 @@ func TestTabletServerReserveAndBeginCommit(t *testing.T) {
options := &querypb.ExecuteOptions{}
// reserve a connection and a transaction
- state, _, err := tsv.ReserveBeginExecute(ctx, &target, nil, nil, "select 42", nil, options)
+ state, _, err := tsv.ReserveBeginExecute(ctx, &target, nil, nil, "set sql_mode = ''", nil, options)
require.NoError(t, err)
defer func() {
// fallback so the test finishes quickly
@@ -2192,20 +2190,19 @@ func TestReserveBeginExecute(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
db, tsv := setupTabletServerTest(t, ctx, "")
- tsv.config.EnableSettingsPool = false
defer tsv.StopService()
defer db.Close()
target := querypb.Target{TabletType: topodatapb.TabletType_PRIMARY}
+ db.AddQueryPattern("set @@sql_mode = ''", &sqltypes.Result{})
- state, _, err := tsv.ReserveBeginExecute(ctx, &target, []string{"select 43"}, nil, "select 42", nil, &querypb.ExecuteOptions{})
+ state, _, err := tsv.ReserveBeginExecute(ctx, &target, nil, nil, "set @@sql_mode = ''", nil, &querypb.ExecuteOptions{})
require.NoError(t, err)
assert.Greater(t, state.TransactionID, int64(0), "transactionID")
- assert.Equal(t, state.ReservedID, state.TransactionID, "reservedID should equal transactionID")
+ assert.Equal(t, state.TransactionID, state.ReservedID, "reservedID should equal transactionID")
expected := []string{
- "select 43",
"begin",
- "select 42 from dual limit 10001",
+ "set @@sql_mode = ''",
}
splitOutput := strings.Split(db.QueryLog(), ";")
for _, exp := range expected {
@@ -2219,18 +2216,17 @@ func TestReserveExecute_WithoutTx(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
db, tsv := setupTabletServerTest(t, ctx, "")
- tsv.config.EnableSettingsPool = false
defer tsv.StopService()
defer db.Close()
+ db.AddQueryPattern("set @@sql_mode = ''", &sqltypes.Result{})
target := querypb.Target{TabletType: topodatapb.TabletType_PRIMARY}
- state, _, err := tsv.ReserveExecute(ctx, &target, []string{"select 43"}, "select 42", nil, 0, &querypb.ExecuteOptions{})
+ state, _, err := tsv.ReserveExecute(ctx, &target, nil, "set sql_mode = ''", nil, 0, &querypb.ExecuteOptions{})
require.NoError(t, err)
assert.NotEqual(t, int64(0), state.ReservedID, "reservedID should not be zero")
expected := []string{
- "select 43",
- "select 42 from dual limit 10001",
+ "set @@sql_mode = ''",
}
splitOutput := strings.Split(db.QueryLog(), ";")
for _, exp := range expected {
@@ -2244,9 +2240,10 @@ func TestReserveExecute_WithTx(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
db, tsv := setupTabletServerTest(t, ctx, "")
- tsv.config.EnableSettingsPool = false
defer tsv.StopService()
defer db.Close()
+
+ db.AddQueryPattern("set @@sql_mode = ''", &sqltypes.Result{})
target := querypb.Target{TabletType: topodatapb.TabletType_PRIMARY}
beginState, err := tsv.Begin(ctx, &target, &querypb.ExecuteOptions{})
@@ -2254,13 +2251,12 @@ func TestReserveExecute_WithTx(t *testing.T) {
require.NotEqual(t, int64(0), beginState.TransactionID)
db.ResetQueryLog()
- reserveState, _, err := tsv.ReserveExecute(ctx, &target, []string{"select 43"}, "select 42", nil, beginState.TransactionID, &querypb.ExecuteOptions{})
+ reserveState, _, err := tsv.ReserveExecute(ctx, &target, nil, "set sql_mode = ''", nil, beginState.TransactionID, &querypb.ExecuteOptions{})
require.NoError(t, err)
defer tsv.Release(ctx, &target, beginState.TransactionID, reserveState.ReservedID)
assert.Equal(t, beginState.TransactionID, reserveState.ReservedID, "reservedID should be equal to transactionID")
expected := []string{
- "select 43",
- "select 42 from dual limit 10001",
+ "set @@sql_mode = ''",
}
splitOutput := strings.Split(db.QueryLog(), ";")
for _, exp := range expected {
@@ -2306,7 +2302,6 @@ func TestRelease(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
db, tsv := setupTabletServerTest(t, ctx, "")
- tsv.config.EnableSettingsPool = false
defer tsv.StopService()
defer db.Close()
db.AddQueryPattern(".*", &sqltypes.Result{})
@@ -2316,7 +2311,7 @@ func TestRelease(t *testing.T) {
switch {
case test.begin && test.reserve:
- state, _, err := tsv.ReserveBeginExecute(ctx, &target, []string{"select 1212"}, nil, "select 42", nil, &querypb.ExecuteOptions{})
+ state, _, err := tsv.ReserveBeginExecute(ctx, &target, nil, nil, "set sql_mode = ''", nil, &querypb.ExecuteOptions{})
require.NoError(t, err)
transactionID = state.TransactionID
reservedID = state.ReservedID
@@ -2328,7 +2323,7 @@ func TestRelease(t *testing.T) {
transactionID = state.TransactionID
require.NotEqual(t, int64(0), transactionID)
case test.reserve:
- state, _, err := tsv.ReserveExecute(ctx, &target, nil, "select 42", nil, 0, &querypb.ExecuteOptions{})
+ state, _, err := tsv.ReserveExecute(ctx, &target, nil, "set sql_mode = ''", nil, 0, &querypb.ExecuteOptions{})
require.NoError(t, err)
reservedID = state.ReservedID
require.NotEqual(t, int64(0), reservedID)
@@ -2351,10 +2346,10 @@ func TestReserveStats(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
db, tsv := setupTabletServerTest(t, ctx, "")
- tsv.config.EnableSettingsPool = false
defer tsv.StopService()
defer db.Close()
+ db.AddQueryPattern("set @@sql_mode = ''", &sqltypes.Result{})
target := querypb.Target{TabletType: topodatapb.TabletType_PRIMARY}
callerID := &querypb.VTGateCallerID{
@@ -2363,12 +2358,12 @@ func TestReserveStats(t *testing.T) {
ctx = callerid.NewContext(ctx, nil, callerID)
// Starts reserved connection and transaction
- rbeState, _, err := tsv.ReserveBeginExecute(ctx, &target, nil, nil, "select 42", nil, &querypb.ExecuteOptions{})
+ rbeState, _, err := tsv.ReserveBeginExecute(ctx, &target, nil, nil, "set sql_mode = ''", nil, &querypb.ExecuteOptions{})
require.NoError(t, err)
assert.EqualValues(t, 1, tsv.te.txPool.env.Stats().UserActiveReservedCount.Counts()["test"])
// Starts reserved connection
- reState, _, err := tsv.ReserveExecute(ctx, &target, nil, "select 42", nil, 0, &querypb.ExecuteOptions{})
+ reState, _, err := tsv.ReserveExecute(ctx, &target, nil, "set sql_mode = ''", nil, 0, &querypb.ExecuteOptions{})
require.NoError(t, err)
assert.EqualValues(t, 2, tsv.te.txPool.env.Stats().UserActiveReservedCount.Counts()["test"])
@@ -2383,7 +2378,7 @@ func TestReserveStats(t *testing.T) {
assert.EqualValues(t, 2, tsv.te.txPool.env.Stats().UserActiveReservedCount.Counts()["test"])
// Reserved the connection on previous transaction
- beReState, _, err := tsv.ReserveExecute(ctx, &target, nil, "select 42", nil, beState.TransactionID, &querypb.ExecuteOptions{})
+ beReState, _, err := tsv.ReserveExecute(ctx, &target, nil, "set sql_mode = ''", nil, beState.TransactionID, &querypb.ExecuteOptions{})
require.NoError(t, err)
assert.EqualValues(t, 3, tsv.te.txPool.env.Stats().UserActiveReservedCount.Counts()["test"])
@@ -2526,12 +2521,11 @@ func TestDatabaseNameReplaceByKeyspaceNameReserveExecuteMethod(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
db, tsv := setupTabletServerTest(t, ctx, "keyspaceName")
- tsv.config.EnableSettingsPool = false
setDBName(db, tsv, "databaseInMysql")
defer tsv.StopService()
defer db.Close()
- executeSQL := "select * from test_table limit 1000"
+ executeSQL := "select 43"
executeSQLResult := &sqltypes.Result{
Fields: []*querypb.Field{
{
@@ -2539,24 +2533,21 @@ func TestDatabaseNameReplaceByKeyspaceNameReserveExecuteMethod(t *testing.T) {
Database: "databaseInMysql",
},
},
- RowsAffected: 1,
Rows: [][]sqltypes.Value{
- {sqltypes.NewVarBinary("row01")},
+ {sqltypes.NewInt64(43)},
},
}
- db.AddQuery(executeSQL, executeSQLResult)
+ db.AddQuery("select 43 from dual limit 10001", executeSQLResult)
target := tsv.sm.target
// Test ReserveExecute
- state, res, err := tsv.ReserveExecute(ctx, target, nil, executeSQL, nil, 0, &querypb.ExecuteOptions{
+ _, res, err := tsv.ReserveExecute(ctx, target, nil, executeSQL, nil, 0, &querypb.ExecuteOptions{
IncludedFields: querypb.ExecuteOptions_ALL,
})
require.NoError(t, err)
for _, field := range res.Fields {
require.Equal(t, "keyspaceName", field.Database)
}
- err = tsv.Release(ctx, target, 0, state.ReservedID)
- require.NoError(t, err)
}
func TestDatabaseNameReplaceByKeyspaceNameReserveBeginExecuteMethod(t *testing.T) {
diff --git a/go/vt/wrangler/materializer_test.go b/go/vt/wrangler/materializer_test.go
index 23cae954b83..1728ba6efc2 100644
--- a/go/vt/wrangler/materializer_test.go
+++ b/go/vt/wrangler/materializer_test.go
@@ -952,15 +952,15 @@ func TestCreateLookupVindexTargetVSchema(t *testing.T) {
out: &vschemapb.Keyspace{
Sharded: true,
Vindexes: map[string]*vschemapb.Vindex{
- "unicode_loose_md5": {
- Type: "unicode_loose_md5",
+ "unicode_loose_xxhash": {
+ Type: "unicode_loose_xxhash",
},
},
Tables: map[string]*vschemapb.Table{
"lkp": {
ColumnVindexes: []*vschemapb.ColumnVindex{{
Column: "c1",
- Name: "unicode_loose_md5",
+ Name: "unicode_loose_xxhash",
}},
},
},
@@ -1002,7 +1002,7 @@ func TestCreateLookupVindexTargetVSchema(t *testing.T) {
Vindexes: map[string]*vschemapb.Vindex{
// Create a misleading vindex name.
"xxhash": {
- Type: "unicode_loose_md5",
+ Type: "unicode_loose_xxhash",
},
},
},
@@ -1929,11 +1929,11 @@ func TestMaterializerOneToOne(t *testing.T) {
insertPrefix+
`\(`+
`'workflow', `+
- (`'keyspace:\\"sourceks\\" shard:\\"0\\" `+
+ (`'keyspace:"sourceks" shard:"0" `+
`filter:{`+
- `rules:{match:\\"t1\\" filter:\\"select.*t1\\"} `+
- `rules:{match:\\"t2\\" filter:\\"select.*t3\\"} `+
- `rules:{match:\\"t4\\"}`+
+ `rules:{match:"t1" filter:"select.*t1"} `+
+ `rules:{match:"t2" filter:"select.*t3"} `+
+ `rules:{match:"t4"}`+
`}', `)+
`'', [0-9]*, [0-9]*, 'zone1', 'primary,rdonly', [0-9]*, 0, 'Stopped', 'vt_targetks', 0, 0, false, '{}'`+
`\)`+eol,
@@ -1968,9 +1968,9 @@ func TestMaterializerManyToOne(t *testing.T) {
env.tmc.expectVRQuery(
200,
insertPrefix+
- `\('workflow', 'keyspace:\\"sourceks\\" shard:\\"-80\\" filter:{rules:{match:\\"t1\\" filter:\\"select.*t1\\"} rules:{match:\\"t2\\" filter:\\"select.*t3\\"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_targetks', 0, 0, false, '{}'\)`+
+ `\('workflow', 'keyspace:"sourceks" shard:"-80" filter:{rules:{match:"t1" filter:"select.*t1"} rules:{match:"t2" filter:"select.*t3"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_targetks', 0, 0, false, '{}'\)`+
`, `+
- `\('workflow', 'keyspace:\\"sourceks\\" shard:\\"80-\\" filter:{rules:{match:\\"t1\\" filter:\\"select.*t1\\"} rules:{match:\\"t2\\" filter:\\"select.*t3\\"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_targetks', 0, 0, false, '{}'\)`+
+ `\('workflow', 'keyspace:"sourceks" shard:"80-" filter:{rules:{match:"t1" filter:"select.*t1"} rules:{match:"t2" filter:"select.*t3"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_targetks', 0, 0, false, '{}'\)`+
eol,
&sqltypes.Result{},
)
@@ -2021,13 +2021,13 @@ func TestMaterializerOneToMany(t *testing.T) {
env.tmc.expectVRQuery(
200,
insertPrefix+
- `.*shard:\\"0\\" filter:{rules:{match:\\"t1\\" filter:\\"select.*t1 where in_keyrange\(c1.*targetks\.xxhash.*-80.*`,
+ `.*shard:"0" filter:{rules:{match:"t1" filter:"select.*t1 where in_keyrange\(c1.*targetks\.xxhash.*-80.*`,
&sqltypes.Result{},
)
env.tmc.expectVRQuery(
210,
insertPrefix+
- `.*shard:\\"0\\" filter:{rules:{match:\\"t1\\" filter:\\"select.*t1 where in_keyrange\(c1.*targetks\.xxhash.*80-.*`,
+ `.*shard:"0" filter:{rules:{match:"t1" filter:"select.*t1 where in_keyrange\(c1.*targetks\.xxhash.*80-.*`,
&sqltypes.Result{},
)
env.tmc.expectVRQuery(200, mzUpdateQuery, &sqltypes.Result{})
@@ -2078,15 +2078,15 @@ func TestMaterializerManyToMany(t *testing.T) {
env.tmc.expectVRQuery(
200,
insertPrefix+
- `.*shard:\\"-40\\" filter:{rules:{match:\\"t1\\" filter:\\"select.*t1 where in_keyrange\(c1.*targetks\.xxhash.*-80.*`+
- `.*shard:\\"40-\\" filter:{rules:{match:\\"t1\\" filter:\\"select.*t1 where in_keyrange\(c1.*targetks\.xxhash.*-80.*`,
+ `.*shard:"-40" filter:{rules:{match:"t1" filter:"select.*t1 where in_keyrange\(c1.*targetks\.xxhash.*-80.*`+
+ `.*shard:"40-" filter:{rules:{match:"t1" filter:"select.*t1 where in_keyrange\(c1.*targetks\.xxhash.*-80.*`,
&sqltypes.Result{},
)
env.tmc.expectVRQuery(
210,
insertPrefix+
- `.*shard:\\"-40\\" filter:{rules:{match:\\"t1\\" filter:\\"select.*t1 where in_keyrange\(c1.*targetks\.xxhash.*80-.*`+
- `.*shard:\\"40-\\" filter:{rules:{match:\\"t1\\" filter:\\"select.*t1 where in_keyrange\(c1.*targetks\.xxhash.*80-.*`,
+ `.*shard:"-40" filter:{rules:{match:"t1" filter:"select.*t1 where in_keyrange\(c1.*targetks\.xxhash.*80-.*`+
+ `.*shard:"40-" filter:{rules:{match:"t1" filter:"select.*t1 where in_keyrange\(c1.*targetks\.xxhash.*80-.*`,
&sqltypes.Result{},
)
env.tmc.expectVRQuery(200, mzUpdateQuery, &sqltypes.Result{})
@@ -2139,13 +2139,13 @@ func TestMaterializerMulticolumnVindex(t *testing.T) {
env.tmc.expectVRQuery(
200,
insertPrefix+
- `.*shard:\\"0\\" filter:{rules:{match:\\"t1\\" filter:\\"select.*t1 where in_keyrange\(c1, c2.*targetks\.region.*-80.*`,
+ `.*shard:"0" filter:{rules:{match:"t1" filter:"select.*t1 where in_keyrange\(c1, c2.*targetks\.region.*-80.*`,
&sqltypes.Result{},
)
env.tmc.expectVRQuery(
210,
insertPrefix+
- `.*shard:\\"0\\" filter:{rules:{match:\\"t1\\" filter:\\"select.*t1 where in_keyrange\(c1, c2.*targetks\.region.*80-.*`,
+ `.*shard:"0" filter:{rules:{match:"t1" filter:"select.*t1 where in_keyrange\(c1, c2.*targetks\.region.*80-.*`,
&sqltypes.Result{},
)
env.tmc.expectVRQuery(200, mzUpdateQuery, &sqltypes.Result{})
@@ -2181,7 +2181,7 @@ func TestMaterializerDeploySchema(t *testing.T) {
env.tmc.expectVRQuery(
200,
insertPrefix+
- `\('workflow', 'keyspace:\\"sourceks\\" shard:\\"0\\" filter:{rules:{match:\\"t1\\" filter:\\"select.*t1\\"} rules:{match:\\"t2\\" filter:\\"select.*t3\\"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_targetks', 0, 0, false, '{}'\)`+
+ `\('workflow', 'keyspace:"sourceks" shard:"0" filter:{rules:{match:"t1" filter:"select.*t1"} rules:{match:"t2" filter:"select.*t3"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_targetks', 0, 0, false, '{}'\)`+
eol,
&sqltypes.Result{},
)
@@ -2219,7 +2219,7 @@ func TestMaterializerCopySchema(t *testing.T) {
env.tmc.expectVRQuery(
200,
insertPrefix+
- `\('workflow', 'keyspace:\\"sourceks\\" shard:\\"0\\" filter:{rules:{match:\\"t1\\" filter:\\"select.*t1\\"} rules:{match:\\"t2\\" filter:\\"select.*t3\\"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_targetks', 0, 0, false, '{}'\)`+
+ `\('workflow', 'keyspace:"sourceks" shard:"0" filter:{rules:{match:"t1" filter:"select.*t1"} rules:{match:"t2" filter:"select.*t3"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_targetks', 0, 0, false, '{}'\)`+
eol,
&sqltypes.Result{},
)
@@ -2276,13 +2276,13 @@ func TestMaterializerExplicitColumns(t *testing.T) {
env.tmc.expectVRQuery(
200,
insertPrefix+
- `.*shard:\\"0\\" filter:{rules:{match:\\"t1\\" filter:\\"select.*t1 where in_keyrange\(c1, c2.*targetks\.region.*-80.*`,
+ `.*shard:"0" filter:{rules:{match:"t1" filter:"select.*t1 where in_keyrange\(c1, c2.*targetks\.region.*-80.*`,
&sqltypes.Result{},
)
env.tmc.expectVRQuery(
210,
insertPrefix+
- `.*shard:\\"0\\" filter:{rules:{match:\\"t1\\" filter:\\"select.*t1 where in_keyrange\(c1, c2.*targetks\.region.*80-.*`,
+ `.*shard:"0" filter:{rules:{match:"t1" filter:"select.*t1 where in_keyrange\(c1, c2.*targetks\.region.*80-.*`,
&sqltypes.Result{},
)
env.tmc.expectVRQuery(200, mzUpdateQuery, &sqltypes.Result{})
@@ -2336,13 +2336,13 @@ func TestMaterializerRenamedColumns(t *testing.T) {
env.tmc.expectVRQuery(
200,
insertPrefix+
- `.*shard:\\"0\\" filter:{rules:{match:\\"t1\\" filter:\\"select.*t1 where in_keyrange\(c3, c4.*targetks\.region.*-80.*`,
+ `.*shard:"0" filter:{rules:{match:"t1" filter:"select.*t1 where in_keyrange\(c3, c4.*targetks\.region.*-80.*`,
&sqltypes.Result{},
)
env.tmc.expectVRQuery(
210,
insertPrefix+
- `.*shard:\\"0\\" filter:{rules:{match:\\"t1\\" filter:\\"select.*t1 where in_keyrange\(c3, c4.*targetks\.region.*80-.*`,
+ `.*shard:"0" filter:{rules:{match:"t1" filter:"select.*t1 where in_keyrange\(c3, c4.*targetks\.region.*80-.*`,
&sqltypes.Result{},
)
env.tmc.expectVRQuery(200, mzUpdateQuery, &sqltypes.Result{})
@@ -2863,7 +2863,7 @@ func TestMaterializerSourceShardSelection(t *testing.T) {
}
getStreamInsert := func(sourceShard, sourceColumn, targetVindex, targetShard string) string {
- return fmt.Sprintf(`.*shard:\\"%s\\" filter:{rules:{match:\\"t1\\" filter:\\"select.*t1 where in_keyrange\(%s.*targetks\.%s.*%s.*`, sourceShard, sourceColumn, targetVindex, targetShard)
+ return fmt.Sprintf(`.*shard:"%s" filter:{rules:{match:"t1" filter:"select.*t1 where in_keyrange\(%s.*targetks\.%s.*%s.*`, sourceShard, sourceColumn, targetVindex, targetShard)
}
targetVSchema := &vschemapb.Keyspace{
@@ -3056,7 +3056,7 @@ func TestMaterializerSourceShardSelection(t *testing.T) {
// The single target shard streams all data from each source shard
// without any keyrange filtering.
getStreamInsert: func(sourceShard, _, _, targetShard string) string {
- return fmt.Sprintf(`.*shard:\\"%s\\" filter:{rules:{match:\\"t1\\" filter:\\"select.*t1`, sourceShard)
+ return fmt.Sprintf(`.*shard:"%s" filter:{rules:{match:"t1" filter:"select.*t1`, sourceShard)
},
},
{
@@ -3611,10 +3611,8 @@ func TestKeyRangesEqualOptimization(t *testing.T) {
}
blsBytes, err := prototext.Marshal(bls)
require.NoError(t, err, "failed to marshal binlog source: %v", err)
- // This is also escaped in the SQL statement.
- blsStr := strings.ReplaceAll(string(blsBytes), `"`, `\"`)
// Escape the string for the regexp comparison.
- blsStr = regexp.QuoteMeta(blsStr)
+ blsStr := regexp.QuoteMeta(string(blsBytes))
// For some reason we end up with an extra slash added by QuoteMeta for the
// escaped single quotes in the filter.
blsStr = strings.ReplaceAll(blsStr, `\\\\`, `\\\`)
diff --git a/go/vt/wrangler/resharder_test.go b/go/vt/wrangler/resharder_test.go
index b4a939775ca..4c47b3ebf14 100644
--- a/go/vt/wrangler/resharder_test.go
+++ b/go/vt/wrangler/resharder_test.go
@@ -93,14 +93,14 @@ func TestResharderOneToMany(t *testing.T) {
env.tmc.expectVRQuery(
200,
insertPrefix+
- `\('resharderTest', 'keyspace:\\"ks\\" shard:\\"0\\" filter:{rules:{match:\\"/.*\\" filter:\\"-80\\"}}', '', [0-9]*, [0-9]*, '`+
+ `\('resharderTest', 'keyspace:"ks" shard:"0" filter:{rules:{match:"/.*" filter:"-80"}}', '', [0-9]*, [0-9]*, '`+
tc.cells+`', '`+tc.tabletTypes+`', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\)`+eol,
&sqltypes.Result{},
)
env.tmc.expectVRQuery(
210,
insertPrefix+
- `\('resharderTest', 'keyspace:\\"ks\\" shard:\\"0\\" filter:{rules:{match:\\"/.*\\" filter:\\"80-\\"}}', '', [0-9]*, [0-9]*, '`+
+ `\('resharderTest', 'keyspace:"ks" shard:"0" filter:{rules:{match:"/.*" filter:"80-"}}', '', [0-9]*, [0-9]*, '`+
tc.cells+`', '`+tc.tabletTypes+`', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\)`+eol,
&sqltypes.Result{},
)
@@ -137,8 +137,8 @@ func TestResharderManyToOne(t *testing.T) {
env.tmc.expectVRQuery(
200,
insertPrefix+
- `\('resharderTest', 'keyspace:\\"ks\\" shard:\\"-80\\" filter:{rules:{match:\\"/.*\\" filter:\\"-\\"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\).*`+
- `\('resharderTest', 'keyspace:\\"ks\\" shard:\\"80-\\" filter:{rules:{match:\\"/.*\\" filter:\\"-\\"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\)`+
+ `\('resharderTest', 'keyspace:"ks" shard:"-80" filter:{rules:{match:"/.*" filter:"-"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\).*`+
+ `\('resharderTest', 'keyspace:"ks" shard:"80-" filter:{rules:{match:"/.*" filter:"-"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\)`+
eol,
&sqltypes.Result{},
)
@@ -172,15 +172,15 @@ func TestResharderManyToMany(t *testing.T) {
env.tmc.expectVRQuery(
200,
insertPrefix+
- `\('resharderTest', 'keyspace:\\"ks\\" shard:\\"-40\\" filter:{rules:{match:\\"/.*\\" filter:\\"-80\\"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\).*`+
- `\('resharderTest', 'keyspace:\\"ks\\" shard:\\"40-\\" filter:{rules:{match:\\"/.*\\" filter:\\"-80\\"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\)`+
+ `\('resharderTest', 'keyspace:"ks" shard:"-40" filter:{rules:{match:"/.*" filter:"-80"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\).*`+
+ `\('resharderTest', 'keyspace:"ks" shard:"40-" filter:{rules:{match:"/.*" filter:"-80"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\)`+
eol,
&sqltypes.Result{},
)
env.tmc.expectVRQuery(
210,
insertPrefix+
- `\('resharderTest', 'keyspace:\\"ks\\" shard:\\"40-\\" filter:{rules:{match:\\"/.*\\" filter:\\"80-\\"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\)`+
+ `\('resharderTest', 'keyspace:"ks" shard:"40-" filter:{rules:{match:"/.*" filter:"80-"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\)`+
eol,
&sqltypes.Result{},
)
@@ -228,14 +228,14 @@ func TestResharderOneRefTable(t *testing.T) {
env.tmc.expectVRQuery(
200,
insertPrefix+
- `\('resharderTest', 'keyspace:\\"ks\\" shard:\\"0\\" filter:{rules:{match:\\"t1\\" filter:\\"exclude\\"} rules:{match:\\"/.*\\" filter:\\"-80\\"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\)`+
+ `\('resharderTest', 'keyspace:"ks" shard:"0" filter:{rules:{match:"t1" filter:"exclude"} rules:{match:"/.*" filter:"-80"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\)`+
eol,
&sqltypes.Result{},
)
env.tmc.expectVRQuery(
210,
insertPrefix+
- `\('resharderTest', 'keyspace:\\"ks\\" shard:\\"0\\" filter:{rules:{match:\\"t1\\" filter:\\"exclude\\"} rules:{match:\\"/.*\\" filter:\\"80-\\"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\)`+
+ `\('resharderTest', 'keyspace:"ks" shard:"0" filter:{rules:{match:"t1" filter:"exclude"} rules:{match:"/.*" filter:"80-"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\)`+
eol,
&sqltypes.Result{},
)
@@ -283,14 +283,14 @@ func TestReshardStopFlags(t *testing.T) {
env.tmc.expectVRQuery(
200,
insertPrefix+
- `\('resharderTest', 'keyspace:\\"ks\\" shard:\\"0\\" filter:{rules:{match:\\"t1\\" filter:\\"exclude\\"} rules:{match:\\"/.*\\" filter:\\"-80\\"}} stop_after_copy:true', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\)`+
+ `\('resharderTest', 'keyspace:"ks" shard:"0" filter:{rules:{match:"t1" filter:"exclude"} rules:{match:"/.*" filter:"-80"}} stop_after_copy:true', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\)`+
eol,
&sqltypes.Result{},
)
env.tmc.expectVRQuery(
210,
insertPrefix+
- `\('resharderTest', 'keyspace:\\"ks\\" shard:\\"0\\" filter:{rules:{match:\\"t1\\" filter:\\"exclude\\"} rules:{match:\\"/.*\\" filter:\\"80-\\"}} stop_after_copy:true', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\)`+
+ `\('resharderTest', 'keyspace:"ks" shard:"0" filter:{rules:{match:"t1" filter:"exclude"} rules:{match:"/.*" filter:"80-"}} stop_after_copy:true', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\)`+
eol,
&sqltypes.Result{},
)
@@ -347,18 +347,18 @@ func TestResharderOneRefStream(t *testing.T) {
)
env.tmc.expectVRQuery(100, fmt.Sprintf("select workflow, source, cell, tablet_types from _vt.vreplication where db_name='vt_%s' and message != 'FROZEN'", env.keyspace), result)
- refRow := `\('t1', 'keyspace:\\"ks1\\" shard:\\"0\\" filter:{rules:{match:\\"t1\\"}}', '', [0-9]*, [0-9]*, 'cell1', 'primary,replica', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\)`
+ refRow := `\('t1', 'keyspace:"ks1" shard:"0" filter:{rules:{match:"t1"}}', '', [0-9]*, [0-9]*, 'cell1', 'primary,replica', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\)`
env.tmc.expectVRQuery(
200,
insertPrefix+
- `\('resharderTest', 'keyspace:\\"ks\\" shard:\\"0\\" filter:{rules:{match:\\"t1\\" filter:\\"exclude\\"} rules:{match:\\"/.*\\" filter:\\"-80\\"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\).*`+
+ `\('resharderTest', 'keyspace:"ks" shard:"0" filter:{rules:{match:"t1" filter:"exclude"} rules:{match:"/.*" filter:"-80"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\).*`+
refRow+eol,
&sqltypes.Result{},
)
env.tmc.expectVRQuery(
210,
insertPrefix+
- `\('resharderTest', 'keyspace:\\"ks\\" shard:\\"0\\" filter:{rules:{match:\\"t1\\" filter:\\"exclude\\"} rules:{match:\\"/.*\\" filter:\\"80-\\"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\).*`+
+ `\('resharderTest', 'keyspace:"ks" shard:"0" filter:{rules:{match:"t1" filter:"exclude"} rules:{match:"/.*" filter:"80-"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\).*`+
refRow+eol,
&sqltypes.Result{},
)
@@ -430,14 +430,14 @@ func TestResharderNoRefStream(t *testing.T) {
env.tmc.expectVRQuery(
200,
insertPrefix+
- `\('resharderTest', 'keyspace:\\"ks\\" shard:\\"0\\" filter:{rules:{match:\\"/.*\\" filter:\\"-80\\"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\)`+
+ `\('resharderTest', 'keyspace:"ks" shard:"0" filter:{rules:{match:"/.*" filter:"-80"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\)`+
eol,
&sqltypes.Result{},
)
env.tmc.expectVRQuery(
210,
insertPrefix+
- `\('resharderTest', 'keyspace:\\"ks\\" shard:\\"0\\" filter:{rules:{match:\\"/.*\\" filter:\\"80-\\"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\)`+
+ `\('resharderTest', 'keyspace:"ks" shard:"0" filter:{rules:{match:"/.*" filter:"80-"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\)`+
eol,
&sqltypes.Result{},
)
@@ -472,14 +472,14 @@ func TestResharderCopySchema(t *testing.T) {
env.tmc.expectVRQuery(
200,
insertPrefix+
- `\('resharderTest', 'keyspace:\\"ks\\" shard:\\"0\\" filter:{rules:{match:\\"/.*\\" filter:\\"-80\\"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\)`+
+ `\('resharderTest', 'keyspace:"ks" shard:"0" filter:{rules:{match:"/.*" filter:"-80"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\)`+
eol,
&sqltypes.Result{},
)
env.tmc.expectVRQuery(
210,
insertPrefix+
- `\('resharderTest', 'keyspace:\\"ks\\" shard:\\"0\\" filter:{rules:{match:\\"/.*\\" filter:\\"80-\\"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\)`+
+ `\('resharderTest', 'keyspace:"ks" shard:"0" filter:{rules:{match:"/.*" filter:"80-"}}', '', [0-9]*, [0-9]*, '', '', [0-9]*, 0, 'Stopped', 'vt_ks', 4, 0, false, '{}'\)`+
eol,
&sqltypes.Result{},
)
diff --git a/go/vt/wrangler/traffic_switcher_test.go b/go/vt/wrangler/traffic_switcher_test.go
index e1ae1ce908f..5bc336f634e 100644
--- a/go/vt/wrangler/traffic_switcher_test.go
+++ b/go/vt/wrangler/traffic_switcher_test.go
@@ -838,8 +838,8 @@ func testTableMigrateOneToMany(t *testing.T, keepData, keepRoutingRules bool) {
createReverseVReplication := func() {
deleteReverseReplication()
- tme.dbSourceClients[0].addQueryRE(`insert into _vt.vreplication.*test_reverse.*ks2.*-80.*t1.*from `+"`"+"t1`"+`\\".*t2.*from `+"`"+"t2`"+`\\"`, &sqltypes.Result{InsertID: 1}, nil)
- tme.dbSourceClients[0].addQueryRE(`insert into _vt.vreplication.*test_reverse.*ks2.*80-.*t1.*from `+"`"+"t1`"+`\\".*t2.*from `+"`"+"t2`"+`\\"`, &sqltypes.Result{InsertID: 2}, nil)
+ tme.dbSourceClients[0].addQueryRE(`insert into _vt.vreplication.*test_reverse.*ks2.*-80.*t1.*from `+"`"+"t1`"+`".*t2.*from `+"`"+"t2`"+`"`, &sqltypes.Result{InsertID: 1}, nil)
+ tme.dbSourceClients[0].addQueryRE(`insert into _vt.vreplication.*test_reverse.*ks2.*80-.*t1.*from `+"`"+"t1`"+`".*t2.*from `+"`"+"t2`"+`"`, &sqltypes.Result{InsertID: 2}, nil)
tme.dbSourceClients[0].addQuery("select * from _vt.vreplication where id = 1", stoppedResult(1), nil)
tme.dbSourceClients[0].addQuery("select * from _vt.vreplication where id = 2", stoppedResult(2), nil)
}
@@ -1072,8 +1072,8 @@ func TestTableMigrateOneToManyDryRun(t *testing.T) {
createReverseVReplication := func() {
deleteReverseReplicaion()
- tme.dbSourceClients[0].addQueryRE(`insert into _vt.vreplication.*test_reverse.*ks2.*-80.*t1.*from t1\\".*t2.*from t2\\"`, &sqltypes.Result{InsertID: 1}, nil)
- tme.dbSourceClients[0].addQueryRE(`insert into _vt.vreplication.*test_reverse.*ks2.*80-.*t1.*from t1\\".*t2.*from t2\\"`, &sqltypes.Result{InsertID: 2}, nil)
+ tme.dbSourceClients[0].addQueryRE(`insert into _vt.vreplication.*test_reverse.*ks2.*-80.*t1.*from t1".*t2.*from t2"`, &sqltypes.Result{InsertID: 1}, nil)
+ tme.dbSourceClients[0].addQueryRE(`insert into _vt.vreplication.*test_reverse.*ks2.*80-.*t1.*from t1".*t2.*from t2"`, &sqltypes.Result{InsertID: 2}, nil)
tme.dbSourceClients[0].addQuery("select * from _vt.vreplication where id = 1", stoppedResult(1), nil)
tme.dbSourceClients[0].addQuery("select * from _vt.vreplication where id = 2", stoppedResult(2), nil)
}
diff --git a/tools/check_astfmtgen.sh b/tools/check_astfmtgen.sh
new file mode 100755
index 00000000000..caddeb61808
--- /dev/null
+++ b/tools/check_astfmtgen.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+#
+# Validate that the current version of ast_format_fast matches what gets generated.
+#
+
+source build.env
+
+first_output=$(git status --porcelain)
+
+go run ./go/tools/astfmtgen vitess.io/vitess/go/vt/sqlparser/...
+
+second_output=$(git status --porcelain)
+
+diff=$(diff <( echo "$first_output") <( echo "$second_output"))
+
+if [[ "$diff" != "" ]]; then
+ echo "ERROR: Regenerated ast_format_fast file do not match the current version."
+ echo -e "File containing differences:\n$diff"
+ exit 1
+fi